ついに SuperHitachi を買ってしまいました。
私には CPU ボードを自作する根性が無いため、市販の評価ボードを買いました。
AlphaProject
の AP-SH3D-0A です。
SH3 です。しかも DSP 付なのです。
(しかし、3.3V I/O には苦労しそうな予感...)
組込み CPU 上でコンパイラを動かすわけにはいきませんので、 まずはクロス開発用のコンパイラを用意します。
方針としては、
となっています。
2. は、好みです。3. は、昔インストールした H8/300 用のクロスコンパイラ のコンフィギュレーション (h8300-hms) に合わせました。 これは sh-elf だの sh-coff-hms だのいろいろ流儀があるようですが.... ${CPU}-${VENDOR}-${OS} のはずだったので、 hms は (たぶん Hitachi Micro System の略) OS ではないですが、 OS が無いことを示していると思えば sh-hitachi-hms が正しいと思います。 (そうすると sh-elf はともかく、sh-coff-hms は間違っている? でも、それで動かしている人もいるようだし... 良くわかりません。)
まずは、Assembler や Linker をインストールしなければなりません。 Free の Assembler/Linker といえば有名なのが GNU の binutils です。 SH もサポートされているのでこれを使う事にします。 (さらに嬉しい事に SH-DSP/SH3-DSP もサポートしています)
まずはソースコードをダウンロードしてきます。
GNU のソフトは Ring server
にも置いてありますので、手近な Ring FTP server から落しましょう。
Ring サーバーでは binutils は、/pub/GNU/binutils に置いてあります。
最新版は binutils-2.11.2.tar.gz でした。
UN*X では手順は簡単です。(多分 Cygwin 環境でも同じ手順でいけます)
% tar zxvf binutils-2.11.2.tar.gz && cd binutils-2.11.2 % ./configure --prefix=/usr/cross --target=sh-hms % make % su # make install # exit % cd ..
我が家の Host マシン (AMIGA A4000T CPU:68060-60MHz RAM:192MB OS:NetBSD/amiga-1.5.2) では、約1時間かかりました。
binutils のインストールが終ったら、次に gcc をいれましょう。 (先ほどの SH 用 binutils がインストールされたディレクトリ [/usr/cross/bin] に path を通すのを忘れない事!)
gcc も GNU ソフトなので、binutils を置いてあるサーバーなら gcc も置いてあるはずです。Ring サーバーなら /pub/GNU/gcc にあります。 gcc-2.93.3.tar.gz を持ってきても良いのですが、 Fortran コンパイラ等も付属していて、かなりサイズが大きいので、 /pub/GNU/gcc/gcc-2.95.3 にある gcc-core-2.95.3.tar.gz と gcc-g++-2.95.3.tar.gz を持ってきました。 (gcc-g++-2.95.3.tar.gz の方は C++ を使わないのならばいりません)
C言語ライブラリも用意しましょう。Free の C言語ライブラリとしては、
glibc-2 が一番有名ですが、大きすぎる、ライセンスが LGPL、等の理由から、
組込みでは敬遠されています。
組み込み用として一番よく名前が出るのは newlib です。
これは、始めっから組み込み分野を想定して開発されている Free のライブラリで、
現在 RedHat 社がメンテナンスしています。
ミラーサイトなどは無いようなので、本家のサーバーから持ってきましょう。
ソースコードは、
ftp://sources.redhat.com/pub/newlib/にあります。
最新版は newlib-1.9.0.tar.gz でした。
gcc のコンパイルと newlib のコンパイルを同時に行うので、 gcc-*-2.95.3.tar.gz と newlib-1.9.0.tar.gz の両方とも展開しておく必要があります。
% tar zxvf gcc-core-2.95.3.tar.gz % tar zxvf gcc-g++-2.95.3.tar.gz % tar zxvf newlib-1.9.0.tar.gz % cd gcc-2.95.3 % ln -s ../newlib-1.9.0/newlib . % ./configure --prefix=/usr/cross --target=sh-hms --with-newlib \ --enable-languages="c,c++" % make # su # make install # exit
コンパイラのコンパイルにはかなりの CPU パワーと、
かなりのディスク容量を使います。
家の貧弱な Host マシンでは、
なんと 12時間もかかってしまいました。
どうやら、ライブラリの作成に時間がかかっているようです。
12時間の中、5時間は newlib の libc と libm 作成に費して、
4時間は、C++ のライブラリ作成に頑張っていました。
(sh1 sh2 sh3e sh4 sh4-single sh4-single-only の各アーキテクチャーを、
Big/LittleEndian の両方ともつくるので、
時間がかかるのはどうしようもないんですが。)
AP-SH3D-0A には、1Mbyte の FlashROM が実装されています。
この FlashROM は、本来評価ボード上の SH3-DSP
が書き込むように設計されているのですが、
それでは面倒臭いので、AP-SH3D-0A のパッケージには、
Host マシンから書き込むための専用 Downloader が付属しています。
この Downloader は AP-SH3D-0A 上の ROM と、
Host マシンで動くソフトウェアで構成されています。
この Host マシン用のソフトは Windows 専用なので、Unix で使う事が出来ません。
でも、嬉しいことに、Downloader の AP-SH3D-0A 側のソースコードが 付属しているので、そこから Downloader の仕様を知る事ができます。 その仕様を元に、Unix 版の Downloader を作ってしまいましょう。
この仕様を元に作成したプログラムが、 sh-downloader.cです。 POSIX termios をきちんと実装した OS (最近の UN*X ならまず大丈夫) ならばほとんど無変更で動きます。(動作確認は NetBSD/amiga 1.5.2 で行いました)
使い方はいたってシンプルで、
sh-downloader [-l ttyfile] [-s speed] file
です。ttyfile は serial port のデバイス名(標準では /dev/tty00)、
speed は通信速度(標準では 9600bps)で、指定しなくても動きます。
file は FlashROM に書き込むファイルで、
Motorola S-Record フォーマットで無くてはなりません。
唯一注意しなければならない事は、画面に「Waiting for target reply ...」
と表示されてから Target に電源をいれる (or Reset する) ことです。
さて、これで、SHマイコンを使って遊ぶ環境はだいたい整いました。 作成したプログラムを毎回 FlashROM に書き込むのならば、 もうする事は無いのですが、それではあまりにも (DIP スイッチの切替えが) めんどくさいです。また、FlashROM には書き込み回数の制限があります。 というわけで、SDRAM 上にプログラムを読み込んで実行するモニターを、 FlashROM に書き込んでしまいましょう。
まずは、書き込むモニタ・プログラムを調達しなくてはなりません。
日立は SH3 用のモニタ・プログラムを公開しています。
このモニタ・プログラムはかなり高機能な物なのですが、
というところから使用を断念しました。
他にも探しましたが、ソースファイル配布で、
改造したものの公開が許されているものは全然見当たりませんでした。
なければ作るしか無い?
というわけで、簡易モニタ・プログラムを作ってみました。
とりあえず最低限の機能しかありませんが、一応実用になります。
基本コンセプトは「汎用」、「単純」です。
Berkley Style Copyright で配布します。
以上で開発環境はできました。後は開発するだけです。 さて、半田づけとプログラミングを頑張らねば。
一つもどる |
ホームヘ |