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]