bcrt2000 Posted July 21, 2025 Report Posted July 21, 2025 (edited) I wanted to do a proof of concept to show that we should be able to mod NHL 94 to use the Sega CD music via an MSU-MD patch. This would make it compatible with specific emulators (such as Retroarch+GenesisPlusGX), real hardware (cartridge+cd) and also flashcarts that have Sega CD support (like the Everdrive Pro). I was able to put this together today using the NHL 92 source code as a base for convenience since its fully disassembled at this point (thats not to say this can't be done in 94 today-- I think we have enough knowledge on the 94 source to do it) How was it done? 1. Set up file structure to use within Retroarch+GenesisPlusGX. NHL92.md = rom file. NHL92.cue/bin is actually the NHL94 Sega CD game. You need to make sure the .cue file correctly points to the NHL92.bin file. All 3 file names need to match. 2. Include msu driver in code. I believe this is what allows a cartridge game to access the CD without going through the Sega CD bios. This also should work on real hardware as a result. Stanleymap incbin ..\Extracted\Graphics\Stanley.map.jim even EASNmap incbin ..\Extracted\Graphics\EASN.map.jim even MSU_Driver: incbin msu-drv.bin 3. After the EA logo I initialize the MSU driver, wait for the CD to be ready, and then play the NHL 94 main menu music. This probably can be done smoother so that the game doesn't pause here. Note, for some reason the title screen does not always show after this and instead a black screen is rendered-- I believe it actually might be an emulator problem as I've seen it happen in Retroarch+GenesisPlusGX even without my mod do that. Begin move #$2700,SR move.l #Stack,sp move.l #varstart,a0 ;clear out ram ; Call MSU-MD driver initialization (assuming loaded at MSU_Driver) jsr MSU_Driver tst.w d0 bne.s No_MCD ; If d0 != 0, MCD not detected ; Wait for driver ready .Wait_Ready move.b $A12020,d0 cmpi.b #0,d0 bne.s .Wait_Ready ; Set volume to max (optional) move.b #$15, $A12010 ; VOL command move.b #255, $A12011 ; Volume 255 addq.b #1, $A1201F ; Execute ; Wait ready again .Wait_Ready2: move.b $A12020,d0 cmpi.b #0,d0 bne.s .Wait_Ready2 ; Play track 4 in loop move.b #$12, $A12010 ; PLAY LOOP command move.b #4, $A12011 ; Track 4 (NHL 94 menu music) addq.b #1, $A1201F ; Execute 4. Play NHL 94 Scouting Report/Intro music on Scouting report screen ScoutingReport ; Play track 3 in loop move.b #$12, $A12010 ; PLAY LOOP command move.b #3, $A12011 ; Track 3 (NHL 94 scouting report/intro movie music) addq.b #1, $A1201F ; Execute 5. Play Organ music at start of period StartPer ; Play track 7 move.b #$11, $A12010 ; PLAY command move.b #7, $A12011 ; Track 7 (organ music) addq.b #1, $A1201F ; Execute Next thing would be to detect when the organ music finishes playing so that I could play the ambient crowd track in a loop. It would likely need a check in one of the functions that runs every frame (periodicevents or vblank) I did attempt something but it didn't work. I also thought that maybe it might be easier if I just looked at what the Sega CD version did in it's code and reproduce that logic to manage playing the crowd track. MSU-MD driver is available here: krikzz/msu-md: MegaCD driver for msu-like interfacing with CD hardware More info on MSU-MD: MSU-MD Patches | Adding CD quality sound to MegaDrive/Genesis games. Sample repositories: YLFAndy/MSU-MD: A repository of my MSU-MD patches ArcadeTV (ArcadeTV) / Repositories Edited July 21, 2025 by bcrt2000 1 1 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.