diff --git a/Marlin/src/gcode/config/M200-M205.cpp b/Marlin/src/gcode/config/M200-M205.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b7b9bf56d56c03deec00df55be7fa626cc69ef68
--- /dev/null
+++ b/Marlin/src/gcode/config/M200-M205.cpp
@@ -0,0 +1,129 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "../gcode.h"
+#include "../../Marlin.h"
+#include "../../module/planner.h"
+
+/**
+ * M200: Set filament diameter and set E axis units to cubic units
+ *
+ *    T<extruder> - Optional extruder number. Current extruder if omitted.
+ *    D<linear> - Diameter of the filament. Use "D0" to switch back to linear units on the E axis.
+ */
+void GcodeSuite::M200() {
+
+  if (get_target_extruder_from_command()) return;
+
+  if (parser.seen('D')) {
+    // setting any extruder filament size disables volumetric on the assumption that
+    // slicers either generate in extruder values as cubic mm or as as filament feeds
+    // for all extruders
+    if ( (parser.volumetric_enabled = (parser.value_linear_units() != 0.0)) )
+      planner.set_filament_size(target_extruder, parser.value_linear_units());
+  }
+  planner.calculate_volumetric_multipliers();
+}
+
+/**
+ * M201: Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
+ *
+ *       With multiple extruders use T to specify which one.
+ */
+void GcodeSuite::M201() {
+
+  GET_TARGET_EXTRUDER();
+
+  LOOP_XYZE(i) {
+    if (parser.seen(axis_codes[i])) {
+      const uint8_t a = i + (i == E_AXIS ? TARGET_EXTRUDER : 0);
+      planner.max_acceleration_mm_per_s2[a] = parser.value_axis_units((AxisEnum)a);
+    }
+  }
+  // steps per sq second need to be updated to agree with the units per sq second (as they are what is used in the planner)
+  planner.reset_acceleration_rates();
+}
+
+/**
+ * M203: Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in units/sec
+ *
+ *       With multiple extruders use T to specify which one.
+ */
+void GcodeSuite::M203() {
+
+  GET_TARGET_EXTRUDER();
+
+  LOOP_XYZE(i)
+    if (parser.seen(axis_codes[i])) {
+      const uint8_t a = i + (i == E_AXIS ? TARGET_EXTRUDER : 0);
+      planner.max_feedrate_mm_s[a] = parser.value_axis_units((AxisEnum)a);
+    }
+}
+
+/**
+ * M204: Set Accelerations in units/sec^2 (M204 P1200 R3000 T3000)
+ *
+ *    P = Printing moves
+ *    R = Retract only (no X, Y, Z) moves
+ *    T = Travel (non printing) moves
+ *
+ *  Also sets minimum segment time in ms (B20000) to prevent buffer under-runs and M20 minimum feedrate
+ */
+void GcodeSuite::M204() {
+  if (parser.seen('S')) {  // Kept for legacy compatibility. Should NOT BE USED for new developments.
+    planner.travel_acceleration = planner.acceleration = parser.value_linear_units();
+    SERIAL_ECHOLNPAIR("Setting Print and Travel Acceleration: ", planner.acceleration);
+  }
+  if (parser.seen('P')) {
+    planner.acceleration = parser.value_linear_units();
+    SERIAL_ECHOLNPAIR("Setting Print Acceleration: ", planner.acceleration);
+  }
+  if (parser.seen('R')) {
+    planner.retract_acceleration = parser.value_linear_units();
+    SERIAL_ECHOLNPAIR("Setting Retract Acceleration: ", planner.retract_acceleration);
+  }
+  if (parser.seen('T')) {
+    planner.travel_acceleration = parser.value_linear_units();
+    SERIAL_ECHOLNPAIR("Setting Travel Acceleration: ", planner.travel_acceleration);
+  }
+}
+
+/**
+ * M205: Set Advanced Settings
+ *
+ *    S = Min Feed Rate (units/s)
+ *    T = Min Travel Feed Rate (units/s)
+ *    B = Min Segment Time (µs)
+ *    X = Max X Jerk (units/sec^2)
+ *    Y = Max Y Jerk (units/sec^2)
+ *    Z = Max Z Jerk (units/sec^2)
+ *    E = Max E Jerk (units/sec^2)
+ */
+void GcodeSuite::M205() {
+  if (parser.seen('S')) planner.min_feedrate_mm_s = parser.value_linear_units();
+  if (parser.seen('T')) planner.min_travel_feedrate_mm_s = parser.value_linear_units();
+  if (parser.seen('B')) planner.min_segment_time = parser.value_millis();
+  if (parser.seen('X')) planner.max_jerk[X_AXIS] = parser.value_linear_units();
+  if (parser.seen('Y')) planner.max_jerk[Y_AXIS] = parser.value_linear_units();
+  if (parser.seen('Z')) planner.max_jerk[Z_AXIS] = parser.value_linear_units();
+  if (parser.seen('E')) planner.max_jerk[E_AXIS] = parser.value_linear_units();
+}
diff --git a/Marlin/src/gcode/config/M200.cpp b/Marlin/src/gcode/config/M200.cpp
deleted file mode 100644
index 08117163846543393c0ba0157049d01048f6ee49..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/config/M200.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../gcode.h"
-#include "../../Marlin.h"
-#include "../../module/planner.h"
-
-/**
- * M200: Set filament diameter and set E axis units to cubic units
- *
- *    T<extruder> - Optional extruder number. Current extruder if omitted.
- *    D<linear> - Diameter of the filament. Use "D0" to switch back to linear units on the E axis.
- */
-void GcodeSuite::M200() {
-
-  if (get_target_extruder_from_command()) return;
-
-  if (parser.seen('D')) {
-    // setting any extruder filament size disables volumetric on the assumption that
-    // slicers either generate in extruder values as cubic mm or as as filament feeds
-    // for all extruders
-    if ( (parser.volumetric_enabled = (parser.value_linear_units() != 0.0)) )
-      planner.set_filament_size(target_extruder, parser.value_linear_units());
-  }
-  planner.calculate_volumetric_multipliers();
-}
diff --git a/Marlin/src/gcode/config/M201.cpp b/Marlin/src/gcode/config/M201.cpp
deleted file mode 100644
index d6740499aa27136643a122badce2400a1551708d..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/config/M201.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../gcode.h"
-#include "../../module/planner.h"
-
-/**
- * M201: Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
- *
- *       With multiple extruders use T to specify which one.
- */
-void GcodeSuite::M201() {
-
-  GET_TARGET_EXTRUDER();
-
-  LOOP_XYZE(i) {
-    if (parser.seen(axis_codes[i])) {
-      const uint8_t a = i + (i == E_AXIS ? TARGET_EXTRUDER : 0);
-      planner.max_acceleration_mm_per_s2[a] = parser.value_axis_units((AxisEnum)a);
-    }
-  }
-  // steps per sq second need to be updated to agree with the units per sq second (as they are what is used in the planner)
-  planner.reset_acceleration_rates();
-}
diff --git a/Marlin/src/gcode/config/M203.cpp b/Marlin/src/gcode/config/M203.cpp
deleted file mode 100644
index 60f9ce37bea2a63ab4d0de83c97b81591771c3f3..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/config/M203.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../gcode.h"
-#include "../../module/planner.h"
-
-/**
- * M203: Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in units/sec
- *
- *       With multiple extruders use T to specify which one.
- */
-void GcodeSuite::M203() {
-
-  GET_TARGET_EXTRUDER();
-
-  LOOP_XYZE(i)
-    if (parser.seen(axis_codes[i])) {
-      const uint8_t a = i + (i == E_AXIS ? TARGET_EXTRUDER : 0);
-      planner.max_feedrate_mm_s[a] = parser.value_axis_units((AxisEnum)a);
-    }
-}
diff --git a/Marlin/src/gcode/config/M204.cpp b/Marlin/src/gcode/config/M204.cpp
deleted file mode 100644
index c8edcbf9710202fc98230a3a53c4d606472762bf..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/config/M204.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../gcode.h"
-#include "../../module/planner.h"
-
-/**
- * M204: Set Accelerations in units/sec^2 (M204 P1200 R3000 T3000)
- *
- *    P = Printing moves
- *    R = Retract only (no X, Y, Z) moves
- *    T = Travel (non printing) moves
- *
- *  Also sets minimum segment time in ms (B20000) to prevent buffer under-runs and M20 minimum feedrate
- */
-void GcodeSuite::M204() {
-  if (parser.seen('S')) {  // Kept for legacy compatibility. Should NOT BE USED for new developments.
-    planner.travel_acceleration = planner.acceleration = parser.value_linear_units();
-    SERIAL_ECHOLNPAIR("Setting Print and Travel Acceleration: ", planner.acceleration);
-  }
-  if (parser.seen('P')) {
-    planner.acceleration = parser.value_linear_units();
-    SERIAL_ECHOLNPAIR("Setting Print Acceleration: ", planner.acceleration);
-  }
-  if (parser.seen('R')) {
-    planner.retract_acceleration = parser.value_linear_units();
-    SERIAL_ECHOLNPAIR("Setting Retract Acceleration: ", planner.retract_acceleration);
-  }
-  if (parser.seen('T')) {
-    planner.travel_acceleration = parser.value_linear_units();
-    SERIAL_ECHOLNPAIR("Setting Travel Acceleration: ", planner.travel_acceleration);
-  }
-}
diff --git a/Marlin/src/gcode/config/M205.cpp b/Marlin/src/gcode/config/M205.cpp
deleted file mode 100644
index e6b39150d014c3039f25af0b8cbfdeedbc279ce0..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/config/M205.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../gcode.h"
-#include "../../module/planner.h"
-
-/**
- * M205: Set Advanced Settings
- *
- *    S = Min Feed Rate (units/s)
- *    T = Min Travel Feed Rate (units/s)
- *    B = Min Segment Time (µs)
- *    X = Max X Jerk (units/sec^2)
- *    Y = Max Y Jerk (units/sec^2)
- *    Z = Max Z Jerk (units/sec^2)
- *    E = Max E Jerk (units/sec^2)
- */
-void GcodeSuite::M205() {
-  if (parser.seen('S')) planner.min_feedrate_mm_s = parser.value_linear_units();
-  if (parser.seen('T')) planner.min_travel_feedrate_mm_s = parser.value_linear_units();
-  if (parser.seen('B')) planner.min_segment_time = parser.value_millis();
-  if (parser.seen('X')) planner.max_jerk[X_AXIS] = parser.value_linear_units();
-  if (parser.seen('Y')) planner.max_jerk[Y_AXIS] = parser.value_linear_units();
-  if (parser.seen('Z')) planner.max_jerk[Z_AXIS] = parser.value_linear_units();
-  if (parser.seen('E')) planner.max_jerk[E_AXIS] = parser.value_linear_units();
-}
diff --git a/Marlin/src/gcode/control/M108.cpp b/Marlin/src/gcode/control/M108.cpp
deleted file mode 100644
index 238025283ebf8f28454b3336a802fceb15a27f96..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/control/M108.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if DISABLED(EMERGENCY_PARSER)
-
-#include "../gcode.h"
-#include "../../Marlin.h" // for wait_for_heatup
-
-/**
- * M108: Stop the waiting for heaters in M109, M190, M303. Does not affect the target temperature.
- */
-void GcodeSuite::M108() {
-
-  wait_for_heatup = false;
-
-}
-
-#endif // !EMERGENCY_PARSER
diff --git a/Marlin/src/gcode/control/M410.cpp b/Marlin/src/gcode/control/M108_M112_M410.cpp
similarity index 79%
rename from Marlin/src/gcode/control/M410.cpp
rename to Marlin/src/gcode/control/M108_M112_M410.cpp
index f2c12e672d731b690618185a1328f5a02ce5762d..7b49951266b6ed74df5d77236a5b337de5fb6821 100644
--- a/Marlin/src/gcode/control/M410.cpp
+++ b/Marlin/src/gcode/control/M108_M112_M410.cpp
@@ -25,7 +25,21 @@
 #if DISABLED(EMERGENCY_PARSER)
 
 #include "../gcode.h"
