戻る
TLCS-900L
DS-110に採用されているのは東芝のTLCS-900LシリーズのCPUで、 VW-200とは異なり、完全に16ビットのCPUと言えます。 80286クラス、という感じです。このCPUを、Maxモードで動作させています。 詳しくは上位のページにある、英語のマニュアルを見て下さい。

レジスタ

レジスタは、8086のような、少数のレジスタであり、このうち、 XWA, XBC, XDE, XHL は4つのレジスタバンクを持っています。 レジスタバンクは、RFPフラグで切替えて使うこともできますし、 命令中で直接バンクを指定することもできます。
少し変わっているのが、副バンクレジスタ、というものでして、 選択されている主バンクの、1つ前のバンク、ということになります。 これは、おそらくSPARCのレジスタウィンドウを意識していると思われます。
SPARCのレジスタウィンドウは、関数呼びだしの時に用いられ、 現在使用中のレジスタウィンドウをずらすことにより、PUSH/POPによる メモリ操作を減少/集中させて高速化する、という技法です。 単なるバンク切替えのレジスタではなく、 レジスタウィンドウは一部がオーバラップしており、 引数はここを経由して関数に渡されます。
TLCS-900Lでは、多分これと同じ狙い、つまり、 関数呼びだしを高速化する目的で副バンクが指定できるのだと思いますが、 4つぐらいのレジスタバンクではすぐに埋まってしまい意味がありません。
また、ウィンドウがひと回りしたことの自動検出もありません。 SPARCでは、レジスタウィンドウがひと回りして、 使用中のレジスタバンクを上書きしようとすると自動的に例外が発生し、 その時点でOSがバンクレジスタのいくらかの内容をメモリに退避移動させます。 が、TLCS-900Lでは、知らんふりして上書きしてしまうので、 わざわざその前にRFPの値をチェックしなければなりません。
というわけで、レジスタバンクは、 割り込みを高速に処理するために用いるのが無難、というところです。

アドレッシングモード

自動インクリメントやデクリメントを持っていて、 ちょっと見68000みたいな感じです。命令語長の長い短いはありますが、 アドレッシングモードで用いられるレジスタは基本的に直交しており、 どのレジスタでも、バンクレジスタでも、指定可能です。 なお、バウンダリをまたぐアクセス (0x313番値からワードアクセスなど) も、 遅くなるだけで、実行できます。
が、最低なのは、PC相対ロードがない、ということです。 つまり、位置非依存コードを書くことが極めて困難です。 位置非依存コードにするためには、 OSがプログラムをロードする時にアドレスを書き換えるか、 あるいは、LDARを使ってプログラムカウンタの値を一度汎用レジスタに 持ってきてそれでアクセスを行なうか、 あるいは静的データポインタとしてレジスタを1つつぶすか、 ということになります。

命令

命令はたいていの命令が汎用レジスタに関して直交してますが、 いくつかは不条理な制約もあり、8086みたいな感じです。 乗除算は、16ビット×16ビットや、32ビット÷16ビットがあり、 DSPのような積和命令もあります。
レジスタ中のビットの立っている位置をサーチする命令や、 あるいは、レジスタのたすきがけビット入れ換えなどの、 ビット指向の命令が多く見受けられます。 でもここまでビット操作を充実させたなら、次のような入れ換えも欲しかったな。 何に使うかピンと来たらかなり濃いです。(^^;
15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0
↓
15  7 14  6 13  5 12  4 11  3 10  2  9  1  8  0