TLCS-870/C1シリーズ CPU

Similar documents
TLCS-870/C1シリーズ命令セット

スライド 1

命令セットの構成例 a) 算術 演算命令 例 )ADD dest, source : dest dest + source SUB dest, source : dest dest - source AND dest, source : dest dest AND source SHR reg, c

コンピュータ工学Ⅰ

コンピュータ工学Ⅰ

目次 [ はじめに ] 1 [1] レジスタについて 1 [2] 8ビット転送命令 1 1. MOV 1, MOV,M 2 3. MOV M, 2 4. MVI,B MVI M,B LDAX B 2 7. LDAX D 2 8. LDA NN 2 9. STAX

スライド 1

ex04_2012.ppt

PowerPoint プレゼンテーション

スライド 1

TOSHIBA CORPORATION 2009 All Rights Reserved

スライド 1

ソフトウェア基礎技術研修

PowerPoint プレゼンテーション

2.RL78 での割り込み処理 ( 割り込み受け付け ) マスクが解除された (xxmk ビットが 0 の ) 割り込み要求信号は 2 つの用途で使用されます 一つ目は,CPU のスタンバイ状態の解除です この動作は, 割り込み優先順位とは全く無関係で, マスクされていない (xxmk=0 の )

Microsoft Word - マイコン実験 doc

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

Microsoft PowerPoint - ProcML-12-3.ppt

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

計算機アーキテクチャ

スライド 1

39733a.fm

ex05_2012.pptx

Microsoft PowerPoint - 01-VerilogSetup-2019.pptx

Microsoft PowerPoint - kougi7.ppt

スライド 1

Microsoft PowerPoint ppt

1.1 ラベル ラベルはカラム 1 から始まらなければならない ラベルの後にはコロン スペース タブ 改行が続いてよい ラベルはアルファベットかアンダーバーで始まり 英数字 アンダーバー クエスチョンマークを含んでよい ラベルは 32 文字までである デフォルトではこれらは大文字と小文字を区別するが

スライド 1

2ALU 以下はデータ幅 4ビットの ALU の例 加算, 減算,AND,OR の4つの演算を実行する 実際のプロセッサの ALU は, もっと多種類の演算が可能 リスト 7-2 ALU の VHDL 記述 M use IEEE.STD_LOGIC_1164.ALL; 00 : 加算 use IEE

スライド 1

主記憶の使われ方 システム領域 SP スタックポインタ システム用 スタック用 プログラム起動時に OS によって確 保される (SP が決められる ) プログラム用 メインルーチン プログラム領域 命令コードの列定数 変数用領域サブルーチン命令コードの列 先頭番地は リンク時に OS によって決め

PowerPoint プレゼンテーション

TOSHIBA CORPORATION 2009 All Rights Reserved

スライド 1

Microsoft PowerPoint - 7.Arithmetic.ppt

1 8 Z80 Z GBA ASIC 2 WINDOWS C 1

初心者のための RL78 入門コース ( 第 3 回 : ポート出力例 2 とポート入力 ) 第 3 回の今回は, 前回作成したプログラムを RL78/G13 のハードウェアを用いて見直しをお こないます 今回の内容 8. コード生成を利用した実際のプログラム作成 ( その 2) P40 9. コー

PowerPoint Presentation

スライド 1

RL78/G13 制限事項について

J-TMP86CK74AFG_Customer.book

C に必要なコンピュータ知識 C はコンピュータの力を引き出せるように設計 コンピュータの知識が必要

Microsoft PowerPoint ppt

Microsoft PowerPoint - 11Web.pptx

SH-2, SH-2A 固定小数点ライブラリ (Ver. 1.02) 活用ガイド<コンパイラ活用ガイド>

Microsoft PowerPoint - H2.ppt [互換モード]

目次 1. はじめに 1 2. マルチALUプロセッサ MAP MAP の構成 MAP 命令セットアーキテクチャ 並列 連鎖判定のアルゴリズムについて 5 3. Booth 乗算のアルゴリズム 次 Booth アルゴリズム 次 Bo

Microsoft Word - dg_sataahciip_refdesign_jp.doc

i コロナ社 AND OR NOT SRAM IC

Microsoft PowerPoint - Kozos12step_07_

Microsoft PowerPoint - Sol7 [Compatibility Mode]

スライド 1

Microsoft PowerPoint - Chap2 [Compatibility Mode]

MODBUS ユーザーズマニュアル 페이지 1 / 23

スライド 1

CS+ V 統合開発環境 ユーザーズマニュアル RL78 デバッグ・ツール編

スライド 1

