> ÍNDICE DE REVISTAS <
Número 7 - Mayo 2004 ZX Certified webmaster speccy.org
 

Entrevista a Pedro Gimeno

La década de los 90 supuso el declive comercial del Spectrum y la popularización del compatible IBM-PC. Fue entonces cuando muchos de nosotros pudimos seguir disfrutando de los juegos de nuestro pequeño amigo en la nueva plataforma de ocio y trabajo, gracias a un sorprendente programa publicado a finales de 1992 en la revista PCManía.

"Spectrum.exe", el primer emulador de Spectrum español, trajo los ficheros en formato SP a nuestros discos duros, e inició el fenómeno de la emulación de Spectrum al alcance de todos los usuarios españoles. Este mes entrevistamos a su creador, Pedro Gimeno.

"Mi objetivo con el primer emulador era que mi Spectrum no se perdiera aunque se me estropeara."

Cuéntanos cómo te introdujiste en el mundo del Spectrum. ¿Fue de la mano de los juegos, o te atrajeron sus posibilidades a nivel de máquina de cómputo?

Pues siendo el año 1981 y por tanto estando aún en sus albores la computación doméstica, no es de extrañar que lo que más me fascinaba fuera el poder de cómputo y la inmensidad de posibilidades que parecía ofrecer. Pero claro, no hay que olvidar que por aquellas fechas yo tenía trece años, por tanto la idea de aprovechar ese potencial para jugar era casi natural a esa edad.

¿Cuál ha sido tu evolución dentro de los diferentes modelos de ordenadores antes y después del Spectrum?

Empecé con un ZX-81 que me prestaron durante bastante tiempo. Con él aprendí ya bastante sobre el BASIC de Sinclair, pero no tardé en darme cuenta de que los programas más interesantes estaban hechos en código máquina, y ¡oh, bendición del cielo!, el apéndice A del manual incluía una lista de las instrucciones del Z80. Mis primeros programas en código máquina los escribía tecleando directamente una línea REM con las letras cuyo códigos eran los de las instrucciones que necesitaba. He eludido mencionar "códigos ASCII" porque el ZX-81 no usaba el estándar ASCII. En el ZX-81 había sólo unos pocos códigos que no tenían un carácter equivalente, y esos los cambiaba mediante POKEs a posteriori. Aún recuerdo la famosa secuencia "ERND" por la que empezaban muchos programas; esto equivalía a "ld hl,(DFILE)", es decir, cargar HL con la dirección de la pantalla. También recuerdo que el programa se ejecutaba con RAND USR 16514, que era la dirección del carácter que seguía al REM.

Cuando vi las especificaciones del ZX-Spectrum me quedé maravillado (no es de extrañar viendo las del pobre ZX-81). Mi primer contacto con un Spectrum fue en casa de un compañero de colegio; por desgracia no hubo tiempo para mucho, apenas para probar el PLOT y comprobar la alta(?) resolución (recordemos que la resolución del PLOT del ZX-81 era de 64x44 a base de caracteres semigráficos).

Me costó mucho convencer a mis padres para tener uno, pero finalmente accedieron. No estoy seguro del año; es muy probable que fuera en 1983. En cuanto lo tuve lo primero que hice fue averiguar cómo se hacía en el Spectrum todo lo que estaba acostumbrado a hacer en el 81: dónde estaba la memoria de pantalla, cómo estaba organizada (menudo chasco cuando vi la extraña estructura), cómo escribir código en REMs y todas esas cosas. No tardé mucho en darme cuenta de que el sistema de los REMs no era el más indicado; los códigos de control introducidos con el cambio a ASCII eran un obstáculo muy fuerte, porque había bastantes instrucciones importantes en el rango 0-31; notablemente el 17, que era un código de control que además producía errores al listar. Tuve que mudarme a emplear la nueva instrucción DATA y escribir con números decimales en vez de caracteres.

Luego por supuesto apareció el típico vecino que tenía un amigo que tenía muchos juegos. De entre los primeros que me llegaron recuerdo con especial cariño el Scuba Dive y, sobre todo, cómo no, el Manic Miner. Cabe decir que mis padres no aprobaban la compra de juegos y yo no tenía dinero, así que la opción de tener originales no estaba entre las posibles.

El siguiente ordenador que tuve fue un PC, un 286 a 10 MHz con tarjeta EGA y 70 Mb, que aunque en realidad era de mi padre yo era el principal usuario. Para entonces ya había utilizado muchos PCs y conocía bastante su estructura. Era de procedencia francesa; la marca se llamaba Goupil. Entre la documentación se encontraban manuales técnicos del hardware y el código fuente de la ROM; esto me ayudó bastante a profundizar en el funcionamiento interno de un PC con todos sus periféricos, sobre todo la tarjeta gráfica.

