633 lines
17 KiB
Plaintext
633 lines
17 KiB
Plaintext
#define VERSION_NTSC_BETA 0
|
|
#define VERSION_NTSC_1_0 1
|
|
#define VERSION_NTSC_FINAL 2
|
|
#define VERSION_PAL_BETA 3
|
|
#define VERSION_PAL_FINAL 4
|
|
#define VERSION_JPN_FINAL 5
|
|
|
|
#if VERSION == VERSION_NTSC_BETA
|
|
#include "gamefiles.ntsc-beta.inc"
|
|
#include "libfiles.ntsc-beta.inc"
|
|
#elif VERSION == VERSION_PAL_FINAL
|
|
#include "gamefiles.pal-final.inc"
|
|
#include "libfiles.pal-final.inc"
|
|
#else
|
|
#include "gamefiles.ntsc-final.inc"
|
|
#include "libfiles.ntsc-final.inc"
|
|
#endif
|
|
|
|
#define BEGIN_SEG(name) \
|
|
_##name##SegmentStart = ADDR(.name); \
|
|
_##name##SegmentRomStart = __rompos; \
|
|
.name __rampos : AT(__rompos)
|
|
|
|
#define END_SEG(name) \
|
|
__rompos += SIZEOF(.name); \
|
|
__rampos = ADDR(.name) + SIZEOF(.name); \
|
|
_##name##SegmentEnd = ADDR(.name) + SIZEOF(.name); \
|
|
_##name##SegmentRomEnd = __rompos; \
|
|
_##name##SegmentLen = _##name##SegmentEnd - _##name##SegmentStart;
|
|
|
|
#define MPSTRINGS(lang) \
|
|
BEGIN_SEG(mpstrings##lang) \
|
|
{ \
|
|
build/ROMID/assets/mpstrings/mpstrings##lang.o (.data); \
|
|
} \
|
|
END_SEG(mpstrings##lang)
|
|
|
|
#define FILE(id, filename, varname) \
|
|
varname = __rompos; \
|
|
.file##id : AT(__rompos) { \
|
|
build/ROMID/assets/files/filename.o (.data); \
|
|
} \
|
|
__rompos += SIZEOF(.file##id)
|
|
|
|
#define FONT(name) \
|
|
BEGIN_SEG(font##name) \
|
|
{ \
|
|
build/ROMID/assets/fonts/name.o (.data); \
|
|
} \
|
|
END_SEG(font##name)
|
|
|
|
/**
|
|
* Placeholder segments are used to mark the locations where zipped content will
|
|
* go. It's really just here so it appears in the linker map which allows
|
|
* packrom to find it. We only care about the start address for this segment,
|
|
* so the romheader object is used as it's nice and short.
|
|
*/
|
|
#define PLACEHOLDER_SEGMENT(name) \
|
|
BEGIN_SEG(name) \
|
|
{ \
|
|
build/ROMID/romheader.o (.data); \
|
|
} \
|
|
END_SEG(name)
|
|
|
|
/******************************************************************************
|
|
* ROM Allocations
|
|
* ----------------------------------------------------------------------------
|
|
* The lib, data and game segments are compressed in the final ROM. To do this,
|
|
* we build them uncompressed here but place them past the end of the ROM, then
|
|
* a later script compresses them and writes them into the ROM.
|
|
*
|
|
* These constants are defining how much space is reserved for the compressed
|
|
* segments. If these segments are edited and grow to a point that their
|
|
* compressed size exceeds the allocation then their allocations will need to be
|
|
* increased.
|
|
*/
|
|
|
|
#if VERSION >= VERSION_PAL_FINAL
|
|
#define ROMALLOCATION_LIB 0x038800
|
|
#define ROMALLOCATION_DATA 0x015000
|
|
#define ROMALLOCATION_GAME 0x13d180
|
|
#else
|
|
#define ROMALLOCATION_LIB 0x038800
|
|
#define ROMALLOCATION_DATA 0x015000
|
|
#define ROMALLOCATION_GAME 0x151980
|
|
#endif
|
|
|
|
OUTPUT_ARCH (mips)
|
|
|
|
SECTIONS
|
|
{
|
|
#if VERSION >= VERSION_PAL_FINAL
|
|
_gamecode = 0x4450;
|
|
_jpndata1 = 0x17fc40;
|
|
_jpndata2 = 0x18b340;
|
|
#else
|
|
_gamecode = 0x4445;
|
|
_jpndata1 = 0x194440;
|
|
_jpndata2 = 0x19fb40;
|
|
#endif
|
|
|
|
#if VERSION >= VERSION_PAL_FINAL
|
|
_val7f116f34 = 0x0339;
|
|
_val7f1183f8 = 0x070a;
|
|
_val7f118a44 = 0x0801;
|
|
_val7f11aa14 = 0x0e4d;
|
|
_val7f11aae4 = 0x0e5b;
|
|
_val7f11c1d0 = 0x128d;
|
|
#elif VERSION >= VERSION_NTSC_FINAL
|
|
_val7f116f34 = 0x0339;
|
|
_val7f1183f8 = 0x070a;
|
|
_val7f118a44 = 0x0801;
|
|
_val7f11aa14 = 0x0e46;
|
|
_val7f11aae4 = 0x0e54;
|
|
_val7f11c1d0 = 0x1286;
|
|
#else
|
|
_val7f116f34 = 0x0336;
|
|
_val7f1183f8 = 0x06fc;
|
|
_val7f118a44 = 0x07e0;
|
|
_val7f11aa14 = 0x0d83;
|
|
_val7f11aae4 = 0x0d91;
|
|
_val7f11c1d0 = 0x11c3;
|
|
#endif
|
|
|
|
osTvType = 0x80000300;
|
|
osRomType = 0x80000304;
|
|
osRomBase = 0x80000308;
|
|
osResetType = 0x8000030c;
|
|
osCicId = 0x80000310;
|
|
osVersion = 0x80000314;
|
|
osMemSize = 0x80000318;
|
|
osAppNMIBuffer = 0x8000031c;
|
|
|
|
var800902e4 = 0x800902e4; /* for ntsc-beta */
|
|
var800902e8 = 0x800902e8; /* for ntsc-beta */
|
|
|
|
var803f50b8 = 0x803f50b8;
|
|
|
|
varbc000c02 = 0xbc000c02; /* for ntsc-beta */
|
|
|
|
/***************************************************************************
|
|
* romheader
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x00000000 - 0x00000040
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
__rompos = 0;
|
|
|
|
BEGIN_SEG(romheader)
|
|
{
|
|
build/ROMID/romheader.o (.data);
|
|
}
|
|
END_SEG(romheader)
|
|
|
|
/***************************************************************************
|
|
* bootloader
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x00000040 - 0x00001000
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
__rompos = 0x40;
|
|
|
|
BEGIN_SEG(bootloader)
|
|
{
|
|
build/ROMID/bootloader.o (.data);
|
|
}
|
|
END_SEG(bootloader)
|
|
|
|
/***************************************************************************
|
|
* preamble
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x00001000 - 0x00001050
|
|
* RAM range: 0x70001000 - 0x70001050
|
|
* -------------------------------------------------------------------------
|
|
* This segment contains the entry function.
|
|
*/
|
|
|
|
BEGIN_SEG(preamble)
|
|
{
|
|
build/ROMID/preamble/preamble.o (.text);
|
|
. = ALIGN(0x30);
|
|
}
|
|
END_SEG(preamble)
|
|
|
|
/**
|
|
/* tlbInit()'s address is 0x70001050, but preamble calls it by 0x80001050
|
|
* due to it not being TLB mapped yet. So we set up this variable to allow
|
|
* this to happen.
|
|
*/
|
|
tlbInitFromPreamble = tlbInit + 0x10000000;
|
|
|
|
/***************************************************************************
|
|
* lib
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x00001000 - 0x00039850 (compressed from 0x3050 onwards)
|
|
* RAM range: 0x70001000 - 0x70059fe0
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
__rompos = 0x00001050;
|
|
|
|
PLACEHOLDER_SEGMENT(libzip)
|
|
|
|
__rompos = 0x02000000;
|
|
__rampos = 0x70001050;
|
|
|
|
BEGIN_SEG(lib) SUBALIGN(16)
|
|
{
|
|
LIBFILES(.text)
|
|
LIBFILES(.rodata)
|
|
}
|
|
END_SEG(lib)
|
|
|
|
/***************************************************************************
|
|
* data
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x00039850 - 0x0004e850 (compressed)
|
|
* RAM range: 0x80059fe0 - 0x8008ae20
|
|
* -------------------------------------------------------------------------
|
|
* For some reason we can't just add 0x10000000 to __rampos, but we can
|
|
* recalculate it so that's what we do.
|
|
*/
|
|
|
|
__savedrompos = __rompos;
|
|
__rompos = _libzipSegmentRomStart + ROMALLOCATION_LIB;
|
|
PLACEHOLDER_SEGMENT(datazip)
|
|
|
|
__rompos = __savedrompos;
|
|
__rampos = 0x80001050 + SIZEOF(.lib);
|
|
|
|
BEGIN_SEG(data)
|
|
{
|
|
build/ROMID/rsp/rspboot.text.o (.data);
|
|
build/ROMID/rsp/gsp.text.o (.data);
|
|
build/ROMID/rsp/asp.text.o (.data);
|
|
LIBFILES(.data)
|
|
GAMEFILES(.data)
|
|
build/ROMID/rsp/gsp.data.o (.data);
|
|
build/ROMID/rsp/asp.data.o (.data);
|
|
}
|
|
END_SEG(data)
|
|
|
|
_datazipSegmentRomEnd = _datazipSegmentRomStart + ROMALLOCATION_DATA;
|
|
|
|
rspbootTextStart = _dataSegmentStart;
|
|
rspbootTextEnd = rspbootTextStart + 0xd0;
|
|
gspTextStart = rspbootTextEnd;
|
|
gspTextEnd = gspTextStart + 0x1420;
|
|
aspTextStart = gspTextEnd;
|
|
aspTextEnd = aspTextStart + 0x1930;
|
|
|
|
gspDataStart = _dataSegmentEnd - 0x800 - 0xb50;
|
|
gspDataEnd = gspDataStart + 0x800;
|
|
aspDataStart = gspDataEnd;
|
|
aspDataEnd = aspDataStart + 0xb50;
|
|
|
|
/***************************************************************************
|
|
* bss
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: N/A
|
|
* RAM range: 0x8008ae20 - 0x800ad1c0
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
BEGIN_SEG(bss)
|
|
{
|
|
LIBFILES(.bss)
|
|
GAMEFILES(.bss)
|
|
}
|
|
END_SEG(bss)
|
|
|
|
/***************************************************************************
|
|
* inflate
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x0004e850 - 0x0004fc40
|
|
* RAM range: 0x70200000 - 0x702013f0
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
__savedrompos = __rompos;
|
|
__rampos = 0x70200000;
|
|
__rompos = _datazipSegmentRomEnd;
|
|
|
|
BEGIN_SEG(inflate)
|
|
{
|
|
build/ROMID/inflate/inflate.o (.text);
|
|
build/ROMID/inflate/inflate.o (.data);
|
|
}
|
|
END_SEG(inflate)
|
|
|
|
/***************************************************************************
|
|
* game
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x0004fc40 - 0x001a15c0 (compressed)
|
|
* RAM range: 0x7f000000 - 0x7f1b99e0
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
PLACEHOLDER_SEGMENT(gamezip)
|
|
__rompos = __savedrompos;
|
|
__rampos = 0x7f000000;
|
|
|
|
BEGIN_SEG(game)
|
|
{
|
|
GAMEFILES(.text)
|
|
GAMEFILES(.rodata)
|
|
}
|
|
END_SEG(game)
|
|
|
|
/***************************************************************************
|
|
* animations
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x001a15c0 - 0x007d0a40
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
__rompos = _inflateSegmentRomEnd + ROMALLOCATION_GAME;
|
|
|
|
BEGIN_SEG(animations)
|
|
{
|
|
build/ROMID/assets/animations.o (.data);
|
|
}
|
|
END_SEG(animations)
|
|
|
|
_animationsTableRomStart = _animationsSegmentRomEnd - 0x38a0;
|
|
_animationsTableRomEnd = _animationsSegmentRomEnd;
|
|
|
|
/***************************************************************************
|
|
* mpconfigs
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x007d0a40 - 0x007d1c20
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
BEGIN_SEG(mpconfigs)
|
|
{
|
|
build/ROMID/mpconfigs.o (.data);
|
|
}
|
|
END_SEG(mpconfigs)
|
|
|
|
/***************************************************************************
|
|
* mpstrings
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x007d1c20 - 0x007e9d20
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
MPSTRINGS(E)
|
|
MPSTRINGS(J)
|
|
MPSTRINGS(P)
|
|
MPSTRINGS(G)
|
|
MPSTRINGS(F)
|
|
MPSTRINGS(S)
|
|
MPSTRINGS(I)
|
|
|
|
/***************************************************************************
|
|
* firingrange
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x007e9d20 - 0x007eb270
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
BEGIN_SEG(firingrange)
|
|
{
|
|
build/ROMID/firingrange.o (.data);
|
|
}
|
|
END_SEG(firingrange)
|
|
|
|
/***************************************************************************
|
|
* textureconfig
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x007eb270 - 0x007ebdc0
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
__rampos = 0x02000000;
|
|
|
|
BEGIN_SEG(textureconfig)
|
|
{
|
|
build/ROMID/assets/textures/config.o (.data);
|
|
}
|
|
END_SEG(textureconfig)
|
|
|
|
/***************************************************************************
|
|
* getitle
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x007ebdc0 - 0x007f2390
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
BEGIN_SEG(getitle)
|
|
{
|
|
build/ROMID/getitle.o (.data);
|
|
}
|
|
END_SEG(getitle)
|
|
|
|
_getitleSegmentStart = 0x02000000;
|
|
_getitleSegmentEnd = 0x020065d0;
|
|
var020043f8 = 0x020043f8;
|
|
var02004468 = 0x02004468;
|
|
var02004700 = 0x02004700;
|
|
var02004d28 = 0x02004d28;
|
|
var02004dc8 = 0x02004dc8;
|
|
var02005dd0 = 0x02005dd0;
|
|
|
|
/***************************************************************************
|
|
* fonts
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x007f2390 - 0x0080a250
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
FONT(bankgothic)
|
|
FONT(zurich)
|
|
FONT(tahoma)
|
|
FONT(numeric)
|
|
FONT(handelgothicsm)
|
|
FONT(handelgothicxs)
|
|
FONT(handelgothicmd)
|
|
FONT(handelgothiclg)
|
|
FONT(ocramd)
|
|
|
|
#if VERSION >= VERSION_NTSC_1_0
|
|
FONT(ocralg)
|
|
#endif
|
|
|
|
/***************************************************************************
|
|
* sfxctl
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x0080a250 - 0x00839dd0
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
BEGIN_SEG(sfxctl)
|
|
{
|
|
build/ROMID/assets/sfx.ctl.o (.data);
|
|
}
|
|
END_SEG(sfxctl)
|
|
|
|
/***************************************************************************
|
|
* sfxtbl
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x00839dd0 - 0x00cfbf30
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
BEGIN_SEG(sfxtbl)
|
|
{
|
|
build/ROMID/assets/sfx.tbl.o (.data);
|
|
}
|
|
END_SEG(sfxtbl)
|
|
|
|
/***************************************************************************
|
|
* seqctl
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x00cfbf30 - 0x00d05f90
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
BEGIN_SEG(seqctl)
|
|
{
|
|
build/ROMID/assets/seq.ctl.o (.data);
|
|
}
|
|
END_SEG(seqctl)
|
|
|
|
/***************************************************************************
|
|
* seqtbl
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x00d05f90 - 0x00e82000
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
BEGIN_SEG(seqtbl)
|
|
{
|
|
build/ROMID/assets/seq.tbl.o (.data);
|
|
}
|
|
END_SEG(seqtbl)
|
|
|
|
/***************************************************************************
|
|
* sequences
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x00e82000 - 0x00ed83a0
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
BEGIN_SEG(sequences)
|
|
{
|
|
build/ROMID/assets/sequences.o (.data);
|
|
}
|
|
END_SEG(sequences)
|
|
|
|
/***************************************************************************
|
|
* files
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x00ed83a0 - 0x01d5ca00
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
. = 0;
|
|
_filesSegmentRomStart = __rompos;
|
|
|
|
#if VERSION == VERSION_JPN_FINAL
|
|
#include "../src/assets/jpn-final/files/list.ld"
|
|
#elif VERSION == VERSION_PAL_FINAL
|
|
#include "../src/assets/pal-final/files/list.ld"
|
|
#elif VERSION == VERSION_PAL_BETA
|
|
#include "../src/assets/pal-beta/files/list.ld"
|
|
#elif VERSION == VERSION_NTSC_FINAL
|
|
#include "../src/assets/ntsc-final/files/list.ld"
|
|
#elif VERSION == VERSION_NTSC_1_0
|
|
#include "../src/assets/ntsc-1.0/files/list.ld"
|
|
#elif VERSION == VERSION_NTSC_BETA
|
|
#include "../src/assets/ntsc-beta/files/list.ld"
|
|
#endif
|
|
|
|
_filesSegmentRomEnd = __rompos;
|
|
|
|
/***************************************************************************
|
|
* filenames
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x01d5ca00 - 0x01d65740
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
__rampos = 0;
|
|
|
|
BEGIN_SEG(filenames)
|
|
{
|
|
build/ROMID/assets/files/list.o (.data);
|
|
build/ROMID/assets/files/list.o (.rodata);
|
|
}
|
|
END_SEG(filenames)
|
|
|
|
/***************************************************************************
|
|
* blank
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x01d65740 - 0x01d65f40
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
* Yes, this segment is blank and it has to exist. The game loads it.
|
|
*/
|
|
|
|
_blankSegmentRomStart = __rompos;
|
|
__rompos += 0x800;
|
|
_blankSegmentRomEnd = __rompos;
|
|
|
|
/***************************************************************************
|
|
* textures
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x01d65f40 - 0x01fffe00
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
__rampos = 0;
|
|
|
|
BEGIN_SEG(texturesdata)
|
|
{
|
|
build/ROMID/assets/texturesdata.o (.data);
|
|
}
|
|
END_SEG(texturesdata)
|
|
|
|
BEGIN_SEG(textureslist)
|
|
{
|
|
build/ROMID/assets/textureslist.o (.data);
|
|
}
|
|
END_SEG(textureslist)
|
|
|
|
/***************************************************************************
|
|
* copyright
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x01ffea20 - 0x01fff550
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
__rampos = 0;
|
|
|
|
BEGIN_SEG(copyright)
|
|
{
|
|
build/ROMID/assets/copyrightZ.o (.data);
|
|
}
|
|
END_SEG(copyright)
|
|
|
|
/***************************************************************************
|
|
* accessingpak
|
|
* -------------------------------------------------------------------------
|
|
* ROM range: 0x01fff550 - 0x01fffe00
|
|
* RAM range: N/A
|
|
* -------------------------------------------------------------------------
|
|
*/
|
|
|
|
#if VERSION >= VERSION_NTSC_1_0
|
|
BEGIN_SEG(accessingpak)
|
|
{
|
|
build/ROMID/assets/accessingpakZ.o (.data);
|
|
}
|
|
END_SEG(accessingpak)
|
|
#else
|
|
_accessingpakSegmentRomStart = 0;
|
|
_accessingpakSegmentRomEnd = 0;
|
|
#endif
|
|
|
|
/DISCARD/ : {
|
|
* (.MIPS.abiflags);
|
|
* (.options);
|
|
* (.gnu.attributes);
|
|
* (.pdr);
|
|
* (.mdebug);
|
|
* (.gptab.bss);
|
|
* (.gptab.data);
|
|
* (.reginfo);
|
|
}
|
|
}
|