makerom[.TWL]

# makerom

# makerom.TWL

## Description

The `makerom` tool creates NITRO application ROM images. It creates the ROM image, based on the entries in the ROM Specification file.

The `makerom.TWL` tool adds the ability to create ROM images for TWL to the features of the `makerom` tool. There are more parameters that can be specified.

ROM images for TWL that are created with this tool run only on TWL development hardware. The TWL-SDK environment cannot be used to create ROM images that run on retail TWL hardware. (ROM images created for NITRO do not run on retail TWL hardware, either.)

## Using the Tool

### Start Command

#### (1) Normal Start

    % 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]

This links files and creates a ROM image file named `ROMFILE` in accordance with the description in the ROM Specification file (described below) specified by `SPECFILE`. The ROM structure information is output to the file specified by `LISTFILE`.

`ROMFILE` and `LISTFILE` can be omitted. If you omit them, the two files use the same name as that specified by `SPECFILE` but with the extension changed to `.rom` and `.nlf`, respectively. The `-D` option can also be used to define a variable and its values. The value of this variable can be referenced when writing the ROM Specification file.

When using the `-D` option with `makerom.TWL.exe`, specify the `target` parameter in `TARGET_PLATFORM`. Specify `TWL-HYB` for the target parameter to build a TWL-compatible application and `TWL-LTD` to build a TWL-exclusive application. Normally, the build system specifies the appropriate value. If this specification is not made, `'TWL-LTD'` is set by default.

You can define a variable and its value with the `-M` option, as you would with the `-D` option. A text file that consists of the `[NAME=VALUE]` line is received as an argument. This option causes the variables and their values that exceed the command line length restriction to be described in the definition. Due to the way command line arguments are interpreted, when defining values that include whitespace (such as when object filenames are enumerated), it is necessary to delimit values given with the `-D` option using either `"` or `'`. However, values coded inside definition files do not need to be delimited with quotation marks when the `-M` option is used. If quotation marks are applied in this case, they are taken as part of the value itself.

When the `-F` option is specified, a ROM image file is created, even if the ROM file exceeds the size limitation value (see `RomSize` in the Property section).

Specifying the `-A` option determines whether the ROM size restriction value (see `RomSize` in the Property section) is exceeded when adding a digital signature with the `attachsign` command. When the value has been exceeded, an error occurs. However when the above-mentioned `-F` option has been set, processing continues.

Designate the output ROM image format number `FMT_VER` with the `-V` option. This option ensures compatibility with previous versions. The default value is 2. For details, see the description of the ROM format version.

The `-W` option outputs the warnings that are normally suppressed. `-Wrom_speedtype_undefined` appears when `RomSpeedType` in the `Property` section is not explicitly defined and left in the default setting. If the `-Wall` option is used, all warnings are output.

The `-d` option is for outputting messages when debugging `makerom`. This is usually not necessary.

#### (2) The -l Option

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

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

This operates in the same was as the Normal Start method (1), except that a ROM image is not output. The file specified by `SPECFILE` is read, and the ROM structure information is output to `LISTFILE`.

`LISTFILE` can be omitted. If you omit it, the filename is set to the name specified by `SPECFILE`, with the extension replaced by the default extension for each platform. The default extension when creating NITRO ROM images is `.nlf`, and the default extension when creating TWL ROM images is `.tlf`. The `-D` option defines a variable and its values. The value of this variable can be referenced when writing the ROM Specification file.

The `-V` option behaves the same as described above in (1) Normal Start.

#### (3) The -r Option

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

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

A ROM image is constructed from the ROM structure information specified by `LISTFILE` and output as a file with the name specified by `ROMFILE`.

`ROMFILE` can be omitted. If you omit it, the filename is set to the same name as that specified by `SPECFILE`, but with the extension `.rom`.

The `-F`, `-A`, and `-V` options behave in the same way as described above in (1) Normal Start.

### ROM Specification File Format

