TRONCHIP

**TRONCHIP**（トロンチップ）とは、TRONプロジェクトの一環で設計された命令セットアーキテクチャ（ISA）およびそれを実装したマイクロプロセッサである。仕様は書籍およびウェブで公開されており自由に参照・使用できる。

## 特徴
### 基本スペック
* 32ビット
* レジスタ本数 16

### 異種オペランドの演算
従来のプロセッサの多くは、バイトの加算とワードの加算、といったようなデータ型ごとの演算命令と、符号付き拡張とゼロ拡張の命令があった。異種オペランド同士の演算では、まず型を揃えてから、演算を実行し、レジスタ長より小さい型が目的の結果であれば、それをストアする別の命令を実行していた。TRONCHIPでは、オペコードは共通とし、型と拡張方法（符号付きorゼロ拡張）を示すフィールドをオペランド指示部に持つことで、そういった演算を1命令で指示できる。

### 命令形式
命令形式は整理されており、命令長32ビットの一般形と、16ビットの短縮形がある。命令の種類により形式を分けるのではなく、全ての命令に一般形があり、よく使われる命令やオペランドの組み合わせには短縮形も用意される、という方式を取っている。

### 高水準命令
#### ビットストリング命令
グラフィックVRAMの操作などをわずかな命令数で実現できる、ビットストリング命令がある。BTRONなどでの利用が想定されていた。

#### キュー操作命令
連結リスト#双方向リストを操作する命令を持ち、キューの途中へ要素を挿入する操作、キューから特定要素を外す操作をアトミック操作として実行できる。これにより、データ構造の設計にもよるが、キュー操作にともなう細粒度のクリティカルセクションの制御を省略できる。

#### 十進演算命令
二進化十進表現の演算を直接おこなえる命令がある。

#### 多段間接アドレッシングモード
C言語において、ポインタをデリファレンスする前置演算子 * を `**p` のように複数個置いて、メモリを参照して得た値を元にさらにメモリを参照できるが、それと同様に、TRONCHIPのオペランド指示では、取り出したデータを元に実効アドレスを算出し、そこから取り出したデータを更にアドレッシングに用いるという操作を、形式上は任意回数反復できる。

仕様では任意回の反復の実装は要求しておらず、反復段数を制限している実装が多い。

### レベルの定義
実装する命令や仮想記憶の有無など、実装範囲のプロファイル化が意図されており、最終的に以下が仕様書では示されている。
* **L1R** - 最小限の命令セット
* **L1** - 最小限の命令セットとメモリ管理ユニット
* **L2** - 拡張命令セットとメモリ管理ユニット

### EIT
汎用のプロセッサの多くはプログラムを実行中に、何らかの原因で実行を中断して他の処理を行う機構を備える。原因としては、外部割り込み、ページ違反、零による除算、システムコールなどがあり、例外、割り込み、トラップ、などと呼ばれ、CPU毎に名称や処理内容が異なる。TRONCHIPでは、これらを、**例外**（**E**xception）、**割り込み**（**I**nterruput）、**トラップ**（**T**rap）に分類整理し、まとめて**EIT処理**とした。
***例外**（**E**xception）- 命令実行中に起こる物、ページ違反等で、ハンドラから復帰した場合は当該命令を再実行する
***割り込み**（**I**nterruput）- プログラムの実行と無関係に、外部要因で起こる物
***トラップ**（**T**rap）- システムコール、零による除算等で、ハンドラから復帰した場合は当該命令の次の命令から再開する

### 拡張性
当初の設計時点から64ビットへの拡張が考慮されており、データサイズを指示するフィールドなどで、64ビットの指示に相当する値やビットが予約とされていた。プレフィクス命令の付加やモードの追加などの変更をせずに、無理なく移行できるようにという設計であった。

また、メモリ空間も、アドレス0を起点として、アドレスの数値を2の補数とみなし、正の方向と負に方向に伸びているもの、とするモデルとした。これも64ビット化した際に、32ビットの単純な拡張とみなせるように、との配慮である。正側をユーザ半空間、負側をシステム半空間とし、基本的なメモリ保護もこれを利用して定義された。

