LoginSignup
9
3

More than 3 years have passed since last update.

ゲームギア 開発環境

Posted at

はじめに

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

本記事ではCコンパイラにより、以下の画像をゲームギア上に表示するまでをご説明します。

表示させたい画像
aaaaahiruguchi_man.png
画像参照元
いらすとや 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 に格納。
    image.png

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

画像からCソースを生成

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

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

画像を16色まで削る

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

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

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

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

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

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

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

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

  9. 16色に削った画像
    10.png

画像を256x192にリサイズ

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

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

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

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

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

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

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

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

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

  4. 「Tilemap」タブを選択
    18.png

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

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

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

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

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

  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ソースとヘッダが生成されます。
image.png

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

ソースコード

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

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/

実行画面
image.png

参考サイト

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

9
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3