工作室




3. モニタプログラム

AKI-H8(H8/3048)によるエレキー製作では、 プログラム開発用のモニタプログラムとして(株)日立製作所半導体事業部半導体トレーニングスクール提供のモニタプログラムを利用させていただきました。これは下記のURLから入って、「サンプルプログラム」へ進み、 『H8/300H ダウンロードファイル』 で入手出来ます。(注記参照)
http://www.hitachisemiconductor.com/sic/jsp/japan/jpn/PRODUCTS/MPUMCU/TOOL/index.html AKI−H80用のモニタプログラムも掲載されています。ただしこれは、コンパイルや変換がなされた MONITOR.MOT のみです。
モニタのみで使用するにはこれで問題有りませんが、他のプログラムと一緒にROMに焼く場合や、使用する機能を変更したい場合、設定などを変更したい場合はソースからコンパイルをやり直す必要があります。
上記ページにはカスタマイズの方法も掲載されていますので参考にしてください。
ここでは、モニタプログラムと、ユーザプログラムを一緒にROM化する方法に関して記載します。

(注記)
日立製作所の半導体部門は、2003年4月に設立された株式会社 ルネサス テクノロジに移管されております。上記のリンクは現在は有りません。最新の技術情報や、ドキュメント類は、ルネサス テクノロジのホームページから入手することが出来ます。しかし残念ながら、ここで紹介している
AKI−H80用のモニタプログラムやDOS版モニタプログラムは公開されていないようです。

(1) 準備

上記URLから辿って、MS−DOS版の
H8/300H用モニタプログラム 300hmoni.zip をダウンロードします。
私が使用したのは Ver. 2.2A でした。
最初に入手したのは Ver. 2.0C でしたが、バージョンアップによってファイル構成が変わることが有る様です。今後最新バージョンを使用した場合、以下に示した手順、ファイル名等が食い違う事があるかもしれませんのでご注意下さい。

300hmoni.zip をディレクトリ付きで展開(解凍)します。
沢山のファイルが生成されますが、使用するのはソースプログラムのみです。同梱のオブジェクトファイルやライブラリは使用できませんので不要です。
また、H8/3048 以外の定義ファイル等も不要です。

(2) ソースファイルの修正

以下のファイルはソースでの修正が必要です。

ADVANCED.SRC

モニタプログラムの本体です。
リセット時の起動を別プログラムからとするために、ソースの最後にある

.END INT00


.END

に修正しました。
モニタのみで使用する場合、リセット後モニタプログラムを起動する場合は修正不要です。
修正後のファイル名は ADVANCE1.SRC としました。

CPU02.SRC

単に表示上だけの問題ですが、
Displays contents of H8/304 2 peripheral registers.
となっていましたので、
Displays contents of H8/304 8 peripheral registers.
と直しました。
修正後のファイル名は CPU02a.SRC です。

CPU04.SRC

ベクトルテーブルを定義しているファイルです。
リセット後の起動アドレス及び、割り込みを使用している場合はそのアドレスを定義します。具体的には

.IMPORT INITK ;リセットベクトル
.IMPORT ITU_I1 ;ITU1割り込みベクトル
.IMPORT ITU_I2 ;ITU2割り込みベクトル

の様に外部定義を参照しておき、ベクタテーブルを以下のように書き換えます。

LARGE_VECTOR:
   .DATA.L INITK,INT01,INT02,INT03   ; Large Vector Table

   .DATA.L INT04,INT05,INT06,INT07  ;
   .DATA.L INT08,INT09,INT10,INT11  ;
   .DATA.L INT12,INT13,INT14,INT15  ;
   .DATA.L INT16,INT17,INT18,INT19  ;
   .DATA.L INT20,INT21,INT22,INT23  ;
   .DATA.L INT24,INT25,INT26,INT27  ;
   .DATA.L ITU_I1,INT29,INT30,INT31  ;ITU1
   .DATA.L ITU_I2,INT33,INT34,INT35  ;ITU2
     :
     :

INITK、ITU_I1、ITU_I2のラベルは、キーヤプログラムの方で外部参照の定義を忘れずにしておきます。
モニタのみで使用する場合、割り込みを使用しない場合は修正不要です。
修正後のファイル名は CPU04a.SRC としました。

CMD24.SRC

AKI−H80付属のオブジェクトコンバータで変換したファイルを、モニタのLコマンドで受信すると必ずチェックサムエラーが発生します。
日立と秋月の計算方法に違いがあるようです。秋月方式で計算するように修正すればよいのでしょうが、面倒なので、チェックサムエラーを検出しないようにしました。
Load Command Sub Module 内でチェックサムエラーを検出しているところは、

JSR    @ER2    ; Goto Recode Module
NOT.B R6H     ; Test Check Sum
BNE   ERR11    ; Check Sum Error

