El programa

Konami's Synthesizer no es un juego: es un sintetizador. El cartucho lleva un convertidor digital-analógico de 8 bits que suena con cada byte que el Z80 escribe en 0x4000, y el programa es un sintetizador sustractivo (oscilador, filtro, amplificador, tres envolventes y un LFO) que calcula la nota muestra a muestra en la RAM del ordenador y luego la toca por ese convertidor. Todo lo que suena lo hace el Z80.

El título

Al encender, el logotipo de Konami se destapa línea a línea, el 新世SIZER se pinta en siete pasadas, un byte de cada ocho en cada una, y el título espera un SPACE. Si no llega, la intro enseña durante 512 cuadros una de las cuatro pantallas del programa (0xBE5E) y vuelve a empezar.

Las pantallas

Cinco teclas de función, y con SHIFT otras cuatro (0x4877):

teclapantalla
F1TONE EDIT: los 29 campos del timbre
F2WAVE EDIT: dibujar una onda a mano
F3SYN: sintetizar el timbre
F4PLAY: tocar
F5FILE: la cinta
SHIFT F1copiar un timbre, con su onda, en otro
SHIFT F2la lista de los dieciséis timbres
SHIFT F3la impresora
SHIFT F4LAYOUT: qué nota da cada tecla

TONE EDIT con el timbre 1

TONE EDIT (0xA5AA) edita los 25 parámetros del timbre y su nombre. El oscilador (DCO) elige una de las catorce ondas de la ROM, la del usuario o ruido, y su altura en pies; el filtro (DCF) tiene corte, resonancia de 0 a 8 y tres salidas, paso alto, paso banda y paso bajo; el amplificador (DCA) tiene su envolvente, y cada una de las tres envolventes es ADSR. El LFO puede mover al oscilador, al filtro y al amplificador, con su propia onda y, con S/H, con ruido muestreado. Los cursores van de campo en campo, INS y DEL suben y bajan, y las cifras escriben el valor.

WAVE EDIT

WAVE EDIT (0xADF7) dibuja a mano la onda 15, la del usuario: 256 muestras con signo, un punto por muestra. Las dieciséis ondas del usuario (una por timbre) arrancan como la onda 1, un seno (0x55CF). Izquierda y derecha mueven el cursor de paso en paso (MODE, SELECT lo cambia), arriba y abajo cambian la muestra y el tramo entre el cursor y su paso anterior se rellena en línea recta (0xB236). Una tecla del teclado musical la hace sonar; CTRL y HOME la ponen a cero.

SYN

SYN (0x55F0) es el sintetizador: calcula la nota entera, muestra a muestra, en los 16 KB de 0x8000 a 0xBFFF, con la pantalla parada y las interrupciones cerradas. Cuánto dura la calcula de las envolventes (0x5613), y mientras trabaja un cursor avanza por la pantalla y, cada 16 tics, cambian dos tiles del dibujo (0x4BD9). Al acabar salta a PLAY; F1, F2, F4 y F5 la cortan (0x5767).

PLAY

PLAY (0x5D3A) toca con el teclado del MSX como si fuera un piano: las cuatro filas de letras y números son 48 teclas, blancas y negras, con la nota de cada una escrita encima según el LAYOUT; el de fábrica da nota a 40 (0x4B71). Suena una tecla cada vez: el programa lee el sample y lo manda al DAC byte a byte, y la altura de la nota la pone cuánto tarda entre byte y byte (Hallazgos). Con el EG TYP del timbre en DEC, la nota se sostiene mientras se tiene la tecla repitiendo una página del sample, y al soltar sigue hasta el final; en DUR suena entera de una vez.

FILE MODE

