# 起動ディスクの作り方

1998年12月16日 セガ・エンタープライゼス テクニカルサポートセンター

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

イニシアルプログラムのSYSTEMIDの仕様が変更となりました。
商品コードフィールドの枝番号に関する扱いが変更になりました。 詳細は、商品番号フィールドの説明を御参照下さい。

## ◆イニシアルプログラム

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

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

アプリケーションの性格に合わせて、いくつかの項目を設定し、アプリケーション個々のイニシアルプログラムを作成します。
イニシアルプログラムはいくつかの要素に分けることが出来ますが、アプリケーション製作者が変更する必要のあるファイルは、DC_SDK\SHINOBI\SAMPLE\ETC\IP\SYSTEMID.SRCというアセンブラのソースファイルです。
通常このファイルに書かれている情報は、システムIDといいアプリケーションにより内容が異なるものです。
このファイルにはいくつかの項目があり、そのうちのいくつかを設定します。
以下に実際のSYSTEMID.SRCを見ながら、各項目について説明していきます。

> | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F
> 0000h | ハードウェア識別子
> 0010h | ハードウェアベンダーID
> 0020h | メディアID | メディア構成
> 0030h | 対応エリアシンボル | ペリフェラルシンボル
> 0040h | 商品番号 | バージョン番号
> 0050h | リリース年月日 | リザーブ
> 0060h | ファーストリードファイル | リザーブ
> 0070h | メーカー識別子
> 0080h | アプリケーションタイトル
> 0090h
> 00A0h
> 00B0h
> 00C0h
> 00D0h
> 00E0h | リザーブ
> 00F0h | リザーブ

> 【表：１】

ハードウェア識別子
  対象ハードウェアを規定します。変更は出来ません

  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)

  【表：２】

ハードウェアベンダー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

  【表：３】

メディアID
  メディア固有の番号を入れます。
  メディアIDは、商品番号フィールド及び、バージョン番号フィールドの内容から算出されます。算出には、付属のイニシアルプログラムソースファイル生成ツールまたは、BINディレクトリにあるIPIDツールを使用してください。
  出てきた4桁の文字列をこのフィールドに埋め込みます。

  0 | 1 | 2 | 3 | 4
  --- | --- | --- | --- | ---
  メディアID(16進数表記のアスキー文字列で4桁) | (20h)

  【表：４】

  ### 備考：IPIDツールの使い方

  > IPID 商品番号 バージョン番号[ENTER]
  > 例)
  > IPID T1302-N02 V1.001

  ※大文字、小文字は正確に入れてください(普通は大文字です)。また、バージョン番号の"V"も忘れずに入れる必要があります。

メディア情報
  メディアの構成を記述します。

  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A
  --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
  G | D | - | R | O | M | 何枚目/何枚組(余りは20hで埋める)

  【表：５】

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

  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
  --- | --- | --- | --- | --- | --- | --- | ---
  対象エリア(J)：アジア | 対象エリア(U)：南北アメリカ大陸 | 対象エリア(E)：欧州 | スペース(20h)で埋める

  【表：６】

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

  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
  --- | --- | --- | --- | --- | --- | --- | ---
  詳細

  【表：７】

