Project

General

Profile

« Previous | Next » 

Revision 425

Added by markw almost 10 years ago

Ádded USB joystick switching + misc fixes for mcc release 1.3

View differences:

firmware/5200/mainmenu.c
debug_adjust = row==3 ? 128 : 0;
printf("Cart:%s", file_name(files[4]) ? file_name(files[4]) : "NONE");
#ifdef USBSETTINGS
debug_pos = 240;
debug_adjust = row==4 ? 128 : 0;
printf("Rotate USB joysticks");
debug_pos = 320;
debug_adjust = row==5 ? 128 : 0;
printf("Exit");
debug_adjust = 0;
usb_devices(400);
#else
debug_pos = 240;
debug_adjust = row==4 ? 128 : 0;
printf("Exit");
#endif
/*
while (1)
{
......
row+=joy.y_;
if (row<0) row = 0;
#ifdef USBSETTINGS
if (row>5) row = 5;
#else
if (row>4) row = 4;
#endif
switch (row)
{
case 0:
......
}
}
break;
#ifdef USBSETTINGS
case 4:
if (joy.fire_)
{
rotate_usb_sticks();
}
break;
case 5:
if (joy.fire_)
{
done = 1;
}
break;
#else
case 4:
if (joy.fire_)
{
done = 1;
}
break;
#endif
}
}
firmware/a800/mainmenu.c
unsigned char freezer_rom_present;
#ifdef USB
#include "usb.h"
#include "usb/debug.h"
#endif
#undef USBSETTINGS
void loadosrom()
{
if (file_size(files[5]) == 0x4000)
......
}*/
}
#ifdef USBSETTINGS
void usb_settings()
{
struct joystick_status joy;
joy.x_ = joy.y_ = joy.fire_ = joy.escape_ = 0;
int row = 0;
int done = 0;
for (;!done;)
{
// Render
clearscreen();
debug_pos = 0;
debug_adjust = 0;
printf("USB Se");
debug_adjust = 128;
printf("ttings");
debug_pos = 80;
debug_adjust = row==0 ? 128 : 0;
printf("Hello world");
debug_pos = 200;
debug_adjust = row==1 ? 128 : 0;
printf("Exit");
// Slow it down a bit
wait_us(100000);
// move
joystick_wait(&joy,WAIT_QUIET);
joystick_wait(&joy,WAIT_EITHER);
if (joy.escape_) break;
row+=joy.y_;
if (row<0) row = 0;
if (row>1) row = 1;
switch (row)
{
case 0:
{
}
break;
case 1:
if (joy.fire_)
{
done = 1;
}
break;
}
}
}
#endif
int settings()
{
struct joystick_status joy;
......
debug_adjust = row==8 ? 128 : 0;
printf("Cart: %s", get_cart_select() ? file_name(files[4]) : "NONE");
debug_pos = 520;
/* debug_pos = 520;
debug_adjust = row==9 ? 128 : 0;
printf("Load memory");
debug_pos = 560;
debug_adjust = row==10 ? 128 : 0;
printf("Save memory (for debugging)");
printf("Save memory (for debugging)");*/
#ifdef USBSETTINGS
debug_pos = 640;
debug_adjust = row==11 ? 128 : 0;
printf("USB");
debug_pos = 480;
debug_adjust = row==9 ? 128 : 0;
printf("Rotate USB joysticks");
debug_pos = 720;
debug_adjust = row==12 ? 128 : 0;
debug_pos = 560;
debug_adjust = row==10 ? 128 : 0;
printf("Exit");
debug_adjust = 0;
usb_devices(640);
#else
debug_pos = 640;
debug_adjust = row==11 ? 128 : 0;
debug_pos = 520;
debug_adjust = row==9 ? 128 : 0;
printf("Exit");
#endif
......
row+=joy.y_;
if (row<0) row = 0;
#ifdef USB
if (row>12) row = 12;
#ifdef USBSETTINGS
if (row>10) row = 10;
#else
if (row>11) row = 11;
if (row>9) row = 9;
#endif
switch (row)
{
......
}
}
break;
case 9:
/* case 9:
case 10:
{
if (joy.fire_)
......
}
}
}
break;
break;*/
#ifdef USBSETTINGS
case 11:
case 9:
if (joy.fire_)
{
usb_settings();
rotate_usb_sticks();
}
break;
case 12:
case 10:
if (joy.fire_)
{
done = 1;
}
break;
#else
case 11:
case 9:
if (joy.fire_)
{
done = 1;
......
}
firmware/main.h
#define after_set_reg_hook() do { } while(0)
#endif
#ifdef USB
#include "usb.h"
#include "usb/debug.h"
#define USBSETTINGS
#endif
#include "memory.h"
extern char ROM_DIR[];
......
return 0;
}
#ifdef USBSETTINGS
void rotate_usb_sticks()
{
int max_jindex = hid_get_joysticks()-1;
if (max_jindex == 0) // If only one stick connected allow it to be 0 or 1
{
max_jindex = 1;
}
int i;
usb_device_t * devices = usb_get_devices();
for (i=0;i!=USB_NUMDEVICES;++i)
{
usb_device_t *dev = devices + i;
if (dev->bAddress)
{
if (dev->class == &usb_hid_class)
{
int j=0;
for (j=0;j!=dev->hid_info.bNumIfaces;++j)
{
int type = dev->hid_info.iface[j].device_type;
if (type == HID_DEVICE_JOYSTICK)
{
int jindex = dev->hid_info.iface[j].jindex;
event_digital_joystick(jindex, 0);
event_analog_joystick(jindex, 0,0);
jindex++;
if (jindex > max_jindex)
jindex = 0;
dev->hid_info.iface[j].jindex = jindex;
}
}
}
}
}
}
void usb_devices(int debugPos)
{
usb_device_t *devices = usb_get_devices();
int nextDebugPos = debugPos;
int i=0;
int j=0;
for (i=0;i!=USB_NUMDEVICES;++i)
{
debug_pos = nextDebugPos;
usb_device_t *dev = devices + i;
if (dev->bAddress)
{
if (dev->class == &usb_hub_class)
{
//printf("%x.Hub. %d ports. poll=%d",dev->bAddress,dev->hub_info.bNbrPorts, dev->hub_info.bPollEnable);
printf("%x.Hub. %d ports",dev->bAddress,dev->hub_info.bNbrPorts);
}
else if (dev->class == &usb_hid_class)
{
//printf("%x.HID. %d ifaces. poll=%d",dev->bAddress,dev->hid_info.bNumIfaces,dev->hid_info.bPollEnable);
printf("%x.HID",dev->bAddress);
int adjPos = 0;
for (j=0;j!=dev->hid_info.bNumIfaces;++j)
{
//usb_device_descriptor_t desc;
int type = dev->hid_info.iface[j].device_type;
if (adjPos && (type == HID_DEVICE_MOUSE || type == HID_DEVICE_KEYBOARD || type == HID_DEVICE_JOYSTICK))
{
nextDebugPos = nextDebugPos+40;
debug_pos = nextDebugPos;
}
if (type == HID_DEVICE_MOUSE)
printf(" Mouse");
else if (type == HID_DEVICE_KEYBOARD)
printf(" Keyboard");
else if (type == HID_DEVICE_JOYSTICK)
{
printf(" Joystick:%d",dev->hid_info.iface[j].jindex+1);
}
else
continue;
adjPos = 1;
/*int rcode = usb_get_dev_descr( dev, 12, &desc );
if( !rcode ) {
printf(" V:%02x%02x P:%02x%02x C:%02x",desc.idVendorH,desc.idVendorL,desc.idProductH,desc.idProductL,desc.bDeviceClass);
}*/
}
}
}
nextDebugPos = nextDebugPos+40;
}
}
#endif
firmware/mif_file_stuff/rom_prologue.vhd
DEPTH = 4096; % Memory depth and width are required %
DEPTH = 8192; % Memory depth and width are required %
% DEPTH is the number of addresses %
WIDTH = 32; % WIDTH is the number of bits of data per word %
% DEPTH and WIDTH should be entered as decimal numbers %
firmware/usb/events.h
debug_pos = 200 + idx*40;
printf("JOY:%d:%08x ",idx,jmap);
}*/
idx = idx&1;
if (idx == 0)
{
*zpu_out2 = jmap;
......
void event_analog_joystick(uint8_t idx, int8_t x, int8_t y)
{
//printf("Event analog joystick:%d %d %d\n", idx,x,y);
idx = idx&1;
if (analogx[idx]!=x || analogy[idx]!=y)
{
analogx[idx] = x;
firmware/usb/hid.c
{ 7, 7, 0x41, 0 }, /* 4 -> f8 */
{ 10, 11, 0x43, 0 }, /* l2&r2 -> f10 */
{ 8, 11, 0x42, 0 }, /* l1&r2 -> f9 */
{ 6, 6, 0x00, 4 }, /* 3 -> fire */
#endif
#ifdef FIRMWARE_5200
{ 13, 13, 0x3a, 0 }, /* start -> f1 (start) */
{ 12, 12, 0x3b, 0 }, /* select -> f2 (pause) */
{ 10, 10, 0x00, 5 }, /* l2 -> fire2 */
{ 11, 11, 0x00, 5 }, /* r2 -> fire2 */
{ 7, 7, 0x00, 5 }, /* 4 -> fire2 */
{ 6, 6, 0x00, 5 }, /* 3 -> fire2 */
{ 7, 7, 0x00, 4 }, /* 4 -> fire */
#endif
{ 4, 4, 0x45, 0 }, /* 1 -> f12 */
{ 5, 5, 0x44, 0 }, /* 2 -> f11 */
{ 14, 15, 0x29, 0 }, /* both sticks -> esc */
{ 6, 6, 0x00, 4 }, /* 3 -> fire */
{ 8, 8, 0x00, 4 }, /* l1 -> fire */
{ 9, 9, 0x00, 4 }, /* r1 -> fire */
{ 10, 15, 0x43, 0 }, /* l2& rstick click -> f10 */
......
if (buf[2]&0x40) jmap |= 1<<14; //lstick click
if (buf[2]&0x80) jmap |= 1<<15; //rstick click
a[0] = 128+(int)buf[7];
a[1] = 128+(int)buf[9];
int8_t x = (char)buf[7];
int8_t y = (char)buf[9];
a[0] = 128+x;
a[1] = 127-y;
}
else
{
......
conf->joystick.axis[i].logical.min);
}
}
if(a[0] < 64) jmap |= JOY_LEFT;
if(a[0] > 192) jmap |= JOY_RIGHT;
if(a[1] < 64) jmap |= JOY_UP;
if(a[1] > 192) jmap |= JOY_DOWN;
// iprintf("JOY X:%d Y:%d\n", a[0], a[1]);
......
if(buf[conf->joystick.button[i].byte_offset] &
conf->joystick.button[i].bitmask) jmap |= (JOY_BTN1<<i);
}
if(a[0] < 64) jmap |= JOY_LEFT;
if(a[0] > 192) jmap |= JOY_RIGHT;
if(a[1] < 64) jmap |= JOY_UP;
if(a[1] > 192) jmap |= JOY_DOWN;
// iprintf("JOY D:%d\n", jmap);

Also available in: Unified diff