<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://sneslab.net/mw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=KungFuFurby</id>
	<title>SnesLab - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://sneslab.net/mw/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=KungFuFurby"/>
	<link rel="alternate" type="text/html" href="https://sneslab.net/wiki/Special:Contributions/KungFuFurby"/>
	<updated>2026-04-21T08:59:24Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=20919</id>
		<title>David Whittaker Sound Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=20919"/>
		<updated>2025-07-22T23:58:49Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Corrected the channel number that isn&amp;#039;t affected by global transposition. This is because the channel IDs defined in this article started at 1, not zero.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;David Whittaker Sound Engine&#039;&#039;&#039; is a sound driver for the SPC700 programmed by David Whittaker.&lt;br /&gt;
&lt;br /&gt;
Many games have multiple different builds stored in the game at once, sometimes with code differences. Almost every single game has at least one unique build not shared by any of the other games: the exceptions are...&lt;br /&gt;
* The opening logos for &#039;&#039;Lemmings 2: The Tribes&#039;&#039; and &#039;&#039;Apocalypse II&#039;&#039;&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; Beta&#039;s Title Screen and &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039;&#039; US Beta&lt;br /&gt;
* &#039;&#039;Lemmings 2: The Tribes&#039;&#039; &#039;  most common build and &#039;&#039;Riddick Bowe Boxing&#039;&#039;&#039;s Japanese version&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[David Whittaker Sound Engine/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
These are the games where the sound engine was used:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Version !! VCMD Code Location !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Dream TV&#039;&#039; || 0.0 (Beta 2)&amp;lt;br&amp;gt;2.1 (all other versions) || &amp;lt;tt&amp;gt;0x098A&amp;lt;/tt&amp;gt; (Beta 2)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x0196A2&amp;lt;/tt&amp;gt; (Beta 2, uncompressed)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x039B16&amp;lt;/tt&amp;gt; (all other versions, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; || 1.0 || &amp;lt;tt&amp;gt;0x04F1&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Kick Off/Super Kick Off&#039;&#039; || 1.0 || &amp;lt;tt&amp;gt;0x04E6&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x098000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Batman: Revenge of the Joker&#039;&#039; || 2.0 || &amp;lt;tt&amp;gt;0x0610&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x068000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Super SWIV/Firepower 2000&#039;&#039; || 2.2 || &amp;lt;tt&amp;gt;0x06AD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x158000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Gods&#039;&#039; || 2.3 || &amp;lt;tt&amp;gt;0x0500&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0600&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0612&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x980000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x98AFAC&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x99D448&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x9A8000&amp;lt;/tt&amp;gt; (all versions, three unique build variants, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;World Class Rugby&#039;&#039; || 2.3 || &amp;lt;tt&amp;gt;0x0608&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;N/A&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x021D64&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0B8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Battle Cars&#039;&#039; || 3.0 || &amp;lt;tt&amp;gt;0x0717&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0A8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Chavez/Riddick Bowe Boxing&#039;&#039; || 3.0 (US version)&amp;lt;br&amp;gt;3.1 (all other versions) || &amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt; (Japanese version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067C&amp;lt;/tt&amp;gt; (US version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067D&amp;lt;/tt&amp;gt; (Chavez) || &amp;lt;tt&amp;gt;0x0D8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions except &#039;&#039;Chavez&#039;&#039;)&amp;lt;br&amp;gt;(three unique build variants, one per version between &#039;&#039;Chavez&#039;&#039;, US &amp;amp; Japanese versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; (US beta)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x06A4&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x9C8000&amp;lt;/tt&amp;gt; (all versions except US beta)/&amp;lt;tt&amp;gt;0x9E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Apocalypse II&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0624&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x118000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x168000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x0601&amp;lt;/tt&amp;gt; (US and European version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x060B&amp;lt;/tt&amp;gt; (US and Japanese version Title Screen)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0704&amp;lt;/tt&amp;gt; (Japanese version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x070B&amp;lt;/tt&amp;gt; (European version Title Screen) || &amp;lt;tt&amp;gt;0x1B8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x08D500&amp;lt;/tt&amp;gt; (US &amp;amp; Japanese version)/&amp;lt;tt&amp;gt;0x08D550&amp;lt;/tt&amp;gt; (European beta version)/&amp;lt;tt&amp;gt;0x08D640&amp;lt;/tt&amp;gt; (European version)&amp;lt;br&amp;gt;(Four unique build variants: two Title Screen (US/JP compared to EU) and two In-Game (US/EU compare to JP))&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Kick Off 3&#039;&#039; (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x0658&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1A8000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x1D8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Lemmings 2: The Tribes&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x060F&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0697&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 16 copies of the code in the ROM, with five different build variants being present: four of them are used in one instance each, that being the opening logo, the Title Screen, the Beach Tribe and the Cavelem Tribe, and the others use a single common copy of the code with modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (3/16/1994 Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1E8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (5/24/1994 and 1/26/1995 Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06CA&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 36 copies of the code in the ROM, none of which are unique except for the sound data and modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Shaq Fu&#039;&#039; || 4.0a || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD96408&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Michael Jordan: Chaos in the Windy City&#039;&#039; || 4.0b || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD2B18F&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
Each command is triggered by sending the parameters to $2141-$2143 first, then the command ID to $2140. The latches are cleared afterwards on all registers, which means the same command IDs can be sent again, provided the parameters are also resent, given that they&#039;re also cleared out after use.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
====V0.0====&lt;br /&gt;
There is no acknowledgement to the SNES beyond the latches being cleared.&amp;lt;br&amp;gt;&lt;br /&gt;
====V1.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140-$2142 are updated every time a command ID is sent, and $2143 is updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz %00000abc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a parameter that was sent to $2141 to execute the command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%a&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 7.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%b&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 8.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%c&amp;lt;/tt&amp;gt; indicates that music is playing.&lt;br /&gt;
&lt;br /&gt;
====V2.0-V4.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141, and the internal command counter is initialized to the same value.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140 is updated every time a command ID is sent, and $2141-$2143 are updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&lt;br /&gt;
=====V2.0-V4.0a=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx %yyyyyyyy zz %aaaaaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyyyyyyy&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing a note for music. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%aaaaaaaa&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing SFX. These bits are cleared only when the SFX has elapsed all of its ticks, not when the sample is done playing if non-looping. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====V4.0b=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V0.0-V1.0)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$06 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$07 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Main Volume || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09-$FF&amp;lt;/tt&amp;gt; || Latch Clear || &amp;lt;tt&amp;gt;$09-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V2.0-V4.0a)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 1) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 2) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Play SFX (Channel 3) || &amp;lt;tt&amp;gt;$06 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Play SFX (Channel 4) || &amp;lt;tt&amp;gt;$07 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Play SFX (Channel 5) || &amp;lt;tt&amp;gt;$08 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;$09 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$0A xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$0B xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$0C ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$0D ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; || Main &amp;amp; Echo Volume || &amp;lt;tt&amp;gt;$0E xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; || Echo Feedback || &amp;lt;tt&amp;gt;$0F xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; || Go to IPL Boot Program || &amp;lt;tt&amp;gt;$10 ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$11 xx ?? ??&amp;lt;/tt&amp;gt; || 2.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 1) || &amp;lt;tt&amp;gt;$12 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 2) || &amp;lt;tt&amp;gt;$13 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 3) || &amp;lt;tt&amp;gt;$14 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 4) || &amp;lt;tt&amp;gt;$15 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 5) || &amp;lt;tt&amp;gt;$16 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 6) || &amp;lt;tt&amp;gt;$17 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 7) || &amp;lt;tt&amp;gt;$18 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 8) || &amp;lt;tt&amp;gt;$19 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 1) || &amp;lt;tt&amp;gt;$1A xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 2) || &amp;lt;tt&amp;gt;$1B xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 3) || &amp;lt;tt&amp;gt;$1C xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 4) || &amp;lt;tt&amp;gt;$1D xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 5) || &amp;lt;tt&amp;gt;$1E xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 6) || &amp;lt;tt&amp;gt;$1F xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 7) || &amp;lt;tt&amp;gt;$20 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 8) || &amp;lt;tt&amp;gt;$21 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$22-$23 xx yy ??&amp;lt;/tt&amp;gt; || 4.0a&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$24-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$24-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V4.0b)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Stop All SFX || &amp;lt;tt&amp;gt;$05 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Main Volume || &amp;lt;tt&amp;gt;$06 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$07 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$09 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Stop Music &amp;amp; Load New Data || &amp;lt;tt&amp;gt;$0A ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$0B ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Panning Separation || &amp;lt;tt&amp;gt;$0C xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$0D-$FF ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Latch Clear/Increment Counter===&lt;br /&gt;
Clears the latches on the CPUIO registers and does nothing else except increment the counter on V2.0 and up, thus making this effectively a NOP. This occurs on almost all invalid command IDs: there is exactly one exception, noted under Invalid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Riddick Bowe Boxing&#039;&#039; (US version) has additional behavior with command IDs &amp;lt;tt&amp;gt;$1A-$FF&amp;lt;/tt&amp;gt;: it plays music with a fixed ID instead of a parameter.&lt;br /&gt;
&lt;br /&gt;
===Invalid (Command &amp;lt;tt&amp;gt;$22&amp;lt;/tt&amp;gt; - Porky Pig&#039;s Haunted Holiday (beta - 5/24/1994 and 1/26/1995) only)===&lt;br /&gt;
Crashes the sound driver. The only games that can do this are the 5/24/1994 and 1/26/1995 versions of Porky Pig&#039;s Haunted Holiday, and it is because it jumps directly to a RET opcode on an empty stack, thus causing a stack underflow and a jump to a memory location not used for code.&lt;br /&gt;
&lt;br /&gt;
===NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$01 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the music ID.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid music IDs from being played.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command because it effectively turns it into a NOP:&lt;br /&gt;
* &#039;&#039;Apocalypse II&#039;&#039; (Opening logo)/&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Opening logo)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (Beta) (In-Game)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Play SFX (Command &amp;lt;tt&amp;gt;$04-$05&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$04-$0B&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yz ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Plays a piece of SFX.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V0.0-V1.0:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channels 1-6: Not supported&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V2.0-V4.0a:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channel 1: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 2: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 3: &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 4: &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 5: &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 6: &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** V4.0b instead dynamically allocates the channel that the SFX is played on across channels 5-8, and has a fixed ID of &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the SFX ID. Setting the highest bit (covering IDs &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;) keys off the SFX instead of playing it.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid SFX IDs from being played, and only accept &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; as an ID to key off SFX on that channel. V4.0b doesn&#039;t support &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; at all.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;z&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** &#039;&#039;Dream TV&#039;&#039; (beta and final): &#039;&#039;&#039;2X&#039;&#039;&#039;&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Batman: Revenge of the Joker&#039;&#039;, &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;, &#039;&#039;Michael Jordan Chaos in the Windy City&#039;&#039; &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, &#039;&#039;Shaq-Fu&#039;&#039;, &#039;&#039;Super SWIV/Firepower 2000&#039;&#039;: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* &#039;&#039;Gods&#039;&#039; (Ending)&lt;br /&gt;
&lt;br /&gt;
====SFX Data Format====&lt;br /&gt;
Each SFX entry is a pointer to a 14-byte entry containing a series of parameters to utilize on a per-SFX basis. Only one channel&#039;s worth is defined here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc dd ee ff gg hh ii jj kk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to play the SFX for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to slide pitches before resetting and doing the slide again.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a starting value for either the PITCHL DSP register or a noise frequency.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a starting value for the PITCHH DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is the offset to apply to either the PITCHL DSP register or noise frequency per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a offset to apply to the PITCHH DSP register per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a direct write to the SRCN DSP register. &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; and up instead cause this to use noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; modifies the pitch using RNG using a non-zero value (except for V3.0 and up, this value is any non-zero value). How it is modified depends on the version.&lt;br /&gt;
** V0.0-V2.0 overwrites the pitch settings and instead uses two bytes of RNG values for the pitch on a per-step basis.&lt;br /&gt;
** V2.1 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the high byte of the final pitch output on a per-step basis.&lt;br /&gt;
** V2.2 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
** V2.3 does nothing.&lt;br /&gt;
** V3.0 and up apply a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff&amp;lt;/tt&amp;gt; defines the sign for the pitch offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; turns off pitch slides for the SFX.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; apply a positive offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; apply a negative offset.&lt;br /&gt;
* &amp;lt;tt&amp;gt;gg&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to perform the pitch slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;hh&amp;lt;/tt&amp;gt; is a direct write to the ADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt; is a direct write to the ADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;jj&amp;lt;/tt&amp;gt; is generally an endless flag, but its operation differs between versions.&lt;br /&gt;
** For V0.0-V4.0a, when this value is non-zero, it causes the SFX to be played endlessly until keyed off or interrupted. It also causes pitch slides to run forever.&lt;br /&gt;
** For V4.0b, this acts as SFX priority. If all four channels are being used for SFX and the priority of the incoming SFX is greater than the SFX currently played, then the SFX is overwritten. The SFX plays forever if this value is greater than &amp;lt;tt&amp;gt;$7F&amp;lt;/tt&amp;gt;, like what is done in V0.0-V4.0a.&lt;br /&gt;
* &amp;lt;tt&amp;gt;kk&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) per step.&lt;br /&gt;
&lt;br /&gt;
===Stop All SFX (Command &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops all SFX from playing in channels 5-8.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at maximum tempo... which means every ten timer 0 ticks. This is equivalent to a tempo of 256.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at normal tempo.&lt;br /&gt;
&lt;br /&gt;
===Main &amp;amp; Echo Volume (Command &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V1.0), &amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the MVOLL and MVOLR DSP registers.&lt;br /&gt;
** V2.0 and up may also set the EVOLL and EVOLR DSP registers, but only if echo is supported in that build. It is always scaled by the main volume. The scaler multiplier (actually done with shifts) is as following, sorted by build...&lt;br /&gt;
*** &#039;&#039;Batman: Revenge of the Joker&#039;&#039;: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Dream TV&#039;&#039;: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Gods&#039;&#039; (all builds): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;World Class Rugby&#039;&#039; (Outside of a game): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (Driving): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Cavelem Tribe): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Echo Feedback (Command &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0F xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the EFB DSP register.&lt;br /&gt;
&lt;br /&gt;
This is only ever supported if echo is supported in the ROM. That means only these builds support this command:&lt;br /&gt;
* &#039;&#039;Batman: Revenge of the Joker&#039;&#039;&lt;br /&gt;
* &#039;&#039;Dream TV&#039;&#039;&lt;br /&gt;
* &#039;&#039;Gods&#039;&#039; (all builds)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (Outside of a game)&lt;br /&gt;
* &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (Driving)&lt;br /&gt;
* &#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Cavelem Tribe)&lt;br /&gt;
&lt;br /&gt;
These other games have a reference for the ID, but effectively make it a NOP:&lt;br /&gt;
* &#039;&#039;Battle Cars&#039;&#039;&lt;br /&gt;
* &#039;&#039;Riddick Bowe Boxing/Chavez&#039;&#039; (all versions except Japanese)&lt;br /&gt;
* &#039;&#039;Shaq-Fu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Go to IPL Boot Program (Command &amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
Jumps directly to the [[SPC700/IPL ROM|IPL Boot Program]].&lt;br /&gt;
&lt;br /&gt;
===Set Tempo (Command &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; (V2.1-V2.2, V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$11 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the tempo to set the song at. This overwrites the song&#039;s tempo settings.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
===Set SFX Volume (Command &amp;lt;tt&amp;gt;$12-$19&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii ?? xy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Michael Jordan Chaos in the Windy City&#039;&#039; &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Set SFX Pitch (Command &amp;lt;tt&amp;gt;$1A-$21&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; overwrites the PITCHL value used in the SFX data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; overwrites the PITCHH value used in the SFX data.&lt;br /&gt;
&lt;br /&gt;
This command is only supported in the following builds...&lt;br /&gt;
* &#039;&#039;Battle Cars&#039;&#039;&lt;br /&gt;
* &#039;&#039;World Cup Striker&#039;&#039; (European version) (Title Screen)&lt;br /&gt;
* &#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; (European version) (In-Game)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (beta) (In-Game)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (beta) (Title Screen)&lt;br /&gt;
* &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (beta)&lt;br /&gt;
* &#039;&#039;Shaq-Fu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Not all IDs are supported in these builds...&lt;br /&gt;
* &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (In-Game) &#039;&#039;(does not support $1A-$1D, not even in the code)&#039;&#039;&lt;br /&gt;
* &#039;&#039;World Cup Striker (Japanese)&#039;&#039; (In-Game) &#039;&#039;(skips over $1A-$1D via a longer branding distance, though the code still exists)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; (V4.0a), &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Loads new data from the SNES using an IPL Boot ROM variant.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol should be nearly identical to IPL Boot ROM with a few differences or so, since the program seems like it&#039;s using a similar variant)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Stop Music &amp;amp; Load New Data (Command &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops the music, then loads new data from the SNES using an IPL Boot ROM variant.&lt;br /&gt;
&lt;br /&gt;
===Panning Separation (Command &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0C xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; sets the amount that the panning will influence the left and right volumes. The maximum is zero, while the minimum is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;, making it effectively mono.&lt;br /&gt;
&lt;br /&gt;
==Song Entry==&lt;br /&gt;
For each song entry in an array of song definitions, one byte is defined as a starting tempo, followed by a series of pointers defined [[little endian]] style for each channel. For &#039;&#039;Dream TV&#039;&#039; Beta and &#039;&#039;Kick Off&#039;&#039;, only five pointers are defined. For &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;, only six pointers are defined. For all other games, eight pointers are defined.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (&#039;&#039;Dream TV Beta&#039;&#039; and &#039;&#039;Kick Off&#039;&#039;)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee ff ff&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting tempo.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. &#039;&#039;(&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; only pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff ff&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Three builds don&#039;t support song entries at all:&lt;br /&gt;
* The opening logos for &#039;&#039;Lemmings 2: The Tribes&#039;&#039; and &#039;&#039;Apocalypse II&#039;&#039;&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; Beta (In-Game)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;World Class Rugby&#039;&#039; (During a game) also doesn&#039;t support the music format at all since the code was removed.&lt;br /&gt;
&lt;br /&gt;
==Pattern Order List==&lt;br /&gt;
Each channel has a list of [[little endian]] pointers on a per-channel basis. If the pointer is zero, then you jump back to either the beginning of the pattern order list for that channel, or to the loop marker that was set by the $F5 VCMD.&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format at V0.0 is N-SPC/Kankichi-kun compatible minus noise support for SRCN values above 127. Post V1.0, one of the bytes loses its usage.&lt;br /&gt;
&lt;br /&gt;
The instrument format is defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0-V1.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz ?? bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register... but only for V1.0 and older. Otherwise, it&#039;s an unused byte.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt; || Note || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;%011xxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt; || Note Length || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Instant Pitch Change to Note || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0a only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Set Main Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0b only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Volume Scaler by Fraction ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Set ADSR ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Fine Tune ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Pitch Bend ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Pitch Envelope ID ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || L/R Voice Volume ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt; || Tempo ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt; || Jump to Pattern in Order List + Mark Loop Point ||&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt; || Key Off || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt; || One Note Delay || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt; || Instrument ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt; || Absolute Global Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt; || Absolute Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt; || Song End || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Pattern End || || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMDs &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (pre-V4.0), &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; (pre-V3.0), &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; (pre-V2.0), &amp;lt;tt&amp;gt;$F0-$F1&amp;lt;/tt&amp;gt; (pre-V1.0))===&lt;br /&gt;
The sound driver deliberately freezes itself via an infinite branch always loop rather than crashing or skipping the byte. This also takes up VCMD slots that are not filled in earlier versions.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMDs &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
The initial pitch of the note is calculated using a pitch table that contains one octave (and a note)&#039;s worth of pitch values. This value is shifted according to the octave used, and multiplied that by the instrument&#039;s pitch base to get the pitch for the note.&lt;br /&gt;
&lt;br /&gt;
===Note Length (VCMDs &amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%011xxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; represents your note length (as five bits).&lt;br /&gt;
Note lengths are defined as the number of tempo ticks plus one. Notes are keyed off either on another note or on the key off VCMD (&amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Instant Pitch Change to Note (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0a))===&lt;br /&gt;
Requires V4.0a to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the note to change the pitch to.&lt;br /&gt;
&lt;br /&gt;
===Set Main Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Requires V4.0b to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the value to directly write to the MVOL DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Volume Scaler by Fraction (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V3.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the numerator, and is the value to multiply the volume by. The scaling process is skipped if this is zero.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the denominator, and is the value to divide the multiplied volume by.&lt;br /&gt;
Put the two together, and you get the current volume multiplied by &amp;lt;math&amp;gt;\frac{x}{y}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Set ADSR (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V2.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Pitch Bend (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
Pitch bends are performed every 10 timer 0 ticks independently of the tempo. They are automatically terminated after one note.&lt;br /&gt;
&lt;br /&gt;
===Pitch Envelope ID (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an index to an array to a pointer of pitch envelopes. The pitch envelopes always loop and are clocked at a rate of 10 timer 0 ticks independently of the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
====Pitch Envelope Format====&lt;br /&gt;
=====Pitch Offset Tick (CMD &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$81-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed offset in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
=====Restart Pitch Envelope (CMD &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;$80&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jumps back to the beginning of the pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===L/R Voice Volume (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F3 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This is a direct DSP register write to the VxVOL registers, with &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; being the left volume and &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; being the right volume.&lt;br /&gt;
This VCMD&#039;s operation changes depending on the version:&lt;br /&gt;
* V0.0-V2.2: Just a straight write with no modifications made to the input.&lt;br /&gt;
* V2.3: The input values are shifted left once.&lt;br /&gt;
* V3.0-V4.0b: The input values are scaled by VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;, then shifted left once.&lt;br /&gt;
* V4.0a: The input values are scaled by the values used for VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;. The shifting operation is not done here.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as &amp;lt;math&amp;gt;10*\frac{256}{x}&amp;lt;/math&amp;gt; timer 0 ticks. Zero freezes the song except for pitch bends and envelopes, which are not affected by the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
===Jump to Pattern in Order List + Mark Loop Point (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern pointer in the order list. The loop point is marked here.&lt;br /&gt;
&lt;br /&gt;
===Key Off (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===One Note Delay (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Absolute Global Transposition (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for all channels for the music.&lt;br /&gt;
Global transpsition is not applied to channel 5 for V0.0-2.1.&lt;br /&gt;
&lt;br /&gt;
===Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FC xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for the channel.&lt;br /&gt;
&lt;br /&gt;
===Song End (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Terminates the song for all of the channels.&lt;br /&gt;
&lt;br /&gt;
===Pattern End (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Ends the pattern and goes to the pattern order list to fetch another pattern.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=20918</id>
		<title>David Whittaker Sound Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=20918"/>
		<updated>2025-07-22T05:07:53Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Found an invalid command ID difference with Riddick Bowe Boxing (US version): namely, it plays music with a fixed ID, assuming that the command ID is greater than or equal to $1A.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;David Whittaker Sound Engine&#039;&#039;&#039; is a sound driver for the SPC700 programmed by David Whittaker.&lt;br /&gt;
&lt;br /&gt;
Many games have multiple different builds stored in the game at once, sometimes with code differences. Almost every single game has at least one unique build not shared by any of the other games: the exceptions are...&lt;br /&gt;
* The opening logos for &#039;&#039;Lemmings 2: The Tribes&#039;&#039; and &#039;&#039;Apocalypse II&#039;&#039;&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; Beta&#039;s Title Screen and &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039;&#039; US Beta&lt;br /&gt;
* &#039;&#039;Lemmings 2: The Tribes&#039;&#039; &#039;  most common build and &#039;&#039;Riddick Bowe Boxing&#039;&#039;&#039;s Japanese version&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[David Whittaker Sound Engine/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
These are the games where the sound engine was used:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Version !! VCMD Code Location !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Dream TV&#039;&#039; || 0.0 (Beta 2)&amp;lt;br&amp;gt;2.1 (all other versions) || &amp;lt;tt&amp;gt;0x098A&amp;lt;/tt&amp;gt; (Beta 2)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x0196A2&amp;lt;/tt&amp;gt; (Beta 2, uncompressed)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x039B16&amp;lt;/tt&amp;gt; (all other versions, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; || 1.0 || &amp;lt;tt&amp;gt;0x04F1&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Kick Off/Super Kick Off&#039;&#039; || 1.0 || &amp;lt;tt&amp;gt;0x04E6&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x098000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Batman: Revenge of the Joker&#039;&#039; || 2.0 || &amp;lt;tt&amp;gt;0x0610&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x068000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Super SWIV/Firepower 2000&#039;&#039; || 2.2 || &amp;lt;tt&amp;gt;0x06AD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x158000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Gods&#039;&#039; || 2.3 || &amp;lt;tt&amp;gt;0x0500&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0600&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0612&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x980000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x98AFAC&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x99D448&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x9A8000&amp;lt;/tt&amp;gt; (all versions, three unique build variants, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;World Class Rugby&#039;&#039; || 2.3 || &amp;lt;tt&amp;gt;0x0608&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;N/A&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x021D64&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0B8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Battle Cars&#039;&#039; || 3.0 || &amp;lt;tt&amp;gt;0x0717&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0A8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Chavez/Riddick Bowe Boxing&#039;&#039; || 3.0 (US version)&amp;lt;br&amp;gt;3.1 (all other versions) || &amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt; (Japanese version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067C&amp;lt;/tt&amp;gt; (US version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067D&amp;lt;/tt&amp;gt; (Chavez) || &amp;lt;tt&amp;gt;0x0D8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions except &#039;&#039;Chavez&#039;&#039;)&amp;lt;br&amp;gt;(three unique build variants, one per version between &#039;&#039;Chavez&#039;&#039;, US &amp;amp; Japanese versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; (US beta)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x06A4&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x9C8000&amp;lt;/tt&amp;gt; (all versions except US beta)/&amp;lt;tt&amp;gt;0x9E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Apocalypse II&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0624&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x118000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x168000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x0601&amp;lt;/tt&amp;gt; (US and European version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x060B&amp;lt;/tt&amp;gt; (US and Japanese version Title Screen)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0704&amp;lt;/tt&amp;gt; (Japanese version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x070B&amp;lt;/tt&amp;gt; (European version Title Screen) || &amp;lt;tt&amp;gt;0x1B8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x08D500&amp;lt;/tt&amp;gt; (US &amp;amp; Japanese version)/&amp;lt;tt&amp;gt;0x08D550&amp;lt;/tt&amp;gt; (European beta version)/&amp;lt;tt&amp;gt;0x08D640&amp;lt;/tt&amp;gt; (European version)&amp;lt;br&amp;gt;(Four unique build variants: two Title Screen (US/JP compared to EU) and two In-Game (US/EU compare to JP))&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Kick Off 3&#039;&#039; (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x0658&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1A8000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x1D8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Lemmings 2: The Tribes&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x060F&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0697&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 16 copies of the code in the ROM, with five different build variants being present: four of them are used in one instance each, that being the opening logo, the Title Screen, the Beach Tribe and the Cavelem Tribe, and the others use a single common copy of the code with modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (3/16/1994 Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1E8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (5/24/1994 and 1/26/1995 Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06CA&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 36 copies of the code in the ROM, none of which are unique except for the sound data and modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Shaq Fu&#039;&#039; || 4.0a || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD96408&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Michael Jordan: Chaos in the Windy City&#039;&#039; || 4.0b || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD2B18F&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
Each command is triggered by sending the parameters to $2141-$2143 first, then the command ID to $2140. The latches are cleared afterwards on all registers, which means the same command IDs can be sent again, provided the parameters are also resent, given that they&#039;re also cleared out after use.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
====V0.0====&lt;br /&gt;
There is no acknowledgement to the SNES beyond the latches being cleared.&amp;lt;br&amp;gt;&lt;br /&gt;
====V1.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140-$2142 are updated every time a command ID is sent, and $2143 is updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz %00000abc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a parameter that was sent to $2141 to execute the command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%a&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 7.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%b&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 8.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%c&amp;lt;/tt&amp;gt; indicates that music is playing.&lt;br /&gt;
&lt;br /&gt;
====V2.0-V4.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141, and the internal command counter is initialized to the same value.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140 is updated every time a command ID is sent, and $2141-$2143 are updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&lt;br /&gt;
=====V2.0-V4.0a=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx %yyyyyyyy zz %aaaaaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyyyyyyy&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing a note for music. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%aaaaaaaa&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing SFX. These bits are cleared only when the SFX has elapsed all of its ticks, not when the sample is done playing if non-looping. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====V4.0b=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V0.0-V1.0)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$06 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$07 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Main Volume || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09-$FF&amp;lt;/tt&amp;gt; || Latch Clear || &amp;lt;tt&amp;gt;$09-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V2.0-V4.0a)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 1) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 2) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Play SFX (Channel 3) || &amp;lt;tt&amp;gt;$06 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Play SFX (Channel 4) || &amp;lt;tt&amp;gt;$07 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Play SFX (Channel 5) || &amp;lt;tt&amp;gt;$08 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;$09 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$0A xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$0B xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$0C ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$0D ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; || Main &amp;amp; Echo Volume || &amp;lt;tt&amp;gt;$0E xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; || Echo Feedback || &amp;lt;tt&amp;gt;$0F xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; || Go to IPL Boot Program || &amp;lt;tt&amp;gt;$10 ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$11 xx ?? ??&amp;lt;/tt&amp;gt; || 2.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 1) || &amp;lt;tt&amp;gt;$12 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 2) || &amp;lt;tt&amp;gt;$13 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 3) || &amp;lt;tt&amp;gt;$14 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 4) || &amp;lt;tt&amp;gt;$15 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 5) || &amp;lt;tt&amp;gt;$16 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 6) || &amp;lt;tt&amp;gt;$17 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 7) || &amp;lt;tt&amp;gt;$18 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 8) || &amp;lt;tt&amp;gt;$19 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 1) || &amp;lt;tt&amp;gt;$1A xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 2) || &amp;lt;tt&amp;gt;$1B xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 3) || &amp;lt;tt&amp;gt;$1C xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 4) || &amp;lt;tt&amp;gt;$1D xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 5) || &amp;lt;tt&amp;gt;$1E xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 6) || &amp;lt;tt&amp;gt;$1F xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 7) || &amp;lt;tt&amp;gt;$20 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 8) || &amp;lt;tt&amp;gt;$21 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$22-$23 xx yy ??&amp;lt;/tt&amp;gt; || 4.0a&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$24-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$24-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V4.0b)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Stop All SFX || &amp;lt;tt&amp;gt;$05 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Main Volume || &amp;lt;tt&amp;gt;$06 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$07 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$09 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Stop Music &amp;amp; Load New Data || &amp;lt;tt&amp;gt;$0A ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$0B ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Panning Separation || &amp;lt;tt&amp;gt;$0C xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$0D-$FF ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Latch Clear/Increment Counter===&lt;br /&gt;
Clears the latches on the CPUIO registers and does nothing else except increment the counter on V2.0 and up, thus making this effectively a NOP. This occurs on almost all invalid command IDs: there is exactly one exception, noted under Invalid.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Riddick Bowe Boxing&#039;&#039; (US version) has additional behavior with command IDs &amp;lt;tt&amp;gt;$1A-$FF&amp;lt;/tt&amp;gt;: it plays music with a fixed ID instead of a parameter.&lt;br /&gt;
&lt;br /&gt;
===Invalid (Command &amp;lt;tt&amp;gt;$22&amp;lt;/tt&amp;gt; - Porky Pig&#039;s Haunted Holiday (beta - 5/24/1994 and 1/26/1995) only)===&lt;br /&gt;
Crashes the sound driver. The only games that can do this are the 5/24/1994 and 1/26/1995 versions of Porky Pig&#039;s Haunted Holiday, and it is because it jumps directly to a RET opcode on an empty stack, thus causing a stack underflow and a jump to a memory location not used for code.&lt;br /&gt;
&lt;br /&gt;
===NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$01 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the music ID.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid music IDs from being played.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command because it effectively turns it into a NOP:&lt;br /&gt;
* &#039;&#039;Apocalypse II&#039;&#039; (Opening logo)/&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Opening logo)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (Beta) (In-Game)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Play SFX (Command &amp;lt;tt&amp;gt;$04-$05&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$04-$0B&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yz ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Plays a piece of SFX.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V0.0-V1.0:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channels 1-6: Not supported&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V2.0-V4.0a:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channel 1: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 2: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 3: &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 4: &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 5: &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 6: &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** V4.0b instead dynamically allocates the channel that the SFX is played on across channels 5-8, and has a fixed ID of &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the SFX ID. Setting the highest bit (covering IDs &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;) keys off the SFX instead of playing it.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid SFX IDs from being played, and only accept &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; as an ID to key off SFX on that channel. V4.0b doesn&#039;t support &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; at all.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;z&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** &#039;&#039;Dream TV&#039;&#039; (beta and final): &#039;&#039;&#039;2X&#039;&#039;&#039;&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Batman: Revenge of the Joker&#039;&#039;, &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;, &#039;&#039;Michael Jordan Chaos in the Windy City&#039;&#039; &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, &#039;&#039;Shaq-Fu&#039;&#039;, &#039;&#039;Super SWIV/Firepower 2000&#039;&#039;: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* &#039;&#039;Gods&#039;&#039; (Ending)&lt;br /&gt;
&lt;br /&gt;
====SFX Data Format====&lt;br /&gt;
Each SFX entry is a pointer to a 14-byte entry containing a series of parameters to utilize on a per-SFX basis. Only one channel&#039;s worth is defined here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc dd ee ff gg hh ii jj kk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to play the SFX for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to slide pitches before resetting and doing the slide again.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a starting value for either the PITCHL DSP register or a noise frequency.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a starting value for the PITCHH DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is the offset to apply to either the PITCHL DSP register or noise frequency per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a offset to apply to the PITCHH DSP register per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a direct write to the SRCN DSP register. &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; and up instead cause this to use noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; modifies the pitch using RNG using a non-zero value (except for V3.0 and up, this value is any non-zero value). How it is modified depends on the version.&lt;br /&gt;
** V0.0-V2.0 overwrites the pitch settings and instead uses two bytes of RNG values for the pitch on a per-step basis.&lt;br /&gt;
** V2.1 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the high byte of the final pitch output on a per-step basis.&lt;br /&gt;
** V2.2 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
** V2.3 does nothing.&lt;br /&gt;
** V3.0 and up apply a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff&amp;lt;/tt&amp;gt; defines the sign for the pitch offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; turns off pitch slides for the SFX.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; apply a positive offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; apply a negative offset.&lt;br /&gt;
* &amp;lt;tt&amp;gt;gg&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to perform the pitch slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;hh&amp;lt;/tt&amp;gt; is a direct write to the ADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt; is a direct write to the ADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;jj&amp;lt;/tt&amp;gt; is generally an endless flag, but its operation differs between versions.&lt;br /&gt;
** For V0.0-V4.0a, when this value is non-zero, it causes the SFX to be played endlessly until keyed off or interrupted. It also causes pitch slides to run forever.&lt;br /&gt;
** For V4.0b, this acts as SFX priority. If all four channels are being used for SFX and the priority of the incoming SFX is greater than the SFX currently played, then the SFX is overwritten. The SFX plays forever if this value is greater than &amp;lt;tt&amp;gt;$7F&amp;lt;/tt&amp;gt;, like what is done in V0.0-V4.0a.&lt;br /&gt;
* &amp;lt;tt&amp;gt;kk&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) per step.&lt;br /&gt;
&lt;br /&gt;
===Stop All SFX (Command &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops all SFX from playing in channels 5-8.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at maximum tempo... which means every ten timer 0 ticks. This is equivalent to a tempo of 256.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at normal tempo.&lt;br /&gt;
&lt;br /&gt;
===Main &amp;amp; Echo Volume (Command &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V1.0), &amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the MVOLL and MVOLR DSP registers.&lt;br /&gt;
** V2.0 and up may also set the EVOLL and EVOLR DSP registers, but only if echo is supported in that build. It is always scaled by the main volume. The scaler multiplier (actually done with shifts) is as following, sorted by build...&lt;br /&gt;
*** &#039;&#039;Batman: Revenge of the Joker&#039;&#039;: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Dream TV&#039;&#039;: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Gods&#039;&#039; (all builds): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;World Class Rugby&#039;&#039; (Outside of a game): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (Driving): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Cavelem Tribe): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Echo Feedback (Command &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0F xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the EFB DSP register.&lt;br /&gt;
&lt;br /&gt;
This is only ever supported if echo is supported in the ROM. That means only these builds support this command:&lt;br /&gt;
* &#039;&#039;Batman: Revenge of the Joker&#039;&#039;&lt;br /&gt;
* &#039;&#039;Dream TV&#039;&#039;&lt;br /&gt;
* &#039;&#039;Gods&#039;&#039; (all builds)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (Outside of a game)&lt;br /&gt;
* &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (Driving)&lt;br /&gt;
* &#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Cavelem Tribe)&lt;br /&gt;
&lt;br /&gt;
These other games have a reference for the ID, but effectively make it a NOP:&lt;br /&gt;
* &#039;&#039;Battle Cars&#039;&#039;&lt;br /&gt;
* &#039;&#039;Riddick Bowe Boxing/Chavez&#039;&#039; (all versions except Japanese)&lt;br /&gt;
* &#039;&#039;Shaq-Fu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Go to IPL Boot Program (Command &amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
Jumps directly to the [[SPC700/IPL ROM|IPL Boot Program]].&lt;br /&gt;
&lt;br /&gt;
===Set Tempo (Command &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; (V2.1-V2.2, V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$11 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the tempo to set the song at. This overwrites the song&#039;s tempo settings.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
===Set SFX Volume (Command &amp;lt;tt&amp;gt;$12-$19&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii ?? xy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Michael Jordan Chaos in the Windy City&#039;&#039; &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Set SFX Pitch (Command &amp;lt;tt&amp;gt;$1A-$21&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; overwrites the PITCHL value used in the SFX data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; overwrites the PITCHH value used in the SFX data.&lt;br /&gt;
&lt;br /&gt;
This command is only supported in the following builds...&lt;br /&gt;
* &#039;&#039;Battle Cars&#039;&#039;&lt;br /&gt;
* &#039;&#039;World Cup Striker&#039;&#039; (European version) (Title Screen)&lt;br /&gt;
* &#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; (European version) (In-Game)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (beta) (In-Game)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (beta) (Title Screen)&lt;br /&gt;
* &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (beta)&lt;br /&gt;
* &#039;&#039;Shaq-Fu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Not all IDs are supported in these builds...&lt;br /&gt;
* &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (In-Game) &#039;&#039;(does not support $1A-$1D, not even in the code)&#039;&#039;&lt;br /&gt;
* &#039;&#039;World Cup Striker (Japanese)&#039;&#039; (In-Game) &#039;&#039;(skips over $1A-$1D via a longer branding distance, though the code still exists)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; (V4.0a), &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Loads new data from the SNES using an IPL Boot ROM variant.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol should be nearly identical to IPL Boot ROM with a few differences or so, since the program seems like it&#039;s using a similar variant)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Stop Music &amp;amp; Load New Data (Command &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops the music, then loads new data from the SNES using an IPL Boot ROM variant.&lt;br /&gt;
&lt;br /&gt;
===Panning Separation (Command &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0C xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; sets the amount that the panning will influence the left and right volumes. The maximum is zero, while the minimum is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;, making it effectively mono.&lt;br /&gt;
&lt;br /&gt;
==Song Entry==&lt;br /&gt;
For each song entry in an array of song definitions, one byte is defined as a starting tempo, followed by a series of pointers defined [[little endian]] style for each channel. For &#039;&#039;Dream TV&#039;&#039; Beta and &#039;&#039;Kick Off&#039;&#039;, only five pointers are defined. For &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;, only six pointers are defined. For all other games, eight pointers are defined.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (&#039;&#039;Dream TV Beta&#039;&#039; and &#039;&#039;Kick Off&#039;&#039;)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee ff ff&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting tempo.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. &#039;&#039;(&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; only pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff ff&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Three builds don&#039;t support song entries at all:&lt;br /&gt;
* The opening logos for &#039;&#039;Lemmings 2: The Tribes&#039;&#039; and &#039;&#039;Apocalypse II&#039;&#039;&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; Beta (In-Game)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;World Class Rugby&#039;&#039; (During a game) also doesn&#039;t support the music format at all since the code was removed.&lt;br /&gt;
&lt;br /&gt;
==Pattern Order List==&lt;br /&gt;
Each channel has a list of [[little endian]] pointers on a per-channel basis. If the pointer is zero, then you jump back to either the beginning of the pattern order list for that channel, or to the loop marker that was set by the $F5 VCMD.&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format at V0.0 is N-SPC/Kankichi-kun compatible minus noise support for SRCN values above 127. Post V1.0, one of the bytes loses its usage.&lt;br /&gt;
&lt;br /&gt;
The instrument format is defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0-V1.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz ?? bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register... but only for V1.0 and older. Otherwise, it&#039;s an unused byte.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt; || Note || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;%011xxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt; || Note Length || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Instant Pitch Change to Note || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0a only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Set Main Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0b only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Volume Scaler by Fraction ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Set ADSR ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Fine Tune ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Pitch Bend ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Pitch Envelope ID ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || L/R Voice Volume ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt; || Tempo ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt; || Jump to Pattern in Order List + Mark Loop Point ||&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt; || Key Off || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt; || One Note Delay || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt; || Instrument ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt; || Absolute Global Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt; || Absolute Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt; || Song End || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Pattern End || || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMDs &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (pre-V4.0), &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; (pre-V3.0), &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; (pre-V2.0), &amp;lt;tt&amp;gt;$F0-$F1&amp;lt;/tt&amp;gt; (pre-V1.0))===&lt;br /&gt;
The sound driver deliberately freezes itself via an infinite branch always loop rather than crashing or skipping the byte. This also takes up VCMD slots that are not filled in earlier versions.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMDs &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
The initial pitch of the note is calculated using a pitch table that contains one octave (and a note)&#039;s worth of pitch values. This value is shifted according to the octave used, and multiplied that by the instrument&#039;s pitch base to get the pitch for the note.&lt;br /&gt;
&lt;br /&gt;
===Note Length (VCMDs &amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%011xxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; represents your note length (as five bits).&lt;br /&gt;
Note lengths are defined as the number of tempo ticks plus one. Notes are keyed off either on another note or on the key off VCMD (&amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Instant Pitch Change to Note (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0a))===&lt;br /&gt;
Requires V4.0a to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the note to change the pitch to.&lt;br /&gt;
&lt;br /&gt;
===Set Main Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Requires V4.0b to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the value to directly write to the MVOL DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Volume Scaler by Fraction (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V3.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the numerator, and is the value to multiply the volume by. The scaling process is skipped if this is zero.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the denominator, and is the value to divide the multiplied volume by.&lt;br /&gt;
Put the two together, and you get the current volume multiplied by &amp;lt;math&amp;gt;\frac{x}{y}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Set ADSR (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V2.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Pitch Bend (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
Pitch bends are performed every 10 timer 0 ticks independently of the tempo. They are automatically terminated after one note.&lt;br /&gt;
&lt;br /&gt;
===Pitch Envelope ID (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an index to an array to a pointer of pitch envelopes. The pitch envelopes always loop and are clocked at a rate of 10 timer 0 ticks independently of the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
====Pitch Envelope Format====&lt;br /&gt;
=====Pitch Offset Tick (CMD &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$81-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed offset in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
=====Restart Pitch Envelope (CMD &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;$80&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jumps back to the beginning of the pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===L/R Voice Volume (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F3 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This is a direct DSP register write to the VxVOL registers, with &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; being the left volume and &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; being the right volume.&lt;br /&gt;
This VCMD&#039;s operation changes depending on the version:&lt;br /&gt;
* V0.0-V2.2: Just a straight write with no modifications made to the input.&lt;br /&gt;
* V2.3: The input values are shifted left once.&lt;br /&gt;
* V3.0-V4.0b: The input values are scaled by VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;, then shifted left once.&lt;br /&gt;
* V4.0a: The input values are scaled by the values used for VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;. The shifting operation is not done here.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as &amp;lt;math&amp;gt;10*\frac{256}{x}&amp;lt;/math&amp;gt; timer 0 ticks. Zero freezes the song except for pitch bends and envelopes, which are not affected by the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
===Jump to Pattern in Order List + Mark Loop Point (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern pointer in the order list. The loop point is marked here.&lt;br /&gt;
&lt;br /&gt;
===Key Off (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===One Note Delay (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Absolute Global Transposition (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for all channels for the music.&lt;br /&gt;
Global transpsition is not applied to channel 4 for V0.0-2.1.&lt;br /&gt;
&lt;br /&gt;
===Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FC xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for the channel.&lt;br /&gt;
&lt;br /&gt;
===Song End (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Terminates the song for all of the channels.&lt;br /&gt;
&lt;br /&gt;
===Pattern End (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Ends the pattern and goes to the pattern order list to fetch another pattern.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=20917</id>
		<title>David Whittaker Sound Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=20917"/>
		<updated>2025-07-21T17:49:55Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Removing the P from &amp;quot;resent&amp;quot;: clearing latches means the parameters are no longer present on the CPUIO registers because they&amp;#039;re zeroed out.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;David Whittaker Sound Engine&#039;&#039;&#039; is a sound driver for the SPC700 programmed by David Whittaker.&lt;br /&gt;
&lt;br /&gt;
Many games have multiple different builds stored in the game at once, sometimes with code differences. Almost every single game has at least one unique build not shared by any of the other games: the exceptions are...&lt;br /&gt;
* The opening logos for &#039;&#039;Lemmings 2: The Tribes&#039;&#039; and &#039;&#039;Apocalypse II&#039;&#039;&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; Beta&#039;s Title Screen and &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039;&#039; US Beta&lt;br /&gt;
* &#039;&#039;Lemmings 2: The Tribes&#039;&#039; &#039;  most common build and &#039;&#039;Riddick Bowe Boxing&#039;&#039;&#039;s Japanese version&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[David Whittaker Sound Engine/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
These are the games where the sound engine was used:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Version !! VCMD Code Location !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Dream TV&#039;&#039; || 0.0 (Beta 2)&amp;lt;br&amp;gt;2.1 (all other versions) || &amp;lt;tt&amp;gt;0x098A&amp;lt;/tt&amp;gt; (Beta 2)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x0196A2&amp;lt;/tt&amp;gt; (Beta 2, uncompressed)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x039B16&amp;lt;/tt&amp;gt; (all other versions, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; || 1.0 || &amp;lt;tt&amp;gt;0x04F1&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Kick Off/Super Kick Off&#039;&#039; || 1.0 || &amp;lt;tt&amp;gt;0x04E6&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x098000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Batman: Revenge of the Joker&#039;&#039; || 2.0 || &amp;lt;tt&amp;gt;0x0610&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x068000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Super SWIV/Firepower 2000&#039;&#039; || 2.2 || &amp;lt;tt&amp;gt;0x06AD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x158000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Gods&#039;&#039; || 2.3 || &amp;lt;tt&amp;gt;0x0500&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0600&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0612&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x980000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x98AFAC&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x99D448&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x9A8000&amp;lt;/tt&amp;gt; (all versions, three unique build variants, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;World Class Rugby&#039;&#039; || 2.3 || &amp;lt;tt&amp;gt;0x0608&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;N/A&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x021D64&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0B8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Battle Cars&#039;&#039; || 3.0 || &amp;lt;tt&amp;gt;0x0717&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0A8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Chavez/Riddick Bowe Boxing&#039;&#039; || 3.0 (US version)&amp;lt;br&amp;gt;3.1 (all other versions) || &amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt; (Japanese version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067C&amp;lt;/tt&amp;gt; (US version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067D&amp;lt;/tt&amp;gt; (Chavez) || &amp;lt;tt&amp;gt;0x0D8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions except &#039;&#039;Chavez&#039;&#039;)&amp;lt;br&amp;gt;(three unique build variants, one per version between &#039;&#039;Chavez&#039;&#039;, US &amp;amp; Japanese versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; (US beta)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x06A4&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x9C8000&amp;lt;/tt&amp;gt; (all versions except US beta)/&amp;lt;tt&amp;gt;0x9E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Apocalypse II&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0624&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x118000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x168000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x0601&amp;lt;/tt&amp;gt; (US and European version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x060B&amp;lt;/tt&amp;gt; (US and Japanese version Title Screen)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0704&amp;lt;/tt&amp;gt; (Japanese version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x070B&amp;lt;/tt&amp;gt; (European version Title Screen) || &amp;lt;tt&amp;gt;0x1B8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x08D500&amp;lt;/tt&amp;gt; (US &amp;amp; Japanese version)/&amp;lt;tt&amp;gt;0x08D550&amp;lt;/tt&amp;gt; (European beta version)/&amp;lt;tt&amp;gt;0x08D640&amp;lt;/tt&amp;gt; (European version)&amp;lt;br&amp;gt;(Four unique build variants: two Title Screen (US/JP compared to EU) and two In-Game (US/EU compare to JP))&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Kick Off 3&#039;&#039; (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x0658&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1A8000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x1D8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Lemmings 2: The Tribes&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x060F&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0697&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 16 copies of the code in the ROM, with five different build variants being present: four of them are used in one instance each, that being the opening logo, the Title Screen, the Beach Tribe and the Cavelem Tribe, and the others use a single common copy of the code with modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (3/16/1994 Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1E8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (5/24/1994 and 1/26/1995 Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06CA&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 36 copies of the code in the ROM, none of which are unique except for the sound data and modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Shaq Fu&#039;&#039; || 4.0a || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD96408&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Michael Jordan: Chaos in the Windy City&#039;&#039; || 4.0b || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD2B18F&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
Each command is triggered by sending the parameters to $2141-$2143 first, then the command ID to $2140. The latches are cleared afterwards on all registers, which means the same command IDs can be sent again, provided the parameters are also resent, given that they&#039;re also cleared out after use.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
====V0.0====&lt;br /&gt;
There is no acknowledgement to the SNES beyond the latches being cleared.&amp;lt;br&amp;gt;&lt;br /&gt;
====V1.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140-$2142 are updated every time a command ID is sent, and $2143 is updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz %00000abc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a parameter that was sent to $2141 to execute the command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%a&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 7.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%b&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 8.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%c&amp;lt;/tt&amp;gt; indicates that music is playing.&lt;br /&gt;
&lt;br /&gt;
====V2.0-V4.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141, and the internal command counter is initialized to the same value.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140 is updated every time a command ID is sent, and $2141-$2143 are updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&lt;br /&gt;
=====V2.0-V4.0a=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx %yyyyyyyy zz %aaaaaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyyyyyyy&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing a note for music. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%aaaaaaaa&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing SFX. These bits are cleared only when the SFX has elapsed all of its ticks, not when the sample is done playing if non-looping. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====V4.0b=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V0.0-V1.0)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$06 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$07 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Main Volume || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09-$FF&amp;lt;/tt&amp;gt; || Latch Clear || &amp;lt;tt&amp;gt;$09-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V2.0-V4.0a)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 1) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 2) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Play SFX (Channel 3) || &amp;lt;tt&amp;gt;$06 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Play SFX (Channel 4) || &amp;lt;tt&amp;gt;$07 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Play SFX (Channel 5) || &amp;lt;tt&amp;gt;$08 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;$09 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$0A xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$0B xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$0C ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$0D ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; || Main &amp;amp; Echo Volume || &amp;lt;tt&amp;gt;$0E xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; || Echo Feedback || &amp;lt;tt&amp;gt;$0F xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; || Go to IPL Boot Program || &amp;lt;tt&amp;gt;$10 ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$11 xx ?? ??&amp;lt;/tt&amp;gt; || 2.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 1) || &amp;lt;tt&amp;gt;$12 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 2) || &amp;lt;tt&amp;gt;$13 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 3) || &amp;lt;tt&amp;gt;$14 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 4) || &amp;lt;tt&amp;gt;$15 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 5) || &amp;lt;tt&amp;gt;$16 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 6) || &amp;lt;tt&amp;gt;$17 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 7) || &amp;lt;tt&amp;gt;$18 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 8) || &amp;lt;tt&amp;gt;$19 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 1) || &amp;lt;tt&amp;gt;$1A xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 2) || &amp;lt;tt&amp;gt;$1B xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 3) || &amp;lt;tt&amp;gt;$1C xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 4) || &amp;lt;tt&amp;gt;$1D xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 5) || &amp;lt;tt&amp;gt;$1E xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 6) || &amp;lt;tt&amp;gt;$1F xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 7) || &amp;lt;tt&amp;gt;$20 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 8) || &amp;lt;tt&amp;gt;$21 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$22-$23 xx yy ??&amp;lt;/tt&amp;gt; || 4.0a&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$24-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$24-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V4.0b)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Stop All SFX || &amp;lt;tt&amp;gt;$05 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Main Volume || &amp;lt;tt&amp;gt;$06 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$07 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$09 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Stop Music &amp;amp; Load New Data || &amp;lt;tt&amp;gt;$0A ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$0B ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Panning Separation || &amp;lt;tt&amp;gt;$0C xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$0D-$FF ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Latch Clear/Increment Counter===&lt;br /&gt;
Clears the latches on the CPUIO registers and does nothing else except increment the counter on V2.0 and up, thus making this effectively a NOP. This occurs on almost all invalid command IDs: there is exactly one exception, noted under Invalid.&lt;br /&gt;
&lt;br /&gt;
===Invalid (Command &amp;lt;tt&amp;gt;$22&amp;lt;/tt&amp;gt; - Porky Pig&#039;s Haunted Holiday (beta - 5/24/1994 and 1/26/1995) only)===&lt;br /&gt;
Crashes the sound driver. The only games that can do this are the 5/24/1994 and 1/26/1995 versions of Porky Pig&#039;s Haunted Holiday, and it is because it jumps directly to a RET opcode on an empty stack, thus causing a stack underflow and a jump to a memory location not used for code.&lt;br /&gt;
&lt;br /&gt;
===NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$01 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the music ID.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid music IDs from being played.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command because it effectively turns it into a NOP:&lt;br /&gt;
* &#039;&#039;Apocalypse II&#039;&#039; (Opening logo)/&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Opening logo)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (Beta) (In-Game)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Play SFX (Command &amp;lt;tt&amp;gt;$04-$05&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$04-$0B&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yz ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Plays a piece of SFX.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V0.0-V1.0:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channels 1-6: Not supported&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V2.0-V4.0a:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channel 1: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 2: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 3: &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 4: &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 5: &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 6: &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** V4.0b instead dynamically allocates the channel that the SFX is played on across channels 5-8, and has a fixed ID of &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the SFX ID. Setting the highest bit (covering IDs &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;) keys off the SFX instead of playing it.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid SFX IDs from being played, and only accept &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; as an ID to key off SFX on that channel. V4.0b doesn&#039;t support &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; at all.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;z&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** &#039;&#039;Dream TV&#039;&#039; (beta and final): &#039;&#039;&#039;2X&#039;&#039;&#039;&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Batman: Revenge of the Joker&#039;&#039;, &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;, &#039;&#039;Michael Jordan Chaos in the Windy City&#039;&#039; &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, &#039;&#039;Shaq-Fu&#039;&#039;, &#039;&#039;Super SWIV/Firepower 2000&#039;&#039;: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* &#039;&#039;Gods&#039;&#039; (Ending)&lt;br /&gt;
&lt;br /&gt;
====SFX Data Format====&lt;br /&gt;
Each SFX entry is a pointer to a 14-byte entry containing a series of parameters to utilize on a per-SFX basis. Only one channel&#039;s worth is defined here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc dd ee ff gg hh ii jj kk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to play the SFX for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to slide pitches before resetting and doing the slide again.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a starting value for either the PITCHL DSP register or a noise frequency.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a starting value for the PITCHH DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is the offset to apply to either the PITCHL DSP register or noise frequency per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a offset to apply to the PITCHH DSP register per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a direct write to the SRCN DSP register. &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; and up instead cause this to use noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; modifies the pitch using RNG using a non-zero value (except for V3.0 and up, this value is any non-zero value). How it is modified depends on the version.&lt;br /&gt;
** V0.0-V2.0 overwrites the pitch settings and instead uses two bytes of RNG values for the pitch on a per-step basis.&lt;br /&gt;
** V2.1 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the high byte of the final pitch output on a per-step basis.&lt;br /&gt;
** V2.2 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
** V2.3 does nothing.&lt;br /&gt;
** V3.0 and up apply a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff&amp;lt;/tt&amp;gt; defines the sign for the pitch offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; turns off pitch slides for the SFX.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; apply a positive offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; apply a negative offset.&lt;br /&gt;
* &amp;lt;tt&amp;gt;gg&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to perform the pitch slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;hh&amp;lt;/tt&amp;gt; is a direct write to the ADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt; is a direct write to the ADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;jj&amp;lt;/tt&amp;gt; is generally an endless flag, but its operation differs between versions.&lt;br /&gt;
** For V0.0-V4.0a, when this value is non-zero, it causes the SFX to be played endlessly until keyed off or interrupted. It also causes pitch slides to run forever.&lt;br /&gt;
** For V4.0b, this acts as SFX priority. If all four channels are being used for SFX and the priority of the incoming SFX is greater than the SFX currently played, then the SFX is overwritten. The SFX plays forever if this value is greater than &amp;lt;tt&amp;gt;$7F&amp;lt;/tt&amp;gt;, like what is done in V0.0-V4.0a.&lt;br /&gt;
* &amp;lt;tt&amp;gt;kk&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) per step.&lt;br /&gt;
&lt;br /&gt;
===Stop All SFX (Command &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops all SFX from playing in channels 5-8.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at maximum tempo... which means every ten timer 0 ticks. This is equivalent to a tempo of 256.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at normal tempo.&lt;br /&gt;
&lt;br /&gt;
===Main &amp;amp; Echo Volume (Command &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V1.0), &amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the MVOLL and MVOLR DSP registers.&lt;br /&gt;
** V2.0 and up may also set the EVOLL and EVOLR DSP registers, but only if echo is supported in that build. It is always scaled by the main volume. The scaler multiplier (actually done with shifts) is as following, sorted by build...&lt;br /&gt;
*** &#039;&#039;Batman: Revenge of the Joker&#039;&#039;: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Dream TV&#039;&#039;: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Gods&#039;&#039; (all builds): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;World Class Rugby&#039;&#039; (Outside of a game): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (Driving): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Cavelem Tribe): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Echo Feedback (Command &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0F xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the EFB DSP register.&lt;br /&gt;
&lt;br /&gt;
This is only ever supported if echo is supported in the ROM. That means only these builds support this command:&lt;br /&gt;
* &#039;&#039;Batman: Revenge of the Joker&#039;&#039;&lt;br /&gt;
* &#039;&#039;Dream TV&#039;&#039;&lt;br /&gt;
* &#039;&#039;Gods&#039;&#039; (all builds)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (Outside of a game)&lt;br /&gt;
* &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (Driving)&lt;br /&gt;
* &#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Cavelem Tribe)&lt;br /&gt;
&lt;br /&gt;
These other games have a reference for the ID, but effectively make it a NOP:&lt;br /&gt;
* &#039;&#039;Battle Cars&#039;&#039;&lt;br /&gt;
* &#039;&#039;Riddick Bowe Boxing/Chavez&#039;&#039; (all versions except Japanese)&lt;br /&gt;
* &#039;&#039;Shaq-Fu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Go to IPL Boot Program (Command &amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
Jumps directly to the [[SPC700/IPL ROM|IPL Boot Program]].&lt;br /&gt;
&lt;br /&gt;
===Set Tempo (Command &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; (V2.1-V2.2, V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$11 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the tempo to set the song at. This overwrites the song&#039;s tempo settings.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
===Set SFX Volume (Command &amp;lt;tt&amp;gt;$12-$19&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii ?? xy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Michael Jordan Chaos in the Windy City&#039;&#039; &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Set SFX Pitch (Command &amp;lt;tt&amp;gt;$1A-$21&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; overwrites the PITCHL value used in the SFX data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; overwrites the PITCHH value used in the SFX data.&lt;br /&gt;
&lt;br /&gt;
This command is only supported in the following builds...&lt;br /&gt;
* &#039;&#039;Battle Cars&#039;&#039;&lt;br /&gt;
* &#039;&#039;World Cup Striker&#039;&#039; (European version) (Title Screen)&lt;br /&gt;
* &#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; (European version) (In-Game)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (beta) (In-Game)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (beta) (Title Screen)&lt;br /&gt;
* &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (beta)&lt;br /&gt;
* &#039;&#039;Shaq-Fu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Not all IDs are supported in these builds...&lt;br /&gt;
* &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (In-Game) &#039;&#039;(does not support $1A-$1D, not even in the code)&#039;&#039;&lt;br /&gt;
* &#039;&#039;World Cup Striker (Japanese)&#039;&#039; (In-Game) &#039;&#039;(skips over $1A-$1D via a longer branding distance, though the code still exists)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; (V4.0a), &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Loads new data from the SNES using an IPL Boot ROM variant.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol should be nearly identical to IPL Boot ROM with a few differences or so, since the program seems like it&#039;s using a similar variant)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Stop Music &amp;amp; Load New Data (Command &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops the music, then loads new data from the SNES using an IPL Boot ROM variant.&lt;br /&gt;
&lt;br /&gt;
===Panning Separation (Command &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0C xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; sets the amount that the panning will influence the left and right volumes. The maximum is zero, while the minimum is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;, making it effectively mono.&lt;br /&gt;
&lt;br /&gt;
==Song Entry==&lt;br /&gt;
For each song entry in an array of song definitions, one byte is defined as a starting tempo, followed by a series of pointers defined [[little endian]] style for each channel. For &#039;&#039;Dream TV&#039;&#039; Beta and &#039;&#039;Kick Off&#039;&#039;, only five pointers are defined. For &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;, only six pointers are defined. For all other games, eight pointers are defined.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (&#039;&#039;Dream TV Beta&#039;&#039; and &#039;&#039;Kick Off&#039;&#039;)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee ff ff&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting tempo.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. &#039;&#039;(&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; only pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff ff&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Three builds don&#039;t support song entries at all:&lt;br /&gt;
* The opening logos for &#039;&#039;Lemmings 2: The Tribes&#039;&#039; and &#039;&#039;Apocalypse II&#039;&#039;&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; Beta (In-Game)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;World Class Rugby&#039;&#039; (During a game) also doesn&#039;t support the music format at all since the code was removed.&lt;br /&gt;
&lt;br /&gt;
==Pattern Order List==&lt;br /&gt;
Each channel has a list of [[little endian]] pointers on a per-channel basis. If the pointer is zero, then you jump back to either the beginning of the pattern order list for that channel, or to the loop marker that was set by the $F5 VCMD.&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format at V0.0 is N-SPC/Kankichi-kun compatible minus noise support for SRCN values above 127. Post V1.0, one of the bytes loses its usage.&lt;br /&gt;
&lt;br /&gt;
The instrument format is defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0-V1.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz ?? bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register... but only for V1.0 and older. Otherwise, it&#039;s an unused byte.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt; || Note || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;%011xxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt; || Note Length || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Instant Pitch Change to Note || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0a only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Set Main Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0b only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Volume Scaler by Fraction ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Set ADSR ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Fine Tune ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Pitch Bend ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Pitch Envelope ID ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || L/R Voice Volume ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt; || Tempo ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt; || Jump to Pattern in Order List + Mark Loop Point ||&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt; || Key Off || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt; || One Note Delay || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt; || Instrument ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt; || Absolute Global Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt; || Absolute Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt; || Song End || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Pattern End || || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMDs &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (pre-V4.0), &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; (pre-V3.0), &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; (pre-V2.0), &amp;lt;tt&amp;gt;$F0-$F1&amp;lt;/tt&amp;gt; (pre-V1.0))===&lt;br /&gt;
The sound driver deliberately freezes itself via an infinite branch always loop rather than crashing or skipping the byte. This also takes up VCMD slots that are not filled in earlier versions.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMDs &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
The initial pitch of the note is calculated using a pitch table that contains one octave (and a note)&#039;s worth of pitch values. This value is shifted according to the octave used, and multiplied that by the instrument&#039;s pitch base to get the pitch for the note.&lt;br /&gt;
&lt;br /&gt;
===Note Length (VCMDs &amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%011xxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; represents your note length (as five bits).&lt;br /&gt;
Note lengths are defined as the number of tempo ticks plus one. Notes are keyed off either on another note or on the key off VCMD (&amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Instant Pitch Change to Note (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0a))===&lt;br /&gt;
Requires V4.0a to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the note to change the pitch to.&lt;br /&gt;
&lt;br /&gt;
===Set Main Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Requires V4.0b to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the value to directly write to the MVOL DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Volume Scaler by Fraction (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V3.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the numerator, and is the value to multiply the volume by. The scaling process is skipped if this is zero.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the denominator, and is the value to divide the multiplied volume by.&lt;br /&gt;
Put the two together, and you get the current volume multiplied by &amp;lt;math&amp;gt;\frac{x}{y}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Set ADSR (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V2.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Pitch Bend (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
Pitch bends are performed every 10 timer 0 ticks independently of the tempo. They are automatically terminated after one note.&lt;br /&gt;
&lt;br /&gt;
===Pitch Envelope ID (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an index to an array to a pointer of pitch envelopes. The pitch envelopes always loop and are clocked at a rate of 10 timer 0 ticks independently of the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
====Pitch Envelope Format====&lt;br /&gt;
=====Pitch Offset Tick (CMD &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$81-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed offset in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
=====Restart Pitch Envelope (CMD &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;$80&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jumps back to the beginning of the pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===L/R Voice Volume (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F3 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This is a direct DSP register write to the VxVOL registers, with &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; being the left volume and &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; being the right volume.&lt;br /&gt;
This VCMD&#039;s operation changes depending on the version:&lt;br /&gt;
* V0.0-V2.2: Just a straight write with no modifications made to the input.&lt;br /&gt;
* V2.3: The input values are shifted left once.&lt;br /&gt;
* V3.0-V4.0b: The input values are scaled by VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;, then shifted left once.&lt;br /&gt;
* V4.0a: The input values are scaled by the values used for VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;. The shifting operation is not done here.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as &amp;lt;math&amp;gt;10*\frac{256}{x}&amp;lt;/math&amp;gt; timer 0 ticks. Zero freezes the song except for pitch bends and envelopes, which are not affected by the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
===Jump to Pattern in Order List + Mark Loop Point (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern pointer in the order list. The loop point is marked here.&lt;br /&gt;
&lt;br /&gt;
===Key Off (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===One Note Delay (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Absolute Global Transposition (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for all channels for the music.&lt;br /&gt;
Global transpsition is not applied to channel 4 for V0.0-2.1.&lt;br /&gt;
&lt;br /&gt;
===Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FC xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for the channel.&lt;br /&gt;
&lt;br /&gt;
===Song End (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Terminates the song for all of the channels.&lt;br /&gt;
&lt;br /&gt;
===Pattern End (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Ends the pattern and goes to the pattern order list to fetch another pattern.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine/Build_Sorting&amp;diff=20915</id>
		<title>David Whittaker Sound Engine/Build Sorting</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine/Build_Sorting&amp;diff=20915"/>
		<updated>2025-07-17T20:57:39Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Updating due to new betas from Porky Pig&amp;#039;s Haunted Holiday, resulting in a new non-unique build difference&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Dream TV&#039;&#039; (Beta 2) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 E8 E8 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BF4&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Kick Off&#039;&#039; || &amp;lt;tt&amp;gt;$0300&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$079D&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; (version 1)&amp;lt;br&amp;gt; &#039;&#039;(Only version used in the Japanese version)&#039;&#039; || &amp;lt;tt&amp;gt;$0300&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;D0 F5 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$079D&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0994&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; (version 2) || &amp;lt;tt&amp;gt;$0300&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;D0 F5 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$079D&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0999&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Gods&#039;&#039; (Ending) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$080D&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Gods&#039;&#039; (Title Screen &amp;amp; In-Game) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$090D&amp;lt;/tt&amp;gt; || Two copies of the code found in ROM.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;World Class Rugby&#039;&#039; (Outside of a game)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0915&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Batman: Revenge of the Joker&#039;&#039; || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;CD ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$091F&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$05E4&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Gods&#039;&#039; (Opening) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;CD ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$091F&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$05EB&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Dream TV&#039;&#039; || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0923&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Cavelem Tribe) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$09D8&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;World Class Rugby&#039;&#039; (During a game) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$051C&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super SWIV/Firepower 2000&#039;&#039; || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$08BC&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Apocalypse II&#039;&#039; (Opening Logo)&amp;lt;br&amp;gt;&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Opening Logo)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$08F0&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Beach Tribe) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0950&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Title Screen) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0955&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Most common build used)&amp;lt;br&amp;gt;&#039;&#039;Riddick Bowe Boxing&#039;&#039; (Japanese version) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0962&amp;lt;/tt&amp;gt; || 12 copies of the code found in ROM for Lemmings 2: The Tribes.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Apocalypse II&#039;&#039; (In-Game)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0965&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Kick Off 3&#039;&#039; (Beta) (In-Game)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0999&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Kick Off 3&#039;&#039; (Beta) (Title Screen)&amp;lt;br&amp;gt;&#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (US Beta)&amp;lt;br&amp;gt;&#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (3/16/1994 Beta version only)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$09FE&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (5/24/1994 and 1/26/1995 Beta version only)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A0B&amp;lt;/tt&amp;gt; || Contains an opening jump.&amp;lt;br&amp;gt;36 copies of the code found in ROM.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Shaq Fu&#039;&#039;|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0874&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; (Japanese version) (Title Screen)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0947&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Riddick Bowe Boxing&#039;&#039; (US version)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0947&amp;lt;/tt&amp;gt; || Two copies of the code found in the ROM. Between the two, there were lots of memory location reference-related differences, but none were actual opcode-related executions, so it&#039;s considered a match.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Chavez&#039;&#039;|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$09B9&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (In-Game)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$09E0&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; (European version) (In-Game)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A3B&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Battle Cars&#039;&#039;|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A3C&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;World Cup Striker&#039;&#039; (Japanese version) (In-Game)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A3E&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;World Cup Striker&#039;&#039; (European version) (Title Screen)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A47&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (Driving)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A6F&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Michael Jordan: Chaos in the Windy City&#039;&#039;|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$052E&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|}&lt;br /&gt;
[[Category:SPC Sound Engine Build Sorting Pages]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=20914</id>
		<title>David Whittaker Sound Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=20914"/>
		<updated>2025-07-17T20:55:29Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Updating due to new betas from Porky Pig&amp;#039;s Haunted Holiday, resulting in a new non-unique build difference&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;David Whittaker Sound Engine&#039;&#039;&#039; is a sound driver for the SPC700 programmed by David Whittaker.&lt;br /&gt;
&lt;br /&gt;
Many games have multiple different builds stored in the game at once, sometimes with code differences. Almost every single game has at least one unique build not shared by any of the other games: the exceptions are...&lt;br /&gt;
* The opening logos for &#039;&#039;Lemmings 2: The Tribes&#039;&#039; and &#039;&#039;Apocalypse II&#039;&#039;&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; Beta&#039;s Title Screen and &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039;&#039; US Beta&lt;br /&gt;
* &#039;&#039;Lemmings 2: The Tribes&#039;&#039; &#039;  most common build and &#039;&#039;Riddick Bowe Boxing&#039;&#039;&#039;s Japanese version&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[David Whittaker Sound Engine/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
These are the games where the sound engine was used:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Version !! VCMD Code Location !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Dream TV&#039;&#039; || 0.0 (Beta 2)&amp;lt;br&amp;gt;2.1 (all other versions) || &amp;lt;tt&amp;gt;0x098A&amp;lt;/tt&amp;gt; (Beta 2)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x0196A2&amp;lt;/tt&amp;gt; (Beta 2, uncompressed)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x039B16&amp;lt;/tt&amp;gt; (all other versions, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; || 1.0 || &amp;lt;tt&amp;gt;0x04F1&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Kick Off/Super Kick Off&#039;&#039; || 1.0 || &amp;lt;tt&amp;gt;0x04E6&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x098000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Batman: Revenge of the Joker&#039;&#039; || 2.0 || &amp;lt;tt&amp;gt;0x0610&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x068000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Super SWIV/Firepower 2000&#039;&#039; || 2.2 || &amp;lt;tt&amp;gt;0x06AD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x158000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Gods&#039;&#039; || 2.3 || &amp;lt;tt&amp;gt;0x0500&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0600&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0612&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x980000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x98AFAC&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x99D448&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x9A8000&amp;lt;/tt&amp;gt; (all versions, three unique build variants, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;World Class Rugby&#039;&#039; || 2.3 || &amp;lt;tt&amp;gt;0x0608&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;N/A&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x021D64&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0B8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Battle Cars&#039;&#039; || 3.0 || &amp;lt;tt&amp;gt;0x0717&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0A8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Chavez/Riddick Bowe Boxing&#039;&#039; || 3.0 (US version)&amp;lt;br&amp;gt;3.1 (all other versions) || &amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt; (Japanese version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067C&amp;lt;/tt&amp;gt; (US version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067D&amp;lt;/tt&amp;gt; (Chavez) || &amp;lt;tt&amp;gt;0x0D8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions except &#039;&#039;Chavez&#039;&#039;)&amp;lt;br&amp;gt;(three unique build variants, one per version between &#039;&#039;Chavez&#039;&#039;, US &amp;amp; Japanese versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; (US beta)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x06A4&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x9C8000&amp;lt;/tt&amp;gt; (all versions except US beta)/&amp;lt;tt&amp;gt;0x9E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Apocalypse II&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0624&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x118000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x168000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x0601&amp;lt;/tt&amp;gt; (US and European version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x060B&amp;lt;/tt&amp;gt; (US and Japanese version Title Screen)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0704&amp;lt;/tt&amp;gt; (Japanese version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x070B&amp;lt;/tt&amp;gt; (European version Title Screen) || &amp;lt;tt&amp;gt;0x1B8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x08D500&amp;lt;/tt&amp;gt; (US &amp;amp; Japanese version)/&amp;lt;tt&amp;gt;0x08D550&amp;lt;/tt&amp;gt; (European beta version)/&amp;lt;tt&amp;gt;0x08D640&amp;lt;/tt&amp;gt; (European version)&amp;lt;br&amp;gt;(Four unique build variants: two Title Screen (US/JP compared to EU) and two In-Game (US/EU compare to JP))&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Kick Off 3&#039;&#039; (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x0658&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1A8000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x1D8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Lemmings 2: The Tribes&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x060F&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0697&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 16 copies of the code in the ROM, with five different build variants being present: four of them are used in one instance each, that being the opening logo, the Title Screen, the Beach Tribe and the Cavelem Tribe, and the others use a single common copy of the code with modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (3/16/1994 Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1E8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (5/24/1994 and 1/26/1995 Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06CA&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 36 copies of the code in the ROM, none of which are unique except for the sound data and modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Shaq Fu&#039;&#039; || 4.0a || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD96408&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Michael Jordan: Chaos in the Windy City&#039;&#039; || 4.0b || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD2B18F&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
Each command is triggered by sending the parameters to $2141-$2143 first, then the command ID to $2140. The latches are cleared afterwards on all registers, which means the same command IDs can be sent again, provided the parameters are present.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
====V0.0====&lt;br /&gt;
There is no acknowledgement to the SNES beyond the latches being cleared.&amp;lt;br&amp;gt;&lt;br /&gt;
====V1.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140-$2142 are updated every time a command ID is sent, and $2143 is updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz %00000abc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a parameter that was sent to $2141 to execute the command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%a&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 7.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%b&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 8.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%c&amp;lt;/tt&amp;gt; indicates that music is playing.&lt;br /&gt;
&lt;br /&gt;
====V2.0-V4.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141, and the internal command counter is initialized to the same value.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140 is updated every time a command ID is sent, and $2141-$2143 are updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&lt;br /&gt;
=====V2.0-V4.0a=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx %yyyyyyyy zz %aaaaaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyyyyyyy&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing a note for music. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%aaaaaaaa&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing SFX. These bits are cleared only when the SFX has elapsed all of its ticks, not when the sample is done playing if non-looping. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====V4.0b=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V0.0-V1.0)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$06 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$07 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Main Volume || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09-$FF&amp;lt;/tt&amp;gt; || Latch Clear || &amp;lt;tt&amp;gt;$09-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V2.0-V4.0a)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 1) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 2) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Play SFX (Channel 3) || &amp;lt;tt&amp;gt;$06 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Play SFX (Channel 4) || &amp;lt;tt&amp;gt;$07 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Play SFX (Channel 5) || &amp;lt;tt&amp;gt;$08 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;$09 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$0A xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$0B xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$0C ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$0D ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; || Main &amp;amp; Echo Volume || &amp;lt;tt&amp;gt;$0E xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; || Echo Feedback || &amp;lt;tt&amp;gt;$0F xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; || Go to IPL Boot Program || &amp;lt;tt&amp;gt;$10 ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$11 xx ?? ??&amp;lt;/tt&amp;gt; || 2.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 1) || &amp;lt;tt&amp;gt;$12 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 2) || &amp;lt;tt&amp;gt;$13 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 3) || &amp;lt;tt&amp;gt;$14 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 4) || &amp;lt;tt&amp;gt;$15 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 5) || &amp;lt;tt&amp;gt;$16 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 6) || &amp;lt;tt&amp;gt;$17 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 7) || &amp;lt;tt&amp;gt;$18 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 8) || &amp;lt;tt&amp;gt;$19 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 1) || &amp;lt;tt&amp;gt;$1A xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 2) || &amp;lt;tt&amp;gt;$1B xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 3) || &amp;lt;tt&amp;gt;$1C xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 4) || &amp;lt;tt&amp;gt;$1D xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 5) || &amp;lt;tt&amp;gt;$1E xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 6) || &amp;lt;tt&amp;gt;$1F xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 7) || &amp;lt;tt&amp;gt;$20 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 8) || &amp;lt;tt&amp;gt;$21 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$22-$23 xx yy ??&amp;lt;/tt&amp;gt; || 4.0a&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$24-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$24-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V4.0b)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Stop All SFX || &amp;lt;tt&amp;gt;$05 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Main Volume || &amp;lt;tt&amp;gt;$06 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$07 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$09 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Stop Music &amp;amp; Load New Data || &amp;lt;tt&amp;gt;$0A ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$0B ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Panning Separation || &amp;lt;tt&amp;gt;$0C xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$0D-$FF ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Latch Clear/Increment Counter===&lt;br /&gt;
Clears the latches on the CPUIO registers and does nothing else except increment the counter on V2.0 and up, thus making this effectively a NOP. This occurs on almost all invalid command IDs: there is exactly one exception, noted under Invalid.&lt;br /&gt;
&lt;br /&gt;
===Invalid (Command &amp;lt;tt&amp;gt;$22&amp;lt;/tt&amp;gt; - Porky Pig&#039;s Haunted Holiday (beta - 5/24/1994 and 1/26/1995) only)===&lt;br /&gt;
Crashes the sound driver. The only games that can do this are the 5/24/1994 and 1/26/1995 versions of Porky Pig&#039;s Haunted Holiday, and it is because it jumps directly to a RET opcode on an empty stack, thus causing a stack underflow and a jump to a memory location not used for code.&lt;br /&gt;
&lt;br /&gt;
===NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$01 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the music ID.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid music IDs from being played.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command because it effectively turns it into a NOP:&lt;br /&gt;
* &#039;&#039;Apocalypse II&#039;&#039; (Opening logo)/&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Opening logo)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (Beta) (In-Game)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Play SFX (Command &amp;lt;tt&amp;gt;$04-$05&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$04-$0B&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yz ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Plays a piece of SFX.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V0.0-V1.0:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channels 1-6: Not supported&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V2.0-V4.0a:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channel 1: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 2: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 3: &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 4: &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 5: &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 6: &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** V4.0b instead dynamically allocates the channel that the SFX is played on across channels 5-8, and has a fixed ID of &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the SFX ID. Setting the highest bit (covering IDs &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;) keys off the SFX instead of playing it.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid SFX IDs from being played, and only accept &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; as an ID to key off SFX on that channel. V4.0b doesn&#039;t support &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; at all.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;z&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** &#039;&#039;Dream TV&#039;&#039; (beta and final): &#039;&#039;&#039;2X&#039;&#039;&#039;&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Batman: Revenge of the Joker&#039;&#039;, &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;, &#039;&#039;Michael Jordan Chaos in the Windy City&#039;&#039; &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, &#039;&#039;Shaq-Fu&#039;&#039;, &#039;&#039;Super SWIV/Firepower 2000&#039;&#039;: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* &#039;&#039;Gods&#039;&#039; (Ending)&lt;br /&gt;
&lt;br /&gt;
====SFX Data Format====&lt;br /&gt;
Each SFX entry is a pointer to a 14-byte entry containing a series of parameters to utilize on a per-SFX basis. Only one channel&#039;s worth is defined here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc dd ee ff gg hh ii jj kk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to play the SFX for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to slide pitches before resetting and doing the slide again.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a starting value for either the PITCHL DSP register or a noise frequency.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a starting value for the PITCHH DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is the offset to apply to either the PITCHL DSP register or noise frequency per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a offset to apply to the PITCHH DSP register per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a direct write to the SRCN DSP register. &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; and up instead cause this to use noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; modifies the pitch using RNG using a non-zero value (except for V3.0 and up, this value is any non-zero value). How it is modified depends on the version.&lt;br /&gt;
** V0.0-V2.0 overwrites the pitch settings and instead uses two bytes of RNG values for the pitch on a per-step basis.&lt;br /&gt;
** V2.1 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the high byte of the final pitch output on a per-step basis.&lt;br /&gt;
** V2.2 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
** V2.3 does nothing.&lt;br /&gt;
** V3.0 and up apply a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff&amp;lt;/tt&amp;gt; defines the sign for the pitch offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; turns off pitch slides for the SFX.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; apply a positive offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; apply a negative offset.&lt;br /&gt;
* &amp;lt;tt&amp;gt;gg&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to perform the pitch slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;hh&amp;lt;/tt&amp;gt; is a direct write to the ADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt; is a direct write to the ADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;jj&amp;lt;/tt&amp;gt; is generally an endless flag, but its operation differs between versions.&lt;br /&gt;
** For V0.0-V4.0a, when this value is non-zero, it causes the SFX to be played endlessly until keyed off or interrupted. It also causes pitch slides to run forever.&lt;br /&gt;
** For V4.0b, this acts as SFX priority. If all four channels are being used for SFX and the priority of the incoming SFX is greater than the SFX currently played, then the SFX is overwritten. The SFX plays forever if this value is greater than &amp;lt;tt&amp;gt;$7F&amp;lt;/tt&amp;gt;, like what is done in V0.0-V4.0a.&lt;br /&gt;
* &amp;lt;tt&amp;gt;kk&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) per step.&lt;br /&gt;
&lt;br /&gt;
===Stop All SFX (Command &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops all SFX from playing in channels 5-8.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at maximum tempo... which means every ten timer 0 ticks. This is equivalent to a tempo of 256.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at normal tempo.&lt;br /&gt;
&lt;br /&gt;
===Main &amp;amp; Echo Volume (Command &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V1.0), &amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the MVOLL and MVOLR DSP registers.&lt;br /&gt;
** V2.0 and up may also set the EVOLL and EVOLR DSP registers, but only if echo is supported in that build. It is always scaled by the main volume. The scaler multiplier (actually done with shifts) is as following, sorted by build...&lt;br /&gt;
*** &#039;&#039;Batman: Revenge of the Joker&#039;&#039;: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Dream TV&#039;&#039;: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Gods&#039;&#039; (all builds): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;World Class Rugby&#039;&#039; (Outside of a game): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (Driving): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Cavelem Tribe): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Echo Feedback (Command &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0F xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the EFB DSP register.&lt;br /&gt;
&lt;br /&gt;
This is only ever supported if echo is supported in the ROM. That means only these builds support this command:&lt;br /&gt;
* &#039;&#039;Batman: Revenge of the Joker&#039;&#039;&lt;br /&gt;
* &#039;&#039;Dream TV&#039;&#039;&lt;br /&gt;
* &#039;&#039;Gods&#039;&#039; (all builds)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (Outside of a game)&lt;br /&gt;
* &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (Driving)&lt;br /&gt;
* &#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Cavelem Tribe)&lt;br /&gt;
&lt;br /&gt;
These other games have a reference for the ID, but effectively make it a NOP:&lt;br /&gt;
* &#039;&#039;Battle Cars&#039;&#039;&lt;br /&gt;
* &#039;&#039;Riddick Bowe Boxing/Chavez&#039;&#039; (all versions except Japanese)&lt;br /&gt;
* &#039;&#039;Shaq-Fu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Go to IPL Boot Program (Command &amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
Jumps directly to the [[SPC700/IPL ROM|IPL Boot Program]].&lt;br /&gt;
&lt;br /&gt;
===Set Tempo (Command &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; (V2.1-V2.2, V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$11 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the tempo to set the song at. This overwrites the song&#039;s tempo settings.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
===Set SFX Volume (Command &amp;lt;tt&amp;gt;$12-$19&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii ?? xy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Michael Jordan Chaos in the Windy City&#039;&#039; &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Set SFX Pitch (Command &amp;lt;tt&amp;gt;$1A-$21&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; overwrites the PITCHL value used in the SFX data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; overwrites the PITCHH value used in the SFX data.&lt;br /&gt;
&lt;br /&gt;
This command is only supported in the following builds...&lt;br /&gt;
* &#039;&#039;Battle Cars&#039;&#039;&lt;br /&gt;
* &#039;&#039;World Cup Striker&#039;&#039; (European version) (Title Screen)&lt;br /&gt;
* &#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; (European version) (In-Game)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (beta) (In-Game)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (beta) (Title Screen)&lt;br /&gt;
* &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (beta)&lt;br /&gt;
* &#039;&#039;Shaq-Fu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Not all IDs are supported in these builds...&lt;br /&gt;
* &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (In-Game) &#039;&#039;(does not support $1A-$1D, not even in the code)&#039;&#039;&lt;br /&gt;
* &#039;&#039;World Cup Striker (Japanese)&#039;&#039; (In-Game) &#039;&#039;(skips over $1A-$1D via a longer branding distance, though the code still exists)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; (V4.0a), &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Loads new data from the SNES using an IPL Boot ROM variant.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol should be nearly identical to IPL Boot ROM with a few differences or so, since the program seems like it&#039;s using a similar variant)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Stop Music &amp;amp; Load New Data (Command &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops the music, then loads new data from the SNES using an IPL Boot ROM variant.&lt;br /&gt;
&lt;br /&gt;
===Panning Separation (Command &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0C xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; sets the amount that the panning will influence the left and right volumes. The maximum is zero, while the minimum is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;, making it effectively mono.&lt;br /&gt;
&lt;br /&gt;
==Song Entry==&lt;br /&gt;
For each song entry in an array of song definitions, one byte is defined as a starting tempo, followed by a series of pointers defined [[little endian]] style for each channel. For &#039;&#039;Dream TV&#039;&#039; Beta and &#039;&#039;Kick Off&#039;&#039;, only five pointers are defined. For &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;, only six pointers are defined. For all other games, eight pointers are defined.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (&#039;&#039;Dream TV Beta&#039;&#039; and &#039;&#039;Kick Off&#039;&#039;)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee ff ff&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting tempo.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. &#039;&#039;(&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; only pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff ff&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Three builds don&#039;t support song entries at all:&lt;br /&gt;
* The opening logos for &#039;&#039;Lemmings 2: The Tribes&#039;&#039; and &#039;&#039;Apocalypse II&#039;&#039;&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; Beta (In-Game)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;World Class Rugby&#039;&#039; (During a game) also doesn&#039;t support the music format at all since the code was removed.&lt;br /&gt;
&lt;br /&gt;
==Pattern Order List==&lt;br /&gt;
Each channel has a list of [[little endian]] pointers on a per-channel basis. If the pointer is zero, then you jump back to either the beginning of the pattern order list for that channel, or to the loop marker that was set by the $F5 VCMD.&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format at V0.0 is N-SPC/Kankichi-kun compatible minus noise support for SRCN values above 127. Post V1.0, one of the bytes loses its usage.&lt;br /&gt;
&lt;br /&gt;
The instrument format is defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0-V1.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz ?? bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register... but only for V1.0 and older. Otherwise, it&#039;s an unused byte.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt; || Note || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;%011xxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt; || Note Length || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Instant Pitch Change to Note || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0a only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Set Main Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0b only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Volume Scaler by Fraction ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Set ADSR ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Fine Tune ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Pitch Bend ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Pitch Envelope ID ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || L/R Voice Volume ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt; || Tempo ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt; || Jump to Pattern in Order List + Mark Loop Point ||&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt; || Key Off || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt; || One Note Delay || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt; || Instrument ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt; || Absolute Global Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt; || Absolute Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt; || Song End || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Pattern End || || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMDs &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (pre-V4.0), &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; (pre-V3.0), &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; (pre-V2.0), &amp;lt;tt&amp;gt;$F0-$F1&amp;lt;/tt&amp;gt; (pre-V1.0))===&lt;br /&gt;
The sound driver deliberately freezes itself via an infinite branch always loop rather than crashing or skipping the byte. This also takes up VCMD slots that are not filled in earlier versions.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMDs &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
The initial pitch of the note is calculated using a pitch table that contains one octave (and a note)&#039;s worth of pitch values. This value is shifted according to the octave used, and multiplied that by the instrument&#039;s pitch base to get the pitch for the note.&lt;br /&gt;
&lt;br /&gt;
===Note Length (VCMDs &amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%011xxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; represents your note length (as five bits).&lt;br /&gt;
Note lengths are defined as the number of tempo ticks plus one. Notes are keyed off either on another note or on the key off VCMD (&amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Instant Pitch Change to Note (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0a))===&lt;br /&gt;
Requires V4.0a to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the note to change the pitch to.&lt;br /&gt;
&lt;br /&gt;
===Set Main Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Requires V4.0b to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the value to directly write to the MVOL DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Volume Scaler by Fraction (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V3.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the numerator, and is the value to multiply the volume by. The scaling process is skipped if this is zero.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the denominator, and is the value to divide the multiplied volume by.&lt;br /&gt;
Put the two together, and you get the current volume multiplied by &amp;lt;math&amp;gt;\frac{x}{y}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Set ADSR (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V2.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Pitch Bend (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
Pitch bends are performed every 10 timer 0 ticks independently of the tempo. They are automatically terminated after one note.&lt;br /&gt;
&lt;br /&gt;
===Pitch Envelope ID (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an index to an array to a pointer of pitch envelopes. The pitch envelopes always loop and are clocked at a rate of 10 timer 0 ticks independently of the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
====Pitch Envelope Format====&lt;br /&gt;
=====Pitch Offset Tick (CMD &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$81-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed offset in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
=====Restart Pitch Envelope (CMD &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;$80&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jumps back to the beginning of the pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===L/R Voice Volume (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F3 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This is a direct DSP register write to the VxVOL registers, with &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; being the left volume and &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; being the right volume.&lt;br /&gt;
This VCMD&#039;s operation changes depending on the version:&lt;br /&gt;
* V0.0-V2.2: Just a straight write with no modifications made to the input.&lt;br /&gt;
* V2.3: The input values are shifted left once.&lt;br /&gt;
* V3.0-V4.0b: The input values are scaled by VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;, then shifted left once.&lt;br /&gt;
* V4.0a: The input values are scaled by the values used for VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;. The shifting operation is not done here.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as &amp;lt;math&amp;gt;10*\frac{256}{x}&amp;lt;/math&amp;gt; timer 0 ticks. Zero freezes the song except for pitch bends and envelopes, which are not affected by the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
===Jump to Pattern in Order List + Mark Loop Point (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern pointer in the order list. The loop point is marked here.&lt;br /&gt;
&lt;br /&gt;
===Key Off (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===One Note Delay (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Absolute Global Transposition (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for all channels for the music.&lt;br /&gt;
Global transpsition is not applied to channel 4 for V0.0-2.1.&lt;br /&gt;
&lt;br /&gt;
===Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FC xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for the channel.&lt;br /&gt;
&lt;br /&gt;
===Song End (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Terminates the song for all of the channels.&lt;br /&gt;
&lt;br /&gt;
===Pattern End (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Ends the pattern and goes to the pattern order list to fetch another pattern.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine&amp;diff=13830</id>
		<title>N-SPC Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine&amp;diff=13830"/>
		<updated>2024-01-09T19:48:37Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Caught a typo in Hong Kong &amp;#039;97 with its ID of the ESA DSP register. The other SM Choukyoushi Hitomi games are not affected.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nintendo SPC Sound Engine&#039;&#039;&#039;, abbreviated N-SPC and officially known as Kankichi-kun [http://vgmpf.com/Wiki/index.php?title=Kankichi-kun], is the most common sound engine used in all of the SNES/SFC games. Only the music portion was initially provided in the source code included in the IS-Sound unit along with some templating for a protocol for music and sound effects [https://www.retroreversing.com/super-famicom-snes-development-kit/#intelligent-systems-shvc-development-system]: usually it was modified by developers on an individual basis, resulting in many different variants, some of them more heavily modifying the sound driver than others. Usually what was added on was sound effect support, but sometimes the music VCMDs were modified as well.&lt;br /&gt;
&lt;br /&gt;
The following games are purely based off of the source code provided with the IS-Sound unit, and are either unmodified or barely modified, if at all:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Hong Kong &#039;97&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0F800A&amp;lt;/tt&amp;gt; (both versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi - Bangai Hen&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 2&#039;&#039; Trial Version || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 2&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x03801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 2 Remix&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; Trial Version || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x018058&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; (Alt 1) || &amp;lt;tt&amp;gt;0x0DF0&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D30&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x018076&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Wheel of Fortune - Deluxe Edition&#039;&#039; &#039;&#039;(unused)&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01D842&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Of the games listed here, three of them are very minor edits...&lt;br /&gt;
* &#039;&#039;Hong Kong &#039;97&#039;&#039; has a typo in the ESA DSP register setup due to using register ID $FE instead of $6D that is not present in the others.&lt;br /&gt;
* &#039;&#039;Wheel of Fortune - Deluxe Edition&#039;&#039;&#039;s build is unused and is missing an opcode near the *Ver S1.20* string. In addition, that section is actually unused, because instead new code at $0700 is used to substitute for this one... which happens to be an exact match to the original IPL Boot ROM.&lt;br /&gt;
* &#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; (Alt 1)&#039;s program starts with a JMP opcode, and contains a NOP between the first and second opcodes of the actual program.&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
NOTE: This is not representative of every single variant. Instead, it represents the collection of commands from the source code included in the IS-Sound unit, which in turn may be carried over to most variants.&lt;br /&gt;
&lt;br /&gt;
The only register that is used for communication in the source build is $2140 (SNES side)/$F4 (SPC side), except for the load command. Other registers are not even read from, though the code itself sets up the framework to do so.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
&amp;lt;pre&amp;gt;xx ?? ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the currently piece of music playing. It takes a couple of tempo ticks for this to echo back after initializing the music.&lt;br /&gt;
&lt;br /&gt;
===Command IDs===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Stop Music || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;xx ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$F0 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$F1 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$FF ?? xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Stop Music (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Initializes an invalid phrase pointer, then stops the previous piece of music. This is not compatible with the resume command, as it is irrevocable, unlike the other one.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music by the ID specified in the command.&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Jumps to a modified copy of the IPL Boot ROM (except for Wheel of Fortune - Deluxe Edition, where there is an opcode missing, the jump location is different, and it contains an exact copy of the IPL Boot ROM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol is nearly identical to IPL Boot ROM, with a couple of differences)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format is most commonly defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this....&lt;br /&gt;
&amp;lt;pre&amp;gt;%xyyyyyyy zz aa bb cc dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; is a [[S-DSP/Noise|noise clock]] switch.&lt;br /&gt;
** If set, noise is used and &amp;lt;tt&amp;gt;%??yyyyy&amp;lt;/tt&amp;gt; represents the noise clock rate.&lt;br /&gt;
** If cleared, &amp;lt;tt&amp;gt;%0yyyyyyy&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Phrase Format==&lt;br /&gt;
Song entries, stored as [[little endian]] pointers, point to a list of phrases for the song to play.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt; || End of Song ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%0xxxxxxx $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$7F $00&amp;lt;/tt&amp;gt;|| Jump x Times || &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80 $00&amp;lt;/tt&amp;gt; || Fast Forward On ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$81 $00&amp;lt;/tt&amp;gt; || Fast Forward Off ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%1??????? $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$82-$FF $00&amp;lt;/tt&amp;gt; || Always Jump || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || Play Pattern || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Play Pattern===&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a set of eight pointers to track data, one for each channel.&lt;br /&gt;
&lt;br /&gt;
====Pattern Entry Format====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. If the pointer is zero, there is no track data.&lt;br /&gt;
&lt;br /&gt;
===End of Song (Command &amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$00 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Terminates the song.&lt;br /&gt;
&lt;br /&gt;
===Jump x Times (Command &amp;lt;tt&amp;gt;$00 $01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx $00 yy yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; is the number of times to jump.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$00 $80&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$80 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fast Forward causes the song to stop playing and the player rapidly progresses throughout the song. Thus, this can effectively act as a skip.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$00 $81&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$81 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Disables Fast Forward and continues playing the song normally.&lt;br /&gt;
&lt;br /&gt;
===Always Jump (Command &amp;lt;tt&amp;gt;$00 $82-$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%1??????? $00 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only executes if the fast forward commands are not triggered.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
NOTE: This is not representative of every single variant. Instead, it represents the collection of VCMDs from the source code included in the IS-Sound unit, which in turn is carried over to most variants.&lt;br /&gt;
&lt;br /&gt;
{{N-SPC VCMD Set Table}}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Crashes the sound driver due to being outside of the array of pointers, and thus jumping to an invalid pointer.&lt;br /&gt;
&lt;br /&gt;
===NOP (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Reads two bytes, then does absolutely nothing with the command.&lt;br /&gt;
&lt;br /&gt;
===Phrase Termination/End of Subroutine (VCMD &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
This VCMD&#039;s operation depends on whether or not it is inside a subroutine or not.&lt;br /&gt;
If it is inside a subroutine, it exits the subroutine and song execution continues.&lt;br /&gt;
Otherwise, the phrase is terminated. This affects &#039;&#039;all&#039;&#039; channels in the music: any other channels still playing are interrupted.&lt;br /&gt;
&lt;br /&gt;
===Note Duration (VCMD &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx (%0yyyzzzz)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; represents your note length (as seven bits) in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyy&amp;lt;/tt&amp;gt;, if the highest bit of the byte is not set, defines the quantization. It is an index value to a table of values that indicate, in 256ths, how far along the note to play before keying it off. This table can vary on a per-game basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%zzzz&amp;lt;/tt&amp;gt;, which is only defined if the highest bit of the byte is not set, defines the velocity. It is an index to a table of values that indicate the volume in a decibel-like number (due to the final volume calculation being multiplied by itself at the end). This table can vary on a per-game basis.&lt;br /&gt;
&lt;br /&gt;
Notes and/or special VCMDs, by default, are forced after the parameter byte is read. Attempting to use &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt; again results in an invalid note.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMD &amp;lt;tt&amp;gt;$80-$C7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Tie (VCMD &amp;lt;tt&amp;gt;$C8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Continues playing the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Rest (VCMD &amp;lt;tt&amp;gt;$C9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Percussion (VCMD &amp;lt;tt&amp;gt;$CA-$DF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a percussion note.&lt;br /&gt;
&lt;br /&gt;
By default, percussion uses the same instrument set as the song, and all percussion is keyed on with a note of &amp;lt;tt&amp;gt;$A4&amp;lt;/tt&amp;gt;.&lt;br /&gt;
The starting ID to use for all channels can be redefined by VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Panning (VCMD &amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E1 %xy?zzzzz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; defines a phase inversion switch for the left channel.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%y&amp;lt;/tt&amp;gt; defines a phase inversion switch for the right channel.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%zzzzz&amp;lt;/tt&amp;gt; is five bits for the panning. This refers to an array of values to multiply the volume by after calculating the voice volume via various other parameters set by the VCMDs. Under normal circumstances, center is defined as &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; and the maximum value is &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Panning Fade (VCMD &amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E2 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target pan value. Phase inversion is &#039;&#039;not&#039;&#039; taken into account here, thus only the low five bits should be used here.&lt;br /&gt;
&lt;br /&gt;
===Vibrato On (VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E3 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay the vibrato for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the rate of the vibrato: specifically, how much to change the pitch on a per-tempo tick basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the depth of the vibrato: that is, the maximum pitch offset to use. &amp;lt;tt&amp;gt;$00-$F0&amp;lt;/tt&amp;gt; are normal, but &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; and up act more like said value ANDed by &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; and multiplied by &amp;lt;tt&amp;gt;$0100&amp;lt;/tt&amp;gt;, meaning the highest values have drastic differences compared to the lower ones.&lt;br /&gt;
&lt;br /&gt;
===Vibrato Off (VCMD &amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables vibrato set by VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Song Volume (VCMD &amp;lt;tt&amp;gt;$E5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E5 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the song volume value. This sets the volume for all of the channels in the song. The value used is a decibel-like value due to the final volume being multiplied by itself to get the final result.&lt;br /&gt;
&lt;br /&gt;
===Song Volume Fade (VCMD &amp;lt;tt&amp;gt;$E6&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E6 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target song volume.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$E7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E7 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as one timer 0 tick multiplied by &amp;lt;math&amp;gt;\frac{256}{x}&amp;lt;/math&amp;gt;. Zero freezes the song.&lt;br /&gt;
&lt;br /&gt;
===Tempo Fade (VCMD &amp;lt;tt&amp;gt;$E8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E8 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target tempo.&lt;br /&gt;
&lt;br /&gt;
===Global Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$E9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E9 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed value defining the number of semitones to transpose subsequent notes. Note that this affects all channels, not just one channel.&lt;br /&gt;
&lt;br /&gt;
===Single Channel Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$EA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed value defining the number of semitones to transpose subsequent notes.&lt;br /&gt;
&lt;br /&gt;
===Tremolo On (VCMD &amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EB xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay the tremolo for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the rate of the tremolo: specifically, how much to change the volume on a per-tempo tick basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the depth of the tremolo: that is, the maximum volume offset to use.&lt;br /&gt;
&lt;br /&gt;
===Tremolo Off (VCMD &amp;lt;tt&amp;gt;$EC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables tremolo set by VCMD &amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the volume value. The value used is a decibel-like value due to the final volume being multiplied by itself to get the final result.&lt;br /&gt;
&lt;br /&gt;
===Volume Fade (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target volume.&lt;br /&gt;
&lt;br /&gt;
===Subroutine (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer containing the section of music to play.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of times to loop the sub-routine.&lt;br /&gt;
&lt;br /&gt;
===Vibrato Fade In (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to fade the vibrato for.&lt;br /&gt;
The moment this VCMD is executed, the depth is faded in from zero.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
This VCMD is applied to all subsequent notes until turned off or overwritten.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay before applying the pitch envelope.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a signed offset in semitones to slide the note to.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope From (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
This VCMD is applied to all subsequent notes until turned off or overwritten.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay before applying the pitch envelope.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a signed offset in semitones to slide the note from: that is, unlike Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;), this is a starting note offset, rather than an end of pitch envelope note offset.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope Off (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables a pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the amount to shift the pitch up. This is in 256ths of a semitone, albeit done via measuring the distance between note and multiplying it by this value.&lt;br /&gt;
&lt;br /&gt;
===Echo Enable Bits and Volume (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 %xxxxxxxx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxxx&amp;lt;/tt&amp;gt; defines the channels to turn on for the echo (one per bit), which translates to a direct write to the EON DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines a value for EVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines a value for EVOLR DSP register.&lt;br /&gt;
&lt;br /&gt;
===Echo Off (VCMD &amp;lt;tt&amp;gt;$F6&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
This disables echo for &#039;&#039;all&#039;&#039; channels, as well as zeroing out the echo volume and disabling echo writes.&lt;br /&gt;
&lt;br /&gt;
===Echo Parameter Setup (VCMD &amp;lt;tt&amp;gt;$F7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F7 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines a value for the EDL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines a value for the EFB DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines an ID to an array of FIR coefficient values.&lt;br /&gt;
&lt;br /&gt;
===Echo Volume Fade (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F8 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the target value for EVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines the target value for EVOLR DSP register.&lt;br /&gt;
&lt;br /&gt;
===Pitch Slide To Note (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F9 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to delay the slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the target note.&lt;br /&gt;
&lt;br /&gt;
===Percussion Base Instrument ID Redefine (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting instrument ID. Note that this affects all channels.&lt;br /&gt;
&lt;br /&gt;
===Channel Mute (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Causes the channel to not key on subsequent notes.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (VCMD &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Fast Forward causes the song to stop playing and the player rapidly progresses throughout the song. Thus, this can effectively act as a skip.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables Fast Forward and continues playing the song normally.&lt;br /&gt;
&lt;br /&gt;
==Variants==&lt;br /&gt;
===Shijou Saikyou no Quiz Ou Ketteisen Super===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Shijou Saikyou no Quiz Ou Ketteisen Super&#039;&#039; || &amp;lt;tt&amp;gt;0x0DF7&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D37&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x038062&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x04805C&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x058062&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
This is the closest match to a standard source N-SPC/Kankichi build used in a licensed game. This is because the only modifications made to it are to echo what was sent to any register to $2141/$F5 (although in practice only $2140/$F4 is read from, thus de facto giving it the same output, otherwise it would be cycling between the last register read code-wise as output) and zero out both $2140/$F4 and $2141/$F5 when the song is done playing when a zero pointer is read from a phase.&lt;br /&gt;
&lt;br /&gt;
====Output to the SNES====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the currently piece of music playing. It takes a couple of tempo ticks for this to echo back after initializing the music.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a de-facto mirror of &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; output-wise. The feedback is a little faster, though, since the output is immediately upon $2140/$F4 being read, rather than when the music is initialized.&lt;br /&gt;
&lt;br /&gt;
===Controller Test/World Class Service Super Nintendo Tester===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Controller Test || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x009319&amp;lt;/tt&amp;gt; (Controller Test Cassette)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x00BFFF&amp;lt;/tt&amp;gt; (SNES Burn-In Test Cartridge)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x00D8D2&amp;lt;/tt&amp;gt; (World Class Service Super Nintendo Tester &#039;&#039;(not used)&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| World Class Service Super Nintendo Tester &#039;&#039;(only build used across all tests)&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0B8068&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
These two sound driver builds (the one for the controller test being found in three different known testing cartridges, with one of them not used) merely have code optimizations in their sound code, thus making them completely identical execution-wise to the source build variant. In addition, the build used for World Class Service Super Nintendo Tester adds a BMI opcode in a readahead routine, but is otherwise identical.&lt;br /&gt;
&lt;br /&gt;
===Subpages===&lt;br /&gt;
{{Subpages}}&lt;br /&gt;
&lt;br /&gt;
Not created yet...&lt;br /&gt;
* [[N-SPC Engine/64WD Creation|64WD Creation]]&lt;br /&gt;
* [[N-SPC Engine/Advance Communication|Advance Communication]]&lt;br /&gt;
* [[N-SPC Engine/Aisystem Tokyo|Aisystem Tokyo]]&lt;br /&gt;
* [[N-SPC Engine/Argonaut|Argonaut]]&lt;br /&gt;
* [[N-SPC Engine/Axes Art Amuse|Axes Art Amuse]]&lt;br /&gt;
* [[N-SPC Engine/Bit Managers|Bit Managers]]&lt;br /&gt;
* [[N-SPC Engine/Capcom|Capcom]]&lt;br /&gt;
* [[N-SPC Engine/Chatnoir|Chatnoir]]&lt;br /&gt;
* [[N-SPC Engine/Chip Level Designs|Chip Level Designs]]&lt;br /&gt;
* [[N-SPC Engine/CP.BRAiN|CP.BRAiN]]&lt;br /&gt;
* [[N-SPC Engine/Cream|Cream]]&lt;br /&gt;
* [[N-SPC Engine/Crosstalk|Crosstalk]]&lt;br /&gt;
* [[N-SPC Engine/Cube|Cube]]&lt;br /&gt;
* [[N-SPC Engine/CUE|CUE]]&lt;br /&gt;
* [[N-SPC Engine/Culture Brain|Culture Brain]]&lt;br /&gt;
* [[N-SPC Engine/Daft|Daft]]&lt;br /&gt;
* [[N-SPC Engine/Data East|Data East]]&lt;br /&gt;
* [[N-SPC Engine/EJ Corporation|EJ Corporation]]&lt;br /&gt;
* [[N-SPC Engine/Electronic Arts|Electronic Arts]]&lt;br /&gt;
* [[N-SPC Engine/Falcom|Falcom]]&lt;br /&gt;
* [[N-SPC Engine/Funcom|Funcom]]&lt;br /&gt;
* [[N-SPC Engine/Gremlin|Gremlin]]&lt;br /&gt;
* [[N-SPC Engine/HAL|HAL]]&lt;br /&gt;
* [[N-SPC Engine/Hanari Exp|Hanari Exp]]&lt;br /&gt;
* [[N-SPC Engine/Hect|Hect]]&lt;br /&gt;
* [[N-SPC Engine/Hikoshi Hashimoto|Hikoshi Hashimoto]]&lt;br /&gt;
* [[N-SPC Engine/Home Data|Home Data]]&lt;br /&gt;
* [[N-SPC Engine/Human (earlier)|Human (earlier)]]&lt;br /&gt;
* [[N-SPC Engine/Human|Human]]&lt;br /&gt;
* [[N-SPC Engine/Imagesoft|Imagesoft]]&lt;br /&gt;
* [[N-SPC Engine/Infogrames|Infogrames]]&lt;br /&gt;
* [[N-SPC Engine/Intelligent Systems|Intelligent Systems]]&lt;br /&gt;
* [[N-SPC Engine/Japan Art Media|Japan Art Media]]&lt;br /&gt;
* [[N-SPC Engine/Jorudan|Jorudan]]&lt;br /&gt;
* [[N-SPC Engine/Kazuo Sawa|Kazuo Sawa]]&lt;br /&gt;
* [[N-SPC Engine/Kennosuke Suemura|Kennosuke Suemura]]&lt;br /&gt;
* [[N-SPC Engine/Khaos|Khaos]]&lt;br /&gt;
* [[N-SPC Engine/Koei|Koei]]&lt;br /&gt;
* [[N-SPC Engine/Konami|Konami]]&lt;br /&gt;
* [[N-SPC Engine/LaserSoft|LaserSoft]]&lt;br /&gt;
* [[N-SPC Engine/Make Software|Make Software]]&lt;br /&gt;
* [[N-SPC Engine/Metro|Metro]]&lt;br /&gt;
* [[N-SPC Engine/Mitsuhito Tanaka|Mitsuhito Tanaka]]&lt;br /&gt;
* [[N-SPC Engine/Monolith|Monolith]]&lt;br /&gt;
* [[N-SPC Engine/MSQ|MSQ]]&lt;br /&gt;
* [[N-SPC Engine/Namco|Namco]]&lt;br /&gt;
* [[N-SPC Engine/Naohisa Morota|Naohisa Morota]]&lt;br /&gt;
* [[N-SPC Engine/Natsume|Natsume]]&lt;br /&gt;
* [[N-SPC Engine/Nichibutsu or Make Software|Nichibutsu/Make Software]] (NOTE: Refers to three of the Super Nichibutsu Mahjong games)&lt;br /&gt;
* [[N-SPC Engine/Nova|Nova]]&lt;br /&gt;
* [[N-SPC Engine/Ocean|Ocean]]&lt;br /&gt;
* [[N-SPC Engine/Pure Sound|Pure Sound]]&lt;br /&gt;
* [[N-SPC Engine/Quest|Quest]]&lt;br /&gt;
* [[N-SPC Engine/Quintet|Quintet]]&lt;br /&gt;
* [[N-SPC Engine/Robert C. Ashworth|Robert C. Ashworth]]&lt;br /&gt;
* [[N-SPC Engine/Sakata SAS|Sakata SAS]]&lt;br /&gt;
* [[N-SPC Engine/Saurus|Saurus]]&lt;br /&gt;
* [[N-SPC Engine/Sunsoft|Sunsoft]]&lt;br /&gt;
* [[N-SPC Engine/Syscom|Syscom]]&lt;br /&gt;
* [[N-SPC Engine/System Sacom|System Sacom]]&lt;br /&gt;
* [[N-SPC Engine/Systemsoft|Systemsoft]]&lt;br /&gt;
* [[N-SPC Engine/T&#039;s Music|T&#039;s Music]]&lt;br /&gt;
* [[N-SPC Engine/TamTam|TamTam]]&lt;br /&gt;
* [[N-SPC Engine/Team X-Fade|Team X-Fade]]&lt;br /&gt;
* [[N-SPC Engine/Technos Japan|Technos Japan]]&lt;br /&gt;
* [[N-SPC Engine/Technosoft|Technosoft]]&lt;br /&gt;
* [[N-SPC Engine/Tecmo|Tecmo]]&lt;br /&gt;
* [[N-SPC Engine/Tose|Tose]]&lt;br /&gt;
* [[N-SPC Engine/Tsukasa Masuko|Tsukasa Masuko]]&lt;br /&gt;
* [[N-SPC Engine/Virgin|Virgin]]&lt;br /&gt;
* [[N-SPC Engine/Wave|Wave]]&lt;br /&gt;
* [[N-SPC Engine/Yoshikazu Yao|Yoshikazu Yao]]&lt;br /&gt;
* [[N-SPC Engine/Yoshiyuki Ishii|Yoshiyuki Ishii]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO: There are a lot of variants... these will be split into sub-pages depending on the modifications made&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
* [http://vgmpf.com/Wiki/index.php?title=Kankichi-kun Video Game Music Preservation Foundation - Kankichi-kun]&lt;br /&gt;
* [https://www.retroreversing.com/super-famicom-snes-development-kit/#intelligent-systems-shvc-development-system Retro Reversing - SNES (Super Famicom) Development Kit Hardware - Intelligent Systems SHVC Development System]&lt;br /&gt;
* [https://wiki.superfamicom.org/nintendo-music-format-(n-spc) Super Famicom Wiki - N-SPC]&lt;br /&gt;
* [http://gdri.smspower.org/wiki/index.php/Super_Famicom/Super_NES_Sound_Driver_List GDRI - Super Famicom/Super NES Sound Driver List]&lt;br /&gt;
* [https://github.com/vgmtrans/vgmtrans/issues/173 Github - N-SPC VCMD $FB-$FE identifications]&lt;br /&gt;
* [https://archive.org/details/GameBoyProgManVer1.1/page/n187/mode/2up Game Boy Development Manual - Super Game Boy Sound] (see pages 187-213)&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Sound_Module_and_Burn-In_Test&amp;diff=13815</id>
		<title>N-SPC Engine/Nintendo/Sound Module and Burn-In Test</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Sound_Module_and_Burn-In_Test&amp;diff=13815"/>
		<updated>2024-01-09T03:11:58Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Adding a stub marker citing the under construction nature of this page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Go back to [[N-SPC Engine/Nintendo]]&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sound Module and Burn-In Test&#039;&#039;&#039; refers to a unique N-SPC/Kankichi-kun build created for testing the SPC700 hardware used in at least two different test cartridges.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Aging Cassette/Sound Module and Burn-In Test || &amp;lt;tt&amp;gt;0x0EE9&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0E29&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0380BA&amp;lt;/tt&amp;gt; (Aging Cassette)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x038792&amp;lt;/tt&amp;gt; (SNES Burn-In Test Cartridge)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Nintendo/Build Sorting|here]] for all variants by Nintendo.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Phrase Termination/End of Subroutine ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; || Note Duration || &amp;lt;tt&amp;gt;(xy)&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80-$C7&amp;lt;/tt&amp;gt; || Note || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$C8&amp;lt;/tt&amp;gt; || Tie || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$C9&amp;lt;/tt&amp;gt; || Rest || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$CA-$DD&amp;lt;/tt&amp;gt; || Percussion || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DE&amp;lt;/tt&amp;gt; || Instrument || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DF&amp;lt;/tt&amp;gt; || Panning  || &amp;lt;tt&amp;gt;%xyzzzzz&amp;lt;/tt&amp;gt;  &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt; || Panning Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt; || Vibrato On || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt; || Vibrato Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt; || Song Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt; || Song Volume Fade || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E5&amp;lt;/tt&amp;gt; || Tempo || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E6&amp;lt;/tt&amp;gt; || Tempo Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E7&amp;lt;/tt&amp;gt; || Global Absolute Transposition || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E8&amp;lt;/tt&amp;gt; || Single Channel Absolute Transposition || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E9&amp;lt;/tt&amp;gt; || Tremolo On || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EA&amp;lt;/tt&amp;gt; || Tremolo Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt; || Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EC&amp;lt;/tt&amp;gt; || Volume Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Subroutine || &amp;lt;tt&amp;gt;xx xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Vibrato Fade In || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Note Pitch Envelope To || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Note Pitch Envelope From || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Note Pitch Envelope Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Fine Tune || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || Echo On Bits and Volume || &amp;lt;tt&amp;gt;%xxxxxxxx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt; || Echo Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt; || Echo Parameter Setup || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F6&amp;lt;/tt&amp;gt; || Echo Volume Fade || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F7&amp;lt;/tt&amp;gt; || Pitch Slide to Note || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt; || Percussion Patch Base Redefine || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt; || Channel Mute ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt; || Fast Forward On || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt; || Fast Forward Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt; || Main Volume Fade || xx yy&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt; || Mute Right Main Volume || xx&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Noise Clock || %???xxxxx&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;TODO use template for the above table for standard VCMDs&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO VCMD documentation via templating&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO new music VCMDs (the standard set is offset backwards by two IDs, and three new VCMDs are added on)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
All of the commands used are identical to the source N-SPC/Kankichi set with a set of new commands&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Stop Music || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;xx ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; || Run All Tests || &amp;lt;tt&amp;gt;$80 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$90&amp;lt;/tt&amp;gt; || Memory Write Test || &amp;lt;tt&amp;gt;$90 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$91&amp;lt;/tt&amp;gt; || &#039;&#039;TODO identify test&#039;&#039; || &amp;lt;tt&amp;gt;$91 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$92&amp;lt;/tt&amp;gt; || &#039;&#039;TODO identify test&#039;&#039; || &amp;lt;tt&amp;gt;$92 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$93&amp;lt;/tt&amp;gt; || &#039;&#039;TODO identify test&#039;&#039; || &amp;lt;tt&amp;gt;$93 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$F0 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$F1 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$FF ?? xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;TODO new commands&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;br /&gt;
[[Category:N-SPC Variants]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine&amp;diff=13814</id>
		<title>N-SPC Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine&amp;diff=13814"/>
		<updated>2024-01-09T03:10:57Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Corrected an error on bit notes for Panning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nintendo SPC Sound Engine&#039;&#039;&#039;, abbreviated N-SPC and officially known as Kankichi-kun [http://vgmpf.com/Wiki/index.php?title=Kankichi-kun], is the most common sound engine used in all of the SNES/SFC games. Only the music portion was initially provided in the source code included in the IS-Sound unit along with some templating for a protocol for music and sound effects [https://www.retroreversing.com/super-famicom-snes-development-kit/#intelligent-systems-shvc-development-system]: usually it was modified by developers on an individual basis, resulting in many different variants, some of them more heavily modifying the sound driver than others. Usually what was added on was sound effect support, but sometimes the music VCMDs were modified as well.&lt;br /&gt;
&lt;br /&gt;
The following games are purely based off of the source code provided with the IS-Sound unit, and are either unmodified or barely modified, if at all:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Hong Kong &#039;97&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0F800A&amp;lt;/tt&amp;gt; (both versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi - Bangai Hen&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 2&#039;&#039; Trial Version || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 2&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x03801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 2 Remix&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; Trial Version || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x018058&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; (Alt 1) || &amp;lt;tt&amp;gt;0x0DF0&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D30&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x018076&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Wheel of Fortune - Deluxe Edition&#039;&#039; &#039;&#039;(unused)&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01D842&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Of the games listed here, two of them are very minor edits...&lt;br /&gt;
* &#039;&#039;Wheel of Fortune - Deluxe Edition&#039;&#039;&#039;s build is unused and is missing an opcode near the *Ver S1.20* string. In addition, that section is actually unused, because instead new code at $0700 is used to substitute for this one... which happens to be an exact match to the original IPL Boot ROM.&lt;br /&gt;
* &#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; (Alt 1)&#039;s program starts with a JMP opcode, and contains a NOP between the first and second opcodes of the actual program.&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
NOTE: This is not representative of every single variant. Instead, it represents the collection of commands from the source code included in the IS-Sound unit, which in turn may be carried over to most variants.&lt;br /&gt;
&lt;br /&gt;
The only register that is used for communication in the source build is $2140 (SNES side)/$F4 (SPC side), except for the load command. Other registers are not even read from, though the code itself sets up the framework to do so.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
&amp;lt;pre&amp;gt;xx ?? ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the currently piece of music playing. It takes a couple of tempo ticks for this to echo back after initializing the music.&lt;br /&gt;
&lt;br /&gt;
===Command IDs===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Stop Music || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;xx ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$F0 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$F1 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$FF ?? xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Stop Music (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Initializes an invalid phrase pointer, then stops the previous piece of music. This is not compatible with the resume command, as it is irrevocable, unlike the other one.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music by the ID specified in the command.&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Jumps to a modified copy of the IPL Boot ROM (except for Wheel of Fortune - Deluxe Edition, where there is an opcode missing, the jump location is different, and it contains an exact copy of the IPL Boot ROM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol is nearly identical to IPL Boot ROM, with a couple of differences)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format is most commonly defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this....&lt;br /&gt;
&amp;lt;pre&amp;gt;%xyyyyyyy zz aa bb cc dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; is a [[S-DSP/Noise|noise clock]] switch.&lt;br /&gt;
** If set, noise is used and &amp;lt;tt&amp;gt;%??yyyyy&amp;lt;/tt&amp;gt; represents the noise clock rate.&lt;br /&gt;
** If cleared, &amp;lt;tt&amp;gt;%0yyyyyyy&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Phrase Format==&lt;br /&gt;
Song entries, stored as [[little endian]] pointers, point to a list of phrases for the song to play.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt; || End of Song ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%0xxxxxxx $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$7F $00&amp;lt;/tt&amp;gt;|| Jump x Times || &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80 $00&amp;lt;/tt&amp;gt; || Fast Forward On ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$81 $00&amp;lt;/tt&amp;gt; || Fast Forward Off ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%1??????? $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$82-$FF $00&amp;lt;/tt&amp;gt; || Always Jump || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || Play Pattern || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Play Pattern===&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a set of eight pointers to track data, one for each channel.&lt;br /&gt;
&lt;br /&gt;
====Pattern Entry Format====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. If the pointer is zero, there is no track data.&lt;br /&gt;
&lt;br /&gt;
===End of Song (Command &amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$00 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Terminates the song.&lt;br /&gt;
&lt;br /&gt;
===Jump x Times (Command &amp;lt;tt&amp;gt;$00 $01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx $00 yy yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; is the number of times to jump.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$00 $80&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$80 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fast Forward causes the song to stop playing and the player rapidly progresses throughout the song. Thus, this can effectively act as a skip.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$00 $81&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$81 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Disables Fast Forward and continues playing the song normally.&lt;br /&gt;
&lt;br /&gt;
===Always Jump (Command &amp;lt;tt&amp;gt;$00 $82-$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%1??????? $00 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only executes if the fast forward commands are not triggered.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
NOTE: This is not representative of every single variant. Instead, it represents the collection of VCMDs from the source code included in the IS-Sound unit, which in turn is carried over to most variants.&lt;br /&gt;
&lt;br /&gt;
{{N-SPC VCMD Set Table}}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Crashes the sound driver due to being outside of the array of pointers, and thus jumping to an invalid pointer.&lt;br /&gt;
&lt;br /&gt;
===NOP (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Reads two bytes, then does absolutely nothing with the command.&lt;br /&gt;
&lt;br /&gt;
===Phrase Termination/End of Subroutine (VCMD &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
This VCMD&#039;s operation depends on whether or not it is inside a subroutine or not.&lt;br /&gt;
If it is inside a subroutine, it exits the subroutine and song execution continues.&lt;br /&gt;
Otherwise, the phrase is terminated. This affects &#039;&#039;all&#039;&#039; channels in the music: any other channels still playing are interrupted.&lt;br /&gt;
&lt;br /&gt;
===Note Duration (VCMD &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx (%0yyyzzzz)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; represents your note length (as seven bits) in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyy&amp;lt;/tt&amp;gt;, if the highest bit of the byte is not set, defines the quantization. It is an index value to a table of values that indicate, in 256ths, how far along the note to play before keying it off. This table can vary on a per-game basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%zzzz&amp;lt;/tt&amp;gt;, which is only defined if the highest bit of the byte is not set, defines the velocity. It is an index to a table of values that indicate the volume in a decibel-like number (due to the final volume calculation being multiplied by itself at the end). This table can vary on a per-game basis.&lt;br /&gt;
&lt;br /&gt;
Notes and/or special VCMDs, by default, are forced after the parameter byte is read. Attempting to use &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt; again results in an invalid note.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMD &amp;lt;tt&amp;gt;$80-$C7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Tie (VCMD &amp;lt;tt&amp;gt;$C8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Continues playing the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Rest (VCMD &amp;lt;tt&amp;gt;$C9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Percussion (VCMD &amp;lt;tt&amp;gt;$CA-$DF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a percussion note.&lt;br /&gt;
&lt;br /&gt;
By default, percussion uses the same instrument set as the song, and all percussion is keyed on with a note of &amp;lt;tt&amp;gt;$A4&amp;lt;/tt&amp;gt;.&lt;br /&gt;
The starting ID to use for all channels can be redefined by VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Panning (VCMD &amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E1 %xy?zzzzz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; defines a phase inversion switch for the left channel.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%y&amp;lt;/tt&amp;gt; defines a phase inversion switch for the right channel.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%zzzzz&amp;lt;/tt&amp;gt; is five bits for the panning. This refers to an array of values to multiply the volume by after calculating the voice volume via various other parameters set by the VCMDs. Under normal circumstances, center is defined as &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; and the maximum value is &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Panning Fade (VCMD &amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E2 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target pan value. Phase inversion is &#039;&#039;not&#039;&#039; taken into account here, thus only the low five bits should be used here.&lt;br /&gt;
&lt;br /&gt;
===Vibrato On (VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E3 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay the vibrato for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the rate of the vibrato: specifically, how much to change the pitch on a per-tempo tick basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the depth of the vibrato: that is, the maximum pitch offset to use. &amp;lt;tt&amp;gt;$00-$F0&amp;lt;/tt&amp;gt; are normal, but &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; and up act more like said value ANDed by &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; and multiplied by &amp;lt;tt&amp;gt;$0100&amp;lt;/tt&amp;gt;, meaning the highest values have drastic differences compared to the lower ones.&lt;br /&gt;
&lt;br /&gt;
===Vibrato Off (VCMD &amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables vibrato set by VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Song Volume (VCMD &amp;lt;tt&amp;gt;$E5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E5 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the song volume value. This sets the volume for all of the channels in the song. The value used is a decibel-like value due to the final volume being multiplied by itself to get the final result.&lt;br /&gt;
&lt;br /&gt;
===Song Volume Fade (VCMD &amp;lt;tt&amp;gt;$E6&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E6 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target song volume.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$E7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E7 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as one timer 0 tick multiplied by &amp;lt;math&amp;gt;\frac{256}{x}&amp;lt;/math&amp;gt;. Zero freezes the song.&lt;br /&gt;
&lt;br /&gt;
===Tempo Fade (VCMD &amp;lt;tt&amp;gt;$E8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E8 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target tempo.&lt;br /&gt;
&lt;br /&gt;
===Global Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$E9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E9 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed value defining the number of semitones to transpose subsequent notes. Note that this affects all channels, not just one channel.&lt;br /&gt;
&lt;br /&gt;
===Single Channel Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$EA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed value defining the number of semitones to transpose subsequent notes.&lt;br /&gt;
&lt;br /&gt;
===Tremolo On (VCMD &amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EB xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay the tremolo for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the rate of the tremolo: specifically, how much to change the volume on a per-tempo tick basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the depth of the tremolo: that is, the maximum volume offset to use.&lt;br /&gt;
&lt;br /&gt;
===Tremolo Off (VCMD &amp;lt;tt&amp;gt;$EC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables tremolo set by VCMD &amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the volume value. The value used is a decibel-like value due to the final volume being multiplied by itself to get the final result.&lt;br /&gt;
&lt;br /&gt;
===Volume Fade (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target volume.&lt;br /&gt;
&lt;br /&gt;
===Subroutine (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer containing the section of music to play.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of times to loop the sub-routine.&lt;br /&gt;
&lt;br /&gt;
===Vibrato Fade In (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to fade the vibrato for.&lt;br /&gt;
The moment this VCMD is executed, the depth is faded in from zero.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
This VCMD is applied to all subsequent notes until turned off or overwritten.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay before applying the pitch envelope.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a signed offset in semitones to slide the note to.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope From (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
This VCMD is applied to all subsequent notes until turned off or overwritten.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay before applying the pitch envelope.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a signed offset in semitones to slide the note from: that is, unlike Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;), this is a starting note offset, rather than an end of pitch envelope note offset.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope Off (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables a pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the amount to shift the pitch up. This is in 256ths of a semitone, albeit done via measuring the distance between note and multiplying it by this value.&lt;br /&gt;
&lt;br /&gt;
===Echo Enable Bits and Volume (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 %xxxxxxxx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxxx&amp;lt;/tt&amp;gt; defines the channels to turn on for the echo (one per bit), which translates to a direct write to the EON DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines a value for EVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines a value for EVOLR DSP register.&lt;br /&gt;
&lt;br /&gt;
===Echo Off (VCMD &amp;lt;tt&amp;gt;$F6&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
This disables echo for &#039;&#039;all&#039;&#039; channels, as well as zeroing out the echo volume and disabling echo writes.&lt;br /&gt;
&lt;br /&gt;
===Echo Parameter Setup (VCMD &amp;lt;tt&amp;gt;$F7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F7 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines a value for the EDL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines a value for the EFB DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines an ID to an array of FIR coefficient values.&lt;br /&gt;
&lt;br /&gt;
===Echo Volume Fade (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F8 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the target value for EVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines the target value for EVOLR DSP register.&lt;br /&gt;
&lt;br /&gt;
===Pitch Slide To Note (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F9 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to delay the slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the target note.&lt;br /&gt;
&lt;br /&gt;
===Percussion Base Instrument ID Redefine (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting instrument ID. Note that this affects all channels.&lt;br /&gt;
&lt;br /&gt;
===Channel Mute (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Causes the channel to not key on subsequent notes.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (VCMD &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Fast Forward causes the song to stop playing and the player rapidly progresses throughout the song. Thus, this can effectively act as a skip.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables Fast Forward and continues playing the song normally.&lt;br /&gt;
&lt;br /&gt;
==Variants==&lt;br /&gt;
===Shijou Saikyou no Quiz Ou Ketteisen Super===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Shijou Saikyou no Quiz Ou Ketteisen Super&#039;&#039; || &amp;lt;tt&amp;gt;0x0DF7&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D37&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x038062&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x04805C&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x058062&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
This is the closest match to a standard source N-SPC/Kankichi build used in a licensed game. This is because the only modifications made to it are to echo what was sent to any register to $2141/$F5 (although in practice only $2140/$F4 is read from, thus de facto giving it the same output, otherwise it would be cycling between the last register read code-wise as output) and zero out both $2140/$F4 and $2141/$F5 when the song is done playing when a zero pointer is read from a phase.&lt;br /&gt;
&lt;br /&gt;
====Output to the SNES====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the currently piece of music playing. It takes a couple of tempo ticks for this to echo back after initializing the music.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a de-facto mirror of &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; output-wise. The feedback is a little faster, though, since the output is immediately upon $2140/$F4 being read, rather than when the music is initialized.&lt;br /&gt;
&lt;br /&gt;
===Controller Test/World Class Service Super Nintendo Tester===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Controller Test || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x009319&amp;lt;/tt&amp;gt; (Controller Test Cassette)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x00BFFF&amp;lt;/tt&amp;gt; (SNES Burn-In Test Cartridge)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x00D8D2&amp;lt;/tt&amp;gt; (World Class Service Super Nintendo Tester &#039;&#039;(not used)&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| World Class Service Super Nintendo Tester &#039;&#039;(only build used across all tests)&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0B8068&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
These two sound driver builds (the one for the controller test being found in three different known testing cartridges, with one of them not used) merely have code optimizations in their sound code, thus making them completely identical execution-wise to the source build variant. In addition, the build used for World Class Service Super Nintendo Tester adds a BMI opcode in a readahead routine, but is otherwise identical.&lt;br /&gt;
&lt;br /&gt;
===Subpages===&lt;br /&gt;
{{Subpages}}&lt;br /&gt;
&lt;br /&gt;
Not created yet...&lt;br /&gt;
* [[N-SPC Engine/64WD Creation|64WD Creation]]&lt;br /&gt;
* [[N-SPC Engine/Advance Communication|Advance Communication]]&lt;br /&gt;
* [[N-SPC Engine/Aisystem Tokyo|Aisystem Tokyo]]&lt;br /&gt;
* [[N-SPC Engine/Argonaut|Argonaut]]&lt;br /&gt;
* [[N-SPC Engine/Axes Art Amuse|Axes Art Amuse]]&lt;br /&gt;
* [[N-SPC Engine/Bit Managers|Bit Managers]]&lt;br /&gt;
* [[N-SPC Engine/Capcom|Capcom]]&lt;br /&gt;
* [[N-SPC Engine/Chatnoir|Chatnoir]]&lt;br /&gt;
* [[N-SPC Engine/Chip Level Designs|Chip Level Designs]]&lt;br /&gt;
* [[N-SPC Engine/CP.BRAiN|CP.BRAiN]]&lt;br /&gt;
* [[N-SPC Engine/Cream|Cream]]&lt;br /&gt;
* [[N-SPC Engine/Crosstalk|Crosstalk]]&lt;br /&gt;
* [[N-SPC Engine/Cube|Cube]]&lt;br /&gt;
* [[N-SPC Engine/CUE|CUE]]&lt;br /&gt;
* [[N-SPC Engine/Culture Brain|Culture Brain]]&lt;br /&gt;
* [[N-SPC Engine/Daft|Daft]]&lt;br /&gt;
* [[N-SPC Engine/Data East|Data East]]&lt;br /&gt;
* [[N-SPC Engine/EJ Corporation|EJ Corporation]]&lt;br /&gt;
* [[N-SPC Engine/Electronic Arts|Electronic Arts]]&lt;br /&gt;
* [[N-SPC Engine/Falcom|Falcom]]&lt;br /&gt;
* [[N-SPC Engine/Funcom|Funcom]]&lt;br /&gt;
* [[N-SPC Engine/Gremlin|Gremlin]]&lt;br /&gt;
* [[N-SPC Engine/HAL|HAL]]&lt;br /&gt;
* [[N-SPC Engine/Hanari Exp|Hanari Exp]]&lt;br /&gt;
* [[N-SPC Engine/Hect|Hect]]&lt;br /&gt;
* [[N-SPC Engine/Hikoshi Hashimoto|Hikoshi Hashimoto]]&lt;br /&gt;
* [[N-SPC Engine/Home Data|Home Data]]&lt;br /&gt;
* [[N-SPC Engine/Human (earlier)|Human (earlier)]]&lt;br /&gt;
* [[N-SPC Engine/Human|Human]]&lt;br /&gt;
* [[N-SPC Engine/Imagesoft|Imagesoft]]&lt;br /&gt;
* [[N-SPC Engine/Infogrames|Infogrames]]&lt;br /&gt;
* [[N-SPC Engine/Intelligent Systems|Intelligent Systems]]&lt;br /&gt;
* [[N-SPC Engine/Japan Art Media|Japan Art Media]]&lt;br /&gt;
* [[N-SPC Engine/Jorudan|Jorudan]]&lt;br /&gt;
* [[N-SPC Engine/Kazuo Sawa|Kazuo Sawa]]&lt;br /&gt;
* [[N-SPC Engine/Kennosuke Suemura|Kennosuke Suemura]]&lt;br /&gt;
* [[N-SPC Engine/Khaos|Khaos]]&lt;br /&gt;
* [[N-SPC Engine/Koei|Koei]]&lt;br /&gt;
* [[N-SPC Engine/Konami|Konami]]&lt;br /&gt;
* [[N-SPC Engine/LaserSoft|LaserSoft]]&lt;br /&gt;
* [[N-SPC Engine/Make Software|Make Software]]&lt;br /&gt;
* [[N-SPC Engine/Metro|Metro]]&lt;br /&gt;
* [[N-SPC Engine/Mitsuhito Tanaka|Mitsuhito Tanaka]]&lt;br /&gt;
* [[N-SPC Engine/Monolith|Monolith]]&lt;br /&gt;
* [[N-SPC Engine/MSQ|MSQ]]&lt;br /&gt;
* [[N-SPC Engine/Namco|Namco]]&lt;br /&gt;
* [[N-SPC Engine/Naohisa Morota|Naohisa Morota]]&lt;br /&gt;
* [[N-SPC Engine/Natsume|Natsume]]&lt;br /&gt;
* [[N-SPC Engine/Nichibutsu or Make Software|Nichibutsu/Make Software]] (NOTE: Refers to three of the Super Nichibutsu Mahjong games)&lt;br /&gt;
* [[N-SPC Engine/Nova|Nova]]&lt;br /&gt;
* [[N-SPC Engine/Ocean|Ocean]]&lt;br /&gt;
* [[N-SPC Engine/Pure Sound|Pure Sound]]&lt;br /&gt;
* [[N-SPC Engine/Quest|Quest]]&lt;br /&gt;
* [[N-SPC Engine/Quintet|Quintet]]&lt;br /&gt;
* [[N-SPC Engine/Robert C. Ashworth|Robert C. Ashworth]]&lt;br /&gt;
* [[N-SPC Engine/Sakata SAS|Sakata SAS]]&lt;br /&gt;
* [[N-SPC Engine/Saurus|Saurus]]&lt;br /&gt;
* [[N-SPC Engine/Sunsoft|Sunsoft]]&lt;br /&gt;
* [[N-SPC Engine/Syscom|Syscom]]&lt;br /&gt;
* [[N-SPC Engine/System Sacom|System Sacom]]&lt;br /&gt;
* [[N-SPC Engine/Systemsoft|Systemsoft]]&lt;br /&gt;
* [[N-SPC Engine/T&#039;s Music|T&#039;s Music]]&lt;br /&gt;
* [[N-SPC Engine/TamTam|TamTam]]&lt;br /&gt;
* [[N-SPC Engine/Team X-Fade|Team X-Fade]]&lt;br /&gt;
* [[N-SPC Engine/Technos Japan|Technos Japan]]&lt;br /&gt;
* [[N-SPC Engine/Technosoft|Technosoft]]&lt;br /&gt;
* [[N-SPC Engine/Tecmo|Tecmo]]&lt;br /&gt;
* [[N-SPC Engine/Tose|Tose]]&lt;br /&gt;
* [[N-SPC Engine/Tsukasa Masuko|Tsukasa Masuko]]&lt;br /&gt;
* [[N-SPC Engine/Virgin|Virgin]]&lt;br /&gt;
* [[N-SPC Engine/Wave|Wave]]&lt;br /&gt;
* [[N-SPC Engine/Yoshikazu Yao|Yoshikazu Yao]]&lt;br /&gt;
* [[N-SPC Engine/Yoshiyuki Ishii|Yoshiyuki Ishii]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO: There are a lot of variants... these will be split into sub-pages depending on the modifications made&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
* [http://vgmpf.com/Wiki/index.php?title=Kankichi-kun Video Game Music Preservation Foundation - Kankichi-kun]&lt;br /&gt;
* [https://www.retroreversing.com/super-famicom-snes-development-kit/#intelligent-systems-shvc-development-system Retro Reversing - SNES (Super Famicom) Development Kit Hardware - Intelligent Systems SHVC Development System]&lt;br /&gt;
* [https://wiki.superfamicom.org/nintendo-music-format-(n-spc) Super Famicom Wiki - N-SPC]&lt;br /&gt;
* [http://gdri.smspower.org/wiki/index.php/Super_Famicom/Super_NES_Sound_Driver_List GDRI - Super Famicom/Super NES Sound Driver List]&lt;br /&gt;
* [https://github.com/vgmtrans/vgmtrans/issues/173 Github - N-SPC VCMD $FB-$FE identifications]&lt;br /&gt;
* [https://archive.org/details/GameBoyProgManVer1.1/page/n187/mode/2up Game Boy Development Manual - Super Game Boy Sound] (see pages 187-213)&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Koji_Kondo/Prototype&amp;diff=13813</id>
		<title>N-SPC Engine/Nintendo/Koji Kondo/Prototype</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Koji_Kondo/Prototype&amp;diff=13813"/>
		<updated>2024-01-09T03:10:39Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Corrected an error on bit notes for Panning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Go back to [[N-SPC Engine/Nintendo/Koji Kondo]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
The Prototype variant was used in two games: Super Mario World and Pilotwings. They are the only versions of the code that clearly pre-date the source code version provided with the IS-Sound unit. From a sound effect programming point of view, it can also be considered a predecessor to five other games that post-date the source code: SimCity, Legend of Zelda - A Link to the Past/Zelda no Densetsu - Kamigami no Triforce, Star Fox/Star Wing, Super Mario All-Stars/Super Mario Collection and Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Music Version !! VCMD Table Location ($DA and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Super Mario World || 0.0 || &amp;lt;tt&amp;gt;0x0F90&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0EDC&amp;lt;/tt&amp;gt; (all other versions)&amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;0x0FC4&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0F10&amp;lt;/tt&amp;gt; (Super Mario All Stars + Super Mario World) || &amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all other versions)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x4E8000&amp;lt;/tt&amp;gt; (Super Mario All-Stars + Super Mario World)&lt;br /&gt;
|-&lt;br /&gt;
| Pilotwings || 0.1 || &amp;lt;tt&amp;gt;0x1317&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x1263&amp;lt;/tt&amp;gt; (US and Japanese versions)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x12B4&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x1200&amp;lt;/tt&amp;gt; (European version) || &amp;lt;tt&amp;gt;0x0C8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The build difference between the standalone Super Mario World and its variant in Super Mario All-Stars is an extra command for $2141/$F5: $F0. This command zeroes out the echo volume DSP registers, keys off all notes, zeroes out several memory locations then activates and jumps to the IPL boot program. The copy itself used for the $FF command is stored at $FE00 rather than in the middle of the program.&lt;br /&gt;
&lt;br /&gt;
The build difference between the other versions and the European version of Pilotwings is similar to Super Mario All Stars and Super Mario World, except it&#039;s more like a complete replacement since it changes the operation of the $FF command for $2141/$F5. The echo volume DSP registers are zeroed out, all notes are keyed off, the EON register is cleared, echo writes are disabled, then we activate and jump to the IPL boot program instead of using a variant of it embedded in the program.&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Prototype/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
The communication protocol is game-specific. Both games have dedicated uses for each CPUIO register.&lt;br /&gt;
&lt;br /&gt;
===Super Mario World===&lt;br /&gt;
====CPUIO0 ($2140/$F4)====&lt;br /&gt;
This register controls the SFX to play on channel 5.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%0xxxxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; || Play SFX Sequence Set 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%1???????&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; || Hurry Up!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Play SFX Sequence Set 1 (Command &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; is the SFX ID to play. The ID currently playing is echoed back to $2140 on the SNES.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; mutes the amplifiers and pauses the music once it finishes playing. Any SFX from SFX Sequence 1 will unpause the music and unmute the amplifiers, while any noise SFX from SFX Sequence Set 2 will unmute the amplifiers, but not unpause the music.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; do not permit the Hurry Up! SFX command to be played until it is finished. They also cannot be interrupted, except by &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; VCMD for this set only is programmed to restart the SFX from the beginning.&lt;br /&gt;
&lt;br /&gt;
======SFX Sequence Format======&lt;br /&gt;
See the [[N-SPC Engine/Prototype/SFX Sequence Format|SFX Sequence Format]] subpage.&lt;br /&gt;
&lt;br /&gt;
=====Hurry Up! (Command &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Plays SFX ID &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; on both SFX sequence sets and offsets the tempo by &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; without overflow checks. This can stack if it is played multiple times, but only the first one will remain in effect until forced off.&lt;br /&gt;
&lt;br /&gt;
====CPUIO1 ($2141/$F5)====&lt;br /&gt;
This register controls the SFX on channel 8 and the Yoshi drums on channel 6.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Jump&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Enable Yoshi Drums&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Disable Yoshi Drums&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Two-Note SFX&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05-$EF&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Go to IPL Boot ROM (All-Stars variant only)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1-$FE&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Load New Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$05-$EF&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F1-$FE&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Jump (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Plays Mario&#039;s jumping SFX on channel 8. The value is echoed back to the SNES via $2141 while the SFX is playing.&lt;br /&gt;
&lt;br /&gt;
=====Enable Yoshi Drums (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Enables Yoshi drums. This is not echoed back to the SNES.&lt;br /&gt;
&lt;br /&gt;
Yoshi drums are only supported on music IDs &amp;lt;tt&amp;gt;$01-$03&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt;. Channel 6 is set to SFX instrument ID &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; if this is true.&lt;br /&gt;
&lt;br /&gt;
=====Disable Yoshi Drums (Command &amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Disables Yoshi drums. This is not echoed back to the SNES.&lt;br /&gt;
&lt;br /&gt;
=====Two-Note SFX (Command &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Plays two notes on channel 8. The value is echoed back to the SNES via $2141 while the SFX is playing.&lt;br /&gt;
&lt;br /&gt;
=====Go to IPL Boot ROM (Command &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
This only works in the build variant used in Super Mario All Stars + Super Mario World.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO go into specifics on what exactly is cleared out here before going to the loader&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====Load New Data (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&#039;&#039;TODO go into specifics on what exactly is cleared out here before going to the loader&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
See [[N-SPC_Engine#Load_New_Data_.28Command_.24FF.29|the source build&#039;s Load New Data command]] for the loading protocol, as it is identical binary-wise to the copy used in this one minus the *Ver S1.20* string.&lt;br /&gt;
&lt;br /&gt;
====CPUIO2 ($2142/$F6)====&lt;br /&gt;
This register controls the music.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%0xxxxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt; || Play Music&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%1???????&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; || Fade Out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Play Music (Command &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; is the music ID to play. The ID currently playing is echoed back to $2142 on the SNES.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$09-$0C&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt; reset the tempo speedup effect done by the Hurry Up! command.&lt;br /&gt;
&lt;br /&gt;
=====Fade Out (Command &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;%1???????&amp;lt;/pre&amp;gt; &lt;br /&gt;
Fades out the music by sliding the song volume to zero over 240 tempo ticks.&lt;br /&gt;
&lt;br /&gt;
====CPUIO3 ($2143/$F7)====&lt;br /&gt;
This register controls the SFX to play on channel 7.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$FF&amp;lt;/tt&amp;gt; || Play SFX Sequence Set 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Play SFX Sequence Set 2 (Command &amp;lt;tt&amp;gt;$01-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the SFX ID to play. The ID currently playing is echoed back to $2143 on the SNES.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$24&amp;lt;/tt&amp;gt; cannot be interrupted by any other instances. In order of priority, though, &amp;lt;tt&amp;gt;$24&amp;lt;/tt&amp;gt; can interrupt &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt;, which in turn can interrupt &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; VCMD for this set only is programmed to move the pointer back one byte instead of forward.&lt;br /&gt;
&lt;br /&gt;
======SFX Sequence Format======&lt;br /&gt;
See the [[N-SPC Engine/Prototype/SFX Sequence Format|SFX Sequence Format]] subpage.&lt;br /&gt;
&lt;br /&gt;
===Pilotwings===&lt;br /&gt;
====CPUIO0 ($2140/$F4)====&lt;br /&gt;
This register plays the music and controls the BRR wind noise.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%xyyzzzzz&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$FE&amp;lt;/tt&amp;gt; || Play Music/BRR Wind Noise Frequency&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Fade Out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Play Music/BRR Wind Noise Frequency (Command &amp;lt;tt&amp;gt;$01-$FE&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;u&amp;gt;Input&amp;lt;/u&amp;gt;&amp;lt;pre&amp;gt;%xyzaaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Output&amp;lt;/u&amp;gt;&amp;lt;pre&amp;gt;%000aaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Plays a piece of music.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; disables BRR wind noise playback on channel 8. This is forced on IDs &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; if &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;%y&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;%z&amp;lt;/tt&amp;gt; are all zero.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%y&amp;lt;/tt&amp;gt;, with &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; cleared, enables a higher-frequency wind noise. This takes precedence over &amp;lt;tt&amp;gt;%z&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%z&amp;lt;/tt&amp;gt;, with &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; cleared, enables a lower-frequency wind noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%aaaaa&amp;lt;/tt&amp;gt; is the music ID. If zero, then the music will keep playing normally. Although the absolute limit is &amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt;, in reality it&#039;s &amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt; because the song table only goes that high up ID-wise. The ID currently playing is echoed back to $2140 on the SNES.&lt;br /&gt;
&lt;br /&gt;
=====Fade Out (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Fades out the music by sliding the song volume to zero over 192 tempo ticks.&lt;br /&gt;
&lt;br /&gt;
====CPUIO1 ($2141/$F5)====&lt;br /&gt;
This register controls the sound effects in channels 3 and 8.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;xy&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$FE&amp;lt;/tt&amp;gt; || Play SFX Sequence&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Load Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Play SFX Sequence (Command &amp;lt;tt&amp;gt;$01-$FE&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;u&amp;gt;Input&amp;lt;/u&amp;gt;&amp;lt;pre&amp;gt;xy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Output&amp;lt;/u&amp;gt;&amp;lt;pre&amp;gt;0y&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two SFX can be triggered at once. Plus, each one has its own SFX collection to use.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; is a four-bit/one nibble SFX ID for channel 8.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$E&amp;lt;/tt&amp;gt; mutes all other channels sound upon playing the SFX (including the music, which causes new values to not be acknowledged). Any other ID played afterwards unmutes the music. This also cannot be interrupted by other SFX value entered here except for &amp;lt;tt&amp;gt;$F&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$1&amp;lt;/tt&amp;gt; cannot be interrupted by other SFX in this same area except for &amp;lt;tt&amp;gt;$E&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$F&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$5&amp;lt;/tt&amp;gt; plays nothing, although it still works for unmuting music and other channels.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; is a four-bit/one nibble SFX ID for channel 3. The ID currently playing is echoed back to $2141 on the SNES.&lt;br /&gt;
** Some SFX are not interruptible. In order of uninterruptibility priority with other SFX IDs, we have &amp;lt;tt&amp;gt;$A&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$7&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$5&amp;lt;/tt&amp;gt; is allowed to overwrite &amp;lt;tt&amp;gt;$7&amp;lt;/tt&amp;gt; in this instance), then &amp;lt;tt&amp;gt;$9&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$F&amp;lt;/tt&amp;gt; plays nothing.&lt;br /&gt;
&lt;br /&gt;
======SFX Sequence Format======&lt;br /&gt;
See the [[N-SPC Engine/Prototype/SFX Sequence Format|SFX Sequence Format]] subpage.&lt;br /&gt;
&lt;br /&gt;
=====Load Data (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
The operation is slightly different depending on what build you&#039;re using. Both clean up DSP registers first: specifically by keying off all notes and zeroing out the EVOL DSP registers, along with disabling echo writes. Additionally, the European version clears out the EON DSP register, and the other versions mute the amplifier until the loading routine exits.&lt;br /&gt;
&lt;br /&gt;
The European version jumps directly to the IPL Boot ROM, while all other versions instead use a modified copy.&lt;br /&gt;
&lt;br /&gt;
See [[N-SPC_Engine#Load_New_Data_.28Command_.24FF.29|the source build&#039;s Load New Data command]] command for the loading protocol for the non-European versions, as it is identical binary-wise to the copy used in this one minus the *Ver S1.20* string.&lt;br /&gt;
&lt;br /&gt;
====CPUIO2 ($2142/$F6)====&lt;br /&gt;
This controls the aircraft engine noise in channels 5 and 6.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%0xyyyyyy&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt; || Engine Control&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%10xxxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$80-$BF&amp;lt;/tt&amp;gt; || Break&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%11??????&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$C0-$FE&amp;lt;/tt&amp;gt; || Skid&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Stop Engine&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Engine Control (Command &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xyyyyyy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current engine value is echoed back to $2142 on the SNES.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt;, when starting the aircraft engine, determines what kind of noise it makes. A different command (other than NOP) must be used before changing the engine noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyyyyy&amp;lt;/tt&amp;gt; controls the engine noise frequency.&lt;br /&gt;
&lt;br /&gt;
=====Break (Command &amp;lt;tt&amp;gt;$80-$BF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;%10xxxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxx&amp;lt;/tt&amp;gt; only does something different when set to &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;, which is a slight pitch variant. Otherwise, there&#039;s not much control here.&lt;br /&gt;
&lt;br /&gt;
=====Skid (Command &amp;lt;tt&amp;gt;$C0-$FE&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;%11??????&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Stop Engine (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Basically acts as a reset for the aircraft engine back to default settings, in addition to stopping it.&lt;br /&gt;
&lt;br /&gt;
====CPUIO3 ($2143/$F7)====&lt;br /&gt;
This controls a couple of pieces of miscellaneous SFX on channel 4. The ID currently playing is echoed back to $2143 on the SNES.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$03-$FF&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Engine-Controlled SFX&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Beep&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$03-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Engine-Controlled SFX (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Plays a fixed sequence of notes on channel 4 at a variable note length controlled by the engine frequency that goes faster the higher the frequency. Only works with a CPUIO2 value of &amp;lt;tt&amp;gt;$02-$11&amp;lt;/tt&amp;gt;: otherwise, it&#039;s a NOP.&lt;br /&gt;
&lt;br /&gt;
The note length used is defined as &amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt; minus the frequency of the engine shifted right. This value is decremented twice on the last note.&lt;br /&gt;
&lt;br /&gt;
=====Beep (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Plays a single note on channel 4. No other conditions are required here.&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
Compared to common N-SPC, this is mostly the same, except it is missing the pitch base fractional multiplier, and V0.0 doesn&#039;t have noise support. Otherwise, it&#039;s the same as before, defined as following...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;yy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.1&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;%xyyyyyyy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; is a noise clock switch. This is only valid in V0.1.&lt;br /&gt;
** If set, noise is used and &amp;lt;tt&amp;gt;%??yyyyy&amp;lt;/tt&amp;gt; represents the noise clock rate.&lt;br /&gt;
** If cleared, &amp;lt;tt&amp;gt;%0yyyyyyy&amp;lt;/tt&amp;gt; (or just &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; for V0.0) is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
&lt;br /&gt;
==Percussion Format==&lt;br /&gt;
Percussion is stored separately from the instrument format in the prototype version, because its format is nearly identical to an instrument, but it contains an extra byte at the end that defines the note to play. Thus, these bytes are defined as following...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;yy zz aa bb cc dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.1&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;%xyyyyyyy zz aa bb cc dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; is a noise clock switch. This is only valid in V0.1.&lt;br /&gt;
** If set, noise is used and &amp;lt;tt&amp;gt;%??yyyyy&amp;lt;/tt&amp;gt; represents the noise clock rate.&lt;br /&gt;
** If cleared, &amp;lt;tt&amp;gt;%0yyyyyyy&amp;lt;/tt&amp;gt; (or just &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; for V0.0) is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is the note to play the percussion note at.&lt;br /&gt;
&lt;br /&gt;
==Phrase Format==&lt;br /&gt;
Song entries, stored as [[little endian]] pointers, point to a list of phrases for the song to play. This is mostly identical to standard N-SPC, except it doesn&#039;t have fast forward commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt; || End of Song ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%0xxxxxxx $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$7F $00&amp;lt;/tt&amp;gt;|| Jump x Times || &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%1??????? $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$80-$FF $00&amp;lt;/tt&amp;gt; || Always Jump || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || Play Pattern || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Play Pattern===&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a set of eight pointers to track data, one for each channel.&lt;br /&gt;
&lt;br /&gt;
====Pattern Entry Format====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. If the pointer is zero, there is no track data.&lt;br /&gt;
&lt;br /&gt;
===End of Song (Command &amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$00 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Terminates the song.&lt;br /&gt;
&lt;br /&gt;
===Jump x Times (Command &amp;lt;tt&amp;gt;$01-$7F $00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx $00 yy yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; is the number of times to jump.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
===Always Jump (Command &amp;lt;tt&amp;gt;$80-$FF $00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%1??????? $00 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
The IDs are different due to being an earlier version, and some VCMDs may not be defined yet. The ones that are used are listed below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Phrase Termination/End of Subroutine ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; || Note Duration || &amp;lt;tt&amp;gt;xy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80-$C5&amp;lt;/tt&amp;gt; || Note || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$C6&amp;lt;/tt&amp;gt; || Tie || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$C7-$CF&amp;lt;/tt&amp;gt; || Rest || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$D0-$D9&amp;lt;/tt&amp;gt; || Percussion || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DA&amp;lt;/tt&amp;gt; || Instrument || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DB&amp;lt;/tt&amp;gt; || Panning  || &amp;lt;tt&amp;gt;%xy?zzzzz&amp;lt;/tt&amp;gt;  &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DC&amp;lt;/tt&amp;gt; || Panning Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DD&amp;lt;/tt&amp;gt; || Pitch Slide to Note || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DE&amp;lt;/tt&amp;gt; || Vibrato On || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DF&amp;lt;/tt&amp;gt; || Vibrato Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt; || Song Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt; || Song Volume Fade || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt; || Tempo || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt; || Tempo Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt; || Global Absolute Transposition || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E5&amp;lt;/tt&amp;gt; || Tremolo On || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E6&amp;lt;/tt&amp;gt; || Tremolo Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E7&amp;lt;/tt&amp;gt; || Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E8&amp;lt;/tt&amp;gt; || Volume Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E9&amp;lt;/tt&amp;gt; || Subroutine || &amp;lt;tt&amp;gt;xx xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EA&amp;lt;/tt&amp;gt; || Vibrato Fade In || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt; || Note Pitch Envelope To || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EC&amp;lt;/tt&amp;gt; || Note Pitch Envelope From || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Invalid (supposed to be Note Pitch Envelope Off) || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Fine Tune || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Echo Enable Bits and Volume || &amp;lt;tt&amp;gt;%xxxxxxxx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Echo Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Echo Parameter Setup || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Echo Volume Fade || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F3-$FF&amp;lt;/tt&amp;gt; || Invalid || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO use a template for the above table for standard VCMDs&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Most of these essentially act identically to the common versions (refer back to the main page for info on those), but two of the VCMDs don&#039;t work properly: Note Pitch Envelope Off, which has a zeroed out pointer but the code does exist, and Tremolo On, which has a memory location definition bug for one of the parameters that conflicts with an internal value utilized by the tremolo, causing constant overwriting and making the command not work in general.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;br /&gt;
[[Category:N-SPC Variants]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=Template:N-SPC_VCMD_Set_Table&amp;diff=13812</id>
		<title>Template:N-SPC VCMD Set Table</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=Template:N-SPC_VCMD_Set_Table&amp;diff=13812"/>
		<updated>2024-01-09T03:10:25Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Corrected an error on bit notes for Panning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This template is designed to quickly show a VCMD set for each N-SPC variant. This is currently a WIP on the customizability side, since it needs to be adapted for each and every N-SPC variant as needed.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Phrase Termination/End of Subroutine ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; || Note Duration || &amp;lt;tt&amp;gt;(%0yyyzzzz)&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80-$C7&amp;lt;/tt&amp;gt; || Note || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$C8&amp;lt;/tt&amp;gt; || Tie || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$C9&amp;lt;/tt&amp;gt; || Rest || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$CA-$DF&amp;lt;/tt&amp;gt; || Percussion || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt; || Instrument || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt; || Panning  || &amp;lt;tt&amp;gt;%xy?zzzzz&amp;lt;/tt&amp;gt;  &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt; || Panning Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt; || Vibrato On || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt; || Vibrato Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E5&amp;lt;/tt&amp;gt; || Song Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E6&amp;lt;/tt&amp;gt; || Song Volume Fade || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E7&amp;lt;/tt&amp;gt; || Tempo || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E8&amp;lt;/tt&amp;gt; || Tempo Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E9&amp;lt;/tt&amp;gt; || Global Absolute Transposition || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EA&amp;lt;/tt&amp;gt; || Single Channel Absolute Transposition || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt; || Tremolo On || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EC&amp;lt;/tt&amp;gt; || Tremolo Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Volume Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Subroutine || &amp;lt;tt&amp;gt;xx xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Vibrato Fade In || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Note Pitch Envelope To || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Note Pitch Envelope From || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || Note Pitch Envelope Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt; || Fine Tune || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt; || Echo Enable Bits and Volume || &amp;lt;tt&amp;gt;%xxxxxxxx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F6&amp;lt;/tt&amp;gt; || Echo Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F7&amp;lt;/tt&amp;gt; || Echo Parameter Setup || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt; || Echo Volume Fade || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt; || Pitch Slide to Note || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt; || Percussion Base Instrument ID Redefine || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt; || Channel Mute ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt; || Fast Forward On || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt; || Fast Forward Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Invalid || &lt;br /&gt;
|}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Koji_Kondo/SFX_Sequence_Format&amp;diff=13811</id>
		<title>N-SPC Engine/Nintendo/Koji Kondo/SFX Sequence Format</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Koji_Kondo/SFX_Sequence_Format&amp;diff=13811"/>
		<updated>2024-01-09T03:08:23Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Adding a stub marker citing the under construction nature of this page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Go back to [[N-SPC Engine/Nintendo/Koji Kondo]]&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: This page is under construction. The later Koji Kondo games use the same format for the most part (except for &#039;&#039;Star Fox 2&#039;&#039;, which has a more massive overhaul), but adapted to modern N-SPC VCMD IDs, and they may have some extra per-entry parameters.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO insert table here containing a list of games and their version&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SFX sequence data is slightly modified compared to the standard N-SPC&#039;s voice command format. These are headerless, unlike a song, and they only support one channel at a time, with the channel used being fixed. Both games have almost the same command set except for VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
All SFX are initially handled at a tempo of &amp;lt;tt&amp;gt;$38&amp;lt;/tt&amp;gt;. &#039;&#039;TODO double check for all games&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==SFX Instrument Format==&lt;br /&gt;
&#039;&#039;TODO Star Glider, Star Fox, Yoshi&#039;s Island and Star Fox 2 don&#039;t use this instrument format: instead they&#039;re standard Kankichi-kun, so TODO note this once the versioning info is implemented&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SFX instrument format, shared among all SFX but not consistently stored in terms of memory location, consists of a series of bytes as following...&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc dd ee ff&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxVOLR DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxPITCHL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxPITCHH DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
&lt;br /&gt;
==SFX Percussion Format==&lt;br /&gt;
See [[N-SPC Engine/Prototype#Percussion Format|the music percussion format]], as the format is identical.&lt;br /&gt;
&lt;br /&gt;
==SFX Voice Command Format==&lt;br /&gt;
===V0.0-V0.1===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || End of SFX ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; || Note Duration || &amp;lt;tt&amp;gt;(xx) (yy)&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80-$C5&amp;lt;/tt&amp;gt; || Note || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$C6-$CF&amp;lt;/tt&amp;gt; || Retrigger Note || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$D0-$D9&amp;lt;/tt&amp;gt; || Percussion || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DA&amp;lt;/tt&amp;gt; || Instrument || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DA&amp;lt;/tt&amp;gt; || Noise Instrument (Super Mario World CPUIO3) || &amp;lt;tt&amp;gt;%1??xxxxx yy&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DB-$DC&amp;lt;/tt&amp;gt; || Invalid Note ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DD&amp;lt;/tt&amp;gt; || Note + Pitch Slide to Note || &amp;lt;tt&amp;gt;xx yy zz aa&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DE-$EA&amp;lt;/tt&amp;gt; || Invalid Note ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt; || Note Pitch Envelope To || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EC-$FE&amp;lt;/tt&amp;gt; || Invalid Note ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Restart SFX (Super Mario World CPUIO0) ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Jump Back One Byte (Super Mario World CPUIO3) ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Jump to SFX ID (Pilotwings) || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===V1.0 and up===&lt;br /&gt;
&#039;&#039;TODO add table here: the IDs now reflect modern N-SPC&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO Star Fox 2&#039;&#039; (has a massive overhaul to the VCMD format)&lt;br /&gt;
&lt;br /&gt;
===Invalid Note (VCMD &amp;lt;tt&amp;gt;$DB-$DC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$DE-$EA&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$EC-$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Doesn&#039;t crash the sound driver, but does play an invalid note.&lt;br /&gt;
&lt;br /&gt;
===End of SFX (VCMD &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Terminates the SFX.&lt;br /&gt;
&lt;br /&gt;
===Note Duration (VCMD &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx (yy) (zz)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; represents your note length (as seven bits) in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt;, if less than &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;, represents the volume of the note. If a second byte is defined, this is done for the left channel, otherwise it is for both channels.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt;, if less than &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;, represents the right volume of the note.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMD &amp;lt;tt&amp;gt;$80-$C5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Retrigger Note (VCMD &amp;lt;tt&amp;gt;$C6-$CF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Retriggers the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
Note that as a side effect of this, there is no tie or rest command. Rests can be emulated via a zero volume note. Ties... well, officially they&#039;re not supported at all, but if the pitch slide length equals or exceeds the note duration, then the note won&#039;t be keyed off once the note length has elapsed.&lt;br /&gt;
&lt;br /&gt;
===Percussion (VCMD &amp;lt;tt&amp;gt;$D0-$D9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a percussion note. Unlike SFX, percussion uses the same set that the music uses, and thus has the same instrument format as that.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$DA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$DA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See SFX Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Noise Instrument (VCMD &amp;lt;tt&amp;gt;$DA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Only compatible with Super Mario World when playing SFX through the CPUIO3 register.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$DA %1??xxxxx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; contains the noise clock rate.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See SFX Instrument Format above for the format. This must be &amp;lt;tt&amp;gt;$7F&amp;lt;/tt&amp;gt; or less, otherwise the noise clock rate is overwritten and more bytes will be fetched until a non-noise clock value is given.&lt;br /&gt;
&lt;br /&gt;
===Note + Pitch Slide To Note (VCMD &amp;lt;tt&amp;gt;$DD&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$DD xx yy zz aa&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting note.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the number of tempo ticks to delay the slide for... at least in theory. In reality, this never works, and the pitch slide executes instantly in all cases.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines the length of the pitch slide in tempo ticks. If this is equal or greater than the overall note length, the note won&#039;t key off at the end, thus allowing for multiple pitch envelopes to be chained at once.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is the target note.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EB xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of ticks to delay before applying the pitch envelope... at least in theory. In reality, this never works, and the pitch slide executes instantly in all cases.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks. If this is equal or greater than the overall note length, the note won&#039;t key off at the end, thus allowing for multiple pitch envelopes to be chained at once.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the target note.&lt;br /&gt;
&lt;br /&gt;
===Restart SFX (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Only compatible with Super Mario World when playing SFX through the CPUIO0 register.&lt;br /&gt;
&lt;br /&gt;
Restarts the SFX from the beginning.&lt;br /&gt;
&lt;br /&gt;
===Jump Back One Byte (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Only compatible with Super Mario World when playing SFX through the CPUIO3 register.&lt;br /&gt;
&lt;br /&gt;
Normally, the pointer is incremented upon reading the VCMD. This causes the inverse to happen, and sets the pointer to one byte before this VCMD.&lt;br /&gt;
&lt;br /&gt;
===Jump to SFX ID (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Only compatible with Pilotwings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$FF xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the SFX ID to jump to. The array used depends on which set of sequences you&#039;re using, as the two of them use different sets.&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=Template:N-SPC_VCMD_Set_Table&amp;diff=13760</id>
		<title>Template:N-SPC VCMD Set Table</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=Template:N-SPC_VCMD_Set_Table&amp;diff=13760"/>
		<updated>2024-01-07T23:43:13Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Made an error on the NOP command with the source variant (it skips two bytes, not one)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This template is designed to quickly show a VCMD set for each N-SPC variant. This is currently a WIP on the customizability side, since it needs to be adapted for each and every N-SPC variant as needed.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Phrase Termination/End of Subroutine ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; || Note Duration || &amp;lt;tt&amp;gt;(%0yyyzzzz)&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80-$C7&amp;lt;/tt&amp;gt; || Note || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$C8&amp;lt;/tt&amp;gt; || Tie || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$C9&amp;lt;/tt&amp;gt; || Rest || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$CA-$DF&amp;lt;/tt&amp;gt; || Percussion || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt; || Instrument || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt; || Panning  || &amp;lt;tt&amp;gt;%xyzzzzz&amp;lt;/tt&amp;gt;  &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt; || Panning Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt; || Vibrato On || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt; || Vibrato Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E5&amp;lt;/tt&amp;gt; || Song Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E6&amp;lt;/tt&amp;gt; || Song Volume Fade || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E7&amp;lt;/tt&amp;gt; || Tempo || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E8&amp;lt;/tt&amp;gt; || Tempo Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E9&amp;lt;/tt&amp;gt; || Global Absolute Transposition || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EA&amp;lt;/tt&amp;gt; || Single Channel Absolute Transposition || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt; || Tremolo On || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EC&amp;lt;/tt&amp;gt; || Tremolo Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Volume Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Subroutine || &amp;lt;tt&amp;gt;xx xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Vibrato Fade In || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Note Pitch Envelope To || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Note Pitch Envelope From || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || Note Pitch Envelope Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt; || Fine Tune || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt; || Echo Enable Bits and Volume || &amp;lt;tt&amp;gt;%xxxxxxxx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F6&amp;lt;/tt&amp;gt; || Echo Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F7&amp;lt;/tt&amp;gt; || Echo Parameter Setup || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt; || Echo Volume Fade || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt; || Pitch Slide to Note || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt; || Percussion Base Instrument ID Redefine || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt; || Channel Mute ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt; || Fast Forward On || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt; || Fast Forward Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Invalid || &lt;br /&gt;
|}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine&amp;diff=13731</id>
		<title>N-SPC Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine&amp;diff=13731"/>
		<updated>2024-01-07T18:59:41Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: /* Tremolo Off (VCMD $EC) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nintendo SPC Sound Engine&#039;&#039;&#039;, abbreviated N-SPC and officially known as Kankichi-kun [http://vgmpf.com/Wiki/index.php?title=Kankichi-kun], is the most common sound engine used in all of the SNES/SFC games. Only the music portion was initially provided in the source code included in the IS-Sound unit along with some templating for a protocol for music and sound effects [https://www.retroreversing.com/super-famicom-snes-development-kit/#intelligent-systems-shvc-development-system]: usually it was modified by developers on an individual basis, resulting in many different variants, some of them more heavily modifying the sound driver than others. Usually what was added on was sound effect support, but sometimes the music VCMDs were modified as well.&lt;br /&gt;
&lt;br /&gt;
The following games are purely based off of the source code provided with the IS-Sound unit, and are either unmodified or barely modified, if at all:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Hong Kong &#039;97&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0F800A&amp;lt;/tt&amp;gt; (both versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi - Bangai Hen&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 2&#039;&#039; Trial Version || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 2&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x03801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 2 Remix&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; Trial Version || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x018058&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; (Alt 1) || &amp;lt;tt&amp;gt;0x0DF0&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D30&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x018076&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Wheel of Fortune - Deluxe Edition&#039;&#039; &#039;&#039;(unused)&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01D842&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Of the games listed here, two of them are very minor edits...&lt;br /&gt;
* &#039;&#039;Wheel of Fortune - Deluxe Edition&#039;&#039;&#039;s build is unused and is missing an opcode near the *Ver S1.20* string. In addition, that section is actually unused, because instead new code at $0700 is used to substitute for this one... which happens to be an exact match to the original IPL Boot ROM.&lt;br /&gt;
* &#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; (Alt 1)&#039;s program starts with a JMP opcode, and contains a NOP between the first and second opcodes of the actual program.&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
NOTE: This is not representative of every single variant. Instead, it represents the collection of commands from the source code included in the IS-Sound unit, which in turn may be carried over to most variants.&lt;br /&gt;
&lt;br /&gt;
The only register that is used for communication in the source build is $2140 (SNES side)/$F4 (SPC side), except for the load command. Other registers are not even read from, though the code itself sets up the framework to do so.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
&amp;lt;pre&amp;gt;xx ?? ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the currently piece of music playing. It takes a couple of tempo ticks for this to echo back after initializing the music.&lt;br /&gt;
&lt;br /&gt;
===Command IDs===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Stop Music || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;xx ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$F0 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$F1 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$FF ?? xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Stop Music (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Initializes an invalid phrase pointer, then stops the previous piece of music. This is not compatible with the resume command, as it is irrevocable, unlike the other one.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music by the ID specified in the command.&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Jumps to a modified copy of the IPL Boot ROM (except for Wheel of Fortune - Deluxe Edition, where there is an opcode missing, the jump location is different, and it contains an exact copy of the IPL Boot ROM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol is nearly identical to IPL Boot ROM, with a couple of differences)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format is most commonly defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this....&lt;br /&gt;
&amp;lt;pre&amp;gt;%xyyyyyyy zz aa bb cc dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; is a [[S-DSP/Noise|noise clock]] switch.&lt;br /&gt;
** If set, noise is used and &amp;lt;tt&amp;gt;%??yyyyy&amp;lt;/tt&amp;gt; represents the noise clock rate.&lt;br /&gt;
** If cleared, &amp;lt;tt&amp;gt;%0yyyyyyy&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Phrase Format==&lt;br /&gt;
Song entries, stored as [[little endian]] pointers, point to a list of phrases for the song to play.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt; || End of Song ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%0xxxxxxx $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$7F $00&amp;lt;/tt&amp;gt;|| Jump x Times || &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80 $00&amp;lt;/tt&amp;gt; || Fast Forward On ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$81 $00&amp;lt;/tt&amp;gt; || Fast Forward Off ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%1??????? $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$82-$FF $00&amp;lt;/tt&amp;gt; || Always Jump || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || Play Pattern || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Play Pattern===&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a set of eight pointers to track data, one for each channel.&lt;br /&gt;
&lt;br /&gt;
====Pattern Entry Format====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. If the pointer is zero, there is no track data.&lt;br /&gt;
&lt;br /&gt;
===End of Song (Command &amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$00 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Terminates the song.&lt;br /&gt;
&lt;br /&gt;
===Jump x Times (Command &amp;lt;tt&amp;gt;$00 $01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx $00 yy yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; is the number of times to jump.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$00 $80&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$80 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fast Forward causes the song to stop playing and the player rapidly progresses throughout the song. Thus, this can effectively act as a skip.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$00 $81&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$81 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Disables Fast Forward and continues playing the song normally.&lt;br /&gt;
&lt;br /&gt;
===Always Jump (Command &amp;lt;tt&amp;gt;$00 $82-$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%1??????? $00 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only executes if the fast forward commands are not triggered.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
NOTE: This is not representative of every single variant. Instead, it represents the collection of VCMDs from the source code included in the IS-Sound unit, which in turn is carried over to most variants.&lt;br /&gt;
&lt;br /&gt;
{{N-SPC VCMD Set Table}}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Crashes the sound driver due to being outside of the array of pointers, and thus jumping to an invalid pointer.&lt;br /&gt;
&lt;br /&gt;
===NOP (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Reads two bytes, then does absolutely nothing with the command.&lt;br /&gt;
&lt;br /&gt;
===Phrase Termination/End of Subroutine (VCMD &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
This VCMD&#039;s operation depends on whether or not it is inside a subroutine or not.&lt;br /&gt;
If it is inside a subroutine, it exits the subroutine and song execution continues.&lt;br /&gt;
Otherwise, the phrase is terminated. This affects &#039;&#039;all&#039;&#039; channels in the music: any other channels still playing are interrupted.&lt;br /&gt;
&lt;br /&gt;
===Note Duration (VCMD &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx (%0yyyzzzz)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; represents your note length (as seven bits) in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyy&amp;lt;/tt&amp;gt;, if the highest bit of the byte is not set, defines the quantization. It is an index value to a table of values that indicate, in 256ths, how far along the note to play before keying it off. This table can vary on a per-game basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%zzzz&amp;lt;/tt&amp;gt;, which is only defined if the highest bit of the byte is not set, defines the velocity. It is an index to a table of values that indicate the volume in a decibel-like number (due to the final volume calculation being multiplied by itself at the end). This table can vary on a per-game basis.&lt;br /&gt;
&lt;br /&gt;
Notes and/or special VCMDs, by default, are forced after the parameter byte is read. Attempting to use &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt; again results in an invalid note.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMD &amp;lt;tt&amp;gt;$80-$C7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Tie (VCMD &amp;lt;tt&amp;gt;$C8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Continues playing the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Rest (VCMD &amp;lt;tt&amp;gt;$C9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Percussion (VCMD &amp;lt;tt&amp;gt;$CA-$DF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a percussion note.&lt;br /&gt;
&lt;br /&gt;
By default, percussion uses the same instrument set as the song, and all percussion is keyed on with a note of &amp;lt;tt&amp;gt;$A4&amp;lt;/tt&amp;gt;.&lt;br /&gt;
The starting ID to use for all channels can be redefined by VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Panning (VCMD &amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E1 %xyzzzzz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; defines a phase inversion switch for the left channel.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%y&amp;lt;/tt&amp;gt; defines a phase inversion switch for the right channel.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%zzzzz&amp;lt;/tt&amp;gt; is five bits for the panning. This refers to an array of values to multiply the volume by after calculating the voice volume via various other parameters set by the VCMDs. Under normal circumstances, center is defined as &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; and the maximum value is &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Panning Fade (VCMD &amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E2 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target pan value. Phase inversion is &#039;&#039;not&#039;&#039; taken into account here, thus only the low five bits should be used here.&lt;br /&gt;
&lt;br /&gt;
===Vibrato On (VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E3 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay the vibrato for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the rate of the vibrato: specifically, how much to change the pitch on a per-tempo tick basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the depth of the vibrato: that is, the maximum pitch offset to use. &amp;lt;tt&amp;gt;$00-$F0&amp;lt;/tt&amp;gt; are normal, but &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; and up act more like said value ANDed by &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; and multiplied by &amp;lt;tt&amp;gt;$0100&amp;lt;/tt&amp;gt;, meaning the highest values have drastic differences compared to the lower ones.&lt;br /&gt;
&lt;br /&gt;
===Vibrato Off (VCMD &amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables vibrato set by VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Song Volume (VCMD &amp;lt;tt&amp;gt;$E5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E5 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the song volume value. This sets the volume for all of the channels in the song. The value used is a decibel-like value due to the final volume being multiplied by itself to get the final result.&lt;br /&gt;
&lt;br /&gt;
===Song Volume Fade (VCMD &amp;lt;tt&amp;gt;$E6&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E6 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target song volume.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$E7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E7 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as one timer 0 tick multiplied by &amp;lt;math&amp;gt;\frac{256}{x}&amp;lt;/math&amp;gt;. Zero freezes the song.&lt;br /&gt;
&lt;br /&gt;
===Tempo Fade (VCMD &amp;lt;tt&amp;gt;$E8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E8 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target tempo.&lt;br /&gt;
&lt;br /&gt;
===Global Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$E9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E9 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed value defining the number of semitones to transpose subsequent notes. Note that this affects all channels, not just one channel.&lt;br /&gt;
&lt;br /&gt;
===Single Channel Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$EA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed value defining the number of semitones to transpose subsequent notes.&lt;br /&gt;
&lt;br /&gt;
===Tremolo On (VCMD &amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EB xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay the tremolo for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the rate of the tremolo: specifically, how much to change the volume on a per-tempo tick basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the depth of the tremolo: that is, the maximum volume offset to use.&lt;br /&gt;
&lt;br /&gt;
===Tremolo Off (VCMD &amp;lt;tt&amp;gt;$EC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables tremolo set by VCMD &amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the volume value. The value used is a decibel-like value due to the final volume being multiplied by itself to get the final result.&lt;br /&gt;
&lt;br /&gt;
===Volume Fade (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target volume.&lt;br /&gt;
&lt;br /&gt;
===Subroutine (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer containing the section of music to play.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of times to loop the sub-routine.&lt;br /&gt;
&lt;br /&gt;
===Vibrato Fade In (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to fade the vibrato for.&lt;br /&gt;
The moment this VCMD is executed, the depth is faded in from zero.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
This VCMD is applied to all subsequent notes until turned off or overwritten.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay before applying the pitch envelope.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a signed offset in semitones to slide the note to.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope From (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
This VCMD is applied to all subsequent notes until turned off or overwritten.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay before applying the pitch envelope.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a signed offset in semitones to slide the note from: that is, unlike Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;), this is a starting note offset, rather than an end of pitch envelope note offset.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope Off (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables a pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the amount to shift the pitch up. This is in 256ths of a semitone, albeit done via measuring the distance between note and multiplying it by this value.&lt;br /&gt;
&lt;br /&gt;
===Echo Enable Bits and Volume (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 %xxxxxxxx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxxx&amp;lt;/tt&amp;gt; defines the channels to turn on for the echo (one per bit), which translates to a direct write to the EON DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines a value for EVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines a value for EVOLR DSP register.&lt;br /&gt;
&lt;br /&gt;
===Echo Off (VCMD &amp;lt;tt&amp;gt;$F6&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
This disables echo for &#039;&#039;all&#039;&#039; channels, as well as zeroing out the echo volume and disabling echo writes.&lt;br /&gt;
&lt;br /&gt;
===Echo Parameter Setup (VCMD &amp;lt;tt&amp;gt;$F7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F7 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines a value for the EDL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines a value for the EFB DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines an ID to an array of FIR coefficient values.&lt;br /&gt;
&lt;br /&gt;
===Echo Volume Fade (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F8 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the target value for EVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines the target value for EVOLR DSP register.&lt;br /&gt;
&lt;br /&gt;
===Pitch Slide To Note (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F9 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to delay the slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the target note.&lt;br /&gt;
&lt;br /&gt;
===Percussion Base Instrument ID Redefine (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting instrument ID. Note that this affects all channels.&lt;br /&gt;
&lt;br /&gt;
===Channel Mute (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Causes the channel to not key on subsequent notes.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (VCMD &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Fast Forward causes the song to stop playing and the player rapidly progresses throughout the song. Thus, this can effectively act as a skip.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables Fast Forward and continues playing the song normally.&lt;br /&gt;
&lt;br /&gt;
==Variants==&lt;br /&gt;
===Shijou Saikyou no Quiz Ou Ketteisen Super===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Shijou Saikyou no Quiz Ou Ketteisen Super&#039;&#039; || &amp;lt;tt&amp;gt;0x0DF7&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D37&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x038062&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x04805C&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x058062&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
This is the closest match to a standard source N-SPC/Kankichi build used in a licensed game. This is because the only modifications made to it are to echo what was sent to any register to $2141/$F5 (although in practice only $2140/$F4 is read from, thus de facto giving it the same output, otherwise it would be cycling between the last register read code-wise as output) and zero out both $2140/$F4 and $2141/$F5 when the song is done playing when a zero pointer is read from a phase.&lt;br /&gt;
&lt;br /&gt;
====Output to the SNES====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the currently piece of music playing. It takes a couple of tempo ticks for this to echo back after initializing the music.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a de-facto mirror of &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; output-wise. The feedback is a little faster, though, since the output is immediately upon $2140/$F4 being read, rather than when the music is initialized.&lt;br /&gt;
&lt;br /&gt;
===Controller Test/World Class Service Super Nintendo Tester===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Controller Test || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x009319&amp;lt;/tt&amp;gt; (Controller Test Cassette)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x00BFFF&amp;lt;/tt&amp;gt; (SNES Burn-In Test Cartridge)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x00D8D2&amp;lt;/tt&amp;gt; (World Class Service Super Nintendo Tester &#039;&#039;(not used)&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| World Class Service Super Nintendo Tester &#039;&#039;(only build used across all tests)&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0B8068&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
These two sound driver builds (the one for the controller test being found in three different known testing cartridges, with one of them not used) merely have code optimizations in their sound code, thus making them completely identical execution-wise to the source build variant. In addition, the build used for World Class Service Super Nintendo Tester adds a BMI opcode in a readahead routine, but is otherwise identical.&lt;br /&gt;
&lt;br /&gt;
===Subpages===&lt;br /&gt;
{{Subpages}}&lt;br /&gt;
&lt;br /&gt;
Not created yet...&lt;br /&gt;
* [[N-SPC Engine/64WD Creation|64WD Creation]]&lt;br /&gt;
* [[N-SPC Engine/Advance Communication|Advance Communication]]&lt;br /&gt;
* [[N-SPC Engine/Aisystem Tokyo|Aisystem Tokyo]]&lt;br /&gt;
* [[N-SPC Engine/Argonaut|Argonaut]]&lt;br /&gt;
* [[N-SPC Engine/Axes Art Amuse|Axes Art Amuse]]&lt;br /&gt;
* [[N-SPC Engine/Bit Managers|Bit Managers]]&lt;br /&gt;
* [[N-SPC Engine/Capcom|Capcom]]&lt;br /&gt;
* [[N-SPC Engine/Chatnoir|Chatnoir]]&lt;br /&gt;
* [[N-SPC Engine/Chip Level Designs|Chip Level Designs]]&lt;br /&gt;
* [[N-SPC Engine/CP.BRAiN|CP.BRAiN]]&lt;br /&gt;
* [[N-SPC Engine/Cream|Cream]]&lt;br /&gt;
* [[N-SPC Engine/Crosstalk|Crosstalk]]&lt;br /&gt;
* [[N-SPC Engine/Cube|Cube]]&lt;br /&gt;
* [[N-SPC Engine/CUE|CUE]]&lt;br /&gt;
* [[N-SPC Engine/Culture Brain|Culture Brain]]&lt;br /&gt;
* [[N-SPC Engine/Daft|Daft]]&lt;br /&gt;
* [[N-SPC Engine/Data East|Data East]]&lt;br /&gt;
* [[N-SPC Engine/EJ Corporation|EJ Corporation]]&lt;br /&gt;
* [[N-SPC Engine/Electronic Arts|Electronic Arts]]&lt;br /&gt;
* [[N-SPC Engine/Falcom|Falcom]]&lt;br /&gt;
* [[N-SPC Engine/Funcom|Funcom]]&lt;br /&gt;
* [[N-SPC Engine/Gremlin|Gremlin]]&lt;br /&gt;
* [[N-SPC Engine/HAL|HAL]]&lt;br /&gt;
* [[N-SPC Engine/Hanari Exp|Hanari Exp]]&lt;br /&gt;
* [[N-SPC Engine/Hect|Hect]]&lt;br /&gt;
* [[N-SPC Engine/Hikoshi Hashimoto|Hikoshi Hashimoto]]&lt;br /&gt;
* [[N-SPC Engine/Home Data|Home Data]]&lt;br /&gt;
* [[N-SPC Engine/Human (earlier)|Human (earlier)]]&lt;br /&gt;
* [[N-SPC Engine/Human|Human]]&lt;br /&gt;
* [[N-SPC Engine/Imagesoft|Imagesoft]]&lt;br /&gt;
* [[N-SPC Engine/Infogrames|Infogrames]]&lt;br /&gt;
* [[N-SPC Engine/Intelligent Systems|Intelligent Systems]]&lt;br /&gt;
* [[N-SPC Engine/Japan Art Media|Japan Art Media]]&lt;br /&gt;
* [[N-SPC Engine/Jorudan|Jorudan]]&lt;br /&gt;
* [[N-SPC Engine/Kazuo Sawa|Kazuo Sawa]]&lt;br /&gt;
* [[N-SPC Engine/Kennosuke Suemura|Kennosuke Suemura]]&lt;br /&gt;
* [[N-SPC Engine/Khaos|Khaos]]&lt;br /&gt;
* [[N-SPC Engine/Koei|Koei]]&lt;br /&gt;
* [[N-SPC Engine/Konami|Konami]]&lt;br /&gt;
* [[N-SPC Engine/LaserSoft|LaserSoft]]&lt;br /&gt;
* [[N-SPC Engine/Make Software|Make Software]]&lt;br /&gt;
* [[N-SPC Engine/Metro|Metro]]&lt;br /&gt;
* [[N-SPC Engine/Mitsuhito Tanaka|Mitsuhito Tanaka]]&lt;br /&gt;
* [[N-SPC Engine/Monolith|Monolith]]&lt;br /&gt;
* [[N-SPC Engine/MSQ|MSQ]]&lt;br /&gt;
* [[N-SPC Engine/Namco|Namco]]&lt;br /&gt;
* [[N-SPC Engine/Naohisa Morota|Naohisa Morota]]&lt;br /&gt;
* [[N-SPC Engine/Natsume|Natsume]]&lt;br /&gt;
* [[N-SPC Engine/Nichibutsu or Make Software|Nichibutsu/Make Software]] (NOTE: Refers to three of the Super Nichibutsu Mahjong games)&lt;br /&gt;
* [[N-SPC Engine/Nova|Nova]]&lt;br /&gt;
* [[N-SPC Engine/Ocean|Ocean]]&lt;br /&gt;
* [[N-SPC Engine/Pure Sound|Pure Sound]]&lt;br /&gt;
* [[N-SPC Engine/Quest|Quest]]&lt;br /&gt;
* [[N-SPC Engine/Quintet|Quintet]]&lt;br /&gt;
* [[N-SPC Engine/Robert C. Ashworth|Robert C. Ashworth]]&lt;br /&gt;
* [[N-SPC Engine/Sakata SAS|Sakata SAS]]&lt;br /&gt;
* [[N-SPC Engine/Saurus|Saurus]]&lt;br /&gt;
* [[N-SPC Engine/Sunsoft|Sunsoft]]&lt;br /&gt;
* [[N-SPC Engine/Syscom|Syscom]]&lt;br /&gt;
* [[N-SPC Engine/System Sacom|System Sacom]]&lt;br /&gt;
* [[N-SPC Engine/Systemsoft|Systemsoft]]&lt;br /&gt;
* [[N-SPC Engine/T&#039;s Music|T&#039;s Music]]&lt;br /&gt;
* [[N-SPC Engine/TamTam|TamTam]]&lt;br /&gt;
* [[N-SPC Engine/Team X-Fade|Team X-Fade]]&lt;br /&gt;
* [[N-SPC Engine/Technos Japan|Technos Japan]]&lt;br /&gt;
* [[N-SPC Engine/Technosoft|Technosoft]]&lt;br /&gt;
* [[N-SPC Engine/Tecmo|Tecmo]]&lt;br /&gt;
* [[N-SPC Engine/Tose|Tose]]&lt;br /&gt;
* [[N-SPC Engine/Tsukasa Masuko|Tsukasa Masuko]]&lt;br /&gt;
* [[N-SPC Engine/Virgin|Virgin]]&lt;br /&gt;
* [[N-SPC Engine/Wave|Wave]]&lt;br /&gt;
* [[N-SPC Engine/Yoshikazu Yao|Yoshikazu Yao]]&lt;br /&gt;
* [[N-SPC Engine/Yoshiyuki Ishii|Yoshiyuki Ishii]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO: There are a lot of variants... these will be split into sub-pages depending on the modifications made&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
* [http://vgmpf.com/Wiki/index.php?title=Kankichi-kun Video Game Music Preservation Foundation - Kankichi-kun]&lt;br /&gt;
* [https://www.retroreversing.com/super-famicom-snes-development-kit/#intelligent-systems-shvc-development-system Retro Reversing - SNES (Super Famicom) Development Kit Hardware - Intelligent Systems SHVC Development System]&lt;br /&gt;
* [https://wiki.superfamicom.org/nintendo-music-format-(n-spc) Super Famicom Wiki - N-SPC]&lt;br /&gt;
* [http://gdri.smspower.org/wiki/index.php/Super_Famicom/Super_NES_Sound_Driver_List GDRI - Super Famicom/Super NES Sound Driver List]&lt;br /&gt;
* [https://github.com/vgmtrans/vgmtrans/issues/173 Github - N-SPC VCMD $FB-$FE identifications]&lt;br /&gt;
* [https://archive.org/details/GameBoyProgManVer1.1/page/n187/mode/2up Game Boy Development Manual - Super Game Boy Sound] (see pages 187-213)&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Koji_Kondo/Prototype&amp;diff=13730</id>
		<title>N-SPC Engine/Nintendo/Koji Kondo/Prototype</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Koji_Kondo/Prototype&amp;diff=13730"/>
		<updated>2024-01-07T18:42:53Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: /* Instrument Format */ Removed an accidentally included fractional pitch base multiplier from the instrument section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Go back to [[N-SPC Engine/Nintendo/Koji Kondo]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
The Prototype variant was used in two games: Super Mario World and Pilotwings. They are the only versions of the code that clearly pre-date the source code version provided with the IS-Sound unit. From a sound effect programming point of view, it can also be considered a predecessor to five other games that post-date the source code: SimCity, Legend of Zelda - A Link to the Past/Zelda no Densetsu - Kamigami no Triforce, Star Fox/Star Wing, Super Mario All-Stars/Super Mario Collection and Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Music Version !! VCMD Table Location ($DA and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Super Mario World || 0.0 || &amp;lt;tt&amp;gt;0x0F90&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0EDC&amp;lt;/tt&amp;gt; (all other versions)&amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;0x0FC4&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0F10&amp;lt;/tt&amp;gt; (Super Mario All Stars + Super Mario World) || &amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all other versions)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x4E8000&amp;lt;/tt&amp;gt; (Super Mario All-Stars + Super Mario World)&lt;br /&gt;
|-&lt;br /&gt;
| Pilotwings || 0.1 || &amp;lt;tt&amp;gt;0x1317&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x1263&amp;lt;/tt&amp;gt; (US and Japanese versions)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x12B4&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x1200&amp;lt;/tt&amp;gt; (European version) || &amp;lt;tt&amp;gt;0x0C8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The build difference between the standalone Super Mario World and its variant in Super Mario All-Stars is an extra command for $2141/$F5: $F0. This command zeroes out the echo volume DSP registers, keys off all notes, zeroes out several memory locations then activates and jumps to the IPL boot program. The copy itself used for the $FF command is stored at $FE00 rather than in the middle of the program.&lt;br /&gt;
&lt;br /&gt;
The build difference between the other versions and the European version of Pilotwings is similar to Super Mario All Stars and Super Mario World, except it&#039;s more like a complete replacement since it changes the operation of the $FF command for $2141/$F5. The echo volume DSP registers are zeroed out, all notes are keyed off, the EON register is cleared, echo writes are disabled, then we activate and jump to the IPL boot program instead of using a variant of it embedded in the program.&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Prototype/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
The communication protocol is game-specific. Both games have dedicated uses for each CPUIO register.&lt;br /&gt;
&lt;br /&gt;
===Super Mario World===&lt;br /&gt;
====CPUIO0 ($2140/$F4)====&lt;br /&gt;
This register controls the SFX to play on channel 5.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%0xxxxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; || Play SFX Sequence Set 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%1???????&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; || Hurry Up!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Play SFX Sequence Set 1 (Command &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; is the SFX ID to play. The ID currently playing is echoed back to $2140 on the SNES.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; mutes the amplifiers and pauses the music once it finishes playing. Any SFX from SFX Sequence 1 will unpause the music and unmute the amplifiers, while any noise SFX from SFX Sequence Set 2 will unmute the amplifiers, but not unpause the music.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; do not permit the Hurry Up! SFX command to be played until it is finished. They also cannot be interrupted, except by &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; VCMD for this set only is programmed to restart the SFX from the beginning.&lt;br /&gt;
&lt;br /&gt;
======SFX Sequence Format======&lt;br /&gt;
See the [[N-SPC Engine/Prototype/SFX Sequence Format|SFX Sequence Format]] subpage.&lt;br /&gt;
&lt;br /&gt;
=====Hurry Up! (Command &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Plays SFX ID &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; on both SFX sequence sets and offsets the tempo by &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; without overflow checks. This can stack if it is played multiple times, but only the first one will remain in effect until forced off.&lt;br /&gt;
&lt;br /&gt;
====CPUIO1 ($2141/$F5)====&lt;br /&gt;
This register controls the SFX on channel 8 and the Yoshi drums on channel 6.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Jump&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Enable Yoshi Drums&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Disable Yoshi Drums&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Two-Note SFX&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05-$EF&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Go to IPL Boot ROM (All-Stars variant only)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1-$FE&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Load New Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$05-$EF&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F1-$FE&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Jump (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Plays Mario&#039;s jumping SFX on channel 8. The value is echoed back to the SNES via $2141 while the SFX is playing.&lt;br /&gt;
&lt;br /&gt;
=====Enable Yoshi Drums (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Enables Yoshi drums. This is not echoed back to the SNES.&lt;br /&gt;
&lt;br /&gt;
Yoshi drums are only supported on music IDs &amp;lt;tt&amp;gt;$01-$03&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt;. Channel 6 is set to SFX instrument ID &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; if this is true.&lt;br /&gt;
&lt;br /&gt;
=====Disable Yoshi Drums (Command &amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Disables Yoshi drums. This is not echoed back to the SNES.&lt;br /&gt;
&lt;br /&gt;
=====Two-Note SFX (Command &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Plays two notes on channel 8. The value is echoed back to the SNES via $2141 while the SFX is playing.&lt;br /&gt;
&lt;br /&gt;
=====Go to IPL Boot ROM (Command &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
This only works in the build variant used in Super Mario All Stars + Super Mario World.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO go into specifics on what exactly is cleared out here before going to the loader&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====Load New Data (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&#039;&#039;TODO go into specifics on what exactly is cleared out here before going to the loader&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
See [[N-SPC_Engine#Load_New_Data_.28Command_.24FF.29|the source build&#039;s Load New Data command]] for the loading protocol, as it is identical binary-wise to the copy used in this one minus the *Ver S1.20* string.&lt;br /&gt;
&lt;br /&gt;
====CPUIO2 ($2142/$F6)====&lt;br /&gt;
This register controls the music.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%0xxxxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt; || Play Music&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%1???????&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; || Fade Out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Play Music (Command &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; is the music ID to play. The ID currently playing is echoed back to $2142 on the SNES.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$09-$0C&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt; reset the tempo speedup effect done by the Hurry Up! command.&lt;br /&gt;
&lt;br /&gt;
=====Fade Out (Command &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;%1???????&amp;lt;/pre&amp;gt; &lt;br /&gt;
Fades out the music by sliding the song volume to zero over 240 tempo ticks.&lt;br /&gt;
&lt;br /&gt;
====CPUIO3 ($2143/$F7)====&lt;br /&gt;
This register controls the SFX to play on channel 7.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$FF&amp;lt;/tt&amp;gt; || Play SFX Sequence Set 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Play SFX Sequence Set 2 (Command &amp;lt;tt&amp;gt;$01-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the SFX ID to play. The ID currently playing is echoed back to $2143 on the SNES.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$24&amp;lt;/tt&amp;gt; cannot be interrupted by any other instances. In order of priority, though, &amp;lt;tt&amp;gt;$24&amp;lt;/tt&amp;gt; can interrupt &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt;, which in turn can interrupt &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; VCMD for this set only is programmed to move the pointer back one byte instead of forward.&lt;br /&gt;
&lt;br /&gt;
======SFX Sequence Format======&lt;br /&gt;
See the [[N-SPC Engine/Prototype/SFX Sequence Format|SFX Sequence Format]] subpage.&lt;br /&gt;
&lt;br /&gt;
===Pilotwings===&lt;br /&gt;
====CPUIO0 ($2140/$F4)====&lt;br /&gt;
This register plays the music and controls the BRR wind noise.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%xyyzzzzz&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$FE&amp;lt;/tt&amp;gt; || Play Music/BRR Wind Noise Frequency&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Fade Out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Play Music/BRR Wind Noise Frequency (Command &amp;lt;tt&amp;gt;$01-$FE&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;u&amp;gt;Input&amp;lt;/u&amp;gt;&amp;lt;pre&amp;gt;%xyzaaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Output&amp;lt;/u&amp;gt;&amp;lt;pre&amp;gt;%000aaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
Plays a piece of music.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; disables BRR wind noise playback on channel 8. This is forced on IDs &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; if &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;%y&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;%z&amp;lt;/tt&amp;gt; are all zero.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%y&amp;lt;/tt&amp;gt;, with &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; cleared, enables a higher-frequency wind noise. This takes precedence over &amp;lt;tt&amp;gt;%z&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%z&amp;lt;/tt&amp;gt;, with &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; cleared, enables a lower-frequency wind noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%aaaaa&amp;lt;/tt&amp;gt; is the music ID. If zero, then the music will keep playing normally. Although the absolute limit is &amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt;, in reality it&#039;s &amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt; because the song table only goes that high up ID-wise. The ID currently playing is echoed back to $2140 on the SNES.&lt;br /&gt;
&lt;br /&gt;
=====Fade Out (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Fades out the music by sliding the song volume to zero over 192 tempo ticks.&lt;br /&gt;
&lt;br /&gt;
====CPUIO1 ($2141/$F5)====&lt;br /&gt;
This register controls the sound effects in channels 3 and 8.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;xy&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$FE&amp;lt;/tt&amp;gt; || Play SFX Sequence&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Load Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Play SFX Sequence (Command &amp;lt;tt&amp;gt;$01-$FE&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;u&amp;gt;Input&amp;lt;/u&amp;gt;&amp;lt;pre&amp;gt;xy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Output&amp;lt;/u&amp;gt;&amp;lt;pre&amp;gt;0y&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Two SFX can be triggered at once. Plus, each one has its own SFX collection to use.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; is a four-bit/one nibble SFX ID for channel 8.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$E&amp;lt;/tt&amp;gt; mutes all other channels sound upon playing the SFX (including the music, which causes new values to not be acknowledged). Any other ID played afterwards unmutes the music. This also cannot be interrupted by other SFX value entered here except for &amp;lt;tt&amp;gt;$F&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$1&amp;lt;/tt&amp;gt; cannot be interrupted by other SFX in this same area except for &amp;lt;tt&amp;gt;$E&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$F&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$5&amp;lt;/tt&amp;gt; plays nothing, although it still works for unmuting music and other channels.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; is a four-bit/one nibble SFX ID for channel 3. The ID currently playing is echoed back to $2141 on the SNES.&lt;br /&gt;
** Some SFX are not interruptible. In order of uninterruptibility priority with other SFX IDs, we have &amp;lt;tt&amp;gt;$A&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$7&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$5&amp;lt;/tt&amp;gt; is allowed to overwrite &amp;lt;tt&amp;gt;$7&amp;lt;/tt&amp;gt; in this instance), then &amp;lt;tt&amp;gt;$9&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$F&amp;lt;/tt&amp;gt; plays nothing.&lt;br /&gt;
&lt;br /&gt;
======SFX Sequence Format======&lt;br /&gt;
See the [[N-SPC Engine/Prototype/SFX Sequence Format|SFX Sequence Format]] subpage.&lt;br /&gt;
&lt;br /&gt;
=====Load Data (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
The operation is slightly different depending on what build you&#039;re using. Both clean up DSP registers first: specifically by keying off all notes and zeroing out the EVOL DSP registers, along with disabling echo writes. Additionally, the European version clears out the EON DSP register, and the other versions mute the amplifier until the loading routine exits.&lt;br /&gt;
&lt;br /&gt;
The European version jumps directly to the IPL Boot ROM, while all other versions instead use a modified copy.&lt;br /&gt;
&lt;br /&gt;
See [[N-SPC_Engine#Load_New_Data_.28Command_.24FF.29|the source build&#039;s Load New Data command]] command for the loading protocol for the non-European versions, as it is identical binary-wise to the copy used in this one minus the *Ver S1.20* string.&lt;br /&gt;
&lt;br /&gt;
====CPUIO2 ($2142/$F6)====&lt;br /&gt;
This controls the aircraft engine noise in channels 5 and 6.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%0xyyyyyy&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt; || Engine Control&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%10xxxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$80-$BF&amp;lt;/tt&amp;gt; || Break&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%11??????&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$C0-$FE&amp;lt;/tt&amp;gt; || Skid&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Stop Engine&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Engine Control (Command &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xyyyyyy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The current engine value is echoed back to $2142 on the SNES.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt;, when starting the aircraft engine, determines what kind of noise it makes. A different command (other than NOP) must be used before changing the engine noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyyyyy&amp;lt;/tt&amp;gt; controls the engine noise frequency.&lt;br /&gt;
&lt;br /&gt;
=====Break (Command &amp;lt;tt&amp;gt;$80-$BF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;%10xxxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxx&amp;lt;/tt&amp;gt; only does something different when set to &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;, which is a slight pitch variant. Otherwise, there&#039;s not much control here.&lt;br /&gt;
&lt;br /&gt;
=====Skid (Command &amp;lt;tt&amp;gt;$C0-$FE&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;%11??????&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Stop Engine (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Basically acts as a reset for the aircraft engine back to default settings, in addition to stopping it.&lt;br /&gt;
&lt;br /&gt;
====CPUIO3 ($2143/$F7)====&lt;br /&gt;
This controls a couple of pieces of miscellaneous SFX on channel 4. The ID currently playing is echoed back to $2143 on the SNES.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$03-$FF&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Engine-Controlled SFX&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Beep&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$03-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Engine-Controlled SFX (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Plays a fixed sequence of notes on channel 4 at a variable note length controlled by the engine frequency that goes faster the higher the frequency. Only works with a CPUIO2 value of &amp;lt;tt&amp;gt;$02-$11&amp;lt;/tt&amp;gt;: otherwise, it&#039;s a NOP.&lt;br /&gt;
&lt;br /&gt;
The note length used is defined as &amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt; minus the frequency of the engine shifted right. This value is decremented twice on the last note.&lt;br /&gt;
&lt;br /&gt;
=====Beep (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Plays a single note on channel 4. No other conditions are required here.&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
Compared to common N-SPC, this is mostly the same, except it is missing the pitch base fractional multiplier, and V0.0 doesn&#039;t have noise support. Otherwise, it&#039;s the same as before, defined as following...&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;yy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.1&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;%xyyyyyyy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; is a noise clock switch. This is only valid in V0.1.&lt;br /&gt;
** If set, noise is used and &amp;lt;tt&amp;gt;%??yyyyy&amp;lt;/tt&amp;gt; represents the noise clock rate.&lt;br /&gt;
** If cleared, &amp;lt;tt&amp;gt;%0yyyyyyy&amp;lt;/tt&amp;gt; (or just &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; for V0.0) is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
&lt;br /&gt;
==Percussion Format==&lt;br /&gt;
Percussion is stored separately from the instrument format in the prototype version, because its format is nearly identical to an instrument, but it contains an extra byte at the end that defines the note to play. Thus, these bytes are defined as following...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;yy zz aa bb cc dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.1&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;%xyyyyyyy zz aa bb cc dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; is a noise clock switch. This is only valid in V0.1.&lt;br /&gt;
** If set, noise is used and &amp;lt;tt&amp;gt;%??yyyyy&amp;lt;/tt&amp;gt; represents the noise clock rate.&lt;br /&gt;
** If cleared, &amp;lt;tt&amp;gt;%0yyyyyyy&amp;lt;/tt&amp;gt; (or just &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; for V0.0) is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is the note to play the percussion note at.&lt;br /&gt;
&lt;br /&gt;
==Phrase Format==&lt;br /&gt;
Song entries, stored as [[little endian]] pointers, point to a list of phrases for the song to play. This is mostly identical to standard N-SPC, except it doesn&#039;t have fast forward commands.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt; || End of Song ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%0xxxxxxx $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$7F $00&amp;lt;/tt&amp;gt;|| Jump x Times || &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%1??????? $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$80-$FF $00&amp;lt;/tt&amp;gt; || Always Jump || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || Play Pattern || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Play Pattern===&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a set of eight pointers to track data, one for each channel.&lt;br /&gt;
&lt;br /&gt;
====Pattern Entry Format====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. If the pointer is zero, there is no track data.&lt;br /&gt;
&lt;br /&gt;
===End of Song (Command &amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$00 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Terminates the song.&lt;br /&gt;
&lt;br /&gt;
===Jump x Times (Command &amp;lt;tt&amp;gt;$01-$7F $00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx $00 yy yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; is the number of times to jump.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
===Always Jump (Command &amp;lt;tt&amp;gt;$80-$FF $00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%1??????? $00 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
The IDs are different due to being an earlier version, and some VCMDs may not be defined yet. The ones that are used are listed below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Phrase Termination/End of Subroutine ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; || Note Duration || &amp;lt;tt&amp;gt;xy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80-$C5&amp;lt;/tt&amp;gt; || Note || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$C6&amp;lt;/tt&amp;gt; || Tie || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$C7-$CF&amp;lt;/tt&amp;gt; || Rest || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$D0-$D9&amp;lt;/tt&amp;gt; || Percussion || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DA&amp;lt;/tt&amp;gt; || Instrument || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DB&amp;lt;/tt&amp;gt; || Panning  || &amp;lt;tt&amp;gt;%xyzzzzz&amp;lt;/tt&amp;gt;  &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DC&amp;lt;/tt&amp;gt; || Panning Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DD&amp;lt;/tt&amp;gt; || Pitch Slide to Note || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DE&amp;lt;/tt&amp;gt; || Vibrato On || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DF&amp;lt;/tt&amp;gt; || Vibrato Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt; || Song Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt; || Song Volume Fade || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt; || Tempo || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt; || Tempo Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt; || Global Absolute Transposition || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E5&amp;lt;/tt&amp;gt; || Tremolo On || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E6&amp;lt;/tt&amp;gt; || Tremolo Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E7&amp;lt;/tt&amp;gt; || Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E8&amp;lt;/tt&amp;gt; || Volume Fade || &amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E9&amp;lt;/tt&amp;gt; || Subroutine || &amp;lt;tt&amp;gt;xx xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EA&amp;lt;/tt&amp;gt; || Vibrato Fade In || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt; || Note Pitch Envelope To || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EC&amp;lt;/tt&amp;gt; || Note Pitch Envelope From || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Invalid (supposed to be Note Pitch Envelope Off) || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Fine Tune || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Echo Enable Bits and Volume || &amp;lt;tt&amp;gt;%xxxxxxxx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Echo Off || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Echo Parameter Setup || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Echo Volume Fade || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F3-$FF&amp;lt;/tt&amp;gt; || Invalid || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO use a template for the above table for standard VCMDs&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Most of these essentially act identically to the common versions (refer back to the main page for info on those), but two of the VCMDs don&#039;t work properly: Note Pitch Envelope Off, which has a zeroed out pointer but the code does exist, and Tremolo On, which has a memory location definition bug for one of the parameters that conflicts with an internal value utilized by the tremolo, causing constant overwriting and making the command not work in general.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;br /&gt;
[[Category:N-SPC Variants]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=9790</id>
		<title>David Whittaker Sound Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=9790"/>
		<updated>2023-09-23T22:05:18Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Adding info for a second build found in World Class Rugby&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;David Whittaker Sound Engine&#039;&#039;&#039; is a sound driver for the SPC700 programmed by David Whittaker.&lt;br /&gt;
&lt;br /&gt;
Many games have multiple different builds stored in the game at once, sometimes with code differences. Almost every single game has at least one unique build not shared by any of the other games: the exceptions are...&lt;br /&gt;
* The opening logos for &#039;&#039;Lemmings 2: The Tribes&#039;&#039; and &#039;&#039;Apocalypse II&#039;&#039;&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; Beta&#039;s Title Screen and &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039;&#039; US Beta&lt;br /&gt;
* &#039;&#039;Lemmings 2: The Tribes&#039;&#039; &#039;  most common build and &#039;&#039;Riddick Bowe Boxing&#039;&#039;&#039;s Japanese version&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[David Whittaker Sound Engine/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
These are the games where the sound engine was used:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Version !! VCMD Code Location !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Dream TV&#039;&#039; || 0.0 (Beta 2)&amp;lt;br&amp;gt;2.1 (all other versions) || &amp;lt;tt&amp;gt;0x098A&amp;lt;/tt&amp;gt; (Beta 2)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x0196A2&amp;lt;/tt&amp;gt; (Beta 2, uncompressed)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x039B16&amp;lt;/tt&amp;gt; (all other versions, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; || 1.0 || &amp;lt;tt&amp;gt;0x04F1&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Kick Off/Super Kick Off&#039;&#039; || 1.0 || &amp;lt;tt&amp;gt;0x04E6&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x098000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Batman: Revenge of the Joker&#039;&#039; || 2.0 || &amp;lt;tt&amp;gt;0x0610&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x068000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Super SWIV/Firepower 2000&#039;&#039; || 2.2 || &amp;lt;tt&amp;gt;0x06AD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x158000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Gods&#039;&#039; || 2.3 || &amp;lt;tt&amp;gt;0x0500&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0600&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0612&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x980000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x98AFAC&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x99D448&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x9A8000&amp;lt;/tt&amp;gt; (all versions, three unique build variants, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;World Class Rugby&#039;&#039; || 2.3 || &amp;lt;tt&amp;gt;0x0608&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;N/A&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x021D64&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0B8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Battle Cars&#039;&#039; || 3.0 || &amp;lt;tt&amp;gt;0x0717&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0A8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Chavez/Riddick Bowe Boxing&#039;&#039; || 3.0 (US version)&amp;lt;br&amp;gt;3.1 (all other versions) || &amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt; (Japanese version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067C&amp;lt;/tt&amp;gt; (US version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067D&amp;lt;/tt&amp;gt; (Chavez) || &amp;lt;tt&amp;gt;0x0D8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions except &#039;&#039;Chavez&#039;&#039;)&amp;lt;br&amp;gt;(three unique build variants, one per version between &#039;&#039;Chavez&#039;&#039;, US &amp;amp; Japanese versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; (US beta)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x06A4&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x9C8000&amp;lt;/tt&amp;gt; (all versions except US beta)/&amp;lt;tt&amp;gt;0x9E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Apocalypse II&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0624&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x118000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x168000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x0601&amp;lt;/tt&amp;gt; (US and European version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x060B&amp;lt;/tt&amp;gt; (US and Japanese version Title Screen)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0704&amp;lt;/tt&amp;gt; (Japanese version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x070B&amp;lt;/tt&amp;gt; (European version Title Screen) || &amp;lt;tt&amp;gt;0x1B8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x08D500&amp;lt;/tt&amp;gt; (US &amp;amp; Japanese version)/&amp;lt;tt&amp;gt;0x08D550&amp;lt;/tt&amp;gt; (European beta version)/&amp;lt;tt&amp;gt;0x08D640&amp;lt;/tt&amp;gt; (European version)&amp;lt;br&amp;gt;(Four unique build variants: two Title Screen (US/JP compared to EU) and two In-Game (US/EU compare to JP))&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Kick Off 3&#039;&#039; (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x0658&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1A8000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x1D8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Lemmings 2: The Tribes&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x060F&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0697&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 16 copies of the code in the ROM, with five different build variants being present: four of them are used in one instance each, that being the opening logo, the Title Screen, the Beach Tribe and the Cavelem Tribe, and the others use a single common copy of the code with modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06CA&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 36 copies of the code in the ROM, none of which are unique except for the sound data and modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Shaq Fu&#039;&#039; || 4.0a || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD96408&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Michael Jordan: Chaos in the Windy City&#039;&#039; || 4.0b || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD2B18F&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
Each command is triggered by sending the parameters to $2141-$2143 first, then the command ID to $2140. The latches are cleared afterwards on all registers, which means the same command IDs can be sent again, provided the parameters are present.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
====V0.0====&lt;br /&gt;
There is no acknowledgement to the SNES beyond the latches being cleared.&amp;lt;br&amp;gt;&lt;br /&gt;
====V1.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140-$2142 are updated every time a command ID is sent, and $2143 is updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz %00000abc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a parameter that was sent to $2141 to execute the command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%a&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 7.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%b&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 8.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%c&amp;lt;/tt&amp;gt; indicates that music is playing.&lt;br /&gt;
&lt;br /&gt;
====V2.0-V4.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141, and the internal command counter is initialized to the same value.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140 is updated every time a command ID is sent, and $2141-$2143 are updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&lt;br /&gt;
=====V2.0-V4.0a=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx %yyyyyyyy zz %aaaaaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyyyyyyy&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing a note for music. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%aaaaaaaa&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing SFX. These bits are cleared only when the SFX has elapsed all of its ticks, not when the sample is done playing if non-looping. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====V4.0b=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V0.0-V1.0)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$06 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$07 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Main Volume || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09-$FF&amp;lt;/tt&amp;gt; || Latch Clear || &amp;lt;tt&amp;gt;$09-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V2.0-V4.0a)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 1) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 2) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Play SFX (Channel 3) || &amp;lt;tt&amp;gt;$06 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Play SFX (Channel 4) || &amp;lt;tt&amp;gt;$07 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Play SFX (Channel 5) || &amp;lt;tt&amp;gt;$08 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;$09 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$0A xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$0B xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$0C ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$0D ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; || Main &amp;amp; Echo Volume || &amp;lt;tt&amp;gt;$0E xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; || Echo Feedback || &amp;lt;tt&amp;gt;$0F xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; || Go to IPL Boot Program || &amp;lt;tt&amp;gt;$10 ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$11 xx ?? ??&amp;lt;/tt&amp;gt; || 2.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 1) || &amp;lt;tt&amp;gt;$12 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 2) || &amp;lt;tt&amp;gt;$13 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 3) || &amp;lt;tt&amp;gt;$14 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 4) || &amp;lt;tt&amp;gt;$15 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 5) || &amp;lt;tt&amp;gt;$16 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 6) || &amp;lt;tt&amp;gt;$17 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 7) || &amp;lt;tt&amp;gt;$18 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 8) || &amp;lt;tt&amp;gt;$19 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 1) || &amp;lt;tt&amp;gt;$1A xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 2) || &amp;lt;tt&amp;gt;$1B xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 3) || &amp;lt;tt&amp;gt;$1C xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 4) || &amp;lt;tt&amp;gt;$1D xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 5) || &amp;lt;tt&amp;gt;$1E xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 6) || &amp;lt;tt&amp;gt;$1F xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 7) || &amp;lt;tt&amp;gt;$20 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 8) || &amp;lt;tt&amp;gt;$21 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$22-$23 xx yy ??&amp;lt;/tt&amp;gt; || 4.0a&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$24-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$24-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V4.0b)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Stop All SFX || &amp;lt;tt&amp;gt;$05 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Main Volume || &amp;lt;tt&amp;gt;$06 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$07 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$09 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Stop Music &amp;amp; Load New Data || &amp;lt;tt&amp;gt;$0A ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$0B ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Panning Separation || &amp;lt;tt&amp;gt;$0C xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$0D-$FF ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Latch Clear/Increment Counter===&lt;br /&gt;
Clears the latches on the CPUIO registers and does nothing else except increment the counter on V2.0 and up, thus making this effectively a NOP. This occurs on almost all invalid command IDs: there is exactly one exception, noted under Invalid.&lt;br /&gt;
&lt;br /&gt;
===Invalid (Command &amp;lt;tt&amp;gt;$22&amp;lt;/tt&amp;gt; - Porky Pig&#039;s Haunted Holiday (beta) only)===&lt;br /&gt;
Crashes the sound driver. The only game that can do this is Porky Pig&#039;s Haunted Holiday (beta), and it is because it jumps directly to a RET opcode on an empty stack, thus causing a stack underflow and a jump to a memory location not used for code.&lt;br /&gt;
&lt;br /&gt;
===NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$01 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the music ID.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid music IDs from being played.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command because it effectively turns it into a NOP:&lt;br /&gt;
* &#039;&#039;Apocalypse II&#039;&#039; (Opening logo)/&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Opening logo)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (Beta) (In-Game)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Play SFX (Command &amp;lt;tt&amp;gt;$04-$05&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$04-$0B&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yz ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Plays a piece of SFX.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V0.0-V1.0:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channels 1-6: Not supported&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V2.0-V4.0a:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channel 1: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 2: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 3: &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 4: &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 5: &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 6: &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** V4.0b instead dynamically allocates the channel that the SFX is played on across channels 5-8, and has a fixed ID of &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the SFX ID. Setting the highest bit (covering IDs &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;) keys off the SFX instead of playing it.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid SFX IDs from being played, and only accept &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; as an ID to key off SFX on that channel. V4.0b doesn&#039;t support &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; at all.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;z&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** &#039;&#039;Dream TV&#039;&#039; (beta and final): &#039;&#039;&#039;2X&#039;&#039;&#039;&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Batman: Revenge of the Joker&#039;&#039;, &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;, &#039;&#039;Michael Jordan Chaos in the Windy City&#039;&#039; &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, &#039;&#039;Shaq-Fu&#039;&#039;, &#039;&#039;Super SWIV/Firepower 2000&#039;&#039;: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* &#039;&#039;Gods&#039;&#039; (Ending)&lt;br /&gt;
&lt;br /&gt;
====SFX Data Format====&lt;br /&gt;
Each SFX entry is a pointer to a 14-byte entry containing a series of parameters to utilize on a per-SFX basis. Only one channel&#039;s worth is defined here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc dd ee ff gg hh ii jj kk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to play the SFX for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to slide pitches before resetting and doing the slide again.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a starting value for either the PITCHL DSP register or a noise frequency.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a starting value for the PITCHH DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is the offset to apply to either the PITCHL DSP register or noise frequency per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a offset to apply to the PITCHH DSP register per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a direct write to the SRCN DSP register. &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; and up instead cause this to use noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; modifies the pitch using RNG using a non-zero value (except for V3.0 and up, this value is any non-zero value). How it is modified depends on the version.&lt;br /&gt;
** V0.0-V2.0 overwrites the pitch settings and instead uses two bytes of RNG values for the pitch on a per-step basis.&lt;br /&gt;
** V2.1 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the high byte of the final pitch output on a per-step basis.&lt;br /&gt;
** V2.2 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
** V2.3 does nothing.&lt;br /&gt;
** V3.0 and up apply a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff&amp;lt;/tt&amp;gt; defines the sign for the pitch offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; turns off pitch slides for the SFX.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; apply a positive offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; apply a negative offset.&lt;br /&gt;
* &amp;lt;tt&amp;gt;gg&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to perform the pitch slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;hh&amp;lt;/tt&amp;gt; is a direct write to the ADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt; is a direct write to the ADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;jj&amp;lt;/tt&amp;gt; is generally an endless flag, but its operation differs between versions.&lt;br /&gt;
** For V0.0-V4.0a, when this value is non-zero, it causes the SFX to be played endlessly until keyed off or interrupted. It also causes pitch slides to run forever.&lt;br /&gt;
** For V4.0b, this acts as SFX priority. If all four channels are being used for SFX and the priority of the incoming SFX is greater than the SFX currently played, then the SFX is overwritten. The SFX plays forever if this value is greater than &amp;lt;tt&amp;gt;$7F&amp;lt;/tt&amp;gt;, like what is done in V0.0-V4.0a.&lt;br /&gt;
* &amp;lt;tt&amp;gt;kk&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) per step.&lt;br /&gt;
&lt;br /&gt;
===Stop All SFX (Command &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops all SFX from playing in channels 5-8.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at maximum tempo... which means every ten timer 0 ticks. This is equivalent to a tempo of 256.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at normal tempo.&lt;br /&gt;
&lt;br /&gt;
===Main &amp;amp; Echo Volume (Command &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V1.0), &amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the MVOLL and MVOLR DSP registers.&lt;br /&gt;
** V2.0 and up may also set the EVOLL and EVOLR DSP registers, but only if echo is supported in that build. It is always scaled by the main volume. The scaler multiplier (actually done with shifts) is as following, sorted by build...&lt;br /&gt;
*** &#039;&#039;Batman: Revenge of the Joker&#039;&#039;: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Dream TV&#039;&#039;: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Gods&#039;&#039; (all builds): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;World Class Rugby&#039;&#039; (Outside of a game): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (Driving): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Cavelem Tribe): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Echo Feedback (Command &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0F xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the EFB DSP register.&lt;br /&gt;
&lt;br /&gt;
This is only ever supported if echo is supported in the ROM. That means only these builds support this command:&lt;br /&gt;
* &#039;&#039;Batman: Revenge of the Joker&#039;&#039;&lt;br /&gt;
* &#039;&#039;Dream TV&#039;&#039;&lt;br /&gt;
* &#039;&#039;Gods&#039;&#039; (all builds)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (Outside of a game)&lt;br /&gt;
* &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (Driving)&lt;br /&gt;
* &#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Cavelem Tribe)&lt;br /&gt;
&lt;br /&gt;
These other games have a reference for the ID, but effectively make it a NOP:&lt;br /&gt;
* &#039;&#039;Battle Cars&#039;&#039;&lt;br /&gt;
* &#039;&#039;Riddick Bowe Boxing/Chavez&#039;&#039; (all versions except Japanese)&lt;br /&gt;
* &#039;&#039;Shaq-Fu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Go to IPL Boot Program (Command &amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
Jumps directly to the [[SPC700/IPL ROM|IPL Boot Program]].&lt;br /&gt;
&lt;br /&gt;
===Set Tempo (Command &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; (V2.1-V2.2, V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$11 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the tempo to set the song at. This overwrites the song&#039;s tempo settings.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
===Set SFX Volume (Command &amp;lt;tt&amp;gt;$12-$19&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii ?? xy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Michael Jordan Chaos in the Windy City&#039;&#039; &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Set SFX Pitch (Command &amp;lt;tt&amp;gt;$1A-$21&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; overwrites the PITCHL value used in the SFX data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; overwrites the PITCHH value used in the SFX data.&lt;br /&gt;
&lt;br /&gt;
This command is only supported in the following builds...&lt;br /&gt;
* &#039;&#039;Battle Cars&#039;&#039;&lt;br /&gt;
* &#039;&#039;World Cup Striker&#039;&#039; (European version) (Title Screen)&lt;br /&gt;
* &#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; (European version) (In-Game)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (beta) (In-Game)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (beta) (Title Screen)&lt;br /&gt;
* &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (beta)&lt;br /&gt;
* &#039;&#039;Shaq-Fu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Not all IDs are supported in these builds...&lt;br /&gt;
* &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (In-Game) &#039;&#039;(does not support $1A-$1D, not even in the code)&#039;&#039;&lt;br /&gt;
* &#039;&#039;World Cup Striker (Japanese)&#039;&#039; (In-Game) &#039;&#039;(skips over $1A-$1D via a longer branding distance, though the code still exists)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; (V4.0a), &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Loads new data from the SNES using an IPL Boot ROM variant.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol should be nearly identical to IPL Boot ROM with a few differences or so, since the program seems like it&#039;s using a similar variant)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Stop Music &amp;amp; Load New Data (Command &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops the music, then loads new data from the SNES using an IPL Boot ROM variant.&lt;br /&gt;
&lt;br /&gt;
===Panning Separation (Command &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0C xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; sets the amount that the panning will influence the left and right volumes. The maximum is zero, while the minimum is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;, making it effectively mono.&lt;br /&gt;
&lt;br /&gt;
==Song Entry==&lt;br /&gt;
For each song entry in an array of song definitions, one byte is defined as a starting tempo, followed by a series of pointers defined [[little endian]] style for each channel. For &#039;&#039;Dream TV&#039;&#039; Beta and &#039;&#039;Kick Off&#039;&#039;, only five pointers are defined. For &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;, only six pointers are defined. For all other games, eight pointers are defined.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (&#039;&#039;Dream TV Beta&#039;&#039; and &#039;&#039;Kick Off&#039;&#039;)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee ff ff&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting tempo.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. &#039;&#039;(&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; only pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff ff&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Three builds don&#039;t support song entries at all:&lt;br /&gt;
* The opening logos for &#039;&#039;Lemmings 2: The Tribes&#039;&#039; and &#039;&#039;Apocalypse II&#039;&#039;&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; Beta (In-Game)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039; (During a game)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;World Class Rugby&#039;&#039; (During a game) also doesn&#039;t support the music format at all since the code was removed.&lt;br /&gt;
&lt;br /&gt;
==Pattern Order List==&lt;br /&gt;
Each channel has a list of [[little endian]] pointers on a per-channel basis. If the pointer is zero, then you jump back to either the beginning of the pattern order list for that channel, or to the loop marker that was set by the $F5 VCMD.&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format at V0.0 is N-SPC/Kankichi-kun compatible minus noise support for SRCN values above 127. Post V1.0, one of the bytes loses its usage.&lt;br /&gt;
&lt;br /&gt;
The instrument format is defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0-V1.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz ?? bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register... but only for V1.0 and older. Otherwise, it&#039;s an unused byte.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt; || Note || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;%011xxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt; || Note Length || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Instant Pitch Change to Note || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0a only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Set Main Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0b only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Volume Scaler by Fraction ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Set ADSR ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Fine Tune ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Pitch Bend ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Pitch Envelope ID ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || L/R Voice Volume ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt; || Tempo ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt; || Jump to Pattern in Order List + Mark Loop Point ||&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt; || Key Off || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt; || One Note Delay || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt; || Instrument ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt; || Absolute Global Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt; || Absolute Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt; || Song End || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Pattern End || || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMDs &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (pre-V4.0), &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; (pre-V3.0), &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; (pre-V2.0), &amp;lt;tt&amp;gt;$F0-$F1&amp;lt;/tt&amp;gt; (pre-V1.0))===&lt;br /&gt;
The sound driver deliberately freezes itself via an infinite branch always loop rather than crashing or skipping the byte. This also takes up VCMD slots that are not filled in earlier versions.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMDs &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
The initial pitch of the note is calculated using a pitch table that contains one octave (and a note)&#039;s worth of pitch values. This value is shifted according to the octave used, and multiplied that by the instrument&#039;s pitch base to get the pitch for the note.&lt;br /&gt;
&lt;br /&gt;
===Note Length (VCMDs &amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%011xxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; represents your note length (as five bits).&lt;br /&gt;
Note lengths are defined as the number of tempo ticks plus one. Notes are keyed off either on another note or on the key off VCMD (&amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Instant Pitch Change to Note (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0a))===&lt;br /&gt;
Requires V4.0a to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the note to change the pitch to.&lt;br /&gt;
&lt;br /&gt;
===Set Main Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Requires V4.0b to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the value to directly write to the MVOL DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Volume Scaler by Fraction (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V3.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the numerator, and is the value to multiply the volume by. The scaling process is skipped if this is zero.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the denominator, and is the value to divide the multiplied volume by.&lt;br /&gt;
Put the two together, and you get the current volume multiplied by &amp;lt;math&amp;gt;\frac{x}{y}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Set ADSR (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V2.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Pitch Bend (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
Pitch bends are performed every 10 timer 0 ticks independently of the tempo. They are automatically terminated after one note.&lt;br /&gt;
&lt;br /&gt;
===Pitch Envelope ID (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an index to an array to a pointer of pitch envelopes. The pitch envelopes always loop and are clocked at a rate of 10 timer 0 ticks independently of the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
====Pitch Envelope Format====&lt;br /&gt;
=====Pitch Offset Tick (CMD &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$81-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed offset in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
=====Restart Pitch Envelope (CMD &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;$80&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jumps back to the beginning of the pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===L/R Voice Volume (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F3 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This is a direct DSP register write to the VxVOL registers, with &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; being the left volume and &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; being the right volume.&lt;br /&gt;
This VCMD&#039;s operation changes depending on the version:&lt;br /&gt;
* V0.0-V2.2: Just a straight write with no modifications made to the input.&lt;br /&gt;
* V2.3: The input values are shifted left once.&lt;br /&gt;
* V3.0-V4.0b: The input values are scaled by VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;, then shifted left once.&lt;br /&gt;
* V4.0a: The input values are scaled by the values used for VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;. The shifting operation is not done here.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as &amp;lt;math&amp;gt;10*\frac{256}{x}&amp;lt;/math&amp;gt; timer 0 ticks. Zero freezes the song except for pitch bends and envelopes, which are not affected by the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
===Jump to Pattern in Order List + Mark Loop Point (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern pointer in the order list. The loop point is marked here.&lt;br /&gt;
&lt;br /&gt;
===Key Off (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===One Note Delay (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Absolute Global Transposition (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for all channels for the music.&lt;br /&gt;
Global transpsition is not applied to channel 4 for V0.0-2.1.&lt;br /&gt;
&lt;br /&gt;
===Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FC xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for the channel.&lt;br /&gt;
&lt;br /&gt;
===Song End (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Terminates the song for all of the channels.&lt;br /&gt;
&lt;br /&gt;
===Pattern End (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Ends the pattern and goes to the pattern order list to fetch another pattern.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine/Build_Sorting&amp;diff=9789</id>
		<title>David Whittaker Sound Engine/Build Sorting</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine/Build_Sorting&amp;diff=9789"/>
		<updated>2023-09-23T21:58:46Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: One new build and changing formatting to match other wiki pages&amp;#039; game highlighting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Dream TV&#039;&#039; (Beta 2) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 E8 E8 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BF4&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Kick Off&#039;&#039; || &amp;lt;tt&amp;gt;$0300&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$079D&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; (version 1)&amp;lt;br&amp;gt; &#039;&#039;(Only version used in the Japanese version)&#039;&#039; || &amp;lt;tt&amp;gt;$0300&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;D0 F5 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$079D&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0994&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; (version 2) || &amp;lt;tt&amp;gt;$0300&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;D0 F5 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$079D&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0999&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Gods&#039;&#039; (Ending) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$080D&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Gods&#039;&#039; (Title Screen &amp;amp; In-Game) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$090D&amp;lt;/tt&amp;gt; || Two copies of the code found in ROM.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;World Class Rugby&#039;&#039; (Outside of a game)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0915&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Batman: Revenge of the Joker&#039;&#039; || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;CD ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$091F&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$05E4&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Gods&#039;&#039; (Opening) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;CD ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$091F&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$05EB&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Dream TV&#039;&#039; || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0923&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Cavelem Tribe) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$09D8&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;World Class Rugby&#039;&#039; (During a game) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$051C&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super SWIV/Firepower 2000&#039;&#039; || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$08BC&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Apocalypse II&#039;&#039; (Opening Logo)&amp;lt;br&amp;gt;&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Opening Logo)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$08F0&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Beach Tribe) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0950&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Title Screen) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0955&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Most common build used)&amp;lt;br&amp;gt;&#039;&#039;Riddick Bowe Boxing&#039;&#039; (Japanese version) || &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0962&amp;lt;/tt&amp;gt; || 12 copies of the code found in ROM for Lemmings 2: The Tribes.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Apocalypse II&#039;&#039; (In-Game)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0965&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Kick Off 3&#039;&#039; (Beta) (In-Game)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0999&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Kick Off 3&#039;&#039; (Beta) (Title Screen)&amp;lt;br&amp;gt;&#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (US Beta)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$09FE&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (Beta)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A0B&amp;lt;/tt&amp;gt; || Contains an opening jump.&amp;lt;br&amp;gt;36 copies of the code found in ROM.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Shaq Fu&#039;&#039;|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0874&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; (Japanese version) (Title Screen)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0947&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Riddick Bowe Boxing&#039;&#039; (US version)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0947&amp;lt;/tt&amp;gt; || Two copies of the code found in the ROM. Between the two, there were lots of memory location reference-related differences, but none were actual opcode-related executions, so it&#039;s considered a match.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Chavez&#039;&#039;|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$09B9&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (In-Game)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$09E0&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; (European version) (In-Game)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A3B&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Battle Cars&#039;&#039;|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A3C&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;World Cup Striker&#039;&#039; (Japanese version) (In-Game)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A3E&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;World Cup Striker&#039;&#039; (European version) (Title Screen)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A47&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (Driving)|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? 8D ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A6F&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Michael Jordan: Chaos in the Windy City&#039;&#039;|| &amp;lt;tt&amp;gt;$0200&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$052E&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|}&lt;br /&gt;
[[Category:SPC Sound Engine Build Sorting Pages]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine&amp;diff=9781</id>
		<title>N-SPC Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine&amp;diff=9781"/>
		<updated>2023-09-10T19:40:31Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Made an error on the NOP command with the source variant (it skips two bytes, not one)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nintendo SPC Sound Engine&#039;&#039;&#039;, abbreviated N-SPC and officially known as Kankichi-kun [http://vgmpf.com/Wiki/index.php?title=Kankichi-kun], is the most common sound engine used in all of the SNES/SFC games. Only the music portion was initially provided in the source code included in the IS-Sound unit along with some templating for a protocol for music and sound effects [https://www.retroreversing.com/super-famicom-snes-development-kit/#intelligent-systems-shvc-development-system]: usually it was modified by developers on an individual basis, resulting in many different variants, some of them more heavily modifying the sound driver than others. Usually what was added on was sound effect support, but sometimes the music VCMDs were modified as well.&lt;br /&gt;
&lt;br /&gt;
The following games are purely based off of the source code provided with the IS-Sound unit, and are either unmodified or barely modified, if at all:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Hong Kong &#039;97&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0F800A&amp;lt;/tt&amp;gt; (both versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi - Bangai Hen&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 2&#039;&#039; Trial Version || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 2&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x03801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 2 Remix&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; Trial Version || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x018058&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; (Alt 1) || &amp;lt;tt&amp;gt;0x0DF0&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D30&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x018076&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Wheel of Fortune - Deluxe Edition&#039;&#039; &#039;&#039;(unused)&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01D842&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Of the games listed here, two of them are very minor edits...&lt;br /&gt;
* &#039;&#039;Wheel of Fortune - Deluxe Edition&#039;&#039;&#039;s build is unused and is missing an opcode near the *Ver S1.20* string. In addition, that section is actually unused, because instead new code at $0700 is used to substitute for this one... which happens to be an exact match to the original IPL Boot ROM.&lt;br /&gt;
* &#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; (Alt 1)&#039;s program starts with a JMP opcode, and contains a NOP between the first and second opcodes of the actual program.&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
NOTE: This is not representative of every single variant. Instead, it represents the collection of commands from the source code included in the IS-Sound unit, which in turn may be carried over to most variants.&lt;br /&gt;
&lt;br /&gt;
The only register that is used for communication in the source build is $2140 (SNES side)/$F4 (SPC side), except for the load command. Other registers are not even read from, though the code itself sets up the framework to do so.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
&amp;lt;pre&amp;gt;xx ?? ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the currently piece of music playing. It takes a couple of tempo ticks for this to echo back after initializing the music.&lt;br /&gt;
&lt;br /&gt;
===Command IDs===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Stop Music || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;xx ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$F0 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$F1 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$FF ?? xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Stop Music (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Initializes an invalid phrase pointer, then stops the previous piece of music. This is not compatible with the resume command, as it is irrevocable, unlike the other one.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music by the ID specified in the command.&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Jumps to a modified copy of the IPL Boot ROM (except for Wheel of Fortune - Deluxe Edition, where there is an opcode missing, the jump location is different, and it contains an exact copy of the IPL Boot ROM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol is nearly identical to IPL Boot ROM, with a couple of differences)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format is most commonly defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this....&lt;br /&gt;
&amp;lt;pre&amp;gt;%xyyyyyyy zz aa bb cc dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; is a [[S-DSP/Noise|noise clock]] switch.&lt;br /&gt;
** If set, noise is used and &amp;lt;tt&amp;gt;%??yyyyy&amp;lt;/tt&amp;gt; represents the noise clock rate.&lt;br /&gt;
** If cleared, &amp;lt;tt&amp;gt;%0yyyyyyy&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Phrase Format==&lt;br /&gt;
Song entries, stored as [[little endian]] pointers, point to a list of phrases for the song to play.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt; || End of Song ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%0xxxxxxx $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$7F $00&amp;lt;/tt&amp;gt;|| Jump x Times || &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80 $00&amp;lt;/tt&amp;gt; || Fast Forward On ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$81 $00&amp;lt;/tt&amp;gt; || Fast Forward Off ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%1??????? $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$82-$FF $00&amp;lt;/tt&amp;gt; || Always Jump || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || Play Pattern || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Play Pattern===&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a set of eight pointers to track data, one for each channel.&lt;br /&gt;
&lt;br /&gt;
====Pattern Entry Format====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. If the pointer is zero, there is no track data.&lt;br /&gt;
&lt;br /&gt;
===End of Song (Command &amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$00 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Terminates the song.&lt;br /&gt;
&lt;br /&gt;
===Jump x Times (Command &amp;lt;tt&amp;gt;$00 $01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx $00 yy yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; is the number of times to jump.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$00 $80&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$80 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fast Forward causes the song to stop playing and the player rapidly progresses throughout the song. Thus, this can effectively act as a skip.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$00 $81&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$81 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Disables Fast Forward and continues playing the song normally.&lt;br /&gt;
&lt;br /&gt;
===Always Jump (Command &amp;lt;tt&amp;gt;$00 $82-$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%1??????? $00 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only executes if the fast forward commands are not triggered.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
NOTE: This is not representative of every single variant. Instead, it represents the collection of VCMDs from the source code included in the IS-Sound unit, which in turn is carried over to most variants.&lt;br /&gt;
&lt;br /&gt;
{{N-SPC VCMD Set Table}}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Crashes the sound driver due to being outside of the array of pointers, and thus jumping to an invalid pointer.&lt;br /&gt;
&lt;br /&gt;
===NOP (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Reads two bytes, then does absolutely nothing with the command.&lt;br /&gt;
&lt;br /&gt;
===Phrase Termination/End of Subroutine (VCMD &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
This VCMD&#039;s operation depends on whether or not it is inside a subroutine or not.&lt;br /&gt;
If it is inside a subroutine, it exits the subroutine and song execution continues.&lt;br /&gt;
Otherwise, the phrase is terminated. This affects &#039;&#039;all&#039;&#039; channels in the music: any other channels still playing are interrupted.&lt;br /&gt;
&lt;br /&gt;
===Note Duration (VCMD &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx (%0yyyzzzz)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; represents your note length (as seven bits) in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyy&amp;lt;/tt&amp;gt;, if the highest bit of the byte is not set, defines the quantization. It is an index value to a table of values that indicate, in 256ths, how far along the note to play before keying it off. This table can vary on a per-game basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%zzzz&amp;lt;/tt&amp;gt;, which is only defined if the highest bit of the byte is not set, defines the velocity. It is an index to a table of values that indicate the volume in a decibel-like number (due to the final volume calculation being multiplied by itself at the end). This table can vary on a per-game basis.&lt;br /&gt;
&lt;br /&gt;
Notes and/or special VCMDs, by default, are forced after the parameter byte is read. Attempting to use &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt; again results in an invalid note.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMD &amp;lt;tt&amp;gt;$80-$C7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Tie (VCMD &amp;lt;tt&amp;gt;$C8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Continues playing the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Rest (VCMD &amp;lt;tt&amp;gt;$C9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Percussion (VCMD &amp;lt;tt&amp;gt;$CA-$DF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a percussion note.&lt;br /&gt;
&lt;br /&gt;
By default, percussion uses the same instrument set as the song, and all percussion is keyed on with a note of &amp;lt;tt&amp;gt;$A4&amp;lt;/tt&amp;gt;.&lt;br /&gt;
The starting ID to use for all channels can be redefined by VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Panning (VCMD &amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E1 %xyzzzzz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; defines a phase inversion switch for the left channel.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%y&amp;lt;/tt&amp;gt; defines a phase inversion switch for the right channel.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%zzzzz&amp;lt;/tt&amp;gt; is five bits for the panning. This refers to an array of values to multiply the volume by after calculating the voice volume via various other parameters set by the VCMDs. Under normal circumstances, center is defined as &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; and the maximum value is &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Panning Fade (VCMD &amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E2 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target pan value. Phase inversion is &#039;&#039;not&#039;&#039; taken into account here, thus only the low five bits should be used here.&lt;br /&gt;
&lt;br /&gt;
===Vibrato On (VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E3 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay the vibrato for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the rate of the vibrato: specifically, how much to change the pitch on a per-tempo tick basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the depth of the vibrato: that is, the maximum pitch offset to use. &amp;lt;tt&amp;gt;$00-$F0&amp;lt;/tt&amp;gt; are normal, but &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; and up act more like said value ANDed by &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; and multiplied by &amp;lt;tt&amp;gt;$0100&amp;lt;/tt&amp;gt;, meaning the highest values have drastic differences compared to the lower ones.&lt;br /&gt;
&lt;br /&gt;
===Vibrato Off (VCMD &amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables vibrato set by VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Song Volume (VCMD &amp;lt;tt&amp;gt;$E5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E5 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the song volume value. This sets the volume for all of the channels in the song. The value used is a decibel-like value due to the final volume being multiplied by itself to get the final result.&lt;br /&gt;
&lt;br /&gt;
===Song Volume Fade (VCMD &amp;lt;tt&amp;gt;$E6&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E6 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target song volume.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$E7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E7 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as one timer 0 tick multiplied by &amp;lt;math&amp;gt;\frac{256}{x}&amp;lt;/math&amp;gt;. Zero freezes the song.&lt;br /&gt;
&lt;br /&gt;
===Tempo Fade (VCMD &amp;lt;tt&amp;gt;$E8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E8 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target tempo.&lt;br /&gt;
&lt;br /&gt;
===Global Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$E9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E9 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed value defining the number of semitones to transpose subsequent notes. Note that this affects all channels, not just one channel.&lt;br /&gt;
&lt;br /&gt;
===Single Channel Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$EA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed value defining the number of semitones to transpose subsequent notes.&lt;br /&gt;
&lt;br /&gt;
===Tremolo On (VCMD &amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EB xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay the tremolo for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the rate of the tremolo: specifically, how much to change the volume on a per-tempo tick basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the depth of the tremolo: that is, the maximum volume offset to use.&lt;br /&gt;
&lt;br /&gt;
===Tremolo Off (VCMD &amp;lt;tt&amp;gt;$EC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables vibrato set by VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the volume value. The value used is a decibel-like value due to the final volume being multiplied by itself to get the final result.&lt;br /&gt;
&lt;br /&gt;
===Volume Fade (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target volume.&lt;br /&gt;
&lt;br /&gt;
===Subroutine (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer containing the section of music to play.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of times to loop the sub-routine.&lt;br /&gt;
&lt;br /&gt;
===Vibrato Fade In (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to fade the vibrato for.&lt;br /&gt;
The moment this VCMD is executed, the depth is faded in from zero.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
This VCMD is applied to all subsequent notes until turned off or overwritten.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay before applying the pitch envelope.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a signed offset in semitones to slide the note to.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope From (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
This VCMD is applied to all subsequent notes until turned off or overwritten.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay before applying the pitch envelope.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a signed offset in semitones to slide the note from: that is, unlike Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;), this is a starting note offset, rather than an end of pitch envelope note offset.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope Off (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables a pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the amount to shift the pitch up. This is in 256ths of a semitone, albeit done via measuring the distance between note and multiplying it by this value.&lt;br /&gt;
&lt;br /&gt;
===Echo Enable Bits and Volume (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 %xxxxxxxx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxxx&amp;lt;/tt&amp;gt; defines the channels to turn on for the echo (one per bit), which translates to a direct write to the EON DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines a value for EVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines a value for EVOLR DSP register.&lt;br /&gt;
&lt;br /&gt;
===Echo Off (VCMD &amp;lt;tt&amp;gt;$F6&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
This disables echo for &#039;&#039;all&#039;&#039; channels, as well as zeroing out the echo volume and disabling echo writes.&lt;br /&gt;
&lt;br /&gt;
===Echo Parameter Setup (VCMD &amp;lt;tt&amp;gt;$F7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F7 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines a value for the EDL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines a value for the EFB DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines an ID to an array of FIR coefficient values.&lt;br /&gt;
&lt;br /&gt;
===Echo Volume Fade (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F8 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the target value for EVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines the target value for EVOLR DSP register.&lt;br /&gt;
&lt;br /&gt;
===Pitch Slide To Note (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F9 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to delay the slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the target note.&lt;br /&gt;
&lt;br /&gt;
===Percussion Base Instrument ID Redefine (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting instrument ID. Note that this affects all channels.&lt;br /&gt;
&lt;br /&gt;
===Channel Mute (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Causes the channel to not key on subsequent notes.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (VCMD &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Fast Forward causes the song to stop playing and the player rapidly progresses throughout the song. Thus, this can effectively act as a skip.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables Fast Forward and continues playing the song normally.&lt;br /&gt;
&lt;br /&gt;
==Variants==&lt;br /&gt;
===Shijou Saikyou no Quiz Ou Ketteisen Super===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Shijou Saikyou no Quiz Ou Ketteisen Super&#039;&#039; || &amp;lt;tt&amp;gt;0x0DF7&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D37&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x038062&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x04805C&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x058062&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
This is the closest match to a standard source N-SPC/Kankichi build used in a licensed game. This is because the only modifications made to it are to echo what was sent to any register to $2141/$F5 (although in practice only $2140/$F4 is read from, thus de facto giving it the same output, otherwise it would be cycling between the last register read code-wise as output) and zero out both $2140/$F4 and $2141/$F5 when the song is done playing when a zero pointer is read from a phase.&lt;br /&gt;
&lt;br /&gt;
====Output to the SNES====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the currently piece of music playing. It takes a couple of tempo ticks for this to echo back after initializing the music.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a de-facto mirror of &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; output-wise. The feedback is a little faster, though, since the output is immediately upon $2140/$F4 being read, rather than when the music is initialized.&lt;br /&gt;
&lt;br /&gt;
===Controller Test/World Class Service Super Nintendo Tester===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Controller Test || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x009319&amp;lt;/tt&amp;gt; (Controller Test Cassette)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x00BFFF&amp;lt;/tt&amp;gt; (SNES Burn-In Test Cartridge)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x00D8D2&amp;lt;/tt&amp;gt; (World Class Service Super Nintendo Tester &#039;&#039;(not used)&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| World Class Service Super Nintendo Tester &#039;&#039;(only build used across all tests)&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0B8068&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
These two sound driver builds (the one for the controller test being found in three different known testing cartridges, with one of them not used) merely have code optimizations in their sound code, thus making them completely identical execution-wise to the source build variant. In addition, the build used for World Class Service Super Nintendo Tester adds a BMI opcode in a readahead routine, but is otherwise identical.&lt;br /&gt;
&lt;br /&gt;
===Subpages===&lt;br /&gt;
{{Subpages}}&lt;br /&gt;
&lt;br /&gt;
Not created yet...&lt;br /&gt;
* [[N-SPC Engine/64WD Creation|64WD Creation]]&lt;br /&gt;
* [[N-SPC Engine/Advance Communication|Advance Communication]]&lt;br /&gt;
* [[N-SPC Engine/Aisystem Tokyo|Aisystem Tokyo]]&lt;br /&gt;
* [[N-SPC Engine/Argonaut|Argonaut]]&lt;br /&gt;
* [[N-SPC Engine/Axes Art Amuse|Axes Art Amuse]]&lt;br /&gt;
* [[N-SPC Engine/Bit Managers|Bit Managers]]&lt;br /&gt;
* [[N-SPC Engine/Capcom|Capcom]]&lt;br /&gt;
* [[N-SPC Engine/Chatnoir|Chatnoir]]&lt;br /&gt;
* [[N-SPC Engine/Chip Level Designs|Chip Level Designs]]&lt;br /&gt;
* [[N-SPC Engine/CP.BRAiN|CP.BRAiN]]&lt;br /&gt;
* [[N-SPC Engine/Cream|Cream]]&lt;br /&gt;
* [[N-SPC Engine/Crosstalk|Crosstalk]]&lt;br /&gt;
* [[N-SPC Engine/Cube|Cube]]&lt;br /&gt;
* [[N-SPC Engine/CUE|CUE]]&lt;br /&gt;
* [[N-SPC Engine/Culture Brain|Culture Brain]]&lt;br /&gt;
* [[N-SPC Engine/Daft|Daft]]&lt;br /&gt;
* [[N-SPC Engine/Data East|Data East]]&lt;br /&gt;
* [[N-SPC Engine/EJ Corporation|EJ Corporation]]&lt;br /&gt;
* [[N-SPC Engine/Electronic Arts|Electronic Arts]]&lt;br /&gt;
* [[N-SPC Engine/Falcom|Falcom]]&lt;br /&gt;
* [[N-SPC Engine/Funcom|Funcom]]&lt;br /&gt;
* [[N-SPC Engine/Gremlin|Gremlin]]&lt;br /&gt;
* [[N-SPC Engine/HAL|HAL]]&lt;br /&gt;
* [[N-SPC Engine/Hanari Exp|Hanari Exp]]&lt;br /&gt;
* [[N-SPC Engine/Hect|Hect]]&lt;br /&gt;
* [[N-SPC Engine/Hikoshi Hashimoto|Hikoshi Hashimoto]]&lt;br /&gt;
* [[N-SPC Engine/Home Data|Home Data]]&lt;br /&gt;
* [[N-SPC Engine/Human (earlier)|Human (earlier)]]&lt;br /&gt;
* [[N-SPC Engine/Human|Human]]&lt;br /&gt;
* [[N-SPC Engine/Imagesoft|Imagesoft]]&lt;br /&gt;
* [[N-SPC Engine/Infogrames|Infogrames]]&lt;br /&gt;
* [[N-SPC Engine/Intelligent Systems|Intelligent Systems]]&lt;br /&gt;
* [[N-SPC Engine/Japan Art Media|Japan Art Media]]&lt;br /&gt;
* [[N-SPC Engine/Jorudan|Jorudan]]&lt;br /&gt;
* [[N-SPC Engine/Kazuo Sawa|Kazuo Sawa]]&lt;br /&gt;
* [[N-SPC Engine/Kennosuke Suemura|Kennosuke Suemura]]&lt;br /&gt;
* [[N-SPC Engine/Khaos|Khaos]]&lt;br /&gt;
* [[N-SPC Engine/Koei|Koei]]&lt;br /&gt;
* [[N-SPC Engine/Konami|Konami]]&lt;br /&gt;
* [[N-SPC Engine/LaserSoft|LaserSoft]]&lt;br /&gt;
* [[N-SPC Engine/Make Software|Make Software]]&lt;br /&gt;
* [[N-SPC Engine/Metro|Metro]]&lt;br /&gt;
* [[N-SPC Engine/Mitsuhito Tanaka|Mitsuhito Tanaka]]&lt;br /&gt;
* [[N-SPC Engine/Monolith|Monolith]]&lt;br /&gt;
* [[N-SPC Engine/MSQ|MSQ]]&lt;br /&gt;
* [[N-SPC Engine/Namco|Namco]]&lt;br /&gt;
* [[N-SPC Engine/Naohisa Morota|Naohisa Morota]]&lt;br /&gt;
* [[N-SPC Engine/Natsume|Natsume]]&lt;br /&gt;
* [[N-SPC Engine/Nichibutsu or Make Software|Nichibutsu/Make Software]] (NOTE: Refers to three of the Super Nichibutsu Mahjong games)&lt;br /&gt;
* [[N-SPC Engine/Nova|Nova]]&lt;br /&gt;
* [[N-SPC Engine/Ocean|Ocean]]&lt;br /&gt;
* [[N-SPC Engine/Pure Sound|Pure Sound]]&lt;br /&gt;
* [[N-SPC Engine/Quest|Quest]]&lt;br /&gt;
* [[N-SPC Engine/Quintet|Quintet]]&lt;br /&gt;
* [[N-SPC Engine/Robert C. Ashworth|Robert C. Ashworth]]&lt;br /&gt;
* [[N-SPC Engine/Sakata SAS|Sakata SAS]]&lt;br /&gt;
* [[N-SPC Engine/Saurus|Saurus]]&lt;br /&gt;
* [[N-SPC Engine/Sunsoft|Sunsoft]]&lt;br /&gt;
* [[N-SPC Engine/Syscom|Syscom]]&lt;br /&gt;
* [[N-SPC Engine/System Sacom|System Sacom]]&lt;br /&gt;
* [[N-SPC Engine/Systemsoft|Systemsoft]]&lt;br /&gt;
* [[N-SPC Engine/T&#039;s Music|T&#039;s Music]]&lt;br /&gt;
* [[N-SPC Engine/TamTam|TamTam]]&lt;br /&gt;
* [[N-SPC Engine/Team X-Fade|Team X-Fade]]&lt;br /&gt;
* [[N-SPC Engine/Technos Japan|Technos Japan]]&lt;br /&gt;
* [[N-SPC Engine/Technosoft|Technosoft]]&lt;br /&gt;
* [[N-SPC Engine/Tecmo|Tecmo]]&lt;br /&gt;
* [[N-SPC Engine/Tose|Tose]]&lt;br /&gt;
* [[N-SPC Engine/Tsukasa Masuko|Tsukasa Masuko]]&lt;br /&gt;
* [[N-SPC Engine/Virgin|Virgin]]&lt;br /&gt;
* [[N-SPC Engine/Wave|Wave]]&lt;br /&gt;
* [[N-SPC Engine/Yoshikazu Yao|Yoshikazu Yao]]&lt;br /&gt;
* [[N-SPC Engine/Yoshiyuki Ishii|Yoshiyuki Ishii]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO: There are a lot of variants... these will be split into sub-pages depending on the modifications made&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
* [http://vgmpf.com/Wiki/index.php?title=Kankichi-kun Video Game Music Preservation Foundation - Kankichi-kun]&lt;br /&gt;
* [https://www.retroreversing.com/super-famicom-snes-development-kit/#intelligent-systems-shvc-development-system Retro Reversing - SNES (Super Famicom) Development Kit Hardware - Intelligent Systems SHVC Development System]&lt;br /&gt;
* [https://wiki.superfamicom.org/nintendo-music-format-(n-spc) Super Famicom Wiki - N-SPC]&lt;br /&gt;
* [http://gdri.smspower.org/wiki/index.php/Super_Famicom/Super_NES_Sound_Driver_List GDRI - Super Famicom/Super NES Sound Driver List]&lt;br /&gt;
* [https://github.com/vgmtrans/vgmtrans/issues/173 Github - N-SPC VCMD $FB-$FE identifications]&lt;br /&gt;
* [https://archive.org/details/GameBoyProgManVer1.1/page/n187/mode/2up Game Boy Development Manual - Super Game Boy Sound] (see pages 187-213)&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Build_Sorting&amp;diff=9770</id>
		<title>N-SPC Engine/Nintendo/Build Sorting</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Build_Sorting&amp;diff=9770"/>
		<updated>2023-09-04T17:40:00Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Unique cases==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Aging Cassette&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;SNES Burn-In Test Cartridge&#039;&#039;|| &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$113A&amp;lt;/tt&amp;gt;||For distinguishing purposes, known outside of these notes as &#039;&#039;Sound Module and Burn-In Test&#039;&#039; to refer to the copy found in the &#039;&#039;SNES Burn-In Test Cartridge&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Nintendo Power Menu Program&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0DCB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==F-Zero Builds==&lt;br /&gt;
This game has multiple revisional builds known.&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;F-Zero&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;A2 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1776&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;F-Zero&#039;&#039; (Beta)|| &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;A2 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1778&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tetris &amp;amp; Dr. Mario Builds==&lt;br /&gt;
These builds are unique to one game, but unlike Super Scope 6 (which you may have noticed that LazerBlazer and Blastris are separated due to different SFX execution), they also match in general execution.&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Tetris and Dr. Mario&#039;&#039; (Mixed Match) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$118F&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Tetris and Dr. Mario&#039;&#039; (Dr. Mario) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1199&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Tetris and Dr. Mario&#039;&#039; (Tetris) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$11A1&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Akito Nakatsuka==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Scope 6&#039;&#039; (LazerBlazer) (US version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B33&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Scope 6&#039;&#039; (LazerBlazer) (Japanese and European version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B37&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Game Boy&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;Super Game Boy 2&#039;&#039; || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A5D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;BS-X BIOS&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;Cassette Kensaki - NUS-you S Cassette&#039;&#039; || &amp;lt;tt&amp;gt;$0370&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$04AB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;JRA PAT&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;JRA PAT - Wide Taiouban&#039;&#039; || &amp;lt;tt&amp;gt;$06E0&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0739&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Sutte Hakkun&#039;&#039; || &amp;lt;tt&amp;gt;$06E0&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$074C&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Yuichi Ozaki===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Marvelous - Mouhitotsu no Takara-jima&#039;&#039; || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BC5&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;SA-1 Demo&#039;&#039; || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B23&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Heisei Shin Onigashima - Kouhen&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;Heisei Shin Onigashima - Zenpen&#039;&#039; || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 8F ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0C8D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hirokazu Tanaka==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Mario Paint&#039;&#039; (Beta) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$2625&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Mario Paint&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1430&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Mother 2/Earthbound&#039;&#039; || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$16A5&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Snoopy Concert&#039;&#039; || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$16EB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Kenji Yamamoto==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Metroid&#039;&#039; || &amp;lt;tt&amp;gt;$1500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1ED7&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Koji Kondo==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island&#039;&#039; || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A96&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island&#039;&#039; (beta version) || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B08&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox/Star Wing&#039;&#039; || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B14&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario All-Stars/Super Mario Collection&#039;&#039; || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0C11&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Legend of Zelda - A Link to the Past/Zelda no Densetsu - Kamigami no Triforce&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E22&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Glider&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E97&amp;lt;/tt&amp;gt;|| Prototype of &#039;&#039;Star Fox/Star Wing&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;SimCity&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$175D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Donkey 1&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1DC9&amp;lt;/tt&amp;gt;|| Sound driver build is a prototype of &#039;&#039;Legend of Zelda - A Link to the Past&#039;&#039;&#039;s.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Prototype===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario World&#039;&#039; (all other versions) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0697&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0BC0&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario World&#039;&#039; (Super Mario All-Stars + Super Mario World) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0697&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0BF4&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Pilotwings&#039;&#039; (European version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$06A3&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$126A&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Pilotwings&#039;&#039; (US &amp;amp; Japanese versions) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$06A3&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$12CD&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Yoji Inagaki===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1994-04-01) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6F&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1994-04-15) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6F&amp;lt;/tt&amp;gt;|| Except for a single opcode&#039;s difference at $064C, all of the code differences are after the SFX data, and thus pointers cannot be fully factored in.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1994-05-06 and 1994-05-13) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B62&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1994-08-31) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6D&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1994-12-28) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B9C&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1995-06-08) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BD4&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1995-06-22)&amp;lt;br&amp;gt;Star Fox 2 (1995-06-27) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BD7&amp;lt;/tt&amp;gt;|| These builds are identical to each other minus pointers placed after the SFX data.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1995-07-25) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BDA&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BDF&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Taro Bando==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario Kart&#039;&#039; (beta version) (1992-01-21 build) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;2F ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt; || Refers to a sound.bin file with this timestamp that was not embedded in a known prototype build.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario Kart&#039;&#039; (beta version) (mkart) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D79&amp;lt;/tt&amp;gt;|| Refers to a prototype from April 13, 1992.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario Kart&#039;&#039; (beta version) (mario_kart-01) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? E8 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D65&amp;lt;/tt&amp;gt; || Refers to what is known as the Enigma prototype build.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario Kart&#039;&#039; (beta version) (mario_kart) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D74&amp;lt;/tt&amp;gt; || Refers to a prototype from late June 1992, created before kar4t.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario Kart&#039;&#039; (beta version) (kar4t) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1598&amp;lt;/tt&amp;gt; || Refers to a prototype from late June 1992, created after mario_kart.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario Kart&#039;&#039; (US version) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;7D C4 ?? 5F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1664&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$19B4&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario Kart&#039;&#039; (Japanese and European version) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;7D C4 ?? 5F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1664&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$19BA&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;FX Trax&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 E8 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D61&amp;lt;/tt&amp;gt;|| Prototype of &#039;&#039;Wild Trax/Stunt Race FX&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Wild Trax/Stunt Race FX&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D73&amp;lt;/tt&amp;gt;|| Loading program at $0675 before the actual start location&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Yumiko Kanki==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Special Tee Shot&#039;&#039; (Prototype) || &amp;lt;tt&amp;gt;$0460&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A78&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Special Tee Shot&#039;&#039; (BS-X version) || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B86&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Unknown==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;SNES Burn-In Test Cartridge&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6D&amp;lt;/tt&amp;gt;||For distinguishing purposes, known outside of these notes as &#039;&#039;Super Scope Test&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Scope 6&#039;&#039; (Blastris) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;90 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D89&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
[[Category:SPC Sound Engine Build Sorting Pages]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Source_Variant_Build_Sorting&amp;diff=9769</id>
		<title>N-SPC Engine/Source Variant Build Sorting</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Source_Variant_Build_Sorting&amp;diff=9769"/>
		<updated>2023-09-02T17:36:26Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Controller Test Cassette&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;SNES Burn-In Test Cartridge&#039;&#039; &#039;&#039;(one of three different builds)&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;World Class Service Super Nintendo Tester&#039;&#039; &#039;&#039;(one of three different builds, unused)&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt;,&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;F0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D35&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$0FD7&amp;lt;/tt&amp;gt; || For distinguishing purposes, known outside of these notes as simply Controller Test.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;World Class Service Super Nintendo Tester&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt;,&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;F0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D35&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$0FD9&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Wheel of Fortune - Deluxe Edition&#039;&#039; &#039;&#039;(unused)&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt;,&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;F0 03 3F ?? ??&amp;lt;/tt&amp;gt;,&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;3F ?? ??&amp;lt;/tt&amp;gt; at &amp;lt;tt&amp;gt;$09C8&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D35&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$1004&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$0700&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Hong Kong &#039;97&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;SM Choukyoushi Hitomi - Bangai Hen&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;SM Choukyoushi Hitomi Vol. 2&#039;&#039; Trial Version&amp;lt;br&amp;gt;&#039;&#039;SM Choukyoushi Hitomi Vol. 2&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;SM Choukyoushi Hitomi Vol. 2 Remix&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; Trial Version || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt;,&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;F0 03 3F ?? ??&amp;lt;/tt&amp;gt;,&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;3F ?? ??&amp;lt;/tt&amp;gt; at &amp;lt;tt&amp;gt;$09C8&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D35&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$1004&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$1511&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; (Alt 1) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D39&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Shijou Saikyou no Quiz Ou Ketteisen Super&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D40&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|}&lt;br /&gt;
[[Category:SPC Sound Engine Build Sorting Pages]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=Blargg%27s_trick&amp;diff=5955</id>
		<title>Blargg&#039;s trick</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=Blargg%27s_trick&amp;diff=5955"/>
		<updated>2023-07-03T20:40:49Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Go into a little bit more specific detail on how to pull this off...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Blargg&#039;s trick&#039;&#039;&#039; is scene slang for writing to [[DSPRAM]] without writing any [[SPC700]] code by only using the [[SPC700/IPL ROM|IPL ROM]] itself to upload sample data and the directory, then writing directly to the memory locations that the DSP registers are located in $00F2-$00F3 to produce sound.&lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
* https://wiki.superfamicom.org/how-to-write-to-dsp-registers-without-any-spc-700-code&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=SPC700/IPL_ROM&amp;diff=5954</id>
		<title>SPC700/IPL ROM</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=SPC700/IPL_ROM&amp;diff=5954"/>
		<updated>2023-07-03T20:28:02Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Rename step 3 to receive and specify that the SNES is the source&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Initial Program Loader Boot ROM&#039;&#039;&#039;, or IPL ROM, is the very first program executed by the [[SPC700]] on power on. It clears memory locations $00-$EF, then once it does so, it sends a signal to the SNES through two of the CPUIO registers. $0000-$0001 are reserved to hold the pointer, but all other memory locations can be written to. The IPL ROM itself is read-only: if written to, it simply writes to the same memory location that can be accessed when bit 7 of the CONTROL I/O port ($F1) is cleared.  It is 64 bytes in size.&lt;br /&gt;
&lt;br /&gt;
The transfer routine at $FFD6 runs once per downloaded block.&lt;br /&gt;
&lt;br /&gt;
At the beginning of the transfer routine, the SPC&#039;s [[Y index register]] is used to watch Port 0 until the 5A22 writes a zero to it, which indicates it has uploaded byte 0 of the block to Port 1.  Then we enter the inner byte-downloading loop at $FFDA, where Y remembers the less significant byte of the index into the block currently being being downloaded (the &amp;quot;expected byte index&amp;quot; as anomie calls it).  The 5A22 sends the less significant byte of the actual index (the &amp;quot;next byte/end&amp;quot; signal as anomie calls it) over Port 0.  Y is then incremented.&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
===Step 1 (SPC700 Initializes Itself)===&lt;br /&gt;
&amp;lt;u&amp;gt;Output&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;$AA $BB ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
The very first step is for the SPC700 to output two values to $2140/$F4 and $2141/$F5. The SNES must ensure that the SPC700 has finished initializing itself (and clearing out memory locations $0000-$00EF) by confirming these two values are present in those two registers: only then may the SNES send commands.&lt;br /&gt;
&lt;br /&gt;
===Step 2 (Execute Command)===&lt;br /&gt;
&amp;lt;u&amp;gt;Input&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;$CC xx yy yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; indicates what you want to do. If this is zero, then the program jumps to &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt;. Otherwise, &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is the starting memory location of the next block, and we go to step 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer. See &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; for more details.&lt;br /&gt;
$CC should be sent last in this case.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Output&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;$CC $BB ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Step 3 (Receive Block from SNES)===&lt;br /&gt;
&amp;lt;u&amp;gt;Input&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a byte counter, and this should be sent last on byte ordering. Zero must be sent first to indicate that this is the first block. If this is greater (from a signed comparison, thus no greater than $80 more than the expected value: otherwise, the command won&#039;t work) than the value that was last sent to the SNES, then we go to step 4.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the input byte to send. The pointer is incremented.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Output&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx $BB ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the next byte ID to send over. This is incremented per byte sent.&lt;br /&gt;
&lt;br /&gt;
This step repeats until &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is sent a value that is greater than the initially expected value, then we go to step 4.&lt;br /&gt;
&lt;br /&gt;
===Step 4 (Terminate Block)===&lt;br /&gt;
&amp;lt;u&amp;gt;Input&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; must be greater (from a signed comparison, thus no greater than $80 more than the expected value: otherwise, the command won&#039;t work) than the last value that the SPC700 sent to the SNES. This byte should be sent last order-wise. Note that if this is zero (only occurs if the counter was previously $80-$FF), you&#039;ll instantly send a byte if &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is non-zero and start your next block right away (the zero case still jumps as per the usual).&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; indicates what to do next. If this is zero, then the program jumps to &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt;. Otherwise, &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is the starting memory location of the next block, and we go to step 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer. See &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; for more details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Output&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx $BB ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the ID that was sent to terminate the block.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note if you choose to jump to the program, then depending on the program, your acknowledgement from the IPL Boot ROM may end up being very short. Thus, unless your program accounts for this, make sure to disable your interrupts prior to performing this critical step.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Trivia==&lt;br /&gt;
* On reset, Mesen 2 sets the SPC700&#039;s program counter to $FFC5, skipping the stack setup.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
* [https://problemkaputt.de/fullsnes.htm#snesapumaincpucommunicationport Fullsnes - Boot ROM Disassembly]&lt;br /&gt;
* [https://wiki.superfamicom.org/spc700-reference#ipl-rom-1567 Super Famicom Wiki - IPL ROM]&lt;br /&gt;
&lt;br /&gt;
[[Category:Audio]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Imagitec_Design&amp;diff=5615</id>
		<title>N-SPC Engine/Imagitec Design</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Imagitec_Design&amp;diff=5615"/>
		<updated>2023-06-13T23:25:31Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Adding Dragon&amp;#039;s Magic (Konami logo), which branched off of American Gladiators.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Go back to [[N-SPC Engine]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Imagitec Design&#039;&#039; is a company that used the N-SPC engine for most of its games. Most of these games don&#039;t actually support music and sound effects played together: only the earliest version does.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Version !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Top Gear/Top Racer&#039;&#039; || 1.0 || &amp;lt;tt&amp;gt;0x0B89&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0AC9&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0DE000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;American Gladiators&#039;&#039; || 2.0 || &amp;lt;tt&amp;gt;0x0B87&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0AC7&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1E8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;The Humans&#039;&#039; || 2.0 || &amp;lt;tt&amp;gt;0x0B87&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0AC7&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x048000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x058000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x12C0FE&amp;lt;/tt&amp;gt; &#039;&#039;(RNC compressed)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Dragon&#039;s Magic&#039;&#039; (Konami logo) || 2.0 (Motivetime branch) || &amp;lt;tt&amp;gt;0x0B80&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0AC0&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x08C2BB&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Wheel of Fortune&#039;&#039; (Title Screen)&amp;lt;br&amp;gt;&#039;&#039;Wheel of Fortune - Deluxe Edition&#039;&#039; (Title Screen) || 3.0a || &amp;lt;tt&amp;gt;0x0BAF&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0AEF&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0FB59C&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Wheel of Fortune&#039;&#039; (In-Game)&amp;lt;br&amp;gt;&#039;&#039;Wheel of Fortune - Deluxe Edition&#039;&#039; (In-Game) || 3.0b || &amp;lt;tt&amp;gt;0x0775&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x06B5&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0C8000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0DD7D3&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Imagitec Design/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
The only modification made to the VCMD formats are to remove the fast forward and channel mute VCMDs and fast forward phrase commands, and to allow the end phrase command (and/or a second note duration/quantization/velocity combo) to execute rather than playing an invalid note.&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
All values are usually echoed back straight to the SNES on the register they were written to.&lt;br /&gt;
&lt;br /&gt;
===Commands (V1.0)===&lt;br /&gt;
This is the only version to support playing sound effects in tandem with the music.&lt;br /&gt;
&lt;br /&gt;
====CPUIO0 ($2140/$F4)====&lt;br /&gt;
This register is purely responsible for controlling the music. &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; stops the music, while &amp;lt;tt&amp;gt;$01-$FF&amp;lt;/tt&amp;gt; play music.&lt;br /&gt;
&lt;br /&gt;
====CPUIO1 ($2141/$F5)====&lt;br /&gt;
This register is constantly polled every tempo tick.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Pass-Through || &amp;lt;tt&amp;gt;?? $00 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Stop Sound (Channels 5-8) || &amp;lt;tt&amp;gt;?? $01 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Car Engine Init (Channel 5) || &amp;lt;tt&amp;gt;?? $02 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Car Engine Speed (Channel 5) || &amp;lt;tt&amp;gt;?? $03 xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Pass-Through || &amp;lt;tt&amp;gt;?? $04 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;?? $05 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Stop Sound (Channels 6-8) || &amp;lt;tt&amp;gt;?? $06 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Play SFX (Channel 5) || &amp;lt;tt&amp;gt;?? $07 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;?? $08 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;?? $09 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;?? $0A ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;?? $0B ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Pass-Through || &amp;lt;tt&amp;gt;?? $0C ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; || Car Engine Init (Channel 7) || &amp;lt;tt&amp;gt;?? $0D ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; || Car Engine Speed (Channel 7) || &amp;lt;tt&amp;gt;?? $0E xx yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; || Pass-Through || &amp;lt;tt&amp;gt;?? $0F ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;?? $10 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; || Stop Sound (Channels 6) || &amp;lt;tt&amp;gt;?? $11 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;?? $12 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;?? $13 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;?? $14 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;?? $15 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;?? $16 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;?? $17 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt; || Stop Music + Go to IPL Boot ROM || &amp;lt;tt&amp;gt;?? $18 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt; || Pause Sound || &amp;lt;tt&amp;gt;?? $19 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;?? $1A ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;?? $1B ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;?? $1C ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;?? $1D ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1E-$FF&amp;lt;/tt&amp;gt; || Pass-Through || &amp;lt;tt&amp;gt;?? ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====Pass-Through=====&lt;br /&gt;
Effectively a NOP, doing nothing.&lt;br /&gt;
&lt;br /&gt;
=====Stop Sound=====&lt;br /&gt;
Disables the channel(s) indicated by ID as long as this command is the last ID sent...&lt;br /&gt;
* &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; - Channels 5-8&lt;br /&gt;
* &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; - Channels 6-8&lt;br /&gt;
* &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; - Channel 6&lt;br /&gt;
&lt;br /&gt;
=====Play SFX=====&lt;br /&gt;
Plays a piece of SFX. It seems like an array could be used here, but it isn&#039;t: instead, it&#039;s just an 8-byte entry to a series of DSP register writes to the Vx DSP registers before keying it on, with the channel and sound used varying by ID.&lt;br /&gt;
&lt;br /&gt;
=====Car Engine Init (Command &amp;lt;tt&amp;gt;$02, $0D&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;?? ii ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Car Engine Speed (Command &amp;lt;tt&amp;gt;$03, $0E&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;?? ii xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&lt;br /&gt;
** Channel 5 (V4PITCH): &amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7 (V6PITCH): &amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxPITCHL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxPITCHH DSP register.&lt;br /&gt;
&lt;br /&gt;
=====Pause Sound (Command &amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Mutes everything while this command is the last ID sent.&lt;br /&gt;
&lt;br /&gt;
=====Stop Music + Go to IPL Boot ROM (Command &amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Uses the FLG DSP register to disable echo writes, mute the amplifier and key off all voices, then jumps to the [[SPC700/IPL ROM|IPL Boot ROM]].&lt;br /&gt;
&lt;br /&gt;
===Commands (V2.0)===&lt;br /&gt;
This code is nearly identical to Controller Test, except for the VCMD differences mentioned above, this command set, and a couple of other minor differences.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Stop Sound || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;xx ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Go to IPL Boot ROM || &amp;lt;tt&amp;gt;$FF ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Commands (V2.0 Motivetime Branch)====&lt;br /&gt;
The only difference is that Go to IPL Boot ROM is instead executed through VCMD $E2 (overwriting it in the process), along with stopping the sound.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Stop Sound || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;xx ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Commands (V3.0a)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Stop Sound || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;xx ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$41&amp;lt;/tt&amp;gt; || Mute || &amp;lt;tt&amp;gt;$41 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$41&amp;lt;/tt&amp;gt; || Mute + Go To IPL Boot ROM || &amp;lt;tt&amp;gt;$41 $58 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;?? ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
====NOP====&lt;br /&gt;
Does absolutely nothing. Doesn&#039;t even acknowledge.&lt;br /&gt;
====Mute====&lt;br /&gt;
Mutes the sound by zeroing out the main volume and zeroing out the DSP registers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$41 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;, when set to &amp;lt;tt&amp;gt;$58&amp;lt;/tt&amp;gt;, jumps to the [[SPC700/IPL ROM|IPL Boot ROM]]. Interestingly, that means that this command spells out &amp;lt;tt&amp;gt;AX&amp;lt;/tt&amp;gt; in ASCII.&lt;br /&gt;
&lt;br /&gt;
===Commands (V3.0b)===&lt;br /&gt;
The phrase format has been massively modified to only have one channel, meaning the pointer goes directly to pattern data. You can still loop the now one-channel phrase pointer, though. The sub-routine command becomes a straight-up jump command due to the phrase termination command (ID &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;) having been stripped of handling sub-routine code.&lt;br /&gt;
&lt;br /&gt;
===Commands (V3.0b)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Stop Sound || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-$0F&amp;lt;/tt&amp;gt; || Play Sound || &amp;lt;tt&amp;gt;$0x ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$10-$40&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;?? ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$41&amp;lt;/tt&amp;gt; || Mute || &amp;lt;tt&amp;gt;$41 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$41&amp;lt;/tt&amp;gt; || Mute + Go To IPL Boot ROM || &amp;lt;tt&amp;gt;$41 $58 ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$42-$FF&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;?? ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====NOP====&lt;br /&gt;
Does absolutely nothing. Doesn&#039;t even acknowledge.&lt;br /&gt;
&lt;br /&gt;
====Play Sound====&lt;br /&gt;
&amp;lt;pre&amp;gt;$0x ?? ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; is the sound ID. All sounds play on channel 1. These are uninterruptible unless stopped with the &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; command first.&lt;br /&gt;
&lt;br /&gt;
====Mute====&lt;br /&gt;
Mutes the sound by zeroing out the main volume and zeroing out the DSP registers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$41 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;, when set to &amp;lt;tt&amp;gt;$58&amp;lt;/tt&amp;gt;, jumps to the [[SPC700/IPL ROM|IPL Boot ROM]]. Interestingly, that means that this command spells out &amp;lt;tt&amp;gt;AX&amp;lt;/tt&amp;gt; in ASCII.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;br /&gt;
[[Category:N-SPC Variants]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Imagitec_Design/Build_Sorting&amp;diff=5614</id>
		<title>N-SPC Engine/Imagitec Design/Build Sorting</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Imagitec_Design/Build_Sorting&amp;diff=5614"/>
		<updated>2023-06-13T23:12:59Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Found a new N-SPC build in Dragon&amp;#039;s Magic (JP version of Dragon&amp;#039;s Lair) at the Konami logo. Mostly similar to American Gladiators, which is already barebones to begin with... so it&amp;#039;s marked as a branch.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;American Gladiators&amp;lt;br&amp;gt;The Humans&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 E8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0DA3&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Top Gear/Top Racer&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 E8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0DA5&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Wheel of Fortune&#039;&#039; (Title Screen)&amp;lt;br&amp;gt;&#039;&#039;Wheel of Fortune - Deluxe Edition&#039;&#039; (Title Screen) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 E8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0DCB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Wheel of Fortune&#039;&#039; (In Game)&amp;lt;br&amp;gt;&#039;&#039;Wheel of Fortune - Deluxe Edition&#039;&#039; (In Game) || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F4 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0991&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Motivetime Branch==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Dragon&#039;s Magic&#039;&#039; (Konami logo) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 E8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0DC1&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engine Build Sorting Pages]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Kemco&amp;diff=5185</id>
		<title>N-SPC Engine/Kemco</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Kemco&amp;diff=5185"/>
		<updated>2023-05-21T02:25:25Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Master Volume -&amp;gt; Main Volume&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Go back to [[N-SPC Engine]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Kemco is the first company outside of Nintendo themselves to release a game using their own variant of N-SPC (that being Bombuzal). The main customization that they did was to have the CPUIO registers play sounds on specific channels, and only the channels on the phrase list specified to be used by the corresponding CPUIO register would be used. All non-music CPUIO registers, when processing phrase data, also did not support the fast forward phrase commands. One other CPUIO register was allocated mainly to perform volume fades.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Version !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Bombuzal || 1.0 || &amp;lt;tt&amp;gt;0x10EB&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x102B&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x04807A&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Lagoon || 2.0 || &amp;lt;tt&amp;gt;0x1156&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x1096&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0D80A4&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Drakkhen || 3.0 || &amp;lt;tt&amp;gt;0x129E&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11DE&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1C805C&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Ka-blooey || 3.0 || &amp;lt;tt&amp;gt;0x129E&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11DE&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x048080&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| First Samurai || 3.1 || &amp;lt;tt&amp;gt;0x129E&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11DE&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0DB15E&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Phalanx - The Enforce Fighter A-144 || 3.1 || &amp;lt;tt&amp;gt;0x129E&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11DE&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1EB23E&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Super Drakkhen/Dragon View || 3.1 || &amp;lt;tt&amp;gt;0x129E&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11DE&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x09B6F6&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Super Full Metal || 3.1 || &amp;lt;tt&amp;gt;0x129E&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11DE&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0C80B6&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| X Zone || 3.1 || &amp;lt;tt&amp;gt;0x129E&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11DE&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0FAEE6&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Kid Klown in Crazy Chase || 4.0 || &amp;lt;tt&amp;gt;0x12A1&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11E1&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1EC1E0&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Kemco/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
Each CPUIO register has an individual use.&amp;lt;br&amp;gt;&lt;br /&gt;
===CPUIO0 ($2140/$F4)===&lt;br /&gt;
This register always controls which sound ID will play out of channels 1-6, regardless of which sound driver version is used. It also supports the [[N-SPC_Engine#Communication_with_the_SNES|source build&#039;s N-SPC/Kankichi commands]]. These same commands are not present in the other CPUIO ports that control the channels, and instead you can only play or stop them.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Stop Sound || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt; || Play Sound (Channels 1-6) || &amp;lt;tt&amp;gt;xx ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Pause Sound (Channels 1-6) || &amp;lt;tt&amp;gt;$F0 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Continue Sound (Channels 1-6) || &amp;lt;tt&amp;gt;$F1 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$FF ?? xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The output to $2140/$F4 is as following...&lt;br /&gt;
* &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; - Sound is not playing (usually caused by the zero command)&lt;br /&gt;
* &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; - Usually on the first tempo tick only, or sound is paused (caused by commands &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* &amp;lt;tt&amp;gt;$40&amp;lt;/tt&amp;gt; - Sound is playing on channels 1-6&lt;br /&gt;
===CPUIO1 ($2141/$F5)===&lt;br /&gt;
This register controls which sound ID will play of of the following channel IDs, depending on the version...&lt;br /&gt;
* V1.0, V3.0: Channels 7-8&lt;br /&gt;
* V2.0, V4.0: Channel 7&lt;br /&gt;
The output is as following...&lt;br /&gt;
* &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; - Most common output with V1.0 and V3.0 (even if sound is playing). Otherwise indicates that a sound is not playing.&lt;br /&gt;
* &amp;lt;tt&amp;gt;$40&amp;lt;/tt&amp;gt; - Usually on the first tempo tick only for V2.0 and V4.0 after the sound is activated.&lt;br /&gt;
* &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; - Sound is playing on channel 7.&lt;br /&gt;
* &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; - Usually on the first tempo tick only for V1.0 and V3.0 after the sound is activated.&lt;br /&gt;
&lt;br /&gt;
===CPUIO2 ($2142/$F6)===&lt;br /&gt;
Only used in V2.0 and V4.0. This register always controls which sound ID will play out of channel 8.&amp;lt;br&amp;gt;&lt;br /&gt;
This register always outputs a zero on V1.0 and V3.0-V3.1. Otherwise, when it is used, the output is...&lt;br /&gt;
* &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; - Most common output, even if sound is playing.&lt;br /&gt;
* &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; - Usually on the first tempo tick only after the sound is activated.&lt;br /&gt;
&lt;br /&gt;
===CPUIO3 ($2143/$F7)===&lt;br /&gt;
Never used in V2.0. It does output a value, though: namely, whatever you sent in $2142/$F6.&amp;lt;br&amp;gt;&lt;br /&gt;
This CPUIO register is used to perform volume fades on either the note volumes of channels 1-8 or the MVOL DSP registers (The EVOL DSP registers are modified as well, but they get overwritten shortly afterwards). The values supported depend on the sound driver version.&lt;br /&gt;
====Commands (V1.0)====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00-$9F&amp;lt;/tt&amp;gt; || Pause Volume Operations + Acknowledge&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A0&amp;lt;/tt&amp;gt; || Reset Volume Operations (Channels 1-6)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A1&amp;lt;/tt&amp;gt; || Fade Out (Channels 1-6)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A2&amp;lt;/tt&amp;gt; || Fade In (Channels 1-6)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A3&amp;lt;/tt&amp;gt; || Zero Volume (Channels 1-6)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A4&amp;lt;/tt&amp;gt; || Volume Restore (Channels 7-8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A5&amp;lt;/tt&amp;gt; || Reset Volume Operations (Channels 7-8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A6&amp;lt;/tt&amp;gt; || Fade Out (Channels 7-8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A7&amp;lt;/tt&amp;gt; || Fade In (Channels 7-8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A8&amp;lt;/tt&amp;gt; || Zero Volume (Channels 7-8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A9&amp;lt;/tt&amp;gt; || Volume Restore (Channels 7-8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$AA-$FF&amp;lt;/tt&amp;gt; || Pause Volume Operations + Acknowledge&lt;br /&gt;
|}&lt;br /&gt;
====Commands (V3.0-V4.0)====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Versions Supported&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt; || Pause Volume Operations + Acknowledge || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; || Reset Volume Operations (Channels 1-6) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$81&amp;lt;/tt&amp;gt; || Fade Out (Channels 1-6) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$82&amp;lt;/tt&amp;gt; || Fade In (Channels 1-6) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$83&amp;lt;/tt&amp;gt; || Zero Volume (Channels 1-6) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$84&amp;lt;/tt&amp;gt; || Volume Restore (Channels 1-6) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$85-$9F&amp;lt;/tt&amp;gt; || Pause Volume Operations + Acknowledge ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A0&amp;lt;/tt&amp;gt; || Reset Volume Operations (Channels 7-8) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A1&amp;lt;/tt&amp;gt; || Fade Out (Channels 7-8) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A2&amp;lt;/tt&amp;gt; || Fade In (Channels 7-8) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A3&amp;lt;/tt&amp;gt; || Zero Volume (Channels 7-8) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A4&amp;lt;/tt&amp;gt; || Volume Restore (Channels 7-8) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A5-$DF&amp;lt;/tt&amp;gt; || Pause Volume Operations + Acknowledge || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt; || Reset Volume Operations (Main Volume) || V3.0-V4.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt; || Fade Out (Main Volume) || V3.0-V4.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt; || Fade In (Main Volume) || V3.0-V4.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt; || Zero Volume (Main Volume) || V3.0-V4.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt; || Volume Restore (Main Volume) || V3.0-V4.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E5-$FF&amp;lt;/tt&amp;gt; || Pause Volume Operations + Acknowledge ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For V3.0-V3.1, &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; and up can be transformed into this binary-based notation instead:&lt;br /&gt;
&amp;lt;pre&amp;gt;%1yyxxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; is a command ID. The commands are as following...&lt;br /&gt;
** &amp;lt;tt&amp;gt;%00000&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;) - Reset Volume Operations&lt;br /&gt;
** &amp;lt;tt&amp;gt;%00001&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;) - Fade Out&lt;br /&gt;
** &amp;lt;tt&amp;gt;%00010&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;) - Fade In&lt;br /&gt;
** &amp;lt;tt&amp;gt;%00011&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;) - Zero Volume&lt;br /&gt;
** &amp;lt;tt&amp;gt;%00100&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;) - Volume Restore&lt;br /&gt;
** Any other value (&amp;lt;tt&amp;gt;$05-$1F&amp;lt;/tt&amp;gt;) - Pause Volume Operations + Acknowledge&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yy&amp;lt;/tt&amp;gt; defines what will be affected by the command. The values are...&lt;br /&gt;
** &amp;lt;tt&amp;gt;%00&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$0&amp;lt;/tt&amp;gt;) - Channels 1-6&lt;br /&gt;
** &amp;lt;tt&amp;gt;%01&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$1&amp;lt;/tt&amp;gt;) - Channels 7-8&lt;br /&gt;
** &amp;lt;tt&amp;gt;%10&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$2&amp;lt;/tt&amp;gt;) - Invalid (causes all values to merely acknowledge)&lt;br /&gt;
** &amp;lt;tt&amp;gt;%11&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$3&amp;lt;/tt&amp;gt;) - Main Volume&lt;br /&gt;
&lt;br /&gt;
====Pause Volume Operations + Acknowledge====&lt;br /&gt;
Echoes back the value you just sent to $2143/$F7. All volume operations are also paused, which includes fades, since the register is constantly polled.&lt;br /&gt;
&lt;br /&gt;
====Reset Volume Operations====&lt;br /&gt;
The command ID used depends on the version...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 1-6&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A0&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 7-8&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A5&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$A0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Main Volume&amp;lt;/u&amp;gt;&lt;br /&gt;
* V3.0-V4.0: &amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command resets all volume-related operations, specifically by resetting the flags that they were triggered for the first time. This also pauses fades. $2143/$F7 outputs a zero.&lt;br /&gt;
&lt;br /&gt;
====Fade Out====&lt;br /&gt;
The command ID used depends on the version...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 1-6&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A1&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$81&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 7-8&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A6&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$A1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Main Volume&amp;lt;/u&amp;gt;&lt;br /&gt;
* V3.0-V4.0: &amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fades out the volume to 0. On V1.0, this is done at a rate of 3 per tempo tick: on other versions, it&#039;s 1 per tempo tick. On V3.0 and later, the original volume value is saved. $2143/$F7 outputs the current volume value of the last channel in the set (or the intended right echo volume value in the main volume&#039;s case).&amp;lt;br&amp;gt;&lt;br /&gt;
The command does not properly function past V1.0 for channels 1-6. Technically it still works, but a wrong branching location causes the channel ID to use (and the number of channels to copy) to not be initialized properly, which causes the volume values to not be saved.&lt;br /&gt;
&lt;br /&gt;
====Fade In====&lt;br /&gt;
The command ID used depends on the version...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 1-6&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$82&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 7-8&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A7&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$A2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Main Volume&amp;lt;/u&amp;gt;&lt;br /&gt;
* V3.0-V4.0: &amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fades in the volume to the original volume at a rate of 1 per tempo tick. If no value was saved beforehand, this can overflow back to zero. $2143/$F7 outputs the current volume value of the last channel in the set (or the intended right echo volume value in the main volume&#039;s case).&lt;br /&gt;
&lt;br /&gt;
====Zero Volume====&lt;br /&gt;
The command ID used depends on the version...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 1-6&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A3&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$83&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 7-8&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A8&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$A3&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Main Volume&amp;lt;/u&amp;gt;&lt;br /&gt;
* V3.0-V4.0: &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeroes out the volume, saving the original volume for restoration later on. Unless this is done on the main volume, you must reset volume operations to use this command again. $2143/$F7 outputs the current volume value (or the intended right echo volume value in the main volume&#039;s case) for one tempo tick, then a $01 (or, for the main volume, always outputs a zero).&amp;lt;br&amp;gt;&lt;br /&gt;
The command does not properly function past V1.0 for channels 1-6 due to a wrong branching location.&lt;br /&gt;
&lt;br /&gt;
====Volume Restore====&lt;br /&gt;
The command ID used depends on the version...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 1-6&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$84&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 7-8&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A9&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$A4&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Main Volume&amp;lt;/u&amp;gt;&lt;br /&gt;
* V3.0-V4.0: &amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restores the volumes to the saved value. Unless this is done on the main volume, you must reset volume operations to use this command again. $2143/$F7 outputs the current volume value for one tempo tick, then a $01 (or, for the main volume, always outputs the intended right echo volume value... which is saved to the left main volume by mistake).&amp;lt;br&amp;gt;&lt;br /&gt;
The command does not properly function past V1.0 for channels 1-6 due to a wrong branching location.&amp;lt;br&amp;gt;&lt;br /&gt;
The main volume variant does not work properly due to a typo in the code: specifically, the right echo volume gets copied to the left main volume by mistake, overwriting the correct value that was copied earlier.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;br /&gt;
[[Category:N-SPC Variants]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=5177</id>
		<title>David Whittaker Sound Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=5177"/>
		<updated>2023-05-21T01:29:36Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Italicizing game names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;David Whittaker Sound Engine&#039;&#039;&#039; is a sound driver for the SPC700 programmed by David Whittaker.&lt;br /&gt;
&lt;br /&gt;
Many games have multiple different builds stored in the game at once, sometimes with code differences. Almost every single game has at least one unique build not shared by any of the other games: the exceptions are...&lt;br /&gt;
* The opening logos for &#039;&#039;Lemmings 2: The Tribes&#039;&#039; and &#039;&#039;Apocalypse II&#039;&#039;&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; Beta&#039;s Title Screen and &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039;&#039; US Beta&lt;br /&gt;
* &#039;&#039;Lemmings 2: The Tribes&#039;&#039;&#039; most common build and &#039;&#039;Riddick Bowe Boxing&#039;&#039;&#039;s Japanese version&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[David Whittaker Sound Engine/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
These are the games where the sound engine was used:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Version !! VCMD Code Location !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Dream TV&#039;&#039; || 0.0 (Beta 2)&amp;lt;br&amp;gt;2.1 (all other versions) || &amp;lt;tt&amp;gt;0x098A&amp;lt;/tt&amp;gt; (Beta 2)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x0196A2&amp;lt;/tt&amp;gt; (Beta 2, uncompressed)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x039B16&amp;lt;/tt&amp;gt; (all other versions, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; || 1.0 || &amp;lt;tt&amp;gt;0x04F1&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Kick Off/Super Kick Off&#039;&#039; || 1.0 || &amp;lt;tt&amp;gt;0x04E6&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x098000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Batman: Revenge of the Joker&#039;&#039; || 2.0 || &amp;lt;tt&amp;gt;0x0610&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x068000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Super SWIV/Firepower 2000&#039;&#039; || 2.2 || &amp;lt;tt&amp;gt;0x06AD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x158000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Gods&#039;&#039; || 2.3 || &amp;lt;tt&amp;gt;0x0500&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0600&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0612&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x980000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x98AFAC&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x99D448&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x9A8000&amp;lt;/tt&amp;gt; (all versions, three unique build variants, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;World Class Rugby&#039;&#039; || 2.3 || &amp;lt;tt&amp;gt;0x0608&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0B8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Battle Cars&#039;&#039; || 3.0 || &amp;lt;tt&amp;gt;0x0717&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0A8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Chavez/Riddick Bowe Boxing&#039;&#039; || 3.0 (US version)&amp;lt;br&amp;gt;3.1 (all other versions) || &amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt; (Japanese version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067C&amp;lt;/tt&amp;gt; (US version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067D&amp;lt;/tt&amp;gt; (Chavez) || &amp;lt;tt&amp;gt;0x0D8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions except &#039;&#039;Chavez&#039;&#039;)&amp;lt;br&amp;gt;(three unique build variants, one per version between &#039;&#039;Chavez&#039;&#039;, US &amp;amp; Japanese versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; (US beta)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x06A4&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x9C8000&amp;lt;/tt&amp;gt; (all versions except US beta)/&amp;lt;tt&amp;gt;0x9E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Apocalypse II&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0624&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x118000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x168000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x0601&amp;lt;/tt&amp;gt; (US and European version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x060B&amp;lt;/tt&amp;gt; (US and Japanese version Title Screen)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0704&amp;lt;/tt&amp;gt; (Japanese version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x070B&amp;lt;/tt&amp;gt; (European version Title Screen) || &amp;lt;tt&amp;gt;0x1B8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x08D500&amp;lt;/tt&amp;gt; (US &amp;amp; Japanese version)/&amp;lt;tt&amp;gt;0x08D550&amp;lt;/tt&amp;gt; (European beta version)/&amp;lt;tt&amp;gt;0x08D640&amp;lt;/tt&amp;gt; (European version)&amp;lt;br&amp;gt;(Four unique build variants: two Title Screen (US/JP compared to EU) and two In-Game (US/EU compare to JP))&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Kick Off 3&#039;&#039; (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x0658&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1A8000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x1D8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Lemmings 2: The Tribes&#039;&#039; || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x060F&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0697&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 16 copies of the code in the ROM, with five different build variants being present: four of them are used in one instance each, that being the opening logo, the Title Screen, the Beach Tribe and the Cavelem Tribe, and the others use a single common copy of the code with modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06CA&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 36 copies of the code in the ROM, none of which are unique except for the sound data and modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Shaq Fu&#039;&#039; || 4.0a || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD96408&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Michael Jordan: Chaos in the Windy City&#039;&#039; || 4.0b || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD2B18F&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
Each command is triggered by sending the parameters to $2141-$2143 first, then the command ID to $2140. The latches are cleared afterwards on all registers, which means the same command IDs can be sent again, provided the parameters are resent.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
====V0.0====&lt;br /&gt;
There is no acknowledgement to the SNES beyond the latches being cleared.&amp;lt;br&amp;gt;&lt;br /&gt;
====V1.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140-$2142 are updated every time a command ID is sent, and $2143 is updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz %00000abc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a parameter that was sent to $2141 to execute the command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%a&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 7.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%b&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 8.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%c&amp;lt;/tt&amp;gt; indicates that music is playing.&lt;br /&gt;
&lt;br /&gt;
====V2.0-V4.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141, and the internal command counter is initialized to the same value.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140 is updated every time a command ID is sent, and $2141-$2143 are updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&lt;br /&gt;
=====V2.0-V4.0a=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx %yyyyyyyy zz %aaaaaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyyyyyyy&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing a note for music. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%aaaaaaaa&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing SFX. These bits are cleared only when the SFX has elapsed all of its ticks, not when the sample is done playing if non-looping. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====V4.0b=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V0.0-V1.0)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$06 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$07 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Master Volume || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09-$FF&amp;lt;/tt&amp;gt; || Latch Clear || &amp;lt;tt&amp;gt;$09-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V2.0-V4.0a)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 1) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 2) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Play SFX (Channel 3) || &amp;lt;tt&amp;gt;$06 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Play SFX (Channel 4) || &amp;lt;tt&amp;gt;$07 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Play SFX (Channel 5) || &amp;lt;tt&amp;gt;$08 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;$09 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$0A xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$0B xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$0C ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$0D ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; || Master &amp;amp; Echo Volume || &amp;lt;tt&amp;gt;$0E xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; || Echo Feedback || &amp;lt;tt&amp;gt;$0F xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; || Go to IPL Boot Program || &amp;lt;tt&amp;gt;$10 ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$11 xx ?? ??&amp;lt;/tt&amp;gt; || 2.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 1) || &amp;lt;tt&amp;gt;$12 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 2) || &amp;lt;tt&amp;gt;$13 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 3) || &amp;lt;tt&amp;gt;$14 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 4) || &amp;lt;tt&amp;gt;$15 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 5) || &amp;lt;tt&amp;gt;$16 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 6) || &amp;lt;tt&amp;gt;$17 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 7) || &amp;lt;tt&amp;gt;$18 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 8) || &amp;lt;tt&amp;gt;$19 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 1) || &amp;lt;tt&amp;gt;$1A xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 2) || &amp;lt;tt&amp;gt;$1B xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 3) || &amp;lt;tt&amp;gt;$1C xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 4) || &amp;lt;tt&amp;gt;$1D xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 5) || &amp;lt;tt&amp;gt;$1E xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 6) || &amp;lt;tt&amp;gt;$1F xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 7) || &amp;lt;tt&amp;gt;$20 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 8) || &amp;lt;tt&amp;gt;$21 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$22-$23 xx yy ??&amp;lt;/tt&amp;gt; || 4.0a&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$24-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$24-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V4.0b)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Stop All SFX || &amp;lt;tt&amp;gt;$05 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Master Volume || &amp;lt;tt&amp;gt;$06 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$07 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$09 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Stop Music &amp;amp; Load New Data || &amp;lt;tt&amp;gt;$0A ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$0B ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Panning Separation || &amp;lt;tt&amp;gt;$0C xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$0D-$FF ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Latch Clear/Increment Counter===&lt;br /&gt;
Clears the latches on the CPUIO registers and does nothing else except increment the counter on V2.0 and up, thus making this effectively a NOP. This occurs on almost all invalid command IDs: there is exactly one exception, noted under Invalid.&lt;br /&gt;
&lt;br /&gt;
===Invalid (Command &amp;lt;tt&amp;gt;$22&amp;lt;/tt&amp;gt; - Porky Pig&#039;s Haunted Holiday (beta) only)===&lt;br /&gt;
Crashes the sound driver. The only game that can do this is Porky Pig&#039;s Haunted Holiday (beta), and it is because it jumps directly to a RET opcode on an empty stack, thus causing a stack underflow and a jump to a memory location not used for code.&lt;br /&gt;
&lt;br /&gt;
===NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$01 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the music ID.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid music IDs from being played.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command because it effectively turns it into a NOP:&lt;br /&gt;
* &#039;&#039;Apocalypse II&#039;&#039; (Opening logo)/&#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Opening logo)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (Beta) (In-Game)&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Play SFX (Command &amp;lt;tt&amp;gt;$04-$05&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$04-$0B&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yz ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Plays a piece of SFX.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V0.0-V1.0:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channels 1-6: Not supported&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V2.0-V4.0a:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channel 1: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 2: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 3: &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 4: &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 5: &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 6: &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** V4.0b instead dynamically allocates the channel that the SFX is played on across channels 5-8, and has a fixed ID of &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the SFX ID. Setting the highest bit (covering IDs &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;) keys off the SFX instead of playing it.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid SFX IDs from being played, and only accept &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; as an ID to key off SFX on that channel. V4.0b doesn&#039;t support &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; at all.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;z&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** &#039;&#039;Dream TV&#039;&#039; (beta and final): &#039;&#039;&#039;2X&#039;&#039;&#039;&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Batman: Revenge of the Joker&#039;&#039;, &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;, &#039;&#039;Michael Jordan Chaos in the Windy City&#039;&#039; &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, &#039;&#039;Shaq-Fu&#039;&#039;, &#039;&#039;Super SWIV/Firepower 2000&#039;&#039;: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* &#039;&#039;Gods&#039;&#039; (Ending)&lt;br /&gt;
&lt;br /&gt;
====SFX Data Format====&lt;br /&gt;
Each SFX entry is a pointer to a 14-byte entry containing a series of parameters to utilize on a per-SFX basis. Only one channel&#039;s worth is defined here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc dd ee ff gg hh ii jj kk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to play the SFX for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to slide pitches before resetting and doing the slide again.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a starting value for either the PITCHL DSP register or a noise frequency.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a starting value for the PITCHH DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is the offset to apply to either the PITCHL DSP register or noise frequency per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a offset to apply to the PITCHH DSP register per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a direct write to the SRCN DSP register. &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; and up instead cause this to use noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; modifies the pitch using RNG using a non-zero value (except for V3.0 and up, this value is any non-zero value). How it is modified depends on the version.&lt;br /&gt;
** V0.0-V2.0 overwrites the pitch settings and instead uses two bytes of RNG values for the pitch on a per-step basis.&lt;br /&gt;
** V2.1 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the high byte of the final pitch output on a per-step basis.&lt;br /&gt;
** V2.2 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
** V2.3 does nothing.&lt;br /&gt;
** V3.0 and up apply a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff&amp;lt;/tt&amp;gt; defines the sign for the pitch offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; turns off pitch slides for the SFX.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; apply a positive offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; apply a negative offset.&lt;br /&gt;
* &amp;lt;tt&amp;gt;gg&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to perform the pitch slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;hh&amp;lt;/tt&amp;gt; is a direct write to the ADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt; is a direct write to the ADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;jj&amp;lt;/tt&amp;gt; is generally an endless flag, but its operation differs between versions.&lt;br /&gt;
** For V0.0-V4.0a, when this value is non-zero, it causes the SFX to be played endlessly until keyed off or interrupted. It also causes pitch slides to run forever.&lt;br /&gt;
** For V4.0b, this acts as SFX priority. If all four channels are being used for SFX and the priority of the incoming SFX is greater than the SFX currently played, then the SFX is overwritten. The SFX plays forever if this value is greater than &amp;lt;tt&amp;gt;$7F&amp;lt;/tt&amp;gt;, like what is done in V0.0-V4.0a.&lt;br /&gt;
* &amp;lt;tt&amp;gt;kk&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) per step.&lt;br /&gt;
&lt;br /&gt;
===Stop All SFX (Command &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops all SFX from playing in channels 5-8.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at maximum tempo... which means every ten timer 0 ticks. This is equivalent to a tempo of 256.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at normal tempo.&lt;br /&gt;
&lt;br /&gt;
===Master &amp;amp; Echo Volume (Command &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V1.0), &amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the MVOLL and MVOLR DSP registers.&lt;br /&gt;
** V2.0 and up may also set the EVOLL and EVOLR DSP registers, but only if echo is supported in that build. It is always scaled by the master volume. The scaler multiplier (actually done with shifts) is as following, sorted by build...&lt;br /&gt;
*** &#039;&#039;Batman: Revenge of the Joker&#039;&#039;: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Dream TV&#039;&#039;: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Gods&#039;&#039; (all builds): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;World Class Rugby&#039;&#039;: &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (Driving): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Cavelem Tribe): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Echo Feedback (Command &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0F xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the EFB DSP register.&lt;br /&gt;
&lt;br /&gt;
This is only ever supported if echo is supported in the ROM. That means only these builds support this command:&lt;br /&gt;
* &#039;&#039;Batman: Revenge of the Joker&#039;&#039;&lt;br /&gt;
* &#039;&#039;Dream TV&#039;&#039;&lt;br /&gt;
* &#039;&#039;Gods&#039;&#039; (all builds)&lt;br /&gt;
* &#039;&#039;World Class Rugby&#039;&#039;&lt;br /&gt;
* &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (Driving)&lt;br /&gt;
* &#039;&#039;Lemmings 2: The Tribes&#039;&#039; (Cavelem Tribe)&lt;br /&gt;
&lt;br /&gt;
These other games have a reference for the ID, but effectively make it a NOP:&lt;br /&gt;
* &#039;&#039;Battle Cars&#039;&#039;&lt;br /&gt;
* &#039;&#039;Riddick Bowe Boxing/Chavez&#039;&#039; (all versions except Japanese)&lt;br /&gt;
* &#039;&#039;Shaq-Fu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Go to IPL Boot Program (Command &amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
Jumps directly to the [[SPC700/IPL ROM|IPL Boot Program]].&lt;br /&gt;
&lt;br /&gt;
===Set Tempo (Command &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; (V2.1-V2.2, V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$11 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the tempo to set the song at. This overwrites the song&#039;s tempo settings.&lt;br /&gt;
&lt;br /&gt;
===Set SFX Volume (Command &amp;lt;tt&amp;gt;$12-$19&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii ?? xy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** &#039;&#039;Michael Jordan Chaos in the Windy City&#039;&#039; &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Set SFX Pitch (Command &amp;lt;tt&amp;gt;$1A-$21&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; overwrites the PITCHL value used in the SFX data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; overwrites the PITCHH value used in the SFX data.&lt;br /&gt;
&lt;br /&gt;
This command is only supported in the following builds...&lt;br /&gt;
* &#039;&#039;Battle Cars&#039;&#039;&lt;br /&gt;
* &#039;&#039;World Cup Striker&#039;&#039; (European version) (Title Screen)&lt;br /&gt;
* &#039;&#039;Elite Soccer/World Cup Striker&#039;&#039; (European version) (In-Game)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (beta) (In-Game)&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; (beta) (Title Screen)&lt;br /&gt;
* &#039;&#039;Porky Pig&#039;s Haunted Holiday&#039;&#039; (beta)&lt;br /&gt;
* &#039;&#039;Shaq-Fu&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Not all IDs are supported in these builds...&lt;br /&gt;
* &#039;&#039;Lawnmower Man/Virtual Wars&#039;&#039; (In-Game) &#039;&#039;(does not support $1A-$1D, not even in the code)&#039;&#039;&lt;br /&gt;
* &#039;&#039;World Cup Striker (Japanese)&#039;&#039; (In-Game) &#039;&#039;(skips over $1A-$1D via a longer branding distance, though the code still exists)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; (V4.0a), &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Loads new data from the SNES using an IPL Boot ROM variant.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol should be nearly identical to IPL Boot ROM with a few differences or so, since the program seems like it&#039;s using a similar variant)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Stop Music &amp;amp; Load New Data (Command &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops the music, then loads new data from the SNES using an IPL Boot ROM variant.&lt;br /&gt;
&lt;br /&gt;
===Panning Separation (Command &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0C xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; sets the amount that the panning will influence the left and right volumes. The maximum is zero, while the minimum is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;, making it effectively mono.&lt;br /&gt;
&lt;br /&gt;
==Song Entry==&lt;br /&gt;
For each song entry in an array of song definitions, one byte is defined as a starting tempo, followed by a series of pointers defined [[little endian]] style for each channel. For &#039;&#039;Dream TV&#039;&#039; Beta and &#039;&#039;Kick Off&#039;&#039;, only five pointers are defined. For &#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;, only six pointers are defined. For all other games, eight pointers are defined.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (&#039;&#039;Dream TV Beta&#039;&#039; and &#039;&#039;Kick Off&#039;&#039;)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039;)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee ff ff&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting tempo.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. &#039;&#039;(&#039;&#039;Krusty&#039;s Super Fun House&#039;&#039; only pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff ff&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Two builds don&#039;t support song entries at all:&lt;br /&gt;
* The opening logos for &#039;&#039;Lemmings 2: The Tribes&#039;&#039; and &#039;&#039;Apocalypse II&#039;&#039;&lt;br /&gt;
* &#039;&#039;Kick Off 3&#039;&#039; Beta (In-Game)&lt;br /&gt;
&lt;br /&gt;
==Pattern Order List==&lt;br /&gt;
Each channel has a list of [[little endian]] pointers on a per-channel basis. If the pointer is zero, then you jump back to either the beginning of the pattern order list for that channel, or to the loop marker that was set by the $F5 VCMD.&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format at V0.0 is N-SPC/Kankichi-kun compatible minus noise support for SRCN values above 127. Post V1.0, one of the bytes loses its usage.&lt;br /&gt;
&lt;br /&gt;
The instrument format is defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0-V1.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz ?? bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register... but only for V1.0 and older. Otherwise, it&#039;s an unused byte.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt; || Note || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;%011xxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt; || Note Length || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Instant Pitch Change to Note || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0a only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Set Master Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0b only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Volume Scaler by Fraction ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Set ADSR ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Fine Tune ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Pitch Bend ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Pitch Envelope ID ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || L/R Voice Volume ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt; || Tempo ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt; || Jump to Pattern in Order List + Mark Loop Point ||&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt; || Key Off || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt; || One Note Delay || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt; || Instrument ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt; || Absolute Global Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt; || Absolute Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt; || Song End || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Pattern End || || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMDs &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (pre-V4.0), &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; (pre-V3.0), &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; (pre-V2.0), &amp;lt;tt&amp;gt;$F0-$F1&amp;lt;/tt&amp;gt; (pre-V1.0))===&lt;br /&gt;
The sound driver deliberately freezes itself via an infinite branch always loop rather than crashing or skipping the byte. This also takes up VCMD slots that are not filled in earlier versions.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMDs &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
The initial pitch of the note is calculated using a pitch table that contains one octave (and a note)&#039;s worth of pitch values. This value is shifted according to the octave used, and multiplied that by the instrument&#039;s pitch base to get the pitch for the note.&lt;br /&gt;
&lt;br /&gt;
===Note Length (VCMDs &amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%011xxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; represents your note length (as five bits).&lt;br /&gt;
Note lengths are defined as the number of tempo ticks plus one. Notes are keyed off either on another note or on the key off VCMD (&amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Instant Pitch Change to Note (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0a))===&lt;br /&gt;
Requires V4.0a to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the note to change the pitch to.&lt;br /&gt;
&lt;br /&gt;
===Set Master Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Requires V4.0b to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the value to directly write to the MVOL DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Volume Scaler by Fraction (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V3.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the numerator, and is the value to multiply the volume by. The scaling process is skipped if this is zero.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the denominator, and is the value to divide the multiplied volume by.&lt;br /&gt;
Put the two together, and you get the current volume multiplied by &amp;lt;math&amp;gt;\frac{x}{y}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Set ADSR (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V2.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Pitch Bend (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
Pitch bends are performed every 10 timer 0 ticks independently of the tempo. They are automatically terminated after one note.&lt;br /&gt;
&lt;br /&gt;
===Pitch Envelope ID (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an index to an array to a pointer of pitch envelopes. The pitch envelopes always loop and are clocked at a rate of 10 timer 0 ticks independently of the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
====Pitch Envelope Format====&lt;br /&gt;
=====Pitch Offset Tick (CMD &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$81-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed offset in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
=====Restart Pitch Envelope (CMD &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;$80&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jumps back to the beginning of the pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===L/R Voice Volume (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F3 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This is a direct DSP register write to the VxVOL registers, with &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; being the left volume and &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; being the right volume.&lt;br /&gt;
This VCMD&#039;s operation changes depending on the version:&lt;br /&gt;
* V0.0-V2.2: Just a straight write with no modifications made to the input.&lt;br /&gt;
* V2.3: The input values are shifted left once.&lt;br /&gt;
* V3.0-V4.0b: The input values are scaled by VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;, then shifted left once.&lt;br /&gt;
* V4.0a: The input values are scaled by the values used for VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;. The shifting operation is not done here.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as &amp;lt;math&amp;gt;10*\frac{256}{x}&amp;lt;/math&amp;gt; timer 0 ticks. Zero freezes the song except for pitch bends and envelopes, which are not affected by the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
===Jump to Pattern in Order List + Mark Loop Point (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern pointer in the order list. The loop point is marked here.&lt;br /&gt;
&lt;br /&gt;
===Key Off (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===One Note Delay (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Absolute Global Transposition (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for all channels for the music.&lt;br /&gt;
Global transpsition is not applied to channel 4 for V0.0-2.1.&lt;br /&gt;
&lt;br /&gt;
===Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FC xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for the channel.&lt;br /&gt;
&lt;br /&gt;
===Song End (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Terminates the song for all of the channels.&lt;br /&gt;
&lt;br /&gt;
===Pattern End (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Ends the pattern and goes to the pattern order list to fetch another pattern.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Koji_Kondo&amp;diff=5176</id>
		<title>N-SPC Engine/Nintendo/Koji Kondo</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Koji_Kondo&amp;diff=5176"/>
		<updated>2023-05-21T01:23:15Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Replacing my under construction note with the standard stub template.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Go back to [[N-SPC Engine/Nintendo]]&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Koji Kondo&#039;&#039;&#039; is the first user of the N-SPC engine, having used its earliest known version in two games.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO insert table here&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Nintendo/Build Sorting|here]] for all variants by Nintendo.&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
For Super Mario World and Pilotwings, see [[N-SPC_Engine/Nintendo/Koji_Kondo/Prototype#Communication_with_the_SNES|the Prototype Variant&#039;s page]].&lt;br /&gt;
&lt;br /&gt;
===Super Mario All-Stars===&lt;br /&gt;
The protocol in general is mostly adapted from Super Mario World&#039;s, though with some differences here and there, most notably in the triggering of the Hurry Up! SFX and the SFX sequences in general.&lt;br /&gt;
====CPUIO0 ($2140/$F4)====&lt;br /&gt;
This register controls the SFX to play on channel 5.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%?xxxxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$7E/$81-$FE&amp;lt;/tt&amp;gt; || Play SFX Sequence Set 1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%?1111111&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$7F/$FF&amp;lt;/tt&amp;gt; || Hurry Up!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Play SFX Sequence Set 1 (Command &amp;lt;tt&amp;gt;$01-$7E/$81-$FE&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;%?xxxxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; is the SFX ID to play. The ID currently playing is echoed back to $2140 on the SNES, including the highest bit (which otherwise can be toggled for retriggering purposes, but otherwise doesn&#039;t actually do anything.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; keys off all notes and pauses the music once it has finished playing. &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt; will unpause the music.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; cannot be interrupted except by &amp;lt;tt&amp;gt;$43&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$3B&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$43&amp;lt;/tt&amp;gt; force echo off while they are playing.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; VCMD for this set only is programmed to restart the SFX from the beginning.&lt;br /&gt;
&lt;br /&gt;
======SFX Sequence Format======&lt;br /&gt;
See the [[N-SPC Engine/Prototype/SFX Sequence Format|SFX Sequence Format]] subpage.&lt;br /&gt;
&lt;br /&gt;
=====Hurry Up! (Command &amp;lt;tt&amp;gt;$7F/$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Plays SFX ID &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; on both SFX sequence sets and offsets the tempo by &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; without overflow checks. This can stack if it is played multiple times, but only the first one will remain in effect until forced off.&lt;br /&gt;
&lt;br /&gt;
====CPUIO1 ($2141/$F5)====&lt;br /&gt;
This register controls some hard-coded SFX on channel 8.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;xy&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$EF, $F1-$FE&amp;lt;/tt&amp;gt; || Hard-coded SFX + BRR Wind Control&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Go to IPL Boot ROM&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Load New Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Hard-coded SFX + Noise BRR Wind Control (Command &amp;lt;tt&amp;gt;$01-$EF&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F1-$FE&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;u&amp;gt;Input&amp;lt;/u&amp;gt;&amp;lt;pre&amp;gt;xy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Output&amp;lt;/u&amp;gt;&amp;lt;pre&amp;gt;%000xyyyy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; controls the BRR wind on channel 6 as following...&lt;br /&gt;
** &amp;lt;tt&amp;gt;$1&amp;lt;/tt&amp;gt; activates BRR wind on channel 6. The upper four bits will output a $1 to $2141 on the SNES.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$2&amp;lt;/tt&amp;gt; deactivates BRR wind. This clears the output of the upper four bits for $2141.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; plays hard-coded SFX on channel 8 as following...&lt;br /&gt;
** &amp;lt;tt&amp;gt;$1&amp;lt;/tt&amp;gt; plays Mario&#039;s jumping SFX on channel 8. The value is echoed back to the SNES via $2141 while the SFX is playing. &lt;br /&gt;
** &amp;lt;tt&amp;gt;$4&amp;lt;/tt&amp;gt; plays the turnaround SFX. The value is echoed back to the SNES via $2141 while the SFX is playing.&lt;br /&gt;
** All other values are NOPs.&lt;br /&gt;
&lt;br /&gt;
=====Go to IPL Boot ROM (Command &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&#039;&#039;TODO go into specifics on what exactly is cleared out here before going to the loader&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====Load New Data (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&#039;&#039;TODO go into specifics on what exactly is cleared out here before going to the loader&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
====CPUIO2 ($2142/$F6)====&lt;br /&gt;
This register controls the music.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%01-$72&amp;lt;/tt&amp;gt; || Play Music&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$73-$EF&amp;lt;/tt&amp;gt; || Stop Noise BRR Wind + Fade Out&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Stop Music&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Fade Song Volume&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Restore Song Volume&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || Stop Noise BRR Wind + Fade Out + Reset Tempo Speedup&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F4-$FF&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F4-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Play Music (Command &amp;lt;tt&amp;gt;$01-$72&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
* The command ID provided is the music ID to play. The ID currently playing is echoed back to $2142 on the SNES.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$11-$12&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt; reset the tempo speedup effect done by the Hurry Up! command.&lt;br /&gt;
&lt;br /&gt;
=====Stop Noise BRR Wind + Fade Out (Command &amp;lt;tt&amp;gt;$73-$EF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Fades out the song volume to zero over 144 tempo ticks. The Noise BRR Wind is also halted.&lt;br /&gt;
======Reset Tempo Speedup (Command &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)======&lt;br /&gt;
Identical to the fade out command above, except the tempo speedup effect done by the Hurry Up! command is also reset, effective next tempo change or when another song is played.&lt;br /&gt;
&lt;br /&gt;
======Fade Song Volume (Command &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)======&lt;br /&gt;
Sets the song volume to $70.&lt;br /&gt;
&lt;br /&gt;
======Restore Song Volume (Command &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)======&lt;br /&gt;
Restores the song volume from a backup created from the $F1 command. If the backup turns out to be a zero volume case, this doesn&#039;t work.&lt;br /&gt;
&lt;br /&gt;
====CPUIO3 ($2143/$F7)====&lt;br /&gt;
This register controls the SFX to play on channel 7.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%?xxxxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$FF&amp;lt;/tt&amp;gt; || Play SFX Sequence Set 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=====NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
=====Play SFX Sequence Set 2 (Command &amp;lt;tt&amp;gt;$01-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;%?xxxxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; is the SFX ID to play. The ID currently playing is echoed back to $2143 on the SNES, including the highest bit (which otherwise can be toggled for retriggering purposes, but otherwise doesn&#039;t actually do anything.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; cannot be interrupted by any other instances. &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt;, however, can interrupt &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; VCMD for this set only is programmed to move the pointer back one byte instead of forward.&lt;br /&gt;
&lt;br /&gt;
======SFX Sequence Format======&lt;br /&gt;
See the [[N-SPC Engine/Prototype/SFX Sequence Format|SFX Sequence Format]] subpage.&lt;br /&gt;
&lt;br /&gt;
===SimCity===&lt;br /&gt;
This is the earliest released game to not have a command to load new data at all. Therefore, there is no way to switch sound drivers or even go back to the IPL ROM.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;TODO insert protocol here&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Super Donkey 1===&lt;br /&gt;
&#039;&#039;TODO insert protocol here&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Legend of Zelda - A Link To The Past===&lt;br /&gt;
&#039;&#039;TODO insert protocol here&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Star Glider===&lt;br /&gt;
&#039;&#039;TODO insert protocol here&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Star Fox/Star Wing===&lt;br /&gt;
&#039;&#039;TODO insert protocol here&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island===&lt;br /&gt;
&#039;&#039;TODO insert protocol here&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Star Fox 2===&lt;br /&gt;
&#039;&#039;TODO insert protocol here (there may be quite a few revisions)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;br /&gt;
[[Category:N-SPC Variants]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Source_Variant_Build_Sorting&amp;diff=5175</id>
		<title>N-SPC Engine/Source Variant Build Sorting</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Source_Variant_Build_Sorting&amp;diff=5175"/>
		<updated>2023-05-21T01:13:59Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Completing the italicization process&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Controller Test Cassette&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;SNES Burn-In Test Cartridge&#039;&#039; &#039;&#039;(one of three different builds)&#039;&#039;&amp;lt;br&amp;gt;World Class Service Super Nintendo Tester &#039;&#039;(one of three different builds, unused)&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt;,&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;F0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D35&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$0FD7&amp;lt;/tt&amp;gt; || For distinguishing purposes, known outside of these notes as simply Controller Test.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;World Class Service Super Nintendo Tester&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt;,&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;F0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D35&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$0FD9&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Wheel of Fortune - Deluxe Edition&#039;&#039; &#039;&#039;(unused)&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt;,&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;F0 03 3F ?? ??&amp;lt;/tt&amp;gt;,&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;3F ?? ??&amp;lt;/tt&amp;gt; at &amp;lt;tt&amp;gt;$09C8&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D35&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$1004&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$0700&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Hong Kong &#039;97&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;SM Choukyoushi Hitomi - Bangai Hen&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;SM Choukyoushi Hitomi Vol. 2&#039;&#039; Trial Version&amp;lt;br&amp;gt;&#039;&#039;SM Choukyoushi Hitomi Vol. 2&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;SM Choukyoushi Hitomi Vol. 2 Remix&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; Trial Version || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt;,&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;F0 03 3F ?? ??&amp;lt;/tt&amp;gt;,&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;3F ?? ??&amp;lt;/tt&amp;gt; at &amp;lt;tt&amp;gt;$09C8&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D35&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$1004&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$1511&amp;lt;/tt&amp;gt; || &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;SM Choukyoushi Hitomi Vol. 3&#039;&#039; (Alt 1) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D39&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Shijou Saikyou no Quiz Ou Ketteisen Super&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D40&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|}&lt;br /&gt;
[[Category:SPC Sound Engine Build Sorting Pages]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Build_Sorting&amp;diff=5174</id>
		<title>N-SPC Engine/Nintendo/Build Sorting</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Build_Sorting&amp;diff=5174"/>
		<updated>2023-05-21T01:12:59Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: If game names are being italicized, you&amp;#039;re going to need a lot more italics than what you came up with.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Unique cases==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Aging Cassette&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;SNES Burn-In Test Cartridge&#039;&#039;|| &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$113A&amp;lt;/tt&amp;gt;||For distinguishing purposes, known outside of these notes as &#039;&#039;Sound Module and Burn-In Test&#039;&#039; to refer to the copy found in the &#039;&#039;SNES Burn-In Test Cartridge&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Nintendo Power Menu Program&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0DCB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==F-Zero Builds==&lt;br /&gt;
This game has multiple revisional builds known.&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;F-Zero&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;A2 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1776&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;F-Zero&#039;&#039; (Beta)|| &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;A2 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1778&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tetris &amp;amp; Dr. Mario Builds==&lt;br /&gt;
These builds are unique to one game, but unlike Super Scope 6 (which you may have noticed that LazerBlazer and Blastris are separated due to different SFX execution), they also match in general execution.&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Tetris and Dr. Mario&#039;&#039; (Mixed Match) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$118F&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Tetris and Dr. Mario&#039;&#039; (Dr. Mario) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1199&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Tetris and Dr. Mario&#039;&#039; (Tetris) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$11A1&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Akito Nakatsuka==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Scope 6&#039;&#039; (LazerBlazer) (US version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B33&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Scope 6&#039;&#039; (LazerBlazer) (Japanese and European version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B37&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Game Boy&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;Super Game Boy 2&#039;&#039; || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A5D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;BS-X BIOS&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;Cassette Kensaki - NUS-you S Cassette&#039;&#039; || &amp;lt;tt&amp;gt;$0370&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$04AB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;JRA PAT&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;JRA PAT - Wide Taiouban&#039;&#039; || &amp;lt;tt&amp;gt;$06E0&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0739&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Sutte Hakkun&#039;&#039; || &amp;lt;tt&amp;gt;$06E0&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$074C&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Yuichi Ozaki===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Marvelous - Mouhitotsu no Takara-jima&#039;&#039; || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BC5&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;SA-1 Demo&#039;&#039; || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B23&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Heisei Shin Onigashima - Kouhen&#039;&#039;&amp;lt;br&amp;gt;&#039;&#039;Heisei Shin Onigashima - Zenpen&#039;&#039; || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 8F ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0C8D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hirokazu Tanaka==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Mario Paint&#039;&#039; (Beta) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$2625&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Mario Paint&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1430&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Mother 2/Earthbound&#039;&#039; || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$16A5&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Snoopy Concert&#039;&#039; || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$16EB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Kenji Yamamoto==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Metroid&#039;&#039; || &amp;lt;tt&amp;gt;$1500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1ED7&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Koji Kondo==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island&#039;&#039; || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A96&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island&#039;&#039; (beta version) || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B08&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox/Star Wing&#039;&#039; || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B14&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario All-Stars/Super Mario Collection&#039;&#039; || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0C11&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Legend of Zelda - A Link to the Past/Zelda no Densetsu - Kamigami no Triforce&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E22&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Glider&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E97&amp;lt;/tt&amp;gt;|| Prototype of Star Fox/Star Wing.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;SimCity&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$175D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Donkey 1&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1DC9&amp;lt;/tt&amp;gt;|| Sound driver build is a prototype of Legend of Zelda - A Link to the Past&#039;s.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Prototype===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario World&#039;&#039; (all other versions) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0697&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0BC0&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario World&#039;&#039; (Super Mario All-Stars + Super Mario World) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0697&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0BF4&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Pilotwings&#039;&#039; (European version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$06A3&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$126A&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Pilotwings&#039;&#039; (US &amp;amp; Japanese versions) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$06A3&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$12CD&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Yoji Inagaki===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1994-04-01) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6F&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1994-04-15) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6F&amp;lt;/tt&amp;gt;|| Except for a single opcode&#039;s difference at $064C, all of the code differences are after the SFX data, and thus pointers cannot be fully factored in.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1994-05-06 and 1994-05-13) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B62&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1994-08-31) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6D&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1994-12-28) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B9C&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1995-06-08) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BD4&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1995-06-22)&amp;lt;br&amp;gt;Star Fox 2 (1995-06-27) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BD7&amp;lt;/tt&amp;gt;|| These builds are identical to each other minus pointers placed after the SFX data.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; (1995-07-25) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BDA&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Star Fox 2&#039;&#039; || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BDF&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Taro Bando==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario Kart&#039;&#039; (beta version) (1992-01-21 build) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;2F ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt; || Refers to a sound.bin file with this timestamp that was not embedded in a known prototype build.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario Kart&#039;&#039; (beta version) (mkart) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D79&amp;lt;/tt&amp;gt;|| Refers to a prototype from April 13, 1992.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario Kart&#039;&#039; (beta version) (mario_kart-01) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? E8 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D65&amp;lt;/tt&amp;gt; || Refers to what is known as the Enigma prototype build.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario Kart&#039;&#039; (beta version) (mario_kart) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D74&amp;lt;/tt&amp;gt; || Refers to a prototype from late June 1992, created before kar4t.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario Kart&#039;&#039; (beta version) (kar4t) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1598&amp;lt;/tt&amp;gt; || Refers to a prototype from late June 1992, created after mario_kart.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario Kart&#039;&#039; (US version) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;7D C4 ?? 5F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1664&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$19B4&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Mario Kart&#039;&#039; (Japanese and European version) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;7D C4 ?? 5F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1664&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$19BA&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;FX Trax&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 E8 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D61&amp;lt;/tt&amp;gt;|| Prototype of Wild Trax/Stunt Race FX.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Wild Trax/Stunt Race FX&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D73&amp;lt;/tt&amp;gt;|| Loading program at $0675 before the actual start location&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Yumiko Kanki==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Special Tee Shot&#039;&#039; (Prototype) || &amp;lt;tt&amp;gt;$0460&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A78&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Special Tee Shot&#039;&#039; (BS-X version) || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B86&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Unknown==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;SNES Burn-In Test Cartridge&#039;&#039; || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6D&amp;lt;/tt&amp;gt;||For distinguishing purposes, known outside of these notes as Super Scope Test.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;Super Scope 6&#039;&#039; (Blastris) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;90 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D89&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
[[Category:SPC Sound Engine Build Sorting Pages]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=Category:MIDI-Based_SPC_Sound_Engines&amp;diff=2279</id>
		<title>Category:MIDI-Based SPC Sound Engines</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=Category:MIDI-Based_SPC_Sound_Engines&amp;diff=2279"/>
		<updated>2023-02-26T17:56:37Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Re-adding Accolade, mostly as a result of tracing finding a VCMD that was also from MIDI (meaning it had a mixture of actual MIDI and unofficial MIDI).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This contains a list of [[:Category:SPC Sound Engines|SPC Sound Engines]] whose internal VCMD format contains a match to [[MIDI]]&#039;s own format (at least as far as being able to generally identify it). Except for Loriciel and Silicon Sorcery&#039;s SPC sound engines, the header generally does not match MIDI&#039;s own format. They may contain custom and/or relocated VCMDs in place of standard MIDI features in some cases.&lt;br /&gt;
&lt;br /&gt;
The following SPC sound engine pages that satisfy this criteria have not been created yet:&lt;br /&gt;
* [[ACID]] (Realtime Associates)&lt;br /&gt;
* [[Advanced Real-time Dynamic Interplay]] (&#039;&#039;&#039;Not&#039;&#039;&#039; RPM Racing, Wolfenstein 3D or Super 3D Noah&#039;s Ark)&lt;br /&gt;
* [[Game Studio Engine]]&lt;br /&gt;
* [[Loriciel Engine]]&lt;br /&gt;
* [[Mindscape Engine]]&lt;br /&gt;
* [[Silicon Sorcery Engine]]&lt;br /&gt;
* [[Super Music Driver]] (Haüs Teknikka)&lt;br /&gt;
&lt;br /&gt;
These SPC engines almost match, but the highest bit of a VCMD has a different meaning:&lt;br /&gt;
* [[Accolade Engine]] &#039;&#039;(uses the highest bit to indicate whether there is a delay or not)&#039;&#039;&lt;br /&gt;
* [[Alfa System Engine]] &#039;&#039;(allows VCMD ID duplication through not setting the highest bit and also contains an option via the track header to use compressed data instead, therefore the internal compression format must be recorded as well)&#039;&#039;&lt;br /&gt;
* [[Bits Studios Engine]] &#039;&#039;(allows VCMD ID duplication through not setting the highest bit)&#039;&#039;&lt;br /&gt;
* [[Eurocom Engine]] &#039;&#039;(allows VCMD ID duplication through not setting the highest bit: the sound driver contains the ability to use backreferencing, somewhat akin to SNESGSS&#039;s, though I need to do some more analysis of this one, as this one has some more features... and nesting support)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=Category:MIDI-Based_SPC_Sound_Engines&amp;diff=2277</id>
		<title>Category:MIDI-Based SPC Sound Engines</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=Category:MIDI-Based_SPC_Sound_Engines&amp;diff=2277"/>
		<updated>2023-01-21T18:25:10Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Removed Accolade and added Game Studio, also sorted out Alfa System and Eurocom.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This contains a list of [[:Category:SPC Sound Engines|SPC Sound Engines]] whose internal VCMD format contains a match to [[MIDI]]&#039;s own format (at least as far as being able to generally identify it). Except for Loriciel and Silicon Sorcery&#039;s SPC sound engines, the header generally does not match MIDI&#039;s own format. They may contain custom and/or relocated VCMDs in place of standard MIDI features in some cases.&lt;br /&gt;
&lt;br /&gt;
The following SPC sound engine pages that satisfy this criteria have not been created yet:&lt;br /&gt;
* [[ACID]] (Realtime Associates)&lt;br /&gt;
* [[Advanced Real-time Dynamic Interplay]] (&#039;&#039;&#039;Not&#039;&#039;&#039; RPM Racing, Wolfenstein 3D or Super 3D Noah&#039;s Ark)&lt;br /&gt;
* [[Game Studio Engine]]&lt;br /&gt;
* [[Loriciel Engine]]&lt;br /&gt;
* [[Mindscape Engine]]&lt;br /&gt;
* [[Silicon Sorcery Engine]]&lt;br /&gt;
* [[Super Music Driver]] (Haüs Teknikka)&lt;br /&gt;
&lt;br /&gt;
These SPC engines almost match, but the highest bit of a VCMD has a different meaning:&lt;br /&gt;
* [[Alfa System Engine]] &#039;&#039;(allows VCMD ID duplication through not setting the highest bit and also contains an option via the track header to use compressed data instead, therefore the internal compression format must be recorded as well)&#039;&#039;&lt;br /&gt;
* [[Bits Studios Engine]] &#039;&#039;(allows VCMD ID duplication through not setting the highest bit)&#039;&#039;&lt;br /&gt;
* [[Eurocom Engine]] &#039;&#039;(allows VCMD ID duplication through not setting the highest bit: the sound driver contains the ability to use backreferencing, somewhat akin to SNESGSS&#039;s, though I need to do some more analysis of this one, as this one has some more features... and nesting support)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Build_Sorting&amp;diff=2272</id>
		<title>N-SPC Engine/Nintendo/Build Sorting</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Build_Sorting&amp;diff=2272"/>
		<updated>2022-11-23T18:04:20Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Adding Yumiko Kanki to the Nintendo section for build sorting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Unique cases==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Aging Cassette&amp;lt;br&amp;gt;SNES Burn-In Test Cartridge|| &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$113A&amp;lt;/tt&amp;gt;||For distinguishing purposes, known outside of these notes as Sound Module and Burn-In Test to refer to the copy found in the SNES Burn-In Test Cartridge.&lt;br /&gt;
|-&lt;br /&gt;
|Nintendo Power Menu Program || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0DCB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==F-Zero Builds==&lt;br /&gt;
This game has multiple revisional builds known.&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|F-Zero || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;A2 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1776&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|F-Zero (Beta)|| &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;A2 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1778&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tetris &amp;amp; Dr. Mario Builds==&lt;br /&gt;
These builds are unique to one game, but unlike Super Scope 6 (which you may have noticed that LazerBlazer and Blastris are separated due to different SFX execution), they also match in general execution.&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Tetris and Dr. Mario (Mixed Match) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$118F&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Tetris and Dr. Mario (Dr. Mario) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1199&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Tetris and Dr. Mario (Tetris) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$11A1&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Akito Nakatsuka==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Scope 6 (LazerBlazer) (US version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B33&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Scope 6 (LazerBlazer) (Japanese and European version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B37&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Game Boy&amp;lt;br&amp;gt;Super Game Boy 2 || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A5D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|BS-X BIOS&amp;lt;br&amp;gt;Cassette Kensaki - NUS-you S Cassette || &amp;lt;tt&amp;gt;$0370&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$04AB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|JRA PAT&amp;lt;br&amp;gt;JRA PAT - Wide Taiouban || &amp;lt;tt&amp;gt;$06E0&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0739&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Sutte Hakkun || &amp;lt;tt&amp;gt;$06E0&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$074C&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Yuichi Ozaki===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Marvelous - Mouhitotsu no Takara-jima || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BC5&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|SA-1 Demo || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B23&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Heisei Shin Onigashima - Kouhen&amp;lt;br&amp;gt;Heisei Shin Onigashima - Zenpen || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 8F ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0C8D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hirokazu Tanaka==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Mario Paint (Beta) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$2625&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Mario Paint || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1430&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Mother 2/Earthbound || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$16A5&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Snoopy Concert || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$16EB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Kenji Yamamoto==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Metroid || &amp;lt;tt&amp;gt;$1500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1ED7&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Koji Kondo==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A96&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island (beta version) || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B08&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox/Star Wing || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B14&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario All-Stars/Super Mario Collection || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0C11&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Legend of Zelda - A Link to the Past/Zelda no Densetsu - Kamigami no Triforce || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E22&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Star Glider || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E97&amp;lt;/tt&amp;gt;|| Prototype of Star Fox/Star Wing.&lt;br /&gt;
|-&lt;br /&gt;
|SimCity || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$175D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Donkey 1 || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1DC9&amp;lt;/tt&amp;gt;|| Sound driver build is a prototype of Legend of Zelda - A Link to the Past&#039;s.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Prototype===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario World (all other versions) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0697&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0BC0&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario World (Super Mario All-Stars + Super Mario World) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0697&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0BF4&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|Pilotwings (European version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$06A3&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$126A&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|Pilotwings (US &amp;amp; Japanese versions) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$06A3&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$12CD&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Yoji Inagaki===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-04-01) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6F&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-04-15) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6F&amp;lt;/tt&amp;gt;|| Except for a single opcode&#039;s difference at $064C, all of the code differences are after the SFX data, and thus pointers cannot be fully factored in.&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-05-06 and 1994-05-13) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B62&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-08-31) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6D&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-12-28) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B9C&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1995-06-08) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BD4&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1995-06-22)&amp;lt;br&amp;gt;Star Fox 2 (1995-06-27) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BD7&amp;lt;/tt&amp;gt;|| These builds are identical to each other minus pointers placed after the SFX data.&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1995-07-25) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BDA&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BDF&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Taro Bando==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (1992-01-21 build) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;2F ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt; || Refers to a sound.bin file with this timestamp that was not embedded in a known prototype build.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (mkart) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D79&amp;lt;/tt&amp;gt;|| Refers to a prototype from April 13, 1992.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (mario_kart-01) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? E8 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D65&amp;lt;/tt&amp;gt; || Refers to what is known as the Enigma prototype build.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (mario_kart) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D74&amp;lt;/tt&amp;gt; || Refers to a prototype from late June 1992, created before kar4t.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (kar4t) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1598&amp;lt;/tt&amp;gt; || Refers to a prototype from late June 1992, created after mario_kart.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (US version) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;7D C4 ?? 5F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1664&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$19B4&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (Japanese and European version) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;7D C4 ?? 5F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1664&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$19BA&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|FX Trax || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 E8 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D61&amp;lt;/tt&amp;gt;|| Prototype of Wild Trax/Stunt Race FX.&lt;br /&gt;
|-&lt;br /&gt;
|Wild Trax/Stunt Race FX || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D73&amp;lt;/tt&amp;gt;|| Loading program at $0675 before the actual start location&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Yumiko Kanki==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Special Tee Shot (Prototype) || &amp;lt;tt&amp;gt;$0460&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A78&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Special Tee Shot (BS-X version) || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B86&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Unknown==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|SNES Burn-In Test Cartridge || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6D&amp;lt;/tt&amp;gt;||For distinguishing purposes, known outside of these notes as Super Scope Test.&lt;br /&gt;
|-&lt;br /&gt;
|Super Scope 6 (Blastris) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;90 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D89&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
[[Category:SPC Sound Engine Build Sorting Pages]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo&amp;diff=2271</id>
		<title>N-SPC Engine/Nintendo</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo&amp;diff=2271"/>
		<updated>2022-11-23T18:02:22Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Marking this under the Unique cases instead because it is a one-game case (only found in Special Tee Shot, but it has two builds)...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Go back to [[N-SPC Engine]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Nintendo is the first user of the N-SPC engine, both at launch and with the prototype variant. There are a variety of game-specific or programmer-specific cases in here, and thus have been sorted accordingly for disambiguation reasons.&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Nintendo/Build Sorting|here]] for all variants by Nintendo.&lt;br /&gt;
&lt;br /&gt;
==Unique Cases==&lt;br /&gt;
* [[N-SPC Engine/Nintendo/F-Zero|F-Zero]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Sound Module and Burn-In Test|Sound Module and Burn-In Test]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Mario Paint|Mario Paint]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Super Metroid|Super Metroid]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Tetris and Dr. Mario|Tetris and Dr. Mario]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Nintendo Power Menu Program|Nintendo Power Menu Program]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Special Tee Shot|Special Tee Shot]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Super Scope 6 (Blastris)|Super Scope 6 (Blastris)]]&lt;br /&gt;
&lt;br /&gt;
==Multi-Game Cases==&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Akito Nakatsuka|Akito Nakatsuka]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Hirokazu Tanaka|Hirokazu Tanaka]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Koji Kondo|Koji Kondo]]&lt;br /&gt;
** [[N-SPC Engine/Nintendo/Koji Kondo/Prototype|Prototype]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Taro Bando|Taro Bando]]&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Nintendo/Build Sorting|here]] for all variants by Nintendo.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;br /&gt;
[[Category:N-SPC Variants]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo&amp;diff=2270</id>
		<title>N-SPC Engine/Nintendo</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo&amp;diff=2270"/>
		<updated>2022-11-23T18:01:13Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Adding Yumiko Kanki to the Nintendo section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Go back to [[N-SPC Engine]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Nintendo is the first user of the N-SPC engine, both at launch and with the prototype variant. There are a variety of game-specific or programmer-specific cases in here, and thus have been sorted accordingly for disambiguation reasons.&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Nintendo/Build Sorting|here]] for all variants by Nintendo.&lt;br /&gt;
&lt;br /&gt;
==Unique Cases==&lt;br /&gt;
* [[N-SPC Engine/Nintendo/F-Zero|F-Zero]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Sound Module and Burn-In Test|Sound Module and Burn-In Test]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Mario Paint|Mario Paint]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Super Metroid|Super Metroid]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Tetris and Dr. Mario|Tetris and Dr. Mario]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Nintendo Power Menu Program|Nintendo Power Menu Program]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Super Scope 6 (Blastris)|Super Scope 6 (Blastris)]]&lt;br /&gt;
&lt;br /&gt;
==Multi-Game Cases==&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Akito Nakatsuka|Akito Nakatsuka]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Hirokazu Tanaka|Hirokazu Tanaka]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Koji Kondo|Koji Kondo]]&lt;br /&gt;
** [[N-SPC Engine/Nintendo/Koji Kondo/Prototype|Prototype]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Taro Bando|Taro Bando]]&lt;br /&gt;
* [[N-SPC Engine/Nintendo/Yumiko Kanki|Yumiko Kanki]]&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Nintendo/Build Sorting|here]] for all variants by Nintendo.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;br /&gt;
[[Category:N-SPC Variants]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=2234</id>
		<title>David Whittaker Sound Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=2234"/>
		<updated>2022-08-18T15:01:20Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Discovered Set Tempo sound driver command was not present in V2.3 (referring to Gods) either. Huh.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;David Whittaker Sound Engine&#039;&#039;&#039; is a sound driver for the SPC700 programmed by David Whittaker.&lt;br /&gt;
&lt;br /&gt;
Many games have multiple different builds stored in the game at once, sometimes with code differences. Almost every single game has at least one unique build not shared by any of the other games: the exceptions are...&lt;br /&gt;
* The opening logos for Lemmings 2: The Tribes and Apocalypse II&lt;br /&gt;
* Kick Off 3 Beta&#039;s Title Screen and Lawnmower Man/Virtual Wars&#039; US Beta&lt;br /&gt;
* Lemmings 2: The Tribes&#039; most common build and Riddick Bowe Boxing&#039;s Japanese version&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[David Whittaker Sound Engine/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
These are the games where the sound engine was used:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Version !! VCMD Code Location !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Dream TV || 0.0 (Beta 2)&amp;lt;br&amp;gt;2.1 (all other versions) || &amp;lt;tt&amp;gt;0x098A&amp;lt;/tt&amp;gt; (Beta 2)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x0196A2&amp;lt;/tt&amp;gt; (Beta 2, uncompressed)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x039B16&amp;lt;/tt&amp;gt; (all other versions, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| Krusty&#039;s Super Fun House || 1.0 || &amp;lt;tt&amp;gt;0x04F1&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Kick Off/Super Kick Off || 1.0 || &amp;lt;tt&amp;gt;0x04E6&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x098000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Batman: Revenge of the Joker || 2.0 || &amp;lt;tt&amp;gt;0x0610&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x068000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Super SWIV/Firepower 2000 || 2.2 || &amp;lt;tt&amp;gt;0x06AD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x158000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Gods || 2.3 || &amp;lt;tt&amp;gt;0x0500&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0600&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0612&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x980000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x98AFAC&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x99D448&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x9A8000&amp;lt;/tt&amp;gt; (all versions, three unique build variants, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| World Class Rugby || 2.3 || &amp;lt;tt&amp;gt;0x0608&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0B8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Battle Cars || 3.0 || &amp;lt;tt&amp;gt;0x0717&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0A8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Chavez/Riddick Bowe Boxing || 3.0 (US version)&amp;lt;br&amp;gt;3.1 (all other versions) || &amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt; (Japanese version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067C&amp;lt;/tt&amp;gt; (US version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067D&amp;lt;/tt&amp;gt; (Chavez) || &amp;lt;tt&amp;gt;0x0D8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions except Chavez)&amp;lt;br&amp;gt;(three unique build variants, one per version between Chavez, US &amp;amp; Japanese versions)&lt;br /&gt;
|-&lt;br /&gt;
| Lawnmower Man/Virtual Wars || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; (US beta)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x06A4&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x9C8000&amp;lt;/tt&amp;gt; (all versions except US beta)/&amp;lt;tt&amp;gt;0x9E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Apocalypse II || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0624&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x118000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x168000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Elite Soccer/World Cup Striker || 3.1 || &amp;lt;tt&amp;gt;0x0601&amp;lt;/tt&amp;gt; (US and European version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x060B&amp;lt;/tt&amp;gt; (US and Japanese version Title Screen)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0704&amp;lt;/tt&amp;gt; (Japanese version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x070B&amp;lt;/tt&amp;gt; (European version Title Screen) || &amp;lt;tt&amp;gt;0x1B8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x08D500&amp;lt;/tt&amp;gt; (US &amp;amp; Japanese version)/&amp;lt;tt&amp;gt;0x08D550&amp;lt;/tt&amp;gt; (European beta version)/&amp;lt;tt&amp;gt;0x08D640&amp;lt;/tt&amp;gt; (European version)&amp;lt;br&amp;gt;(Four unique build variants: two Title Screen (US/JP compared to EU) and two In-Game (US/EU compare to JP))&lt;br /&gt;
|-&lt;br /&gt;
| Kick Off 3 (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x0658&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1A8000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x1D8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Lemmings 2: The Tribes || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x060F&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0697&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 16 copies of the code in the ROM, with five different build variants being present: four of them are used in one instance each, that being the opening logo, the Title Screen, the Beach Tribe and the Cavelem Tribe, and the others use a single common copy of the code with modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Porky Pig&#039;s Haunted Holiday (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06CA&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 36 copies of the code in the ROM, none of which are unique except for the sound data and modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Shaq Fu || 4.0a || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD96408&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Michael Jordan: Chaos in the Windy City || 4.0b || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD2B18F&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
Each command is triggered by sending the parameters to $2141-$2143 first, then the command ID to $2140. The latches are cleared afterwards on all registers, which means the same command IDs can be sent again, provided the parameters are resent.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
====V0.0====&lt;br /&gt;
There is no acknowledgement to the SNES beyond the latches being cleared.&amp;lt;br&amp;gt;&lt;br /&gt;
====V1.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140-$2142 are updated every time a command ID is sent, and $2143 is updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz %00000abc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a parameter that was sent to $2141 to execute the command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%a&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 7.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%b&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 8.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%c&amp;lt;/tt&amp;gt; indicates that music is playing.&lt;br /&gt;
&lt;br /&gt;
====V2.0-V4.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141, and the internal command counter is initialized to the same value.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140 is updated every time a command ID is sent, and $2141-$2143 are updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&lt;br /&gt;
=====V2.0-V4.0a=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx %yyyyyyyy zz %aaaaaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyyyyyyy&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing a note for music. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%aaaaaaaa&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing SFX. These bits are cleared only when the SFX has elapsed all of its ticks, not when the sample is done playing if non-looping. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====V4.0b=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V0.0-V1.0)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$06 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$07 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Master Volume || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09-$FF&amp;lt;/tt&amp;gt; || Latch Clear || &amp;lt;tt&amp;gt;$09-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V2.0-V4.0a)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 1) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 2) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Play SFX (Channel 3) || &amp;lt;tt&amp;gt;$06 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Play SFX (Channel 4) || &amp;lt;tt&amp;gt;$07 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Play SFX (Channel 5) || &amp;lt;tt&amp;gt;$08 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;$09 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$0A xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$0B xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$0C ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$0D ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; || Master &amp;amp; Echo Volume || &amp;lt;tt&amp;gt;$0E xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; || Echo Feedback || &amp;lt;tt&amp;gt;$0F xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; || Go to IPL Boot Program || &amp;lt;tt&amp;gt;$10 ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$11 xx ?? ??&amp;lt;/tt&amp;gt; || 2.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 1) || &amp;lt;tt&amp;gt;$12 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 2) || &amp;lt;tt&amp;gt;$13 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 3) || &amp;lt;tt&amp;gt;$14 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 4) || &amp;lt;tt&amp;gt;$15 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 5) || &amp;lt;tt&amp;gt;$16 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 6) || &amp;lt;tt&amp;gt;$17 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 7) || &amp;lt;tt&amp;gt;$18 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 8) || &amp;lt;tt&amp;gt;$19 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 1) || &amp;lt;tt&amp;gt;$1A xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 2) || &amp;lt;tt&amp;gt;$1B xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 3) || &amp;lt;tt&amp;gt;$1C xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 4) || &amp;lt;tt&amp;gt;$1D xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 5) || &amp;lt;tt&amp;gt;$1E xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 6) || &amp;lt;tt&amp;gt;$1F xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 7) || &amp;lt;tt&amp;gt;$20 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 8) || &amp;lt;tt&amp;gt;$21 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$22-$23 xx yy ??&amp;lt;/tt&amp;gt; || 4.0a&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$24-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$24-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V4.0b)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Stop All SFX || &amp;lt;tt&amp;gt;$05 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Master Volume || &amp;lt;tt&amp;gt;$06 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$07 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$09 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Stop Music &amp;amp; Load New Data || &amp;lt;tt&amp;gt;$0A ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$0B ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Panning Separation || &amp;lt;tt&amp;gt;$0C xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$0D-$FF ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Latch Clear/Increment Counter===&lt;br /&gt;
Clears the latches on the CPUIO registers and does nothing else except increment the counter on V2.0 and up, thus making this effectively a NOP. This occurs on almost all invalid command IDs: there is exactly one exception, noted under Invalid.&lt;br /&gt;
&lt;br /&gt;
===Invalid (Command &amp;lt;tt&amp;gt;$22&amp;lt;/tt&amp;gt; - Porky Pig&#039;s Haunted Holiday (beta) only)===&lt;br /&gt;
Crashes the sound driver. The only game that can do this is Porky Pig&#039;s Haunted Holiday (beta), and it is because it jumps directly to a RET opcode on an empty stack, thus causing a stack underflow and a jump to a memory location not used for code.&lt;br /&gt;
&lt;br /&gt;
===NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$01 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the music ID.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid music IDs from being played.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command because it effectively turns it into a NOP:&lt;br /&gt;
* Apocalypse II (Opening logo)/Lemmings 2: The Tribes (Opening logo)&lt;br /&gt;
* Kick Off 3 (Beta) (In-Game)&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Play SFX (Command &amp;lt;tt&amp;gt;$04-$05&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$04-$0B&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yz ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Plays a piece of SFX.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V0.0-V1.0:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channels 1-6: Not supported&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V2.0-V4.0a:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channel 1: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 2: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 3: &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 4: &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 5: &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 6: &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** V4.0b instead dynamically allocates the channel that the SFX is played on across channels 5-8, and has a fixed ID of &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the SFX ID. Setting the highest bit (covering IDs &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;) keys off the SFX instead of playing it.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid SFX IDs from being played, and only accept &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; as an ID to key off SFX on that channel. V4.0b doesn&#039;t support &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; at all.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;z&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** Dream TV (beta and final): &#039;&#039;&#039;2X&#039;&#039;&#039;&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** Batman: Revenge of the Joker, Krusty&#039;s Super Fun House, Michael Jordan Chaos in the Windy City &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu, Super SWIV/Firepower 2000: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* Gods (Ending)&lt;br /&gt;
&lt;br /&gt;
====SFX Data Format====&lt;br /&gt;
Each SFX entry is a pointer to a 14-byte entry containing a series of parameters to utilize on a per-SFX basis. Only one channel&#039;s worth is defined here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc dd ee ff gg hh ii jj kk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to play the SFX for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to slide pitches before resetting and doing the slide again.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a starting value for either the PITCHL DSP register or a noise frequency.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a starting value for the PITCHH DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is the offset to apply to either the PITCHL DSP register or noise frequency per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a offset to apply to the PITCHH DSP register per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a direct write to the SRCN DSP register. &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; and up instead cause this to use noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; modifies the pitch using RNG using a non-zero value (except for V3.0 and up, this value is any non-zero value). How it is modified depends on the version.&lt;br /&gt;
** V0.0-V2.0 overwrites the pitch settings and instead uses two bytes of RNG values for the pitch on a per-step basis.&lt;br /&gt;
** V2.1 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the high byte of the final pitch output on a per-step basis.&lt;br /&gt;
** V2.2 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
** V2.3 does nothing.&lt;br /&gt;
** V3.0 and up apply a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff&amp;lt;/tt&amp;gt; defines the sign for the pitch offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; turns off pitch slides for the SFX.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; apply a positive offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; apply a negative offset.&lt;br /&gt;
* &amp;lt;tt&amp;gt;gg&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to perform the pitch slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;hh&amp;lt;/tt&amp;gt; is a direct write to the ADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt; is a direct write to the ADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;jj&amp;lt;/tt&amp;gt; is generally an endless flag, but its operation differs between versions.&lt;br /&gt;
** For V0.0-V4.0a, when this value is non-zero, it causes the SFX to be played endlessly until keyed off or interrupted. It also causes pitch slides to run forever.&lt;br /&gt;
** For V4.0b, this acts as SFX priority. If all four channels are being used for SFX and the priority of the incoming SFX is greater than the SFX currently played, then the SFX is overwritten. The SFX plays forever if this value is greater than &amp;lt;tt&amp;gt;$7F&amp;lt;/tt&amp;gt;, like what is done in V0.0-V4.0a.&lt;br /&gt;
* &amp;lt;tt&amp;gt;kk&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) per step.&lt;br /&gt;
&lt;br /&gt;
===Stop All SFX (Command &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops all SFX from playing in channels 5-8.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at maximum tempo... which means every ten timer 0 ticks. This is equivalent to a tempo of 256.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at normal tempo.&lt;br /&gt;
&lt;br /&gt;
===Master &amp;amp; Echo Volume (Command &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V1.0), &amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the MVOLL and MVOLR DSP registers.&lt;br /&gt;
** V2.0 and up may also set the EVOLL and EVOLR DSP registers, but only if echo is supported in that build. It is always scaled by the master volume. The scaler multiplier (actually done with shifts) is as following, sorted by build...&lt;br /&gt;
*** Batman: Revenge of the Joker: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** Dream TV: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** Gods (all builds): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** World Class Rugby: &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** Lawnmower Man/Virtual Wars (Driving): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** Lemmings 2: The Tribes (Cavelem Tribe): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Echo Feedback (Command &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0F xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the EFB DSP register.&lt;br /&gt;
&lt;br /&gt;
This is only ever supported if echo is supported in the ROM. That means only these builds support this command:&lt;br /&gt;
* Batman: Revenge of the Joker&lt;br /&gt;
* Dream TV&lt;br /&gt;
* Gods (all builds)&lt;br /&gt;
* World Class Rugby&lt;br /&gt;
* Lawnmower Man/Virtual Wars (Driving)&lt;br /&gt;
* Lemmings 2: The Tribes (Cavelem Tribe)&lt;br /&gt;
&lt;br /&gt;
These other games have a reference for the ID, but effectively make it a NOP:&lt;br /&gt;
* Battle Cars&lt;br /&gt;
* Riddick Bowe Boxing/Chavez (all versions except Japanese)&lt;br /&gt;
* Shaq-Fu&lt;br /&gt;
&lt;br /&gt;
===Go to IPL Boot Program (Command &amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
Jumps directly to the [[SPC700/IPL ROM|IPL Boot Program]].&lt;br /&gt;
&lt;br /&gt;
===Set Tempo (Command &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; (V2.1-V2.2, V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$11 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the tempo to set the song at. This overwrites the song&#039;s tempo settings.&lt;br /&gt;
&lt;br /&gt;
===Set SFX Volume (Command &amp;lt;tt&amp;gt;$12-$19&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii ?? xy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** Michael Jordan Chaos in the Windy City &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Set SFX Pitch (Command &amp;lt;tt&amp;gt;$1A-$21&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; overwrites the PITCHL value used in the SFX data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; overwrites the PITCHH value used in the SFX data.&lt;br /&gt;
&lt;br /&gt;
This command is only supported in the following builds...&lt;br /&gt;
* Battle Cars&lt;br /&gt;
* World Cup Striker (European version) (Title Screen)&lt;br /&gt;
* Elite Soccer/World Cup Striker (European version) (In-Game)&lt;br /&gt;
* Kick Off 3 (beta) (In-Game)&lt;br /&gt;
* Kick Off 3 (beta) (Title Screen)&lt;br /&gt;
* Porky Pig&#039;s Haunted Holiday (beta)&lt;br /&gt;
* Shaq-Fu&lt;br /&gt;
&lt;br /&gt;
Not all IDs are supported in these builds...&lt;br /&gt;
* Lawnmower Man/Virtual Wars (In-Game) &#039;&#039;(does not support $1A-$1D, not even in the code)&#039;&#039;&lt;br /&gt;
* World Cup Striker (Japanese) (In-Game) &#039;&#039;(skips over $1A-$1D via a longer branding distance, though the code still exists)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; (V4.0a), &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Loads new data from the SNES using an IPL Boot ROM variant.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol should be nearly identical to IPL Boot ROM with a few differences or so, since the program seems like it&#039;s using a similar variant)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Stop Music &amp;amp; Load New Data (Command &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops the music, then loads new data from the SNES using an IPL Boot ROM variant.&lt;br /&gt;
&lt;br /&gt;
===Panning Separation (Command &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0C xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; sets the amount that the panning will influence the left and right volumes. The maximum is zero, while the minimum is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;, making it effectively mono.&lt;br /&gt;
&lt;br /&gt;
==Song Entry==&lt;br /&gt;
For each song entry in an array of song definitions, one byte is defined as a starting tempo, followed by a series of pointers defined [[little endian]] style for each channel. For Dream TV Beta and Kick Off, only five pointers are defined. For Krusty&#039;s Super Fun House, only six pointers are defined. For all other games, eight pointers are defined.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (Dream TV Beta and Kick Off)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (Krusty&#039;s Super Fun House)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee ff ff&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting tempo.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. &#039;&#039;(Krusty&#039;s Super Fun House only pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff ff&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Two builds don&#039;t support song entries at all:&lt;br /&gt;
* The opening logos for Lemmings 2: The Tribes and Apocalypse II&lt;br /&gt;
* Kick Off 3 Beta (In-Game)&lt;br /&gt;
&lt;br /&gt;
==Pattern Order List==&lt;br /&gt;
Each channel has a list of [[little endian]] pointers on a per-channel basis. If the pointer is zero, then you jump back to either the beginning of the pattern order list for that channel, or to the loop marker that was set by the $F5 VCMD.&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format at V0.0 is N-SPC/Kankichi-kun compatible minus noise support for SRCN values above 127. Post V1.0, one of the bytes loses its usage.&lt;br /&gt;
&lt;br /&gt;
The instrument format is defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0-V1.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz ?? bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register... but only for V1.0 and older. Otherwise, it&#039;s an unused byte.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt; || Note || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;%011xxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt; || Note Length || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Instant Pitch Change to Note || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0a only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Set Master Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0b only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Volume Scaler by Fraction ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Set ADSR ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Fine Tune ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Pitch Bend ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Pitch Envelope ID ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || L/R Voice Volume ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt; || Tempo ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt; || Jump to Pattern in Order List + Mark Loop Point ||&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt; || Key Off || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt; || One Note Delay || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt; || Instrument ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt; || Absolute Global Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt; || Absolute Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt; || Song End || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Pattern End || || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMDs &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (pre-V4.0), &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; (pre-V3.0), &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; (pre-V2.0), &amp;lt;tt&amp;gt;$F0-$F1&amp;lt;/tt&amp;gt; (pre-V1.0))===&lt;br /&gt;
The sound driver deliberately freezes itself via an infinite branch always loop rather than crashing or skipping the byte. This also takes up VCMD slots that are not filled in earlier versions.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMDs &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
The initial pitch of the note is calculated using a pitch table that contains one octave (and a note)&#039;s worth of pitch values. This value is shifted according to the octave used, and multiplied that by the instrument&#039;s pitch base to get the pitch for the note.&lt;br /&gt;
&lt;br /&gt;
===Note Length (VCMDs &amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%011xxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; represents your note length (as five bits).&lt;br /&gt;
Note lengths are defined as the number of tempo ticks plus one. Notes are keyed off either on another note or on the key off VCMD (&amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Instant Pitch Change to Note (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0a))===&lt;br /&gt;
Requires V4.0a to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the note to change the pitch to.&lt;br /&gt;
&lt;br /&gt;
===Set Master Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Requires V4.0b to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the value to directly write to the MVOL DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Volume Scaler by Fraction (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V3.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the numerator, and is the value to multiply the volume by. The scaling process is skipped if this is zero.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the denominator, and is the value to divide the multiplied volume by.&lt;br /&gt;
Put the two together, and you get the current volume multiplied by &amp;lt;math&amp;gt;\frac{x}{y}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Set ADSR (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V2.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Pitch Bend (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
Pitch bends are performed every 10 timer 0 ticks independently of the tempo. They are automatically terminated after one note.&lt;br /&gt;
&lt;br /&gt;
===Pitch Envelope ID (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an index to an array to a pointer of pitch envelopes. The pitch envelopes always loop and are clocked at a rate of 10 timer 0 ticks independently of the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
====Pitch Envelope Format====&lt;br /&gt;
=====Pitch Offset Tick (CMD &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$81-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed offset in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
=====Restart Pitch Envelope (CMD &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;$80&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jumps back to the beginning of the pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===L/R Voice Volume (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F3 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This is a direct DSP register write to the VxVOL registers, with &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; being the left volume and &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; being the right volume.&lt;br /&gt;
This VCMD&#039;s operation changes depending on the version:&lt;br /&gt;
* V0.0-V2.2: Just a straight write with no modifications made to the input.&lt;br /&gt;
* V2.3: The input values are shifted left once.&lt;br /&gt;
* V3.0-V4.0b: The input values are scaled by VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;, then shifted left once.&lt;br /&gt;
* V4.0a: The input values are scaled by the values used for VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;. The shifting operation is not done here.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as &amp;lt;math&amp;gt;10*\frac{256}{x}&amp;lt;/math&amp;gt; timer 0 ticks. Zero freezes the song except for pitch bends and envelopes, which are not affected by the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
===Jump to Pattern in Order List + Mark Loop Point (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern pointer in the order list. The loop point is marked here.&lt;br /&gt;
&lt;br /&gt;
===Key Off (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===One Note Delay (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Absolute Global Transposition (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for all channels for the music.&lt;br /&gt;
Global transpsition is not applied to channel 4 for V0.0-2.1.&lt;br /&gt;
&lt;br /&gt;
===Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FC xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for the channel.&lt;br /&gt;
&lt;br /&gt;
===Song End (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Terminates the song for all of the channels.&lt;br /&gt;
&lt;br /&gt;
===Pattern End (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Ends the pattern and goes to the pattern order list to fetch another pattern.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=2233</id>
		<title>David Whittaker Sound Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=2233"/>
		<updated>2022-08-13T02:36:41Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: /* L/R Voice Volume (VCMD $F3) */ Correct an accidental self-reference when describing the scaling behavior for later versions.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;David Whittaker Sound Engine&#039;&#039;&#039; is a sound driver for the SPC700 programmed by David Whittaker.&lt;br /&gt;
&lt;br /&gt;
Many games have multiple different builds stored in the game at once, sometimes with code differences. Almost every single game has at least one unique build not shared by any of the other games: the exceptions are...&lt;br /&gt;
* The opening logos for Lemmings 2: The Tribes and Apocalypse II&lt;br /&gt;
* Kick Off 3 Beta&#039;s Title Screen and Lawnmower Man/Virtual Wars&#039; US Beta&lt;br /&gt;
* Lemmings 2: The Tribes&#039; most common build and Riddick Bowe Boxing&#039;s Japanese version&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[David Whittaker Sound Engine/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
These are the games where the sound engine was used:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Version !! VCMD Code Location !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Dream TV || 0.0 (Beta 2)&amp;lt;br&amp;gt;2.1 (all other versions) || &amp;lt;tt&amp;gt;0x098A&amp;lt;/tt&amp;gt; (Beta 2)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x0196A2&amp;lt;/tt&amp;gt; (Beta 2, uncompressed)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x039B16&amp;lt;/tt&amp;gt; (all other versions, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| Krusty&#039;s Super Fun House || 1.0 || &amp;lt;tt&amp;gt;0x04F1&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Kick Off/Super Kick Off || 1.0 || &amp;lt;tt&amp;gt;0x04E6&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x098000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Batman: Revenge of the Joker || 2.0 || &amp;lt;tt&amp;gt;0x0610&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x068000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Super SWIV/Firepower 2000 || 2.2 || &amp;lt;tt&amp;gt;0x06AD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x158000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Gods || 2.3 || &amp;lt;tt&amp;gt;0x0500&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0600&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0612&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x980000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x98AFAC&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x99D448&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x9A8000&amp;lt;/tt&amp;gt; (all versions, three unique build variants, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| World Class Rugby || 2.3 || &amp;lt;tt&amp;gt;0x0608&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0B8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Battle Cars || 3.0 || &amp;lt;tt&amp;gt;0x0717&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0A8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Chavez/Riddick Bowe Boxing || 3.0 (US version)&amp;lt;br&amp;gt;3.1 (all other versions) || &amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt; (Japanese version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067C&amp;lt;/tt&amp;gt; (US version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067D&amp;lt;/tt&amp;gt; (Chavez) || &amp;lt;tt&amp;gt;0x0D8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions except Chavez)&amp;lt;br&amp;gt;(three unique build variants, one per version between Chavez, US &amp;amp; Japanese versions)&lt;br /&gt;
|-&lt;br /&gt;
| Lawnmower Man/Virtual Wars || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; (US beta)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x06A4&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x9C8000&amp;lt;/tt&amp;gt; (all versions except US beta)/&amp;lt;tt&amp;gt;0x9E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Apocalypse II || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0624&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x118000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x168000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Elite Soccer/World Cup Striker || 3.1 || &amp;lt;tt&amp;gt;0x0601&amp;lt;/tt&amp;gt; (US and European version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x060B&amp;lt;/tt&amp;gt; (US and Japanese version Title Screen)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0704&amp;lt;/tt&amp;gt; (Japanese version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x070B&amp;lt;/tt&amp;gt; (European version Title Screen) || &amp;lt;tt&amp;gt;0x1B8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x08D500&amp;lt;/tt&amp;gt; (US &amp;amp; Japanese version)/&amp;lt;tt&amp;gt;0x08D550&amp;lt;/tt&amp;gt; (European beta version)/&amp;lt;tt&amp;gt;0x08D640&amp;lt;/tt&amp;gt; (European version)&amp;lt;br&amp;gt;(Four unique build variants: two Title Screen (US/JP compared to EU) and two In-Game (US/EU compare to JP))&lt;br /&gt;
|-&lt;br /&gt;
| Kick Off 3 (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x0658&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1A8000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x1D8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Lemmings 2: The Tribes || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x060F&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0697&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 16 copies of the code in the ROM, with five different build variants being present: four of them are used in one instance each, that being the opening logo, the Title Screen, the Beach Tribe and the Cavelem Tribe, and the others use a single common copy of the code with modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Porky Pig&#039;s Haunted Holiday (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06CA&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 36 copies of the code in the ROM, none of which are unique except for the sound data and modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Shaq Fu || 4.0a || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD96408&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Michael Jordan: Chaos in the Windy City || 4.0b || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD2B18F&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
Each command is triggered by sending the parameters to $2141-$2143 first, then the command ID to $2140. The latches are cleared afterwards on all registers, which means the same command IDs can be sent again, provided the parameters are resent.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
====V0.0====&lt;br /&gt;
There is no acknowledgement to the SNES beyond the latches being cleared.&amp;lt;br&amp;gt;&lt;br /&gt;
====V1.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140-$2142 are updated every time a command ID is sent, and $2143 is updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz %00000abc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a parameter that was sent to $2141 to execute the command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%a&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 7.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%b&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 8.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%c&amp;lt;/tt&amp;gt; indicates that music is playing.&lt;br /&gt;
&lt;br /&gt;
====V2.0-V4.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141, and the internal command counter is initialized to the same value.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140 is updated every time a command ID is sent, and $2141-$2143 are updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&lt;br /&gt;
=====V2.0-V4.0a=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx %yyyyyyyy zz %aaaaaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyyyyyyy&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing a note for music. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%aaaaaaaa&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing SFX. These bits are cleared only when the SFX has elapsed all of its ticks, not when the sample is done playing if non-looping. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====V4.0b=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V0.0-V1.0)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$06 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$07 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Master Volume || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09-$FF&amp;lt;/tt&amp;gt; || Latch Clear || &amp;lt;tt&amp;gt;$09-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V2.0-V4.0a)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 1) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 2) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Play SFX (Channel 3) || &amp;lt;tt&amp;gt;$06 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Play SFX (Channel 4) || &amp;lt;tt&amp;gt;$07 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Play SFX (Channel 5) || &amp;lt;tt&amp;gt;$08 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;$09 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$0A xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$0B xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$0C ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$0D ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; || Master &amp;amp; Echo Volume || &amp;lt;tt&amp;gt;$0E xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; || Echo Feedback || &amp;lt;tt&amp;gt;$0F xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; || Go to IPL Boot Program || &amp;lt;tt&amp;gt;$10 ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$11 xx ?? ??&amp;lt;/tt&amp;gt; || 2.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 1) || &amp;lt;tt&amp;gt;$12 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 2) || &amp;lt;tt&amp;gt;$13 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 3) || &amp;lt;tt&amp;gt;$14 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 4) || &amp;lt;tt&amp;gt;$15 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 5) || &amp;lt;tt&amp;gt;$16 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 6) || &amp;lt;tt&amp;gt;$17 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 7) || &amp;lt;tt&amp;gt;$18 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 8) || &amp;lt;tt&amp;gt;$19 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 1) || &amp;lt;tt&amp;gt;$1A xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 2) || &amp;lt;tt&amp;gt;$1B xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 3) || &amp;lt;tt&amp;gt;$1C xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 4) || &amp;lt;tt&amp;gt;$1D xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 5) || &amp;lt;tt&amp;gt;$1E xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 6) || &amp;lt;tt&amp;gt;$1F xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 7) || &amp;lt;tt&amp;gt;$20 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 8) || &amp;lt;tt&amp;gt;$21 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$22-$23 xx yy ??&amp;lt;/tt&amp;gt; || 4.0a&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$24-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$24-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V4.0b)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Stop All SFX || &amp;lt;tt&amp;gt;$05 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Master Volume || &amp;lt;tt&amp;gt;$06 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$07 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$09 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Stop Music &amp;amp; Load New Data || &amp;lt;tt&amp;gt;$0A ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$0B ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Panning Separation || &amp;lt;tt&amp;gt;$0C xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$0D-$FF ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Latch Clear/Increment Counter===&lt;br /&gt;
Clears the latches on the CPUIO registers and does nothing else except increment the counter on V2.0 and up, thus making this effectively a NOP. This occurs on almost all invalid command IDs: there is exactly one exception, noted under Invalid.&lt;br /&gt;
&lt;br /&gt;
===Invalid (Command &amp;lt;tt&amp;gt;$22&amp;lt;/tt&amp;gt; - Porky Pig&#039;s Haunted Holiday (beta) only)===&lt;br /&gt;
Crashes the sound driver. The only game that can do this is Porky Pig&#039;s Haunted Holiday (beta), and it is because it jumps directly to a RET opcode on an empty stack, thus causing a stack underflow and a jump to a memory location not used for code.&lt;br /&gt;
&lt;br /&gt;
===NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$01 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the music ID.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid music IDs from being played.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command because it effectively turns it into a NOP:&lt;br /&gt;
* Apocalypse II (Opening logo)/Lemmings 2: The Tribes (Opening logo)&lt;br /&gt;
* Kick Off 3 (Beta) (In-Game)&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Play SFX (Command &amp;lt;tt&amp;gt;$04-$05&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$04-$0B&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yz ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Plays a piece of SFX.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V0.0-V1.0:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channels 1-6: Not supported&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V2.0-V4.0a:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channel 1: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 2: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 3: &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 4: &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 5: &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 6: &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** V4.0b instead dynamically allocates the channel that the SFX is played on across channels 5-8, and has a fixed ID of &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the SFX ID. Setting the highest bit (covering IDs &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;) keys off the SFX instead of playing it.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid SFX IDs from being played, and only accept &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; as an ID to key off SFX on that channel. V4.0b doesn&#039;t support &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; at all.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;z&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** Dream TV (beta and final): &#039;&#039;&#039;2X&#039;&#039;&#039;&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** Batman: Revenge of the Joker, Krusty&#039;s Super Fun House, Michael Jordan Chaos in the Windy City &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu, Super SWIV/Firepower 2000: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* Gods (Ending)&lt;br /&gt;
&lt;br /&gt;
====SFX Data Format====&lt;br /&gt;
Each SFX entry is a pointer to a 14-byte entry containing a series of parameters to utilize on a per-SFX basis. Only one channel&#039;s worth is defined here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc dd ee ff gg hh ii jj kk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to play the SFX for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to slide pitches before resetting and doing the slide again.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a starting value for either the PITCHL DSP register or a noise frequency.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a starting value for the PITCHH DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is the offset to apply to either the PITCHL DSP register or noise frequency per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a offset to apply to the PITCHH DSP register per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a direct write to the SRCN DSP register. &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; and up instead cause this to use noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; modifies the pitch using RNG using a non-zero value (except for V3.0 and up, this value is any non-zero value). How it is modified depends on the version.&lt;br /&gt;
** V0.0-V2.0 overwrites the pitch settings and instead uses two bytes of RNG values for the pitch on a per-step basis.&lt;br /&gt;
** V2.1 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the high byte of the final pitch output on a per-step basis.&lt;br /&gt;
** V2.2 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
** V2.3 does nothing.&lt;br /&gt;
** V3.0 and up apply a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff&amp;lt;/tt&amp;gt; defines the sign for the pitch offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; turns off pitch slides for the SFX.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; apply a positive offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; apply a negative offset.&lt;br /&gt;
* &amp;lt;tt&amp;gt;gg&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to perform the pitch slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;hh&amp;lt;/tt&amp;gt; is a direct write to the ADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt; is a direct write to the ADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;jj&amp;lt;/tt&amp;gt; is generally an endless flag, but its operation differs between versions.&lt;br /&gt;
** For V0.0-V4.0a, when this value is non-zero, it causes the SFX to be played endlessly until keyed off or interrupted. It also causes pitch slides to run forever.&lt;br /&gt;
** For V4.0b, this acts as SFX priority. If all four channels are being used for SFX and the priority of the incoming SFX is greater than the SFX currently played, then the SFX is overwritten. The SFX plays forever if this value is greater than &amp;lt;tt&amp;gt;$7F&amp;lt;/tt&amp;gt;, like what is done in V0.0-V4.0a.&lt;br /&gt;
* &amp;lt;tt&amp;gt;kk&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) per step.&lt;br /&gt;
&lt;br /&gt;
===Stop All SFX (Command &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops all SFX from playing in channels 5-8.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at maximum tempo... which means every ten timer 0 ticks. This is equivalent to a tempo of 256.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at normal tempo.&lt;br /&gt;
&lt;br /&gt;
===Master &amp;amp; Echo Volume (Command &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V1.0), &amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the MVOLL and MVOLR DSP registers.&lt;br /&gt;
** V2.0 and up may also set the EVOLL and EVOLR DSP registers, but only if echo is supported in that build. It is always scaled by the master volume. The scaler multiplier (actually done with shifts) is as following, sorted by build...&lt;br /&gt;
*** Batman: Revenge of the Joker: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** Dream TV: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** Gods (all builds): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** World Class Rugby: &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** Lawnmower Man/Virtual Wars (Driving): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** Lemmings 2: The Tribes (Cavelem Tribe): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Echo Feedback (Command &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0F xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the EFB DSP register.&lt;br /&gt;
&lt;br /&gt;
This is only ever supported if echo is supported in the ROM. That means only these builds support this command:&lt;br /&gt;
* Batman: Revenge of the Joker&lt;br /&gt;
* Dream TV&lt;br /&gt;
* Gods (all builds)&lt;br /&gt;
* World Class Rugby&lt;br /&gt;
* Lawnmower Man/Virtual Wars (Driving)&lt;br /&gt;
* Lemmings 2: The Tribes (Cavelem Tribe)&lt;br /&gt;
&lt;br /&gt;
These other games have a reference for the ID, but effectively make it a NOP:&lt;br /&gt;
* Battle Cars&lt;br /&gt;
* Riddick Bowe Boxing/Chavez (all versions except Japanese)&lt;br /&gt;
* Shaq-Fu&lt;br /&gt;
&lt;br /&gt;
===Go to IPL Boot Program (Command &amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
Jumps directly to the [[SPC700/IPL ROM|IPL Boot Program]].&lt;br /&gt;
&lt;br /&gt;
===Set Tempo (Command &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; (V2.1-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$11 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the tempo to set the song at. This overwrites the song&#039;s tempo settings.&lt;br /&gt;
&lt;br /&gt;
===Set SFX Volume (Command &amp;lt;tt&amp;gt;$12-$19&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii ?? xy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** Michael Jordan Chaos in the Windy City &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Set SFX Pitch (Command &amp;lt;tt&amp;gt;$1A-$21&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; overwrites the PITCHL value used in the SFX data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; overwrites the PITCHH value used in the SFX data.&lt;br /&gt;
&lt;br /&gt;
This command is only supported in the following builds...&lt;br /&gt;
* Battle Cars&lt;br /&gt;
* World Cup Striker (European version) (Title Screen)&lt;br /&gt;
* Elite Soccer/World Cup Striker (European version) (In-Game)&lt;br /&gt;
* Kick Off 3 (beta) (In-Game)&lt;br /&gt;
* Kick Off 3 (beta) (Title Screen)&lt;br /&gt;
* Porky Pig&#039;s Haunted Holiday (beta)&lt;br /&gt;
* Shaq-Fu&lt;br /&gt;
&lt;br /&gt;
Not all IDs are supported in these builds...&lt;br /&gt;
* Lawnmower Man/Virtual Wars (In-Game) &#039;&#039;(does not support $1A-$1D, not even in the code)&#039;&#039;&lt;br /&gt;
* World Cup Striker (Japanese) (In-Game) &#039;&#039;(skips over $1A-$1D via a longer branding distance, though the code still exists)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; (V4.0a), &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Loads new data from the SNES using an IPL Boot ROM variant.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol should be nearly identical to IPL Boot ROM with a few differences or so, since the program seems like it&#039;s using a similar variant)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Stop Music &amp;amp; Load New Data (Command &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops the music, then loads new data from the SNES using an IPL Boot ROM variant.&lt;br /&gt;
&lt;br /&gt;
===Panning Separation (Command &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0C xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; sets the amount that the panning will influence the left and right volumes. The maximum is zero, while the minimum is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;, making it effectively mono.&lt;br /&gt;
&lt;br /&gt;
==Song Entry==&lt;br /&gt;
For each song entry in an array of song definitions, one byte is defined as a starting tempo, followed by a series of pointers defined [[little endian]] style for each channel. For Dream TV Beta and Kick Off, only five pointers are defined. For Krusty&#039;s Super Fun House, only six pointers are defined. For all other games, eight pointers are defined.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (Dream TV Beta and Kick Off)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (Krusty&#039;s Super Fun House)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee ff ff&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting tempo.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. &#039;&#039;(Krusty&#039;s Super Fun House only pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff ff&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Two builds don&#039;t support song entries at all:&lt;br /&gt;
* The opening logos for Lemmings 2: The Tribes and Apocalypse II&lt;br /&gt;
* Kick Off 3 Beta (In-Game)&lt;br /&gt;
&lt;br /&gt;
==Pattern Order List==&lt;br /&gt;
Each channel has a list of [[little endian]] pointers on a per-channel basis. If the pointer is zero, then you jump back to either the beginning of the pattern order list for that channel, or to the loop marker that was set by the $F5 VCMD.&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format at V0.0 is N-SPC/Kankichi-kun compatible minus noise support for SRCN values above 127. Post V1.0, one of the bytes loses its usage.&lt;br /&gt;
&lt;br /&gt;
The instrument format is defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0-V1.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz ?? bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register... but only for V1.0 and older. Otherwise, it&#039;s an unused byte.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt; || Note || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;%011xxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt; || Note Length || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Instant Pitch Change to Note || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0a only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Set Master Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0b only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Volume Scaler by Fraction ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Set ADSR ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Fine Tune ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Pitch Bend ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Pitch Envelope ID ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || L/R Voice Volume ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt; || Tempo ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt; || Jump to Pattern in Order List + Mark Loop Point ||&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt; || Key Off || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt; || One Note Delay || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt; || Instrument ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt; || Absolute Global Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt; || Absolute Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt; || Song End || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Pattern End || || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMDs &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (pre-V4.0), &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; (pre-V3.0), &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; (pre-V2.0), &amp;lt;tt&amp;gt;$F0-$F1&amp;lt;/tt&amp;gt; (pre-V1.0))===&lt;br /&gt;
The sound driver deliberately freezes itself via an infinite branch always loop rather than crashing or skipping the byte. This also takes up VCMD slots that are not filled in earlier versions.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMDs &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
The initial pitch of the note is calculated using a pitch table that contains one octave (and a note)&#039;s worth of pitch values. This value is shifted according to the octave used, and multiplied that by the instrument&#039;s pitch base to get the pitch for the note.&lt;br /&gt;
&lt;br /&gt;
===Note Length (VCMDs &amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%011xxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; represents your note length (as five bits).&lt;br /&gt;
Note lengths are defined as the number of tempo ticks plus one. Notes are keyed off either on another note or on the key off VCMD (&amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Instant Pitch Change to Note (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0a))===&lt;br /&gt;
Requires V4.0a to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the note to change the pitch to.&lt;br /&gt;
&lt;br /&gt;
===Set Master Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Requires V4.0b to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the value to directly write to the MVOL DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Volume Scaler by Fraction (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V3.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the numerator, and is the value to multiply the volume by. The scaling process is skipped if this is zero.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the denominator, and is the value to divide the multiplied volume by.&lt;br /&gt;
Put the two together, and you get the current volume multiplied by &amp;lt;math&amp;gt;\frac{x}{y}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Set ADSR (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V2.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Pitch Bend (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
Pitch bends are performed every 10 timer 0 ticks independently of the tempo. They are automatically terminated after one note.&lt;br /&gt;
&lt;br /&gt;
===Pitch Envelope ID (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an index to an array to a pointer of pitch envelopes. The pitch envelopes always loop and are clocked at a rate of 10 timer 0 ticks independently of the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
====Pitch Envelope Format====&lt;br /&gt;
=====Pitch Offset Tick (CMD &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$81-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed offset in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
=====Restart Pitch Envelope (CMD &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;$80&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jumps back to the beginning of the pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===L/R Voice Volume (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F3 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This is a direct DSP register write to the VxVOL registers, with &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; being the left volume and &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; being the right volume.&lt;br /&gt;
This VCMD&#039;s operation changes depending on the version:&lt;br /&gt;
* V0.0-V2.2: Just a straight write with no modifications made to the input.&lt;br /&gt;
* V2.3: The input values are shifted left once.&lt;br /&gt;
* V3.0-V4.0b: The input values are scaled by VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;, then shifted left once.&lt;br /&gt;
* V4.0a: The input values are scaled by the values used for VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;. The shifting operation is not done here.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as &amp;lt;math&amp;gt;10*\frac{256}{x}&amp;lt;/math&amp;gt; timer 0 ticks. Zero freezes the song except for pitch bends and envelopes, which are not affected by the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
===Jump to Pattern in Order List + Mark Loop Point (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern pointer in the order list. The loop point is marked here.&lt;br /&gt;
&lt;br /&gt;
===Key Off (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===One Note Delay (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Absolute Global Transposition (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for all channels for the music.&lt;br /&gt;
Global transpsition is not applied to channel 4 for V0.0-2.1.&lt;br /&gt;
&lt;br /&gt;
===Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FC xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for the channel.&lt;br /&gt;
&lt;br /&gt;
===Song End (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Terminates the song for all of the channels.&lt;br /&gt;
&lt;br /&gt;
===Pattern End (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Ends the pattern and goes to the pattern order list to fetch another pattern.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=2232</id>
		<title>David Whittaker Sound Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=2232"/>
		<updated>2022-08-12T22:56:06Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Discovered Set Tempo sound driver command was not present in V2.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;David Whittaker Sound Engine&#039;&#039;&#039; is a sound driver for the SPC700 programmed by David Whittaker.&lt;br /&gt;
&lt;br /&gt;
Many games have multiple different builds stored in the game at once, sometimes with code differences. Almost every single game has at least one unique build not shared by any of the other games: the exceptions are...&lt;br /&gt;
* The opening logos for Lemmings 2: The Tribes and Apocalypse II&lt;br /&gt;
* Kick Off 3 Beta&#039;s Title Screen and Lawnmower Man/Virtual Wars&#039; US Beta&lt;br /&gt;
* Lemmings 2: The Tribes&#039; most common build and Riddick Bowe Boxing&#039;s Japanese version&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[David Whittaker Sound Engine/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
These are the games where the sound engine was used:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Version !! VCMD Code Location !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Dream TV || 0.0 (Beta 2)&amp;lt;br&amp;gt;2.1 (all other versions) || &amp;lt;tt&amp;gt;0x098A&amp;lt;/tt&amp;gt; (Beta 2)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x0196A2&amp;lt;/tt&amp;gt; (Beta 2, uncompressed)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x039B16&amp;lt;/tt&amp;gt; (all other versions, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| Krusty&#039;s Super Fun House || 1.0 || &amp;lt;tt&amp;gt;0x04F1&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Kick Off/Super Kick Off || 1.0 || &amp;lt;tt&amp;gt;0x04E6&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x098000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Batman: Revenge of the Joker || 2.0 || &amp;lt;tt&amp;gt;0x0610&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x068000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Super SWIV/Firepower 2000 || 2.2 || &amp;lt;tt&amp;gt;0x06AD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x158000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Gods || 2.3 || &amp;lt;tt&amp;gt;0x0500&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0600&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0612&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x980000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x98AFAC&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x99D448&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x9A8000&amp;lt;/tt&amp;gt; (all versions, three unique build variants, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| World Class Rugby || 2.3 || &amp;lt;tt&amp;gt;0x0608&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0B8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Battle Cars || 3.0 || &amp;lt;tt&amp;gt;0x0717&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0A8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Chavez/Riddick Bowe Boxing || 3.0 (US version)&amp;lt;br&amp;gt;3.1 (all other versions) || &amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt; (Japanese version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067C&amp;lt;/tt&amp;gt; (US version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067D&amp;lt;/tt&amp;gt; (Chavez) || &amp;lt;tt&amp;gt;0x0D8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions except Chavez)&amp;lt;br&amp;gt;(three unique build variants, one per version between Chavez, US &amp;amp; Japanese versions)&lt;br /&gt;
|-&lt;br /&gt;
| Lawnmower Man/Virtual Wars || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; (US beta)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x06A4&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x9C8000&amp;lt;/tt&amp;gt; (all versions except US beta)/&amp;lt;tt&amp;gt;0x9E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Apocalypse II || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0624&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x118000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x168000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Elite Soccer/World Cup Striker || 3.1 || &amp;lt;tt&amp;gt;0x0601&amp;lt;/tt&amp;gt; (US and European version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x060B&amp;lt;/tt&amp;gt; (US and Japanese version Title Screen)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0704&amp;lt;/tt&amp;gt; (Japanese version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x070B&amp;lt;/tt&amp;gt; (European version Title Screen) || &amp;lt;tt&amp;gt;0x1B8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x08D500&amp;lt;/tt&amp;gt; (US &amp;amp; Japanese version)/&amp;lt;tt&amp;gt;0x08D550&amp;lt;/tt&amp;gt; (European beta version)/&amp;lt;tt&amp;gt;0x08D640&amp;lt;/tt&amp;gt; (European version)&amp;lt;br&amp;gt;(Four unique build variants: two Title Screen (US/JP compared to EU) and two In-Game (US/EU compare to JP))&lt;br /&gt;
|-&lt;br /&gt;
| Kick Off 3 (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x0658&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1A8000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x1D8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Lemmings 2: The Tribes || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x060F&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0697&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 16 copies of the code in the ROM, with five different build variants being present: four of them are used in one instance each, that being the opening logo, the Title Screen, the Beach Tribe and the Cavelem Tribe, and the others use a single common copy of the code with modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Porky Pig&#039;s Haunted Holiday (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06CA&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 36 copies of the code in the ROM, none of which are unique except for the sound data and modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Shaq Fu || 4.0a || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD96408&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Michael Jordan: Chaos in the Windy City || 4.0b || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD2B18F&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
Each command is triggered by sending the parameters to $2141-$2143 first, then the command ID to $2140. The latches are cleared afterwards on all registers, which means the same command IDs can be sent again, provided the parameters are resent.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
====V0.0====&lt;br /&gt;
There is no acknowledgement to the SNES beyond the latches being cleared.&amp;lt;br&amp;gt;&lt;br /&gt;
====V1.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140-$2142 are updated every time a command ID is sent, and $2143 is updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz %00000abc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a parameter that was sent to $2141 to execute the command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%a&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 7.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%b&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 8.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%c&amp;lt;/tt&amp;gt; indicates that music is playing.&lt;br /&gt;
&lt;br /&gt;
====V2.0-V4.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141, and the internal command counter is initialized to the same value.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140 is updated every time a command ID is sent, and $2141-$2143 are updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&lt;br /&gt;
=====V2.0-V4.0a=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx %yyyyyyyy zz %aaaaaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyyyyyyy&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing a note for music. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%aaaaaaaa&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing SFX. These bits are cleared only when the SFX has elapsed all of its ticks, not when the sample is done playing if non-looping. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====V4.0b=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V0.0-V1.0)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$06 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$07 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Master Volume || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09-$FF&amp;lt;/tt&amp;gt; || Latch Clear || &amp;lt;tt&amp;gt;$09-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V2.0-V4.0a)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 1) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 2) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Play SFX (Channel 3) || &amp;lt;tt&amp;gt;$06 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Play SFX (Channel 4) || &amp;lt;tt&amp;gt;$07 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Play SFX (Channel 5) || &amp;lt;tt&amp;gt;$08 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;$09 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$0A xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$0B xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$0C ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$0D ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; || Master &amp;amp; Echo Volume || &amp;lt;tt&amp;gt;$0E xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; || Echo Feedback || &amp;lt;tt&amp;gt;$0F xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; || Go to IPL Boot Program || &amp;lt;tt&amp;gt;$10 ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$11 xx ?? ??&amp;lt;/tt&amp;gt; || 2.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 1) || &amp;lt;tt&amp;gt;$12 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 2) || &amp;lt;tt&amp;gt;$13 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 3) || &amp;lt;tt&amp;gt;$14 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 4) || &amp;lt;tt&amp;gt;$15 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 5) || &amp;lt;tt&amp;gt;$16 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 6) || &amp;lt;tt&amp;gt;$17 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 7) || &amp;lt;tt&amp;gt;$18 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 8) || &amp;lt;tt&amp;gt;$19 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 1) || &amp;lt;tt&amp;gt;$1A xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 2) || &amp;lt;tt&amp;gt;$1B xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 3) || &amp;lt;tt&amp;gt;$1C xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 4) || &amp;lt;tt&amp;gt;$1D xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 5) || &amp;lt;tt&amp;gt;$1E xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 6) || &amp;lt;tt&amp;gt;$1F xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 7) || &amp;lt;tt&amp;gt;$20 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 8) || &amp;lt;tt&amp;gt;$21 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$22-$23 xx yy ??&amp;lt;/tt&amp;gt; || 4.0a&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$24-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$24-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V4.0b)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Stop All SFX || &amp;lt;tt&amp;gt;$05 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Master Volume || &amp;lt;tt&amp;gt;$06 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$07 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$09 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Stop Music &amp;amp; Load New Data || &amp;lt;tt&amp;gt;$0A ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$0B ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Panning Separation || &amp;lt;tt&amp;gt;$0C xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$0D-$FF ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Latch Clear/Increment Counter===&lt;br /&gt;
Clears the latches on the CPUIO registers and does nothing else except increment the counter on V2.0 and up, thus making this effectively a NOP. This occurs on almost all invalid command IDs: there is exactly one exception, noted under Invalid.&lt;br /&gt;
&lt;br /&gt;
===Invalid (Command &amp;lt;tt&amp;gt;$22&amp;lt;/tt&amp;gt; - Porky Pig&#039;s Haunted Holiday (beta) only)===&lt;br /&gt;
Crashes the sound driver. The only game that can do this is Porky Pig&#039;s Haunted Holiday (beta), and it is because it jumps directly to a RET opcode on an empty stack, thus causing a stack underflow and a jump to a memory location not used for code.&lt;br /&gt;
&lt;br /&gt;
===NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$01 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the music ID.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid music IDs from being played.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command because it effectively turns it into a NOP:&lt;br /&gt;
* Apocalypse II (Opening logo)/Lemmings 2: The Tribes (Opening logo)&lt;br /&gt;
* Kick Off 3 (Beta) (In-Game)&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Play SFX (Command &amp;lt;tt&amp;gt;$04-$05&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$04-$0B&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yz ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Plays a piece of SFX.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V0.0-V1.0:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channels 1-6: Not supported&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V2.0-V4.0a:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channel 1: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 2: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 3: &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 4: &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 5: &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 6: &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** V4.0b instead dynamically allocates the channel that the SFX is played on across channels 5-8, and has a fixed ID of &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the SFX ID. Setting the highest bit (covering IDs &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;) keys off the SFX instead of playing it.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid SFX IDs from being played, and only accept &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; as an ID to key off SFX on that channel. V4.0b doesn&#039;t support &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; at all.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;z&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** Dream TV (beta and final): &#039;&#039;&#039;2X&#039;&#039;&#039;&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** Batman: Revenge of the Joker, Krusty&#039;s Super Fun House, Michael Jordan Chaos in the Windy City &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu, Super SWIV/Firepower 2000: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* Gods (Ending)&lt;br /&gt;
&lt;br /&gt;
====SFX Data Format====&lt;br /&gt;
Each SFX entry is a pointer to a 14-byte entry containing a series of parameters to utilize on a per-SFX basis. Only one channel&#039;s worth is defined here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc dd ee ff gg hh ii jj kk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to play the SFX for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to slide pitches before resetting and doing the slide again.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a starting value for either the PITCHL DSP register or a noise frequency.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a starting value for the PITCHH DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is the offset to apply to either the PITCHL DSP register or noise frequency per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a offset to apply to the PITCHH DSP register per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a direct write to the SRCN DSP register. &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; and up instead cause this to use noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; modifies the pitch using RNG using a non-zero value (except for V3.0 and up, this value is any non-zero value). How it is modified depends on the version.&lt;br /&gt;
** V0.0-V2.0 overwrites the pitch settings and instead uses two bytes of RNG values for the pitch on a per-step basis.&lt;br /&gt;
** V2.1 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the high byte of the final pitch output on a per-step basis.&lt;br /&gt;
** V2.2 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
** V2.3 does nothing.&lt;br /&gt;
** V3.0 and up apply a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff&amp;lt;/tt&amp;gt; defines the sign for the pitch offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; turns off pitch slides for the SFX.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; apply a positive offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; apply a negative offset.&lt;br /&gt;
* &amp;lt;tt&amp;gt;gg&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to perform the pitch slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;hh&amp;lt;/tt&amp;gt; is a direct write to the ADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt; is a direct write to the ADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;jj&amp;lt;/tt&amp;gt; is generally an endless flag, but its operation differs between versions.&lt;br /&gt;
** For V0.0-V4.0a, when this value is non-zero, it causes the SFX to be played endlessly until keyed off or interrupted. It also causes pitch slides to run forever.&lt;br /&gt;
** For V4.0b, this acts as SFX priority. If all four channels are being used for SFX and the priority of the incoming SFX is greater than the SFX currently played, then the SFX is overwritten. The SFX plays forever if this value is greater than &amp;lt;tt&amp;gt;$7F&amp;lt;/tt&amp;gt;, like what is done in V0.0-V4.0a.&lt;br /&gt;
* &amp;lt;tt&amp;gt;kk&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) per step.&lt;br /&gt;
&lt;br /&gt;
===Stop All SFX (Command &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops all SFX from playing in channels 5-8.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at maximum tempo... which means every ten timer 0 ticks. This is equivalent to a tempo of 256.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at normal tempo.&lt;br /&gt;
&lt;br /&gt;
===Master &amp;amp; Echo Volume (Command &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V1.0), &amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the MVOLL and MVOLR DSP registers.&lt;br /&gt;
** V2.0 and up may also set the EVOLL and EVOLR DSP registers, but only if echo is supported in that build. It is always scaled by the master volume. The scaler multiplier (actually done with shifts) is as following, sorted by build...&lt;br /&gt;
*** Batman: Revenge of the Joker: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** Dream TV: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** Gods (all builds): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** World Class Rugby: &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** Lawnmower Man/Virtual Wars (Driving): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** Lemmings 2: The Tribes (Cavelem Tribe): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Echo Feedback (Command &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0F xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the EFB DSP register.&lt;br /&gt;
&lt;br /&gt;
This is only ever supported if echo is supported in the ROM. That means only these builds support this command:&lt;br /&gt;
* Batman: Revenge of the Joker&lt;br /&gt;
* Dream TV&lt;br /&gt;
* Gods (all builds)&lt;br /&gt;
* World Class Rugby&lt;br /&gt;
* Lawnmower Man/Virtual Wars (Driving)&lt;br /&gt;
* Lemmings 2: The Tribes (Cavelem Tribe)&lt;br /&gt;
&lt;br /&gt;
These other games have a reference for the ID, but effectively make it a NOP:&lt;br /&gt;
* Battle Cars&lt;br /&gt;
* Riddick Bowe Boxing/Chavez (all versions except Japanese)&lt;br /&gt;
* Shaq-Fu&lt;br /&gt;
&lt;br /&gt;
===Go to IPL Boot Program (Command &amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
Jumps directly to the [[SPC700/IPL ROM|IPL Boot Program]].&lt;br /&gt;
&lt;br /&gt;
===Set Tempo (Command &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; (V2.1-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$11 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the tempo to set the song at. This overwrites the song&#039;s tempo settings.&lt;br /&gt;
&lt;br /&gt;
===Set SFX Volume (Command &amp;lt;tt&amp;gt;$12-$19&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii ?? xy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** Michael Jordan Chaos in the Windy City &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Set SFX Pitch (Command &amp;lt;tt&amp;gt;$1A-$21&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; overwrites the PITCHL value used in the SFX data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; overwrites the PITCHH value used in the SFX data.&lt;br /&gt;
&lt;br /&gt;
This command is only supported in the following builds...&lt;br /&gt;
* Battle Cars&lt;br /&gt;
* World Cup Striker (European version) (Title Screen)&lt;br /&gt;
* Elite Soccer/World Cup Striker (European version) (In-Game)&lt;br /&gt;
* Kick Off 3 (beta) (In-Game)&lt;br /&gt;
* Kick Off 3 (beta) (Title Screen)&lt;br /&gt;
* Porky Pig&#039;s Haunted Holiday (beta)&lt;br /&gt;
* Shaq-Fu&lt;br /&gt;
&lt;br /&gt;
Not all IDs are supported in these builds...&lt;br /&gt;
* Lawnmower Man/Virtual Wars (In-Game) &#039;&#039;(does not support $1A-$1D, not even in the code)&#039;&#039;&lt;br /&gt;
* World Cup Striker (Japanese) (In-Game) &#039;&#039;(skips over $1A-$1D via a longer branding distance, though the code still exists)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; (V4.0a), &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Loads new data from the SNES using an IPL Boot ROM variant.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol should be nearly identical to IPL Boot ROM with a few differences or so, since the program seems like it&#039;s using a similar variant)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Stop Music &amp;amp; Load New Data (Command &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops the music, then loads new data from the SNES using an IPL Boot ROM variant.&lt;br /&gt;
&lt;br /&gt;
===Panning Separation (Command &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0C xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; sets the amount that the panning will influence the left and right volumes. The maximum is zero, while the minimum is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;, making it effectively mono.&lt;br /&gt;
&lt;br /&gt;
==Song Entry==&lt;br /&gt;
For each song entry in an array of song definitions, one byte is defined as a starting tempo, followed by a series of pointers defined [[little endian]] style for each channel. For Dream TV Beta and Kick Off, only five pointers are defined. For Krusty&#039;s Super Fun House, only six pointers are defined. For all other games, eight pointers are defined.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (Dream TV Beta and Kick Off)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (Krusty&#039;s Super Fun House)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee ff ff&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting tempo.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. &#039;&#039;(Krusty&#039;s Super Fun House only pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff ff&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Two builds don&#039;t support song entries at all:&lt;br /&gt;
* The opening logos for Lemmings 2: The Tribes and Apocalypse II&lt;br /&gt;
* Kick Off 3 Beta (In-Game)&lt;br /&gt;
&lt;br /&gt;
==Pattern Order List==&lt;br /&gt;
Each channel has a list of [[little endian]] pointers on a per-channel basis. If the pointer is zero, then you jump back to either the beginning of the pattern order list for that channel, or to the loop marker that was set by the $F5 VCMD.&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format at V0.0 is N-SPC/Kankichi-kun compatible minus noise support for SRCN values above 127. Post V1.0, one of the bytes loses its usage.&lt;br /&gt;
&lt;br /&gt;
The instrument format is defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0-V1.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz ?? bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register... but only for V1.0 and older. Otherwise, it&#039;s an unused byte.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt; || Note || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;%011xxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt; || Note Length || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Instant Pitch Change to Note || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0a only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Set Master Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0b only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Volume Scaler by Fraction ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Set ADSR ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Fine Tune ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Pitch Bend ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Pitch Envelope ID ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || L/R Voice Volume ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt; || Tempo ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt; || Jump to Pattern in Order List + Mark Loop Point ||&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt; || Key Off || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt; || One Note Delay || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt; || Instrument ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt; || Absolute Global Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt; || Absolute Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt; || Song End || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Pattern End || || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMDs &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (pre-V4.0), &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; (pre-V3.0), &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; (pre-V2.0), &amp;lt;tt&amp;gt;$F0-$F1&amp;lt;/tt&amp;gt; (pre-V1.0))===&lt;br /&gt;
The sound driver deliberately freezes itself via an infinite branch always loop rather than crashing or skipping the byte. This also takes up VCMD slots that are not filled in earlier versions.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMDs &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
The initial pitch of the note is calculated using a pitch table that contains one octave (and a note)&#039;s worth of pitch values. This value is shifted according to the octave used, and multiplied that by the instrument&#039;s pitch base to get the pitch for the note.&lt;br /&gt;
&lt;br /&gt;
===Note Length (VCMDs &amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%011xxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; represents your note length (as five bits).&lt;br /&gt;
Note lengths are defined as the number of tempo ticks plus one. Notes are keyed off either on another note or on the key off VCMD (&amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Instant Pitch Change to Note (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0a))===&lt;br /&gt;
Requires V4.0a to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the note to change the pitch to.&lt;br /&gt;
&lt;br /&gt;
===Set Master Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Requires V4.0b to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the value to directly write to the MVOL DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Volume Scaler by Fraction (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V3.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the numerator, and is the value to multiply the volume by. The scaling process is skipped if this is zero.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the denominator, and is the value to divide the multiplied volume by.&lt;br /&gt;
Put the two together, and you get the current volume multiplied by &amp;lt;math&amp;gt;\frac{x}{y}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Set ADSR (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V2.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Pitch Bend (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
Pitch bends are performed every 10 timer 0 ticks independently of the tempo. They are automatically terminated after one note.&lt;br /&gt;
&lt;br /&gt;
===Pitch Envelope ID (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an index to an array to a pointer of pitch envelopes. The pitch envelopes always loop and are clocked at a rate of 10 timer 0 ticks independently of the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
====Pitch Envelope Format====&lt;br /&gt;
=====Pitch Offset Tick (CMD &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$81-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed offset in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
=====Restart Pitch Envelope (CMD &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;$80&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jumps back to the beginning of the pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===L/R Voice Volume (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F3 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This is a direct DSP register write to the VxVOL registers, with &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; being the left volume and &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; being the right volume.&lt;br /&gt;
This VCMD&#039;s operation changes depending on the version:&lt;br /&gt;
* V0.0-V2.2: Just a straight write with no modifications made to the input.&lt;br /&gt;
* V2.3: The input values are shifted left once.&lt;br /&gt;
* V3.0-V4.0b: The input values are scaled by VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;, then shifted left once.&lt;br /&gt;
* V4.0a: The input values are scaled by the values used for VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;. The shifting operation is not done here.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as &amp;lt;math&amp;gt;10*\frac{256}{x}&amp;lt;/math&amp;gt; timer 0 ticks. Zero freezes the song except for pitch bends and envelopes, which are not affected by the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
===Jump to Pattern in Order List + Mark Loop Point (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern pointer in the order list. The loop point is marked here.&lt;br /&gt;
&lt;br /&gt;
===Key Off (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===One Note Delay (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Absolute Global Transposition (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for all channels for the music.&lt;br /&gt;
Global transpsition is not applied to channel 4 for V0.0-2.1.&lt;br /&gt;
&lt;br /&gt;
===Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FC xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for the channel.&lt;br /&gt;
&lt;br /&gt;
===Song End (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Terminates the song for all of the channels.&lt;br /&gt;
&lt;br /&gt;
===Pattern End (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Ends the pattern and goes to the pattern order list to fetch another pattern.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=2231</id>
		<title>David Whittaker Sound Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=2231"/>
		<updated>2022-08-12T19:27:19Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: /* V2.0-V4.0a */ Accidentally got these two backwards.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;David Whittaker Sound Engine&#039;&#039;&#039; is a sound driver for the SPC700 programmed by David Whittaker.&lt;br /&gt;
&lt;br /&gt;
Many games have multiple different builds stored in the game at once, sometimes with code differences. Almost every single game has at least one unique build not shared by any of the other games: the exceptions are...&lt;br /&gt;
* The opening logos for Lemmings 2: The Tribes and Apocalypse II&lt;br /&gt;
* Kick Off 3 Beta&#039;s Title Screen and Lawnmower Man/Virtual Wars&#039; US Beta&lt;br /&gt;
* Lemmings 2: The Tribes&#039; most common build and Riddick Bowe Boxing&#039;s Japanese version&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[David Whittaker Sound Engine/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
These are the games where the sound engine was used:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Version !! VCMD Code Location !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Dream TV || 0.0 (Beta 2)&amp;lt;br&amp;gt;2.1 (all other versions) || &amp;lt;tt&amp;gt;0x098A&amp;lt;/tt&amp;gt; (Beta 2)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x0196A2&amp;lt;/tt&amp;gt; (Beta 2, uncompressed)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x039B16&amp;lt;/tt&amp;gt; (all other versions, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| Krusty&#039;s Super Fun House || 1.0 || &amp;lt;tt&amp;gt;0x04F1&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Kick Off/Super Kick Off || 1.0 || &amp;lt;tt&amp;gt;0x04E6&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x098000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Batman: Revenge of the Joker || 2.0 || &amp;lt;tt&amp;gt;0x0610&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x068000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Super SWIV/Firepower 2000 || 2.2 || &amp;lt;tt&amp;gt;0x06AD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x158000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Gods || 2.3 || &amp;lt;tt&amp;gt;0x0500&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0600&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0612&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x980000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x98AFAC&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x99D448&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x9A8000&amp;lt;/tt&amp;gt; (all versions, three unique build variants, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| World Class Rugby || 2.3 || &amp;lt;tt&amp;gt;0x0608&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0B8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Battle Cars || 3.0 || &amp;lt;tt&amp;gt;0x0717&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0A8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Chavez/Riddick Bowe Boxing || 3.0 (US version)&amp;lt;br&amp;gt;3.1 (all other versions) || &amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt; (Japanese version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067C&amp;lt;/tt&amp;gt; (US version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067D&amp;lt;/tt&amp;gt; (Chavez) || &amp;lt;tt&amp;gt;0x0D8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions except Chavez)&amp;lt;br&amp;gt;(three unique build variants, one per version between Chavez, US &amp;amp; Japanese versions)&lt;br /&gt;
|-&lt;br /&gt;
| Lawnmower Man/Virtual Wars || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; (US beta)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x06A4&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x9C8000&amp;lt;/tt&amp;gt; (all versions except US beta)/&amp;lt;tt&amp;gt;0x9E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Apocalypse II || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0624&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x118000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x168000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Elite Soccer/World Cup Striker || 3.1 || &amp;lt;tt&amp;gt;0x0601&amp;lt;/tt&amp;gt; (US and European version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x060B&amp;lt;/tt&amp;gt; (US and Japanese version Title Screen)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0704&amp;lt;/tt&amp;gt; (Japanese version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x070B&amp;lt;/tt&amp;gt; (European version Title Screen) || &amp;lt;tt&amp;gt;0x1B8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x08D500&amp;lt;/tt&amp;gt; (US &amp;amp; Japanese version)/&amp;lt;tt&amp;gt;0x08D550&amp;lt;/tt&amp;gt; (European beta version)/&amp;lt;tt&amp;gt;0x08D640&amp;lt;/tt&amp;gt; (European version)&amp;lt;br&amp;gt;(Four unique build variants: two Title Screen (US/JP compared to EU) and two In-Game (US/EU compare to JP))&lt;br /&gt;
|-&lt;br /&gt;
| Kick Off 3 (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x0658&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1A8000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x1D8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Lemmings 2: The Tribes || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x060F&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0697&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 16 copies of the code in the ROM, with five different build variants being present: four of them are used in one instance each, that being the opening logo, the Title Screen, the Beach Tribe and the Cavelem Tribe, and the others use a single common copy of the code with modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Porky Pig&#039;s Haunted Holiday (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06CA&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 36 copies of the code in the ROM, none of which are unique except for the sound data and modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Shaq Fu || 4.0a || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD96408&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Michael Jordan: Chaos in the Windy City || 4.0b || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD2B18F&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
Each command is triggered by sending the parameters to $2141-$2143 first, then the command ID to $2140. The latches are cleared afterwards on all registers, which means the same command IDs can be sent again, provided the parameters are resent.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
====V0.0====&lt;br /&gt;
There is no acknowledgement to the SNES beyond the latches being cleared.&amp;lt;br&amp;gt;&lt;br /&gt;
====V1.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140-$2142 are updated every time a command ID is sent, and $2143 is updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz %00000abc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a parameter that was sent to $2141 to execute the command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%a&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 7.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%b&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 8.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%c&amp;lt;/tt&amp;gt; indicates that music is playing.&lt;br /&gt;
&lt;br /&gt;
====V2.0-V4.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141, and the internal command counter is initialized to the same value.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140 is updated every time a command ID is sent, and $2141-$2143 are updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&lt;br /&gt;
=====V2.0-V4.0a=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx %yyyyyyyy zz %aaaaaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyyyyyyy&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing a note for music. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%aaaaaaaa&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing SFX. These bits are cleared only when the SFX has elapsed all of its ticks, not when the sample is done playing if non-looping. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====V4.0b=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V0.0-V1.0)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$06 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$07 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Master Volume || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09-$FF&amp;lt;/tt&amp;gt; || Latch Clear || &amp;lt;tt&amp;gt;$09-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V2.0-V4.0a)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 1) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 2) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Play SFX (Channel 3) || &amp;lt;tt&amp;gt;$06 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Play SFX (Channel 4) || &amp;lt;tt&amp;gt;$07 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Play SFX (Channel 5) || &amp;lt;tt&amp;gt;$08 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;$09 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$0A xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$0B xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$0C ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$0D ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; || Master &amp;amp; Echo Volume || &amp;lt;tt&amp;gt;$0E xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; || Echo Feedback || &amp;lt;tt&amp;gt;$0F xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; || Go to IPL Boot Program || &amp;lt;tt&amp;gt;$10 ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$11 xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 1) || &amp;lt;tt&amp;gt;$12 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 2) || &amp;lt;tt&amp;gt;$13 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 3) || &amp;lt;tt&amp;gt;$14 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 4) || &amp;lt;tt&amp;gt;$15 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 5) || &amp;lt;tt&amp;gt;$16 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 6) || &amp;lt;tt&amp;gt;$17 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 7) || &amp;lt;tt&amp;gt;$18 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 8) || &amp;lt;tt&amp;gt;$19 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 1) || &amp;lt;tt&amp;gt;$1A xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 2) || &amp;lt;tt&amp;gt;$1B xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 3) || &amp;lt;tt&amp;gt;$1C xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 4) || &amp;lt;tt&amp;gt;$1D xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 5) || &amp;lt;tt&amp;gt;$1E xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 6) || &amp;lt;tt&amp;gt;$1F xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 7) || &amp;lt;tt&amp;gt;$20 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 8) || &amp;lt;tt&amp;gt;$21 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$22-$23 xx yy ??&amp;lt;/tt&amp;gt; || 4.0a&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$24-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$24-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V4.0b)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Stop All SFX || &amp;lt;tt&amp;gt;$05 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Master Volume || &amp;lt;tt&amp;gt;$06 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$07 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$09 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Stop Music &amp;amp; Load New Data || &amp;lt;tt&amp;gt;$0A ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$0B ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Panning Separation || &amp;lt;tt&amp;gt;$0C xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$0D-$FF ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Latch Clear/Increment Counter===&lt;br /&gt;
Clears the latches on the CPUIO registers and does nothing else except increment the counter on V2.0 and up, thus making this effectively a NOP. This occurs on almost all invalid command IDs: there is exactly one exception, noted under Invalid.&lt;br /&gt;
&lt;br /&gt;
===Invalid (Command &amp;lt;tt&amp;gt;$22&amp;lt;/tt&amp;gt; - Porky Pig&#039;s Haunted Holiday (beta) only)===&lt;br /&gt;
Crashes the sound driver. The only game that can do this is Porky Pig&#039;s Haunted Holiday (beta), and it is because it jumps directly to a RET opcode on an empty stack, thus causing a stack underflow and a jump to a memory location not used for code.&lt;br /&gt;
&lt;br /&gt;
===NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$01 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the music ID.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid music IDs from being played.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command because it effectively turns it into a NOP:&lt;br /&gt;
* Apocalypse II (Opening logo)/Lemmings 2: The Tribes (Opening logo)&lt;br /&gt;
* Kick Off 3 (Beta) (In-Game)&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Play SFX (Command &amp;lt;tt&amp;gt;$04-$05&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$04-$0B&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yz ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Plays a piece of SFX.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V0.0-V1.0:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channels 1-6: Not supported&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V2.0-V4.0a:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channel 1: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 2: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 3: &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 4: &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 5: &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 6: &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** V4.0b instead dynamically allocates the channel that the SFX is played on across channels 5-8, and has a fixed ID of &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the SFX ID. Setting the highest bit (covering IDs &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;) keys off the SFX instead of playing it.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid SFX IDs from being played, and only accept &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; as an ID to key off SFX on that channel. V4.0b doesn&#039;t support &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; at all.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;z&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** Dream TV (beta and final): &#039;&#039;&#039;2X&#039;&#039;&#039;&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** Batman: Revenge of the Joker, Krusty&#039;s Super Fun House, Michael Jordan Chaos in the Windy City &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu, Super SWIV/Firepower 2000: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* Gods (Ending)&lt;br /&gt;
&lt;br /&gt;
====SFX Data Format====&lt;br /&gt;
Each SFX entry is a pointer to a 14-byte entry containing a series of parameters to utilize on a per-SFX basis. Only one channel&#039;s worth is defined here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc dd ee ff gg hh ii jj kk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to play the SFX for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to slide pitches before resetting and doing the slide again.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a starting value for either the PITCHL DSP register or a noise frequency.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a starting value for the PITCHH DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is the offset to apply to either the PITCHL DSP register or noise frequency per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a offset to apply to the PITCHH DSP register per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a direct write to the SRCN DSP register. &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; and up instead cause this to use noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; modifies the pitch using RNG using a non-zero value (except for V3.0 and up, this value is any non-zero value). How it is modified depends on the version.&lt;br /&gt;
** V0.0-V2.0 overwrites the pitch settings and instead uses two bytes of RNG values for the pitch on a per-step basis.&lt;br /&gt;
** V2.1 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the high byte of the final pitch output on a per-step basis.&lt;br /&gt;
** V2.2 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
** V2.3 does nothing.&lt;br /&gt;
** V3.0 and up apply a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff&amp;lt;/tt&amp;gt; defines the sign for the pitch offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; turns off pitch slides for the SFX.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; apply a positive offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; apply a negative offset.&lt;br /&gt;
* &amp;lt;tt&amp;gt;gg&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to perform the pitch slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;hh&amp;lt;/tt&amp;gt; is a direct write to the ADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt; is a direct write to the ADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;jj&amp;lt;/tt&amp;gt; is generally an endless flag, but its operation differs between versions.&lt;br /&gt;
** For V0.0-V4.0a, when this value is non-zero, it causes the SFX to be played endlessly until keyed off or interrupted. It also causes pitch slides to run forever.&lt;br /&gt;
** For V4.0b, this acts as SFX priority. If all four channels are being used for SFX and the priority of the incoming SFX is greater than the SFX currently played, then the SFX is overwritten. The SFX plays forever if this value is greater than &amp;lt;tt&amp;gt;$7F&amp;lt;/tt&amp;gt;, like what is done in V0.0-V4.0a.&lt;br /&gt;
* &amp;lt;tt&amp;gt;kk&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) per step.&lt;br /&gt;
&lt;br /&gt;
===Stop All SFX (Command &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops all SFX from playing in channels 5-8.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at maximum tempo... which means every ten timer 0 ticks. This is equivalent to a tempo of 256.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at normal tempo.&lt;br /&gt;
&lt;br /&gt;
===Master &amp;amp; Echo Volume (Command &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V1.0), &amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the MVOLL and MVOLR DSP registers.&lt;br /&gt;
** V2.0 and up may also set the EVOLL and EVOLR DSP registers, but only if echo is supported in that build. It is always scaled by the master volume. The scaler multiplier (actually done with shifts) is as following, sorted by build...&lt;br /&gt;
*** Batman: Revenge of the Joker: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** Dream TV: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** Gods (all builds): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** World Class Rugby: &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** Lawnmower Man/Virtual Wars (Driving): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** Lemmings 2: The Tribes (Cavelem Tribe): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Echo Feedback (Command &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0F xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the EFB DSP register.&lt;br /&gt;
&lt;br /&gt;
This is only ever supported if echo is supported in the ROM. That means only these builds support this command:&lt;br /&gt;
* Batman: Revenge of the Joker&lt;br /&gt;
* Dream TV&lt;br /&gt;
* Gods (all builds)&lt;br /&gt;
* World Class Rugby&lt;br /&gt;
* Lawnmower Man/Virtual Wars (Driving)&lt;br /&gt;
* Lemmings 2: The Tribes (Cavelem Tribe)&lt;br /&gt;
&lt;br /&gt;
These other games have a reference for the ID, but effectively make it a NOP:&lt;br /&gt;
* Battle Cars&lt;br /&gt;
* Riddick Bowe Boxing/Chavez (all versions except Japanese)&lt;br /&gt;
* Shaq-Fu&lt;br /&gt;
&lt;br /&gt;
===Go to IPL Boot Program (Command &amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
Jumps directly to the [[SPC700/IPL ROM|IPL Boot Program]].&lt;br /&gt;
&lt;br /&gt;
===Set Tempo (Command &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$11 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the tempo to set the song at. This overwrites the song&#039;s tempo settings.&lt;br /&gt;
&lt;br /&gt;
===Set SFX Volume (Command &amp;lt;tt&amp;gt;$12-$19&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii ?? xy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** Michael Jordan Chaos in the Windy City &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Set SFX Pitch (Command &amp;lt;tt&amp;gt;$1A-$21&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; overwrites the PITCHL value used in the SFX data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; overwrites the PITCHH value used in the SFX data.&lt;br /&gt;
&lt;br /&gt;
This command is only supported in the following builds...&lt;br /&gt;
* Battle Cars&lt;br /&gt;
* World Cup Striker (European version) (Title Screen)&lt;br /&gt;
* Elite Soccer/World Cup Striker (European version) (In-Game)&lt;br /&gt;
* Kick Off 3 (beta) (In-Game)&lt;br /&gt;
* Kick Off 3 (beta) (Title Screen)&lt;br /&gt;
* Porky Pig&#039;s Haunted Holiday (beta)&lt;br /&gt;
* Shaq-Fu&lt;br /&gt;
&lt;br /&gt;
Not all IDs are supported in these builds...&lt;br /&gt;
* Lawnmower Man/Virtual Wars (In-Game) &#039;&#039;(does not support $1A-$1D, not even in the code)&#039;&#039;&lt;br /&gt;
* World Cup Striker (Japanese) (In-Game) &#039;&#039;(skips over $1A-$1D via a longer branding distance, though the code still exists)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; (V4.0a), &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Loads new data from the SNES using an IPL Boot ROM variant.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol should be nearly identical to IPL Boot ROM with a few differences or so, since the program seems like it&#039;s using a similar variant)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Stop Music &amp;amp; Load New Data (Command &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops the music, then loads new data from the SNES using an IPL Boot ROM variant.&lt;br /&gt;
&lt;br /&gt;
===Panning Separation (Command &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0C xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; sets the amount that the panning will influence the left and right volumes. The maximum is zero, while the minimum is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;, making it effectively mono.&lt;br /&gt;
&lt;br /&gt;
==Song Entry==&lt;br /&gt;
For each song entry in an array of song definitions, one byte is defined as a starting tempo, followed by a series of pointers defined [[little endian]] style for each channel. For Dream TV Beta and Kick Off, only five pointers are defined. For Krusty&#039;s Super Fun House, only six pointers are defined. For all other games, eight pointers are defined.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (Dream TV Beta and Kick Off)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (Krusty&#039;s Super Fun House)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee ff ff&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting tempo.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. &#039;&#039;(Krusty&#039;s Super Fun House only pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff ff&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Two builds don&#039;t support song entries at all:&lt;br /&gt;
* The opening logos for Lemmings 2: The Tribes and Apocalypse II&lt;br /&gt;
* Kick Off 3 Beta (In-Game)&lt;br /&gt;
&lt;br /&gt;
==Pattern Order List==&lt;br /&gt;
Each channel has a list of [[little endian]] pointers on a per-channel basis. If the pointer is zero, then you jump back to either the beginning of the pattern order list for that channel, or to the loop marker that was set by the $F5 VCMD.&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format at V0.0 is N-SPC/Kankichi-kun compatible minus noise support for SRCN values above 127. Post V1.0, one of the bytes loses its usage.&lt;br /&gt;
&lt;br /&gt;
The instrument format is defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0-V1.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz ?? bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register... but only for V1.0 and older. Otherwise, it&#039;s an unused byte.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt; || Note || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;%011xxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt; || Note Length || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Instant Pitch Change to Note || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0a only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Set Master Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0b only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Volume Scaler by Fraction ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Set ADSR ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Fine Tune ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Pitch Bend ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Pitch Envelope ID ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || L/R Voice Volume ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt; || Tempo ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt; || Jump to Pattern in Order List + Mark Loop Point ||&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt; || Key Off || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt; || One Note Delay || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt; || Instrument ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt; || Absolute Global Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt; || Absolute Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt; || Song End || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Pattern End || || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMDs &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (pre-V4.0), &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; (pre-V3.0), &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; (pre-V2.0), &amp;lt;tt&amp;gt;$F0-$F1&amp;lt;/tt&amp;gt; (pre-V1.0))===&lt;br /&gt;
The sound driver deliberately freezes itself via an infinite branch always loop rather than crashing or skipping the byte. This also takes up VCMD slots that are not filled in earlier versions.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMDs &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
The initial pitch of the note is calculated using a pitch table that contains one octave (and a note)&#039;s worth of pitch values. This value is shifted according to the octave used, and multiplied that by the instrument&#039;s pitch base to get the pitch for the note.&lt;br /&gt;
&lt;br /&gt;
===Note Length (VCMDs &amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%011xxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; represents your note length (as five bits).&lt;br /&gt;
Note lengths are defined as the number of tempo ticks plus one. Notes are keyed off either on another note or on the key off VCMD (&amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Instant Pitch Change to Note (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0a))===&lt;br /&gt;
Requires V4.0a to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the note to change the pitch to.&lt;br /&gt;
&lt;br /&gt;
===Set Master Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Requires V4.0b to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the value to directly write to the MVOL DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Volume Scaler by Fraction (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V3.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the numerator, and is the value to multiply the volume by. The scaling process is skipped if this is zero.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the denominator, and is the value to divide the multiplied volume by.&lt;br /&gt;
Put the two together, and you get the current volume multiplied by &amp;lt;math&amp;gt;\frac{x}{y}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Set ADSR (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V2.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Pitch Bend (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
Pitch bends are performed every 10 timer 0 ticks independently of the tempo. They are automatically terminated after one note.&lt;br /&gt;
&lt;br /&gt;
===Pitch Envelope ID (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an index to an array to a pointer of pitch envelopes. The pitch envelopes always loop and are clocked at a rate of 10 timer 0 ticks independently of the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
====Pitch Envelope Format====&lt;br /&gt;
=====Pitch Offset Tick (CMD &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$81-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed offset in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
=====Restart Pitch Envelope (CMD &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;$80&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jumps back to the beginning of the pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===L/R Voice Volume (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F3 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This is a direct DSP register write to the VxVOL registers, with &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; being the left volume and &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; being the right volume.&lt;br /&gt;
This VCMD&#039;s operation changes depending on the version:&lt;br /&gt;
* V0.0-V2.2: Just a straight write with no modifications made to the input.&lt;br /&gt;
* V2.3: The input values are shifted left once.&lt;br /&gt;
* V3.0-V4.0b: The input values are scaled by VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;, then shifted left once.&lt;br /&gt;
* V4.0a: The input values are scaled by the values used for VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;. The shifting operation is not done here.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as &amp;lt;math&amp;gt;10*\frac{256}{x}&amp;lt;/math&amp;gt; timer 0 ticks. Zero freezes the song except for pitch bends and envelopes, which are not affected by the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
===Jump to Pattern in Order List + Mark Loop Point (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern pointer in the order list. The loop point is marked here.&lt;br /&gt;
&lt;br /&gt;
===Key Off (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===One Note Delay (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Absolute Global Transposition (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for all channels for the music.&lt;br /&gt;
Global transpsition is not applied to channel 4 for V0.0-2.1.&lt;br /&gt;
&lt;br /&gt;
===Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FC xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for the channel.&lt;br /&gt;
&lt;br /&gt;
===Song End (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Terminates the song for all of the channels.&lt;br /&gt;
&lt;br /&gt;
===Pattern End (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Ends the pattern and goes to the pattern order list to fetch another pattern.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=2230</id>
		<title>David Whittaker Sound Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=David_Whittaker_Sound_Engine&amp;diff=2230"/>
		<updated>2022-08-08T22:56:26Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Corrected $F5 VCMD notes and added some fine print for global transposition, since on earlier versions one of the channels is not affected.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;David Whittaker Sound Engine&#039;&#039;&#039; is a sound driver for the SPC700 programmed by David Whittaker.&lt;br /&gt;
&lt;br /&gt;
Many games have multiple different builds stored in the game at once, sometimes with code differences. Almost every single game has at least one unique build not shared by any of the other games: the exceptions are...&lt;br /&gt;
* The opening logos for Lemmings 2: The Tribes and Apocalypse II&lt;br /&gt;
* Kick Off 3 Beta&#039;s Title Screen and Lawnmower Man/Virtual Wars&#039; US Beta&lt;br /&gt;
* Lemmings 2: The Tribes&#039; most common build and Riddick Bowe Boxing&#039;s Japanese version&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[David Whittaker Sound Engine/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
These are the games where the sound engine was used:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Version !! VCMD Code Location !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Dream TV || 0.0 (Beta 2)&amp;lt;br&amp;gt;2.1 (all other versions) || &amp;lt;tt&amp;gt;0x098A&amp;lt;/tt&amp;gt; (Beta 2)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x0196A2&amp;lt;/tt&amp;gt; (Beta 2, uncompressed)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x039B16&amp;lt;/tt&amp;gt; (all other versions, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| Krusty&#039;s Super Fun House || 1.0 || &amp;lt;tt&amp;gt;0x04F1&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Kick Off/Super Kick Off || 1.0 || &amp;lt;tt&amp;gt;0x04E6&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x098000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Batman: Revenge of the Joker || 2.0 || &amp;lt;tt&amp;gt;0x0610&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x068000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Super SWIV/Firepower 2000 || 2.2 || &amp;lt;tt&amp;gt;0x06AD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x158000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Gods || 2.3 || &amp;lt;tt&amp;gt;0x0500&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0600&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0612&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x980000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x98AFAC&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x99D448&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x9A8000&amp;lt;/tt&amp;gt; (all versions, three unique build variants, &#039;&#039;RNC compressed&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| World Class Rugby || 2.3 || &amp;lt;tt&amp;gt;0x0608&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0B8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Battle Cars || 3.0 || &amp;lt;tt&amp;gt;0x0717&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0A8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Chavez/Riddick Bowe Boxing || 3.0 (US version)&amp;lt;br&amp;gt;3.1 (all other versions) || &amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt; (Japanese version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067C&amp;lt;/tt&amp;gt; (US version)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x067D&amp;lt;/tt&amp;gt; (Chavez) || &amp;lt;tt&amp;gt;0x0D8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x0E8000&amp;lt;/tt&amp;gt; (all versions except Chavez)&amp;lt;br&amp;gt;(three unique build variants, one per version between Chavez, US &amp;amp; Japanese versions)&lt;br /&gt;
|-&lt;br /&gt;
| Lawnmower Man/Virtual Wars || 3.1 || &amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; (US beta)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x06A4&amp;lt;/tt&amp;gt; (all other versions) || &amp;lt;tt&amp;gt;0x9C8000&amp;lt;/tt&amp;gt; (all versions except US beta)/&amp;lt;tt&amp;gt;0x9E8000&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Apocalypse II || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0624&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x118000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x168000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Elite Soccer/World Cup Striker || 3.1 || &amp;lt;tt&amp;gt;0x0601&amp;lt;/tt&amp;gt; (US and European version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x060B&amp;lt;/tt&amp;gt; (US and Japanese version Title Screen)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x0704&amp;lt;/tt&amp;gt; (Japanese version In-Game)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x070B&amp;lt;/tt&amp;gt; (European version Title Screen) || &amp;lt;tt&amp;gt;0x1B8000&amp;lt;/tt&amp;gt; (all versions)/&amp;lt;tt&amp;gt;0x08D500&amp;lt;/tt&amp;gt; (US &amp;amp; Japanese version)/&amp;lt;tt&amp;gt;0x08D550&amp;lt;/tt&amp;gt; (European beta version)/&amp;lt;tt&amp;gt;0x08D640&amp;lt;/tt&amp;gt; (European version)&amp;lt;br&amp;gt;(Four unique build variants: two Title Screen (US/JP compared to EU) and two In-Game (US/EU compare to JP))&lt;br /&gt;
|-&lt;br /&gt;
| Kick Off 3 (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x0658&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x06BD&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1A8000&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x1D8000&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Lemmings 2: The Tribes || 3.1 || &amp;lt;tt&amp;gt;0x05AF&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x060F&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0614&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0621&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x0697&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 16 copies of the code in the ROM, with five different build variants being present: four of them are used in one instance each, that being the opening logo, the Title Screen, the Beach Tribe and the Cavelem Tribe, and the others use a single common copy of the code with modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Porky Pig&#039;s Haunted Holiday (Beta version only) || 3.1 || &amp;lt;tt&amp;gt;0x06CA&amp;lt;/tt&amp;gt; || &#039;&#039;(omitted for now: there are 36 copies of the code in the ROM, none of which are unique except for the sound data and modifications of constants and non-code pointers)&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Shaq Fu || 4.0a || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD96408&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Michael Jordan: Chaos in the Windy City || 4.0b || &amp;lt;tt&amp;gt;0x0539&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0xD2B18F&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
Each command is triggered by sending the parameters to $2141-$2143 first, then the command ID to $2140. The latches are cleared afterwards on all registers, which means the same command IDs can be sent again, provided the parameters are resent.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
====V0.0====&lt;br /&gt;
There is no acknowledgement to the SNES beyond the latches being cleared.&amp;lt;br&amp;gt;&lt;br /&gt;
====V1.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140-$2142 are updated every time a command ID is sent, and $2143 is updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz %00000abc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a parameter that was sent to $2141 to execute the command.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the command ID that was just sent.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%a&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 7.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%b&amp;lt;/tt&amp;gt; indicates that a piece of SFX is playing on channel 8.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%c&amp;lt;/tt&amp;gt; indicates that music is playing.&lt;br /&gt;
&lt;br /&gt;
====V2.0-V4.0====&lt;br /&gt;
On initialization, initially $2140-$2141 are sent a zero while the sound driver sets itself up. When initialization finishes, a &amp;lt;tt&amp;gt;$55&amp;lt;/tt&amp;gt; is sent to $2140-$2141, and the internal command counter is initialized to the same value.&amp;lt;br&amp;gt;&lt;br /&gt;
After the first command ID is sent, $2140 is updated every time a command ID is sent, and $2141-$2143 are updated every timer 0 tick.&amp;lt;br&amp;gt;&lt;br /&gt;
When a command ID is sent, the latches are cleared, allowing the SNES to send the same command ID again. However, this also means that the parameters have to be resent if the same parameters are to be used again.&lt;br /&gt;
&lt;br /&gt;
=====V2.0-V4.0a=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx %yyyyyyyy zz %aaaaaaaa&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyyyyyyy&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing SFX. These bits are cleared only when the SFX has elapsed all of its ticks, not when the sample is done playing if non-looping. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%aaaaaaaa&amp;lt;/tt&amp;gt; is a set of bits for each channel that is playing a note for music. &#039;&#039;Not used in V4.0a.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====V4.0b=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a counter that is incremented every time a command is received.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; indicates whether or not music is playing. It is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; when music is playing, and zero otherwise.&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V0.0-V1.0)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$06 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$07 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Master Volume || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09-$FF&amp;lt;/tt&amp;gt; || Latch Clear || &amp;lt;tt&amp;gt;$09-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V2.0-V4.0a)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX (Channel 1) || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Play SFX (Channel 2) || &amp;lt;tt&amp;gt;$05 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Play SFX (Channel 3) || &amp;lt;tt&amp;gt;$06 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Play SFX (Channel 4) || &amp;lt;tt&amp;gt;$07 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Play SFX (Channel 5) || &amp;lt;tt&amp;gt;$08 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Play SFX (Channel 6) || &amp;lt;tt&amp;gt;$09 xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Play SFX (Channel 7) || &amp;lt;tt&amp;gt;$0A xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Play SFX (Channel 8) || &amp;lt;tt&amp;gt;$0B xx yz ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$0C ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$0D ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; || Master &amp;amp; Echo Volume || &amp;lt;tt&amp;gt;$0E xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; || Echo Feedback || &amp;lt;tt&amp;gt;$0F xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; || Go to IPL Boot Program || &amp;lt;tt&amp;gt;$10 ?? ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$11 xx ?? ??&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 1) || &amp;lt;tt&amp;gt;$12 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 2) || &amp;lt;tt&amp;gt;$13 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 3) || &amp;lt;tt&amp;gt;$14 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 4) || &amp;lt;tt&amp;gt;$15 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 5) || &amp;lt;tt&amp;gt;$16 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 6) || &amp;lt;tt&amp;gt;$17 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 7) || &amp;lt;tt&amp;gt;$18 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt; || Set SFX Volume (Channel 8) || &amp;lt;tt&amp;gt;$19 ?? xy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 1) || &amp;lt;tt&amp;gt;$1A xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 2) || &amp;lt;tt&amp;gt;$1B xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 3) || &amp;lt;tt&amp;gt;$1C xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 4) || &amp;lt;tt&amp;gt;$1D xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 5) || &amp;lt;tt&amp;gt;$1E xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 6) || &amp;lt;tt&amp;gt;$1F xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 7) || &amp;lt;tt&amp;gt;$20 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt; || Set SFX Pitch (Channel 8) || &amp;lt;tt&amp;gt;$21 xx yy ??&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$22-$23 xx yy ??&amp;lt;/tt&amp;gt; || 4.0a&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$24-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$24-$FF ?? ?? ??&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Command IDs (V4.0b)===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || NOP || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;$01 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$02 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$03 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; || Play SFX || &amp;lt;tt&amp;gt;$04 xx yz ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; || Stop All SFX || &amp;lt;tt&amp;gt;$05 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; || Master Volume || &amp;lt;tt&amp;gt;$06 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; || Set Tempo || &amp;lt;tt&amp;gt;$07 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; || Fast Forward On || &amp;lt;tt&amp;gt;$08 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; || Fast Forward Off || &amp;lt;tt&amp;gt;$09 xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; || Stop Music &amp;amp; Load New Data || &amp;lt;tt&amp;gt;$0A ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$0B ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; || Panning Separation || &amp;lt;tt&amp;gt;$0C xx ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$0D-$FF&amp;lt;/tt&amp;gt; || Latch Clear/Increment Counter || &amp;lt;tt&amp;gt;$0D-$FF ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Latch Clear/Increment Counter===&lt;br /&gt;
Clears the latches on the CPUIO registers and does nothing else except increment the counter on V2.0 and up, thus making this effectively a NOP. This occurs on almost all invalid command IDs: there is exactly one exception, noted under Invalid.&lt;br /&gt;
&lt;br /&gt;
===Invalid (Command &amp;lt;tt&amp;gt;$22&amp;lt;/tt&amp;gt; - Porky Pig&#039;s Haunted Holiday (beta) only)===&lt;br /&gt;
Crashes the sound driver. The only game that can do this is Porky Pig&#039;s Haunted Holiday (beta), and it is because it jumps directly to a RET opcode on an empty stack, thus causing a stack underflow and a jump to a memory location not used for code.&lt;br /&gt;
&lt;br /&gt;
===NOP (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Does absolutely nothing.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$01 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the music ID.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid music IDs from being played.&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command because it effectively turns it into a NOP:&lt;br /&gt;
* Apocalypse II (Opening logo)/Lemmings 2: The Tribes (Opening logo)&lt;br /&gt;
* Kick Off 3 (Beta) (In-Game)&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Play SFX (Command &amp;lt;tt&amp;gt;$04-$05&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$04-$0B&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yz ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Plays a piece of SFX.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V0.0-V1.0:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channels 1-6: Not supported&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
** &amp;lt;u&amp;gt;V2.0-V4.0a:&amp;lt;/u&amp;gt;&lt;br /&gt;
*** Channel 1: &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 2: &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 3: &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 4: &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 5: &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 6: &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 7: &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt;&lt;br /&gt;
*** Channel 8: &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** V4.0b instead dynamically allocates the channel that the SFX is played on across channels 5-8, and has a fixed ID of &amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the SFX ID. Setting the highest bit (covering IDs &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt;) keys off the SFX instead of playing it.&lt;br /&gt;
** V1.0 and up have boundary checks that prevent invalid SFX IDs from being played, and only accept &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; as an ID to key off SFX on that channel. V4.0b doesn&#039;t support &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; at all.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;z&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** Dream TV (beta and final): &#039;&#039;&#039;2X&#039;&#039;&#039;&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** Batman: Revenge of the Joker, Krusty&#039;s Super Fun House, Michael Jordan Chaos in the Windy City &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu, Super SWIV/Firepower 2000: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The following builds don&#039;t support this command:&lt;br /&gt;
* Gods (Ending)&lt;br /&gt;
&lt;br /&gt;
====SFX Data Format====&lt;br /&gt;
Each SFX entry is a pointer to a 14-byte entry containing a series of parameters to utilize on a per-SFX basis. Only one channel&#039;s worth is defined here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc dd ee ff gg hh ii jj kk&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to play the SFX for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to slide pitches before resetting and doing the slide again.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a starting value for either the PITCHL DSP register or a noise frequency.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a starting value for the PITCHH DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is the offset to apply to either the PITCHL DSP register or noise frequency per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a offset to apply to the PITCHH DSP register per step.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a direct write to the SRCN DSP register. &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; and up instead cause this to use noise.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; modifies the pitch using RNG using a non-zero value (except for V3.0 and up, this value is any non-zero value). How it is modified depends on the version.&lt;br /&gt;
** V0.0-V2.0 overwrites the pitch settings and instead uses two bytes of RNG values for the pitch on a per-step basis.&lt;br /&gt;
** V2.1 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the high byte of the final pitch output on a per-step basis.&lt;br /&gt;
** V2.2 adds a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
** V2.3 does nothing.&lt;br /&gt;
** V3.0 and up apply a random offset of the RNG value ANDed by &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; to the low byte of the starting pitch for the first step only.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff&amp;lt;/tt&amp;gt; defines the sign for the pitch offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; turns off pitch slides for the SFX.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; apply a positive offset.&lt;br /&gt;
** &amp;lt;tt&amp;gt;$80-$FF&amp;lt;/tt&amp;gt; apply a negative offset.&lt;br /&gt;
* &amp;lt;tt&amp;gt;gg&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) to perform the pitch slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;hh&amp;lt;/tt&amp;gt; is a direct write to the ADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt; is a direct write to the ADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;jj&amp;lt;/tt&amp;gt; is generally an endless flag, but its operation differs between versions.&lt;br /&gt;
** For V0.0-V4.0a, when this value is non-zero, it causes the SFX to be played endlessly until keyed off or interrupted. It also causes pitch slides to run forever.&lt;br /&gt;
** For V4.0b, this acts as SFX priority. If all four channels are being used for SFX and the priority of the incoming SFX is greater than the SFX currently played, then the SFX is overwritten. The SFX plays forever if this value is greater than &amp;lt;tt&amp;gt;$7F&amp;lt;/tt&amp;gt;, like what is done in V0.0-V4.0a.&lt;br /&gt;
* &amp;lt;tt&amp;gt;kk&amp;lt;/tt&amp;gt; is the number of timer 0 ticks (times 10) per step.&lt;br /&gt;
&lt;br /&gt;
===Stop All SFX (Command &amp;lt;tt&amp;gt;$05&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops all SFX from playing in channels 5-8.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at maximum tempo... which means every ten timer 0 ticks. This is equivalent to a tempo of 256.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$07&amp;lt;/tt&amp;gt; (V0.0-V1.0), &amp;lt;tt&amp;gt;$0D&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$09&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Causes the music to play at normal tempo.&lt;br /&gt;
&lt;br /&gt;
===Master &amp;amp; Echo Volume (Command &amp;lt;tt&amp;gt;$08&amp;lt;/tt&amp;gt; (V1.0), &amp;lt;tt&amp;gt;$0E&amp;lt;/tt&amp;gt; (V2.0-V4.0a), &amp;lt;tt&amp;gt;$06&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the MVOLL and MVOLR DSP registers.&lt;br /&gt;
** V2.0 and up may also set the EVOLL and EVOLR DSP registers, but only if echo is supported in that build. It is always scaled by the master volume. The scaler multiplier (actually done with shifts) is as following, sorted by build...&lt;br /&gt;
*** Batman: Revenge of the Joker: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** Dream TV: &#039;&#039;&#039;1/4&#039;&#039;&#039;&lt;br /&gt;
*** Gods (all builds): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** World Class Rugby: &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** Lawnmower Man/Virtual Wars (Driving): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
*** Lemmings 2: The Tribes (Cavelem Tribe): &#039;&#039;&#039;3/16&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Echo Feedback (Command &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0F xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the EFB DSP register.&lt;br /&gt;
&lt;br /&gt;
This is only ever supported if echo is supported in the ROM. That means only these builds support this command:&lt;br /&gt;
* Batman: Revenge of the Joker&lt;br /&gt;
* Dream TV&lt;br /&gt;
* Gods (all builds)&lt;br /&gt;
* World Class Rugby&lt;br /&gt;
* Lawnmower Man/Virtual Wars (Driving)&lt;br /&gt;
* Lemmings 2: The Tribes (Cavelem Tribe)&lt;br /&gt;
&lt;br /&gt;
These other games have a reference for the ID, but effectively make it a NOP:&lt;br /&gt;
* Battle Cars&lt;br /&gt;
* Riddick Bowe Boxing/Chavez (all versions except Japanese)&lt;br /&gt;
* Shaq-Fu&lt;br /&gt;
&lt;br /&gt;
===Go to IPL Boot Program (Command &amp;lt;tt&amp;gt;$10&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
Jumps directly to the [[SPC700/IPL ROM|IPL Boot Program]].&lt;br /&gt;
&lt;br /&gt;
===Set Tempo (Command &amp;lt;tt&amp;gt;$11&amp;lt;/tt&amp;gt; (V2.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$11 xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the tempo to set the song at. This overwrites the song&#039;s tempo settings.&lt;br /&gt;
&lt;br /&gt;
===Set SFX Volume (Command &amp;lt;tt&amp;gt;$12-$19&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii ?? xy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$12&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$13&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$15&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$16&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$17&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$18&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$19&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;x&amp;lt;/tt&amp;gt; defines the left volume. This is not signed.&lt;br /&gt;
* &amp;lt;tt&amp;gt;y&amp;lt;/tt&amp;gt; defines the right volume. This is not signed.&lt;br /&gt;
** For both volume values, the 4-bit values are translated into the raw values for the VxVOLL/VxVOLR DSP registers via the following multipliers (in actuality, using XCNs and shift opcodes) on a per-game basis...&lt;br /&gt;
*** All other games: &#039;&#039;&#039;4X&#039;&#039;&#039;&lt;br /&gt;
*** Michael Jordan Chaos in the Windy City &#039;&#039;(SFX IDs &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$4B&amp;lt;/tt&amp;gt; only)&#039;&#039;, Shaq-Fu: &#039;&#039;&#039;8X&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Set SFX Pitch (Command &amp;lt;tt&amp;gt;$1A-$21&amp;lt;/tt&amp;gt; (V3.0-V4.0a))===&lt;br /&gt;
&amp;lt;pre&amp;gt;ii xx yy ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;ii&amp;lt;/tt&amp;gt;, the command ID used for the SFX, defines the channel used.&amp;lt;br&amp;gt;&lt;br /&gt;
** Channel 1: &amp;lt;tt&amp;gt;$1A&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 2: &amp;lt;tt&amp;gt;$1B&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 3: &amp;lt;tt&amp;gt;$1C&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 4: &amp;lt;tt&amp;gt;$1D&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 5: &amp;lt;tt&amp;gt;$1E&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 6: &amp;lt;tt&amp;gt;$1F&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 7: &amp;lt;tt&amp;gt;$20&amp;lt;/tt&amp;gt;&lt;br /&gt;
** Channel 8: &amp;lt;tt&amp;gt;$21&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; overwrites the PITCHL value used in the SFX data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; overwrites the PITCHH value used in the SFX data.&lt;br /&gt;
&lt;br /&gt;
This command is only supported in the following builds...&lt;br /&gt;
* Battle Cars&lt;br /&gt;
* World Cup Striker (European version) (Title Screen)&lt;br /&gt;
* Elite Soccer/World Cup Striker (European version) (In-Game)&lt;br /&gt;
* Kick Off 3 (beta) (In-Game)&lt;br /&gt;
* Kick Off 3 (beta) (Title Screen)&lt;br /&gt;
* Porky Pig&#039;s Haunted Holiday (beta)&lt;br /&gt;
* Shaq-Fu&lt;br /&gt;
&lt;br /&gt;
Not all IDs are supported in these builds...&lt;br /&gt;
* Lawnmower Man/Virtual Wars (In-Game) &#039;&#039;(does not support $1A-$1D, not even in the code)&#039;&#039;&lt;br /&gt;
* World Cup Striker (Japanese) (In-Game) &#039;&#039;(skips over $1A-$1D via a longer branding distance, though the code still exists)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$22-$23&amp;lt;/tt&amp;gt; (V4.0a), &amp;lt;tt&amp;gt;$0B&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Loads new data from the SNES using an IPL Boot ROM variant.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol should be nearly identical to IPL Boot ROM with a few differences or so, since the program seems like it&#039;s using a similar variant)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Stop Music &amp;amp; Load New Data (Command &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Stops the music, then loads new data from the SNES using an IPL Boot ROM variant.&lt;br /&gt;
&lt;br /&gt;
===Panning Separation (Command &amp;lt;tt&amp;gt;$0C&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
&amp;lt;pre&amp;gt;$0C xx ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; sets the amount that the panning will influence the left and right volumes. The maximum is zero, while the minimum is &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;, making it effectively mono.&lt;br /&gt;
&lt;br /&gt;
==Song Entry==&lt;br /&gt;
For each song entry in an array of song definitions, one byte is defined as a starting tempo, followed by a series of pointers defined [[little endian]] style for each channel. For Dream TV Beta and Kick Off, only five pointers are defined. For Krusty&#039;s Super Fun House, only six pointers are defined. For all other games, eight pointers are defined.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (Dream TV Beta and Kick Off)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Pre-V2.0 (Krusty&#039;s Super Fun House)&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee ff ff&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting tempo.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. &#039;&#039;(Krusty&#039;s Super Fun House only pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff ff&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. &#039;&#039;(not supported pre-V2.0)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Two builds don&#039;t support song entries at all:&lt;br /&gt;
* The opening logos for Lemmings 2: The Tribes and Apocalypse II&lt;br /&gt;
* Kick Off 3 Beta (In-Game)&lt;br /&gt;
&lt;br /&gt;
==Pattern Order List==&lt;br /&gt;
Each channel has a list of [[little endian]] pointers on a per-channel basis. If the pointer is zero, then you jump back to either the beginning of the pattern order list for that channel, or to the loop marker that was set by the $F5 VCMD.&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format at V0.0 is N-SPC/Kankichi-kun compatible minus noise support for SRCN values above 127. Post V1.0, one of the bytes loses its usage.&lt;br /&gt;
&lt;br /&gt;
The instrument format is defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V0.0-V1.0&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;V2.0 and up&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz ?? bb cc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register... but only for V1.0 and older. Otherwise, it&#039;s an unused byte.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments !! Minimum Version&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt; || Note || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;%011xxxxx&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt; || Note Length || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Instant Pitch Change to Note || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0a only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; || Set Master Volume || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 4.0b only&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; || Volume Scaler by Fraction ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 3.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; || Set ADSR ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 2.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Fine Tune ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Pitch Bend ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt; || Pitch Envelope ID ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt; || L/R Voice Volume ||&amp;lt;tt&amp;gt;xx yy&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt; || Tempo ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt; || Jump to Pattern in Order List + Mark Loop Point ||&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt; || Key Off || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt; || One Note Delay || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt; || Instrument ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt; || Absolute Global Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt; || Absolute Transposition ||&amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt; || Invalid || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt; || Song End || || 0.0&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Pattern End || || 0.0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMDs &amp;lt;tt&amp;gt;$80-$EC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$F6-$F7&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (pre-V4.0), &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt; (pre-V3.0), &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt; (pre-V2.0), &amp;lt;tt&amp;gt;$F0-$F1&amp;lt;/tt&amp;gt; (pre-V1.0))===&lt;br /&gt;
The sound driver deliberately freezes itself via an infinite branch always loop rather than crashing or skipping the byte. This also takes up VCMD slots that are not filled in earlier versions.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMDs &amp;lt;tt&amp;gt;$00-$5F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
The initial pitch of the note is calculated using a pitch table that contains one octave (and a note)&#039;s worth of pitch values. This value is shifted according to the octave used, and multiplied that by the instrument&#039;s pitch base to get the pitch for the note.&lt;br /&gt;
&lt;br /&gt;
===Note Length (VCMDs &amp;lt;tt&amp;gt;$60-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%011xxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; represents your note length (as five bits).&lt;br /&gt;
Note lengths are defined as the number of tempo ticks plus one. Notes are keyed off either on another note or on the key off VCMD (&amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Instant Pitch Change to Note (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0a))===&lt;br /&gt;
Requires V4.0a to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the note to change the pitch to.&lt;br /&gt;
&lt;br /&gt;
===Set Master Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt; (V4.0b))===&lt;br /&gt;
Requires V4.0b to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the value to directly write to the MVOL DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Volume Scaler by Fraction (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V3.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the numerator, and is the value to multiply the volume by. The scaling process is skipped if this is zero.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the denominator, and is the value to divide the multiplied volume by.&lt;br /&gt;
Put the two together, and you get the current volume multiplied by &amp;lt;math&amp;gt;\frac{x}{y}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Set ADSR (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V2.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
===Pitch Bend (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Requires V1.0 or later to use. Lower versions freeze the sound driver instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed delta value for the pitch. These are in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
Pitch bends are performed every 10 timer 0 ticks independently of the tempo. They are automatically terminated after one note.&lt;br /&gt;
&lt;br /&gt;
===Pitch Envelope ID (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an index to an array to a pointer of pitch envelopes. The pitch envelopes always loop and are clocked at a rate of 10 timer 0 ticks independently of the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
====Pitch Envelope Format====&lt;br /&gt;
=====Pitch Offset Tick (CMD &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$81-$FF&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed offset in units used directly for the VxPITCH DSP registers.&lt;br /&gt;
&lt;br /&gt;
=====Restart Pitch Envelope (CMD &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;)=====&lt;br /&gt;
&amp;lt;pre&amp;gt;$80&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jumps back to the beginning of the pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===L/R Voice Volume (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F3 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* This is a direct DSP register write to the VxVOL registers, with &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; being the left volume and &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; being the right volume.&lt;br /&gt;
This VCMD&#039;s operation changes depending on the version:&lt;br /&gt;
* V0.0-V2.2: Just a straight write with no modifications made to the input.&lt;br /&gt;
* V2.3: The input values are shifted left once.&lt;br /&gt;
* V3.0-V4.0b: The input values are scaled by VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;, then shifted left once.&lt;br /&gt;
* V4.0a: The input values are scaled by the values used for VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;. The shifting operation is not done here.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as &amp;lt;math&amp;gt;10*\frac{256}{x}&amp;lt;/math&amp;gt; timer 0 ticks. Zero freezes the song except for pitch bends and envelopes, which are not affected by the tempo ticker.&lt;br /&gt;
&lt;br /&gt;
===Jump to Pattern in Order List + Mark Loop Point (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern pointer in the order list. The loop point is marked here.&lt;br /&gt;
&lt;br /&gt;
===Key Off (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the note and delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===One Note Delay (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Delays the channel for one note length.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Absolute Global Transposition (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for all channels for the music.&lt;br /&gt;
Global transpsition is not applied to channel 4 for V0.0-2.1.&lt;br /&gt;
&lt;br /&gt;
===Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FC xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed note offset to apply for the channel.&lt;br /&gt;
&lt;br /&gt;
===Song End (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Terminates the song for all of the channels.&lt;br /&gt;
&lt;br /&gt;
===Pattern End (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Ends the pattern and goes to the pattern order list to fetch another pattern.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=Category:MIDI-Based_SPC_Sound_Engines&amp;diff=2226</id>
		<title>Category:MIDI-Based SPC Sound Engines</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=Category:MIDI-Based_SPC_Sound_Engines&amp;diff=2226"/>
		<updated>2022-06-26T19:34:59Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Adding Mindscape, courtesy of discovering a MIDI-based VCMD set for Mario&amp;#039;s Early Years (though some extra lookup may need to be done, critically the key on/off commands and that familiar $FF $2F EOF command is there).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This contains a list of [[:Category:SPC Sound Engines|SPC Sound Engines]] whose internal VCMD format contains a match to [[MIDI]]&#039;s own format (at least as far as being able to generally identify it). Except for Loriciel and Silicon Sorcery&#039;s SPC sound engines, the header generally does not match MIDI&#039;s own format.&lt;br /&gt;
&lt;br /&gt;
The following SPC sound engine pages that satisfy this criteria have not been created yet:&lt;br /&gt;
* [[ACID]] (Realtime Associates)&lt;br /&gt;
* [[Advanced Real-time Dynamic Interplay]] (&#039;&#039;&#039;Not&#039;&#039;&#039; RPM Racing, Wolfenstein 3D or Super 3D Noah&#039;s Ark)&lt;br /&gt;
* [[Loriciel Engine]]&lt;br /&gt;
* [[Mindscape Engine]]&lt;br /&gt;
* [[Silicon Sorcery Engine]]&lt;br /&gt;
* [[Super Music Driver]] (Haüs Teknikka)&lt;br /&gt;
&lt;br /&gt;
These SPC engines almost match, but the highest bit of a VCMD has a different meaning:&lt;br /&gt;
* [[Accolade Engine]] &#039;&#039;(uses the highest bit to indicate whether there is a delay or not)&#039;&#039;&lt;br /&gt;
* [[Bits Studios Engine]] &#039;&#039;(allows VCMD ID duplication through not setting the highest bit)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Further investigation is required for these cases...&lt;br /&gt;
* [[Alfa System Engine]] &#039;&#039;(contains an option via the track header to use compressed data instead, therefore the internal compression format must be recorded as well)&#039;&#039;&lt;br /&gt;
* [[Eurocom Engine]] &#039;&#039;(the sound driver contains the ability to use backreferencing, somewhat akin to SNESGSS&#039;s, though I need to do some more analysis of this one, as this one has some more features... and nesting support)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine&amp;diff=2223</id>
		<title>N-SPC Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine&amp;diff=2223"/>
		<updated>2022-06-16T15:31:21Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nintendo SPC Sound Engine&#039;&#039;&#039;, abbreviated N-SPC and officially known as Kankichi-kun [http://vgmpf.com/Wiki/index.php?title=Kankichi-kun], is the most common sound engine used in all of the SNES/SFC games. Only the music portion was initially provided in the source code included in the IS-Sound unit along with some templating for a protocol for music and sound effects [https://www.retroreversing.com/super-famicom-snes-development-kit/#intelligent-systems-shvc-development-system]: usually it was modified by developers on an individual basis, resulting in many different variants, some of them more heavily modifying the sound driver than others. Usually what was added on was sound effect support, but sometimes the music VCMDs were modified as well.&lt;br /&gt;
&lt;br /&gt;
The following games are purely based off of the source code provided with the IS-Sound unit, and are either unmodified or barely modified, if at all:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Hong Kong &#039;97 || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0F800A&amp;lt;/tt&amp;gt; (both versions)&lt;br /&gt;
|-&lt;br /&gt;
| SM Choukyoushi Hitomi - Bangai Hen || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| SM Choukyoushi Hitomi Vol. 2 Trial Version || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| SM Choukyoushi Hitomi Vol. 2 || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x03801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| SM Choukyoushi Hitomi Vol. 2 Remix || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| SM Choukyoushi Hitomi Vol. 3 Trial Version || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x018058&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| SM Choukyoushi Hitomi Vol. 3 (Alt 1) || &amp;lt;tt&amp;gt;0x0DF0&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D30&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x018076&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Wheel of Fortune - Deluxe Edition &#039;&#039;(unused)&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01D842&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Of the games listed here, two of them are very minor edits...&lt;br /&gt;
* Wheel of Fortune - Deluxe Edition&#039;s build is unused and is missing an opcode near the *Ver S1.20* string. In addition, that section is actually unused, because instead new code at $0700 is used to substitute for this one... which happens to be an exact match to the original IPL Boot ROM.&lt;br /&gt;
* SM Choukyoushi Hitomi Vol. 3 (Alt 1)&#039;s program starts with a JMP opcode, and contains a NOP between the first and second opcodes of the actual program.&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
NOTE: This is not representative of every single variant. Instead, it represents the collection of commands from the source code included in the IS-Sound unit, which in turn may be carried over to most variants.&lt;br /&gt;
&lt;br /&gt;
The only register that is used for communication in the source build is $2140 (SNES side)/$F4 (SPC side), except for the load command. Other registers are not even read from, though the code itself sets up the framework to do so.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
&amp;lt;pre&amp;gt;xx ?? ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the currently piece of music playing. It takes a couple of tempo ticks for this to echo back after initializing the music.&lt;br /&gt;
&lt;br /&gt;
===Command IDs===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Stop Music || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;xx ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$F0 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$F1 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$FF ?? xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Stop Music (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Initializes an invalid phrase pointer, then stops the previous piece of music. This is not compatible with the resume command, as it is irrevocable, unlike the other one.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music by the ID specified in the command.&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Jumps to a modified copy of the IPL Boot ROM (except for Wheel of Fortune - Deluxe Edition, where there is an opcode missing, the jump location is different, and it contains an exact copy of the IPL Boot ROM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol is nearly identical to IPL Boot ROM, with a couple of differences)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format is most commonly defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this....&lt;br /&gt;
&amp;lt;pre&amp;gt;%xyyyyyyy zz aa bb cc dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; is a noise clock switch.&lt;br /&gt;
** If set, noise is used and &amp;lt;tt&amp;gt;%??yyyyy&amp;lt;/tt&amp;gt; represents the noise clock rate.&lt;br /&gt;
** If cleared, &amp;lt;tt&amp;gt;%0yyyyyyy&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Phrase Format==&lt;br /&gt;
Song entries, stored as [[little endian]] pointers, point to a list of phrases for the song to play.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt; || End of Song ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%0xxxxxxx $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$7F $00&amp;lt;/tt&amp;gt;|| Jump x Times || &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80 $00&amp;lt;/tt&amp;gt; || Fast Forward On ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$81 $00&amp;lt;/tt&amp;gt; || Fast Forward Off ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%1??????? $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$82-$FF $00&amp;lt;/tt&amp;gt; || Always Jump || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || Play Pattern || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Play Pattern===&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a set of eight pointers to track data, one for each channel.&lt;br /&gt;
&lt;br /&gt;
====Pattern Entry Format====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. If the pointer is zero, there is no track data.&lt;br /&gt;
&lt;br /&gt;
===End of Song (Command &amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$00 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Terminates the song.&lt;br /&gt;
&lt;br /&gt;
===Jump x Times (Command &amp;lt;tt&amp;gt;$00 $01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx $00 yy yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; is the number of times to jump.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$00 $80&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$80 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fast Forward causes the song to stop playing and the player rapidly progresses throughout the song. Thus, this can effectively act as a skip.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$00 $81&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$81 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Disables Fast Forward and continues playing the song normally.&lt;br /&gt;
&lt;br /&gt;
===Always Jump (Command &amp;lt;tt&amp;gt;$00 $82-$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%1??????? $00 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only executes if the fast forward commands are not triggered.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
NOTE: This is not representative of every single variant. Instead, it represents the collection of VCMDs from the source code included in the IS-Sound unit, which in turn is carried over to most variants.&lt;br /&gt;
&lt;br /&gt;
{{N-SPC VCMD Set Table}}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Crashes the sound driver due to being outside of the array of pointers, and thus jumping to an invalid pointer.&lt;br /&gt;
&lt;br /&gt;
===NOP (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Reads a single byte, then does absolutely nothing with the command.&lt;br /&gt;
&lt;br /&gt;
===Phrase Termination/End of Subroutine (VCMD &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
This VCMD&#039;s operation depends on whether or not it is inside a subroutine or not.&lt;br /&gt;
If it is inside a subroutine, it exits the subroutine and song execution continues.&lt;br /&gt;
Otherwise, the phrase is terminated. This affects &#039;&#039;all&#039;&#039; channels in the music: any other channels still playing are interrupted.&lt;br /&gt;
&lt;br /&gt;
===Note Duration (VCMD &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx (%0yyyzzzz)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; represents your note length (as seven bits) in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyy&amp;lt;/tt&amp;gt;, if the highest bit of the byte is not set, defines the quantization. It is an index value to a table of values that indicate, in 256ths, how far along the note to play before keying it off. This table can vary on a per-game basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%zzzz&amp;lt;/tt&amp;gt;, which is only defined if the highest bit of the byte is not set, defines the velocity. It is an index to a table of values that indicate the volume in a decibel-like number (due to the final volume calculation being multiplied by itself at the end). This table can vary on a per-game basis.&lt;br /&gt;
&lt;br /&gt;
Notes and/or special VCMDs, by default, are forced after the parameter byte is read. Attempting to use &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt; again results in an invalid note.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMD &amp;lt;tt&amp;gt;$80-$C7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Tie (VCMD &amp;lt;tt&amp;gt;$C8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Continues playing the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Rest (VCMD &amp;lt;tt&amp;gt;$C9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Percussion (VCMD &amp;lt;tt&amp;gt;$CA-$DF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a percussion note.&lt;br /&gt;
&lt;br /&gt;
By default, percussion uses the same instrument set as the song, and all percussion is keyed on with a note of &amp;lt;tt&amp;gt;$A4&amp;lt;/tt&amp;gt;.&lt;br /&gt;
The starting ID to use for all channels can be redefined by VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Panning (VCMD &amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E1 %xyzzzzz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; defines a phase inversion switch for the left channel.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%y&amp;lt;/tt&amp;gt; defines a phase inversion switch for the right channel.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%zzzzz&amp;lt;/tt&amp;gt; is five bits for the panning. This refers to an array of values to multiply the volume by after calculating the voice volume via various other parameters set by the VCMDs. Under normal circumstances, center is defined as &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; and the maximum value is &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Panning Fade (VCMD &amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E2 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target pan value. Phase inversion is &#039;&#039;not&#039;&#039; taken into account here, thus only the low five bits should be used here.&lt;br /&gt;
&lt;br /&gt;
===Vibrato On (VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E3 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay the vibrato for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the rate of the vibrato: specifically, how much to change the pitch on a per-tempo tick basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the depth of the vibrato: that is, the maximum pitch offset to use. &amp;lt;tt&amp;gt;$00-$F0&amp;lt;/tt&amp;gt; are normal, but &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; and up act more like said value ANDed by &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; and multiplied by &amp;lt;tt&amp;gt;$0100&amp;lt;/tt&amp;gt;, meaning the highest values have drastic differences compared to the lower ones.&lt;br /&gt;
&lt;br /&gt;
===Vibrato Off (VCMD &amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables vibrato set by VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Song Volume (VCMD &amp;lt;tt&amp;gt;$E5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E5 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the song volume value. This sets the volume for all of the channels in the song. The value used is a decibel-like value due to the final volume being multiplied by itself to get the final result.&lt;br /&gt;
&lt;br /&gt;
===Song Volume Fade (VCMD &amp;lt;tt&amp;gt;$E6&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E6 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target song volume.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$E7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E7 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as one timer 0 tick multiplied by &amp;lt;math&amp;gt;\frac{256}{x}&amp;lt;/math&amp;gt;. Zero freezes the song.&lt;br /&gt;
&lt;br /&gt;
===Tempo Fade (VCMD &amp;lt;tt&amp;gt;$E8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E8 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target tempo.&lt;br /&gt;
&lt;br /&gt;
===Global Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$E9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E9 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed value defining the number of semitones to transpose subsequent notes. Note that this affects all channels, not just one channel.&lt;br /&gt;
&lt;br /&gt;
===Single Channel Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$EA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed value defining the number of semitones to transpose subsequent notes.&lt;br /&gt;
&lt;br /&gt;
===Tremolo On (VCMD &amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EB xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay the tremolo for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the rate of the tremolo: specifically, how much to change the volume on a per-tempo tick basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the depth of the tremolo: that is, the maximum volume offset to use.&lt;br /&gt;
&lt;br /&gt;
===Tremolo Off (VCMD &amp;lt;tt&amp;gt;$EC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables vibrato set by VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the volume value. The value used is a decibel-like value due to the final volume being multiplied by itself to get the final result.&lt;br /&gt;
&lt;br /&gt;
===Volume Fade (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target volume.&lt;br /&gt;
&lt;br /&gt;
===Subroutine (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer containing the section of music to play.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of times to loop the sub-routine.&lt;br /&gt;
&lt;br /&gt;
===Vibrato Fade In (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to fade the vibrato for.&lt;br /&gt;
The moment this VCMD is executed, the depth is faded in from zero.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
This VCMD is applied to all subsequent notes until turned off or overwritten.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay before applying the pitch envelope.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a signed offset in semitones to slide the note to.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope From (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
This VCMD is applied to all subsequent notes until turned off or overwritten.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay before applying the pitch envelope.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a signed offset in semitones to slide the note from: that is, unlike Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;), this is a starting note offset, rather than an end of pitch envelope note offset.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope Off (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables a pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the amount to shift the pitch up. This is in 256ths of a semitone, albeit done via measuring the distance between note and multiplying it by this value.&lt;br /&gt;
&lt;br /&gt;
===Echo Enable Bits and Volume (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 %xxxxxxxx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxxx&amp;lt;/tt&amp;gt; defines the channels to turn on for the echo (one per bit), which translates to a direct write to the EON DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines a value for EVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines a value for EVOLR DSP register.&lt;br /&gt;
&lt;br /&gt;
===Echo Off (VCMD &amp;lt;tt&amp;gt;$F6&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
This disables echo for &#039;&#039;all&#039;&#039; channels, as well as zeroing out the echo volume and disabling echo writes.&lt;br /&gt;
&lt;br /&gt;
===Echo Parameter Setup (VCMD &amp;lt;tt&amp;gt;$F7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F7 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines a value for the EDL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines a value for the EFB DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines an ID to an array of FIR coefficient values.&lt;br /&gt;
&lt;br /&gt;
===Echo Volume Fade (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F8 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the target value for EVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines the target value for EVOLR DSP register.&lt;br /&gt;
&lt;br /&gt;
===Pitch Slide To Note (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F9 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to delay the slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the target note.&lt;br /&gt;
&lt;br /&gt;
===Percussion Base Instrument ID Redefine (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting instrument ID. Note that this affects all channels.&lt;br /&gt;
&lt;br /&gt;
===Channel Mute (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Causes the channel to not key on subsequent notes.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (VCMD &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Fast Forward causes the song to stop playing and the player rapidly progresses throughout the song. Thus, this can effectively act as a skip.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables Fast Forward and continues playing the song normally.&lt;br /&gt;
&lt;br /&gt;
==Variants==&lt;br /&gt;
===Shijou Saikyou no Quiz Ou Ketteisen Super===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Shijou Saikyou no Quiz Ou Ketteisen Super || &amp;lt;tt&amp;gt;0x0DF7&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D37&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x038062&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x04805C&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x058062&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
This is the closest match to a standard source N-SPC/Kankichi build used in a licensed game. This is because the only modifications made to it are to echo what was sent to any register to $2141/$F5 (although in practice only $2140/$F4 is read from, thus de facto giving it the same output, otherwise it would be cycling between the last register read code-wise as output) and zero out both $2140/$F4 and $2141/$F5 when the song is done playing when a zero pointer is read from a phase.&lt;br /&gt;
&lt;br /&gt;
====Output to the SNES====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the currently piece of music playing. It takes a couple of tempo ticks for this to echo back after initializing the music.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a de-facto mirror of &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; output-wise. The feedback is a little faster, though, since the output is immediately upon $2140/$F4 being read, rather than when the music is initialized.&lt;br /&gt;
&lt;br /&gt;
===Controller Test/World Class Service Super Nintendo Tester===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Controller Test || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x009319&amp;lt;/tt&amp;gt; (Controller Test Cassette)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x00BFFF&amp;lt;/tt&amp;gt; (SNES Burn-In Test Cartridge)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x00D8D2&amp;lt;/tt&amp;gt; (World Class Service Super Nintendo Tester &#039;&#039;(not used)&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| World Class Service Super Nintendo Tester &#039;&#039;(only build used across all tests)&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0B8068&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
These two sound driver builds (the one for the controller test being found in three different known testing cartridges, with one of them not used) merely have code optimizations in their sound code, thus making them completely identical execution-wise to the source build variant. In addition, the build used for World Class Service Super Nintendo Tester adds a BMI opcode in a readahead routine, but is otherwise identical.&lt;br /&gt;
&lt;br /&gt;
===Subpages===&lt;br /&gt;
{{Subpages}}&lt;br /&gt;
&lt;br /&gt;
Not created yet...&lt;br /&gt;
* [[N-SPC Engine/64WD Creation|64WD Creation]]&lt;br /&gt;
* [[N-SPC Engine/Advance Communication|Advance Communication]]&lt;br /&gt;
* [[N-SPC Engine/Aisystem Tokyo|Aisystem Tokyo]]&lt;br /&gt;
* [[N-SPC Engine/Argonaut|Argonaut]]&lt;br /&gt;
* [[N-SPC Engine/Axes Art Amuse|Axes Art Amuse]]&lt;br /&gt;
* [[N-SPC Engine/Bit Managers|Bit Managers]]&lt;br /&gt;
* [[N-SPC Engine/Capcom|Capcom]]&lt;br /&gt;
* [[N-SPC Engine/Chatnoir|Chatnoir]]&lt;br /&gt;
* [[N-SPC Engine/Chip Level Designs|Chip Level Designs]]&lt;br /&gt;
* [[N-SPC Engine/CP.BRAiN|CP.BRAiN]]&lt;br /&gt;
* [[N-SPC Engine/Cream|Cream]]&lt;br /&gt;
* [[N-SPC Engine/Crosstalk|Crosstalk]]&lt;br /&gt;
* [[N-SPC Engine/Cube|Cube]]&lt;br /&gt;
* [[N-SPC Engine/CUE|CUE]]&lt;br /&gt;
* [[N-SPC Engine/Culture Brain|Culture Brain]]&lt;br /&gt;
* [[N-SPC Engine/Daft|Daft]]&lt;br /&gt;
* [[N-SPC Engine/Data East|Data East]]&lt;br /&gt;
* [[N-SPC Engine/EJ Corporation|EJ Corporation]]&lt;br /&gt;
* [[N-SPC Engine/Electronic Arts|Electronic Arts]]&lt;br /&gt;
* [[N-SPC Engine/Falcom|Falcom]]&lt;br /&gt;
* [[N-SPC Engine/Funcom|Funcom]]&lt;br /&gt;
* [[N-SPC Engine/Gremlin|Gremlin]]&lt;br /&gt;
* [[N-SPC Engine/HAL|HAL]]&lt;br /&gt;
* [[N-SPC Engine/Hanari Exp|Hanari Exp]]&lt;br /&gt;
* [[N-SPC Engine/Hect|Hect]]&lt;br /&gt;
* [[N-SPC Engine/Hikoshi Hashimoto|Hikoshi Hashimoto]]&lt;br /&gt;
* [[N-SPC Engine/Home Data|Home Data]]&lt;br /&gt;
* [[N-SPC Engine/Human (earlier)|Human (earlier)]]&lt;br /&gt;
* [[N-SPC Engine/Human|Human]]&lt;br /&gt;
* [[N-SPC Engine/Imagesoft|Imagesoft]]&lt;br /&gt;
* [[N-SPC Engine/Infogrames|Infogrames]]&lt;br /&gt;
* [[N-SPC Engine/Intelligent Systems|Intelligent Systems]]&lt;br /&gt;
* [[N-SPC Engine/Japan Art Media|Japan Art Media]]&lt;br /&gt;
* [[N-SPC Engine/Jorudan|Jorudan]]&lt;br /&gt;
* [[N-SPC Engine/Kazuo Sawa|Kazuo Sawa]]&lt;br /&gt;
* [[N-SPC Engine/Kennosuke Suemura|Kennosuke Suemura]]&lt;br /&gt;
* [[N-SPC Engine/Khaos|Khaos]]&lt;br /&gt;
* [[N-SPC Engine/Koei|Koei]]&lt;br /&gt;
* [[N-SPC Engine/Konami|Konami]]&lt;br /&gt;
* [[N-SPC Engine/LaserSoft|LaserSoft]]&lt;br /&gt;
* [[N-SPC Engine/Make Software|Make Software]]&lt;br /&gt;
* [[N-SPC Engine/Metro|Metro]]&lt;br /&gt;
* [[N-SPC Engine/Mitsuhito Tanaka|Mitsuhito Tanaka]]&lt;br /&gt;
* [[N-SPC Engine/Monolith|Monolith]]&lt;br /&gt;
* [[N-SPC Engine/MSQ|MSQ]]&lt;br /&gt;
* [[N-SPC Engine/Namco|Namco]]&lt;br /&gt;
* [[N-SPC Engine/Naohisa Morota|Naohisa Morota]]&lt;br /&gt;
* [[N-SPC Engine/Natsume|Natsume]]&lt;br /&gt;
* [[N-SPC Engine/Nichibutsu or Make Software|Nichibutsu/Make Software]] (NOTE: Refers to three of the Super Nichibutsu Mahjong games)&lt;br /&gt;
* [[N-SPC Engine/Nova|Nova]]&lt;br /&gt;
* [[N-SPC Engine/Ocean|Ocean]]&lt;br /&gt;
* [[N-SPC Engine/Pure Sound|Pure Sound]]&lt;br /&gt;
* [[N-SPC Engine/Quest|Quest]]&lt;br /&gt;
* [[N-SPC Engine/Quintet|Quintet]]&lt;br /&gt;
* [[N-SPC Engine/Robert C. Ashworth|Robert C. Ashworth]]&lt;br /&gt;
* [[N-SPC Engine/Sakata SAS|Sakata SAS]]&lt;br /&gt;
* [[N-SPC Engine/Saurus|Saurus]]&lt;br /&gt;
* [[N-SPC Engine/Sunsoft|Sunsoft]]&lt;br /&gt;
* [[N-SPC Engine/Syscom|Syscom]]&lt;br /&gt;
* [[N-SPC Engine/System Sacom|System Sacom]]&lt;br /&gt;
* [[N-SPC Engine/Systemsoft|Systemsoft]]&lt;br /&gt;
* [[N-SPC Engine/T&#039;s Music|T&#039;s Music]]&lt;br /&gt;
* [[N-SPC Engine/TamTam|TamTam]]&lt;br /&gt;
* [[N-SPC Engine/Team X-Fade|Team X-Fade]]&lt;br /&gt;
* [[N-SPC Engine/Technos Japan|Technos Japan]]&lt;br /&gt;
* [[N-SPC Engine/Technosoft|Technosoft]]&lt;br /&gt;
* [[N-SPC Engine/Tecmo|Tecmo]]&lt;br /&gt;
* [[N-SPC Engine/Tose|Tose]]&lt;br /&gt;
* [[N-SPC Engine/Tsukasa Masuko|Tsukasa Masuko]]&lt;br /&gt;
* [[N-SPC Engine/Virgin|Virgin]]&lt;br /&gt;
* [[N-SPC Engine/Wave|Wave]]&lt;br /&gt;
* [[N-SPC Engine/Yoshikazu Yao|Yoshikazu Yao]]&lt;br /&gt;
* [[N-SPC Engine/Yoshiyuki Ishii|Yoshiyuki Ishii]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO: There are a lot of variants... these will be split into sub-pages depending on the modifications made&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
* [http://vgmpf.com/Wiki/index.php?title=Kankichi-kun Video Game Music Preservation Foundation - Kankichi-kun]&lt;br /&gt;
* [https://www.retroreversing.com/super-famicom-snes-development-kit/#intelligent-systems-shvc-development-system Retro Reversing - SNES (Super Famicom) Development Kit Hardware - Intelligent Systems SHVC Development System]&lt;br /&gt;
* [https://wiki.superfamicom.org/nintendo-music-format-(n-spc) Super Famicom Wiki - N-SPC]&lt;br /&gt;
* [http://gdri.smspower.org/wiki/index.php/Super_Famicom/Super_NES_Sound_Driver_List GDRI - Super Famicom/Super NES Sound Driver List]&lt;br /&gt;
* [https://github.com/vgmtrans/vgmtrans/issues/173 Github - N-SPC VCMD $FB-$FE identifications]&lt;br /&gt;
* [https://archive.org/details/GameBoyProgManVer1.1/page/n187/mode/2up Game Boy Development Manual - Super Game Boy Sound] (see pages 187-213)&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine&amp;diff=2210</id>
		<title>N-SPC Engine</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine&amp;diff=2210"/>
		<updated>2022-06-10T01:14:08Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Change Michelle Simon/Tommy Tallarico to Virgin, citing a sound driver credit for Matt From in Super Slap Shot&amp;#039;s instruction manual.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nintendo SPC Sound Engine&#039;&#039;&#039;, abbreviated N-SPC and officially known as Kankichi-kun [http://vgmpf.com/Wiki/index.php?title=Kankichi-kun], is the most common sound engine used in all of the SNES/SFC games. Only the music portion was initially provided in the source code included in the IS-Sound unit along with some templating for a protocol for music and sound effects [https://www.retroreversing.com/super-famicom-snes-development-kit/#intelligent-systems-shvc-development-system]: usually it was modified by developers on an individual basis, resulting in many different variants, some of them more heavily modifying the sound driver than others. Usually what was added on was sound effect support, but sometimes the music VCMDs were modified as well.&lt;br /&gt;
&lt;br /&gt;
The following games are purely based off of the source code provided with the IS-Sound unit, and are either unmodified or barely modified, if at all:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Hong Kong &#039;97 || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0F800A&amp;lt;/tt&amp;gt; (both versions)&lt;br /&gt;
|-&lt;br /&gt;
| SM Choukyoushi Hitomi - Bangai Hen || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| SM Choukyoushi Hitomi Vol. 2 Trial Version || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| SM Choukyoushi Hitomi Vol. 2 || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x03801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| SM Choukyoushi Hitomi Vol. 2 Remix || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01801C&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| SM Choukyoushi Hitomi Vol. 3 Trial Version || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x018058&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| SM Choukyoushi Hitomi Vol. 3 (Alt 1) || &amp;lt;tt&amp;gt;0x0DF0&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D30&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x018076&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Wheel of Fortune - Deluxe Edition &#039;&#039;(unused)&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x01D842&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
Of the games listed here, two of them are very minor edits...&lt;br /&gt;
* Wheel of Fortune - Deluxe Edition&#039;s build is unused and is missing an opcode near the *Ver S1.20* string. In addition, that section is actually unused, because instead new code at $0700 is used to substitute for this one... which happens to be an exact match to the original IPL Boot ROM.&lt;br /&gt;
* SM Choukyoushi Hitomi Vol. 3 (Alt 1)&#039;s program starts with a JMP opcode, and contains a NOP between the first and second opcodes of the actual program.&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
NOTE: This is not representative of every single variant. Instead, it represents the collection of commands from the source code included in the IS-Sound unit, which in turn may be carried over to most variants.&lt;br /&gt;
&lt;br /&gt;
The only register that is used for communication in the source build is $2140 (SNES side)/$F4 (SPC side), except for the load command. Other registers are not even read from, though the code itself sets up the framework to do so.&lt;br /&gt;
&lt;br /&gt;
===Output to the SNES===&lt;br /&gt;
&amp;lt;pre&amp;gt;xx ?? ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the currently piece of music playing. It takes a couple of tempo ticks for this to echo back after initializing the music.&lt;br /&gt;
&lt;br /&gt;
===Command IDs===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Stop Music || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt; || Play Music || &amp;lt;tt&amp;gt;xx ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Pause Music || &amp;lt;tt&amp;gt;$F0 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Continue Music || &amp;lt;tt&amp;gt;$F1 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$FF ?? xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Stop Music (Command &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Initializes an invalid phrase pointer, then stops the previous piece of music. This is not compatible with the resume command, as it is irrevocable, unlike the other one.&lt;br /&gt;
&lt;br /&gt;
===Play Music (Command &amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops a previous piece of music, then plays a piece of music by the ID specified in the command.&lt;br /&gt;
&lt;br /&gt;
===Pause Music (Command &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Stops music, allowing it to be resumed later.&lt;br /&gt;
&lt;br /&gt;
===Continue Music (Command &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Resumes a paused song.&lt;br /&gt;
&lt;br /&gt;
===Load New Data (Command &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Jumps to a modified copy of the IPL Boot ROM (except for Wheel of Fortune - Deluxe Edition, where there is an opcode missing, the jump location is different, and it contains an exact copy of the IPL Boot ROM).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO Loading New Data (the loading protocol is nearly identical to IPL Boot ROM, with a couple of differences)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Instrument Format==&lt;br /&gt;
The instrument format is most commonly defined as direct writes to DSP registers for the first four bytes, followed by two pitch-related bytes. They are defined like this....&lt;br /&gt;
&amp;lt;pre&amp;gt;%xyyyyyyy zz aa bb cc dd&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; is a noise clock switch.&lt;br /&gt;
** If set, noise is used and &amp;lt;tt&amp;gt;%??yyyyy&amp;lt;/tt&amp;gt; represents the noise clock rate.&lt;br /&gt;
** If cleared, &amp;lt;tt&amp;gt;%0yyyyyyy&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a fractional pitch base multiplier, defined in 256ths.&lt;br /&gt;
&lt;br /&gt;
==Phrase Format==&lt;br /&gt;
Song entries, stored as [[little endian]] pointers, point to a list of phrases for the song to play.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt; || End of Song ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%0xxxxxxx $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$01-$7F $00&amp;lt;/tt&amp;gt;|| Jump x Times || &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80 $00&amp;lt;/tt&amp;gt; || Fast Forward On ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$81 $00&amp;lt;/tt&amp;gt; || Fast Forward Off ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;%1??????? $00&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;$82-$FF $00&amp;lt;/tt&amp;gt; || Always Jump || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; || Play Pattern || &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Play Pattern===&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a set of eight pointers to track data, one for each channel.&lt;br /&gt;
&lt;br /&gt;
====Pattern Entry Format====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx xx yy yy zz zz aa aa bb bb cc cc dd dd ee ee&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 1. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 2. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 3. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa aa&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 4. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb bb&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 5. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc cc&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 6. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd dd&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 7. If the pointer is zero, there is no track data.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee ee&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a pattern order list for channel 8. If the pointer is zero, there is no track data.&lt;br /&gt;
&lt;br /&gt;
===End of Song (Command &amp;lt;tt&amp;gt;$00 $00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$00 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Terminates the song.&lt;br /&gt;
&lt;br /&gt;
===Jump x Times (Command &amp;lt;tt&amp;gt;$00 $01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx $00 yy yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; is the number of times to jump.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (Command &amp;lt;tt&amp;gt;$00 $80&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$80 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Fast Forward causes the song to stop playing and the player rapidly progresses throughout the song. Thus, this can effectively act as a skip.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (Command &amp;lt;tt&amp;gt;$00 $81&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$81 $00&amp;lt;/pre&amp;gt;&lt;br /&gt;
Disables Fast Forward and continues playing the song normally.&lt;br /&gt;
&lt;br /&gt;
===Always Jump (Command &amp;lt;tt&amp;gt;$00 $82-$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%1??????? $00 xx xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only executes if the fast forward commands are not triggered.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer to a phrase to jump to.&lt;br /&gt;
&lt;br /&gt;
==Voice Command Format==&lt;br /&gt;
NOTE: This is not representative of every single variant. Instead, it represents the collection of VCMDs from the source code included in the IS-Sound unit, which in turn is carried over to most variants.&lt;br /&gt;
&lt;br /&gt;
{{N-SPC VCMD Set Table}}&lt;br /&gt;
&lt;br /&gt;
===Invalid (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Crashes the sound driver due to being outside of the array of pointers, and thus jumping to an invalid pointer.&lt;br /&gt;
&lt;br /&gt;
===NOP (VCMD &amp;lt;tt&amp;gt;$FB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FB ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
Reads a single byte, then does absolutely nothing with the command.&lt;br /&gt;
&lt;br /&gt;
===Phrase Termination/End of Subroutine (VCMD &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
This VCMD&#039;s operation depends on whether or not it is inside a subroutine or not.&lt;br /&gt;
If it is inside a subroutine, it exits the subroutine and song execution continues.&lt;br /&gt;
Otherwise, the phrase is terminated. This affects &#039;&#039;all&#039;&#039; channels in the music: any other channels still playing are interrupted.&lt;br /&gt;
&lt;br /&gt;
===Note Duration (VCMD &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx (%0yyyzzzz)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; represents your note length (as seven bits) in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yyy&amp;lt;/tt&amp;gt;, if the highest bit of the byte is not set, defines the quantization. It is an index value to a table of values that indicate, in 256ths, how far along the note to play before keying it off. This table can vary on a per-game basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%zzzz&amp;lt;/tt&amp;gt;, which is only defined if the highest bit of the byte is not set, defines the velocity. It is an index to a table of values that indicate the volume in a decibel-like number (due to the final volume calculation being multiplied by itself at the end). This table can vary on a per-game basis.&lt;br /&gt;
&lt;br /&gt;
Notes and/or special VCMDs, by default, are forced after the parameter byte is read. Attempting to use &amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt; again results in an invalid note.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMD &amp;lt;tt&amp;gt;$80-$C7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Tie (VCMD &amp;lt;tt&amp;gt;$C8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Continues playing the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Rest (VCMD &amp;lt;tt&amp;gt;$C9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Keys off the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Percussion (VCMD &amp;lt;tt&amp;gt;$CA-$DF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a percussion note.&lt;br /&gt;
&lt;br /&gt;
By default, percussion uses the same instrument set as the song, and all percussion is keyed on with a note of &amp;lt;tt&amp;gt;$A4&amp;lt;/tt&amp;gt;.&lt;br /&gt;
The starting ID to use for all channels can be redefined by VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Panning (VCMD &amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E1 %xyzzzzz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%x&amp;lt;/tt&amp;gt; defines a phase inversion switch for the left channel.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%y&amp;lt;/tt&amp;gt; defines a phase inversion switch for the right channel.&lt;br /&gt;
* &amp;lt;tt&amp;gt;%zzzzz&amp;lt;/tt&amp;gt; is five bits for the panning. This refers to an array of values to multiply the volume by after calculating the voice volume via various other parameters set by the VCMDs. Under normal circumstances, center is defined as &amp;lt;tt&amp;gt;$0A&amp;lt;/tt&amp;gt; and the maximum value is &amp;lt;tt&amp;gt;$14&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Panning Fade (VCMD &amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E2 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target pan value. Phase inversion is &#039;&#039;not&#039;&#039; taken into account here, thus only the low five bits should be used here.&lt;br /&gt;
&lt;br /&gt;
===Vibrato On (VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E3 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay the vibrato for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the rate of the vibrato: specifically, how much to change the pitch on a per-tempo tick basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the depth of the vibrato: that is, the maximum pitch offset to use. &amp;lt;tt&amp;gt;$00-$F0&amp;lt;/tt&amp;gt; are normal, but &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; and up act more like said value ANDed by &amp;lt;tt&amp;gt;$0F&amp;lt;/tt&amp;gt; and multiplied by &amp;lt;tt&amp;gt;$0100&amp;lt;/tt&amp;gt;, meaning the highest values have drastic differences compared to the lower ones.&lt;br /&gt;
&lt;br /&gt;
===Vibrato Off (VCMD &amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables vibrato set by VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Song Volume (VCMD &amp;lt;tt&amp;gt;$E5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E5 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the song volume value. This sets the volume for all of the channels in the song. The value used is a decibel-like value due to the final volume being multiplied by itself to get the final result.&lt;br /&gt;
&lt;br /&gt;
===Song Volume Fade (VCMD &amp;lt;tt&amp;gt;$E6&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E6 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target song volume.&lt;br /&gt;
&lt;br /&gt;
===Tempo (VCMD &amp;lt;tt&amp;gt;$E7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E7 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines one tempo tick as one timer 0 tick multiplied by &amp;lt;math&amp;gt;\frac{256}{x}&amp;lt;/math&amp;gt;. Zero freezes the song.&lt;br /&gt;
&lt;br /&gt;
===Tempo Fade (VCMD &amp;lt;tt&amp;gt;$E8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E8 xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target tempo.&lt;br /&gt;
&lt;br /&gt;
===Global Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$E9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$E9 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed value defining the number of semitones to transpose subsequent notes. Note that this affects all channels, not just one channel.&lt;br /&gt;
&lt;br /&gt;
===Single Channel Absolute Transposition (VCMD &amp;lt;tt&amp;gt;$EA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a signed value defining the number of semitones to transpose subsequent notes.&lt;br /&gt;
&lt;br /&gt;
===Tremolo On (VCMD &amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EB xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay the tremolo for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the rate of the tremolo: specifically, how much to change the volume on a per-tempo tick basis.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the depth of the tremolo: that is, the maximum volume offset to use.&lt;br /&gt;
&lt;br /&gt;
===Tremolo Off (VCMD &amp;lt;tt&amp;gt;$EC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables vibrato set by VCMD &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Volume (VCMD &amp;lt;tt&amp;gt;$ED&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$ED xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the volume value. The value used is a decibel-like value due to the final volume being multiplied by itself to get the final result.&lt;br /&gt;
&lt;br /&gt;
===Volume Fade (VCMD &amp;lt;tt&amp;gt;$EE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EE xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the target volume.&lt;br /&gt;
&lt;br /&gt;
===Subroutine (VCMD &amp;lt;tt&amp;gt;$EF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EF xx xx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx xx&amp;lt;/tt&amp;gt; is a [[little endian]] pointer containing the section of music to play.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the number of times to loop the sub-routine.&lt;br /&gt;
&lt;br /&gt;
===Vibrato Fade In (VCMD &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F0 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to fade the vibrato for.&lt;br /&gt;
The moment this VCMD is executed, the depth is faded in from zero.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F1 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
This VCMD is applied to all subsequent notes until turned off or overwritten.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay before applying the pitch envelope.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a signed offset in semitones to slide the note to.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope From (VCMD &amp;lt;tt&amp;gt;$F2&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F2 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
This VCMD is applied to all subsequent notes until turned off or overwritten.&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of tempo ticks to delay before applying the pitch envelope.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a signed offset in semitones to slide the note from: that is, unlike Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt;), this is a starting note offset, rather than an end of pitch envelope note offset.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope Off (VCMD &amp;lt;tt&amp;gt;$F3&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables a pitch envelope.&lt;br /&gt;
&lt;br /&gt;
===Fine Tune (VCMD &amp;lt;tt&amp;gt;$F4&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F4 xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the amount to shift the pitch up. This is in 256ths of a semitone, albeit done via measuring the distance between note and multiplying it by this value.&lt;br /&gt;
&lt;br /&gt;
===Echo Enable Bits and Volume (VCMD &amp;lt;tt&amp;gt;$F5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F5 %xxxxxxxx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxxx&amp;lt;/tt&amp;gt; defines the channels to turn on for the echo (one per bit), which translates to a direct write to the EON DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines a value for EVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines a value for EVOLR DSP register.&lt;br /&gt;
&lt;br /&gt;
===Echo Off (VCMD &amp;lt;tt&amp;gt;$F6&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
This disables echo for &#039;&#039;all&#039;&#039; channels, as well as zeroing out the echo volume and disabling echo writes.&lt;br /&gt;
&lt;br /&gt;
===Echo Parameter Setup (VCMD &amp;lt;tt&amp;gt;$F7&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F7 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines a value for the EDL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines a value for the EFB DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines an ID to an array of FIR coefficient values.&lt;br /&gt;
&lt;br /&gt;
===Echo Volume Fade (VCMD &amp;lt;tt&amp;gt;$F8&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F8 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to fade for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the target value for EVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines the target value for EVOLR DSP register.&lt;br /&gt;
&lt;br /&gt;
===Pitch Slide To Note (VCMD &amp;lt;tt&amp;gt;$F9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$F9 xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; defines the number of tempo ticks to delay the slide for.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the length of the pitch slide in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the target note.&lt;br /&gt;
&lt;br /&gt;
===Percussion Base Instrument ID Redefine (VCMD &amp;lt;tt&amp;gt;$FA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$FA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting instrument ID. Note that this affects all channels.&lt;br /&gt;
&lt;br /&gt;
===Channel Mute (VCMD &amp;lt;tt&amp;gt;$FC&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Causes the channel to not key on subsequent notes.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward On (VCMD &amp;lt;tt&amp;gt;$FD&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Fast Forward causes the song to stop playing and the player rapidly progresses throughout the song. Thus, this can effectively act as a skip.&lt;br /&gt;
&lt;br /&gt;
===Fast Forward Off (VCMD &amp;lt;tt&amp;gt;$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Disables Fast Forward and continues playing the song normally.&lt;br /&gt;
&lt;br /&gt;
==Variants==&lt;br /&gt;
===Shijou Saikyou no Quiz Ou Ketteisen Super===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Shijou Saikyou no Quiz Ou Ketteisen Super || &amp;lt;tt&amp;gt;0x0DF7&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D37&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x038062&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x04805C&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;0x058062&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
This is the closest match to a standard source N-SPC/Kankichi build used in a licensed game. This is because the only modifications made to it are to echo what was sent to any register to $2141/$F5 (although in practice only $2140/$F4 is read from, thus de facto giving it the same output, otherwise it would be cycling between the last register read code-wise as output) and zero out both $2140/$F4 and $2141/$F5 when the song is done playing when a zero pointer is read from a phase.&lt;br /&gt;
&lt;br /&gt;
====Output to the SNES====&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the currently piece of music playing. It takes a couple of tempo ticks for this to echo back after initializing the music.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a de-facto mirror of &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; output-wise. The feedback is a little faster, though, since the output is immediately upon $2140/$F4 being read, rather than when the music is initialized.&lt;br /&gt;
&lt;br /&gt;
===Controller Test/World Class Service Super Nintendo Tester===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Controller Test || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x009319&amp;lt;/tt&amp;gt; (Controller Test Cassette)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x00BFFF&amp;lt;/tt&amp;gt; (SNES Burn-In Test Cartridge)&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;0x00D8D2&amp;lt;/tt&amp;gt; (World Class Service Super Nintendo Tester &#039;&#039;(not used)&#039;&#039;)&lt;br /&gt;
|-&lt;br /&gt;
| World Class Service Super Nintendo Tester &#039;&#039;(only build used across all tests)&#039;&#039; || &amp;lt;tt&amp;gt;0x0DEC&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x0D2C&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0B8068&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Source Variant Build Sorting|here]] (along with all of the other source variant builds that don&#039;t have a significant enough difference execution-wise).&lt;br /&gt;
&lt;br /&gt;
These two sound driver builds (the one for the controller test being found in three different known testing cartridges, with one of them not used) merely have code optimizations in their sound code, thus making them completely identical execution-wise to the source build variant. In addition, the build used for World Class Service Super Nintendo Tester adds a BMI opcode in a readahead routine, but is otherwise identical.&lt;br /&gt;
&lt;br /&gt;
===Subpages===&lt;br /&gt;
{{Subpages}}&lt;br /&gt;
&lt;br /&gt;
Not created yet...&lt;br /&gt;
* [[N-SPC Engine/64WD Creation|64WD Creation]]&lt;br /&gt;
* [[N-SPC Engine/Advance Communication|Advance Communication]]&lt;br /&gt;
* [[N-SPC Engine/Aisystem Tokyo|Aisystem Tokyo]]&lt;br /&gt;
* [[N-SPC Engine/Argonaut|Argonaut]]&lt;br /&gt;
* [[N-SPC Engine/Axes Art Amuse|Axes Art Amuse]]&lt;br /&gt;
* [[N-SPC Engine/Bit Managers|Bit Managers]]&lt;br /&gt;
* [[N-SPC Engine/Capcom|Capcom]]&lt;br /&gt;
* [[N-SPC Engine/Chatnoir|Chatnoir]]&lt;br /&gt;
* [[N-SPC Engine/Chip Level Designs|Chip Level Designs]]&lt;br /&gt;
* [[N-SPC Engine/CP.BRAiN|CP.BRAiN]]&lt;br /&gt;
* [[N-SPC Engine/Cream|Cream]]&lt;br /&gt;
* [[N-SPC Engine/Crosstalk|Crosstalk]]&lt;br /&gt;
* [[N-SPC Engine/Cube|Cube]]&lt;br /&gt;
* [[N-SPC Engine/CUE|CUE]]&lt;br /&gt;
* [[N-SPC Engine/Culture Brain|Culture Brain]]&lt;br /&gt;
* [[N-SPC Engine/Daft|Daft]]&lt;br /&gt;
* [[N-SPC Engine/Data East|Data East]]&lt;br /&gt;
* [[N-SPC Engine/EJ Corporation|EJ Corporation]]&lt;br /&gt;
* [[N-SPC Engine/Electronic Arts|Electronic Arts]]&lt;br /&gt;
* [[N-SPC Engine/Falcom|Falcom]]&lt;br /&gt;
* [[N-SPC Engine/Funcom|Funcom]]&lt;br /&gt;
* [[N-SPC Engine/Gremlin|Gremlin]]&lt;br /&gt;
* [[N-SPC Engine/HAL|HAL]]&lt;br /&gt;
* [[N-SPC Engine/Hanari Exp|Hanari Exp]]&lt;br /&gt;
* [[N-SPC Engine/Hect|Hect]]&lt;br /&gt;
* [[N-SPC Engine/Hikoshi Hashimoto|Hikoshi Hashimoto]]&lt;br /&gt;
* [[N-SPC Engine/Home Data|Home Data]]&lt;br /&gt;
* [[N-SPC Engine/Human (earlier)|Human (earlier)]]&lt;br /&gt;
* [[N-SPC Engine/Human|Human]]&lt;br /&gt;
* [[N-SPC Engine/Imagesoft|Imagesoft]]&lt;br /&gt;
* [[N-SPC Engine/Infogrames|Infogrames]]&lt;br /&gt;
* [[N-SPC Engine/Intelligent Systems|Intelligent Systems]]&lt;br /&gt;
* [[N-SPC Engine/Japan Art Media|Japan Art Media]]&lt;br /&gt;
* [[N-SPC Engine/Jorudan|Jorudan]]&lt;br /&gt;
* [[N-SPC Engine/Kazuo Sawa|Kazuo Sawa]]&lt;br /&gt;
* [[N-SPC Engine/Kennosuke Suemura|Kennosuke Suemura]]&lt;br /&gt;
* [[N-SPC Engine/Khaos|Khaos]]&lt;br /&gt;
* [[N-SPC Engine/Koei|Koei]]&lt;br /&gt;
* [[N-SPC Engine/Konami|Konami]]&lt;br /&gt;
* [[N-SPC Engine/LaserSoft|LaserSoft]]&lt;br /&gt;
* [[N-SPC Engine/Make Software|Make Software]]&lt;br /&gt;
* [[N-SPC Engine/Metro|Metro]]&lt;br /&gt;
* [[N-SPC Engine/Mitsuhiko Tanaka|Mitsuhiko Tanaka]]&lt;br /&gt;
* [[N-SPC Engine/Monolith|Monolith]]&lt;br /&gt;
* [[N-SPC Engine/MSQ|MSQ]]&lt;br /&gt;
* [[N-SPC Engine/Namco|Namco]]&lt;br /&gt;
* [[N-SPC Engine/Naohisa Morota|Naohisa Morota]]&lt;br /&gt;
* [[N-SPC Engine/Natsume|Natsume]]&lt;br /&gt;
* [[N-SPC Engine/Nichibutsu or Make Software|Nichibutsu/Make Software]] (NOTE: Refers to three of the Super Nichibutsu Mahjong games)&lt;br /&gt;
* [[N-SPC Engine/Nova|Nova]]&lt;br /&gt;
* [[N-SPC Engine/Ocean|Ocean]]&lt;br /&gt;
* [[N-SPC Engine/Pure Sound|Pure Sound]]&lt;br /&gt;
* [[N-SPC Engine/Quest|Quest]]&lt;br /&gt;
* [[N-SPC Engine/Quintet|Quintet]]&lt;br /&gt;
* [[N-SPC Engine/Robert C. Ashworth|Robert C. Ashworth]]&lt;br /&gt;
* [[N-SPC Engine/Sakata SAS|Sakata SAS]]&lt;br /&gt;
* [[N-SPC Engine/Saurus|Saurus]]&lt;br /&gt;
* [[N-SPC Engine/Sunsoft|Sunsoft]]&lt;br /&gt;
* [[N-SPC Engine/Syscom|Syscom]]&lt;br /&gt;
* [[N-SPC Engine/System Sacom|System Sacom]]&lt;br /&gt;
* [[N-SPC Engine/Systemsoft|Systemsoft]]&lt;br /&gt;
* [[N-SPC Engine/T&#039;s Music|T&#039;s Music]]&lt;br /&gt;
* [[N-SPC Engine/TamTam|TamTam]]&lt;br /&gt;
* [[N-SPC Engine/Team X-Fade|Team X-Fade]]&lt;br /&gt;
* [[N-SPC Engine/Technos Japan|Technos Japan]]&lt;br /&gt;
* [[N-SPC Engine/Technosoft|Technosoft]]&lt;br /&gt;
* [[N-SPC Engine/Tecmo|Tecmo]]&lt;br /&gt;
* [[N-SPC Engine/Tose|Tose]]&lt;br /&gt;
* [[N-SPC Engine/Tsukasa Masuko|Tsukasa Masuko]]&lt;br /&gt;
* [[N-SPC Engine/Virgin|Virgin]]&lt;br /&gt;
* [[N-SPC Engine/Wave|Wave]]&lt;br /&gt;
* [[N-SPC Engine/Yoshikazu Yao|Yoshikazu Yao]]&lt;br /&gt;
* [[N-SPC Engine/Yoshiyuki Ishii|Yoshiyuki Ishii]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO: There are a lot of variants... these will be split into sub-pages depending on the modifications made&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
* [http://vgmpf.com/Wiki/index.php?title=Kankichi-kun Video Game Music Preservation Foundation - Kankichi-kun]&lt;br /&gt;
* [https://www.retroreversing.com/super-famicom-snes-development-kit/#intelligent-systems-shvc-development-system Retro Reversing - SNES (Super Famicom) Development Kit Hardware - Intelligent Systems SHVC Development System]&lt;br /&gt;
* [https://wiki.superfamicom.org/nintendo-music-format-(n-spc) Super Famicom Wiki - N-SPC]&lt;br /&gt;
* [http://gdri.smspower.org/wiki/index.php/Super_Famicom/Super_NES_Sound_Driver_List GDRI - Super Famicom/Super NES Sound Driver List]&lt;br /&gt;
* [https://github.com/vgmtrans/vgmtrans/issues/173 Github - N-SPC VCMD $FB-$FE identifications]&lt;br /&gt;
* [https://archive.org/details/GameBoyProgManVer1.1/page/n187/mode/2up Game Boy Development Manual - Super Game Boy Sound] (see pages 187-213)&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=SPC700/IPL_ROM&amp;diff=2209</id>
		<title>SPC700/IPL ROM</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=SPC700/IPL_ROM&amp;diff=2209"/>
		<updated>2022-06-06T16:25:04Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: /* Step 1 (SPC700 Initializes Itself) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;Initial Program Loader Boot ROM&#039;&#039;&#039;, or IPL ROM, is the very first program executed by the [[SPC700]] on power on. It clears memory locations $00-$EF, then once it does so, it sends a signal to the SNES through two of the CPUIO registers. $0000-$0001 are reserved to hold the pointer, but all other memory locations can be written to. The IPL ROM itself is read-only: if written to, it simply writes to the same memory location that can be accessed when bit 7 of the CONTROL I/O port ($F1) is cleared.&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
===Step 1 (SPC700 Initializes Itself)===&lt;br /&gt;
&amp;lt;u&amp;gt;Output&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;$AA $BB ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
The very first step is for the SPC700 to output two values to $2140/$F4 and $2141/$F5. The SNES must ensure that the SPC700 has finished initializing itself (and clearing out memory locations $0000-$00EF) by confirming these two values are present in those two registers: only then may the SNES send commands.&lt;br /&gt;
&lt;br /&gt;
===Step 2 (Execute Command)===&lt;br /&gt;
&amp;lt;u&amp;gt;Input&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;$CC xx yy yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; indicates what you want to do. If this is zero, then the program jumps to &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt;. Otherwise, &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is the starting memory location of the next block, and we go to step 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy yy&amp;lt;/tt&amp;gt; is a [[little endian]] pointer. See &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; for more details.&lt;br /&gt;
$CC should be sent last in this case.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Output&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;$CC $BB ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Step 3 (Send Block)===&lt;br /&gt;
&amp;lt;u&amp;gt;Input&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a byte counter, and this should be sent last on byte ordering. Zero must be sent first to indicate that this is the first block. If this is greater (from a signed comparison, thus no greater than $80 more than the expected value: otherwise, the command won&#039;t work) than the value that was last sent to the SNES, than we go to step 4.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the input byte to send. The pointer is incremented.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Output&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx $BB ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the next byte ID to send over. This is incremented per byte sent.&lt;br /&gt;
&lt;br /&gt;
This step repeats until &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is sent a value that is greater than the initially expected value, then we go to step 4.&lt;br /&gt;
&lt;br /&gt;
===Step 4 (Terminate Block)===&lt;br /&gt;
&amp;lt;u&amp;gt;Input&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; must be greater (from a signed comparison, thus no greater than $80 more than the expected value: otherwise, the command won&#039;t work) than the last value that the SPC700 sent to the SNES. This byte should be sent last order-wise. Note that if this is zero (only occurs if the counter was previously $80-$FF), you&#039;ll instantly send a byte if &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is non-zero and start your next block right away (the zero case still jumps as per the usual).&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; indicates what to do next. If this is zero, then the program jumps to &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt;. Otherwise, &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is the starting memory location of the next block, and we go to step 3.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz zz&amp;lt;/tt&amp;gt; is a [[little endian]] pointer. See &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; for more details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Output&amp;lt;/u&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;xx $BB ?? ??&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the ID that was sent to terminate the block.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note if you choose to jump to the program, then depending on the program, your acknowledgement from the IPL Boot ROM may end up being very short. Thus, unless your program accounts for this, make sure to disable your interrupts prior to performing this critical step.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
* [https://problemkaputt.de/fullsnes.htm#snesapumaincpucommunicationport Fullsnes - Boot ROM Disassembly]&lt;br /&gt;
* [https://wiki.superfamicom.org/spc700-reference#ipl-rom-1567 Super Famicom Wiki - IPL ROM]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Build_Sorting&amp;diff=2208</id>
		<title>N-SPC Engine/Nintendo/Build Sorting</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Build_Sorting&amp;diff=2208"/>
		<updated>2022-06-01T05:06:35Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Adding Gigaleak-era F-Zero build&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Unique cases==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Aging Cassette&amp;lt;br&amp;gt;SNES Burn-In Test Cartridge|| &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$113A&amp;lt;/tt&amp;gt;||For distinguishing purposes, known outside of these notes as Sound Module and Burn-In Test to refer to the copy found in the SNES Burn-In Test Cartridge.&lt;br /&gt;
|-&lt;br /&gt;
|Nintendo Power Menu Program || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0DCB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==F-Zero Builds==&lt;br /&gt;
This game has multiple revisional builds known.&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|F-Zero || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;A2 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1776&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|F-Zero (Beta)|| &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;A2 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1778&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tetris &amp;amp; Dr. Mario Builds==&lt;br /&gt;
These builds are unique to one game, but unlike Super Scope 6 (which you may have noticed that LazerBlazer and Blastris are separated due to different SFX execution), they also match in general execution.&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Tetris and Dr. Mario (Mixed Match) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$118F&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Tetris and Dr. Mario (Dr. Mario) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1199&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Tetris and Dr. Mario (Tetris) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$11A1&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Akito Nakatsuka==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Scope 6 (LazerBlazer) (US version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B33&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Scope 6 (LazerBlazer) (Japanese and European version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B37&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Game Boy&amp;lt;br&amp;gt;Super Game Boy 2 || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A5D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|BS-X BIOS&amp;lt;br&amp;gt;Cassette Kensaki - NUS-you S Cassette || &amp;lt;tt&amp;gt;$0370&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$04AB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|JRA PAT&amp;lt;br&amp;gt;JRA PAT - Wide Taiouban || &amp;lt;tt&amp;gt;$06E0&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0739&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Sutte Hakkun || &amp;lt;tt&amp;gt;$06E0&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$074C&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Yuichi Ozaki===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Marvelous - Mouhitotsu no Takara-jima || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BC5&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|SA-1 Demo || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B23&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Heisei Shin Onigashima - Kouhen&amp;lt;br&amp;gt;Heisei Shin Onigashima - Zenpen || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 8F ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0C8D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hirokazu Tanaka==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Mario Paint (Beta) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$2625&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Mario Paint || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1430&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Mother 2/Earthbound || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$16A5&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Snoopy Concert || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$16EB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Kenji Yamamoto==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Metroid || &amp;lt;tt&amp;gt;$1500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1ED7&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Koji Kondo==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A96&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island (beta version) || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B08&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox/Star Wing || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B14&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario All-Stars/Super Mario Collection || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0C11&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Legend of Zelda - A Link to the Past/Zelda no Densetsu - Kamigami no Triforce || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E22&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Star Glider || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E97&amp;lt;/tt&amp;gt;|| Prototype of Star Fox/Star Wing.&lt;br /&gt;
|-&lt;br /&gt;
|SimCity || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$175D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Donkey 1 || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1DC9&amp;lt;/tt&amp;gt;|| Sound driver build is a prototype of Legend of Zelda - A Link to the Past&#039;s.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Prototype===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario World (all other versions) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0697&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0BC0&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario World (Super Mario All-Stars + Super Mario World) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0697&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0BF4&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|Pilotwings (European version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$06A3&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$126A&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|Pilotwings (US &amp;amp; Japanese versions) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$06A3&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$12CD&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Yoji Inagaki===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-04-01) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6F&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-04-15) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6F&amp;lt;/tt&amp;gt;|| Except for a single opcode&#039;s difference at $064C, all of the code differences are after the SFX data, and thus pointers cannot be fully factored in.&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-05-06 and 1994-05-13) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B62&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-08-31) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6D&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-12-28) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B9C&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1995-06-08) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BD4&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1995-06-22)&amp;lt;br&amp;gt;Star Fox 2 (1995-06-27) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BD7&amp;lt;/tt&amp;gt;|| These builds are identical to each other minus pointers placed after the SFX data.&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1995-07-25) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BDA&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BDF&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Taro Bando==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (1992-01-21 build) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;2F ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt; || Refers to a sound.bin file with this timestamp that was not embedded in a known prototype build.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (mkart) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D79&amp;lt;/tt&amp;gt;|| Refers to a prototype from April 13, 1992.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (mario_kart-01) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? E8 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D65&amp;lt;/tt&amp;gt; || Refers to what is known as the Enigma prototype build.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (mario_kart) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D74&amp;lt;/tt&amp;gt; || Refers to a prototype from late June 1992, created before kar4t.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (kar4t) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1598&amp;lt;/tt&amp;gt; || Refers to a prototype from late June 1992, created after mario_kart.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (US version) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;7D C4 ?? 5F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1664&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$19B4&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (Japanese and European version) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;7D C4 ?? 5F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1664&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$19BA&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|FX Trax || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 E8 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D61&amp;lt;/tt&amp;gt;|| Prototype of Wild Trax/Stunt Race FX.&lt;br /&gt;
|-&lt;br /&gt;
|Wild Trax/Stunt Race FX || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D73&amp;lt;/tt&amp;gt;|| Loading program at $0675 before the actual start location&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Unknown==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|SNES Burn-In Test Cartridge || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6D&amp;lt;/tt&amp;gt;||For distinguishing purposes, known outside of these notes as Super Scope Test.&lt;br /&gt;
|-&lt;br /&gt;
|Super Scope 6 (Blastris) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;90 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D89&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
[[Category:SPC Sound Engine Build Sorting Pages]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=AddMusicK&amp;diff=2190</id>
		<title>AddMusicK</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=AddMusicK&amp;diff=2190"/>
		<updated>2022-04-08T17:00:51Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Clarification on how AddmusicK came to be after digging out that Discord message from the SMWCentral server that clarified its origins somewhat...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[AddMusicK]] is an open-source tool that modifies the music in [[Super Mario World]]. AddMusicK is an extension of the [[AddMusic]] family and was developed by [https://www.smwcentral.net/?p=profile&amp;amp;id=9822 Kipernal].&lt;br /&gt;
&lt;br /&gt;
[[An SMW Central Production#Sequel | SMW Central Production 2 Project]]&#039;s development initially inspired the creation of [[AddMusicK]] in order to combine the pros of [[AddmusicM]] and [[Addmusic405]] into one package after a debate over which Addmusic should be used for the project.&lt;br /&gt;
&lt;br /&gt;
== Notable Features ==&lt;br /&gt;
* The usage is user-friendly.&lt;br /&gt;
* Backwards compatible with AddMusic 4.05 and AddMusicM ports by adding special headers to old MML files.&lt;br /&gt;
* Porters can define their custom N-SPC instruments in an official way, plus 16-bit tuning value support like the standard version of N-SPC.&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
* The song can encounter [https://smwc.me/1501654 noticeable slowdown] easily if too many N-SPC effect used at once. &#039;&#039;&#039;This issue is fixed since 1.0.6.&#039;&#039;&#039;&lt;br /&gt;
* The game will experience a long period of lag while loading a non-global song.&lt;br /&gt;
* When pressing a P-Switch while one is already active, the P-Switch music will not restart from the beginning. This is because AMK&#039;s development was short and Kipernal worked mostly to fix bugs and incompatibilities, so this vanilla feature was left out. KevinM made a fix that works with modern versions of AMK, including 1.0.8: https://bin.smwcentral.net/u/25222/patch.asm&lt;br /&gt;
Alternatively, if necessary for some reason, [https://mega.nz/file/oJMXRQoY#K-bEF7jC0KAmMRbTTh1y4Wjh5gjMPaYxIonpZfP8R5M a custom version of AddMusicK 1.0.5 was created by another individual to solve this problem.]&lt;br /&gt;
* The jump sound is slightly inaccurate to the original. This is because the original sound has no note data (according to LadiesMan217) so Kipernal couldn&#039;t directly rip it during AMK&#039;s development and thus he had to recreate it. This is rather unknown by the majority of hackers as the inaccuracy is not that noticeable unless heard very carefully. A fix was made by KungFuFurby below. The contents of &#039;35 Jump.txt&#039; and &#039;2B Jump.txt&#039; in the &#039;1DFC&#039; and &#039;1DF9&#039; folders respectively should be replaced with the fix:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$DA $08&lt;br /&gt;
$05 $38&lt;br /&gt;
$DD $B2 $00 $05 $B5&lt;br /&gt;
$2A&lt;br /&gt;
$EB $00 $12 $B9&amp;lt;/pre&amp;gt;&lt;br /&gt;
* (TBD)&lt;br /&gt;
&lt;br /&gt;
== AddMusicK 1.1 ==&lt;br /&gt;
[https://smwc.me/1419112 AddMusicK 1.1] is an unofficial improved version of the original AddMusicK by [https://www.smwcentral.net/?p=profile&amp;amp;id=30594 Codec], with more new features and bug fixes. However, there is no information regarding whenever it will be officially released.&lt;br /&gt;
&lt;br /&gt;
[[Category:AddMusic]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Build_Sorting&amp;diff=2185</id>
		<title>N-SPC Engine/Nintendo/Build Sorting</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Build_Sorting&amp;diff=2185"/>
		<updated>2022-03-10T15:03:11Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Adding beta version of Mario Paint&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Unique cases==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|F-Zero || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Aging Cassette&amp;lt;br&amp;gt;SNES Burn-In Test Cartridge|| &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$113A&amp;lt;/tt&amp;gt;||For distinguishing purposes, known outside of these notes as Sound Module and Burn-In Test to refer to the copy found in the SNES Burn-In Test Cartridge.&lt;br /&gt;
|-&lt;br /&gt;
|Nintendo Power Menu Program || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0DCB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tetris &amp;amp; Dr. Mario Builds==&lt;br /&gt;
These builds are unique to one game, but unlike Super Scope 6 (which you may have noticed that LazerBlazer and Blastris are separated due to different SFX execution), they also match in general execution.&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Tetris and Dr. Mario (Mixed Match) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$118F&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Tetris and Dr. Mario (Dr. Mario) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1199&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Tetris and Dr. Mario (Tetris) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$11A1&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Akito Nakatsuka==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Scope 6 (LazerBlazer) (US version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B33&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Scope 6 (LazerBlazer) (Japanese and European version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B37&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Game Boy&amp;lt;br&amp;gt;Super Game Boy 2 || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A5D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|BS-X BIOS&amp;lt;br&amp;gt;Cassette Kensaki - NUS-you S Cassette || &amp;lt;tt&amp;gt;$0370&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$04AB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|JRA PAT&amp;lt;br&amp;gt;JRA PAT - Wide Taiouban || &amp;lt;tt&amp;gt;$06E0&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0739&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Sutte Hakkun || &amp;lt;tt&amp;gt;$06E0&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$074C&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Yuichi Ozaki===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Marvelous - Mouhitotsu no Takara-jima || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BC5&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|SA-1 Demo || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B23&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Heisei Shin Onigashima - Kouhen&amp;lt;br&amp;gt;Heisei Shin Onigashima - Zenpen || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 8F ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0C8D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hirokazu Tanaka==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Mario Paint (Beta) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$2625&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Mario Paint || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1430&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Mother 2/Earthbound || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$16A5&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Snoopy Concert || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$16EB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Kenji Yamamoto==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Metroid || &amp;lt;tt&amp;gt;$1500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1ED7&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Koji Kondo==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A96&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island (beta version) || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B08&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox/Star Wing || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B14&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario All-Stars/Super Mario Collection || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0C11&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Legend of Zelda - A Link to the Past/Zelda no Densetsu - Kamigami no Triforce || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E22&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Star Glider || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E97&amp;lt;/tt&amp;gt;|| Prototype of Star Fox/Star Wing.&lt;br /&gt;
|-&lt;br /&gt;
|SimCity || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$175D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Donkey 1 || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1DC9&amp;lt;/tt&amp;gt;|| Sound driver build is a prototype of Legend of Zelda - A Link to the Past&#039;s.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Prototype===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario World (all other versions) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0697&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0BC0&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario World (Super Mario All-Stars + Super Mario World) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0697&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0BF4&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|Pilotwings (European version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$06A3&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$126A&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|Pilotwings (US &amp;amp; Japanese versions) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$06A3&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$12CD&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Yoji Inagaki===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-04-01) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6F&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-04-15) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6F&amp;lt;/tt&amp;gt;|| Except for a single opcode&#039;s difference at $064C, all of the code differences are after the SFX data, and thus pointers cannot be fully factored in.&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-05-06 and 1994-05-13) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B62&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-08-31) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6D&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-12-28) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B9C&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1995-06-08) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BD4&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1995-06-22)&amp;lt;br&amp;gt;Star Fox 2 (1995-06-27) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BD7&amp;lt;/tt&amp;gt;|| These builds are identical to each other minus pointers placed after the SFX data.&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1995-07-25) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BDA&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BDF&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Taro Bando==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (1992-01-21 build) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;2F ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt; || Refers to a sound.bin file with this timestamp that was not embedded in a known prototype build.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (mkart) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D79&amp;lt;/tt&amp;gt;|| Refers to a prototype from April 13, 1992.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (mario_kart-01) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? E8 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D65&amp;lt;/tt&amp;gt; || Refers to what is known as the Enigma prototype build.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (mario_kart) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D74&amp;lt;/tt&amp;gt; || Refers to a prototype from late June 1992, created before kar4t.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (kar4t) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1598&amp;lt;/tt&amp;gt; || Refers to a prototype from late June 1992, created after mario_kart.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (US version) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;7D C4 ?? 5F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1664&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$19B4&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (Japanese and European version) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;7D C4 ?? 5F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1664&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$19BA&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|FX Trax || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 E8 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D61&amp;lt;/tt&amp;gt;|| Prototype of Wild Trax/Stunt Race FX.&lt;br /&gt;
|-&lt;br /&gt;
|Wild Trax/Stunt Race FX || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D73&amp;lt;/tt&amp;gt;|| Loading program at $0675 before the actual start location&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Unknown==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|SNES Burn-In Test Cartridge || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6D&amp;lt;/tt&amp;gt;||For distinguishing purposes, known outside of these notes as Super Scope Test.&lt;br /&gt;
|-&lt;br /&gt;
|Super Scope 6 (Blastris) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;90 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D89&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
[[Category:SPC Sound Engine Build Sorting Pages]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Build_Sorting&amp;diff=2184</id>
		<title>N-SPC Engine/Nintendo/Build Sorting</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Build_Sorting&amp;diff=2184"/>
		<updated>2022-03-10T15:02:10Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Moving Mario Paint back under Hirokazu Tanaka after confirming that there is leftover code from Mario Paint still inside it (along with the resulting ARAM map matches).&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
==Unique cases==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|F-Zero || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Aging Cassette&amp;lt;br&amp;gt;SNES Burn-In Test Cartridge|| &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$113A&amp;lt;/tt&amp;gt;||For distinguishing purposes, known outside of these notes as Sound Module and Burn-In Test to refer to the copy found in the SNES Burn-In Test Cartridge.&lt;br /&gt;
|-&lt;br /&gt;
|Nintendo Power Menu Program || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0DCB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Tetris &amp;amp; Dr. Mario Builds==&lt;br /&gt;
These builds are unique to one game, but unlike Super Scope 6 (which you may have noticed that LazerBlazer and Blastris are separated due to different SFX execution), they also match in general execution.&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Tetris and Dr. Mario (Mixed Match) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$118F&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Tetris and Dr. Mario (Dr. Mario) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1199&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Tetris and Dr. Mario (Tetris) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? C5 ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt; &amp;lt;tt&amp;gt;84 ?? C4 ?? 90 19 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D5C&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$11A1&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Akito Nakatsuka==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Scope 6 (LazerBlazer) (US version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B33&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Scope 6 (LazerBlazer) (Japanese and European version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B37&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Game Boy&amp;lt;br&amp;gt;Super Game Boy 2 || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A5D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|BS-X BIOS&amp;lt;br&amp;gt;Cassette Kensaki - NUS-you S Cassette || &amp;lt;tt&amp;gt;$0370&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$04AB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|JRA PAT&amp;lt;br&amp;gt;JRA PAT - Wide Taiouban || &amp;lt;tt&amp;gt;$06E0&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0739&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Sutte Hakkun || &amp;lt;tt&amp;gt;$06E0&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;8F ?? ?? 8F ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$074C&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Yuichi Ozaki===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Marvelous - Mouhitotsu no Takara-jima || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BC5&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|SA-1 Demo || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B23&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Heisei Shin Onigashima - Kouhen&amp;lt;br&amp;gt;Heisei Shin Onigashima - Zenpen || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F3 8F ?? ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0C8D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hirokazu Tanaka==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Mario Paint || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1430&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Mother 2/Earthbound || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$16A5&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Snoopy Concert || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$16EB&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Kenji Yamamoto==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Metroid || &amp;lt;tt&amp;gt;$1500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1ED7&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Koji Kondo==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0A96&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario: Yoshi Island/Super Mario World 2: Yoshi&#039;s Island (beta version) || &amp;lt;tt&amp;gt;$0400&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B08&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox/Star Wing || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B14&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario All-Stars/Super Mario Collection || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0C11&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Legend of Zelda - A Link to the Past/Zelda no Densetsu - Kamigami no Triforce || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E22&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Star Glider || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E97&amp;lt;/tt&amp;gt;|| Prototype of Star Fox/Star Wing.&lt;br /&gt;
|-&lt;br /&gt;
|SimCity || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$175D&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Donkey 1 || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1DC9&amp;lt;/tt&amp;gt;|| Sound driver build is a prototype of Legend of Zelda - A Link to the Past&#039;s.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Prototype===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario World (all other versions) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0697&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0BC0&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario World (Super Mario All-Stars + Super Mario World) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0697&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$0BF4&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|Pilotwings (European version) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$06A3&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$126A&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
|Pilotwings (US &amp;amp; Japanese versions) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;CD 0B F5 ?? ?? FD F5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;E5 ?? ?? D0 03 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$06A3&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$12CD&amp;lt;/tt&amp;gt; ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Yoji Inagaki===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-04-01) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6F&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-04-15) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6F&amp;lt;/tt&amp;gt;|| Except for a single opcode&#039;s difference at $064C, all of the code differences are after the SFX data, and thus pointers cannot be fully factored in.&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-05-06 and 1994-05-13) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B62&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-08-31) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B6D&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1994-12-28) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0B9C&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1995-06-08) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BD4&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1995-06-22)&amp;lt;br&amp;gt;Star Fox 2 (1995-06-27) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BD7&amp;lt;/tt&amp;gt;|| These builds are identical to each other minus pointers placed after the SFX data.&lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 (1995-07-25) || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BDA&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|-&lt;br /&gt;
|Star Fox 2 || &amp;lt;tt&amp;gt;$0500&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FA BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0BDF&amp;lt;/tt&amp;gt;|| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Taro Bando==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (1992-01-21 build) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;2F ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0E3D&amp;lt;/tt&amp;gt; || Refers to a sound.bin file with this timestamp that was not embedded in a known prototype build.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (mkart) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D79&amp;lt;/tt&amp;gt;|| Refers to a prototype from April 13, 1992.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (mario_kart-01) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;C5 ?? ?? E8 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D65&amp;lt;/tt&amp;gt; || Refers to what is known as the Enigma prototype build.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (mario_kart) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D74&amp;lt;/tt&amp;gt; || Refers to a prototype from late June 1992, created before kar4t.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (beta version) (kar4t) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1598&amp;lt;/tt&amp;gt; || Refers to a prototype from late June 1992, created after mario_kart.&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (US version) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;7D C4 ?? 5F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1664&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$19B4&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|Super Mario Kart (Japanese and European version) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C4 ?? 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;C4 ?? 90 0A 3F ?? ??&amp;lt;/tt&amp;gt; &amp;amp;&amp;lt;br&amp;gt;&amp;lt;tt&amp;gt;7D C4 ?? 5F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6A&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$1664&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;$19BA&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|-&lt;br /&gt;
|FX Trax || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F7 E8 ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D61&amp;lt;/tt&amp;gt;|| Prototype of Wild Trax/Stunt Race FX.&lt;br /&gt;
|-&lt;br /&gt;
|Wild Trax/Stunt Race FX || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 FB BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D73&amp;lt;/tt&amp;gt;|| Loading program at $0675 before the actual start location&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Unknown==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|SNES Burn-In Test Cartridge || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;D0 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D6D&amp;lt;/tt&amp;gt;||For distinguishing purposes, known outside of these notes as Super Scope Test.&lt;br /&gt;
|-&lt;br /&gt;
|Super Scope 6 (Blastris) || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;90 F8 BC 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$0D89&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
[[Category:SPC Sound Engine Build Sorting Pages]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Kemco&amp;diff=2178</id>
		<title>N-SPC Engine/Kemco</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Kemco&amp;diff=2178"/>
		<updated>2022-02-23T01:57:25Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Updating $2143/$F7 to account for some updates on some command specifications as well as confirming that the values that otherwise do nothing also technically act as a pause due to the polling nature of $2143/$F7.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Go back to [[N-SPC Engine]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
Kemco is the first company outside of Nintendo themselves to release a game using their own variant of N-SPC (that being Bombuzal). The main customization that they did was to have the CPUIO registers play sounds on specific channels, and only the channels on the phrase list specified to be used by the corresponding CPUIO register would be used. All non-music CPUIO registers, when processing phrase data, also did not support the fast forward phrase commands. One other CPUIO register was allocated mainly to perform volume fades.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name !! Version !! VCMD Table Location ($E0 and up) !! ROM Offset&lt;br /&gt;
|-&lt;br /&gt;
| Bombuzal || 1.0 || &amp;lt;tt&amp;gt;0x10EB&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x102B&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x04807A&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Lagoon || 2.0 || &amp;lt;tt&amp;gt;0x1156&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x1096&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0D80A4&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Drakkhen || 3.0 || &amp;lt;tt&amp;gt;0x129E&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11DE&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1C805C&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Ka-blooey || 3.0 || &amp;lt;tt&amp;gt;0x129E&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11DE&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x048080&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| First Samurai || 3.1 || &amp;lt;tt&amp;gt;0x129E&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11DE&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0DB15E&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Phalanx - The Enforce Fighter A-144 || 3.1 || &amp;lt;tt&amp;gt;0x129E&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11DE&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1EB23E&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Super Drakkhen/Dragon View || 3.1 || &amp;lt;tt&amp;gt;0x129E&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11DE&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x09B6F6&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Super Full Metal || 3.1 || &amp;lt;tt&amp;gt;0x129E&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11DE&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0C80B6&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| X Zone || 3.1 || &amp;lt;tt&amp;gt;0x129E&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11DE&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x0FAEE6&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|-&lt;br /&gt;
| Kid Klown in Crazy Chase || 4.0 || &amp;lt;tt&amp;gt;0x12A1&amp;lt;/tt&amp;gt;, relative to &amp;lt;tt&amp;gt;0x11E1&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;0x1EC1E0&amp;lt;/tt&amp;gt; (all versions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The raw build sorting notes can be found [[N-SPC Engine/Kemco/Build Sorting|here]].&lt;br /&gt;
&lt;br /&gt;
==Communication with the SNES==&lt;br /&gt;
Each CPUIO register has an individual use.&amp;lt;br&amp;gt;&lt;br /&gt;
===CPUIO0 ($2140/$F4)===&lt;br /&gt;
This register always controls which sound ID will play out of channels 1-6, regardless of which sound driver version is used. It also supports the [[N-SPC_Engine#Communication_with_the_SNES|source build&#039;s N-SPC/Kankichi commands]]. These same commands are not present in the other CPUIO ports that control the channels, and instead you can only play or stop them.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Register Values &amp;amp; Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || Stop Sound || &amp;lt;tt&amp;gt;$00 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-??&amp;lt;/tt&amp;gt; || Play Sound (Channels 1-6) || &amp;lt;tt&amp;gt;xx ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; || Pause Sound (Channels 1-6) || &amp;lt;tt&amp;gt;$F0 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$F1&amp;lt;/tt&amp;gt; || Continue Sound (Channels 1-6) || &amp;lt;tt&amp;gt;$F1 ?? ?? ??&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Load New Data || &amp;lt;tt&amp;gt;$FF ?? xx xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The output to $2140/$F4 is as following...&lt;br /&gt;
* &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; - Sound is not playing (usually caused by the zero command)&lt;br /&gt;
* &amp;lt;tt&amp;gt;$3F&amp;lt;/tt&amp;gt; - Usually on the first tempo tick only, or sound is paused (caused by commands &amp;lt;tt&amp;gt;$F0&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* &amp;lt;tt&amp;gt;$40&amp;lt;/tt&amp;gt; - Sound is playing on channels 1-6&lt;br /&gt;
===CPUIO1 ($2141/$F5)===&lt;br /&gt;
This register controls which sound ID will play of of the following channel IDs, depending on the version...&lt;br /&gt;
* V1.0, V3.0: Channels 7-8&lt;br /&gt;
* V2.0, V4.0: Channel 7&lt;br /&gt;
The output is as following...&lt;br /&gt;
* &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; - Most common output with V1.0 and V3.0 (even if sound is playing). Otherwise indicates that a sound is not playing.&lt;br /&gt;
* &amp;lt;tt&amp;gt;$40&amp;lt;/tt&amp;gt; - Usually on the first tempo tick only for V2.0 and V4.0 after the sound is activated.&lt;br /&gt;
* &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; - Sound is playing on channel 7.&lt;br /&gt;
* &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; - Usually on the first tempo tick only for V1.0 and V3.0 after the sound is activated.&lt;br /&gt;
&lt;br /&gt;
===CPUIO2 ($2142/$F6)===&lt;br /&gt;
Only used in V2.0 and V4.0. This register always controls which sound ID will play out of channel 8.&amp;lt;br&amp;gt;&lt;br /&gt;
This register always outputs a zero on V1.0 and V3.0-V3.1. Otherwise, when it is used, the output is...&lt;br /&gt;
* &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; - Most common output, even if sound is playing.&lt;br /&gt;
* &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; - Usually on the first tempo tick only after the sound is activated.&lt;br /&gt;
&lt;br /&gt;
===CPUIO3 ($2143/$F7)===&lt;br /&gt;
Never used in V2.0. It does output a value, though: namely, whatever you sent in $2142/$F6.&amp;lt;br&amp;gt;&lt;br /&gt;
This CPUIO register is used to perform volume fades on either the note volumes of channels 1-8 or the MVOL DSP registers (The EVOL DSP registers are modified as well, but they get overwritten shortly afterwards). The values supported depend on the sound driver version.&lt;br /&gt;
====Commands (V1.0)====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00-$9F&amp;lt;/tt&amp;gt; || Pause Volume Operations + Acknowledge&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A0&amp;lt;/tt&amp;gt; || Reset Volume Operations (Channels 1-6)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A1&amp;lt;/tt&amp;gt; || Fade Out (Channels 1-6)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A2&amp;lt;/tt&amp;gt; || Fade In (Channels 1-6)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A3&amp;lt;/tt&amp;gt; || Zero Volume (Channels 1-6)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A4&amp;lt;/tt&amp;gt; || Volume Restore (Channels 7-8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A5&amp;lt;/tt&amp;gt; || Reset Volume Operations (Channels 7-8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A6&amp;lt;/tt&amp;gt; || Fade Out (Channels 7-8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A7&amp;lt;/tt&amp;gt; || Fade In (Channels 7-8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A8&amp;lt;/tt&amp;gt; || Zero Volume (Channels 7-8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A9&amp;lt;/tt&amp;gt; || Volume Restore (Channels 7-8)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$AA-$FF&amp;lt;/tt&amp;gt; || Pause Volume Operations + Acknowledge&lt;br /&gt;
|}&lt;br /&gt;
====Commands (V3.0-V4.0)====&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Command ID !! Description !! Versions Supported&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00-$7F&amp;lt;/tt&amp;gt; || Pause Volume Operations + Acknowledge || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; || Reset Volume Operations (Channels 1-6) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$81&amp;lt;/tt&amp;gt; || Fade Out (Channels 1-6) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$82&amp;lt;/tt&amp;gt; || Fade In (Channels 1-6) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$83&amp;lt;/tt&amp;gt; || Zero Volume (Channels 1-6) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$84&amp;lt;/tt&amp;gt; || Volume Restore (Channels 1-6) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$85-$9F&amp;lt;/tt&amp;gt; || Pause Volume Operations + Acknowledge ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A0&amp;lt;/tt&amp;gt; || Reset Volume Operations (Channels 7-8) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A1&amp;lt;/tt&amp;gt; || Fade Out (Channels 7-8) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A2&amp;lt;/tt&amp;gt; || Fade In (Channels 7-8) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A3&amp;lt;/tt&amp;gt; || Zero Volume (Channels 7-8) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A4&amp;lt;/tt&amp;gt; || Volume Restore (Channels 7-8) || V3.0-V3.1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$A5-$DF&amp;lt;/tt&amp;gt; || Pause Volume Operations + Acknowledge || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt; || Reset Volume Operations (Master Volume) || V3.0-V4.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt; || Fade Out (Master Volume) || V3.0-V4.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt; || Fade In (Master Volume) || V3.0-V4.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt; || Zero Volume (Master Volume) || V3.0-V4.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt; || Volume Restore (Master Volume) || V3.0-V4.0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$E5-$FF&amp;lt;/tt&amp;gt; || Pause Volume Operations + Acknowledge ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For V3.0-V3.1, &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt; and up can be transformed into this binary-based notation instead:&lt;br /&gt;
&amp;lt;pre&amp;gt;%1yyxxxxx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; is a command ID. The commands are as following...&lt;br /&gt;
** &amp;lt;tt&amp;gt;%00000&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;) - Reset Volume Operations&lt;br /&gt;
** &amp;lt;tt&amp;gt;%00001&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$01&amp;lt;/tt&amp;gt;) - Fade Out&lt;br /&gt;
** &amp;lt;tt&amp;gt;%00010&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$02&amp;lt;/tt&amp;gt;) - Fade In&lt;br /&gt;
** &amp;lt;tt&amp;gt;%00011&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$03&amp;lt;/tt&amp;gt;) - Zero Volume&lt;br /&gt;
** &amp;lt;tt&amp;gt;%00100&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$04&amp;lt;/tt&amp;gt;) - Volume Restore&lt;br /&gt;
** Any other value (&amp;lt;tt&amp;gt;$05-$1F&amp;lt;/tt&amp;gt;) - Pause Volume Operations + Acknowledge&lt;br /&gt;
* &amp;lt;tt&amp;gt;%yy&amp;lt;/tt&amp;gt; defines what will be affected by the command. The values are...&lt;br /&gt;
** &amp;lt;tt&amp;gt;%00&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$0&amp;lt;/tt&amp;gt;) - Channels 1-6&lt;br /&gt;
** &amp;lt;tt&amp;gt;%01&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$1&amp;lt;/tt&amp;gt;) - Channels 7-8&lt;br /&gt;
** &amp;lt;tt&amp;gt;%10&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$2&amp;lt;/tt&amp;gt;) - Invalid (causes all values to merely acknowledge)&lt;br /&gt;
** &amp;lt;tt&amp;gt;%11&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;$3&amp;lt;/tt&amp;gt;) - Master Volume&lt;br /&gt;
&lt;br /&gt;
====Pause Volume Operations + Acknowledge====&lt;br /&gt;
Echoes back the value you just sent to $2143/$F7. All volume operations are also paused, which includes fades, since the register is constantly polled.&lt;br /&gt;
&lt;br /&gt;
====Reset Volume Operations====&lt;br /&gt;
The command ID used depends on the version...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 1-6&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A0&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 7-8&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A5&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$A0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Master Volume&amp;lt;/u&amp;gt;&lt;br /&gt;
* V3.0-V4.0: &amp;lt;tt&amp;gt;$E0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This command resets all volume-related operations, specifically by resetting the flags that they were triggered for the first time. This also pauses fades. $2143/$F7 outputs a zero.&lt;br /&gt;
&lt;br /&gt;
====Fade Out====&lt;br /&gt;
The command ID used depends on the version...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 1-6&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A1&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$81&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 7-8&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A6&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$A1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Master Volume&amp;lt;/u&amp;gt;&lt;br /&gt;
* V3.0-V4.0: &amp;lt;tt&amp;gt;$E1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fades out the volume to 0. On V1.0, this is done at a rate of 3 per tempo tick: on other versions, it&#039;s 1 per tempo tick. On V3.0 and later, the original volume value is saved. $2143/$F7 outputs the current volume value of the last channel in the set (or the intended right echo volume value in the master volume&#039;s case).&amp;lt;br&amp;gt;&lt;br /&gt;
The command does not properly function past V1.0 for channels 1-6. Technically it still works, but a wrong branching location causes the channel ID to use (and the number of channels to copy) to not be initialized properly, which causes the volume values to not be saved.&lt;br /&gt;
&lt;br /&gt;
====Fade In====&lt;br /&gt;
The command ID used depends on the version...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 1-6&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A2&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$82&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 7-8&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A7&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$A2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Master Volume&amp;lt;/u&amp;gt;&lt;br /&gt;
* V3.0-V4.0: &amp;lt;tt&amp;gt;$E2&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fades in the volume to the original volume at a rate of 1 per tempo tick. If no value was saved beforehand, this can overflow back to zero. $2143/$F7 outputs the current volume value of the last channel in the set (or the intended right echo volume value in the master volume&#039;s case).&lt;br /&gt;
&lt;br /&gt;
====Zero Volume====&lt;br /&gt;
The command ID used depends on the version...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 1-6&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A3&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$83&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 7-8&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A8&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$A3&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Master Volume&amp;lt;/u&amp;gt;&lt;br /&gt;
* V3.0-V4.0: &amp;lt;tt&amp;gt;$E3&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zeroes out the volume, saving the original volume for restoration later on. Unless this is done on the master volume, you must reset volume operations to use this command again. $2143/$F7 outputs the current volume value (or the intended right echo volume value in the master volume&#039;s case) for one tempo tick, then a $01 (or, for the master volume, always outputs a zero).&amp;lt;br&amp;gt;&lt;br /&gt;
The command does not properly function past V1.0 for channels 1-6 due to a wrong branching location.&lt;br /&gt;
&lt;br /&gt;
====Volume Restore====&lt;br /&gt;
The command ID used depends on the version...&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 1-6&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A4&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$84&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Channels 7-8&amp;lt;/u&amp;gt;&lt;br /&gt;
* V1.0: &amp;lt;tt&amp;gt;$A9&amp;lt;/tt&amp;gt;&lt;br /&gt;
* V3.0-V3.1: &amp;lt;tt&amp;gt;$A4&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Master Volume&amp;lt;/u&amp;gt;&lt;br /&gt;
* V3.0-V4.0: &amp;lt;tt&amp;gt;$E4&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restores the volumes to the saved value. Unless this is done on the master volume, you must reset volume operations to use this command again. $2143/$F7 outputs the current volume value for one tempo tick, then a $01 (or, for the master volume, always outputs the intended right echo volume value... which is saved to the left master volume by mistake).&amp;lt;br&amp;gt;&lt;br /&gt;
The command does not properly function past V1.0 for channels 1-6 due to a wrong branching location.&amp;lt;br&amp;gt;&lt;br /&gt;
The master volume variant does not work properly due to a typo in the code: specifically, the right echo volume gets copied to the left master volume by mistake, overwriting the correct value that was copied earlier.&lt;br /&gt;
&lt;br /&gt;
[[Category:SPC Sound Engines]]&lt;br /&gt;
[[Category:N-SPC Variants]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Koji_Kondo/SFX_Sequence_Format&amp;diff=2177</id>
		<title>N-SPC Engine/Nintendo/Koji Kondo/SFX Sequence Format</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Koji_Kondo/SFX_Sequence_Format&amp;diff=2177"/>
		<updated>2022-02-21T18:32:51Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Go back to [[N-SPC Engine/Nintendo/Koji Kondo]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: This page is under construction. The later Koji Kondo games use the same format for the most part (except for Star Fox 2, which has a more massive overhaul), but adapted to modern N-SPC VCMD IDs, and they may have some extra per-entry parameters.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO insert table here containing a list of games and their version&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SFX sequence data is slightly modified compared to the standard N-SPC&#039;s voice command format. These are headerless, unlike a song, and they only support one channel at a time, with the channel used being fixed. Both games have almost the same command set except for VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
All SFX are initially handled at a tempo of &amp;lt;tt&amp;gt;$38&amp;lt;/tt&amp;gt;. &#039;&#039;TODO double check for all games&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==SFX Instrument Format==&lt;br /&gt;
&#039;&#039;TODO Star Glider, Star Fox, Yoshi&#039;s Island and Star Fox 2 don&#039;t use this instrument format: instead they&#039;re standard Kankichi-kun, so TODO note this once the versioning info is implemented&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SFX instrument format, shared among all SFX but not consistently stored in terms of memory location, consists of a series of bytes as following...&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc dd ee ff&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxVOLR DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxPITCHL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxPITCHH DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
&lt;br /&gt;
==SFX Percussion Format==&lt;br /&gt;
See [[N-SPC Engine/Prototype#Percussion Format|the music percussion format]], as the format is identical.&lt;br /&gt;
&lt;br /&gt;
==SFX Voice Command Format==&lt;br /&gt;
===V0.0-V0.1===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || End of SFX ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; || Note Duration || &amp;lt;tt&amp;gt;(xx) (yy)&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80-$C5&amp;lt;/tt&amp;gt; || Note || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$C6-$CF&amp;lt;/tt&amp;gt; || Retrigger Note || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$D0-$D9&amp;lt;/tt&amp;gt; || Percussion || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DA&amp;lt;/tt&amp;gt; || Instrument || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DA&amp;lt;/tt&amp;gt; || Noise Instrument (Super Mario World CPUIO3) || &amp;lt;tt&amp;gt;%1??xxxxx yy&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DB-$DC&amp;lt;/tt&amp;gt; || Invalid Note ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DD&amp;lt;/tt&amp;gt; || Note + Pitch Slide to Note || &amp;lt;tt&amp;gt;xx yy zz aa&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DE-$EA&amp;lt;/tt&amp;gt; || Invalid Note ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt; || Note Pitch Envelope To || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EC-$FE&amp;lt;/tt&amp;gt; || Invalid Note ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Restart SFX (Super Mario World CPUIO0) ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Jump Back One Byte (Super Mario World CPUIO3) ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Jump to SFX ID (Pilotwings) || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===V1.0 and up===&lt;br /&gt;
&#039;&#039;TODO add table here: the IDs now reflect modern N-SPC&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;TODO Star Fox 2&#039;&#039; (has a massive overhaul to the VCMD format)&lt;br /&gt;
&lt;br /&gt;
===Invalid Note (VCMD &amp;lt;tt&amp;gt;$DB-$DC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$DE-$EA&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$EC-$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Doesn&#039;t crash the sound driver, but does play an invalid note.&lt;br /&gt;
&lt;br /&gt;
===End of SFX (VCMD &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Terminates the SFX.&lt;br /&gt;
&lt;br /&gt;
===Note Duration (VCMD &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx (yy) (zz)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; represents your note length (as seven bits) in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt;, if less than &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;, represents the volume of the note. If a second byte is defined, this is done for the left channel, otherwise it is for both channels.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt;, if less than &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;, represents the right volume of the note.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMD &amp;lt;tt&amp;gt;$80-$C5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Retrigger Note (VCMD &amp;lt;tt&amp;gt;$C6-$CF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Retriggers the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
Note that as a side effect of this, there is no tie or rest command. Rests can be emulated via a zero volume note. Ties... well, officially they&#039;re not supported at all, but if the pitch slide length equals or exceeds the note duration, then the note won&#039;t be keyed off once the note length has elapsed.&lt;br /&gt;
&lt;br /&gt;
===Percussion (VCMD &amp;lt;tt&amp;gt;$D0-$D9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a percussion note. Unlike SFX, percussion uses the same set that the music uses, and thus has the same instrument format as that.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$DA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$DA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See SFX Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Noise Instrument (VCMD &amp;lt;tt&amp;gt;$DA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Only compatible with Super Mario World when playing SFX through the CPUIO3 register.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$DA %1??xxxxx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; contains the noise clock rate.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See SFX Instrument Format above for the format. This must be &amp;lt;tt&amp;gt;$7F&amp;lt;/tt&amp;gt; or less, otherwise the noise clock rate is overwritten and more bytes will be fetched until a non-noise clock value is given.&lt;br /&gt;
&lt;br /&gt;
===Note + Pitch Slide To Note (VCMD &amp;lt;tt&amp;gt;$DD&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$DD xx yy zz aa&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting note.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the number of tempo ticks to delay the slide for... at least in theory. In reality, this never works, and the pitch slide executes instantly in all cases.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines the length of the pitch slide in tempo ticks. If this is equal or greater than the overall note length, the note won&#039;t key off at the end, thus allowing for multiple pitch envelopes to be chained at once.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is the target note.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EB xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of ticks to delay before applying the pitch envelope... at least in theory. In reality, this never works, and the pitch slide executes instantly in all cases.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks. If this is equal or greater than the overall note length, the note won&#039;t key off at the end, thus allowing for multiple pitch envelopes to be chained at once.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the target note.&lt;br /&gt;
&lt;br /&gt;
===Restart SFX (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Only compatible with Super Mario World when playing SFX through the CPUIO0 register.&lt;br /&gt;
&lt;br /&gt;
Restarts the SFX from the beginning.&lt;br /&gt;
&lt;br /&gt;
===Jump Back One Byte (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Only compatible with Super Mario World when playing SFX through the CPUIO3 register.&lt;br /&gt;
&lt;br /&gt;
Normally, the pointer is incremented upon reading the VCMD. This causes the inverse to happen, and sets the pointer to one byte before this VCMD.&lt;br /&gt;
&lt;br /&gt;
===Jump to SFX ID (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Only compatible with Pilotwings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$FF xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the SFX ID to jump to. The array used depends on which set of sequences you&#039;re using, as the two of them use different sets.&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Koji_Kondo/SFX_Sequence_Format&amp;diff=2176</id>
		<title>N-SPC Engine/Nintendo/Koji Kondo/SFX Sequence Format</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Nintendo/Koji_Kondo/SFX_Sequence_Format&amp;diff=2176"/>
		<updated>2022-02-21T18:25:41Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Updating this to go to the Koji Kondo page instead&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Go back to [[N-SPC Engine/Nintendo/Koji Kondo]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: This page is under construction. The later Koji Kondo games use the same format for the most part (except for Star Fox 2, which has a more massive overhaul), but adapted to modern N-SPC VCMD IDs, and they may have some extra per-entry parameters.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The SFX sequence data is slightly modified compared to the standard N-SPC&#039;s voice command format. These are headerless, unlike a song, and they only support one channel at a time, with the channel used being fixed. Both games have almost the same command set except for VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
All SFX are initially handled at a tempo of &amp;lt;tt&amp;gt;$38&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VCMD ID !! Description !! Arguments&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt; || End of SFX ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt; || Note Duration || &amp;lt;tt&amp;gt;(xx) (yy)&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$80-$C5&amp;lt;/tt&amp;gt; || Note || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$C6-$CF&amp;lt;/tt&amp;gt; || Retrigger Note || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$D0-$D9&amp;lt;/tt&amp;gt; || Percussion || &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DA&amp;lt;/tt&amp;gt; || Instrument || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DA&amp;lt;/tt&amp;gt; || Noise Instrument (Super Mario World CPUIO3) || &amp;lt;tt&amp;gt;%1??xxxxx yy&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DB-$DC&amp;lt;/tt&amp;gt; || Invalid Note ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DD&amp;lt;/tt&amp;gt; || Note + Pitch Slide to Note || &amp;lt;tt&amp;gt;xx yy zz aa&amp;lt;/tt&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$DE-$EA&amp;lt;/tt&amp;gt; || Invalid Note ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt; || Note Pitch Envelope To || &amp;lt;tt&amp;gt;xx yy zz&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$EC-$FE&amp;lt;/tt&amp;gt; || Invalid Note ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Restart SFX (Super Mario World CPUIO0) ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Jump Back One Byte (Super Mario World CPUIO3) ||&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt; || Jump to SFX ID (Pilotwings) || &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==SFX Instrument Format==&lt;br /&gt;
The SFX instrument format, shared among all SFX but not consistently stored in terms of memory location, consists of a series of bytes as following...&lt;br /&gt;
&amp;lt;pre&amp;gt;xx yy zz aa bb cc dd ee ff&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is a direct write to the VxVOLL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is a direct write to the VxVOLR DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is a direct write to the VxPITCHL DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is a direct write to the VxPITCHH DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;bb&amp;lt;/tt&amp;gt; is a direct write to the VxSRCN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;cc&amp;lt;/tt&amp;gt; is a direct write to the VxADSR1 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;dd&amp;lt;/tt&amp;gt; is a direct write to the VxADSR2 DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ee&amp;lt;/tt&amp;gt; is a direct write to the VxGAIN DSP register.&lt;br /&gt;
* &amp;lt;tt&amp;gt;ff&amp;lt;/tt&amp;gt; is a pitch base multiplier.&lt;br /&gt;
&lt;br /&gt;
==SFX Percussion Format==&lt;br /&gt;
See [[N-SPC Engine/Prototype#Percussion Format|the music percussion format]], as the format is identical.&lt;br /&gt;
&lt;br /&gt;
==SFX Voice Command Format==&lt;br /&gt;
===Invalid Note (VCMD &amp;lt;tt&amp;gt;$DB-$DC&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$DE-$EA&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;$EC-$FE&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Doesn&#039;t crash the sound driver, but does play an invalid note.&lt;br /&gt;
&lt;br /&gt;
===End of SFX (VCMD &amp;lt;tt&amp;gt;$00&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Terminates the SFX.&lt;br /&gt;
&lt;br /&gt;
===Note Duration (VCMD &amp;lt;tt&amp;gt;$01-$7F&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;%0xxxxxxx (yy) (zz)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxxxx&amp;lt;/tt&amp;gt; represents your note length (as seven bits) in tempo ticks.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt;, if less than &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;, represents the volume of the note. If a second byte is defined, this is done for the left channel, otherwise it is for both channels.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt;, if less than &amp;lt;tt&amp;gt;$80&amp;lt;/tt&amp;gt;, represents the right volume of the note.&lt;br /&gt;
&lt;br /&gt;
===Note (VCMD &amp;lt;tt&amp;gt;$80-$C5&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
===Retrigger Note (VCMD &amp;lt;tt&amp;gt;$C6-$CF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Retriggers the previous note and delays the channel for one note length before reading another VCMD.&lt;br /&gt;
&lt;br /&gt;
Note that as a side effect of this, there is no tie or rest command. Rests can be emulated via a zero volume note. Ties... well, officially they&#039;re not supported at all, but if the pitch slide length equals or exceeds the note duration, then the note won&#039;t be keyed off once the note length has elapsed.&lt;br /&gt;
&lt;br /&gt;
===Percussion (VCMD &amp;lt;tt&amp;gt;$D0-$D9&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Plays a percussion note. Unlike SFX, percussion uses the same set that the music uses, and thus has the same instrument format as that.&lt;br /&gt;
&lt;br /&gt;
===Instrument (VCMD &amp;lt;tt&amp;gt;$DA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$DA xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See SFX Instrument Format above for the format.&lt;br /&gt;
&lt;br /&gt;
===Noise Instrument (VCMD &amp;lt;tt&amp;gt;$DA&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Only compatible with Super Mario World when playing SFX through the CPUIO3 register.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$DA %1??xxxxx yy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;%xxxxx&amp;lt;/tt&amp;gt; contains the noise clock rate.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is an instrument ID to an array of instruments. See SFX Instrument Format above for the format. This must be &amp;lt;tt&amp;gt;$7F&amp;lt;/tt&amp;gt; or less, otherwise the noise clock rate is overwritten and more bytes will be fetched until a non-noise clock value is given.&lt;br /&gt;
&lt;br /&gt;
===Note + Pitch Slide To Note (VCMD &amp;lt;tt&amp;gt;$DD&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$DD xx yy zz aa&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the starting note.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; defines the number of tempo ticks to delay the slide for... at least in theory. In reality, this never works, and the pitch slide executes instantly in all cases.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; defines the length of the pitch slide in tempo ticks. If this is equal or greater than the overall note length, the note won&#039;t key off at the end, thus allowing for multiple pitch envelopes to be chained at once.&lt;br /&gt;
* &amp;lt;tt&amp;gt;aa&amp;lt;/tt&amp;gt; is the target note.&lt;br /&gt;
&lt;br /&gt;
===Note Pitch Envelope To (VCMD &amp;lt;tt&amp;gt;$EB&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
&amp;lt;pre&amp;gt;$EB xx yy zz&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the number of ticks to delay before applying the pitch envelope... at least in theory. In reality, this never works, and the pitch slide executes instantly in all cases.&lt;br /&gt;
* &amp;lt;tt&amp;gt;yy&amp;lt;/tt&amp;gt; is the length of the pitch slide in tempo ticks. If this is equal or greater than the overall note length, the note won&#039;t key off at the end, thus allowing for multiple pitch envelopes to be chained at once.&lt;br /&gt;
* &amp;lt;tt&amp;gt;zz&amp;lt;/tt&amp;gt; is the target note.&lt;br /&gt;
&lt;br /&gt;
===Restart SFX (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Only compatible with Super Mario World when playing SFX through the CPUIO0 register.&lt;br /&gt;
&lt;br /&gt;
Restarts the SFX from the beginning.&lt;br /&gt;
&lt;br /&gt;
===Jump Back One Byte (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Only compatible with Super Mario World when playing SFX through the CPUIO3 register.&lt;br /&gt;
&lt;br /&gt;
Normally, the pointer is incremented upon reading the VCMD. This causes the inverse to happen, and sets the pointer to one byte before this VCMD.&lt;br /&gt;
&lt;br /&gt;
===Jump to SFX ID (VCMD &amp;lt;tt&amp;gt;$FF&amp;lt;/tt&amp;gt;)===&lt;br /&gt;
Only compatible with Pilotwings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$FF xx&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;xx&amp;lt;/tt&amp;gt; is the SFX ID to jump to. The array used depends on which set of sequences you&#039;re using, as the two of them use different sets.&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
	<entry>
		<id>https://sneslab.net/mw/index.php?title=N-SPC_Engine/Yoshidayama-Workshop/Build_Sorting&amp;diff=2175</id>
		<title>N-SPC Engine/Yoshidayama-Workshop/Build Sorting</title>
		<link rel="alternate" type="text/html" href="https://sneslab.net/mw/index.php?title=N-SPC_Engine/Yoshidayama-Workshop/Build_Sorting&amp;diff=2175"/>
		<updated>2022-02-21T18:19:18Z</updated>

		<summary type="html">&lt;p&gt;KungFuFurby: Adding category that was accidentally omitted&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game Name(s) !! Starting Memory Location !! Sorting Signature(s) || Memory Locations Noted || Extra notes&lt;br /&gt;
|-&lt;br /&gt;
|Zootto Mahjong! || &amp;lt;tt&amp;gt;$0800&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;E8 ?? C5 ?? ?? 3F ?? ??&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;$1042&amp;lt;/tt&amp;gt;||&lt;br /&gt;
|}&lt;br /&gt;
[[Category:SPC Sound Engine Build Sorting Pages]]&lt;/div&gt;</summary>
		<author><name>KungFuFurby</name></author>
	</entry>
</feed>