商品番号
  商品番号。商品番号は、アプリケーションのタイトルによって固有に決められます。
  の開発タイトルの商品番号を御存知ない時には、弊社ソフト推進部までお問い合わせください。
  また、体験版やおまけディスクなどの場合、この部分に商品番号のかわりに、部品番号という番号が入ることがあります。
  部品番号も、同様に弊社ソフト推進部を経由して入手します。
  イニシアルプログラムの商品番号フィールドには、そういった番号を記入しますが、貰った番号をそのまま使用するわけではありません。
  以下に示すような、規則に従って、商品番号フィールドを埋めていきます。
  - セガタイトルの場合
    セガタイトルの場合は次のような商品コードになっています。

    > HDR-aaaa(-bb)

    (-bb)は枝番号と呼ばれ、特別な目的の時にのみ使用されます。
    セガタイトルの商品番号はHDRの後のハイフンのみを残し、他のハイフン(枝番号の前)は取り除き、結果が十文字に満たない時には残りをスペース(20h)で埋めます。
    つまり、
    HDR-aaaabb
    といったような形になります。
  - サードパーティタイトルの場合 サードパーティタイトルは、次のような構成となっています。

    > T-aaabbM
    > T-aaabbN-cc
    > aaaは二桁の場合もあります。

    -ccは、枝番号と呼ばれ、枝番号の前には必ずアルファベットNがきます。
    サードパーティータイトルの場合、次のような構成をとります。

    > 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
    > --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
    > T | a | a | a | b | b | M | (20h) | (20h) | (20h)

    > 【表：８】

    > 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
    > --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
    > T | a | a | a | b | b | N | (20h) | c | c

    > 【表：９】

    すべてのハイフンは取り除き、枝番号は、9桁、10桁目に寄せます。
    もし商品番号本体と間が開いた場合には、そこをスペース(20h)で埋めてください。
  - 部品番号の場合 部品番号は次のような構成になっています。

    > 610-aaaa(-bb)
    > aaaaは五桁の場合もあります。

    -ccは、枝番号と呼ばれ、特別な目的または、日本以外の地域を対象にした場合の補助的なコードとして使用されます。
    部品番号を商品コードフィールドに入れる場合には、すべてのハイフンを取り除き、枝番号を、9桁、10桁目に寄せます。
    更に、部品番号本体と枝番号の間に、隙間が出来るようであれば、そこはスペース(20h)で埋めてください。

    > 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
    > --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
    > 6 | 1 | 0 | a | a | a | a | (20h) | (20h) | (20h)

    > 【表：１０】

    > 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
    > --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
    > 6 | 1 | 0 | a | a | a | a | (20h) | b | b

    > 【表：１１】

バージョン番号
  マスタ納品する前は、1.000未満の数字が、
  マスタ納品は1.000
  マスタ納品後の修正版は1.000以降の数字が入ります。

  0 | 1 | 2 | 3 | 4 | 5
  --- | --- | --- | --- | --- | ---
  V | メジャーバージョン | . | マイナーバージョン

  【表：１２】

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

  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
  --- | --- | --- | --- | --- | --- | --- | ---
  西暦 | 月 | 日

  【表：１３】

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

ファーストリードファイル名
  最初に読み込む実行バイナリファイル名を記述します。余った部分にはスペース(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で埋める)

  【表：１４】

  セガタイトルの場合

  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

  【表：１５】

アプリケーションタイトル
  アプリケーションのタイトルを記述子します。英数字で96文字以内、文字数に満たない場合は、残りの部分を全てスペース(20h)で埋めるようにしてください。
  アプリケーションタイトル名の命名規則については、現在決まっておりません。

### 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	"FC94 ","GD-ROM1/1  "	;20:Media ID / Device information
>     	.sdata	"JUE     ","0799000 "	;30:Area symbols / Peripherals
>     	.sdata  "HDR0900  ","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)

【表：１６】

### 【使用するボタン/ペリフェラル(+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、スタート
ペリフェラル | ボタン

【表：１７】
MOU マウス(開発/発売未定)
GUN ガンコントローラ(仕様未定)
-->

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

・以下の表にしたがって、対応している拡張ペリフェラルに対応するビットを1として算出した4ビットコードを16進文字として1バイト格納する。

3 | 2 | 1 | 0
--- | --- | --- | ---
メモリカード | 音声入力ペリフェラル | フォースフィードバック/振動パックなど | その他

【表：１８】

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

1(31h)
  VGA BOX対応
0(30h)
  VGA BOX未対応

### 【OS(+06)】

1(31h)
  SEGA OS使用
0(30h)
  SEGA OS未使用

### 【未使用(+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 | OS less(SHINOBI)
> 16進コード | 00H
> ペリフェラルシンボル | "0799800 "

> 【表：１９】

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

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

> 【表：２０】

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

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

> 【表：２１】

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

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

> 【表：２２】

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

アプリケーションには、個々に対応するエリアがあり、そのアプリケーションがどの地域での動作を保証しているのかをイニシアルプログラムに記述します。
対応するエリアにより、イニシアルプログラムの作成時にリンクするファイルが異なります。
それぞれのエリアコードに対応するエリアオブジェクトがセガより提供され、イニシアルプログラムのシステム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

> 【表：２３】

リンクする時には、対象エリアオブジェクト以外はすべてダミーオブジェクトで埋め、全部で、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	lib\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_ini)
>     Input	lib\aip.obj
>     Input	lib\zero.obj
>     STart	IP(0ac008000)
>     ;Print	ip.map
>     CHeck_section
>     align_section
>     EXIt
>     ;====== End of file ====================================================

赤い部分が、エリアオブジェクトの指定になります。
御社のアプリケーションに合わせて変える必要があります。

## ■プレイ履歴管理について

