shithub: sms

Download patch

ref: 09bca230962f46990719e80c11eceac28e825486
parent: ee2c0cede5b54b1748d56e000db3af073cfdac4e
author: Jean-André Santoni <jean.andre.santoni@gmail.com>
date: Mon Jul 15 16:33:15 EDT 2024

inputs

--- a/dat.h
+++ b/dat.h
@@ -17,6 +17,9 @@
 extern uint32_t cramc[64];
 extern int vdpx, vdpy, frame, intla;
 
+extern uint8_t portDC;
+extern uint8_t portDD;
+
 enum {
 	MODE1   = 0x00,
 	MODE2   = 0x01,
--- a/mem.c
+++ b/mem.c
@@ -111,6 +111,7 @@
 	}
 }
 
+uint8_t portDC = 0x00;
 uint8_t portDD = 0xff;
 uint8_t port3E = 0x00;
 uint8_t port3F = 0x00;
@@ -133,10 +134,11 @@
 		else
 			return vdpstatus();
 	else
-		if ((port & 0x01) == 0x00)
-			return 0xff; // port dc
-		else
-			return (portDD & 0x3f) | (port3F & 0xc0); // port dd
+		if ((port & 0x01) == 0x00){
+			printf("  read port DC: %x\n", portDC);
+			return portDC;
+		}else
+			return (portDD & 0x3f) | (port3F & 0xc0);
 }
 
 void
--- a/sms.c
+++ b/sms.c
@@ -86,9 +86,31 @@
 	return true;
 }
 
+uint8_t keys[2];
+
+static const int retro_bind[] = {
+	[RETRO_DEVICE_ID_JOYPAD_UP] = 0,
+	[RETRO_DEVICE_ID_JOYPAD_DOWN] = 1<<1,
+	[RETRO_DEVICE_ID_JOYPAD_LEFT] = 1<<2,
+	[RETRO_DEVICE_ID_JOYPAD_RIGHT] = 1<<3,
+	[RETRO_DEVICE_ID_JOYPAD_A] = 1<<4,
+	[RETRO_DEVICE_ID_JOYPAD_B] = 1<<5,
+	[RETRO_DEVICE_ID_JOYPAD_START] = 1<<6,
+};
+
 void
 process_inputs()
 {
+	for(int p = 0; p < 2; p++)
+	{
+		keys[p] = 0xff;
+		for(int id = 0; id < RETRO_DEVICE_ID_JOYPAD_X; id++)
+			if(input_state_cb(p, RETRO_DEVICE_JOYPAD, 0, id))
+				keys[p] = keys[p] & ~retro_bind[id];
+	}
+
+	portDC = (keys[0] & 0x3f) + ((keys[1] << 6) & 0xc0);
+	portDD = ((keys[1] >> 2) & 0x0f) | 0xf0;
 }
 
 int counter = 0;
--