Introduce ROM_SIZE Makefile option
This commit is contained in:
parent
46a88a3d59
commit
eb51ea4550
20
Makefile
20
Makefile
|
@ -59,6 +59,15 @@ ROMALLOCATION_DATA = 0x015000
|
||||||
ROMALLOCATION_LIB = 0x038800
|
ROMALLOCATION_LIB = 0x038800
|
||||||
ROMALLOCATION_GAME = 0x144ee0
|
ROMALLOCATION_GAME = 0x144ee0
|
||||||
|
|
||||||
|
# ROM_SIZE - The desired ROM size in megabytes.
|
||||||
|
#
|
||||||
|
# All versions of the retail ROM are 32MB.
|
||||||
|
#
|
||||||
|
# If this is too low you might get this error from ld:
|
||||||
|
# "final link failed: memory exhausted"
|
||||||
|
|
||||||
|
ROM_SIZE := 32
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
|
|
||||||
# The VERSION constant is used in the source to handle version-specific code.
|
# The VERSION constant is used in the source to handle version-specific code.
|
||||||
|
@ -102,6 +111,8 @@ COMPILER = ido
|
||||||
ROMALLOCATION_DATA = 0x015000
|
ROMALLOCATION_DATA = 0x015000
|
||||||
ROMALLOCATION_LIB = 0x038800
|
ROMALLOCATION_LIB = 0x038800
|
||||||
|
|
||||||
|
ROM_SIZE = 32
|
||||||
|
|
||||||
ifeq ($(ROMID), ntsc-beta)
|
ifeq ($(ROMID), ntsc-beta)
|
||||||
PAL = 0
|
PAL = 0
|
||||||
PIRACYCHECKS = 0
|
PIRACYCHECKS = 0
|
||||||
|
@ -143,7 +154,12 @@ ifeq ($(ROMID), jpn-final)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
DEFINES := VERSION=$(VERSION) MATCHING=$(MATCHING) PAL=$(PAL) PIRACYCHECKS=$(PIRACYCHECKS) _FINALROM=1
|
DEFINES := \
|
||||||
|
VERSION=$(VERSION) \
|
||||||
|
MATCHING=$(MATCHING) \
|
||||||
|
PAL=$(PAL) \
|
||||||
|
PIRACYCHECKS=$(PIRACYCHECKS) \
|
||||||
|
ROM_SIZE=$(ROM_SIZE)
|
||||||
|
|
||||||
C_DEFINES := $(foreach d,$(DEFINES),-D$(d))
|
C_DEFINES := $(foreach d,$(DEFINES),-D$(d))
|
||||||
AS_DEFINES := $(foreach d,$(DEFINES),--defsym $(d)) --defsym _LANGUAGE_ASSEMBLY=1
|
AS_DEFINES := $(foreach d,$(DEFINES),--defsym $(d)) --defsym _LANGUAGE_ASSEMBLY=1
|
||||||
|
@ -519,7 +535,7 @@ build/recomp/%/err.english.cc:
|
||||||
# Link all objects together with ld to make stage1.elf. In this stage, the game,
|
# Link all objects together with ld to make stage1.elf. In this stage, the game,
|
||||||
# lib and data segments are uncompressed and placed past the end of the ROM.
|
# lib and data segments are uncompressed and placed past the end of the ROM.
|
||||||
$(B_DIR)/stage1.elf: $(O_FILES) ld/pd.ld
|
$(B_DIR)/stage1.elf: $(O_FILES) ld/pd.ld
|
||||||
cpp -DROMID=$(ROMID) -DVERSION=$(VERSION) -DROMALLOCATION_DATA=$(ROMALLOCATION_DATA) -DROMALLOCATION_LIB=$(ROMALLOCATION_LIB) -DROMALLOCATION_GAME=$(ROMALLOCATION_GAME) -P ld/pd.ld -o $(B_DIR)/pd.ld
|
cpp -DROMID=$(ROMID) -DVERSION=$(VERSION) -DROMALLOCATION_DATA=$(ROMALLOCATION_DATA) -DROMALLOCATION_LIB=$(ROMALLOCATION_LIB) -DROMALLOCATION_GAME=$(ROMALLOCATION_GAME) -DROM_SIZE=$(ROM_SIZE) -P ld/pd.ld -o $(B_DIR)/pd.ld
|
||||||
$(TOOLCHAIN)-ld --no-check-sections -z muldefs -T $(B_DIR)/pd.ld --print-map -o $@ > $(B_DIR)/pd.map
|
$(TOOLCHAIN)-ld --no-check-sections -z muldefs -T $(B_DIR)/pd.ld --print-map -o $@ > $(B_DIR)/pd.map
|
||||||
|
|
||||||
$(B_DIR)/stage1.bin: $(B_DIR)/stage1.elf
|
$(B_DIR)/stage1.bin: $(B_DIR)/stage1.elf
|
||||||
|
|
|
@ -968,9 +968,6 @@ void alSndpSetPriority(ALSndPlayer *sndp, ALSndId id, u8 priority);
|
||||||
void alSndpSetFXMix(ALSndPlayer *sndp, u8 mix);
|
void alSndpSetFXMix(ALSndPlayer *sndp, u8 mix);
|
||||||
s32 alSndpGetState(ALSndPlayer *sndp);
|
s32 alSndpGetState(ALSndPlayer *sndp);
|
||||||
|
|
||||||
#ifndef _FINALROM
|
|
||||||
void alParseAbiCL(Acmd *cmdList, u32 nbytes);
|
|
||||||
#endif
|
|
||||||
#ifdef _LANGUAGE_C_PLUS_PLUS
|
#ifdef _LANGUAGE_C_PLUS_PLUS
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -75,11 +75,7 @@ typedef struct OSMesgQueue_s {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Events */
|
/* Events */
|
||||||
#ifdef _FINALROM
|
|
||||||
#define OS_NUM_EVENTS 15
|
#define OS_NUM_EVENTS 15
|
||||||
#else
|
|
||||||
#define OS_NUM_EVENTS 23
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define OS_EVENT_SW1 0 /* CPU SW1 interrupt */
|
#define OS_EVENT_SW1 0 /* CPU SW1 interrupt */
|
||||||
#define OS_EVENT_SW2 1 /* CPU SW2 interrupt */
|
#define OS_EVENT_SW2 1 /* CPU SW2 interrupt */
|
||||||
|
@ -96,16 +92,6 @@ typedef struct OSMesgQueue_s {
|
||||||
#define OS_EVENT_FAULT 12 /* CPU fault event: used by rmon */
|
#define OS_EVENT_FAULT 12 /* CPU fault event: used by rmon */
|
||||||
#define OS_EVENT_THREADSTATUS 13 /* CPU thread status: used by rmon */
|
#define OS_EVENT_THREADSTATUS 13 /* CPU thread status: used by rmon */
|
||||||
#define OS_EVENT_PRENMI 14 /* Pre NMI interrupt */
|
#define OS_EVENT_PRENMI 14 /* Pre NMI interrupt */
|
||||||
#ifndef _FINALROM
|
|
||||||
#define OS_EVENT_RDB_READ_DONE 15 /* RDB read ok event: used by rmon */
|
|
||||||
#define OS_EVENT_RDB_LOG_DONE 16 /* read of log data complete */
|
|
||||||
#define OS_EVENT_RDB_DATA_DONE 17 /* read of hostio data complete */
|
|
||||||
#define OS_EVENT_RDB_REQ_RAMROM 18 /* host needs ramrom access */
|
|
||||||
#define OS_EVENT_RDB_FREE_RAMROM 19 /* host is done with ramrom access */
|
|
||||||
#define OS_EVENT_RDB_DBG_DONE 20
|
|
||||||
#define OS_EVENT_RDB_FLUSH_PROF 21
|
|
||||||
#define OS_EVENT_RDB_ACK_PROF 22
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Flags to turn blocking on/off when sending/receiving message */
|
/* Flags to turn blocking on/off when sending/receiving message */
|
||||||
|
|
||||||
|
|
25
ld/pd.ld
25
ld/pd.ld
|
@ -167,7 +167,7 @@ SECTIONS
|
||||||
|
|
||||||
PLACEHOLDER_SEGMENT(libzip, ROMALLOCATION_LIB)
|
PLACEHOLDER_SEGMENT(libzip, ROMALLOCATION_LIB)
|
||||||
|
|
||||||
__rompos = 0x02000000;
|
__rompos = ROM_SIZE * 1024 * 1024;
|
||||||
__rampos = 0x70001050;
|
__rampos = 0x70001050;
|
||||||
|
|
||||||
BEGIN_SEG(lib) SUBALIGN(0x10)
|
BEGIN_SEG(lib) SUBALIGN(0x10)
|
||||||
|
@ -367,7 +367,7 @@ SECTIONS
|
||||||
* -------------------------------------------------------------------------
|
* -------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
__rampos = 0x02000000;
|
__rampos = ROM_SIZE * 1024 * 1024;
|
||||||
|
|
||||||
BEGIN_SEG(textureconfig)
|
BEGIN_SEG(textureconfig)
|
||||||
{
|
{
|
||||||
|
@ -390,14 +390,14 @@ SECTIONS
|
||||||
}
|
}
|
||||||
END_SEG(getitle)
|
END_SEG(getitle)
|
||||||
|
|
||||||
_getitleSegmentStart = 0x02000000;
|
_getitleSegmentStart = ROM_SIZE * 1024 * 1024;
|
||||||
_getitleSegmentEnd = 0x020065d0;
|
_getitleSegmentEnd = _getitleSegmentStart + 0x65d0;
|
||||||
var020043f8 = 0x020043f8;
|
var020043f8 = _getitleSegmentStart + 0x43f8;
|
||||||
var02004468 = 0x02004468;
|
var02004468 = _getitleSegmentStart + 0x4468;
|
||||||
var02004700 = 0x02004700;
|
var02004700 = _getitleSegmentStart + 0x4700;
|
||||||
var02004d28 = 0x02004d28;
|
var02004d28 = _getitleSegmentStart + 0x4d28;
|
||||||
var02004dc8 = 0x02004dc8;
|
var02004dc8 = _getitleSegmentStart + 0x4dc8;
|
||||||
var02005dd0 = 0x02005dd0;
|
var02005dd0 = _getitleSegmentStart + 0x5dd0;
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* fonts
|
* fonts
|
||||||
|
@ -603,12 +603,13 @@ SECTIONS
|
||||||
_accessingpakSegmentRomEnd = 0;
|
_accessingpakSegmentRomEnd = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.fill : AT(__rompos)
|
BEGIN_SEG(fill)
|
||||||
{
|
{
|
||||||
FILL(0xff);
|
FILL(0xff);
|
||||||
. = 0x02000000 - __rompos - 1;
|
. = ROM_SIZE * 1024 * 1024 - __rompos - 1;
|
||||||
BYTE(0xff);
|
BYTE(0xff);
|
||||||
}
|
}
|
||||||
|
END_SEG(fill)
|
||||||
|
|
||||||
/DISCARD/ : {
|
/DISCARD/ : {
|
||||||
* (.MIPS.abiflags);
|
* (.MIPS.abiflags);
|
||||||
|
|
|
@ -50,7 +50,7 @@ void texReset(void)
|
||||||
g_TextureConfigSegment = mempAlloc(len, MEMPOOL_STAGE);
|
g_TextureConfigSegment = mempAlloc(len, MEMPOOL_STAGE);
|
||||||
dmaExec(g_TextureConfigSegment, (u32)&_textureconfigSegmentRomStart, len);
|
dmaExec(g_TextureConfigSegment, (u32)&_textureconfigSegmentRomStart, len);
|
||||||
|
|
||||||
g_TexBase = (u32)g_TextureConfigSegment - 0x02000000;
|
g_TexBase = (u32)g_TextureConfigSegment - ROM_SIZE * 1024 * 1024;
|
||||||
g_TexGdl1 = (Gfx *)(g_TexBase + (u32)g_TcGdl1);
|
g_TexGdl1 = (Gfx *)(g_TexBase + (u32)g_TcGdl1);
|
||||||
g_TexGdl2 = (Gfx *)(g_TexBase + (u32)g_TcGdl2);
|
g_TexGdl2 = (Gfx *)(g_TexBase + (u32)g_TcGdl2);
|
||||||
g_TexGdl3 = (Gfx *)(g_TexBase + (u32)g_TcGdl3);
|
g_TexGdl3 = (Gfx *)(g_TexBase + (u32)g_TcGdl3);
|
||||||
|
@ -72,7 +72,7 @@ void texReset(void)
|
||||||
g_TexGeneralConfigs = (struct textureconfig *)(g_TexBase + (u32)g_TcGeneralConfigs);
|
g_TexGeneralConfigs = (struct textureconfig *)(g_TexBase + (u32)g_TcGeneralConfigs);
|
||||||
g_TexRadarConfigs = (struct textureconfig *)(g_TexBase + (u32)g_TcRadarConfigs);
|
g_TexRadarConfigs = (struct textureconfig *)(g_TexBase + (u32)g_TcRadarConfigs);
|
||||||
|
|
||||||
g_TexNumConfigs = (len - (u32)&g_TcWallhitConfigs + 0x02000000) / sizeof(struct textureconfig);
|
g_TexNumConfigs = (len - (u32)&g_TcWallhitConfigs + ROM_SIZE * 1024 * 1024) / sizeof(struct textureconfig);
|
||||||
g_TexWords = mempAlloc(ALIGN16(g_TexNumConfigs * 4), MEMPOOL_STAGE);
|
g_TexWords = mempAlloc(ALIGN16(g_TexNumConfigs * 4), MEMPOOL_STAGE);
|
||||||
|
|
||||||
for (i = 0; i < g_TexNumConfigs; i++) {
|
for (i = 0; i < g_TexNumConfigs; i++) {
|
||||||
|
|
|
@ -34,7 +34,7 @@ void dmaStart(void *memaddr, u32 romaddr, u32 len, bool priority)
|
||||||
s32 i;
|
s32 i;
|
||||||
|
|
||||||
#if VERSION < VERSION_NTSC_1_0
|
#if VERSION < VERSION_NTSC_1_0
|
||||||
if (romaddr >= 1024 * 1024 * 32) {
|
if (romaddr >= ROM_SIZE * 1024 * 1024) {
|
||||||
crashSetMessage("DMA : Off the end of the rom");
|
crashSetMessage("DMA : Off the end of the rom");
|
||||||
CRASH();
|
CRASH();
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,13 +40,17 @@ void rom_load(char *filename)
|
||||||
void rom_write(char *filename)
|
void rom_write(char *filename)
|
||||||
{
|
{
|
||||||
FILE *fp = fopen(filename, "wb");
|
FILE *fp = fopen(filename, "wb");
|
||||||
|
uint32_t fill_start;
|
||||||
|
uint32_t rom_size;
|
||||||
|
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
fprintf(stderr, "Unable to open \"%s\" for writing\n", filename);
|
fprintf(stderr, "Unable to open \"%s\" for writing\n", filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
fwrite(state.rom, 1024 * 1024 * 32, 1, fp);
|
map_get_segment_rompos("fill", &fill_start, &rom_size);
|
||||||
|
|
||||||
|
fwrite(state.rom, rom_size, 1, fp);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue