2013.2.24
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第328回]


●MIDIをどうするか?

前回はCPUクロックについて書きましたが、もっと悩ましい問題が他にもありました。
これもやはりZ8S180がHD64180と同じである、という誤認識に基づいて設計してしまった結果なのですが。

E−80(仮称)ミニコンにはMIDI(Musical Insturument Disital Interface)も搭載することになっています。
私はMIDIについては全く何も知りませんでしたので、それも勉強しなければならなかったのでありますが。
とにかく。
中日電工の守備範囲は、ソフトウェアについては何もしなくてよいから、必要なハードウェアだけを設計すればよい、ということでしたので、お受けすることにいたしました。

MIDIについてざっと調べてみましたところ、ハードとしてはフォトアイソレータ仕様になっているものの、通信の実態としてはRS232Cと同じ調歩同期式のシリアルインターフェイスでいいということがわかりました。
ただしボーレートはちょっと特殊で、31.25Kbpsという半端な値になります。
半端な上にかなり高速です。

Z8S180には2CHのASCI(Asynchronous Serial Control Interface 非同期シリアルコミュニケーションインターフェイス)が搭載されています。
当然このうちの1CHをMIDIに割り当てるつもりでした。
ところがいざ設計という段になりまして、ちょいと悩ましい問題にぶつかってしまいました。

私はZ8S180(HD64180)のASCIのボーレートジェネレータがPICと同じ程度のものであると勝手に誤解してしまっておりました。
時代が違っていたのでありますねえ。
HD64180のそれはBRG(ボーレートジェネレータ)と呼ぶのもはばかられるほどの貧弱なものであることがわかってしまいました。

いえ。
幸いにして、といいますか、不思議なことに31.25Kbpsはできるのです。
ただしCPUクロックが10MHzか5MHzならば、という但し書きつきですけれど(20MHzもOKです)。
しかしながら、悲しいことに、E−80(仮称)ミニコンの仕様であります、CPUクロックが10MHz、5MHz、4MHz、2MHzの場合には、普通のRS232Cのボーレートは1200bpsすら実現できません(おお。なんということでしょう)。

あ。
これはオリジナルのHD64180がそういう仕様になっているのでありまして、バージョンアップ版のZ8S180ではそんなことはなかったのでありますが、前にも書きましたように、設計の当初ではZ8S180もHD64180も全く同じ、と認識しておりましたので、つまりはそういうことだと思ってしまいました。

どういうことかと言いますと。
以下、説明をいたします。
Z8S180のデータシートから、その部分の引用です(これはHD64180のまんまの機能について、です)。


[出典]Zilog社 Z8S180 Product Specification

ボーレートはCPUクロックをもとにした場合(ss2〜ss0=111以外)、まずはプリスケーラの設定(CTS/PSビット)によって、CPUクロックを1/10または1/30し、さらにDRの指定によって1/16か1/64したものに対して、ss2〜ss0=000〜110の指定によって1/1〜1/64したものが、求めるボーレートになります。
これだけを読むとややこしいのですが、たとえばCPUクロックが10MHzのとき、プリスケーラが1/10で1/16レシオの場合にss2〜ss0=001だとすると、ボーレートは10000000/10/16/2=31250bpsになります。
またCPUクロックが5MHzの場合にss2〜ss0=000だとすると、ボーレートは5000000/10/16=31250bpsになります。

実はこのことはずっとあとになってからわかったことで、当初はこのあたりのところは余りよく理解していませんでしたので、はなから31250bpsはムリと思い込んでしまっておりました。
旧HD64180の仕様でもCPUクロックが5MHzか10MHzならできたのですよねえ。
でも、まあ、ディップスイッチで選択できるCPUクロックのうち、2MHzと4MHzではMIDIはできません、というのもいかがなものかと思います。
Y様は昔のプログラムをできるだけそのまま移植して走らせることもできるように、ということで2MHzや4MHzというクロックも実装したい、と考えてみえますので、そういうことからしますと、10MHzでなければ動きません、という仕様はちょっと…、ということになります。

