////////////////////////////////////////////////////////////////////////// // Kingwon Keyboard // // written by Temryu // // last 2013/10/13 // ////////////////////////////////////////////////////////////////////////// void EXPAD_Kingwon_Keyboard::Reset() { ScanNo =0; count4017 =0; } BYTE EXPAD_Kingwon_Keyboard::Read4017() { BYTE data = 0xFF; switch( ScanNo ) { case 0: if(count4017==0) if( DirectInput.m_Sw[DIK_Z ] ) data &= ~0x02; if(count4017==1) if( DirectInput.m_Sw[DIK_A ] ) data &= ~0x02; if(count4017==2) if( DirectInput.m_Sw[DIK_Q ] ) data &= ~0x02; if(count4017==3) if( DirectInput.m_Sw[DIK_1 ] ) data &= ~0x02; if(count4017==4) if( DirectInput.m_Sw[DIK_LSHIFT ] ) data &= ~0x02; if(count4017==4) if( DirectInput.m_Sw[DIK_RSHIFT ] ) data &= ~0x02; if(count4017==5) if( DirectInput.m_Sw[DIK_CAPITAL] ) data &= ~0x02; if(count4017==6) if( DirectInput.m_Sw[DIK_TAB ] ) data &= ~0x02; if(count4017==7) if( DirectInput.m_Sw[DIK_GRAVE ] ) data &= ~0x02; count4017++ ; break; case 1: if(count4017==0) if( DirectInput.m_Sw[DIK_C] ) data &= ~0x02; if(count4017==1) if( DirectInput.m_Sw[DIK_D] ) data &= ~0x02; if(count4017==2) if( DirectInput.m_Sw[DIK_E] ) data &= ~0x02; if(count4017==3) if( DirectInput.m_Sw[DIK_3] ) data &= ~0x02; if(count4017==4) if( DirectInput.m_Sw[DIK_X] ) data &= ~0x02; if(count4017==5) if( DirectInput.m_Sw[DIK_S] ) data &= ~0x02; if(count4017==6) if( DirectInput.m_Sw[DIK_W] ) data &= ~0x02; if(count4017==7) if( DirectInput.m_Sw[DIK_2] ) data &= ~0x02; count4017++ ; break; case 2: if(count4017==0) if( DirectInput.m_Sw[DIK_B] ) data &= ~0x02; if(count4017==1) if( DirectInput.m_Sw[DIK_G] ) data &= ~0x02; if(count4017==2) if( DirectInput.m_Sw[DIK_T] ) data &= ~0x02; if(count4017==3) if( DirectInput.m_Sw[DIK_5] ) data &= ~0x02; if(count4017==4) if( DirectInput.m_Sw[DIK_V] ) data &= ~0x02; if(count4017==5) if( DirectInput.m_Sw[DIK_F] ) data &= ~0x02; if(count4017==6) if( DirectInput.m_Sw[DIK_R] ) data &= ~0x02; if(count4017==7) if( DirectInput.m_Sw[DIK_4] ) data &= ~0x02; count4017++ ; break; case 3: if(count4017==0) if( DirectInput.m_Sw[DIK_M] ) data &= ~0x02; if(count4017==1) if( DirectInput.m_Sw[DIK_J] ) data &= ~0x02; if(count4017==2) if( DirectInput.m_Sw[DIK_U] ) data &= ~0x02; if(count4017==3) if( DirectInput.m_Sw[DIK_7] ) data &= ~0x02; if(count4017==4) if( DirectInput.m_Sw[DIK_N] ) data &= ~0x02; if(count4017==5) if( DirectInput.m_Sw[DIK_H] ) data &= ~0x02; if(count4017==6) if( DirectInput.m_Sw[DIK_Y] ) data &= ~0x02; if(count4017==7) if( DirectInput.m_Sw[DIK_6] ) data &= ~0x02; count4017++ ; break; case 4: if(count4017==0) if( DirectInput.m_Sw[DIK_PERIOD] ) data &= ~0x02; if(count4017==1) if( DirectInput.m_Sw[DIK_L ] ) data &= ~0x02; if(count4017==2) if( DirectInput.m_Sw[DIK_O ] ) data &= ~0x02; if(count4017==3) if( DirectInput.m_Sw[DIK_9 ] ) data &= ~0x02; if(count4017==4) if( DirectInput.m_Sw[DIK_COMMA ] ) data &= ~0x02; if(count4017==5) if( DirectInput.m_Sw[DIK_K ] ) data &= ~0x02; if(count4017==6) if( DirectInput.m_Sw[DIK_I ] ) data &= ~0x02; if(count4017==7) if( DirectInput.m_Sw[DIK_8 ] ) data &= ~0x02; count4017++ ; break; case 5: if(count4017==0) if( DirectInput.m_Sw[DIK_BACKSLASH ] ) data &= ~0x02; if(count4017==1) if( DirectInput.m_Sw[DIK_APOSTROPHE] ) data &= ~0x02; if(count4017==2) if( DirectInput.m_Sw[DIK_LBRACKET ] ) data &= ~0x02; if(count4017==3) if( DirectInput.m_Sw[DIK_MINUS ] ) data &= ~0x02; if(count4017==4) if( DirectInput.m_Sw[DIK_SLASH ] ) data &= ~0x02; if(count4017==5) if( DirectInput.m_Sw[DIK_SEMICOLON ] ) data &= ~0x02; if(count4017==6) if( DirectInput.m_Sw[DIK_P ] ) data &= ~0x02; if(count4017==7) if( DirectInput.m_Sw[DIK_0 ] ) data &= ~0x02; count4017++ ; break; case 6: if(count4017==0) if( DirectInput.m_Sw[DIK_END ] ) data &= ~0x02; if(count4017==1) if( DirectInput.m_Sw[DIK_LEFT ] ) data &= ~0x02; if(count4017==2) if( DirectInput.m_Sw[DIK_HOME ] ) data &= ~0x02; // if(count4017==3) if( FALSE ) data &= ~0x02; //Caps Lock if(count4017==4) if( DirectInput.m_Sw[DIK_BACK ] ) data &= ~0x02; if(count4017==5) if( DirectInput.m_Sw[DIK_RETURN ] ) data &= ~0x02; if(count4017==6) if( DirectInput.m_Sw[DIK_RBRACKET] ) data &= ~0x02; if(count4017==7) if( DirectInput.m_Sw[DIK_EQUALS ] ) data &= ~0x02; count4017++ ; break; case 7: if(count4017==0) if( DirectInput.m_Sw[DIK_NEXT ] ) data &= ~0x02; if(count4017==1) if( DirectInput.m_Sw[DIK_RIGHT ] ) data &= ~0x02; if(count4017==2) if( DirectInput.m_Sw[DIK_PRIOR ] ) data &= ~0x02; if(count4017==3) if( DirectInput.m_Sw[DIK_ESCAPE] ) data &= ~0x02; //ΊΓΟρΚΗ if(count4017==4) if( DirectInput.m_Sw[DIK_DOWN ] ) data &= ~0x02; // if(count4017==5) if( FALSE ) data &= ~0x02; //Num 5 if(count4017==6) if( DirectInput.m_Sw[DIK_UP ] ) data &= ~0x02; // if(count4017==7) if( FALSE ) data &= ~0x02; //??? count4017++ ; break; case 8: if(count4017==0) if( DirectInput.m_Sw[DIK_DELETE ] ) data &= ~0x02; if(count4017==1) if( DirectInput.m_Sw[DIK_ADD ] ) data &= ~0x02; if(count4017==2) if( DirectInput.m_Sw[DIK_MULTIPLY ] ) data &= ~0x02; if(count4017==3) if( DirectInput.m_Sw[DIK_NUMPADENTER] ) data &= ~0x02; if(count4017==4) if( DirectInput.m_Sw[DIK_INSERT ] ) data &= ~0x02; if(count4017==5) if( DirectInput.m_Sw[DIK_SPACE ] ) data &= ~0x02; if(count4017==6) if( DirectInput.m_Sw[DIK_LMENU ] ) data &= ~0x02; if(count4017==6) if( DirectInput.m_Sw[DIK_RMENU ] ) data &= ~0x02; if(count4017==7) if( DirectInput.m_Sw[DIK_LCONTROL ] ) data &= ~0x02; if(count4017==7) if( DirectInput.m_Sw[DIK_RCONTROL ] ) data &= ~0x02; count4017++ ; break; case 9: if(count4017==0) if( DirectInput.m_Sw[DIK_F8] ) data &= ~0x02; if(count4017==1) if( DirectInput.m_Sw[DIK_F7] ) data &= ~0x02; if(count4017==2) if( DirectInput.m_Sw[DIK_F6] ) data &= ~0x02; if(count4017==3) if( DirectInput.m_Sw[DIK_F5] ) data &= ~0x02; if(count4017==4) if( DirectInput.m_Sw[DIK_F4] ) data &= ~0x02; if(count4017==5) if( DirectInput.m_Sw[DIK_F3] ) data &= ~0x02; if(count4017==6) if( DirectInput.m_Sw[DIK_F2] ) data &= ~0x02; if(count4017==7) if( DirectInput.m_Sw[DIK_F1] ) data &= ~0x02; count4017++ ; break; case 10: //??? break; case 11: //??? break; case 12: //??? break; } return data; } void EXPAD_Kingwon_Keyboard::Write4016( BYTE data ) { if( data == 0x04 ) { count4017 = 0; } else if( data == 0x05 ) { if( ++ScanNo > 12 ) ScanNo = 0; } else if( data == 0x07 ) { ScanNo = 0; } }