だらだら長かったので、別ページにしました。長文に興味のない人は戻って下さい。

MIDI I/Fを作ろうと思った経緯

昔、趣味でMIDI搭載の電子楽器をいじっていたのですが、当時使用していたパソコンがNECのPC-9800シリーズとEPSONの98互換機でした。
その当時、IBM-PC互換機やらDOS/Vパソコンとか、国産より安くて高性能なマシンが出始めました。

所有していた98パソコンが故障し、その後EPSONの互換機を使用していたのですが、自作機ブームが盛んになり、遅ればせながら自分もIBM-PC互換機を自作しました。

98用のMIDI I/FはCバス仕様のものと、RS-232Cポート接続型の2種類持ってましたが、IBM互換機のISAバスやPCIバスにはCバスのボードは物理的に挿せませんので、 唯一繋ぐことの出来たのがRS-232Cの通信ポート接続タイプのI/Fでした。
一応、使用していたソフトはIBM互換機にも対応していて、ソフト自体は動作するのですが、楽器をつないでも何も音が出ず、色々設定をいじったりしましたがどうやってもうまくいきません。 I/F自体はモニター用のLEDが付いていて、何かそれらしく点灯したり、点滅したりするのですが、楽器がデータを受け付けないような状態でした。
故障かなと思い、原因を探ろうとMIDI I/Fをばらして見てみて、唖然としました。
トランジスタ、抵抗器、ダイオード、自分の好きなフォトカプラ...そんな物しか入っていませんでした。
RS-232CでMIDIデータをこのI/Fが受け取り、中にある制御用のチップが処理してMIDI信号を出す、と言うような事を期待していたのですが、実際はそのI/Fの役目は単なるレベル変換に過ぎない物でした。 I/Fには違いありませんけど。
よって、パソコン側で31.25Kbpsを設定できなければ、そのI/Fは使えない事になります。

MIDIの通信速度は31.25Kbpsで、なぜか98パソコンはこの通信速度を設定できました。しかし、IBM-PC互換機等は設定する事が出来ません。一番近くて38400bpsです。
その事がわかり、どうにかしないとと思い慌てて作成しはじめました。


なかなか動かないプログラム

でも、作ろうと思ってからそれらしく動作するまで5年もかかりました。基本的な知識がかなり不足していて、試行錯誤を繰り返しました。

通信速度を変換するのに秋月電子通商のAKI-80を使用しています。いわゆるZ80系の複合型CPUで、CPUと周辺のLSIを1チップに集積した物を使用しています。 小さいボード上にその複合LSIとSRAMとEEPROMがそれぞれ32KB搭載されています。(EEPROMは別売り)
製作当時は秋月電子がやたらと推していたもので、つられて使いました。というのもあったのですが、当時、秋月で扱っているマイコンでシリアルポートを2ch搭載しているのがH8とこのボードくらいでした。 H8の方はSRAMが少なくて、多い方がいいかというのが理由?なぜかEP-ROMに焼いてみたいという願望が有ったのと以前Z-80を少しかじったことがあったのでAKI-80にしました。
Z80自体は少しはわかるのですが、周辺のLSIはほとんどわかりませんでしたので、その手の本を買いあさりました。
ある程度わかってきたので、プログラムを作ろうと思いましたが、プログラムはROMに書き込まないと動きません。ROMライターが必要です。また、一旦書き込むと、紫外線を当てないと消去出来ません。 ROMイレーサーが必要です。出来るだけお金をかけずにやろうとしましたが、色々物いりです。

今振り返ると少しはずかしいですが、当時はこんな感じで開発していました。
  1. プログラムをテキストエディタで書く。
  2. アセンブラ・リンカーを動かし、HEXファイルを作成。
  3. ROMライターでROMを焼く。
  4. ボードに実装して、動作確認。
  5. 正しく動かなかったらROMを外してイレーサーに入れて消去開始。(およそ30分で消える)
  6. 消去の合間にプログラムを修正し、次のROMに交換し、2へ戻る。
まあ、お金がないのでROMは10個しか買えず、すぐにROMイレーサーが満杯になり、このサイクルは順調にはいきません。
余り頭を使わないタイプなので、少し修正してはすぐに焼いて確認してましたので。
初めてのマイコン作品?で、LEDのダイナミック点灯をやろうとするやら、当然うまくいかず行き詰まってました。
EP-ROMは永久に何度でも消して使えると思っていたのも問題かも...

で、次第にROMがうまく消せなくなったり、書き込みエラーが出始めたりし始めた頃、あることに気づきました。
プログラムはROMだけじゃなく、RAMからでも実行出来るのです。というか、パソコンでは当たり前の話です。
そこで、RS−232Cを使いパソコンからROMに書き込むデータをボードに送り、それをRAMに転送し、送り終わったらRAMのプログラムの先頭から実行する、というプログラムを作りました。 しかし、そのプログラムがなかなか出来ませんでした。
結局、作るプログラムが違うだけで、さっきと同じ様なサイクルの繰り返しです。
ROMもほとんど異常なものばかりになり、泣く泣く追加で10個購入しました。
ようやくそのRAM転送プログラムが出来ると、開発のスピードが極端に向上し、やっと、念願のプログラムが出来ました。
途中、ROMイレーサー自体の紫外線ランプも能力が低下して、時間をかけてもなかなか消えなくなって注文して交換したり、色々でした。