問 2. タイミングチャート以下に示す VHDL コードで記述されている回路に関するタイミングチャートを完成させよ ) レジスタの動作 use IEEE.std_logic_64.all; entity RegN is generic (N : integer := 8 port ( CLK, EN

MMUなしプロセッサ用Linuxの共有ライブラリ機構

ブート領域、フラッシュ領域の分割方法 RL78ファミリ用Cコンパイラ CC-RL

C プログラミング 1( 再 ) 第 5 回 講義では C プログラミングの基本を学び演習では やや実践的なプログラミングを通して学ぶ

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

も 常に 2 つのコイルに電圧を印加する 2 層励磁方式や 1 つのコイルと 2 つのコイルに交互に電圧を印 2

Microsoft Word - HW06K doc

PowerPoint プレゼンテーション

Microsoft PowerPoint - Chap4 [Compatibility Mode]

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

Microsoft PowerPoint - OS09.pptx

この方法では, 複数のアドレスが同じインデックスに対応づけられる可能性があるため, キャッシュラインのコピーと書き戻しが交互に起きる性のミスが発生する可能性がある. これを回避するために考案されたのが, 連想メモリアクセスができる形キャッシュである. この方式は, キャッシュに余裕がある限り主記憶の

.,. 0. (MSB). =2, =1/2.,. MSB LSB, LSB MSB. MSB 0 LSB 0 0 P

10-vm1.ppt

ディジタルシステム設計

CASL入門

また RLF 命令は 図 2 示す様に RRF 命令とは逆に 各ビットを一つずつ 左方向に回転 ( ローテイト ) する命令である 8 ビット変数のアドレスを A とし C フラグに 0 を代入してから RLF A,1 を実行すると 変数の内容が 左に 1 ビットシフトし 最下位ビット (LSB)

JavaプログラミングⅠ

Section 36. Programmable Cyclic Redundancy Check (CRC)

PowerPoint Presentation

PIC24F Family Reference Manual Section 9 WDT

PowerPoint プレゼンテーション

ND80ZⅢ応用プログラムq

プログラミング実習I

Virtex-6 Clocking

04-process_thread_2.ppt

TMP86FH47BUG

DRAM SRAM SDRAM (Synchronous DRAM) DDR SDRAM (Double Data Rate SDRAM) DRAM 4 C Wikipedia 1.8 SRAM DRAM DRAM SRAM DRAM SRAM (256M 1G bit) (32 64M bit)

PowerPoint プレゼンテーション

Microsoft PowerPoint - OS08.pptx

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

AN1526 RX開発環境の使用方法(CS+、Renesas Flash Programmer)

PowerPoint プレゼンテーション

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

電磁流量計 WZ-C Modbus RTU 通信仕様書 ver.8.225

AN-1077: ADXL345 Quick Start Guide

CASL入門

UIOUSBCOM.DLLコマンドリファレンス

MP_slide_ja

Microsoft Word - no02.doc

                 ZB11W取扱説明書

MSP430 CCSv5 を使い Flash Memory 内容と version 情報を確認する方法 ( テクニック編 ) Rev: PIC Trout 今回は 下記の2 件について説明します 1) CCSv5 を使用して MSP430 の Flash Memory 内容を

Transcription:

シリーズ CPU セミコンダクター社

CMOS 8 ビットマイクロコンピュータ TLCS-870/C1 シリーズ TLCS-870/C1 シリーズは 東芝オリジナルのコンパクトで高速 / 高機能, 低消費電力の 8 ビットシングルチップマイクロコンピュータです 特長 直交性のある豊富な命令セット : 133 種 732 命令東芝オリジナルマイクロコントローラ TLCS-870/C とバイナリレベルでのコンパチビリティを持たせており 小規模システム向けに最適化した命令セットで C コンパイラに向いています - 乗除算 (8 ビット 8 ビット, 16 ビット 8 ビット ) - ビット操作 (Set/Clear/Complement/Load/Store/Test/Exclusive OR) - 16 ビット演算 / 転送 - 1 バイト長のジャンプ / コール (Short relative jump/vector call) レジスタ構成 ( メモリ空間から独立 ) 8 ビット /16 ビット汎用レジスタを 2 バンク化 - 汎用レジスタ : 8 ビット幅 8 本 (16 ビット幅 4 本としても使用可 ) 2-16 ビット汎用レジスタ : 16 ビット幅 2 本 2 - プログラムカウンタ : 16 ビット幅 1 本 - スタックポインタ : 16 ビット幅 1 本 - プログラムステータスワード : 7 ビット幅 1 本 メモリ空間 コード領域 : 最大 64K バイト データ領域 : 最大 64 K バイト メモリマップド I/O 方式 割り込み - 最大 62 要因まで対応可 ( リセットを除く ) - エッジ選択 ノイズ除去機能付き外部割り込み入力 低消費電力動作モード ( 最大 9 種のモード ) - STOP モード : 動作停止 ( バッテリー / コンデンサバックアップ ) - SLOW1 モード : 低周波クロックによる低周波動作 ( 高周波停止 ) - SLOW2 モード : 低周波クロックによる低周波動作 ( 高周波発振 ) - IDLE0 モード : CPU 停止 周辺ハードウエアのうち タイムベースタイマのみ動作 ( 高周波クロック ) 継続し タイムベースタイマ設定の基準時間経過により解除 - IDLE1 モード : CPU 停止 周辺ハードウエアのみ動作 ( 高周波クロック ) 割り込みにより解除 (CPU 再起動 ) - IDLE2 モード : CPU 停止 周辺ハードウエアのみ動作 ( 高周波 / 低周波クロック ) 割り込みにより解除 (CPU 再起動 ) - SLEEP0 モード : CPU 停止 周辺ハードウエアのうち タイムベースタイマ (TBT) のみ動作 ( 低周波クロック ) 継続し タイムベースタイマ設定の基準時間経過により解除 - SLEEP1 モード : CPU 停止 周辺ハードウエアのみ動作 ( 低周波クロック ) 割り込みにより解除 クロックギア ( 逓倍 分周 ) 高速処理 Page 1

低電圧 / 高速動作 フェイルセーフ機能 - ウォッチドッグタイマ ( リセット or 割り込み ) - システムクロックリセット - 未定義命令割り込み - ソフトウエア割り込み ブロック図 CPU ALU PSW W A W A B C B C D E D E H L H L IX IX SP IY IY PC RAM ROM ) PSW: Page 2

