1: 2008-11-13 (木) 19:39:21 [6] | 2: 2008-11-13 (木) 21:44:44 [7] | ||
---|---|---|---|
Line 2: | Line 2: | ||
-(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] コンパクト型リロケーション情報。書きつかれたので詳細は後日。 | ||
+ | ---- | ||
+ | -上記以外はすべてリザーブ。 |
(This host) = http://osask.net