summaryrefslogtreecommitdiff
path: root/games-emulation/gngb/files/gngb-20060309-joystick.patch
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2018-07-14 21:03:06 +0100
committerV3n3RiX <venerix@redcorelinux.org>2018-07-14 21:03:06 +0100
commit8376ef56580626e9c0f796d5b85b53a0a1c7d5f5 (patch)
tree7681bbd4e8b05407772df40a4bf04cbbc8afc3fa /games-emulation/gngb/files/gngb-20060309-joystick.patch
parent30a9caf154332f12ca60756e1b75d2f0e3e1822d (diff)
gentoo resync : 14.07.2018
Diffstat (limited to 'games-emulation/gngb/files/gngb-20060309-joystick.patch')
-rw-r--r--games-emulation/gngb/files/gngb-20060309-joystick.patch56
1 files changed, 56 insertions, 0 deletions
diff --git a/games-emulation/gngb/files/gngb-20060309-joystick.patch b/games-emulation/gngb/files/gngb-20060309-joystick.patch
new file mode 100644
index 000000000000..ec5003a52c61
--- /dev/null
+++ b/games-emulation/gngb/files/gngb-20060309-joystick.patch
@@ -0,0 +1,56 @@
+From: Markus Koschany <apo@debian.org>
+Date: Wed, 16 Aug 2017 23:25:30 +0200
+Subject: joystick axis
+
+Bug-Debian: https://bugs.debian.org/592777
+Forwarded: http://m.peponas.free.fr/gngb/news.html
+Origin: http://m.peponas.free.fr/gngb/download/memory.c.diff
+---
+ src/memory.c | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+diff --git a/src/memory.c b/src/memory.c
+index fd06738..9eaef1f 100644
+--- a/src/memory.c
++++ b/src/memory.c
+@@ -67,7 +67,11 @@ Uint8 ram_mask;
+ MEM_READ_ENTRY mem_read_tab[0x10];
+ MEM_WRITE_ENTRY mem_write_tab[0x10];
+
++/* doesn't work for negative joy_?_min */
++/*
+ Sint16 joy_x_min=0;joy_x_max=0;joy_y_min=0;joy_y_max=0;
++*/
++Sint16 joy_x_min=-32767;joy_x_max=32767;joy_y_min=-32767;joy_y_max=32767;
+
+ void (*select_rom_page)(Uint16 adr,Uint8 v);
+ void (*select_ram_page)(Uint16 adr,Uint8 v);
+@@ -755,15 +759,28 @@ extern __inline__ void update_gb_pad(void) {
+ Sint16 joy_x_pos=joy_axis[jmap[PAD_LEFT]];
+ Sint16 joy_y_pos=joy_axis[jmap[PAD_UP]];
+
++ /* unnecessary if joy_?_min and joy_?_max are minimum and maximum
++ * values of Sint16
+ if (joy_x_pos>joy_x_max) joy_x_max=joy_x_pos;
+ if (joy_x_pos<joy_x_min) joy_x_min=joy_x_pos;
+ if (joy_y_pos>joy_y_max) joy_y_max=joy_y_pos;
+ if (joy_y_pos<joy_y_min) joy_y_min=joy_y_pos;
++ */
+
++ /* this doesn't work when joy_x_min or joy_y_min < 0 (mid should be ~0),
++ * because ((+max) - (-min)) / 2 = ((+max) + (+min)) / 2
+ Sint16 joy_x_mid=(joy_x_max-joy_x_min) / 2;
+ Sint16 joy_y_mid=(joy_y_max-joy_y_min) / 2;
++ */
++ Sint16 joy_x_mid=(joy_x_max+joy_x_min) >> 1;
++ Sint16 joy_y_mid=(joy_y_max+joy_y_min) >> 1;
++ /* this doesn't work as joy_x_mid or joy_y_mid approaches 0
+ Sint16 joy_x_qua=joy_x_mid / 2;
+ Sint16 joy_y_qua=joy_y_mid / 2;
++ */
++ /* (difference) / 100 = 1% of possible values */
++ Sint16 joy_x_qua=(joy_x_max - joy_x_min) / 100;
++ Sint16 joy_y_qua=(joy_y_max - joy_y_min) / 100;
+
+ if ((joy_x_pos<(joy_x_mid-joy_x_qua)) || (key[kmap[PAD_LEFT]])) gb_pad|=0x20;
+ if ((joy_x_pos>(joy_x_mid+joy_x_qua)) || (key[kmap[PAD_RIGHT]])) gb_pad|=0x10;