87 lines
1.3 KiB
C
87 lines
1.3 KiB
C
#define RCSID4 "$Id$"
|
|
|
|
/*
|
|
* (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
|
* See the copyright notice in the ACK home directory, in the file "Copyright".
|
|
*
|
|
*/
|
|
|
|
/*
|
|
* Intel 8080 parsing rules
|
|
*/
|
|
operation
|
|
: NOOPOP
|
|
{ emit1($1);}
|
|
|
|
|
D8OP expr
|
|
{ emit1($1);
|
|
#ifdef RELOCATION
|
|
newrelo($2.typ, RELO1);
|
|
#endif
|
|
emit1($2.val);
|
|
}
|
|
|
|
|
D16OP expr
|
|
{ emit1($1);
|
|
#ifdef RELOCATION
|
|
newrelo($2.typ, RELO2);
|
|
#endif
|
|
emit2($2.val);
|
|
}
|
|
|
|
|
R16OP r16
|
|
{ emit1($1 | ($2 << 3));}
|
|
|
|
|
MOV r8 ',' r8
|
|
{ if ($2 == M && $4 == M)
|
|
serror("register error");
|
|
emit1($1 | ($2 << 3) | $4);
|
|
}
|
|
|
|
|
MVI r8 ',' expr
|
|
{ emit1($1 | ($2 << 3));
|
|
#ifdef RELOCATION
|
|
newrelo($4.typ, RELO1);
|
|
#endif
|
|
emit1($4.val);
|
|
}
|
|
|
|
|
LXI r16 ',' expr
|
|
{ emit1($1 | ($2 << 3));
|
|
#ifdef RELOCATION
|
|
newrelo($4.typ, RELO2);
|
|
#endif
|
|
emit2($4.val);
|
|
}
|
|
|
|
|
SRCOP r8
|
|
{ emit1($1 | $2);}
|
|
|
|
|
DSTOP r8
|
|
{ emit1($1 | ($2 << 3));}
|
|
|
|
|
RST absexp
|
|
{ fit(fit3($2));
|
|
emit1($1 | (low3($2) << 3));
|
|
}
|
|
|
|
|
STLDAX r16
|
|
{
|
|
if ($2 != B && $2 != D)
|
|
serror("register error");
|
|
emit1($1 | (($2 & 02) << 3));
|
|
}
|
|
;
|
|
r16 : REG
|
|
{ if ($1 & ~06)
|
|
serror("register error");
|
|
$$ = $1 & 06;
|
|
}
|
|
;
|
|
r8 : REG
|
|
{ if (($1 & ~07) != 0)
|
|
serror("register error");
|
|
$$ = $1 & 07;
|
|
}
|
|
;
|