Hilo de detalles y curiosidades de N64

1, 2, 3, 4, 5174
TUTORIAL: COMPILAR Y USAR LIBDRAGON EN WINDOWS
Bueno pues vamos con algo nuevo, las roms generadas no funcionarán en la mayoría de emuladores (los que solo miran libultra), funcionará en emuladores a bajo nivel como MESS o CEN64 y en hardware original.

Primero mencionar que no he dado con ni un solo tutorial que explique bien los pasos, siempre pasa algo que no deja compilar el entorno.

Esto ha sido probado en Windows 7 x64 y Windows XP x86.

DESCARGA
He creado un rar con un set de recursos necesarios:
- Viene la libdragon con algún makefile arreglado, pues da fallo al compilar mksprite, viene un ejemplo que he montado que saldrá al final del hilo, para poder poner una imagen en pantalla sin demasiadas dificultades.
- Viene la versión x86 de cygwin (aconsejable), el entorno de trabajo que usaremos.
- Viene notepad++ (versión portable) un editor de texto, es necesario usar un editor que respete el salto de lineas de un código, NO usar el de Windows, ni wordpad ni nada de eso.

Se puede descargar de aquí

INSTALAR CYGWIN
Descomprimimos N64kit.rar en una carpeta, dentro encontraremos "setup-x86.exe", lo ejecutamos.

Pasos:
1) Elegimos C:\cygwin como ruta, sin complicarnos.
2) Direct connection, se bajaran los paquetes automáticamente de internet (cygwin.netbet.org me fue bastante rápido)
3) Paso sumamente importante, elegimos que paquetes se instalan con cygwin, encontraremos algo parecido a este menú:
Imagen

En el buscador de arriba a la izquierda buscamos los siguientes paquetes, desplegamos menús, los marcamos tal y como sale en la imagen, solo queremos los binarios, no el "src":
gcc-core
gcc-g++
libmpc-devel
libpng-devel
wget
texinfo
make


* Son cerca de 400MB de descarga, antes de instalarlo se quejará de que falta libusb, damos aceptar y listo.
4) Dejamos que la instalación cree icono en el escritorio.
5) Copiamos la carpeta libdragon que viene en N64kit.rar en "C:\cygwin\usr\local"

COMPILAR ENTORNO
1) Ejecutamos Cygwin terminal, el nuevo icono que hay en el escritorio como administrador (click derecho), durante todo el tutorial no saldremos NUNCA del terminal, minimizar como mucho, nunca cerrar.
2) Nos saldrá una ventana parecida a la consola de comandos de msdos, lo que vamos a hacer es desplazarnos a la carpeta que hemos copiado de libdragon, crear una carpeta temporal y copiar el archivo build, con los siguientes comandos, pulsamos enter en cada uno:
cd ..
cd ..
cd usr
cd local
cd libdragon
cd temp
./build


El último es el importante, en un ordenador medianamente rápido puede tirarse 2 horas compilando, lo dejamos hacer.

He incluido en el zip los archivos que busca build en los repositorios: binutils-2.25, gcc-5.1.0, newlib-2.2.0, para acelerar el proceso.

3) Cuando termine volverá a salir el cursor y podremos escribir, nos fijamos si hay algún texto de error en pantalla, si no lo hay seguimos, escribimos:
cd ..
export N64_INST=/usr/local
make
make install
make tools
make tools-install


* Con esto ya habremos compilado libdragon y todas sus herramientas, nos fijamos que no haya errores, si por algún caso fallamos en alguno de los pasos hay que situarse siempre en usr/local/libdragon para compilar alguno de los pasos anteriores.

COMPILAR LIBMIKMOD
He añadido dentro de la carpeta libdragon/temp la librería libmikmod lista para compilar, no sirve de nada instalar la que viene con cygwin pues es una personalizada, he tenido que corregir el makefile como no, vamos al terminal y escribimos:
cd temp
cd libmikmod
make
make install
cd ..
cd ..


Con esto ya podremos compilar ejemplos que lleven música, volvemos a la raíz de libdragon.

COMPILAR EJEMPLO

1) Ahora lo siguiente es desplazarse a la carpeta de ejemplos y compilar alguno, escribimos:
cd examples
cd bmb
cd filesystem
$N64_INST/bin/mksprite 32 conker.png conker.sprite


