過去ログ

                                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;
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 148