イニシアルプログラムの機能のオプションとして、プレイ履歴を本体Flashメモリに保存し、保存データをアプリケーション内部で使用できるというものがあります。
プレイ履歴を保存するイニシアルプログラムを作成するには、これまで、aip.objをリンクしていた代わりとして、aipf.objをリンクします。
また、ZERO.SRCファイルに日本語タイトル及びゲームジャンルを記入し、イニシアルプログラムを作成します。日本語タイトルにはSHIFT-JISコードで、漢字、カナ、アルファベット、数字などが使用でき、全部で44バイトになるように調整します(余った部分はスペース(20h)で埋めます)。
ジャンルは、16ビットのビットアサインとなっていて、アプリケーションが属するジャンルのビットを立てた16進の数字を記入します。

F | E | D | C | B | A | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
0 | 0 | 0 | 0 | NET | GUN | TBL | FIG | OTH | ADV | SIM | DRV | SPT | RPG | SHT | ACT

NET | 通信対応
GUN | ガンシューティング
TBL | テーブル、パズル、カード、ボード、etc.
FIG | 格闘
OTH | その他のジャンル
ADV | アドベンチャー
SIM | シミュレーション
DRV | ドライブ
SPT | スポーツ
RPG | ＲＰＧ
SHT | シューティング
ACT | アクション

>     ;=======================================================================
>     ;   zero.src -- GAME TITLE2 (Japanese) support version!
>     ;   Copyright(c) SEGA ENTERPRISES, LTD., 1998
>     ;   Ver.0.82(1998-10-05) Written by H.Hayashi
>     ;=======================================================================
>          .SECTION IP,CODE,ALIGN=4

>     ;
>     ;   ここに、画面表示用タイトル（SHIFT-JIS）を記入します
>     ;   サイズは<44バイト>ちょうどになるようにしてください
>     ;                S                                          E
>         .sdata	"日本語タイトル名(Japanese Title)            "
>     ;
>     ;   ここに、ジャンルコード を記入します
>     ;   サイズは4バイト( unsigned long ）
>     ;   表記方法は、以下
>     ;
>     ;   各ゲームジャンルに対応するビットを1として
>     ;   算出した16ビットコードを下位の16ビットとしてlong形式で格納します
>     ;
>     ;                                   8               4               0
>     ;     |---|---|---|---|NET|GUN|TBL|FIG|OTH|ADV|SIM|DRV|SPT|RPG|SHT|ACT|
>     ;
>     ; NET=通信対応
>     ; GUN=ガンシューティング
>     ; TBL= テーブル、パズル、カード、ボード、etc.
>     ; FIG=格闘
>     ; OTH=その他のジャンル
>     ; ADV=アドベンチャー
>     ; SIM=シミュレーション
>     ; DRV=ドライブ
>     ; SPT=スポーツ
>     ; RPG=ＲＰＧ
>     ; SHT=シューティング
>     ; ACT=アクション
>     ; ---=未使用
>     ;
>         .data.l	H'00000810  ; 通信対応ドライブゲームの場合
>     ;
>         .end
>     ;====== End of file ====================================================

## ■商品番号と会社ID

アプリケーション毎に、セガの営業部より商品番号が発行されます。
例えば、次のような商品番号が発行されたとします。

> T-16 06 M

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

> T-1606N-05

この番号の場合には、先ほどと同じタイトルで、海外の所定の国向けという意味になります。-05がその対象国をあらわしています。

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

> T1606N-05

## ◆実行プログラムのバイナリ化

起動ディスクを作るには、アプリケーションプログラムのバイナリデータを作成する必要があります。
開発時にはELFファイルと呼ばれるアプリケーションプログラムを使用してきましたが、ELFファイルには、デバッグに関する情報などが含まれており、デバッガを経由して動作できるようなフォーマットになっています。
しかしながら、実際にディスクにプログラムを焼き実行させるためには、プログラムの実体のみを抽出しバイナリデータにしなければいけません。
バイナリファイルを作成する一番簡単な方法は、SDKに含まれる「makeuser」ファイルを利用します。makeuserファイルの37行目に着目すると、次のような記述が見つかります。

>     ######################################################################
>     #
>     #   各種設定（使用環境に合わせる）
>     #
>     #=====================================================================
>     #
>     #   PROJECT_NAME ターゲット名．ファイル名のベースにもなる．
>     #   PROJECT_TYPE ターゲットタイプ．ファイル名の拡張子にもなる．
>     #                       elf ELFフォーマットの実行ファイルの出力．
>     #                       bin バイナリフォーマットの実行ファイルの出力．
>     #                       lib ライブラリファイルの出力
>     #   SECTION_NAME セクション名の定義．各セクション共通の名称になる（頭
>     #                にそれぞれのセクションのサフィックスが付加される）
>     #   DEBUG_FLG    デバグ情報の作成の有無．
>     #                       on  デバグ情報を作成．
>     #                       off デバグ情報を作成しない．
>     #
>     ######################################################################
>     PROJECT_NAME  = sample
>     PROJECT_TYPE  = elf
>     SECTION_NAME  =
>     DEBUG_FLG     = on

デフォルトでは、PROJECT_TYPEはelfになっていて、ビルド後の生成ファイルはelfファイルが出来上がります。
ここをbinにするとバイナリファイルが出来上がります。(上図下線部参照)
makeuserファイルを変更した後に再度アプリケーションをビルドし直せば、バイナリファイルが出来上がります。

別の方法として、ELF2BINというコンバータを使用するという方法があります。 ELF2BINは、elfファイルから直接binファイルを作成するというものです。
使い方の詳細については、こちらをご覧ください。

## ◆起動ディスクのビルド

自分のアプリケーション用の、SYSTEMID.SRCファイルとIP.SUBファイルが完成したら、イニシアルプログラムをビルドします。
イニシアルプログラムを作成するサンプルがSDK内には用意されています。
\DC_SDK\SHINOBI\SAMPLE\IPディレクトリをご覧ください。
この中にmk.batというバッチファイルがあります。
このバッチファイルを実行し、イニシアルプログラムを生成します。
バッチファイルを実行すると次のような三つのファイルが出来上がります。

> IP.BIN IP0000.BIN IP00.BIN

このうちDreamcastディスクのイニシアルプログラムに使用するのは二つで、それぞれ機能が異なります。

> IP0000.BIN | 単密用
> IP.BIN | 高密用

それぞれのファイルを、CD CRAFTまたは、GD Workshopでしかるべく場所においてあげることで、Dreamcast用の起動ディスクが出来上がります。
作成したディスクが起動するための条件は、

1. 単密領域のシステムエリアに単密領域専用のイニシアルプログラムがある。
2. 高密領域のシステムエリアに高密領域専用のイニシアルプログラムがある。
3. イニシアルプログラムのSYSTEMIDで指定されたファーストリードファイルがGDROM上に存在している。
4. ファーストリードファイルが最外周にある。
5. ファイル名をアルファベット順に並べた時にファーストリードファイルの前には、0GDTEX.PVRファイル以外のファイル、ディレクトリが来ない。
   例)
   ファーストリードファイル1ST_READ.BINの時、
   0.Bin、1A.などのディレクトリ、ファイル名はNG。

