イニシアルプログラムの作り方
1998年10月6日
セガ・エンタープライゼス
ソフトウェア技術開発部
|
イニシアルプログラムの仕様変更について【重要】
イニシアルプログラムのSYSTEMIDの仕様が変更となりました。
先頭から、10hはメーカー識別子から、ハードウェアベンダー名と変わり、"SEGA ENTERPRISES"が固定で入ります。
メーカー識別子はこれまではリザーブとされていた70hの場所に移動になりました。
この変更の加えられていないイニシアルプログラムは実機上で起動しない場合があります。
ご注意ください。
Dreamcast用のCDとして起動するディスクを作成するに当たって、CDのシステム領域にイニシアルプログラム(通常IP.BINという名前ですが、名前は何でも構いません)と呼ばれるデータをおかなければいけません。
イニシアルプログラムはアプリケーション毎に内容が異なります。
ここでは、イニシアルプログラムの作成方法について具体的に記述します。
■SYSTEM IDのフォーマットについて
アプリケーションの性格に合わせて、いくつかの項目を設定し、アプリケーション個々のイニシアルプログラムを作成します。
イニシアルプログラムはいくつかの要素に分けることが出来ますが、アプリケーション製作者が変更する必要のあるファイルは、KATANA\SHINOBI\SAMPLE\IP\SYSTEMID.SRCというアセンブラのソースファイルです。
通常このファイルに書かれている情報は、システムIDといいアプリケーションにより内容が異なるものです。
このファイルにはいくつかの項目があり、そのうちのいくつかを設定します。
以下に実際のSYSTEMID.SRCを見ながら、各項目について説明していきます。
【表:1】
- ハードウェア識別子
- 対象ハードウェアを規定します。変更は出来ません
0 | 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | A | B | C | D |
E | F |
S | E | G | A | (20h) | S | E |
G | A | K | A | T | A | N |
A | (20h) |
【表:2】
- ハードウェアベンダーID
- 対象ハードウェアの製作者を規定します。変更は出来ません
0 | 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | A | B | C | D |
E | F |
S | E | G | A | (20h) | E | N |
T | E | R | P | R | I | S |
E | S |
【表:3】
- メディア情報
- メディアの構成を記述します。
0 | 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | A | B | C | D |
E | F |
S | E | G | A | (20h) | G | D |
- | R | O | M |
何枚目/何枚組(余りは20hで埋める) |
【表:5】
- 対応エリアシンボル
- アプリケーションの対応するエリアを記述します。
日本を含むアジア、北米・南米、欧州の三種類があり、対応するエリアすべてを記述します。
対応エリアJ、U、E、はアプリケーションが対応する場合にはその文字(JUEのどれか)を書き、対応しなければ、スペース(20h)を入れます。
エリアシンボルによって、IP作成時にリンクするファイルが変ります。詳細はイニシアルプログラムのリンクの項をご覧ください。
0 | 1 | 2 | 3 | 4 | 5 | 6 |
7 |
対象エリア(J):アジア | 対象エリア(U):南北アメリカ大陸 | 対象エリア(E):欧州 | スペース(20h)で埋める |
- 対応ペリフェラル
- アプリケーションの対応するペリフェラルに関する情報を記述します。詳細はペリフェラルシンボルについてをご覧ください。
【表:6】
- 商品番号
- 商品番号。商品番号は、アプリケーションのタイトルによって固有に決められます。
の開発タイトルの商品番号を御存知ない時には、弊社ソフト推進部までお問い合わせください。
なお、商品番号の先頭4桁または5桁に'-'を入れたものは、メーカー識別子の会社IDと同じになります。
【表:7】
- バージョン番号
- マスタ納品する前は、1.000未満の数字が、
マスタ納品は1.000
マスタ納品後の修正版は1.000以降の数字が入ります。
0 | 1 | 2 | 3 | 4 | 5 |
V | メジャーバージョン | . | マイナーバージョン |
【表:8】
- リリース年月日
- 年は西暦で4桁、月日はそれぞれ2桁で計8桁の文字列を記述します。
【表:9】
- リザーブ
- 全てスペース(20h)で埋めるようにしてください。
- ファーストリードファイル名
- 最初に読み込む実行バイナリファイル名を記述します。
英数大文字で、ボディーネーム8文字以内、ピリオド(.)、拡張子3文字以内で、かつファイル名の先頭は数字で始めなければいけません。
ファーストリードファイルの最大サイズは(14MB - 64KB = 146114528バイト)です。
16MBのうち(16MB - 64KB = 16711680バイト)はアプリケーションに制御が移った時点(mainが呼ばれた時点)でアプリケーションに開放されます。
- メーカー識別子
- アプリケーションのメーカーIDを記述します。
0 | 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | A | B | C | D |
E | F |
S | E | G | A | (20h) | L | C |
- | 会社ID(余りは20hで埋める) |
【表:10】
セガタイトルの場合
0 | 1 | 2 | 3 | 4 | 5 | 6 |
7 | 8 | 9 | A | B | C | D |
E | F |
S | E | G | A | (20h) | E | N |
T | E | R | P | R | I | S | E |
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バイト構成とする。
【表:12】
【使用するボタン/ペリフェラル(+00〜+03)】
・以下の表にしたがって、必ず使用するボタン、ペリフェラルに対応するビットを1として算出した16進コードを16進文字列として4バイト格納する。
・ボタンは、アプリケーションで最低限必要とするボタンを指定する。
・GUN、キーボード、マウス専用といったアプリケーションの場合は、ボタンは全て必要ないものとして取り扱う。
・GUN、キーボード、マウスが必要だが、なくてもコントローラで操作可能な場合は、コントローラで操作する場合に必要なボタンを指定する。
+00 | +01 | +02 | +03 |
15 | 14 | 13 | 12 | 11 | 10 | 9 |
8 | 7 | 6 | 5 | 4 | 3 | 2 |
1 | 0 |
マウス | ガンコントローラ | キーボード | アナログY2 | アナログX2 | アナログY1 |
アナログX1 | Lトリガ | Rトリガ | 十字キー2 | Z | Y | X |
D | C | 十字キー1、A、B、スタート |
ペリフェラル | ボタン |
【表:13】
【使用する拡張ペリフェラル(+04)】
・以下の表にしたがって、対応している拡張ペリフェラルに対応するビットを1として算出した4ビットコードを16進文字として1バイト格納する。
3 | 2 | 1 | 0 |
メモリカード | 音声入力ペリフェラル | フォースフィードバック/振動パックなど | その他 |
【表: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未対応) |
OS | NO 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未対応) |
OS | NO OS(SHINOBI) |
16進コード | 00H |
ペリフェラルシンボル | "4001800 " |
【表:16】
3.キーボードでしか操作できないアプリケーションで、VGAディスプレイへの表示も可能な場合
使用するボタン | なし |
使用するペリフェラル | キーボード |
16進コード | 2000H |
文字列 | "2000" (32H 30H 30H 30H) |
---|
対応拡張ペリフェラル | なし |
16進コード | 0H |
文字 | "0" (30H) |
---|
対応ケーブル | VGAケーブルにも対応 |
OS | NO 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未対応) |
OS | NO 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ディスクのイニシアルプログラムに使用するのは二つで、それぞれ機能が異なります。
それぞれのファイルを、GD CRAFTまたは、GD Workshopでしかるべく場所においてあげることで、Dreamcast用の起動ディスクが出来上がります。
作成したディスクが起動するための条件は、
- 単密領域のシステムエリアに単密領域専用のイニシアルプログラムがある。
- 高密領域のシステムエリアに高密領域専用のイニシアルプログラムがある。
- イニシアルプログラムのSYSTEMIDで指定されたファーストリードファイルがGDROM上に存在している。
- ファーストリードファイルが最外周にある。
の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でファイルの再配置をサポートします。
■おまけ
イニシアルプログラムソース自動生成ユーティリティ(評価版)

オーバービューに戻る