makerom[.TWL]

# makerom

# makerom.TWL

## 説明

`makerom` は、NITRO のアプリケーション ROM イメージを作成するためのツールです。ROM スペックファイルと呼ばれるファイルの記述を元に ROM イメージを生成します。

`makerom.TWL` は、`makerom` に TWL の ROM イメージの作成機能を追加したツールです。 指定可能なパラメータが増えています。

このツールを用いて TWL 用に作成した ROM イメージは、TWL の開発機上でのみ動作します。TWL-SDK の環境を用いて TWL 量産機上で動作可能な ROM イメージを作成することはできません。(また、NITRO 用に作成された ROM イメージも TWL 量産機上では動作しません。)

## 使用方法

### 起動コマンド

#### 1) 通常起動

    % makerom [-d] [-DNAME=VALUE...] [-MDEFINES_FILE] [-F] [-A]
                [-VFMT_VER] [-WWARNING_TYPE] SPECFILE [ROMFILE] [LISTFILE]

    % makerom.TWL [-DTARGET_PLATFORM=target] [-d] [-DNAME=VALUE...] [-MDEFINES_FILE] [-F] [-A]
                [-VFMT_VER] [-WWARNING_TYPE] SPECFILE [ROMFILE] [LISTFILE]

`SPECFILE` で指定された ROM スペックファイル(後述)の記述にしたがってファイルを結合し、 ROM イメージファイルを `ROMFILE` という名前で作成します。このとき、ROM の構成情報を `LISTFILE` で指定されたファイルに出力します。

`ROMFILE`, `LISTFILE` は省略可能です。省略時には `SPECFILE` で指定されたファイル名の拡張子部分をそれぞれ `.rom` あるいは `.nlf` としたファイル名が使用されます。また `-D` オプションにより変数とその値を定義することができます。この変数の値は ROM スペックファイルの記述時に参照することができます。

`makerom.TWL.exe` では、 `-D` オプションで `TARGET_PLATFORM` に `target` パラメータを指定する必要があります。 `target` パラメータは、`TWL` 対応アプリをビルドする場合には `'TWL-HYB'` を `TWL` 専用アプリをビルドする場合には `'TWL-LTD'` を指定します。通常は、ビルドシステムが適切な値を設定します。この指定がない場合は、デフォルトで `'TWL-LTD'` が設定されます。

`-M` オプションは`-D`オプションと同様に変数とその値を定義するものです。`[NAME=VALUE]` の列から成るテキストファイルを引数として受けます。このオプションによりコマンドラインの長さ制限に引っかかるような変数とその値の定義の記述を行なうことができます。オブジェクトファイル名を列挙するときなどのように空白を含む値を変数に定義する場合、コマンドライン引数の解釈の都合上、`-D` オプションにおいて値の部分を `"` や `'` などの引用符で囲ったりする必要がありますが、`-M` オプションの場合は、定義ファイル内の記述において値を引用符で囲う必要はありません。引用符をつけてしまうと引用符込みの値として認識されます。

`-F` オプションが指定されている場合、ROM ファイルがサイズの制限値(`Property` セクションの `RomSize` 参考)を越えていても ROM イメージファイルを生成します。

`-A` オプションが指定されている場合、ROM ファイルに `attachsign` コマンドによるデジタル署名コードを追加したときに、ROM サイズの制限値(`Property` セクションの `RomSize` 参考)を超えるかどうかの判定を行ないます。超える場合はエラーとなりますが、前述の `-F` オプションが設定されている場合は処理を継続します。

`-V` オプションで出力 ROM イメージのフォーマット番号 `FMT_VER` を指定します。このオプションは過去のバージョンとの互換のために用意されています。デフォルトでは 2 が指定されています。詳しくは以降の ROM フォーマットバージョンについての説明をご覧ください。

`-W` オプションにより通常は抑制されている警告が出力されるようになります。`-Wrom_speedtype_undefined` は `Property` セクションの `RomSpeedType` が SDK デフォルト設定のまま明示的に指定されていない場合に警告します。`-Wall` にて全ての警告が出力されます。

`-d` オプションは `makerom` のデバグ用メッセージ出力用のオプションで実行時にデバグ用メッセージを出力します。普段は必要ありません。

#### 2) オプション `-l`

`% makerom [-d] [-DNAME=VALUE...] [-MDEFINES_FILE] [-VFMT_VER] -l SPECFILE [LISTFILE]`

`% makerom.TWL [-d] [-DNAME=VALUE...] [-MDEFINES_FILE] [-VFMT_VER] -l SPECFILE [LISTFILE]`

ROM イメージを出力しないという点を除いて、起動方法 1 と同じです。`SPECFILE` で指定されたファイルを読み込んで、ROM 構成情報を `LISTFILE` という名のファイルに出力します。

`LISTFILE` は省略可能です。省略時には `SPECFILE` で指定されたファイル名の拡張子部分をプラットフォーム毎のデフォルト拡張子としたものが、ファイル名として使用されます。NITRO の ROM イメージを作成する場合のデフォルト拡張子は `.nlf`、TWL の場合は `.tlf` です。`-D` オプションにより変数とその値を定義することができます。この変数の値は ROM スペックファイルの記述時に参照することができます。

`-V` オプションは 1)通常起動 の場合と同じ動作をします。

