AKI80を見つけてしまいました・・・・・ CPM80-PARTnかな? 2020.7.12

休日の夕食後のなんといえないだらけた感じでいますが、ちょっと気分を変えようと部品箱の整理を開始。
すでにお酒も一杯(manyじゃなくてoneの一杯)はいっていますが、仕分けていきます。で、整理の最初の段階で
こんなものを見つけてしまいました。かなり、くたびれた袋に入っていますが、AKI80です。

AKI80はTMPZ84C015というZ80-CPUをコアとしてPIO、SIO、CTCなどの周辺ICを組み込んだワンチップCPUをベース
にしたワンボードマイコン基板です。これは、かなりヒットしたようで、今でも秋月から保守部品として売られています。
製作マニュアルをみると1990年の日付もあることから30年も前からあるのですね。

私自身はこれを買った記憶がないので、おそらく秋月の福袋に入っていたのだと思います。
多分みつけたときは、いまさらZ80なんて・・・・と思っていたかもしれませんが、とりあえず捨てずにストックしておいたのでしょう。
でも、最近のCPM80熱もあって、この基板を見つけたときに、一気に悪い気がおきてしまいました。

おいおい、いまから取り組んだら寝る時間ないぞ〜という声も聞こえてきますが、
アルコールの血中濃度が高い段階では、正常な判断ができません(笑。


くたびれた袋から基板が一枚でてきました。秋月のAKI80です。


結構秋月の中ではよく売れた基板と思います。というのも今でも保守部品として販売されています。

CPM80-PARTnだあ〜

もう、脊髄反射的に半田ゴテの電源をいています(爆。

このAKI80はすでにCPUを含む周辺ICを載せているだけでなく、RAMへの配線もできています。
ほとんどPICとの必要最小限の配線でCPM80を動かす基板ができるはずです。そう考えたら、早速手が動いてしまいました。
こりゃ、寝ながらでも作業してしまいそう。

#おいおい、明日もあるんだぞ!!! という声が小さくなっていきます・・・。

まずはRAMの取替え
手元にあるAKI80は、流石に福袋に入っていただけあって最小構成の基板でした。CPUとRAM以外は搭載されていません。
そして、RAMについては8kBです。これでは、全然CPMには足りません。もっとも32kBのRAMが載っていてもたりないわけなので、
このRAMをまずは交換です。
 必要になる64kB以上のRAMへ交換です。RAMについては、だいぶ前にメモリーバッファー(初代)を試作したときに買ったSRAMが
あったので、それをつかいます。128kBなので上位64kBは未使用で使います。

まずは古いRAMの取り外しです。ICの取り外しは何回もしていますが、だいぶ学習してきました。
半田を一杯盛るので、その半田が基板のいたるところに飛び散るので、ICの周りにマスキングテープで養生しておきます。
こうすれば、ICに思いっきり半田を盛ることができます。

ICの周りに半田を盛って加熱を十分にしてやれば、半田の熱量もあるので両ピンとも溶けた状態になり、
ICは自らすべりはじめます。そのタイミングを見計らって基板に刺激をあたえるとICが簡単に取れます。

ICをとりはずすときに半田が飛び散るので、事前にマスキングテープで養生しておきます。


とりはずしたSRAMです。これはまた使うこともあるかも知れないので捨てずにとっておきましょう。

あたらしいSRAMを装着

とりはずしたところに新しいSRAM(128kB)をとりつけますが、幅がすこし広いです。
そのため、そのままではとりつけられません。
ピンを曲げればなんとかなりそうなので、まず最初にICのピンをペンチでICの腹側に曲げます。
最初は硬い板の上にICの足を押し当てて、一気に曲げようとしましたが、流石に力が足りなくてあきらめました。
面倒ですが、1本1本曲げていきます。

もともとついていたSRAMは28Pi nのものですが、あたらしくとりつけるSRAMは32Pinなので4PINあまりますが、
これについては空中配線で必要なところと接続します。

SRAMの幅がすこし広いのでそのままではパターンに載りません。


パターンに載るようにペンチでピンをICの腹側まで折り曲げます。


新しいSRAMとその他の部品も取り付きました。

配線準備

AKI80のSRAMも換装が終わったので、全体を組み立てていきましょう。今回のベース基板はSTDサイズのものをつかいました。
いつもと違う点は下記の通りです。

・PIC18F46K22を使用
 いつもはPIN数の多い80PinのPIC18F8723を使うのですが、手元になかったので40PinのPIC18F46K22をつかいます。
そのため、I/Oの数が足りないので、アドレスバス用に8ビットのラッチ(74AC574)を2つ使います。

・ICソケットはなしで
 今回はICは基板にベタ付けです。いつもはICソケットをつかいますが、ICソケットも手持ちが少なくなってきたので、
すこし使用を遠慮しました。ちなみにICソケットをつかう唯一といってもいい理由は、ICの取替えができることです。これは、違うスペックの
ものに入れ替えたい場合もありますが、さらに必要なのがICを破損した場合のことを考えたときです。電源を逆接したときなどは、
高い確率でICが壊れますが、ICソケットなら簡単に新しいICに取りかえできるからです。直配線したときに、ICが破損したときの
落胆は大きいですからね〜。


STDサイズの基板に組み立てていきましょう!今回はICソケットはなしで組み立てます。

反対にICソケットを使わないときのメリットですが、これが結構たくさんあります。

ICソケットを使わないメリット
 ・お財布にやさしいです。
 ・信頼性があがります(接触点数が減ります)。
 ・GNDの配線がしやすい。
  これは基板にも因るのですが、部品面にGNDメッシュを配置した基板だと、容易にICのGND配線ができます。
  ICソケットだと、どうしてもプラスチックの部分が邪魔になって、コテ先が入りにくいです。
  また、ICのピンが基板面に近いので、パスコンの取り付けも簡単です。ちょっとアクロバチックですが・・・・。
 ・ポリウレタン被覆銅線の絡みもいい
  また、ポリウレタン被覆銅線のピンへの絡みがいいです。丸ピンソケットだと、ピンも丸いので銅線を巻きつけても抜ける場合があります。
  その点、ICのピンの断面は矩形なのでエッジがたっています。そこに銅線をまきつけたときに被覆は食い込んで、締りがいいです。  
  さらに、食い込んだ被覆が破れるせいか半田したときの被覆の溶けるのが早い気がします。


ICベタ付けだとGNDの配線が簡単です。


さらにパスコンの取り付けも簡単です。

もうちょっとだけ準備してとりかかりましょう!

酔っ払いモードでの配線なので、もうちょっと準備してからとりかかりましょう!

いちいちピン番号を数えるのも大変だし、間違いのもとなのでシールを貼ってそこにピン機能を書いておきます。
あとは、この名称をみながら配線です。こうすれば、効率もあがりますし、間違いがすくなくなるはずです。

最初にシールを貼って、ピンの機能を予め書いておきました。

格闘開始!チーン


チンチン!試合終了! とりあえず配線完了!・・・・疲れた・・・・。
あとは配線チェックして、ソフトのインストールだけど、もう限界・・・。もう寝よ。

一応配線完了しました。でも、もう限界・・・・。


リールもだいぶ減ってきました。あと1、2回配線したらおしまいでしょう。


第2R! 2020.7.13

配線チェック・・・・パスしよ!
 王道でいえば、まずは配線のチェックですが、今回は基板の裏にシールを張って機能表を書いたうえで配線しているので、
おそらく間違いはないでしょう!ということでパスです(笑。
 ただし、GND−VCC間にショートがないことだけ確認しておきました。その他、電源ラインだけはチェックです。
ICソケットつかっていないので、ICが飛んだら目もあてられません。

ソフト作成!
 ソフト作成といっても、従来動いているソフトの中のSRAMのアクセスルーチンを変更するだけなので、さほど手間はかかりません。
ただ、アドレスの生成にD-LATCHを2つ使っているので、そのデータのセットのためにちょっとだけSRAMのアクセスの時間が増えて
しまいます。
 すこし、面倒なのがSRAMのデータの読み取りです。PIC側のデータポートはA−PORTのみで、これでSRAMのデータの読み書きや
アドレス用のラッチの書き込みデータを兼ねています。そのため、SRAMの読み込みのためには

(今回のCPM)
  1)A-PORTを出力に設定。
  2)アドレス用のラッチにデータ(アドレス)をセット。
  3)A-PORTを入力に設定
  4)SRAMのRDパルスをアクティブに設定
  5)データの読み込み
 6)SRAMのRDパルスをインアクティブに設定


