mirror of
https://github.com/PDP-10/its.git
synced 2026-01-11 23:53:12 +00:00
233 lines
8.7 KiB
Plaintext
Executable File
233 lines
8.7 KiB
Plaintext
Executable File
|
||
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.
|
||
|