#### 3) オプション `-r`

`% makerom [-d] [-F] [-A] [-VFMT_VER] -r LISTFILE [ROMFILE]`

`% makerom.TWL [-d] [-F] [-A] [-VFMT_VER] -r LISTFILE [ROMFILE]`

`LISTFILE` で指定された ROM 構成情報から、ROM イメージを構成し `ROMFILE` で指定された名前のファイルとして出力します。

`ROMFILE` は省略可能です。省略時には `LISTFILE` で指定されたファイル名の拡張子部分を `.rom` としたものが、ファイル名として使用されます。

`-F` オプション、`-A` オプションおよび `-V` オプションは 1)通常起動 の場合と同じ動作をします。

#### 4) オプション `-m`

`% makerom -m [ROMFILE] [ROMPATH] [HOSTPATH]`

`% makerom.TWL -m [ROMFILE] [ROMPATH] [HOSTPATH]`

`ROMFILE` で指定されたSRLファイル内の `ROMPATH` の位置に収録されているファイルの内容を、`HOSTPATH` で指定されたファイルの内容へ差し替えます。
既存のSRLファイルの収録データを1個だけ差し替えればよいという場合には、このオプションを使用すると効率的です。

- `ROMPATH` に指定するパス名は `rom:/foo/bar.dat` などのようにROMアーカイブとしてのパスを指定する必要があります。
- `HOSTPATH` に指定するファイルのサイズは、差し替え対象となる `ROMPATH` のファイルサイズと同じである必要があります。

### ROM スペックファイルフォーマット

NITRO および TWL の ROM イメージ内部は簡易的なファイルシステムによって管理されています。ROM スペックファイルはこのファイルシステムの構成を NITRO では 4 つ、TWL では 6 つのセクションに分けて記述したテキストファイルです。なお、ROM イメージセクションは全てのセクションの最後に記述されなければなりません。セクション定義の書式は、セクション定義開始の宣言部の後に引き続いて各セクションに関するパラメータが中括弧`{ }` で囲むという書式になっています。

セクションの定義対象 | セクション定義の書式
--- | ---

ARM9 実行バイナリ

    Arm9
    {
      [ARM9 パラメータ記述部]
      ....
    }

ARM7 実行バイナリ

    Arm7
    {
      [ARM7 パラメータ記述部]
      ....
    }

ARM9 TWL専用 実行バイナリ

    Arm9.Ltd
    {
      [ARM9 TWL専用部 パラメータ記述部]
      ....
    }

ARM7 TWL専用 実行バイナリ

    Arm7.Ltd
    {
      [ARM7 TWL専用部 パラメータ記述部]
      ....
    }

付帯情報
`(Property)`

    Property
    {
      [付帯情報パラメータ記述部]
      ....
    }

追加付帯情報
`(AppendProperty)`

    AppendProperty
    {
      [追加付帯情報パラメータ記述部]
      ....
    }

レーティング情報
`(Rating)`

    Rating
    {
      [レーティング情報パラメータ記述部]
      ....
    }

ROM イメージ

    RomSpec
    {
      [ROM イメージパラメータ記述部]
      ....
    }

### セクションパラメータ

#### Arm9 セクション (ARM9 実行バイナリ定義セクション)

ここでは ARM9 側の実行バイナリに関する設定を行ないます。

> `Static` [ARM9 の常駐モジュールファイル名]
>   ARM9 の実行ファイルの常駐モジュールファイル名を指定します。
> `OverlayDefs` [ARM9 の Overlayネームファイル名]
>   ARM9 の OverlayDefs ファイル名を指定します。
> `OverlayTable` [ARM9 の OverlayTable ファイル名]
>   ARM9 の OverlayTable ファイル名を指定します。
>   オーバーレイを使用しない場合、このファイルは必要ありません。この場合、`OverlayTable` 定義文を省略することができます。
>   ただし、Arm9.Ltd セクションでオーバーレイを使用する場合は省略することはできません。
> `Nef` [ARM9 の nef または tef ファイル(デバグ情報ファイル)名]
>   ARM9 のデバグ情報を保持するファイル(`nef`ファイル) を指定します。
>   デバグを実行しない場合、この `Nef` 定義文は必要ありません。記述を省略することができます。
>   `"Nef"` キーワードの別名として `"Elf"` を使用することもできます。

#### Arm7 セクション (ARM7 実行ファイル定義セクション)

ここでは ARM7 側の実行バイナリに関する設定を行ないます。

> `Static` [ARM7 の常駐モジュールファイル名]
> `OverlayDefs` [ARM7 の Overlayネームファイル名]
> `OverlayTable` [ARM7 の OverlayTable ファイル名]
> `Nef` [ARM7 の nef または tef ファイル(デバグ情報ファイル)名]
>   ARM9 のパラメータと同様です。

#### Arm9.Ltd セクション (ARM9 TWL専用 実行バイナリ定義セクション)

ここでは TWL 上で実行される場合でのみ使用される ARM9 側の実行バイナリに関する設定を行ないます。

> `Static` [ARM9 TWL専用部 の常駐モジュールファイル名]
> `OverlayDefs` [ARM9 TWL専用部 の Overlayネームファイル名]
> `OverlayTable` [ARM9 TWL専用部 の OverlayTable ファイル名]
>   ARM9 のパラメータと同様です。

