-
Notifications
You must be signed in to change notification settings - Fork 4
Clone of https://gitorious.org/lisp-1-5/lisp-1-5 Informatimago's Machine Readable Transcription of the LISP 1.5 (1962) Sources
informatimago/lisp-1-5
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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. ----------------------------------------- ------------- - .
About
Clone of https://gitorious.org/lisp-1-5/lisp-1-5 Informatimago's Machine Readable Transcription of the LISP 1.5 (1962) Sources
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published