の部分です。この分岐を実行しないように

JSR    @ER2    ; Goto Recode Module
NOT.B R6H    ; Test Check Sum
BRN   ERR11   ; Check Sum Error

の様に修正しました。尚、日立のウェブページでは分岐命令を NOP に変更する方法が紹介されています。
修正後のファイル名は CMD24a.SRC としました。


(3)コンパイル、リンク及び変換

リンクに使用したサブコマンドファイルを以下に示します。
最初の行にある  keymain及びkeysub はキーヤのプログラムで、これがユーザプログラムです。本体とサブルーチンを分けて有りますのでその二つを記載します。
コマンド履歴はRAMを多く使用するため、この機能は外してあります。(日立が公開しているAKI−H80専用モニタプログラム Akih8.zip も同様にコマンド履歴はありません。)
INPUT文に記載されたオブジェクトに対応したソースファイル全てをAKI−H80に付属のコンパイラでコンパイルします。

INPUT keymain.OBJ
INPUT keysub.OBJ
INPUT ADVANCE1.OBJ
INPUT CPU01.OBJ
INPUT CPU02a.OBJ
INPUT CPU03.OBJ
INPUT CPU04a.OBJ
INPUT CMD01.OBJ
INPUT CMD02.OBJ
INPUT DMY03.OBJ
INPUT CMD04.OBJ
INPUT CMD05.OBJ
INPUT CMD06.OBJ
INPUT CMD07.OBJ
INPUT CMD08.OBJ
INPUT CMD09.OBJ
INPUT CMD10.OBJ
INPUT CMD11.OBJ
INPUT DMY12.OBJ
INPUT CMD13.OBJ
INPUT CMD14.OBJ
INPUT DMY15.OBJ
INPUT CMD16.OBJ
INPUT CMD17.OBJ
INPUT DMY18.OBJ
INPUT CMD19.OBJ
INPUT CMD20.OBJ
INPUT CMD21.OBJ
INPUT DMY23.OBJ
INPUT CMD24a.OBJ
INPUT CMD25.OBJ
INPUT DMY26.OBJ
INPUT CMD27.OBJ
INPUT CMD28.OBJ
INPUT DMY29.OBJ
INPUT CMD30.OBJ
INPUT CMD31.OBJ
INPUT CMD32.OBJ
INPUT CMD33.OBJ
INPUT CMD34.OBJ
INPUT CMD35.OBJ
INPUT CMD36.OBJ
INPUT CMD37.OBJ
INPUT CMD38.OBJ
INPUT DMY39.OBJ
INPUT MOD01.OBJ
INPUT MOD02.OBJ
INPUT MOD03.OBJ
INPUT MOD04.OBJ
INPUT MOD05.OBJ
INPUT MOD06.OBJ
INPUT MOD07.OBJ
INPUT MOD08.OBJ
INPUT MOD09.OBJ
INPUT MOD10.OBJ
INPUT MOD11.OBJ
INPUT MOD12.OBJ
INPUT MOD13.OBJ
INPUT MOD14.OBJ
INPUT MOD15.OBJ
INPUT MOD16.OBJ
INPUT MOD17.OBJ
INPUT MOD18.OBJ
INPUT MOD19.OBJ
INPUT MOD20.OBJ
INPUT MOD21.OBJ
INPUT MOD22.OBJ
INPUT MOD23.OBJ
INPUT MOD24.OBJ
INPUT MOD25.OBJ
INPUT MOD26.OBJ
INPUT MOD27.OBJ
INPUT MOD28.OBJ
INPUT MOD29.OBJ
INPUT MOD30.OBJ
INPUT MOD31.OBJ
INPUT MOD32.OBJ
INPUT MOD33.OBJ
INPUT MOD34.OBJ
INPUT MOD35.OBJ
INPUT MOD37.OBJ
INPUT MOD38.OBJ
INPUT MOD39.OBJ
INPUT MONITOR.OBJ
DEFINE $BRR(19)
DEFINE $STACK(0FFF00)
PRINT keymonit.MAP
OUTPUT keymonit.ABS
START VECTOR(0),ROM(100),RAM(0FEF10),USER(0FF000),
     KRAM1(0FF100),KRAM2(0FFE40),TBL(07000),SCI(0FFFFB8)
EXIT

START文の KRAM1及び KRAM2 はユーザプログラム(ここではキーヤープログラム)が使用するRAM領域の定義です。また、TBLはサブルーチンのエントリーアドレスのテーブルです。(上記ではSTART文は2行に分かれていますが、本来は1行です。)
リンクにより出来た keymonit.ABS をオブジェクトコンバータで変換します。
最後に、WriterソフトでROMに焼いて完了です。




工作室メニューへ戻る