Esto coge una imagen PNG y la transforma en un sprite compatible de N64, para situarnos en la carpeta, podemos llegar a través del explorador de windows en :
C:\cygwin\usr\local\libdragon\examples\bmb\filesystem

Podemos cambiar la imagen por cualquier otra en formato en PNG si lo preferimos, si todo fue bien habrá creado conker.sprite en la carpeta.

2) Ahora lo siguiente es compilar el ejemplo, escribimos:
cd ..
make


Y... después de tanta historia habrá compilado algo?
Imagen

Si lo hemos hecho bien, en la carpeta (C:\cygwin\usr\local\libdragon\examples\bmb\) aparecerán los siguientes archivos, el que nos interesa es bmb.v64, lo copiamos a la SD del Everdrive 64 y listo.
Imagen

APUNTES
- Si queremos trastear con el código es el fichero bmb.c, lo abrimos con Notepad++ (N64kit.rar)
- Los ficheros bmb.bin, bmb.elf, bmb.o, bmb.v64, spritemap.dfs se crean con el make, podemos borrarlos, si actualizamos algún sprite de la carpeta filesystem es OBLIGATORIO eliminar el archivo .dfs o no se actualizará al compilarlo, esos archivos están de cache para acelerar compilación.
- Es de vital importancia recordar:
export N64_INST=/usr/local
Lo tendremos que escribir antes de compilar un ejemplo si hemos cerrado el terminal.
- Cada vez que cerremos el terminal tendremos que ir de nuevo a la ruta (usr/local/libdragon)
cd ..
cd ..
cd usr
cd local
cd libdragon
cd examples

Es imprescindible aprender como se navega por los archivos con el terminal, si queremos ver que contiene la carpeta actual escribimos "dir" en el terminal.
- En este enlace hay descripción de todas las funciones de libdragon

RESULTADOS
Bueno por fin, pedazo de tostonazo no? Con razón ni dios programa nada de homebrew en N64 :D

El test bmb es simplemente una imagen que se puede mover por la pantalla usando el joystick analógico, el código que he implementado para sacar los fps es muy experimental, se basa en la teoría de que cada ciclo de código es un frame renderizado y que el clock de sistema es independiente, puede que no sea exacto, pero todo parece indicar que libdragon por defecto funciona a 30fps y hay que modificar algún valor para cambiarlo.
Imagen

Se pueden usar sprites por hardware o por software (que todo lo haga la cpu), obviamente por software es MUY lento, si los hacemos por software no hay limite de tamaño, puedes coger una imagen de 1MB y la N64 hará lo que pueda para representarla, si usamos los sprites por hardware estamos limitados a los 4KB de la TMEM.

En este otro ejemplo he usado el modo 640x480x32bits, lo máximo que da la consola, he cargado una imagen a lo bestia de 640x480 y 32bits de casi 1MB (de los 8MB totales con expansión), el rendimiento es de... 3fps, como es de esperar, creo que para modos por software lo ideal sería usar 320x240 y 16bits.
Imagen

LIMPIEZA
Una vez funcione todo correctamente podemos borrar la carpeta temp de C:\cygwin\usr\local\libdragon, ya no nos hará falta y ocupa más de 2GB.

Seguiré experimentado a ver si puedo hacer alguna tech demo maja o algo :)
Señor Ventura
MegaAdicto!!!
17.566 mensajes
desde ene 2014
Esto ya me gusta mas XD

A mi lo que mas me apetece es zambullirme en toda la historia del proceso de la N64, sus especificaciones originales, el funcionamiento del hardware final...

Gran trabajo, sigue así [ginyo]
FFantasy6
MegaAdicto!!!
25.016 mensajes
desde dic 2003
BMBx64 escribió:TUTORIAL: COMPILAR Y USAR LIBDRAGON EN WINDOWS
Bueno pues vamos con algo nuevo, esto solo tiene sentido para el que tenga un copión o flashcart y quiera trastear con la consola, las roms generadas no funcionarán en la mayoría de emuladores (los que solo miran libultra), funcionará en emuladores a bajo nivel como MESS o CEN64.


Fixed.
Este hilo es genial.
Me asombra realmente la diferencia gráfica de un juego a otro de esta consola. Hay juegos con pésimos gráficos, poca carga poligonal y con un framerate completamente errático. Mientras que otros son todo lo contrario.

