Assembling 3DS Homebrew for Gateway

While the newest Gateway update brought two major features, the addition of homebrew support seemed rather unclear initially because of the lack of a method to actually assemble Gateway-compatible 3DS files. However, thanks to the work of 3DSGuy, we can effectively convert ELFs to 3DS files. While many developers will already be able to make use of this, this guide is intended to expand the options for 3DS homebrew by walking through how to compile ctrulib, a library for writing ARM11 homebrew, as well as going over the basics of compiling and running one of ctrulib's example programs.

Note: I carried out this process on an Ubuntu 12.04 system. While these steps should theoretically apply for any desktop operating system, your results may vary. I'll try to make everything as universally helpful as possible.

Step 1: Setting Up

Obviously, you'll need to start by having everything set up to actually be able to compile. To start, you'll need the basic developer essentials for your given operating system. That goes beyond the scope of this guide, but if you're developing homebrew, it's a safe assumption that you've already carried this step out, or at least know how to on your own.

Next, you'll need to install GCC for ARM embedded systems. You can download the files for that here. Windows users will have a straightforward installer, while OSX and Linux users will have to do a little extra setup later. For now, if you're one of these people, extract your associated download in some folder that you'll be able to conveniently remember. Alternatively, Ubuntu users can install an alternate PPA available here.

You'll also need DevKitPro set up as you would if you were developing standard DS homebrew, along with all optional libraries (included in the following guide). A fairly straightforward guide for doing so is available here. Windows users have an easy installer available, and while scripts can handle the task for OSX and Linux users, I highly recommend they follow the guide for a manual setup. It isn't very long or difficult, and will give you a good grasp on where everything you'll be using is located.

Finally, you'll need makerom, this file for compiling ctrulib software with makerom, and this workaround for using makerom with Gateway. Put those all somewhere convenient; we won't be using them right now, but they'll be needed at the end of this guide.

Step 2: Compiling ctrulib and homebrew

So you're all set up and ready to go! Now we get to the fun part. You're going to want to download ctrulib from here. If you're familiar with git, this process should be straightforward. Otherwise, just click the "Download ZIP" button on the right side of the screen. You're going to want to get everything from that link somewhere on your computer, with the same organization as it has on there. This is for convenience sake, as you'll have everything downloaded at once and readily available. As well, the makefiles of all the example programs assume that everything will be in the same places that it is on github, so moving things around may cause issues.

Now that you've got ctrulib downloaded, open up your command line/terminal and navigate to your newly created ctrulib directory (for most operating systems, the command to do this will be cd). navigate into the "libctru" folder, and type "make". If all goes well, you should now have ctrulib ready for use!*

*If you were one of the users in step 1 who had to just extract the GCC ARM toolkit into a convenient location, then you'll need to make some slight changes to the Makefile first. Open up the Makefile in a text editor, and the first line should say "CC = arm-none-eabi-gcc". Get rid of the last part so it simply reads "CC = ", and then add the directory you extracted it to, plus "bin/arm-none-eabi-gcc", all in quotation marks. So, if I extracted to /usr/local, I would replace arm-none-eabi-gcc with "/usr/local/gcc-arm-none-eabi-[version]/bin/arm-none-eabi-gcc". Repeat this process for the second line, and just replace the "gcc" at the end with "ar".

But we didn't just come here to compile ctrulib, we want to be able to use it. So let's go compile an example program. Pull up your command line/terminal again, and go up a directory ("cd .."). Now, navigate into the "arm11u" folder. We almost have everything we need to compile this homebrew right now (You'll have to repeat the above steps for this makefile as well, if you're an OSX/Linux user). However, if you try to compile this right now, you'll find that you're missing a file- a linker named "ccd00.ld". Our makefile needs this in order to determine how to compile our homebrew.

Thankfully, if you followed step 1, you should already have this file- it was the file you downloaded immediately after makerom (This one, in case you skipped over it). All you need to do is copy/paste that into the "arm11u" folder, and rename it to "ccd00.ld". If everything went right, you should now be able to type make into your command line/terminal to create a file called "arm11u.elf"!

Step 3: Converting the .elf into a .3ds
Thankfully, this is the easiest step so far. Now that you've got your homebrew file ("arm11u.elf" in the step 2 example), go ahead and paste it into the same folder where you keep makerom and the workaround you downloaded in step 1. Now, use your command line/terminal to navigate to this folder. If you're a Windows user, at this point you can simple type "build.bat arm11u.elf arm11u.3ds". If you're an OSX or Linux user, the steps aren't much harder. Open up the "build.bat" file in a text editor, change "%1" to "arm11u.elf" and "%2" to "arm11u.3ds", and copy/paste the whole thing into your terminal. You should now have a Gateway usable 3DS file.

