     // make sure we aren't still pulling down
     PORTD &= 0b11111011;
 
+    delayMicroseconds(6 ); // wait for pin to go high before we re-enable interrupts
     // re-enable interrupts
     interrupts();
 
 }
 
 void send_letter(int letter) {
-    /* from typewriter output */
-    sendByteOnPin(0b100100001);
-    //delayMicroseconds(200);
-    delay(CHAR_DELAY); // wait for response
-    // wait for response of 0b000000000
-    
-    
-    sendByteOnPin(0b000001011);
-    delayMicroseconds(1450);
-    // wait for response of 0b000000000
-    
-    sendByteOnPin(0b100100001);
-    delay(CHAR_DELAY); // wait for response
-
-    // wait for response of 0b000000000
-    
-    sendByteOnPin(0b000000011);
-    delayMicroseconds(200);
-    // wait for response of 0b000000000
-    
-    
-    //sendByteOnPin(0b000000001); // 'a'
-    //sendByteOnPin(0b001011001); // 'b'
-    //sendByteOnPin(0b000000100); // 'm'
-      sendByteOnPin(letter);
-      delayMicroseconds(200);
-    
-    // wait for response of 0b000000000
-    
-    sendByteOnPin(0b000001010);
-    delayMicroseconds(200);
-    // wait for response of 0b000000000
-
-    delay(LETTER_DELAY); // before next character
+    while (!nextCharOkay) {
+      // busy
+    }
+    q.enqueue(0b100100001);
+    q.enqueue(0b000001011);
+    q.enqueue(0b100100001);
+    q.enqueue(0b000000011);
+    q.enqueue(letter);
+    q.enqueue(0b000001010);
+    pinChangeCount = 1; // pretend we've seen a change on the bus
+    nextCharOkay = false;
+    pinChanged();
+
+    //delay(LETTER_DELAY); // before next character
 }
 
 void send_return(int numChars) {

  IBM Wheelwriter hack
  Pin 0: connected through MOSFET to Wheelwriter bus
         Will pull down the bus when set to zero
 */

static int d0 = 0;
static int d1 = 1;

  // is actually bit 3 in the DDRD and PORTD registers
  // start the pin high
  //PORTD |= 0b00000100;

  pinMode(d2, INPUT); // listening pin
  PCintPort::attachInterrupt(d2, pinChanged, CHANGE);

  // start the pin low
  PORTD &= 0b11111011;
