Files
ultrasm64-2/include/ld.h

80 lines
2.1 KiB
C
Raw Normal View History

#pragma once
#ifndef USE_EXT_RAM
#define ADDR_OR_ALIGN(addr) (addr)
#else
#define ADDR_OR_ALIGN(addr) ALIGN(0x1000)
#endif
#if defined(VERSION_US) || defined(VERSION_JP)
#define AUDIO_DIR BUILD_DIR/src/audio/us_jp
#elif defined(VERSION_EU)
#define AUDIO_DIR BUILD_DIR/src/audio/eu
#elif defined(VERSION_SH) || defined(VERSION_CN)
#define AUDIO_DIR BUILD_DIR/src/audio/sh
#endif
#define BEGIN_SEG(name, addr) \
_##name##SegmentStart = ADDR(.name); \
_##name##SegmentRomStart = __romPos; \
.name (addr) : AT(__romPos)
#define END_SEG(name) \
_##name##SegmentEnd = ADDR(.name) + SIZEOF(.name); \
_##name##SegmentRomEnd = __romPos + SIZEOF(.name); \
__romPos += SIZEOF(.name);
#define BEGIN_NOLOAD(name) \
_##name##SegmentNoloadStart = ADDR(.name.noload); \
.name.noload (NOLOAD) :
#define END_NOLOAD(name) \
_##name##SegmentNoloadEnd = ADDR(.name.noload) + SIZEOF(.name.noload);
#define MIO0_SEG(name, segAddr) \
BEGIN_SEG(name##_mio0, segAddr) \
{ \
BUILD_DIR/bin/name.mio0.o(.data); \
. = ALIGN(0x10); \
} \
END_SEG(name##_mio0)
#define MIO0_EU_SEG(name, segAddr) \
BEGIN_SEG(name##_mio0, segAddr) \
{ \
BUILD_DIR/bin/eu/name.mio0.o(.data); \
. = ALIGN(0x10); \
} \
END_SEG(name##_mio0)
#define STANDARD_LEVEL(name) \
BEGIN_SEG(name##_segment_7, 0x07000000) \
{ \
BUILD_DIR/levels/name/leveldata.mio0.o(.data); \
. = ALIGN(0x10); \
} \
END_SEG(name##_segment_7) \
BEGIN_SEG(name, 0x0E000000) \
{ \
BUILD_DIR/levels/name/script.o(.data); \
BUILD_DIR/levels/name/geo.o(.data); \
} \
END_SEG(name)
#define STANDARD_OBJECTS(name, segAddr, geoAddr) \
BEGIN_SEG(name##_mio0, segAddr) \
{ \
BUILD_DIR/actors/name.mio0.o(.data); \
. = ALIGN(0x10); \
} \
END_SEG(name##_mio0) \
BEGIN_SEG(name##_geo, geoAddr) \
{ \
BUILD_DIR/actors/name##_geo.o(.data); \
} \
END_SEG(name##_geo)
#define CREATE_LO_HI_PAIR(name, value) \
name##Hi = (value) >> 16; \
name##Lo = (value) & 0xffff;