#### Arm7.Ltd セクション (ARM7 TWL専用 実行ファイル定義セクション)

ここでは TWL 上で実行される場合でのみ使用される ARM7 側の実行ファイルに関する設定を行ないます。

> `Static` [ARM7 TWL専用部 の常駐モジュールファイル名]
> `OverlayDefs` [ARM7 TWL専用部 の Overlayネームファイル名]
> `OverlayTable` [ARM7 TWL専用部 の OverlayTable ファイル名]
>   ARM9 のパラメータと同様です。

#### Property セクション (付帯情報定義セクション)

名称の後に ◎ が付いている項目は、マスターROM作成時に必ず設定しなければならない項目です。

Property セクション NITRO / TWL 共通項目

> `RomHeaderTemplate` [Rom ヘッダのテンプレートファイル名] ◎
>   ROM イメージのヘッダ部分のテンプレートファイルを指定します。指定なしの場合は `makerom[.TWL].exe` と同じディレクトリの`"rom_header.template.sbin"` がデフォルトとして使われます。マスターROM作成時に弊社より各ゲームアプリケーションに対応したマスターROM用のテンプレートファイルを配布いたしますので、そのファイル名をここに指定します。ROM ヘッダのテンプレートファイル自体の内容をバイナリ修正することは推奨されていません。以下に示している `TitleName` などのパラメータ記述を ROMスペックファイルへ行なうことで各マスターROMの付帯情報を設定してください。
> `TitleName` [タイトル名] ◎
>   タイトルの名称を指定します。ASCIIコード（英数字）で 12 文字までです。12文字未満の場合は未使用領域へ 0 が格納されます。指定なしの場合は RomHeaderTemplate 内に埋め込まれている値が使用されます。
> `MakerCode` [メーカーコード] ◎
>   弊社とのライセンス契約時に決定しているメーカーコードを指定します。ASCIIコード（英数字）2 文字です。
>   指定なしの場合は RomHeaderTemplate 内に埋め込まれている値が使用されます。
> `RemasterVersion` [リマスターバージョン] ◎
>   製品として生産される ROM のリマスターバージョン番号を指定します。16進数、10進数、8進数表記が使用できます。指定なしの場合は RomHeaderTemplate 内に埋め込まれている値が使用されます。これは以前のバージョンにおいて使用されていたROM バージョンと等価です。以前のバージョンの `makerom` ツールにおける ROM バージョンという語句の定義が弊社標準の定義と異なっていたため名称統一のため変更されました。以前の ROM スペックファイルとの互換性のため`"RomVersion"` キーワードも別名として使用できます。
> `RomSpeedType` [1TROM|MROM|UNDEFINED] ◎
>   ROM の種類を指定し、対応したアクセススピードへ変更します。`"1TROM"` は ワンタイムPROM、`"MROM"` はマスクROM を指定することになります。ワンタイムPROMの方が遅い設定になるため、ワンタイムPROMの設定であればマスクROMでも動作させることが可能ですが、逆はできません。
>   このパラメータを指定していない場合は `"UNDEFINED"` が指定されているとみなされます。`"UNDEFINED"` はアクセススピードとしてはとしては `"1TROM"` と同様の設定となります。ただし、`"UNDEFINED"` の場合は ROM バイナリ生成時に ROM 内登録データへ警告を意味するフラグがセットされ、最終マスターROMとしての提出ができません。これは、意図しないアクセススピードが設定されたままマスターROMとして出荷されるという人為的ミスを防止するためのものです。このため最終マスター ROM を作成するときは、必ず `"1TROM"` か `"MROM"` のどちらを使用するかを確認し、ROM スペックファイル内で明示的に指定してください。
> `RomSize` [64M|128M|256M|512M|1G|2G|4G] ◎
>   ROM 容量をビット単位で指定します。現状において 64M/128M/256M/512M/1G/2G/4G の文字列の中から選択して下さい。
>   ROM イメージが指定値を超えた場合はエラーまたは警告(`-F` オプション指定時)を出力します。
>   ただし 1G bit 以上を指定した場合は、指定値と使用可能サイズが異なりますのでご注意ください。 (詳細はROM フォーマットバージョンについてを参照)
>   指定なしの場合は RomHeaderTemplate 内に埋め込まれている値 ( 現在のものは "2G" ) が使用されます。
>   NAND アプリにおいては、この指定は無視され、最適な値が自動的に選択されます。
> `RomFootPadding` [TRUE|FALSE] ◎
>   ROM内のプログラム格納領域よりも上位側の未使用領域をデータで埋め、`RomSize` で指定されているROM容量と一致するバイナリを作成したい場合は `TRUE` を指定して下さい。未使用領域へ格納されるデータは `RomSpec` セクションの `Padding` パラメータで指定されている値になります。この機能を有効にするには `RomSize` を指定する必要があります。指定なしの場合は `FALSE` となります。
>   NAND アプリにおいては、必ず `FALSE` を指定してください。
> `RomHeader` [Rom ヘッダのファイル名]
>   ROM イメージのヘッダ部分のイメージファイルの名前です。このファイルは、前項のテンプレートファイルをコピーしたものに ROM スペックファイルなどからの情報を埋め込むことによって生成されます。
>   通常は指定する必要はありません。指定なしの場合はARM9 の常駐モジュールのファイル名の拡張子を外したものに`_header.sbin` を付けたものがデフォルトのファイル名として使用されます。
> `FileName` [FileNameTable ファイル名]
>   ROM ファイルシステムのファイルネームテーブル部分のイメージファイルの名前です。このファイルは、ROM スペックファイルの `RomSpec` の項目より生成されます。通常は指定する必要はありません。指定なしの場合はARM9 の常駐モジュールのファイル名の拡張子を外したものに`_files.sbin` を付けたものがデフォルトのファイル名として使用されます。
> `BannerFile` [バナーファイル名] ◎
>   NITRO 起動時のメニューで表示する、アプリケーションの識別画像情報をまとめたバナーファイルを指定します。
> `ForChina` [TRUE|FALSE]
>   中国版本体へ対応したアプリケーションかどうかを指定します。このプロパティを `TRUE` にした場合のみ、中国版本体で動作するようになります。また、中国版本体の設定メニューで中国語が選択されていることを取得するためには本プロパティを `TRUE` にしておく必要があります。
>   指定なしの場合は `FALSE` となり、代わりに英語の言語コードが取得されます。RomHeaderTemplate 内に埋め込まれている値は使用されないという点に注意してください。
> `ForKorea` [TRUE|FALSE]
>   韓国版本体へ対応したアプリケーションかどうかを指定します。このプロパティを `TRUE` にしても、動作する本体についての制限は特にありません。韓国版本体の設定メニューで韓国語が選択されていることを取得するためには本プロパティを `TRUE` にしておく必要があります。
>   指定なしの場合は `FALSE` となり、代わりに英語の言語コードが取得されます。RomHeaderTemplate 内に埋め込まれている値は使用されないという点に注意してください。
> `PermitLandingTmpJump` [TRUE|FALSE]
>   指示があった場合にのみ `TRUE` を指定してください。デフォルトは `FALSE` です。

