CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

両用設計

VFD制御基板は14セグ蛍光管での動作が確認できたので7セグ蛍光管LD8118のものも組み立てました(下側) 同じ基板でどちらも使える両用設計になってます

 

 

基板の裏側には制御用のPICと電源基板が付いてます。電源基板も両用設計で7セグ蛍光管の方には今回一緒に作成した自作のVFD電源が子基板として載ってます

既製品の電源基板の方は外付けの電解コンが付いてますが左側はアノード電圧の平滑用でこれはデータシート上必須。一方右側は入力電源+5Vのパスコンです。当初はこれがない設計でしたがDCDCコンバータが電源ラインに強力なノイズをばらまくようで無いとPICにリセットがかかってしまいます。自作電源基板の電源ピン用パタンににチューブラ型電解コンがうまく納まりました

チューブラ(アキシャル)型の電解コンって好きなんですけど最近あまり見ません。昔、真空管セットのシャーシの中で空中配線(宙ぶらりん)で使われてるのをよく見ましたが、だから「チューブラ」だと思ってた時代もありました

ROMライタ組立て

ケースの中にROMライタ基板がきっちり収まりました。

 

USBコネクタは子基板でケースの内法ギリまで持ってきましたがケースが肉厚のため、口金だけ露出させてもプラグがどうしてもささりません。仕方がないのでプラグそのものが貫通する大穴を開けてコネクタに挿すようにしました

コネクタの周りが青く発光するおしゃれギミックになってます

(単に工作精度が悪いのとUSBシリアル変換モジュールAE-FT234Xの基板上LEDが明るすぎるからなんですが)

 

さてターゲットの取付けですが当初DIPZIFソケットかましてそこにDIP-PLCC変換アダプタを乗せる予定でしたが、手持ちの山一のZIFソケットにアダプタを乗せてみたら・・・

ダメだこりゃ。

アダプタ基板を削るか、ZIFソケットに3MとかAriesとかレバーの動きが違う他メーカを使えばいいんですけどね

 

3V系フラッシュROMはDIPを使うことはないと思うのでアダプタを直で乗せてしまいました。

ハードはこれでいちおう完了です

 

ケース加工

今回作ったフラッシュROMライタ基板は、TLCS-900ボードのモニタROMを焼いてしまったので当初の役目は完了したのですが、せっかく作ったのでツールとして使いやすいようにケースに入れてみることにしました。

ライタ基板は100×50mmで一回り大きいタカチのプラスチックケースを選びました。

基板は四辺から5mmづつ入った90×40mmの位置にΦ3.2の取付孔をあけていますがこのタカチのケースはまさにその位置に基板取付け用ボスが立っていてそれをそのまま利用できます。

 

ケースにケガキしてゴリゴリ穴あけ・・・相変わらずこれが一番苦手。

 

さて基板の方はケースに入れることを想定したなかったので若干追加工しておきます。まずROMソケットはケース面一に合わせるため3段下駄履きしてかさ上げ。LEDは現物合わせするためいったん外しておきます。

一番困るのがUSBコネクタでケースの外にのぞかせるため基板の切れはして飛び出させました。

 

仮組してみたらとりあえずケースに収まりました

 

レジスタセット

昔、アセンブラでプログラムを書き始めたころCPUの汎用レジスタがもっとたくさんあればなぁなんて思ってた時期もありました。メモリにコピーしたりスタックに退避したりすればいいのはわかりますが、プログラミングをBASICから始めてしまうとコード上の変数のように自由に使いたくなってしまいます。ただそういうプログラムは得てしてズルズル冗長な記述になってしまうのですけど。

すこしアセンブラに慣れてくると今度は少ないレジスタを効率的に使いたくなります。たとえばモトローラMC680x0の汎用データレジスタDnは32ビット長ありますが8ビットBYTE演算、16ビットWORD演算ではそれより上位のビットは丸々切り捨てられてしまいます。これを分割してアクセスできれば8ビットレジスタが4倍になるのにもったいないなとか。