第 1 章 動作説明 1.1 CPU コア機能 1.1.1 メモリマップ TLCS-870/C1 シリーズのメモリマップは コード領域とデータ領域の 2 つに分けられます 1.1.1.1 コード領域 コード領域は最大 64K バイトの領域で 命令のオペコード, オペランドの他に ベクタコール命令用ベクタテーブル 割り込みベクタテーブルが格納されます 0x0000 // 0xFF5F 0xFF60 0xFF61 0xFF62 0x62 INTXXX ; PC 0xD862 0xD8 0xFF9F 0xFFA0 0xFFA1 0xFFA2 0x56 CALLV 0H ; PC 0xC856 0xC8 0xFFBF 0xFFC0 0xFFC1 0xFFC2 0x68 INTXXX ; PC 0xD368 0xD3 0xFFFD 0xFFFE 0xFFFF 0x3E RESET ; PC 0xC03E 0xC0 図 1-1 コード領域 ( メモリスタイル :64K バイト時 ) Page 3

第 1 章動作説明 1.1 CPU コア機能 TLCS-870/C1 0x10000 // 0x1FF5F 0x1FF60 0x1FF61 0x1FF62 0x62 INTXXX ; PC 0xD862 0xD8 0x1FF9F 0x1FFA0 0x1FFA1 0x1FFA2 0x56 CALLV 0H ; PC 0xC856 0xC8 0x1FFBF 0x1FFC0 0x1FFC1 0x1FFC2 0x68 INTXXX ; PC 0xD368 0xD3 0x1FFFD 0x1FFFE 0x1FFFF 0x3E RESET ; PC 0xC03E 0xC0 図 1-2 コード領域 ( メモリスタイル :96K, 128K バイト時 ) (1) ベクタコール命令用ベクタテーブル ベクタコール命令用ベクタテーブルは ベクタコール命令 [CALLV n] 用のベクタ ( サブルーチンエントリーアドレス, 2 バイト / ベクタ ) を格納するテーブルで 16 ベクタあります ベクタコール命令用ベクタテーブルは メモリスタイルに従って以下の領域に割り当てられます メモリスタイル 64K バイト 96K バイト 128K バイト ベクタコール命令用ベクタテーブル領域 0xFFA0 ~ 0xFFBF 0x1FFA0 ~ 0x1FFBF 通常コール命令 [CALL mn] は 一つの命令に 3 バイト長の ROM 容量が必要ですが ベクタコール命令 [CALLV n] は 1 バイト長の命令のため 使用頻度の高いサブルーチンコールに使うことによりメモリ効率を上げることができます CALLV 命令 CALL 命令 1 箇所から CALL 1 + 2 = 3 バイト 3 バイト CALLV と CALL の効率同じ 2 箇所から CALL 2 + 2 = 4 バイト 6 バイト CALLV の方が効率良い 3 箇所から CALL 3 + 2 = 5 バイト 9 バイト 4 箇所から CALL 4 + 2 = 6 バイト 12 バイト *CALLV の +2 はベクタコール領域に配置されたジャンプ先アドレスの 2 バイト Page 4

