Here is the beginning of one test program:
G90
G0 X0 Y0
M3 S0
F1000
G91
S0
G0 X0 Y0.333 S0
G1 X.333 Y-.333 S20
S0
G0 X0.333 Y0 S0
G1 X-.667 Y.667 S20
S0
G0 X0 Y0.333 S0
G1 X.333 Y-.333 S20
X.667 Y-.667 S21
S0
G0 X0.333 Y0 S0
G1 X-.667 Y.667 S22
X-.667 Y.667 S21
S0
G0 X0 Y0.333 S0
G1 X.667 Y-.667 S21
X1 Y-1 S22
S0
Here is another that I tried:
G01X0Y0
S0
M3
F1500
S15 G2 R5 X10
G2 R5 X0
S0
M5
M30
The first one is code generated from a laser engraving program, the second was just written by hand to burn a circle. The first one just burns the crap out of everything because of the pauses, the second one burns dot where the circle ends.
Code should work. Sorry I can’t think of anything else now. I have a friend with a similar system and he too is running into some timing issues, a little different from you but still annoying . At some point we may try to put a scope on the signals to see if we can detect a delay, but for now, I too am stumped.
If anyone else stumbles upon this thread like I did looking for answers I've found a solution. It's late and I'll try to post the code and details tomorrow. Still working on processing raster images through mach3 though. That's going to take a little postprocessor magic.