ROMEO
  ページを編集するにはログインが必要です。
ROMEO対応プログラムの作成とかソースとか
julietライブラリ
GORRYさんのページもしくはうささんのページより取得してください。
YM2151 X1/X3切り替え
こんな感じでいかがでしょうか?
juliet.h
/* clock */ #define YMF288_ROMEO_CLOCK (8000000) /* ROMEO YMF288 Clock( :8.000000) */ #define YM2151_ROMEO_CLOCK_X1 (4000000) /* ROMEO YM2151 Clock(X1:4.000000) */ #define YM2151_ROMEO_CLOCK_X3 (3579545) /* ROMEO YM2151 Clock(X3:3.579545) */ #define YM2151OSC_X1 (0x00) /* use X1(4.000000) */ #define YM2151OSC_X3 (0x01) /* use X3(3.579545) */ #define X1_MAX (4096000) /* X1 MAX */ #define X1_MIN (4000000) /* X1 MIN */ #define X3_MAX (3582000) /* X3 MAX */ #define X3_MIN (3000000) /* X3 MIN */ #define juliet_YM2151SetCurrentOsc(osc) (ym2151osc = osc) #define juliet_YM2151GetCurrentOsc() (ym2151osc) BYTE ym2151osc = YM2151OSC_X1; /* YM2151 oscillator (X1 or X3) */
juliet.c
/**
 *  YM2151 オシレータ選択. 
 *  YM2151 のクロックから使用するオシレータを変更する。  
 *    'clock' is the chip clock in Hz  
 *  
 *  @param int clock クロック  
 */  
void juliet_YM2151OscSelect(int clock)  
{ 
    if (juliet_YM2151IsEnable()) {  
        // 4.000-4.096MHz     
        if (clock >= X1_MIN && clock <= X1_MAX) {         
            juliet_YM2151SetCurrentOsc(YM2151OSC_X1);    // X1:4.000000         
        }             
        // 3.000-3.582MHz         
        else if (clock >= X3_MIN && clock <= X3_MAX) {         
            juliet_YM2151SetCurrentOsc(YM2151OSC_X3);    // X3:3.579545         
        }             
        // ?MHz         
        else {         
            juliet_YM2151SetCurrentOsc(YM2151OSC_X1);    // default:X1:4.000000         
        }             
        romeo.out32(romeo.addr + ROMEO_YM2151CTRL, juliet_YM2151GetCurrentOsc());         
        Sleep(10);                // 44.1kHz x 192 clk = 4.35ms 以上ないと、DACのリセットかからない         
    }         
}
    
Keyword(s):
References:[SideMenu]