イニシアルプログラムの作り方

1998年10月6日
セガ・エンタープライゼス
ソフトウェア技術開発部





イニシアルプログラムの仕様変更について【重要】

イニシアルプログラムのSYSTEMIDの仕様が変更となりました。 先頭から、10hはメーカー識別子から、ハードウェアベンダー名と変わり、"SEGA ENTERPRISES"が固定で入ります。
メーカー識別子はこれまではリザーブとされていた70hの場所に移動になりました。
この変更の加えられていないイニシアルプログラムは実機上で起動しない場合があります。
ご注意ください。



Dreamcast用のCDとして起動するディスクを作成するに当たって、CDのシステム領域にイニシアルプログラム(通常IP.BINという名前ですが、名前は何でも構いません)と呼ばれるデータをおかなければいけません。
イニシアルプログラムはアプリケーション毎に内容が異なります。
ここでは、イニシアルプログラムの作成方法について具体的に記述します。


■SYSTEM IDのフォーマットについて


アプリケーションの性格に合わせて、いくつかの項目を設定し、アプリケーション個々のイニシアルプログラムを作成します。
イニシアルプログラムはいくつかの要素に分けることが出来ますが、アプリケーション製作者が変更する必要のあるファイルは、KATANA\SHINOBI\SAMPLE\IP\SYSTEMID.SRCというアセンブラのソースファイルです。
通常このファイルに書かれている情報は、システムIDといいアプリケーションにより内容が異なるものです。
このファイルにはいくつかの項目があり、そのうちのいくつかを設定します。
以下に実際のSYSTEMID.SRCを見ながら、各項目について説明していきます。
0123456 789ABCD EF
0000h ハードウェア識別子
0010h ハードウェアベンダーID
0020h メディア構成
0030h 対応エリアシンボル ペリフェラル情報
0040h 商品番号 バージョン番号
0050h リリース年月日 リザーブ
0060h ファーストリードファイル リザーブ
0070h メーカー識別子
0080h ゲームタイトル
0090h
00A0h
00B0h
00C0h
00D0h
00E0h リザーブ
00F0h リザーブ
【表:1】
ハードウェア識別子
対象ハードウェアを規定します。変更は出来ません
0123456 789ABCD EF
SEGA(20h)SE GAKATAN A(20h)
【表:2】

ハードウェアベンダーID
対象ハードウェアの製作者を規定します。変更は出来ません
0123456 789ABCD EF
SEGA(20h)EN TERPRIS ES
【表:3】

メディア情報
メディアの構成を記述します。
0123456 789ABCD EF
SEGA(20h)GD -ROM 何枚目/何枚組(余りは20hで埋める)
【表:5】

対応エリアシンボル
アプリケーションの対応するエリアを記述します。
日本を含むアジア、北米・南米、欧州の三種類があり、対応するエリアすべてを記述します。
対応エリアJ、U、E、はアプリケーションが対応する場合にはその文字(JUEのどれか)を書き、対応しなければ、スペース(20h)を入れます。 エリアシンボルによって、IP作成時にリンクするファイルが変ります。詳細はイニシアルプログラムのリンクの項をご覧ください。
0123456 7
対象エリア(J):アジア対象エリア(U):南北アメリカ大陸対象エリア(E):欧州スペース(20h)で埋める

対応ペリフェラル
アプリケーションの対応するペリフェラルに関する情報を記述します。詳細はペリフェラルシンボルについてをご覧ください。
0123456 7
詳細
【表:6】

商品番号
商品番号。商品番号は、アプリケーションのタイトルによって固有に決められます。
の開発タイトルの商品番号を御存知ない時には、弊社ソフト推進部までお問い合わせください。
なお、商品番号の先頭4桁または5桁に'-'を入れたものは、メーカー識別子の会社IDと同じになります。
0123456 789
詳細
【表:7】

バージョン番号
マスタ納品する前は、1.000未満の数字が、
マスタ納品は1.000
マスタ納品後の修正版は1.000以降の数字が入ります。
012345
Vメジャーバージョン.マイナーバージョン
【表:8】

リリース年月日
年は西暦で4桁、月日はそれぞれ2桁で計8桁の文字列を記述します。
0123456 7
西暦
【表:9】

リザーブ
全てスペース(20h)で埋めるようにしてください。