El otro día estuve justamente probando el San Francisco Rush y me resultó imposible jugarlo. Sin embargo su secuela es espectacular técnicamente hablando. Si uno lo ve distraído podría pasar por un juego de Dreamcast.

No se si tiene mucho que ver con el hilo, pero me llamó mucho la atención y quería mencionarlo :p
He actualizado el tutorial de libdragon añadiendo info de la libmikmod, ahora se puede reproducir música en los ejemplos, he actualizado el zip añadiendo otras cosas para facilitar la instalación.

La consola es una buena bestia para las 2D, es una lastima que apenas se explotara, por software puede renderizar más de 128 sprites sin bajar de fps en modo 320x240x16bits.
Imagen

Por hardware de momento he conseguido este rendimiento con la libdragon, sin optimizar nada, los 2048 sprites son de 16x32 a 16bits.
Imagen

Cuando termine con los tests miraré de hacer algo funcional, una demo un juego o algo y ya subiré el ejemplo.

MÁS CURIOSIDADES

Controller Pak
La tarjeta de memoria siempre ha dado la sensación de llenarse enseguida, pero cual era su capacidad real ?
Imagen

Tenía solo 32KB de memoria SRAM alimentada por un modelo de batería no recargable, la capacidad esta repartida por páginas, 128 páginas x 256 bytes = 32KB, solo 123 accesibles, el resto se usan por el sistema de paginación, índice de tabla, etc.

Podían almacenarse un total de 16 juegos y el código para gestionar las partidas tenía que inyectarse en el propio juego, generalmente no llegaba a llenarse la lista, muchos juegos pedían las 123 páginas para guardarse, otros como Gex Enter the Gecko usaban 1 sola, donde solo guardaba el password que también podía introducirse manualmente.

Habían memorias no oficiales con más capacidad, aunque usaban un interruptor que alternaba 4 bancos de memoria siguiendo ese esquema.

Rumble Pak
Curiosidades que igual sepas o no de este accesorio.
Imagen

1) Funciona con 2 pilas AAA porque la consola no podría dar suficiente energía a los 4 mandos con rumble simultáneamente.
2) En las tiendas llegaron a hacer un mod donde se alimentaba del mando con tal de que no robaran el accesorio (o se quedara sin pilas), en la actualidad existen tutoriales para hacer el mod, teóricamente la consola puede con 2 mandos a la vez.
3) Según la libdragon (SDK) y el manual de programación oficial de N64 el rumble solo tiene 3 funciones básicas :
rumble_init
rumble_start
rumble_stop

Hay que usar intervalos de tiempo para darle forma y textura al tipo de vibración, se entiende que si dejamos el rumble iniciado en cada frame llegara a su máxima velocidad de vibración en muy corto periodo de tiempo y que si lo apagamos y encendemos en un cálculo constante podríamos mantener un nivel de vibración estable ajustado.

Emuladores
Existen varios emuladores funcionales en N64, uno dentro de Excite bike 64 (el Excite Bike original de NES) otro de Gameboy en Pokemon Stadium 1/2 bastante más avanzado porque se pueden jugar los Pokemon Rojo / Azul o incluso Amarillo de GBC, mediante el Transfer pak pasa la información completa del cartucho al emulador para hacer funcionar el juego, la cuestión es que han encontrado la manera de inyectar otros juegos para hacerlos funcionar.
https://www.youtube.com/watch?v=cB9jr4lOOvw


CHOPPER ATTACK
Este juego tiene el siguiente truco en la pantalla de presentación (Press Start): Matener Z mientras pulsamos en el DPAD: Derecha, Izquierda, Arriba, Abajo, A, B, Start, si lo hacemos bien tras pulsar start nos saldrá esto.
Imagen

Exacto, texture mode estaba mirando, funciona? Sí, que es? Elimina el filtrado de texturas, así que se ven pixels como bloques, en este caso no mejora el rendimiento del juego, el cual es muy bueno el 99% del tiempo, pero siempre me hace recordar que Nintendo pudo haber usado un menú genérico en sus juegos para elegir este tipo de detalles, captura en consola.
Imagen

Y en emulador ? Pues va a ser que también funciona, aquí he podido hacer un cara a cara de los beneficios de usar filtrado de texturas, recordemos que el emborronamiento del que tanto se habla no viene de los filtros, sino más bien de la salida de vídeo de la consola.
Imagen