ベクタコール ( メモリスタイルが 64K バイトの場合 ) CALLV で呼ばれる定数を 2 倍して 0xFFA0 を加えた値をアドレスとするメモリから呼び出した 16 ビットアドレスにジャンプします CALLV 0x02 PSUB _ 2: LD (HL),A DEC A VECTOR _ CALL section code abs = 0xFFA0 DW PSUB _ 0 ; 0x00 DW PSUB _ 1 ; 0x01 DW PSUB _ 2 ; 0x02 最大 16 個 DW PSUB _ F ; 0x0F ベクタコール ( メモリスタイルが 96K, 128K バイトの場合 ) CALLV で呼ばれる定数を 2 倍して 0x1FFA0 を加えた値をアドレスとするメモリから呼び出した 16 ビットアドレスにジャンプします CALLV 0x02 PSUB _ 2: LD (HL),A DEC A VECTOR _ CALL section code abs = 0x1FFA0 DW code _ addr(psub _ 0) ; 0x00 DW code _ addr(psub _ 1) ; 0x01 DW code _ addr(psub _ 2) ; 0x02 最大 16 個 DW code _ addr(psub _ F) ; 0x0F (2) 割り込みベクタテーブル 割り込みベクタテーブルは リセットおよび割り込みのベクタ (2 バイト / ベクタ ) を格納するテーブルで 最大 63 ベクタあります 割り込みベクタテーブルは メモリスタイルに従って以下の領域に割り当てられます ベクタには リセット解除からのスタートアドレス, 割り込みサービスルーチンのエントリアドレスを格納します メモリスタイル 64K バイト 96K バイト 128K バイト 割り込みベクタテーブル領域 0xFF60 ~ 0xFF9F, 0xFFC0 ~ 0xFFFF 0x1FF60 ~ 0x1FF9F, 0x1FFC0 ~ 0x1FFFF 1.1.1.2 データ領域 データ領域には転送命令 演算命令などのソースまたはディスティネーションとしてアクセスされるデータが格納されます なお データ領域のアドレス0x00000 ~ 0x000FF ( メモリスタイルが64Kバイトのときは0x0000 ~ 0x00FF) はダイレクト領域となっています この領域に対しては 実行時間を短縮した命令による処理が可能です Page 5

第 1 章動作説明 1.1 CPU コア機能 TLCS-870/C1 0x0000 0x003F 0x0040 0x0E3F 0x0E40 0x0EFF 0x0F00 0x0FFF 0x1000 SFR1 (64byte) RAM (3584byte) SFR3 (192byte) SFR2 (256byte) ROM (61440byte) 0xFFFF 図 1-3 データ領域 ( メモリスタイル :64K バイト時 ) 0x00000 0x0003F 0x00040 0x00E3F 0x00E40 0x00EFF 0x00F00 0x00FFF 0x01000 SFR1 (64byte) RAM (3584byte) SFR3 (192byte) SFR2 (256byte) ROM (61440byte) 0x0FFFF 図 1-4 データ領域 ( メモリスタイル :96K, 128K バイト時 ) Page 6

1.1.2 汎用レジスタ TLCS-870/C1 は 8 つの 8 ビット汎用レジスタ W, A, B, C, D, E, H, L を各 BANK に 1 組づつ 計 2BANK 内蔵しています 各レジスタは WA, BC, DE, HL のペアで 16 ビットレジスタとしても使用できます 汎用レジスタはアドレス空間にはマッピングされていません また 汎用レジスタは電源投入時及びリセット時の値は不定となります W BANK0 A W BANK1 A B C B C D E D E H L H L 8 8 16 16 図 1-5 汎用レジスタ W, A, B, C, D, E, H, L は 8 ビットの転送 演算に WA, BC, DE, HL は 16 ビットの転送 演算に用いられます また 汎用レジスタとしての機能のほかに 次の機能を有しています 1.1.2.1 A レジスタ A レジスタは レジスタ間接ビット指定のビット操作命令における ビット指定レジスタとして使用されます 1 SET (0x56).A ; 0x00056 番地 ( メモリスタイルが 64K バイトのときは 0x0056 番地 ) の A の内容で指定されるビットを 1 にセットします 2 CPL (IX + 0x03).A ; IX に即値 0x03 を符号拡張加算した値で指定されるアドレスのメモリの A の内容で指定されるビットを反転します また レジスタオフセット相対アドレッシング (PC + A) のオフセットレジスタとしても使用されます LD A, (PC + A) ; PC に A の内容を符号拡張加算した値で指定される アドレスのメモリの内容を A にロードします 1.1.2.2 C レジスタ C レジスタは 除算命令における除数レジスタとして使用されます 除算命令実行後に被除数の上位バイトに余りが 被除数の下位バイトに商がそれぞれ格納されます DIV WA, C ; A WA C, W 余り Page 7

