Saltar al contenido
jcalarcon.dev

ZX Spectrum +2A 128K

Un Z80 escrito desde cero arranca la ROM original del +2A, carga cintas y suena. El aparato está modelado a escala real a partir de un +2A español.

Descarga unos 1,7 MB: emulador, ROM y modelo 3D.

El procesador: un Z80 escrito desde cero

El corazón es un Z80 a 3,5469 MHz programado en JavaScript sin librerías: todas las instrucciones, también las no documentadas que usaban los juegos (las mitades de IX e IY, SLL, las copias a registro de DDCB y FDCB), y las banderas ocultas, incluido el registro interno MEMPTR. Cada acceso a memoria ocurre en su ciclo de reloj, que es lo que permite imitar la contención de memoria del +2A.

Para comprobarlo se usan las dos pruebas clásicas de Frank Cringle, que comparan millones de combinaciones de instrucciones con un Z80 real.

Pruebas del procesador
PruebaResultado
zexdoc, instrucciones y banderas documentadas67 de 67
zexall, también banderas no documentadas67 de 67
Ciclos de reloj ejecutados en cada prueba46 734 977 146
Tiempo en Node 22unos 95 s, unas 140 veces el original

Pantalla y memoria

Menú de arranque del +2A emulado: 128 +2A, Loader, +3 BASIC, Calculator y 48 BASIC, con el aviso de copyright de Amstrad
El menú de arranque, tal como lo dibuja el emulador, a píxel doble.

La máquina arranca la ROM original del +2A, cuatro bloques de 16 KB, y reparte sus 128 KB de RAM con los puertos 7FFDh y 1FFDh, incluidos los modos especiales del +2A. La imagen se dibuja a la vez que avanza el haz del televisor: si el programa cambia el borde a mitad de fotograma, como hace la ROM al cargar, salen las rayas de colores igual que en la tele.

Medidas de la imagen
Fotograma70 908 ciclos, 311 líneas de 228
Fotogramas por segundo50,02
Imagen visible320 × 240 píxeles, 256 × 192 de pantalla y el borde
Coste en Chrome0,31 ms por fotograma

Sonido: el altavoz y el AY-3-8912

El altavoz se anota en el ciclo exacto en que cambia y el chip de sonido AY-3-8912 del 128K se simula entero: tres canales de tono, ruido de 17 bits y envolvente, con su escala de volumen logarítmica. Todo se calcula cada 16 ciclos y se reduce a la frecuencia de tu tarjeta de sonido. Con el sonido activo, es el reloj del audio el que marca el ritmo del emulador, y así no hay cortes.

Frecuencias medidas a la salida
SeñalEsperadaMedida
La del AY, periodo 252439,8 Hz440,3 Hz
Altavoz1 000 Hz1 000,6 Hz
Envolvente en diente de sierra1 732 Hz1 731,7 Hz

Datacorder: cintas TAP y TZX

El Datacorder lee ficheros TAP y TZX y los convierte en la señal que entraba por el conector EAR, así que la ROM carga como con una cinta de verdad, con sus rayas y su sonido. Con «Carga rápida», los bloques normales entran al instante; si un juego trae su propio cargador, la cinta arranca sola y va diez veces más deprisa.

  1. Pulsa «Encender».
  2. Elige un juego en «Juego»: el +2A se reinicia, mete la cinta y elige «Loader» solo.
  3. Con «Carga rápida» marcada el juego entra en segundos, pero la cinta no suena ni se ven las rayas. Para oír la carga de verdad, desmárcala antes de elegir el juego: tarda lo mismo que en el aparato, casi todos entre uno y cinco minutos.
  4. Para una cinta tuya: botón «Tu cinta», la tecla ▲ del Datacorder o arrastra el fichero a la página, y con «Loader» marcado en el menú pulsa INTRO.
Cinta de prueba propia (un programa BASIC)
Carga rápidaal instante
Señal real, como el aparato8,3 s
Bloque turbo de TZXla cinta arranca sola

Juegos incluidos

