Index: emu/all.h
===================================================================
--- emu/all.h	(revision 1b302171955f44af8064df04dfbb88bf685833fb)
+++ emu/all.h	(revision 81d7cdc758162cf9952b4173e09787633ebb1dcf)
@@ -69,4 +69,5 @@
 extern uint32_t vid_win;
 extern uint32_t ser_win;
+extern uint32_t lcd_win;
 
 extern void sdl_init(void);
@@ -164,3 +165,3 @@
 extern void kbd_write(uint32_t off, int32_t sz, uint32_t val);
 
-extern void kbd_key(SDL_KeyboardEvent *ev, bool dn);
+extern void kbd_key(SDL_KeyboardEvent *ev, bool vid, bool dn);
Index: emu/kbd.c
===================================================================
--- emu/kbd.c	(revision 1b302171955f44af8064df04dfbb88bf685833fb)
+++ emu/kbd.c	(revision 81d7cdc758162cf9952b4173e09787633ebb1dcf)
@@ -119,5 +119,5 @@
 #endif
 
-void kbd_key(SDL_KeyboardEvent *ev, bool dn)
+static void vid_key(SDL_KeyboardEvent *ev, bool dn)
 {
 	if ((ev->keysym.mod & KMOD_SHIFT) != 0 &&
@@ -173,4 +173,30 @@
 }
 
+static void lcd_key(SDL_KeyboardEvent *ev, bool dn)
+{
+	if ((ev->keysym.mod & KMOD_CTRL) != 0 &&
+			ev->keysym.sym >= SDLK_a && ev->keysym.sym <= SDLK_n) {
+		int32_t i = ev->keysym.sym - SDLK_a;
+		ver2("kbd lcd %d %s", i, dn ? "dn" : "up");
+
+		if (dn) {
+			but_on(39 + i);
+		}
+		else {
+			but_off(39 + i);
+		}
+	}
+}
+
+void kbd_key(SDL_KeyboardEvent *ev, bool vid, bool dn)
+{
+	if (vid) {
+		vid_key(ev, dn);
+	}
+	else {
+		lcd_key(ev, dn);
+	}
+}
+
 void kbd_init(void)
 {
Index: emu/lcd.c
===================================================================
--- emu/lcd.c	(revision 1b302171955f44af8064df04dfbb88bf685833fb)
+++ emu/lcd.c	(revision 81d7cdc758162cf9952b4173e09787633ebb1dcf)
@@ -64,4 +64,6 @@
 
 static SDL_Window *win;
+uint32_t lcd_win;
+
 static SDL_Renderer *ren;
 static SDL_atomic_t frame;
@@ -116,4 +118,5 @@
 	for (int32_t y = 0; y < TXT_H; ++y) {
 		char line[TXT_W + 1];
+		line[TXT_W] = 0;
 
 		if (SDL_LockMutex(cpu_mutex) < 0) {
@@ -132,6 +135,4 @@
 			}
 		}
-
-		line[TXT_W] = 0;
 
 		SDL_Surface *lin = TTF_RenderText_Blended(fon, line, TXT_FGR);
@@ -207,4 +208,10 @@
 	}
 
+	lcd_win = SDL_GetWindowID(win);
+
+	if (lcd_win == 0) {
+		fail("SDL_GetWindowID() failed: %s", SDL_GetError());
+	}
+
 	ren = SDL_CreateRenderer(win, -1, 0);
 
Index: emu/sdl.c
===================================================================
--- emu/sdl.c	(revision 1b302171955f44af8064df04dfbb88bf685833fb)
+++ emu/sdl.c	(revision 81d7cdc758162cf9952b4173e09787633ebb1dcf)
@@ -161,5 +161,8 @@
 				}
 				else if (win == vid_win) {
-					kbd_key(&ev.key, true);
+					kbd_key(&ev.key, true, true);
+				}
+				else if (win == lcd_win) {
+					kbd_key(&ev.key, false, true);
 				}
 
@@ -171,5 +174,8 @@
 
 				if (win == vid_win) {
-					kbd_key(&ev.key, false);
+					kbd_key(&ev.key, true, false);
+				}
+				else if (win == lcd_win) {
+					kbd_key(&ev.key, false, false);
 				}
 
