Creando tu primer dashboard para Nintendo 64 (Mac/Docker)

Si tienes una Nintendo 64 y un Flashcart (como el EverDrive), esta es la forma más rápida de ejecutar tu propio código utilizando la librería moderna Libdragon.

1. Requisitos Previos

Asegúrate de tener instalado Docker Desktop y Node.js en tu sistema.

2. Instalación de la Toolchain

Libdragon ahora ofrece un paquete de NPM que actúa como asistente para manejar el contenedor de Docker sin complicaciones.

Bash

# Instalar el asistente de Libdragon de forma global
npm install -g libdragon

3. Configuración para Apple Silicon (M1/M2/M3)

Si usas un Mac moderno, la imagen de Libdragon es de arquitectura amd64. Debes forzar a Docker a usar esa plataforma:

Bash

export DOCKER_DEFAULT_PLATFORM=linux/amd64

4. Inicializar el Proyecto

Crea una carpeta nueva y deja que Libdragon configure todo el entorno (descargará la imagen de Docker y clonará la librería):

Bash

mkdir mi-proyecto-n64
cd mi-proyecto-n64
libdragon init

5. Crear el código del Dashboard

Vamos a crear el archivo de código fuente. Puedes usar nano, code o cualquier editor.

Bash

# Entra en la carpeta de ejemplos para usar su estructura de Makefile
cd libdragon/examples
cp -r test dashboard
cd dashboard

# Crea el archivo de código
nano dashboard.c

Pega este código (Dashboard corregido):

C

#include <stdio.h>
#include <libdragon.h>

#define NUM_OPTIONS 3

const char *menu[NUM_OPTIONS] = {
    "CPU Status",
    "Network",
    "Exit"
};

int selected = 0;

int main(void) {
    display_init(RESOLUTION_320x240, DEPTH_16_BPP, 2, GAMMA_NONE, ANTIALIAS_RESAMPLE);
    console_init();
    joypad_init();

    while (1) {
        joypad_poll();
        joypad_buttons_t btn = joypad_get_buttons_pressed(JOYPAD_PORT_1);

        if (btn.d_up) {
            selected--;
            if (selected < 0) selected = NUM_OPTIONS - 1;
        }
        if (btn.d_down) {
            selected++;
            if (selected >= NUM_OPTIONS) selected = 0;
        }

        surface_t *disp = display_get();
        
        if (btn.a) {
            graphics_fill_screen(disp, 0);
            if (selected == 0) {
                graphics_draw_text(disp, 20, 100, "CPU: OK (R4300i @ 93.75MHz)");
            } else if (selected == 1) {
                graphics_draw_text(disp, 20, 100, "Network: No Adapter Detected");
            } else if (selected == 2) {
                graphics_draw_text(disp, 20, 100, "Saliendo...");
            }
            display_show(disp);
            wait_ms(1000); // Pausa moderna
            disp = display_get();
        }

        graphics_fill_screen(disp, 0);
        graphics_draw_text(disp, 20, 20, "== Dashboard N64 ==");

        for (int i = 0; i < NUM_OPTIONS; i++) {
            char buffer[64];
            if (i == selected) {
                sprintf(buffer, "> %s <", menu[i]);
            } else {
                sprintf(buffer, "  %s", menu[i]);
            }
            graphics_draw_text(disp, 40, 60 + i * 20, buffer);
        }
        display_show(disp);
    }
    return 0;
}

6. Compilación Mágica

Gracias al comando libdragon, no necesitas saber comandos complejos de Docker. Solo ejecuta:

Bash

libdragon make

7. ¡A la consola!

Al terminar, verás un archivo llamado dashboard.z64 (o el nombre que tenga el proyecto en el Makefile).

  1. Copia ese archivo .z64 a tu tarjeta SD.
  2. Insértala en tu EverDrive.
  3. ¡Disfruta de tu Dashboard casero en hardware real!