TMS9900

TMS9900
デザイナーテキサス・インスツルメンツ
ビット16ビット
紹介された1976
デザインCISC
エンディアン大きい
レジスター
PC、WP、ST
汎用プロセッサ内部に2つ配置(WP、ST) 外部RAMに16×16ビットワークスペース配置

TMS9900、最初に市販されたシングルチップ16ビットマイクロプロセッサの1つでした。[ a ] 1976年6月に発表され、テキサスインスツルメンツTI-990ミニコンピュータアーキテクチャをシングルチップ形式で実装し、当初はそのラインナップのローエンドモデルに使用されました。

64ピンDIPフォーマットのため、小型マシンへの実装コストが高く、TI社以外では採用例が比較的少なかった。そうした用途の一つに、TI-99/4とTI-99/4Aという家庭用コンピュータがあり、最終的に約280万台を販売した。

1980年代半ばまでに、マイクロコンピュータ分野はIntel 8086などの16ビットシステムや、 Motorola 68000などの新しい16/32ビット設計へと移行しつつありました。チップの将来性が明確でなかったため、TIの半導体部門は特殊用途の32ビットプロセッサ、すなわち1983年に発売されたTexas Instruments TMS320Texas Instruments TMS340グラフィックスプロセッサに着目しました。

9900アーキテクチャは、トークンリングネットワーク(後のイーサネット)用のTIのTMS380チップセットの通信プロセッサとして1990年代まで存続しました。 [ 1 ]

歴史

メッキピン付きセラミックパッケージのTMS9900JL

TMS9900は、 TI 990ミニコンピュータシリーズのシングルチップ版として設計された。これは、Intersil 6100がシングルチップPDP-8(12ビット)であったこと、Fairchild 9440Data General mN601がどちらもData GeneralNovaのワンチップ版であったこととよく似ている。National Semiconductor IMP-16やDEC LSI-11などのマルチチップ16ビットマイクロプロセッサ(TMS9900より前に登場したものもある)とは異なり、9900はシングルチップの自己完結型16ビットマイクロプロセッサであった。

TMS9900はミニコンピュータのルーツを持ち、白紙の状態から設計されたものでは一般的に見られない多くのアーキテクチャ上の特徴を備えています。中でも注目すべきは、TMS9900がメインメモリにマッピングされたプロセッサレジスタを使用している点です。[ 2 ]これにより、ワークスペースポインタと呼ばれる単一のレジスタを変更し、レジスタ値リストの最初のエントリを指すようにすることで、高速なコンテキストスイッチが可能になります。従来の設計では、内部レジスタセット全体をメモリまたはスタックに格納する必要がありました。

このアプローチの欠点は、これらのレジスタへのアクセス速度が大幅に低下することです。高速メモリを搭載したミニコンピュータの実装では、この影響は比較的小さく、コンテキストスイッチが頻繁に発生するリアルタイム環境やマルチタスク環境ではメリットが大きくなります。シングルユーザーマイクロコンピュータなど、他の用途では、このトレードオフは割に合わないかもしれません。9900の40ピン実装には、レジスタ用に128バイトまたは256バイトの高速オンボードRAMが搭載されていました。

TIは、企業シナジーを実現するために、異なる部門間で同一のアーキテクチャを採用しました。「一つの会社、一つのコンピュータアーキテクチャ」です。1970年代後半、ウォルデン・C・ラインズは、パーソナルコンピュータを開発していたIBMグループに対し、当時コードネーム「Alpha」と呼ばれていたTMS99110のプレゼンテーションを行いました。「IBMがIBM PCIntel 8088を選んだことで、何を失ったのかは1981年まで分かりませんでした」と彼は回想しています。[ 3 ]一つの要因は、64KBを超える論理メモリにアクセスするためのロードマップがなかったことです。9900ファミリはページマッピングによってのみアドレス空間を16MiBまで拡張できましたが、8088はセグメントを介して256KBをアドレス指定できました。[ 4 ]

