mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-20 10:12:06 +00:00
Implement ALIGN keyword in rgbasm
The ALIGN keyword specifies the number of bits that should be zero at the start of a section. It works in a simliar fashion to BANK.
This commit is contained in:
@@ -442,7 +442,7 @@ void if_skip_to_endc( void )
|
|||||||
%left T_OP_MUL T_OP_DIV T_OP_MOD
|
%left T_OP_MUL T_OP_DIV T_OP_MOD
|
||||||
%left T_OP_NOT
|
%left T_OP_NOT
|
||||||
%left T_OP_DEF
|
%left T_OP_DEF
|
||||||
%left T_OP_BANK
|
%left T_OP_BANK T_OP_ALIGN
|
||||||
%left T_OP_SIN
|
%left T_OP_SIN
|
||||||
%left T_OP_COS
|
%left T_OP_COS
|
||||||
%left T_OP_TAN
|
%left T_OP_TAN
|
||||||
@@ -1095,6 +1095,10 @@ section:
|
|||||||
else
|
else
|
||||||
yyerror("Address $%x not 16-bit", $6);
|
yyerror("Address $%x not 16-bit", $6);
|
||||||
}
|
}
|
||||||
|
| T_POP_SECTION string ',' sectiontype ',' T_OP_ALIGN '[' const ']'
|
||||||
|
{
|
||||||
|
out_NewAlignedSection($2, $4, $8, -1);
|
||||||
|
}
|
||||||
| T_POP_SECTION string ',' sectiontype ',' T_OP_BANK '[' const ']'
|
| T_POP_SECTION string ',' sectiontype ',' T_OP_BANK '[' const ']'
|
||||||
{
|
{
|
||||||
bankrangecheck($2, $4, -1, $8);
|
bankrangecheck($2, $4, -1, $8);
|
||||||
@@ -1106,6 +1110,14 @@ section:
|
|||||||
}
|
}
|
||||||
bankrangecheck($2, $4, $6, $11);
|
bankrangecheck($2, $4, $6, $11);
|
||||||
}
|
}
|
||||||
|
| T_POP_SECTION string ',' sectiontype ',' T_OP_ALIGN '[' const ']' ',' T_OP_BANK '[' const ']'
|
||||||
|
{
|
||||||
|
out_NewAlignedSection($2, $4, $8, $13);
|
||||||
|
}
|
||||||
|
| T_POP_SECTION string ',' sectiontype ',' T_OP_BANK '[' const ']' ',' T_OP_ALIGN '[' const ']'
|
||||||
|
{
|
||||||
|
out_NewAlignedSection($2, $4, $13, $8);
|
||||||
|
}
|
||||||
;
|
;
|
||||||
|
|
||||||
sectiontype:
|
sectiontype:
|
||||||
|
|||||||
@@ -267,6 +267,7 @@ struct sLexInitString staticstrings[] = {
|
|||||||
{"def", T_OP_DEF},
|
{"def", T_OP_DEF},
|
||||||
|
|
||||||
{"bank", T_OP_BANK},
|
{"bank", T_OP_BANK},
|
||||||
|
{"align", T_OP_ALIGN},
|
||||||
|
|
||||||
{"round", T_OP_ROUND},
|
{"round", T_OP_ROUND},
|
||||||
{"ceil", T_OP_CEIL},
|
{"ceil", T_OP_CEIL},
|
||||||
|
|||||||
@@ -631,7 +631,10 @@ out_NewAbsSection(char *pzName, ULONG secttype, SLONG org, SLONG bank)
|
|||||||
void
|
void
|
||||||
out_NewAlignedSection(char *pzName, ULONG secttype, SLONG alignment, SLONG bank)
|
out_NewAlignedSection(char *pzName, ULONG secttype, SLONG alignment, SLONG bank)
|
||||||
{
|
{
|
||||||
out_SetCurrentSection(out_FindSection(pzName, secttype, -1, bank, alignment));
|
if (alignment < 0) {
|
||||||
|
yyerror("Alignment must not be negative.");
|
||||||
|
}
|
||||||
|
out_SetCurrentSection(out_FindSection(pzName, secttype, -1, bank, 1 << alignment));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user