I hope this guide is helpful to people in setting up ctrulib and and assembling homebrew for the new Gateway update. As a note on the ctrulib examples, so far arm11u is the only one I've had full success with, but it should be enough to get you started, and can be used as a base file for developing new homebrew or porting old homebrew to Gateway. I'm currently working on successfully compiling the "gpu" example, however some odd issues are coming up. If you think you can help with this process, feel free to respond to this thread or PM me about it.

Anyway, I hope this guide helps some people get started in working with ctrulib and Gateway supported homebrew. Most of this information could be determined through trial and error or experience, but I wrote it out so you wouldn't have to. This is my first guide, so please leave feedback, and if I missed something or you have a question I'll try to respond quickly. Happy developing, and here's to seeing some amazing progress from the homebrew scene in the near future.
 

Reecey

Mario 64 (favorite game of all time)
Member
Joined
Mar 7, 2010
Messages
5,877
Trophies
2
Location
At Home :)
XP
4,582
Country
Thats a great breakdown but would it just not be easier to wait for someone to develop Homebrew files to use for Gateway and just transfer your file on your M-SD card to use? or am I not understanding the process properly?
 

Sylantemp

Active Member
OP
Newcomer
Joined
Jul 20, 2012
Messages
43
Trophies
0
XP
71
Country
United States
Thats a great breakdown but would it just not be easier to wait for someone to develop Homebrew files to use for Gateway and just transfer your file on your M-SD card to use? or am I not understanding the process properly?


The whole point of this guide is to help people develop homebrew for Gateway. Unless you mean files specifically meant for developers, in which case, I think this is the best we're going to get for a while. Either way, this guide is more or less only useful for developers, but they should be able to do a lot with it now that ctrulib is supported.
 

Chrisssj2

Well-Known Member
Member
Joined
Feb 12, 2008
Messages
2,743
Trophies
1
XP
4,544
Country
Netherlands
Do you think there would be homebrew capable for playing 720P or even 1080P movies or just regular anime episodes with multitudes of codecs?
Only use I can think of for homebrew..
 

Technicmaster0

Well-Known Member
Member
Joined
Oct 22, 2011
Messages
4,463
Trophies
2
Website
www.flashkarten.tk
XP
3,711
Country
Gambia, The
Do you think there would be homebrew capable for playing 720P or even 1080P movies or just regular anime episodes with multitudes of codecs?
Only use I can think of for homebrew..
You know that the 3DS' screen is not 1080P or 720P large?
There are serveral uses for homebrew, like an organizer, many games etc.
 

Chrisssj2

Well-Known Member
Member
Joined
Feb 12, 2008
Messages
2,743
Trophies
1
XP
4,544
Country
Netherlands
Yes I know but maybe "downscaled" or whatever... because I have all my anime episodes and movies in 720p/1080P. Maybe some compatibility mode.
Don't wanna search for "compatible formats for 100'es of episodes. I just prefer if it "works" don't care if its not the same quality.

Organizer Elaborate please?
Many games? Homebrew games u mean.. could u give me a few examples of worthwhile homebrew games u know of?
And im not talking of simple tetris games no one cares about if u know what I Mean :P

I did like doom homebrew project for DSTWO.
 

cearp

瓜老外
Developer
Joined
May 26, 2008
Messages
8,788
Trophies
2
XP
8,819
Country
Tuvalu
surely it must be possible for gateway to allow us to load ds roms just the same as we load 3ds roms...
of course, unless the experts give a definitive reason why we can't.
i just expect that since we can already do it with ds flash cards, that, people don't care enough to put the time in.
 

zhdarkstar

Well-Known Member
Member
Joined
Jan 30, 2008
Messages
573
Trophies
1
XP
568
Country
United States
surely it must be possible for gateway to allow us to load ds roms just the same as we load 3ds roms...
of course, unless the experts give a definitive reason why we can't.
i just expect that since we can already do it with ds flash cards, that, people don't care enough to put the time in.
It might be a limitation of the exploit used. Since running a DS game (retail or rom) resets the exploit, they would need to implement a way for the DS rom to correctly recognize the DS Profile while running that either doesn't reset the exploit or reinstalls the exploit upon exit.
 
  • Like
Reactions: Margen67

Sylantemp

Active Member
OP
Newcomer
Joined
Jul 20, 2012
Messages
43
Trophies
0
XP
71
Country
United States
Just an update on the state of Ctrulib for Gateway, I'm working on compiling the gpu example program. The only real problem I've come across is successfully running a script that converts 3D models into a readable form; I've reached out to Smealum about this, so hopefully something will be ready today. While GPU control is possible without the example, I assume with the lack of documentation, a working example example would help people better understand 3D programming with ctrulib. With his permission, I'll try to release some (very slightly) modified files for getting the GPU demo working.
 

