TMS9995

Texas Instruments社のTMS9900は充分な機能を備えた16 bitマイクロプロセッサですが、使いにくい点もありました。パッケージサイズが64 pin DIPと大きく、3電源が必要だったり特殊な4相クロックが必要とか、どうしても大規模応用向きで、小規模低コストの装置に組み込むには適していません。そのような点を改善して1981年に発表されたマイクロプロセッサがTMS9995です。
データバスを8 bit幅にするなどしてパッケージを小型化、5 V単一電源にして、クロックジェネレータも内蔵し水晶発振子を外付けするだけで必要なクロックを生成します。その上、256 ByteのRWMとタイマカウンタ回路も内蔵して、符号付き乗除算命令を含む4命令が追加されています。追加された命令と割り込み関係でわずかに変化のあったステータスレジスタを除けば、TMS9900とソフトウェア体系をそのまま引き継いでいて、メモリアドレス空間の制限などはまったくありません。速度を除けばTMS9900のプログラムはほぼそのまま動作するでしょう。
しかも、その肝心の処理速度ですが、データバス幅が狭くなり性能低下しそうなものですが、内蔵メモリをうまく使えばTMS9900より高速にプログラムを動作させられます。

TMS9995
1983年製のTMS9995で、ごく普通のパッケージですね。

基本的なアーキテクチャはTMS9900の方を参照していただくとして、それを継承しているTMS9995も汎用レジスタはメモリ上に持ちます。たとえばレジスタレジスタ間の加算を実行する場合、命令フェッチの1回のアクセスは別にしても、加算すべきふたつのデータをレジスタから読み出すのに2回のメモリアクセスと、結果をレジスタに書きこむためのメモリアクセス、計3回のメモリアクセスが必要です。あるレジスタの内容をレジスタ間接オートインクリメントモードでメモリに保存する場合には、命令フェッチ後の実行サイクルで4回のメモリアクセスが発生します。このように、TMS9900ファミリのプログラムは、どうしてもひんぱんにデータ用のメモリを参照する必要があります。メモリの読み書きの性能によってプログラム速度に重大な影響が生じやすいアーキテクチャです。このままでは8 bitデータバス化したTMS9995は著しく処理速度が低下しそうです。さて、TMS9995には256 Byte分のRWMが内蔵されています。このメモリはチップ上でプロセッサに16 bitデータパスで接続されていて、しかもノーウェイトサイクルで読み書き可能です。実はTMS9995に12 MHzの水晶発振子を接続して最高クロック周波数で動作させた場合、外部メモリのノーウェイトサイクルでのアクセスタイムは115 nsとなります。当時の標準的なメモリのアクセスタイムは250 nsから450 ns程度ですから、少なくともウェイトサイクルひとつは必要となります。1ウェイト入れた場合のアクセスタイムは448 nsとなり、標準的なメモリを接続しやすくなります。
ちょっと横道にそれますが、当時のTMS9995を採用したパーソナルコンピュータで約10.7 MHz(NTSC信号のカラーサブキャリアの3倍の周波数)の水晶発振子を使用していたのは、もちろんTMS9918でカラーTV表示を行う都合もあるでしょうけど、アクセスタイム450 nsの安価なメモリを余裕をもって使用したいためもあったのではないかと思います。
とにかく、TMS9995の内蔵メモリへのアクセスは、普通のメモリをTMS9900に外付けした場合より高速となります。そのため、汎用レジスタ群や繰り返しアクセスされる作業用データ領域を内蔵メモリに割り当てれば、外部バスが8 bit幅である影響を受けにくくなります。このほか、命令解釈方式にもTMS9900より改良が行われていて、トータルでTMS9900より高性能なプロセッサに仕上がっています。

追加された命令は次の4種類です。
MPYS d     01C0  Multiply Signed                   R0 * s -> (R0, R1)
DIVS d     0180  Divide Signed                     (R0, R1)/s -> (R0, R1)
LST  r     0080  Load Status Register              r -> ST
LWP  r     0090  Load WP                           r -> WP
符号付きの乗除算と汎用レジスタからSTやWPへのデータ転送命令です。
MPYS命令とDIVS命令はタイプ6命令の変形で、オペコードの下位6 bitがアドレッシングモードとそれに使用するレジスタ指定となっています。TMS9900から存在する符号なしの乗除算命令では対象レジスタも選べましたが、この新設命令の場合はR0とR1専用です。DIVS命令の商はR0に、剰余はR1に入ります。
LST命令とLWP命令はタイプ8命令の変形で、オペコードの下位4 bitがソースレジスタ指定となります。STST命令やSTWP命令の逆を行う命令で、この命令が追加されたおかげで汎用レジスタを現在使用中の位置から一定量ずらして利用するといった操作をプログラムで実現しやすくなりました。

メモリマップはこのようになっています。
 
アドレス 用途
0000 リセットベクタ
0004 INT1ベクタ
0008 MID/オーバーフローベクタ
000C 減算カウンタベクタ
0010 IN4/イベントカウンタベクタ
0014 汎用メモリ
0040 XOPベクタ
0080 汎用メモリ
F000 内蔵RWM
F0FC 汎用メモリ
FFFA 減算カウンタ(内蔵I/O)
FFFC NMIベクタ(内蔵RWM)

以上のメモリマップで内蔵とされていない領域は、すべて外部にメモリやI/Oを接続したうえで利用できます。
一般的にはアドレス0000からROMを接続し、F100付近にI/Oポートをメモリマップ接続して、内蔵RWMで不足の作業領域を残りの汎用メモリ領域に割り当てることになるでしょう。

Return to IC Collection