いいもの見つけました
http://d.hatena.ne.jp/nicotakuya/20081103
リンク先URLが間違っていたので再リンク
http://nicotak.com/usb/mdpad.zip
ここら辺を参考にmdpad.cを、6Bパッドに対応してみました
http://applause.elfmimi.jp/md6bpad.html
//--------------------------------------------------------------------- // megadrive pad // by Takuya Matsubara / NICO Corp. 2006-2008 // http://www.nicotak.com/usb/ // 動作無保証です。 #include "fx2.h" #include "fx2regs.h" #include "mdpad.h" #define MDPAD_PORT IOA // #define MDPAD_DDR OEA // #define MDPAD_PIN IOA // #define MDPAD_SELPORT IOA // 用ポート #define MDPAD_SELDDR OEA // 用ポート #define MDPAD_SELBIT (1<<6) // 用ポート #define MDPAD_SELB MDPAD_SELPORT|=MDPAD_SELBIT // #define MDPAD_SELA MDPAD_SELPORT&=~MDPAD_SELBIT // #define MDPAD_UP (1<<0) #define MDPAD_DOWN (1<<1) #define MDPAD_LOW1 (1<<2) #define MDPAD_LOW2 (1<<3) #define MDPAD_A (1<<4) #define MDPAD_START (1<<5) #define MDPAD_LEFT (1<<2) #define MDPAD_RIGHT (1<<3) #define MDPAD_B (1<<4) #define MDPAD_C (1<<5) #define MDPAD_Z (1<<0) #define MDPAD_Y (1<<1) #define MDPAD_X (1<<2) #define MDPAD_M (1<<3) char mdpad_get(unsigned char *p) { char pin1; char pin2; char pin3; char pin4; char pin5; char pin6; char x; char y; char sw1; char sw2; x=128; y=128; sw1=0; sw2=0; MDPAD_SELDDR |= MDPAD_SELBIT; MDPAD_SELB; EZUSB_Delay(0); pin1 = MDPAD_PIN; MDPAD_SELA; EZUSB_Delay(0); pin2 = MDPAD_PIN; MDPAD_SELB; EZUSB_Delay(0); pin3 = MDPAD_PIN; MDPAD_SELA; EZUSB_Delay(0); pin4 = MDPAD_PIN; MDPAD_SELB; EZUSB_Delay(0); pin5 = MDPAD_PIN; MDPAD_SELA; EZUSB_Delay(0); pin6 = MDPAD_PIN; if((pin3 & MDPAD_LEFT)==0) x = 0; // if((pin3 & MDPAD_RIGHT)==0) x = 255; // if((pin3 & MDPAD_UP)==0) y = 0; // if((pin3 & MDPAD_DOWN)==0) y = 255; // if((pin4 & MDPAD_A)==0) sw1 |= (1<<0); // batu if((pin3 & MDPAD_B)==0) sw1 |= (1<<1); // maru if((pin3 & MDPAD_C)==0) sw1 |= (1<<2); // sikaku if((pin4 & MDPAD_START)==0) sw2 |= (1<<1); // start if((pin5 & MDPAD_X)==0) sw2 |= (1<<2); // L if((pin5 & MDPAD_Y)==0) sw1 |= (1<<3); // sankaku if((pin5 & MDPAD_Z)==0) sw2 |= (1<<3); // R if((pin5 & MDPAD_M)==0) sw2 |= (1<<0); // select *p++ = x; // x *p++ = y; // y *p++ = sw1; // sw1 *p++ = sw2; // sw2 return(0); }