H8のシミュレータ環境

H8ボードが電圧の高い電源アダプタのせいで壊れてしまった。秋月電子が交換のものを送ってくらたのだが
2日程かかるので、その間にシミュレータ環境を構築してみることにした。
シミュレータ環境は、gdbのCPUエミュレーション機能を使う。

やり方は、kozosのページに書いてある。http://kozos.jp/kozos/h8_sim_01.html
を参考にして、gdb-7.2.tar.gzをダウンロードしてきて、H8ボード用のパッチをあてる。

以下のページがシミュレータ環境について書かれているページだ。

  • 「移植編その5:シミュレータで動作させる」(第1回〜第6回)

(シミュレータ編第1回)とりあえず動かしてみた
(シミュレータ編第2回)シリアル対応をした
(シミュレータ編第3回)シリアル対応の続きの説明
(シミュレータ編第4回)OSを直接起動する
(シミュレータ編第5回)タイマを実装する
(シミュレータ編第6回)ネットワーク対応だ!

  • (H8移植編その2(第9回と第14回と第15回)

(H8移植編その2第9回)シミュレータのsleep対応
(H8移植編その2第14回)シミュレータのLinux対応
(H8移植編その2第15回)シミュレータの送信割り込み対応


パッチをまとめて、githubに挙げてみた。

以下の3つのパッチを当てる。

  • Makefile.in.patch
  • Makefile.patch (configure実行済みの場合)
  • compile.c.patch

以下の2つのファイルを「gdb/sim/h8300/」以下にコピーする

  • device.c
  • serial.c

シミュレータ環境で動かす場合、kozosのビルド時にmakefile

CFLAGS += -DSIMULATOR

を追加するのを忘れないこと。

kozosの最新のソースコードがわかりづらかったので、最新ポイものをgithubに挙げてみた。

ここでは、シミュレータ環境について書いているが、最新ソースを実機で動作させる場合、以下の問題がある。
bootloadから起動して、OSイメージをXMODEMで転送しようとするとうまくいかない。
XMODEMの待ち合わせ処理がシミュレータ環境を想定して、少ない時間に修正されているためだ。

「bootload/xmodem.c」に以下の修正を入れる。

#ifdef SIMULATOR
    if (++cnt >= 50000) {
#else
    if (++cnt >= 2000000) {
#endif

これで、無事XMODEMでOSイメージを転送できるようになった。
※待ち合わせのタイミングは環境によって調整する必要がある。

シミュレータ環境でネットワークを使えるようにLinux上でTapインターフェイスを構築しようとしたが
時間切れとなってしまった。Tapインターフェイスは、kvmopenvpnで使用されているらしいので、今度調査したいと思う。