Menu
  • Home
VilelaWorld

The SA-1 Collection Project

Posted on June 15, 2019December 24, 2020

Converting any game to SA-1 involves digging though various processes and it takes a considerable amount of time. Gradius III took around three months and most of the spent time was for generating the remap files, required for moving the game memory to the SA-1 CPU visible area. Below you can see the complete conversion diagram.

Pink blocks refers to automation tools. Green blocks refers to manual processes. Blue blocks refers to output files. Yellow block is the final product.

The game must be completely disassembled. DiztinGUIsh is used to generating the game disassembly, but it requires you manually reviewing the code for making sure it’s disassembling correctly. It involves at least the following:

  • Separating code and data blocks;
  • Checking for opcode sizes and alignment; and
  • Making sure all code blocks are connected to each other.

With the disassembly done, you now have to run though SA-1’s The Last Remap tool for generating the needed remap files and afterwards analyze the game disassembly to figure out if the remapped memory locations should be applied or not. The particular process I won’t be explaining on this article, but assume that it takes a lot of time. For example, on Gradius III, 380 of the 871 indexed absolute opcode remaps had to be reviewed and manually removed by myself one by one because the game had another context on these opcodes and they were indirectly responsible for half of the game crashes during the beta patch testing phrase.

Some generated parts of SA-1 Root had to be reviewed by playing the game and reaching the particular opcode to see if it should have remapped or not.

This is the main reason that it’s so hard to convert new SNES games to SA-1. In another post I will explain why is that needed, but without the game disassembly and the game remap, it’s impossible to move the game logic to the SA-1 CPU, responsible for the 10.74 MHz processing.

The solution

Recently however I found out that with bsnes-plus you can not just output trace logs, which are dumps of the game logic code (but different from disassemblies!) but also a binary file called usage map. The usage map contains some useful information about the ROM, such as which blocks are considered code, data and some of the opcode control flags.

Editing a menu option on bsnes-plus, you can export the usage map and together the trace log you can pretty much generate the entire game disassembly and its context by just playing the game! The main drawback is that you have must playthough the entire game for complete coverage. The more you play, the more different enemies, effects, stages and bosses you reach, the more the emulator will know about the ROM and more reliable the output disassembly will be.

Some games like F-Zero you can generate a reliable disassembly by playing it around a half hour, but others like Secret of Mana you would need to play the game for several hours, trigger different events, play with all magic combinations and try reaching out most of the areas.

However the good thing is that with the information available, a SA-1 game conversion that would take several months to be complete, can be reduced to only a couple of weeks using this strategy.

Here bsnes-plus is used to generate a trace log and an usage map which feeds directly DiztinGUIsh and SA-1 TLR and automatizes most of the remapping work and manual analysis.

I edited both DiztinGUIsh and SA-1 TLR for using the usage map and/or trace log for automatically analyzing most of the manual work done by me. With that, I can focus on actually optimizing the game which is the process done on the right side of the diagram. The manual work of the remap process is now just a matter of playing the game!

Now you can help me!

The process of generating trace log and usage map is so easy that you can now directly help me generating the analysis files! Combine that with several people available to play, we won’t be just able to convert games faster but also do several games at the same time!

You can download the version 04 of bsnes-plus here: https://github.com/devinacker/bsnes-plus/releases/tag/v04. Download and extract the 7-zip file and open “bsnes.exe”.

Please note that it you must use version v04, because the most recent bsnes-plus versions will not work with this approach.

The main bsnes-plus window.

Load a SNES game by either System β†’ Load Cartridge on the main menu or by drag-dropping the game directly on the main window. Make sure to configure the video and audio drivers on Settings β†’ Configuration if needed.

An example game that can be used using this method πŸ˜‰

Before playing, we should enable trace logging and save usage maps on disk. For doing that, click Tools β†’ Debugger (1). The debugger window should open. On its right side, check “Enable trace mask” (2) first then “Trace S-CPU opcodes” (3). Then (4) click Misc β†’ Options (5) and mark “Cache memory usage table to disk” (6). Then make sure to restart your game via System β†’ Reset.

It’s important to do each step in order!

You can use save states and rewinds without problem. With that, the only thing left to do is playing the game! Play it and explore the most different possible combinations and endings.

