software: Added more and more
[pdp8.git] / sw / os8 / v3d / sources / system / dectapes / dectape3 / TDINIT.PA
CommitLineData
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
201ST, CLA /IN CASE CHAINED TO
202 JMP I (CREATE /CREATE BLOCK 0 -IN HOUSE ONLY -
203STARTUP,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
210RE, 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
223CPY, JMS MSG
224 COPY
225 TAD (160
226 DCA B1
227 TAD (160
228 DCA B2
229RD, JMS I (DTA0
230 3612
231 0
232B1, 0
233 JMS I (ER1
234 JMS I (DTA1
235 7612
236 0
237B2, 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
258RESTRT, 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
273MSG, 0 /MESSAGE TYPER
274 DCA CTRLO
275 JMS I (CRLF
276 TAD I MSG
277 DCA TEMPA
278 ISZ MSG
279WTMSG, 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
287PNCH, 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
311DTA0, 0 /ENTRY POINT FROM UNIT 0
312 CLA CLL /0 TO LINK
313 JMP DTA1X
314C1000, 1000
315BLOCK,
316DTA1, 0 /UNIT 2 ENTRY
317 CLA CLL CML /1 TO LINK
318 TAD DTA1
319 DCA DTA0 /PICK UP ARGS AT DTA0
320DTA1X, 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
346C374, 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.
364RWCOM, 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
379GO, 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
385CM200, 7600 /COULD HAVE SAVED A LOC. HERE
386SRCH, 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!
408M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT?
409 /ABOVE SNA IS SUPERFLUOUS.
410 JMP SRCH /YES
411ENDZ, 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
416TRY3, CLA
417 ISZ TRYCNT
418 JMP GO /TRY 3 TIMES
419 JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN
420EXIT, ISZ DTA0
421 CLL CML /AC=0 ON NORMAL RETURN
422FATAL, TAD UNIT
423 SDLC /STOP THE UNIT
424 CLA CML RAR
425LEAVE, HLT
426 JMP I DTA0
427
428\fC6203, 6203
429CRDQUD, RDQUAD
430WCOUNT, 0
431BUFF, 0
432MWORDS, -WDSBLK
433UNIT, 0
434CXFUN, XFUNCT
435M20, -20
436PGCT, 0
437CXWCT, XWCT
438C100, 100
439TRYCNT, -3
440
441
442 *ORIGIN+170
443FOUND, 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
447C70, 70 /********DON'T MOVE THIS!!!!******
448C3, 3
449 TAD BUFF /GET BUFFER ADDRESS
450XFIELD, 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
458REVGRD, 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
468K7700, SMA CLA
469 JMP READ /NEG. IS WRITE
470WRITE, 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!
476C7600, 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
484WRLP, TAD I XBUFF /GLORY BE! THE ACTUAL WRITE!
485 JMS WRQUAD
486 ISZ XBUFF /BUMP CORE POINTER
487K77, 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
504RDLP, JMS RDQUAD
505 JMS EQUFUN /COMPUT CHECKSUM AS WE GO
506 DCA I XBUFF /IT GETS CONDENSED LATER
507 ISZ XBUFF
508C300, 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
517RDLP2, JMS RDQUAD /READ CHECKSUM
518 AND K7700
519 JMS EQUFUN
520 JMS GETCHK /GET SIX BIT CHECKSUM
521 JMP I CRWCOM
522
523WRQUAD, 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
531RDQUAD, 0 /READ A 12 BIT WORD
532 SDSQ
533 JMP .-1
534 SDRD /READ DATA
535 JMP I RDQUAD
536
537\fXUNIT,
538EQUFUN, 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
552GETCHK, 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
565CFATAL, FATAL
566CRWCOM, RWCOM
567XFUNCT, 0
568CM32, -32
569C1400, 1400
570CHKSUM, 0
571WORDS, 0
572XBUFF, 0
573XWCT, 0
574EQUTMP, 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
600MOVSYS, 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
610HEAD, 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
629KBM, 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
642CD, 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
655ER1, 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
669CRLF, 0
670 TAD (215
671 JMS TTYOUT
672 TAD (212
673 JMS TTYOUT
674 JMP I CRLF
675
676TTYOUT, 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
700ENTR12, DCA ROMSW /SET INDICATOR
701 CDF 0
702 JMP I CHKCOR
703TRY12K, 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
716OK12, JMS I (MSG
717 TD8E12
718 JMP ENTR12
719\fIN, 0
720
721ZERO, 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
740ZER, JMS I (MSG
741 ZERY
742 JMS I (DTA1
743 4202
744 MTDIR
745 2
746 JMS I (ER1
747 JMP I (RESTRT
748
749LVAL, 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
760BOOT, 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
773TDBOOT, 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
793MOVE, 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
803MOVLUP, TAD I XRIN
804MOVCDF, HLT
805 DCA I XROUT
806 CDF 0
807 ISZ MVCNT
808 JMP MOVLUP
809 JMP I MOVE
810
811MVCNT, -200
812 PAGE
813\fVNO, TEXT /TD8E INITIALIZER PROGRAM VERSION 7A ?/
814INIT, TEXT /MOUNT A CERTIFIED DECTAPE ON UNIT 1 WRITE-ENABLED_/
815 TEXT /ALWAYS KEEP ORIGINAL SYSTEM DECTAPES WRITE-LOCKED?/
816STRIKE, TEXT /STRIKE A CHARACTER TO CONTINUE?/
817DISMNT, 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?\
821SWTCH, 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?/
824OK, TEXT /OK?/
825WRITOUT,TEXT /READY TO CREATE BLOCK 0 OF UNIT 1?/
826COPY, TEXT /COPYING FILES FROM UNIT 0 TO UNIT 1?/
827ZERY, TEXT /ZEROING DIRECTORY ON TAPE UNIT 1?/
828PRES, TEXT /DIRECTORY ON UNIT 1 PRESERVED?/
829WRONG, TEXT /NOT ORIGINAL OS8 SYSTEM TAPE #2_/
830 TEXT /MOUNT CORRECT TAPE ON UNIT 0?/
831ROM8K, TEXT /8K ROM SYSTEM?/
832TD8E12, TEXT /12K SYSTEM?/
833HRDWR, TEXT /NEED ROM OR 12K?/
834IOERR, 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?\
837SPECIAL,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
853NO, 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
865SDSS=6771
866SDST=6772
867SDSQ=6773
868SDLC=6774
869SDLD=6775
870SDRC=6776
871SDRD=6777
872 *7420
873 NOPUNCH
874 *7400
875 ENPUNCH
876 TAD K177 /INIT FOR TAPE READ
877 DCA 10
878NUBLK, TAD KM200 /SET BLOCK WORD COUNT
879 DCA WCNT
880NOT, 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
892LP, 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
901CONT, CLA CMA /SET FOR NEXT BLOCK
902 TAD BLOCKK
903 DCA BLOCKK
904 JMP NUBLK
905
906RQD, 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
914GTIT, 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
924KK77, 77
925KM200, -200
926BLOCKK, -21 /SKIP CORE CONTROL BLOCK AND PAGE 0
927WCNT, -200
928K177, 177
929BCNT, -3
930 *200
931 $