第 3 章 TLCS-900/H1 CPU

第 3 章 TLCS-900/H1 CPU
セミコンダクター社
TLCS-900H1 CPU
900, 900/L, 900/H, 900/L1, 900/H2, 900/H1 CPU コアの違いについて
TLCS-900 シリーズには、CPU コアとして (1) 900, (2) 900/L, (3) 900/H, (4) 900/L1, (5) 900/H2, (6) 900/H1
の 6 種の CPU コアがあり、それぞれに示す点が異なります。
CPU コア 相違点
CPU
相違内容
900
900/L
900/H, 900/L1
900/H2, 900/H1
最大アドレスバス幅
24 ビット
←
←
←
最大データバス幅
16 ビット
←
←
32 ビット
命令キューバッファ
4 バイト
←
←
命令セット
分岐命令実行時の
コードフェッチ
マイクロ DMA
CPU 特権モード
CPU レジスタモード
TLCS-900
分岐条件が真のときの
み、分岐先コードを
フェッチする
4 チャネル
システムモード、
ノーマルモード
MIN モード、
MAX モード
( リセット後 MIN モード )
TLCS-900 から
以下の命令を削除
NORMAL
MAX
以下の命令を追加
MIN
TLCS-900 から
以下の命令を削除
NORMAL
MAX
12 バイト
TLCS-900 から
以下の命令を削除
NORMAL
MAX
LDX
←
←
分岐条件に関係なく、常
に分岐先コードを先行
フェッチする
←
←
8 チャネル
システムモードのみ
←
←
←
MAX モードのみ
←
( リセット後 MAX モード )
リスタート方式
ベクタ方式
←
←
ノーマルスタック
ポインタ
XNSP
あり
なし
←
←
割り込みネスティング
カウンタ INTNEST
( 主に OS 用 )
なし
あり
←
←
割り込み方式
Page 1
TLCS-900H1 CPU
1. 概要
TLCS-900/H1 シリーズは、東芝オリジナルの高性能 32 ビット CPU を内蔵しています。
この CPU と多様な I/O 機能ブロック ( タイマ , シリアル I/O, AD など ) をワンチップ化した TLCS900/H1 シリーズは、多彩な応用分野に適用可能です。
TLCS-900/H1 の CPU は、32 ビット CPU です。内蔵汎用レジスタは 32 ビット構成のレジスタバンク方
式を採用しているため、特に組み込み制御などに最適です。
TLCS-900/H1 の CPU の特長は以下のとおりです。
(1) 汎用レジスタマシン
•
8 本のレジスタがすべてアキュムレータとして使用可能
(2) レジスタバンク方式 (4 本のレジスタをバンク化 )
•
32 ビット幅 4 バンク
(3) 広大なリニアアドレス空間 (16 M バイト ) と豊富なアドレッシングモード (9 種 )
(4) ダイナミックバスサイジングシステム
•
8 ビットまたは 16 ビット、32 ビットの外部データバスが混在可能
(5) 直交性のある豊富な命令セット
•
8/16/32 ビットのデータ転送 / 演算命令
•
16 ビット乗除算命令
16 × 16 → 32 ビット ( 符号なし / 付き )
32 ÷ 16 → 16 ビット…16 ビット ( 符号なし / 付き )
•
ビット演算を含む多様なビット処理命令
•
C コンパイラ対応命令
•
フィルタ演算命令 : 積和演算 / モジュロ増加命令
(6) 高速処理
•
最小命令実行時間 : 1 クロック (50 ns @ 20 MHz の場合 )
•
12 バイトの命令キューバッファを内蔵したパイプラインシステム
•
32 ビット ALU
Page 2
TLCS-900H1 CPU
2. リソース
CPU が取り扱い可能なリソースは、以下のものがあります。
(1) 汎用レジスタ :
•
4 本の 32 ビット汎用レジスタ × 4 バンク
•
4 本の 32 ビット汎用レジスタ ( スタックポインタ XSP を含みます )
(2) ステータスレジスタ (SR)
(3) プログラムカウンタ (PC): 32 ビットで実装されていますが、下位 24 ビットのみがアドレスバスに
出力されます。
(4) コントロールレジスタ :
マイクロ DMA の制御レジスタと、割り込みネスティングカウンタ
INTNEST があります。
(5) CPU の全命令
(6) 内蔵 I/O レジスタのすべて
(7) 実装されているメモリのすべて
なお、900/H1 には、900/L や 900/H と同様に、タスクの相互干渉をハード的に防ぐために使用される保
護機能 ( 特権モード , システムモード , スーパーバイザモードなどで呼ばれる機能 ) はありません。
Page 3
TLCS-900H1 CPU
3. レジスタ
3.1
レジスタ構成……16 M バイトのプログラム空間 /16 M バイトのデータ空間
レジスタ構成を図 3.1.1 に示します。
汎用レジスタ 4 本
(32 ビット幅 ) × 4 バンク
+
汎用レジスタ 4 本
(32 ビット幅 )
+
プログラムカウンタ
(32 ビット幅 )
+
ステータスレジスタ
4
XWA
W
A
XBC
B
C
XDE
D
E
XHL
H
L
XIX
I
X
XIY
I
Y
XIZ
I
Z
XSP
S
P
F'
F
SR
P
C
32
図 3.1.1 レジスタ構成
Page 4
TLCS-900H1 CPU
3.2
3.2.1
レジスタの詳細
汎用バンクレジスタ
4 バンクよりなる下図に示す 4 本の 32 ビット汎用レジスタがあり、それぞれのバンクにおけるレジ
スタ構成は下図のとおりです。
4 本の 32 ビットレジスタ (XWA, XBC, XDE, XHL) は汎用レジスタであり、アキュムレータ、イン
デックスレジスタとして使用できます。それぞれの 32 ビットレジスタは 16 ビットレジスタ (WA, BC,
DE, HL) としても使用でき、32 ビットレジスタの下位 16 ビットに割り付けられています。
16ビットレジスタはアキュムレータおよびインデックスアドレッシングモードのインデックスレジ
スタ、ディスプレースメントレジスタとして使用できます。さらに 16 ビットレジスタは 2 つの 8 ビッ
ト汎用レジスタ (W, A, B, C, D, E, H, L) としても使用することができ、アキュムレータなどになりま
す。
32
16
8
XWA
W
(WA)
A
XBC
B
(BC)
C
XDE
D
(DE)
E
XHL
H
(HL)
L
( ):
3.2.2
8
16
32 ビット汎用レジスタ
4 本の 32 ビット汎用レジスタ (XIX, XIY, XIZ, XSP) があり、レジスタ構成は下記のとおりです。
このレジスタもアキュムレータ、インデックスレジスタ、ディスプレースメントレジスタとして使
用でき、16 ビットレジスタ /8 ビットレジスタ (8 ビットレジスタとして使用する場合のレジスタ名称
は後述 ) として取り扱うことができます。
レジスタ (XSP) はスタックポインタと呼ばれ、割り込み、CALL 命令実行時のスタックポインタと
して動作します。
リセットにより、XSP は “00000000H” に初期化されます。
32
16
XIX
IX
XIY
IY
XIZ
IZ
XSP
SP
Page 5
TLCS-900H1 CPU
3.2.3
ステータスレジスタ (SR)
ステータスレジスタには、CPU の状態 (CPU 動作モード、レジスタ構成など ) と、演算結果の状態
を表すフラグが格納されます。このレジスタは上位バイトと下位バイトの 2 つの部分で構成されてい
ます。ステータスレジスタの上位バイト ( ビット 8~15) は CPU の状態を表します。下位バイト ( ビッ
ト 0~7) は通常フラグレジスタ (F) と呼ばれ、演算結果の状態を表しています。2 つのフラグレジスタ
(F/F’ ) を持っており、EX 命令で交替を行うことができます。
(1) ステータスレジスタ “SR” の上位バイト
15
14
13
12
11
10
9
8
“1”
IFF2
IFF1
IFF0
“1”
“0”
RFP1
RFP0
① IFF2~IFF0 (Interrupt mask F/F 2~0):
割り込みレベルのマスクレジスタです。割り込み要求レベルは 1~7 まであり、7 が最も優先
順位の高い割り込み要求レベルです。
リセットにより “111” に初期化されます。割り込みが受け付けられたとき、その割り込みレ
ベルより 1 だけ高い値がセットされます。
000
レベル 1 以上の割り込みを許可
001
レベル 1 以上の割り込みを許可
010
レベル 2 以上の割り込みを許可
011
レベル 3 以上の割り込みを許可
100
レベル 4 以上の割り込みを許可
101
レベル 5 以上の割り込みを許可
110
レベル 6 以上の割り込みを許可
111
レベル 7 の割り込み ( ノンマスカブル割り込み ) だけを許可
同じです。
ただし、レベル 7 の割り込み受け付け時は、“111” がセットされます。
② RFP1~RFP0 (Register file pointer1~0):
現在使用しているレジスタファイル ( レジスタバンク ) のナンバーを示しています。リセッ
トにより “00” に初期化されます。
この値は、下に示すレジスタバンクの切り替え命令 (3 種 ) で操作することができます。
•
LDF imm
; RFP ← imm (0~3)
•
INCF
; RFP ← RFP + 1
•
DECF
; RFP ← RFP − 1
Page 6
TLCS-900H1 CPU
(2) フラグレジスタ “F”
7
6
5
4
3
2
1
0
S
Z
“0”
H
“0”
V
N
C
: R/W
① S (Sign flag)
サインフラグ。
演算結果が負のとき “1” がセットされ、正のとき “0” がセットされます。
( 演算結果の最上位ビット (MSB) の値がコピーされます。)
② Z (Zero flag)
ゼロフラグ。
演算結果がゼロのとき “1” にセットされ、それ以外のときは “0” にセットされます。
③ H (Half carry flag)
ハーフキャリーフラグ。
演算の結果、ビット 3 からビット 4 へキャリーまたはボローが発生したとき “1” にセットさ
れ、それ以外のときは “0” にセットされます。ただし、32 ビット演算命令の場合は、不定値が
セットされます。
④ V (Parity/Over-flow flag)
パリティ / オーバフローフラグ。
演算の種類によってパリティを示す場合とオーバフローを示す場合があります。
パリティ (P):
演算の結果、1 にセットされているビットの数が奇数のとき “0” にセット
され、偶数のとき “1” にセットされます。ただし、32 ビット演算命令の
場合は、不定値がセットされます。
オーバフロー (V): 演算の結果、オーバフローなしのとき “0” にセットされ、オーバフローの
とき “1” にセットされます。
⑤ N (Negative)
ADD/SUB フラグ。
加算 (ADD など ) 命令実行後 “0” にセットされ、減算 (SUB など ) 命令実行後 “1” にセット
されます。
このフラグは、DAA (10 進補正 ) 命令実行時に使用されます。
⑥ C (Carry)
キャリーフラグ。
演算の結果、キャリーまたはボローが発生したとき “1” にセットされ、それ以外のときは
“0” にセットされます。
ステータスレジスタのリード / ライト方法
ビット 0~15 のリード
①
PUSH
POP
SR
dst
ビット 0~15 のライト
①
POP
SR
ビット 14~12 のみ
<IFF2:0>
①
EI num
num の値がライトされます。
ビット 9~8 のみ
<RFP1:0>
①
②
③
LDF
INCF
DECF
ビット 7~0 のみ
①
②
③
PUSH F/POP F
EX
F, F′
演算命令などの実行により間接的にフラグがセットされます。
imm
Page 7
TLCS-900H1 CPU
3.2.4
プログラムカウンタ (PC)
プログラムカウンタは、次に実行するメモリアドレスを示すポインタです。最大 16 M バイトのプ
ログラム空間が、リニア空間としてアクセス可能です。
なお、プログラムカウンタは、CPU 内部では 32 ビット幅で実装されていますが、アドレスバスに
は下位 24 ビットしか接続されていません。
リセット後の PC
リセットによりベクタベース番地に格納されているリセットベクタをリードした後、その値を PC
にセットし、そのベクタ以降のプログラムをリードし、実行します。
ベクタベース番地は、下記のように定義されています。
ベクタベース番地
3.2.5
リセット後の PC 設定シーケンス
PC (7:0) ← 0FFFF00H 番地の値
PC (15:8) ← 0FFFF01H 番地の値
PC (23:16) ← 0FFFF02H 番地の値
0FFFF00H
コントロールレジスタ (CR)
コントロールレジスタは、マイクロ DMA の動作を制御するレジスタと、割り込みのネスト値をカ
ウントする割り込みネスティングカウンタよりなっています。コントロールレジスタは、LDC 命令で、
アクセスできます。
コントロールレジスタは以下のとおりです。
<DMA S0>
<DMA S1>
<DMA S2>
DMA
<DMA S3>
ソース
レジスタ
<DMA S4>
<DMA S5>
<DMA S6>
<DMA S7>
<DMA D0>
<DMA D1>
<DMA D2>
<DMA D3>
DMA
<DMA D4>
ディストネーション
レジスタ
<DMA D5>
<DMA D6>
<DMA D7>
DMAM0
(DMA C0)
DMAM1
(DMA C1)
DMAM2
(DMA C2)
DMA
DMAM3
(DMA C3)
モード / カウンタ
DMAM4
(DMA C4)
レジスタ
DMAM5
(DMA C5)
DMAM6
(DMA C6)
DMAM7
(DMA C7)
(INTN EST)
割り込みネスティング
カウンタ
( ): ワードレジスタ (16 ビット ) 名
< >: ロングワードレジスタ (32 ビット ) 名
マイクロ DMA については、TLCS-900/H1 個別製品の説明の章に詳細が記載されています。
Page 8
TLCS-900H1 CPU
3.3
レジスタバンクの切り替え
レジスタバンクは以下の 3 つに大別されます。
カレントバンクレジスタ
プレビアスバンクレジスタ
アブソリュートバンクレジスタ
カレントバンクは、レジスタファイルポインタ <RFP> ( ステータスレジスタ : SR のビット 8~9) が指
し示しているレジスタバンクです。カレントバンクにあるレジスタは、前節で説明した汎用レジスタ
として使用されます。この <RFP> の内容を変更することにより、ほかのレジスタバンクがカレントレ
ジスタバンクとなります。
プレビアスバンクは、レジスタファイルポインタ <RFP> から “1” を減じた値により指し示される、
レジスタバンクです。例えば、カレントバンクが “ バンク 3” のときには、“ バンク 2” がプレビアスバ
ンクとなります。プレビアスバンクのレジスタは、“ ダッシュ ” の付いたレジスタ名 (WA’, BC’, DE’,
HL’ など ) で取り扱われ、カレントバンクとの入れ替えを EX 命令 (EX A, A’ など ) で行うことができ
ます。
すべてのバンクレジスタ ( カレントバンク、プレビアスバンクを含む ) には、バンクを表す数値 (
アブソリュートバンクナンバー ) が付けられており、この数値付きのレジスタ名を使って、全バンク
のレジスタを使用することができます。この方法でアクセスできるレジスタ ( 全レジスタ ) を、アブ
ソリュートバンクレジスタと呼びます。
TLCS-900/H1 の CPU は、カレントバンクのレジスタをワーキングレジスタとして動作させたとき
に、最大のパフォーマンスを出すように、設計されています。上述のとおり、CPU は他バンクのレジ
スタを使用することも可能ですが、他バンクのレジスタを使用すると、パフォーマンスが若干低下し
ます。CPU の最大効率を引き出すために、TLCS-900/H1 では、レジスタバンクを簡単に切り替える機
能が付いています。
このバンク切り替え機能により
•
CPU は最大効率で動作可能となる。
•
プログラムのコード量低減が可能となる。
•
特に、割り込みサービスルーチンのコンテキストスイッチとして使用した場合に、応答スピー
ド / コード量で有利。
などの優位性が得られます。
バンクの切り替えは、下記の命令を用いて行います。
LDF imm: イミディエートの内容を <RFP> にセット imm: 0~3
INCF:
<RFP> を “1” 増加させる。
DECF:
<RFP> を “1” 減少させる。
LDF 命令のイミディエート値は、0~3 になります。また、INCF/DECF 命令を用いて、キャリー / ボ
ローが発生したときには、そのキャリー / ボローは無視され、<RFP> の値は巡回されます。例えば、“
バンク 3” で INCF を実行すると “ バンク 0” となり、“ バンク 0” で DECF を実行すると “ バンク 3” に
なります。
Page 9
TLCS-900H1 CPU
•
レジスタバンクの使用例
TLCS-900/H1 のレジスタはバンク構成をとっており、各バンクは処理用途や割り込みレベル
によって使い分けることができます。以下にその例を示します。
< 例 1> 各レジスタバンクを、それぞれの割り込み処理ルーチン専用に割り当てる使用例
レジスタバンク 0 = メインプログラムと下記以外の割り込み処理用
レジスタバンク 1 = INT0 処理専用
レジスタバンク 2 = タイマ 0 処理専用
レジスタバンク 3 = タイマ 1 処理専用
例えば、メインプログラム実行中、タイマ 1 の割り込みが発生し、その処理ルーチンへ
分岐した場合、その処理ルーチンは下記のようになり、レジスタの PUSH/POP が不要にな
ります。
LDF 3
; レジスタバンクを “3” にする。
:
:
RETI
; <RFP> ( レジスタバンク ) も含めて割り込み以前の状態に戻す。
< 例 2> 各レジスタバンクを、それぞれの割り込みレベルのネスティング専用に割り当てる例
1
2
3
INCF
INCF
INCF
RETI
RETI
RETI
( 補足 ) INCF 命令は、<RFP> ← <RFP> + 1 を行う命令です。
Page 10
TLCS-900H1 CPU
3.4
汎用レジスタのアクセス
命令コードは、バイト単位で可変長になっています。カレントバンクのレジスタは、最短コード長
でアクセスできます。また、命令コードが 1 バイト長くなりますが、すべての汎用レジスタをアクセ
スすることも可能です。“ すべての汎用レジスタ ” とは、下記のとおりです。
① カレントバンクの汎用レジスタ
QW
( Q WA)
QA
< X WA>
W
( W A)
A
QB
( Q BC)
QC
< X BC>
B
( B C)
C
QD
( Q DE)
QE
< X DE>
D
( D E)
E
QH
( Q HL)
QL
< X HL>
H
( H L)
L
( ): ワードレジスタ (16 ビット ) 名
< >: ロングワードレジスタ (32 ビット ) 名
②プレビアスバンクの汎用レジスタ
QW’
( Q WA’)
QA’
< X WA’>
W’
( W A’)
A’
QB’
( Q BC’)
QC’
< X BC’>
B’
( B C’)
C’
QD’
( Q DE’)
QE’
< X DE’>
D’
( D E’)
E’
QH’
( Q HL’)
QL’
< X HL’>
H’
( H L’)
L’
③ 32 ビット汎用レジスタ
QIXH
( Q IX)
QIXL
< X IX>
IXH
( I X)
IXL
QIYH
( Q IY)
QIYL
< X IY>
IYH
( I Y)
IYL
QIZH
( Q IZ)
QIZL
< X IZ>
IZH
( I Z)
IZL
QSPH
( Q SP)
QSPL
< X SP>
SPH
( S P)
SPL
④アブソリュートバンクレジスタ
QW0
( QWA 0)
QA0
< XWA 0>
RW0
( RWA 0)
RA0
QB0
( QBC 0)
QC0
< XBC 0>
RB0
( RBC 0)
RC0
QD0
( QDE 0)
QE0
< XDE 0>
RD0
( RDE 0)
RE0
QH0
( QHL 0)
QL0
< XHL 0>
RH0
( RHL 0)
RL0
QW1
( QWA 1)
QA1
< XWA 1>
RW1
( RWA 1)
RA1
QB1
( QBC 1)
QC1
< XBC 1>
RB1
( RBC 1)
RC1
QD1
( QDE 1)
QE1
< XDE 1>
RD1
( RDE 1)
RE1
QH1
( QHL 1)
QL1
< XHL 1>
RH1
( RHL 1)
RL1
QW2
( QWA 2)
QA2
< XWA 2>
RW2
( RWA 2)
RA2
QB2
( QBC 2)
QC2
< XBC 2>
RB2
( RBC 2)
RC2
QD2
( QDE 2)
QE2
< XDE 2>
RD2
( RDE 2)
RE2
QH2
( QHL 2)
QL2
< XHL 2>
RH2
( RHL 2)
RL2
QW3
( QWA 3)
QA3
< XWA 3>
RW3
( RWA 3)
RA3
QB3
( QBC 3)
QC3
< XBC 3>
RB3
( RBC 3)
RC3
QD3
( QDE 3)
QE3
< XDE 3>
RD3
( RDE 3)
RE3
QH3
( QHL 3)
QL3
< XHL 3>
RH3
( RHL 3)
RL3
( ): ワードレジスタ (16 ビット ) 名
< >: ロングワードレジスタ (32 ビット ) 名
Page 11
バンク 0
バンク 1
バンク 2
バンク 3
TLCS-900H1 CPU
4. アドレッシングモード
TLCS-900/H1 には、9 種類のアドレッシングモードがあります。これらは、ほとんどの命令と組み合わ
されて、CPU の処理能力を向上させています。
アドレッシングモードは、下記のようになっています。
アドレッシングモード
No.
記述
1.
レジスタ
reg8
reg16
reg32
2.
イミディエート
n8
n16
n32
3.
レジスタ間接
(reg)
4.
レジスタ間接
プリデクリメント
(−reg)
5.
レジスタ間接
ポストインクリメント
(reg+)
6.
インデックス
(reg + d8)
(reg + d16)
7.
レジスタインデックス
(reg + reg8)
(reg + reg16)
8.
絶対
(n8)
(n16)
(n24)
9.
相対
(PC + d8)
(PC + d16)
reg8:
W, A, B, C, D, E, H, L, などの全 8 ビットレジスタ
reg16: WA, BC, DE, HL, IX, IY, IZ, SP, などの全 16 ビットレジスタ
reg32: XWA, XBC, XDE, XHL, XIX, XIY, XIZ, XSP, などの全 32 ビットレジスタ
注 1)
reg:
XWA, XBC, XDE, XHL, XIX, XIY, XIZ, XSP, などの全 32 ビットレジスタ
d8:
8 ビットディスプレースメント (−80H~+7FH)
d16:
16 ビットディスプレースメント (−8000H~+7FFFH)
n8:
8 ビット定数 (00H~FFH)
n16:
16 ビット定数 (0000H~FFFFH)
n32:
32 ビット定数 (00000000H~FFFFFFFFH)
相対アドレッシングモードは、下記の命令でのみ使用可能です。
LDAR, JR, JRL, DJNZ, CALR
注 2) 汎用レジスタは 32 ビット幅ですが、当製品のアドレス幅は 24 ビット幅となっています。間
接アドレスなどにより 32 ビット幅を指定しても 24 ビット分のみに反映されます。
Page 12
TLCS-900H1 CPU
(1) レジスタ
オペランドは、指定されたレジスタになります。
例 : LD HL, IX
CPU
HL
1
2
3
4
IX
1
2
3
4
IX レジスタの内容 1234H が、HL レジスタへロードされます。
(2) イミディエート
オペランドは、その命令コード中になります。
例 : LD HL, 5678H
CPU
(OP
33
HL
5
6
7
8
)
78
56
イミディエートデータ 5678H が、HL レジスタへロードされます。
(3) レジスタ間接
オペランドは、レジスタの内容で指定されるメモリ番地になります。
例 : LD HL, (XIX)
CPU
HL
XIX
1
2
3
4
2
5
2
6
3
7
3
33
345678H
22
345679H
8
345678H 番地のメモリデータ 2233H が、HL レジスタへロードされます。
Page 13
TLCS-900H1 CPU
(4) レジスタ間接プリデクリメント
まず、レジスタ内容がオペランドサイズ分、減算されます。そして、オペランドは、減算されたレ
ジスタの内容で指定されるメモリ番地になります。
例 1: LD HL, (−XIX)
CPU
HL
XIX
1
2
3
4
6
5
6
6
7
7
7
77
345676H
66
345677H
8
2
XIX
1
2
3
4
5
6
7
6
プリデクリメント数は、下記のようになります。
オペランドサイズが バイト (8 ビット ) のとき = −1
オペランドサイズが ワード (16 ビット ) のとき = −2
オペランドサイズが ロング (32 ビット ) のとき = −4
例 2: LD XIX, (−XBC)
CPU
XIX
XBC
2
2
3
3
4
4
5
5
1
2
3
4
0
0
0
2
4
XBC
1
2
3
3
F
F
F
E
Page 14
55
33FFFEH
44
33FFFFH
33
340000H
22
340001H
TLCS-900H1 CPU
(5) レジスタ間接ポストインクリメント
オペランドは、レジスタの内容で指定されるメモリ番地になります。その後、レジスタの内容がオ
ペランドサイズ分、加算されます。
例 1: LD HL, (XIX+)
CPU
HL
XIX
1
2
3
8
4
5
8
6
9
7
+
XIX
1
2
3
4
9
99
345678H
88
345679H
55
345678H
8
2
5
6
7
A
例 2: LD A, (XBC+)
CPU
A
XBC
1
2
3
4
5
6
5
7
+
XBC
1
2
3
4
5
8
1
5
6
7
9
Page 15
TLCS-900H1 CPU
(6) インデックス
オペランドは、命令コード中の 8 ビットまたは 16 ビットのディスプレースメント値と、ベースに
指定されたレジスタ (32 ビット ) の内容を加算して得られるメモリ番地になります。
例 1: LD HL, (XIX + 13H)
CPU
HL
XIX
1
2
3
5
4
5
5
6
6
7
6
66
345683H
55
345684H
66
33F000H
55
33F001H
0
+
13
例 2: LD HL, (XBC − 1000H)
CPU
XBC
1
2
3
HL
5
5
6
6
4
0
0
0
0
1
0
0
0
なお、ディスプレースメント値の範囲は、8000H~+7FFFH に限られます。
Page 16
TLCS-900H1 CPU
(7) レジスタインデックス
オペランドは、ディスプレースメント ( 符号付きの 8 ビットまたは 16 ビット整数 ) に指定された
レジスタと、ベースに指定されたレジスタ (32 ビット ) の内容を加算して得られるメモリ番地になり
ます。
例 1: LD HL, (XIX + A)
CPU
XIX
1
2
3
HL
2
2
3
3
4
5
6
7
0
13
33
345683H
22
345684H
33
347678H
22
347679H
A
例 2: LD HL, (XBC + DE)
CPU
XBC
1
2
3
HL
2
2
3
3
4
5
6
7
8
2
0 30
0
DE
Page 17
TLCS-900H1 CPU
(8)
絶対
オペランドは、命令コード中の 1~3 バイトで指定されるメモリ番地になります。
000000H~0000FFH 番地は、1 バイトで指定できます。000000H~00FFFFH 番地は、2 バイトで指定で
き、000000H~FFFFFFH 番地は、3 バイトで指定できます。
例 1: LD HL, (80H)
CPU
HL
2
2
3
3
33
000080H
22
000081H
55
001234H
44
001235H
77
56789AH
66
56789BH
例 2: LD HL, (1234H)
CPU
HL
4
4
5
5
例 3: LD HL, (56789AH)
CPU
HL
6
6
7
7
Page 18
TLCS-900H1 CPU
(9) 相対
オペランドは、現在実行中の命令コードのある番地と、8 ビットまたは 16 ビットのディスプレー
スメント値を加算して得られるメモリ番地になります。
このアドレッシングモードを使用できる命令は、限定されており、下記の 5 種類です。
LDAR
R, $ + 4 + d16
JR
cc, $ + 2 + d8
JRL
cc, $ + 3 + d16
CALR
$ + 3 + d16
DJNZ
r, $ + 3 + d8
($: 命令コードの先頭番地 )
なお、ディスプレースメントのオブジェクトコード値の計算は、命令の種類によって、補正値が異
なります (+2~+4) 。
例 1: JR 2034H
JR
68
2000H
32
2001H
上記の例での、ディスプレースメントのオブジェクトコード値は、
2034H − (2000H + 2)
であり、32H となります。
Page 19
TLCS-900H1 CPU
5. 命令
TLCS-900/H1 には、豊富なアドレッシングモードとともに、強力な命令セットを持っています。
基本命令は、大別して以下の 9 グループに分類されます。
•
転送命令 (8/16/32 ビット )
•
交換命令 (8/16 ビット )
•
ブロック転送 / ブロックサーチ命令 (8/16 ビット )
•
算術演算命令 (8/16/32 ビット )
•
論理演算命令 (8/16/32 ビット )
•
ビット操作命令 (1 ビット )
•
特別演算、CPU 制御命令
•
ローテート、シフト命令 (8/16/32 ビット )
•
ジャンプ、コール、リターン命令
表 5.1.1 に、TLCS-900/H1 の基本命令を示します。
付録 A に「命令の詳細」を、付録 B に「命令一覧表」を、付録 C に「命令コードマップ」を示します。
Page 20
TLCS-900H1 CPU
表 5.1.1 TLSC-900/H1 基本命令
LD
dst, src
データ転送命令。dst ← src
PUSH
src
src のデータをスタックへ PUSH します。
SP ← SP − size: (SP) ← src
POP
dst
スタックから dst へデータを POP します。
dst ← (SP): SP ← SP + size
LDA
dst, src
src の実効アドレスを dst にセットします。
LDAR
dst, PC + dd
PC 相対アドレス値を dst にセットします。dst ← PC + dd
EX
dst1, dst2
dst1 と dst2 のデータを交換します。
MIRR
dst
dst のビットパターンをミラー反転します。
LDI
ブロック転送命令。
LDIR
ブロック転送命令。
LDD
ブロック転送命令。
LDDR
ブロック転送命令。
CPI
ブロック比較命令。
CPIR
ブロック比較命令。
CPD
ブロック比較命令。
CPDR
ブロック比較命令。
ADD
dst, src
加算命令。
dst ← dst + src
ADC
dst, src
拡張加算命令。
dst ← dst + src + CY
SUB
dst, src
減算命令。
dst ← dst − src
SBC
dst, src
拡張減算命令。
dst ← dst − src − CY
CP
dst, src
比較命令。
dst − src
AND
dst, src
論理積命令。
dst ← dst AND src
OR
dst, src
論理和命令。
dst ← dst OR src
XOR
dst, src
排他的論理和命令。
dst ← dst XOR src
INC
imm, dst
増加命令。
dst ← dst + imm
DEC
imm, dst
減少命令。
dst ← dst − imm
MUL
dst, src
符号なし乗算命令。
dst ← dst (low) × src
dst ← dst (low) × src
MULS
dst, src
符号付き乗算命令。
DIV
dst, src
符号なし除算命令。
dst (low) ← dst ÷ src
dst (high) ← 余り
0 による除算またはオーバフローで、V フラグがセットされます。
DIVS
dst, src
符号付き除算命令。
dst (low) ← dst ÷ src
dst (high) ← 余り ; 符号は常に被除数と同じです。
0 による除算またはオーバフローで、V フラグがセットされます。
MULA
dst
符号付き積和演算命令。
MINC1
num, dst
モジュロインクリメント (+1)。
MINC2
num, dst
モジュロインクリメント (+2)。
MINC4
num, dst
モジュロインクリメント (+4)。
MDEC1
num, dst
モジュロデクリメント (−1)。
MDEC2
num, dst
モジュロデクリメント (−2)。
MDEC4
num, dst
モジュロデクリメント (−4)。
NEG
dst
2 の補数。dst ← 0 − dst
CPL
dst
1 の補数。dst ← not dst
EXTZ
dst
ゼロ拡張。dst の上位データを 0 にセットします。
EXTS
dst
符号拡張。dst の下位データの MSB 値を上位にコピーします。
DAA
dst
10 進補正。
PAA
dst
ポインタ補正。dst が奇数のとき、+1 を加えて偶数にします。
if dst (0) = 1 then dst ← dst + 1.
Page 21
dst ← dst + (XDE) × (XHL−)
32bit 32bit 16bit 16bit
TLCS-900H1 CPU
LDCF
bit, src
src<bit> の値を、C フラグにコピーします。
STCF
bit, dst
C フラグの値を、dst<bit> へコピーします。
ANDCF
bit, src
src<bit> の値と C フラグの AND をとり、C フラグへ格納します。
ORCF
bit, src
src<bit> の値と C フラグの OR をとり、C フラグへ格納します。
XORCF
bit, src
src<bit> の値と C フラグの XOR をとり、C フラグへ格納します。
C フラグを 0 に、リセットします。
RCF
SCF
C フラグを 1 に、セットします。
CCF
C フラグの値を、反転します。
ZCF
Z フラグの反転値を、C フラグへコピーします。
BIT
bit, src
ビットテスト命令。Z フラグ ← not src<bit>
RES
bit, dst
ビットリセット命令。dst<bit> ← 0
SET
bit, dst
ビットセット命令。dst<bit> ← 1
CHG
bit, dst
ビットチェンジ命令。dst<bit> ← not dst<bit>
TSET
bit, dst
ビットテスト & セット命令。
Z フラグ ← not dst<bit>
dst<bit> ← 1
BS1F
A, dst
dst 中にある最初の 1 のビットを、Forward (LSB) からサーチし、そのビット番号を A レジスタ
にセットします。
BS1B
A,dst
dst 中にある最初の 1 のビットを、Backward (MSB) からサーチし、そのビット番号を A レジス
タにセットします。
ノーオペレーション。
NOP
EI
imm
DI
割り込みフラグの設定をします。
IFF ← imm
マスカブル割り込みを禁止します。
IFF ← 7
ステータスレジスタを PUSH します。
PUSH
SR
POP
SR
ステータスレジスタを POP します。
SWI
imm
ソフトウエア割り込み。
CPU を停止します。
HALT
LDC
CTRL − REG, reg
レジスタの内容を、CPU のコントロールレジスタへコピーします。
LDC
reg, CTRL − REG
CPU のコントロールレジスタの内容を、レジスタへコピーします。
LINK
reg, dd
スタックフレームを生成します。
PUSH reg
LD
reg, XSP
ADD XSP, dd
UNLK
reg
スタックフレームを削除します。
LD
XSP, reg
POP reg
LDF
imm
レジスタバンクを指定します。
RFP ← imm
INCF
新しいレジスタバンクへ移ります。
RFP ← RFP + 1
DECF
以前のレジスタバンクへ戻ります。
RFP ← RFP − 1
SCC
cc, dst
コンディションコードによる dst のセットを行います。
if cc
then dst ← 1
else dst ← 0.
Page 22
TLCS-900H1 CPU
RLC
RRC
RL
RR
num, dst
num, dst
num, dst
num, dst
ローテート命令。
CY
MSB
LSB
CY
MSB
LSB
CY
MSB
LSB
CY
MSB
LSB
ローテート命令。
ローテート命令。
ローテート命令。
SLA
num, dst
シフト命令。
SRA
num, dst
シフト命令。
CY
MSB
CY
SLL
num, dst
シフト命令。
SRL
num, dst
シフト命令。
RLD
dst
MSB
CY
CY
LSB
LSB
MSB
0
LSB
MSB
LSB
43
0
7
43
0
dst
0
7
43
0
dst
Areg
dst
ローテートデジット命令。
7
CY
MSB
43
LSB
Areg
JR
cc, PC + d
相対ジャンプ命令 (8 ビットディスプレースメント )。
if cc then PC ← PC + d.
JRL
cc, PC + dd
相対ロングジャンプ命令 (16 ビットディスプレースメント )。
if cc then PC ← PC + dd.
JP
cc, dst
ジャンプ命令。
if cc then PC ← dst.
CALR
RC + dd
相対コール命令 (16 ビットディスプレースメント )。
PUSH PC: PC ← PC + dd.
CALL
cc, dst
コール命令。
if cc then PUSH PC: PC ← dst.
DJNZ
dst, PC + d
デクリメント & 相対ジャンプ命令。
dst ← dst − 1
if dst ≠ 0 then PC ← PC + d.
RET
cc
リターン命令。
if cc then POP PC.
RETD
dd
リターン & 引き数領域の削除命令。
RET
XSP ← XSP + dd
RETI
0
ローテートデジット命令。
7
RRD
0
割り込み用リターン命令。
POP SR&PC
Page 23
TLCS-900H1 CPU
表 5.1.2 命令一覧
BWL LD
reg, reg
BWL LD
reg, imm
BWL LD
reg, mem
BWL LD
BW-
LD
BW-
LD
(nn), mem
BW-
LD
mem, (nn)
BWL INC
---
NOP
mem, reg
---
EI
mem, imm
---
DI
DEC
BW-
imm3, reg
imm3, mem.B/W
MUL
reg, reg
-W-
PUSH
SR
MULS
reg, imm
-W-
POP
SR
DIV
reg, mem
---
SWI
[imm3]
---
HALT
DIVS
BWL PUSH
reg/F
BW-
PUSH
imm
BW-
PUSH
mem
-W-
[imm3]
MULA
reg
BWL LDC
CTRL − R, reg
BWL LDC
reg, CTRL − R
-W-
MINC1
imm, reg
--L
LINK
reg, dd
BWL POP
reg/F
-W-
MINC2
imm, reg
--L
UNLK
reg
BW-
mem
-W-
MINC4
imm, reg
---
LDF
imm2
-W-
MDEC1
imm, reg
---
INCF
POP
-WL
LDA
reg, mem
-WL
LDAR
reg, PC + dd
-W-
MDEC2
imm, reg
---
-W-
MDEC4
imm, reg
BW-
DECF
BW-
NEG
reg
BWL RLC
BW-
CPL
reg
RRC
A, reg
-WL
EXTZ
reg
RL
mem. B/W
-WL
EXTS
reg
RR
SCC
B--
EX
F, F’
BW-
EX
reg, reg
B--
DAA
reg
SLA
BW-
EX
mem, reg
-WL
PAA
reg
SRA
cc, reg
imm, reg
SLL
SRL
-W-
MIRR
reg
BW-
LDCF
imm, reg
STCF
A, reg
B--
RLD
[A,] mem
ANDCF
imm, mem.B
B--
RRD
[A,] mem
ORCF
A, mem.B
[cc,] PC + d
BW-
LDI
BW-
LDIR
---
JR
BW-
LDD
---
RCF
---
JRL
[cc,] PC + dd
BW-
LDDR
---
SCF
---
JP
[cc,] mem
BW-
XORCF
---
CCF
---
CALR
PC + dd
---
ZCF
---
CALL
[cc,] mem
BW-
DJNZ
[reg], PC + d
CPI
BW-
CPIR
BW-
CPD
BW-
CPDR
BWL ADD
BW-
BIT
imm, reg
RES
imm, mem.B
SET
---
RET
[cc]
CHG
---
RETD
dd
TSET
---
RETI
reg, reg
ADC
reg, imm
SUB
reg, mem
SBC
mem, reg
CP
mem, imm.B/W
-W-
BS1F
A, reg
BS1B
AND
OR
XOR
B = バイト (8 ビット ), W = ワード (16 ビット ), L = ロングワード (32 ビット )
[ ]: 省略可能を示します。
Page 24
TLCS-900H1 CPU
6. データ構成
TLCS-900/H1 は、1/4/8/16/32 ビットの各種サイズのデータを扱うことができます。
(1) レジスタのデータフォーマット
<
1
>
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
8
7
6
5
4
3
2
1
0
BCD
MSB
LSB MSB
LSB MSB
MSB
LSB MSB
LSB MSB
LSB
LSB
MSB
LSB
注 ) 斜線部分のアクセスは、斜線なしの部分のアクセスに比べて、命令コード長が 1 バイト長くな
ります。
(2) メモリのデータフォーマット
<
1
n
7
n
MSB
6
n
n+1
>
5
4
3
2
1
0
LSB
LSB
MSB
LSB
n
n+1
n+2
n+3
MSB
注 ) メモリ上でワードデータ / ロングワードデータを扱う場合、ワードアライメントの制限はありま
せん。偶数番地または奇数番地のどちらからでも配置できます。
(3) ダイナミックバスサイジング
TLCS-900/H1 では、8 ビットデータバスと 16 ビットデータバス、32 ビットデータバスを、ダイナ
ミック ( 各バスサイクルごと ) に切り替えることができます。これを、ダイナミックバスサイジング
と呼びます。
この機能により、TLCS-900/H1 では、外部に 8 ビットデータバス幅のメモリと 16 ビットデータバ
ス幅、32 ビットデータバス幅のメモリを、混在して拡張することが可能です。
メモリコントローラを内蔵した製品では、それにより各アドレス領域ごとに外部データバス幅の制
御を行うことが可能です。
注 ) バス幅が異なるメモリを連続したアドレスに配置した場合、両方のメモリにまたがるアクセス
を 1 命令で実行しないでください。データの正常な読み出し / 書き込みが行われない場合があり
ます。
Page 25
TLCS-900H1 CPU
データサイズ
( ビット )
スタート
アドレス
メモリ側データ幅
( ビット )
CPU
アドレス
D31~D24
D23~D16
D15~D8
D7~D0
8
4n + 0
8/16/32
4n + 0
xxxxx
xxxxx
xxxxx
b7~b0
4n + 1
8
4n + 1
xxxxx
xxxxx
xxxxx
b7~b0
16/32
4n + 1
xxxxx
xxxxx
b7~b0
xxxxx
8/16
4n + 2
xxxxx
xxxxx
xxxxx
b7~b0
32
4n + 2
xxxxx
b7~b0
xxxxx
xxxxx
8
4n + 3
xxxxx
xxxxx
xxxxx
b7~b0
16
4n + 3
xxxxx
xxxxx
b7~b0
xxxxx
32
4n + 3
b7~b0
xxxxx
xxxxx
xxxxx
8
(1) 4n + 0
(2) 4n + 1
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
b7~b0
b15~b8
4n + 2
4n + 3
16
4n + 0
4n + 1
4n + 2
4n + 3
32
4n + 0
4n + 1
4n + 2
4n + 3
xxxxx:
CPU データ
16/32
4n + 0
xxxxx
xxxxx
b15~b8
b7~b0
8
(1) 4n + 1
(2) 4n + 2
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
b7~b0
b15~b8
16
(1) 4n + 1
(2) 4n + 2
xxxxx
xxxxx
xxxxx
xxxxx
b7~b0
xxxxx
xxxxx
b15~b8
32
4n + 1
xxxxx
b15~b8
b7~b0
xxxxx
8
(1) 4n + 2
(2) 4n + 1
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
b7~b0
b15~b8
16
4n + 2
xxxxx
xxxxx
b15~b8
b7~b0
32
4n + 2
b15~b8
b7~b0
xxxxx
xxxxx
8
(1) 4n + 3
(2) 4n + 4
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
b7~b0
b15~b8
16
(1) 4n + 3
(2) 4n + 4
xxxxx
xxxxx
xxxxx
xxxxx
b7~b0
xxxxx
xxxxx
b15~b8
32
(1) 4n + 3
(2) 4n + 4
b7~b0
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
b15~b8
8
(1) 4n + 0
(2) 4n + 1
(3) 4n + 2
(4) 4n + 3
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
b7~b0
b15~b8
b23~b16
b31~b24
16
(1) 4n + 0
(2) 4n + 2
xxxxx
xxxxx
xxxxx
xxxxx
b15~b8
b31~b24
b7~b0
b23~b16
32
4n + 0
b31~b24
b23~b16
b15~b8
b7~b0
8
(1) 4n + 1
(2) 4n + 2
(3) 4n + 3
(4) 4n + 4
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
b7~b0
b15~b8
b23~b16
b31~b24
16
(1) 4n + 1
(2) 4n + 2
(3) 4n + 4
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
b7~b0
b23~b16
xxxxx
xxxxx
b15~b8
b31~b24
32
(1) 4n + 1
(2) 4n + 4
b23~b16
xxxxx
b15~b8
xxxxx
b7~b0
xxxxx
xxxxx
b31~b24
8
(1) 4n + 2
(2) 4n + 3
(3) 4n + 4
(4) 4n + 5
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
b7~b0
b15~b8
b23~b16
b31~b24
16
(1) 4n + 2
(2) 4n + 4
xxxxx
xxxxx
xxxxx
xxxxx
b15~b8
b31~b24
b7~b0
b23~b16
32
(1) 4n + 2
(2) 4n + 4
b15~b8
xxxxx
b7~b0
xxxxx
xxxxx
b31~b24
xxxxx
b23~b16
8
(1) 4n + 3
(2) 4n + 4
(3) 4n + 5
(4) 4n + 6
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
b7~b0
b15~b8
b23~b16
b31~b24
16
(1) 4n + 3
(2) 4n + 4
(3) 4n + 6
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
xxxxx
b7~b0
b23~b16
xxxxx
xxxxx
b15~b8
b31~b24
32
(1) 4n + 3
(2) 4n + 4
b7~b0
xxxxx
xxxxx
b31~b24
xxxxx
b23~b16
xxxxx
b15~b8
リード時はそのバスの入力データが無視されることを示します。
ライト時は、そのバスがハイインピーダンスで、そのバスのライトストローブ信号は、ノンアクティブのままであるこ
とを示します。
Page 26
TLCS-900H1 CPU
(4) 内部データバスの構成
TLCS-900/H1 では、CPU と内蔵メモリ ( 内蔵 RAM または内蔵 ROM) は 32 ビット幅のデータバス
で接続されています。内蔵 RAM は、常に 1 クロック (50 ns @ 20 MHz) でアクセスされます。内蔵
ROM は、インタリーブ方式でアクセスされるので、最初のバスサイクルは 2 クロックで、引き続き
次の番地をアクセスするときは 1 クロックでアクセスされます。
一方、CPU と内蔵 I/O は、例外的なものを除いて、8/16 ビット幅のデータバスで接続されていま
す。これは、内蔵 I/O のアクセススピードがほとんどシステム全体の動作スピードに影響を与えない
からです。システム全体の動作スピードは、プログラムメモリのアクセススピードに大きく依存しま
す。
なお、内蔵 I/O は、高速アクセス型と低速アクセス型があります。高速アクセス型の内蔵 I/O は、
「TLCS-900/H1 型」と呼ばれ、常に 2 クロック (100 ns @ 20 MHz) でアクセスされます。
一方、低速アクセス型の内蔵 I/O は、「TLCS-900/L1 型」と呼ばれ、システムクロック (50 ns @ 20
MHz) を 4 分周した信号 ( 周期 200 ns @ 20 MHz) に同期してアクセスされます。最小 5 クロック (250
ns @ 20 MHz)、最大6クロック (300 ns @ 20 MHz) でアクセスされます。
Page 27
TLCS-900H1 CPU
7. 基本タイミング
TLCS-900/H1 は、下に示す図 7.1.1 のようなクロックシステムになっています。カッコ内の数値は、
20MHz で動作させた場合の各クロックの周波数を示しています。
図 7.1.2~ 図 7.1.3 に、外部メモリに対する基本バスタイミングを示します。詳細は、各派生品の機能を
説明している文章の「メモリコントローラ」を参照してください。
X1
(10 MHz)
(10 MHz)
(40 MHz)
4
X2
WRxx, RAS, DRAM
2
2
(20 MHz)
CLK
1
=1
(50 ns)
(CPU, 900/H1 I/O )
(10 MHz)
(900/L1 I/O
)
図 7.1.1 クロックシステム
注 ) 図は TLCS-900/H1 の一例です。詳しくは各製品個別編にてご確認ください。
Page 28
TLCS-900H1 CPU
100 ns (@CLK = 20 MHz)
X1
CLK
A0~A23
CSn
RD
D0~D31
WRxx
D0~D31
WAIT
図 7.1.2 外部リード / ライトサイクル (0 ウェイト )
150 ns (@CLK = 20 MHz)
X1
CLK
A0~A23
CSn
RD
D0~D31
WRxx
D0~D31
WAIT
図 7.1.3 外部リード / ライトサイクル (1 ウェイト )
Page 29
TLCS-900H1 CPU
Page 30
TLCS-900H1 CPU
付録 A. 命令の詳細
■
命令リスト
(1) 転送
LD
PUSH
(2) 交換
EX
MIRR
POP
LDA
LDAR
(3) ブロック転送 / ブロックサーチ
LDI
LDIR
LDD
LDDR
CPI
CPIR
CPD
CPDR
(4) 算術演算
ADD
ADC
SUB
SBC
CP
INC
DEC
NEG
PAA
MUL
MULS
DIV
DIVS
CCF
EXTZ
EXTS
DAA
MULA
MINC
MDEC
(5) 論理演算
AND
OR
XOR
(6) ビット操作
LDCF
STCF
ANDCF ORCF
XORCF RCF
SCF
RES
CHG
BS1
ZCF
BIT
CPL
SET
TSET
(7) 特別演算 , CPU 制御
NOP
EI
DI
PUSH _ SR
POP _ SR
SWI
HALT
LDC
LINK
UNLK
LDF
INCF
DECF
SCC
RR
SLA
SRA
SLL
SRL
CALR
DJNZ
RET
RETD
(8) ローテート , シフト
RLC
RRC
RL
RLD
RRD
(9) ジャンプ , コール , リターン
JP
JR
JRL
CALL
RETI
Page 31
TLCS-900H1 CPU
■
本文中の記号の説明
本文中で使われている各記号の意味は、下記のとおりです。
dst
ディストネーション。データの転送先または演算結果の格納先を示します。
src
ソース。データの転送元または演算データの読み出し元を示します。
num
condition
R
r
ナンバー。数値であることを示します。
コンディション。フラグによる条件記号を示します。
8/16/32 ビットのカレントバンクレジスタを含む 8 本の汎用レジスタ
8 ビットの場合 : W, A, B, C, D, E, H, L の 8 本のみ
16 ビットの場合 : WA, BC, DE, HL, IX, IY, IZ, SP の 8 本のみ
32 ビットの場合 : XWA, XBC, XDE, XHL, XIX, XIY, XIZ, XSP の 8 本のみ
8/16/32 ビットの汎用レジスタ (4, 5 ページ後の「レジスタマップ」で示されたすべてのレジスタ )
r16
16 ビットの汎用レジスタ (4, 5 ページ後の「レジスタマップ」で示されたすべての 16 ビットレジスタ )
r32
32 ビットの汎用レジスタ (4, 5 ページ後の「レジスタマップ」で示されたすべての 32 ビットレジスタ )
cr
8/16/32 ビットの CPU の全コントロールレジスタ
DMAS0~DMAS7, DMAD0~DMAD7, DMAC0~DMAC7, DMAM0~DMAM7, INTNEST
A
A レジスタ (8 ビット )
F
フラグレジスタ (8 ビット )
F’
裏フラグレジスタ (8 ビット )
SR
ステータスレジスタ (16 ビット )
PC
プログラムカウンタ (32 ビット )
(mem)
8/16/32 ビットのメモリ内のデータ
mem
実効アドレス値
<W>
オペランドサイズがワードのとき “W” の記述が必要であることを示します。
[]
カッコ内のオペランドの記述が、省略できることを示します。
#
8/16/32 ビットの即値データ
#3
3 ビットの即値データ ; 0~7 or 1~8 ........... 短縮コード用
#4
4 ビットの即値データ ; 0~15 or 1~16
d8
8 ビットのディスプレースメント ; −80H~+7FH
d16
cc
CY
Z
(#8)
(#16)
16 ビットのディスプレースメント ; −8000H~+7FFFH
コンディションコード
キャリーフラグ
ゼロフラグ
ダイレクトアドレッシング ; (00H)~(0FFH) ........... 256 バイト空間
64 K バイトエリアアドレッシング ; (0000H)~(0FFFFH)
(−r32)
プリデクリメントアドレッシング
(r32+)
ポストインクリメントアドレッシング
$
その命令が置かれている先頭アドレス
Page 32
TLCS-900H1 CPU
■
オブジェクトコード中の記号の説明
オブジェクトコードの中で使われている各記号の意味は、下記のとおりです。
z
zz
zzz
z
オペランドサイズ指定コード
バイト
0
ワード
1
ロング
−
zz
00
01
10
zzz
010
011
100
s
−
0
1
コード
000
バイト
W
s
R
レジスタ指定コード
r
ワード
WA
ロング
XWA
001
A
BC
XBC
010
B
DE
XDE
011
C
HL
XHL
100
D
IX
XIX
101
E
IY
XIY
110
H
IZ
XIZ
111
L
SP
XSP
補足 : r で示されるレジスタは、上記以外に拡張コードを使うと、すべてのレジスタを指定することが
できます。
なお、この場合、実行ステート数は +1 増加します。下記に、そのフォーマットを示します。
0
1OP
1
1
1
r
4
1OP
8
"0111"
2OP
2OP
なお、“r” のコード値は、
ワードレジスタとしてアクセスするときは 2 の倍数
ロングレジスタとしてアクセスするときは 4 の倍数
の値に限られます。
8 ビットで指示されるレジスタは、後述の “ レジスタマップ ” を参照してください。
Page 33
TLCS-900H1 CPU
m
メモリアドレッシングモード指定コード
(XWA)
=
-0--0000
(XBC)
=
-0--0001
(XDE)
=
-0--0010
(XHL)
=
-0--0011
(XIX)
=
-0--0100
(XIY)
=
-0--0101
<7:0> = データのビット範囲を示す。
この例はビット 0 からビット 7
までの 8 ビット長のデータを
意味する。
(XIZ)
=
-0--0110
(XSP)
=
-0--0111
(XWA + d8)
=
-0--1000
d<7:0>
(XBC + d8)
=
-0--1001
d<7:0>
(XDE + d8)
=
-0--1010
d<7:0>
(XHL + d8)
=
-0--1011
d<7:0>
(XIX + d8)
=
-0--1100
d<7:0>
(XIY + d8)
=
-0--1101
d<7:0>
(XIZ + d8)
=
-0--1110
d<7:0>
(XSP + d8)
=
-0--1111
d<7:0>
(#8)
=
-1--0000
#<7:0>
(#16)
=
-1--0001
#<7:0>
(#24)
=
-1--0010
#<7:0>
(r32)
=
-1--0011
r32’
00
(r32 + d16)
=
-1--0011
r32’
01
#<15:8>
#<15:8>
#<23:16>
d<7:0>
d<15:8>
(r32 + r8)
=
-1--0011
000000
11
r32
r8
(r32 + r16)
=
-1--0011
000001
11
r32
r16
(−r32)
=
-1--0100
r32’
zz
(r32+)
=
-1--0101
r32’
zz
r32:
32 ビット幅レジスタ
r16
符号付き 16 ビット幅レジスタ
r8:
符号付き 8 ビット幅レジスタ
zz = インクリメント / デクリメントの数
の指定コード
00: ±1
01: ±2
10: ±4
11: ( 未定義 )
r32’ = レジスタコードの上位 6 ビット
Page 34
TLCS-900H1 CPU
cc
コンディションコード
コード
0000
1000
0110
1110
0111
1111
1101
0101
1110
0110
0100
1100
0100
1100
1001
0001
1010
0010
1111
0111
1011
0011
記号
意味
F always False
( なし ) always True
Z Zero
NZ Not Zero
C Carry
NC Not Carry
PL or P PLus
MI or M MInus
NE Not Equal
EQ EQual
OV OVerflow
NOV No OVerflow
PE Parity is Even
PO Parity is Odd
GE Greater than or Equal (signed)
LT Less Than (signed)
GT Greater Than (signed)
LE Less than or Equal (signed)
UGE Unsigned Greater than or Equal
ULT Unsigned Less Than
UGT Unsigned Greater Than
ULE Unsigned Less than or Equal
Page 35
条件式
−
−
Z=1
Z=0
C=1
C=0
S=0
S=1
Z=0
Z=1
P/V = 1
P/V = 0
P/V = 1
P/V = 0
(S xor P/V) = 0
(S xor P/V) = 1
[Z or (S xor P/V)] = 0
[Z or (S xor P/V)] = 1
C=0
C=1
(C or Z) = 0
(C or Z) = 1
TLCS-900H1 CPU
■
レジスタマップ “r”
00H
+3
QW0 ( QWA 0)
+2
QA0 < XWA 0>
+1
RW0
( RWA 0)
+0
RA0
04H
QB0
( QBC 0)
QC0
< XBC 0>
RB0
( RBC 0)
RC0
08H
QD0
( QDE 0)
QE0
< XDE 0>
RD0
( RDE 0)
RE0
0CH
QH0
( QHL 0)
QL0
< XHL 0>
RH0
( RHL 0)
RL0
10H
QW1
( QWA 1)
QA1
< XWA 1>
RW1
( RWA 1)
RA1
14H
QB1
( QBC 1)
QC1
< XBC 1>
RB1
( RBC 1)
RC1
18H
QD1
( QDE 1)
QE1
< XDE 1>
RD1
( RDE 1)
RE1
1CH
QH1
( QHL 1)
QL1
< XHL 1>
RH1
( RHL 1)
RL1
20H
QW2
( QWA 2)
QA2
< XWA 2>
RW2
( RWA 2)
RA2
24H
QB2
( QBC 2)
QC2
< XBC 2>
RB2
( RBC 2)
RC2
28H
QD2
( QDE 2)
QE2
< XDE 2>
RD2
( RDE 2)
RE2
2CH
QH2
( QHL 2)
QL2
< XHL 2>
RH2
( RHL 2)
RL2
30H
QW3
( QWA 3)
QA3
< XWA 3>
RW3
( RWA 3)
RA3
34H
QB3
( QBC 3)
QC3
< XBC 3>
RB3
( RBC 3)
RC3
38H
QD3
( QDE 3)
QE3
< XDE 3>
RD3
( RDE 3)
RE3
3CH
QH3
( QHL 3)
QL3
< XHL 3>
RH3
( RHL 3)
RL3
D0H
QW’
( Q WA’)
QA’
< X WA’>
W’
( W A’)
A’
D4H
QB’
( Q BC’)
QC’
< X BC’>
B’
( B C’)
C’
D8H
QD’
( Q DE’)
QE’
< X DE’>
D’
( D E’)
E’
DCH
QH’
( Q HL’)
QL’
< X HL’>
H’
( H L’)
L’
E0H
QW
( Q WA)
QA
< X WA>
W
( W A)
A
E4H
QB
( Q BC)
QC
< X BC>
B
( B C)
C
E8H
QD
( Q DE)
QE
< X DE>
D
( D E)
E
ECH
QH
( Q HL)
QL
< X HL>
H
( H L)
L
F0H
QIXH
( Q IX)
QIXL
< X IX>
IXH
( I X)
IXL
F4H
QIYH
( Q IY)
QIYL
< X IY>
IYH
( I Y)
IYL
F8H
QIZH
( Q IZ)
QIZL
< X IZ>
IZH
( I Z)
IZL
FCH
QSPH
( Q SP)
QSPL
< X SP>
SPH
( S P)
SPL
( ): ワードレジスタ (16 ビット ) 名
< >: ロングワードレジスタ (32 ビット ) 名
Page 36
バンク 0
バンク 2
バンク 3
バンク 4
プレビアス
バンク
カレント
バンク
TLCS-900H1 CPU
■
コントロールレジスタマップ “cr”
+3
+2
+1
00H
<DMA S0>
04H
<DMA S1>
08H
<DMA S2>
0CH
<DMA S3>
10H
<DMA S4>
14H
<DMA S5>
18H
<DMA S6>
1CH
<DMA S7>
20H
<DMA D0>
24H
<DMA D1>
28H
<DMA D2>
2CH
<DMA D3>
30H
<DMA D4>
34H
<DMA D5>
38H
<DMA D6>
3CH
<DMA D7>
+0
DMA
ソース
レジスタ
DMA
デスティネーション
レジスタ
40H
DMAM0
(DMA C0)
44H
DMAM1
(DMA C1)
48H
DMAM2
(DMA C2)
4CH
DMAM3
(DMA C3)
50H
DMAM4
(DMA C4)
54H
DMAM5
(DMA C5)
58H
DMAM6
(DMA C6)
5CH
DMAM7
(DMA C7)
7CH
(INT NEST)
DMA
モード / カウンタ
レジスタ
割り込みネスティング
カウンタ
( ): ワードレジスタ (16 ビット ) 名
< >: ロングワードレジスタ (32 ビット ) 名
注 ) このコントロールマップは、TLCS-900/H1 特有のものです。従来の TLCS-900/L, TLCS-900/H
とは異なりますので、注意してください。
Page 37
TLCS-900H1 CPU
ADC dst, src
< Add with carry キャリー付き加算 >
動 作 :
dst ← dst + src + CY.
説 明 :
dst の内容と src の内容とキャリーフラグ CY の内容が加算され、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
ニモニック
○
ADC
ADC
コード
R, r
r, #
1
1
z
z
1
r
1
0
0
1
0
R
1
1
z
z
1
r
1
1
0
0
1
0
0
1
m
m
m
#<7:0>
#<15:8>
#<23:16>
#<31:24>
○
○
○
○
○
○
○
○
×
ADC
ADC
ADC<W>
R, (mem)
(mem), R
(mem), #
1
m
z
z
m
1
0
0
1
0
1
m
z
z
m
1
0
0
1
1
1
m
0
z
m
m
m
m
0
0
1
1
1
0
0
1
#<7:0>
#<15:8>
Page 38
R
m
m
m
R
TLCS-900H1 CPU
フラグ :
S
Z
H
V
N
C
実行例 :
S
Z
H
V
N
C
*
*
*
*
0
*
= 演算結果の最上位ビットの値がセットされます。
= 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
= 演算結果、ビット 3 からビット 4 へキャリーが発生したときは “1”、それ以外のときは
“0” がセットされます。ただし、オペランド長が 32 ビットの場合は、不定値がセットさ
れます。
= 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされます。
= “0” にクリアされます。
= 演算結果、最上位ビットからキャリーが発生したときは “1”、それ以外のときは “0” が
セットされます。
HL レジスタが 2000H, IX レジスタが 3456H, キャリーフラグ CY が 1 のとき、
ADC HL, IX
を実行すると、HL レジスタは 5457H になります。
2000
HL
3456
IX
1
5457
Page 39
HL
TLCS-900H1 CPU
ADD dst, src
< Add 加算 >
動 作 :
dst ← dst + src.
説 明 :
dst の内容と src の内容が加算され、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
ニモニック
○
ADD
ADD
コード
R, r
r, #
1
1
z
z
1
r
1
0
0
0
0
R
1
1
z
z
1
r
1
1
0
0
1
0
0
0
m
m
m
#<7:0>
#<15:8>
#<23:16>
#<31:24>
○
○
○
○
○
○
○
○
×
ADD
ADD
ADD<W>
R, (mem)
(mem), R
(mem), #
1
m
z
z
m
1
0
0
0
0
1
m
z
z
m
1
0
0
0
1
1
m
0
z
m
m
m
m
0
0
1
1
1
0
0
0
#<7:0>
#<15:8>
Page 40
R
m
m
m
R
TLCS-900H1 CPU
フラグ :
S
*
S
Z
H
V
N
C
実行例 :
Z
*
H
*
V
*
N
0
C
*
= 演算結果の最上位ビットの値がセットされます。
= 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
= 演算結果、ビット 3 からビット 4 へキャリーが発生したときは “1”、それ以外のときは
“0” がセットされます。ただし、オペランド長が 32 ビットの場合は、不定値がセットさ
れます。
= 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま
す。
= “0” にクリアされます。
= 演算結果、最上位ビットからキャリーが発生したときは “1”、それ以外のときは “0” が
セットされます。
HL レジスタが 2000H, IX レジスタが 3456H のとき、
ADD HL, IX
を実行すると、HL レジスタは 5456H になります。
2000
HL
3456
IX
5456
HL
Page 41
TLCS-900H1 CPU
AND dst, src
< And 論理積 >
動 作 :
dst ← dst AND src.
説 明 :
dst の内容と src の内容が論理積演算され、dst へ転送されます。
( 真理値表 )
A
B
A and B
0
0
0
0
1
0
1
0
0
1
1
1
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
ニモニック
○
AND
AND
コード
R, r
r, #
1
1
z
z
1
r
1
1
0
0
0
R
1
1
z
z
1
r
1
1
0
0
1
1
0
0
m
m
m
#<7:0>
#<15:8>
#<23:16>
#<31:24>
○
○
○
○
○
○
○
○
×
AND
AND
AND<W>
R, (mem)
(mem), R
(mem), #
1
m
z
z
m
1
1
0
0
0
1
m
z
z
m
1
1
0
0
1
1
m
0
z
m
m
m
m
0
0
1
1
1
1
0
0
#<7:0>
#<15:8>
Page 42
R
m
m
m
R
TLCS-900H1 CPU
フラグ :
S
*
S
Z
H
V
N
C
実行例 :
Z
*
H
1
V
*
N
0
C
0
=
=
=
=
演算結果の最上位ビットの値がセットされます。
演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
“1” にセットされます。
演算結果のパリティ (“1” の数 ) が偶数のときは “1”、奇数のときは “0” がセットされま
す。ただし、オペランド長が 32 ビットの場合は、不定値がセットされます。
= “0” にクリアされます。
= “0” にクリアされます。
HL レジスタが 7350H, IX レジスタが 3456H のとき、
AND HL, IX
を実行すると、HL レジスタは 3050H になります。
AND)
0111 0011 0101 0000 ← HL レジスタ( 実行前 )
0011 0100 0101 0110 ← IX レジスタ( 実行前 )
0011 0000 0101 0000 ← HL レジスタ( 実行後 )
Page 43
TLCS-900H1 CPU
ANDCF num, src
< And carry flag キャリーフラグとの 1 ビット論理積 >
動 作 :
CY ← CY AND src<num>.
説 明 :
キャリーフラグ CY の内容と src のビット num の内容が論理積演算され、キャリーフラグ CY へ
転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
○
○
×
○
補 足 :
×
ニモニック
×
×
×
ANDCF
コード
#4, r
ANDCF
A, r
ANDCF
#3, (mem)
ANDCF
A, (mem)
1
1
0
z
1
r
0
0
1
0
0
0
0
0
0
1
1
0
z
1
0
0
1
0
1
0
0
0
1
m
1
1
m
m
m
m
1
0
0
0
0
1
m
1
1
m
m
m
m
0
0
1
0
1
0
0
0
0
0
#
4
0
r
#3
ビット num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がビット num とし
て使われます。オペランドがバイトのとき、ビット num の下位 4 ビットの値が 8~15 の場合、演
算結果は不定になります。
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
*
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
キャリーフラグ CY の内容と src のビット num の内容の論理積演算された値がセットされ
ます。
Page 44
TLCS-900H1 CPU
実行例 :
100 番地のメモリの内容が 01000000B (2 進数 ) で、キャリーフラグ CY が 1 のとき、
ANDCF 6, (100H)
を実行すると、キャリーフラグは 1 になります。
7
6
5
4
3
2
1
0
0
1
0
0
0
0
0
0
AND
100
1
(
)
1
(
)
Page 45
TLCS-900H1 CPU
BIT num, src
< Bit test 1 ビットのテスト >
動 作 :
Z フラグ ← src<num> の反転値
説 明 :
src のビット num の反転値が、Z フラグへ 転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
×
フラグ :
S
×
S
Z
H
V
N
C
実行例 :
ニモニック
×
Z
*
=
=
=
=
=
=
BIT
H
1
#4, r
BIT
V
×
N
0
コード
#3, (mem)
C
–
不定値がセットされます。
src<num> の反転値がセットされます。
“1” にセットされます。
不定値がセットされます。
“0” にリセットされます。
変化なし。
100 番地のメモリの内容が 00100000B (2 進数 ) のとき、
BIT 5, (100H)
を実行すると、Z フラグは 0 になります。
7
6
5
4
3
2
1
0
0
0
1
0
0
0
0
0
0
Z
Page 46
100
1
1
0
z
1
0
0
1
1
0
0
0
0
0
1
m
1
1
m
1
1
0
0
1
r
0
1
#
4
m
m
#3
1
m
TLCS-900H1 CPU
BS1B dst, src
< Bit search 1 backward ビットパターン中の最初の 1 を後方向からサーチ >
動 作 :
dst ← src を後方向サーチした結果
説 明 :
src のビットパターン中の最初の 1 が後方向から (MSB から LSB へ ) サーチされ、その 1 の位置
のビットナンバーが、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
×
○
×
補 足 :
ニモニック
BS1B
A, r
1
1
0
1
1
0
0
0
0
1
r
1
1
1
オペランド中の dst は A レジスタ、src はワード長のレジスタに限られます。なお、サーチした
ビットパターン中に 1 がなかった場合、A レジスタの値は不定になり、V フラグが “1” にセッ
トされます。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
S
Z
H
V
N
C
–
–
–
*
–
–
=
=
=
=
変化なし。
変化なし。
変化なし。
src の内容がオールゼロの場合 ( ビットパターン中に 1 がない場合 ) は “1”、それ以外の
ときは “0” がセットされます。
= 変化なし。
= 変化なし。
IX レジスタが 1200H のとき、
BS1B A, IX
を実行すると、A レジスタは 0CH になります。
15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
Page 47
IX
TLCS-900H1 CPU
BS1F dst, src
< Bit search 1 forward ビットパターン中の最初の 1 を前方向からサーチ >
動 作 :
dst ← src を前方向サーチした結果
説 明 :
src のビットパターン中の最初の 1 が前方向から (LSB から MSB へ ) サーチされ、その 1 の位置
のビットナンバーが、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
×
○
×
補 足 :
ニモニック
BS1F
A, r
1
1
0
1
1
0
0
0
0
1
r
1
1
0
オペランド中の dst は A レジスタ、src はワード長のレジスタに限られます。なお、サーチした
ビットパターン中に 1 がなかった場合、A レジスタの値は不定になり、V フラグが “1” にセッ
トされます。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
S
Z
H
V
N
C
–
–
–
*
–
–
=
=
=
=
変化なし。
変化なし。
変化なし。
src の内容がオールゼロの場合 ( ビットパターン中に 1 がない場合 ) は “1”、それ以外の
ときは “0” がセットされます。
= 変化なし。
= 変化なし。
IX レジスタが 1200H のとき、
BS1F A, IX
を実行すると、A レジスタは 09H になります。
15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
Page 48
IX
TLCS-900H1 CPU
CALL condition, dst
< Call サブルーチンコール >
動 作 :
if cc が真 then XSP ← XSP − 4, (XSP) ← 32 ビット PC, PC ← dst.
説 明 :
オペランドのコンディションが真の場合、スタック領域へプログラムカウンタ PC の内容が退避
され、dst で示されたプログラム番地へジャンプします。
詳 細 :
ニモニック
CALL
コード
#16
0
0
0
1
1
1
0
0
1
0
1
m
m
m
c
c
#<7:0>
#<15:8>
CALL
#24
0
0
0
1
1
#<7:0>
#<15:8>
#<23:16>
CALL
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
[cc, ] mem
S
Z
H
V
N
C
–
–
–
–
–
–
1
m
1
1
1
1
1
0
m
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
スタックポインタ XSP が 100H のとき、8000H 番地のメモリにある命令、
CALL 9000H
を実行すると、メモリの 0FCH 番地にリターンアドレス 8003H ( ロングデータ ) がライトされ、
スタックポインタ XSP は 0FCH になり、9000H 番地へジャンプします。
注 ) 当 CPU は、命令を先読みする仕様であるため対象命令直後の非分岐先プログラムをリードしま
すが、その内容は読み捨てられます。
Page 49
TLCS-900H1 CPU
CALR dst
< Call relative 相対サブルーチンコール >
動 作 :
XSP ← XSP − 4, (XSP) ← 32 ビット PC, PC ← dst.
説 明 :
スタック領域へプログラムカウンタ PC の内容が退避され、dst で示されたプログラム番地へ相対
ジャンプします。
詳 細 :
ニモニック
コード
$ + 3 + d16
CALR
0
0
0
1
1
1
1
0
d<7:0>
d<15:8>
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
注 ) 当 CPU は、命令を先読みする仕様であるため対象命令直後の非分岐先プログラムをリードしま
すが、その内容は読み捨てられます。
Page 50
TLCS-900H1 CPU
CCF
< Complement carry flag キャリーフラグの反転 >
動 作 :
CY ← CY の反転値
説 明 :
キャリーフラグ CY の内容が、反転されます。
詳 細 :
ニモニック
コード
CCF
0
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
×
–
0
*
0
変化なし。
変化なし。
不定値がセットされます。
変化なし。
“0” にリセットされます。
自分自身の反転値がセットされます。
キャリーフラグ CY が 0 のとき、
CCF
を実行すると、キャリーフラグ CY は 1 になります。さらに、
CCF
を実行すると、キャリーフラグ CY は 0 になります。
0
(
)
1
(
)
1
(
)
0
(
)
Page 51
0
1
0
0
1
0
TLCS-900H1 CPU
CHG num, dst
< Change 1 ビットの反転 >
動 作 :
dst<num> ← dst<num> の反転値
説 明 :
dst のビット num の値が反転されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
×
ニモニック
CHG
×
#4, r
CHG
#3, (mem)
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
コード
S
Z
H
V
N
C
–
–
–
–
–
–
1
1
0
z
1
0
0
1
1
0
0
0
0
0
1
m
1
1
m
1
1
0
0
0
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
100 番地のメモリの内容が 00100111B (2 進数 ) のとき、
CHG 5, (100H)
を実行すると、100 番地のメモリの内容は 00000111B (2 進数 ) になります。
7
6
5
4
3
2
1
0
0
0
1
0
0
1
1
1
100
(
)
0
0
0
0
0
1
1
1
100
(
)
Page 52
r
0
1
#
4
m
m
#3
0
m
TLCS-900H1 CPU
CP src1, src2
< Compare 比較 >
動 作 :
src1 − src2.
説 明 :
src1 の内容と src2 の内容が比較され、その結果がフラグレジスタ F に反映されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
○
○
ニモニック
×
○
CP
CP
CP
コード
R, r
r, #3
r, #
1
1
z
z
1
r
1
1
1
1
0
R
1
1
0
z
1
r
1
1
0
1
1
#3
1
1
z
z
1
r
1
1
0
0
1
1
1
1
m
m
m
#<7:0>
#<15:8>
#<23:16>
#<31:24>
○
○
○
○
○
○
○
○
×
CP
CP
CP<W>
R, (mem)
(mem), R
(mem), #
1
m
z
z
m
1
1
1
1
0
1
m
z
z
m
1
1
1
1
1
1
m
0
z
m
m
m
m
0
0
1
1
1
1
1
1
#<7:0>
#<15:8>
補 足 :
オペランド中の #3 は、0~7 を示します。
Page 53
R
m
m
m
R
TLCS-900H1 CPU
フラグ :
S
Z
H
V
N
C
実行例 :
S
Z
H
V
N
C
*
*
*
*
1
*
= 演算結果の最上位ビットの値がセットされます。
= 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
= 演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以外のときは “0”
がセットされます。ただし、オペランド長が 32 ビットの場合は、不定値がセットされます。
= 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま
す。
= “1” にセットされます。
= 演算結果、最上位ビットからボローが発生したときは “1”、それ以外のときは “0” がセッ
トされます。
HL レジスタが 1234H, IX レジスタが 1234H のとき、
CP HL, IX
を実行すると、Z フラグと N フラグは “1” にセットされ、S フラグと H フラグ、V フラグ、C
フラグは “0” にクリアされます。
1234
HL
1234
IX
0000
(
Page 54
)
TLCS-900H1 CPU
CPD src1, src2
< Compare decrement 逆方向のブロック部分サーチ >
動 作 :
src1 − src2, BC ← BC − 1.
説 明 :
src1 と src2 の内容が比較されます。その後、BC レジスタの内容が −1 されます。なお、src1 は A
レジスタまたは WA レジスタに限られ、src2 のアドレッシングモードはポストデクリメントのレ
ジスタ間接に限られます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
補 足 :
ニモニック
[A/WA, (R −)]
CPD
1
0
0
z
0
0
0
0
1
0
R
1
1
0
[ ] の内側のオペランドの記述を省略すると、“A, (XHL −)” を指定したことになります。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
S
Z
H
V
N
C
*
*
*
*
1
–
= “src1 − src2” の演算結果の最上位ビットの値がセットされます。
= “src1 − src2” の演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
= “src1 − src2” の演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以
外のときは “0” がセットされます。
= 命令実行後、BC レジスタの値が 0 のときは “0”、それ以外のときは “1” がセットされま
す。
= “1” にセットされます。
= 変化なし。
XIX レジスタが 00123456H, BC レジスタが 0200H のとき、
CPD A, (XIX −)
を実行すると、A レジスタの内容と 123456H 番地の内容が比較され、XIX レジスタは 00123455H,
BC レジスタは 01FFH になります。
Page 55
TLCS-900H1 CPU
CPDR src1, src2
< Compare decrement repeat 逆方向のブロックサーチ >
動 作 :
src1 − src2, BC ← BC − 1, repeat until src1 = src2 or BC = 0.
説 明 :
src1 と src2 の内容が比較されます。その後、BC レジスタの内容が −1 され、src1 = src2 または BC
= 0 でなければ、再び前記動作を繰り返します。なお、src1 は A レジスタまたは WA レジスタに限
られ、src2 のアドレッシングモードはポストデクリメントのレジスタ間接に限られます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
補 足 :
ニモニック
[A/WA, (R −)]
CPDR
1
0
0
z
0
0
0
0
1
0
R
1
1
1
[ ] の内側のオペランドの記述を省略すると、“A, (XHL −)” を指定したことになります。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
S
Z
H
V
N
C
*
*
*
*
1
–
= “src1 − src2” の演算結果の最上位ビットの値がセットされます。
= “src1 − src2” の演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
= “src1 − src2” の演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以
外のときは “0” がセットされます。
= 命令実行後、BC レジスタの値が 0 のときは “0”、それ以外のときは “1” がセットされま
す。
= “1” にセットされます。
= 変化なし。
A レジスタが 55H, XIX レジスタが 00123456H, BC レジスタが 0003H で、
メモリの 123456H 番地の内容が 11H,
メモリの 123455H 番地の内容が 22H
メモリの 123454H 番地の内容が 33H のとき、
CPDR A, (XIX −)
を実行すると、メモリの 123456H 番地 , 123455 番地 , 123454H 番地をリードした後、この命令の
実行が “BC = 0” の条件で終了し、XIX レジスタは 00123453H, BC レジスタは 0000H になります。
Page 56
TLCS-900H1 CPU
CPI src1, src2
< Compare increment 正方向のブロック部分サーチ >
動 作 :
src1 − src2, BC ← BC − 1.
説 明 :
src1 と src2 の内容が比較されます。その後、BC レジスタの内容が −1 されます。なお、src1 は A
レジスタまたは WA レジスタに限られ、src2 のアドレッシングモードはポストインクリメントの
レジスタ間接に限られます。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
○
○
×
コード
[A/WA, (R +) ]
CPI
1
0
0
z
0
0
0
0
1
0
R
1
0
0
補 足 : [ ] の内側のオペランドの記述を省略すると、“A, (XHL +)” を指定したことになります。
フラグ :
S
Z
H
V
N
C
実行例 :
S
Z
H
V
N
C
*
*
*
*
1
–
= “src1 − src2” の演算結果の最上位ビットの値がセットされます。
= “src1 − src2” の演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
= “src1 − src2” の演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以
外のときは “0” がセットされます。
= 命令実行後、BC レジスタの値が 0 のときは “0”、それ以外のときは “1” がセットされま
す。
= “1” にセットされます。
= 変化なし。
XIX レジスタが 00123456H, BC レジスタが 0200H のとき、
CPI A, (XIX +)
を実行すると、A レジスタの内容と 123456H 番地の内容が比較され、XIX レジスタは 00123457H,
BC レジスタは 01FFH になります。
Page 57
TLCS-900H1 CPU
CPIR src1, src2
< Compare increment repeat 正方向のブロックサーチ >
動 作 :
src1 − src2, BC ← BC − 1, repeat until src1 = src2 or BC = 0.
説 明 :
src1 と src2 の内容が比較されます。その後、BC レジスタの内容が −1 され、src1 = src2 または BC
= 0 でなければ、再び前記動作を繰り返します。なお、src1 は A レジスタまたは WA レジスタに限
られ、src2 のアドレッシングモードはポストインクリメントのレジスタ間接に限られます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
補 足 :
ニモニック
[A/WA, (R +)]
CPIR
1
0
0
z
0
0
0
0
1
0
R
1
0
1
[ ] の内側のオペランドの記述を省略すると、“A, (XHL +)” を指定したことになります。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
S
Z
H
V
N
C
*
*
*
*
1
–
= “src1 − src2” の演算結果の最上位ビットの値がセットされます。
= “src1 − src2” の演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
= “src1 − src2” の演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以
外のときは “0” がセットされます。
= 命令実行後、BC レジスタの値が 0 のときは “0”、それ以外のときは “1” がセットされま
す。
= “1” にセットされます。
= 変化なし。
A レジスタが 33H, XIX レジスタが 00123456H, BC レジスタが 0200H で、
メモリの 123456H 番地の内容が 11H,
メモリの 123457H 番地の内容が 22H
メモリの 123458H 番地の内容が 33H のとき、
CPIR A, (XIX +)
を実行すると、メモリの 123456H 番地 , 123457 番地 , 123458H 番地をリードした後、この命令の
実行が “src1 = src2” の条件で終了し、XIX レジスタは 00123459H, BC レジスタは 01FDH になり
ます。
Page 58
TLCS-900H1 CPU
CPL dst
< Complement 1 の補数 >
動 作 :
dst ← dst の 1 の補数
説 明 :
dst の 1 の補数 ( 各ビットの 0/1 反転 ) 値が、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
○
○
×
CPL
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
コード
r
S
Z
H
V
N
C
–
–
1
–
1
–
1
1
0
z
1
0
0
0
0
0
変化なし。
変化なし。
“1” にセットされます。
変化なし。
“1” にセットされます。
変化なし。
WA レジスタが 1234H のとき、
CPL WA
を実行すると、WA レジスタは EDCBH になります。
0001
0010
0011
0100
WA
(
)
1110
1101
1100
1011
WA
(
)
Page 59
r
1
1
0
TLCS-900H1 CPU
DAA dst
< Decimal adjust accumulator 10 進補正 >
動 作 :
dst ← dst の 10 進補正
説 明 :
dst の内容が C フラグと H フラグ、N フラグの状態により、10 進補正されます。この命令は、加
算命令または減算命令の後に、その演算結果を 2 進化 10 進 (BCD) 表現に補正するためのもので
す。
詳 細 :
バイト
サイズ
ワード
ロング
○
×
×
演算
ADD
ADC
SUB
SBC
NEG
補 足 :
ニモニック
DAA
コード
r
1
1
0
0
1
0
0
0
1
0
DAA 命令を
DAA 命令を DAA 命令を
dst の下位
dst の上位
実行する前
実行する前 実行する前
4 ビット
4 ビット
の H フラグ
の N フラグ の C フラグ
r
0
0
0
加算
される数
DAA 命令を
実行した後
の C フラグ
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
0~9
0~8
0~9
A~F
9~F
A~F
0~2
0~2
0~3
0
0
1
0
0
1
0
0
1
0~9
A~F
0~3
0~9
A~F
0~3
0~9
A~F
0~3
00
06
06
60
66
66
60
66
66
0
0
0
1
1
1
1
1
1
1
1
1
1
0
0
1
1
0~9
0~8
7~F
6~F
0
1
0
1
0~9
6~F
0~9
6~F
00
FA
A0
9A
0
0
1
1
“INC” または “DEC” 命令の演算に対しては、10 進補正できません。これらの命令では、C フ
ラグが変化しないからです。
Page 60
TLCS-900H1 CPU
フラグ :
S
Z
H
V
N
C
実行例 :
S
Z
H
V
N
C
*
*
*
*
–
*
= 演算結果の最上位ビットの値がセットされます。
= 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
= 演算結果、ビット 3 からビット 4 へキャリーが発生したときは “1”、それ以外のときは
“0” がセットされます。
= 演算結果のパリティ (“1” の数 ) が偶数のときは “1”、奇数のときは “0” がセットされま
す。
= 変化なし。
= 演算結果、最上位ビットからキャリーが発生した場合、または演算前にキャリーが “1”
であった場合は “1”、それ以外のときは “0” にセットされます。
A レジスタが 59H で、B レジスタが 13H のとき、
ADD A, B
DAA A
を実行すると、A レジスタは 72H になります。
Page 61
TLCS-900H1 CPU
DEC num, dst
< Decrement 減少 >
動 作 :
dst ← dst − num.
説 明 :
dst の内容から num の内容が減算され、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
補 足 :
○
ニモニック
×
DEC
#3, r
DEC<W>
#3, (mem)
1
1
z
z
1
r
0
1
1
0
1
#3
1
m
0
z
m
0
1
1
0
1
m
m
m
#3
オペランド中の #3 は 1~8 を示し、オブジェクトコードは 1~7, 0 に対応します。
フラグ :
S
Z
H
V
N
C
()
実行例 :
コード
S
Z
H
V
N
C
*
*
*
*
1
–
= 演算結果の最上位ビットの値がセットされます。
= 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
= 演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以外のときは “0”
がセットされます。
= 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま
す。
= “1” にセットされます。
= 変化なし。
“DEC #3, r” でオペランドサイズがワードまたはロングの場合は、すべてのフラグは変
化しません。
HL レジスタが 5678H のとき、
DEC 4, HL
を実行すると、HL レジスタは 5674H になります。
Page 62
TLCS-900H1 CPU
DECF
< Decrement register file pointer レジスタバンクの −1 切り替え >
動 作 :
RFP<1:0> ← RFP<1:0> − 1.
説 明 :
ステータスレジスタ SR 内のレジスタファイルポインタ RFP<1:0> の内容が −1 されます。
詳 細 :
ニモニック
コード
DECF
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
0
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
RFP<1:0> の内容が “2” のとき、
DECF
を実行すると、RFP<1:0> の内容は “1” になります。
Page 63
0
0
0
1
1
0
1
TLCS-900H1 CPU
DI
< Disable interrupt 割り込み禁止 >
動 作 :
IFF<2:0> ← 7.
説 明 :
ステータスレジスタ SR 中の割り込み許可フラグ IFF<2:0> の内容が “7” になります。この命令
の実行後、割り込みは、ノンマスカブル割り込み ( 割り込み要求レベルが “7” のもの ) しか受け
付けなくなります。
詳 細 :
ニモニック
コード
DI
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
0
0
0
0
0
1
1
0
0
0
0
0
0
1
1
1
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
注 ) 本 CPU は、命令実行ユニットとバスインタフェースユニットが分かれています。そのため、割
り込み要求フラグをクリアする命令をフェッチしたのと同時期に割り込み発生を CPU が受け付
けた場合、割り込みベクタを割り込みコントローラからリードするまでの間に要求フラグをクリ
アするということがあり得ます。この場合、CPU は要因消滅ベクタの割り込み処理を行います。
この現象を回避するため、割り込み要求フラグをクリアするときは、DI 命令の後に実行するよ
うにしてください。
Page 64
TLCS-900H1 CPU
DIV dst, src
< Divide 符号なし除算 >
動 作 :
dst< 下位半分 > ← dst ÷ src, dst< 上位半分 > ← 余り ( 符号なし )
説 明 :
dst の内容が src の内容で符号なし除算され、商が dst の下位半分へ、余りが dst の上位半分へ転
送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
○
ニモニック
×
DIV
コード
RR, r
DIV
rr, #
1
1
0
z
1
r
0
1
0
1
0
R
1
1
0
z
1
r
0
0
0
0
1
0
1
0
m
m
m
#<7:0>
#<15:8>
○
○
×
DIV
RR, (mem)
1
m
0
z
m
0
1
0
1
0
R
注 ) RR については次ページ参照
補 足 :
演算サイズがバイトのときは、“dst ( 下位バイト ) ← dst ( ワード ) ÷ src ( バイト )、dst ( 上位バイ
ト ) ← 余り ”、
演算サイズがワードのときは、“dst ( 下位ワード ) ← dst ( ロング ) ÷ src ( ワード )、dst ( 上位ワー
ド ) ← 余り ” になります。オペランドの dst の記述は、被除数のサイズに合わせてください。
オーバフローしたとき (V フラグが “1” にセットされたとき ) は、dst へは不定値がセットされ
ています。
フラグ :
S
Z
H
V
N
C
S
Z
H
V
N
C
–
–
–
V
–
–
=
=
=
=
変化なし。
変化なし。
変化なし。
0 で割った場合、または商が格納用 dst のビット長で表現できる数を超えた場合は “1”、そ
れ以外のときは “0” がセットされます。
= 変化なし。
= 変化なし。
Page 65
TLCS-900H1 CPU
実行例 :
XIX レジスタが 12345678H で、IY レジスタが 89ABH のとき、
DIV XIX, IY
を実行すると、商は 21DAH, 余りは 0FDAH となり、XIX レジスタは 0FDA21DAH になります。
注 意 :
“DIV RR, r” と “DIV RR, (mem)” 命令の RR は、下記に示す表のようになります。
演算サイズがバイト
演算サイズがワード
(8 ビット ← 16 ビット ÷ 8 ビット )
(16 ビット ← 32 ビット ÷ 16 ビット )
RR
コード R
RR
WA
001
XWA
000
BC
011
XBC
001
DE
101
XDE
010
HL
111
XHL
011
XIX
100
XIY
101
XIZ
110
XSP
111
IX
IY
IZ
指定不可
SP
コード R
CPU がミニマムモードのときは、XWA,
XBC, XDE, XHL は使えません。
“DIV rr, #” 命令の rr は、下記に示す表のようになります。
演算サイズがバイト
(8 ビット ← 16 ビット ÷ 8 ビット )
演算サイズがワード
(16 ビット ← 32 ビット ÷ 16 ビット )
rr
コード r
rr
WA
001
XWA
コード r
000
BC
011
XBC
001
DE
101
XDE
010
HL
111
XHL
011
IX
C7H:F0H
XIX
100
IY
C7H:F4H
XIY
101
IZ
C7H:F8H
XIZ
110
SP
C7H:FCH
XSP
111
CPU がミニマムモードのときは、XWA,
XBC, XDE, XHL は使えません。
その他のロングワードレジスタも拡張
コード方式ですべて指定可能。
1 バイト目 2 バイト目
その他のワードレジスタも IX~SP と
同様の拡張コード方式で、すべて指定
可能。
Page 66
TLCS-900H1 CPU
DIVS dst, src
< Divide signed 符号付き除算 >
動 作 :
dst< 下位半分 > ← dst ÷ src, dst< 上位半分 > ← 余り ( 符号付き )
説 明 :
dst の内容が src の内容で符号付き除算され、商が dst の下位半分へ、余りが dst の上位半分へ転
送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
○
ニモニック
×
DIVS
コード
RR, r
DIVS
rr, #
1
1
0
z
1
r
0
1
0
1
1
R
1
1
0
z
1
r
0
0
0
0
1
0
1
1
m
m
m
#<7:0>
#<15:8>
○
○
×
DIVS
RR, (mem)
1
m
0
z
m
0
1
0
1
1
R
注 ) RR については次ページ参照
補 足 :
演算サイズがバイトのときは、“dst ( 下位バイト ) ← dst ( ワード ) ÷ src ( バイト )、dst ( 上位バイ
ト ) ← 余り ”、
演算サイズがワードのときは、“dst ( 下位ワード ) ← dst ( ロング ) ÷ src ( ワード )、dst ( 上位ワー
ド ) ← 余り ” になります。オペランドの dst の記述は、被除数のサイズに合わせてください。
なお、余りの符号は、被余数と同じになります。
オーバフローしたとき (V フラグが “1” にセットされたとき ) は、dst へは不定値がセットされ
ています。
フラグ :
S
Z
H
V
N
C
S
Z
H
V
N
C
–
–
–
*
–
–
=
=
=
=
変化なし。
変化なし。
変化なし。
0 で割った場合、または、商が格納用 dst のビット長で表現できる数を超えた場合は “1”、
それ以外のときは “0” がセットされます。
= 変化なし。
= 変化なし。
Page 67
TLCS-900H1 CPU
実行例 :
XIX レジスタが 12345678H で、IY レジスタが 89ABH のとき、
DIV XIX, IY
を実行すると、余りは 16EEH、商は D89EH となり、XIX レジスタは 16EED89EH になります。
注 意 :
“DIVS RR, r” と “DIVS RR, (MEM)” 命令の RR は、下記に示す表のようになります。
演算サイズがバイト
演算サイズがワード
(8 ビット ← 16 ビット ÷ 8 ビット )
(16 ビット ← 32 ビット ÷ 16 ビット )
RR
コード R
RR
WA
001
XWA
000
BC
011
XBC
001
DE
101
XDE
010
HL
111
XHL
011
XIX
100
XIY
101
XIZ
110
XSP
111
IX
IY
IZ
指定不可
SP
コード R
CPU がミニマムモードのときは、XWA,
XBC, XDE, XHL は使えません。
“DIVS rr, #” 命令の rr は、下記に示す表のようになります。
演算サイズがバイト
演算サイズがワード
(8 ビット ← 16 ビット ÷ 8 ビット )
(16 ビット ← 32 ビット ÷ 16 ビット )
rr
コード r
rr
WA
001
XWA
コード r
000
BC
011
XBC
001
DE
101
XDE
010
HL
111
XHL
011
IX
C7H:F0H
XIX
100
IY
C7H:F4H
XIY
101
IZ
C7H:F8H
XIZ
110
SP
C7H:FCH
XSP
111
CPU がミニマムモードのときは、XWA,
XBC, XDE, XHL は使えません。
その他のロングワードレジスタも拡張
コード方式ですべて指定可能。
1 バイト目 2 バイト目
その他のワードレジスタも IX~SP と
同様の拡張コード方式で、すべて指定
可能。
Page 68
TLCS-900H1 CPU
DJNZ dst1, dst2
< Decrement and jump if non zero 減少 & ジャンプノンゼロ >
動 作 :
dst1 ← dst1 − 1. if dst1 ≠ 0 then PC ← dst2.
説 明 :
dst1 の内容が −1 され、その値がゼロでなければ、dst2 で示されたプログラム番地へ相対ジャン
プします。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
○
○
×
コード
[r, ]$ + 3/4 + d8
DJNZ
1
1
0
z
1
0
0
0
1
1
r
1
0
0
d<7:0>
注 ) r が拡張コードで指定されるときは $ + 4 + d8、それ以外のときは $ + 3 + d8 となります。
補 足 :
[ ] の内側のオペランドの “r,” の記述を省略すると、B レジスタが指定されたものと解釈されま
す。
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
A レジスタが 12H で、W レジスタが 03H のとき、
LOOP : ADD
A, A
DJNZ
W, LOOP
を実行すると、3 回ループして、A レジスタは 24H → 48H → 90H, W レジスタは 02H → 01H →
00H になります。
Page 69
TLCS-900H1 CPU
EI num
< Enable interrupt 割り込み許可 >
動 作 :
IFF<2:0> ← num.
説 明 :
ステータスレジスタ SR 中の割り込み許可フラグ IFF<2:0> の内容が、num になります。この命令
の実行後、CPU の割り込み受け付けレベルは num になります。
詳 細 :
ニモニック
EI
補 足 :
コード
[#3]
0
0
0
0
0
0
0
0
0
0
1
1
0
#3
オペランドの値は、0~7 まで指定できます。オペランドの記述を省略すると、“EI 0” と認識され
ます。
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
Page 70
TLCS-900H1 CPU
EX dst, src
< Exchange 交換 >
動 作 :
dst ↔ src.
説 明 :
dst の内容と src の内容が、交換されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
×
×
EX
F, F’
0
0
0
1
0
○
○
×
EX
R, r
1
1
z
z
1
r
1
0
1
1
1
R
1
m
z
z
m
0
0
1
1
0
○
○
ニモニック
×
EX
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
コード
(mem), r
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
注 ) “EX F, F’ ” を実行すると、フラグはすべて変化します。
実行例 :
A レジスタが 12H で、B レジスタが 34H のとき、
EX A, B
を実行すると、A レジスタは 34H、B レジスタは 12H になります。
12
A
34
B
(
)
34
A
12
B
(
)
Page 71
1
m
1
m
R
0
m
TLCS-900H1 CPU
EXTS dst
< Extend sign 符号拡張 >
動 作 :
dst< 上位半分 > ← dst< 下位半分 > の符号ビット
説 明 :
dst の下位半分の符号ビット ( オペランドサイズがワードのときはビット 7, ロングワードのとき
はビット 15) が、dst の上位半分の全ビットに転送 ( コピー ) されます。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
×
○
○
EXTS
r
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
コード
S
Z
H
V
N
C
–
–
–
–
–
–
1
1
z
z
1
0
0
0
1
0
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
HL レジスタが 6789H のとき、
EXTS HL
を実行すると、HL レジスタは FF89H になります。
15
0
8
7
1
1
0
0
1
1
1
1
8
7
1
1
1
1
1
1
1
1
15
1
0
0
0
0
1
0
0
1
0
0
0
1
0
0
1
HL
(
)
HL
(
)
0
Page 72
r
0
1
1
TLCS-900H1 CPU
EXTZ dst
< Extend zero ゼロ拡張 >
動 作 :
dst< 上位半分 > ← 0.
説 明 :
dst の上位半分がゼロにクリアされます。通常オペランドサイズが異なる演算を行う前、オペラ
ンドサイズをそろえるために使用します。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
×
○
○
EXTZ
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
コード
r
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
HL レジスタが 6789H のとき、
EXTZ HL
を実行すると、HL レジスタは 0089H になります。
XIX レジスタが 12345678H のとき、
EXTZ XIX
を実行すると、XIX レジスタは 00005678H になります。
Page 73
1
1
z
z
1
0
0
0
1
0
r
0
1
0
TLCS-900H1 CPU
HALT
< Halt CPU の停止 >
動 作 :
CPU の停止
説 明 :
命令の実行が停止されます。再開は、割り込みを受け付けることによって行われます。
詳 細 :
ニモニック
コード
HALT
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
0
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
Page 74
0
0
0
0
1
0
1
TLCS-900H1 CPU
INC num, dst
< Increment 増加 >
動 作 :
dst ← dst + num.
説 明 :
dst の内容と num の内容が加算され、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
補 足 :
○
ニモニック
×
INC
コード
#3, r
INC<W>
#3, (mem)
1
1
z
z
1
r
0
1
1
0
0
#3
1
m
0
z
m
0
1
1
0
0
m
m
m
#3
オペランド中の #3 は 1~8 を示し、オブジェクトコードは 1~7, 0 に対応します。
フラグ :
S
Z
H
V
N
C
S
Z
H
V
N
C
*
*
*
*
0
–
= 演算結果の最上位ビットの値がセットされます。
= 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
= 演算結果、ビット 3 からビット 4 へキャリーが発生したときは “1”、それ以外のときは
“0” がセットされます。
= 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま
す。
= “0” にクリアされます。
= 変化なし。
注 ) “INC #3, r” でオペランドサイズがワードまたはロングの場合は、すべてのフラグは変化しませ
ん。
実行例 :
WA レジスタが 1234H のとき、
INC 5, WA
を実行すると、WA レジスタは 1239H になります。
Page 75
TLCS-900H1 CPU
INCF
< Increment register file pointer レジスタバンクの +1 切り替え >
動 作 :
RFP<1:0> ← RFP<1:0> + 1.
説 明 :
ステータスレジスタ SP 内のレジスタファイルポインタ RFP<1:0> の内容が +1 されます。
詳 細 :
ニモニック
コード
INCF
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
0
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
RFP<1:0> の内容が “2” のとき、
INCF
を実行すると、RFP<1:0> の内容は “3” になります。
Page 76
0
0
0
1
1
0
0
TLCS-900H1 CPU
JP condition, dst
< Jump ジャンプ >
動 作 :
if cc が真 then PC ← dst.
説 明 :
オペランドのコンディションが真の場合、dst で示されたプログラム番地へジャンプします。
詳 細 :
ニモニック
JP
コード
#16
0
0
0
1
1
0
1
0
0
1
1
m
m
m
c
c
#<7:0>
#<15:8>
JP
#24
0
0
0
1
1
#<7:0>
#<15:8>
#<23:16>
JP
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
[cc, ]mem
S
Z
H
V
N
C
–
–
–
–
–
–
1
m
1
1
1
1
0
1
m
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
下記の命令、
JP 2000H
を実行すると、無条件で 2000H 番地へジャンプします。
XIX レジスタが 00123456H で、
JP C, XIX + 2
を実行すると、キャリーフラグの値が “1” の場合、123458H 番地へジャンプします。
注 ) 当 CPU は、命令を先読みする仕様であるため対象命令直後の非分岐先プログラムをリードしま
すが、その内容は読み捨てられます。
Page 77
TLCS-900H1 CPU
JR condition, dst
< Jump relative 相対ジャンプ >
動 作 :
if cc が真 then PC ← dst.
説 明 :
オペランドのコンディションが真の場合、dst で示されたプログラム番地へ相対ジャンプします。
詳 細 :
ニモニック
コード
[cc, ]$ + 2 + d8
JR
0
1
1
0
c
c
c
c
d<7:0>
[cc, ]$ + 3 + d16
JRL
0
1
1
1
d<7:0>
d<15:8>
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
2000H 番地のメモリにある下記の命令、
JR 2078H
を実行すると、無条件で 2078H 番地へ相対ジャンプします。
なお、上記命令のオブジェクトコードは、68H:76H になります。
6
8
7
6
2000H
2001H
(OP
)
(Displacement)
JR
2078H
注 ) 当 CPU は、命令を先読みする仕様であるため対象命令直後の非分岐先プログラムをリードしま
すが、その内容は読み捨てられます。
Page 78
TLCS-900H1 CPU
LD dst, src
< Load 転送 >
動 作 :
dst ← src.
説 明 :
src の内容が、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
○
○
○
○
ニモニック
○
○
○
LD
LD
LD
LD
コード
R, r
r, R
r, #3
R, #
1
1
z
z
1
r
1
0
0
0
1
R
1
1
z
z
1
r
1
0
0
1
1
R
1
1
z
z
1
r
1
0
1
0
1
#3
0
z
z
z
0
R
#<7:0>
#<15:8>
#<23:16>
#<31:24>
○
○
○
LD
r, #
1
1
z
z
1
0
0
0
0
0
r
0
1
1
m
m
m
#<7:0>
#<15:8>
#<23:16>
#<31:24>
○
○
○
○
○
○
○
○
×
LD
LD
LD <W>
R, (mem)
(mem), R
(#8), #
1
m
z
z
m
0
0
1
0
0
1
m
1
1
m
0
1
z
z
0
0
0
0
0
1
#8
#<7:0>
#<15:8>
Page 79
R
m
m
m
R
0
z
0
TLCS-900H1 CPU
バイト
サイズ
ワード
ロング
ニモニック
○
○
×
LD<W>
コード
(mem), #
1
m
1
1
m
m
m
m
0
0
0
0
0
0
z
0
#<7:0>
#<15:8>
○
○
×
LD<W>
(#16), (mem)
1
m
0
z
m
m
m
m
0
0
0
1
1
0
0
1
#16<7:0>
#16<15:8>
○
○
×
LD<W>
(mem), (#16)
1
m
1
1
m
m
m
m
0
0
0
1
0
1
z
0
#16<7:0>
#16<15:8>
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
DE レジスタが 4567H のとき、
LD IX, DE
を実行すると、IX レジスタは 4567H になります。
4567
DE
4567
IX
Page 80
TLCS-900H1 CPU
LDA dst, src
< Load address 実効アドレスの転送 >
動 作 :
dst ← src の実効アドレス値
説 明 :
src の実効アドレス値が、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
×
○
○
補 足 :
ニモニック
LDA
R, mem
1
m
1
1
m
0
0
1
s
0
m
m
m
R
本命令は、ADD 命令と動作が似ていますが、dst の指定が src の指定とは別にできる点が特長で
す。主に、C コンパイラなどでポインタを扱う場合に使用します。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
XIY レジスタが 00123456H で
LDA XIX, XIY + 33H
を実行すると、XIX レジスタは 00123489H になります。
00123456
33
00123489
XIY
Displacement
XIX
注 ) アドレスとしては、24 ビット分のみ使用することができます。
Page 81
TLCS-900H1 CPU
LDAR dst, src
< Load address relative 相対アドレスの転送 >
動 作 :
dst ← src の相対アドレス値
説 明 :
src で指定された相対アドレス値が、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
×
○
○
コード
R, $ + 4 + d16
LDAR
1
1
1
1
0
0
1
1
0
0
0
1
0
0
1
1
d<7:0>
d<15:8>
0
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
0
1
s
0
R
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
1000H 番地のメモリにある下記の命令、
LDAR XIX, $ + 1345H
を実行すると、XIX レジスタは 00002345H になります。“$” は、その命令が置かれている先頭番
地を示します。
なお、上記命令のオブジェクトコードは、F3H:13H:41H:13H:34H になります。
00001000
$
1345
00002345
Displacement
XIX
Page 82
TLCS-900H1 CPU
LDC dst, src
< Load control コントロールレジスタの転送 >
動 作 :
dst ← src.
説 明 :
src の内容が、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
○
○
○
LDC
コード
cr, r
1
1
z
z
1
0
0
1
0
1
r
1
1
0
cr
○
○
○
LDC
r, cr
1
1
z
z
1
0
0
1
0
1
cr
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
WA レジスタが 1234H のとき、
LDC DMAC0, WA
を実行すると、コントロールレジスタ DMAC0 は 1234H になります。
Page 83
r
1
1
1
TLCS-900H1 CPU
LDCF num, src
< Load carry flag キャリーフラグへの 1 ビット転送 >
動 作 :
CY ← src<num>.
説 明 :
src のビット num の内容が、キャリーフラグ CY へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
○
○
×
○
補 足 :
×
ニモニック
×
×
×
LDCF
コード
#4, r
LDCF
A, r
LDCF
#3, (mem)
LDCF
A, (mem)
1
1
0
z
1
r
0
0
1
0
0
0
0
0
0
1
1
0
z
1
0
0
1
0
1
0
1
1
1
m
1
1
m
m
m
m
1
0
0
1
1
1
m
1
1
m
m
m
m
0
0
1
0
1
0
1
1
0
1
#
4
1
r
#3
ビット num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がビット num とし
て使われます。オペランドがバイトのとき、ビット num の下位 4 ビットの値が 8~15 の場合、キャ
リーフラグの値は不定になります。
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
*
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
src のビット num の内容がセットされます。
Page 84
TLCS-900H1 CPU
実行例 :
100 番地のメモリの内容が 01000000B (2 進数 ) のとき、
LDCF 6, (100H)
を実行すると、キャリーフラグは 1 になります。
7
6
5
4
3
2
1
0
0
1
0
0
0
0
0
0
1
Page 85
100
TLCS-900H1 CPU
LDD dst, src
< Load decrement 逆方向のブロック部分転送 >
動 作 :
dst ← src, BC ← BC − 1.
説 明 :
src の内容が、dst へ転送されます。その後、BC レジスタの内容が −1 されます。なお、src およ
び dst のアドレッシングモードはポストデクリメントのレジスタ間接に限られます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
○
ニモニック
×
LDD<W>
LDD<W>
コード
[(XDE −), (XHL −)]
(XIX −), (XIY −)
1
0
0
z
0
0
1
1
0
0
0
1
0
0
1
0
1
0
0
z
0
1
0
1
0
0
0
1
0
0
1
0
注 ) [ ] はその内側の記述が省略可能であることを示しています。
フラグ :
S
Z
H
V
N
C
実行例 :
S
Z
H
V
N
C
–
–
0
*
0
–
=
=
=
=
変化なし。
変化なし。
“0” にクリアされます。
命令実行後、BC レジスタの値が 0 のときは “0”、それ以外のときは “1” がセットされま
す。
= “0” にクリアされます。
= 変化なし。
XIX レジスタが 00123456H で、XIY レジスタが 00335577H で BC レジスタが 0700H のとき、
LDD (XIX −), (XIY −)
を実行すると、335577H 番地の内容が 123456H 番地へ転送され、XIX レジスタは 123455H, XIY
レジスタは 00335576H, BC レジスタは 06FFH になります。
Page 86
TLCS-900H1 CPU
LDDR dst, src
< Load decrement repeat 逆方向のブロック転送 >
動 作 :
dst ← src, BC ← BC − 1, repeat until BC = 0.
説 明 :
src の内容が、dst へ転送されます。その後、BC レジスタの内容が −1 され、その値が 0 でなけれ
ば、再び前記動作を繰り返します。なお、src および dst のアドレッシングモードはポストデクリ
メントのレジスタ間接に限られます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
○
ニモニック
×
コード
LDDR<W> [(XDE −), (XHL −)]
LDDR<W> (XIX −), (XIY −)
1
0
0
z
0
0
1
1
0
0
0
1
0
0
1
1
1
0
0
z
0
1
0
1
0
0
0
1
0
0
1
1
注 ) [ ] はその内側の記述が省略可能であることを示しています。
補 足 :
割り込み要求は、1 データを転送するごとにサンプリングされます。
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
0
0
0
–
変化なし。
変化なし。
“0” にクリアされます。
“0” にクリアされます。
“0” にクリアされます。
変化なし。
XIX レジスタが 00123456H で、XIY レジスタが 00335577H で、BC レジスタが 0003H のとき、
LDDR (XIX −), (XIY −)
を実行すると、
335577H 番地の内容が 123456H 番地へ、
335576H 番地の内容が 123455H 番地へ、
335575H 番地の内容が 123454H 番地へ
転送され、XIX レジスタは 00123453H, XIY レジスタは 00335574H, BC レジスタは 0000H になり
ます。
注 ) BC レジスタの値が0になった際もメモリリードが行われますが、この内容は読み捨てられます。
上記例では、335574H 番地が該当します。
Page 87
TLCS-900H1 CPU
LDF num
< Load register file pointer レジスタバンクの設定 >
動 作 :
RFP<1:0> ← num.
説 明 :
num の値が、ステータスレジスタ SR 内のレジスタファイルポインタ RFP<1:0> へ転送されます。
詳 細 :
ニモニック
LDF
補 足 :
コード
#2
オペランドの値は、0~3 まで指定できます。
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
Page 88
0
0
0
1
0
1
0
0
0
0
0
0
1
1
# 2
TLCS-900H1 CPU
LDI dst, src
< Load increment 正方向のブロック部分転送 >
動 作 :
dst ← src, BC ← BC − 1.
説 明 :
src の内容が、dst へ転送されます。その後、BC レジスタの内容が −1 されます。なお、src およ
び dst のアドレッシングモードはポストインクリメントのレジスタ間接に限られます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
○
ニモニック
×
コード
LDI<W> [(XDE +), (XHL +)]
LDI<W> (XIX +), (XIY +)
1
0
0
z
0
0
1
1
0
0
0
1
0
0
0
0
1
0
0
z
0
1
0
1
0
0
0
1
0
0
0
0
注 ) [ ] はその内側の記述が省略可能であることを示しています。
フラグ :
S
Z
H
V
N
C
実行例 :
S
Z
H
V
N
C
–
–
0
*
0
–
=
=
=
=
変化なし。
変化なし。
“0” にクリアされます。
命令実行後、BC レジスタの値が 0 のときは “0”、それ以外のときは “1” がセットされま
す。
= “0” にクリアされます。
= 変化なし。
XIX レジスタが 00123456H で、XIY レジスタが 00335577H で BC レジスタが 0700H のとき、
LDI (XIX +), (XIY +)
を実行すると、335577H 番地の内容が 123456H 番地へ転送され、XIX レジスタは 00123457H、
XIY レジスタは 00335578H、BC レジスタは 06FFH になります。
Page 89
TLCS-900H1 CPU
LDIR dst, src
< Load increment repeat 正方向のブロック転送 >
動 作 :
dst ← src, BC ← BC − 1, repeat until BC = 0.
説 明 :
src の内容が、dst へ転送されます。その後、BC レジスタの内容が −1 され、その値が 0 でなけれ
ば、再び前記動作を繰り返します。なお、src および dst のアドレッシングモードはポストインク
リメントのレジスタ間接に限られます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
○
ニモニック
×
LDIR<W>
LDIR<W>
コード
[(XDE +), (XHL +)]
(XIX +), (XIY +)
1
0
0
z
0
0
1
1
0
0
0
1
0
0
0
1
1
0
0
z
0
1
0
1
0
0
0
1
0
0
0
1
注 ) [ ] はその内側の記述が省略可能であることを示しています。
補 足 :
割り込み要求は、1 データを転送するごとにサンプリングされます。
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
0
0
0
–
変化なし。
変化なし。
“0” にクリアされます。
“0” にクリアされます。
“0” にクリアされます。
変化なし。
XIX レジスタが 00123456H で、XIY レジスタが 00335577H で、BC レジスタが 0003H のとき、
LDIR (XIX +), (XIY +)
を実行すると、
335577H 番地の内容が 123456H 番地へ、
335578H 番地の内容が 123457H 番地へ、
335579H 番地の内容が 123458H 番地へ、
転送され、XIX レジスタは 00123459H、XIY レジスタは 0033557AH, BC レジスタは 0000H にな
ります。
注 ) BC レジスタの値が0になった際もメモリリードが行われますが、この内容は読み捨てられます。
上記例では、335580H 番地が該当します。
Page 90
TLCS-900H1 CPU
LINK dst, num
< Link スタックフレームの生成 >
動 作 :
(− XSP) ← dst, dst ← XSP, XSP ← XSP + num.
説 明 :
dst の内容がスタック領域へ退避されます。次に、スタックポインタ XSP の内容が dst へ転送さ
れます。最後にスタックポインタ XSP の内容と num の内容 ( 符号付き ) が加算され、スタック
ポインタ XSP へ転送されます。この命令はスタック領域にローカルな変数エリアを −num バイ
ト分だけ確保するときに使用します。
詳 細 :
バイト
サイズ
ワード
ニモニック
ロング
×
×
○
LINK
コード
r, d16
1
1
1
0
1
0
0
0
0
1
r
1
0
0
d<7:0>
d<15:8>
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
スタックポインタ XSP が 280H で、XIZ レジスタが 290H のとき、
LINK XIZ, −40H
を実行すると、メモリの 27CH 番地にデータ 00000290H ( ロングデータ ) が書き込まれ、XIZ レ
ジスタは 27CH に、スタックポインタ XSP は 23CH になります。
LINK
23CH:
XSP
UNLK
(40H
280H:
XSP
290H:
XIZ
XIZ
27CH:
Page 91
)
XIZ
TLCS-900H1 CPU
MDEC1 num, dst
< Modulo decrement 1 モジュロ減少 1 >
動 作 :
if (dst mod num) = 0 then dst ← dst + (num − 1) else dst ← dst − 1.
説 明 :
dst のモジュロ num が 0 の場合、dst に num − 1 が加算されます。それ以外の場合、dst から 1 が
減算されます。この命令は、循環構造のメモリテーブルポインタを操作するときに使用します。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
×
○
×
MDEC1
コード
#, r
1
1
0
1
1
0
0
1
1
1
#<7:0>
r
1
0
0
1
#<15:8>
補 足 :
オペランドの # は、2 の n 乗 (n = 1~15) の値に限られます。
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
IX レジスタを 1230H~1237H の範囲内で循環デクリメントする例です。
IX レジスタが 1231H のとき、
MDEC1 8, IX
を実行すると、IX レジスタは 1230H になり、再び
MDEC1 8, IX
を実行すると、IX レジスタのモジュロ 8 (8 で割った余り ) が 0 なので、IX レジスタに 8 − 1 が加
算され、IX レジスタは 1237H になります。
1230H
1237H
Page 92
TLCS-900H1 CPU
MDEC2 num, dst
< Modulo decrement 2 モジュロ減少 2 >
動 作 :
if (dst mod num) = 0 then dst ← dst + (num − 2) else dst ← dst − 2.
説 明 :
dst のモジュロ num が 0 の場合、dst に num − 2 が加算されます。それ以外の場合、dst から 2 が
減算されます。この命令は、循環構造のメモリテーブルポインタを操作するときに使用します。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
×
○
×
MDEC2
コード
#, r
1
1
0
1
1
0
0
1
1
1
#<7:0>
r
1
0
1
2
#<15:8>
補 足 :
オペランドの # は、2 の n 乗 (n = 2~15) の値に限られます。
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
IX レジスタを 1238H~123FH の範囲内で循環デクリメントする例です。
IX レジスタが 123AH のとき、
MDEC2 8, IX
を実行すると、IX レジスタは 1238H になり、再び
MDEC2 8, IX
を実行すると、IX レジスタのモジュロ 8 (8 で割った余り ) が 0 なので、IX レジスタに 8 − 2 が加
算され、IX レジスタは 123EH になります。
1238H
123FH
Page 93
TLCS-900H1 CPU
MDEC4 num, dst
< Modulo decrement 4 モジュロ減少 4 >
動 作 :
if (dst mod num) = 0 then dst ← dst + (num − 4) else dst ← dst − 4.
説 明 :
dst のモジュロ num が 0 の場合、dst に num − 4 が加算されます。それ以外の場合、dst から 4 が
減算されます。この命令は、循環構造のメモリテーブルポインタを操作するときに使用します。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
×
○
×
MDEC4
コード
#, r
1
1
0
1
1
0
0
1
1
1
#<7:0>
r
1
1
0
4
#<15:8>
補 足 :
オペランドの # は、2 の n 乗 (n = 3~15) の値に限られます。
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
IX レジスタを 1280H~12FFH の範囲内で循環デクリメントする例です。
IX レジスタが 1284H のとき、
MDEC4 80H, IX
を実行すると、IX レジスタは 1280H になり、再び
MDEC4 80H, IX
を実行すると、IX レジスタのモジュロ 80H (80H で割った余り ) が 0 なので、IX レジスタに 80H
− 4 が加算され、IX レジスタは 12FCH になります。
1280H
12FFH
Page 94
TLCS-900H1 CPU
MINC1 num, dst
< Modulo increment 1 モジュロ増加 1 >
動 作 :
if (dst mod num) = (num − 1) then dst ← dst − (num − 1) else dst ← dst + 1.
説 明 :
dst のモジュロ num が num − 1 の場合、dst から num − 1 が減算されます。それ以外の場合、dst
に 1 が加算されます。この命令は、循環構造のメモリテーブルポインタを操作するときに使用し
ます。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
×
○
×
MINC1
コード
#, r
1
1
0
1
1
0
0
1
1
1
#<7:0>
r
0
0
0
1
#<15:8>
補 足 :
オペランドの # は、2 の n 乗 (n = 1~15) の値に限られます。
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
IX レジスタを 1200H~1207H の範囲内で循環インクリメントする例です。
IX レジスタが 1206H のとき、
MINC1 8, IX
を実行すると、IX レジスタは 1207H になり、再び
MINC1 8, IX
を実行すると、IX レジスタのモジュロ 8 (8 で割った余り ) が 8 − 1 なので、IX レジスタから 8 −
1 が減算され、IX レジスタは 1200H になります。
1200H
1207H
Page 95
TLCS-900H1 CPU
MINC2 num, dst
< Modulo increment 2 モジュロ増加 2 >
動 作 :
if (dst mod num) = (num − 2) then dst ← dst − (num − 2) else dst ← dst + 2.
説 明 :
dst のモジュロ num が num − 2 の場合、dst から num − 2 が減算されます。それ以外の場合、dst
に 2 が加算されます。この命令は、循環構造のメモリテーブルポインタを操作するときに使用し
ます。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
×
○
×
MINC2
コード
#, r
1
1
0
1
1
0
0
1
1
1
#<7:0>
r
0
0
1
2
#<15:8>
補 足 :
オペランドの # は、2 の n 乗 (n = 2~15) の値に限られます。
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
IX レジスタを 1230H~1237H の範囲内で循環インクリメントする例です。
IX レジスタが 1234H のとき、
MINC2 8, IX
を実行すると、IX レジスタは 1236H になり、再び
MINC2 8, IX
を実行すると、IX レジスタのモジュロ 8 (8 で割った余り ) が 8 − 2 なので、IX レジスタから 8 −
2 が減算され、IX レジスタは 1230H になります。
1230H
1237H
Page 96
TLCS-900H1 CPU
MINC4 num, dst
< Modulo increment 4 モジュロ増加 4 >
動 作 :
if (dst mod num) = (num − 4) then dst ← dst − (num − 4) else dst ← dst + 4.
説 明 :
dst のモジュロ num が num − 4 の場合、dst から num − 4 が減算されます。それ以外の場合、dst
に 4 が加算されます。この命令は、循環構造のメモリテーブルポインタを操作するときに使用し
ます。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
×
○
×
MINC4
コード
#, r
1
1
0
1
1
0
0
1
1
1
#<7:0>
r
0
1
0
4
#<15:8>
補 足 :
オペランドの # は、2 の n 乗 (n = 3~15) の値に限られます。
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
IX レジスタを 1240H~127FH の範囲内で循環インクリメントする例です。
IX レジスタが 1278H のとき、
MINC4 40H, IX
を実行すると、IX レジスタは 127CH になり、再び
MINC4 40H, IX
を実行すると、IX レジスタのモジュロ 40H (40H で割った余り ) が 40H − 4 なので、IX レジスタ
から 40H − 4 が減算され、IX レジスタは 1240H になります。
1240H
127FH
Page 97
TLCS-900H1 CPU
MIRR dst
< Mirror ミラー交換 >
動 作 :
dst<MSB:LSB> ← dst<LSB:MSB>.
説 明 :
dst の内容が、ビットパターンのイメージでミラー交換されます。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
×
○
×
MIRR
r
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
コード
S
Z
H
V
N
C
–
–
–
–
–
–
1
1
0
1
1
0
0
0
1
0
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
HL レジスタが 0001 0010 0011 0100B (2 進数 ) のとき、
MIRR HL
を実行すると、HL レジスタは 0010 1100 0100 1000B (2 進数 ) になります。
15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
0
0
0
1
0
0
1
0
0
0
1
1
0
1
0
0
HL
(
)
0
0
1
0
1
1
0
0
0
1
0
0
1
0
0
0
HL
(
)
Page 98
r
1
1
0
TLCS-900H1 CPU
MUL dst, src
< Multiply 符号なし乗算 >
動 作 :
dst ← dst< 下位半分 > × src ( 符号なし )
説 明 :
dst の下位半分の内容と src の内容が符号なし乗算され、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
○
ニモニック
MUL
×
コード
RR, r
MUL
rr, #
1
1
0
z
1
r
0
1
0
0
0
R
1
1
0
z
1
r
0
0
0
0
1
0
0
0
m
m
m
#<7:0>
#<15:8>
○
補 足 :
○
×
MUL
1
m
0
z
m
0
1
0
0
0
R
演算サイズがバイトのときは、“dst ( ワード ) ← dst ( バイト ) × src ( バイト )”、演算サイズがワー
ドのときは、“dst ( ロング ) ← dst ( ワード ) × src ( ワード )” になります。オペランドの dst の記
述は、演算結果のサイズに合わせてください。
フラグ :
S
Z
H
V
N
C
実行例 :
RR, (mem)
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
IX レジスタが 1234H で、IY レジスタが 89ABH のとき、
MUL XIX, IY
を実行すると、IX レジスタの内容と IY レジスタの内容が符号なし乗算され、XIX レジスタ
は 09C9FCBCH になります。
Page 99
TLCS-900H1 CPU
注 意 :
“MUL RR, r” と “MUL RR, (mem)” 命令の RR は、下記に示す表のようになります。
演算サイズがバイト
演算サイズがワード
(16 ビット ← 8 ビット × 8 ビット )
(32 ビット ← 16 ビット × 16 ビット )
RR
コード R
RR
WA
001
XWA
000
BC
011
XBC
001
DE
101
XDE
010
HL
111
XHL
011
XIX
100
XIY
101
XIZ
110
XSP
111
IX
IY
IZ
指定不可
SP
コード R
“MUL rr, #” 命令の rr は、下記に示す表のようになります。
演算サイズがバイト
演算サイズがワード
(16 ビット ← 8 ビット × 8 ビット )
(32 ビット ← 16 ビット × 16 ビット )
rr
コード r
rr
WA
001
XWA
コード r
000
BC
011
XBC
001
DE
101
XDE
010
HL
111
XHL
011
IX
C7H:F0H
XIX
100
IY
C7H:F4H
XIY
101
IZ
C7H:F8H
XIZ
110
SP
C7H:FCH
XSP
111
その他のロングワードレジスタも拡張
コード方式ですべて指定可能。
1 バイト目 2 バイト目
その他のワードレジスタも IX~SP と
同様の拡張コード方式で、すべて指定
可能。
Page 100
TLCS-900H1 CPU
MULA dst
< Multiply and add 符号付き積和演算 >
動 作 :
dst ← dst + (XDE) × (XHL), XHL ← XHL − 2.
説 明 :
XDE レジスタで示されたメモリデータ (16 ビット ) と XHL レジスタで示されたメモリデータ
(16 ビット ) の内容が符号付き乗算され、その結果 (32 ビット ) と dst の内容 (32 ビット ) が加算
され、dst (32 ビット ) へ転送されます。その後、XHL レジスタの内容が −2 されます。
詳 細 :
バイト
サイズ
ワード
ロング
×
○
×
補 足 :
ニモニック
MULA
rr
1
1
0
1
1
0
0
0
1
1
r
0
0
1
オペランドの dst の記述は、演算結果のサイズ ( ロング ) に合わせてください。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
S
Z
H
V
N
C
*
*
–
*
–
–
=
=
=
=
演算結果の最上位ビットの値がセットされます。
演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
変化なし。
演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま
す。
= 変化なし。
= 変化なし。
XIX レジスタが 50000000H で、XDE レジスタが 100H, XHL が 200H, 100H 番地のメモリの内容
( ワード ) が 1234H, 200H 番地のメモリの内容 ( ワード ) が 89ABH のとき、
MULA XIX
を実行すると、XIX レジスタは 4795FCBCH、XHL レジスタは 1FEH になります。
(XDE)
1234
89AB
(XHL)
50000000
XIX
4795FCBC
XIX
Page 101
TLCS-900H1 CPU
MULS dst, src
< Multiply signed 符号付き乗算 >
動 作 :
dst ← dst< 下位半分 > × src ( 符号付き )
説 明 :
dst の下位半分の内容と src の内容が符号付き乗算され、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
○
ニモニック
MULS
×
コード
RR, r
MULS
rr, #
1
1
0
z
1
r
0
1
0
0
1
R
1
1
0
z
1
r
0
0
0
0
1
0
0
1
m
m
m
#<7:0>
#<15:8>
○
補 足 :
○
×
MULS
1
m
0
z
m
0
1
0
0
1
R
演算サイズがバイトのときは、“dst ( ワード ) ← dst ( バイト ) × src ( バイト )”、演算サイズがワー
ドのときは、“dst ( ロング ) ← dst ( ワード ) × src ( ワード )” になります。オペランドの dst の記
述は、演算結果のサイズに合わせてください。
フラグ :
S
Z
H
V
N
C
実行例 :
RR, (mem)
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
IX レジスタが 1234H で、IY レジスタが 89ABH のとき、
MULS XIX, IY
を実行すると、IX レジスタの内容と IY レジスタの内容が符号付き乗算され、XIX レジスタ
は F795FCBCH になります。
Page 102
TLCS-900H1 CPU
注 意 :
“MULS RR, r” と “MULS RR, (mem)” 命令の RR は、下記に示す表のようになります。
演算サイズがバイト
演算サイズがワード
(16 ビット ← 8 ビット × 8 ビット )
(32 ビット ← 16 ビット × 16 ビット )
RR
コード R
RR
WA
001
XWA
000
BC
011
XBC
001
DE
101
XDE
010
HL
111
XHL
011
XIX
100
XIY
101
XIZ
110
XSP
111
IX
IY
IZ
指定不可
SP
コード R
“MULS rr, #” 命令の rr は、下記に示す表のようになります。
演算サイズがバイト
演算サイズがワード
(16 ビット ← 8 ビット × 8 ビット )
(32 ビット ← 16 ビット × 16 ビット )
rr
コード r
rr
WA
001
XWA
コード r
000
BC
011
XBC
001
DE
101
XDE
010
HL
111
XHL
011
IX
C7H:F0H
XIX
100
IY
C7H:F4H
XIY
101
IZ
C7H:F8H
XIZ
110
SP
C7H:FCH
XSP
111
その他のロングワードレジスタも拡張
コード方式ですべて指定可能。
1 バイト目 2 バイト目
その他のワードレジスタも IX~SP と
同様の拡張コード方式で、すべて指定
可能。
Page 103
TLCS-900H1 CPU
NEG dst
< Negate 2 の補数 >
動 作 :
dst ← 0 − dst.
説 明 :
ゼロから dst の内容が減算され、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
○
○
×
NEG
フラグ :
S
Z
H
V
N
C
実行例 :
コード
r
S
Z
H
V
N
C
*
*
*
*
1
*
1
1
0
z
1
0
0
0
0
0
r
1
1
1
= 演算結果の最上位ビットの値がセットされます。
= 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
= 演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以外のときは “0”
がセットされます。
= 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま
す。
= “1” にセットされます。
= 演算結果、最上位ビットからボローが発生したときは “1”、それ以外のときは “0” がセッ
トされます。
IX レジスタ 0002H のとき、
NEG IX
を実行すると、IX レジスタは FFFEH になります。
0000
(
0002
IX
FFFE
IX
Page 104
)
TLCS-900H1 CPU
NOP
< No operation
何もしない >
動 作 :
何もしない
説 明 :
何もせず、次の命令の実行に移ります。この命令は、オブジェクトコードが 00H です。
詳 細 :
ニモニック
コード
NOP
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
0
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
Page 105
0
0
0
0
0
0
0
TLCS-900H1 CPU
OR dst, src
< Or 論理和 >
動 作 :
dst ← dst OR src.
説 明 :
dst の内容と src の内容が論理和演算され、dst へ転送されます。
( 真理値表 )
A
B
A OR B
0
0
0
0
1
1
1
0
1
1
1
1
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
ニモニック
○
OR
OR
コード
R, r
r, #
1
1
z
z
1
r
1
1
1
0
0
R
1
1
z
z
1
r
1
1
0
0
1
1
1
0
m
m
m
#<7:0>
#<15:8>
#<23:16>
#<31:24>
○
○
○
○
○
○
○
○
×
OR
OR
OR<W>
R, (mem)
(mem), R
(mem), #
1
m
z
z
m
1
1
1
0
0
1
m
z
z
m
1
1
1
0
1
1
m
0
z
m
m
m
m
0
0
1
1
1
1
1
0
#<7:0>
#<15:8>
Page 106
R
m
m
m
R
TLCS-900H1 CPU
フラグ :
S
Z
H
V
N
C
実行例 :
S
Z
H
V
N
C
*
*
0
*
0
0
=
=
=
=
演算結果の最上位ビットの値がセットされます。
演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
“0” にセットされます。
演算結果のパリティ (“1” の数 ) が偶数のときは “1”、奇数のときは “0” がセットされま
す。ただし、オペランド長が 32 ビットの場合は、不定値がセットされます。
= “0” にクリアされます。
= “0” にクリアされます。
HL レジスタが 7350H, IX レジスタが 3456H のとき、
OR HL, IX
を実行すると、HL レジスタは 7756H になります。
OR)
0111 0011 0101 0000 ← HL レジスタ ( 実行前 )
0011 0100 0101 0110 ← IX レジスタ ( 実行前 )
0111 0111 0101 0110 ← HL レジスタ ( 実行後 )
Page 107
TLCS-900H1 CPU
ORCF num, src
< Or carry flag キャリーフラグとの 1 ビット論理和 >
動 作 :
CY ← CY OR src<num>.
説 明 :
キャリーフラグ CY の内容と src のビット num の内容が論理和演算され、キャリーフラグ CY へ
転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
○
○
×
○
補 足 :
×
ニモニック
×
×
×
ORCF
コード
#4, r
ORCF
A, r
ORCF
#3, (mem)
ORCF
A, (mem)
1
1
0
z
1
r
0
0
1
0
0
0
0
0
0
1
1
0
z
1
0
0
1
0
1
0
0
1
1
m
1
1
m
m
m
m
1
0
0
0
1
1
m
1
1
m
m
m
m
0
0
1
0
1
0
0
1
0
0
#
4
1
r
#3
ビット num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がビット num とし
て使われます。オペランドがバイトのとき、ビット num の下位の値が 8~15 の場合、演算結果は
不定になります。
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
*
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
キャリーフラグ CY の内容と src のビット num の内容の論理和演算された値がセットされ
ます。
Page 108
TLCS-900H1 CPU
実行例 :
100 番地のメモリの内容が 01000000B (2 進数 ) で、キャリーフラグ CY が 0 のとき、
ORCF 6, (100H)
を実行すると、キャリーフラグは 1 になります。
7
6
5
4
3
2
1
0
0
1
0
0
0
0
0
0
OR
100
0
(
)
1
(
)
Page 109
TLCS-900H1 CPU
PAA dst
< Pointer adjust accumulator ポインタ偶数補正 >
動 作 :
if dst <LSB> = 1 then dst ← dst + 1.
説 明 :
dstのLSB (最下位ビット) が1の場合、dstに1が加算されます。dstのLSBが0の場合、何もしません。
この命令は、dst の内容を偶数にするためのものです。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
×
○
○
PAA
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
コード
r
S
Z
H
V
N
C
–
–
–
–
–
–
1
1
z
z
1
0
0
0
1
0
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
XIZ レジスタが 00234567H のとき、
PAA XIZ
を実行すると、XIZ レジスタは +1 されて 00234568H になります。
Page 110
r
1
0
0
TLCS-900H1 CPU
POP dst
< Pop スタック領域からの転送 >
動 作 :
dst ← (XSP +).
バイト時 : dst ← (XSP), XSP ← XSP + 1
ワード時 : dst ← (XSP), XSP ← XSP + 2
ロング時 : dst ← (XSP), XSP ← XSP + 4
説 明 :
まず、スタックポインタ XSP で示されたメモリ番地の内容が、dst へ転送されます。次に、ス
タックポインタ XSP がオペランドサイズのバイト長だけ加算されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
×
×
POP
F
0
0
0
1
1
0
0
1
○
×
×
POP
A
0
0
0
1
0
1
0
1
×
○
○
POP
R
0
1
0
s
1
R
○
○
○
POP
r
1
1
z
z
1
r
0
0
0
0
0
1
0
1
1
m
1
1
m
m
m
m
0
0
0
0
0
1
z
0
○
○
ニモニック
×
POP <W>
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
コード
(mem)
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
注 ) “POP F” を実行すると、フラグはすべて変化します。
Page 111
TLCS-900H1 CPU
実行例 :
スタックポインタ XSP が 0100H で、100H 番地の内容が 56H、101H 番地の内容が 78H のとき、
POP IX
を実行すると、IX レジスタは 7856H になります。また、スタックポインタ XSP は、0102H にな
ります。
IX
78
56
56
100H
78
101H
102H
Page 112
(
XSP)
(
XSP)
TLCS-900H1 CPU
POP SR
< Pop SR ステータスレジスタのスタック領域からの転送 >
動 作 :
SR ← (XSP +).
説 明 :
スタックポインタ XSP で示されたメモリ番地の内容が、ステータスレジスタへ転送されます。そ
の後、スタックポインタ XSP の内容が +2 されます。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
×
○
×
POP
フラグ :
S=
Z=
H=
V=
N=
C=
コード
SR
0
S
Z
H
V
N
C
*
*
*
*
*
*
0
0
0
0
0
1
1
スタックポインタ XSP で示されたメモリ番地の内容がセットされます。
注 ) この命令が実際に実行されるタイミングは、この命令がフェッチされるタイミングより、数ス
テート遅れます。これは、本 CPU が命令キュー (12 バイト ) とパイプライン処理方式を採用し
ているためです。
Page 113
TLCS-900H1 CPU
PUSH SR
< Push SR ステータスレジスタのスタック領域への転送 >
動 作 :
(− XSP) ← SR.
説 明 :
スタックポインタ XSP の内容が −2 されます。その後、ステータスレジスタ SR の内容が、スタッ
クポインタ XSP で示されたメモリ番地へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
×
○
×
PUSH
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
コード
SR
0
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
Page 114
0
0
0
0
0
1
0
TLCS-900H1 CPU
PUSH src
< Push スタック領域への転送 >
動 作 :
(− XSP) ← src.
バイト時 : XSP ← XSP − 1, (XSP) ← src
ワード時 : XSP ← XSP − 2, (XSP) ← src
ロング時 : XSP ← XSP − 4, (XSP) ← src
説 明 :
まず、スタックポインタ XSP がオペランドサイズのバイト長だけ減算されます。次に、スタッ
クポインタ XSP が示すメモリ番地へ、src の内容が転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
×
×
PUSH
F
0
0
0
1
1
0
0
0
○
×
×
PUSH
A
0
0
0
1
0
1
0
0
×
○
○
PUSH
R
0
0
1
s
1
R
○
○
○
PUSH
r
1
1
z
z
1
r
0
0
0
0
0
1
0
0
0
0
0
0
1
0
z
1
○
○
ニモニック
×
PUSH <W>
コード
#
#<7:0>
#<15:8>
○
○
×
PUSH <W>
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
(mem)
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
Page 115
1
m
0
z
m
m
m
m
0
0
0
0
0
1
0
0
TLCS-900H1 CPU
実行例 :
スタックポインタ XSP が 0100H で、HL レジスタが 1234H のとき、
PUSH HL
を実行すると、00FEH 番地は 34H に、00FFH 番地は 12H になります。また、スタックポインタ
XSP は、00FEH になります。
HL
12
34
34
0FEH
12
0FFH
100H
Page 116
(
XSP)
(
XSP)
TLCS-900H1 CPU
RCF
< Reset carry flag キャリーフラグのリセット >
動 作 :
CY ← 0.
説 明 :
キャリーフラグ CY が 0 にリセットされます。
詳 細 :
ニモニック
コード
RCF
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
0
S
Z
H
V
N
C
–
–
0
–
0
0
変化なし。
変化なし。
“0” にリセットされます。
変化なし。
“0” にリセットされます。
“0” にリセットされます。
Page 117
0
0
1
0
0
0
0
TLCS-900H1 CPU
RES num, dst
< Reset 1 ビットのリセット >
動 作 :
dst<num> ← 0.
説 明 :
dst のビット num が “0” にリセットされます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
×
ニモニック
RES
×
#4, r
RES
#3, (mem)
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
コード
S
Z
H
V
N
C
–
–
–
–
–
–
1
1
0
z
1
0
0
1
1
0
0
0
0
0
1
m
1
1
m
1
0
1
1
0
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
100 番地のメモリの内容が 00100111B (2 進数 ) のとき、
RES 5, (100H)
を実行すると、100 番地のメモリの内容は 00000111B (2 進数 ) になります。
7
6
0
0
5
4
3
2
1
0
0
0
1
1
1
0
Page 118
100
r
0
0
#
4
m
m
#3
0
m
TLCS-900H1 CPU
RET condition
< Return リターン >
動 作 :
if cc が真 then 32 ビット PC ← (XSP), XSP ← XSP + 4.
説 明 :
オペランドのコンディションが真の場合、スタック領域からプログラムカウンタ PC へリターン
アドレスが POP されます。
詳 細 :
ニモニック
コード
RET
RET
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
cc
S
Z
H
V
N
C
–
–
–
–
–
–
0
0
0
0
1
1
1
0
1
0
1
1
0
0
0
0
1
1
1
1
c
c
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
スタックポインタ XSP が 0FCH で、0FCH 番地のメモリの内容が 9000H ( ロングデータ ) のとき、
RET
を実行すると、スタックポインタ XSP は 100H になり、
9000H 番地にジャンプ ( リターン ) します。
注 1) 原則として CALL 命令とセットで使用してください。
注 2) 当 CPU は、命令を先読みする仕様であるため対象命令直後の非分岐先プログラムをリード
しますが、その内容は読み捨てられます。
Page 119
TLCS-900H1 CPU
RETD num
< Return and deallocate リターン & パラメータ領域の削除 >
動 作 :
32 ビット PC ← (XSP), XSP ← XSP + 4, XSP ← XSP + num.
説 明 :
まず、スタック領域からプログラムカウンタ PC へリターンアドレスが POP されます。次に、ス
タックポインタ XSP に num ( 符号付き ) の値が加算されます。
詳 細 :
ニモニック
RETD
コード
d16
0
0
0
0
1
1
1
1
d<7:0>
d<15:8>
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
スタックポインタ XSP が 0FCH で、0FCH 番地のメモリの内容が 9000H ( ロングデータ ) のとき、
RETD 8
を実行すると、スタックポインタ XSP は 0FCH + 4 + 8 → 108H になり、9000H 番地にジャンプ (
リターン ) します。
下記に、RETD 命令の活用例を示します。この例では、サブルーチンを呼ぶ前に 8 バイトのパラ
メータをスタックに PUSH し、サブルーチン処理終了後、RETD 命令で、その使用済のパラメー
タ領域を削除しています。
PUSH
PUSH
PUSH
CALL
注 1)
WA
BC
XIX
SAMPLE
SAMPLE:
RETD
8
原則として CALL 命令とセットで使用してください。
注 2) 当 CPU は、命令を先読みする仕様であるため対象命令直後の非分岐先プログラムをリード
しますが、その内容は読み捨てられます。
Page 120
TLCS-900H1 CPU
RETI
< Return from interrupt 割り込み処理からのリターン >
動 作 :
SR ← (XSP), 32 ビット PC ← (XSP + 2), XSP ← XSP + 6.
上記動作後、割り込みネスティングカウンタ INTNEST を -1 します。
説 明 :
まず、スタック領域から「ステータスレジスタ SR とプログラムカウンタ PC」へデータが POP
されます。
上記動作後、割り込みネスティングカウンタ INTNEST を -1 します。
詳 細 :
ニモニック
コード
RETI
フラグ :
S
Z
H
V
N
C
注 1)
=
=
=
=
=
=
0
S
Z
H
V
N
C
*
*
*
*
*
*
0
0
0
0
1
1
1
スタック領域から POP した値になります。
スタック領域から POP した値になります。
スタック領域から POP した値になります。
スタック領域から POP した値になります。
スタック領域から POP した値になります。
スタック領域から POP した値になります。
原則として割り込み処理とセットで使用してください。
注 2) 当 CPU は、命令を先読みする仕様であるため対象命令直後の非分岐先プログラムをリード
しますが、その内容は読み捨てられます。
Page 121
TLCS-900H1 CPU
RL num, dst
< Rotate left キャリーフラグを含む左ローテート >
動 作 :
{CY & dst ← CY & dst の左ローテート値 } Repeat num 回
説 明 :
キャリーフラグ CY と dst の連結した内容が左へローテートされます。これが num 回繰り返され
ます。
説明図 :
dst
CY
MSB
LSB
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
○
補 足 :
○
ニモニック
○
×
RL
#4, r
RL
A, r
RL<W>
(mem)
1
1
z
z
1
r
1
1
1
0
1
0
0
0
0
1
1
z
z
1
1
1
1
1
1
0
1
0
1
m
0
z
m
m
m
m
0
1
1
1
1
0
1
0
0
1
#
4
0
r
ローテート回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がローテー
ト回数として使われます。0 を指定すると、16 回ローテートされます。
dst がメモリの場合、ローテート回数は 1 回に制限されます。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
S
Z
H
V
N
C
*
*
0
*
0
*
=
=
=
=
ローテート後の dst の最上位ビットの値がセットされます。
ローテート後のdstの内容がゼロのときは “1”、それ以外のときは “0” がセットされます。
“0” にリセットされます。
ローテート後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0”
がセットされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。
= “0” にリセットされます。
= ローテート後の値がセットされます。
HL レジスタが 6230H で、キャリーフラグ CY が “1” のとき、
RL 4, HL
を実行すると、HL レジスタは 230BH、キャリーフラグ CY は “0” になります。
Page 122
TLCS-900H1 CPU
RLC num, dst
< Rotate left without carry キャリーフラグを含まない左ローテート >
動 作 :
{CY ← dst <MSB>、dst ← dst の左ローテート値 } Repeat num 回
説 明 :
dst の MSB の内容がキャリーフラグ CY へ転送され、dst の内容が左へローテートされます。こ
れが num 回繰り返されます。
説明図 :
dst
CY
MSB
LSB
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
○
補 足 :
○
ニモニック
○
×
RLC
#4, r
RLC
A, r
RLC<W>
(mem)
1
1
z
z
1
r
1
1
1
0
1
0
0
0
0
1
1
z
z
1
1
1
1
1
1
0
0
0
1
m
0
z
m
m
m
m
0
1
1
1
1
0
0
0
0
0
#
4
0
r
ローテート回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がローテー
ト回数として使われます。0 を指定すると、16 回ローテートされます。
dst がメモリの場合、ローテート回数は 1 回に制限されます。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
S
Z
H
V
N
C
*
*
0
*
0
*
=
=
=
=
ローテート後の dst の最上位ビットの値がセットされます。
ローテート後のdstの内容がゼロのときは “1”、それ以外のときは “0” がセットされます。
“0” にリセットされます。
ローテート後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0”
がセットされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。
= “0” にリセットされます。
= 最終のローテート前の dst の最上位ビットの値がセットされます。
HL レジスタが 1230H のとき、
RLC 4, HL
を実行すると、HL レジスタは 2301H、キャリーフラグ CY は “1” になります。
Page 123
TLCS-900H1 CPU
RLD dst1, dst2
< Rotate left digit 4 ビットの左回転 >
動 作 :
dst1<3:0> ← dst2<7:4>, dst2<7:4> ← dst2<3:0>, dst2<3:0> ← dst1<3:0>.
説 明 :
dst1 の下位 4 ビットと、dst2 の内容が、4 ビット単位で左へローテートされます。
説明図 :
dst1
7
4
dst2
3
0
7
4
3
0
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
○
×
×
RLD
フラグ :
S
Z
H
V
N
C
実行例 :
コード
[A, ] (mem)
S
Z
H
V
N
C
*
*
0
*
0
–
1
m
0
0
m
m
m
m
0
0
0
0
0
1
1
0
= ローテート後の A レジスタの最上位ビットの値がセットされます。
= ローテート後の A レジスタの内容がゼロのときは “1”、それ以外のときは “0” がセット
されます。
= “0” にリセットされます。
= ローテート後、A レジスタのパリティ (“1” の数 ) が偶数のときは “1”、それ以外のとき
は “0” がセットされます。
= “0” にリセットされます。
= 変化なし。
A レジスタが 12H で、100H 番地のメモリの内容が 34H のとき、
RLD A, (100H)
を実行すると、A レジスタは 13H, 100 番地のメモリの内容は 42H になります。
Page 124
TLCS-900H1 CPU
RR num, dst
< Rotate right キャリーフラグを含む右ローテート >
動 作 :
{CY & dst ← CY & dst の右ローテート値 } Repeat num 回
説 明 :
キャリーフラグ CY と dst の連結した内容が右へローテートされます。これが num 回繰り返され
ます。
説明図 :
dst
MSB
LSB
CY
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
○
補 足 :
○
ニモニック
○
×
RR
#4, r
RR
A, r
RR<W>
(mem)
1
1
z
z
1
r
1
1
1
0
1
0
0
0
0
1
1
z
z
1
1
1
1
1
1
0
1
1
1
m
0
z
m
m
m
m
0
1
1
1
1
0
1
1
0
1
#
4
1
r
ローテート回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がローテー
ト回数として使われます。0 を指定すると、16 回ローテートされます。
dst がメモリの場合、ローテート回数は 1 回に制限されます。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
S
Z
H
V
N
C
*
*
0
*
0
*
=
=
=
=
ローテート後の dst の最上位ビットの値がセットされます。
ローテート後のdstの内容がゼロのときは “1”、それ以外のときは “0” がセットされます。
“0” にリセットされます。
ローテート後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0”
がセットされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。
= “0” にリセットされます。
= ローテート後の値がセットされます。
HL レジスタが 6230H で、キャリーフラグ CY が “1” のとき、
RR 4, HL
を実行すると、HL レジスタは 1623H、キャリーフラグ CY は “0” になります。
Page 125
TLCS-900H1 CPU
RRC num, dst
< Rotate right without carry キャリーフラグを含まない右ローテート >
動 作 :
{CY ← dst<LSB>、dst ← dst の右ローテート値 } Repeat num 回
説 明 :
dst の LSB の内容がキャリーフラグ CY へ転送され、dst の内容が右へローテートされます。これ
が num 回繰り返されます。
説明図 :
dst
MSB
LSB
CY
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
○
補 足 :
○
ニモニック
○
×
RRC
#4, r
RRC
A, r
RRC<W>
(mem)
1
1
z
z
1
r
1
1
1
0
1
0
0
0
0
1
1
z
z
1
1
1
1
1
1
0
0
1
1
m
0
z
m
m
m
m
0
1
1
1
1
0
0
1
0
0
#
4
1
r
ローテート回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がローテー
ト回数として使われます。0 を指定すると、16 回ローテートされます。
dst がメモリの場合、ローテート回数は 1 回に制限されます。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
S
Z
H
V
N
C
*
*
0
*
0
*
=
=
=
=
ローテート後の dst の最上位ビットの値がセットされます。
ローテート後のdstの内容がゼロのときは “1”、それ以外のときは “0” がセットされます。
“0” にリセットされます。
ローテート後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0”
がセットされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。
= “0” にリセットされます。
= 最終のローテート前の dst の最上位ビットの値がセットされます。
HL レジスタが 1230H のとき、
RRC 4, HL
を実行すると、HL レジスタは 0123H、キャリーフラグ CY は “0” になります。
Page 126
TLCS-900H1 CPU
RRD dst1, dst2
< Rotate right digit 4 ビットの右回転 >
動 作 :
dst1<3:0> ← dst2<3:0>, dst2<7:4> ← dst1<3:0>, dst2<3:0> ← dst2<7:4>.
説 明 :
dst1 の下位 4 ビットと、dst2 の内容が、4 ビット単位で右へローテートされます。
説明図 :
dst1
7
4
dst2
3
0
7
4
3
0
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
○
×
×
RRD
フラグ :
S
Z
H
V
N
C
実行例 :
コード
[A,] (mem)
S
Z
H
V
N
C
*
*
0
*
0
–
1
m
0
0
m
m
m
m
0
0
0
0
0
1
1
1
= ローテート後の A レジスタの最上位ビットの値がセットされます。
= ローテート後の A レジスタの内容がゼロのときは “1”、それ以外のときは “0” がセット
されます。
= “0” にリセットされます。
= ローテート後、A レジスタのパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは
“0” がセットされます。
= “0” にリセットされます。
= 変化なし。
A レジスタが 12H で、100H 番地のメモリの内容が 34H のとき、
RRD A, (100H)
を実行すると、A レジスタは 14H, 100 番地のメモリの内容は 23H になります。
Page 127
TLCS-900H1 CPU
SBC dst, src
< Subtract with carry キャリー付き減算 >
動 作 :
dst ← dst − src − CY.
説 明 :
dst の内容から src の内容とキャリーフラグ CY の内容が減算され、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
ニモニック
○
SBC
SBC
コード
R, r
r, #
1
1
z
z
1
r
1
0
1
1
0
R
1
1
z
z
1
r
1
1
0
0
1
0
1
1
m
m
m
#<7:0>
#<15:8>
#<23:16>
#<31:24>
○
○
○
○
○
○
○
○
×
SBC
SBC
SBC <W>
R, (mem)
(mem), R
(mem), #
1
m
z
z
m
1
0
1
1
0
1
m
z
z
m
1
0
1
1
1
1
m
0
z
m
m
m
m
0
0
1
1
1
0
1
1
#<7:0>
#<15:8>
Page 128
R
m
m
m
R
TLCS-900H1 CPU
フラグ :
S
Z
H
V
N
C
実行例 :
S
Z
H
V
N
C
*
*
*
*
1
*
= 演算結果の最上位ビットの値がセットされます。
= 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
= 演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以外のときは “0”
がセットされます。ただし、オペランド長が 32 ビットの場合は、不定値がセットされます。
= 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま
す。
= “1” にセットされます。
= 演算結果、最上位ビットからボローが発生したときは “1”、それ以外のときは “0” がセッ
トされます。
HL レジスタが 7654H, IX レジスタが 5000H, キャリーフラグ CY が 1 のとき、
SBC HL, IX
を実行すると、HL レジスタは 2653H になります。
7654
HL
5000
IX
1
2653
Page 129
HL
TLCS-900H1 CPU
SCC condition, dst
< Set condition code コンディションコードによる値のセット >
動 作 :
if cc が真 then dst ← “1” else dst ← “0”.
説 明 :
オペランドのコンディションが真の場合、“1” が dst へ転送され、偽の場合、“0” が dst へ転送さ
れます。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
○
○
×
SCC
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
コード
cc, r
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
V フラグの内容が “1” のとき、
SCC OV, HL
を実行すると、HL レジスタは 0001H になります。
Page 130
1
1
0
z
0
1
1
1
1
r
c
c
TLCS-900H1 CPU
SCF
< Set carry flag キャリーフラグのセット >
動 作 :
CY ← 1.
説 明 :
キャリーフラグ CY が “1” にセットされます。
詳 細 :
ニモニック
コード
SCF
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
0
S
Z
H
V
N
C
–
–
0
–
0
1
変化なし。
変化なし。
“0” にリセットされます。
変化なし。
“0” にリセットされます。
“1” にセットされます。
Page 131
0
0
1
0
0
0
1
TLCS-900H1 CPU
SET num, dst
< Set 1 ビットのセット >
動 作 :
dst<num> ← 1.
説 明 :
dst のビット num が “1” にセットされます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
×
ニモニック
SET
×
#4, r
SET
#3, (mem)
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
コード
S
Z
H
V
N
C
–
–
–
–
–
–
1
1
0
z
1
0
0
1
1
0
0
0
0
0
1
m
1
1
m
1
0
1
1
1
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
100 番地のメモリの内容が 00000000B (2 進数 ) のとき、
SET 5, (100H)
を実行すると、100 番地のメモリの内容は 00100000B (2 進数 ) になります。
7
6
0
0
5
4
3
2
1
0
0
0
0
0
0
1
Page 132
100
r
0
0
#
4
m
m
#3
1
m
TLCS-900H1 CPU
SLA num, dst
< Shift left arithmetic 算術左シフト >
動 作 :
{CY ← dst<MSB>, dst ← dst の左シフト値、dst<LSB> ← 0} Repeat num 回
説 明 :
dst の MSB の内容がキャリーフラグ CY へ転送され、dst の内容が左へシフトされ、0 が dst の LSB
へ転送されます。これが num 回繰り返されます。
説明図 :
dst
CY
MSB
LSB
"0"
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
○
補 足 :
○
ニモニック
○
×
SLA
#4, r
SLA
A, r
SLA<W>
(mem)
1
1
z
z
1
r
1
1
1
0
1
0
0
0
0
1
1
z
z
1
1
1
1
1
1
1
0
0
1
m
0
z
m
m
m
m
0
1
1
1
1
1
0
0
1
0
#
4
0
r
シフト回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がシフト回数
として使われます。0 を指定すると、16 回シフトされます。
dst がメモリの場合、シフト回数は 1 回に制限されます。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
S
Z
H
V
N
C
*
*
0
*
0
*
=
=
=
=
シフト後の dst の最上位ビットの値がセットされます。
シフト後の dst の内容がゼロのときは “1”、それ以外のときは “0” がセットされます。
“0” にリセットされます。
シフト後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0” がセッ
トされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。
= “0” にリセットされます。
= 最終のシフト前の dst の最上位ビットの値がセットされます。
HL レジスタが 1234H のとき、
SLA 4, HL
を実行すると、HL レジスタは 2340H、キャリーフラグ CY は “1” になります。
Page 133
TLCS-900H1 CPU
SLL num, dst
< Shift left logical 論理左シフト >
動 作 :
{CY ← dst<MSB>, dst ← dst の左シフト値、dst <LSB> ← 0} Repeat num 回
説 明 :
dst の MSB の内容がキャリーフラグ CY へ転送され、dst の内容が左へシフトされ、0 が dst の LSB
へ転送されます。これが num 回繰り返されます。
説明図 :
dst
CY
MSB
LSB
"0"
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
○
補 足 :
○
ニモニック
○
×
SLL
#4, r
SLL
A, r
SLL<W>
(mem)
1
1
z
z
1
r
1
1
1
0
1
0
0
0
0
1
1
z
z
1
1
1
1
1
1
1
1
0
1
m
0
z
m
m
m
m
0
1
1
1
1
1
1
0
1
1
#
4
0
r
シフト回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がシフト回数
として使われます。0 を指定すると、16 回シフトされます。
dst がメモリの場合、シフト回数は 1 回に制限されます。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
S
Z
H
V
N
C
*
*
0
*
0
*
=
=
=
=
シフト後の dst の最上位ビットの値がセットされます。
シフト後の dst の内容がゼロのときは “1”、それ以外のときは “0” がセットされます。
“0” にリセットされます。
シフト後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0” がセッ
トされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。
= “0” にリセットされます。
= 最終のシフト前の dst の最上位ビットの値がセットされます。
HL レジスタが 1234H のとき、
SLL 4, HL
を実行すると、HL レジスタは 2340H、キャリーフラグ CY は “1” になります。
Page 134
TLCS-900H1 CPU
SRA num, dst
< Shift right arithmetic 算術右シフト >
動 作 :
{CY ← dst<MSB>, dst ← dst の右シフト値、dst<MSB> は固定 } Repeat num 回
説 明 :
dst の LSB の内容がキャリーフラグ CY へ転送され、dst の内容が右へシフト (MSB は固定 ) され
ます。これが num 回繰り返されます。
説明図 :
dst
MSB
LSB
CY
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
○
補 足 :
○
ニモニック
○
×
SRA
#4, r
SRA
A, r
SRA<W>
(mem)
1
1
z
z
1
r
1
1
1
0
1
0
0
0
0
1
1
z
z
1
1
1
1
1
1
1
0
1
1
m
0
z
m
m
m
m
0
1
1
1
1
1
0
1
1
0
#
4
1
r
シフト回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がシフト回数
として使われます。0 を指定すると、16 回シフトされます。
dst がメモリの場合、シフト回数は 1 回に制限されます。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
S
Z
H
V
N
C
*
*
0
*
0
*
=
=
=
=
シフト後の dst の最上位ビットの値がセットされます。
シフト後の dst の内容がゼロのときは “1”、それ以外のときは “0” がセットされます。
“0” にリセットされます。
シフト後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0” がセッ
トされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。
= “0” にリセットされます。
= 最終のシフト前の dst の最下位ビットの値がセットされます。
HL レジスタが 8230H のとき、
SRA 4, HL
を実行すると、HL レジスタは F823H、キャリーフラグ CY は “0” になります。
Page 135
TLCS-900H1 CPU
SRL num, dst
< Shift right logical 論理右シフト >
動 作 :
{CY ← dst<LSB>, dst ← dst の右シフト値 , dst<MSB> ← 0} Repeat num 回
説 明 :
dst の LSB の内容がキャリーフラグ CY へ転送され、
dst の内容が右へシフトされ、
0 が dst の MSB
へ転送されます。これが num 回繰り返されます。
説明図 :
dst
MSB
"0"
LSB
CY
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
○
補 足 :
○
ニモニック
○
×
SRL
#4, r
SRL
A, r
SRL<W>
(mem)
1
1
z
z
1
r
1
1
1
0
1
0
0
0
0
1
1
z
z
1
1
1
1
1
1
1
1
1
1
m
0
z
m
m
m
m
0
1
1
1
1
1
1
1
1
1
#
4
1
r
シフト回数 num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がシフト回数
として使われます。0 を指定すると、16 回シフトされます。
dst がメモリの場合、シフト回数は 1 回に制限されます。
フラグ :
S
Z
H
V
N
C
実行例 :
コード
S
Z
H
V
N
C
*
*
0
*
0
*
=
=
=
=
シフト後の dst の最上位ビットの値がセットされます。
シフト後の dst の内容がゼロのときは “1”、それ以外のときは “0” がセットされます。
“0” にリセットされます。
シフト後、dst のパリティ (“1” の数 ) が偶数のときは “1”、それ以外のときは “0” がセッ
トされます。ただし、オペランド長が 32 ビットの場合は不定値がセットされます。
= “0” にリセットされます。
= 最終シフト前の dst の最下位ビットの値がセットされます。
HL レジスタが 1238H のとき、
SRL 4, HL
を実行すると、HL レジスタは 0123H、キャリーフラグ CY は “1” になります。
Page 136
TLCS-900H1 CPU
STCF num, dst
< Store carry flag キャリーフラグからの 1 ビット転送 >
動 作 :
dst<num> ← CY.
説 明 :
キャリーフラグ CY の内容が、dst のビット num へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
○
○
×
○
補 足 :
×
ニモニック
STCF
×
#4, r
STCF
×
A, r
STCF
×
コード
#3, (mem)
STCF
A, (mem)
1
1
0
z
1
r
0
0
1
0
0
0
0
0
0
1
1
0
z
1
0
0
1
0
1
1
0
0
1
m
1
1
m
m
m
m
1
0
1
0
0
1
m
1
1
m
m
m
m
0
0
1
0
1
1
0
0
1
0
#
4
0
r
#3
ビット num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がビット num とし
て使われます。オペランドがバイトのとき、ビット num の下位 4 ビットの値が 8~15 の場合、オ
ペランドの値は変化しません。
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
Page 137
TLCS-900H1 CPU
実行例 :
100 番地のメモリの内容が 00H で、キャリーフラグ CY が 1 のとき、
STCF 5, (100H)
を実行すると、100 番地のメモリの内容は 00100000B (2 進数 ) になります。
7
6
0
0
5
4
3
2
1
0
0
0
0
0
0
1
Page 138
100
TLCS-900H1 CPU
SUB dst, src
< Subtract 減算 >
動 作 :
dst ← dst − src.
説 明 :
dst の内容から src の内容が減算され、dst へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
ニモニック
○
SUB
SUB
コード
R, r
r, #
1
1
z
z
1
r
1
0
1
0
0
R
1
1
z
z
1
r
1
1
0
0
1
0
1
0
m
m
m
#<7:0>
#<15:8>
#<23:16>
#<31:24>
○
○
○
○
○
○
○
○
×
SUB
SUB
SUB <W>
R, (mem)
(mem), R
(mem), #
1
m
z
z
m
1
0
1
0
0
1
m
z
z
m
1
0
1
0
1
1
m
0
z
m
m
m
m
0
0
1
1
1
0
1
0
#<7:0>
#<15:8>
Page 139
R
m
m
m
R
TLCS-900H1 CPU
フラグ :
S
Z
H
V
N
C
実行例 :
S
Z
H
V
N
C
*
*
*
*
1
*
= 演算結果の最上位ビットの値がセットされます。
= 演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
= 演算結果、ビット 3 からビット 4 へボローが発生したときは “1”、それ以外のときは “0”
がセットされます。ただし、オペランド長が 32 ビットの場合は、不定値がセットされます。
= 演算結果、オーバフローが発生したときは “1”、それ以外のときは “0” がセットされま
す。
= “1” にセットされます。
= 演算結果、最上位ビットからボローが発生したときは “1”、それ以外のときは “0” がセッ
トされます。
HL レジスタが 7654H, IX レジスタが 5000H のとき、
SUB HL, IX
を実行すると、HL レジスタは 2654H になります。
7654
HL
5000
IX
2654
HL
Page 140
TLCS-900H1 CPU
SWI num
< Software interrupt ソフトウエア割り込み >
XSP ← XSP − 6.
(XSP) ← SR.
(XSP + 2) ← 32 ビット PC.
PC ← (FFFF00H + num × 4).
動 作 :
(1)
(2)
(3)
(4)
説 明 :
スタック領域へ、ステータスレジスタ SR の内容と、この SWI 命令の次の番地を示しているプロ
グラムカウンタ PC の内容が退避され、“FFFF00H + num × 4” 番地の内容で示される飛び先へジャ
ンプします。
詳 細 :
ニモニック
コード
SWI
[#3]
1
1
1
1
1
#3
補 足 :
オペランドの値は、0~7 まで指定できます。オペランドの記述を省略すると、“SWI 7” と解釈さ
れます。
参 考 :
ステータスレジスタ SR の構成は下記のとおりです。
15
14
13
12
11
10
“1”
IFF2
IFF1
IFF0
“1”
“0”
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
9
8
RFP1 RFP0
7
6
5
4
3
2
1
0
S
Z
“0”
H
“0”
V
N
C
S
Z
H
V
N
C
–
–
–
–
–
–
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
Page 141
TLCS-900H1 CPU
実行例 :
スタックポインタ XSP が 1000H, ステータスレジスタ SR が 8800H で、128400H 番地のメモリに
ある、
SWI 5
を実行すると、0FFAH 番地のメモリに旧ステータスレジスタ SR の内容 8800H が、0FFCH 番地
のメモリにプログラムカウンタ PC の内容 00128401H がライトされます。その後、FFFF14H 番地
のメモリの内容で示される飛び先 345678H 番地へジャンプします。
00
12
84
PC (
01
)
88
00
SR (
)
OFFAH (
0FFBH
00
88
01
0FFCH
84
0FFDH
12
0FFEH
0FFFH
00
1000H (
FFFF00H
(
)
"5"
4
(num
注 1)
XSP)
4)
FFFF14H
78
00
XSP)
34
56
78
PC (
FFFF14H
56
FFFF15H
34
FFFF16H
00
FFFF17H
)
割り込みレベルのマスクレジスタ値 (IFF) は変化しません。そのため、SWI 命令処理中によ
りレベルの高い割り込みが発生した場合は、そちらの割り込みを受け付けます。
注 2) SWI1 は、
「要因消滅ベクタ」と同じテーブルに割り付けられています。SWI2 は、
「未定義命
令実行違反」と同じテーブルに割り付けられています。
Page 142
TLCS-900H1 CPU
TSET num, dst
< Test and set 1 ビットのテストとセット >
動 作 :
Z フラグ ← dst <num> の反転値
dst <num> ← 1.
説 明 :
dst のビット num の反転値が、Z フラグへ転送されます。その後、dst のビット num が “1” にセッ
トされます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
×
ニモニック
TSET
×
#4, r
TSET
#3, (mem)
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
コード
S
Z
H
V
N
C
×
*
1
×
0
–
1
1
z
z
1
0
0
1
1
0
0
0
0
0
1
m
1
1
m
1
0
1
0
1
r
1
0
#
4
m
m
0
m
#3
不定値がセットされます。
src<num> の反転値がセットされます。
“1” にセットされます。
不定値がセットされます。
“0” にセットされます。
変化なし。
100 番地のメモリの内容が 00100000B (2 進数 ) のとき、
TSET 3, (100H)
を実行すると、Z フラグは 1 になり、100H 番地のメモリの内容は 00101000B (2 進数 ) になります。
7
6
5
4
3
2
1
0
0
0
1
0
0
0
0
0
100H
(
)
0
100H
(
)
1
0
0
1
0
1
0
0
Z
Page 143
TLCS-900H1 CPU
UNLK dst
< Unlink スタックフレームの削除 >
動 作 :
XSP ← dst, dst ← (XSP +).
説 明 :
dst の内容が、スタックポインタ XSP へ転送されます。その後、スタック領域からロングワード
データが dst へ POP されます。この命令は、LINK 命令とペアで使用します。
詳 細 :
バイト
サイズ
ワード
ロング
ニモニック
×
×
○
UNLK
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
コード
r
S
Z
H
V
N
C
–
–
–
–
–
–
1
1
1
0
1
0
0
0
0
1
r
1
0
1
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
LINK 命令実行後、
UNLK XIZ
を実行すると、スタックポインタ XSP と XIZ レジスタは、LINK 命令実行前と同じ値になります
( 詳しくは、LINK 命令のページを参照してください )。
Page 144
TLCS-900H1 CPU
XOR dst, src
< Exclusive or 排他的論理和 >
動 作 :
dst ← dst XOR src.
説 明 :
dst の内容と src の内容が排他的論理和演算され、dst へ転送されます。
( 真理値表 )
A
B
A XOR B
0
0
0
0
1
1
1
0
1
1
1
0
詳 細 :
バイト
サイズ
ワード
ロング
○
○
○
○
○
ニモニック
○
XOR
XOR
コード
R, r
r, #
1
1
z
z
1
r
1
1
0
1
0
R
1
1
z
z
1
r
1
1
0
0
1
1
0
1
m
m
m
#<7:0>
#<15:8>
#<23:16>
#<31:24>
○
○
○
○
○
○
○
○
×
XOR
XOR
XOR <W>
R, (mem)
(mem), R
(mem), #
1
m
z
z
m
1
1
0
1
0
1
m
z
z
m
1
1
0
1
1
1
m
0
z
m
m
m
m
0
0
1
1
1
1
0
1
#<7:0>
#<15:8>
Page 145
R
m
m
m
R
TLCS-900H1 CPU
フラグ :
S
Z
H
V
N
C
実行例 :
S
Z
H
V
N
C
*
*
0
*
0
0
=
=
=
=
演算結果の最上位ビットの値がセットされます。
演算結果がゼロのときは “1”、それ以外のときは “0” がセットされます。
“0” にセットされます。
演算結果のパリティ (“1” の数 ) が偶数のときは “1”、奇数のときは “0” がセットされま
す。ただし、オペランド長が 32 ビットの場合は、不定値がセットされます。
= “0” にクリアされます。
= “0” にクリアされます。
HL レジスタが 7350H, IX レジスタが 3456H のとき、
XOR HL, IX
を実行すると、HL レジスタは 4706H になります。
XOR)
0111 0011 0101 0000 ← HL レジスタ ( 実行前 )
0011 0100 0101 0110 ← IX レジスタ ( 実行前 )
0100 0111 0000 0110 ← HL レジスタ ( 実行後 )
Page 146
TLCS-900H1 CPU
XORCF num, src
< Exclusive or carry flag キャリーフラグとの 1 ビット排他的論理和 >
動 作 :
CY ← CY XOR src<num>.
説 明 :
キャリーフラグ CY の内容と src のビット num の内容が排他的論理和演算され、キャリーフラグ
CY へ転送されます。
詳 細 :
バイト
サイズ
ワード
ロング
○
○
×
○
○
○
×
○
補 足 :
×
ニモニック
×
×
×
XORCF
コード
#4, r
XORCF
A, r
XORCF
#3, (mem)
XORCF
A, (mem)
1
1
0
z
1
r
0
0
1
0
0
0
0
0
0
1
1
0
z
1
0
0
1
0
1
0
1
0
1
m
1
1
m
m
m
m
1
0
0
1
0
1
m
1
1
m
m
m
m
0
0
1
0
1
0
1
0
0
1
#
4
0
r
#3
ビット num が A レジスタで指定された場合、A レジスタの下位 4 ビットの値がビット num とし
て使われます。オペランドがバイトのとき、ビット num の下位 4 ビットの値が 8~15 の場合、演
算結果は不定になります。
フラグ :
S
Z
H
V
N
C
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
–
–
–
*
変化なし。
変化なし。
変化なし。
変化なし。
変化なし。
キャリーフラグ CY の内容と src のビット num の内容の排他的論理和演算された値がセッ
トされます。
Page 147
TLCS-900H1 CPU
実行例 :
100 番地のメモリの内容が 01000000B (2 進数 ) で、キャリーフラグ CY が 1 のとき、
XORCF 6, (100H)
を実行すると、キャリーフラグは 0 になります。
7
6
5
4
3
2
1
0
0
1
0
0
0
0
0
0
XOR
100
1
(
)
0
(
)
Page 148
TLCS-900H1 CPU
ZCF
< Zero flag to carry flag Z フラグをキャリーフラグへ転送 >
動 作 :
CY ← Z フラグの反転値
説 明 :
Z フラグの反転値が、キャリーフラグ CY へ転送されます。
詳 細 :
ニモニック
コード
ZCF
0
フラグ :
S
Z
H
V
N
C
実行例 :
=
=
=
=
=
=
S
Z
H
V
N
C
–
–
×
–
0
*
変化なし。
変化なし。
不定値がセットされます。
変化なし。
“0” にリセットされます。
Z フラグの反転値がセットされます。
Z フラグが 0 のとき、
ZCF
を実行すると、CY は 1 になります。
0
Z
1
Page 149
0
0
1
0
0
1
1
TLCS-900H1 CPU
Page 150
TLCS-900H1 CPU
付録 B. 命令一覧表
■
本文中の記号の説明
1. サイズ欄
B
オペランドサイズがバイト (8 ビット )
W
オペランドサイズがワード (16 ビット )
L
オペランドサイズがロング (32 ビット )
2. ニモニック欄
R
8/16/32 ビットのカレントバンクレジスタを含む 8 本の汎用レジスタ
8 ビットの場合 : W, A, B, C, D, E, H, L
16 ビットの場合 : WA, BC, DE, HL, IX, IY, IZ, SP
32 ビットの場合 : XWA, XBC, XDE, XHL, XIX, XIY, XIZ, XSP
r
8/16/32 ビットの汎用レジスタ
cr
8/16/32 ビットの CPU の全コントロールレジスタ
DMAS0~DMAS7, DMAD0~DMAD7, DMAC0~DMAC7, DMAM0~DMAM7, INTNEST
A
A レジスタ (8 ビット )
F
フラグレジスタ (8 ビット )
F’
裏フラグレジスタ (8 ビット )
SR
ステータスレジスタ (16 ビット )
PC
プログラムカウンタ (32 ビット )
(mem)
8/16/32 ビットのメモリ内のデータ
mem
実効アドレス値
<W>
オペランドサイズがワードのとき “W” の記述が必要であることを示します。
[]
カッコ内のオペランドの記述が、省略できることを示します。
#
8/16/32 ビットの即値データ
#3
3 ビットの即値データ ; 0~7 or 1~8 ................. 短縮コード用
#4
4 ビットの即値データ ; 0~15 or 1~16
d8
8 ビットのディスプレースメント ; −80H~+7FH
d16
16 ビットのディスプレースメント ; −8000H~+7FFFH
cc
コンディションコード
(#8)
ダイレクトアドレッシング ; (00H)~(0FFH) .... 256 バイト空間
(#16)
64 K バイトエリアアドレッシング ; (0000H)~(0FFFFH)
$
その命令が置かれている先頭アドレス
Page 151
TLCS-900H1 CPU
3. コード欄
Z
オペランドサイズを表す指定コードです。
バイト (8 ビット ) = 0
ワード (16 ビット ) = 2
ロング (32 ビット ) = 4
ZZ
オペランドサイズを表す指定コードです。
バイト (8 ビット ) = 00H
ワード (16 ビット ) = 10H
ロング (32 ビット ) = 20H
4. フラグ欄 (SZHVNC)
-
フラグは変化しません。
*
命令の実行によって、フラグは変化します。
0
フラグは “0” にクリアされます。
1
フラグは “1” にセットされます。
P
命令の実行によって、フラグは変化します。( パリティフラグとして働きます )
V
命令の実行によって、フラグは変化します。( オーバフローフラグとして働きます )
X
フラグには、不定値がセットされます。
5. 命令長欄
命令長を、バイト単位で示しています。
+#
イミディエートデータ長を加えてください。
+M
アドレッシングコード長を加えてください。
+#M
イミディエートデータ長 + アドレッシングコード長を加えてください。
6. ステート欄
命令の実行処理時間を、ステート単位で、8 ビット , 16 ビット , 32 ビット処理の場合を順に示して
います。
1 ステート = 50 ns @ 20 MHz
なお、この命令一覧表で示されたステート数は以下のベスト条件のときの値です。
•
データバス幅は 32 ビットである。
•
バスサイクルは最短 (1 クロック ) である。
•
メモリ上のデータは配置が最適である (2 バイトデータは偶数番地、4 バイトデータは 4 の倍数
番地に格納されている )。
Page 152
TLCS-900H1 CPU
■
900/H1 命令一覧表 (1/10)
(1) 転送
命令群
サイズ
BWL
BWL
BWL
BWL
BWL
BWL
BWL
LD
LD
LD
LD
LD
LD
LD
BWBWBWBW-
LD<W>
LD<W>
LD<W>
LD<W>
PUSH
B-B--WL
BWL
BWBW-
PUSH
F
PUSH
A
PUSH
R
PUSH
r
PUSH<W> #
PUSH<W> (mem)
POP
B-B--WL
BWL
BW-
POP
POP
POP
POP
POP<W>
LDA
-WL
LDA
LDAR
-WL
LDAR
LD
ニモニック
R,r
r,R
r,#3
R,#
r,#
R,(mem)
(mem),R
コード (16 進 )
C8+zz+r
C8+zz+r
C8+zz+r
20+zz+R
C8+zz+r
80+zz+mem
B0+mem
:88+R
:98+R
:A8+#3
:#
:03:#
:20+R
:40+zz+R
機能
R←r
r←R
r ← #3
R←#
r←#
R ← (mem)
(mem) ← R
------------------------------------
命令長 ステート
1. 1. 1
2
1. 1. 1
2
1. 1. 1
2
1. 1. 1
1+#
1. 1. 1
2+#
2. 2. 2
2+M
2. 2. 2
2+M
08+z
B0+mem
80+zz+mem
B0+mem
:#8:#
:00+z:#
:19:#16
:14+z:#16
(#8) ← #
(mem) ← #
(#16) ← (mem)
(mem) ← (#16)
---------------------
2+#
2+M#
4+M
4+M
2. 2. 2. 2. 3. 3. 4. 4. -
18
14
18+zz+R
C8+zz+r
:04
09+z
:#
80+zz+mem :04
(−XSP) ← F
(−XSP) ← A
(−XSP) ← R
(−XSP) ← r
(−XSP) ← #
(−XSP) ← (mem)
-------------------------------
1
1
1
2
1+#
2+M
2. -. 2. -. -. 2. 2
3. 3. 3
2. 2. 4. 4. -
19
15
38+zz+R
C8+zz+r
B0+mem
:05
:04+z
F ← (XSP+)
A ← (XSP+)
R ← (XSP+)
r ← (XSP+)
(mem) ← (XSP+)
******
---------------------
1
1
1
2
2+M
2. -. 2. -. -. 2. 2
3. 3. 3
5. 5. -
R,mem
B0+mem
:10+zz+R
R ← mem
------
2+M
-. 2. 2
R,$+4+d16
F3:13:d16
:20+zz+R
R ← PC+d16
------
5
-. 2. 2
(#8),#
(mem),#
(#16),(mem)
(mem),(#16)
F
A
R
r
(mem)
SZHVNC
(2) 交換
コード (16 進 )
命令群
サイズ
ニモニック
EX
B-BWBW-
EX
EX
EX
F,F’
R,r
(mem),R
16
C8+zz+r
:B8+R
80+zz+mem :30+R
MIRR
-W-
MIRR
r
D8+r
:16
Page 153
機能
SZHVNC
命令長 ステート
F ↔ F’
R↔r
(mem) ↔ R
******
-----------
1
2
2+M
1. -. 2. 2. 3. 3. -
r<0:MSB> ← r<MSB:0>
------
2
-. 2. -
TLCS-900H1 CPU
■
900/H1 命令一覧表 (2/10)
(3) ブロック転送 / ブロックサーチ
命令群
サイズ
BW-
ニモニック
LDI<W>
[(XDE+),(XHL+)]
コード (16 進 )
83 + zz
:10
85 + zz
:10
機能
(XDE+) ← (XHL+)
BC ← BC − 1
SZHVNC
命令長 ステート
--0 (1) 0-
2
5. 5. -
(XIX+) ← (XIY+)
BC ← BC − 1
--0 (1) 0-
2
5. 5. -
:11
repeat
(XDE+) ← (XHL+)
BC ← BC − 1
until BC = 0
--000-
2
2n + 6
--000-
2
2n + 6
BW-
LDI<W>
(XIX+),(XIY+)
BW-
LDIR<W>
[(XDE+),(XHL+)]
BW-
LDIR<W>
(XIX+),(XIY+)
85 + zz
:11
repeat
(XIX+) ← (XIY+)
BC ← BC − 1
until BC = 0
BW-
LDD<W>
[(XDE−),(XHL−)]
83 + zz
:12
(XDE−) ← (XHL−)
BC ← BC − 1
--0 (1) 0-
2
5. 5. -
BW-
LDD<W>
(XIX−),(XIY−)
85 + zz
:12
(XIX−) ← (XIY−)
BC ← BC − 1
--0 (1) 0-
2
5. 5. -
BW-
LDDR<W>
[(XDE−),(XHL−)]
:13
repeat
(XDE−) ← (XHL−)
BC ← BC − 1
until BC = 0
--000-
2
2n + 6
BW-
LDDR<W>
(XIX−),(XIY−)
85 + zz
:13
repeat
(XIX−) ← (XIY−)
BC ← BC − 1
until BC = 0
--000-
2
2n + 6
BW-
CPI
80 + zz + R :14
A/WA − (R+)
BC ← BC − 1
*(2)*(1)1-
2
4. 4. -
*(2)*(1)1-
2
4n + 4
LDxx
[A/WA,(R+)]
83 + zz
83 + zz
BW-
CPIR
[A/WA,(R+)]
80 + zz + R :15
repeat
A/WA − (R+)
BC ← BC − 1
until A/WA = (R)
or BC = 0
BW-
CPD
[A/WA,(R−)]
80 + zz + R :16
A/WA − (R−)
BC ← BC − 1
*(2)*(1)1-
2
4. 4. -
80 + zz + R :17
repeat
A/WA − (R−)
BC ← BC − 1
until A/WA = (R)
or BC = 0
*(2)*(1)1-
2
4n + 4
CPxx
BW-
CPDR [A/WA,(R−)]
注 1)
(1): 命令実行後 BC = 0 なら P/V フラグは “0” に、それ以外は “1” にセットされます。
(2): A/WA = (R) なら Z フラグは “1” に、それ以外は “0” にセットされます。
注 2) CPI, CPIR, CPD, CPDR 命令でオペランドを省略したときは、“A, (XHL+/−)” を指定したこと
になります。
Page 154
TLCS-900H1 CPU
■
900/H1 命令一覧表 (3/10)
(4) 算術演算
命令群
コード (16 進 )
サイズ
BWL
BWL
BWL
BWL
BW-
ニモニック
ADD
R,r
ADD
r,#
ADD
R,(mem)
ADD
(mem),R
ADD<W> (mem),#
C8 + zz + r
C8 + zz + r
80 + zz + mem
80 + zz + mem
80 + zz + mem
:80 + R
:C8:#
:80 + R
:88 + R
:38:#
機能
R←R+r
r←r+#
R ← R + (mem)
(mem) ← (mem) + R
(mem) ← (mem) + #
***V0*
***V0*
***V0*
***V0*
***V0*
命令長 ステート
2
1. 1. 1
2+#
1. 1. 1
2+M
2. 2. 2
2+M
3. 3. 3
2 + M# 3. 3. -
ADC
BWL
BWL
BWL
BWL
BW-
ADC
ADC
ADC
ADC
ADC<W>
R,r
r,#
R,(mem)
(mem),R
(mem),#
C8 + zz + r
C8 + zz + r
80 + zz + mem
80 + zz + mem
80 + zz + mem
:90 + R
:C9:#
:90 + R
:98 + R
:39:#
R ← R + r + CY
r ← r + # ++ CY
R ← R + (mem) + CY
(mem) ← (mem) + R + CY
(mem) ← (mem) + # + CY
***V0*
***V0*
***V0*
***V0*
***V0*
2
2+#
2+M
2+M
2 + M#
1. 1. 1
1. 1. 1
2. 2. 2
3. 3. 3
3. 3. -
SUB
BWL
BWL
BWL
BWL
BW-
SUB
SUB
SUB
SUB
SUB<W>
R,r
r,#
R,(mem)
(mem),R
(mem),#
C8 + zz + r
C8 + zz + r
80 + zz + mem
80 + zz + mem
80 + zz + mem
:A0 + R
:CA:#
:A0 + R
:A8 + R
:3A:#
R←R-r
r←r-#
R ← R − (mem)
(mem) ← (mem) − R
(mem) ← (mem) − #
***V1*
***V1*
***V1*
***V1*
***V1*
2
2+#
2+M
2+M
2 + M#
1. 1. 1
1. 1. 1
2. 2. 2
3. 3. 3
3. 3. -
SBC
BWL
BWL
BWL
BWL
BW-
SBC
SBC
SBC
SBC
SBC<W>
R,r
r,#
R,(mem)
(mem),R
(mem),#
C8 + zz + r
C8 + zz + r
80 + zz + mem
80 + zz + mem
80 + zz + mem
:B0 + R
:CB:#
:B0 + R
:B8 + R
:3B:#
R ← R − r − CY
r ← r − # − CY
R ← R -(mem) − CY
(mem) ← (mem) − R − CY
(mem) ← (mem) − # − CY
***V1*
***V1*
***V1*
***V1*
***V1*
2
2+#
2+M
2+M
2 + M#
1. 1. 1
1. 1. 1
2. 2. 2
3. 3. 3
3. 3. -
CP
BWL
BWBWL
BWL
BWL
BW-
CP
CP
CP
CP
CP
CP<W>
R,r
r,#3
r,#
R,(mem)
(mem),R
(mem),#
C8 + zz + r
C8 + zz + r
C8 + zz + r
80 + zz + mem
80 + zz + mem
80 + zz + mem
:F0 + R
:D8 + #3
:CF:#
:F0 + R
:F8 + R
:3F:#
R−r
r − #3
r−#
R − (mem)
(mem) − R
(mem) − #
***V1*
***V1*
***V1*
***V1*
***V1*
***V1*
2
2
2+#
2+M
2+M
2 + M#
1. 1. 1
1. 1. 1. 1. 1
2. 2. 2
2. 2. 2
2. 2. -
INC
B--WL
BW-
INC
#3,r
INC
#3,r
INC<W> #3,(mem)
C8 + r
:60 + #3
C8 + zz + r
:60 + #3
80 + zz + mem :60 + #3
r ← r + #3
r ← r + #3
(mem) ← (mem) + #3
***V0-----***V0-
2
2
2+M
1. -. -. 1. 1
3. 3. -
DEC
B--WL
BW-
DEC
#3,r
DEC
#3,r
DEC<W> #3,(mem)
C8 + r
:68 + #3
C8 + zz + r
:68 + #3
80 + zz + mem :68 + #3
r ← r − #3
r ← r − #3
(mem) ← (mem) − #3
***V1-----***V1-
2
2
2+M
1. -. -. 1. 1
3. 3. -
NEG
BW-
NEG
r
C8 + zz + r
:07
r←0−r
***V1*
2
1. 1. -
EXTZ
-WL
EXTZ
r
C8 + zz + r
:12
r<high> ← 0
------
2
-. 1. 1
EXTS
-WL
EXTS
r
C8 + zz + r
:13
r<high> ← r<low.MSB>
------
2
-. 1. 1
DAA
B--
DAA
r
C8 + r
:10
加減算後の 10 進補正
***P-*
2
2. -. -
PAA
-WL
PAA
r
C8 + zz + r
:14
if r<0> = 1 then INC r
------
2
-. 3. 3
ADD
SZHVNC
注 ) INC/DEC 命令では、#3 のコード値が 0 のときは、+8/−8 として機能します。
Page 155
TLCS-900H1 CPU
■
命令群
900/H1 命令一覧表 (4/10)
サイズ
BWBWBW-
MUL
MUL
MUL
MULS
BWBWBW-
DIV
DIVS
MUL
MULA
コード (16 進 )
ニモニック
RR,r
rr,#
RR,(mem)
機能
RR ← R × r
rr ← r × #
RR ← R × (mem)
SZHVNC
C8 + zz + r
:40 + R
C8 + zz + r
:08:#
80 + zz + mem :40 + R
----------------
命令長 ステート
2
5. 9. 2+#
5. 9. 6.10. 2+M
MULS
MULS
MULS
RR,r
rr,#
RR,(mem)
C8 + zz + r
:48 + R
C8+ + zz + r
:09:#
80 + zz + mem :48 + R
RR ← R × r
; signed
rr ← r × #
; signed
RR ←R × (mem) ; signed
----------------
2
2+#
2+ + M
4. 8. 4. 8. 5. 9. -
BWBWBW-
DIV
DIV
DIV
RR,r
rr,#
RR,(mem)
C8 + zz + r
:50 + R
C8 + zz + r
:0A:#
80 + zz + mem :50 + R
R ← RR ÷ r
r ← rr ÷ #
R ← RR ÷ (mem)
---V----V----V--
2
2+#
2+M
11.19. 13.21. 14.22. -
BWBWBW-
DIVS
DIVS
DIVS
RR,r
rr,#
RR,(mem)
C8 + zz + r
:58 + R
C8 + zz + r
:0B:#
80 + zz + mem :58 + R
R ← RR ÷ r
; signed
r ← rr ÷ #
; signed
R ← RR ÷ (mem) ; signed
---V----V----V--
2
2+#
2+M
12.20. 14.22. 15.23. -
D8 + r
符号付き積和演算
rr ← rr + (XDE) × (XHL)
**-V--
2
-.12. -
:38:#-1
モジュロインクリメント ; +1
if (r mod #) = (# − 1)
then r ← r − (# − 1)
else r ← r + 1
------
4
-. 5. -
:39:#-2
モジュロインクリメント ; +2
if (r mod #) = (# − 2)
then r ← r − (# − 2)
else r ← r + 2
------
4
-. 5. -
:3A:#-4
モジュロインクリメント ; +4
if (r mod #) = (# − 4)
then r ← r − (# − 4)
else r ← r + 4
------
4
-. 5. -
:3C:#-1
モジュロデクリメント ; −1
if (r mod #) = 0
then r ← r + (# − 1)
else r ← r − 1
------
4
-. 4. -
:3D:#-2
モジュロデクリメント ; −2
if (r mod #) = 0
then r ← r + (# − 2)
else r ← r − 2
------
4
-. 4. -
:3E:#-4
モジュロデクリメント ; −4
if (r mod #) = 0
then r ← r + (# − 4)
else r ← r − 4
------
4
-. 4. -
-W-
MULA
rr
:19
32bit 32bit 16bit 16bit
XHL ← XHL − 2
MINC
MDEC
-W-
MINC1
#,r
(#=2**n)
(1<=n<=15)
-W-
MINC2
#,r
(#=2**n)
(2<=n<=15)
-W-
MINC4
#,r
(#=2**n)
(3<=n<=15)
-W-
MDEC1
#,r
(#=2**n)
(1<=n<=15)
-W-
MDEC2
#,r
(#=2**n)
(2<=n<=15)
-W-
MDEC4
#,r
(#=2**n)
(3<=n<=15)
D8 + r
D8 + r
D8 + r
D8 + r
D8 + r
D8 + r
注 ) MUL, MULS, DIV, DIVS 命令のオペランド “RR” は、演算サイズの倍のレジスタを指定すること
を示しています。演算サイズがバイトのとき (8 × 8 ビット , 16 ÷ 8 ビット ) は、ワードレジスタ
(16 ビット ) 指定し、演算サイズがワードのとき (16 × 16 ビット , 32 ÷ 16 ビット ) は、
ロングワー
ドレジスタ (32 ビット ) を指定します。
Page 156
TLCS-900H1 CPU
■
900/H1 命令一覧表 (5/10)
(5) 論理演算
命令群
コード (16 進 )
サイズ
BWL
BWL
BWL
BWL
BW-
ニモニック
AND
R,r
AND
r,#
AND
R,(mem)
AND
(mem),R
AND<w> (mem),#
C8 + zz + r
C8 + zz + r
80 + zz + mem
80 + zz + mem
80 + zz + mem
:C0+R
:CC:#
:C0 + R
:C8 + R
:3C:#
機能
R ← R and r
r ← r and #
R ← R and (mem)
(mem) ← (mem) and R
(mem) ← (mem) and #
**1P00
**1P00
**1P00
**1P00
**1P00
命令長 ステート
2
1. 1. 1
2+#
1. 1. 1
2+M
2. 2. 2
2+M
3. 3. 3
2 + M# 3. 3. -
OR
BWL
BWL
BWL
BWL
BW-
OR
OR
OR
OR
OR<W>
R,r
r,#
R,(mem)
(mem),R
(mem),#
C8 + zz + r
C8 + zz + r
80 + zz + mem
80 + zz + mem
80 + zz + mem
:E0 + R
:CE:#
:E0 + R
:E8 + R
:3E:#
R ← R or r
r ← r or #
R ← R or (mem)
(mem) ← (mem) or R
(mem) ← (mem) or #
**0P00
**0P00
**0P00
**0P00
**0P00
2
2+#
2+M
2+M
2 + M#
1. 1. 1
1. 1. 1
2. 2. 2
3. 3. 3
3. 3. -
XOR
BWL
BWL
BWL
BWL
BW-
XOR
XOR
XOR
XOR
XOR<W>
R,r
r,#
R,(mem)
(mem),R
(mem),#
C8 + zz + r
C8 + zz + r
80 + zz + mem
80 + zz + mem
80 + zz + mem
:D0 + R
:CD:#
:D0 + R
:D8 + R
:3D:#
R ← R xor r
r ← r xor #
R ← R xor (mem)
(mem) ← (mem) xor R
(mem) ← (mem) xor #
**0P00
**0P00
**0P00
**0P00
**0P00
2
2+#
2+M
2+M
2 + M#
1. 1. 1
1. 1. 1
2. 2. 2
3. 3. 3
3. 3. -
CPL
BW-
CPL
r
C8+zz+r
:06
r ← not r
--1-1-
2
1. 1. -
AND
Page 157
SZHVNC
TLCS-900H1 CPU
■
900/H1 命令一覧表 (6/10)
(6) ビット操作
命令群
コード (16 進 )
サイズ
BWBWB-B--
LDCF
LDCF
LDCF
LDCF
ニモニック
#4,r
A ,r
#3,(mem)
A ,(mem)
C8 + zz + r
C8 + zz + r
B0 + men
B0 + men
:23:#4
:2B
:98 + #3
:2B
CY ← r<#4>
CY ← r<A>
CY ← (mem)<#3>
CY ← (mem)<A>
-----*
-----*
-----*
-----*
命令長 ステート
3
1. 1. 2
1. 1. 2+M
3. -. 2+M
3. -. -
STCF
BWBWB-B--
STCF
STCF
STCF
STCF
#4,r
A ,r
#3,(mem)
A ,(mem)
C8 + zz + r
C8 + zz + r
B0 + mem
B0 + mem
:24:#4
:2C
:A0 + #3
:2C
r<#4> ← CY
r<A> ← CY
(mem)<#3> ← CY
(mem)<A> ← CY
---------------------
3
2
2+M
2+M
1. 1. 1. 1. 4. -. 4. -. -
ANDCF
BWBWB-B--
ANDCF
ANDCF
ANDCF
ANDCF
#4,r
A ,r
#3,(mem)
A ,(mem)
C8 + zz + r
C8 + zz + r
B0 + mem
B0 + mem
:20:#4
:28
:80 + #3
:28
CY ← CY and r<#4>
CY ← CY and r<A>
CY ← CY and (mem)<#3>
CY ← CY and (mem)<A>
-----*
-----*
-----*
-----*
3
2
2+M
2+M
1. 1. 1. 1. 3. -. 3. -. -
ORCF
BWBWB-B--
ORCF
ORCF
ORCF
ORCF
#4,r
A ,r
#3,(mem)
A ,(mem)
C8 + zz + r
C8 + zz + r
B0 + mem
B0 + mem
:21:#4
:29
:88 + #3
:29
CY ← CY or
CY ← CY or
CY ← CY or
CY ← CY or
r<#4>
r<A>
(mem)<#3>
(mem)<A>
-----*
-----*
-----*
-----*
3
2
2+M
2+M
1. 1. 1. 1. 3. -. 3. -. -
XORCF
BWBWB-B--
XORCF
XORCF
XORCF
XORCF
#4,r
A ,r
#3,(mem)
A ,(mem)
C8 + zz + r
C8 + zz + r
B0 + mem
B0 + mem
:22:#4
:2A
:90 + #3
:2A
CY ← CY xor r<#4>
CY ← CY xor r<A>
CY ← CY xor (mem)<#3>
CY ← CY xor (mem)<A>
-----*
-----*
-----*
-----*
3
2
2+M
2+M
1. 1. 1. 1. 3. -. 3. -. -
RCF
SCF
CCF
ZCF
---------
RCF
SCF
CCF
ZCF
CY ← 0
CY ← 1
CY ← not CY
CY ← not “Z” フラグ
--0-00
--0-01
--X-0*
--X-0*
1
1
1
1
1
1
1
1
BIT
BWB--
BIT
BIT
#4,r
#3,(mem)
C8 + zz + r
B0 + mem
:33:#4
:C8 + #3
Z ← not r<#4>
Z ← not (mem)<#3>
X*1X0X*1X0-
3
2+M
1. 1. 3. -. -
RES
BWB--
RES
RES
#4,r
#3,(mem)
C8 + zz + r
B0 + mem
:30:#4
:B0 + #3
r<#4> ← 0
(mem)<#3> ← 0
-----------
3
2+M
1. 1. 4. -. -
SET
BWB--
SET
SET
#4,r
#3,(mem)
C8 + zz + r
B0 + mem
:31:#4
:B8 + #3
r<#4> ← 1
(mem)<#3> ← 1
-----------
3
2+M
1. 1. 4. -. -
CHG
BWB--
CHG
CHG
#4,r
#3,(mem)
C8 + zz + r
B0 + mem
:32:#4
:C0 + #3
r<#4> ← not r<#4>
(mem)<#3> ← not
(mem)<#3>
-----------
3
2+M
1. 1. 4. -. -
TSET
BWB--
TSET
TSET
#4,r
#3,(mem)
C8 + zz + r
B0 + mem
:34:#4
:A8 + #3
Z ← not r<#4>:r<#4> ← 1
Z ← not (mem)<#3>
(mem)<#3> ← 1
X*1X0X*1X0-
3
2+M
3. 3. 6. -. -
BS1
-W-W-
BS1F
BS1B
A,r
A,r
D8 + r
D8 + r
:0E
:0F
A ← 1 サーチ r; Forward
A ← 1 サーチ r; Backward
---(1) ----(1) --
2
2
-. 1. -. 1. -
LDCF
10
11
12
13
機能
SZHVNC
注 ) (1): サーチするビットが見つかったとき “0” にセットされ、それ以外のときは “1” にセットされ
ます。
Page 158
TLCS-900H1 CPU
■
900/H1 命令一覧表 (7/10)
(7) 特別演算 , CPU 制御
命令群
NOP
サイズ
---
NOP
EI
---
EI
DI
---
DI
PUSH
-W-
PUSH
SR
POP
-W-
POP
SR
SWI
---
SWI
[#3]
コード (16 進 )
ニモニック
00
[#3]
機能
no operation
------
命令長 ステート
1
1
SZHVNC
06
:#3
割り込み許可フラグの設定
IFF ← #3
------
2
2
06
:07
割り込み禁止
IFF ← 7
------
2
2
02
(-XSP) ← SR
------
1
-. 2. -
03
SR ← (XSP+)
******
1
-. 7. -
F8+#3
ソフトウエア割り込み
PUSH PC&SR
JP (FFFF00H+4×#3)
------
1
9
HALT
---
HALT
05
CPU 停止
------
1
6
LDC
BWL
BWL
LDC
LDC
cr,r
r,cr
C8 + zz + r:2E:cr
C8 + zz + r:2F:cr
cr ← r
r ← cr
-----------
3
3
4. 4. 4
2. 2. 2
LINK
--L
LINK
r,d16
E8 + r
:0C:d16
PUSH r
LD r,XSP
ADD XSP,d16
------
4
-. -. 3
UNLK
--L
UNLK
r
E8 + r
:0D
LD XSP,r
POP r
------
2
-. -. 2
LDF
---
LDF
#2
17
:#2
------
2
6
INCF
---
INCF
0C
レジスタバンクの切り替え
RFP ← RFP + 1
------
1
6
DECF
---
DECF
0D
レジスタバンクの切り替え
RFP ← RFP − 1
------
1
6
SCC
BW-
SCC
C8 + zz + r:70 + cc
if cc then r ← 1
else r ← 0
------
2
2. 2. -
注 1)
EI 命令でオペランド #3 の記述を省略すると “0” を指定したものと見なされます。
cc,r
レジスタバンクの設定
RFP ← #2 ( リセット時 “0”)
注 2) SWI 命令でオペランド #3 の記述を省略すると “7” を指定したものと見なされます。
Page 159
TLCS-900H1 CPU
■
900/H1 命令一覧表 (8/10)
(8) ローテート , シフト
ニモニック
コード (16 進 )
命令群
サイズ
機能
RLC
BWL
BWL
BW-
RLC
#4,r
RLC
A,r
RLC<W> (mem)
C8 + zz + r
:E8:#4
C8 + zz + r
:F8
80 + zz + mem :78
RRC
BWL
BWL
BW-
RRC
#4,r
RRC
A,r
RRC<W> (mem)
C8 + zz + r
:E9:#4
C8 + zz + r
:F9
80 + zz + mem :79
RL
BWL
BWL
BW-
RL
RL
RL<W>
#4,r
A,r
(mem)
C8 + zz + r
:EA:#4
C8 + zz + r
:FA
80 + zz + mem :7A
RR
BWL
BWL
BW-
RR
RR
RR<W>
#4,r
A,r
(mem)
C8 + zz + r
:EB:#4
C8 + zz + r
:FB
80 + zz + mem :7B
SLA
BWL
BWL
BW-
SLA
#4,r
SLA
A,r
SLA<W> (mem)
C8 + zz + r
:EC:#4
C8 + zz + r
:FC
80 + zz + mem :7C
SRA
BWL
BWL
BW-
SRA
#4,r
SRA
A,r
SRA<W> (mem)
C8 + zz + r
:ED:#4
C8 + zz + r
:FD
80 + zz + mem :7D
SLL
BWL
BWL
BW-
SLL
SLL
SLL<W>
#4,r
A,r
(mem)
C8 + zz + r
:EE:#4
C8 + zz + r
:FE
80 + zz + mem :7E
SRL
BWL
BWL
BW-
SRL
#4,r
SRL
A,r
SRL<W> (mem)
C8 + zz + r
:EF:#4
C8 + zz + r
:FF
80 + zz + mem :7F
RLD
B--
RLD
[A,](mem)
80 + mem
:06
7-4
RRD
B--
RRD
[A,](mem)
80 + mem
:07
7-4
注 1)
#4/A によるシフト回数の指定では、モジュロ 16 (0~15) が使われます。コード 0 は、16 回シ
フトになります。
CY
MSB
MSB
CY
CY
CY
0
0
CY
MSB
MSB
CY
MSB
3-0
Areg
注 2) ステート数の計算で、少数点以下は切り上げます。
3-0
0
0
0
CY
MSB
Areg
Page 160
0
MSB
MSB
0
0
0
0
0
CY
SZHVNC
命令長 ステート
**0P0*
**0P0*
**0P0*
3
2
2+M
1 + n/4
1 + n/4
3. 3. -
**0P0*
**0P0*
**0P0*
3
2
2+M
1 + n/4
1 + n/4
3. 3. -
**0P0*
**0P0*
**0P0*
3
2
2+M
1 + n/4
1 + n/4
3. 3. -
**0P0*
**0P0*
**0P0*
3
2
2+M
1 + n/4
1 + n/4
3. 3. -
**0P0*
**0P0*
**0P0*
3
2
2+M
1 + n/4
1 + n/4
3. 3. -
**0P0*
**0P0*
**0P0*
3
2
2+M
1 + n/4
1 + n/4
3. 3. -
**0P0*
**0P0*
**0P0*
3
2
2+M
1 + n/4
1 + n/4
3. 3. -
**0P0*
**0P0*
**0P0*
3
2
2+M
1 + n/4
1 + n/4
3. 3. -
**0P0-
2+M
8. -. -
**0P0-
2+M
8. -. -
mem
7-4
3-0
mem
7-4
3-0
TLCS-900H1 CPU
■
900/H1 命令一覧表 (9/10)
(9) ジャンプ , コール , リターン
命令群
サイズ
-----------
JP
JP
JR
JRL
JP
CALL
---------
CALL
CALL
CALR
CALL
DJNZ
BW-
RET
---------
JP
ニモニック
#16
#24
[cc,]$ + 2 + d8
[cc,]$+ + 3 + d16
[cc,]mem
コード (16 進 )
1A
1B
60+cc
70+cc
B0+mem
:#16
:#24
:d8
:d16
:DO + cc
PC ← #16
PC ← #24
if cc then PC ← PC + d8
if cc then PC ← PC + d16
if cc then PC ← mem
--------------------------
命令長
3
4
2
3
2+M
2
2
2/1 (T/F)
2/1 (T/F)
3 (T/F)
1C
1D
1E
B0+mem
:#16
:#24
:d16
:E0 + cc
PUSH PC:JP #16
PUSH PC:JP #24
PUSH PC:JR $ + 3 + d16
if cc then
PUSH PC:JP mem
---------------------
3
4
3
2+M
4
4
5
6/3 (T/F)
DJNZ [r,]$ + 3/4 + d8
C8+zz+r
:1C:d8
r ← r − 1 (r 省略で B レジ
スタ )
if r ≠ 0 then JR $ + 3 + d8
------
3
2 (r ≠ 0)
1 (r = 0)
RET
RET cc
RETD d16
RETI
0E
B0
0F
07
:F0 + cc
:d16
POP PC
if cc then POP PC
RET:ADD XSP,d16
POP SR&PC
---------------******
1
2
3
1
4
7/3 (T/F)
5
9
#16
#24
$ + 3 + d16
[cc,]mem
機能
注 ) (T/F) は True/False 時のステート数を表しています。
Page 161
SZHVNC
ステート
TLCS-900H1 CPU
■
900/H1 命令一覧表 (10/10)
(10) アドレッシングモード
分類
R
モード
R
r
(mem)
ステート ( 追加分 )
+0
r
+0
(R)
+0
(R + d8)
+0
(#8)
+0
(#16)
+0
(#24)
+0
(r)
+0
(r + d16)
+1
(r + r8)
+1
(r + r16)
+1
(−r)
+1
(r+)
+1
(11) 割り込み
モード
汎用割り込み処理
マイクロ DMA
動作
PUSH PC
PUSH SR
IFF ← 受け付けレベル + 1
INTNEST ← INTNEST + 1
JP (FFFF00H + ベクタ )
ステート
9
I/O to MEM
(DMADn+) ← (DMASn)
5. 5. 5
I/O to MEM
(DMADn−) ← (DMASn)
5. 5. 5
MEM to I/O
(DMADn) ← (DMASn+)
5. 5. 5
MEM to I/O
(DMADn) ← (DMASn−)
5. 5. 5
MEM to MEM
(DMADn+) ← (DMASn+)
6. 6. 6
MEM to MEM
(DMADn−) ← (DMASn−)
6. 6. 6
I/O to I/O
(DMADn) ← (DMASn)
5. 5. 5
Counter
DMASn ← DMASn+1
5
Page 162
TLCS-900H1 CPU
付録 C. 900/H1 命令コードマップ
■
900/H1 命令コードマップ (1/4)
1 バイトオペコード命令
H/L
0
0
NOP
1
RCF
1
SCF
2
3
PUSH
SR
POP
SR
4
CCF
ZCF
PUSH
A
5
6
7
HALT
EI
n
RETI
LD
PUSH LDW
(n), n
n
(n), nn
8
9
POP
A
EX
F, F’
LDF
n
PUSH
F
POP
F
A
JP
nn
B
C
D
E
F
PUSHW
INCF
DECF
RET
RETD
dd
CALL
nn
CALL CALR
nnn PC+dd
nn
JP
nnn
2
LD
R, n
PUSH RR
3
LD
RR, nn
PUSH XRR
4
LD
XRR, nnnn
POP
RR
POP
XRR
5
6
JR
F
LT
LE
ULE
PE/OV
M/MI
Z
7
cc, PC+d
C
(T)
JRL
GE
GT
UGT
(XDE
+d)
(XHL
+d)
P/PL
NZ
NC
(XIY
+d)
(XIZ
+d)
(XSP
+d)
E
H
L
IX
IY
IZ
SP
XIX
XIY
XIZ
XSP
4
5
6
7
PO/NOV
cc, PC+dd
↑
8
src. B
(XWA) (XBC) (XDE) (XHL)
(XIX)
src. B
(XIY)
(XIZ)
(XWA
(XSP)
+d)
(XBC
+d)
(XIX
+d)
9
src. W
↑
src. W
↑
A
src. L
↑
src. L
↑
B
dst
↑
dst
↑
C
src. B
(n)
(nn)
(nnn) (mem) (−xrr)
D
src. W
E
src. L
F
dst
↑
↑
(xrr+)
reg. B
r
reg. W
rr
reg. L
xrr
A
B
C
D
reg. W
WA
BC
DE
HL
reg. L
XWA
XBC
XDE
XHL
SWI
↑
注 1)
reg. B
W
0
1
2
3
n
空白部分のコードは、未定義命令です。
注 2) コード 1FH にはダミーの命令が実装されています。使用しないでください。
Page 163
TLCS-900H1 CPU
■
900/H1 命令コードマップ (2/4)
1 バイト目 : reg
H/L
0
1
2
3
4
0
1
2
3
LD
4
PUSH
r,#
r
EXTZ EXTS PAA
WL
WL
WL
r
r
r
r
ANDCF ORCF XORCF LDCF STCF
BW
#, r
#, r
#, r
#, r
#, r
RES
SET CHG
BIT TSET
BW
#, r
#, r
#, r
#, r
#, r
MUL
R, r
5
POP
r
DAA B
5
6
8
1
2
F
LT
LE
DIV
R, r
INC
3
#3, r
4
5
6
CPL
BW
r
MIRR
W
r
6
ULE PE/OV M/MI
ADD
R, r
9
ADC
R, r
A
SUB
R, r
B
SBC
R, r
C
AND
R, r
D
XOR
R, r
E
OR
R, r
F
CP
R, r
r:
B
C
D
E
F
DIVS LINK L UNLKL BS1F BS1B
W
BW
W
rr,#
A, r
r, dd
r
A, r
rr,#
rr,#
rr,#
MULA
DJNZ
W
BW
r
r, d
ANDCF ORCF XORCF LDCF STCF
LDC
LDC
BW
A, r
A, r
A, r
A, r
A, r
cr, r
r, cr
MDEC1 MDEC2 MDEC4
MINC1 MINC2 MINC4
Z
8
MUL
9
MULS
A
DIV
#, r
W
#, r
W
BW
MULS
R, r
BW
BW
DIVS
R, r
BW
DEC
3
#3, r
4
5
6
UGT
LD
PO/NOV
P/PL
NZ
LD
r, R
LD
3
EX
r, #3
4
R, r
5
6
SBC
r, #
CP
3
RR
#, r
RR
A, r
AND
r, #
r, #3
4
SLA
#, r
SLA
A, r
XOR
r, #
OR
r, #
5
SRA
#, r
SRA
A, r
6
SLL
#, r
SLL
A, r
7
SCC
C
7
8
7
NEG
BW
r
8
cc, r
(T)
1
2
GE
GT
0
1
2
ADD
r, #
ADC
r, #
SUB
r, #
0
RLC
#, r
RLC
A, r
1
RRC
#, r
RRC
A, r
2
RL
#, r
RL
A, r
7
BW
NC
R, r
7
BW
CP
r, #
BW
7
SRL
#, r
SRL
A, r
1バイト目のコードで指定されるレジスタを示します (すべてのCPU内部レジスタが指定可能で
す )。
R: 2 バイト目のコードで指定されるレジスタを示します ( カレントレジスタ 8 本のみ指定可能です
)。
B:
オペランドサイズは、バイト型です。
W: オペランドサイズは、ワード型です。
L:
オペランドサイズは、ロング型です。
注 ) コード 1AH, 1BH, 1DH, 1EH, 1FH, 3BH, 3FH にはダミーの命令が実装されています。使用しな
いでください。
Page 164
TLCS-900H1 CPU
■
900/H1 命令コードマップ (3/4)
1 バイト目 : src (mem)
H/L
0
1
2
3
0
4
5
PUSH
BW
(mem)
1
LDI
LDIR
LDD
LDDR
BW
CPI
6
7
RLD
RRD B
8
9
A
B
C
D
E
F
SUB
SBC
AND
XOR
OR
CP BW
A,(mem)
CPIR
2
LD
R, (mem)
3
EX
(mem), R
CPD
CPDR
BW
LD BW
(nn), (m)
BW ADD
ADC
(mem), #
4
MUL
R, (mem)
BW
MULS R, (mem)
BW
5
DIV
R, (mem)
BW
DIVS
R, (mem)
BW
INC
#3, (mem)
DEC
#3, (mem)
6
8
1
2
3
4
BW
5
6
7
7
8
1
2
3
RLC
RRC
RL
RR
5
6
7
SLA
SRA
SLL
SRL BW
(mem)
8
ADD
R, (mem)
ADD
(mem), R
9
ADC
R, (mem)
ADC
(mem), R
A
SUB
R, (mem)
SUB
(mem), R
B
SBC
R, (mem)
SBC
(mem), R
C
AND
R, (mem)
AND
(mem), R
D
XOR
R, (mem)
XOR
(mem), R
E
OR
R, (mem)
OR
(mem), R
F
CP
R, (mem)
CP
(mem), R
B:
オペランドサイズは、バイト型です。
W: オペランドサイズは、ワード型です。
Page 165
BW
4
TLCS-900H1 CPU
■
900/H1 命令コードマップ (4/4)
1 バイト目 : dst (mem)
H/L
0
0
LD B
(m), #
1
2
3
LD W
(m), #
4
5
POP B
(mem)
1
6
7
8
9
A
B
C
XORCF
LDCF
STCF B
D
E
F
6
7
6
7
6
7
6
7
POP W
(mem)
LD B
LD W
(m), (nn)
(m), (nn)
2
LDA
R, mem
W ANDCF ORCF
3
LDA
R, mem
L
4
LD
(mem), R
B
5
LD
(mem), R
W
6
LD
(mem), R
L
A, (mem)
7
8
ANDCF
1
2
0
1
2
0
1
2
0
1
2
0
1
2
3
4
F
LT
LE
ULE
PE/OV
9
3
#3, (mem)
0
XORCF
A
3
STCF
B
3
RES
C
3
CHG
4
5
B
6
7
6
7
6
7
6
7
5
6
7
M/MI
Z
#3, (mem)
4
5
5
4
5
0
1
2
0
1
2
0
1
2
0
1
2
3
4
5
6
7
GT
UGT
PO/NOV
P/PL
NZ
NC
LDCF
TSET
JP
CALL
F
RET
5
#3, (mem)
4
5
B
#3, (mem)
4
5
B
#3, (mem)
4
5
B
#3, (mem)
B
cc, mem
C
E
3
BIT
B
D
3
SET
B
#3, (mem)
3
4
B
2
B
#3, (mem)
3
#3, (mem)
1
B
#3, (mem)
4
ORCF
0
(T)
GE
cc, mem
↑
cc (1 バイト目のコードは B0H)
↑
B:
オペランドサイズは、バイト型です。
W: オペランドサイズは、ワード型です。
L:
オペランドサイズは、ロング型です。
注 ) コード 01H, 05H, 15H にはダミーの命令が実装されています。使用しないでください。
Page 166