shithub: rgbds

ref: be50f2d302b491ddc0c7abcb4eaa57f8f30dcbcd
dir: /include/asm/mylink.h/

View raw version
#ifndef RGBDS_ASM_LINK_H
#define RGBDS_ASM_LINK_H

/* RGB4 .o format:
 *
 * Header
 * Symbols
 * Sections
 *
 * Header:
 * "RGB4"
 * LONG NumberOfSymbols
 * LONG NumberOfSections
 *
 * Symbols:
 * Symbol[NumberOfSymbols]
 *
 * Symbol:
 * char Name (NULL terminated)
 * char nType
 * if (nType != SYM_IMPORT)
 * {
 *		LONG SectionID
 *		LONG Offset
 * }
 *
 * Sections:
 * Section[NumberOfSections]
 *
 * Section:
 * char SectionName (NULL-terminated)
 * LONG SizeInBytes
 * char Type
 * LONG OrgPosition
 * LONG Bank
 * LONG Alignment
 * if (Type == ROM0 || Type == ROMX)
 * {
 *		char Data[SizeInBytes]
 *		Patches
 * }
 *
 * Patches:
 * LONG NumberOfPatches
 * Patch[NumberOfPatches]
 *
 * Patch:
 * char Filename NULL-terminated
 * LONG LineNo
 * LONG Offset
 * char Type
 * LONG RpnByteSize
 * Rpn[RpnByteSize]
 *
 * Rpn:
 * Operators: 0x00-0x7F
 * Constants: 0x80 0x00000000
 * Symbols  : 0x81 0x00000000
 *
 */

enum {
	RPN_ADD = 0,
	RPN_SUB,
	RPN_MUL,
	RPN_DIV,
	RPN_MOD,
	RPN_UNSUB,

	RPN_OR,
	RPN_AND,
	RPN_XOR,
	RPN_UNNOT,

	RPN_LOGAND,
	RPN_LOGOR,
	RPN_LOGUNNOT,

	RPN_LOGEQ,
	RPN_LOGNE,
	RPN_LOGGT,
	RPN_LOGLT,
	RPN_LOGGE,
	RPN_LOGLE,

	RPN_SHL,
	RPN_SHR,

	RPN_BANK,

	RPN_HRAM,

	/* TODO: This hasn't been removed in order not to break compatibility
	 * with the existing object files, but it will be removed in a future
	 * version. */
	RPN_unused,

	RPN_RANGECHECK,

	RPN_CONST = 0x80,
	RPN_SYM = 0x81
};

enum {
	SECT_WRAM0 = 0,
	SECT_VRAM,
	SECT_ROMX,
	SECT_ROM0,
	SECT_HRAM,
	SECT_WRAMX,
	SECT_SRAM,
	SECT_OAM
};

enum {
	SYM_LOCAL = 0,
	SYM_IMPORT,
	SYM_EXPORT
};

enum {
	PATCH_BYTE = 0,
	PATCH_WORD_L,
	PATCH_LONG_L,
	PATCH_WORD_B,
	PATCH_LONG_B
};
#endif