El articulo siguiente recoge la entrevista que le hice a Emilio, un joven programador de 20 años que se ha metido a hacer un emulador de NES. La cita se hizo mediante el MSN Messenger el día 17 de enero de 2004 y duro cerca de 40 minutos. a continuación aquí dejo el bis a bis:
Diskover dice:
¿Bueno, como fue que te dio por empezar a programar un emulador sobre la NES? (Cuenta toda la historia)
Emilio dice:
Pues mira había hecho un par de intentonas de un emulador, sin proponerme mucho el que. Primero emule una CPU que yo mismo me invente, bueno la verdad no hacia gran cosa solo ejecutaba media docena de instrucciones sencillas y tal. Luego lo adapté para un procesador que usábamos en las practicas de mi facultad (un motorola 88110) que tampoco lo acabe nunca XD, y paso cosa de un año o así sin que hiciese nada de nada hasta que un día me propuse que ya sabia lo suficiente como para intentarlo y lo intente con... la Mega Drive (Genesis) XDDDD, pero al cabo de unos días ví que no me gustaba como iba eso y que no me aclaraba así que me decidí a ver la NES por 2 razones: porque era mas antigua (y pensé que mas fácil de emular aunque luego no te creas, eh) y sobre todo porque estaba muchísimo mas documentada, y nada pues me puse a leer y a leer paginas y paginas sin entender mucho al principio y en cosa de un mes o así me puse a escribir el emulador a partir del código que tenia del 88110 y bueno, pues nada, añadir que la emulación siempre me ha gustado bastante desde que la descubrí hace cosa de 4 o 5 años, no recuerdo bien. A parte de por el lado técnico, porque trae muy buenos recuerdos XD.
Diskover dice:
¿Cuando empezaste a programar el emulador?
Emilio dice:
A mediados de Noviembre empecé a codificar. Digamos que desde principios de Noviembre.
Diskover dice:
¿Que es el 88110?
Emilio dice:
Es una CPU de Motorola. La de la Mega Drive es el Motorola 68000. Pues este es un sucesor suyo que la verdad no se si se ha usado en alguna consola.
Diskover dice:
Creo que no
Emilio dice:
Si, yo también creo que no.
Diskover dice:
La NES utiliza como CPU el 6502, ¿que tiene que ver el 88110 en todo esto?
Emilio dice:
Que podía reutilizar la estructura del código que tenia ya.
Diskover dice:
¿Se entienden entre ellos?
Emilio dice:
No, pero son 2 CPUs con su memoria, sus registros y tal. El caso es que tenia un código del que partir
Diskover dice:
Entonces supongo que son muy parecidos, ¿no?
Emilio dice:
No, no era un código muy esquemático, tan esquemático que lo podía adaptar a cualquier CPU. Eran tan solo cosa de 300 líneas de código o así, pero ya no me tenia que pensar muchas cosas y eso me animo.
Diskover dice:
Antes has dicho que estudias en la Universidad, ¿Que carrera haces y de donde eres?
Emilio dice:
Ingeniería Informática en la UPM en Madrid (de Madrid)
Diskover dice:
¿Sabes que eres de los pocos españoles que están programando o han programado un emulador?
Emilio dice:
Si esa es otra de las cosas que me animo. Aquí la gente no se anima mucho a esas cosas, solo el 5% de mis visitas (a su pagina) son españolas aprovecho para decir.
Diskover dice:
Volviendo al tema central, ¿Como empiezas a programar el emulador de NES, como te organizas, que pasos has de seguir?
Emilio dice:
Pues bueno, primero fueron los 2 años de carrera y un pico del 3º pero eso no se hace apropósito XD. Primero lo que te digo, pensé un poco como hacer un emulador en líneas generales, basándome en una practica que teníamos que venia a ser hacer un pequeño emulador pero de una forma bastante extraña, y entonces pensé que podía hacerlo. empecé a buscar en Internet como programar un emulador y la verdad que no encontré demasiado, no hay muchos libros sobre el tema XD, o al menos que yo sepa. Luego me baje códigos de emuladores ya hechos y aunque saque poco en claro me guiaron un poco. Luego hice el apaño este que te digo para el 88110 y cuando ví que "funcionaba" pensé que ya estaba listo para emular algo mas tangible así que llegamos a donde antes. Me imprimí cosa de 200 folios de documentación de la NES y me los fui leyendo poco a poco
Diskover dice:
Supongo que debiste visitar muchísimas paginas en ingles sobre la NES
Emilio dice:
Unas cuantas pero si me dejas mencionar una...
Diskover dice:
Adelante
Emilio dice:
Sobre documentación técnica: Nesdev
Diskover dice:
Oh, si, la conozco
Emilio dice:
Ahí tienes prácticamente toda la información de hardware de la NES.
Diskover dice:
Conozco el sitio, además hacen demos para la NES
Emilio dice:
Creo que apenas 2 documentos de los que tengo no son de ahí, además la comunidad aun sigue viva y eso ayuda, claro.
Diskover dice:
Bueno, actualmente ¿que partes has hecho del emulador?
Emilio dice:
Pues esta hecha la CPU entera, (aunque tiene que tener algún bug aun) y la PPU esta prácticamente hecha quitando el tema del scroll y algún detalle mas (que debo reseñar que son unos temas huesos) y el chip de sonido esta sin estrenar aun porque mis conocimientos al respeto son mas bien escasos pero todo será ponerse.
Diskover dice:
Por ahora ¿que es lo que te ha parecido mas complicado?
Emilio dice:
Mmm... la depuración de la CPU es complicada porque me tuve que hacer un depurador solo para eso y además hay contradicciones en la documentación que tengo y también es complicado optimizar el código y que siga siendo legible
Diskover dice:
¿Que has conseguido emular por ahora?
Emilio dice:
Pues unas cuantas demos de Nesdev, pantallas de títulos de bastantes juegos y actualmente el único juego que es medianamente jugable: Donkey Kong.
Diskover dice:
Es un gran avance. Sobre los mappers ¿Por ahora solo emula el 0, no?
Emilio dice:
Si, emula el 0 que viene a ser no Mapper, aunque según he leído el mapper 2 y 3 son fáciles de emular.
Diskover dice:
Explica que es un mapper para que la gente se aclare
Emilio dice:
Pues un mapper y aunque la verdad no es un tema del que este muy documentado actualmente viene a ser un componente hardware del cartucho que usa la NES cuando las ROMs son mas grandes que la RAM de la NES. Esta segmenta la ROM y la carga por partes en la RAM. Algunos mappers también añaden alguna función extra para hacer alguna gracia grafica extra y tal.
Diskover dice:
¿Cuanta memoria tiene la NES para cargar un juego sin mapper?
Emilio dice:
Pues en teoría FFFF bytes que en decimal ahora mismo creo q son cosa de 65KB pero luego es mucho menos. En la practica son 32KB de RAM de Datos PRG y 16KB de CHR (PROgram y CHaRacter).
Diskover dice:
Entonces, los mapper "amplían" esta memoria, metiendo datos por partes para que los juegos sean mas grandes, a parte de añadir alguna función grafica, como habías dicho, ¿no?
Emilio dice:
Básicamente, no la amplían pero no hace falta tener ocupada tanta memoria así que la hacen cachitos para que la NES se los pueda tragar. Pero si, claro, permite juegos mas grandes.
Diskover dice:
Sobre lo del sonido, la NES esta compuesta de 5 canales diferentes, uno de ellos digital de 8 bits, ¿lo ves muy complicado el emularlo?
Emilio dice:
Veo mas complicada entenderlo que emularlo. Uso una librería llamada SDL que tiene funciones de sonido. Imagino que no será muy difícil de hacer, pero es que actualmente no se muy bien ni que define un pulso "musical": creo que la frecuencia y la intensidad pero vamos no se mas de eso. Me tocara leerme unas cuantas paginas.
Diskover dice:
Cambiando de tema, si acabas el emulador ¿Probaras a hacer alguna demo o juego para la NES? ¿Es difícil?
Emilio dice:
No creo, programar una NES es bastante coñazo la verdad, solo programo para ella lo mínimo para comprobar mi emulador. No es difícil hacer cosas tontas del tipo poner hola en la pantalla y mover una cuadrito pero hacer algo como un Mario eso ya es otro cantar.
Diskover dice:
Explica como se programa en la NES, que se utiliza.
Emilio dice:
Pues ensamblador del 6502 y un editor de teselas (8x8pixeles). Yo las teselas ni las creo las "mango" de otras demos o juegos porque para probar el emulador no me hace falta que quede bonito.
Diskover dice:
¿Que es un tesela?
Emilio dice:
Es un cuadrito de 8x8 pixels. La VRAM la NES esta llena de eso.
Diskover dice:
Creo que en otra ocasión me habías comentado que programar en C para la NES no resultaba bueno. ¿Puedes explicarme esto y el por que?
Emilio dice:
Pues hombre, es tirar piedras contra mi propio tejado pero hace un emulador lento, aunque claro para la NES y con los PCs q hay hoy en día, mi emulador puede correr bien en un 350MHz o 400MHz pero claro para una NES eso es un poco pasote.
Diskover dice:
¿Y en BASIC, podría ser que se pudiese programar un juego para la NES?
Emilio dice:
Si encuentras un compilador si, pero el juego seria lento lento, no se si hay compiladores de BASIC para NES.
Diskover dice:
Vamos, que no hay mas cojones que hacerlo a pelo con el código maquina
Emilio dice:
Pero vamos no conozco a nadie que halla hecho una demo en BASIC, mas bien.
Diskover dice:
Los programadores de juegos de NES de hace años debían de ser dioses o algo por el estilo
Emilio dice:
Pues si porque hacer el Mario en ensamblador resulta difícil de imaginar XD. Aun así todavía algunos juegos de hoy en día se optimizan haciendo partes en ensamblador (o eso nos dijeron los de Pyro Studios).
Diskover dice:
Ja ja ja ja
Diskover dice:
Oye, ¿Pondrás un entorno grafico a tu emulador?
Emilio dice:
Si consigo integrarlo sí, pero eso es algo de momento a medio plazo. Por ahora tocara arrastrar la ROM encima del EXE.
Diskover dice:
¿Mas o menos, para cuando podrás tener una primera versión buena del emulador (Me refiero a que ya emule varios juegos y tenga sonido)?
Emilio dice:
Pues no sabría decirte porque creía que en llegar a donde estoy ahora tardaría 6 meses y he tardado 3, así que te diré otros 6, pero puede que sean menos (o mas).
Diskover dice:
Bueno, te doy muchas gracias por prestarme un rato tu tiempo. Espero que salga adelante tu emulador. Suerte Emilio y ya sabes que aquí estamos para ayudar.
Emilio dice:
De acuerdo, gracias a ti. Bye.