Index: emu/all.h
===================================================================
--- emu/all.h	(revision 379ffd96c2e3a24d7829c494c50187a6ce2ae14a)
+++ emu/all.h	(revision 77d8df82f5dfc0eadc7b81c42db2c4f4773a428d)
@@ -71,4 +71,6 @@
 extern uint32_t lcd_win;
 
+extern uint32_t mid_port;
+
 extern void sdl_init(void);
 extern void sdl_quit(void);
@@ -137,4 +139,5 @@
 extern uint32_t mid_read(uint32_t off, int32_t sz);
 extern void mid_write(uint32_t off, int32_t sz, uint32_t val);
+extern void mid_list(void);
 
 extern void fdd_init(void);
Index: emu/main.c
===================================================================
--- emu/main.c	(revision 379ffd96c2e3a24d7829c494c50187a6ce2ae14a)
+++ emu/main.c	(revision 77d8df82f5dfc0eadc7b81c42db2c4f4773a428d)
@@ -45,7 +45,9 @@
 SDL_atomic_t run;
 
+uint32_t mid_port = 0;
+
 static void usage(FILE *fh)
 {
-	fprintf(fh, "usage: buchla [-h] [-v comp [-v comp [...]]] [-b bios] [-d disk] [-f font]\n");
+	fprintf(fh, "usage: buchla [-h] [-v comp [-v comp [...]]] [-b bios] [-d disk] [-f font] [-m midiport] \n");
 	fprintf(fh, "where comp is one of: ");
 
@@ -55,4 +57,6 @@
 
 	fprintf(fh, "all\n");
+	fprintf(fh, "and midiport is the number of the desired MIDI port\n");
+	fprintf(fh, "list all available MIDI ports with: buchla [-m list]\n");
 }
 
@@ -130,4 +134,22 @@
 			continue;
 		}
+
+		if (strcmp(argv[i], "-m") == 0) {
+			if (++i == argc) {
+				usage(stderr);
+				fprintf(stderr, "missing argument to -m\n");
+				exit(1);
+			}
+
+			if (strcmp(argv[i], "list") == 0) {
+				mid_list();
+				exit(0);
+				continue;
+			}
+
+			// TODO: Assign midi port number
+			 mid_port = (uint32_t) atoi(argv[i]);
+			continue;
+		}
 	}
 }
Index: emu/mid.c
===================================================================
--- emu/mid.c	(revision 379ffd96c2e3a24d7829c494c50187a6ce2ae14a)
+++ emu/mid.c	(revision 77d8df82f5dfc0eadc7b81c42db2c4f4773a428d)
@@ -47,5 +47,5 @@
 int32_t mid_verbose = 0;
 
-struct RtMidiWrapper* midiin;
+struct RtMidiWrapper* mid_in;
 
 static void xmit(int32_t un)
@@ -105,5 +105,5 @@
 }
 
-static void midi_callback(double timeStamp, const unsigned char* message, size_t size, void *userData) {
+static void mid_callback(double timeStamp, const unsigned char* message, size_t size, void *userData) {
 	(void) size;
 	(void) userData;
@@ -121,28 +121,33 @@
 	ver("mid init");
 
-	midiin = rtmidi_in_create_default();
-	ver2("%p", midiin->ptr);
+	mid_in = rtmidi_in_create_default();
+	ver2("%p", mid_in->ptr);
 	// check if null
-	uint32_t portcount = rtmidi_get_port_count(midiin);
-	ver2("%d", midiin->ok);
-
+
+	uint32_t portcount = rtmidi_get_port_count(mid_in);
 	if (portcount == 0) {
-		midiin = NULL;
-		ver2("no midi ports\n");
-		return;
-	}
-
-	for (uint32_t i = 0; i < portcount; i++) {
-		ver2("Port %d: %s", i, rtmidi_get_port_name(midiin, i));
-	}
-
-	rtmidi_open_port(midiin, 0, rtmidi_get_port_name(midiin, 0));
-	if(!midiin->ok) {
-		fail("Failed to open Midi port");
-	}
-
-	rtmidi_in_set_callback(midiin, midi_callback, midiin->data);
-	if(!midiin->ok) {
-		fail("Failed to set Midi Callback");
+		mid_in = NULL;
+		ver2("No MIDI ports\n");
+		return;
+	}
+
+	if (mid_port > portcount) {
+		mid_in = NULL;
+		ver2("Selected MIDI port larger than number of midi ports");
+		return;
+	}
+
+	rtmidi_open_port(mid_in, mid_port, rtmidi_get_port_name(mid_in, mid_port));
+
+	if(mid_in->ok == 0) {
+		fail("Failed to open MIDI port");
+	}
+
+	ver2("Using MIDI port %u", mid_port);
+
+	rtmidi_in_set_callback(mid_in, mid_callback, mid_in->data);
+
+	if(mid_in->ok == 0) {
+		fail("Failed to set MIDI Callback");
 	}
 }
@@ -150,7 +155,7 @@
 void mid_quit(void)
 {
-	if(midiin) {
-		rtmidi_close_port(midiin);
-		rtmidi_in_free(midiin);
+	if(mid_in) {
+		rtmidi_close_port(mid_in);
+		rtmidi_in_free(mid_in);
 	}
 
@@ -231,2 +236,22 @@
 	}
 }
+
+void mid_list(void) {
+	mid_in = rtmidi_in_create_default();
+
+	uint32_t portcount = rtmidi_get_port_count(mid_in);
+
+	if (portcount == 0) {
+		mid_in = NULL;
+		ver2("no MIDI ports\n");
+		return;
+	}
+
+	fprintf(stdout, "the following MIDI ports are available:\n");
+
+	for (uint32_t i = 0; i < portcount; i++) {
+		fprintf(stdout, "port %d: %s\n", i, rtmidi_get_port_name(mid_in, i));
+	}
+
+	rtmidi_in_free(mid_in);
+}