Más adelante comencé a trabajar y a tener autonomía económica. El primer ordenador que compré fue un Sinclair QL, aunque ya se había pasado un poco la época de su máximo esplendor. Era técnicamente bastante atractivo, salvo por tres inconvenientes básicos: era algo lento (basado en un 68008), tenía poco software y funcionaba mediante los odiosos Microdrives. Esto último me llevó al extremo de tener que devolverlo, ya que desde que lo compré estaba constantemente teniendo que llevarlo a reparar porque el cabezal de lectura se desplazaba y dejaba de leer. Supongo que estaba defectuoso. El software que incluía, sin embargo, era muy bueno y guardo buenos recuerdos de él.

También compré un Atari 1040 ST, pero el uso que le di fue casi exclusivamente dedicado a la música por MIDI. No profundicé en sus posibilidades computacionales.

A partir de ahí todo lo que he tenido han sido PC's, excepto por un Commodore 128 que me regalaron porque querían a deshacerse de él, pero que no llegué a usar (no tenía software). Más adelante también conseguí un ZX-81 en buen estado, pero tampoco he llegado más allá de comprobar que funcionaba. También un Inves Spectrum sin fuente de alimentación, que no sé si funciona.

Y de todos estos equipos, ¿cuál es tu preferido o de cuál guardas mejores recuerdos?

El Spectrum, por supuesto. ¿Acaso lo dudabas?

Debo decir de todas formas que cuando preparé mi segundo emulador en el Pentium 200, me maravillé de que tuviera la potencia suficiente como para realizar una emulación completa en tiempo real, ciclo a ciclo. Viendo que iba sobrado de velocidad no me preocupaba mucho añadir aspectos más finos de la emulación, porque sabía que los soportaría. Esto me permitió decidirme a incorporar emulación de 128K, opciones de sonido y otros refinamientos.

¿Qué ocurrió con este tu "segundo emulador"?

La idea partió de la documentación del x128 de Joe McKay, creo que en la versión 0.5. Este emulador incorporaba una opción llamada "ULA Delay" en un intento de que se vieran demos como la Overscan de Busy Soft. El autor se quejaba de que el número de ciclos parecía ser un número fraccionario, cosa que no alcanzaba a entender. Al leerlo sospeché que el problema consistía en que el retraso no era homogéneo, sino que dependía de algún factor como a qué dirección se accedía en qué momento. Así que me lie la manta a la cabeza y me puse a investigar sobre la "contended memory" hasta que tuve todos los detalles bien perfilados.

Sólo faltaba aplicar mis descubrimientos. Mi objetivo con el primer emulador era que el Spectrum no se perdiera aunque se me estropeara, pero sabía que la emulación era imperfecta. Pero tras mis averiguaciones tenía, por primera vez, la oportunidad de realizar una emulación prácticamente perfecta. Esto significaba, por supuesto, renunciar a que se usara en máquinas de potencia modesta, pero el precio a pagar era pequeño en comparación con la ganancia. Así que de nuevo me puse manos a la obra empezando un nuevo emulador desde cero, pretendiendo incorporarle todos los refinamientos de emulación de que fuera capaz.

Para entonces ya empezaban a existir unos cuantos "DOS extenders" y el NASM acababa de salir. Decidí pues entrar en el maravilloso mundo de los 32 bits y el DPMI, esta vez usando íntegramente herramientas FOSS. Por el camino me enfrenté a algunos errores en el NASM que localicé y reparé (y de los cuales por supuesto informé a su autor, que para entonces aún era Simon Tatham, a quien también debemos hoy el PuTTY).

El primer extensor que utilicé creo que era el PMODE/W. Mientras programaba el emulador y le iba añadiendo cosas me amenazaba cada vez más la idea de que el resultado no funcionara con la suficiente velocidad ni siquiera en un Pentium 200. Puedes imaginar la alegría que me llevé al hacer las primeras pruebas de temporización, sólo comparable a aquella primera vez en la que vi el Manic Miner aparecer en la pantalla.

Más adelante, ante la perspectiva de portarlo a Linux, renuncié a usar únicamente ensamblador y decidí escribir en C la interfaz con el sistema operativo, con lo cual pasé a usar DJGPP y su extensor. Por entonces ya había pasado por varios extensores y linkers, incluyendo el linker de RDOFF del NASM; probablemente sea de las pocas personas del mundo que le han sacado utilidad, en parte gracias al WDOSX que lo soportaba.

