CPM80末っ子? 2020.6.16
懐かしのCPM80の1号機に取り組んだのが約4年前で、その2号機も約2年前につくりましたが、
とある基板がでてきました。CPM80の3号機です。実際に作りかけたことも忘れている状態なので、
もう脳が末期的な状態かも(笑。いや、ほんとうにこの基板がでてくるまで、完全に忘れてしまっていました。
で、直近で取り組んでいるCPM68Kがなかなか前に進まない状態なので、すこし現実逃避モードに入って、
これを仕上げて行きましょう!
CPM80の3号機です。
なぜ作りかけたんだろう?
なぜ3号機をつくりかけたのかは、なんとなく1号機と2号機をみていて思い出してきました。
1号機はとりあえず、CPMを動かすことだけが目的でしたので、とくに拡張性なんかは考えていません。というか、もともと小さい基板に
メモリーを3個も入れ込んだものだから、I/Oポートを出す場所もありません。まあ、メモリーを3個搭載したおかげで、RAMディスクが
1.5MBほど確保できましたから、Cコンパイラもそこそこのスピードで動いてくれます。でも、やっぱりこういったマイコンボードって、
何か外部の機器なんかを動かすことに使いたいですよね〜。
という思いもあって、I/Oポートをもった2号機をつくりました。I/Oポートを出すためにメモリーは1個だけです。1MBitのSRAMなので、
Z80のメモリー領域のほかに64kBが余りますが、RAMディスクにするには小さすぎます。もともとRAMディスクは放棄してのI/Oの確保
だったんでしょう(まるで他人事・・・。 でも、いざ使おうとすると、やっぱりSDカードでのコンパイルはかなり遅い・・・・。結局これでは
使えないと判断したのでしょうね。
1号機(左)と2号機(右)です。1号機はメモリーも沢山ありますが、I/Oがありません。2号機はI/Oはありますがメモリーが貧弱。
2号機にはI/Oを接続するためのバスの端子も設けています。
一応、I/OボードでLチカもやったんだ〜(と思い出しました)。
3号機のスペックは・・・
基本はRAMディスクを多めにするために、SRAM4個を搭載して2MBを確保できるようにしているはずです。
これはSDカードでのCPMでのディスク容量2MBと同じにすることで、ディスク丸ごとでもコピーできるようになっています
(たぶんそう考えたと思う)。そして、あとでI/Oポートが出せるように、大きめの基板をつかっています(たぶん、
そう考えたとおもう)。
これで1号機と2号機の弱点を克服したものを作ろうとしたのが3号機です(多分、そう考えたと思う)。
とりあえず配線を完了させよう
幸いなことに、配線はあらかた終わっていました。抜けているところはSRAMのCE(チップイネーブル)とPICとの
接続くらいでした。まあ、このくらいならすぐにできます。結局、配線が抜けているところは4本だけでした。
しかし、その4本くらいなぜ終わらせなかったんだろう?・・・・謎です。
とりあえずテストプログラムを動かして・・・・あれ?メモリーが・・・・
まずは、配線に問題ないかを確認するために簡単なメモリーのチェックプログラムつくって走らせます。
いつもなら無問題で通過するところなのですが、ガンガンとエラーがでてきます。もう!!面倒くさいなあ〜。
一度挿してしまったICをすべて引っこ抜いて、テスターで導通を確認しています。
あれ、問題ないな〜???
こうなると結構、どつぼにはまるパターンです(笑。
メモリーチェックプログラムなんて、無事に通過することを前提にして作っていますから、まずはそのプログラムを修正して、
どこのアドレスに書き込んだデータがうまく読めないかをリストにするようにプログラムを改造です。で、再度動かしてみると
アドレスには関係なく書き込むデータパターン毎に不良が発生しているようです。さらに、詳しくリストを眺めると、
特定のデータラインに問題がありそうです。でも、導通チェックは問題なかったんだけどなあ〜。
こうなったら、再半田です!
メモリーの配線は熱で被覆が溶けるポリウレタン銅線をつかっていますが、どこかに接触の不安定なところが
あるのかもしれません。一応、問題のあるデータラインはわかっているので、そこをかたっぱしから再半田です。
でも、このポリウレタン銅線って、熱で被覆がとけるといいながら、なかなか溶けません。半田ゴテの温度を上げて
10秒くらい押し付けて、ようやくとける感じのイメージです。逆に10秒もコテ先をおしあてていたら、ICソケットの
プラスチックが軟化してしまって、ピンが曲がってしまいそうです。
ポリウレタン銅線をつかったところでの接触不良があったので修繕です。でも、ここが悪かったかどうかは
いまとなっては不明です。
ようやく復旧・・・
とりあえず再半田を数箇所やって、再度メモリーテストプログラムを動かしたら今度は無事パスできました。
ふう〜、次からはポリウレタン銅線はつかわずに普通の電線つかいましょう。結構大変ですが、半田付けも
確実になるし、ミスもへるかもしれません。でも、ポリウレタン銅線って一巻きかっているから、使わないのも
もったいないな〜。
とりあえずハードは完成かな?配線の保護のためにアクリルのベースプレートをとりつけました。
とりあえずCPMを移植しよう・・
最新のソースがない??? 2020.6.18
以前にもやったことのあるCPM80の移植だけなので、簡単に済むと思っていましたが、意外とてこずりました。
1.最新のソースがない・・・・
2年前に弄ったのが最後なので2018年のタイムスタンプのソースがあるはずなのですが、2016年のものしか見つかりません。
おかしいな〜消すはずはないんだけど・・・。で、全ディスクをスキャンかけますが痕跡すらみつけることができません。
よく考えたら、このCPM80の最新のソフトを組んだときは、自宅で組んでいたはず。そのときのPCは押入れにいれていて、
いまつかっているのは単身赴任先でつかっていたPCなので、PCそのものが違うことに気づきました。え〜、押入れから引っ張り出して
動くようにするのは面倒だな〜・・・・・ということで、結局1/4程度は再度組みなおすことに。これが、また苦闘の原因に・・・。
2.ニッパーが切れない
ソフトの作成と平行して外部I/O用の端子の取り付けも行いました。ここで、φ0.17のポリウレタン被覆銅線をつかった作業も入るのですが、
ニッパの先でうまく切れません。なんか、切れ味わるいな〜。先っちょをよくみたら、なんとすこし開いています。この原因はすぐにわかりました。
妻のアクセサリを直すのに硬い針金状のものをこれで切ってしまいました。ペンチをつかえばよかったのですが、すぐにみつからなかったので、
つい手元にある工具で代用したのが間違いでした。
いつまでたっても切れないので、仕方なく先っちょを修正です。修正といっても、ヤスリと砥石をつかって開いた部分を切り落としたのち、
成形するだけです。簡単な修正ですが、これでまた切れるようになりました。あ〜、時間とっちゃった。
愛用のニッパーですが、横着して針金を切ってしまいました。
針金を切ると、見事に先が開いてしまいました(左)。修正のために先を削り落とします。約1mmくらいおとしました(右)。
3.ソフトが動かない・・・・
過去につくったことがあり、また原型があるのですぐに書きなおせると思っていたのですが、なかなか動きません。
動かない場所はディスクアクセスの部分ですが、ほとんど弄ったところもないのになぜなんだろう????
結構、なんやかんや調べるのに時間がかかりましたが、単純なバグでした。
もともと
a = a / 64
というコードがあったのですが、割り算は計算時間がかかるので少しでも早くしようとビットシフトに置き換えたのですが、
a = a >> 5
と間違って書いたのに、気づけませんでした。正しくは
a = a >> 6
なんですよね。あ〜ぼけだしているな〜。
ようやく動き出しました!
なんやかんやで時間をとってしまいましたが、ようやく動き出しました。あとは、すこし気になるところがあるので、ハードを一部修正です。
クロックを25MHz→20MHzに
水晶発振器にちょうど20MHzのものがなかったで、手持ちの25MHzをものをつかっていました。CPUの動作上限が20MHzなので、オーバクロック状態です。
まあ、それでも問題なく動くので良しとしてもよかったのですが、あとあと動かなくなるのもいやなので、20MHzにシフトダウンです。20MHzの水晶発振子と
74HCU04をつかって発振回路を作成です。
25MHzだとすこしオーバクロックになるので(左)、のちのちも安定に動くように20MHzにシフトダウンです(右)。
裏面の様子です。もっと綺麗に配線しないといけないですね。
I/Oポートの確認はLチカで
3号機には追加でIO端子もとりつけたので、その配線チェックも兼ねて、IO基板を接続してLチカが動くことを確認しておきました。
しかし、20MHzで動くZ80といっても、PICなんかと比べるとかなり遅いです。体感的には1/10から1/100くらいのイメージです。
よく、こんなもんで昔のTVゲームが動いていたんだな〜と感心です。
LEDチカチカもできることを確認しておきました。
CPM80三兄弟完成!
ようやく末っ子も動くようになって、三兄弟が完成しました。
完成したのはいいのだけれど、何に使おうかな〜・・・。まあ、手段が目的に化けることは趣味でよくあることです。
CPM80の三兄弟の完成です。左から2016年、2018年そして2020年の完成です。
反省しなくっちゃ
しかし、2年も経つとすっかり何をやっていたのか忘れてしまうものです。Z80のアセンブラを書いても、どうやってアセンブルしてたっけ???
と、終始この調子。CPM80のシミュレータをPC上で動かしていたこともすっかり忘れてしまっていました。
これらも、また思い出したように使うことがあったら、また一から調べないといけないんだろうな〜。そうしないためにも、色々と記録を残しておくことが
必要です。たとえ、1行もメモでもあるとないとでは雲泥の差です。記憶力が低下している現在ではなおさらです(汗。
今回の反省材料です。
あ、ほったらかしになっているCPM68Kはどうしよう・・・・。もう一度見直すかな〜・・・・・
末っ子に手足基板を作成 2020.9.10
CPM80もそれ単体だと、単に端末につないで動かすだけになってしまうので、具体的なアプリケーションに適用できるように
アナログとディジタル入出力のIOを有するIO基板を作成しました。接続対象となるのは、CPM80の末っ子です。
各種IOを設けたIO基板を作成しました。
アナログ入出力部のパーツです。ADCにはADS835AとMCP6S22(PGA)。
DACにはMCP4922を使いました。
CPM80基板との接続は40芯のリボンケーブルを使いますが、少し長いので折り曲げています。
(おしまい?)