From 2550af0c999eadd17a95ce2e9f62d4881bfa1bc9 Mon Sep 17 00:00:00 2001 From: ApacheThunder Date: Sat, 26 Oct 2024 00:18:57 -0500 Subject: [PATCH] Add stage2 loader * Can now boot stage2 (in safe block mode) if holding L-Shoulder + R-Shoulder + A + B + DPAD Up on boot. This allows using built in stage2 usb update mode for "bootleg" style N-Cards that have Xulumenu installed. * This button combo will not do anything for regular N-Card users as they already have a proper stage2 section on nand and it will always end up booting to USB update mode with this button combo before xulumenu can boot. --- Makefile | 10 +++--- arm7/source/main.c | 1 + arm9/binaries/stage2.srl | Bin 0 -> 83456 bytes arm9/binaries/udisk.srl | Bin 598592 -> 595984 bytes arm9/source/binaries.h | 2 ++ arm9/source/binaries.s | 6 +++- arm9/source/main.cpp | 22 +++++++----- arm9/source/nds_loader_arm9.c | 18 ++++++---- arm9/source/nds_loader_arm9.h | 2 +- bootloader/source/boot.c | 33 +++++++++--------- {bootloaderalt => udiskloader}/.gitignore | 0 {bootloaderalt => udiskloader}/Makefile | 8 ++--- {bootloaderalt => udiskloader}/load.ld | 2 +- .../source/clear_cache.arm9.s | 0 .../source/clear_mem.s | 0 .../source/common.h | 0 .../source/crt0.arm9.s | 0 .../source/launch_ds_crt0.s | 2 +- .../source/main.arm7.c | 2 +- .../source/main.arm9.c | 0 .../source/read_bios.h | 0 .../source/read_bios.s | 0 .../source/reset.arm7.s | 2 +- .../source/reset.arm9.s | 4 +-- .../source/tonccpy.c | 0 .../source/tonccpy.h | 0 26 files changed, 66 insertions(+), 48 deletions(-) create mode 100644 arm9/binaries/stage2.srl rename {bootloaderalt => udiskloader}/.gitignore (100%) rename {bootloaderalt => udiskloader}/Makefile (97%) rename {bootloaderalt => udiskloader}/load.ld (99%) rename {bootloaderalt => udiskloader}/source/clear_cache.arm9.s (100%) rename {bootloaderalt => udiskloader}/source/clear_mem.s (100%) rename {bootloaderalt => udiskloader}/source/common.h (100%) rename {bootloaderalt => udiskloader}/source/crt0.arm9.s (100%) rename {bootloaderalt => udiskloader}/source/launch_ds_crt0.s (99%) rename {bootloaderalt => udiskloader}/source/main.arm7.c (99%) rename {bootloaderalt => udiskloader}/source/main.arm9.c (100%) rename {bootloaderalt => udiskloader}/source/read_bios.h (100%) rename {bootloaderalt => udiskloader}/source/read_bios.s (100%) rename {bootloaderalt => udiskloader}/source/reset.arm7.s (99%) rename {bootloaderalt => udiskloader}/source/reset.arm9.s (97%) rename {bootloaderalt => udiskloader}/source/tonccpy.c (100%) rename {bootloaderalt => udiskloader}/source/tonccpy.h (100%) diff --git a/Makefile b/Makefile index 1f9331e..7e900bd 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ export TOPDIR := $(CURDIR) include $(DEVKITARM)/ds_rules -.PHONY: data bootloader bootloaderalt clean +.PHONY: data bootloader udiskloader clean #--------------------------------------------------------------------------------- # main targets @@ -37,15 +37,15 @@ data: bootloader: data $(MAKE) -C bootloader LOADBIN=$(TOPDIR)/data/load.bin -bootloaderalt: data - $(MAKE) -C bootloaderalt LOADBIN=$(TOPDIR)/data/loadAlt.bin +udiskloader: data + $(MAKE) -C udiskloader LOADBIN=$(TOPDIR)/data/udiskloader.bin #--------------------------------------------------------------------------------- arm7/$(TARGET).elf: $(MAKE) -C arm7 #--------------------------------------------------------------------------------- -arm9/$(TARGET).elf: bootloader bootloaderalt +arm9/$(TARGET).elf: bootloader udiskloader $(MAKE) -C arm9 #--------------------------------------------------------------------------------- @@ -53,6 +53,6 @@ clean: $(MAKE) -C arm9 clean $(MAKE) -C arm7 clean $(MAKE) -C bootloader clean - $(MAKE) -C bootloaderalt clean + $(MAKE) -C udiskloader clean rm -rf data rm -f $(TARGET).nds diff --git a/arm7/source/main.c b/arm7/source/main.c index 1e0c962..3a1abef 100644 --- a/arm7/source/main.c +++ b/arm7/source/main.c @@ -30,3 +30,4 @@ int main(void) { } return 0; } + diff --git a/arm9/binaries/stage2.srl b/arm9/binaries/stage2.srl new file mode 100644 index 0000000000000000000000000000000000000000..5a52dd17f399f94e5fa4e76a19647c0375195533 GIT binary patch literal 83456 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 D9^-CA delta 99605 zcmds=U5pjiwddO$4~GuszZZ!J~U${4ho~Eu5Eo<9UrWX*7lb<>earwP&rp zYSmi%t7_NzXzZ}X*&ns5PVN2sueCqwoIY<}TK~U3TK}KU-19$|JpbkWhyTM5PW=1R zFMj*f$wsg(aD2pF}B(d*nb?j z7mD-vd=qnjnK;Wk&nooFZniJ9Uuz8_Wagr6RKeU72I>LqCf%u`0#U%B<2Uja_n?7( z@W0TxIfXYYef?Hp*J{~kd27aG8}+=Rfr!WzJCWDSS{ zem09E0R>b+3G0wP`p5r5heT`Bj^)@3WaI|8tug-C9~8v?DaCD%#iW6&0WVO)|6^6` z*#3_LHve1$G!kHYsb6f<(i$KgynMW{4ru4{=^7g7Cx3Kbc&lkM0aV7O8Q_mW>_0vm zaLHpnMxDx;J;wo0kZ%9fsr^=f&);Z(X9J`GJsPkeZ>Mb?P@7r*(gU1g_7r;xNab&z*uQZg%pWz-!p_82(5iqmAf{!{ z2xvaAe46`#<4RA^fBxhJh%Uay6@W*8KL+HFfyV)xxSxaeCCmeC_MGFs!FaA7f9}ry z%>+vLqXzJvQ3E&<@L0fIOC3vofailS5-2b5Ih=LF3|xHUUOWi?_$K59^qL^7gY3|8 zZVxFyMgpI@E)o7!;{bElabeCje|8#njO{5-C}slv@c|Y5;Z54~*4Ro`0QHn~D31lC zg67Pe(F`{N&-A#nDh9=$XM+e=Zq!c!e^vms3SZ-MfUp9%rJ-0;$F%eWSbtsn*DC1G zOrV-Sc!4toPijB)kKMJl24qdZeG-`w430nA3?ucqbBW?let=I&(SYp(B*$&$*wui_ zXH^SC%knjU@(I0qfh7L;Ca7C%5BUMq0l8S}HC!1|m-2Y<@^Nmx!~qQql0V)uPFwgE znYoS)e=ML%&3qn^;st~^r=+Ffl;RH9P3VTdzD%z(fn@%q0h|qp0$dGXKgzri*97)R zz`Y_q@WP<^^O}&%T9c=A!Cz|twLmBEY(V>cH_i0(*sS!qr8;J8s`Z_`{o1bUrEyQ7 z7avfIzxD$(BjgzY_Ly|89t&<-^Fis4ycY(~AKwTuZVLJVi@&XbR0TNvBkkpuvkLMU z?Y}Ir8p`VQG83rHA2skBXC%=316l`%%s%myRV`F z*XlX%(&s$$4#fo1Sb%OnGiK(gaW6B0uK4F;!PHgII`;#40^POb56~CMp)S%Kgik+dHzYGQXZe=~t1gS_! z(14jAi!Uhi1kgzB|8<+Y^8#Q=?GvpNfF(85Y`*lkfV>A#iV4nZcT?&7F z*PIpw@DpQhsUM5=SIz~pyd$*j$I?PLL|(K|XC{!$pU9I6_!WEssDhM$ucQHNGxv#% z1)BfM@Zgmc;64AKR+MZQ_iZ+Sw^ls=MY_UYQcT~DQ+9~82I4*-w|{JPj5?Q>GZ*@p zLItoFkXVdYQkDF*)e~!%I_K#q&GByJpO!!!kmX1Za_=smhFjJC-)_U;=L2|i`SX9a zZn?`?iffj80ZpIM5e;N!-Xkq%+VNQGmZf+mAoRntf)f5Vd7_NM5qlT%e3bkF%?7v+ zcwMl`%nF%4#h2NcAB0Xivny7U~lF+$Y3bIHoJFk=j-)KRc-vhGl%Rq z@Q6Srgv?f}RI``#CNnFnqk!Ow5bd7=x47!=^>IEY7T>H?fZ;FHMG2fDFJNq*h7>d6 zBW>{nHhanOSU@@;4Nwmk{g@dk;MPES=)H1W zE}qNtop8){fHC9FW8&|(T~l_`e(iY4jgB$bz-)k^Tl|^1#LSXeW9)};Db{zow-h0HKG(aC5EpO2c=pV%8 z_D5=7$WyA|k6u93$<`gGk4Lx`#bsVV6d-+JQn~#*V*vF*N}I}ii;jlof($jlpAT7a zZuKEcx6ACD_zG?}^+Yk|X3&YclZ%akitzyZ#${PIf2MP$li>>odQd3pWWM?a?X=Y3 zHDO!@q5(AuFn?qFmIt`%X#8U*uhmhl0@)R^u(qoC3wa(y0waKMj;CI0xf+0;M*bAI zWBvJ{v{biKMuWQCb$w<3RLtW5dno(n_$E2#o97s{lcs=N1LFTt`P4zuN@=;DqT7|a zRjC`rzMxh>HUHp}dm&d8&IArvYr?z29~EJmI&~G>PX>XVraQC=iz!>iG=wdQtx7%Pdq0>N5F%D(EzGI466z0vYD^65>u!J?uqi4 zA(!ySD&htBIfmStox&S+0}X58`CzUB8vigO*3bQcCDKnYnm=cc29F1GXn<&ZIsMylOlF`V5~w6Sw0E{%7EV>;*7(38&=s`8sVBApBho zTt!b{vA4Bu=j`^yfVDu3KYK-HXUE#o!)fjx`#fE0=7P2P_me$dOZfX5 zuxAAJe2`mG6^E%yX%hc4V1{hD9W1GxWzfync# zKNoNr#`sgY9u55dkP>+Q{rQyM4yuvvj}CnPRT@}6ojxDrmVQ3P>pfQiHTa(abFpl< z_G}<93NU|H1)=~>nc0Bn4Z=Fm{3*>nfw9(7Mw7wXUI4vCKNJw=Uud9%K9F_@u!qQq z&Pf0l%i19~Hz~m*?S{iE@VQqz zz#kPrlffF+&!a`J8i?~p4SY;mRqFy$0X}Tuc86G(mDxxu?fldnL2(T z*FcEBtpUxS)6f?=f97q+c5m1@u1QzO?VmETEtI4LZO7fFQ~1+F!`49Fea86g_Qi6p zCa7M7ziscV20ONQhQtq~s=zcM%-{9^{wRPtU=0w@tAQs2v7W$k){n)XX95TCAyG3y z1Km=W^V0dBXiiLqG=T1xyZ{ppx0{br%yppsdZUOvy^v-lNQqA2{;=L7uB!rX{AXQr z?2iG356C?t+p`~Y8)GqQz~K)Hn8LXr1kivEC2A0w^;32DpJ!&^b zG#8v`rG{J=^~uv2_4tzl&<~ilTN=PWIpnvms-)nL6;qjO{+Pa*|9vzzT8w#CSTP#V z=b!Y6ews%EAx|lq5ye$d)pk4%?Z*pQwe=HCcMEwAN{>`V(CHa?0^FKJ~YCtK$0m(>XEvNFl z{jLV^vL_687z0QJ)@V@f9R|psJOC+x<^!}c5DnDx0v>_NAPsO{PBRC;-}aLVC-wa_5@5`;`^Aw^>c-R=Voy3q_5rAkWChfIPCxsZ7m%*RtR^NNHAxvi^He!n>Fw>5xs!HI%?F(MQtCz?_g_Xwq0=!UGVzWV;^%gaFKQ`Jia zpBEI|#Rp(2?g#uM;6J+Kk9z@3USb&waD+tpR(pX8`)3W5%>$Ubia`N1NZ*_~JacaL z4}Xi{QmzEj!*2mQ;LYF#`BMc`q=drCxMX|;=>xsNid+MzfWObxbIz!RMMk^Gl&dl=v4vt`FdvP<7b2eAbX z{o#mx0^Gn+97>*@c>`|Z&QqUKc=A&Smq(90N%m}8zsi*;Kw%E?uOd&!WBio{%=m|+ zpbL`nh&XBgS8GBv0BeLi#B{(4xY5~cyucSn2`|3>^WXgQ-$0xh-V2T29XSVNh>KKO zXgu{j)WD9Xbs42UTlVIDeuK?`=nsF(>Y?LLeed*f^A`C#VCm_D=#Ktn`hy4fdKo2- zt-0?gYT%Ve`GCY9Jn+LKhi85ZvXL@MjSU;;t7d_UKaLNs2KnfD}$?r7tk=f;GdsfuxAZ~V;qLyzcEzQz@=G@ybK zrI_CFv`PQFg~pbH7vZltpo~xrHs_zLIeh$!y>b;y8P3N)TV|JH?%|OYFe!QEQFG<& zvt_4_wq`zk%B?rNdVZ|2XJpdB$wPiMR;LCM=Ko3*1fOwoECYHtg_C^&D?2te*p!@a z{E1lcgW(d8$~g<{xr3JuNuQoO_&Y`U*qY+VGBEE`#~(WF+dA8tYi|ZibZzm2 z2R6^#aX=wvvC7YuiCHf+?mMz&hA}TRz8JmMd4IHc1uuv~U|^Tj5o7aHgG zu9%i9zq0zY5lrsmA6fHGTWer=_3-L1zp?6D^V{clk2FWZUfkmHS=Fp>cBZK_}v(9R?~Hf(EP ze*2ZJ80NP(#)BG2B3z*Zbn_C}EePfEl#Jstldop3YsC3?UMNw(3vCMG=qa@s)R|O4NmOp3Z?mK#HO+NlFG(ZDtXh02IR+8E|jN#9l=65&DSRfkEDO(SW zv@~}4Q)N`a$T+-Jjldev-aTJ@mw1FIf9KQ+1zdmynDczZ_yJo3_I#kVcdqqtHexgT z-~sdob1mBsaGlSVU0%0-*ZN&2Coi;Nt!B*!^aLMpnq3?`&(nY&8Ah{PQz9>1=}XSl z0NuoM>(CpxoJV_d$wfLR2C&$6^fx0^b&}YJ)U7WgQ`7U&O z0-z1w+)vgRU7JFk?H?5&^wUyg@*{g7ct)T3MY;s3J4=1VKSZ9<#^Zd;26O{(GspVn zvv2s9!SaX91^dtpptWBHa#*H;~rZnJ_f`y z>q9OgfdlZR4}5di_*Z~;w%xxgf}3p$_Z`tz3_JX*Z??4v&bDy7pctufk^mZL+wNaa z03TT+EVt~nsBgA%quSpegE3#ubG`p_*}BoSqidILfaTyGcJXO(nghUE=<^$S&=!vA z3jSE-0_^_Le9dNQJb3OB=m@Jq_UVf=XtGfFdMr1!(FthkI(@V7tzm z2JW>S!T$S>o<4Z);OYIR_a8p=X|X+k=4{UZE;h54+7h_6YXX)Ft_F0C%bSHIXduxK zj19jV(?ACIRBQ>1HA<#|aaB|)As+<10U(h-R?9a6EPe&sUP`m#Wc#lq(FY&sr%;7G zr)Uar%GQ9j6ws5xpR8Fitrmx{pC^6*?Ehj@6TY>hN&`op6b-E0d(oN#*owfV0FNQZ z!WuyS7+@l>9Rf`Podsc>JRQ;eM}kuX7y~9jTY->Z|9qO63>3KfLce`R_`^rvf&sk% zbLY_j7lw2292Wh6-uFj~=MINwGD;CYS+fN`bRoxD`^mNE{@>mjytM%kWuw}2% z)ajLb?ajbzmRHak7#sHH1DRS5E*a;LvJkLUK^pM&K;`HGa0FnK64&65Ck4lWUNoWk zqol$b&b^+EC|Qv+FPvU;L5!_ zA7v3;92Y&5Y2eMxnmW!0UMaQ|#xiG10LbUT@KW1CHt({W_6M9M4?wd3p`SGV>*{^i zfXg2>V1MY1azq`c9P)btv@Apoz{hE3PO1I*OW%J}`GJe$wZ%eCIIk>E*elpDlw2L!;)1S@msi>}c$OO+m2k!|KuAtzAd*$>Q__ zCntsFwQUoVZ*Hawzr7N?0#K(dgoVa)>t1ZWRXlEBjlh7u8v}HA60UG9f`_J?OTj`1 zEHXus(NxFW$FbN(7^{WlKP)?_T{#%78N`(Vt3e$;zX@T*v^HAq$v-Z8>528gD)0ZL zPmC5Q;bR)lt-Jm>kes{-Pw+R-$b#?Ij$1qE3Ok1<6v=nDHDGLidnI38;%nP*%pao< zgJgePb`ah($Q7q)@a%3$7hKsGF`h63GC5>^Ezk{yYZ)y2SY~G>rAoT>8GfCxcY)-L~G$vo3FTk3F$$6k%K@lgr+Jl^GSFhJKQ6nr4a*y0qpnIj%(X6WEXcec3gklC}8|G zklY-6l6uR*Eqk%rwQab$`R+Ch>w)aWU6e)zAnTDm6O*@gTwaF{TJEfUVif8?z?GKN zeCY`a*B?jBAHuPNJKo*Kr7vaX@X`&hZiJ`ywU_8*^CQOMaS_H-d>xl-pn^Z1%x2jm zX-`S!x-NgRd#wO9DO0wO({t1ce8LJI!{S!^pK-L1*mB z=+Jsl!Ft%B!5_oM0Immqa}Azo;^wvqjXfChwBd~W@!KlJbI(0UA4_qiO$f|DJ@(=D z5AzRZTrmp3;}ky3;E+BHpWVSJdTswt8*#$j_5*QmkiZ``@Pf5=iYtM&k{pNlgXed= zK%oIk0rbajjS9@ec+>z+%+A6?7c(OueY98woedgUqvr*edUt^xBa%*C1kc02NPz8iL;MRQs%#nliz3&+4~E3@j(iJOT#Kxvwg zH8m|x8wJ$#0{AGVF+RVKufZ`%P`_#w)Zic2KnY*VZv^Va_~S>Fg}fdQm>$H;*NJI< z5Zl(V&&up9|;R1G1K9<~r6MK+;|C@2dt%_~+kN7cbzZ92FQZfM2ZOAe7^&68XOPZNv@#oYrva(-X3QMrS(er;eSlfXv^HN6c7Y z_;;&-*qpGGxUGju{-*j!i&41zF|Uz%X;wp|Rw@6O_1ib0M*!yo=(z?$qX3oF82^QO zEH#23#z^K*YRLI_uYevkkj5YV0L%q)FF+G*8$zWHy5sLEK>m;n3sTdUG_8stpDW-1 zSi7r&KG?sj1Q-Ee={dhIJ_gu6V99vFUxtKkMuZv`-;Mp}moHWXsDMS{?<#tK3BSWEp+~Uo2zexAy{{#GC4d^m1%V&7dX3x3W^8xRV3?`@|+5QXJAoqN!9aKTZ zc;NVf3ja^T2{9KX*wS^g@66uP;V`E8adpSOtc^y)f*?{#h#t#0!w7 zZhig-%qVaIW`!J34>l6SmZpP5{>VPYKk$J>e@Be^eNp54T?G?2)jzp9?c$Xk3scr+kIc=N&B{#h>>C&ICu&Q?sZu5H_UNe(pd zf~$ZC|4BzCu56-tngLwdcO`*6Lbv#{=lA2fI)G)HZRfFEC4Yy!{0ReB0i*}{t$RTv z5GBP&EBJG@^4Mk0j>(Rp7J30#4=T73{!zZ_)L!)n_@SgDVJ~1t1WyBK{jM_l%KtT( zl4uQ3+E#+mfGD7ZKT;J1NJ`Q66@W8Z=#vI|=a0io zg#w7TJtE{~edbRhW8SeZp&OOJpX3Jft+0P>>skk#*2nYoda!?+KYIaO6<}JMcqxCb zD3%{er7FRh50F>r4}ZLL_@mw0GpM;CE25P-g@H+favTXq*#ltAItayZyaVgO9{C46 z0(yWLf7=6KE}P${rvpsfjYHg}EL8#CoUnDEJN~kjdZ2i)K4Ogl6IM=C;NbT7voI1! z$93@noXt82v8OVlfXrPG1}xed<=OJ1G4dxn7rU2~s{r87p|eLiTUVj zhJQQ8do*5K3jr12-?L`=9Q#Nt{{G?el4>Qy&M%a}``_Iwz~#RrAOFj(pRp_cRJ3HA z`KNgTw(_bt;suH?qY1&d?Mt1+6m~ze*D?LAb37X1Ph?~Cq&&5roS{>N{i7Ukx!8>l zSke>)kRPD=AKJh80G(#`7(4uJA3!5b6kjJcx904B((?htnS2GVB@oAU;4+i=+YMZz}-RP>;OSp5Mna!7KaN?yu~|z_}Xy*%w@a zRiT71dABrK39kL~i7}4dmy6Bol;NKjG==`eVvPl^{j)C+rZrM(Pf+-4@{(q_CH8-% z*crspKoo!}mv=1BI3w|%-2UmyweD;8tlcxI58?CCVCwd<3?G!rUGca{D)qsQRP!fQWGoJL2o%o)c^$6rCLM6hJB2a3$MQP-v2t7k zwG_a%j##+|g*T?O56Jm*1sDk&El8dq`P#5cYI+RK-=7Cmt_PLJFP;gQR^x1t(U!%A zza||^yMBPigEIc^v7jEj@js#h2IR&}SX1XZ_A#A9s8q}0PldvqQ#RwYT#^!O{=Od& z4eR?a(xv=UG*H+-izLQhm$Mf@!ZI&#c~|E_5gz{%KTx!~u+=N%%AtERDjq&r^0?9=TDmi-m5hS46A}i0FGrm(7wUegwjETKl^}a zT*Wo@c*cT>v!^5Y!DEIgN3YeTDzG*#|s=)gv|L1o}MSj{!b3nHWR^>(wlPR4`&$ysHdFUFwzb z*C*h#LEU$dzj*&8@Cnd)&v?mM+k1hQ|M%=4w+_9_giDAxk+=Et5nBg&F4_JA{Bb-` zebSWza{j4az*dPStaV|hHAXKT=U-UAJil`Hg-cX`^FBAsn-Zf8vnPy7DEJ52=hfT` zh4R|sU7JVNvht6yq(0*illUVzl# zYNw1m9?N}){bO2Z+wbJzY#YN#_(0J~lcGG9pe|;uFwt6XhA=Lr+=fXC^m(9g4%UC? z$Ig#2dyc!)01YqnD*QEX-!GKz|Jznxo$E#e4u8A^@r+%}w*B;6L=TzeI!?6S>D-#S ze;UK>soPVxrml6~G2xRA<|vRx-fe%<;qWe~=Jgf^Dt)K@ViUtpTkk=5y%o;=6pmyE z&4&e11roaBkDfrdbIR2Nm*={O`~Pa*TtiEY)XuLlh*BQlPa2RaRjG6ha80EJn?L^j zhIcymPam1VaCnAwfLgen>jKMeO(FT)7|an&VaYWJrW9VUb&&mgEz$_3?Htz5u-c2L zfnrL)UI6w1{7^X#gfzg+197GvEe8(oX2x}5`24H+44nNMzzE}KrYFrhO{^Nc;I14} z=*^gLa-0=Y4iUv{>vreJ%(>&=eEQR;AUsI{`TuCYl)OLsqo?kl9zBRh-yfCmqo;09 z{b)bt--3XQe-FPCj_J2XNB7_E;4#WU%}$nQH~;vtKX1CSyV3_FuLr{3z(ZWcpHJ}l z^O5UejW`O>XmvWupFT#3R0G1X)L_f3rVfO^Et#`z^aA>4$ncNJ|Gs@Y{}EvR)AGmG z-0s*vLWW0<4S%A38*uddpL9lxpDcN6^!Mu5Lb9=8ogH3%emjJGEC|>?dxWST5G-~I zpBM&0D*wQ#VeZ9@5Y~nz^J6|%!rxS}NNXj8sK?4|v{o+0A1l3MG@yTQ2-)7h_tupC zn+9XUw>$5v-!S-^{ZQ7-TJGs^SjS8Z9k6k z=k-9J?LWky%fvVMCCoV%SMdi4AyrL2l#Y=vD>phQ6jDG(f7TPy!>t zIIu62X8%lBU#vXMXJ8y-kL3ycWh5x0+2yg!8mI7^TNJdDI14jour>ObcXq^-n<(T=mOUpn=B|G*F=c?Ge1$VL5+Ik<#VVV@GWb z@ZNX=e^oU)5|BS&a5ZC_zdl(j0Q~^Y_r-%VabE+kx871?0V4eM<4bqh8o0Ce_xUdv zf&JS88D6ccCTpO^2w_1g=WkUFO&@BM*&1MC-G*F=mz`J<-NlW~UjG%)5XS!)| ziUMkl7uEbp2dsjy1{NBcH~NOL;g_smj>BnvW6v{_+QDPJ?D9JH_XE*@9vgf$?7p(t z{80sDyz~3;DVgF=56y7Ds!R)M3K0LmW*muA`RmhPY=->6Lc{(+vV{h^a;=Nu)fk=_ zeO(Rm#{T6e>nb#`k>>*?D+8gd*>hTsQYy0w`swe>uf>QJe=g#fb}l(5AEo)zL|qM( zsG%GFs0Gtu-cHfmP`RQ}_~c#!|)|IQi@R!;&H_$2fe)v|2_LuoOcfbf)*5&=PX z(Q{P-NjZUBTWUn`j9MyqGr>WLKs-UY z&Gzr8rp#&emk`9(`Jf1bU~@SOBPI!byh0|Knp`^iu-1rp?8PST^UG>rc=hxH3=>y% zoQ{d$v2j`Eaa|Ds`vyGXiJ({#CTtCay}-VhKLEa8Ay0tl5HpK`V=OBZfky79Ylxs~ z9y!}`MWB7bzbO^~t_W6r3&TsBG-h7}1NH<_5r8-rQv|}7r+w;g;%MY-@pkM3u2Z5P zTo&ocC3QT3I}aFM{ai7jhvx7KBQO^-X#stoUni1zUoRgQo|oV zKIIn2^S(|}RShouQw$e&3eS0ME?%qfdBlU4;fVp5GpG z=auEQ50Knq+COVU!&Nf@U0gry>munISs^`k3M?mE4O$2OU~p|4JN4n!aSfc`etq|2 z|o(GLK@K9NU%R>W`&ik>r4gi)|!yvl=8QCvoXh%2@+qVhgkUg7b#PM zuYsQyAm4u^u7O{TUEjR{c82hI5CS*$e}21OQrdn1HS`~ZvvzZ%0pD(G4VVg9TGj8OxWAA}le^S@F!?4G#u zRjT>xx3R|r%pGjL+kUq#Plkq9U*FBfjK6u$2!~fcHZE&LE?sDRyRk=B66d$Rv`G$a zUEA34=S{!-r>yZ!P|0_{^Mm!WBiI+)504We*!`X*xJF%-2bE|Hc3Muh%X`g{;Tz=c zEb$C# z^{9cq*nKH`*Zc>vRUp`^Qx#rfo_D+habHxB!TtmWZU5_=2O-Ev|K+OlTif3tVy`~_ z%m!xn<*F-Nw-&CPOOgARt2l=aUEKewZz1MiKhBCORtcm4I0&B@V$ZKx4J@rkiGGd( z)#Ry01^?>H^r!+FC7hYSII5w6pZwqR?zWdUJ+tAN4IcrwkJe*q=>{Z-sb@BP_d8Nf zCG-k)HZCh7<4ZSeU7OLzOICgBBdEk)fJc6b7ll8)N&i$( z4X?&5aX#Py)orGrzxF(cKfI)7@5A&%2^zs1qjf*!cxMh@gU(GpLaUvXM z1<{WH{9xer3}142;QCa~XeBfxZ-f zp!@t7ww)$xMi&MlVzhIFw){2Y(cZ0Al$*T(@dfm@cIWqyOXuIio1h!AdQx&WfA&|A z%5qw-DKhX>{(M`(n4PmAs*}pkl?tFZs*1#}npmbUCam2g@;xv_Ztude;e-Mgv2`ipM;pL>+kf18}-%V-*b0X@^;@L$R8_(yGxhyrF2_ ziq%l6`t98sUoHO99{qgF>9X34%g>r<2_7>R-MO{6h+m9^?mjy2MX^Rr%X@T1K$9 zV-@^U{6IIFC~i8<{_!n}Q>>KTPxW(O5B_?6;I}c{Gijxj{P8kXgsW@F6`b2D=P#%E zDY?+AJxt-gF8pok()M0cN&N9md;onZ$(##Qd#W$(*XvFNUr+wF8Zg(b4wCr~NCPha zYVxrfuZ~gh`=+eqFNHt1v91nk@gIN&`p5tLZdL%t+$Uvmls{jjJTAL5pIKJtSN{6H zw0aLCUD!v|=HF)x^pn4@07iguxL+gu^@*W$_+nj@E+&7vJ=;Tc#lMdl=r8|r1qet1 z72%H+qQ9`vMVpD|K}Uhaf$v#BxR}C zbS$yF|NQGIV1WF~xYIEJad+$=6+kng#{`U7uJUM2LK4aZDsPaVq zvA5R>fITAMogR9$e|jTZUi!^dSC^<@;QZBXIH=7Lm%mikZ5dp;NB-`O>Bm;?F+UIR z`eXn8rLjc%(xiea_^R>`x2XT6eddohSW5%${KvLuJJ(I?%^U#zKhbwJG4@sE?`Rk9 zyPMWmpECgd)o;o*y0CvfH8n2Cv-L}Cw9tS4{05%Xe56nk_y3{lsjW`0cUSqtZMyc4 zcWzs~-AE1i9g=9(LkJky>^6Z+kF#OfaY)e?K1Xhgi~r|SgGu-Y8?ypLV4Mu@yFZn8+ty= zf26VeF1tJGzn!lE%|C>~W@xv-KGt2%@VDPsE@Z!5Wv-iET2%hN24MZ)&0VLR(+z*= zd|5Q=vVNxv{_zV}au2o>&PwT}MdvRXFt;}t{~zlSQ*QONYyZ|kZ*I{4qY3=^O}o|s zwmPPTyTV`H%pmxe(#Kxp9)d+{-#Q_P|2Sc0I9wyujix*YENd$-jmQ`o-U-nw}H>L}jrx@KxZi^@!;%O(}L>sW*6{ zY;xcoJNxr{&;I;ho&EXJvp-+<4?kc2;Lm>fKR#Kq>iz%z!Tde<-ZOM`%`djy^RKfG z{A&yi4K-$GXB$f)Ui#2O6yIZFJPwD4;P5QQ58m_8Js3aq(1REa@o_kH2>;K*%To0} zKfVwG1J(2%kvSjJ=)PA@d_{TkAGWdeU>Ob~?`G@y6YjUBM zZ-uVf`uxc3>{foGP>gS8IGJ~y9dZI(ov@g@dVcB9*5~1>kb!rcg*3#Nhc3YL7qX%K z4=(w;?>sv6;QpbZzuQJ(=&$no{j1K<#87kS-wr)H^zESz#QTSy92zy)hJNv1Kls1H Qk>kJk&ma81#Xk1`0nf2e5&!@I diff --git a/arm9/source/binaries.h b/arm9/source/binaries.h index 9d29523..ddff4a1 100644 --- a/arm9/source/binaries.h +++ b/arm9/source/binaries.h @@ -8,6 +8,8 @@ extern "C" { extern void udiskData(); extern void udiskData_end(); +extern void stage2Data(); +extern void stage2_end(); #ifdef __cplusplus } diff --git a/arm9/source/binaries.s b/arm9/source/binaries.s index a76e0e4..0f323a1 100644 --- a/arm9/source/binaries.s +++ b/arm9/source/binaries.s @@ -1,8 +1,12 @@ .arm - .global udiskData, udiskData_end + .global udiskData, udiskData_end, stage2Data, stage2_end udiskData: .incbin "../binaries/udisk.srl" udiskData_end: +stage2Data: + .incbin "../binaries/stage2.srl" +stage2_end: + diff --git a/arm9/source/main.cpp b/arm9/source/main.cpp index fbabced..6e0467f 100644 --- a/arm9/source/main.cpp +++ b/arm9/source/main.cpp @@ -67,15 +67,15 @@ int FileBrowser() { // Construct a command line vector argarray; if (!argsFillArray(filename, argarray)) { - iprintf("Invalid NDS or arg file selected\n"); + iprintf("\n\nInvalid NDS or arg file selected\n"); } else { - iprintf("Running %s with %d parameters\n", argarray[0].c_str(), argarray.size()); + iprintf("\n\nRunning %s with %d\nparameters\n", argarray[0].c_str(), argarray.size()); // Make a copy of argarray using C strings, for the sake of runNdsFile vector c_args; for (const auto& arg: argarray) { c_args.push_back(arg.c_str()); } // Try to run the NDS file with the given arguments int err = runNdsFile(c_args[0], c_args.size(), &c_args[0]); - iprintf("Start failed. Error %i\n", err); + iprintf("\n\nStart failed. Error %i\n", err); } argarray.clear(); while (1) { @@ -97,17 +97,23 @@ int RecoveryPrompt(void) { scanKeys(); if(keysDown() & KEY_A)break; } - return runUdisk(); + return runSRLbinary(false); } int main(void) { // Any error results in starting integrated uDisk 1.45 SRL as fall back scanKeys(); - if ((keysHeld() & KEY_L) && (keysHeld() & KEY_R))return RecoveryPrompt(); // Recovery option if FAT init hangs - + u32 KeysHeld = keysHeld(); + if ((KeysHeld & KEY_L) && (KeysHeld & KEY_R) && (KeysHeld & KEY_A) && (KeysHeld & KEY_B) && (KeysHeld & KEY_UP)) { + return runSRLbinary(true); // Recovery option if need to boot stage2 + } else if ((KeysHeld & KEY_L) && (KeysHeld & KEY_R)) { + return RecoveryPrompt(); // Recovery option if FAT init hangs + } if (!fatInitDefault())return RecoveryPrompt(); - if((access("/boot.nds", F_OK) == 0) && !(keysHeld() & KEY_B))runNdsFile("/boot.nds", 0, NULL); - if((access("/udisk.nds", F_OK) == 0) && !(keysHeld() & KEY_B))runNdsFile("/udisk.nds", 0, NULL); + if (!(KeysHeld & KEY_B)) { + if((access("/boot.nds", F_OK) == 0))return runNdsFile("/boot.nds", 0, NULL); + if((access("/udisk.nds", F_OK) == 0))return runNdsFile("/udisk.nds", 0, NULL); + } FileBrowser(); return RecoveryPrompt(); } diff --git a/arm9/source/nds_loader_arm9.c b/arm9/source/nds_loader_arm9.c index 9108288..59c30fd 100644 --- a/arm9/source/nds_loader_arm9.c +++ b/arm9/source/nds_loader_arm9.c @@ -28,7 +28,7 @@ #include #include "load_bin.h" -#include "loadAlt_bin.h" +#include "udiskloader_bin.h" #include "binaries.h" #include "tonccpy.h" @@ -229,8 +229,12 @@ static bool dldiPatchLoader (data_t *binData, u32 binSize, bool clearBSS) { return true; } -int runUdisk() { - tonccpy((void*)TMP_DATA, (void*)udiskData, (udiskData_end - udiskData)); +int runSRLbinary(bool isStage2) { + if (isStage2) { + tonccpy((void*)TMP_DATA, (void*)stage2Data, (stage2_end - stage2Data)); + } else { + tonccpy((void*)TMP_DATA, (void*)udiskData, (udiskData_end - udiskData)); + } // Start Bootloader irqDisable(IRQ_ALL); // Direct CPU access to VRAM bank D @@ -238,14 +242,14 @@ int runUdisk() { // Clear VRAM vramset (LCDC_BANK_D, 0x0000, 128 * 1024); // Load the loader/patcher into the correct address - vramcpy (LCDC_BANK_D, loadAlt_bin, loadAlt_bin_size); + vramcpy (LCDC_BANK_D, udiskloader_bin, udiskloader_bin_size); // Give the VRAM to the ARM7 VRAM_D_CR = VRAM_ENABLE | VRAM_D_ARM7_0x06020000; // Reset into a passme loop REG_EXMEMCNT = 0xFFFF; - *((vu32*)0x027FFFFC) = 0; - *((vu32*)0x027FFE04) = (u32)0xE59FF018; - *((vu32*)0x027FFE24) = (u32)0x027FFE04; + *((vu32*)0x02FFFFFC) = 0; + *((vu32*)0x02FFFE04) = (u32)0xE59FF018; + *((vu32*)0x02FFFE24) = (u32)0x02FFFE04; resetARM7(0x06020000); swiSoftReset(); return 0; diff --git a/arm9/source/nds_loader_arm9.h b/arm9/source/nds_loader_arm9.h index be46d9c..e7af2f7 100644 --- a/arm9/source/nds_loader_arm9.h +++ b/arm9/source/nds_loader_arm9.h @@ -36,7 +36,7 @@ typedef enum { #define LOAD_DEFAULT_NDS 0 -int runUdisk(); +int runSRLbinary(bool isStage2); eRunNdsRetCode runNds (const void* loader, u32 loaderSize, u32 cluster, bool initDisc, bool dldiPatchNds, int argc, const char** argv); diff --git a/bootloader/source/boot.c b/bootloader/source/boot.c index 0e431e3..622d5bf 100644 --- a/bootloader/source/boot.c +++ b/bootloader/source/boot.c @@ -285,6 +285,17 @@ void startBinary_ARM7 (void) { while(REG_VCOUNT==191); // copy NDS ARM9 start address into the header, starting ARM9 *((vu32*)0x02FFFE24) = TEMP_ARM9_START_ADDRESS; + + bool isXmenu = false; + + switch (*((vu16*)0x02FFFF5E)) { + case 0xF63D: { isXmenu = true; }break; + case 0x0695: { isXmenu = true; }break; + case 0xE4C4: { isXmenu = true; }break; + case 0x918C: { isXmenu = true; }break; + } + + ARM9_START_FLAG = 1; // Start ARM7 VoidFn arm7code = *(VoidFn*)(0x2FFFE34); @@ -294,9 +305,7 @@ void startBinary_ARM7 (void) { int sdmmc_sd_readsectors(u32 sector_no, u32 numsectors, void *out); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Main function -bool sdmmc_inserted() { - return true; -} +bool sdmmc_inserted() { return true; } bool sdmmc_startup() { sdmmc_controller_init(true); @@ -324,18 +333,9 @@ int main (void) { #endif u32 fileCluster = storedFileCluster; // Init card - if(!FAT_InitFiles(initDisc)) - { - return -1; - } - if ((fileCluster < CLUSTER_FIRST) || (fileCluster >= CLUSTER_EOF)) /* Invalid file cluster specified */ - { - fileCluster = getBootFileCluster(bootName); - } - if (fileCluster == CLUSTER_FREE) - { - return -1; - } + if(!FAT_InitFiles(initDisc))return -1; + if ((fileCluster < CLUSTER_FIRST) || (fileCluster >= CLUSTER_EOF))fileCluster = getBootFileCluster(bootName); /* Invalid file cluster specified */ + if (fileCluster == CLUSTER_FREE)return -1; // ARM9 clears its memory part 2 // copy ARM9 function to RAM, and make the ARM9 jump to it @@ -379,7 +379,8 @@ int main (void) { #endif // Pass command line arguments to loaded program passArgs_ARM7(); - + + startBinary_ARM7(); return 0; diff --git a/bootloaderalt/.gitignore b/udiskloader/.gitignore similarity index 100% rename from bootloaderalt/.gitignore rename to udiskloader/.gitignore diff --git a/bootloaderalt/Makefile b/udiskloader/Makefile similarity index 97% rename from bootloaderalt/Makefile rename to udiskloader/Makefile index 8b29b13..0293df4 100644 --- a/bootloaderalt/Makefile +++ b/udiskloader/Makefile @@ -12,7 +12,7 @@ endif # SOURCES is a list of directories containing source code # INCLUDES is a list of directories containing extra header files #--------------------------------------------------------------------------------- -TARGET := loadAlt +TARGET := udiskloader BUILD := build SOURCES := source source/patches INCLUDES := build ../include @@ -24,9 +24,9 @@ SPECS := specs #--------------------------------------------------------------------------------- ARCH := -mthumb-interwork -march=armv4t -mtune=arm7tdmi -CFLAGS := -g -Wall -O2\ - -mcpu=arm7tdmi -mtune=arm7tdmi -fomit-frame-pointer\ - -fomit-frame-pointer\ +CFLAGS := -g -Wall -O2 \ + -mcpu=arm7tdmi -mtune=arm7tdmi -fomit-frame-pointer \ + -fomit-frame-pointer \ -ffast-math \ $(ARCH) diff --git a/bootloaderalt/load.ld b/udiskloader/load.ld similarity index 99% rename from bootloaderalt/load.ld rename to udiskloader/load.ld index 624cce2..a768cb1 100644 --- a/bootloaderalt/load.ld +++ b/udiskloader/load.ld @@ -5,7 +5,7 @@ ENTRY(_start) MEMORY { vram : ORIGIN = 0x06020000, LENGTH = 64K - arm9ram : ORIGIN = 0x027FD800, LENGTH = 4K + arm9ram : ORIGIN = 0x02FFD800, LENGTH = 4K } __vram_start = ORIGIN(vram); diff --git a/bootloaderalt/source/clear_cache.arm9.s b/udiskloader/source/clear_cache.arm9.s similarity index 100% rename from bootloaderalt/source/clear_cache.arm9.s rename to udiskloader/source/clear_cache.arm9.s diff --git a/bootloaderalt/source/clear_mem.s b/udiskloader/source/clear_mem.s similarity index 100% rename from bootloaderalt/source/clear_mem.s rename to udiskloader/source/clear_mem.s diff --git a/bootloaderalt/source/common.h b/udiskloader/source/common.h similarity index 100% rename from bootloaderalt/source/common.h rename to udiskloader/source/common.h diff --git a/bootloaderalt/source/crt0.arm9.s b/udiskloader/source/crt0.arm9.s similarity index 100% rename from bootloaderalt/source/crt0.arm9.s rename to udiskloader/source/crt0.arm9.s diff --git a/bootloaderalt/source/launch_ds_crt0.s b/udiskloader/source/launch_ds_crt0.s similarity index 99% rename from bootloaderalt/source/launch_ds_crt0.s rename to udiskloader/source/launch_ds_crt0.s index 51e7896..d8923a4 100644 --- a/bootloaderalt/source/launch_ds_crt0.s +++ b/udiskloader/source/launch_ds_crt0.s @@ -36,7 +36,7 @@ _start: bl CopyMem @ Start ARM9 binary - ldr r0, =0x027FFE24 + ldr r0, =0x02FFFE24 ldr r1, =_arm9_start str r1, [r0] diff --git a/bootloaderalt/source/main.arm7.c b/udiskloader/source/main.arm7.c similarity index 99% rename from bootloaderalt/source/main.arm7.c rename to udiskloader/source/main.arm7.c index cf6831d..2b1917e 100644 --- a/bootloaderalt/source/main.arm7.c +++ b/udiskloader/source/main.arm7.c @@ -49,7 +49,7 @@ extern void arm7_clearmem (void* loc, size_t len); extern void arm7_reset (void); -#define NDS_HEADER 0x027FFE00 +#define NDS_HEADER 0x02FFFE00 #define TMP_DATA 0x02100000 diff --git a/bootloaderalt/source/main.arm9.c b/udiskloader/source/main.arm9.c similarity index 100% rename from bootloaderalt/source/main.arm9.c rename to udiskloader/source/main.arm9.c diff --git a/bootloaderalt/source/read_bios.h b/udiskloader/source/read_bios.h similarity index 100% rename from bootloaderalt/source/read_bios.h rename to udiskloader/source/read_bios.h diff --git a/bootloaderalt/source/read_bios.s b/udiskloader/source/read_bios.s similarity index 100% rename from bootloaderalt/source/read_bios.s rename to udiskloader/source/read_bios.s diff --git a/bootloaderalt/source/reset.arm7.s b/udiskloader/source/reset.arm7.s similarity index 99% rename from bootloaderalt/source/reset.arm7.s rename to udiskloader/source/reset.arm7.s index 34f3ac3..344ee8a 100644 --- a/bootloaderalt/source/reset.arm7.s +++ b/udiskloader/source/reset.arm7.s @@ -64,7 +64,7 @@ arm7_reset: @ ipcSendState(ARM7_BOOT) strh r0, [r12] - ldr r0,=0x27FFE34 + ldr r0,=0x2FFFE34 ldr r0,[r0] bx r0 diff --git a/bootloaderalt/source/reset.arm9.s b/udiskloader/source/reset.arm9.s similarity index 97% rename from bootloaderalt/source/reset.arm9.s rename to udiskloader/source/reset.arm9.s index d36d8a1..5d2a256 100644 --- a/bootloaderalt/source/reset.arm9.s +++ b/udiskloader/source/reset.arm9.s @@ -100,7 +100,7 @@ arm9_reset: @ while (ipcRecvState() != ARM7_BOOT); bl waitsync - ldr r10, =0x27FFE24 + ldr r10, =0x2FFFE24 ldr r2, [r10] @ Switch MPU to startup default @@ -130,6 +130,6 @@ mpu_initial_data: .word 0x08000035 @ p15,0,c6,c3,0,r6 ;PU Protection Unit Data/Unified Region 3 .word 0x0300001b @ p15,0,c6,c4,0,r7 ;PU Protection Unit Data/Unified Region 4 .word 0xffff001d @ p15,0,c6,c6,0,r8 ;PU Protection Unit Data/Unified Region 6 - .word 0x027ff017 @ p15,0,c6,c7,0,r9 ;PU Protection Unit Data/Unified Region 7 4KB + .word 0x02fff017 @ p15,0,c6,c7,0,r9 ;PU Protection Unit Data/Unified Region 7 4KB .word 0x0300000a @ p15,0,c9,c1,0,r10 ;TCM Data TCM Base and Virtual Size itcm_reset_code_end: \ No newline at end of file diff --git a/bootloaderalt/source/tonccpy.c b/udiskloader/source/tonccpy.c similarity index 100% rename from bootloaderalt/source/tonccpy.c rename to udiskloader/source/tonccpy.c diff --git a/bootloaderalt/source/tonccpy.h b/udiskloader/source/tonccpy.h similarity index 100% rename from bootloaderalt/source/tonccpy.h rename to udiskloader/source/tonccpy.h