第 1 章動作説明 1.1 CPU コア機能 TLCS-870/C1 また レジスタオフセット相対アドレッシング (HL + C) オフセットレジスタとしても使用されます LD A, (HL + C) ; HL に C の内容を符号拡張加算した値で指定される アドレスのメモリの内容を A にロードします 1.1.2.3 DE レジスタ DE レジスタは レジスタ間接アドレッシングのアドレス指定レジスタとして使用されます LD A, (DE) ; DE で指定されるアドレスのメモリの内容を A に ロードします 1.1.2.4 HL レジスタ HL レジスタは レジスタ間接アドレッシングのアドレス指定レジスタ, インデックスアドレッシングのインデックスレジスタとして使用されます 1 LD A, (HL) ; HL で指定されるアドレスのメモリの内容を A にロードします 2 LD A, (HL + 0x52) ; HL に即値 0x52 を符号拡張加算した値で指定される アドレスのメモリの内容を A にロードします 3 LD A, (HL + C) ; HL に C の内容を符号拡張加算した値で指定される アドレスのメモリの内容を A にロードします 1.1.3 16 ビット汎用レジスタ (IX, IY) TLCS-870/C1 は 2 つの 16 ビット汎用レジスタ IX, IY を各 BANK に 1 組づつ 計 2BANK 内蔵しています これらは 16 ビット長のレジスタで レジスタ間接アドレッシングのアドレス指定レジスタ, インデックスアドレッシングのインデックスレジスタとして使用されます 16 ビット汎用レジスタは 電源投入時及びリセット時の値は不定となります BANK0 IX IY 16 BANK1 IX IY 16 図 1-6 16 ビット汎用レジスタ Page 8

1 LD A, (IX) ; IX で指定されるアドレスのメモリの内容を A に ロードします 2 LD A, (IY + 0x52) ; IY に即値 0x52 を符号拡張加算した値で指定される アドレスのメモリの内容を A にロードします また 16 ビット長の汎用レジスタとして 転送 演算に使用することもできます 1 LD IX, (0x3A) ; IX に 0x0003A, 0x0003B 番地の内容をロードします ( メモリスタイルが 64K バイトのときは 0x003A, 0x003B) 2 ADD IX, 0x5678 ; IX に即値 0x5678 を加算し 結果を IX に格納します Page 9

第 1 章動作説明 1.1 CPU コア機能 TLCS-870/C1 1.1.4 プログラムステータスワード (PSW) プログラムステータスワードは ジャンプステータスフラグ (JF) ゼロフラグ (ZF) キャリーフラグ (CF) ハーフキャリーフラグ (HF) サインフラグ (SF) オーバフローフラグ (VF) レジスタバンクセレクタ (RBS) の 7 つのフラグから構成され SFR 内の 0x0003F 番地 ( メモリスタイルが 64K バイトのときは 0x003F) に割り付けられています PSW のアクセスは 専用命令で行います また メモリアクセス命令で読み出すこともできます PSW の構成 PSW (0x003F) 7 6 5 4 3 2 1 0 JF ZF CF HF SF VF RBS - フラグは 命令で指定される条件に従いセット / クリアされます また レジスタバンクセレクタと ハーフキャリーフラグ以外のフラグは条件付きジャンプ命令 [JR cc, a], [JRS cc, a] のジャンプ条件 cc となり得ます cc 意味 条件 T True JF = 1 F False JF = 0 Z Zero ZF = 1 NZ Not zero ZF = 0 CS Carry set CF = 1 CC Carry clear CF = 0 VS Overflow set VF = 1 VC Overflow clear VF = 0 M Minus SF = 1 P Plus SF = 0 EQ Equal ZF = 1 NE Not equal ZF = 0 LT Unsigned less than CF = 1 GE Unsigned greater than or equal CF = 0 LE Unsigned less than or equal (CF ZF) = 1 GT Unsigned greater than (CF ZF) = 0 SLT Signed less than (SF VF) = 1 SGE Signed greater than or equal (SF VF) = 0 SLE Signed less than or equal ZF (SF VF) = 1 SGT Signed greater than ZF (SF VF) = 0 Page 10

