summaryrefslogtreecommitdiff
path: root/pcr/reicast-git/purupuru.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pcr/reicast-git/purupuru.patch')
-rw-r--r--pcr/reicast-git/purupuru.patch435
1 files changed, 0 insertions, 435 deletions
diff --git a/pcr/reicast-git/purupuru.patch b/pcr/reicast-git/purupuru.patch
deleted file mode 100644
index d05ca41b3..000000000
--- a/pcr/reicast-git/purupuru.patch
+++ /dev/null
@@ -1,435 +0,0 @@
-diff -Nur a/core/hw/maple/maple_cfg.cpp b/core/hw/maple/maple_cfg.cpp
---- a/core/hw/maple/maple_cfg.cpp 2016-03-18 23:11:34.099340091 -0300
-+++ b/core/hw/maple/maple_cfg.cpp 2016-03-18 23:12:24.396511206 -0300
-@@ -21,6 +21,7 @@
- ImageUpdate(data);
- */
- void UpdateInputState(u32 port);
-+void UpdateVibration(u32 port, u32 value);
-
- extern u16 kcode[4];
- extern u32 vks[4];
-@@ -41,6 +42,11 @@
- this->dev=dev;
- }
-
-+ void SetVibration(u32 value)
-+ {
-+ UpdateVibration(dev->bus_id, value);
-+ }
-+
- void GetInput(PlainJoystickState* pjs)
- {
- UpdateInputState(dev->bus_id);
-diff -Nur a/core/hw/maple/maple_cfg.h b/core/hw/maple/maple_cfg.h
---- a/core/hw/maple/maple_cfg.h 2016-03-18 23:11:34.099340091 -0300
-+++ b/core/hw/maple/maple_cfg.h 2016-03-18 23:12:24.396511206 -0300
-@@ -57,6 +57,7 @@
-
- struct IMapleConfigMap
- {
-+ virtual void SetVibration(u32 value) = 0;
- virtual void GetInput(PlainJoystickState* pjs)=0;
- virtual void SetImage(void* img)=0;
- virtual ~IMapleConfigMap() {}
-diff -Nur a/core/hw/maple/maple_devs.cpp b/core/hw/maple/maple_devs.cpp
---- a/core/hw/maple/maple_devs.cpp 2016-03-18 23:11:34.099340091 -0300
-+++ b/core/hw/maple/maple_devs.cpp 2016-03-18 23:12:24.396511206 -0300
-@@ -22,6 +22,7 @@
- const char* maple_sega_dreameye_name_1 = "Dreamcast Camera Flash Devic";
- const char* maple_sega_dreameye_name_2 = "Dreamcast Camera Flash LDevic";
- const char* maple_sega_mic_name = "MicDevice for Dreameye";
-+const char* maple_sega_purupuru_name = "Puru Puru Pack";
-
- const char* maple_sega_brand = "Produced By or Under License From SEGA ENTERPRISES,LTD.";
-
-@@ -844,6 +845,98 @@
- }
- };
-
-+
-+struct maple_sega_purupuru : maple_base
-+{
-+ u16 AST, AST_ms;
-+ u32 VIBSET;
-+
-+ virtual u32 dma(u32 cmd)
-+ {
-+ switch (cmd)
-+ {
-+ case MDC_DeviceRequest:
-+ //caps
-+ //4
-+ w32(MFID_8_Vibration);
-+
-+ //struct data
-+ //3*4
-+ w32(0x00000101);
-+ w32(0);
-+ w32(0);
-+
-+ //1 area code
-+ w8(0xFF);
-+
-+ //1 direction
-+ w8(0);
-+
-+ //30
-+ wstr(maple_sega_purupuru_name, 30);
-+
-+ //60
-+ wstr(maple_sega_brand, 60);
-+
-+ //2
-+ w16(0x00C8);
-+
-+ //2
-+ w16(0x0640);
-+
-+ return MDRS_DeviceStatus;
-+
-+ //get last vibration
-+ case MDCF_GetCondition:
-+
-+ w32(MFID_8_Vibration);
-+
-+ w32(VIBSET);
-+
-+ return MDRS_DataTransfer;
-+
-+ case MDCF_GetMediaInfo:
-+
-+ w32(MFID_8_Vibration);
-+
-+ // PuruPuru vib specs
-+ w32(0x3B07E010);
-+
-+ return MDRS_DataTransfer;
-+
-+ case MDCF_BlockRead:
-+
-+ w32(MFID_8_Vibration);
-+ w32(0);
-+
-+ w16(2);
-+ w16(AST);
-+
-+ return MDRS_DataTransfer;
-+
-+ case MDCF_BlockWrite:
-+
-+ //Auto-stop time
-+ AST = dma_buffer_in[10];
-+ AST_ms = AST * 250 + 250;
-+
-+ return MDRS_DeviceReply;
-+
-+ case MDCF_SetCondition:
-+
-+ VIBSET = *(u32*)&dma_buffer_in[4];
-+ //Do the rumble thing!
-+ config->SetVibration(VIBSET);
-+
-+ return MDRS_DeviceReply;
-+
-+ default:
-+ //printf("UNKOWN MAPLE COMMAND %d\n",cmd);
-+ return MDRE_UnknownFunction;
-+ }
-+ }
-+};
-+
- char EEPROM[0x100];
- bool EEPROM_loaded = false;
-
-@@ -1300,6 +1393,11 @@
- rv = new maple_sega_vmu();
- break;
-
-+ case MDT_PurupuruPack:
-+ rv = new maple_sega_purupuru();
-+ break;
-+
-+
-
- case MDT_NaomiJamma:
- rv = new maple_naomi_jamma();
-diff -Nur a/core/hw/maple/maple_devs.h b/core/hw/maple/maple_devs.h
---- a/core/hw/maple/maple_devs.h 2016-03-18 23:11:34.099340091 -0300
-+++ b/core/hw/maple/maple_devs.h 2016-03-18 23:12:24.396511206 -0300
-@@ -6,6 +6,7 @@
- MDT_SegaController,
- MDT_SegaVMU,
- MDT_Microphone,
-+ MDT_PurupuruPack,
-
- MDT_NaomiJamma,
-
-diff -Nur a/core/linux-dist/evdev.cpp b/core/linux-dist/evdev.cpp
---- a/core/linux-dist/evdev.cpp 2016-03-18 23:11:34.113340136 -0300
-+++ b/core/linux-dist/evdev.cpp 2016-03-18 23:12:24.397511209 -0300
-@@ -102,6 +102,7 @@
- this->data_y.init(this->fd, this->mapping->Axis_Analog_Y, this->mapping->Axis_Analog_Y_Inverted);
- this->data_trigger_left.init(this->fd, this->mapping->Axis_Trigger_Left, this->mapping->Axis_Trigger_Left_Inverted);
- this->data_trigger_right.init(this->fd, this->mapping->Axis_Trigger_Right, this->mapping->Axis_Trigger_Right_Inverted);
-+ this->rumble_effect_id = -1;
- }
-
- std::map<std::string, EvdevControllerMapping> loaded_mappings;
-@@ -202,7 +203,7 @@
-
- printf("evdev: Trying to open device at '%s'\n", device);
-
-- int fd = open(device, O_RDONLY);
-+ int fd = open(device, O_RDWR);
-
- if (fd >= 0)
- {
-@@ -446,5 +447,43 @@
- }
- }
- }
-+
-+ void input_evdev_rumble(EvdevController* controller, u16 pow_strong, u16 pow_weak)
-+ {
-+ if (controller->fd < 0 || controller->rumble_effect_id == -2)
-+ {
-+ // Either the controller is not used or previous rumble effect failed
-+ printf("RUMBLE: %s\n", "Skipped!");
-+ return;
-+ }
-+ printf("RUMBLE: %u / %u (%d)\n", pow_strong, pow_weak, controller->rumble_effect_id);
-+ struct ff_effect effect;
-+ effect.type = FF_RUMBLE;
-+ effect.id = controller->rumble_effect_id;
-+ effect.u.rumble.strong_magnitude = pow_strong;
-+ effect.u.rumble.weak_magnitude = pow_weak;
-+ effect.replay.length = 0;
-+ effect.replay.delay = 0;
-+ if (ioctl(controller->fd, EVIOCSFF, &effect) == -1)
-+ {
-+ perror("evdev: Force feedback error");
-+ controller->rumble_effect_id = -2;
-+ }
-+ else
-+ {
-+ controller->rumble_effect_id = effect.id;
-+
-+ // Let's play the effect
-+ input_event play;
-+ play.type = EV_FF;
-+ play.code = effect.id;
-+ play.value = 1;
-+ if (write(controller->fd, (const void*) &play, sizeof(play)) == -1)
-+ {
-+ perror("evdev: Force feedback error");
-+ controller->rumble_effect_id = -2;
-+ }
-+ }
-+ }
- #endif
-
-diff -Nur a/core/linux-dist/evdev.h b/core/linux-dist/evdev.h
---- a/core/linux-dist/evdev.h 2016-03-18 23:11:34.113340136 -0300
-+++ b/core/linux-dist/evdev.h 2016-03-18 23:12:24.397511209 -0300
-@@ -54,6 +54,7 @@
- EvdevAxisData data_y;
- EvdevAxisData data_trigger_left;
- EvdevAxisData data_trigger_right;
-+ int rumble_effect_id;
- void init();
- };
-
-@@ -72,3 +73,4 @@
-
- extern int input_evdev_init(EvdevController* controller, const char* device, const char* mapping_fname);
- extern bool input_evdev_handle(EvdevController* controller, u32 port);
-+extern void input_evdev_rumble(EvdevController* controller, u16 pow_strong, u16 pow_weak);
-diff -Nur a/core/linux-dist/main.cpp b/core/linux-dist/main.cpp
---- a/core/linux-dist/main.cpp 2016-03-18 23:11:34.113340136 -0300
-+++ b/core/linux-dist/main.cpp 2016-03-18 23:12:24.397511209 -0300
-@@ -191,6 +191,30 @@
- #endif
- }
-
-+void UpdateVibration(u32 port, u32 value)
-+{
-+ #if defined(USE_EVDEV)
-+ const u8 freq_l = 0x16;
-+ //const u8 freq_h = 0x31;
-+
-+ u8 POW_POS = (value >> 8) & 0x3;
-+ u8 POW_NEG = (value >> 12) & 0x3;
-+ u8 FREQ = (value >> 16) & 0xFF;
-+
-+ double pow = (POW_POS + POW_NEG) / 7.0;
-+ double pow_l = pow * (0x3B - FREQ) / 17.0;
-+ double pow_r = pow * (FREQ / (double)freq_l);
-+
-+ if (pow_l > 1.0) pow_l = 1.0;
-+ if (pow_r > 1.0) pow_r = 1.0;
-+
-+ u16 pow_strong = (u16)(65535 * pow_l);
-+ u16 pow_weak = (u16)(65535 * pow_r);
-+
-+ input_evdev_rumble(&evdev_controllers[port], pow_strong, pow_weak);
-+ #endif
-+}
-+
- void os_DoEvents()
- {
- #if defined(SUPPORT_X11)
-diff -Nur a/core/nacl/nacl.cpp b/core/nacl/nacl.cpp
---- a/core/nacl/nacl.cpp 2016-03-18 23:11:34.114340140 -0300
-+++ b/core/nacl/nacl.cpp 2016-03-18 23:12:24.397511209 -0300
-@@ -257,6 +257,10 @@
-
- }
-
-+void UpdateVibration(u32 port, u32 value) {
-+
-+}
-+
- void os_CreateWindow() {
-
- }
-diff -Nur a/core/windows/winmain.cpp b/core/windows/winmain.cpp
---- a/core/windows/winmain.cpp 2016-03-18 23:11:34.119340156 -0300
-+++ b/core/windows/winmain.cpp 2016-03-18 23:12:24.399511217 -0300
-@@ -5,6 +5,8 @@
- #define _WIN32_WINNT 0x0500
- #include <windows.h>
-
-+#include <Xinput.h>
-+#pragma comment(lib, "XInput9_1_0.lib")
-
- PCHAR*
- CommandLineToArgvA(
-@@ -105,7 +107,7 @@
- bool VramLockedWrite(u8* address);
- bool ngen_Rewrite(unat& addr,unat retadr,unat acc);
- bool BM_LockedWrite(u8* address);
--
-+void UpdateController(u32 port);
-
- LONG ExeptionHandler(EXCEPTION_POINTERS *ExceptionInfo)
- {
-@@ -235,6 +237,8 @@
- if (GetAsyncKeyState(VK_RIGHT))
- kcode[port]&=~key_CONT_DPAD_RIGHT;
-
-+ UpdateController(port);
-+
- if (GetAsyncKeyState(VK_F1))
- settings.pvr.ta_skip = 100;
-
-@@ -245,7 +249,66 @@
- DiscSwap();
- }
-
-+void UpdateController(u32 port)
-+ {
-+ XINPUT_STATE state;
-+
-+ if (XInputGetState(port, &state) == 0)
-+ {
-+ WORD xbutton = state.Gamepad.wButtons;
-+
-+ if (xbutton & XINPUT_GAMEPAD_A)
-+ kcode[port] &= ~key_CONT_A;
-+ if (xbutton & XINPUT_GAMEPAD_B)
-+ kcode[port] &= ~key_CONT_B;
-+ if (xbutton & XINPUT_GAMEPAD_Y)
-+ kcode[port] &= ~key_CONT_Y;
-+ if (xbutton & XINPUT_GAMEPAD_X)
-+ kcode[port] &= ~key_CONT_X;
-+
-+ if (xbutton & XINPUT_GAMEPAD_START)
-+ kcode[port] &= ~key_CONT_START;
-+
-+ if (xbutton & XINPUT_GAMEPAD_DPAD_UP)
-+ kcode[port] &= ~key_CONT_DPAD_UP;
-+ if (xbutton & XINPUT_GAMEPAD_DPAD_DOWN)
-+ kcode[port] &= ~key_CONT_DPAD_DOWN;
-+ if (xbutton & XINPUT_GAMEPAD_DPAD_LEFT)
-+ kcode[port] &= ~key_CONT_DPAD_LEFT;
-+ if (xbutton & XINPUT_GAMEPAD_DPAD_RIGHT)
-+ kcode[port] &= ~key_CONT_DPAD_RIGHT;
-+
-+ lt[port] |= state.Gamepad.bLeftTrigger;
-+ rt[port] |= state.Gamepad.bRightTrigger;
-+
-+ joyx[port] |= state.Gamepad.sThumbLX / 257;
-+ joyy[port] |= -state.Gamepad.sThumbLY / 257;
-+ }
-+ }
-
-+void UpdateVibration(u32 port, u32 value)
-+{
-+ const u8 freq_l = 0x16;
-+ //const u8 freq_h = 0x31;
-+
-+ u8 POW_POS = (value >> 8) & 0x3;
-+ u8 POW_NEG = (value >> 12) & 0x3;
-+ u8 FREQ = (value >> 16) & 0xFF;
-+
-+ XINPUT_VIBRATION vib;
-+
-+ double pow = (POW_POS + POW_NEG) / 7.0;
-+ double pow_l = pow * (0x3B - FREQ) / 17.0;
-+ double pow_r = pow * (FREQ - 0x07) / 15.0;
-+
-+ if (pow_l > 1.0) pow_l = 1.0;
-+ if (pow_r > 1.0) pow_r = 1.0;
-+
-+ vib.wLeftMotorSpeed = (u16)(65535 * pow_l);
-+ vib.wRightMotorSpeed = (u16)(65535 * pow_r);
-+
-+ XInputSetState(port, &vib);
-+}
-
- LRESULT CALLBACK WndProc2(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
-diff -Nur a/shell/android/jni/src/Android.cpp b/shell/android/jni/src/Android.cpp
---- a/shell/android/jni/src/Android.cpp 2016-03-18 23:11:34.145340240 -0300
-+++ b/shell/android/jni/src/Android.cpp 2016-03-18 23:12:24.399511217 -0300
-@@ -231,6 +231,11 @@
- // @@@ Nothing here yet
- }
-
-+void UpdateVibration(u32 port, u32 value)
-+{
-+
-+}
-+
- void *libPvr_GetRenderTarget()
- {
- // No X11 window in Android
-diff -Nur a/shell/apple/emulator-ios/emulator/ios_main.mm b/shell/apple/emulator-ios/emulator/ios_main.mm
---- a/shell/apple/emulator-ios/emulator/ios_main.mm 2016-03-18 23:11:34.192340393 -0300
-+++ b/shell/apple/emulator-ios/emulator/ios_main.mm 2016-03-18 23:12:24.400511220 -0300
-@@ -106,6 +106,10 @@
-
- }
-
-+void UpdateVibration(u32 port, u32 value) {
-+
-+}
-+
- void get_mic_data(u8* ) {
-
- }
-diff -Nur a/shell/apple/emulator-osx/emulator-osx/osx-main.mm b/shell/apple/emulator-osx/emulator-osx/osx-main.mm
---- a/shell/apple/emulator-osx/emulator-osx/osx-main.mm 2016-03-18 23:11:34.194340399 -0300
-+++ b/shell/apple/emulator-osx/emulator-osx/osx-main.mm 2016-03-18 23:12:24.401511224 -0300
-@@ -59,6 +59,10 @@
-
- }
-
-+void UpdateVibration(u32 port, u32 value) {
-+
-+}
-+
- void os_CreateWindow() {
-
- }