-#include "../../Marlin.h" // for quickstop_stepper
+#include "../../Marlin.h" // for wait_for_heatup, kill, quickstop_stepper
+
+/**
+ * M108: Stop the waiting for heaters in M109, M190, M303. Does not affect the target temperature.
+ */
+void GcodeSuite::M108() {
+  wait_for_heatup = false;
+}
+
+/**
+ * M112: Emergency Stop
+ */
+void GcodeSuite::M112() {
+  kill(PSTR(MSG_KILLED));
+}
 
 /**
  * M410: Quickstop - Abort all planned moves
@@ -34,9 +48,7 @@
  * will be out of sync with the stepper position after this.
  */
 void GcodeSuite::M410() {
-
   quickstop_stepper();
-
 }
 
 #endif // !EMERGENCY_PARSER
diff --git a/Marlin/src/gcode/control/M112.cpp b/Marlin/src/gcode/control/M112.cpp
deleted file mode 100644
index 40b99ee1be33bf0d9857dfeb8cc3d89ff10b0f8b..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/control/M112.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if DISABLED(EMERGENCY_PARSER)
-
-#include "../gcode.h"
-#include "../../Marlin.h" // for kill
-
-/**
- * M112: Emergency Stop
- */
-void GcodeSuite::M112() {
-
-  kill(PSTR(MSG_KILLED));
-
-}
-
-#endif // !EMERGENCY_PARSER
diff --git a/Marlin/src/gcode/control/M17.cpp b/Marlin/src/gcode/control/M17.cpp
deleted file mode 100644
index 1a089794f74bb087b3d2790b12f30d88c60ccca9..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/control/M17.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../gcode.h"
-#include "../../lcd/ultralcd.h"
-#include "../../Marlin.h"
-
-/**
- * M17: Enable power on all stepper motors
- */
-void GcodeSuite::M17() {
-  LCD_MESSAGEPGM(MSG_NO_MOVE);
-  enable_all_steppers();
-}
diff --git a/Marlin/src/gcode/control/M18_M84.cpp b/Marlin/src/gcode/control/M17_M18_M84.cpp
similarity index 92%
rename from Marlin/src/gcode/control/M18_M84.cpp
rename to Marlin/src/gcode/control/M17_M18_M84.cpp
index 1fc3bb0b597e5261f5097db2d3dbb96cc230492b..8f55d8836b75b99127489dee7e112e126d959c31 100644
--- a/Marlin/src/gcode/control/M18_M84.cpp
+++ b/Marlin/src/gcode/control/M17_M18_M84.cpp
@@ -22,13 +22,21 @@
 
 #include "../gcode.h"
 #include "../../Marlin.h" // for stepper_inactive_time
+#include "../../lcd/ultralcd.h"
 #include "../../module/stepper.h"
 
 #if ENABLED(AUTO_BED_LEVELING_UBL) && ENABLED(ULTRA_LCD)
   #include "../../feature/bedlevel/bedlevel.h"
-  #include "../../lcd/ultralcd.h"
 #endif
 
+/**
+ * M17: Enable power on all stepper motors
+ */
+void GcodeSuite::M17() {
+  LCD_MESSAGEPGM(MSG_NO_MOVE);
+  enable_all_steppers();
+}
+
 /**
  * M18, M84: Disable stepper motors
  */
diff --git a/Marlin/src/gcode/feature/digipot/M907.cpp b/Marlin/src/gcode/feature/digipot/M907-M910.cpp
similarity index 75%
rename from Marlin/src/gcode/feature/digipot/M907.cpp
rename to Marlin/src/gcode/feature/digipot/M907-M910.cpp
index 8a1062c10fd3ea76a59e857062bc811587645b12..10849f2eb8772f3a59b31be9042ed2138d669e92 100644
--- a/Marlin/src/gcode/feature/digipot/M907.cpp
+++ b/Marlin/src/gcode/feature/digipot/M907-M910.cpp
@@ -20,6 +20,10 @@
  *
  */
 
+#include "../../../inc/MarlinConfig.h"
+
+#if HAS_DIGIPOTSS || HAS_MOTOR_CURRENT_PWM || ENABLED(DIGIPOT_I2C) || ENABLED(DAC_STEPPER_CURRENT)
+
 #include "../../gcode.h"
 
 #if HAS_DIGIPOTSS || HAS_MOTOR_CURRENT_PWM
@@ -73,3 +77,34 @@ void GcodeSuite::M907() {
     LOOP_XYZE(i) if (parser.seen(axis_codes[i])) dac_current_percent(i, parser.value_float());
   #endif
 }
