TTLコンピュータの作成(第3回)

【本ページは仮公開、未校正、かつ未完成、随時加筆中】

第1回、第2回は、本ページ左上のナビから辿れます。

RETROF-16Mの全回路図(最終校正中)はこちらで公開中です。(別窓で開きます)

部品実装前

エッチング、穴あけが終わった基板。ガラスエポキシ片面(20cm × 30cm)。
これに部品を一つ一つ手作業でハンダ付けしていきます。 

ゴム足と電源コネクタの装着

裏面(銅箔面)が机と擦れない様にゴム足を付けます。
更に電源コネクタを付け、基準クロックとなる27.000MHzの水晶発振器を付けます。

ICは原則すべてソケットを用います。これは「取り返しのつかない設計ミス」等で製作を放棄した際にTTLを回収しやすくする為です。かつては「IC自体よりもソケットの方が高いのでソケットは使わない」という考え方もありましたが、今はTTL-IC自体が入手困難になってますので、ソケットの使用は必須です。 

画像出力(SXGA液晶モニタ用)回路の実装

基板は片面基板です。当然大量のジャンパー線が必要です。「スパゲティ配線」、あるいは「ざるそば配線」と呼ばれる基板にならぬ様、ジャンパー線は極力ICソケットの下に隠れる様に部品面を這わせます。

平ピンソケットは形状上、その下に配線を通すのは困難です。ですので少々高価になりますが、ソケットろ基板の間に隙間ができる丸ピンソケットを使います。画像の左側はジャンパー線を極力ソケットの下に隠した画像出力部(SXGA液晶モニタ用)です。

ジャンパー線は大電流が流れる所以外は全て0.26mmのETFE線を信号の種類によって色分けして使用します。(0.26mmは、被覆込の直径ではなく単線導電部分の直径です) 


Aは27MHzから水平方向の画像アドレスを作る74LS161(実際には速度の関係で74F161)3つと、垂直方向のアドレスを作る74LS393が2つ(垂直方向は遅いので非同期の74LS393でも十分)と74LS04。

Bは画像アドレスから垂直同期信号と水平同期信号を作成するためのデコーダ74LS139と、画像アドレスを画像メモリに渡すためのバッファ74LS541が2つです。

Cは下から画像メモリ、画像出力バッファ、DAコンバータ。画像ではメモリは未実装。DAコンバータはとりあえず画像出力バッファの「赤」に相当するビットをVGA端子の「赤出力」に直結しているだけです。 

左の画像はここまでの実装のみで、液晶ディスプレイの表示試験を行っている所。

VRAM(ビデオRAM)を実装せずに、VRAMに接続するアドレス線とデータ線を直結することにより画像のようなチェッカー模様を表示できます。


出力ポートの実装

青色発光ダイオード4つとそのバッファとなる74LS563を1個だけ実装した所です。
ダイオードは「抵抗内蔵型」を最終的には32個実装します。
今回は「青色」を使いましたが、少々明るすぎます。「古典的な雰囲気」を出す意味でも「赤色」のほうが良かったかもしれません。

この発光ダイオードはその横に見える赤いスライドスイッチの切替で「アドレスバスとデータバスのリアルタイムモニタ(常に変化する)」としても機能しますし、「出力ポートモニタ(出力命令を実行した時のみ変化する)」としても機能します。
当面はハードの試験が優先ですから、バスモニタとして使います。



手動プログラミング用の操作スイッチの実装

LEDと手動プログラミング用のスイッチ群を実装したところです。
(ここでいう「プログラミング」とは主メモリ内容の書き換えを意味します)
下部に並ぶ16個のトグルスイッチはプログラム実行時には入力ポートとして働きます。

LEDの下の4つのTTLは出力ポート兼LEDバッファの74LS563、トグルSWの4つのTTLは16ビットの入力ポートを2ch分確保するための74LS257。赤丸部分は多目的レジスタ74LS569を実装予定。

マイクロスイッチは左から「ステップ実行時の手動クロック」「強制停止」「実行」「トグルで示す値をアドレスとして設定」「アドレスダウン」「アドレスアップ」「トグルで示す値を設定したアドレスに書込」