Este emulador fue el primero en el que se vio la demo Overscan correctamente. Pero el tiempo que podía dedicarle no era mucho, y el retraso en el lanzamiento me hizo pensar que tal vez era mejor publicar la información que había recopilado con la esperanza de que otros la aprovecharan. Y así fue, pero sólo el FAQ de comp.sys.sinclair me otorgó crédito por ello. Como resultado mi nuevo emulador cayó básicamente en el olvido. Con la aparición del RealSpectrum vi satisfechas mis propias necesidades en cuanto a emulación y decidí no proseguir con el desarrollo.

En tu época en el mundillo del Spectrum, ¿llegaste a tomar contacto con algún grupo de programación de compañías como Dinamic, Made in Spain, Zigurat u Opera?

No, en absoluto. En el Spectrum no destacaba por ningún programa. Lo que más hacía era jugar, buscar pokes cuando el juego era demasiado difícil para mí, lo cual ocurría con frecuencia, y desproteger programas para copiarlos (he de decir en mi descarga que no tenía dinero y mis padres no apoyaban que jugara). Para mí desproteger era un desafío interesante; llegué a poder con algunas protecciones complicadas como por ejemplo el famoso Speedlock.

Sin embargo, más tarde, como resultado de escribir el emulador, Víctor Ruiz se puso en contacto conmigo para pedirme una adaptación del juego After The War al PC usando el emulador mismo. Accedí y el juego fue publicado, aunque sin control de velocidad de ninguna clase. Los únicos cambios fueron: una optimización de la velocidad para la instrucción LDIR hecha a medida del programa, y una adaptación para evitar que necesitara la ROM del Spectrum, ya que según me aseguró el juego no requería de la misma, y por motivos de copyright no querían incluirla.

¿Llegaste a programar algún programa o juego complejo o extenso para Spectrum?

Realmente no. Los programas más complejos que recuerdo fueron uno para probar autómatas celulares lineales y uno que hacía de buzón de correo para radio que en realidad nunca se llegó a poner en marcha.

También hice un programa para mostrar el conjunto de Mandelbrot, pero usando coma flotante lo cual lo hacía tremendamente lento incluso siendo compilado. Llegué a obtener una imagen decente en blanco y negro del conjunto cuando aún no conocía (¿no existía?) el ahora famoso Fractint. Era el año 1985; A.K.Dewdeney acababa de publicar su famoso artículo sobre este fractal en la revista Investigación y Ciencia, a la que mi padre estaba suscrito. Por entonces no conocía las técnicas de cálculo en coma fija mediante enteros; si lo hubiera programado ahora seguramente me hubiera salido mucho más rápido.

Pasando a hablar de tu emulador Spectrum, ¿cuándo y cómo se te ocurrió la idea de programar un emulador de Spectrum para PC?

Bueno, para cuando tuvimos el Goupil las casas que reparaban Spectrums empezaban a escasear y yo temía que llegara el momento en el que se me estropeara y no pudiera arreglarlo. Quería encontrar una forma de alargarle la vida y al mismo tiempo poder usar un teclado en condiciones. La idea de emularlo surgió casi sola a partir de esas premisas. Además corría la voz de que existía un emulador para Amiga, lo cual resultó ser verdad. No recuerdo de quién era, puede que fuera el de Peter McGavin.

Sabía que para emular un ordenador de 3.5 MHz con uno de 10 necesitaría código lo más optimizado posible y que aún así iría lento, lo cual más tarde se demostró cierto. No era posible escribir un emulador tal que por cada tres instrucciones de PC se consiguiera una de Spectrum. He de hacer notar que la técnica de la compilación Just In Time no se me ocurrió ni era ampliamente conocida. Sí que es cierto que el emulador de Amiga la empleaba, pero no tuve el menor contacto con él ni conocimiento de sus técnicas.

Empecé a escribirlo en Pascal pero renuncié enseguida, dándome cuenta de que en ensamblador sería mucho más sencillo de lo que me imaginé al principio, incluso más que en Pascal. Los manejos de memoria serían mucho más simples, y con una tabla de saltos paliaría bastante el problema de la velocidad. Además con los flags la CPU me ahorraría un montón de trabajo, y podría sacar ventaja del hecho de que el x86 tiene los flags en las mismas posiciones de bits que el Z80. Así que me lié la manta a la cabeza y me puse manos a la obra con un emulador en ensamblador.

