123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813 |
- diff -Naur ucon64-2.0.0-src/src/backup/backup.h ucon64/src/backup/backup.h
- --- ucon64-2.0.0-src/src/backup/backup.h 2009-09-16 09:43:42.000000000 +0000
- +++ ucon64/src/backup/backup.h 2009-08-28 10:00:36.000000000 +0000
- @@ -59,4 +59,9 @@
- #include "f2a.h"
- #endif
-
- +#ifdef USE_USB
- +#include "quickdev16.h"
- +#endif // USE_PARALLEL
- +
- +
- #endif // BACKUP_H
- diff -Naur ucon64-2.0.0-src/src/backup/quickdev16.c ucon64/src/backup/quickdev16.c
- --- ucon64-2.0.0-src/src/backup/quickdev16.c 1970-01-01 00:00:00.000000000 +0000
- +++ ucon64/src/backup/quickdev16.c 2009-09-01 13:01:12.000000000 +0000
- @@ -0,0 +1,228 @@
- +/*
- +quickdev16.c - Quickdev16 support for uCON64
- +
- +Copyright (c) 2009 david@optixx.org
- +
- +
- +This program is free software; you can redistribute it and/or modify
- +it under the terms of the GNU General Public License as published by
- +the Free Software Foundation; either version 2 of the License, or
- +(at your option) any later version.
- +
- +This program is distributed in the hope that it will be useful,
- +but WITHOUT ANY WARRANTY; without even the implied warranty of
- +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- +GNU General Public License for more details.
- +
- +You should have received a copy of the GNU General Public License
- +along with this program; if not, write to the Free Software
- +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- +*/
- +#ifdef HAVE_CONFIG_H
- +#include "config.h"
- +#endif
- +#include <stdio.h>
- +#include <stdlib.h>
- +#include <time.h>
- +#include <string.h>
- +#include <usb.h>
- +#include "misc/misc.h"
- +#include "misc/itypes.h"
- +#ifdef USE_ZLIB
- +#include "misc/archive.h"
- +#endif
- +#include "misc/getopt2.h" // st_getopt2_t
- +#include "misc/file.h"
- +#include "misc/opendevice.h"
- +
- +
- +#include "ucon64.h"
- +#include "ucon64_misc.h"
- +#include "ffe.h"
- +#include "smc.h"
- +#include "quickdev16.h"
- +
- +#include "console/snes.h"
- +
- +#define SNES_HEADER_LEN (sizeof (st_snes_header_t))
- +
- +const st_getopt2_t quickdev16_usage[] =
- + {
- + {
- + NULL, 0, 0, 0,
- + NULL, "Quickdev16"/* http://www.optixx.org */,
- + NULL
- + },
- +#ifdef USE_USB
- + {
- + "xquickdev16", 0, 0, UCON64_XSNESRAM, // send only
- + NULL, "send ROM (in FFE format) to Quickdev16",
- + &ucon64_wf[WF_OBJ_NES_DEFAULT_STOP_NO_SPLIT]
- + },
- +#endif
- + {NULL, 0, 0, 0, NULL, NULL, NULL}
- + };
- +
- +
- +#ifdef USE_USB
- +
- +#define READ_BUFFER_SIZE 8192
- +#define SEND_BUFFER_SIZE 128
- +#define SNES_HIROM_SHIFT 16
- +#define SNES_LOROM_SHIFT 15
- +
- +int
- +quickdev16_write_rom (const char *filename)
- +{
- + FILE *file;
- + int bytesread, bytessend, size;
- + time_t starttime;
- + usb_dev_handle *handle = NULL;
- + const unsigned char rawVid[2] = { USB_CFG_VENDOR_ID }, rawPid[2] = { USB_CFG_DEVICE_ID};
- + char vendor[] = { USB_CFG_VENDOR_NAME, 0 }, product[] = { USB_CFG_DEVICE_NAME, 0};
- + int cnt, vid, pid;
- + uint8_t *read_buffer;
- + uint32_t addr = 0;
- + uint16_t addr_lo = 0;
- + uint16_t addr_hi = 0;
- + uint16_t step = 0;
- + uint8_t bank = 0;
- + uint8_t bank_cnt = 0;
- + uint16_t bank_shift;
- + uint32_t bank_size;
- + uint32_t hirom = 0;
- + uint8_t byte = 0;
- + st_rominfo_t rominfo;
- +
- +
- + usb_init();
- + vid = rawVid[1] * 256 + rawVid[0];
- + pid = rawPid[1] * 256 + rawPid[0];
- + if (usbOpenDevice(&handle, vid, vendor, pid, product, NULL, NULL, NULL) != 0) {
- + fprintf(stderr,
- + "Could not find USB device \"%s\" with vid=0x%x pid=0x%x\n",
- + product, vid, pid);
- + exit(1);
- + }
- + printf("Open USB device \"%s\" with vid=0x%x pid=0x%x\n", product, vid,pid);
- +
- + if ((file = fopen (filename, "rb")) == NULL)
- + {
- + fprintf (stderr, ucon64_msg[OPEN_READ_ERROR], filename);
- + exit (1);
- + }
- +
- + if ((read_buffer = (unsigned char *) malloc (READ_BUFFER_SIZE)) == NULL)
- + {
- + fprintf (stderr, ucon64_msg[FILE_BUFFER_ERROR], READ_BUFFER_SIZE);
- + exit (1);
- + }
- +
- + snes_init (&rominfo);
- + printf(rominfo.misc);
- + printf("\n");
- +
- + if (UCON64_ISSET (ucon64.snes_hirom))
- + hirom = ucon64.snes_hirom ? 1 : 0;
- + else {
- + hirom = snes_get_snes_hirom ();
- + }
- +
- +
- +
- + if (hirom) {
- + bank_shift = SNES_HIROM_SHIFT;
- + bank_size = 1 << SNES_HIROM_SHIFT;
- + } else {
- + bank_shift = SNES_LOROM_SHIFT;
- + bank_size = 1 << SNES_LOROM_SHIFT;
- + }
- +
- +
- +
- + fseek (file, 0, SEEK_END);
- + size = ftell (file);
- + fseek (file, SMC_HEADER_LEN, SEEK_SET);
- + size -= SMC_HEADER_LEN;
- + bank_cnt = size / bank_size;
- +
- + printf ("Send: %d Bytes (%.4f Mb) Hirom: %s, Banks: %i\n", size, (float) size / MBIT, hirom ? "Yes" : "No", bank_cnt);
- + bytessend = 0;
- + printf ("Press q to abort\n\n");
- + starttime = time (NULL);
- +
- + cnt = usb_control_msg(handle,
- + USB_TYPE_VENDOR | USB_RECIP_DEVICE |
- + USB_ENDPOINT_OUT, USB_MODE_AVR, 0, 0, NULL,
- + 0, 5000);
- +
- + /* wait for the loader to depack */
- + usleep(500000);
- +
- +
- + cnt = usb_control_msg(handle,
- + USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT,
- + USB_BULK_UPLOAD_INIT, bank_shift , bank_cnt, NULL, 0, 5000);
- +
- +
- + while ((bytesread = fread(read_buffer, READ_BUFFER_SIZE, 1, file)) > 0) {
- + for (step = 0; step < READ_BUFFER_SIZE; step += SEND_BUFFER_SIZE) {
- +
- + addr_lo = addr & 0xffff;
- + addr_hi = (addr >> 16) & 0x00ff;
- +
- + if (addr == 0){
- + cnt = usb_control_msg(handle,
- + USB_TYPE_VENDOR | USB_RECIP_DEVICE |
- + USB_ENDPOINT_OUT, USB_BULK_UPLOAD_ADDR, addr_hi,
- + addr_lo, (char *) read_buffer + step,
- + SEND_BUFFER_SIZE, 5000);
- + } else {
- + cnt = usb_control_msg(handle,
- + USB_TYPE_VENDOR | USB_RECIP_DEVICE |
- + USB_ENDPOINT_OUT, USB_BULK_UPLOAD_NEXT, addr_hi,
- + addr_lo, (char *) read_buffer + step,
- + SEND_BUFFER_SIZE, 5000);
- + }
- + if (cnt < 0) {
- + fprintf(stderr, "USB error: %s\n", usb_strerror());
- + usb_close(handle);
- + exit(-1);
- + }
- +
- + bytessend += SEND_BUFFER_SIZE;
- + ucon64_gauge (starttime, bytessend, size);
- +
- + addr += SEND_BUFFER_SIZE;
- + if ( addr % bank_size == 0) {
- + bank++;
- + }
- + }
- + }
- + cnt = usb_control_msg(handle,
- + USB_TYPE_VENDOR | USB_RECIP_DEVICE |
- + USB_ENDPOINT_OUT, USB_BULK_UPLOAD_END, 0, 0, NULL,
- + 0, 5000);
- +
- +#if 0
- + bank = 0;
- + fseek(fp, 0, SEEK_SET);
- + while ((cnt = fread(read_buffer, READ_BUFFER_SIZE, 1, fp)) > 0) {
- + printf ("bank=0x%02x crc=0x%04x\n", bank++,
- + do_crc(read_buffer, READ_BUFFER_SIZE));
- + }
- + fclose(fp);
- +#endif
- + cnt = usb_control_msg(handle,
- + USB_TYPE_VENDOR | USB_RECIP_DEVICE |
- + USB_ENDPOINT_OUT, USB_MODE_SNES, 0, 0, NULL,
- + 0, 5000);
- +
- +
- + free (read_buffer);
- + fclose (file);
- + return 0;
- +}
- +
- +
- +#endif // USE_USB
- diff -Naur ucon64-2.0.0-src/src/backup/quickdev16.h ucon64/src/backup/quickdev16.h
- --- ucon64-2.0.0-src/src/backup/quickdev16.h 1970-01-01 00:00:00.000000000 +0000
- +++ ucon64/src/backup/quickdev16.h 2009-08-28 10:00:36.000000000 +0000
- @@ -0,0 +1,81 @@
- +/*
- +quickdev16.h - Quickdev16 support for uCON64
- +
- +Copyright (c) 2009 david@optixx.org
- +
- +
- +This program is free software; you can redistribute it and/or modify
- +it under the terms of the GNU General Public License as published by
- +the Free Software Foundation; either version 2 of the License, or
- +(at your option) any later version.
- +
- +This program is distributed in the hope that it will be useful,
- +but WITHOUT ANY WARRANTY; without even the implied warranty of
- +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- +GNU General Public License for more details.
- +
- +You should have received a copy of the GNU General Public License
- +along with this program; if not, write to the Free Software
- +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- +*/
- +#ifndef SNESRAM_H
- +#define SNESRAM_H
- +
- +#define USB_UPLOAD_INIT 0
- +#define USB_UPLOAD_ADDR 1
- +
- +#define USB_DOWNLOAD_INIT 2
- +#define USB_DOWNLOAD_ADDR 3
- +
- +#define USB_CRC 4
- +#define USB_CRC_ADDR 5
- +
- +#define USB_BULK_UPLOAD_INIT 6
- +#define USB_BULK_UPLOAD_ADDR 7
- +#define USB_BULK_UPLOAD_NEXT 8
- +#define USB_BULK_UPLOAD_END 9
- +#define USB_MODE_SNES 10
- +#define USB_MODE_AVR 11
- +#define USB_AVR_RESET 12
- +
- +/* -------------------------- Device Description --------------------------- */
- +
- +#define USB_CFG_VENDOR_ID 0xc0, 0x16
- +/* USB vendor ID for the device, low byte first. If you have registered your
- + * own Vendor ID, define it here. Otherwise you use one of obdev's free shared
- + * VID/PID pairs. Be sure to read USBID-License.txt for rules!
- + */
- +#define USB_CFG_DEVICE_ID 0xdd, 0x05
- +/* This is the ID of the product, low byte first. It is interpreted in the
- + * scope of the vendor ID. If you have registered your own VID with usb.org
- + * or if you have licensed a PID from somebody else, define it here. Otherwise
- + * you use obdev's free shared VID/PID pair. Be sure to read the rules in
- + * USBID-License.txt!
- + */
- +#define USB_CFG_DEVICE_VERSION 0x00, 0x01
- +/* Version number of the device: Minor number first, then major number.
- + */
- +#define USB_CFG_VENDOR_NAME 'o', 'p', 't', 'i', 'x', 'x', '.', 'o', 'r', 'g'
- +#define USB_CFG_VENDOR_NAME_LEN 10
- +/* These two values define the vendor name returned by the USB device. The name
- + * must be given as a list of characters under single quotes. The characters
- + * are interpreted as Unicode (UTF-16) entities.
- + * If you don't want a vendor name string, undefine these macros.
- + * ALWAYS define a vendor name containing your Internet domain name if you use
- + * obdev's free shared VID/PID pair. See the file USBID-License.txt for
- + * details.
- + */
- +#define USB_CFG_DEVICE_NAME 'Q', 'U', 'I', 'C', 'K', 'D', 'E', 'V', '1', '6'
- +#define USB_CFG_DEVICE_NAME_LEN 10
- +/* Same as above for the device name. If you don't want a device name, undefine
- + * the macros. See the file USBID-License.txt before you assign a name if you
- + * use a shared VID/PID.
- + */
- +
- +extern const st_getopt2_t quickdev16_usage[];
- +
- +#ifdef USE_USB
- +extern int quickdev16_write_rom (const char *filename);
- +#endif
- +
- +#endif // SNESRAM_H
- diff -Naur ucon64-2.0.0-src/src/console/snes.c ucon64/src/console/snes.c
- --- ucon64-2.0.0-src/src/console/snes.c 2009-09-16 09:43:42.000000000 +0000
- +++ ucon64/src/console/snes.c 2009-08-28 10:00:36.000000000 +0000
- @@ -3261,6 +3261,7 @@
- snes_hirom = 0;
- if (UCON64_ISSET (ucon64.snes_hirom)) // see snes_set_hirom()
- snes_hirom = ucon64.snes_hirom;
- + //ucon64.snes_hirom = snes_hirom;
- snes_hirom_ok = 1;
-
- rominfo->interleaved = 0;
- diff -Naur ucon64-2.0.0-src/src/Makefile.in ucon64/src/Makefile.in
- --- ucon64-2.0.0-src/src/Makefile.in 2009-09-16 09:43:42.000000000 +0000
- +++ ucon64/src/Makefile.in 2009-08-28 10:00:36.000000000 +0000
- @@ -7,8 +7,8 @@
- @DEFINE_LIBCD64_MAKE@
-
- CC=@CC@
- -CFLAGS=-I. -Wall -W -O3 @DEFS@
- -LDFLAGS=-s
- +CFLAGS=-I. -Wall -W -O3 @DEFS@ -I/opt/local/include
- +LDFLAGS=-s -L/opt/local/lib
- TARGETS=
-
- ifdef USE_DISCMAGE
- @@ -96,7 +96,8 @@
- OBJECTS=ucon64.o ucon64_dat.o ucon64_misc.o ucon64_opts.o \
- misc/chksum.o misc/file.o misc/getopt.o misc/getopt2.o \
- misc/misc.o misc/parallel.o misc/property.o misc/string.o \
- - patch/aps.o patch/bsl.o patch/gg.o patch/ips.o patch/pal4u.o \
- + misc/opendevice.o \
- + patch/aps.o patch/bsl.o patch/gg.o patch/ips.o patch/pal4u.o \
- patch/ppf.o patch/xps.o \
- console/dc.o console/gb.o console/gba.o console/genesis.o \
- console/jaguar.o console/lynx.o console/n64.o console/neogeo.o \
- @@ -107,7 +108,7 @@
- backup/fig.o backup/gbx.o backup/gd.o backup/interceptor.o \
- backup/lynxit.o backup/mccl.o backup/mcd.o backup/md-pro.o \
- backup/mgd.o backup/msg.o backup/pce-pro.o backup/pl.o \
- - backup/psxpblib.o backup/sflash.o backup/smc.o backup/smd.o \
- + backup/psxpblib.o backup/sflash.o backup/quickdev16.o backup/smc.o backup/smd.o \
- backup/smsgg-pro.o backup/ssc.o backup/swc.o backup/tototek.o \
- backup/ufo.o backup/yoko.o backup/z64.o
- ifdef USE_ZLIB
- diff -Naur ucon64-2.0.0-src/src/misc/opendevice.c ucon64/src/misc/opendevice.c
- --- ucon64-2.0.0-src/src/misc/opendevice.c 1970-01-01 00:00:00.000000000 +0000
- +++ ucon64/src/misc/opendevice.c 2009-08-28 10:00:36.000000000 +0000
- @@ -0,0 +1,286 @@
- +/*
- + * Name: opendevice.c Project: V-USB host-side library Author: Christian
- + * Starkjohann Creation Date: 2008-04-10 Tabsize: 4 Copyright: (c) 2008 by
- + * OBJECTIVE DEVELOPMENT Software GmbH License: GNU GPL v2 (see License.txt),
- + * GNU GPL v3 or proprietary (CommercialLicense.txt) This Revision: $Id:
- + * opendevice.c 740 2009-04-13 18:23:31Z cs $
- + */
- +
- +/*
- + * General Description: The functions in this module can be used to find and
- + * open a device based on libusb or libusb-win32.
- + */
- +
- +
- +#include <stdio.h>
- +#include "opendevice.h"
- +
- +/*
- + * -------------------------------------------------------------------------
- + */
- +
- +#define MATCH_SUCCESS 1
- +#define MATCH_FAILED 0
- +#define MATCH_ABORT -1
- +
- +/*
- + * private interface: match text and p, return MATCH_SUCCESS, MATCH_FAILED, or
- + * MATCH_ABORT.
- + */
- +static int _shellStyleMatch(char *text, char *p)
- +{
- + int last,
- + matched,
- + reverse;
- +
- + for (; *p; text++, p++) {
- + if (*text == 0 && *p != '*')
- + return MATCH_ABORT;
- + switch (*p) {
- + case '\\':
- + /*
- + * Literal match with following character.
- + */
- + p++;
- + /*
- + * FALLTHROUGH
- + */
- + default:
- + if (*text != *p)
- + return MATCH_FAILED;
- + continue;
- + case '?':
- + /*
- + * Match anything.
- + */
- + continue;
- + case '*':
- + while (*++p == '*')
- + /*
- + * Consecutive stars act just like one.
- + */
- + continue;
- + if (*p == 0)
- + /*
- + * Trailing star matches everything.
- + */
- + return MATCH_SUCCESS;
- + while (*text)
- + if ((matched = _shellStyleMatch(text++, p)) != MATCH_FAILED)
- + return matched;
- + return MATCH_ABORT;
- + case '[':
- + reverse = p[1] == '^';
- + if (reverse) /* Inverted character class. */
- + p++;
- + matched = MATCH_FAILED;
- + if (p[1] == ']' || p[1] == '-')
- + if (*++p == *text)
- + matched = MATCH_SUCCESS;
- + for (last = *p; *++p && *p != ']'; last = *p)
- + if (*p == '-' && p[1] != ']' ? *text <= *++p
- + && *text >= last : *text == *p)
- + matched = MATCH_SUCCESS;
- + if (matched == reverse)
- + return MATCH_FAILED;
- + continue;
- + }
- + }
- + return *text == 0;
- +}
- +
- +/*
- + * public interface for shell style matching: returns 0 if fails, 1 if matches
- + */
- +static int shellStyleMatch(char *text, char *pattern)
- +{
- + if (pattern == NULL) /* NULL pattern is synonymous to "*" */
- + return 1;
- + return _shellStyleMatch(text, pattern) == MATCH_SUCCESS;
- +}
- +
- +/*
- + * -------------------------------------------------------------------------
- + */
- +
- +int usbGetStringAscii(usb_dev_handle * dev, int index, char *buf, int buflen)
- +{
- + char buffer[256];
- + int rval,
- + i;
- +
- + if ((rval = usb_get_string_simple(dev, index, buf, buflen)) >= 0) /* use
- + * libusb
- + * version
- + * if
- + * it
- + * works
- + */
- + return rval;
- + if ((rval =
- + usb_control_msg(dev, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR,
- + (USB_DT_STRING << 8) + index, 0x0409, buffer,
- + sizeof(buffer), 5000)) < 0)
- + return rval;
- + if (buffer[1] != USB_DT_STRING) {
- + *buf = 0;
- + return 0;
- + }
- + if ((unsigned char) buffer[0] < rval)
- + rval = (unsigned char) buffer[0];
- + rval /= 2;
- + /*
- + * lossy conversion to ISO Latin1:
- + */
- + for (i = 1; i < rval; i++) {
- + if (i > buflen) /* destination buffer overflow */
- + break;
- + buf[i - 1] = buffer[2 * i];
- + if (buffer[2 * i + 1] != 0) /* outside of ISO Latin1 range */
- + buf[i - 1] = '?';
- + }
- + buf[i - 1] = 0;
- + return i - 1;
- +}
- +
- +/*
- + * -------------------------------------------------------------------------
- + */
- +
- +int usbOpenDevice(usb_dev_handle ** device, int vendorID,
- + char *vendorNamePattern, int productID,
- + char *productNamePattern, char *serialNamePattern,
- + FILE * printMatchingDevicesFp, FILE * warningsFp)
- +{
- + struct usb_bus *bus;
- + struct usb_device *dev;
- + usb_dev_handle *handle = NULL;
- + int errorCode = USBOPEN_ERR_NOTFOUND;
- +
- + usb_find_busses();
- + usb_find_devices();
- + for (bus = usb_get_busses(); bus; bus = bus->next) {
- + for (dev = bus->devices; dev; dev = dev->next) { /* iterate over
- + * all devices
- + * on all
- + * busses */
- + if ((vendorID == 0 || dev->descriptor.idVendor == vendorID)
- + && (productID == 0 || dev->descriptor.idProduct == productID)) {
- + char vendor[256],
- + product[256],
- + serial[256];
- + int len;
- + handle = usb_open(dev); /* we need to open the device in order
- + * to query strings */
- + if (!handle) {
- + errorCode = USBOPEN_ERR_ACCESS;
- + if (warningsFp != NULL)
- + fprintf(warningsFp,
- + "Warning: cannot open VID=0x%04x PID=0x%04x: %s\n",
- + dev->descriptor.idVendor,
- + dev->descriptor.idProduct, usb_strerror());
- + continue;
- + }
- + /*
- + * now check whether the names match:
- + */
- + len = vendor[0] = 0;
- + if (dev->descriptor.iManufacturer > 0) {
- + len =
- + usbGetStringAscii(handle, dev->descriptor.iManufacturer,
- + vendor, sizeof(vendor));
- + }
- + if (len < 0) {
- + errorCode = USBOPEN_ERR_ACCESS;
- + if (warningsFp != NULL)
- + fprintf(warningsFp,
- + "Warning: cannot query manufacturer for VID=0x%04x PID=0x%04x: %s\n",
- + dev->descriptor.idVendor,
- + dev->descriptor.idProduct, usb_strerror());
- + } else {
- + errorCode = USBOPEN_ERR_NOTFOUND;
- + /*
- + * printf("seen device from vendor ->%s<-\n", vendor);
- + */
- + if (shellStyleMatch(vendor, vendorNamePattern)) {
- + len = product[0] = 0;
- + if (dev->descriptor.iProduct > 0) {
- + len =
- + usbGetStringAscii(handle,
- + dev->descriptor.iProduct,
- + product, sizeof(product));
- + }
- + if (len < 0) {
- + errorCode = USBOPEN_ERR_ACCESS;
- + if (warningsFp != NULL)
- + fprintf(warningsFp,
- + "Warning: cannot query product for VID=0x%04x PID=0x%04x: %s\n",
- + dev->descriptor.idVendor,
- + dev->descriptor.idProduct,
- + usb_strerror());
- + } else {
- + errorCode = USBOPEN_ERR_NOTFOUND;
- + /*
- + * printf("seen product ->%s<-\n", product);
- + */
- + if (shellStyleMatch(product, productNamePattern)) {
- + len = serial[0] = 0;
- + if (dev->descriptor.iSerialNumber > 0) {
- + len =
- + usbGetStringAscii(handle,
- + dev->descriptor.
- + iSerialNumber, serial,
- + sizeof(serial));
- + }
- + if (len < 0) {
- + errorCode = USBOPEN_ERR_ACCESS;
- + if (warningsFp != NULL)
- + fprintf(warningsFp,
- + "Warning: cannot query serial for VID=0x%04x PID=0x%04x: %s\n",
- + dev->descriptor.idVendor,
- + dev->descriptor.idProduct,
- + usb_strerror());
- + }
- + if (shellStyleMatch(serial, serialNamePattern)) {
- + if (printMatchingDevicesFp != NULL) {
- + if (serial[0] == 0) {
- + fprintf(printMatchingDevicesFp,
- + "VID=0x%04x PID=0x%04x vendor=\"%s\" product=\"%s\"\n",
- + dev->descriptor.idVendor,
- + dev->descriptor.idProduct,
- + vendor, product);
- + } else {
- + fprintf(printMatchingDevicesFp,
- + "VID=0x%04x PID=0x%04x vendor=\"%s\" product=\"%s\" serial=\"%s\"\n",
- + dev->descriptor.idVendor,
- + dev->descriptor.idProduct,
- + vendor, product, serial);
- + }
- + } else {
- + break;
- + }
- + }
- + }
- + }
- + }
- + }
- + usb_close(handle);
- + handle = NULL;
- + }
- + }
- + if (handle) /* we have found a deice */
- + break;
- + }
- + if (handle != NULL) {
- + errorCode = 0;
- + *device = handle;
- + }
- + if (printMatchingDevicesFp != NULL) /* never return an error for listing
- + * only */
- + errorCode = 0;
- + return errorCode;
- +}
- +
- +/*
- + * -------------------------------------------------------------------------
- + */
- diff -Naur ucon64-2.0.0-src/src/misc/opendevice.h ucon64/src/misc/opendevice.h
- --- ucon64-2.0.0-src/src/misc/opendevice.h 1970-01-01 00:00:00.000000000 +0000
- +++ ucon64/src/misc/opendevice.h 2009-08-28 10:00:36.000000000 +0000
- @@ -0,0 +1,77 @@
- +/* Name: opendevice.h
- + * Project: V-USB host-side library
- + * Author: Christian Starkjohann
- + * Creation Date: 2008-04-10
- + * Tabsize: 4
- + * Copyright: (c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH
- + * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
- + * This Revision: $Id: opendevice.h 740 2009-04-13 18:23:31Z cs $
- + */
- +
- +/*
- +General Description:
- +This module offers additional functionality for host side drivers based on
- +libusb or libusb-win32. It includes a function to find and open a device
- +based on numeric IDs and textual description. It also includes a function to
- +obtain textual descriptions from a device.
- +
- +To use this functionality, simply copy opendevice.c and opendevice.h into your
- +project and add them to your Makefile. You may modify and redistribute these
- +files according to the GNU General Public License (GPL) version 2 or 3.
- +*/
- +
- +#ifndef __OPENDEVICE_H_INCLUDED__
- +#define __OPENDEVICE_H_INCLUDED__
- +
- +#include <usb.h> /* this is libusb, see http://libusb.sourceforge.net/ */
- +#include <stdio.h>
- +
- +int usbGetStringAscii(usb_dev_handle *dev, int index, char *buf, int buflen);
- +/* This function gets a string descriptor from the device. 'index' is the
- + * string descriptor index. The string is returned in ISO Latin 1 encoding in
- + * 'buf' and it is terminated with a 0-character. The buffer size must be
- + * passed in 'buflen' to prevent buffer overflows. A libusb device handle
- + * must be given in 'dev'.
- + * Returns: The length of the string (excluding the terminating 0) or
- + * a negative number in case of an error. If there was an error, use
- + * usb_strerror() to obtain the error message.
- + */
- +
- +int usbOpenDevice(usb_dev_handle **device, int vendorID, char *vendorNamePattern, int productID, char *productNamePattern, char *serialNamePattern, FILE *printMatchingDevicesFp, FILE *warningsFp);
- +/* This function iterates over all devices on all USB busses and searches for
- + * a device. Matching is done first by means of Vendor- and Product-ID (passed
- + * in 'vendorID' and 'productID'. An ID of 0 matches any numeric ID (wildcard).
- + * When a device matches by its IDs, matching by names is performed. Name
- + * matching can be done on textual vendor name ('vendorNamePattern'), product
- + * name ('productNamePattern') and serial number ('serialNamePattern'). A
- + * device matches only if all non-null pattern match. If you don't care about
- + * a string, pass NULL for the pattern. Patterns are Unix shell style pattern:
- + * '*' stands for 0 or more characters, '?' for one single character, a list
- + * of characters in square brackets for a single character from the list
- + * (dashes are allowed to specify a range) and if the lis of characters begins
- + * with a caret ('^'), it matches one character which is NOT in the list.
- + * Other parameters to the function: If 'warningsFp' is not NULL, warning
- + * messages are printed to this file descriptor with fprintf(). If
- + * 'printMatchingDevicesFp' is not NULL, no device is opened but matching
- + * devices are printed to the given file descriptor with fprintf().
- + * If a device is opened, the resulting USB handle is stored in '*device'. A
- + * pointer to a "usb_dev_handle *" type variable must be passed here.
- + * Returns: 0 on success, an error code (see defines below) on failure.
- + */
- +
- +/* usbOpenDevice() error codes: */
- +#define USBOPEN_SUCCESS 0 /* no error */
- +#define USBOPEN_ERR_ACCESS 1 /* not enough permissions to open device */
- +#define USBOPEN_ERR_IO 2 /* I/O error */
- +#define USBOPEN_ERR_NOTFOUND 3 /* device not found */
- +
- +
- +/* Obdev's free USB IDs, see USBID-License.txt for details */
- +
- +#define USB_VID_OBDEV_SHARED 5824 /* obdev's shared vendor ID */
- +#define USB_PID_OBDEV_SHARED_CUSTOM 1500 /* shared PID for custom class devices */
- +#define USB_PID_OBDEV_SHARED_HID 1503 /* shared PID for HIDs except mice & keyboards */
- +#define USB_PID_OBDEV_SHARED_CDCACM 1505 /* shared PID for CDC Modem devices */
- +#define USB_PID_OBDEV_SHARED_MIDI 1508 /* shared PID for MIDI class devices */
- +
- +#endif /* __OPENDEVICE_H_INCLUDED__ */
- diff -Naur ucon64-2.0.0-src/src/ucon64.c ucon64/src/ucon64.c
- --- ucon64-2.0.0-src/src/ucon64.c 2009-09-16 09:43:42.000000000 +0000
- +++ ucon64/src/ucon64.c 2009-08-28 10:00:36.000000000 +0000
- @@ -171,6 +171,9 @@
- sflash_usage,
- // mgd_usage,
- #endif
- +#ifdef USE_USB
- + quickdev16_usage,
- +#endif
- lf,
- neogeo_usage,
- lf,
- diff -Naur ucon64-2.0.0-src/src/ucon64_defines.h ucon64/src/ucon64_defines.h
- --- ucon64-2.0.0-src/src/ucon64_defines.h 2009-09-16 09:43:42.000000000 +0000
- +++ ucon64/src/ucon64_defines.h 2009-08-28 10:00:36.000000000 +0000
- @@ -326,6 +326,7 @@
- UCON64_XSMCR,
- UCON64_XSMD,
- UCON64_XSMDS,
- + UCON64_XSNESRAM,
- UCON64_XSWC,
- UCON64_XSWC2,
- UCON64_XSWC_IO,
- diff -Naur ucon64-2.0.0-src/src/ucon64_opts.c ucon64/src/ucon64_opts.c
- --- ucon64-2.0.0-src/src/ucon64_opts.c 2009-09-16 09:43:42.000000000 +0000
- +++ ucon64/src/ucon64_opts.c 2009-08-28 10:00:36.000000000 +0000
- @@ -310,6 +310,7 @@
- case UCON64_XSMCR:
- case UCON64_XSMD:
- case UCON64_XSMDS:
- + case UCON64_XSNESRAM:
- case UCON64_XSWC:
- case UCON64_XSWC2:
- case UCON64_XSWCR:
- @@ -558,7 +559,7 @@
- break;
-
- case UCON64_Q:
- - case UCON64_QQ: // for now -qq is equivalent to -q
- + case UCON64_QQ: //UCON64_XSMC for now -qq is equivalent to -q
- ucon64.quiet = 1;
- break;
-
- @@ -2050,6 +2051,7 @@
- smc_write_rts (ucon64.rom, ucon64.parport);
- fputc ('\n', stdout);
- break;
- +
-
- case UCON64_XSMD:
- if (access (ucon64.rom, F_OK) != 0) // file does not exist -> dump cartridge
- @@ -2077,6 +2079,15 @@
- fputc ('\n', stdout);
- break;
-
- + case UCON64_XSNESRAM:
- + if (!ucon64.rominfo->buheader_len)
- + fputs ("ERROR: This ROM has no header. Convert to an SMC compatible format with -ffe\n",
- + stderr);
- + else
- + quickdev16_write_rom (ucon64.rom);
- + fputc ('\n', stdout);
- + break;
- +
- case UCON64_XSWC:
- enableRTS = 0; // falling through
- case UCON64_XSWC2:
|