TMS1000は、1974年にテキサス・インスツルメンツ(TI)によって発売されたマイクロコントローラーのファミリーである。

完全な「ワンチップ上のコンピューター」として4ビットのCPU、Read only memory(ROM)、Random Access Memory(RAM)、そして入出力端子(I/O)を統合していた。
TMS1000は、自動車、家電、ゲーム、そして測定機器の中の組み込みシステムを対象としていた。

TMS1000は、最初に大量に使用された商用マイクロコントローラーであった(後述のように前身のTMS0100シリーズはマイクロコントローラと見なされないこともあるため)。
1974年にこのファミリーのチップは、一個約2ドルで大量購入可能であった。
1979年までにこのファミリーの約2600万個が毎年売られていた。

TMS1000は、テキサス・インスツルメンツ自社の教育玩具Speak & Spell、プログラム可能な玩具の自動車Big Trak、そして電子ゲーム「サイモン」で使用された。

## 歴史

### TMS 0100 シリーズ

ここでは TMS 1000 シリーズの前身であるTMS 0100 シリーズに簡単に触れる。

スミソニアン博物館は、テキサス・インスツルメンツの技術者であるゲアリー・ブーン(Gary Boone)とマイケル・コクラン(Michael Cochran)が1971年に世界初のマイクロコントローラー(マイクロコンピューターとも呼ばれる)TMS1802NCの開発に成功したとしている。

TMS1802NCは、1971年9月17日に発表されたシングルチップのマイクロコントローラーであり、四則演算電卓のプログラムが内蔵されていた。
TMS1802NCは、その名称にもかかわらず、TMS 1000 シリーズではなかった。
TI Datamath電卓とSinclair Executive電卓に使用された。
後にTMS1802NCは、TMS 0100 シリーズの一部として TMS0102 と再命名された。

TMS0100シリーズはマイクロコントローラとみなされないこともある。電卓以外の用途で利用できず、ユーザーが作ったプログラムを実行することができないからである。

### TMS 1000 シリーズ

TMS 1000 シリーズは、1974年に発売された。
TI社は、4ビットのTMS1000がプログラム済みの組み込み用途であることを強調した。

ワンチップ上のコンピューター(computer-on-a-chip)は、マイクロプロセッサコア(CPU)、メモリ、そしてI/O(入出力)端子を一つのチップに統合した。
当時、「マイクロコンピューター特許(microcomputer patent)」と呼ばれたワンチップ上のコンピューターの特許アメリカ合衆国特許第 4,074,351号は、TI社のゲアリー・ブーンとマイケル・J・コクランに与えられた。
この特許は別にして、マイクロコンピューターの通常の意味は、CPUとして一つ以上のマイクロプロセッサを使ったコンピューターのことであるが、この特許で定義された概念は、マイクロコントローラーに似たものである。

## 解説

TMS1000ファミリーは、最終的にオリジナルのPMOSロジックだけでなく、NMOSロジックとCMOSロジックの品種も含まれるようになった。
各種製品は、異なる大きさのROMとRAM、異なるI/Oの数、そして開発向けあるいは外部ROMを使用するROMなし版を含んでいた。
オリジナルのTMS1000は、1024バイトのROM、64ニブルのRAM、そして23の入出力端子を備えていた。

TMS1000ファミリーは、マスクROMを使った。
ユーザーがデバッグされたプログラムを生産に委託する準備ができたら、テキサス・インスツルメンツへプログラムを送ることになる。テキサス・インスツルメンツは、チップ内のROMをプログラムするための特製マスクを作る。
ROMは、現場で変更できない。その内容は、製造者によってチップ内に置かれたパターンによって決定された。
この過程は、高額な初期費用がかかったが、製造費用は非常に安かったので、大量生産品(年間数千個以上販売される)に向いていた。

プロセッサの全てのデータパス(RAMへのパス)は、4ビット幅(ニブル)だった。
ハーバードアーキテクチャのようにプログラムROMとデータRAMのアドレスは分かれていた。ハーバードアーキテクチャは、他の多くの製造者によるマイクロコントローラーの一般的な特徴になった。

ALUは、オーバーフローを示すためにキャリーフラグを搭載しており、2倍の精度(つまり8ビット)の計算の手助けになった。
チップ内蔵RAMは、XレジスタとYレジスタによってアドレッシングされた。ここでYレジスタは4ビットであり、XレジスタはRAMのサイズに依存して2ビットあるいは3ビットだった。
プログラムカウンターは、6ビット幅だった。1024バイトまでのプログラム用メモリであるROMにアドレスするためにpageレジスタ(4ビット)も搭載していた。
TMS1000ファミリーの一部は、2048バイトまでのROMを扱えるようにchapterビットを搭載していた。

スタックはなかったが、プログラムカウンターを保存するためのレジスタが提供された。そして、1レベルのサブルーチンのためにキャリーフラグが利用可能であった(TMS1000ファミリーの一部は、2あるいは3レベルのサブルーチンが利用できた)。割り込み機能はなかった。

一部のモデルは、4つのI/O端子しか搭載していなかった。なぜなら、それらのモデルは、ROMを内蔵していなかったので、外部プログラムメモリにアクセスするためにパッケージの限られた数の端子を使う必要があったからである。
あるバージョンは、蛍光表示管を駆動するための特別な出力を搭載していた。そして、7セグメントディスプレイを駆動するのに役立つPLAを搭載しているモデルもあった。
4つの入力端子がキーボード検出などの目的で提供された。そして、可変数の出力端子は、外部デバイスの制御あるいはキーボードのROWをスキャンするために提供された。

PMOS版は、-9 Vあるいは-15 Vで動作し、およそ6 mAを消費した。そのため、出力ロジックレベルは、TTLと互換性がなかった。
NMOS版とCMOS版は、TTLと同じ電圧の+5 Vで動作したので、5 Vロジックとの相互運用が可能であった。

命令セットはモデルによって多少変化した。基本命令セットは43命令であり、TMS1000ファミリーの一部は54命令が利用可能だった。命令長は8ビットだった。
BCD演算命令が提供されたが、レジスタのANDあるいはOR論理演算をするために利用できる命令はなかった。
サブルーチンは、一部のモデルで1レベルに制限された(サブルーチンは他のサブルーチンを呼べない)。他のモデルでは2あるいは3レベルが利用可能であった。

一つの命令は、NMOS版やPMOS版で実行するのに10から15マイクロ秒必要だった。しかし、一部のCMOS版は6マイクロ秒程度の速さで実行できた。内部発振器は、約0.3 MHzの実効クロック速度を提供した。

TMS1000は、28または40ピンのスルーホールDIPパッケージに収められていた。しかし、製品試作用の一部のモデルは、64ピンパッケージであった。
全モデルは、摂氏0度から摂氏70度の範囲の温度で動作した。

TMS1000は、単一チップの組み込みシステムを意図していたので、TMS1000ファミリーのために特別に作られた特別なサポートチップ(UARTなど)は存在しない。