Before leaving the emulator however, unmark “Trace S-CPU opcodes” (3) for marking sure the trace log file is properly written. Once you exit, bsnes-plus should output the following files on the ROM folder:

game-name-trace.log
game-name-usage.bin

IMPORTANT! If you play the game again after generating the files, you must rename the trace log file to another name because if you play it again and enable trace logging, the previous file will be completely overwritten and lost! So make sure to rename it, for example, “game-name-trace-1.log”, “game-name-trace-2.log”, etc. Usage maps does not have that problem.

Compress these files to a .zip, .7z or .rar file and submit it to me, either though e-mail vitor.vilela.mario at gmail.com or Discord Vitor Vilela#1930. With that information I will be able to convert any game to SA-1 much better and faster.

I’m accepting any game that does not use any enhancement chip, with the exception of the DSP 1-4 games. If you don’t have any game in mind, I have the following suggestions:

  • Act Raiser
  • Act Raiser 2
  • Contra III
  • Demon’s Crest
  • Race Drivin’
  • R-Type III
  • The Legend of Zelda – A Link to the Past
  • Secret of Mana
  • SimCity
  • SimCity 2000
  • Super Castlevania 4
  • Super Ghouls ‘N Ghosts
  • Super Mario All-Stars
  • Super Metroid
  • Super R-Type

Keep in mind that even if you submit any game trace log and usage map, it does not mean that it will get a SA-1 conversion! There are several factors behind a conversion, but submitting it you will increase the chances of the conversion happening drastically!

Ready for playing your favorite game again with hopes for a SA-1 conversion?!

