A formula is definitely the more elegant solution, I just thought of a lookup table first for whatever reason (probably my non-programmer brain).
As for how the E5x effect works in the XM format, it's in ⅛ semitone steps, or 12.5 cents, from one semitone lower to ⅞ semitone higher:
E50 = -100 (1 semitone lower)
E51 = -87.5
E52 = -75
E53 = -62.5
E54 = -50
E55 = -37.5
E56 = -25
E57 = -12.5
E58 = 0
E59 = +12.5
E5A = +25
E5B = +37.5
E5C = +50
E5D = +62.5
E5E = +75
E5F = +87.5 (⅞ semitone higher)
Another thing I've also noticed is that the overall tuning of Tritone is slight off from standard A=440Hz tuning. Clock speed and memory contention both seem to affect just how much, as different models produce different deviations from standard tuning. Using the current xm2tritone's tuning table conversions I recorded a test tone of what should be an A at 440Hz from different models in an emulator:
48K: -34 cents from A=440
128K: -11 cents from A=440
+2A/+3: +22 cents from A=440
As can be seen the 48K at 3.5 MHz with contended memory is downtuned the most, where the 3.5469Mhz 128K is a bit higher, while the +2A/+3 is even higher in pitch owing to the memory in use being uncontended. I think it might be neat to perhaps be able to set a custom tuning, to be able to perhaps compensate for this or just for the purposes of achieving alternate tunings, but this is absolutely not a necessity, moreso a curious observation.