SA-1 patched Roms work fine in MiSTer
- Chris23235
- Top Contributor
- Posts: 982
- Joined: Sun May 24, 2020 8:45 pm
- Has thanked: 127 times
- Been thanked: 197 times
SA-1 patched Roms work fine in MiSTer
Maybe this is old news to most of you, but I just stumbled over this project:
https://github.com/VitorVilela7/SA1-Root/releases
Vitor Vilela patched the code of several SNES Roms that were plagued by slowdowns so that they make use of the SA-1 chip that was in fact a second CPU that ran much faster than the CPU in the SNES. SA-1 was by far the most often used special chip it was used in 34 different games. The patched roms (Contra III, Gradius III, Super R-Type, Super Mario World) run much more smooth now and as the SNES core supports the SA-1 chip they all work fine in MiSTer.
https://github.com/VitorVilela7/SA1-Root/releases
Vitor Vilela patched the code of several SNES Roms that were plagued by slowdowns so that they make use of the SA-1 chip that was in fact a second CPU that ran much faster than the CPU in the SNES. SA-1 was by far the most often used special chip it was used in 34 different games. The patched roms (Contra III, Gradius III, Super R-Type, Super Mario World) run much more smooth now and as the SNES core supports the SA-1 chip they all work fine in MiSTer.
- SwedishGojira
- Posts: 64
- Joined: Sun May 24, 2020 7:26 pm
- Location: Sweden
- Has thanked: 26 times
- Been thanked: 28 times
- Contact:
Re: SA-1 patched Roms work fine in MiSTer
You can get pretty much the same results with any game in the SNES core by just toggling the turbo setting in the OSD so I find these patches not necessary on the MiSTer.
Check out my MiSTer scripts on Github.
- Chris23235
- Top Contributor
- Posts: 982
- Joined: Sun May 24, 2020 8:45 pm
- Has thanked: 127 times
- Been thanked: 197 times
Re: SA-1 patched Roms work fine in MiSTer
The turbo function isn't working flawless in all games, e.g. Contra III doesn't load and Super Mario World shows graphical corruption. Gradius III has a higher speed with the SA-1 hack in general.
In all these cases the SA-1 versions are the better choice. The advantage of the SA-1 versions over the turbo button is that the gamecode is altered to prevent issues and to take full use of the better CPU.
In all these cases the SA-1 versions are the better choice. The advantage of the SA-1 versions over the turbo button is that the gamecode is altered to prevent issues and to take full use of the better CPU.
-
- Posts: 125
- Joined: Wed Jun 03, 2020 5:39 pm
- Has thanked: 8 times
- Been thanked: 36 times
Re: SA-1 patched Roms work fine in MiSTer
I was aware of Vilela's work but had missed the recent hack of Super R-Type. Thanks for sharing.
Concerning SA-1 hacks versus using the turbo option, there is some nice documentation on the core's GitHub page:
https://github.com/MiSTer-devel/SNES_Mi ... S_Turbo.md
Concerning SA-1 hacks versus using the turbo option, there is some nice documentation on the core's GitHub page:
https://github.com/MiSTer-devel/SNES_Mi ... S_Turbo.md
- Alkadian
- Top Contributor
- Posts: 728
- Joined: Thu May 28, 2020 9:55 am
- Has thanked: 294 times
- Been thanked: 119 times
Re: SA-1 patched Roms work fine in MiSTer
Thanks for sharing that. I have just tried all three patches and they look great to me!Chris23235 wrote: ↑Mon Jan 04, 2021 6:47 pm Maybe this is old news to most of you, but I just stumbled over this project:
https://github.com/VitorVilela7/SA1-Root/releases
Vitor Vilela patched the code of several SNES Roms that were plagued by slowdowns so that they make use of the SA-1 chip that was in fact a second CPU that ran much faster than the CPU in the SNES. SA-1 was by far the most often used special chip it was used in 34 different games. The patched roms (Contra III, Gradius III, Super R-Type, Super Mario World) run much more smooth now and as the SNES core supports the SA-1 chip they all work fine in MiSTer.
Re: SA-1 patched Roms work fine in MiSTer
this is great news for SMW rom hack players (like myself)
mind you, most SMW rom hacks dont make use of the SA-1 mod in Lunar Magic (the SMW level/game editor which enables SA-1)
but its good to know when SA-1 rom hacks get developed, they will run on the mister !
mind you, most SMW rom hacks dont make use of the SA-1 mod in Lunar Magic (the SMW level/game editor which enables SA-1)
but its good to know when SA-1 rom hacks get developed, they will run on the mister !
-
- Top Contributor
- Posts: 381
- Joined: Tue Jun 16, 2020 12:22 pm
- Has thanked: 58 times
- Been thanked: 77 times
Re: SA-1 patched Roms work fine in MiSTer
Vitor Vilela have been working on another project similar to this.
Called FastROM https://www.youtube.com/watch?v=9QCD0KvHQpI&t=23s
Which also can help slowdowns/etc.
Called FastROM https://www.youtube.com/watch?v=9QCD0KvHQpI&t=23s
Which also can help slowdowns/etc.
-
- Posts: 125
- Joined: Wed Jun 03, 2020 5:39 pm
- Has thanked: 8 times
- Been thanked: 36 times
Re: SA-1 patched Roms work fine in MiSTer
Interesting. Out of curiosity, I used uCON64 to check whether my library of 184 SNES games use FastROM or SlowROM. It appears that ~60% have FastROM. Those are typically later releases. For example, Actraiser, Super R-Type, Top Gear and Super Turrican use SlowROM whereas their sequels Actraiser 2, R-Type 3, Top Gear 2 and Super Turrican 2 use FastROM.grizzly wrote: ↑Wed Jan 06, 2021 3:15 pm Vitor Vilela have been working on another project similar to this.
Called FastROM https://www.youtube.com/watch?v=9QCD0KvHQpI&t=23s
Which also can help slowdowns/etc.
Although I suspect that there are other more important factors behind the slowdown found in early releases for the system, there might be some potential for improvement if one could convert the SlowROM games to FastROM.
- Chris23235
- Top Contributor
- Posts: 982
- Joined: Sun May 24, 2020 8:45 pm
- Has thanked: 127 times
- Been thanked: 197 times
Re: SA-1 patched Roms work fine in MiSTer
FastROM can speed up games significantly, because alongside to the faster ROM access the CPU clocks 30% higher on the SNES.
Re: SA-1 patched Roms work fine in MiSTer
It's not really "alongside"; running the CPU clock faster is how the faster ROM access is achieved, and it's sped up specifically for cartridge access by the CPU. Cycles that access non-cartridge hardware are the same speed regardless of the Fast/SlowROM setting, as are DMA transfers.Chris23235 wrote: ↑Thu Jan 07, 2021 9:41 am FastROM can speed up games significantly, because alongside to the faster ROM access the CPU clocks 30% higher on the SNES.
- Chris23235
- Top Contributor
- Posts: 982
- Joined: Sun May 24, 2020 8:45 pm
- Has thanked: 127 times
- Been thanked: 197 times
Re: SA-1 patched Roms work fine in MiSTer
Thanks for the explanation. As SloROM access is keeping the CPU at the normal speed it is not as good as I first thought.
Re: SA-1 patched Roms work fine in MiSTer
I'm not sure how the Turbo function on the MiSTer works exactly but the idea of converting SlowROM games to FastROM isn't new at all. But the gains from doing so are probably going to be pretty small. The SNES CPU takes a different number of master cycles each CPU cycle depending on the memory being accessed. SlowROM accesses take 8 master cycles. FastROM accesses take 6 master cycles. But that's just the CPU reading from ROM. Cycles that are reading or writing WorkRAM or internal registers won't be any faster. And DMA from ROM is not faster from FastROM so no benefit there.
If a game is just *barely* missing its window to complete the calculations for each frame in time then maybe FastROM would be enough to make a difference. It'd be easiest to use an emulator that was modified to try to find this out. You'd want an option you could toggle to make all SlowROM accesses take only 6 master cycles instead of 8 master cycles. Otherwise to find out if it would make a significant difference you're going to have to do significant patching to the game to make sure the code execution and data accesses are happening through the ROM banks that FastROM access will occur.
If anyone here knows how MiSTer's Turbo mode works I'd like to hear about it. It's not clear if it's overclocking the CPU, changing CPU instruction timing, removing DRAM refresh delays, making all memory accesses run at FastROM speed.
If a game is just *barely* missing its window to complete the calculations for each frame in time then maybe FastROM would be enough to make a difference. It'd be easiest to use an emulator that was modified to try to find this out. You'd want an option you could toggle to make all SlowROM accesses take only 6 master cycles instead of 8 master cycles. Otherwise to find out if it would make a significant difference you're going to have to do significant patching to the game to make sure the code execution and data accesses are happening through the ROM banks that FastROM access will occur.
If anyone here knows how MiSTer's Turbo mode works I'd like to hear about it. It's not clear if it's overclocking the CPU, changing CPU instruction timing, removing DRAM refresh delays, making all memory accesses run at FastROM speed.
Re: SA-1 patched Roms work fine in MiSTer
I'm not totally sure, but at first glance my best guess is that Turbo means "making all non-interrupt-context memory [not MMIO] accesses run at 20% faster than FastROM speed". I guess this might correspond to setting the CPU clock duty cycle to 50% instead of the canonical SNES behavior that can apparently be summarized as "wait, what? CPU clock duty cycle? are you the datasheet police?".
Code: Select all
process( SPEED, MEMSEL, REFRESHED, CPU_ACTIVEr, TURBO, P65_CLK_CNT, P65_ACCESSED_PERIPHERAL_CNT)
begin
-- Turbo should only occur when the cpu is ONLY accessing ram/rom, in otherwords during the main game loop
if TURBO = '1' and P65_ACCESSED_PERIPHERAL_CNT = x"0" then
CPU_LAST_CLOCK <= x"4";
elsif REFRESHED = '1' and CPU_ACTIVEr = '1' then
CPU_LAST_CLOCK <= x"7";
elsif SPEED = FAST or (SPEED = SLOWFAST and MEMSEL = '1') then
CPU_LAST_CLOCK <= x"5";
elsif SPEED = SLOW or (SPEED = SLOWFAST and MEMSEL = '0') then
CPU_LAST_CLOCK <= x"7";
else
CPU_LAST_CLOCK <= x"B";
end if;
[...]
if DMA_ACTIVE = '1' or NMI_EN = '0' or NMI_FLAG = '1' or VBLANK = '1' or HBLANK = '1' or ((P65_A_HIGH > x"1F" and P65_A_HIGH < x"80") and (P65_BANK < x"40" or (P65_BANK > x"7F" and P65_BANK < x"C0"))) then
P65_ACCESSED_PERIPHERAL_CNT <= x"3F";