Property セクション TWL 専用項目

> `RomHeaderLtd` [Rom ヘッダのテンプレートファイル名] ◎
>   ROM イメージのTWL専用領域ヘッダ部分のテンプレートファイルを指定します。
>   通常は `$(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin` を指定してください。
> `DigestParam` 1024 32 ◎
>   FSライブラリのROMアーカイブの概要で説明されているハッシュチェックテーブルの算出単位を指定します。
>   引数は `1024 32` から変更しないでください。
> `WramMapping` [MAP2_TS_HYB|MAP2_TS_LTD] ◎
>   WRAM のメモリマッピングを指定します。HYBRID ROM では `MAP2_TS_HYB` を、LIMITED ROM では `MAP2_TS_LTD` を指定してください。
>   通常は、`$(MAKEROM_WRAM_MAPPING)` を指定する事でビルドシステムが適切に設定します。
> `CardRegion` [Japan|America|Europe|Australia|EuropeAndAustralia|AmericaAndAustralia|AmericaAndEuropeAndAustralia|China|Korea] ◎
>   ソフトのリージョンを指定します。
>   ソフトのリージョンと本体のリージョンが一致しない場合、 そのソフトは ランチャー上で認識されませんのでご注意ください。
>   またサンプルデモに設定されている`ALL` はデモ専用のものであり、この設定でマスター ROMを提出することはできません。
>   `China` を設定する場合、同時に `ForChina` プロパティを `TRUE` に設定する必要があります。また、`Korea` を設定する場合、同時に `ForKorea` プロパティを `TRUE` に設定する必要があります。
> `CodecMode` [NTR|TWL] ◎
>   TWL 上で動作する際の CODEC の動作モードを指定します。CODEC の動作モードに関しては、TWL サウンド拡張機能の概要を参照してください。CODEC-DS モードで動作させる場合は `NTR` を、CODEC-TWL モードで動作させる場合は `TWL` を指定します。
>   通常は、`$(MAKEROM_CODEC_MODE)` を指定する事でビルドシステムが適切に指定します。
> `WiFiConnectionIcon` [TRUE|FALSE]
>   ランチャー上で、ソフトのバナーと同時に Wi-Fi コネクションアイコンを表示するかどうかを指定します。 ランチャー上でアイコンを表示することで、ユーザの同意を改めて得ることなく、ソフトの起動と同時に Wi-Fi コネクションを開始することができるようになります。
>   また、起動時に Wi-Fi コネクションを開始する場合は、同時に `AgreeEULA` の指定も必要になります。
>   ただし、この指定を行っている場合、本体設定で無線オフモードになっている場合、ランチャーからアプリの起動ができなくなります。 無線通信が必須のアプリケーションのみ、この指定を行うようにしてください。
>   `DSWirelessIcon` と同時に `TRUE` を指定する事はできません。両方指定する必要がある場合は、`WiFiConnectionIcon` の指定を優先してください。
>   デフォルトは `FALSE` です。
> `DSWirelessIcon` [TRUE|FALSE]
>   ランチャー上で、ソフトのバナーと同時に DS ワイヤレスアイコンを表示するかどうかを指定します。 ランチャー上でアイコンを表示することで、ユーザの同意を改めて得ることなく、ソフトの起動と同時に DS ワイヤレスプレイを開始することができるようになります。
>   ただし、この指定を行っている場合、本体設定で無線オフモードになっている場合、ランチャーからアプリの起動ができなくなります。 無線通信が必須のアプリケーションのみ、この指定を行うようにしてください。
>   `WiFiConnectionIcon` と同時に `TRUE` を指定する事はできません。両方指定する必要がある場合は、`WiFiConnectionIcon` の指定を優先してください。
>   デフォルトは `FALSE` です。
> `AgreeEULA` [TRUE|FALSE]
>   利用規約に同意しないとランチャーからソフトを起動できないようにするかどうかを指定します。
>   ソフトを利用する上でインターネットへの接続が必須である場合にのみ、TRUEを指定してください。
>   この指定を行う場合、同時に `WiFiConnectionIcon` の指定も必要になります。
>   なお、インターネットへの接続が必須ではなく、機能の一部としてニンテンドーWi-Fiコネクション等のインターネットを利用するサービスに対応している場合には、FALSEを選択してください。代わりに、インターネットへの接続を試みる前に利用規約への同意がなされていることを確認する仕組みをゲームソフトに実装してください。(利用規約へ同意がなされていることはTWL-DWCライブラリでチェックされます。詳細については、TWL-DWC関数リファレンスマニュアルをご参照ください。)
>   デフォルトは `FALSE` です。
> `PhotoAccess` [Read|ReadWrite]
>   photo領域の写真データにアクセスする場合の種類について指定します。
>   TCL ライブラリを使用してphoto領域にアクセスする場合のみ指定してください。
>   ソフトが写真データを読み込む機能のみを持つ場合は Read を指定し、書き込み及び読み書き機能を持つ場合は ReadWrite を指定してください。

