aboutsummaryrefslogtreecommitdiff
path: root/plugins/dfinput/main.c
diff options
context:
space:
mode:
authornotaz2011-08-09 01:16:59 +0300
committernotaz2011-08-13 00:56:33 +0300
commit4c08b9e7dd350a48fc3e0515913d6ccc8b15e5ae (patch)
tree22f29a06fda180d8269878b3cdb413044a5e351e /plugins/dfinput/main.c
parent19e57cbf170d1ce49f00097f3cc3a4ed96d77374 (diff)
downloadpcsx_rearmed-4c08b9e7dd350a48fc3e0515913d6ccc8b15e5ae.tar.gz
pcsx_rearmed-4c08b9e7dd350a48fc3e0515913d6ccc8b15e5ae.tar.bz2
pcsx_rearmed-4c08b9e7dd350a48fc3e0515913d6ccc8b15e5ae.zip
add guncon support
a bit basic but works
Diffstat (limited to 'plugins/dfinput/main.c')
-rw-r--r--plugins/dfinput/main.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/plugins/dfinput/main.c b/plugins/dfinput/main.c
new file mode 100644
index 0000000..73b2bda
--- /dev/null
+++ b/plugins/dfinput/main.c
@@ -0,0 +1,57 @@
+/*
+ * (C) GraÅžvydas "notaz" Ignotas, 2011
+ *
+ * This work is licensed under the terms of any of these licenses
+ * (at your option):
+ * - GNU GPL, version 2 or later.
+ * - GNU LGPL, version 2.1 or later.
+ * See the COPYING file in the top-level directory.
+ */
+
+#include "main.h"
+
+unsigned char CurPad, CurByte, CurCmd, CmdLen;
+
+/* since this is not a proper plugin, so we'll hook emu internals in a hackish way like this */
+extern void *PAD1_startPoll, *PAD1_poll;
+extern void *PAD2_startPoll, *PAD2_poll;
+extern unsigned char PAD1__startPoll(int pad);
+extern unsigned char PAD2__startPoll(int pad);
+extern unsigned char PAD1__poll(unsigned char value);
+extern unsigned char PAD2__poll(unsigned char value);
+
+static int old_controller_type1 = -1, old_controller_type2 = -1;
+
+#define select_pad(n) \
+ if (pad.controllerType != old_controller_type##n) \
+ { \
+ switch (pad.controllerType) \
+ { \
+ case PSE_PAD_TYPE_ANALOGPAD: \
+ PAD##n##_startPoll = PADstartPoll_pad; \
+ PAD##n##_poll = PADpoll_pad; \
+ pad_init(); \
+ break; \
+ case PSE_PAD_TYPE_GUNCON: \
+ PAD##n##_startPoll = PADstartPoll_guncon; \
+ PAD##n##_poll = PADpoll_guncon; \
+ guncon_init(); \
+ break; \
+ case PSE_PAD_TYPE_GUN: \
+ default: \
+ PAD##n##_startPoll = PAD##n##__startPoll; \
+ PAD##n##_poll = PAD##n##__poll; \
+ break; \
+ } \
+ }
+
+void dfinput_activate(void)
+{
+ PadDataS pad;
+
+ PAD1_readPort1(&pad);
+ select_pad(1);
+
+ PAD2_readPort2(&pad);
+ select_pad(2);
+}