Page 148 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼Doremikko Feather 03/11/15(土) 23:10 ─────────────────────────────────────── ■題名 : Doremikko ■名前 : Feather ■日付 : 03/11/15(土) 23:10 -------------------------------------------------------------------------
Info: Patches VirtuaNES 0.86a for use with the keyboard. Note: "Edit->Advanced->Untabify Selection" used Usage: Uses joypad 1 and keyboard together Patch: [NES/PadEX/EXPAD_Doremikko.cpp] ////////////////////////////////////////////////////////////////////////// // Doremikko Keyboard // // Original source: Unofficial Nester ////////////////////////////////////////////////////////////////////////// void EXPAD_Doremikko::Reset() { doremi_scan = 0; doremi_out = 0; doremi_reg = 0; } void EXPAD_Doremikko::Write4016( BYTE data ) { if( (data & 0x02) && !(doremi_reg & 0x02) ) { doremi_scan = 0; doremi_out = 0; } if( (data & 0x01) && !(doremi_reg & 0x01) ) { doremi_scan++; doremi_out = 0; } doremi_reg = data; } BYTE EXPAD_Doremikko::Read4017 () { BYTE data = 0xFF; switch( doremi_scan ) { case 1: if( DirectInput.m_Sw[DIK_Z] ) data &= ~0x10; if( DirectInput.m_Sw[DIK_S] ) data &= ~0x20; break; case 2: if( DirectInput.m_Sw[DIK_X] ) data &= ~0x01; if( DirectInput.m_Sw[DIK_D] ) data &= ~0x02; if( DirectInput.m_Sw[DIK_C] ) data &= ~0x04; if( DirectInput.m_Sw[DIK_V] ) data &= ~0x08; if( DirectInput.m_Sw[DIK_G] ) data &= ~0x10; if( DirectInput.m_Sw[DIK_B] ) data &= ~0x20; break; case 3: if( DirectInput.m_Sw[DIK_H] ) data &= ~0x01; if( DirectInput.m_Sw[DIK_N] ) data &= ~0x02; if( DirectInput.m_Sw[DIK_J] ) data &= ~0x04; if( DirectInput.m_Sw[DIK_M] ) data &= ~0x08; if( DirectInput.m_Sw[DIK_COMMA] ) data &= ~0x10; if( DirectInput.m_Sw[DIK_L] ) data &= ~0x20; break; case 4: if( DirectInput.m_Sw[DIK_PERIOD] ) data &= ~0x01; if( DirectInput.m_Sw[DIK_SEMICOLON] ) data &= ~0x02; if( DirectInput.m_Sw[DIK_SLASH] ) data &= ~0x04; if( DirectInput.m_Sw[DIK_Q] ) data &= ~0x08; if( DirectInput.m_Sw[DIK_2] ) data &= ~0x10; if( DirectInput.m_Sw[DIK_W] ) data &= ~0x20; break; case 5: if( DirectInput.m_Sw[DIK_3] ) data &= ~0x01; if( DirectInput.m_Sw[DIK_E] ) data &= ~0x02; if( DirectInput.m_Sw[DIK_4] ) data &= ~0x04; if( DirectInput.m_Sw[DIK_R] ) data &= ~0x08; if( DirectInput.m_Sw[DIK_T] ) data &= ~0x10; if( DirectInput.m_Sw[DIK_6] ) data &= ~0x20; break; case 6: if( DirectInput.m_Sw[DIK_Y] ) data &= ~0x01; if( DirectInput.m_Sw[DIK_7] ) data &= ~0x02; if( DirectInput.m_Sw[DIK_U] ) data &= ~0x04; if( DirectInput.m_Sw[DIK_I] ) data &= ~0x08; if( DirectInput.m_Sw[DIK_9] ) data &= ~0x10; if( DirectInput.m_Sw[DIK_O] ) data &= ~0x20; break; case 7: if( DirectInput.m_Sw[DIK_0] ) data &= ~0x01; if( DirectInput.m_Sw[DIK_P] ) data &= ~0x02; if( DirectInput.m_Sw[DIK_MINUS] ) data &= ~0x04; //if( DirectInput.m_Sw[DIK_@] ) data &= ~0x08; if( DirectInput.m_Sw[DIK_GRAVE] ) data &= ~0x08; break; } if( doremi_out ) { data = (data & 0xF0) >> 3; } else { data = (data & 0x0F) << 1; } //data = (0xFF - data) & 0x1e; doremi_out = !doremi_out; return data; } void EXPAD_Doremikko::SetSyncData( INT type, LONG data ) { doremi_out = ((SBYTE)( data &0x000000FF)); doremi_reg = ((SBYTE)((data>> 8)&0x000000FF)); doremi_scan = ((SBYTE)((data>>16)&0x000000FF)); } LONG EXPAD_Doremikko::GetSyncData( INT type ) { LONG data = 0; data = (doremi_out&0xFF)| ((doremi_reg&0xFF)<< 8)| ((doremi_scan&0xFF)<<16); return data; } -------------------------------------------------------- [NES/PadEX/EXPAD_Doremikko.h] ////////////////////////////////////////////////////////////////////////// // Doremikko Keyboard // ////////////////////////////////////////////////////////////////////////// class EXPAD_Doremikko : public EXPAD { public: EXPAD_Doremikko( NES* parent ) : EXPAD( parent ) {} void Reset(); BYTE Read4017(); void Write4016( BYTE data ); void SetSyncData( INT type, LONG data ); LONG GetSyncData( INT type ); protected: BYTE doremi_reg; BYTE doremi_scan; BYTE doremi_out; private: }; -------------------------------------------------------- [NES/PAD.cpp] (line 173) if( nes->rom->GetMakerID() == 0xA4 && nes->rom->GetGameID() == 0x44524520 ) { // Doremikko (FDS) SetExController( EXCONTROLLER_DOREMIKKO ); } (line 244) case EXCONTROLLER_DOREMIKKO: expad = new EXPAD_Doremikko( nes ); break; |