TMS9918は、テキサス・インスツルメンツが製造し、1979年に発表されたビデオディスプレイコントローラ(VDC)です。 [ 1 ] TIのマニュアルでは「ビデオディスプレイプロセッサ」と呼ばれています。 (VDP) TMS9918とその派生品は、Casio PV-2000、Coleco Adam、ColecoVision、CreatiVision、Hanimex Pencil II、MSX、Memotech MTX、NABU Personal Computer、PECOS、SG-1000、SC-3000、SV-318、SV -328 、Sord M5、TI-99/4、Tatung Einstein、Tomy Tutor、 Nichibutsu My Vision 、Bit Corp. Bit 90、Frael Bruc 100、Dina 2 in 1 、Asiel Sistemas PECOS、Zemmix CPC/CPGシリーズ、およびMFJ-1480Bで使用されています。また、 Samsung SPC-1000、BBC Micro、COSMAC Elf、Apple IIのアドオンにも使用されました。
TMS9918は、当時としては先進的な設計でした。256×192ピクセルのレイアウトを基本とした4つのグラフィックモードを備えており、40×24文字表示、256×192ピクセル表示、またはメモリ使用量を抑えた64×48ピクセル表示として使用できます。カラーパレットは15色と透明色で固定されています。また、0から31までの番号が振られた32個の単色8×8または16×16ピクセルのスプライトをサポートしており、番号の小さいスプライトが番号の大きいスプライトの上に表示されます。これにより、レイヤー効果や遠近効果を実現できます。さらに、ビデオ入力と同期ピンを備えているため、別のソースからのビデオをチップで作成したグラフィックの下に表示できます。これは、複数の9918からの出力をレイヤー化したり、9918を他のビデオソースへのタイトルやオーバーレイのシステムとして使用したりするために使用できます。
この高度な機能セットをサポートするために、9918は高速なメモリアクセスを必要とします。コンピュータのメインメモリとは別に、専用の16KBのRAM プールを備えています。TIはこのRAMをVRAMと呼んでいました。つまり、CPUは専用の8ビットデータバスを介してのみビデオディスプレイを更新でき、VDPがバス上で専用RAMとの間でデータを転送します。これにより、CPUと9918間の通信速度が制限されました。また、ビデオチップを使用してメモリを更新するという一般的な解決策は使用できず、別のハードウェアで実装する必要がありました。これらは、単一のプールでメモリを共有するシステムに比べれば些細な問題ですが、結果として、より色彩豊かでアーケードビデオゲームのディスプレイに近いディスプレイが実現しました。
ヤマハV9938は、TMS9918の改良版です。


