Revision 425
Added by markw about 10 years ago
| 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);
|
||
|
|
||
Ádded USB joystick switching + misc fixes for mcc release 1.3