
MIT TX-0 INSTRUCTION SET
------------------------
29 Aug 2004

The original Lincoln Labs TX-0 had only two bits of opcode and no index
register. The machine was moved to room 26-248 at MIT in July 1958 and
after about a year and a half the opcode field was extended to four bits
and an index register was added. 

(ref. Computer Museum Report Vol 8, Spring 1984)

--------------------------------------------------------------
Original TX-0 Registers and Instruction Set
from "A Functional Description of the TX-0 Computer" Oct, 1958
--------------------------------------------------------------

MBR Memory Buffer Register (18 bits)
AC  Accumulator (18 bits)
MAR Memory Address Register (16 bits)
PC  Program Counter (16 bits)
IR  Instruction Register (2 bits)
LR  Live Register (18 bits)
TBR Toggle Switch Buffer Register (18 toggle switches)
TAC Toggle Switch Accumulator (18 toggle switches)

OP    Description
--    -----------

00    sto x   Replace the contents of register x with the contents of the AC
              Let the AC remain the same.
01    add x   Add the word in register x to the contents of the AC and leave
              the sum in the AC
10    trn x   If the sign digit of the accumulator (AC bit 0) is negative (i.e., a one)
              take the next instruction from register x and continue from there.
              If the sign is positive (i.e., a zero ignore this instruction and proceed
              to the next instruction
11    opr x   Execute one of the operate class commands indicated by the number x

      Operate Fields
      --------------
      --1 --- --- --- --- ---   CLL
      --- 1-- --- --- --- ---   CLR
      --- -10 --- --- --- ---   IOS
      --- -11 --- --- --- ---   HLT
      --- --- 111 --- --- ---   P7H
      --- --- 110 --- --- ---   P6H
      --- --- 100 --- --- ---   PNT
      --- --- 010 --- --- ---   DIS
      --- --- --- 10- --- ---   SHR
      --- --- --- 11- --- ---   CYR
      --- --- --- 01- --- ---   MLR
      --- --- --- --1 --- 0--   PEN
      --- --- --- --0 --- 1--   TAC
      --- --- --- --- 1-- ---   COM
      --- --- --- --- -1- ---   PAD
      --- --- --- --- --1 ---   CRY
      --- --- --- --- --- -01   AMB  AC -> MBR
      --- --- --- --- --- -11   TBR  TBR -> MBR
      --- --- --- --- --- -10   LMB  LR -> MBR

      700000  cll  Clear the left nine digital positions of the AC
      640000  clr  Clear the right nine digital positions of the AC
      620000  ios  In-Out Stop
      630000  hlt  Halt the computer
      607000  p7h  Punch holes 1-6 in flexo tape Also punch a 7th hole on tape
      606000  p6h  Sam as p7h but no seventh hole
      604000  pnt  Print one flexowrite charater
      601000  r1c  Read one line of flexo tape
      603000  r3c  Read three lines of flexo tape
      602000  dis  Intesnsify a point on the scope from x,y in AC
      600400  shr  Shift the AC right one place
      600600  cyr  Cycle the AC right one digital position (AC17 -> AC0)
      600100  pen  Read the light pen flip flops 1 and 2 into AC0 and AC1
      600004  tac  Insert a one in each digital position of the AC whereever
                   there is a one in the corresponding digital position of the TAC
      600040  com  Complement every digit in the accumulator
      600020  pad  Partial add AC to MBR
      600010  cry  Partial add the 18 digits of the AC to the corresponding 18 digits
                   of the carry
      600001  amb  Store the contents of the AC in the MBR
      600003  tbr  Store the contents of the TBR in the MBR
      600002  lmb  Store the contents of the LR in the MBR

      Combined Operate Class Commands

      740000  cla  cll + clr                          Clear the AC
      600031  cyl  amb + pad + cry                    Cycle the AC left one digital position
      740040  clc  cll + clr + com                    Clear and complement AC
      622000  dis  ios + dis                          Display (note IOS must be included for in-out cmds)
      760000       ios + cll + clr                    In out stop with AC cleared
      627600       ios + p7h + cyr                    Punch 7 holes and cycle AC right
      626600       ios + p6h + cyr                    Punch 6 holes and cycle AC right
      766000       ios + cll + clr + p6h              Clear the AC and punch a blank space on tape 
      624600       ios + pnt + cyr                    Print and cycle AC right
      627021       ios + p7h + amb + pad              Punch 7 holes and leave AC cleared
      626021       ios + p6h + amb + pad              Punch 6 holes and leave AC cleared
      624021       ios + pnt + amb + pad              Print and leave AC cleared
      741000       cll + clr + ric                    Clear AC and start PETR running (note computer hasn't
                                                      stopped to wait for information
      601031       ric + amb + pad + cry              Start PETR running and cycle AC left
      601600       ric + cyr                          Start PETR running and cycle right
      763000       cll + clr + ios + r3c              Clear AC and read 3 lines of tape
      761000       cll + clr + ios + ric              Clear AC and read one line of tape
      761031       cll + clr + ios + ric + pad + cry  Read 1 line of tape and cycle AC left
      761600       cll + clr + ios + ric + cyr        Read 1 line of tape and cycle right
      740004       cll + clr + tac                    Put contents of TAC in AC
      600030       pad + cry                          Full-add the MBR and AC and leave sum in AC
      740022       cll + clr + lmb + pad              Clear the AC - store LR contents in memory buffer register
                                                      add memory buffer to AC - i.e., store live reg. contents
                                                      in AC (LAC)
      600201       amb + mlr                          Store contents of AC in MBR, store contents of MBR in LR
                                                      i.e., store contents of AC in LR. (ALR)
      600022       lmb + pad                          Store the contents of LR in MBR, partial add AC and MBR
                                                      i.e., partial add LR to AC. (LPD)
      600200       mlr                                Since MLR alone will ahve a clear MBR, this is really 
                                                      clear LR (LRO)
      600032       lmb + pad + cry                    Full-add the LR to the AC (LAD)
      740023       cll + clr + tbr + pad              Store contents of TBR in AC


----------------------------
MIT Modified Instruction Set
----------------------------

AC  18 bit accumulator
XR  14 bit index register
LR  18 bit in-out register (live register)
MBR 18 bit memory buffer register
TBR Toggle Switch Buffer Register (18 toggle switches)
TAC Toggle Switch Accumulator (18 toggle switches)
PF  program flag register (?)

|  OP   |X|          ADR            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Memo M-5001-29 "The Future TX-0 Instruction Code" dated September 23, 1960 
describes these extensions. The notes here were derived from a later document 
"TX-0 Instruction Set" with no author or date.


  sto y        000000 + y      Store
  stx y        020000 + y      Store AC, Indexed
  sxa y        040000 + y      Store Index in Address
  ado y        060000 + y      Add One
  slr y        100000 + y      Store Live Register
  slx y        120000 + y      Store LR Indexed
  stz y        140000 + y      Store Zero
  add y        200000 + y      Add the contents of register y to AC. Contents of y are unchanged
  adx y        220000 + y      Add, indexed
  ldx y        240000 + y      Load Index                    C(y)0 -> C(XR)4   C(y)5-17 -> C(XR)5-17
  aux y        260000 + y      Augment Index                 C(y)0,5-17 + C(XR)  -> C(XR)
  llr y        300000 + y      Load Live Register
  llx y        320000 + y      Load LR, Indexed              C(y + C(XR))  -> C(LR)
  lda y        340000 + y      Load Accumulator              C(y) -> C(AC)
  lax y        360000 + y      Load Accumulator, Indexed     C(y + C(XR)) -> C(AC)
  trn y        400000 + y      Transfer on Negative AC
  tze y        420000 + y      Transfer on Zero
  tsx y        440000 + y      Transfer and Set Index
  tix y        460000          Transfer and Index
  tra y        500000 + y      Transfer                      y -> C(PC)
  trx y        520000 + y      Transfer, Indexed             y + C(XR) -> C(PC)
  tlv y        540000 + y      Transfer on External Level

      OPERATE CLASS MICRO-ORDERS
      --------------------------

  cla  --1 --- --- --- --- ---  Clear AC
  amb  --- 1-- --- --- --- ---  Transfer AC contents to MBR
  cyr  --- --- --- 110 --- ---  Cycle AC contents right one binary position (AC 17 -> AC 0)
  shr  --- --- --- 100 --- ---  Shift AC contents right one binary position (AC 0 unchanged)
  mbl  --- --- --- 01x --- ---  Transfer MBR contents to LR
  xmb  --- --- --- 0x1 --- ---  Transfer XR contents to MBR
  com  --- --- --- --- 1-- ---  Compliment AC
  pad  --- --- --- --- -1- ---  Parital add MBR to AC (for each MBR one, complement the correp AC bit)
  cry  --- --- --- --- --1 ---  A carry digit is a one if in the next least sigmificant digit,
                                either ac=0 and mbr=1 or ac=1 and carry digit=1. The carry digits
                                so determined are partial added to the AC by cry. pad and cry used
                                together give a full one's complement addition of C(MBR) to C(AC)
  anb  --- --- --- --- --- 111  And LR and MBR
  orb  --- --- --- --- --- 101  Or LR into MBR
  lmb  --- --- --- --- --- 01x  Tranfer LR contents to MBR
  mbx  --- --- --- --- --- 0x1  Transfer MBR contents to XR

      OPERATE CLASS COMMANDS WHICH CAN BE USED WITH MICRO-ORDERS SPECIFIED BY BITS 9-17
      ---------------------------------------------------------------------------------
  nop          600000          perform no in-out group operation

  tac          601000          transfer TAC contents to AC (inclusive or)
  tbr          602000          transfer TBR contents to MBR (inclusive or)
  pen          603000          set AC bit 0 from light pen ff and ac bit 1 from light gun ff
  rpf          606000          Read Program Flag register into MBR (inclusive or)
  spf          607000          Set Program Flag register from MBR

  ex0          610000          operate external equipment
  ..           ..
  ex7          617000

  cpy          620000          copy synchronizes transmission of information between io equp & computer
  r1l          621000          read one line of tape from PETR into AC bits 0, 3, 6, 9, 12
  dis          622000          display a point on the scope (AC bis 0-8 = X, 9-17 = Y)
  r3l          623000          read three lines of tape from PETR AC bits 0, 3, 6, 9, 12, 15
  prt          624000          print one six bit flexo character from ac bits 2,5,8,11,14,17
  p6h          626000          punch one six bit line of flexo tape w/o 7th hole from ac 2,5,8,11,14,17
  p7h          627000          same as -6h but with 7th hole

  hlt          630000          halt the computer and sound chime
  cll          631000          Clear Left 9 bits of AC
  clr          632000          Clear Right 9 bits of AC


                OPERATE CLASS INSTRUCTIONS RECOGNIZED BY MIDAS
                ----------------------------------------------
MNEMONIC     OCTAL VALUE                     OPERATION

  opr          600000          No operation
  xro          600001          Clear XR to +0
  lxr          600003          Place LR in XR
  cry          600012          Carry the contents of AC according to bits of LR
  lpd          600022          Logical exclusive or of AC is placed in AC (partial add)
  lad          600032          Add LR to AC
  com          600040          Compliment the AC
  lcd          600072          Contents of LR minus those of AC are placed in AC
  xad          600130          Add index register to accumulator
  xcd          600170          Contents of XR minus those of AC are placed in AC
  lro          600200          Clear LR to +0
  xlr          600300          Place XR in LR
  ixl          600303          Interchange XR and LR
  shr          600400          Shift accumulator right one place, bit 0
                               remains unchanged
  cyr          600600          Cycle AC right one place

  pen          603000          Contents of light pen and light cannon flip-flops replace
                               contents of AC bits 0 and 1. The flip-flops are cleared.

  bsr          604000          Backspace tape unit by one record
  rtb          604004          Read tape binary (odd parity)
  rds          604004          Select tape unit for reading a record
  rew          604010          Rewind tape unit
  wtb          604014          Write tape binary (odd parity)
  wrs          604014          Select tape unit for writing a record
  rtd          604024          Read tape decimal (even parity)
  wtd          604034          Write tape decimal (even parity)

  cpf          607000          The program flag is cleared

  cpy          620000          Transmit information between the live register and
                               selected input-output unit

  dis          622000          Display point on CRT corresponding to contents of AC

  prt          624000          Print one on-line flexo character from bits 2, 5, etc.
  pnt          624600          PRT, then cycle AC right once to set up another character
  typ          625000          Read one character from on-line flexowriter into LR bits 12-17
  p6h          626600          Punch one line of paper tape; 6 holes from bits 2, 5, etc.
                               of AC then cycle right once.
  p7h          627600          Same as p6h, but punch 7th hole

  hlt          630000          Stops computer
  cll          631000          Clear left half of AC to zero
  clr          632000          Clear right half of AC

  axr          640001          Place AC contents in XR
  axo          640021          AXR, then set AC to +0
  cyl          640030          Cycle AC left one place
  alx          640031          AXR, then cycle AC left once
  amz          640040          Add minus zero to AC
  axc          640061          AXR, then set AC to -0
  alr          640200          Place accumulator contents in live register
  rax          640203          Place LR in XR, then place AC in LR
  orl          640205          Logical or of AC and LR is placed in LR
  anl          640207          Logical and of AC and LR is placed in LR
  alo          640220          ALR, then set AC to +0
  all          640230          ALR, then cycle left once
  iad          640232          Interchange and add AC contents are placed in the LR and
                               the previous contents of the LR ar added to AC
  alc          640260          ALR, then set AC to -0
  arx          640601          AXR, then cycle AC right once
  spf          647000          Place AC in program flag register

  dso          662020          DIS, then clear AC
  pno          664020          PRT, then clear AC
  pnc          664060          PRT, then clear AC to -0
  p6o          666020          p6h then clear AC
  p7o          667020          p7h then clear AC

  cla          700000          Clear entire AC to +0
  cax          700001          Clear AC and XR to +0
  lal          700012          Place LR in AC cycled left once
  lac          700022          Place LR in AC
  clc          700040          Clear and complement: set AC to -0
  lcc          700062          Place complement of LR in AC
  laz          700072          Add LR to minus zero in AC
  xal          700110          XAC, then cycle AC left once
  xac          700120          Place index register in accumulator
  xcc          700160          Place complement of XR in accumulator
  cal          700200          Clear AC and LR to +0
  rxe          700322          Place LR in AC, then place XR in LR
  lar          700622          Place LR in AC cycled right once
  tac          701000          Contents of test accumulator are placed in AC
  tbr          702020          Contents of test buffer register are placed in AC
  rpf          706020          The program flag register is placed in AC

  rlc          721000          Read one line paper tape into AC bits 0, 3, etc.
  rlr          721600          rlc, then cycle AC right once
  r3c          723000          Read three lines of paper tape
  p6a          726000          Clear AC and punch a line of blank tape
  ora          740025          Logical or of AC and LR is placed in AC
  ana          740027          Logical and of AC and LR is placed in AC
  anc          740207          ANL, then clear AC
  oro          740205          ORL, then clear AC
  ial          740222          Interchange AC and LR
  p6b          766020          Punch a line of blank tape, but save AC



----------------------------
MIT Modified Instruction Set
March 1961
----------------------------

This is the TX-0 instruction set defined in Macro ii-a 
March 1961. There is no index register, and instructions
marked with a '*' do not appear in MIDAS.


  sto          0
  slr          100000
  add          200000
  llr          300000
  trn          400000
  tra          500000
  opr          600000         NOP
  cry          600012
  lpd          600022
  cyl*         600031
  lad          600032
  com          600040
  amz*         600051
  lcd          600072
  pen          600100         600300 in MIDAS
  orl*         600105 
  ora*         600125
  lro          600200
  alr*         600201         |  logical instrs change?
  ala*         600221         |
  alc*         600261         |
  anl*         600305         |
  ana*         600325         V
  shr          600400
  cyr          600600
  bsr          604000
  rds          604004         No even parity R/W (604024/604034)
  rew          604010
  wrs          604014
  cpf          607000
  spf*         607001
  cpy          620000
  dis          622000
  dsa*         622021
  dsc*         622061
  prt          624000
  pna*         624021
  pnc*         624061
  pnt          624600
  p6a*         626021
  p6h          626600
  p7a*         627021
  p7h          627600
  hlt          630000
  clr*         640000



  