+
+#if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT)
+
+  /**
+   * M908: Control digital trimpot directly (M908 P<pin> S<current>)
+   */
+  void GcodeSuite::M908() {
+    #if HAS_DIGIPOTSS
+      stepper.digitalPotWrite(
+        parser.intval('P'),
+        parser.intval('S')
+      );
+    #endif
+    #if ENABLED(DAC_STEPPER_CURRENT)
+      dac_current_raw(
+        parser.byteval('P', -1),
+        parser.ushortval('S', 0)
+      );
+    #endif
+  }
+
+#endif // HAS_DIGIPOTSS || DAC_STEPPER_CURRENT
+
+#if ENABLED(DAC_STEPPER_CURRENT)
+
+  void GcodeSuite::M909() { dac_print_values(); }
+  void GcodeSuite::M910() { dac_commit_eeprom(); }
+
+#endif // DAC_STEPPER_CURRENT
+
+#endif // HAS_DIGIPOTSS || DAC_STEPPER_CURRENT || HAS_MOTOR_CURRENT_PWM || DIGIPOT_I2C
diff --git a/Marlin/src/gcode/feature/digipot/M908.cpp b/Marlin/src/gcode/feature/digipot/M908.cpp
deleted file mode 100644
index 0422927e3494c267bdf7b4440cae5e7191d3211a..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/feature/digipot/M908.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../../inc/MarlinConfig.h"
-
-#if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT)
-
-#include "../../gcode.h"
-
-#if HAS_DIGIPOTSS
-  #include "../../../module/stepper.h"
-#endif
-
-#if ENABLED(DAC_STEPPER_CURRENT)
-  #include "../../../feature/dac/stepper_dac.h"
-#endif
-
-/**
- * M908: Control digital trimpot directly (M908 P<pin> S<current>)
- */
-void GcodeSuite::M908() {
-  #if HAS_DIGIPOTSS
-    stepper.digitalPotWrite(
-      parser.intval('P'),
-      parser.intval('S')
-    );
-  #endif
-  #if ENABLED(DAC_STEPPER_CURRENT)
-    dac_current_raw(
-      parser.byteval('P', -1),
-      parser.ushortval('S', 0)
-    );
-  #endif
-}
-
-#endif // HAS_DIGIPOTSS || DAC_STEPPER_CURRENT
diff --git a/Marlin/src/gcode/feature/digipot/M909.cpp b/Marlin/src/gcode/feature/digipot/M909.cpp
deleted file mode 100644
index f23b9afdc5743be06a3b625eeb7486c95fb71627..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/feature/digipot/M909.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../../inc/MarlinConfig.h"
-
-#if ENABLED(DAC_STEPPER_CURRENT)
-
-#include "../../gcode.h"
-#include "../../../feature/dac/stepper_dac.h"
-
-void GcodeSuite::M909() {
-
-  dac_print_values();
-
-}
-
-#endif // DAC_STEPPER_CURRENT
diff --git a/Marlin/src/gcode/feature/digipot/M910.cpp b/Marlin/src/gcode/feature/digipot/M910.cpp
deleted file mode 100644
index 1e717c6e267150a3e6dab8cb9cfb0c7f990143f1..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/feature/digipot/M910.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../../inc/MarlinConfig.h"
-
-#if ENABLED(DAC_STEPPER_CURRENT)
-
-#include "../../gcode.h"
-#include "../../../feature/dac/stepper_dac.h"
-
-void GcodeSuite::M910() {
-
-  dac_commit_eeprom();
-
-}
-
-#endif // DAC_STEPPER_CURRENT
diff --git a/Marlin/src/gcode/feature/fwretract/M208.cpp b/Marlin/src/gcode/feature/fwretract/M207-M209.cpp
similarity index 63%
rename from Marlin/src/gcode/feature/fwretract/M208.cpp
rename to Marlin/src/gcode/feature/fwretract/M207-M209.cpp
index 85d234f41471ed73cd8befcbdb3de960bd53f079..f319cec9c44a73d2d3620e4e6d5b6d846df11a7a 100644
--- a/Marlin/src/gcode/feature/fwretract/M208.cpp
+++ b/Marlin/src/gcode/feature/fwretract/M207-M209.cpp
@@ -27,6 +27,21 @@
 #include "../../../feature/fwretract.h"
 #include "../../gcode.h"
 
+/**
+ * M207: Set firmware retraction values
+ *
+ *   S[+units]    retract_length
+ *   W[+units]    swap_retract_length (multi-extruder)
+ *   F[units/min] retract_feedrate_mm_s
+ *   Z[units]     retract_zlift
+ */
+void GcodeSuite::M207() {
+  if (parser.seen('S')) fwretract.retract_length = parser.value_axis_units(E_AXIS);
+  if (parser.seen('F')) fwretract.retract_feedrate_mm_s = MMM_TO_MMS(parser.value_axis_units(E_AXIS));
+  if (parser.seen('Z')) fwretract.retract_zlift = parser.value_linear_units();
+  if (parser.seen('W')) fwretract.swap_retract_length = parser.value_axis_units(E_AXIS);
+}
+
 /**
  * M208: Set firmware un-retraction values
  *
@@ -42,4 +57,18 @@ void GcodeSuite::M208() {
   if (parser.seen('W')) fwretract.swap_retract_recover_length = parser.value_axis_units(E_AXIS);
 }
 
+/**
+ * M209: Enable automatic retract (M209 S1)
+ *   For slicers that don't support G10/11, reversed extrude-only
+ *   moves will be classified as retraction.
+ */
+void GcodeSuite::M209() {
+  if (MIN_AUTORETRACT <= MAX_AUTORETRACT) {
+    if (parser.seen('S')) {
+      fwretract.autoretract_enabled = parser.value_bool();
+      for (uint8_t i = 0; i < EXTRUDERS; i++) fwretract.retracted[i] = false;
+    }
+  }
+}
+
 #endif // FWRETRACT
diff --git a/Marlin/src/gcode/feature/fwretract/M207.cpp b/Marlin/src/gcode/feature/fwretract/M207.cpp
deleted file mode 100644
index 07a043fafecfa5da34076388d46fe7e064885d88..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/feature/fwretract/M207.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../../inc/MarlinConfig.h"
-
-#if ENABLED(FWRETRACT)
-
-#include "../../../feature/fwretract.h"
-#include "../../gcode.h"
-
-/**
- * M207: Set firmware retraction values
- *
- *   S[+units]    retract_length
- *   W[+units]    swap_retract_length (multi-extruder)
- *   F[units/min] retract_feedrate_mm_s
- *   Z[units]     retract_zlift
- */
-void GcodeSuite::M207() {
-  if (parser.seen('S')) fwretract.retract_length = parser.value_axis_units(E_AXIS);
-  if (parser.seen('F')) fwretract.retract_feedrate_mm_s = MMM_TO_MMS(parser.value_axis_units(E_AXIS));
-  if (parser.seen('Z')) fwretract.retract_zlift = parser.value_linear_units();
-  if (parser.seen('W')) fwretract.swap_retract_length = parser.value_axis_units(E_AXIS);
-}
-
-#endif // FWRETRACT
diff --git a/Marlin/src/gcode/feature/fwretract/M209.cpp b/Marlin/src/gcode/feature/fwretract/M209.cpp
deleted file mode 100644
index 7d5a334b86979dd0c9275d0cc87d73dd964e95a0..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/feature/fwretract/M209.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../../inc/MarlinConfig.h"
-
-#if ENABLED(FWRETRACT)
-
-#include "../../../feature/fwretract.h"
-#include "../../gcode.h"
-
-/**
- * M209: Enable automatic retract (M209 S1)
- *   For slicers that don't support G10/11, reversed extrude-only
- *   moves will be classified as retraction.
- */
-void GcodeSuite::M209() {
-  if (MIN_AUTORETRACT <= MAX_AUTORETRACT) {
-    if (parser.seen('S')) {
-      fwretract.autoretract_enabled = parser.value_bool();
-      for (uint8_t i = 0; i < EXTRUDERS; i++) fwretract.retracted[i] = false;
-    }
-  }
-}
-
-#endif // FWRETRACT
diff --git a/Marlin/src/gcode/feature/mixing/M163.cpp b/Marlin/src/gcode/feature/mixing/M163-M165.cpp
similarity index 57%
rename from Marlin/src/gcode/feature/mixing/M163.cpp
rename to Marlin/src/gcode/feature/mixing/M163-M165.cpp
index 721928289e942669f74f596661d143b45034d912..34d84163ea3efff9275cdc5cebcd5520ba574c66 100644
--- a/Marlin/src/gcode/feature/mixing/M163.cpp
+++ b/Marlin/src/gcode/feature/mixing/M163-M165.cpp
@@ -44,4 +44,42 @@ void GcodeSuite::M163() {
   }
 }
 
+#if MIXING_VIRTUAL_TOOLS > 1
+
+  /**
+   * M164: Store the current mix factors as a virtual tool.
+   *
+   *   S[index]   The virtual tool to store
+   *
+   */
+  void GcodeSuite::M164() {
+    const int tool_index = parser.intval('S');
+    if (tool_index < MIXING_VIRTUAL_TOOLS) {
+      normalize_mix();
+      for (uint8_t i = 0; i < MIXING_STEPPERS; i++)
+        mixing_virtual_tool_mix[tool_index][i] = mixing_factor[i];
+    }
+  }
+
+#endif // MIXING_VIRTUAL_TOOLS > 1
+
+#if ENABLED(DIRECT_MIXING_IN_G1)
+
+  /**
+   * M165: Set multiple mix factors for a mixing extruder.
+   *       Factors that are left out will be set to 0.
+   *       All factors together must add up to 1.0.
+   *
+   *   A[factor] Mix factor for extruder stepper 1
+   *   B[factor] Mix factor for extruder stepper 2
+   *   C[factor] Mix factor for extruder stepper 3
+   *   D[factor] Mix factor for extruder stepper 4
+   *   H[factor] Mix factor for extruder stepper 5
+   *   I[factor] Mix factor for extruder stepper 6
+   *
+   */
+  void GcodeSuite::M165() { gcode_get_mix(); }
+
+#endif // DIRECT_MIXING_IN_G1
+
 #endif // MIXING_EXTRUDER
