Index: emu/kbd.c
===================================================================
--- emu/kbd.c	(revision 81d7cdc758162cf9952b4173e09787633ebb1dcf)
+++ emu/kbd.c	(revision 18cbd53eb168bc54bb4c94990d5e860335ea8706)
@@ -104,16 +104,16 @@
 }
 
+static void slid(int32_t sig, bool on, int32_t val)
+{
+	out((uint8_t)(0x80 | sig));
+	out(on ? 0x01 : 0x00);
+	out((uint8_t)val);
+}
+
 #if defined NOT_YET
-static void pot_128(int32_t sig, int32_t val)
+static void pot(int32_t sig, int32_t val)
 {
 	out((uint8_t)(0x80 | sig));
 	out((uint8_t)val);
-}
-
-static void pot_256(int32_t sig, int32_t val)
-{
-	out((uint8_t)(0x80 | sig));
-	out((uint8_t)((val >> 7) & 0x01));
-	out((uint8_t)(val & 0x7f));
 }
 #endif
@@ -186,4 +186,30 @@
 			but_off(39 + i);
 		}
+
+		return;
+	}
+
+	if (ev->keysym.sym >= SDLK_a && ev->keysym.sym <= SDLK_n) {
+		static int32_t lev[14] = {
+			64, 0, 0, 0, 0, 64, 64, 64, 64, 0, 0, 0, 64, 0
+		};
+
+		int32_t i = ev->keysym.sym - SDLK_a;
+		int32_t val = lev[i];
+
+		if (!dn) {
+			if ((ev->keysym.mod & KMOD_SHIFT) != 0) {
+				val = val > 10 ? val - 10 : 0;
+			}
+			else {
+				val = val < 117 ? val + 10 : 127;
+			}
+		}
+
+		ver2("kbd sli %d %s %d", i, dn ? "dn" : "up", val);
+		slid(25 + i, dn, val);
+
+		lev[i] = val;
+		return;
 	}
 }
