# SPC700

El SONY SPC700 o Nintendo S-SMP es el chip de sonido de 8 bits diseñado por Ken Kutaragi y usado en la videoconsola Super Nintendo Entertainment System (SNES) junto con un procesador digital de señal (DSP). El SPC700 y su DSP acompañante de 16 bits fueron desarrollados y fabricados por Sony, que más tarde entraría en el mercado de los videojuegos con su PlayStation. El S-DSP era muy avanzado para su época (1989) y en cierto modo puede decirse que rivalizaba con las tarjetas de sonido de síntesis mediante tabla de ondas.

## Detalles técnicos

Dentro de la SNES el SPC700 está situado sobre el DSP, en el lado izquierdo del módulo de sonido. El chip contiene 64KB de RAM interna y funciona a 2,048 MHz. Tiene seis registros internos y puede ejecutar 256 opcodes. Los samples de sonido se almacenan en RAM formato comprimido (basado en 4-bit ADPCM, llamado Bit Rate Reduction, BRR, formato propietario). El conjunto de instrucciones del SPC700 es muy parecido al de la familia de procesadores 6502, pero incluye instrucciones adicionales, como XCN, que intercambian las porciones de 4 bits inferiores y superiores del acumulador de 8 bits, y una instrucción para multiplicar 8 por 8 bits en un resultado de 16.

## SPC700

El SPC700 funciona de una manera bastante poco convencional para un procesador de sonido. La CPU principal de la SNES transfiere bloques de datos que contienen comandos y muestras de sonido a la memoria interna del SPC700. Estos comandos son programas en código máquina desarrollados para el SPC700 de forma similar a como se escriben los programas para los ordenadores convencionales. Como ello, el SPC700 puede considerarse un coprocesador dedicado al sonido en la SNES. El nombre del formato de sonido relacionado con la emulación .SPC procede del nombre de este procesador.

## DSP

El DSP acompañante del SPC700 funciona de forma parecida a las tarjetas de sonido modernas de síntesis mediante tabla de ondas, como por ejemplo la Sound Blaster Audigy. Es capaz de generar 8 voces simultáneas en cualquier tono y volumen. Soporta el panning de voces, el control del envolvente acústico, el eco con filtro (mediante un FIR programable de 8 términos) y el uso de ruido como fuente sonora (útil para ciertos efectos sonoros tales como el viento). Genera una salida de audio estéreo de 16 bits a una frecuencia de muestreo de 32 kHz. La comunicación entre el SPC700 y el DSP se realizan mediante E/S mapeada en memoria (MMIO). Debido al tipo de interpolación (Gaussian), la claridad del sonido se nota de menor calidad, muchos emuladores implementaron diferentes interpolaciones para mejorar considerablemente la calidad sonora.

## RAM

La memoria RAM es accedida a 3.072 MHz mediante tres accesos, multiplexado entre el S-SMP y el S-DSP, un acceso y dos accesos, respectivamente. Esta ram es usada para almacenar el código del S-SMP y de la pila o stack, así como muestras de sonido y una tabla de punteros a éstos, y el buffer de eco para el S-DSP. Su tamaño es de 64KB.
Algunos desarrolladores enviaban bloques BRR a la RAM en medio de una reproducción, esto servía para "sobrepasar" el límite de 64KB de RAM, un ejemplo notable son las vocales de "Yume wa Owaranai" de Tales of Phantasia.

## Resumen

* Sonido estéreo
* 16-bit, 32kHz
* Síntesis de sonido basada en tablas de ondas comprimidas mediante el algoritmo BRR
* 8 Canales
* Soporte para panning por canal
* Modos de envolvente acústico o envelope: ADSR, Directo, Lineal (incrementar), Lineal (decrementar), Bent Line y Exponencial (decrementar)
* Sample rate hasta 128kHz
* Ajuste de volumen general y de eco, incluida la capacidad de invertir la fase del sonido
* Soporte de hasta 240 milisegundos de eco
* Retroalimentación (feedback) de 99 a -100 por ciento
* Filtro FIR para eco de 8 controles con valores soportados de 127 a -128
* Modulación de tono (pitch mod)
* Generador de ruido blanco de 0 Hz hasta 32 kHz

## Misceláneo
### Sonido envolvente

Además de las capacidades estéreo, el S-DSP soporta volúmenes en fase invertida (al igual que el filtro FIR), el cual sirve para enviar señal en un decodificador compatible con sonido envolvente (surround sound).

### Modulación de tono

La modulación de tono (pitch modulation) consiste en una forma muy primitiva de obtener síntesis de frecuencia modulada. Esta característica se puede usar en los siguientes canales:
Como se puede observar, donde VOICn representa un canal, y n es el número del otro canal. Tome en cuenta que el canal 0 no se puede hacer este effecto. Su funcionamiento consiste en multiplicar el tono actual de un canal n por OUTX más uno del canal previo. Esto se traduce matemáticamente de la siguiente manera:
Donde Pm es modulación de tono, p es tono y n es el número del canal
Su uso consiste en usar dos canales:
* El primer canal actuará como oscilador de baja/alta frecuencia según sea la frecuencia del tono.
* Se le puede asignar arbitrariamente un tipo de onda (sea sinusoidal, cuadrada, triangular o una compleja)
* Para cambiar la profundidad de la modulación, la ganancia (o ADSR) del canal como oscilador debe ajustarse. Tome en cuenta que no afecta el cambiar el volumen general del canal.
* El segundo será el modulado.
* Llevará la misma u otro tipo de onda, sea un instrumento o un pulso.
Esto puede generar sonidos muy similares a los que pudieron los chips de FM aquella época (1989).

#### Limitaciones

* Cada canal usado para modulación de tono, requerirá dos canales como mínimo
* No existe ajuste automático ni algún tipo de algoritmo para la síntesis
* El sonido generado es muy similar, pero no mejor comparado con un verdadero chip de FM
* El ajuste para la síntesis debe ser manual (a menos se controle por software), y llega ser la mayoría de las veces muy complicado