Playing around on break I came up with this, not sure if it will run in Mach but it does in NCPlot.
Down feeds and radial outfeeds are set very small, not sure what your machine can handle.
Also you would need to add tool changes and length compensation code for however you normally do them.
Code:
(X ZERO CENTER OF HOLE)
(Y ZERO CENTER OF HOLE)
(Z ZERO FINISHED TOP OF PART)
(TOOL CENTERLINE PROGRAMMING)
(THE LINES WITH COMMENTS ABOUT ,FEED PER,)
(CAN BE CHANGED FOR MORE OR LESS CUT PER PASS)
(DURING THE SPIRAL DOWN AND OUT)
(THE LINE WITH THE COMMENT ,STEP ANGLE, CAN)
(BE CHANGED FOR MORE OR LESS CUT PER PASS)
(AROUND THE RADIUS)
(*************)
(PROGRAM FOR)
(1/2 IN FLAT END MILL)
G0X0.230Y0.000
G0Z1.000
G1Z0.100F30.0
()
#1=0.03
#2=0.005(DOWN FEED PER G3)
()
WHILE[#1GT-0.375]DO1
G3X0.230I-0.230Z[#1]F5.0
#1=[#1-#2]
END1
G3X0.230I-0.230Z[-0.375]F5.0
(MAKE BOTTOM FLAT)
G3X0.230I-0.230F5.0
(5.725/2 = 2.8625)
(2.8625-0.375 = 2.4875)
(2.4875-0.250 = 2.2375)
()
#1=0.230
#2=0.005(OUT FEED PER G3)
()
WHILE[#1 LT 2.2375]DO1
G1X[#1]F2.0
G3X[#1]I[-#1]F5.0
#1=[#1+#2]
END1
G1X2.2375F2.0
G3X2.2375I-2.2375F5.0
(*************)
(PROGRAM FOR)
(1/2 IN BALL END MILL)
()
G0X2.4875Y0.000
G0Z1.000
G1Z0.100F30.0
()
#1=0.03
#2=0.005(DOWN FEED PER G3)
()
WHILE[#1GT-0.375]DO1
G3X2.4875I-2.4875Z[#1]F5.0
#1=[#1-#2]
END1
G3X2.4875I-2.4875Z[-0.375]F5.0
(MAKE BOTTOM FLAT)
G3X2.4875I-2.4875F5.0
#1=0.0
#2=0.0
#3=0.0
#4=2.0(STEP ANGLE AROUND 0.375 RAD)
()
WHILE[#3 LT 100]DO1
#1=[0.125-[0.125*COS[#3]]]
#2=0.125*SIN[#3]
G1Z[-0.375+#1]F5.0
G1X[2.4875+#2]F2.0
G3X[2.4875+#2]I[-[2.4875+#2]]F5.0
#3=[#3+#4]
END1