larsbrinkhoff / pdp10-its-disassembler

Disassembler and other tools for files in ITS formats
GNU General Public License v2.0
19 stars 13 forks source link

SYSTEM.DMP[S,SYS] symbol table strange #73

Closed larsbrinkhoff closed 3 years ago

larsbrinkhoff commented 3 years ago

Attached is SYSTEM.DMP[S,SYS]70 from Saildart.org: waits-jun76.zip

Disassembled with dis10 -6 -Sall -Woct, the symbol table looks strange. I.e. FTKL10 and other FT symbols should be 0 or 1.

    Symbol ftkl10 = 3600000000   ( halfkilled local)
    Symbol   ftdm = 3600000000   ( halfkilled local)
    Symbol ftpage = 3614000224   ( halfkilled local)
    Symbol ftdisk = 3614000232   ( halfkilled local)

Maybe the oct word format does something wrong, or the dmp file format should be updated.

larsbrinkhoff commented 3 years ago

I found the symbol table format in https://www.saildart.org/LOADER.MAC[LSP,LSP]


        Symbol Table Format

Word        Description
  0     -1      flags new format symbol table
  1     BN      relative pointer to Block Names
  2     BS      relative pointer to Block Structure
  3     FULLV       relative pointer to full word values
  4     FREES       relative pointer to free space
  5     CLASS1      relative pointer to first class 1 symbol
  6     CLASS2      relative pointer to first class 2 symbol
  7     CLASS3      relative pointer to first class 3 symbol
 10     CLASS4      relative pointer to first class 4 symbol
 11     LASTV       relative pointer to first word beyond
                    the symbol table
 BN     table of RADIX50 block and program names
 BS     table of block and program structure (see below)
 FULLV      table of full word values pointed to by class 4 symbols
 FREES      free space for adding symbols.  initially zero
 CLASS1     Pairs of words for each class 1 symbol.
        First word is RADIX50 of symbol name with type flags
        Second word: Byte(13)bnum(5)0(18)value
        where bnum is an index to BN and BS table.
        Class 1 symbols have values in the range 0 to 377777.

 CLASS2     Same as CLASS1 space, except class2 symbols have
        values in the range of 400000 to 777777.

 CLASS3     Same as CLASS1 space, except class3 symbols have
        non-zero values with zero right halves.  The left
        half of the value is stored in the right half of
        the value word of the symbol entry.

 CLASS4     Pairs of words for each class 4 symbol.
        First word is RADIX50 of symbol name with type flags
        Second word: Byte(13)bnum(5)14(18)vp.
        Bnum is an index to BN and BS table.
        Vp is a pointer, relative to beginning of symbol table,
        to a word in the FULLV table that contains the value.
        Note that the index field is set to 14, so that if 14
        contains the address of the symbol table, you may
        indirect through this word.
        Class 4 values are all values not contained in the
        other classes.

Values are sorted by arithmetic order in each class.  Class 3 values
are considered as right-half quantities while being sorted.

Block Structure space:

All pointers in BS space are relative to BS space (and may be used
to index BN space).  BN (block name) space comes before BS space
in the symbol table.

Words corresponding to program names have left-half links to the next
program name.  Zero terminates this list.  Right-halves are zero. 
Word zero of BS space always corresponds to a program name. 

Words corresponding to block names have left-half links to the BS
space word corresponding to the program containing this block.  The
right-half links to the block immediately containing this block.  The
outermost block's right-half link points to the program name word. 
All blocks that are associated with a particular program are entered
immediately following that program name, and before the next program
name.