The problem is with fce ultra not my hack
The problem is
not with FCEUltra. The problem is with your ROM dump.
It shows on the screen where it should say 1-1 but not fce ultra instead it shows 0-1
This is a bad dump. Find a good dump of SMB1 and try it. "(PRG0) [!]" and "(PRG1)" versions should both work.
This paticular dump uses unprepped RAM for the stage number... rather than zeroing it (which the actual SMB cart did). Some older emus flush RAM with 00's on powerup so it goes unnoticed in them. However it has semi-recently been discovered that RAM has a greater tendency to be flushed with mostly FF on powerup. FCEU is probably flushing with FF (which is closer to what you're "supposed" to do) -- Hence why you're getting '-1' instead of stage 1.
I also feel compelled to note that some games do not behave as they do on the console when an emu does NOT flush with $FF. Most notably is Final Fantasy -- which uses unprepped RAM for the battle encounter marker so the battle encounter list starts at the same point. A lot of people abuse this fixed state by power cycling the NES so they fight Kyzoku's in the water a bunch of times. However if RAM is flushed with 00 on powerup the battle encounter list starts at a different point.
So FCEU is
doing the right thing in this instance.
EDIT -- I just tried the hack in FCEU with a good dump as well -- and got the same results as akadewboy. Plays fine until the hammer bro, then locks up. I'll look into the cause.
EDIT 2 -- looks like a jump table got corrupted? Perhaps patching to a good dump is not enough to get it working?
$C88F:20 04 8E JSR $8E04 A:22 X:01 Y:36 P:nvUbdIzC
$8E04:0A ASL A:22 X:01 Y:36 P:nvUbdIzC
$8E05:A8 TAY A:44 X:01 Y:36 P:nvUbdIzc
$8E06:68 PLA A:44 X:01 Y:44 P:nvUbdIzc
$8E07:85 04 STA $04 = #$09 A:91 X:01 Y:44 P:NvUbdIzc
$8E09:68 PLA A:91 X:01 Y:44 P:NvUbdIzc
$8E0A:85 05 STA $05 = #$C9 A:C8 X:01 Y:44 P:NvUbdIzc
$8E0C:C8 INY A:C8 X:01 Y:44 P:NvUbdIzc
$8E0D:B1 04 LDA ($04),Y @ $C8D6 = #$60 A:C8 X:01 Y:45 P:nvUbdIzc
$8E0F:85 06 STA $06 = #$B0 A:60 X:01 Y:45 P:nvUbdIzc
$8E11:C8 INY A:60 X:01 Y:45 P:nvUbdIzc
$8E12:B1 04 LDA ($04),Y @ $C8D7 = #$20 A:60 X:01 Y:46 P:nvUbdIzc
$8E14:85 07 STA $07 = #$D3 A:20 X:01 Y:46 P:nvUbdIzc
$8E16:6C 06 00 JMP ($0006) = $2060 A:20 X:01 Y:46 P:nvUbdIzc
$2060 is mirrored PPU registers (not something you want to jump to), so the game ends up hitting a bunch of illegal opcodes until it destroys itself.