CPM80の高速化を企む? 2020.11.20

CPM80とCPM68Kの両方で遊んでいると、ソフトの多さではなんといってもCPM80に軍配が上がりますが、
しかし速度的な面でいえば、やはりCPM68Kが上です。この差は使用しているCPUがZ80(8Bit/20MHz)、MC68HC000(16Bit/33MHz)の
バス幅とクロック周波数の違いではありますが、一番大きいのはCPUのアーキテクチャーの違いが大きいだろうと思います。
というのもZ80をCPM80で動かすとなると、i8080の命令しか使えませんが、そうなるとメモリーのアドレッシングの種類が極めて貧弱です。
そのためC言語で書いたプログラムをコンパイルしたアセンブラを見てみると、もう無駄だらけに思えてきます。それに対して、
CPM68KのMC68000はアドレッシングモードが豊富なためC言語との親和性もよいようで、アセンブラの生成効率も高いようです。
すなわち、実行命令数がかなり減っています。実際に、C言語で書いたプログラムをアセンブラでかきなおすと、CPM80(Z80)の場合は
数10倍も速くなりますが、CPM68K(MC68000)では2倍も速くならなかった経験があります。
 そういったこともあり、最近はPCM68Kで遊ぶことが多いのですが、でも、ソフトの豊富なCPM80も捨てがたい。
そのためCPM80ももう少し速くなれば、もっと使ってみようという気がおきるのにな〜と思って、CPM80の高速化を企んでみることにしました。

高速化のポイントは2つ

1.CPUのクロックアップはどうするか
 現在使っているZ80は20MHz品ですが、もっとオーバクロックができるはずです(希望的観測)。というのも、16MHzのMC68HC000も
50MHzで動きました。なんと3倍の高速化が可能でした。それを考えると、Z80もひょっとして40MHzくらいで動くかもしれません。
オーバクロックについては、以前に試したことがあるのですが25MHzで動作しなかった記憶があります。というのも、いままでに作成した
CPM80につかったメモリーは55nsのアクセスタイムのものだったので、メモリーが問題だった可能性があります。もっと速いメモリーを
使えば、もっと速くなるかもしれません。そこで、こんどはメモリーに12nsのものを使って試してみようと思います。


今度はこれ(12ns)をつかえばCPM80も速く動くかな?

 本来はCPUも高速品を使うべきです。探すとZ8S180というものがあって、これは33MHzでも動作するようです。ただしパッケージがPLCCしかないので
ちょっと扱いにくい。それに、すこしお高いです(1200円ほどする)。これについては、機会があれば注文するとしてまずは手持ちのDIPパッケージの
Z80の20MHz品で試してみましょう。Z8S180を入手したら、変換ソケットを作って載せ換えて試してみればいいでしょう。

機会があれば、これも使ってみましょう!33MHzでも動作するようです。でもPLCCは扱いにくい。

2.ディスクの高速化を考える
 CPM80はSDカードをディスクに見立てて動かしていますが、SDカードのアクセス速度はあまり速くありません。もちろんSDカードの理論的転送速度は
極めて早いのですが、フリーで使えるデータ転送プロトコルは3線のSPI制御だけなので知れています。さらにSPIをソフトウエア制御としているのでなおさらです。
そのために、SDカード上でコンパイルなんかしようものなら、余裕でコーヒなんかが飲めたりします。CPM68Kのときだと、カップラーメンができるような速度です。
で、実用的にはメモリーディスクが必要になります。これによりディスクアクセスは格段に速くなります。
 しかし、メモリーディスクのアクセス速度もまだまだ改善の余地がありそうです。

a)現状:リニア空間に配置してPICを介してデータ転送
 いままでCPM80にメモリーディスクを搭載したときは、下図のように2MB程度のメモリーを構成して、一部にZ80用の64kBを割り当て、残りをメモリーデイスク
として使っていました。そして、メモリーはPICのI/Oにぶら下げます。これが、一番ハード的には簡単な方法です。でも、PICをつかってメモリー内でデータを移動
とした場合には、同時に2アドレスをアクセスできませんから、一旦ソース側のアドレスのデータをPICに読み込んで、次にターゲットとなるアドレスに
書き込むという作業が必要になります。このため、1データを転送するにはアドレスの設定やデータの読み込み、書き込みなどを含めると
数10サイクルから100サイクル程度の命令数が必要になります。
 たとえば50サイクルだとすると32MHzのPICで動かすと1命令サイクルは8MHz(125ns)になりますから、データ転送速度は125ns*50=6.3us/Byteです。