diff --git a/Marlin/src/gcode/feature/mixing/M164.cpp b/Marlin/src/gcode/feature/mixing/M164.cpp
deleted file mode 100644
index 138b374fd9c658b241e777038bc46568699168b8..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/feature/mixing/M164.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../../inc/MarlinConfig.h"
-
-#if ENABLED(MIXING_EXTRUDER) && MIXING_VIRTUAL_TOOLS > 1
-
-#include "../../gcode.h"
-#include "../../../feature/mixing.h"
-
-/**
- * M164: Store the current mix factors as a virtual tool.
- *
- *   S[index]   The virtual tool to store
- *
- */
-void GcodeSuite::M164() {
-  const int tool_index = parser.intval('S');
-  if (tool_index < MIXING_VIRTUAL_TOOLS) {
-    normalize_mix();
-    for (uint8_t i = 0; i < MIXING_STEPPERS; i++)
-      mixing_virtual_tool_mix[tool_index][i] = mixing_factor[i];
-  }
-}
-
-#endif // MIXING_EXTRUDER && MIXING_VIRTUAL_TOOLS > 1
diff --git a/Marlin/src/gcode/feature/mixing/M165.cpp b/Marlin/src/gcode/feature/mixing/M165.cpp
deleted file mode 100644
index feaa8248eecf52f6f955178287cc8ba21d5c3900..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/feature/mixing/M165.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../../inc/MarlinConfig.h"
-
-#if ENABLED(DIRECT_MIXING_IN_G1)
-
-#include "../../gcode.h"
-#include "../../../feature/mixing.h"
-
-/**
- * M165: Set multiple mix factors for a mixing extruder.
- *       Factors that are left out will be set to 0.
- *       All factors together must add up to 1.0.
- *
- *   A[factor] Mix factor for extruder stepper 1
- *   B[factor] Mix factor for extruder stepper 2
- *   C[factor] Mix factor for extruder stepper 3
- *   D[factor] Mix factor for extruder stepper 4
- *   H[factor] Mix factor for extruder stepper 5
- *   I[factor] Mix factor for extruder stepper 6
- *
- */
-void GcodeSuite::M165() { gcode_get_mix(); }
-
-#endif // DIRECT_MIXING_IN_G1
diff --git a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e6365c6340478f4c94a2c0e8f5cde05ed4e4f753
--- /dev/null
+++ b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp
@@ -0,0 +1,155 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "../../../inc/MarlinConfig.h"
+
+#if ENABLED(HAVE_TMC2130)
+
+#include "../../gcode.h"
+#include "../../../feature/tmc2130.h"
+#include "../../../module/stepper_indirection.h"
+
+inline void tmc2130_report_otpw(TMC2130Stepper &st, const char name) {
+  SERIAL_CHAR(name);
+  SERIAL_ECHOPGM(" axis temperature prewarn triggered: ");
+  serialprintPGM(st.getOTPW() ? PSTR("true") : PSTR("false"));
+  SERIAL_EOL();
+}
+
+/**
+ * M911: Report TMC2130 stepper driver overtemperature pre-warn flag
+ * The flag is held by the library and persist until manually cleared by M912
+ */
+void GcodeSuite::M911() {
+  const bool reportX = parser.seen('X'), reportY = parser.seen('Y'), reportZ = parser.seen('Z'), reportE = parser.seen('E'),
+           reportAll = (!reportX && !reportY && !reportZ && !reportE) || (reportX && reportY && reportZ && reportE);
+  #if ENABLED(X_IS_TMC2130)
+    if (reportX || reportAll) tmc2130_report_otpw(stepperX, 'X');
+  #endif
+  #if ENABLED(Y_IS_TMC2130)
+    if (reportY || reportAll) tmc2130_report_otpw(stepperY, 'Y');
+  #endif
+  #if ENABLED(Z_IS_TMC2130)
+    if (reportZ || reportAll) tmc2130_report_otpw(stepperZ, 'Z');
+  #endif
+  #if ENABLED(E0_IS_TMC2130)
+    if (reportE || reportAll) tmc2130_report_otpw(stepperE0, 'E');
+  #endif
+}
+
+inline void tmc2130_clear_otpw(TMC2130Stepper &st, const char name) {
+  st.clear_otpw();
+  SERIAL_CHAR(name);
+  SERIAL_ECHOLNPGM(" prewarn flag cleared");
+}
+
+/**
+ * M912: Clear TMC2130 stepper driver overtemperature pre-warn flag held by the library
+ */
+void GcodeSuite::M912() {
+  const bool clearX = parser.seen('X'), clearY = parser.seen('Y'), clearZ = parser.seen('Z'), clearE = parser.seen('E'),
+           clearAll = (!clearX && !clearY && !clearZ && !clearE) || (clearX && clearY && clearZ && clearE);
+  #if ENABLED(X_IS_TMC2130)
+    if (clearX || clearAll) tmc2130_clear_otpw(stepperX, 'X');
+  #endif
+  #if ENABLED(Y_IS_TMC2130)
+    if (clearY || clearAll) tmc2130_clear_otpw(stepperY, 'Y');
+  #endif
+  #if ENABLED(Z_IS_TMC2130)
+    if (clearZ || clearAll) tmc2130_clear_otpw(stepperZ, 'Z');
+  #endif
+  #if ENABLED(E0_IS_TMC2130)
+    if (clearE || clearAll) tmc2130_clear_otpw(stepperE0, 'E');
+  #endif
+}
+
+#if ENABLED(HYBRID_THRESHOLD)
+
+  #include "../../../module/planner.h"
+
+  inline void tmc2130_get_pwmthrs(TMC2130Stepper &st, const char name, const uint16_t spmm) {
+    SERIAL_CHAR(name);
+    SERIAL_ECHOPGM(" stealthChop max speed set to ");
+    SERIAL_ECHOLN(12650000UL * st.microsteps() / (256 * st.stealth_max_speed() * spmm));
+  }
+  inline void tmc2130_set_pwmthrs(TMC2130Stepper &st, const char name, const int32_t thrs, const uint32_t spmm) {
+    st.stealth_max_speed(12650000UL * st.microsteps() / (256 * thrs * spmm));
+    tmc2130_get_pwmthrs(st, name, spmm);
+  }
+
+  /**
+   * M913: Set HYBRID_THRESHOLD speed.
+   */
+  void GcodeSuite::M913() {
+    uint16_t values[XYZE];
+    LOOP_XYZE(i)
+      values[i] = parser.intval(axis_codes[i]);
+
+    #if ENABLED(X_IS_TMC2130)
+      if (values[X_AXIS]) tmc2130_set_pwmthrs(stepperX, 'X', values[X_AXIS], planner.axis_steps_per_mm[X_AXIS]);
+      else tmc2130_get_pwmthrs(stepperX, 'X', planner.axis_steps_per_mm[X_AXIS]);
+    #endif
+    #if ENABLED(Y_IS_TMC2130)
+      if (values[Y_AXIS]) tmc2130_set_pwmthrs(stepperY, 'Y', values[Y_AXIS], planner.axis_steps_per_mm[Y_AXIS]);
+      else tmc2130_get_pwmthrs(stepperY, 'Y', planner.axis_steps_per_mm[Y_AXIS]);
+    #endif
+    #if ENABLED(Z_IS_TMC2130)
+      if (values[Z_AXIS]) tmc2130_set_pwmthrs(stepperZ, 'Z', values[Z_AXIS], planner.axis_steps_per_mm[Z_AXIS]);
+      else tmc2130_get_pwmthrs(stepperZ, 'Z', planner.axis_steps_per_mm[Z_AXIS]);
+    #endif
+    #if ENABLED(E0_IS_TMC2130)
+      if (values[E_AXIS]) tmc2130_set_pwmthrs(stepperE0, 'E', values[E_AXIS], planner.axis_steps_per_mm[E_AXIS]);
+      else tmc2130_get_pwmthrs(stepperE0, 'E', planner.axis_steps_per_mm[E_AXIS]);
+    #endif
+  }
+
+#endif // HYBRID_THRESHOLD
+
+#if ENABLED(SENSORLESS_HOMING)
+
+  inline void tmc2130_get_sgt(TMC2130Stepper &st, const char name) {
+    SERIAL_CHAR(name);
+    SERIAL_ECHOPGM(" driver homing sensitivity set to ");
+    SERIAL_ECHOLN(st.sgt());
+  }
+  inline void tmc2130_set_sgt(TMC2130Stepper &st, const char name, const int8_t sgt_val) {
+    st.sgt(sgt_val);
+    tmc2130_get_sgt(st, name);
+  }
+
+  /**
+   * M914: Set SENSORLESS_HOMING sensitivity.
+   */
+  void GcodeSuite::M914() {
+    #if ENABLED(X_IS_TMC2130)
+      if (parser.seen(axis_codes[X_AXIS])) tmc2130_set_sgt(stepperX, 'X', parser.value_int());
+      else tmc2130_get_sgt(stepperX, 'X');
+    #endif
+    #if ENABLED(Y_IS_TMC2130)
+      if (parser.seen(axis_codes[Y_AXIS])) tmc2130_set_sgt(stepperY, 'Y', parser.value_int());
+      else tmc2130_get_sgt(stepperY, 'Y');
+    #endif
+  }
+
+#endif // SENSORLESS_HOMING
+
+#endif // HAVE_TMC2130
diff --git a/Marlin/src/gcode/feature/trinamic/M911.cpp b/Marlin/src/gcode/feature/trinamic/M911.cpp
deleted file mode 100644
index 9ffbbeae914f465798af4d0f44e7af12e7c5f11f..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/feature/trinamic/M911.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../../inc/MarlinConfig.h"
-
-#if ENABLED(HAVE_TMC2130)
-
-#include "../../gcode.h"
-#include "../../../feature/tmc2130.h"
-#include "../../../module/stepper_indirection.h"
-
-inline void tmc2130_report_otpw(TMC2130Stepper &st, const char name) {
-  SERIAL_CHAR(name);
-  SERIAL_ECHOPGM(" axis temperature prewarn triggered: ");
-  serialprintPGM(st.getOTPW() ? PSTR("true") : PSTR("false"));
-  SERIAL_EOL();
-}
-
-/**
- * M911: Report TMC2130 stepper driver overtemperature pre-warn flag
- * The flag is held by the library and persist until manually cleared by M912
- */
-void GcodeSuite::M911() {
-  const bool reportX = parser.seen('X'), reportY = parser.seen('Y'), reportZ = parser.seen('Z'), reportE = parser.seen('E'),
-           reportAll = (!reportX && !reportY && !reportZ && !reportE) || (reportX && reportY && reportZ && reportE);
-  #if ENABLED(X_IS_TMC2130)
-    if (reportX || reportAll) tmc2130_report_otpw(stepperX, 'X');
-  #endif
-  #if ENABLED(Y_IS_TMC2130)
-    if (reportY || reportAll) tmc2130_report_otpw(stepperY, 'Y');
-  #endif
-  #if ENABLED(Z_IS_TMC2130)
-    if (reportZ || reportAll) tmc2130_report_otpw(stepperZ, 'Z');
-  #endif
-  #if ENABLED(E0_IS_TMC2130)
-    if (reportE || reportAll) tmc2130_report_otpw(stepperE0, 'E');
-  #endif
-}
-
-#endif // HAVE_TMC2130
diff --git a/Marlin/src/gcode/feature/trinamic/M912.cpp b/Marlin/src/gcode/feature/trinamic/M912.cpp
deleted file mode 100644
index 2931623c7a58480933c01b015627cf1cda303490..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/feature/trinamic/M912.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../../inc/MarlinConfig.h"
-
-#if ENABLED(HAVE_TMC2130)
-
-#include "../../gcode.h"
-#include "../../../feature/tmc2130.h"
-#include "../../../module/stepper_indirection.h"
-
-inline void tmc2130_clear_otpw(TMC2130Stepper &st, const char name) {
-  st.clear_otpw();
-  SERIAL_CHAR(name);
-  SERIAL_ECHOLNPGM(" prewarn flag cleared");
-}
-
-/**
- * M912: Clear TMC2130 stepper driver overtemperature pre-warn flag held by the library
- */
-void GcodeSuite::M912() {
-  const bool clearX = parser.seen('X'), clearY = parser.seen('Y'), clearZ = parser.seen('Z'), clearE = parser.seen('E'),
-           clearAll = (!clearX && !clearY && !clearZ && !clearE) || (clearX && clearY && clearZ && clearE);
-  #if ENABLED(X_IS_TMC2130)
-    if (clearX || clearAll) tmc2130_clear_otpw(stepperX, 'X');
-  #endif
-  #if ENABLED(Y_IS_TMC2130)
-    if (clearY || clearAll) tmc2130_clear_otpw(stepperY, 'Y');
-  #endif
-  #if ENABLED(Z_IS_TMC2130)
-    if (clearZ || clearAll) tmc2130_clear_otpw(stepperZ, 'Z');
-  #endif
-  #if ENABLED(E0_IS_TMC2130)
-    if (clearE || clearAll) tmc2130_clear_otpw(stepperE0, 'E');
-  #endif
-}
-
-#endif // HAVE_TMC2130
diff --git a/Marlin/src/gcode/feature/trinamic/M913.cpp b/Marlin/src/gcode/feature/trinamic/M913.cpp
deleted file mode 100644
index 523f94b359a64e5f34a233e2aaac304464cd2597..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/feature/trinamic/M913.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../../inc/MarlinConfig.h"
-
-#if ENABLED(HAVE_TMC2130) && ENABLED(HYBRID_THRESHOLD)
-
-#include "../../gcode.h"
-#include "../../../feature/tmc2130.h"
-#include "../../../module/planner.h"
-#include "../../../module/stepper_indirection.h"
-
-inline void tmc2130_get_pwmthrs(TMC2130Stepper &st, const char name, const uint16_t spmm) {
-  SERIAL_CHAR(name);
-  SERIAL_ECHOPGM(" stealthChop max speed set to ");
-  SERIAL_ECHOLN(12650000UL * st.microsteps() / (256 * st.stealth_max_speed() * spmm));
-}
-inline void tmc2130_set_pwmthrs(TMC2130Stepper &st, const char name, const int32_t thrs, const uint32_t spmm) {
-  st.stealth_max_speed(12650000UL * st.microsteps() / (256 * thrs * spmm));
-  tmc2130_get_pwmthrs(st, name, spmm);
-}
-
-/**
- * M913: Set HYBRID_THRESHOLD speed.
- */
-void GcodeSuite::M913() {
-  uint16_t values[XYZE];
-  LOOP_XYZE(i)
-    values[i] = parser.intval(axis_codes[i]);
-
-  #if ENABLED(X_IS_TMC2130)
-    if (values[X_AXIS]) tmc2130_set_pwmthrs(stepperX, 'X', values[X_AXIS], planner.axis_steps_per_mm[X_AXIS]);
-    else tmc2130_get_pwmthrs(stepperX, 'X', planner.axis_steps_per_mm[X_AXIS]);
-  #endif
-  #if ENABLED(Y_IS_TMC2130)
-    if (values[Y_AXIS]) tmc2130_set_pwmthrs(stepperY, 'Y', values[Y_AXIS], planner.axis_steps_per_mm[Y_AXIS]);
-    else tmc2130_get_pwmthrs(stepperY, 'Y', planner.axis_steps_per_mm[Y_AXIS]);
-  #endif
-  #if ENABLED(Z_IS_TMC2130)
-    if (values[Z_AXIS]) tmc2130_set_pwmthrs(stepperZ, 'Z', values[Z_AXIS], planner.axis_steps_per_mm[Z_AXIS]);
-    else tmc2130_get_pwmthrs(stepperZ, 'Z', planner.axis_steps_per_mm[Z_AXIS]);
-  #endif
-  #if ENABLED(E0_IS_TMC2130)
-    if (values[E_AXIS]) tmc2130_set_pwmthrs(stepperE0, 'E', values[E_AXIS], planner.axis_steps_per_mm[E_AXIS]);
-    else tmc2130_get_pwmthrs(stepperE0, 'E', planner.axis_steps_per_mm[E_AXIS]);
-  #endif
-}
-
-#endif // HAVE_TMC2130 && HYBRID_THRESHOLD
diff --git a/Marlin/src/gcode/feature/trinamic/M914.cpp b/Marlin/src/gcode/feature/trinamic/M914.cpp
deleted file mode 100644
index 25aefc13646f848509feb25f2e2595b819713c0d..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/feature/trinamic/M914.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../../inc/MarlinConfig.h"
-
-#if ENABLED(HAVE_TMC2130) && ENABLED(SENSORLESS_HOMING)
-
-#include "../../gcode.h"
-#include "../../../feature/tmc2130.h"
-#include "../../../module/stepper_indirection.h"
-
-inline void tmc2130_get_sgt(TMC2130Stepper &st, const char name) {
-  SERIAL_CHAR(name);
-  SERIAL_ECHOPGM(" driver homing sensitivity set to ");
-  SERIAL_ECHOLN(st.sgt());
-}
-inline void tmc2130_set_sgt(TMC2130Stepper &st, const char name, const int8_t sgt_val) {
-  st.sgt(sgt_val);
-  tmc2130_get_sgt(st, name);
-}
-
-/**
- * M914: Set SENSORLESS_HOMING sensitivity.
- */
-void GcodeSuite::M914() {
-  #if ENABLED(X_IS_TMC2130)
-    if (parser.seen(axis_codes[X_AXIS])) tmc2130_set_sgt(stepperX, 'X', parser.value_int());
-    else tmc2130_get_sgt(stepperX, 'X');
-  #endif
-  #if ENABLED(Y_IS_TMC2130)
-    if (parser.seen(axis_codes[Y_AXIS])) tmc2130_set_sgt(stepperY, 'Y', parser.value_int());
-    else tmc2130_get_sgt(stepperY, 'Y');
-  #endif
-}
-
-#endif // HAVE_TMC2130 && SENSORLESS_HOMING
diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp
index aa8cfd6dfc3115848ff4e804f01e6f0e7a5cbe98..1dccf744698fda297402312b30742d4251db0d34 100644
--- a/Marlin/src/gcode/gcode.cpp
+++ b/Marlin/src/gcode/gcode.cpp
@@ -636,13 +636,14 @@ void GcodeSuite::process_next_command() {
         case 900: M900(); break;  // M900: Set advance K factor.
       #endif
 
-      case 907: M907(); break;      // M907: Set digital trimpot motor current using axis codes.
-
-      #if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT)
-        case 908: M908(); break;    // M908: Control digital trimpot directly.
-        #if ENABLED(DAC_STEPPER_CURRENT) // As with Printrbot RevF
-          case 909: M909(); break;  // M909: Print digipot/DAC current value
-          case 910: M910(); break;  // M910: Commit digipot/DAC value to external EEPROM
+      #if HAS_DIGIPOTSS || HAS_MOTOR_CURRENT_PWM || ENABLED(DIGIPOT_I2C) || ENABLED(DAC_STEPPER_CURRENT)
+        case 907: M907(); break;      // M907: Set digital trimpot motor current using axis codes.
+        #if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT)
+          case 908: M908(); break;    // M908: Control digital trimpot directly.
+          #if ENABLED(DAC_STEPPER_CURRENT) // As with Printrbot RevF
+            case 909: M909(); break;  // M909: Print digipot/DAC current value
+            case 910: M910(); break;  // M910: Commit digipot/DAC value to external EEPROM
+          #endif
         #endif
       #endif
 
diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h
index 4bf97f79c8a43a3223d819ab775bc03440f17f5a..48f3bff5be2f659c56549008f7b8739fbe37a099 100644
--- a/Marlin/src/gcode/gcode.h
+++ b/Marlin/src/gcode/gcode.h
@@ -706,13 +706,14 @@ private:
     #endif
   #endif
 
-  static void M907();
-
-  #if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT)
-    static void M908();
-    #if ENABLED(DAC_STEPPER_CURRENT)
-      static void M909();
-      static void M910();
+  #if HAS_DIGIPOTSS || HAS_MOTOR_CURRENT_PWM || ENABLED(DIGIPOT_I2C) || ENABLED(DAC_STEPPER_CURRENT)
+    static void M907();
+    #if HAS_DIGIPOTSS || ENABLED(DAC_STEPPER_CURRENT)
+      static void M908();
+      #if ENABLED(DAC_STEPPER_CURRENT)
+        static void M909();
+        static void M910();
+      #endif
     #endif
   #endif
 
diff --git a/Marlin/src/gcode/geometry/M206.cpp b/Marlin/src/gcode/geometry/M206.cpp
deleted file mode 100644
index f537e884c8f1cc5b49a49480345adbab60516b2b..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/geometry/M206.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if HAS_M206_COMMAND
-
-#include "../gcode.h"
-#include "../../module/motion.h"
-
-/**
- * M206: Set Additional Homing Offset (X Y Z). SCARA aliases T=X, P=Y
- *
- * *** @thinkyhead: I recommend deprecating M206 for SCARA in favor of M665.
- * ***              M206 for SCARA will remain enabled in 1.1.x for compatibility.
- * ***              In the 2.0 release, it will simply be disabled by default.
- */
-void GcodeSuite::M206() {
-  LOOP_XYZ(i)
-    if (parser.seen(axis_codes[i]))
-      set_home_offset((AxisEnum)i, parser.value_linear_units());
-
-  #if ENABLED(MORGAN_SCARA)
-    if (parser.seen('T')) set_home_offset(A_AXIS, parser.value_linear_units()); // Theta
-    if (parser.seen('P')) set_home_offset(B_AXIS, parser.value_linear_units()); // Psi
-  #endif
-
-  SYNC_PLAN_POSITION_KINEMATIC();
-  report_current_position();
-}
-
-#endif // HAS_M206_COMMAND
diff --git a/Marlin/src/gcode/geometry/M428.cpp b/Marlin/src/gcode/geometry/M206_M428.cpp
similarity index 75%
rename from Marlin/src/gcode/geometry/M428.cpp
rename to Marlin/src/gcode/geometry/M206_M428.cpp
index 5ba3635110730cfd99210178296935a53ce22b69..a066692df2371ec793db9eb4a1813d7ad54907e8 100644
--- a/Marlin/src/gcode/geometry/M428.cpp
+++ b/Marlin/src/gcode/geometry/M206_M428.cpp
@@ -30,6 +30,27 @@
 #include "../../libs/buzzer.h"
 #include "../../Marlin.h" // for axis_homed
 
+/**
+ * M206: Set Additional Homing Offset (X Y Z). SCARA aliases T=X, P=Y
+ *
+ * *** @thinkyhead: I recommend deprecating M206 for SCARA in favor of M665.
+ * ***              M206 for SCARA will remain enabled in 1.1.x for compatibility.
+ * ***              In the 2.0 release, it will simply be disabled by default.
+ */
+void GcodeSuite::M206() {
+  LOOP_XYZ(i)
+    if (parser.seen(axis_codes[i]))
+      set_home_offset((AxisEnum)i, parser.value_linear_units());
+
+  #if ENABLED(MORGAN_SCARA)
+    if (parser.seen('T')) set_home_offset(A_AXIS, parser.value_linear_units()); // Theta
+    if (parser.seen('P')) set_home_offset(B_AXIS, parser.value_linear_units()); // Psi
+  #endif
+
+  SYNC_PLAN_POSITION_KINEMATIC();
+  report_current_position();
+}
+
 /**
  * M428: Set home_offset based on the distance between the
  *       current_position and the nearest "reference point."
diff --git a/Marlin/src/gcode/sdcard/M20-M30_M32-M34_M928.cpp b/Marlin/src/gcode/sdcard/M20-M30_M32-M34_M928.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..001783585fea8748ba4b719e92fd7f5e2e69cdb6
--- /dev/null
+++ b/Marlin/src/gcode/sdcard/M20-M30_M32-M34_M928.cpp
@@ -0,0 +1,191 @@
+/**
+ * Marlin 3D Printer Firmware
+ * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
+ *
+ * Based on Sprinter and grbl.
+ * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "../../inc/MarlinConfig.h"
+
+#if ENABLED(SDSUPPORT)
+
+#include "../gcode.h"
+#include "../../sd/cardreader.h"
+#include "../../module/printcounter.h"
+#include "../../module/stepper.h"
+
+#if ENABLED(PARK_HEAD_ON_PAUSE)
+  #include "../../feature/pause.h"
+  #include "../queue.h"
+#endif
+
+/**
+ * M20: List SD card to serial output
+ */
+void GcodeSuite::M20() {
+  SERIAL_PROTOCOLLNPGM(MSG_BEGIN_FILE_LIST);
+  card.ls();
+  SERIAL_PROTOCOLLNPGM(MSG_END_FILE_LIST);
+}
+
+/**
+ * M21: Init SD Card
+ */
+void GcodeSuite::M21() { card.initsd(); }
+
+/**
+ * M22: Release SD Card
+ */
+void GcodeSuite::M22() { card.release(); }
+
+/**
+ * M23: Open a file
+ */
+void GcodeSuite::M23() {
+  // Simplify3D includes the size, so zero out all spaces (#7227)
+  for (char *fn = parser.string_arg; *fn; ++fn) if (*fn == ' ') *fn = '\0';
+  card.openFile(parser.string_arg, true);
+}
+
+/**
+ * M24: Start or Resume SD Print
+ */
+void GcodeSuite::M24() {
+  #if ENABLED(PARK_HEAD_ON_PAUSE)
+    resume_print();
+  #endif
+
+  card.startFileprint();
+  print_job_timer.start();
+}
+
+/**
+ * M25: Pause SD Print
+ */
+void GcodeSuite::M25() {
+  card.pauseSDPrint();
+  print_job_timer.pause();
+
+  #if ENABLED(PARK_HEAD_ON_PAUSE)
+    enqueue_and_echo_commands_P(PSTR("M125")); // Must be enqueued with pauseSDPrint set to be last in the buffer
+  #endif
+}
+
+/**
+ * M26: Set SD Card file index
+ */
+void GcodeSuite::M26() {
+  if (card.cardOK && parser.seenval('S'))
+    card.setIndex(parser.value_long());
+}
+
+/**
+ * M27: Get SD Card status
+ */
+void GcodeSuite::M27() { card.getStatus(); }
+
+/**
+ * M28: Start SD Write
+ */
+void GcodeSuite::M28() { card.openFile(parser.string_arg, false); }
+
+/**
+ * M29: Stop SD Write
+ * Processed in write to file routine
+ */
+void GcodeSuite::M29() {
+  // card.saving = false;
+}
+
+/**
+ * M30 <filename>: Delete SD Card file
+ */
+void GcodeSuite::M30() {
+  if (card.cardOK) {
+    card.closefile();
+    card.removeFile(parser.string_arg);
+  }
+}
+
+/**
+ * M32: Select file and start SD Print
+ */
+void GcodeSuite::M32() {
+  if (IS_SD_PRINTING)
+    stepper.synchronize();
+
+  char* namestartpos = parser.string_arg;
+  const bool call_procedure = parser.boolval('P');
+
+  if (card.cardOK) {
+    card.openFile(namestartpos, true, call_procedure);
+
+    if (parser.seenval('S'))
+      card.setIndex(parser.value_long());
+
+    card.startFileprint();
+
+    // Procedure calls count as normal print time.
+    if (!call_procedure) print_job_timer.start();
+  }
+}
+
+#if ENABLED(LONG_FILENAME_HOST_SUPPORT)
+
+  /**
+   * M33: Get the long full path of a file or folder
+   *
+   * Parameters:
+   *   <dospath> Case-insensitive DOS-style path to a file or folder
+   *
+   * Example:
+   *   M33 miscel~1/armchair/armcha~1.gco
+   *
+   * Output:
+   *   /Miscellaneous/Armchair/Armchair.gcode
+   */
+  void GcodeSuite::M33() {
+    card.printLongPath(parser.string_arg);
+  }
+
+#endif // LONG_FILENAME_HOST_SUPPORT
+
+#if ENABLED(SDCARD_SORT_ALPHA) && ENABLED(SDSORT_GCODE)
+
+  /**
+   * M34: Set SD Card Sorting Options
+   */
+  void GcodeSuite::M34() {
+    if (parser.seen('S')) card.setSortOn(parser.value_bool());
+    if (parser.seenval('F')) {
+      const int v = parser.value_long();
+      card.setSortFolders(v < 0 ? -1 : v > 0 ? 1 : 0);
+    }
+    //if (parser.seen('R')) card.setSortReverse(parser.value_bool());
+  }
+
+#endif // SDCARD_SORT_ALPHA && SDSORT_GCODE
+
+/**
+ * M928: Start SD Write
+ */
+void GcodeSuite::M928() {
+  card.openLogFile(parser.string_arg);
+}
+
+#endif // SDSUPPORT
diff --git a/Marlin/src/gcode/sdcard/M20.cpp b/Marlin/src/gcode/sdcard/M20.cpp
deleted file mode 100644
index a5916f5292fba01179d5fc0731cd18339009606e..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M20.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-
-/**
- * M20: List SD card to serial output
- */
-void GcodeSuite::M20() {
-  SERIAL_PROTOCOLLNPGM(MSG_BEGIN_FILE_LIST);
-  card.ls();
-  SERIAL_PROTOCOLLNPGM(MSG_END_FILE_LIST);
-}
-
-#endif // SDSUPPORT
diff --git a/Marlin/src/gcode/sdcard/M21.cpp b/Marlin/src/gcode/sdcard/M21.cpp
deleted file mode 100644
index 90bf3372a070774a5fbf27f895bcf2f419ca8ff4..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M21.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-
-/**
- * M21: Init SD Card
- */
-void GcodeSuite::M21() { card.initsd(); }
-
-#endif // SDSUPPORT
diff --git a/Marlin/src/gcode/sdcard/M22.cpp b/Marlin/src/gcode/sdcard/M22.cpp
deleted file mode 100644
index afb665ae641a37dc41282522b5201ece15111b42..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M22.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-
-/**
- * M22: Release SD Card
- */
-void GcodeSuite::M22() { card.release(); }
-
-#endif // SDSUPPORT
diff --git a/Marlin/src/gcode/sdcard/M23.cpp b/Marlin/src/gcode/sdcard/M23.cpp
deleted file mode 100644
index 41211e988a0187a307d1e2dd4779d3036e838f23..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M23.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-
-/**
- * M23: Open a file
- */
-void GcodeSuite::M23() {
-  // Simplify3D includes the size, so zero out all spaces (#7227)
-  for (char *fn = parser.string_arg; *fn; ++fn) if (*fn == ' ') *fn = '\0';
-  card.openFile(parser.string_arg, true);
-}
-
-#endif // SDSUPPORT
diff --git a/Marlin/src/gcode/sdcard/M24.cpp b/Marlin/src/gcode/sdcard/M24.cpp
deleted file mode 100644
index b85b8864d79c1e12962ac41e460f934b266ff5c2..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M24.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-#include "../../module/printcounter.h"
-
-#if ENABLED(PARK_HEAD_ON_PAUSE)
-  #include "../../feature/pause.h"
-#endif
-
-/**
- * M24: Start or Resume SD Print
- */
-void GcodeSuite::M24() {
-  #if ENABLED(PARK_HEAD_ON_PAUSE)
-    resume_print();
-  #endif
-
-  card.startFileprint();
-  print_job_timer.start();
-}
-
-#endif // SDSUPPORT
diff --git a/Marlin/src/gcode/sdcard/M25.cpp b/Marlin/src/gcode/sdcard/M25.cpp
deleted file mode 100644
index 8de336421522be63d314ce6440973817841c6059..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M25.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-#include "../../module/printcounter.h"
-
-#if ENABLED(PARK_HEAD_ON_PAUSE)
-  #include "../queue.h"
-#endif
-
-/**
- * M25: Pause SD Print
- */
-void GcodeSuite::M25() {
-  card.pauseSDPrint();
-  print_job_timer.pause();
-
-  #if ENABLED(PARK_HEAD_ON_PAUSE)
-    enqueue_and_echo_commands_P(PSTR("M125")); // Must be enqueued with pauseSDPrint set to be last in the buffer
-  #endif
-}
-
-#endif // SDSUPPORT
diff --git a/Marlin/src/gcode/sdcard/M26.cpp b/Marlin/src/gcode/sdcard/M26.cpp
deleted file mode 100644
index 5efbeb393c81dc0a04334a41c143eab588b4ed30..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M26.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-
-/**
- * M26: Set SD Card file index
- */
-void GcodeSuite::M26() {
-  if (card.cardOK && parser.seenval('S'))
-    card.setIndex(parser.value_long());
-}
-
-#endif // SDSUPPORT
diff --git a/Marlin/src/gcode/sdcard/M27.cpp b/Marlin/src/gcode/sdcard/M27.cpp
deleted file mode 100644
index 439b97600088890db5aa26f57aaccc6d72f8bea8..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M27.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-
-/**
- * M27: Get SD Card status
- */
-void GcodeSuite::M27() { card.getStatus(); }
-
-#endif // SDSUPPORT
diff --git a/Marlin/src/gcode/sdcard/M28.cpp b/Marlin/src/gcode/sdcard/M28.cpp
deleted file mode 100644
index 82200e83abb51f142f9a8e973f8cdec84d043dcc..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M28.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-
-/**
- * M28: Start SD Write
- */
-void GcodeSuite::M28() { card.openFile(parser.string_arg, false); }
-
-#endif // SDSUPPORT
diff --git a/Marlin/src/gcode/sdcard/M29.cpp b/Marlin/src/gcode/sdcard/M29.cpp
deleted file mode 100644
index c5e2081cd33854649dbaa38f281b153245a01c62..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M29.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-
-/**
- * M29: Stop SD Write
- * Processed in write to file routine above
- */
-void GcodeSuite::M29() {
-  // card.saving = false;
-}
-
-#endif // SDSUPPORT
diff --git a/Marlin/src/gcode/sdcard/M30.cpp b/Marlin/src/gcode/sdcard/M30.cpp
deleted file mode 100644
index 94335fe0f5c7a9fa50876fe609249b7ebdc8f79f..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M30.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-
-/**
- * M30 <filename>: Delete SD Card file
- */
-void GcodeSuite::M30() {
-  if (card.cardOK) {
-    card.closefile();
-    card.removeFile(parser.string_arg);
-  }
-}
-
-#endif // SDSUPPORT
diff --git a/Marlin/src/gcode/sdcard/M32.cpp b/Marlin/src/gcode/sdcard/M32.cpp
deleted file mode 100644
index de864f9cb3e009151c79c00da935567929f1b73d..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M32.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-#include "../../module/stepper.h"
-#include "../../module/printcounter.h"
-
-/**
- * M32: Select file and start SD Print
- */
-void GcodeSuite::M32() {
-  if (IS_SD_PRINTING)
-    stepper.synchronize();
-
-  char* namestartpos = parser.string_arg;
-  const bool call_procedure = parser.boolval('P');
-
-  if (card.cardOK) {
-    card.openFile(namestartpos, true, call_procedure);
-
-    if (parser.seenval('S'))
-      card.setIndex(parser.value_long());
-
-    card.startFileprint();
-
-    // Procedure calls count as normal print time.
-    if (!call_procedure) print_job_timer.start();
-  }
-}
-
-#endif // SDSUPPORT
diff --git a/Marlin/src/gcode/sdcard/M33.cpp b/Marlin/src/gcode/sdcard/M33.cpp
deleted file mode 100644
index 69933df999e2a93475ecb6fe859d95eac5dd9c75..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M33.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT) && ENABLED(LONG_FILENAME_HOST_SUPPORT)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-
-/**
- * M33: Get the long full path of a file or folder
- *
- * Parameters:
- *   <dospath> Case-insensitive DOS-style path to a file or folder
- *
- * Example:
- *   M33 miscel~1/armchair/armcha~1.gco
- *
- * Output:
- *   /Miscellaneous/Armchair/Armchair.gcode
- */
-void GcodeSuite::M33() {
-  card.printLongPath(parser.string_arg);
-}
-
-#endif // SDSUPPORT && LONG_FILENAME_HOST_SUPPORT
diff --git a/Marlin/src/gcode/sdcard/M34.cpp b/Marlin/src/gcode/sdcard/M34.cpp
deleted file mode 100644
index 911539d408abdbdc96d0e0ce370735a37c67d9ee..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M34.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT) && ENABLED(SDCARD_SORT_ALPHA) && ENABLED(SDSORT_GCODE)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-
-/**
- * M34: Set SD Card Sorting Options
- */
-void GcodeSuite::M34() {
-  if (parser.seen('S')) card.setSortOn(parser.value_bool());
-  if (parser.seenval('F')) {
-    const int v = parser.value_long();
-    card.setSortFolders(v < 0 ? -1 : v > 0 ? 1 : 0);
-  }
-  //if (parser.seen('R')) card.setSortReverse(parser.value_bool());
-}
-
-#endif // SDSUPPORT && SDCARD_SORT_ALPHA && SDSORT_GCODE
diff --git a/Marlin/src/gcode/sdcard/M928.cpp b/Marlin/src/gcode/sdcard/M928.cpp
deleted file mode 100644
index 069448f0b9301a0d9650f11d1735b8570259ceb8..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/sdcard/M928.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(SDSUPPORT)
-
-#include "../gcode.h"
-#include "../../sd/cardreader.h"
-
-/**
- * M928: Start SD Write
- */
-void GcodeSuite::M928() {
-  card.openLogFile(parser.string_arg);
-}
-
-#endif // SDSUPPORT
diff --git a/Marlin/src/gcode/stats/M75-M77.cpp b/Marlin/src/gcode/stats/M75-M77.cpp
deleted file mode 100644
index 1f506d360eea84c506595d23d2318e46af61f647..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/stats/M75-M77.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../gcode.h"
-#include "../../module/printcounter.h"
-
-/**
- * M75: Start print timer
- */
-void GcodeSuite::M75() { print_job_timer.start(); }
-
-/**
- * M76: Pause print timer
- */
-void GcodeSuite::M76() { print_job_timer.pause(); }
-
-/**
- * M77: Stop print timer
- */
-void GcodeSuite::M77() { print_job_timer.stop(); }
diff --git a/Marlin/src/gcode/stats/M78.cpp b/Marlin/src/gcode/stats/M75-M78.cpp
similarity index 82%
rename from Marlin/src/gcode/stats/M78.cpp
rename to Marlin/src/gcode/stats/M75-M78.cpp
index 9ea79572c277c7c570868c7207d6ee063aa33438..351efd10c728469b1eaf0f4048c54845fe332928 100644
--- a/Marlin/src/gcode/stats/M78.cpp
+++ b/Marlin/src/gcode/stats/M75-M78.cpp
@@ -20,13 +20,26 @@
  *
  */
 
