田舎おやじの言動log

田舎で暮らすおっさんの言動を適当にロギング。

恥ずかしい勘違いとYM2413とYMZ294

連休をほぼすべてYM2413とYMZ294のVGMプレーヤーに消費。

MCP23017を使ったシールド変換もどきでうまくいかなかったので、わざわざレベル変換モジュールを使ってPico用のVGM再生基板を作った。そしてMCP23017はシロであったことに気付く。レベル変換版でもうまく動作しない。というか音がそもそもまともに出ない…。
ロジアナで異常が無いのに何でやと半日ほど悩んだ末に、YM2413の制御信号を受け付けるタイミングが結構シビアなのに気づき、各信号ごとに僅かながらウェイトを入れつつ、CSを下げる時間をきちんと発音するレベルまで延ばしていって調整。これでようやくMCP23017版と同じ動作まで復帰した。

続いて音量が下がる件は音色をピアノからギターに変えてみて気付く。こっちでは出るやん!前回症状の音量が不安定かつ消えるあれは、ArduinoからPicoにコードをコピペした際に潜在的なバグが顕在化したことが根本原因。よくよく調べると流用した関数の音色指定におかしなビットが加わっていた。ウェイト調整時の動作から判断するに、どうも本来遅い分には正常に音は鳴る模様。I2Cのせいにしてしまって実に恥ずかしい。いまさら検証するのもだるいのでやらないが、汚名返上としていつかI2C経由でも動作するのを作ろう。

さて。ここまででYM2413側は正しくVGMデータで制御可能になったので、続けてSSG側の制御に移る。本来はAY8910のつもりでそちらもYM2149も入手していたのだが、40ピンとあまりにもデカいうえにSSGの合成が面倒そうで躊躇していたところ、手持ちの部品の中にYMZ294が紛れているのを発見しこれを採用。何で持っていたのか知らないが、昔の自分をちょっと褒めてやりたい。

ただこちらも思いっきりハマる。YM2413の最初と同じく、ロジアナで異常が無いのに音が出ない。回路の修正や検証用のサンプルコード追加を含めてほぼ1日費やしたところ、ようやくそれらしい原因に気付く。自作の合成アンプ回路がまるで間違っており、そちらにSSG出力が繋がると全くの無応答になってしまう。あー…やっぱソフト屋にアナログ、それもオーディオをやらしちゃいかんということか。YMZ294で空いたスペースにかっこつけて音響用コンデンサなんか付けるんじゃ無かった…。

そして今、なんとか64KB分のVGMデータでSSGとFM出力が同時に鳴るところまでこぎ着けた。色々と修正することが山積みではあるが…。

まず回路。写真を見て判るように、各出力をまともにミキシング出来ておらず外部のミキサーに頼っている。直結なので音量バランスも滅茶苦茶で、うまく合わせるとFM側で結構なノイズが乗る。おまけになぜか真ん中のステレオジャックだとどうやっても音が出ない。導通は問題ないのだがもう訳わかんない。本当にアナログ回路怖い。
そして意味も無く12V電源にしたおかげで、5Vレギュレータが燃えるように熱くなっている。こりゃいかんと5,6VのACアダプターにしたところ、今度はとにかくノイズが酷くなりメタメタ。ひとまず順に調べて解決していくしかない。最終的には5Vからの昇圧でアンプとミキサー基板を最上段にスタックする形になるだろう。ちなみに心底今更の話、レベル変換基板無しでもFM音源IC自体はTTLレベルなので制御できるらしい。なんてこった。

ソフトウェア側は何よりもまずSDカードから読み込むようにしないと始まらない。今更なのだがVGMファイルはチップ制御のしやすさと引き換えにとにかくサイズがデカい。MSX系はいっそMGS形式に対応させた方がいいかもしれない。一応ヘッダーだけは抜き出せるようになってはいるのだが…。
細かいところではバックグラウンド再生だったり、ファイル情報をLCDに表示させたり。SCC再生もか。LPC810でやっている人がいるのを真似てチップだけは入手済みだ。

そんなわけで気がつくとMSXの改造やZ80を弄るところから大きく脱線してしまった。まぁ楽しいからいいが。