PDA

View Full Version : Tutorial: How to make a simple N64 program



wraggster
November 5th, 2012, 12:39
via http://www.neoflash.com/forum/index.php/topic,7444.msg53565/topicseen.html#msg53565

Did you ever wanted to create your own program on the N64?

Yes? Then let me invite you to this little tutorial
No? Well I hope you still find it entertaining

First of all I have no clue about what I'm going to talk here, I can't program and all that will follow after this warning is a just a documentation of me applying the principles of copy&paste and trial&error.
But this is actually a good thing because I will explain everything from a beginners perspective so it should be easy for everyone to follow.

Disclamer: I only used Open Source Software, everything I discuss or link here is completly legal.
Introduction:
Thanks to Shaun Taylor's amazing work on libdragon (http://www.dragonminded.com/n64dev/) it has become very easy to write little programs for your favorite console the N64.

In this tutorial we will use the virtualization software VirtualBox together with Ubuntu and libdragon to create a 100% legal development kit for the N64.

Every step will be documented with a picture.

Step 1: Setting up VirtualBox

A) First you need to download and install Virtualbox: https://www.virtualbox.org/wiki/Downloads

B) Next you need to download and extract my premade hdd image that contains both Ubuntu and libdragon preinstalled.
Since both libdragon and Ubuntu are open source it's absolutly legal to link you to this image: http://dl.dropbox.com/u/20912715/N64/n64dev.7z (1000MB)
If you need a program to extract the file I recommend 7zip (http://www.7-zip.org/)

C) After you started VirtualBox you need to create a new virtual machine
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/vb1.png

D) Name it N64DEV and make sure to select Linux and Ubuntu from the dropdown menues
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/vb2.png

E) In the "Virtual Hard Disk" window click on "Use existing hard disk"(1), then click on the browse icon(2) and select the hdd image you downloaded earlier(3)
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/vb3.png

F) After setting up your Virtual Machine click on "Start" to run it
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/vb4.png

Step 2: Inside Ubuntu

A) Log in with password: dev
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub1.png

IMPORTANT: To change the keyboard layout click on the little "Deu" icon on the top bar and choose your keyboard layout.

B) On the top bar click "Places" and then "Home Folder"
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub2.png

C) Browse to libdragon/examples(1) right-click on "spritemap"(2) and select Copy(3) to Desktop(4). Then rename the new folder on the desktop to n64forever.
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub3.png
The examples directory has many coding examples that teach you how to program with libdragon. Instead of creating our little program from scratch we will just copy one of the examples and alter it to our liking.

D) I want to put the N64 Forever logo into our program.
So I downloaded and resized it to approx 200 pixels on my Windows machine, saved it as N64Forever.PNG and then transfered it to Ubuntu.
To transfer the picture to Ubuntu running in the virtual machine I used a service called dropbox. But you could upload it on mediafire or any other online storage site too. Then open Firefox in the virtual machine and download it again.
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub4.png

E) To use the picture in our program we have to convert it first. So copy the picture onto the desktop. Right-click somewhere on the desktop and select "Open in Terminal".
A black window should pop up.
Write the following in it:
Code: [Select] (javascript:void(0);)
<code class="bbc_code">$N64_INST/bin/mksprite 32 N64Forever.png n64f.sprite</code>Press Return/Enter to execute the command.
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub5.png

F) A new file called n64f.sprite should be on your desktop now. Double click on the n64forever folder on your desktop(the one you created in step 2C) and then open the filesystem directory.
Delete the files that are already in there(1) and move our n64f.sprite in this directory(2).
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub6.png

Step 3: Editing the Makefile

A) First we need to edit the Makefile in our n64forever directory. Since we just copied it from the spritemap example.
Rightclick on Makefile and choose "Open with Geany"
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub7.png

