SMPS

From Sega Retro

Sample Music Playback System (SMPS) is the common name of a family of audio playback engines (or "drivers") and storage formats used by various Sega consoles (including the Sega Mega Drive, Sega Mega-CD, Sega 32X, Sega Master System, Sega Game Gear, and Sega Pico). "SMPS" is thought to be a colloquial term - there is no evidence to suggest this was the naming scheme of any official drivers, but is the most widely accepted name for the system.

Like other sound drivers, SMPS was designed as a means of processing audio information, allowing a console's CPU to communicate with sound chips on the board and create audible sound (i.e. "driving" the sound). It is usually associated with first-party Japanese Mega Drive games (where it was most predominantly used) - analogous to Sega of America's use of the GEMS driver, and began appearing in games from the late 1980s until the aforementioned consoles bowed out of the market.

By sharing drivers between games, developers could create tools to quickly produce audio, and it allows for music and sound effects to be more easily ported between games.

Variants

Mega Drive and 32X

Mega Drive (and by extension, 32X) developers had a choice of which processor to run SMPS on; the 16-bit 68000, or the 8-bit Z80. The driver variants are known as SMPS 68000 and SMPS Z80 respectively.

Some developers, such as Treasure, chose to modify the driver, effectively making their own variants. Individual games such as Ristar also have their own modified drivers.

Source code

The source code to both SMPS-68000 and SMPS-Z80 was found and released by Hidden Palace in 2020[1]. The versions of the two drivers appear to be SMPS-68000 Type 1B and SMPS-Z80 Type 2 DAC.

Download.svg Download SMPS-68000 source code
File: SMPS-68000_source_code.zip (231 kB) (info)
Download.svg Download SMPS-Z80 source code
File: SMPS-Z80_source_code.zip (258 kB) (info)

Games which use SMPS 68000

Mega Drive
A database query error has occurred. Did you forget to run your application's database schema updater after upgrading?

