モニタのカスタマイズ・コンパイル
さて、ここから、リモートデバッガ本体のカスタマイズを始めます。
これを怠ると、全く動きません。(あるいは動いても、SRAMを認識しなかったりします。)
まずやるべきことは、どのモジュールを組み込んで、どのモジュールを組み込まないか、を決めることです。
先のダウンロードしたモニタを展開し、最初のフォルダにあるmonitor.subファイルを編集することによって行います。
具体的にどのように編集すれば良いか、については
http://www.hitachisemiconductor.com/sic/jsp/japan/jpn/Sicd/Japanese/Seminar/akih8.htm
が参考になるかと思います。
ここでは参考として、私が作ったmonitor.subファイルを示しておきます。
INPUT monitor
INPUT cmd01,cmd02,cmd03,cmd04,cmd05,cmd06,cmd07,cmd08,cmd09,cmd10
INPUT cmd11,cmd12,cmd13,cmd14,cmd15,cmd16,cmd17,cmd18,cmd19,cmd20
INPUT cmd21, cmd23,cmd24,cmd25,
cmd27,cmd28,cmd29,cmd30
INPUT cmd31,cmd32,cmd33,cmd34,cmd35,cmd36,cmd37,cmd38
INPUT dmy26,dmy39
INPUT mod01,mod02,mod03,mod04,mod05,mod06,mod07,mod08,mod09,mod10
INPUT mod11,mod12,mod13,mod14,mod15,mod16,mod17,mod18,mod19,mod20
INPUT mod21,mod22,mod23,mod24,mod25,mod26,mod27,mod28,mod29,mod30
INPUT mod31,mod32,mod33,mod34,mod35, mod37,mod38,mod39
INPUT advanced
INPUT cpu01,cpu02,cpu03,cpu04
DEFINE $BRR(0C)
DEFINE $STACK(0FFF00)
PRINT MONITOR.MAP
OUTPUT MONITOR.ABS
START VECTOR(0),ROM(130),RAM(0FEF10),USER(20000),SCI(0FFFFB8)
EXIT
次にやることは、monitor.srcファイルの編集です。
ここに書かれた内容にしたがって、内部動作の状態をつかさどるレジスタ群を初期化することが出来ます。
このリモートデバッガは、SRAMを増設していないことを前提に作られているので、そのことを明記する必要があります。
具体的には、
・メモリへのアクセス速度の調整
・8ビットアクセスであることの明記
・アドレスバスやCSを使用する宣言
などです。
これについては大変詳しく書かれたページがあります。
http://www.ae.wakwak.com/~agkobay/H8/ext-ram.html
です。低速(もしくはより高速)のメモリを動作させたい場合などは、そちらを参考にしてください。
また、H8のメーリングリスト
http://www.exp.org/h8/h8-ml.html
もおおいに参考になります。
ここでは、これを参考にして作ったmonitor.srcファイルを示しておきます。
;************************************************************************
;* H8/300H Monitor Program (Advanced Mode) Ver. 2.2A *
;* Copyright (C) Hitachi, Ltd. 1995 *
;* Copyright (C) Hitachi Microcomputer System, Ltd. 1995 *
;************************************************************************
.PROGRAM INITIALIZE ; Program Name
.CPU 300HA ; CPU is H8/300H Advanced
.SECTION ROM,CODE,ALIGN=2 ; ROM Area Section
;************************************************************************
;* Export Define *
;************************************************************************
.EXPORT _INITIALIZE ; User Initialize Module
ABWCR: .EQU H'FFFFEC
ASTCR: .EQU H'FFFFED
WCR: .EQU H'FFFFEE
WCER: .EQU H'FFFFEF
P1_DDR: .EQU H'FFFFC0
P2_DDR: .EQU H'FFFFC1
P5_DDR: .EQU H'FFFFC8
P6_DDR: .EQU H'FFFFC9
P8_DDR: .EQU H'FFFFCD
;************************************************************************
;* User Initialize Module *
;* Input ER5 <-- Return Address *
;* Output Nothing *
;* Used Stack Area --> 0(0) Byte *
;************************************************************************
_INITIALIZE:
; RAM用初期化
MOV.B #H'FF,R0L
MOV.B R0L,@ABWCR ; バス幅8ビット
MOV.B #H'FF,R0L
MOV.B R0L,@ASTCR
MOV.B #H'FF,R0L
MOV.B R0L,@WCR
MOV.B #H'FF,R0L
MOV.B R0L,@WCER
MOV.B #H'FF,R0L
MOV.B R0L,@P1_DDR ; P1:アドレスバス(A0-A7)
MOV.B R0L,@P2_DDR ; P2:アドレスバス(A8-A15)
MOV.B #H'E8,R0L
MOV.B R0L,@P8_DDR ; P8-3 CS1出力
JMP @ER5 ; Goto Monitor Program
.END ;
さて、ここまでで下準備が完成しました。いよいよコンパイルです。
実はコンパイルは、大変面倒です。
先ほど入手したsrcファイルのほとんどすべてを、A38H.exeで(-cpu=300haオプション付きで)アセンブルする必要があるからです。
(ただし、cpu.srcファイルについては、そのチップ専用のものだけをコンパイルすればよいです。)
それらのアセンブルが終わると、objが出来ます。
このobjファイルを1箇所に集め、monitor.subを元にリンクし、最終的にはコンバータでmotファイルにします。
結構面倒な作業のため、バッチファイルを作ってみました。
使い方は、展開したフォルダの最初のところ(monitor.srcと同じ階層のフォルダ)にこれをコピーします。
そしてDOSプロンプトで、そのフォルダにはいり、
monmake.bat (A38H.exe L38H.exe C38H.exeが存在するフォルダ)
と入力すればOKです。( 例: monmake.bat d:\h8\3048\asm
・・・注:最後の\マークはありません)
objというフォルダが自動的に作られ、その中にmonitor.motファイルが出来ます。
バッチファイルのダウンロード(基本的に配布自由です。ただし使用したことによる損害等については、一切保証しません。)
最後に、このmotファイルを書きこめば完成です。
うまく行きましたか?うまく行かないときは、ハード・ソフト両方を疑いましょう。
片方だけ見ていても、問題はなかなか発見できません。
戻る