2019-08-25 00:46:40 -04:00
|
|
|
OUTPUT_ARCH (mips)
|
|
|
|
|
|
2020-11-05 14:22:02 -05:00
|
|
|
#define LINKER /* Removes externs from preprocessed script */
|
2019-08-25 00:46:40 -04:00
|
|
|
#include "segments.h"
|
2020-11-05 14:22:02 -05:00
|
|
|
#undef LINKER
|
2019-08-25 00:46:40 -04:00
|
|
|
|
|
|
|
|
#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) \
|
2021-03-28 20:54:54 -04:00
|
|
|
_##name##SegmentBssStart = ADDR(.name.noload); \
|
2019-08-25 00:46:40 -04:00
|
|
|
.name.noload (NOLOAD) :
|
|
|
|
|
|
|
|
|
|
#define END_NOLOAD(name) \
|
2021-03-28 20:54:54 -04:00
|
|
|
_##name##SegmentBssEnd = ADDR(.name.noload) + SIZEOF(.name.noload); \
|
|
|
|
|
_##name##SegmentBssSize = SIZEOF(.name.noload);
|
2019-08-25 00:46:40 -04:00
|
|
|
|
2020-12-03 20:19:03 -05:00
|
|
|
#define YAY0_SEG(name, segAddr) \
|
|
|
|
|
BEGIN_SEG(name##_yay0, segAddr) \
|
2019-08-25 00:46:40 -04:00
|
|
|
{ \
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/bin/name.szp.o(.data)); \
|
2019-08-25 00:46:40 -04:00
|
|
|
. = ALIGN(0x10); \
|
|
|
|
|
} \
|
2020-12-03 20:19:03 -05:00
|
|
|
END_SEG(name##_yay0)
|
2019-08-25 00:46:40 -04:00
|
|
|
|
2020-12-03 20:19:03 -05:00
|
|
|
#define YAY0_EU_SEG(name, segAddr) \
|
|
|
|
|
BEGIN_SEG(name##_yay0, segAddr) \
|
2019-08-25 00:46:40 -04:00
|
|
|
{ \
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/bin/eu/name.szp.o(.data)); \
|
2019-08-25 00:46:40 -04:00
|
|
|
. = ALIGN(0x10); \
|
|
|
|
|
} \
|
2020-12-03 20:19:03 -05:00
|
|
|
END_SEG(name##_yay0)
|
2019-08-25 00:46:40 -04:00
|
|
|
|
|
|
|
|
#define STANDARD_LEVEL(name) \
|
|
|
|
|
BEGIN_SEG(name##_segment_7, 0x07000000) \
|
|
|
|
|
{ \
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/levels/name/leveldata.szp.o(.data)); \
|
2019-11-03 14:36:27 -05:00
|
|
|
. = ALIGN(0x10); \
|
2019-08-25 00:46:40 -04:00
|
|
|
} \
|
|
|
|
|
END_SEG(name##_segment_7) \
|
|
|
|
|
BEGIN_SEG(name, 0x0E000000) \
|
|
|
|
|
{ \
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/levels/name/script.o(.data)); \
|
|
|
|
|
KEEP(BUILD_DIR/levels/name/geo.o(.data)); \
|
2019-08-25 00:46:40 -04:00
|
|
|
} \
|
|
|
|
|
END_SEG(name)
|
|
|
|
|
|
|
|
|
|
#define STANDARD_OBJECTS(name, segAddr, geoAddr) \
|
2020-12-03 20:19:03 -05:00
|
|
|
BEGIN_SEG(name##_yay0, segAddr) \
|
2019-08-25 00:46:40 -04:00
|
|
|
{ \
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/actors/name.szp.o(.data)); \
|
2019-08-25 00:46:40 -04:00
|
|
|
. = ALIGN(0x10); \
|
|
|
|
|
} \
|
2020-12-03 20:19:03 -05:00
|
|
|
END_SEG(name##_yay0) \
|
2019-11-03 14:36:27 -05:00
|
|
|
BEGIN_SEG(name##_geo, geoAddr) \
|
|
|
|
|
{ \
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/actors/name##_geo.o(.data)); \
|
2019-11-03 14:36:27 -05:00
|
|
|
} \
|
2019-08-25 00:46:40 -04:00
|
|
|
END_SEG(name##_geo)
|
|
|
|
|
|
|
|
|
|
SECTIONS
|
|
|
|
|
{
|
|
|
|
|
__romPos = 0;
|
|
|
|
|
|
|
|
|
|
BEGIN_SEG(boot, 0x04000000)
|
|
|
|
|
{
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/asm/rom_header.o(.text));
|
|
|
|
|
KEEP(BUILD_DIR/asm/boot.o(.text));
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_SEG(boot)
|
|
|
|
|
|
2019-12-01 21:52:53 -05:00
|
|
|
. = 0x80000400;
|
2021-01-03 13:09:20 -05:00
|
|
|
BEGIN_NOLOAD(zbuffer)
|
|
|
|
|
{
|
2019-12-01 21:52:53 -05:00
|
|
|
BUILD_DIR/src/buffers/zbuffer.o(.bss*);
|
|
|
|
|
}
|
2020-11-05 14:22:02 -05:00
|
|
|
END_NOLOAD(zbuffer)
|
2019-12-01 21:52:53 -05:00
|
|
|
|
2021-03-28 20:54:54 -04:00
|
|
|
. = _zbufferSegmentBssEnd;
|
2020-11-05 14:22:02 -05:00
|
|
|
BEGIN_NOLOAD(buffers)
|
|
|
|
|
{
|
|
|
|
|
BUILD_DIR/src/buffers/buffers.o(.bss*);
|
|
|
|
|
BUILD_DIR/src/audio/globals_start.o(.bss*);
|
|
|
|
|
BUILD_DIR/src/audio/synthesis.o(.bss*);
|
|
|
|
|
BUILD_DIR/src/audio/heap.o(.bss*);
|
|
|
|
|
BUILD_DIR/src/audio/load.o(.bss*);
|
|
|
|
|
BUILD_DIR/src/audio/data.o(.bss*);
|
|
|
|
|
BUILD_DIR/src/audio*.o(.bss*);
|
2021-02-07 19:39:18 -05:00
|
|
|
. = ALIGN(0x10);
|
2020-11-05 14:22:02 -05:00
|
|
|
BUILD_DIR/src/buffers/gfx_output_buffer.o(.bss*);
|
|
|
|
|
}
|
|
|
|
|
END_NOLOAD(buffers)
|
|
|
|
|
|
2021-03-28 20:54:54 -04:00
|
|
|
. = _buffersSegmentBssEnd;
|
2021-02-02 17:50:20 -05:00
|
|
|
|
|
|
|
|
#ifdef HVQM
|
|
|
|
|
BEGIN_NOLOAD(hvqmwork)
|
|
|
|
|
{
|
2021-03-27 21:12:27 -04:00
|
|
|
BUILD_DIR/src/buffers/hvqmwork.o(.bss*);
|
2021-02-02 17:50:20 -05:00
|
|
|
}
|
|
|
|
|
END_NOLOAD(hvqmwork)
|
|
|
|
|
BEGIN_NOLOAD(adpcmbuf)
|
|
|
|
|
{
|
2021-03-27 21:12:27 -04:00
|
|
|
BUILD_DIR/src/buffers/adpcmbuf.o(.bss*);
|
2021-02-02 17:50:20 -05:00
|
|
|
}
|
|
|
|
|
END_NOLOAD(adpcmbuf)
|
|
|
|
|
BEGIN_NOLOAD(hvqbuf)
|
|
|
|
|
{
|
2021-03-27 21:12:27 -04:00
|
|
|
BUILD_DIR/src/buffers/hvqbuf.o(.bss*);
|
2021-02-02 17:50:20 -05:00
|
|
|
}
|
|
|
|
|
END_NOLOAD(hvqbuf)
|
|
|
|
|
|
2021-03-28 20:54:54 -04:00
|
|
|
. = _hvqbufSegmentBssEnd;
|
2021-02-02 17:50:20 -05:00
|
|
|
#endif
|
|
|
|
|
|
2020-11-05 14:22:02 -05:00
|
|
|
BEGIN_SEG(main, .) SUBALIGN(16)
|
2019-08-25 00:46:40 -04:00
|
|
|
{
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/asm/entry.o(.text));
|
2020-06-02 12:44:34 -04:00
|
|
|
|
2021-03-28 20:54:54 -04:00
|
|
|
BUILD_DIR/src/game*.o(.text);
|
|
|
|
|
#ifdef HVQM
|
|
|
|
|
BUILD_DIR/src/hvqm*.o(.text);
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef UNF
|
|
|
|
|
BUILD_DIR/src/usb*.o(.text);
|
|
|
|
|
#endif
|
2019-10-05 15:08:05 -04:00
|
|
|
BUILD_DIR/src/audio*.o(.text);
|
2021-04-11 20:49:21 -04:00
|
|
|
#if defined(ISVPRINT) || defined(UNF)
|
|
|
|
|
*/libultra_d.a:*.o(.text);
|
|
|
|
|
#else
|
2020-12-03 20:19:03 -05:00
|
|
|
*/libultra_rom.a:*.o(.text);
|
2021-04-11 20:49:21 -04:00
|
|
|
#endif
|
2021-03-28 20:54:54 -04:00
|
|
|
*/libnustd.a:*.o(.text);
|
|
|
|
|
*/libgcc.a:*.o(.text);
|
|
|
|
|
#ifdef GZIP
|
|
|
|
|
*/libz.a:*.o(.text);
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef HVQM
|
|
|
|
|
*/libhvqm2.a:*.o(.text);
|
|
|
|
|
#endif
|
2020-12-03 20:19:03 -05:00
|
|
|
|
|
|
|
|
BUILD_DIR/lib/rsp.o(.text);
|
|
|
|
|
lib/PR/hvqm/hvqm2sp1.o(.text);
|
2020-02-03 00:51:26 -05:00
|
|
|
|
2019-08-25 00:46:40 -04:00
|
|
|
/* data */
|
2021-03-28 20:54:54 -04:00
|
|
|
BUILD_DIR/src/game*.o(.*data*);
|
|
|
|
|
#ifdef UNF
|
|
|
|
|
BUILD_DIR/src/usb*.o(.*data*);
|
|
|
|
|
#endif
|
2021-03-27 21:12:27 -04:00
|
|
|
BUILD_DIR/src/audio*.o(.*data*);
|
2021-03-28 20:54:54 -04:00
|
|
|
#ifdef GZIP
|
|
|
|
|
*/libz.a:*.o(.*data*);
|
|
|
|
|
#endif
|
2021-04-11 20:49:21 -04:00
|
|
|
#if defined(ISVPRINT) || defined(UNF)
|
|
|
|
|
*/libultra_d.a:*.o(.*data*);
|
|
|
|
|
#else
|
2021-03-27 21:12:27 -04:00
|
|
|
*/libultra_rom.a:*.o(.*data*);
|
2021-04-11 20:49:21 -04:00
|
|
|
#endif
|
2021-03-28 20:54:54 -04:00
|
|
|
#ifdef HVQM
|
|
|
|
|
*/libhvqm2.a:*.o(.*data*);
|
|
|
|
|
#endif
|
2020-02-03 00:51:26 -05:00
|
|
|
|
2020-12-03 20:19:03 -05:00
|
|
|
BUILD_DIR/lib/rsp.o(.data*);
|
2021-01-02 21:19:27 -05:00
|
|
|
#ifdef HVQM
|
2020-12-03 20:19:03 -05:00
|
|
|
lib/PR/hvqm/hvqm2sp1.o(.data*);
|
2021-01-02 21:19:27 -05:00
|
|
|
#endif
|
2020-02-03 00:51:26 -05:00
|
|
|
|
2019-08-25 00:46:40 -04:00
|
|
|
/* rodata */
|
2021-03-28 20:54:54 -04:00
|
|
|
BUILD_DIR/src/game*.o(.rodata*);
|
|
|
|
|
#ifdef UNF
|
|
|
|
|
BUILD_DIR/src/usb*.o(.rodata*);
|
|
|
|
|
#endif
|
2019-10-05 15:08:05 -04:00
|
|
|
BUILD_DIR/src/audio*.o(.rodata*);
|
2021-04-11 20:49:21 -04:00
|
|
|
#if defined(ISVPRINT) || defined(UNF)
|
|
|
|
|
*/libultra_d.a:*.o(.*rodata*);
|
|
|
|
|
#else
|
|
|
|
|
*/libultra_rom.a:*.o(.*rodata*);
|
|
|
|
|
#endif
|
2021-03-28 20:54:54 -04:00
|
|
|
*/libgcc.a:*.o(.rodata*);
|
|
|
|
|
#ifdef GZIP
|
|
|
|
|
*/libz.a:*.o(.rodata*);
|
|
|
|
|
#endif
|
2021-03-27 21:12:27 -04:00
|
|
|
|
2019-08-25 00:46:40 -04:00
|
|
|
BUILD_DIR/lib/rsp.o(.rodata*);
|
2021-01-02 21:19:27 -05:00
|
|
|
#ifdef HVQM
|
2020-12-03 20:19:03 -05:00
|
|
|
lib/PR/hvqm/hvqm2sp1.o(.rodata*);
|
2021-01-02 21:19:27 -05:00
|
|
|
#endif
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_SEG(main)
|
|
|
|
|
BEGIN_NOLOAD(main)
|
|
|
|
|
{
|
2021-03-28 20:54:54 -04:00
|
|
|
BUILD_DIR/src/game*.o(.*bss*);
|
|
|
|
|
#ifdef HVQM
|
|
|
|
|
BUILD_DIR/src/hvqm*.o(.*bss*);
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef UNF
|
|
|
|
|
BUILD_DIR/src/usb*.o(.*bss*);
|
|
|
|
|
#endif
|
|
|
|
|
BUILD_DIR/src/audio*.o(.*bss*);
|
|
|
|
|
#ifdef GZIP
|
|
|
|
|
BUILD_DIR/src/gzip*.o(.bss*);
|
|
|
|
|
#endif
|
2021-03-27 21:12:27 -04:00
|
|
|
BUILD_DIR/src/audio*.o(.*bss*);
|
2021-04-11 20:49:21 -04:00
|
|
|
#if defined(ISVPRINT) || defined(UNF)
|
|
|
|
|
*/libultra_d.a:*.o(COMMON);
|
|
|
|
|
*/libultra_d.a:*.o(.scommon);
|
|
|
|
|
*/libultra_d.a:*.o(.*bss*);
|
|
|
|
|
#else
|
2021-01-02 22:48:12 -05:00
|
|
|
*/libultra_rom.a:*.o(COMMON);
|
|
|
|
|
*/libultra_rom.a:*.o(.scommon);
|
2021-03-27 21:12:27 -04:00
|
|
|
*/libultra_rom.a:*.o(.*bss*);
|
2021-04-11 20:49:21 -04:00
|
|
|
#endif
|
2021-03-28 20:54:54 -04:00
|
|
|
#ifdef HVQM
|
|
|
|
|
*/libhvqm2.a:*.o(.bss*);
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef GZIP
|
|
|
|
|
*/libz.a:*.o(.bss*);
|
|
|
|
|
#endif
|
2020-04-03 14:57:26 -04:00
|
|
|
. = ALIGN(0x8);
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_NOLOAD(main)
|
|
|
|
|
|
2020-11-05 14:22:02 -05:00
|
|
|
/*ASSERT((. <= SEG_ENGINE), "Error: main segment extended into engine.")*/
|
|
|
|
|
|
2021-03-28 20:54:54 -04:00
|
|
|
. = _mainSegmentBssEnd;
|
2019-08-25 00:46:40 -04:00
|
|
|
|
2020-11-05 14:22:02 -05:00
|
|
|
BEGIN_SEG(engine, .)
|
2019-08-25 00:46:40 -04:00
|
|
|
{
|
2021-03-28 20:54:54 -04:00
|
|
|
BUILD_DIR/src/engine*.o(.text);
|
2019-08-25 00:46:40 -04:00
|
|
|
/* data */
|
2021-03-28 20:54:54 -04:00
|
|
|
BUILD_DIR/src/engine*.o(.data*);
|
|
|
|
|
BUILD_DIR/src/engine*.o(.sdata*);
|
2019-08-25 00:46:40 -04:00
|
|
|
/* rodata */
|
2021-03-28 20:54:54 -04:00
|
|
|
BUILD_DIR/src/engine*.o(.rodata*);
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_SEG(engine)
|
|
|
|
|
BEGIN_NOLOAD(engine)
|
|
|
|
|
{
|
2021-03-28 20:54:54 -04:00
|
|
|
BUILD_DIR/src/engine*.o(.bss*);
|
2020-12-03 20:19:03 -05:00
|
|
|
. = ALIGN(0x100);
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_NOLOAD(engine)
|
|
|
|
|
|
2020-11-05 14:22:02 -05:00
|
|
|
/*ASSERT((. <= SEG_FRAMEBUFFERS), "Error: engine segment extended into framebuffers.")*/
|
2019-08-25 00:46:40 -04:00
|
|
|
|
2021-03-28 20:54:54 -04:00
|
|
|
. = _engineSegmentBssEnd;
|
2019-08-25 00:46:40 -04:00
|
|
|
BEGIN_NOLOAD(framebuffers)
|
|
|
|
|
{
|
2019-11-03 14:36:27 -05:00
|
|
|
BUILD_DIR/src/buffers/framebuffers.o(.bss*);
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_NOLOAD(framebuffers)
|
|
|
|
|
|
2020-11-05 14:22:02 -05:00
|
|
|
__mainPoolStart = .;
|
|
|
|
|
__mainPoolSize = RAM_END - .;
|
|
|
|
|
|
2019-08-25 00:46:40 -04:00
|
|
|
__expansionRamStart = 0x80400000;
|
|
|
|
|
ASSERT((. <= __expansionRamStart), "Error: RDRAM expanded into Expansion RAM, despite Expansion RAM not being defined.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BEGIN_SEG(entry, 0x10000000)
|
|
|
|
|
{
|
2019-11-03 14:36:27 -05:00
|
|
|
BUILD_DIR/levels/entry.o(.data);
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_SEG(entry)
|
|
|
|
|
|
2020-12-03 20:19:03 -05:00
|
|
|
/* load YAY0 and level data */
|
|
|
|
|
YAY0_SEG(segment2, 0x02000000)
|
2019-08-25 00:46:40 -04:00
|
|
|
#ifdef VERSION_EU
|
2020-12-03 20:19:03 -05:00
|
|
|
YAY0_EU_SEG(translation_en, 0x19000000)
|
|
|
|
|
YAY0_EU_SEG(translation_fr, 0x19000000)
|
|
|
|
|
YAY0_EU_SEG(translation_de, 0x19000000)
|
2019-08-25 00:46:40 -04:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/* mario actor group */
|
|
|
|
|
STANDARD_OBJECTS(group0, 0x04000000, 0x17000000)
|
|
|
|
|
|
|
|
|
|
/* load the other actor groups */
|
|
|
|
|
STANDARD_OBJECTS(group1, 0x05000000, 0x0C000000)
|
|
|
|
|
STANDARD_OBJECTS(group2, 0x05000000, 0x0C000000)
|
|
|
|
|
STANDARD_OBJECTS(group3, 0x05000000, 0x0C000000)
|
|
|
|
|
STANDARD_OBJECTS(group4, 0x05000000, 0x0C000000)
|
|
|
|
|
STANDARD_OBJECTS(group5, 0x05000000, 0x0C000000)
|
|
|
|
|
STANDARD_OBJECTS(group6, 0x05000000, 0x0C000000)
|
|
|
|
|
STANDARD_OBJECTS(group7, 0x05000000, 0x0C000000)
|
|
|
|
|
STANDARD_OBJECTS(group8, 0x05000000, 0x0C000000)
|
|
|
|
|
STANDARD_OBJECTS(group9, 0x05000000, 0x0C000000)
|
|
|
|
|
STANDARD_OBJECTS(group10, 0x05000000, 0x0C000000)
|
|
|
|
|
STANDARD_OBJECTS(group11, 0x05000000, 0x0C000000)
|
|
|
|
|
STANDARD_OBJECTS(group12, 0x06000000, 0x0D000000)
|
|
|
|
|
STANDARD_OBJECTS(group13, 0x06000000, 0x0D000000)
|
|
|
|
|
STANDARD_OBJECTS(group14, 0x06000000, 0x0D000000)
|
|
|
|
|
STANDARD_OBJECTS(group15, 0x06000000, 0x0D000000)
|
|
|
|
|
STANDARD_OBJECTS(group16, 0x06000000, 0x0D000000)
|
|
|
|
|
STANDARD_OBJECTS(group17, 0x06000000, 0x0D000000)
|
|
|
|
|
|
|
|
|
|
/* load the common actor groups */
|
|
|
|
|
STANDARD_OBJECTS(common0, 0x08000000, 0x0F000000)
|
|
|
|
|
STANDARD_OBJECTS(common1, 0x03000000, 0x16000000)
|
|
|
|
|
|
|
|
|
|
/* use segmented addressing for behaviors */
|
|
|
|
|
BEGIN_SEG(behavior, 0x13000000)
|
|
|
|
|
{
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/data/behavior_data.o(.data));
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_SEG(behavior)
|
|
|
|
|
|
|
|
|
|
/* 0x8016F000 21D7D0-255EC0 [386F0] */
|
|
|
|
|
BEGIN_SEG(goddard, SEG_GODDARD)
|
|
|
|
|
{
|
2019-10-05 15:08:05 -04:00
|
|
|
BUILD_DIR/src/menu*.o(.text);
|
|
|
|
|
BUILD_DIR/src/menu*.o(.data*);
|
|
|
|
|
BUILD_DIR/src/menu*.o(.rodata*);
|
2021-03-28 20:54:54 -04:00
|
|
|
#ifdef GODDARD
|
|
|
|
|
BUILD_DIR/libgoddard.a:*.o(.text);
|
|
|
|
|
/* goddard subsystem data */
|
|
|
|
|
BUILD_DIR/libgoddard.a:gd_main.o(.data*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:draw_objects.o(.data*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:objects.o(.data*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:particles.o(.data*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:dynlist_proc.o(.data*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:debug_utils.o(.data*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:joints.o(.data*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:shape_helper.o(.data*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:renderer.o(.data*);
|
|
|
|
|
/* goddard subsystem rodata */
|
|
|
|
|
BUILD_DIR/libgoddard.a:gd_main.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:gd_memory.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:draw_objects.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:objects.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:skin_movement.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:particles.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:dynlist_proc.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:old_menu.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:debug_utils.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:joints.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:skin.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:gd_math.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:shape_helper.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:renderer.o(.rodata*);
|
|
|
|
|
#endif
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_SEG(goddard)
|
|
|
|
|
BEGIN_NOLOAD(goddard)
|
|
|
|
|
{
|
2019-10-05 15:08:05 -04:00
|
|
|
BUILD_DIR/src/menu*.o(.bss*);
|
2021-03-28 20:54:54 -04:00
|
|
|
#ifdef GODDARD
|
|
|
|
|
BUILD_DIR/libgoddard.a:*.o(.bss*);
|
|
|
|
|
#endif
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_NOLOAD(goddard)
|
|
|
|
|
|
2020-11-05 14:22:02 -05:00
|
|
|
ASSERT((. <= (SEG_POOL_START + POOL_SIZE)), "Error: extended past pool end.")
|
2019-08-25 00:46:40 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 0x268020 0x268020-0 [0] */
|
|
|
|
|
BEGIN_SEG(intro, 0x14000000)
|
|
|
|
|
{
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/levels/intro/script.o(.data));
|
|
|
|
|
KEEP(BUILD_DIR/levels/intro/geo.o(.data));
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_SEG(intro)
|
|
|
|
|
BEGIN_SEG(intro_segment_7, 0x07000000)
|
|
|
|
|
{
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/levels/intro/leveldata.szp.o(.data));
|
2019-11-03 14:36:27 -05:00
|
|
|
. = ALIGN(0x10);
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_SEG(intro_segment_7)
|
|
|
|
|
|
2020-12-03 20:19:03 -05:00
|
|
|
YAY0_SEG(debug_level_select, 0x07000000)
|
|
|
|
|
YAY0_SEG(title_screen_bg, 0x0A000000)
|
2019-08-25 00:46:40 -04:00
|
|
|
|
2021-03-28 20:54:54 -04:00
|
|
|
#ifdef GODDARD
|
|
|
|
|
BEGIN_SEG(gd_dynlists, 0x04000000)
|
|
|
|
|
{
|
|
|
|
|
BUILD_DIR/libgoddard.a:dynlist_test_cube.o(.data);
|
|
|
|
|
BUILD_DIR/libgoddard.a:dynlist_unused.o(.data);
|
|
|
|
|
BUILD_DIR/libgoddard.a:dynlist_mario_face.o(.data);
|
|
|
|
|
BUILD_DIR/libgoddard.a:dynlists_mario_eyes.o(.data);
|
|
|
|
|
BUILD_DIR/libgoddard.a:dynlists_mario_eyebrows_mustache.o(.data);
|
|
|
|
|
BUILD_DIR/libgoddard.a:dynlist_mario_master.o(.data);
|
|
|
|
|
BUILD_DIR/libgoddard.a:anim_mario_mustache_right.o(.data);
|
|
|
|
|
BUILD_DIR/libgoddard.a:anim_mario_mustache_left.o(.data);
|
|
|
|
|
BUILD_DIR/libgoddard.a:anim_mario_lips_1.o(.data);
|
|
|
|
|
BUILD_DIR/libgoddard.a:anim_mario_lips_2.o(.data);
|
|
|
|
|
BUILD_DIR/libgoddard.a:anim_mario_eyebrows_1.o(.data);
|
|
|
|
|
BUILD_DIR/libgoddard.a:anim_group_1.o(.data);
|
|
|
|
|
BUILD_DIR/libgoddard.a:anim_group_2.o(.data);
|
|
|
|
|
BUILD_DIR/libgoddard.a:dynlist_test_cube.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:dynlist_unused.o(.rodata*);
|
|
|
|
|
BUILD_DIR/libgoddard.a:*.o(.data);
|
|
|
|
|
BUILD_DIR/libgoddard.a:*.o(.rodata);
|
|
|
|
|
}
|
|
|
|
|
END_SEG(gd_dynlists)
|
|
|
|
|
#endif
|
|
|
|
|
|
2019-08-25 00:46:40 -04:00
|
|
|
gMainLevels = __romPos;
|
|
|
|
|
|
|
|
|
|
BEGIN_SEG(menu, 0x14000000)
|
|
|
|
|
{
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/levels/menu/script.o(.data));
|
|
|
|
|
KEEP(BUILD_DIR/levels/menu/geo.o(.data));
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_SEG(menu)
|
|
|
|
|
BEGIN_SEG(menu_segment_7, 0x07000000)
|
|
|
|
|
{
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/levels/menu/leveldata.szp.o(.data));
|
2019-11-03 14:36:27 -05:00
|
|
|
. = ALIGN(0x10);
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_SEG(menu_segment_7)
|
|
|
|
|
|
|
|
|
|
BEGIN_SEG(scripts, 0x15000000)
|
|
|
|
|
{
|
2019-11-03 14:36:27 -05:00
|
|
|
BUILD_DIR/levels/scripts.o(.data);
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_SEG(scripts)
|
|
|
|
|
|
2020-12-03 20:19:03 -05:00
|
|
|
YAY0_SEG(water_skybox, 0x0A000000)
|
|
|
|
|
YAY0_SEG(ccm_skybox, 0x0A000000)
|
|
|
|
|
YAY0_SEG(clouds_skybox, 0x0A000000)
|
|
|
|
|
YAY0_SEG(bitfs_skybox, 0x0A000000)
|
|
|
|
|
YAY0_SEG(wdw_skybox, 0x0A000000)
|
|
|
|
|
YAY0_SEG(cloud_floor_skybox, 0x0A000000)
|
|
|
|
|
YAY0_SEG(ssl_skybox, 0x0A000000)
|
|
|
|
|
YAY0_SEG(bbh_skybox, 0x0A000000)
|
|
|
|
|
YAY0_SEG(bidw_skybox, 0x0A000000)
|
|
|
|
|
YAY0_SEG(bits_skybox, 0x0A000000)
|
2019-08-25 00:46:40 -04:00
|
|
|
|
|
|
|
|
// Texture bins
|
2020-12-03 20:19:03 -05:00
|
|
|
YAY0_SEG(fire, 0x09000000)
|
|
|
|
|
YAY0_SEG(spooky, 0x09000000)
|
|
|
|
|
YAY0_SEG(generic, 0x09000000)
|
|
|
|
|
YAY0_SEG(water, 0x09000000)
|
|
|
|
|
YAY0_SEG(sky, 0x09000000)
|
|
|
|
|
YAY0_SEG(snow, 0x09000000)
|
|
|
|
|
YAY0_SEG(cave, 0x09000000)
|
|
|
|
|
YAY0_SEG(machine, 0x09000000)
|
|
|
|
|
YAY0_SEG(mountain, 0x09000000)
|
|
|
|
|
YAY0_SEG(grass, 0x09000000)
|
|
|
|
|
YAY0_SEG(outside, 0x09000000)
|
|
|
|
|
YAY0_SEG(inside, 0x09000000)
|
|
|
|
|
YAY0_SEG(effect, 0x0B000000)
|
2019-08-25 00:46:40 -04:00
|
|
|
|
2019-12-01 21:52:53 -05:00
|
|
|
#define STUB_LEVEL(_0, _1, _2, _3, _4, _5, _6, _7, _8)
|
|
|
|
|
#define DEFINE_LEVEL(_0, _1, _2, folder, _4, _5, _6, _7, _8, _9, _10) STANDARD_LEVEL(folder)
|
|
|
|
|
|
|
|
|
|
#include "levels/level_defines.h"
|
|
|
|
|
|
|
|
|
|
#undef STUB_LEVEL
|
|
|
|
|
#undef DEFINE_LEVEL
|
2019-08-25 00:46:40 -04:00
|
|
|
|
|
|
|
|
/* 4E9FA0-? [?] */
|
|
|
|
|
BEGIN_SEG(assets, __romPos)
|
|
|
|
|
{
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/assets/mario_anim_data.o(.data));
|
|
|
|
|
KEEP(BUILD_DIR/assets/mario_anim_data.o(.rodata));
|
|
|
|
|
KEEP(BUILD_DIR/assets/demo_data.o(.data));
|
|
|
|
|
KEEP(BUILD_DIR/sound/sound_data.o(.data));
|
2019-08-25 00:46:40 -04:00
|
|
|
}
|
|
|
|
|
END_SEG(assets)
|
2021-01-02 21:19:27 -05:00
|
|
|
#ifdef HVQM
|
2020-12-09 14:10:43 -05:00
|
|
|
BEGIN_SEG(capcom, __romPos) SUBALIGN(2)
|
2020-12-08 21:41:03 -05:00
|
|
|
{
|
2021-04-12 18:21:14 -04:00
|
|
|
KEEP(BUILD_DIR/data/capcom.o(.data));
|
2020-12-08 21:41:03 -05:00
|
|
|
}
|
2020-12-09 14:10:43 -05:00
|
|
|
END_SEG(capcom)
|
2020-12-09 16:38:26 -05:00
|
|
|
#endif
|
2019-08-25 00:46:40 -04:00
|
|
|
/* Discard everything not specifically mentioned above. */
|
|
|
|
|
/DISCARD/ :
|
|
|
|
|
{
|
|
|
|
|
*(*);
|
|
|
|
|
}
|
|
|
|
|
}
|