 
 void TerminalMode()
 {
+    int data;
+    char buffer[100];
+    int buffer_index = 0;
+    int buffer_bytes = 0;
+    int max_buffer_size_reached = 0;
+    
     while (wifly.available() != -1) // -1 means closed
     {
-        while (wifly.available() > 0)
-        {
-            DoFlowControl();
-            C64Serial.write(wifly.read());
+        if (baudMismatch) {   // Assumes host is slower than WiFly
+            while (wifly.available() > 0)
+            {
+                digitalWriteFast(WIFI_CTS, HIGH);     // ..stop data from Wi-Fi
+    
+                data = wifly.read();
+                buffer[buffer_index++] = data;
+                if (buffer_index > 99)
+                  buffer_index = 99;
+            }
+    
+            // Dump the buffer to the C64 before clearing WIFI_CTS
+            for(int i=0; i<buffer_index; i++) {
+                // Always do flow control if baudMismatch
+                // Check that C64 is ready to receive
+                while (digitalReadFast(C64_RTS) == LOW);   // If not...  C64 RTS and CTS are inverted.
+                C64Serial.write(buffer[i]);
+            }
+
+            // Only used for displaying max buffer size on Microview for testing
+            if (max_buffer_size_reached < buffer_index)
+                max_buffer_size_reached = buffer_index;
+            char message[20];
+            sprintf(message, "Buf: %d", max_buffer_size_reached);
+            Display(message);
+            
+            // Show largest buffer size on Microview
+            // 4800/9600 = 3
+            // 4800/19200 = 5
+            // 1200/19200 = doesn't work
+            // 4800/38400 = 12
+            // 2400/38400 = 40 - bbs.jammingsignal.com:23 (1200 baud) worked.
+            // 2400/38400 = 40 - cib.dyndns.com:6400 (19200 baud) worked.
+            // 2400/38400 = 40 - Linux telnet did not work with Novaterm.  Default flow tolerance = 200.  Set to 100 and sometimes connected.
+            // 9600/38400 = 11           
+
+            buffer_index = 0;
+              
+            digitalWriteFast(WIFI_CTS, LOW);
+        }
+        else {
+            while (wifly.available() > 0)
+            {
+                DoFlowControl();
+                C64Serial.write(wifly.read());
+            }
         }
 
         while (C64Serial.available() > 0)


inline void DoFlowControl()
{
    if (BAUD_RATE > 2400)
    {
        // Check that C64 is ready to receive
        while (digitalReadFast(C64_RTS) == LOW)   // If not...
        {
            digitalWriteFast(WIFI_CTS, HIGH);     // ..stop data from Wi-Fi and wait
        }


// Misc Values
#define TIMEDOUT  -1
int baudMismatch = (BAUD_RATE != WiFly_BAUD_RATE ? 1 : 0);

// EEPROM Addresses
#define ADDR_PETSCII       0