TI 990は非常に成功したため、TIはミニコンピュータと競合するハイエンドのパーソナルコンピュータにTMS9900を使用する計画を中止し、ローエンドのTI-99/4Aのみを生産することになった。[ 5 ] 99/4Aの製造を中止した後、同社のマイクロプロセッサ部門は最終的にTMS320特殊用途プロセッサシリーズに焦点を移した。[ 3 ]

9900の40ピンパッケージのマイクロコンピュータ・オン・チップ実装には、TMS9940、TMS9980/81、TMS9995などがある。SBP9900は耐久性を高めたバージョンである。[ 6 ]

最後の世代は99000シリーズで、1981年に990/10AのCPUとして作られた。TMS99105と110はカタログ部品として販売された。[ 7 ]

建築

TMS9900レジスタ
0 00 10 20 30 40 50 60 70 80 91 01 11 21 31 41 5(ビット位置)
パソコン 0 プログラムカウンタ
WP 0 ワークスペースポインター
L> あ> CPX 0 整数マスク ステータスレジスタ

TMS9900には、プログラムカウンタ(PC)、ステータスレジスタ(ST)、ワークスペースポインタレジスタ(WP)という3つの16ビットレジスタが内蔵されています。 [ 8 ] WPは、プロセッサ用の汎用ユーザーレジスタ(それぞれ16ビット幅)が16個存在する外部RAMのベースアドレス指します。このアーキテクチャにより、迅速なコンテキストスイッチが可能になります。例えば、サブルーチンに入る際には、ワークスペースレジスタを1つだけ変更するだけで済み、レジスタを個別に保存する必要はありません。68000や8086とは異なり、ビット番号はMSB(最上位ビット)をビット0として割り当てられています。

アドレスはビッグエンディアン方式のバイト単位です。TMS9900は、2の16乗バイト(65,536バイト、または32,768ワード) のアドレス空間を持つ、典型的な16ビットマシンです。

専用のスタックポインタレジスタは存在しません。代わりに、プログラムカウンタをレジスタに保存する分岐命令(BL:Branch and Link)と、レジスタコンテキストを変更する分岐命令(BLWP:Branch and Link Workspace Pointer、またはXOP)が存在します。16個のハードウェア割り込みベクターと16個のソフトウェア割り込みベクターはそれぞれPCとWPのペアで構成されているため、レジスタコンテキストの切り替えも割り込みによって自動的に実行されます。スタックはこれらのいずれかのメカニズム上に実装できます。[ 9 ]

命令セットとアドレス指定

TMS9900には69個の命令があり、これらは1ワード、2ワード、または3ワード長で、メモリ内では常にワード境界に整列されます。命令セットはほぼ直交性を有しており、いくつかの例外を除き、命令はあらゆるオペランドアクセス方法(アドレッシングモード)を使用できます。

アドレス指定モードには、即時 (命令内のオペランド)、直接または「シンボリック」(命令内のオペランド アドレス)、レジスタ (ワークスペース レジスタ内のオペランド)、自動増分ありまたはなしのレジスタ間接 (ワークスペース レジスタ内のオペランド アドレス)、インデックス (ワークスペース レジスタの内容でインデックス付けされた命令内のオペランド アドレス)、およびプログラム カウンタ相対があります。

最も重要なデュアルオペランド命令(加算、減算、比較、移動など)は、ソースオペランドとデスティネーションオペランドの両方に対して、2ビットのアドレッシングモードと4ビットのレジスタセレクタフィールドを持ちます。オペコードでは、「シンボリック」モードはレジスタフィールドが0に設定されたインデックスモードとして表現されるため、ワークスペースレジスタ0(WR0)はインデックスモードでは使用できません。XORなどのあまり使用されないデュアルオペランド命令では、デスティネーションオペランドはワークスペースレジスタ(乗算命令と除算命令の場合はワークスペースレジスタペア)である必要があります。

フロー制御は、1つの無条件ジャンプ命令と12個の条件付きジャンプ命令のグループによって実現されます。ジャンプ先はPCを基準とし、-128~+127ワードアドレスのオフセットを持ちます。

