RETROF-16Mの全回路図とその解説
お断り
これらの回路図には独自の回路記号や回路記述手法が多数含まれています。また回路図の書き方として推奨できる記述方法でもありませんし、回路そのものが正しいことを保証するものでもありません。参照はこの点を御理解して頂ける方に限らせて頂きます。
RETROF-16Mの全回路図は3枚組です。
1つの機器の回路図は1枚の紙に収めるのが好ましいのですが、どうしてもA3サイズ1枚に収めることができずA4サイズ3枚組となりました。以下本ページではこの3枚を順に解説します。
回路図1:アキュムレータ、プログラムカウンタ等の主要素子(下図左)
回路図2:SXGA画像生成回路(下図中)
回路図3:命令デコード等の制御回路、及び手動制御用の補助回路(下図右)
各図面はクリックで拡大できます。(PDF対応のブラウザが必要です)
回路図1:アキュムレータ、プログラムカウンタ等の主要素子
回路図1はRETROF-16Mの主要素子である。プログラムカウンタ、主メモリ、ワーキングレジスタ、ALU、アキュムレータ、入出力ポートのバスへの接続方法と、制御信号を記した図です。
ここに登場する素子と信号の詳細は別紙「RETROF-16Mの主な内部素子と制御信号」に記載されていますので、ここではそこには記載されていない事項の補足説明のみとなります。
(回路図1補足1) バス状態確認スイッチ
回路図1の上部中央付近にあるスイッチです。
出力ポート74LS563のゲート端子Gは、出力命令を実行したときに一瞬Hになる信号(図のOUT信号)が与えられますが、このスイッチを切ると、74LS563のゲート端子は常にHとなります。(LSファミリは無接続入力はHと見做される)
これは74LS563が常に入出力透過状態になる事を意味します。
74LS563の入力はアドレスバスとデータバスに直結されており、出力は基板上の32個のLEDに直結されています。従ってこのスイッチをOFFにすることにより、本来は出力ポートに接続されている表示器に過ぎなかったLED群がバス監視用のLEDとして機能します。
本スイッチはハードウェアのデバッグの為に用意したものであり、コンピュータとしての動作そのものには直接関与しません。
(回路図1補足2) 演算コード指定用ダイオードマトリクス
回路図1の下部中央付近にあるダイオードマトリクスです。
正方形の左上角を黒く塗りつぶした様な記号は筆者が独自に作ったダイオードの記号です。
縦に走るラインと横に走るラインの交点にこの記号がある場合、縦線にカソードを、横線にアノードを接続したダイオードがあることを意味します。(ダイオードは1S3を使用)
74LS181はS0〜S3、M、それとキャリー入力Cnを含めた6本の入力端子に与える論理により様々な演算(約40種類)を指定できます。しかし実際に機械語の命令として実装した演算はそのうちの7種類だけなので、左図の様な細工をしています。
(回路図中の抵抗はプルアップ用、1/8W2.2kΩ)
具体的には命令コード中の演算種別を指定する3bit(詳細はRETROF-16MのISAを参照)を一度74LS138(回路図3にあるU25)で8本の信号線(上図OP0〜OP7)にデコードし、それをダイオードマトリクスで再エンコードし、74LS181に与える6本の信号線を生成しています。
この細工により74LS181の煩雑な演算種別指定を、74LS138に与える3本の信号線で指定可能にしています。
ちなみに、74LS181の改良型とも言える74LS281や74LS381では、このダイオードマトリクスに相当する回路がチップに内蔵され、演算指定がより簡単になっています。
回路図2:SXGA画像生成回路
回路図2には、RETROF-16Mのグラフィック表示回路関係をまとめています。グラフィック表示回路は他の回路とは独立しており、本回路が無くてもコンピュータとしての機能は維持できます。
但し紙面の都合上、パスコン(バイパスコンデンサ、名称がCで始まる部品)、ネジ穴(部品ではないがPCBのデザインに必要な名称がNEJIで始まる記号)、及び予備ランド(下記補足参照)を同じ紙面に記載しています。
以下は回路図2に含まれる画像生成回路以外の回路に関する補足説明
(回路図2補足1)制御クロック発生回路
回路図3に与えるクロック(コンピュータ全体の処理速度を決めるクロック)は回路図2から供給します。具体的には画像表示に必要な27.000MHzのクロック(ピクセルクロック)を分周していくつかのクロックを作り、その中からCPUが安定動作する最も高い周波数をジャンパーピンで選ぶ仕組みになっています(下図=回路図2から抜粋)。
どの周波数まで安定動作できるかは、完成して実際に試してみるまでは判りません。
完成後に主要信号の波形をオシロで観察しながらパスコンの追加などで調整した結果、10MHzが限界となりました。しかし上記の回路からは10MHzは供給できません。
こうなる可能性は設計当初より予測しており、基板上に予備の発振器を装着するソケットを用意しています。
最終的にこの10MHzの発振器(エプソントヨコム製、型番はSG-8002DC)を装着し、左図の5番ピンを上記のCPU CLOCKに接続しています。この接続は回路図上では表現されておりません。
(回路図2補足2)予備ランド
回路図2の右側に下図の記号が並んでいますが、これは部品ではなく予備ランドです。
予備ランドとは基板完成後に(設計ミス等の理由で)予定外の部品を装着する必要が生じた際に用いるランド(ハンダ付けをするための小さな銅箔パターン)です。左の写真の緑色の丸で囲んだ部分がこれに当たります。
実際に設計ミスにより、ダイオード4本を後付けしており、その際にこの予備ランドが大活躍しました。
(回路図2補足3)バイパスコンデンサ
回路図2の予備ランド群の下に並ぶのはバイパスコンデンサです。
回路図上では32個のコンデンサが並んでいますが、実際の実装はこの様に等間隔で並んでいるのではありません。回路図は実装位置を表現することができませんので、この様な表記をしています。
容量は全て0.01μFを用いています。
(回路図2補足4)ネジ穴
回路図2のバイパスコンデンサの下に並んでいるのはネジ穴です。
基板には8箇所のネジ穴があります。ネジ穴は部品ではありませんが、PCBエディタに穴の配置が必要であることを伝えるために、回路図上では部品として表現しています。
回路図は全ての穴(正確には穴の周囲の銅箔)がGNDラインに接続されていますが、ネジ止めはアクリルケースに対して行うので、GNDラインに接続するか無接続にするかはに差はありません。金属ケースの場合は1点GND(1本のネジだけがGNDに接続される)の方が無難かもしれません。
回路図3:命令実行の制御回路、手動制御用の補助回路
回路図3と回路図3Aの違いについて
回路図3は、下記の3つの回路が混在しています。
(a)回路図1と回路図2の各素子に対しする素子制御信号を生成する回路
(b)基板上のスイッチを操作により主メモリ内容の変更と実行/停止を行う回路
(c)WindowsパソコンとUSB接続し、主メモリ内容の変更と実行/停止を行う回路
この混在のため、回路図3はとても読み辛いものになってしまいました。
そこで回路図3から(b)と(c)を削除した回路図3Aを用意しました。
更に回路図3Aの回路の主たる機能である機械語命令のデでコードに関する詳細は、本頁から切り離し別頁としてまとめました。
従って、下記の「回路図3A」と「機械語命令のデコード詳細」を先に参照願います。
(左)回路図3A(回路図3の抜粋)
PDFファイルです。
画像をクリックすると開きます
(右)機械語命令のデコード詳細
画像をクリックすると掲載ページに
ジャンプします。
回路図3A:命令実行の制御回路
「回路図3」と「回路図3A」の差異部分、すなわち「手動制御用の回路とWindowsパソコンからのリモート操作用の回路」に関する詳細説明は別頁として作成予定です(時期未定)。
完成次第ここからリンク予定。
演算種別のデコード回路
左図は回路図3Aの一部抜粋です。
図中の74LS377が機械語命令コードの上位8ビットを保持する命令レジスタ、74LS138が命令レジスタの値からALUに与える演算コードを作成するためのデコーダです。
ALUに与える演算命令の演算種別は、命令レジスタに命令がロードされた時点で確定しますが、多少トリッキーな回路となっておりますので詳細を説明します。
尚、演算命令の機械語の詳細に関しては
こちら(RETROF-16MのISA)を参照願います。
演算命令実行時(D15=1、D14=0)の演算種別コード
D12 | D11 | D10 | 138の 有効出力 |
ALUの 演算種別 |
---|---|---|---|---|
1 | 0 | 0 | OP0 | F=A and B |
1 | 0 | 1 | OP1 | F=A or B |
1 | 1 | 0 | OP2 | F=A xnor B |
1 | 1 | 1 | OP3 | A−B |
0 | 0 | 0 | OP4 | F=B |
0 | 0 | 1 | OP5 | F=A+B |
0 | 1 | 0 | OP6 | F=A−B |
0 | 1 | 1 | OP7 | F=A |
演算命令の実行時はD12〜D10の値に応じて、左の表に示す様にALUの演算種別が決まります。
表中のFはALUの出力(アキュムレータに格納される値)で、Aはアキュムレータの演算前の値、Bは命令のアドレッシングモードで決まるもう一方の被演算子です。
「命令レジスタのD12出力」と「デコーダのC入力」は直結ではなくNANDゲートで信号が反転されることに注意意願います。
表中のOP4に対応する「A-B」は、減算は行うがその結果をアキュムレータに格納しないでフラグの変化のみを保存する演算です。
これは左図の様にOP4がLになった時にはアキュムレータのクロックを抑制することにより実現しています。
分岐命令実行時(D15=0)の演算種別コード
D12 | D11 | D10 | 138の 有効出力 |
ALUの 演算種別 |
分岐命令 としての意味 |
---|---|---|---|---|---|
任意 | 0 | 0 | OP4 | F=B | 絶対番地分岐 |
任意 | 0 | 1 | OP5 | F=A+B | 前方相対分岐 |
任意 | 1 | 0 | OP6 | F=A−B | 後方相対分岐 |
任意 | 1 | 1 | OP7 | F=A | 無効命令 |
ALUは相対分岐命令の分岐先の計算にも使用します。
分岐命令実行時はNANDゲートAにより、D12の値は無視され、左表の4種類の演算だけが可能になります。
その他の命令実行時(D15=1、D14=1)と、実行停止時の演算種別コード
演算命令でも分岐命令でもない場合(D15=1、D14=1)は、NANDゲートBの出力がLとなり、74LS138の出力は無効(すべてH)となります。また、実行停止時もNOTゲートCの出力がHになることにより、74LS138の出力は無効(すべてH)となります。
74LS138の出力が無効になるとALUに対する演算コード指定は全てHとなります。このときALUは「B入力端子」の値をそのまま「F出力端子」に出力します。
入力ポートの指定回路
RETROF-16Mには16bitの入力ポートがAとBの2組あります。Aは基板上のトグルスイッチに直結で、Bはキーボードやゲームパッドなどの外部入力装置用です。
両者の選択は切替は回路図の信号I
Bによって決まります(LでポートA、HでポートBが有効)。このI B信号は命令デコーダ出力の13ビットに(ANDゲートを介して)直結され、入力命令の13ビット目の値により、どちらかが選択されます。但し実行停止時(上記回路図のDMAに繋がる信号がLの時)は、回路図中のANDゲートにより、入力ポートは強制的にポートAが選択されます。これは実行停止時に基板上のトグルスイッチを操作して主メモリ内容を書き換える機能を実現するためのものです。
(詳細は「手動制御回路」にて紹介予定)
フラグレジスタと条件分岐命令の条件一致判断回路
RETROF-16Mの条件分岐命令の条件の種類は「無条件」を含め8種類あります。
下記の回路がその条件(演算結果で変化するフラグ)を保持するフラグレジスタと条件の一致判断を行う部分の回路図3Aからの抜粋です。
3種類のフラグは4bitのD-FFである74LS379によって保持されます。
このD-FFは正出力と反転出力の両方があるのが特徴で、これによりフラグの状態は常に74LS379の6本の出力線に現れます。
この6本の出力に「無条件分岐」に相当する常にHの信号、及び画像同期信号を加えた8種類の信号の中から1つを8回路のセレクタである74LS151で選択します。
74LS151がどの信号を選ぶかは、命令レジスタに直結されているABCの3つの入力線で決まります。
実行中の命令が分岐命令の場合、第5ステージの期間74LS151のSTB入力がLになります。このときABCで指定した条件種別と実際の状態が一致したときのみ、出力WがLになり、この信号がプログラムカウンタの値を更新(=分岐命令を実行)します。
HALT命令検出時の対応
命令コードの上位5bitが全てHならば、HALT命令となります。
HALT命令は第5ステージでU36の74LS138の がLになります。この信号はステージカウンタのカウントイネーブル端子(74LS163のET、EP端子)に直結されています。結果としてHALT命令を検出するとステージカウンタ止まり、本機はアキュムレータの出力をデータバスに放出した状態で動きを停止します。
HALT命令の実行による停止は、74LS163をリセットする(0をロードする)事により解除されます。(これには手動で基板上のスイッチを押すか、USB接続したPCからの遠隔操作が必要です)