	RELEASE 2 OF LISP

THIS RELEASE HAS THE FOLLOWING DIFFERENCES FROM RELEASE 1:

1. CORRECTION MADE FOR 
	NIL,0
	NIL1,	0

2. CORRECTION MADE IN LINE EDITOR FOR ^C TO RESET THE
   TELETYPE BUFFER.

3. ADDITION OF ZEXPR ROUTINE AND FOUR SUPPLEMENTAL ROUTINES
   (ONE TO STORE A VALUE IN FIELD 0, ONE TO LOAD
   A VALUE FROM FIELD 0, ONE TO MOVE A1P,A2P,AND A3P TO 
   FIELD 0, AND ONE TO PRINT AN ASCII CHARACTER
   ON THE LINE PRINTER.)



	RELEASE 3 OF LIS
THIS RELEASE HAS THE FOLLOWING DIFFERENCES FROM RELEASE 2:

1. CORRECTION MADE IN GENSYM ROUTINE
	GEN6,	NXTA6
	GEN7,	GEN4+1

2. ADDITION OF 19 ADDITIONAL ZEXPR ROUTINES
    (LOAD AND STORE IN FIELD 2 AND 3, EXCLUSIVE AND INCLUSIVE OR,
    LEFTSHIFT AND DIVIDE FUNCTIONS WITH AND WITHOUT EAE, A
    BASIC PUNCH ROUTINE, EAE ROUTINES FOR DIVIDE, MULTIPLY AND
    ADD FOR UNSIGNED MULTIPLE WORD ARITHMETIC, SET OCTAL AND
    DECIMAL MODE).
3. THE USE OF LS8/LE8 PRINTER OR KLEINSMIDT PRINTER AS 
    ALTERNATIVE SPECIAL OUTPUT DEVICE.
		ADDITIONS TO LISP MANUAL
		********* ** **** ******

	SOMETIMES A LISP USER HAS SPECIALIZED FUNCTIONS
WHICH HE EXPECTS TO PERFORM A NUMBER OF TIMES. BECAUSE
OF MEMORY LIMITATIONS AND TIME LIMITATIONS, IT IS OFTEN
DESIRABLE TO IMPLEMENT THESE FUNCTIONS IN MACHINE
LANGUAGE, AND CALL THEM FROM A LISP PROGRAM.
SINCE THE LIST SPACE COULD NOT BE EXTENDED TO A WHOLE
FLD (BECAUSE OF DESIGN DECISIONS WHEN LISP 102A WAS WRITTEN)
A LARGE PORTION OF FIELD 0 IS NOW UNUSED (LOCATIONS 0-33,
47-77, 2400-5400).
A NEW FUNCTON HAS BEEN ADDED TO LISP CALLED ZEXPR,
WHICH HAS 3 ARUMENTS.
THE USER CAN WRITE HIS OWN FUNCTIONS IN PAL8 WHICH
USE THE FREE SPACE IN FIELD 0.
AFTER ASSEMBLING THESE PROGRAMS, HE CAN THEN USE
ABSLDR TO LOAD THEM OVER LISP, AND SAVE THE
NEW PROGRAM. THEN IN LISP, HE CAN TRANSFER TO THESE
ROUTINES USING ZEXPR(W,X,Y).
W IS THE ADDRESS TO TRANSFER TO, X IS THE FIRST ARGUMENT,
AND Y IS THE SECOND ARGUMENT.

EXAMPLE
*******

ASSUME THE USER HAS 2 OVERLAYS, OVL1.BN, D OVL2.BN

	.R ABSLDR
	*LISP.SV/I
	*OVL1,OVL2$
	.SA SYS:LISPN;13000
	.R LISPN

		ZEXPR
		*****

ZEXPR ( SIMILAR TO EXPR ,EXCEPT USING FIELD 0)
IS A FUNCTION OF THREE ARGUMENTS. THE ARGUMENTS ARE SUPPOSED TO 
EVALUATE TO NUMERICAL VALUES (UNLESS NOT USED). 
THIS JUMPS TO THE FIELD ZERO MACHINE ADDRESS INDICATED IN THE
FIRST ARGUMENT WITH THE NUMERICAL VALUE OF THE SECOND ARGUMENT
IN THE ACCUMULATOR. THE POINTER TO THE SECOND ARGUMENT
CAN BE FOUND IN FIELD 0 LOCATION 37, AND THE POINTER
TOHE THIRD ARGUMENT CAN BE FOUND IN FIELD 0 LOCATION 41.

