diff --git a/src/link/assign.c b/src/link/assign.c index 4cabc85e..e9fb67ae 100644 --- a/src/link/assign.c +++ b/src/link/assign.c @@ -398,15 +398,7 @@ AssignSections(void) } else if (i >= BANK_ROMX && i < BANK_ROMX + BANK_COUNT_ROMX) { /* Swappable ROM bank */ BankFree[i]->nOrg = 0x4000; - /* - * Now, this shouldn't really be necessary... but for - * good measure we'll do it anyway. - */ - if (options & OPT_TINY) { - BankFree[i]->nSize = 0; - } else { - BankFree[i]->nSize = 0x4000; - } + BankFree[i]->nSize = 0x4000; } else if (i == BANK_WRAM0) { /* WRAM */ BankFree[i]->nOrg = 0xC000; @@ -463,10 +455,6 @@ AssignSections(void) && pSection->oAssigned == 0) { /* User wants to have a say... */ - if (pSection->Type == SECT_WRAMX && options & OPT_CONTWRAM) { - errx(1, "WRAMX not compatible with -w!"); - } - switch (pSection->Type) { case SECT_WRAM0: case SECT_HRAM: diff --git a/src/link/object.c b/src/link/object.c index 4f4f7421..4ea180ac 100644 --- a/src/link/object.c +++ b/src/link/object.c @@ -156,11 +156,13 @@ obj_ReadRGB0Section(FILE * f) pSection->nBank = -1; pSection->nAlign = 1; - /* does the user want the -s mode? */ - if ((options & OPT_TINY) && (pSection->Type == SECT_ROMX)) { - pSection->Type = SECT_ROM0; + errx(1, "ROMX sections can't be used with option -t."); } + if ((options & OPT_CONTWRAM) && (pSection->Type == SECT_WRAMX)) { + errx(1, "WRAMX sections can't be used with option -w."); + } + if ((pSection->Type == SECT_ROMX) || (pSection->Type == SECT_ROM0)) { /* * These sectiontypes contain data... @@ -306,18 +308,20 @@ obj_ReadRGBSection(FILE * f, enum ObjectFileContents contents) pSection->Type = (enum eSectionType) fgetc(f); pSection->nOrg = readlong(f); pSection->nBank = readlong(f); - + if (contents & CONTAINS_SECTION_ALIGNMENT) { pSection->nAlign = readlong(f); } else { pSection->nAlign = 1; } - /* does the user want the -s mode? */ - if ((options & OPT_TINY) && (pSection->Type == SECT_ROMX)) { - pSection->Type = SECT_ROM0; + errx(1, "ROMX sections can't be used with option -t."); } + if ((options & OPT_CONTWRAM) && (pSection->Type == SECT_WRAMX)) { + errx(1, "WRAMX sections can't be used with option -w."); + } + if ((pSection->Type == SECT_ROMX) || (pSection->Type == SECT_ROM0)) { /* * These sectiontypes contain data... diff --git a/src/link/rgblink.1 b/src/link/rgblink.1 index 227e2818..6257ebeb 100644 --- a/src/link/rgblink.1 +++ b/src/link/rgblink.1 @@ -29,6 +29,12 @@ If your ROM will only be 32KiB, you can use the .Fl t option to override this. .Pp +Similarly, WRAM0 sections are placed in the first 4KiB of WRAM bank 0 and WRAMX +sections are placed in any bank except bank 0. +If your ROM is designed for DMG, you can use the +.Fl w +option to override this. +.Pp The arguments are as follows: .Bl -tag -width Ds .It Fl m Ar mapfile @@ -47,14 +53,13 @@ The default is 0x00. .It Fl s Ar symbol ??? .It Fl w -Expand WRAM0 to the whole space assigned to WRAM and prevent the use of WRAMX -sections. +Expand the WRAM0 section size from 4KiB to the full 8KiB assigned to WRAM and +prohibit the use of WRAMX sections. +Useful for ROMs designed for DMG. .It Fl t -Write a tiny -.Pq 32KiB -ROM file. -This forces all ROMX sections to be of type ROM0, and increases the ROM0 -section size from 16KiB to 32KiB. +Expand the ROM0 section size from 16KiB to the full 32KiB assigned to ROM and +prohibit the use of ROMX sections. +Useful for ROMs that fit in 32 KiB. .It Fl l Ar linkerscript Specify a linkerscript file that tells the linker how sections must be placed in the ROM. diff --git a/src/link/script.c b/src/link/script.c index 5336436d..75fdf80b 100644 --- a/src/link/script.c +++ b/src/link/script.c @@ -44,15 +44,7 @@ void script_InitSections(void) } else if (i >= BANK_ROMX && i < BANK_ROMX + BANK_COUNT_ROMX) { /* Swappable ROM bank */ bank[i].address = 0x4000; - /* - * Now, this shouldn't really be necessary... but for - * good measure we'll do it anyway. - */ - if (options & OPT_TINY) { - bank[i].top_address = 0x4000; - } else { - bank[i].top_address = 0x8000; - } + bank[i].top_address = 0x8000; bank[i].type = SECT_ROMX; } else if (i == BANK_WRAM0) { /* WRAM */