ファーストリードファイル名
最初に読み込む実行バイナリファイル名を記述します。
英数大文字で、ボディーネーム8文字以内、ピリオド(.)、拡張子3文字以内で、かつファイル名の先頭は数字で始めなければいけません。
ファーストリードファイルの最大サイズは(14MB - 64KB = 146114528バイト)です。
16MBのうち(16MB - 64KB = 16711680バイト)はアプリケーションに制御が移った時点(mainが呼ばれた時点)でアプリケーションに開放されます。

メーカー識別子
アプリケーションのメーカーIDを記述します。
0123456 789ABCD EF
SEGA(20h)LC -会社ID(余りは20hで埋める)
【表:10】

セガタイトルの場合
0123456 789ABCD EF
SEGA(20h)EN TERPRISE S
【表:11】

ゲームタイトル
ゲームのタイトルを記述子します。ゲームタイトル名の命名規則については、現在決まっておりません。

SYSTEMID.SRCの例(IPサンプルより)

;=======================================================================
;	systemid.src -- System ID sample
;	Copyright(c) SEGA ENTERPRISES, LTD., 1998
;	Ver.1.00(1998-09-01) Written by eMuKei
;=======================================================================
	.section IP,code,align=4
;
	.sdata	"SEGA SEGAKATANA "	;00:H/W identifier(Do NOT change!)
	.sdata	"SEGA ENTERPRISES"	;10:H/W Vendor ID(Do NOT change!)
	.sdata	"SEGA GD-ROM1/1  "	;20:Device information
	.sdata	"JUE     ","0799000 "	;30:Area symbols / Peripherals
	.sdata  "HKT0900  ","V0.800"	;40:Product number / Version
	.sdata	"19980901","        "	;50:Release date / Reserved(Space)
	.sdata	"1ST_READ.BIN","    "	;60:1st read file name / Reserved(Space)
	.sdata	"SEGA ENTERPRISES"	;70:Maker identifier
	.sdata	"SAMPLE GAME     "	;80:Game Title
	.sdata	"                "	;90:	;
	.sdata	"                "	;a0:	;
	.sdata	"                "	;b0:	;
	.sdata	"                "	;c0:	;
	.sdata	"                "	;d0:	;
	.sdata	"                "	;e0:Reserved(Space)
	.sdata	"                "	;f0:Reserved(Space)
;
	.end
;====== End of file ====================================================

■ペリフェラルシンボルに関して


対象のアプリケーションが最低限必要とするボタン情報をここに記述します。
オプションで、他のボタンも使用できるような場合には、ここには含めません。

【構成】


・以下のような8バイト構成とする。
+00+01+02+03+04+05+06+07
使用するボタン/ペリフェラル使用する拡張ペリフェラルAVケーブル種別OS情報未使用(20h)
【表:12】

【使用するボタン/ペリフェラル(+00〜+03)】


・以下の表にしたがって、必ず使用するボタン、ペリフェラルに対応するビットを1として算出した16進コードを16進文字列として4バイト格納する。
・ボタンは、アプリケーションで最低限必要とするボタンを指定する。
・GUN、キーボード、マウス専用といったアプリケーションの場合は、ボタンは全て必要ないものとして取り扱う。
・GUN、キーボード、マウスが必要だが、なくてもコントローラで操作可能な場合は、コントローラで操作する場合に必要なボタンを指定する。
+00+01+02+03
1514131211109 8765432 10
マウスガンコントローラキーボードアナログY2アナログX2アナログY1 アナログX1LトリガRトリガ十字キー2ZYX DC十字キー1、A、B、スタート
ペリフェラルボタン
【表:13】

【使用する拡張ペリフェラル(+04)】


・以下の表にしたがって、対応している拡張ペリフェラルに対応するビットを1として算出した4ビットコードを16進文字として1バイト格納する。
3210
メモリカード音声入力ペリフェラルフォースフィードバック/振動パックなどその他
【表:14】

以下の2項目は、現在のBOOT ROMでは未対応です。
ここに該当する部分は、必ずスペース(20h)で埋めてください。
この部分のコードに対応するのは、BOOT ROM Version 0.970以降または、プリプロPP2以降です。

【ケーブル種別(+05)】


1(31h)
VGAケーブル(仮)対応
0(30h)
VGAケーブル(仮)未対応

