Add README.md
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape3 / TDINIT.PA
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 $