インテルi80x86アーキテクチャでは汎用16ビットレジスタAH/ALのように上位下位で分割ができます。これはちょっとうれしいですが、32ビットレジスタEAXの上位16ビットはやはり単独では扱えません

 

そこで今回のTLCS-900アーキテクチャですが、これはこんなケチな要求にも至れり尽くせりです。32ビットレジスタは4分割して8ビットづつ、2分割して16ビットづつ、32ビットのままいずれも単独でアクセスできます

 

汎用レジスタXWA、XBC、XDE、XHLと4本あり、さらにそれがバンク構造で4面あるので8ビットレジスタ換算では4×4×4で64本もあることになります

この他にZ80でもあったインデックスレジスタIX、IY(さらに追加でIZ)もありそれらも32ビットに拡張され8ビット分割もできるのでレジスタは使い放題です

かつてZ80に16ビットインデックスレジスタIX,IYを上位下位に分けてアクセスする隠し命令がある、なんて話題で盛り上がったこともありました・・今思うとなんとも貧乏くさい話です

レジスタセットはバンク切替という形になっていますがRAn(n=0..3)と添え字を付けて見かけ同時に存在するようにアクセスもできます

こうなると一時記憶はレジスタだけ、スタックを使わないようなプログラムを書けばRAMすら不要かもしれません。といっても内蔵RAMもちゃんとありますが。

 

これでハードも正常動作しているしアセンブラでの開発環境も整ったのですが応用が思いつきません。

ボード上のLチカで満足しちゃってます

 

回路修正

これの直しはコントローラのPICをUSB非対応のものに張替えればRC4/RC5は出力に設定できパタンの修正もしなくて済みます。44ピンTQFPで入手しやすいものであればPIC16F887PIC16F1939でいけます。

ただQFPを剥がすのは取付け以上に大変なわけで、もう一つの解決法としては当初の予定通り表示管をLD8118にすることで、セグメントL,Hは使っていないのでそれでもOKです。

それでいこうかと再度回路図を眺めていたら、うまいやり方を思いつきました。PORTBRB6/RB7はICSPのPGC/PGD専用に使っていますがこのピンはデジタル出力にも設定できます。そこでこれをRC4/RC5につないでしまいます。RC4/RC5は切り離すまでもなくデジタル入力に設定、その先の負荷はトランジスタアレイの入力なのでICSPに支障はないでしょう

 

 

ジャンパが2本飛んでしまいましたがこれはこの1枚目の試作基板のみでこれ以降はPIC16F887を使えばよいでしょう

 

回路の修正に合わせて制御FWも修正。PORTBは桁ドライブとセグメントドライブが共存することになるのでポート更新時には他のビット状態を保護する処理が必要になります。

 

修正後、改善された文字だけ表示させてみました。光学フィルタは緑よりスモークグレイの方がコントラストがいいようです



 

セグメント出力ピン

この2セグメント、下の図でいうとHセグメントLセグメントなのですが先ずハード的な導通を確認しましたがそれは問題なし。

 

信号線はSD11SD12という名称でトランジスタアレイを通してPIC18F4550PORTCRC4RC5に接続してあります

 

このピンはUSB信号と多重化されているようで、ちょっとイヤな予感がしてPORTCのピン機能を調べてみると・・・

ひええ・・RC4RC5はデジタルポートとして使う場合には入力にしか設定できないようです。RC3は存在してなくてVUSBになっていることは気付いてそこは避けるまではしたんですがね~

 

セグメント切れ

14セグメントディスプレーはアルファニューメリック書体で英字の表示もできるので一通り出してみます

”ABCDEFGH”  

これはきれいに出ています。HEX表示するときもA~Fが出ればOKです

”IJKLMNOP”  

むむっ?何かおかしい・・「N」は斜め線が出ていません

”QRSTUVWX”  

これは「X」を見れば明らか 「O」と「Q」、「P」と「R」は区別がつきません

"YZ"   「Y」が変です

 

これはつまりバックスラッシュ方向の斜線をつくる2セグメントが点灯してない、ということです