Index: emu/cpu.c
===================================================================
--- emu/cpu.c	(revision bb4fd0c90d58bb5c8ecd61934d580a4bbdb5e842)
+++ emu/cpu.c	(revision a23f3d986711b10a5ebfa03240ec5026f50a07f9)
@@ -620,5 +620,5 @@
 
 	bool run = true;
-	bool down = false;
+	SDL_Scancode down = SDL_SCANCODE_UNKNOWN;
 
 	while (run) {
@@ -634,12 +634,12 @@
 
 			if (ev.type == SDL_KEYDOWN) {
-				if (down) {
+				if (down == ev.key.keysym.scancode) {
 					continue;
 				}
 
-				down = true;
+				down = ev.key.keysym.scancode;
 			}
 			else if (ev.type == SDL_KEYUP) {
-				down = false;
+				down = SDL_SCANCODE_UNKNOWN;
 			}
 
Index: emu/ser.c
===================================================================
--- emu/ser.c	(revision bb4fd0c90d58bb5c8ecd61934d580a4bbdb5e842)
+++ emu/ser.c	(revision a23f3d986711b10a5ebfa03240ec5026f50a07f9)
@@ -180,4 +180,12 @@
 		echo('\n');
 		break;
+
+	default:
+		if ((ev->keysym.mod & KMOD_CTRL) != 0 &&
+				ev->keysym.sym >= SDLK_a && ev->keysym.sym <= SDLK_z) {
+			echo((uint8_t)(ev->keysym.sym - SDLK_a + 1));
+		}
+
+		break;
 	}
 }
