CPU実験室

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

#工学

パタンミス発見

バスの動きから見て書込み信号/WRがアクティブの時、データバス最上位ROM3の出力がイネーブルになってしまっているのは明らかです。ROM周りの回路図を確認しました。整然とバス・信号線が引かれているように見えます ですがROM3のあたりを見てみると・・ あ…

データバスの異常

アドレス0x800200と/WRのANDをとったパルス状の/LEDCS信号を8ビットラッチ74HC574のクロックに接続しパラレルLEDをドライブしていますが、先ずこの/LEDCSが全くアクティブになりません。それではこのアドレスの元となるMOV命令のオペランド0x800200がROMから…

コーディング開始

パラレルLEDへのハード的なアクセスは用意できたので、意味のあるプログラムで動作確認していきます。まずはいつものようにLEDチカチカですが最小のコードはこのようになりました。 レジスタの内容をLEDがあるポートに出力したあと、レジスタ内容を…

I/Oデコーダ

ジャンプ先のディスプレースメント表記に疑問が残るのですが、もうすこし大きいプログラムで様子見することにします。プログラムの動きを外から見るため8ビットパラのLEDをアクセス出来るようにI/Oデコーダが含まれる2個目のGALにロジックを書き込みました 1…

基板到着

リファインした8031基板が到着しました。 今回も約3週間かかりましたが、急ぐこともないのでのんびりやります。 2019-10-22 19:33:47 Order received2019-10-22 19:34:48 Your payment information has been confirmed, we will process your order as soon…

コード見直し

それではためしにディスプレースメントを-1にしたらどうなるかやってみました。 JUMP *-1 この場合、バイナリコードは[7F/DA/7F/00]となります。 -1がどうして「FF」でなく「7F」かというとNS32000ではディスプレースメントの上位1ビットか…

コード解析

まずハード的な接続:アドレスバスとデータバスのROM~バッファは導通OKでしたが、バッファ~CPU間はCPUの生足が触れないのでつながってるとこれはもう信じるしかありません。 次はインストラクションコードのバスへのアサインです。 これは前にM…

プログラム実行

出来上がったコード「7F」「DA」「00」と32ビットアクセスされることを考えてもう一つダミーで「00」、計4個のコードをそれぞれ先頭番地に1バイトづつ焼いたROMを用意し基板に挿しこみました。この状態で実行させればアドレスバスはダブルワード…

最小プログラム

初めて使うCPUで最初に実行させる、いつもの最小ループをやってみます。単純にして明快。これだけで基本的なハードウェアは確認できてしまいます。 LOOP: JUMP LOOP 「JUMP $」でもいいのですが文法的にロケーションカウンタ$が使えるかわからなかったの…

NS32Kアセンブラ

ハード環境がほぼ準備でき、いよいよプログラムを書くにあたってまず必要なインストラクションセットのマニュアルとアセンブラですが、これは先に紹介したサイトで見つけてきました。・・・というかここ以外にはNS32000シリーズに関する情報はほとんど皆無と…

デコーダ設計

GALのピン配置はあらかじめ特定してパタンができていて、今回メモリマップが決まったのでこれはもう機械的にPLD設計ツールに入力するだけです。いつものようにロジック図を書いていきます 基本的にCPUから出力されるバスイネーブル/BE0~/BE3をROM…

メモリマップ

いままでNS32000シリーズのアーキテクチャもプログラミングモデルも良く理解しないままハード作成をしてきてしまいましたが、いよいよソフト的な検討を始めなければなりません。ただメモリ構成についてはほとんどの制御線をGALで生成しているのでまだ柔軟な…

部品実装中(3)

とりあえずTCU:NS32C201が動作していること、CPUがアドレスバスをドライブしていそうなことはわかりました。アドレスバスはCPUしかドライブしない訳でしかも24本とも何かしらパタパタしています。DIP,PLCC,QFPならCPUの生足を触れられるのでまだいいですがP…

リセット解除

クロックはCPUへちゃんと供給されているのですがバスがうんともすんとも動かない!とおもったらRESET信号がアクティブになっていました。今までのボードも大体そうなのですが、ホスト側から遠隔でハードリセット出来るようにシリアルポートのDSR信号をリセッ…

ハードデバッグ開始

