While playing around with writing my own UNMO3 implementation I have come across the following errors in UNMO3 and MO3:
1. The UNMO3 decoder does not seem to guard against out-of-range parameter values, in particular for the XM volume command. Let's say the original XM file has a volume command in the effect column with a parameter value larger than 40. When decoding the MO3 file back to XM, this value is written to the volume column, but its parameter is not validated, so as a consequence an entirely different effect is written to the volume column.
2. Also in XM, MO3 stores the panbrello command (Y) correctly, but UNMO3 converts it back to P (panning slide) instead.
3. Similarly, command Z in the S3M format is stored correctly in the MO3 file but UNMO3 converts it back to command S instead.
4. Volume-column panning in the S3M format is not converted correctly by MO3. It stores it as volume command (F 40 in the MO3 file).
5. Also, technically, UNMO3 should really write out a "beats per track" value in the MTM header of 64, not 0.
6. There also seems to be an issue with the MIDI channel setting, at least in IT instruments (not tested with XM yet): In IT, no MIDI channel = 0, first = 1, last = 16, mapped = 17. However, It seems that in the MO3 file both "no channel" and the first channel are encoded as 0, the second channel is 1, etc...