# SPC700

Der Sony SPC700 ist ein 8-Bit-Audio-Koprozessor, der von Ken Kutaragi entworfen wurde und zusammen mit einem Digitalen Signalprozessor (DSP) in der Spielkonsole Super Nintendo Entertainment System (SNES) Verwendung fand. Der SPC700 samt zugehörigem 16-Bit-DSP wurde von Sony entwickelt und hergestellt. Für die damalige Zeit (1990) war der SPC700 sehr fortschrittlich und kann begrenzt sogar mit Wavetable-Synthesizer-Soundkarten verglichen werden.
SPC700 ist eigentlich die Architektur des S-SMP genannten Mikroprozessors, die auch in anderen Prozessoren von Sony Verwendung fand. Der DSP-Chip wurde mit S-DSP bezeichnet. Der in späteren SNES-Revisionen zu findende gemeinsame Mikrochip wird wiederum als S-APU bezeichnet. In der SNES-Szene hat sich heutzutage die Bezeichnung SPC700 für das gesamte Audiosystem des SNES durchgesetzt.

## Technik

In frühen SNES-Revisionen (auch Super Famicom) ist der S-SMP oberhalb des S-DSP angebracht. In späteren SNES-Revisionen wurden S-SMP (Mikroprozessor), S-DSP (Synthesizer) und Arbeitsspeicher in einen mit S-APU bezeichneten Mikrochip kombiniert.
Das Soundsystem enthält 64 KiB RAM, sowie ein Boot-ROM, welches den initialen Upload von Speicherdaten zum SPC700 übernimmt. Der Audio-Taktgeber läuft mit 24,606720 MHz (NTSC: 24,576 MHz) (notwendig für die serielle Übertragung der Samples zum DAC), die auf 3,075840 MHz (NTSC: 3,072 MHz) geteilt werden. Von jeweils drei Speichertakten erhält der Prozessor den ersten Takt und der DSP die restlichen zwei Takte. Folglich läuft der Prozessor mit einer Taktfrequenz von 1,025280 MHz (NTSC: 1,024 MHz) und ist etwa so leistungsfähig wie ein ursprünglicher 6502. Alle 32 Prozessortakte wird ein Sample ausgegeben.
Der Prozessor besitzt sechs Hauptregister und kann 256 Opcodes ausführen. SPC700-Sound-Samples werden im RAM in einem komprimierten ADPCM-Format gespeichert, welches als BRR („bit rate reduced“) bezeichnet wird. Der Befehlssatz ähnelt dem der 6502-CPU-Reihe, enthält aber zusätzliche Befehle, wie XCN (eXChange Nibble), das die oberen und unteren 4-Bit des Akkumulators vertauscht, Multiplikations- und Divisionsbefehle, oder Einzel-Bit-Rechenbefehle. Eine Sprungvektortabelle am oberen Ende des Addressraums wird für die TCALL-Befehle, Interrupts oder beim Reset verwendet. Außerdem kann die sogenannte Direct Page, die beim 6502 auf Speicherseite 0 beschränkt ist (Zeropage), zwischen Speicherseite 0 und 1 umgeschaltet werden. Unterstützung für Unterbrechungen ist vorhanden, allerdings sind keine Hardwareinterruptquelle(n) angeschlossen. Drei konfigurierbare Hardwarezähler sind vorhanden.
Der zum SPC700 gehörende DSP arbeitet samplebasiert. Es können Audiosamples in acht Stimmen simultan in jeder passenden Tonhöhe und Lautstärke wiedergegeben werden. Zudem unterstützt er Tonhöhenmodulation aufeinanderfolgender Stimmen, Voice Panning, ADSR, Echo mit Filterung (über einen programmierbaren 8-Tap FIR (Finite Impulse Response)), und den Einsatz von Weißem Rauschen als Geräusch-Quelle (nützlich für Soundeffekte wie z. B. Wind, oder aber Perkussion). Das Ausgangssignal wird als 16-Bit Stereo mit einer Abtastrate von 32 kHz erzeugt, wobei viele interne Verarbeitungsschritte nur in 15 Bit rechnen. Die Kommunikation des SPC700 mit dem DSP geschieht über 128 Hardware-Register, die über Memory Mapped I/O verfügbar sind.
Die Arbeitsweise des SPC700-Soundsystems ist auf mehrere Arten ungewöhnlich. Da es keinen direkten Zugriff auf den ROM des Spielmoduls hat, muss die Haupt-CPU des SNES Datenblöcke mit Befehlen und Samples zum internen Speicher des SPC700 übertragen, was nur über vier Kommunikationsports geschieht. Außerdem besitzt das Soundsystem mit dem S-SMP bzw. SPC700-Mikroprozessor einen vollwertigen (turing-vollständigen) Koprozessor, der ähnlich wie der Hauptprozessor programmiert wird. Dies stellt einen Vorteil verglichen mit vielen anderen Soundsystemen anderer Konsolen dar, bei denen die Haupt-CPU die gesamte Audiosteuerung leisten muss.
Das emulations-bezogene Sound-Format „SPC“ ist vom Namen dieses Soundsystems abgeleitet.