#### AppendProperty セクション (追加付帯情報定義セクション)

NAND アプリを作成する場合にだけ指定する必要があるセクションです。

名称の後に ◎ が付いている項目は、NAND アプリのマスターROM作成時に必ず設定しなければならない項目です。

> `Media` [GameCard|NAND] ◎
>   ソフトがカードアプリなのかNANDアプリなのかを指定します。カードアプリの場合は AppendProperty セクション全体を省略することが可能です。
> `InitialCode` [イニシャルコード]
>   イニシャルコードをアスキー文字4文字で指定します。指定しなかった場合は、ROMヘッダを参照して設定されます。
> `PublicSaveDataSize` [publicセーブデータのサイズ]
>   publicセーブデータのサイズを数値で指定します。単位として、キロバイトを示す `K` を使用してください（例: `2048K`）。指定しなかった場合は `0K` と解釈されます。
>   指定可能な値に関しては、セーブデータサイズ一覧 を参照してください。
> `PrivateSaveDataSize` [privateセーブデータのサイズ]
>   privateセーブデータのサイズを数値で指定します。単位として、キロバイトを示す `K` を使用してください。（例: `2048K`）。指定しなかった場合は `0K` と解釈されます。
>   指定可能な値に関しては、セーブデータサイズ一覧 を参照してください。
> `SubBannerFile` [TRUE|FALSE]
>   サブバナーを利用するかどうかを指定します。

#### Rating セクション (レーティング情報定義セクション)

レーティング審査団体から取得したレーティング値を設定するセクションです。

以下の審査団体のレーティング値を個別に設定できます。 ただし、ソフトのリージョン(`Property`セクションの項目`CardRegion`で指定)に含まれる審査団体のみ設定可能です。

中国にはレーティング審査団体が存在しませんので、`CardRegion` に `China` が設定された場合、各審査団体のレーティング値の設定はできません。中国向けソフトにおいては、Ratingセクションの有無にかかわらず、特別な対応として、すべての審査団体のレーティング値が自動的に `0` に設定されます(SDK 5.3 以降)。

> 項目名 | 対応する審査団体名 | 含まれるリージョン | 設定可能な値とレーティングとの対応
> --- | --- | --- | ---

> `CERO`

> CERO

> 日本(`Japan`)

> `0` : A(全年齢)
> `12` : B(12歳以上)
> `15` : C(15歳以上)
> `17` : D(17歳以上)
> `18` : Z(18歳以上)
> `PENDING` : 審査中

> `ESRB`

> ESRB

> 北米(`America`)

> `3` : EARLY CHILDHOOD (EC, 全年齢)
> `6` : EVELYONE (E, 6歳以上)
> `10` : EVERYONE10+ (E10+, 10歳以上)
> `13` : TEEN (T, 13歳以上)
> `17` : MATURE (M, 17歳以上)
> `PENDING` : 審査中

> `USK`

> USK

> 欧州(`Europe`)
> 欧州と豪州(`EuropeAndAustralia`)

> `0` : 年齢制限なし
> `6` : 6歳以上
> `12` : 12歳以上
> `16` : 16歳以上
> `18` : 青少年には不適切
> `PENDING` : 審査中

> `PEGI_GEN`

> PEGI(一般)

> 欧州(`Europe`)
> 欧州と豪州(`EuropeAndAustralia`)

> `3` : 3歳以上
> `7` : 7歳以上
> `12` : 12歳以上
> `16` : 16歳以上
> `18` : 18歳以上
> `PENDING` : 審査中

> `PEGI_PRT`

> PEGI(ポルトガル)

