1: 2008-11-13 (木) 19:39:21 |
2: 2008-11-13 (木) 21:44:44 |
| -(by [[K]], 2008.11.13) | | -(by [[K]], 2008.11.13) |
| *** 註 | | *** 註 |
- | -所詮はOSASK-HB向けなのでまあ暫定的なものです。 | + | -所詮はOSASK-HB向けなのでまあ暫定的なものです。とりあえず2008.11.13時点で最新のabcdw003での仕様を書きました。 |
| *** 基本構造 | | *** 基本構造 |
| -最初の2バイトがシグネチャで、0x47 0x01。 | | -最初の2バイトがシグネチャで、0x47 0x01。 |
| -それ以降はすべてタグ。 | | -それ以降はすべてタグ。 |
- | -数値はすべて[[]]の方法でエンコードされている。 | + | -数値はたいてい[[GUIGUI01/memo01]]の(6)の方法でエンコードされている。以下これをeh4エンコードと呼ぶ。 |
| ---- | | ---- |
- | -(例)helloc1.g01 (いわゆる27バイトの"hello, world\n") | + | -(例)hellok0.g01 (いわゆる27バイトの"hello, world\n") |
- | -47 01 -- シグネチャ | + | 47 01 8D 19 4A 2A FF D5 35 01 24 8D 68 65 6C 6C |
- | -8D 29 4A 89 35 00 00 00 00 E9 1C 00 00 ... | + | 6F 2C 20 77 6F 72 6C 64 0A 44 03 |
| + | |
| + | 47 01 -- シグネチャ。 |
| + | 8D 1_ -- [0D] セクション開始タグ, ネスト内タグ数1。 |
| + | _9 4_A 2A -- [14] イメージ展開タグ, イメージ長 0x2a = 42。つまり21バイト。 |
| + | FF D5 35 01 24 ... 0A 44 03 -- コードセクションの中身。 |
| + | |
| + | *** タグのフォーマット |
| + | -タグ番号はすべてeh4でエンコード。このルールはネスト内のタグでも有効。 |
| + | -[00] : |
| + | --後続パラメータなし。 |
| + | -[01]~[0B] : |
| + | --何らかの数値を指定。後続パラメータは1つで、eh4でエンコード。 |
| + | -[0C]~[0F] : |
| + | --ネスト構造型タグ。タグの中にタグが複数含まれるタグ(0や1つの場合もあるが)。まず一つのパラメータがeh4で記述され、それがネスト内に含まれるタグの数を表す。 |
| + | --ネストの中にネストのタグが含まれることも当然ありうるが、その場合はネスト全体でタグ数1と数える。上記の例を参照のこと。 |
| + | -[10]~[17] : |
| + | --バイナリ記述用タグ。eh4ではないエンコードのビット列などを格納するために使われている。まず一つのパラメータがeh4で記述され、それがこのタグ内に含まれるバイナリの長さを表す。ただしこの長さはバイト単位でもビット単位でもなく、4bit単位である。 |
| + | -[18]~[1f] : |
| + | --書きつかれたので詳細は後日。 |
| + | *** タグのコード(ルート内) |
| + | -[00] 何もしない。NOPなタグ。パディングなどで使いたければ使う。 |
| + | ---- |
| + | -[01] リザーブ。 |
| + | -[02] リザーブ。 |
| + | -[03] rjcフラグとファイルアクセスレベルの指定。bit0がrjcフラグ。bit1-2がファイルアクセスレベル。 |
| + | -[04] スタックサイズの指定(指数部)。 |
| + | --このタグを見つけると自動的に仮数部のデフォルトが1に設定される。したがって仮数部も指定するときは、先にこのタグで指数部を指定してからにする。0で4KB単位(=スタックサイズ=仮数部×4KB)、1で16KB単位、2で64KB単位、3で256KB単位、以下省略。 |
| + | --スタックについて全く指定がない場合、デフォルトの設定が使われる。デフォルトでは、指数部=4KB、仮数部=256。つまり1MB。 |
| + | -[05] スタックサイズの指定(仮数部)。(指定された値+1)が仮数部になる。 |
| + | -[06] リザーブ。 |
| + | -[07] リザーブ。 |
| + | -[08] malloc用領域のサイズ指定(指数部)。指定方法はスタックサイズと同じ。 |
| + | --デフォルトは、指数部=4KB、仮数部=512。つまり2MB。 |
| + | -[09] malloc用領域のサイズ指定(仮数部)。指定方法はスタックサイズと同じ。 |
| + | -[0A] メモリマップトファイル用の領域のサイズ指定(指数部)。指定方法はスタックサイズと同じ。 |
| + | --デフォルトは、指数部=4KB、仮数部=256。つまり1MB。 |
| + | -[0B] メモリマップトファイル用の領域のサイズ指定(仮数部)。指定方法はスタックサイズと同じ。 |
| + | ---- |
| + | -[0C] コメントタグ。このタグ内の記述はすべて無視する。 |
| + | -[0D] セクション記述タグ。下記参照。 |
| + | ---- |
| + | -上記以外はリザーブ。 |
| + | *** タグのコード(セクション記述タグ内) |
| + | -[00] 何もしない、NOPなタグ。パディングなどで使いたければ使う。 |
| + | ---- |
| + | -[01] セクションタイプ指定。 |
| + | --このタグの指定がない場合、最初に記述されたセクションならセクションタイプ0がデフォルト。以前にセクション記述タグがあった場合は、(直前のセクションタイプ+1)がデフォルト。 |
| + | -[02] アライン指定タグ。デフォルトのアラインは4KB。 |
| + | -[04] これはセクションタイプによって意味が異なる。 |
| + | --コードセクション(セクションタイプ0)の場合は、エントリポイントの指定。デフォルトはゼロ。 |
| + | --bssセクション(セクションタイプ2)の場合は、セクションサイズ(仮数部)の指定。 |
| + | ---スタックなどとは違って+1はない。デフォルトでは0。指数部のデフォルトは1バイト。 |
| + | ---- |
| + | -[0C] コメントタグ。このタグ内の記述はすべて無視する。 |
| + | ---- |
| + | -[14] セクションイメージタグ。バイナリデータをそのまま記述。 |
| + | ---- |
| + | -[19] コンパクト型リロケーション情報。書きつかれたので詳細は後日。 |
| + | ---- |
| + | -上記以外はすべてリザーブ。 |