miércoles, 26 de enero de 2011

Emulando el BEEPER del Spectrum 48K con el puerto de cinta del Amstrad CPC

No, no me he vuelto loco. Así es, tal cual lo habéis leído. Pero antes pongámonos en situación.

Spectrum 16K / 48K (el "gomas")
Como muchos sabréis, el ZX Spectrum en sus primeras versiones generaba sonido usando un pequeño altavoz interno (un buzzer) como única arma. Cuantísimas risas nos hemos echado los cepeceros en la época, comparando las músicas y el sonido de nuestro flamante Amstrad CPC y su AY8912, con los pitiditos "cutres" del ZX Spectrum 48K (el famoso "gomas") del vecino / compañero de clase.

Ciertamente, los pobres usuarios de los primeros Spectrum (aquellos que no poseían nuestro querido AY) tenían todas las de perder. Su sistema de generación de sonido es bien simple: enviar 1 para que el cacharro pite o enviar un 0 para que deje de pitar, sin más. Digamos que únicamente genera sonido usando 1 bit, lo cual no deja demasiado margen de actuación... Sin embargo, visionarios como el señor Joffa cayeron en la cuenta de que enviando unos y ceros (1010101010101...) a gran velocidad a ese primitivo altavoz, se podría simular tener varios canales de sonido a distintas frecuencias en ese diminuto buzzer. Por supuesto, ese envío masivo de bits a gran velocidad se realiza tirando de procesador, así que el pobre Z80 del Spectrum va un poquito pasado de vueltas. Por ese motivo, los juegos de 48K tenían música multicanal en los menús, pantallas de Game Over y poco más, donde podías dedicar la mayoría del tiempo de procesador en generar sonido y lo restante en mostrarnos el menú y esperar alguna pulsación de teclas.

Placa Base del Spectrum 48.
Abajo a la derecha, el zumbador de marras, alias
"LOUD SPEAKER"
Y los años pasan, señores... Y las tecnologías mejoran... Y la inventiva y el ingenio también. Hoy en día, para Spectrum 48 y su beeper existen verdaderas obras de arte sonoras multicanal. Existen varios motores de sonido (el más moderno y potente, el Phazer 1, con baterías sampleadas), que permiten tener 2 canales de sonido y uno de percusión, por ejemplo. También tenemos trackers para generar esas melodías, como el Beepola, donde se pueden generar composiciones con todos esos "motores".

El resultado, ciertamente es increíble (teniendo en cuenta que hablamos de un simple beeper conectado al Z80, sin más).

El PPI 8255 encargado de controlar el puerto de cintas,
el puerto de impresora y el propio AY del
Amstrad CPC
Pues bien, teniendo esto claro, al chalado de Syx y a mí se nos ocurrió que, el chip PPI 8255 del Amstrad CPC, encargado entre otras cosas de generar "los pitiditos" de carga en las cintas, pues... vaya, que funcionaba igual que el beeper del Spectrum. Es tan simple como que los pulsos (los soniditos de carga) de una cinta no son más que secuencias de unos y ceros (11101010101010...) a distintas frecuencias (esto a grandes rasgos). Pues nada hombre, vamos a emular el beeper del Spectrum usando el PPI 8255 del Amstrad, adaptando el motor de sonido Phazer 1 usado en Spectrum y a ver qué pasa.

El resultado lo tenéis justo debajo de esta línea (dadle al PLAY y me comentáis qué tal):



Eso es, señores, nada más y nada menos, que una grabación hecha en el portátil resultado de conectar el cable de cinta al Line In del portátil. Si no lo recordáis, el cable tenía 3 cables, uno azul (el de entrada), otro rojo (para grabar nuestros programillas en una cinta) y uno blanco más pequeño que era el control remoto, encargado de encender y parar el motor del cassette. Pues bien, el cable rojo (REC) conectado al portátil. El resultado es el que habéis escuchado.

El tracker Beepola, con el que podemos componer
musicones para el beeper del Spectrum
Y repito, aquí no ha participado el chip de sonido del CPC en absoluto (el AY). Es sonido de 1 bit puro y duro, directo del puerto de cintas del Amstrad a nuestros oídos.

Observaréis que se oyen algunos defectillos en la reproducción, pero el culpable es el compresor de MP3 (el WAV original se oye perfecto)...

Resumiendo: una chorrada como un piano, pero a mí me mola y... bueno... si sumamos los 3 canales de sonido del PPI a los 3 canales del AY... pues... tenemos 6 canales de sonido, por si alguien se anima.

En fin, que lo paséis bien y hasta la próxima chorrada tecnológica.

¡Saludos!

3 comentarios:

  1. ¡Fantástico, DadMan!

    Por cierto, a ver si indago en la obra de Joffa ahora que tengo un cacharrito HxC para mi Spec+3.

    ResponderEliminar
  2. Sí, estáis chalados pero me encanta! suena de pm chavales.

    Yo tengo mis preguntas sobre el tema, usa también muchos recursos en el cpc usar el ppi como reproductor musical? y la otra es si ésto sólo se puede hacer con un 6128? puesto que por lo que he entendido usa la clavija de rec de los cables de tres jacks de este ordenador para reproducir cintas

    ResponderEliminar
  3. Salvo los chasquidos del MP3, el resultado está bastante logrado y me ha gustado mucho leer este artículo. Desde luego, la pobreza de sonido del "gomas" no lo era tanto cuando genios como Joffa Smith (qepd) o Tim Follin eran capaces de conseguir sacar sonido más allá de lo que permitía el buzzer en primera instancia.

    ResponderEliminar