THE MACHINE CODE PROGRAM CAN RETURN TO THE LISP
SYSTEM WITH THE INSTRUCTION JMP 42 IN CASE
THAT NO VALUE NEED BE RETURNED (CLEAR AC BEFORE RETURNING).
IF A NUMERICAL VALUE MUST BE RETURNED, THIS CAN BE DONE 
BY HAVING T VALUE IN THE AC, AND DOING A JMP 44.
BACK IN LISP, ONE THEN HAS A POINTER TO THAT VALUE
AS A VALUE.

SPECIAL LOCATIONS
******* *********
ZEXPR (1717 X Y) WILL STORE X AT LOCATION Y IN FIELD 2
ZEXPR (1724 X Y) WILL STORE X AT LOCATION Y IN FIELD 3
ZEXPR (1731 X 0) WILL GET CONTENT OF LOCATION X IN FIELD 2
ZEXPR (1733 X 0) WILL GET CONTENT OF LOCATION X IN FIELD 3
ZEXPR (1735 X Y) WILL RETURN EXCLUSIVE LOCGICAL OR OF X AND Y
ZEXPR (17T5 X Y) WILL RETURN INCLUSIVE LOGICAL OR OF X AND Y
ZEXPR (1755 X Y) WILL RETURN INCLUSIVE LOGICAL OR OF X AND Y USING
		 MQ OPERATIONS. CAN BE USED ON PDP 8/E OR A PDDP 8/I
		 WITH EAE.
ZEXPR (2000 X Y) LISP LEFTSHIFT FUNCTION. X*(2**Y)
		 IF Y > 0 SHIFT X LOGICAL LEFT Y STEPS
		 IF Y < 0 SHIFT X LOGICAL RIGHT Y STEPS.
ZEXPR (2026 X Y) EAE VERSION OF ABOVE. NEEDS A PDP 8/I OR PDP 8/E
		 WITH EAE. USES SHL/LSR.
ZEXPR (2054 X Y) LISP DIVIDE FUNCTION. RETURNS REMAINDER AND
		 STORES QUoTIENT IN WORD 15 OF FIELD 1, WHERE
		 IT CAN BE RETEIVED BY EXPR (3172 15-1)
		 X/Y TO <15> ; X-Y*(X/Y) AS FUNCTION VALUE.
ZEXPR (2076 X Y) EAE VERSION OF LISP DIVIDE. FUNCTION. RESULTS AS
		 ABOVE. USES DVI, NEEDS EAE.
ZEXPR (2112 X Y) UNSIGNED MULTIPLICATION, 12 BIT RESULT.
		 X*Y IS RETURNED. USES EAE.
ZEXPR (2125 X Y) `UNSIGNED MULTIPLICATION, 24 BIT RESULT.
		 X*Y+<15>. MOST SIGNIFICANT 12 BITS TO <15>,
		 LEAST SIGNIFICANT 12 BITS AS RETURNED RESULT.
		 THE ROUTINE IS AIMED AT MULTIPLE PRECISION
		 INTEGER ARITHMETIC. USES EAE.
		 <15> IS THE QUOTIENT CELL IN FIELD 1.
ZEXPR (2137 X Y) TWO WORD DIVIDE. (<15>,X)/Y TO
		 <15> (QUOTIENT), RETURN REMAINDER USES EAE.
		 THE ROUTINE IS AIMED AT MULTIPLE PRECISION
		 INTEGER ARITHMETIC, USES EAE.
		 <15> MUST BE LESS THAN Y.
ZEXPR (2200 X Y) ADDITION WITH CARRY. (X+Y+<15>) TO
		 <15> (CARRY), RESULT. THE ROUTINE IS AIMED AT
		 MULTIPLE PRECISION INTEGER ARITHMETIC.
ZEXPR (2211 X Y) BINARY PUNCH ROUTINE. IF Y<=0 THEN PUNCH X
		 AND Y ELSE PUNCH X, -Y TIMES.
ZEXPR (2237 0 0) SET DECIMAL, SIGNED INPUT/OUTPUT MODE.
ZEXPR (2253 0 0) [ZEXPR (1195 0 0) IN DECIMAL] SET OCTAL
		 UNSIGNED INPUT/OUTPUT MODE.
ZEXPR (2307 X Y) ASSEMBLER FUNCTION CPAGE. CHECKS IF X AND X+Y
		 BELONG TO SAME PAGE. IF TRUE THEN RETURN X,
		 ELSE RETURN`X+Y MASKED WITH 7600.
		 DEFINE((
		 (CPAGE(LAMBDA(X Y)(COND
		   ((EQ(LOGAND X 7600)(LOGAND(PLUS X Y)7600)X)
		   (T(LOGAND(PLUS X Y)7600)) ))) ))