すなわち160kByte/s程度(ピーク値)の速度です。まあ、これでも十分かもしれませんが、もっと速くできるはずです。
色々と考えてみましょう。


現状の構成です。1つのRAMエリアをつかっているので、
メモリー間でのデータ転送は一旦PICを介する必要があり、時間がかかります。


b)案1:メインメモリとメモリーディスクのアドレス空間を分ける
 高速化案として、データを一旦PICを介さないようにすれば速くできます。すなわち、メインメモリーとメモリーディスクのアドレス空間を物理的に分けて、
片方を読み出し、片方を書き出しとして同時に動かしてやればいいわけです。こうすれば、大体20命令サイクル程度で1バイトのデータの転送が可能なはずです。
こうなれば現状の倍程度の速度アップになります。ちなみに、20命令サイクルかかる理由は、メインメモリーとメモリーディスクのアドレスの設定です。
1データを転送するごとに、アドレスを+1加算して、それをアドレス用のデータラッチに書き込む作業が必要になるためです。
 この作業をハードウエアのロジック回路で行えばもっと速くなるはずです。ということで、さらに案2を考えます。


案1ではメモリードライブとシステムメモリーのメモリー空間を独立にします。そうすればデータはPICを介する必要ありません。
ただし、アドレスラッチの設定の時間はのこります。



c)案2:メインメモリとメモリーディスクのアドレス空間を分ける+アドレスカウンターを追加する
 アドレスの+1加算をハード的にやればもっと高速になるはずです。ということで、下図のような構成を考えます。
 このようにすれば、システムメモリーとメモリーディスクのカウンターを設定さえしておけば、あとはカウンターのクロックを叩くだけです。
クロックを叩く(L→H)だけなら2命令サイクルで済みます。32MHz品のPICだと250ns/Byte、64MHz品のPICだと125ns/Byteで転送ができます。
すなわち、それぞれ4MB/s、8MB/sのデータ転送速度になります。これならば、現状のものから50〜100倍程度のデータ転送速度が得られます。
いわゆるハードロジックでのDMAコントローラみたいなものです。
ただし、50〜100倍というのはあくまでもピーク性能なので、付帯処理を含めると、差は小さくなりますが案外期待できるかもしれません。


案2としてアドレスラッチではなくアドレスカウンターにします。そうすれば、PICからクロックを叩くだけでデータ転送ができます。
おそらくこれがもっとも高速な方法です。


 ちなみに、メモリーディスクに使うRAMは安価な4Mbitで55ns品の選択になるので、アクセス時間の実力値を考えるとPICを80MHzのオーバクロックで
動かしてもいけそうです。80MHzだと、書き込み信号のパルス幅は50nsになるので、なんとか間に合います。そうすればデータ転送速度は
10MB/sまで向上しそうです。

さっそく回路図を描いてみる!

 アドレスカウンターとしては、メインメモリー用は64kB空間のどこにアクセスするかわからないので16Bit必要ですが、
データの転送は128Byte単位なのでメモリーディスク用は上位は固定として、下位の7ビット分だけのカウンタをつかいます。
なお、カウンターには値のプリセットができることが必要なのと、高速動作ができるようにと同期型のものを並べることにします。
メモリーディスク用ではプリセットは不要なので、非同期カウンターの74393あたりが使えたら1個でICが済みますが、
非同期ならではの時間遅れが気になったので、2個の同期カウンターをつかうことにしましょう。

 
回路図はこんな感じです(PDFはこちら)。自分用なのでお世辞にも見やすいとは思えませんが・・・・

大きめの基板に組み立てましょう
 結構部品点数も多いので、大きめのユニバーサル基板で組み立てることにしました。
まずは部品の配置を考えます。
 メモリーディスクはすこし大きく4MBiteは確保するつもりなので、4Mbit品のSRAMを計8個つかいます。
すべてを平面に配置するには基板サイズがすこし足りないので、2階建てにすることにしました。
すこし見栄えを考えて、SMDタイプのメモリー素子を変換基板に載せた上で、2階建てにします。
そして、全体の高さを抑えるために、メモリーディスクはICソケットを使わずに、基板直付けです。
でも、これが大失敗の原因でした。