-#include "../../inc/MarlinConfig.h"
-
-#if ENABLED(PRINTCOUNTER)
-
 #include "../gcode.h"
 #include "../../module/printcounter.h"
 
+/**
+ * M75: Start print timer
+ */
+void GcodeSuite::M75() { print_job_timer.start(); }
+
+/**
+ * M76: Pause print timer
+ */
+void GcodeSuite::M76() { print_job_timer.pause(); }
+
+/**
+ * M77: Stop print timer
+ */
+void GcodeSuite::M77() { print_job_timer.stop(); }
+
+#if ENABLED(PRINTCOUNTER)
+
 /**
  * M78: Show print statistics
  */
diff --git a/Marlin/src/gcode/temperature/M104.cpp b/Marlin/src/gcode/temperature/M104.cpp
deleted file mode 100644
index 025a6f0324e9a4d7790f78a9316e57e35dbb7baa..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/temperature/M104.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../gcode.h"
-#include "../../module/temperature.h"
-#include "../../module/motion.h"
-#include "../../module/planner.h"
-#include "../../lcd/ultralcd.h"
-
-#if ENABLED(PRINTJOB_TIMER_AUTOSTART)
-  #include "../../module/printcounter.h"
-#endif
-
-/**
- * M104: Set hot end temperature
- */
-void GcodeSuite::M104() {
-  if (get_target_extruder_from_command()) return;
-  if (DEBUGGING(DRYRUN)) return;
-
-  const uint8_t e = target_extruder;
-
-  #if ENABLED(SINGLENOZZLE)
-    if (e != active_extruder) return;
-  #endif
-
-  if (parser.seenval('S')) {
-    const int16_t temp = parser.value_celsius();
-    thermalManager.setTargetHotend(temp, e);
-
-    #if ENABLED(DUAL_X_CARRIAGE)
-      if (dual_x_carriage_mode == DXC_DUPLICATION_MODE && e == 0)
-        thermalManager.setTargetHotend(temp ? temp + duplicate_extruder_temp_offset : 0, 1);
-    #endif
-
-    #if ENABLED(PRINTJOB_TIMER_AUTOSTART)
-      /**
-       * Stop the timer at the end of print. Start is managed by 'heat and wait' M109.
-       * We use half EXTRUDE_MINTEMP here to allow nozzles to be put into hot
-       * standby mode, for instance in a dual extruder setup, without affecting
-       * the running print timer.
-       */
-      if (parser.value_celsius() <= (EXTRUDE_MINTEMP) / 2) {
-        print_job_timer.stop();
-        LCD_MESSAGEPGM(WELCOME_MSG);
-      }
-    #endif
-
-    if (parser.value_celsius() > thermalManager.degHotend(e))
-      lcd_status_printf_P(0, PSTR("E%i %s"), e + 1, MSG_HEATING);
-  }
-
-  #if ENABLED(AUTOTEMP)
-    planner.autotemp_M104_M109();
-  #endif
-}
diff --git a/Marlin/src/gcode/temperature/M109.cpp b/Marlin/src/gcode/temperature/M104_M109.cpp
similarity index 83%
rename from Marlin/src/gcode/temperature/M109.cpp
rename to Marlin/src/gcode/temperature/M104_M109.cpp
index 58fe364e56b6f3407f0b00f1bf8170b33d4a1dcb..44bf51a997070ab056a99d15fb4ca56e00c61d12 100644
--- a/Marlin/src/gcode/temperature/M109.cpp
+++ b/Marlin/src/gcode/temperature/M104_M109.cpp
@@ -22,6 +22,7 @@
 
 #include "../gcode.h"
 #include "../../module/temperature.h"
