ちょっとTea Time!? 昔懐かし音源IC(AY-3-8910A)を動かしてみる! 2025.8.20
夜な夜なALIを覗いていたら、こんなICを見つけました。
AY-3-890Aという、音源用のICです。
これ、以前にもつかったことがあります。といっても、40年以上も前のことです。
この音源ICは、当時はとてもポピュラーで、MSXなどにも搭載されていたように
記憶しています。
ひとつ200円程度なので、昔を懐かしんで買ってみました。
しばらくして到着しましたが、いつものことですが怪しそうなブツだなあ〜。
ちゃんと動くのだろうか?
注文していたものが届きました。使用感がとてもあります。
裏面の刻印がすべて異なるのはご愛敬です。
データシートを探してくる!
ネットからデータシートを探してきましょう。なんか2種類のデータシートがあるようです。
AY-3-8910-datasheet.pdf
General_Instrument_AY-3-8910_text.pdf
全然覚えていないなあ〜
こういった周辺ICの場合は、RDとかWR端子があって、それでデータの送受信をするものだと
思っていましたが、なにやら雰囲気が違います。BDIR,BC1,BC3の3本の制御線をつかって、
レジスターの設定とデータの書き込みを行うようです。へえ〜そうするんだ。
流石に40年前となると、使ったことは覚えていても、どのように使うかまでは覚えていないようです。
というか、こういったものって、ちょっとしたトリガーがあれば、「確かに、そうだったよな〜」と振り返れる
はずなのですが、その気配すらありません。 こりゃ、脳もだいぶ劣化が進んでいるかなあ〜。
で、使い方をみてみて、レジスターは書き込みだけしかしない予定なので.
下記の3パターンだけ使えるようにハードウエアを組むことにしました。
使うのはレジスタの書き込みだけなので、上記の3つのパターンの制御が出来るようにしましょう。
PICO(RP2040)用につくった、バックプレーンがあるので、この差し込み基板として組みましょう。
組み立て!
まずは、最初に回路図から作成です。
最近は、すこしお利口になりまして、簡単な回路でも回路図として残すように心がけています。
というか、そうしないと、ものの1週間もたってしまうと忘れてしまいます。
そうなると、なにがなんだかわからなくなって、最悪はゴミ箱へ直行です。
その事態を避けるために、お利口になった次第です(笑。
この音源ICは外部から1〜2MHzのクロックの供給が必要なのですが、
あまり使い方までは考えていないこともあり、任意の周波数が供給できるように、
Si5351をつかったモジュール基板を使いました。この基板も安価なので、
部品のように気楽につかうことができます。
回路図がかけたので、さっそく組んでみましょう!
まずは回路図を書いてみました。
配線はさほど多くはないので、比較的短時間でできました。
裏面の様子です。ポリウレタン被覆線での配線もだいぶ慣れてきました。
動かしてみましょう! 2025.8.21
簡単に配線チェックです。抜けていたところを修正です。
レジスター設定
このICの設定レジスタは下記になりますが、すべて設定する必要はなさそうです。
R0〜R5:
CH−A,B,Cの発振周波数を12ビットで設定です。
発振周波数fは
f=(クロック周波数)/( 16 x 設定値)
になるようです。発振周波数は1.78977MHzが推奨のようです(中途半端だなあ〜。
設定値の表(Fig.23)をみると、例えばA(ラ)は440Hzで、その設定値は0376(オクタル)です。
なぜオクタル?
面倒ですが、10進にすると254です。検算すると、
f=1.78977E6/(16*254)= 440.396Hzとなります。
なんかズレ大きくないかなあ〜。まあ、気にしないでおきましょう。
R6
ノイズに関する設定ですが、使わないので無視。
R7
出力設定ですが、CH-A,B,Cしか使いません.I/Oポートは出力設定です。
固定値の0b11111000(0xF8)設定でいいでしょう。
R10〜R12
CH-A,B,Cの音量設定です。B4はエンベロープパターンをつかうかどうかですが、まずは使わないので0に。
音量は最大j時が0x0F、無音時が0x00です。
R13〜R15
エンベロープに関する設定ですが、使わないので無視。
R16,17
I/Oポートに関する内容ですが、これも使わないので無視です。
電源を入れてみましょう!プチ?あれ? 2025.8.21
簡単な動作プログラムを入れて、電源ONです。
あれ、液晶表示がなにもでないなあ〜
と思っていたら、
プチ
と嫌な音がしました。あ、ICが壊れた(内部で破裂?)。
急いで、電源を落として配線を確認です。
ああ〜やってしまいました!
基板を裏返して配線をするときに、便利なようにICピン機能のシールを貼っていましたが、
反対になっていなかったようです。そのため、電源を逆接です。
こりゃ、音源ICは2個とも逝ってしまったなあ〜。ちょっと心が折れそうです。
間違えた証拠が残っていました!裏面は左右反対にしておかなくっちゃ!
ただし、2つの幸運がありました。
一つは、とりあえず、購入した4個の内の2個だけしかつかっていなかったこと。
もう一つは怪しいICだったので、一応ICソケットをつかっていたこと。
ということで、配線をしなおして残りの2個で再度動作確認です。
やっぱり、ブツは怪しかった!
配線をしなおして、残りの2個でテストしてみましたが、なぜか動きません。
プルアップしているリセット信号がLレベルになったままです。ICを外すとHレベルになります。
そして1個づつ同じソケットに挿すと、正常に動作するものと、駄目なものがあります。
どうやら、残りの2個のうち1個は不良品のようです。
やっぱりブツは怪しかったようです。
あ〜あ、4個購入したのに使えるのは1個だけかあ〜。
とりあえず、1個でも動くので動作確認を継続です。
とりあえず、なにか信号がでてきたので、動いているようです。
そこで、ダメ元で電源を逆接したICを差し込んでみて試してみることに。
というのも、プチと音がしたのが1回だけだったので、ひょとして1個は
生きている可能性があるからです。で、試してみると、1個は動きました。
ただ、アナログ出力レベルが正常なものから比べると2./3くらいです。
アナログ回路にダメージをうけたのかなあ〜。まあ、それでも2個あれば
実装してテストが継続できそうです。
う〜ん、わからない! え! そうなの!?
動作テストを進めているのですが、なぜかCH-Cからしか信号がでません。
そして不思議なのはCH-Aのボリュームを変更すると、CH-Cのレベルが変ります。
いったいどういうこと?プログラムを何度見直しても間違いはみつかりません。
勿論、配線も何度も見直しましたが正常です。
う〜ん、わからない。やっぱりブツが悪いのかなあ〜。
色々とソフトを変更して試してみますが、わかりません。
で、マニュアルをみていてある違和感を感じました。
R7のつぎはR10になっています。
ひょっとしてレジスター番号は8進数表示なのでは?
そう考えると、すべての不具合原因の辻褄があいます。
で、プログラムでのレジスタ番号を変更したら、無事動き出しました。
こんなところを8進数表記なんかにするなよ!!!!!
ああ〜疲れた!
続きはまた後日にしましょう。
回路図も若干変更しました。
ICのシールを張り直して、再度配線をしなおしています。
残念ながら、電源を一度逆接したICのアナログ出力が少し低いです。
MIDIファイルを調べよう! 2025.8.23
せっかく信号がでるようになったのですが、単純にピーとかブーとかだけの音出しでは味気ない。
ということで、音楽をならしたいものです。
なんせ、一応このサイトが「お気楽オーディオ」ですから(汗。
#その割りに、オーディオネタが少ないですが(汗
音源を自分で作成するのは大変ですから、ここは横着してMIDIファイルのDLとしましょう。
そうすれば、色々な曲を鳴らすことができます。
ただ、音を出すためにはMIDIファイルのフォーマットから勉強する必要があります。
MIDIフォーマットについて解説しているサイトはいくつもあるので、そこでお勉強です。
SMF(Standard MIDI File)フォーマット解説 | 技術的読み物 | FISH&BREAD
Welcome to yyagi's web site. - SMF (Standard MIDI Files) の構造
SMFの基礎知識
MIDIにはデータの組みが1つだけのFORMAT0と、複数の組み合わせのFORMAT1があります。
FORMAT2というのもあるのですが、これはほとんどないようです。
で、どうやらFORMAT1というものが主流のようなのですが、複数のデータを同時に処理していくのは
大変ですし、将来的には非力なCPM80でも動かしたいと考えています。
そのため、データが1つのFORMAT0が望ましいのです。そこは、世の中、便利なもので、
FORMAT1からFORMAT0に変換するフリーソフトもありました。
https://www.vector.co.jp/soft/win95/art/se491668.html
ほんと、頭が下がります。まずはこのソフトをつかってFORMAT1からFORMAT0に変換したのち、
MIDIファイルの解析プログラムを作成&検証です。
音源足りる?
今回つくった音源ボードはAY-3-9810Aが2個だけなので、同時発音は最大6個です。
できるだけ、同時音数の小さい楽曲ということで、ピアノ演奏のものを選びました。
ここで、問題なのはこの音源ボードで対応できるか?ということです。
ピアノって10本の指で鳴らすから、最大10の音源で余裕で足りそうなものですが、
そうは問屋が下しません。なんせ、ピアノのペダルを踏むと、音が残るので
同時に発生する音の数は最大で鍵盤数の88になる可能性があります。
まあ、それは原理的な話ではあるので、実際にはどうだろう?
ということで、まずは静かそうな曲で調べました。
「エリーゼのために」 一か所だけ最大発音数5の箇所がありました。
定常値は2〜3程度のようなので、今回の音源ボードでいけそう。
「バラード」 最大で最大発音数8の箇所がありました。
定常値でも4〜6程度をうろつくので、今回の音源ボードだとなんとかなりそうだけど、
音が欠ける部分もでるかなあ〜。一度鳴らしてみたい気もするけどなあ〜。
「ノクターン」 これも最大発音数は6です。大丈夫そうだ!.
なかなか、2個だけのAY-3-8910Aではきびしな状況です。
やはり4個(最大12発音)くらいは実装しておいたほうがよさそうです。
まあ、まずは「エリーゼのために」「ノクターン」が演奏できるようにしましょう!
普通に鳴るけど、合ってる? 2025.8.24
MIDIファイルの読み込みソフトを作って、音源ICへの書き込みです。
いわゆる音出しです。
ん〜、普通に鳴っているようなんだけど、ちょっとテンポがおかしいと思われるころがあるなあ〜。
MIDIの読み込み&解析部分でエラーがでていないところをみると、フォーマット通りに読めているはずだけど、
無視しているコマンドで重要なものがあるのかな?
あ、勘違い!
デルタタイムの時間遅延は、ノートのON/OFFだけに入れればいいかと勘違いです。
すべてのコマンド/イベントの前で有効にしないと、曲のテンポがおかしくなってしまいます。
ということで、そこを修正したら、ちゃんと鳴るようになりました。
PSGが2個しかないので、同時発音数が6になりますが、
まあ、それでも結構曲としては問題なく再生できそうです。
現時点では同時発音数が6を越える場合は、一番音が小さい発音を
オーバライトすることで誤魔化しています。
まあ、新規に(また怪しい)ブツを注文しているので、それが来たら
音源数増大で再開しましょう。やはり最大発音は12程度は欲しいところです。
こんな形でPSG音源カードを差し込んで遊んでいます。
4曲ほど鳴らせるようにしてみました。
(とりあえず、ここらで中座)
追加で購入! 2025.28
注文していたあやしいブツが到着です。
性懲りもなく、怪しいブツを10個購入です。
MICROCHIPのロゴと字体の雰囲気が全然違うけど、気にしないでおきましょう(笑。
裏面のマーキングもバラバラ。
新事実?
念のために、新しく購入したPSGはすべてICソケットに差し替えて動作チェックしてみました。
購入した10個とも、すべて動作しましたが、出力レベルが2つのグループにわかれることがわかりました。
いままで使っていた2個を含めて12個の出力レベルを測定すると、相対比較ですが
4個: 出力レベル 約1
8個: 出力レベル 約0.66
といった感じです。それぞれのグループでみてみると、裏面の刻印に類似性があるような感じです。
なにが違うのでしょうね〜。
出力レベルが約1のグループの4個です。
出力レベルが約0.66のグループの8個です。左の5個は何も刻印がありません。
とりあえず、同じ出力レベルのものを2個つかって、鳴らしたところ、音量差もなくていい感じになりました。
(つづく?かな?)