CPM68Kに次男誕生! 2020.6.27
年寄りの休日の朝は早いです。自分では、まだ年寄りというほど歳はとってないと思うけど、それにしても年々朝が早くなってきている気がします。
(それが年寄りだって言うの!って声が聞こえてきそうですが・・・)。単に前の晩に飲みすぎただけかもしれませんが・・・・。
CPM68Kの1号機は難産でしたが、無事に動き出しました。そして、RAMの増設のときに使ったポリウレタン被覆銅線をつかったワイヤリングペンでの
作業が快適で、また何か作りたくなってしまいました。 通常の電線だと、被覆をすこし剥いて、露出した銅線に予備半田をして、目的とする箇所へ
半田付けする、といった作業が必要で結構な時間がかかります。それに対して、ワイヤリングペンだと、目的とする箇所(ピンなど)に1,2回巻きつけて
そのまま半田コテを当てるだけで被覆が溶けて半田付けができます。とくに1本の配線の接続点が多い場合は、最初に一筆書きの要領で配線したのち、
最後に半田コテを当てるだけで接続が済みますから、便利というか快感です。
で、一度この快感を覚えると中毒になってしまいます(笑。なにかを作りたくてしかたありません。まるで、初めてドリルを買ったら、何かに穴をあけたくて
仕方がない心境です(爆。
ということで、CPM68Kの2号機の作成にかかることにしました。まだ朝早いですが今日中にはできるでしょう!
スペックは?
1号機と同じものをつくっても面白くないので、2号機の仕様は下記のようにしました。
・CPUはオリジナルのMC68Kを使う・・・#安く手にはいったので。
・RAMは最大で7MBまで増設可能に・・・#メモリも追加で注文しているので・・・・
・I/Oの拡張端子をとりつける・・・・・・#何につかえるかわかりませんが・・・。
あとは、1号機に比べてコンパクトにつくるためにもUSB-RS232の変換にはMCP2221をつかいました。これは秋月でも取り扱っていますが200円程度なので
安価で便利な素子です。
まずはPIC周りを配線
MC68K周りは、あとでやるとしてまずPIC周りの配線を済ませます。そして、ここで一度動作の確認です。というのも、なにかトラぶったときに
MC68K周りなのかPIC周りなのかを切り分けておかないと、あとあと大変になるからです。なお、CPI用に64PINのソケットは流石に持っていないので、
32Pinのソケットを2つつかってばらして使います。
まずがPIC周りの配線を済ませて動作を確認しておきます。そして、MC68K周りはソケットだけ配置です。
裏面はまだ電源ラインの配線だけです。これからが本番です!
準備が重要!
ワイヤリングペンを用いる場合のポイントは、一筆書きで配線をおこなうことにありますので、最初に配線図を用意しておけば作業が効率的です。
そのため、エクセルをつかってICピンの配置図を作っておきました。あと、配線するときは基板を裏返して行うので、裏面配置での配線図をつくって
おくとミスの防止にもなります。なんせ、基板を表にしたり裏にしたりすると、必ずといっていいほどピン番号を間違えます。
この図を一枚つくっておくだけで、また数年後に見返したときに何をやっていたのかの資料になります。もう、歳なので頭で覚えることはあきらめました(笑。
最初は面倒ですが、裏面からの配線図(ICの配置図)を作成しておきます。
配線完了!
ワイヤリングペンをつかうと、本当に作業が早いです。朝から作業を始めて、昼前には配線が終わってしまいました。
こりゃ、ますます中毒になっちゃいそうです。もうすでに、次は何をつくろうか・・・と考えだしています。
しかし、そんだけ沢山作っても扶養家族が増えるだけですが・・・・。
配線が完了しました。
非常に配線が薄く出来上がっています。ラッピングワイヤーで作ると、基板の裏がテンコ盛です。
ワイヤーの減りも少ないようです。この一巻きで一生分かな?
配線チェック!
さて、配線が終わりましたが、すぐにICを差し込んで電源を入れるほど自信家ではありません。そう、ゴルゴ13のように慎重派です(嘘。
配線のチェックもICを使う場合は足のピン番号を数えながらになるので、最初にPINの機能を書いた紙をはっておけば作業が楽です。
とくに、今回のMC68000は64ピンもあるので、20PINはどこだ?と探すために、上から数えて20番目・・・・ということをしなくても済みます。
これは精神上とてもいいです。
配線チェックを効率化するために、ICピンの番号がわかりやすいようにしています。
ミスはつきもの!
配線チェックをしていて、1箇所導通がないところがありました。よくみると、ポリウレタン被覆銅線を巻きつけてはあるけれど、
半田付けを忘れている部分でした。近眼の上に、老眼も入ってきれいるのでうっかり見落としたようです。あと、ちょっとチェックに
時間がかかったのがVCCとGNDのショートでした。どこでショートしているかを調べるために、どんどんVCCラインを切断していき、
問題のある領域を割り出していきますが、それでもショート箇所が見つかりません。結論からいえば、半田のわずかな髭状のものが
電源ラインをまたいでいたことでした。ちょうどICソケットの下側だったので、なかなか見つけるのに苦労しました。
ちなみに、配線忘れのチェックは容易ですが、短絡の発見って難しいです。そもそも短絡していないことを前提のチェックですからね。
なにかいい手があればいいですが・・・・。そういれば、無茶苦茶電流を流して短絡箇所を熱であぶりだすという方法があったような・・・。
動かしてみよう!
2号機をうごかのに必要な部品として、SRAMが足りません。これについては暫定的に、CPM80の3号機からすこし借用することにしました。
「すぐに返すからね〜」という口約束のみですが(笑。
SRAMはCPM80の3号機から借用です。
楽だなあ〜
動作をさせるためにはBIOSを書いて、アセンブルしてCPMのシステムとリンクして・・・という作業が必要ですが、
すでにCPM68Kが動いているシステムが傍に1台ありますので、すべてそこで作業ができます。
2台目をつくるというのは極めて簡単です。とlくにトラブルもなく、すんなりと動作させることができました。
いきなりオーバクロックに挑戦!
簡単に動いてしまったので、いきなりクロックの高速化に挑戦です。システムクロックは手持ちの関係から、とりあえず9.6Mzの水晶発振器を
つかいました。でも、使っているCPUは最大16MHzまで動作できるものなので、もっと高速に動かすことができます。
ひょっとして16MHz以上で動いてくれるかもしれません。RAMのアクセスタイムはかなり余裕がるので、早速ですがどこまでオーバクロックが
可能か試してみましょう!
動作確認では9.6MHzの水晶をつかいました。CPUは16MHzまで対応できます。
まずはDDS発振器をつかって・・・・・
システムクロックをすこしづつ上げて動作上限を調べるために、DDS発振器の出力をCPUのクロックに接続しました。
これで、うまく測定できるかな〜と思いましたが、実際に動かしてみると10MHzでは動きましたが、11MHzでは動きません。
もともと16MHzで動くCPUなので、これは予想外の結果です。
原因は、クロックの波形をみて納得です。波形が無茶苦茶汚いです。それにレベルも低いです。
ケーブルに普通のオーディオ用のケーブルを用いたのが敗因でしょう。ちゃんとした同軸ケーブルをつかえば問題ないのでしょうが、
すぐには手元にないので、この実験はあきらめました。
DDS発振器と接続して、動作上限の周波数を測定しようと思いましたが失敗しました。
DDSから接続した波形です。かなり汚いです。ケーブルの問題だろうな〜。
水晶発振回路を組み込む!
DDSをもちいたオーバクロックは失敗したので、ここは大人しく基板上に水晶発振の回路を組み込んで、水晶発振子をとりかえて
どこまで高周波数で動作するか確認してみることにしました。
結論からすれば、16.9MHzでは動作しましたが20MHzでは駄目です。ちょっとした差なんですけどね〜。16MHzと20MHzとの間には壁があるようです。
そりゃ、そうでしょうね。CPUの動作上限(ランク)が8MHz、10MHz、12MHz、16MHzと細かく区切られているくらいですから、16MHzで動くCPUが
20MHzでも動くという期待は淡かったのでしょう。
実装の様子 | クロック波形 | 動作状況 | |
16.934MHz | 一応、問題なく動いているようです。 | ||
20MHz | システムが起動すらしませんでした。 波形はあまり変わらないのすが・・・。 残念です。 |
ここは大人しく16.9MHzで動かすこととしましょう!それでもスペックを越えた値ですから満足しなくっちゃ!
そういうば、予備のCPUもあるし・・・それに交換したら動くかな?
折角なので拡張I/O機能をつかってみるかな。
MC68000 vs MC68HC000 2020.6.28
手元には2個のMC68Kあります。ひとつはMC68000.、そしてもう一つはMC68HC000です。
意識して違う型番のものを調達したわけではなく、単純に違うストアから1個づづ買ったら
結果的に違うものを2個得ることになりました。もちろん、もう1個は壊したときの予備です。
で、この2つの違いを調べてみると、どうやら製造プロセスが違うようです。
MC68000はHMOSで、MC68HC000がHCMOSということらしいです。最初にHが付いていますが、
高密度(High Density)というだけで、中身はそれぞれNMOSとCMOSの違いのようです。
あ、これを知っていたら迷わず68HC000一択にしたんだけどな〜とちょと後悔です。
というのもNMOSとCMOSでは消費電力が全然ちがうはずです。もちろん、CMOSの方が圧倒的に
小さいはずです。たしかにWIIKIをみても、HMOSとHCMOSの違いで消費電力が違うことが書いてあります。
てっきり、MC68000とMC68HC000では製造メーカが違うもんだと思っていました。
(でも、最初にMがついているからどちらもモトローラって気づけよ!ってな声もきこえそうです)
そして現在、基板のソケットに挿入されているMC68000です。
実際にどのくらい消費電流が違うかを測定してみました。
完成したCPM68K次男(MC68000)と予備のMC68HC000です。
こちらはMC68000の型番。
こちらはMC68HC000の型番。製造ロット番号が上のMC68000とほとんど同じなので、
同じ工場でほぼ同時期に作られたものと想定されます。しかし、表面を擦り傷はなんなんだろう?
全然新品という感じではないです。
消費電流の測定結果は
これは圧倒的な違いでした。CPU単体での測定はむりなのでRAMやPICもすべてあわせた結果ですが、
下記のようになりました。
待機時 A>状態 |
稼動時 | |
MC68000 | 約240mA | 260〜270mA |
MC68HC000 | 約68mA | 75〜90mA |
MC68HC000の方が1/3以下と小さいです。RAMとかPICの消費電流も考えると、CPU単体でみたら
もっと大きな差がでていることでしょう。
しかし、USBでの給電をしていますが現状で300mA近く流れているとは気づきませんでした。USBからだと
500mAが限界なので危ないとまではいえませんが、結構多く電流をつかっていました。
これから夏場でもあるので、消費電流の小さいMC68HC000に乗せかえておきましょう。
こうなると、MC68000はかなりデッドストックになりそうだなあ〜。勿体ないな〜。
オーバクロック再挑戦!
載せ換えたMC68HC000がCMOSということで、NMOSよりプロセスが進んでいることもあり、ひょっとして
オーバクロックができるかもしれません。というのも、勝手な思いですが、昔のチップであったとしても、
最近の製造プロセスを使っているとすればかなり速度的にも向上しているはずです。ICの型番に周波数が
記載してあったとしても、限界値をしめすのではなく、単にランクを明示するだけのものかもしれません。
すなわち型番がちがっても、中身はほぼ同じということもかんがえられますからね。実際に、同じようにつくって
選別の中で型番印刷を分けているだけと思いますが、16MHz版がどうやら最高のようなので、それ以上でも
動くことが期待できます(期待したい)。
基板のシステムクロックは16..93MHzの水晶振動子で一度は決定して、基板に半田でしっかりととりつけていますが、
一旦足を取りはずして水晶を交換してみましょう!
一度は16.93MHzで決定したシステムクロックですが1日で改造です。
ををを!!
まずは20MHzに交換です。MC68000ではこの時点で動きませんでしたが、MC68HC000に取り替えた基板では
問題なくCPM68Kが立ち上がってきました。C言語のコンパイル、リンクも問題なくできました。こりゃ、もっと上げられるかもです。
次は24.576MHzに交換です。あまり期待していませんでしたが、こちらも問題なく動作するようです。
次は27MHzです。これも、難なく動作しました。
これ以上の周波数をもつ水晶振動子がないので実験はここまでですが、27MHzでも動作するこが確認できたのは大きな収穫です。
画面の文字の速度もかなり速くなったような気がします。消費電流については16.9MHzに比べて数mA程度増えた程度です。
最大消費電流もほぼ変わらずなのも嬉しいです。
とりえあえず25MHzで動作させましょう!
27MHzで動くことがわかったので、その周波数にしてもよかったのですが、ちょっとだけ安定感を狙って
発振器に25MHzのものが手元にあったのでそれをつかうことにしました。
ちなみに、この25MHzの発振器ですが秋月の福袋を買ったときに大量に入っていたものです。
それにしても、動作確認時の9.6MHzから25MHzに、2.6倍になりました。1号機の倍の速度です。
とりあえず25MHzで動作させることにしました。
一号機のCPUはTMP68301ですが、これのコアCPUは68HC000なので、同様にクロックを上げても
つかえるかもしれません。ただ、現時点でのCPUが12MHz版なので、注文している16MHz版が届いて
交換してから試してみましょう。
しかし、27MHzで動いたということは、30MHz越えも狙えるかもしれません。
こりゃ、発振器を色々と用意してみようかな〜。ああ、なんかまた手段に凝り出してきています(笑。
オーバクロック再挑戦!その2
手元にあったプログラマブルなSi514をつかって、クロックジェネレータを作ってみました。
これで、100MHz以上でもテストできます(笑。
しかし、小さいので組むのが大変。ルーペで確認しながらの作業です。
Si514は3.3V動作なので、5Vのクロックを供給するために74AC04を中間に挟んでレベルコンバートを行っています。
プログラマブルクロック基板です。一番下にクロックドライバの74AC04を配置しています。
矢印の素子がSi514です。小さいです。I2Cで動作させています。
テストしてみましょう!
CPM68Kの2号機に搭載して、テストです。発振周波数がすぐに変更できるように、ICSPは接続したままです。
テストの様子です。
25MHz ○
これは現在動いている周波数です。とくに問題なく動きました。
27MHz ○
これも大丈夫です。ここまでは、すでに調べたところです。
30MHz ○
さて、念願の30MHzですが、これも無事クリアーです。
35MHz ○
なんと、このクロックでも動いてしまいました。
48MHz ○
え!スペックの3倍の周波数ですが。これでも動いてしまいました。
だんだん面倒臭くなってきました。なんせ、周波数を変えるためには定数を計算して、それをプログラムに移して
コンパイルしてPICに書き込むという面倒な作業が必要です。こりゃ、動かない周波数をまずはさがしたほうが
良さそうです。ということで一気に周波数を上げましょう!
60MHz! ×
あ、全然だめです。立ち上がらないです。ちょっと上げすぎました
。
立ち上がりません。やっぱり60MHzでは高すぎのようです。
55MHz ×?
すこし下げて55Mzにしました。なんか、立ち上がったけど表示がおかしいです。
55MHzでは立ち上がりましたが表示がおかしいです。
ここで、あることが判明しました。うまく立ち上がらないと、ディスクを破壊してるようです。
というのも、周波数を32MHzまで落として動かしてみると、起動はしますがディスクの表示が無茶苦茶です。
ディスクの中身をリストアしたら正常に動くようになりました。
ということで。この実験はクロックの設定だけでなく、ディスクの再書き込みも必要になるので、かなり面倒なことがわかりました。
そのため、あと1回程度でやめておきましょう!
50MHz! ○
この周波数は無事動作しました。コンパイル、リンクも問題なく実行できました。
動作上限は50〜60MHzの間にありそうですが、もうここいらで実験中断です。きりがありません。
オーバクロックまとめ
結果的にはスペックである16MHzの3倍以上で動くことが確認できました。もちろん室温の状態です。
そりゃ、16MHzというのは使用環境での最低限の保証値でしょうから暑いときもあれば寒いときもあるはずです。
つねに室温で使われるということではないでしょうから、16MHzというのは、それなりに余裕をもたせている数値ですからね。
50MHzで動くことは確認できましたが、常用値のクロックはどの値にしようかちょっと悩んでしまいそうです。
ちょっと遠慮して33MHzくらいがいいかな〜、いや40MHzくらいまではいけるかな・・・・・
とりあえず、クリスタルがないので25MHzに戻しておきましょう!このクロックならかなりにマージンがあるので安心できます。
ついでに1号機もオーバークロックを試してみようかな。
IOボードを追加しました。 2020.9.10
頭ができたので、折角なので手足を追加することにしました。
追加する内容はADCとDAC、そしてディジタルI/Oです。
手足となるI/O基板を追加しました。
ADCは12BITのADS835Aを使いました。これは、手元に何個かある古いADCですがデータシートが見当たらなかったので、
以前に組んだ基板をからピン配置を解読して使えるようにしました。
このADCは入力が1chのみなので、入力セレクタ代わりにPGAのMCP6S22を追加しました。これは2CH入力を切り替えることができ、
またゲインを1〜32で切り替えることができます。なにより120円/個という値段が魅力です。
DACは12BITのMCP4922を使いました。
アナログ入出力部分です。
頭のRAMを追加
IO基板を追加したのはいいだけど、それを使うには当然のことながらプログラムが必要です。
現状でもSDカード上でコンパイルは出来るのですが、SDカードでのアクセスではクソ遅いこともあり
RAMドライブを構築すべく、RAMを追加しました。
現状は4MビットのRAMの2個で1MBのみMC68Kのシステム領域にすべて割り当てていますが、
さらにRAMを6個追加して4MBにしました。これでシステム領域2MB、RAMドライブ2MBとしました。
SRAMは親亀小亀で追加です。CE(CHIP ENABLE)のみをセレクタで切替です。
RAMを追加しました。電源用のパスコンはRAMの上に搭載しました。
RAMはCPM68Kの1号機から借用しました。
表示器としてグラフィックLCD(128×64ドット)も搭載しました。
GLCDも搭載したIO基板が完成しました。
動作確認も含めて簡単なプログラムを書いてみました。
アナログ信号をGCLDに表示する簡単なプログラムを組んでみました。
ついでにCPM80の3号機(末っ子)用にもIO基板を作成です。
(つづく)