この時点で、入力ポートとなるトグルスイッチと、出力ポートとなるLEDは、それぞれ入力バッファと出力バッファを介してデータバス上で「直結」されます。
従って、バッファ用のTTLを強制的にアクティブにすることにより、トグルスイッチの状態がそのままLED(下段の16個、上段はアドレスバスに接続)に反映されます。

左の写真は0xAAA5をスイッチにセットして、その通りの値がLEDに表示されるかを確認している所


多目的レジスタとプログラムカウンタの実装

マイクロスイッチのすぐ上にチャタリング防止用の74LS279と「実行/停止」を視認するためのLEDを実装したところです。他にもステージカウンタやステージデコーダ等の制御部分の実装も始めています。画像の黄色の丸の位置にあるのはプログラムカウンタ74LS561。

主メモリ用のソケット

主メモリ用のソケット(画像赤丸)を実装したところ。画像の黄丸はCPU側から画像メモリをアクセスする際のバスバッファ。

画像メモリをアクセスするためのバスバッファは、アドレスバッファは74LS541が2つ、データバッファは74LS245が一つ。
本機は16ビット機だが、VRAMは8bit(1ドット256色)。このためVRAMに書き込む値は機械語命令上は16bitであるが上位8bitは無視される。

主メモリ用のソケット

メモリ用のICソケットは、幅が異なるチップにも対応できる様にダブルレール(600milと800mil)にしています。
また、使わない「穴」は半田クズなどが誤って入り込むと取れなくなることがありますので、すべて完成するまでは梱包用のテープで保護します。


主メモリの仮実装

主メモリは1MbitのSRAMを2個使う予定だが、大容量(2015年現在は大容量とは呼べないが)のDIPパッケージのSRAMは貴重なのいで、誤配線など破壊しても良いように、より小容量のSRAMを実装している(ピン配は共通)。

緑色の丸はALU(74LS181)用のソケット。

アキュムレータ(ソケットのみ)と命令レジスタの実装

画像の赤丸がアキュムレータ(74LS395)が4つが収まるソケットです。
74LS395はシフトレジスタですが双方向ではないので、機械語命令は右シフトのみとなります。左シフトはアキュムレータにアキュムレータ自身の値を加えることで実現します。

画像の黄丸が命令レジスタ(74LS377)が収まるソケットです。
74LS377は8ビットのDレジスタで、命令語の上位8ビットのみを記憶します。命令語の下位8ビットは常にレジスタ番号かリテラル値であり、これは命令レジスタではなく多目的レジスタに記憶します。

命令モニタLEDの仮実装とHALT命令の実行

この時点では、ALUもアキュムレータもソケットだけでTTL本体は未実装です。また他にもソケットすら実装していないTTLも数多くあります。
しかし、この状態でもプログラムを実行して機械語の命令コードを命令レジスタに格納する所までは動きます。またHALT命令だけは命令レジスタが特定のコードになった瞬間にステージカウンタを止める方法で実現しているので実行可能です。

IRのLED1IRのLED2

命令レジスタには、動作試験時のみ、命令コード視認を容易にするために超小型LEDを8個搭載した小基板を背負わせます。
右は点灯試験。小基板の裏側に保護抵抗があります。74LS377の出力に直結していますが、消費電流はLED1個あたり1mA以下です。


