/* In order to keep up with incoming data, check timeout only
         * when catch up.
         */
-       while (!abort && get_ticks() <= etime) {
+       do {
+               if (tstc()) {
+                       if (presskey_len < presskey_max) {
+                               presskey [presskey_len ++] = getc();
+                       }
+                       else {
+                               for (i = 0; i < presskey_max - 1; i ++)
+                                       presskey [i] = presskey [i + 1];
+
+                               presskey [i] = getc();
+                       }
+               }
+
                for (i = 0; i < sizeof(delaykey) / sizeof(delaykey[0]); i ++) {
                        if (delaykey[i].len > 0 &&
                            presskey_len >= delaykey[i].len &&
                                abort = 1;
                        }
                }
+       } while (!abort && get_ticks() <= etime);
 
-               if (tstc()) {
-                       if (presskey_len < presskey_max) {
-                               presskey [presskey_len ++] = getc();
-                       }
-                       else {
-                               for (i = 0; i < presskey_max - 1; i ++)
-                                       presskey [i] = presskey [i + 1];
-
-                               presskey [i] = getc();
-                       }
-               }
-       }
 #  if DEBUG_BOOTKEYS
        if (!abort)
                puts("key timeout\n");