CPU実験室

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

MC14500

スタック実装

カウンタ単体の動作がOKになったのでいよいよLIFOの機能を作りこんでいきます。まずは規模を見るためスタックは1段としスタックポインタは不要にしました。 入力信号として PUSH・・・・CALLするとき現在のアドレス値をスタックに退避 POP・・・・・RETURNす…

クロック整形

鈍っているクロックを整形するためにシュミットトリガを通してCPLDへ注入することにします。規模の大きいPLD/FPGAであれば入力特性を設定できるかもしれませんが、ここでは小さい青のブレッドボードに74HC14を載せ、論理をもとに戻すため2段かましてEPM7064…

クロック立上り時間

プログラムカウンタの最下位4ビット:Q0~Q3はうまい具合にCPLD基板上のLEDモニタに接続されているのでクロックを1Hzくらいまで落としてカウント値の遷移を目視で観察してみました。 すると 0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F-1-2-3-4-5-・・・ という具合でF…

プログラムループ

クロック同期プリセットができる12bitカウンタをEPM7064に焼き込み、以下のテストプログラムを実行させてみました。LEDを点灯、消灯をLED0~LED7に順番に行うので光が流れるように見えます。 プリセットがクロック非同期だと飛び先アドレスにはNOP+実効アド…

プログラムロード

プログラムロード時には非同期プリセットをPICで叩くことでメモリへの展開ができるようになりました。なんですが、今度メモリに展開されたコードをダンプ機能で見てみると、なんか変なところがあります。 以下の出力はPIC上のモニタの中にデバッグルーチンを…

ロジック変更

コントローラのPICからプログラムメモリにコードを書き込む場合、 ①PICから12bit幅でアドレスを出力 ②プログラムカウンタのPE(プリセット)端子をドライブしてアドレスをロード ③PICから16bit幅でインストラクション(4bit)+実効アドレス(12bit)を出力 ④…

満身創痍

MC14500ボードにはバスに介入してICE的な動作をするコントローラPIC18F4550が載ってます。ホストからのプログラム転送、メモリへの展開も担っていますが今回プログラムカウンタをクロック同期にするため、このメモリアクセス部分の変更が必要です このプログ…

カウンタ換装

MC14500ボード上のプログラムカウンタ跡地にアダプタ基板を差し、そのピンソケットからCPLDデバッグ基板のピンヘッダにジャンパ線を飛ばして両者を接続しました。 データ出力12本、プリセット入力12本、RESET信号、LOAD信号、電源2本でCPLDはワイヤのジャン…

アダプタ完成

MC14516の跡地に挿すアダプタ基板が完成しました。12ビットバイナリカウンタの信号線をピンヘッダに取り出すだけなんですがこれだけつくるのに丸三日。疲労困憊しました。 1..27mmピッチのユニバーサル基板へのはんだ付けはほんと目がチカチカしてきます。基…

カウンタ記述

プログラムスタック34706×3個分の機能をEPM7064にインプリメントしますが問題なのは4bit×16wordのRAMでこれだけで64個のレジスタ=マクロセルを消費してしまいます。 これだけでEPM7064は一杯な訳でそれを3個分などEPM7128にしても入りません。スタックの段…

探して~たら あるじゃない。

bitsavers.orgでフェアチャイルドのアーカイブを探ってみるとBipolarMicroprocessorDATABOOK(1976)に原典がありました。4706,9406 LIFOStack/ProgramCounterが同等品でしょう。それにしても製品ラインナップをみると興味深いものがいろいろあります。1976…

34706

さすがに型番の数字だけでは全くヒットしませんが、思いついて「34706 LIFO」とやったら一発でデータシートが見つかりました。なるほどPROGRAM STACKという名称でフェアチャイルド製です。 フェアチャイルドなら「F~」とかのプリフィックスが付きそうですが…

プログラムカウンタ

以前作ったボードを久々に動かすシリーズですが、今日はMC14500ボードです。 これも動作には問題ありませんが、すでに書いたようにこのボードは酷い設計ミスをしていてジャンパだらけなので見ているうちにリファインしたくなってきました。 配線ミス以外にも…

ICU用アセンブラ

ICUのニーモニックを受け付けるアセンブラを作ってみました。 マシンコード自体は16ビット固定長で上位4ビットは16種類のインストラクション、下位12ビットはそのまま操作対象の実効アドレスなので非常に単純な構造です。 初めはMASMのマクロ定義で展開しよ…

モニタ組込み

ICUボードにモニタプログラムを搭載しました。 といっても普通、ワンボードコンピュータに載っているようなCPU自身が制御するレジデント型のモニタではなくシステム制御のPIC18F4550がICUのバスに介入し、ICUと無関係にデータやステータスを覗いたりメモリを…

