The Nintendo S-SMP is the audio CPU of the Super Nintendo Entertainment System (SNES) video game console.
The S-SMP audio processing unit consists of an 8-bit SPC700, a 16-bit DSP, 64 kB of SRAM shared by the two chips, and a 64 byte boot ROM. The audio subsystem is almost completely independent from the rest of the system: it is clocked at a nominal 24.576 MHz in both NTSC and PAL systems, and can only communicate with the CPU via 4 registers on Bus B. It was designed by Ken Kutaragi and was manufactured by Sony.
The Sony SPC700  is the S-SMP's integrated 8-bit CPU core manufactured by Sony with an instruction set similar to that of the MOS Technology 6502 (as used in the Commodore 64 and Vic 20, Apple II, BBC Micro and the original NES).
It is located on the left side of the sound module. It shares 64 KB of PSRAM with the S-DSP (which actually generates the sound) and runs at 2.048 MHz, divided by 12 off of the 24.576 MHz crystal. It has six internal registers, and can execute 256 opcodes. The SPC700 instruction set is quite similar to that of the 6502 CPU family, but includes additional instructions, including XCN (eXChange Nibble), which swaps the upper and lower 4-bit portions of the 8-bit accumulator, and an 8-by-8-to-16-bit multiply instruction.
Other applications of the SPC700 range from sound CPUs to the CXP82832/82840/82852/82860 microcontroller series . The Proson A/V receiver 2300 DTS uses an CXP82860 microcontroller that utilizes the SPC 700 CPU core.
The S-DSP is capable of producing and mixing 8 simultaneous voices at any relevant pitch and volume in 16-bit stereo at a sample rate of 32 kHz. It has support for voice panning, ADSR envelope control, echo with filtering (via a programmable 8-tap FIR), and using noise as sound source (useful for certain sound effects such as wind). S-DSP sound samples are stored in RAM in compressed (BRR) format. Communications between the S-SMP and the S-DSP are carried out via memory-mapped I/O.
The RAM is accessed at 3.072 MHz, with accesses multiplexed between the S-SMP (1⁄3) and the DSP (2⁄3). This RAM is used to store the S-SMP code and stack, the audio samples and pointer table, and the DSP's echo buffer.
The S-SMP operates in a somewhat unconventional manner for a sound chip. A boot ROM is running on the S-SMP upon power-up or reset, and the main SNES CPU uses it to transfer code blocks and sound samples to the RAM. The code is machine code developed specifically for the SPC700 instruction set in much the same way that programs are written for the main CPU; as such, the S-SMP can be considered as a coprocessor dedicated for sound on the SNES.
Since the module is mostly self-contained, the state of the APU can be saved as an .SPC file, and can be emulated in a stand-alone manner to play back all game music (except for a few games that constantly stream their samples from ROM). Custom cartridges or PC interfaces can be used to load .SPC files onto a real SNES SPC700 and DSP. The sound format name .SPC comes from the name of the audio CPU core.
|This section does not cite any references or sources. (September 2010)|
An SPC700 sound file (or SPC) is a video game music file consisting of scores and music data from RAM used by the SPC700 sound chip on the Super Nintendo Entertainment System (SNES) or Super Famicom. This sound data is usually obtained from a console emulator and not from the system itself.
The capabilities of the SPC700 DSP in the SNES sound system allow for music synthesis by samples (analogous to MOD or IT music formats), allowing long stretches of audio to be produced from only 64 kilobytes of data.
The chip produces 16-bit sound at 32 kHz, but SPC700 emulators generally can be reconfigured to output at a different sampling rate (from 8 to 48 kHz).
SPC plugins are available for media player software such as VLC and portable MP3 players running Rockbox. Some SPC players offer support for complex sound interpolation methods to attempt to enhance sound quality. Several programs exist to produce MIDI files from the score blocks of SPC files.
Programmers sometimes use a technique to overcome the 64KB limit of the SPC700, of swapping samples in and out of memory on the fly. The file format doesn't support sample swapping and thus musical scores that use this trick will be played back incorrectly. The shortcoming is most apparent when playing back the SPC files of the tracks "Yume-Wa Owaranai" from Tales of Phantasia and "Be Prepared" from the SNES version of The Lion King.
- Super Nintendo Entertainment System technical specifications
- Nintendo Entertainment System technical specifications § Audio, describing the NES's SMP
- anomie. "Anomie's S-DSP Doc" (text). Romhacking.net. Retrieved 2007-04-21.
- anomie. "Anomie's SPC700 Doc" (text). Romhacking.net. Retrieved 2007-04-21.
- "CXP82832/82840/82852/82860 CMOS 8-bit Single Chip Microcomputer" (PDF). 090423 datasheetcatalog.org
- A tutorial on using the SPC700 for the SNES is available on Wikibooks
- SPC700 Documentation
- SPC700 APU Manual