Although the SNES was quite technically advanced at the time of it's release (with built in features like Mode 7 wowing players), developers were continually pushing it further and further, and eventually what they desired could no longer be achieved on the basic hardware, no matter how much they tried. This lead to coprocessors and other exotic devices being built into cartridges, so that games could take advantage of them. This could lead to more expensive games for the end consumer, but it could also lead to graphically advanced games which were much more popular and sold more copies. Since so many different games were released with chips in, I think it's not taking too much of a leap to say that the chip games did more than break even.
Although special chips were available in the game paks from the start - for example in Pilotwings - ever more powerful ones turned up over time. The aim of this writeup is to provide basic information about each chip, how to detect it in a ROM using only a hex editor, and to provide links for further information. I could probably post the source to emulate each chip (or at least, as much as is currently known) but that information is likely to change at any time, and for so many of the chips the emulation isn't finished, and updating the source all the time would be a nightmare. If you want to see how the emulation works, check out the source to Snes9X, Zsnes, or SNEeSe.
NB: As with emulation in general, this is a work in progress. If you find a ROM that is definitely a special chip game but it doesn't fit in with the scheme below, that doesn't mean you're wrong. Research is currently going on, and the information I present here is (I hope) the latest findings of the researchers. Full credit goes to them for finding out all this, I'm just bringing it to E2.
A note on using a Hex Editor to detect ROMs... The $7FD5 / $FFD5 is the ROM speed and the $7FD6 / $FFD6 is the Memory Map. Which of those you check depends on whether you have a LoROM or a HiROM - you can find this out either by scanning your ROM with a tool such as Nach's SNES ROM Tools, or some emulators will tell you on ROM load. Come to think of it, a few emulators detect special chips on startup too, this information here just explains exactly what the emulator is checking for. And remember, if your ROM has a 512 byte header, you have to add $200 onto the values, or else you will be looking in the wrong place. Some of the chips have multiple values for ROM speed / Memory map - generally, reasons for this are unknown, although in some cases it distinguishes between games with SRAM for saves and games with no SRAM.
Chips
DSP - the first chip used on the SNES, and in fact it was planned to be built into the SNES hardware. When time or money constraints didn't allow this, the games which had already been developed to take advantage of it were released anyway, with a DSP chip inside the cartridge. There were in fact 6 variations of the DSP chip (although 3 of them are all but identical). All had the same hardware, but different software.
The DSP-1 had 3 variants (vanilla, DSP-1A, and DSP-1B), which were essentially bugfixes. Emulator authors realised that this meant if they could perfectly emulate the DSP-1B (the one with all the bugs fixed) then all DSP-1 games would work. This is roughly the state that DSP-1 emulation has got to now.. although it's not perfect, it's pretty much good enough to play most games. Pick up either the latest version of Snes9x or a Zsnes WIP to see this emulation in action.
To detect whether a ROM uses the DSP-1, then open it in a hex editor such as frhed. If it is a LoRom then check the location $7FD5 - a value of 0x20, 0x21, 0x30 or 0x31 indicates some kind of a DSP-1. If you need confirmation, also check location $7FD6: A value of 0x3 or 0x5 indicates a DSP-1 of some kind. If you are working with a HiRom, then do the same as above, except use the locations $FFD5 and $FFD6.
The following games used one of the DSP-1 chips:
Ace Wo Nerae
Armored Trooper Votoms
Ballz 3D
Battle Racers
Bike Daisuki! Hashiriya Kon
Final Stretch
Korean League
Lock On/Super Air Diver
Michael Andretti's Indy Car Challenge
Pilotwings
Super 3D Baseball
Super Air Diver 2
Super Bases Loaded 2
Super F1 Circus Gaiden
Super Mario Kart
Suzuka 8 Hours
Syutoko Battle Racing 2
Syutoko Battle Racing 94
The DSP-2 was a chip only used in the SNES port of Dungeon Master... or at least that is the only one known. If a LoROM is a DSP-2 game, then it should have a value of 0x20 at $7FD5 and a value of 0x5 at $7FD6. The DSP-2 is emulated now in Snes9x.
The DSP-3 was only used in SD Gundam GX. To detect this chip accurately, you have to look in a third place. For a LoROM, $7FD5 should be 0x30, $7FD6 should be 0x5, and $7FDA should be 0xB2. For a HiROM, the locations you need to check are $FFD5, $FFD6, and $FFDA. The DSP-3 is not emulated.
The final chip in this range, the DSP-4, was only used in Top Gear 3000. You should find a value of 0x30 at $7FD5 / $FFD5 and a value of 0x3 at $7FD6 / $FFD6. If you've read this all, hopefully you should know which ROMs need you to look at $7F... and which need $FF... The DSP-4 is also not properly emulated yet.
The SA-1 is, according to TRAC, a "Custom CPU with a 65c816 execution core", just like the SNES main CPU, although it runs faster, and has a heap of added features. For one, Matthew Kendora tells me it has "bitmap to bitplane DMA", and while I don't know what that is, I'm sure someone out there will.
To detect an SA-1, look for a value of 0x23 in $XFD5 and a value of 0x34 or 0x35 in $XFD6.
The SA-1 was used in a large number of games, although some of the ones I list below are not confirmed. However, here is an almost complete list of SA-1 games...
Asahi Shinbun Rensai Kato Ichi-Ni-San Kudan Shogi Shingiru -Unverified
Daisen Ryaku Expert WW2 War in Europe -Unverified
Derby Jockey 2 -Unverified
Dragon Ball Z Hyper Dimension
Habu Meijin no Omoshiro Syouhi -Unverified
Harukanaru Augusta 3 Masters New -Unverified
Itoi Shigesato's Bass Turi No 1 -Unverified
J-League '96 Dream Stadium -Unverified
Jikkyou Oshaberi Parodius
Jumpin' Derby -Unverified
Kakinoki Shogi -Unverified
Kirby Super Star/Kirby's Fun Pak/Hoshi No Kirby Super Deluxe
Kirby's Dream Land 3/Hoshi No Kirby 3
Marvelous -Unverified
Masoukishin The Lord of Elemental -Unverified
Mini 4 Ku Shining Scorpion Let's & Go!! -Unverified
Pachi Slot Monogatari PAL Kogyo Special -Unverified
Pebble Beach No Hato 2 New Tournament Edition
PGA European Tour
PGA Tour '96
Power Rangers Zeo Battle Racers
Pro Kishi Simulation Kishi No Hanamichi -Unverified
Rin Kaihou 9 Dan No Igo Taidou -Unverified
SD F-1 Grand Prix -Unverified
SD Gundam G-NEXT -Unverified
SD Gundam G-NEXT w/Rom Pack Collection -Unverified
Shin Syogi Club -Unverified
Shogi Saikyou -Unverified
Shogi Saikyou 2 -Unverified
Shogi Mahjing -Unverified
Super Bomberman Panic Bomber World
Super Mario RPG
Super Shogi 3 Kitaihei -Unverified
Taikyoku-Igo Idaten -Unverified
Takemiya Masaki 9 Dan No Igo Taisyou -Unverified
The SDD-1 was, until very recently, one of the big problem chips for SNES emulation. Although a workaround (described in the Graphics Pack node) was developed, it was unwieldy, and technically it was cheating. Basically, the SDD-1 was a custom graphics decompressor which could decompress the data inside the ROM and feed it to the SNES when it was needed. This was used in games which required a lot of graphics (pushing the limit of a SNES as far as memory went) such as the frantic figher Street Fighter Alpha 2 and the graphically rich RPG Star Ocean. The chip algorithm was finally cracked about half way through 2003, and now the code is available freely for compression and decompression - in fact, as this node was being conceived and written, the SDD-1 code for on the fly accurate decompression was added to the source of Zsnes. Look out for it in a future Zsnes WIP.
The chip was only used in Street Fighter Alpha 2, (both US and Europe versions), the Japanese version, Street Fighter Zero 2, and the Japan only Star Ocean. To detect the chip, look for 0x32 in $XFD5 and either 0x43 or 0x45 in $XDF6 - in this case, the memory map can be two different values because Star Ocean has SRAM and Street Fighter Alpha 2 doesn't.
The SPC7110 is similar to the SDD-1, in that it is a custom graphics decompression chip. It was used in Far East of Eden Zero, Far East of Eden Zero Shounen no Jump, Super Power League 4, and Momotarou Dentetsu Happy. It has not yet been properly emulated, although graphics packs are available for the 4 games.. although some are almost unoptimised, meaning they are absolutely insane sizes. FEoEZSnJ is, I believe, over 100 megabytes.
To detect this chip, look for 0x3A in $XFD5 and either 0xF5 or 0xF9 in $XFD6 - FEoEz and the SnJ variation both have 0xF9 because they also have a Real Time Clock in the chip, as well as using it's graphics decompression functions. Another way to tell is that if the ROM is loaded, even if you don't have the graphics packs for the game, the game will carry out a memory check. You have to wait, press A, reset the machine, wait, press B, reset the machine, and then the game proper will start. This occurs, as far as I am aware, on all SPC7110 games.
The SuperFX (aka the "Mario chip" in Japan) was an advancement of Mode 7 in that it allowed for realtime 3D effects on things that weren't just flat surfaces. Credit to TheBooBooKitty for that last sentence, he put it better than I could.... Most variants of the SuperFX are emulated well enough to play games which use them.
The SuperFX was a RISC chip made by Nintendo, and like the DSP-1, there were three variants: one 10.5 MHz flavour, one at 21 MHz, and then a variation of the third with added trignometric functions. The following games used the SuperFX, or the SuperFX2 (the 21 MHz version):
Dirt Trax FX
Doom
FX Fighter (Beta)
Star Fox/Starwing
Star Fox 2 (Beta)
Star Fox: Competition Edition/Starwing: Competition Edition
Stunt Race FX/Wild Trax
Super Mario World 2: Yoshi's Island
Vortex
Winter Gold FX
To detect a SuperFX, look for 0x20 in $XFD5 and 0x13 in $XFD6 (for a SuperFX) or one of 0x14, 0x15, and 0x1A in $XFD6 (for a SuperFX2).
Capcom's C4 chip was used only in Mega Man X2 and Mega Man X3 (along with the Japanese versions of the same games, Rockman X2 and it's sequel) to do flashy things like have some simple wireframe models rendered in real time - this was used in some levels as mid bosses for Mega Man to fight. A rotating X head was also present at the start of one of the games. The chip is pretty close to perfectly emulated, and Nach of Zsnes has contributed to getting many of the ops Bit Perfect - indeed, some parts of the game looked better than on a real SNES when played on Zsnes.
To detect a C4 chip, look for 0x20 in $XFD5 and 0xF3 in $XFD6. Another note about this chip is that like the SPC7110, it has a start up memory check (which is now emulated). Hold down B on controller 2 while starting either MMX2 or 3 and you will see 8 checks that are carried out to see if the chip is in working order.
The OBC1 is only used in the game Metal Combat - Falcon's Revenge. It can be emulated in Zsnes 1.36 or later. To detect the chip, look for 0x30 in $XFD5 and 0x25 in $XFD6. BEWARE! There is a Metal Combat ROM floating around which was hacked to confuse emulators into thinking it was a Super FX game. This was done in the days when Metal Combat wasn't emulated, and someone managed to hex edit a few bytes so that the game ran a little better than it would otherwise, at first. However, this version of the ROM is wrong, doesn't play correctly, and should not be distributed (even though tools like GoodSNES list it as the correct dump, and then list the correct dump as a hack. Tut, tut). If you have it, you can fix it with a hex editor manually (see Nach's site at the bottom of this node for instructions) or you can go for the easy option of scanning it with Nach's SNES ROM Tools.
Seta made a few custom chips for their games - their DSP was used in F1ROC2 and Hayazashi 2 - Dan Morita Shogi while their RISC was used in Hayazashi Nidan Morita Shogi 2. To detect a Seta DSP, look for 0x30 in $XFD5 and 0xF6 in $XFD6. A Seta RISC should have 0x30 in $XFD5 and 0xF5 in $XFD6.
The final special chip (which I am aware of..) is the Real Time Clock used in Dai Kaiju Monogatari 2 (although both FEoEZ variants have RTCs, they are built into the SPC7110, and this is a separate chip). To detect this look for 0x35 in $XFD5 and 0x55 in $XFD6. The RTC does exactly what it sounds like: it's a clock that keeps your game synchronsied with the current time even when the cartridge isn't being played. This works until the battery inside the cartridge runs out, although with the emulation currently available (some emulators sync to your PC's clock; others let you select any time for the clock) you don't need to worry about anything.
Those are all the special chips that I have been able to gather data about. Of the above, some are emulated very well (DSP-1, C4), some not so well, and some not at all (SPC7110). However, everything is progressing, and each day more is figured out and emulated. SDD-1 was recently cracked, SPC7110 is being started on at some point in the near future, and the DSP-2 to 4 are being worked on (2 has been pretty much done). If you want to see the chip emulation progressing, grab a Zsnes WIP from http://ipher.emuhost.com.
Credits / Thanks:
I wouldn't have been able to write any of this without these hard working people:
- The Zsnes team, for coding a brilliant emulator which emulates a heap of chips: Zsknight, _Demo_, pagefault, and especially..
- Nach, for putting a feature I requested in Zsnes, letting me hang in his IRC channel, providing answers to my questions, and letting me use data he has collected for his excellent tool. His web page was what most of this was cribbed from, I suggest you read that for a better set out and more in depth read.
- MKendora and TRAC for programming Snes9x and SNEeSe respectively, and for answering my questions too.
- Anyone and everyone who has contributed to the emulation of the above: not least Nach, MKendora, Dark Force, The Dumper, ZsKnight, Overload, Andreas Naive, pagefault, neviksti, anomie... Apologies if I missed you.
Links / Sources:
- Nach's page: http://www.geocities/joecool22us/chipinfo.htm for the information and http://www.geocities.com/jeocool22us/mirror.htm for NSRT.
- Forum link to the SDD-1 comp / decomp pack: http://www.snes9x.com/forum/topic.asp?TOPIC_ID=8600&ARCHIVE=&whichpage=1
- Zsnes's official site: http://www.zsnes.com
- WIP builds of Zsnes: http://ipher.emuhost.com/zsnes/
- Snes9X official site: http://www.snes9x.com
- SNEeSe official site: http://www.emuunlim.com/sneese/
- Overload's DSP page with source for each emulated Op: http://www.users.bigpond.com/stinkfish/dsp/
And remember... just as emulation is work in progress, this node is work in progress. I'll try to keep up with new developments and discoveries, but if you think there is something I have missed, or something I have typed incorrectly, please let me know.
Cheers to Servo5678 for a correction.