diff io.c @ 1146:3e24de8d8073

Add support for SMS controllers
author Michael Pavone <pavone@retrodev.com>
date Tue, 03 Jan 2017 21:18:52 -0800
parents be3df2d8530a
children 6a4503fad67e
line wrap: on
line diff
--- a/io.c	Tue Jan 03 21:18:42 2017 -0800
+++ b/io.c	Tue Jan 03 21:18:52 2017 -0800
@@ -25,6 +25,7 @@
 #define MIN_POLL_INTERVAL 6840
 
 const char * device_type_names[] = {
+	"SMS gamepad",
 	"3-button gamepad",
 	"6-button gamepad",
 	"Mega Mouse",
@@ -653,15 +654,15 @@
 	if (!strncmp(device_type, "gamepad", gamepad_len))
 	{
 		if (
-			(device_type[gamepad_len] != '3' && device_type[gamepad_len] != '6')
+			(device_type[gamepad_len] != '3' && device_type[gamepad_len] != '6' && device_type[gamepad_len] != '2')
 			|| device_type[gamepad_len+1] != '.' || device_type[gamepad_len+2] < '1'
 			|| device_type[gamepad_len+2] > '8' || device_type[gamepad_len+3] != 0
-		)
-		{
+		) {
 			warning("%s is not a valid gamepad type\n", device_type);
-		} else if (device_type[gamepad_len] == '3')
-		{
+		} else if (device_type[gamepad_len] == '3') {
 			port->device_type = IO_GAMEPAD3;
+		} else if (device_type[gamepad_len] == '2') {
+			port->device_type = IO_GAMEPAD2;
 		} else {
 			port->device_type = IO_GAMEPAD6;
 		}
@@ -803,7 +804,7 @@
 			}
 		} else
 #endif
-		if (ports[i].device_type == IO_GAMEPAD3 || ports[i].device_type == IO_GAMEPAD6) {
+		if (ports[i].device_type == IO_GAMEPAD3 || ports[i].device_type == IO_GAMEPAD6 || ports[i].device_type == IO_GAMEPAD2) {
 			printf("IO port %s connected to gamepad #%d with type '%s'\n", io_name(i), ports[i].device.pad.gamepad_num + 1, device_type_names[ports[i].device_type]);
 		} else {
 			printf("IO port %s connected to device '%s'\n", io_name(i), device_type_names[ports[i].device_type]);
@@ -821,7 +822,8 @@
 			for (int j = 0; j < 3; j++)
 			{
 				if ((ports[j].device_type == IO_GAMEPAD3
-					 || ports[j].device_type ==IO_GAMEPAD6)
+					 || ports[j].device_type == IO_GAMEPAD6
+					 || ports[j].device_type == IO_GAMEPAD2)
 					 && ports[j].device.pad.gamepad_num == num
 				)
 				{
@@ -1364,6 +1366,9 @@
 	}
 	switch (port->device_type)
 	{
+	case IO_GAMEPAD2:
+		input = ~port->input[GAMEPAD_TH1];
+		break;
 	case IO_GAMEPAD3:
 	{
 		input = port->input[th ? GAMEPAD_TH1 : GAMEPAD_TH0];