  *******************/
 
 Channel* process_get_channel(byte ch) {
-  if (ch >= 'A' && ch <= 'Z' && ch != 'Y') {
-    return channels + ((ch == 'Z') ? 25 : (ch - 'A'));
-  } 
+  if (ch >= 'A' && (ch < ('A'+DIG) || ch == 'Z')) return channels + ((ch == 'Z') ? DIG : (ch - 'A'));
   else {
-    char tiny[2];
-    tiny[0] = ch;
-    tiny[1] = 0;
-    error_with_message("Unknown channel ", tiny, 1);
+    error_with_message("Unknown channel ", (char)ch);
     return &not_a_channel; 
   }
 }
 
 Protocol* process_get_protocol(byte ch) {
   Channel *c = process_get_channel(ch);
-  if (c->who != 255) {
-    return protocols + c->who;
-  }
+  if (c->who != 255) return protocols + c->who;
   else {
-    char tiny[2];
-    tiny[0] = ch;
-    tiny[1] = 0;
-    error_with_message("No protocol for channel ", tiny, 1);
+    error_with_message("No protocol for channel ", (char)ch);
     return &not_a_protocol;
   }
 }

 * Runtime *
 ***********/

volatile int tick;       // Last CPU clock count
Dura global_clock;       // Time since start of running.
Dura next_event;         // Time of next event.  Just busywait until then.

#define MIN_BUSY_US 1000
#define MAX_BUSY_US 20000
Dura io_anyway;          // Time at which you need to read I/O even if it may interfere with events

#define LOCKED  -3
#define ERRDONE -2
#define ERRSTOP -1
#define RUNSTOP  0
#define RUNSET   1
#define GOGOGO   2
volatile int runlevel;   // -2 error; -1 stopping to error; 0 ran; 1 accepting commands; 2 running
volatile int alive;      // Number of channels alive and running


    return true;
  }

  // Reshuffles all protocols so only this one is ready to run.
  // We are placed first within the supplied buffer.  Length
  // is placed in &pi.
  void solo(Protocol *ps, int &pi) {
    int i = 0;
    ps[i] = *this;
    while (i+1 < PROT && ps[i].next < PROT) {
      ps[i+1] = ps[ps[i].next];  // We are copying all the data, not just pointers!
      ps[i].next = (byte)(i+1);  // Point existing one at new (probably lower) index.
      i++;
    }
    // Last one will point at 255 (terminator), and that doesn't change!
    pi = i;
  }

  // Set all protcols to empty
  static void init(Protocol *ps, int &pi) {
    for (int i = 0; i < DIG+ANA; i++) ps[i].init();
    for (int i = DIG; i < DIG+ANA; i++) ps[i].j = 'l';
