2019年10月19日土曜日

XOUTフォーマット 2

つづき

セグメント情報  4 byte 

セグメントとなっているが、Z8001のセグメントとは直接関係していない。
COFFやELFのセクションに当たる。セクションをセグメントに対応させれば同じことなので、
完全に別物というわけでは無いのが紛らわしいところ。

ファイル中に含まれるセグメントの数だけ、次の構造 (x_sg) が並べられ配列になっている。

 x_sg_no (1 byte)

 セグメント番号 0 - 127か255が入る。
 Z80001のセグメントに対応していそうだが、ノンセグメンテッドのコマンドをみても、0 - 3の
 値が割り当てられており、ただの通し番号かも。 
 
 255の場合は、リンカがセグメント番号を割り当てることを示す。
 リンク可能なファイルには、この値が入っている。
 
 x_sg_type (1 byte)
 
 セグメントに含まれるデータのタイプ

 1 - 初期化されないデータ (BSS)  
 2 - スタック
 3 - 実行コード
 4 - 定数  
 5 - 初期値を持つデータ
 6 - コードとデータは混合 保護
 7 - コードとデータは混合 非保護 

 1,2は、ファイルには含まれず、メモリー上にロードされた時点で、領域が確保される。

 3は、実行コード本体。

 4は、関数への引数で渡される文字列など変更されないデータ。

 5は、初期値を持つグローバル変数や文字列。

 6,7はROMへの書き込み用らしい。

 x_sg_len (2 byte : unsigned)
 
 セグメントのサイズ

コード/データ


 ここには、命令コード、定数、初期値を持つデータが、セグメント情報の順番にまとめられている。
 各セグメントの開始位置は、ヘッダ情報から求まる。
 初期化されないデータ (BSS) とスタックは、ここに含まれない。

0 件のコメント:

コメントを投稿