サブルーチン呼び出しの場合、分岐およびワークスペースポインタロード(BLWP)命令は新しいWP値とPC値をロードし、WP、PC、ST値をそれぞれ(新しい)レジスタ13、14、15に保存します。サブルーチンの終了時に、ワークスペースポインタリターン(RTWP)命令がこれらの値を逆の順序で復元します。BLWP/RTWPを使用すると、スタックがなくてもサブルーチン呼び出しをネストできますが、プログラマは適切なレジスタワークスペースを明示的に割り当てる必要があります。

命令セットには、WPを変更せずにPCのみをレジスタ11に保存する分岐リンク(BL)オペコードも含まれています。この場合、WR11を宛先アドレスとする分岐命令(B)は戻りオペコードとして機能しますが、BLタイプのサブルーチンは、プログラマが戻りアドレスを保存する操作を行わない限り、ネストできません。

TMS9900は実行命令「X」(eXecute)をサポートしています。この命令はレジスタ内の命令を実行します。デバッグ(ブレークポイント命令として)、バイトコードインタープリタで使用されるインデックス付きオペコードテーブルの作成、そして割り込み中に時間的にクリティカルなI/O命令の実行に使用できます。このユーティリティの例を以下のコードに示します。このコードでは、割り込み処理が非常にカプセル化された方法で行われており、通常はより多くの命令が必要になります。

;************************************ ; ; この割り込みはDMA制御をシミュレートします ; 構成は以下のとおりです: ; ; R9は現在のコマンドを保持します。例: ; IOREAD(34B8H): STCR *R8+,BYTEWIDE ;バイト幅FDCデータ読み取り ; IOWRITE(30B8H):LDCR *R8+,BYTEWIDE ;バイト幅FDCデータ書き込み ; R8 は現在の DMA アドレスを保持します。 ; R12 は現在の IO ポート - DATREG を保持します ;************************************ INTDRQ X R9 ;読み取りまたは書き込み可能 RTWP 

割り込み中のこの共通コードは、I/Oの読み取りコマンドと書き込みコマンドの両方で使用できます。同様の方法は、あらゆるデバッグ手法で使用できます。

TMS9900は、eXtended OPeration(XOP)命令もサポートしています。XOPには、0~15の範囲の数値とソースアドレスが与えられます。呼び出されると、この命令はメモリ内の定義済み位置にある16個のベクトルのいずれかを介してコンテキストスイッチを実行します。また、XOP命令は、ソースオペランドの実効アドレスを新しいワークスペースのレジスタ11に格納します。XOP命令のコンテキスト保存機能は、インラインデバッグの実装にも利用できます。[ 10 ]

XOP は転送ベクトルが固定位置になければならないため BLWP よりも柔軟性が低くなりますが、レジスタなどで渡されるのではなく、1 つのソースオペランドを直接アドレス指定できます。

XOP はシステムコール機能を実装するために使用できます。TI のDX10オペレーティングシステムでは、XOP 15 がシステムコールを呼び出します。プログラマーは、XOP 15 を呼び出すアセンブラマクロ(例えば SVC)を定義できます。XOP のもう 1 つの用途は、990 ミニコンピュータシリーズの将来のバージョンで専用ハードウェアによって処理される可能性のある命令をソフトウェアで実装することでした。このようなアクションの例を以下のコードに示します。このコードでは、XOP 6 命令を使用して CALL 関数が実装されています。XOP を使用して CALL 関数を実装する利点は、スタックがオーバーフローしたかどうかを判断するためのチェックを簡単に追加できることです。例えば、C R10,@2*R9(R13) のように記述します。ここで、R9 はスタック制限のアドレスを指します。

 ;  ;************************************************  ; サブルーチン呼び出し  ; XOP の定義: DXOP CALL,6  ; 呼び出し方法: CALL @SUBROUTINE_ADDRESS  ; R10 <=> スタックポインタ  ;********************************************************  ; ED32 C2AD 0014 XOP6: MOV @2*R10(R13),R10 ;スタックポインタを取得 ED36 064A DECT R10 ;スタックポインタをデクリメント ED38 C68E MOV R14,*R10 ;PCをスタックにプッシュして戻す ED3A C38B MOV R11,R14 ;EAをR14(PC)に移動して呼び出し ED3C CB4A 0014 MOV R10,@2*R10(R13) ;スタックポインタを更新 ED40 0380 RTWP;現在はオリジナルのWPを使用しています 

