/P?S/8 TC01/TC08 DECTAPE SYSTEM HANDLER / LAST EDIT: 21-NOV-1986 06:00:00 CJL / MUST BE ASSEMBLED WITH '/J' SWITCH SET. / P?S/8 HANDLER FOR TC01/TC08/BE01 OR ANY OTHER COMPATIBLE DECTAPE CONTROL / (C. O. L., ETC.) WITH UP TO EIGHT DECTAPE DRIVE UNITS TU55/TU56/BE03 / (C. O. L., ETC.). / AUTOMATICALLY REMEMBERS PROPER INITIAL SEARCH DIRECTION. / CAN BE BOOTSTRAPPED TO ANY UNIT. / HALTS/RETRIES ON ANY ERROR WHILE SEARCHING OR TRANSFERRING EXCEPT / END ERROR (WHICH CAUSES A TURN-AROUND). // P?S/8 EQUATED SYMBOLS. ADRLST= 7603 /ZAP ADDRESS LIST BBLEN= 0043 /SLURP LOADER BOOTSTRAP LENGTH BCIF= 7746 /SLURP LOADER STARTING FIELD LOCATION BINADR= 0020 /"%" BLOCK BINIT= 0020 /SLURP INITIALIZE ROUTINE BINITLN=0020 /LENGTH OF SLURP INITIALIZE CODE BINIT2= 0031 /SECONDARY SLURP INITIALIZE ADDRESS BISTRT= 7776 /DEFAULT STARTING ADDRESS IF /I OR /V CALADR= 0020 /CALLING ADDRESS CALFLD= 0021 /CALLING FIELD CNTLST= 7615 /CONTENTS LIST FOR ZAPPED ADDRESSES DEVSIZE=6760 /DEVICE SIZE WORD IN SYSGEN ROUTINE DSPBLB= 0024 /BLURB DISPLAY ROUTINE ERRTRP= 0046 /ERROR TRAP POINTER ESTATUS=0077 /ERROR STATUS FILBLB= 0023 /BLURB FILL ROUTINE GENAD1= 7400 /SYSIO GENERATION ADDRESS HIDWRD= 7600 /SYSTEM HANDLER ID WORD IGEN= 4020 /I GENERATION FIELD AND ADDRESS IOTRAP= 0045 /I/O TRAP POINTER IOWAIT= 0047 /I/O WAIT POINTER INSERT= 1305 /CHARACTER INSERT ROUTINE L200= 0105 /CONSTANT 0200 L7= 0177 /CONSTANT 0007 L7756= 0065 /CONSTANT 7756 L7770= 0040 /CONSTANT 7770 MONSTRT=0353 /KEYBOARD MONITOR STARTUP ADDRESS MOVBLB= 0022 /ERROR BLURB MOVE ROUTINE PCHLOOP=0162 /POINTER TO CHARACTER INPUT ROUTINE REWIND= 1335 /REWIND/UNLOAD ADDRESS SBLOCK= 7635 /SYSTEM LOADER BLOCK ARGUMENT SBOOT= 7600 /MONITOR RESTART ADDRESS SBTFUN= 7602 /SYSTEM BOOTSTRAP FUNCTION SCORE= 7633 /SYSTEM LOADER TRANSFER ADDRESS SCRSIZE=7611 /SYSTEM MEMORY SIZE, ETC. WORD SDATE= 7610 /SYSTEM LOW-ORDER DATE WORD SFILES= 7757 /FILE LIST PASSED HERE SFUN= 7634 /SYSTEM LOADER FUNCTION WORD SLOAD= 7632 /SYSTEM LOADER ADDRESS SLPGEN= 4420 /SLURP LOADER GENERATION FIELD AND ADDRESS SLPSA= 7777 /SLURP LOADER STARTING ADDRESS WORD SLUPAGE=2600 /SLURP LOADING PAGE SOUTFLS=7607 /OUTPUT FILE COUNT PASSED HERE SPARM= 7756 /EQUALS PARAMETER PASSED HERE SWAL= 7604 /SWITCHES /A-/L SWMX= 7605 /SWITCHES /M-/X SWY9= 7606 /SWITCHES /Y-/9 SYSIO= 7640 /SYSTEM I/O ENTRY POINT SYSTART=7637 /SYSTEM LOADER STARTUP ADDRESS TEMP1= 0100 /TEMPORARY TRAPIO= 1041 /ENTRY POINT FOR I/O TRAPS TRPERR= 1200 /ENTRY POINT FOR I/O ERROR TRAPS TRPGEN= 1020 /TRAP ROUTINE GENERATION FIELD AND ADDRESS UNIT= 0000 /KEYBOARD MONITOR UNIT WAITIO= 1110 /ENTRY POINT FOR I/O WAIT TRAPS WRITE= 4000 /SYSIO WRITE BIT ZAPLST= 7627 /REPLACEMENT LIST FOR ZAPPED ADDRESSES // END OF P?S/8 EQUATED SYMBOLS. / TC01/TC08 EQUATED SYMBOLS. DTCA= 6762 /CLEAR DECTAPE "A" REGISTER DTLA= 6766 /LOAD DECTAPE "A" REGISTER DTLB= 6774 /LOAD DECTAPE "B" REGISTER DTRA= 6761 /READ DECTAPE "A" REGISTER DTRB= 6772 /READ DECTAPE "B" REGISTER DTSF= 6771 /SKIP ON DECTAPE FLAG OR ERROR FLAG DTXA= 6764 /XOR DECTAPE "A" REGISTER / MISCELLANEOUS EQUATED SYMBOLS. NL0001= CLA IAC /LOAD AC WITH 0001 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 NL7777= CLA CMA /LOAD AC WITH 7777 SBOFF= SLUPAGE-SBOOT /OFFSET VALUE SCAA= 7755 /CURRENT ADDRESS LOCATION SWC= 7754 /WORD COUNT LOCATION SYSNUM= 0001 /SYSTEM ID NUMBER **** MUST BE UNIQUE **** TCSIZE= 2702 /STANDARD DECTAPE BLOCK LENGTH / MULTIPLE DRIVE BOOTSTRAP. NOPUNCH /TURN OFF BINARY OUTPUT *SBOOT /BOOTSTRAP LOADING ADDRESS SBOOT, LAS /GET UNIT FROM SWITCHES AND SRWAIT/(7000) /JUST UNIT BITS TAD SR600/(600) /GET REWIND VALUE JMS SRWAIT /WAIT FOR END ZONE DTLB /ENSURE FIELD 0 TRANSFER DCA SWC /CLEAR WORD COUNT TAD SR7577/(SBOOT-1)/SETUP THE DCA SCAA /CURRENT ADDRESS DTRA /GET CURRENT "A" REGISTER CONTENTS TAD SR7620/(220-400)/GET READ VALUE JMS SRWAIT /WAIT FOR TRANSFER SR600, 600 /CONSTANT 0600 SRWAIT, 7000 /INITIALIZED FOR USE AS A CONSTANT DTLA /LOAD "A" REGISTER DTSF /FLAG UP? JMP .-1 /NO, WAIT FOR IT JMP I SRWAIT /YES, RETURN SR7577, SBOOT-1 /CONSTANT 7577 SR7620, 220-400 /CONSTANT 7620 / SHORTEST BOOTSTRAP. *7615 /OVER WAIT AREA LAS /GET SWITCHES DTLA /LOAD "A" REGISTER JMP . /WAIT FOR TRANSFER *7754 /AT WORD COUNT AREA SWC, SBOOT-1 /ENSURE A GOOD VALUE SCAA, SBOOT-1 /THIS MUST BE CORRECT / EITHER MOUNT TAPE IN END ZONE MANUALLY OR START AT 7615 WITH CONSOLE SWITCHES / CONTAINING 0600+(UNIT IN BITS[0-2]). WAIT FOR END ERROR. / AFTER POSITIONING THE TAPE IN END ZONE, START AT 7615 WITH CONSOLE SWITCHES / CONTAINING 0220+(UNIT IN BITS[0-2]). MONITOR WILL COME UP. / THE WORD COUNT MUST BE SET TO ANYTHING OTHER THAN 7624-7777. SINCE THE CURRENT / ADDRESS MUST BE SET TO 7577, AND THIS IS AN ACCEPTABLE VALUE FOR THE WORD / COUNT, DEPOSITING THAT NUMBER TWICE IS LESS CONSOLE MANIPULATION THAN ANY / OTHER METHOD. ENPUNCH /RESTORE BINARY OUTPUT / P?S/8 MONITOR COMPONENTS. / REWIND/UNLOAD ROUTINE. *REWIND-1 /DEFINE REWIND/UNLOAD ROUTINE REWND2, TAD L7770/[-10] /MAGIC TIMEOUT FACTOR REWIND, DCA INSERT /SET TIMEOUT FACTOR TAD UNIT /GET CURRENT UNIT CLL RTR;RTR /MOVE TO RIGHT BITS TAD L700/(700) /REWIND CONTINOUS DTLA /DO IT TAD TEMP1 /GET INPUT CHAR TAD L7756/[-"R!300] /ADD -<^R> SNA CLA /SKIP IF NOT <^R> JMP I PCHLOOP/[CHLOOP]/CONTINUE UNLODE, DTSF /TEST FLAG SKP /SKIP IF NOT UP JMP REWND2 /DO IT AGAIN IF UP ISZ TEMP1 /TEST FIRST LINE OF DEFENSE JMP UNLODE /STILL TRYING ISZ INSERT /TEST TIMEOUT FACTOR JMP UNLODE /STILL GOING TAD L400/(400) /CONTINOUS FORWARD DTXA /DO IT L700, 700 /HARMLESS ANDS TO L400, 400 /GIVE IT TIME TO TAKE HOLD ZBLOCK .!177-2-. /EMPTY SPACE TAD L200/(200) /STOP THE TAPE, DTXA /I WANT TO TAKE IT OFF. JMP I PCHLOOP/[CHLOOP]/CONTINUE / DEVICE SIZE. *DEVSIZE /OVER SYSGEN ROUTINES TCSIZE /DEFINE OUR DEVICE SIZE / P?S/8 BINARY SLURP LOADER. FIELD SLPGEN&70%10 /GENERATION FIELD *SLPGEN&7600 /GENERATION ADDRESS SLPCORE,NOPUNCH /FOOL THE ASSEMBLER FIELD 0 /WHERE IT LOADS *SLPCORE /RESET ORIGIN ENPUNCH /UN-FOOL THE ASSEMBLER RELOC SBOOT /WHERE IT EXECUTES SBOOT, /BOOTSTRAP HERE B7770, SPA SNA SZL CLA /CLEAN UP B600, 600 /CONSTANT 0600; THIS MIGHT BE SKIPPED DTLB /ENSURE FIELD ZERO TRANSFER TAD B600/(600) /GET REVERSE MOVE CONSTANT JMS BWAIT /GO REWIND THE TAPE TAD B7577/(SBOOT-1) /SETUP THE DCA SCAA /CURRENT ADDRESS SLIZAP, DCA SWC /CLEAR WORD COUNT **** /I **** JMP BILOAD IFNZRO 7610-. B400, 400 /CONSTANT 0400 TAD B220/(220) /GET READ FORWARD CONSTANT JMS BWAIT/SKP /READ IN THE BLOCK AND WAIT FOR OVERLAY BWAIT, .-. /WAIT ROUTINE TAD SBUNIT /ADD ON BOOTSTRAP UNIT BITS DTLA /LOAD AUGMENTED COMMAND DTSF /FLAG UP? JMP .-1 /NO, WAIT FOR IT IFNZRO 7620-. B7000, 7000 /CONSTANT 7000 JMP I BWAIT /RETURN B4002, 4002 /CONSTANT 4002 B7577, SBOOT-1 /CURRENT ADDRESS CONSTANT SBUNIT, .-. /BOOTSTRAP UNIT WILL BE IN BITS[0-2] / ALL BOOTSTRAP CODE MUST BE WITHIN 7600-7642. / ENSURE THIS SIZE CONVENTION IS MET. IFNZRO SBOOT+BBLEN-.&4000 BREAD2, TAD B220/(220) /STOP THE DTXA /MOVING TAPE ONLY BREAD, ISZ BFLPTR /BUMP UP TO NEXT FILE TAD I BFLPTR /GET NEXT FILE AND B7770/(7770) /JUST FILE BITS SNA /SKIP IF A FILE JMP BCIF /JUMP ON END OF FILES DCA BWAIT /SAVE IT TAD I BFLPTR /GET FILE AGAIN RTR;RTR /MOVE TO HIGH-ORDER B220, AND B7000/(7000) /JUST UNIT BITS TAD B210/(210) /SEARCH FORWARD DTLA /LOAD REGISTER BCONT, SPA CLA /DON'T CHANGE DIRECTION AT FIRST TAD B400/(400) /ADD IN DIRECTION BIT BSERCH, DTXA /XOR IN NOTHING OR DIRECTION BIT TAD B7750/(BWDCT) /SETUP FOR SEARCHES DCA SCAA /INTO CURRENT ADDRESS DTSF DTRB /GET ERROR REGISTER WHILE WAITING JMP .-1 /WAIT FOR IT SPA /ANY ERRORS? HLT /BARF DTRA /GET STATUS B210, AND B400/(400) /FOR DIRECTION SZA CLA /ADD CONSTANT IF REVERSE TAD B4002/(4002) /REVERSE+OVERSHOOT FUDGE TAD BWDCT /BLOCK NUMBERS FALL IN THERE CIA /INVERT FOR COMPARISON TAD BWAIT /GET AGAIN SZA /FOUND IT? JMP BCONT /NO, TRY AGAIN TAD B30/(30) /READ FORWARD DTXA /XOR IT IN BNWREC, TAD B7756/(-22) /22 GROUPS DCA BGRPCT /INTO GROUP COUNTER BNWGRP, TAD B7772/(-6) /6 WORDS DCA BWDCT /INTO WORD COUNTER JMS BGETWD /GET A WORD CLL RAR /DO AN INITIAL SHIFT SKP /DON'T GET FLAG THIS TIME BGRPLP, TAD BRLBTS /GET FLAG RTL /ROTATE TO NEXT DCA BRLBTS /PUT IT BACK TAD BRLBTS /GET IT AGAIN SPA CLA / OR FIELD SETTING? JMP BEOF /YES... (NOTE LINK IS OFF HERE IF ) JMS BGETWD /GET ANOTHER BCDF, CDF 00+.-. /FIELD BITS WILL BE FILLED IN SNL /SKIP IF ORIGIN SETTING DCA I BLOC /STORE CODE CDF 00 /RESTORE FIELD ISZ BLOC /BUMP CORE POINTER SZL /SKIP IF DATA WORD; WHO CARES IF SKIPPED DCA BLOC /SET NEW ORIGIN BNXTWD, ISZ BWDCT /DONE SIX YET? JMP BGRPLP /NO, DO ANOTHER ISZ BGRPCT /DONE 22 GROUPS YET? JMP BNWGRP /NO DO ANOTHER ISZ BWAIT /BUMP TO NEXT BLOCK TAD B30/(30) /BACK TO SEARCH MODE JMP BSERCH /GO DO IT BEOF, SNL CLA /FIELD SETTING? JMP BREAD2 /NO JMS BGETWD /GET A NEW WORD DCA BCDF /MAKE IT THE NEW FIELD SETTING JMP BNXTWD /GO DO NEXT ONE BGETWD, .-. /GET A WORD DCA SWC /CLEAR WORD COUNT FOR TEST TAD B7750/(BWD-1) /SETUP CURRENT ADDRESS DCA SCAA /FOR TRANSFER TAD SWC /GET WORD COUNT B7750, SPA SNA CLA /STILL ZERO?; SPA FORMS 7750 JMP .-2 /YES, WAIT SOME MORE TAD BWD /GET THE WORD JMP I BGETWD /RETURN B30, 30 /CONSTANT 0030 B7756, 7756 /GROUP COUNT CONSTANT BLOC, .-. /LOCATION COUNTER BRLBTS, .-. /FLAG WORD ZBLOCK 7745-. /EMPTY SPACE BERR, /DEFAULT STARTING ADDRESS B7772, SPA SNA SZL CLA HLT /NEVER EVER SKIPS BUT HALTS BCIF, CIF CDF 00 /CHANGED TO APPROPRIATE FIELD JMP I SPARM /START USER PROGRAM SPSNCL=SPA SNA CLA /VRS: KLUDGE IFNZRO SPSNCL-. / IFNZRO SPA SNA CLA-. BWDCT, .-. /WORD COUNT IFNZRO SPSNCL+1-. / IFNZRO SPA SNA CLA+1-. BWD, .-. /THE WORD BUFFER BGRPCT, .-. /GROUP COUNT BFLPTR, SFILES-1 /POINTER TO PASSED FILES SWC, .-. /WORD COUNT SCAA, .-. /CURRENT ADDRESS SPARM, BERR /STARTING ADDRESS; INITIALIZED FOR DEFAULT SFILES, /FILE SPECIFICATIONS PASSED HERE / SLURP INITIALIZE CODE. RELOC BINIT2 /WHERE THIS EXECUTES BINIT2, TAD I BNUNIT/[SBTFUN] /GET BOOTSTRAP UNIT AND BN7/[7] /JUST UNIT BITS CLL RTR;RTR /MOVE TO AC[0-2] DCA I BNSBUNIT/[SBUNIT+SBOFF] /STORE FOR BOOTSTRAP JMP I BINIT /RETURN BNSBUNI,SBUNIT+SBOFF /WHERE SBUNIT IS AT ONCE-ONLY TIME BNUNIT, SBTFUN /SYSTEM BOOTSTRAP UNIT BITS HERE BN7, 7 /CONSTANT 0007 ZBLOCK BINIT2+BINITLN-. /EMPTY SPACE RELOC SFILES+BINITLN /RESET ORIGIN SLPSA, BREAD /SLURP LOADER STARTING ADDRESS /N. B. NON-ZERO MEANS SLURP LOADER EXISTS! RELOC /TURN OFF RELOCATION / P?S/8 SYSTEM I/O ROUTINE LOADER. / CORE IMAGE OF A BINARY FORMAT FILE WHICH WILL BE WRITTEN OUT TO THE /I BLOCK. / THE FOLLOWING PAGE OF CODE IS AN EXAMPLE OF A P?S/8 BINARY FORMAT FILE. / IT WILL BE WRITTEN OUT AT SYSGEN TIME AS A CORE IMAGE OF A "FILE" TO BE / USED LATER AS THE LAST LOADED "FILE" WHEN INVOKING THE '/I' OPTION OF THE / SLURP LOADER. AT RUN TIME, IT WILL BE LOADED OVER AND NEXT TO THE SLURP / LOADER (BY THE SLURP LOADER!), CAUSING THE SYSTEM I/O ROUTINES TO BE RELOADED; / THE FINAL EFFECT IS AS IF THE VIRTUAL LOADER (/V) HAD BEEN USED, BUT WITHOUT / THE OVERHEAD AND WRITING (THE SLURP LOADER AND /I CODING CAN BE USED WITH / WRITE-LOCKED DEVICES.) / THE ONLY RESTRICTION ON USE OF THE /I OPTION IS THAT IT IS PASSED AS A FILE / ARGUMENT TO THE LOADER, AND THUS LIMITS THE LOADER TO ONLY SIXTEEN FILES / MAXIMUM INSTEAD OF THE NORMAL SEVENTEEN. BY USING THE /I OPTION, THE USER / CAN MAINTAIN DEVICE INDEPENDENCE, YET TAKE ADVANTAGE OF THE BENEFITS OF / THE SLURP LOADER OVER THE VIRTUAL (/V) LOADER. / P?S/8 BINARY FORMAT AND CORE IMAGE FORMAT ARE RELATIVELY SIMILAR, BUT THE / DIFFERENCES WILL BE DESCRIBED. / P?S/8 BINARY FORMAT DESCRIPTION. / THE P?S/8 BINARY FILE FORMAT CONSISTS OF A SEQUENTIAL LIST OF BLOCKS, EACH / BLOCK CONTAINING 128 LOGICAL WORDS. THE WORDS BREAKDOWN FURTHER INTO EIGHTEEN / GROUPS OF SEVEN WORDS PLUS TWO WASTE WORDS. IF ANY PHYSICAL ADDITIONAL WORDS / EXIST, IT IS THE LOADER'S RESPONSIBILITY TO PROPERLY IGNORE THEM, JUST AS / IN SEVERAL SYSTEM HANDLERS. / EACH GROUP OF SEVEN WORDS CONSISTS OF A CONTROL WORD AND SIX DATA WORDS. / THE CONTROL WORD CONSISTS OF SIX BIT PAIRS EACH OF WHICH CONTROLS THE / CORRESPONDING FOLLOWING DATA WORDS. THE ORDERING IS LEFT TO RIGHT, I.E. / THE HIGH-ORDER TWO BITS OF THE CONTROL WORD CONTROL THE DATA WORD IMMEDIATELY / FOLLOWING THE CONTROL WORD; THE LOW-ORDER TWO BITS OF THE CONTROL WORD CONTROL / THE SIXTH DATA WORD FOLLOWING THE CONTROL WORD. SINCE EACH GROUP (AND / THEREFORE BLOCK) IS AUTONOMOUS EXCEPT FOR IMPLIED ORIGIN AND FIELD, ANY / SINGLE BLOCK CAN BE LOADED INDEPENDENTLY. / THIS /I BLOCK CONFORMS TO THIS CONVENTION, AND WILL BE TREATED AS A ONE / BLOCK LONG "FILE" COMPLETE WITH . / ALL ACTUAL DATA WORDS ARE IDENTICAL TO THEIR CORE IMAGE COUNTERPARTS, HOWEVER, / NOT ALL WORDS IN A GROUP ARE ACTUAL DATA WORDS. / BIT CONVENTION FOR CONTROL WORDS. / EACH OF THE CONTROL WORD'S BIT PAIRS CONTROLS THE CORRESPONDING DATA WORD / IN THE FOLLOWING MANNER: / 00 ACTUAL DATA WORD; THE CORRESPONDING WORD IS AN ACTUAL DATA WORD / TO BE LOADED ACCORDING TO THE CURRENT ORIGIN ADDRESS; LOAD IT AND / ADVANCE THE ORIGIN ADDRESS BY ONE. / 01 END OF FILE; IGNORE CORRESPONDING WORD (AND REST OF FILE!). / 10 ORIGIN SETTING; SET CURRENT ORIGIN ADDRESS TO THE VALUE OF THE / CORRESPONDING DATA WORD. / 11 FIELD SETTING; THE CORRESPONDING WORD IS A CDF INSTRUCTION TO THE / NEW FIELD; EXECUTE IT WHEN LOADING DATA WORDS INDIRECTLY THROUGH / THE CURRENT ORIGIN ADDRESS. THIS ALLOWS LOADING TO OCCUR IN FIELDS / 0-7. / TYPICAL P?S/8 BINARY FORMAT FILES ARE CREATED BY EITHER AN ASSEMBLER PROGRAM / OR THE BINARY UTILITIES (BIN, BSAVE, ETC.). SEVERAL SYSTEM PROGRAMS CHECK / BINARY FILE FORMAT VALIDITY BY LOOKING FOR INITIAL DATA OF AN ORIGIN TO / 0200, THUS MAKING THE CONTROL WORD OF THE FORM 10 XX XX XX XX XX, AND THE / FIRST DATA WORD 0200. / THE /I "FILE" WAS NOT CREATED DIRECTLY BY ANY ASSEMBLER, AND THIS LACKS THE / (UNNECESSARY) "*200" CONVENTION OF A DEFAULT ORIGIN. ONLY THE SLURP LOADER / WILL EVER LOOK AT THE /I "FILE", AND THE LOADER DOESN'T VALIDATE THE FILE / FORMAT. / A TYPICAL BINARY FILE IS SLIGHTLY GREATER THAN 7/6 OF THE EQUIVALENT CORE / IMAGE FILE SIZE. / SINCE NO CHECKSUM SCHEME IS USED IN THE FILE FORMAT, THE USER CAN PATCH / FREELY ANY BINARY FILE. THIS IS USEFUL WHEN MODIFYING OLD PAPER-TAPE BINARY / FILES WHICH LACK FIELD SETTINGS, ETC. WHEN ATTEMPTING TO LOAD THEM INTO / EXTENDED MEMORY FIELDS THEY WERE NOT INTENDED FOR, ETC. / THE /I CODE COULD BE IMPLEMENTED BY A USER PROGRAM, BUT WOULD THEN NOT BE / DEVICE INDEPENDENT. / SPECIAL NOTE ON SELF-STARTING. / SINCE THE USER CAN DIRECTLY OVERLAY THE LOADER (INDEED THE /I OPTION USES / THIS VERY METHOD!), IT IS POSSIBLE TO CREATE A "SELF-STARTING" PROGRAM BY / SELECTIVE OVERLAY OF THE STARTUP LOCATIONS: / BCIF (07746) STARTING FIELD AS A CIF CDF INSTRUCTION. / SPARM (07756) STARTING ADDRESS IN THE STARTING FIELD. / USER LOADING OF THESE LOCATIONS WILL ALWAYS OVERRIDE ANY AND ALL OTHER METHODS / (DEFAULT VALUES, DEFAULT VALUES WITH /I IN EFFECT, "GET" VALUES, EXPLICIT / COMMAND OPTION SWITCHES, EQUALS PARAMETERS, PRIOR USER LOADING OF THESE / SAME LOCATIONS IN AN EARLIER PASSED BINARY FILE, ETC.). / N. B. THIS SELF-STARTING ABILITY IS TOTALLY IGNORED WHEN USING THE VIRTUAL / (/V) LOADER; SEE "BIN" FOR A DISCUSSION OF THE DISPOSITION OF USER LOADING / INTO 07600-07777, ETC. WHEN THE VIRTUAL LOADER IS IN EFFECT. / BINARY LOADER /I CODING. FIELD IGEN&70%10 /I GENERATION FIELD *IGEN&7600 /I GENERATION ADDRESS ICOR, NOPUNCH /FOOL THE ASSEMBLER FIELD 0 /WHERE THIS LOADS *ICOR /RESET ORIGIN ENPUNCH /UN-FOOL THE ASSEMBLER / BIT DEFINITIONS FOR BINARY CONTROL WORDS. DA1= 0000 /DATA IN WORD 1 DA2= 0000 /DATA IN WORD 2 DA3= 0000 /DATA IN WORD 3 DA4= 0000 /DATA IN WORD 4 DA5= 0000 /DATA IN WORD 5 DA6= 0000 /DATA IN WORD 6 DATALL= DA1+DA2+DA3+DA4+DA5+DA6 /DATA IN ALL WORDS EF1= 2000 /END OF FILE IN WORD 1 EF2= 0400 /END OF FILE IN WORD 2 EF3= 0100 /END OF FILE IN WORD 3 EF4= 0020 /END OF FILE IN WORD 4 EF5= 0004 /END OF FILE IN WORD 5 EF6= 0001 /END OF FILE IN WORD 6 OR1= 4000 /ORIGIN SETTING IN WORD 1 OR2= 1000 /ORIGIN SETTING IN WORD 2 OR3= 0200 /ORIGIN SETTING IN WORD 3 OR4= 0040 /ORIGIN SETTING IN WORD 4 OR5= 0010 /ORIGIN SETTING IN WORD 5 OR6= 0002 /ORIGIN SETTING IN WORD 6 FL1= 6000 /FIELD SETTING IN WORD 1 FL2= 1400 /FIELD SETTING IN WORD 2 FL3= 0300 /FIELD SETTING IN WORD 3 FL4= 0060 /FIELD SETTING IN WORD 4 FL5= 0014 /FIELD SETTING IN WORD 5 FL6= 0003 /FIELD SETTING IN WORD 6 FL1+OR2+DA3+DA4+DA5+DA6 /NEW CONTROL WORD CDF 00 /FIELD 0 SFILES /*SFILES RELOC SFILES /FOOL THE ASSEMBLER BILOAD, TAD BAMT/(SBOOT-SADDR) /GET THE RIGHT AMOUNT DCA SWC /TO WORD COUNT TAD SBUNIT /GET BOOTSTRAP UNIT BITS TAD B220/(220) /ADD ON READ FORWARD CONSTANT DATALL /NEW CONTROL WORD RELOC .-1 /FOOL THE ASSEMBLER DTLA /LOAD THE REGISTER DTSF /WAIT FOR JMP .-1 /THE TRANSFER TAD SOUT/(220) /GET STOPPING CONSTANT DTXA /STOP THE TAPE DTRA /GET CURRENT UNIT DATALL /NEW CONTROL WORD RELOC .-1 /FOOL THE ASSEMBLER CLL RTL;RTL /MOVE TO BITS[9-11] DCA SBTFUN /STASH AS BOOTSTRAP UNIT JMP SWAL /FIXUP SYSTEM LOADER THERE BAMT, SBOOT-SADDR /PROPER AMOUNT TO TRANSFER WITHOUT OVERLAY BISTRT, HLT /DEFAULT START IS TO HERE DA1+OR2+DA3+OR4+DA5+EF6 /NEW CONTROL WORD RELOC .-1 /FOOL THE ASSEMBLER JMP BISTRT /JUST IN CASE SLIZAP /*SLIZAP RELOC SLIZAP /FOOL THE ASSEMBLER SLIZAP, JMP BILOAD /BRANCH TO OUR CODE BREAD /*BREAD RELOC BREAD /FOOL THE ASSEMBLER BREAD, JMP SBOOT /BRANCH TO MODIFIED BOOTSTRAP / HERE / END OF /I CODING WHICH MUST FIT IN ONE PAGE. RELOC /TURN OFF RELOCATION IFNZRO ICOR+200-.&4000 / MONITOR I/O INTERCEPT BLOCKS FOR TC01/TC08. / PAGE AND FIELD RELOCATABLE CODE TO BE LOADED BY CONSOLE OVERLAY, ETC. FOR / I/O AND ERROR TRAP PURPOSES. FIELD TRPGEN&70%10 /GENERATES HERE *TRPGEN&7600 /SYSGEN WANTS IT HERE NOPUNCH /FOOL THE ASSEMBLER FIELD 1 /WHERE IT MIGHT LOAD *TRPGEN&7600 /RESET ORIGIN ENPUNCH /UN-FOOL THE ASSEMBLER RELOC SBOOT /FOOL THE ASSEMBLER HIDWRD, SYSNUM /SYSTEM DEVICE HANDLER ID NUMBER DEVICE TC08 /SYSTEM DEVICE NAME / I/O ADDRESSES. ADRLST, SWAIT1 /NORMALLY DTSF DTRB SWAIT1+1 /NORMALLY JMP SWAIT1 SERR /NORMALLY HLT OR 7401 SERR+1 /NORMALLY JMP SRETRY SYSIO+4 /NORMALLY RDF SYSIO+5 /NORMALLY TAD SCIDF/(CIF CDF) 0 /THIS ENDS THE SHORT LIST ZBLOCK ADRLST+12-. /EMPTY SPACE / I/O NORMAL CONTENTS. CNTLST, DTSF DTRB /SWAIT1 JMP SWAIT1 /SWAIT1+1 HLT/OR 7401 /SERR JMP SRETRY /SERR+1 RDF /SYSIO+4 TAD SCIDF/(CIF CDF) /SYSIO+5 0 /THIS ENDS THE SHORT LIST ZBLOCK CNTLST+12-. /EMPTY SPACE / I/O REPLACEMENT CONTENTS. ZAPLST, CIF 10 /WILL BE TO CORRECT FIELD JMP IOWAIT /JUMP THERE DURING I/O WAIT CIF 10 /WILL BE TO CORRECT FIELD JMP ERRTRP /JMP THERE ON ANY ERROR CIF 10 /WILL BE TO CORRECT FIELD JMP IOTRAP /JMP THERE ON ANY CALL 0 /THIS ENDS THE SHORT LIST ZBLOCK ZAPLST+12-. /EMPTY SPACE RELOC /UN-FOOL THE ASSEMBLER / I/O TRAPS COME HERE. TRAPIO, RDF /GET CALLING FIELD TAD TRPCDF/(CDF) /MAKE INTO CDF CALLING FIELD DCA TRPINST /STORE IN-LINE TRPCDF, CDF 00 /GOTO MONITOR FIELD TAD I (SYSIO) /GET CALLING ADDRESS DCA CALADR /SAVE FOR ERROR HANDLER NL0001 /GET BUMPUP FACTOR TAD CALADR /POINT TO NEW FUNCTION WORD DCA GETINST /STASH THE POINTER TAD I (SFUNCT) /GET OLD FUNCTION WORD AND (7) /JUST UNIT BITS TAD (DCA TABLE) /ADD ON STORAGE BASE DCA PUTINST /STORE IN-LINE TAD I (STEM) /GET OLD LAST TRANSFERRED BLOCK PUTINST,DCA TABLE+.-. /SAVE IN TABLE TRPINST,.-. /GOTO CALLING FIELD TAD TRPINST /GET CDF CALLING FIELD DCA CALFLD /SAVE FOR ERROR HANDLER TAD CALFLD /GET CDF CALLING FIELD AGAIN DCA TRPIN2 /STORE IN-LINE TAD I GETINST /GET NEW FUNCTION WORD AND (7) /JUST UNIT BITS TAD (TAD TABLE) /ADD ON ACCESS BASE DCA GETINST /STORE IN-LINE CDF 00 /GOTO MONITOR FIELD GETINST,TAD TABLE+.-. /GET PROPER LAST TRANSFERRED BLOCK DCA I (STEM) /STORE IN HANDLER'S LOCATION TRPIN2, .-. /GOTO CALLING FIELD NL7775 /SETUP THE DCA ENDCNT /END ERROR COUNTER NL0002 /SET CIF BIT TAD TRPINST /NOW HAVE CIF CDF CALLING FIELD CIF 00 /GOTO MONITOR FIELD JMP I (SYSIO+6) /CONTINUE THERE ENDCNT, .-. /END ERROR COUNTER ZBLOCK WAITIO-. /EMPTY SPACE WAITIO, TAD (-110) /RESET DCA PUTINST /TIME-OUT COUNTER WATLUP, DTSF DTRB /FLAG UP? JMP TIMIT /NO, TIME IT OUT RTL /MOVE OVER END ERROR BIT SPA CLA /SKIP IF OTHER THAN END ERROR ISZ ENDCNT /ELSE BUMP END ERROR COUNTER JMP OTHER /JUMP IF NOT TOO MANY END ERRORS NL7775 /RESET THE DCA ENDCNT /END ERROR COUNTER DTRB /GET STATUS JMP ENDFAIL /GO COMPLAIN THERE OTHER, TAD CALFLD /GET CALLING CDF INSTRUCTION DCA OTHINST /STORE IN-LINE CDF 00 /GOTO MONITOR FIELD TAD I (SBLK) /GET LATEST BLOCK OTHINST,.-. /GOTO CALLING FIELD SPA CLA /SKIP IF POSSIBLY VALID BLOCK MARK VALUE JMP BLKFAIL /JUMP IF BAD VALUE DTRB /GET STATUS CIF 00 /GOTO MONITOR FIELD JMP I (SWAIT2) /CONTINUE THERE TIMIT, ISZ GETINST /COUNT THIS ATTEMPT JMP WATLUP /KEEP GOING ISZ PUTINST /TOO MANY TIMES? JMP WATLUP /NO, TRY AGAIN CLA /YES, CLEAN UP BLKFAIL,DTRA /GET MOTION REGISTER AND (200) /JUST MOTION BIT DTXA /CLEAR IT TAD (40) /SET WAIT ERROR BIT ENDFAIL,CIF 00 /GOTO MONITOR FIELD JMP I (SERR) /BARF THERE TABLE, 3777 /BLOCK REMEMBERING TABLE 3777 3777 3777 3777 3777 3777 3777 PAGE / ERRORS COME HERE. TRPERR, DCA ESTATUS /SAVE ERROR STATUS DCA ERRADR /CLEAR RELATIVE ERROR ADDRESS TAD ESTATUS /GET ERROR STATUS JMP ERRENT /CONTINUE THERE ERRLUP, TAD ETEMP /GET LATEST SPA /FOUND ERROR? JMP ERRFND /YES ERRENT, CLL RAL /MOVE ON TO NEXT POTENTIAL ERROR DCA ETEMP /SAVE LATEST TAD ERRADR /GET ERROR ADDRESS TAD (BLBLEN) /UPDATE TO NEXT ERROR DCA ERRADR /STORE IT BACK JMP ERRLUP /KEEP GOING ERRFND, CLA /CLEAN UP JMS ERLOC8 /FIND OURSELVES ERLOC8, .-. /OUR ADDRESS STORED HERE TAD ERLOC8 /GET OUR ADDRESS TAD (MRK-ERLOC8-BLBLEN) /ADJUST TO BLURB ADDRESS TAD ERRADR /NOW HAVE PROPER BLURB ADDRESS JMS I MOVBLB /MOVE IT INTO ERROR MESSAGE -BLBLEN /PASSED BLURB LENGTH IN WORDS JMS I FILBLB /FILL IN I/O PARTICULARS JMS I DSPBLB /DISPLAY BLURB AND POSSIBLY COME BACK TAD CALFLD /GET CALLING FIELD DCA ETEMP /STORE IN-LINE ETEMP, .-. /GOTO CALLING FIELD CLL /INDICATE REVERSE SEARCH FIRST CIF 00 /GOTO MONITOR FIELD JMP I (SRETRY) /TRY, TRY AGAIN ERRADR, .-. /ERROR ADDRESS CREATED HERE / ERROR BLURBS. MRK, TEXT " MARK" /MARK ERROR BLURB END, TEXT " END" /END ERROR BLURB SELECT, TEXT "SELECT" /SELECT ERROR BLURB PAR, TEXT "PARITY" /PARITY ERROR BLURB TIM, TEXT "TIMING" /TIMING ERROR BLURB TIMOUT, TEXT " WAIT" /TIME-OUT WAIT ERROR BLURB BLBLEN= .-TIMOUT /LENGTH OF ERROR BLURBS PAGE / TC01/TC08 DECTAPE SYSTEM HANDLER. FIELD 0 /WHERE THIS LOADS *GENAD1 /WHERE SYSGEN WANTS IT RELOC SBOOT /WHERE IT EXECUTES SBOOT, JMS SYSIO /CALL I/O ROUTINES TO BOOT S7600, 7600 /READ INTO 7600 SBTFUN, 0+.-. /UNIT BITS FILLED IN 0000 /BLOCK 0 SWAL, TAD SFUN /SWITCHES /A-/L; INITIALIZED FOR /I SWMX, TAD SBTFUN /SWITCHES /M-/X; INITIALIZED FOR /I SWY9, DCA SFUN /SWITCHES /Y-/9; INITIALIZED FOR /I SOUTFLS,JMP BCIF /NUMBER OF OUTPUT FILES; INITIALIZED FOR /I SDATE, .-. /SYSTEM DATE WORD SCRSIZE,.-. /SOFTWARE CORE SIZE SCOM, SHERE /SYSIO WAIT ROUTINE; INITIALIZED FOR BOOTSTRAP DTXA /DO PASSED FUNCTION TAD S7600/(-200) /SETUP FOR DCA SWC /200 WORDS SWAIT1, DTSF DTRB /**** CONSOLE **** CIF MCS+10 JMP .-1 /**** CONSOLE **** JMP IOWAIT SWAIT2, RTL /CHECK FOR S7750, SPA SNA CLA /END ZONE ERROR? JMP STURNX /YES, GO DO A TURNAROUND DTRB /CHECK FOR SMA /REAL ERRORS? JMP I SCOM /NO, RETURN NORMALLY SERR, HLT /**** CONSOLE **** CIF MCS+10 JMP SRETRY /**** CONSOLE **** JMP ERRTRP S10, 10 /CONSTANT 0010 SCIDF, CIF CDF 00 /IN-LINE CODE CONSTANT SLOAD, JMS SYSIO /SYSTEM LOADER HAS DEFAULTS TO SAVE CORE SCORE, 0000 /CORE ARGUMENT SFUN, WRITE /NUMBER OF BLOCKS TO READ OR WRITE, FIELD, UNIT SBLOCK, BINADR /STARTING BLOCK NUMBER JMP I .+1/(SYSTART) /START AT SYSTART,SBOOT /THIS STARTING ADDRESS / I/O ROUTINES ENTER HERE. SYSIO, SFILES-1 /I/O ENTRY; INITIALIZED FOR BOOTSTRAP NL7777 /BACKUP TAD I SYSIO /ADD ON CURRENT ADDRESS VALUE DCA SADDR /SAVE AS TRANSFER ADDRESS FOR LATER RDF /**** CONSOLE **** CIF MCS+10 TAD SCIDF/(CIF CDF) /**** CONSOLE **** JMP IOTRAP DCA SOUT /BACK TO THEM LATER ISZ SYSIO /BUMP TO NEXT ARGUMENT TAD I SYSIO /GET FUNCTION WORD DCA SFUNCT /SAVE IT ISZ SYSIO /BUMP TO BLOCK ARGUMENT TAD I SYSIO /GET DESIRED BLOCK STL CIA /INVERT IT TAD STEM /ADD ON CURRENT BLOCK TAD SOVSHT /AND OVERSHOOT FACTOR SRETRY, NL7777 CML /COMPLEMENT DIRECTION WITH NEXT TAD S10/(10) /AC=7, LINK=.NOT.LINK AND SFUNCT /GET UNIT BITS RTR;RTR /MOVE UNITS, COMPLEMENTED DIRECTION TO AC[0-3] TAD S10/(10) /ADD ON SEARCH BIT DTLA /LOAD REGISTER, STILL NO GO AND WRONG DIRECTION DTLB /SEARCH IN FIELD 0 TAD I SYSIO /GET DESIRED BLOCK AGAIN DCA STEM /MAKE IT CURRENT BLOCK TAD S7750/(SBLK) /SETUP CURRENT ADDRESS DCA SCAA /FOR SEARCHING STURNX, NL4000 /FORM A GO BIT SCONT, CML RTR;RTR /MOVE INVERTED DIRECTION AND GO BIT TO AC[3-4] JMS SCOM /GO GET A BLOCK DTRA /GET DIRECTION CMA RTL;RTL /COMPLEMENT AND MOVE DIRECTION TO LINK SNL CLA /GOING BACKWARDS? NL0002 /YES, ADD OVERSHOOT FACTOR TAD SBLK /GET CURRENT BLOCK CML CIA /INVERT FOR COMPARISON TAD STEM /ADD ON DESIRED BLOCK SNA CLA /SKIP NEXT IF WRONG BLOCK SNL CLA /SKIP NEXT IF GOING FORWARD ON RIGHT BLOCK JMP SCONT /GO BACK, LINK TELLS WHAT TO DO NEXT / AT THIS POINT THE TAPE IS POSITIONED CORRECTLY FOR TRANSFERRING. TAD SADDR /NOW SETUP DCA SCAA /CURRENT ADDRESS TAD SFUNCT /SETUP DTLB /TRANSFER FIELD TAD SFUNCT /GET FUNCTION, PAGE BITS RAL /FUNCTION GOES TO LINK S201, AND S7600/(7600) /JUST PAGE BITS IN AC DCA SPGCNT /SAVE THEM RAL;IAC;STL RTL;RTL /30 IF READING, 50 IF WRITING SNEXT, JMS SCOM /WAIT FOR 1 BLOCK TO BE TRANSFERRED SHERE, ISZ STEM /ACCOUNT FOR IT STL CLA /CLEAN UP; SET LINK IN CASE LAST TAD SPGCNT /GET PAGE COUNT TAD S7600/(-200) /DECREMENT BY ONE PAGE SNA /DONE? JMP SEXIT /YES, EXIT DCA SPGCNT /NO, SAVE UPDATED COUNT JMP SNEXT /GO DO ANOTHER SEXIT, TAD S201/(201) /STOP THE DTXA /TAPE DRIVE ISZ SYSIO /BUMP TO FINAL POSITION SOUT, 0220 /INITIALIZED FOR /I JMP I SYSIO /RETURN TO CALLER SOVSHT, 10 /CHANGE THIS FOR INSTALLATIONAL OPTIMUM STEM, 0 /LATEST BLOCK NUMBER; INITIALIZED FOR COLD BOOTSTRAP SADDR, .-. /TRANSFER ADDRESS ZBLOCK SPSNCLA-. /EMPTY SPACE / ZBLOCK SPA SNA CLA-. /EMPTY SPACE IFNZRO SPSNCLA-. / IFNZRO SPA SNA CLA-. SBLK, .-. /BLOCK NUMBERS GO HERE SPGCNT, 20^200 /READ IN BLOCKS 0-17 FOR BOOTSTRAP SFUNCT, 20^100 /FUNCTION TEMPORARY ZBLOCK SWC-. /EMPTY SPACE SWC, SCAA /WORD COUNT SCAA, SCAA /CURRENT ADDRESS SPARM, .-. /PASSED EQUALS PARAMETER SFILES, DTRA /GET CURRENT UNIT RTL;RTL /MOVE TO AC[9-11] AND L7/[7] /JUST UNIT BITS DCA SBTFUN /SAVE AS BOOTSTRAP FUNCTION JMP I .+1/(MONSTRT) /NOW GO DO REST OF IT MONSTRT /THROUGH HERE RELOC /TURN OFF RELOCATION $ /THAT'S ALL FOLK!