The contents of NITRO and TWL ROM images are managed using a simple file system. The ROM specification file is a text file that describes the structure of this file system. The file is divided into four sections for NITRO and six sections for TWL. The ROM image section must be included after all other sections. The format for the section definitions have a declaration for the start of the section definition that is followed by section-related parameters enclosed in curly brackets ({}).

Section Definition | Section Definition Format
--- | ---

ARM9 Executable Binary

    Arm9
    {
      [ARM9 parameter description part]
      ....
    }

ARM7 Executable Binary

    Arm7
    {
      [ARM7 parameter description part]
      ....
    }

ARM9 TWL-Exclusive Executable Binary

    Arm9.Ltd
    {
      [ARM9 TWL-exclusive parameter description part]
      ....
    }

ARM7 TWL-Exclusive Executable Binary

    Arm7.Ltd
    {
      [ARM7 TWL-exclusive parameter description part]
      ....
    }

Incidental
information
`(Property)`

    Property
    {
      [Incidental information parameter description part]
      ....
    }

Incidental
information
`(AppendProperty)`

    AppendProperty
    {
      [Additional incidental information parameter description part]
      ....
    }

Rating information
`(Rating)`

    Rating
    {
      [Rating Information Parameter Coding Block]
      ....
    }

ROM image

    RomSpec
    {
      [ROM image parameter description part]
      ....
    }

### Section Parameters

#### ARM9 Section (ARM9 Executable Binary Definition Section)

This configures settings related to the ARM9 executable binaries.