> 欧州(`Europe`)
> 欧州と豪州(`EuropeAndAustralia`)

> `4` : 4歳以上
> `6` : 6歳以上
> `12` : 12歳以上
> `16` : 16歳以上
> `18` : 18歳以上
> `PENDING` : 審査中

> `PEGI_BBFC`

> PEGI(一般)およびBBFC

> 欧州(`Europe`)
> 欧州と豪州(`EuropeAndAustralia`)

> `3` : 3歳以上
> `4` : U, Uc(4歳以上推奨)
> `7` : 7歳以上
> `8` : PG(8歳以上推奨)
> `12` : 12歳以上
> `15` : 16歳以上
> `16` : 16歳以上
> `18` : 18歳以上
> `PENDING` : 審査中

> `COB`

> COB

> 豪州(`Australia`)
> 欧州と豪州(`EuropeAndAustralia`)

> `0` : G(一般的、年齢が指定されていない)
> `7` : PG(親の指導推奨、年齢が指定されていない)
> `14` : M(成人向け推奨、年齢が指定されていない)
> `15` : MA15+(15歳未満は不適切、15歳未満は親または保護者の同伴が必要)
> `PENDING` : 審査中

> `GRB`

> GRB

> 韓国(`Korea`)

> `0` : 全体利用可
> `12` : 12歳利用可
> `15` : 15歳利用可
> `18` : 青少年利用不可
> `PENDING` : 審査中

> 例外的にレーティングが不要であると判断された場合のみ、以下の項目を設定してください。

> `Unnecessary` [TRUE|FALSE]
>   レーティング取得が不要なアプリであるかどうかを指定します。`TRUE`を設定した場合、各審査団体のレーティング値を設定することはできません。
>   デフォルトは`FALSE`です。

#### RomSpec セクション (ROM イメージ定義セクション)

他のセクションよりも後に記述する必要があります。

RomSpec セクション NITRO / TWL 共通項目

> `Offset [オフセット値]`
>   ROM イメージにおけるファイル(またはデータ)の配置位置のオフセット値を指定します。
>   ROM イメージの領域が重なることを防止するため、設定可能なオフセット値は、その時点で全てのファイル(またはデータ)が設置されている最終位置よりも大きな値でなければなりません。そうでない場合はエラーとなります。
> `OffsetMin [オフセット値]`
>   `Offset` と同じですが、指定されたオフセット値がファイルが設置されている最終位置よりも大きな値でない場合であってもエラーとならずに、指定が無視されます。
> `Segment All`
>   全てのファイルシステム管理用データを設置します。他のファイルに先立ってこの管理データをROM の先頭に配置する必要があります。
> `Padding` [キャラクタコード 0〜255]
>   ROM イメージのアラインメント処理などを行なったときに出来る隙間に代入する値を指定します。
>   0〜255 の値が指定でき、初期値は ROM フォーマット番号が 1 のときには 0、フォーマット番号が 2 以上のときは 255 となっています。
> `Align` [アラインメント値]
>   次に格納されるファイルまたはデータの ROM イメージ上の先頭位置を指定したメモリ境界に一致させます。このときに空いた隙間は `Padding` で指定された値が埋められます。
>   アラインメント値は 2 の累乗である必要があります。
>   `Align` 文は、あくまで一時的にファイルのメモリ境界を操作するためのものですので、その影響範囲はこの記述の直後に置かれるファイルのみとなっています。永続的なメモリ境界の指定を行ないたい場合は `AlignAll` 文をご使用ください。
> `AlignAll` [アラインメント値]
>   この記述以降に格納される全てのファイルまたはデータの ROM イメージ上の先頭位置を指定したメモリ境界に一致させます。このときに空いた隙間は `Padding` で指定された値が埋められます。`
>   Align` と`AlignAll` の両方が有効になっていたときは、Alignで指定された方の値が使用されます。`AlignAll` の初期値は 512 となっています。
>   ファイル配置の境界を 512 未満に設定した場合には、NITRO のソフト媒体である NITRO CARD へのアクセスが 512 バイトブロック単位に限定されていることについて注意する必要があります。
> `HostRoot` [PC 側のルートディレクトリ名]
>   ROM イメージ内に格納するファイルの PC 上の基準ディレクトリです。`HostRoot` は省略することができ、その場合は `"."` (カレントディレクトリ) がデフォルト値として使用されます。
> `Root` [NITRO 側のルートディレクトリ名]
>   ROM イメージ内に格納するファイルの NITRO 上の基準ディレクトリです。これにより `HostRoot` で示したPC 上のディレクトリが `Root` で示した NITRO のディレクトリにマップされます。`Root` は省略することができ、その場合は `"/"` (ルートディレクトリ) がデフォルト値として使用されます。
> `File` [ファイル名 ...]
>   ROM イメージ内に格納するファイルを指定します。指定したファイル名がディレクトリである場合は、そのディレクトリ以下の全てのサブディレクトリ内のファイルが格納されます。ただし `Reject` で指定したパターンに一致したファイル、サブディレクトリは除きます。ファイルの指定にはワイルドカードとして `*` あるいは `?` を使用することができます。`*` は任意の複数の文字に、`?` は任意の文字(1バイト)を表わします。
> `Reject` [ファイル名パターン ...]
>   ROM イメージ内に格納しないファイルの名前です。`makerom` において、`File` 文でディレクトリやワイルドカードをファイル名として指定したときには、その指定名からファイル名を展開して ROM 内に格納するファイル一覧を `makerom` 内部で求めます。このファイル一覧に含めて欲しくないファイル名を `Reject` 定義によって指定することができます。
>   `Reject` 文には空白で区切ることで、複数のファイル名パターンを書くことができ、ワイルドカード(`*` あるいは `?` ) が使用可能です。`Reject`文による指定は、次の`Reject`文か `RomSpec` セクション終了までの間に含まれる以降の `File` 文に対して有効となります。また `Reject` されるファイル名パターンの初期値として `"CVS" "vssver.scc"` および `".?*"` (ピリオドで始まるファイル名)が設定されています。
> `Fixed` [Default | True | False ]
>   nlf ファイルのパラメータを修正するためのもので、この後に設置されるデータの移動可能かどうかのフラグを操作します。通常は使用する必要はありません。初期値は `Default`(設置されるデータの種類に応じた自動設定) になっています。
> `TagType` [Default | Name | Id | None ]
>   nlf ファイルのパラメータを修正するためのもので、この後に設置されるデータのアクセス方法 (自動設定 / ファイル名 / ファイルID / アクセス方法無し) を指定します。通常は使用する必要はありません。初期値は `Default` (設置されるデータの種類に応じた自動設定) になっています。