B) We need to replace
Code: [Select] (javascript:void(0);)
<code class="bbc_code">PROG_NAME = spritemap</code>in line 9 with
Code: [Select] (javascript:void(0);)
<code class="bbc_code">PROG_NAME = n64forever</code>
And
Code: [Select] (javascript:void(0);)
<code class="bbc_code">$(N64TOOL) -b -l 2M -t "Spritemap Test"</code>in line 20 with
Code: [Select] (javascript:void(0);)
<code class="bbc_code">$(N64TOOL) -b -l 2M -t "n64forever"</code>
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub8.png
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub9.png

C) Save the file and close Geany.

Step 4: Programming

A) In our n64forever directory rename spritemap.c to n64forever.c
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub10.png
Next right-click on it and choose "Open with Geany"

B) Now alter the code like this
Code: [Select] (javascript:void(0);)
<code class="bbc_code">#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdint.h>
#include <libdragon.h>
#include <stdlib.h>

int main(void)
{
/* enable interrupts (on the CPU) */
init_interrupts();

/* Initialize Display */
display_init( RESOLUTION_320x240, DEPTH_32_BPP, 2, GAMMA_NONE, ANTIALIAS_RESAMPLE );

/* Initialize Filesystem */
dfs_init( DFS_DEFAULT_LOCATION );

/* Initialize Controller */
controller_init();

/* Read in single sprite */
int fp = dfs_open("/n64f.sprite");
sprite_t *n64f = malloc( dfs_size( fp ) );
dfs_read( n64f, 1, dfs_size( fp ), fp );
dfs_close( fp );

/* define two variables */
int x = 40;
int y = 100;

/* Main loop test */
while(1)
{
static display_context_t disp = 0;

/* Grab a render buffer */
while( !(disp = display_lock()) );

/* Fill the screen */
graphics_fill_screen( disp, 0 );

/* Create Place for Text */
char tStr[256];

/* Text */
graphics_draw_text( disp, 10, 10, "N64 FOREVER" );

/* Logo */
graphics_draw_sprite_trans( disp, x, y, n64f );

/* Scan for User input */
controller_scan();
struct controller_data keys = get_keys_down();

/* If Dpad is pressed move Image */
if( keys.c[0].up )
{
y = y+5;
}
else if( keys.c[0].down )
{
y = y-5;
}
else if( keys.c[0].left )
{
x = x-5;
}
else if( keys.c[0].right )
{
x = x+5;
}

sprintf(tStr, "X: %d\n", x );
graphics_draw_text( disp, 10, 20, tStr );
sprintf(tStr, "Y: %d\n", y );
graphics_draw_text( disp, 10, 30, tStr );

/* Update Display */
display_show(disp);
}
}

</code>You will notice that we deleted quite a bit and added a few lines of our own.

C) Save the changes

Step 5: Compiling

A) Right click somewhere in our n64forever directory and choose "Open in Terminal"

B) In the box that pops up write
Code: [Select] (javascript:void(0);)
<code class="bbc_code">make</code>And execute by pressing Return/Enter.
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub12.png

C) If everything worked it should look like this:
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub13.png
If not you probably got a typo, check which line it complains about and fix it in the code.

D) Lots of new files should have been created, but we only care for n64forever.v64. Thats our rom we want to run on our N64.
You can use the Mess emulator to test your program on your PC:
http://messui.the-chronicles.org/

http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub14.png

Step 6: Upload the program
To get the n64forever.v64 rom to your Windows machine use dropbox or mediafire again. Upload it through Firefox in Ubuntu then download it again from within Windows.
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub15.png
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/ub16.png

Step 7: Running the program
To run the program on your N64, you need a flashcart. Just copy the n64forever.v64 to the flashcarts SD card and launch it from the flashcarts menu.
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/DSC02498.JPG

And thats how our program looks like:
http://dl.dropbox.com/u/20912715/html/n64codingtut/n64codingtutorial-Dateien/DSC02505.JPG
You can move the N64 Forever logo around the screen with the dpad.

ruellesmith
November 30th, 2012, 10:51
Wow, this is really cool tutorial instructions. This is very helpful especially to those who has no knowledge with this including me. I'd love to know more about this and I know this would help me better .