Intel 8086との典型的な比較では、TMS9900のプログラムサイズは小さかった。欠点としては、アドレス空間が狭く、高速なRAMを必要とすることが挙げられる。

実装

TMS9900 ピン構成 (64 ピンDIP )

TMS9900はNチャネルシリコンゲートMOSプロセスで実装され、[ 8 ] +5V、-5V、+12Vの電源と、最大周波数3MHz(333nsサイクル)の4相(非重複)クロックが必要でした。[ 11 ]このクロックは通常、TIM9904(別名74LS362)クロックジェネレータチップを使用して48MHzの水晶から生成されます。

最短の命令は8クロックサイクル、つまり2.7μsで完了します(外部待機サイクルが0であると仮定)。その他多くの命令は10~14サイクル(3.3~4.7μs)で実行されます。最長実行命令(DIV)は最大124サイクル(41.3μs)かかります。[ 12 ]

Motorola 68000と同様に、このチップは(当時としては異例の)64ピン、0.9インチ幅のDIPパッケージに収められていました。比較的多くのピン数により、15ビット(ワード)のアドレスバスと16ビットのデータバスを、多重化を使用せずに専用ピンに出力することができ(Intel 8086 CPUなどとは異なり)、外部メモリ接続を簡素化できました。Motorolaと同様に、他の多くのメーカーの慣例とは異なり、TIは最上位のアドレスラインとデータラインをそれぞれ「A0」と「D0」と表記しました。すべての内部データパスとALUは16ビット幅です。

プロセッサは、外部ダイレクトメモリアクセス(DMA)のためにアドレスバスをトライステートにすることで一時停止できます。メモリアクセスは常に16ビット幅で行われ、CPUはバイト幅アクセスの命令に対して自動的に書き込み前の読み出し操作を実行します。

ハードウェア割り込みシステムは4ビットの割り込み優先度入力をサポートしており、割り込み要求を処理するためには、この優先度がステータスレジスタ(ビット12~15)に格納されている優先度よりも高い必要がある。さらに、/LOAD入力は専用のベクトルを持つノンマスカブル割り込み機能を提供する。[ 13 ]

TMS9900 CPU には、外部シフト レジスタとのインターフェイス用に設計された 16 ビットシフト レジスタ(CRU) も含まれており、合計 4,096 のアドレス指定可能なビットのうち 1 ~ 16 ビット幅のフィールドへのアクセスをサポートする専用命令が備わっています。

パラレル ペリフェラルは、通常のアドレス バスとデータ バスに メモリ マップ方式で接続できます。

アプリケーション

Tomy Tutor は、TMS9995 プロセッサをベースにした 1983 年の家庭用コンピュータです。

TMS9900は、TI-99/4およびTI-99/4Aホームコンピュータに搭載されました。しかしながら、製造コスト削減のため、TI社はTMS9900が直接アクセスできる高速RAMを256バイト(16ビットワード128個)のみに採用しました。残りのメモリは、ビデオディスプレイコントローラを介して間接的にしかアクセスできない16KBの8ビットDRAMであり、これがこれらのマシンのパフォーマンスを著しく低下させていました。

TI社は、CPU、メモリ、I/Oを含むTM990シリーズのコンピュータモジュールを開発しました。これらのモジュールをカードフレームに差し込むことで、16ビットのミニコンピュータを構成できました。これらは主にプロセス制御に使用されました。[ 14 ]マイクロプロセッサトレーナーは、TM990/189として発売されました。[ 15 ]

1970年代後半、ジョン・ウォーカーとダン・ドレイクはTMS9900をベースにしたS100バスカードと、それに対応する完全なソフトウェアスタックを開発しました。 [ 16 ] [ 17 ]その後、彼らはオートデスクの共同設立者となり、オートデスクはTMS9900ベースのシステム用に最初に開発されたソフトウェアを一部ベースとしました。[ 18 ]