TOP GEAR RALLY
Resulta que hubo un target render para mostrar que intenciones tenían con el juego, aunque obviamente se quedaron lejos del mismo, escenarios completamente distintos, mucha más carga gráfica en el target o la música que terminó siendo estilo tracker de amiga (música solo por canales izquierdos o derechos).
https://www.youtube.com/watch?v=NKkEk6k6wu4

Aún así TGR fue un juego genial en su momento, los escenarios lejos de ser los típicos túneles (hola v-rally) eran terrenos abiertos, con rutas alternativas, con detalles poligonales como casas, piedras, carteles, hasta podías salirte del escenario y hacer una escapada a la playa con detalles como el efecto majo en el agua.
Imagen

Cada rueda tiene física individual, eso permite todo tipo de rebotes, derrapes y posicionamiento sobre el terreno, el porcentaje de todas estas variables se puede alterar eligiendo diferentes neumáticos, volante o suspensión, el coche reacciona continuamente y de forma diferente a cada terreno, eso junto a los 30 fps estables hacen una conducción variada y bastante divertida, los choques son alocados, en la primera cuesta que hay en el nivel de la jungla.. vaya pues me he ido a tomar viento!
Imagen

Uno de los puntos más flojos del juego son los 5 circuitos que tiene, un fallo común en los juegos de la época, no importa que se puedan correr invertidos con diferentes cambios climáticos, eran muy pocos.

Otra cosa es el nivel de detalle de los vehículos que se vio perjudicado por la herramienta de dibujo del juego, tal como dice uno de sus programadores:
Asset creation was more of an issue with the restriction than the limitation itself. I really hated how we had to make the cars look in Top Gear Rally, because we allowed the users to edit the textures they had to have a very simple mapping which precluded us from making them look much better than they did.


Si miramos el editor de dibujo es bastante simple pero funcional, consta solo de 16 colores como suma total, no hay más, los detalles originales ya vienen con esa limitación, las texturas están agrandadas, en este caso aunque parezca de 128x128 la unidad mínima del píxel es de 4x4 por lo que realmente sería de 32x32 en este caso, todo ello fueron decisiones para reducir el espacio para guardar nuestros garabatos en el cartucho/tarjeta, quizás el zoom en las texturas para facilitar el trabajo de edición.
Imagen

Música
El menú más mola con la música Europea / Japonesa
https://www.youtube.com/watch?v=Z_y1Vd6QUmU

Un vistazo a como suena la americana
https://www.youtube.com/watch?v=7MwVGunH45k

GEX 64
Es tan port de PSX que conserva hasta las salas de guardado originales, con su botón delete pulsando cuadrado y todo.
Imagen

Para acceder a estas salas hay que usar el código de gameshark de levitar y tener mucha paciencia para encontrarlas, entre la niebla que deja escasa visibilidad, que están perdidas por el aire (al menos quitaron las plataformas que llevan a ellas) y que el juego tiene limites.. tras muchos intentos alguien logró llegar a una de las salas, en esta no aparecen los botones.
https://www.youtube.com/watch?v=o5nI8W_W8Tk

EARTHWORM JIM 3D
Tiene un menú de depuración para enseñar cosas como los fps, un momento, una muestra del porqué no hay que fiarse de lo que digan algunos emuladores.
Imagen

El contador de fps, marca lo que dice el emulador y no lo que debería el juego, si hacemos correr el contador de fps en consola el juego apunta a 30/31 fps, pero rara vez lo consigue, oscila entre 15 y 30 sin frameskip, es decir, se pondrá a cámara lenta cuando no consiga la velocidad objetivo.

Existe otro menú de información que marca el número de canales de sonido activos (no cuenta música) y pone información de objetos o incluso de polígonos por frame, canales activos he llegado a ver hasta 8 pero es probable que se usen más, el juego logra mantenerse a 30fps mientras el contador de polígonos esté por debajo de 900, no está rindiendo a mucho más de 30K pol/s, es uno de los rendimientos más bajos que he visto en la consola junto a los títulos de Infogrames.
Imagen

Mismo lugar y posición en consola, venga va, podemos dar por buenas las cifras de polígonos que arroja el emulador.
Imagen
djraxo
Habitual
73 mensajes
desde nov 2012
Waldo64
V1, Rotate, V2
1.055 mensajes
desde mar 2010
en 39°53'21.76"N 4°16'19.3E
Un placer ver tus posts @BMBx64 [oki]. Mira que es mi consola favorita, pero siempre me pareció una estafa el Controller Pak, 5.000 pesetas que costaba por 32KB de memoria, puff.

