H8オルゴール



謎の工作のページに戻る



 秋月AKI−H8を使った、デジタルなオルゴールです。音源はソフトウエアのみです。死ぬほどタイマ割り込みをかけて発振器をエミュレートしています。一応4音まで同時に出ます。音質は・・・AMラジオのような音質が郷愁をさそいます(笑)。

H8/3664版も追加しました(02/12/01)
MSX−H8カートリッジ版も追加しました。(00/03/02)

実物の写真

全体像です。

部品面。
ハンダ面。うーん、シンプルすぎ。

回路図

 回路的には極めて簡単で、H8のアナログ出力をバッファアンプを通して外部に出しているだけです。秋月のマザーボードの隅っこに作ることも簡単でしょう。以下が回路図です。


 なお、この回路図では電源関係は省略しています。これを新しい基板の上に作るか、秋月のマザーボード上に作るか、またAKI−H8をMSX−H8カートリッジ用に改造しているかどうかによって電源の作り方は変わってきますので、各自臨機応変に作ってください。

 また、現行の回路ではスピーカーを鳴らすほどの出力はありません。ヘッドホンくらいなら鳴りますが。どうやってスピーカーを鳴らすかは各自工夫してください。

内部構成

 ソフト的な内部構成は以下のようになっています。どうせやるなら、ということでステレオにしてます。


曲データの作りかた

 サンプルで入っている曲は私が作曲したもので、「更ける夜」という曲です(笑)。自分の好きな曲を鳴らしたい、という方も多いでしょうから、曲データの作り方を説明します。

 ソースリストを見てください。真中あたりに DATTOP というラベルがあり、そこからRAMセクションの手前までが曲データです。

 最初の TEMPO は、文字通りテンポです。次の BARDIV は、1小節(bar)を何分割するかを表します。普通の曲なら8とか16、3連系の曲なら12とかでしょう。分割された短い時間単位をティック(tick)と呼ぶことにします。

 次の BARS が、曲全体が何小節からなるかを表します。サンプル曲は20小節です。続いてワード境界合せのダミーバイトが1バイトあり、そのあとに1小節目以降のデータが続きます。

 1ティックのデータは4バイトで構成されています。それぞれチャネル0から3まで、鳴らしたい音の音番号です。ただし、音番号0は休符で、音は鳴りません。音番号は、1が一番低いオクターブの「ド#」で、1増えるごとに半音づつ上がっていきます。最高で95までです。

 例えば

	.DATA.B	48,52,55,0

と書くと、そのティックではch0〜ch2でド、ミ、ソが同時に鳴り、ch3はお休みです。なお、MIDIで言うところの「ノートオフ」はありません。音が減衰するままに任せます。

 こうしてどんどんデータを書いてゆきます。1小節を8分割しているなら32バイトで1小節となります。



H8オルゴールのプログラム(h8mbox.lzh)をダウンロードする

※このプログラムはCPUモード7用です。AKI−H8を他のモードにしている方はモード7に戻してください。
※このファイルには説明文章が含まれておらず、このページを見た人以外には使い方がわからないため、このファイルを他で再配布しないでください。また、曲データを変更して使用する場合、個人的使用の範囲にとどめてください。



付記「H8によるソフトウエアシンセサイザの可能性」

 そもそもこういうことをやってみたのは、H8でソフトウエアシンセサイザは可能かどうかを確かめるためです。結論から言うと「苦しい」です。とても「GM音源相当」とかは無理ですね。かなり音質を落としてもよいなら「MODプレイヤー」あたりはできそうです。

 このオルゴールでは、オシレータエミュレーションの割り込みルーチンが約300クロックです。ステレオディレイをやめても250クロックくらいでしょう。オシレータ1個あたり30数クロック必要です。ですから、ステレオディレイをやめたとして、8音同時発音なら約400クロック、16音同時発音なら約700クロックくらいになりそうです。

 現在、オシレータエミュレーション割り込みは32KHzの周期でかけています。つまり16MHz÷32KHz=500クロックの周期です。これだと8音同時発音まではなんとかなっても、16音同時発音とかになるとオシレータエミュレーション割り込みの周期を伸ばさざるを得なくなります。当然それはさらに音質を低下させることになります。また、現在のオシレータはウエーブフォームテーブルから正弦波の波形を読み出しているだけですが、もっと凝ったことをやろうとするとさらに重くなります。

 H8S−2000シリーズが使えるとかなり楽になるんですけど。H8S−2000シリーズだと、クロックは品種にもよるけど最高33MHz。で、メモリアクセスは1クロックでできます(H8−3048は2クロック必要)。秋月でH8S−2000シリーズを積んだH8ボード出してくれませんかね〜。



