2024-11-20 17:59 — asano
カテゴリー:
また変わったCPUを買ってしまいました。動かせそうもない代物ではありませんが、膨大な積みプロセッサが溜まっている中いつになったら着手できるものやら。
これはIntelのi960ファミリ、N80960SA16です。
i960ファミリはIntelが1980年代後半から1990年代中頃まで生産していた32ビットのRISCマイクロプロセッサです。
組み込み用途のあまり知名度のないプロセッサですが、このファミリの一員i960RDはPCに使われたこともあります。ATXに移行する直前ごろ、PCI×7+ISA×3といった巨大なATマザーボードがありI/Oプロセッサとして搭載されていました。これはI2O(Intelligent I/O)と呼ばれていました。
これまで触ったことのないアーキテクチャなのでデータシートから特徴を拾ってみます。
- 豊富なレジスタ
同時に使えるレジスタは32ビットが32本です。このうち16本は共通で、残り16本は4セット分あってcall
,ret
で自動的に切り替わります。 - 3オペランド
演算命令はよくある2オペランド(dst ← dst opr src)ではなく3オペランド(dst ← src1 opr src2)です。 - サブルーチン呼び出し
サブルーチン呼び出しは上述のレジスタ切り替えが発生するcall
/ret
と、しないbal
(Branch and link)の2種があります。いずれの場合も戻り番地は特定のレジスタに保存され、前者の場合はそのレジスタを含むレジスタセットがまとめて切り替わるので多重呼び出しができます。 - コンディションコード
cc0
~cc2
の3ビットですが状況によって意味が異なります。比較命令では順に大きい・一致・小さいを意味し、例えばbge
(Branch if Greater or Equal)はcc0
かcc1
いずれかが1のとき分岐します。一方、演算命令ではcc0
がオーバフローをcc1
がキャリーを意味します。 - 即値
Load/Storeアーキテクチャなので演算命令には基本レジスタしか使えないのですが、0~31までの定数はそのまま使用可能です。この範囲外の定数はlda
命令(MC68000のLEA
命令相当)を利用して一旦レジスタに入れる必要があります。この命令をアドレスではない定数のロードに使うということはマニュアルにも記載されています。
まだざっと読んだだけでよくわからないところも多いのですが、これ以上はボード作ってからですかね、いつになるかわかりませんが。
このi960SAはバスはアドレスが32ビット・データは16ビットでマルチプレクスされています。バースト転送は止められませんがインクリメントされるA3:1は独立ピンでも出ていますし、バイトごとのイネーブル信号もあるのでEMILY Boardには簡単に接続できそうです。
参考文献・関連図書:
80960SAデータシート, 272206-003, Intel.
"80960MC Programmer's Reference Manual", Intel.
"i960 Rx I/O Microprocessor Developer's Manual", 272736-002, Intel.
コメントを追加