;;; FORMAT OF FASL FILES: THE "NEW" FASLOAD SCHEME (AS OF 1/31/73) USES A NEW FORMAT FOR ITS FILES. A FASL FILE CONSISTS OF TWO HEADER WORDS, FOLLOWED BY A SERIES OF FASL BLOCKS; THE TWO HEADER WORDS ARE BOTH SIXBIT, THE FIRST BEING "*FASL+" (FOR HISTORICAL REASONS, "*FASL* IS ALSO ACCEPTED) AND THE SECOND THE CONTENTS OF LOCATION LDFNM2 IN THE LISP WHICH ASSEMBLED THE FILE (A VERSION NUMBER IN SIXBIT). EACH FASL BLOCK CONSISTS OF A WORD OF NINE FOUR-BIT RELOCATION BYTES, FOLLOWED BY NINE PIECES OF FASL DATA. THE LENGTH OF EACH DATA ITEM IS DEPENDENT ON THE RELOCATION TYPE; THUS FASLBLOCKS ARE OF VARYING LENGTH. THE LAST BLOCK MAY HAVE FEWER THAN NINE DATA ITEMS. THE RELOCATION TYPES AND THE FORMATS OF THE ASSOCIATED DATA ITEMS ARE AS FOLLOWS: TYPE 0 ABSOLUTE ONE ABSOLUTE WORD TO BE LOADED. TYPE 1 RELOCATABLE ONE WORD, THE RIGHT HALF OF WHICH IS RELOCATABLE; I.E. AT LOAD TIME THE LOAD OFFSET IS TO BE ADDED TO THE RIGHT HALF. TYPE 2 SPECIAL A WORD TO BE LOADED, WHOSE RIGHT HALF CONTAINS THE INDEX OF AN ATOM (HOPEFULLY OF TYPE PNAME) THE ADDRESS OF THE VALUE CELL OF WHICH IS TO REPLACE THE RIGHT HALF OF THE LOADED WORD. (IF NO VALUE CELL EXISTS, ONE IS TO BE CREATED.) TYPE 3 SMASHABLE CALL SIMILAR TO TYPE 4 (Q.V.) EXCEPT THAT THE INSTRUCTION IS ONE OF THE SERIES OF CALL UUOS WHICH MAY BE "SMASHED" FOR PURIFICATION PURPOSES. AT PRESENT THESE UUOS ARE: CALL, JCALL, NCALL, NJCALL. TYPE 4 QUOTED ATOM ONE WORD TO BE LOADED WHOSE RIGHT HALF CONTAINS THE INDEX OF AN ATOM WHOSE ADDRESS IS TO REPLACE THE RIGHT HALF OF THE WORD LOADED. TYPE 5 QUOTED LIST A SERIES OF WORDS REPRESENTING AN S-EXPRESSION TO BE CONSTRUCTED BY THE LOADER. THE FORMAT OF THESE WORDS IS BEST EXPLAINED BY THE ALGORITHM USED TO CONTRUCT THE S-EXPRESSION: THE LOADER EXAMINES BITS 4.7-4.9 OF SUCCESSIVELY READ WORDS, AND DISPATCHES ON THEM: 0 THE ATOM WHOSE INDEX IS IN THE RIGHT HALF OF THE WORD IS PUSHED ONTO A STACK. 1 THE LOADER POPS AS MANY ITEMS OFF THE STACK AS SPECIFIED BY THE NUMBER IN THE RIGHT HALF OF THE WORD AND MAKES A LIST OF THEM, SO THAT THE LAST ITEM POPPED BECOMES THE FIRST ITEM OF THE LIST; THIS LIST IS THEN PUSHED ONTO THE STACK. 2 THE LOADER POPS ONE ITEM OFF THE STACK AND PROCEEDS AS FOR 1, EXCEPT THAT THE ITEM FIRST POPPED IS USED TO END THE LIST INSTEAD IF NIL. (THIS ALLOWS FOR DOTTED PAIRS.) 3 THE TOP ITEM ON THE STACK IS EVALUATED AND STORED BACK ON THE TOP OF THE STACK. 4 THE RIGHT HALF OR THE WORD SPECIFIES THE LENGTH OF A HUNK TO BE MADE BY TAKING THAT MANY ITEMS FROM THE TOP OF THE STACK; THIS HUNK IS THEN PUSHED BACK. 5 UNUSED. 6 UNUSED. 7 THE LEFT HALF OF THE WORD SHOULD BE -1 OR -2, INDICATING THE SECOND LAST WORD OF THE DATA; IF -1, THE RIGHT HALF OF THIS WORD AND THE ADDRESS OF (WHAT SHOULD BE) THE SINGLE ITEM ON THE STACK (WHICH IS POPPED OFF) ARE MADE RESPECTIVELY INTO THE LEFT AND RIGHT HALVES OF A WORD TO BE LOADED INTO BINARY PROGRAM SPACE; IF -2, THE S-EXPRESSION IS PLACED INTO THE NEXT SLOT OF THE ATOMTABLE (SEE TYPE 12). THE ONE WORD REMAINING IS THE HASH KEY OF THE S-EXPRESSION AS COMPUTED BY SXHASH; THIS IS USED BY THE LOADER TO SAVE GCPRO SOME WORK. TYPE 6 GLOBALSYM ONE WORD; THE RIGHT HALF IS AN INDEX INTO THE TABLE LSYMS IN LISP. THE INDICATED VALUE IS RETRIEVED, NEGATED IF BIT 4.9 OF THE DATA WORD IS 1, AND ADDED TO THE RIGHT HALF OF THE LAST WORD LOADED INTO BINARY PROGRAM SPACE. THIS ALLOWS LAP CODE TO REFER TO SELECTED LOCATIONS INTERNAL TO LISP WITHOUT GETTING SYMBOLS FROM DDT. TYPE 7 GETDDTSYM IF THE FIRST WORD IS -1, THEN THE LOAD OFFSET IS ADDED INTO THE LEFT HALF OF THE WORD MOST RECENTLY LOADED INTO BINARY PROGRAM SPACE (THIS IS HOW LEFT HALF RELOCATION IS ACCOMPLISHED). OTHERWISE, THE FIRST WORD CONTAINS IN BITS 1.1-4.5 A SYMBOL IN SQUOZE CODE. THE LOADER GETS THE VALUE OF THIS SYMBOL FROM DDT IF POSSIBLE, NEGATES IT IF BIT 4.9 IS 1, THEN ADDS THE RESULT TO THE FIELD OF THE LAST WORD LOADED AS SPECIFIED BY BITS 4.6-4.7: 3 = ENTIRE WORD 2 = AC FIELD ONLY 1 = RIGHT HALF ONLY 0 = ENTIRE WORD, BUT SWAP HALVES OF VALUE BEFORE ADDING. THESE FOUR FIELDS CORRESPOND TO OPCODE, AC, ADDRESS, AND INDEX FIELDS RESPECTIVELY IN A LAP INSTRUCTION. IF BIT 4.8 IS A 1, THEN ANOTHER WORD FOLLOWS, CONTAINING THE VALUE OF THE SYMBOL AS OBTAINED FROM DDT AT ASSEMBLE TIME. IF THE VERSION NUMBER OF THAT LISP (AS DETERMINED FROM THE SECOND FILE HEADER WORD) IS THE SAME AS THAT OF THE LISP BEING LOADED INTO, THEN THIS VALUE IS USED AND DDT IS NOT CONSULTED AT LOAD TIME; THIS IS FOR SPEED. IF THE VERSION NUMBERS ARE DIFFERENT, THEN DDT IS CONSULTED. TYPE 10 ARRAY REFERENCE ONE WORD TO BE LOADED, WHOSE RIGHT HALF CONTAINS THE ATOMINDEX OF AN ATOMIC SYMBOL. IF THE SYMBOL HAS AN ARRAY PROPERTY, IT IS FETCHED; OTHERWISE ONE IS CREATED. THE RIGHT HALF OF THE WORD TO BE LOADED IS REPLACED WITH THE ADDRESS OF THE SECOND WORD OF THE ARRAY POINTER (I.E. OF THE TTSAR). IN THIS WAY ACCESSES TO ARRAYS CAN BE OPEN-CODED. TYPE 11 UNUSED TYPE 12 ATOMTABLE INFO A HEADER WORD, POSSIBLY FOLLOWED BY OTHERS, DEPENDING ON BITS 4.7-4.9: 0 THE RIGHT HALF IS THE NUMBER OF WORDS FOLLOWING, WHICH CONSTITUTE THE PNAME OF A PNAME-TYPE ATOM, IN THE ORDER OF THEIR APPEARANCE ON A PROPERTY LIST. THE ATOM IS INTERNED. 1 THE ONE WORD FOLLOWING IS THE VALUE OF A FIXNUM TO BE CREATED. 2 THE FOLLOWING WORD IS THE VALUE OF A FLONUM. 3 THE RIGHT HALF IS THE NUMBER OF FIXNUM COMPONENTS OF A BIGNUM FOLLOWING, MOST SIGNIFICANT WORD FIRST. BIT 3.1 IS THE SIGN OF THE BIGNUM. 4 THE FOLLOWING TWO WORDS ARE A DOUBLE-PRECISION NUMBER. 5 THE FOLLOWING TWO WORDS ARE A COMPLEX NUMBER. 6 THE FOLLOWING FOUR WORDS ARE A DUPLEX NUMBER. 7 UNUSED. THE ATOM THUS CREATED IS ASSIGNED A PLACE IN THE ATOMTABLE MAINTAINED BY THE LOADER (AS AN ARRAY) USING CONSECUTIVE LOCATIONS; FROM THAT POINT ON OTHER DATA ITEMS REFERRING TO THAT ITEM CAN DO SO BY THE INDEX OF THE ATOM IN THIS TABLE. SEE ALSO TYPES 5 AND 16, WHICH ALSO MAKE ENTRIES IN THE ATOMTABLE. TYPE 13 ENTRY INFO TWO WORDS. THE LEFT HALF OF THE FIRST WORD IS THE ATOMINDEX OF THE NAME OF THE FUNCTION BEING DEFINED; THE RIGHT HALF THAT OF THE SUBR TYPE (THE PROPERTY UNDER WHICH TO CREATE THE ENTRY POINT, E.G. SUBR OR FSUBR). THE RIGHT HALF OF THE SECOND WORD IS THE LOCATION OF THE ENTRY POINT AS A RELOCATABLE POINTER: THE LOAD OFFSET MUST BE ADDED TO IT. THE LEFT HALF OF THE SECOND WORD CONTAINS THE ARGS PROPERTY, IN INTERNAL ARGS PROPERTY FORMAT, AS SPECIFIED IN THE ORIGINAL LAP CODE BY THE ARGS CONSTRUCT. TYPE 14 LOC THE WORD IS A RELOCATABLE QUANTITY SPECIFYING WHERE TO CONTINUE LOADING. IT IS NOT PERMITTED TO LOC BELOW THE ORIGIN OF THE ASSEMBLY. IF THE LOC IS TO A LOCATION HIGHER THAN ANY YET LOADED INTO, THEN FASLOAD ZEROS OUT ALL WORDS ABOVE THAT HIGHEST LOCATION UP TO THE LOCATION SPECIFIED. FASLOAD KEEPS TRACK OF THE HIGHEST LOCATION EVER LOADED INTO; THIS VALUE PLUS ONE BECOMES THE VALUE OF BPORG AT THE END OF ASSEMBLY, REGARDLESS OF THE STATE OF THE LOCATION POINTER WHEN LOADING TERMINATES. THIS TYPE IS NEVER USED BY LAP CODE, BUT ONLY BY MIDAS .FASL CODE. TYPE 15 PUTDDTSYM FIRST WORD, THE SYMBOL IN SQUOZE CODE. IF BIT 4.9=0, THE SYMBOL IS DEFINED TO DDT IF POSSIBLE WITH THE ADDRESS OF THE WORD OF BINARY PROGRAM SPACE ABOUT TO BE LOADED INTO AS ITS VALUE. IF BIT 4.9=1, THE VALUE IS GOBBLED FROM THE FOLLOWING WORD. BIT 4.8 (OF THE WORD CONTAINING THE SQUOZE) MEANS RELOCATE THE LEFT HALF OF THE VALUE BY THE LOAD OFFSET, AND BIT 4.7 LIKEWISE FOR THE RIGHT HALF. WHETHER OR NOT THE SYMBOL ACTUALLY GETS PUT IN DDT'S SYMBOL TABLE IS A FUNCTION OF THREE CONDITIONS: FIRST, THAT THERE IS A DDT WITH A SYMBOL TABLE; SECOND, THE VALUE OF THE LISP VARIABLE "SYMBOLS"; THIRD, BIT 4.6 OF THE FIRST PUTDDTSYM WORD. THE FIRST CONDITION OF COURSE MUST BE SATISFIED. IF SO, THEN THE SYMBOL IS PUT IN THE SYMBOL TABLE ONLY IF SYMBOLS HAS A NON-NIL VALUE. FURTHERMORE, IF THAT VALUE IS THE ATOM SYMBOLS ITSELF, THEN THE SYMBOL IS PUT ONLY IF BIT 4.6 IS ON (INDICATING A "GLOBAL" SYMBOL). TYPE 16 EVAL MUNGEABLE A SERIES OF WORDS SIMILAR TO THOSE FOR TYPE 5, BUT WITH NO FOLLOWING HASH KEY. AN S-EXPRESSION IS CONSTRUCTED AND EVALUATED. THIS IS USED FOR THE SO-CALLED "MUNGEABLES" IN A FILE OF LAP CODE. IF THE LEFT HALF OF THE LAST WORD IS -1, THE VALUE IS THROWN AWAY. IF IT IS -2, THE VALUE IS ENTERED IN THE ATOMTABLE. TYPE 17 END OF BINARY ONE WORD, WHICH MUST BE "*FASL+" (OR "*FASL*") IN SIXBIT. THIS SHOULD BE THE LAST DATA WORD IN THE FILE. ANY RELOCATION BYTES LEFT OVER AFTER A TYPE 17 ARE IGNORED. THIS SHOULD BE FOLLOWED EITHER BY END OF FILE OR A WORD FULL OF ^C'S. THE "NEW" FASLOAD SCHEME (AS OF 1/31/73) USES A NEW FORMAT FOR ITS FILES. A FASL FILE CONSISTS OF TWO HEADER WORDS, FOLLOWED BY A SERIES OF FASL BLOCKS; THE TWO HEADER WORDS ARE BOTH SIXBIT, THE FIRST BEING "*FASL*" AND THE SECOND THE CONTENTS OF LOCATION LDFNM2 IN THE LISP WHICH ASSEMBLED THE FILE (A VERSION NUMBER IN SIXBIT). EACH FASL BLOCK CONSISTS OF A WORD OF NINE FOUR-BIT RELOCATION BYTES, FOLLOWED BY NINE PIECES OF FASL DATA. THE LENGTH OF EACH DATA ITEM IS DEPENDENT ON THE RELOCATION TYPE; THUS FASLBLOCKS ARE OF VARYING LENGTH. THE LAST BLOCK MAY HAVE FEWER THAN NINE DATA ITEMS. THE RELOCATION TYPES AND THE FORMATS OF THE ASSOCIATED DATA ITEMS ARE AS FOLLOWS: TYPE NAME DATA FORMAT 0 ABSOLUTE ONE ABSOLUTE WORD TO BE LOADED. 1 RELOCATABLE ONE WORD, THE RIGHT HALF OF WHICH IS RELOCATABLE; I.E. AT LOAD TIME THE LOAD OFFSET IS TO BE ADDED TO THE RIGHT HALF. 2 SPECIAL A WORD TO BE LOADED, WHOSE RIGHT HALF CONTAINS THE INDEX OF AN ATOM (HOPEFULLY OF TYPE PNAME) THE ADDRESS OF THE VALUE CELL OF WHICH IS TO REPLACE THE RIGHT HALF OF THE LOADED WORD. (IF NO VALUE CELL EXISTS, ONE IS TO BE CREATED.) 3 SMASHABLE CALL SIMILAR TO TYPE 4 (Q.V.) EXCEPT THAT THE INSTRUCTION IS ONE OF THE SERIES OF CALL UUOS WHICH MAY BE "SMASHED" FOR PURIFICATION PURPOSES. AT PRESENT THESE UUOS ARE: CALL, JCALL, NCALL, NJCALL. 4 QUOTE ATOM ONE WORD TO BE LOADED WHOSE RIGHT HALF CONTAINS THE INDEX OF AN ATOM WHOSE ADDRESS IS TO REPLACE THE RIGHT HALF OF THE WORD LOADED. 5 QUOTE LIST A SERIES OF WORDS REPRESENTING AN S-EXPRESSION TO BE CONSTRUCTED BY THE LOADER. THE FORMAT OF THESE WORDS IS BEST EXPLAINED BY THE ALGORITHM USED TO CONTRUCT THE S-EXPRESSION: THE LOADER EXAMINES BITS 4.7-4.9 OF EACH WORD. IF 0, THEN THE ATOM WHOSE INDEX IS IN THE RIGHT HALF OF THE WORD IS PUSHED ONTO A STACK. IF 1, THEN THE LOADER POPS AS MANY ITEMS OFF THE STACK AS SPECIFIED BY THE NUMBER IN THE RIGHT HALF OF THE WORD AND MAKES A LIST OF THEM, SO THAT THE LAST ITEM POPPED BECOMES THE FIRST ITEM OF THE LIST; THIS LIST IS THEN PUSHED ONTO THE STACK. IF 2, THEN THE LOADER POPS ONE ITEM OFF THE STACK AND PROCEEDS AS FOR 1, EXCEPT THAT THE ITEM FIRST POPPED IS USED TO END THE LIST INSTEAD IF NIL. (THIS ALLOWS FOR DOTTED PAIRS.) IF 3, THEN THE TOP ITEM ON THE STACK IS EVALUATED AND RESTORED BACK ON THE TOP OF THE STACK. IF 7, THEN THE LEFT HALF OF THE WORD SHOULD BE -1 OR -2, INDICATING THE SECOND LAST WORD OF THE DATA; IF -1, THE RIGHT HALF OF THIS WORD AND THE ADDRESS OF (WHAT SHOULD BE) THE SINGLE ITEM ON THE STACK (WHICH IS POPPED OFF) ARE MADE RESPECTIVELY INTO THE LEFT AND RIGHT HALVES OF A WORD TO BE LOADED INTO BINARY PROGRAM SPACE; IF -2, THE S-EXPRESSION IS PLACED INTO THE NEXT SLOT OF THE ATOMTABLE (SEE TYPE 12). THE ONE WORD REMAINING IS THE HASH KEY OF THE S-EXPRESSION AS COMPUTED BY SXHASH; THIS IS USED BY THE LOADER TO SAVE GCPRO SOME WORK. 6 GLOBALSYM ONE WORD; THE RIGHT HALF IS AN INDEX INTO THE TABLE LSYMS IN LISP. THE INDICATED VALUE IS RETRIEVED, NEGATED IF BIT 4.9 OF THE DATA WORD IS 1, AND ADDED TO THE RIGHT HALF OF THE LAST WORD LOADED INTO BINARY PROGRAM SPACE. THIS ALLOWS LAP CODE TO REFER TO SELECTED LOCATIONS INTERNAL TO LISP WITHOUT GETTING SYMBOLS FROM DDT. 7 GETDDTSYM IF THE FIRST WORD IS -1, THEN THE LOAD OFFSET IF ADDED INTO THE LEFT HALF OF THE WORD MOST RECENTLY LOADED INTO BINARY PROGRAM SPACE (THIS IS HOW LEFT HALF RELOCATION IS ACCOMPLISHED). OTHERWISE, THE FIRST WORD CONTAINS IN BITS 1.1-4.5 A SYMBOL IN SQUOZE CODE. THE LOADER GETS THE VALUE OF THIS SYMBOL FROM DDT IF POSSIBLE, NEGATES IT IF BIT 4.9 IS 1, THEN ADDS THE RESULT TO THE FIELD OF THE LAST WORD LOADED AS SPECIFIED BY BITS 4.6-4.7: 3=ENTIRE WORD 2=AC FIELD ONLY 1=RIGHT HALF ONLY 0=ENTIRE WORD, BUT SWAP HALVES OF VALUE BEFORE ADDING. THESE FOUR FIELDS CORRESPOND TO OPCODE, AC, ADDRESS, AND INDEX FIELDS RESPECTIVELY IN A LAP INSTRUCTION. IF BIT 4.8 IS A 1, THEN ANOTHER WORD FOLLOWS, CONTAINING THE VALUE OF THE SYMBOL AS OBTAINED FROM DDT AT ASSEMBLE TIME. IF THE VERSION NUMBER OF THAT LISP (AS DETERMINED FROM THE SECOND FILE HEADER WORD) IS THE SAME AS THAT OF THE LISP BEING LOADED INTO, THEN THIS VALUE IS USED AND DDT IS NOT CONSULTED AT LOAD TIME; THIS IS FOR SPEED. IF THE VERSION NUMBERS ARE DIFFERENT, THEN DDT IS CONSULTED. 10 ARRAY REF ONE WORD TO BE LOADED, WHOSE RIGHT HALF CONTAINS THE ATOMINDEX OF AN ATOMIC SYMBOL. IF THE SYMBOL HAS AN ARRAY PROPERTY, IT IS FETCHED; OTHERWISE ONE IS CREATED. THE RIGHT HALF OF THE WORD TO BE LOADED IS REPLACED WITH THE ADDRESS OF THE SECOND WORD OF THE ARRAY POINTER (I.E. OF THE TTSAR). IN THIS WAY ACCESSES TO ARRAYS CAN BE OPEN-CODED. 11 UNUSED [ERROR IN FILE] 12 ATOMTABLE INFO A HEADER WORD, POSSIBLY FOLLOWED BY OTHERS, DEPENDING ON BITS 4.7-4.8: IF 0, THE RIGHT HALF IS THE NUMBER OF WORDS FOLLOWING, WHICH CONSTITUTE THE PNAME OF A PNAME-TYPE ATOM, IN THE ORDER OF THEIR APPEARANCE ON A PROPERTY LIST. THE ATOM IS INTERNED. IF 1, THE ONE WORD FOLLOWING IS THE VALUE OF A FIXNUM TO BE CREATED. IF 2, THE FOLLOWING WORD IS THE VALUE OF A FLONUM. IF 3, THE RIGHT HALF IS THE NUMBER OF FIXNUM COMPONENTS OF A BIGNUM FOLLOWING, MOST SIGNIFICANT WORD FIRST. THE HEADER WORD CONTAINS THREE BITS OF THE SIGN OF THE BIGNUM IN BITS 3.1-3.3. THE ATOM THUS CREATED IS ASSIGNED A PLACE IN THE ATOMTABLE MAINTAINED BY THE LOADER (AS AN ARRAY) USING CONSECUTIVE LOCATIONS; FROM THAT POINT ON OTHER DATA ITEMS REFERRING TO THAT ITEM CAN DO SO BY THE INDEX OF THE ATOM IN THIS TABLE. SEE ALSO TYPES 5 AND 16, WHICH ALSO MAKE ENTRIES IN THE ATOMTABLE. 13 ENTRY INFO TWO WORDS. THE LEFT HALF OF THE FIRST WORD IS THE ATOMINDEX OF THE NAME OF THE FUNCTION BEING DEFINED; THE RIGHT HALF THAT OF THE SUBR TYPE (THE PROPERTY UNDER WHICH TO CREATE THE ENTRY POINT, E.G. SUBR OR FSUBR). THE RIGHT HALF OF THE SECOND WORD IS THE LOCATION OF THE ENTRY POINT AS A RELOCATABLE POINTER: THE LOAD OFFSET MUST BE ADDED TO IT. THE LEFT HALF OF THE SECOND WORD CONTAINS INFORMATION USED TO CREATE AN ARGS PROPERTY FOR THE FUNCTION AS SPECIFIED IN THE ORIGINAL LAP CODE. IF THIS HALFWORD IS ZERO, NO ARGS PROPERTY IS CREATED AND ANY ALREADY PRESENT IS REMOVED. OTHERWISE THE HALFWORD IS DIVIDED INTO TWO NINE-BIT BYTES, EACH OF WHICH IS CONVERTED AS FOLLOWS: BYTE RESULT 0 NIL 777 777 N N-1, WHERE N IS NOT 0 OR 777 THESE TWO ITEMS ARE THEN CONSED AND FOR THE ARGS PROPERTY. 14 LOC THE WORD IS A RELOCATABLE QUANTITY SPECIFYING WHERE TO CONTINUE LOADING. IT IS NOT PERMITTED TO LOC BELOW THE ORIGIN OF THE ASSEMBLY. IF THE LOC IS TO A LOCATION HIGHER THAN ANY YET LOADED INTO, THEN FASLOAD ZEROS OUT ALL WORDS ABOVE THAT HIGHEST LOCATION UP TO THE LOCATION SPECIFIED. FASLOAD KEEPS TRACK OF THE HIGHEST LOCATION EVER LOADED INTO; THIS VALUE PLUS ONE BECOMES THE VALUE OF BPORG AT THE END OF ASSEMBLY, REGARDLESS OF THE STATE OF THE LOCATION POINTER WHEN LOADING TERMINATES. 15 PUTDDTSYM FIRST WORD, THE SYMBOL IN SQUOZE CODE. IF BIT 4.9=0, THE SYMBOL IS DEFINED TO DDT IF POSSIBLE WITH THE ADDRESS OF THE WORD OF BINARY PROGRAM SPACE ABOUT TO BE LOADED INTO AS ITS VALUE. IF BIT 4.9=1, THE VALUE IS GOBBLED FROM THE FOLLOWING WORD. BIT 4.8 (OF THE WORD CONTAINING THE SQUOZE) MEANS RELOCATE THE LEFT HALF OF THE VALUE BY THE LOAD OFFSET, AND BIT 4.7 LIKEWISE FOR THE RIGHT HALF. WHETHER OR NOT THE SYMBOL ACTUALLY GETS PUT IN DDT'S SYMBOL TABLE IS A FUNCTION OF THREE CONDITIONS: FIRST, THAT THERE IS A DDT WITH A SYMBOL TABLE; SECOND, THE VALUE OF THE VARIABLE SYMBOLS; THIRD, BIT 4.6 OF THE FIRST PUTDDTSYM WORD. THE FIRST CONDITION OF COURSE MUST BE SATISFIED. IF SO, THEN THE SYMBOL IS PUT IN THE SYMBOL TABLE ONLY IF SYMBOLS HAS A NON-NIL VALUE. FURTHERMORE, IF THAT VALUE IS THE ATOM SYMBOLS ITSELF, THEN THE SYMBOL IS PUT ONLY IF BIT 4.6 IS ON (INDICATING A "GLOBAL" SYMBOL). 16 EVAL MUNGEABLE A SERIES OF WORDS SIMILAR TO THOSE FOR TYPE 5, BUT WITH NO FOLLOWING HASH KEY. AN S-EXPRESSION IS CONSTRUCTED AND EVALUATED. THIS IS USED FOR THE SO-CALLED "MUNGEABLES" IN A FILE OF LAP CODE. IF THE LEFT HALF OF THE LAST WORD IS -1, THE VALUE IS THROWN AWAY. IF IT IS -2, THE VALUE IS ENTERED IN THE ATOMTABLE. 17 END OF BINARY ONE WORD, WHICH MUST BE "*FASL*" IN SIXBIT. THIS SHOULD BE THE LAST DATA WORD IN THE FILE. ANY RELOCATION BYTES LEFT OVER AFTER A TYPE 17 ARE IGNORED. THIS SHOULD BE FOLLOWED EITHER BY END OF FILE OR A WORD FULL OF ^C'S.