MSX−H8カートリッジ版H8オルゴール

 すでにMSX−H8カートリッジを作った人が、このオルゴールを聞くためだけにわざわざ新しいハードを作らなくてもよいように、MSX−H8カートリッジ版のオルゴールも作りました。

 残念なことに、MSX−H8カートリッジ版は、MSXカートリッジバスのSNDINがモノラルなため、モノラルになってしまいます(内部的にはAKI−H8単体版と同様ステレオ処理しています)。でもわざわざ別のスピーカーをつなげなくてもよい、というのは気軽でいいですね。

 処理の内容はAKI−H8単体版とほとんど同じです。MSX−H8カートリッジのメモリマップに合わせて番地を変更したりとか、割り込みジャンプテーブルの設定が加わったりとかしているだけです。曲データの作り方も基本的には同じです。

 使い方は、MSX−H8モニタのLコマンドで H8MBOXM.MOT をオフセット0でロードし(H'200000番地にロードされます)、Gコマンドで H'200000番地を実行します。

MSX−H8カートリッジ版H8オルゴール(h8mboxm.lzh)をダウンロードする

※このファイルには説明文章が含まれておらず、このページを見た人以外には使い方がわからないため、このファイルを他で再配布しないでください。また、曲データを変更して使用する場合、個人的使用の範囲にとどめてください。



H8/3664版H8オルゴール

H8オルゴールをH8/3664でも作ってみました。

 せっかく秋月のH8/3664ボード(フラットパッケージ版)がかなりコンパクトなのですから、オルゴール全体もコンパクトにしたいですよね。出力を電力増幅して重いマグネチックスピーカーを鳴らす、なんて不粋なことはやめて、小さな圧電サウンダを鳴らします。

 圧電サウンダは5V振幅で鳴らしても大きな音は出ません。もっと高い電圧が必要です。どっかにないか? そうだ、RS−232Cがあった!

 TXDから適当な周期で1と0を出し、それを整流すれば+−10Vくらいの電圧が出るはず。それをオペアンプの電源にすれば・・・ 実際作ってみると、オペアンプの電源電圧は+−6Vでしたが、それでも出力振幅は10Vを超え、どうにか実用になりそうな音量になりました。

●外観


 全体像です。ユニバーサル基盤のサイズは約7センチ×5センチです。このくらい小さいといろいろなところに組みこめそうですね。作り方を工夫すれば(たとえば圧電サウンダとCPUボードを重ねるとか)さらに小さく作ることも可能と思われます。


 部品面です。


 半田面です。


 3048版と大きさを比べて見ました。ユニバーサル基盤の大きさは半分以下になっています(3048版も工夫次第でもう少し小さくなると思いますが)。大きさの比較対象としてニルモちゃんフィギュア(全高17cm)、190cc缶コーヒー、P/ECEなども一緒に撮ってみました。(多くの人にとって参考になるのは190cc缶コーヒーだけだと思いますが(^^;;;)

●ハードウエア


 回路図です。3664にはアナログ出力はないので代わりにPWMで出力します。オペアンプは、初段はローパスフィルタを構成しており、PWM周期(32KHz)のノイズを除去します。二段目で振幅を増しています。
 ショットキーバリヤダイオードでTXD出力を整流し、オペアンプの正負電源を作っています。TXDとショットキーバリアダイオードの間にジャンパーポストが入っていますが、これはCPU内蔵のEEPROMにプログラムを書きこむとき、RS−232信号が劣化するのを防ぐためです。書きこみを行うときは前もってこのジャンパーポストを外しておき(実際やって見るとジャンパーポストを付けたままでもちゃんと書きこめるのですが(^^;;; でも心配性な人は外したほうがいいでしょう)、オルゴールを鳴らすときには付けます。

●ソフトウエア

 アーカイブ(mbox3664.zip)中に含まれる mbox3664.abs をCPUの内蔵EEPROMに焼いて電源を入れると鳴ります。プログラムの構成は3048版と若干違い、圧電サウンダが1個なのでモノラルです。ディレイもモノラルになりました。それと、3048版は正弦波で鳴らしていたのですが、圧電サウンダでは正弦波はかなり音量が低く感じられるので方形波に変えました。

H8オルゴール3664版(mbox3664.zip)をダウンロードする

※このファイルには説明文章が含まれておらず、このページを見た人以外には使い方がわからないため、このファイルを他で再配布しないでください。また、曲データを変更して使用する場合、個人的使用の範囲にとどめてください。

●今後の展開

 H8/3664はIICバスで簡単にシリアルEEPROMをつなげられるので、曲データをシリアルEEPROMに入れられるようにすると面白いですね。曲を変えるのもシリアルEEPROM差し換えで済みますし。