The Nintendo S-SMP is the audio CPU of the SNES video game console.
The SNES contains a sound module called APU (Audio Processing Unit) which is almost completely separate 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 main board via 4 registers on Bus B. It was designed by Ken Kutaragi and was manufactured by Sony.
The S-SMP (which has an 8-bit Sony SPC700 core) 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.
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 used a trick to overcome the 64KB limit of the SPC700, by swapping samples in and out of memory on the fly. The file format doesn't support samples 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.
The Sony SPC 700 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). Applications range from sound CPUs like Nintendo's S-SMP and the microcontroller series CXP82832/82840/82852/82860. The Proson A/V receiver 2300 DTS uses an CXP82860 microcontroller that utilises the SPC 700 CPU core.
- Super Nintendo Entertainment System technical specifications
- Nintendo Entertainment System technical specifications § Audio, describing the NES's SMP
- "CXP82832/82840/82852/82860 CMOS 8-bit Single Chip Microcomputer". 090423 datasheetcatalog.org
- A tutorial on using the SPC700 for the SNES is available on Wikibooks
- SPC700 Documentation
- SPC700 APU Manual