データメモリ実装

最後に残していたデータメモリのHM6287を実装してハードウェアは完成しました。 その上側にあるのが標準ロジックICに紛れて目立っていませんがこのボードの御本尊、MC14500です。 このメモリの動作確認を兼ねて、もう少し大きいプログラムを動かしてみました…

インバータ挿入

デコーダを正論理出力の74HC239に貼り替えようかと思いましたが、入力ポートの方の論理は正しいので2本のデコード出力のみにインバータを挿入することにしました。 空きゲート、予備パタンは無いので基板の裏にSOPのシングルゲート(TC7W04F)を接着…

I/Oポート接続

ICU自体の動作は確認できたのでデータバスに接続されたI/Oの動作確認をしていきます。バス接続についてもいまさらながら構成図を書くとこんな具合になります、 16ビットのデジタル入出力と2kビットのデータメモリが接続されますがデータバスとなっていると…

ハード修正断念

JMP信号の微分回路はシミュレーションからざっくりC=220pF、R=1kΩとし だいたい150~200nS幅の正パルスを得られるようにしました この回路をブレッドボード上で実現してみたのですが、結果が思わしくなくジャンプ先のアドレスが正しくありません。パルス幅が…

メモリ発振

JMPコードが実行される仕組みを考えて見ます ICUは4ビットのJMPコード($C)を認識すると単にJMP出力をHにするだけです。 一方、プログラムカウンタはメモリから出力されている残り12ビットをJMP出力によってカウンタにプリセットします。 そこで、プログラ…

アドレスバス異常?

単純ループがうまくいったので、次はアドレスデコーダが正常に機能するか、 オペランドのアドレス値をかえて実行してみました。 ここでは先頭で1番地のデータをバスから読み込むようにしただけの変更です ところがこのプログラムを実行してみるとどうも動き…

ICUでLチカ

ICUを動かす準備が整ったのでいよいよICU部分のコーディングを始めます。 まず、簡単な永久ループから。 以下のリストはシステムコントローラの18F4550に書き込まれますが このうち先頭で定義されている配列の中身自体がMC14500のネィティブコードです。 1…

ベリファイ異常の謎

18F4550とPICkit2の接続は一発でOKになり、簡単なスイッチ読取、LEDチカチカなどの動作も問題なく確認できました。 それではと、カウンタ・メモリなどを制御する本ちゃんのプログラムを書き、これもハードデバッグをする意味を含め少しづつダウンロード、実…

コントローラ作成

ICU基板の裏側に付けた18F4550のコーディングを始めました。 (メインのMC14500と少し名前が似てます・・) この基板の縁の下の力持ちというか、陰で実権を握るフィクサーってところです これを仲介すれば1ビットCPUとUSB通信だってできちゃいます。 基板の…

システム構成

もうかなり基板の作成が進んでいますが、いまさらながらシステムの構成図を描いてみました 次の図はシステムの中心となるICUまわりです それぞれのユニットはシステムコントローラ(実体はPIC18F4550)によって制御されます。 まずプログラムメモリにプログ…

バス結線補修

パタンカットに続いて、SRAM→ICUへのバス配線をジャンパで飛ばしたところです ICUと12ビットプログラムカウンタ(4ビットバイナリカウンタ4516×3個)はもうソケットに実装しました。 裏面の様子です。既存のビアなどを利用してICU→PIC間の修正をしています

基板修正開始

1本に癒着してしまったインストラクションバスを全てバラバラに切離し、 さらにこのバスをPICの空きポートに接続しなければなりません ところがPICはほとんどのピンを使ってしまっているのでICUのステータスをモニターするつもりだったRD0-3の4本にインスト…

やってしまった・・

操作スイッチやLEDなどを次々に取り付け、だいぶ完成に近づいてきました。 メモリをダイレクト制御するPICのプログラミングをしようと汎用ポートのピンアサインを確認をはじめました。 (・・こういうプログラマブルな部分はどうせ後からでも何とかなるだろ…

SRAM実装

SOP28パッケージののSRAMですが、東芝のもの乗せてみても同じくらいのはみ出し方だったのであきらめ、平らな板にピンを押し付けて、幅方向にクイッとフォーミングしてみました。だいたい良さそうなんで半田付け・・・と今見たらIC21の1,2ピンがブリッジして…

部品実装中

ICU基板にポチポチ部品を取り付けていますが、SRAMを半田付けしようとしてトラブル発生。 SOP28ピンのフットプリントにたまたま手持ちの64kbitSRAM、CXK5863Mを乗せたところ、フットプリントより微妙にピン列幅が広いじゃないですか! 下の写真のようにラン…