TMS9918は40ピンのデュアルインラインパッケージ(DIP)に収められていました。電源はピン33のV CCで+5V 、ピン12のV SSでグランドとして供給されました。NTSCカラーバースト周波数の3倍である10.7386MHzで動作する水晶発振器がピン40のXT1とピン39のXT2に接続されていました。ビデオ出力はピン36のCOMVID、入力(使用する場合)はピン35のEXTVで、コネクタのシールド接続はグランドに接続されていました。[ 3 ]
フルカラー動作をサポートするために必要なメモリ性能を実現するために、システムはVRAMと呼ばれる専用のDRAM領域を使用しました。このメモリを動作させるために、システムはピン3(AD7)から10(AD0)までの8ビットアドレスバスと、ピン25(RD7)から32(RD0)までの8ビットデータバスを構成する独立したピンセットを備えており、ピン11の読み書き制御、およびピン1と2のRASとCASによってサポートされています。[ 3 ]
ホストコンピュータとの通信は、ピン17~24(D7~D0)の独立した8ビットデータバスを介して行われた。ピン13(MODE)は、そのバス上のデータがアドレスかデータかを制御する。TMS9918に書き込むには、CPUはまずモードを設定し、データを内部アドレスレジスタに書き込み、次にデータをバスに書き込み、モードを変更してデータがそのアドレスに格納されるようにする。データバイトが読み取られた後、TMS9918はアドレスレジスタのポインタをインクリメントし、一連のバイトを連続して書き込めるようにする。[ 4 ]
TMS9918 は、論理的に複数のレイヤーにグラフィックを配置します。最上位に 32 個のスプライト レイヤー、グラフィックまたはテキスト レイヤー、画面全体を単色で埋める「背景」、そして最後に外部ビデオ レイヤーがあります。背景プレーンは他のレイヤーよりもわずかに大きいため、画面全体を完全に埋めます。システムは、15 色のカラー パレットと、透明なカラー 0 を使用します。画面上の任意のピクセル位置で、システムはその位置に特定のオブジェクトがあるかどうか、そしてそれが透明に設定されているかどうかを確認します。透明な場合は次のオブジェクトを調べ、外部ビデオ レイヤー (通常は使用されません) に到達するまでこれを繰り返します。[ 5 ]以下の説明は、同じ順序で並んでいます。
9918 シリーズの重要な特徴は、スプライトのサポートでした。8 x 8 ピクセルのスプライトのパターンを格納するために、VRAM 内の 8 バイトのシーケンスを使用し、8 ピクセルの各行に 1 バイトが割り当てられました。また、16 x 16 ピクセルのスプライトを使用する第 2 のモードもあり、1 行あたり 2 バイト、16 行でした。[ 6 ]さらに、どちらのサイズのスプライトも 2 倍に拡大して、画面上でスプライトを大きくすることができました。スプライトのパターン データは、8 バイトまたは 32 バイト長のエントリで、スプライト ジェネレータ テーブル(SGT)と呼ばれるメモリ ブロックに格納されていました。[ 7 ]
パターンを保持する 8 バイトまたは 32 バイト長のエントリに加えて、データの解釈と表示方法を定義する別のスプライト属性テーブル(SAT) がありました。これには、スプライトの水平位置と垂直位置の 8 ビット値、SGT 内のそのスプライトのデータの開始位置へのポインタ (名前と呼ばれていました)、下位 4 ビットの色コードが含まれており、スプライトごとに合計 4 バイト、SAT 全体では 128 バイトでした。[ 6 ]
画面上の任意のピクセルに表示する色を決定するために、システムはその場所にどのスプライトが表示されているかを確認し、その場所に 1 を持つ最初のスプライトが見つかるまでパターンを検索し、そのピクセルに SAT で見つかった色を描画しました。これにより、スプライトは順番に表示され、番号の小さいスプライトが番号の大きいスプライトの上に表示されるようになりました。つまり、たとえばスプライト 0 は常に一番上に表示されます。その場所に 1 を持つスプライトが画面上にない場合、そのピクセルは透明になり、代わりに背景グラフィックが表示されます。[ 8 ]
スプライトは順番に描画されるため、目的のレイヤー効果を得るためには、その順序を変更する必要がある場合があります。これがSATの「名前」フィールドエントリの目的です。たとえば、スプライト10が5の前に表示されるように表示を変更したい場合は、2つの名前フィールドエントリの値を入れ替えることで、パターンデータを移動する必要がなくなります。スプライトの順序を慎重に配置することで、システムは擬似3Dや視差スクロール効果を容易に生成できます。[ 9 ]
パフォーマンス上の問題から、1つのスキャンラインに表示できるスプライトは4つまでです。特定のラインにそれ以上のスプライトを指定しても、表示されません。VDPには、最初に破棄されたスプライトの番号を報告するステータスレジスタがあります。この制限に達しないようにシステムを設計するのはプログラマの責任です。1つのラインにより多くのスプライトをエミュレートする1つの方法は、フレームごとに名前の値を入れ替えて優先順位を変更し、1つのフレームで4つのスプライトのセットを表示し、次のフレームで別のセットを表示することです。これにより、1つのラインに最大8つのスプライトを表示できますが、目立つちらつきが発生します。
スプライト衝突フラグは、2つのスプライトのパターンビットがゼロ以外で一致した場合に設定されます。どちらかのスプライトが透明色であっても同様です。VDPはどのスプライトが衝突したかを示すのではなく、少なくとも2つのスプライトが衝突したことを示します。これは通常、ソフトウェア内部のより高度な衝突検出ルーチンをトリガーするために使用され、衝突の正確な位置を特定して適切な処理を行うことができます。
9918 のグラフィックは、256 ピクセル幅、192 ピクセル高さの基本レイアウトに基づいていました。[ 5 ]これらの数値は、プログレッシブ スキャンディスプレイで出力にアナログ ビデオ信号を使用する当時のシステムとしては一般的です。これは、 NTSC無線周波数信号の複雑さのために、当時のテレビで達成された最大解像度である約 320 x 240 に近い値です。[ a ]
グラフィックレイヤーには、以下の4つの使用方法がありました。
モード 0、またはテキスト モードでは、画面が 40 x 24 の「ブロック」レイアウトに分割され、各ブロックは幅 6 ピクセル、高さ 8 ピクセルでした。各ブロックは 0 から 255 までの値を保持でき、通常は拡張ASCII文字セットを表します。256 文字それぞれのパターンは VRAM に格納され、CPU を使用して VRAM の値をロードすることで変更できました。文字の各行は、1 行あたり 1 バイト、1 文字あたり 8 バイトに格納された一連の「オン」または「オフ」ピクセルとして定義されました。ブロックは画面上で 6 x 8 であったため、文字間にスペースを空けるために、デザイナーは 5 x 7 のグリッドに文字を配置する必要がありました。パターンの「オン」ビットと「オフ」ビットの色は、利用可能な 15 色のいずれかで、VRAM に格納されました。[ 3 ]
モード 1、またはグラフィックス Iは、基本的にテキスト モードの改良版で、画面を 32 x 24 のレイアウトに分割し、各ブロックが 6 x 8 ピクセルではなく 8 x 8 ピクセルになるようにしました。画面上の任意のピクセルのパターンは、テキスト モードの文字を保持するものと同じ 256 エントリのビット パターン テーブルから検索されました。可能な位置は 768 箇所あり、可能なパターンは 256 種類しかないため、このモードでは表示できる種類が制限されていました。グラフィックス I では、任意のブロックのオン ピクセルとオフ ピクセルの色値を保持する VRAM の別のセクションも追加され、768 エントリありました。これは、8 x 8 ピクセルの各ブロックが独自の 2 つの色を持つことができることを意味しますが、ブロック内のピクセルはすべて同じでなければなりませんでした。[ 7 ]これは当時の珍しい解決策ではなく、セルの端が見えないように色を選択できない場合に属性の衝突として知られるよく知られた問題につながります。
モード 2、またはGraphics IIは Graphics I のさらなる改良版で、768 ブロックすべてに個別のパターンを設定でき、ブロック内の各行にも個別の色設定が可能でした。つまり、どのブロックでも 15 色すべてを使用できるものの、1 行あたり使用できるのは 2 色のみでした。このディスプレイでは、任意の画像を描画でき、より多くの色を表示できるため、ピクセル単位でアドレス指定可能で、任意の画像を高解像度で描画するのに適したディスプレイが実現しました。ただし、192 行それぞれに 32 色のエントリが必要で、さらに 768 個の個別のエントリを持つ拡張パターン マップも必要となるため、すべてのデータを保持するために必要な VRAM が約 12 KB に増加します。[ 10 ]
モード3、またはマルチカラーモードでは、画面が64×48ブロックに分割され、合計3072ブロックになりました。このモードではパターンはなく、セル全体がオンかオフかのどちらかでした。各ブロックにカラーテーブルのエントリがあり、各ブロックが独自の色を選択できました。これにより、3KB未満 のVRAMを使用して低解像度ながら高彩度のディスプレイが実現しました。[ 11 ]
このシステムの制約の一つは、ハードウェアによる細かいスクロール機能が備わっておらず、通常8行の高さのセル境界に沿ってしかスクロールできなかったことです。スクロールは、VRAMに既に格納されているパターンを移動し、新しい行または列のデータを追加することで実現されていましたが、これには時間がかかりました。さらに、すべてのグラフィックモードは基本的に各セルにカスタム文字を持つ文字モードであったため、線や円など、セルをまたぐパターンでは、任意のセルの各行のピクセルを計算し、その値を文字セットにアップロードする必要がありました。
技術的には、モード2はカラフルな文字セットを使用した文字モードです。画面は水平方向に3つの256×64ピクセルの領域に分割され、それぞれの領域に独自の文字セットが割り当てられます。3つの領域すべてに0から255までの文字を順番に表示することで、プログラムは各ピクセルを個別に設定できるグラフィックモードをシミュレートできます。ただし、結果として得られるフレームバッファは非線形です。
このプログラムは、3つの同一の文字セットを使用し、カラフルな文字セットでテキストモードのように画面を処理することもできます。背景パターンやスプライトは、カラフルな文字で構成されます。これは、画面全体を埋めてスクロールするために移動する必要があるデータがわずか32×24バイトであるため、ゲームでよく使用されていました。
TMS9918モード2を使用する際の課題は、8×1ピクセルの領域ごとに、前景色と背景色の2色しか使用できないことでした。16色のカラーパレットから自由に色を選択することはできましたが、8×1の領域ごとに使用できる色は2色のみでした。直線を斜めに描画する場合、8×1の領域ごとに使用できる色の上限である2色を超えてしまい、「色のにじみ」が発生してしまう可能性がありました。
テキサス・インスツルメンツは当初、上記の 4 つのモードのみを文書化していました。しかし、モード 2 を有効にするビットは、実際には他のモードの修飾ビットです。これを有効にすると、次の 3 つのことが起こります。[ 12 ]
コード内でこのビットを切り替えることで、さらに3つのモードが利用可能になります。純正のTMS9918Aチップはこれらのモードをサポートしていますが、クローンやエミュレーターではサポートされていない場合があることに注意してください。
9918 シリーズのもう 1 つの重要な特徴は、外部ビデオ ソースを読み取り、その上にあるすべてのオブジェクトが透明であると仮定して、その信号を出力に渡すことができることでした。これにより、システムはグラフィックを生成し、それをビデオ カメラやビデオ テープなどのアナログ ソースに重ね合わせることができます。2 つのディスプレイが適切に位置合わせされるようにするには、外部ソースからのクロックも入力する必要があり、通常は水晶発振子によって生成されるクロック信号を置き換えます。また、一方の信号が他方の信号を圧倒しないように、入力信号の出力強度を出力に合わせるシステムも必要です。[ 14 ]
TMS9918ファミリーのチップは、コンポジットビデオパレットを使用していました。TMS9918AとY、RY(Pr)とBY(Pb)では、輝度と色度値の組み合わせに基づいて色が生成されました。これらの値はTMS9928A/9929Aのものです。[ 15 ]
TMS9918は、15の表示色と「透明」色(色0)で構成される、固定の16色パレットを備えています。
データシートの「表2.3 - 色の割り当て」によると、出力レベルは次のとおりです。[ 15 ]
注:色はあくまで例示であり、SMPTE C測色法を前提とした自動YPbPrからsRGBへの変換を使用しています。正しい色変換については次のセクションを参照してください。
それまで、コンピューターモニターやテレビには陰極線管( CRT)しか使われておらず、これらのCRTにはガンマ値がありました。TMS9918シリーズのチップは、そのようなテレビで動作するように設計されており、そのCRTのガンマ値は1.6でした(注:MacintoshモニターのCRTは1.8、PCモニターのCRTは2.2でした)。デジタルフラットパネルにはガンマ値がありません。そのため、TMS9918の色は、上の最初の表のようにやや薄く見えます。下の表は、ガンマ補正された値を使用しており、その値は(10進数と16進数で)次のとおりです。
導出:
Y、RY、BYをRGBに変換するには、Yがどのように生成されたかを考慮する必要があります。
Y = R * 0.30 + G * 0.59 + B * 0.11
これにより、以下の式が得られます。
R = RY + Y B = BY + Y G = (Y - 0.30 * R - 0.11 * B) / 0.59
しかし、彩度を持たない色(つまり、黒、グレー、白)の場合、RYとBYは0%ではなく、すべて47%のオフセット値になります。そのため、RYとBYの値から最初にこのオフセット値を差し引く必要があります。
次にRGBへの変換が行われ、結果は0%から100%の範囲になるはずです。しかし、「ライトレッド」の場合、Rの値は113%になります。これはデータシート内のタイプミスによるものと思われるかもしれません。データシートではRYは80%を超えるべきではありません。しかし、オシロスコープでチップの出力信号を測定すると、表の値はすべて正しいことがわかります。つまり、エラーはチップ内部にあり、赤色の信号が飽和状態になっているのです。そのため、この値は100%に修正する必要があります。
最後に、値を1.6乗することでガンマ補正を行う必要があります。
16進数値は、0~100の範囲の値の範囲を0~255に変換し、2.55を掛けてから四捨五入することで得られます。
このファミリーのICはすべて、通常TMS9918という名称で呼ばれ、場合によっては「A」という接尾辞が付きます。「A」は、新機能が追加されたチップの第2バージョンであることを示しており、最も顕著なのはビットマップモード(Graphic II)の追加です。
このチップの主な特徴は、1980年のカール・グッタッグ(設計者の1人)のプレゼンテーションで強調されているように、次のとおりです。[ 1 ]
TMS9918はTI-99/4でのみ使用され、TI-99/4Aやその他のコンピュータにはAバージョンのVDCが搭載されていました。

