TLCS-90

東芝は結構長いあいだZ80ファミリのLSIとかZ80 CPUと周辺回路を集積したCMOS Z80 ASSPマイクロプロセッサファミリを販売してきました。しかしZ80ファミリは1976年当時の技術水準で開発されたもので、組み込みマイクロプロセッサへの要求が高度化すると、いささか時代遅れのプロセッサになってしまいます。単純にZ80 CPUを高速化するとメモリやシステム全体へのタイミング要求がシビアになってしまい、マイクロコンピュータ全体ではコストダウンしにくいかもしれません。また、組み込み分野にも高級言語によるソフトウェア開発が普及してくると、Z80 CPUの命令体系では対応にいささか手間がかかることでしょう。
LSIの集積度や速度が向上してくると、シングルチップマイクロコンピュータの場合にはまずROMやRWMの拡充が図られ、次にI/O機能が強化されてきましたが、しだいにプロセッサの能力自体も大幅に強化できるようになってきます。なぜプロセッサの機能が後回しになるかというと、単純な命令追加でもソフトウェア開発にかかわるアセンブラやコンパイラやデバッガの改定が必要だし、さらに重要な点にユーザである応用開発担当のプログラマが新プロセッサによるプログラミングを習得する時間も必要であり、結局、強化したプロセッサへの乗り換えというのは技術的にも心理的にも乗り越えるべき壁が存在するからです。
そこでシングルチップマイクロコンピュータのプロセッサ部を新たに開発する場合、ふたとおりの戦略が存在します。ひとつは、まったく新しいプログラミングしやすい高機能プロセッサの投入というものです。乗り換えるだけの魅力のある高機能プロセッサを用意して、ユーザが習得の手間を差し引いても新規プロセッサの採用によって開発作業が短縮されたり応用製品の機能を高めることができると納得すれば、きっと乗り換えに成功するでしょう。もう一つの戦略は、従来のプロセッサの改良品を段階的に投入するというものです。Motorola社がMC6800からMC6801、MC68HC11へとプロセッサを高機能化したようなやり方ですね。再訓練なしで従来のプログラミング手法をそのまま使用しても、それなりにプログラムが動作し、追加された命令やアドレッシングモードを利用すればさらに高速化したりコーディングが楽になるということを売りにするわけです。バイナリコードまで互換性を保証すれば、アセンブラの類の対応はわずかな工数ですみます。プログラマの心理的な障壁、覚えなおすのイヤだなぁってな気分になることもあまりないでしょう。まぁ、実際には割り込みメカニズムのあたりに非互換性が少し存在したりでもすれば、まったく異なるプロセッサを使いはじめるのと同じくらいはまる可能性があるんですけどね。
で、東芝がTMPZ84Cxxx系列の後に開発したTLCS-90シリーズは後者の戦略を選択したZ80 CPUの流れを汲むプロセッサです。レジスタ構成はまったく同じ、ニーモニックの雰囲気も非常に似ています。一見、Z80用のプログラムをそのまま使えるかのようです。ただし、アドレッシングモードがずっと便利になったり新規命令も多数追加されていたり、かなり改良された点もあります。その結果、バイナリコードは非互換になっています。

TMP90C401
TMP90C400のROMなし版のTMP90C401です。

写真のTMP90C401はTLCS-90シリーズアーキテクチャのプロセッサを持ち、さらにRWM 128 Byte、シリアルインターフェース1 chに8 bitタイマ4 ch、最大37本のパラレルI/Oポートを利用できます。割り込みは外部3本、内部7本、マイクロDMA 8ch分利用できます。

