開発環境の導入

Linux (Debian/sid)マシンに、ザウルス宝箱Proより、 下記のパッケージをダウンロードし、alienをかけてでインストール。

  • gcc-cross-sa1100-2.95.2-0.i386.rpm
  • linux-headers-arm-sa1100-2.4.6-3.i386.rpm
  • glibc-arm-2.2.2-0.i386.rpm
  • qtopia-free-1.5.0-1.i386.rpm
  • binutils-cross-arm-2.11.2-0.i386.rpm
dev-arm-qpe.sh:
setenv CROSSCOMPILE /opt/Embedix/tools
setenv QPEDIR /opt/Qtopia/sharp
setenv QTDIR /opt/Qtopia/sharp
setenv PATH /opt/Embedix/tools/arm-linux/bin:$QTDIR/bin:$QPEDIR/bin:$CROSSCOMPILE/bin:$QPEDIR/bin:$PATH
setenv TMAKEPATH /opt/Qtopia/tmake/lib/qws/linux-sharp-g++/
setenv LD_LIBRARY_PATH $QTDIR/lib:$LD_LIBRARY_PATH
setenv CC arm-linux-gcc
setenv CXX arm-linux-g++
echo "Altered environment for Sharp Zaurus SL-5000D Development ARM"

SDLの導入

SDL-1.2.5

SDL本家より、SDL-1.2.5.tar.gzをダウンロード。

20031201

20030830

20030816

T-nagi さんより、SL-A300 においてカーソルキーと画面上でのカーソルの 動きが反対だという報告をいただきましたので、修正を施しました。パッ チはSDL-1.2.5-k5.diffです。パッチ が間違っていました。パッチはSDL-1.2.5-k6.diffです。阿川さんのパッ チlibsdl_1.2.5-slzaurus20030704_arm.difflibsdl_1.2.5-slzaurus20031201_arm.diff をあてた SDL-1.2.5 に対してあてます。内容は以下の1点です。 (2003.08.16)(2003.08.30 修正)(2003.12.1 阿川さんの新しいパッチに追従)

  • 機種が SL-A300 の場合に、sdlRotation = 3 を設定する。

20030704

阿川さんにお送りしたパッチSDL-1.2.5-k4.diffのうち、音切れ解消のため にバッファのサイズを増やす修正については、リアルタイム性の高いゲームで は遅延が非常に大きくなる(1秒程)とのことで、環境変数 SDL_DSP_NFRAGMENTS が設定されいた場合に、その数をバッファ数とするとい う形で阿川さんの方で修正していただきました。ONScripter 以外に SDL を使 用していなかったのでそこまで遅延が大きいとは思っておりませんでしたが、 確かにこの形の修正が良いと思います。

もう一点の修正はそのまま取り込んでいただいたので、この阿川さんのパッチ libsdl_1.2.5-slzaurus20030704_arm.diff をあてたものに差し換えたものを、新たにライブラリパッケージとして公開し ました。libSDL については、阿川さんの公開されているものと等価のはずで す。

20030629

以下は古い情報です。SDL-1.2.5 に関係する以下のパッチはあてる必要が ありません。

SL-C750において、VGA,QVGAいずれにおいてもスタイラスの座標と画面の表 示が180度ずれる・MP3演奏において音切れが生じるという報告をいただいたた め、修正パッチSDL-1.2.5-k4.diffを書き ました。阿川さんのパッチlibsdl_1.2.5-slzaurus20030623_arm.diff をあてた SDL-1.2.5 に対してあてます。内容は以下の2点です。

  • 機種がSL-C750, SL-C760である場合に、VGA,QVGAで画面とスタイラス入力 が180度ずれる問題を修正しました。(SDL_sysvideo.cc)
  • SL-C750 でも音切れが生じるということなので、SL-A300 でのみ有効になっ ていた音切れ解消のためのバッファのサイズを増やす修正を、全ての機種にお いて行うようにしました。(SDL_dspaudio.c)

20030622

以下の理由により、今後は阿川さんのパッチをベースにします。

  • 日本の Linux Zaurus においては、 阿川さんがパッチを当てて公開されている SDL パッケージが、SDL とし てほぼ標準となっており、これと互換性のない別の SDL パッケージを使うと ユーザが不便。
  • SL-C750, SL-C760 を買う予定がないので、サポートするのがたいへん。
  • 私の以前のパッチでの修正が全て取り入れられている。

