| Эмуляция > Эмуляторы консолей 6 поколения и выше |
| Добавление джойстика в новую версию Snes9xRx для Wii |
| (1/1) |
| cerealkiller:
Для Wii есть новая версия эмулятора Snes9xRx https://gbatemp.net/threads/snes9x-rx-a-new-fork.527131/ с поддержкой некоторых USB падов, кто-нибудь знает как добавить туда ps4 third party пад, вот такие данные у него. (Код ведь оpen source) |
| Koyote:
Это ты тот клоун которого вчера на gbatemp куи облизывать отправили? https://gbatemp.net/threads/snes9x-rx-a-new-fork.527131/page-37#post-9969431 Лол. А ведь там довольно приличные и доброжелательные люди. Впрочем, можешь огласить сумму вознаграждения. |
| Zykon:
В теории вроде бы ничего сложного, найти или написать библиотеку под DS4, добавить библиотеку в сурсы данного эмуля и написать пару файлов в одном из которых будут прописаны все кнопки, ну а так там есть библиотека под х360 и под DS3 |
| nonamezerox:
cerealkiller, --- Цитата: cerealkiller от 18 Октябрь 2022, 18:28:34 ---ну так а как это сделать? --- Конец цитаты --- См файл sicksaxis.c в исходниках и https://github.com/j0lama/DS4Lib Нужно из двух написать одно. А вообще судя по всему очень скоро нам тебя будет нехватать |
| cerealkiller:
--- Цитата: nonamezerox от 18 Октябрь 2022, 19:10:25 ---cerealkiller, См файл sicksaxis.c в исходниках и https://github.com/j0lama/DS4Lib Нужно из двух написать одно. А вообще судя по всему очень скоро нам тебя будет нехватать --- Конец цитаты --- Переживете 🤣🤣🤣 Я ни хрена в этом не понимаю, нормально кто-нибудь может объяснить что нужно сделать? |
| s1nka:
cerealkiller, что тебе объяснить? Как программировать? |
| cerealkiller:
--- Цитата: s1nka от 18 Октябрь 2022, 20:03:02 ---cerealkiller, что тебе объяснить? Как программировать? --- Конец цитаты --- А ещё лучше как сделать |
| JARL32:
Там на гбатемпе есть отличное предложение - купить gamecube и classic controller, можно даже на али, тем более, что через месяц черная пятница и рублей 100 можно будет сэкономить. И не парить мозги не себе, не людям. |
| Sharpnull:
Можно попробовать fakemote, если добавить свой VIP&PID и скомпилировать. Заменить: --- Цитата: https://github.com/xerpi/fakemote/blob/b8c64d10dc1996a88f33f3e038060d65653ecb12/source/usb_driver_ds4.c#L309 --- static const struct device_id_t compatible[] = { {SONY_VID, 0x05c4}, {SONY_VID, 0x09cc}, --- Конец цитаты --- на (в данном случае): --- Цитата --- static const struct device_id_t compatible[] = { {SONY_VID, 0x05c4}, {SONY_VID, 0x09cc}, {0x0C12, 0x0E17}, --- Конец цитаты --- Если изменять код эмулятора, то, как я понял, для базовой поддержки кнопок (без стиков, вибрации, LED и т. п.) достаточно по аналогии с https://github.com/niuus/Snes9xRX/blob/1c70e2486af14990fe61ae3b4c9a2c540a75ee83/source/utils/hornet.c немного изменить код, можно даже сам hornet.c изменить. В RetroArch и другом софте есть конфиги для устройств, значит в hornet.c нужно изменить VID&PID и какие байты отвечают за кнопки. В этом же эмуляторе retrode.c почти как hornet.c, вместо реализации конфигов. Конкретно заменить: --- Цитата: https://github.com/niuus/Snes9xRX/blob/1c70e2486af14990fe61ae3b4c9a2c540a75ee83/source/utils/hornet.c#L4 ---#define HORNET_VID 0x054C #define HORNET_PID 0x05C4 --- Конец цитаты --- --- Цитата: https://github.com/niuus/Snes9xRX/blob/1c70e2486af14990fe61ae3b4c9a2c540a75ee83/source/utils/hornet.c#L116 --- jp = 0; jp |= (buf[4] == 0x00) ? PAD_BUTTON_UP : 0; jp |= (buf[4] == 0xFF) ? PAD_BUTTON_DOWN : 0; jp |= (buf[3] == 0x00) ? PAD_BUTTON_LEFT : 0; jp |= (buf[3] == 0xFF) ? PAD_BUTTON_RIGHT : 0; jp |= ((buf[5] & 0x2F) == 0x2F) ? PAD_BUTTON_A : 0; jp |= ((buf[5] & 0x1F) == 0x1F) ? PAD_BUTTON_B : 0; jp |= ((buf[6] & 0x01) == 0x01) ? PAD_BUTTON_X : 0; jp |= ((buf[5] & 0x8F) == 0x8F) ? PAD_BUTTON_Y : 0; jp |= ((buf[6] & 0x04) == 0x04) ? PAD_TRIGGER_L : 0; jp |= ((buf[6] & 0x08) == 0x08) ? PAD_TRIGGER_R : 0; jp |= ((buf[6] & 0x20) == 0x20) ? PAD_BUTTON_START : 0; jp |= ((buf[6] & 0x10) == 0x10) ? PAD_TRIGGER_Z : 0; // Hornet select button maps to Z jp |= ((buf[6] & 0x02) == 0x02) ? PAD_BUTTON_Y : 0; // Hornet button 6 maps to Y jp |= ((buf[5] & 0x4F) == 0x4F) ? PAD_BUTTON_B : 0; // Hornet button 3 maps to B --- Конец цитаты --- Какие кнопки отвечают за что есть, например в fakemote/blob/main/source/usb_driver_ds4.c или https://www.psdevwiki.com/ps4/DS4-USB#Data_Format. Должно получиться как-то так: --- Код: --- jp = 0; jp |= ((buf[5] & 0x0F) == 0x00) ? PAD_BUTTON_UP : 0; jp |= ((buf[5] & 0x0F) == 0x01) ? PAD_BUTTON_UP | PAD_BUTTON_RIGHT : 0; jp |= ((buf[5] & 0x0F) == 0x02) ? PAD_BUTTON_RIGHT : 0; jp |= ((buf[5] & 0x0F) == 0x03) ? PAD_BUTTON_DOWN | PAD_BUTTON_RIGHT : 0; jp |= ((buf[5] & 0x0F) == 0x04) ? PAD_BUTTON_DOWN : 0; jp |= ((buf[5] & 0x0F) == 0x05) ? PAD_BUTTON_DOWN | PAD_BUTTON_LEFT : 0; jp |= ((buf[5] & 0x0F) == 0x06) ? PAD_BUTTON_LEFT : 0; jp |= ((buf[5] & 0x0F) == 0x07) ? PAD_BUTTON_UP | PAD_BUTTON_LEFT : 0; jp |= ((buf[5] & 0x10) == 0x10) ? PAD_BUTTON_Y : 0; // Square jp |= ((buf[5] & 0x20) == 0x20) ? PAD_BUTTON_B : 0; // Cross jp |= ((buf[5] & 0x40) == 0x40) ? PAD_BUTTON_A : 0; // Circle jp |= ((buf[5] & 0x80) == 0x80) ? PAD_BUTTON_X : 0; // Triangle jp |= ((buf[6] & 0x01) == 0x01) ? PAD_TRIGGER_L : 0; // L1 jp |= ((buf[6] & 0x02) == 0x02) ? PAD_TRIGGER_R : 0; // R1 jp |= ((buf[6] & 0x20) == 0x20) ? PAD_BUTTON_START : 0; // Options jp |= ((buf[6] & 0x10) == 0x10) ? PAD_TRIGGER_Z : 0; // Share --- Конец кода --- В buf наверно индекс на 1 меньше, если Report ID нет, тогда buf[5] заменить на buf[4], а buf[6] на buf[5]. |
| Навигация |
| Главная страница сообщений |