戻る

TMS9900

TI TMS9900
Data 16bit / Address Bus 15bit
Cycle 3.0〜3.3MHz
(1976)

発展型:「TMS9995」
命令がいくつか追加された。
5V単一電源化、256bytesのメモリ、クロックジェネレータ、タイマ回路を内蔵などの改良がなされている。
トミー「ぴゅう太」のCPUとしても有名(というかそれくらいしかない)

●TMS9900のピン配列

Vbb1 64HOLD
Vcc2 63MEMEN
WAIT3 62READY
LOAD4 61WE
HOLDA5 60CRUCLK
RESET6 59Vcc
IAQ7 58N.C.
φ18 57N.C.
φ29 56D15
A1410 55D14
A1311 54D13
A1212 53D12
A1113 52D11
A1014 51D10
A915 50D9
A816 49D8
A717 48D7
A618 47D6
A519 46D5
A420 45D4
A321 44D3
A222 43D2
A123 42D1
A024 41D0
φ425 40Vss
Vss26 39N.C.
Vdd27 38N.C.
φ328 37N.C.
DBIN29 36IC0
CRUOUT30 35IC1
CRUIN31 34IC2
INTREQ32 33IC3

●TMS9900の特徴

レジスタセットは以下の構成となっている。
全て16bitである。
注意する点ではMSB(Most Significant Bit:最上位bit)が他のCPUと異なり、「0」bit目であること。
汎用レジスタは「WP」によって示される16bitのメモリ空間上にある。
0〜15まであり、0以外はインデックスレジスタとしても使用される。
「Rn」(n:0〜15」と表記する。

PC→Program Counter
WP→Work Space Pointer
ST→Status Register

フラグは「ST」のMSBから7bitとなっている。

0L>Logical Greater符号なし「>」
1A>Arithmetic Greater符号付き「>」
2EQEqual=0
3CCarry桁あふれ(Carry)発生
4OVOverflowオーバーフロー発生
5OPOdd Parity奇数パリティ時
6XOPXOP flagXOP命令実行中
以下、割込マスク
12IM0Interrupt Mask0割込マスク0
13IM1Interrupt Mask1割込マスク1
14IM2Interrupt Mask2割込マスク2
15IM3Interrupt Mask3割込マスク3

アドレッシングモードは以下となっている。
「CRU(Communication Register Unit)」とはR12をベースとした8bitディスプレースメントでCRUアドレスを算出する方式。

Rnレジスタ
*Rnレジスタ間接
*Rn+レジスタ間接オートインクリメント
@n直接(n:16bitアドレス)
@DISP(Rn)インデックス(DISP:16bitディスプレースメント)
nイミディエート(n:16bit定数)
(PC)PC相対
(CRU)CRU相対

●TMS9900の命令

命令(ニーモニック)は以下の構成となっている。

  ニーモニック [OP1[,OP2]]

データの流れは「OP1(SRC)」→「OP2(DEST)」となるが、「OP1」単独の時は「OP1」は操作対象ではない。
逆に「OP2」単独の時は「OP2」は操作対象である。

●一般2項演算命令 (SRC→DEST)

ニーモニックOP1OP2動作
MOVSRC,DEST転送
MOVBSRC,DEST転送(byte)
ASRC,DEST加算
ABSRC,DEST加算(byte)
SSRC,DEST減算
SBSRC,DEST減算(byte)
CSRC,DEST比較
CBSRC,DEST比較(byte)
SOCSRC,DEST論理和
SOCBSRC,DEST論理和(byte)
SZCSRC,DESTSRCの否定とDESTの論理積
SZCBSRC,DESTSRCの否定とDESTの論理積(byte)

●単項演算命令

ニーモニックOP1OP2動作
INCDEST インクリメント1(+1)
INCTDEST インクリメント2(+2)
DECDEST デクリメント1(-1)
DECTDEST デクリメント2(-2)
ABSDEST 絶対値
INVDEST 否定
NEGDEST 符号反転
CLRDEST クリア(0をセット)
SETODEST セット(FFFFをセット)
SWPBDEST 上位8bitと下位8bitを交換

●イミディエート命令 (I:16bitイミディエイト)

ニーモニックOP1OP2動作
LIR,Iロード(即値)
LIMII ロード(即値→IM0〜3)
LWPII ロード(即値→WP)
[TMS9995]
LSTR ロード(R→ST)
[TMS9995]
LWPR ロード(R→WP)
STSTR ストア(ST→R)
STWPR ストア(WP→R)
AIR,I加算(即値)
ANDIR,I論理積(即値)
ORIR,I論理和(即値)
CIR,I比較(即値)

●レジスタ・メモリ間演算命令 (R:レジスタ)

ニーモニックOP1OP2動作
MPYSRC,RSRCとRnを乗算し、結果を上位16bitをRnと下位16bitをRn+1に格納
[TMS9995]
MPYSSRC,RSRCとRnを符号付き乗算し、結果を上位16bitをRnと下位16bitをRn+1に格納
DIVSRC,R上位16bitをRnと下位16bitをRn+1で32bitとしたものをSRCで除算し、結果をRnに商を、Rn+1に剰余を格納
[TMS9995]
DIVSSRC,R上位16bitをRnと下位16bitをRn+1で32bitとしたものをSRCで符号付き除算し、結果をRnに商を、Rn+1に剰余を格納
COCDEST,RDESTとRの否定の論理積
CZCDEST,RDESTの否定とRの論理積
XORDEST,RDESTとRの排他的論理和

●CRU命令 (C:転送するbit数 [0〜15])

ニーモニックOP1OP2動作
LDCRSRC,CCRUへロード
STCRSRC,RCRUからストア

●シフト命令 (C:シフト数 [0〜15])

ニーモニックOP1OP2動作
SLAR,C左算術シフト
SRAR,C右算術シフト
SRCR,C右回転シフト
SRLR,C右論理シフト

●ジャンプ・サブルーチンコール命令

ニーモニックOP1OP2動作
BSRC ジャンプ
BLSRC サブルーチンコール(R11にPCを保存)
BLWPSRC WP読込サブルーチンコール(WP/PC/STをR13/R14/R15にプッシュし、SRCをWPにロード後、SRC+2にジャンプ)
XSRC SRCで指定したアドレスを実行

●相対ジャンプ命令 (D:ディスプレースメント)

ニーモニックOP1OP2動作
JMPD 無条件ジャンプ
JNED [EQ]=0の時ジャンプ(≠0)
JEQD [EQ]=1の時ジャンプ(=0)
JGTD [A>]=0の時ジャンプ(>:Signed)
JLTD [A>]=0かつ[EQ]=0の時ジャンプ(<:Signed)
JHD [L>]=1かつ[EQ]=0の時ジャンプ(>:Unsigned)
JHED [L>]=1または[EQ]=1の時ジャンプ(≧:Unsigned)
JLD [L>]=0かつ[EQ]=0の時ジャンプ(<:Unsigned)
JLED [L>]=0または[EQ]=1の時ジャンプ(≦:Unsigned)
JNCD [C]=0の時ジャンプ(Carryなし)
JOCD [C]=1の時ジャンプ(Carryあり)
JNOD [OV]=0の時ジャンプ(オーバーフローなし)
JOPD [OP]=1の時ジャンプ(奇数パリティ)
SBOD CRUセット(CRU=1)
SBZD CRUリセット(CRU=0)
TBD CRU bitテスト

●ノーオペランド命令

ニーモニックOP1OP2動作
CKOF クロックオフ
CKON クロックオン
IDLE CPUをアイドル状態(割込待ち)
LREX ロードか再起動実行
RSET IM0〜3に0をセット
RTWP WP読込サブルーチンコールから復帰(ポップ&リターン)

●割込命令 (V:割込ベクタ→0040+V*4)

ニーモニックOP1OP2動作
XOPSRC,V拡張操作(ベクタ割込実行)

●マクロ (命令としては存在しないがアセンブラに定義されている)

ニーモニックOP1OP2動作
NOP 何もしない(JMP 0)
RT リターン(B *R11)

[TOPに戻る]