【OS(+06)】


1(31h)
DragonOS使用
0(30h)
DragonOS未使用

【未使用(+07)】


必ずスペース(20h)にしてください。

【例】


1.標準コントローラ、ビジュアルメモリに対応するアプリケーションの場合

使用するボタン十字キー1、A、B、Start、X、Y
アナログL、R、X1、Y1
使用するペリフェラルなし
16進コード0799H
文字列"0799" (30H 37H 39H 39H)
対応拡張ペリフェラルビジュアルメモリ
16進コード8H
文字"8" (38H)
対応ケーブル標準ビデオケーブル(VGA未対応)
OSNO OS(SHINOBI)
16進コード00H
ペリフェラルシンボル"0799800 "
【表:15】

2.GUN、ビジュアルメモリを使用するが、コントローラでも操作できるアプリケーションの場合

使用するボタン十字キー1、A、B、Start
使用するペリフェラルGUN
16進コード4001H
文字列"4001" (34H 30H 30H 31H)
対応拡張ペリフェラルビジュアルメモリ
16進コード8H
文字"8" (38H)
対応ケーブル標準ビデオケーブル(VGA未対応)
OSNO OS(SHINOBI)
16進コード00H
ペリフェラルシンボル"4001800 "
【表:16】

3.キーボードでしか操作できないアプリケーションで、VGAディスプレイへの表示も可能な場合

使用するボタンなし
使用するペリフェラルキーボード
16進コード2000H
文字列"2000" (32H 30H 30H 30H)
対応拡張ペリフェラルなし
16進コード0H
文字"0" (30H)
対応ケーブルVGAケーブルにも対応
OSNO OS(SHINOBI)
16進コード10H
ペリフェラルシンボル"2000010 "
【表:17】

4.十字キーとA、B、Startボタンを持つコントローラ、ビジュアルメモリ、音声認識ペリフェラルを使用するアプリケーションの場合

使用するボタン十字キー1、A、B、スタート
使用するペリフェラルなし
16進コード0001H
文字列"0001" (30H 30H 30H 31H)
対応拡張ペリフェラルビジュアルメモリ、音声認識ペリフェラル
16進コードCH
文字"C" (43H)
対応ケーブル標準ビデオケーブル(VGA未対応)
OSNO OS(SHINOBI)
16進コード00H
ペリフェラルシンボル"0001C00 "
【表:18】


■イニシアルプログラムのリンクに関して


アプリケーションには、個々に対応するエリアがあり、そのアプリケーションがどの地域での動作を保証しているのかをイニシアルプログラムに記述します。
対応するエリアにより、イニシアルプログラムの作成時にリンクするファイルが異なります。
それぞれのエリアコードに対応するエリアオブジェクトがセガより提供され、イニシアルプログラムのシステムIDで定義するエリアシンボルに合わせこれらのエリアオブジェクトを使用します。
用意されるエリアオブジェクトは以下の8つです。
エリアオブジェクト対象エリア
SG_AREJP.OBJ日本含むアジア
SG_AREUS.OBJ北米、南米
SG_AREEC.OBJ欧州
SG_ARE00.OBJダミー0
SG_ARE01.OBJダミー1
SG_ARE02.OBJダミー2
SG_ARE03.OBJダミー3
SG_ARE04.OBJダミー4
SG_ARE05.OBJダミー5
SG_ARE06.OBJダミー6
【表:18】
リンクする時には、対象エリアオブジェクト以外はすべてダミーオブジェクトで埋め、全部で、8つのエリアオブジェクトをリンクする必要があります。
ダミーオブジェクト以外のエリアオブジェクトは、対象地域以外のエリアオブジェクトはいれないようにしてください。
例えば、アジア地域のみ対応としてシステムIDに記載されていれば、リンクするオブジェクトファイルは、SG_AREJP.OBJと7つのダミーオブジェクトになります。
システムIDの内容と、リンクされているエリアオブジェクトが一致しない場合には、起動時のセキュリティは外れず、起動しないディスクになります。
エリアオブジェクトは、リンカのサブコマンドファイルで指定し、IPサンプルにはIP.SUBというファイルが用意されています。
このファイルの中身は次のようになっていて、
;=======================================================================
;	ip.sub -- Subcommand File for SH Linkage Editor
;	Copyright(c) SEGA ENTERPRISES, LTD., 1998
;	Ver.0.10(1998-01-05) Written by eMuKei
;	Ver.0.60(1998-07-08) Updated by eMuKei
;	Ver.1.00(1998-09-01) Updated by eMuKei
;=======================================================================
Input	systemid.obj
Input	lib\ip.lib(toc)
Input	lib\ip.lib(sg_sec)
Input	lib\ip.lib(sg_arejp)
Input	lib\ip.lib(sg_areus)
Input	lib\ip.lib(sg_areec)
Input	lib\ip.lib(sg_are00)
Input	lib\ip.lib(sg_are01)
Input	lib\ip.lib(sg_are02)
Input	lib\ip.lib(sg_are03)
Input	lib\ip.lib(sg_are04)
Input	lib\ip.lib(sg_inino)
Input	lib\aip.obj
Input	lib\zero.obj
STart	IP(0ac008000)
;Print	ip.map
CHeck_section
align_section
EXIt
;====== End of file ====================================================
赤い部分が、エリアオブジェクトの指定になります。
御社のアプリケーションに合わせて変える必要があります。

