Merge pull request #134 from Ben10do/oam-sections

Add support for OAM Sections
This commit is contained in:
AntonioND
2017-03-11 12:18:40 +00:00
committed by GitHub
10 changed files with 38 additions and 23 deletions

View File

@@ -101,7 +101,8 @@ enum {
SECT_ROM0, SECT_ROM0,
SECT_HRAM, SECT_HRAM,
SECT_WRAMX, SECT_WRAMX,
SECT_SRAM SECT_SRAM,
SECT_OAM
}; };
enum { enum {

View File

@@ -3,28 +3,30 @@
#include "types.h" #include "types.h"
enum eBankDefine {
BANK_ROM0 = 0,
BANK_ROMX,
BANK_WRAM0 = 512,
BANK_WRAMX,
BANK_VRAM = 520,
BANK_HRAM = 522,
BANK_SRAM = 523
};
enum eBankCount { enum eBankCount {
BANK_COUNT_ROM0 = 1, BANK_COUNT_ROM0 = 1,
BANK_COUNT_ROMX = 511, BANK_COUNT_ROMX = 511,
BANK_COUNT_WRAM0 = 1, BANK_COUNT_WRAM0 = 1,
BANK_COUNT_WRAMX = 7, BANK_COUNT_WRAMX = 7,
BANK_COUNT_VRAM = 2, BANK_COUNT_VRAM = 2,
BANK_COUNT_OAM = 1,
BANK_COUNT_HRAM = 1, BANK_COUNT_HRAM = 1,
BANK_COUNT_SRAM = 16 BANK_COUNT_SRAM = 16
}; };
enum eBankDefine {
BANK_ROM0 = 0,
BANK_ROMX = BANK_ROM0 + BANK_COUNT_ROM0,
BANK_WRAM0 = BANK_ROMX + BANK_COUNT_ROMX,
BANK_WRAMX = BANK_WRAM0 + BANK_COUNT_WRAM0,
BANK_VRAM = BANK_WRAMX + BANK_COUNT_WRAMX,
BANK_OAM = BANK_VRAM + BANK_COUNT_VRAM,
BANK_HRAM = BANK_OAM + BANK_COUNT_OAM,
BANK_SRAM = BANK_HRAM + BANK_COUNT_HRAM
};
#define MAXBANKS (BANK_COUNT_ROM0 + BANK_COUNT_ROMX + BANK_COUNT_WRAM0 + BANK_COUNT_WRAMX \ #define MAXBANKS (BANK_COUNT_ROM0 + BANK_COUNT_ROMX + BANK_COUNT_WRAM0 + BANK_COUNT_WRAMX \
+ BANK_COUNT_VRAM + BANK_COUNT_HRAM + BANK_COUNT_SRAM) + BANK_COUNT_VRAM + BANK_COUNT_OAM + BANK_COUNT_HRAM + BANK_COUNT_SRAM)
extern SLONG area_Avail(SLONG bank); extern SLONG area_Avail(SLONG bank);
extern void AssignSections(void); extern void AssignSections(void);

View File