既に実装してしまっているSRAMがへんにアクティブにならないようにチップセレクトをHに固定しておきます。チップセレクトを生成するGALに仮のロジックを書き込みました。 /ADS(アドレスストローブ)入力もまだ不要ですが1本も入力がないロジックはコンパイ…

CPU実装

ちょっとはやまった感はありますがCPU:NS32032とTCU(Timing Control Units):NS32C201を実装しました。 本来はブロックごとにハードデバッグをするべきなんですが8086基板でもそうだったようにCPUとシステムコントローラ、バスバッファは相互に接続されてい…

CPUソケット

このNS32032ボードはCPUチップセット以外は一般的な部品ばかりなのでどんどん実装を進めていますが機構部品でネックになるのがCPU用のソケットです。CPU形状がLCC(Leadless Chip Carrier)のため専用のICソケットが必要ですがLCCな…

部品実装中(2)

SOPパッケージのIC類も半田付けしました 手持ちがない値のCR類を除いて表面実装のものは完了したので、この後はスルーホール部品、背の高い部品を付けていきます 裏面です

部品実装中

手持ちの表面実装CR、LED類は実装完了しました 見た目にはまだ何もついてないようにみえますが・・・

さらに手直し

自動配線されたパタンを見ているとやはり細かい点が気になってきます。機械的に最適化しているのだとは思いますが、少し遠回しにしたりビアを打ってラインを表裏スイッチしたりした方がスッキリする場合もありちょっとづつ手を入れてます。 特に影響が大きい…

再度アートワーク

GAL内容変更によってピンアサインも変わったので回路図に書き戻しました。 22V10の全てのピンを使い切ってます。 この状態でオートルータを起動して再度アートワークを行いました。今回も1時間ほどで最適化まで完了しましたが、自動配線された結果に…

デコーダ確定

信号ピンが割り付けられない・・というのは22V10に内蔵されるOLMCの数10個以上の出力を要求しているということなのですが、パッと見るとロジック図の右側に並んでいる出力パッドはちょうど10個でありギリ収まるはずです なのに何故エラーかとい…

実装開始

また寄り道してましたがいよいよ部品実装を開始。 部品表でいうと先ずチップコンデンサ0.1μF×30個を一気に付けました 30個のうち4個はRS232Cドライバのチャージポンプ用で残り全ては電源パスコン用です。ちなみにコンデンサ実装前基板の電源ライン間の静電容…

デコーダ修正

これの対処方法は、組合せロジックで出来るクロック(アドレスデコードと/WRの論理積)をいったん信号として外部のピンに取出し、外部接続で改めてGALの固定クロックピンに再注入してやれば行けそうです。 赤枠の中が変更点、CLKOUTピンとCLKピンをGALの「外…

ロジック見直し

さてこのロジック図をispLEVERでコンパイルかけると論理式には難なく展開されますがその後デバイスにフィッティングさせるツールの中で必ずエラーに落ちてしまいます。 FIT Generic Device FitterispLEVER Classic 2.0 Copyright(C), 1992-2005, Lattice Sem…

デコーダ設計

最後に気になったところはGAL内のロジック設計です。今回の回路変更でGALへの入出力信号線は次のようになっています。 基本的にメモリやI/Oへのチップセレクト信号の生成なのでAND項だけで合成できる小規模PLDの最も得意とするところで、例に…

パタン完成

MCS-51(i8031)基板のリファインもこっそり進めています。 実装品をレイアウトしてオートルータを走らせると5分余りで結線完了。その後のオプティマイズも1時間ほどでコンプリートになりました 結構きれいに引かれているので手修正は最小限で済みそう。前…

基板開封

8085、8031プロジェクトが間に入ってしまいましたがそれぞれ一応動いたので、放置していたNS32032プロジェクトを再開します 5ヵ月我慢していた真空パックを開封しました。

フットプリント修正

前にも一度失敗しているのですがSOPのICは幅がメーカ品種によってバラバラなのでパタンを一度紙に印刷して実物合わせしておきます。 最初、ライブラリに標準で含まれる28ピンSOICのフットプリントは狭すぎ、20ピンは広すぎでした。いくつかバリエーショ…

回路更新

実際に作るか判りませんが変更は容易なので現状のプロジェクトをコピーして回路修正をしてみました。メモリ構成として256kbitSRAMを1個追加しただけです あとは既存の不具合対応としてリセットSWの後にリセットIC(TL7705)を追加。 このICは昔からあります…