RomSpec セクション TWL 専用項目

> `DllFile` [アプリが使用する動的モジュール名] [デバッグ情報を含む動的モジュール名] [ARM9/ARM7]
>   ROM イメージ内に格納した動的モジュールファイルの元となるデバッグ情報付きの動的モジュールファイルを指定します。指定した動的モジュールがARM9用かARM7用かを指定する必要があります。
> `Put` [TwlRom|NitroRom]
>   以降の行で指定するファイルを ROM 上に配置する領域を、TWL 専用領域と NITRO 互換領域とで切り替えます。なお、デフォルトは NitroRom となっています。
>   TWL専用領域に配置したファイルはTWL専用ファイルとなり、NITROモード環境での動作時にはROMからの読み出しが不可能となります。

### 変数参照と修飾オプション

ROM スペックファイルの記述において`$([変数名])`という記述により、ファイル外部で定義された変数の値を参照することができます。変数はコマンドラインオプションの `-D`[変数名]=[値] や `-M`[変数リストファイル名]、あるいは環境変数で値を設定することができます。コマンドラインオプションと環境変数で同じ変数が定義された場合は、コマンドラインオプションの定義が優先され、コマンドラインオプションにおいて同一名の変数が定義されたときは、先に定義された値が優先されます。

以下は変数参照の記述例です。

>     RomSpec
>     {
>         Offset     0x00000000
>         Segment    All
>         File       $(FILENAME)
>     }

また変数の値がファイルパスの形式であった場合に、変数名の直後に`:h`,`:t`,`:r`,`:e` という修飾オプションをつけることによって、以下のような値を参照することができます。

> `$(FILE)=C:/home/Twl/readme.txt` の場合：

> `:h` | パスの最後のパス区切り文字以前の部分 | `$(FILE:h)=C:/home/Twl/`
> `:t` | パスの最後のパス区切り文字より後ろの部分 | `$(FILE:t)=readme.txt`
> `:r` | パスのファイル拡張子を除いた部分 | `$(FILE:r)=C:/home/Twl/readme`
> `:e` | パスのファイル拡張子の部分 | `$(FILE:e)=txt`

### その他の書式について

セクション定義で使用される `"RomSpec"` などのキーワードは `"ROMSPEC"` のように全て大文字でも、あるいは `"romspec"` のように全て小文字でも同じものとして動作します。また '#' 以降の記述はコメントとして扱われます。

`File` や `Reject` 文において、複数の項目を指定する場合には空白で項目を区切ります。また `""` (ダブルクォーテーション) で文字列を囲むことで、空白を含むファイル名を指定することができます。

>     #
>     # '#' で始まるとコメント
>     #
>     Arm9
>     {
>        Static      "c:/Program Files/myApps/lib/main.sbin"
>        OverlayDefs "c:/Program Files/myApps/lib/overlaydefs.sbin"
>     }

>     Property
>     {
>        RomSpeedType    1TROM
>        BannerFile      ./etc/default.bnr
>     }

>     ROMSPEC  # 大文字でも OK
>     {
>        Segment  ALL
>        File     boo.dat foo.dat woo.dat
>     }

### ROM フォーマットバージョンについて

新仕様の `1Gbit 以上のサイズの` ROM のサポートのために ROM フォーマットが一部変更され、これらのサイズの ROM イメージにおいて最上位の一定サイズの領域がシステム予約領域となりました。SDK 3.2 以降の `makerom` から、この新しい ROM フォーマットがデフォルトの設定となりました。SDK 3.1 以前の旧フォーマットで ROM イメージを出力したい場合はオプションに `-V1` を指定してください。

新旧のフォーマット間の変更点は以下の通りです。

