# compstatic.TWL

## 説明

このコマンドは TWL ROM 用のものです。NITRO ROM については `compstatic` を参照してください。

`compstatic.TWL` は、アプリケーションの常駐領域・拡張常駐領域及びオーバーレイ・拡張オーバーレイの ROM イメージを圧縮するためのツールです。 圧縮を行うことにより多くの場合 ROM 容量を節約することができますが、ROM イメージを伸張しながらメモリに展開する必要があるため、 非圧縮の場合と比べてロード処理に要する時間は多くの場合長くなります。

TWL はランチャーの制限により、常駐領域・拡張常駐領域どちらか一方でも ROM イメージが 2.5M バイトを超えるアプリケーションは作成できませんが、 `compstatic.TWL` を用いることで、実質 2.5M バイトを超える常駐領域・拡張常駐領域を持ったアプリケーションを作成することが可能になります。

また、`compstatic.TWL` は、オーバーレイ・拡張オーバーレイの改竄防止用に、各オーバーレイの ROM イメージの ダイジェスト値を常駐領域の ROM イメージに埋め込む機能をあわせ持っています。

TWL-SDK の make 環境を使用している場合は、環境変数 `TWL_COMPRESS` に何らかの値が定義してある場合に ARM9 の常駐領域、拡張常駐領域、オーバーレイ、及び拡張オーバーレイに対する圧縮処理が有効になります。 また、オーバーレイのダイジェスト値の埋め込みは、環境変数に関りなく自動的に有効になります。

## 使用方法

### 起動コマンド

    % compstatic.TWL -a [-d] [-9] [-SHSIZE] [-c] [-C] [-F|-eSUFFIX] [-lFILE] STATICMODULE OVERLAYDEFS [OVERLAYTABLE] LTDSTATICMODULE LTDOVERLAYDEFS [LTDOVERLAYTABLE]

または

    % compstatic.TWL -a [-d] [-9] [-SHSIZE] [-c] [-C] [-F|-eSUFFIX] [-lFILE] -f RESPONSE_FILE

`-a` オプションにより `OVERLAYDEFS/LTDOVERLAYDEFS` で指定されたオーバーレイ/拡張オーバーレイのダイジェスト値が常駐領域に埋め込まれます。 このダイジェスト値は、オーバーレイモジュールの正当性をロード時に確認するために使用されます。 なお、ダイジェスト値を埋め込む領域は事前に確保しておく必要がありますが、デフォルトの LCF テンプレートファイルを使用する限り `makelcf.TWL` ツールによって自動的に必要な領域を確保するリンカスクリプトが生成されます。

`-d` オプションは `compstatic.TWL` のデバッグ用メッセージを出力するためのオプションです。 通常は指定する必要はありません。

`-9` オプションは `STATICMODULE` で指定された常駐領域のファイルを ARM9 のコードと見なし圧縮するためのオプションです。 展開処理は TWL-SDK の crt0.[HYB|LTD].TWL.o と統合されているため、アプリケーション作成者は何も追加作業は必要ありません。

`-S` オプションは `LTDSTATICMODULE` で指定された拡張常駐領域のファイルを圧縮するためのオプションです。 `HSIZE`には、圧縮せずに残しておくヘッダー部分のサイズを指定しますが、通常は領域内を全て圧縮するために `0` を指定して下さい。 展開処理は TWL-SDK の crt0.[HYB|LTD].TWL.o と統合されているため、アプリケーション作成者は何も追加作業は必要ありません。

`-c` オプションは `OVERLAYDEFS` で指定された各オーバーレイファイルを圧縮するためのオプションです。 展開処理は TWL-SDK の FS ライブラリと統合されているため、アプリケーション作成者は何も追加作業は必要ありません。

`-C` オプションは `LTDOVERLAYDEFS` で指定された各拡張オーバーレイファイルを圧縮するためのオプションです。 展開処理は TWL-SDK の FS ライブラリと統合されているため、アプリケーション作成者は何も追加作業は必要ありません。

`-e`, `-F` オプションは処理後のファイル名を制御するためのオプションです。 これらのオプションがない場合は、元のファイル名に拡張子 "`_LZ`" が後置された名前のファイルへ処理結果が出力されます。 この後置子の "`_LZ`" を変更する場合は `-e` オプションの `SUFFIX` に指定します。 `-F` が指定されると、元のファイルへ処理後のファイルが上書きされます。

`-l` オプションは、`-c` または `-C` と共に指定します。後述のリストファイルをパラメータで渡すことにより、圧縮から除外するオーバーレイモジュールを指定することができます。

`-f` オプションは、処理対象ファイルのファイル名をコマンドライン引数で指定する代わりに、 処理対象のファイル名が記録されたファイルを指定するためのオプションです。 ファイル名が記録されたファイルは `RESPONSE_FILE` に指定します。 `RESPONSE_FILE` の内容は `STATICMODULE/OVERLAYDEFS/OVERLAYTABLE/LTDSTATICMODULE/LTDOVERLAYDEFS/LTDOVERLAYTABLE` の実際のファイル名を `'\0'` で終端処理し、順に格納したものとなっています。 この時に指定するファイルは `RESPONSE_FILE` が置かれているディレクトリからの相対パスで指定されているとみなされます。

ARM7 の常駐領域の圧縮は、ARM7 コンポーネントが自動展開に対応していないため、現在使用できません。

## 圧縮指定リストのフォーマット

`-c` または `-C` オプションを指定すると、全ての Overlay モジュールが圧縮されます。下記のフォーマットのファイルを作成することによって、特定のファイルを圧縮から除外することができます。

下記のように、1行に Overlayモジュール と 圧縮指定文字 をカンマで区切って記述します。

    main_overlay_1.TWL.FLX.sbin, E
    main_overlay_2.TWL.FLX.sbin, E
    main_overlay_3.TWL.FLX.sbin, S

Overlayモジュールファイル名 には、実際に `$(BINDIR)` に出力される圧縮前のファイル名を記述します。拡張オーバーレイファイルを指定することもできます。

圧縮指定文字 の意味は、それぞれ以下の通りです。

`圧縮指定文字` | 意味
--- | ---
`S` | `SMART` の意味。`-c` または `-C` のオプションに従い、圧縮をかけます。デフォルトの動作なので、この行は省略することができます。
`E` | `EXCLUSION` の意味。圧縮対象から除外されます。

TWL-SDK の make 環境を使用している場合は、環境変数 TWL_COMPRESS と共に環境変数 COMPSTATIC_SPEC_FILE を定義します。

    TWL_COMPRESS         = TRUE
    COMPSTATIC_SPEC_FILE = FilePath

TWL-SDK 5.4 からは LSF ファイルのパラメータ情報を元に、圧縮指定リストファイルが自動的に生成されるようになりました。(参照 makelcf.TWL)
`COMPSTATIC_SPEC_FILE` の指定がない場合は、自動生成されたファイルが使われます。

## 場所

`$TwlSDK/tools/bin/compstatic.TWL.exe`

## 参照

`makerom.TWL, makelcf.TWL`

## 履歴

2009/05/14 -l オプションの記述追加。それに伴い、「圧縮指定リストのフォーマット」の項目を追加。
2008/11/07 オーバーレイも圧縮可能な事を明記
2008/10/28 -a オプションの説明を加筆修正
2008/09/12 詳細記載
2008/07/09 仮作成