X-Git-Url: http://gitweb.hachti.de/?a=blobdiff_plain;f=sw%2Fos8%2Fv3d%2Fsources%2Fsystem%2Fdectapes%2Fdectape3%2FTDINIT.PA;fp=sw%2Fos8%2Fv3d%2Fsources%2Fsystem%2Fdectapes%2Fdectape3%2FTDINIT.PA;h=89a168279e3bde29ec7b21ba956a82ca4d139145;hb=7af5ad59491ddf2066641aef1e0025a337c0f247;hp=0000000000000000000000000000000000000000;hpb=919757fd611e482003ce51f366f6783cab73dea3;p=pdp8.git diff --git a/sw/os8/v3d/sources/system/dectapes/dectape3/TDINIT.PA b/sw/os8/v3d/sources/system/dectapes/dectape3/TDINIT.PA new file mode 100644 index 0000000..89a1682 --- /dev/null +++ b/sw/os8/v3d/sources/system/dectapes/dectape3/TDINIT.PA @@ -0,0 +1,931 @@ +/2 TD8E INITIALIZER PROGRAM, V7A +/ +/ +/ +/ +/ +/ +// +/ +/ +/ +/ +/COPYRIGHT (C) 1975, 1977 +/DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. +/ +/ +/ +/THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A +/SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU- +/SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER +/COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE +/TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO +/AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE +/SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC. +/ +/ +/THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT +/NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL +/EQUIPMRNT COROPATION. +/ +/DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS +/SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. +/ +/ +/ +/ +/ +/ + +/DECEMBER 21, 1973 GB/RL/EF/SR + +/ABSTRACT-- +/ THE ROUTINE DESCRIBED AND LISTED HERE IS A GENERAL +/DATA HANDLER FOR THE TD8E DECTAPE SYSTEM. THE ROUTINE +/CONTAINS SEARCH, READ, AND WRITE FUNCTIONS IN A FORMAT +/WHICH IS COMPATIBLE WITH OS/8 DEVICE HANDLER CALLING +/SEQUENCES. + +/ EXPLANATION: + +/THIS IS A SAVE FILE, WHICH MUST BE PLACED AS FILE # 1 +/ON THE OS/8 BINARIES TAPE. (I.E. BLOCK 7) +/FOLLOWING IT MUST BE THE FOLLOWING FILES, EACH 50 (DEC) BLKS LONG: +/TDROM.SY +/TD12K.SY +/ +/TO CREATE SPECIAL BLOCK 0 FOR THAT TAPE, START THIS PROGRAM AT +/LOCATION 200 AND FOLLOW INSTRUCTIONS. + +/TO THEN PERFORM THE INITIALIZATION FROM THE LIBRARY TAPES, +/MERELY PLACE THE BINARY TAPE ON UNIT 0 AND BOOTSTRAP INTO IT. +/THEN FOLLOW INSTRUCTIONS. + +/FILES TDROM.SY AND TD12K.SY ARE MERELY SYSTEM HEADS OF THE +/APPROPRIATE SYSTEMS, THEY MAY CONTAIN ANY HANDLERS. + +/THE BLOCK 0 SPECIAL SECONDARY BOOTSTRAP READS IN THE FIRST +/3 PAGES OF TDINIT (WORDS 200-777) AND BRANCHES TO 'STARTUP'. +/THIS THEN READS IN THE REMAINDER OF TDINIT WITH ERROR CHECKING. + +/CODE LOC BLOCK ON BINARY TAPE + +/CCB 16,17 (THESE ARE DECTAPE BLOCK NUMBERS, NOT OS/8 RECORDS) +/0 20 SKIPPED BY BLOCK 0 +/200 21 +/400 22 +/600 23 +/1000 24 +/1200 25 +/1400 26 +/1600 27 +/2000 30 +/2200 31 TDINIT MUST HAVE USEFUL PART END AT OS/8 RECORD 75 +/7400 32,33 RECORD 15 CONTAINS IMAGE OF BLOCK 0 + +/FIXES SINCE FIELD-TEST RELEASE: + +/1. FIXED BUG RE CLA ON RETRY AFTER ERROR +/2. ALLOWED FINAL BOOTSTRAP TO BE INTO A WRITE-LOCKED DEVICE + +/OS/8 V3D CHANGES: + +/3. FIXED BUG RE TD8E BUILD (V6B PATCH) + +/THIS ROUTINE CAN BE RE-EDITED AND ASSEMBLED TO PRODUCE +/VARIATIONS ON THE BASIC TD8E SYSTEM. ASSEMBLY PARAMETERS +/CONTROL: +/A) WHAT DRIVES (UNITS 0-7) WILL BE USED +/B) THE ORIGIN OF THE TWO PAGE ROUTINE +/C) WHAT MEMORY FIELD THE ROUTINE WILL RUN IN +/D) THE SIZE OF THE DECTAPE BLOCK TO BE READ/WRITTEN + +/FOLLOWING ARE THE PARAMETERS SET UP FOR THE STANDARD +/DEC VERSION OF THIS ROUTINE: + + DRIVE=10 /UNITS 0 AND 1 SELECTED + ORIGIN=400 /ENTER AT ORIGIN, ORIGIN+4 + AFIELD=0 /INITIAL FIELD SETTING + MFIELD=00 /AFIELD*10=MFIELD + WDSBLK=201 /129 WORDS PER BLOCK + +/THE USE OF THE PARAMETERS IS AS FOLLOWS: + +/ DRIVE: DRIVE DETERMINES WHICH UNITS WILL BE SELECTED +/ DRIVE=10 IMPLIES UNITS 0 &1 +/ DRIVE=20 IMPLIES UNITS 2&3 +/ DRIVE=30 IMPLIES UNITS 4&5 +/ DRIVE=40 IMPLIES UNITS 6&7 + +/ORIGIN: ALTERING ORIGIN CAUSES ASSEMBLY IN A DIFFERENT +/ MEMORY LOCATION. WHEN CHANGING ORIGIN KEEP IN MIND +/THAT THIS IS A TWO PAGE ROUTINE. + +/AFIELD: AFIELD DETERMINES THE INITIAL FIELD SETTING FOR THE +/ LOADER. PERMISSIBLE VALUES FOR AFIELD ARE 0 TO 7. + +/MFIELD: MFIELD IS USED IN A CIF CDF MFIELD INSTRUCTION. +/ THE VALUE INSERTED FOR MFIELD SHOULD BE 10(8) TIMES +/ THE VALUE FOR AFIELD. THE PERMISSIBLE VALUES ARE 00-70. + +/WDSBLK: WDSBLK GOVERNS HOW MANY WORDS THE ROUTINE THINKS ARE +/ IN A DECTAPE BLOCK. THE STANDARD VALUE IS 201(8) OR +/ 128 DECIMAL. NOTE THAT THE FUNCTION WORD BIT 10 CAN +/ BE USED TO SUBTRACT ONE FROM WDSBLK. THE VALUE USED +/ FOR WDSBLK SHOULD BE THE NUMBER OF WORDS THE TAPE WAS +/ FORMATTED TO CONTAIN. + +/IF WE WANT A HANDLER FOR UNITS 2&3 TO RESIDE IN +/FIELD 2 AT LOCATION 3000 AND READ/WRITE 256(10) WORDS +/PER BLOCK, THE PARAMETERS WOULD BE: +/ DRIVE=20 +/ ORIGIN=3000 +/ AFIELD=2 +/ MFIELD=20 +/ WDSBLK=400 + /THE CALL TO THE SUBROUTINE FOLLOWS BASICALLY THE +/CALLING SEQUENCE FOR OS/8 DEVICE HANDLERS. +/THE CALLING SEQUENCE IS: + +/ CDF CURRENT +/ CIF MFIELD /MFIELD=FIELD ASSEMBLED IN +/ JMS ENTRY /ENTRY=ORIGIN (EVEN NUMBERED DRIVE + /AND ORIGIN+4 FOR ODD NUMBERED DRIVE. +/ ARG1 +/ ARG2 +/ ARG3 +/ ERROR RETURN +/ NORMAL RETURN + +/THE ARGUMENTS ARE: + +/ARG1: FUNCTION WORD BIT0: 0=READ, 1=WRITE +/ BITS 1-5: # BLOCKS IN OPERATION +/ BITS 6-8: FIELD OF BUFFER AREA +/ BIT 9: UNUSED +/ BIT 10: # OF WORDS/BLOCK. +/ 0= WDSBLK, 1=WDSBLK-1 +/ BIT 11: 1=START FORWARD, 0=REVERSE + +/ARG2: BUFFER ADDRESS FOR OPERATION +/ARG3: STARTING BLOCK FOR OPERATION + +/ERRORS: THE HANDLER DETECTS TWO TYPES OF ERRORS: +/A) FATAL ERRORS- PARITY ERROR, TIMING ERROR, +/ TOO GREAT A BLOCK NUMBER +/ FATAL ERRORS TAKE ERROR RETURN WITH THE +/ AC=4000. +/B) NON-FATAL- SELECT ERROR. +/ IF NO PROPER UNIT IS SELECTED, THE ERROR +/ RETURN IS TAKEN WITH CLEAR AC. +/FATAL ERRORS TRY THREE TIMES BEFORE TAKING ERROR RETURN. +/THE NORMAL RETURN IS TAKEN AFTER ALL INDICATED +/BLOCKS HAVE BEEN TRANSFERRED. THE AC IS CLEAR. + +/THE TD8E IOT'S ARE: + SDSS=7001-DRIVE /SKIP ON SINGLE LINE FLAG + SDST=7002-DRIVE /SKIP ON TIMING ERROR + SDSQ=7003-DRIVE /SKIP ON QUAD LINE FLAG + SDLC=7004-DRIVE /LOAD COMMAND REGISTER + SDLD=7005-DRIVE /LOAD DATA REGISTER + SDRC=7006-DRIVE /READ COMMAND REGISTER + SDRD=7007-DRIVE /READ DATA REGISTER + +/THE IOT'S IN GENERAL ARE 677X,676X,675X,AND 674X. +/THE OTHERS CONTROL UNITS 2-7. + INITLN=7 /LENGTH OF TDINIT INCLUDING BLOCK 0 IMAGE (IN BLOCKS) + CTRLO=20 + INCHAR=21 + TEMPA=22 + +ST, CLA /IN CASE CHAINED TO + JMP I (CREATE /CREATE BLOCK 0 -IN HOUSE ONLY - +STARTUP,JMS I (DTA0 /TD8E S.R. IS IN 200 NOW + 603 /READ 3 BLOCKS INTO 1000-2377 + 1000 + 24 /GET REST OF INIT + JMP FERR /REALLY BAD! + TAD (SKP CLA + DCA ST /ALLOWS HIM TO RESTART AT 200 +RE, JMS MSG + VNO + JMS I (CHKCOR /USE ROM OR 12K SYSTEM + JMS MSG + INIT + JMS I (MOVSYS + JMS MSG + SWTCH + JMS TTY /PAUSE + TAD INCHAR + TAD (-32 + SNA CLA + JMP I (ZERO /HE TYPED ^Z +CPY, JMS MSG + COPY + TAD (160 + DCA B1 + TAD (160 + DCA B2 +RD, JMS I (DTA0 + 3612 + 0 +B1, 0 + JMS I (ER1 + JMS I (DTA1 + 7612 + 0 +B2, 0 + JMS I (ER1 + TAD B1 + TAD (36 + DCA B1 + TAD B1 + DCA B2 + TAD B1 /COPY OVER ABOVE 2700 + TAD (-2600 /*** + SPA CLA + JMP RD /KEEP GOING + JMS I (DTA0 /COPY DIRECTORY + 1412 + 0 + 2 + JMS I (ER1 + JMS I (DTA1 + 5412 + 0 + 2 + JMS I (ER1 +RESTRT, JMS MSG + DISMNT /SETUP TAPES FOR INIT + JMS TTY + JMP I (BOOT + TTY, 0 + JMS MSG + STRIKE + KCC + KSF + JMP .-1 + KRB + AND (177 + DCA INCHAR + JMP I TTY + +MSG, 0 /MESSAGE TYPER + DCA CTRLO + JMS I (CRLF + TAD I MSG + DCA TEMPA + ISZ MSG +WTMSG, TAD I TEMPA + CLL RTR;RTR;RTR + JMS PNCH + TAD I TEMPA + JMS PNCH + ISZ TEMPA + JMP WTMSG + +PNCH, 0 + AND (77 + SNA /IGNORE NULL. _ MEANS CR/LF + JMP I PNCH /? MEANS TERMINATE + TAD (-37 /IS IT _? + SNA + JMS I (CRLF /YES + TAD (-40 /MAYBE ? + SNA + JMP I MSG + TAD (40 + SPA + TAD (100 + TAD (237 + JMS I (TTYOUT + JMP I PNCH + FERR, HLT + CLA + JMP STARTUP + PAGE + / THIS HANDLER USES DECTAPE BLOCKS NOT OS/8 BLOCKS ! + + *ORIGIN + +DTA0, 0 /ENTRY POINT FROM UNIT 0 + CLA CLL /0 TO LINK + JMP DTA1X +C1000, 1000 +BLOCK, +DTA1, 0 /UNIT 2 ENTRY + CLA CLL CML /1 TO LINK + TAD DTA1 + DCA DTA0 /PICK UP ARGS AT DTA0 +DTA1X, RAR + DCA UNIT /LINK TO UNIT POSITION + RDF + TAD C6203 /GET DATA FIELD AND SETUP RETURN + DCA LEAVE + TAD I DTA0 /GET FUNCTION WORD + SDLD /PUT FUNCTION INTO DATA REGISTER + CLL RTR /AC STILL HAS FUNCTION. PUT # WORDS PER + /BLOCK INTO LINK + SZL CLA /KNOCK ONE OFF WDSBLK? + IAC /YES + TAD MWORDS + DCA WCOUNT /STORE MASTER WORD COUNT + ISZ DTA0 /TO BUFFER + TAD I DTA0 + DCA BUFF + ISZ DTA0 /TO BLOCK NUMBER + TAD I DTA0 + DCA BLOCK + ISZ DTA0 /POINT TO ERROR EXIT + CIF CDF MFIELD /TO ROUTINES DATA FIELD + SDRD /GET FUNCTION INTO AC + CLL RAL + AND CM200 /GET # PAGES TO XFER + DCA PGCT + SDRD +C374, AND C70 /GET FIELD FOR XFER + TAD C6203 /FORM CDF N + DCA XFIELD /IF=0 AND DF=N AT XFER. + CLA CLL CMA RTL + DCA TRYCNT /3 ERROR TRIES + TAD UNIT /TEST FOR SELECT ERROR + SDLC + SDRC + AND C100 + SZA CLA + JMP FATAL-1 + SDRD /PUT FUNCT INTO XFUNCT IN SECOND PG. + DCA I CXFUN + TAD WCOUNT + DCA I CXWCT + SDRD /GET MOTION BIT TO LINK + CLL RAR + JMP GO /AND START THE MOTION. +RWCOM, SDST /ANY CHECKSUM ERRORS? + SZA CLA /OR CHECKSUM ERRORS? + JMP TRY3 /PLEASE NOTE THAT THE LINK IS ALWAYS + /SET AT RWCOM. GETCHK SETS IT. + TAD PGCT /NO ERROR..FINISHED XFER? + TAD CM200 + SNA + JMP EXIT /ALL DONE. GET OUT + DCA PGCT /NEW PAGE COUNT + ISZ BLOCK /NEXT BLOCK TO XFER + TAD WCOUNT /FORM NEXT BUFFER ADDRESS + CIA + TAD BUFF + DCA BUFF + CLL CML /FORCES MOTION FORWARD +GO, CLA CML RTR /LINK BECOMES MOTION BIT + TAD C1000 + TAD UNIT /PUT IN 'GO' AND UNIT # + SDLC /LOOK FOR BLOCK NO. + JMS I CRDQUD /WAIT AT LEAST 6 LINES TO LOOK + JMS I CRDQUD +CM200, 7600 /COULD HAVE SAVED A LOC. HERE +SRCH, SDSS + JMP .-1 /WAIT FOR SINGLE LINE FLAG + SDRC + CLL RTL /DIRECTION TO LINK. INFO BITS + /ARE SHIFTED. + AND C374 /ISOLATE MARK TRACK BITS + TAD M110 /IS IT END ZONE? + SNA /THE LINK STAYS SAME THRU THIS + JMP ENDZ + TAD M20 /CHECK FOR BLOCK MARK + SZA CLA + JMP SRCH + SDRD /GET THE BLOCK NUMBER + SZL /IF WE ARE IN REVERSE, LOOK FOR 3 + /BLOCKS BEFORE TARGET BLOCK. THIS + /ALLOWS TURNAROUND AND UP TO SPEED. + TAD C3 /REVERSE + CMA + TAD BLOCK + CMA /IS IT RIGHT BLOCK? + SNA + JMP FOUND /YES..HOORAY! +M110, SZL SNA CLA /NO, BUT ARE WE HEADED FOR IT? + /ABOVE SNA IS SUPERFLUOUS. + JMP SRCH /YES +ENDZ, SDRC /WE ARE IN THE END ZONE + CLL RTL /DIRECTION TO LINK + CLA /ARE WE IN REVERSE? + JMP GO /YES..TURN US AROUND +/IF WE ARE IN THE END ZONE GOING FORWARD, IT IS AN ERROR +TRY3, CLA + ISZ TRYCNT + JMP GO /TRY 3 TIMES + JMP FATAL /LINK OFF MEANS AC=4000 ON RETURN +EXIT, ISZ DTA0 + CLL CML /AC=0 ON NORMAL RETURN +FATAL, TAD UNIT + SDLC /STOP THE UNIT + CLA CML RAR +LEAVE, HLT + JMP I DTA0 + + C6203, 6203 +CRDQUD, RDQUAD +WCOUNT, 0 +BUFF, 0 +MWORDS, -WDSBLK +UNIT, 0 +CXFUN, XFUNCT +M20, -20 +PGCT, 0 +CXWCT, XWCT +C100, 100 +TRYCNT, -3 + + + *ORIGIN+170 +FOUND, SZL CLA /RIGHT BLOCK. HOW ABOUT DIRECTION? + JMP GO /WRONG..TURN AROUND + TAD UNIT /PUT UNIT INTO LINK + CLL RAL /AC IS NOW 0 +C70, 70 /********DON'T MOVE THIS!!!!****** +C3, 3 + TAD BUFF /GET BUFFER ADDRESS +XFIELD, HLT /INTO NEXT PAGE + *ORIGIN+200 + CIF MFIELD + DCA XBUFF /SAVE ADDRESS + RAR /NOW GET UNIT # + DCA XUNIT + SDRC + SDLC +REVGRD, SDSS + JMP .-1 /LOOK FOR REVERSE GUARD + SDRC + AND K77 + TAD CM32 /IS IT REVERSE GUARD? + SZA CLA + JMP REVGRD /NO.KEEP LOOKING + TAD XWCT + DCA WORDS /WORD COUNTER + TAD XFUNCT /GET FUNCTION READ OR WRITE +K7700, SMA CLA + JMP READ /NEG. IS WRITE +WRITE, SDRC + AND C300 /CHECK FOR WRITE LOCK AND SELECT ERROR + CLL CML /LOCK OUT AND SELECT ARE AC 0 ERRORS + SZA CLA + JMP I CFATAL /FATAL ERROR. LINK MUST BE ON + JMS RDQUAD /NO ONE EVER USES THIS WORD! +C7600, 7600 + TAD C1400 + TAD XUNIT /INITIATE WRITE MODE + SDLC + CLA CMA + JMS WRQUAD /PUT 77 IN REVERSE CHECKSUM + CLA CMA + DCA CHKSUM +WRLP, TAD I XBUFF /GLORY BE! THE ACTUAL WRITE! + JMS WRQUAD + ISZ XBUFF /BUMP CORE POINTER +K77, 77 /ABOVE MAY SKIP + ISZ WORDS /DONE THIS BLOCK? + JMP WRLP /NOT YET..LOOP A WHILE + TAD XFUNCT /IS THE OPERATION FOR WDSBLK PER BLOCK? + CLL RTR /IF NO, WRITE A 0 WORD + SZL CLA + JMS WRQUAD /WRITE A WORD OF 0 + JMS GETCHK /DO THE CHECK SUM + JMS WRQUAD /WRITE FORWARD CHECKSUM + JMS WRQUAD /ALLOW CHECKSUM TO BE WRITTEN + JMP I CRWCOM + READ, JMS RDQUAD + JMS RDQUAD + JMS RDQUAD /SKIP CONTROL WORDS + AND K77 + TAD K7700 /TACK 7700 ONTO CHECKSUM. + DCA CHKSUM /CHECKSUM ONLY LOW 6 BITS ANYWAY +RDLP, JMS RDQUAD + JMS EQUFUN /COMPUT CHECKSUM AS WE GO + DCA I XBUFF /IT GETS CONDENSED LATER + ISZ XBUFF +C300, 300 /PROTECTION + ISZ WORDS /DONE THIS OP? + JMP RDLP /NO SUCH LUCK + TAD XFUNCT /IF OP WAS FOR WDSBLK-1, READ AND + CLL RTR /CHECKSUM THE LAST TAPE WORD + SNL CLA + JMP RDLP2 + JMS RDQUAD /NOT NEEDED FOR WDSBLK/BLOCK + JMS EQUFUN /CHECKSUM IT +RDLP2, JMS RDQUAD /READ CHECKSUM + AND K7700 + JMS EQUFUN + JMS GETCHK /GET SIX BIT CHECKSUM + JMP I CRWCOM + +WRQUAD, 0 /WRITE OUT A 12 BIT WORD + JMS EQUFUN /ADD THIS TO CHECKSUM + SDSQ /SKIP ON QUADLINE FLAG + JMP .-1 + SDLD /LOAD DATA ONTO BUS + CLA /SDLD DOESN'T CLEAR AC + JMP I WRQUAD + +RDQUAD, 0 /READ A 12 BIT WORD + SDSQ + JMP .-1 + SDRD /READ DATA + JMP I RDQUAD + + XUNIT, +EQUFUN, 0 /COMPUTE EQUIVALENCE CHECKSUM + CMA + DCA EQUTMP /ACTUALLY CHECKSUMS ON DECTAPE ARE + TAD EQUTMP /EQUIVALENCE OF ALL WORDS IN A RECORD + AND CHKSUM /SIX BITS AT A TIME. BUT SINCE EQUIVALENCE + CIA /IS ASSOCIATIVE, WE CAN DO IT 12 + CLL RAL /BITS AT A TIME AND CONDENSE LATER. + TAD EQUTMP /THIS ROUTINE USES THESE IDENTITIES: + TAD CHKSUM /A+B=(A.XOR.B)+2*(A.AND.B) + DCA CHKSUM /A.EQU.B=.NOT.(A.XOR.B)=A.XOR.(.NOT.B) + TAD EQUTMP /A.EQU.B=(A+(.NOT.B))-2*(A.AND.(.NOT.B)) + CMA + JMP I EQUFUN + +GETCHK, 0 /FORM 6 BIT CHECKSUM + CLA + TAD CHKSUM + CMA + CLL RTL + RTL + RTL + JMS EQUFUN + CLA CLL CML /FORCES LINK ON AT RWCOM + TAD CHKSUM + AND K7700 + JMP I GETCHK + +CFATAL, FATAL +CRWCOM, RWCOM +XFUNCT, 0 +CM32, -32 +C1400, 1400 +CHKSUM, 0 +WORDS, 0 +XBUFF, 0 +XWCT, 0 +EQUTMP, 0 + TBL, CPY + ZER + LVAL + PAGE + CREATE, JMS I (MSG + WRITOUT + JMS I (TTY + JMS I (DTA1 + 4202 + 7400 + 0 + JMS ER1 + JMS I (MSG + OK + HLT + JMP I (7605 + ROMSW=17 + +/THIS ROUTINE COPIES THE SYSTEM ONTO UNIT 1. +/IT COPIES FROM A SYSTEM HEAD FILE ON TAPE ON UNIT 0. +/UNIT 0 MUST BE THE OS/8 BINARIES TAPE +/1ST FILE: TDINIT.PA +/2ND FILE: TDROM.SY +/3RD FILE: TD12K.SY + +MOVSYS, 0 + JMS I (TTY + TAD ROMSW /GET ADDRESS OF START OF SYSTEM HEAD + SNA CLA + TAD (62^2 /12 K + TAD (7+INITLN^2 /ROM + DCA HEAD + JMS I (DTA0 /READ PAGE 0 + 212 + 0 +HEAD, HLT + JMS ER1 + CDF 10 + TAD I (200 + CDF 0 + TAD (-4207 /CHECK FOR GOOD SYSTEM HEAD + SZA CLA + JMP WRGSYS + JMS I (DTA1 + 4212 + 0 + 0 + JMS ER1 + STL CLA RTL /2 + TAD HEAD + DCA KBM + JMS I (DTA0 + 0012 /READ 40 SYSTEM BLOCKS 7-26 (PAGES 16-55) + 0 +KBM, HLT + JMS ER1 + JMS I (DTA1 + 4012 + 0 + 7^2 /WRITE KBM ETC + JMS ER1 + TAD HEAD + TAD (43^2 + DCA CD + JMS I (DTA0 + 3613 /READ 51-67 (PAGES 122-157) + 0 +CD, HLT + JMS ER1 + JMS I (DTA1 + 7613 + 0 + 43+6^2 + JMS ER1 + JMP I MOVSYS + WRGSYS, JMS I (MSG + WRONG + JMS I (TTY + JMP I (CPY + +ER1, 0 + CLA + JMS I (MSG + IOERR + JMS I (TTY + TAD I (INCHAR + TAD (-101 + SNA CLA /A? + JMP I (RE /YES, ABORT + TAD ER1 + TAD (-5 + DCA ER1 /BACK UP, POINT TO CALL + JMP I ER1 /RETRY + +CRLF, 0 + TAD (215 + JMS TTYOUT + TAD (212 + JMS TTYOUT + JMP I CRLF + +TTYOUT, 0 + DCA TM + JMS I (TSTKBD + TAD CTRLO + SZA CLA + JMP I TTYOUT + TAD TM + TLS + TSF + JMP .-1 + CLA + JMP I TTYOUT + TM, 0 + PAGE + CHKCOR, 0 /DETERMINE CONFIGURATION + CDF 70 /CHECK FOR ROM + TAD I (7503 + TAD (-SDSS + SZA CLA + JMP TRY12K + CDF 0 + JMS I (MSG + ROM8K + CLA IAC +ENTR12, DCA ROMSW /SET INDICATOR + CDF 0 + JMP I CHKCOR +TRY12K, CDF 20 + TAD ENTR12 + DCA I (7600 + TAD I (7600 + CIA + TAD ENTR12 + CDF 0 + SNA CLA + JMP OK12 + JMS I (MSG + HRDWR /NO HARDWARE AROUND! + HLT + JMP .-1 +OK12, JMS I (MSG + TD8E12 + JMP ENTR12 + IN, 0 + +ZERO, JMS I (MSG + SPECIAL + JMS I (TTY + TAD INCHAR + TAD (-62 + DCA IN + TAD IN + SPA + CIA + CLL RAR /ALLOW ONLY -1, 0, 1 + SZA CLA + JMP ZERO+1 + TAD IN + TAD (TBL+1 + DCA IN + TAD I IN + DCA IN + JMP I IN /JUMP TO APPROPRIATE ROUTINE + +ZER, JMS I (MSG + ZERY + JMS I (DTA1 + 4202 + MTDIR + 2 + JMS I (ER1 + JMP I (RESTRT + +LVAL, JMS I (MSG + PRES + JMP I (RESTRT + MTDIR, -1 + 70 /SYSTEM TAPE + 0 + 0 + -1 /1 EMPTY FILE + 0 + 6437+70 /-LENGTH OF DECTAPE + +BOOT, TAD ROMSW + SNA CLA + JMP TDBOOT + JMS I (DTA0 /ROM BOOT + 202 + 7400 + 0 /READ IN BLOCK 0 + JMS I (ER1 + TAD (CDF 10 + JMS MOVE + 7400 + JMP I (7605 + +TDBOOT, JMS I (DTA0 + 202 + 7400 + 0 + JMS I (ER1 + JMS I (DTA0 + 202 + 7000 + 66^2 + JMS I (ER1 + TAD (CDF 10 + JMS MOVE + 7000 + TAD (CDF 20 + JMS MOVE + 7200 + JMP I (7605 + XRIN=11 + XROUT=12 + +MOVE, 0 + DCA MOVCDF + STA + TAD I MOVE + DCA XRIN + TAD (-200 /MOVE 200 WORDS TO LOCATION 7600 + DCA MVCNT + ISZ MOVE + TAD (7577 + DCA XROUT +MOVLUP, TAD I XRIN +MOVCDF, HLT + DCA I XROUT + CDF 0 + ISZ MVCNT + JMP MOVLUP + JMP I MOVE + +MVCNT, -200 + PAGE + VNO, TEXT /TD8E INITIALIZER PROGRAM VERSION 7A ?/ +INIT, TEXT /MOUNT A CERTIFIED DECTAPE ON UNIT 1 WRITE-ENABLED_/ + TEXT /ALWAYS KEEP ORIGINAL SYSTEM DECTAPES WRITE-LOCKED?/ +STRIKE, TEXT /STRIKE A CHARACTER TO CONTINUE?/ +DISMNT, TEXT /REMOVE AND SAVE TAPE ON UNIT 0_/ + TEXT /TAKE NEW TAPE (ON UNIT 1) WHICH WAS JUST CREATED_/ + TEXT /AND PLACE IT ON UNIT 0_/ + TEXT \IT IS YOUR NEW OS/8 SYSTEM TAPE?\ +SWTCH, TEXT /DISMOUNT SYSTEM TAPE #2 FROM UNIT 0 AND SAVE IT_/ + TEXT /MOUNT ORIGINAL SYSTEM TAPE #1 ON UNIT 0_/ + TEXT /PREPARE TO COPY FILES OVER?/ +OK, TEXT /OK?/ +WRITOUT,TEXT /READY TO CREATE BLOCK 0 OF UNIT 1?/ +COPY, TEXT /COPYING FILES FROM UNIT 0 TO UNIT 1?/ +ZERY, TEXT /ZEROING DIRECTORY ON TAPE UNIT 1?/ +PRES, TEXT /DIRECTORY ON UNIT 1 PRESERVED?/ +WRONG, TEXT /NOT ORIGINAL OS8 SYSTEM TAPE #2_/ + TEXT /MOUNT CORRECT TAPE ON UNIT 0?/ +ROM8K, TEXT /8K ROM SYSTEM?/ +TD8E12, TEXT /12K SYSTEM?/ +HRDWR, TEXT /NEED ROM OR 12K?/ +IOERR, TEXT /FATAL IO ERR_/ + TEXT /TYPE A TO ABORT AND START OVER AGAIN_/ + TEXT \TYPE ANY OTHER CHARACTER TO RETRY THIS I/O OPERATION?\ +SPECIAL,TEXT /TYPE 1 TO COPY FILES FROM UNIT 0 TO UNIT 1_/ + TEXT /TYPE 2 TO ZERO THE DIRECTORY OF UNIT 1_/ + TEXT /TYPE 3 TO LEAVE THE DIRECTORY OF UNIT 1 ALONE?/ + TSTKBD, 0 + KSF + JMP I TSTKBD + KRS + AND (177 + TAD (-3 + SNA + JMP I (RE /^C + TAD (3-17 + SZA CLA + JMP NO + CLA IAC + DCA CTRLO +NO, KCC + JMP I TSTKBD + PAGE + /TD8E SYSTEM INITIALIZER +/THIS CODE IS PLACED ON THE BINARY TAPE +/IN RECORD 0. WHEN THE 7470 OR STANDARD TD8E BOOTSTRAP +/IS EXECUTED, THIS PROGRAM READS THE REST OF THE INIT +/SYSTEM FROM THE FIRST FILE ON THE TAPE, AND +/STARTR EXECUTION OF IT. A SHORT PROGRAM IS HERE +/INCLUDED TO WRITE RECORD 0 ON THE TAPE. THE START ADDRESS +/OF THAT CODE IS 200. + +SDSS=6771 +SDST=6772 +SDSQ=6773 +SDLC=6774 +SDLD=6775 +SDRC=6776 +SDRD=6777 + *7420 + NOPUNCH + *7400 + ENPUNCH + TAD K177 /INIT FOR TAPE READ + DCA 10 +NUBLK, TAD KM200 /SET BLOCK WORD COUNT + DCA WCNT +NOT, JMS GET /GET BLOCK # FORWARD + -26 + SDRD /THE RIGHT ONE? + AND KK77 + TAD BLOCKK + SZA CLA + JMP NOT /I GUESS NOT + JMS GET /RIGHT. NOW GET REV. GUARD + -32 + JMS RQD + JMS RQD + JMS RQD +LP, JMS RQD + DCA I 10 /READ THE INIT PROGRAM + ISZ WCNT + JMP LP + ISZ BCNT /DONE ALL BLOCKS? + JMP CONT + SDLC + JMP I .+1 + STARTUP +CONT, CLA CMA /SET FOR NEXT BLOCK + TAD BLOCKK + DCA BLOCKK + JMP NUBLK + +RQD, 0 + SDSQ + JMP .-1 + SDRD + JMP I RQD + GET, 0 /PICK UP A SPECIFIED TAPE FRAME + TAD I GET /HOLDS 6 BIT MARK TRACK I.D. + DCA RQD +GTIT, SDSS + JMP .-1 + SDRC /FLAG IS UP. READ MARK TRACK + AND KK77 + TAD RQD /A MATCH? + SZA CLA + JMP GTIT + ISZ GET + JMP I GET + +KK77, 77 +KM200, -200 +BLOCKK, -21 /SKIP CORE CONTROL BLOCK AND PAGE 0 +WCNT, -200 +K177, 177 +BCNT, -3 + *200 + $