Index: emu/kbd.c
===================================================================
--- emu/kbd.c	(revision 4ed9bfed715c4db1a0f6cf2779711f3c0ab33613)
+++ emu/kbd.c	(revision d021bbbcf6b7bcd36aead194c11a6c7c0148cf2d)
@@ -91,5 +91,4 @@
 }
 
-#if defined NOT_YET
 static void key_touch(int32_t sig, int32_t val)
 {
@@ -105,4 +104,5 @@
 }
 
+#if defined NOT_YET
 static void pot_128(int32_t sig, int32_t val)
 {
@@ -121,5 +121,20 @@
 void kbd_key(SDL_KeyboardEvent *ev)
 {
-	(void)ev;
+	static bool on[24];
+
+	if ((ev->keysym.mod & KMOD_SHIFT) != 0 &&
+			ev->keysym.sym >= SDLK_a && ev->keysym.sym <= SDLK_x) {
+		int32_t i = ev->keysym.sym - SDLK_a;
+		on[i] = !on[i];
+
+		if (on[i]) {
+			key_touch(1 + i, 0x7f);
+		}
+		else {
+			key_off(1 + i);
+		}
+
+		ver2("kbd key %d %s", i, on[i] ? "on" : "off");
+	}
 }
 
@@ -128,4 +143,5 @@
 	for (int32_t i = 0; ev->text[i] != 0; ++i) {
 		if (ev->text[i] >= '0' && ev->text[i] <= '9') {
+			ver2("kbd dat %c", ev->text[i]);
 			int32_t sig = 60 + ev->text[i] - '0';
 			but_on(sig);
@@ -136,4 +152,5 @@
 		switch (ev->text[i]) {
 		case 'x':
+			ver2("kbd x");
 			but_on(70);
 			but_off(70);
@@ -141,4 +158,5 @@
 
 		case 'e':
+			ver2("kbd e");
 			but_on(71);
 			but_off(71);
@@ -146,4 +164,5 @@
 
 		case 'm':
+			ver2("kbd m");
 			but_on(72);
 			but_off(72);
