Super Mario World SA-1 Patch

Romhacker Vitor Vilela has just released an updated rom patch for Super Mario World.  Vitor’s patches use the SA-1 enhancement chip to allow higher performance than the original Super Nintendo could have provided.

These hacks can be played on the MiSTer, via the FXPak & FXPak Pro, via software emulation…and if you’d like to go through the trouble, you can hack an original SA-1 chip enabled game with this patched SMW rom.

Patreon Post:

In this SMW patch, the SA-1 chip allows up to 22 active sprites on-screen at the same time.  This will reduce flicker and slowdown in areas of the game where there’s a lot of enemies on-screen, but in some cases it will actually make the game harder!  In the original game, Nintendo used the sprite limit as a way to control how many enemies can spawn on-screen at once.  Here’s what Vitor’s found after the patch is applied:

The effects of bringing this setting on are interesting. Enemies like Lakitu, Digging’ chuck and Magikoopa pretty much no longer have limitation on spawning new enemies, which was a not so common situation. The same applies for Splittin’ Chucks, which depending on many enemies were on screen, they simply would not split at all or split at most two.

Soda Lake will be more challenging as well, where Torpedo Teds will have pretty much unlimited power to spawn as many torpedo’s as possible. The blurp fishes will no longer disappear out of sudden if there’s just too many on screen.


While SMW fans can just patch their rom and play, there’s also a list of update’s in Vitor’s tools package that ROM hackers can use for their own work as well.  Here’s the full list of changes to the tools:

  • Added the “finish OAM” hook, an extremely useful feature for programmers. See $40:0110-$40:0112 for more details on BW-RAM docs.
  • Added DMA remap which moves all game DMA logic to channel 2 and Windowing HDMA to channel 1, freeing up channel 7 for custom HDMA. In addition, DMA channel 0 is now reserved for transfers during game play (outside interrupts), fixing a rare bug on the LZ2/LZ3 decompressor when you decompress a GFX file while the game is running and just when the DMA executes, a NMI occurs and the DMA settings end up reseted. For the effectiveness of this solution, please change all patches to use DMA channel 2 instead of 0 or 1. This fixes issue #14 on GitHub.
  • Made all levels by default use Sprite Memory Header 0x08, allowing to all original levels have up to 22 sprites on screen. Note that I have included some logic to not take in account boss fight levels and levels that has wigglers (Forest of Illusion and Outrageous), since they are not compatible with.
  • Fixed bank switching getting incorrectly reset to original values after reapplying SA-1 Pack, which makes ROMs larger than 4 MB completely unplayable. This fixes issue #15 on GitHub
  • Fixed an issue where the Layer 3 tilemap would glitch if a custom game over screen was used. Caused by a remap error. Thanks MFG for figuring out and providing the fix. Merges pull request #18 on GitHub.
  • Fixed some inconsistencies on the programming guide.
  • Minor changes on readme file.


While it’s certainly not “necessary”, I’d eventually love to see SA-1 and widescreen hacks for A Link To The Past and Super Metroid, so people who play on software and hardware emulation on flat-panel TV’s can have a unique experience to a classic game!  Heck, maybe even parts of those game assets can even be rendered in higher resolutions, for people using software emulation!?

Liked it? Take a second to support Bob on Patreon!