ただし以上の拡張性に関しては、予約されたのみで、実際にそれを拡張した仕様や実装は（2017年現在）存在していない。

### NEC Vシリーズ
ほぼ同時期に、NEC VシリーズのV60～V80の32ビットシリーズが開発されている。豊富なアドレッシングモード、命令とアドレッシングモードの高い直交性などの、いずれも多くのCISCプロセッサに見られる特徴だが、そのような共通点がある。一方で、レジスタ本数が、TRONチップの16本に対し、V60系は32本と多くこれはむしろ当時のRISCに見られる設計である。そのためV60系ではレジスタの指定に5ビットを必要とすることもあり、命令フォーマットは全く異なっている（アセンブリ言語での見た目は似ているかもしれないが、アセンブリ言語での類似は実際のチップが似ているか否かとは全く無関係である）。TRONチップの命令は2バイト単位での可変長で、命令フォーマットの種類は少なく抑えられているのに対し、V60系は1バイト単位の可変長でフォーマットの種類も多い。

## 特許
TRONCHIPの設計においては、最初の2年間を特許のチェックのみにあてた、という。設計において回避のためチェックした特に重要な特許として、DECによる、バイト可変長命令（VAX）・プログラムカウンタが汎用レジスタでもある（PDPシリーズ、VAX）・スケール化インデクスによる修飾（VAX）、NSによる、外部アドレシングによるモジュールのサポート（NS32000）、DGによる、アドレスによるリング保護（Eclipse MVシリーズ）を挙げている。

## SISCまたはEISC
「RISC対CISC」と業界ジャーナリズムが煽っていた時期であったが、坂村はヘネシーとパターソンによるRISC（R2000や）を評価したうえで、
* リアルタイム応用を指向しているため、たとえ少々大きな操作をする命令でもクリティカルな部分での性能に必要であればそれを削ることはできない。
* RISCは使い易さを考慮していない。アドレッシングが自由でなければ、コンパイラの最適化の実装は難しい。
* RISCではプログラムサイズが増大する。そのため、キャッシュメモリの大容量化やバスの高速化が必要になってしまう。
とし、TRONチップは「ノイマンアーキテクチャの究極」（これは論理推論マシンや非ノイマン型マシンの喧伝をうけて）、「CISCの究極」、「（RとCの）どちらでもなく、SmartのSでSISCまたはElegantのEでEISCとでもいうべきもの」、等としていた。

## 実装
Gmicroシリーズとして日立製作所がH32(Gmicro/500)・Gmicro/200、三菱電機がM32(Gmicro/100・400)、富士通がF32(Gmicro/300)を作成していたほか、沖電気がO32、東芝がTLCS-90000/TX(TX1、TX2)、松下電器がMN10400など、各社で開発された。

また、富士通によるベクトルプロセッサ（浮動小数点プロセッサとは別）μVPなどのコプロセッサ、メモリやバスのコントローラその他の周辺チップが同時に各社により開発・実装された。

### その後
大きな応用先と考えられたBTRONプロジェクトが、教育用への採用中止で失速したこと、RISCをターゲットとしたコンパイラ技術の発展や、計算機の高性能化によって重い最適化技術が実用になったこともあり、あえてCISCを採用する意義が失われたこともあって、各社とも32ビット以上のCPUはRISCに集約する方向(日立:SH、富士通:SPARC、日本電気・東芝:MIPS、三菱:M32R)となった。

TRONCHIPの影響としては、次のようなものがある。SHの開発者が反面教師として言及している。いくつかのプロセッサにおいて、EITという事象の分類が見られる。LDCTX、STCTXなどといったTRONCHIPと共通のニモニックを使っているプロセッサが（特にCISCマイクロコントローラに）見られる。M32Rの命令フォーマットにも類似性が見られる。

TRONCHIPの採用例を示す。GMICRO/100が半導体製造装置や人工衛星の制御装置に使われた。GMICRO/200は宇宙線対策をしたものがきく7号に使われた。電話交換機にGMICRO/300と500が使われた。

## 脚注

## 参考文献

* 
* 
* 
* 
* 
* 
* 
*