-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathREADME
206 lines (140 loc) · 7.53 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
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:
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.
-----------------------------------------
-------------
-
.