68 lines
		
	
	
	
		
			995 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
	
		
			995 B
		
	
	
	
		
			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".
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
/*
 | 
						|
 * Motorola 6800 parsing rules
 | 
						|
 */
 | 
						|
 | 
						|
operation
 | 
						|
	:
 | 
						|
		NOARG
 | 
						|
			{	emit1($1);}
 | 
						|
	|
 | 
						|
		BRANCH expr
 | 
						|
			{	branch($1,$2);}
 | 
						|
	|
 | 
						|
		XOP '#' expr
 | 
						|
			{	emit1($1 - 0x20);
 | 
						|
				switch ($1 & 0x0F) {
 | 
						|
				case 0x03:
 | 
						|
				case 0x0C:
 | 
						|
				case 0x0E:
 | 
						|
#ifdef RELOCATION
 | 
						|
						newrelo($3.typ, RELBR | RELO2);
 | 
						|
#endif
 | 
						|
						emit2($3.val);
 | 
						|
						break;
 | 
						|
				default:
 | 
						|
#ifdef RELOCATION
 | 
						|
						newrelo($3.typ, RELO1);
 | 
						|
#endif
 | 
						|
						emit1($3.val);
 | 
						|
				}
 | 
						|
			}
 | 
						|
	|
 | 
						|
		XOP '<' expr
 | 
						|
			{	emit1($1 - 0x10);
 | 
						|
#ifdef RELOCATION
 | 
						|
				newrelo($3.typ, RELO1);
 | 
						|
#endif
 | 
						|
				emit1($3.val);
 | 
						|
			}
 | 
						|
	|
 | 
						|
		memref expr
 | 
						|
			{	emit1($1 + 0x10);
 | 
						|
#ifdef RELOCATION
 | 
						|
				newrelo($2.typ, RELO2);
 | 
						|
#endif
 | 
						|
				emit2($2.val);
 | 
						|
			}
 | 
						|
	|
 | 
						|
		memref expr ',' X
 | 
						|
			{	emit1($1);
 | 
						|
#ifdef RELOCATION
 | 
						|
				newrelo($2.typ, RELO1);
 | 
						|
#endif
 | 
						|
				emit1($2.val);
 | 
						|
			}
 | 
						|
	;
 | 
						|
memref	:
 | 
						|
		AOP
 | 
						|
	|
 | 
						|
		XOP
 | 
						|
	;
 |