Add good error handling
diff --git a/main.c b/main.c
index e91e699..3b1da46 100644
--- a/main.c
+++ b/main.c
@@ -1,3 +1,4 @@
+#include "common.h"
 #include "cpu.h"
 #include "dbg.h"
 #include "gui.h"
@@ -11,6 +12,18 @@
 
 extern sdl_screen_t *g_scr;
 
+#ifndef NO_PTHREAD
+#include <pthread.h>
+
+
+void cleanup_screen_thread(pthread_t thread)
+{
+	g_screen_thread_halt = true;
+	puts("Cleaning up screen...");
+	pthread_join(thread, NULL);
+}
+#endif
+
 int main(int argc, char **argv)
 {
 	bool disflag = false,
@@ -19,7 +32,8 @@
 		debugflag = false,
 		should_read = false,
 		guiflag = false,
-		scrflag = false;
+		scrflag = false,
+		nohaltflag = false;
 
 	int disasm_len = 0;
 
@@ -27,10 +41,13 @@
 
 	char c;
 
-	while ((c = getopt(argc, argv, "Dsdrhgi:n:")) != -1)
+	while ((c = getopt(argc, argv, "HDsdrhgi:n:")) != -1)
 	{
 		switch (c)
 		{
+		case 'H':
+			nohaltflag = true;
+			break;
 		case 'd':
 			disflag = true;
 			should_read = true;
@@ -68,6 +85,8 @@
 		printf("6502 emulator, disassembler and debugger\n"
 			"Usage:\n"
 			"	-g use GUI\n"
+			"	-s use SDL screen (faster than GUI debugger)\n"
+			"	-H keep running after CPU halts (useful on windows and to look at screen)\n"
 			"	-d disassemble input\n"
 			"	-r run input\n"
 			"	-D open CLI debug prompt (like gdb)\n"
@@ -93,13 +112,18 @@
 	if (scrflag)
 	{
 #ifndef NO_PTHREAD
-		start_screen_thread(cpu.mem + CPU_FB_ADDR);
+		CATCH(&cleanup_screen_thread, start_screen_thread(cpu.mem + CPU_FB_ADDR));
 #else
 		sdl_screen_t scr = new_sdl_screen(8);
 		g_scr = &scr;
 #endif
 	}
 
+	if (guiflag && scrflag)
+	{
+		THROW("-g and -s cannot be used together");
+	}
+
 	if (guiflag)
 	{
 		gui(&cpu);
@@ -111,14 +135,21 @@
 	else if (runflag)
 	{
 		run(&cpu);
+		if (nohaltflag)
+		{
+			puts("Press any key to exit");
+			getchar();
+		}
 	}
 	else if (debugflag)
 	{
 		debug(&cpu);
 	}
 	
+#ifdef NO_PTHREAD
 	if (scrflag)
 		free_sdl_screen(g_scr);
+#endif
 
 	if (should_read)
 		free_cpu(&cpu);