Giter Club home page Giter Club logo

lisp-1-5's Introduction

Content-Type: text/plain; charset=iso-8859-1


                   LISP1.5 --  Millésime 1961


Here is a reproduction of the LISP1.5 card deck obtained from the
Listing 'LISP1.5-Bonnie-sBirthdayAssembly.pdf' [1].


This card deck can be assembled with asm7090-2.1.4 [2] applying the
small patch 'asm7090.patch' to get a listing as identical as possible.
asm7090 prints '0' in the generated words for symbols under different
headers, so we cannot make a complete word-for-word comparison of the
generated code from the listing, until we modify asm7090 in this
respect.


The objective is to recover a perforation for performation image of
the Source.  The same columns, the same typoes should be reproduced.
Please send in patches to reduce any difference that remains to:
<[email protected]>.


However, the following differences have been introduced to be able to
assemble the deck with asm7090, or by expendiency:


* The ID columns have not been reproduced, but please, add them and
  send back a patch: they would have a historical interest as they'd
  allow to track the origins and edits of the cards.


* Some tables have not been typed in, but generated automatically. See
  'lisp15.lisp'. It's surprizing that they did not use this technique
  at the time, but seem to have generated by hand everything...  These
  generated cards get an ID beginning with GENER, GPLI, and GPLA,
  followed by a sequence number.

  If you like, please feel free to edit these cards to match the
  Listing.  Note that property lists (GPLI cards) don't even ensure
  the same bit pattern be generated, only the same lisp list (EQUAL).
  However the number of cards, the size of the generated data and the
  placement of each property list should be preserved.


* There are five cards that are not visible on the Listing.  Happily,
  they belong to a table and their contents can be infered.  I've
  added the comment '** ASSUMING THIS IS THIS' to these cards.


* asm7090-2.1.4 doesn't ignore blank cards (it takes them as PZE
  cards), and doesn't consider "errors" after column 11 to be
  comments, so bank cards and cards containing these comments (lisp
  pseudo code) that don't start with a '*' have been prefixed with
  '**'.

* asm7090-2.1.4 outputs to the listing duplicated cards (by the DUP
  directive).  So I added a TITLE and a DETAIL card to get the same
  behavior as the original assembler:

       TITLE                      ** TO AVOID DUP EXPANSION BY ASM7090...
       DUP     1,125              MAKE BUCKETS
               ,,-*+1
       DETAIL                     ** TO AVOID DUP EXPANSION BY ASM7090...

  Happily there's an EJECT following closely so this doesn't shift
  pages.


* asm7090-2.1.4 seem to have  difficulties to parse -)ALST,,-*-1, so
  we intruduced three synonims to be used in the object list table:

  **
  ** OUR ASSEMBLER CAN'T HANDLE -)SYM EXPRESSIONS
  **
  ZZALST SYN )ALST
  ZZ069B SYN )069B
  ZZ069A SYN )069A


* Four emacs comment cards have been added before the END card.
  (Note: it seems asm7090 has some difficulties to process a deck with
  cards beyond the END card).




A few remarks
-------------

No assembler macros used in 7090 LISP1.5 sources!


Apparently, no meta programming applied.  Eg. all tables seems to have
been entirely hand generated!


Not even symbols are much used instead of literal, eg 
           SIR     20                 SET DOT INDICATOR
  instead of:
    IDOT   EQL     20
           SIR     IDOT               SET DOT INDICATOR


We can see the cost of punching cards: typoes in comments aren't
corrected :-)


SYMBOL, $SYMBOL, N$SYMBOL: The assembler provides several name spaces.
The program enters an name space with the HED or HEAD directive.
Labels are referenced across name spaces with the space$label
notation.  There's a default space with no name where labels can be
"exported" (defined SYN to labels inside another name space); labels
in this default name space can be refered with the $label notation.




The 7090: An early Lisp Machine?
--------------------------------

Of course, we all know how CAR/CDR came from the address and decrement
part of 704/7090 instructions.  But tag bits where also present.  The
36-bit words could be considered as:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|opcod|    decrement ( 15-bit)      | tags|   address ( 15-bit)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|s 1 2|3 4 5 6 7 8 9 0 1 2 3 4 5 6 7|8 9 0|1 2 3 4 5 6 7 8 9 0 1 2 3 4 5|
|0 0 0|0 0 0 0 0 0 0 1 1 1 1 1 1 1 1|1 1 2|2 2 2 2 2 2 2 2 2 3 3 3 3 3 3|
|     |                             |     |                             |
 
There are instructions to get or set each of the fields: the operation
code, the decrement, the tags and the address.

STO CLA  store and load a full word (CONS) in the 36-bit accumulator AC.
STP      store the prefix (ie. operation code, ie. "tags for CDR").
STD      store the decrement.
STT      store the tags ("tags for the CAR").
STA      store the address.

SXD LXD  store and load the decrement (CDR) in a 15-bit index register.
SXA LXA  store and load the address   (CAR) in a 15-bit index register.

PXA PDA  move decrement or address between AC (CONS) 
PXD PDX  and an index register.


In addition, there is a processor-level "EVAL": the XEC instruction
that fetches and executes a processor instruction at the specified
address.  So the technique, often used in Lisp, which consists in
passing a first class function to a higher order function can be
applied directly to the processor instruction level.

For more details, see [3].


------------------------------------------------------------------------
[1] http://community.computerhistory.org/scc/projects/LISP/LISP1.5-Bonnie-sBirthdayAssembly.pdf
[2] http://www.cozx.com/~dpitts/ibm7090.html
[3] http://www.bitsavers.org/pdf/ibm/7090/
[4] http://www.bitsavers.org/bits/IBM/www.cozx.com/709x/
[5] http://www.mcjones.org/dustydecks/
[6] http://www.frobenius.com/
------------------------------------------------------------------------


From: Sherman -- Programming the 7090:

    INFORMATION ON TAPE

         Magnetic tapes for the 7090 computer are ½" in width
    and are normally 2400' long.  Information is stored in
    seven channels, in the manner described in the book.
         Data are recorded on tape in one of two modes; the
    difference is usually of little concern to the programmer.
    In the binary mode, information appears as described in
    the book.  In the BCD mode, some bit configurations are
    changed and the check bit is such that there are an even
    number of 1's across the tape width.
         Record gaps are ¾" long.  The ends of files are
    indicated by special marks and/or end-of-file gaps; the
    latter are 3¾" long.

Assuming records of 80 characters, and a density of 1600 b/i,
one record would be 80/1600 =  0.05 inch,
one record + one gap would be 0.05 + 0.75 = 0.80 inch,
the total number of records of one tape would be: 2400*12/0.80 = 36,000 rec.,
and the total capacity of one tape would be: 2,880,000 characters.

Assuming records of 1024 words of 36-bits, ie. 6144 "bytes", at the
same density of 1600 b/i, one record would be 6144/1600 = 3.84 inch,
one record + one gap would be 3.84 + 0.75 = 4.59 inch,
the total number of records of one tape would be: 2400*12/4.59 = 6274 records,
and the total capacity of one tape would be: 6274*1024 = 6,424,576 words,
or 28,910,592 octets.



                                   
              -----------------------------------------
                            -------------
                                  -
                                  .

lisp-1-5's People

Contributors

informatimago avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.