Commit | Line | Data |
---|---|---|
7af5ad59 PH |
1 | /2 TD8E INITIALIZER PROGRAM, V7A |
2 | / | |
3 | / | |
4 | / | |
5 | / | |
6 | / | |
7 | / | |
8 | // | |
9 | / | |
10 | / | |
11 | / | |
12 | / | |
13 | /COPYRIGHT (C) 1975, 1977 | |
14 | /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. | |
15 | / | |
16 | / | |
17 | / | |
18 | /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A | |
19 | /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- | |
20 | /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER | |
21 | /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE | |
22 | /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO | |
23 | /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE | |
24 | /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. | |
25 | / | |
26 | / | |
27 | /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT | |
28 | /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL | |
29 | /EQUIPMRNT COROPATION. | |
30 | / | |
31 | /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS | |
32 | /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. | |
33 | / | |
34 | / | |
35 | / | |
36 | / | |
37 | / | |
38 | / | |
39 | \f | |
40 | /DECEMBER 21, 1973 GB/RL/EF/SR | |
41 | ||
42 | /ABSTRACT-- | |
43 | / THE ROUTINE DESCRIBED AND LISTED HERE IS A GENERAL | |
44 | /DATA HANDLER FOR THE TD8E DECTAPE SYSTEM. THE ROUTINE | |
45 | /CONTAINS SEARCH, READ, AND WRITE FUNCTIONS IN A FORMAT | |
46 | /WHICH IS COMPATIBLE WITH OS/8 DEVICE HANDLER CALLING | |
47 | /SEQUENCES. | |
48 | ||
49 | / EXPLANATION: | |
50 | ||
51 | /THIS IS A SAVE FILE, WHICH MUST BE PLACED AS FILE # 1 | |
52 | /ON THE OS/8 BINARIES TAPE. (I.E. BLOCK 7) | |
53 | /FOLLOWING IT MUST BE THE FOLLOWING FILES, EACH 50 (DEC) BLKS LONG: | |
54 | /TDROM.SY | |
55 | /TD12K.SY | |
56 | / | |
57 | /TO CREATE SPECIAL BLOCK 0 FOR THAT TAPE, START THIS PROGRAM AT | |
58 | /LOCATION 200 AND FOLLOW INSTRUCTIONS. | |
59 | ||
60 | /TO THEN PERFORM THE INITIALIZATION FROM THE LIBRARY TAPES, | |
61 | /MERELY PLACE THE BINARY TAPE ON UNIT 0 AND BOOTSTRAP INTO IT. | |
62 | /THEN FOLLOW INSTRUCTIONS. | |
63 | ||
64 | /FILES TDROM.SY AND TD12K.SY ARE MERELY SYSTEM HEADS OF THE | |
65 | /APPROPRIATE SYSTEMS, THEY MAY CONTAIN ANY HANDLERS. | |
66 | ||
67 | /THE BLOCK 0 SPECIAL SECONDARY BOOTSTRAP READS IN THE FIRST | |
68 | /3 PAGES OF TDINIT (WORDS 200-777) AND BRANCHES TO 'STARTUP'. | |
69 | /THIS THEN READS IN THE REMAINDER OF TDINIT WITH ERROR CHECKING. | |
70 | ||
71 | /CODE LOC BLOCK ON BINARY TAPE | |
72 | ||
73 | /CCB 16,17 (THESE ARE DECTAPE BLOCK NUMBERS, NOT OS/8 RECORDS) | |
74 | /0 20 SKIPPED BY BLOCK 0 | |
75 | /200 21 | |
76 | /400 22 | |
77 | /600 23 | |
78 | /1000 24 | |
79 | /1200 25 | |
80 | /1400 26 | |
81 | /1600 27 | |
82 | /2000 30 | |
83 | /2200 31 TDINIT MUST HAVE USEFUL PART END AT OS/8 RECORD 75 | |
84 | /7400 32,33 RECORD 15 CONTAINS IMAGE OF BLOCK 0 | |
85 | ||
86 | /FIXES SINCE FIELD-TEST RELEASE: | |
87 | ||
88 | /1. FIXED BUG RE CLA ON RETRY AFTER ERROR | |
89 | /2. ALLOWED FINAL BOOTSTRAP TO BE INTO A WRITE-LOCKED DEVICE | |
90 | ||
91 | /OS/8 V3D CHANGES: | |
92 | ||
93 | /3. FIXED BUG RE TD8E BUILD (V6B PATCH) | |
94 | \f | |
95 | /THIS ROUTINE CAN BE RE-EDITED AND ASSEMBLED TO PRODUCE | |
96 | /VARIATIONS ON THE BASIC TD8E SYSTEM. ASSEMBLY PARAMETERS | |
97 | /CONTROL: | |
98 | /A) WHAT DRIVES (UNITS 0-7) WILL BE USED | |
99 | /B) THE ORIGIN OF THE TWO PAGE ROUTINE | |
100 | /C) WHAT MEMORY FIELD THE ROUTINE WILL RUN IN | |
101 | /D) THE SIZE OF THE DECTAPE BLOCK TO BE READ/WRITTEN | |
102 | ||
103 | /FOLLOWING ARE THE PARAMETERS SET UP FOR THE STANDARD | |
104 | /DEC VERSION OF THIS ROUTINE: | |
105 | ||
106 | DRIVE=10 /UNITS 0 AND 1 SELECTED | |
107 | ORIGIN=400 /ENTER AT ORIGIN, ORIGIN+4 | |
108 | AFIELD=0 /INITIAL FIELD SETTING | |
109 | MFIELD=00 /AFIELD*10=MFIELD | |
110 | WDSBLK=201 /129 WORDS PER BLOCK | |
111 | ||
112 | /THE USE OF THE PARAMETERS IS AS FOLLOWS: | |
113 | ||
114 | / DRIVE: DRIVE DETERMINES WHICH UNITS WILL BE SELECTED | |
115 | / DRIVE=10 IMPLIES UNITS 0 &1 | |
116 | / DRIVE=20 IMPLIES UNITS 2&3 | |
117 | / DRIVE=30 IMPLIES UNITS 4&5 | |
118 | / DRIVE=40 IMPLIES UNITS 6&7 | |
119 | ||
120 | /ORIGIN: ALTERING ORIGIN CAUSES ASSEMBLY IN A DIFFERENT | |
121 | / MEMORY LOCATION. WHEN CHANGING ORIGIN KEEP IN MIND | |
122 | /THAT THIS IS A TWO PAGE ROUTINE. | |
123 | ||
124 | /AFIELD: AFIELD DETERMINES THE INITIAL FIELD SETTING FOR THE | |
125 | / LOADER. PERMISSIBLE VALUES FOR AFIELD ARE 0 TO 7. | |
126 | ||
127 | /MFIELD: MFIELD IS USED IN A CIF CDF MFIELD INSTRUCTION. | |
128 | / THE VALUE INSERTED FOR MFIELD SHOULD BE 10(8) TIMES | |
129 | / THE VALUE FOR AFIELD. THE PERMISSIBLE VALUES ARE 00-70. | |
130 | ||
131 | /WDSBLK: WDSBLK GOVERNS HOW MANY WORDS THE ROUTINE THINKS ARE | |
132 | / IN A DECTAPE BLOCK. THE STANDARD VALUE IS 201(8) OR | |
133 | / 128 DECIMAL. NOTE THAT THE FUNCTION WORD BIT 10 CAN | |
134 | / BE USED TO SUBTRACT ONE FROM WDSBLK. THE VALUE USED | |
135 | / FOR WDSBLK SHOULD BE THE NUMBER OF WORDS THE TAPE WAS | |
136 | / FORMATTED TO CONTAIN. | |
137 | ||
138 | /IF WE WANT A HANDLER FOR UNITS 2&3 TO RESIDE IN | |
139 | /FIELD 2 AT LOCATION 3000 AND READ/WRITE 256(10) WORDS | |
140 | /PER BLOCK, THE PARAMETERS WOULD BE: | |
141 | / DRIVE=20 | |
142 | / ORIGIN=3000 | |
143 | / AFIELD=2 | |
144 | / MFIELD=20 | |
145 | / WDSBLK=400 | |
146 | \f/THE CALL TO THE SUBROUTINE FOLLOWS BASICALLY THE | |
147 | /CALLING SEQUENCE FOR OS/8 DEVICE HANDLERS. | |
148 | /THE CALLING SEQUENCE IS: | |
149 | ||
150 | / CDF CURRENT | |
151 | / CIF MFIELD /MFIELD=FIELD ASSEMBLED IN | |
152 | / JMS ENTRY /ENTRY=ORIGIN (EVEN NUMBERED DRIVE | |
153 | /AND ORIGIN+4 FOR ODD NUMBERED DRIVE. | |
154 | / ARG1 | |
155 | / ARG2 | |
156 | / ARG3 | |
157 | / ERROR RETURN | |
158 | / NORMAL RETURN | |
159 | ||
160 | /THE ARGUMENTS ARE: | |
161 | ||
162 | /ARG1: FUNCTION WORD BIT0: 0=READ, 1=WRITE | |
163 | / BITS 1-5: # BLOCKS IN OPERATION | |
164 | / BITS 6-8: FIELD OF BUFFER AREA | |
165 | / BIT 9: UNUSED | |
166 | / BIT 10: # OF WORDS/BLOCK. | |
167 | / 0= WDSBLK, 1=WDSBLK-1 | |
168 | / BIT 11: 1=START FORWARD, 0=REVERSE | |
169 | ||
170 | /ARG2: BUFFER ADDRESS FOR OPERATION | |
171 | /ARG3: STARTING BLOCK FOR OPERATION | |
172 | ||
173 | /ERRORS: THE HANDLER DETECTS TWO TYPES OF ERRORS: | |
174 | /A) FATAL ERRORS- PARITY ERROR, TIMING ERROR, | |
175 | / TOO GREAT A BLOCK NUMBER | |
176 | / FATAL ERRORS TAKE ERROR RETURN WITH THE | |
177 | / AC=4000. | |
178 | /B) NON-FATAL- SELECT ERROR. | |
179 | / IF NO PROPER UNIT IS SELECTED, THE ERROR | |
180 | / RETURN IS TAKEN WITH CLEAR AC. | |
181 | /FATAL ERRORS TRY THREE TIMES BEFORE TAKING ERROR RETURN. | |
182 | /THE NORMAL RETURN IS TAKEN AFTER ALL INDICATED | |
183 | /BLOCKS HAVE BEEN TRANSFERRED. THE AC IS CLEAR. | |
184 | ||
185 | /THE TD8E IOT'S ARE: | |
186 | SDSS=7001-DRIVE /SKIP ON SINGLE LINE FLAG | |
187 | SDST=7002-DRIVE /SKIP ON TIMING ERROR | |
188 | SDSQ=7003-DRIVE /SKIP ON QUAD LINE FLAG | |
189 | SDLC=7004-DRIVE /LOAD COMMAND REGISTER | |
190 | SDLD=7005-DRIVE /LOAD DATA REGISTER | |
191 | SDRC=7006-DRIVE /READ COMMAND REGISTER | |
192 | SDRD=7007-DRIVE /READ DATA REGISTER | |
193 | ||
194 | /THE IOT'S IN GENERAL ARE 677X,676X,675X,AND 674X. | |
195 | /THE OTHERS CONTROL UNITS 2-7. | |
196 | \f INITLN=7 /LENGTH OF TDINIT INCLUDING BLOCK 0 IMAGE (IN BLOCKS) | |
197 | CTRLO=20 | |
198 | INCHAR=21 | |
199 | TEMPA=22 | |
200 | ||
201 | ST, CLA /IN CASE CHAINED TO | |
202 | JMP I (CREATE /CREATE BLOCK 0 -IN HOUSE ONLY - | |
203 | STARTUP,JMS I (DTA0 /TD8E S.R. IS IN 200 NOW | |
204 | 603 /READ 3 BLOCKS INTO 1000-2377 | |
205 | 1000 | |
206 | 24 /GET REST OF INIT | |
207 | JMP FERR /REALLY BAD! | |
208 | TAD (SKP CLA | |
209 | DCA ST /ALLOWS HIM TO RESTART AT 200 | |
210 | RE, JMS MSG | |
211 | VNO | |
212 | JMS I (CHKCOR /USE ROM OR 12K SYSTEM | |
213 | JMS MSG | |
214 | INIT | |
215 | JMS I (MOVSYS | |
216 | JMS MSG | |
217 | SWTCH | |
218 | JMS TTY /PAUSE | |
219 | TAD INCHAR | |
220 | TAD (-32 | |
221 | SNA CLA | |
222 | JMP I (ZERO /HE TYPED ^Z | |
223 | CPY, JMS MSG | |
224 | COPY | |
225 | TAD (160 | |
226 | DCA B1 | |
227 | TAD (160 | |
228 | DCA B2 | |
229 | RD, JMS I (DTA0 | |
230 | 3612 | |
231 | 0 | |
232 | B1, 0 | |
233 | JMS I (ER1 | |
234 | JMS I (DTA1 | |
235 | 7612 | |
236 | 0 | |
237 | B2, 0 | |
238 | JMS I (ER1 | |
239 | TAD B1 | |
240 | TAD (36 | |
241 | DCA B1 | |
242 | TAD B1 | |
243 | DCA B2 | |
244 | TAD B1 /COPY OVER ABOVE 2700 | |
245 | TAD (-2600 /*** | |
246 | SPA CLA | |
247 | JMP RD /KEEP GOING | |
248 | JMS I (DTA0 /COPY DIRECTORY | |
249 | 1412 | |
250 | 0 | |
251 | 2 | |
252 | JMS I (ER1 | |
253 | JMS I (DTA1 | |
254 | 5412 | |
255 | 0 | |
256 | 2 | |
257 | JMS I (ER1 | |
258 | RESTRT, JMS MSG | |
259 | DISMNT /SETUP TAPES FOR INIT | |
260 | JMS TTY | |
261 | JMP I (BOOT | |
262 | \fTTY, 0 | |
263 | JMS MSG | |
264 | STRIKE | |
265 | KCC | |
266 | KSF | |
267 | JMP .-1 | |
268 | KRB | |
269 | AND (177 | |
270 | DCA INCHAR | |
271 | JMP I TTY | |
272 | ||
273 | MSG, 0 /MESSAGE TYPER | |
274 | DCA CTRLO | |
275 | JMS I (CRLF | |
276 | TAD I MSG | |
277 | DCA TEMPA | |
278 | ISZ MSG | |
279 | WTMSG, TAD I TEMPA | |
280 | CLL RTR;RTR;RTR | |
281 | JMS PNCH | |
282 | TAD I TEMPA | |
283 | JMS PNCH | |
284 | ISZ TEMPA | |
285 | JMP WTMSG | |
286 | ||
287 | PNCH, 0 | |
288 | AND (77 | |
289 | SNA /IGNORE NULL. _ MEANS CR/LF | |
290 | JMP I PNCH /? MEANS TERMINATE | |
291 | TAD (-37 /IS IT _? | |
292 | SNA | |
293 | JMS I (CRLF /YES | |
294 | TAD (-40 /MAYBE ? | |
295 | SNA | |
296 | JMP I MSG | |
297 | TAD (40 | |
298 | SPA | |
299 | TAD (100 | |
300 | TAD (237 | |
301 | JMS I (TTYOUT | |
302 | JMP I PNCH | |
303 | \fFERR, HLT | |
304 | CLA | |
305 | JMP STARTUP | |
306 | PAGE | |
307 | \f/ THIS HANDLER USES DECTAPE BLOCKS NOT OS/8 BLOCKS ! | |
308 | ||
309 | *ORIGIN | |
310 | ||
311 | DTA0, 0 /ENTRY POINT FROM UNIT 0 | |
312 | CLA CLL /0 TO LINK | |
313 | JMP DTA1X | |
314 | C1000, 1000 | |
315 | BLOCK, | |
316 | DTA1, 0 /UNIT 2 ENTRY | |
317 | CLA CLL CML /1 TO LINK | |
318 | TAD DTA1 | |
319 | DCA DTA0 /PICK UP ARGS AT DTA0 | |
320 | DTA1X, RAR | |
321 | DCA UNIT /LINK TO UNIT POSITION | |
322 | RDF | |
323 | TAD C6203 /GET DATA FIELD AND SETUP RETURN | |
324 | DCA LEAVE | |
325 | TAD I DTA0 /GET FUNCTION WORD | |
326 | SDLD /PUT FUNCTION INTO DATA REGISTER | |
327 | CLL RTR /AC STILL HAS FUNCTION. PUT # WORDS PER | |
328 | /BLOCK INTO LINK | |
329 | SZL CLA /KNOCK ONE OFF WDSBLK? | |
330 | IAC /YES | |
331 | TAD MWORDS | |
332 | DCA WCOUNT /STORE MASTER WORD COUNT | |
333 | ISZ DTA0 /TO BUFFER | |
334 | TAD I DTA0 | |
335 | DCA BUFF | |
336 | ISZ DTA0 /TO BLOCK NUMBER | |
337 | TAD I DTA0 | |
338 | DCA BLOCK | |
339 | ISZ DTA0 /POINT TO ERROR EXIT | |
340 | CIF CDF MFIELD /TO ROUTINES DATA FIELD | |
341 | SDRD /GET FUNCTION INTO AC | |
342 | CLL RAL | |
343 | AND CM200 /GET # PAGES TO XFER | |
344 | DCA PGCT | |
345 | SDRD | |
346 | C374, AND C70 /GET FIELD FOR XFER | |
347 | TAD C6203 /FORM CDF N | |
348 | DCA XFIELD /IF=0 AND DF=N AT XFER. | |
349 | CLA CLL CMA RTL | |
350 | DCA TRYCNT /3 ERROR TRIES | |
351 | TAD UNIT /TEST FOR SELECT ERROR | |
352 | SDLC | |
353 | SDRC | |
354 | AND C100 | |
355 | SZA CLA | |
356 | JMP FATAL-1 | |
357 | SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG. | |
358 | DCA I CXFUN | |
359 | TAD WCOUNT | |
360 | DCA I CXWCT | |
361 | SDRD /GET MOTION BIT TO LINK | |
362 | CLL RAR | |
363 | JMP GO /AND START THE MOTION. | |
364 | RWCOM, SDST /ANY CHECKSUM ERRORS? | |
365 | SZA CLA /OR CHECKSUM ERRORS? | |
366 | JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS | |
367 | /SET AT RWCOM. GETCHK SETS IT. | |
368 | TAD PGCT /NO ERROR..FINISHED XFER? | |
369 | TAD CM200 | |
370 | SNA | |
371 | JMP EXIT /ALL DONE. GET OUT | |
372 | DCA PGCT /NEW PAGE COUNT | |
373 | ISZ BLOCK /NEXT BLOCK TO XFER | |
374 | TAD WCOUNT /FORM NEXT BUFFER ADDRESS | |
375 | CIA | |
376 | TAD BUFF | |
377 | DCA BUFF | |
378 | CLL CML /FORCES MOTION FORWARD | |
379 | GO, CLA CML RTR /LINK BECOMES MOTION BIT | |
380 | TAD C1000 | |
381 | TAD UNIT /PUT IN 'GO' AND UNIT # | |
382 | SDLC /LOOK FOR BLOCK NO. | |
383 | JMS I CRDQUD /WAIT AT LEAST 6 LINES TO LOOK | |
384 | JMS I CRDQUD | |
385 | CM200, 7600 /COULD HAVE SAVED A LOC. HERE | |
386 | SRCH, SDSS | |
387 | JMP .-1 /WAIT FOR SINGLE LINE FLAG | |
388 | SDRC | |
389 | CLL RTL /DIRECTION TO LINK. INFO BITS | |
390 | /ARE SHIFTED. | |
391 | AND C374 /ISOLATE MARK TRACK BITS | |
392 | TAD M110 /IS IT END ZONE? | |
393 | SNA /THE LINK STAYS SAME THRU THIS | |
394 | JMP ENDZ | |
395 | TAD M20 /CHECK FOR BLOCK MARK | |
396 | SZA CLA | |
397 | JMP SRCH | |
398 | SDRD /GET THE BLOCK NUMBER | |
399 | SZL /IF WE ARE IN REVERSE, LOOK FOR 3 | |
400 | /BLOCKS BEFORE TARGET BLOCK. THIS | |
401 | /ALLOWS TURNAROUND AND UP TO SPEED. | |
402 | TAD C3 /REVERSE | |
403 | CMA | |
404 | TAD BLOCK | |
405 | CMA /IS IT RIGHT BLOCK? | |
406 | SNA | |
407 | JMP FOUND /YES..HOORAY! | |
408 | M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT? | |
409 | /ABOVE SNA IS SUPERFLUOUS. | |
410 | JMP SRCH /YES | |
411 | ENDZ, SDRC /WE ARE IN THE END ZONE | |
412 | CLL RTL /DIRECTION TO LINK | |
413 | CLA /ARE WE IN REVERSE? | |
414 | JMP GO /YES..TURN US AROUND | |
415 | /IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR | |
416 | TRY3, CLA | |
417 | ISZ TRYCNT | |
418 | JMP GO /TRY 3 TIMES | |
419 | JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN | |
420 | EXIT, ISZ DTA0 | |
421 | CLL CML /AC=0 ON NORMAL RETURN | |
422 | FATAL, TAD UNIT | |
423 | SDLC /STOP THE UNIT | |
424 | CLA CML RAR | |
425 | LEAVE, HLT | |
426 | JMP I DTA0 | |
427 | ||
428 | \fC6203, 6203 | |
429 | CRDQUD, RDQUAD | |
430 | WCOUNT, 0 | |
431 | BUFF, 0 | |
432 | MWORDS, -WDSBLK | |
433 | UNIT, 0 | |
434 | CXFUN, XFUNCT | |
435 | M20, -20 | |
436 | PGCT, 0 | |
437 | CXWCT, XWCT | |
438 | C100, 100 | |
439 | TRYCNT, -3 | |
440 | ||
441 | ||
442 | *ORIGIN+170 | |
443 | FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION? | |
444 | JMP GO /WRONG..TURN AROUND | |
445 | TAD UNIT /PUT UNIT INTO LINK | |
446 | CLL RAL /AC IS NOW 0 | |
447 | C70, 70 /********DON'T MOVE THIS!!!!****** | |
448 | C3, 3 | |
449 | TAD BUFF /GET BUFFER ADDRESS | |
450 | XFIELD, HLT /INTO NEXT PAGE | |
451 | \f *ORIGIN+200 | |
452 | CIF MFIELD | |
453 | DCA XBUFF /SAVE ADDRESS | |
454 | RAR /NOW GET UNIT # | |
455 | DCA XUNIT | |
456 | SDRC | |
457 | SDLC | |
458 | REVGRD, SDSS | |
459 | JMP .-1 /LOOK FOR REVERSE GUARD | |
460 | SDRC | |
461 | AND K77 | |
462 | TAD CM32 /IS IT REVERSE GUARD? | |
463 | SZA CLA | |
464 | JMP REVGRD /NO.KEEP LOOKING | |
465 | TAD XWCT | |
466 | DCA WORDS /WORD COUNTER | |
467 | TAD XFUNCT /GET FUNCTION READ OR WRITE | |
468 | K7700, SMA CLA | |
469 | JMP READ /NEG. IS WRITE | |
470 | WRITE, SDRC | |
471 | AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR | |
472 | CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS | |
473 | SZA CLA | |
474 | JMP I CFATAL /FATAL ERROR. LINK MUST BE ON | |
475 | JMS RDQUAD /NO ONE EVER USES THIS WORD! | |
476 | C7600, 7600 | |
477 | TAD C1400 | |
478 | TAD XUNIT /INITIATE WRITE MODE | |
479 | SDLC | |
480 | CLA CMA | |
481 | JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM | |
482 | CLA CMA | |
483 | DCA CHKSUM | |
484 | WRLP, TAD I XBUFF /GLORY BE! THE ACTUAL WRITE! | |
485 | JMS WRQUAD | |
486 | ISZ XBUFF /BUMP CORE POINTER | |
487 | K77, 77 /ABOVE MAY SKIP | |
488 | ISZ WORDS /DONE THIS BLOCK? | |
489 | JMP WRLP /NOT YET..LOOP A WHILE | |
490 | TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLOCK? | |
491 | CLL RTR /IF NO, WRITE A 0 WORD | |
492 | SZL CLA | |
493 | JMS WRQUAD /WRITE A WORD OF 0 | |
494 | JMS GETCHK /DO THE CHECK SUM | |
495 | JMS WRQUAD /WRITE FORWARD CHECKSUM | |
496 | JMS WRQUAD /ALLOW CHECKSUM TO BE WRITTEN | |
497 | JMP I CRWCOM | |
498 | \fREAD, JMS RDQUAD | |
499 | JMS RDQUAD | |
500 | JMS RDQUAD /SKIP CONTROL WORDS | |
501 | AND K77 | |
502 | TAD K7700 /TACK 7700 ONTO CHECKSUM. | |
503 | DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY | |
504 | RDLP, JMS RDQUAD | |
505 | JMS EQUFUN /COMPUT CHECKSUM AS WE GO | |
506 | DCA I XBUFF /IT GETS CONDENSED LATER | |
507 | ISZ XBUFF | |
508 | C300, 300 /PROTECTION | |
509 | ISZ WORDS /DONE THIS OP? | |
510 | JMP RDLP /NO SUCH LUCK | |
511 | TAD XFUNCT /IF OP WAS FOR WDSBLK-1, READ AND | |
512 | CLL RTR /CHECKSUM THE LAST TAPE WORD | |
513 | SNL CLA | |
514 | JMP RDLP2 | |
515 | JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK | |
516 | JMS EQUFUN /CHECKSUM IT | |
517 | RDLP2, JMS RDQUAD /READ CHECKSUM | |
518 | AND K7700 | |
519 | JMS EQUFUN | |
520 | JMS GETCHK /GET SIX BIT CHECKSUM | |
521 | JMP I CRWCOM | |
522 | ||
523 | WRQUAD, 0 /WRITE OUT A 12 BIT WORD | |
524 | JMS EQUFUN /ADD THIS TO CHECKSUM | |
525 | SDSQ /SKIP ON QUADLINE FLAG | |
526 | JMP .-1 | |
527 | SDLD /LOAD DATA ONTO BUS | |
528 | CLA /SDLD DOESN'T CLEAR AC | |
529 | JMP I WRQUAD | |
530 | ||
531 | RDQUAD, 0 /READ A 12 BIT WORD | |
532 | SDSQ | |
533 | JMP .-1 | |
534 | SDRD /READ DATA | |
535 | JMP I RDQUAD | |
536 | ||
537 | \fXUNIT, | |
538 | EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM | |
539 | CMA | |
540 | DCA EQUTMP /ACTUALLY CHECKSUMS ON DECTAPE ARE | |
541 | TAD EQUTMP /EQUIVALENCE OF ALL WORDS IN A RECORD | |
542 | AND CHKSUM /SIX BITS AT A TIME. BUT SINCE EQUIVALENCE | |
543 | CIA /IS ASSOCIATIVE, WE CAN DO IT 12 | |
544 | CLL RAL /BITS AT A TIME AND CONDENSE LATER. | |
545 | TAD EQUTMP /THIS ROUTINE USES THESE IDENTITIES: | |
546 | TAD CHKSUM /A+B=(A.XOR.B)+2*(A.AND.B) | |
547 | DCA CHKSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) | |
548 | TAD EQUTMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) | |
549 | CMA | |
550 | JMP I EQUFUN | |
551 | ||
552 | GETCHK, 0 /FORM 6 BIT CHECKSUM | |
553 | CLA | |
554 | TAD CHKSUM | |
555 | CMA | |
556 | CLL RTL | |
557 | RTL | |
558 | RTL | |
559 | JMS EQUFUN | |
560 | CLA CLL CML /FORCES LINK ON AT RWCOM | |
561 | TAD CHKSUM | |
562 | AND K7700 | |
563 | JMP I GETCHK | |
564 | ||
565 | CFATAL, FATAL | |
566 | CRWCOM, RWCOM | |
567 | XFUNCT, 0 | |
568 | CM32, -32 | |
569 | C1400, 1400 | |
570 | CHKSUM, 0 | |
571 | WORDS, 0 | |
572 | XBUFF, 0 | |
573 | XWCT, 0 | |
574 | EQUTMP, 0 | |
575 | \fTBL, CPY | |
576 | ZER | |
577 | LVAL | |
578 | PAGE | |
579 | \fCREATE, JMS I (MSG | |
580 | WRITOUT | |
581 | JMS I (TTY | |
582 | JMS I (DTA1 | |
583 | 4202 | |
584 | 7400 | |
585 | 0 | |
586 | JMS ER1 | |
587 | JMS I (MSG | |
588 | OK | |
589 | HLT | |
590 | JMP I (7605 | |
591 | ROMSW=17 | |
592 | ||
593 | /THIS ROUTINE COPIES THE SYSTEM ONTO UNIT 1. | |
594 | /IT COPIES FROM A SYSTEM HEAD FILE ON TAPE ON UNIT 0. | |
595 | /UNIT 0 MUST BE THE OS/8 BINARIES TAPE | |
596 | /1ST FILE: TDINIT.PA | |
597 | /2ND FILE: TDROM.SY | |
598 | /3RD FILE: TD12K.SY | |
599 | ||
600 | MOVSYS, 0 | |
601 | JMS I (TTY | |
602 | TAD ROMSW /GET ADDRESS OF START OF SYSTEM HEAD | |
603 | SNA CLA | |
604 | TAD (62^2 /12 K | |
605 | TAD (7+INITLN^2 /ROM | |
606 | DCA HEAD | |
607 | JMS I (DTA0 /READ PAGE 0 | |
608 | 212 | |
609 | 0 | |
610 | HEAD, HLT | |
611 | JMS ER1 | |
612 | CDF 10 | |
613 | TAD I (200 | |
614 | CDF 0 | |
615 | TAD (-4207 /CHECK FOR GOOD SYSTEM HEAD | |
616 | SZA CLA | |
617 | JMP WRGSYS | |
618 | JMS I (DTA1 | |
619 | 4212 | |
620 | 0 | |
621 | 0 | |
622 | JMS ER1 | |
623 | STL CLA RTL /2 | |
624 | TAD HEAD | |
625 | DCA KBM | |
626 | JMS I (DTA0 | |
627 | 0012 /READ 40 SYSTEM BLOCKS 7-26 (PAGES 16-55) | |
628 | 0 | |
629 | KBM, HLT | |
630 | JMS ER1 | |
631 | JMS I (DTA1 | |
632 | 4012 | |
633 | 0 | |
634 | 7^2 /WRITE KBM ETC | |
635 | JMS ER1 | |
636 | TAD HEAD | |
637 | TAD (43^2 | |
638 | DCA CD | |
639 | JMS I (DTA0 | |
640 | 3613 /READ 51-67 (PAGES 122-157) | |
641 | 0 | |
642 | CD, HLT | |
643 | JMS ER1 | |
644 | JMS I (DTA1 | |
645 | 7613 | |
646 | 0 | |
647 | 43+6^2 | |
648 | JMS ER1 | |
649 | JMP I MOVSYS | |
650 | \fWRGSYS, JMS I (MSG | |
651 | WRONG | |
652 | JMS I (TTY | |
653 | JMP I (CPY | |
654 | ||
655 | ER1, 0 | |
656 | CLA | |
657 | JMS I (MSG | |
658 | IOERR | |
659 | JMS I (TTY | |
660 | TAD I (INCHAR | |
661 | TAD (-101 | |
662 | SNA CLA /A? | |
663 | JMP I (RE /YES, ABORT | |
664 | TAD ER1 | |
665 | TAD (-5 | |
666 | DCA ER1 /BACK UP, POINT TO CALL | |
667 | JMP I ER1 /RETRY | |
668 | ||
669 | CRLF, 0 | |
670 | TAD (215 | |
671 | JMS TTYOUT | |
672 | TAD (212 | |
673 | JMS TTYOUT | |
674 | JMP I CRLF | |
675 | ||
676 | TTYOUT, 0 | |
677 | DCA TM | |
678 | JMS I (TSTKBD | |
679 | TAD CTRLO | |
680 | SZA CLA | |
681 | JMP I TTYOUT | |
682 | TAD TM | |
683 | TLS | |
684 | TSF | |
685 | JMP .-1 | |
686 | CLA | |
687 | JMP I TTYOUT | |
688 | \fTM, 0 | |
689 | PAGE | |
690 | \fCHKCOR, 0 /DETERMINE CONFIGURATION | |
691 | CDF 70 /CHECK FOR ROM | |
692 | TAD I (7503 | |
693 | TAD (-SDSS | |
694 | SZA CLA | |
695 | JMP TRY12K | |
696 | CDF 0 | |
697 | JMS I (MSG | |
698 | ROM8K | |
699 | CLA IAC | |
700 | ENTR12, DCA ROMSW /SET INDICATOR | |
701 | CDF 0 | |
702 | JMP I CHKCOR | |
703 | TRY12K, CDF 20 | |
704 | TAD ENTR12 | |
705 | DCA I (7600 | |
706 | TAD I (7600 | |
707 | CIA | |
708 | TAD ENTR12 | |
709 | CDF 0 | |
710 | SNA CLA | |
711 | JMP OK12 | |
712 | JMS I (MSG | |
713 | HRDWR /NO HARDWARE AROUND! | |
714 | HLT | |
715 | JMP .-1 | |
716 | OK12, JMS I (MSG | |
717 | TD8E12 | |
718 | JMP ENTR12 | |
719 | \fIN, 0 | |
720 | ||
721 | ZERO, JMS I (MSG | |
722 | SPECIAL | |
723 | JMS I (TTY | |
724 | TAD INCHAR | |
725 | TAD (-62 | |
726 | DCA IN | |
727 | TAD IN | |
728 | SPA | |
729 | CIA | |
730 | CLL RAR /ALLOW ONLY -1, 0, 1 | |
731 | SZA CLA | |
732 | JMP ZERO+1 | |
733 | TAD IN | |
734 | TAD (TBL+1 | |
735 | DCA IN | |
736 | TAD I IN | |
737 | DCA IN | |
738 | JMP I IN /JUMP TO APPROPRIATE ROUTINE | |
739 | ||
740 | ZER, JMS I (MSG | |
741 | ZERY | |
742 | JMS I (DTA1 | |
743 | 4202 | |
744 | MTDIR | |
745 | 2 | |
746 | JMS I (ER1 | |
747 | JMP I (RESTRT | |
748 | ||
749 | LVAL, JMS I (MSG | |
750 | PRES | |
751 | JMP I (RESTRT | |
752 | \fMTDIR, -1 | |
753 | 70 /SYSTEM TAPE | |
754 | 0 | |
755 | 0 | |
756 | -1 /1 EMPTY FILE | |
757 | 0 | |
758 | 6437+70 /-LENGTH OF DECTAPE | |
759 | ||
760 | BOOT, TAD ROMSW | |
761 | SNA CLA | |
762 | JMP TDBOOT | |
763 | JMS I (DTA0 /ROM BOOT | |
764 | 202 | |
765 | 7400 | |
766 | 0 /READ IN BLOCK 0 | |
767 | JMS I (ER1 | |
768 | TAD (CDF 10 | |
769 | JMS MOVE | |
770 | 7400 | |
771 | JMP I (7605 | |
772 | ||
773 | TDBOOT, JMS I (DTA0 | |
774 | 202 | |
775 | 7400 | |
776 | 0 | |
777 | JMS I (ER1 | |
778 | JMS I (DTA0 | |
779 | 202 | |
780 | 7000 | |
781 | 66^2 | |
782 | JMS I (ER1 | |
783 | TAD (CDF 10 | |
784 | JMS MOVE | |
785 | 7000 | |
786 | TAD (CDF 20 | |
787 | JMS MOVE | |
788 | 7200 | |
789 | JMP I (7605 | |
790 | \f XRIN=11 | |
791 | XROUT=12 | |
792 | ||
793 | MOVE, 0 | |
794 | DCA MOVCDF | |
795 | STA | |
796 | TAD I MOVE | |
797 | DCA XRIN | |
798 | TAD (-200 /MOVE 200 WORDS TO LOCATION 7600 | |
799 | DCA MVCNT | |
800 | ISZ MOVE | |
801 | TAD (7577 | |
802 | DCA XROUT | |
803 | MOVLUP, TAD I XRIN | |
804 | MOVCDF, HLT | |
805 | DCA I XROUT | |
806 | CDF 0 | |
807 | ISZ MVCNT | |
808 | JMP MOVLUP | |
809 | JMP I MOVE | |
810 | ||
811 | MVCNT, -200 | |
812 | PAGE | |
813 | \fVNO, TEXT /TD8E INITIALIZER PROGRAM VERSION 7A ?/ | |
814 | INIT, TEXT /MOUNT A CERTIFIED DECTAPE ON UNIT 1 WRITE-ENABLED_/ | |
815 | TEXT /ALWAYS KEEP ORIGINAL SYSTEM DECTAPES WRITE-LOCKED?/ | |
816 | STRIKE, TEXT /STRIKE A CHARACTER TO CONTINUE?/ | |
817 | DISMNT, TEXT /REMOVE AND SAVE TAPE ON UNIT 0_/ | |
818 | TEXT /TAKE NEW TAPE (ON UNIT 1) WHICH WAS JUST CREATED_/ | |
819 | TEXT /AND PLACE IT ON UNIT 0_/ | |
820 | TEXT \IT IS YOUR NEW OS/8 SYSTEM TAPE?\ | |
821 | SWTCH, TEXT /DISMOUNT SYSTEM TAPE #2 FROM UNIT 0 AND SAVE IT_/ | |
822 | TEXT /MOUNT ORIGINAL SYSTEM TAPE #1 ON UNIT 0_/ | |
823 | TEXT /PREPARE TO COPY FILES OVER?/ | |
824 | OK, TEXT /OK?/ | |
825 | WRITOUT,TEXT /READY TO CREATE BLOCK 0 OF UNIT 1?/ | |
826 | COPY, TEXT /COPYING FILES FROM UNIT 0 TO UNIT 1?/ | |
827 | ZERY, TEXT /ZEROING DIRECTORY ON TAPE UNIT 1?/ | |
828 | PRES, TEXT /DIRECTORY ON UNIT 1 PRESERVED?/ | |
829 | WRONG, TEXT /NOT ORIGINAL OS8 SYSTEM TAPE #2_/ | |
830 | TEXT /MOUNT CORRECT TAPE ON UNIT 0?/ | |
831 | ROM8K, TEXT /8K ROM SYSTEM?/ | |
832 | TD8E12, TEXT /12K SYSTEM?/ | |
833 | HRDWR, TEXT /NEED ROM OR 12K?/ | |
834 | IOERR, TEXT /FATAL IO ERR_/ | |
835 | TEXT /TYPE A TO ABORT AND START OVER AGAIN_/ | |
836 | TEXT \TYPE ANY OTHER CHARACTER TO RETRY THIS I/O OPERATION?\ | |
837 | SPECIAL,TEXT /TYPE 1 TO COPY FILES FROM UNIT 0 TO UNIT 1_/ | |
838 | TEXT /TYPE 2 TO ZERO THE DIRECTORY OF UNIT 1_/ | |
839 | TEXT /TYPE 3 TO LEAVE THE DIRECTORY OF UNIT 1 ALONE?/ | |
840 | \fTSTKBD, 0 | |
841 | KSF | |
842 | JMP I TSTKBD | |
843 | KRS | |
844 | AND (177 | |
845 | TAD (-3 | |
846 | SNA | |
847 | JMP I (RE /^C | |
848 | TAD (3-17 | |
849 | SZA CLA | |
850 | JMP NO | |
851 | CLA IAC | |
852 | DCA CTRLO | |
853 | NO, KCC | |
854 | JMP I TSTKBD | |
855 | PAGE | |
856 | \f/TD8E SYSTEM INITIALIZER | |
857 | /THIS CODE IS PLACED ON THE BINARY TAPE | |
858 | /IN RECORD 0. WHEN THE 7470 OR STANDARD TD8E BOOTSTRAP | |
859 | /IS EXECUTED, THIS PROGRAM READS THE REST OF THE INIT | |
860 | /SYSTEM FROM THE FIRST FILE ON THE TAPE, AND | |
861 | /STARTR EXECUTION OF IT. A SHORT PROGRAM IS HERE | |
862 | /INCLUDED TO WRITE RECORD 0 ON THE TAPE. THE START ADDRESS | |
863 | /OF THAT CODE IS 200. | |
864 | ||
865 | SDSS=6771 | |
866 | SDST=6772 | |
867 | SDSQ=6773 | |
868 | SDLC=6774 | |
869 | SDLD=6775 | |
870 | SDRC=6776 | |
871 | SDRD=6777 | |
872 | *7420 | |
873 | NOPUNCH | |
874 | *7400 | |
875 | ENPUNCH | |
876 | TAD K177 /INIT FOR TAPE READ | |
877 | DCA 10 | |
878 | NUBLK, TAD KM200 /SET BLOCK WORD COUNT | |
879 | DCA WCNT | |
880 | NOT, JMS GET /GET BLOCK # FORWARD | |
881 | -26 | |
882 | SDRD /THE RIGHT ONE? | |
883 | AND KK77 | |
884 | TAD BLOCKK | |
885 | SZA CLA | |
886 | JMP NOT /I GUESS NOT | |
887 | JMS GET /RIGHT. NOW GET REV. GUARD | |
888 | -32 | |
889 | JMS RQD | |
890 | JMS RQD | |
891 | JMS RQD | |
892 | LP, JMS RQD | |
893 | DCA I 10 /READ THE INIT PROGRAM | |
894 | ISZ WCNT | |
895 | JMP LP | |
896 | ISZ BCNT /DONE ALL BLOCKS? | |
897 | JMP CONT | |
898 | SDLC | |
899 | JMP I .+1 | |
900 | STARTUP | |
901 | CONT, CLA CMA /SET FOR NEXT BLOCK | |
902 | TAD BLOCKK | |
903 | DCA BLOCKK | |
904 | JMP NUBLK | |
905 | ||
906 | RQD, 0 | |
907 | SDSQ | |
908 | JMP .-1 | |
909 | SDRD | |
910 | JMP I RQD | |
911 | \fGET, 0 /PICK UP A SPECIFIED TAPE FRAME | |
912 | TAD I GET /HOLDS 6 BIT MARK TRACK I.D. | |
913 | DCA RQD | |
914 | GTIT, SDSS | |
915 | JMP .-1 | |
916 | SDRC /FLAG IS UP. READ MARK TRACK | |
917 | AND KK77 | |
918 | TAD RQD /A MATCH? | |
919 | SZA CLA | |
920 | JMP GTIT | |
921 | ISZ GET | |
922 | JMP I GET | |
923 | ||
924 | KK77, 77 | |
925 | KM200, -200 | |
926 | BLOCKK, -21 /SKIP CORE CONTROL BLOCK AND PAGE 0 | |
927 | WCNT, -200 | |
928 | K177, 177 | |
929 | BCNT, -3 | |
930 | *200 | |
931 | $ |