mirror of
https://github.com/gbdev/rgbds.git
synced 2025-11-22 11:12:07 +00:00
Add ds cnt, byte syntax
As suggested by https://github.com/rednex/rgbds/issues/350#issuecomment-498030458 The order `count` then `byte` was decided after some discussion: - First argument consistent with single-arg syntax - Intuitive at least to some people other than myself - Consistent with other assemblers, at least ca65
This commit is contained in:
@@ -884,6 +884,10 @@ ds : T_POP_DS uconst
|
||||
{
|
||||
out_Skip($2);
|
||||
}
|
||||
| T_POP_DS uconst comma reloc_8bit
|
||||
{
|
||||
out_RelBytes(&$4, $2);
|
||||
}
|
||||
;
|
||||
|
||||
db : T_POP_DB constlist_8bit_entry comma constlist_8bit {
|
||||
|
||||
@@ -799,6 +799,14 @@ Note that strings are not zero-terminated!
|
||||
DB 1,2,3,4,"This is a string"
|
||||
.Ed
|
||||
.Pp
|
||||
.Ic DS
|
||||
can also be used to fill a region of memory with some value.
|
||||
The following produces 42 times the byte $FF:
|
||||
.Pp
|
||||
.Bd -literal -offset indent
|
||||
DS 42, $FF
|
||||
.Ed
|
||||
.Pp
|
||||
Alternatively, you can use
|
||||
.Ic DW
|
||||
to store a list of words (16-bit) or
|
||||
|
||||
@@ -295,11 +295,7 @@ void out_String(char const *s)
|
||||
absByteBypassCheck(*s++);
|
||||
}
|
||||
|
||||
/*
|
||||
* Output a relocatable byte. Checking will be done to see if it
|
||||
* is an absolute value in disguise.
|
||||
*/
|
||||
void out_RelByte(struct Expression *expr)
|
||||
static void outputExpression(struct Expression const *expr)
|
||||
{
|
||||
if (!rpn_isKnown(expr)) {
|
||||
out_CreatePatch(PATCHTYPE_BYTE, expr);
|
||||
@@ -307,6 +303,26 @@ void out_RelByte(struct Expression *expr)
|
||||
} else {
|
||||
out_AbsByte(expr->nVal);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Output a relocatable byte. Checking will be done to see if it
|
||||
* is an absolute value in disguise.
|
||||
*/
|
||||
void out_RelByte(struct Expression *expr)
|
||||
{
|
||||
outputExpression(expr);
|
||||
rpn_Free(expr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Output several copies of a relocatable byte. Checking will be done to see if
|
||||
* it is an absolute value in disguise.
|
||||
*/
|
||||
void out_RelBytes(struct Expression *expr, int32_t n)
|
||||
{
|
||||
while (n--)
|
||||
outputExpression(expr);
|
||||
rpn_Free(expr);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user