1 LD PSW, 0x00 ; PSW に 0x00 を書き込む 2 PUSH PSW ; PSW の内容をスタックに退避 3 POP PSW ; スタックの内容を PSW にリストア 4 LD A, (0x3F) ; A レジスタに PSW の内容を転送 5 LD RBS, 1 ; PSW の RBS に 1 を書き込む (BANK1 に切り替え ) 6 LD RBS, 0 ; PSW の RBS に 0 を書き込む (BANK0 に切り替え ) 7 LD PSW, 0x02 ; PSW の RBS に 1 を書き込む (BANK1 に切り替え 全フラグを 0 にクリア ) 8 LD PSW, 0x00 ; PSW の RBS に 0 を書き込む (BANK0 に切り替え 全フラグを 0 にクリア ) LD PSW,n 命令を実行した場合 レジスタバンクの値だけでなく各フラグの値も変更されます よってフラグの値に影響を与えずレジスタバンクを変更する場合は LD PSW,n 命令では無く LD RBS,0 または LD RBS,1 命令を使用してください (0x3F) に対し メモリアクセス命令での書き込みを行った場合 データは書き込まれず その命令で定まった変化をします LD (0x3F), 0x00 ; PSW = 0x00 にはならず [LD (x), n] 命令の指定に従い JF が 1 になり ほかのフラグは変化しません 割り込み受け付け時 PSW はプログラムカウンタとともにスタックに退避されます また 割り込みリターン命令 [RETI], [RETN] の実行によりスタック上のデータが PSW にリストアされます PSW の RBS を除く各種フラグは 電源投入時及びリセット時の値は不定となります RBS はリセットで初期化され レジスタバンクは "0" が選択されます 1.1.4.1 ゼロフラグ (ZF) 演算結果または転送データが 0x00 (8 ビット演算 / 転送時 ) / 0x0000 (16 ビット演算時 ) のとき 1 にセットされ その他のときは 0 にクリアされます ビット操作命令では 指定ビットの内容が 0 のとき 1 にセットされ 指定ビットの内容が 1 のとき 0 にクリアされます ( ビットテスト ) 乗算命令の場合 積の上位 8 ビットが 0x00 のとき 除算命令の場合 剰余が 0x00 のとき 1 にセットされ その他のときは 0 にクリアされます 1.1.4.2 キャリーフラグ (CF) 演算時のキャリーまたはボローがセットされます 除算命令の場合 除数が 0x00 のとき (Divided by zero error) または商が 0x100 以上のとき (Quotient-overflow error) 1 にセットされます シフト / ローテート命令では レジスタからシフトアウトされるデータがセットされます ビット操作命令では 1 ビット長のレジスタ ( ブーリアンアキュムレータ ) として機能します また キャリーフラグ操作命令によりセット / クリア / 反転ができます Page 11

第 1 章動作説明 1.1 CPU コア機能 TLCS-870/C1 0x0007 番地のビット 5 の内容と 0x009A 番地のビット 0 の内容とで排他的論理和をとり 結果を 0x0001 番地のビット 2 に書き込みます ( メモリスタイルが 64K バイトの場合 ) LD CF, (0x07).5 ; (0x0001).2 (0x0007).5 (0x009A).0 XOR LD CF, (0x9A).0 (0x01).2, CF 0x00007 番地のビット 5 の内容と 0x0009A 番地のビット 0 の内容とで排他的論理和をとり 結果を 0x00001 番地のビット 2 に書き込みます ( メモリスタイルが 96K, 128K バイトの場合 ) LD CF, (0x07).5 ; (0x00001).2 (0x00007).5 (0x0009A).0 XOR LD CF, (0x9A).0 (0x01).2, CF 1.1.4.3 ハーフキャリーフラグ (HF) 8 ビット演算時 4 ビット目へのキャリーまたは 4 ビット目からのボローがセットされます HF は BCD データの加減算の際の十進補正用のフラグです ( [DAA r], [DAS r] 命令による十進補正 ) BCD 演算 (A = 0x19, B = 0x28 のとき 次の命令を実行すると A は 0x47 になります ) ADD A, B ; A 0x41, HF 1, CF 0 DAA A ; A 0x41 + 0x06 = 0x47 ( 十進補正 ) 1.1.4.4 サインフラグ (SF) 算術演算の演算結果の MSB が 1 のとき 1 にセットされ その他のときは 0 にクリアされます 1.1.4.5 オーバフローフラグ (VF) 算術演算の演算結果にオーバフローが生じたときに 1 にセットされ その他のときは 0 にクリアされます 例えば 加算命令で 2 つの正の数を加算した結果が負の数になった場合 あるいは 2 つの負の数を加算した結果が正の数になった場合に VF は 1 にセットされます Page 12

