Added new address size override commands z:, a: and f:.
git-svn-id: svn://svn.cc65.org/cc65/trunk@2222 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
7016496564
commit
3cbd6ca29b
3 changed files with 62 additions and 8 deletions
|
@ -51,12 +51,36 @@
|
|||
void GetEA (EffAddr* A)
|
||||
/* Parse an effective address, return the result in A */
|
||||
{
|
||||
unsigned long Restrictions;
|
||||
|
||||
/* Clear the output struct */
|
||||
A->AddrModeSet = 0;
|
||||
A->Bank = 0;
|
||||
A->Expr = 0;
|
||||
|
||||
/* Handle an addressing size override */
|
||||
switch (Tok) {
|
||||
case TOK_OVERRIDE_ZP:
|
||||
Restrictions = AM_DIR | AM_DIR_X | AM_DIR_Y;
|
||||
NextTok ();
|
||||
break;
|
||||
|
||||
case TOK_OVERRIDE_ABS:
|
||||
Restrictions = AM_ABS | AM_ABS_X | AM_ABS_Y;
|
||||
NextTok ();
|
||||
break;
|
||||
|
||||
case TOK_OVERRIDE_FAR:
|
||||
Restrictions = AM_ABS_LONG | AM_ABS_LONG_X;
|
||||
NextTok ();
|
||||
break;
|
||||
|
||||
default:
|
||||
Restrictions = ~0UL; /* None */
|
||||
break;
|
||||
}
|
||||
|
||||
/* Parse the effective address */
|
||||
if (TokIsSep (Tok)) {
|
||||
|
||||
A->AddrModeSet = AM_IMPLICIT;
|
||||
|
@ -167,7 +191,7 @@ void GetEA (EffAddr* A)
|
|||
switch (Tok) {
|
||||
|
||||
case TOK_X:
|
||||
A->AddrModeSet = AM_ABS_X | AM_DIR_X;
|
||||
A->AddrModeSet = AM_ABS_LONG_X | AM_ABS_X | AM_DIR_X;
|
||||
NextTok ();
|
||||
break;
|
||||
|
||||
|
@ -188,11 +212,14 @@ void GetEA (EffAddr* A)
|
|||
|
||||
} else {
|
||||
|
||||
A->AddrModeSet = AM_ABS | AM_DIR;
|
||||
A->AddrModeSet = AM_ABS_LONG | AM_ABS | AM_DIR;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Apply addressing mode overrides */
|
||||
A->AddrModeSet &= Restrictions;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -771,7 +771,25 @@ Again:
|
|||
switch (toupper (SVal [0])) {
|
||||
|
||||
case 'A':
|
||||
if (C == ':') {
|
||||
NextChar ();
|
||||
Tok = TOK_OVERRIDE_ABS;
|
||||
} else {
|
||||
Tok = TOK_A;
|
||||
}
|
||||
return;
|
||||
|
||||
case 'F':
|
||||
if (C == ':') {
|
||||
NextChar ();
|
||||
Tok = TOK_OVERRIDE_FAR;
|
||||
} else {
|
||||
Tok = TOK_IDENT;
|
||||
}
|
||||
return;
|
||||
|
||||
case 'S':
|
||||
Tok = TOK_S;
|
||||
return;
|
||||
|
||||
case 'X':
|
||||
|
@ -782,8 +800,13 @@ Again:
|
|||
Tok = TOK_Y;
|
||||
return;
|
||||
|
||||
case 'S':
|
||||
Tok = TOK_S;
|
||||
case 'Z':
|
||||
if (C == ':') {
|
||||
NextChar ();
|
||||
Tok = TOK_OVERRIDE_ZP;
|
||||
} else {
|
||||
Tok = TOK_IDENT;
|
||||
}
|
||||
return;
|
||||
|
||||
default:
|
||||
|
|
|
@ -105,6 +105,10 @@ enum Token {
|
|||
TOK_LBRACK, /* [ */
|
||||
TOK_RBRACK, /* ] */
|
||||
|
||||
TOK_OVERRIDE_ZP, /* z: */
|
||||
TOK_OVERRIDE_ABS, /* a: */
|
||||
TOK_OVERRIDE_FAR, /* f: */
|
||||
|
||||
TOK_MACPARAM, /* Macro parameter, not generated by scanner */
|
||||
TOK_REPCOUNTER, /* Repeat counter, not generated by scanner */
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue