Suggested intro text
Welcome to the 4 frame improvement to the SMW credits glitch run! Credit to p4plus2 for thinking of the method to do this.
Suggested game objectives
- Emulator used: lsnes-expansion-p4plus2-credittohim-uuuh-hedidnttestthisyetthough
- Aims for the goal of completing the process of reaching the THE END of a completed game which reached the state of the finished goal of winning in the game... as fast as possible!
- It also uses a bunch of controllers to complete the goal of finishi-
- It's also faster than the current run by 4 frames
- Credit to p4plus2 for finding the mysterious thing that makes this possible
Suggested comments
How to play back the file on a normal lsnes rr2 version
For your convenience (and probably mine because I don't have the version either), I made a fancy Lua script to run which makes the run play back correctly! In fact, it's also already in the movie file itself so you can also simply extract the script.
It also only needs to run on the last frame of input (after that you can use Reset Lua VM to remove all remaining callbacks) so it doesn't make the run any longer.
What do you mean you want an explanation for the mysterious thing
Okay, okay, it's the expansion port on the SNES! (see picture below) (credit to p4plus2 for thinking of this)
SNES expansion port
Turns out the expansion port registers are found on addresses $2184-$21FF which makes them very similar to controller regsiters (adresses $4218-$421F).
The differences are quite important though.
One is pretty obvious: Instead of 8 arbitrary bytes with the controllers, we have 124 arbitrary bytes with the expansion port.
The other one is just as useful though: In practice (as in, on actual hardware), all 124 bytes can be changed at the speed of the SNES CPU. This means in theory you could set all 124 bytes to 0xA9 and start executing them. Then right after the CPU fetched the first byte you can change all 124 bytes to hold, say, 0x96. The resulting first instruction would be A9 96 (LDA #$96).
Since the value can change every fetch of the byte, p4plus2 found the easy method to emulate it by just writing a byte buffer for all the bytes returned to the CPU as soon as it requires them. This is the expansionportdata file you see inside the movie file, even though it's useless since it isn't read by the normal emulator.
In this movie a jump to the expansion port is used to write a program into memory (all in the last frame, so that it doesn't make the movie longer). This program then runs until it finally jumps to the credits.
Now a few words from an Aidful Individual who learned to write submission texts
I die jump with platform, Select is trologed. For my have to be have along the Super Mario's cut prized.
- He Pokemon.
This is prevented for the battle, they. Hat have set that good scroll and a Mario quickly reason.
But TAS work.
Suggested screenshot
(whaaat !? it's not an actual screenshot from the movie !?)
Nach: The console's controller ports are a normal way for players to enter input. Many different kinds of devices were made to use the controller ports, and Nintendo recommended third parties make their own controllers, and they did, and received Nintendo approval. All those making SNES games should be aware that controller input can be anything. Some games taking this into account issue an error message upon load if using a controller input they did not want to support. This makes using any controller input via the controller port "fair game" to use in a TAS.
The expansion port was designed to create add-on hardware for the SNES, similar to how the Sega Genesis has various CD addons and potentially other kinds of interesting things that may add additional capabilities to the SNES. Games are not expected to make use of the expansion port unless designed specifically for a particular add-on. The expansion port is not intended to be used to create controllers, nor was anything of the kind ever released for it. Using the expansion port in this way for player input is not considered a legitimate way to play Super Mario World. Rejecting, with prejudice.