■商品番号と会社ID


アプリケーション毎に、セガの営業部より商品番号が発行されます。
例えば、次のような商品番号が発行されたとします。
T-1606M
この商品番号は、から読んでいきます。
Mと書かれたアルファベットは、対象エリアで、日本の場合M、とそれ以外の国の場合Nになります。
その次の二桁、このサンプルだと06がメーカー毎の連番になります。
残りの部分は会社IDで、T-の後に2桁または3桁の数字が続きます。このサンプルの場合会社IDはT-16になります。
この会社IDはシステムIDのメーカー識別子の会社IDと同じ物となります。
つまり、この商品番号から、 T-16という会社IDを持つライセンシーの6番目のソフトで、日本向けのタイトルという意味になります。
また、対象とする国によっては次のような番号になることがあります。
T-1606N-05
この番号の場合には、先ほどと同じタイトルで、海外の所定の国向けという意味になります。-05がその対象国をあらわしています。

商品番号は、必ず弊社営業部を通して入手するようにしてください。勝手に作成することは出来ません。
イニシアルプログラムに登録する商品番号は、T-(SEGAタイトルの場合HKT-)から'-'を除いたものを登録します。
例)

T1606N-05

■起動ディスクのビルド


自分のアプリケーション用の、SYSTEMID.SRCファイルとIP.SUBファイルが完成したら、イニシアルプログラムをビルドします。
イニシアルプログラムを作成するサンプルがSDK内には用意されています。
\KATANA\SHINOBI\SAMPLE\IPディレクトリをご覧ください。
この中にmk.batというバッチファイルがあります。
このバッチファイルを実行し、イニシアルプログラムを生成します。
バッチファイルを実行すると次のような三つのファイルが出来上がります。
IP.BIN IP0000.BIN IP00.BIN
このうちDreamcastディスクのイニシアルプログラムに使用するのは二つで、それぞれ機能が異なります。
IP0000.BIN単密用
IP.BIN高密用
それぞれのファイルを、GD CRAFTまたは、GD Workshopでしかるべく場所においてあげることで、Dreamcast用の起動ディスクが出来上がります。
作成したディスクが起動するための条件は、
  1. 単密領域のシステムエリアに単密領域専用のイニシアルプログラムがある。
  2. 高密領域のシステムエリアに高密領域専用のイニシアルプログラムがある。
  3. イニシアルプログラムのSYSTEMIDで指定されたファーストリードファイルがGDROM上に存在している。
  4. ファーストリードファイルが最外周にある。
の4つです。
また、イニシアルプログラムのSYSTEMIDの内容が不一致の場合、ファーストリードファイルのファイル名の一番最初の文字が数字でない場合にも起動はしません。
それでは、GD CRAFT及びGD Workshopでの自己起動ディスクの作成方法についてそれぞれご説明しましょう。

GD CRAFTの場合

GD CRAFTを立ち上げ、新規にCDスクリプトを作成すると、次のような画面が現れます。

ここで、単密、高密それぞれの領域用のスクリプトファイルを生成します。
単密領域の設定ボタンを押すと、現れるダイアログで、右上にある、システムエリア設定タグをクリックし、システムエリアの設定を行います。
「システムエリアを使用する」のチェックボックスをチェックし、その下に単密用のイニシアルプログラムを記述します。

