DDT notes:

I don't know very well how DDT is used.  I have guessed everything.  Since the
source code was OCR'ed and assembled, there are probably some bugs in the
program.


Key usage:
* Numeric characters (which must be entered in lower-case mode) are interpreted
  as numbers (either decimal or octal).
* Lower-case alphabetic characters seem to be interpreted as symbol names.
* Upper-case alphabetic characters and non-alphanumeric characters seem to be
  interpreted as commands.  Command names are always a single character.

Concepts:
current address: this is a value that ddt maitains.  The TAB command enables
  you to enter a new value as the current address, whereas the RETURN command
  restores the current address to the default DDT buffer.
current expression: The current expression is stored at the current address,
  and it equates the numbers and lower case symbols you have entered since you
  have executed the last command.

Commands:
* TAB  This command takes the current expression as the new current address,
  and then disassembles the word at this address as a PDP-1 instruction.  The
  word at the new current address will be the new current expression, and
  everything you type will affect the new curetn location.  For instance,
  if you type 6000<tab> (you need to be in lower-case mode to enter '6000'),
  the computer will print out:
   6000/    lio 7403
  which is the disassembly of the instruction located at octal address 6000.
  Everything you will enter until the memory location is changed again (i.e.
  until you press ENTER or TAB) will be entered into location 6000.
* RETURN  This command reinitializes the current address to its default value
  in the DDT buffer.  You should press RETURN when you are done with editing
  a memory location.  For instance, typing 0<tab>123456<enter>0<tab> will
  display whatever was at address 0, then display the new value you have just
  entered (i.e. 123456):
   0/	xxxxx
   0/	jfd 3456
  You may use lower-case symbols, too, e.g. typing 0<tab>lio 1<enter>0<tab>
  will print:
   0/	xxxxx
   0/	lio 1
  (The lio symbol is predefined in DDT, like other PDP-1 assembly mnemonic.)
* ,  This command takes a 3-letter symbol name as a parameter.  It creates a symbol
  with this name, whose value is the current address.
* =  This command prints out the current expression as octal.  For instance
  6000= will print out:
  	6000
* -> (right arrow)  This command prints out the current expression as
  instruction.  For instance lio-> will print out:
  	lio
  (what a surprise!)

Error message:
* ? (printed in red): the command expects a valid current expression as a
  parameter, but none has been entered.
* u: undefined symbol


DDT command list (derived from the DDT source code):

FIO-DEC    CHARACTER         dtb SYMBOL
 CODE     LOWER UPPER        LOWER UPPER
----------------------------------------
  00       Space                 pls
  01        1     "           n     quo      /" means take as flexo codes
  02        2     '           n     sqo      /' means take decimal number
  03        3     ~           n     pbx      /print as bcd
  04        4  (supset)       n     daq      /\supset defines sym as address of Q
  05        5   (or)          n     uni      
  06        6   (and)         n     isc      
  07        7     <           n     pul      /punch lower limit setup
  10        8     >           n     uc8      /> means make corr. and open register
  11        9 (up arrow)      n     fs       /arrow up (forward space)
  20        0 (right arrow)   n     arw      /print as instruction
  21        /     ?           bar   err      
  22        s     S           l     smb      
  23        t     T           l     tbl      /symbol table reader
  24        u     U           l     dec      /octal-decimal switch setup
  25        v     V           l     vfy      
  26        w     W           l     wds      /word search
  27        x     X           l     xec      /execute
  30        y     Y           l     rd       
  31        z     Z           l     zro      /zero registers below ddt
  33        ,     =           com   eql      /comma defines sym as loc /print octal integer
  36          tab                tab         
  40 (n-s middle dot) _       pwd   err      /punch word
  41        j     J           l     jbk      /jump block
  42        k     K           l     kil      
  43        l     L           l     ttl      /title punch and punch format setup
  44        m     M           l     m        /M means mask register
  45        n     N           l     nws      /not word search
  46        o     O           l     oad      
  47        p     P           l     pra      
  50        q     Q           l     q        /Q means last quantity
  51        r     R           l     rad      /octal-relative switch setup
  54        -     +           min   pls      
  55        )     ]           def   bas      /define symbol /closed bracket (bar-symbolic)
  56 (n-s overstrike) |       err   err      
  57        (     [           val   bac      /open paren, sets up value for define /open bracket (bar-constant)
  61        a     A           l     a        /A means accumulator
  62        b     B           l     bk       
  63        c     C           l     cns      /symbolic-constant switch setup
  64        d     D           l     pun      /punch any length block
  65        e     E           l     eas      /effective address search
  66        f     F           l     f        /F means lowest register
  67        g     G           l     bgn      /begin
  70        h     H           l     oct      /octal-decimal switch setup
  71        i     I           l     ir       /I means i-o
  72       Lower Case            lc          
  73        . (multiply)      dot   del      /end of no-eval routines, delete
  74       Upper Case            uc          
  75       Backspace             bs          
  77    Carriage Return          cr          
