#はじめに
ゲームギアの開発環境について、日本語で解説しているページが見つからなかった為、調査してまとめました。
本記事ではCコンパイラにより、以下の画像をゲームギア上に表示するまでをご説明します。
表示させたい画像
画像参照元
いらすとや https://www.irasutoya.com/
#スペック
発売日 | 1990年10月6日 |
---|---|
価格 | 19,800円 |
型番 | HGG-3200 |
CPU | Z80A(3.58MHz) |
RAM | 8KB |
VRAM | 16KB |
VDP | セガカスタムLSI |
ディスプレイ | バックライト付 3.2インチ カラー液晶 |
画素数 | 480×146ドット [*1] |
発色数 | 4096中32色同時発色(ゲーム時) |
4096同時発色(TV時) | |
SOUND | ステレオ 3重和音 1ノイズ |
スペックは以下から参照。
セガハード大百科 - ゲームギア
https://sega.jp/history/hard/gamegear/index.html
[*1]
上記のセガ公式サイトでは画素数が480×146と記載されておりますが、実際には160×144です。
なぜ480×146と記載されているかは不明です。
480だとPSP並みの解像度のような気がします。
#開発言語
アセンブラとCコンパイラを利用できます。
本記事ではCコンパイラを使用した開発環境の説明を行います。
アセンブラについては、下記ツールの説明のみです。
###アセンブラ
- WLA-DX
http://www.villehelin.com/wla.html
現在も更新が行われているマルチプラットフォームのアセンブラ。
記述時点での最新バージョンは v9.9 (15-Aug-2019)。
以下の機種などに対応しています。 - セガ・マークIII
- ゲームギア
- ファミコン
- スーパーファミコン
- ゲームボーイ
- PCエンジン
- etc
###コンパイラ
- SDCC - Small Device C Compiler
http://sdcc.sourceforge.net/
様々なマイコンに対応するCコンパイラ。 - Z80
- Intel 8031, 8032, 8051, 8052
- Maxim 80DS390
- 68HC08
- etc
#必要ツール
-
devkitsSMS
https://github.com/sverx/devkitSMS
Cライブラリと各種ツールがセットになったツールキット。 -
BMP to SMS/GG tile converter(BMP2Tile)
http://www.smspower.org/maxim/Software/BMP2Tile
BMP, PNG, PCX, GIF形式の画像から、タイルデータ、タイルマップ、パレットを生成するツール。 -
画像のパレットが編集できるソフト
本記事ではPictBearを使用しています。
https://www.fenrir-inc.com/jp/pictbear/
GIMPやAdobe Photoshopでも対応可能かと思います。
#準備
以下のサイトから必要なファイルをダウンロード。
-
SDCC - Small Device C Compiler
http://sdcc.sourceforge.net/ -
devkitSMS
https://github.com/sverx/devkitSMS -
BMP to SMS/GG tile converter(BMP2Tile)
http://www.smspower.org/maxim/Software/BMP2Tile
#インストール
-
ダウンロードした各ファイルを任意の場所に展開。
-
devkitSMSの SMSlib に格納されている「SMSlib_GG.lib」を、SDCCの lib\z80 に格納。
-
任意の場所にプロジェクト用のフォルダを作成し、以下のファイルを格納する。
devkitSMS\crt0\crt0_sms.rel
devkitSMS\SMSlib\src\SMSlib.h
#画像からCソースを生成
以下の手順で画像からCソースを生成します。
- 画像を16色まで削る
- 画像を256x192にリサイズ
- 画像からタイルデータ、タイルマップ、パレットを生成
- タイルデータ、タイルマップ、パレットからCソースを生成
###画像を16色まで削る
###画像を256x192にリサイズ
###画像からタイルデータ、タイルマップ、パレットを生成
###タイルデータ、タイルマップ、パレットからCソースを生成
-
タイルデータ、タイルマップ、パレットを1つのフォルダに格納
上記以外のファイルを格納するとエラーになる可能性があります。
また、ファイル名が長すぎると処理が完了しない場合があります。その場合は、ファイル名を短縮してください。
-
以下のPowerShellスクリプトを実行
「$folder2c」と「$data」は各自のパスに書き換えて下さい。
「$folder2c」はdevkitSMS内に含まれているフォルダです。
「$data」は1. でデータを格納したフォルダです。
$folder2c = "D:\devkitSMS\folder2c\"
$data = "D:\Project\data\"
cd $folder2c
.\folder2c $data $data\assets
pause
生成されたCソースとヘッダをプロジェクトフォルダに格納します。
#ソースコード
以下のソースをプロジェクトフォルダに格納
xxx__tiles__bin, xxx__tiles__bin_size等は、assets.hを参照して各自書き換えて下さい。
#define TARGET_GG
#include "SMSlib.h"
#include "assets.h"
void main (void)
{
SMS_loadTiles (xxx__tiles__bin, 0, xxx__tiles__bin_size);
SMS_loadTileMap (0, 0, xxx__tilemap__bin, xxx__tilemap__bin_size);
GG_loadBGPalette (xxx__palette__bin);
SMS_displayOn();
for (;;);
}
#コンパイル
以下のPowerShellスクリプトを実行。
パスは各自の環境に書き換えて下さい。
$sdcc = "D:\sdcc\bin\sdcc.exe"
$ihx2sms = "D:\devkitSMS\ihx2sms\ihx2sms.exe"
$prj = "D:\Project\"
Set-Alias sdcc $sdcc
Set-Alias ihx2sms $ihx2sms
cd $prj
sdcc -c -mz80 main.c
sdcc -c -mz80 assets.c
sdcc -o hoge.ihx -mz80 --no-std-crt0 --data-loc 0xC000 crt0_sms.rel main.rel assets.rel SMSlib_GG.lib
ihx2sms hoge.ihx hoge.gg
#実行
生成された「hoge.gg」をエミュレータで起動。
本記事ではmekaを使用しています。
https://www.smspower.org/meka/
#参考サイト
Z80 Assembly programming for the Sega Master System and the Game Gear!
http://www.chibiakumas.com/z80/MasterSystemGameGear.php
stevepro studios - devkitSMS Programming Sample
https://steveproxna.blogspot.com/2017/11/devkitsms-programming-sample.html
View topic - devkitSMS tutorial - Forums - SMS Power!
http://www.smspower.org/forums/15888-DevkitSMSTutorial