同様に高密のシステムエリアも登録し、ここには高密専用のイニシアルプログラムを設定します。

すべての設定が終了すると、CRAFTは自動的に中間フォーマットであるCDスクリプトファイルを生成し、ディスクイメージを作成し、GDROMへの書き込みを開始しますが、ファーストリードファイルを最外周に置くために、CDスクリプトに修正を加えます。
CDスクリプトファイルは大体、次のような形態を取っています

Gd "test.cim"
単密単密領域の開始 RecordArea SINGLE
FileNameType ISO9660L2
イニシアルプログラムSystemArea "C:\ip\ip0000.bin"
データトラックの開始 Track MODE1
ボリューム指定
Volume
    PrimaryVolume
    SystemIdentifier            "SEGA SEGAKATANA"
    VolumeIdentifier            "SAMPLE_GAME_TITLE"
    VolumeSetIdentifier         "SAMPLE_GAME_TITLE"
    PublisherIdentifier         "SEGA ENTERPRISES,LTD."
    DataPreparerIdentifier      "SEGA ENTERPRISES,LTD."
    CopyrightFileIdentifier     "SMP_CPY.TXT"
    AbstractFileIdentifier      "SMP_ABS.TXT"
    BibliographicFileIdentifier "SMP_BIB.TXT"
    EndPrimaryVolume
EndVolume
ファイル指定
    File README.TXT
        FileSource "C:\readme.txt"
        EndFileSource
    EndFile
データトラックの終了EndTrack
オーディオトラック
Track CDDA
    FileSource "C:\warn_da\warning.da"
    EndFileSource
EndTrack
単密領域の終了EndRecordArea
高密高密領域の開始RecordArea HIGH
FileNameType ISO9660L2
イニシアルプログラムSystemArea "I:\ip\ip.bin"
データトラックAの開始Track MODE1
ボリウム指定
Volume
    PrimaryVolume
    SystemIdentifier            "SEGA SEGAKATANA"
    VolumeIdentifier            "SAMPLE_GAME_TITLE"
    VolumeSetIdentifier         "SAMPLE_GAME_TITLE"
    PublisherIdentifier         "SEGA ENTERPRISES,LTD."
    DataPreparerIdentifier      "SEGA ENTERPRISES,LTD."
    CopyrightFileIdentifier     "SMP_CPY.TXT"
    AbstractFileIdentifier      "SMP_ABS.TXT"
    BibliographicFileIdentifier "SMP_BIB.TXT"
    EndPrimaryVolume
EndVolume
データトラックAの終了EndTrack
オーディオトラック(GDDA)
Track CDDA
    FileSource "C:\warn_da\warning.da"
    EndFileSource
EndTrack
データトラックBの開始Track MODE1
ファイル指定
    File 1ST_READ.BIN
        FileSource "C:\diskroot\1st_read.bin"
        EndFileSource
    EndFile
    File ABC.DAT
        FileSource "C:\diskroot\abc.dat"
        EndFileSource
    EndFile
    File AIR_LOGO.PVR
        FileSource "C:\diskroot\air_logo.pvr"
        EndFileSource
    EndFile
データトラックBの終了EndTrack
高密領域の終了EndRecordArea
EndGd
通常、CDスクリプトファイルの先にエントリされたものが内周になります。つまり、エントリが後になれば後になるほど、外周に登録されます。
高密トラックにDAデータを置く場合、最外周がオーディオトラックになってしまうので、その場合、オーディオトラックの後にもう一度データトラックを追加します。
上の表では、データトラックBがそれに当たります。
また、データトラックBを作成して、そこにファーストリードファイルを置いたとしても、そのトラックに別のファイルが存在していれば、最外周に置かれない場合もあります。
では、データトラックBの部分に着目し、このCDスクリプトファイルを変更して、ファーストリードファイルが確実に最外周に来るように調整してみましょう。
    File 1ST_READ.BIN
        FileSource "C:\diskroot\1st_read.bin"
        EndFileSource
    EndFile
    File ABC.DAT
        FileSource "C:\diskroot\abc.dat"
        EndFileSource
    EndFile
    File AIR_LOGO.PVR
        FileSource "C:\diskroot\air_logo.pvr"
        EndFileSource
    EndFile