> `Static` [ARM9's Resident Module filename]
>   Name of the Resident Module of the ARM9 executable file.
> `OverlayDefs [Name of the ARM9's Overlay Name file]`
>   Name of the ARM9 `OverlayDefs` file.
> `OverlayTable [ARM9's OverlayTable filename]`
>   Name of the ARM9 `OverlayTable` file. This file is not needed if overlays are not used. If so, the `OverlayTable` definition can be omitted.
> `Nef` [Name of the ARM9's NEF or TEF file (debug information file)]
>   NEF file in which ARM9 debug information is saved.
>   If debugging is run, this `Nef` definition is not needed, and the description can be omitted. Instead of `Nef`, you can use the alternative keyword `Elf`.

#### ARM7 Section (ARM7 Executable File Definitions Section)

This configures settings related to the ARM7 executable binaries.

> `Static` [ARM7 Resident Module filename]
> `OverlayDefs` [Name of the ARM7 Overlay Name file]
> `OverlayTable` [ARM7 OverlayTable filename]
> `NEF` [Name of the ARM7 NEF or TEF file (debugging information file)]
>   Same as the ARM9 parameters.

#### Arm9.Ltd Section (ARM9 TWL-Exclusive Executable Binary Definition Section)

This configures settings related to the ARM9 executable binaries that are only used when an application is run on a TWL.

> `Static` [ARM9 TWL exclusive resident module filename]
> `OverlayDefs` [ARM9 TWL-exclusive Overlay name filename]
> `OverlayTable` [ARM9 TWL-exclusive OverlayTable filename]
>   Same as the ARM9 parameters.

#### Arm7.Ltd Section (ARM7 TWL-Exclusive Executable File Definition Section)

This configures settings related to the ARM7 executable files that are only used when an application is run on a TWL.

> `Static` [ARM7 TWL exclusive resident module filename]
> `OverlayDefs` [ARM7 TWL-exclusive Overlay name filename]
> `OverlayTable` [ARM7 TWL-exclusive OverlayTable filename]
>   Same as the ARM9 parameters.

#### Property Section (Incidental Information Definitions Section)

Items with the symbol "◎" after the name are items that must be configured when creating the master ROM.

Property section (common items for NITRO/TWL)

> `RomHeaderTemplate` [Template file name of ROM header] ◎
>   Template file in the header section of the ROM image. When not specified, the default is `rom_header.template.sbin`, which is in the same directory as `makerom[.TWL].exe`. For the filename, specify the name of the master ROM template file that Nintendo distributes for each game application when the master ROM is created. We recommend that you not perform binary correction on the contents of the ROM header template file. Set the incidental information in each master ROM by describing parameters such as `TitleName` in a ROM Specification file.
> `TitleName` [Title name] ◎
>   Title name. Up to 12 characters of ASCII code. When it is shorter than 12 characters, the unused area is padded with zeros. When not specified, the value in `RomHeaderTemplate` is used.
> `MakerCode` [Manufacturer code] ◎
>   Manufacturer code that was assigned when the licensing agreement was signed with Nintendo. Two ASCII characters are used.
>   When not specified, the value in `RomHeaderTemplate` is used.
> `RemasterVersion` [Remaster version] ◎
>   Remaster version number of the ROM being manufactured for retail products. Hexadecimal notation, decimal notation, or octal notation can be used. When not specified, the value in `RomHeaderTemplate` is used. This is equivalent of the ROM versions used in earlier versions. In previous versions of `makerom`, the definition for the term "ROM version" differed from Nintendo's standard definition, so a change was made so that the names now match. For compatibility with previous `ROM Spec` files, the keyword `RomVersion` can be used as an alternate name.
> `RomSpeedType` [1TROM|MROM|UNDEFINED] ◎
>   Defines the ROM type and selects the proper access speed. `1TROM` specifies one-time PROM, and `MROM` specifies mask ROM. Because the one-time PROM setting is slower, if one-time PROM is selected, it can also work with mask ROM. However, it is not possible to work with PROM if mask ROM is selected.
>   If this parameter is not specified, it is treated as if `UNDEFINED` had been specified. `UNDEFINED` takes the same setting for access speed as `1TROM`. However, when set to `UNDEFINED`, a warning flag is set in the ROM registration data when the ROM binary is created, so it cannot be submitted as the final master ROM. This prevents the mistake of shipping the master ROM with the limited access speed unintentionally set. When creating the final master ROM, be sure to check that you are using either `1TROM` or `MROM`, and expressly specify this in the `ROM Spec` file.
> `RomSize` [64M|128M|256M|512M|1G|2G|4G] ◎
>   ROM size in bits. At present, you can select from 64M, 128M, 256M, 512M, 1G, 2G, or 4G strings.
>   An error or warning is output (when the `-F` option is specified) if the ROM image exceeds the specified value.
>   However, if more than 1 gigabit has been specified, note that the specified value and the usable size differ. (For more information, see About the ROM Format Version.)
>   When no specification is made, the value embedded in `RomHeaderTemplate` is used (currently "2G").
>   In NAND applications, this specification is ignored, and the most appropriate value is chosen automatically.
> `RomFootPadding` [TRUE|FALSE] ◎
>   Specify `TRUE` if you want the unused region above the program storage area in ROM to be filled with data, and create the binary that matches the ROM size specified by `RomSize`. The data stored in the unused region is the value specified with the `Padding` parameter in the `RomSpec` section. To enable this feature, you must specify `RomSize`. If it is not specified, the value is `FALSE`. For NAND applications, always specify `FALSE`.
> `RomHeader` [filename of ROM header]
>   Name of the image file in the header section of the ROM image. This file is generated by embedding the information from `ROM Spec` files in the copy of the template that is explained above.
>   Normally there is no need to specify this. When it is not specified, the filename is made by taking out the file extension from the filename of ARM9 resident module and then adding `header.sbin`.
> `FileName` [FileNameTable filename]
>   Name of the image file in the filename table section of the ROM file system. This file is generated from the `RomSpec` item in the `ROM Spec` file. Normally there is no need to specify this. When not specified, the filename is created by replacing the file extension of the filename of the ARM9 resident module with `_files.sbin`.
> `BannerFile` [banner filename] ◎
>   Banner file, which consists of the application identification image information that is displayed on the NITRO startup menu.
> `ForChina` [TRUE|FALSE]
>   Specifies whether this application supports running on the Chinese version of the system. It can run on the Chinese version of the system only when this property is set to `TRUE`. Also, this property must be set to `TRUE` in order to obtain whether the Chinese language was selected on the settings menu of a Chinese version of the system.
>   Note: If nothing is specified, this is set to `FALSE`, and the English-language code is obtained instead. The value embedded in `RomHeaderTemplate` is not used.
> `ForKorea` [TRUE|FALSE]
>   Specifies whether this application supports running on the Korean version of the system. Setting this property to `TRUE` does not restrict the systems on which the application can run. Also, this property must be set to `TRUE` in order to obtain whether the Korean language was selected on the settings menu of a Korean version of the system.
>   Note: If nothing is specified, this is set to `FALSE`, and the English-language code is obtained instead. The value embedded in `RomHeaderTemplate` is not used.
> `PermitLandingTmpJump` [TRUE|FALSE]
>   Specify `TRUE` only if instructed to do so. The default is `FALSE`.

Property section (TWL-exclusive items)

> `RomHeaderLtd` [Template file name of ROM header] ◎
>   Template file in the header section in the TWL-exclusive region of the ROM image.
>   Normally, you should specify `$(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin`.
> `DigestParam` 1024 32 ◎
>   Specifies the units for calculating the hash-check table, described in the ROM Archive Overview in the FS library. Do not change the arguments from `1024 32`.
> `WramMapping` [MAP2_TS_HYB|MAP2_TS_LTD] ◎
>   WRAM memory mapping. Specify `MAP2_TS_HYB` for a hybrid ROM or `MAP2_TS_LTD` for a limited ROM.
>   Normally, the build system sets this appropriately by specifying `$(MAKEROM_WRAM_MAPPING)`.
> `CardRegion` [Japan|America|Europe|Australia|EuropeAndAustralia] ◎
>   The software's region.
>   Note: If the software region does not match the system region, the launcher does not recognize the software.
>   Although `ALL` has been set for the samples, that is a demo-specific setting and cannot be used when submitting a master ROM.
> `CodecMode` [NTR|TWL] ◎
>   Operating mode for CODEC when the application is run on a TWL. For details on the CODEC operating mode, see TWL Extended Sound Features: Overview. Specify `NTR` to run in CODEC-DS mode or `TWL` to run in CODEC-TWL mode.
>   Normally, the build system sets this appropriately by specifying `$(MAKEROM_CODEC_MODE)`.
> `WiFiConnectionIcon` [TRUE|FALSE]
>   Whether to display the Nintendo Wi-Fi Connection icon when displaying the software's banner in the launcher. By displaying the icon on the launcher, you can start Nintendo Wi-Fi Connection when your application starts up, without having to obtain the user's consent again. In addition, `AgreeEULA` must be specified at the same time if Wi-Fi connection is started at boot time.
>   However, if this specification is made and the wireless feature is turned off under system settings, it is not possible to start the application from the launcher. Make this specification only in the case of applications that require wireless communication.
>   `TRUE` cannot be specified at the same time as `DSWirelessIcon`. If both specifications are required, prioritize the `WiFiConnectionIcon` specification.
>   The default is `FALSE`.
> `DSWirelessIcon` [TRUE|FALSE]
>   Whether to display the DS Wireless icon when displaying the software's banner in the launcher. By displaying the icon on the launcher, you can start DS Multi-Card Play when your application starts up, without having to get the user's consent again. However, if this specification is made and the wireless feature is turned off under system settings, it is not possible to start the application from the launcher. Make this specification only in the case of applications that require wireless communication.
>   `TRUE` cannot be specified at the same time as `WiFiConnectionIcon`. If both specifications are required, prioritize the `WiFiConnectionIcon` specification.
>   The default is `FALSE`.
> `AgreeEULA` [TRUE|FALSE]
>   Whether to prevent software from being started from the launcher if the terms of use have not been accepted. Specify `TRUE` only if an Internet connection is required while using the software.
>   If this specification is made, the `WiFiConnectionIcon` specification must be made at the same time.
>   Specify `FALSE` if an Internet connection is not required, but a service that uses the Internet, such as Nintendo Wi-Fi connection, is being supported as a partial feature. Alternatively, you can implement a mechanism in game software that confirms the user has agreed to the terms of use before attempting connection to the Internet. (Agreement with the terms of use is checked by the TWL-DWC library. For details, see the TWL-DWC function reference manual.)
>   The default is `FALSE`.
> `PhotoAccess` [Read|ReadWrite]
>   Specifies the access type for photo data in the photo region. Specify a value only when using the TCL library to access the photo region. Specify `Read` for applications that only read photo data, and specify `ReadWrite` for applications that read and write photo data.

#### AppendProperty Section (Additional Incidental Information Definition Section)

This section only has to be specified when creating a NAND application.

Items with the symbol ◎ after the name are items that must be configured when creating the master ROM for a NAND application.

> `Media` [GameCard|NAND] ◎
>   Whether the software is a card application or a NAND application. For card applications, the entire `AppendProperty` section can be omitted.
> `InitialCode` [Game Code]
>   Game code as a 4-character ASCII string. If this is not specified, it will be set based on the ROM header.
> `PublicSaveDataSize` [Size of public save data]
>   Size of the public save data. Use `K` (which indicates "kilobytes") for the units (for example, `2048K`). If this is not specified, it is interpreted as `0K`. For details about the values that can be specified, see the Save Data Size List.
> `PrivateSaveDataSize` [Size of private save data]
>   Size of the private save data. Use `K` (which indicates "kilobytes") for the units. (For example, `2048K`). If this is not specified, it is interpreted as `0K`. For details about the values that can be specified, see the Save Data Size List.
> `SubBannerFile` [TRUE|FALSE]
>   Whether to use sub-banners.

#### Rating Section (Rating Information Definition Section)

This section is use to set the rating value obtained from the rating organization.

Rating values from the following rating organizations can be set separately. However, only rating organizations included in the software region (specified using the `CardRegion` item in the `Property` section) can be set.

> Item Name | Name of the Corresponding Rating Organization | Applicable Regions | Correspondence Between Settable Values and Ratings
> --- | --- | --- | ---

> `CERO`

> CERO

> Japan (`Japan`)

> `0`: A (all ages)
> `12`: B (12 years or older)
> `15`: C (15 years or older)
> `17`: D (17 years or older)
> `18`: Z (18 years or older)
> `PENDING`: Under review

> `ESRB`

> ESRB

> North America (`America`)

> `3`: EARLY CHILDHOOD (EC, all ages)
> `6`: EVERYONE (E, 6 years or older)
> `10`: EVERYONE10+ (E10+, 10 years or older)
> `13`: TEEN (T, 13 years or older)
> `17`: MATURE (M, 17 years or older)
> `PENDING`: Under review

> `USK`

> USK

> Europe (`Europe`)
> Europe and Australia (`EuropeAndAustralia`)

> `0`: No age limit
> `6`: 6 years or older
> `12`: 12 years or older
> `16`: 16 years or older
> `18`: Unsuitable for minors
> `PENDING`: Under review

> `PEGI_GEN`

> PEGI (general)

> Europe (`Europe`)
> Europe and Australia (`EuropeAndAustralia`)

> `3`: 3 years or older
> `7`: 7 years or older
> `12`: 12 years or older
> `16`: 16 years or older
> `18`: 18 years or older
> `PENDING`: Under review

> `PEGI_PRT`

> PEGI (Portugal)

> Europe (`Europe`)
> Europe and Australia (`EuropeAndAustralia`)

> `4`: 4 years or older
> `6`: 6 years or older
> `12`: 12 years or older
> `16`: 16 years or older
> `18`: 18 years or older
> `PENDING`: Under review

> `PEGI_BBFC`

> PEGI (General) and BBFC

> Europe (`Europe`)
> Europe and Australia (`EuropeAndAustralia`)

> `3`: 3 years or older
> `4` :U, Uc (recommended for 4 years or older)
> `7`: 7 years or older
> `8`: PG (recommended for 8 years or older)
> `12`: 12 years or older
> `15`: 16 years or older
> `16`: 16 years or older
> `18`: 18 years or older
> `PENDING`: Under review

> `AGCB`

> AGCB

> Australia (`Australia`)
> Europe and Australia (`EuropeAndAustralia`)

> `0`: G (General, no age specified)
> `7`: PG (Parental guidance recommended, no age specified)
> `14`:M (Recommended for adults, no age specified)
> `15`: MA15+ (Unsuitable for 15 years and younger, consent or a parent or guardian required for 15 years or younger)
> `PENDING`: Under review

> Specify the following items only when it has been determined that an exceptional rating is not required.

> `Unnecessary` [TRUE|FALSE]
>   Specifies whether the application needs to be rated. If `TRUE`, rating values from each organization cannot be set.
>   The default is `FALSE`.

#### RomSpec Section (ROM Image Definitions Section)

This section must be defined after other sections.

RomSpec section (common items for NITRO/TWL)

> `Offset` [offset value]
>   Specifies the offset value for the location of the ROM image file (or data). To prevent the overlap of ROM image regions, the offset value must be larger than the final position of all files (or data) at that time. If it is not, then an error will occur.
> `OffsetMin` [offset value]
>   The same as `Offset` except that an error is raised even if the offset value is not larger than the final position of files. (Instead, the setting is ignored.)
> `Segment All`
>   Sets all data for file system management. This management data must precede other files and be placed at the start of ROM.
> `Padding` [Character codes 0 - 255]
>   Specifies the value to assign for padding when aligning ROM images. A value from 0 through 255 can be specified. When the ROM format number is set to 1, the initial value is 0. When the format number is set to 2 or greater, the value is 255.
> `Align` [alignment value]
>   Matches the ROM image starting position of the next file or data-set to store to the specified memory boundary. Empty space is padded with the value specified by `Padding`. The alignment value must be an exponent of 2. Because the `Align` statement is only used to temporarily manipulate the memory boundary of the file, it affects the file placed immediately after this description. To specify a permanent memory boundary, use the `AlignAll` statement.
> `AlignAll` [alignment value]
>   Matches the ROM image starting position of all subsequent files and data sets stored to the specified memory boundary. Empty space is padded with the value specified by `Padding`. If `Align` and `AlignAll` are both enabled, the value specified by `Align` is used. The initial value of `AlignAll` is 512. Note: Access to the NITRO Software NITRO CARD is limited to 512-byte blocks when the boundary for the file allocation is set to less than 512.
> `HostRoot` [Root directory name of PC]
>   This is the standard directory on the PC for the files stored in the ROM image. `HostRoot` can be omitted, in which case the current directory (`.`) is used as the default value.
> `Root` [Root directory name of NITRO]
>   This is the standard directory on NITRO for the files stored in the ROM image. The directory indicated by `HostRoot` on the computer is mapped to the NITRO directory indicated by `Root`. `Root` can be omitted, in which case the root directory (`/`) is used as the default value.
> `File` [filename ...]
>   Specifies files to store in the ROM image. If the specified filename is a directory, all files in all subdirectories are stored in the ROM image. However, any files or subdirectories that match the pattern specified by `Reject` are excluded. You can use the asterisk (`*`) and question mark (`?`) as wildcards when specifying files.*Use an asterisk (`*`) to represent any number of characters, and a question mark (`?`) to represent one (single byte) character.
> `Reject` [filename pattern ...]
>   Do not store the following files in the ROM image. The `makerom` tool internally requests a list of the files to expand and store in ROM. This list is built from the description of directories and files in `File`. Use the `Reject` definition to specify the files that you do not want included on this list.
>   You can use the `*` and `?` wildcards and specify more than one filename pattern in the `Reject` statement. Use spaces to delimit multiple patterns. Specifications with the `Reject` statement are valid for the subsequent `File` statement up to the next `Reject` statement or the point where the `RomSpec` section ends. In addition, `"CVS"`, `"vssver.scc"`, and `".?*"` (filenames that begin with periods) are set as the initial values for filename patterns to be `Reject`ed.
> `Fixed` [Default | True | False]
>   This is for fixing NLF file parameters. It controls the flag that determines whether subsequently placed data can be moved. There is normally no need for this. The initial value is `Default` (auto-configuration according to the type of data installed).
> `TagType` [Default | Name | Id | None]
>   For fixing NLF file parameters. It specifies how to access subsequently placed data (auto-configuration, filename, file ID, no access method). There is normally no need for this. The initial value is `Default` (auto-configuration according to the type of data installed).

RomSpec Section (TWL-Exclusive Items)

> `DllFile` [Name of dynamic module used by the application] [Name of dynamic module that contains debug information] [ARM9/ARM7]
>   Specifies a dynamic module file with debug information that is used as a basis for the dynamic module file stored within the ROM image. You must designate whether the specified dynamic module is for the ARM9 or the ARM7.
> `Put` [TwlRom|NitroRom]
>   Switches whether the file specified on the following line will be placed into the TWL-exclusive region or the NITRO-compatible region of the ROM. The default is `NitroRom`.
>   Files located in the TWL-exclusive region are TWL-exclusive files and cannot be read from ROM when running in a NITRO mode environment.

### Variable References and Modifier Options

You can reference the value of a variable that is defined outside of the ROM Specification file by describing the variable in the following format: `$([variable name])`. The value of variables can be set using command line options like this: `-D`[variable name]=[value] or `-M`[variable list filename]. Alternately, values can be set using environment variables. If the same variable is defined with a command-line option and an environment variable, the command-line option takes priority. If variables with the same name are defined using a command-line option, the first-defined value has priority.

The following is an example of a description for a variable reference.

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

If the variable value is in the form of a file path, you can reference the value by attaching a modifier option immediately after the variable name. The following values can be referenced with the modifier options: `:h`, `:t`, `:r`, and `:e`.

> For `$(FILE)=C:/home/Twl/readme.txt`:

> `:h` | The portion of the path before the final path delimiter. | `$(FILE:h)=C:/home/Twl/`
> `:t` | The portion of the path after the final path delimiter. | `$(FILE:t)=readme.txt`
> `:r` | The path, excluding the file extension. | `$(FILE:r)=C:/home/Twl/readme`
> `:e` | The file extension. | `$(FILE:e)=txt`

### Other Formats

Keywords such as `RomSpec` used in section definitions can be written either in uppercase (`ROMSPEC`) or in lowercase (`romspec`). Anything than follows the pound sign (`#`) is treated as a comment.

To specify multiple items in `File` and `Reject`, separate them with blank spaces. Use double quotes (`" "`) to specify filenames that include blank spaces.

>     #
>     # Lines that begin with # are comments

>     #
>     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  # Uppercase is also OK
>     {
>        Segment  ALL
>        File     boo.dat foo.dat woo.dat
>     }

### About the ROM Format Version

Some ROM formats have been changed to support new ROM specifications of greater than 1 gigabit. For ROM images of this size, a fixed-size region at the top is now reserved by the system. In the `makerom` of SDK version 3.2 and later, this new ROM format is the default configuration. If you want to output a ROM image in the older format of SDK version 3.1 and earlier, you must specify the `-V1` option.

The changes between the new and old formats are shown below.

> | New ROM Format | Old ROM Format
> --- | --- | ---
> Version number | `2` | `1`
> Initial `Padding` value | `255` | `0`
> Usable 1-gigabit ROM size | `125.5 MB = 1004 megabits` | `128.0 MB = 1024 megabits`
> Usable 2-gigabit ROM size | `251.0MBytes = 2008Mbit` | `256.0 MB = 2048 megabits`
> Usable 4-gigabit ROM size | `501.625MB = 4013 megabits` | `512.0MB = 4096 megabits`

The system reserved region in the new ROM format is padded with 255. The initial `Padding` value has also been changed from 0 to 255, regardless of the size of the ROM image.

### Creating ROMs That Run on Production Hardware

ROM images that are created using `makerom.TWL` run only on TWL development hardware. To create ROMs that run on TWL production hardware, Nintendo needs to handle the mastering. Developers do not need to confirm that the ROMs run on production hardware. ROM images created using `makerom.TWL` should be submitted for master ROM submission as is. For more details, see the Master ROM Submission Procedures.

Only NITRO ROMs that have been mastered run on TWL production hardware. NITRO ROM images created using `makerom` do not run.

### Other Notes

#### Data in the Unused Region at the End of Master ROMs

The unused region at the end of master ROMs is automatically filled with `0xFF` by the `makerom` tool in TWL-SDK.

#### Data in Use-Forbidden Regions of Master ROMs

For ROMs whose capacity is 1 gigabit or greater, there is a "use-forbidden" region at the end of the ROM memory map where ROM code cannot be stored. This use-forbidden region is automatically filled with `0xFF` by the `makerom` tool in TWL-SDK. For ROMs whose capacity is 1 gigabit or greater, reading from the use-forbidden region always outputs `0xFF`. For more about the sizes of use-forbidden regions, see the Game Card Manual.

#### Use of Data Read from Access-Forbidden Regions

Output data that is read from access-forbidden regions of Game Cards is undefined. (As long as the FS functions of TWL-SDK are used to access files located on a Game Card, the access-forbidden region is never read from.) For more about access-prohibited regions of memory, see the Game Card Manual.

## Location

`$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`

## See Also

`makelcf`
`makebanner`

## Revision History

2009/06/08 Added link to the explanation of TWL-exclusive files.
2009/04/13 Added a link to the FS Library Overview from the description of `DigestParam`.
2009/04/07 Added a description of the `PhotoAccess` property.
2009/03/24 Revised explanations related to the priority order of `Align` and `AlignAll`.
2009/03/10 Added a description of `CardRegion` and made revisions following a change to the name of the Australian rating organization.
2009/02/06 Added a description of `CardRegion` and a new description of `Rating`.
2009/02/03 Added a description of `WiFiConnectionIcon` and `AgreeEULA`.
2009/01/08 Added a description of TWL-specific files.
2008/12/16 Revised the description of the default value for `TARGET_PLATFORM`.
2008/12/08 Removed the description of `JpegSign`.
2008/10/31 Added a description of `RomSize`.
2008/10/29 Revised the description of `WramMapping` and `CodecMode`.
2008/10/22 Added to the description of `JpegSign`.
2008/10/22 Added a description of `Property`.
2008/09/16 Added descriptions related to running ROMs on development and production hardware.
2008/09/12 Added a significant number of items and a heading for `makerom.TWL.exe`.
2008/06/04 Changed the default value for `FixSound` and `FixSoundDMA` to `TRUE`.
2008/03/28 Changed descriptions related to SCFG for the ARM7.
2007/11/30 Added settings related to SCFG for the ARM7.
2007/09/27 Added `DllFile`.
2007/06/06 Added a description of the `-M` option.
2007/03/29 Revised text in response to the fact that temporary specifications for the new `2Gbit` ROM format have been adopted as the final specifications.
2006/10/06 Added a description of the scope of `Reject` statements.
2006/08/18 Added a description of `ForKorea`.
2005/05/09 Added support for ROM format versions.
2005/04/26 Changed the term "1-time PROM" to "one-time PROM."
2005/04/11 Added a description of `ForChina`.
2005/04/05 Added a description of `"UNDEFINED"` to `RomSpeedType`.
2005/03/28 Added a description of `RomSpeedType` and the `-W` option.
2004/09/22 Explained the order in which section headings appear.
2004/07/23 Added descriptions for `Align` and `AlignAll`.
2004/06/08 Initial version.

CONFIDENTIAL