Than maybe you are also interested in my controlling software (in VB.net) for this firmware hwCNC
Thanks, but, sorry, I don't use Windows - just Linux.
Edit to add ...
I have now had a quick look at your Arduino code. It seems to me your PC sends a GCode line to the Arduino which then parses it and excutes the move.
My idea is to interpret the GCode on my PC and just send the minimum data needed to define the move to the Arduino.
At the moment I'm thinking of sending 4 numbers (for 3 motors) the total number of microseconds for the move and, for each motor, the number of microseconds between steps. The idea is to minimize the amount of computation needed on the Arduino and do the heavy lifting on the PC where it is much easier.
The PC can convert the GCode into numbers and save them in a file. Then a simple PC program can send the next set of numbers as requested by the Arduino. My plan is that the total data from the PC will fit in the Arduino serial buffer so the data can be received in the background while the Arduino is implementing a move. The data for the next move will then be immediately available when the current move is finished.
The stepper motors will (hopefully) drive 3 axes on a small metal working lathe.