What you are after is very easy to achieve...
an example program to machine a simple part could be like this:
The program below will machine from a blank 50mm diameter by whatever length you want
It faces the part off to 50mm long (2mm from the front face)
Then turns a spigot to 20mm diameter by 25mm long, with a couple of chamfers thrown in for good measure.
The program uses Cycle Time reduction for both spindle speed and tool changes.
THIS IS A DANGEROUS WAY OF PROGRAMMING IF YOU DO NOT PAY ATTENTION TO TOOL CHANGE POSITION AND CONFIRMING SELECTED TOOL IS IN POSITION BEFORE MOVING TO START POINT!
Having stated that, this can really save a butt load of time if used correctly.
Assuming a metric programming system.
N0001 G0 X800 Z800 (make sure tool starts from home pos)
N0002 X52 Z52 T010101 G97 S1102 M3 M8 M63 (rapid to start point using tool 1 for facing, start the spindle up while moving to start point, don't wait for spindle speed arrival confirmation, just start up the spindle and get moving!)
N0003 G96 S180 M61 (select constant surface speed at 180 m/min, use M61 to ignore confirmation of spindle speed arrival...)
N0004 G85 NFACE D1 U0 W0.25 F0.35 (roughing cycle for facing)
NFACE G82 (facing tool path)
N1001 G0 Z50
N1002 G1 G42 Z50 F0.2 (specify finishing feed rate of 0.2mm/rev)
N1003 X0
N1004 G40 I-0.01 (tool nose rad comp cancel X- axis direction)
N1005 G80
N1006 G0 Z800 G97 S1102 M63 (Rapid to tool change position on Z axis only, Setting up spindle speed for next operation)
N1007 X52 Z800 T020202 M65 M66 (move to next start point on X axis, KEEPING tool firmly on Z axis home position to ensure safety, use M65 to specify free turret indexing when not home and M66 to not confirm tool change has done)
N1008 X52 Z52 T020202 (IMPORTANT!... Confirm tool index by re-specifying the same tool number)
N1009 G96 S180 (Constant surface speed of 180M/Min)
N1010 G85 NTURN D5 U0.5 W0.1 F0.35 (rough turning cycle parameters)
NTURN G81 (Turning profile)
N2001 G0 X18
N2002 G41 X18 Z50 F0.2 (specify finish feed rate now)
N2003 X20 Z49
N2004 Z25
N2005 X46
N2006 X52 A135
N2007 G40 I0.01 (cancel tool nose radius X+ Direction)
N2008 G80
N2009 G0 X52 Z800 G97 S1102 M63 (rapid to Z home position updating spindle speed on the way)
N2010 X18 Z800 T030303 M65 M66 G97 S2000 M63 (keep moving to start point on X for the next process, keeping Z at home posn, change tool to finishing tool using free indexing and no tool change confirmation)
N2011 X18 Z52 T030303 G97 S4420 M63 (IMPORTANT! Move to start point of finish cycle updating the spindle speed to the next speed required)
N2012 G96 S250 (select const surface speed of 250M/Min)
N2013 G87 NTURN (Shape is defined at line starting with NTURN)
N3001 G0 X52 Z52 (rapid move to next cycle start point)
N3002 G87 NFACE (Facing cycle defined on line NFACE)
N3003 G0 Z800 G97 S1000 M63 (move to Z home point slowing the spindle down in the process)
N3004 X800 Z800 M5 M9 M63 T0100 M65 M66 (move to home position on X and Z, using free indexing and no tool confirmation and no spindle speed confirmation)
N3005 X800 Z800 T0100 M60 (keep at home and confirm tool selection, turn OFF spindle speed cancellation)
N3006 M2 (end of program)
Now, what I have done to select some of the different spindle speeds on the lines between tools is to simply observe the actual spindle speed of the machine when it gets to the required position in the machine.
The idea is that you get to your targets at around the same time as the spindle hits the required RPM.
The procedure I always have used when using cycle time reduction on tool changes is this:
Move to Z home position, updating spindle speed.
Move to cycle start point on X, while staying home on Z while changing to next tool in the process. This is important as if you have a long boring bar in the turret, you can then make sure the tool does not hit the job/chuck during the index process.
You MUST confirm that the selected tool is in position prior to moving in to the start point for machining as you can imagine the crash occurring if the turret is still rotating when positioned near the part/chuck!
To get the spindle to update on the move, you use M63, but it is a one shot M code on the older machines. i.e active only on the programmed line.
Hope this helps you speed up your cycle.
Cheers
Brian.