Apparently I made a slightly more stable
v0.4.31 of smps2mid that I uploaded to the FTP, but I only posted it in the SSRG IRC.
(That build mainly fixes 8-bit and Sonic CD SMPS conversions.)
The ROMs that it recognises are:
- MegaDrive: Sonic 1, Sonic 2 Simon Wai Beta, Sonic 2 final, Sonic 3, Sonic & Knuckles, Sonic 3D, Sonic Crackers, Chaotix, Ristar (detection broken, see below)
- Master System/Game Gear: Sonic 1, Sonic 2, Sonic Chaos, Sonic Triple Trouble, Sonic Blast, Sonic Labyrinth
- MegaCD: SNCBNK??.BIN files from Sonic CD
All other ROMs require you to manually enter pointer list offsets.
Sonic 1 GG v1.1 detection fails, because they removed the "Developed By" text from the beginning of the ROM. Unfortunately SMS/GG ROMs don't have a header that allows for reliable checks.
For Sonic 3/K/3D the pointer list detection is really unstable, resulting in some wrong pointers. The S3 file select song (2F) is one of them - smps2mid shows 0C7027 while the
Sonic Retro wiki shows the correct offset 0D7027.
Sonic & Knuckles is especially unstable, because it reads the pointer list from the
compressed sound driver.
If you take the pre-extracted song from the SMPS research pack, load it into smps2mid and set the correct Z80 offset (F027 for S3 file select), then the conversion works.
The same method works pretty well with Mega Man too. (Type: Gen. Z80 b, Z80 offset: 1002 for all songs)
Mickey Mouse: Castle of Illusion: SMPS type: Gen. Z80 a, pointer list: 07008D, base offset: 070000
Unfortunately, its format features some major modifications that make smps2mid unable to convert the songs properly. (All of the Disney games that use SMPS have the sound driver and format modified in some way. And it's different modifications for each game.)
Michael Jackson's Moonwalker: It uses a format that is a mix between the one of Sonic 1 and the "generic 68k SMPS" format used by later games. That's why it doesn't convert properly. There is no workaround/quick fix right now.
What smps2mid understands as "Generic 68k SMPS" is listed as "SMPS 68k/Type 2" on the Sonic Retro wiki. There will be issues with 68k/Type 1 songs.
Ristar: The music pointer detection fails due to a bug/too strict checking. The (J) version isn't recognised, because the MegaDrive ROM header has the "RISTAR" text at another offset. (oops)
Golden Axe III: It assumes that the songs are stored "in order" in the ROM. For this game, they aren't. Just put 0F011A into the Pointer List field and press "Add to List" to add the remaining songs.
Dynamite Headdy song 21: I investigated this and there is a bug in the song itself that causes smps2mid to read invalid data. They forgot the "track end" command for the drum channel.
In order to fix this, search for the byte sequence 10 8C 08 F7 01 03 FE 8C in the ROM (or the extracted song) and replace the following byte 2A with F2.
Then it converts properly and without crashing.