Emulación: Retrospectiva (I)

Visitando el sitio de Pete Bernert –Brillante coder de plugins para emuladores de psx–  al ver sus “Fairy Tales” vinieron a mí memorias de una época dorada, nostálgico quizas, recordé, al menos, lo fue para mí, los “Años Maravillosos” de la emulación de consolas en la PC; por allí por finales de los 1990s e inicios de los 2000s.  Aquellos tiempos que, ya sea por nostalgia, por falta de oportunidades, o por retarse a uno mismo se pasaba horas esperando para que, a través de nuestro modem de 33.3 K conectado por puerto COM1, terminara de bajar el bendito ROM de super nintendo de 6 MiB/48mbit (no te olvido  Tales of Phantasia), y luego, justificarlo en fin de mes al venir la carísima factura de teléfono.

Gracias a las extraterrenales habilidades de  ingeniosos hackers, muchos pudimos conocer, terminar y disfrutar varios títulos que nunca pudimos jugar en la consola original, ya sea por que nunca encontramos quien nos los “traficaran”, o no los encontramos en la tienda por inventario agotado, o simplemente a las “brillantes” gerencias de –inserte aquí su compañía favorita de videojuegos– no se les antojaba traerlos a América.  En fin, muchas pueden ser las causas, y la solución mas sencilla, irse a buscar el ROM, de ser necesario ver si había algún parche para traducirlo, y a jugar.

Pero muchas veces no era solo así, qué aburrido hubiera sido para muchos de nosotros sólo colocar el ROM, darle “play”  y jugar.  Habíamos muchos, que teníamos máquinas ultra limitadas y con bajo poder de procesamiento respecto a la tecnología de la época, en donde, con las configuraciones default; o no corría bien el juego, o simplemente no corría.  Había que tener el tiempo y las ganas para poder “jugar” con las configuraciones y/o parámetros del emulador en cuestión para que, con nuestros modestos equipos al menos funcionaran los ROMs que deseábamos jugar,  qué mejor si eran de SNES…

Sí el SNES, esa maquinita gris con tan buenos juegos de la era de 16 bits, y para 1999 ya casi obsoleta en el mercado, pero muy bien emulada gracias al esfuerzo de los hackers anteriormente mencionados, que la tenían como de sus favoritas.  Aunque ya no viví la era de los emuladores mas primitivos como ESNES o NLKE, tuve que probar varios otros derivados y/o más mosdernos para ver cual se adecuaba al bajo poder de procesamiento y escasa memoria de ordenador que poseía en esa época (12mb de RAM WTF!). Las más factibles soluciones eran SNEMUL, Snes9x o ZSNES,  el cual SNEMUL tenía una bonita GUI, pero los juegos corrían lento y era algo incompatible.  Snes9x era bueno, y con excelente compatibilidad, aunque también era demasiado lento para mi vieja máquina, tambien por alguna extraña razón no me permitia usar el modo VESA de mi tarjeta gráfica XGA2, además que por la escasa memoria que tenía no me permitía cargar ROMs mayores a 2 MiB/16mbit.

ZSNES, era la salvación, el más rápido para los roms (gracias a que estaba hecho en una “cosa rara” para mí en ese tiempo llamada “Assembler”), consumía poca memoria y además funcionaba de maravilla el modo VESA, con lo que ya tenía mis 15 bit de color y transparencia en mis jueguitos.  Aunque tuve problemas de emulación por no contar con tarjeta de audio en la vieja PC, había un excelente chapuz para emular la salida de audio.  El emulador mejoró, se portó para múltiples plataformas como BSD, Linux y Windows, le agregaron bonitos efectos gráficos de post procesados, etc. Por todo esto, es y será el emulador que siempre instale por defecto en cualquier máquina basada en  intel x86, aunque ya no haya un Release oficial desde hace años –que no creo que necesiten pues la compatibilidad es casi perfecta.

Pasaron los años, actualmente el ZSNES sigue en el eterno desarrollo por hacerlo más portable a otras arquitecturas no x86, y gracias a la portabilidad inicial de SNES9x, éste otro sí fue portado a diferentes plataformas, que van desde x86-64 nativo hasta arquitecturas PowerPC como PS3 o el Wii, MIPS como el PSP o ARM como los “ifonos” y “droides”.

