M1 is optional stop. I have used it a lot and it works like it should. When the the program is running and it gets to the line M1, the program stops. How well this will work for you depends on a lot of things. For example, it does not cut the spindle or coolant off, it simply stops executing G-code. Another thing is you would need to know where in the program to insert the M1 before starting the run. If you know that ahead of time you could split your code at the same point makeing eliminating its use in this fashion. If I had to stop a job in the middle of it I would just do a feed hold, wait till all motion stoped, hit the stop button, write down my current line, coords and any active g or m codes in case I lost power while away. When I got ready to start it back (if the machine had'nt lost power) I would turn my coolant and spindle back on and hit the cycle start button. If power had been cycled I would home (refrence) the machine out, use my note to get everything where it needed to be and go from there.
Brett