1 /2 TD8E INITIALIZER PROGRAM, V7A
13 /COPYRIGHT (C) 1975, 1977
14 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
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.
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.
31 /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
32 /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
40 /DECEMBER 21, 1973 GB/RL/EF/SR
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
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:
57 /TO CREATE SPECIAL BLOCK 0 FOR THAT TAPE, START THIS PROGRAM AT
58 /LOCATION 200 AND FOLLOW INSTRUCTIONS.
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.
64 /FILES TDROM.SY AND TD12K.SY ARE MERELY SYSTEM HEADS OF THE
65 /APPROPRIATE SYSTEMS, THEY MAY CONTAIN ANY HANDLERS.
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.
71 /CODE LOC BLOCK ON BINARY TAPE
73 /CCB 16,17 (THESE ARE DECTAPE BLOCK NUMBERS, NOT OS/8 RECORDS)
74 /0 20 SKIPPED BY BLOCK 0
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
86 /FIXES SINCE FIELD-TEST RELEASE:
88 /1. FIXED BUG RE CLA ON RETRY AFTER ERROR
89 /2. ALLOWED FINAL BOOTSTRAP TO BE INTO A WRITE-LOCKED DEVICE
93 /3. FIXED BUG RE TD8E BUILD (V6B PATCH)
95 /THIS ROUTINE CAN BE RE-EDITED AND ASSEMBLED TO PRODUCE
96 /VARIATIONS ON THE BASIC TD8E SYSTEM. ASSEMBLY PARAMETERS
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
103 /FOLLOWING ARE THE PARAMETERS SET UP FOR THE STANDARD
104 /DEC VERSION OF THIS ROUTINE:
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
112 /THE USE OF THE PARAMETERS IS AS FOLLOWS:
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
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.
124 /AFIELD: AFIELD DETERMINES THE INITIAL FIELD SETTING FOR THE
125 / LOADER. PERMISSIBLE VALUES FOR AFIELD ARE 0 TO 7.
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.
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.
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:
146 \f/THE CALL TO THE SUBROUTINE FOLLOWS BASICALLY THE
147 /CALLING SEQUENCE FOR OS/8 DEVICE HANDLERS.
148 /THE CALLING SEQUENCE IS:
151 / CIF MFIELD /MFIELD=FIELD ASSEMBLED IN
152 / JMS ENTRY /ENTRY=ORIGIN (EVEN NUMBERED DRIVE
153 /AND ORIGIN+4 FOR ODD NUMBERED DRIVE.
162 /ARG1: FUNCTION WORD BIT0: 0=READ, 1=WRITE
163 / BITS 1-5: # BLOCKS IN OPERATION
164 / BITS 6-8: FIELD OF BUFFER AREA
166 / BIT 10: # OF WORDS/BLOCK.
167 / 0= WDSBLK, 1=WDSBLK-1
168 / BIT 11: 1=START FORWARD, 0=REVERSE
170 /ARG2: BUFFER ADDRESS FOR OPERATION
171 /ARG3: STARTING BLOCK FOR OPERATION
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
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.
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
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)
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
207 JMP FERR /REALLY BAD!
209 DCA ST /ALLOWS HIM TO RESTART AT 200
212 JMS I (CHKCOR /USE ROM OR 12K SYSTEM
222 JMP I (ZERO /HE TYPED ^Z
244 TAD B1 /COPY OVER ABOVE 2700
248 JMS I (DTA0 /COPY DIRECTORY
259 DISMNT /SETUP TAPES FOR INIT
273 MSG, 0 /MESSAGE TYPER
289 SNA /IGNORE NULL. _ MEANS CR/LF
290 JMP I PNCH /? MEANS TERMINATE
307 \f/ THIS HANDLER USES DECTAPE BLOCKS NOT OS/8 BLOCKS !
311 DTA0, 0 /ENTRY POINT FROM UNIT 0
316 DTA1, 0 /UNIT 2 ENTRY
317 CLA CLL CML /1 TO LINK
319 DCA DTA0 /PICK UP ARGS AT DTA0
321 DCA UNIT /LINK TO UNIT POSITION
323 TAD C6203 /GET DATA FIELD AND SETUP RETURN
325 TAD I DTA0 /GET FUNCTION WORD
326 SDLD /PUT FUNCTION INTO DATA REGISTER
327 CLL RTR /AC STILL HAS FUNCTION. PUT # WORDS PER
329 SZL CLA /KNOCK ONE OFF WDSBLK?
332 DCA WCOUNT /STORE MASTER WORD COUNT
336 ISZ DTA0 /TO BLOCK NUMBER
339 ISZ DTA0 /POINT TO ERROR EXIT
340 CIF CDF MFIELD /TO ROUTINES DATA FIELD
341 SDRD /GET FUNCTION INTO AC
343 AND CM200 /GET # PAGES TO XFER
346 C374, AND C70 /GET FIELD FOR XFER
347 TAD C6203 /FORM CDF N
348 DCA XFIELD /IF=0 AND DF=N AT XFER.
350 DCA TRYCNT /3 ERROR TRIES
351 TAD UNIT /TEST FOR SELECT ERROR
357 SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG.
361 SDRD /GET MOTION BIT TO LINK
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?
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
378 CLL CML /FORCES MOTION FORWARD
379 GO, CLA CML RTR /LINK BECOMES MOTION BIT
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
385 CM200, 7600 /COULD HAVE SAVED A LOC. HERE
387 JMP .-1 /WAIT FOR SINGLE LINE FLAG
389 CLL RTL /DIRECTION TO LINK. INFO BITS
391 AND C374 /ISOLATE MARK TRACK BITS
392 TAD M110 /IS IT END ZONE?
393 SNA /THE LINK STAYS SAME THRU THIS
395 TAD M20 /CHECK FOR BLOCK MARK
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.
405 CMA /IS IT RIGHT BLOCK?
407 JMP FOUND /YES..HOORAY!
408 M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT?
409 /ABOVE SNA IS SUPERFLUOUS.
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
419 JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN
421 CLL CML /AC=0 ON NORMAL RETURN
443 FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION?
444 JMP GO /WRONG..TURN AROUND
445 TAD UNIT /PUT UNIT INTO LINK
447 C70, 70 /********DON'T MOVE THIS!!!!******
449 TAD BUFF /GET BUFFER ADDRESS
450 XFIELD, HLT /INTO NEXT PAGE
453 DCA XBUFF /SAVE ADDRESS
459 JMP .-1 /LOOK FOR REVERSE GUARD
462 TAD CM32 /IS IT REVERSE GUARD?
464 JMP REVGRD /NO.KEEP LOOKING
466 DCA WORDS /WORD COUNTER
467 TAD XFUNCT /GET FUNCTION READ OR WRITE
469 JMP READ /NEG. IS WRITE
471 AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR
472 CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS
474 JMP I CFATAL /FATAL ERROR. LINK MUST BE ON
475 JMS RDQUAD /NO ONE EVER USES THIS WORD!
478 TAD XUNIT /INITIATE WRITE MODE
481 JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM
484 WRLP, TAD I XBUFF /GLORY BE! THE ACTUAL WRITE!
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
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
500 JMS RDQUAD /SKIP CONTROL WORDS
502 TAD K7700 /TACK 7700 ONTO CHECKSUM.
503 DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY
505 JMS EQUFUN /COMPUT CHECKSUM AS WE GO
506 DCA I XBUFF /IT GETS CONDENSED LATER
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
515 JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK
516 JMS EQUFUN /CHECKSUM IT
517 RDLP2, JMS RDQUAD /READ CHECKSUM
520 JMS GETCHK /GET SIX BIT CHECKSUM
523 WRQUAD, 0 /WRITE OUT A 12 BIT WORD
524 JMS EQUFUN /ADD THIS TO CHECKSUM
525 SDSQ /SKIP ON QUADLINE FLAG
527 SDLD /LOAD DATA ONTO BUS
528 CLA /SDLD DOESN'T CLEAR AC
531 RDQUAD, 0 /READ A 12 BIT WORD
538 EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM
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))
552 GETCHK, 0 /FORM 6 BIT CHECKSUM
560 CLA CLL CML /FORCES LINK ON AT RWCOM
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
602 TAD ROMSW /GET ADDRESS OF START OF SYSTEM HEAD
607 JMS I (DTA0 /READ PAGE 0
615 TAD (-4207 /CHECK FOR GOOD SYSTEM HEAD
627 0012 /READ 40 SYSTEM BLOCKS 7-26 (PAGES 16-55)
640 3613 /READ 51-67 (PAGES 122-157)
663 JMP I (RE /YES, ABORT
666 DCA ER1 /BACK UP, POINT TO CALL
690 \fCHKCOR, 0 /DETERMINE CONFIGURATION
691 CDF 70 /CHECK FOR ROM
700 ENTR12, DCA ROMSW /SET INDICATOR
713 HRDWR /NO HARDWARE AROUND!
730 CLL RAR /ALLOW ONLY -1, 0, 1
738 JMP I IN /JUMP TO APPROPRIATE ROUTINE
758 6437+70 /-LENGTH OF DECTAPE
763 JMS I (DTA0 /ROM BOOT
798 TAD (-200 /MOVE 200 WORDS TO LOCATION 7600
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?/
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?/
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.
876 TAD K177 /INIT FOR TAPE READ
878 NUBLK, TAD KM200 /SET BLOCK WORD COUNT
880 NOT, JMS GET /GET BLOCK # FORWARD
887 JMS GET /RIGHT. NOW GET REV. GUARD
893 DCA I 10 /READ THE INIT PROGRAM
896 ISZ BCNT /DONE ALL BLOCKS?
901 CONT, CLA CMA /SET FOR NEXT BLOCK
911 \fGET, 0 /PICK UP A SPECIFIED TAPE FRAME
912 TAD I GET /HOLDS 6 BIT MARK TRACK I.D.
916 SDRC /FLAG IS UP. READ MARK TRACK
926 BLOCKK, -21 /SKIP CORE CONTROL BLOCK AND PAGE 0