の4つです。
この4つの条件が満たされない場合、Dreamcast用のディスクであると認識されず、起動いたしません。
また、イニシアルプログラムのSYSTEMIDの内容が不一致の場合、ファーストリードファイルのファイル名の一番最初の文字が数字でない場合にも起動はしません。
それでは、CD CRAFT及びGD Workshopでの自己起動ディスクの作成方法についてそれぞれ説明しましょう。

### CD CRAFTの場合

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

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

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

すべての設定が終了すると、CRAFTは自動的に中間フォーマットであるCDスクリプトファイルを生成し、ディスクイメージを作成し、GDROMへの書き込みを開始します。
CD CRAFT Ver. 2.27では、イニシアルプログラムからファーストリードファイル名を検索し、自動的にファーストリードファイルを最外周に置くようなスクリプトファイルを生成しますが、以下にファーストリードファイルを手で最外周におくための方法について説明します。
ファーストリードファイルを最外周に置くために、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を作成してください。

【注意】

マスタ納品時の複数枚GDROMの焼き方

マスタディスク納品時には、三枚の全く同じディスクを納品しなければいけませんが、その際の注意事項について説明します。
納品する三枚のディスクはすべて同じタイムスタンプである必要があります。
CD CRAFT上でイメージファイルの作成から始めてしまうと、タイムスタンプがずれてしまうため、マスタ納品したディスクの内容に不整合が生じてしまいます。
そのため、納品検査時のベリファイ検査で再提出対象となる事があります。
こういったトラブルを防ぐため、以下のような方法で複数枚のマスタディスクを作成してください。

1. CD CRAFTの右上のディスクボタンまたは、「CD作成」メニューの「書き込み設定」を選択します。

2. ダイアログの「書き込み枚数」を用意したいディスクの枚数にして、通常どおり、マスタディスクの書き込みを行ってください。

