diff options
author | kristerw <kristerw> | 2004-08-14 00:25:13 +0000 |
---|---|---|
committer | kristerw <kristerw> | 2004-08-14 00:25:13 +0000 |
commit | 08b9b9bd99cc9429c98e93100025db5367171e9b (patch) | |
tree | cf74863f1e98f597197356c2ce275850c351be7b /emulators | |
parent | 14eabfc12ed592aafc2fcb33ed1421eac0161f6f (diff) | |
download | pkgsrc-08b9b9bd99cc9429c98e93100025db5367171e9b.tar.gz |
Update xmame to 0.85.
Changes since 0.84.1nb1:
- Everything from MAME 0.85 (http://x.mame.net/changes-mame.html) and
MESS 0.85 (http://x.mame.net/changes-mess.html).
- Added a 2x sinc-based 6-tap filter effect with scanlines, enabled
via "-effect 8" or "-ef 8". (Richard Goedeken)
- Reworked the input code so that it more closely resembles its Windows
counterpart. This adds support for "-steadykey", "-a2d_deadzone" and
"-digital".
- Increased the maximum number of joysticks from 6 to 8 and the maximum
number of buttons per joystick from 16 to 32.
- Mouse buttons may not have been working in recent releases for games
such as Missile Command; they should work now.
- Network support is broken for the time being because of the core
input changes, so please disable XMAME_NET in your makefile. If
you're interested in fixing this, have a look at src/unix/network.c
and the XMAME_NET sections of an older src/inptport.c.
Diffstat (limited to 'emulators')
-rw-r--r-- | emulators/xmame/Makefile | 10 | ||||
-rw-r--r-- | emulators/xmame/distinfo | 7 | ||||
-rw-r--r-- | emulators/xmame/patches/patch-ab | 409 |
3 files changed, 9 insertions, 417 deletions
diff --git a/emulators/xmame/Makefile b/emulators/xmame/Makefile index 882608647f0..6fc7e1736ce 100644 --- a/emulators/xmame/Makefile +++ b/emulators/xmame/Makefile @@ -1,8 +1,7 @@ -# $NetBSD: Makefile,v 1.115 2004/07/26 18:40:06 dillo Exp $ +# $NetBSD: Makefile,v 1.116 2004/08/14 00:25:13 kristerw Exp $ # -DISTNAME= xmame-0.84.1 -PKGREVISION= 1 +DISTNAME= xmame-0.85 CATEGORIES= emulators games x11 MASTER_SITES= http://x.mame.net/download/ EXTRACT_SUFX= .tar.bz2 @@ -34,7 +33,9 @@ MAKE_FLAGS+= TARGET="${TARGET:S/x//}" MAKE_FLAGS+= LIBS="${LDFLAGS} ${LIBS}" MAKE_FLAGS+= CFLAGS="${CFLAGS}" MAKE_FLAGS+= X11INC= X11LIB= -MAKE_FLAGS+= XMAME_NET=1 + +# Network support is broken in xmame-0.85 +#MAKE_FLAGS+= XMAME_NET=1 .if !empty(USE_ESOUND:M[Yy][Ee][Ss]) MAKE_FLAGS+= SOUND_ESOUND=1 @@ -120,4 +121,5 @@ do-install: ${INSTALL_DATA_DIR} ${PREFIX}/share/doc/xmame ${INSTALL_DATA} ${WRKSRC}/doc/xmame-doc.txt ${PREFIX}/share/doc/xmame +.include "../../textproc/expat/buildlink3.mk" .include "../../mk/bsd.pkg.mk" diff --git a/emulators/xmame/distinfo b/emulators/xmame/distinfo index f224f9a9ca4..aeddef286e1 100644 --- a/emulators/xmame/distinfo +++ b/emulators/xmame/distinfo @@ -1,7 +1,6 @@ -$NetBSD: distinfo,v 1.53 2004/07/26 18:40:06 dillo Exp $ +$NetBSD: distinfo,v 1.54 2004/08/14 00:25:13 kristerw Exp $ -SHA1 (xmame-0.84.1.tar.bz2) = 51b9c091a9c6bae72695482ad1672ea98d9dec43 -Size (xmame-0.84.1.tar.bz2) = 14456105 bytes +SHA1 (xmame-0.85.tar.bz2) = 6d8b198ee4f97a197a1173860c981283947dbcb6 +Size (xmame-0.85.tar.bz2) = 14447207 bytes SHA1 (patch-aa) = 0b9ffcb7c4305e7c349f229b2646acb31553d549 -SHA1 (patch-ab) = af88f3d9a907ae2719df89b15f4eba3d79b2494c SHA1 (patch-ae) = df9ce91871bfcff611ff8f616482d4ff2e8204a3 diff --git a/emulators/xmame/patches/patch-ab b/emulators/xmame/patches/patch-ab deleted file mode 100644 index 0693dfc523a..00000000000 --- a/emulators/xmame/patches/patch-ab +++ /dev/null @@ -1,409 +0,0 @@ -$NetBSD: patch-ab,v 1.26 2004/07/26 18:40:06 dillo Exp $ - ---- src/unix/joystick-drivers/joy_usb.c.orig 2004-07-02 19:09:36.000000000 +0200 -+++ src/unix/joystick-drivers/joy_usb.c -@@ -2,12 +2,18 @@ - * X-Mame USB HID joystick driver for NetBSD. - * - * Written by Krister Walfridsson <cato@df.lth.se> -+ * Improved by Dieter Baron <dillo@giga.or.at> - */ - #include "xmame.h" - #include "devices.h" - -+static int calibrate=0; -+ - struct rc_option joy_usb_opts[] = { - /* name, shortname, type, dest, deflt, min, max, func, help */ -+ { "joyusb-calibrate", NULL, rc_bool, &calibrate, -+ "0", 0, 0, NULL, -+ "Manually calibrate USB joysticks" }, - { NULL, NULL, rc_end, NULL, - NULL, 0, 0, NULL, - NULL } -@@ -16,8 +22,7 @@ struct rc_option joy_usb_opts[] = { - #ifdef USB_JOYSTICK - - #if !defined(__ARCH_netbsd) && !defined(__ARCH_freebsd) --#error "USB joysticks are only supported under NetBSD and FreeBSD. " -- "Patches to support other archs are welcome ;)" -+#error "USB joysticks are only supported under NetBSD and FreeBSD. Patches to support other archs are welcome ;)" - #endif - - #if defined(HAVE_USBHID_H) || defined(HAVE_LIBUSBHID_H) -@@ -44,14 +49,26 @@ struct rc_option joy_usb_opts[] = { - #include <dev/usb/usb.h> - #include <dev/usb/usbhid.h> - -+int axis_usage[] = { -+ HUG_X, HUG_Y, HUG_Z, -+ HUG_RX, HUG_RY, HUG_RZ, -+ HUG_SLIDER, -+}; -+ -+int axis_max = sizeof(axis_usage)/sizeof(axis_usage[0]); -+ - struct priv_joydata_struct - { -- struct hid_item *hids; - int dlen; - int offset; - char *data_buf; -+ struct hid_item *axis_item[JOY_AXIS]; -+ struct hid_item *button_item[JOY_BUTTONS]; -+ struct hid_item *hat_item; -+ int hat_axis; - } priv_joy_data[JOY]; - -+static struct hid_item *itemdup(struct hid_item *s); - static int joy_initialize_hid(int i); - static void joy_usb_poll(void); - static int joy_read(int fd, int i); -@@ -88,7 +105,10 @@ static int joy_initialize_hid(int i) - int size, is_joystick, report_id = 0; - struct hid_data *d; - struct hid_item h; -+ struct hid_item *axis_item[axis_max]; - report_desc_t rd; -+ int got_something; -+ int j, n; - - if ((rd = hid_get_report_desc(joy_data[i].fd)) == 0) - { -@@ -96,8 +116,6 @@ static int joy_initialize_hid(int i) - return FALSE; - } - -- priv_joy_data[i].hids = NULL; -- - #if defined(HAVE_USBHID_H) || defined(HAVE_LIBUSBHID_H) - #if defined(__ARCH_netbsd) || (defined(__ARCH_freebsd) && __FreeBSD_version > 500000) - if (ioctl(joy_data[i].fd, USB_GET_REPORT_ID, &report_id) < 0) -@@ -121,7 +139,16 @@ static int joy_initialize_hid(int i) - } - priv_joy_data[i].dlen = size; - -+ for (j=0; j<axis_max; j++) -+ axis_item[j] = NULL; -+ priv_joy_data[i].hat_item = NULL; -+ for (j=0; j<JOY_AXIS; j++) -+ priv_joy_data[i].axis_item[j] = NULL; -+ for (j=0; j<JOY_BUTTONS; j++) -+ priv_joy_data[i].button_item[j] = NULL; -+ - is_joystick = 0; -+ got_something = 0; - #if defined(HAVE_USBHID_H) - for (d = hid_start_parse(rd, 1 << hid_input, report_id); - hid_get_item(d, &h); ) -@@ -129,7 +156,7 @@ static int joy_initialize_hid(int i) - for (d = hid_start_parse(rd, 1 << hid_input); hid_get_item(d, &h); ) - #endif - { -- int axis, usage, page, interesting_hid; -+ int axis, usage, page; - - page = HID_PAGE(h.usage); - usage = HID_USAGE(h.usage); -@@ -147,92 +174,135 @@ static int joy_initialize_hid(int i) - if (!is_joystick) - continue; - -- interesting_hid = TRUE; - if (page == HUP_GENERIC_DESKTOP) - { -- if (usage == HUG_X || usage == HUG_RX) -- axis = 0; -- else if (usage == HUG_Y || usage == HUG_RY) -- axis = 1; -- else if (usage == HUG_Z || usage == HUG_RZ) -- axis = 2; -+ if (usage == HUG_HAT_SWITCH) -+ { -+ got_something = 1; -+ if (priv_joy_data[i].hat_item == NULL) -+ priv_joy_data[i].hat_item = itemdup(&h); -+ } - else -- interesting_hid = FALSE; -- -- if (interesting_hid) - { -- joy_data[i].axis[axis].min = h.logical_minimum; -- joy_data[i].axis[axis].max = h.logical_maximum; -- -- /* Set the theoretical center. This will be used in case -- * the heuristic below fails. */ -- joy_data[i].axis[axis].center = -- (h.logical_minimum + h.logical_maximum) / 2; -- -- if (joy_data[i].num_axis < (axis + 1)) -- joy_data[i].num_axis = axis + 1; -+ for (j=0; j<axis_max; j++) -+ if (usage == axis_usage[j]) -+ { -+ got_something = 1; -+ if (axis_item[j] == NULL) -+ axis_item[j] = itemdup(&h); -+ break; -+ } - } - } - else if (page == HUP_BUTTON) - { -- interesting_hid = (usage > 0) && (usage <= JOY_BUTTONS); -- -- if (interesting_hid && usage > joy_data[i].num_buttons) -- joy_data[i].num_buttons = usage; -- } -- -- if (interesting_hid) -- { -- h.next = priv_joy_data[i].hids; -- priv_joy_data[i].hids = malloc(sizeof *(priv_joy_data[i].hids)); -- if (priv_joy_data[i].hids == NULL) -+ if ((usage > 0) && (usage <= JOY_BUTTONS)) - { -- fprintf(stderr_file, "error: Not enough memory for joystick. " -- "Your joystick may fail to work correctly.\n"); -- break; -+ got_something = 1; -+ if (priv_joy_data[i].button_item[usage-1] == NULL) -+ priv_joy_data[i].button_item[usage-1] = itemdup(&h); -+ if (usage > joy_data[i].num_buttons) -+ joy_data[i].num_buttons = usage; - } -- *(priv_joy_data[i].hids) = h; - } - } - hid_end_parse(d); - -- if (priv_joy_data[i].hids != NULL) -+ if (!got_something) - { -- /* We'll approximate the center with the current joystick value if -- * that can be read (some HID devices returns no data if the state -- * has not changed since the last time it was read.) */ -- if (joy_read(joy_data[i].fd, i)) -- { -- joy_data[i].axis[0].center = joy_data[i].axis[0].val; -- joy_data[i].axis[1].center = joy_data[i].axis[1].val; -- joy_data[i].axis[2].center = joy_data[i].axis[2].val; -+ free(priv_joy_data[i].data_buf); -+ return 0; -+ } -+ -+ -+ for (j=0; j<axis_max; j++) -+ { -+ if (axis_item[j]) -+ { -+ n = joy_data[i].num_axis++; -+ priv_joy_data[i].axis_item[n] = axis_item[j]; -+ -+ joy_data[i].axis[n].min -+ = priv_joy_data[i].axis_item[n]->logical_minimum; -+ joy_data[i].axis[n].max -+ = priv_joy_data[i].axis_item[n]->logical_maximum; -+ joy_data[i].axis[n].center -+ = ((joy_data[i].axis[n].max-joy_data[i].axis[n].min+1)/2 -+ + joy_data[i].axis[n].min); -+ joy_data[i].axis[n].val = joy_data[i].axis[n].center; -+ } -+ } -+ -+ if (priv_joy_data[i].hat_item) -+ { -+ if (joy_data[i].num_axis < JOY_AXIS-2) -+ { -+ n = joy_data[i].num_axis; -+ joy_data[i].num_axis += 2; -+ priv_joy_data[i].hat_axis = n; -+ for (j=0; j<2; j++) -+ { -+ joy_data[i].axis[n+j].min = -1; -+ joy_data[i].axis[n+j].max = 1; -+ joy_data[i].axis[n+j].center = 0; -+ joy_data[i].axis[n+j].val = 0; -+ } - } - else -- { -- /* Assume that the joystick is positioned in the center. -- * This is needed, or else the system will think that the -- * joystick is in position left/up (or something) until it -- * is moved the first time. */ -- joy_data[i].axis[0].val = joy_data[i].axis[0].center; -- joy_data[i].axis[1].val = joy_data[i].axis[1].center; -- joy_data[i].axis[2].val = joy_data[i].axis[2].center; -+ { -+ /* too many axes to support hat */ -+ free(priv_joy_data[i].hat_item); -+ priv_joy_data[i].hat_item = NULL; - } -- -- /* Approximate min/max values. Observe that we cannot use the -- * max/min values that the HID reports, since that is theoretical -- * values that may be wrong for analogs joystics (especially if -- * you have a joystick -> USB adaptor.) We cannot use greater delta -- * values than +/- 1, since it is OK for a gamepad (or my USB TAC 2) -- * to reports directions as center +/- 1. */ -- joy_data[i].axis[0].min = joy_data[i].axis[0].center - 1; -- joy_data[i].axis[1].min = joy_data[i].axis[1].center - 1; -- joy_data[i].axis[2].min = joy_data[i].axis[2].center - 1; -- joy_data[i].axis[0].max = joy_data[i].axis[0].center + 1; -- joy_data[i].axis[1].max = joy_data[i].axis[1].center + 1; -- joy_data[i].axis[2].max = joy_data[i].axis[2].center + 1; - } - -- return (priv_joy_data[i].hids != NULL); -+ if (calibrate) -+ { -+ int got_values; -+ -+ /* -+ The values returned in the HID report may be wrong. However, -+ it works for most joysticks and krister's method requires -+ moving the joystick about when starting xmame to calibrate, -+ which is annoying. -+ -+ For such joysticks, calibration can be enabled with the -+ -joyusb-calibrate command line option. -+ -+ We'll approximate the center with the current joystick value -+ if that can be read (some HID devices returns no data if the -+ state has not changed since the last time it was read.) -+ */ -+ -+ got_values = joy_read(joy_data[i].fd, i); -+ -+ for (j=0; j<joy_data[i].num_axis; j++) -+ { -+ if (priv_joy_data[i].axis_item[j] == NULL) -+ { -+ /* HAT item doesn't need calibration */ -+ continue; -+ } -+ -+ if (got_values) -+ joy_data[i].axis[j].center = joy_data[i].axis[j].val; -+ -+ /* -+ Approximate min/max values. Observe that we cannot use the -+ max/min values that the HID reports, since that is -+ theoretical values that may be wrong for analogs joystics -+ (especially if you have a joystick -> USB adaptor.) We -+ cannot use greater delta values than +/- 1, since it is OK -+ for a gamepad (or my USB TAC 2) to reports directions as -+ center +/- 1. -+ */ -+ -+ joy_data[i].axis[j].min = joy_data[i].axis[j].center - 1; -+ joy_data[i].axis[j].max = joy_data[i].axis[j].center + 1; -+ } -+ } -+ -+ return 1; - } - - -@@ -255,37 +325,76 @@ static void joy_usb_poll(void) - - static int joy_read(int fd, int i) - { -- int len, axis, usage, page, d; -- struct hid_item *h; -- -- len = read(fd, priv_joy_data[i].data_buf, priv_joy_data[i].dlen); -- if (len != priv_joy_data[i].dlen) -+ /* 0 1 2 3 4 5 6 7 */ -+ /* u ru r rd d ld l lu */ -+ const int hat_x[] = { -+ 0, 1, 1, 1, 0, -1, -1, -1 -+ }; -+ const int hat_y[] = { -+ -1, -1, 0, 1, 1, 1, 0, -1 -+ }; -+ -+ int len, new, d, j; -+ char *p; -+ -+ new = 0; -+ while ((len=read(fd, priv_joy_data[i].data_buf, priv_joy_data[i].dlen)) -+ == priv_joy_data[i].dlen) -+ new = 1; -+ if (!new) - return FALSE; - -- for (h = priv_joy_data[i].hids; h; h = h->next) -- { -- d = hid_get_data(priv_joy_data[i].data_buf + priv_joy_data[i].offset, h); -- -- page = HID_PAGE(h->usage); -- usage = HID_USAGE(h->usage); -+ p = priv_joy_data[i].data_buf + priv_joy_data[i].offset; - -- if (page == HUP_GENERIC_DESKTOP) -- { -- if (usage == HUG_X || usage == HUG_RX) -- axis = 0; -- else if (usage == HUG_Y || usage == HUG_RY) -- axis = 1; -- else -- axis = 2; -+ for (j=0; j<joy_data[i].num_axis; j++) -+ { -+ if (priv_joy_data[i].axis_item[j]) -+ joy_data[i].axis[j].val=hid_get_data(p, priv_joy_data[i].axis_item[j]); -+ } - -- joy_data[i].axis[axis].val = d; -+ if (priv_joy_data[i].hat_item != NULL) -+ { -+ d = hid_get_data(p, priv_joy_data[i].hat_item) -+ - priv_joy_data[i].hat_item->logical_minimum; -+ j = priv_joy_data[i].hat_axis; -+ if (d < 0 || d >= 8) -+ { -+ joy_data[i].axis[j].val = 0; -+ joy_data[i].axis[j+1].val = 0; - } -- else if (page == HUP_BUTTON) -- { -- joy_data[i].buttons[usage - 1] = (d == h->logical_maximum); -+ else -+ { -+ joy_data[i].axis[j].val = hat_x[d]; -+ joy_data[i].axis[j+1].val = hat_y[d]; - } - } - -+ for (j=0; j<joy_data[i].num_buttons; j++) -+ { -+ if (priv_joy_data[i].button_item[j]) -+ joy_data[i].buttons[j] -+ = (hid_get_data(p, priv_joy_data[i].button_item[j]) -+ == priv_joy_data[i].button_item[j]->logical_maximum); -+ } -+ - return TRUE; - } -+ -+static struct hid_item *itemdup(struct hid_item *s) -+{ -+ struct hid_item *t; -+ -+ t = malloc(sizeof(*t)); -+ if (t == NULL) -+ { -+ fprintf(stderr_file, "error: Not enough memory for joystick. " -+ "Your joystick may fail to work correctly.\n"); -+ return NULL; -+ } -+ -+ memcpy(t, s, sizeof(*t)); -+ -+ return t; -+} -+ - #endif |