1.1.4.6 ジャンプステータスフラグ (JF) 通常 1 にセットされるフラグで 命令に従いゼロまたはキャリー情報がセットされ 条件付きジャンプ命令 [JR T/F, a], [JRS T/F, a] (T, F は条件コード ) のジャンプ条件となります ジャンプステータスフラグと条件付きジャンプ命令 ( メモリスタイルが 64K バイトの場合 ) INC A JRS T,SLABEL1 ; 直前の演算命令で桁上げが発生した場合ジャンプします LD A,(HL) JRS T,SLABEL2 ; 直前の命令で JF は "1" にセットされますので 無条件ジャンプと見なされます ジャンプステータスフラグと条件付きジャンプ命令 ( メモリスタイルが 96K, 128K バイトの場合 ) INC A JRS T,code _ addr(slabel1) ; 直前の演算命令で桁上げが発生した場合ジャンプします LD A,(HL) JRS T,code _ addr(slabel2) ; 直前の命令で JF は "1" にセットされますので 無条件ジャンプと見なされます 例 : WA レジスタ, HL レジスタ, データメモリの 0x000C5 番地, CF, HF, SF, VF の内容がそれぞれ 0x219A, 0x00C5, 0xD7, 1, 0, 1, 0 のとき 下記命令を実行すると A, WA レジスタおよび各フラグは次のようになります 命令 実行後のアキュムレータ PSW JF ZF CF HF SF VF ADDC A, (HL) 72 1 0 1 1 0 1 SUBB A, (HL) C2 1 0 1 0 1 0 CMP A, (HL) 9A 0 0 1 0 1 0 AND A, (HL) 92 0 0 1 0 1 0 LD A, (HL) D7 1 0 1 0 1 0 ADD A, 0x66 00 1 1 1 1 0 0 INC A 9B 0 0 1 0 1 0 ROLC A 35 1 0 1 0 1 0 RORC A CD 0 0 0 0 1 0 ADD WA, 0xF508 16A2 1 0 1 0 0 0 MUL WA 13DA 0 0 1 0 1 0 SET A.5 BA 1 1 1 0 1 0 1.1.4.7 レジスタバンクセレクタ (RBS) 汎用レジスタバンクを選択する 1 ビットのレジスタです 例えば RBS=1 の時 バンク 1 が現在選択されていることになります リセット時 RBS は "0" に初期化され バンク 0 が選択されます RBS を操作する命令としては 即値設定及びプッシュ / ポップの専用命令 [LD RBS,n] Page 13

第 1 章動作説明 1.1 CPU コア機能 TLCS-870/C1 [LD PSW,n] [PUSH PSW] [POP PSW] が用意されていますが [LD PSW,n] [PUSH PSW] 命令は RBS に加えフラグも上書きしますので RBS だけを変更したい場合は [LD RBS,n] 命令を使用してください 割り込み受付時 RBS は PSW の他のフラグと一緒にスタックに退避されます その際 RBS は値を変更されません また 割り込みリターン命令 [RETI],[RETN] の実行により 退避されていた PSW の 1 ビットとして復帰され レジスタバンクも復帰された値にしたがって切り替わります 1.1.5 スタック スタックポインタ 1.1.5.1 スタック スタックは サブルーチンコール命令実行時または割り込み受け付け時に その処理ルーチンへジャンプするのに先立ってプログラムカウンタの内容 ( 戻り番地 ) やプログラムステータスワードの内容などをセーブするエリアです サブルーチンコール命令 [CALL mn], [CALLV n] 実行時 戻り番地が ( 上位バイト 下位バイトの順に ) スタックに退避 ( プッシュダウン ) されます ソフトウエア割り込み命令 [SWI] 実行時および割り込み受け付け時は まずプログラムステータスワードの内容がスタックに退避され 次に戻り番地が退避されます 処理ルーチンから復帰する場合 サブルーチンリターン命令 [RET] を実行することによりスタックからプログラムカウンタへ 割り込みリターン命令 [RETI], [RETN] を実行することによりスタックからプログラムカウンタおよびプログラムステータスワードへ それぞれの内容がリストア ( ポップアップ ) されます スタックは データ領域内の任意のエリアに設定できます 1.1.5.2 スタックポインタ スタックポインタは スタックの先頭番地を指す 16 ビットのレジスタです スタックポインタは サブルーチンコール プッシュ命令実行時 および割り込み受け付け時にポストデクリメントされ リターン ポップ命令実行時にプリインクリメントされます 従って スタックはアドレスの若い方に向かって深くなります 16 SP 図 1-7 スタックポインタ スタックのアクセスとスタックのポインタの変化を図 1-8 に示します スタックポインタは ハードウエアリセットで 0x00FF に初期化されます スタックポインタは インデックスレジスタと同様に転送 演算命令で操作できるほか インデックスアドレッシングのインデックスレジスタとして使用できます 1 LD SP, 0x043F ; SP 0x043F 2 LD HL, SP ; HL SP 3 LD SP, SP+0x04 ; SP SP + 0x04 4 ADD SP, 0x5678 ; SP SP + 0x5678 Page 14