> | 新 ROM フォーマット | 旧 ROM フォーマット
> --- | --- | ---
> バージョン番号 | `2` | `1`
> Padding の初期値 | `255` | `0`
> `1G bit` ROM の使用可能サイズ | `125.5MBytes = 1004Mbit` | `128.0MBytes = 1024Mbit`
> `2G bit` ROM の使用可能サイズ | `251.0MBytes = 2008Mbit` | `256.0MBytes = 2048Mbit`
> `4G bit` ROM の使用可能サイズ | `501.625MBytes = 4013Mbit` | `512.0MBytes = 4096Mbit`

新ROMフォーマットにおけるシステム予約領域は 255 で埋められます。また、ROM イメージのサイズに関わらず Padding の初期値も 0 から 255 に変更されています。

### 量産機で動作する　ROM の作成に関して

makerom.TWL を用いて作成できる ROM イメージは TWL 開発機上でのみ動作します。TWL 量産機上で動作する ROM の作成には任天堂でのマスタリング作業が必要になりますので、開発者の手元では量産機上での動作確認を行って頂く必要はありません。makerom.TWL によって作成された ROM イメージのままマスター ROM 提出を行ってください。詳細は「マスター ROM 提出手順書」をご参照ください。

また、TWL 量産機では NITRO の ROM に関してもマスタリング済みの物しか動作しないようになっているため、makerom を用いて作成された NITRO 用の ROM イメージを動作させることはできませんので注意してください。

### その他の注意事項

#### マスターROM最後部未使用領域のデータについて

マスターROMの最後部の使用していない領域には、 TWL-SDKのmakeromツールによって自動的に0xFFが埋められます。

#### マスターROM使用禁止領域のデータについて

1Gbit以上のROMには、ROMのメモリマップ後尾にROMコードを格納することができない 使用禁止領域があります。使用禁止領域には、TWL-SDKのmakeromツールによって自動的に0xFFが埋められます。 1Gbit以上のROMでは、使用禁止領域を読み出すと常に0xFFが出力される仕様です。 使用禁止領域のサイズについては、『ゲームカードマニュアル』を参照して下さい。

#### アクセス禁止領域からの読み出しデータ使用について

ゲームカードのアクセス禁止領域を読み出した場合の出力データは不定です。 （TWL-SDKのFS関数を利用して、ゲームカードに配置されたファイルをアクセスする限り、 アクセス禁止領域を読み出すことはありません）。アクセス禁止領域については、 『ゲームカードマニュアル』を参照して下さい。

## 場所

`$TwlSDK/tools/bin/makerom.exe`
`$TwlSDK/tools/bin/makerom.TWL.exe`
`$TwlSDK/tools/bin/rom_header.template.sbin` `$TwlSDK/tools/bin/rom_header.LTD.sbin`

## 参照

`makelcf, makebanner`

## 履歴

2009/12/24 誤記修正。AmericaEuropeAndAustralia → AmericaAndEuropeAndAustralia
2009/11/11 OverlayTable を省略できない条件を追記
2009/09/02 -mオプションに関する説明文を追加
2009/07/27 Ratingセクションの説明に中国向けアプリへの対応についての説明を追記。
2009/07/14 `CardRegion`の説明を追記、韓国のレーティング審査団体の説明を追記。
2009/06/08 TWL専用ファイルの説明へのリンクを追加。
2009/04/13 DigestParamの説明からFSライブラリ概要へのリンクを追加
2009/04/07 PhotoAccess プロパティの説明を追記
2009/03/24 AlignとAlignAllの優先順位に関して記述修正
2009/03/10 `CardRegion`の説明を追記、豪州のレーティング審査団体名変更に伴った修正
2009/02/06 `CardRegion`の説明を追記し、Rating の説明を新たに追加
2009/02/03 `WiFiConnectionIcon` および `AgreeEULA` に説明を追記
2009/01/08 TWL専用ファイルに関する説明を追記
2008/12/16 `TARGET_PLATFORM` のデフォルト値に関する説明修正
2008/12/08 `JpegSign` の説明を削除
2008/10/31 RomSize に関する説明の追記
2008/10/29 `WramMapping` および `CodecMode` の説明を修正
2008/10/22 `JpegSign` に説明を追記
2008/10/22 Property の説明を追記
2008/09/16 開発機/量産機での ROM 動作に関する記述を追加
2008/09/12 makerom.TWL.exe を見出しに加え、項目を大幅に追加
2008/06/04 FixSound、FixSoundDMAのデフォルトをTRUEに変更
2008/03/28 ARM7 の SCFG に関する記述の変更
2007/11/30 ARM7 の SCFG に関する設定を追加
2007/09/27 DllFile の追加
2007/06/06 `-M`オプションについての記述の追加
2007/03/29 新 ROM フォーマットの `2Gbit` ROM の仮仕様が、そのまま最終仕様となったことに対応する記載の修正
2006/10/06 Reject 文の有効範囲についての記述を追加
2006/08/18 ForKorea に関する説明文追加
2005/05/09 ROM フォーマットバージョンのサポート
2005/04/26 用語修正 「1タイムROM」→「ワンタイムPROM」
2005/04/11 ForChina に関する説明文追加
2005/04/05 RomSpeedType へ"UNDEFINED" に関する説明文追加
2005/03/28 RomSpeedType と -W オプションに関する説明文追加
2004/09/22 セクションの出現順に関する説明文追加
2004/07/23 Align/AlignAll に関する説明文追加
2004/06/08 初版作成