One of the limitations to writing a system-compliant EXM application has been the requirement to have zero relocations in your code. This is not an inherent limitation but one caused by a bug in SYSMGR. The main problem is that most programmers are unaware of what a relocation is, much less how to get rid of them.
A relocation occurs most often when the compiler is requested to supply a segment address. The number of relocations or fix-ups is specified in the header of the EXM at offset 06h. The actual values are contained in the header starting at the offset specified by the value at offset 18h.
The insidious nature of the bug is that SYSMGR does more fix-ups than the header specifies. If a program with fix-ups is run and then a subsequent program with fewer is loaded, there are fix-ups left over in SysMgr relocation table that it will try to process.
SWITCH! version 2 eliminates this problem by making sure that the table is clear whenever a system compliant program is loaded.