5 LD A, (SP+0x12) ; A アドレス (SP + 0x12) のメモリの内容 CALL CALLV SWI RET RETI RETN 0x0013C 0x0013C 0x0013C 0x0013C 0x0013D 0x0013D PCL 0x0013D 0x0013D PCL 0x0013E PCL 0x0013E PCH 0x0013E PCL 0x0013E PCH 0x0013F PCH 0x0013F PSW 0x0013F PCH 0x0013F PSW SP 0x013F SP 0x013F SP 0x013D SP 0x013C SP 0x013D SP 0x013C SP 0x013F SP 0x013F (a) (/) 0x00040 0x0FFFF (b) 図 1-8 スタック 1.1.6 プログラムカウンタ (PC) プログラムカウンタは 次に実行すべき命令の格納されているコード領域のアドレスを指す 16 ビットのレジスタです リセット解除時 ベクタテーブル (0x1FFFF, 0x1FFFE (0xFFFF, 0xFFFE) 番地 :MCU モード時 ) に格納されているリセットベクタがプログラムカウンタにロードされますので 任意のアドレスからプログラムの実行を開始することができます 例えば 0x1FFFF, 0x1FFFE (0xFFFF, 0xFFFE) 番地にそれぞれ 0xC0, 0x3E が格納されている場合 リセット解除後 0x1C03E (0xC03E) 番地から実行開始します TLCS-870/C1 シリーズは パイプライン処理 ( 命令先行フェッチ ) を行っていますので プログラムカウンタは 常に 2 アドレス先を指します 例えば 0x1C123 (0xC123) 番地に格納されている 1 バイト命令の実行中 プログラムカウンタの内容は 0x1C125 (0xC125) です 注 ) 括弧内はメモリスタイルが 64K バイトのときのアドレスを示します MSB LSB 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (PC) a a + 1 a + 2 a + 3 PCH PCL a 2 a 1 a a + 1 (a) (b) 図 1-9 プログラムカウンタ Page 15

第 1 章動作説明 1.1 CPU コア機能 TLCS-870/C1 1.1.6.1 ジャンプ命令とプログラムカウンタの関係 ジャンプ命令には相対ジャンプ命令と絶対ジャンプ命令があり コード領域内へジャンプします データ領域へのジャンプはできません 以下にジャンプ命令とプログラムカウンタの関係の例を示します 1. 5 ビット相対ジャンプ命令 [JRS cc, $ + 2 + d] 0x1E8C4 (0xE8C4) : JRS T, $ + 2 + 0x08 の場合 JF = 1 のとき プログラムカウンタの内容に 0x08 を加算した 0x1E8CE (0xE8CE) にジャンプします ( プログラムカウンタの内容は実行命令の置かれたアドレス +2 になっています 従って この場合のプログラムカウンタの値は 0x1E8C4 (0xE8C4) + 2 = 0x1E8C6 (0xE8C6) となります ) 2. 8 ビット相対ジャンプ命令 [JR cc, $ + 2 + d]/[jr cc, $ + 3 + d] 0x1E8C4 (0xE8C4) : JR Z, $ + 2 + 0x80 の場合 ZF = 1 のとき プログラムカウンタの内容に 0x1FF80 (0xFF80) (-128) を加算した 0x1E846 (0xE846) にジャンプします 3. 16 ビット絶対ジャンプ命令 [JP a] 0x1E8C4 (0xE8C4) : JP 0x1C235 (0xC235) の場合無条件に 0x1C235 (0xC235) 番地にジャンプします 絶対ジャンプ命令はコード領域 64 K バイト内の任意のアドレスにジャンプできます 注 ) 括弧内はメモリスタイルが 64K バイトのときのアドレスを示します Page 16

1.2 修正履歴 Rev 修正内容 16 進数の表記を H から 0x に 2 進数の表記を B から 0y に修正しました RA001 図 1-2 コード領域 ( メモリスタイル :96K, 128K バイト時 ) を修正しました 1.1.4 プログラムステータスワード (PSW) のプログラム例 文章を修正しました 1.1.4.7 レジスタバンクセレクタ (RBS) の文章を修正しました RA002 図 1-2 コード領域 ( メモリスタイル :96K, 128K バイト時 ) の CALLV アドレスに誤りがあったのを修正 図 1-4 データ領域 ( メモリスタイル :96K, 128K バイト時 ) に SFR3 を追加 最小命令実行時間の記述を削除 最低電源電圧の記述を削除 ( 製品によって異なるため ) メモリスタイル別の表記に変更しました 1.1.4.6 ジャンプステータスフラグ (JF) 表中の 実行フラグ を PSW に修正しました Page 17

第 1 章動作説明 1.1 CPU コア機能 TLCS-870/C1 Page 18