いいもの見つけました!NEO GEO PAD2。ELECOMのPS-USBコンバータでPS3につなげると、NEO GEO PAD USBではダメだったPS2のゲームで使えました。
http://game.snkplaymore.co.jp/official/kof94/neogeopad2/index.html
これをPCにもつなげてみて、ジョイスティックのボタン配列を確認して、メガドラ6BパッドをNEO GEO PAD2の配列に変更しました。
MD PS WIN
A × (3)
B ○ (2)
C R1 (8)
X □ (4)
Y △ (1)
Z L1 (7)
M SELECT(10)
S START (9)
N/A L2 (5)
N/A R2 (6)
さらに、以下を参考に1つのFWで、6Bパッド、3Bパッド、MARK3パッドにも対応してみました
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 (0x1C) #define MDPAD_START (0x2C) #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) #define MDPAD_LLLL (0x0f) 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((pin1 & MDPAD_LEFT)==0) x = 0; // if((pin1 & MDPAD_RIGHT)==0) x = 255; // if((pin1 & MDPAD_UP)==0) y = 0; // if((pin1 & MDPAD_DOWN)==0) y = 255; // if((pin2 & MDPAD_A)==0) sw1 |= (1<<2); // X if((pin1 & MDPAD_B)==0) sw1 |= (1<<1); // O if((pin1 & MDPAD_C)==0 && (pin4 & MDPAD_LLLL)==0) sw1 |= (1<<7); // R1 if((pin1 & MDPAD_C)==0 && (pin4 & MDPAD_LLLL)!=0 && (pin2 & MDPAD_START)!=0) sw1 |= (1<<0); // /\ if((pin2 & MDPAD_START)==0) sw2 |= (1<<0); // start if((pin5 & MDPAD_X)==0 && (pin4 & MDPAD_LLLL)==0) sw1 |= (1<<3); // [] if((pin5 & MDPAD_Y)==0 && (pin4 & MDPAD_LLLL)==0) sw1 |= (1<<0); // /\ if((pin5 & MDPAD_Z)==0 && (pin4 & MDPAD_LLLL)==0) sw1 |= (1<<6); // L1 if((pin5 & MDPAD_M)==0 && (pin4 & MDPAD_LLLL)==0) sw2 |= (1<<1); // select *p++ = x; // x *p++ = y; // y *p++ = sw1; // sw1 *p++ = sw2; // sw2 return(0); }