News 2003年12月6日 09:46 AM 更新

「圧倒的じゃないか!」──ゲームボーイにLinuxで目覚めた

「Linuxから目覚めるぼくらのゲームボーイ!」が発売された。ゲームボーイ上に自作の画像やプログラムが表示される! のは新鮮そのもの。オレたちの師走の夜はこれッスよ。

 ソフトバンクパブリッシングから発刊されている月刊誌「UNIX USER」をご存知の方はどれくらいいるだろうか?

 同誌の2003年6月号から9月号にかけて、1つの目を引く連載が存在していた。その連載の名は「Linuxから目覚めるぼくらのゲームボーイ!」。同誌の人気連載「GCCプログラミング工房」の実践的な特別編として執筆されたものだ。

 著者は西田亙氏。同氏のWebサイトをのぞくと、非常に勉強になるドキュメント類もさることながら、そのエネルギーに圧倒される。

 「GCCプログラミング工房」で得た知識のはけ口を求めていたのか、はたまたLinuxとゲームボーイという、一見関連性のないように思えるキーワードの組み合わせに引かれたのか、この連載も人気を博し、今回、本編に先駆けて書籍化となった。


 書籍の価格は7600円。やや高めに感じるが、1CD Linux(KNOPPIX)とゲームボーイアドバンス(GBA)にプログラムを転送するためのUSBブートケーブルが添付されている。このUSBブートケーブルの実勢価格が5500円程度であることを考慮すると、それほど高い買い物でもないだろう。

 また、1CD Linux(KNOPPIX)が同梱されていることで、Windows環境しか持たないユーザーも安心してLinuxでのクロス開発を試すことができる。ちなみに、付属の1CD Linuxは、KNOPPIX日本語版3.3をベースにARM用クロスコンパイル環境をインストールしたものとなっており、事前の面倒な環境構築が必要でないのが嬉しいところ。また、あらかじめRAMディスク上にサンプルソースなどが展開されるため、ソースの修正、ビルド作業はそのまま行える。


付属の1CD Linuxで起動したところ。デスクトップ上にはサポートWebページへのリンクやサンプルソースなどが配置されている

 ところで、「なぜクロス開発にゲームボーイ?」と思われる方もいるかもしれない。西田氏は「GBAの見た目は携帯型ゲーム機器ですが、よくよく観察すればその実態は『安価、世界中で入手可、先進的32ビットARM7 CPUを搭載、豊富なメモリ領域、表現力豊かな液晶表示機能、入力ボタンを利用可能』など学習環境に必要な項目すべてを満たした素晴らしい教育用システムなのです。」(同書より)と理由を説明している。

 同連載ではGBAが実践教材として使用されている。もちろん、GBAに対して特殊なことをする必要はない。PC上で作成したプログラムをUSBケーブルを通してGBAのメモリ上(256Kバイト)におくだけでよいのである。また、電源を切れば、メモリ上のプログラムは消えるため、心置きなく試すことができる。

 ここまでの環境をそろえてくれた著者の西田氏、そしてUNIX USER編集部に向けてひとしきり頭を垂れた後、おもむろに読んでみることにした。第1章では、GBAおよびARMプロセッサの歴史にはじまり、GNU binutilsを使ったクロス開発が紹介されている。具体的には、グラフィックス画面操作の流れから、イメージビューワ作成までが流れるように綴られている。

 とはいえ、ここで本書で触れられているコマンド群を記述しても、分かる人だけ「おぉ」と思うにとどまるだろうから、具体的な解説は本書を読んでほしい。書かれている内容を実直になぞることで、初心者でも簡単にGBA上に任意の画像を表示させることができてしまう。


画面ははめ込み合成、ではありません

 「ヤバい、楽しい。楽しすぎる」という結論に思考が辿り着いたのは、もはや宵も明けようかというころ、さまざまなパターンのドットや画像を表示させるため電源のオン/オフを100回ほどし終わった時だった。

 GBAの画面に好きな画像を表示させる、他人にとってはとてつもなくどうでもいいことに分類されるのかもしれないが、自作のプログラムがGBAで自在に動くというのは、何ものにも変えられない興奮を味わえる。