Sylantemp

Active Member
OP
Newcomer
Joined
Jul 20, 2012
Messages
43
Trophies
0
XP
71
Country
United States
When I try to compile ctrulib on ubuntu 14.04 I get this error? source/SOC.c:10:24: fatal error: sys/socket.h: No such file or directory. Any help?


How did you install the ARM embedded systems toolkit? I use the alternate PPA which I included in the step 1, but I don't know if it fully supports 14.04 yet. Also, if you didn't use the alternate PPA, did you change the ctrulib makefile as necessary?
 

Mariko

Well-Known Member
Member
Joined
Oct 13, 2009
Messages
190
Trophies
0
XP
282
Country
surely it must be possible for gateway to allow us to load ds roms just the same as we load 3ds roms...

Why would you ever want to do that, though, especially since every Gateway cartridge comes with a DS mode flash cartridge? You can play virtually any game you want, and some good folks made an update, so that the blue cartridge can use the latest Wood firmware. Trying to get DS games to run on Gateway is nothing but a waste of time. Where do people get these ideas from, anyway? "Oh, I got this DS cartridge along with my Gateway, but having dozens of DS games on one cartridge, and dozens of 3DS games on another is sooo inconvenient ... "
 

Tikvah

Member
Newcomer
Joined
May 10, 2014
Messages
7
Trophies
0
Age
29
Location
תֵּל־אָבִיב
XP
55
Country
Iceland
How did you install the ARM embedded systems toolkit? I use the alternate PPA which I included in the step 1, but I don't know if it fully supports 14.04 yet. Also, if you didn't use the alternate PPA, did you change the ctrulib makefile as necessary?


I didn't use alternate PPA I just downloaded it and extract it. I did change the makefile to point to the extracted toolkit. and now it seems to give me this error.
 

Sylantemp

Active Member
OP
Newcomer
Joined
Jul 20, 2012
Messages
43
Trophies
0
XP
71
Country
United States
I didn't use alternate PPA I just downloaded it and extract it. I did change the makefile to point to the extracted toolkit. and now it seems to give me this error.


Sorry, I misread. That error is actually from missing Devkitpro- the dswifi library, specifically. Make sure you've installed it correctly according to the guide, which should include having dswifi and adding DEVKITPRO to your execution environment.
 

cearp

瓜老外
Developer
Joined
May 26, 2008
Messages
8,788
Trophies
2
XP
8,819
Country
Tuvalu
Why would you ever want to do that, though, especially since every Gateway cartridge comes with a DS mode flash cartridge? You can play virtually any game you want, and some good folks made an update, so that the blue cartridge can use the latest Wood firmware. Trying to get DS games to run on Gateway is nothing but a waste of time. Where do people get these ideas from, anyway? "Oh, I got this DS cartridge along with my Gateway, but having dozens of DS games on one cartridge, and dozens of 3DS games on another is sooo inconvenient ... "

lol you make it sound like i'm crazy for suggesting it!
the ds flash cart that comes with gateway is not great, there are better flashcards. i know basically every game works with it, that is not the point.
gateway could add dsi rom support, make it so you can select ALL your games ds/3ds form the same selector, it would just be a nice addition. i'm sure there are some other features they could add to it, to make it the best all in one solution. not that i really mind, but it is nice that the games are selected from the 3ds menu, and not a gateway program that then boots you into the game, since then the play records and activity is updated nicely. a bit like when before wii usb loaders started supported the play log, it would just say that you have been in homebrew channel for 6 hours, lol
it's a bit like having gamecube usb loading on wii, having your music on your phone instead of on a separate player, why did we even want multirom support? it's just convenience!
that's why i would want to do that, since it is more convenient to have everything on one cart, it's hardly a weird idea.
 
D

Deleted User

Guest
Like posts mentioned above, running DS/DSi mode will wipe your NVRAM, so not gonna happen
 

Sylantemp

Active Member
OP
Newcomer
Joined
Jul 20, 2012
Messages
43
Trophies
0
XP
71
Country
United States
Like posts mentioned above, running DS/DSi mode will wipe your NVRAM, so not gonna happen


This is pretty much the only reason why. If, theoretically, Gateway were to implement a model that booted into Gateway mode on startup without the need of continuously launching the nickname exploit, then it would be a fair demand. However, the odds of that happening are slim to none, and implementing DS/DSi launching from the red card at this point would just render it (temporarily) useless after the first play.
 
  • Like
Reactions: cearp

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    SylverReZ @ SylverReZ: Zip ties can bond your loved ones together. :creep: