I have also checked the noise generation logic, and it's definitively the one from the OPL3, not the OPL2 one from DBOPL or MAME. I have also exchanged the snare drum and top cymbal operators, because this feels more natural when they're using the same phase register, and I think this also sounds much more like the sound samples I have found so far.

Sorry, false alert. Descent uses MIDI-style music, where each logical MIDI channel can be mapped to multiple physical channels (slots). The default strategy, when running out of channels, is to stop rhythm sounds, which is because some snares seem to be missing in your DRO dump. The sounds are fully feedback-driven, so that there is no rhythm mode involved at all.

Okay that makes sense, sort of. If Descent is not using rhythm mode, wouldn't the dropouts occur on any channel really? I think I may have noticed this occurring on other songs, but I'm not totally sure due to my lack of having original hardware. Also there are other sources of error such as the DosBOX DRO dump and the imfplay software port, so hard to say. I'll still go ahead and implement your rhythm mode changes.

So you think the dropouts would have matched the original OPL3? It would be so nice to have some old original hardware to compare. I have very little room though in our NYC apartment...

The timing may indeed affect the feedback "noise timbre" due to timing differences of the KON events, but that should only be audible in very few cases.

About the percussion: If you think about it, it's a better experience to loose some short HHs or SDs than to loose full notes of melody. If you don't listen very consciously (like it's mostly the case when playing a game), your brain even starts to fill the gaps automatically, or you may think it's only the song writer's decision to put some dynamics into the song. Even Duke Nukem 3D did this trick; I converted their MIDI engine for testing purposes some months ago, and it's dropping percussion samples when running out of physical channels.

Please note that the highhat phase is used everywhere, and that there is no phase manipulation anymore. TC and HH use the same phase bit, but different noise calculations, and SD uses a completely different noise calculation without phase bit calculation. Also, in rhythm mode, there's no feedback calculated at all, except for TT and BD, and the sample output is doubled in any case.

The SD sounds a bit off sometimes, but I believe this could be an issue of the player code.