you could replace any m30 in a program with m99 it will never stop
I use them all the time for warmup routines or checking tool changer issues.
you don't need a m98 just in sub routine calls
Here is a rough example of stepping over and maybe drilling or spotfacing
#100=1
#101=1.5
M98 P1000 L1
M3
M98 P2000 L9
M98 P1000 L1
M5
M30
O1000
G0z1
G0X0Y0
m99
O2000
#100=#100+1
g0 x#100 y#101
g1z-.1f40
g4p1
g0z.1
m99