TMS9918AとTMS9928Aは60Hzのビデオ信号を出力しますが、TMS9929Aは50Hzのビデオ信号を出力します。「TMS9918A」と「TMS9928A」の「1」と「2」の違いは、「1」バージョンはコンポジットNTSCビデオを出力するのに対し、「2」バージョン(TMS9929Aを含む)はアナログY輝度信号とRYおよびBY色差信号を出力することです。後者の必要性は、PALとSECAMという異なるビデオ信号規格のため、ヨーロッパを含む50Hzの世界では圧倒的に高かったのです。異なる色規格ごとに異なるコンソールを用意するよりも、Y、RY、BYを出力してRF変調器でPALまたはSECAMにエンコードする方がコスト効率が良かったのです。 「1」バージョンには外部コンポジットビデオ入力も搭載されており、ビデオにテキストやグラフィックを重ねて表示できるビデオ「タイトル作成装置」で使用するのに便利なチップだったが、「2」バージョンには搭載されていない。
TMS9918 の初期バージョンは、デプレッション ロード NMOSで、4.5 μm プロセスで製造されました。これは、 3 つの電源電圧を必要とする古いエンハンスメント ロード NMOS プロセスを使用したTMS9900マイクロプロセッサとは対照的に、テキサス インスツルメンツが製造した最初のデプレッション ロード NMOS チップの 1 つです。ダイ サイズが大きく、内部速度が比較的高いため、TMS9918 は十分に熱くなり、ヒート シンクが必要でした。台湾の DINA コンソール (Colecovision/SG-1000 のハイブリッド) などの一部のデバイスは、シンクを取り付けなかったため、チップの誤動作が発生しました。1983 年までに、テキサス インスツルメンツはダイ サイズを 3 μm に縮小し、より低温で動作し、もはやヒート シンクは不要になりました。 MSXマシンとセガSG-1000は新しい3μmのTMS9918を使用していたが、ほとんどのコレコビジョンはオリジナルの4.5μmバージョンを使用していた(1985年に製造された最終ロットのコンソールには新しいモデルのTMS9918が搭載されていた)。