@@ -57,7 +57,8 @@ enum eSectionType {
SECT_ROM0, SECT_ROM0,
SECT_HRAM, SECT_HRAM,
SECT_WRAMX, SECT_WRAMX,
SECT_SRAM SECT_SRAM,
SECT_OAM
}; };
struct sSection { struct sSection {

View File

@@ -513,7 +513,7 @@ void if_skip_to_endc( void )
%token T_POP_POPO %token T_POP_POPO
%token T_POP_PUSHO %token T_POP_PUSHO
%token T_POP_OPT %token T_POP_OPT
%token T_SECT_WRAM0 T_SECT_VRAM T_SECT_ROMX T_SECT_ROM0 T_SECT_HRAM T_SECT_WRAMX T_SECT_SRAM %token T_SECT_WRAM0 T_SECT_VRAM T_SECT_ROMX T_SECT_ROM0 T_SECT_HRAM T_SECT_WRAMX T_SECT_SRAM T_SECT_OAM
%token T_Z80_ADC T_Z80_ADD T_Z80_AND %token T_Z80_ADC T_Z80_ADD T_Z80_AND
%token T_Z80_BIT %token T_Z80_BIT
@@ -1146,6 +1146,7 @@ sectiontype:
| T_SECT_HRAM { $$=SECT_HRAM; } | T_SECT_HRAM { $$=SECT_HRAM; }
| T_SECT_WRAMX { $$=SECT_WRAMX; } | T_SECT_WRAMX { $$=SECT_WRAMX; }
| T_SECT_SRAM { $$=SECT_SRAM; } | T_SECT_SRAM { $$=SECT_SRAM; }
| T_SECT_OAM { $$=SECT_OAM; }
; ;

View File

@@ -342,6 +342,7 @@ struct sLexInitString staticstrings[] = {
{"hram", T_SECT_HRAM}, {"hram", T_SECT_HRAM},
{"wramx", T_SECT_WRAMX}, {"wramx", T_SECT_WRAMX},
{"sram", T_SECT_SRAM}, {"sram", T_SECT_SRAM},
{"oam", T_SECT_OAM},
{NAME_RB, T_POP_RB}, {NAME_RB, T_POP_RB},
{NAME_RW, T_POP_RW}, {NAME_RW, T_POP_RW},

View File

@@ -491,7 +491,7 @@ out_WriteObject(void)
struct PatchSymbol *pSym; struct PatchSymbol *pSym;
struct Section *pSect; struct Section *pSect;
fwrite("RGB3", 1, 4, f); fwrite("RGB4", 1, 4, f);
fputlong(countsymbols(), f); fputlong(countsymbols(), f);
fputlong(countsections(), f); fputlong(countsections(), f);

View File

@@ -30,7 +30,7 @@ SLONG MaxSBankUsed;
SLONG MaxVBankUsed; SLONG MaxVBankUsed;
const enum eSectionType SECT_MIN = SECT_WRAM0; const enum eSectionType SECT_MIN = SECT_WRAM0;
const enum eSectionType SECT_MAX = SECT_SRAM; const enum eSectionType SECT_MAX = SECT_OAM;
const struct sSectionAttributes SECT_ATTRIBUTES[] = { const struct sSectionAttributes SECT_ATTRIBUTES[] = {
{"WRAM0", BANK_WRAM0, 0, 0, BANK_COUNT_WRAM0}, {"WRAM0", BANK_WRAM0, 0, 0, BANK_COUNT_WRAM0},
{"VRAM", BANK_VRAM, 0, 0, BANK_COUNT_VRAM}, {"VRAM", BANK_VRAM, 0, 0, BANK_COUNT_VRAM},
@@ -38,7 +38,8 @@ const struct sSectionAttributes SECT_ATTRIBUTES[] = {
{"ROM0", BANK_ROM0, 0, 0, BANK_COUNT_ROM0}, {"ROM0", BANK_ROM0, 0, 0, BANK_COUNT_ROM0},
{"HRAM", BANK_HRAM, 0, 0, BANK_COUNT_HRAM}, {"HRAM", BANK_HRAM, 0, 0, BANK_COUNT_HRAM},
{"WRAMX", BANK_WRAMX, 0, 0, BANK_COUNT_WRAMX}, {"WRAMX", BANK_WRAMX, 0, 0, BANK_COUNT_WRAMX},
{"SRAM", BANK_SRAM, 0, 0, BANK_COUNT_SRAM} {"SRAM", BANK_SRAM, 0, 0, BANK_COUNT_SRAM},
{"OAM", BANK_OAM, 0, 0, BANK_COUNT_OAM}
}; };
#define DOMAXBANK(x, y) {switch (x) { \ #define DOMAXBANK(x, y) {switch (x) { \
@@ -326,6 +327,9 @@ AssignSections(void)
/* Swappable VRAM bank */ /* Swappable VRAM bank */
BankFree[i]->nOrg = 0x8000; BankFree[i]->nOrg = 0x8000;
BankFree[i]->nSize = 0x2000; BankFree[i]->nSize = 0x2000;
} else if (i == BANK_OAM) {
BankFree[i]->nOrg = 0xFE00;
BankFree[i]->nSize = 0x00A0;
} else if (i == BANK_HRAM) { } else if (i == BANK_HRAM) {
/* HRAM */ /* HRAM */
BankFree[i]->nOrg = 0xFF80; BankFree[i]->nOrg = 0xFF80;
@@ -355,6 +359,7 @@ AssignSections(void)
case SECT_WRAM0: case SECT_WRAM0:
case SECT_HRAM: case SECT_HRAM:
case SECT_ROM0: case SECT_ROM0:
case SECT_OAM:
pSection->nBank = SECT_ATTRIBUTES[pSection->Type].bank; pSection->nBank = SECT_ATTRIBUTES[pSection->Type].bank;
if (area_AllocAbs(&BankFree[pSection->nBank], pSection->nOrg, if (area_AllocAbs(&BankFree[pSection->nBank], pSection->nOrg,
pSection->nByteSize) == -1) { pSection->nByteSize) == -1) {

View File

@@ -65,6 +65,8 @@ MapfileInitBank(SLONG bank)
fprintf(mf, "HRAM:\n"); fprintf(mf, "HRAM:\n");
else if (bank == BANK_VRAM || bank == BANK_VRAM + 1) else if (bank == BANK_VRAM || bank == BANK_VRAM + 1)
fprintf(mf, "VRAM Bank #%ld:\n", bank - BANK_VRAM); fprintf(mf, "VRAM Bank #%ld:\n", bank - BANK_VRAM);
else if (bank == BANK_OAM)
fprintf(mf, "OAM:\n");
else if (bank < MAXBANKS) else if (bank < MAXBANKS)
fprintf(mf, "SRAM Bank #%ld:\n", bank - BANK_SRAM); fprintf(mf, "SRAM Bank #%ld:\n", bank - BANK_SRAM);
} }
@@ -79,6 +81,8 @@ MapfileInitBank(SLONG bank)
sfbank = 0; sfbank = 0;
else if (bank == BANK_VRAM || bank == BANK_VRAM + 1) else if (bank == BANK_VRAM || bank == BANK_VRAM + 1)
sfbank = bank - BANK_VRAM; sfbank = bank - BANK_VRAM;
else if (bank == BANK_OAM)
sfbank = 0;
else if (bank < MAXBANKS) else if (bank < MAXBANKS)
sfbank = bank - BANK_SRAM; sfbank = bank - BANK_SRAM;
else else

View File

@@ -446,8 +446,8 @@ obj_ReadOpenFile(FILE * pObjfile, char *tzObjectfile)
//V2 is really the same but the are new patch types //V2 is really the same but the are new patch types
obj_ReadRGB(pObjfile, 0); obj_ReadRGB(pObjfile, 0);
break; break;
case '3': case '3': // V3 is very similiar, but contains section names and byte alignment
// V3 is very similiar, but contains section names and byte alignment case '4': // V4 supports OAM sections, but is otherwise identical
obj_ReadRGB(pObjfile, CONTAINS_SECTION_NAME | CONTAINS_SECTION_ALIGNMENT); obj_ReadRGB(pObjfile, CONTAINS_SECTION_NAME | CONTAINS_SECTION_ALIGNMENT);
break; break;
default: default:

View File

@@ -68,12 +68,12 @@ getsymbank(SLONG symid)
errx(1, "*INTERNAL* UNKNOWN SYMBOL TYPE"); errx(1, "*INTERNAL* UNKNOWN SYMBOL TYPE");
} }
if (nBank == BANK_WRAM0) return 0; if (nBank == BANK_WRAM0 || nBank == BANK_OAM) return 0;
if (nBank >= BANK_WRAMX && nBank <= (BANK_WRAMX+6)) if (nBank >= BANK_WRAMX && nBank < (BANK_WRAMX + BANK_COUNT_WRAMX))
return nBank - BANK_WRAMX + 1; return nBank - BANK_WRAMX + 1;
if (nBank >= BANK_VRAM && nBank <= (BANK_VRAM+1)) if (nBank >= BANK_VRAM && nBank < (BANK_VRAM + BANK_COUNT_VRAM))
return nBank - BANK_VRAM; return nBank - BANK_VRAM;
if (nBank >= BANK_SRAM && nBank <= (BANK_SRAM+3)) if (nBank >= BANK_SRAM && nBank < (BANK_SRAM + BANK_COUNT_SRAM))
return nBank - BANK_SRAM; return nBank - BANK_SRAM;
return nBank; return nBank;