ASPECTRUM: Another Spectrum Emulator
Aspectrum es mi contribución al mundo del Spectrum y de Linux. Es un
emulador de ZX Spectrum 48K y pretende convertirse en un emulador mucho
más grande, con soporte para los demás modelos de Spectrum.

Consideraciones:
- Aspectrum está todavía en desarrollo, esto quiere decir que
cambia continuamente, pero por desgracia (por mi falta de tiempo) poco a poco.
Por suerte, otros desarrolladores me ayudan en su programación y añaden nuevas
funcionalidades. En la sección de descargas los enumero.
- Incluye un sencillo sistema de menues para el usuario.
- Algunos opcodes indocumentados del micro Z80 todavía no están implementados (pero muchos de ellos sí).
- Sólo se soporta al Spectrum de 16 y 48K.
- El debugger de ASpectrum está totalmente en pañales.
- El emulador sólo carga SP, SNA y Z80 y algunos ficheros TAP. Se está
trabajando en el soporte TZX.
- Algunos juegos parpadean, probablemente por algún opcode o timing mal implementado.
- No emula todo el hardware existente de Spectrum.
- Es versión 0.1.x (¿necesito decir mas?) :)
Obviamente, visto lo visto, para el uso diario y para jugar con los juegos
que habitualmente jugamos lo más recomendable es seguir con nuestro emulador
actual mientras continúa el desarrollo de Aspectrum. Obviamente no todo
son malas noticias: el hecho de que haya probado cerca de 510 juegos diferentes
en Aspectrum y que de ellos, 497 funcionaran a la perfección lo demuestra.
Con la ayuda de la comunidad de desarrolladores y de todos aquellos que
quieran contribuir podemos hacer de ASpectrum un gran emulador.
Porqué otro emulador
La pregunta es:
¿Porqué otro emulador de Spectrum? Bien,
Aspectrum no
es un emulador como los demás: está hecho en puro C sin una sóla línea de
ensamblador. Esto lo hace totalmente portable, es decir, es un emulador
pensado PARA EL PRESENTE y PARA EL FUTURO.
Para el presente, porque Aspectrum puede ser compilado EN CUALQUIER plataforma
existente que soporte su librería gráfica: Windows, Linux, Beos, consolas, etc,
sin realizar modificaciones al código. Esto es importante porque hay plataformas
que no tienen emulador de Spectrum (o al menos no tienen uno decente y GPL y
que no cueste dinero), y mediante Aspectrum este problema puede ser subsanado.
Bien es cierto que no todos las plataformas existentes, soportan SDL y Allegro
(las librerías gráficas que utilizo), _pero_ dado que el código gráfico es
apenas un 2% del código del emulador (y además, en C) sería ideal para portarlo
a móviles, PDAs o incluso !neveras! reescribiendo tan sólo la parte gráfica
(hay neveras que funcionan con MIDORI Linux). No creo que haga falta decir más:
la prueba es que el mismo código lo he compilado en MSDOS, Windows y Linux sin
problemas, y el rendimiento era excepcional en las 3 plataformas.
Para el futuro... Tomemos por ejemplo cualquiera de los demás emuladores
actuales realizados en ensamblador (es decir, el 95% de los que hay por ahi,
cuyo código es en gran parte ASM). Dentro de unos años la arquitectura Intel
i386 desaparecerá y aparecerán nuevas arquitecturas de 64 y 128 bits. El juego
de instrucciones no será el mismo y los emuladores no funcionarán (a menos que
usemos emuladores de PC para correr los emuladores :). Los autores de los
emuladores tendrán que reescribir todo el código para las nuevas plataformas, ya
que no pueden simplemente recompilar.
ASpectrum, al estar
hecho en C se podrá recompilar en el compilador de CUALQUIER máquina que exista
y obtener una versión binaria que corra en dicha máquina. Con Aspectrum tendríamos
un emulador de Spectrum para todos y para siempre, sin tocar el código.
Obviamente, trabajar en C puro tiene sus desventajas: donde normalmente bastaría
un ordenador 486 para emular un Spectrum, con ASpectrum probablemente necesitaremos
un Pentium 200 o superior. Comprendo que actualmente no todo el mundo tiene un
P200, pero ya comienza a ser un ordenador minoritario. Para cuando el emulador se
finalice, cualquiera podrá correrlo en su ordenador sin problemas, ya que el ordenador
mínimo existente en el mercado será superior a los requerimientos de Aspectrum. Este
pago por la portabilidad es un coste que asumí desde el mismo momento en que el
emulador sería portable y reutilizable en el futuro en cualquier plataforma (y además,
seguro que cualquier plataforma del futuro es mucho más rápida que un Pentium 200).
Nada impedirá de todas formas que cuando se termine el emulador pueda ser parcheado
para modificar trozos de él por ensamblador, y acelerarlo. Esto es así gracias a
la licencia del emulador.
Aspectrum es un emulador GPL: puedes copiarlo, modificarlo, añadir nuevas funcionalidades,
regalarlo a los amigos, todo lo que se te ocurra, sin tener que notificarselo al autor. En
cualquier caso a nivel personal sí que me gustaría ser notificado de aquellos trabajos
realizados con mi emulador, y que se me envíen parches realizados para otros proyectos
que puedan ayudar a este. Es una cuestión simple: yo te doy el emulador y no pido nada
a cambio, haz con él lo que quieras, eso sí, estoy seguro de que los verdaderos amantes
del Spectrum contribuirán a él, porque mejorar Aspectrum es incentivar la memoria del
Spectrum. Y... ¿habéis pensado qué sería de vosotros ahora mismo si no hubiera existido
el Spectrum? En mi caso, tuvo mucho que ver... yo quería ser periodista y ahora soy
programador y Administrador de Sistemas... :-) Le debo mucho al Spectrum, porque me
encanta lo que hago ahora.
Descargas / Downloads
- En la página de SourceForge de Aspectrum
tenéis acceso a la página de Alvaro Alea, mi colaborador principal en Aspectrum (también
han contribuído otras personas como MetalBrain y Philip Kendall, por citar algunos).
- Fuentes: aspectrum-0.1.3.tar.gz (74KB).
Código fuente de la versión 0.1.x para Allegro:
necesita la librería Allegro para compilar y funcionar.
- Ejecutable precompilado para MSDOS: aspectrum-msdos-0.1.3.tar.gz (246KB).
Descarga este fichero para utilizar el emulador en su versión MSDOS sin tener que compilar nada. Incluye
el ejecutable .EXE, la ROM del Spectrum y las fuentes de texto que utiliza el emulador. Sólo ha sido
probado en Windows 9x, si encuentras algún problema ejecutándolo en otras versiones de Windows
notifícamelo al correo.
- Fuentes para SDL (versión muy antigua): sdlspectrum-0.0.1.tar.gz. (64KB).
Código fuente de la versión 0.01 para SDL, necesita las librerías SDL y SDL-dev para compilarlo y funcionar (paquetes libsdl10 y libsdl10-dev o superior).
Modificaciones al código
POR FAVOR, antes de realizar modificación alguna al código poneos en contacto conmigo o
con los demás desarrolladores para
hablarlo: hay muchas cosas que hacer y algunas tienen prioridad. No serviría de nada que
alguien trabajara 1 día entero en añadir el sonido del Spectrum bajo Allegro cuando todavía no está
decidido si se usará Allegro o SDL como biblioteca de funciones, por ejemplo.
Las prioridades ahora mismo son:
- Corregir todos los fallos en opcodes del core Z80. Si alguien sabe del tema, sólo
tiene que bajar los fuentes y echarle un ojo a z80.c y opcode*.c y mandarme alguna
corrección. Ese tipo de ayudas es IMPORTANTISIMA ya que no tiene nada que ver con la
parte gráfica y es siempre bien recibida.
- Modificar disasm.c para que pueda desensamblar la instrucción apuntada por PC. Sería un gran
paso adelante en el emulador si alguien quiere contribuir modificando o creando de cero una función de DISASM como la usada en disasm.c.
- Añadir los opcodes que faltan por implementar (están pero no tienen código asociado).
- Añadir opcodes indocumentados que no estén ya implementados.
- Encontrar y corregir fallos en la emulación.
- Corregir la rutina de carga de SNAs, TZXs. Z80s, SPs y TAPs (snaps.c) para que la carga sea correcta en todos los casos.
- Modificar el código (debería ser muy sencillo) para que las rutinas de ReadMem y
WriteMem soporten paginación y por tanto se pueda posteriormente implementar de alguna
manera sencilla la emulación de los modelos de 128K.
- Hacer un buen GUI.
Si quereis probar el emulador, podeis descargar software de la sección de Juegos (o enlaces)
de mi web.
Recuerda que sólo puedes cargar juegos de 48K (por ahora) y que debes ejecutar el emulador
pasándole por línea de comandos el nombre del fichero tap a cargar. Una vez dentro del
emulador tendrás que teclear LOAD "" (J seguido de ALT+P y ALT+P - enter) para cargar la
cinta de forma instantánea. Por si acaso, dejo aquí alguno ficheros .SNA para una
descarga más rápida:
Santiago Romero
Alvaro Alea
Subir al principio de esta página
Santiago Romero alias NoP
sromero©gmail·com
Ultima actualización
: 11-03-2005