そこで、阿川さんの libsdl_1.2.5-slzaurus20030622_arm.diff をもらってこちらで libSDL-1.2.so.0.0.5 を作成して試してみたのですが、 色々問題が発生したので修正パッチSDL-1.2.5-k3.diffを書きました。阿川さんの パッチをあてた SDL-1.2.5 に対してあてます。パッチの内容は以下の4点で す。

  • SL-5500 に対応していないため対応させました。(SDL_sysvideo.cc)
  • rotation_ が 2 の時の画像転送において32bit aligned された画像 (x,width が偶数)を仮定しており、そうではない画像が来たときに正常に転 送されないため、32bit 転送の部分はそのままとし、境界部分を別途処理する ことで、正常転送されるようにしました。(SDL_QWin.cc)
  • マウスカーソルを warp させたときに発行される SDL_PrivateMouseMotion に与える座標を、アプリケーションの論理座標に修 正しました。(SDL_sysmouse.cc)
  • フレームバッファとアプリケーションが指定する画像の向きが異なるとき に、マウス座標設定時にマージンの取り扱いがおかしかったため修正しました。 (SDL_QWin.cc)

以下は古いパッチです

上記の阿川さんのパッチに取り込まれているため、現在は直接当てる必要 はありません。

  • 神 木さんの patch を当てました。SL-A300 で音切れが解消されるようです。
  • Qtopia で動かす場合 OK ボタンがなぜか割り当てられていないので、 SDL-1.2.5/src/video/qtopia/SDL_QWin.cc に patch をあてました。
  • SDL_WarpMouse が SDL_MouseMotionEvent を発生させないので、 SDL-1.2.5/src/video/qtopia/SDL_sysmouse.cc にこれを発生させる patch を あてました。これで、選択肢やボタン待ちの時に十字キーの上下を押すと、カー ソルが移動するようになります。
  • (Jan. 2, 2003)SDL on Qtopiaでは、 QDirectPainterを使用してFrame Buffer Driver のロックを行い、frame buffer に直接描画していますが、ロックを解除するときに (SDL_QWin::unlockScreen()) QDirectPainter::end() を呼んでから delete す ると、正常にロックを解除できなくなることがあるようです。一旦不完全にロッ クを解除すると、Frame Buffer Driverからイベントをもらえなくなり、 QAapplicationにイベントが来なくなります。
    このとき、イベントは消えるのではなくFrame Buffer Driverのキューにたま り続け、強制終了するなどしてアプリケーションがいなくなると、ロックが解 放され、イベントの受取りアプリケーションが変わり、そちらにイベントが流 し込まれます。ただし、コードをきちんと奥まで追っていないため、上の記述 の後半は推測です。
    QDirectPainterをdeleteする前にend()を呼ぶ必要はなさそうなので、これを 削除しました。

上の4つの patch を合わせたものを、SDL-1.2.5-k2.diffに置きます。

> cd SDL-1.2.5
> configure --host=i386-linux --target=strongarm-linux
    --prefix=/opt/Embedix/tools/arm-linux --enable-video-qtopia
    --disable-video-photon --disable-video-fbcon --disable-video-direct
    --disable-video-ggi --disable-video-svga --disable-video-aalib
    --disable-video-dummy --disable-video-dga --disable-arts --disable-esd
    --disable-alsa --disable-video-x11 --disable-nasm --disable-debug
> make
> su
> make install

libjpeg 6b

Independent JPEG Groupより、jpegsrc.v6b.tar.gzをダウンロード。

libtool がないと失敗するので、Debian のものを持ってきました。

> configure --host=i386-linux --target=strongarm-linux
    --prefix=/opt/Embedix/tools/arm-linux --enable-shared
> cp /usr/bin/libtool .
> make
> su
> make install

zlib-1.2.3

zlibより、zlib-1.2.3.tar.gzをダウンロード。

> setenv LDSHARED "arm-linux-gcc -shared -Wl,-soname,libz.so.1"
> configure --shared --prefix=/opt/Embedix/tools/arm-linux
> make
> su
> make install

libpng-1.4.5

libpngより、lbipng-1.4.5.tar.gzをダウンロード。

> configure --host=i386-linux --target=strongarm-linux
    --prefix=/opt/Embedix/tools/arm-linux
> make
> su
> make install

SDL_image-1.2.10

SDL本家より、SDL_image-1.2.10.tar.gzをダウンロード。

> setenv PKG_CONFIG
> configure --host=i386-linux --target=strongarm-linux
    --prefix=/opt/Embedix/tools/arm-linux --disable-lbm
    --disable-pcx --disable-tga --disable-jpg-shared --disable-png-shared

SDL-1.2.5 をベースにしてコンパイルできるように Makefile に定義を追加します。

CFLAGS = -g -O2 -I/opt/Embedix/tools/arm-linux/include/SDL -D_REENTRANT -Dmain=SDL_main -D"RW_SEEK_SET=0" -D"RW_SEEK_CUR=1" -D"RW_SEEK_END=2" -D"SDL_strcmp=strcmp"
> make
> su
> make install

SDL_mixer-1.2.11

SDL本家より、SDL_mixer-1.2.11.tar.gzをダウンロード。

