Needed - A Game Boy Player and Game Boy Interface (GBI). An SD Media Launcher, modchip, or some other method is needed to load GBI and the input movie. These methods are -only- used to load the GBI homebrew software and interact with the Game Boy Player, they do not in any way modify the behavior of the official Game Boy Player hardware.
Write your TAS using the Gambatte core. Make sure to force GBA as the emulated platform in GB settings for exact GBP timings. Use the LUA script linked below to dump the inputs to a file that GBI can use. There are some indications that it is faster than the GBHawk core at the moment.
rename your timestamp output to yourmoviename.txt and optionally gzip it
put the movie file on an SD card with GBI or GBI-HF, both inside a folder named GBI (for example E:\GBI\gbihf.dol and E:\GBI\yourmoviename.txt.gz)
create a CLI file in the same directory named gbi.cli or gbihf.cli respectively to pass your input movie to GBI. The cli will need the following argument along with any other arguments that you use to tune GBI.
Run GBI or GBI-HF from the SD card. I do this by booting swiss from the SD Media Launcher and then choosing the GBI build I need in swiss.
Watch as GBI plays back your console-accurate TAS!
Credit to Extrems, CasualPokePlayer, Alyosha-TAS, Natt, gifvex, entrpntr, and sinamas for their help with getting console verification to where it is.
Check below for automated test results of the Gambatte Speedrun core against known console verified TASes