X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fdfinput%2Fguncon.c;fp=plugins%2Fdfinput%2Fguncon.c;h=b4f103cee39955acb2ac5fdd6eef70b6e0ef4a6a;hp=0000000000000000000000000000000000000000;hb=4c08b9e7dd350a48fc3e0515913d6ccc8b15e5ae;hpb=19e57cbf170d1ce49f00097f3cc3a4ed96d77374 diff --git a/plugins/dfinput/guncon.c b/plugins/dfinput/guncon.c new file mode 100644 index 00000000..b4f103ce --- /dev/null +++ b/plugins/dfinput/guncon.c @@ -0,0 +1,68 @@ +/* + * (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 +#include "main.h" + +static unsigned char buf[8]; + +unsigned char PADpoll_guncon(unsigned char value) +{ + if (CurByte == 0) { + CurCmd = value; + CurByte++; + return 0x63; // regardless of cmd + } + + if (CurCmd != 0x42 || CurByte >= 8) + return 0xff; // verified + + return buf[CurByte++]; +} + +unsigned char PADstartPoll_guncon(int pad) +{ + int x, xn = 0, y = 0, in = 0, xres = 256; + CurByte = 0; + + buf[2] = buf[3] = 0xff; + pl_update_gun(&xn, &xres, &y, &in); + + // while y = const + line counter, what is x? + // for 256 mode, hw dumped offsets x, y: 0x5a, 0x20 + //x = 0x5a + (356 * xn >> 10); + x = 0x5a - (xres - 256) / 3 + (((xres - 256) / 3 + 356) * xn >> 10); + y = 0x20 + y; + + if (in & GUNIN_TRIGGER) + buf[3] &= ~0x20; + if (in & GUNIN_BTNA) + buf[2] &= ~0x08; + if (in & GUNIN_BTNB) + buf[3] &= ~0x40; + if (in & GUNIN_TRIGGER2) { + buf[3] &= ~0x20; + x = 1; + y = 10; + } + buf[4] = x; + buf[5] = x >> 8; + buf[6] = y; + buf[7] = y >> 8; + + return 0xff; +} + +void guncon_init(void) +{ + memset(buf, 0xff, sizeof(buf)); + buf[1] = 0x5a; +} +