The game was designed so that it is impossible to have two powerups on the same screen at a time, whether a flower and a mushroom, two flowers, etc. They are spaced apart and there is always a wall the mushroom would bump into or a pit to fall into. There is no way to bump the mushroom over a wall and follow it to the next powerup, there is always a pit or something before you get to it.
To test this you would have to edit the ROM to place several close together. I believe I have played or seen a ROM hack before that did this, and the result was that the second powerup overwrites the first, making it disappear immediately. To my knowledge there is only one set of variables for a powerup.
Since only one powerup can be on the screen at a time, Mario will never be able to pick up a mushroom and then pick up another, since the next time he hits a block it will automatically be a fire flower. You would have to hard code the game to release a mushroom instead of a fire flower in order to see what happens.
Here is an interesting site with lots of bizarre Mario glitches and tricks:
http://tasvideos.org/SuperMarioBrosTricks.html
Somewhat relevant:
Quote:
Internal to the game, Mario’s powerup state is recorded in two independent variables; one describes size (0=regular; 1=super) and the other tracks the ‘upgrade state’ (0=need mushroom; 1=need flower; 2=has flower). The ‘size’ decides the sprite (small on 0; big on 1) used for Mario; the ‘upgrade state’ decides what powerup will come out of a block (mushroom on 0; flower on 1 or 2) and what will happen when Mario is hit (die on 0; switch ‘size' and clear ‘upgrade state’ on 1).
These states can be knocked out of synchronization. The game checks for all sprite collisions, knocks the ‘upgrade state’ to 0 if it hits, and switches size only when all checks are done. If Mario’s sprite strikes the King Koopa sprite and the bridge release sprite in one frame, the game will register the collision between Mario and Koopa, knock the ‘upgrade state’ to 0, register the collision between Mario and the bridge release, and jump into the level complete loop that causes Mario to walk to the right ― and never switches the ‘size’ variable.
If Mario was naturally large (state 1 or 2, size 1) when he hit the switch he will stay large (state 0, size 1). If he strikes an enemy he will die (because his ‘upgrade state’ is 0), but he can break blocks. If he gets a mushroom, he will shrink and be unable to hit blocks; if he is hit now, he will grow again. If he gets a fire flower, his palette will be changed and he will be able to shoot (but the game will use the large image for shooting; it will, however, keep Mario’s small feet if Mario is moving). Mario will now be Little Fiery Mario.
If Mario was naturally small (state 0, size 0) when he hit the switch, he will appear to die but the level will still be beat and he will not lose a life. If Mario was unnaturally small (state 1 or 2, size 0) when he hit the switch (that is, if he does this trick twice), he will revert to his normal form. When Mario dies his size is set small and his state is set unupgraded, no matter how he died or what his state was before.
Using the third part only of a 3-code Game Genie code for “Always Stay Big” will produce similar results (the code is SZLIVO). As long as Mario has gained a power-up, he will become small when hit, then grow when hit a second time. This is a much simpler way to view the “Little Fiery Mario” quirk.
This glitch appears to have been fixed in the Super Mario All-Stars version, though the two-variable mechanism behind it still exists.