DreamCast用gcc cross compilerの作成方法




参考URL:http://www.inode.at/hitmen/hitdc/sh4gcc.htm

下記、ftpサイトから、

ftp://sourceware.cygnus.com/pub/

binutils-2.10.tar.gz
gcc-core-2.95.2.tar.gz
newlib-1.8.2.tar.gz

を持って来る。


buinutilのbuild

binutilsに関して、

./configure --target=sh-elf
make all
su
make install

gccのbuild

gccに関して、

./configure --target=sh-elf --without-headers --without-libs --with-cpu=sh4
./gcc/Makefile中にある以下の箇所を探して、
# Additional target-dependent options for compiling libgcc2.a.
TARGET_LIBGCC2_CFLAGS =
"-Dinhibit_libc"を付け加える。その後、make。
make LANGUAGES="c" all install

Newlibのbuild


Newlibの構築

./configure --target=sh-elf
su
make all \
      CC_FOR_TARGET=/usr/local/bin/sh-elf-gcc \
      AS_FOR_TARGET=/usr/local/bin/sh-elf-as \
      LD_FOR_TARGET=/usr/local/bin/sh-elf-ld \
      AR_FOR_TARGET=/usr/local/bin/sh-elf-ar \
      RANLIB_FOR_TARGET=/usr/local/bin/sh-elf-ranlib

make install \
      CC_FOR_TARGET=/usr/local/bin/sh-elf-gcc \
      AS_FOR_TARGET=/usr/local/bin/sh-elf-as \
      LD_FOR_TARGET=/usr/local/bin/sh-elf-ld \
      AR_FOR_TARGET=/usr/local/bin/sh-elf-ar \
      RANLIB_FOR_TARGET=/usr/local/bin/sh-elf-ranlib


Dreamcasr用ライブラリの一つ、libdreamについて


http://www.allusion.net/dcdev/
から、tar ballをとってくる。このとき、Dreamcasr用の
libcも一緒に取って来ると、libdreamのexampleのdc_main関数
をmain関数に名前を変更するということをしないですむ。

また、/example以下にあるファイルをコンパイルすると、
main関数がない!といって止まる。これは、main関数を
dc_main関数に置換したにも関わらず、newlibのcrt0を
読むようになっているからである。
簡単な解決法は、Makefile.prefを修正することである。

Makefile.prefのgccのリンカの引数に、

-nostartfiles

を加えて、さらに、独自のc startup file(crt0)の場所を示してやる必要がある。


上に述べてきた開発環境で作成したプログラムを、
どのようにすればDreamcast上で動かすことが出来るのか。

DC <-> PC をシリアルで接続するために、シリアルケーブルを作成する。
作り方は、以下のURLを参照。
http://mc.pp.se/dc/serifc.html
起動ディスクと転送プログラムを含んだイメージを以下のサイトから、取って
来る。
http://www.cerc.utexas.edu/~andrewk/dc/ http://www.cerc.utexas.edu/~andrewk/dc/dcload-serial/index.shtml
この起動ディスクをDCに入れて起動する。
PC上で、プログラムをコンパイルして、バイナリを作成。
出来た、バイナリをシリアル経由でDCに転送して、実行。

この方法は、PC-DC接続のために、serialケーブルを自作しなくてはならないという
障壁がある。CMOSレベルのチャージポンプは日本ではあまり売られていない。
TTLレベルのMAX232でもよいと書いてあるサイトもあるが、SH4はCMOSレベル動作で、しかも、
DC背面のSerialポートはSH4のポートに直結である。
MAX232でも動く(かもしれない)が、SH4のポートに直接5V入れるのは危険である。
頑張って、MAX3222あたりを手にいれるしかない。

Serialケーブルを自作しなくても、ブロードバンドアダプタ(BBA)を持っていれば、
LAN経由でバイナリをuploadすることが出来るip_slaveというソフトもあるので、
BBAを持っている人はそれを使うのが良いであろう。