From 97143f97477313924e71d4a82fee9ed7932b817c Mon Sep 17 00:00:00 2001 From: Lillian Skinner Date: Fri, 15 Nov 2024 16:39:57 -0500 Subject: [PATCH] Nothing of note --- .github/cidinfo.png | Bin 0 -> 16563 bytes .github/filesystem.png | Bin 0 -> 16206 bytes README.md | 7 ++++++- arm9/src/main.c | 33 +++++++++++++++++++++++---------- arm9/src/menu.c | 1 + arm9/src/message.c | 1 - arm9/src/nand/filesystem.c | 6 +++--- 7 files changed, 33 insertions(+), 15 deletions(-) create mode 100644 .github/cidinfo.png create mode 100644 .github/filesystem.png diff --git a/.github/cidinfo.png b/.github/cidinfo.png new file mode 100644 index 0000000000000000000000000000000000000000..2ccc35909ce2f52b59d3446bd322fdc605579a6a GIT binary patch literal 16563 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 literal 0 HcmV?d00001 diff --git a/.github/filesystem.png b/.github/filesystem.png new file mode 100644 index 0000000000000000000000000000000000000000..1eff239c65d10ddc0abf9efa868e3f4db3a608ad GIT binary patch literal 16206 zcmeIZWmH>V_bwVp8=y!^X@Out>R55N(n2Xvw76SvhvE?0;!bf1lp-ze4#Az^?ohnA z6T(e@?_b_=&beRiIA87=hcOsyve%wV=bFzm=h_4-evl@~YlSy-C_02*K8-0@T&%8t6CtQSlPWCsN{Qk^1V zVi{RVkTGALWW6CJ2)XyZ(=W)6{^@s0@&2IaA&E+F6o*5fGcsNfOYD2^Un6dX^bw<6 zC^dC;7j>6UE`I<>ed+Mv;4hjuK_L;a8m*LIx9f|Lr5pgx0S@O7j`dhZ4W$YUhUfQf zasQTOQ3_CTM5m?`eY*JPcCnRQE|d@#;3#EpV6UV2&>w~4S40wG*bem5%?y3k(N$pZ z1D6EEDSl_8aA}A~r_mocdGPZi-6wUYJLf<@*mq?}Cg2sA!8y7;L-7shm}o>Qm?TFU zhzyo0QBoa?Hvn9)-lv0nc?N1>J{}@K2c{0)MnNv5pT<#L;S~>5rVW(m`RZQbEhMuyflXI+dn<$$ZMXovt$|2$#Kn>(_PM?})@_lFr| z*WmMAyU=|ed*zh7C>(ZYGVV~8ekzXK#-{2iG>)>h#8G#HJt*W_M1O4gRbAnzpePx1 z-L~8es_J{+#Rc81qbONnt`fQEXzs8;(!B9NuDnDiMaVLQ{LgX~+lHrHL(-0xJ~zkH z5%)AGt5j%(US=qR1{2$`O(XjZ7oBF5)zL5m$Kl|f)#{tv0F^(flbxRz2xy_p>nT-s~(U_aNj@AMNC^V6F+7= z$rc-{%w@#aw2{~OLyEJ&$bWC@^SiZAt(L``Vl%=m)L&lTvj0*20b*DUf3yAm`ZfiV za>dv2Fq6MP<$;gYL&M8~;L3I_1Dg^x4NY$741Qsxt9bg;cONBpGF*I7t9Cy9+WjK^ zR{fIwl-2E}9WEA%2qhJ)CqP z8Gqc%dyZL+^fF=hHnBylp>$AMkpX$f)}KIPeNiOocOuX2JI&Hlu|MU!6G*W$-rLb5 zyPNgf5}#K`RkwW4UV>f7U1-Nc>w>o>TmYnFPgI{-0$dF5-fHUFsi{xe*%alk28*u^ z-O4W7p^7v(Km7jED-?&YvN^0+i{qk7v^LtVPr1ld!z)6W74rJI##fd@kM%{IkV3;B#@q2HN zPjil;(pFfl9`C7GtLr$MuWKvU9 zkI9QNg6RYr1vW;$nBpk?sAjHmE@qBdPCPEyD|L=)u0JSq zPAl!M?5^)h?9NW_Ocj?Y*c%A^5U>_#6}Ts$#SaoNaj>Co%Vyy`!f@(te9lk98d+S(!hQl{8^go#(Pc@&q>pJSa*XotE%vB8> z`^FtvQRw{ZgkTHCX#z1$(n!)u!Yk9zq@Bi}rkZ9D(DvE5Ofk&y`_^RzLK zT-Hq54Bf(;cY%^!ny`dHV%@N!B-;Sn$UXn`c)f-NNMrNKqf@4nl#^VdAH?P$7tm^e zQGjY2Q-HA)qZE!*V0dTP+wh;Am7T@%?ehNe+wxE4P37Co z+Ug%CZHgx6r{>Y~$#YG$DYg3!zS|6|(M!V{Ju9_6<-<-3eXaRZR{h%3LIc-TU<7zR zca&mdXG?ousCw9O6&_BO!p-;Fmg+F}O!ln4Hp$LuZJiLqf>FIK$4LYf`{no{#)!wX zwskUW3|yAvqTCfVhXM^^mu_12%>ycoW=w(%-#K)v<{6sHY}UV8Eg31Xs1s<6!3fMf zMJrx-wFd;Pk~T9oGHPcXDB&pS4u9JW+QhKF){d#33yqHK35SG^hl<=6YAb<_bxAn* zIHVoYbiehXmw0L@-J1USg_nqe*lY-+M9_q>p1L5ES_zw`m}++Zn7S>U$Wr9m>`f4 zeQlnL8I*M26!us!X!7uRi*b~&Zz+5o*E-UQsP}iBpDC=X_c|~B9`(INM9Y(8uVXKK zL8uJnrZ35%?O=K67HlkY?Gt@-_qv(xK+L{eHS0tXQp%EPT`-r~Q2zS6kzEI>x1=}l zquIy8aoq9C@nfDAo^x1I6V`Xy8_$bfgBKI4Qd8g0L#dz`bLNgf(M7#s2|vcj>FJRLXp!G}gM zT6>SRu$!c&azU6vdaSVeeCLAN5J_cj1%34Og*L5!o+TAa2BVup-$X*s(PiX${R6>+upiPw3GH zaxHL?As`6ffxWBN>)#jZ;lI>Lb~PrlN3#O&D_bg)j+ePy-p+ygW^S8 z!sZKrras(O|I62ix9B%^p*u1(u`5x7-;%yL#n^o`QM;!snqQWeQ%slZ@UC2cC+^Ij zEtU?^lnRf?{2CowS}c=j@m;gX{pZ`yrq$!DJI{Dks*cah@zkVoo^28T8uVZ@E2^^n zuvbJ!m#(L`uplbh)YL@n&3AcqX?u2dPGp}g2-3O>xob7D_WFzDbep|l=!wE|F(cg@ zJ!#k9!K^$S^~NfcWBj9T3l|Cmjlrfe+A)8W+g0L~p*A-2@d@NnMQJTzyM@P^9n*%h z#7hr3j$9jVWGKBn_r!^PG z7rf8WCa9ygMY6vVL_9;UbFOTP)O72eZpOotw5MicfD@nm@mBYwNZjW}o7lPKX!P7( zVGahnv!&;=L?YQmw!A$KHFu7^*%|ed!w(|{ny5VHc@_?GERFVOX=7igDDC4e2>B=? za^!q3-2SM{>(_EEBht)xnu5IJ(vGiP59@ndF;I5jBQ|&T$(yUnvJU`)1E%UX>W@EJ zg6tS9%n6+#>w)FVnyN(GLV{qXklK*&t{2NqOV{{3?cB<*V)>@Sr&FFp@xTkCMv$WI zhiS6Ovyr)9&e_B?krMU^LmBv*V{fey7g3L8dX)v0a`ev9=hW}2y@fm>Hr0Kk`_Y9* z(}jUpP5#|+{=}UJg|?fnTRhw9R1c|adG7Hon6H>vn&sFOnJ^gkz&b3$EA=XpO4CZH zE1~u^n{K^7T_uB^B4ksU#|Nh8yCoN5y9ifLr>~Px#Ea$BV4L3a(AnJ$J4lAOX|500 zi*AfsN4k$N7~h3RC8vD2`HNVXc_d5Z`{1*M?~f#d-6=eSl^#&g6esz~P|66$e~YqC zYK`Vh_b{_s=gsAYSDbInL+ZKO%5}xy)qSP-kTm#gv_J!}oA>U<{O zH}IV`{#l#WC&V`Y%~rvBEv?PDV0T)8?#W)rakZz9?pVV^_u8WK=|@#QvH2%fUnf&+ z=V~tZc-_TsBK8f==GQZ&&r92=z-Z`t*qF#R)cg9&h3aL}_3<|fJbgWAif^IdpqrDc zk*l)d%ai%xbN1XzF%REg7^`)s6^aglUSS6u%;ECJrRi1OZLlBpa{%?@*%!cSdKMGn zKc71dB`@$p!e-!|nV}rYiG5QBG?N7#i;-tn;?}RxS?vXDM2=Qeaa*w>Ppfqo)Fm`Yl^cpx zb5nm9<-YtbSj?NJR~%imm6@GEY!$g(v1zvBzTLOQ4k3cj@x14(;v(fu;-Y;eWR`Bb zZ1L0NYpI8s_h1f^7x|$t-9&7CXgzU%Eim;VMqA8JSu7+Ft+NHh3Wk~kIpFrnZZnk}1c+?RQA0&g~C#Cl};Bowlh#H;DA z89Hq|YqyrVpcI!<&h-+-wU{UVD@upIdS`l%`K`R?+5W&xf@=Ts;OR&m!uQ5~Mt#OF zzcX)r#2L5camAx0xupFdpseC~x|wU7dOFiZOQl1to6MU&HRDxeS~`BE+Ow4a`;B^1 zb?O==IA7OWk2nj`3uPZp+jj}}nZa@$a-FO>ZMOqqmxlEQy9?JN<|DC(-S<`Rdp%WsY|YT{ zc!V|irP<>M(q?8QRtSUXbNOf=_EC0i<^)y+6??_8kIKqwY8=X^ilM5D5j2-JT5U6n z&Ua4>PRWR=i1n$CliiZk5*sU`O65xG%-UeomYD6$(HA&HAY_s}_B}0mN|V?jO+C0 zScx!M%m-twf2J=Y_SjD(=x%lfUPHh^)PpsW?AMj=a&95(Uk8@(F92Q;jNjVs`aABQ z62uwg!$+I)n~cuv9wbbGnMS=F=OvE|ur^)=4eXd+K3kGHd~m^!{^$>22!8c?>aGEePtgiM?q!Q~`QLZRfc6!{!GJddTlXI19R#&69obWbxgp%w*46UuVzV?)v8%FR7ke zFkAgH|GE7$>8FsT^;p+1LNVE%uxgaZb&{XLC+{mOvDgb#{jhk9uU}wMQGiGwQ&Y^jL{x zSh^Y=c53L{dHmE`)+?qUri|ybbpmSPv84(5tZ6j;Vm9zo-WvHI^tXN0A=R3i*&pV! z=~azR9pq0c@$j?5%7*V{^=6GVN*d)fzE5=#K%@}f3;P=ic3fokxq-|JUyM{OLsrr-y@v$;bv{pAJG&o z+4j|3BH$4Bwd8`$u!lW|yn_umakq&uqY3@=_yx;=xM_H7MJo zVajZp`A5dILR1uSe)0wKyz=g~JOacidf$4YKbGpUGeed%3etw3%f@PsZY^(P+ zx0SbSx1(zmU4kziwf3)>^=@t^$BLk}GPQ9|o|q47ODPP^o{@o#biz~)zRt&`GqEeV z&~)m?=N^~nxRsrg!%Tw1>Ymt73&G6_XnS{$%h+vwS1wV6w^>>frPm`w+dv~`LIiO+ ze{kLZdIH=V*%tbxW2&P|Y`{kiovJmWH&c3Ipy`#=G*>2kEW4_HRD8^g(Z6=Bpc2!- z$!n_fFUpR9VXo^3WY0RXrn7OEP~8uD_2#&$Mrh9-7KrfhCD_J36X z!ft|C(ZZw zJ$ib2VMh})LFG46|DlfkON7zf+1Xx@o&D3NPi&vK*z6o(>>L6D0_?9i**Q5`v2UUF8fA?hT z^dHm0PLTa?4Lb+hEB61DnzM!3|BKq+nt!SNGp~PjC;YcDK}8EUQ)|sP7B<*b#STrB zhm%|QpKkuAn*Sc?zcfEOnL0|^*@U52v^%+qOj$V37;$1H$^qp((IhZ!i{ zc$0w;wzSJ>wZZszEiTK2+!-+vw2@-m~a^=^6I^ZLA=z3r0+vK zjCy!s!{FF(Ytyf%t9o6?-^3ZuPSZcTOgu%O9-Oa{^DgHea%r;bnekDxhmvv@tv-i7 zvF=-pgm?LXm+<3YB+eHr3JSY3Z+njbyiyT3*K&A5n+AmLVMB(4f~W!UaQIIwA5RI~YaLTgQGmh$9E>5Ib)(UwgUN$>~21a7}*Am-a=-M-q5velRbdyR$GzLQ=3 znSQ3DeEZ0?kt6qBO^e@`AFgDnkV2&QYdfDTwPh!~K0S~~JNPIzZk#slKr~+d!5BE2 z1>tW+j_u=Au)U6__sSS;1J`y55H)ZucF)611~u`&J+T8!@qeIB35s@sZIBjIRGai2 zXSe24uJryHnqy2iHLn5sN1fc^9bU)pIhkCFtexhlgY(jrLK(F~M#; z#@g#T1c7j@}guz1N<;5FjOD~96tN?}n zr?{n!dO1uKsfX{6wMd>o`v#CgTn9m*`xKGvm3nW+nU`4`XP}x+KFh@dbS)K;keU?u zY%`ucA5O%rC{YGM{pH|n`M+j;9U&hkY}UnUSk~~-R~FUaZVNK|XR56phZp|+EO`Oh z0%O+F&RVjluWHZ%`BSFLsR^PJ&I9sAU{D{@w`@i0>VP0+7fwT&Bri{%kic=mIq6l% z1^mQWvP%r0xYKd;gh1DZRupy`q)jD&m!7aI{k!rCn4b*|hk0@hwIRzuNDBT3qp~>^ z;<2zsBOC>9sfnVwcCe%|MpKQE=pT#i$#U91)W z_nN(Lue+8S-tWDBIZl50#ybBrcJuokN<+IXJ*t#$ zHQFd#t$`40jdPOY8l(=8?WBKBpi@rAc)k}|#|NNM{MHx9?Of?{Q9_J@fE~kzIyBn4 zmd&Wo(m13)P{Ir%4BpI@qwb{-uAAR7fF^kS$`e9w+!wU>!U%_`cS!0deya{f9KrcN zjcq25Lfi(W{kF16>3z04m&ZfJ&2Hr)^&)%$=Kh4AYwDhkj;gft6OREj9_2;{jBh|R z&OwTOj}mZs%fX2&OeB%kSRUN5I*yeOIs#lTU>7e{h%WL|kKx2d-<(;_ z(V9do762tqXgo~mfQ!2Eexrb+E^AnP6Q7w`m-`o=$7*JTkk!{Yhg|MYRm6(-VM`p% zcfx?5#oo(yum0Scmb#h#yNsFy2pbVTAfg>v#s|>hj8ebuc~DgVhQ=SJ9@2N=>xPBp zUJd;W^M>`qBOO5N_)_hs#-ML-Q(`~%jHkopX1?j?7Xbsg`hY?Ofsx9Y^CR%Cwl(+NAqwHsy`ok%7s0NdRMY2JyCpbl;(Dbt4nA1u;& zo(#S?PKkq&!|q%c_^PFtT2UUH111i3pOaCF$I@7QAZzvEZa2n|FJ)=EI+!hGVlhtG z**G;GqS4|w4Zb8nn-A!rOp(oZQu}g; z*-QXpa%fqk`{QdSq%d2!31}e#htIEimh+i4Xq{sT^eR%8DG6R}Y|z7wQ;xDebZ3hd z3zzWP>pyB`UoI1@5lx5j^Jw;{|1Mn*bW+xx`k6kNsg91iycGTiGLz_XcE$DN3)hFJ zBiW@0v$FTYf4YWHTluI$1>-Y8@ukf(`GY$sQ-dC9KYl;{iflGiGNHT0{1N*W z{Ccc3u(`a}DXd)M%ohrZZ@{V83!SQ#5Z5%iIMPiZMM*qO2~yVHE~%p?M=h( zD!`m7Zgu`1=X@~s2GEo3ch`^>+Tuo<8h3@JZ$xju6B!c;pnnT~vBtDI{CR-G%m4tU z099^LxpGOhC&E9rVQo16vx^m_#u-SF87~3E>jBV2IZd61?dD#HU|=?7e~tL!-;CIs z@<1KF2rI5ajSW~~NHvZ?_o;Km95|=ZM|;xknFE|H)P9a+RsCQTS88&>TK>3FfLKj^WAd)+;V}L+c>x+ z@zNus!IvbcG}QcIaZ#g-KqV%N7{{TgsO!RslF}03@oxP`3Hk5MmUR{w=3D1ioa(yu z8rVjV19|T6NGdJYiA5Ar5y+ox>q>7%C)J^DJ#p;ygYHZPO`4ijrMbG2$~mX$?r7Z) zGlaQoS4F@xu?RYHv~12{asvT*H4T;|TdLnb6gmfRBrK z3;MiRXFtRHsKtl!65fJW@BQKl98MI$RLYL8iY1fHMs_v{LI($qvADYC32@+FMRuqN zx-oP?vk9A`5++!0W9VusqphA#Tj-U1Zg|+74W_whC7+V+(rV)mv1mTW8a%alXgvRz z7ro2;5m@BTEb4IAUToE0A?Jh$O%&^8}OoMg2nqlQGso`Q;x7%)6m(v(g zP<$iK*!wWTjzCp*${lyTHdWf|7fmyIrJ`gAZ>H*D^!P1)=c820W1qj6bA674ICJ_z zA7l}ikom}#XG3wSOs3wZ!11`2KnF_$4whz1mY_L6k=fLR*-{IU4n|ho%eIfd+ee_o zb)p&L`0f9@H&{B-#|1H6?B?ul!fH!YAYOh-BW-)5Qe$c3k95BA8w>oKonQZ`D^U?C zmMp$tIOalN?VNsOf_U)#&*?90Lhm4hq|@Vgd(TCkM*ia7!2{8MoI|l_9z!|sgFGH} z9z72KaxsK4tF{J%b?b?Q<=7K`U|gqIJiAhm<(yZ z>PP(1_NcNMU}9U{s{1YWeS=CGEoGzBmWTM$1-S?UW#FxMOPCU!!gLi2u4??yd32&B zSeohEK~oCR-Z9echyCs;OR<#f*{P2eWOX@4fZzHnt5J~iEPD93Ri8(Pbw63*V)k2vmGUnaxwEXL3| zaJ&Se-(Pj()g|Wpc1s~3lvx}$x6HskDgZR&o$)#j5=Y9tE}(&1ij4<4UO7RP`?dHi z`}FUbC<@+)mc^clK_R0R39kZU6Old<{XXomus;pxVrV@2xx9nZT&5PzlW&GSK8+Ww z&~Yo3t#IS|+P|#RX%zEF9z0b{eiO56Uv;2~xO6&+Pq!&|Z@(9og_^#|a!~K09ZAu;+lo!WMsuSU8;TbHorG5l)7{3r z(mn5oggzkzwbEP$AV(10p@RSNN@oX~uI-2BF_zZqAI83@0YAt^&tIm|nCLaEO`(3e zn@>$Jn;d@SW&?6HHIM;r)`qdBkb3vIP7b)vn~6i*+NA;Vy;j&3CthKL-T;_12QbnE zNxT$2yYizSNd;oNr1itJ+R49&Faq@>pJM}IO4I%`v!&0JiC3Vd#U|gO9{U&Cua@}y zSgWSrCc{&)IG;)(JAfqr8!DF$u#FI{VWqVO4NFj!0g~7t)W$X1j2?z0rr+pL<|?@h zv;}Bemxpo#1+bC;dwepSmC_zKWt5`(1JVt#2X?!cjuBb^B_QOpyNmHDw|MXQu!$M!` zu61!9++3e0%=p~ioF}-jv`YO>+NF?wKp(LZB{TVu|CMMcUTRhrHBxDP_nZ=>rt>{0 zGvOQ`Cv}IYfk~hwk{VFHd|5?wV7ewdBZ+? zR2X!zlGd}gn5Tb4Yj52b{aWv z_v~;x?+%GI-YqC0j2RS$-Jsg_mSK0==9@n0r9ts_@v_2EGzEGME7d?8B1MH!)`;izf*a%*O&@IxOh7Ef_l3_V;B%aU zD7;!Z@lfkZ=)hr+*ajaJ`>quxSs@>z=G9>}osTJKUP;r%`_xUa`rIu1mad>2L$msh zSb9~#0x$)5=)euR*vY&270EM86YSfG@Q#*^UsXz4fwmZiB}R(E(9?V?bircD`$0F; z=)tScu{9To#l6it#W>P2rG;2uzuzW)t`GeFV^eukHOi2sC-dAK!sM`z_3*$Ig@j#n(tI9 z#Ok7;Z>9QVdDPg+6w`>N`(5=By2B&2sgYy#JJO~FvKq)z4!7YgYrbNHPUVRnWQ4ls zfG?wS>v7&FKK6Kg|N4kVBMhyKA$cX4OJNp^p*$f259$6|3)ebOf*gI!A#(-Ak=2&8<ERF>(o*Y zc1q#;edMl*C1@tj)am+xO-=`>(LboRfH8lAik%;4S z!=LF^%K~W4&SN)ykafFWhfDcQc4GKRj`8Kb}Y%zB9WlERN9b`@c zU^Gl2Ur5 zxa6ZxMU#@q#$1~|A>y#?ava0zHI~<4T5HDHfwI;rOQ+!<9M;ix?;lgJ0%)<24aeHA z7njkc=FU`DDtRAtai&X$_uA#aAgD-t)nhR2QAZw!CB`uS>OsWHSrHdnPrpjCkY!b1 zWfM~}5W60Efo~tcVvQd(c^cc@^fG}9ts6J`Y;~pJbb|8wcuXW2n|xsU9NLvC)1GZg zG*OQ3rr~I#aOwz5J)F+ThBaIJOo+98DZr*j4z)4eZ~;jljwuIV}TZ5`}Jhdfk zK1l4kF#UQFs4-Bpngqw=I0%XafLGdnCc+E1(xl1ErG(zdA%<-u~^8k~lsODs+)P1LMp&!L|KnO}wiJieP#10B1Zrcm zOeN#4^%`6Uy;u!qs9w_lw&68!`|U3_`v!~o^kez9FsSVMW&|KwY@%)g>K6~kj(|!C zdm8|T(cg&Sop$+w7hMuyAPmZH5#aT(AK6KCaZBsAI`C=B3~2`t#a=@hV<*SE;FVyD zExoWTyYugoHC(dIW6KMoM0hxMk*3^^b?dO@0Tw8zvE;VoaJ}9cTP|V2fY%H=|9={! zzlns)g+kmYKqq24*Ei>jzB0Ntt@P#B9UP>9odU6p$Q9)6?k31SUgCOjP<-cs1T=x- zm`Mh48ktA~9awwER_=u+H6V}ebk_#ilNz_{gu-czbBZtXZ&W7O?Eu*;=`jVzuYl?t z_hC@6H1`O%%)Yfu_1YqMbhu&tl|&lpq#YoC`cs26Co*9rnn3T{SRXaOX!kv6`}{(b zXzq~A`Kb`|zEjbPxHeA)m4(_Ou?Z>uD zIPUwSp-Jb1$Y>|iOWosjF@iHJ0Wz}1a-rwjsyM0r&zxVPOhVk92d282+eT73Q}iG! z{q6lm2`l0x(1ENRaM}zIW>T;`wi4N1@`n;Qzz0~km;qI_f+B1=uTxvhQim@KuCyGq zPpi?MCr?PY1p3?}_>+k0n2eX=(pl7=GGA)@q{3hL5@w|2@1&n-Q9OQiD1CUp_y_np z`NLru51Lfg1{?As8m06oQA-K06paIjb$b%1ZPrm`4?weSqJi*rYUI1bsha3;HEV7- z(PvXln)pLuqXWV9EHL)70h9+f-R$I%=?AU3ar^sVUZlUU)VklsFD#kaako75MB8u; zBF8|l=rHP$y9Zw%k#rT)i9PXxyys&m);cuY za9{(fh~l;f7y~)dWmLfTUr83#aXGl2-bLu#%IN`pPm&);`%ZUHdV zC}8ntrGR;$d=ISM&hJkcra;#Mwp2|Y+=f#dTOi&$UeJwO?IB007|!`4;YFbP%g$U{ zDQVexl-6W*BNF)aOox=WyEL`qmi*LNYl!hd&UD~sQ(@FeR0n0%v`S3dSpkMbFZz0L z^_xEK_WBOhorJZa1gVRTAorfC$ANb1V2Jg5%1=Gg?0DM}O^ujk^)l8TPvZ)7i-^>c zM?*Y(kIyeF&{FEk!Ob$T{E?)$3oQogF-x@ZC|%VfqqT)KMGM+=j^R2tl0}@SjgEz- z`-2<3T8J<6^8iur&lRHcKSnx~>hmWGFA51&j_oe>K9bpM&$SJ%dV%Vw#qG>#D)g?I zTt7jlm;?}qTR*E^gFVnLiymHsW9?1M#tu5DX0I(26!q`J0xj^`aUeYIuY-UO%m_ zNyLN3xP(`pH{-Uv=_`wkoeJuMz_|oV^;#n&g2R0fvrX-K0ITm8JN`;*EFM5ASRkU; zCSH#7Mq_?$CPy!J{WLFc>nEPV@ruZ@z*#6nMa23cnP^huj2Z92M)ZxPsP$xTIX=tG=JIzUpybK;SodEAz z7UjWlO**`Y&o8~=VrUa*$)*3)(0kLl@N7ES+l{V@|A+8P&_;3Hvx2OrK1JQ??yGL< zUCmSot3$N@-^KiMbSKqzshL3!hIEfRyUvGBz}W8`iG_alGK)-BU+XJN%(s3V7|-5y zPp4{QiUk_1-v(_d#UATp!JR+bjVtvlcWHpd5ao{B(!`zh=CH-5Up2 zvn6Fv9rjXWgowx%>zr+{PI*qM5tstM#=7GgUvMfMQuEj8&*ptH;IbFPg3|duoa+^^ z8jC>o)TboYpgk<>S;C0egUptAu`b>=YXLrhy!qQsGu|MQXs#0rP&Q*iC6F2fww=Ej z*hKg&7D{WvJ@9ye=U6Xqe@n*?lyv^KR2l5zV2* zC!6tq+$PKYXdG=uAAP&By7d4%&ROX1HH+>eB-DZ3Y+ip}iAKklQ@mlHFu%z=Kri($NBAp`D{{btKwx9BTbmZk9Wh zki-sb)UpJmYSG5iB2)DpN9a}`FfF=ixn>KGDeU0+^fW&a+gWU_ULZ0da^~~v7l{4i z5mhN+GAAC-13p`flRQ{;parT>iPPxOXr-fGN^)G5opkcAaQTN{wLJ^%;K@sOY2>hh zVLxD4y4ClCuu!!THM{__`x5?53$Pz{MPk7d(IxKMj1Ad0;&wx@@STUFaA-NbOd#q1QEe|L~ax}W3FIC)ZMSK zS9xFACZceJsBiI3&TqvjL?i4ltHSM{hd1`;Zm!wCaY}W3_0z!qgFFBr^Y+7=qSprg F{||IkR#pH2 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 3d509f3..f4b2fe8 100644 --- a/README.md +++ b/README.md @@ -10,5 +10,10 @@ This is the best DSi NAND repair tool out there, offering features such as: Why do these matter? You can create a new working NAND from scratch! No backups needed (but still recommended)! +![FileSystem menu](.github/filesystem.png)![NAND CID info](.github/cidinfo.png) + ## Notes -- I am including my own hostile and outdated fork of libfat. This is to block `nand_Startup()` during `fatMount()`. Without this having a NAND re-mount would run `nand_Startup()` more than once and break every NAND R/W function until reboot... \ No newline at end of file +- I am including my own hostile and outdated fork of libfat. This is to block `nand_Startup()` during `fatMount()`. Without this having a NAND re-mount would run `nand_Startup()` more than once and break every NAND R/W function until reboot... +- I do not use the release NandFirm/stage2/bootloader (v2435-8325). Instead I use newer NandFirms as listed below. These NandFirms are able to run unlaunch, however they will stop the installer from working ("unknown bootcode version"). Unlaunch installs carry a brick risk by sometimes erasing the Launcher TMD, so this will somewhat forcefully encourage users to move to a [safer installer](https://github.com/edo9300/unlaunch-installer). Normally I'm against intentionally breaking things but this will prevent future bricks. + - v2265-9336 (prod) + - v2725-9336 (dev) \ No newline at end of file diff --git a/arm9/src/main.c b/arm9/src/main.c index 89c7b8d..44932b7 100644 --- a/arm9/src/main.c +++ b/arm9/src/main.c @@ -278,16 +278,21 @@ int debug3(void) { iprintf("\n>> NAND AGING tester "); iprintf("\n--------------------------------"); - nandPrintInfo(); - if (!nandFirmImport(true)) { + if (success == true && !nandPrintInfo()) { success = false; } - nandFirmRead(); - if (!repairMbr(true)) { + if (success == true && !nandFirmImport(true)) { success = false; } - readMbr(); - + if (success == true && !nandFirmRead()) { + success = false; + } + if (success == true && !repairMbr(true)) { + success = false; + } + if (success == true && !readMbr()) { + success = false; + } if (success == true && !mountMain()) { if (!formatMain() && !formatPhoto() && !mountMain()) { iprintf("\nNAND mount failed!"); @@ -300,19 +305,27 @@ int debug3(void) { } else { nandMounted = true; } - filetestMain(); - unmountMain(); - filetestNitro(); + if (success == true && !filetestMain()) { + success = false; + } + if (success == true && !unmountMain()) { + success = false; + } + if (success == true && !filetestNitro()) { + success = false; + } agingMode = false; - + clearScreen(cSUB); iprintf("\n>> NAND AGING tester result "); iprintf("\n--------------------------------"); if (success == true) { iprintf("\nAll tests passed okay."); + setBackdropColorSub(0x1FE0); } else { iprintf("\nTests failed!"); + setBackdropColorSub(0x00FF); } exitFunction(); diff --git a/arm9/src/menu.c b/arm9/src/menu.c index 7b21b28..8d00773 100644 --- a/arm9/src/menu.c +++ b/arm9/src/menu.c @@ -367,5 +367,6 @@ void exitFunction() { wait(50); } clearScreen(cSUB); + setBackdropColorSub(0xFFFF); // Restore screen memory here } \ No newline at end of file diff --git a/arm9/src/message.c b/arm9/src/message.c index 2c7454f..7b8d6f8 100644 --- a/arm9/src/message.c +++ b/arm9/src/message.c @@ -140,7 +140,6 @@ bool randomConfirmBox(char* message) void messageBox(char* message) { - clearScreen(cSUB); messagePrint(message); } diff --git a/arm9/src/nand/filesystem.c b/arm9/src/nand/filesystem.c index 2d0e64e..4fd7341 100644 --- a/arm9/src/nand/filesystem.c +++ b/arm9/src/nand/filesystem.c @@ -408,17 +408,17 @@ bool mountNitroFS(void) { iprintf("\n--------------------------------"); if (sdMounted == false && !fatInitDefault()) { - iprintf("\nSD card not mounted!"); + iprintf("\nSD card not mounted!\n"); success = false; } else { - iprintf("\nSD card mounted okay."); + iprintf("\nSD card mounted okay.\n"); sdMounted = true; } if(!nitroFSInit("TwlNandTool.prod.srl") || !nitroFSGood()) { if(!nitroFSInit("TwlNandTool.dev.srl") || !nitroFSGood()) { if(!nitroFSInit("ntrboot.nds") || !nitroFSGood()) { - iprintf("\x1B[31mFailed to mount NitroFS!\n\x1B[30m\nSome features will not work.\n\nTry placing the SRL for your DSiat one of these locations:\n\nSDMC:/TwlNandTool.prod.srl\nSDMC:/TwlNandTool.dev.srl\nSDMC:/ntrboot.nds\n"); + messageBox("\n\x1B[31mFailed to mount NitroFS!\n\x1B[30m\nSome features will not work.\n\nTry placing the SRL for your DSiat one of these locations:\n\nSDMC:/TwlNandTool.prod.srl\nSDMC:/TwlNandTool.dev.srl\nSDMC:/ntrboot.nds\n"); success = false; } }