結局、MIDIについてはPICを搭載することで解決することにいたしました。
そういうわけですのでMIDIにつきましては、それほど悩むこともなく、形が決まったのでありますが。

問題は、その後に残りました。

●RS232C用クロック回路

MIDIに使わないことになりましたASCIのチャネル0とチャネル1は、そのままRS232Cインターフェイスとして利用することにしました。
え?
1200ボーでもだめじゃなかったのか?

そうなのです。
E−80(仮称)ミニコンの仕様では、RS232C用にはCPUクロックは使えません。
そのようにするためには、逆にCPUクロックを半端な値にしなければなりません。
HD64180の参考書では、そのためのCPUクロックとして、6.144MHzとか4.608MHzなどという半端な値のクロックが記載されています。

ですから、CPUクロックを利用する代わりに外部からクロックを供給することにいたしました。
回路はなかなかに面倒なものになってしまうのですが、その代わりにRS232CのボーレートもMIDIと同様にCPUクロックには依存しない設計にすることができました。
下はZ8S180のASCIのチャネル0とチャネル1に外部から供給することにした、RS232Cクロック回路です。



この回路図ではボーレートの上限が9600bpsになっています。
実は外部から供給するクロックにも制約があるのです。
9600bpsを1/16レシオで使う場合、供給するクロック周波数は9600*16=153.6KHzになります。
一方で外部から供給するクロックの周波数の上限はCPUクロックの1/40以下でなくてはならないのです。
CPUクロックが10MHzの場合でも10000/40=250KHzですから、9600ボーが上限になります。
CPUクロックを2MHzで使う場合には、2000/40=50KHzですから2400ボーが上限になります。
なかなかに悩ましい仕様ではあります。
しかし、この件につきましては、当初Y様からは、外部に接続するつもりの機器との通信に使うものとして、その程度のボーレートが得られれば問題ありません、とのお答えをいただいておりました。

ま、しかし、以上のことは、Z8S180がHD64180のまんまの仕様だったと思い込んでおりましたときには、こうするしかなかったのでありますが。

バージョンアップされた現行のZ8S180では、ASCIのボーレートジェネレータとして内蔵の16ビットカウンタを使うことができるようになっている、ということが分かった今となりましては、果たして今までの仕様のままでよいものかどうか、これまたどうすべきか大いに悩んでしまいました。

その機能をうまく利用すれば、RS232C用の上記クロック回路は無くてもよいことになってしまいます。
でもそうするためには、まずはその新機能を使ってRS232C通信が問題なくできるかどうかを確認しなくてはなりません。
せっかく試作基板を発注する目前まできておりますものを、ここでまたそのようなテストをして、その結果によってまたアートワークを変更するということになりますと、さらに手間と日数を要することになります。

で。
前回のCPUクロックとあわせて、いかがいたしましょうか、とY様にお尋ねいたしました。
Y様からは。

RS232Cクロックについても、現在の設計のままでいきましょう。
RS232Cのために、内蔵の16ビットカウンタを占有してしまう、ということは避けたいと思います。
このカウンタはユーザーが割り込みを利用して高度なプログラムを作るときのために開放しておきたいと思います。

というご返事をいただきましたので、最終的に上の回路図の通りの仕様に落ち着きました。

しかし、そのことは必ずしもASCIの機能が上記回路によって制約されるということを意味するわけではありません。
外部から供給するクロックは内蔵I/Oレジスタの設定によって無視することもできますから、もしユーザーが必要と考えるならば、内蔵の16ビットカウンタを利用して、もっと高速の通信プログラムを組むことも可能です。

いずれ落ち着きましたならば、そのようなサンプルプログラムも作成して試してみるつもりです。

ワンボードマイコンでCP/Mを![第328回]
2013.2.24upload

前へ
次へ
ホームページトップへ戻る