|
46 | 46 | #define DefaultFPS 60 |
47 | 47 | #define MaxWidth 352 |
48 | 48 | #define MaxHeight 224 |
| 49 | +#define MAX_PADS 2 |
49 | 50 |
|
50 | 51 | // ======================================== |
51 | 52 | // HORIZONTAL LAYOUT DISPLAY CONFIGURATION |
@@ -916,6 +917,7 @@ static void process_hotspot_input(void) |
916 | 917 |
|
917 | 918 | struct retro_game_geometry Geometry; |
918 | 919 |
|
| 920 | +static bool libretro_supports_bitmasks = false; |
919 | 921 | static bool libretro_supports_option_categories = false; |
920 | 922 |
|
921 | 923 | int joypad0[20]; // joypad 0 state |
@@ -976,6 +978,87 @@ static void Keyboard(bool down, unsigned keycode, |
976 | 978 | } |
977 | 979 | } |
978 | 980 |
|
| 981 | +static void update_input(void) |
| 982 | +{ |
| 983 | + int i, j; |
| 984 | + int joypad_bits[2]; |
| 985 | + |
| 986 | + InputPoll(); |
| 987 | + |
| 988 | + for (i = 0; i < 20; i++) // Copy previous state |
| 989 | + { |
| 990 | + joypre0[i] = joypad0[i]; |
| 991 | + joypre1[i] = joypad1[i]; |
| 992 | + } |
| 993 | + |
| 994 | + if (libretro_supports_bitmasks) |
| 995 | + { |
| 996 | + for (j = 0; j < MAX_PADS; j++) |
| 997 | + joypad_bits[j] = InputState(j, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_MASK); |
| 998 | + } |
| 999 | + else |
| 1000 | + { |
| 1001 | + for (j = 0; j < MAX_PADS; j++) |
| 1002 | + { |
| 1003 | + joypad_bits[j] = 0; |
| 1004 | + for (i = 0; i < (RETRO_DEVICE_ID_JOYPAD_R3+1); i++) |
| 1005 | + joypad_bits[j] |= InputState(j, RETRO_DEVICE_JOYPAD, 0, i) ? (1 << i) : 0; |
| 1006 | + } |
| 1007 | + } |
| 1008 | + |
| 1009 | + /* JoyPad 0 */ |
| 1010 | + joypad0[0] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_UP) ? 1 : 0; |
| 1011 | + joypad0[1] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_DOWN) ? 1 : 0; |
| 1012 | + joypad0[2] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_LEFT) ? 1 : 0; |
| 1013 | + joypad0[3] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT) ? 1 : 0; |
| 1014 | + |
| 1015 | + joypad0[4] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_A) ? 1 : 0; |
| 1016 | + joypad0[5] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_B) ? 1 : 0; |
| 1017 | + joypad0[6] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_X) ? 1 : 0; |
| 1018 | + joypad0[7] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_Y) ? 1 : 0; |
| 1019 | + |
| 1020 | + joypad0[8] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_START) ? 1 : 0; |
| 1021 | + joypad0[9] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_SELECT) ? 1 : 0; |
| 1022 | + |
| 1023 | + joypad0[10] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_L) ? 1 : 0; |
| 1024 | + joypad0[11] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_R) ? 1 : 0; |
| 1025 | + joypad0[12] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_L2) ? 1 : 0; |
| 1026 | + joypad0[13] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_R2) ? 1 : 0; |
| 1027 | + joypad0[18] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_L3) ? 1 : 0; |
| 1028 | + joypad0[19] = joypad_bits[0] & (1 << RETRO_DEVICE_ID_JOYPAD_R3) ? 1 : 0; |
| 1029 | + |
| 1030 | + joypad0[14] = InputState(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X); |
| 1031 | + joypad0[15] = InputState(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y); |
| 1032 | + joypad0[16] = InputState(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X); |
| 1033 | + joypad0[17] = InputState(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y); |
| 1034 | + |
| 1035 | + /* JoyPad 1 */ |
| 1036 | + joypad1[0] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_UP) ? 1 : 0; |
| 1037 | + joypad1[1] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_DOWN) ? 1 : 0; |
| 1038 | + joypad1[2] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_LEFT) ? 1 : 0; |
| 1039 | + joypad1[3] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT) ? 1 : 0; |
| 1040 | + |
| 1041 | + joypad1[4] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_A) ? 1 : 0; |
| 1042 | + joypad1[5] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_B) ? 1 : 0; |
| 1043 | + joypad1[6] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_X) ? 1 : 0; |
| 1044 | + joypad1[7] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_Y) ? 1 : 0; |
| 1045 | + |
| 1046 | + joypad1[8] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_START) ? 1 : 0; |
| 1047 | + joypad1[9] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_SELECT) ? 1 : 0; |
| 1048 | + |
| 1049 | + joypad1[10] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_L) ? 1 : 0; |
| 1050 | + joypad1[11] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_R) ? 1 : 0; |
| 1051 | + joypad1[12] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_L2) ? 1 : 0; |
| 1052 | + joypad1[13] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_R2) ? 1 : 0; |
| 1053 | + joypad1[18] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_L3) ? 1 : 0; |
| 1054 | + joypad1[19] = joypad_bits[1] & (1 << RETRO_DEVICE_ID_JOYPAD_R3) ? 1 : 0; |
| 1055 | + |
| 1056 | + joypad1[14] = InputState(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X); |
| 1057 | + joypad1[15] = InputState(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y); |
| 1058 | + joypad1[16] = InputState(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X); |
| 1059 | + joypad1[17] = InputState(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y); |
| 1060 | +} |
| 1061 | + |
979 | 1062 | static void check_variables(bool first_run) |
980 | 1063 | { |
981 | 1064 | struct retro_variable var = {0}; |
@@ -1072,6 +1155,9 @@ void retro_init(void) |
1072 | 1155 |
|
1073 | 1156 | Environ(RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS, desc); |
1074 | 1157 |
|
| 1158 | + if (Environ(RETRO_ENVIRONMENT_GET_INPUT_BITMASKS, NULL)) |
| 1159 | + libretro_supports_bitmasks = true; |
| 1160 | + |
1075 | 1161 | // reset console |
1076 | 1162 | Init(); |
1077 | 1163 | Reset(); |
@@ -1128,78 +1214,7 @@ void retro_run(void) |
1128 | 1214 | if (Environ(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &options_updated) && options_updated) |
1129 | 1215 | check_variables(false); |
1130 | 1216 |
|
1131 | | - InputPoll(); |
1132 | | - |
1133 | | - // DEBUG: Check pointer input at the start of retro_run and write to file |
1134 | | - if (debug_frame_count < 300) { |
1135 | | - px = InputState(0, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_X); |
1136 | | - py = InputState(0, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_Y); |
1137 | | - pp = InputState(0, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_PRESSED); |
1138 | | - |
1139 | | - f = fopen("/storage/emulated/0/Download/freeintv_pointer_debug.txt", "a"); |
1140 | | - if (f) { |
1141 | | - fclose(f); |
1142 | | - } |
1143 | | - debug_frame_count++; |
1144 | | - } |
1145 | | - |
1146 | | - for(i = 0; i < 20; i++) // Copy previous state |
1147 | | - { |
1148 | | - joypre0[i] = joypad0[i]; |
1149 | | - joypre1[i] = joypad1[i]; |
1150 | | - } |
1151 | | - |
1152 | | - /* JoyPad 0 */ |
1153 | | - joypad0[0] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP); |
1154 | | - joypad0[1] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN); |
1155 | | - joypad0[2] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT); |
1156 | | - joypad0[3] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT); |
1157 | | - |
1158 | | - joypad0[4] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A); |
1159 | | - joypad0[5] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B); |
1160 | | - joypad0[6] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X); |
1161 | | - joypad0[7] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y); |
1162 | | - |
1163 | | - joypad0[8] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START); |
1164 | | - joypad0[9] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT); |
1165 | | - |
1166 | | - joypad0[10] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L); |
1167 | | - joypad0[11] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R); |
1168 | | - joypad0[12] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2); |
1169 | | - joypad0[13] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2); |
1170 | | - |
1171 | | - joypad0[14] = InputState(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X); |
1172 | | - joypad0[15] = InputState(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y); |
1173 | | - joypad0[16] = InputState(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X); |
1174 | | - joypad0[17] = InputState(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y); |
1175 | | - joypad0[18] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L3); |
1176 | | - joypad0[19] = InputState(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R3); |
1177 | | - |
1178 | | - /* JoyPad 1 */ |
1179 | | - joypad1[0] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP); |
1180 | | - joypad1[1] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN); |
1181 | | - joypad1[2] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT); |
1182 | | - joypad1[3] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT); |
1183 | | - |
1184 | | - joypad1[4] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A); |
1185 | | - joypad1[5] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B); |
1186 | | - joypad1[6] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X); |
1187 | | - joypad1[7] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y); |
1188 | | - |
1189 | | - joypad1[8] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START); |
1190 | | - joypad1[9] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT); |
1191 | | - |
1192 | | - joypad1[10] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L); |
1193 | | - joypad1[11] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R); |
1194 | | - joypad1[12] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2); |
1195 | | - joypad1[13] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R2); |
1196 | | - |
1197 | | - joypad1[14] = InputState(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X); |
1198 | | - joypad1[15] = InputState(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y); |
1199 | | - joypad1[16] = InputState(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X); |
1200 | | - joypad1[17] = InputState(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y); |
1201 | | - joypad1[18] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L3); |
1202 | | - joypad1[19] = InputState(1, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R3); |
| 1217 | + update_input(); |
1203 | 1218 |
|
1204 | 1219 | // Pause |
1205 | 1220 | if((joypad0[8]==1 && joypre0[8]==0) || (joypad1[8]==1 && joypre1[8]==0)) |
@@ -1434,6 +1449,7 @@ void retro_get_system_av_info(struct retro_system_av_info *info) |
1434 | 1449 |
|
1435 | 1450 | void retro_deinit(void) |
1436 | 1451 | { |
| 1452 | + libretro_supports_bitmasks = false; |
1437 | 1453 | libretro_supports_option_categories = false; |
1438 | 1454 | quit(0); |
1439 | 1455 | } |
|
0 commit comments