【機能概要】
(1)組み込み型モニタの概要
組み込み型モニタは、ユーザの実機システムに組み込まれてユーザプログラムのデバッグ
を行うソフトウェアを言います。デバッグを行う開発装置と言えば、一般にエミュレータを
思い浮かべますが、エミュレータのようにデバッグを行うための機器をほとんど使用しませ
ん。組み込み型モニタは実機システムのROMに格納し、ホスト端末よりダウンロードした
ユーザプログラムのデバッグを行うのです。
つまり、エミュレータのようなエバチップは必要とせず、実機システム上の実チップを利
用してユーザプログラムのデバッグを行います。このため、エミュレータのようにハードウ
ェアのデバッグは行えませんが、ソフトウェアのデバッグであれば安価にデバッグを行うこ
とができます。
(2)適用範囲と必要資源
組み込み型モニタは、H8/300H Tinyシリーズの全てのマイコンに適用可能で
す。
また、組み込み型モニタはRS−232Cを介してホスト端末とインタフェース(コマン
ドの送受信)を行います。従って、実機システム上に通信用のLSIが必要になります。た
だし、H8/300H Tinyシリーズには全てSCIが内蔵されているため、組み込み
型モニタはこの資源を利用してホスト端末とインタフェースを行います。
最終的に実機システムに必要となる資源は以下の通りです。
・ROM領域 −−> 最小約2KByte から 最大約23KByte
・RAM領域 −−> 最小約 130Byte から 最大約 380Byte
・SCI(ドライバ回路を含む) −−> 1チャネル(チャネル番号は選択可能)
(3)ホスト端末との接続形態
組み込み型モニタは、RS−232Cを介してホスト端末と接続を行います。このため、
実機システム上にRS−232Cのドライバ回路が必要となります。このドライバは、RS
−232Cを制御できるものであれば何でも構いません。
また、ホスト端末側の通信ソフトもRS−232Cと直接インタフェースを行えるもので
あれば何でも構いません。
以下にRS−232Cのインタフェース仕様を示します。
・通信速度 −−> 任意(カスタマイズにより変更可能)
・データ長 −−> 8ビット長
・パリティ制御 −−> なし
・ストップビット長 −−> 1ビット
・フロー制御 −−> X−ON/OFFあり
(4)機能概要
組み込み型モニタをフルスペックで使用した場合の機能(コマンド)を以下に示します。
各コマンドの詳細な使い方は【コマンド詳細】(項番1〜15)と【割込み管理】(項番16〜
17)を参照してください。
なお、下記に示した機能は組み込み型モニタのカスタマイズにより、機能の使用/未使用
が選択できるようになっています。組み込み型モニタのカスタマイズについては【カスタマ
イズ】を参照してください。
1. Assemble 1行アセンブル
2. Breakpoint ブレークポイントの設定、表示、解除
3. Dump メモリ内容のダンプ
4. DisAssemble 逆アセンブル
5. Fill データの書き込み
6. Go ユーザプログラムの実行
7. H8 status 内蔵周辺機能の状態表示
8. Load ユーザプログラムのダウンロード
9. Memory メモリ内容の表示、変更
10. Register CPUレジスタの一覧表示
11. Step シングルステップの実行
12. .<register> CPUレジスタの表示、変更
13. help コマンドヘルプ
14. return 繰り返し実行
15. <command>. コマンド履歴
16. interrupt 内蔵周辺機能割込み管理
17. abort アボート管理
(5)割込み管理
組み込み型モニタは、ユーザプログラムの割込みに対してベクタテーブルの二重化方式を
サポートしています。これにより、以下に示す以外の割込みに対し、当該ベクタアドレスを
仮想的なベクタテーブルに用意するだけで割込み管理を行うことができます。割込み管理の
詳細に関しては【割込み管理】を参照してください。
・リセット −−> 組み込み型モニタの起動用割込みとして使用
・ベクタ番号1 −−> シングルステップの制御として使用
・ベクタ番号2 −−> ブレークポイントの制御として使用
先頭にもどる
【コマンド詳細】
次ページより組み込み型モニタが持っているコマンドの詳細を以下の形式で説明します。
《 B (ブレークポイント....) 》 −−> コマンド名
(1)コマンドフォーマット −−> コマンドの入力方法について説明し
ています。(下記のコマンドフォー
マットの読み方を参照ください。)
(2)機能 −−> コマンドの機能概要を説明していま
す。
(3)解説 −−> コマンド機能の詳細を例を挙げて説
明しています。
(4)注意事項 −−> コマンドを使用する上で特に注意す
べき事項が記載してあります。
(5)備考 −−> コマンドを使用する上での補足説明
が記載してあります。
コマンドフォーマットの特殊記号は以下に示す意味を持っています。
・ "<パラメータ>" は< >で囲まれた内容を指定することを意味します。
・ "[ ]" は[ ]で囲まれた内容が省略可能であることを意味します。
・ [RET] は改行キーを入力することを意味します。
先頭にもどる
《 A (1行アセンブル) 》
(1)コマンドフォーマット
: A <アドレス> [RET]
<アドレス> : 命令を埋め込むメモリの先頭アドレス
(2)機能
指定されたアドレスより命令を埋め込みます。
コマンド投入後は下記の操作が可能です。
・ [RET] を入力すると2バイト先の番地を表示します。
・ ^ [RET] を入力すると2バイト手前の番地を表示します。
・ <命令> [RET] を入力するとメモリの内容を<命令>に変更します。
・ . [RET] を入力するとAコマンドを終了します。
(3)解説
: DA 1000 100F [RET]
<ADDR> <CODE> <MNEMONIC> <OPERAND>
1000 0000 NOP
1002 0000 NOP
1004 0000 NOP
1006 0000 NOP
1008 0000 NOP
100A 0000 NOP
100C 0000 NOP
100E 0000 NOP
: A 1000 [RET]
1000 > CMP.B R0L,R1L [RET]
1002 > BEQ 1000 [RET]
1004 > JSR @2000:24 [RET]
1008 > MOV.L @(100:24,ER3),ER5 [RET]
1012 > [RET]
1014 > ^ [RET]
1012 > RTE [RET]
1014 > . [RET]
: DA 1000 1014 [RET]
<ADDR> <CODE> <MNEMONIC> <OPERAND>
1000 1C89 CMP.B R0L,R1L
1002 47FC BEQ 001000:8
1004 5E002000 JSR @H'002000:24
1008 010078306B2500000100 MOV.L @(H'000100:24,ER3),ER5
1012 5670 RTE
1014 0000 NOP
(4)注意事項
アセンブルを行う番地は偶数番地でなければなりません。アドレスを奇数番地とした場合
は「Invalid Start Address」のエラーメッセージを表示します。また、<命令>の中で指定
する値はアドレッシングモードの指定を行う[:2、:3、:8、:16、:24、:32]以外全て16進表
現です。全てが16進表現であるため H' の指定も不要です。
(5)備考
Aコマンドではオペランドサイズを省略した場合、以下の解釈でオペランドサイズを扱い
ます。
・バイトサイズ
ADD、ADDX、AND、ANDC、BAND、BCLR、BIAND、BILD、BIOR、BIST、BIXOR、BNOT
BOR、BSET、BST、BTST、BXOR、CMP、DAA、DAS、DEC、DIVXS、DIVXU、EEPMOV、INC
LDC、MOV、MOVFPE、MOVTPE、MULXS、MULXU、NEG、NOT、OR、ORC、ROTL、ROTR
ROTXL、ROTXR、SHAL、SHAR、SHLL、SHLR、STC、SUB、SUBX、XOR、XORC
・ワードサイズ
EXTS、EXTU、POP、PUSH
・ロングワードサイズ
ADDS、SUBS
また、アドレッシングモードは以下の指定が可能です。
・レジスタ直接
R0L 〜 R7L、R0H 〜 R7H、R0 〜 R7、E0 〜 E7、ER0 〜 ER7、SP、CCR
・レジスタ間接
@ER0 〜 @ER7、@SP
・ポストインクリメントレジスタ間接
@ER0+ 〜 @ER7+、@SP+
・プリデクリメントレジスタ間接
@-ER0 〜 @-ER7、@-SP
・ディスプレースメント付きレジスタ間接
@(disp,ER0) 〜 @(disp,ER7)、@(disp,SP)
指定したディスプレースメントにより8ビット、16ビットディスプレース
メントを自動的に切り替えます。
@(disp:8,ER0) 〜 @(disp:8,ER7)、@(disp:8,SP)
8ビットディスプレースメント付きレジスタ間接
@(disp:16,ER0) 〜 @(disp:16,ER7)、@(disp:16,SP)
16ビットディスプレースメント付きレジスタ間接
・絶対アドレス
@abs 指定したアドレスにより8ビット、16ビット、24ビット絶対アドレスを自
動的に切り替えます。
@abs:8 8ビット絶対アドレス
@abs:16 16ビット絶対アドレス
@abs:24 24ビット絶対アドレス
・イミディエイト
#imm 命令のオペランドサイズにより2ビット、3ビット、8ビット、16ビット
32ビットイミディエイトを自動的に切り替えます。
#imm:2 TRAPA命令での2ビットイミディエイト
#imm:3 ビット操作命令での3ビットイミディエイト
#imm:8 8ビットイミディエイト
#imm:16 16ビットイミディエイト
#imm:32 32ビットイミディエイト
・PC相対
disp 指定した分岐先の番地により8ビット、16ビット相対を自動的に切り替え
ます。
disp:8 8ビット相対
disp:16 16ビット相対
・メモリ間接
@@abs、@@abs:8
先頭にもどる
《 B (ブレークポイントの設定、解除、表示) 》
(1)コマンドフォーマット
(a) : B <アドレス> [RET]
(b) : B - [<アドレス>] [RET]
(c) : B [RET]
<アドレス> : ブレークポイントを設定、解除するアドレス
− : 設定値の解除
(2)機能
ユーザプログラムを停止するアドレス(ブレークポイント)を設定、解除、表示します。
(a)最大8個までのブレークポイントが設定できます。
(b)設定されているブレークポイントを解除します。<アドレス>を省略すると全て解除
します。
(c)設定されているブレークポイントを表示します。
(3)解説
(a)ブレークポイントの設定
: B 100 [RET]
H'100番地にブレークポイントを設定します。
既に設定されているアドレスを指定した場合は「Duplicate Breakpoint」のエラーメ
ッセージを表示します。
: B 1000 [RET]
: B 200 [RET]
続けてH'1000番地、H'200番地にブレークポイントを設定します。
設定できるブレークポイントの個数は最大8個までです。ブレークポイントの設定が
8個を超えた場合は「Full Breakpoint」のエラーメッセージを表示します。
: B 1500 [RET]
: G [RET]
Break at PC=1500
PC=1500 CCR=80:I....... SP=FF00
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
ブレークポイントにユーザプログラムが到達した場合、上記のメッセージを表示して
ユーザプログラムを停止します。
(b)ブレークポイントの解除
: B - 1000 [RET]
H'1000番地に設定してあるブレークポイントを解除します。
指定されたアドレスにブレークポイントがない場合は「Not Find Breakpoint」のエ
ラーメッセージを表示します。
: B - [RET]
アドレスを省略すると設定されている全てのブレークポイントを解除します。
(c)ブレークポイントの表示
: B [RET]
<ADDR>
1000
0200
ブレークポイントがH'1000番地、H'200番地に設定してあります。
(4)注意事項
(a)ブレークポイントをROM領域、内蔵周辺機能のレジスタ領域、およびメモリが接
続されていない領域に設定した場合、G、Sコマンド実行時の動作は保証されませ
ん。
(b)ブレークポイントは命令の先頭アドレスにのみ設定可能です。命令の先頭以外に設
定した場合、G、Sコマンド実行時の動作は保証されません。
先頭にもどる
《 D (メモリ内容のダンプ) 》
(1)コマンドフォーマット
: D <アドレス1> [<アドレス2>] [;<サイズ>] [RET]
<アドレス1> : ダンプするメモリの先頭アドレス
<アドレス2> : ダンプするメモリの最終アドレス
<サイズ> : 表示単位の指定
B : 1バイト単位
W : 2バイト単位
L : 4バイト単位
省略時 : 1バイト単位
(2)機能
(a)指定されたメモリ領域の内容を表示します。<アドレス2>が省略された場合、256
バイトをダンプします。
(b)メモリダンプの表示は1行16バイト単位です。
(c)[RET] のみの入力で前のDコマンドで表示したアドレスの次のアドレスから256バ
イトを連続的にダンプします。
(3)解説
(a)メモリ内容のダンプ
: D 1000 [RET]
<ADDR> < D A T A > < ASCII CODE >
1000 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F "................"
1010 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F "................"
1020 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F " !"#$%&'()*+,-./"
1030 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F "0123456789:;<=>?"
1040 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F "@ABCDEFGHIJKLMNO"
1050 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F "PQRSTUVWXYZ[\]^_"
1060 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F " abcdefghijklmno"
1070 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F "pqrstuvwxyz{|}~."
1080 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F "................"
1090 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F "................"
10A0 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF "................"
10B0 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF "................"
10C0 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF "................"
10D0 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF "................"
10E0 E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF "................"
10F0 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF "................"
H'1000番地よりメモリ内容をダンプします。
最終アドレスを指定しないと256バイトのメモリ内容をダンプします。
: D 1030 105B [RET]
<ADDR> < D A T A > < ASCII CODE >
1030 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F "0123456789:;<=>?"
1040 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F "@ABCDEFGHIJKLMNO"
1050 50 51 52 53 54 55 56 57 58 59 5A 5B "PQRSTUVWXYZ["
最終アドレスを指定すると最終アドレスまでのメモリ内容をダンプします。
: D 1030 105B;W [RET]
<ADDR> < D A T A > < ASCII CODE >
1030 3031 3233 3435 3637 3839 3A3B 3C3D 3E3F "0123456789:;<=>?"
1040 4041 4243 4445 4647 4849 4A4B 4C4D 4E4F "@ABCDEFGHIJKLMNO"
1050 5051 5253 5455 5657 5859 5A5B "PQRSTUVWXYZ["
サイズをワード単位とすると2バイト単位でメモリ内容をダンプします。
: D 1030 105B;L [RET]
<ADDR> < D A T A > < ASCII CODE >
1030 30313233 34353637 38393A3B 3C3D3E3F "0123456789:;<=>?"
1040 40414243 44454647 48494A4B 4C4D4E4F "@ABCDEFGHIJKLMNO"
1050 50515253 54555657 58595A5B "PQRSTUVWXYZ["
サイズをロングワード単位とすると4バイト単位でメモリ内容をダンプします。
(b)繰り返しの表示
: D FF0 FFF [RET]
<ADDR> < D A T A > < ASCII CODE >
0FF0 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F "@ABCDEFGHIJKLMNO"
: [RET]
1000 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F "................"
1010 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F "................"
1020 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F " !"#$%&'()*+,-./"
1030 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F "0123456789:;<=>?"
1040 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F "@ABCDEFGHIJKLMNO"
1050 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F "PQRSTUVWXYZ[\]^_"
1060 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F " abcdefghijklmno"
1070 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F "pqrstuvwxyz{|}~."
1080 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F "................"
1090 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F "................"
10A0 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF "................"
10B0 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF "................"
10C0 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF "................"
10D0 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF "................"
10E0 E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF "................"
10F0 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF "................"
Dコマンド実行後に [RET] のみを入力すると、前回ダンプした次のアドレスから再
び256バイト単位で繰り返しメモリ内容をダンプします。
(4)注意事項
(a)ワード単位で表示を行う場合、先頭アドレスは偶数番地、最終番地は奇数番地でな
ければなりません。先頭アドレスが奇数番地の場合は「Invalid Start Address」、
最終アドレスが偶数番地の場合は「Invalid End Address」のエラーメッセージを
表示します。
また、ロングワード単位で表示を行う場合、先頭アドレスは偶数番地、最終番地は
先頭アドレス+3のN倍の番地でなければなりません。
(b)Dコマンドで内蔵周辺機能のレジスタ領域を表示した場合、メモリ内容の16進数と
ASCIIコードの表示が異なることがあります。
(5)備考
Dコマンドではメモリの内容をリードする際、サイズで指定された単位でメモリ内容のリ
ードを行います。すなわち、表示単位が1バイトの場合はバイトサイズでリードし、表示単
位が2バイトの場合はワードサイズでリードし、表示単位が4バイトの場合はロングワード
サイズでリードを行います。
先頭にもどる
《 DA (逆アセンブル) 》
(1)コマンドフォーマット
: DA <アドレス1> [<アドレス2>] [RET]
<アドレス1> : 逆アセンブルするメモリの先頭アドレス
<アドレス2> : 逆アセンブルするメモリの最終アドレス
(2)機能
(a)指定されたメモリ領域の内容を逆アセンブルします。<アドレス2>が省略された場
合、16命令文を逆アセンブルします。
(b)[RET] のみの入力で前のDAコマンドで表示した次のアドレスから16命令文を連続
的に逆アセンブルします。
(3)解説
(a)メモリ内容の逆アセンブル
: DA 1000 [RET]
<ADDR> <CODE> <MNEMONIC> <OPERAND>
1000 6CD3 MOV.B R3H,@-ER5
1002 0A0B INC.B R3L
1004 7A0100001028 MOV.L #H'00001028:32,ER1
100A 5C0002DA BSR 12E8:16
100E 40C8 BRA 0FD8:8
1010 5C0002C4 BSR 12D8:16
1014 7A050020FF56 MOV.L #H'0020FF56:32,ER5
101A FB0F MOV.B #H'0F:8,R3L
101C 1A80 SUB.L ER0,ER0
101E 01006DD0 MOV.L ER0,@-ER5
1022 1A0B DEC.B R3L
1024 46F8 BNE 101E:8
1026 5470 RTS
1028 0820 ADD.B R2H,R0H
102A 0800 ADD.B R0H,R0H
102C 6E68000A MOV.B @(H'00000A:16,ER6),R0L
最終アドレスを指定しないと16命令文の逆アセンブルを行います。
: DA 1000 1005 [RET]
<ADDR> <CODE> <MNEMONIC> <OPERAND>
1000 6CD3 MOV.B R3H,@-ER5
1002 0A0B INC.B R3L
1004 7A0100001028 MOV.L #H'00001028:32,ER1
最終アドレスを指定すると最終アドレスを含む命令まで逆アセンブルを行います。
(b)繰り返しの表示
: DA 1000 1005 [RET]
<ADDR> <CODE> <MNEMONIC> <OPERAND>
1000 6CD3 MOV.B R3H,@-ER5
1002 0A0B INC.B R3L
1004 7A0100001028 MOV.L #H'00001028:32,ER1
: [RET]
100A 5C0002DA BSR 12E8:16
100E 40C8 BRA 0FD8:8
1010 5C0002C4 BSR 12D8:16
1014 7A050020FF56 MOV.L #H'0020FF56:32,ER5
101A FB0F MOV.B #H'0F:8,R3L
101C 1A80 SUB.L ER0,ER0
101E 01006DD0 MOV.L ER0,@-ER5
1022 1A0B DEC.B R3L
1024 46F8 BNE 101E:8
1026 5470 RTS
1028 0820 ADD.B R2H,R0H
102A 0800 ADD.B R0H,R0H
102C 6E68000A MOV.B @(H'00000A:16,ER6),R0L
1030 474C BEQ 107E:8
1032 0F95 MOV.L ER1,ER5
1034 01006D56 MOV.L @ER5+,ER6
DAコマンド実行後に [RET] のみを入力すると、前回のDAコマンドの最終アドレ
スを含む次のアドレスから再び16命令文の逆アセンブルを繰り返し行います。
先頭にもどる
《 F (データの書き込み) 》
(1)コマンドフォーマット
: F <アドレス1> <アドレス2> <書き込みデータ> [RET]
<アドレス1> : 書き込みするメモリの先頭アドレス
<アドレス2> : 書き込みするメモリの最終アドレス
<書き込みデータ> : 1バイトの書き込みデータ
(2)機能
指定されたメモリ領域に、<書き込みデータ>で指定された1バイトのデータを書き込みま
す。
(3)解説
(a)データの書き込み
: F 1000 10FF AA [RET]
H'1000番地からH'10FF番地までのメモリ領域に対してH'AAのデータを書き込みます。
(b)データの書き込みの失敗
: F 0000 01FF 55 [RET]
Failed at 0015 , Write = 55 , Read = 04
Fコマンドでは書き込みデータのベリファイチェックを行います。ベリファイチェッ
クでエラーが検出された場合は上記のメッセージを表示します。
先頭にもどる
《 G (ユーザプログラムの実行) 》
(1)コマンドフォーマット
: G [<アドレス>] [RET]
<アドレス> : 実行するユーザプログラムの先頭アドレス
(2)機能
現在のプログラムカウンタ値ないしは、<アドレス>で指定したアドレスよりユーザプログ
ラムを実行します。
(3)解説
(a)ユーザプログラムの実行
: G [RET]
現在のプログラムカウンタ値よりユーザプログラムを実行します。
: G 1000 [RET]
H'1000番地よりユーザプログラムを実行します。
(b)ユーザプログラムの停止
: B 1500 [RET]
: G [RET]
Break at PC=1500
PC=1500 CCR=80:I....... SP=FF00
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
ブレークポイントに到達するとユーザプログラムは停止します。
: G 1010 [RET]
NMI(Abort Switch ON)入力
Abort at PC=3014
PC=3014 CCR=80:I....... SP=FF00
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
NMI入力を行うとユーザプログラムを強制停止します。
(4)注意事項
実行する最初の命令が不当命令の場合は「Invalid Instruction」のエラーメッセージを
表示し、ユーザプログラムの実行を行いません。
先頭にもどる
《 H8 (内蔵周辺機能の状態表示) 》
(1)コマンドフォーマット
: H8 [<周辺機能名>] [RET]
<周辺機能名> : 状態表示したい周辺機能の名称
H8/3664の場合 TA - Timer A
TV - Timer V
TW - Timer W
SCI3 - Serial Communication Interface 3
A/D - A/D converter
WDT - Watch Dog Timer
IIC - IIC bus interface
ABRK - Address BReaK
I/O - I/O port
INT - INTerrupt,etc
(2)機能
内蔵周辺機能のレジスタの状態を表示します。
(3)解説
(a)I/0ポートの表示
: H8 I/O [RET]
<REG> <ADDR> <CODE> < 7 6 5 4 3 2 1 0 >
PMR1 FFE0 0000..10 IRQ3 IRQ2 IRQ1 IRQ0 TXD TMOW
PMR5 FFE1 ..000000 WKP5 WKP4 WKP3 WKP2 WKP1 WKP0
PCR1 FFE4 FF
PDR1 FFD4 0111.000 IRQ3 IRQ2 IRQ1 IRQ0 TMOW
TRGV
PUCR1 FFD0 0000.000
PCR2 FFE5 FF
PDR2 FFD5 .....111 TXD RXD SCK3
PCR5 FFE8 FF
PDR5 FFD8 00000001 SCL SDA WKP5 WKP4 WKP3 WKP2 WKP1 WKP0
ADTRG
PUCR5 FFD1 00000000
PCR7 FFEA FF
PDR7 FFDA .000.... TMOV TMCIV TMRIV
PCR8 FFEB FF
PDR8 FFDB 11110000 FTIOD FTIOC FTIOB FTIOA FTCI
PDRB FFDD 00010010 AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0
I/Oポートの状態表示では、現状の動作モードで使用可能なものを表示します。
<REG>ではレジスタの名称、<ADDR>ではレジスタの番地、<CODE>ではレジスタの値を
表示します。なお、<CODE>では各レジスタの仕様に合わせて、バイト単位またはビット
単位で値を表示します。また、<76543210>では各I/Oポートとの兼用端子機能を表示
します。
(b)I/0ポート以外の表示
: H8 TW [RET]
<REG> <ADDR> <CODE> < 7 6 5 4 3 2 1 0 >
TMRW FF80 0.00.000 CTS BUFEB BUFEA PWMD PWMC PWMB
TCRW FF81 00000000 CCLR CKS2 CKS1 CKS0 TOD TOC TOB TOA
TIERW FF82 0...0000 OVIE IMIED IMIEC IMIEB IMIEA
TSRW FF83 0...0000 OVF IMFD IMFC IMFB IMFA
TIOR0 FF84 .000.000 IOB2 IOB1 IOB0 IOA2 IOA1 IOA0
TIOR1 FF85 .000.000 IOD2 IOD1 IOD0 IOC2 IOC1 IOC0
TCNT FF86 0000
GRA FF88 FFFF
GRB FF8A FFFF
GRC FF8C FFFF
GRD FF8E FFFF
: H8 A/D [RET]
<REG> <ADDR> <CODE> < 7 6 5 4 3 2 1 0 >
ADDRA FFB0 0000
ADDRB FFB2 0000
ADDRC FFB4 0000
ADDRD FFB6 0000
ADCSR FFB8 00000000 ADF ADIE ADST SCAN CKS CH2 CH1 CH0
ADCR FFB9 0....... TRGE
I/Oポート以外の状態表示では、指定された周辺機能の状態を表示します。
<REG>ではレジスタの名称、<ADDR>ではレジスタの番地、<CODE>ではレジスタの値を
表示します。なお、<CODE>では各レジスタの仕様に合わせて、ロングワード単位、ワー
ド単位、バイト単位またはビット単位で値を表示します。また、<76543210>ではビット
単位に意味のあるレジスタのみ対応するビットの意味を表示します。
先頭にもどる
《 L (ユーザプログラムのダウンロード) 》
(1)コマンドフォーマット
: L [RET]
(2)機能
ホスト端末より、指定されたSタイプフォーマットのロードモジュールをメモリ上にダウ
ンロードします。
(3)解説
(a)ユーザプログラムのダウンロード
: L [RET] <-- コマンド投入後、ホスト端末よりプログラムをファイル転送する。
Top Address=1000
End Address=136F
(b)ダウンロードの失敗
: L [RET]
******** S Type Format Error ********
Sタイプフォーマットでないロードモジュールを転送すると上記のエラーメッセージ
を表示します。
: L [RET]
******** Check Sum Error ********
チェックサムが不正の場合は上記のエラーメッセージを表示します。
(4)注意事項
(a)Lコマンド投入後、ホスト端末の通信ソフトを利用してロードモジュールをファイ
ル転送(テキストファイルの転送)してください。
(b)LコマンドはSタイプフォーマットのロードモジュールしかダウンロードできませ
ん。
先頭にもどる
《 M (メモリ内容の表示、変更) 》
(1)コマンドフォーマット
: M <アドレス> [;<サイズ>] [RET]
<アドレス> : 表示、変更を行うメモリの先頭アドレス
<サイズ> : 表示、変更の単位の指定
B : 1バイト単位
W : 2バイト単位
L : 4バイト単位
省略時 : 1バイト単位
(2)機能
指定されたアドレスのメモリ内容を<サイズ>で指定した単位で表示、変更します。
コマンド投入後は下記の操作が可能です。
・ [RET] を入力すると次のメモリ内容を表示します。
・ ^ [RET] を入力すると前のメモリ内容を表示します。
・ <データ> [RET] を入力するとメモリの内容を<データ>に変更します。
・ . [RET] を入力するとMコマンドを終了します。
(3)解説
(a)バイト単位の表示、変更
: M 1000 [RET]
1000 00 ? [RET]
1001 3B ? AA [RET]
1002 23 ? BC [RET]
1003 D5 ? ^ [RET]
1002 BC ? ^ [RET]
1001 AA ? . [RET]
H'1001番地とH'1002番地の内容をH'AAとH'BCに変更します。
(b)ワード単位の表示、変更
: M 1000;W [RET]
1000 BCD5 ? 1234 [RET]
1002 67D1 ? ABCD [RET]
1004 B80A ? ^ [RET]
1002 ABCD ? ^ [RET]
1000 1234 ? [RET]
1002 ABCD ? [RET]
1004 B80A ? . [RET]
H'1000番地からH'1003番地までの内容をH'1234とH'ABCDに変更します。
(c)ロングワード単位の表示、変更
: M 1000;L [RET]
1000 BCD567D1 ? 12345678 [RET]
1004 B80AABCD ? ABCDEF [RET]
1008 72DFEA00 ? ^ [RET]
1004 00ABCDEF ? ^ [RET]
1000 12345678 ? [RET]
1004 00ABCDEF ? . [RET]
H'1000番地からH'1007番地までの内容をH'12345678とH'00ABCDEFに変更します。
(d)ベリファイチェック
: M 1000 [RET]
1000 BC ? 34 [RET]
1001 D1 ? AB [RET]
1002 B8 ? 12 [RET]
**** Verify Error ****
1002 B8 ?
Mコマンドではメモリ内容の変更の際にベリファイエラーが検出されると、再び当該
アドレスの内容を表示してコマンド待ち状態となります。なお、内蔵周辺機能のレジス
タ領域に対してはベリファイチェックを行いません。
(4)注意事項
ワード単位、ロングワード単位でメモリの表示、変更を行う場合は、アドレスは偶数番地
でなければなりません。アドレスを奇数番地とした場合は「Invalid Start Address」のエ
ラーメッセージを表示します。
(5)備考
Mコマンドではメモリの内容をリード/ライトする際、サイズで指定された単位でリード
/ライトを行います。すなわち、サイズが1バイトの場合はバイトサイズでリード/ライト
し、サイズが2バイトの場合はワードサイズでリード/ライトし、サイズが4バイト単位の
場合はロングワードサイズでリード/ライトを行います。
先頭にもどる
《 R (CPUレジスタの一覧表示) 》
(1)コマンドフォーマット
: R [RET]
(2)機能
CPUのコントロールレジスタ、汎用レジスタの一覧を表示します。
(3)解説
: R [RET]
PC=0000 CCR=FF:IUHUNZVC SP=FF00
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
PC : プログラムカウンタ
CCR : コンディションコードレジスタ
[IUHUNZVC] : I : 割込みマスク・ビット U : ユーザ・割込みマスク・ビット
H : ハーフ・キャリー・フラグ U : ユーザ・ビット
N : ネガティブ・フラグ Z : ゼロ・フラグ
V : オーバフロー・フラグ C : キャリー・フラグ
SP : スタックポインタ
ER0〜ER7 : 汎用レジスタ
先頭にもどる
《 S (シングルステップの実行) 》
(1)コマンドフォーマット
: S [<実行ステップ数>] [RET]
<実行ステップ数> : 実行する命令数(10進数2桁で表現)
(2)機能
ユーザプログラムのシングルステップ実行を行い、レジスタ内容と実行した命令を表示し
ます。
(a)現在のプログラムカウンタ値から指定された命令数分のユーザプログラムを実行し
ます。
(b)実行ステップ数が省略されると1命令だけユーザプログラムを実行します。
(c)実行ステップ数で0を指定すると100命令分ユーザプログラムを実行します。
(d)[RET] のみの入力で前のSコマンドで実行した命令の次の命令から再び指定された
命令数分ユーザプログラムを実行します。
(3)解説
(a)1命令だけの実行
: S [RET]
PC=0106 CCR=80:I....... SP=FF00
ER0=01234567 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
0100 7A0001234567 MOV.L #H'01234567:32,ER0
実行ステップ数が省略されると1命令だけユーザプログラムを実行します。
(b)複数命令の実行
: S 3 [RET]
PC=0106 CCR=80:I....... SP=FF00
ER0=01234567 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
0100 7A0001234567 MOV.L #H'01234567:32,ER0
PC=010C CCR=88:I...N... SP=FF00
ER0=01234567 ER1=89ABCDEF ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
0106 7A0189ABCDEF MOV.L #H'89ABCDEF:32,ER1
PC=010E CCR=80:I....... SP=FF00
ER0=01234567 ER1=89ABCDEF ER2=01234567 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
010C 0F82 MOV.L ER0,ER2
実行ステップ数を指定すると指定された命令数分だけ連続的にユーザプログラムを実
行します。
(c)繰り返しの実行
: S [RET]
PC=0106 CCR=80:I....... SP=FF00
ER0=01234567 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
0100 7A0001234567 MOV.L #H'01234567:32,ER0
: [RET]
PC=010C CCR=88:I...N... SP=FF00
ER0=01234567 ER1=89ABCDEF ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
0106 7A0189ABCDEF MOV.L #H'89ABCDEF:32,ER1
: [RET]
PC=010E CCR=80:I....... SP=FF00
ER0=01234567 ER1=89ABCDEF ER2=01234567 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
010C 0F82 MOV.L ER0,ER2
Sコマンド実行後に [RET] のみを入力すると、前回のSコマンドで実行した次の命
令から再び指定された命令数分(上記の場合1命令)ユーザプログラムを実行します。
(4)注意事項
実行する命令が不当命令の場合は「Invalid Instruction」のエラーメッセージを表示し
ユーザプログラムの実行を行いません。
先頭にもどる
《 .<register> (CPUレジスタの表示、変更) 》
(1)コマンドフォーマット
: . <レジスタ名> [<データ>] [RET]
<レジスタ名> : 表示、変更を行うCPUのレジスタ名
<データ> : 設定値
(2)機能
CPUのコントロール/汎用レジスタの内容を表示、変更します。
<データ>を指定すると当該のレジスタのみ変更を行います。
<データ>を省略すると当該のレジスタから順番に会話形式でレジスタ値の表示、変更を行
います。
・ [RET] を入力すると次のレジスタ内容を表示します。
・ ^ [RET] を入力すると前のレジスタ内容を表示します。
・ <データ> [RET] を入力するとレジスタの内容を<データ>に変更します。
・ . [RET] を入力するとコマンドを終了します。
なお、レジスタの表示順は以下の通りです。
ER0, ER1, ER2, ER3, ER4, ER5, ER6, ER7, PC, CCR, SP
R0, R1, R2, R3, R4, R5, R6, R7
E0, E1, E2, E3, E4, E5, E6, E7
R0L, R1L, R2L, R3L, R4L, R5L, R6L, R7L
R0H, R1H, R2H, R3H, R4H, R5H, R6H, R7H
(3)解説
(a)レジスタの変更
: R [RET]
PC=0000 CCR=FF:IUHUNZVC SP=FF00
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
: .ER0 12345678 [RET]
: .R1 ABCD [RET]
: .R2L EF [RET]
: R [RET]
PC=0000 CCR=FF:IUHUNZVC SP=FF00
ER0=12345678 ER1=0000ABCD ER2=000000EF ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
<データ>を指定すると当該レジスタのみ変更を行います。
(b)レジスタの表示、変更
: R [RET]
PC=0000 CCR=80:I....... SP=FF00
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
: .ER6 [RET]
ER6=00000000 ? 12345678 [RET]
ER7=0000FF00 ? [RET]
PC=0000 ? 0100 [RET]
CCR=80 ? [RET]
SP=FF00 ? ^ [RET]
CCR=80 ? ^ [RET]
PC=0100 ? ^ [RET]
ER7=0000FF00 ? FF10 [RET]
PC=0100 ? . [RET]
: R [RET]
PC=0100 CCR=80:I....... SP=FF10
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=12345678 ER7=0000FF10
<データ>を省略すると会話形式でレジスタの表示、変更を行います。
先頭にもどる
《 help (コマンドヘルプ) 》
(1)コマンドフォーマット
: [<コマンド名>] ? [RET]
<コマンド名> : 使用方法を表示したいコマンドの名称
(2)機能
コマンドの使用方法を表示します。
(a)<コマンド名>を省略するとモニタが持っているコマンドの一覧を表示します。
(b)<コマンド名>を指定すると該当のコマンドの使用方法を表示します。
(3)解説
(a)コマンドの一覧表示
: ? [RET]
Monitor Vector 0000 - 00FF
Monitor ROM 0100 - 4BB5
Monitor RAM FB80 - FC3F
User Vector FC40 - FD3F
. : Changes contents of H8/300H registers.
A : Assembles source sentences from the keyboard.
B : Sets or displays or clear breakpoint(s).
D : Displays memory contents.
DA : Disassembles memory contents.
F : Fills specified memory range with data.
G : Executes real-time emulation.
H8 : Displays contents of H8/3664 peripheral registers.
L : Loads user program into memory from host system.
M : Changes memory contents.
R : Displays contents of H8/300H registers.
S : Executes single emulation(s) and displays instruction and registers.
<コマンド名>を省略するとモニタのメモリマップ及びコマンドの一覧を表示します。
(b)コマンドの詳細表示
: B ? [RET]
1. Sets breakpoint at specified address.
B <address> [RET]
2. Displays breakpoint(s).
B [RET]
3. Clear breakpoint(s).
B - [<address>] [RET]
<address> : address of breakpoint
: D ? [RET]
Displays memory contents.
D <address1> [<address2>] [;<size>] [RET]
<address1> : dump area start address
<address2> : dump area end address
<size> : B -- byte
W -- word
L -- long word
: F ? [RET]
Fills specified memory range with data.
F <address1> <address2> <data> [RET]
<address1> : filling area start address
<address2> : filling area end address
<data> : filling byte data
: H8 ? [RET]
Displays contents of H8/3664 peripheral registers.
H8 <name> [RET]
<name> : TA - Timer A
TV - Timer V
TW - Timer W
SCI3 - Serial Communication Interface 3
A/D - A/D converter
WDT - Watch Dog Timer
IIC - IIC bus interface
ABRK - Address BReaK
I/O - I/O port
INT - INTerrupt,etc
<コマンド名>を指定すると当該コマンドの詳細な使い方を表示します。
先頭にもどる
《 return (繰り返し実行) 》
(1)コマンドフォーマット
: [RET]
(2)機能
D、DA、Sコマンドの [RET] のみによる繰り返し実行を行います。
(3)解説
(a)Dコマンドの繰り返し実行
: D FF0 FFF [RET]
<ADDR> < D A T A > < ASCII CODE >
0FF0 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F "@ABCDEFGHIJKLMNO"
: [RET]
1000 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F "................"
1010 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F "................"
1020 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F " !"#$%&'()*+,-./"
1030 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F "0123456789:;<=>?"
1040 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F "@ABCDEFGHIJKLMNO"
1050 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F "PQRSTUVWXYZ[\]^_"
1060 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F " abcdefghijklmno"
1070 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F "pqrstuvwxyz{|}~."
1080 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F "................"
1090 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F "................"
10A0 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF "................"
10B0 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF "................"
10C0 C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF "................"
10D0 D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF "................"
10E0 E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF "................"
10F0 F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF "................"
Dコマンド実行後に [RET] のみを入力すると、前回ダンプした次のアドレスから再
び256バイト単位で繰り返しメモリ内容をダンプします。
(b)DAコマンドの繰り返し実行
: DA 1000 1005 [RET]
<ADDR> <CODE> <MNEMONIC> <OPERAND>
1000 6CD3 MOV.B R3H,@-ER5
1002 0A0B INC.B R3L
1004 7A0100001028 MOV.L #H'00001028:32,ER1
: [RET]
100A 5C0002DA BSR 12E8:16
100E 40C8 BRA 0FD8:8
1010 5C0002C4 BSR 12D8:16
1014 7A050020FF56 MOV.L #H'0020FF56:32,ER5
101A FB0F MOV.B #H'0F:8,R3L
101C 1A80 SUB.L ER0,ER0
101E 01006DD0 MOV.L ER0,@-ER5
1022 1A0B DEC.B R3L
1024 46F8 BNE 101E:8
1026 5470 RTS
1028 0820 ADD.B R2H,R0H
102A 0800 ADD.B R0H,R0H
102C 6E68000A MOV.B @(H'00000A:16,ER6),R0L
1030 474C BEQ 107E:8
1032 0F95 MOV.L ER1,ER5
1034 01006D56 MOV.L @ER5+,ER6
DAコマンド実行後に [RET] のみを入力すると、前回のDAコマンドの最終アドレ
スを含む次のアドレスから再び16命令文の逆アセンブルを繰り返し行います。
(c)Sコマンドの繰り返し実行
: S [RET]
PC=0106 CCR=80:I....... SP=FF00
ER0=01234567 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
0100 7A0001234567 MOV.L #H'01234567:32,ER0
: [RET]
PC=010C CCR=88:I...N... SP=FF00
ER0=01234567 ER1=89ABCDEF ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
0106 7A0189ABCDEF MOV.L #H'89ABCDEF:32,ER1
: [RET]
PC=010E CCR=80:I....... SP=FF00
ER0=01234567 ER1=89ABCDEF ER2=01234567 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
010C 0F82 MOV.L ER0,ER2
Sコマンド実行後に [RET] のみを入力すると、前回のSコマンドで実行した次の命
令から再び指定された命令数分(上記の場合1命令)ユーザプログラムを実行します。
先頭にもどる
《 <command>. (コマンド履歴) 》
(1)コマンドフォーマット
: <コマンド名> . [RET]
<コマンド名> : 前回の内容を表示したいコマンドの名称
D、DA、F、H8、L、Mが指定可能
(2)機能
指定されたコマンドの前回の内容を表示し、キーボード入力待ち状態となります。
(3)解説
(a)コマンド履歴表示
: DA 1000 1005 [RET]
<ADDR> <CODE> <MNEMONIC> <OPERAND>
1000 6CD3 MOV.B R3H,@-ER5
1002 0A0B INC.B R3L
1004 7A0100001028 MOV.L #H'00001028:32,ER1
: DA. [RET]
: DA 1000 1005
指定されたコマンドの前回の内容を表示し、キーボード入力待ち状態となります。
(b)別コマンド実行後のコマンド履歴表示
: DA 1000 1005 [RET]
<ADDR> <CODE> <MNEMONIC> <OPERAND>
1000 6CD3 MOV.B R3H,@-ER5
1002 0A0B INC.B R3L
1004 7A0100001028 MOV.L #H'00001028:32,ER1
: R [RET]
PC=0000 CCR=80:I....... SP=FF00
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
: DA. [RET]
: DA 1000 1005
他のコマンドを実行後でもコマンド履歴を使用できます。
先頭にもどる
【割込み管理】
組み込み型モニタは、ユーザプログラムの割込みに対してベクタテーブルの二重化方式を
サポートしています。これにより、以下に示す組み込み型モニタ予約の割込み以外に対し、
当該ベクタアドレスを仮想的なベクタテーブルに用意するだけで割込み管理を行うことがで
きます。
・リセット −−> 組み込み型モニタの起動用割込みとして使用
・ベクタ番号1 −−> シングルステップの制御として使用
・ベクタ番号2 −−> ブレークポイントの制御として使用
(1)ベクタテーブルの二重化方式
ベクタテーブルの二重化方式とは、本来 H'0000 番地から配置すべきベクタテーブルを別
のRAM領域から配置することを言います。つまり、実機システムでは H'0000 番地以降の
数バイトはベクタテーブルを配置するためROM領域となります。組み込み型モニタを使用
した場合もこれを変更することはできません。しかし、ユーザプログラムをホスト端末より
ダウンロードしてデバッグする場合、ユーザプログラムのベクタテーブルもホスト端末より
ダウンロードすることになります。すると、ROM領域にユーザプログラムのベクタテーブ
ルをダウンロードすることになってしまいます。当然の事ながらROM領域にユーザプログ
ラムをダウンロードはできません。そこで、組み込み型モニタではユーザプログラムのベク
タテーブルを別のRAM領域(仮想ベクタ領域)から配置し、割込み発生時はそのベクタテ
ーブルを参照してユーザの割込みプログラムに起動をかけます。なお、仮想ベクタ領域はカ
スタマイズによりRAM領域であれば何番地からでも配置可能です。
以下に仮想ベクタ領域を H'8000 番地から配置した場合の例を示します。
本来のベクタアドレス 仮想ベクタアドレス
リセットPC初期値 H'0000 〜 H'0001 H'8000 〜 H'8001
(システム予約) H'0002 〜 H'000D H'8002 〜 H'800D
外部割込み NMI H'000E 〜 H'000F H'800E 〜 H'800F
TRAPA #0命令 H'0010 〜 H'0011 H'8010 〜 H'8011
TRAPA #1命令 H'0012 〜 H'0013 H'8012 〜 H'8013
TRAPA #2命令 H'0014 〜 H'0015 H'8014 〜 H'8015
TRAPA #3命令 H'0016 〜 H'0017 H'8016 〜 H'8017
(2)組み込み型モニタ予約の割込み
以下に示す割込みは組み込み型モニタ予約の割込みです。これらの割込みに対してユーザ
が割込みプログラムを記述することはできません。
・リセット −−> 組み込み型モニタの起動用割込みとして使用
・ベクタ番号1 −−> シングルステップの制御として使用
・ベクタ番号2 −−> ブレークポイントの制御として使用
これらの割込みが発生した場合、組み込み型モニタは以下のメッセージを表示します。
(a)リセット
H8/3664 Series Normal Mode Monitor Ver. 2.0A
Copyright (C) 2003 Renesas Technology Corp.
リセットが入力されると組み込み型モニタは初期化処理を行い上記のメッセージを表
示し、コマンド待ち状態に入ります。
(b)ベクタ番号1
: DA 0100 0104 [RET]
<ADDR> <CODE> <MNEMONIC> <OPERAND>
0100 0000 NOP
0102 5B04 JMP @@H'02:8
0104 0000 NOP
: G 200100 [RET]
@@H'02:8 Addressing !!
PC=0000 CCR=80:I....... SP=FF00
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
ユーザプログラム実行中にベクタ番号1の割込み(メモリ間接)が発生すると、上記
のメッセージを表示してユーザプログラムの実行を停止します。
(c)ベクタ番号2
: DA 0100 0104 [RET]
<ADDR> <CODE> <MNEMONIC> <OPERAND>
0100 0000 NOP
0102 5F08 JSR @@H'04:8
0104 0000 NOP
: G 0100 [RET]
@@H'04:8 Addressing !!
PC=0000 CCR=80:I....... SP=FEFE
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FEFE
ユーザプログラム実行中にベクタ番号2の割込み(メモリ間接)が発生すると、上記
のメッセージを表示してユーザプログラムの実行を停止します。
(3)未定義割込み
組み込み型モニタ予約の割込み以外の割込みは、仮想ベクタテーブルに割込みプログラム
のアドレスを記述するだけでサポートすることができます。ただし、このベクタアドレスが
記述されていない割込みが発生した場合、組み込み型モニタは以下に示すような割込み対応
のメッセージを表示してユーザプログラムの実行を停止します。
(下記の例は全て仮想ベクタ領域を H'200000 番地から配置したの場合の例です)
(a)JMP命令のメモリ間接
: D 8008 0009;W [RET] ( @@H'08:8 の仮想ベクタ領域 )
<ADDR> < D A T A > < ASCII CODE >
8008 0000 ".."
: DA 100 102 [RET]
<ADDR> <CODE> <MNEMONIC> <OPERAND>
0100 0000 NOP
0102 5B10 JMP @@H'08:8
: G 100 [RET]
@@H'08:8 Addressing !!
PC=0000 CCR=80:I....... SP=FF00
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
未定義( H'8008 〜 H'8009 がゼロ)のメモリ間接を利用したJMP命令が発生する
と、上記のメッセージを表示してユーザプログラムの実行を停止します。
(b)JSR命令のメモリ間接
: D 800A 800B;W [RET] ( @@H'0A:8 の仮想ベクタ領域 )
<ADDR> < D A T A > < ASCII CODE >
800A 0000 ".."
: DA 100 102 [RET]
<ADDR> <CODE> <MNEMONIC> <OPERAND>
0100 0000 NOP
0102 5F14 JSR @@H'0A:8
: G 100 [RET]
@@H'0A:8 Addressing !!
PC=0000 CCR=80:I....... SP=FEFE
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FEFE
未定義( H'800A 〜 H'800B がゼロ)のメモリ間接を利用したJSR命令が発生する
と、上記のメッセージを表示してユーザプログラムの実行を停止します。
(c)TRAPA
: D 8010 8011;W [RET] ( TRAPA #0の仮想ベクタ領域 )
<ADDR> < D A T A > < ASCII CODE >
8010 0000 ".."
: DA 100 102 [RET]
<ADDR> <CODE> <MNEMONIC> <OPERAND>
0100 0000 NOP
0102 5700 TRAPA #0:2
: G 100 [RET]
TRAPA #0 Occur !!
PC=0000 CCR=80:I....... SP=FEFC
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FEFC
未定義( H'8010 〜 H'8011 がゼロ)のTRAPA命令が発生すると、上記のメッセ
ージを表示してユーザプログラムの実行を停止します。
先頭にもどる
《 interrupt (内蔵周辺機能割込み管理) 》
(1)機能
組み込み型モニタはベクタ番号12以降の割込みに対しても、前ページまでの仮想ベクタ方
式をサポートしています。ただし、ベクタ番号12以降についてはカスタマイズにより本機能
の使用/未使用を選択できるようになっています。そして、本機能を選択した場合のみ、仮
想ベクタ方式による割込みのサポートや未定義割込みに対するメッセージ表示を行うことが
できるようになります。以下に本機能をサポートした場合の未定義割込み表示を示しておき
ます。
(下記の例は全て仮想ベクタ領域を H'8000 番地から配置したの場合の例です)
(2)解説
(a)TW の割込みが発生した場合
: H8 TW [RET]
<REG> <ADDR> <CODE> < 7 6 5 4 3 2 1 0 >
TMRW FF80 1.00.000 CTS BUFEB BUFEA PWMD PWMC PWMB
TCRW FF81 00000000 CCLR CKS2 CKS1 CKS0 TOD TOC TOB TOA
TIERW FF82 1...0000 OVIE IMIED IMIEC IMIEB IMIEA
TSRW FF83 1...1111 OVF IMFD IMFC IMFB IMFA
TIOR0 FF84 .000.000 IOB2 IOB1 IOB0 IOA2 IOA1 IOA0
TIOR1 FF85 .000.000 IOD2 IOD1 IOD0 IOC2 IOC1 IOC0
TCNT FF86 88BA
GRA FF88 FFFF
GRB FF8A FFFF
GRC FF8C FFFF
GRD FF8E FFFF
: D 802A 802B;W [RET] ( TW の仮想ベクタ領域 )
<ADDR> < D A T A > < ASCII CODE >
802A 0000 ".."
: G 100 [RET]
TW Interrupt Occur !!
PC=0000 CCR=80:I....... SP=FEFC
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FEFC
未定義( H'802A 〜 H'802B がゼロ)の TW 割込みが発生すると、上記のメッセージ
を表示してユーザプログラムの実行を停止します。
(b)A/D の ADI 割込みが発生した場合
: H8 A/D [RET]
<REG> <ADDR> <CODE> < 7 6 5 4 3 2 1 0 >
ADDRA FFE0 1F00
ADDRB FFE2 0000
ADDRC FFE4 0000
ADDRD FFE6 0000
ADCSR FFE8 11000000 ADF ADIE ADST SCAN CKS CH2 CH1 CH0
ADCR FFE9 0....... TRGE
: D 8032 8033;W [RET] ( A/D の仮想ベクタ領域 )
<ADDR> < D A T A > < ASCII CODE >
8032 0000 ".."
: G 100 [RET]
A/D Interrupt Occur !!
PC=0000 CCR=80:I....... SP=FEFC
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FEFC
未定義( H'8032 〜 H'8033 がゼロ)の A/D 割込みが発生すると、上記のメッセー
ジを表示してユーザプログラムの実行を停止します。
先頭にもどる
《 abort (アボート管理) 》
(1)機能
組み込み型モニタはNMI割込みに対して、ユーザプログラムを強制停止させるアボート
機能をサポートしています。ただし、このアボート機能はカスタマイズにより使用/未使用
を選択できるようになっています。そして、機能を選択した場合のみNMI割込みによるユ
ーザプログラムのアボートを行うことができるようになります。機能を選択しなかった場合
は、他の割込みと同様にユーザプログラムで割込みプログラムを定義することができます。
(2)解説
(a)アボート機能選択時
: G 100 [RET]
NMI(Abort Switch ON)入力
Abort at PC=3014
PC=3014 CCR=80:I....... SP=FF00
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
NMI入力を行うとユーザプログラムを強制停止します。
(b)アボート機能未選択時にNMI割込み(未定義)が発生した場合
(下記の例は仮想ベクタ領域を H'8000 番地から配置したの場合の例です)
: D 800E 800F;W [RET] ( NMI の仮想ベクタ領域 )
<ADDR> < D A T A > < ASCII CODE >
800E 0000 ".."
: G 100 [RET]
NMI Occur !!
PC=2000 CCR=80:I....... SP=FF00
ER0=00000000 ER1=00000000 ER2=00000000 ER3=00000000
ER4=00000000 ER5=00000000 ER6=00000000 ER7=0000FF00
未定義( H'800E 〜 H'800F がゼロ)のNMI割込みが発生すると、上記のメッセー
ジを表示してユーザプログラムの実行を停止します。
先頭にもどる
【最後に】
H8/300H Tinyシリーズ用の組み込み型モニタはフリーウェアです。著作権
は作成もとである ルネサスエレクトロニクス株式会社 が所有するものとします。
また、このソフトウェアを使用したことによる全ての損害について、作成もとは一切そ
の責任を負わないものとします。プログラムのバグについてもできる限り迅速に対処しま
すが、義務を負うものではありません。
更に、このソフトウェアの一部または全てを無断で転載することは禁止します。雑誌な
どへ紹介・収録の場合は事前にメールで連絡をお願い致します。また、このソフトウェア
に対する感想・意見・要望・バグ情報などございましたら下記の宛先までメールをお願い
致します。
E-mail : yuji.katori.ak@renesas.com
住所 : 東京都新宿区揚場町2−1 軽子坂MNビル
部署 : ルネサスエレクトロニクス株式会社 半導体トレーニングセンター
TEL : 03-3266-9344 (担当 鹿取)
FAX : 03-3235-5940
先頭にもどる