Indeed, the SNES CPU is too slow (or rather, Vblank is too short) to calculate matrix values for all 224 scanlines in real-time, so I had the SNES subsequently pre-calculate all necessary sets of matrix parameters into WRAM, then dumped each set to a file and included the dumps in the ROM.
Due to how the rotation math is implemented, there are 256 possible angles and 224 16-bit values per Mode 7 rotation/scaling parameter (4), so the matrix data currently amounts to a whopping 1024 HDMA tables or 256 * 448 * 4 = 458.752 bytes (though technically, registers M7A and M7D share the same values, so it's "only" 344.064 bytes, all in all). The current angle value ($00-$FF) is merely used as an index into the set of matrix parameters. During Vblank, the appropriate 4 tables of 448 bytes each are copied to the WRAM locations accessed by an indirect HDMA transfer.
I'll have to calculate even more tables though, as I would like to be able to change the "height" during flight.
BTW, the rotation math in my implementation is fundamentally based on
bazz' Mode 7 tutorial, although enhanced by my own discoveries, ridden of quite a few bugs, and simplified in several ways (e.g. you don't need to change your calculations for a clockwise rotation -- just decrease the angle value instead of incrementing it).
In any case, I wouldn't know of any other recent homebrew demo/game for the SNES featuring a working Mode 7 rotation with perspective, so I tend to be a tiny bit proud of my achievement.
Lastly, here's a build that eliminates any and all scrolling glitches present in #00220 and earlier, and shows the current angle using a sprite-based VWF:
Download:
http://manuloewe.de/snestuff/projects/f ... d_00221.7z