+#include "../../module/motion.h"
 #include "../../module/planner.h"
 #include "../../lcd/ultralcd.h"
 #include "../../Marlin.h"
@@ -30,14 +31,54 @@
   #include "../../module/printcounter.h"
 #endif
 
-#if ENABLED(DUAL_X_CARRIAGE)
-  #include "../../module/motion.h"
-#endif
-
 #if HAS_COLOR_LEDS
   #include "../../feature/leds/leds.h"
 #endif
 
+/**
+ * M104: Set hot end temperature
+ */
+void GcodeSuite::M104() {
+  if (get_target_extruder_from_command()) return;
+  if (DEBUGGING(DRYRUN)) return;
+
+  const uint8_t e = target_extruder;
+
+  #if ENABLED(SINGLENOZZLE)
+    if (e != active_extruder) return;
+  #endif
+
+  if (parser.seenval('S')) {
+    const int16_t temp = parser.value_celsius();
+    thermalManager.setTargetHotend(temp, e);
+
+    #if ENABLED(DUAL_X_CARRIAGE)
+      if (dual_x_carriage_mode == DXC_DUPLICATION_MODE && e == 0)
+        thermalManager.setTargetHotend(temp ? temp + duplicate_extruder_temp_offset : 0, 1);
+    #endif
+
+    #if ENABLED(PRINTJOB_TIMER_AUTOSTART)
+      /**
+       * Stop the timer at the end of print. Start is managed by 'heat and wait' M109.
+       * We use half EXTRUDE_MINTEMP here to allow nozzles to be put into hot
+       * standby mode, for instance in a dual extruder setup, without affecting
+       * the running print timer.
+       */
+      if (parser.value_celsius() <= (EXTRUDE_MINTEMP) / 2) {
+        print_job_timer.stop();
+        LCD_MESSAGEPGM(WELCOME_MSG);
+      }
+    #endif
+
+    if (parser.value_celsius() > thermalManager.degHotend(e))
+      lcd_status_printf_P(0, PSTR("E%i %s"), e + 1, MSG_HEATING);
+  }
+
+  #if ENABLED(AUTOTEMP)
+    planner.autotemp_M104_M109();
+  #endif
+}
+
 /**
  * M109: Sxxx Wait for extruder(s) to reach temperature. Waits only when heating.
  *       Rxxx Wait for extruder(s) to reach temperature. Waits when heating and cooling.
diff --git a/Marlin/src/gcode/temperature/M140.cpp b/Marlin/src/gcode/temperature/M140.cpp
deleted file mode 100644
index f30d04c163e2c85aa583b43930b1f7747361cb29..0000000000000000000000000000000000000000
--- a/Marlin/src/gcode/temperature/M140.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Marlin 3D Printer Firmware
- * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
- *
- * Based on Sprinter and grbl.
- * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "../../inc/MarlinConfig.h"
-
-#if HAS_HEATER_BED && HAS_TEMP_BED
-
-#include "../gcode.h"
-#include "../../module/temperature.h"
-
-/**
- * M140: Set bed temperature
- */
-void GcodeSuite::M140() {
-  if (DEBUGGING(DRYRUN)) return;
-  if (parser.seenval('S')) thermalManager.setTargetBed(parser.value_celsius());
-}
-
-#endif // HAS_HEATER_BED && HAS_TEMP_BED
diff --git a/Marlin/src/gcode/temperature/M190.cpp b/Marlin/src/gcode/temperature/M140_M190.cpp
similarity index 96%
rename from Marlin/src/gcode/temperature/M190.cpp
rename to Marlin/src/gcode/temperature/M140_M190.cpp
index ef18a50ebe0404595be229d05a0bd9d4baf87550..b48dd44a33aa2b2e1780231ebb172f1aa96f9cef 100644
--- a/Marlin/src/gcode/temperature/M190.cpp
+++ b/Marlin/src/gcode/temperature/M140_M190.cpp
@@ -25,8 +25,8 @@
 #if HAS_HEATER_BED && HAS_TEMP_BED
 
 #include "../gcode.h"
-#include "../../module/motion.h"
 #include "../../module/temperature.h"
+#include "../../module/motion.h"
 #include "../../lcd/ultralcd.h"
 
 #if ENABLED(PRINTJOB_TIMER_AUTOSTART)
@@ -39,6 +39,14 @@
 
 #include "../../Marlin.h" // for wait_for_heatup and idle()
 
+/**
+ * M140: Set bed temperature
+ */
+void GcodeSuite::M140() {
+  if (DEBUGGING(DRYRUN)) return;
+  if (parser.seenval('S')) thermalManager.setTargetBed(parser.value_celsius());
+}
+
 #ifndef MIN_COOLING_SLOPE_DEG_BED
   #define MIN_COOLING_SLOPE_DEG_BED 1.50
 #endif