Index: emu/cpu.c
===================================================================
--- emu/cpu.c	(revision 555b171620bba259e454bb76dbda9a9cd4a7e6f3)
+++ emu/cpu.c	(revision e41c6b6b19ea6466eb638ae426c407922bec7dc2)
@@ -450,7 +450,20 @@
 	m68k_pulse_reset();
 
-	while (true) {
+	bool run = true;
+
+	while (run) {
 		m68k_execute(CYCLES);
 		hw_exec();
-	}
-}
+
+		SDL_Event ev;
+
+		while (SDL_PollEvent(&ev) > 0) {
+			if (ev.type == SDL_QUIT) {
+				run = false;
+				break;
+			}
+		}
+	}
+
+	inf("leaving CPU loop");
+}
Index: emu/sdl.c
===================================================================
--- emu/sdl.c	(revision 555b171620bba259e454bb76dbda9a9cd4a7e6f3)
+++ emu/sdl.c	(revision e41c6b6b19ea6466eb638ae426c407922bec7dc2)
@@ -28,5 +28,5 @@
 void sdl_init(void)
 {
-	if (SDL_Init(SDL_INIT_VIDEO) < 0) {
+	if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) < 0) {
 		fprintf(stderr, "SDL_Init() failed: %s\n", SDL_GetError());
 		exit(1);
