Here is a real quick one I made. Seems to work here in simulation.
numtools = 99 'The number of valid tools
newtool = GetSelectedTool( ) 'read the new requested tool
currenttool = GetOEMDRO(1000) 'user DRO 1000 is used to store the current tool. In this line assign whatever is in this DRO to the variable
While(currenttool< 1 Or currenttool > numtools) 'Check that currenttool contains a legal tool number.
currenttool = question("Please enter the current tool") ' If not ask to enter the current tool in position.
SetOEMDRO 1000,newtool ' Set user DRO 1000 to the new tool number
dist = (newtool Mod 8 ) - (currenttool Mod 8 ) ' the number of turret positions to move to the requested tool.
If (dist < 0) Then 'Check if rollover needed
dist = 8 - Abs(dist)
Code " G91 G0 A" & dist ' Move to the new turret position.
Code " G91 G0 A" & (-dist/5) ' Reverse move to lock - set to 1/5th of one position and can be changed
Code "G90" ' Set back to absolute mode.
Set the A axis as above and although not mandatory check the rotational axis rollover in general config.
You can then use the proximity switch to home the A axis and set reset OEMDRO 1000.