最初、この状態ではファーストリードファイルはデータトラックBの先頭にエントリされていますので、このままでは最外周に来ない恐れがあります。
そこで、
    File ABC.DAT
        FileSource "C:\diskroot\abc.dat"
        EndFileSource
    EndFile
    File AIR_LOGO.PVR
        FileSource "C:\diskroot\air_logo.pvr"
        EndFileSource
    EndFile
    File 1ST_READ.BIN
        FileSource "C:\diskroot\1st_read.bin"
        EndFileSource
    EndFile
と変えてあげます。
この様に順番を変えることで、ファーストリーファイルに限らず、GDROM上でのファイルのレイアウトを変えることが出来ます。
また、注意ですが、ファーストリードファイルは、サブディレクトリ内に置くことは出来ません。常に、GDROMのルートディレクトリに置くようにしてください。
編集が終了したら、イメージファイルを作成し、マスタディスク書き込みを行い、GDROMを作成してください。

GD Workshopの場合

プロジェクトウィンドウのディスクタブをクリックし、システムエリアファイル登録画面を表示します。

このディスクタブで表示される画面は、システムエリアにおくデータを登録する画面です。
この画面内で、イニシアルプログラムの登録をします。
「System Area File (single)」と書かれたところが、単密領域用のイニシアルプログラムファイルを登録するところで、
「System Area File (high)」と書かれたところが、高密領域用のイニシアルプログラムファイルを登録するとこになります。
サンプルのバッチファイルを使えば、単密用のイニシアルプログラムのファイルは、IP0000.BIN、高密用のイニシアルプログラムファイルはIP.BINですので、これらをそれぞれ登録します。

最後に登録の結果を反映させるために、Applyを押せば、イニシアルプログラムの登録は終了です。

次に高密領域のデータトラックにファーストリードファイルを登録します。
気をつけなければいけないのは、GDDAトラックを追加した場合で、最外周におくためには、GDDAトラックの後に更にデータトラックを追加し、そこにファーストリードファイルを置く必要があります。
又、デフォルトではファーストリードファイルは(ASCII順でいくと)ファイルエントリの先頭付近に置かれますので、これを、意図的にエントリの後方に持っていき、最外周に置くように工夫しなければいけません。

現在提供しているGD Workshopでは、ファイルの存在位置の再配置はサポートしていません。次回リリース予定のGD Workshopでファイルの再配置をサポートします。


■おまけ
イニシアルプログラムソース自動生成ユーティリティ(評価版)

◆商品番号を教えてください。(SEGAタイトルの場合こちらをチェック)

-

体験版等の場合には、ここにチェックをした上で、部品番号を入力してください。

部品番号:670-

◆対象エリアは何処ですか?(最低一つはチェック、複数選択可能)

アジア
北米、南米
欧州

◆アプリケーションを動作させるのに最低限必要な、ペリフェラルのボタンを教えてください。(複数選択可能)


十字キー、Aボタン、Bボタン、スタートボタン
Cボタン
Dボタン
Xボタン
Yボタン
Zボタン
2番目の十字キー
Rトリガ
Lトリガ
アナログX1軸
アナログY1軸
アナログX2軸
アナログY2軸

◆対応しているペリフェラルを教えてください。(複数選択可能)

マウス
ガンコントローラ
キーボード

◆対応している拡張ペリフェラルを教えてください。(複数選択可能)

メモリカード
音声入力ペリフェラル
振動パックなどのForce Feedback
その他の拡張ペリフェラル

VGAケーブルに対応していたらチェックして下さい。

DragonOSを使用していたらチェックして下さい。

◆バージョン番号を記入してください。


V.

◆リリース日時について教えてください。


西暦

◆このディスクは何枚組のディスクですか?


枚組みディスクのうちの、枚目

◆最初に読み込むファイルの名前は?


.

◆ゲームタイトルは?(ASCII文字で96字以内)



よろしければ、OKボタンを、設定内容をクリアしたければRESETボタンを押してください


あなたのアプリケーションのSYSTEMID.SRCは

あなたのアプリケーションのIP.SUBは

です。
それぞれをコピー&ペーストして、イニシアルプログラムをビルドしてください。



オーバービューに戻る