Introduce ROM_SIZE Makefile option

This commit is contained in:
Ryan Dwyer 2022-10-12 23:06:19 +10:00
parent 46a88a3d59
commit eb51ea4550
7 changed files with 40 additions and 36 deletions

View File

@ -59,6 +59,15 @@ ROMALLOCATION_DATA = 0x015000
ROMALLOCATION_LIB = 0x038800
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.
@ -102,6 +111,8 @@ COMPILER = ido
ROMALLOCATION_DATA = 0x015000
ROMALLOCATION_LIB = 0x038800
ROM_SIZE = 32
ifeq ($(ROMID), ntsc-beta)
PAL = 0
PIRACYCHECKS = 0
@ -143,7 +154,12 @@ ifeq ($(ROMID), jpn-final)
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))
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,
# lib and data segments are uncompressed and placed past the end of the ROM.
$(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
$(B_DIR)/stage1.bin: $(B_DIR)/stage1.elf

View File

@ -968,9 +968,6 @@ void alSndpSetPriority(ALSndPlayer *sndp, ALSndId id, u8 priority);
void alSndpSetFXMix(ALSndPlayer *sndp, u8 mix);
s32 alSndpGetState(ALSndPlayer *sndp);
#ifndef _FINALROM
void alParseAbiCL(Acmd *cmdList, u32 nbytes);
#endif
#ifdef _LANGUAGE_C_PLUS_PLUS
}
#endif

View File

@ -21,7 +21,7 @@
/*---------------------------------------------------------------------*
Copyright (C) 1998 Nintendo. (Originated by SGI)
$RCSfile: os_message.h,v $
$Revision: 1.1 $
$Date: 1998/10/09 08:01:15 $
@ -75,11 +75,7 @@ typedef struct OSMesgQueue_s {
*/
/* Events */
#ifdef _FINALROM
#define OS_NUM_EVENTS 15
#else
#define OS_NUM_EVENTS 23
#endif
#define OS_EVENT_SW1 0 /* CPU SW1 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_THREADSTATUS 13 /* CPU thread status: used by rmon */
#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 */

View File

@ -167,7 +167,7 @@ SECTIONS
PLACEHOLDER_SEGMENT(libzip, ROMALLOCATION_LIB)
__rompos = 0x02000000;
__rompos = ROM_SIZE * 1024 * 1024;
__rampos = 0x70001050;
BEGIN_SEG(lib) SUBALIGN(0x10)
@ -367,7 +367,7 @@ SECTIONS
* -------------------------------------------------------------------------
*/
__rampos = 0x02000000;
__rampos = ROM_SIZE * 1024 * 1024;
BEGIN_SEG(textureconfig)
{
@ -390,14 +390,14 @@ SECTIONS
}
END_SEG(getitle)
_getitleSegmentStart = 0x02000000;
_getitleSegmentEnd = 0x020065d0;
var020043f8 = 0x020043f8;
var02004468 = 0x02004468;
var02004700 = 0x02004700;
var02004d28 = 0x02004d28;
var02004dc8 = 0x02004dc8;
var02005dd0 = 0x02005dd0;
_getitleSegmentStart = ROM_SIZE * 1024 * 1024;
_getitleSegmentEnd = _getitleSegmentStart + 0x65d0;
var020043f8 = _getitleSegmentStart + 0x43f8;
var02004468 = _getitleSegmentStart + 0x4468;
var02004700 = _getitleSegmentStart + 0x4700;
var02004d28 = _getitleSegmentStart + 0x4d28;
var02004dc8 = _getitleSegmentStart + 0x4dc8;
var02005dd0 = _getitleSegmentStart + 0x5dd0;
/***************************************************************************
* fonts
@ -603,12 +603,13 @@ SECTIONS
_accessingpakSegmentRomEnd = 0;
#endif
.fill : AT(__rompos)
BEGIN_SEG(fill)
{
FILL(0xff);
. = 0x02000000 - __rompos - 1;
. = ROM_SIZE * 1024 * 1024 - __rompos - 1;
BYTE(0xff);
}
END_SEG(fill)
/DISCARD/ : {
* (.MIPS.abiflags);

View File

@ -50,7 +50,7 @@ void texReset(void)
g_TextureConfigSegment = mempAlloc(len, MEMPOOL_STAGE);
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_TexGdl2 = (Gfx *)(g_TexBase + (u32)g_TcGdl2);
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_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);
for (i = 0; i < g_TexNumConfigs; i++) {

View File

@ -34,7 +34,7 @@ void dmaStart(void *memaddr, u32 romaddr, u32 len, bool priority)
s32 i;
#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");
CRASH();
}

View File

@ -40,13 +40,17 @@ void rom_load(char *filename)
void rom_write(char *filename)
{
FILE *fp = fopen(filename, "wb");
uint32_t fill_start;
uint32_t rom_size;
if (!fp) {
fprintf(stderr, "Unable to open \"%s\" for writing\n", filename);
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);
}