[H8-ML(1251)] RE: [H8-ML (1243)] Re: 日立のモニタについて
From: "Konodo" <f1r@xxxxxxxxxxxxxxx>
Date: 2001年08月17日(金)20時11分34秒
近藤です。
お世話になっております。
日立のモニタ改造における、問題点について日立の
鹿取さんから、アドバイス頂きました。
鹿取さんの、了承を得ておりますので、その内容に
ついて、下記に掲載します。
尚、このアドバイス通りに修正したら、問題なく動作しました。
鹿取さんありがとうございました。

以下、鹿取さんのメールより
------------------------------------------
 メーリングリストのアーカイブを拝見しました。
 上手く動作しているみたいですが、疑問点に付いてお答えしておきます。

・ベクタテーブルのイニシャライズ
 ベクタテーブルのイニシャライズはご指摘の通りです。モニタプログラムでは
システム起動時、及びユーザプログラムをダウンロード時に仮想ベクタ領域を
イニシャライズ(VECTOR_INITをサブルーチンコール)します。理由は未定義割
込みの有無を判断するためです。
 この処理は近藤さまのような使い方の場合は不要です。削除して頂いて構
いません。
 しかしながら、削除すると、本当に未定義割込みが起こった場合に暴走する
ことになります。それでも良しとするか、ないしは未定義割込みのベクタアドレ
スに対して特別な(例えば無限ループするなどの)ハンドラのアドレスを登録し
ておくべきかもしれません。

・RAM領域の先頭アドレス + H'40番地
 これはユーザプログラムの初期SPを格納するエリアです。モニタプログラム
を使わない本当のシステムであれば、SPの初期化はリセット直後の最初の
命令で行います。
しかしながら、モニタプログラムはRTE命令でユーザプログラムを起動するた
め、どうしてもユーザプログラム実行前にSPが決定されていなければならな
いのです。そこでリンケージのサブコマンドファイルでDEFINE $STACKを使
い、初期SPの値を尋ねているのです。
 ここで指定された値はモニタプログラムのイニシャライズ処理(R_COM_INIT
サブルーチン)の中で「RAM領域の先頭アドレス + H'40番地」に設定されま
す。通常動作であれば何の問題も無いのですが、近藤さまのように直接ユー
ザプログラムを起動する場合、モニタプログラムに変わってユーザプログラム
の初期SPを目的の番地に設定しなければなりません。
 従いまして、細かいコーディングは別として、対策自体は正解です。

 ただし、現状のコーディングではリロケータブル性が良くありません。RAM
領域の番地を変えると、動かなくなってしまいますからね。
 そこで、宜しければ以下のようなコーディングに変更してみてはどうでしょうか?

	mov.l	#h'00ffff0c,er0
	mov.l	er0,@h'3f040

 この部分を

	MOV.L	#$STACK,ER0
	MOV.L	ER0,@(36,ER7)

 です。それと.IMPORTで$STACKを宣言しておいてください。多分、これで良い
はずです。


 以上、よろしくお願い致します。

 --------------------------------------------------------
  (株)日立製作所 半導体グループ カスタマサービス本部
   半導体トレーニングスクール  鹿取 祐二
   TEL 03-3266-9344  FAX 03-3235-5940
   E-Mail katori-yuji@xxxxxxxxxxxxxxxxx
          katori-yuji@xxxxxxxxxxxxxxxxxxxxxxxxx(旧)
 --------------------------------------------------------


スレッド概略
[表示中](起点)


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]