まずはICの配置を検討です。すこし大きめのユニバーサル基板をつかうことにしました。

夜な夜な作業!
 回路図もひけているので、あとは夜な夜なの配線作業です。ビールを片手に酔っ払いモードでの半田付けは日頃のストレス解消に最適です(笑。
まあ、人によっては反対にストレスが溜まるだけかもしれませんが・・・・
 しかしCPM80って8ビットなので配線が少なくても済むもので意外と簡単です。それに比べてCPM68Kだと配線数がほぼ倍になるので結構大変です。

夜な夜な作業を進めて、ようやく完成です。


φ0.29mmの太目のポリウレタン線なので、すこし線が盛り上がっています。


完成した状態です。まだICは挿していません。


メモリーディスクのRAM(左側)は2階建てで基板に直付けです。システムメモリーはソケットをつかいました。


動かしてみる!あああ・・・・

 いままでにCPM80用のシステムソフトはいくつか書いていたので、今回のチェックのメインはメモリーアクセス回路の動作確認程度です。
正常にメモリーにアセスできているかを確認するための、チェックプログラムを書き込んでテストしますが・・・・なぜかうまく動きません。

不具合の現象はメモリーディスクの1本のデータライン(D6)がHIGHレベルに固定されている・・・・・

この手の不具合は、大体は配線の間違えとか他の線との接触とか相場が決まっています。ということで、配線を入念に調べますが
どこも異常ありません。テスターでチェックするも、電源ラインへの接触はもとより、近接する線との接触もありません。いったい何が
おこっているのだろう??????

原因を特定するために、4個に接続されているメモリーへのデータラインを一つづつ切り離して、どこで異常が発生しているかをチェックです。
そうしたところ、特定のメモリーへの配線を切り離すと不具合が消えました。どうやらメモリー素子の1つが動作不良を起こしているようです。
半田不良や短絡などによる現象とは違うようなので、おそらく素子の不良でしょう。
問題は、不良がおきている素子の位置です。

なんと、不良箇所は2階建てのRAMの1階部分です。

2階部分ならば、素子を破壊してでも交換できますが1階部分だと手がだせません。2階部分をとりはずすのも至難です。
さらに1階部分への配線が2階部分へのつながっていますから、1階部分の配線を切り離したら2階部分も動作しません。
1階と2階部分を接続する線を切り離すにも狭くてニッパーも入りません。
しかたなく、8個あるうちの2個のメモリー素子は使わないことにします。そのためメモリーディスクは当初予定の4MBから3MBに
減ってしまうことになります。

しかし、いままで2階建てだけでなく4階建てもよくやりましたが、これからはちょっと躊躇してしまいそう・・・。
なんせ、RAMの素子が1個でも不良なら全滅です。


動くようになりましたが、メモリ−ディスク用の8個の素子のうち、2個は死んでいます。
白く見えるのは、ピンの番号と機能を書いたシールです。これがあるとデバッグがしやすいです。


具体的成果は?
 さて、ようやく動くようになりましたが本当に速くなるかな?・・・・・


CPU速度は期待はずれ・・・・ 2020.11.21

さて、まず最初はCPUのオーバクロック調査です。手元に20MHz以上の発振器は25MHzと33MHzがあるので、まずはそれらに差し替えて
テストです。結果は

25MH・・・○
33MHz・・・×

です。なんだ、以前のテスト結果とあまりかわらないじゃん。33MHzもクリアーすると思っていましたが・・・・
ちなみにどのように動かないかといえば、33MHzにするとZ80にリセット信号を送っても、何も反応がありません。
メモリーアクセス以前の問題です。

さて、25MHzで動くとのはいいとしてどのくらいの余裕があるかです。ひょっとして26MHzでは動かないかもしれません。
余裕をもたせるためにも、上限から2割落とした程度で動作させたいものです。

ということで、Si514をつかった可変発振器で調査です。25MHzから1MHzづつ周波数を上げて動作テストです。


可変発振器を差し込んで上限周波数のテストです。


結果は
 25MHz・・・・○
 26MHz・・・・○
 27MHz・・・・○
 28MHz・・・・○
 29MHz・・・・○
 30MHz・・・・○
 
31MHz・・・・×

となりました。動作上限は30MHzであることかがわかりました。ということは25MHzは2割余裕には若干届きませんが
まあ、25MHzなら安定した動作ができるでしょう。ということで、動作には25MHzの水晶発振器をつかうことにしましょう。

発振器はこれ(25MHz)をつかうことにしましょう。ちょっとだけオーバクロックです。

しかし、33MHzくらいで動いてくれると思いましたが、CPU速度についてはちょっと期待はずれです。
こりゃ、早々に33MHz動作のZ8S180を入手しないとだめだなあ〜。

ディスク速度はかなり効果あり

次のCPM80高速化の主題はディスク速度なので、こちらのテストにかかりましょう。
テストプログラムは簡単に128バイトの配列を1024回ファイルに書き出すものです。
すなわち約131kBのファイルを作る時間を測定します。プログラムでは任意の回数を
繰り返せるようにしています。あまり、回数が多いと測定時間がかかるのと、反対に短いと
計測誤差が大きくなため回数は調整できるようにしました。


テストプログラムでは約130kBのファイルを作ります。
ループする回数を指定できるようにしています。

結果は従来比2.72倍の高速化

測定結果は次の通りになりました。
ついでに、2つのCPM80でSDカード上での実行速度も調べておきましたが、これに大きな差があるのは
PICに搭載したSDカードのアクセスルーチンが違うためです。

で、肝心のメモリードライブ上での実行速度ですが、今回試作機では実効速度が116kB/sと3号機の42.7kB/sに
比べて約2.72倍速くなった結果になりました。かなり効果があるようです。よかった〜!!
これで、コンパイルやリンクなどもすこしは速くなるでしょう(こちらはZ80CPUの演算が主体なので、ここまでは効果はでないでしょう)。
ただし比較した3号機とのPICのCPU速度が80MHzと32MHzで2.5倍ちがうので、
同クロックで動いたらどの程度の差になるかは、すこし検証する必要があります。

機種 条件 実行時間
(1回あたり130kB)
実効速度 備考
今回の試作機
 Z80(25MHz)
 PIC(80MHz)
SDカード上で実行 10.3秒 12.7kB/s
メモリードライブ上で実行 1.13秒 116kB/sec 3号機に比べて2.72倍早い。
今回の試作機
 Z80(20MHz)
 PIC(80MHz)
メモリードライブ上で実行 1.4秒 93.6kB/sec 同一Z80CPU速度でも
3号機に比べて2.19倍早い。
3号機
 Z80(20MHz)
 PIC(32MHz)
SDカード上で実行 7.0秒 18.7kB/sec SDカードのアクセスルーチンは
高速化したものを使用
メモリードライブ上で実行 3.07秒 42.7kB/sec

しかし、早いといってもデータ転送の実効速度が116kB/sというのはやはり遅いですね。メモリードライブ上での理論的な転送速度(10MB/s:ピーク値)を
考えると1/100程度の速度しかでていません。付帯する処理に時間がかかりすぎて、メモリードライブ上でのデータ転送速度の変化の効果が
現れなかったのでしょう。こりゃ、ちょと確認テストが必要です。

確認テスト
 メモリードライブの転送速度はPICの速度にのみに依存しています。そこで、Z80の動作クロックを変更したときの実効速度を
測定すれば、メモリードライブでの転送処理の割合がみえてくることになります。
そこで、手持ちの水晶発振器の範囲で取り替えてテストしてみました。

結果は次のとおりです。

機種 条件 CPU(Z80)
周波数
実効速度
今回の試作機
 Z80(25MHz)
 PIC(80MHz)
メモリードライブ上で実行 25MHz 116kB/s
20MHz 93.6kB/s
12MHz 57.2kB/s
9.6MHz 46.1kB/s

これをグラフにするとわかりやすいです。ほぼプログラムの実行時間(処理時間)はZ80のCPUの速度に比例しています。
このことから、PICが関与しているメモリーディスクへの書き込み時間はかなり小さいということの確認になります。
グラフのY切片が2.65ですから、CPU(Z80)が25MHzで動作しているときの、ディスク書き込みに費やす割合
は2.65/116=2.28%という値がでてきました。ここからメモリーディスクへの書き込みのデータ転送速度は
ネット値として116/0.0228=5.1MB/sの値がでていることがわかりました。ピーク性能が10MB/sですから、良い感じの値です。

ほとんど実効速度はCPU速度に比例しています。ということはPICが関与して時間は極わずかということですね。

従来機との転送速度の比較

 今回試作機でZ80が20MHzで動作したときの、メモリーディスクへの書き込み時間の割合は2.65/93.6=2.83%になります。
言い換えれば残りの97.2%がZ80が動いている時間です。従来機に比べて同一Z80速度で全体で2.19倍早いわけですから、
従来機の動作時間は今回試作機の219%分にあたります。処理におけるZ80の動作時間自体は同じなので、従来機のメモリードライブ
に費やす時間は219-97.2=121.8%分です。この値から今回試作機でのメモリーディスクへの書き込み時間の高速化率は
121.8/2.83=43になります。すなわちメモリーディスクへの書き込み速度は43倍向上ということになります。
かなりの効果が得られましたね。ほぼ想定どおりです。

 ちなみに、従来機のPICの動作周波数を、もし32から80MHzまで向上させることができれば、メモリーディスクへの書き込み時間は
121.8/80*32 = 48.72%分になります。Z80CPUの動作時間とあわせると48.7+97.2=146%になります。すなわち、全体の速度でいけば
もともと2.19倍の差が1.46倍程度の差にまで縮まるということですね。面倒なハードを組むよりも、高速なPICをつかったほうが、効率は
良さそうということでしょうが・・・・。まあ、とりあえず、今回の目的の高速化は無事達成できました。

チャンチャン!

Z8S18033を試してみましょう! 2020.12.25

安かったので中古ですがZ8S18033を入手しました。33MHzで動くのですが、どこまで速度があがるか楽しみです。
早速つかってみましょう。

中古ですが、安かったので購入してみました。動くかな〜???


もともとのZ80のあるところの黄色の枠あたりに変換基板をとりつけるようにします。

基板を適当なサイズにカットしてZ80と換装するためのPINをとりつけます。Z8S18033はPLCCなので、裏返して
結線します。左右が反対になるので気をつけて間違わないように配線しましょう。

まずは変換基板を作成です。Z8S18033は両面テープで基板に貼り付けています。


配線が完了しました。パスコンは電源の近いところに0.1uF+10uFのセラコンを入れています。

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

変換基板が出来たので、早速Z80と交換して動かします。

もとのZ80からZ8S18033に交換しました。

Z8S18033を差し替えただけでも動きましたが、既定値の設定では内部でクロックが1/2倍になっているので、
CCR(CPU Control Register)を設定してクロック倍率を1倍に設定します。なお、Z8S180ではI/O空間が16ビット
(Z80では8ビット)に拡張されているので、従来のZ80のIN/OUT命令ではうまく動きません。
そのため、Z8S180で追加された下記の命令をつかいます。

 OUT0 (n)、A  ; 機械語は ED、39、n の3バイト

下表に、オーバクロックを含めた実行速度の実験結果を示します。
結論としては、既定になっているクロック倍率、メモリーWAIT,リフレッシュ制御をそれぞれ1倍、WAIT無し、制御なしに
設定するとオリジナルのZ80よりも高速になりそうです。オーバクロックを含めて動作周波数67.1MHzでZ80の74.9MHz相当
になりました。オリジナルより約12%高速になっています。
 なお、計測結果はスマホのストップウオッチアプリなので、誤差はそれなりにあると思います。

実験 CPU 動作クロック
(MHz)
ベンチソフト
実行時間
Z80での相当クロック
(MHz)
CCR設定 説明
Z80 20 30.7 20 まずは基準を設定です。
2 Z8S18033 20 71.8 8.6 クロック1倍 メモリーWAITがかかっているので
同じクロックでは処理能力は1/2程度になるようです。
3 Z8S18033 20 38.2 16.1 クロック1倍
メモリー WAITなし
メモリーWAITを削除すると速くなりましたが
同一クロックならZ80の80%の能力です。
4 Z8S18033 33.33 23.0 27.7 クロック1倍
メモリー WAITなし
ここからはオーバクロックです。
まずは仕様上のクロックでの動作確認です。
5 Z8S18033 48.0 16.2 37.0 クロック1倍
メモリー WAITなし
48MHzで動きました。これならZ80で37MHz相当です。
6 Z8S18033 67.1 11.5 53.4 クロック1倍
メモリー WAITなし
だめもとで手持ちの水晶で67.1MHzを乗せました
動きました。これでZ80で53MHz相当です。
7 Z8S18033 67.1 8.2 74.9 クロック1倍
メモリー WAITなし
リフレッシュ制御なし
データシートを読んでいてリフレッシュ制御を止めると速く
なるのではと思い、テストしてみました。なんと約30%ほど
速度向上しました。これでZ80で75MHz相当です。
ものすごく速くなりました。

設定
 クロック1倍     : CCRの001FHに80Hを設定
 メモリーWAITなし : CCRの0032Hに00Hを設定
 リフレッシュなし  : CCRの0036Hに00Hを設定


しかしCPM80もZ80で75MHz相当のクロックで動くと、いままでとは別物のような感じです。
きびきび動いて気持ちいいです。

どこまでオーバクロックできるか?

Z8S18033は仕様上は33MHzがMAXですが、手持ちの67.1MHzの水晶でさえ動作したので、もうちょっと周波数を上げても動きそうです。
安定的に動作する周波数を探るためにも、もうちょっとオーバクロックで弄ってみましょう。

だめかあ〜 2020.1226

67.1MHz以上のオーバクロックを期待してSi514をつかった発振器に換装してテストです。

まずは、70MHzに設定してテスト!・・・・立ち上がりません・・・・・・

え?いきなりオーバクロック挫折です。ひょっとしてSi514の発振器のドライバが悪いのかと思って、

60MHzや65MHzとすこし下げて設定すると、問題なく動きます。どうやら67.1MHzというのが、ほぼ限界だったようです。

ということは、このまま67.1MHzの発振器をとりつけると、動作が不安定になる可能性もあるので

10〜20%近く周波数を下げたほうがいいでしょう。具体的には54〜60MHzあたりの発振器になりそうです。

ただ、すぐには手持ちもないので、とりあえずは48MHz(秋月で100円で買った)をとりつけておきましょう。

これでも、Z80では57MHz相当のクロックになりますから、かなりの動作速度です。

 

そろそろお開きかなあ〜

 

これ以上、実体のZ80をつかって高速化動作させるアイデアがないので、そろそろこのコーナもお開きにしましょう。

とりあえず、下記が確認できたので良しとしましょう。

 

 ・メモリーディスクにDMAを取り入れることで、転送速度はピーク性能10MB/s(グロス値)を得られた。

  ネット値でも5MB/s。I/Oにぶら下げたメモリーディスクに比べて43倍の高速化です。

 

 ・Z8S18033(33MHz品)をつかって67.1MHzの動作ができました(Z80だと75MHz相当)。

  メインメモリに高速(12nS)なSRAMをつかうことの効果でしょう。

クロック改造 2021.1.1

手持ちの部品(Si514等)をつかって発振器を改造することにしました。SI514を使うことで、任意の周波数を生成することができます。
回路図は下図の通りです。Si514は3.3V動作なので、それをI2C制御を行うPIC12F615も3.3Vで動かします。クロックの出力は5Vが必要なので
74AC04でレベルコンバートです。74AC04の入力は2.5Vを中心に振れるようにAC結合としています。


SI514を使った回路図です。


実装した状態です。


Si154は裏返して変換基板にとりつけています。

;60MHzクロックバイナリー(PIC12F615)
:1000000001308A00482900004D308400000803199F
:1000100017280130C100C001C00B0C28C10B0B28F0
:100020004A30C000C00B12281528800B0928080090
:100030008316851603308312C000C00B1D280516D9
:100040000330C000C00B222805120330C000C00BD3
:100050002728080085128316851203308312C000FA
:10006000C00B302805160330C000C00B3528051220
:100070000330C000C00B3A280800D1018316851652
:1000800003308312C000C00B432805160330C000A4
:10009000C00B4828851E56280330C000C00B4E28D0
:1000A000D10A5108643C031956284A280512033026
:1000B000C000C00B59280330C000C00B5D2885125A
:1000C0008316851203308312C000C00B65285108C7
:1000D000643C031D71288A0100280130C100742886
:1000E00074280030C1007428080085128316851218
:1000F00003308312C000C00B7B2805160330C000FC
:10010000C00B80288316851603308312C000C00BF5
:10011000872808004D08C40005160330C000C00B36
:100120008F2885128316851203308312C000C00BFE
:10013000972805120330C000C00B9C284D08D10041
:10014000D2015208063C031CAE28D11FA928182052
:10015000AA282A200310D10DD20AA1282A203D2046
:10016000C1080319B72875200130C100E628D00165
:100170005008073C031CC528CE1FC0281820C128E2
:100180002A200310CE0DD00AB8283D20C10803193B
:10019000CD2875200130C100E628D0015008073C69
:1001A000031CDB28CF1FD6281820D7282A200310AD
:1001B000CF0DD00ACE283D20C1080319E3287520B1
:1001C0000130C100E62875200030C100080023304E
:1001D000C500EE30C600D030C7005930C8007130BD
:1001E000C9000830CA002430CB00CC01AA30CD00B1
:1001F0008430CE00CF018A20AA30CD00CE01450840
:10020000CF008A20AA30CD000530CE004608CF00AE
:100210008A20AA30CD000630CE004708CF008A20C1
:10022000AA30CD000730CE004808CF008A20AA307F
:10023000CD000830CE004908CF008A20AA30CD007A
:100240000930CE004A08CF008A20AA30CD000A30FB
:10025000CE004B08CF008A20AA30CD000B30CE0054
:100260004C08CF008A20AA30CD008430CE00053063
:10027000CF008A200A30CD000420AA30CD0084307F
:10028000CE000430CF008A200A30CD00042061293E
:1002900084011F3083051F1383161F109F101F1129
:1002A0009F1183129A019C01831605128312051671
:1002B00085160230C500FA30CD000420C50B5B293D
:0602C000E7286300630063
:02400E00443C30
:00000001FF
;PIC12F615

お?ちょっとだけ期待できましたが・・・・・

レベル変換である74AC04の入力をAC結合しているので、その出力はかなりDUTY比50%に近くなっているはずです。
そのため、ひょっとしていままで以上に高い周波数で動くかもしれないということで、一度いままで動かなかった70MHzに
設定してみました。その結果は、うまくCPM80が立ち上がりました。しかししばらく動かしていると、いきなりリブートがかかったりして
継続した動作ができないようです。ちょっとだけ、動作速度があがりましたがやはり70MHzが限界近くということでしょう。
ということで、クロックは60MHzに設定です。これで最終設定でしょう。Z80換算で67MHzの動作速度です。

もげた〜 2021.1.3

USBからRS232信号に変換するモジュールはPCとPICとの通信に便利に使っていますが、
マイクロUSBのコネクタの取り付け強度には不安を感じていました。というのも、コネクタは表面実装部品で
基板には表面に小面積の半田付けで固定されているだけです。このコネクタに比べて、プラグの方は結構大きいの
着脱のときには結構なモーメント負荷がかかってしまいます。
それもあり、追加のための半田付けや補強のワイヤなどをいれる場合もあるのですが、
ついにコネクタがもげてしまいました。

便利につかっているUSB-RS232の変換基板ですが、USBコネクタの
取り付け強度に不安があります。上の写真は別の基板に搭載した変換基板です。


もげだ状況を観察すると、コネクタの半田付けの銅箔がめくれあがったようです。
銅箔の端に半田付けしてあったので、銅箔の基板間に応力集中が生じたのでしょう。
銅箔も接着強度が低かったのか、あるいは設計のミスか・・・あるいは力任せに
USBプラグを脱着したのがまずかったのかな〜?
 原因はともかく、修理が必要です。なんとか元には戻せそうでしたが、形だけ元に戻しても
すぐに壊れそうなので、いっそのことUSBコネクタを通常サイズのものに変更することにしました。


何度も抜き差ししていたら、補強しているにもかかわらずUSBコネクタがもげてしまいました。

修理しましょう

基板についたフラクスをアルコール洗浄してパターンを観察すると、なんとかVDDとデータ線は取り出せそうです。
φ0.29mmの配線材料をつかって接続です。配線に負荷がかかると、容易に半田付けがとれるので、根元で固定します。


アルコールでフラクスを洗浄です。なんとかD+,D-,VDDの配線は引き出せそうです。


φ0.29の線を半田付けしました。根元で固定しておきます。

修理完了!

基板の離れたところに、普通サイズのUSBコネクタを設けて配線です。
このコネクタなら強度的には安心できます。

マイクロUSBから普通サイズのUSBコネクタに変更です。これで、強度的には安心です。


(もうおしまい?)