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)) ))) ))