Small explanation how this happens: When moving fast enough, the player will slightly clip into the block more than he should for 1-2 frames, this distance into the block is enough to cause the player to trigger the topcorner offset of the block (which will cause Mario to briefly act as if he is standing on a solid surface). This floor-touching glitch happens even in other Nintendo games such as SMB, SMB3, YI and even NSMB.
However, for Mario to act as if he is standing on a surface, requires a downward speed to trigger this, as the game purposely make them “disabled” for upward speeds so that 1-way up ledges work properly.
This patch simply modifies how the player is pushed out of the block, in the original game, the player isn't ejected instantly out of the block horizontally (only downwards would warp the player downwards), but gradually each frame. This patch modifies so that it simply sets the player position (or warps) to be outside the block instantly before the player is being moved deeper into the block.
Added proper sfxrom mapping, as well as FastROM mirrors and one tiny optimization.
I have used this patch for quite some time, and I must say it does work. Itís a very valuable asset for hacks that tinker with movement abilities, particularly ones that allow the player to move fast. Thereís but one quirk I noticed - in the vanilla game, big Mario in a one tile high passage will automatically move to the left, and he will be crushed if he gets pushed into a block. With this patch, however, Mario will come to a stop without dying if he gets pushed into a block on his left in this way. A small tradeoff, but something to keep in mind nevertheless.
Tested with Asar 1.71, Lunar Magic 3.03, SA-1 1.31, Snes9x 1.59.2.