136 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| This directory contains test programs for EM implementations.
 | |
| The test programs are all part of the file "tests".
 | |
| Each individual test program looks like:
 | |
| 
 | |
| 	TEST 004: test ...
 | |
| 	 ...		; data declarations etc.
 | |
| 	MAIN nlocal
 | |
| 	 ...		; part of the body of MAIN
 | |
| 	PROC
 | |
| 	 ...		; subroutines used by this test
 | |
| 
 | |
| The PROC part is optional, so the smallest test program looks like:
 | |
| 
 | |
| 	TEST 000: null test
 | |
| 	MAIN 0
 | |
| 
 | |
| The keywords used by "select", like TEST, MAIN, PROC, HOL, OK and ERRLAB,
 | |
| all consist of upper case letters and start in column one.
 | |
| A convention for test numbers is to use 3 digit numbers, possibly left
 | |
| padded with zero's.
 | |
| 
 | |
| A program, called "select", is provided to combine a range of tests
 | |
| into a single test program.
 | |
| "Select" expects a range as argument, like 0-127, or -127, or 0-.
 | |
| Tests that have a TEST number in that range are included.
 | |
| "Select" also expects the file from which the tests should
 | |
| be selected as an argument.
 | |
| If no argument is given, or only a range argument, select expects
 | |
| the tests to slect from on standard input.
 | |
| 
 | |
| To prevent name clashes, some rules must be obeyed:
 | |
|    - data label names, procedure names and instruction label numbers
 | |
|      must be unique over all tests. A good habit is to use the
 | |
|      three digit test number as suffix.
 | |
|    - only keyword of "select" may start with uppercase letters in column
 | |
|      one, to allow for expansion in the future.
 | |
|    - because only a single 'hol' pseudo is allowed, "select" must
 | |
|      generate the 'hol' pseudo. An individual test may request
 | |
|      some 'hol' space by a special HOL line, starting in column one
 | |
|      and followed by a single number, the number of bytes needed.
 | |
|      This number must consists of digits only, no constant symbols,
 | |
|      because "select" must compute the maximum, so before the
 | |
|      preprocessor has replaced the constant symbols by their values.
 | |
|    - a similar problem is caused by the number of bytes of local
 | |
|      storage for 'main'. An individual test may specify the number
 | |
|      of bytes it needs as parameter to the MAIN line.
 | |
|      Again, the number must consist of digits only.
 | |
| 
 | |
| Test programs print a sequence of integers greater than 1.
 | |
| This sequence is terminated by the number 1 as soon as an error is detected.
 | |
| If all tests are performed correctedly the number 0 is printed.
 | |
| 
 | |
| To allow test programs to print integers without the full machinery of
 | |
| conversion and i/o routines, the EM instruction 'nop' is used.
 | |
| Each time this instruction is executed, the current line number as
 | |
| maintained by the 'lin' instruction must be printed, followed by a
 | |
| newline, at least during debugging.
 | |
| 
 | |
| The following abbrevation may be used in test programs:
 | |
| 
 | |
| 	OK	->	lin n
 | |
| 			nop
 | |
| 
 | |
| Numbers are automatically assigned in order of static appearance.
 | |
| As soon as an error is detected you must branch to label 1, by instructions
 | |
| like 'bra *1' and 'zne *1'.
 | |
| Label 1 is automatically provided in the main routine.
 | |
| If you jump to label 1 in a subroutine, then that subroutine must
 | |
| end with ERRLAB, like in:
 | |
| 
 | |
| 	PROC
 | |
| 	 pro $test,0
 | |
| 	 ...
 | |
| 	 bra *1
 | |
| 	 ...
 | |
| 	 ret 0
 | |
| 	ERRLAB
 | |
| 	 end
 | |
| 
 | |
| An option to "select" is to generate 'fil' instructions whenever a
 | |
| new test starts.
 | |
| This is useful if 'nop' prints the 'fil' string as well as the 'lin' number.
 | |
| This 'f' option is on by default, off if a '-f' flag is given.
 | |
| 
 | |
| The EM file generated by "select" includes "test.h".
 | |
| "test.h" may contain definitions of the following symbols:
 | |
| 	W2S:	the size of double precision integers, if implemented.
 | |
| 	FS:	the size of single precision floats, if implemented.
 | |
| 	F2S:	the size of double precision floats, if implemented.
 | |
| The value of these symbols, if defined, must be the size of the object involved.
 | |
| 
 | |
| Two other symbols are used:
 | |
| 	EM_PSIZE:	pointer size
 | |
| 	EM_WSIZE:	word size
 | |
| The machine dependent translation program, like 8086 and vax2, give
 | |
| definitions of these symbols while calling the EM encode program.
 | |
| Because these size names occur quite often, they may be abbreviated:
 | |
| 	WS	->	EM_WSIZE
 | |
| 	PS	->	EM_PSIZE
 | |
| 
 | |
| Before running the tests in the file "tests", it is wise to test
 | |
| the necessary basic functions with some simple tests like
 | |
| 
 | |
| 	TEST 000: null
 | |
| 	MAIN 0
 | |
| and
 | |
| 	TEST 001: ok
 | |
| 	MAIN 0
 | |
| 	OK
 | |
| and
 | |
| 	TEST 998: error
 | |
| 	MAIN 0
 | |
| 	 bra *1
 | |
| and
 | |
| 	TEST 999: test lni
 | |
| 	MAIN 0
 | |
| 	 lin 1
 | |
| 	 lni
 | |
| 	 loe 0
 | |
| 	 loc 2
 | |
| 	 bne *1
 | |
| 	OK
 | |
| The first two of these are part of "tests" as well. The last two are
 | |
| not included in "tests" intensionally, because they would fail.
 | |
| The last tests fails because it references the ABS block which is
 | |
| inaccessable after an 'hol' pseudo.
 | |
| Proceed as follows for each of these basic tests:
 | |
|  - make a file called 'basic' containing the test
 | |
|  - run select:
 | |
| 	select basic >basic.e
 | |
|  - compile by
 | |
| 	machine basic.e
 | |
|  - and load and run
 | |
| 
 | |
|    where machine should be replaced by the name of program
 | |
|    used to compile EM programs for the current machine.
 |