Desarrollado aplicaciones para la Wii

Por navidad mi hermana me regaló una Nintendo Wii, cosa que no esperaba para nada :) Estos días he estado “jugando” un poco con ella y he creado un sencillo programita para leer las pulsaciones del WiiMote.

En esta entrada explicaré como instalar el entorno de desarrollo, como hacer un sencillo programa y ejecutarlo en nuestra Wii ;)

Lo primero es instalar el entorno de desarrollo, devKitPro (sólo necesitamos la parte devKitPPC), que podéis descargar de forma gratuita desde su web oficial. Una vez esté instalado debemos fijar la variable de entorno “WIILOAD” con la ip de la Wii. Para ello una opción es abrir un intérprete de mandatos (cmd) y escribir: set WIILOAD=tcp:192.168.1.64 reemplazando la ip por la vuestra claro :P

Tras esto debemos cargar el Programmers Notepad desde ese mismo intérprete de mandatos (que es el que tiene la variable WIILOAD). Se encuentra en devKitPro\Programmers Notepad\pn.exe

Una vez hecho esto, tendremos un ejemplo de hola mundo en devKitPro\examples\wii\template\template.pnproj. El código del hola mundo está bien documentado, lo que es muy de agradecer, pero por claridad aquí eliminaré esos comentarios, recordad que están en código de ejemplo que viene con devKit :) El código que he insertado simplemente imprime por pantalla qué botón se pulsa en el WiiMote, sería lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
#include <stdlib.h>
#include <gccore.h>
#include <wiiuse/wpad.h>
 
static void *xfb = NULL;
static GXRModeObj *rmode = NULL;
 
int main(int argc, char **argv) {
	VIDEO_Init();
	WPAD_Init();
	rmode = VIDEO_GetPreferredMode(NULL);
	xfb = MEM_K0_TO_K1(SYS_AllocateFramebuffer(rmode));
	console_init(xfb,20,20,rmode->fbWidth,rmode->xfbHeight,rmode->fbWidth*VI_DISPLAY_PIX_SZ);
	VIDEO_Configure(rmode);
	VIDEO_SetNextFramebuffer(xfb);
	VIDEO_SetBlack(FALSE);
	VIDEO_Flush();
	VIDEO_WaitVSync();
	if(rmode->viTVMode&VI_NON_INTERLACE) VIDEO_WaitVSync();
	printf("\x1b[2;0H");
	printf("I have been conquered by Carballude. Greetings master!");
	while(1) {
 
		WPAD_ScanPads();
		u32 pressed = WPAD_ButtonsDown(0);
 
		switch(pressed)
		{
			case WPAD_BUTTON_1:
				printf("\nONE");
				break;
			case WPAD_BUTTON_2:
				printf("\nTWO");
				break;
			case WPAD_BUTTON_PLUS:
				printf("\nPLUS");
				break;
			case WPAD_BUTTON_MINUS:
				printf("\nMINUS");
				break;
			case WPAD_BUTTON_A:
				printf("\nA");
				break;
			case WPAD_BUTTON_B:
				printf("\nB");
				break;
			case WPAD_BUTTON_UP:
				printf("\nUP");
				break;
			case WPAD_BUTTON_DOWN:
				printf("\nDOWN");
				break;
			case WPAD_BUTTON_LEFT:
				printf("\nLEFT");
				break;
			case WPAD_BUTTON_RIGHT:
				printf("\nRIGHT");
				break;
			case WPAD_BUTTON_HOME:
				exit(0);
				break;
		}
		// Wait for the next frame
		VIDEO_WaitVSync();
	}
 
	return 0;
}

Ahora podemos compilarlo con Tools -> Make. Para ejecutarlo en la Wii no tenemos más que entrar en el Homebrew Channel y desde pn usar Tools -> Run. La Wii recibirá el programa por wireless y lo cargará automáticamente :)

Si tenéis cualquier duda, lo más probable es que yo no tenga ni idea de cómo solucionarla, pero seguro que los chicos de homebrew sí. Os animo a que os deis una vuelta por su wiki.

About the Author

Me llamo Pablo Carballude González, soy graduado en computación con master en HCI y Seguridad Informática. Actualmente trabajo para Amazon en Seattle como Software Developer Engineer. Soy de esas personas que no saben si los textos autobiográficos deben ser en primera o tercera persona. Lo intenté en segunda, pero no le entendí nada :P