68 lines
		
	
	
	
		
			999 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
	
		
			999 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #define RCSID4 "$Header$"
 | |
| 
 | |
| /*
 | |
|  * (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
 | |
| 	;
 |