Index: emu/all.h
===================================================================
--- emu/all.h	(revision 9ddbf3e3b93004ac7df85a6f7d2ae557d8dac5a9)
+++ emu/all.h	(revision 2cd18e33241b11ca00824e09a4369db9d0cea97f)
@@ -31,5 +31,5 @@
 #include <SDL2/SDL_ttf.h>
 
-// work around RtMidi's C++-isms
+// XXX - work around RtMidi's C++-isms; remove when fixed in RtMidi
 
 #pragma GCC diagnostic push
@@ -76,5 +76,5 @@
 extern const char *font;
 
-extern int32_t mid_port;
+extern uint32_t mid_port;
 
 extern SDL_atomic_t run;
Index: emu/main.c
===================================================================
--- emu/main.c	(revision 9ddbf3e3b93004ac7df85a6f7d2ae557d8dac5a9)
+++ emu/main.c	(revision 2cd18e33241b11ca00824e09a4369db9d0cea97f)
@@ -43,5 +43,5 @@
 const char *font = "ttf/vera-sans-mono.ttf";
 
-int32_t mid_port = -1;
+uint32_t mid_port = 0;
 
 SDL_atomic_t run;
@@ -160,5 +160,5 @@
 			}
 
-			mid_port = (int32_t)tmp;
+			mid_port = (uint32_t)tmp;
 			continue;
 		}
Index: emu/mid.c
===================================================================
--- emu/mid.c	(revision 9ddbf3e3b93004ac7df85a6f7d2ae557d8dac5a9)
+++ emu/mid.c	(revision 2cd18e33241b11ca00824e09a4369db9d0cea97f)
@@ -103,4 +103,6 @@
 	(void)data;
 
+	// XXX - remove length calculation once RtMidi passes the length
+
 	int32_t len;
 
@@ -165,10 +167,6 @@
 	ver("mid init");
 
-	if (mid_port < 0) {
-		ver("no MIDI requested");
-		return;
-	}
-
 	mid_in = rtmidi_in_create_default();
+	mid_in->data = NULL; // XXX - remove initialization once it's added to RtMidi
 
 	if (!mid_in->ok) {
@@ -176,5 +174,5 @@
 	}
 
-	int32_t n_ports = (int32_t)rtmidi_get_port_count(mid_in);
+	uint32_t n_ports = rtmidi_get_port_count(mid_in);
 
 	if (n_ports == 0) {
@@ -186,15 +184,15 @@
 
 	if (mid_port >= n_ports) {
-		fail("invalid MIDI port %d selected (%d available)", mid_port, n_ports);
-	}
-
-	const char *name = rtmidi_get_port_name(mid_in, (uint32_t)mid_port);
-	rtmidi_open_port(mid_in, (uint32_t)mid_port, name);
+		fail("invalid MIDI port %u selected (%u available)", mid_port, n_ports);
+	}
+
+	const char *name = rtmidi_get_port_name(mid_in, mid_port);
+	rtmidi_open_port(mid_in, mid_port, name);
 
 	if (!mid_in->ok) {
-		fail("error while opening MIDI port %d (%s): %s", mid_port, name, mid_in->msg);
-	}
-
-	inf("using MIDI port %d (%s)", mid_port, name);
+		fail("error while opening MIDI port %u (%s): %s", mid_port, name, mid_in->msg);
+	}
+
+	inf("using MIDI port %u (%s)", mid_port, name);
 
 	rtmidi_in_set_callback(mid_in, callback, mid_in->data);
@@ -294,4 +292,5 @@
 {
 	mid_in = rtmidi_in_create_default();
+	mid_in->data = NULL; // XXX - remove initialization once it's added to RtMidi
 
 	if (!mid_in->ok) {