Cabe mencionar que nomás liberaron el código fuente de ZSNES y lo descargué para curiosear “las tripas” de dicho emulador, me pareció (y me sigue pareciendo) bastante complejo, eran cientos de archivos escritos en assembler, unos otros escritos en c, makefiles hechos a mano, etc.  Y gracias a revisar esas “tripas”  estudié cómo interactuaba ese monton de archivos de assembler, sus macros y llamadas a funciones de C, aprendí qué era un Makefile, cómo compilar con éstos en entornos windows usando DJGPP  (que era el compilador de c que recomenadaban para ese port) y NASM,  y mínimas modificaciones a los “strings” en los archivos .asm para hacer una version semi traducida que nunca fue publicada. Aunque ahora casi solo uso Snes9x en mis gadgets para jugar… mucho de lo que aprendí en mi “juventud” se lo debo a ZsKnight y su fantásticamente caóticos asm de zsnes.

Anuncios

Un viaje por los editores hexadecimal en Gnu/Linux

Dado que actualmente tengo tiempo de ocio, decidi retomar mis riendas de hacker, y comenzar a investigar acerca de la emulación de Gamecube/Wii sobre el x86/x64.  Encontré un emulador bastante desarrollado llamado Dolphin, el cual he estado probando como viciojugador, pero la curiosidad me llevó mas lejos. decidi bajar las fuentes, y dado que existia una version para gnu/linux, esa fue la elección.

Mi idea no era solo jugar los benditos juegos… sino tratar de encontrar bugs (lo cual no fue muy dificil de localizar, sobre todo en el motor JITIL del mismo) y resolverlos por mi cuenta, pero para poder entender necesitaba algo importante… aprender principalmente el set de instrucciones del power pc (opcodes, etc). Esto me llevo a buscar la documentación técnica del aparato en cuestión, (el YAGCD), en la cual se encuentra la mayoría de “shucadas” necesarias para poder lograr la magia de la emulación de esta máquina…

Bueno, pues en mi aventura, me di cuenta que me hacia falta algo bastante importante… un buen editor de hexadecimal.  Dado que antes programaba más en windows, usaba el típico y poderoso winhex, pero… opciones para gnu/linux? no estaba muy informado.  me puse a buscar algunos en los repositorios de Ubuntu, y estos fueron mis candidatos:

Hexedit:

Hexedit

El venerable Hexedit

Editor que ya habia utilizado hace algún tiempo, y que a pesar de ser aplicación en consola, no le quita su capacidad. Lo mejor de este es el footprint en la memoria, no ocupa casi nada por su naturaleza en consola.  La interfaz es sencilla, algunos comandos son bastantes parecidos al emacs (como el de “yank” o pegar). la verdad muy bueno para cuando se tenga mucha necesidad y no se tenga mucho ancho de banda.

Okteta:

Okteta

El elegante Okteta

Editor Hexadecimal para KDE,  con muy buenas opciones y usabilidad heredada del QT4 como cualquier aplicación moderna KDE.  Se veía bastante bueno, y con buenas opciones, pero al nomas probar el primer archivo me falló.  Dado que lo que iba a abrir en éstos eran imágenes de juegos de Cubo, estúpidamente me volcaba todo el ISO en la memoria, llenando casi toda la RAM.  Lástima.

Emacs:

El poderoso emacs

El poderoso emacs

El típico M-x hexl-mode de emacs no podía faltar como fanático de éste editor desde hace años.  Sin embargo, al igual que con Okteta, optaba por abrirme el buffer y volcarlo directamente a memoria, algo que no era nada eficiente para la tarea que iba a realizar.

Bless:

El sencillo bless.

El sencillo bless.

Un nombre bastante certero para la ocasión. Es la opción para los usuarios de gnome y GTK, la verdad, como todas las aplicaciones GTK, la interfaz gŕafica es bastante sencilla, permite hacer las operaciones pertinentes sobre los datos, y lo mejor de todo, abrió el archivo en modo stream, de tal manera que no me llenó la memoria física. Definitivamente una bendicion.

Bueno, para las tareas básicas que estoy realizando como es simplemente estudiar la estructura del sistema de archivos de un iso de gamecube, bless satisface mis necesidades. Aunque si alguien sabe de un mejor editor hexadecimal que sea amistoso con mi RAM y me permita abrir archivos grandes sin matar mi memoria, bienvenidos sean los comentarios…