1983年初頭に発売されたTI Professionalでは、 TMS99000シリーズの部品ではなくIntel 8088が使用されました。これは、当時IBM PCのハードウェアとソフトウェアの標準をエミュレートする必要性が非常に高かったためです。[ 19 ]

TMS9900ファミリー製品開発

TMS9900の次世代はTMS9995で、命令プリフェッチ技術の搭載により「従来の9900ファミリプロセッサの3倍の速度で機能性能を実現」 [ 20 ]した。家庭用コンピュータの分野では、TMS9995はTomy Tutor、TI-99/4A用のあまり知られていないサードパーティ製のコンピュータオンカードアップグレードであるGeneve 9640 、そしてElectronics Todayに掲載されたプロジェクトであるPowertran Cortexでのみ使用されていた。[ 21 ] TI-99/ 2およびTI-99/8コンピュータシステムでの使用が計画されていたが、どちらもプロトタイプ段階から先には進まなかった。

TMS9900NL(プラスチックDIPパッケージ)

TIは後に、より強力なTMS99000マイクロプロセッサフ​​ァミリーを開発し、コスト削減のため990/10AミニコンピュータのCPUとして採用しました。結局、990/10Aが市場に投入された頃には、ミニコンピュータ時代の終焉は既に見え始めていました。

TMS99000ファミリには、TMS99105AとTMS99110Aの2つのマイクロプロセッサ[ 7 ]が含まれており、オンチップのマクロストアROMメモリの内容を除いて同一です(マクロストアメモリには、標準の機械語で書かれたエミュレーションルーチンを介した追加機能または命令が含まれます)。TMS99110AマイクロプロセッサのオンチップROMマクロストアには、機械語命令セットの一部として使用できる浮動小数点命令が含まれていますが、ベースラインのTMS99105Aには含まれていません。どちらのチップも、外部ROMにマクロストア命令を実装できます。TMS99000ファミリの3番目のメンバーであるTMS99120は発表されましたが[ 22 ]、商業的に生産されることはなかった可能性があります。TMS99120のオンチップROMマクロストアには、PASCAL高級言語のランタイムサポートルーチンが含まれることになりました。

TMS99000ファミリの命令セットは、互換性を維持しながら9900の命令セットを拡張しています。追加された命令には、符号付き乗算・除算(TMS9995で初登場)、ロングワードシフト、加算・減算、ステータスレジスタのロード、ワークスペースポインタのロード、スタック操作、マルチプロセッササポート、ビット操作などがあります。このファミリの製品は、コード/データセグメンテーションを通じて256KBのメモリにアクセスでき、TIM99610メモリマッパーを使用して最大16MiBのアドレス指定が可能です。このアーキテクチャには、TMS9900/TMS9995に比べて多くの進歩が見られます。[ 7 ]

変種

モデル 説明
TI990/9ミニコンピュータシステム向けの初期のマルチチップCPU、1974年
TI990/10ミニコンピュータシステム向けマルチチップ実装、1975年
TI990/12マルチチップ実装、990/10より高速
TMS99001976年にTI-99/4(A)コンピュータで使用されたシングルチップ実装
TMS99402KB ROM、128B RAM、デクリメンタ、CRUバスを備えたマイクロコントローラ、1979年
TMS9980 TMS9981TMS9900の8ビットデータバスバージョン
TMS99858KB ROM、256B RAM、8ビット外部バスを備えたTMS9940、1978年頃(未発売)
TMS9989改良型9980、軍事装備品に使用
TMS9995TMS9985に似た改良型で、ROMは搭載されていない。TI-99/2およびTI-99/8のプロトタイプ、Tomy Tutor、 TI-99/4A用のGeneve 9640コンピュータ・オン・ア・カードに使用された。
SE9996 TMX9996TMS9995の16ビットデータバスバージョン。RAM、ROM、タイマーはありませんが、割り込みとシステムエミュレーション機能のためのいくつかの追加信号があります。[ 23 ]公開されたことはありませんが、TI XDSシステムの一部のエミュレータカードで使用されています。
TMS99105TMS99000マイクロプロセッサフ​​ァミリーのベースラインメンバー
TMS99110浮動小数点命令がオンチップのマクロストアROMメモリにプリプログラムされたTMS99000ファミリーマイクロプロセッサ
TMS99120TMS99000 ファミリ マイクロプロセッサ。PASCAL 高級言語のランタイム サポート ルーチンがオンチップの Macrostore ROM メモリにプリプログラムされています (マイクロプロセッサは発表されましたが、商業的に生産されることはなかった可能性があります)。

