--- /dev/null
+/OS8 FORTRAN II RELOCATING LOADER V4
+/
+/
+/
+/
+/
+/
+/
+//
+/
+/
+/
+/
+/COPYRIGHT (C) 1973, 1975
+/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.
+/
+/
+/
+/
+/
+/
+\f/LOADER.07 DECEMBER 5, 1973
+/
+/
+/CHANGES MADE FOR V4 J.K. 1975
+/
+/ .VERSION NUMBER PRINTED ON MAP
+/ .BIT ZERO OF 17645 IS USED INSTEAD OF THE WHOLE
+/ WORD TO INDICATE THAT THE LOADER WAS CHAINED
+/ TO FROM SABR
+/ .CORE ROUTINE STANDARIZED
+/ .CHECK FOR BATCH CORRECTED
+/
+/
+/FIELD 0, PAGE 0
+
+ VERSION=6400 /PRINTS ON MAP
+ PATCH=01
+ JSTFLD= 7744
+ JSTADR= 7745
+ JSBITS= 7746
+ MOFILE= 7600
+ MIFILE= 7617
+ MPARAM= 7643
+ DCB= 7760
+ MSTCDF= 7772
+ MSTADR= 7775
+ SHNDLR= 7607
+ MGET= 7667
+ MTEMP= 27
+ OLDT9= 7 /LOCATION OF HANDLER ENTRY OF DEVICE
+ /WITH DIRECTORY IN CORE
+
+ *0
+ZERO, JMS I XSHNDLR
+ONE, 2010
+ 3600
+ MTEMP+11
+ HLT
+FIVE, JMP I .+1
+ 7600
+XSHNDLR,SHNDLR
+X1, 0
+X2, 0
+X3, 0
+X4, 0
+
+ *16
+ NOPUNC
+ *100
+ ENPUNC
+
+DFRSTR, CIF 10
+ JMS I DF200
+ 11 /KICK OUT MONITOR
+DFSAVE, 0 /RESTORE CALLING FIELD
+ JMP I CDZSKP /AND EXIT
+
+SAVEDF, 0 /COMMON SAVE-FIELD PROCESSOR FOR FORTRAN I/O
+ DCA CDZSKP /CALLING ADDRESS
+ RDF
+ TAD .+2
+ DCA DFSAVE /CALLING FIELD
+ CDF CIF 0
+ JMP I SAVEDF
+DF200, 200
+\f/RUN-TIME SYSTEM PAGE 0 - PROPAGATED TROUGH ALL FIELDS
+
+*33
+ BNK=00
+/
+/ COMMON SUBROUTINE CALL LINKAGE ROUTINE
+/
+LINK, 0
+K6201, CDF BNK /SET DATA FIELD TO THIS BANK
+K6202, CIF 00 /SET INSTRUCTION FIELD TO ZERO
+ JMP I MLINKP /EXIT TO MASTER LINKAGE ROUTINE
+MLINKP, MLINK
+/
+/ COMMON SUBROUTINE RETURN LINKAGE ROUTINE
+/
+RTN, 0
+ CDF BNK /SET DATA FIELD TO THIS BANK
+ CIF 00 /SET INSTRUCTION FIELD TO ZERO
+ JMP I MRTNP /EXIT TO MASTER RETURN ROUTINE
+MRTNP, MRTN
+/
+/ CHANGE DATA FIELD TO CURRENT AND SKIP
+/
+CDFSKP, 0
+ ISZ CDFSKP /INDEX ADDRESS FOR SKIPPING
+ CDF BNK /CHANGE DATA FIELD TO CURRENT BANK
+ JMP I CDFSKP /EXIT
+/
+/ CHANGE DATA FIELD TO ZERO AND SKIP
+/
+CDZSKP, 0
+ ISZ CDZSKP /INDEX RETURN ADDRESS FOR SKIPPING
+ CDF 10 /CHANGE DATA FIELD TO ZERO
+ JMP I CDZSKP /EXIT
+/
+/ OFF BANK INDIRECT SUBROUTINE
+/
+OBISUB, 0
+ CDF BNK /SET DATA FIELD TO THIS BANK
+ CIF 00 /SET INSTRUCTION FIELD TO ZERO
+ JMP I MOBIP /EXIT TO MASTER OFF BANK INDIRECT SUBROUTINE
+MOBIP, MOBI
+/
+/ OFF PAGE INDIRECT SUBROUTINE
+/
+OPISUB, 0
+ CDF BNK /SET DATA FIELD TO THIS BANK
+ CIF 00 /SET INSTRUCTION FIELD TO BANK 0
+ JMP I MOPIP /EXIT TO MASTER OFF PAGE INDIRECT SUBROUTINE
+MOPIP, MOPI
+\f/
+/ ROUTINE TO HANDLE DUMMY ARGUMENTS
+/
+DUMSUB, 0
+ CDF BNK /SET DATA FIELD TO THIS BANK
+ CIF 00 /SET INSTRUCTION FIELD TO BANK 0
+ JMP I MDUMP /EXIT TO MASTER DUMMY ARGUMENT ROUTINE
+MDUMP, MDUM
+
+/ PAGE 0 CELLS FOR FORTRAN EXECUTION TIME I/O
+/ CELLS SET UP BY LINKING LOADER - CANNOT GO PAST 77
+
+INHNDL, 0 /PAGE FOR INPUT HANDLER IF /I SWITCH WAS ON
+OUHNDL, 0 /PAGE FOR OUTPUT HANDLER IF /O SWITCH WAS ON
+ELENGT, 0 /"DESIRED LENGTH" FOR FORTRAN OUTPUT FILES - USUALLY 0
+
+ *DF200+1
+/OTHER PAGE 0 LOCATIONS
+
+FOPOLD, 0
+FINPTR, 0
+FICHCT, 0 /MUST BE INIT. TO -1 AT LOOKUP
+FINTMP, 0 /MUST BE INIT. TO 10 AT LOOKUP
+OHNDLR, 0 /SET BY FENTER - CLEARED BY FCLOSE
+IHNDLR, 0 /SET BY FLUKUP - NEVER CLEARED
+FOUPTR, 0
+FOCHCT, 0
+\f *200
+LSTART, JMP I (LDRZZ1
+SSTART, CDF 10
+ TAD I (MPARAM+2
+ SMA CLA
+ JMP NOTSBR
+ TAD I (MPARAM+2
+ AND (3777
+ DCA I (MPARAM+2
+ TAD I (MOFILE
+ SNA CLA
+ JMP LDRYYY
+ TAD (MOFILE+11
+ DCA X1
+ TAD (MOFILE
+ DCA SEVEN
+ TAD (-5
+ DCA SIX
+ TAD (TEMP-1
+ DCA X2
+MOVLP1, TAD I SEVEN
+ CDF 0
+ DCA I X2
+ CDF 10
+ TAD I X1
+ DCA I SEVEN
+ ISZ SEVEN
+ ISZ SIX
+ JMP MOVLP1
+ TAD TEMP+1 /GET BLOCK NUMBER WHICH SABR PLACED HERE
+ DCA I (MIFILE+1
+ DCA I (MIFILE+2
+ CLA CLL CMA RAL
+ AND I (MPARAM
+ DCA I (MPARAM /REMOVE /L SWITCH FROM SABR INPUT
+ CDF 0
+ CIF 10
+ CLA IAC
+ JMS I (200
+ 4 /DELETE
+ FORTRL /THE FILE "FORTRL.TM" IF IT EXISTS
+ 0
+ NOP /IT DIDN'T EXIST - BIG DEAL
+ TAD TEMP
+LDRYYY, CDF 10
+ DCA I (MIFILE
+NOTSBR, CIF 10
+ CDF 0
+ JMS I (200
+ 12 /GET DEVICE NUMBER WITHOUT HANDLER
+ 2424 /TT
+TTYNUM, 3100 /Y
+ 1000 /RANDOM NUMBER
+ JMP LWOWIE /WHAT - NO TELETYPE???
+ CIF 10
+ CLA IAC /DEVICE "SYS"
+ JMS I (200
+ 2
+PTSLIB, SYSLIB
+ 0 /USELESS LENGTH WORD
+ CLA SKP
+ TAD PTSLIB
+ CDF 10
+ DCA I (PSYSLB
+ TAD TTYNUM
+ DCA I (TTYNO /STORE AWAY TTY DEVICE NUMBER
+ JMS I (BATCK
+CORO, TAD CORSIZ /GET FLD OF TEST
+ RTL
+ RAL
+ AND COR70
+ TAD COREX /MASK USEFUL BITS
+ DCA .+1
+COR1, CDF
+ TAD I CORLOC /SAVE CURRENT CONTENTS
+COR2, NOP
+ DCA COR1
+ TAD COR2
+ DCA I CORLOC
+COR70, 70
+ TAD I CORLOC /TRY TO READ BACK
+CORX, 7400
+ TAD CORX
+ TAD CORV /TAD (1400)
+ SZA CLA
+ JMP COREX /NON-EXISTENT FLD EXIT
+ TAD COR1
+ DCA I CORLOC /RESTORE LOC
+ ISZ CORSIZ
+ JMP CORO
+COREX, CDF 0
+ TAD CORSIZ
+ CIA
+FOUNDX, CDF CIF 10
+ DCA I (WROVLY /POSTPONE SPREADING FIELD ZERO RESIDENT
+ TAD (TTYOUT / THRU FIELDS UNTIL /I,/O AND /H ARE TESTED
+ DCA I (TYPE
+ JMP I .+1
+ LDRXXX
+\fSIX, 0
+SEVEN, 0
+
+LWOWIE, CDF CIF 10
+ JMP I (SIOERR
+CORLOC, CORX
+CORV, 1400
+CORSIZ, 1
+TEMP, 0;0;0;0
+ PAGE
+\f/FULL LINKAGE ROUTINES FOR RUN-TIME SYSTEM
+
+ *400
+K77A, 0077 /MUST BE FIRST LOC ON PAGE
+/
+/ MASTER OFF PAGE INDIRECT ROUTINE
+/
+MOPI, DCA AC /SAVE AC
+ TAD I OPIP /PICK UP ADDRESS OF PARAMETER
+ DCA DUMSUB
+ TAD I DUMSUB /ACTUAL PARAMETER
+ DCA 7 /TO A TEMP
+ TAD I 7 /PICK UP FINAL DATA
+ DCA I K7 /TO LOCATION 7 IN FROM BANK
+ RDF /FROM BANK
+ATVX, TAD K6202 /MAKE A CIF FROM INSTRUCTION
+ DCA ATV /SAVE IN THIS SEQUENCE
+ JMP ATV-1
+/
+/ MASTER OFF BANK INDIRECT ROUTINE
+/
+MOBI, DCA AC /SAVE AC
+ TAD I OBIP /ADDRESS OF PARAMETER
+ DCA DUMSUB
+ TAD I DUMSUB /ACTUAL COMMON ADDRESS
+ DCA 7 /SAVE IT
+ RDF /FROM BANK
+ TAD K6201 /MAKE A CDF FROM INSTRUCTION
+ DCA .+3 /PLACE IN THIS SEQUANCE
+ CDF 10 /CHANGE DATA FIELD TO COMMON
+ TAD I 7 /ACTUAL DATA
+ NOP /BECOMES CDF AND CIF FROM INSTRUCTION
+ DCA I K7 /TO LOCATION 7 IN FROM BANK
+ RDF
+ CDF 10
+ JMP ATVX
+\f/ MASTER INDIRECT DUMMY ARGUMENT SUBROUTINE
+
+MDUM, DCA AC /SAVE AC
+ TAD I DUMP /PICK UP ADDRESS OF PAR
+ DCA DUMSUB
+ TAD I DUMSUB /PICK UP POINTER TO 2 WORD VECTOR
+ DCA DUMTEM /TO A TEMPORARY
+ TAD I DUMTEM /FIELD DATA IS IN AS A CDF
+ DCA ABCRT /TO THIS SEQUANCE
+ RDF /FROM FIELD
+ TAD K6202 /MAKE A CIF INSTRUCTION
+ DCA ATV /TO THIS SEQUANCE FOR EXIT
+ ISZ DUMTEM /POINT TO LOCATION IN FIELD
+ TAD I DUMTEM /ACTUAL LOCATION IN UNKNOWN FIELD
+ DCA I K7 /TO FROM FIELD LOCATION 7
+ABCRT, NOP /BECOMES CDF UNKNOWN
+ ISZ DUMSUB /BUMP RETURN ADDRESS
+ATV, NOP /BECOMES CIF FROM
+ TAD AC /RESTORE AC
+ JMP I DUMSUB /EXIT
+AC= CDZSKP
+DUMTEM= OBISUB
+OPIP, OPISUB
+OBIP, OBISUB
+DUMP, DUMSUB
+/
+/ MASTER LINKAGE ROUTINE
+/
+MLINK, DCA AC /SAVE AC
+ RDF
+ TAD K6201 /MAKE A CDF
+ DCA DUMTEM
+ TAD I LINKP /ADDRESS OF CODE WORD
+ JMS RTS1
+ TAD DUMTEM /CDF FROM INSTRUCTION
+ DCA I DUMSUB /TO FIRST WORD OF 2 WORD VECTOR
+ ISZ DUMSUB /POINT TO DISPLACEMENT
+ TAD LINK /ADDRESS OF CODE WORD
+ IAC /INCR. TO FIRST ARG
+ DCA I DUMSUB /TO SECOND WORD OF 2 WORD VECTOR
+ JMP ATVX-1
+/
+/ MASTER RETURN ROUTINE
+/
+MRTN, DCA AC /SAVE AC
+ TAD I RTNP /ADDRESS OF CODE WORD
+ JMS RTS1
+ TAD I DUMSUB /FIELD TO RETURN TO AS A CDF INSTRUCTION
+ TAD K2
+ DCA ATV
+ ISZ DUMSUB
+ TAD I DUMSUB
+ DCA DUMSUB
+ JMP ATV
+\f/DATA
+
+K100A, 100
+K7700A, 7700
+LINKP, LINK
+RTNP, RTN
+/
+/SUBROUTINE 1
+/
+RTS1, 0
+ DCA LINK
+ TAD I LINK /CODE WORD
+K200A, AND K77A /MASK OUT NUMBER OF ARGUMENTS
+ TAD K200A /+DISPLACEMENT
+ DCA ABCRT /GIVES ADDRESS OF BCRT ENTRY
+ TAD ABCRT
+ TAD K100A /+DISPLACEMENT
+ DCA ATV /GIVES ADDRESS OF TV DISPLACEMENT
+ CDF CIF 0 /(TABLES IN FIELD 0!)
+ TAD I ABCRT /TO CDF INSTRUCTION
+ DCA RTSCDF /TO FIRST WORD OF 2 WORD VECTOR
+ TAD I ATV /TO BANK DISPLACEMENT
+ SNA /WAS IT LOADED?
+ JMP NOTIN /NO
+
+ DCA DUMSUB /TO SECOND WORD OF 2 WORD VECTOR
+RTSCDF, 0
+ JMP I RTS1
+
+NOTIN, CIF 10
+ JMS I K7700A
+K7, 7
+ 1 /USER ERROR 1 - PROGRAM NOT LOADED
+\fFASIGN, 0 /CALLED FROM SABR - DOES ASSIGN AND
+ DCA CDFSKP /EITHER LOOKUP,ENTER OR CLOSE
+ TAD FASIGN
+ JMS SAVEDF
+ CIF 10
+ JMS I K7700A
+ 10 /CALL USR IN
+ CIF 10
+ JMS I K200A
+ 1 /ASSIGN HANDLER
+ASDEV, 0;0 /SET UP BY SABR
+ASPAGE, 0 /DITTO
+ JMP ASERR /ASSIGN FAILURE
+ZRONAM, DCA FLUNAM /ZERO FILENAME FOR LOOKUP
+ TAD ASDEV+1 /PUT DEVICE NUMBER IN AC
+ JMP I CDFSKP /JUMP TO APPROPRIATE ROUTINE
+
+ *567 /MUST CROSS PAGE BOUNDARY JUST SO
+FLUKUP, CIF 10
+ JMS I K200A
+K2, 2 /LOOKUP FILE
+FLUNAM, 0 /REPLACED BY BLOCK NUMBER
+FLUCNT, 0 /REPLACED BY LENGTH (UNUSED)
+ASERR, ISZ CDZSKP /SKIP RETURN IF ERROR
+ TAD ASPAGE
+ DCA IHNDLR /SET UP INPUT HANDLER ENTRY AND FLAG
+ TAD FLUNAM
+FINRXX, DCA FINREC /***** THIS SHOULD BE AT LOC 600! *****
+ CLA CMA
+ DCA FICHCT
+ TAD FIN10
+ DCA FINTMP
+ JMP FRESET /RESET I/O AND RETURN FROM FASIGN
+ IFNZRO FINRXX-600 <FINERR,_ERROR>
+\f /GET A CHARACTER ROUTINE.
+ /RETURNS TO .+1 IF ERROR, .+2 IF NORMAL
+ /CHAR IN AC ON OUTPUT
+ /DOES NOT HANDLE END-OF-FILE VERY WELL
+
+FICHAR, 0
+ TAD FICHAR
+ JMS SAVEDF /SAVE RETURN FIELD AND ADDRESS
+FNXTCH, ISZ FICHCT /BUMP CHAR COUNT
+ JMP FIGET
+ JMS I IHNDLR /IT OVERFLOWED - READ IN A NEW BUFFER
+FI200, 200
+FINBUF, 1200
+FINREC, 0
+FI7700, SMA CLA
+ SKP /END - OF - FILE ERROR - IGNORE
+ JMP DFSAVE /ERROR RETURN
+ ISZ FINREC
+ CLA CMA
+ TAD FINBUF
+ DCA FINPTR
+ TAD FI7200
+ DCA FICHCT /INITIALIZE FOR NEW RECORD
+FIGET, TAD FINTMP /GET HIGH-ORDER-BIT BUFFER
+ SPA /IS IT FULL?
+ JMP FITHRD /YES - OUTPUT COMBINED HIGH-ORDER BITS
+FI7200, CLA
+ ISZ FINPTR
+ TAD I FINPTR /GET A LOC FROM THE BUFFER
+ AND FI7400
+ RAL CLL
+ TAD FINTMP /PUT THE HIGH ORDER BITS ONTO THE HOB BUFFER
+FINXX, RTL
+ RTL
+ DCA FINTMP
+ TAD I FINPTR
+ JMP DFEXIT /RETURN WITH SKIP
+FITHRD, DCA I FINPTR /FUDGE THIRD CHAR INTO BUFFER
+ CLL CML
+ JMP FINXX /RESET FINTMP TO 10
+\f /PUT A CHARACTER
+ /RETURNS TO .+1 IF ERR, .+2 IF NORMAL
+ /CALLED WITH CHAR IN AC
+
+FOCHAR, 0
+ DCA FOUTMP /SAVE CHAR
+ TAD FOCHAR
+ JMS SAVEDF /SAVE CALLING FIELD AND LOC
+FOLOOP, ISZ FOUJMP
+ ISZ FOCHCT /BUMP CHAR COUNT
+FOJMP, JMP FOUJMP /TAKE A BRANCH OF THE THREE-WAY JUMP
+ JMS I OHNDLR
+ 4200
+FOUBUF, 1200
+FOUREC, 0
+ JMP DFSAVE /OUTPUT ERROR
+ ISZ FOUREC
+ JMS FOSETP
+ ISZ FOCCNT /BUMP FILE LENGTH
+ ISZ FOOCNT /ALSO ENTER COUNT
+ JMP FOLOOP /NOW GO PUT THE CHAR INTO THE NEW BUFFER
+ JMP DFSAVE /ENTER COUNT OVERFLOWED - ERROR RETURN
+
+FOUJMP, JMP . /THREE-WAY SWITCH
+ JMP FOUCH1
+ JMP FOUCH2
+FOUCH3, TAD FOUTMP
+ RTL
+ RTL
+ DCA FOUTMP
+ TAD FOUTMP
+ AND FI7400
+ TAD I FOPOLD /PUT HIGH ORDER BITS OF CHAR3
+ DCA I FOPOLD /INTO HIGH ORDER BITS OF CHAR 1
+ TAD FOUTMP
+ RTL
+ RTL
+ AND FI7400
+ TAD I FOUPTR /PUT LOW ORDER BITS OF CHAR 3
+ DCA I FOUPTR /INTO HIGH ORDER BITS OF CHAR 2
+ TAD FOJMP
+ DCA FOUJMP
+ ISZ FOUPTR
+ JMP DFEXIT /RETURN NORMALLY
+FOUCH2, TAD FOUPTR
+ DCA FOPOLD /SAVE POINTER TO CHAR 1
+ ISZ FOUPTR
+FOUCH1, TAD FOUTMP
+ DCA I FOUPTR /STORE CHAR 1 OR 2
+DFEXIT, ISZ CDZSKP /INCREMENT RETURN ADDR
+ JMP DFSAVE /AND GO THERE
+\fFOSETP, 0
+ TAD FO7177
+ DCA FOCHCT
+ TAD FOUBUF
+ DCA FOUPTR
+ TAD FOJMP
+ DCA FOUJMP
+ JMP I FOSETP
+
+FO7177, 7177
+FIN10, 10
+
+FENTER, TAD ELENGT /ELENGT=0 UNLESS SOME KLUDGE SETS IT UP
+ CIF 10 /FENTER JUMPED TO BY FASIGN
+ JMS I FI200
+ 3
+FOONAM, 0 /FILE NAME IN LOCS 0-3
+FOOCNT, 0
+ ISZ CDZSKP /FOR ENTER, ERROR RETURN IS SKIP RETURN
+ TAD FOONAM
+ DCA FOUREC /INITIALIZE OUTPUT RECORD #
+ JMS FOSETP /SET UP CHARACTER POINTERS
+ DCA FOONAM /SET FOONAM FOR NEXT ENTER
+ TAD I PASPAG
+ JMP STOHND /GO TO COMMON CODE WITH "FCLOSE"
+PASPAG, ASPAGE
+
+FCLOSE, CIF 10 /JUMPED TO BY FASIGN
+ JMS I FI200 /CALL I/O MONITOR
+ 4
+FOCNAM, 0 /FILE NAME IN 0-3
+FOCCNT, 0 /CLOSING LENGTH
+ ISZ CDZSKP /ERROR - BUMP RETURN
+STOHND, DCA OHNDLR
+ DCA FOCCNT /INITIALIZE CLOSING COUNT FOR NEXT FILE
+FRESET, CIF 10
+ JMS I FI200
+ 13 /RESET ALL DEVICE HANDLER ENTRIES
+ 0 /BUT RETAIN ANY OPEN OUTPUT FILES
+ JMP DFRSTR /RETURN FROM FASIGN AFTER KICKING MONITOR OUT
+FOUTMP= FICHAR
+FI7400, 7400
+ PAGE
+\f *1000
+PROPGT, 0 /CALLED FROM FIELD 1 LOADER WHEN 1ST
+ CDF 10 /CHECKING FOR I/O SWITCHES.
+ DCA I LTOPCOR /-# OF CORE FIELDS IN AC
+ TAD I LTOPCOR
+ DCA I LFCTR
+ TAD I LTOPCOR
+ CDF 0
+ CMA /GET # OF HI CORE FIELD
+PROPLP, DCA FC
+ CLA CMA
+ TAD FC
+ SNA CLA
+ JMP FIELD1
+ TAD FC
+ JMS CHGBNK
+ JMS STOBNK
+ CLA CMA
+ TAD FC
+ JMP PROPLP
+FIELD1, CLA IAC
+ JMS CHGBNK
+ JMS I LSHNDLR
+ 4100
+ 0
+ MTEMP
+ JMP I LLWOWIE
+ JMS I LSHNDLR
+ 4201
+ 400
+ MTEMP+21 /WRITE OUT RUN-TIME ROUTINES
+ JMP I LLWOWIE
+ JMS CHGBNK
+ TAD L6001
+ DCA I LJSBITS
+ TAD L6213
+ DCA I LJSTFLD
+ TAD LLRSTRT
+ DCA I LJSTADR
+ CDF CIF 10 /PROPGT IS CALLED FROM FIELD 1 ONLY
+ JMP I PROPGT
+FC, 0
+\fCHGBNK, 0
+ CLL RTL
+ RAL
+ TAD LCDF
+ DCA X1
+ TAD X1
+ DCA LINK+1
+ TAD X1
+ DCA RTN+1
+ TAD X1
+ DCA CDFSKP+2
+ TAD X1
+ DCA OBISUB+1
+ TAD X1
+ DCA OPISUB+1
+ TAD X1
+ DCA DUMSUB+1
+ JMP I CHGBNK
+
+STOBNK, 0
+ TAD LLINK1
+ DCA X2
+ TAD X2
+ DCA X3
+ TAD LLINK2
+ DCA X4
+ TAD X1
+ DCA STOCDF
+STOLUP, CDF 0
+ TAD I X2
+STOCDF, HLT
+ DCA I X3
+ ISZ X4
+ JMP STOLUP
+ CDF 0
+ JMP I STOBNK
+SYSLIB, TEXT /LIB8/
+ 2214 /.RL
+
+LTOPCOR,TOPCOR
+LSHNDLR,SHNDLR
+LFCTR, FCTR
+LLWOWIE,LWOWIE
+L6001, 6001
+LJSBITS,JSBITS
+LJSTADR,JSTADR
+LJSTFLD,JSTFLD
+L6213, 6213
+LCDF, CDF
+LLINK1, LINK-1
+LLINK2, LINK-MDUMP-2
+\fLDRZZ1, CDF 10 /COME HERE IF NOT CHAINED TO
+ DCA I LMOFIL
+ ISZ LMOFIL
+ ISZ LMOCNT
+ JMP .-3
+ CLA CLL CMA RAL /-2
+ DCA I LDOPRP
+ CDF 00
+ JMP I .+1
+ LDRYYY
+LMOFIL, 7600
+LMOCNT, -47
+LLRSTRT,LRSTRT
+LDOPRP, DOPROP
+FORTRL, FILENAME FORTRL.TM
+ PAGE
+\f *1200 /LINKING LOADER SUBROUTINES FOR /I AND /O OPTIONS
+INPENB, 0
+ ISZ INPFLG
+ JMP INRTRN /ALREADY HAVE A /I
+ JMS TWOPAG /HAS USER SPECIFIED 2-PG. HNDLRS?
+ TAD OUPFLG
+ SPA CLA
+ JMP INVRGN
+ TAD K2200
+ DCA INHNDL
+ TAD (FINBUF
+ DCA I (ST1600 /MARK THE INPUT BUFFER IN PAGE 1600
+ TAD K2377
+ JMS SETHLA
+INRTRN, CDF CIF 10
+ JMP I INPENB
+
+INVRGN, TAD K1000
+ DCA INHNDL
+ TAD K1577
+ JMP INRTRN-1
+
+OUPENB, 0
+ ISZ OUPFLG
+ JMP OURTRN
+ JMS TWOPAG /HAS USER SPECIFIED 2 PG. HNDLRS?
+ TAD INPFLG
+ SPA CLA
+ JMP OUVRGN
+ TAD K2200
+ DCA OUHNDL
+ TAD (FOUBUF
+ DCA I (ST1600 /MARK OUTPUT BUFFER IN 1600
+ TAD K2377
+ JMS SETHLA
+OURTRN, CDF CIF 10
+ JMP I OUPENB
+
+OUVRGN, TAD K1000
+ DCA OUHNDL
+ TAD K1577
+ JMP OURTRN-1
+
+INPFLG, -1
+OUPFLG, -1
+K1000, 1000 /SET TO 1001 FOR 2 PAGE HANDLERS
+K2200, 2200 /SET TO 2401 FOR 2 PAGE HANDLERS.
+K2377, 2377 /SET TO 2577 FOR 2 PAGE HANDLERS.
+K1577, 1577 /SET TO 1777 FOR 2 PAGE HANDLERS.
+\f/SUBROUTINE TO CHECK FOR /H SWITCH MEANING USER
+/WANTS RUN TIME DEVICE INDEPENDENT I/O TO
+/BE ABLE TO USE 2 PAGE DEVICE HANDLERS
+/
+TWOPAG, 0
+ CDF 10
+ TAD I (MPARAM
+ AND (20 /IS /H SWITCH SET?
+ SNA CLA
+ JMP I TWOPAG /NO-RETURN (DATA FLD=1)
+ TAD (1001 /YES-RESET HANDLR FETCH TO ACCEPT
+ DCA K1000 /TWO PAGE HANDLERS
+ TAD (2401 /RESET FETCH FOR SECOND HANDLER
+ DCA K2200
+ TAD (2777
+ DCA K2377 /RESET HLA CONSTANT FOR 2 PG HANDLRS
+ TAD (1777
+ DCA K1577 /RESET 2ND HLA CONSTANT FOR 2 PG
+ TAD (2000
+ DCA I (K1600 /RESET BUFR. ADDRESS-SEE *LDRXIT*
+ CDF 00
+ TAD (1400
+ DCA I (FINBUF /RESET IN AND OUT BUFFER ADDRESSES
+ TAD (1400 /TO MAKE ROOM FOR 2 PG HANDLR
+ DCA I (FOUBUF
+ CDF 10
+ JMP I TWOPAG /RETN. DATA FLD=1
+
+SETHLA, 0
+ DCA I (HLAZ
+ TAD I (HLAZ
+ CIA
+ DCA I (HLAIO
+ CDF 0
+ JMP I SETHLA
+BATCK, 0
+ CDF 0
+ TAD I (7777
+ AND (70
+ SNA
+ JMP I BATCK
+ CLL RTR
+ RAR
+ CMA
+ DCA TMPC
+ TAD I (7777
+ RAL
+ SPA CLA
+ IAC
+ TAD TMPC
+ JMP I (FOUNDX
+TMPC, 0
+ PAGE
+\f FIELD 1
+/FIELD 1 PAGE 0 EQUIVALENCES - FIT INTO USR CRACKS
+
+ DEVHND=20
+ BANK=21
+ TM1=22
+ TM2=23
+ RECNO=24
+ OVLYFG=25
+ CUR=26
+ WORD=27
+ HLAPTR=30
+ HLA=31
+ RCON=32
+ COML=33 /HI COMMON LOC, 0 IF NONE
+ TYPE=34
+ CSUM=35
+ NSUB=36
+
+ *3600
+LRSTRT, DCA I (MIFILE
+LDRZZZ, JMS I (IONULL
+LDRXXX, TAD (MIFILE
+ DCA FILPTR
+ DCA OVLYFG
+ DCA I (WRBFSW
+ JMS I (START
+ JMP IOCHEK /GO TEST FOR /I, /O ALD /0-7
+LDRLP, DCA BANK
+ TAD I FILPTR
+ SNA
+ JMP GETCD
+ JMS GETHND
+ TAD I FILPTR
+ ISZ FILPTR
+ DCA RECNO
+ TAD I (MPARAM
+ RAR
+ SZL CLA
+ JMP I (LBRY
+ JMS I (LOAD
+ JMP LDRLP
+GETCD, TAD I (MPARAM+3
+ SNA
+ JMP LKATMP
+ DCA I (LSTADR
+ TAD I (MPARAM-1
+ CLL RAL
+ AND (17
+ CLL RTL
+ TAD (CDF CIF 0
+ DCA I (LSTFLD /FALL INTO NEXT PAGE
+\fLKATMP, JMS I (WRPGBF
+ TAD I (MPARAM
+ AND (40
+ SZA CLA
+ JMP BUILD
+ TAD I (MPARAM-1
+ SPA CLA
+ JMP BUILD
+ JMS MAP
+CDCALL, JMS I (200
+ 5
+ 2214
+ TAD I (MPARAM+1
+ AND (100
+ SZA CLA
+ JMP LDRZZZ
+IOCHEK, JMS I (IOTEST
+ DCA TM1
+ TAD (MIFILE
+ DCA FILPTR
+ TAD I (MPARAM+2
+ AND (1774
+ SNA
+ JMP LDRLP
+ RAL
+ ISZ TM1
+ SNL
+ JMP .-3
+ CLA CMA CLL RTL
+ TAD TM1
+ JMP LDRLP
+FILPTR, 0
+MAP, 0
+ TAD I (MPARAM+1
+ AND (4410 /"M","P" AND "U" OPTIONS
+ SNA
+MAPRTN, JMP I MAP
+ CLL RTR
+ RTR
+ AND (200
+ SZA CLA
+ CLL CML IAC
+ CML RAL /FORM 0 IF /U, 1 IF /P AND 2 IF /M
+ DCA TM1
+ JMP I (MAPIO
+\fBUILD, TAD (SHNDLR
+ DCA DEVHND
+ TAD PSYSLB
+ SZA
+ JMS I (LBSRCH
+ JMS MAP
+ JMP I (BUILDX
+PSYSLB, 0
+
+GETHND, 0
+ AND (17
+ DCA I (EASGN
+ TAD (401
+ DCA LASGN
+ TAD I (EASGN
+ ISZ FILPTR
+ JMS I (200
+ 1 /ASSIGN
+LASGN, 401
+ JMP I (HNDERR /BAD HANDLER
+ TAD LASGN
+ DCA DEVHND
+ JMP I GETHND
+ PAGE
+\fBUILDX, TAD LSTADR
+ SZA CLA
+ JMP ALREDY
+ TAD (MAIN-1
+ DCA X1
+ JMS I (SETS1
+ JMS I (SEARCH
+ JMP I (ERSTAD
+ TAD (TVEC-1
+ TAD I (SYMNUM
+ DCA TM1
+ CDF 0
+ TAD I TM1
+ SNA
+ JMP I (ERSTAD
+ DCA LSTADR
+ TAD TM1
+ TAD (7700
+ DCA TM1
+ CLA CLL CML RTL /CHANGE CDF TO CDF CIF
+ TAD I TM1
+ DCA LSTFLD
+ALREDY, CDF 10
+ JMS I (WROVLY
+ TAD (1400
+ JMS STOINF
+ DCA OLDT9
+ TAD (HLA7
+ DCA TM1
+ TAD (-10
+ DCA X3
+ DCA I X1
+ DCA X4
+BLDLP, CLA CLL CML RTL
+ TAD X3
+ SNA CLA
+ JMP BFLD1 /TREAT FIELD 1 (COMMON AREA) DIFFERENTLY
+BLDLPX, TAD I TM1
+ AND (7600
+ SNA
+ JMP BLDSKP
+BLDLPY, TAD (170
+ CLL CML CMA RTR
+ RTR
+ TAD X3
+ CLL CMA RTL
+ RAL
+ DCA I X1
+ DCA I X1
+ ISZ X4
+BLDSKP, CLA CMA
+ TAD TM1
+ DCA TM1
+ ISZ X3
+ JMP BLDLP
+ TAD X4
+ CIA
+ DCA I (1400
+ CIF 0
+ JMS I (SHNDLR
+ 4210
+ 1200
+ MTEMP+10
+ HLT
+ CDF 0
+ TAD (JSTFLD-1
+ JMS STOINF
+ TAD LSTADR
+ DCA I (MSTADR
+ TAD LSTFLD
+ DCA I (MSTCDF
+ JMP I (LDRXIT
+
+BFLD1, TAD COML
+ SNA /IS THERE ANY COMMON?
+ JMP BLDLPX /NO
+ CLL CMA
+ TAD I TM1
+ SNL CLA /IS THERE ANY CODE IN FIELD 1?
+ JMP BLDSKP /NO
+ TAD (110 /SAVE FIELD 1 IN TWO SEGMENTS - PAGE 0 AND
+ DCA I X1 /THE CODE FOLLOWING THE END OF THE COMMON AREA
+ ISZ X4 /(THIS IS TO ENABLE "CHAIN" TO WORK PROPERLY)
+ TAD COML
+ IAC
+ DCA I X1
+ TAD COML
+ CMA
+ TAD I TM1
+ AND (7600
+ JMP BLDLPY
+\fCVTREC, 0
+ TAD CUR
+ CLL RTL
+ RTL
+ RAL
+ AND (7
+ JMP I CVTREC
+
+STOINF, 0
+ DCA X1
+ TAD LSTFLD
+ DCA I X1
+ TAD LSTADR
+ DCA I X1
+ DCA I X1
+ JMP I STOINF
+LSTADR, 0
+LSTFLD, 0
+ PAGE
+
+\fMAPIO, TAD I ML7600
+ SNA
+ TAD TTYNO /TELETYPE IS DEFAULT LISTING DEVICE
+ JMS I (GETHND
+ TAD I ML7604 /PICK UP EXTENSION WORD.
+ SNA /NON-ZERO?
+ TAD (1520 /NO-SUPPLY '.MP' EXTENSION.
+ DCA I ML7604 /YES-LEAVE ALONE
+ TAD ML7601
+ DCA MNAME
+ TAD I (EASGN
+ TAD (100 /4 SHIFTED LEFT INTO THE "DESIRED LENGTH" POSITION
+ JMS I (200
+ 3
+MNAME, 0
+MECNT, 0
+ JMP I (OUERR
+ TAD MNAME
+ DCA ORECNO
+ JMS OUSETP
+ DCA MCCNT
+ TAD (OCHAR
+ DCA TYPE
+ TAD TM1
+ CLL CML RAR
+ JMP I (MAPX
+OCHAR, 0
+ DCA OUTEMP
+ ISZ OJMP
+ ISZ OCHCNT
+OJMPE, JMP OJMP
+ CIF 0
+ JMS I DEVHND
+ 4210
+OUBUF, 4600
+ORECNO, 0
+ JMP I (OUERR
+ ISZ ORECNO
+ ISZ MCCNT
+ JMS OUSETP
+ ISZ MECNT
+ JMP OCHAR+2
+ JMP I (OUERR
+\fOUSETP, 0
+ TAD (-601
+ DCA OCHCNT
+ TAD OUBUF
+ DCA OUPTR
+ TAD OJMPE
+ DCA OJMP
+ JMP I OUSETP
+
+OJMP, HLT /THREE-WAY JUMP FOR CHAR OUTPUT
+ JMP OCHAR1
+ JMP OCHAR2
+OCHAR3, TAD OJMPE
+ DCA OJMP
+ TAD OUTEMP
+ RTL
+ RTL
+ DCA OUTEMP
+ TAD OUTEMP
+ AND OU7400
+ TAD I OUPOLD
+ DCA I OUPOLD
+ TAD OUTEMP
+ RTL
+ RTL
+ AND OU7400
+ TAD I OUPTR
+ DCA I OUPTR
+ ISZ OUPTR
+ JMP OUCOM
+OCHAR2, TAD OUPTR
+ DCA OUPOLD
+ ISZ OUPTR
+OCHAR1, TAD OUTEMP
+ AND OU377
+ DCA I OUPTR
+OUCOM, JMP I OCHAR
+OCHCNT, 0
+ OUPOLD=OUSETP
+OUTEMP, 0
+OU7400, 7400
+OUPTR, 0
+OU377, 377
+\f/CLOSE OUTPUT FILE
+
+OCLOS, TAD (232
+ JMS OCHAR
+ TAD OCHCNT
+ CMA
+ SZA CLA
+ JMP .-4
+ JMS OCHAR
+ TAD I (EASGN
+ JMS I (200
+ 4
+ML7601, 7601
+MCCNT, 0
+ JMP I (OUERR
+ TAD (TTYOUT
+ DCA TYPE
+ JMP I (MAPRTN
+
+TTYOUT, 0
+ 6046
+ 6041
+ JMP .-1
+ML7600, 7600
+ JMP I TTYOUT
+TTYNO, 0 /SET TO TTY DEVICE NUMBER BY INITIALIZATION
+IONULL, 0
+ TAD ML7600
+ DCA I (HLASZA
+ML7604, 7604 /POINTER TO FILE EXT. WORD
+ JMP I IONULL
+ PAGE
+\fLOAD, 0
+ DCA LREQUR
+ TAD BANK
+ TAD (HLAZ
+ DCA HLAPTR
+ JMS I (SETRCN /SET UP HLA AND RCON
+ TAD RCON
+ CLL CML
+ TAD LREQUR
+ TAD (400
+ SNL SZA CLA
+ JMP LFAILD
+ TAD RECNO
+ DCA LRECNO
+ CLA CMA
+ DCA INCHCT
+ JMS ICHAR
+ SNA CLA
+ JMP .-2
+ JMP I (MORE
+
+ICHAR, 0
+ TAD XX7600 /PARITY TTY HACK
+ KRS
+ TAD (-7603
+ SNA CLA
+ KSF
+ SKP
+ JMP I (MGET /17667=07605
+ ISZ IJMP
+ ISZ INCHCT
+IJMPE, JMP IJMP
+ CIF 0
+ JMS I DEVHND
+INCTLW, 0410
+INBUF, 4600
+LRECNO, 0
+ JMP INCKEF
+INISZ, ISZ LRECNO
+ ISZ LRECNO
+ TAD IN6377
+ DCA INCHCT
+ TAD INBUF
+ DCA INPTR
+ TAD IJMPE
+ DCA IJMP
+ JMP ICHAR+1
+\fIJMP, HLT /THREE-WAY JUMP FOR CHAR INPUT
+ JMP ICHAR1
+ JMP ICHAR2
+ICHAR3, TAD IJMPE
+ DCA IJMP
+ TAD I INPTR
+ ISZ INPTR
+ AND IN7400
+ CLL RTR
+ RTR
+ TAD INTEMP
+ RTR
+ RTR
+ JMP INCOM
+ICHAR2, TAD I INPTR
+ ISZ INPTR
+ AND IN7400
+ DCA INTEMP
+ICHAR1, TAD I INPTR
+INCOM, AND IN377
+ JMP I ICHAR
+INCKEF, SMA CLA
+ JMP LRECNO+2
+ JMP I (INERR
+INPTR, 0
+INCHCT, 0
+INTEMP, 0
+IN7400, 7400
+IN377, 377
+IN6377, 6377
+\fXX7600,
+XER2, 7600
+ TAD EASGN
+ TAD (DCB-1
+ DCA TM2
+ TAD I TM2
+ SPA CLA
+ JMP DIRDEV
+ TAD (2205
+ JMS I (TTWO
+ TAD (1417
+ JMS I (TTWO
+ TAD (0104
+ JMS I (TTWO
+ JMS I (CRLF
+DIRDEV, TAD I HLAPTR
+ ISZ BANK
+ CMA
+ AND XX7600
+ JMP LOAD+1
+LFAILD, ISZ BANK
+ JMP LOAD+2
+EASGN, 0
+LREQUR, 0
+LOADOK, JMS I (WRPGBF
+ JMP I LOAD
+
+SETS1, 0
+ TAD (S1-1
+ DCA X2
+ TAD I X1
+ DCA I X2
+ TAD I X1
+ DCA I X2
+ TAD I X1
+ DCA I X2
+ JMP I SETS1
+ PAGE
+\f/ 4600-5177 USED FOR LOADER MAP OUTPUT BUFFER
+/ 5200-5577 USED FOR LIBRARY DIRECTORY BUFFER
+
+ *5600
+
+/** CAN ONLY USE FIRST HALF OF THIS PAGE - 2ND HALF IS PART OF MST
+/** NO LITERALS IN THIS PAGE!
+
+LBRY, TAD RECNO
+ JMS LBSRCH
+ JMP I .+1
+ GETCD
+
+LBSRCH, 0 /LIBRARY SEARCH ROUTINE
+ DCA LBREC /SAVE START BLK OF LIBRARY
+ CIF 0
+ JMS I DEVHND /READ LIBRARY DIRECTORY
+LBCTLW, 0210
+L5200, 5200
+LBREC, 0
+ JMP I LIOERR
+ TAD LBCTLW
+ DCA I LINCTL
+ TAD L7177
+ DCA I LIN6377
+ DCA I LINISZ
+ TAD L5177
+ DCA X1 /INITIALIZE FOR SEARCH
+LBRYLP, JMS I LSETS1 /GET NEXT DIRECTORY ENTRY
+ TAD I X1
+ SNA
+ JMP I LBSRCH /END OF DIRECTORY
+ TAD L5200
+ DCA LBFPTR
+ JMS I LSEARCH /IS IT IN SYMTAB?
+ JMP LBRYLP /NO
+ TAD I LSYMNUM
+ TAD LTVEC1
+ DCA TM1
+ CDF 0
+ TAD I TM1
+ CDF 10
+ SZA CLA /IS SYMBOL ALREADY DEFINED?
+ JMP LBRYLP /YES
+LBLDLP, TAD I LBFPTR /GET MODULE TO LOAD
+ SNA
+ JMP LBRYLP-2 /NO MORE MODULES TO LOAD
+ AND L177
+ IAC
+ TAD LBREC
+ DCA RECNO
+ DCA BANK
+ TAD I LBFPTR
+ AND L7600
+ JMS I LLOAD /LOAD LIBRARY MODULE
+ ISZ LBFPTR
+ JMP LBLDLP /GET NEXT MODULE
+
+LBFPTR, 0
+LIOERR, INERR
+LINCTL, INCTLW
+L7177, 7177
+LIN6377, IN6377
+L5177, 5177
+LSETS1, SETS1
+LSEARCH, SEARCH
+L177, 177
+L7600, 7600
+LLOAD, LOAD
+LSYMNUM, SYMNUM
+LINISZ, INISZ
+LTVEC1, TVEC-1
+ IFZERO .-5700&4000 <LBRERR, _ERROR>
+\f/MAIN LOADING CODE
+/MODIFIED VERSION OF
+/PAPER-TAPE LINKING LOADER
+
+/DEFINITIONS
+
+BCRT= 200
+TVEC= 300
+ORGT= 100 /LOCAL SYMBOL TABLE NOW IN FIELD 0
+MST= 6177 /MAIN SYMBOL TABLE
+
+*6200
+
+/START OF PROGRAM - INITIALIZATION
+
+START, 0
+ TAD K7600 /SET COUNTER FOR 200
+ DCA NSUB
+ TAD BCRTA /POINTER TO BANK TABLE
+ DCA X3
+ CDF 00
+ DCA I X3 /CLEAR BANK TABLE & TV TABLE
+ ISZ NSUB
+ JMP .-2 /NOT DONE
+ CDF 10
+ TAD M10
+ DCA NSUB
+ TAD HLAZA
+ DCA X3
+ TAD K777
+ DCA I X3 /BANK0 HIGHEST LOADED ADDR. =777
+ ISZ NSUB /NSUB INCREMENTS TO ZERO
+ JMP .-2
+ DCA COML /INIT. OLD COMMON AT 0000
+ JMP I START
+\f/REENTRY FOR NEXT ROUTINE TO BE LOADED
+
+MORE, DCA LMTC /CLR LOCAL SYMBOL COUNT
+ DCA CSUM /CLR CHECKSUM
+ TAD MORE1A /SET FOR RETURN TO MORE1 IF LEADER
+ DCA EOF
+MORE1, JMS RWORD
+ TAD RC10A /RESET EOF TO WATCH FOR TRAILER
+ DCA EOF
+ TAD CODE /CK FOR HIGH COMMON
+ TAD M12
+ SZA CLA
+ JMP I ER5P /NOT THERE
+ TAD COML
+ CIA
+ CLL CML /IF NO COMMON EXISTS, OR
+ TAD WORD /IF NEW COMMON .LE. OLD IT'S
+ SNL SZA CLA /OK, ELSE ERROR
+ JMP I ER3P
+ TAD COML
+ SNA CLA
+ TAD WORD /IF NO PREVIOUS COMMON AND IF
+ AND K7600 /THIS PROGRAM HAS COMMON ABOVE 177
+ SNA /THEN SET COMMON LIMIT TO LIMIT OF THIS PROG
+ JMP GETSW
+ AND K7400
+ TAD K377 /HIGH COMMON MUST BE AT A MULTIPLE OF 400
+ DCA COML
+ TAD I HLA1P /IF WE HAVE LOADED
+ SZA CLA /ANY CODE INTO FIELD 1
+ JMP I ER3P /IT'S AN ERROR
+ TAD COML /SET BANK1 HIGHEST LOADED ADDRESS
+ DCA I HLA1P
+ JMS I (SETRCN /SET UP HLA AND RCON AGAIN JUST IN CASE
+GETSW, TAD BANK /BANK NUMBER
+ TAD TOPCOR /OK FOR NON-EX. MEM.
+ SMA CLA
+ JMP I ER2I /TOO BIG
+/
+/MAIN LOADING LOOP
+/
+LOOP, JMS RWORD
+ TAD BASE /LOCATE CORRECT FUNCTION
+ TAD CODE /IN TRANSFER TABLE
+ DCA CODE
+CODE, 0 /TRANSFER TO APPROPRIATE ADDRESS
+\f/READ 12-BIT COMPUTER WORD & 4-BIT RELOCATION CODE
+/FROM 2 INPUT CHARACTERS
+
+RWORD, 0
+ JMS I HSRPA /FIRST FRAME
+ DCA WORD
+ TAD WORD /EXTRACT RELOC. CODE
+ RTR
+ RTR
+ AND K17
+ DCA CODE
+ TAD CODE /CK FOR LEADER
+ TAD M10
+ SNA CLA
+ JMP I EOF /YES
+ TAD WORD /ADD TO CHECKSUM
+ TAD CSUM
+ DCA CSUM
+ JMS FORMWD
+ JMS I RCHARP
+ TAD WORD
+ DCA WORD
+ JMP I RWORD
+
+FORMWD, 0
+ TAD WORD
+ RTR
+ RTR
+ RAR
+ AND K7400 /ISOLATE HI 4 BITS
+ DCA WORD /FROM 1ST CHAR
+ JMP I FORMWD
+
+/DATA
+
+EOF, 0
+LMTC, 0
+K17, 17
+K377, 377
+K777, 777
+K7400, 7400
+K7600, 7600
+M10, -10
+M12, -12
+BASE, JMP I TRTAB
+BCRTA, BCRT-1
+HLAZA, HLAZ-1
+HSRPA, ICHAR
+MORE1A, MORE1
+RCHARP, RCHAR
+TOPCOR, 0
+HLA1P, HLA1
+ER2I, ER2
+\f/RELOCATION CODE TRANSFER TABLE
+
+TRTAB, RC0 /LOAD AS IS
+ RC1 /ADD RELOCATION CONSTANT
+ ER5
+ RC3 /DEFINE SYMBOL
+ RC4 /ORIGIN
+ RC5 /CDF TO CURRENT BANK
+ RC6 /REPLACE LOCAL # WITH GLOBAL #
+ ER5
+RC10A, RC10 /LEADER-TRAILER
+ ER5
+ER3P, ER3 /HIGH COMMON
+ER5P, ER5
+ ER5
+ ER5
+ ER5
+ RC17 /EXTERNAL SYMBOL SPECIFICATION
+ PAGE
+\f/NEW ORIGIN
+
+RC4, TAD WORD /NEW ORIGIN
+ CLL
+ TAD RCON /+ RELOCATION CONSTANT
+ DCA CUR /= NEW LOADING ADDRESS
+ SZL
+ JMP I OVERFP /FIELD OVERFLOW
+ JMP I LOOPP1
+/
+/CHANGE CDF TO CURRENT BANK
+/
+RC5, TAD BANK /MOVE BANK TO BITS 6-8
+ CLL RTL
+ RAL
+ TAD WORD /PICK UP CDF
+ JMP RC1+2
+/
+/REPLACE LOCAL EXTERNAL SYMBOL NUMBER WITH GLOBAL EXT. SYM. NO.
+/
+RC6, TAD WORD
+ AND K77 /EXTRACT LOCAL NUMBER
+ DCA B1
+ TAD B1 /CK IF LOCAL # .LE. LOCAL SYM. COUNT
+ CIA
+ TAD I LMTCP1
+ SPA CLA
+ JMP I ER5I /NO
+ TAD B1 /ADD LOCAL # TO BASE OF TABLE
+ TAD ORGTA
+ DCA B1
+ TAD WORD /LOAD ARG COUNT
+ AND K7700
+KCDF, CDF 0
+ TAD I B1 /+ GLOBAL #
+ CDF 10
+ JMP RC1+2 /AT CURRENT LOADING ADDRESS
+\f/ADD RELOCATION CONSTANT TO WORD
+
+RC1, TAD WORD
+ TAD RCON
+ DCA WORD
+/
+/LOAD WORD DIRECTLY AS IT IS
+/
+RC0, TAD HLA /CK FOR CURRENT ADDRESS TO LOAD
+ CIA CLL /.GE. HIGHEST ALREADY LOADED
+ TAD CUR
+ SNL CLA
+ JMP .+3 /NO
+ TAD CUR /YES, RESET HIGHEST
+ DCA HLA
+ CLL
+ TAD CUR /CK FOR ATTEMPT TO LOAD TOP PAGE
+ TAD K200
+ SZL CLA
+ JMP I OVERFP /YES, ROUTINE IS TOO BIG
+ CLA CMA
+ TAD BANK
+ SZA CLA
+ JMP JUSTLD
+ CLL CML CLA RTR
+ TAD CUR
+ SZL SPA CLA
+ JMP GT2000
+ TAD OVLYFG
+K7700, SMA CLA
+ JMP OFFSET
+ JMS I (CVTREC
+ TAD (-11
+ JMP PAGEX2
+GT2000, TAD CUR
+ CLL
+ TAD (-3600
+ SZL CLA
+ JMP PAGEX1
+ JMS I (WROVLY
+ CLA CMA
+ DCA OVLYFG
+ JMP JUSTLD
+PAGEX1, TAD K200
+ JMS I (CVTREC
+PAGEX2, TAD (MTEMP+11
+ JMS I (WRPGBF
+ CLA CLL CML RTR
+ TAD CUR
+ SZL SPA CLA
+ TAD K200
+ TAD CUR
+ AND (377
+ TAD (1400
+ JMP JUSTLD+1
+OFFSET, CLA IAC
+ DCA OVLYFG
+ TAD (1600
+JUSTLD, TAD CUR
+ DCA CURX
+ TAD BANK
+ CLL RTL
+ RAL
+ TAD KCDF
+ DCA .+2
+ TAD WORD
+ HLT
+ DCA I CURX
+ CDF 10
+ ISZ CUR
+ JMP I LOOPP1
+CURX, 0
+/
+/DATA
+/
+K77, 77
+K200, 200
+ER5I, ER5
+LMTCP1, LMTC
+LOOPP1, LOOP
+ORGTA, ORGT
+OVERFP, OVERFL
+HLAZ, 0 /HLA GROUP MUST REMAIN IN GIVEN ORDER
+HLA1, 0
+HLA2, 0
+HLA3, 0
+HLA4, 0
+HLA5, 0
+HLA6, 0
+HLA7, 0
+B1,
+
+HLATST, 0
+ TAD HLAZ
+ TAD HLAIO
+HLASZA, SZA CLA /SET TO CLA BY /R AND RESTART
+ JMP I (UIOERR
+ JMP I HLATST
+HLAIO, -777
+ PAGE
+\f/SYMBOL DEFINITION
+
+RC3, JMS I GTSYMP
+ TAD TVM1 /ADJUSTED BASE OF TRANSFER VECTOR TABLE
+ TAD SYMNUM /+ NUM. OF SYMBOL IN MST
+ DCA C1
+ TAD RCON /LOADING ADDRESS OF THE SYMBOL
+ TAD WORD
+ CDF 00
+ DCA I C1 /TO THE TRANS. VEC. TABLE
+ TAD C1 /GET POINTER INTO TRANSFER VECTOR TABLE
+ TAD M100A /FORM CORRESPONDING POINTER INTO BANK TABLE
+ DCA C1 /=PTR. TO BANK TABLE STORAGE
+ TAD BANK /GET BANK IN BITS 6-8
+ CLL RTL
+ RAL
+ DCA I C1 /STORE IN BANK TABLE
+ CDF 10
+RC3A, TAD NSUB /CHECK FOR TOO MANY SYMBOLS
+ TAD M100A
+ SPA SNA CLA
+ JMP I LOOPP2 /NO
+ JMP ER1
+/
+/TRANSFER VECTOR
+/
+RC17, TAD WORD /COUNTER OF SYMBOLS TO COME
+ CIA
+ DCA C2
+RC17A, JMS I GTSYMP
+ ISZ I LMTCP2 /INC. LOCAL SYM. CTR.
+ TAD ORGTA2 /GET PTR TO STORAGE IN ORIG. TABLE
+ TAD I LMTCP2
+ DCA C1
+ CMA /SYM. # -1 TO ORIG. TABLE
+ TAD SYMNUM
+ CDF 0
+ DCA I C1
+ CDF 10
+ ISZ C2 /CK CTR.
+ JMP RC17A /NOT DONE
+ JMP RC3A
+\f/ERRORS
+
+SIOERR,
+H7600, 7600
+ DCA ERBACK
+ IAC
+HNDERR, IAC
+ERSTAD, IAC
+INERR, IAC
+OUERR, IAC
+ER5, IAC /ILLEGAL INPUT FORMAT
+ER4, IAC /CHECKSUM ERROR
+ER3, IAC /HIGHEST COMMON NOT FIRST
+ER2, IAC /PROGRAM TOO LARGE
+ER1, IAC /SYMBOL TABLE OVERFLOW
+UIOERR, DCA C3
+ JMS CRLF
+ TAD K0522 /"ER"
+ JMS TTWO
+ TAD K2217 /"RO"
+ JMS TTWO
+ TAD K2240 /"R "
+ JMS TTWO
+ TAD C3 /#
+ JMS TOCT
+ JMS I (WRPGBF
+ERBACK, JMP I (CDCALL
+ CDF CIF 0
+ JMP I H7600 /RETURN TO MONITOR
+/
+/TYPE A CARRIAGE RETURN & LINE FEED
+/
+CRLF, 0
+ TAD K215
+ JMS I TYPE
+ TAD K212
+ JMS I TYPE
+ JMP I CRLF
+/
+/UNPACK & TYPE 2 6-BIT CHARACTERS
+/
+TTWO, 0
+ DCA C1
+ CMA /SET FLAG FOR 1ST CHARACTER
+ DCA C2
+ TAD C1 /MOVE LEFT HALF DOWN
+ RTR
+ RTR
+ RTR
+ SKP
+TTWO1, TAD C1 /GET RIGHT HALF
+ AND C77
+ TAD M40 /200 OR 300 GROUP?
+ SPA
+ TAD K100 /300 + 6BIT
+ TAD K2240 /200 + 6BIT
+ JMS I TYPE
+ ISZ C2 /2ND CHARACTER DONE?
+ JMP I TTWO
+ JMP TTWO1 /NO
+/
+/TYPE OCTAL CONTENTS OF AC
+/
+TOCT, 0
+ DCA C1
+ TAD M4B
+ DCA C2
+TOCT1, TAD C1 /MOVE NEXT DIGIT INTO BITS 9-11
+ RTL
+ RAL
+ DCA C1
+ TAD C1 /GET DIGIT
+ RAL
+ AND KK7
+ TAD C260 /CONVERT TO ASCII
+ JMS I TYPE
+ ISZ C2
+ JMP TOCT1 /MORE TO GO
+ JMP I TOCT
+/
+/DATA
+/
+C1, 0
+C2, 0
+C3,
+SYMNUM, 0
+KK7, 7
+C77, 77
+K100, 100
+K212, 212
+K215, 215
+C260, 260
+K0522, 0522
+K2217, 2217
+K2240, 2240
+M4B, -4
+M40, -40
+M100A, -100
+GTSYMP, GETSYM
+LMTCP2, LMTC
+LOOPP2, LOOP
+ORGTA2, ORGT
+TVM1, TVEC-1
+ PAGE
+\f/STORE OR LOOK UP SYMBOL IN SYMBOL TABLE
+
+DEFN, 0
+
+/READ A SYMBOL FROM INPUT ASCII - 6 FRAMES
+
+ CLA CLL CMA RTL
+ DCA D1
+ TAD S1A /POINTER TO 3 WORD BUFFER
+ DCA X3
+RSYM1, JMS RCHAR
+ AND K0077 /EXTRACT 6-BIT
+ CLL RTL
+ RTL
+ RTL
+ DCA D3 /SAVE LEFT HALF
+ JMS RCHAR
+ AND K0077 /GET RIGHT HALF
+ TAD D3
+ DCA I X3
+ ISZ D1
+ JMP RSYM1 /NOT DONE
+ JMP I DEFN
+/
+/SEARCH SYMBOL TABLE FOR CURRENT SYMBOL (IN S1-S3)
+/
+SEARCH, 0
+ DCA I SYMNMP /CLR SYMBOL COUNTER
+ TAD MSTA /SET SYMBOL TABLE PTR
+ DCA D4
+ TAD NSUB /SET CTR FOR NUMBER OF SYMBOLS
+ CMA /+1 (IN CASE NSUB=0)
+ DCA D5
+ JMP SRCH2
+SRCH1, ISZ I SYMNMP /KEEP COUNT
+ TAD D4 /TEST TABLE ENTRY
+ DCA X4 /SYM. TAB. PTR
+ CLA CLL CMA RTL
+ DCA D2 /COUNTER
+ TAD S1A
+ DCA X3 /PTR TO S1/S3
+COMP1, TAD I X4 /COMPARE WORDS
+ CIA
+ TAD I X3
+ SZA CLA
+ JMP NOMACH /NOT ALIKE
+ ISZ D2
+ JMP COMP1 /TRY NEXT WORD OF TRIPLET
+ ISZ SEARCH
+ JMP I SEARCH
+NOMACH, CLA CLL CMA RTL
+ TAD D4
+ DCA D4
+SRCH2, ISZ D5
+ JMP SRCH1 /NOT DONE
+ JMP I SEARCH
+/
+/ENTER A SYMBOL IN THE SYMBOL TABLE
+/
+INSERT, 0
+ TAD NSUB /(NUMBER OF SYMBOLS)*3
+ CLL RAL
+ TAD NSUB
+ CIA /SUBTRACT FROM BASE OF TABLE
+ TAD MSTA
+ DCA X3 /FOR POINTER
+ TAD S1 /1ST WORD
+ DCA I X3
+ TAD S2 /2ND
+ DCA I X3
+ TAD S3 /3RD
+ DCA I X3
+ ISZ NSUB /COMPUTE SYM. TAB. NUMBER
+ TAD NSUB
+ DCA I SYMNMP
+ JMP I INSERT
+/
+/CORE OVERFLOW
+/
+OVERFL, TAD BCRTA3
+ DCA D1
+ TAD TVECA3
+ DCA D2
+ TAD M100
+ DCA D3
+ CDF 00
+OVERF2, TAD I D1 /CK FOR CDF IN BCRT
+ SPA CLA
+ JMP .+3 /YES
+ DCA I D1 /NO, CLEAR IT
+ DCA I D2 /CLEAR TV WORD
+ ISZ D1
+ ISZ D2
+ ISZ D3
+ JMP OVERF2 /MORE TO GO
+ CDF 10
+ JMP I ER2P
+
+GETSYM, 0 /GET SYMBOL AND SEARCH TABLE
+ JMS DEFN
+ JMS SEARCH
+ JMS INSERT
+ JMP I GETSYM
+\f/READ 1 FRAME & ADD TO CHECKSUM
+
+RCHAR, 0
+ JMS I HSRPB
+ DCA D4
+ TAD D4
+ TAD CSUM
+ DCA CSUM
+ TAD D4
+ JMP I RCHAR
+
+SETRCN, 0 /SUBR TO SET HIGHEST-LOADED ADDRESS (HLA)
+ TAD I HLAPTR /AND RELOCATION CONSTANT (RCON)
+ DCA HLA
+ TAD HLA
+ AND (7600
+ DCA RCON
+ JMP I SETRCN
+
+MAIN, 1501;1116;4040 /"MAIN"
+
+/
+/DATA
+/
+D1, 0
+D2, 0
+D3, 0
+D4, 0
+D5, 0
+S1, 0
+S2, 0
+S3, 0
+K0077, 77
+M100, -100
+BCRTA3, BCRT
+ER2P, XER2
+HSRPB, ICHAR
+MSTA, MST-3
+S1A, S1-1
+SYMNMP, SYMNUM
+TVECA3, TVEC
+ PAGE
+\f/TRAILER CODE EXIT
+
+RC10, JMS I (FORMWD
+ JMS I HSRP /GET LOW ORDER PART
+ TAD WORD
+ CIA
+ TAD CSUM /COMPARE WITH ACCUMULATED SUM
+ SZA CLA
+ JMP I ER4P /NOT EQUAL
+ TAD BCRTA4
+ DCA T1
+ TAD TVECA
+ DCA X2
+ TAD M100D
+ DCA T3
+K6201A, CDF 00
+RC10Z, TAD I X2 /GET TV ENTRY
+ SNA CLA
+ JMP .+5 /NOT DEFINED; IGNORE IT
+ TAD I T1 /GET BCRT WORD
+ AND K70 /EXTRACT BANK
+ TAD K6201A /COMBINE CDF
+ DCA I T1
+ ISZ T1
+ ISZ T3
+ JMP RC10Z /NOT DONE YET
+ CDF 10
+ TAD HLA /STORE HIGHEST LOADED ADDRESS
+ DCA I HLAPTR /IN PROPER LOC. (HLA0-7)
+ JMP I (LOADOK
+\f/LOADER MAP PRINT ROUTINE CONTINUED
+
+MAPX, SNL CLA /IF LINK=1 ONLY PRINT PAGE COUNTS,
+ TAD NSUB /OTHERWISE PRINT SYMBOLS
+ CMA
+ DCA T1 /CTR OF ROUTINES
+ TAD MSTA4 /SYMB. TAB. PTR.
+ DCA X1
+ TAD TVECA /TV PTR
+ DCA X2
+ TAD BCRTA4 /BCRT PTR
+ DCA T4
+ TAD (2640 /PRINT V#
+ JMS I TTWOP
+ TAD (VERSION+PATCH
+ JMS I TTWOP
+ JMS I CRLFP
+ JMP PRINT1
+PRINT, TAD TM1
+ RTR CLL
+ CDF 0
+ TAD I X2
+ CDF 10
+ DCA TM2
+ TAD TM2
+ SNL SZA CLA
+ JMP PIGNOR
+ TAD I X1
+ JMS I TTWOP
+ TAD I X1
+ JMS I TTWOP
+ TAD I X1
+ JMS I TTWOP
+ TAD K4040 /2 SPACES
+ JMS I TTWOP
+ CDF 00
+ TAD I T4 /PRINT BANK NUMBER
+ CDF 10
+ RTR
+ RAR
+ AND K7B
+ TAD K260
+ JMS I TYPE
+ TAD TM2 /PRINT SYMBOL VALUE
+ JMS I TOCTP
+ TAD TM2 /IF ADDRESS=0,IT IS UNDEFINED
+ SZA CLA
+ JMP .+3 /ITS OK
+ TAD K4025 /TYPE SPACE,U
+ JMS I TTWOP
+ JMS I CRLFP
+ TAD M03
+PIGNOR, TAD M03
+ TAD X1
+ DCA X1
+ ISZ T4
+PRINT1, ISZ T1
+ JMP PRINT /JUMP IF MORE SYMBOLS, ELSE FALL INTO NEXT PG
+\fPAGES, TAD FCTR /SET CTR FOR CORRECT # OF BANKS
+ DCA T1
+ TAD (HLAZ-1 /INIT. PTR. TO HLA LIST
+ DCA X1
+ TAD I X1 /GET HLA OF NEXT BANK
+ CMA RTL /DIVIDE BY 200 AND COMPLEMENT
+ RTL
+ RTL
+ AND K37 /=NUMBER OF PAGES LEFT + 1
+ SZA
+ TAD (-1 /REDUCE IF NON-ZERO
+ JMS I TOCTP
+ JMS I CRLFP
+ ISZ T1
+ JMP PAGES+4 /NOT DONE WITH ALL BANKS
+ JMP I (OCLOS
+
+/
+/DATA
+/
+FCTR, 0 /# OF HIGHEST MEM. FIELD
+K37, 37
+T1, 0
+T3, 0
+T4, 0
+K7B, 7
+K70, 70
+K260, 260
+K4025, 4025
+K4040, 4040
+M03, -3
+BCRTA4, BCRT
+CRLFP, CRLF
+ER4P, ER4
+HSRP, ICHAR
+MSTA4, MST-3
+TOCTP, TOCT
+TTWOP, TTWO
+TVECA, TVEC-1
+M100D, 7700
+ PAGE
+\f/WROVLY IS USED TO STORE THE FIELD COUNT FOR THE PROPGT
+/ROUTINE- PROPGT IS CALLED THE FIRST TIME THAT IOTEST IS
+/CALLED-SEE LOC.325 IN FIELD ZERO(APPROX.)
+
+BC1000, 1000
+WROVLY, 0
+ TAD OVLYFG
+ SPA SNA CLA
+ JMP I WROVLY
+ CIF 0
+ JMS I (SHNDLR
+ 0110
+ 1600
+ MTEMP
+ JMP I (SIOERR
+ CIF 0
+ JMS I (SHNDLR
+ 5010
+ 1600
+ MTEMP
+ JMP I (SIOERR
+ DCA OVLYFG
+ JMP I WROVLY
+
+WRPGBF, 0
+ DCA PRECNO
+ TAD WRBFSW
+ SNA
+ JMP PREAD
+ CIA
+ TAD PRECNO
+ SNA CLA
+ JMP I WRPGBF
+ CIF 0
+ JMS I (SHNDLR
+ 4210
+ 1400
+WRBFSW, 0
+ JMP I (SIOERR
+PREAD, DCA OLDT9
+ TAD PRECNO
+ SNA CLA
+ JMP SETBF
+ CIF 0
+ JMS I (SHNDLR
+ 0210
+ 1400
+PRECNO, 0
+ JMP I (SIOERR
+SETBF, TAD PRECNO
+ DCA WRBFSW
+ JMP I WRPGBF
+\f/LOADER CLEANUP CODE - PREPARES TO RETURN TO OS/8
+
+LDRXIT, CDF 10
+ TAD I (HLA1
+ TAD BC200
+L7700, SMA CLA /DID WE LOAD OVER THE LOADER?
+ TAD (FIVE /NO
+ DCA WROVLY /WROVLY=0 OR 5
+ CIF 0
+ JMS I (SHNDLR
+ 0201
+ 400
+ MTEMP+21 /READ BACK THE RUN-TIME ROUTINES
+ JMP I (SIOERR /BADDIE
+ TAD K1600
+ CDF 0
+ DCA I ST1600
+ TAD I P4
+ DCA I P5
+ ISZ P4
+ ISZ P5
+ ISZ P6
+ JMP .-5 /ALSO MOVE 16-32 INTO LOC 100
+ CDF 10
+ JMS I BC200
+ 13 /RESET EVERYTHING
+ TAD I (MPARAM
+ AND (40 /GET "/G" SWITCH
+ SNA CLA
+ JMP CALMON /GO SWITCH NOT ON
+ JMS I BC200
+ 11 /KICK MONITOR OUT
+ CDF CIF 0
+ TAD (MSTCDF
+ DCA I (FIVE+1 /GO TO PROGRAM START ADR INSTEAD OF 7600
+ ISZ I (ONE /OPTOMIZE READ A LITTLE ON DECTAPE
+ JMP I WROVLY
+
+CALMON, CLA CMA
+ DCA I L7700 /INDICATE I/O MONITOR IS IN CORE
+ CDF CIF 0
+ JMP I WROVLY /GET OUT
+
+ST1600, 177 /THIS IS SET TO "FINBUF" OR "FOUBUF" BY /I AND /O
+P4, 16
+P5, 100
+P6, -15
+\f/ROUTINE TO TEST FOR /I AND /O SWITCHES
+
+IOTEST, 0
+ TAD I (MPARAM
+ AND (10
+ SNA CLA //I?
+ JMP .+4
+ JMS I (HLATST
+ CDF CIF 0
+ JMS I (INPENB
+ TAD I (MPARAM+1
+BC200, AND BC1000
+ SNA CLA //O?
+ JMP .+4
+ JMS I (HLATST
+ CDF CIF 0
+ JMS I (OUPENB
+ ISZ DOPROP /SHOULD WE PROPAGATE RESIDENT(AND WRITE OUT
+ JMP .+4 /THE RUN-TIME ROUTINES?)--NO
+ TAD WROVLY /YES-FIELD COUNT IS IN WROVLY
+ CDF CIF 0
+ JMS I (PROPGT /DO IT
+ JMP I IOTEST
+K1600, 1600 /RESET TO 2000 IF TWO PG.DEV.HNDLRS AT RUN TIME
+DOPROP, 7777 /ONCE-ONLY FLAG FOR PROPAGATING FIELD ZERO
+ /RESIDENT AND WRITING OUT RUNTIME ROUTINES
+ /NOT RESET AFTER /R!!!!
+ /SET TO -2 IF CALLED BY ".R LOADER"
+ /BECAUSE OF USELESS INIT CALL TO IOTEST
+ PAGE
+ $
+\f