デバッキングツール TRADE

松浦隆明
 
 TRADEは,ZAIDとZ80TRACERの機能をより強化したトレーサ&デバッガです。いろいろな機能を組み込んだために,サイズは8Kバイトもの大きさになってしまいましたが,オフセットをつけることで解決されています。
 また,TRADEでは,ZEDA-3でアセンブルした際に使用したラベルテーブルを参照してシンボリックデバッグすることが可能です(ただし,持殊ワークが破壊されていないこと)。そして,逆アセンブル時には,S-OSの内部ルーチンなどあらかじめユーザー定義されている部分や,あからさまなデータ部分などは,ニーモニックと区別して出力されます(メッセージ出力など)。
 さらにTRADE上からS-OSのコマンドを実行できます。このシステムでは,特にロード/セーブ用のコマンドは用意してありませんので,デバッグするプログラムは,メモリ上に残っている以外はS-OSコマンドで呼び出して使用することになります。バッチ処理も利用できますので,解析用に使用するのであれば,
 X #VER 1FF7
 X #PRINT 1FF4
 X #PRINTS 1FF1
といったファイルを作ってS-OSの内部ルーチンなどをラベル登録しておくのもよいでしょう。ただし,ラベルを使用する場合,コマンド入力文字数が,80字に制限されます。
 

◆TRADEのコマンド

 TRADEで使用できるコマンドを解説します。[]でくくられた部分は省略可能です。そのほかの略号は以下のとおりです。
 label
 ad,st,ed
 n,m
 data
ZEDAのラベルと同じ
16進4桁またはラベル
16進2桁
16進2桁または""で囲まれた文字列。ただし,:,*,/,+,-の前までが有効となる
L [st[ed]]
 stからedまで逆アセンブルします。edが省略された場合には64Kバイト分,st,edとも省略された場合は前回の続きから逆アセンブルします。表示されているオブジェクトはそのままエディット可能。ニーモニックの前についている記号には次のような意味があります。
 : ニーモニック
 * SS,ESで登録されているラベル
 / データ
T [ad]
 adからトレースを開始する。PCはトレースを終了したアドレス,またはプレイクポイントが設定されているアドレスを示しています。オフセットがついていてもトレースは可能ですが,この場合SS,ESコマンドでユーザープログラムを登録することはしないでください。
 また,S-OSの内部ルーチンにレジスタで渡すデータがアドレスである場合には,そのデータにオフセットを加算しなければなりません(例,#MSXのDEレジスタなど)。
 スペースキーが押されている間は連続してトレースするほか,このモードでは,以下のコマンドが使用てきます。
 Q
 G
 C
 E
 D
 S
 L
トレース中止
SSコマンドと同じ
SCコマンドと同じ
ESコマンドと同じ
メモリダンプ
表示されている命令をスキップ
ループをトレースせずに実行する。ループの最後でループを抜けてくるときだけ使用できる(それ以外のときは暴走の可能性がある)。実際には,このコマンドを使用した次のアドレスにJP nnnnを書き込み,コマンドを使用したアドレスに飛ぶ
 H
ヘルプ
 ただし,CPUコントロール命令はNOP命令と同等に扱われます。また,LD I,Aは実行されますので割り込みを使用したシステムでは注意が必要です。
 このトレーサでは,ROMの中はトレースできませんので“SWORD"の内部までトレースすることは考慮されていません。MZ-2500やX1turboなど“SWORD"内部でスタックポインタを操作しているものに関しては正常動作しない場合があります。
 また,MZ-2500では内部スタックに対して特殊な操作が行われていますので,POP,RET命令などスタックに関わる命令をトレースするとき,正常動作しない可能性があります。そこでこのプログラムては(#MEMAX)を256バイトずらしユーザースタックを碓保してあります。したがって,トレース時にSPが1900H以下のときにはトレースモードを抜けてスタックを以前の(#MEMAX)の値に直さねばなりません。さらにトレース中に数値,文宇などの入力を行うコマンドを使用すると,(#KBFAD)の内容が破壊されます。
T/[ad]
 データを画面の固定座標に表示しながらトレースを実行します。
D [st[ed]]
 stからedまでのメモリ内容を表示します。edを省略した場合には128バイト分,st,edともに省略された場合は,前回の次のアドレスから128バイト分表示します。表示されている内容はすべてエディットすることが可能です。
J [ad]
 adをコールします。adが省略された場合は現在のプログラムカウンタに飛びます。
R
 レジスタの内容を表示します。フォーマットは,
 r=AF,BC,HL,IX,IY
 r'=AF',BC',HL',SP,XX
となっており,XX以外はエディット可能です。XXはトレースのときに意味を持っており,次にトレースするオペランドの数によって,
 0: (HL)
 1: オペランドの内容
 2: 第2オペランドの内容
を表します。
O [ad]
 オフセットアドレスを設定します。adを省略した場合は現在設定されているオフセットを表示します。ここで設定されたアドレスはT,L,D,F,Mコマンドに対して有効となります。
F st ed data
 メモリサーチです。stからedまでのメモリからdataを探して表示します。
M st ed ad
 メモリコピーです。stからedまでの内容をad以降にコピーします。
B [ad]
 ブレイクポイントをadに設定します。adを省略するとブレイクポイントの設定されているすべてのアドレスを表示します。
C [ad]
 ブレイクポイントの設定を解除します。adが省略された場合は,すべてのブレイクポイントを解除します。
P
 プリンタのON/OFFを切り替えます。
I [n[ad]]
 nは表示位置固定トレースの場合のY座標を設定します。adはラベルの登録されている特殊ワークエリアのオフセットを設定します。パラメータが省略されたときは,現在の設定値を返します。
X label[ad]
 labelをadの値で登録します。adが省時された場合は,そのlabel値を表示します。
SS [ad]
 トレース時にトレースせずに実行するサブルーチンのアドレスを設定します。adが省略された場合には,現在登録されているアドレスを表示する。ただし,登録したサブルーチンのリターンアドレスがCALL命令の書かれている直後のアドレスでない場合には使用できません。現在,51個登録されています。ESコマンドと合わせると127個まで登録できます。
SC [ad]
 SSコマンドで設定されたアドレスを解除します。adが省略された場合はすべて解除されます。
ES [ad n [m]]
 SSコマンドで設定できないサブルーチンを登録します。nはCALLの直後に置かれているデータのバイト数を指定するものです。#MPRINTなどのようにエンドコードまでのバイト数が不定のものの場合は,n=0とし,mにエンドコードを登録します。たとえば,
 T:ES #PAUSE 02
 T:ES #MPRINT 00 00
以上のように使用することになります。データのバイト数が不定で,しかもエンドコードのないデータを持つルーチンは設定することができません。
EC [ad]
 ESコマンドで設定されたアドレスを解除します。adを省略するとすべて解除されます。
Q
 S-OSに戻ります。
#[S-O5のコマンド]
 S-OSのコマンドを実行します。
 T:#DA:
などのように使います。
H
 ヘルプメニューを表示します。
図 メモリマップ
5000H



6982H

69C0H


6AC0H

6B00H


6B40H

6B90H

6C90H

6CFFH
 

本体
 
各種ワーク
サブルーチンテーブル
最大127個、51個使用済み
ブレイクポインタテープル
最大15個
特殊サブルーチンテーブル
最大15個、2個使用済み
キー入力バッファ
ラベルプリント用バッファ
スタックエリア
 
(C)1988 Takaaki Matsuura(original)
(C)1997 Junji Okazaki(edited)
(C)2024 Oh!Ishi,Nibbles Lab.(formatted)