Ask any SNES veteran about Street Fighter Alpha 2 and you’ll get the same sigh: the port that pulled off the impossible, then made you wait through an awkward silence before every single fight. Well, someone finally fixed both problems — and he didn’t need Capcom’s help.
Developer gufranco has released an open-source toolchain on GitHub that rebuilds the Super Nintendo versions of Street Fighter Alpha 2 and Street Fighter Zero 2 as standard 96 Mbit (12 MB) ROMs — with the cartridge’s custom S-DD1 decompression chip and mapper designed out entirely. As Pants Pants Revolution reports, it’s a clean-room Python builder verified byte-for-byte against the Snes9x emulator’s own decompressor. The tool also spits out a 4 MB patched variant that keeps the S-DD1 requirement, for folks on hardware or flashcarts that already emulate the coprocessor.

A quick history refresher, because the backstory is half the fun. When Capcom ported its 224 Mbit CPS II arcade fighter down to a 32 Mbit SNES cartridge in late 1996, it had to squeeze mountains of 2D sprite data into a fraction of the space. Alpha 2 and Square’s Star Ocean were the only two retail games to use Nintendo’s S-DD1 chip, which decompressed graphics on the fly mid-DMA, straight to the picture processing unit. That wizardry made the port possible — and locked it to specialized cartridge boards, FPGA flashcarts, or emulators specifically coded for the chip.
Fitting 96 Mbit into the SNES’s 24-bit address space took some real craft. Decompressing every graphical stream ahead of time balloons the sprite data to about 5 MB per region — way past the original 4 MB limit — so gufranco used a “windowed LoROM” layout inspired by neviksti’s older chip-free Star Ocean conversion. Banks $C0 and above hold no storage of their own; they act as a window so the original 4 MB of code stays readable while the decompressed graphics pack into banks $40 through $7D. Whenever the game tries to arm the S-DD1 at one of seven hardware sites, a custom translation routine intercepts the call and turns it into an ordinary incrementing read. Support for the new memory map has already been merged into Snes9x via pull request 1082 — which is about as official a stamp of approval as fan tooling gets.

And then there’s the myth-busting. Everyone blamed the S-DD1 for that infamous pre-fight pause after the announcer shouts “Fight!” — but the actual culprit was the Sony SPC700 audio unit’s RAM all along (a claim Modern Vintage Gamer made years ago, and this project proves it). Before each match, the game uploads 47,915 bytes of audio samples with a custom driver that transfers a single byte per handshake. The patch pushes three bytes per handshake instead, speeding up audio transfers by 3.37 times. The longest stall drops from 2.90 seconds on the US cartridge (2.60 in Japan) to 0.78 and 0.72 seconds respectively. On the 96 Mbit image, it drops further still, thanks to a pre-computed 24,704-byte pre-fight table moved with a single DMA transfer — no more making the CPU spend 27 frames calculating the exact same numbers before every round.
As a victory lap, the toolchain applies a two-byte patch to unlock Shin Akuma, who sat hidden in the retail cartridge behind a cheat code that wasn’t even documented until 2021, plus 11 code bug fixes (218 bytes on the US release, 60 on the Japanese). No game data is distributed — you supply your own cartridge dump, and the builder does the rest.
Want the full technical backstory on the port first? Check out the trailer below:
Thirty years of fighting-game folklore, rebuilt from scratch by one person with a Python toolchain and a vendetta against a 2.9-second loading pause. This is exactly the kind of human craft that keeps the 16-bit era alive — and my flashcart just got a whole lot more interesting. Round one… without the wait.
Sources: Pants Pants Revolution, gufranco’s GitHub repo, Retroware’s 2021 deep-dive. No generative-AI involvement is reported in any source.
