79 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#define RCSID4 "$Header$"
 | 
						|
 | 
						|
/*
 | 
						|
 * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
 | 
						|
 *
 | 
						|
 *          This product is part of the Amsterdam Compiler Kit.
 | 
						|
 *
 | 
						|
 * Permission to use, sell, duplicate or disclose this software must be
 | 
						|
 * obtained in writing. Requests for such permissions may be sent to
 | 
						|
 *
 | 
						|
 *      Dr. Andrew S. Tanenbaum
 | 
						|
 *      Wiskundig Seminarium
 | 
						|
 *      Vrije Universiteit
 | 
						|
 *      Postbox 7161
 | 
						|
 *      1007 MC Amsterdam
 | 
						|
 *      The Netherlands
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
/*
 | 
						|
 * 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
 | 
						|
	;
 |