added align and 0x55 hex syntax

This commit is contained in:
curt mayer
2020-02-22 22:34:42 -08:00
parent 263de80c6c
commit f6954a33a6
3 changed files with 52 additions and 1 deletions

View File

@@ -335,6 +335,16 @@ loop:
p = q;
goto oper;
}
} else if ((p[0] == '0') && (p[1] == 'x')) {
p+=2;
q = getpnum(p, 16, &n);
if (q == NULL) {
p--;
ec = EXPR_E_HEX;
goto esyntax;
}
p = q;
goto oper;
} else if (isdigit(*p)) {
if (last == 'n')
goto end;

View File

@@ -1,3 +1,8 @@
.org $100
.org 0x100
beep: .text "\"\"\"" ; comment
.align 4
.text "foo"
.align 16
.text "bar"
.db $45,0x67,'7'
.end

View File

@@ -40,6 +40,7 @@
static void output();
static const char *d_align(const char *);
static const char *d_null(const char *);
static const char *d_block(const char *);
static const char *d_byte(const char *);
@@ -72,6 +73,7 @@ static struct direc {
const char *name;
const char *(*fun)(const char *);
} s_directab[] = {
{ "ALIGN", d_align },
{ "BLOCK", d_block },
{ "BYTE", d_byte },
{ "CHK", d_chk },
@@ -85,6 +87,7 @@ static struct direc {
{ "EQU", d_equ },
{ "EXPORT", d_export },
{ "FILL", d_fill },
{ "GLOBAL", d_export },
{ "LIST", d_list },
{ "LSFIRST", d_lsfirst },
{ "MODULE", d_module },
@@ -94,6 +97,7 @@ static struct direc {
{ "NOPAGE", d_null },
{ "ORG", d_org },
{ "PAGE", d_null },
{ "SECTION", d_null },
{ "SET", d_set },
{ "TEXT", d_text },
{ "TITLE", d_title },
@@ -819,6 +823,38 @@ dnlst:
return p;
}
static const char *d_align(const char *p)
{
int n, v, er;
const char *q;
enum expr_ecode ecode;
const char *ep, *eps;
eps = p;
er = 0;
p = expr(p, &n, s_pc, 0, &ecode, &ep);
if (p == NULL) {
exprint(ecode, s_pline, ep);
newerr();
return NULL;
}
if (n < 0) {
eprint(_("align is negative (%d)\n"), n);
eprcol(s_pline, eps);
exit(EXIT_FAILURE);
}
while (s_pc % n) {
genb(0, eps);
}
if (er)
return NULL;
else
return p;
}
static const char *d_byte(const char *p)
{
return d_lst(p, 0);