注記

  1. ^ General Instrument CP1600のみが発売日が近いです。

参考文献

  1. ^ TMS380アダプタチップセットユーザーズガイド. Texas Instruments. 1986年7月. pp.  A-1 – A-22 . 2024年11月21日閲覧
  2. ^ Whitworth, Ian (1979年1月). 「マイクロプロセッサアーキテクチャのレビュー」. Microprocessors and Microsystems . 3 (1): 21– 28. doi : 10.1016/0141-9331(79)90088-7 .
  3. ^ a b Rhines, Walden C. (2017年6月22日). 「Texas Instruments 99/4:世界初の16ビットホームコンピュータ」 IEEE Spectrum . 2017年6月22日時点のオリジナルよりアーカイブ。 2017年7月8日閲覧
  4. ^ Guttag, Karl (1980-04-14). 「99000 "Alpha" パフォーマンス比較」(PDF) . 2022年10月26日閲覧
  5. ^ Kewney, Guy (2008年11月29日). 「もしコンピューターが70年代に戻ったらどうなるだろうか?」 The Register . 2025年4月23日時点のオリジナルよりアーカイブ。 2025年6月7日閲覧
  6. ^ 9900ファミリーシステム設計およびデータブック(PDF) . Texas Instruments. 1978. p. 2-3. ISBN 0-89512-026-7. 2024年11月21日閲覧
  7. ^ a b c TMS99105AおよびTMS99110A 16ビットマイクロプロセッサ 暫定データマニュアル(PDF) . Texas Instruments Inc. 1982. p. 1.
  8. ^ a b TMS9900マイクロプロセッサデータマニュアル(PDF) . Texas Instruments Inc. 1976. p. 3.
  9. ^ 「DX10オペレーティングシステムリリース3.5システム設計ドキュメント」(PDF) . Texas Instruments, Inc. 1982年. p. 8.1.
  10. ^ 「TMS 9000 XOP命令を使用してデバッグ機能を実装する」 GitHub 2024年1月13日閲覧
  11. ^テキサスインスツルメンツ 1976年、31ページ。
  12. ^テキサスインスツルメンツ 1976年、28ページ。
  13. ^テキサスインスツルメンツ 1976年、6ページ。
  14. ^ 「Stuart's TM 990シリーズ16ビットマイクロコンピュータモジュール」 。 2014年3月25日閲覧
  15. ^ 「プログラマブル電卓 - Texas Instruments TM990/189」2014年3月25日閲覧。
  16. ^ 「Marinchip Systemsの歴史」 。 2024年8月25日閲覧
  17. ^ “マリンチップ ソフトウェア” . 2024 年 8 月 25 日に取得
  18. ^ 「Autocadの歴史」 。 2024年8月25日閲覧
  19. ^ Webster, Robin (1983年5月). 「TI Professional」 .パーソナルコンピュータワールド. 第6巻第5号. p. 152. 2025年6月6日閲覧
  20. ^ TMS9995マーケティングパンフレット(PDF) . Texas Instruments Inc. 1981. p. 2.
  21. ^ 「Powertran Cortex.com」 . 2014年3月27日閲覧
  22. ^マイクロシステム設計者ハンドブック、第2版。Texas Instruments Limited。1981年。3~25ページ以降。
  23. ^ Schabowski, John (1981-06-12). 「TMS9995 マイクロプロセッサシステムエミュレータ仕様」(PDF) . 2025年11月27日閲覧