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_/fasbin.format
2016-11-30 17:58:42 +01:00

233 lines
8.7 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.

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.