Que un juego tenga cuarenta años no lo hace libre, así que aquí solo hay juegos que se pueden compartir: sus autores permiten distribuirlos en cualquier web gratuita, son de dominio público o tienen una licencia libre, según la base de datos ZXDB de Spectrum Computing. Todos se han probado en este emulador. También puedes cargar tus propios ficheros, que se leen en tu navegador y no salen de él.

Juegos y créditos
JuegoAutoresLicencia
Alter Ego 2011
Acción y puzle
Denis Grachev, Shiru (música)
RetroSouls
Distribución libre permitida por el autor
Survivisection 2012
Acción · 128K
SaNchezDistribución libre permitida por el autor
Antiquity Jones 2012
Plataformas
Paul JenkinsonDistribución libre permitida por el autor
Join 2011
Acción
Denis Grachev
RetroSouls
Distribución libre permitida por el autor
SHUTTLEBUG 2012
Laberinto
Dave Hughes
Stonechat Productions
Distribución libre permitida por el autor
Chopper Drop 2011
Acción
Paul JenkinsonDistribución libre permitida por el autor
Kyd Cadet 2010
Laberinto
Paul JenkinsonDistribución libre permitida por el autor
The Lost Tapes of Albion 2012
Plataformas
Dave Hughes, Dr Thomas
Stonechat Productions
Distribución libre permitida por el autor
EFMB: Endless Forms Most Beautiful 2012
Plataformas
Dave Hughes, Dr Thomas
Stonechat Productions
Distribución libre permitida por el autor
Flynn's Adventure in Bombland 2011
Laberinto
Tom DalbyDistribución libre permitida por el autor
Asalto y Castigo 2009
Aventura de texto en español
José Baltasar García Pérez-SchofieldDistribución libre permitida por el autor
Marte Necesita Vacas 2004
Puzle en español
Álvaro Alea Fernández, Covadonga Fernández (gráficos)
ALEAsoft
GPL
Código fuente
Aahku al Rescate 2011
Acción en español
Baron Ashler
Kabuto Factory
CC BY-SA 3.0
Texto de la licencia
F.I.R.E. 1988
Matamarcianos
František Fuka, Michal Hlaváč
Fuxoft
Dominio público
Galactic Gunners 1987
Matamarcianos
Miroslav Fídler
Cybexlab Software
Dominio público
Exploding Atoms 1991
Puzle
Jan Froněk, Patrik Rak, Pavel Tichý
Proxima Software, Omikron Software
Dominio público

Si eres autor de alguno de estos juegos y prefieres que no esté aquí, escríbeme a hola@jcalarcon.dev y lo quito.

El aparato en 3D

El +2A está modelado en Blender con un script que genera cada pieza a escala real, 439 × 175 mm, a partir de fotos de un +2A español: el teclado con MAYUSCULAS, BORRAR, EXTRA e INTRO, la Ñ y la peseta de la X, el Datacorder con su casete, los ocho conectores de atrás y los dos joysticks del lateral. Cada tecla del modelo sabe qué tecla del Spectrum es: se hunde cuando escribes y se puede pulsar con el ratón o el dedo.

El modelo del ZX Spectrum +2A de tres cuartos: teclado español, logotipos y Datacorder con un casete dentroLa trasera del modelo con sus conectores rotulados: impresora, alimentación, expansión, RS232/MIDI, AUX, RGB, TV y cinta
Renders del modelo en Blender, de frente y por detrás.
El modelo
Teclas58 del teclado y 6 del Datacorder
Modelo para la web918 KB comprimido, 49 233 triángulos
EscenaThree.js; la tele es un modelo genérico sin marca

Créditos y licencias

  • ROM del +2A © Amstrad, que permite distribuirla siempre que no se venda (nota de derechos).
  • Los juegos son de sus autores, que figuran con su licencia en la lista de juegos; las fichas y los permisos salen de ZXDB y Spectrum Computing.
  • ZX Spectrum y Sinclair son marcas de sus propietarios. Esto es un homenaje sin ánimo de lucro y sin relación con ellos.
  • Three.js (licencia MIT) y la tipografía Archivo (SIL Open Font License 1.1), alojadas en esta web.
  • Sin cookies ni analítica: las cintas que cargas se leen en tu navegador y no se envían a ningún sitio.