I had the same problem. It really looks easy to change it. Add new lines in code "Commands.cpp", function processGCode... for G0 speed i use X max feedrate. I hope it helps. I check it now on my miling machine.
void Commands::processGCode(GCode *com) {
uint32_t codenum; //throw away variable
switch(com->G) {
case 0: // G0 -> G1
case 1: // G1
#if defined(SUPPORT_LASER) && SUPPORT_LASER
{
// disable laser for G0 moves
bool laserOn = LaserDriver::laserOn;
if(com->G == 0 && Printer::mode == PRINTER_MODE_LASER) {
LaserDriver::laserOn = false;
}
#endif // defined
if(com->hasS()) Printer::setNoDestinationCheck(com->S != 0);
if(Printer::setDestinationStepsFromGCode(com)) // For X Y Z E F
#if NONLINEAR_SYSTEM
if (!PrintLine::queueNonlinearMove(ALWAYS_CHECK_ENDSTOPS, true, true)) {
Com::printWarningFLN(PSTR("executeGCode / queueDeltaMove returns error"));
}
#else
//added changed speed to max feedrate for G0 function
if (com->G == 0)
{ //----memorize speed----
float feedrate_mem = Printer::feedrate;
Printer::feedrate = MAX_FEEDRATE_X;
PrintLine::queueCartesianMove(ALWAYS_CHECK_ENDSTOPS, true);
//----G1 speed back------
Printer::feedrate = feedrate_mem;
}
else
{
PrintLine::queueCartesianMove(ALWAYS_CHECK_ENDSTOPS, true);
}
#endif
#if UI_HAS_KEYS
// ui can only execute motion commands if we are not waiting inside a move for an
// old move to finish. For normal response times, we always leave one free after
// sending a line. Drawback: 1 buffer line less for limited time. Since input cache
// gets filled while waiting, the lost is neglectible.
PrintLine::waitForXFreeLines(1, true);
#endif // UI_HAS_KEYS
#ifdef DEBUG_QUEUE_MOVE
{
InterruptProtectedBlock noInts;
int lc = (int)PrintLine::linesCount;
int lp = (int)PrintLine::linesPos;
int wp = (int)PrintLine::linesWritePos;
int n = (wp - lp);
if(n < 0) n += PRINTLINE_CACHE_SIZE;
noInts.unprotect();
if(n != lc)
Com::printFLN(PSTR("Buffer corrupted"));
}
#endif
#if defined(SUPPORT_LASER) && SUPPORT_LASER
LaserDriver::laserOn = laserOn;
}
#endif // defined
break;