       } else {
         StringSplitter splitter(commandString, ' ', 2);
 
-        int count = 1;
+        int count = 0;
         if (splitter.getItemCount() > 1) {
           String parameter = splitter.getItemAtIndex(1);
           parameter.toLowerCase();
           count = hexToInt(parameter);
         }
 
-        while (count > 0) {
-          int w = programmer->readWord();
+        do {
+          int w = programmer->readWord(true);
           Serial.print("Word ");
           Serial.print(String(programmer->getLocation(), HEX));
           Serial.print(": ");

    }
    
    virtual void printHelpString() const {
      Serial.println("  text_write hex_value  writes a word to the current memory location");
    }
};


      }
    }

    int readWord(bool includeStartStopBits=false) {
      if (_inProgrammingMode) {
        writeCommand(0x04);

        pinMode(PROGRAMMING_DATA_PIN, INPUT);
        micDelay(PROGRAMMING_MODE_COMMAND_DELAY);

        int result = 0;
        for (int i = 0; i < 16; i++) {
          digitalWrite(PROGRAMMING_CLOCK_PIN, HIGH);
          micDelay(PROGRAMMING_MODE_COMMAND_DELAY);
          result = (result >> 1) & 0x7FFF | (((bool) digitalRead(PROGRAMMING_DATA_PIN)) ? 0x8000 : 0);
          digitalWrite(PROGRAMMING_CLOCK_PIN, LOW);
          micDelay(PROGRAMMING_MODE_COMMAND_DELAY);
        }

        pinMode(PROGRAMMING_DATA_PIN, OUTPUT);

        if (includeStartStopBits) {
          return result;
        } else {
          return (result >> 1) & 0x3FFF;
        }
      }
      return -1;
    }

    bool writeWord(int w) {
      w = (w & 0xFFF) << 1;
      
      if (_inProgrammingMode) {
        writeCommand(0x02);
        micDelay(PROGRAMMING_MODE_COMMAND_DELAY);

        pushOutBits(w, 16);
        
        digitalWrite(PROGRAMMING_DATA_PIN, LOW);
        return true;
