         Serial.println(halt_request ? "on" : "off");
     } else if(cmd_buf[0] == 'c') {
         cycle_request = true;
+    } else if(cmd_buf[0] == 's') {
+        cycle_request = true;
+        skip_to_next_sync = true;
     } else {
         Serial.println("unknown cmd");
         printHelp();


// Should we cycle the processor?
bool cycle_request;

DebouncedSwitch mode_switch(BTN_MODE);
DebouncedSwitch select_switch(BTN_SELECT);

        // Processor running, show running dots
        int point = (millis() >> 7) % 6;
        for(int digit=0; digit<6; ++digit) {
            setMX7219Reg(MX7219_DIGIT_0 + digit,
                    (point == (5-digit)) ? 0x80 : 0x00);
        }
    } else {
        // step only makes sense if processor halted
        if(cycle_request || (skip_to_next_sync && !(status_bits & SB_SYNC))) {
            // Pulse step pin
            digitalWrite(STEP, HIGH);
            digitalWrite(STEP, LOW);

            // If we are skipping rather than cycling, reset skip
            if(!cycle_request) {
                skip_to_next_sync = false;
            } else {
                // Reset cycle request
                cycle_request = false;
            }
        }

        // Update address bus
