ゲームボーイの開発環境を整えた話

某ポルノアニメ氏を見てたら何かしらレトロゲームぽいやつを作りたい熱が再燃してきたので、ゲームボーイの開発環境を整えた。
前にゲームボーイアドバンスの開発環境を整えたことがあったが、GBとGBAアーキテクチャが全く異なるように開発環境も違うっぽい(ちなみにDSの開発はdevkitProで済む)。以下メモ。

環境は以下の通りです(2018年6月2日現在最新)。

GBDKのインストール

ゆとり世代だからアセンブリなんか書きたくない!
GB用のCコンパイラや色々便利なライブラリがセットになったGBDKをインストールします。
さくさんさんの記事を参考にしました。

macOS用パッチ付きのGBDKをcloneしてきてビルドします。

$ git clone https://github.com/CH3COOH/gbdk.git
$ cd gbdk
$ patch -p0 < macosx.patch
$ mkdir -p sdcc/bin
$ make

次からが重要で、ビルドが終わったら (作業ディレクトリ)/gbdk/build/ppc-unknown-linux2.2/ 以下の gbdk/ ディレクトリを /opt 以下にコピーしてあげましょう(シンボリックリンクにしようとしたけどうまく動かんかった)。
/opt がなければ作ってください。

$ sudo mkdir /opt
$ cp -r ./build/ppc-unknown-linux2.2/gbdk/ /opt

終わったらサンプルをビルドしてみましょう。

$ cd /opt/gbdk/examples/gb 
$ make
../../bin/lcc -Wa-l -Wl-m -Wl-j -c -o galaxy.o galaxy.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -o galaxy.gb galaxy.o
../../bin/lcc -Wa-l -Wl-m -Wl-j -c -o space.o space.s
../../bin/lcc -Wa-l -Wl-m -Wl-j -o space.gb space.o
../../bin/lcc -Wa-l -Wl-m -Wl-j -c -o paint.o paint.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -o paint.gb paint.o
../../bin/lcc -Wa-l -Wl-m -Wl-j -c -o rpn.o rpn.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -o rpn.gb rpn.o
../../bin/lcc -Wa-l -Wl-m -Wl-j -c -o rand.o rand.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -o rand.gb rand.o
../../bin/lcc -Wa-l -Wl-m -Wl-j -c -o comm.o comm.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -o comm.gb comm.o
../../bin/lcc -Wa-l -Wl-m -Wl-j -c -o irq.o irq.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -o irq.gb irq.o
../../bin/lcc -Wa-l -Wl-m -Wl-j -c -o filltest.o filltest.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -o filltest.gb filltest.o
../../bin/lcc -Wa-l -Wl-m -Wl-j -c -o ram_fn.o ram_fn.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -Wl-g_inc_ram=0xD000 -Wl-g_inc_hiram=0xFFA0 -o ram_fn.gb ram_fn.o
../../bin/lcc -Wa-l -Wl-m -Wl-j -c -o fonts.o fonts.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -o fonts.gb fonts.o
../../bin/lcc -Wa-l -Wl-m -Wl-j -c -o samptest.o samptest.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -o samptest.gb samptest.o
../../bin/lcc -Wa-l -Wl-m -Wl-j -c -o banks.o banks.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -Wf-ba0 -c -o bank_0.o bank_0.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -Wf-bo1 -Wf-ba1 -c -o bank_1.o bank_1.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -Wf-bo2 -Wf-ba2 -c -o bank_2.o bank_2.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -Wf-bo3 -Wf-ba3 -c -o bank_3.o bank_3.c
../../bin/lcc -Wa-l -Wl-m -Wl-j -Wl-yt2 -Wl-yo4 -Wl-ya4 -o banks.gb banks.o bank_0.o bank_1.o bank_2.o bank_3.o
rm filltest.o comm.o rand.o rpn.o samptest.o paint.o space.o fonts.o irq.o galaxy.o

galaxy.gbが /opt/gbdk/examples/gb にできていればオッケーです。

動作確認用エミュレータのインストール

以前インストールしたmGBAゲームボーイ(カラー)も動作するって書いてあったのに動作しなかった。よくわからん。
色々探してたら上記の記事でも紹介されているGambatteのCocoaアプリ版であるGambattyeがあったのでとりあえずこれを導入。Macネイティブでアプリのアイコンもかっこいい(重要)し。

しかしGambattyeにはRAM/VRAMビューワが付いてないっぽい。うーん…デバッグの時困りそう。いい感じの動作確認用エミュレータがあればコメントやTwitterとかで教えてください。助かります。

Hello Worldをビルドする

まだGBDKについてよくわかってないんですが、この辺を参考に以下の感じでHello Worldできたんでまあいいかってなってます。

適当なディレクトリにmygame.cとMakefileを作る。

mygame.c

#include <stdio.h>

void main() {
    printf("Hello World.\nYappy Dayo.");
}

Makefile

GBDK = /opt/gbdk
CC   = ${GBDK}/bin/lcc -Wa-l -Wl-m -Wl-j
BIN  = mygame.gb

all:    $(BIN)

%.o:    %.c
    $(CC) -c -o $@ $<

%.s:   %.c
    $(CC) -S -o $@ $<

%.o:    %.s
    $(CC) -c -o $@ $<

%.gb:    %.o
    $(CC) -o $@ $<

clean:
    rm -f *.o *.lst *.map *.gb *~ *.rel *.cdb *.ihx *.lnk *.sym *.asm

makeすればmygame.gbっていうファイルができてると思います。やったね!

f:id:yaplus:20180602202551p:plain
こんにちわ〜

ハードウェアの仕様とか調べつついい感じにやっていきたい。ゆうてGBAと似たことすればなんとかなるっしょくらいに思ってる。ゆとり世代だし。

便利そうなやつ見つけた

GAMEBOY Tile Data Generator

GBA開発で言うところのgrit的なやつ(と思われる)。
画像をGB用にモノクロ4色に減色してC(またはZ80アセンブリ)コードに落とし込んでくれるだけなんだけど、GBAでの経験的にこれがあるだけでだいぶ助かると思う。タイルデータさえできればあとは汎用マップエディタでマップデータ作ればいいしね。

感想

2018になって29年前のゲームボーイソフト開発?って思うかもしれないけど、逆にせいぜい17年くらいのGBAよりも風情があってよくない?

精神的に向上心のない者はばかだ。 - K (夏目漱石「こころ」)

精神的に向上心のない太郎なので今日はここまで。