Muy curioso que el Rumble Pak fuese a pilas porque la consola no podía dar suficiente corriente a los cuatro mandos, yo en su época le adapté un trasformador genérico de Game Boy Pocket para usarlo en el Rumble, jajaja.

Una pena que no se explotase más a fondo la N64 para juegos 2D con sprites, sorprende que fuese tan buena en ello como has mostrado.

Al Top Gear Rally le di bastante, me gustaban los escenarios abiertos y el detalle de las ruedas, como comentas en tu post; estaba muy currado eso. En cuanto al Gex64, me ha matado que fuera un port directo de PSX, mira que dejarse hasta los iconos de los mandos de SONY [qmparto].
punko2
Adicto
130 mensajes
desde ago 2013
en A Cañiza
Muchas gracias mbm!!! Mira que no he probado casi juegos de la N64 (por ahora) pero muy interesante el post
ChepoXX
MegaAdicto!!!
3.650 mensajes
desde ago 2003
Me apunto el hilo, y espero a nuevas actualizaciones, por lo que te invito a dejes tu vida profesional, familiar y personal para dedicar mas tiempo a este foro y al hilo en particular [beer] [beer] [beer] bajo pena de tener que jugar al superman 64 durante un año consecutivo [uzi] [uzi]

La verdad es que esta bastante interesante el hilo en general y me interesa bastante el tema.
[sonrisa] [beer]

Cuando queráis empezamos con los detalles técnicos de la consola, de momento solo están siendo juegos, curiosidades y pequeñas cosillas.

Hay una beta del Superman 64 para máxima tortura XD

MÁS CURIOSIADES

Porqué esta pelota en el cable ?
Se trata de un requerimiento de la Unión Europea con respecto a las interferencias electrónicas, una especie de anillo de ferrita, hay 3 diferentes encapsulados, este es el común de Nintendo, más tarde se vendieron mandos sin él o quizás fueron importados?
Imagen

El botón reset
Imagen
No corta la alimentación de la consola, se trata de un botón que lanza una llamada a un reinicio por software, cuando la consola se bloquea completamente es imposible hacer reset, hay que apagarla.

1) El botón puede hundirse y estropearse, es un fallo bastante más común de lo que parece.
2) Existen juegos con apagados personalizados antes del reset, en Turok 1 suena una bestia al pulsar el botón, otros usan persianas que se cierran o diferentes fundidos.

Costes de producción
Una tabla comparativa con los costes por componente en el año 1997, se trata de cifras orientativas (cuando se refieren a subsistema de audio imagino que se trata del VDC-NUS o a componentes que conformen el conjunto del DAC), como podemos ver en Nintendo apuntaban hacia una maquina low cost (recordemos el precio en que se lanzaron PSX o Saturn), cabe destacar que hubo toda una serie de recortes de última hora como la salida RGB, algunas especificaciones y retrasos de la consola (la CPU inicialmente iba a funcionar a 105Mhz, lo cual significa que el RCP lo haría a 70Mhz, en lugar de 93,75 y 62,5 respectivamente).

En el caso del software se puede ver el precio de los cartuchos y sobretodo los elevados royalties como un punto negativo a la hora de apostar por N64.
Imagen

Haciendo un cartucho transparente
He visto por ahí un post donde enseñan imágenes de como se hace un cartucho de N64 en un molde, dándole color, etc me ha parecido interesante, imágenes cortesía de McFish.

Tenemos el molde por un lado del cartucho, luego por el otro, se limpian y recortan los restos, se usa una especie de embudo para rellenar los orificios más pequeños, con la forma final de la carcasa se empieza a pulir, se le da color..
Imagen
Imagen
Imagen
Imagen
Imagen
Imagen
Imagen

En su forma digievolucionada
Imagen

Y estas piezas de metal?
Sirven para facilitar el encaje del cartucho en la ranura de slots de la consola.
Imagen

Hay algunos cartuchos como el Everdrive que pueden venir sin esos metales, hay que tener cuidado porque se pueden dañar las patas del slot que se ve en esta imagen, como levantándolas de su sitio.
Imagen
1, 2, 3, 4, 5174