     // Display test
     showing_dt = 1;
 
+    halted = false;
+
     next_demo_loop_at = millis() + DEMO_LOOP_PERIOD;
     demo_loop_count = 0;
-    demo_mode = 0;
 }
 
 void loop() {

    { 0x16, 0x17, 0x0E, 0x14, 0x1A, 0x1A }, // "StEP  "
    { 0x0C, 0x19, 0x0C, 0x11, 0x0E, 0x1A }, // "CYCLE "
    { 0x01, 0x12, 0x16, 0x17, 0x1A, 0x1A }, // "1nSt  "
};
const int displayWordCount = sizeof(displayWords) / sizeof(displayWords[0]);

void showWord(int wordIdx) {
    byte* wordData = displayWords[wordIdx];
    for(int digit=0; digit<6; ++digit) {
        setMX7219Reg(MX7219_DIGIT_0 + (5-digit), MX7219_FONT[wordData[digit]]);
    }


// Showing display test
byte showing_dt;
const int DPY_TST_DURATION = 1000; // milliseconds

// Is processor stopped?
bool halted;

enum Words {
    WORD_RUN, WORD_START, WORD_HALT, WORD_STOP, WORD_STEP,
    WORD_CYCLE, WORD_INST, WORD_BURN, WORD_READ,
};

// Display strings
byte DISPLAY_WORDS[][6] = {
    { 0x15, 0x18, 0x12, 0x1A, 0x1A, 0x1A }, // "run   "
    { 0x16, 0x17, 0x0A, 0x15, 0x17, 0x1A }, // "StArt "
    { 0x10, 0x0A, 0x11, 0x17, 0x1A, 0x1A }, // "HALt  "
