/*	
 *	srf33.h
 *
 *	srf33オブジェクトファイルの構造
 *
 *	* Sat Sep 13 20:22:00 JST 2003 Naoyuki Sawa
 *	- 新規作成。
 */
#ifndef __SRF33_H__
#define __SRF33_H__

/****************************************************************************
 *	/usr/PIECE/docs/datasheet/EPSON/S5U1C33000C_J.pdf
 *	『S5U1C33000C Manual (S1C33 Family Cコンパイラパッケージ) (Ver.4)』
 *	475ページ〜「Appendix srf33ファイルの構造」より
 ****************************************************************************/

/* ※注意：各フィールド値はビッグエンディアンで格納されています！！ */
/*         80x86やS1C33で扱う場合は、バイトオーダー変換が必要です。 */
#define SRF33_HALF(v)					\
	(((const unsigned char*)&(v))[0] <<  8 |	\
	 ((const unsigned char*)&(v))[1] <<  0)
#define SRF33_WORD(v)					\
	(((const unsigned char*)&(v))[0] << 24 |	\
	 ((const unsigned char*)&(v))[1] << 16 |	\
	 ((const unsigned char*)&(v))[2] <<  8 |	\
	 ((const unsigned char*)&(v))[3] <<  0)

/* srf33制御ヘッダ */
#ifdef _WIN32
#   pragma pack(1)
#endif /*_WIN32*/
struct _SRF33_CONTROL_HEADER {
	unsigned short c_fatt;		/* ファイル情報フラグ */
	unsigned short c_pentry;	/* エントリーアドレス */
	unsigned short c_ver;		/* srf33バージョン情報 */
	unsigned short c_scncnt;	/* セクション情報数 */
	unsigned int c_scnptr;		/* セクション情報チェーン */
	unsigned int c_debptr;		/* デバッグ制御情報チェーン */
}
#ifdef _WIN32
#   pragma pack()
#else /*_WIN32*/
    __attribute__((packed))
#endif /*_WIN32*/
;
typedef struct _SRF33_CONTROL_HEADER SRF33_CONTROL_HEADER;
#define SIZEOF_SRF33_CONTROL_HEADER 16

/* セクション情報 */
#ifdef _WIN32
#   pragma pack(1)
#endif /*_WIN32*/
struct _SRF33_SECTION_INFORMATION {
	unsigned int s_nxptr;		/* 次のセクション情報へのチェーン */
	unsigned short s_scntyp;	/* セクションタイプ */
	unsigned short s_lnktyp;	/* リンク方法 */
	unsigned short s_scnatt;	/* セクション属性 */
	unsigned int s_off;		/* セクションのスタートアドレス */
	unsigned int s_rcptr;		/* リロケーション情報チェーン */
	unsigned int s_rcsiz;		/* リロケーション情報バイトサイズ */
	unsigned int s_exptr;		/* エクスターン情報チェーン */
	unsigned int s_exsiz;		/* エクスターン情報バイトサイズ */
	unsigned int s_excnt;		/* エクスターン情報の個数 */
	unsigned int s_rdptr;		/* 実データへのチェーン */
	unsigned int s_dsiz;		/* 実データバイトサイズ */
	unsigned short s_scnndx;	/* セクションID */
}
#ifdef _WIN32
#   pragma pack()
#else /*_WIN32*/
    __attribute__((packed))
#endif /*_WIN32*/
;
typedef struct _SRF33_SECTION_INFORMATION SRF33_SECTION_INFORMATION;
#define SIZEOF_SRF33_SECTION_INFORMATION 44

/* その他の構造体はまだ使わないので定義していません。 */
/* 必要に応じて追加してください。                     */

#endif /*__SRF33_H__*/
