ゲームギア 開発環境


はじめに

ゲームギアの開発環境について、日本語で解説しているページが見つからなかった為、調査してまとめました。

本記事では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

必要ツール

準備

以下のサイトから必要なファイルをダウンロード。

インストール

  1. ダウンロードした各ファイルを任意の場所に展開。

  2. devkitSMSの SMSlib に格納されている「SMSlib_GG.lib」を、SDCCの lib\z80 に格納。

  3. 任意の場所にプロジェクト用のフォルダを作成し、以下のファイルを格納する。
    devkitSMS\crt0\crt0_sms.rel
    devkitSMS\SMSlib\src\SMSlib.h

画像からCソースを生成

以下の手順で画像からCソースを生成します。

  • 画像を16色まで削る
  • 画像を256x192にリサイズ
  • 画像からタイルデータ、タイルマップ、パレットを生成
  • タイルデータ、タイルマップ、パレットからCソースを生成

画像を16色まで削る

  1. PictBearで対象の画像を読み込み

  2. 「イメージ」→「イメージタイプ」→「インデックスカラー」を選択

  3. 警告が出ますが「はい」を選択

  4. そのまま「OK」を選択

  5. 「イメージ」→「パレット」→「パレットの編集」を選択

  6. 「ツール」→「不要なパレットを削除」を選択

  7. 「ツール」→「使用頻度でソート」を選択

  8. 「削除」を使用して上段の16色まで色を削り、「OK」を選択
     ⇒ 

  9. 16色に削った画像

画像を256x192にリサイズ

  1. 「イメージ」→「イメージのリサイズ」を選択

  2. ゲームギアの画素数である160×144に収まるようにサイズを指定

  3. 「イメージ」→「キャンパスのリサイズ」を選択

  4. 256x192を指定
    「縦横比を固定する」のチェックは外す
    アンカーは中央を選択

  5. 256x192にリサイズした画像

画像からタイルデータ、タイルマップ、パレットを生成

  1. BMP to SMS/GG tile converter を起動し、画像を読み込み

  2. 「Tiles」タブを選択し、「Save」を選択

  3. ファイルの種類で「Raw (uncompressed) binary (*.bin)」を選択して保存

  4. 「Tilemap」タブを選択

  5. ファイルの種類で「Raw (uncompressed) binary (*.bin)」を選択して保存

  6. 「Palette」タブを選択
    「Output hex(GG)」にチェック

  7. ファイルの種類で「Binary files (*.bin)」を選択して保存

タイルデータ、タイルマップ、パレットからCソースを生成

  1. タイルデータ、タイルマップ、パレットを1つのフォルダに格納
    上記以外のファイルを格納するとエラーになる可能性があります。
    また、ファイル名が長すぎると処理が完了しない場合があります。その場合は、ファイル名を短縮してください。

  2. 以下のPowerShellスクリプトを実行
    「\$folder2c」と「\$data」は各自のパスに書き換えて下さい。
    「\$folder2c」はdevkitSMS内に含まれているフォルダです。
    「\$data」は1. でデータを格納したフォルダです。

folder2c.ps1
$folder2c = "D:\devkitSMS\folder2c\"
$data     = "D:\Project\data\"

cd $folder2c

.\folder2c $data $data\assets

pause

完了するとCソースとヘッダが生成されます。

生成されたCソースとヘッダをプロジェクトフォルダに格納します。

ソースコード

以下のソースをプロジェクトフォルダに格納

xxx__tiles__bin, xxx__tiles__bin_size等は、assets.hを参照して各自書き換えて下さい。

main.c
#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スクリプトを実行。
パスは各自の環境に書き換えて下さい。

Compile.ps1
$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