いまさらですが、余っているH8/3664ボードを何かに使おうと思って、開発環境を調査してみました。
1.環境
VMware上の Lubuntu14.04.2をターゲットにします。
OSをインストールしたら、build-essentialパッケージをインストールした後、VMware-Toolsをインストールします。
2.Cコンパイラ
いまさらアセンブラもないので、Cコンパイラを探します。
synapticでh8を検索すると、binutils-h8300-hmsとgcc-h8300-hmsが見つかります。これらをインストールします。これらをインストール後、バージョンを確認すると以下のようになっていました。
~$ h8300-hitachi-coff-gcc -v Reading specs from /usr/lib/gcc/h8300-hitachi-coff/3.4.6/specs Configured with: ../configure coff Thread model: single gcc version 3.4.6 ~$
3.書き込みツール
昔、三岩さんが作られたものと思われるツールが sourceforge にあがっていましたのでコンパイルしてみます。説明では先頭の4行を環境に合わせて修正してからコンパイル、と書いてありましたが、はじめからLinuxのみが#defineされていました。
~$ mkdir H8tools ~$ cd H8tools/ ~/H8tools$ wget mes.sourceforge.jp/h8/h8write.c --2015-xx-xx xx:xx:xx-- http://mes.sourceforge.jp/h8/h8write.c mes.sourceforge.jp (mes.sourceforge.jp) をDNSに問いあわせています... 202.221.179.22 mes.sourceforge.jp (mes.sourceforge.jp)|202.221.179.22|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 70666 (69K) `h8write.c' に保存中 100%[======================================>] 70,666 128KB/s 時間 0.5s 2015-xx-xx xx:xx:xx (128 KB/s) - `h8write.c' へ保存完了 [70666/70666] ~/H8tools$ gcc h8write.c -o h8write h8write.c: In function ‘error_print’: h8write.c:732:4: warning: format not a string literal and no format arguments [-Wformat-security] fprintf(stderr,message[error_code]); ^ h8write.c:733:4: warning: format not a string literal and no format arguments [-Wformat-security] if ( s_message != NULL ) fprintf(stderr,s_message); ^ h8write.c:737:4: warning: format not a string literal and no format arguments [-Wformat-security] fprintf(stderr,message[error_code]); ^ h8write.c:738:4: warning: format not a string literal and no format arguments [-Wformat-security] if ( s_message != NULL ) fprintf(stderr,s_message); ^ h8write.c:742:4: warning: format not a string literal and no format arguments [-Wformat-security] fprintf(stderr,message[error_code]); ^ h8write.c:743:4: warning: format not a string literal and no format arguments [-Wformat-security] if ( s_message != NULL ) fprintf(stderr,s_message); ^ ~/H8tools$
Warningがたくさん出ましたが、実行ファイルは生成されました。
4.コンパイルテスト
Strawberry LinuxのWebサイトからLED点滅サンプルを持ってきてコンパイルしてみました。
$ wget strawberry-linux.com/h8/h8led-0.1-20020706.tar.gz $ tar xvfz h8led-0.1-20020706.tar.gz $ cd h8led $ make clean $ make
・・・が、-lc がないと言って怒られます。探してみると、どこにもH8用のlibc.aがありません。これは libc.a がないことを意味していますので、newlibをインストールすることにしました。
5.newlibのインストール
組み込み用のlibcであるnewlibをコンパイルします。
その前に、まずgitからインストールです。
~$ mkdir newlib ~$ cd newlib/ ~/newlib$ sudo apt-get install git ~/newlib$
さらに、newlibのソースを取ってきます。
~/newlib$ git clone git://sourceware.org/git/newlib-cygwin.git
このままコンパイルすると、「makeinfoがない」といって怒られますので、synapticでtexinfoパッケージをインストールして、別のターミナルを新規に開いてから configureスクリプトを走らせて、make、make install します。
~/newlib/newlib-cygwin$ ./configure --target h8300-hitachi-coff ~/newlib/newlib-cygwin$ make ~/newlib/newlib-cygwin$ sudo make install
libc.a、libg.a、libm.a が /usr/local/h8300-hitachi-coff/lib の下にインストールされました。
6.改めてコンパイルテスト
よくみると、さらにはMakefileでライブラリパスが設定されていなかったので、これを修正してみたのですが、今度は互換性のないlibc.aをスキップしました、となってしまいました。
~/H8sample/h8led$ make h8300-hms-gcc -O -mh -g -mrelax -mint32 -DH8_3664 -T h8-3664.x -L /usr/local/h8300-hitachi-coff/lib -nostdlib 3664crt0.S led.o -o h8led.exe -lc -lgcc /usr/lib/gcc/h8300-hitachi-coff/3.4.6/../../../../h8300-hitachi-coff/bin/ld: 互換性のないを /usr/local/h8300-hitachi-coff/lib/libc.a スキップしました (-lc を探索している時) /usr/lib/gcc/h8300-hitachi-coff/3.4.6/../../../../h8300-hitachi-coff/bin/ld: cannot find -lc collect2: ld returned 1 exit status make: *** [h8led.exe] エラー 1
確か、gccのクロスコンパイラをビルドするときにはライブラリ(libcなど)なしで一度コンパイラをビルドしてライブラリをビルド、その後再度コンパイラをビルドし直す手順になっていたかと思うのですが、そのへんがちゃんと行われていないのかもしれません。(ググってもnewlibのバイナリがなく、ソースからビルドするしかなさそうだ、という時点で嫌な予感はしたんですけどね)
7.まとめ
・・・うーむ。ぐぐってみると、同じ問題がはるか昔に出ていたようです。
https://bugs.launchpad.net/ubuntu/+source/gcc-h8300-hms/+bug/342667
ここを見る限り、リポジトリにあってSynapticでインストールできても結局メンテナンスされてなくて使い物にならないようで、そのままずーっと放置されているようですね。
コンパイラごとソースからビルドすれば動く組み合わせもあるかもしれませんが、そこまでして動かす元気はありません。今でも秋月ではH8/300のボードを売ってますが、みなさんどうやって使ってるのでしょう?(メンテナンス目的?教材用?)
いまでもcygwin + gcc2.95.3ベースの環境をCD-Rで売ってるようですが、いまさらのような気がします。
H8は比較的電子工作用途に受け入れられた数少ない日本製マイコンですが、この状況ではとても使う気にはなれません。かといって、いまさらR8Cとか78Kとかってのもないでしょうから、素直に諦めるほうが良さそうです。
さて、余ってしまったボード、どうしよう・・・。
私はビルド済みのコンパイラをダウンロードして使ってます。インストールするだけでgccの開発環境が出来るので重宝しています