という感じになるのですが、1)3)にあるように、いちいちA-PORTの入出力を切り替える必要があります。
そうしないと、SRAMとPIC間でデータが衝突してしまいます(電流が無茶苦茶流れて最悪、素子が壊れる)。

いままでは、データの読み出しのときは最初にA-PORTを入力に設定して、RDパルスもアクティブままですみました。
すなわち、

(以前のCPM)
  2)アドレス用のラッチにデータ(アドレス)をセット。
  5)データの読み込み

これだけの手順で済んだわけですから、かなりステップが短いです。
今回はSRAMのアクセス時間がすこしかかってしまいますが、考えてみればSDカードの読み書きにかかる時間が結構大きいのと、
その他のルーチンの処理も結構ありますから、全体のアクセス時間からするとわずかでしょう(と思っている。

動作確認!
いよいよUSB(RS232変換)を接続して動作確認です。

ワクワクドキドキの動作確認です。

割とあっさり、ノートラブルで立ち上がりました。よかった、よかった!

無事、CPM80が起動しました。

PIOを動かしてみましょう!

PIOが搭載されているので、折角なので動かしてみましょう。Lチカでもいいのですが、
ダイレクトに端子をオシロにつないで、オシロチカチカです(笑。
超簡単に、I/O出力に0、1を繰り返し送出します。

まずは、超簡単なI/Oの動作プログラムです。

遅っそ〜!!

オシロのプローブをI/O端子に当てて観測です。問題なく動いていることはわかりましたが、
その速度が遅い!なんと19.887kHzの周波数しかでていません。PICでも1MHz以上、RasPiなら
10MHz以上でるぞ〜。

オシロチカチカ周期は19.887kHzです。遅い!(BDS Cの場合)

この周期をクロックに換算すると、CPUの動作周波数が12.288MHzなので
約618クロックです。これぽっちのループなのに、なんでそこまでクロック使うかな〜。

ちなみに、もう一つコンパイラであるHi-Tech Cで動かしてみました。
こちらは、幾分高速です。それでも31.676kHzです。クロック数に換算すると388クロックです。
しかし、Hi-Tech Cをつかうと、コンパイルが遅い!BDSに比べると10倍くらいかかっています。

オシロチカチカ周期は31.676kHzです。まだ遅い!(Hi-Tech Cの場合)

Z80の場合、IOポートのアクセスに必要なクロックは11クロック、そしてループを回すジャンプ命令も10クロック程度です。
その他も含めても、100クロック程度で回ってほしかったな〜。
 おそらく、OUTP()は関数としてサブルーチン呼び出ししているからでしょうね。高速にするにはインラインにアセンブラに
記述すべきなのかもしれませんが、そんなことできるのかな?
 すくなくとも、こんな速度でI2Cのサブルーチンを組んで実行したら、めちゃくちゃ遅そうです。

まあ、これが3-40年前の世界ということでしょう。

まとめ
 今回、たまたまAKI80をみつけてしまって、思わずCPM80が動くまで組み立ててみました。
 今回の製作でとくに目新しい発見はなかったのですが、既成のワンボードマイコンをつかったせいか、
 配線が少なくて結構短時間でできました(それも、酔っ払いながらでもノートラブルです(笑。
  
  時間をみつけて、一度回路とソフトをまとめて整理しておきましょう。


げ!
また一枚AKI80をみつけてしまいました。もう勘弁・・。


もう1枚ありました。でも、もうお腹一杯です。

(つづく?)


CP/M関連(CPM80、CPM68Kおよびその周辺)