-
Notifications
You must be signed in to change notification settings - Fork 13
/
binfmt.101
272 lines (214 loc) · 9.27 KB
/
binfmt.101
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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
BINARY FILE FORMATS
This file documents the formats of absolute binary program
files on ITS, as understood by the LOAD symbolic system
call.
There are two different file formats: "SBLK" files, and
"PDUMP" files. Each has its advantages. An SBLK file is
easier to write, when that must be done "by hand"; it is
usually smaller than a PDUMP file containing the same
information. On the other hand, a PDUMP file can record
the accessibility of the pages dumped, including the fact
that some pages may not exist, and when it is loaded such
pages will be left nonexistent; an SBLK file would lose
that information, and when loaded would fill in all gaps in
the page map, which may be very slow. On the third hand, a
PDUMP file loads a whole page or it loads nothing in the
page, while an SBLK file may specify contents for some
words in a page but leave the others unmentioned; thus,
when a file is to be merge-loaded an SBLK file may be
advantageous.
A. SBLK FILES
An SBLK file contains one or more blocks, each of which
specifies the data to be loaded into one or more
consecutive words of core.
1. RIM10 LOADER
The file begins with an essentially arbitrary prologue,
whose end is marked by a word containing a JRST 1
instruction. The intention of the prologue is to contain
a RIM10-format program which will load the rest of the SBLK
file, assuming that it has been punched on paper tape and
read in using KA-10 "read-in" mode (The one normally used
happens to end with a JRST 1). However, if that mode of
operation is not desired, the JRST 1 may be the first word
of the SBLK file. In any case, the prologue's first word
should be nonzero, so that the file will not appear to be a
PDUMP file.
2. SIMPLE BLOCKS
After the JRST 1 come one or more "simple blocks" (whence
comes "SBLK file"). Each simple block starts with an
AOBJN-pointer to the range of core to be loaded;
explicitly, -<number of words>,,<first word's address>. It
is inadvisable for any block to load more than 1K, or for a
block's range to wrap around from -1 to 0. After the
range-word come as many words of data as the range-word
specifies. The simple block is completed by the checksum
word, which is computed as follows:
(DO ((I 0 (1+ I)) (ACCUM 0))
((> I NUMBER-OF-DATA-WORDS) ACCUM)
(SETQ ACCUM (+ (WORD I) (ROT ACCUM 1))))
where the range-word is treaded as (WORD 0). All SBLK
files MUST be written with correct checksums, but it is not
essential for all readers of SBLK files to check them
(though it is better to do so).
3. START ADDRESS
A simple block always starts with a negative word.
A positive word seen when the beginning of another simple
block was expected, indicates that there are no more simple
blocks in the file. The positive word itself is the "start
instruction" of the file, and should be a jump of some sort.
0 indicates that there is no starting address.
Other Information Blocks
After the start instruction come may come several different
blocks of additional information. Included are the symbol
table, the undefined-symbol-table, and the random-info-block.
Any or all of these may be absent in a given file.
Each of these are in the format of an Simple-block, including
the checksum at the end of each block, which must be present
and correct.
4. SYMBOL TABLE
The symbol table is divided arbitrarily into sections.
Each section looks exactly like a simple block, with zero
as the address to be loaded. The first word is
-<number of data words>,,0; it is followed by that many
words of data, followed by a checksum. After each section
may come another section; encountering the duplicate start
instruction (see 5, below) indicates the nonexistence of
further sections.
The symbol table itself is obtained by stripping out just
the data words of the symbol table sections.
See DDT ORDER for information on the contents of the symbol
table.
5. THE UNDEFINED SYMBOL TABLE
Each section of DDT undefined symbol table starts with a
word containing -<# of data words>,,1 (not 0!) after which
come data words and a checksum.
The two types of symbol table sections may be interspersed
arbitrarily in the file.
6. Indirect Symbol Table Pointer
An indirect file pointer looks just like a symbol table
section except that its data consists of four filenames.
It starts with a word -4,,2 (2 indicates this is an
indirect pointer), followed by the device, fn1, fn2 and
sname (each as a word of sixbit), followed by the
checksum. A file may contain only one such indirect
pointer, and it must be the last block present before the
duplicate start instruction which ends the file.
7. MISCELLANEOUS INFORMATION BLOCKS
A Miscellaneous Info Block looks like a symbol table block
except it consists of sub-blocks of various miscellaneous
info, and begins with a word -<# wds in block>,,3 (the 3
indicates it is a Misc Info block). If there are more than
one of these blocks, the division is not significant, and on
loading into DDT they may be merged. The sub-blocks look
slightly like SBLK's but are entirely contained within one
or more SBLK's and are *NOT* followed by individual
checksums. Only the top-level SBLK's have checksums.
A Misc Info block consists of sub-blocks of the following form:
-<# of words>,,<type>
<data words>
The only currently defined sub-block type is type 1,
Assembly Info: Sub-block type 1
-<# of words (normally 6)>,,1
<sixbit UNAME of person assembling>
<disk format time of assembly>
<source file device>
<source file fn1>
<source file fn2>
<source file sname>
There may only be one of these blocks in a file. It
is created when MIDAS produces the file.
------
Debugging info:
-<# of words>,,2
<various debugging info to be defined soon>
This is intended for taking crash dumps and the like to
save various information that a person debugging it might
find useful. It will not be found in most files; a
separate debugging dump command will be used to generate
it.
8. THE DUPLICATE START INSTRUCTION
This word is a second copy of the start instruction.
It exists to terminate the symbol table, or indicate the
absence of one.
B. PDUMP FILES.
1. INITIAL ZERO
The first word of a PDUMP file is always zero. This is
to make it easy to distinguish PDUMP files from SBLK ones.
2. PAGE MAP
The next 256 words of the file are the file's "page map".
The remaining words in the first page of the file are
unused.
The way a PDUMP file is loaded into a job is that each
of the job's page slots is treated as specified by the
corresponding word in the PDUMP file's page map.
If the page map word is zero, nothing is done to that
page slot in the job. Otherwise, the page map word is
decoded to determine how to obtain the page
to put there.
a. Page-map - English Dictionary
Bit Meaning
400000,, This is an absolute page.
200000,, The job must not share with the
file; the job's page should be
set up using %CBCPY. Note that
%CBCPY will be used in any case
if the page is writeable.
100000,, This page should be shared with
some other page in the job's map.
Should not be present with 400000,,.
400000 This page should be writeable.
200000 This page should be readable.
777 If 400000,, is set, the bottom
bits contain the number of the
page in the system. If 100000,,
is set, they contain the number of
the other page in the job's map
which is to be shared.
These bits are ignored otherwise.
Bits not mentioned should be ignored when reading,
and written as zero.
If neither 400000,, nor 100000,, is set, but either
200000 or 400000 is set, a data page taken from
the PDUMP file itself is put in the job's page slot.
If neither 200000,, nor 400000 is set, the job actually
shares memory with the file; thus, all jobs into
which the file is loaded will share that page.
Otherwise, the file page is copied and the copy is
put in the job's page slot.
b. English - Page-map Dictionary
The meaningful word-patterns appear below.
<access> is either 200000 for read-only, or 600000
for read-write. A star indicates a type of map-word
that requires a corresponding data page in the file.
No page 0
* Pure page 200000
* Impure page 600000
* Unshared pure page 200000,,200000
Absolute page 400000,,<access> <page #>
Note that only PDP6 pages may be writeable.
A sharing of another page in the job
100000,,<access> <page #>
This is to be used when a single data
page is to be loaded into two page slots
(shared). The lower page slot should
specify the page as either pure, impure,
or unshared impure. The remaining page
slot(s) should specify sharing with the first.
3. AC's
Since the AC's are not part of any page, they would not
be saved in one of the data pages. To compensate for
this, they are saved in locations 1000 - 1017 in the
first block of the file.
4. DATA PAGES
When page map words specify data pages, those data pages
follow the page-map page. There must be exactly as many
data pages as there are map entries that require one, and
the correspondence of data pages to such map entries is
made by order in the file or in the map.
5. START INSTRUCTION AND SYMBOL TABLE
After the last data page come a start instruction, a symbol
table, and a duplicate start instruction, just as in an
SBLK file.
;;; Local Modes: :::
;;; Mode:TEXT :::
;;; Fill Column:60 :::