diff options
author | notaz | 2011-08-09 01:16:59 +0300 |
---|---|---|
committer | notaz | 2011-08-13 00:56:33 +0300 |
commit | 4c08b9e7dd350a48fc3e0515913d6ccc8b15e5ae (patch) | |
tree | 22f29a06fda180d8269878b3cdb413044a5e351e /plugins/dfinput/main.c | |
parent | 19e57cbf170d1ce49f00097f3cc3a4ed96d77374 (diff) | |
download | pcsx_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.c | 57 |
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); +} |