ルネサステクノロジマイクロプロセッサH8/300H用デバッグモニタです。2つの動作モードがあります。
現在以下のシステムでの動作を確認しています。
シリアルポートでPCと接続します。適当なターミナルソフトを以下の設定で使用します。
CPU 3052F(25MHz) 3068F(22MHz) 3068F(20MHz) 3067F(20MHz) 3664F(16MHz) ビットレート 115200bps 115200bps 57600bps 57600bps 38400bps データ長 8ビット パリティ 無し ストップビット 1
電源投入後ターミナルに以下のメッセージが表示されます。
H8/300(H) 3068F Monitor Ver. 0.22 (c)2003,2004 Takashi Shudo Virtual vector table area : FFBF20 - FFC01F Monitor used RAM area : FFC020 - FFC393 Monitor stack end address : FFC524 Build date : 11:05:48 Nov 28 2004 >
以下のコマンドが使用出来ます。
コマンド 機能 l S-Recordデータのロード r レジスタの表示、変更 g プログラムの実行 s プログラムのステップ実行 b ブレークポイントの設定、削除 d メモリのダンプ表示 m メモリの表示、書き込み a 逆アセンブル f 指定メモリ範囲の書き込み h ヘルプメッセージの表示
l [x]
S-Recordデータをメモリへロードします。
Please send S-records data.
のメッセージが表示されたら、ターミナルソフトのファイル送信機能を使用してS-Recordデータを送信してください。引数に x を指定すると受信時にX-Flowを使用します。S-Recordを受信中に
SCI Receive buffer full.
のメッセージが表示される場合にこのオプションを使用してください。このオプションを使用するときはターミナルソフトのX-FlowをOnにしてください。
r [[reg] val]
レジスタの表示編集を行います。regを省略すれば全てのレジスタの値を表示します。
例)
>r PC = FFC800 CCR = 80 R0 = 00000000 R1 = 00000000 R2 = 00000000 R3 = 00000000 R4 = 00000000 R5 = 00000000 R6 = 00000000 R7 = 00FFFF20 >
レジスタ名([reg])を指定すると、指定したレジスタの値を表示します。
例)
>r pc PC = 00FFC800 >
レジスタ名([reg])の後に値を16進数で指定([val])すると、指定レジスタに値を設定します。
例)
>r r0 100 R0 = 00000100 >
g [address]
プログラムを実行します。addressを指定すればaddressから実行します。
s
プログラムを1マシン命令実行します。
b [[address]|[- address]]
ブレークポイントを設定、削除または現在の設定を表示します。
(1) ブレークポイントの設定
引数にアドレスに対し、ブレークポイントを設定します。
(2) ブレークポイントの削除
引数に"- address"を指定した場合、指定アドレスのブレークポイントを削除します。
(3) 設定されているブレークポイントの表示
addressを指定しなければ現在設定されているブレークポイン示します。
例)
>b fff000 Set breakpoint at FFF000 >b 1 : FFF000 >b - fff000 Deleted breakpoint address FFF000. >
d [start [end]]
startからendまでのメモリ内用をダンプ表示します。
m [-b|w|l] address [value ...]
valueを指定しなければaddressのメモリ内容を表示します。valueを指定した場合はaddressのアドレスにvalueを書き込みます。-bまたはオプションを指定しなければバイトサイズで書き込みます。-wでワードサイズ(2バイト)、-lでロングワードサイズ(4バイト)で書き込みます。valueは複数個指定出来ます。(最大9個)
a [address [end]]
addressからendまでのメモリを逆アセンブル表示します。
f address end|@length value
addressからendまでのメモリにvalueを書き込みます。またはaddressから @length 分のメモリにvalueを書き込みます。
h
コマンドの表記を表示します。
bashライクなコントロールキー操作ができます。コマンドヒストリが使えます。
モニタ起動時のメッセージに表示される
Virtual vector table area : FFBF20 - FFC01F(仮想割り込みベクタ) Monitor used RAM area : FFC020 - FFC453(モニタワーク) Monitor stack end address : FFC5E4(モニタスタックエリア)
は、モニタのワークエリアを示しています。ユーザプログラムはこれらのエリアを破壊しないようにしてください。これらのエリアが破壊された場合、モニタは正常に動作できなくなります。
cygwin上のgdbで使用する場合はホームディレクトリ、またはカレントディレクトリににアーカイブ内のgdb.ini を置いてください。LinuxやBSDで環境を作っている方は.gdbinitに名前を変更してHOMEディレクトリ、またはカレントディレクトリに置いてください。
set remotebaud 57600
を、モニタのビットレートにあわせて修正してください。
target extended-remote COM4
を、GDBを使用するPCの環境に合わせて修正してください。
Linuxでは「/dev/cua0」や「/dev/ttyUSB0」(USBシリアル)になります。
gdbはcygwin 1.3でビルドしたバージョン5.1.1での動作を確信しています。
gdbは以下のようにビルドしました。
$ ./configure --target=h8300-hms $ make $ make install
上記では
/usr/local/bin
にgdbがインストールされます。実行は
$ h8300-hms-gdb
と入力します。
仮想ベクタテーブル機能があります。割り込みハンドラは通常の割り込み処理と同様にRTEで終了してください。
「リセット」割り込みと、モニタで使用している「SCI1」、「TRAPA#3」割り込み以外はユーザの割り込みベクタを動作させることが可能です。
モニタのLコマンドまたはgdbによる0x000000 - 0x0000ff(H8/3664の場合は0x003f)番地へのロードは仮想ベクタテーブルへ転送されます。よって、ベクタテーブルのセクションはROM化する場合と同様のマップ配置が可能です。
ただし、モニタのmコマンドでベクタテーブル領域を表示した場合、表示/編集されるのは実際のメモリ内容(本プログラムベクタテーブル内容)です。
モニタで使用するSCIは割り込みレベルを1にしています。割り込みハンドラでブレーク、ステップ実行を行う場合は割り込みレベルを0にして下さい。
注意
ユーザ割り込み処理の割り込みレベルを1に設定すると、モニタがコマンド入力待ち状態でも割り込みハンドラが実行されてしまいます。その場合、割り込みルーチンにブレークポイントを設定すると正常に動作しません。
H8用に構築したgccの環境が必要です。Makefileの以下の部分を編集してターゲットとなるシステムを選択してください。
#--- Select Processor (3052/3067/3068/3664) #include Makefile.3052 #include Makefile.3067 include Makefile.3068 #include Makefile.3664
Makefileの以下の部分を編集してプログラムの種類を選択してください。
#--- Select Program (mon/stub) #include Makefile.prg-stub include Makefile.prg-mon
"Makefile.prg-stub"はモニタコマンドを除いたgdb stub機能だけを使用する場合に選択してください。RAMの使用サイズを節約することが出来ます。
$ make depend $ make
でコンパイルしてください。
h8*.mot
をフラッシュROMに書き込んでください。
config.hを編集することで、モニタをカスタマイズすることが出来ます。
他のプラットホームで動作させたい場合や、SCIポートの変更、SCIビットレートを変更したい場合に変更してください。
SCIのBRRに設定する値を設定してください。
SCIレジスタのベースアドレス(先頭のアドレス)を設定します。モニタで使用したいSCIを変更する場合に設定します。その場合、使用する割り込みハンドラに該当するベクタテーブル(vect.c)を変更する必要があります。
SCIの受信バッファのバイトサイズを設定します。
SCIの送信バッファのバイトサイズを設定します。
コマンド入力に関する変更が可能です。設定値を少なくすることにより、RAMを節約することができます。
コマンドヒストリの数を指定します。
1行で編集できる最大文字数を指定します。
gdb stubの機能はGDB Remote Serial Protocolを使用しています。
参考:GDB Remote Serial Protocol(http://www.redhat.com/devnet/articles/gdbtable1.htm)
Takashi Shudo(shudo@mbe.nifty.com)