| 一般情報 | |
|---|---|
| 発売 | 1976年 |
| 共通メーカー | |
| パフォーマンス | |
| 最大CPU クロックレート | 3.3MHzまで |
| データ幅 | 16 |
| アドレス幅 | 16 |
| アーキテクチャと分類 | |
| 命令セット | PDP-11のような |
| 命令数 | 119 |
| 物理的仕様 | |
| パッケージ |
|
| 歴史 | |
| 後継 | なし |
WD16は、1976 年 10 月にWestern Digital 社が発表した16 ビットマイクロプロセッサです。このプロセッサは、 DEC LSI-11ローエンドミニコンピュータやPascal MicroEngineプロセッサの実装にも使用された汎用設計のMCP-1600チップセットに基づいています。3 つのシステムは主にマイクロコードが異なり、各システムに独自の命令セット アーキテクチャ(ISA)が与えられています。
WD16はPDP-11命令セットアーキテクチャの拡張を実装していますが、PDP-11とマシンコード互換性はありません。 [1]命令セットとマイクロコーディングは、Dick WilcoxとRich Notariによって作成されました。[2] WD16は、直交 CISCアーキテクチャの例です。ほとんどの2オペランド命令は、任意のアドレッシングモードでメモリ間を操作でき、一部の命令では最大10回のメモリアクセスが発生する可能性があります。
WD16は5つの40ピンDIPパッケージで実装されています。最大クロック速度は3.3MHzです。メモリとのインターフェースは16ビットの多重化データ/アドレスバスを介して行われます。[3]
WD16 は、Alpha Microsystemsの AM-100 および AM-100/T プロセッサ ボードで使用されていることで最もよく知られています。[4]プロトタイプは 1977 年にデモされました。 [5] 1981 年の時点で、WD16 をベースにした Alpha Micro コンピュータは少なくとも 5,000 台ありました。[6] 1982 年になっても、WD16 をベースにした Alpha Micro は依然として「スーパーマイクロ」と呼ばれていました。[7] WD16 は1982 年 6 月にMotorola 68000に置き換えられました。 [8]
メモリ
データ形式
アドレス指定可能で書き込み可能なメモリの最小単位は8ビットのバイトです。バイトはレジスタR0からR5の下位半分にも保持されます。[9]
16 ビットワードは、最下位バイトが下位アドレスに位置する リトルエンディアン形式で保存されます。ワードは常に偶数メモリ アドレスに揃えられます。ワードはレジスタ R0 から R7 に保持できます。
32 ビットのダブルワードは、下位ワードが下位番号のレジスタに格納されるレジスタ ペアにのみ格納できます。32 ビットの値は、MUL、DIV、および一部の回転および算術シフト命令で使用されます。
浮動小数点値は 48 ビット長で、メモリにのみ保存できます。この形式は、単精度浮動小数点形式と倍精度浮動小数点形式の中間です。これらは、"PDP エンディアン" と呼ばれることもある、珍しいミドル エンディアン形式で保存されます。浮動小数点値は常に偶数アドレスに揃えられます。最初のワードには、符号、指数、仮数の上位バイトが含まれます。次の上位アドレスには仮数の中間 2 バイトが含まれ、次の上位アドレスには仮数の下位 2 バイトが含まれます。完全な形式は次のとおりです。
1. 数値全体を表す 1 ビットの符号。正の場合は 0 になります。
2. 範囲が +127、-128 の128 超過表記の 8 ビットの 2 進指数。指数が -128 の有効な数は、真のゼロ (すべてゼロ) のみです。
3. MSB が暗黙的に含まれた 40 ビットの仮数。
メモリ管理
WD16 の 16 ビット アドレスは、64 KBのメモリに直接アクセスできます。WD16 には、固有のメモリ管理や保護機能はありません。AM-100 アプリケーションでは、最後の 256 個のメモリ位置がポート空間にマップされます。[10]ほとんどの AM-100 コンピュータはマルチユーザー コンピュータとして使用されていたため、メモリは通常、バンク切り替えによって 64K を超えて拡張されました。AM-100 は最大 22 ユーザーと 512 キロバイトの RAM に構成できましたが、[6] 9 ユーザーの AM-100 の一般的なメモリ構成は 352 キロバイトの範囲でした。[11] 1981 年には、オプションの AM-700 メモリ管理ユニットが AM-100/T に提供され、 256 バイト単位でメモリをセグメント化できるようになりました。[12]
CPUレジスタ
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CPUには、R0からR7までの8つの汎用16ビットレジスタがあります。これらのレジスタは、次の例外を除いて、どのような目的にも使用できます。レジスタR7はプログラムカウンタ(PC)です。どのレジスタもスタックポインタとして使用できますが、R6はハードウェア割り込みとトラップに使用されるスタックポインタ(SP)です。R0はブロック転送命令のカウントです。[9]
アドレッシングモード
ほとんどの命令は、各オペランドを指定するために6ビットを割り当てます。3ビットは8つのアドレッシングモードの1つを選択し、3ビットは汎用レジスタを選択します。6ビットオペランドアドレッシングモードのエンコードは次のようになります。[9]
次のセクションでは、各項目に、オペランドをアセンブリ言語で記述する方法の例を示します。Rn は、R0 から R7 まで記述される 8 つのレジスタの 1 つを意味します。
汎用レジスタアドレッシングモード
次の 8 つのモードは、任意の汎用レジスタに適用できます。R6 (スタック ポインタ、SP) と R7 (プログラム カウンタ、PC) に適用した場合の効果については、次のセクションで個別に説明します。
インデックス モードとインデックス遅延モードでは、X は命令の 2 番目のワードから取得される 16 ビット値です。ダブル オペランド命令では、両方のオペランドでこれらのモードを使用できます。このような命令は 3 ワード長です。
レジスタの自動インクリメントおよび自動デクリメント操作は、バイト命令では 1 ずつ、ワード命令では 2 ずつ、遅延モードが使用される場合は常に 2 ずつ行われます。これは、レジスタがアドレス指定する量が (ワード) ポインタであるためです。
プログラムカウンタのアドレッシングモード
R7 (プログラム カウンター) が指定されると、次の 4 つのアドレッシング モードが自然に有用な効果をもたらします。
絶対モードの一般的な使用法は 2 つだけです。絶対モードの構文は即時モードと遅延モードを組み合わせたものです。1 つ目は、0000-003F の予約済みプロセッサ位置にアクセスすることです。もう 1 つは、各デバイスのレジスタが特定のメモリ アドレスを持っているため、ポート空間で入出力レジスタを指定することです。相対モードは構文が単純で、プログラム変数やジャンプ先を参照する場合によく使用されます。相対モード (および相対遅延モード) を内部参照専用に使用するプログラムは位置に依存しません。つまり、プログラム自身の位置に関する仮定が含まれていないため、任意のメモリ位置にロードしたり、移動したりすることができ、その位置を反映するようにアドレスを調整する必要がありません。現在の位置を基準としたこのようなアドレスを計算する際、プロセッサはオンザフライで 再配置を実行します。
即時モードと絶対モードは、それぞれ PC に適用される自動増分モードと自動増分遅延モードにすぎません。補助ワードが命令内にある場合、次の命令の PC は補助ワードを超えて自動的に増分されます。PC は常にワードを指しているため、自動増分操作は常に2 のストライドで行われます。
スタックアドレッシングモード
R6 (SP とも表記) は、トラップと割り込みのハードウェア スタックとして使用されます。WD16 が提供する一連のアドレス指定モードによって強制される規則では、スタックはアイテムがプッシュされるにつれて下向き (下位アドレスに向かって) に拡大します。モードが SP に適用される場合、またはプログラマがソフトウェア スタックとして使用することを選択したレジスタに適用される場合、アドレス指定モードには次の効果があります。
ソフトウェア スタックにはバイトを含めることができますが、SP は常にワードのスタックを指します。SP での自動インクリメントおよび自動デクリメント操作は、常に 2 のストライドで実行されます。
命令セット
WD16命令のほとんどはバイトとワードで動作します。バイトはレジスタ番号(レジスタの下位バイトを識別)またはメモリ位置によって指定されます。ワードはレジスタ番号または下位バイトのメモリ位置(偶数である必要があります)によって指定されます。すべてのオペコードとアドレスは16進数で表されます。[9]
ダブルオペランド命令
上位 4ビットは、実行する操作を指定します。6 ビットの 2 つのグループは、上で定義したように、ソース オペランド アドレッシング モードと宛先オペランド アドレッシング モードを指定します。この命令グループは、使用可能なオペコードの 75% を占めます。
2 つのオペランドを持つ命令の中には、1 つのオペランドにアドレッシング モードを使用し、2 番目のオペランドにレジスタを使用するものがあります。
上位 7 ビットは実行する操作を指定し、6 ビットはオペランドのアドレッシング モードを指定し、3 ビットはレジスタまたはレジスタ ペアを指定します。レジスタ ペアが使用される場合 (以下では「Reg+1:Reg」と表記)、Reg にはオペランドの下位部分が含まれます。次に大きい番号のレジスタには、オペランドの上位部分 (または残り) が含まれます。
単一オペランド命令
上位 10 ビットは実行する操作を指定し、ビット 15 は通常、バイト アドレス指定とワード アドレス指定を選択します。6 ビットの 1 つのグループが、上記で定義したオペランドを指定します。
単一オペランドの短い即値命令
上位 7 ビットとビット 5 および 4 は、実行する操作を指定します。3 ビットの 1 つのグループがレジスタを指定します。4 ビットのカウント フィールドには、小さな即値またはカウントが含まれます。いずれの場合も、このフィールドに 1 が追加され、範囲は 1 ~ 16 になります。
浮動小数点命令
上位 8 ビットは、実行する操作を指定します。2 つの 4 ビットのグループは、ソースと宛先のアドレス指定モードとレジスタを指定します。フィールド I = 0 の場合、指定されたレジスタには、アドレス指定モード (Rn) に相当するオペランドのアドレスが含まれます。フィールド I = 1 の場合、指定されたレジスタには、アドレス指定モード @0(Rn) に相当するオペランドのアドレスが含まれます。
オペコード F500 から FFFF は、さらに 11 個の浮動小数点命令を実装するために 4 番目のマイクロにマップされました。この 4 番目のマイクロが生成されたという証拠はありません。標準の WD16 プロセッサがオペコード F500 から FFFF を実行すると、予約済みのオペコード トラップが実行され、PC が 001A からロードされます。
ブロック転送手順
上位 10 ビットは、実行する操作を指定します。2 つの 3 ビットのグループは、ソース レジスタと宛先レジスタを指定します。いずれの場合も、ソース レジスタには、移動するメモリの最初のワードまたはバイトのアドレスが含まれ、宛先レジスタには、移動するデータを受け取るメモリの最初のワードまたはバイトのアドレスが含まれます。移動するワード数またはバイト数は、符号なし整数として R0 に含まれます。カウントの範囲は 1 ~ 65536 です。これらの命令は完全に割り込み可能です。
分岐命令
命令の上位バイトは操作を指定します。下位バイトは、プログラム カウンターの現在の位置を基準とした符号付きワード オフセットです。これにより、コード内で前方および後方の分岐が可能になります。最大分岐範囲は、分岐命令コードから +128、-127 ワードです。
ほとんどの分岐命令では、分岐が行われるかどうかは条件コードの状態によって決まります。分岐命令の前には通常、2 つのオペランドを持つ CMP (比較) または BIT (ビット テスト) 命令、あるいは 1 つのオペランドを持つ TST (テスト) 命令が置かれます。算術命令と論理命令も条件コードを設定します。x86アーキテクチャのIntelプロセッサとは異なり、MOV 命令も条件コードを設定するため、移動した値がゼロか負かによって分岐命令を使用して分岐することができます。
分岐命令の範囲が限られているため、コードが大きくなると、一部の分岐のターゲット アドレスに到達できなくなる可能性があります。プログラマーは、1 ワードの Bcc を 2 ワードの JMP 命令に変更します。JMP には条件形式がないため、プログラマーは Bcc を逆の意味に変更して、JMP を迂回して分岐します。
SOB (Subtract One and Branch) は、別の条件分岐命令です。指定されたレジスタが 1 減算され、結果がゼロでない場合は、6 ビット ワード オフセットに基づいて逆分岐が行われます。
サブルーチン命令
JSR はサブルーチンを呼び出します。6 ビットのグループでアドレッシング モードを指定します。JSR 命令は、スタック上の任意のレジスタを保存できます。この機能を必要としないプログラムでは、レジスタ ( JSR PC, address) として PC を指定し、サブルーチンは を使用して戻りますRTN PC。たとえば、ルーチンが で呼び出された場合JSR R4, address、R4 の古い値はスタックの先頭に保存され、戻りアドレス (JSR の直後) は R4 にあります。これにより、ルーチンは (R4)+ を指定してインラインでコード化された値にアクセスしたり、@(R4)+ を指定してインライン ポインタにアクセスしたりできます。自動増分により、これらのデータが過ぎて、呼び出し元のコードが再開されるポイントまで移動します。このようなルーチンでは、RTN R4呼び出し元に戻るように指定します。
このフォームは、コルーチンをJSR PC,@(SP)+実装するために使用できます。最初に、コルーチンのエントリ アドレスがスタックに配置され、その時点から、命令が呼び出しステートメントと戻りステートメントの両方に使用されます。この JSR 命令の結果、PC の内容とスタックの最上位要素が交換され、2 つのルーチンが制御を交換して、前回の交換によって終了した操作を再開できるようになります。
JSR PC,@(SP)+
PRTN は、スタックからいくつかのパラメータを削除して戻ります。PRTN は、PDP-11 の複雑な MARK 命令に対する WD16 の回答です。MARK とは異なり、PRTN はプログラム空間で実行され、任意のレジスタをリンケージ レジスタとして使用できます。この説明では、R5 をリンケージとして使用します。最初に、呼び出し元は R5 をスタックにプッシュします。次に、任意の数のワード引数をスタックに置くことができます。呼び出し元は、引数ワード数 + 1 を R5 に入れます。呼び出し元は、JSR R5,address引数ワード数 + 1 をスタックにプッシュする命令を実行し、戻りアドレスを R5 に置いて、サブルーチンにジャンプします。コードの実行後、サブルーチンは で終了します。PRTN は、スタックの先頭の数値を 2 倍にして SP に追加し、パラメータを削除します。次に、PRTN は に相当するものを呼び出し元に返し、R5 を PC にロードして R5 をポップする
PRTN R5ことで続行します。RTN R5
単一レジスタ命令
これらの命令には、13 ビットのオペコードと 3 ビットのレジスタ引数があります。
暗黙のパラメータ指示
スーパーバイザーの呼び出し
これらの命令は、オペレーティング システム (スーパーバイザ) 呼び出しを実装するために使用されます。すべてに 6 ビットのレジスタ引数があります。SVCB と SVCC は、オペレーティング システムへの引数がネイティブ命令セットでサポートされているほとんどのアドレス指定モードを使用できるように設計されています。
条件コード操作
プロセッサステータスワード(PSW)の4つの条件コードは、
割り込み
WD16 には、非ベクター割り込み、ベクター割り込み、停止の 3 種類の割り込みがあります。非ベクター割り込みとベクター割り込みは、IENおよびIDS命令によって有効化または無効化されます。停止は無効化できません。
非ベクター割り込み (NVI) は、ベクター割り込みよりも優先されます。NVI は、電源障害とライン クロックの 2 つの目的にのみ使用されます。(ライン クロックは通常、タイム スライスと時間管理に使用される 50 Hz または 60 Hz の入力です。) NVI を受信すると、PS と PC がプッシュされます。電源障害のステータスがチェックされます。電源障害の場合、WD16 は 0014 に格納されているアドレスにジャンプします。電源障害でない場合は、ライン クロック ティックとみなされ、WD16 は 002A に格納されているアドレスにジャンプします。
16 個の割り込みベクターがサポートされています。ベクター割り込みが受信されると、PS と PC がプッシュされます。割り込み確認中に、WD16 は割り込みデバイスによって提供される 4 ビットの割り込み番号を受け入れます。割り込みベクター テーブルアドレスは 0028 からフェッチされ、割り込み番号がそれに追加されて、テーブル内の 16 ワードの 1 つを指します。ワード オフセットがテーブルからフェッチされ、それ自身のテーブル アドレスに追加されます。結果が PC にロードされ、割り込みサービス ルーチンにジャンプします。どの同時割り込みが行われるかは、主に外部ハードウェアで実装される 16 ビットの割り込み優先度マスクによって決まります。WD16 は、マスクをハードウェアに直接送信しながら、現在の優先度マスクを 002E に格納します。マスクはMSKO、、、SAVSおよびRSTS命令で操作されます。16 を超えるベクター割り込みが必要な場合は、NVI を介して開始し、命令でディスパッチできますIAK。
Halt はマスク不可能な割り込みであり、ジャンパーの設定方法に応じてプログラマーのスイッチやその他の用途に使用できます。halt は実行アドレスを変更でき、割り込みイネーブルによってマスクされませんが、PC がプッシュされないため、一般的なマスク不可能な割り込みとして使用することはできません。ジャンパーによっては、halt ラインが停止しないこともあります。HALT命令が実行されると、ジャンパーに応じて、halt ラインによってクリアされることがあります。
予約済みの低メモリ領域
0000から003Fまでのメモリ位置はプロセッサによって定義された固定機能を持っています。以下のアドレスはすべてワードアドレスです。[9]
パフォーマンス
WD16 プロセッサの速度は、クロック速度、メモリ構成、オペコード、およびアドレッシング モードによって異なります。命令タイミングには、命令自体のフェッチ/実行と、ソースとデスティネーションのアクセス時間という最大 3 つの要素があります。最後の 2 つの要素は、アドレッシング モードによって異なります。たとえば、3.3 MHz では、ADD x (R m ), y (R n ) という形式の命令のフェッチ/実行時間は 3.3 マイクロ秒、ソース時間は 2.7 マイクロ秒、デスティネーション時間は 3.0 マイクロ秒で、合計命令時間は 9.0 マイクロ秒です。レジスタ間の ADD R m ,R n は3.3 マイクロ秒で実行されます。浮動小数点演算は大幅に遅くなります。単精度 (48 ビット) 浮動小数点加算命令は、通常 54 ~ 126 マイクロ秒です。WD16 の精度は、従来の単精度浮動小数点と倍精度浮動小数点の中間です。[9]
対照的に、当時最も高速な PDP-11 コンピュータは PDP-11/70 でした。ADD x (R m ), y (R n ) という形式の命令のフェッチ/実行時間は 1.35 マイクロ秒で、ソースとデスティネーションの時間はそれぞれ 0.6 マイクロ秒で、合計命令時間は 2.55 マイクロ秒です。アドレス指定されたメモリがキャッシュにない場合は、1.02 マイクロ秒が追加されます。レジスタ間 ADD R m ,R n は、キャッシュから 0.3 マイクロ秒で実行できます。[13] FP11-C コプロセッサによって実行される単精度浮動小数点加算命令は、0.9 ~ 2.5 マイクロ秒の範囲で、オペランドのフェッチ時間は最大 4.2 マイクロ秒でした。[14]
WD16 ブロック転送命令は、移動とブロック I/O の速度を約 2 倍にします。命令で移動するワードは、 MOV (R1)+,(R2)+, SOB R0,loop反復ごとに 9.6 マイクロ秒かかります。MBWU R1,R2同等の反復には、反復ごとに 4.8 マイクロ秒かかります。
コンピュータユーザー協会は、AM-100Tベースのシステム(価格35,680ドル、2023年には131,941ドルに相当)で一連のベンチマークを実施しました。その結果、CPU依存のベンチマークはAM-100Tでは31.4秒で実行されたのに対し、15,000ドルから25,000ドルの価格帯の平均的なシングルユーザーシステムでは218秒かかることがわかりました。[15] 25,000ドルから50,000ドルの価格帯のマルチユーザーコンピューターのグループでは、AM-100Tは速度の点で「上位3分の1」にランクされました。[16]
1984年5月のクリエイティブコンピューティングベンチマークでは、WD16(AM-100Tアプリケーション)はテストされた183台のマシンのうち34位にランクされました。経過時間は10秒で、IBM PCの24秒と比較して大幅に短縮されました。[17]
エミュレータ
Virtual Alpha Microはオープンソースの WD16 エミュレータです。C で書かれており、WD16 プロセッサと Alpha Micro AM-100 ハードウェア環境をエミュレートします。作者は Linux (Raspberry Pi を含む)、Windows、Macintosh デスクトップで動作すると主張していますが、バイナリは提供されていません。Alpha Micro オペレーティングシステム (AMOS) とすべての関連プログラムが動作します。2002 年に、Alpha Micro は趣味用途に限り、マニュアルを含む AMOS 4.x または 5.0 バイナリを配布する限定的な許可を与えました。[18]
参照
参考文献
- ^ ダニエル・フライストラ (1977 年 4 月)。 「新しいホビイスト システムがタイムシェアリングをサポート」(PDF)。バイト。2 (4) : 142–144。2022 年11 月 21 日に取得。
- ^ Wilcox, Dick (1977年1 月). 「S-100バス用のPDP-11のような16ビットマイクロ」. Dr. Dobbs's Journal of Computer Calisthenics and Orthodontia . 2 (1): 3–7 . 2022年6月14日閲覧。
- ^ MCP-1600 マイクロプロセッサ ユーザーズ マニュアル(PDF) . Western Digital. 1975 . 2022 年4 月 28 日閲覧。
- ^ Stan, Viet (1983年5月). 「ディスクオペレーティングシステムの戦い」(PDF) . Computers & Electronics . 21 (5): 19. 2023年6月8日閲覧。
- ^ Craig, John (1977 年 4 月). 「Around the Industry」(PDF) . Kilobaud: The Small Computer Magazine (4): 10 . 2022 年11 月 23 日閲覧。
- ^ ab Kee, Hank (1981年8月). 「Alpha Micro System Revisited」(PDF) . Microsystems . 2 (4): 26. 2022年3月1日閲覧。
- ^ Fox, Tom (1982年1月). 「Business Systems for '82」. Interface Age . 7 (1): 75. 2022年11月3日閲覧。
- ^ 「Alpha Microsystemsが記録的な売上を達成」InfoWorld . 4 (44): 11. 1982年11月8日. 2022年11月3日閲覧。
- ^ abcdef 「WD16 マイクロコンピュータプログラマーズリファレンスマニュアル」(PDF)。Western Digital 。 2021年12月10日閲覧。
- ^ 「AM-100 の技術マニュアル」(PDF) 。Alpha Microsystems 。2021 年12 月 19 日閲覧。
- ^ 「Alpha Micro AM100」。Obsolete Computer Museum 。 2021年12月19日閲覧。
- ^ メモリパーティションコントローラによるメモリ管理(PDF) (A01 版)。Alpha Micro。1981 年 10 月。pp. 139– 155。2022年6 月 14 日閲覧。
- ^ PDP-11/70 プロセッサ ハンドブック(PDF) . 1976 年 12 月. 付録 C、命令タイミング。
- ^ DEC PDP-11 プロセッサ ハンドブック、1975 年、379-391 ページ、FP11-C 命令タイミング
- ^ 「Alpha Micro AM-100T」。Association of Computer Users Benchmark Report。3.2 (6): 9. 1980年11月。 2022年11月3日閲覧。
- ^ 「12 Issue Summary」。コンピュータユーザー協会:ベンチマークレポート。3.2(14):4。1982年6月。 2022年11月3日閲覧。
- ^ Ahl, David H. (1984年5月). 「Creative Computing Benchmark」. Creative Computing Magazine . 10 (5): 6. 2022年11月2日閲覧。
- ^ ノエル、マイク。「VAM Virtual Alpha Micro」 。 2022年7月13日閲覧。
外部リンク
- AM-100とAM-100Tの写真