そしてオリジナルゲームの作成へ

 本書ではここまでの内容を第1章とし、第2章からはオリジナルRPGゲーム作成のための核心部分へと突き進んでいく。もちろん内容も難易度が上がるのだが、オリジナルRPGゲーム作成という言葉に釣られて読み進めていく。

 また、ここからは複雑なコードが頻出することになるため、それまでのアセンブリ言語からC言語を使ったプログラミングとなる。まずはARM用のbinutilsとGCCのインストールだ。

 この手順自体はそれほど難しいものではないが、configureのオプションとして「--program-suffix=-arm」を付けろとある。このオプションは、その名の通りプログラムにサフィックス名を後置するためのもので、これを付加することで、インストールされるプログラムはas-armのようになる。本書を読むと、このような、思わずカッ、と充血した目を見開いてしまうような驚き(と発見)に何度も見舞われる。当然、この後に行うGCCのインストール時にも「--program-suffix=-arm」を自信満々に付けたのはいうまでもない。

 もちろんbinutilsとGCCをインストールしただけでは、C言語のソースをGBA上で動作する実行ファイルには変換できない。ここで必要となるのがcrt(C RunTime startup)とリンカースクリプトである。このうち、crtのソースはcrt.Sとして用意されていた。拡張子が大文字なのはなぜだろうと不思議に思っていたのだが、これは拡張子が大文字(.S)の場合、cppによるプリプロセス処理を自動的に実行した上で、asを起動してくれるのだという。もしこれがcrt.sという名前であれば、asがソース中の「//」のコメントを認識できずエラーとなる。こんなところまで気配りしてくれるGCCに頭が下がる思いでいっぱいである。

 こうして完成したGBA向けクロスコンパイラだが、休む暇もなく次の課題は襲い掛かってくる。ビットマップモードの限界である。本文中では点描画による絵画に例えられているビットマップ形式であるが、これには長い処理時間がかかってしまう。これに関して、GBAの開発者が用意した秘密兵器「タイルモード」がこの章の1つの大きな肝となる(もう1つはキー入力か)。

 正直言って、この部分は西田氏の明快な解説をもってしても、理解するのに非常に時間がかかった(そして今も理解しきれたかは自信がない)場所である。あまりの難解さのため、下腹部に迫る鈍痛に顔をしかめる自分。半泣きになりながらも読み進めると、西田氏は最後にご褒美を用意していてくれた。オリジナルダンジョンの作成である。ダンジョン作成はそれまでに出てきたテクニックを駆使する絶好の場所である。ここでは仮想タイルで表現する「仮想マップ」を別途用意してダンジョンを創造している。

 でき上がったプログラムをダウンロードすると、目の前にはダンジョンが広がっているはずだ。仮想的なゲームの世界で宝箱に囲まれる生活というのも悪くはないが、享楽を貪る自分への戒めもこめて、宝箱が置かれている部屋は扉で封印をしておいた。ダンジョンのデザイン中、並んだ宝箱のうち、真ん中の宝箱をあけると、「ミミックがあらわれた」と表示させたいなぁ……と心ここにあらずといった遠い目をしながら進めたものだ。


筆者の人生観を表現したダンジョン風景

 コードさえマスターできれば、次は512×512ドット、あるいは複数のマップデータを切り替えることで、初期のファイナルファンタジーに出てくるようなひたすら長いダンジョンの構築もできてしまう。もちろんあらかじめ用意されているサンプルコードを使ってダンジョンをGBA上に表示させてみて、その後で本書を読むのも面白いかもしれない。何ということもないように思える処理に意外な秘密が隠されているなど、改めてGBAの凄さに気がつくはずだ。

 本書はその後、タイマー制御、割り込み処理へと進んでいく。もちろん、自作のゲームを動作させるには、まだまだ険しい道のりが待っているとはいえ、明快に解説された内容は、初心者でも比較的読み進めやすく、時間の経つのを忘れて読みふけってしまうことだろう。気分はもう「オラ、ワクワクしてきたぞ」である。

 これまでGNU開発ツールについての詳細なドキュメントにはなかなか出合えなかったこともあり、その力を知ることなくここまできてしまった筆者にも、本書はGNU開発ツールの深淵を垣間見せてくれた。すっかり枯れてしまっていたプログラム魂を鼓舞してくれる内容に仕上がっていることに感動すら覚える。

 本書は、Amazon.co.jpの売上ランキングでも上位にランキング入りするなど、非常に注目を浴びている。全くの初心者だと少々難しいかもしれないが、自作のプログラムがGBA上で動作する喜びを味わってみるのはいかがだろうか?

 巷では恋人たちが巨大ツリーなどを崇め、電飾の明かりなどを闇雲にきれいだきれいだと騒いでいるようだが、この本を片手に一人自宅でコーディング、というのも案外オツなものではないかと思いながら一人っきりでダンジョンを進む勇者の物語を練り始めた師走の夜であった。



関連記事
▼ ゲームボーイ用ソフトをLinuxでプログラミング USBケーブル付き書籍が発売に
月刊誌「UNIX USER」で好評だった連載が単行本化。LinuxベースのPCとゲームボーイアドバンスを接続し、オリジナルゲームプログラムを動かす方法を解説する。


関連リンク
▼ UNIX USER
▼ 著者の西田氏のWebサイト
▼ SBPストアの販売ページ

[西尾泰三, ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.