Skip to content
View in the app

A better way to browse. Learn more.

NHL'94 Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

NHL 94: EVO

Featured Replies

Without a doubt, this is the best NHL94 rom I have ever seen. Incredible stuff @AdamCatalyst . I will share this on social media and with our buds in Discord to get some more beta testers.

My only comment so far is, I tried Superstar mode but it didnt feel difficult to me. I beat the comp 6-1. The AI seemed to be as good as NHL94 is now. So I'm not sure what's different there.

  • Replies 100
  • Views 6.1k
  • Created
  • Last Reply

Top Posters In This Topic

Most Popular Posts

  • AdamCatalyst
    AdamCatalyst

    Player Manual Beta version 0.2.1 Here's what you need to know to make the most out of the game. Main Menu Options Mode Exhibition mode replaces the previous Regular Season mode, and a new Practice mo

  • AdamCatalyst
    AdamCatalyst

    The answer is “yes.”

  • SNOHBAWL
    SNOHBAWL

    This ROM hack is absurd (and I mean that in the absolute best way possible). 1 rom for NHL, International, AND 94!? I usually have 1 ROM for each saved lol. Then all the options you have (progressive

Posted Images

Download count is at 66... let's see where it is by the end of the weekend. :)

@AdamCatalyst just want to say incredible job on this ROM. It is very fun to play!!

I'm very curious on how you did some of these hacks ) , we'll have to talk about it!

instead of the current and international, you coulda did 92, 93 and 94 rosters =P

Edited by 77

I'm in awe of what you've done, here, @AdamCatalyst This is legendary stuff, man. I think Evan needs to knight you.

Please tell me you have a tip jar or something so I can donate for your efforts. DM is fine if you don't want to put it here.

Thank you for all your hard work.

  • Author
13 hours ago, von Ozbourne said:

Just a heads up. I tried playing a playoff game.

Best-of-3, Original '94 teams, Conference seeding, All other settings left at default.

Played one 2-player vs game. Won 5-0. Post game playoff stat screen came up and looked like this.

playoff1.png

By the way, I thought it was really cool how the jumbotron displays the series record.

UPDATE:

I don't know if this is related to the previous issue, but when I restarted the game, the menu got a bit funky.

menu glitch.png

Although, I am leaning to it being related, because it did continue the playoffs when I pressed start.

I also deleted the .srm file and reopened the game, and while I lost my playoff progress, the glitch went away.

That is definitely some corrupt SRAM! Thanks for finding this. Will add it to the weekend queue.

  • Author
2 hours ago, halifax said:

Without a doubt, this is the best NHL94 rom I have ever seen. Incredible stuff @AdamCatalyst . I will share this on social media and with our buds in Discord to get some more beta testers.

My only comment so far is, I tried Superstar mode but it didnt feel difficult to me. I beat the comp 6-1. The AI seemed to be as good as NHL94 is now. So I'm not sure what's different there.

Thank you so much for your kind words. I can’t tell you what that means to me.

@halifax I have a favour to ask. I’d really rather prefer not promoting this ROM anywhere right now. I was really only looking for some beta testing help from the locals here. There are more things wrong with the ROM than meets the idea, including ROM breaking SRAM corruption. This really is an incomplete Beta build. I’m just at a point where I needed more people to find those bugs for me, so we can get it stable before the next phase of development.

Edited by AdamCatalyst

  • Author
1 hour ago, 77 said:

instead of the current and international, you coulda did 92, 93 and 94 rosters =P

I coulda also cut two international teams and kept the ‘94 all stars. I kept the two international team to show some love to our Eastern European friends. But I actually have planned a long term solution for these tradeoffs, but it’s completely speculative right now. Time will tell.

Edited by AdamCatalyst

  • Author
3 hours ago, halifax said:

My only comment so far is, I tried Superstar mode but it didnt feel difficult to me. I beat the comp 6-1. The AI seemed to be as good as NHL94 is now. So I'm not sure what's different there.

The Superstar difficulty may even be reverting to ROOKIE. I’ve had many issues with it, and Superstar is badly under tested. Honestly, Difficulty Modes weren’t even supposed to be released yet, but I made a last second decision figuring this would be the fastest way to find out what’s wrong with them. Will investigate!

Edited by AdamCatalyst

  • Author
14 hours ago, von Ozbourne said:

Just a heads up. I tried playing a playoff game.

Best-of-3, Original '94 teams, Conference seeding, All other settings left at default.

Played one 2-player vs game. Won 5-0. Post game playoff stat screen came up and looked like this.

playoff1.png

By the way, I thought it was really cool how the jumbotron displays the series record.

UPDATE:

I don't know if this is related to the previous issue, but when I restarted the game, the menu got a bit funky.

menu glitch.png

Although, I am leaning to it being related, because it did continue the playoffs when I pressed start.

I also deleted the .srm file and reopened the game, and while I lost my playoff progress, the glitch went away.

100% related. Both are reading and writing to SRAM. You don't possibly still have a copy of that SRM file, do you?

23 minutes ago, AdamCatalyst said:

Thank you so much for your kind words. I can’t tell you what that means to me.

@halifax I have a favour to ask. I’d really rather prefer not promoting this ROM anywhere right now. I was really only looking for some beta testing help from the locals here. There are more things wrong with the ROM than meets the idea, including ROM breaking SRAM corruption. This really is an incomplete Beta build. I’m just at a point where I needed more people to find those bugs for me, so we can get it stable before the next phase of development.

For clarity, this was how my posts were positioned...that Beta Testers are needed. The more people testing the better I assume?

  • Author
41 minutes ago, clockwise said:

I'm in awe of what you've done, here, @AdamCatalyst This is legendary stuff, man. I think Evan needs to knight you.

Please tell me you have a tip jar or something so I can donate for your efforts. DM is fine if you don't want to put it here.

Thank you for all your hard work.

That means so much coming from you. I'm still using lots of your work that has stood the test of time. Your sharing of the original Y-Button goalie control code and logic was the nucleus for the entire 6-button system. I had been stuck on it for years until you shared that old post.

Buy Me a Coffee
No image preview

Adam Catalyst is developing an eclectic array of free pro...

Hello there!My name is Adam, and I’m a design leader, passionate teacher, music & technology hacker, media connoisseur, obsessive autodidact, inclusivity scholar, recovering hyperbolic.I’ve be

Edited by AdamCatalyst

  • Author
4 minutes ago, halifax said:

For clarity, this was how my posts were positioned...that Beta Testers are needed. The more people testing the better I assume?

PERFECT!!! THANK-YOU!!!!

2 hours ago, AdamCatalyst said:

That is definitely some corrupt SRAM! Thanks for finding this. Will add it to the weekend queue.

I'm curious if you increased the loop iterator for the SRAM check? If not, it will cut off what it skips.

When the ROM is started, there is a check of the SRAM. Copies to RAM, does a checksum, compares it to the SRAM checksum and writes it back to SRAM.

EDIT: More info: I had to change the loop iterator value when I added the Fighting variable.

$76C6 - loop iterator

This is insane. I can't believe all of this was put together into 1 rom.

I just started tinkering around. Listen, this might be silly to bring up since I know it's a beta version and I don't know if this is by design... but you can start your goalies as forwards.
If your G is already active in net and you place that goalie at C, then you have no center for faceoffs. (which is actually kind of interesting)

Just reporting an issue. So I got into a fight in the second period. Loss. And in the third period, my guy (Jyrki Lumme) who lost the fight is on the ice and we have someone else (Tim Hunter) serving the penalty for him.

20261003_014750.jpg

20261003_014812.jpg

20261003_014829.jpg

  • Author
On 9/29/2026 at 7:36 PM, Don Johnson said:

Testing this out on my Mega Everdrive Pro and having a control issue.

Console: Sega Genesis Model 1 VA4

Controller: 8Bitdo M30 (6 button) with Bluetooth receiver

Issue: NHL 94 EVO reads C button as START. START button has no function.

Details: Tried different control schemes in EVO (3/6 Button EVO Sega, 6 Button EVO Sega, 6 Button Classic), all still have the same issue. Played known working original NHL 94 rom, no control issues. Played known working Mortal Kombat II rom to verify all 6 buttons working, no issues.

Other notes: Powered off system, removed Bluetooth receivers, plugged in original 3 button Genesis controller, verified with known working original NHL 94 rom, verified with controller input rom, loaded NHL 94 EVO and C button had no function.

Check your PMs. Three test builds that I need you to check on original hardware. Hopefully one of them solves the controller issues.

  • Author
15 hours ago, IAmFleury'sHipCheck said:

This is insane. I can't believe all of this was put together into 1 rom.

I just started tinkering around. Listen, this might be silly to bring up since I know it's a beta version and I don't know if this is by design... but you can start your goalies as forwards.
If your G is already active in net and you place that goalie at C, then you have no center for faceoffs. (which is actually kind of interesting)

LOL - that was not intended. That's exactly the sort of thing I want to know about though, thanks for reporting!

EDIT: fixed. Will be included in next build this weekend.

Edited by AdamCatalyst

  • Author
4 hours ago, rcv said:

Just reporting an issue. So I got into a fight in the second period. Loss. And in the third period, my guy (Jyrki Lumme) who lost the fight is on the ice and we have someone else (Tim Hunter) serving the penalty for him.

Was there by any chance an injury? Regardless, I have seen this myself, and it's on my list for today.
-Adam

  • Author
21 hours ago, chaos said:

I'm curious if you increased the loop iterator for the SRAM check? If not, it will cut off what it skips.

When the ROM is started, there is a check of the SRAM. Copies to RAM, does a checksum, compares it to the SRAM checksum and writes it back to SRAM.

EDIT: More info: I had to change the loop iterator value when I added the Fighting variable.

$76C6 - loop iterator

I left $76C6 alone. I THOUGHT it was the end address of the RAM wipe? I structured things with no variables past $DEF4; everything I added above there sets its own starting values, and does not need to be wiped on boot.

It sounds to me like the SRAM switching is not being honoured on whatever emulator was used. I can't get this error to reproduce here, but over time it's become clearer and clearer to me that many emulators do not handle ROMs larger than 2 megs, or SRAM larger than 8KB the same. It took me a painful amount of development time chasing ghosts before I realized this. I thought Von Oz's bug would be easy, but it is currently vexing me (hence blame the emulator!).

  • Author
On 10/2/2026 at 8:46 AM, chaos said:

@AdamCatalyst just want to say incredible job on this ROM. It is very fun to play!!

I'm very curious on how you did some of these hacks ) , we'll have to talk about it!

I never thanked you for your kind words. THANK-YOU. That means so much to me. I really wanted to try and make something for everyone to have fun with.

But you do realize, the overwhelming majority of what I did was built on your research, and the resources you shared with me? Without your work & generosity, this ROM doesn't happen, ever.

Edited by AdamCatalyst

  • Author
On 9/30/2026 at 12:24 PM, 77 said:

i couldnt get one after the whistle even at EVO++, but then again the entire league is a bunch of pussies... so maybe it works

I AM getting fights after the whistle on my end. Are you just not getting enough fights for your bloodlust?

2 hours ago, AdamCatalyst said:

I left $76C6 alone. I THOUGHT it was the end address of the RAM wipe? I structured things with no variables past $DEF4; everything I added above there sets its own starting values, and does not need to be wiped on boot.

It sounds to me like the SRAM switching is not being honoured on whatever emulator was used. I can't get this error to reproduce here, but over time it's become clearer and clearer to me that many emulators do not handle ROMs larger than 2 megs, or SRAM larger than 8KB the same. It took me a painful amount of development time chasing ghosts before I realized this. I thought Von Oz's bug would be easy, but it is currently vexing me (hence blame the emulator!).

I think you are right, that's for clearing out the RAM.

Did you use my patch to make the ROM 4MB? Because it also modifies the SRAM routines.

I would suggest looking at his SRAM file, making a copy of it, opening up the ROM again, then exit. See if there are changes made to the SRAM.

My guess is it is not loading all your SRAM into RAM.

Here's the InitSaveRAM that I modified to work:

InitSaveRAM:                            
    move.l  #VBcount,(vbint).l
    move    #$2500,sr
    clr.w   (ValidSRAM).w   ; Flag for good SRAM
    jsr     ReadJoy1        ; get joypad buttons held
    move.w  d3,d0           ; d3 = buttons held
    move.b  #1, (SRAMlock)  ; set flag for SRAM bank switch (SRAM on)
    movea.l #$200000,a0     ; move SRAM address into a0
    move.w  #$E,d3          ; move 14 dec into d3
    move.w  #2,d4           ; move 2 into d4
    cmp.b   #$E0,d0         ; Start+A+C button held down
    beq.w   .setiterator    ; branch if held down
    cmp.b   #$B0,d0         ; Start+B+C buttons held down
    beq.w   .setiterator2   ; branch if held down
    moveq   #0,d0           ; move 0 into d0
    move.l  #$2000,d1       ; $2000 into d1
    movea.l #$FFFF0000,a0   ; start of RAM into a0
    move.b  #0, (SRAMlock)  ; set flag for SRAM bank switch (SRAM off)
    bsr.w   ReadSRAM        ; Writes SRAM to RAM
    jsr     ValidateSRAM
    tst.w   (ValidSRAM).w
    bpl.w   .ex
    jsr     ClearSRAM
    moveq   #0,d0
    move.l  #$2000,d1
    movea.l #$FFFF0000,a0
    bsr.w   ReadSRAM        ; Writes SRAM to RAM
    jsr     ValidateSRAM

.ex:                                    
    rts

.setiterator:                           
    move.w  #$1FFF,d2
    move.b  #1, (SRAMlock)  ; set flag for SRAM bank switch (SRAM on)

.SRAMloop:                              
    move.w  #1,d1
    move.w  #7,d0
.setto80:                              
    move.w  d1,(a0)
    cmp.b   1(a0),d1
    bne.w   .loadcolor
    lsl.w   #1,d1
    dbf     d0,.setto80
    adda.w  #2,a0
    dbf     d2,.SRAMloop
    movea.l #$200000,a0
    move.l  #$120034,(a0)+
    move.l  #$560078,(a0)+
    move.b  #0, (SRAMlock)  ; set flag for SRAM bank switch (SRAM off)
    move.w  #$E0,d3
    move.w  #$20,d4

.loadcolor:                             
                            
    move.w  d3,d0           ; move d3 (color of flashing screen) to d0

.flashscreen:                           
    move.l  #$C0000000,(VDP_CTRL).l
    move.w  d0,d1
    and.w   d3,d1
    move.w  d1,(VDP_DATA).l
    jsr     vcountwaitjsr
    sub.w   d4,d0
    bra.s   .flashscreen

.setiterator2:                          
    move.w  #3,d1
    move.b  #1, (SRAMlock)  ; set flag for SRAM bank switch (SRAM on)

.SRAMloop2:                            
    adda.w  #1,a0
    lsl.l   #8,d0
    move.b  (a0)+,d0
    dbf     d1,.SRAMloop2
    cmp.l   #$12345678,d0
    bne.s   .loadcolor      ; branch if not equal (screen flashes red)
    move.b  #0, (SRAMlock)  ; set flag for SRAM bank switch (SRAM off)
    move.w  #$E0,d3
    move.w  #$20,d4
    bra.s   .loadcolor      ; branch (screen flashes green)

; End of function InitSaveRAM

This is run when the ROM is opened. If you notice this section:

move.l  #$2000,d1
    movea.l #$FFFF0000,a0
    bsr.w   ReadSRAM        ; Writes SRAM to RAM
    jsr     ValidateSRAM

D1 here is the iterator. The ReadSRAM function loads the SRAM into RAM at location A0 and iterator D1. So here, the only part of SRAM being copied into RAM is the first $2000 bytes.

You will also need to update the ValidateSRAM and MakeSRAMChecksum to cover the extra SRAM you are using. The last 2 bytes of SRAM are where the checksum gets stored.

On 9/8/2026 at 9:08 AM, kidswasted said:

No plans for an updated version. Wife and I just had baby #3. So I won’t have much time to focus on an updated ROM for a while.

  • Author
1 hour ago, chaos said:

I think you are right, that's for clearing out the RAM.

Did you use my patch to make the ROM 4MB? Because it also modifies the SRAM routines.

I did not actually. Did it from scratch, reading Mega Drive specs. SRAM save and restore has been pretty thoroughly tested countless times. I do have VonOz's SRAM, and its fine, it has real stats, etc. valid values for everything. I will look through your spec to see if there is something I missed.

  • Author
1 hour ago, chaos said:

I think you are right, that's for clearing out the RAM.

Did you use my patch to make the ROM 4MB? Because it also modifies the SRAM routines.

I would suggest looking at his SRAM file, making a copy of it, opening up the ROM again, then exit. See if there are changes made to the SRAM.

My guess is it is not loading all your SRAM into RAM.

Here's the InitSaveRAM that I modified to work:InitSaveRAM:

Thanks, this helps. I had no checksum on the playoff block though, adding that now! Didn't use your patch actually. After the first $2000, reading everything in SRAM directly when needed.

Edited by AdamCatalyst

Is there a version of this rom compatible with delta app?

Been having a lot of fun testing this, mainly NHL/Superstar/Offsides Off/Line Changes Off. Getting used to the new physics, and somewhat mysterious player AI. All in all, blown away - it looks soooo good. Thanks @AdamCatalyst !

Which players have photos? Is it the same ones as base ‘94?

9 hours ago, Jlsegafan2001 said:

Which players have photos? Is it the same ones as base ‘94?

All of them have newly added color portraits.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

Who's Online (See full list)

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.