1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-11 23:53:12 +00:00
PDP-10.its/doc/_info_/fasl.format
2016-11-30 17:58:42 +01:00

426 lines
17 KiB
Plaintext
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; 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.