FILE (0xB5DB) graba y carga en cinta tres clases de fichero: TONE (los dieciséis timbres con sus dieciséis ondas, 4.608 bytes), LAYOUT (176 bytes) y SAMP (el sample sintetizado, hasta 16 KB, con su página de bucle). El formato está en El código. La cinta que venía con el cartucho trae en sus dos caras siete SAMP: PIANO, BRASS y ORCHE de 16.384 bytes, TRUMPET de 12.288, SAMISEN de 7.792, DOG de 3.072 y CRASH de 16.384.

Los dieciséis timbres de fábrica

Están en la ROM, en 0xA3AA, 32 bytes cada uno: 25 parámetros y el nombre. Así los enseña TONE EDIT (los ADSR como ataque/caída/sostenido/relajación, el filtro con su salida, - si la envolvente del filtro resta e i si la del oscilador va invertida):

nnombreondaFEETLFO DCOENV DCOCUTRESLFO DCFENV DCFLFO DCAADSR DCOADSR DCFADSR DCAS/Honda LFOFEET LFOfiltroEG
1EBASS1216'0000012800/0/0/00/4/32/960/0/255/120164.00'LPFDEC
2EBASS21432'0000012800/0/0/00/4/32/960/0/255/120164.00'LPFDEC
3BRASS28'00200012800/0/0/01/6/64/40/0/255/150164.00'LPFDEC
4TRUMPET128'00200012800/0/0/01/6/64/40/0/255/150164.00'LPFDEC
5STRINGS24'00180007500/0/0/00/4/100/103/4/220/60164.00'LPFDEC
6EORGAN98'0025500000/0/0/00/0/0/00/0/255/10164.00'LPFDEC
7PORGAN68'0025500000/0/0/00/0/0/00/0/255/10164.00'LPFDEC
8EPIANO88'0025500000/0/0/00/0/0/00/0/255/200164.00'LPFDUR
9GLOCKEN716'001000010000/0/0/00/4/0/00/0/255/200164.00'LPFDUR
10KOTO118'2000012800/0/0/00/4/48/1280/4/224/3201512.00'LPFDUR
11CONGA116'012825500000/1/0/00/0/0/00/1/239/80164.00'LPFDUR
12SYNDRUM18'025525500000/1/192/200/0/0/00/1/192/200164.00'LPFDUR
13IMAGE18'255255255000032/0/255/320/0/0/02/0/255/64018.00'LPFDUR
14PARC142'96025500000/0/0/00/0/0/00/4/224/324S/H64.00'LPFDUR
15PARC214'255025500000/0/0/00/0/0/00/4/240/32018.00'LPFDUR
16(sin nombre)18'0025500000/0/0/00/0/0/00/0/255/00164.00'LPFDEC

Los dieciséis TONE EDIT

Y así suenan, sintetizados con tools/motor.py y tocados con tools/sonido.py en LA3 con la tecla sostenida un segundo. Son los bytes que el cartucho manda al DAC: el timbre 1 está cotejado contra openMSX, 22.273 bytes y 0 distintos (En el emulador).

timbretimbre
1 EBASS1timbre-01.wav9 GLOCKENtimbre-09.wav
2 EBASS2timbre-02.wav10 KOTOtimbre-10.wav
3 BRASStimbre-03.wav11 CONGAtimbre-11.wav
4 TRUMPETtimbre-04.wav12 SYNDRUMtimbre-12.wav
5 STRINGStimbre-05.wav13 IMAGEtimbre-13.wav
6 EORGANtimbre-06.wav14 PARC1timbre-14.wav
7 PORGANtimbre-07.wav15 PARC2timbre-15.wav
8 EPIANOtimbre-08.wav16 (sin nombre)timbre-16.wav

Las catorce ondas

El oscilador lee una de las catorce ondas de 0x7200, 256 muestras con signo cada una, en la página 0x72 + onda (0x56FF). La 1 es el seno con el que arrancan las ondas del usuario; la 15 es la del usuario, y la 16 es ruido, que no es una tabla: sale de leer la BIOS (Hallazgos).

Las catorce ondas del oscilador