下記の基板の画像は命令モニタLEDを取り付け、更に命令レジスタが保持する命令コードをデコードするためのTTL(74LS155と74LS138)を追加した時点のものです。
この状態で0番地にHALT命令のコード(#FFFF)を書き込み、実行ボタンを押すと画像の下部のやや左寄りにあるLEDが点灯し、命令実行の動作が止まります。


ALUの実装と無条件分岐命令の実行

74LS181(記画像の緑丸)を実装した所です。
74LS181は4ビット同士の様々な演算を行うALU(算術論理演算ユニット)です。これを4個並べて16ビット同士の演算装置として使用します。この演算装置は演算命令の他に、相対分岐命令の相対アドレス計算にも使用します。

この時点ではアキュムレータが未実装ですので、まだ演算命令は実行できませんし、フラグレジスタも未実装ですので、条件付分岐命令も実行できません。しかし無条件絶対分岐命令と無条件相対分岐命令は実行可能です。

この時点で0番地に「0番地への無条件分岐命令」を書くことによって、無限ループとなる事を確認しています。


演算指定コードを5ビットから3ビットに圧縮するダイオードマトリクス

IRのLED1

74LS181は演算種別を指定する端子が5本あり、30種類ほどの演算を指定できますが、実際に使うのは、A/B/A+B/A-B/A*2/AND/OR/EXNORの8種類のみです。
ですから3ビットあれば演算種別の指定は十分です。このため命令レジスタの出力のうち3ビットを74LS138でデコードし、その8ビットのデコード出力をダイオードマトリックスで再度5ビットの信号にエンコードし、74LS181に与えています。
ダイオードはVfが低い1S3を選択しました。
 


この時点での未完成部分(未実装部品)

・画像メモリ(M68AF127B)と画像メモリ用のバスバッファ(74LS245、74LS541)
・画像メモリの出力をRGB信号に変換するDAC(抵抗ラダーで実装予定)
・アキュムレータ(74LS395)とフラグレジスタ(74LS379)
・命令デコード回路の一部(74LS138、74LS155等)
・主メモリ内容の保存/復元用のUSBインタフェイス(FT245RL)
・メインクロック用PLL発振器(現状は画像表示回路から拝借した1.7MHzのクロックで試験中)

 

 

DAC、ビデオメモリ、USBインタフェイス以外全て実装

下記画像の青丸で示した赤い基板が、画像メモリの出力をRGB信号に変換するための基板です。この時点では画像メモリの出力3bitをRGBに抵抗を介して直結しています。全ての動作試験を行った後に8bitを256色に変換する基板に交換する予定です。

またビデオメモリ(画像黄丸がソケット)も実装していません。これも画像表示関係以外の全てのハード試験が完了した後に実装する予定です。

基板右下にある24ピンのソケットは秋月電子通商から発売されているUSB-パラレル変換ボード様です。この変換ボードを挿すことにより、WindowsパソコンからUSB経由で主メモリの内容変更が可能になりますが、この時点ではまだ未実装です。

この時点で画像出力関係以外の全ての機械語命令が正しく動作することを確認しています。各命令語の動作試験用のプログラムはいずれも数語程度の短いものですが、これを50種類ほど、基板上のトグルスイッチとマイクロスイッチの操作で書き込み試験しました。

 

FT245RLを実装し、とりあえずの完成

USB通信用IC(FT245RL)

FT245RLは8ビットのデジタル入出力をUSB経由で制御できるICです。実際にはFT245RLを直接ハンダ付けするのではなく、秋月電子通商で販売されているUSBコネクタ付きの基板を使用しました。

USBコネクタはケーブルを介してWindow10パソコンに接続し、パソコン側に専用のソフトを作成することにより、主メモリの内容を自由に読み書きできます。

画像メモリ(M68AF127B)

この時点では画像メモリは実装していません。下記の画像ではソケット全体に白いテープを貼ってます。

これは、M68AF127が誤配線等で簡単に壊れてしまう故障してしまうICなので、他の部分の細かな動作試験を終らせてから実装する予定のためです。

このため実際の画像表示の様子は本ページと別のページで改めて御紹介するここと致します。


 

以下は基板の裏面とKi-Cadのパターン図

 ※下記パターン図は部品面から見た図です

開発環境作成編に続く 

画像メモリは未実装ですが、この時点で本基板は完成です。
このあとは、Windowsパソコン上に本コンピュータ専用の開発環境(C++/CLIで記述するアプリ)のコーディングに移行します。
私自身も明日(2016年1月1日)からは、「ハード屋」から「ソフト屋」へ変身します。

Windowsパソコン上で動く開発環境が完成すると基板上のスイッチの操作をすることなく、Windowsパソコンから何万語もの機械語コードを書き込めます。本格的なハード試験や、OS等の開発には不可欠なアプリです。(画像メモリの実装と画像表示関係の詳細な試験はこの後になります)


ソフト構築の詳細も本ページの続きとして別途紹介予定です。

(現状未公開)

2015-12-31 記