命令がどれくらいZ80 CPUと似ているか、ニーモニックだけ並べてみましょう。
LD   Load
LDW  Load Word
PUSH Push
POP  Pop
LDA  Load Address
EX   Exchange
EXX  Exchange X
LDI  Load and Increment
LDIR Load, Increment and Repeat
LDD  Load and Decrement
LDDR Load, Decrement and Repeat
CPI  Compare and Increment
CPIR Compare, Increment and Repeat
CPD  Compare and Decrement
CPDR Compare, Decrement and Repeat
ADD  Add
ADC  Add with Carry
SUB  Subtract
SBC  Subtract with Carry
AND  And
OR   Or
XOR  Exclusive Or
CP   Compare
INC  Increment
DEC  Decrement
INCX Increment if X
DECX Decrement if X
DAA  Decimal Adjust Accumlator
CPL  Complement
NEG  Nagate
LDAR Load Address Relative
CCF  Complement Carry Flag
SCF  Set Carry Flag
RCF  Reset Carry Flag
NOP  No Operation
HALT Halt
DI   Disable Interrupt
EI   Enable Interrupt
SWI  Software Interrupt
MUL  Multiply
DIV  Divide
INCW Increment Word
DECW Decrement Word
RLCA Rotate Left Circular Accumulator
RLC  Rotate left Circular
RRCA Rotate Right Circular Accumulator
RRC  Rotate Right Circular
RLA  Rotate Left Accumulator
RL   Rotate Left
RRA  Rotate Right Accumulator
RR   Rotate Right
SLAA Shift Left Arithmetic Accumulator
SLA  Shift Left Arithmetic
SRAA Shift Right Arithmetic Accumulator
SRA  Shift Right Arithmetic
SLLA Shift Left Logical Accumulator
SLL  Shift Left Logical
SRLA Shift Right Logical Accumulator
SRL  Shift Right Logical
RLD  Rotate Left Digit
RRD  Rotate Right Digit
BIT  Bit Test
RES  Reset Bit
SET  Set Bit
TSET Test and Set
JP   Jump
JR   Jump Relative
JRL  Jump Relative Long
CALL Call
CALR Call Relative
DJNZ Decrement and Jump if Non Zero
RET  Return
RETI Return from Interrupt
順不同になってしまいましたが、たまに見慣れないニーモニックが混じっているのを除けば、Z80 CPUのニーモニックにそっくりなことがおわかりになるでしょう。
ただ、内容はかなり拡張されていて、AND命令やXOR命令のディスティネーションにHLレジスタを指定する16 bit論理演算が可能になっていたり、メモリをディスティネーションにしたADDやORやINC命令が実行できたりします。

アドレッシングモードも強化されていて、次の8種類のアドレッシングモードを利用できます。

  1. レジスタアドレッシングモード
  2. イミディエイトアドレッシングモード
  3. レジスタ間接アドレッシングモード
  4. インデックスアドレッシングモード
  5. レジスタインデックスアドレッシングモード
  6. エクステンドアドレッシングモード
  7. ダイレクトアドレッシングモード
  8. 相対アドレッシングモード
レジスタアドレッシングモードはA, B, C, ...などのレジスタを対象にするもので、定数値を対象とするイミディエイトアドレッシングモードと共にごく普通のものです。レジスタ間接アドレッシングモードは(BC), (DE), (HL), (IX), (IY), (SP)といった、レジスタペアか16 bitレジスタの内容をアドレスとして解釈するモードです。特に(SP)が含まれるあたりがZ80 CPUと異なり新しいですね。インデックスアドレッシングモードは(IX + d), (IY + d), (SP + d)の形で、符号付き8 bit整数のディスプレースメントをインデックスレジスタに加算したものが対象アドレスとなります。ここもSPがインデックスレジスタとして利用可能なのが新しく、スタックフレーム上のローカル変数にアクセスするコードが書きやすくなる場面もあるでしょう。レジスタインデックスアドレッシングモードは(HL + A)しか許されず、HLレジスタにAレジスタの内容を加算したものが対象アドレスになります。Aレジスタの内容は符号付き8 bit整数として扱われます。エクステンドアドレッシングモードは16 bit数値でアドレスを直接表現する従来と同じモードですが、ダイレクトアドレッシングモードは0FF00Hから0FFFFHまでのアドレス範囲を8 bit数値でアクセスする新しいモードです。
 

Return to IC Collection