TMS9918シリーズの後継機種であるTMS9118、TMS9128、TMS9129は1980年代半ばから後半にかけて発売されましたが、あまり普及しませんでした。1つのピンの機能が変更され、ビデオメモリのマッピングが変更されたことで、TMS99xxシリーズで必要となる8個の16K×1ビットチップの代わりに、2個の16K×4ビットチップを使用できるようになりました。それ以外は、それぞれTMS9918A、TMS9928A、TMS9929Aと完全に同一です。
テキサス・インスツルメンツのTMS9918Aの後継機種はヤマハのV9938で、ビットマップモードの追加、よりカラフルなスプライト、垂直フルスクリーンスクロールレジスタ、垂直および水平オフセットレジスタ、ハードウェアブリッター、カスタマイズ可能なパレットが追加されました。V9938はMSX2規格のコンピュータ向けに設計され、後にTI-99/4Aのサードパーティ製アップグレードであるGeneve 9640「コンピュータ・オン・ア・カード」にも使用されました。
V9938の後継機種であるV9958は、いくつかの高解像度カラーモードと水平方向の2ページスクロールレジスタを追加しました。これらのチップはMSX2+/ turboRシステムで使用されました。
東芝は、グラフィックス 2 モードの非公開のパターン / カラー テーブル マスキング機能をサポートしない T6950 というクローンを製造しました。 [ 16 ]その後、東芝は、動作するマスキング機能を備えた VDP を内蔵した T7937A MSX-Engineをリリースしました。東芝の VDP はどちらも、TI の VDP とは少し異なる (より鮮やかな色) パレットを備えています。
マスターシステムゲーム機のVDPは、TMS9918の進化版です。これはさらに進化し、ジェネシス/メガドライブゲーム機のVDPへと発展しました。ジェネシス/メガドライブのVDPでは、マスターシステムVDPのグラフィックモードのほとんどが、より高性能なバージョンに置き換えられています。