summaryrefslogtreecommitdiff
path: root/pcr
diff options
context:
space:
mode:
authorcoadde [Márcio Alexandre Silva Delgado] <coadde@parabola.nu>2015-08-23 22:25:37 -0300
committercoadde [Márcio Alexandre Silva Delgado] <coadde@parabola.nu>2015-08-28 18:37:18 -0300
commite6535c873331a54a21435d8e9450b09a596a6874 (patch)
tree32ae5f05f8dcb9be8316db81251295b351753903 /pcr
parent2c37cc178227a3956f82e1b2b589824028c3d269 (diff)
downloadabslibre-e6535c873331a54a21435d8e9450b09a596a6874.tar.gz
abslibre-e6535c873331a54a21435d8e9450b09a596a6874.tar.bz2
abslibre-e6535c873331a54a21435d8e9450b09a596a6874.zip
pcr/reicast{,-multilib}-git
Diffstat (limited to 'pcr')
-rw-r--r--pcr/reicast-git/PKGBUILD27
-rw-r--r--pcr/reicast-git/enable_joystick_support_old.patch (renamed from pcr/reicast-git/enable_joystick_support.patch)0
-rw-r--r--pcr/reicast-git/enable_x11_keyboard_support.patch233
-rw-r--r--pcr/reicast-git/wait_if_two_frames_already_in_flight.patch47
-rw-r--r--pcr/reicast-git/wait_if_two_frames_already_in_flight_old.patch70
-rw-r--r--pcr/reicast-multilib-git/PKGBUILD20
-rw-r--r--pcr/reicast-multilib-git/enable_joystick_support_old.patch (renamed from pcr/reicast-multilib-git/enable_joystick_support.patch)0
-rw-r--r--pcr/reicast-multilib-git/enable_x11_keyboard_support.patch233
-rw-r--r--pcr/reicast-multilib-git/wait_if_two_frames_already_in_flight.patch47
-rw-r--r--pcr/reicast-multilib-git/wait_if_two_frames_already_in_flight_old.patch70
10 files changed, 658 insertions, 89 deletions
diff --git a/pcr/reicast-git/PKGBUILD b/pcr/reicast-git/PKGBUILD
index e10d00c34..ddd9099e1 100644
--- a/pcr/reicast-git/PKGBUILD
+++ b/pcr/reicast-git/PKGBUILD
@@ -3,7 +3,7 @@
# Maintainer: Márcio Silva <coadde@parabola.nu>
pkgname=reicast-git
-pkgver=r1322.4b94e2f
+pkgver=r1546.5fd66a1
pkgrel=1
pkgdesc="A multiplatform Sega Dreamcast emulator"
arch=('i686' 'x86_64')
@@ -12,15 +12,15 @@ license=('GPL2')
conflicts=('reicast')
provides=('reicast')
makedepends=('git')
-depends=('libgl' 'alsa-plugins')
+depends=('libgl' 'alsa-plugins' 'libpulse')
optdepends=('xboxdrv: Userspace gamepad driver for Xbox and Xbox360 gamepads'
'antimicro: Graphical program used to map keyboard keys and mouse controls to gamepad buttons')
source=(reicast::"git+https://github.com/reicast/reicast-emulator.git"
- 'enable_joystick_support.patch'
+ 'enable_x11_keyboard_support.patch'
'wait_if_two_frames_already_in_flight.patch')
sha256sums=('SKIP'
- '464946512ca4cffac104128a85dd174520caeaa0325afbf281b6cfdbc0120fc6'
- 'f4d3b4ad7703da09dc59cae839ca225e1a21b89d905ede3519bf3174b40903da')
+ '095961538c13208b39ebb0b9d6b6e30c1225f218dcc67239a9d938a23aec601e'
+ '8f7b392ac6fac2d62e078a397f6b7c29ac3a23877d5c1a4566a58710b3383aef')
pkgver() {
cd reicast
@@ -29,20 +29,21 @@ pkgver() {
prepare () {
cd reicast
- patch -Np1 -i "$srcdir"/enable_joystick_support.patch
+ patch -Np1 -i "$srcdir"/enable_x11_keyboard_support.patch
patch -Np1 -i "$srcdir"/wait_if_two_frames_already_in_flight.patch
- # Fix pointer size on 64 bit arch: http://github.com/reicast-emulator/pull/768
- sed -i 's|verify((int)rbi);|verify((size_t)rbi);|' core/hw/sh4/dyna/driver.cpp
# Add experimental shadow support: http://github.com/reicast-emulator/issues/94
sed -i 's|//DrawModVols|DrawModVols|' core/rend/gles/gldraw.cpp
+
+ # Fix Xbox Input Axis
+ sed -i 's|DC_AXIS_LT, 0, 0, DC_AXIS_RT|0, 0, DC_AXIS_RT, DC_AXIS_LT|' core/linux-dist/joystick.cpp
+
+ # Enable Pulseaudio
+ sed -i 's|#USE_PULSEAUDIO|USE_PULSEAUDIO|' shell/linux/Makefile
}
build () {
make -C reicast/shell/linux
- if [[ $CARCH == x86_64 ]]; then
- make -C reicast/shell/linCPP
- fi
}
package () {
@@ -50,9 +51,5 @@ package () {
install -Dm755 shell/linux/reicast.elf "$pkgdir"/usr/bin/reicast
install -Dm755 shell/linux/nosym-reicast.elf "$pkgdir"/usr/bin/reicast-nosym
- if [[ $CARCH == x86_64 ]]; then
- install -Dm755 shell/linCPP/reicast.elf "$pkgdir"/usr/bin/reicast-cpp
- install -Dm755 shell/linCPP/nosym-reicast.elf "$pkgdir"/usr/bin/reicast-nosym-cpp
- fi
install -Dm644 LICENSE "$pkgdir"/usr/share/licenses/$pkgname/LICENSE
}
diff --git a/pcr/reicast-git/enable_joystick_support.patch b/pcr/reicast-git/enable_joystick_support_old.patch
index 0fbb59ac7..0fbb59ac7 100644
--- a/pcr/reicast-git/enable_joystick_support.patch
+++ b/pcr/reicast-git/enable_joystick_support_old.patch
diff --git a/pcr/reicast-git/enable_x11_keyboard_support.patch b/pcr/reicast-git/enable_x11_keyboard_support.patch
new file mode 100644
index 000000000..1dfd41c72
--- /dev/null
+++ b/pcr/reicast-git/enable_x11_keyboard_support.patch
@@ -0,0 +1,233 @@
+diff -Nur a/core/linux-dist/main.cpp b/core/linux-dist/main.cpp
+--- a/core/linux-dist/main.cpp 2015-08-23 00:16:33.930598582 -0300
++++ b/core/linux-dist/main.cpp 2015-08-23 18:54:25.349048701 -0300
+@@ -157,6 +157,10 @@
+
+ void UpdateInputState(u32 port)
+ {
++ #if defined(SUPPORT_X11)
++ update_x11_input_state();
++ #endif
++
+ #if defined(TARGET_EMSCRIPTEN)
+ return;
+ #endif
+diff -Nur a/core/linux-dist/x11.cpp b/core/linux-dist/x11.cpp
+--- a/core/linux-dist/x11.cpp 2015-08-23 00:16:33.930598582 -0300
++++ b/core/linux-dist/x11.cpp 2015-08-23 18:50:06.875072583 -0300
+@@ -3,6 +3,7 @@
+ #include <X11/Xlib.h>
+ #include <X11/Xatom.h>
+ #include <X11/Xutil.h>
++#include <X11/XKBlib.h>
+
+ #if !defined(GLES)
+ #include <GL/gl.h>
+@@ -23,6 +24,18 @@
+ #endif
+ #define DEFAULT_WINDOW_HEIGHT 480
+
++#define DC_KEY_AXIS_UP (25)
++#define DC_KEY_AXIS_DOWN (39)
++#define DC_KEY_AXIS_LEFT (38)
++#define DC_KEY_AXIS_RIGHT (40)
++#define DC_KEY_AXIS_LT (79)
++#define DC_KEY_AXIS_RT (81)
++
++u8 axis_joyx = 0;
++u8 axis_joyy = 0;
++u8 axis_lt = 0;
++u8 axis_rt = 0;
++
+ map<int, int> x11_keymap;
+ int x11_dc_buttons = 0xFFFF;
+ int x11_keyboard_input = 0;
+@@ -55,8 +68,27 @@
+ XSendEvent((Display*)x11_disp, DefaultRootWindow((Display*)x11_disp), False, SubstructureNotifyMask, &xev);
+ }
+
++void update_x11_input_state()
++{
++ //static char key = 0;
++
++ //kcode[port]=0xFFFF;
++ joyx[0] = axis_joyx;
++ joyy[0] = axis_joyy;
++ lt[0] = axis_lt;
++ rt[0] = axis_rt;
++ return;
++
++ //HandleEvents(port);
++}
++
+ void input_x11_handle()
+ {
++ static bool dc_axis_up = false;
++ static bool dc_axis_down = false;
++ static bool dc_axis_left = false;
++ static bool dc_axis_right = false;
++
+ if (x11_win && x11_keyboard_input)
+ {
+ //Handle X11
+@@ -68,6 +100,90 @@
+ {
+ case KeyPress:
+ case KeyRelease:
++ if (e.xkey.keycode == DC_KEY_AXIS_UP)
++ {
++ if (e.type == KeyPress)
++ {
++ dc_axis_up = true;
++ }
++ else if (e.type == KeyRelease)
++ {
++ dc_axis_up = false;
++ }
++ else
++ {
++ }
++ }
++ if (e.xkey.keycode == DC_KEY_AXIS_DOWN)
++ {
++ if (e.type == KeyPress)
++ {
++ dc_axis_down = true;
++ }
++ else if (e.type == KeyRelease)
++ {
++ dc_axis_down = false;
++ }
++ else
++ {
++ }
++ }
++ if (e.xkey.keycode == DC_KEY_AXIS_LEFT)
++ {
++ if (e.type == KeyPress)
++ {
++ dc_axis_left = true;
++ }
++ else if (e.type == KeyRelease)
++ {
++ dc_axis_left = false;
++ }
++ else
++ {
++ }
++ }
++ if (e.xkey.keycode == DC_KEY_AXIS_RIGHT)
++ {
++ if (e.type == KeyPress)
++ {
++ dc_axis_right = true;
++ }
++ else if (e.type == KeyRelease)
++ {
++ dc_axis_right = false;
++ }
++ else
++ {
++ }
++ }
++ if (e.xkey.keycode == DC_KEY_AXIS_LT)
++ {
++ if (e.type == KeyPress)
++ {
++ axis_lt = 255;
++ }
++ else if (e.type == KeyRelease)
++ {
++ axis_lt = 0;
++ }
++ else
++ {
++ }
++ }
++ if (e.xkey.keycode == DC_KEY_AXIS_RT)
++ {
++ if (e.type == KeyPress)
++ {
++ axis_rt = 255;
++ }
++ else if (e.type == KeyRelease)
++ {
++ axis_rt = 0;
++ }
++ else
++ {
++ }
++ }
+ if (e.type == KeyRelease && e.xkey.keycode == 95) // F11 button
+ {
+ x11_fullscreen = !x11_fullscreen;
+@@ -89,26 +205,45 @@
+ break;
+ }
+ }
++ if ((dc_axis_up == true) && (dc_axis_down == false))
++ {
++ axis_joyy = -127;
++ }
++ else if ((dc_axis_up == false) && (dc_axis_down == true))
++ {
++ axis_joyy = 127;
++ }
++ else
++ {
++ axis_joyy = 0;
++ }
++ if ((dc_axis_left == true) && (dc_axis_right == false))
++ {
++ axis_joyx = -127;
++ }
++ else if ((dc_axis_left == false) && (dc_axis_right == true))
++ {
++ axis_joyx = 127;
++ }
++ else
++ {
++ axis_joyx = 0;
++ }
+ }
+ }
+
+ void input_x11_init()
+ {
+- x11_keymap[113] = DC_DPAD_LEFT;
+- x11_keymap[114] = DC_DPAD_RIGHT;
++ x11_keymap[44] = DC_DPAD_LEFT;
++ x11_keymap[46] = DC_DPAD_RIGHT;
+
+- x11_keymap[111] = DC_DPAD_UP;
+- x11_keymap[116] = DC_DPAD_DOWN;
++ x11_keymap[31] = DC_DPAD_UP;
++ x11_keymap[45] = DC_DPAD_DOWN;
+
+- x11_keymap[53] = DC_BTN_X;
+- x11_keymap[54] = DC_BTN_B;
+- x11_keymap[55] = DC_BTN_A;
+-
+- /*
+- //TODO: Fix sliders
+- x11_keymap[38] = DPad_Down;
+- x11_keymap[39] = DPad_Down;
+- */
++ x11_keymap[80] = DC_BTN_Y;
++ x11_keymap[83] = DC_BTN_X;
++ x11_keymap[85] = DC_BTN_B;
++ x11_keymap[84] = DC_BTN_A;
+
+ x11_keymap[36] = DC_BTN_START;
+
+diff -Nur a/core/linux-dist/x11.h b/core/linux-dist/x11.h
+--- a/core/linux-dist/x11.h 2015-08-23 00:16:33.930598582 -0300
++++ b/core/linux-dist/x11.h 2015-08-23 18:58:04.534722602 -0300
+@@ -1,6 +1,7 @@
+ #pragma once
+
+ extern void* x11_glc;
++extern void update_x11_input_state();
+ extern void input_x11_init();
+ extern void input_x11_handle();
+ extern void x11_window_create();
diff --git a/pcr/reicast-git/wait_if_two_frames_already_in_flight.patch b/pcr/reicast-git/wait_if_two_frames_already_in_flight.patch
index ff297365c..56e774138 100644
--- a/pcr/reicast-git/wait_if_two_frames_already_in_flight.patch
+++ b/pcr/reicast-git/wait_if_two_frames_already_in_flight.patch
@@ -1,15 +1,15 @@
-diff -Nur reicast-emulator.orig/core/hw/pvr/Renderer_if.cpp reicast-emulator/core/hw/pvr/Renderer_if.cpp
---- reicast-emulator.orig/core/hw/pvr/Renderer_if.cpp 2015-06-20 02:04:02.180069939 -0300
-+++ reicast-emulator/core/hw/pvr/Renderer_if.cpp 2015-06-20 02:10:17.831402600 -0300
-@@ -184,6 +184,7 @@
+diff -Nur a/core/hw/pvr/Renderer_if.cpp b/core/hw/pvr/Renderer_if.cpp
+--- a/core/hw/pvr/Renderer_if.cpp 2015-08-23 00:16:33.916598479 -0300
++++ b/core/hw/pvr/Renderer_if.cpp 2015-08-23 02:25:28.932602664 -0300
+@@ -187,6 +187,7 @@
bool rend_frame(TA_context* ctx, bool draw_osd) {
bool proc = renderer->Process(ctx);
+ FinishRender(_pvrrc);
+ #if !defined(TARGET_NO_THREADS)
re.Set();
-
- bool do_swp = proc && renderer->Render();
-@@ -207,7 +208,7 @@
+ #endif
+@@ -213,7 +214,7 @@
bool do_swp = rend_frame(_pvrrc, true);
//clear up & free data ..
@@ -18,15 +18,15 @@ diff -Nur reicast-emulator.orig/core/hw/pvr/Renderer_if.cpp reicast-emulator/cor
_pvrrc=0;
return do_swp;
-@@ -260,6 +261,7 @@
-
+@@ -267,6 +268,7 @@
+ #endif
bool pend_rend = false;
+extern TA_context* rqueue;
void rend_resize(int width, int height) {
renderer->Resize(width, height);
-@@ -268,6 +270,10 @@
+@@ -275,6 +277,10 @@
void rend_start_render()
{
@@ -37,29 +37,10 @@ diff -Nur reicast-emulator.orig/core/hw/pvr/Renderer_if.cpp reicast-emulator/cor
pend_rend = false;
bool is_rtt=(FB_W_SOF1& 0x1000000)!=0;
TA_context* ctx = tactx_Pop(CORE_CURRENT_CTX);
-@@ -314,7 +320,6 @@
- }
- }
-
--
- void rend_end_render()
- {
- #if 1 //also disabled the printf, it takes quite some time ...
-@@ -325,8 +330,9 @@
- #endif
- #endif
-
-- if (pend_rend)
-+ if (pend_rend) {
- re.Wait();
-+ }
- }
-
- /*
-diff -Nur reicast-emulator.orig/core/hw/pvr/ta_ctx.cpp reicast-emulator/core/hw/pvr/ta_ctx.cpp
---- reicast-emulator.orig/core/hw/pvr/ta_ctx.cpp 2015-06-20 02:04:02.186736275 -0300
-+++ reicast-emulator/core/hw/pvr/ta_ctx.cpp 2015-06-20 02:07:44.202370584 -0300
-@@ -119,8 +119,6 @@
+diff -Nur a/core/hw/pvr/ta_ctx.cpp b/core/hw/pvr/ta_ctx.cpp
+--- a/core/hw/pvr/ta_ctx.cpp 2015-08-23 00:16:33.917598487 -0300
++++ b/core/hw/pvr/ta_ctx.cpp 2015-08-23 02:26:47.189293717 -0300
+@@ -127,8 +127,6 @@
mtx_rqueue.Lock();
rqueue = 0;
mtx_rqueue.Unlock();
diff --git a/pcr/reicast-git/wait_if_two_frames_already_in_flight_old.patch b/pcr/reicast-git/wait_if_two_frames_already_in_flight_old.patch
new file mode 100644
index 000000000..ff297365c
--- /dev/null
+++ b/pcr/reicast-git/wait_if_two_frames_already_in_flight_old.patch
@@ -0,0 +1,70 @@
+diff -Nur reicast-emulator.orig/core/hw/pvr/Renderer_if.cpp reicast-emulator/core/hw/pvr/Renderer_if.cpp
+--- reicast-emulator.orig/core/hw/pvr/Renderer_if.cpp 2015-06-20 02:04:02.180069939 -0300
++++ reicast-emulator/core/hw/pvr/Renderer_if.cpp 2015-06-20 02:10:17.831402600 -0300
+@@ -184,6 +184,7 @@
+
+ bool rend_frame(TA_context* ctx, bool draw_osd) {
+ bool proc = renderer->Process(ctx);
++ FinishRender(_pvrrc);
+ re.Set();
+
+ bool do_swp = proc && renderer->Render();
+@@ -207,7 +208,7 @@
+ bool do_swp = rend_frame(_pvrrc, true);
+
+ //clear up & free data ..
+- FinishRender(_pvrrc);
++ tactx_Recycle(_pvrrc);
+ _pvrrc=0;
+
+ return do_swp;
+@@ -260,6 +261,7 @@
+
+
+ bool pend_rend = false;
++extern TA_context* rqueue;
+
+ void rend_resize(int width, int height) {
+ renderer->Resize(width, height);
+@@ -268,6 +270,10 @@
+
+ void rend_start_render()
+ {
++ if (rqueue) {
++ rend_end_render();
++ }
++
+ pend_rend = false;
+ bool is_rtt=(FB_W_SOF1& 0x1000000)!=0;
+ TA_context* ctx = tactx_Pop(CORE_CURRENT_CTX);
+@@ -314,7 +320,6 @@
+ }
+ }
+
+-
+ void rend_end_render()
+ {
+ #if 1 //also disabled the printf, it takes quite some time ...
+@@ -325,8 +330,9 @@
+ #endif
+ #endif
+
+- if (pend_rend)
++ if (pend_rend) {
+ re.Wait();
++ }
+ }
+
+ /*
+diff -Nur reicast-emulator.orig/core/hw/pvr/ta_ctx.cpp reicast-emulator/core/hw/pvr/ta_ctx.cpp
+--- reicast-emulator.orig/core/hw/pvr/ta_ctx.cpp 2015-06-20 02:04:02.186736275 -0300
++++ reicast-emulator/core/hw/pvr/ta_ctx.cpp 2015-06-20 02:07:44.202370584 -0300
+@@ -119,8 +119,6 @@
+ mtx_rqueue.Lock();
+ rqueue = 0;
+ mtx_rqueue.Unlock();
+-
+- tactx_Recycle(ctx);
+ }
+
+ cMutex mtx_pool;
diff --git a/pcr/reicast-multilib-git/PKGBUILD b/pcr/reicast-multilib-git/PKGBUILD
index c675fa002..647a42e21 100644
--- a/pcr/reicast-multilib-git/PKGBUILD
+++ b/pcr/reicast-multilib-git/PKGBUILD
@@ -3,7 +3,7 @@
# Maintainer: Márcio Silva <coadde@parabola.nu>
pkgname=reicast-multilib-git
-pkgver=r1322.4b94e2f
+pkgver=r1546.5fd66a1
pkgrel=1
pkgdesc="A multiplatform Sega Dreamcast emulator"
arch=('x86_64')
@@ -13,15 +13,15 @@ conflicts=('reicast')
provides=('reicast')
makedepends=('git')
makedepends_x86_64=('gcc-multilib')
-depends_x86_64=('lib32-libgl' 'lib32-alsa-plugins')
+depends_x86_64=('lib32-libgl' 'lib32-alsa-plugins' 'lib32-libpulse')
optdepends=('xboxdrv: Userspace gamepad driver for Xbox and Xbox360 gamepads'
'antimicro: Graphical program used to map keyboard keys and mouse controls to gamepad buttons')
source=(reicast::"git+https://github.com/reicast/reicast-emulator.git"
- 'enable_joystick_support.patch'
+ 'enable_x11_keyboard_support.patch'
'wait_if_two_frames_already_in_flight.patch')
sha256sums=('SKIP'
- '464946512ca4cffac104128a85dd174520caeaa0325afbf281b6cfdbc0120fc6'
- 'f4d3b4ad7703da09dc59cae839ca225e1a21b89d905ede3519bf3174b40903da')
+ '095961538c13208b39ebb0b9d6b6e30c1225f218dcc67239a9d938a23aec601e'
+ '8f7b392ac6fac2d62e078a397f6b7c29ac3a23877d5c1a4566a58710b3383aef')
pkgver() {
cd reicast
@@ -30,13 +30,17 @@ pkgver() {
prepare () {
cd reicast
- patch -Np1 -i "$srcdir"/enable_joystick_support.patch
+ patch -Np1 -i "$srcdir"/enable_x11_keyboard_support.patch
patch -Np1 -i "$srcdir"/wait_if_two_frames_already_in_flight.patch
- # Fix pointer size on 64 bit arch: http://github.com/reicast-emulator/pull/768
- sed -i 's|verify((int)rbi);|verify((size_t)rbi);|' core/hw/sh4/dyna/driver.cpp
# Add experimental shadow support: http://github.com/reicast-emulator/issues/94
sed -i 's|//DrawModVols|DrawModVols|' core/rend/gles/gldraw.cpp
+
+ # Fix Xbox Input Axis
+ sed -i 's|DC_AXIS_LT, 0, 0, DC_AXIS_RT|0, 0, DC_AXIS_RT, DC_AXIS_LT|' core/linux-dist/joystick.cpp
+
+ # Enable Pulseaudio
+ sed -i 's|#USE_PULSEAUDIO|USE_PULSEAUDIO|' shell/linux/Makefile
}
build () {
diff --git a/pcr/reicast-multilib-git/enable_joystick_support.patch b/pcr/reicast-multilib-git/enable_joystick_support_old.patch
index 0fbb59ac7..0fbb59ac7 100644
--- a/pcr/reicast-multilib-git/enable_joystick_support.patch
+++ b/pcr/reicast-multilib-git/enable_joystick_support_old.patch
diff --git a/pcr/reicast-multilib-git/enable_x11_keyboard_support.patch b/pcr/reicast-multilib-git/enable_x11_keyboard_support.patch
new file mode 100644
index 000000000..1dfd41c72
--- /dev/null
+++ b/pcr/reicast-multilib-git/enable_x11_keyboard_support.patch
@@ -0,0 +1,233 @@
+diff -Nur a/core/linux-dist/main.cpp b/core/linux-dist/main.cpp
+--- a/core/linux-dist/main.cpp 2015-08-23 00:16:33.930598582 -0300
++++ b/core/linux-dist/main.cpp 2015-08-23 18:54:25.349048701 -0300
+@@ -157,6 +157,10 @@
+
+ void UpdateInputState(u32 port)
+ {
++ #if defined(SUPPORT_X11)
++ update_x11_input_state();
++ #endif
++
+ #if defined(TARGET_EMSCRIPTEN)
+ return;
+ #endif
+diff -Nur a/core/linux-dist/x11.cpp b/core/linux-dist/x11.cpp
+--- a/core/linux-dist/x11.cpp 2015-08-23 00:16:33.930598582 -0300
++++ b/core/linux-dist/x11.cpp 2015-08-23 18:50:06.875072583 -0300
+@@ -3,6 +3,7 @@
+ #include <X11/Xlib.h>
+ #include <X11/Xatom.h>
+ #include <X11/Xutil.h>
++#include <X11/XKBlib.h>
+
+ #if !defined(GLES)
+ #include <GL/gl.h>
+@@ -23,6 +24,18 @@
+ #endif
+ #define DEFAULT_WINDOW_HEIGHT 480
+
++#define DC_KEY_AXIS_UP (25)
++#define DC_KEY_AXIS_DOWN (39)
++#define DC_KEY_AXIS_LEFT (38)
++#define DC_KEY_AXIS_RIGHT (40)
++#define DC_KEY_AXIS_LT (79)
++#define DC_KEY_AXIS_RT (81)
++
++u8 axis_joyx = 0;
++u8 axis_joyy = 0;
++u8 axis_lt = 0;
++u8 axis_rt = 0;
++
+ map<int, int> x11_keymap;
+ int x11_dc_buttons = 0xFFFF;
+ int x11_keyboard_input = 0;
+@@ -55,8 +68,27 @@
+ XSendEvent((Display*)x11_disp, DefaultRootWindow((Display*)x11_disp), False, SubstructureNotifyMask, &xev);
+ }
+
++void update_x11_input_state()
++{
++ //static char key = 0;
++
++ //kcode[port]=0xFFFF;
++ joyx[0] = axis_joyx;
++ joyy[0] = axis_joyy;
++ lt[0] = axis_lt;
++ rt[0] = axis_rt;
++ return;
++
++ //HandleEvents(port);
++}
++
+ void input_x11_handle()
+ {
++ static bool dc_axis_up = false;
++ static bool dc_axis_down = false;
++ static bool dc_axis_left = false;
++ static bool dc_axis_right = false;
++
+ if (x11_win && x11_keyboard_input)
+ {
+ //Handle X11
+@@ -68,6 +100,90 @@
+ {
+ case KeyPress:
+ case KeyRelease:
++ if (e.xkey.keycode == DC_KEY_AXIS_UP)
++ {
++ if (e.type == KeyPress)
++ {
++ dc_axis_up = true;
++ }
++ else if (e.type == KeyRelease)
++ {
++ dc_axis_up = false;
++ }
++ else
++ {
++ }
++ }
++ if (e.xkey.keycode == DC_KEY_AXIS_DOWN)
++ {
++ if (e.type == KeyPress)
++ {
++ dc_axis_down = true;
++ }
++ else if (e.type == KeyRelease)
++ {
++ dc_axis_down = false;
++ }
++ else
++ {
++ }
++ }
++ if (e.xkey.keycode == DC_KEY_AXIS_LEFT)
++ {
++ if (e.type == KeyPress)
++ {
++ dc_axis_left = true;
++ }
++ else if (e.type == KeyRelease)
++ {
++ dc_axis_left = false;
++ }
++ else
++ {
++ }
++ }
++ if (e.xkey.keycode == DC_KEY_AXIS_RIGHT)
++ {
++ if (e.type == KeyPress)
++ {
++ dc_axis_right = true;
++ }
++ else if (e.type == KeyRelease)
++ {
++ dc_axis_right = false;
++ }
++ else
++ {
++ }
++ }
++ if (e.xkey.keycode == DC_KEY_AXIS_LT)
++ {
++ if (e.type == KeyPress)
++ {
++ axis_lt = 255;
++ }
++ else if (e.type == KeyRelease)
++ {
++ axis_lt = 0;
++ }
++ else
++ {
++ }
++ }
++ if (e.xkey.keycode == DC_KEY_AXIS_RT)
++ {
++ if (e.type == KeyPress)
++ {
++ axis_rt = 255;
++ }
++ else if (e.type == KeyRelease)
++ {
++ axis_rt = 0;
++ }
++ else
++ {
++ }
++ }
+ if (e.type == KeyRelease && e.xkey.keycode == 95) // F11 button
+ {
+ x11_fullscreen = !x11_fullscreen;
+@@ -89,26 +205,45 @@
+ break;
+ }
+ }
++ if ((dc_axis_up == true) && (dc_axis_down == false))
++ {
++ axis_joyy = -127;
++ }
++ else if ((dc_axis_up == false) && (dc_axis_down == true))
++ {
++ axis_joyy = 127;
++ }
++ else
++ {
++ axis_joyy = 0;
++ }
++ if ((dc_axis_left == true) && (dc_axis_right == false))
++ {
++ axis_joyx = -127;
++ }
++ else if ((dc_axis_left == false) && (dc_axis_right == true))
++ {
++ axis_joyx = 127;
++ }
++ else
++ {
++ axis_joyx = 0;
++ }
+ }
+ }
+
+ void input_x11_init()
+ {
+- x11_keymap[113] = DC_DPAD_LEFT;
+- x11_keymap[114] = DC_DPAD_RIGHT;
++ x11_keymap[44] = DC_DPAD_LEFT;
++ x11_keymap[46] = DC_DPAD_RIGHT;
+
+- x11_keymap[111] = DC_DPAD_UP;
+- x11_keymap[116] = DC_DPAD_DOWN;
++ x11_keymap[31] = DC_DPAD_UP;
++ x11_keymap[45] = DC_DPAD_DOWN;
+
+- x11_keymap[53] = DC_BTN_X;
+- x11_keymap[54] = DC_BTN_B;
+- x11_keymap[55] = DC_BTN_A;
+-
+- /*
+- //TODO: Fix sliders
+- x11_keymap[38] = DPad_Down;
+- x11_keymap[39] = DPad_Down;
+- */
++ x11_keymap[80] = DC_BTN_Y;
++ x11_keymap[83] = DC_BTN_X;
++ x11_keymap[85] = DC_BTN_B;
++ x11_keymap[84] = DC_BTN_A;
+
+ x11_keymap[36] = DC_BTN_START;
+
+diff -Nur a/core/linux-dist/x11.h b/core/linux-dist/x11.h
+--- a/core/linux-dist/x11.h 2015-08-23 00:16:33.930598582 -0300
++++ b/core/linux-dist/x11.h 2015-08-23 18:58:04.534722602 -0300
+@@ -1,6 +1,7 @@
+ #pragma once
+
+ extern void* x11_glc;
++extern void update_x11_input_state();
+ extern void input_x11_init();
+ extern void input_x11_handle();
+ extern void x11_window_create();
diff --git a/pcr/reicast-multilib-git/wait_if_two_frames_already_in_flight.patch b/pcr/reicast-multilib-git/wait_if_two_frames_already_in_flight.patch
index ff297365c..56e774138 100644
--- a/pcr/reicast-multilib-git/wait_if_two_frames_already_in_flight.patch
+++ b/pcr/reicast-multilib-git/wait_if_two_frames_already_in_flight.patch
@@ -1,15 +1,15 @@
-diff -Nur reicast-emulator.orig/core/hw/pvr/Renderer_if.cpp reicast-emulator/core/hw/pvr/Renderer_if.cpp
---- reicast-emulator.orig/core/hw/pvr/Renderer_if.cpp 2015-06-20 02:04:02.180069939 -0300
-+++ reicast-emulator/core/hw/pvr/Renderer_if.cpp 2015-06-20 02:10:17.831402600 -0300
-@@ -184,6 +184,7 @@
+diff -Nur a/core/hw/pvr/Renderer_if.cpp b/core/hw/pvr/Renderer_if.cpp
+--- a/core/hw/pvr/Renderer_if.cpp 2015-08-23 00:16:33.916598479 -0300
++++ b/core/hw/pvr/Renderer_if.cpp 2015-08-23 02:25:28.932602664 -0300
+@@ -187,6 +187,7 @@
bool rend_frame(TA_context* ctx, bool draw_osd) {
bool proc = renderer->Process(ctx);
+ FinishRender(_pvrrc);
+ #if !defined(TARGET_NO_THREADS)
re.Set();
-
- bool do_swp = proc && renderer->Render();
-@@ -207,7 +208,7 @@
+ #endif
+@@ -213,7 +214,7 @@
bool do_swp = rend_frame(_pvrrc, true);
//clear up & free data ..
@@ -18,15 +18,15 @@ diff -Nur reicast-emulator.orig/core/hw/pvr/Renderer_if.cpp reicast-emulator/cor
_pvrrc=0;
return do_swp;
-@@ -260,6 +261,7 @@
-
+@@ -267,6 +268,7 @@
+ #endif
bool pend_rend = false;
+extern TA_context* rqueue;
void rend_resize(int width, int height) {
renderer->Resize(width, height);
-@@ -268,6 +270,10 @@
+@@ -275,6 +277,10 @@
void rend_start_render()
{
@@ -37,29 +37,10 @@ diff -Nur reicast-emulator.orig/core/hw/pvr/Renderer_if.cpp reicast-emulator/cor
pend_rend = false;
bool is_rtt=(FB_W_SOF1& 0x1000000)!=0;
TA_context* ctx = tactx_Pop(CORE_CURRENT_CTX);
-@@ -314,7 +320,6 @@
- }
- }
-
--
- void rend_end_render()
- {
- #if 1 //also disabled the printf, it takes quite some time ...
-@@ -325,8 +330,9 @@
- #endif
- #endif
-
-- if (pend_rend)
-+ if (pend_rend) {
- re.Wait();
-+ }
- }
-
- /*
-diff -Nur reicast-emulator.orig/core/hw/pvr/ta_ctx.cpp reicast-emulator/core/hw/pvr/ta_ctx.cpp
---- reicast-emulator.orig/core/hw/pvr/ta_ctx.cpp 2015-06-20 02:04:02.186736275 -0300
-+++ reicast-emulator/core/hw/pvr/ta_ctx.cpp 2015-06-20 02:07:44.202370584 -0300
-@@ -119,8 +119,6 @@
+diff -Nur a/core/hw/pvr/ta_ctx.cpp b/core/hw/pvr/ta_ctx.cpp
+--- a/core/hw/pvr/ta_ctx.cpp 2015-08-23 00:16:33.917598487 -0300
++++ b/core/hw/pvr/ta_ctx.cpp 2015-08-23 02:26:47.189293717 -0300
+@@ -127,8 +127,6 @@
mtx_rqueue.Lock();
rqueue = 0;
mtx_rqueue.Unlock();
diff --git a/pcr/reicast-multilib-git/wait_if_two_frames_already_in_flight_old.patch b/pcr/reicast-multilib-git/wait_if_two_frames_already_in_flight_old.patch
new file mode 100644
index 000000000..ff297365c
--- /dev/null
+++ b/pcr/reicast-multilib-git/wait_if_two_frames_already_in_flight_old.patch
@@ -0,0 +1,70 @@
+diff -Nur reicast-emulator.orig/core/hw/pvr/Renderer_if.cpp reicast-emulator/core/hw/pvr/Renderer_if.cpp
+--- reicast-emulator.orig/core/hw/pvr/Renderer_if.cpp 2015-06-20 02:04:02.180069939 -0300
++++ reicast-emulator/core/hw/pvr/Renderer_if.cpp 2015-06-20 02:10:17.831402600 -0300
+@@ -184,6 +184,7 @@
+
+ bool rend_frame(TA_context* ctx, bool draw_osd) {
+ bool proc = renderer->Process(ctx);
++ FinishRender(_pvrrc);
+ re.Set();
+
+ bool do_swp = proc && renderer->Render();
+@@ -207,7 +208,7 @@
+ bool do_swp = rend_frame(_pvrrc, true);
+
+ //clear up & free data ..
+- FinishRender(_pvrrc);
++ tactx_Recycle(_pvrrc);
+ _pvrrc=0;
+
+ return do_swp;
+@@ -260,6 +261,7 @@
+
+
+ bool pend_rend = false;
++extern TA_context* rqueue;
+
+ void rend_resize(int width, int height) {
+ renderer->Resize(width, height);
+@@ -268,6 +270,10 @@
+
+ void rend_start_render()
+ {
++ if (rqueue) {
++ rend_end_render();
++ }
++
+ pend_rend = false;
+ bool is_rtt=(FB_W_SOF1& 0x1000000)!=0;
+ TA_context* ctx = tactx_Pop(CORE_CURRENT_CTX);
+@@ -314,7 +320,6 @@
+ }
+ }
+
+-
+ void rend_end_render()
+ {
+ #if 1 //also disabled the printf, it takes quite some time ...
+@@ -325,8 +330,9 @@
+ #endif
+ #endif
+
+- if (pend_rend)
++ if (pend_rend) {
+ re.Wait();
++ }
+ }
+
+ /*
+diff -Nur reicast-emulator.orig/core/hw/pvr/ta_ctx.cpp reicast-emulator/core/hw/pvr/ta_ctx.cpp
+--- reicast-emulator.orig/core/hw/pvr/ta_ctx.cpp 2015-06-20 02:04:02.186736275 -0300
++++ reicast-emulator/core/hw/pvr/ta_ctx.cpp 2015-06-20 02:07:44.202370584 -0300
+@@ -119,8 +119,6 @@
+ mtx_rqueue.Lock();
+ rqueue = 0;
+ mtx_rqueue.Unlock();
+-
+- tactx_Recycle(ctx);
+ }
+
+ cMutex mtx_pool;