*20 /DISK-DIAL LOADER / /COPYRIGHT 1970, DIGITAL EQUIPMENT CORPORATION / MAYNARD,MASS. 01754 / / WRITTEN BY JACK BURNESS / / / / / EJECT / / / / / / / / / E6=2371 /POINTER TO SYSTEM PARAMETER TABLES READ=7774 /POINTER TO SYSTEM READ ENTRY WA=0000 /DISPLACEMENT FROM START OF BINARY WORK AREA. LUNIT=7610 /SYSTEM LOAD UNIT NUMBER LOCATION LLOC=LUNIT+1 /SYSTEM CORE LOCATION POINTER WORD LBLOCK=LLOC+1 /SYSTEM BLOCK NUMBER LOCATION LNUM=LBLOCK+1 /SYSTEM NUMBER OF WORDS TO READ LOCATION AUTO1=11 /DEFINE THE AUTO INDEX REGISTERS NOW. AUTO2=AUTO1+1 AUTO3=AUTO1+2 AUTO4=AUTO1+3 AUTO5=AUTO1+4 AUTO6=AUTO1+5 AUTO7=AUTO1+6 PTABLE=5400 /SYSTEM HEADER BLOCK INFORMATION LOC PTAB2=33 /PTABLE/400 FOR LLOC WORD INDEX=346 /WHERE THE INDEX RESIDES ON DIAL INCOR1=1000-1 /WHERE THE INDEX WILL BE IN CORE INCOR2=22 /INCOR2=INCOR1+1/400 MOVE=7200 /WHERE THE MOVE ROUTINE IS LOCATED IN CORE TPOINT=7627 /WHERE THE MINI MASK IS LOCATED. SYSLOD=7600 /MINI BOOTSTRAP TREAD=7630 /CONDENSED READ ROUTINE SRTCH1=6400 /SCRATCH BLOCK FOR LOADING IN 17400 SRTCH2=35 /SRTCH1/400 / / / / / / / / / / / / EJECT / / / SEGMNT 6 / / *4020 /THIS PROGRAM IS LOADED INTO THE UPPER / FIELD OF MEMORY / / / / JBLOAD, LDF 1 /SET THE DATA FIELD TO LOWER CORE LDA I 7777 /PREPARE TO CHECK FOR PRESENCE OF A NAME PDP /GET OVER INTO THE GOODY MODE PMODE AND I E6P2 /AND AND OUT AC WITH THE NAMES AND I E6P3 AND I E6P4 /IF NO NAME THEN THE AC WILL STILL BE AND I E6P5 /ALL 7777S... CDF 10 /RESET TO UPPER FIELD POINTER CMA /PREPARE TO TEST NOW SNA CLA /.NOT. AC=0=NONAME=LOAD FROM WORKING AREA JMP LOADWA /LOAD FROM THE WORKING AREA. TAD E6P2 /GET THE POINTER TO THE START OF THE NAME JMS I ALOAD /LOAD IT IN AND START IT, RETURN IF NOT JMS I AREAD /FOUND. WELL GIVE A "NO" MESSAGE BY . /ISSUING A READ ON A NON-EXISTENT UNIT. / / / LOADWA, TAD WAM2 /GET A POINTER TO RIGHT BEFORE THE BINARY DCA I ALBLOCK /WORKING AREA AND STASH AWAY IN READ BLOCK TAD A111 /SELECT THE BINARY WORKING AREA NOW. DCA I ALUNIT /SEND IT TO THE UNIT WORD DCA I ALLOC /ZERO OUT THE CORE LOCATION NOW. CLA IAC /+1 IN THE AC TO READ IN JUST 1 BLOCK DCA I ALNUM /AND STASH AWAY IN THE NUMBER WORD NOW JMS I AREAD /NOW READ IN JUST 1 BLOCK TO ESTABLISH TO UNIT LUNIT /POINTER TO THE UNIT CRAP. TAD APBIT /SET A POINTER TO THE BIT TABLE -1 DCA AUTO1 /SO THAT THE AUTO REGISTER CAN USE IT. TAD AM40 /SET AUTO2 TO THE NUMBER OF BIT WORDS IN TABLE. DCA AUTO2 /SO WE CAN USE IT AS A COUNT TO SET UP BITS. CLA CMA /-1 MEANS TO LOAD THIS BLOCK DCA I AUTO1 /SET UP TABLE TO LOAD ALL OF CORE ISZ AUTO2 /ALL DONE? JMP .-3 /NOPE. DO SOME MORE. DCA I APTABLE /SET UP HEADER BLOCK TO HALT. TAD AWA /NOW SET LBLOCK TO POINT TO THE FIRST BLOCK DCA I ALBLOCK /OF THE BINARY WORKING AREA JMP I ALOADC /NOW JUMP TO MIDDLE TO LOADER TO LOAD IN THE W.A. / / / / / / / / / / / / E6P2, E6+2 E6P3, E6+3 E6P4, E6+4 E6P5, E6+5 A111, 111 AM40, -40 / ALOAD, LOAD AREAD, READ WAM2, WA-2 ALBLOCK,LBLOCK ALUNIT, LUNIT ALLOC, LLOC ALNUM, LNUM APBIT, PTABLE+340-1 APTABLE,PTABLE AWA, WA ALOADC, LOADC / / / / / / / / / / / / / / EJECT / / / *4200 / / / LOAD, 0 /THIS LOADS IN A PROGRAM BY NAME. TAD BM1 /SUBTRACT 1 SO AUTO REG CAN USE IT DCA AUTO1 /TO PICK UP THE ARGUEMENTS. RDF /GET THE CALLING DATA FIELD TAD BCIFCDF /SET UP THE RETURN CDF 10 /SET THE DATA FIELD TO UPPER CORE DCA I BLRET /AND STASH AWAY. CLA IAC CLL RTL /+4 IN THE AC TAD AUTO1 /BOP UP THE ARG POINTER TO THE UNIT-1 DCA AUTO2 /POSITION AND STASH AWAY. CDF 0 /RESET THE DATA FIELD POINTER TO 0 TAD I AUTO2 /GET THE UNIT NOW. CDF 10 /AND RESET THE DATA FIELD TO UPPER CORE. DCA I BLUNIT /SAVE IT IN THE UNITS POSITION. TAD BINDEX /GET THE POINTER TO THE INDEX AREA DCA I BLBLOCK /STASH AWAY IN THE BLOCK NUMBER WORD TAD BINCR2 /GET THE MODIFIED CORE FOR THE INDEX SEARCH DCA I BLLOC /STASH AWAY NOW IN THE CALL LOCATION. CLA CLL CML RTL /+2 IN THE AC FOR TWO BLOCKS TO BE READ IN. DCA I BLNUM /SET UP THE NUMBER NOW. JMS I BREAD /READ IN THE CORRECT INDEX NOW. LUNIT /POINTER TO THE READ INFORMATION. TAD BM100 /PREPARE THE SEARCH THE DIRECTORY NOW. DCA AUTO7 /SET UP THE DIRECTORY SEARCH COUNT TAD BINCR1 /SET THE SEARCH POINTER TO THE START OF THE DCA AUTO3 /INDEX AREA -1/ / LOOP, TAD AUTO1 /MOVE AUTO1 POINTER TO AUTO2 DCA AUTO2 /BECAUSE WE DONT WANT TO HAVE TO REGET THE ARG EACH TIME TAD AUTO3 /PUSH AUTO3 TO THE NEXT NAME IN THE INDEX CMA AND B7770 CMA /PUSH IS DONE NOW DCA AUTO3 TAD BM4 /RESET COUNTER TO CHECK FOR WORDS OF NAME DCA AUTO6 /STORE IN ANOTHER TEMP / LLOOP, CDF 0 /SET POINTER TO LOWER CORE TAD I AUTO2 /GET A NAME WORD CDF 10 /RESET THE POINTER TO UPPER CORE. CIA /NEGATE THE NAME WORD. TAD I AUTO3 /A MATCH?? SZA CLA JMP I BLBAD /NOPE. DO A BOP AND CHECK ISZ AUTO6 /HAVE WE CHECKED ALL FOUR WORDS OF THE NAME JMP LLOOP /NOPE, GO BACK AN CHECK SOME MORE. / ISZ AUTO3 /NAME IS A MATCH. NOW SKIP PAST SOURCE ISZ AUTO3 TAD I AUTO3 /GET THE STARTING BINARY BLOCK DCA I BLBLOCK /AND STASH AWAY TAD I AUTO3 /NOW GET THE LENGTH SPA CLA /IS THE LENGTH OK [POSITIVE] ??? JMP I BLBAD2 /NOPE. ERROR RETURN CLA IAC /ALL IS WELL. RESET DCA I BLNUM /THE NUMBER OF BLOCKS TO READ IN TO 1 TAD BPTAB2 /TAD A POINTER TO THE HEADER BLOCK CORE LOC DCA I BLLOC /AND STORE IN THE READ WORD. JMS I BREAD /READ IN THE HEADER BLOCK LUNIT /POINTER TO THE READ CRAP ISZ I BLBLOCK /ISZ THE BLOCK NUMBER PAST THE HEADER BLOCK / LOADC, DCA I BLLOC /ZAP OUT THE CORE LOC NOW. COMMON ENTRY TAD BBTAB /SET TO BIT POINTER TO THE BEGINNING OF THE MAP DCA I BTEMP /AND SAVE AWAY NOW TAD BM17 /PREPARE TO LOAD IN 17 BLOCKS JMS I BLITLOD /LOAD THEM IN NOW TAD I BBTAB2 /GET THE BITS WHICH TELL WHETHER 7400 IS LOADED CMA SZA CLA /TEST FOR THE 7400 BLOCK BEING LOADED IN JMP I BNOL74 /DONT LOAD IN THE 7400 BLOCK ISZ I BLLOC /BOP PAST THE 7400 LOCATION CLA CMA /-1: LOAD IN THE 7400 BLOCK INTO 10000 JMS I BLITLOD /LOAD IT IN NOW JMS I BMOVE /NOW MOVE LOCATIONS 10000 TO 7400 CDF 10 /THIS AVOIDS THE DATA-BREAK PROBLEM 0000 CDF 0 7400 400 /400 WORDS=1 BLOCK CLA CMA /-1: NOW RESET TO CONTINUE THE NORMAL LOAD TAD I BLLOC DCA I BLLOC /LOC NOW POINTS TO 10000 AGAIN JMP I BLN4 /SKIP PAST THE PHOONEY BOP / / / / / / / / / / / / / / / / BM1, -1 BM4, -4 BNOL74, NOL74 BMOVE, MOVE BLN4, LN4 BBTAB, PTABLE+340 BTEMP, TEMP BM17, -17 BLITLOD,LITLOD BBTAB2, PTABLE+357 BCIFCDF,CIF CDF 0 BLRET, LRET BLUNIT, LUNIT BINDEX, INDEX BLBLOCK,LBLOCK BINCR2, INCOR2 BLLOC, LLOC BLNUM, LNUM BREAD, READ BM100, -100 BINCR1, INCOR1 B7770, 7770 BLBAD, LBAD BLBAD2, LBAD2 BPTAB2, PTAB2 / / / / / / / / / / / / / / / / / / / / EJECT / / / / / / *4400 / / / / NOL74, ISZ TEMP /BOP UP THE BIT MAP POINTER ISZ I CLLOC /BOP UP THE LOC TO 10000 / LN4, TAD CM10 /READ IN THE REST OF CORE UP TO 13777 JMS LITLOD /LOAD NOW JMS I CMOVE /NOW MOVE THE HEADER BLOCK UP. CDF 10 PTABLE CDF 10 7774 4 /4 WORDS OF BOOTSTRAP NOW IN POSITION. DCA I CTPOINT /CLEAR THE MINI LOADER WORDS. DCA NOL74 /ALSO SET TOTAL COUNT TO ZERO(NOL74 IS GOOD ENOUGH) TAD CM7 /PREPARE TO SET UP MINI MAP TO READ IN SEMI-FINAL SEVEN BLOCKS DCA TEMP2 /SET UP THE PHOONEY COUNT LNLP, TAD I TEMP /GET THE CORRECT BIT MASK ISZ TEMP /BOP UP TO NEXT BIT MASK CMA /COMPLEMENT TO BE SURE SNA /BLOCK LOADED??? ISZ NOL74 /YEP. ISZ TOTAL COUNT. SNA CLA /TEST FOR PRESENCE ISZ I CTPOINT /WERE GOING TO LOAD IT. ALL IS WELL TAD I CTPOINT /NOW SHIFT OVER TPOINT CLL RAL /FOR THE NEXT ISZ-TEST DCA I CTPOINT ISZ TEMP2 /INCREMENT THE COUNTER JMP LNLP /NOT DONE YET. GET THE NEXT BIT MAP CRAP. TAD I CTPOINT /GIVE AN EXTRA ROTATE NOW CLL RTL /ROTATE ALL THE WAY TO BIT 0 CLL RTL DCA I CTPOINT /STASH AWAY NOW TAD I C7770 /NOW GET THE ADDRESS OF THE ROUTINE. DCA .+3 /SAVE IT FOR THE SETUP WHICH FOLLOWS. JMS I CMOVE /NOW MOVE CORRECT ROUTINE TO 7630 CDF 10 0000 /NEW READ ROUTINE GOES HERE CDF 10 /TO BE MOVED LPOINT, TREAD /TO 7630 FOR THE FINAL LOAD. 7767-TREAD+1 /NUMBER OF WORDS TO MOVE TAD I C7771 /GET THE FUDGE FACTOR TAD I CLBLOCK /ADD IN THE BLOCK NUMBER DCA I CLBLOCK /NOW STORE BACK AS AN ABSOLUTE BLOCK NUMBER TAD I CPTAB /IS THE FINAL BLOCK TO BE LOADED????? CMA SZA CLA JMP I CSYSLOD /NOPE. CUT OUT NOW AND DO THE LOAD. JMS I CMOVE /MOVE DOWN THE UNIT BLOCK TO A SAFE PLACE. CDF 10 LUNIT CDF 10 LUNIT2 4 /LUNIT IS NOW IN A PRESERVED STATE TAD NOL74 /GET THE ADDITIONAL NUMBER OF BLOCKS TO GO TAD LBLCK2 /ADD IN THE PRESENT BLOCK DCA LBLCK2 /SAVE AWAY IN THE LAST BLOCK COUNT TAD CSRTCH2 /SET UP THE CORRECT LOC NOW IN THE DCA LLOC2 /READ CALLING SEQUNCE BECAUSE THE MOVE DESTROYED IT. JMS I LPOINT /NOW CALL IN MINI READ ROUTINE TO READ IN LAST BLOCK LUNIT2, 0 /TEMPORARY UNIT FOR THE LAST BLOCK READ LLOC2, SRTCH2 /WHERE TO READ IT INTO LBLCK2, 0 /LAST BLOCK TO GO INTO CORE LNUM2, 1 /NUMBER OF BLOCKS TO READ IN JMS I CMOVE /NOW MOVE UP THE HALF OF LAST BLOCK CDF 10 /INTO CORRECT POSIITON SRTCH1 CDF 10 SYSLOD-200 /UPTO 7400-7577 200 /TWO-HUNDRED-GOODY WORDS JMP I CSYSLOD /NOW LOAD IN THE MIDDLE UPPER CORE LOCATIONS. / / / / / / / / / / LITLOD, 0 /THIS ROUTINE LOADS IN N BLOCKS DCA TEMP2 /STARTING FROM THE NEXT BLOCK NUMBER IN LBLOCK TAD I TEMP /GET THE NEXT BIT MASK CMA /COMPLEMENT TO BE SURE SZA CLA /ALL THE BITS ON??? JMP LITNO /DONT LOAD THIS BLOCK JMS I CREAD /BITS ON. READ IN THIS BLOCK. LUNIT ISZ I CLBLOCK /BOP UP TO THE NEXT BLOCK LITNO, ISZ I CLLOC /BOP UP TO THE NEXT LOC ISZ TEMP /BOP UP THE BIT MASK POSITION ISZ TEMP2 /BOP UP THE COUNT. ALL DONE? JMP LITLOD+2 /NOT YET DONE. GET THE NEXT JMP I LITLOD /ALL DONE. RETURN TO CALLER. / / TEMP, 0 /POINTER TEMP2, 0 /COUNTER / / LBAD, ISZ AUTO7 /BOP UP THE COUNT JMP I CLOOP /NOT YET DONE. TRY NEXT NAME / LBAD2, TAD I CLOAD /BINARY FILE NOT THERE. DCA .+3 /RETURN TO CALLER LRET, 0 /SET UP TO HIS DATA FIELD JMP I .+1 0000 /CALLERS ADDRESS. / / / / / / / / / / / / C7770, 7770 C7771, 7771 CLBLOCK,LBLOCK CPTAB, PTABLE+377 CSYSLOD,SYSLOD CSRTCH2,SRTCH2 CREAD, READ CLOOP, LOOP CLOAD, LOAD CLLOC, LLOC CM10, -10 CMOVE, MOVE CTPOINT,TPOINT CM7, -7 / / / / / / / / / / / / / / / / / / / / / / / / / EJECT / / / /