LoginSignup
3
2

More than 3 years have passed since last update.

OPNのF-Number

Last updated at Posted at 2017-08-21

Makeで新しいFM音源チップが出ていたようですが、元祖FM音源チップのYM2203(OPN)を久しぶりに復活させてプログラムを作るためにF-Numberをrubyで計算してみました。

fnum.rb
# Calculation YM2203 F-Number value

oct = 4
div = 6

if ARGV.count == 1 then

  clk = ARGV[0].to_f

# C#, D, D#, E ,F, F#, G, G#, A, A#, B, C
  note = [277.2, 293.7, 311.1, 329.6, 349.2, 370.0, 392.0, 415.3, 440.0, 466.2, 493.9, 523.3]

  for var in note do
    fnum = (var * (2 ** 20) / (clk * 1000 * 1000 / (12 * div))) / (2 ** (oct - 1))
    print fnum.floor.to_s + ", "
  end

  print "¥n"
else
  print "% ruby fnum.rb [clock MHz]¥n"
end

入力クロックを引数に4オクターブの6分周(デフォルト)を計算します。

3.6 MHzで計算してみます。

% ruby fnum.rb 3.6
726, 769, 815, 864, 915, 969, 1027, 1088, 1153, 1222, 1294, 1371, 

昔亜土電子で購入した時にチップに付いてきた日本語のデータシートはコピーの 字がつぶれて解読するのが骨でした。そもそもYM2203のデータシートはちょっと分かりにくい気がします。

C#始まりなのはデータシートに合わせています。

まるめはfloorではなくてround(0)の方が良さそうですがデータシートのビットデータはfloorされているようです。

ちなみにYM3528(OPL)の計算式は以下になります。

fnum = (var * (2 ** 19) / (clk * 1000 * 1000 / 72)) / (2 ** (oct - 1))

OPLのデータシートはround(0)な値が記載されているようです。

ジャンクとして入手したYM3935というチップが手元にあるのですが、ネットで検索しても情報が見つかりません。製造は1997年の31週でSDIP/64ピンという特徴からYM2608(OPNA)やYM2610(OPNB)に近いのではないかと思っています。なにか情報お持ちの方いましたら教えてください。(ここにYAMAHAのチップの一覧がありますが、載ってません。)

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2