Query: SELECT `cargo__releases`.`name` AS `name`,`cargo__releases`.`date` AS `date` FROM `cargo__sound` LEFT OUTER JOIN `cargo__releases` ON ((`cargo__sound`.`_pageName`=`cargo__releases`.`_pageName`)) WHERE `cargo__sound`.`driver` LIKE '%SMPS 68000%' and `cargo__releases`.`console`="MD" GROUP BY `cargo__releases`.`_pageName` ORDER BY `cargo__releases`.`_pageName` LIMIT 1000 Function: CargoSQLQuery::run Error: 1021 Disk full (/tmp/#sql-temptable-15e6a-270aa11-20e0.MAI); waiting for someone to free some space... (errno: 28 "No space left on device") (localhost)

32X
A database query error has occurred. Did you forget to run your application's database schema updater after upgrading?

Query: SELECT `cargo__releases`.`name` AS `name`,`cargo__releases`.`date` AS `date` FROM `cargo__sound` LEFT OUTER JOIN `cargo__releases` ON ((`cargo__sound`.`_pageName`=`cargo__releases`.`_pageName`)) WHERE `cargo__sound`.`driver` LIKE '%SMPS 68000%' and `cargo__releases`.`console`="32X" GROUP BY `cargo__releases`.`_pageName` ORDER BY `cargo__releases`.`_pageName` LIMIT 1000 Function: CargoSQLQuery::run Error: 1021 Disk full (/tmp/#sql-temptable-15e6a-270aa11-20e6.MAI); waiting for someone to free some space... (errno: 28 "No space left on device") (localhost)

Games which use SMPS Z80

Mega Drive
A database query error has occurred. Did you forget to run your application's database schema updater after upgrading?

Query: SELECT `cargo__releases`.`name` AS `name`,`cargo__releases`.`date` AS `date` FROM `cargo__sound` LEFT OUTER JOIN `cargo__releases` ON ((`cargo__sound`.`_pageName`=`cargo__releases`.`_pageName`)) WHERE `cargo__sound`.`driver` LIKE '%SMPS Z80%' and `cargo__releases`.`console`="MD" GROUP BY `cargo__releases`.`_pageName` ORDER BY `cargo__releases`.`_pageName` LIMIT 1000 Function: CargoSQLQuery::run Error: 1021 Disk full (/tmp/#sql-temptable-15e6a-270aa11-20ec.MAI); waiting for someone to free some space... (errno: 28 "No space left on device") (localhost)

32X
A database query error has occurred. Did you forget to run your application's database schema updater after upgrading?

Query: SELECT `cargo__releases`.`name` AS `name`,`cargo__releases`.`date` AS `date` FROM `cargo__sound` LEFT OUTER JOIN `cargo__releases` ON ((`cargo__sound`.`_pageName`=`cargo__releases`.`_pageName`)) WHERE `cargo__sound`.`driver` LIKE '%SMPS Z80%' and `cargo__releases`.`console`="32X" GROUP BY `cargo__releases`.`_pageName` ORDER BY `cargo__releases`.`_pageName` LIMIT 1000 Function: CargoSQLQuery::run Error: 1021 Disk full (/tmp/#sql-temptable-15e6a-270aa11-20f2.MAI); waiting for someone to free some space... (errno: 28 "No space left on device") (localhost)

Mega-CD

SMPS-PCM is variant of SMPS-68000 designed to work on the Mega-CD's second 68000 processor, giving it access to the system's RF5C164 PCM chip.

Master System and Game Gear

SMPS drivers designed to work on the Z80 processors of the Master System and Game Gear were also produced. These tap into the two consoles' SN76489 chip.

Pico

SMPS-Pico is a variant of SMPS-68000 that targets the Sega Pico. It plays audio using the SN76489 and the Pico-specific UPD7759 chip.

The source code to this particular SMPS variant was released on AssemblerGames some time around 2016.

Download.svg Download Sega Pico Dev Tools
File: SEGA_Pico_dev_tools.zip (625 kB) (info)

Naming

The 'true' name of SMPS has been a subject of debate. Analysis of the source code reveals various possible names:

Name Usage
Sound Appears frequently in documentation (m5_edit.jxw, ver11.doc, etc.). In the source code, this is the name of the label that marks the driver's entry point (m5cnt13.src, mdcnt11.asm).
Sound-Sorce Appears in the header at the top of SMPS-Z80's source code files. Included with the source code is a sed script that replaces the instances of this name with a parameter that is labelled 'game name'. This script was seemingly used on a handful of files, replacing 'Sound-Sorce' with 'MODEM_BOOT_ROM' and 'DICK_TRACY'.
Sound-Source Appears in the header at the top of SMPS-68000's and SMPS-Pico's source code files. It is also the name used by some developers who had used SMPS back in the 90s[2][3][4]. Included with the source code is a sed script that replaces the instances of this name with a parameter that is labelled 'game name'.
Sound-Sample Written on the SMPS-68000 and SMPS-Z80 source code's floppy disks. The SMPS-68000 source code has a Batch script (fmk.bat) that uses the aforementioned sed script to replace 'Sound-Source' with 'Sound-Sample'.
EASYSND The name of the zip file that holds another zip file which contains the SMPS-Pico source code.
PICOSND The name of the zip file which contains the SMPS-Pico source code. Also appears in various filenames and build scripts.
The PICO sound driver Used by SMPS-Pico's GENERIC.MAK and PICOSND.MAK files.

Developers

The names of several developers appear in SMPS' source code:

Name Role Source
Tokuhiko Uwabo Maintainer of SMPS-Z80. The header of each source code file. Also mentioned by his Japanese name in the 'm5_bord.jxw' document.
Hiroshi Kubota Maintainer of SMPS-68000. The header of each source code file. Also mentioned by his Japanese name in the 'readme.txt' document.
"M.Nagao" (presumably Masayuki Nagao) Maintainer of SMPS-Pico. The header of each source code file.
Ken Chao 'Cleaned-up' the SMPS-Pico source code for use by U.S. and European developers. The 'README.1ST' document.

Technical details

Tools

External links

References