神 木さんの patch を当てました。SL-5500 では、ソフトウェア MIDI の演 奏で、基本的に音切れしなくなりました。上の神木さんのページからコピーし たものを、SDL_mixer-1.2.6-k1.diffに置きます。 (旧パッチ:SDL_mixer-1.2.4-k1.diff

> setenv PKG_CONFIG
> configure --host=i386-linux --target=strongarm-linux
    --prefix=/opt/Embedix/tools/arm-linux
    --enable-music-ogg-tremor
    --disable-music-ogg-shared
    --enable-music-mp3-mad-gpl --disable-music-mp3
    --disable-music-cmd --disable-music-mod
    --disable-smpegtest --disable-music-midi

SDL-1.2.5 をベースにしてコンパイルできるように Makefile に定義を追加・削除します。

CFLAGS  = -g -O2 -D"RW_SEEK_SET=0" -D"RW_SEEK_CUR=1" -D"RW_SEEK_END=2" -D"SDL_stack_alloc(type, count)=(type*)malloc(sizeof(type)*(count))" -D"SDL_stack_free(data)=free(data)" -D"SDL_abs=abs"
EXTRA_LDFLAGS =  -L/opt/Embedix/tools/arm-linux/lib -Wl,-rpath,/opt/Embedix/tools/arm-linux/lib -lSDLmain -lSDL -L/opt/Qtopia/sharp/lib -L/opt/Qtopia/sharp/lib/ -lqpe -lqte -lpthread -lvorbisidec -lm -lmad

SDL-1.2.5 をベースにしてコンパイルできるように dynamic_ogg.c を以下のように変更します。

/*#include "SDL_loadso.h"*/
extern void *SDL_LoadFunction(void *handle, const char *name);
> make
> su
> make install

bzip2-1.0.4

The bzip2 and libbzip2 official home pageより、bzip2-1.0.4-tar.gzをダウンロード。

Makefile: の下記の行を変更

CC=arm-linux-gcc
AR=arm-linux-ar
RANLIB=arm-linux-ranlib

PREFIX=/opt/Embedix/tools/arm-linux

all: libbz2.a bzip2 bzip2recover
> make
> su
> make install

freetype-2.1.10

the Free Type Projectより、freetype-2.1.10.tar.gzをダウンロード。

神 木さんの patch を当てました。Embedded bitmap を使ったフォントも使 えるということなのですが、当方ではこれをあてて msgothic を使っても改善 されませんでした。試した範囲では、以前と同じ。上の神木さんのパッチと同 等のものを、freetype-2.1.3-k1.diffに置きます。

> configure --host=i386-linux --target=strongarm-linux
    --prefix=/opt/Embedix/tools/arm-linux
> make
> su
> make install

make の途中で、freetype-2.3.5/objs/apinames を host compiler で作成 するはずが target compiler で作成してしまい失敗するので、ここだけ手動 で作成しました。

SDL_ttf-2.0.9

SDL本家より、SDL_ttf-2.0.9.tar.gzをダウンロード。

> configure --host=i686-linux --target=arm-linux
    --prefix=/opt/Embedix/tools/arm-linux --without-x
> make
> su
> make install

mad-0.14.2b

MAD: MPEG Audio Decoderより、mad-0.14.2b.tar.gzをダウンロード。

MADは整数計算のみでMP3をデコードするライブラリです。ARM系のCPUでは、 浮動小数点計算が非常に遅いため、ONScripterでは、SMPEGに差し替えこれで MP3をデコードします。

一部の MP3 が演奏できないので、MP3 の frame header の資料と MADのソー スを付き合わせ、どこがおかしいのかを調べました。結果、frame header の 15,16bit 目の Emphasis が2の場合、MAD は不正なヘッダとして弾いています。 私が参考にした資料には、2 は reserved となっているため、MAD 的には正し いことをしているようですが、なぜかこの MP3 は 2 になっているため、2 の 場合 0 (none) 扱いすることにして続行するパッチmad-0.14.2b-k1.diffをあて、演奏可能にな りました。

> configure --host=armv4-linux --prefix=/opt/Embedix/tools/arm-linux
    --enable-fpm=arm --enable-speed --disable-debugging --enable-sso
> make
> su
> make install

Tremor Vorbis I Stream 20020517: 1.0.2

整数演算のみのデコーダである, the Ogg Vorbis 'Tremor' integer playback codecをダウンロード。configure.in の記述が一部お かしいので、パッチTremor-K1.diffをあてま す。

> wget -r -l1 http://svn.xiph.org/trunk/Tremor/
> cd svn.xiph.org/trunk/Tremor
> sh autogen.sh --build=i686-linux --host=arm-linux
    --prefix=/opt/Embedix/tools/arm-linux
> make
> su
> make install