Unlike the original Famicom system, Nintendo provided third party developers with some tools to make Super Famicom development easier.
The tools were created by a subsidiary of Nintendo called Intelligent Systems who would later be responsible for the software development kits for all Nintendo systems.
If you see the acronym SHVC in this post or while browsing the SDK it stands for Super Home Video Computer, which was what the SNES was called internally at Nintendo.
There are still Super Famicom SDK files that have never been archived or released on the internet unfortunately, so this post will only cover the files we have access to.
The following files have been released to the internet over time:
The known scanned in files that we have from Nintendo are:
The Intelligent Systems SDK would have been installed in C:\issys
on the developers DOS PC and contained a few tools such as assemblers and linkers.
The SDK has mentions of both the NEC PC90 and the Fujitsu FMR series PCs so it is likely that most of the development was achieved on one of these machines.
However DOS was not the only Operating system used by SNES developers on the PC side.
The documentation for the HEX2ISX tool mentions that it supports the Sony NEWS assembler called asm816, this tool assembles to 65816 machine code which is the Main SNES CPU.
In fact we can see Youtube footage from Pernoelle [^10], that shows a programmer working on the Super Nintendo game Pilotwings using an Sony NEWS workstation (and IDE) back in 1990, but it is unclear which IDE is being used:
This suggests that SNES development at Nintendo was split between the IBM-PC compatibles and the Unix-based Sony NEWS workstation!
There are a number of common file formats that you will find throughout the Super Nintendo SDK files.
You can find a description of these files in the table below:
Extension | Description |
---|---|
.ASM | Assembly code source file |
.EQU | Assembly code header file (definitions) |
.ISX | Intelligent Systems Executable file (similar to a ROM but contains debug symbols and needs converted before it can be run on an emulator) |
.ISO | Intelligent Systems Object file (assembled version of assembly code) |
.X65 | Assembly code for the Main SNES CPU (65816) |
The list of known Audio file formats used for SNES development are in the table below:
Extension | Description |
---|---|
.GAK | Musical Score file created by the SHVC-MUSIC-EDIT tool |
.SBN | Sound Binary Data |
.SOD | Sound Object assembly file listing the instruments that link to .so/.sol |
.SO | Converted from .SOL for the NEWS sound development tool |
.SOL | Sound source data file |
.SOP | Similar to the .SO format but has undergone Bit Rate Reduction (Also known as the .so+ format, but the plus symbol is not valid in MSDOS) |
.SND | Metadata file that gets compiled with ISSND |
.SRC | Compiled Musical Score file generated by GAK tools |
The conversion tools such as LHCHG suggest also having .B or .WB file formats, but there is no example in the SDK of these files or their usage.
The Audio processor on the SNES is the Sony SPC700, so in order to make music development easier Intelligent Systems (IS) created a few tools and hardware.
One of these pieces of hardware was known as the IS-SOUND which can be used to play and debug audio assembly running on the Sony SPC700.
In order to communicate from a DOS-based PC and the IS-SOUND hardware, Intelligent Systems created a SCSI interface and driver known as IS-SPC.
The SNESDEV.rar archive contains a self extracting LZH file called isspc.exe for DOS that when extracted contains all the files required to use IS-SPC Driver for MS-DOS, Windows NT and 95.
When Extracted it contains the following files and folders:
It contains 2 drivers, one for the SNES and the other for the IBM-PC both in two different formats, standard and via the Advanced SCSI Programming Interface (ASPI). They are located in the root directory of the extracted files:
These files are only useful if you have the rare IS-SOUND hardware, or the SE Emulator, but the files in the SS folder are useful for everyone.
SNES (Super Famicom) Development Kit Hardware
For more information about the **IS-SOUND** or SE Emulator check out this post
The Software Development Kit contains tools to convert Sound file formats to other formats that can be played inside a SNES ROM.
So how would a game developer add sound effects or music to their Super Nintendo game using official tools?
It all comes down to a series of files distributed by Nintendo in the SS folder. It contains code and tools in order to play sounds using what they have called the Nintendo SPC (N-SPC).
It is called the Nintendo SPC due to the audio chip in the SNES being the Sony SPC700. It also has the alternative Japanese name of Kankichi 1.
It consists of a number of parts:
Each of these parts will be explained in the sections below.
The raw wave data needs to be provided as a .WB file which will be used as an instrument/voice for music on the SNES.
It is not clear how developers would create these .WB or .B files, if anyone has any information please reach out!
In the table below you can see a list of tools provided for these Wav file formats:
Name | Description |
---|---|
B2WB.EXE | Converts .B to .WB files (What are is the difference between them?) |
LHCHG.DOC | Documentation for the LHCHG and B2WB/WB2B tools |
LHCHG.EXE | Low High Wav file Converter (Changer) |
WB2B.EXE | Convert WB format audio to B format audio |
In order to use these files on the SNES we need to. convert the .WB file into a SNES .SOL format file which will be covered in the next section.
The Sound Wave Maker (SWM) tool seems to take in a .WB file as input and produces two files from the sound sample a .SOL and a .WSO.
It is the .SOL files that are needed for the SNES but if you want to convert the files into a Sony NEWS compatible .so file you need to keep both the .wso and the .sol.
Name | Description |
---|---|
SME.EXE | SHVC Music Editor (for PC9800) |
SME.OVR | DOS memory overlay for SME.EXE |
SWM.DAT | |
SWM.EXE | Sound Wave Maker Program |
SWM.OVR | DOS memory overlay for SWM.EXE |
Now that we have a number of sound objects (instruments) in the SOL format we can proceed.
When using the Sony NEWS workstation the sounds are saved in a .SO format that needs to be converted to .SOL to be used in the SNES sound code.
Name | Description |
---|---|
SO2SOL.DOC | Documentation for the SO2SOL tool |
SO2SOL.EXE | Converts SO Sound files to SOL source files |
SOL2SO.DOC | Documentation for SOL2SO tool |
SOL2SO.EXE | Converts from SOL format file to a SO format file |
Now that we have .SOL files for each of our voices/instruments we need to combine them all together into two files, as SOD and an ISX.
To link multiple .SOL files together and generate these two files we use the SOLLink tool.
Lets say we have a .SOL file called mysolfile.sol we can create an ISX and SOD file list so:
sollink / S4000 / XnameOfISX / DnameOfSOD mysolfile
This will result in two files being created nameOfISX.isx and nameOfSOD.sod.
If you have lots of SOD files you can use a Linker file (*.LNK) like so:
SOLLINK /Dxxxxx /Xwave @SAMPLE.LNK
This will output a SOD file called xxxxx.SOD and an ISX file called wave.ISX.
The SOD file is a plain text assembly language description of all the SOL files that have been linked into the ISX file with envelope data (see the next section on the SOL file format).
Name | Description |
---|---|
SOLLINK.DOC | Documentation for SOLLINK executable |
SOLLINK.EXE | Source Data Linker program by Intelligent Systems |
It is unconfirmed what SOD stands for but our guess would be Sound Object Descriptor.
They are plain text files that can be read as assembly code consisting only of Define Byte (DB) instructions.
Normally there are about 26 executable lines of code in this file, one for each of the instruments (SOL files).
Each row consists of 6 bytes, with each of the bytes representing a attribute of an instrument:
Example:
sod
; son,ad,sr,gain, blk No
;---------------------------------------
DB $00, $ff, $e0, $b8, $03, $00 ; [00] B:\SMD\SMD5\GB\SE\KABEEP01.SOL
You can find more retail SOD files in the Music source code for the game TopGear that was leaked on to RomHacking.net.
The Japanese word Gakufu means a musical score or sheet Music. So these files are MIDI-like, they contains which instruments to play and at what time.
The following table list all the tools provided in the /SS folder for modifying GAK files:
Name | Description |
---|---|
GAK.EXE | Musical Score (Gakufu) Convert Utility |
GAKCONV.DOC | Documentation for the GAKCONV tool |
GAKCONV.EXE | Converts to .SRC file from GAKufu-file Program (.GAK) |
SGE.ENV | Plain text documentation for SGE |
SGE.EXE | SHVC Gakufu Editor (Musical Score editor) |
SGE.OVR | DOS memory Overlay file for SGE.EXE |
The Audio developer would use a tool called the SHVC Gakufu Editor (SGE.EXE) to create and edit .GAK files which are similar to MIDI Music files.
After the .GAK file has been perfected by the audio engineers it is time to convert it to a format that we can run on the Super Nintendo.
The first step is to convert the GAK file, let’s say its called SAMPLE.GAK to a SRC file. You can do this with the useful GAKCONV tool like so:
GAKCONV /Xxxxxx SAMPLE
This will result in a file called xxxxx.SRC which if you open is actually a plain text file containing assembly code. If you want you can change the name by changed the x characters to a more useful name, but if you do then you will need to change an include statement in code later on in the process so most people just keep it as the xxxxx file name.
We want to build the Gakufu driver called Kankichi which is provided by Nintendo in the /SS folder.
The driver is assembled for the Sony Sound CPU (APU) and not the main SNES CPU so we will use a custom assembler provided by Intelligent Systems called ISSND.
But first we need to modify the source code to include a link to our .SOD sound object files. The source file is called kan.asm and we need to find the lines that have a comment with the word henko in it, which is the Japanese word for change.
One is the line to specify the .SOD file:
include SOURCE.SOD ; ** henko **
Change the name SOURCE.SOD to the name of your own SOD file, if you don’t have a SOD file yet checkout the section above.
You will also notice that near the end of the kan.asm is where our generated .src file is included:
include xxxxx.src
So if you changed the name from the xxxx default then you will need to change this include statement.
Now we need a .SND file which is a plain text file that describes how to build an ISX file and is needed by the ISSND sound CPU Assembler.
So lets create one that tells it to build the standard kan.asm file, lets call it KANKICHI.SND as that seems to be the standard and put the following contents:
a group $00
high = <>>>
low = <<>
puball
lib kan.asm
If you have renamed the kan.asm file you need to change it here too.
Now lets run it with ISSND and then link the final result into an ISX file like so:
ISSND KANKICHI # created KANKICHI.ISO (intelligent Systems Object file)
ISLINK KANKICHI # creates KANKICHI.ISX (Assembled Sound CPU executable code)
Now we can test the sound using the SNES debugger called SHVC.EXE like so:
SHVC SAMPLE1
This will read all the assembled KANKICHI.ISX Machine code and run it which will play the audio of the first sample.
The files used in this process are described in the table below:
Name | Description |
---|---|
ISSND.EXE | Sound CPU Macro Assembler |
ISLINK.EXE | Linker by Intelligent Systems, creates a ISX file from compiled object files |
SHVC.ALI | |
SHVC.CMD | |
SHVC.EXE | Official SNES Debugger (Super Home Video Computer was the codename for the Super Famicom in Japan) |
SHVC.HLP | Plain text containing all the commands that can be executed in the SHVC tool |
SHVC.KEY | |
SHVCFUNC.TB0 | |
SHVCFUNC.TB1 |
The files that make up the Kankichi sound driver source code are below:
Extension | Description |
---|---|
KAN.ASM | Source code for the Driver that runs on the Sound CPU |
KAN.EQU | Header file which contains definitions included by KAN.ASM |
KANKICHI.DOC | Documentation for the KANKICHI Sound driver |
KANKICHI.ISO | Compiled object version of KAN.ASM |
KANKICHI.SND | Assembly descriptor file for how to build the ISX using ISSND tool |
L.BAT | Windows Batch file that calls ISSND and ISLINK tools on KANKICHI driver |
For more information on how this sound driver works checkout this excellent page on SNESLab:
Now that we have assembled an ISX file for all the instruments (e.g WAVE.ISX) and assembled another ISX file for the Audio Driver (e.g KANKICHI.ISX).
We need to combine these files into yet another file format called the Sound Binary Data file (SBN).
To do this we can use the ISX2SBN tool:
ISX2SBN /S800 /XSNDDAT KANKICHI WAVE
This will take the Instruments WAVE.ISX file and the KANKICHI.ISX driver file and generate a Sound Binary data file (SNDDAT.SBN) that can be linked into a SNES game.
Name | Description |
---|---|
ISX2SBN.DOC | Documentation for the ISX2SBN |
ISX2SBN.EXE | Extract Sound Binary Data file from a compiled ISX file |
Finally we will need code to run on the Main CPU to load this sound data and play it in a game, that is what we will do in the next section.
The Sound Boot program is a piece of code that you would link into your SNES ROM, it is code that runs on the Main CPU at the start of the game to initialise the APU (Audio Processor Unit).
You need to have created a Sound Binary Data file (.SBN), you can create a SBN file by converting sound ISX files into it with the isx2sbn tool which is explained in the sections above.
To build a SNES ROM check the SAMPBoot source code and use the following commands in DOS:
IS65 SAMPBOOT
ISLINK SAMPBOOT
SHVC SAMPBOOT
Name | Description |
---|---|
SBOOT.DOC | Documentation for the source code to the Sound Boot program |
SBOOT.X65 | Source code for Initialising the Audio processor with some Sound Binary Data (.SBN) |
The SS folder contains all the tools that are part of the Intelligent Systems SNES SDK, this section will cover the files that we have not listed in previous sections.
Name | Description |
---|---|
ENV.EXE | Envelope Data Create Utility (by I.Okita) |
HEX2ISX.DOC | Documentation for the HEX2ISX tool |
HEX2ISX.EXE | Convert multiple assembled HEX files into a single Intelligent Systems Executable (ISX) |
I2B.EXE | ISX To Binary/ROM converter |
INC.EXE | Creates Boot Map File (BOOTDAT.INC) (by I.Okita) |
IS65.EXE | SNES Main CPU (6502/65816) Assembler by Intelligent Systems |
ISDRNG.TB0 | Contains 10 bytes starting with 0x06 and the rest are 0x00 |
ISDRNG.TB1 | Contains 10 bytes starting with 0x06 and the rest are 0x00 |
ISDSYM.TB0 | Contains 12 bytes all are 0x00 |
ISDSYM.TB1 | Contains 12 bytes all are 0x00 |
ISPW.EXE | Possibly used to write to EPROM? |
OP1.SOD | List of 26 different SOL file references which don’t exist in this folder, so possible from another game |
SAMPLE.X65 | Sample code for the Main SNES processor |
SOAP.COM | Sound Debug tool that runs on the SNES Debugger (SHVC) |
SOAP.DOC | Documentation for the Sound Debug tool (SOAP.COM) |
SOURCE.SOD | |
XXXXX.SRC | Assembly code Result of compiling a GAK (MIDI-like) file |
VERUP | Changelog for IS-SOUND Ver1.10 |
In the SS folder we also have a tool called i2b which seems to be able to convert an ISX file into a ROM image for use flashing to a cartridge.
This is a strange application, it is not written by Intelligent systems or Nintendo and in fact it actively says it doesn’t like them when you print the usage information!
The MAP folder contains Japanese documentation about the memory mapping for the Super Nintendo.
The main file is MEMORY.MAP which contains the developer Toshio Sengoku notes on how the memory map on the Super Famicom works.
The other two files are for the two different official mapper modes 20 and 21, the file MAP20.MAP file contains the un-annotated version that is contained in the standard MEMORY.MAP file.
The custom third party Software Development Kit for the Super Nintendo created by Sculptured Software has been released online as:
This SDK is to be used along with the Sculptured Software custom development kit hardware.
For more information about the Sculptured Software hardware check out this post:
SNES (Super Famicom) Development Kit Hardware
For more information about the **Sculptured Software** development hardware check out this post
Executables:
One of the awesome features of this SDK is that it has been written to be cross platform with both the SNES and the Sega Mega Drive, so the same tool such as SSBUG.EXE can be used to develop for both systems.
In the Help documentation of this SDK (SBUGHELP.HLP) it mentions that SSBUG has support for NOB files.
There is no mention of NOB files in the parts of the official SDK that we have access to so we are not sure if this is an official Nintendo format, but the documentation certainly make it look like it is.
In the files released online we have access to a SNES assembler called SASML.EXE created by Sculptured Software Inc.
However reading the readme.txt file it mentions a bunch of other assemblers that we do not have:
Having a brief look at the SASML.EXE executable it looks like it is a forked version of SASM.EXE 65816 assemblers (SASM,SASM32 & SASML/SLINK)
SN Systems were a company that specialised in creating cross platform development kits for game consoles and the Super Nintendo was no exception.
So far the only part of the Psy-Q development kit that has been archived and released online is the Programmers Guide Documentation.
If anyone has the files that were distributed with the Psy-Q SNES SDK then let us know as it is yet to be archived or documented!
Some games such as Bubsy 2 may have been written in C, especially by Accolade according to Russell Borogove on twitter 2.
The N-SPC/Kankichi Sound driver that came with the official SDK and has been documented above was far from the only sound driver used on the SNES. In fact there are over 122 unique sound drivers that we know about, and all of them have been documented in detail on the GDRI Wiki.
If you have any interest in SNES Sound development this is not only a must read but also a site you should bookmark as you will keep coming back to it.