diff nuklear_ui/blastem_nuklear.c @ 2235:93918a6a8ab7

Initial support for Sega multi-tap
author Michael Pavone <pavone@retrodev.com>
date Tue, 13 Sep 2022 20:08:26 -0700
parents dd9d43c67986
children 0a107b2d5837
line wrap: on
line diff
--- a/nuklear_ui/blastem_nuklear.c	Sun Sep 11 15:04:42 2022 -0700
+++ b/nuklear_ui/blastem_nuklear.c	Tue Sep 13 20:08:26 2022 -0700
@@ -2035,7 +2035,7 @@
 		}
 	}
 
-	const char *formats[] = {
+	static const char *formats[] = {
 		"native",
 		"gst"
 	};
@@ -2044,7 +2044,7 @@
 	if (selected_format < 0) {
 		selected_format = find_match(formats, num_formats, "ui\0state_format\0", "native");
 	}
-	const char *ram_inits[] = {
+	static const char *ram_inits[] = {
 		"zero",
 		"random"
 	};
@@ -2053,28 +2053,39 @@
 	if (selected_init < 0) {
 		selected_init = find_match(ram_inits, num_inits, "system\0ram_init\0", "zero");
 	}
-	const char *io_opts_1[] = {
+	static const char *io_opts_1[] = {
 		"none",
 		"gamepad2.1",
 		"gamepad3.1",
 		"gamepad6.1",
+		"sega_multitap.1",
 		"mouse.1",
 		"saturn keyboard",
 		"xband keyboard"
 	};
-	const char *io_opts_2[] = {
+	static const char *io_opts_2[] = {
 		"none",
 		"gamepad2.2",
 		"gamepad3.2",
 		"gamepad6.2",
+		"sega_multitap.1",
 		"mouse.1",
 		"saturn keyboard",
 		"xband keyboard"
 	};
+	static const char *type_names[sizeof(io_opts_1)/sizeof(*io_opts_1)];
 	static int32_t selected_io_1 = -1;
 	static int32_t selected_io_2 = -1;
 	const uint32_t num_io = sizeof(io_opts_1)/sizeof(*io_opts_1);
 	if (selected_io_1 < 0 || selected_io_2 < 0 || show_sms != old_show_sms) {
+		type_names[0] = device_type_names[IO_NONE];
+		type_names[1] = device_type_names[IO_GAMEPAD2];
+		type_names[2] = device_type_names[IO_GAMEPAD3];
+		type_names[3] = device_type_names[IO_GAMEPAD6];
+		type_names[4] = device_type_names[IO_SEGA_MULTI];
+		type_names[5] = device_type_names[IO_MOUSE];
+		type_names[6] = device_type_names[IO_SATURN_KEYBOARD];
+		type_names[7] = device_type_names[IO_XBAND_KEYBOARD];
 		if (show_sms) {
 			selected_io_1 = find_match(io_opts_1, num_io, "sms\0io\0devices\0""1\0", "gamepad2.1");
 			selected_io_2 = find_match(io_opts_2, num_io, "sms\0io\0devices\0""2\0", "gamepad2.2");
@@ -2096,8 +2107,8 @@
 		} else {
 			selected_model = settings_dropdown_ex(context, "Model", model_opts, model_names, num_models, selected_model, "system\0model\0");
 		}
-		selected_io_1 = settings_dropdown_ex(context, "IO Port 1 Device", io_opts_1, device_type_names, num_io, selected_io_1, show_sms ? "sms\0io\0devices\0""1\0" : "io\0devices\0""1\0");
-		selected_io_2 = settings_dropdown_ex(context, "IO Port 2 Device", io_opts_2, device_type_names, num_io, selected_io_2, show_sms ? "sms\0io\0devices\0""2\0" : "io\0devices\0""2\0");
+		selected_io_1 = settings_dropdown_ex(context, "IO Port 1 Device", io_opts_1, type_names, num_io, selected_io_1, show_sms ? "sms\0io\0devices\0""1\0" : "io\0devices\0""1\0");
+		selected_io_2 = settings_dropdown_ex(context, "IO Port 2 Device", io_opts_2, type_names, num_io, selected_io_2, show_sms ? "sms\0io\0devices\0""2\0" : "io\0devices\0""2\0");
 		selected_region = settings_dropdown_ex(context, "Default Region", region_codes, regions, num_regions, selected_region, "system\0default_region\0");
 		selected_sync = settings_dropdown(context, "Sync Source", sync_opts, num_sync_opts, selected_sync, "system\0sync_source\0");
 		if (!show_sms) {