Cuéntanos algo sobre el proceso de desarrollo de tu emulador. ¿Qué herramientas de desarrollo usabas? ¿De dónde obtuviste toda la información técnica necesaria para la emulación de ciertas instrucciones indocumentadas, de los timings de las mismas, etc.?

Mi editor favorito siempre ha sido uno llamado SEE que me presentó mi amigo Javier Vázquez. Con él editaba los .asm, y los ensamblaba con el TASM. Dada la extensión tuve que organizarlo por módulos (ficheros .obj que luego enlazabacon el TLINK). Aprendí a escribir Makefiles para no tener que compilar todo el proyecto cada vez que hacía un cambio.

Como información sobre el Z80 usé las microfichas de código máquina de Microhobby, por la comodidad del formato sobre todo. De la temporización no podía ocuparme dada la poca velocidad que esperaba obtener y de hecho obtuve. Además de las microfichas consultaba un libro sobre el Z80 de SGS proporcionado por mi amigo Diego Hernández.

El manual técnico del Goupil me fue extremadamente útil para recabar información sobre la EGA y sus detalles. Por desgracia, los modos estándar de la EGA eran muy lentos para escribir en ellos; había que escribir por planos, desglosando cada color en cuatro bytes distintos. El primer emulador que tuve a punto, el EGASPEC, tenía un cuello de botella tremendo en el vídeo.

Conocía un juego que aprovechaba una característica extraña de la CGA para implementar un modo de vídeo de 160x100 a 16 colores. Lo hacía mediante un modo de texto, alterando la altura de los caracteres. En una conversación que mantuve con Alejandro Valero sobre el problema de la velocidad gráfica, durante una tormenta de ideas se nos ocurrió usar una técnica parecida a la de ese juego, utilizando un modo de texto, y redefinir los caracteres (en la CGA no era posible, pero en la VGA sí). Así le dimos forma al que sería el modo definitivo: caracteres de 8x1 con la misma forma que los bytes de Spectrum en la memoria de pantalla. Cuando implementé ese modo, la mejora de la velocidad gráfica fue realmente espectacular.

¿Quieres decir que en lugar de utilizar píxeles en un modo gráfico, tu emulador utiliza CARACTERES DE TEXTO redefinidos para así dibujar múltiples píxeles de una sola vez?

Sí, en efecto. No sólo eso, es que además separa caracteres y atributos de la misma forma que en el Spectrum, y por tanto cada byte de memoria de pantalla del Spectrum equivale a un solo byte de memoria de pantalla del PC para la zona de píxeles. La información de atributos implica un poco más de trabajo, pero muy poco más. Sólo hay que escribir el byte ocho veces y añadir el procesado de flash; con eso queda completo. La ventaja que le da al emulador respecto a los modos gráficos convencionales es evidente.

Tu emulador fue incluído en uno de los discos de la revista PCManía de Diciembre de 1992. ¿Cómo surgió la posibilidad de que fuera publicado en PCManía?

Me llamaron ellos para pedirme permiso para publicarlo. Me pidieron incluso que se lo diera por escrito, y así lo hice. Me prometieron una suscripción a cambio, pero nunca cumplieron su palabra.

Después de trabajar en el emulador, ¿te has vuelto a involucrar en algún proyecto de software, ya sea para Spectrum o para otras arquitecturas?

Sí, he dedicado parte de mi tiempo a dos proyectos de software libre: GMP y GIMP. En el primero he implementado una versión del generador de números pseudoaleatorios Mersenne Twister; en el segundo he colaborado arreglando algunos bugs.

Ya por último, ¿a qué se dedica Pedro Gimeno actualmente? ¿Cuáles son sus hobbies y sus ocupaciones?

Mi hobby actual se centra en seguir colaborando para el GIMP. Mi ocupación es un trabajo que consiste básicamente en introducir datos. Sí, yo también me pregunto qué hace un programador haciendo de usuario, pero al menos mi trabajo me permite vivir.

Muchas gracias por tu atención, Pedro. Desde MagazineZX queremos agradecerte que nos hayas dedicado tiempo para esta entrevista y aprovechamos para felicitarte por lo que supuso para muchos de nosotros la creación de un emulador como "Spectrum", que nos permitió continuar viviendo durante mucho tiempo la magia de nuestro querido Sinclair en una nueva arquitectura como era el PC. No sé si eres consciente de que muchos de nosotros poblamos nuestros discos duros con ficheros .SP desde finales de 1992...

Gracias a vosotros. Un saludo a todos y buena suerte con la revista.


SROMERO (NoP)
 
Volver arriba
> ÍNDICE DE REVISTAS <
2003-2009 Magazine ZX