88 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
# $Header$
 | 
						|
 | 
						|
This directory contains two programs:
 | 
						|
 | 
						|
mkswitch:
 | 
						|
	C program, necessary for regenerating the giant switches
 | 
						|
	which are part of the INT project.
 | 
						|
 | 
						|
mkfuncs:
 | 
						|
	shell script that can be used to generate new function
 | 
						|
	files, if a new implementation is needed.
 | 
						|
 | 
						|
The first program reads an input file which holds the interpreter
 | 
						|
opcode table (as shown in the [IR-81] report appendix B),
 | 
						|
and creates an output file which contains an enormous switch
 | 
						|
file.  This switch has entries for each possible opcode.  It's
 | 
						|
possible to supply a third filename, which is the name of file
 | 
						|
where all functions will be stored.  This is necessary if a new
 | 
						|
function implementation is needed.
 | 
						|
 | 
						|
The first argument to mkswitch is the prefix to be used in the
 | 
						|
generated function names.  For the interpreter proper this prefix
 | 
						|
is  Do.
 | 
						|
 | 
						|
The input file contains lines in the following format:
 | 
						|
 | 
						|
	Mnemonic Flags Count First-number
 | 
						|
 | 
						|
The created switch file will contain a switch, with each case
 | 
						|
having one of the following formats (? is the opcode):
 | 
						|
 | 
						|
	1) case ?: DoAz();
 | 
						|
	2) case ?: DoBm(val);
 | 
						|
	3) case ?: DoCs(hob, wsize);
 | 
						|
	4) case ?: DoDXY(wsize);
 | 
						|
 | 
						|
Ad 1)	This format shows that the corresponding opcode does not
 | 
						|
	have an argument.  Often the operand is popped from the
 | 
						|
	stack.
 | 
						|
 | 
						|
	e.g. DoNOPz(), this performs the NOP instruction.
 | 
						|
 | 
						|
Ad 2)	This is the format for a mini.  There is one implicit
 | 
						|
	argument (I) .
 | 
						|
 | 
						|
	e.g. DoLOCm(1), this is the LOC 1 instruction.
 | 
						|
 | 
						|
Ad 3)	This format corresponds with a shortie.  There is an implicit
 | 
						|
	argument (high order byte), and a one byte text argument
 | 
						|
	(low order byte).  W equals 'wsize' (if a word multiple),
 | 
						|
	otherwise it equals '1'.  H is the value of the high
 | 
						|
	order byte.
 | 
						|
 | 
						|
	e.g. DoLOEs(2, wsize), these are all LOE instructions,
 | 
						|
	with all addresses in the range:
 | 
						|
		(512 * wordsize) . . (767 * wordsize).
 | 
						|
	
 | 
						|
Ad 4)	This format is used for opcodes with 2 or more text arguments,
 | 
						|
	and no implicit arguments.  There are 6 types:
 | 
						|
 | 
						|
	XY = l2: two byte negative or positive text argument.
 | 
						|
	XY = n2: two byte negative text argument.
 | 
						|
	XY = p2: two byte positive text argument.
 | 
						|
	XY = l4: four byte negative or positive text argument.
 | 
						|
	XY = n4: four byte negative text argument.
 | 
						|
	XY = p4: four byte positive text argument.
 | 
						|
 | 
						|
	W equals 'wsize' (if a word multiple), otherwise it equals 1.
 | 
						|
 | 
						|
	e.g. DoLDLp2(wsize), these are all LDL instructions, with
 | 
						|
	negative local offsets, which are word multiples.
 | 
						|
 | 
						|
 | 
						|
When two file arguments are given to mkswitch (input file and output file),
 | 
						|
only the switch is generated.  If an additional third file name is
 | 
						|
given (another output file), this file is filled with all function
 | 
						|
calls in such a manner that mkfuncs will generate new function files.
 | 
						|
 | 
						|
Mkfuncs expects two arguments, an input file generated by
 | 
						|
mkswitch and the name of a directory where the new function
 | 
						|
files are stored.  These files (15) each represent one group (as
 | 
						|
proposed in [IR-81] sec 11.3) of instructions.  Each file will
 | 
						|
contain all functions needed to implement that specific group
 | 
						|
of instructions.  The functions will only contain a logging
 | 
						|
message, and a call to newPC() which is necessary to skip the
 | 
						|
arguments.  The names of the generated files are: do_XXX.c, where
 | 
						|
XXX is the name of the corresponding instruction group.
 | 
						|
 |