前回、XMODEMでプログラムを転送するところまで成功しました。
今回はブートローダをインストールしてブートローダでRAM上に転送したプログラムを動かしてみます。
KOZOSのサイトでは、
(H8移植編第4回)ブートローダでプログラムをロードしてみる
http://kozos.jp/kozos/h8_04.html
になります。
kzloadとosというフォルダを作り、こちらからそれぞれのプログラムをダウンロードして保存します。
http://kozos.jp/kozos/h8/h8_04/
h8_04 -┬- kzload
└- os
USBメモリーに保存し、FreeBSDの/usr/tmp/h8write/フォルダにコピーします。
# mount /mnt
# cd /mnt
# cp -R h8_04 /usr/tmp/h8write/
# cd /usr/tmp/h8write/h8_04/kzload
# ./make.sh clean
# ./make.sh
# ./make.sh image
H8マイコンのディップスイッチをON,ON,OFF,ONにして電源ON
# ./make.sh write
gmake: ../../h8write/h8write: Command not found
階層が1つ深くなったのでh8writeの相対指定が違うようです。
# vi Makefile
../../h8write/h8write -3069 -f20 $(TARGET).mot
の頭に../を追加してもう一度実行
書き込めました。
osフォルダに移動
# cd /usr/tmp/h8write/h8_04/os
# ./make.sh clean
# ./make.sh
# ./make.sh image
ここでは、hello.elfとhello.uuというファイルが出来ました。
H8マイコンのディップスイッチをON,OFF,ON,OFFに戻して
# cu -s 9600 -l /dev/cuad0
H8マイコンのリセットを押す
Hello World!
> load
~CLocal command? lsx hello.elf
Timeoutしてしまう
uuencode形式で送ってみる
# cd /usr/tmp/h8write/h8_04/kzload
# vi xmodem.c
/* #define USE_UUENCODE */ を
#define USE_UUENCOD に変更
# ./make.sh clean
# ./make.sh
# ./make.sh image
H8のディップスイッチをROM書き込み用に変更してリセット
# ./make.sh write
H8のディップスイッチを実行用に戻して
osフォルダに移動
# cd /usr/tmp/h8write/h8_04/os
H8と接続
# cu -s 9600 -l /dev/cuad0
H8リセット
Hello World!
> load
~CLocal command? lsx hello.uu
今度は送れました。
> run
starting from entry point.boot success!
os> run
run
runが走らずにrunの文字列が表示されることで、ブートローダで転送されたプログラムが動いていることがわかる。
os> ~ ctrl+D でcuを抜ける
上のhello.elfが転送できなかった件、lsx hello.elfではなくlsx helloで転送出来ました。 汗
> run
run error! あれ?xmodem.cを変更したから?
もう一度、hello.uuだときちんと動きました。
【おまけ】
H8マイコンのディップスイッチの切り換えですが、1番はそのままで2番~4番を逆の方に切り替えると覚えると楽です。