25 thoughts on “The SA-1 Collection Project”

  1. Erivando BR says:
    June 15, 2019 at 10:18 am

    Very nice!
    Enviarei alguns em breve, excelente trabalho.

    Good luck

    Reply
  2. Guiile3dfx says:
    June 15, 2019 at 2:41 pm

    Very good … I’ll start doing and send you … the first will be Super Catlevania 4.

    Reply
  3. Bryan Elliott says:
    June 16, 2019 at 4:31 am

    Does bsnes-plus support .lsmv files? I’ll bet you can get a significant portion of the mapping done for most games by running it with one or two 100% speedruns.

    Reply
    1. Vitor says:
      June 16, 2019 at 4:41 am

      Unfortunately even if they support it, the timing differences between bsnes-plus from and the emulator which was recorded will likely make the game desync… So the thing is, the movie must be done on an emulator with the same timing specs as bsnes-plus… Which I believe only recording on bsnes-plus directly will make it possible. But cool idea regardless!

      Reply
      1. Bryan Elliott says:
        June 16, 2019 at 4:50 am

        Foooo.

        Reply
        1. Bryan Elliott says:
          June 16, 2019 at 4:58 am

          I retract my foooo.

          It seems to me that a run that desyncs, say, 20 minutes in would still produce some useful data. I’m assuming here that a _complete_ single run is not necessary, and that it’s possible to combine maps.

          Reply
          1. Bryan Elliott says:
            June 16, 2019 at 5:02 am

            I retract my foo even further:

            https://repo.or.cz/lsnes.git/tree

            lsnes is also a fork of bsnes. They may have similar timing characteristics.

  4. Bryan Elliott says:
    June 16, 2019 at 4:49 am

    Looks like “no” – it supports bsv files. The .lsmv format appears to be what everything on TASVideos is done in (because lsnes). The documentation on the file format is here: http://tasvideos.org/Lsnes/MovieFormat.html

    It would probably be a big help to be able to get a majority of your mapping done unattended.

    Reply
  5. creaothceann says:
    June 16, 2019 at 7:41 am

    It would be useful if (some of) the steps in handling the emulator were automated, especially the trace log numbering…

    Reply
  6. Anonymous says:
    June 16, 2019 at 9:52 am

    Does the whole process make converting romhacked games to SA-1 easier as well?

    For instance, if we finish analyzing Super Castlevania IV, can this knowledge be applied to the Super Castlevania IV Other Castle hack (it’s definitely worth playing, BTW: https://www.romhacking.net/hacks/3411/)?

    Reply
    1. Vitor says:
      June 16, 2019 at 12:57 pm

      Correct!

      Reply
  7. L says:
    June 17, 2019 at 9:42 pm

    I’ll have to get onto Final Fight 3 – that thing has some of the worst snes slowdown in co-op or if you play with the CPU

    Reply
  8. J says:
    July 7, 2019 at 9:49 pm

    I will start Super Aleste. Is there a google spreadsheet so we can keep track of in progress and finished games?

    Reply
    1. Vitor says:
      August 11, 2019 at 5:09 pm

      That’s a good idea. I will plan something about it.

      Reply
  9. T says:
    July 11, 2019 at 3:01 pm

    Wouldn’t you be able to just use some 100% Tool Assisted Speedruns to get most of the data without having to play the actual game ? Looking forward to seeing more of these games famously known for their slowdown in action.

    Reply
    1. Vitor says:
      August 11, 2019 at 5:08 pm

      100% TAS would be extremely useful! The only problem is that they were recorded using other emulators and putting them on bsnes-plus would not be possible due of different emulation timings, sadly.

      Reply
  10. Christian says:
    October 25, 2019 at 7:46 pm

    Hey Vitor,
    awesome work with Gradius III and Contra III ! I would love a patch for Axelay! It’s a masterpiece but sadly with a lot of slowdowns.

    Reply
    1. Vitor says:
      December 24, 2020 at 9:22 pm

      You’re welcome, thank you! I’ll eventually work with Alexay, stay tuned in!

      Reply
  11. Brandon Ruggles says:
    May 18, 2020 at 7:52 pm

    Are you still collecting data for Super Metroid? I’ve been wanting to replay it and found this page. I’d be willing to do anything to help, if you’re still wanting some data.

    Reply
    1. Vitor says:
      December 24, 2020 at 9:18 pm

      Hi! Sorry for the late reply. I’m looking forward for Super Metroid traces

      Reply
  12. break says:
    June 9, 2020 at 12:54 pm

    Yo, just found out about all of this SA-1 (Expansion Coprocessor Chip) stuff today !
    A friend told me about how it makes the SNES game “Megaman X” a blast to replay.
    So would this only speed up action and adventure…or could this be used to speed up older RPGs ?
    Very interesting stuff…too bad the old Nintendo Gameboy did not have an upgraded chip like this ^_^”

    Reply
    1. Vitor says:
      December 24, 2020 at 9:15 pm

      Cool to hear! SA-1 can be used to accelerate pretty much any game type.

      Reply
  13. Edale says:
    November 2, 2020 at 2:59 am

    Would an SA-1 enhancement fix a slowdown caused by NMI timing issues?

    Because I’ve been helping with the Final Fantasy VI MSU-1 mod (not the coding aspects) for a while, and right now pretty much the only reason the mod isn’t “complete” is because we don’t have fading working because it causes slowdowns due to NMI timing issues.

    If an SA-1 mod would let us fix this, I might be willing to play through an unmodded version of the game to generate the needed files to make the SA-1 mod… God knows I’ve played through the game enough to be able to ensure I don’t miss much…

    Reply
    1. Vitor says:
      December 24, 2020 at 9:14 pm

      Does the slowdown exist in the original game (without MSU-1) as well?

      Reply
      1. Edale says:
        December 28, 2020 at 7:37 am

        No. I’d have to check with Insidious661, the actual coder for the mod, to get all the technical details, but my understanding is the timing for things in FFVI is very tight (and tied closely to the framerate, as most things are internally timed by the number frames drawn), and in many parts the number of NMI interrupts needed for fading is enough to screw with that timing, slowing everything down.
        So the normal fading works fine, but the NMI’s needed for MSU-1 fading slows things down.
        I should mention I’ve never actually seen one of the attempts at getting fading working, they never made it past Insidious’ initial testings.

        Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • The SA-1 Collection Project
  • The Beginning

Recent Comments

  • Edale on The SA-1 Collection Project
  • Vitor on The SA-1 Collection Project
  • Vitor on The SA-1 Collection Project
  • Vitor on The SA-1 Collection Project
  • Vitor on The SA-1 Collection Project

Archives

  • June 2019
  • May 2019

Categories

  • Uncategorized

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
©2025 VilelaWorld | WordPress Theme by Superbthemes.com