ディスクの書き込みが終了する毎に、ディスクのトレイが開きますので新しいディスクをいれ、書き込み作業を続行してください。

### GD Workshopの場合

#### すべてのデータを外周部に寄せる

GD-ROMはその構造上、データはディスクの外側に置けば置くほど高速にファイルにアクセスすることが可能です。CD CRAFTでは、デフォルトですべてのデータをディスクの外周部分に寄せるような仕様になっていますが、GD Workshopでは、デフォルトでは、データを内周部に寄せて配置されます。
ファーストリードファイルを最外周に置かなければならないことも考慮すると、高密エリアにあるすべてのデータを出来るだけ外周に配置するように設定しておくほうが、あとで変更の作業などが入らなくなり、都合が良くなります。

GD Workshopでプロジェクトを立ちあげて、ファイルをドラッグすると、第3トラックにデータが置かれます。
この第3トラックが高密エリアの最初のトラックですので、このトラックを外周に配置するようにすれば、後に続くトラックも全て外周に配置されます。
それでは、やり方を見ていくことにしましょう。
まず、「03 - MODE1」とかかれたトラック(高密エリアの一番内側にあるトラック)を選択します。

つぎに、トラックタブをクリックし、

トラックタブの情報から、Pad Trackと書かれたチェックボックスをクリックします。

最後にApplyボタンをクリックしてこの内容を更新します。
これで、このトラックは外周部に寄せて配置されます。
もし、このトラックの後にDAトラックやデータトラックが来ると、それらのトラック一番最後のトラックが最外周になり、残りのトラックも、外周から詰めて配置されます。

#### イニシアルプログラムの登録

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

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

#### ファーストリードファイルを最外周に配置する

次に高密領域のデータトラックにファーストリードファイルを登録します。
気をつけなければいけないのは、GDDAトラックを追加した場合で、最外周におくためには、GDDAトラックの後に更にデータトラックを追加し、そこにファーストリードファイルを置く必要があります。

又、デフォルトではファーストリードファイルは(ASCII順でいくと)ファイルエントリの先頭付近に置かれますので、これを、意図的にエントリの後方に持っていき、最外周に置くように工夫しなければいけません。
GD Workshop上で、ディスク内のファイル配置を変更するには、「Switch Views」ボタンまたは、Viewメニューで、Tree Viewについているチェックを外します。

こうすることで、ファイル一覧画面がツリー形式から、リスト形式へと変ります。
このリストビューの中では、上にエントリされいるファイルほど、内周部に置かれています。つまり、ファーストリードファイルをこのリストの一番最後に持ってくれば、ファーストリードファイルを一番外周に持ってくることが出来ます。
このビューからファーストリードファイル(この例では1ST_READ.BIN)を選択し、

このファイルをドラッグまたは、選択した状態でカーソルの下キーを押し、一番下まで移動します。

これでファーストリードファイルを最外周に置くことが出来ました。
この機能は、GD Workshopのバージョン2.4.30A(ファームウェア2.4.4a)以降のバージョンでサポートされています。

## ◆付録

### イニシアルプログラムソース自動生成ユーティリティ(Netscape Navigatorにのみ対応しています)

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

-

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

部品番号：-

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

アジア | 北米、南米 | 欧州

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

十字キー、Aボタン、Bボタン、スタートボタン |
Cボタン | Dボタン
Xボタン | Yボタン
Zボタン |
2番目の十字キー |
Rトリガ | Lトリガ
アナログX軸(標準) | アナログY軸(標準)
アナログX軸(拡張) | アナログY軸(拡張)

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

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

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

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

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

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

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

V.

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

西暦年月日

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

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

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

.

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

### ◆アプリケーション起動時に、アプリケーション起動情報を保存する場合、下をチェックして下の質問にお答えください。

起動時にアプリケーション起動情報を保存する。
日本語のアプリケーションタイトルを教えてください。(SHIFT-JISコードで44文字以内、全て全角文字の場合22文字)
アプリケーションの性格を教えてください。(複数可能)
通信に対応しています。
ガンシューティングゲームです。
テーブルゲーム、パズルゲーム、カードゲーム、ボードゲームなどです。
格闘系のゲームです。
アドベンチャゲームです。
シミュレーションゲームです。
ドライブ、レーシングゲームです。
スポーツゲームです。
ロールプレイングゲームです。
シューティングゲームです。
アクションゲームです。
その他のジャンルです。

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

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

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

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

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

オーバービューに戻る