|  |  |  | @@ -843,22 +843,32 @@ void reset_stepper_drivers();    // Called by settings.load / settings.reset | 
		
	
		
			
				|  |  |  |  | // | 
		
	
		
			
				|  |  |  |  | // Axis steppers enable / disable macros | 
		
	
		
			
				|  |  |  |  | // | 
		
	
		
			
				|  |  |  |  | #if ENABLED(SOFTWARE_DRIVER_ENABLE) | 
		
	
		
			
				|  |  |  |  |   // Avoid expensive calls to enable / disable steppers | 
		
	
		
			
				|  |  |  |  |   extern xyz_bool_t axis_sw_enabled; | 
		
	
		
			
				|  |  |  |  |   #define SHOULD_ENABLE(N)  !axis_sw_enabled.N | 
		
	
		
			
				|  |  |  |  |   #define SHOULD_DISABLE(N)  axis_sw_enabled.N | 
		
	
		
			
				|  |  |  |  |   #define AFTER_CHANGE(N,TF) axis_sw_enabled.N = TF | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  |   #define SHOULD_ENABLE(N)   true | 
		
	
		
			
				|  |  |  |  |   #define SHOULD_DISABLE(N)  true | 
		
	
		
			
				|  |  |  |  |   #define AFTER_CHANGE(N,TF) NOOP | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | #define  ENABLE_AXIS_X() if (SHOULD_ENABLE(x))  {  ENABLE_STEPPER_X();  ENABLE_STEPPER_X2(); AFTER_CHANGE(x, true); } | 
		
	
		
			
				|  |  |  |  | #define DISABLE_AXIS_X() if (SHOULD_DISABLE(x)) { DISABLE_STEPPER_X(); DISABLE_STEPPER_X2(); AFTER_CHANGE(x, false); FORGET_AXIS(X_AXIS); } | 
		
	
		
			
				|  |  |  |  | #define  ENABLE_AXIS_Y() if (SHOULD_ENABLE(y))  {  ENABLE_STEPPER_Y();  ENABLE_STEPPER_Y2(); AFTER_CHANGE(y, true); } | 
		
	
		
			
				|  |  |  |  | #define DISABLE_AXIS_Y() if (SHOULD_DISABLE(y)) { DISABLE_STEPPER_Y(); DISABLE_STEPPER_Y2(); AFTER_CHANGE(y, false); FORGET_AXIS(Y_AXIS); } | 
		
	
		
			
				|  |  |  |  | #define  ENABLE_AXIS_Z() if (SHOULD_ENABLE(z))  {  ENABLE_STEPPER_Z();  ENABLE_STEPPER_Z2();  ENABLE_STEPPER_Z3(); AFTER_CHANGE(z, true); } | 
		
	
		
			
				|  |  |  |  | #define DISABLE_AXIS_Z() if (SHOULD_DISABLE(z)) { DISABLE_STEPPER_Z(); DISABLE_STEPPER_Z2(); DISABLE_STEPPER_Z3(); AFTER_CHANGE(z, false); FORGET_AXIS(Z_AXIS); Z_RESET(); } | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | #define FORGET_AXIS(A) TERN(HOME_AFTER_DEACTIVATE, set_axis_never_homed(A), CBI(axis_known_position, A)) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | #define  ENABLE_AXIS_X() do{ ENABLE_STEPPER_X(); ENABLE_STEPPER_X2(); }while(0) | 
		
	
		
			
				|  |  |  |  | #define DISABLE_AXIS_X() do{ DISABLE_STEPPER_X(); DISABLE_STEPPER_X2(); FORGET_AXIS(X_AXIS); }while(0) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | #define  ENABLE_AXIS_Y() do{ ENABLE_STEPPER_Y(); ENABLE_STEPPER_Y2(); }while(0) | 
		
	
		
			
				|  |  |  |  | #define DISABLE_AXIS_Y() do{ DISABLE_STEPPER_Y(); DISABLE_STEPPER_Y2(); FORGET_AXIS(Y_AXIS); }while(0) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | #define  ENABLE_AXIS_Z() do{ ENABLE_STEPPER_Z();  ENABLE_STEPPER_Z2();  ENABLE_STEPPER_Z3();  ENABLE_STEPPER_Z4(); }while(0) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | #ifdef Z_AFTER_DEACTIVATE | 
		
	
		
			
				|  |  |  |  |   #define Z_RESET() do{ current_position.z = Z_AFTER_DEACTIVATE; sync_plan_position(); }while(0) | 
		
	
		
			
				|  |  |  |  | #else | 
		
	
		
			
				|  |  |  |  |   #define Z_RESET() | 
		
	
		
			
				|  |  |  |  | #endif | 
		
	
		
			
				|  |  |  |  | #define DISABLE_AXIS_Z() do{ DISABLE_STEPPER_Z(); DISABLE_STEPPER_Z2(); DISABLE_STEPPER_Z3(); DISABLE_STEPPER_Z4(); FORGET_AXIS(Z_AXIS); Z_RESET(); }while(0) | 
		
	
		
			
				|  |  |  |  |  | 
		
	
		
			
				|  |  |  |  | // | 
		
	
		
			
				|  |  |  |  | // Extruder steppers enable / disable macros | 
		
	
	
		
			
				
					
					|  |  |  |   |