What if Gradius III used FastROM instead of SA-1?
You can give it a try now! While there is no noteworthy progress on my other SA-1 works, you can check it out one of my initial experiments with Gradius III. The BPS patch is attached on this post.
Initially I was having a lot of trouble for getting SA-1 Root working on Gradius III and in hope to have at least a little idea on how the game would run on the chip, I coded a FastROM patch for it that increased the SNES CPU clock speed from 2.68 MHz to 3.58 MHz when executing code and loading data from the ROM.
The CPU itself can run at either 1.78 MHz, 2.68 MHz or 3.58 MHz depending on which feature/device the system is accessing. Accessing the WRAM (main memory) is always 2.68 MHz, while internal registers and PPU (picture chip) always 3.58 MHz. Reading the controllers (joypad, multitap, mouse, etc.) is always at 1.79 MHz. But depending on the cart, the SNES CPU can read the ROM at either 2.68 MHz or 3.58 MHz. Since most of the code and all data is read from the ROM, that could give a small performance boost to the CPU. But is it enough to eliminate slowdown?
Given that 3.58 MHz is around 33% faster than 2.68 MHz, you can expect some minor differences on places that has almost no slowdown (the speed throttle is reduced) and on places that it has extreme slowdown (like during the boss rush battle). Keep in mind that the game will not run 33% faster because there are CPU commands that already runs at 3.58 MHz like arithmetic commands and others will stay at 2.68 MHz like RAM read/write operations, don't forgetting that the game awaits for the video synchronization period for rendering the next frame.
What are your thoughts about the patch? Have you noticed any significant speed improvement? Comment it now! Given the feedback I can consider doing the same for my next works, since it's technically an intermediate step between the original game and a full SA-1 implementation.
Comments (6)
So FastROM just sounds like a quick and dirty fix. Not to say it's useless. OT: One game I'd like to see get the SA-1 treatment is Demon's Crest.
I'll give this a try later. Thank you for putting it together, interested to see the difference. Sounds like FastROM is easier to modify. Love your work, keep it up!
How difficult is FastROM to implement for other ROM's? It would be fascinating if there was a utility that could detect the SNES CPU speed for a game and allow a user to select which speed to have the SNES CPU run at (for better or worse). Sorry if this is an extreme oversimplification of the process you go through, I am greatly unfamiliar with the coding.
The process is harder than that... You need to reverse engineer all opcodes and figure out the ones that does ROM reads or jumps and remap them to the fast ROM area (which is memory map $80:8000+ for LoROM or $C0:0000+ for HiROM).
I did notice improvement in speed from the original ROM. Are you intending on merging FastROM and SA-1 together?
Since FastROM only applies to the SNES CPU, the SA-1 CPU would not have any additional speed up. But both can be useful on extreme occasions where I want to speed up the V-Blanking period to the maximum possible, but that's only in case we want more dynamic graphics during blanking or in case we want compatibility with SA-1 converted games that used to be FastROM.
