.TITLE LIBR11 ;V004A 15-AUGUST-72 ;PDP-11 PRODUCT LINE ;LIBRARIAN ;COPYRIGHT, 1972 DIGITAL EQUIPMENT CORPORATION ;MAYNARD, MASSACHUSETTS JANUARY 1971 BEGLIB = 7 CLOSE = EMT+17 CR = 15 DELETE = EMT+21 DELLIB = "DL DELOM = 'D DSRCH = EMT+14 EDIR = 10 EGSD = 2 EMOD = 6 EOF = 100 EXTGLB = 2100 FATER = 47 FF = 14 FILOPN = 40 FTERCD = "27 GLBLN = 10 GSD = 1 IFER = "22 ILER = "23 INIT = EMT+6 INOK = 4 INSERT = 'I LF = 12 LSTER = "26 MAXLIN = 1 .TITLE EDIT ; VERSION NUMBER V006A ------ 11-MARCH-72 ; COPYRIGHT 1971, 1972 DIGITAL EQUIPMENT CORP., MAYNARD, MASS. ;;RADIX 50 DEVICE NAMES KBD=42420 TTY=100040 LSR=63440 LSP=63440 HSR=63320 HSP=63200 LPT=46600 DSK=14760 DTA=16040 ;;EMT ASSIGNMENTS EXITCD=60 WAITCD=1 WRITCD=2 OPENCD=16 CLOSCD=17 RLSECD=7 INITCD=6 READCD=4 DELTCD=21 RENAME=20 ;;RADIX 50 FILENAME AND EXTENSIONS EDI=17751 TOR=77552 BAK=6263 TMP=77430 TWO=002  .TITLE FILDMP ;PDP-11 PRODUCT LINE ;FILDMP V007A ;COPYRIGHT, 1971,1972 DIGITAL EQUIPMENT CORPORATION ;MAYNARD, MASSACHUSETTS FEBRUARY, 1971 ; ; A FILE DUMP PROGRAM WRITTEN UNDER DOS CONVENTIONS TO ; TO DUMP FILES IN THE DOS SYSTEM. ITS PRIMARY USE IS ; AS A TROUBLESHOOTING AID FOR SYSTEMS PROGRAMS. INSIZ=512. OUTSIZ=74. CRLF=5015 CR=15 LF=12 SPACE=40 FF=14 R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 R6=%6 PC=%7 RESTART=EMT+41 INIT=EMT+6 LOOKUP=EMT+14 OPEN=EMT+16 CL .TITLE ODT11R ; 14 AUG 1972 . = .+144+26 ;RESERVES SPACE FOR STACK ; ODT-11R. --V004A ; COPYRIGHT 1969,1970,1971,1972 DIGITAL EQUIPMENT CORPORATION R0 = %0 ; REGISTER R1 = %1 ; NAMING R2 = %2 ; CONVENTIONS R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 ST = 177776 ;STATUS REGISTER O.BKP = 16 ;NUMBER OF BREAKPOINTS-1 MULT. BY 2 O.RLR = 16 ;NO. OF RELOC. REGISTERS-1, TIMES 2 O.TVEC = 14 ;TRT VECTOR LOCATION O.RELC = 20 ;NUMBER OF RELOC.REGISTERS(TIMES 2) O.STM = 340 ;PRIORI 86. OBJLST = "LO OMER = "24 OPEN = EMT+16 ORDER = "25 PC = %7 READ = EMT+4 RELEASE = EMT+7 RENAME = EMT+20 RESADR = EMT+41 RPLACE = 'R ; ; ; ; R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 R6 = %6 SEMANTICS = EMT+57 LIB=46152 R11=72567 TMP=77430 SEMER = "21 SPACE = 40 SPSP = 20040 STATUS = EMT+13 SWER = 2 SWIER = "20 SYNTAX = EMT+56 UTILITY = EMT+42 VERTAB = 13 WATE = EMT+1 WRITE = EMT+2 LIBR: .WORD 0 ;ALL ERRORS ARE FATAL OLLB: .WORD 0 ;OUTPUT FASCII=20 ATSIN=100 ;;THE FOLLOWING CMDS ALLOW NO ARGS CB=01 ;BEGIN CE=02 ;UNIMPLEMENTED CM=03 ;MARK CR=04 ;READ CI=05 ;INSERT CF=06 ;FORM FEED CV=07 ;VERIFY CU=10 ;UNSAVE ;;THE FOLLOWING CMDS ALLOW POS INTERGER ARGS CH=11 ;SEARCH WHOLE CS=15 ;SAVE CG=12 ;SEARCH PAGE CT=13 ;TRAILER CN=14 ;NEXT CP=16 ;POSITION SEARCH ;;THE FOLLOWING CMDS ALLOW ALL ARGS CC=17 ;CHANGE CJ=26 ;ADVANCE CHARACTER CD=20 ;DELETE CHARACTER CW=21 ;WRITE OSE=EMT+17 READ=EMT+4 STATUS=EMT+13 WRITE=EMT+2 WATE=EMT+1 RELEASE=EMT+7 DELETE=EMT+21 CSI1=EMT+56 CSI2=EMT+57 .EXIT=EMT+60 .BSF=EMT+67 SWER=2 OC="OC BC="BY AC="AS MC="RA SPSP=20040 EOF=100 FATER=47 FATER1=46 FA="FA FB="FB TRAN=EMT+10 BL="BL CH="CH UTILITY=EMT+42 STLIN=16 FILDMP: .WORD 0 ;ALL ERRORS ARE FATAL OUTLB: .WORD 0 ;OUTPUT LINK BLOCK .RAD50 /O1/ .WORD 3 ;TAKES ONE OF /OC,/BY,/AS,/RA .RAD50 /LP/ .=.+4 .WORD 0 ;ALL ERRORS ARE FATAL INLB: .WORD 0 ;IN TY MASK - STATUS REGISTER O.TBT = 20 ;T-BIT MASK - STATUS REGISTER TRT = 000003 ;TRT INSTRUCTION O.RDB = 177562 ;R DATA BUFFER O.RCSR = 177560 ;R C/SR O.TDB = 177566 ;T DATA BUFFER O.TCSR = 177564 ;T C/SR ; INITIALIZE ODT ; USE O.ODT FOR A NORMAL ENTRY ; USE O.ODT+2 TO RESTART ODT - WIPING OUT ALL BREAKPOINTS ; USE O.ODT+4 TO RE-ENTER (I.E. - FAKE A BREAKPOINT) O.ODT: BR O.STRT ;NORMAL ENTRY BR O.RST ;RESTART O.ENTR: MOV ST,O.UST ;RE-ENTER -- SAVE STATUS MOV O.TVEC+2,ST ;S LIBRARY LINK BLOCK .RAD50 /O1 / .WORD 1 ;NO SWITCHES ALLOWED .RAD50 /DF/ .WORD 0 ;ALL ERRORS ARE FATAL ILLB: .WORD 0 ;INPUT LIBRARY LINK BLOCK .RAD50 /I1 / .WORD 35. ;TAKES /DL OR /D .RAD50 /DF/ ;UP TO 32. VALUES ON /D OR ;72. TOTAL CHARS PER LINE .=.+68. .WORD 0 ;MAXIMUM END OF SWITCH INDCTR .WORD 0 ;ALL ERRORS ARE FATAL IFLB: .WORD 0 ;INPUT FILE LINK BLOCK .RAD50 /I2 / .WORD 4 ;TAKES ONE SWITCH: .RAD50 /DF/ ;/I:V, OR /R .=.+6 .WORD 0 ;ALL ERRORS ARE FATAL LCL=22 ;LIST CA=23 ;ADVANCE LINE CK=24 ;DELETE LINE CX=25 ;EXCHANGE ;;THE FOLLOWING COMMANDS USE SECONDARY INPUT OR OUTPUT DEVICES ; ER ;READ FROM SEC. INPUT ; EW ;WRITE TO SEC. OUTPUT ; EH ;WHOLE SEARCH SEC. INPUT ; EP ;POSITION SEARCH SEC. INPUT ; EO ;OPEN SEC. INPUT ;;THE FOLLOWING ARE SPECIAL COMMANDS ; EF ;END FILE ; EM ;EXECUTE MACRO ; EX ;EXIT CR=015 CTRLX=030 CRLF=5015 LFLF=5012 FF=014 VT=013 LF=012 NEG=055 PLUS=053 RUBOUT=177 SLASH=057PUT LINK BLOCK .RAD50 /I1/ .WORD 32. ;LEAVE SWITCH SPACE .RAD50 /DF/ .=.+60. .WORD 0 .WORD 0 ;ALL ERRORS ARE FATAL CMDLB: .WORD 0 ;INPUT COMMAND LINK BLOCK .RAD50 /CMI/ .WORD 1 ;NO SWITCHES ALLOWED .RAD50 /KB/ ; .WORD 0 ;ERROR RETURN OCMLB: .WORD 0 ;OUTPUT COMMAND LINK BLOCK .RAD50 /CMO/ .WORD 1 ;NO SWITCHES .RAD50 /KB/ ; .WORD 0 .WORD 2 ;OUTPUT FILE BLOCK OUTFB: .WORD 0,0,0,0,0 .WORD 0 .WORD 4 ;INPUT FILE BLOCK INFB: .WORD 0,0,0,0,0 CMBUFH: .WORD ET UP LOCAL STATUS MOV PC,-(SP) ;FAKE THE PC MOV (SP)+,O.UPC MOVB #-1,O.P ;DISALLOW PROCEED CLRB O.S JMP O.BK1 O.STRT: MOV ST,O.UST ;SAVE STATUS ;RUN AT CURRENT STATUS JSR 5,O.SVTT ;SAVE TTY STATUS JSR 0,O.SVR ;SAVE REGISTERS (MAINLY SP) MOV #O.UR0,SP ;SET UP STACK MOV #O.ID,R4 ;TYPE ID MOV #O.IDND,R3 JSR 5,O.TYPE BR O.RST1 O.RST: JSR 0,O.SVR ;SAVE REGISTERS JSR 5,O.REM ;REMOVE ALL BREAKPOINTS JSR 5,O.CLRR ; CLEAR RELOCATION REGISTERS MOVB O.PRI,R4 ;GET ODT PRIORITYLLB: .WORD 0 ;LIBRARY LISTING LINK BLOCK .RAD50 /LST/ .WORD 3 ;/LO ALLOWED .RAD50 /KB/ .=.+4 .WORD 0 .WORD 2 OLFB: .WORD 0,0,0,0,0 ;OUTPUT LIBRARY FILE BLOCK .WORD 0 .WORD 4 ILFB: .WORD 0,0,0,0,0 ;INPUT LIBRARY FILE BLOCK .WORD 0 .WORD 4 IFFB: .WORD 0,0,0,0,0 ;INPUT FILE FILE BLOCK .WORD 0 .WORD 2 LLFB: .WORD 0,0 ;LIBRARY LISTING FILE BLOCK .RAD50 /LST/ .WORD 0,0 CMBUFH: .WORD 0,0,0,0,0,0,0 ;CSI WORK AREA CMBUF: .WORD 82. ;MAX LINE SIZE=82 CHARS .WORD 0,82. .=.+ EOMDET=40000 EOF=20000 SPACE=040 VERTAB=013 TMP0=%0 TMP1=%1 TMP2=%2 TMP3=%3 TMP4=%4 LS= %6 PC= %7 R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 R6=%6 SP=%6 PC=%7 DOT=%0 ARG=%1 ADR=%2 RCHAR=%3 RCMD=%5 TADR=%4 PADR=%3 .CSECT ;INITIALIZATION ROUTINE START: MOV #100,@#177560 ;TURN ON TTY INTERRUPT CLR @#177776 ;CLEAR PROGRAM STATUS MOV #START,SP ;INITIALIZE STACK-TEMPORARY MOV #START-10,R0 ;SET A BOUNDARY MOV R0,LAST ;SET LAST MOV R0,0,0,0,0,0,0 ;CSI WORK AREA CMBUF: .WORD 84.,0,0 ;COMMAND BUFFER .=.+84. .WORD 0 ;SAFETY VALVE .EVEN INBUF: .WORD INSIZ,3,0 ;INPUT BUFFER INDTA: .=.+INSIZ OBUF1: .WORD OUTSIZ,20,OUTSIZ ;OUTPUT BUFFER #1 OUTDTA: .=.+OUTSIZ .=.-2 .BYTE CR,LF OBUF2: .WORD OUTSIZ,20,OUTSIZ ;OUTPUT BUFFER #2 .=.+OUTSIZ .=.-2 .BYTE CR,LF NAMBUF: .WORD 17.,0,17. ;TITLE BUFFER .BYTE CR,LF .ASCII /FILDMP/ .BYTE SPACE,SPACE .ASCII /V007A/ .BYTE CR,LF .EVEN REQBUF: .WORD 5,0,5 ;CSI R RORB R4 ;SHIFT RORB R4 ; INTO RORB R4 ; POSITION MOVB R4,ST ;STORE IN STATUS O.RST1: CLRB O.S ;DISABLE SINGLE INSTRUCTION FOR NOW MOVB #-1,O.P ;DISALLOW PROCEED MOV #O.STM,O.TVEC+2 ;STATUS WORD TO TRT VECTOR+2 MOV #O.BRK,O.TVEC ;PC TO TRT VECTOR ; THIS NEXT INSTRUCTION RAISES THE "Z" FLAG BECAUSE ; ITS PURPOSE IN LIFE IS TO BEHAVE DIFFERENTLY ON THE /20 ; AND THE /45 SO WE CAN CHANGE THE RTI WHICH ALSO ; BEHAVES DIFFERENTLY ON THE /20 AND /45 BUT DOESNT RAISE ; THE Z FLAG. CO82. .WORD 0 .WORD 0 ;ALL ERRORS ARE FATAL CMLB: .WORD 0 ;COMMAND LINK BLOCK .RAD50 /CMI/ .WORD 1 .RAD50 /KB/ LINBUF: .WORD MAXLIN,1,0 ;LINE BUFFER LBDATA: ;DATA STARTS HERE .=.+MAXLIN LBTITL: .WORD 18.,0,18. ;TITLE BUFFER .BYTE CR,LF .ASCII /LIBR-11/ .BYTE SPACE,SPACE .ASCII /V004A/ .BYTE CR,LF .EVEN ; ; ; ; LBCMSG: .WORD 4 .WORD 0 .WORD 4 .BYTE CR,LF .BYTE '#,13 .EVEN .WORD 0 ;ALL ERRORS ARE FATAL CMEB: .WORD 0 ;COMMAND ERRORS LINK BLOCK .RAD500,ABSLAST ;SET ABSLAST SUB #500,R0 ;CALCULATE MAX MOV R0,MAX ;SET MAX CLR KIBBC ;CLEAR IMPORTANT VARIABLES CLR TOBBC ;WHICH MIGHT HAVE BEEN SET ON LAST CLR POBBC ;PASS THROUGH THE EDITOR CLR RIBBC ;CLEAR BYTE COUNTS CLR EXFLAG ;CLEAR EXIT FLAG CLR ENDFLG ;CLEAR END FLAG MOV #2,FNBKSO-2 ;MOVE IN HOW OPEN CODE FOR CLR FNBKSO-4 ;CLEAR ERROR RETURN CLR LKBKCI ;CLEAR LINK BLOCKS CLR LKBKCO ;FOR PROPER INITS CLR LKBKPC CLR LKBKSB MOV #KIBBC+2,KIBPTR ;SET UP BUFFER POINTEREQUEST BUFFER .BYTE CR,LF,LF,'#,13 CHN: .BYTE 0 ;CHAIN MODE FLAG .EVEN TMPBUF: .WORD 0,0,0 ;TEMPORARY BUFFER FILSTR: .WORD 0 ;INPUT DEVICE FILE STRUCTURED .EVEN PGCBUF: .WORD 2,0,2 ;PAGE CONTROL .BYTE FF,13 .EVEN HDRBUF: .WORD 8.,0,8. ;TOP OF PAGE .BYTE CR,LF,CR,LF,CR,LF,CR,LF .EVEN FLNMBF: .WORD 16.,2,16. .BYTE SPACE,SPACE FILNAM: .WORD 0,0,0 FILEXT: .BYTE '.,0,0,0,0,0 .BYTE SPACE,SPACE ;ONE OF THE FOLLOWING IS ;APPENDED TO FILE NAME .EVEN OCTBUF: .WNFUSED? WELL SO ARE WE. CMP PC,#.+4 ;CHECK WHETHER ON /45 OR /20 BEQ O.20 ;EQ MEANS 20, NE MEANS 45 MOV #RTT,O.RTIT ;RESET TO RTT IF ON 45 O.20: JMP O.RALL ;CLEAR BRK PT TABLES ; ;O.CTLC ; ^C PROCESSING. SIMULATE A TTY INTERRUPT ; ; O.CTLC: MOV O.USP,SP ;RESTORE CURRENT STACK CLR -(SP) ;DUMMY STATUS JSR PC,O.CTL1 ;PUSH RETURN ADDR OF INTERR ON STACK BR . ;MONITOR WILL RETURN TO THIS WAIT O.CTL1: MOV 62,-(SP) ;PUSH MONITOR STATUS MOV 60,-(SP) ;PUSH ADDR OF MONITOR ^C ROUTINE M /CMO/ .WORD 1 .RAD50 /KB/ .EVEN LBLSBF: .WORD 20.,0,20. ;LISTING BUFFER .BYTE SPACE,SPACE,SPACE,SPACE,SPACE LBLSNO: .BYTE 0,0,0,0,0 ;OBJECT MODULE NUMBER LBLSSP: .BYTE SPACE,SPACE LBLSNM: .WORD 0,0,0 ;OBJECT MODULE NAME LBLSTM: .BYTE CR,LF .EVEN LBLSTB: .WORD 26.,0,26. ;LISTING TITLE .BYTE CR,LF,CR,LF,CR,LF .BYTE SPACE,SPACE,SPACE,SPACE,SPACE,SPACE ; ; LBLSTN: .WORD 0,0,0 .BYTE '.,0,0,0 .BYTE CR,LF,CR,LF .EVEN LBLSHB: .WORD 8.,0,8. ;TOP OF PAGE CONTROL .BYTE CS MOV #TOBBC+2,TOBPTR ;FOR COMMANDS + TEXT MOV #RIBBC+2,RIBPTR ;SET POINTERS FOR I/O MOV #POBBC+2,POBPTR ;LINE BUFFERS EDINIT: MOV #LKBKCI,-(SP) EMT INITCD ;INIT CMI DATASET MOV #LKBKCO,-(SP) EMT INITCD ;INIT CMO DATASET MOV #LKBKPC,-(SP) EMT INITCD ;INIT PCI DATASET MOV #LKBKSB,-(SP) EMT INITCD ;INIT SUBSID DATASET MOV #REINIT,-(SP) ;ADDRESS FOR RESTART MOV #2,-(SP) ;RESTART CODE EMT 41 ;SET FIRST RESTART ADDRESS EDNOID: JMP EDGOID ;EXECUTES NEXT INSTRUCTION 1ST TIMORD 11.,0,11. .ASCII /(OCTAL)/ .BYTE CR,LF,CR,LF .EVEN BYTBUF: .WORD 11.,0,11. .ASCII /(BYTES)/ .BYTE CR,LF,CR,LF .EVEN CHNBUF: .WORD 11.,0,11. .ASCII /(CHAIN)/ .BYTE CR,LF,CR,LF .EVEN ASCBUF: .WORD 11.,0,11. .ASCII /(ASCII)/ .BYTE CR,LF,CR,LF .EVEN RADBUF: .WORD 11.,0,11. .ASCII /(RAD50)/ .BYTE CR,LF,CR,LF .EVEN DMPBUF: .WORD 2,0,2 .BYTE CR,LF .EVEN SEM: .WORD CMBUFH,0,0 ;CSI2 INTERFACE EOFBUF: .WORD 20.,0,20. .BYTE CR,LF .ASCII / END OF FILE / .BYTE OVB #100,O.RCSR ;ENABLE KYBD INTERRUPT RTI ; O.ALF REXP;NA TYPE N CHARACTERS STARTING AT REXP; ; THEN-- ; ACCEPT A STRING OF ASCII TEXT. STORE IT IN ; SUCCESIVE BYTES STARTING AT THE INDICATED ; LOCATION. TEXT TERMINATED BY COUNT, N. ; OR CR OR LF. ODT PRINTS THE ADDR OF ; THE NEXT AVAILABLE LOCATION IN CORE ; O.ALF: TST R3 ;WAS REXP TYPED? BEQ O.ELF1 ;BR IF NOT TSTB O.SMFD ;WAS ; TYPED? BEQ O.ELF1 ;BR IF NOT, ERROR TST R2 ;IF N NOT TYPED, ASSUME 1 BNE O.ELF4 INC R4 O.ELF4: MOV R,LF,CR,LF,CR,LF,CR,LF .EVEN LBERNO: .WORD 0 ;ERROR NUMBER LBFTCD: .WORD 0 ;FOR FATAL I/O ERRORS LBSEM: .WORD CMBUFH ;INTERFACE TO COMMAND SEMANTICS .WORD 0,0 LBFLBF: .WORD MAXLIN,1,0 ;FILE BUFFER LBFDTA: ;FIRST DATA .=.+MAXLIN .EVEN LXERBF: .WORD 13,20,13 LXERFL: .WORD 0,0,0 LXEREX: .BYTE '.,0,0,0 .BYTE VERTAB .EVEN LBTMBF: .WORD MAXLIN,1,0 ;TEMPORARY BUFFER LBTMDT: .=.+MAXLIN .EVEN BLKBUF: .WORD 0,0,0 ;FOR BLANK ERROR INFO .EVEN LBPGND: .WORD 2,E ONLY EDGOID: JSR R5,M2OB ;PRINT PROGRAM I.D. AND VERSION STRTID: MSG3 ;EDITOR ID MESSAGE ADD #14,EDNOID+2 ;WILL NOW JUMP PAST PROGRAM ID BR REINIT ;ZERO LKBKS AND FNBKS STRGET: CLR CMDBUF ;SET CSI FOR INPUT FILES JSR R5,M2OB ;GO TO PRINT ROUTINE MSG1 ;PRINT "#" CLR KIB+2 ;SET MODE TO ASCII NORMAL MOV #KIB,-(SP) ;PUSH BUFHDR ONTO STACK MOV #LKBKCI,-(SP) ;PUSH CMI LINKBLOCK ONTO STACK EMT READCD ;READ THE COMMAND STRING MOV #LKBKCI,-(SP) ;PUSH LINKBLOCK EMT WAITCD ;WCR,LF .EVEN FDCOUNT:.WORD 0 CURBUF: .WORD OBUF1 ;POINTER TO CURRENT OUTPUT BUF TMP1: .WORD 0 ;SAVE BUFFER POINTER FLDP00: MOV #RSTT,-(R6) MOV #2,-(R6) RESTART ;SET RESTART ADDRESS JSR PC,RINIT ;SET INITIAL CONDITIONS MOV #NAMBUF,-(R6) ;PRINT PROGRAM TITLE MOV #OCMLB,-(R6) WRITE FLDP05: MOV #REQBUF,-(R6) MOV #OCMLB,-(R6) WRITE ;REQUEST COMMAND INPUT MOV #OCMLB,-(R6) WATE CLR CMBUF+2 ;SET NORMAL ASCII FOR READ MOV #CMBUF,-(R6) MOV #CMDLB,-(R6) READ MOV #CMD R4,-(SP) ;SAVE COUNT ;SET UP TO TYPE N CHAR. MOV R5,R4 ;ADDR OF 1ST BYTE IN R4 MOV R5,R3 ;ADDR OF 1ST BYTE IN R3 ADD (SP),R3 ;ADD N TO R3 DEC R3 ;SUB. 1 TO GET LAST ADDR MOV R3,O.XXX ;SAVE LAST ADDR. JSR 5,O.TYPE ;TYPE THE CHARACTERS JSR 5,O.CRLF ;TYPE CR/LF MOV (SP)+,R4 ;RECALL N TO R4 ;NOW ACCEPT INPUT STRING INCB O.SCRN ;ALLOW SPACES VIA O.GET JSR 5,O.GET ;LOOK AT FIRST CH. CMPB R0,#015 ;IS IT A CARR.RET? BEQ O.ELF5 ;IF YES, RETURN TO COMM. DEC. CMPB R0,#012 ;CHK FOR!0,2 ;PAGE END CONTROL .BYTE FF,13 LBOBJ: .RAD50 /OBJ/ .RAD50 /MOD/ .RAD50 /LST/ .EVEN LIBHDR: .WORD 10,1,10 ;FIRST LINE OF A LIBRARY .WORD BEGLIB,0,0,0 ; ; .EVEN LBCAT: .BYTE 0 ;/C INDICATOR (FUTURE USE) LBDEL: .BYTE 0 ;/DL INDICATOR LBNMCH: .BYTE 0 ;OUTPUT LIB NAME CHANGED INDCTR LBPASS: .BYTE 0 ;PASS INDICATOR LBEDIR: .BYTE 0 ;END DIRECTORY INDICATOR LBEOF: .BYTE 0 ;EOF INDICATOR RENMFG: .WORD 0 LBTNAM: .WORD 0,0 ;TEMP FOR OBJ MOD NAME GCOUNT: .WORD 0 ;C"AIT ON THE KEYBOARD BITB #100,KIB+3 ;TEST FOR EOF CARD, FROM BATCH BEQ STRCON MOV #LKBKSB,-(SP) EMT RLSECD MOV #LKBKPC,-(SP) EMT RLSECD MOV #LKBKCO,-(SP) EMT RLSECD MOV #LKBKCI,-(SP) EMT RLSECD EMT 60 ;IF EOF DETECTED, EXIT STRCON: CMP KIBBC,#2 ;MAKE SURE HE TYPED AT LEAST ONE CHARACTER BLE STRGET ;HE DIDN'T MOV #CMDBUF,-(SP) ;PUSH COMMAND BUFFER ADDRESS EMT 56 ;GET FIRST PASS OF CSI MOV (SP)+,R1 ;TEST WHAT CSI RETURNED ON STACK BEQ GOGET ;ZERO INDICATES NO ERRORS: I#LB,-(R6) WATE BITB #FATER,CMBUF+3 ;ANY ERRORS ON THE TRANSFER? BEQ FLDP07 ;NO - BRANCH MOV CMBUF+2,-(R6) ;GET AT STATUS BYTE JMP FDFT00 ;PROCESS ERROR FLDP07: BITB #EOF,CMBUF+3 ;END OF FILE SEEN? BEQ FLDP08 ;NO - BRANCH .EXIT ;RETURN TO MONITOR FLDP08: CLR CMBUFH MOV #CMBUFH,-(R6) CSI1 ;CHECK SYNTAX MOV (R6)+,R5 ;ANY ERRORS? BEQ FLDP10 ;NO - BRANCH INC R5 MOVB #'?,(R5)+ MOVB #13,@R5 ;TYPE CMD UP TO POINT OF ERROR INC CMBUF+4 ;SET UP MAXIMUM BYTE COUNT MOV #20,CM$ LF BNE O.ELF7 ;IF NOT, ACCEPT N CHARACTERS CLRB O.SCRN ;MAKE SPACES INVISIABLE TO O.GET MOV O.XXX,R4 ;IF LINE FEED, OPEN NEXT AVAILABLE CH. INC R4 INC R2 MOV R4,R0 ;PRINT NEXT AVAIL BYTE MOV R2,-(SP) ;SAVE TO AVOID CLOBBERRING MOV R4,-(SP) ;BY O.RORA JSR 5,O.RORA MOV (SP)+,R4 MOV (SP)+,R2 MOVB #'\,R0 ;PRINT BACK SLASH JSR 5,O.FTYP JMP O.BYT O.ELF3: JSR 5,O.GET ;GET NXT CH. O.ELF7: JSR 5,O.CU ;CHK FOR ^U MOVB R0,(R5)+ DEC R4 ;REDUCE COUNT. IS IT ZERO? BEQ O.ELF2 %OUNTS GLOBALS ON THE STACK .EVEN LIB00: ;START MOV #LIBR,R6 ;INITIALIZE STACK POINTER MOV #LBERXT,-(R6) MOV #2,-(R6) RESADR ;SET RESTART ADDRESS CLR LBCAT ;ZERO ALL INDICATORS CLR LBNMCH CLR LBEDIR CLR OLLB CLR ILLB CLR RENMFG CLR IFLB CLR LLLB MOV #LXERFL,R5 CLR (R5)+ CLR (R5)+ ;INITIALIZE ERROR BUFFER CLR (R5)+ CLR (R5)+ CLR @R5 MOVB #'.,LXEREX MOV #SPSP,LBFTCD MOVB #'.,LBLSTN+6 MOV #CMEB,-(R6) INIT LBNOID: JMP LBGOID LBGOID: MOV #LBTITL,-(R6&NC R1 ;NON ZERO POINTER TO LOCATION OF ERROR MOVB #'?,(R1)+ ;INSERT "?" AFTER POINT OF ERROR MOVB #CR,(R1)+ ;THEN A CARRIAGE RETURN MOVB #LF,(R1)+ ;LINE FEED SUB #KIBBC+2,R1 ;CALCULATE BYTE COUNT MOV R1,KIBBC ;INSERT BYTE COUNT MOV #KIB,-(SP) ;PUSH BUFFER HEADER AND LINK BLOCK MOV #LKBKCO,-(SP) ;PRINT THE COMMAND STRING UP EMT WRITCD ;TO THE POINT OF ERROR DETECTION MOV #LKBKCO,-(SP) ;THEN A QUESTION MARK AND CR, FF, EMT WAITCD ;WAIT FOR PRINT MOV #1,-(SP) EMT 67 ;FLUSH EMT FOR'BUF+2 ;SET SPECIAL ASCII FOR WRITE MOV #CMBUF,-(R6) MOV #OCMLB,-(R6) WRITE MOV #OCMLB,-(R6) WATE MOV #1,-(R6) ;FLUSH BATCH STREAM FOR .BSF ;NEXT # OR $ CARD BR FLDP05 ;TRY AGAIN FLDP10: MOV #CMDLB,-(R6) RELEASE ;RELEASE COMMAND DEVICE MOV #OCMLB,-(R6) RELEASE ;RELEASE INPUT COMMAND DEVICE MOV #INLB,SEM+2 MOV #INFB,SEM+4 MOV #SEM,-(R6) CSI2 ;GET INPUT SEMANTICS BIT #SWER,@R6 ;TOO MANY SWITCHES? BEQ FLDP15 ;NO - BRANCH TST (R6)+ ;CLEAN UP STACK JMP FDSWER ;( ;BR IF YES BR O.ELF3 O.ELF2: MOV R5,-(SP) ;PRINT NXT AVAIL LOC: JSR 5,O.CRLF ;CR,LF MOVB #2,O.BW ;FORCE WORD MODE MOV (SP)+,R0 ;THEN, ADDRESS JSR 5,O.RORA ; O.ELF5: CLRB O.SCRN ;MAKE SPACE INVISABLE TO O.GET JMP O.DCD ;RETURN TO COMMAND DECODER O.ELF1: JMP O.ERR ; ; SPECIAL NAME HANDLER ; DEPENDS UPON THE EXPLICIT ORDER OF THE TWO TABLES O.TL AND O.UR0 O.REGT: JSR 5,O.GET ;SPECIAL NAME, GET ONE MORE CHARACTER MOV #O.TL,R4 ;TABLE START ADDRESS O.RSP: CMPB R0,(R4)+ ;IS THI)) ;PRINT OUT TITLE MOV #CMEB,-(R6) WRITE MOV #CMEB,-(R6) WATE ADD #26,LBNOID+2 LIB05: MOV #LBCMSG,-(R6) MOV #CMEB,-(R6) ;ASK FOR COMMANDS WRITE MOV #CMEB,-(R6) ;********************** WATE ;********************** MOV #CMLB,-(R6) INIT MOV #CMBUF,-(R6) ;READ COMMAND MOV #CMLB,-(R6) READ MOV #CMLB,-(R6) WATE BITB #100,CMBUF+3 ;TEST IF END OF DATA FOR BATCH BEQ LIB06 MOV #CMLB,-(R6) RELEASE ;RELEASE COMMAND DATASET MOV #CMEB,-(R6) RELEASE ;RELEASE CMO OUTPUT * BATCH, NOP IF DOS MODE REINIT: MOV #FNBKPI,R3 MOV #FNBKPO-4,R4 JSR R5,BLKCLR ;CLEAR PRIM INPUT FILE BLOCK MOV #FNBKPO,R3 MOV #FNBKSO-4,R4 JSR R5,BLKCLR ;CLEAR PRIM OUTPUT FILE BLOCK MOV #FNBKSO,R3 MOV #FNBKSI-4,R4 JSR R5,BLKCLR ;CLEAR FILE BLOCK FOR SUB OUTPUT MOV #FNBKSI,R3 MOV #FNBKON-4,R4 JSR R5,BLKCLR ;CLEAR FILE BLOCK FOR SEC INPT CLR LKBKPI+6 CLR LKBKPO+6 ;ALL SHOULD BE AS IT WAS A START CLR LKBKSI+6 CLR LKBKSO+6 ;CLEAR OUT TRACES OF LAST STRING CLR LKBKPO ;CLEA+PROCESS SWITCH ERROR FLDP15: TST INLB+6 BNE FLDP25 ;INPUT SPECIFIED TST (R6)+ ;CLEAN UP THE STACK FROM CSI2 MOV #2,CMBUFH ;SEE IF THERE'S ANY OUTPUT MOV #SEM,-(R6) CSI2 TST (R6)+ ;POP CSI RETURN PARAMETER TST INLB+6 ;ANY OUTPUT REQUESTED? BNE FLDP20 ;YES - ERROR JMP RSTT ;RESET PARAMETERS AND REQUEST ;MORE INPUT FLDP20: JMP FDNOIN ;SEMANTIC ERROR FLDP25: BIT #1,(R6)+ ;MORE INPUT COMING? BNE FLD21 ;NO, CONTINUE PROCESS JMP FDINER ;YES,ERROR, ONLY ONE ALLOWED FLD21:,S THE CORRECT CHARACTER? BEQ O.SP ;JUMP IF YES CMP #O.TL+O.LG,R4 ;IS THE SEARCH DONE? BHI O.RSP ;BRANCH IF NOT BIC #177770,R0 ;MASK OFF OCTAL MOV R0,R4 O.SP1: ASL R4 ADD #O.UR0,R4 ;GENERATE ADDRESS INC R2 ;SET FOUND FLAG JMP O.SCAN ;GO FIND NEXT CHARACTER O.SP: SUB #O.TL-7,R4 ;GO FIND NEXT CHARACTER BR O.SP1 ;RETYPE OPENED WORD IN ANSCII (CONVERTED FROM MOD40) O.MOD: MOV O.CAD,R0 ;CALL MOD40 UNPACK MOV #O.ALF1,R1 JSR PC,UNPA00 ;ASCII CHARS GO INTO O.ALF1,2,3 MOV #'=,R0 ;PRI-DATASET EMT 60 ;EXIT LIB06: BITB #FATER,CMBUF+3 ;ANY FATAL ERRORS? BEQ LIB07 ;NO - BRANCH MOV #CMLB,-(R6) RELEASE ;RELEASE COMMAND DATASET MOVB CMBUF+3,-(R6) MOV #2202,-(R6) IOT BR LIB05 LIB07: MOV #CMLB,-(R6) RELEASE ;RELEASE COMMAND DEVICE CMPB CMBUF+6,#015 BGT SYNTST CMPB CMBUF+6,#012 BGE LIB05 SYNTST: MOV #CMBUFH,-(R6) SYNTAX ;CHECK SYNTAX MOV (R6)+,R5 BEQ LIB10 ;BRANCH IF SYNTACTICALLY CORRECT INC R5 MOVB #'?,(R5)+ MOVB #CR,(R5)+ MOVB #LF,(R5)+ SU.R OUT LINKBLOCKS THAT MIGHT CLR LKBKPI ;HAVE BEEN SET BY PREVIOUS JOB CLR LKBKSI ;PRIMARY INPUT AND OUTPUT CLR LKBKSO ;SECONDARY INPUT AND OUTPUT CLR NOINFG ;CLEAR NO INPUT FLAG CLR BACKSW ;CLEAR BACKUP FLAG CLR FILSAM ;CLEAR FILE SAME FLAG BR STRGET ;GET ANOTHER COMMAND STRING BLKCLR: CLR (R3)+ ;CLEAR BLOCK ROUTINE CMP R3,R4 ;CLEAR CONSECUTIVE WORDS BLT BLKCLR ;LOOP IF MORE TO DO RTS R5 ;RETURN TO CALLER BLOCK: .WORD CMDBUF ;POINTER TO CMDBUF .WORD 0 ;POINTER T/ MOV #INLB,-(R6) ;INIT INPUT DEVICE INIT MOV #INLB,-(R6) STATUS ;GET INPUT DEVICE INFO MOV (R6)+,FILSTR ;SETUP FILSTR FOR LATER CMP (R6)+,(R6)+ ;CLEAN UP STACK BIT #4,FILSTR ;WILL IN DEVICE DO INPUT? BNE FLDP26 ;YES - BRANCH JMP FDEVER ;INPUT DEVICE ERROR FLDP26: MOV #INLB+10,R0 MOV @R0,R4 ASL R4 ;ANY SWITCHES ON INPUT FILE? BEQ FD520 ;NO - BRANCH ADD R4,R0 ;POINT AT SWITCH CMP #BL,@R0 ;IS IT TRAN? BNE FLDP30 ;NO - BRANCH JMP FDTRAN FLDP30: CMP #FA,@R0 ;FORMATTED 0NT "=" JSR R5,O.FTYP INCB O.SCRN ;SET FLAG TO ALLOW SPACES MOVB O.ALF1,R0 ;PRINT 1ST CHAR JSR R5,O.FTYP MOVB O.ALF2,R0 ;PRINT 2ND CH JSR R5,O.FTYP MOVB O.ALF3,R0 ;PRINT 3RD CH JSR R5,O.FTYP MOV #' ,R0 ;PRINT SPACE JSR R5,O.FTYP JSR R5,O.GET ;USER MUST NOW TYPE: CMPB R0,#' ;IF CHAR IS LESS THAN SPACE, BLT O.MOD1 ;PREPARE TO ENTER COMMAND DECODER MOVB R0,O.ALF1 ;OTHERWISE READ 3 CHAR JSR R5,O.GET ;2ND CH MOVB R0,O.ALF2 JSR R5,O.GET ;3RD CHAR CLRB O.SCRN ;RESTORE O.GET 1B #CMBUF+6,R5 MOV R5,CMBUF+4 MOV #20,CMBUF+2 ;FORMATTED ASCII WRITE MOV #CMBUF,-(R6) MOV #CMEB,-(R6) WRITE MOV #CMEB,-(R6) WATE MOV #1,-(R6) EMT 67 CLR CMBUF+2 ;RESTORE MODE BR LIB05 LIB10: MOV #CMEB,-(R6) RELEASE MOV #2,CMBUFH ;ASK FOR OUTPUT MOV #LBSEM,-(R6) MOV @R6,R2 TST (R2)+ MOV #OLLB,(R2)+ MOV #OLFB,@R2 TST -(R2) ;GET OUTPUT LIBRARY SEMANTICS BIT #SWER,(R6)+ ;TOO MANY SWITCHES? BEQ LIB11 ;NO - BRANCH MOV #4,R0 ;SET OUT LIB CODE JMP LBSWER ;PROCE2O LINKBLOCK .WORD 0 ;POINTER TO FILEBLOCK GOGET: MOV #LKBKPI,BLOCK+2 ;SET UP FOR PRIMARY INPUT MOV #FNBKPI,BLOCK+4 ;FROM CSI - BY MOVING IN POINTERS MOV #BLOCK,-(SP) EMT 57 ;GET FIRST INPUT FILE FROM CSI TST LKBKPI+6 ;WAS A PRIMARY INPUT FILE GIVEN? BNE GOGET1 ;IF NON-ZERO, YES INC NOINFG ;SET FLAG SAYING NO INPUT FILE GOGET1: BIT (SP),#2 ;TEST FOR TOO MANY SWITCHES BEQ GOGET2 ;OK IF ZERO GOGET3: CLR (SP) ;PUSH ADDITIONAL ERROR INFORMATION MOV #2203,-(SP) ;ERROR S203, SWITCH 3ASCII? BNE FLDP35 ;NO - BRANCH MOV #20,INBUF+2 BR FLDP50 FLDP35: CMP #FB,@R0 ;FORMATTED BINARY BEQ FLDP45 CMP #CH,@R0 ;CHAIN? BNE FLDP40 ;NO - ERROR INCB CHN ;SET CHAIN FLAG BR FLDP50 FLDP40: JMP FDSWER ;SWITCH ERROR FLDP45: MOV #1,INBUF+2 FLDP50: TST (R0)+ ;POINTER NEXT SWITCH TST @R0 ;IS THERE ONE? BNE FLDP40 ;YES - SWITCH ERROR TSTB CHN ;IN CHAIN MODE? BEQ FD520 ;NO - BRANCH TST FILSTR ;INPUT DEVICE FILE STRUCTURED? BMI FLDP51 ;YES - BRANCH JMP FDEVER ;IN4TO NORMAL MOVB R0,O.ALF3 MOV #O.XXX,R0 ;TELL MOD40 TPACK TO PACK MOV #O.ALF1,R1 ;INTO O.XXX JSR PC,PACK00 MOV O.XXX,R4 ;MAKE IT APPEAR AS IF THE MOV #1,R2 ;PACKED # WAS TYPED JMP O.SCAN ;LET COMMAND DECODER DO THE REST O.MOD1: CLRB O.SCRN CLR R4 ;MAKE IT APPEAR CLR R2 ;AS IF NO NUMBERS WERE TYPED IN O.MOD2: JMP O.SCN1 ;TYPED IN ; "BACKARROW" HANDLER - OPEN INDEXED ON THE PC (BACK ARROW) O.ORPC: JSR 5,O.TCLS ;TEST WORD MODE AND CLOSE ADD @R2,R2 ;COMPUTE INC R2 INC R2 ; 5SS ERROR LIB11: MOV #LLLB,(R2)+ MOV #LLFB,@R2 TST -(R2) ;GET LISTING SEMANTICS MOV #LBSEM,-(R6) SEMANTICS BIT #SWER,@R6 ;TOO MANY SWITCHES? BEQ LIB12 ;NO - BRANCH MOV #6,R0 ;SET LISTING CODE JMP LBSWER ;PROCESS ERROR LIB12: BIT #1,(R6)+ BNE LIB13 ;NO - BRANCH JMP LBOFER ;OUTPUTFILE ERROR LIB13: CLR CMBUFH ;ASK FOR INPUT MOV #ILLB,(R2)+ MOV #ILFB,@R2 TST -(R2) ;GET INPUT LIBRARY MOV #LBSEM,-(R6) SEMANTICS BIT #SWER,(R6)+ ;TOO MANY SWITCHES? BEQ LIB15 ;NO - BRAN6ERROR IOT ;GO TO ERROR MESSAGE PROCESSOR BR REINIT ;REINITIALIZE AND GET NEW COMMAND STRING GOGET2: BIT #1,(SP)+ ;ANOTHER INPUT FILE BNE OUTGET ;NO MOV #LKBKSI,BLOCK+2 ;SET UP FOR SECONDARY INPUT MOV #FNBKSI,BLOCK+4 ;FROM CSI - BY MOVING IN MOV #BLOCK,-(SP) ;POINTERS EMT 57 ;GET SECOND INPUT FILE BIT #2,(SP) ;TOO MANY SWITCHES BNE GOGET3 BIT #1,(SP)+ ; < SEEN YET BNE OUTGET ;IF SEEN, START GETTING OUTPUT SPECIFICATIONS CLR -(SP) ;SET UP TO IDENTIFY ERROR TO USER MOV #7PUT DEVICE ERROR FLDP51: MOV #INFB,-(R6) CLR -(R6) ;GET INFO ON INPUT FILE MOV #INLB,-(R6) LOOKUP MOV (R6)+,INDTA ;START BLOCK BNE FLDP5A ;NO INPUT ERROR IF ZERO JMP FDNOIN FLDP5A: MOV (R6)+,LNSAV ;SAVE LENGTH MOV (R6)+,FILDES ;AND FILE DESCRIPTOR WORD FLDP52: TSTB CHN ;IN CHAIN MODE? BNE FLDPB ;YES - BYPASS OPEN STUFF FD520: TST FILSTR ;IS INPUT DEVICE FILE STRUCTURED? BPL FLDPB ;NO - CHECK OUTPUT FIRST MOV #INFB,-(R6) MOV #INLB,-(R6) OPEN ;OPEN INPUT FILE JSR PC,FDRH NEW ADDRESS O.PCS: MOV R2,O.CAD ;UPDATE CAD JMP O.OP2A ;GO FINISH UP O.ORAB: JSR 5,O.TCLS ;TEST WORD MODE AND CLOSE MOV @R2,R2 ;GET ABSOLUTE ADDRESS BR O.PCS O.ORRB: JSR 5,O.TCLS ;TEST AND CLOSE MOV @R2,R1 ;COMPUTE NEW ADDRESS MOVB R1,R1 ;EXTEND THE SIGN ASL R1 ;R2=2(@R2) INC R1 ; +2 INC R1 ADD R1,R2 ; +PC BR O.PCS O.TCLS: JSR PC,O.CLSE ;CLOSE CURRENT CELL CMP #2,O.BW ;ONLY WORD MODE ALLOWED BNE O.TCL1 ;BRANCH IF ERROR MOV O.CAD,R2 ;CURRENT ADDRESS IN R2 RTSECH MOV #2,R0 ;SET INPUT LIB CODE JMP LBSWER ;PROCESS ERROR LIB15: MOV #IFLB,(R2)+ MOV #IFFB,@R2 ;GET FIRST INPUT FILE LIB16: MOV #LBSEM,-(R6) SEMANTICS BIT #SWER,@R6 ;TOO MANY SWITCHES? BEQ LIB17 ;NO - BRANCH CLR R0 ;SET INPUT FILE CODE JMP LBSWER ;PROCESS ERROR LIB17: TST IFLB+6 ;ANYTHING THERE? BEQ LIB20 ;NO - BRANCH BIT #1,(R6)+ BR LIB25 LIB20: BIT #1,(R6)+ BEQ LIB16 ;YES - BRANCH LIB25: JSR PC,ILBSW ;CHECK INPUT LIBR SWITCHES TST OLLB+6 ;OUTPUT LIBR SPECIFIED? F2205,-(SP) ;ERROR S205, TOO MANY INPUT FILES IOT ;GO TO ERROR MESSAGE PROCESSOR BR REINIT ;REINITIALIZE AND GET NEW COMMAND STRING OUTGET: MOV #2,CMDBUF ;PREPARE CSI TO GET OUTPUT FILES MOV #LKBKPO,BLOCK+2 ;SET UP TO GET PRIMARY OUTPUT MOV #FNBKPO,BLOCK+4 ;FROM THE CSI. BY MOV #BLOCK,-(SP) ;MOVING IN POINTERS EMT 57 ;GET PRIMARY OUTPUT FILE TST LKBKPO+6 ;ANY PRIMARY FILE BNE OUTGT1 ;IF YES CONTINUE MOV #1,-(SP) ;ERROR S227-1, NO PRIM OUTPUT BR FILERR ;GO TO ERROR MESSAGE INGD ;READ SOME INPUT FLDPB: JSR PC,OUTSEM ;GET NEXT OUTPUT SEMANTIC TST R1 ;IS THERE ANY MORE? BEQ FDEXIT ;NO - GO EXIT TSTB CHN ;IN CHAIN MODE? BNE FLDP53 ;YES - OPEN NOT NEEDED TST FILSTR ;IF IN DEV IS FILE STRUCTURED, BMI FLDP53 ;THEN FILE ALREADY IS OPEN MOV #INFB,-(R6) MOV #INLB,-(R6) OPEN ;OPEN INPUT FILE JSR PC,FDRD ;READ IN SOME INPUT FLDP53: MOV INFB,-(R6) MOV #FILNAM,-(R6) MOV #1,-(R6) EMT 42 ;PUT FILE NAME IN BUFFER MOV INFB+2,-(R6) MOV #FILNAM+3,-(R6) """"""" """""""""""""""""""""DDDDDDD@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDADDB CjLpkQ 9}kQ [v&kQ -t^kQ H0vLDkQ $D'JBcc8a ͋,L w:B ` 5 &  E >w   f5eU@  [*   & * G &( 8L'4e Q$ BBB"   U@ U e  "U%Gef. U U Bb 0 * BI BNE LIB35 ;YES - BRANCH TST IFLB+6 BEQ LIB26 CLR R0 JMP LBSMER ;THEN MUST HAVE NO INPUT LIB26: TST ILLB+6 ;FILES, AN INPUT LIBR WITH BNE LIB28 LIB27: MOV #2,R0 JMP LBSMER ;NO /D,AND A LISTING LIB28: TST R1 ;REQUEST, ELSE SEMANTIC ERROR BNE LIB27 LIB30: TST LLLB+6 BNE LIB32 MOV #6,R0 JMP LBSMER LIB32: JMP LBLIST ;GO TO LISTING LIB35: TST IFLB+6 ;IF NO INPUT FILES, THEN BNE LIB40 ;MUST HAVE INPUT LIBR WITH TST R1 ;/D, ELSE SEMANTIC ERROR BEQ LIB27 JMP LBDLOM ;GO JTER PROCESSOR OUTGT1: BIT (SP),#2 ;ANY SWITCHES? BEQ OUTGT2 ;OK IF EQUAL FILERY: CLR (SP) ;SET UP TO IDENTITY ERROR TO USER MOV #2203,-(SP) ;ERROR S203, SWITCH ERROR BR FILER2 ;GO TO ERROR MESSAGE INTER PROCESSOR FILERR: MOV #2227,-(SP) ;ERROR S227, ILLEGAL FILE SPECIFICATION FILER2: IOT ;GO TO ERROR MESSAGE PROCESSOR BR REINIT ;REINITIALIZE AND BEGIN AGAIN OUTGT2: BIT #1,(SP)+ ;ANY MORE FILES ? BNE FILMAN ;NO MOV #LKBKSO,BLOCK+2 ;SET UP TO GET SECONDARY OUTPUT MOV #FNBKSO,BLOK MOV #1,-(R6) EMT 42 MOV INFB+4,-(R6) BNE FLDP55 ;IF NO EXTENT, THEN DON'T CLR FILEXT ;PRINT THIS FIELD CLR FILEXT+2 TST (R6)+ BR FLDP57 FLDP55: MOV #FILEXT+1,-(R6) MOV #1,-(R6) EMT 42 FLDP57: CLR R5 ;FAKE OUT LINE COUNTER MOV #HDRBUF,R4 ;WRITE PAGE HEADER JSR PC,FDWRT MOV #FLNMBF,R4 ;WRITE FILE NAME JSR PC,FDWRT MOV #5,R5 ;INITIALIZE LINE COUNT JSR PC,@R1 ;GO TO PROPER SUBROUTINE FLDP60: MOV #INFB,-(R6) MOV #INLB,-(R6) LOOKUP ;GET INFO ON INPUT FILE TST (R6)+L R5 O.TCL1: TST (SP)+ O.TCL2: JMP O.ERR ;POP A WORD AND SHOW THE ERROR ; PROCESS S - SINGLE INSTRUCTION MODE O.SNGL: TSTB O.SMFD ;DONT REACT IF ; NOT TYPED BEQ O.TCL2 TST R2 ;SEE IF TURN ON OR TURN OFF BNE O.SI1 ;BRANCH IF TURNING IT ON CLRB O.S ;CLEAR THE FLAG JMP O.DCD ;CONTINUE THE SCAN O.SI1: MOVB #-1,O.S ;SET THE FLAG O.SI2: JMP O.DCD ;COMMA PROCESSING. N IN R4 IS THE RELOCATION REGISTER NUMBER ; O.COMM: INCB O.CMFD ;SET "COMMA FOUND" SWITCH TO ON TST R2 ;WAS A NUMBER MTO DELETE OBJ MODULES LIB40: TST ILLB+6 ;IF NO INPUT LIBR, THEN BNE LIB45 ;GO TO CREATE LIBRARY JMP LBCRT LIB45: TST R1 ;IF /D, THEN SEMANTIC ERROR BNE LIB27 ;ELSE GO TO REPLACE OR JMP LBRORI ;INSERT OBJECT MODULES LBSWER: ;SWITCH ERROR PROCESSOR MOV #2203,LBERNO LBSW00: MOV LBCDTB(R0),R2 ;POINT AT ERRORED FILE BLK LBSW05: MOV #LXERFL,R4 ;CONVERT AND INSERT JSR PC,LBERNM ;FILE NAME LBSW07: CLR -(R6) MOV LBERNO,-(R6) BR LBSE00 LBCDTB: .WORD IFFB .WORD ILFB NCK+4 ;FROM THE CSI. BY MOV #BLOCK,-(SP) ;MOVING IN POINTERS EMT 57 ;GET SECONDARY OUTPUT FILE BIT #2,(SP) ;TEST IF ANY SWITCHES BNE FILERY ;IF ANY THEN ERROR BIT #1,(SP)+ ;TEST IF MORE FILES TO COME BNE FILMAN ;NO MORE FILES CONTINUE CLR -(SP) ;IF MORE FILES - AN ERROR MOV #2204,-(SP) ;ERROR S204, TOO MANY OUTPUT FILES BR FILER2 ;GO TO ERROR MESSAGE INTER PROCESSOR FILMAN: TST LKBKSI+6 ;IS THER A SECONDARY INPUT BEQ FILM3 ;BRANCH IF NO CMP LKBKSI+6,LKBKSO+6 ;THIS SECTIONO ;IGNORE FILE LENGTH BIT #40,(R6)+ ;IS INPUT FILE OPEN? BEQ FLDP65 ;NO - BRANCH MOV #INLB,-(R6) CLOSE ;CLOSE INPUT FILE FLDP65: MOV #OUTLB,-(R6) CLOSE ;CLOSE OUTPUT FILE MOV #OUTLB,-(R6) RELEASE ;RELEASE OUTPUT DEVICE JMP FLDP26 ;GO THROUGH AGAIN FDEXIT: MOV #INFB,-(R6) MOV #INLB,-(R6) LOOKUP ;LOOKUP INPUT FILE TST (R6)+ ;GET RID OF LENGTH WORD BIT #40,(R6)+ ;IS A FILE OPEN ON INLB? BEQ FDEX00 ;NO - BRANCH MOV #INLB,-(R6) CLOSE ;CLOSE INPUT FILE FDEX00: MPTYPED IN? BEQ O.COM1 ;NO,USE CURRENT BIAS; I.E.,EXIT BIC #177770,R4 ;MAKE SURE THAT N IS LESS THAN 10(8) ASL R4 ;YES, LOCATE RELOC. REGISTER MOV O.RELT(R4),O.BIAS ;PUT BIAS IN O.BIAS O.COM1: JMP O.DCD1 ;GO BACK TO DECODER ;R PROCESSING. SEVERAL POSSIBILITIES- ; A. ;R WAS TYPED. ZERO OUT ALL RELOCATION REGISTERS ; B. ;NR WAS TYPED. ZERO OUT $NR ; C. REXP;NR WAS TYPED. SET $NR TO REXP ; D. NR WAS TYPED, WHILE A WORD WAS OPENED- ; COMPUTE (O.CAD)-($NR) AND PRINT IT ; O.REL: TSTB O.Q .WORD OLFB .WORD LLFB .WORD 0 .WORD BLKBUF LBILER: ;INPUT LIBR ERROR PROCESSOR MOV #2246,LBERNO ;INSERT CODE JSR PC,NAMCLR ;CLEAR THE FILE NAME BUFFER BR LBSW07 LBFTER: ;FATAL I/O ERRORS MOV #2202,LBERNO ;INSERT CODE MOV LBCDTB(R0),R2 MOV #LXERFL,R4 JSR PC,LBERNM ;ENTER FILNAM IN ERROR BUF CLR -(R6) MOVB 3(R3),@R6 MOV LBERNO,-(R6) BR LBSE00 LBOFER: MOV #2204,LBERNO JSR PC,NAMCLR BR LBSW07 LBIFER: ;INPUT FILE ERROR PROCESSOR MOV #2213,LBERNO ;IR CHECKS FOR ILLEGAL BNE FILM3 ;COMBINATIONS OF FILE NAMES CMP FNBKSI,FNBKSO ;IN THE COMMAND STRING BNE FILM3 CMP FNBKSI+2,FNBKSO+2 ; BNE FILM3 CMP FNBKSI+4,FNBKSO+4 BNE FILM3 MOV #2,-(SP) ;ERROR S227-2, SEC IN = SEC OUT BR FILERR ;GO TO ERROR MESSAGE INTER PROCESSOR FILM3: CMP LKBKSI+6,LKBKPO+6 ;TEST OF SECONDARY INPUT BNE FILM4 CMP FNBKSI,FNBKPO ;IS THE SAME AS PRIMARY BNE FILM4 CMP FNBKSI+2,FNBKPO+2 ;OUTPUT BNE FILM4 CMP FNBKSI+4,FNBKPO+4 BNE FILM4 MOV #3,-(SP) ;ERROSOV #INLB,-(R6) RELEASE JMP RSTT FDTRAN: MOV #INLB,-(R6) EMT 13 ;GET STANDARD BUFFER SIZE CMP (R6)+,(R6)+ MOV #256.,R1 MOV #1,CTLCK ;SET UP PAGE CONTROL FDPCA: CMP R1,@R6 ;256 WDS = 1/PAGE BLOS FDPCA1 ;128 WDS = 2/PAGE, ETC. ASR R1 ASL CTLCK BR FDPCA FDPCA1: CMP R1,#32. ;NOTE: 32 WDS = 6/PAGE BNE FDPCB MOV #6,CTLCK FDPCB: MOV (R6)+,TRNWC ;SET UP TRAN WORD COUNT FTRAN: JSR PC,OUTSEM ;GET NEXT OUTPUT MOV R1,TMPR1 ;SAVE ACTION ADDRESS BEQ FDTR55 ;EXIT IF NONE TSMFD ;TEST IF A SEMICOLON WAS TYPED BEQ O.REL1 ;NO CASE D TST R2 ;NOTHING OPENED, WAS N TYPED? BEQ O.REL2 ;N NOT TYPED O.REL4: BIC #177770,R4 ;GUARANTEE THAT N<10 ASL R4 ;N TYPED, CASE B OR C. SET $NR. TST R3 ;IF REXP NOT TYPED,CLEAR TO -1 BEQ O.RELA MOV R5,O.RELT(R4) ;IF REXP NOT TYPED, R5=0. CASE B. O.REL5: BR O.H1 ;EXIT TO DECODER O.REL2: TST R3 ;IF REXP TYPED, CASE B OR C WITH N=0 BEQ O.REL3 ;REXP NOT TYPED, N NOT TYPED, CLEAR ALL. BR O.REL4 ;REXP TYPED- N NOT TYPED OUNSERT CODE CLR R0 BR LBSW00 LBSMER: ;SEMANTIC ERROR PROCESSOR MOV #2203,LBERNO ;INSERT CODE BR LBSW00 LBSE00: MOV #CMEB,-(R6) INIT ;INIT ERROR DEVICE MOV #LXERBF,-(R6) ;SEND ERROR MESSAGE MOV #CMEB,-(R6) WRITE MOV #CMEB,-(R6) ;********************* WATE ;********************* IOT LBERXT: ;ERROR EXIT TST OLLB ;OUTPUT LIBR DEVICE INITED? BEQ LBRX00 ;NO - BRANCH MOV #OLFB,-(R6) ;OUTPUT LIBRARY OPEN? MOV #OLLB,-(R6) DSRCH TST (R6)+ BIT #FILOPN,(R6VR S227-3, SEC IN = PRI OUT BR FILERR ;GO TO ERROR MESSAGE INTER PROCESSOR FILM4: CMP LKBKPI+6,LKBKSO+6 BNE FILM5 CMP FNBKPI,FNBKSO BNE FILM5 CMP FNBKPI+2,FNBKSO+2 BNE FILM5 CMP FNBKPI+4,FNBKSO+4 BNE FILM5 TST NOINFG ;ANY INPUT SPECIFIED BNE FILM5 ;NO MOV #4,-(SP) ;ERROR S227-4, PRIM IN = SEC OUT BR FILERR FILM5: CMP LKBKPO+6,LKBKSO+6 BNE FILM6 CMP FNBKPO,FNBKSO BNE FILM6 CMP FNBKPO+2,FNBKSO+2 BNE FILM6 CMP FNBKPO+4,FNBKSO+4 BNE FILM6 MOV #6,-(SP) ;ERROR S227-6,W CLR CTLCT ;CLEAR PAGE CONTROL MOV #INLB+10,R0 ;GET AT INPUT SWITCHES FDTR00: MOV @R0,R4 ;GET WORD COUNT BNE FDTR02 ;MORE TO COME MOV #OUTLB,-(R6) ;CLOSE OUTPUT FILE CLOSE MOV #OUTLB,-(R6) ;RELEASE DEVICE RELEASE BR FTRAN ;SEE IF THERE'S MORE FDTR02: ASL R4 ;SAVE POINTER TO NEXT SWITCH ADD R4,R0 MOV R0,-(R6) ADD #2,@R6 CMP #BL,@R0 ;THIS A TRAN REQUEST? BNE FDTR03 ;NO - SWITCH ERROR ASR R4 ;GET NUMBER OF VALUES DEC R4 BNE FDTR05 ;THERE'S AT LEAST ONE VALUE FDTR03: X.RELA: MOV #-1,O.RELT(R4) BR O.H1 ;CLEAR RELOCATION REGISTERS. O.REL3: JSR 5,O.CLRR ;CLEAR RELOC REG'S BR O.SI2 ;GO BACK TO SCAN O.REL1: CMP O.BW,#2 ;CASE D, PRINT @O.CAD IN RELATIVE FORM BNE O.TCL2 ;ERROR IF BYTE OPENED CMP #0,R2 ; CHECK IF R BNE O.REL6 ; IF R JSR R5,O.LOC ; THEN FIND BEST N CMP R0,#-1 ;WAS A RELOC REG FOUND? BNE O.REL8 ;BR IF YES. ELSE-- MOV #'=,R0 ;TYPE "=" JSR 5,O.FTYP MOV @O.CAD,R0 ;TYPE ABS. VAL OF CONTENTS BR O.REL9 ;OF OPENED LOC. O.REL8: MOVY)+ BEQ LBRXOL ;NO - BRANCH MOV #OLLB,-(R6) CLOSE ;DELETE OUTPUT LIBR MOV #OLFB,-(R6) ;AND RELEASE DEVICE MOV #OLLB,-(R6) DELETE LBRXOL: MOV #OLLB,-(R6) RELEASE LBRX00: TST ILLB ;INPUT LIBR DEVICE INITED? BEQ LBRX05 ;NO - BRANCH MOV #ILFB,-(R6) ;INPUT LIBRARY OPEN? MOV #ILLB,-(R6) DSRCH TST (R6)+ BIT #FILOPN,(R6)+ BEQ LBRXIL ;NO - BRANCH MOV #ILLB,-(R6) CLOSE ;CLOSE FILE AND LBRXIL: MOV #ILLB,-(R6) ;RELEASE DEVICE RELEASE LBRX05: TST IFLB ;INPUT FILE DEVICE INZ PRIM OUT = SEC OUT BR FILERR FILM6: CMP LKBKPI+6,LKBKSI+6 BNE FILOP CMP FNBKPI,FNBKSI BNE FILOP CMP FNBKPI+2,FNBKSI+2 BNE FILOP CMP FNBKPI+4,FNBKSI+4 BNE FILOP TST NOINFG ;ANY PRIM INOUT SPECIFIED BNE FILOP ;NO MOV #5,-(SP) ;ERROR S227-5, PRIM IN = SEC IN JMP FILERR FILOP: MOV #LKBKPO,-(SP) EMT INITCD ;INIT THE PRIMARY OUTPUT TST NOINFG ;ANY PRIM INPUT? BNE NAMCHK ;NO MOV #LKBKPI,-(SP) ;YES, PUSH PRI. OUTPUT LINE BLOCK EMT INITCD ;INIT THE PRIMARY INPUT NAMCH[TST (R6)+ ;CLEAN UP STACK JMP FDSWER ;SWITCH ERROR IF NO VALUES FDTR05: MOV -(R0),-(R6) MOV #4,-(R6) UTILITY ;CONVERT BLOCK NO. TO BINARY MOV @R6,BLKSV ;SAVE FIRST BLOCK AND MOV (R6)+,TRNBLK ;ENTER IN TRNBLK TST (R6)+ DEC R4 BEQ FDTR15 MOV -(R0),-(R6) MOV #4,-(R6) UTILITY MOV (R6)+,MAXBLK ;NEXT VALUE IS LAST BLOCK TST (R6)+ DEC R4 ;MORE VALUES? BNE FDTR03 ;YES - ERROR BR FDTR20 FDTR15: MOV TRNBLK,MAXBLK ;DEFAULT TO TRAN ONE BLOCK FDTR20: MOVB #SPACE,FILNAM+3 MOV #\ R0,R4 ; PUT NEW N INTO R4 O.REL6: MOV @O.CAD,R1 ;OPENED VALUE IS THE MINUEND MOV R4,O.TMP1 ; SAVE N ASL R4 ;GET BIAS FROM $NR SUB O.RELT(R4),R1 ;BIAS IS THE SUBTRAHEND MOV #'=,R0 ;TYPE "=" JSR 5,O.FTYP MOV O.TMP1,R0 ; PREPARE INPUTE FOR O.FTYP ADD #60,R0 ; CONVERT N TO ANSCII JSR 5,O.FTYP ; TYPE N MOV #',,R0 ;PREPARE INPUT FOR O.FTYP JSR 5,O.FTYP ; TYPE COMMA CMP #0,R2 ; CHECK IF R BNE O.REL7 ; IF R MOV O.XXY,R0 ; THEN PREPARE INPUT FOR O.CADV O.REL7: MOV R1,R0 ;TYPE]ITED? BEQ LBRX10 ;NO - BRANCH MOV #IFFB,-(R6) ;INPUT FILE OPEN? MOV #IFLB,-(R6) DSRCH TST (R6)+ BIT #FILOPN,(R6)+ BEQ LBRXIF ;NO BRANCH MOV #IFLB,-(R6) ;CLOSE FILE AND CLOSE ;RELEASE DEVICE LBRXIF: MOV #ILLB,-(R6) RELEASE LBRX10: TST LLLB ;LISTING DEVICE INITED? BEQ LBRX15 ;NO - BRANCH MOV #LLFB,-(R6) ;LISTING FILE OPEN? MOV #LLLB,-(R6) DSRCH TST (R6)+ BIT #FILOPN,(R6)+ BEQ LBRXLF ;NO - BRANCH MOV #LLLB,-(R6) CLOSE MOV #LLFB,-(R6) ;DELETE FILE AND MOV #LL^K: TST LKBKPI+10 ;ANY SWITCHES? BEQ NOSWIT ;NO CMP LKBKPI+12,#102 ;IS SWITCH=B? BEQ NAMCK1 ;IF B SWITCH THEN ITS OK, BRANCH IF OK TST -(SP) ;MAKE ROOM ON STACK TO HANDLE ERROR JMP FILERY ; ERROR NAMCK1: INC BACKSW ;SET SWITCH TO INHIBIT BACKUP NOSWIT: CMP LKBKPI+6,LKBKPO+6 ;DIFFERENT DEVICES? BNE FILOP1 CMPB LKBKPI+5,LKBKPO+5 ;-CHECK IF DEVICE UNITS THE SAME BNE FILOP1 ;-NO CMP FNBKPI,FNBKPO BNE FILOP1 CMP FNBKPI+2,FNBKPO+2 BNE FILOP1 CMP FNBKPI+4,FNBKPO+4 BNE FILO_SPSP,FILNAM+4 MOV INLB+6,-(R6) MOV #FILNAM,-(R6) MOV #1,-(R6) ;ENTER DEVICE NAME IN BUFFER UTILITY FDTR35: MOV TRNBLK,-(R6) MOV #FILEXT,-(R6) ;PUT BLOCK NUMBER IN BUFFER MOV #5,-(R6) UTILITY FDTR40: MOV #TRNBLK,-(R6) MOV #INLB,-(R6) ;TRAN IN THE BLOCK TRAN FDTR42: INC CTLCT CMP CTLCT,CTLCK ;WILL THE PAGE OVERFLOW? BHI FDTR45 ;YES - BRANCH CLR R5 MOV #HDRBUF,R4 JSR PC,FDWRT ;OUTPUT HEADER AND MOV #FLNMBF,R4 ;DEVICE/BLOCK I.D. JSR PC,FDWRT MOV #INLB,-(R6) ;WAIT FOR TRAN` THE VALUE (@O.CAD)-($NR) O.REL9: JSR 5,O.CADV BR O.DCD1 ; ;C PROCESSING. ; A. REXP;C WAS TYPED- PRINT THE VALUE OF REXP AND STORE IN $C ; B. ;C WAS TYPED- SAME AS C., BUT REXP=0 BY DEFAULT ; C. NO SEMICOLON HAS BEEN TYPED-REPLACE R4 WITH THE CONTENTS OF $C O.CNS: TSTB O.SMFD ;WAS A SEMICOLON TYPED? BNE O.CNS1 ;REXP TYPED PRIOR TO ; CASE A MOV O.CNST,R4 ;CASE C. REPLACE R4 WITH ($C) MOV #1,R2 BR O.SCAN ;RETURN TO SCAN MORE O.CNS1: MOV #'=,R0 ;PRINT VALUE MOV #2,O.BW JSR 5aLB,-(R6) ;RELEASE DEVICE DELETE LBRXLF: MOV #LLLB,-(R6) RELEASE LBRX15: TST CMEB ;ERROR DEVICE INITED? BEQ LBRX20 ;WON'T BE ON RESTART MOV #CMEB,-(R6) RELEASE LBRX20: JMP LIB00 NAMCLR: MOV #LXERFL,R2 ;ROUTINE TO CLEAR FILE NAME BUFFER ;FOR ERROR REPORTING CLR (R2)+ CLR (R2)+ CLR (R2)+ CLR (R2)+ CLR (R2) RTS PC ; ***** DELETE OBJECT MODULES ***** LBDLOM: JSR PC,LBILIN ;INITIALIZE INPUT LIBR JSR PC,LBOLIN ;INITIALIZE OUTPUT LIBR LIBD00: MOV #ILLB+10,R4bP1 CMP FNBKPI+6,FNBKPO+6 ;UIC THE SAME? BNE FILOP1 ;NO BRANCH; IF YES THEN I/O FILES INC FILSAM ;ARE ;THE SAME, SET FILE SAME FLAG MOV #EDI,FNBKPO ;CREATE A TEMPORARY OUTPUT MOV #TOR,FNBKPO+2 ;FILE UNTIL EXIT TIME MOV #TMP,FNBKPO+4 ;NAME PRIMARY OUTPUT FILE EDITOR.TMP MOV #233,FNBKPO+10 ;SET PROTECTION MOV #FNBKPO,-(SP) ;SEARCH DIRECTOR MOV #LKBKPO,-(SP) ;TO SEE IF EDITOR, TMP EMT 14 ;ALREADY EXISTS TST (SP)+ ;DOES IT ALREADY EXITS? BIT #200,(SP)+ ;IF YES CAN NOT OPEN c WATE MOV TRNWC,INBUF+4 ;SET UP INBUF BYTE COUNT ASL INBUF+4 JSR PC,@TMPR1 ;GO TO PROPER SUBROUTINE CLR FDCOUNT ;RESET BYTE COUNTER INC TRNBLK ;GET NEXT SEQUENTIAL BLOCK CMP TRNBLK,MAXBLK ;TRAN THIS ONE TOO? BLOS FDTR35 ;YES - BRANCH MOV (R6)+,R0 ;GET NEXT SWITCH ADDRESS BR FDTR00 ;GO INVESTIGATE FDTR45: MOV #PGCBUF,R4 JSR PC,FDWRT ;OUTPUT A FORM FEED CLR CTLCT ;CLEAR ITEM COUNT BR FDTR42 FDTR55: JMP FDEX00 ;GO EXIT TRNBLK: .WORD 0 .WORD INDTA TRNWC: .WORD 0,4,0 FILDd,O.FTYP MOV R5,R0 JSR 5,O.CADV MOV R5,O.CNST ;AND STORE IN $C O.H1: O.CNS2: JMP O.DCD ; ;MINUS PROCESSING ; O.MIN: INCB O.MINS ;SET MINUS FOUND SWITCH ON JMP O.DCD1 .EOT ;END OF TAPE #1 ; ;REPRINT LAST OPENED ADDRESS RELATIVELY. ; A. N! WAS TYPED--PRINT N,((O.CAD)-($NR)) ; B. ! WAS TYPED. FIND THE CLOSEST BIAS LESS THAN ; (O.CAD) AND USE ITS "N" -- THEN DO CASE A. ; O.RCMP: MOV #'=,R0 ;FIRST TYPE A "=" JSR 5,O.FTYP ;WAS N TYPED IN? TST R2 ;WAS N TYPED IN? e LIBD05: MOV @R4,R5 ;MORE SWITCHES ON INPUT LIBR? BEQ LIBD25 ;NO - BRANCH ASL R5 ADD R5,R4 ;POINT AT SWITCH MOV R4,-(R6) ADD #2,@R6 ;SAVE POINTER TO NEXT ONE CMP #DELOM,@R4 ;IS IT /D? BEQ LIBD15 ;YES - BRANCH LIBD10: MOV (R6)+,R4 BR LIBD05 ;TRY NEXT ONE LIBD15: ASR R5 DEC R5 ;ANY VALUES? BNE LIBD20 ;YES - BRANCH LIBD17: MOV #2,R0 ;SET INPUT LIBRARY CODE JMP LBSWER ;SWITCH ERROR LIBD20: JSR PC,LBPKOM ;PACK NAME OF OBJ MOD JSR PC,LIBDOM ;CALL DELETE OBJECT MODULE DECfYET BEQ FILOP1 ;BRANCH IF NO MOV #FNBKPO,-(SP) ;YES MOV #LKBKPO,-(SP) ;PREPARE TO DELETE IT EMT 21 ;DELETE IT FILOP1: MOV #FNBKPO,-(SP) ;AT THIS POINT MOV #LKBKPO,-(SP) ;OPEN CAN PROCEED EMT OPENCD ;OPEN THE PRIMARY OUTPUT TST NOINFG ;ANY PRIM INPUT? BNE FILOP2 ;NO MOV #FNBKPI,-(SP) ;IF YES SET UP MOV #LKBKPI,-(SP) ;FOR AN OPEN EMT OPENCD ;OPEN THE PRIMARY INPUT FILOP2: TST LKBKSI+6 ;ANY SUBSIDIARY INPUT? BEQ FILM1 ;NO MOV #LKBKSI,-(SP) ;PUSH LINE BLOCK FOR AN INPUT EMgES: ;FILE DESCRIPTOR MAXBLK: .WORD 0 CTLCK: .WORD 0 CTLCT: .WORD 0 TMPR1: .WORD 0 ;SAVE R1 LNSAV: ;SAVE FILE LENGTH BLKSV: .WORD 0 ;SAVE LOW BLOCK .EOT ;END OF TAPE 1 CHAIN: ;BLOCK CHAIN LISTING CHN1: MOV #CHNBUF,R4 JSR PC,FDWRT ;COMPLETE THE HEADER MOV #2,TRNWC ;TRAN ONE WORD MOV CURBUF,R1 ADD #STLIN,R1 MOV #INDTA,R0 ;INITIALIZE BUFFER POINTERS BIT #100,FILDES ;THIS FILE CONTIGUOUS? BNE CH03 ;YES - BRANCH CH00: TST @R0 ;THIS A LINK TO BLOCK ZERO? BEQ CH10 ;YEhBNE O.RCM1 ;BRANCH IF YES JSR 5,O.LOC ;ELSE, FIND BEST N CMP R0,#-1 ;IF REL.REG FOUND, BNE O.RCM2 ; BR; ELSE-- MOV O.CAD,R0 ;PRINT ADDR IN ABS. JSR 5,O.CADV BR O.DCD1 O.RCM2: ADD #060,R0 ;CONVERT N TO ANSCII JSR 5,O.FTYP ;TYPE N MOV #',,R0 ;TYPE COMMA JSR 5,O.FTYP MOV O.BW,-(SP) ;SAVE O.BW MOV #2,O.BW ;ARTIFCIALLY SET MODE FOR WORDS MOV O.XXY,R0 ;TYPE RELATIVE AMOUNT O.RCM3: JSR 5,O.CADV MOV (SP)+,O.BW ;RESTORE MODE BR O.DCD1 ;EXIT TO SCAN ROUTINE O.RCM1: MOV R4,R0 ;i R5 ;MORE OM'S TO DELETE? BNE LIBD20 ;YES - BRANCH BR LIBD10 LIBD25: TSTB LBPASS ;DONE YET? BNE LIBD40 ;YES - BRANCH LIBD30: JSR PC,LBDWRT ;FINISH WRITING DIRECTORY INCB LBPASS ;SET PASS TWO BR LIBD00 LIBD40: TSTB LBEOF BEQ LIBD45 CLRB LBEOF ;CLEAR EOF INDICATOR JMP LBEXIT ;GO TO EXIT PROCESSOR LIBD45: JSR PC,LBNXTE ;FINISH WRITING OBJ MODULES BR LIBD40 ; ***** CREATES A LIBRARY ***** LBCRT: JSR PC,LBOLIN ;INITIALIZE OUTPUT LIBRARY LBCL00: TST IFLB+10 ;ANY SWIjT INITCD ;YES-INIT IT MOV #FNBKSI,-(SP) ;SET UP TO OPEN MOV #LKBKSI,-(SP) ;SECONDARY INPUT EMT OPENCD ;OPEN SECONDARY INPUT FILM1: TST LKBKSO+6 ;ANY SECONDARY OUTPUT? BEQ ED3A ;NO BRANCH MOV #LKBKSO,-(SP) ;PUSH LINK BLOCK FOR AN INIT EMT INITCD ;YES-INIT IT MOV #FNBKSO,-(SP) ;SET UP TO OPEN MOV #LKBKSO,-(SP) ;SECONDARY INPUT EMT OPENCD ;OPEN SECONDARY INPUT ED3A: CLR KIBBC ;CLEAR BYTE COUNT OF KEYBOARD INPUT BUFFER ED4: CMP LKBKPO+6,#LSP ;TEST FOR LOW SPEED PUNCH BNE kS - DONE CH03: JSR PC,OCTAL ;PUT BLOCK NUMBER CMPB (R1)+,(R1)+ ;IN BUFFER JSR PC,LINFUL ;IS THE LINE FULL? BLO CH05 ;NO - BRANCH MOV CURBUF,R4 ;WRITE IT, CHANGE BUFFERS, JSR PC,FDWRT ;AND RESET POINTERS JSR PC,FLIP MOV CURBUF,R1 ADD #STLIN,R1 CH05: BIT #100,FILDES ;IS FILE CONTIGUOUS? BEQ CH07 ;NO - BRANCH INC -(R0) ;LINK IS NEXT BLOCK DEC LNSAV ;DONE YET? BEQ CH10 ;YES - BRANCH BR CH03 ;KEEP GOING CH07: MOV -(R0),TRNBLK ;GET NEXT LINK IN MOV #TRNBLK,-(R6) MOV #INLB,lGET N. THIS CODE SIMULATES O.LOC ASL R0 ;TIMES 2 FOR INDEXING MOV O.CAD,O.XXY SUB O.RELT(R0),O.XXY ;COMPUTE DIFFERENCE ASR R0 ;RESTORE N. BR O.RCM2 ;PRINT RESULTS ; ;FILL MEMORY WORDS. LIMITS ARE THE SEARCH LIMITS. ; O.FILL: MOV #2,O.BW ;SET MODE TO "OPEN WORD" O.FIL1: TSTB O.SMFD ;DONT REACT UNLESS ";" WAS TYPED BEQ O.ERR ;IF NOT TYPED, ERROR. MOV O.CNST, R0 ;ACTUAL VALUE MOV O.LOW,R4 ;USE SEARCH LIMITS FOR MOV O.HI,R3 ; FILL LIMITS. JSR 5,O.ST BR O.DCD ;EXIT ; ;INITImTCHES ON INPUT FILE? BEQ LBCL02 ;NO - BRANCH CLR R0 ;SET INPUT FILE CODE JMP LBSMER ;SEMANTIC ERROR LBCL02: JSR PC,LBININ ;INITIALIZE INPUT FILE LBCL03: TSTB LBPASS ;PASS ONE? BNE LBCL05 ;NO - BRANCH JSR PC,LBCDIR ;CREATE DIRECTORY ENTRY BR LBCL10 LBCL05: JSR PC,LBCOM ;CREATE OBJ MODULE ENTRY LBCL10: JSR PC,LBINFL ;READ NEXT LINE OF INPUT FILE BITB #EOF,3(R3) ;EOF? BNE LBCL13 ;YES - BRANCH CMP #GSD,LBFDTA ;INPUT FILE ERROR IF FIRST BEQ LBCL03 ;LINE IS NOT A GSD LINE JMP LBnBEGIN6 ;BRANCH IF NOT LSP JSR R5,TPCHON ;GIVE HIM CHANCE TO TURN OFF PUNCH CLR KIBBC ;CLEAR KEYBOARD INPUT BUFFER BYTE COUNT BEGIN6: MOV #102,-(SP) ;PUSH CODE FOR EMT EMT 41 ;GET THE TOP OF THE MONITOR MOV (SP)+,BEG ;PUT MONITOR TOP IN BEGIN ADD #1500,BEG ;SET UP BEGINNING OF PGB MOV #CKUPP,-(SP) ;SET UP ADDRESS FOR MOV #2,-(SP) ;A RESTART. COMMAND REQUEST ADDRESS EMT 41 ;RESTART SET EMT CLRB MBF ;CLR BUFFER MOVE FLAG MOV BEG,DOT ;DOT=BEG MOV DOT,END ;DOT=END MOV DOT,MRK ;o-(R6) TRAN MOV #INLB,-(R6) WATE BR CH00 CH10: JSR PC,DATA ;ANY DATA TO OUTPUT? BEQ CH15 ;NO - BRANCH MOV CURBUF,R4 JSR PC,FDWRT ;OUTPUT IT CH15: RTS PC OCTCNV: ;OCTAL CONVERSION MOV #OCTBUF,R4 JSR PC,FDWRT MOV #INDTA,R0 OC00: JSR PC,FDIC ;PUT COUNTER IN LINE OC05: SUB #2,INBUF+4 ;MORE DATA IN INPUT BUFFER? BLT OC10 ;NO - BRANCH JSR PC,OCTAL CMPB (R1)+,(R1)+ ;LEAVE TWO BLANKS JSR PC,LINFUL ;IS THE LINE FULL? BLO OC05 ;NO - BRANCH MOV CURBUF,R4 JSR PC,FDWRpALIZE MEMORY BYTES. ; O.INIT: MOV #1,O.BW BR O.FIL1 ;LET O.FILL DO THE WORK ; COMMAND DECODER - ODT11X ; ALL REGISTERS MAY BE USED (R0-R5), O.ERR: MOV #'?,R0 ; ? TO BE TYPED JSR 5,O.FTYP ; OUTPUT ? O.DCD: CLR O.BW ;CLOSE ALL JSR 5,O.CRLS ;TYPE * O.DCD3: CLRB O.SMFD ;SEMICOLON FOUND FLAG CLRB O.CMFD ;COMMA FOUND FLAG CLRB O.MINS ;MINUS SIGN FOUND FLAG O.DCD2: CLR R3 ;R3 IS A SAVE REGISTER FOR R2 CLR R5 ;R5 IS A SAVE REGISTER FOR R4 O.DCD1: CLR R4 ; R4 CONTAIqIFER LBCL13: JSR PC,LBINRL ;GET NEXT INPUT FILE TST IFLB+6 ;IS THERE ONE? BNE LBCL00 ;YES - BRANCH TSTB LBPASS ;WAS THIS PASS TWO? BEQ LBCL15 ;NO - BRANCH JMP LBEXIT ;GO TO EXIT PROCESSOR LBCL15: INCB LBPASS ;SET PASS TWO MOV #LBFDTA,R3 MOV #EDIR,@R3 ;WRITE THE END DIR LINE MOV #2,-(R3) CMP -(R3),-(R3) JSR PC,LBOTWR JSR PC,LBRST ;RESET INPUT AND OUTPUT PTRS JSR PC,LBIRL ;GET FIRST INPUT FILE SEMANTICS BR LBCL00 ; ***** INSERTS OR REPLACES OBJECT MODULES ***** rMARK=DOT MOV BEG,R6 ;STACK BEGINS AT PAGE BUFFER MOV #OPERSO,FNBKSO-4;SET UP ERROR RETURN FOR SECONDARY OUTPUT TST -(R6) ;BUMP THE STACK JMP CKX ;GET AN EDITOR COMMAND ;EDITOR STACK: .WORD 0 ;LINK BLOCKS .WORD 0 ;ERROR RETURN FROM INIT LKBKPI: .WORD 0 ;POINTER TO DDB .RAD50 /I1 / ;"I1" DATASET LOGICAL NAME FOR PRIMARY INPUT .WORD 3 ;INPUT DEVICE UNIT .WORD 0 ;INPUT DEVICE NAME .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 LKBKPO: .WORD 0 .RAD50 /O1sT ;WRITE THE LINE JSR PC,FLIP ;CHANGE BUFFERS JSR PC,MODE ;READING UNFORMATTED BIN? BR OC00 ;YES - BRANCH MOV CURBUF,R1 ADD #STLIN,R1 BR OC05 OC10: CMP #-1,INBUF+4 ;WAS THERE AN "ODD" BYTE? BNE OC15 ;NO - BRANCH ADD #3,R1 ;INSERT "ODD" BYTE JSR PC,BYTES BR OC15 OC12: MOV CURBUF,R4 JSR PC,FDWRT ;WRITE THIS LINE OC13: TST TMPR1 ;IN TRAN MODE? BNE OC14 ;YES - BRANCH MOV #EOFBUF,R4 ;WRITE EOF LINE JSR PC,FDWRT OC14: RTS PC OC15: BITB #EOF,INBUF+3 ;END OF FILE? BEQ OC2tNS THE CONVERTED OCTAL CLR R2 ; R2 IS THE NUMBER FOUND FLAG O.SCAN: JSR 5,O.GET ;GET A CHAR, RETURN IN R0 O.SCN1: CMP #'0,R0 ;COMPARE WITH ASCII 0 BHI O.CLGL ;CHECK LEGALITY IF NON-NUMERIC CMP #'7,R0 ;COMPARE WITH ASCII 7 BLO O.CLGL ;CHECK LEGALITY IF NOT OCTAL BIC #177770,R0 ;CONVERT TO BCD ASL R4 ; MAKE ROOM ASL R4 ; IN ASL R4 ; R4 ADD R0,R4 ;PACK THREE BITS IN R4 INC R2 ;R2 HAS NUMERIC FLAG BR O.SCAN ; AND TRY AGAIN O.CLGL: CLR R1 ;CLEAR INDEX O.LGL1: CMPB Ru LBRORI: JSR PC,LBILIN ;INITIALIZE INPUT LIBR JSR PC,LBOLIN ;INITIALIZE OUTPUT LIBR LBRI: MOV #1,R0 ;INITIALIZE POSITION POINTER LBRI00: JSR PC,LBININ ;INITIALIZE INPUT FILE LBRI03: MOV #IFLB+10,R4 MOV (R4)+,R5 ;ANY SWITCHES ON INPUT FILE? BNE LBRI05 ;YES - BRANCH CLR R0 ;SET INPUT FILE CODE JMP LBSMER ;SEMANTIC ERROR LBRI05: DEC R5 ;ANY VALUES? BNE LBRI10 ;YES - BRANCH CMP #RPLACE,@R4 ;IS IT /R? BEQ LBRI15 ;YES - BRANCH CMP #INSERT,@R4 ;IS IT /I? BNE LBRI30 ;NO - SWITCv / ;"O1" DATASET LOGICAL NAME FOR PRIMARY OUTPUT .WORD 1 .WORD 0 ;OUTPUT DEVICE NAME .WORD 0 LKBKSI: .WORD 0 .RAD50 /I2 / ;DATASET LOGICAL NAME FOR SECONDARY INPUT .WORD 1 .WORD 0 .WORD 0 LKBKSO: .WORD 0 .RAD50 /O2 / ;DATASET LOGICAL NAME FOR SECONDARY OUTPUT .WORD 1 .WORD 0 .WORD 0 LKBKCI: .WORD 0 .RAD50 /CMI/ ;DATASET LOGICAL NAME FOR # INPUT .WORD 1 .WORD KBD ;DEFAULT TO KEYBOARD .WORD 0 LKBKCO: .WORD 0 .RAD50 /CMO/ ;DATASET LOGICAL NAME FOR LOG OUTPUT .WORw5 ;NO - BRANCH OC20: JSR PC,DATA ;ANY DATA TO OUTPUT? BEQ OC13 ;NO - BRANCH BR OC12 OC25: JSR PC,FDRD ;READ MORE INPUT MOV #INDTA,R0 JSR PC,MODE ;READING UNFMTED BINARY? BR OC05 ;YES - BRANCH JSR PC,DATA ;ANYTHING TO OUTPUT? BEQ OC00 ;NO - BRANCH MOV CURBUF,R4 JSR PC,FDWRT ;WRITE OUT JSR PC,FLIP ;CHANGE BUFFERS BR OC00 BYTCNV: ;BYTE CONVERSION MOV #BYTBUF,R4 JSR PC,FDWRT MOV #INDTA,R0 BC00: JSR PC,FDIC ;PUT COUNTER IN LINE BC05: DEC INBUF+4 ;MORE DATA?x0,O.LGCH(R1) ;DO THE CODES MATCH? BEQ O.LGL2 ;JUMP IF YES INC R1 ; SET INDEX FOR NEXT SEARCH CMP R1,#O.CLGT ;IS THE SEARCH DONE? BHIS O.ERR ; OOPS! BR O.LGL1 ;RE-LOOP O.LGL2: TSTB O.MINS ;IF MINUS WAS NOT TYPED BEQ O.LGL4 ;DO NOT NEGATE K NEG R4 ;OTHERWISE, TAKE 2'S COMPLEMENT. O.LGL4: TSTB O.CMFD ;IF A COMMA NOT TYPED, BEQ O.LGL3 ;SKIP NEXT INSTRUCTION. ADD O.BIAS,R4 ;OTHERWISE, ADD RELOC. BIAS TO (R4) O.LGL3: CLRB O.MINS ;REINITIALIZE MINUS-TYPED SWITCH FOR NXT SCAN AyH ERROR MOV #-1,R4 ;NO VALUE MEANS INSERT AT END LBRI07: JSR PC,LIBIOM ;CALL INSERT MODULE BR LBRI20 LBRI10: TST (R4)+ CMP #INSERT,@R4 ;IS IT /I:V? BNE LBRI30 ;NO - SWITCH ERROR MOV -(R4),-(R6) MOV #2,-(R6) ;CONVERT DECIMAL ASCII TO UTILITY ;BINARY AND PLACE IN R4 MOV (R6)+,R4 ;IF ZERO, SET R4 = 1 BNE LBRI13 INC R4 LBRI13: TST (R6)+ BR LBRI07 LBRI15: JSR PC,LIBROM ;CALL REPLACE MODULES LBRI20: MOV #LBFLBF,R3 JSR PC,LBINFL ;READ NEXT INPUT LINE BITB #EOF,3(R3) ;END OF FILzD 1 .WORD KBD ;DEFAULT TO KEYBOARD .WORD 0 LKBKPC: .WORD 0 .RAD50 /PCI/ ;DATASET LOGICAL NAME FOR * INPUT .WORD 1 .WORD KBD .WORD 0 LKBKSB: .WORD 0 .RAD50 /CDI/ ;DATASET LOGICAL NAME FOR COMMAND DATA INPUT .WORD 1 .WORD KBD ;DEFAULT TO KEYBOARD ; ;FILE BLOCKS .WORD 0 ;OPEN ERROR RETURN .WORD 4 FNBKPI: .WORD 0 .WORD 0 .WORD 0 ;PACKED FILE &EXT (3WORDS) .WORD 0 ;UID .WORD 0 ;MODE AND PROTECTION .WORD 0 .WORD 2 ;OPEN FOR OUTPUT FNBKPO: .WORD 0 { BLT BC10 ;NO - BRANCH JSR PC,BYTES INC R1 JSR PC,LINFUL ;IS THE LINE FULL? BLO BC05 ;NO - BRANCH MOV CURBUF,R4 JSR PC,FDWRT ;WRITE OUT THIS LINE JSR PC,FLIP ;CHANGE OUTPUT BUFFERS JSR PC,MODE ;READING UNFMTED BINARY? BR BC00 ;YES - BRANCH MOV CURBUF,R1 ADD #STLIN,R1 BR BC05 BC10: BITB #EOF,INBUF+3 ;END OF FILE? BNE OC20 ;YES - BRANCH JSR PC,FDRD ;READ MORE INPUT MOV #INDTA,R0 JSR PC,MODE ;READING UNFMTED BINARY? BR BC05 ;YES - BRANCH JSR PC,DATA ;ANYTHING |SL R1 ;MULTIPLY BY TWO JMP @O.LGDR(R1) ;GO TO PROPER ROUTINE O.LGDR: O.SEMI ; ; SEMICOLON O.WRD ; / OPEN WORD O.BYT ; \ OPEN BYTE -BACK SLASH O.CRET ; CARRIAGE RETURN CLOSE O.REGT ; $ REGISTER OPS O.GO ; G GO TO ADDRESS K O.OP1 ; MODIFY, CLOSE, OPEN NEXT O.ORPC ; "BACKARROW" OPEN RELATED, INDEX - PC (BACK ARROW) O.OLD ; < RETURN TO OLD SEQUENCE AND OPEN O.BACK ; ^ OPEN PREVIOUS (UP ARROW) O.COMM ; , COMMA. SEPERATES REL.REG. FROM INCREMENT O.OFS}E? BNE LBRI23 ;YES - BRANCH CMP #GSD,LBFDTA ;INPUT FILE ERROR IF FIRST BEQ LBRI03 ;LINE IS NOT A GSD LINE JMP LBIFER LBRI23: JSR PC,LBINRL ;GET NEXT INPUT FILE TST IFLB+6 ;ANYTHING THERE? BNE LBRI00 ;YES - BRANCH TSTB LBPASS ;WAS THIS PASS TWO? BEQ LBRI25 ;NO - BRANCH JMP LIBD40 ;EXIT THROUGH LBDLOM LBRI25: JSR PC,LBRST ;RESET I/O POINTERS MOV #LBSEM,-(R6) SEMANTICS ;GET PAST THE INPUT LIBR TST (R6)+ ;TO THE FIRST INPUT FILE JSR PC,LBIRL ;SET UP FIRST INPUT FILE JSR ~ .WORD 0 .WORD 0 .WORD 0 .WORD 233 .WORD 0 .WORD 2 ;OPEN FOR OUTPUT FNBKSO: .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 233 .WORD 0 .WORD 4 ;OPEN FOR INPUT FNBKSI: .WORD 0 .WORD 0 .WORD 0 .WORD 0 ;UID .WORD 0 ;MODE AND PROTECTION .WORD 0 .WORD 4 FNBKON: .WORD 0 ;FOR RENAMING PURPOSES-STORES OLD NAME .WORD 0 .WORD 0 .WORD 0 .WORD 233 ;THE FOLLOWING ARE ED11'S CANNED MESSAGES MSG1: 5 0 5 .BYTE CR,LF,0 .ASCII /#/ .BYTE VERTAB .BYTE 0 .EVENTO OUTPUT? BEQ BC00 ;NO - BRANCH MOV CURBUF,R4 JSR PC,FDWRT JSR PC,FLIP ;CHANGE OUTPUT BUFFERS BR BC00 RADCNV: ;RADIX 50 UNPACK CONVERSION MOV #RADBUF,R4 JSR PC,FDWRT MOV #INDTA,R0 RC00: JSR PC,FDIC ;PUT COUNTER IN LINE RC05: SUB #2,INBUF+4 ;MORE INPUT DATA? BLT RC10 ;NO - BRANCH JSR PC,RADIX ADD #5,R1 JSR PC,LINFUL ;IS THE LINE FULL? BLO RC05 ;NO - BRANCH MOV CURBUF,R4 JSR PC,FDWRT ;WRITE THIS LINE JSR PC,FLIP ;CHANGE OUTPUT BUFFERS JSR PC,MODE ;READINGT ; O OFFSET O.WSCH ; W SEARCH WORD O.EFF ; E SEARCH EFFECTIVE ADDRESS O.BKPT ; B BREAKPOINTS O.PROC ; P PROCEED O.ORAB ; @ OPEN RELATED, ABSOLUTE O.ORRB ; > OPEN RELATED, REL. BRANCH O.SNGL ; S SINGLE INSTRUCTION MODE O.REL ; R RELOCATION PROCESSING O.CNS ; C CONSTANT REGISTER PROCESSING O.MIN ; - MINUS, NEGATES NUMBER TYPED IN O.FILL ; F FILL MEMORY WORDS FROM THE CONSTANT REGISTER O.INIT ; I INITIALIZE MEMORY BYTES FROM THE CONSTANT REGISTER O.RCMP ; ! PC,LBDWRT ;FINISH WRITING DIRECTORY INCB LBPASS ;SET PASS TWO BR LBRI LBRI30: CLR R0 ;SET INPUT FILE CODE JMP LBSWER ; ***** LISTS THE DIRECTORY ***** LBLIST: TST LLLB+6 ;LISTING REQUESTED? BNE LBLST ;YES - BRANCH JMP LIB00 LBLST: TST OLLB+6 ;IF AN OUTPUT LIBRARY, LIST BEQ LBLS05 ;IT, OTHERWISE LIST INP LIBR MOV #OLLB,-(R6) INIT MOV #OLLB,-(R6) STATUS ;CAN OUTPUT LIBR DEVICE BIT #INOK,(R6)+ ;SUPPORT INPUT? BNE LBLS00 ;YES - BRANCH MOV #2247,LBERNO ;SET L MSG3: 20 0 20 .ASCII /EDIT-11 V006A/ .BYTE CR,LF .EVEN MSG4: 12 0 12 .ASCII /LSP OFF? / .BYTE VERTAB .BYTE 0 .EVEN MSG5: 3 0 3 .BYTE CR .BYTE '*,VERTAB .EVEN MSG15: 50 0 MSG15N: 0 MSG15M: 0 .=.+123 .EVEN ;ED11 JUMP TABLE ;ARRANGED BY COMMAND JTBL: ZBEG ;BEGINNING ZEND ;END ZMARK ZREAD INSRT FORMF VERIFY UNSAVE WHOLE GET TRAILER NEXT SAVE POSITION CHANGE DELETE WRITE LIST ADV KILL XCHANGE UNFMTED BINARY? BR RC00 ;YES - BRANCH MOV CURBUF,R1 ADD #STLIN,R1 BR RC05 RC10: CMP #-1,INBUF+4 ;WAS THERE AN "ODD" BYTE? BNE RC15 ;NO - BRANCH CLR TMPBUF MOVB @R0,TMPBUF ;TREAT AS 0-BYTE MOV #TMPBUF,R0 JSR PC,RADIX RC15: BITB #EOF,INBUF+3 ;END OF FILE? BEQ RC20 ;NO - BRANCH JMP OC20 ;EXIT THROUGH OCTAL CONV. RC20: JSR PC,FDRD ;READ MORE INPUT MOV #INDTA,R0 JSR PC,MODE ;READING UNFMTD BINARY? BR RC05 ;YES - BRANCH JSR PC,DATA ;ANYTHING TO OUTPUT? BEQ RC00 ;NO -PRINT CURRENT OPENED ADDRESS IN REL. FORM O.MOD ; X RETYPE OPENED CONTENTS, MOD40 O.ALF ; A ACCEPT ASCII INPUT O.CTLC ; ^C EXIT TO MONITOR O.LGL = .-O.LGDR ;LGL MUST EQUAL 2X CHLGT ALWAYS ; SEMI-COLON PROCESSOR O.SEMI: MOV R2,R3 ;A SEMI-COLON HAS BEEN RECEIVED MOV R4,R5 ;NUMERIC FLAG TO R3, CONTENTS TO R5 INCB O.SMFD ;SET SEMICOLON FOUND FLAG CLRB O.CMFD ;RESET COMMA FOUND FLAG BR O.DCD1 ;GO BACK FOR MORE ; PROCESS / AND \ - OPEN WORD OR BYTE ;INPUT - IF R2 IS NON-ZERO A NEW ISTING ERROR JSR PC,NAMCLR ;CLEAR FILE NAME BUFFER JMP LBSW07 LBLS00: CMP (R6)+,(R6)+ ;CLEAN UP STACK MOV #OLLB,-(R6) RELEASE TST RENMFG ;WAS NAME CHANGED ? BNE LBLS03 ;YES - BRANCH MOV #OLFB+12,R3 MOV #ILFB+12,R0 MOV -(R3),-(R0) ;WRITE PERTINENT STUFF IN MOV -(R3),-(R0) ;OUTPUT LIBRARY FILE AND MOV -(R3),-(R0) ;LINK BLOCKS TO INPUT MOV -(R3),-(R0) ;LIBRARY FILE AND LINK MOV -(R3),-(R0) ;BLOCKS, RESPECTIVELY LBLS03: MOV OLLB+2,ILLB+2 MOVB OLLB+5,ILLB+5 MOV OLLB+6,ILLB+6 ZJMP EJTBL: EWRITE ;JUMP TABLE TO E-ROUTINES EWHOLE EPOSITION EMACRO EQUIT EREAD EOPEN EFILE EANY: .BYTE 'W .BYTE 'H .BYTE 'P EPOS: .BYTE 'M .BYTE 'X .BYTE 'R .BYTE 'O .BYTE 'F EBEG: .BYTE '0 BCTBL: .BYTE 'B ;CMD=1 .BYTE 'E ;CMD=2 .BYTE 'M ;CMD=3 .BYTE 'R ;CMD=4 .BYTE 'I ;CMD=5 .BYTE 'F ;CMD=6 .BYTE 'V ;CMD=7 NOARG: .BYTE 'U ;CMD=10 .BYTE 'H ;CMD=11 .BYTE 'G ;CMD=12 .BYTE 'T ;CMD=13 .BYTE 'N ;CMD=14 .BYTE 'S ;CMD=15 POSARG: .BY BRANCH MOV CURBUF,R4 JSR PC,FDWRT ;WRITE OUT JSR PC,FLIP ;CHANGE OUTPUT BUFFERS BR RC00 ASCCNV: MOV #ASCBUF,R4 ;ASCII CONVERSION JSR PC,FDWRT MOV #INDTA,R0 AS00: JSR PC,FDIC ;INSERT LINE COUNTER AS05: DEC INBUF+4 ;ANY MORE DATA? BLT AS10 ;NO - BRANCH JSR PC,ASCII ;ENTER IN LINE BIT #1,R1 ;DONE TWO YET? BNE AS05 ;NO - BRANCH ADD #6,R1 ;UPDATE BUFFER POINTER JSR PC,LINFUL ;IS THE LINE FULL? BLO AS05 ;NO - BRANCH MOV CURBUF,R4 ;WRITE THE BUFFER JSR PC,FDWRT JSREXP HAS BEEN TYPED IN ;INPUT - -ADDRESS OF WORD TO BE OPENED IS IN R4 O.WRD: MOV #2,O.BW ;OPEN WORD BR O.WB1 O.BYT1: ROL R4 ;GET THE ADDRESS BACK O.BYT: MOV #1,O.BW ;OPEN BYTE O.WB1: TST R2 ;GET VALUE IF R2 IS NON-ZERO BEQ O.WRD1 ;SKIP OTHERWISE - REOPEN PREVIOUS LOCATION MOV R4,O.DOT ;PUT VALUE IN DOT MOV R4,O.CAD ; ALSO IN CAD O.WRD1: CMP #1,O.BW ;CHECK BYTE MODE BEQ O.WRD2 ;JUMP IF BYTE MOV O.CAD,R4 ASR R4 ;MOVE ONE BIT TO CARRY BCS O.BYT1 ;JUMP IF ODD ADDRESS MOV @LBLS05: JSR PC,LBILIN ;INITIALIZE INPUT LIBRARY CLRB LBPASS ;SET PASS ONE CLR LBEDIR ;CLEAR EDIR & EOF FLAGS MOV #LLLB,-(R6) INIT ;INIT LISTING DEVICE MOV #LLFB,-(R6) MOV #LLLB,-(R6) OPEN ;OPEN LISTING FILE MOV #LLFB,R2 LBLS10: MOV #LBLSTN,R4 ;UNPACK NAME AND PLACE JSR PC,LBERNM ;IN LISTING TITLE BUFFER LBLS15: MOV #LBLSTB,R3 MOV #1,R0 ;INITIALIZE POSITION COUNTER LBLS20: JSR PC,LBLSWT ;WRITE THIS LINE MOV #56.,R5 ;INITIALIZE LINE COUNTER LBLS25: MOV R0,-(R6) MOV #LBLSNTE 'P ;CMD=16 .BYTE 'C ;CMD=17 .BYTE 'D ;CMD=20 .BYTE 'W ;CMD=21 .BYTE 'L ;CMD=22 .BYTE 'A ;CMD=23 .BYTE 'K ;CMD=24 .BYTE 'X ;CMD=25 CALPH: .BYTE 'J ;CMD=26 .BYTE 060 .BYTE 061 .BYTE 062 .BYTE 063 .BYTE 064 .BYTE 065 .BYTE 066 .BYTE 067 .BYTE 070 .BYTE 071 CSPEC: .BYTE SLASH .BYTE PLUS .BYTE ATSIN .BYTE NEG LUKUP: .BYTE CR .BYTE LF .BYTE SPACE CTERM: .BYTE FF ECTBL: .BYTE CTRLX .EVEN ;THE FOLLOWING VRBLS ARE ZEROABLE CMD: .WORD 0 ;HR PC,FLIP ;CHANGE OUTPUT BUFFERS JSR PC,MODE ;READING UNFMTED BINARY? BR AS00 ;YES - BRANCH MOV CURBUF,R1 ADD #STLIN,R1 BR AS05 AS10: BITB #EOF,INBUF+3 BEQ AS15 ;BRANCH IF NOT EOF JMP OC20 AS15: JSR PC,FDRD ;READ SOME MORE INPUT MOV #INDTA,R0 JSR PC,MODE ;READING UNFMTED BINARY? BR AS05 ;YES - BRANCH JSR PC,DATA ;ANY DATA TO OUTPUT? BEQ AS00 ;NO - BRANCH MOV CURBUF,R4 JSR PC,FDWRT ;WRITE OUT JSR PC,FLIP ;CHANGE OUTPUT BUFFERS BR AS00 FDBLBF: ;BLANKS THE BO.CAD,R0 ;GET CONTENTS OF WORD BR O.WRD3 O.WRD2: MOVB @O.CAD,R0 ;GET CONTENTS OF BYTE O.WRD3: JSR 5,O.CADV ;GO GET AND TYPE OUT @CAD CMP #1,O.BW ;CHECK IF BYTE MODE. BNE O.DCD3 ;IF NOT WE'RE DONE. ELSE: MOVB #'=,R0 ;TYP "=" AND THEN THE ASCII BYTE JSR 5,O.FTYP MOVB @O.CAD,R0 JSR 5,O.FTYP MOVB #' ,R0 JSR 5,O.FTYP JMP O.DCD3 ;GO BACK TO DECODER ; PROCESS CARRIAGE RETURN O.CRET: JSR PC,O.CLSE ;CLOSE LOCATION O.DCDA: JMP O.DCD ;RETURN TO DECODER O.ERR3: JMP O.ERR ; INTERMEDO,-(R6) ;PUT NUMBER IN LIST BUFFER MOV #3,-(R6) UTILITY MOV LBDATA+2,-(R6) MOV #LBLSNM,-(R6) MOV #1,-(R6) ;UNPACK OBJECT MODULE NAME UTILITY ;AND PUT IN LISTING BUFFER MOV LBDATA+4,-(R6) MOV #LBLSNM+3,-(R6) MOV #1,-(R6) UTILITY LBLS30: MOV #LBLSBF,R3 JSR PC,LBLSWT ;WRITE THIS LINE DEC R5 ;DECREASE AVAILABLE LINES JSR PC,LBSKPE ;SKIP TO NEXT ENTRY TSTB LBEDIR ;AT END? BNE LBLS35 ;YES - BRANCH TSTB LBEOF ;END OF FILE? BNE LBLS40 ;YES - DONE TST R5 ;PAGE COMPLETEDOLDS THE COMMAND NUMBER NUM: .BYTE 0 ;NUMBER OF CHARS IN THIS COMMAND BELFLG: .BYTE 0 SPARE: .BYTE 0 MBF: .BYTE 0 ;IF SET, THEN BUFFER IS MOVED .EVEN ERFLG: .BYTE 0 ;IF SET, THEN AN ERROR OCCURRED TEMP0: .BYTE 0 RIPFLG: .WORD 0 ;READ IN PROGRESS FLAG FOR ^P ERCDWD: .WORD 0 ;HOLDS ERROR NUMBER YNKFLG: .BYTE 0 ;YANK IN PROGRESS EHFLG: .BYTE 0 ;EDIT WHOLE IN PROGRESS TMPSTO: .WORD 0 ;WORD OF TEMPORARY STORAGE IN2: .BYTE 0 .EVEN MODE: .BYTE 0 ;1=TEXT MODE, 0=CMD MODE IN1: .BYTE 0UFFER CLR -(R6) MOV CURBUF,R3 ADD #6,R3 BLBF00: MOV #SPSP,(R3)+ ;MOVE IN TWO BLANKS INC @R6 CMP @R6,#36. ;DONE 72. BYTES YET? BLO BLBF00 ;NO - BRANCH TST (R6)+ RTS PC MODE: CMPB INBUF+2,#3 ;UNFORMATTED BINARY MODE? BEQ MODE00 ;YES - BRANCH ADD #2,@R6 ;BUMP CALLERS PC MODE00: RTS PC FDWRT: ;WRITES THE BUFFER CMP R4,CURBUF ;WRITING A PRIMARY OUTPUT? BNE FDWRT2 ;NO - BRANCH MOV #OUTSIZ,4(R4) ;RESET BYTE COUNT MOV R4,R3 ;MOVE THE ADD #OUTSIZ+4,R3 ;BIATE HELP ; PROCESS , OPEN NEXT WORD O.OLD: INCB O.SEQ ;SET FLAG TO LATER RESTORE CAD O.OP1: TST O.BW ; RECEIVED O.ERR2: BEQ O.ERR3 ;ERROR IF NOTHING IS OPEN JSR PC,O.CLSE ;CLOSE PRESENT CELL TST O.SEQ ;SHOULD CAD BE RESTORED? BEQ O.OP5 ;BRANCH IF NOT MOV O.DOT,O.CAD ;RESTORE PREVIOUS SEQUENCE CLRB O.SEQ ;RESET FLAG; NO LONGER NEEDED O.OP5: ADD O.BW,O.CAD ;GENERATE NEW ADDRESS O.OP2: MOV O.CAD,O.DOT ;INITIALIZE DOT O.OP2A: JSR 5,O.CRLF ; MOV O.BW,-(SP) ;SAVE B? BNE LBLS25 ;NO - BRANCH MOV #LBPGND,R3 ;WRITE A FORM FEED JSR PC,LBLSWT MOV #LBLSHB,R3 ;OUTPUT HEADER OF NEXT PAGE BR LBLS20 LBLS35: TSTB LBPASS ;IS THIS PASS TWO? BNE LBLS40 ;YES - DONE TST LLLB+10 ;ANY SWITCHES? BEQ LBLS40 ;NO - BRANCH CMP #OBJLST,LLLB+12 ;IS IT /LO? BEQ LBLS50 ;YES - BRANCH MOV #LLLB,-(R6) CLOSE ;CLOSE LISTING FILE MOV #6,R0 ;REPORT ERROR JMP LBSWER LBLS40: MOV #ILLB,-(R6) CLOSE ;CLOSE FILES MOV #LLLB,-(R6) CLOSE TSTB LBDEL ;DELETE IN THRUB: .WORD 0 TOHERE: .WORD 0 FROMA: .WORD 0 MINUS: .WORD 0 ;IF SET, THEN OPERATION IS TOWARD 0 SVDOT: .WORD 0 ;HOLDS OLD DOT PNCHON: .WORD 0 ;IF SET, THEN LSP IS ON COUNT: .WORD 0 ;NUMBER OF CHARS IN THIS INSERT TMPDOT: .WORD 0 CIB: 0 ;COMMAND INPUT BUFFER .=.+124 TIB: 0 ;TEXT INPUT BUFFER .=.+124 ENDTIB: 0 OVRFLO: .WORD 0 ;THE FOLLOWING VRBLS ARE NON ZEROABLE .EVEN MAX: .WORD 0 ;MAXIMUM PGB ADDRESS BEFORE TROUBLE LAST: .WORD 0 ;LAST WORD OF FREE CORE FOR PGB ACK TO THE END OF THE DATA FDWRT1: CMP #SPSP,-(R3) BNE FDWRT2 MOV #CRLF,@R3 BR FDWRT1 FDWRT2: MOV R4,-(R6) MOV #OUTLB,-(R6) WRITE ;WRITE AND WAIT INC R5 ;BUMP LINE COUNTER CMP R5,#62. ;THIS THE 62.ND LINE? BNE FDWR05 ;NO - BRANCH FDWR00: MOV #PGCBUF,R4 ;WRITE A FORM FEED JSR PC,FDWRT MOV #HDRBUF,R4 ;WRITE NEXT PAGE HEADER JSR PC,FDWRT MOV #4,R5 FDWR05: RTS PC FDRD: ;READS NEXT INPUT MOV #INBUF,-(R6) MOV #INLB,-(R6) READ ;READ AND WAIT MOV #INLB,-(R6) WATEW MOV #2,O.BW ;SET TO TYPE FULL WORD ADDRESS MOV O.CAD,R0 ;NUMBER TO TYPE JSR 5,O.RORA ; CHECK FORMAT MOV @SP,O.BW ;RESTORE BW CMP #1,(SP)+ ;IS IT BYTE MODE? BEQ O.OP3 ;JUMP IF YES MOV #'/,R0 ;TYPE A / O.OP4: JSR 5,O.FTYP BR O.WRD1 ;GO PROCESS IT O.OP3: MOV #'\,R0 ;TYPE A \ BR O.OP4 ; PROCESS ^, OPEN PREVIOUS WORD O.BACK: TST O.BW ; ^ RECEIVED BEQ O.ERR2 ;ERROR IF NOTHING OPEN JSR PC,O.CLSE SUB O.BW,O.CAD ;GENERATE NEW ADDRESS BR O.OP2 ;GO DO THE REST ; B HANDPUT LIBRARY BEQ LBLS43 ;NO - BRANCH MOV #ILFB,-(R6) MOV #ILLB,-(R6) DELETE LBLS43: MOV #ILLB,-(R6) RELEASE ;RELEASE DEVICES MOV #LLLB,-(R6) RELEASE LBLS45: JMP LIB00 LBLS50: INCB LBPASS ;SET PASS TWO CLRB LBEDIR ;CLEAR END DIR FLAG JSR PC,LBINRD ;GET FIRST OBJ MOD LINE MOV #LBPGND,R3 JSR PC,LBLSWT ;OUTPUT A FORM FEED MOV #LBOBJ,R2 ;OUTPUT OBJ HEADER BR LBLS10 LBEXIT: ;EXIT PROCESSOR MOV #OLLB,-(R6) CLOSE ;CLOSE OUTPUT LIBRARY TST ILLB+6 ;INPUT LIBRARY OPEN ABSLAST:.WORD 0 ;LAST WORD OF FREE CORE FOR ANYTHING BEG: .WORD 0 ;FIRST ADDR OF PGB END: .WORD 0 ;HOLDS END OF PAGE NL: .WORD 0 ;NUM OF BYTES AVAILABLE FOR AN INSERT MRK: .WORD 0 ;ADDRESS OF MARK MKFLG: .BYTE 0 ;IF SET, THEN USER SET MARK .EVEN LSTCHR: .WORD 0 ;LAST CHARACTER TYPED BACKSW: .WORD 0 ;WHEN ONE,INHIBITS BACKUP FILE FORMATION FILSAM: .WORD 0 ;MEANS EDITOR.TMP BEING USED NOINFG: .WORD 0 ;NO PRIMARY INPUT FILE GIVEN ENDFLG: .WORD 0 ;OUTPUT FILE ALREADY CLOSED .EVEN RTS PC FDIC: MOV CURBUF,R1 ;INSERTS COUNT ADD #6,R1 ;POSITION TO BEGINNING OF ;OUTPUT BUFFER MOV FDCOUNT,-(R6) MOV R1,-(R6) MOV #5,-(R6) UTILITY ADD #7,R1 ;SET UP FOR "E" FLAG MOV R1,R4 ;SAVE THIS ADDRESS BITB #FATER,INBUF+3 ;ANY ERRORS? BEQ FDIC00 ;NO - BRANCH JSR PC,MODE ;IN A FORMATTED MODE? BR FDIC00 ;NO - BRANCH MOVB #'E,@R1 ;INSERT ERROR FLAG FDIC00: TSTB (R1)+ ;BUMP BUFFER POINTER INC FDCOUNT ;AND COUNTER JSR PC,MODE ;IN UNFORMATTED MODE? BR LER - SET AND REMOVE BREAKPOINTS O.BKPT: MOV #O.TRTC,R0 ASL R4 ;MULTIPLY NUMBER BY TWO TST R3 BEQ O.REMB ;IF R3 IS ZERO GO REMOVE BREAKPOINT ASR R5 ;GET ONE BIT TO CARRY BCS O.ERR1 ;BADNESS IF ODD ADDRESS ASL R5 ;RESTORE ONE BIT ADD #O.ADR1,R4 TST R2 BNE O.SET1 ;JUMP IF SPECIFIC CELL O.SET: CMP R0,@R4 ;IS THIS CELL FREE? BEQ O.SET1 ;JUMP IF YES CMP R4,#O.BKP+O.ADR1 ;ARE WE AT THE END OF OUR ROPE BHIS O.ERR1 ;YES, THERE IS NOTHING FREE TST (R4)+ ;INCREMENT BY TWO B? BEQ LBEX10 ;NO - BRANCH MOV #ILLB,-(R6) CLOSE ;CLOSE INPUT LIBRARY TST RENMFG ;WAS THE NAME CHANGED? BEQ LBEX00 ;NO - BRANCH MOV #ILFB,-(R6) MOV #ILLB,-(R6) ;/DL IS IMPLIED DELETE MOV #ILFB,-(R6) MOV #OLFB,-(R6) MOV #OLLB,-(R6) RENAME BR LBEX05 LBEX00: TSTB LBDEL ;/DL ON INPUT LIBR? BEQ LBEX05 ;NO - BRANCH (ASSUME /S) MOV #ILFB,-(R6) MOV #ILLB,-(R6) DELETE CLRB LBDEL ;INTERFACE TO LISTING LBEX05: MOV #ILLB,-(R6) RELEASE ;RELEASE INPUT LIBR DEVICE LBEX10 ; SUBROUTINE BEG ;THIS ROUTINE MOVES DOT TO ;THE BEGINNING OF THE BUFFER ZBEG: MOV BEG,DOT RTS R5 ; SUBROUTINE ZEND ;MOVE DOT TO THE END OF ;THE CURRENT PAGE ZEND: MOV END,DOT RTS R5 ; SUBROUTINE MARK ;THIS ROUTINE SETS MARK TO DOT ZMARK: MOV DOT,MRK INCB MKFLG ;SET FLG RTS R5 ;SUBROUTINE OPEN EOPEN: TST LKBKSI BEQ EOPEN1 MOV #LKBKSI,-(SP) EMT CLOSCD MOV #FNBKSI,-(SP) MOV #LKBKSI,-(SP) EMT OPENCD RTS R5 EOPEN1: CLR -(SP) MOV #1317,-(SP)FDIC10 ;YES - BRANCH MOV #INBUF+3,R0 JSR PC,BYTES ;OUTPUT STATUS BYTE TST -(R0) ;POINTER MODE BYTE TSTB (R1)+ ;LEAVE A SPACE JSR PC,BYTES ;OUTPUT MODE BYTE CMPB (R1)+,(R0)+ ;LEAVE A SPACE ;AND POINTER THE BYTE COUNT WORD JSR PC,OCTAL ;OUTPUT THE BYTE COUNT WORD BITB #EOF,INBUF+3 ;EOF BIT SET? BNE FDIC06 ;YES, DON'T WRITE BYTE COUNT ;WE ARE NOW 34(8) BYTES FROM MOV R1,R4 ;THE HEAD OF THE BUFFER SUB #34,R4 ;POINT TO THE HEAD OF IT JSR PC,FDWRT ;WRITE THIS LINE FDIC06R O.SET O.SET1: CMP R4,#O.BKP+O.ADR1 BHI O.ERR1 ;ERROR IF TOO LARGE MOV R5,@R4 ;SET BREAKPOINT BR O.DCDA ;RETURN O.REMB: TST R2 BEQ O.RALL ;GO REMOVE ALL CMP R4,#O.BKP BHI O.ERR1 ;JUMP IF NUMBER TOO LARGE MOV R0,O.ADR1(R4) ;CLEAR BREAKPOINT CLR O.CT(R4) ;CLEAR COUNT ALSO O.DCDB: BR O.DCDA O.RALL: CLR R4 MOV #O.TRTC,R0 O.RM1: CMP R4,#O.BKP+2 ;ALL DONE? BHI O.DCDA ;JUMP IF YES MOV R0,O.ADR1(R4) ;RESET BKPT MOV #TRT,O.UIN(R4) ;RESET CONTENTS OF TABLE CLR O.CT(R4) ;CLEAR C: MOV #OLLB,-(R6) RELEASE ;RELEASE OUTPUT LIBR DEVICE JMP LBLIST ;CHECK FOR LISTING LIBROM: ;REPLACES AN OBJECT MODULE ;INPUT: FIRST LINE OF MODULE ;IN LBFLBF, FIRST LINE OF A ;DIRECTORY OR OBJ MODULE IN ;LINBUF LBRM00: MOV #LBFDTA+2,R4 ;POINT AT NAME MOV #LBDATA+2,R1 CMP (R1)+,(R4)+ BNE LBRM10 CMP (R1)+,(R4)+ ;THIS THE RIGHT ENTRY? BNE LBRM10 ;NO-BRANCH JSR PC,LBSKPE ;SKIP THIS ENTRY TSTB LBPASS ;CREATE DIRECTORY ENTRY? BEQ LBRM05 ;YES - BRANCH JSR IOT TST (SP)+ JMP BERR ;SUBROUTINE ADVANCE ;ROUTINE TO ADVANCE DOT BY ARG LINES ;INPUTS ;ARG ;DOT ;OUTPUTS:NEW DOT ;OLD DOT IN TMP4 ADV: MOV DOT,TMP4 ;SAVE OLD DOT TST ARG ;WHAT IS ARG? BGE FLF ;GE MOV END,DOT ; INC ARG BEQ ADVSL ADVAT: MOV MRK,DOT ;@A....SET DOT TO MARK ADVSL: CLR ARG ;/A....SET DOT TO END RTS R5 ;SUBROUTINE JUMP ;ROUTINE TO ADVANCE DOT BY ARG CHARS ;INPUTS :ARG ; :DOT ;OUTPUTS:NEW DOT ZJMP: TS: JSR PC,FLIP ;CHANGE BUFFERS MOV CURBUF,R1 ADD #STLIN,R1 ;SET UP FOR FIRST ITEM RTS PC FDIC10: INC FDCOUNT ;SET UP FOR BYTE COUNT TSTB -(R4) ;BACK UP TO APPEND 0 MOVB #'0,@R4 RTS PC FLIP: ;FLIPS THE OUTPUT BUFFERS CMP CURBUF,#OBUF1 BNE FLIP00 MOV #OBUF2,CURBUF BR FLIP05 FLIP00: MOV #OBUF1,CURBUF FLIP05: JSR PC,FDBLBF ;BLANK THE NEW BUFFER RTS PC DATA: ;CHECKS FOR OUTPUT DATA MOV CURBUF,R3 ADD #STLIN,R3 CMP R1,R3 RTS PC LINFUL: ;CHECKS FOR OUTPUTOUNT TST (R4)+ ;INCREMENT BY TWO BR O.RM1 ; PROCESS O, COMPUTE OFFSET O.OFST: CMP #2,O.BW ;CHECK WORD MODE BNE O.ERR1 ;ERROR IF NOT CORRECT MODE MOV #' ,R0 ;TYPE ONE BLANK JSR 5,O.FTYP ; AS A SEPARATOR TST R3 ;WAS SEMI-COLON TYPED? BEQ O.ERR1 ;NO, CALL IT AN ERROR O.OF2: SUB O.CAD,R5 ;COMPUTE DEC R5 DEC R5 ; 16 BIT OFFSET MOV R5,R0 JSR 5,O.CADV ;NUMBER IN R0 - WORD MODE MOV R5,R0 ASR R0 ;DIVIDE BY TWO BCS O.OF1 ;ERROR IF ODD CMP #-200,R0 ;COMPARE WITH -200 PC,LBCOM RTS PC LBRM05: JSR PC,LBCDIR RTS PC LBRM10: JSR PC,LBNXTE TST LBEDIR ;END DIR OR EOF IS A BEQ LBRM00 ;MODULE NOT FOUND ERROR MOV #LBFDTA+2,R2 BR LBDM10 LIBDOM: ;DELETES AN OBJECT MODULE ;INPUT: FIRST LINE OF A DIR ;ENTRY OR OBJ MODULE IN LINBUF ;MODULE NAME TO DELETE IN ;LBTNAM AND LBTNAM+2 ;OUTPUT: FIRST LINE OF FOLLOWING ;DIR OR OBJ MODULE IN LINBUF ;OR LBEDIR, OR LBEOF SET TST LBEDIR ;ANY MORE LEFT TO DELETE? BNE LBDM07 ;NOT ARG ;WHAT IS ARG? BLE ADV ;LE MOV DOT,TMP4 TST MINUS ;WHAT IS MINUS? BEQ JMP3 ;ER---FWD JMP1: SUB ARG,DOT ;BACKWARD-MOVE DOT ARG CHARS TO LEFT CMP DOT,TMP4 BHIS JMP2 CMP DOT,BEG ;GO PAST BEG? BHI JMP4 ;NO JMP2: MOV BEG,DOT ;YES...DOT=END RTS R5 JMP3: ADD ARG,DOT ;MOVE DOT ARG CHARS TO RIGHT CMP DOT,TMP4 BLOS JMP5 CMP END,DOT ;MOVE PAST END-1? BHI JMP4 ;NO JMP5: MOV END,DOT ;YES---DOT=END JMP4: RTS R5 .EOT ; ; ;DOT=ADR+1 OF PROPER LF ;BACKWARD ARG BUF FULL MOV CURBUF,R3 ADD #78.,R3 CMP R1,R3 RTS PC DEFAULT=OCTCNV ;DEFAULT FORMAT IF NOT SPECIFIED OUTSEM: MOV #2,CMBUFH ;ASK FOR OUTPUT MOV #OUTLB,SEM+2 MOV #OUTFB,SEM+4 ;INTERFACE TO CSI2 OTSM00: MOV #SEM,-(R6) CSI2 BIT #SWER,@R6 ;TOO MANY SWITCHES? BEQ OTSM10 ;NO - BRANCH OTSM05: JMP FDSWER ;SWITCH ERROR OTSM10: TST OUTLB+6 ;ANYTHING THERE? BNE OTSM15 ;YES - BRANCH BIT #1,(R6)+ ;MORE TO COME? BEQ OTSM00 ;YES - BRANCH CLR R1 ;SET TO EXIT RTS PC BGT O.OF1 ;DO NOT TYPE IF OUT OF RANGE CMP #177,R0 ;COMPARE WITH +177 BLT O.OF1 ;DO NOT TYPE IF OUT OF RANGE DEC O.BW ;SET TEMPORARY BYTE MODE JSR 5,O.CADV ;NUMBER IN R0 - BYTE MODE INC O.BW ;RESTORE WORD MODE O.OF1: JMP O.DCD3 ;ALL DONE O.ERR1: JMP O.ERR ;INTERMEDIATE HELP .EOT ;END OF TAPE #2 ; ; SEARCHES - $MSK HAS THE MASK ; $MSK+2 HAS THE FWA ; $MSK+4 HAS THE LWA O.EFF: INC R1 ;SET EFFECTIVE SEARCH BR O.WDS O.WSCH: CLR R1 ;SET WORD SEARCH O.WDS: TST R - ERROR LBDM00: MOV #LBDATA+2,R1 CMP (R1)+,LBTNAM BNE LBDM05 CMP (R1)+,LBTNAM+2 ;THIS THE RIGHT ENTRY? BEQ LBDM20 ;YES - BRANCH LBDM05: JSR PC,LBNXTE ;GET NEXT ENTRY BR LIBDOM LBDM07: MOV #LBTNAM,R2 LBDM10: MOV #2245,LBERNO ;INTERFACE TO SWITCH ERROR LBDM15: MOV #LXERFL,R4 JSR PC,LBERNM ;ENTER MODULE NAME CLR LXEREX ;IN ERROR BUFFER CLR LXEREX+2 ;AND CLEAR EXTENT CLR -(R6) MOV LBERNO,-(R6) JMP LBSE00 ;GO PROCESS ERROR LBDM20: JSR PC,LBSKPE ;SKIP THIS ENTRY RTS PC LIBI+1 LF CHARACTERS FLF: ADD MINUS,ARG ;INC ARG IF BACKWARDS MOV #1,-(LS) ;SAVE OLD DOT FLF1: TST MINUS ;DIRECTION? BEQ FLF3 ;FORWARD ;BACKWARD FLF2: CMPB -(DOT),#14 ;COMPARE AGAINST FORM FEED BHI FLF2 ;NOT A TERMINATOR CMPB @DOT,#12 ;COMPARE AGAINST LINE FEED BLO FLF2 ;BRANCH IF NOT A TERMINATOR FLF2A: CMP DOT,BEG ;YES---IS IT THE ONE ;AT THE BEG OF PGB? BHI FLF8 ;NO ;MODIFY INCREMENT MOV BEG,DOT ;YES---DOT=BEG BR FLF7 FLF3: CMPB (DOT)+,#14 ;COMPARE AGAINSTOTSM15: TST (R6)+ ;CLEAN UP STACK MOV #DEFAULT,R1 ;SET DEFAULT OUTPUT FORMAT MOV #OUTLB+10,R2 ;POINT AT SWITCHES DEC (R2)+ ;ARE THERE ANY? BLT OTSM40 ;NO - BRANCH OTSM20: CMP #OC,@R2 ;IS IT OCTAL? BNE OTSM25 ;NO - BRANCH MOV #OCTCNV,R1 BR OTSM40 OTSM25: CMP #BC,@R2 ;IS IT BYTES? BNE OTSM30 ;NO - BRANCH MOV #BYTCNV,R1 BR OTSM40 OTSM30: CMP #AC,@R2 ;IS IT ASCII? BNE OTSM35 ;NO - BRANCH MOV #ASCCNV,R1 BR OTSM40 OTSM35: CMP #MC,@R2 ;IS IT RADIX UNPACK? BNE OTSM05 ;NO3 ;CHECK FOR OBJECT FOUND BEQ O.ERR1 ;ERROR IF NO OBJECT MOV #2,O.BW ;SET WORD MODE MOV O.MSK+2,R2 ;SET ORIGIN MOV O.MSK,R4 ;SET MASK COM R4 O.WDS2: CMP R2,O.MSK+4 ; IS THE SEARCH ALL DONE? BHI O.DCDB ; YES MOV @R2,R0 ; GET OBJECT TST R1 ;NO BNE O.EFF1 ;BRANCH IF EFFECTIVE SEARCH MOV R0,-(SP) MOV R5,R3 ;EXCLUSIVE OR BIC R5,R0 ; IS DONE BIC (SP)+,R3 ; IN A VERY BIS R0,R3 ; FANCY MANNER HERE BIC R4,R3 ;AND RESULT WITH MASK O.WDS3: BNE O.WDS4 ;RE-LOOP IF NO MOM: ;INSERTS AN OBJECT MODULE ;INPUT: FIRST LINE OF OBJECT ;MODULE IN LBFLBF ;LINBUF CONTAINS FIRST LINE ;OF A DIRECTORY ENTRY, FIRST ;LINE OF AN OBJECT MODULE, ;THE END DIR LINE IF LBEDIR ;IS SET, OR ANYTHING IF ;LBEOF IS SET LBIM00: TSTB LBEDIR ;ENDDIR IN LINBUF? BNE LBIM05 ;YES - BRANCH TSTB LBEOF ;AT END OF FILE? BEQ LBIM20 ;NO - BRANCH LBIM05: TST R4 ;INSERT AT END? BLT LBIM10 ;YES - BRANCH CMP R0,R4 ;THIS THE PROPER POSITION? BNE FORM FEED BHI FLF3A ;BRANCH IF NOT TERMINATOR CMPB -1(DOT),#12 ;COMPARE AGAINST LINE FEED BHIS FLF7 ;BRANCH IF TERMINATOR FOUND ;THIS THE ONE AT THE FLF3A: CMP END,DOT ;END OF PGB OR AT END ;OF CURRENT PG? BHI FLF3 MOV END,DOT ;DOT=END FLF7: CLR @LS FLF8: DEC ARG BNE FLF1 ADD (LS)+,DOT RTS R5 ;SUBROUTINE EXIT EQUIT: TST LKBKSO BEQ EQUITA MOV #LKBKSO,-(SP) EMT CLOSCD MOV #LKBKSO,-(SP) EMT RLSECD EQUITA: TST LKBKSI BEQ EQUITB MOV #LKBKSI,-(SP) EM - ERROR MOV #RADCNV,R1 OTSM40: TSTB CHN ;IF IN CHAIN MODE, THEN BEQ OTSM42 ;OVERRIDE ANY OUTPUT SWITCH MOV #CHAIN,R1 OTSM42: MOV #OUTLB,-(R6) INIT ;INIT OUTPUT DEVICE MOV #OUTFB,-(R6) MOV #OUTLB,-(R6) OPEN ;OPEN OUTPUT FILE JSR PC,FDBLBF JSR PC,FLIP ;BLANK BOTH BUFFERS CLR FDCOUNT ;INITIALIZE THE COUNTER OTSM45: RTS PC OCTAL: MOV (R0)+,-(R6) ;ALL THE FOLLOWING GET OCT00: MOV R1,-(R6) ;INPUT AS FOLLOWS: MOV #5,-(R6) ; RO POINTS TO DATA EMT 42 ; R1 POINTS TO BUFFEATCH MOV R4,-(SP) ;REGISTERS R2,R4, AND R5 ARE SAFE MOV R1,-(SP) ;SAVE R1 MOV R2,-(SP) ;SAVE R2 MOV R3,-(SP) JSR 5,O.CRLF MOV R2,R0 ;GET READY TO TYPE JSR 5,O.RORA ; CHECK FORMAT MOV #'/,R0 ;SLASH TO R0 JSR 5,O.FTYP ;TYPE IT MOV @R2,R0 ;GET CONTENTS JSR 5,O.CADV ; TYPE CONTENT MOV (SP)+,R3 MOV (SP)+,R2 ;RESTORE R2 MOV (SP)+,R1 ;RESTORE R1 MOV (SP)+,R4 ; RESTORE R4 ;HAS CTRL/U BEEN STRUCK? JSR R5,O.CU ;CHECK FOR ^U O.WDS4: TST (R2)+ ;INCREMENT TO NEXT CELL AND BLBIM30 ;NO - BRANCH LBIM10: TSTB LBPASS ;PASS ONE? BNE LBIM15 ;NO - BRANCH JSR PC,LBCDIR ;CREATE DIRECTORY RTS PC LBIM15: JSR PC,LBCOM ;CREATE OBJECT MODULE RTS PC LBIM20: TST R4 ;INSERT AT END? BLT LBIM25 ;YES - BRANCH CMP R0,R4 ;THIS THE PROPER POSITION? BEQ LBIM10 ;YES - BRANCH BGT LBIM30 ;BRANCH IF OUT OF ORDER LBIM25: JSR PC,LBNXTE ;GET NEXT ENTRY & TRY AGAIN BR LBIM00 LBIM30: MOV #LBFDTA+2,R2 LBIM35: MOV #2244,LBERNO ;OUT OF ORDER ERROR BR LBDM15 LBNXTE: ;WRITET CLOSCD MOV #LKBKSI,-(SP) EMT RLSECD EQUITB: TST ENDFLG BNE EQUIT1 ;YES TST NOINFG ;ANY PRIMARY INPUT TO COPY? BEQ ELOOP ;YES MOV BEG,DOT ;NO-WE HAVE TO WRITE PAGE BUFFER MOV #-1,ARG ;ONTO OUTPUT DEVICE BEFORE CLOSING JSR R5,WRITE ;WRITE WHOLE BUFER BR EQUIT2 ELOOP: INC EXFLAG CLRB ERFLG JSR R5,NEXT TSTB ERFLG BEQ ELOOP JSR R5,NEXT ;ONE MORE NEXT IN CASE NO FF CLR EXFLAG MOV #LKBKPI,-(SP) EMT CLOSCD ;CLOSE PRIMARY INPUT EQUIT2: MOV #LKBKPO,-(SP) EMT CLOSCD ;R SLOT ADD #6,R1 ;ALL BUMP R1 BY DATA LENGTH RTS PC BYTES: CLR -(R6) MOVB (R0)+,@R6 MOV #TMPBUF,-(R6) MOV #5,-(R6) EMT 42 MOVB TMPBUF+3,(R1)+ MOVB TMPBUF+4,(R1)+ MOVB TMPBUF+5,(R1)+ RTS PC RADIX: MOV (R0)+,-(R6) RAD00: MOV R1,-(R6) MOV #1,-(R6) EMT 42 ADD #3,R1 RTS PC ASCII: MOVB @R0,@R1 BICB #200,@R1 CMPB @R1,#40 BLO ASC00 CMPB @R1,#137 ;IS CHARACTER PRINTABLE? BHI ASC00 ;NO - BRANCH MOVB (R0)+,(R1)+ ;ENTER IN BUFFER RTS PC ASC00: MOVB #137,(R1)+R O.WDS2 ; RETURN O.EFF1: CMP R0,R5 ; IS (X)=K? BEQ O.WDS3 ;TYPE IF EQUAL MOV R0,R3 ;(X) TO R3 ADD R2,R3 ;(X)+X INC R3 INC R3 ;(X)+X+2 CMP R3,R5 ;IS (X)+X+2=K? BEQ O.WDS3 ;BRANCH IF EQUAL BIC #177400,R0 ;WIPE OUT EXTRANEOUS BITS MOVB R0,R0 CCC ASL R0 ;MULTIPLY BY TWO INC R0 INC R0 ADD R2,R0 ;ADD PC CMP R0,R5 ;IS THE RESULT A PROPER REL. BRANCH? BR O.WDS3 ; PROCESS G - GO O.GO: TSTB O.SMFD ;WAS ";" TYPED? BEQ O.ERR1 ;BR IF NOT TYPED TST R3 ;WAS K; S OUT CURRENT ENTRY ;INPUT: FIRST LINE OF A ;DIRECTORY ENTRY OR OBJ MODULE ;IN LINBUF ;OUTPUT: FIRST LINE OF NEXT ;DIRECTORY OR OBJ MODULE IN ;LINBUF, OR EDIR, EOF FLAG ;SET IF NONE. EMOD IS ;WRITTEN, EDIR IS NOT MOV #LBDATA,R1 MOV #LINBUF,R3 LBNX00: JSR PC,LBOTWR ;WRITE OUT THIS LINE JSR PC,LBINRD ;GET NEXT LINE CMP #EGSD,@R1 ;THIS AN END GSD LINE? BNE LBNX03 ;NO - BRANCH TSTB LBPASS ;GO TO EXIT ROUTINE BEQ LBNX05 ;IF PASS ONE LBNX03: CMP #EMOCLOSE PRIMARY OUTPUT JSR R5,RNAMIT ;RENAME FILES IF NECESSARY EQUIT1: MOV #LKBKPO,-(SP) EMT RLSECD ;RELEASE OUTPUT FILE TST NOINFG ;ANY PRIMARY INPUT? BNE EQUIT3 ;NO MOV #LKBKPI,-(SP) ;RELEASE INPUT FILE EMT RLSECD EQUIT3: MOV #LKBKSB,-(SP) EMT RLSECD MOV #LKBKPC,-(SP) EMT RLSECD MOV #LKBKCO,-(SP) EMT RLSECD MOV #LKBKCI,-(SP) EMT RLSECD JMP START ;BEGIN AGAIN EXFLAG: .WORD 0 EQUIT4: CLR -(SP) MOV #1317,-(SP) IOT TST (SP)+ JMP BERR ;SU ;ENTER DEFAULT CHARACTER INC R0 ;BUMP POINTER RTS PC ; ; NO INPUT FILE ; FDNOIN: JSR PC,FILCR ;FILE CLEANUP CLR -(R6) MOV #2206,-(R6) ;NO INPUT FILE IOT JSR PC,RINIT ;SET INITIAL CONDITIONS JMP FLDP05 ;GO INPUT COMMAND STRING AGAIN ; ; TOO MANY INPUT FILES ; FDINER: JSR PC,FILCR ;FILE CLEANUP CLR -(R6) MOV #2205,-(R6) IOT JSR PC,RINIT ;SET INITIAL CONDITIONS JMP FLDP05 ;GO INPUT COMMAND STRING AGAIN ; ; SWITCH ERROR ; FDSWER: JSR PC,FILCR ;FILE CLEANUP CLR -(R6) TYPED? BEQ O.ERR1 ; TYPE ? IF NOT MOVB #O.BKP+3,O.P ;CLEAR PROCEED ASR R5 ;CHECK LOW ORDER BIT BCS O.ERR1 ;ERROR IF ODD NUMBER ASL R5 ;RESTORE WORD MOV R5,O.UPC ;SET UP NEW PC MOVB #O.STM,ST ;SET HIGH PRIORITY JSR 5,O.RSTT ;RESTORE TELETYPE O.TBIT: CLRB O.T ;CLEAR BIS #O.TBT,O.UST ; BOTH T-BIT FLAGS TSTB O.S ;SEE IF WE NEED A T BIT BNE O.GO2 ;IF NOT GO NOW BIC #O.TBT,O.UST ;SET TH T BIT O.GO1: JSR 5,O.RSB ;RESTORE BREAKPOINTS O.GO2: JSR 0,O.RSR ;RESTORE REGISD,@R1 ;THIS AN END MODULE LINE? BNE LBNX00 ;NO - BRANCH LBNX05: JSR PC,LBOTWR ;WRITE THIS LINE AND READ NEXT LBNX10: JSR PC,LBINRD CMP #EDIR,@R1 ;END OF DIRECTORY? BNE LBNX20 ;NO - BRANCH INCB LBEDIR ;SET END DIR FLAG LBNX15: INC R0 ;UPDATE POSITION POINTER RTS PC LBNX20: BITB #EOF,3(R3) ;END OF FILE? BEQ LBNX15 ;NO - BRANCH INCB LBEOF ;SET END OF FILE FLAG BR LBNX15 LBSKPE: ;SKIPS (I.E., DOES NOT WRITE OUT) ;CURRENT DIR OR OBJ MODULE ;INPUT: FIRST LINE OF DIR EBROUTINE ENDFILE EFILE: TST ENDFLG ;EF ALREADY DONE? BNE EQUIT4 ;YES-ERROR TST NOINFG ;ANY PRIMARY INPUT? BNE EFILE1 ;NO MOV #LKBKPI,-(SP) EMT CLOSCD ;CLOSE PRIMARY INPUT EFILE1: MOV #LKBKPO,-(SP) EMT CLOSCD INC ENDFLG JSR R5,RNAMIT ;ANY RENAMING? RTS R5 ;SUBROUTINE RENAME IT RNAMIT: TST FILSAM BEQ RNAM1 ;I/O FILE NAMES THE SAME? TST BACKSW ;NO-SEE IF BACKUP DESIRED BEQ RNAM2 ;YES MOV #FNBKPI,-(SP) ;NO BACKUP-DELETE INPUT MOV #LKBKPI,-(SP) EMT DELTCD BR MOV #2203,-(R6) ;TOO MANY SWITCHES IOT JSR PC,RINIT ;SET INITIAL CONDITIONS JMP FLDP05 ;GO CLOSE FILES AND INPUT ;COMMAND STRING ; ; INPUT DEVICE ERROR ; FDEVER: JSR PC,FILCR ;FILE CLEANUP CLR -(R6) MOV #2256,-(R6) ;ERROR INDICATOR IOT JSR PC,RINIT ;SET INITIAL CONDITIONS JMP FLDP05 ;REQUEST COMMAND STRING ; ; DETECTED READ ERROR ; FDFTER: MOV INBUF+2,-(R6) ;STATUS CODE FDFT00: JSR PC,FILCR ;FILE CLEANUP BIC #377,(R6) SWAB (R6) MOV #2202,-(R6) IOT JSR PC,RINIT ;TERS MOV O.UST,-(SP) ; AND STATUS MOV O.UPC,-(SP) ; AND PC NOP ; CHANGE TO HALT FOR DEBUGGING MOV O.UST,-(SP) ; MOV IN STATUS FIRST W/O T BIT BIC #O.TBT,(SP) ; SO INTERRUPTS CAN HAPPEN BEFORE MOV (SP)+,ST ; RTT TURNS ON THE T BIT. O.RTIT: RTI ; CHANGED TO RTT WHEN RUNNING ON /45 ; PROCESS P - PROCEED ; ONLY ALLOWED AFTER A BREAKPOINT O.PROC: TSTB O.SMFD ;WAS ";" TYPED? BEQ O.ERR1 ;BR IF NOT TYPED MOVB O.P,R0 TSTB R0 ;CHECK LEGALITY OF PROCEED BLT O.ERR1 ;NOT LNTRY ;OR OBJ MODULE MUST BE IN LINBUF ;OUTPUT: FIRST LINE OF NEXT DIR ;OR OBJ MODULE; OR EDIR, EOF ;FLAG SET IF NONE MOV #LBDATA,R1 MOV #LINBUF,R3 LBSK00: JSR PC,LBINRD ;READ NEXT LINE CMP #EGSD,@R1 ;THIS AN END GSD LINE? BNE LBSK05 ;NO - BRANCH TSTB LBPASS ;GO TO LBNXTE TO EXIT BEQ LBNX10 ;IF PASS ONE LBSK05: CMP #EMOD,@R1 ;THIS AN END MODULE LINE? BNE LBSK00 ;NO - BRANCH BR LBNX10 ;EXIT THROUGH LBNXTE LBCDIR: ;CREATES A DIRECTORY ENTRY ;INPUT: FIR EQUIT5 ;RENAME OUTPUT RNAM2: MOV FNBKPI,FNBKON MOV FNBKPI+2,FNBKON+2 ;MOV OLD NAME TO TEMPORARY STORAGE MOV #BAK,FNBKON+4 ;FNBKON NOW CONTAINS NEW NAME FOR INPUT FILE MOV FNBKPI+6,FNBKON+6 ;MOV IN UIC MOV FNBKPI+10,FNBKON+10 ;MOVE IN PROTECTION MOV #FNBKON,-(SP) MOV #LKBKPI,-(SP) EMT 14 TST (SP)+ ;DOES A BACKUP ALREADY EXIST? BIT #200,(SP)+ BEQ RNAM3 ;NO MOV #FNBKON,-(SP) MOV #LKBKPI,-(SP) EMT DELTCD ;YES-KILL IT RNAM3: MOV #FNBKON,-(SP) ;NEW NAME MOV #FNBKPI,-(SP) ;OLD SET INITIAL CONDITIONS JMP FLDP05 RINIT: CLR OUTLB CLR INLB CLR CMDLB MOV #40003,INBUF+2 CLR TMPR1 ;SET NOT IN TRAN STATE CLR FILEXT+4 MOVB #'.,FILEXT CLRB CHN ;SET NOT IN CHAIN MOV #CMDLB,-(R6) INIT ;INIT INPUT COMMAND DEVICE MOV #OCMLB,-(R6) INIT ;INIT OUTPUT COMMAND DEVICE RTS PC ;EXIT SUBROUTINE ; ; FILE CLOSE AND RELEASE ROUTINE ; FILCR: TST CMDLB ;COMMAND LINK BLOCK BEQ FILCA ;NO, CHECK NEXT BLOCK MOV #CMDLB,-(R6) CLOSE MOV #CMDLB,-(R6) RELEASE FIEGAL TST R2 ;CHECK FOR ILLEGAL COUNT BNE O.ERR1 ;JUMP IF ILLEGAL TST R3 ;WAS COUNT SPECIFIED? BEQ O.PR1 ;NO MOV R5,O.CT(R0) ;YES, PUT AWAY COUNT O.PR1: MOVB #O.STM,ST ;FORCE HIGH PRIORITY JSR 5,O.RSTT ;RESTORE TTY O.C1: CMPB O.P,#O.BKP ;SEE IF A REAL ONE OR A FAKE BGT O.TBIT ;BRANCH IF FAKE TSTB O.S ;SEE IF SINGLE INSTRUCTION MODE BNE O.TBIT ;IF SO EXIT NOW MOVB #O.STM,ST ;SET HIGH PRIORITY INCB O.T ;SET T-BIT FLAG BIS #O.TBT,O.UST ;SET T-BIT BR O.GO2 ; BREAKPOINT HAST LINE OF OBJECT ;MODULE IN LBFLBF ;OUTPUT: A DIRECTORY ENTRY MOV #2,LBTMBF+4 ;INITIALIZE TMP BUF MOV #GSD,LBTMDT CLR GCOUNT ;SET NO GLOBALS ON THE STACK LBCD00: MOV #LBFLBF+4,R1 SUB #2,(R1)+ ;DECREMENT INPUT DATA COUNT TST (R1)+ ;SKIP PAST THE GSD HEADER LBCD05: CMP #EXTGLB,4(R1) ;THIS AN EXTERNAL GLOBAL? BEQ LBCD30 ;YES - BRANCH JSR PC,LBBFCK ;CHECK BUFFER & MOVE DATA LBCD10: SUB #GLBLN,LBFLBF+4 ;ANYTHING LEFT IN INBUF? BNE LBCD05 ;YES - BRANCH MOV #LBFLBF,R3 FILE NAME MOV #LKBKPI,-(SP) EMT RENAME EQUIT5: MOV #FNBKPI,-(SP) ;NEW NAME FOR OUTPUT (OLD INPUT NAME) MOV #FNBKPO,-(SP) ;OLF OUTPUT NAME MOV #LKBKPO,-(SP) EMT RENAME RNAM1: RTS R5 ; SUBROUTINE VERIFY ; ROUTINE TO VERIFY ON THE TTY ; THE RESULTS OF AN EDIT VERIFY: INC MINUS ; IT DOES IT BY CALLING LIST AS A 0L CLR ARG JSR R5,LIST CLR MINUS INC ARG MOV #LKBKCO,-(SP) EMT WAITCD JMP LIST ;SUBROUTINE LIST ;ROUTINE TO LIST ON TELEPRINTER. ;THE LINES AS DEFINED BYLCA: TST INLB ;INPUT LINK BLOCK INITED? BEQ FILCB ;NO, CHECK NEXT BLOCK MOV @PC,INFB ;FORCE A "FILE NAME" MOV #INFB,-(R6) MOV #INLB,-(R6) LOOKUP ;LOOKUP INPUT FILE INFO TST (R6)+ ;GET RID OF LENGTH BIT #40,(R6)+ ;IS INPUT FILE OPEN? BEQ FILC10 ;NO - BRANCH MOV #INLB,-(R6) CLOSE FILC10: MOV #INLB,-(R6) RELEASE FILCB: TST OUTLB ;OUTPUT LINK BLOCK INITED? BEQ FILCC ;NO, GO EXIT MOV #OUTFB,-(R6) MOV #OUTLB,-(R6) LOOKUP ;LOOKUP OUTPUT FILE INFO TST (R6)+ ;GET RID OFNDLER O.BRK: MOV (SP)+,O.UPC ;PRIORITY IS 7 UPON ENTRY MOV (SP)+,O.UST ;SAVE STATUS AND PC MOVB #O.BKP+3,O.P ;TELL ;P THAT WE CAN CONTINUE O.BK1: JSR 0,O.SVR ;SAVE VARIOUS REGISTERS TSTB O.T ;CHECK FOR T-BIT SET BNE O.TBIT ;JUMP IF SET JSR 5,O.REM ;REMOVE BREAKPOINTS TSTB O.PRI ;CHECK IF PRIORITY BPL O.BK2 ; IS AS SAME AS USER PGM MOVB O.UST,R5 ;PICK UP USER UST IF SO BR O.BK3 O.BK2: MOVB O.PRI,R5 ;OTHERWISE PICK UP ACTUAL PRIORITY CCC ;CLEAR CARRY RORB R5 ;SHIFT LOW ORDELBCD15: JSR PC,LBINFL ;READ MORE INPUT MOV #LBFDTA,R1 CMP #GSD,@R1 ;THIS A GSD LINE? BEQ LBCD00 ;YES - BRANCH CMP #EMOD,@R1 ;THIS END OF MODULE? BEQ LBCD20 ;YES - BRANCH BITB #EOF,3(R3) ;IF EOF BEFORE END MODULE, BEQ LBCD15 ;THEN INPUT FILE ERROR, ELSE JMP LBIFER ;GO READ NEXT LINE LBCD20: MOV #EGSD,@R1 ;INSERT END GSD INDICATOR LBCD22: DEC GCOUNT ;MORE GLOBALS ON THE STACK? BLT LBCD25 ;NO - BRANCH MOV R6,R1 JSR PC,LBBFCK ;PUT IN THE BUFFER ADD #GLBLN,R6 ;FIX UP THE STACK ARG LIST: JSR R5,GLM ;GETS LIMS MOV #LKBKCO,-(SP) EMT WAITCD MOV FROMA,R4 LIST0: CMP THRUB,FROMA BHIS LIST1 RTS R5 LIST1: TST PNCHON BEQ TW1C JSR R5,TPCHON TW1C: CLR PNCHON ;DONT OUTPUT IF PUNCH ON ;WAIT FOR HIM TO TURN IT OFF MOV R5,-(R6) ;SAVE R5 MOV DOT,TMPDOT ;IN CASE OF ^P DURING OUTPUT ;BY GET COMMAND TW1C1: MOV #TOBBC,R3 ;R3=POINTER MOV R3,R5 ;R5=ADR BC CLR (R3)+ ;CLR BC TW1C2: CMP R4,THRUB ;DONE? BHI TW1C4 MOVB (R4)+,(R3)+ ;MOVE A DATA BYTE INC LENGTH BIT #40,(R6)+ ;IS OUTPUT FILE OPEN BEQ FILC20 ;NO - BRANCH MOV #OUTLB,-(R6) CLOSE FILC20: MOV #OUTLB,-(R6) RELEASE FILCC: TST OCMLB ;OUTPUT COMMAND LINK BLOCK INITED? BEQ FILCD ;NO, GO EXIT MOV #OCMLB,-(R6) CLOSE MOV #OCMLB,-(R6) RELEASE FILCD: RTS PC ; ; RESTART ROUTINE ; RSTT: JSR PC,FILCR ;FILE CLEANUP JSR PC,RINIT ;INITIALIZE CONDITIONS JMP FLDP05 ;GO PRINT #. .END FLDP00 R BITS RORB R5 ; INTO RORB R5 ; HIGH ORDER RORB R5 ; POSITION O.BK3: BIC #O.TBT,R5 ;CLEAR POSSIBLE T BIT (S/I MODE) MOVB R5,ST ;PUT THE STATUS AWAY WHERE IT BELONGS MOV O.UPC,R5 ;GET PC, IT POINTS TO THE TRT TSTB O.S ;SEE IF IT WAS SINGLE INSTRUCTION FUN BMI O.B4 ;IF SO HANDLE THERE TST -(R5) MOV R5,O.UPC MOV #O.BKP,R4 ;GET A COUNTER O.B1: CMP R5,O.ADR1(R4) ;COMPARE WITH LIST BEQ O.B2 ;JUMP IF FOUND DEC R4 DEC R4 BGE O.B1 ;RE-LOOP UNTIL FOUND JSR 5,O.SVTT ; BR LBCD22 ;GO LOOK FOR MORE LBCD25: MOV #LBTMBF,R3 JSR PC,LBOTWR ;WRITE THE DATA BUFFER MOV #LBFLBF,R3 JSR PC,LBOTWR ;WRITE THE END GSD LINE RTS PC LBCD30: ADD #GLBLN,R1 MOV -(R1),-(R6) ;PUT THE SYMBOL ON THE MOV -(R1),-(R6) ;STACK BACKWARDS SO THAT MOV -(R1),-(R6) ;IT COMES OFF FORWARDS MOV -(R1),-(R6) ADD #GLBLN,R1 ;FIX UP DATA POINTER INC GCOUNT ;INCREASE GLOBAL COUNT BR LBCD10 LBBFCK: CLR -(R6) ;USED AS A COUNTER MOV #LBTMBF+4,R3 ;GET AT BYTE COUNT MOV #GLBLN,@R6@R5 ;INC BC CMP @R5,TOB ;BUFFER FULL? BNE TW1C2 ;NO MOVB #VERTAB,(R3)+ ;TACK ON A TERMINATOR JUST IN CASE INC @R5 CLR TOB+2 MOV #TOB,-(SP) MOV #LKBKCO,-(SP) EMT WRITCD MOV #LKBKCO,-(SP) EMT WAITCD BR TW1C1 CLR TOB+2 TW1C4: MOV #TOB,-(SP) MOV #LKBKCO,-(SP) EMT WRITCD MOV #LKBKCO,-(SP) EMT WAITCD MOV (R6)+,R5 ;RESTORE R5 RTS R5 ;SUBROUTINE GET LIMS ;ROUTINE TO GET LIMITS,PER ARG FOR LIST + PUNCH GLM: JSR R5,ADV ;ADV DOT ;TMP4=OLD DOT TST MINUS; PDP-11 LINKER,LINK V011A ; COPYRIGHT 1970,1971,1972 DIGITAL EQUIPMENT CORPORATION ; 14 AUG 72 .TITLE LINK ; TAPE 1 ; .MCALL .CLOSE,.CORE,.CSI1,.CSI2,.CVTDT,.DELET,.DTCVT,.D2BIN .MCALL .EXIT,.INIT,.MONF,.OPEN,.O2BIN,.RADPK,.READ,.RLSE,.RSTRT .MCALL .STAT,.TMCVT,.TRAN,.TRAP,.WAIT,.WRITE,.GTCIL,.LOOK ; .MACRO VRSION .ASCII /V11A01/ .ENDM ; ; .IFDF DEBUG .GLOBL REPORT .ENDC ; ; DEFINE REGISTERS ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; ; DEFSAVE TELETYPE STATUS JSR 5,O.CRLF MOV #O.BD,R4 ;ERROR, NOTHING FOUND MOV #O.BD+1,R3 JSR 5,O.TYPE ;OUTPUT "BE" FOR BAD ENTRY MOV R5,R0 ADD #2,O.UPC ;POP OVER THE ADJUSTMENT ABOVE BR O.B3 ; OR CONTINUE O.B4: MOVB #O.BKP+2,R4 ;SET BREAK POINT HIGH + 1 MOV R5,O.ADR1(R4) ;STORE NEXT PC VALUE FOR TYPE OUT BR O.B2 O.B2: MOVB R4,O.P ;ALLOW PROCEED DEC O.CT(R4) BGT O.C1 ;JUMP IF REPEAT MOV #1,O.CT(R4) ;RESET COUNT TO 1 JSR 5,O.SVTT ;SAVE TELETYPE STATUS, R4 IS SAFE MOV #'B,R0 J ;SET UP GLOBAL LENGTH AND ADD @R6,@R3 ;ADD TO BYTE COUNT CMP #MAXLIN,@R3 ;WILL THE LINE OVERFLOW? BHIS BFCK00 ;NO - BRANCH SUB @R6,@R3 ;FIX BYTE COUNT CMP -(R3),-(R3) JSR PC,LBOTWR ;OUTPUT THE BUFFER ADD #6,R3 MOV #GSD,@R3 ;INSERT THE GSD HEADER MOV #GLBLN+2,-(R3) ;INSERT THE NEW BYTE COUNT BFCK00: ADD @R3,R3 SUB #GLBLN-2,R3 ;COMPUTE THE CORRECT POSITION BFCK05: MOVB (R1)+,(R3)+ DEC @R6 ;MOVE THE DATA BNE BFCK05 TST (R6)+ ;CLEAN UP THE STACK RTS PC LBCOM: ;CREATE ;WHAT DIRECTION? BEQ GLM2 ;FWD ;BCKWD GLM1: MOV DOT,FROMA ;FROMA=ADR+1 OF PROPER LF MOV TMP4,DOT ;RESTORE DOT DEC TMP4 MOV TMP4,THRUB ;THRUB=DOT-1 RTS R5 ;RTN GLM2: MOV TMP4,FROMA ;FROMA=OLD DOT DEC DOT ;THRUB=NEW DOT-1 MOV DOT,THRUB ; MOV TMP4,DOT ;RESTORE DOT RTS R5 ;SUBROUTINE MOVEBUFFER MOVEBUF:ZMB: COMB MBF ;COMPLEMENT STATE OF ;BUFFER FLAG CMP TOHERE,FROMA ;BUFFER GOING UP OR DOWN? BLOS MUP ;UP ;DOWN MDN: MOV THRUB,TMP3 ;TMP3=THRUB+1 INC TMP3 INE PARAMETERS ; ; ASCII CHARACTERS CR=15 LF=12 VT=13 TAB=11 FF=14 ;FORM FEED LANG=74 ;< RANG=76 ;> CRLF=005015 L=114 ; ; SYMBOL TABLE PARAMETERS ; BPSYM=10. ;# OF BYTES PER SYMBOL BASE=8. ;DISTANCE TO BASE OF A SECTION FLAGS=4 ;DISTANCE TO FLAGS OF AN ENTRY VALR=6 ;DISTANCE TO RELOCATABLE VALUE OF AN ENTRY NAME2=2 ;DISTANCE TO 2ND WORD ON AN ENTRY OBJMN=0 ;OBJECT MODULE NAME SECTN=1 ;SECTION NAME SYMN=4 ;SYMBOL ENTRY ABSREL=40 ;ABS/REL BIT SR 5,O.FTYP ;TYPE "B" MOVB O.P,R0 ;CONVERT BREAKPOINT NUMBER TO ASCII ADD #140,R0 ASR R0 JSR 5,O.FTYP MOV #';,R0 JSR 5,O.FTYP ; TYPE MOV #2,O.BW ; SET WORD MODE MOVB O.P,R4 MOV O.ADR1(R4),R0 ;GET ADDRESS OF BREAK O.B3: JSR 5,O.RORA ; CHECK FORMAT JMP O.DCD ;GO TO DECODER ; SAVE REGISTERS R0-R6 ; INTERNAL STACK O.SVR: MOV (SP)+,O.XXX ;PICK REGISTER FROM STACK AND SAVE MOV SP,O.USP ;SAVE USER STACK ADDRESS MOV #O.USP,SP ;SET TO INTERNAL STACK MOV R5,-(SP) ;SAVE MOV S AN OBJECT MODULE ;INPUT: FIRST LINE OF OBJECT ;MODULE IN LBFLBF ;OUTPUT: AN OBJECT MODULE MOV #LBFDTA,R1 MOV #LBFLBF,R3 LBCM00: JSR PC,LBOTWR ;WRITE OUT THIS LINE CMP #EMOD,@R1 ;END OF MODULE? BNE LBCM05 ;NO - BRANCH RTS PC LBCM05: JSR PC,LBINFL ;READ NEXT INPUT LINE CMP #GSD,@R1 BEQ LBCM05 ;IGNORE GSD LINES. WRITE OTHER BR LBCM00 ;LINES, INCLUDING END GSD ILBSW: CLR R1 ;COUNTS /D OCCURRENCES MOV #ILLB+10,R4 ILSW00: MOV @R4,R5 ;MORE SWITCHES? BNE ILSW10 MOV LAST,TMP4 ;TMP4=LAST+1 B: MOVB -(TMP3),-(TMP4) ;MOVE THE BYTE CMP TMP3,FROMA ;DONE? BHI B ;NO RTS R5 ;YES---RTN MUP: MOV FROMA,TMP3 ;TMP3=STRT MOV TOHERE,TMP4 ;TMP4=DEST A: MOVB (TMP3)+,(TMP4)+ ;MOVE A BYTE CMP TMP3,LAST ;DONE? BLO A ;NO CLRB MBF RTS R5 ;YES---RTN ;SUBROUTINE CHANG,XCHANGE CHANGE: XCHANGE:TSTB IN1 ;FIRST TIME? BNE CH2 ;NO JMP INSRT ;YES---MOVE BUF AND ACCEPT DATA CH2: JSR R5, INSRT ;NO---MOVE BUF BACK TST ARG ;HOW TO DELETE? BEQ CH2B ;FROM BE(0/1) UNDEF=10 ;UNDEFINED/DEFINED (0/1) INTGLB=100 ;INTERNAL/GLOBAL (0/1) MONCND=1 ;MONITOR ROUTINE CANDIDATE LOCAL=5 ;LOCAL SECTION NAME IDENT=6 ;IDENT DIRECTIVE. ; ; TXT MODIFICATION COMMANDS ; TCMD1=1 ;INTERNAL RELOCATION TCMD2=2 ;GLOBAL RELOCATION TCMD3=3 ;INTERNAL DISPLACED TCMD4=4 ;GLOBAL DISPLACED TCMD5=5 ;GLOBAL ADDITIVE TCMD6=6 ;GLOBAL ADDITIVE DISPLACED TCMD7=9. ;GENERATE LIMITS ; ; PC MODIFICATION COMMANDS ; PCMD1=7 ;SET PC PCMD2=8. R4,-(SP) ; REGISTERS MOV R3,-(SP) ;1 MOV R2,-(SP) ; THRU MOV R1,-(SP) ; 5 MOV O.XXX,-(SP) ;PUT SAVED REGISTER ON STACK TST -(SP) RTS R0 ; RESTORE REGISTERS R0-R6 O.RSR: TST (SP)+ ;POP THE EXTRA CELL MOV (SP)+,O.XXX ;GET R0 FROM STACK MOV (SP)+,R1 ;RESTORE MOV (SP)+,R2 ; REGISTERS MOV (SP)+,R3 ; 1 MOV (SP)+,R4 ; THRU MOV (SP)+,R5 ; 5 MOV O.USP,SP ;RESTORE USER STACK MOV O.XXX,-(SP) ;PUT R0 ON USER STACK RTS R0 ; RESTORE BREAKPOINTS 0-7 O.RSB: MOV #O.BKP,R ;YES - BRANCH ILSW05: RTS PC ILSW10: ASL R5 ADD R5,R4 ;POINT AT SWITCH CMP #DELLIB,@R4 ;/DL ?? BEQ ILSW20 ;YES - BRANCH CMP #DELOM,@R4 ;/D ?? BEQ ILSW13 ;YES - BRANCH MOV #2,R0 ;SET INPUT LIBRARY CODE JMP LBSWER ;SWITCH ERROR ILSW13: INC R1 ;INCREASE COUNTER ILSW15: TST (R4)+ ;POINT AT HEAD OF NEXT SWITCH BR ILSW00 ;CONTINUE ILSW20: INCB LBDEL ;SET DELETE FLAG BR ILSW15 LBILIN: ;INPUT LIBRARY INITIALIZER MOV #ILLB,-(R6) INIT ;INITIALIZE DEVICE AND MOV #ILFB,-(G OF LINE TST MINUS ;BACKWARD? BEQ CH2C ;NO---FWD CH2B: MOV SVDOT,DOT ;DOT=OLD DOT CH2C: CMPB CMD,#CX ;IS COMMAND XCHANGE? BEQ KILL ;YES BR DELETE ;NO---THEN IT WAS ;SUBROUTINE KILL LINES KILL: MOV #FROMA+2,TMP3 ;GET ADR OF FROMA+2 TST ARG ;WHAT IS ARG BLE DELETE ;LE ZK1: MOV DOT,-(LS) ;SAVE DOT JSR R5,ADV ;ADV DOT PER ARG AND MINUS TST MINUS ;WHICH DIRECTION BGT ZK2 ;BCKWD TOWARD 0 MOV DOT,-(TMP3) ;FORWD---FROMA=DOT MOV (LS)+,DOT ;DOT=OLD DOT BR ZD3 ZK2: MOV ;MODIFY PC ; MISCELLANEOUS SPLEN=100. ;STACK LENGTH ALODSZ=320 ;ABSOLUTE LOADER SIZE HGHMEM=16384. ;HIGH MEMADR +1 ; ; MONITOR IO COMMANDS ; INIT=6 OPEN=16 OPENI=4 OPENO=2 RSTRT=41 WAIT=1 READ=4 WRITE=2 CLOSE=17 RELEAS=7 TRAPV=41 CSI1=56 CSI2=57 FMS=41 CONV=42 DELET=21 TRAN=10 STAT=13 GET=65 GUT=41 ACTION=40003 ;EXECUTE LOAD MOD .IFDF BLKIO .GLOBL READIT,READST,CLOSRD,INITRD .GLOBL RLSRD,OPENRD,READIU,XXREAD,INA,INB,OBJDEV .GLOBL T4 ;RESTORE ALL BREAKPOINTS O.RS1: MOV @O.ADR1(R4),O.UIN(R4) ;SAVE CONTENTS MOV O.TRTC,@O.ADR1(R4) ;REPLACE WITH TRAP DEC R4 DEC R4 BGE O.RS1 ;RE-LOOP UNTIL DONE RTS R5 ; THEN QUIT ; SAVE TELETYPE STATUS O.SVTT: MOVB O.RCSR,O.CSR1 ;SAVE R C/SR MOVB O.TCSR,O.CSR2 ;SAVE T C/SR CLRB O.RCSR ;CLEAR ENABLE AND MAINTENANCE CLRB O.TCSR ; BITS IN BOTH C/SR O.SVT1: TSTB O.TCSR ;LOOP UNTIL READY BIT COMES ON BPL O.SVT1 ;BR IF BIT NOT ON RTS R5 ; RESTORE TELETYPE STATUS O.RSTT:R6) ;OPEN LIBRARY MOV #ILLB,-(R6) OPEN MOV #LINBUF,R3 JSR PC,LBINRD ;GET FIRST DIRECTORY ENTRY CMP #BEGLIB,LBDATA BEQ LBIL05 ;IF FIRST TWO HEADERS ARE OK, LBIL00: JMP LBILER ;ASSUME THIS IS A VALID LBIL05: JSR PC,LBINRD ;LIBRARY, OTHERWISE FLAG IT CMP #GSD,LBDATA ;AS AN INPUT LIBRARY ERROR BNE LBIL00 RTS PC LBOLIN: ;OUTPUT LIBRARY INITIALIZER MOV #OLLB,-(R6) INIT TST ILLB BEQ LBOL0A MOV #LBOL0B,OLFB-4 LBOL0A: MOV #OLFB,-(R6) MOV #OLLB,-(R6) OPEN MOV #LIBHDR,R3 (LS)+,-(TMP3) ;FROMA=OLD DOT BR ZD3 ;SUBROUTINE DELETE CHARS DELETE: MOV #FROMA+2,TMP3 ;GET ADR OF FROMA+2 MOV ARG,TMP4 ;SET CONDITION CODES ON ARG BEQ ZD0 ; BGT ZDGT ; INC TMP4 ; BNE ZDM2 ;ARG=-2---@ ;ARG IS -1---/ "SLASH" ZDM1: MOV DOT,END RTS R5 ;ARG IS ZERO ZD0: MOV DOT,-(TMP3) ;FROMA=DOT JSR R5,FLF ;FIND LINE FEED ;GET NEW DOT BR ZD3 ;ARG IS GT ZDGT: MOV DOT,R2 ;COMPUTE LIMS OF DELETE SUB BEG,R2 MOV END,R4 SUB DOT,R4 TST MINUS ;DIRECTIORNBLK,OBJADR .ENDC ; ; MONITOR IO DATA MODES ; FASC=0 FBIN=1 UFBIN=3 ; ; MONITOR IO ERROR BITS ; EOF=100 ; ; BLOCK TYPE COMMANDS ; GSDBLK=1 TXTBLK=3 RLDBLK=4 ISDBLK=5 MODEND=6 GSDEND=2 STBBLK=9. STBEND=10. ; ; JUMP TABLE MAX INDICES. ; SWSMAX=6 TMAX=3 ;SEE LINK57 GSDMAX=6 ;SEE GGSD05 PMAX=6 ;SEE SCMDT CMDMAX=14. ;SEE RCMDT ERMAX=3 ;SEE ERTAB ; COMD SIZE (BYTES) COMDSZ=36 IND=6 ;INDEX INTO FILE BLOCK ; MISCELLANEOUS BUF=104. ;52 WORDS FOR CSI JSR 5,O.CRLF TSTB O.TCSR ;WAIT READY BPL .-4 ; ON PRINTER BIT #4000,O.RCSR ;CHECK BUSY FLAG BEQ O.RSE1 ;SKIP READY LOOP IF NOT BUSY TSTB O.RCSR ;WAIT READY BPL .-4 ; ON READER O.RSE1: MOVB O.CSR1,O.RCSR ;RESTORE MOVB O.CSR2,O.TCSR ; THE STATUS REGISTERS RTS R5 ; REMOVE BREAKPOINTS 0-7 ; IN THE OPPOSITE ORDER OF SETTING O.REM: TSTB O.S ;SEE IF SINGLE INSTRUCTION IS GOING BNE O.R2 ;EXIT IF SO CLR R4 ;REMOVE ALL BREAKPOINTS O.R1: MOV O.UIN(R4),@O.ADR1(R4) ;CLEAR B JSR PC,LBOTWR CLR OLFB-4 RTS PC LBOL0B: INC RENMFG CLR OLFB-4 CMPB #2,OLFB-1 BNE LBOL0A MOV #LIB,OLFB MOV #R11,OLFB+2 MOV #TMP,OLFB+4 BR LBOL0A LBININ: ;INPUT FILE INITIALIZER MOV #IFLB,-(R6) INIT ;INIT DEVICE MOV #IFFB,-(R6) MOV #IFLB,-(R6) OPEN ;OPEN INPUT FILE MOV #LBFLBF,R3 JSR PC,LBINFL ;READ FIRST LINE BITB #EOF,3(R3) ;SOMETHING'S FISHY IF EOF BNE LBINI3 CMP #GSD,LBFDTA ;ERROR IF FIRST LINE IS BEQ LBINI5 ;NOT A GSD LINE LBINI3: JMP LBIFER LBININ? BEQ ZDGT1 CMP ARG,R2 ;BCKWD -- SET ARG EQ LIM IF TOO HI BLO .+4 MOV R2,ARG MOV DOT,-(TMP3) ;FROMA=DOT SUB ARG,DOT ;NEW DOT=DOT-ARG BR ZD3 ZDGT1: CMP ARG,R4 ;FWD --- SET ARG EQ LIM IF TO HI BLO .+4 MOV R4,ARG MOV DOT,-(TMP3) ;FROMA=DOT+ARG ADD ARG,@TMP3 BR ZD3 ;ARG IS -1---@ WHERE IS MARK ZDM2: CMP MRK,DOT BHI ZDM2A ; MARK< DOT MOV DOT,-(TMP3) ; FROMA = DOT MOV MRK,DOT ; DOT=MRK BR ZD3 ; MRK>DOT ZDM2A: MOV MRK,-(TMP3) ;FROMA=MARK+1 SUB COUNT,MRK ZBUFFS. DETACH=40 ;DETACH BIT FOR HEADERS MXDVSZ=1000. ;ASSUME 500 WORDS MAX SIZE FOR ; DRIVER AND BUFFER. OCTOBI=4 ;OCTAL TO BINARY CODE DETOBI=2 ;DECIMAL TO BINARY CODE RATOBI=0 ;RADIX50 TO BINARY CODE DOTBLK=127400 ;RADIX50 FOR ". " BLANKS=0 ;RADIX50 FOR " " INC=256. ERR10=1444 ;F044-ERROR IN FORTRAN COMMAND STRING ;THIS SOURCE OF THE LINKER CAN BE ;ASSEMBLED INTO TWO UNIQUE VERSIONS: ;1. IF THE SYMBOL "NOSEG" IS DEFINED, THE ; RESULTING OBJECT MODULE IS THE FULL ; REAKPOINT INC R4 INC R4 CMP R4,#O.BKP BLE O.R1 ;RE-LOOP UNTIL DONE O.R2: RTS R5 ;THEN QUIT ; TYPE OUT CONTENTS OF WORD OR BYTE WITH ONE TRAILING SPACE ; WORD IS IN R0 O.CADV: MOV #6,R3 ;# OF DIGITS MOV #-2,R4 ;# OF BITS FIRST-3 CMP #1,O.BW ;SEE IF WORD MODE BNE O.SPC ;BRANCH IF SO SUB #3,R3 ;ONLY DO 3 DIGITS INC R4 ;DO 2 BITS FIRST SWAB R0 ;AND TURN R0 AROUND O.SPC: MOV R0,-(SP) ;SAVE R0 O.V0: ADD #3,R4 ;COMPUTE THE NUMBER OF BITS TO DO CLR R0 O.V1: ROL (SP) ;G5: RTS PC LBINRL: ;RELEASES INPUT FILE AND ;GETS NEXT. ;IFLB+6 = 0 IF NO MORE MOV #IFLB,-(R6) CLOSE ;CLOSE FILE MOV #IFLB,-(R6) RELEASE ;RELEASE DEVICE LBIRL: CLR CMBUFH ;REQUEST INPUT FROM CSI MOV #IFLB,LBSEM+2 MOV #IFFB,LBSEM+4 LBIRL0: MOV #LBSEM,-(R6) SEMANTICS BIT #SWER,@R6 ;TOO MANY SWITCHES? BEQ LBIRL1 ;NO - BRANCH CLR R0 ;SET INPUT FILE CODE JMP LBSWER ;PROCESS SWITCH ERROR LBIRL1: TST IFLB+6 ;ANYTHING THERE? BNE LBIRL2 ;YES - BRANCH TST (RD3: MOV DOT,-(TMP3) ;TOHERE=DOT MOV END,-(TMP3) ;THRUB=END JSR R5,MOVEBUF ;MOVE THE PGB ;CALCULATE NEW END ;WHERE END=END-(FROMA-TOHERE) ADD TOHERE,END SUB FROMA,END ; SET MARK TO DOT ON ALL DELETES TST MINUS ; IF THIS WAS A -C OR -X, BEQ ZD4 ; THEN ADJUST DOT ADD COUNT,DOT ZD4: MOV DOT,MRK RTS R5 ;SUBROUTINES GET AND WHOLE EWHOLE: TST LKBKSI ;ANY SECONDARY INPUT FILE BEQ GEXIT1 ;NO-ERROR MOV #LKBKSI,RRIDEV ;SET UP SUBSIDIARY READS INCB EHFLG ;SET EDILINKER. ; ************************************* ;2. IF THE SYMBOL "NOSEG" IS NOT DEFINED, ; THE RESULTING PACKAGE IS A LINKER ; THAT UTILIZES CORE OVERLAYS FROM THE SYSTEM ; DEVICE TO CONSERVE ON SYMBOL TABLE SPACE. ; ; THIS VERSION OF THE LINKER ; UTILIZES CORE OVERLAYS FROM THE SYSTEM ; DEVICE TO CONSERVE ON SYMBOL TABLE SPACE. ; ;THE OVERLAY VERSION OF THE LINKER IS SELF CONTAINED ;IN THAT IT IS ITS OWN OVERLAY BUILDER. ; ;WHEN THE SYMBOL "OVRBLD" IS DEFINED, THE ;RESULTIET A BIT ROL R0 ;STORE IT AWAY DEC R4 ;DECREMENT COUNTER BGT O.V1 ;LOOP IF MORE BITS NEEDED ADD #'0,R0 ;CONVERT TO ASCII JSR R5,O.FTYP ;TYPE IT DEC R3 ;SEE IF MORE DIGITS TO DO BGT O.V0 ;LOOP IF SO MOVB #' ,R0 ;SET UP FOR TRAILING SPACE TST (SP)+ ;GET RID OF JUNK BR O.FTYP ; ;O.CLRR CLEAR RELOCATION REGS ; I.E., SET THEM TO A HIGH MEM LOC. (-1) ; R1,R0 CLOBBERED ; O.CLRR: MOV #O.RELT,R1 MOV #-1,R0 MOV R0,(R1)+ MOV R0,(R1)+ MOV R0,(R1)+ MOV R0,(R1)+ MOV R0,6)+ ;ANY MORE INPUT? BEQ LBIRL0 ;YES - BRANCH RTS PC LBIRL2: TST (R6)+ ;POP INDICATOR RTS PC LBRST: ;RESETS INPUT AND OUTPUT FILE PTRS MOV #CMBUFH,-(R6) SYNTAX ;SYNTAX RESETS THE POINTERS TST (R6)+ ;POP INDICATOR WORD RTS PC LBERNM: ;R2 POINTS TO NAME ;R4 POINTS TO BUFFER MOV #2,R5 TST 4(R2) ;IF NO EXTENT, THEN CLEAR BNE LBEN00 ;THE . FROM BUFFER CLRB 6(R4) LBEN00: MOV (R2)+,-(R6) MOV R4,-(R6) ;UNPACK NAME AND PLACE MOV #1,-(R6) ;IN BUFFER UTILT WHOLE FLAG BR EHOLE1 ;DO A WHOLE EPOSITION: TST LKBKSI BEQ GEXIT1 MOV #LKBKSI,RRIDEV ;GET INPUT FROM SUBSIDIARY DEVICE BR GET01 POSITION: MOV #LKBKPI,RRIDEV ;GET INPUT FROM PRIMARY FILE GET01: INCB YNKFLG TST ENDFLG ;OUTPUT FILE CLOSED? BEQ GET02 ;NO JMP FORMF1 ;YES-PRINT ERROR GET02: MOV ARG,-(SP) MOV #-1,ARG ;SET ARG EQUAL TO SLASH JSR R5,WRITE ;WRITE BUFFER CONTENTS MOV #1,ARG JSR R5,NEXT MOV (SP)+,ARG ;RESTORE ARG EHOLE1: MOV #CH,CMD GET: WHOLE: MOV #TIB,ADR NG OBJECT MODULE IS THE BUILDER. ; ;WHEN THE SYMBOL "OVRBLD" IS NOT DEFINED, THE ;RESULTING OBJECT MODULE IS THE RESIDENT LINKER. ; ;WHEN LINKED, THE BUILDER'S TOP SHOULD BE XXX460. ;EXECUTING THE BUILDER'S LOAD MODULE ;VIA THE MONITOR COMMAND RUN ;CAUSES THE CREATION OF THE ;CONTIGUOUS FILE OF OVERLAYS ;(LINK11.OVR) ON THE SYSTEM DEVICE WITH LOGIN UIC. ; ;WHEN LINKED, THE RESIDENT LINKER'S TOP SHOULD ALSO BE XXX460. ;AT RUN TIME, THE RESIDENT LINKER ;REQUIRES THE OVERLAYS TO BE ON THE SYSTE(R1)+ MOV R0,(R1)+ MOV R0,(R1)+ MOV R0,(R1) RTS R5 ; .EOT ;END OF TAPE #3 ; TYPE ONLY ONE CHARACTER (CONTAINED IN R0) O.FTYP: TSTB O.TCSR BPL .-4 MOVB R0,O.TDB O.TYP1: RTS R5 ; GENERAL CHARACTER INPUT ROUTINE -- ODT11X ; CHARACTER INPUT GOES TO R0 O.GET: TSTB O.RCSR ;WAIT FOR BPL .-4 ; INPUT FROM KBD MOVB O.RDB,R0 ;GET CHARACTER - STRIP OFF PARITY BIC #177600,R0 ;STRIP OFF PARITY FROM CHARACTER CMPB #3,R0 ;IS IT ^C? BEQ O.GET1 ;IF SO, DO NOT ECHO TSTB O.SCRN ITY DEC R5 BEQ LBEN10 BLT LBEN15 LBEN05: ADD #3,R4 BR LBEN00 LBEN10: INC R4 BR LBEN05 LBEN15: RTS PC LBPKOM: ;PACKS OM NAME MOV -(R4),-(R6) ;POINTER TO NAME AT -(R4) CLR -(R6) UTILITY MOV (R6)+,LBTNAM CLR -(R6) ;PUT IN LBTNAM & LBTNAM+2 UTILITY MOV (R6)+,LBTNAM+2 TST (R6)+ ;POP UPDATED ADDRESS RTS PC LBDWRT: ;FINISHES WRITING DIRECTORY MOV #LINBUF,R3 LBDW00: TSTB LBEDIR ;END DIR IN LINBUF? BNE LBDW05 ;YES - BRANCH JSR PC,LBNXTE ;WRITE THIS ENTR COM MODE COM IN2 BEQ GET2 ;SECOND TIME THRU GET1: CLR COUNT ;FIRST TIME MOV #ENDTIB,NL ;ACCEPT 21 CHAR SEARCH OBJECT RTS R5 GEXIT: CLRB YNKFLG CLR -(SP) MOV #1307,-(SP) ;ERROR W307, SEARCH FAILURE BR GEXIT2 GEXIT1: CLR -(SP) MOV #1317,-(SP) ;ERROR W317, ILLEGAL COMMAND GEXIT2: IOT TST (SP)+ JMP BERR ;LOOP BEGINS HERE ;DOT=ADR OF BEGINNING SEQ IN PGB ;ADR=TIB ;ARG=# OF TIMES TO LOOK ;PADR=ADR OF A CHAR IN PGB ;TADR=ADR OF A CHAR IN TIB GET2: MOVB #-1,@END ;PUT A -M DEVICE ;WITH FILE NAME LINK11.OVR AND LOGIN OR [1,1]UIC. ; .CSECT .IFDF NOSEG OVRBLD=1 ;PORTIONS OF L1=0 ;BUILD SECTION L2=0 ;ARE NEEDED. L3=0 ;SET ALL SYMBOLS L4=0 L5=0 ;USED IN ADJUSTING L6=0 L7=0 ;ADDRESSES TO WORK L8=0 L9=0 ;IN OVERLAY BEGO01=0 ;ENVIRONMENT BEGO02=0 ;TO 0. BEGO03=0 BEGO04=0 BEGO05=0 BEGO06=0 BEGO07=0 BEGO08=0 BEGO09=0 BEGOVR=0 .ENDC ; ;*****OVERLAY PROCEDURES***** ; ;THE NUMBER OF BYTES ALLOCATED FOR THE ;OVERLAY AREA OVRSIZ=;SHOULD WE ECHO ? BNE O.GET2 ;BR IF YES CMPB R0,#012 ;SEE IF A BEQ O.GET1 ;IF SO SAVE THE PAPER O.GET2: JSR 5,O.FTYP ;ECHO CHARACTER BEQ O.GET ;IGNORE NULLS TSTB O.SCRN ;SHOULD WE PASS ON SPACES? BNE O.GET1 ;BR IF YES CMPB #40,R0 ;CHECK FOR SPACES BEQ O.GET ;IGNORE SPACES O.GET1: RTS R5 ; GENERAL CHARACTER OUTPUT ROUTINE - ODT11X ; ADDRESS OF FIRST BYTE IN R4, ; ADDRESS OF LAST BYTE IN R3, (R3)>(R4) O.TYPE: CMP R3,R4 ;CHECK FOR COMPLETION BLO O.TYP1 ; EXIT WY BR LBDW00 LBDW05: JSR PC,LBOTWR ;WRITE THE END DIR LINE CLRB LBEDIR ;CLEAR THE FLAG JSR PC,LBINRD ;RETURN WITH FIRST OBJ RTS PC ;MODULE LINE IN LINBUF LBINRD: MOV R3,-(R6) ;R3 POINTS TO LINE BUFFER MOV #ILLB,-(R6) READ ;READ NEXT LINE FROM MOV #ILLB,-(R6) ;INPUT LIBRARY WATE BITB #FATER,3(R3) ;ANY FATAL ERRORS? BEQ LBIR00 ;NO - BRANCH MOV #2,R0 ;SET INPUT LIBRARY CODE JMP LBFTER LBIR00: RTS PC LBOTWR: MOV R3,-(R6) ;R3 POINTS TO LINE BUFFER MOV #OLLB,-(R6) WRI1 AT END MOV #TIB,ADR ;(THERE IS A ZERO AFTER ;STRING IN TIB GET3: MOV DOT,PADR MOV ADR,TADR G31: CMPB @PADR,@TADR BNE G32 INC PADR INC TADR BR G31 G32: TSTB @TADR BEQ HIT TSTB @PADR BLT NOHIT INC DOT BR GET2 NOHIT: CMPB CMD,#CG ;IS THIS A WHOLE CMD? BEQ GEXIT ;NO TST NOINFG ;CHECK FOR AN INPUT DEVICE BNE GEXIT1 ;SORRY-THERE IS NONE TST ENDFLG ;FILE CLOSED BY EF? BEQ NOHIT2 ;NO JMP FORMF1 ;YES-PRINT ERROR NOHIT2: MOV ARG,-(SP) MOV #1,ARG INC EXFLAG 2000 ;1024 DECIMAL BYTES ;THE NUMBER OF WORDS ALLOCATED FOR THE ;OVERLAY AREA OVRWRD=1000 ;512 DECIMAL WORDS ; ;IF THE SYMBOL "OVRBLD" IS DEFINED (VIA A ;PARAMETER ASSIGNMENT) THE RESULTING OBJECT ;MODULE WILL CONSIST OF: ; OVERLAY BUILDER ; OVERLAY #1 ; OVERLAY #2 ; . ; . ; . ; OVERLAY #N ; OVERLAY AREA ; RESIDENT LINK-11 ; ;THE RUN TIME TRANSFER ADDRESS WILL BE ;"STARTB" IN THE OVERLAY BUILDER ; ;IF THE SYMBOL "OVRBLD" IS NOT DEFINED ;THE RESULTING OBJECT MODULE WILL ;COHEN DONE MOVB (R4)+,R0 ;GET A CHARACTER JSR 5,O.FTYP ;TYPE ONE CHARACTER BR O.TYPE ;LOOP UNTIL DONE ; ;CHECKS FOR ^U. IF PRESENT, ECHOS IT ;GOES TO COMMAND DECODER. STACK GETS INITIALIZED O.CU: CMPB O.RDB,#225 ;IS ^U IN TTY BUFFER BNE O.CU1 ;BR TO RETURN IF NOT MOVB #'^,R0 ;ELSE TYPE IT JSR R5,O.FTYP MOVB #'U,R0 JSR R5,O.FTYP MOV #O.UR0,SP ;INT STACK JMP O.DCD O.CU1: RTS 5 ; ;SUBROUTINE TO LOCATE RELOCATION REGISTER NEAREST BUT STILL ;BELOW THE ADDRESS IN O.CAD. RETTE ;WRITE NEXT LINE TO MOV #OLLB,-(R6) ;OUTPUT LIBRARY WATE BITB #FATER,3(R3) ;ANY FATAL ERRORS? BEQ LBOT00 ;NO - BRANCH MOV #4,R0 ;SET OUTPUT LIBRARY CODE JMP LBFTER LBOT00: RTS PC LBINFL: MOV R3,-(R6) ;R3 POINTS TO LINE BUFFER MOV #IFLB,-(R6) READ ;READ NEXT LINE FROM MOV #IFLB,-(R6) ;INPUT FILE WATE BITB #FATER,3(R3) ;ANY FATAL ERRORS? BEQ LBIN00 ;NO - BRANCH CLR R0 ;SET INPUT FILE CODE JMP LBFTER LBIN00: RTS PC LBLSWT: MOV R3,-(R6) ;R3 POINTS TO LINE B JSR R5,NEXT ;YES---DO A NEXT CLR EXFLAG NOHIT3: MOV (SP)+,ARG BIT #EOMDET,RIB+2 BEQ GET2 ;YES---TRY AGAIN NOHIT1: CMP END,BEG BNE GET2 BR GEXIT HIT: CLRB ERFLG ; MOV PADR,DOT ;ADR+1 OF STRING IN PGB DEC ARG ;DONE? BGT GET2 ;NO---GET ANOTHER STRING MOV #TIB,R3 GLP: CLR (R3)+ CMP R3,#ENDTIB BLOS GLP CLRB YNKFLG RTS R5 ;SUBROUTINE NEXT ;ROUTINE TO WRITE CURRENT BUFFER ;AND READ IN A NEW ONE ;USES TMP2;ARG DESTROYED NEXT: TST NOINFG ;ANY INPUT DEVICE? BNE GENSIST OF: ; OVERLAY AREA ; RESIDENT LINK-11 ; ;THE RUN TIME TRANSFER ADDRESS WILL ;BE "LNK" IN RESIDENT LINK-11 ; ; ; ;PARAMETER ASSIGNMENTS WTCMD=1 ;.WAIT OPN=16 ;.OPEN DLT=21 ;.DELETE RLS=7 ;.RELEASE R6=%6 ;REGISTER 6 R7=%7 ;REGISTER 7 ERR9=1640 ;NOT ENOUGH ROOM AT BUILD TIME ;TO ALLOCATE CONTIGUOUS FILE ERR8=2207 ;EOD OR DEVICE ERROR ON OUTPUT ;.TRAN OR DEVICE ERROR ON ;INPUT .TRAN ; ; ;IF IN RSX PROCESS RTH ALWAYS ; .IFDF RSX RTH=1 .ENURNS WITH THE REGISTER ;NUMBER IN R0, AND WITH THE DISTANCE BETWEEN THE REGISTER ;AND (O.CAD) IN O.XXY ;IF NO GOOD RELOC. REG. FOUND, R0 WILL = -1 O.LOC: CLR R0 MOV #-1,O.XXX ;INITIALIZE RELOC. REG. INDEX MOV #177777,O.XXY ;INITIALIZE DISTANCE TO A HIGH VALUE O.LOC4: CMP R0,#O.RLR ;ARE WE DONE COMPARING? BHI O.LOC1 ;BRANCH IF DONE CMP O.RELT(R0),O.CAD ;IS CURR. RELOC. BIAS > (O.CAD)? BHI O.LOC2 ;IF SO, BRANCH -- DON'T SUBTRACT, GET NEXT MOV O.CAD,R1 ;OTHERWISE TAKE THE DIFFERENCE SUFFER MOV #LLLB,-(R6) WRITE ;WRITE THIS LINE MOV #LLLB,-(R6) WATE BITB #FATER,3(R3) ;ANY FATAL ERRORS? BEQ LBLSW0 ;NO - BRANCH MOV #6,R0 ;SET LISTING FILE CODE JMP LBFTER LBLSW0: RTS PC .END LIB00 XIT1 ;NO-ERROR 4 TST ENDFLG ;FILE CLOSED? BEQ NEXT1 ;NO JMP FORMF1 ;YES-ERROR NEXT1: MOV ARG,-(LS) TSTB YNKFLG ;YANK IN PROGRESS? BNE NX3 CLR MKFLG ;CLR MARK MOV #LKBKPO,PWDEV ;LOOP BEGINS HERE NX2: MOV BEG,DOT ;DOT=BEG MOV DOT,MRK MOV #-1,ARG ;WRITE WHOLE BUFFER JSR R5,WRITE ; NX6: CMPB #FF,@THRUB ;LAST CHAR A FF? BNE NX3 ;NO JSR R5,TRLR ;YES---PUNCH TRLR NX3: JSR R5,ZBEG ; KILL BUFFER MOV DOT,END TST YNKFLG ;YANK OR EDIT WHOLE IN PROGRESS? BEQ NX3ADC .IFDF OVRBLD .IFNDF NOSEG .TITLE LINKOB ; ;THE FOLLOWING TABLE CONTAINS THE ;STARTING CORE ADDRESS OF EACH OVERLAY ;IN THE ORDER OF ASCENDING LOCATIONS. ;A 0 WORD TERMINATES THE ENTRIES. ;AS NEW OVERLAYS ARE CREATED THEIR ;POINTERS MUST BE ADDED TO THE END ;OF THE TABLE AND THE OVERLAY ITSELF ;PUT IN THE SAME POSITION ;RELATIVE TO THE OTHER OVERLAYS. ; OVRTAB: .WORD BEGO01 ;OVERLAY #1 .WORD BEGO02 ;OVERLAY #2 .WORD BEGO03 ;OVERLAY #3 .WORD BEGO04 ;OVERLAY #4 .WORD BEGO05 UB O.RELT(R0),R1 ; OF CURR. RELOC. REG. AND O.CAD CMP O.XXY,R1 ;IS THE RESULT THE SMALLEST SO FAR? BHI O.LOC3 ;BRANCH IF YES (UNSIGNED CONDITIONAL) O.LOC2: TST (R0)+ ;OTHERWISE, BUMP R0 FOR NEXT RELOC. REG. BR O.LOC4 ;LOOP BACK FOR NEXT COMPARISON O.LOC1: MOV O.XXX,R0 ;PUT REG.# IN R0 RTS 5 ;JOB OVER, RETURN O.LOC3: MOV R1,O.XXY ;REMEMBER SMALLEST DIFFERENCE IN O.XXY ASR R0 ;AND ASSOCIATED REGISTER NUMBER MOV R0,O.XXX ; IN O.XXX ASL R0 ;RESTORE R0 TO ORIGINAL VALUE BR O.LOC2 ;GO NTMON,LESP #DD A OPNTMO+,P)(SV MO S FMT EM ) SP-(2,10 #OV M TFODB LR C -4DRJAOBR CL C ND.E R ADBJ#OV,DEBJ#ON PE.O O KIBLF NDIF . DCEN . RDENOPC, PSR J IOLK BDFIF . 4:14NK L2 .+.= / BJ/O0 D5RA . -4=. . +4DRJAOB0, #OV M 10.+E BN 4 R+ADBJ OST T3:14NK L DRJAOB4,1657 #OV M 43K1LNE BN R ADBJ OST T -4DRJAOB1,ETRR#EV MO: 92K1LN 43K1LNQ BE F IB LTBTS 2 19NK LNE B TFODB ST T CHEV,DPCR JS C ND.E V DEBJ#OT NI.I O KIBLF NDIF . DCEN . RDITINC, PSR J IOLK BDFIF . 38K1LNE BN G LA FTBTS4 CMP RRIDEV,#LKBKSI BNE NX3A JSR R5,EREAD BR NX301 NX3A: JSR R5,ZREAD ;GET A NEW ONE NX301: BIT #EOMDET,RIB+2 BNE NX4 NX31: CMP END,BEG ; ; CHECK ALSO FOR EOFAND NO DATA BEQ NX4 NX5: DEC @LS ; YES...IS THIS THE LAST NEXT? BGT NX2 ; NO ...KEEP GOING ( ARG IS ON STACK?) NX4: CMPB (LS)+,@LS ;RESTORE STACK RTS R5 ;SUBROUTINE FORM-FEED ;ROUTINE TO OUTPUT A FORN FEED ;CHARACTER TO FILE. FORMF: MOV #LKBKPO,PWDEV TST ENDFLG ;OUTPUT FILE CLOSED? BNE FORMF1 ;YES MOV #F;OVERLAY #5 .WORD BEGO06 ;OVERLAY #6 .WORD BEGO07 ;OVERLAY #7 .WORD BEGO08 ;OVERLAY #8 .WORD BEGO09 ;OVERLAY #9 .WORD 0 ; ;OVERLAY DEVICE OUTPUT TRAN BLOCK ; OVRTBO: .WORD 0 ;DEVICE BLOCK NUMBER OVROSA: .WORD 0 ;MEMORY START ADDRESS .WORD OVRWRD ;WORD COUNT OVRERR: .WORD 2 ;FUNCTION (WRITE) .WORD 0 ;NUMBER OF WORDS NOT TRAN'D. ;RESTART ADDRESS OF OVERLAY BUILDER--- ;RELEASE OVERLAY DEVICE IF STILL INIT'D. AGAIN: TST OVRLB ;IS DATA SET INIT'D BEQ STARTB ;NO .RLSE #OVRFO NEXT COMPARISON. ; ; ;SET A SEGMENT OF MEMORY TO A GIVIEN VALUE. (ENTERED VIA R5) ;FIRST WORD OR BYTE ADDRESS IS IN R4, =TO R3 AT EXIT ;LAST WORD OR BYTE ADDRESS IS IN R3 ;BYTE OR WORD VALUE IS IN R0 ;BYTE OR WORD MODE IS SPECIFIED BY O.BW ; O.ST: O.ST2: CMP #1,O.BW ;IF NOT BYTE MODE, ASSUME WORD BEQ O.ST1 ;BRANCH IF BYTE MODE MOV R0,(R4)+ ;DEPOSIT WORD VALUE, BUMP R4 BY 2 O.ST3: CMP R4,R3 ;ARE WE DONE? BLOS O.ST2 ;BRANCH IF NOT DONE RTS 5 ;OTHERWISE EXIT O.ST1: MOVB R0,(R4): 32K1LN 44K1LNR B +6DRJAOB1,40 #OV M 44K1LNR B +6DRJAOBR CL 4 R-ADBJ OLR C 14.+E BN 6 R+ADBJ,O01#4P CM: T1REER 88NKLIR B 87NKLIT BG 2 REC D O-;N) R0-(),R4-(V MO: 87NKLI PCS RT G REES R8:13NK L2 13NK LBR 6 H1RT;E C ND.E R PTTH,RR1D AD 6 H1RT;B TH RDFIF . RHPT1, RDD A RGPT1, RDD A MESY,UR1D AD MESY,SR1D AD E YM,SR1D AD C YM,SR1D AD B YM,SR1D AD E YMAS,SR1D AD B YMSS1, RDD A ; ; CKTA SOMFRE LUVAN URET RANLE;C )+SP (ST T LLCAT EM ;T GUT EM E OD CSTUEEQ;R) SP-(4, #OVF,R3 JSR R5,PW1C CLR R3 JSR R5,PW1C ;FORCE OUT FORM FEED RTS R5 FORMF1: CLR -(SP) MOV #1321,-(SP) IOT TST (SP)+ JMP BERR ; SUBROUTINE TRAILER ;OUTPUTS 40D NULLS N TIMES TRAILER:MOV #LKBKPO,PWDEV TST ENDFLG ;FILE CLOSED? BEQ .+6 TST (SP)+ BR FORMF1 CMP LKBKPO+6,#LSP BEQ TCONT CMP LKBKPO+6,#HSP BNE TOUT TCONT: JSR R5,TRLR ; OUTPUT 40D NULLS DEC ARG BGT TRAILER ; NOT DONE YET RTS R5 TRLR: JSR R5,PUNCH0 ; TURN PUNCH ON MOV #2,POB+2 ; CHANGE MODE LB ;YES-RELEASE IT ; ;STARTING ADDRESS OF OVERLAY BUILDER STARTB: MOV #OVRTAB,R6 ;INITIALIZE THE STACK START=STARTB ;SET UP TRANSFER ADRESS ;SET UP RESTART ADDRESS .RSTRT #AGAIN ; ;USE THE COMMAND STRING INTERPRETER (CSI) ;TO DETERMINE THE SYSTEM DEVICE AND ;UNIT OF THIS SYSTEM. ; MOV #ONCE,R0 ;ADDRESS OF ONCE ONLY FLAG. TSTB (R0)+ ;BRANCH IF ALREADY BEQ OVER ;DONE ONCE. ;THE FLAG AT ONCE IS CLEARED BY CSI ;DUE TO ITS PROXIMITY TO OVRFB. ;R0 NOW POINTS TO OVRBLK. .CSI1 @R0 ;A ;DEPOSIT BYTE VALUE INC R4 ;BUMP R4 BY 1 BR O.ST3 ;GO TO TEST IF DONE ; CLOSE WORD OR BYTE AND EXIT, ; UPON ENTERING, R2 HAS NUMERIC FLAG, R4 HAS CONTENTS O.CLSE: TST R2 ;IF NO NUMBER WAS TYPED THERE IS BEQ O.CLS1 ;NO CHANGE TO THE OPEN CELL CMP #1,O.BW BEQ O.CLS2 ;JUMP IF BYTE MODE BHI O.CLS1 ;JUMP IF ALREADY CLOSED O.CLS4: MOV R4,@O.CAD ;STORE WORD O.CLS3: BR O.CLS1 O.CLS2: MOVB R4,@O.CAD ;STORE BYTE O.CLS1: RTS PC O.CRLF: MOV #O.CR+1,R3 ;LWA BR O.CRS O.CRLS: M CKTA SHE TONE AS BCKTA SEW;N) SP-(B, SOV M ; LEAB TORCTVEM TEYS SORITON MHE TIN; E LUVAW NEO TSEBAK ACSTT SERE; ; B ,SR1D AD P ,SR1D AD - ES;Y R1L AS: 88NKLI E?ON;D 87NKLIT BG 2 RSR A R22, DOV M DSOR WINS NTMERENC;I R1R AS E YMUSW NES INTAON CR0 ;0 ,RR1D AD 1 ,RD1V MO 0 ,RR4V MO 4 ,RMESY UOV M D2P, SUB S D2E,YMUSV MO 1 ,DMESY UUB S D1M,ND EOV M EGVRSA: 00VTMO EV DBJ OSEEAEL R &SELO-CES;Y R5S RT: ELLR CG INADREN OEPKEO-;N ADREREQ BE ? PETAF OND;E) R01(,- TO UNF ASCII MOV #50,R4 ZTR1: CLR R3 ; MOVE 40D NULLS TO BUFFER JSR R5,PW1C DEC R4 BNE ZTR1 JSR R5,P3 ; OUTPUT BUFFER MOV #FASCII,POB+2 ; CHANGE MODE BACK TO FASCII TOUT: RTS R5 ;SUBROUTINE WRITE ;ROUTINE TO WRITE FILE LIMITS ;FROMA,THRUB---GIVEN BY ARG PUNCH0: CMP #LSP,LKBKPO+6 ; ROUTINE TO TURN LSP ON BNE PEXIT TST PNCHON BNE PEXIT JSR R5,TPCHON INC PNCHON PEXIT: RTS R5 EWRITE: TST LKBKSO BEQ P4 EWRIT1: MOV #LKBKSO,PWDEV BR WRITE1 WRITE: TST ENDFLG ;DDRESS OF CMDBUF ;THE LINE IS SYNTACTICALLY ACCEPTABLE, THUS ;THE RETURN FLAG ON TOP OF STACK IS IGNORED. MOV R0,@R6 ;ADDRESS OF OVRBLK EMT 57 ;CSI2 TST (R6)+ ;CORRECT STACK OVER: MOV #OVRLB,R1 ;LINK BLOCK CLR @R1 ;FOR ^C BEGIN MOV #OVRFB,R2 ;FILE BLOCK MOV #OVRTBO,R3 ;OUTPUT TRAN BLOCK ;.INIT OVERLAY DEVICE .INIT R1 ;OBTAIN DEVICE STATUS .STAT R1 CMP (R6)+,(R6)+ ;CORRECT STACK. ;PHYSICAL BLOCK SIZE MOV @R6,R4 ;(IN WORDS) OF OVERLAY DEVICE MOV #OVRWRD,-(R6) JSR R7, MOV #O.CR+2,R3 ;LWA * O.CRS: MOV #O.CR,R4 ;FWA JSR 5,O.TYPE ;TYPE SOMETHING RTS R5 ;SUBROUTINE O.RORA ;FUNCTION: DECIDE IF AN ADDRESS IS ;TO BE PRINTED IN ABSOLUTE OR IN RELATIVE ;FORM. IF THE FLAG O.FORM=0 THEN PRINT ;IN RELATIVE FORM, OTHERWISE PRINT IN ;ABSOLUTE FORM. ;IF THE ADDRESS IS TO BE PRINTED IN RELATIVE ;FORM, ;THEN THE ADDRESS WILL BE PRINTED OUT ;RELATIVE TO A RELOCATION REGISTER NEAREST ;BUT STILL BELOW THE ADDRESS. IF NO SUCH ;RELOCATION REGISTER EXIST THEN THE OF#EB IT B DCEN . EVJDOB #ITWA . IOLK BDFFN.I . OT EILNT UADRES-YE ; IGIO: ADRERE SEEAEL R &SELO CTOO -GNO ;L RECLQ BE ? RYRAIB LPETAR PEPA ;S PETAB ST TT:EORD 6PETA ; T EO . DCEN . 21 ;0 10R2 E SX RDFFN.I 5 ;1 0015ER 8 ;0 80R0 E UEIQUNT NOE AM NLEDUMO5- ;0 50R0 E OWFLEROVL BOYM-S;1 0001ER: ABGTBI 8-;2K IN,L5522 H RTD BA7-;2 ,02513 E RGLAO TOT ECCS6-;2 ,02313 L ALH TCCA5-;2K IN,L5322 N IOITOS PB.LIE OR CAD-B24 ;NKLI0,25 2 23 ;0 2,32 1 22 ;NKLI5,20 2 20 ;NKLI4,20 2 FILE CLOSED BNE FORMF1 ;YES MOV #LKBKPO,PWDEV WRITE1: JSR R5,PUNCH0 JSR R5,GLM ;GET LIMS P0: MOV FROMA,R4 CMP THRUB,R4 BHIS P1 RTS R5 P1: MOVB (R4)+,R3 P2: JSR R5,PW1C BIT #EOMDET,POB+2 ;OUTPUT MEDIUM FULL? BNE P5 ;YES CMP R4,THRUB BLOS P1 MOVB #VERTAB,@POBPTR ;TACK ON VT IN CASE NO TERMINATOR INC POBBC P3: MOV #POB,-(SP) MOV PWDEV,-(SP) EMT WRITCD ;WRITE ON OUTPUT DEV MOV PWDEV,-(SP) EMT WAITCD ;WAIT ON OUTPUT DEVICE BIT #EOMDET,POB+2 ;OUTPUT DEVICE FULL? DIVIDE MOV (R6)+,R5 ;NUMBER OF PHYSICAL ;BLOCKS PER OVERLAY CLR -(R6) MOV #OVRTAB,R0 BLDR01: TST (R0)+ ;TOP OF STACK BEQ BLDR02 ;CONTAINS TOTAL ADD R5,@R6 ;NUMBER OF PHYSICAL BR BLDR01 ;BLOCKS REQUIRED. BLDR02: MOV #64.,-(R6) ;DIVIDE PHYSICAL BLOCK MOV R4,-(R6) ;SIZE BY 64 (DECIMAL) JSR R7,DIVIDE ;QUOTIENT ON STACK. MOV (R6)+,R0 ;NUMBER OF 64'S IN ;PHYSICAL BLOCK MOV @R6,R4 ;TOTAL NUMBER OF ;PHYSICAL BLOCKS REQUIRED BLDR03: DEC R0 BEQ BLDR08 ;TOTAL NUMBER O;ADDRESS WILL BE PRINTED IN ABSOLUTE FORM ;INPUT: THE ADDRESS TO BE PRINTED IS IN R0. ;DATA SAVED: R0 CONTAINING THE ADDRESS TO BE ;PRINTED, AND LOCATION O.CAD CONTAINING ;THE CURRENT ADDRESS WERE SAVED AND RESTORED. ;CALLED: JSR 5,O.RORA O.RORA: CMP #0,O.FORM ;CHECK FORMAT BEQ O.NOTA ; GO TO O.NOTA IF RELATIVE O.ABS: JSR 5,O.CADV ;PRINT ABSOLUTE ADDRESS RTS R5 O.NOTA: MOV O.CAD,O.TMP1 ;SAVE O.CAD MOV R0,O.TMP2 ;SAVE R0 MOV R0,O.CAD ;PREPARE INPUT FOR O.LOC JSR 5,O.LOC ; FIND BEST ESCHITSWY AN MOO-T19 ;NKLI3,20 2 ERFFBUI CSN IOMROO -N18 ;NKLI3,22 2 ECSPT PUING INSSMI7-;1K IN,L0622 E IN LSI CINX TAYN SAD-B16 ;NKLI6,22 2 GEAN ROFT OUX DEINP UM-J14 ;NKLI0,22 2 RA TOR FONTIEC SNDFIT N'CA3-;1K IN,L1722 A TRD IN F'TAN-C12 ;NKLI6,21 2 MENAN IOCTSED IN F'TAN-C11 ;MFER5,21 2 LD RINT AS LOT NOD MPC0-;1F RM,E1222 D RLN IRELUAI FCHARSEL BALO-G;9F RM,E1122 R ROERE BLTAL BOYM-S;7F RM,E1022 S IETRENT ECCSY AN MOO-T;6 ,02413 E AM ND.MOJ OBT NOD GSN ISTIR-F;4F RM,E1422 D GSO -N;3F  BNE P5 ;YES MOV #POB+6,POBPTR CLR POBBC CMP PWDEV,#LKBKSO BNE P41 MOV #LKBKSO,-(SP) EMT CLOSCD MOV #LKBKSO,-(SP) EMT WAITCD ;WAIT FOR CLOSE WRITOP: MOV #FNBKSO,-(SP) ;OPEN SUB FILE FOR NEXT OUTPUT MOV #LKBKSO,-(SP) EMT OPENCD MOV #LKBKSO,-(SP) EMT WAITCD ;WAIT FOR OPEN P41: RTS R5 P4: CLR -(SP) MOV #1317,-(SP) IOT TST (SP)+ JMP BERR P5: MOV POB+2,(SP) BIC #377,(SP) SWAB (SP) MOV #2202,-(SP) IOT JMP REINIT ;ROUTINE TO MOVE CHARS TO OUTF ADD R4,@R6 ;64 (DECIMAL) WORD BLOCKS BR BLDR03 ;REQUIRED ON TOP OF ;STACK ;DELETE FILE IF ALREADY EXISTING BLDR08: MOV #BLDR04,-4(R2) ;ERROR RETURN .DELET R1,R2 BLDR04: CLR -4(R2) ;ERRORS TO MONITOR ;ALLOCATE THE NECESSARY SPACE FOR ONE ;CONTIGUOUS FILE. MOV R2,-(R6) ;FILE BLOCK MOV R1,-(R6) ;LINK BLOCK EMT 15 TST (R6)+ BLT BLDR09 ;SPACE AVAILABLE? CLR -(R6) ;NO. MOV #ERR9,-(R6) ;FATAL ERROR. BR BLDR10 ; ;DETERMINE THE PHYSICAL STARTING BLOCK ;OF THE CONTIGUOUS FIN TST R0 ;IF = -1, PRINT IN ABS. BLT O.ABS1 ADD #60,R0 ; CONVERT N TO ANSCII JSR 5,O.FTYP ; TYPE N MOV #',,R0 ; PREPARE INPUT FOR O.FTYP JSR 5,O.FTYP ; TYPE COMMA MOV O.BW,-(SP) ; SAVE O.BW MOV #2,O.BW ;ARTIFICIALLY SET MODE FOR WORDS MOV O.XXY,R0 ;PREPARE INPUT FOR O.CADV JSR 5,O.CADV ;TYPE RELATIVE AMOUNT MOV (SP)+,O.BW ;RESTORE MODE MOV O.TMP1,O.CAD ; RESTORE O.CAD MOV O.TMP2,R0 ; RESTORE R0 RTS R5 O.ABS1: MOV O.TMP2,R0 ;RESTORE R0,CAD BEFORE MOV O.TMP1,O.CAD ;TYPING IRM,E1322 2 ;NKLI3,24 2 B:TASG M; ERRD OINY TLACEXE BLTAR ROERE THL LEALAR PSTMUB TASG MLEAB THE;T ;2 5+R1ER1=R2ER +208RR=E15RR E2 5+R0ER8=R0ER +201RR=E05RR E +2APTRG+MSIG=B01RR EP RA-T28RR=ESGGMBI ;G INDLAN HALCIPE SVEHAS GESAES MNGWILOOL FHE;T ;2 7+R2ER8=R2ER +226RR=E27RR E2 5+R2ER6=R2ER +224RR=E25RR E2 3+R2ER4=R2ER +222RR=E23RR E2 0+R2ER2=R2ER +219RR=E20RR E2 8+R1ER9=R1ER +217RR=E18RR E2 6+R1ER7=R1ER +214RR=E16RR E2 3+R1ER4=R1ER +212RR=E13RR E2 1+R1ER2=R1ER +210RR=E11RR E2 9+R0ER PUT BUFFER M2OB: MOV (R5)+,M2OB1 TST PNCHON ;WAIT FOR A CHAR IF LSP ON BEQ M2OB0 JSR R5,TPCHON CLR PNCHON M2OB0: MOV #0,-(SP) M2OB1=.-2 MOV #LKBKCO,-(SP) EMT WRITCD MOV #LKBKCO,-(SP) EMT WAITCD RTS R5 ;SUBROUTINE INSRT ;THIS ROUTI;CHARS FROM DOT...(FROMA)... ;THRU END-1...(THRUB) ;TO THE END OF THE ;PAGE BUFFER AND RETURNS ;TO MAIN TO ACCEPT KBD ;INPUT AT DOT. ;UPON RE-ENTRANCE, IT ;MOVES THE ORIGINAL DATA ;ADJACENT TO THAT WHICH ;WAS INSERTED INSRT: M LE AND PLACE IT ;IN THE 1ST WORD OF THE OUTPUT TRAN BLOCK. BLDR09: .LOOK R1,R2,1 MOV (R6)+,@R3 ;STARTING BLOCK. CMP (R6)+,(R6)+ ;CORRECT STACK ;THE ONE CONTIGUOUS FILE WILL CONTAIN ;N OVERLAYS WITH EACH BEGINNING AT THE ;START OF A PHYSICAL BLOCK ON THE DEVICE ; MOV #OVRTAB,R0 BLDR07: MOV (R0)+,OVROSA ;MEMORY START ADDRESS BEQ BLDR05 ;TRAN OUT AN OVERLAY. ; .TRAN R1,R3 ;WAIT FOR COMPLETION OF TRANSFER ; .WAIT R1 ;CHECK FOR ERROR ON TRANSFER ; BIT #140000,OVRERR BEQ BLDR06 ;ER N ABSOLUTE BR O.ABS ; ; MOD40 PACK - ENTERED WITH JSR PC, PACK00 ; ; INPUT: R0=ADR OF MOD40 WORD (1 WORD) ; R1=ADR OF ASCII CHARACTERS (3 CHARS) ; ; OUTPUT: R1 POINTS ONE PAST END OF ASCII STRINT ; THE MOD40 WORD IS FORMED AS ; N=C1*40^2+C2*40+C3 ; ; R2,R3,R4 ARE CLOBBERED PACK00: PACK01: MOV #-3,R4 ;LOOP CT. CLR R2 ;0 SUM PACK05: MOVB (R1)+,R3 ;GET NEXT ASCII CHAR. CMPB #' ,R3 BEQ PACK02 ;"BLANK" CMPB #'$,R3 BEQ PACK04 ;"$" CMPB R3,#'A BLO PACK03 ;"." OR "0-9" 0=R1ER +207RR=E09RR E2 6+R0ER7=R0ER +204RR=E06RR E2 3+R0ER4=R0ER +202RR=E03RR E1 P+RA=T02RR E; REHEO GESYPOTOTPRE AGSSMER ROER ;; 23THER ; DCEN . S.HETCWI SOFS UEAL;V 00NSCOD OR.W S VESA& S RTVEON;C APTRT+-J=.AVNSCO SWT /RF OESLUVA ;0 A0TV RRDWO . ESAV SND ATSERNVCO ;P RA+TJT.-S=ALTV R3 H2RT;B TH RDFIF . DCEN . 46BRSUD OR.W . ERLLRONTCOY LAEROVE IM TUN;R APTRT+-J=.RLNTCO EGOS NDFFN.I 0 D0EA RRDWO . APTRT+-J=.ERADRE 00EVOND OR.W P RA+TJT.-L=VANE O0 V0NOD OR.W P RA+TJT.-L=VANO OV #MODE,R4 ;GET ADR OF MODE ;THRUB ;TO HERE ;FROMA COM (R4)+ ;CHANGE MODE;IN1 BEQ IN2ND ;SECOND TIME THRU ;FIRST TIME THRU IN1ST: MOV LAST,TMPSTO ;SET UP TMP STORAGE SUB END,TMPSTO ;TMPSTO=LAST-END CMP TMPSTO,#110 ;ENOUGH ROOM LEFT FOR INSERT? BHI IN1ST1 ;SURE JMP UBELL IN1ST1: MOV END,@R4 ;THRUB=END-1 DEC (R4)+ MOV LAST,R3 DEC R3 SUB END,R3 ADD DOT,R3 ;TOHERE=LAST-END+DOT MOV R3,@R4 INC (R4)+ MOV DOT,@R4 ;FROMA=DOT MOV DOT,ADR ;ADR=DOT MOV DOTROR ON TRANSFER MOV OVRERR,-(R6) ;PUSH STATUS BYTE BIC #377,@R6 ;INTO LOW INFO BYTE SWAB @R6 ;AND CLEAR THE REST. MOV #ERR8,-(R6) ;ERROR CODE BLDR10: IOT .EXIT ;RETURN TO MONITOR BLDR06: ADD R5,@R3 ;CHANGE BLOCK NUMBER ;IN TRAN BLOCK FOR BR BLDR07 ;NEXT OVERLAY TRANSFER ; ;ALL OVERLAYS HAVE BEEN TRAN'D OUT. ; BLDR05: .RLSE R1 ; ;RETURN TO THE MONITOR .EXIT ;*****OVERLAYS BEGIN HERE***** ; ; OVERLAY #1 L1=BEGOVR-BEGO01 ;COMPUTE OFFSET FROM ;RUN TIME OVERLAY ARE SUB #40,R3 ;"A-1" PACK02: SUB #16,R3 PACK03: SUB #11,R3 PACK04: SUB #11,R3 ; MULT R2 BY 40. ASL R2 ;2*R2 ASL R2 ;4*R2 ASL R2 ;8*R2 MOV R2,-(SP) ;STACK 8*R2 ASL R2 ;16.*R2 ASL R2 ;32.*R2 ADD (SP)+,R2 ;40.*R2 ; INCLUDE CURRENT CHARACTER ADD R3,R2 INC R4 ;DONE 3 CHARS? BLT PACK05 ;NO MOV R2,(R0)+ ;YES-STORE MOD40 WORD RTS PC ;EXIT ; ; MOD40 UNPACK - ENTERED VIA JSR PC,UNPA00 ; ; INPUT: R0=ADR OF MOD40 NUMBER (1 WORD) ; R1=ADR OF ASCII STRING (3 BYTES) 00VTMOD OR.W P RA+TJT.-B=TAOV M0 S0IR DRDWO . CHARSEY ORCTREDI ;P RA+TJT.-R=RSDI 00PTIND OR.W H TR PATT ERNS;IP RA+TJT.-H=TRNP I0 R0WS SRDWO . CHARSEH TCWI;S APTRT+-J=.SRSW 00TSGED OR.W ERNTOI PMENAN IOCTSET GE ; APTRT+-J=.ECTSGE 00MOSYD OR.W ) ALAT(FW LORFVE OOLMBSYR FOK ECCH ; APTRT+-J=.VFMOSY 00USIND OR.W L BOYM SEDINEFND URTSEIN ; APTRT+-J=.YMUSIN 00MOSRD OR.W E AM NLEDUMOR FOH RCEA;S P RA+TJT.-N=ODRM S0 Y0NS IRDWO . MESYT ARTSEIN ; APTRT+-J=.MESYIN 00GLPTD OR.W L BALO GTOR ,SVDOT ;SAVE DOT FOR CHANGE COMMAND JSR R5,MOVEBUF SUB #50,TMP4 MOV TMP4,NL ;NL=50 FROM TOP OF MOVED TEXT RTS R5 IN2ND: MOV LAST,(R4)+ ;THRUB=LAST MOV (R4)+,@R4 ;FROMA=TOHERE MOV ADR,-(R4) ;TOHERE=ADR ADD COUNT,END ; END=END+NUM CHARS INSERTED CMP MRK,DOT ; DIDDLE MARK FOR INSERTS AND C & X BLO INEX1 CMP CMD,#CI BNE INEX2 MOV ADR,MRK BR INEX1 INEX2: ADD COUNT,MRK INEX1: MOV ADR,DOT ;DOT=POSITION AFTER INSERT INEX: JSR R5,MOVEBUF ;MOVE BUFFER BACK RTS R5 ;RETURN A BEGO01: ;JUMP TABLE TO ENTRY POINTS ;IN THIS OVERLAY. ; JMP START1 ;ENTRY1 .ENDC ; ; CREATE COMD ; ; INIT THE OUTPUT DATA SET TO HSP. ; ; ; INITIALIZE LOAD MODULE DATA SET ; START1: TST LODDEV+6-L1 ;ANY LOAD MOD OUTPUT? BEQ LINK24 ;NO-- ; INIT OUTPUT DATA SET, DELETE OUTPUT FILE ; OPEN OUTPUT FILE MOV #OPLOD-BEGO01+BEGOVR,LODADR-4-L1 ;SET UP ERROR RETURN .INIT #LODDEV ;INIT THE DATA SET TST LODADR+4-L1 BNE .+10 MOV #0,LODADR+4-L1 .=.-4 .RAD50 /LDA/ .=.+2 .DELET ; ; OUTPUT: R1 POINTS ONE PAST LAST GENERATED CHARACTER ; ; ; IF N IS THE MOD40 NUMBER, THEN ; N=C1*50 ^ 2+C2*50+C3 ; THUS, N/50^2 IS C1 AND THE REMAINDER IS C2*50+C3 ; THE REMAINDER IS DIVIDED BY 50 TO GET C2 ETC. ; UNPA00: UNPA07: MOV #-3,R5 ;MINOR LOOP COUNT MOV (R0),R0 ;GET MOD40 WORD MOV #COEFF,R2 ;PTR TO COEFFICIENT TABLE UNPA06: CLR R3 ;0 QUOTIENT ; DIVIDE BY COEFFICIENTS UNPA02: CMP R0,(R2) ;DONE WITH DIVIDE? BLO UNPA01 ;YES SUB (R2),R0 ;NO-SUBTRACT COEFF. INC R3 ;APTT GE ; APTRT+-J=.OBGLPT 00GLSRD OR.W L BALO GOFE LUVAT GE ; APTRT+-J=.OBGLSR 00GSGND OR.W . CKLO BSD-GON NET;G P RA+TJT.-D=GSGN 00SDGGD OR.W D GST GE ; APTRT+-J=.SDGG 00OPIOD OR.W . UT PUTTPOUE ULOD MADLO ; APTRT+-J=.OPIO 00OIIOD OR.W T NI IUTTPOUE ULOD MADLO ; APTRT+-J=.OIIO 00ICIOD OR.W E ASLERED ANE OSCLT PUINE ULOD MBJ;O P RA+TJT.-C=OI I0 G0OI IRDWO . ET GUTNP ILEDUMOJ OB ; APTRT+-J=.IGIO 00IIIOD OR.W . ITINT PUINE ULOD MBJ;O P RA+TJT.-I=OI I0 T0AP MRDWO . CEVIDEP MAN OPETY ;SUBROUTINE UNSAVE UNSAVE: MOV LAST,R4 MOV ABSLAST,R3 SUB R4,R3 ;LENGTH OF SAVED TEXT IN R3 BEQ UNERRO SUB END,R4 ;FREE SPACE IN R4 CMP R4,R3 BLOS UNSERR ;TOO BAD-NOT ENOUGH ROOM MOV END ,R4 MOV LAST,R3 UNOPN: MOVB -(R4),-(R3) ;MOVE TEXT DOWN TO MAKE ROOM CMP R4,DOT ;DONE? BHI UNOPN ;NO MOV R3,UTMP MOV DOT,TMPSTO MOV LAST,R3 SAVELP: MOVB (R3)+,(DOT)+ ;MOVE IN SAVED TEXT CMP R3,ABSLAST ;DONE? BLO SAVELP MOV UTMP,R3 MOV DOT,R4 UCLOSE: MOVB (R3)+,(R4)+ ;CL#LODDEV,#LODADR ; IF THE FILE ALREADY EXISTED IT WAS ; DELETED AND CONTROL WAS RETURNED ; NORMALLY. ; IF THE FILE DID NOT EXIST, THE ERROR ; RETURN "OPLOD" WAS TAKEN. ; ; OPEN LOAD MODULE FILE ; OPLOD: CLR LODADR-4-L1 ;NOW LET MON HANDLE ERRORS INCB LODOPF-L1 ;INDICATE LOAD MODULE OPENED TST LODADR+4-L1 BNE .+10 MOV #0,LODADR+4-L1 ;SET DEFAULT EXTENSION .=.-4 .RAD50 /LDA/ .=.+2 .OPEN #LODDEV,#LODADR ; INIT OUTPUT ; LINK24: IOOI ;SETS R0,R1 TO PROPER BUFFER ; ; SET UP THE BDD 1 TO QUOTIENT BR UNPA02 ; DIVIDE DONE. QUOT IN R3, REMAINDER IN R0 ; CONVERT TO AN ASCII CHARACTER UNPA01: TSTB R3 BEQ UNPA03 ;"BLANK" CMPB R3,#33 BEQ UNPA05 ;"$" BGT UNPA04 ;"." OR "0-9" ADD #40,R3 ;"A-Z" UNPA03: ADD #16,R3 UNPA04: ADD #11,R3 UNPA05: ADD #11,R3 MOVB R3,(R1)+ ;STORE CHARACTER TST (R2)+ ;ADVANCE TO NEXT COEFF. INC R5 ;DONE 3 CHARS? BLT UNPA06 ;NO-DO MORE MOV (SP),R0 ;RESTORE ORIGINAL R0 AND TST (R0)+ ;MOVE TO NEXT WORD RTS PC ; ; COEFF ;P RA+TJT.-P=TYAP M0 P0MA PRDWO . AP MADLOT INPR ; APTRT+-J=.APPM 00SQUND OR.W E BLTAN ILEHOA E AK;M P RA+TJT.-H=ISQUNS U0 I0QU SRDWO . LEAB TOMFRS RDWOE OVEM;R P RA+TJT.-H=ISQU S0 E0YP TRDWO . TY TONR FEUF B APETY ; APTRT+-J=.PETY 00TPGED OR.W E LUVAC PNTREUR CET;G P RA+TJT.-C=TPGE 00TPTXD OR.W K OCBLT TXO NT IUT;P P RA+TJT.-T=PUXT T0 R0ES RRDWO . RSTEISEG RRETOES;R P RA+TJT.-G=REES R0 R0AV SRDWO . RSTEISEG RVESA ; APTRT+-J=.EGVRSA 00OAOTD OR.W N IORSERNVCOI CIASO TALCT;O P RA+TOSE GAP CMP R3,LAST BLO UCLOSE CMP TMPSTO,END ;IF INSERT NOT AT END,DON'T DECREMENT BLO UCL1 DEC R4 UCL1: MOV R4,END ;NEW END CMP END,MAX ;NEAR THE END BHIS UBELL ;YES RTS R5 UTMP: .WORD 0 ;SUBROUTINE SAVE SAVE: JSR R5,GLM MOV THRUB,R3 SUB FROMA,R3 ;ARGS IN RIGHT ORDER? BGT SAVE1 RTS R5 ;NO SAVE1: MOV ABSLAST,LAST ;CLEAR SAVE BUFFER MOV LAST,R4 SUB END,R4 ;ROOM LEFT IN R4 ASL R3 ;MULTIPLY SAVED TEXT ROOM BY 2 CMP R3,R4 ;SAVED TEXT<1/2 ROOM AVAILABLE? BUFFER AND DUMP IT. USE R0,R1 AS POINTERS. ; MOV #COMDSZ,(R0) ;SET BC ; SET COMD LOAD ADDRESS MOV LOWADR-L1,-(SP) ;ASSUME LOWADR IS OK. CMP PRSIZE-L1,#COMDSZ ;IS PROGRAM SMALLER THAN COMD? BHIS LINK15 ;NO - USE LOWADR CLR (SP) ;ASSUME 0 AS LOAD ADDRESS. CMP TOPMEM-L1,#COMDSZ ;IS TOP TOO LOW? BLO LINK15 ;YES - USE 0 AS LOAD ADDRESS MOV TOPMEM-L1,(SP) ;YES - PUT COMD UP AGAINST TOP. SUB #COMDSZ,(SP) ;CALCULATE CORRECT ADDRESS. LINK15: MOV (SP)+,(R1)+ ;SET LOAD ADDRESS FOR COMD. MOVICIENT TABLE ; COEFF: +1600. ;40. ^ 2 +40. ;40. ^ 1 +1. ;40. ^ 0 O.BW: .BYTE 0 ; =0 - ALL CLOSED ; =1 - BYTE OPEN, ; =2 - WORD OPEN .EVEN O.CAD: 0 ; CURRENT ADDRESS O.DOT: 0 ; ORIGIN ADDRESS O.XXX: .WORD 0 ;TEMPORARY STORAGE O.XXY: .WORD 0 ;2ND WORD OF TEMPORARY STORAGE O.SEQ: .BYTE 0 ;CHANGE SEQUENCE INDICATOR O.WDFG: .BYTE 0 ;SEARCH FLAG = 1 - EFFECTIVE ; = 0 - WORD O.S: .BYTE 0 ;SINGLE INSTRUCTION FLAG ;0 IF NOT ACTIVE ;-1 IF ACTIVE JT.-A=TO O0 A0NP URDWO . CKPAUN0 D4MO ; APTRT+-J=.CKPAUN T: JE:BLTA J; LEAB TMPJU; ;E INUTROE THO TGO ;$ 2BR S ESDRADL UACT AET;G) SP,(-1SGGMBIB-TAIG#BD AD: 1$ TSAN WERUSE THE ERWHO ;G )+SP@(P JM S ESDRADE INUTROE THT GE ;P)(S,-)+SP@(V MO: 2$ S YE ;C PTS R )+SP (ST T NO ;$ 2NE B N?URET RLEMPSIA T IIS ;) SP@(T TS S ESDRADH TCPAIS DTOT INPO ;) SP,(#2D AD T IO E AGSSMEE TH ;P)(S,-P)(S@2V MO E SUIS ;) SP-(R CL: 3$ LEAB TOFS ESDRADT ARSTD AD ;P)(SB,TASG#MD AD O TWS METI ;) SP (SL AHIS SERR ;NO MOV THRUB,R3 INC R3 MOV LAST,R4 SLOOP: MOVB -(R3),-(R4) CMP R3,FROMA ;DONE WITH SAVE? BHI SLOOP ;NO SOUT: MOV R4,LAST SUB #500,R4 ;NEW MAX MOV R4,MAX CMP R4,END ;GETTING NEAR END OF PGB? BLO UBELL ;YES RTS R5 SERR: CLR -(SP) MOV #1303,-(SP) ;ERROR W303, BUFFER OVERFLOW BR UNEREX UBELL: CLR -(SP) MOV #1320,-(SP) ;ERROR W320, PAGE BUFFER ALMOST FULL BR UNEREX UNSERR: CLR -(SP) MOV #1310,-(SP) ;ERROR W310, NO ROOM TO UNSAVE BR UNEREX UNERRO: CLR  #6001,(R1)+ ;SET COMMAND FOR 12. GENERAL WORDS. MOV LOWADR-L1,(R1)+ ;SET PROGRAM LOW ADDRESS .IFDF RTH ;BRTH20 TSTB RTF-L1 ;RTH WITH MODULE? BEQ .+16 ;NO- SUB SS-L1,-2(R1) ;YES, LA=LA - STACK SIZE SUB #2,-2(R1) .ENDC ;ERTH20 MOV PRSIZE-L1,(R1)+ ;SET PROGRAM SIZE .IFDF RTH ;BRTH21 TSTB RTF-L1 ;RTH WITH MODULE? BEQ LNK177 ;NO- TSTB NOIOF-L1 BEQ .+10 ADD RTHSIZ-L1,-2(R1) .ENDC ;ERTH21 LNK177: MOV TRA-L1,(R1)+ ;SET TRA MOV TRADDT-L1,(R1)+ ;DDT ADDRESS CLR (R1)+  ;NO BREAK BOINTS MAY BE SET WHILE IN ;SINGLE INSTRUCTION MODE O.T: .BYTE 0 ; T-BIT FLAG O.P: .BYTE 0 ;PROCEED FLAG = -2 IF MANUAL ENTRY ; -1 IF NO PROCEED ALLOWED ; 0-7 IF PCEED ALLOWED O.CSR1: .BYTE 0 ;SAVE CELL - R C/SR O.CSR2: .BYTE 0 ;SAVE CELL - T C/SR O.CMFD: .BYTE 0 ;COMMA FOUND SWITCH, =0 NO COMMA FOUND ; =1 COMMA FOUND O.SMFD: .BYTE 0 ;SEMICOLON FOUND SWITCH ;=0 NO SEMICOLON FOUND ;=1 SEMICOLON FOUND O.ALF1: .BYTE 0 O.ALF2: .BYTE 0 O.ALF3: .BYT ES;Y 1$I BH ? ALCIPE S AISTHS ;IG MSIG#B),SP (MP C ONTISIPOE BLTAT GE ;P)(S1,P+RA#TB SU: SGRMER E.INUTROUB STOO ;GC ,P)+SP@(V MO . EXND ILEAB TET;GP @SP,RA-TLEABJT #DD A ES;Y SGRMERE BN ? ICSTNOAGDIR ROER ;) SP,(#1T BI . ONTIUCTRNS IAPTRT GE ;P)(S,-)+SP@(V MO N IOCTRUSTINP RA TOFR ADM OR;F SP,@#2B SU . SSREDD ATN RCKTA;S) SP2(P,@SV MO: PHRA T; LEAB TMPJUD ANR LENDHAP RA T ;; 15RR E NPTINOB NC I R0R,VEON#CV MO E YTHBR,PEOO IVBMO: 25NKLI ;E DI--ORRR EUTTPOUE ULOD MADLO; ; C ND.E"-(SP) MOV #1306,-(SP) ;ERROR W306, EMPTY SAVE BUFFER UNEREX: IOT TST (SP)+ JMP BERR ;SUBROUTINE EMACRO ;ROUTINE TO EXECUTE THE CONTENTS OF THE SAVE BUFFER AS A COMMAND ;STRING N TIMES. WORKS BY MOVING THE CONTENTS OF THE SAVE BUFFER ;INTO THE CIB AND SETTING FLAGS,WHICH WILL CAUSE THE COMMAND DECODER ;TO TO BEGIN AT BEGINNING OF CIB AND LOOP N TIMES EMACRO: TST MACFLG ;ARE WE IN A MACRO ALREADY? BNE ZMERR2 ;YES MOV LAST,R3 ;END OF PGB IN R3 ZMAC1: CMP R3,ABSLAST ;SAVE BUFFER EMPTY? #;NOT LOAD-TIME RELOCATABLE MOV SYMC-L1,R2 MOV (R2)+,(R1)+ ;SET MODULE NAME MOV (R2)+,(R1)+ .IFDF RTH ;BRTH22 TSTB RTF-L1 BEQ LNK179 TSTB NOIOF-L1 BEQ LNK178 TSTB CSIN-L1 ;NAME FROM CSI BNE LNK178 ;YES- MOV -4(R1),NAM1-L1 ;NO-FILL NAME FROM COMD MOV -2(R1),NAM2-L1 BR LNK179 LNK178: MOV NAM1-L1,-4(R1) ;NO-FILL NAME FROM COMD MOV NAM2-L1,-2(R1) LNK179: CLRB NOIOF-L1 .ENDC ;ERTH22 ; ; SET .IDENT ; ADD #BPSYM,R2 ;R2 POINTS TO FLAG WORD OF NEXT ;ENTRY IN SYMBOL TAB$E 0 O.SCRN: .BYTE 0 ;FLAG; 1=PASS SPACES ON FROM TTY ;ALSO, IF =1, IS ECHOED O.ID: .BYTE 012 .BYTE 015 .BYTE 177 .ASCII /ODT-11R V004A/ O.IDND=.-1 .EVEN O.BD: .WORD "BE O.BIAS: .WORD 0 ;CURRENT RELOCATION BIAS O.MINS: .BYTE 0 ;MINUS SIGN TYPED (SWITCH) ;0=NO MINUS TYPED; 1=MINUS SIGN TYPED .EVEN O.TMP1: .WORD 0 ;SAVE CELL O.TMP2: .WORD 0 ;SAVE CELL O.CR: .BYTE 015 ; .BYTE 012 ; .BYTE '* ; * O.LGCH: .BYTE '; ; .BYTE '/ ; / .BYTE '\ ; \ (BACK 1 RTTA SMP J EGOS NDFIF . DCEN . Y1TRENP JM 1 #AYRLVE;O 1RDWO . RLNTCO T PUINI CSF ;O EGOS NDFFN.I E IN LSTIR FTOK AC;B NELI FRBCL S AS PCBIN 2 R2ER 4 .+Q BE 0 OWEL BTBTS: 29NKLI B TAYM SRBCL F OPTB SRBCL E ASLERET EM E OSCLT EM ) SP-(),SP (OV M P)(S,-EVBDST #OV M8:K2IN L; T.SEA AT DSEEAEL RND ALEFIE BLTAL BOYM SSELO;C ;5 K2IN LMP J +6 .EQ B EROPIOB ST T ERFFBUT AS LUTTPOU ; OPIO ) R0 (NC I 0)(RC IN E OD CND EABMTSYT PU- S YE ;)+R1,(0.#1V MO 5 K2IN LMP J +6 .EQ B ER& BHIS ZMERR ;YES CMPB (R3)+,#CR ;LOOK FOR END OF MACRO BNE ZMAC1 ;END OF SVB YET SUB LAST,R3 ;LENGTH OF MACRO CMP R3,#110 ;SAVED TEXT LONGER THAN CIB? BGE ZMERR1 ;YES-TAKE ERROR MOV LAST,R3 ;BEGINNING OF SAVE BUFFER IN R3 MOV #CIB,R4 ;BEGINNING OF CIB IN R4 ZMALP: MOVB (R3)+,(R4)+ ;MOVE THE STRING CMPB (R3),#CR ;DONE? BNE ZMALP ;NO MOVB #CR,(R4)+ ;YES PUT CR AT END OF STRING INCB MACFLG INCB MCFLG1 MOV ARG,MACCNT ;SET FLAGS AND STORE NUMBER OF TIMES RTS R5 ZMERR: 'LE CMP (R2),#3000 ;IS .IDENT SPECIFIED? BNE 1$ ;NO- CMP -(R2),-(R2) ;YES-SET R2 TO .IDENT IN SYMTAB MOV (R2)+,(R1)+ ;SET .IDENT MOV (R2)+,(R1)+ BR 2$ ; ; SET TIME OF DAY WHEN MODULE LINKED ; 1$: CLR (R1)+ ;CLEAR AREA OF .IDENT IN COMD CLR (R1)+ 2$: MOV #104,-(SP) EMT 41 MOV (SP)+,(R1)+ ;SET TIME MOV (SP)+,(R1)+ ; ; SET DATE WHEN MODULE LINKED IN JULIAN ; MOV #103,-(SP) EMT 41 MOV (SP)+,(R1)+ ;SET DATE MOV R1,R2 MOV #2,(R1)+ MOV SSYME-L1,R3 LNK119: CMP R3,USYME-L1( SLASH) .BYTE 015 ; CARRIAGE RETURN .BYTE '$ ; $ .BYTE 'G ; G .BYTE 012 ; .BYTE '_ ; _ (BACK ARROW) .BYTE '< ; < .BYTE '^ ; ^ (UP ARROW) .BYTE ', ; , .BYTE 'O ; O .BYTE 'W ; W .BYTE 'E ; E .BYTE 'B ; B .BYTE 'P ; P .BYTE '@ ; @ .BYTE '> ; > .BYTE 'S ; S .BYTE 'R ; R .BYTE 'C ; C .BYTE '- ; - .BYTE 'F ; F .BYTE 'I ; I .BYTE '! ; ! .BYTE 'X ; X .BYTE 'A ; A .BYTE 003 ;CTRL C O.CLGT = .-O.LGCH ;TABLE LENGTH O.TL: .BYTE 'S ;DOOPIOB ST T OPIO + 1)(R+,P)(SV MO E BLTAL BOYM SHE TOF ; K OCBLT AS LHE TASM MEF ;O 0)(R4, #DD A OP TLTAUEF DHE TUTTPOU ;)+R1,(9. #OV M P)(S2, #UB S P)(S,-DRWALOV MO F BUT EX NLLFIO TRTTA STOO G -NO ;8 14NK LOSBL E YM,S)+SP (MP C E?YM S >0.+1 ;P)(SM,SYBP #DD A NTOU CVETILAMUUM CIS ;P)(S,-R2V MO 5 K2IN LMP J +6 .EQ B ORRR EUTTPOUR FOK ECCH ;R PEOO ITBTS B TAYM SOFR FEUF B AUTTPOU ; OPIO: 58K1LN RYXT EXTNEE OV MTOO G -NO ;9 14NK LBR R FEUF BUTTPOUO TGO- S YE ;4 .+I BH E YM,S)+SP (MP*CLR -(SP) MOV #1306,-(SP) ;ERROR W306, EMPTY SAVE BUFFER BR ZMERR3 ZMERR1: CLR -(SP) MOV #1304,-(SP) ;ERROR W304, MACRO OVERFLOW BR ZMERR3 ZMERR2: CLR -(SP) MOV #1305,-(SP) ;ERROR W305,-(SP) ZMERR3: IOT TST (SP)+ JMP BERR MACFLG: .BYTE 0 MCFLG1: .BYTE 0 MACCNT: .WORD 0 ;SUBROUTINE ZREAD ;READS A PAGE OF DATA ;FROM READER ;INPUTS: ; END ;OUTPUTS: ;DOT=BEG ;MARK=BEG ;END=END+#IN EREAD: TST LKBKSI BEQ R26 MOV #LKBKSI,RRIDEV BR ZREAD1 ZREAD: TST NOINFG ;ANY PRIMARY+ BHIS LNK120 CMP -4(R0),(R0) BLE LNK126 BIT #MONCND,FLAGS(R3) BEQ LNK125 MOV BASE(R3),(R1)+ ADD #INC,(R2) ADD #2,(R0) MOV R3,R4 SQUISH SUB #BPSYM,USYME-L1 BR LNK119 LNK125: ADD #BPSYM,R3 BR LNK119 LNK126: IOOP TSTB IOOPER-L1 BEQ .+6 LNK160: JMP LINK25-L1 ADD -4(R0),LOWADR-L1 MOV LOWADR-L1,(R1)+ MOV R1,R2 MOV #2,(R1)+ MOV #4,(R0) BR LNK119 LNK120: MOV (R0),-(SP) ADD #2,(SP) CMP -4(R0),(SP)+ BGE LNK127 IOOP TSTB IOOPER-L1 BNE LNK160 ADD -4(R0),LOW, 1 .BYTE 'P ;NOT 2 .BYTE 'M ;CHANGE 3 .BYTE 0 ;THE 4 .BYTE 0 ;ORDER 5 .BYTE 'C ; 6 .BYTE 'F ; 7 .BYTE 'R ; 10 .BYTE 0 ; 11 .BYTE 0 ; 12 .BYTE 0 ; 13 .BYTE 0 ; 14 .BYTE 0 ; 15 .BYTE 0 ; 16 .BYTE 0 ; 17 .BYTE 'B ; 20 O.LG = .-O.TL .EVEN O.TRTC: TRT ;TRACE TRAP PROTOTYPE ;THE ORDER OF THE FOLLOWING ENTRIES IS CRITICAL . = O.ODT-144 ;ODT'S STACK IMMEDIATELY PRECEDES ODT O.UR0: 0 ;USER R0 0 ; R1 0 ; C E?YM S <10+ T UNCO ;P)(SM,SYBP #DD A NGTILAMUUM CIS- O ;N) SP-(2, ROV M -ES;Y 58K1LNI BH ? THNGLER FEUF;B2 17,#)+SP (MP C <10+ T UNCOS ;I) SP,(YMPS#BD AD ) SP-(),R0 (OV M BCE ATPD;U) R0,(YMPS#BD AD + 1)(R+,2)(RV MO + 1)(R+,2)(RV MO R FEUF B ;)+R1,()+R2 (OV M UTTPOUO TABMTSY ;)+R1,()+R2 (OV M OMFRY TRENE OV;M+ 1)(R+,2)(RV MO: 49K1LN C BNTMERENC;I 0)(RC IN ) R0 (NC I DECOB TAYM SUT;P+ 1)(R.,#9V MO: 48K1LN -NO ;8 K2IN LISBH ? UTTPOUO TNGHIYTAN ;E YM,SR2P CM . ERNTOI PABMTSYP U. INPUT? BNE R26 ;NO TST ENDFLG ;FILE CLOSED BY EF? BEQ ZREAD2 ;NO JMP FORMF1 ;PRINT 32 ERROR MESSAGE ZREAD2: MOV #LKBKPI,RRIDEV ZREAD1: MOV END,ADR ;R0=LAST AVAILABLE BYTE ...=LAST-200 INC RIPFLG ; SET READ IN PROGRESS FLAG FOR ^P MOV LAST,R0 SUB #202,R0 CMP ADR,R0 ;CHECK OVERFLOW BHIS R232 R20: JSR R5,RR1C ;GET A CHAR BIT #EOMDET,RIB+2 BNE R23 CMPB RCHAR,#RUBOUT ; DISCARD NULLS AND RUBOUTS BEQ R20 TST RCHAR BEQ R20 R21: MOVB RCHAR,(ADR)+ ;GET DATA BYTE INC EN/ADR-L1 MOV LOWADR-L1,(R1)+ ADD #2,(R0) LNK127: ADD #2,(R0) CLR (R1)+ ;END OF COMD IOOP ;PUT OUT THE COMD TSTB IOOPER-L1 ;CHECK FOR ERROR BNE LNK160 ;YES. MOV R0,PUTR0-L1 ;SAVE R0 MOV R1,PUTR1-L1 ;AND R1 FOR NEXT PUT. TSTB FORTRF-L1 ;CS FROM FORTRAN? BEQ 1$ ;NO- MOV BEGCS-L1,CMDBUF-L1 ;YES- BR 2$ 1$: MOV LIMIT-L1,CMDBUF-L1 ;RESET CSI POINTER 2$: CMP SSYME-L1,USYME-L1 BEQ .+4 ERR23 JMP LINK73-L1 .IFNDF NOSEG .EOT ;TAPE 2 ENDO01: SIZO01=ENDO01-BEGO01 ; ;****0 R2 0 ; R3 0 ; R4 0 ; R5 O.USP: 0 ;USER SP O.UPC: 0 ;USER PC O.UST: 0 ;USER ST O.PRI: 7 ;ODT PRIORITY O.MSK: 0 ;MASK O.LOW: 0 ;LOW LIMIT O.HI: 0 ;HIGH LIMIT O.CNST: 0 ;CONSTANT REGISTER O.FORM: 0 ; FORMAT REGISTER ; IF $F=0 RELATIVE ADDRESSING ; ABSOLUTE OTHERWISE ;RELOCATION REGISTERS O.RELT: -1,-1,-1,-1,-1,-1,-1,-1 ;INITIALLY SET TO A HIGH ADDR. ; BREAK POINT LISTS, ADR1 = ADDRESS OF BREAKPOINT,CT = COUNT, ; UIN = CONTENTS O.ADR1: . = .+O.BKP+4 O.CT: ET;S R2B,YM SOV M OIIO A UT-OTBOUL=TBOU DRBAST,#EVBDST #ENOP . +2=. . B/ST /50AD.R 4 .-.= 4 R+ADTB,S#0V MO 0 +1 .NE B +4DRBASTT TS E IL FABMTSYN PE;O PFBOSTB NC I -4DRBASTR CL: ERTB SR ADTB#SV,DETB#ST LEDE . +2=. . B/ST /50AD.R 4 .-.= 4 R+ADTB,S#0V MO 0 +1 .NE B +4DRBASTT TS T PUUT OABMTSYT NI;I EVBDST #ITIN . ET RRR EUPET;S4 R-ADTB,SERTB#SV MO - O ;N 29NKLIQ BE ? UTTPOUE BTOE BLTAL BOYM SIS ;B TAYM STBTS: STTPOU E YP T R0M,RA#TV MO 5 H1RT;E C ND.E E YP T R0B,TH#RV MO 0 2D CMP R0,ADR ;OVERFLO? BLO R232 ;YES ;NO--- CMPB RCHAR,#FF ;THIS CHAR A FF BEQ R24 ;YES CMPB RCHAR,#LF ;NO---THIS CHAR A LF BEQ R22 ;YES BR R20 ;GET ANOTHER CHAR R22: CMP ADR,MAX ; THIS THE FIRST LF BLO R20 ; SINCE ADR GT MAX? BR R24 R232: JSR R5,RDSET CLR -(SP) MOV #1320,-(SP) BR RDOUT R26: JSR R5,RDSET CLR -(SP) MOV #1317,-(SP) RDOUT: IOT TST (SP)+ JMP BERR R23: JSR R5,RDSET TST EXFLAG BNE RDEXRT CLR -(SP) MOV #1311,-(SP) IOT RDEXRT: INC3*OVERLAY #2***** L2=BEGOVR-BEGO02 ;COMPUTE OFFSET FROM ;RUN TIME OVERLAY AREA BEGO02: ;JUMP TABLE TO ENTRY POINTS ;IN THIS OVERLAY. ; JMP START2 ;ENTRY1 .ENDC ; ; RESET-CLOSE & RELEASE ALL OPENED FILES & INITED DATA SETS ; START2: TST INCMD-L2 ;IS KB INITED? BEQ RESE06 ;NO- .RLSE #INCMD ;RELEASE KB .RLSE #OUTCMD ;RELEASE TELEPRINTER RESE06: TST OBJDEV-L2 ;IS OBJ DEV INITED? BEQ RESE01 ;NO- IOIC RESE01: MOV #MAPDEV,R0 TSTB MAPOPF-L2 ;IS MAP OPEN? BEQ RESE02 ;NO- . = .+O.BKP+4 O.UIN: . = .+O.BKP+4 . = O.TRTC+2 .END O.ODT ;END OF TAPE #4 +1 .EQ B TF RTBTS 5 H1RT;B TH RDFIF . STTPOUE BN F AP MTBTS D TEINPRS WAP MAA F INTRI P'TON D ; T INTRI;P P MA P NO ;4 .+Q BE P MAA T AN;W PFMAB ST T4:VLXO EC ND.E 3 K1IN LMP J EGOS NDFIF . DCEN . Y1TRENP JM 4 #AYRLVE;O 4RDWO . RLNTCO G SENOF NDIF . DCEN . NEDOP JM G SENOF FD.I C ND.E 1 RYNT EMP J #9Y LAEROV ;. 9RDWO . RLNTCO G SENOF NDIF . 7:K0LN DCEN . 13NKLIP JM G SENOF FD.I C ND.E 1 RYNT EMP J 4RDWO . RLNTCO G SENOF NDIF . 2SSPAN OONTIACL IAECSP ;7 K0LNE BN6B ERFLG RTS R5 RDSET:R24:R25: MOV BEG,DOT ;DOT=BEG MOV DOT,MRK ;MARK=BEG CLR RIPFLG RTS R5 ;EXIT ZREAD ;ROUTINE TO PASS ONE KBD CHAR KR1C: CMP KIBBC,KIB ;SEE IF HE TYPED >82 CHARS BGT KR1C3 ;YUP DEC KIBBC ;DEC BC BGE KR1C2 ;ANY LEFT? ;NO--DO A READ KR1C1: CLR KIB+2 ;SET MODE TO NORMAL ASCII TST MODE BEQ KR1C1B ;0=COMMAND MODE * KR1C1A: MOV #KIB,-(SP) MOV #LKBKSB,-(SP) EMT READCD MOV #LKBKSB,-(SP) EMT WAITCD BITB #100,KIB+3 BEQ KR1C1C MOV #KIB+7 .CLOSE R0 ;YES-CLOSE AND RELEASE RESE02: TST @R0 ;IS IT INITED? BEQ RESE03 ;NO- .RLSE R0 RESE03: MOV #LODDEV,R0 TSTB LODOPF-L2 ;IS LOD DEV OPEN? BEQ RESE04 ;NO- .CLOSE R0 ;YES-CLOSE AND RELEASE IT .DELET R0,#LODADR ;DELETE LOAD MODULE FILE RESE04: TST @R0 ;IS IT INITED? BEQ RESE05 ;NO- .RLSE R0 ;YES- RESE05: TSTB STBOPF-L2 ;IS STB DEV OPEN? BEQ RESE08 ;NO- .CLOSE #STBDEV ;YES-CLOSE AND RELEASE RESE08: TST STBDEV-L2 BEQ RESE07 .RLSE #STBDEV RESE07: MOV #STCLR,R0 8OP MOV SP,D1 SUB MONTOP,D1 ;MON CHECKED FOR OVF ALREADY .IFNDF RSX ;BRSX SUB #1000,D1 ;ALLOW FOR FILE MANAGER .ENDC ;ERSX BHIS LINK34 ;AT CLOSE TIME ERR18 ;NO SPACE FOR FILE MANAGER LINK34: MOV SP,R4 MOV R4,R0 MOV D1,R1 SUB R1,R0 SUB R1,SP SUB R1,SB ; ; RESET STACK BASE TO NEW VALUE ; IN THE MONITOR SYSTEM VECTOR TABLE ; MOV SB,-(SP) ;NEW STACK BASE ON THE STACK MOV #4,-(SP) ;REQUEST CODE EMT GUT ;EMT CALL TST (SP)+ ;CLEAR RETURN VALUE FROM STACK ; ; S AS PTBTS S ESDRADN URET RRENOIG ;+ P)(ST TS L VANO: 12NKLI ;. 2SSPAO TEDCERO PND A 0TOS NEFIDEUNE RCFOH-TCWI S E ;; G LA FGOT SE ;F GOB NC I5:19NK L; GO; ;C ND.E 0 P1MA PMP J EGOS NDFIF . C ND.E 2 RYNT EMP J #7Y LAEROV ;7 D OR.W L TRON C EGOS NDFFN.I S OLMBSYF OND ETOR PTT GE ;0 ,RR1V MO E YP T NGDIEA HNTRI;P0 ,R84APPM #OV M EGVRSA 1 P1MA PCBIN: 14NKLI ;S NEFIDEUNT INPRO TAPPMF ORTPAE US ;; ITEX ;2 K0IN LMP J R0+,P)(SV MO 1 ,R)+SP (OV M3:K0IN LM HE TNTRI PGO- :6,KIBPTR MOVB #LF,@KIBPTR BR KR1C1D KR1C1B: MOV #KIB,-(SP) MOV #LKBKPC,-(SP) EMT READCD MOV #LKBKPC,-(SP) EMT WAITCD BITB #100,KIB+3 BEQ KR1C1C JMP EQUIT KR1C1C: MOV #KIB+6,KIBPTR ;SET UP POINTER KR1C1D: DEC KIBBC KR1C2: MOVB @KIBPTR,RCHAR ;GET A CHAR INC KIBPTR ;INC POINTER RTS R5 ;RTN KR1C3: INCB SPARE ;SET WARNING FLAG RTS R5 ;ROUTINE TO READ INTO BUFFER ;RETURNS ONE CHAR IN RCHAR RR1C: DEC RIBBC BGT RR1C2 RR1C1: MOV #RIB,-(SP) MOV #0,-(SP) RRID;;GET START OF AREA TO BE CLEARED 1$: CLR (R0)+ ;CLEAR IT ALL CMP R0,#ENDCLR ;ONE WORD AT BLO 1$ ;A TIME MOV EXT-L2,STBDEV+2-L2 MOV DEV-L2,STBDEV+6-L2 MOV FIL-L2,STBADR-L2 MOV NAM-L2,STBADR+2-L2 ; ; INITIALIZE KEYBOARD DATA SET ; .INIT #INCMD ; ; INITIALIZE TELETYPE DATA SET ; .INIT #OUTCMD ; .RSTRT #LINK ;RESTART ; ; PRINT NAME ; MOV #LNKNM,R0 TYPE ; ; START PASS 1 ; LINK66: JMP LINK80-L2 .IFNDF NOSEG ENDO02: SIZO02=ENDO02-BEGO02 ; ;*****OVERLAY #3***** <SUB R1,SSYMB SUB R1,SASYME SUB R1,SYMB SUB R1,SYMC SUB R1,SYME SUB R1,USYME SUB R1,PTRG SUB R1,PTRH .IFDF RTH ;BRTH17 SUB R1,RTHPTR .ENDC ;ERTH17 ASR R1 MOV D2,R2 ASR R2 BLE LNK134 LNK133: MOV (R4)+,(R0)+ DEC R2 BGT LNK133 LNK134: RESREG RTS PC ; ; TEST FOR NO VALUE ; NOV00: CMP (R1),#1 BR VALUE ; ; TEST FOR ONE VALUE ; ONEV00: CMP (R1),#2 VALUE: BEQ .+4 ERR19 RTS PC ; ; READ ERROR CHECK ; READ00: MOVB -1(R0),-(SP) BIC #-3-1,(SP)+ BEQ .+4 ES;Y4 K1IN,LPCR JS - NO ;3 K0IN LEQ B S?NEFIDEUNY AN ;R0E,YMUSP CM 1 ,RR0V MO 0 ,RMESYV MO ) SP-(1, ROV M R10, RVESA ;P)(S,-R0V MO L VANO: 10NKLI ;S NEFIDEUNT IS LH-TCWI S U; ;E BLTAF OND;E 1 - 02NKLI + CHITSWRE P ;0 D OR.W 5 19NK+L O ;G 'OG, 'TEBY . 10NKLI + ESINEFND;U ,0'UE YT.B 2 K1IN+L T XI;E ,0'EE YT.B: SWSTPO ;E BLTAH TCPAIS D; ;S HETCWI SSTPOR FOG INSSCERO P; ; 1 K1IN LBR F DT DCBIN L VANO 1 K1IN LNE B SSPAB ST T TFODB NC I5:K6IN L; LEFIG BUDE- /D; ;1 >EV=.-2 EMT READCD ;READ FROM THE INPUT DEVICE MOV RRIDEV,-(SP) EMT WAITCD ;WAIT ON THE READER MOV #RIB+6,RIBPTR RR1C2: MOVB @RIBPTR,RCHAR INC RIBPTR REXIT: RTS R5 ;ROUTINE TO TURN PUNCH ON TPCHON: MOV #BUF1,-(SP) MOV #LKBKSB,-(SP) EMT READCD MOV #LKBKSB,-(SP) EMT WAITCD RTS R5 BUF1: 1 202 1 0 ;ROUTINE TO MOVE ONE CHAR INTO POB AND PUNCH ;BUFFER WHEN FULL PW1C: CMP POBBC,POB BGE PW1C1 DEC POBPTR CMPB @POBPTR,#LF BEQ PW1C1 CMPB @POB?L3=BEGOVR-BEGO03 ;COMPUTE OFFSET FROM ;RUN TIME OVERLAY AREA BEGO03: ;JUMP TABLE TO ENTRY POINTS ;IN THIS OVERLAY. ; JMP STRT31 ;ENTRY1 JMP STRT32 ;ENTRY2 .ENDC ; ; PROCESS OUTPUT SPECIFICATIONS AND SET MONITOR TOP. ; STRT31: .MONF MOV (SP)+,MONTOP-L3 ;INITIALIZE AT CURRENT SIZE MOV CMDBUF-L3,BLKO-L3 MOV #2,@CMDBUF-L3 ;PREPARE FOR OUTPUT FIELD .CSI2 #BLKO ;GET FIRST OUTPUT FIELD .IF NDF RSX MOV #LODADR,R0 ;ADDRESS OF FILE NAME BLOCK MOV #NAME,R1 ;ADDRESS OF ASCII STRIN@ ERR15 BITB #EOF,-1(R0) ;ERROR? BEQ .+4 ERR15 ;YES - RTS PC ;NO - ; ; IO EXEC FOR OBJ MODULE AND LOAD MODULE ; ; ; INPUT INIT ; INBLN=INB-INA IOII00: MOV #INA,IN ;SET INPUT BUFFER POINTER ; ; INITIALIZE OBJECT MODULE DATA SET ; .IFDF BLKIO JSR PC,INITRD .ENDC .IFNDF BLKIO .INIT #OBJDEV .ENDC JSR PC,DEVCH ; ; OPEN OBJECT MODULE FILE ; TSTB ODTF BEQ LNK147 MOV #ERRET2,OBJADR-4 TST OBJADR BNE LNK147 MOV #57164,OBJADR LNK147: TST OBJADR+4 BNE .+10 K1IN LBR A TR UCBIN 1 K1IN LNE B 2SSPAN ORENOIG ;S AS PTBTS: 08NKLI 04NKLIR B AFTRB NC I RAFTB NC I 19RR E +4 .CC B )+SP (SR A RA,TP)(SV MO L TAOCT ERNVCO ;) R12(N BIO2 .9:K0IN L ERMBNU; 04NKLIR B AFTRB NC I RASTB NC I +6LKABTR+,P)(SV MO V ON CMT E RDWOD ONEC;S) SP-(I,OBAT#RV MO 4 K+BLRA,T)+SP (OV M CKPA0 D5RAA O ;D 1)(R 2PKAD.R - ERMBNU ;9 K0IN LLO B R?TEET L AOR# A R HA CSTIR FIS ;'A,#1)(R@2B MP C 2SSPAF IRENOIG ;1 K0IN LNE B SSPAB ST T ALEVON - UEAL VNO ;8 K0IN LLO BBPTR,#VT BEQ PW1C1 CMPB @POBPTR,#FF BNE PW1C0 PW1C1: MOV #POB,-(SP) MOV #0,-(SP) PWDEV=.-2 EMT WRITCD ;WRITE ON THE OUTPUT DEVICE MOV PWDEV,-(SP) EMT WAITCD ;WAIT FOR THE OUTPUT DEVICE MOV #POB+6,POBPTR CLR POBBC PW1C2: MOVB RCHAR,@POBPTR INC POBPTR INC POBBC RTS R5 PW1C0: INC POBPTR BR PW1C2 .EOT OPERSO: MOV #3,FNBKSO-2 CLR FNBKSO-4 JMP WRITOP .EVEN E.INIT: MOV #CIB,CIBSTO CLR CMDCNT MOV ADR,-(LS) ;SAVE STARTING ADR,THIS INSERT ONEA: TST MODECG STORAGE UNPACK ;CONVERT IT TO ASCII MOV #LODADR,R0 ;ADDRESS OF FILE NAME TST (R0)+ ;IGNORE BEQ 1$ ;BLANK NAME TST (R0)+ TST @R0 ;IS THE EXTENSION NULL?? BNE 1$ ;NO MOV #.-.,@R0 ;MOVE IN THE PROPER EXTENSION .=.-2 .RAD50 /LDA/ ;EXTENSION IS LDA 1$: INC R1 ;SKIP OVER "." UNPACK ;UNPACK THE EXTENSION MOVB #' ,R0 MOVB R0,-(R1) ;CLEAR MOVB R0,-(R1) ;POTENTIAL MOVB R0,-(R1) ;TRASH .ENDC TST LODDEV+6-L3 BNE 2$ INCB NOOUTP-L3 2$: BIT #4,(SP) ;BIT2 SET? BEQ 3$D MOV #0,OBJADR+4 ;SET DEFAULT EXTENSION .=.-4 .RAD50 /OBJ/ .=.+2 LNK146: .IFDF BLKIO JSR PC,OPENRD .ENDC .IFNDF BLKIO .OPEN #OBJDEV,#OBJADR .ENDC CLR OBJADR-4 CLRB ODTF .IFDF BLKIO JSR PC,READIT .ENDC .IFNDF BLKIO .READ #OBJDEV,#INA ;START FIRST READ .ENDC BR IOIG00 ERRET2: CMP #401,OBJADR+6 BNE .+14 CLR OBJADR-4 CLR OBJADR+6 BR LNK146 MOV #401,OBJADR+6 BR LNK146 ; ; INPUT GET ; IOIG00: MOV R2,-(SP) ;SAVE R2 MOV IN,R2 ;GET BUFFER POINTER MOV E?LUVAA E AV HITS OE;D #2),R1 (MP C9:K6IN L; SSREDD AERSFANTR; ;1 K0LNP JM: 11NKLI1:K0IN LT XI;E 04NK LMP J4:K0IN LT UNCOT SE ;CTAP,T)+SP (OV M ESAP TCBIN Y ARIN BTOL MACIDET ERNVCO ;) R12(N BID2 . ALEVON: 58NKLI ;S PETA ;; 01NKLIR B ALOV N ATNCCOB NC I4:K7IN L ;N IOATENATNCCO--CHITSWC C ;; DCEN . T8ARSTP JM G SENOF FD.I C ND.E 1 RYNT EMP J #8Y LAEROV ;. 8RDWO . RLNTCO G SENOF NDIF .0:K4IN LN OMT NOY TRENB LI ;9 K0LNE BN 0 ,#TEBY HPBCM E YTHB+,0)(RB OV M )+R0 (TBTSF BEQ ONEB INC CIBSTO CMPB @CIBSTO,#CR BEQ ONEB CMPB @CIBSTO,#VT BEQ ONEB CMPB @CIBSTO,#LF BEQ ONEB MOVB @CIBSTO,DELIM CLR COUNT TLOOP: INC CIBSTO CMPB @CIBSTO,DELIM BEQ TEXOUT CMPB @CIBSTO,#CR BEQ BERRND CMPB @CIBSTO,#VT BEQ BERRND CMPB @CIBSTO,#LF BEQ BERRND MOVB @CIBSTO,(ADR)+ INC COUNT BR TLOOP ONEB: CLR KIBBC MOV DOT,TMPDOT ONE: JSR R5,KR1C ;GET A CHAR FROM KBD TSTB SPARE ;DID HE TYPE TOO MANY? BNE BERRTM ;DETERMINE THE CHAR LUK1: CMPB G ;NO- INCB BIT2F-L3 ;YES- 3$: BIT #2,(SP) ;BIT1 SET? BEQ 4$ ;NO- ERR19 ;YES- 4$: ASR (SP)+ BCS LINK86 ;ODD=>NO MAP FOLLOWS MOV CMDBUF-L3,BLKM-L3 ; GET MAP FILE .CSI2 #BLKM TSTB MAPDEV+6-L3 BEQ 5$ INCB MAPF-L3 ;SET MAP FLAG 5$: BIT #4,(SP) ;BIT2 SET? BEQ 6$ ;NO- INCB BIT2F-L3 ;YES- 6$: BIT #2,(SP) ;BIT1 SET? BEQ 7$ ;NO- ERR19 ;YES- 7$: ASR (SP)+ BCS LINK86 MOV CMDBUF-L3,BLKS-L3 .CSI2 #BLKS TST STBDEV+6-L3 ;SYMBOL TABLE TO BE OUTPUT? BEQ 8$ ;NO- INCBH R2,R0 CMP (R0)+,(R0)+ ;SET R0 = IN+4 MOV R0,R1 TST (R1)+ ;SET R1=IN+6 ADD #INBLN,R2 ;ADVANCE POINTER TO NEXT BUFFER. CMP R2,#INB ;TOO FAR? BLOS IOIG01 ;NO MOV #INA,R2 ;READ INTO INA IOIG01: MOV R2,IN ;READ INTO INB .IFDF BLKIO JSR PC,XXREAD .ENDC .IFNDF BLKIO .READ #OBJDEV,R2 .ENDC MOVB -1(R0),R2 ;GET LAST STATUS BIC #-47-1,R2 ;SAVE LOW 3 BITS, AND BIT 5 BEQ .+4 ERR15 MOV (SP)+,R2 ;RESTORE R2 RTS PC ; ; SUBROUTINE IOIC ; ; CLOSE INPUT FILE AND RELEA - NO ;9 K0LNE BN ? SOALH TCMAD 2NS-YE ;)+R1,()+R0 (MP C O-;N 09NK LNE B H?TCMAT 1S ;)+R1,()+R0 (MP C FFBUN DIEA RINR PTE NCVAAD ;+ 0)(RT TS - ES;Y R1G,TR POV M O-;N 09NK LNE B D?GS ;) R0,(#1P CM + 0)(RT TS 5 R1ER 4 .+Q BE E YTHBF,EO #TBBI 0 11NK LNE B N?EE SBRLIF OOF;EE YTHB0,10 #TBBI E YTHB+,0)(RB OV M R03, #DD A R0N, IOV M DCEN . EVJDOB #ITWA . IOLK BDFFN.I : 10NK LN ,INA#IV MO C ND.E A IN,#EVJDOB #ADRE . IOLK BDFFN.I C ND.E T DIEA,RPCR JS O KIBLF FD.I : 09NK L8 K0LNE BNJRCHAR,#LF BNE CKREG CKLF: CMPB LSTCHR,#CR ;LAST CHAR A CR? BEQ CKTRM ;YES...THEN THIS LINE FEED IS OK TEXOUT: TST MODE ;NO...CMD MODE BEQ BERRLF ;YES...TOO BAD MOV CMD,RCMD JMP D7 ;TERMINATE TEXT MODE BERRLF: CLR -(SP) MOV #1312,-(SP) BR BERRET BERRND: CLR -(SP) MOV #1316,-(SP) BR BERRET BERRTM: CLR -(SP) MOV #1303,-(SP) BERRET: IOT BR BERR CKUPP: CLR COUNT CLRB MACFLG MOV #100,@#177560 CLR KIBBC MOV BEG,R6 SUB #2,R6 CKP2: MOV TMPDOT,DOT TST RIPFLG BEQ K SYMTAB-L3 ;YES- 8$: BIT #4,(SP) ;BIT2 SET? BEQ 9$ ;NO- INCB BIT2F-L3 ;YES- 9$: BIT #2,(SP) ;BIT1 SET? BEQ 10$ ;NO- ERR19 ;YES- 10$: ASR (SP)+ BCS LNK157 ERR20 LINK86: TSTB NOOUTP-L3 BEQ .+12 CLRB NOOUTP-L3 INCB NOONOM-L3 LNK157: TSTB NOONOM-L3 BEQ .+12 CLRB NOONOM-L3 INCB NOMMS-L3 CLR @CMDBUF-L3 MOV CMDBUF-L3,BLKI-L3 .CSI2 #BLKI TST OBJDEV+6-L3 BNE LNK136 ASR (SP)+ BCS LNK135 ERR17 LNK135: TSTB NOMMS-L3 BEQ .+6 JMP LNK145-L3 ERR02 LNK136: BIT #4LSE INPUT DEVICE ; ; CLOSE INPUT FILE IOIC00: .IFDF BLKIO JSR PC,CLOSRD .ENDC .IFNDF BLKIO MOV #OBJDEV,-(SP) MOV (SP),-(SP) EMT CLOSE ; ; RELEASE INPUT DEVICE ; EMT RELEAS .ENDC RTS PC ; ; OUTPUT INIT ; IOOI00: CLRB OUTB+3 IOOI02: MOV #OUTA,R0 ;SET OUTPUT POINTER MOV R0,OUT IOOI01: CMP (R0)+,(R0)+ ;R0=OUT+4 CLR (R0) ;INITIALIZE BC MOV R0,R1 TST (R1)+ ;R1=OUT+6 TSTB SYMTAB ;WHAT TO OUTPUT NEXT? BEQ LNK161 ;LOAD MODULE- MOV STBDEV+6,TEST ;SYMTAB - PREPAR ) R0,(10 #MP C )+R0 (ST T ERADRE + 0)(R+,0)(RP CM 0 ,RINV MO C ND.E V DEBJ#OT AI.W A IN,#EVJDOB #ADRE . IOLK BDFFN.I C ND.E T DIEA,RPCR JS O KIBLF FD.I N ,INA#IV MO: 08NK L- ES;Y DFEAFRB LR C O-;N 10NK LEQ B D?EA RST;1 DFEAFRB ST T7:11NK LC PTS R UEAL VET RCKTA SRETOES;R) SP,(TVRESPV MO H TCWI SHE TARLE;C )+SP@(R CL ) SP,(R1D AD ) SP (SL A CHITSWF OSSREDD ARMFO ;P)(S,-1)(RV MO E IZ SSWB LIO TTR PVESA ;R1E,IZWS SOV M EV DBJ OSEEAEL R &SELO;C C OI I OTDE,RR5R JS: 10K1LN ADRENCKP3 CLR RIBBC MOV BEG,DOT MOV DOT,MRK CKP3: MOV DOT,ADR CLR POBBC MOV #POBBC+2,POBPTR MOV DOT,@LS CKX: JSR R5,M2OB MSG5 CKX1: MOV (LS)+,R3 ;POP STACK TSTB MBF ;BUFFER MOVED? BEQ CK0 ;NO JSR R5,INSRT CK0: MOV #CIB,ADR ;ADR=CIB CK1: MOV #CMD,TMP4 CK2: CLRB (TMP4)+ ;CLR OUT VRBLS CMP TMP4,#OVRFLO BLT CK2 MOV #TIB-2,NL ;ACCEPT 10 CHARS INTO CIB JMP E.INIT CKTRM: TST MODE ;WHAT IS MODE? BNE CKREG ;TEXT JMP DECODE ;CMD CKREG: CMP NL,ADR ;ANY ROOM? BLOSO,(SP) ;BIT2 SET? BEQ 1$ ;NO- INCB BIT2F-L3 ;YES- 1$: BIT #2,(SP) ;BIT1 SET? BEQ 2$ ;NO- ERR19 ;YES- 2$: TST LODDEV+6-L3 BEQ LINK35 MOV #LODADR,R0 TST (R0) BNE LINK35 MOV #OBJADR,R1 MOV (R1)+,(R0)+ MOV (R1),(R0) LINK35: JMP LNK128-L3 ; ; OBTAIN ADR OF HIGHEST WORD IN CORE ; STRT32: .CORE MOV #ALODSZ,-(SP) SUB (SP)+,(SP) ADD #2,(SP) MOV (SP)+,TOPMEM-L3 JMP LINK84-L3 .IFNDF NOSEG ENDO03: SIZO03=ENDO03-BEGO03 ; ;*****OVERLAY #4***** L4=BEGOVR-BEGO04 ;COMPUPE TO MOV #STBDEV,PUT ;OUTPUT SYMTAB BR LNK162 LNK161: MOV LODDEV+6,TEST ;PREPARE TO OUTPUT MOV #LODDEV,PUT ;LOAD MODULE LNK162: RTS PC ; ; OUTPUT PUT ; IOOP00: MOV OUT,R0 ;GET PTR TO CURRENT BUFFER CLRB IOOPER CMP R0,#OUTA ;BUFFER A? BEQ IOOP01 TST TEST ;ANY OUTPUT? BEQ IOOP02 ;NO-- .WRITE PUT,#OUTB MOVB OUTA+3,IOOPER BR IOOP02 IOOP01: TST TEST ;ANY OUTPUT? BEQ IOOP02 ;NO-- .WRITE PUT,#OUTA MOVB OUTB+3,IOOPER IOOP02: BICB #-147-1,IOOPER ;SAVE BITS 0,1,2,5,6 ADT AS LONT AI WTOO ;G 96NKLIP JM K ON""ID GS GET GGOS-YE ; SDGG: 03K1LN O-;N 04K1LNE BN #0E,YTHBB MP C E?AM NOD MBJ OOLMBSYS WA ;TEBY,H)+R0 (VBMO S YE ;+ 0)(RB ST T O-;N 04K1LNE BN ? CHAT MYM SOFT AR PND-2ES;YE AMSN+,0)(RP CM - NO ;4 10NK LNE B H?TCMAL BOYM SOFT AR PST-1ES;YE AMFN+,0)(RP CM D END GSE BTOE AD-HNO ;4 10NK LNE B K?OCBLD GS ;)+R0,(#1P CM C BET;G BCG NE C ,B)+R0 (OV M ERADRE R DEEA HOFS RDWO2 T 1SE ORGN;I+ 0)(R+,0)(RP CM 0 ,RINV MO N ,INA#IV MO C ND.E V DEBJ#OT AIR BERR1 ;NO MOVB RCHAR,(ADR)+ ;YES---MOVE IN CHAR MOVB RCHAR,LSTCHR INC COUNT BR ONE BERR1: CLR -(SP) MOV #1303,-(SP) IOT BR BERR ERROR: MOV (LS)+,DOT BERR: CLR MSG15N MOV #CIB,R4 MOV #MSG15M,R3 TST CMDCNT BEQ CKX BERRLP: CMP R4,CIBSTO BEQ BEROUT MOVB (R4)+,(R3)+ INC MSG15N BR BERRLP BEROUT: MOVB #'?,(R3)+ MOVB #CR,(R3)+ MOVB #LF,(R3)+ ADD #3,MSG15N JSR R5,M2OB MSG15 CLRB MACFLG BR CKX ESDEC: INC R4 ;LOOK AT NEXT CHARACTER MOV #EBEG,TMP0 ;SET STE OFFSET FROM ;RUN TIME OVERLAY AREA BEGO04: ;JUMP TABLE TO ENTRY POINTS ;IN THIS OVERLAY. ; JMP LINK13 ;ENTRY1 .ENDC LINK13: .IFDF RSX INCB FLAG-L4 MOVTAB CLRB FLAG-L4 .ENDC MOV SYME-L4,R0 ;GET BEGINNING OF UNDEFINES MOV R0,SSYME-L4 ;SAVE FOR PMAP LINK27: CMP R0,USYME-L4 ;ANY UNDEFINES LEFT? BHIS LNK112 ;NO-GO SEE ABOUT MAP. .IFNDF RSX CMP #DOTBLK,NAME2(R0) ;IS 2ND WORD ". "? BEQ LNK111 ;YES-GO CHANGE ". " INTO " " BIT #MONCND,FLAGS(R0) ;MONCND FLAG SET? BTD #OUTBL,R0 ;ADVANCE TO NEXT BUFFER MOV R0,OUT CMP R0,#OUTB ;TOO FAR BLOS IOOI01 ;NO BR IOOI02 ;YES ; ; GNGSD--GET NON GSD BLOCK ; GNGS00: IOIG CMPB #GSDBLK,(R1) ;GSD BLOCK? BEQ GNGS00 ;YES - IGNORE RTS PC ;ELSE - EXIT. ; ;RESIDENT READ GSD GGSD00: .IFNDF NOSEG CONTRL .WORD 5 ;OVERLAY #5 JMP ENTRY1 .ENDC .IFDF NOSEG JMP START5 .ENDC ; ; RESIDENT PRINT LOAD MAP PMAP00: .IFNDF NOSEG CONTRL .WORD 7 JMP ENTRY1 .ENDC .IFDF NOSEG JMP START.W A IN,#EVJDOB #ADRE . IOLK BDFFN.I C ND.E T DIEA,RPCR JS O KIBLF FD.I : 04K1LN DCEN . DRJAOB,#EVJDOB #ENOP . IOLK BDFFN.I C ND.E D NRPE,OPCR JS O KIBLF FD.I 2 .+.= / BJ/O0 D5RA . -4=. . 4 R+ADBJ,O#0V MO 0 +1 .NE B +4DRJAOBT TS C ND.E T PUINN PE,OITIN ;V DEBJ#OT NI.I O KIBLF NDIF . DCEN . RDITINC, PSR J IOLK BDFIF . EV DBJ OSEEAEL R &SELO;C C OI I 28RR E +4 .EQ B ESAP TTBTS T EORD5, RSR J7:10NK L3 10NK LBR E AVNS,I)+SP (OV M INE,AVNS IOV M P)(S,-INV MO: 06K1LN 07K1LNR VUP E LOOKUP TABLE LOOK1: CMPB @R4,-(TMP0) ;LOOK FOR MATCH BEQ LOOK4 ;FOUND ONE CMP TMP0,#EANY ;DONE? BGE LOOK1 ;NO BR ERROR1 ;ILLEGAL CHARACTER LOOK4: MOV TMP0,RCMD CMP TMP0,#EPOS ;ARGS ALLOWED BLE ELK1 ;YES TST ARG ;ARG MUST BE 0 BNE ERROR2 TST MINUS ;MINUS MUST BE 0 BNE ERROR3 ELK1: CMP TMP0,#EANY BEQ ELK2 ;ANY ARGS ALLOWED TST ARG ;ARG CANNOT BE <0 BLT ERROR4 TST MINUS ;MINUS MUST BE 0 BNE ERROR2 ELK2: TST ARG ;IS ARG 0 BNE ELK3 ;NO TSTB NUM ;DID HE TYPWEQ LNK130 ;NO- TST BASE(R0) ;YES-EMT FILLED IN? BNE LNK116 ;YES- BIC #MONCND,FLAGS(R0) ;NO- MOV #DOTBLK,NAME2(R0) BR LNK130 .ENDC LNK130: BIC #ABSREL,FLAGS(R0) ;NO-MAKE ABSOLUTE BIS #UNDEF+INTGLB,FLAGS(R0) ;MAKE DEFINED & GLOBAL MOVB #SYMN,FLAGS+1(R0) ;MAKE IT A SYMBOL DEFINITION CLR VALR(R0) CLR BASE(R0) LNK116: ADD #BPSYM,R0 ;UPDATE R0 TO NEXT SYMBOL BR LINK27 .IFNDF RSX LNK111: MOV #BLANKS,NAME2(R0) ;CHANGE ". " INTO " " BIS #MONCND,FLAGS(R0) ;FLAGS ENTRY: MON ROUTINX7 .ENDC ; ; SWITCH SEARCH ROUTINE ; ; INPUT-R0=ADR OF DISPATCH TABLE ; -R1=ADR OF SWITCH HEAD TO SEARCH FOR ; OUTPUT-R0=ADR OF SWITCH ROUTINE. IF CAN'T FIND THE SWITCH, ; RETURN R0=0. ; SWSR00: SAVREG MOV (R1),-(SP) ASL (SP) ; SWITCH CHARACTERS ADD (SP)+,R1 CLR (SP) ;INITIAL CLEAR OF SAVED R0 SWSR02: CMP (R1),(R0)+ ;IS IT THIS ONE? BEQ SWSR01 ;YES- TST (R0)+ ;NO-SKIP ADR TST (R0) ;END OF TABLE? BPL SWSR02 ;NO- SWSR03: RESREG ;YES-EXIT RTS PC SWSR B 06K1LNE BN F BB STBTS K ON""ID,GS GET GGOS-YE ;3 10NK LNE B N? OLLTI SAGFLB BST 1IS ;F BB FTBTS: 02K1LN 23NKLIR B BFSBB LR C 23NKLIQ BE F BB STBTS: 08K1LN 23NKLIR B NT,C#2V MO F BB SCBIN F BB FRBCL 8 10NK LEQ B BFFBB ST T1:10NK L0 11NK LMP J6:K2IN L7 11NK LMP J7:K0IN L EDEDCEUC;S 02K1LNR B CKLO BXTNED EA RTOO -GEDILFA ;1 10NK LEQ B EDCEUC=S,1ILFA0=: AL VET;R RVRSDIT TS R RSDI C TB SEG N BCST+,P)(SV MO C BABMTSYE AV;S) SP,()+SP (UB S P)(S,-MESYV MO ) SP-(E,YMUSV MO A ATZE 0 BEQ ELK4 ;NO INC MINUS ;YES-MINUS=-1 BR ELK3 ELK4: INC ARG ;YES-ARG=1 ELK3: SUB #EANY,RCMD ASL RCMD MOV (SP)+,DOT MOV R4,CIBSTO MOV DOT,TMPDOT JSR R5,@EJTBL(RCMD) ;DISPATCH TO COMMAND SUBROUTINE JMP RTN ;RETURN TO BUSINESS ; ;ERROR CODES USED BY MULTIPLE EDITOR ROUTINES ; ERROR1: CLR -(SP) MOV #1317,-(SP) BR ERRBOT ERROR2: CLR -(SP) MOV #1315,-(SP) BR ERRBOT ERROR3: CLR -(SP) MOV #1314,-(SP) BR ERRBOT ERROR4: CLR -(SP) MOV #1313,-(SP) ERRBOT: IO[E CAND CLR BASE(R0) ;CLEAR SPACE OF EMT BR LNK116 .ENDC LNK112: .IFNDF RSX TSTB SECTIM-L4 BNE LNK131 INCB MONLIB-L4 ;IN MON LIB SEARCH JMP LINK80-L4 ;CHECK FOR ROOM FOR COM ST LNK131: CLRB SECTIM-L4 .ENDC ; INITIALIZE FOR PASS 2 CMP SYMC-L4,SYME-L4 ;ANY SYMBOLS? BNE .+6 ;YES JMP LINK-L4 ;NO, RESTART! MOVB #1,TMP1-L4 ;SET ADDRESS REPEAT FLAG MOV TOPMEM-L4,CURPC-L4 ;GET TOP OF MEMORY INTO CURRENT ; ASSIGN ADDRESSES, CALCULATE TOTAL SIZE, KEEP LOWEST ADDRESS LOADED. LINK63\01: MOV (R0),(SP) ;SET SAVED R0 TO ADDRESS BR SWSR03 ; OF HANDLER & EXIT. ; ; SAVE REGISTERS ; SAVR00: MOV R5,-(SP) ;SAVE THEM MOV R4,-(SP) MOV R3,-(SP) MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) JMP @12.(SP) ;EXIT. ; ; RESTORE REGISTERS ; RESR00: MOV (SP)+,12.(SP) ;STACK RETURN ADDRESS MOV (SP)+,R0 ;RESTORE THEM MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 MOV (SP)+,R5 RTS PC ;EXIT ;SUBROUTINE OTOA (OCTAL TO ASCII CONVERSION) ; ASSUMES 1) NUMBER IN REGIS DST 1TOR PTE AV;SA ATFD0, ROV M BCP RE;P BC0,#1D AD ; )+R0 (ST T0:10NK LD EA RST 1ASK OCBLS HI TRKMA ;F BB FCBIN E AVNS,IINV MO Y ORCTREDIN ;IE AMSN),R04( -OV M MENA. OD MBJ ONTREUR CVESAS-YE ;MENA,F0)(R-6V MO - NO ;0 10NK LNE B #0E,YTHBB MP C TEBY,H)+R0 (VBMO ? CKLO BMENAD MOJ OBS-YE ;0 ,R#7D AD - NO ;3 K2IN LNE B K?OCBLD GS ;) R0,(#1P CM T OUT GES-YE ;6 K2IN LEQ B D?DEENR DI ;0)(R0,#1P CM C -B ET;G BCG NE T UNCOE YT BET;GC ,B)+R0 (OV M ERADRE E OD CN.BI. RMFOE ORGN;I+ 0)(R+,0)(RP ^T BR ERROR ERRORA: JMP ERROR DECODE: MOVB RCHAR,(ADR)+ DECOD1: MOV DOT,-(LS) ;SAVE DOT CLR ARG ;CLR ARG,CMD,MINUS CLR RCMD CLR MINUS CLRB NUM MOV CIBSTO,R4 ;R4=ADR OF NTH ITEM IN ;CIB. INIT IT AT CIB D1: MOV #CTERM,TMP0 ;SEARCH LUKUP TBL FROM ;CTERM-1 TO BCTBL FOR (R4) LUK3: CMPB @R4,-(TMP0) ;IS NTH ITEM IN CIB EQ (TMP0)? BEQ LUK4 ;YES CMP TMP0,#BCTBL ;DONE? BNE LUK3 ;NO---KEEP GOING BR ERROR1 ;YES---ERROR LUK4: CMP #CALPH,TMP0 ;WHAT IS CHAR? BGE DALPHA ;ALP_: CLR PRSIZE-L4 ;0 TO PROGRAM SIZE .IFDF RTH ;BRTH2 TSTB RTF-L4 ;RTH? BEQ LNK182 ;NO- MOV SS-L4,PRSIZE-L4 ;YES- ADD #2,PRSIZE-L4 TSTB TMP1-L4 BEQ LNK184 SUB SS-L4,CURPC-L4 SUB #2,CURPC-L4 BR LNK182 LNK184: ADD SS-L4,CURPC-L4 ADD #2,CURPC-L4 .ENDC ;ERTH2 LNK182: MOV SYMC-L4,R0 ;SET PTR TO FIRST MODULE NAME. MOV R0,PTRG-L4 BR LINK17 LINK16: ADD #BPSYM,R0 ;MOVE TO NEXT ENTRY LINK17: CMP R0,SYME-L4 ;DONE? BHIS LINK18 ;YES-GET OUT MOVB FLAGS+1(R0),R1 ;GET FLAG TO HI`TER ON ENTRY(R0) ; 2) BUFFER STORAGE REQD. PTR SET (R1) ; 3) STACK TOP RATHER THAN 3RD REG. ; ON EXIT: CONVERSION IN BUFFER, PTR AT NEXT BYTE ; NUMBER REGISTER CLEARED ; TOP OF STACK CLEAN ; OTOA00: MOV #2230,-(SP) ;SET LP CNT & 1ST DIG BITS OTOA01: ASL R0 ;GET BIT FROM NUMBER... ROLB @SP ;...& MOVE INTO ASCII DIGIT BCC OTOA01 ;MARKER OUT AT OTHER END? MOVB @SP,(R1)+ ;IF SO STORE CHAR IN BUFFER MOVB #23,@SP ASL @SP ;DONE 6 DIGITS? BCC OTOA01 TST (SP)+ ;YES-CLEANCM 0 ,RINV MO C ND.E V DEBJ#OT AI.W O KIBLF NDIF . 6:K9IN L INB,IN #OV M DCEN . NB#IV,DEBJ#OD EA.R O KIBLF NDIF . DCEN . IUADREC, PSR J IOLK BDFIF . 9:10NK L6 K9IN LBR N ,INA#IV MO C ND.E A IN,#EVJDOB #ADRE . IOLK BDFFN.I C ND.E T DIEA,RPCR JS O KIBLF FD.I : 05K1LN 09K1LNS LO B NB#I+,P)(SP CM ) SP,(LNNB#ID AD ) SP-(N, IOV M3:K2IN LG LA FADRET 1SR EACL ;F ADRE FRBCL - NO ;6 K9IN LEQ B G?INMMCOD EA RST,1OPLO ;F ADRE FTBTS: 41NKLI DCEN . EVJDOB #ITWA . NA#IV,DEBJ#OD EA.R IObHAMERIC CMP #CSPEC,TMP0 BGT DNUM ;NUMERIC CMP #LUKUP,TMP0 BLT DTERM ;TERMINATOR BEQ D2 ;CR---DO IT AGAIN CMP #CIB,R4 ;IS THIS THE FIRST CHAR? BGT ERROR1 ;TOO BAD CMP #CSPEC,TMP0 BEQ DSLASH ;SLASH CMP #CSPEC+2,TMP0 BGT DPLUS ;+ BEQ DATSIN ;@ ;- DNEG: INC MINUS ;MINUS IS SET TO NOT ZERO BR D2 ;CONTINUE DATSIN: MOV #-2,ARG ;@---ARG=-2 CMP MRK,@R6 ; WHERE IS MARK? BHI D2 INC MINUS BR D2 DSLASH: DEC ARG ;SLASH---ARG=-1 BR D2 ;CONTINUE DALPHA: TScGH BYTE (ENTRY TYPE) MOVB FLAGS(R0),R2 ;GET FLAG LOW BYTE CMPB #OBJMN,R1 ;OBJ-MODULE NAME? BEQ LINK16 ;YES-IGNORE LNK170: CMPB #SYMN,R1 ;SYMBOL ENTRY? BEQ LINK19 ;YES-GO CMPB #SECTN,R1 ;SECTION NAME? BEQ LINK20 ;YES-GO CMPB #LOCAL,R1 ;LOCAL SECTION NAME? BEQ LINK20 ;YES-GO BR LINK16 ;IGNORE ALL OTHER THINGS. ; ; ENTRY POINT LINK19: BITB #ABSREL,R2 ;ABS OR REL? BEQ LINK33 ;ABS MOV PTSECT-L4,R3 MOV BASE(R3),BASE(R0) ;GET SECTION BASE ADD VALR(R0),BASE(R0) ;RELOCATE BR Ld UP STACK RTS PC ;... & EXIT ; ; RESIDENT LIBRARY SEARCH ROUTINE DIRS00: .IFNDF NOSEG CONTRL .WORD 6 ;OVERLAY #6 JMP ENTRY1 .ENDC .IFDF NOSEG JMP START6 .ENDC ; ; MOD40 UNPACK ; ; INPUT: R0=ADR OF MOD40 NUMBER (2 WORDS) ; R1=ADR OF ASCII STRING (6 BYTES) ; ; OUTPUT: R1 POINTS ONE PAST LAST GENERATED CHARACTER ; ; ; IF N IS THE MOD40 NUMBER, THEN ; N=C1*50^2+C2*50+C3 ; THUS, N/50^2 IS C1 AND THE REMAINDER IS C2*50+C3 ; THE REMAINDER IS DIVIDED BY 50 TO GET C2 ETCLK BDFFN.I C ND.E A O ;DT DIEA,RPCR JS O KIBLF FD.I N ,INA#IV MO B TAOV M9:12NK LR VEOO DBR 6 R+ADBJ,O01#4V MO R VEOO DBR 6 R+ADBJ OLR C -4DRJAOBR CL 4 +1 .NE B +6DRJAOB1,40 #MP CL:ETRR E7 K0IN LBR C ND.E R ADBJ#OV,DEBJ#ON PE.O O KIBLF NDIF . DCEN . ET STADAD EA RHE TENOP ;RDENOPC, PSR J IOLK BDFIF . R:VEOO D2 .+.= / BJ/O0 D5RA . -4=. . XT ELTAUEF DET;S4 R+ADBJ,O#0V MO 0 +1 .NE B +4DRJAOBT TS 4 R-ADBJ,OTLREER #OV M DCEN . ET STADA. OD MJ.OBT NI;I EVJDOB #ITIN . IOLK BDFFN.I C fT RCMD ;CMD=0? BNE ERROR1 ;NO---ERROR CMPB @R4,#'E BNE DALPH1 JMP ESDEC DALPH1: MOV TMP0,RCMD ;CMD=IDX BR D3 ;CONTINUE DNUM: BIT #170000,ARG BNE ERROR2 TST RCMD ;ANY ALPHAS YET? BNE ERROR4 ;YES...ERROR MOVB @R4,-(LS) ;CHAR TO STACK INCB NUM ;SET FLAG....GOT A NUMERIC BIC #177760,@R6 ;CLEAR OUT EXTRANEOUS BITS ASL ARG ;INTO ARG MOV ARG,-(R6) ASL ARG ASL ARG ADD (R6)+,ARG ADD (R6)+,ARG BMI ERROR2 BVS ERROR2 DPLUS:D2: INC R4 BR D1 ; ; DTERM: CMP R4,#gINK16 ;DO NEXT ENTRY LINK33: MOV VALR(R0),BASE(R0) ;SET ABS VALUE BR LINK16 ; ; SECTION NAME ; LINK20: BITB #ABSREL,R2 ;ABS OR REL? BNE LINK21 ;GO IF REL CLR BASE(R0) ;SET BASE AND CLR VALR(R0) ;SIZE TO 0 BR LINK22 LINK21: MOV VALR(R0),R3 ;GET SECTION SIZE MOV R3,-(SP) ;MAKE SIZE EVEN ASR R3 MOV (SP)+,R3 ADC R3 ADD R3,PRSIZE-L4 ;SUM UP FOR TOTAL SIZE .IFDF RTH ;BRTH3 CMP RTHPTR-L4,R0 ;PROCESSING RTH? BHI .+6 ;NO- MOV R3,RTHSIZ-L4 ;YES-EXTRACT RTH SIZE FROM SYMTAB .h. ; UNPA00: SAVREG MOV #-2,R4 ;MAJOR LOOP COUNT UNPA07: MOV #-3,R5 ;MINOR LOOP COUNT MOV (R0),R0 ;GET MOD40 WORD MOV #COEFF,R2 ;PTR TO COEFFICIENT TABLE UNPA06: CLR R3 ;0 QUOTIENT ; DIVIDE BY COEFFICIENTS UNPA02: CMP R0,(R2) ;DONE WITH DIVIDE BLO UNPA01 ;YES SUB (R2),R0 ;NO-SUBTRACT COEFF. INC R3 ;ADD 1 TO QUOTIENT BR UNPA02 ; DIVIDE DONE. QUOT IN R3, REMAINDER IN R0 ; CONVERT TO AN ASCII CHARACTER UNPA01: TSTB R3 BEQ UNPA03 ;"BLANK" CMPB R3,#33 BEQ UNPA05 ;"$" ND.E T SEA AT DUTNP IITIN ;RDITINC, PSR J IOLK BDFIF . 29K1LNQ BE SSPAB ST T UEAL VET RCKTA SVESA ;TVRESP),SP (OV M ALOV N ZESIW STOR PTE AV;SE IZWS,SR1V MO G LA FIB LET;S BFLIB NC I ADRET 1SE THS IISTH ;F ADRE FCBIN: 06NKLI ;Y ARBRLI; ;A INB-INN=BLIN N URET;R 04NKLIP JM T UNCOT SE ;LCOV+,P)(SV MO Y ARIN BTOL MACIDET ERNVCO ;) R12(N BID2 . ALEVON 2 S AS PIFE ORGN;I 76K1LNE BN S AS PTBTS K IN LOCSS AOFE IL FVL OST 1OR;F UF BSI CST 1OR FCEPA SDEVIRO;PM ND,EUF#BB SU G LA FjCIB ;WAS A TERMINATOR THE FIRST CHAR? BEQ ERROR1 ;YES---ERRORJ CMPB CIB,#CR BEQ FINE CMPB (R4),#SPACE BEQ D2 D3: TST RCMD ;DID HE TYPE AN ALPHA? BEQ ERROR1 ;NO SUB #BCTBL-1,RCMD CMP RCMD,#CC ;YES---IS COMMAND GE CHANGE BGE D3B ;NO CMP RCMD,#CU ;COMMAND GE UNSAVE? BGT D3D ;YES TST ARG ;ARG MUST BE ZERO BNE ERROR3 ;NO ARGS ALLOWED TST MINUS ;MUST BE ZERO BNE ERROR2 ;ILLEGAL ARG D3D: TST ARG ;THEN ARG MUST BE GE 0,+ MINUS BE 0 BLT ERROR1 TST MINUS BEQ D3B kENDC ;ERTH3 TSTB TMP1-L4 ;IS THIS FIRST TIME? BNE LINK78 ;FIRST MOV CURPC-L4,BASE(R0) ;SECOND--SET BASE ADD R3,CURPC-L4 ;ADJUST PC BR LINK22 LINK78: SUB R3,CURPC-L4 ;ADJUST PC BY SIZE. MOV CURPC-L4,BASE(R0) ;SET BASE OF SECTION TO NEW PC. LINK22: MOV R0,PTSECT-L4 ;SAVE PTR TO THIS SECTION. BR LINK16 ;DO NEXT ONE. ; LINK18: ; ; IF BOTTOM SET, CALCULATE NEW TOP AND ; ASSIGN ADDRESSES AGAIN. TSTB TMP1-L4 BEQ LNK183 .IFDF RTH ;BRTH4 TSTB NOIOF-L4 ;RTH ? BEQ LNK183 ;NO-l BGT UNPA04 ;"." OR "0-9" ADD #40,R3 ;"A-Z" UNPA03: ADD #16,R3 UNPA04: ADD #11,R3 UNPA05: ADD #11,R3 MOVB R3,(R1)+ ;STORE CHARACTER TST (R2)+ ;ADVANCE TO NEXT COEFF. INC R5 ;DONE 3 CHARS? BLT UNPA06 ;NO-DO MORE MOV (SP),R0 ;RESTORE ORIGINAL R0 AND TST (R0)+ ;MOVE TO NEXT WORD INC R4 ;DONE 2 WORDS BLT UNPA07 ;NO ; DONE--PUT CURRENT R1 ONTO THE STACK MOV R1,2(SP) RESREG RTS PC ; ; COEFFICIENT TABLE ; COEFF: +1600. ;40.^2 +40. ;40.^1 +1. ;40.^0 ; LFOVT SE ;F VL OCBIN: 94K1LN ;Y LAEROV; ;1 K0LNP JM: 76K1LN RNTURE ;4 K0IN LMP J 19RR E +4 .CC B )+SP (SR A UEAL V ; M MEOT,BP)(SV MO F OP TRBCL D ANG LA FET;S TFBOB NC I RYNABIO TALCT ORTVEON;C 1)(R 2IN2B.O L VANE O ET SOP TOR2 S AS PIFE ORGN;I 76K1LNE BN S AS PTBTS: 67NKLI ;M TOOT B; ; 01NKLIP JM L VANO G LA FIDT SE ;F IDB NC I6:19NK L; AP MADLOE THN IEDNTRI POR NLEAB TOLMBSYE THO NT IEDPICO; ERTHEI NRE AEYTH. .E,IERNKLIE THY BEDORGN IRE ATSENID . ;T ENQUSEUB SLLnJMP ERROR1 D3B: TST ARG ;IS ARG 0? BNE D3A ;NO TSTB NUM ;YES---DID HE TYPE A ZERO? BEQ D3C ;NO INC MINUS ;YES---MINUS=1 BR D3A D3C: INC ARG D3A: CLR COUNT MOV (LS)+,DOT ;GET DOT FROM STACK MOV R4,CIBSTO D7: MOVB RCMD,CMD ASL RCMD MOV DOT,TMPDOT ;SAVE DOT FOR ^P ; DISPATCH TO CMD SUBROUTINE JSR R5,@JTBL-2(RCMD) RTN: TSTB MCFLG1 BEQ RTJMP MOV #CIB,CIBSTO CLRB MCFLG1 JMP DECOD1 RTJMP: TST MODE BNE AGAIN TSTB IN1 BNE AGAIN TSTB IN2 BNE AGAIN INC CIBSTo ADD RTHSIZ-L4,PRSIZE-L4 ;YES- SUB RTHSIZ-L4,CURPC-L4 .ENDC ;ERTH4 LNK183: TSTB BOTF-L4 BEQ LINK77 ;NO BOTTOM. CLRB BOTF-L4 SUB CURPC-L4,TOPMEM-L4 ;CALCULATE NEW TOP AS ADD BOTMEM-L4,TOPMEM-L4 ; TOP-(CURRENT-BOTTOM) LINK77: TSTB TMP1-L4 ;DONE TWICE? BEQ LINK64 ;YES CLRB TMP1-L4 MOV TOPMEM-L4,-(SP) ;CALCULATE LOWADR SUB PRSIZE-L4,(SP) MOV (SP),CURPC-L4 .IFDF RTH ;BRTH5 TSTB RTF-L4 ;RTH? BEQ LNK185 ;NO- ADD SS-L4,(SP) ;YES- ADD #2,(SP) .ENDC ;ERTH5 LNK185: p; SUBROUTINE TXTPUT ; ; PUT INFO INTO TXT BLOCK ; THE RLD COMMAND IS STACKED ; ; THIS ROUTINE REMOVES 1 WORD ; FROM THE STACK,SP TXTP00: TST 2(SP) ;BYTE OR WORD COMMAND BMI TXTP01 ;GO IF BYTE COMMAND. MOVB R4,(R3)+ ;PUT IN FIRST BYTE SWAB R4 ;PREPARE FOR SECOND BYTE. TXTP01: MOVB R4,(R3)+ ;PUT IN BYTE TST 2(SP) ;BYTE OR WORD? BPL TXTP02 ;WORD SWAB R4 BEQ TXTP02 ;OK. ERR08 ; BYTE RELOC ERROR! TXTP02: MOV (SP)+,(SP) ;MOVE RETURN ADDRESS DOWN RTS PC ;RETURN ; ; AND AAP MADLOD ANE BLTAL BOYM S'SERNKLI; HE TTOINT PUS IONTICAFICIPE SISTHM RO FNTDE.IE THN HE T ;N IOATICIFECSPE IL FUTNP IST 1HE TTHWIT SES ICHITSWS HI TIF; ;T ENID; ;4 H1RT;E C ND.E C PTS R 1)(RR CL H TCWI SHE TARLE;C+ 1)(R+,1)(RP CM A OVTN RRBCL ) R1-(T TS 4 .+E BN A OVTN RTBTS: SWLR CR PTTH,RMESYV MO 0 +1 .NE B ABMTSYN ITH RTOR PTT SE ;S AS PTBTS: TRVPSA SWLR CBR . ZESIH RTT SE ;IZHSRT4,#4V MO O INOS-YE ;F IONOB NC I IOO DO-;N TRVPSAR B +4 .EQ B V?DEP INT ENRRCUV=DET rO INC CMDCNT RTJMP1: CMPB @CIBSTO,#SPACE ;CHECK NEXT CHAR FOR SPACE BNE RTJMP2 ;NO SPACE CHECK FOR CR INC CIBSTO ;YES SPACE-BUMP POINTER BY ONE BR RTJMP1 ;CHECK FOR SPACE AGAIN RTJMP2: CMPB @CIBSTO,#CR BEQ HAT CMPB @CIBSTO,#VT BEQ HAT CMPB @CIBSTO,#LF BEQ HAT JMP DECOD1 HAT: TSTB MACFLG BEQ HAT1 DEC MACCNT BGT HAT2 CLRB MACFLG BR HAT1 HAT2: MOV #CIB,CIBSTO JMP DECOD1 HAT1: JMP CKX FINE: MOV (LS)+,DOT BR HAT CIBSTO: .WORD 0 CMDCNT: .WORD 0 DELIM: .WOsMOV (SP)+,LOWADR-L4 JMP LINK63 ; FINALIZE THE TRANSFER ADDRESS ; LINK64: CMP TOPMEM-L4,PRSIZE-L4 BHIS .+6 INCB BELOW0-L4 TSTB TRAF-L4 ;IS THERE ONE? BNE LINK60 ;YES MOV #1,TRA-L4 ;ASSUME 1 BR LINK61 LINK60: TSTB FTRA-L4 ;WAS ONE FORCED? BNE LINK61 ;YES- TSTB STRA-L4 ;MUST WE SEARCH? BEQ LINK30 ;NO- MOV #1,R0 ;YES- SEARCH MOV #TRABLK+4,R4 SRGLOB MOV R0,R4 MOV R4,TRA-L4 BR LINK61 LINK30: MOV #TRABLK,R4 SRMODN ;SEARCH FOR MODULE NAME BR LINK32 ;FOUND ERR1t SUBROUTINE GETPC ; GET PC FOR CURRENT PLACE IN TXT BLOCK ; GETP00: MOV CURPC,R4 ;GET PC AT ENTRY TO BLOCK ADD OFFSET,R4 ;ADD CURRENT PLACE. RTS PC ; ; SYMOVF---SYMBOL TABLE OVERFLOW CHECK ; SYMO00: MOV ENDM,-(SP) SUB #BPSYM,(SP) CMP USYME,(SP)+ BLO SYMO01 ERR01 ;DIE!! SYMO01: RTS PC ;OK. ; ; SRMODN---SEARCH FOR A MODULE NAME. ; ; INPUT: R4 POINTS TO MOD4O NAME ; OUTPUT: R4 POINTS TO THE NAME IF FOUND ; ; CALL: SRMODN ; BR ;FOUND ; BR ;NOT FOUND ; SRMO00: SAVREYS;S6 V+DEBJ,O)+SP (MP C 41T EM . EV DEMSTSYT GEO-;N) SP-(6,10 #OV M IOO -DES;Y TRVPSAR B O-;N +4 .EQ B N?VEGIE AM NLEFI ;R ADBJ OST T TF RCBIN: S1SW A OVTN RCBIN: FLIX FI CSM RO FMENA ;N SI CCBIN + P)(ST TS + 3)(R+,P)(SV MO V ON CMT E RDWOD 2N ;P)(S,-BITORA #OV M )+R3,()+SP (OV M NVCOT EM K AC P50X DIRAA O ;D) SP-(I,OBAT#RV MO E AM NSSCERO PO-;N) SP-(),R12(V MO S YE ;L XFFIQ BE ? E:LUVAS ;I) R12(,@72 #PBCM 3 ,RM1NA #OV M2:WS S1 K8IN LMP J INGA ASI COR FSK;A) SP-(F,BUMD COV M )+SPvRD 0 AGAIN: JMP ONEA ERRORJ: JMP ERROR ;KBD INPUT BUFFER KIBPTR: 0 ;POINTER CMDBUF: .WORD 0 ;CODE WORD .WORD 0 .WORD 0 .WORD 0 ;POINTERS USED BY CSI .WORD 0 .WORD 0 .WORD 0 KIB: 123 ;MAX .BYTE 0,0 ;STATUS/MODE KIBBC: 0 .=.+124 ;BC ;DATA-------DATA .EVEN TOBPTR: 0 ;POINTER TOB: 123 ;MAX .BYTE 0,0 ;STATUS/MODE TOBBC: 0 ;BC .=.+124 ;DATA--------DATA .EVEN RIBPTR: 0 RIB: 112 .BYTE FASCII,0 RIBBC: 0 .=.+112 w2 ;MODULE NAME MUST BE THERE. LINK32: MOV R4,PTRG-L4 ;SET PTRG TO CURRENT NAME. MOV #TRABLK+4,R4 GETSEC ;SEARCH FOR SECTION NAME. ERR13 ;MUST BE THERE. ADD BASE(R4),TRA-L4 ;CALCULATE TRA ; FINALIZE DDT TRA LINK61: TSTB SDDTRA-L4 ;HAVE WE SEEN ONE? BEQ LINK31 ;NO- MOV #DDTTRA,R4 ;YES-FIX IT UP SRMODN BR .+4 ERR12 MOV R4,PTRG-L4 MOV #DDTTRA+4,R4 GETSEC ERR13 ADD BASE(R4),TRADDT-L4 LINK31: MOV SYMC-L4,PTRG-L4 ;SET PTRG MOV TRA-L4,R0 ;PRINT MSG--TRA,LOW ADR-L4,ETC MxG MOV SYMB,R0 ;GET POINTER TO START OF TABLE SRMO01: CMP R0,SYME ;DONE BLO SRMO02 ;NO RESREG ;YES - NOT FOUND ADD #2,(SP) ;ADJUST RETURN ADDRESS RTS PC ;EXIT SRMO02: CMPB #OBJMN,FLAGS+1(R0) ;IS THIS AN OBJ MODULE NAME? BEQ SRMO03 ;YES - SEE IF NAME IS SAME SRMO04: ADD #BPSYM,R0 ;NO - TRY NEXT ONE BR SRMO01 SRMO03: CMP (R4),(R0) ;FIRST WORD OK? BNE SRMO04 ;NO - GO TO NEXT ENTRY CMP 2(R4),2(R0) ;SECOND WORD OK? BNE SRMO04 ;NO - GO TO NEXT ENTRY ; FOUND!! MOV R0,8.(SP) ; (ST T PETY R DEINEM RSWT /RT INPR ;R0R,DEEM#RV MO: ERWS SR ROERS-YE ; 27RR E OKO-;N S2SWE BG ? >4Y ITORRI-PNO ;3)(R-24, #MP C ORRR-EES;Y 12.+E BL ? 0 =OR< Y ITORRI;P 3)(R-2T TS: CHND EI CSM RO FORRI;P IPCSB NC I LSVART Y ITORRI PSSCERO;PR ADRTH,DCEN #OV M R3R,IOPR #OV M3:WS SI CSM RO FCN ;N ICCSB NC I LSVART O NLLCAS ESOCPR ;DRTA,RS3SW #OV M R3N,#CV MO: S4SW SI COMFRT ;M MTSI CCBIN S ALTV R METIX MAS ESOCPR ;DRTA,RS4SW #OV M R3T,#MV MO: S5SW ENEVE AK MD,OD ;S SNC I ENEV ;5 WS S .EVEN POBPTR: 0 POB: 112 .BYTE FASCII,0 POBBC: 0 .=.+112 .END START 6]JBITS (TMP0)? ///////// {OV #TRAMA,R1 OTOA MOV LOWADR-L4,R0 .IFDF RTH ;BRTH6 TSTB RTF-L4 ;PROCESSING RTH ? BEQ LNK172 ;NO- SUB SS-L4,R0 ;YES,LA=LA-SS SUB #2,R0 .ENDC ;ERTH6 LNK172: MOV #TRAMB,R1 OTOA MOV TOPMEM-L4,R0 .IFDF RTH ;BRTH7 TSTB NOIOF-L4 ;CREATING RTH? BEQ LNK173 ;NO- MOV CURPC-L4,R0 MOV R0,SLARTH-L4 ;SAVE RTH LOAD ADDR ADD RTHSIZ-L4,R0 ;YES, HI=HI+RTHSIZE .ENDC ;ERTH7 LNK173: MOV #TRAMC,R1 OTOA JMP EXOVL4-L4 .IFNDF NOSEG ENDO04: SIZO04=ENDO04-BEGO04 ; ;*****OV|PUT CURRENT R0 ONTO STACK RESREG RTS PC ; ; PTGLOB---SEARCH FOR GLOBAL & RETURN A POINTER TO IT. ; ; INPUT: R4=POINTER TO NAME ; OUTPUT: R4=POINTER TO ENTRY IF FOUND. ; ; CALL PTGLOB ; ; BR ;NOT FOUND ; BR ;FOUND PTGL00: SAVREG MOV (R4),R0 ;IS THIS THE SPECIAL BIS 2(R4),R0 ;CASE OF 6 BLANKS? BEQ PTGL01 ;YES MOV SYMB,R0 ;SET LIMITS FOR SEARCH BR PTGL02 PTGL01: MOV PTRG,R0 ;START AT CURRENT OBJ MODULE IF 6 BLANKS PTGL02: CMP R0,USYME ;DONE SEARCHING BLO PTGL03 } * ; * "QSKED" SAVES & RESTORES ALL REGISTERS THAT IT USES. * ; * IT MAY BE CALLED BY ANY TYPE OF USER AT ANY TIME. * ; * * ; * G U L F E L E C T R O N I C S Y S T E M S * ; ******************************************************************** .PAGE QSKED: ;SUBROUTINE TO QUEUE A SCHEDULER MODULE CC B )+SP (SR A ?ZESIK ACSTD OD ;P)(S,-SSV MO I CSM RO FSS ;S ISCSB NC I LSVART R ADRT5,WS#SV MO E IZ SCKTA SSSCERO-PNO ;3 ,RSS #OV M6:WS S6 WS,SS5SW4,WS,SS3SW2,WS,SS1SWR,SESW +T:SDSW UEAL VCHITSWR PERO PTOO ;G) R5T(SDSW @MP J R5L AS 4 R1ER 4 .+E BL X MAWS#S5, RMP C R5),R1 (OV M ZESIW STOR PTE AV;S R21, ROV M5:17NK L ;E IM TALRE ;; 14THBR ;H RTF FD.I C PTS R2:K0IN LH TCWI SHE TARLE;C )+SP@(R CL ) SP,(R1D AD ) SP (SL A CHITSWF OSSREDD ARMFO ;P)(S,-1)(RV MO : 11NK:L01NK L. IISC AERLAY #5***** L5=BEGOVR-BEGO05 ;COMPUTE OFFSET FROM ;RUN TIME OVERLAY AREA BEGO05: ;JUMP TABLE TO ENTRY POINTS ;IN THIS OVERLAY. JMP START5 ;ENTRY1 .ENDC ; ; ; GET GSD (GGSD) ; ; READ GSD OFF A TAPE AND BUILDS A SYMBOL TABLE. ; ; START5: SAVREG ;SAVE REGISTER TSTB LIBF-L5 ;TEST LIB FLAG BNE GGSD22 ;IN DIR SEARCH MOVTAB ;INPUT INIT. SET R0, R1 MOV #INA,IN-L5 .IFDF BLKIO JSR PC,@#READIT ;INITIATE READ ON INA .ENDC .IFNDF BLKIO .READ #OBJDEV,#INA .ENDC GGSD2;NO- RESREG ;YES - EXIT RTS PC PTGL03: CMP (R4),(R0) ;CHECK FIRST WORD BNE PTGL04 ;NO MATCH. CMP 2(R4),2(R0) ;TRY SECOND WORD BNE PTGL04 ;NO MATCH. ; MATCH--- CMPB #OBJMN,FLAGS+1(R0) ;FILTER OUT OBJ MODULE NAMES. BEQ PTGL04 MOV R0,8.(SP) RESREG ADD #2,(SP) RTS PC ; NO MATCH-- PTGL04: ADD #BPSYM,R0 ;ADVANCE R0 TO NEXT ENTRY BR PTGL02 ;TRY AGAIN. ; ; GETSEC--GET POINTER TO SECTION NAME. ; ; INPUT: R4 PTS TO NAME. ; OUTPUT: R4 PTS TO PROPER ENTRY ; ; CALL: GETSEC ;  ;TO WAIT FOR INSERTION INTO ONE OF THE ;TWO SCHEDULER THREADS MOV (SP),-(SP) ;MOVE RETURN ADDRESS UP FOR RTI LATER MOV PS,2(SP) ;...AND SET UP PS FOR RTI, TOO MOV R0,-(SP) ;SAVE USER'S MOV #340,PS ;RAISE CPU LEVEL TO AVOID INTERFERENCE CMP STBPTR,#SKTBND ;IS TABLE FULL? BHIS QSKA40 ;YES: POINTER IS AT BOTTOM, SO ERROR XIT MOV 6(SP),R0 TOR PTE ORGN;I )+SP (ST T4:K0LN 19RR E +4 .CC B )+SP (SR A OP TEW NET;SM MEOP,TP)(SV MO F OT BRBCL F OP TCBIN Y ARIN BTOL TAOCT ERNVCO ;) R12(N BIO2 . ALEVON 2 S AS PIFT OUT GE ;1 K0LNE BN S AS PTBTS: 68NKLI ;P TO ;; PCS RT D GS GING REAV;S G REES R EM MOFP TOT ULFADET SE ;EMPMTO),R3 (OV M RSTEINPO ;MESY,UR3V MO E BLTAL BOYM;S MESY3, ROV M TEDAUP ;C YM,SR3V MO ) R3-(T TS E IL FUTNP ISELO;C C OI I3:15NK L. CKLO BEW NSSCERO PGO ;4 15NK LBR W NOK ACSTN EACL ;+ P)(ST TS K OCBLR HE6: IOIG GGSD23: BITB #EOF,-1(R0) ;ERROR? BNE GGSDEX ;YES, GET OUT CMPB #STBBLK,(R1) ;IS THIS STB? BNE .+6 ;NO- JMP BEGSTB-L5 ;YES-GO PROCESS IT. CMPB #GSDBLK,(R1) ;IS THIS GSD? BEQ .+4 ;YES, OK ERR03 ;ERROR IF NOT GSD. CMPB #OBJMN,7(R1) ;IS 1-ST ENTRY OBJ MOD NAME? BEQ .+4 ;YES, OK ERR04 ;ELSE, ERROR. GGSD01: BITB #EOF,-1(R0) ;TEST STATUS FOR ERRORS BNE GGSDEX ;ERROR - EXIT AND IGNORE INCB NSTBF-L5 ;CAN'T INPUT CORE LIBS ANY MORE GGSD02: MOV (R1)+,R2 ;GET BLOCK TYPE  BR ;NOT FOUND ; GETS00: PTGLOB ;FIND GLOBAL NAME GETS01: RTS PC ;NOT FOUND. ; FOUND, INSURE THAT IT IS A SECTION NAME. CMPB #SECTN,FLAGS+1(R4) BEQ GETS02 CMPB #LOCAL,FLAGS+1(R4) BNE GETS01 ;NOT A SECTION NAME GETS02: ADD #2,(SP) ;SECT NAME. ADJUST RETURN RTS PC .EOT ; TAPE 7 ; ; SRGLOB---SEARCH FOR GLOBAL AND RETURN VALUE IN R4 ; ; INPUT: R4=ADR OF GLOBAL NAME ; OUTPUT: R4=VALUE ; ; CALL SRGLOB ; BR ;NOT FOUND ; ; SRGL00: PTGLOB ;GET POINTER TO GLOBAL ;MODULE'S ADDRESS BIC #10000,2(R0) ;CLEAR "D" FLAG IN CASE WAS DE-QUEUED DEC (R0) ;IS MODULE INACTIVE (THREAD WORD = 1)? BEQ QSKA20 ;O.K. ADD #2,(R0) ;SEE IF IN "WAIT" TABLE BEQ QSKA30 ;YES: O.K. TO TAKE GOOD EXIT NOW BR QSKA35 ;IN THREAD: TAKE ERROR EXIT QSKA20: ;MODULE READY FOR INSERTION IN TABLE ADD #2,STBPTR ;PUSH TABLE POINTEOTANT GE ; IGIO: 55K1LN D?HEISIN FCKLO BK,ECCHO ;G 56K1LNR B RDWO1 R FENSRA-TNO ;)+R3,()+R1 (OV M K.OCBLR HEOTANT GEO -GES;Y 55K1LNI BH ? EDETPLOM CCKLO BTB;S P)(S3, RMP C6:15NK LC BTEDAUP ;) SP,(#4B SU . FOINL RONTCOE ORGN;I )+R1 (ST T K.OCBLR FOM OO RNO, 23S2 ; 18RR E CKLO BOR FOMROS IREHE;T +4 .OSBL R TELAK ACSTN EACL ;DMEN),SP (MP C ) SP,(0)(RD AD ) SP-(3, ROV M ORRR-ENO ; 25RR E OKS-YE ;4 .+Q BE ? CKLO BABMTSYO-;N) R1,(LKBBST #PBCM - ES;Y 53K1LNQ BE ? ABMTSYF OND EEDCHEASUB #2,(R0) ;DECREMENT BC CMPB #GSDBLK,R2 ;GSD BEQ GGSD03 ;YES .IFDF RTH ;BRTH8 TSTB RTF-L5 ;PROCESSING RTH? BEQ GGSD29 ;NO- CMPB #TXTBLK,R2 ;YES - TEXT? BNE GGSD04 ;NO - GET ANOTHER BLOCK TSTB CSISS-L5 ;YES - SS FROM CSI? BNE GGSDEX ;YES- MOV 22(R1),SS-L5 ;NO - EXTRACT SS FROM O.M. MOV SS-L5,-(SP) ;ODD STACK SIZE ASR (SP)+ BCC EVEN ;EVEN INC SS-L5 ;ODD, MAKE EVEN EVEN: TSTB CSIN-L5 ;NAME FROM CSI? BNE GGSDEX ;NO - MOV 40(R1),NAM2-L5 ;YES - EXTRACT NAME FROM O.BRTS PC ;NOT FOUND MOV BASE(R4),R4 ;FETCH VALUE ADD #2,(SP) RTS PC ;EXIT ; ; INUSYM--INSERT AS UNDEFINED ; ; INPUT: R4=ADR OF WHAT TO INSERT INTO UNDEFINED AREA ; ; INUS00: MOV R0,-(SP) ;STACK R0 MOV USYME,R0 MOV (R4)+,(R0)+ ;MOVE IN THE UNDEFINED SYMBOL MOV (R4)+,(R0)+ MOV (R4)+,(R0)+ MOV (R4)+,(R0)+ ADD #BPSYM,USYME SYMOVF ;OVERFLOW? MOV (SP)+,R0 RTS PC ; ; INSYME ; ; INSERT AN ENTRY AT SYME. R4 POINTS TO THE ENTRY. ; ADJUST POINTERS SYME AND USYME ; ; INSR MOV R0,@STBPTR ;LOAD NEW MODULE INTO TABLE QSKA30: CLR 6(SP) ;NOW READY TO EXIT. CLEAR ERROR FLAG QSKA35: DEC (R0) ;EITHER SETS T/W = -1 TO SHOW IN "WAIT" ;...OR RESTORES T/W TO ORIGINAL, IF NOT THREADED QSKA40: MOV (SP)+,R0 ;RESTORE USER'S RTI ;RESTORE USER'S PS & RETURN .PAGE DQSKED: ;SYSTEM SUBROUTINE TO DE-QUEUE A SCHEDULER MODULE MOV (SP),-(SP) ;RE-OR;R) R1,(NDBEST #PBCM: 54K1LN S-YE ;3 ,RMESYV MO - NO ;3 15NK LLO B T?PUINO TABMTSYY AN ;2 ,#0)(RP CM R ROERS-YE ; 24RR E OKO-;N +4 .EQ B Y?ADREALK AS T AADRE ;F TBNSB ST T NTOU CABMTSYT ENEMCRIN ;T UNCO SCBIN: TBGSBE LEAB TOFD EN ; -1 4 H2RT;E C ND.E 5 17NK+L H RT ;T ,''RE YT.B 4 H2RT;B TH RDFIF . 96K1LN + NTDE;I 'DI, 'TEBY . 94K1LN + AYRLVE;O 'VO, 'TEBY . 74NKLI + LEFID TENATECAON;C 'CC, 'TEBY . 58NKLI + ESAP;T 'AT, 'TEBY . 69NKLI + SSREDD AERSFANTR ;R ,''TE YT.B 5 K6IN+L~. MOV 42(R1),NAM1-L5 BR GGSDEX ;GET OUT. .ENDC ;ERTH8 GGSD29: TSTB LIBF-L5 BNE GGSD30 MOVB TAPES-L5,-(SP) BISB CONCAT-L5,(SP)+ BNE GGSD04 ;IGNORE GSDEND IF EITHER ; TAPES OR CONCAT ON. GGSD30: CMPB #GSDEND,R2 ;GSD END BNE GGSD04 ;NO GGSDEX: RESREG ;YES - EXIT TSTB LIBF-L5 ;TEST LIB FLAG BNE GGSDE1 ;IN DIR SEARCH IOIC ;CLOSE OBJECT MODULE FILE GGSDE1: RTS PC GGSD22: TSTB SBBF-L5 ;MATCH IN 2ND LINE? BNE GGSD24 ;YES - FIX UP "IN" IOIG ;NO - GET NEXT BLOCK Y00: SAVREG MOV R4,R2 MOV SYME,R4 INSY01: UNSQUISH ;MAKE A HOLE AT SYME ADD #BPSYM,SYME ADD #BPSYM,USYME MOV (R2)+,(R4)+ ;MOVE IN THE SYMBOL MOV (R2)+,(R4)+ MOV (R2)+,(R4)+ MOV (R2)+,(R4)+ SYMOVF ;SYMBOL OVERFLOW? RESREG RTS PC ; ; INSERT AN ENTRY AT (PTRH)+BPSYM ; INSERT THE ENTRY ALPHABETICALLY ; R4 POINTS TO THE ENTRY ; UPDATE POINTERS SYME,USYME ; INPT00: SAVREG MOV R4,R2 ;SET PTRS MOV PTRH,R4 INPT01: ADD #BPSYM,R4 ;START LOOP LOOKING FOR END OF SECTION ;DER STACK FOR "RTI" RETURN AT END MOV PS,2(SP) ;STACK NOW READY FOR "RTI" JSR R5,PUSHR ;PUSH ALL REGS ONTO STACK MOV 20(SP),R0 ;MODULE'S ADDRESS MOV #340,PS ;LOCK OUT INTERFERENCE FROM SCHEDULER CMP #1,(R0) ;HAS MODULE BEEN DE-QUEUED ALREADY? BEQ DQSK20 ;YES: INACTIVE,SO IGNORE CMP #-1,(R0) ;IS IT STILL IN "WAIT" TABLE? BEQ DQSK50 ;YES: T DD ;D ,''OE YT.B 6 K0IN+L Y ARBRLI ;0 L, 'TEBY . 67NKLI + OMTTBO ;0 B, 'TEBY . 68NKLI + OP;T ,0'TE YT.B: SWRE P; LEAB TCHATSPDI ; ;S HETCWIESPRR FOG INSSCERO P ;; 5PETA ; OT.E 2 K8IN LMP J P)(S,-UFDBCMV MO: 2$ UFDBCMF,BU #UB S$: 1$ 2BR - ES;YF BUMD,C0.#2B SU - NO ;$ 1EQ B N?RARTFOM RO FCS ;F TROR FTBTS: 73NKLI 1-S AS P ;0 K8IN LMP J 2-S AS P ;3 K7IN LNE B S?AS PCHHI W ;S AS PTBTS E IN LXTNEO TNTOU C ;E INFLB NC I2:K7IN L- ND EOT N ;4 K8IN LMP J D-EN; 72NKLIE z BR GGSD23 GGSD24: CMP #2,CNT-L5 BNE GGSD04 MOV IN-L5,R0 CMP (R0)+,(R0)+ MOV R0,R1 TST (R1)+ DEC CNT-L5 BR GGSD23 GGSD04: CMP #1,CNT-L5 BNE GGSD25 MOV INSAVE-L5,IN-L5 CLR CNT-L5 CLRB SBBF-L5 GGSD25: IOIG BR GGSD01 GGSD03: SUB #8.,(R0) ;ANY ENTRY LEFT? BLT GGSD04 ;NO - GO GET ANOTHER BLOCK MOV R1,R4 ;SET R4 TO THE ENTRY ADD #8.,R1 ;MOVE R1 TO NEXT ENTRY. MOVB FLAGS+1(R4),R2 ;GET ENTRY TYPE CMP R2,#GSDMAX BLE .+4 ERR14 ASL R2 JMP @GGSD05-BEGO05+BEGOVR(R2) ;DOR AN ENTRY WHICH IS>THEN PRESENT ;ENTRY CMP R4,SYME ;CHECK FOR END OF SYMBOLS BHIS INPT02 CMPB FLAGS+1(R4),#SYMN BNE INPT02 CMP (R4),(R2) ;DOUBLE PREC COMP BHI INPT02 BLO INPT01 CMP 2(R4),2(R2) ;IF 1ST WORDS EQUAL,TRY 2ND WORDS BLOS INPT01 ;TRY AGAIN ; INSERT AT (R4) INPT02: CMP R4,PTRG ;UPDATE PTRG IF INSERTING BELOW PTRG BHI .+10 ADD #BPSYM,PTRG BR INSY01 ;GO INSERT AT R4 ; ; UNSQUISH---MAKE A HOLE IN TABLE ; ; INPUT: R4 POINTS WHERE TO MAKE HOLE. ; UNSGO SET THE "D" FLAG MOV #2,R5 ;INIT COUNTER TO SEARCH BOTH THREADS MOV #TH1BGN,R1 ;START BY SEARCHING THREAD #1 DQSK10: ;LOOP RETURN POINT FOR THREAD SEARCH MOV R1,R2 ;COPY ADDRESS OF UPSTREAM MODULE MOV (R1),R1 ;GET DOWNSTREAM MODULE'S ADDRESS BEQ DQSK40 ;END OF THREAD CMP R0,R1 ;IS THIS THE MODULE WE ARE LOOKING FOR? BNE DQSK10 ;NO BN 2 SI COMFRE LUVAN URET RCKHE C ;V IRCS SST T0:K7IN L; NGRISTD ANMMCOF OND EOR FCKHE C ;; CHITSWT EX NDO; 99NKLIR B )+R1 (ST T *N+2R11=;R1 ,R)+SP (DD A P)(SL AS ) SP-(),R1 (OV M9:K7IN LH TCWI SHE TSSCERO P ;) R0,(PCR JS: 71NKLI 79NKLIR B 9 R1ER ; !!CHITSWL GALEIL2 ; ;- ES Y ;1 K7IN LNE B ?ITD IN F ;0 RST T SRSW 0 ,RSWSTPO #OV M S-YE; 70NKLIQ BE ? S HETCWI STHWIE ON D ;) R1 (ST T9:K9IN LH TCWI SSTIR FOFR AD; 1 ,R8.V+DEBJ#OV MO N IOATENATNCCOE OR MNO ;T CAON CRBCL: 98NKLIvISPATCH GGSD05: +GGSD06-BEGO05+BEGOVR ;MODULE NAME +GGSD07-BEGO05+BEGOVR ;SECTION NAME +GGSD03-BEGO05+BEGOVR ;ISD SIZE (IGNORE) +GGSD08-BEGO05+BEGOVR ;TRA SPECIFICATION +GGSD09-BEGO05+BEGOVR ;SYMBOL +GGSD07-BEGO05+BEGOVR ;LOCAL SECTION NAME +GGSD32-BEGO05+BEGOVR ;IDENT DIRECTIVE ; ; MODULE NAME ; GGSD06: CLRB SAMECS-L5 MOV R4,R2 ;SAVE R4 SRMODN ;CHECK IF MODULE NAME IS UNIQUE BR GGSD10 ;ERROR IF NOT UNIQUE GGSD31: MOV R2,R4 MOV SYME-L5,PTRG-L5 ;SET PTR TO MODULE NAME INSYMQ00: SAVREG MOV USYME,R0 ;SOURCE POINTER MOV R0,R1 ADD #BPSYM,R1 ;TEST POINTER UNSQ01: CMP R0,R4 ;DONE? BHI UNSQ02 ;NO RESREG RTS PC UNSQ02: MOV -(R0),-(R1) ;BLOCK MOVE MOV -(R0),-(R1) MOV -(R0),-(R1) MOV -(R0),-(R1) MOV -(R0),-(R1) BR UNSQ01 ;DO NEXT ONE. ; ; SQUISH---REMOVE AN ENTRY FROM TABLE. ; ; INPUT: R4=ADR OF WHERE TO REMOVE ENTRY ; SQUI00: SAVREG MOV R4,R0 MOV #BPSYM,R1 ADD R1,R0 ASR R1 SQUI01: CMP R0,USYME ;DONE BLO SQUI02 ;NO-- RESREG ;YES-EXIMOV (R1),(R2) ;YES: "BRIDGE" OVER THIS MODULE IN THREAD MOV #1,(R1) ;...AND SET T/W = 1 TO SHOW INACTIVE DQSK20: ;HERE UPON SUCCESSFUL DE-QUEUE CLR 20(SP) ;ERROR RETURN STATUS: O.K. DQSK30: ;HERE FOR GENERAL EXIT FROM ROUTINE JSR R5,POPR ;POP REGS FROM STACK RTI ;RETURN SET ABOVE: RESTORE ORIGINAL CPU STATUS & RETURN DQSK40: ;HERE WHEN END OF THREAD REACHED MOV #TH2BGN,R1 ;S HETCWI SSTPOS ESOCPR ;; S PETAB LR C PETAR HEOTANO D ,>0F I ;0 K9IN LGT B ERNTOU CNTMEREEC DS-YE ;T PCTAC DE - NO; 98NKLIQ BE ? S PETAG INDO; ESAP TTBTS: 97NKLI SD GET;G D GS G 2SSPA ;0 K4IN LMP J +6 .EQ B SSPAB ST T 02NK LNE B AGFL. IB LSTTE ;F IB LTBTS4:16NK LE IN LSI CXTNET GEO ;G 73NKLIR B NELIT 1SE THT NOS ;I NELII CST ENRRCUT HA TTECADIIN ;E INFLB NC I I2CSO TLLCAY MMDUE SUISO-;N 89NKLIP JM - ES;Y +6 .NE B E?IN LSI COFD EN ;V IRCS SST T6:16NK LS PETAR EACLrE ;INSERT AT SYME + UPDATE PTRS BR GGSD03 ;DO NEXT ENTRY GGSD10: CMP (R2),MAIN1-L5 ;MODULE NAME NOT UNIQUE BNE ASBEF1 ;MODULE NAME MAIN.? CMP 2(R2),MAIN2-L5 BNE ASBEF1 ;NO- CMP SYMB-L5,SYMC-L5 ;YES - PROCESSING CORE LIBS? BEQ ASBEF1 ;NO- TSTB MAINF-L5 ;YES - WAS ONE MAIN. SEEN ALREADY? BNE PREPAR ;YES - PRINT ERROR AND ABORT OBJ MOD. INCB MAINF-L5 ;NO - MARK FIRST MAIN. WAS SEEN. BR GGSD31 ;AND DON'T PRINT ERROR AND CONTINUE ;PROCESSING OBJECT MODULE. PREPAR: CLRB MAINF-T RTS PC SQUI02: MOV R1,R2 ;SET COUNTER = BPSYM/2 SQUI03: MOV (R0)+,(R4)+ ;BLOCK TRANSFER DEC R2 BGT SQUI03 BR SQUI01 ;DO NEXT ONE. ; ; ; ; COPY THE PHYSICAL DEVICE NAME ; FROM THE MONITOR TO THE OBJDEV. ; THIS WAY THE OBJDEV WILL BE CONSISTENT ; WITH THE MONITOR IN CASE THE OBJDEV ; WAS ASSIGNED TO A SPECIFIC PHYSICAL ; DEVICE DEVCH: .IFDF BLKIO JSR PC,READST .ENDC .IFNDF BLKIO .STAT #OBJDEV .ENDC TST (SP)+ MOV (SP)+,OBJDEV+6 TST (SP)+ RTS PC ; CANNED MES ;SET UP FOR POSSIBLE SEARCH OF THREAD #2 DEC R5 ;LOOP COUNTER BNE DQSK10 ;STILL MUST DO THREAD #2 BR DQSK30 ;SEARCH FAIL: EXIT WITH NON-ZERO ERROR DQSK50: ;HERE WHEN MODULE STILL IN WAIT" TABLE. MUST SET THE ; "D" DE-QUEUE FLAG IN MODULE TO FORCE IGNORE WHEN ; "SKNSRT" RUNS. IF MODULE IS QUEUED AGAIN BEFORE ; "SKNSRT" RUNS, THIS "D" FLAG WILL BE CLEREAD, AND MODULE ; ;S PETAB LR C7:16NK LS SKTAS ESOCPR ;4 16NK LBR S PETAR EACL- ES;Y ESAP TRBCL - NO ;4 16NK LNE B 0?T=UNCOE AP TIS ;T PCTAT TS G LALF CARLE-CES;Y AGFLCLB LR C KSAS TNGSIESOCPRT ARST- NO ;4 16NK LEQ B N? OAGFLCLS-YE ;G LALF CTBTS S SKTAG INSSCERO PRTTA SO-;N 64K1LNQ BE ? ESAP TOMFRD.TEUNCOB TAYM SSTLA ;S PETAB ST T5:16NK L INGA ANTOUSCE UCED RTOO ;G 68K1LNR B ESAP TARLE CGO -NTOU CPETAF OND;E 67K1LNE BL . NTOU CPETAE UCED-RES;Y CTAP TEC D O-;N 66K1LNQ BE ? ESAP TIN. MECOS ABMTSYE ORnL5 BR ASBEF3 ASBEF1: CMP (R2),DATA1-L5 ;MODULE NAME DATA.? BNE ASBEF3 CMP 2(R2),DATA2-L5 BNE ASBEF3 CMP SYMB-L5,SYMC-L5 ;PROCESSING CORE LIBS? BEQ ASBEF3 TSTB DATAF-L5 ;WAS 1 DATA. SEEN ALREADY? BNE 1$ INCB DATAF-L5 MOV R4,-(SP) MOV R2,R4 SRMODN BR .+4 ERR25 MOV #126423,(R4) MOV (SP)+,R4 BR GGSD31 1$: CLRB DATAF-L5 ASBEF3: ERR05 ;ERROR-MODULE NAME NOT UNIQUE TSTB CONCAT-L5 BEQ GGSD27 GGSD28: IOIG BITB #EOF,-1(R0) BNE GGSDEX CMPB #MODEND,(R1) BEQ .+4 BRSAGES LNKNM: +LNKNMA-LNKNM-6 ;LINK-11 .BYTE FASC,0 +LNKNMA-LNKNM-6 .ASCII /LINK / VRSION .BYTE CR,LF LNKNMA: .EVEN ; ; ; BUFFER CONTAINING "#" ; NO: +NOA-NO-6 ; # .BYTE FASC,0 +NOA-NO-6 .ASCII /#/ .BYTE VT NOA: .EVEN ; ; SYMBOL OVERFLOW - FATAL ; ER0100: SUB #8.,R4 ;PTR TO SYMBOL MOV PTRG,R0 ;ADR OF MODULE NAME MOV #USMA,R1 UNPACK ;UNPACK MODULE NAME MOV R4,R0 MOV #USMB,R1 UNPACK ;UNPACK SYMBOL NAME MOV #USM,R0 TYPE ;TYPE MESSAGE  WILL BE LEFT IN THE "WAIT" TABLE. BIS #10000,2(R0) ;SET "D" FLAG IN MODULE OPTION BYTE BR DQSK20 ;TAKE GOOD EXIT COUNTR: .WORD 0 ;THIS IS THE ABORT/TIME-SLICE COUNTER!! ABMPLR: .WORD 0 ;MULTIPLIER FOR ABORT AND TIME/SLICE CURTHD: .WORD THDTAB ;POINTER TO CURRENT THREAD BEGIN WORD THDTAB: .WORD TH1BGN ;THREAD BEGIN TABLE .WORD TH2BGN .WORD TH1BGN TH1BGN: .WORD 0 ;M ESAP TTBTS . BSLIE OR CNGSIESOCPRY TLENRRCU ;G LALF CCBIN S AS PND 2INS ECSPE IL FABMTSY ;5 16NK LLT B IBCLH UGROTHR PTI CSV AD ;T UNCO SCBDE: 68K1LN SSPAT 1SN ITR PSI;C 64K1LNQ BE E NCVAADO TRY T'TON;D SSPAB ST T 13THER ; DCEN . 98NKLIP JM 0 18NK LNE B SSPAB ST T O-;N 14.+Q BE ? SWE ONALD ANST ;F IONOB ST T 13THBR ;H RTF FD.I : 90NKLI DCEN . NEDOP JM G SENOF FD.I C ND.E 1 RYNT EMP J #9Y LAEROV ;. 9RDWO . RLNTCO G SENOF NDIF . TH RTEEACRO ;G 0:18NK L8 K9IN LBR T PCTAR j GGSD28 JMP GGSD26 GGSD27: JMP GGSDEX ; ; SECTION NAME ; GGSD07: MOV R4,R2 ;GIND THE GLOBAL + GET PTGLOB ;PTR (R4) TO IT. BR GGSD11 ;NOT FOUND, GO INSERT IT. BITB #UNDEF,FLAGS(R4) ;IS IT DEFINED BNE GGSD12 ;YES SQUISH ;NO - REMOVE THE UNDEFINED SYMBOL SUB #BPSYM,USYME-L5 GGSD11: MOV R2,R4 ;INSERT AT SYME-L5 AND UPDATE PTRS. MOV SYME-L5,PTRH-L5 INSYME BR GGSD14 GGSD12: CMPB FLAGS+1(R4),#SECTN ;IS IT A SECTION NAME? BEQ GGSD33 CMPB FLAGS+1(R4),#LOCAL ;LOCAL SECTION N ERR18 ;RESTART ERMF: MOV #OBJADR,R0 MOV #ERFILA,R1 UNPACK MOV OBJADR+4,CONVER CLR CONVER+2 MOV #CONVER,R0 MOV #ERFILB,R1 UNPACK CLR CONVER MOV OBJDEV+6,CONVER+2 MOV #CONVER,R0 MOV #ERFILC,R1 UNPACK MOV #ERFIL,R0 TYPE JMP LINK ; ; MOD NAME NOT UNIQUE ; ER0500: MOV R2,R0 ;PTR TO NAME MOV #MNNUA,R1 UNPACK MOV #MNNU,R0 TYPE CLR -(SP) MOV #1300,-(SP) IOT RTS PC ; ; BYTE RELOCATION ERROR -- NOT FATAL ; ER0800: SAVREG GETPC ;PUT CURRENT PC INTO R4 ;ACTUAL BEGIN OF THREAD #1 TH2BGN: .WORD 0 ;#2 STBPTR: .WORD SWAITB ;SCHEDULER "WAIT" TABLE POINTER SWAITB: .WORD 0 ;TOP OF "WAIT" STACK IS ALWAYS ZERO .=$SWATZ*2+. ;THE SCHEDULER "WAIT" TABLE SKTBND = .-2 ;END OF "WAIT" TABLE DAYTAB = .-1 ;THIS IS THE 12-BYTE TABLE OF DAYS-PER-MONTH JANARY = . FEBARY = .+1 .BYTE 31.,28.,31.,30.,31.,30.,31.,31.,30.,31.,30.,31. .ECL S PETAB LR C BFLIB LR C2:K0LN 95NKLIR B )+R1 (ST T *N+2R11= R ;R1+,P)(SD AD ) SP (SL A CHITSWT EX NTO1 RCEANDV A ;P)(S,-1)(RV MO: 93NKLI CHITSWS ESOCPRO G ;) R0,(PCR JS: 94NKLI H.TCWI SSTPOA S IITE UMSS;A 93NKLIQ BE . CHITSWE THE IZGNCORET N'DOF IRENOIG; R0T TS 0 RINR ADH TCPAIS DET R ; SRSW 0 ,RSWRE#PV MO S HETCWI SREMOO NE-ON D ;0 K9IN LEQ B 1)(RT TS: 95NKLI ZESIH TCWI STOR PT; 1 ,R8.V+DEBJ#OV MO: 92NKLI CTAP,T#1V MO S PETAB NC I 92NKLIE BN 6 V+DEBJ,O2033#6P CM T PCfAME? BNE GGSD13 ;NO - ERROR - MULT DEFINITION. GGSD33: TSTB SCOUNT-L5 ;READ AT LEAST 1 SYMTAB? BEQ LNK163 ;NO- TSTB NSTBF-L5 ;YES-FINISHED READING SYMTABS? BEQ LNK163 ;NO- INCB SAMECS-L5 ;YES-SET FLAG TO AID IN ;CHECKING FOR EXTRA ENTRIES LNK163: CMPB FLAGS+1(R4),#LOCAL BEQ GGSD11 MOV R4,PTRH-L5 CMP VALR(R4),VALR(R2) ;WHICH SIZE IS BIGGEST BHIS GGSD14 TSTB SAMECS-L5 BEQ .+8. CMP R4,SYMC-L5 BLO .+10. MOV VALR(R2),VALR(R4) ;GET BIGGEST SIZE. BR GGSD14 ERR26 ;W323, SUB #2,R4 MOV R4,-(SP) MOV #1301,-(SP) IOT RESREG RTS PC ;RETURN ; ; INPUT CHECKSUM ERROR AND/OR INPUT BUFFER OVERFLOW ; ER1500: MOV -2(R0),-(SP) BIC #377,@SP SWAB @SP MOV #2202,-(SP) ;CODE=S202 IOT TSTB NOTINP BNE ER1501 JMP ERMF ER1501: CLRB NOTINP JMP LINK .IFNDF RSX ER2100: MOV TRNBLK+6,-(SP) BIC #377,@SP SWAB @SP MOV #2207,-(SP) ;CODE=S207 .ENDC ERROUT: IOT ;PRINT ERROR MESSAGE. JMP LINK .IF DF RTH ;SUBROUTINE RTVALS: CONVERTS VALUES OFVEN CLOCK: ;EXTERNAL REFERENCE FOR TIME-OF-DAY CLOCK AND CALENDAR TICTOC: .BYTE 0 ;COUNTS CLOCK BEATS PER SECOND SECOND: .BYTE 0 ;CURRENT TIME MINUTE: .BYTE 0 ;CURRENT TIME HOUR: .BYTE 0 ;CURRENT TIME JDATE: .WORD 1 ;CURRENT JULIAN DATE MONTH: .BYTE 1 ;CURRENT MONTH MDAY: .BYTE 1 ;CURRENT DAY OF MONTH YEAR: .BYTE 71. ;CURRENT YEAR (MINUS 1900) SKDBTAR CL S PETAB LR C2:14NK L; ESCHITSWRE PSSCERO P; ; S-YE ; 19RR E O-;N 42K1LNQ BE ? ET ST1BI ;) SP,(#2T BI: 5$ 1- ES;Y 2FIT BCBIN - NO ;$ 15Q BE ? ET ST2BI ;) SP,(#4T BI: 39NKLI 81NKLIP JM ) SP-(F,BUMD COV M PETY 0 ,RINUM#DV MO 4 N+MIDU2, #OV M +6INUM,DLFCR #OV M0:14NK LS MMNOB LR C5:14NK L0 14NK LEQ B MSOM NTBTS: 39K1LN C.PE SUTNP INGSIIS;M 7 R1ER 9 13NK LCS B -NO ;+ P)(SR AS - S YE ;9 K3IN LNE B H?TCWI S AREHE TAS W -NO ;10V+DEBJ OST T -ES;Y 39NKLIE BN ? CEVIDET PUINN bCSECT SIZE TOO LARGE LNK193: BR GGSD14 ;GO DO NEXT ENTRY ; ; TRA SPECIFICATION ; GGSD08: TSTB DDTF-L5 ;IS THIS THE DEBUG FILE? BEQ GGSD20 ;NO- INCB SDDTRA-L5 MOV #DDTTRA,R2 BR GGSD21 GGSD20: TSTB UTRA-L5 ;SHOULD WE USE THIS ONE? BEQ GGSD18 CLRB UTRA-L5 INCB TRAF-L5 BR GGSD19 GGSD18: TSTB TRAF-L5 ;IS THERE ONE ALREADY? BNE GGSD14 ;YES, GET OUT GGSD19: MOV #TRABLK,R2 ; GET CURRENT OBJ MODULE NAME GGSD21: MOV PTRG-L5,R3 MOV (R3)+,(R2)+ MOV (R3),(R2)+ ; GET TRA SPEC  RT ; SWITCH Z SAVES THEM ; R3:CONTAINS PTR TO SAVE REG ; R4:CONTAINS PTR TO EXIT RTVA00: CMPB #72,@2(R1) ;IS VALUE :? BNE .+14 ;YES- TST (R3)+ TST (R1)+ TST (SP)+ JMP @RTADR CONSAV ;NO-CONVERT & SAVE TST (R1)+ RTS PC ;SUBROUTINE CONSAV:CONVERTS & SAVES VALUE OF SWITCHES ; R3:CONTAINS PTR TO SAVE REG. CONS00: MOV 2(R1),-(SP) MOV #DETOBI,-(SP) EMT CONV MOV (SP)+,(R3)+ TST (SP)+ RTS PC REMDER:+REMDRA-REMDER-6 ;/RT SW FORMAT REMINDER .BYTE FASC,0 +REMDRA-SY: .BYTE -1 ;SCHEDULER BUSY FLAG: IDLE=-1; .END AREHE TAS;W6 V+DEBJ OST T LYONT BIT AS LVESA ;RVSISC6,7777#1C BI E LUVAN URET RHE TVESA; V IRCS,SP)(SV MO: 59K1LN KIBL #I2CS . CKLO BUTNP IUPT SE; I LK,BUFDBCMV MO: 91NKLI STIR;F T EPXC EESIN LLL AONT PUUT OTOE NGHA;CF BUMD@C2, #OV M8:K3IN LI CSN I<" "LTMU> N=VE;E 6 R1ER I CSN I<" "LTMUO >ND=OD ;8 K3IN LCS B )+SP (SR A$:14 - ES;Y 9 R1ER - NO ;$ 14Q BE ? ET ST1BI ;) SP,(#2T BI: 3$ 1- ES;Y 2FIT BCBIN - NO ;$ 13Q BE ? ET ST2BI ;) SP,(#4T BI: 37NKLI SI CIN" "DIRECTORY ;SYMBOL BEQ MATCH1 ;IF SYMBOLS MATCH GO TO 2ND COMP ; ; MISMATCH ; ATTEMPT TO INCREMENT INDEX OF SYMBOL TABLE ; MISM1: TST (SP) ;NOOP TRYINC: ADD #12,R3 ;INCREMENT SYMBOL TABLE COUNT BNE INCTAB ;IF MORE SYMBOLS IN SYMTAB GO TO ;INCREMENT INDEX ; ; REACHED THE END OF THE UNDEFINEDS IN SYMBOL TABLE ; .IFNDF RSX TSTB MONLIB-L6 BNE INCMC1 .ENDC ADD #10,R2 ;INCREMENT DIRECTORY COUNT OUT1: BR OUT6 OUT5: JMP FINI .IFNDF RSX INCMC1: .IFNDF OLDLUK ADD #2,E 0 ;TAPES SWITCH TAPCT: 0 ;TAPE COUNTER SSP: 0 ;SAVED SP FOR PMAP BOTMEM: 0 ;BOTTOM OF MEMOTY TOPF: .BYTE 0 ;TOP SPECIFIED FLAG BOTF: .BYTE 0 ;BOTTOM FLAG GENDF: 0 ;GSD END SEEN FLAG DDTF: .BYTE 0 ;D SWITCH SDDTRA: .BYTE 0 ;DDT TRA SEEN FLAG FLINE: .BYTE 0 ;FIRST CSI LINE FLAG UTRA: .BYTE 0 ;USE THIS FILE FOR TRA FTRA: .BYTE 0 ;FORCED TRA STRA: .BYTE 0 ;SYMBOLIC TRA MAPOPF: .BYTE 0 ;MAP OPEN FLAG LODOPF: .BYTE 0 ; LOAD MOD OPEN FLAG FREADF: .BYTE 0 ;1ST READ FLAG REINITINSTRUCTION .ENDC $DEBUG TIMEX2: DECB TIMBSY ;NESTING "BUSY" COUNTER BLT TIMEX3 ;NORMALLY RESIDES @ ZERO DURING ROUTINE ;EXECUTION. GOES ABOVE IF ADDITIONAL ;OCCASIONS TO ENTER ROUTINE HAVE ;OCCURRED DURING EXECUTION. IN THIS ;CASE ROUTINE IS RE-EXECUTED IMMEDIATELY ;IN AN ATTEMPT TO RERN,TRTTAMSV MO K LULD ODFFN.I P TOON,M00#2D AD P TOON,M)+SP (OV M NFMO . ;P TOR TONIMOT ENRRCUN AIBT O ;; DCEN . ERNTOI PCKLO BTELUSOABE THE AV HWEW NO ;RTTAMS),R0 (DD A SSREDD ASKDIR PERO PHE TTOT INPO ;0 ,R4.#1D AD E ERTHE ARE ;W 3$E BN E UR SKEMAW NO ;R1+,0)(RP CM: 3$ RYNT ERDHI THE TTOP KI SOW;N R0),R0 (DD A RYNT;E 2$E BN T ARSTE THD IN;F1 ,R)+R0 (MP C$: 2Y TREND ONEC SHE TTOT INPO ;0 ,R0)(RD AD H ASTRR VE OIPSK, NO ;$ 1NE B E?IN LIL CHE TOFT ARSTE THS HI TIS ;R1+,0)(RP CM: 1$ NT:R2 .ENDC .IFDF OLDLUK ADD #16,R2 .ENDC .ENDC OUT6: BGE FINI ;FINISHED IF NO MORE SYMBOLS IN DIRECTORY ; ; DID NOT REACH THE END OF THE DIRECTORY ; .IFNDF RSX TSTB MONLIB-L6 BNE INCE1 .ENDC ADD #6,R0 ;POINT TO NEXT DIR ENTRY BR OUT2 .IFNDF RSX INCE1: .IFNDF OLDLUK INC INDEX-L6 ;UPDATE MRT TABLE INDEX .ENDC .IFDF OLDLUK ADD #14,R0 .ENDC .ENDC OUT2: MOV (R0)+,R4 ;GET NEXT DIRECTORY SYMBOL ; RESTART UNDEFINEDS IN SYMBOL TABLE MOV SVSTBC-L6,R3 ;RESET SYMBOL TABL: .BYTE 0 ;INIT OR OPEN NEXT? INTMOV: .BYTE 0 ;MOVE SYMTAB AWAY FROM NEWMT FLAG: .BYTE 0 LIBF: .BYTE 0 ;LIBRARY FLAG FILEOR: .BYTE 0 ;DEVICE IS FILE ORIENTED BELOW0: .BYTE 0 ;PROGRAM TO BE LINKED BELOW 0 ODTF: .BYTE 0 ;TRY TO OPEN ODT FILE NOTINP: .BYTE 0 ;EOM NOT IN INPUT NSTBF: .BYTE 0 ;1ST NON STB FILE WAS SEEN STBOPF: .BYTE 0 ;SYMBOL TABLE DEVICE IS OPEN NOMMS: .BYTE 0 ;NO OUTPUT, MAPE, OR SYMTAB SYMTAB: .BYTE 0 ;SYMBOL TABLE OUTPUT FLAG SCOUNT: .BYTE 0 ;# OF SYMTABS READ IN 1S-SYNCHRONIZE JMP TIMA15 TIMEX3: JMP RESTOR ;NORMAL RETURN TO INTERRUPTED PROGRAM .PAGE TTBPTR: .WORD TWAITB ;TIMER TABLE POINTER TO "WAIT" STACK TWAITB: .WORD 0 ;FIRST LOC'N OF "WAIT" TABLE IS ALWAYS 0 .=$TWATZ*2+. ;RESERVE SPACE FOR TABLE TMTBND = .-2 ;ADDRESS OF LAST TALBE LOCATION TFIRST: ;TABLE OF POINTERS TO FIRST MODULE IN TANSCOD DEEE NET;G R11, #OV M ERNTOI PERFFBUT GE ;R06,A+IN #OV M !!!!SE UTOH UGNO EADREE ;W EVJDOB #ITWA . ATTHY RA PND AANTRE THO ;DK BLRN#TV,DEBJ#ON RA.T S ESDRADE OR;C2 K+BLRN,T+6NA#IV MO R FENSRA TTOT UNCOD OR;W4 K+BLRN,T)+SP (OV M NTOU CRDWOA O TITT ERNVCO ;) SP (SR A ND;A C CL T UNCOE YT BHE TET;G) SP-(A,INV MO N RA THE TOR FSSREDD AANP UET;SK BLRN,T)+SP (OV M ITR BEEMEM;RT ARST,MP)(SV MO S ESDRADY ARBRLIT GE ; ILTC.G ; RYNT EEROPPRD IN FND ACKLO BNGTIARSTY ARBRLIR TONIMOT GE ;; 6E SIZE COUNT MOV SYME-L6,R1 ;REPOSITION THE POINTER IN R1 TO ;THE BEGINNING OF THE SYMBOL TABLE MOV (R1)+,R5 ;GET NEXT UNDEFINED IN SYMBOL TABLE BR COMP1 ;GO TO COMPARE FIRST UNDEFINED ;IN SYMBOL TABLE ; INDEX UNDEFINEDS IN SYMBOL TABLE ; INCTAB: ADD #10,R1 ;POINT TO NEXT SYMTAB ENTRY MOV (R1)+,R5 BR COMP1 ;GO TO COMPARE FIRST UNDEFINED MATCH1: .IFNDF OLDLUK TSTB MONLIB-L6 ;1ST PARTS MATCHED BEQ COMP2 MOV (R1)+,R5 TST R5 BEQ MATCH2 BR MISM2 .ENDC COMP2: MOV (R0T PASS SAMECS: .BYTE 0 ;LARGER SIZE SAME NAMED CSECT F CLFLAG: .BYTE 0 ;CURRENTLY PROCESSING COR LIBS BIT2F: .BYTE 0 ;CSI2 FILLED IN SYSTEM DEV ;FOR DEFAULT DEV GOF: .BYTE 0 ;EXECUTE LOAD MODULE FLAG IDF: .BYTE 0 ;ONLY HANDLE 1ST .IDENT .IFDF RTH ;BRTH19 RTF: .BYTE 0 ;RTH NOIOF: .BYTE 0 ;NO I/O. RTNOVA: .BYTE 0 ;=1 IF /RT SW WITH NO VALUE CSISS: .BYTE 0 ;STACK SIZE FROM CSI CSIMT: .BYTE 0 ;MAX TIME FROM CSI CSICN: .BYTE 0 ;CALL NO FROM CSI CSIP: .BYTE 0 ;PRIORITY FROM CSI ;EACH RESOLUTION'S THREAD. CONTAIN ZERO ;WHEN THREAD IS EMPTY. .WORD ,,,,,,,,,,,,,,, ;MAX TABLE SIZE: 16 WORDS .=$NRES*2+TFIRST ;ACTUAL TABLE SIZE = [$NRES] WORDS TLAST: ;TABLE OF POINTERS TO LAST MODULE IN ;EACH RESOLUTION'S THREAD. CONTAIN THE ;ADDRESS OF [TFIRST(R)] WHEN THREAD ;IS EMPTY. .WORD ,,,,,,,,,, UKDLOLF NDF .I C ND.E V DEBJ#OT NI.I O KIBLF NDIF . DCEN . CEVIDET PUINE THT NI;ID TRNI,IPCR JS O KIBLF FD.I C ND.E Y TREN' SY 'UPT SE ;+6EVJDOB0,2575 #OV M ROZET NI UET;S5 V+DEBJ ORBCL K LULD ODF NIF . AGFLB LR C ABVTMO G LA FCBIN ; CEVIDET PUINT NI I ;; C ND.E + P)(S+,P)(SP CM: 00K2LN FF.I I LK#B2 SI.C I LK,BUFDBCMV MO F BUMD@C2, #OV M )+SP (ST T P)(S1 SI.C + P)(ST TS: 15K1LN UKDLOLF DIF . 13K1LNP JM: 36NKLI DCEN . 14K1LNR B IB LON MSSCERO PGO ;5 11NK LEQ B NTOU CNT2)+,R4 ;PREPARE FOR 2ND MATCHING MOV (R1)+,R5 CMP R4,R5 BEQ MATCH2 ;2ND PARTS MATCHED? MISM2: ;NO- MISM3: TRYIN2: ADD #12,R3 ;TRY INCR SYMTAB COUNT BNE INCT2 ;SYMTAB ENDED? .IFNDF RSX TSTB MONLIB-L6 BNE INCM2 .ENDC ADD #10,R2 ;YES-TRY INCR DIR COUNT BR OUT3 .IFNDF RSX INCM2: .IFNDF OLDLUK ADD #2,R2 .ENDC .IFDF OLDLUK ADD #16,R2 .ENDC .ENDC OUT3: BGE FINI ;DIR ENDED? .IFNDF RSX TSTB MONLIB-L6 BNE INCE2 .ENDC ADD #4,R0 ;NO- GET NEXT DIR ENTRY BR CSIN: .BYTE 0 ;NAME FROM CSI .EVEN ;DO NOT SEPARATE NEXT 4 WORDS. SS: .WORD 0 ;STACK SIZE MT: .WORD 0 ;MAX TIME CN: .WORD 0 ;CALL NO PRIOR: .WORD 0 ;PRIORITY NAM1: .WORD 0 ;LOAD MODULE NAM2: .WORD 0 ;NAME RTADR: .WORD 0 ;REG USED IN /RT SW PROCESSING SLARTH: .WORD 0 ;RTH LOAD ADR .ENDC ;ERTH19 .EVEN TEST: .WORD 0 ;AID IN IOOP PUT: .WORD 0 ;AID IN IOOP D1: 0 ;ENDM-USYME D2: 0 ;USYME-SYMB FBBF: 0 ;1ST BINARY BLOCK FLAG SBBF: 0 ;2ND BINARY BLOCK FLAG FNAME: 0 ;SA,,,,, ;MAX TABLE SIZE: 16 WORDS .=$NRES*2+TLAST ;ACTUAL TABLE SIZE = [$NRES] WORDS .PAGE RESTAB: ;RESOLUTION COUNTER TABLE: PERMANENT .BYTE RES0,RES1,RES2,RES3,RES4,RES5,RES6,RES7,RES8 .BYTE RES9,RES10,RES11,RES12,RES13,RES14,RES15 .=RESTAB+$NRES ;SET TO ACTUAL TABLE SIZE .BYTE 0 ;END BYTE CURTAB: .BYTE RES0,RES1,RES2,RES3,RES4,RES5,RES6,RES7,RES8 .BYTE RES9,RMEREEC;D R2C DE F BUIN CTOINE AGSSMED NEAN CVEMO ;)+R1,()+R0 (VBMO: 14K1LN GESAES MEDNNCAO TR0T INPO ;R06,L+ON#MV MO . 20O TERNTOU CET;S2 ,R1)(R-2V MO + 1)(R+,1)(RP CM ) R12(.,#4V MO - NO ;6 K3IN LEQ B FT.I 0 20NK LNE B FF.I K LULD ODFF .I ? CHARSEB LIN MON ;I IBNLMOB ST T SX RDFFN.I I CIAST MAOR FTOE OD MET;S 1)(RR CL: 1$ BCN RARTFOT GE ;1)(R,2BCRTFOV MO C ND.E - ES;Y 1$E BN ? CHARSEB LIN MON ;I IBNLMOB ST T SX RDFFN.I $ 1EQ B N?RARTFOM RO FSI;C RFRTFOB ST T BCX MAT SE ;)+R1. OUT4 .IFNDF RSX INCE2: .IFNDF OLDLUK INC INDEX-L6 ;UPDATE MRT TABLE INDEX .ENDC .IFDF OLDLUK ADD #12,R0 .ENDC .ENDC OUT4: MOV (R0)+,R4 MOV SVSTBC-L6,R3 ;RESTART UNDEFINES MOV SYME-L6,R1 ;IN SYMTAB MOV (R1)+,R5 BR COMP1 INCT2: ADD #6,R1 ;POINT TO NEXT SYMTAB ENTRY MOV (R1)+,R5 ;SYMTAB DID NOT END YET TSTB MONLIB-L6 ;MONITOR SEARCH BNE COMP1 ;YES, ENTRY IS CORRECT CMP -(R0),-(R0) ;RESTART DIR ENTRY TO 1ST PART MOV (R0)+,R4 ;OF SYMBOL PAIR BR COMP1 ;IN SYMBOL TAVED 1ST PART OF O. M. N. SNAME: 0 ;SAVED 2ND PART OF O. M. N. INSAVE: 0 ;SAVED IN CNT: 0 ;COUNT FOR PREREAD BUFFERS BUFSIZ: 0 ;BUFFER SIZE FOR TRAN NEWMT: 0 ;NEW MONITOR TOP SPTEST: 0 ;SAVED VALUE OF SP BC: .WORD 0 ;BC FOR DIR SEARCH ;DON'T SEPARATE NEXT 3 WORDS LBYTE: .BYTE 0 ;LOW BYTE HBYTE: .BYTE 0 ;HIGH BYTE CONVER: 0,0 ;2 WORDS TO AID TO CONVERT ;1 WORD FROM MOD40 SVSTBC: .WORD 0 ;SAVED SYMTAB BC SWSIZE: .WORD 0 ;SAVED LIB SW SIZE SPRETV: .WORD 0 ;STACK RETES10,RES11,RES12,RES13,RES14,RES15 .=CURTAB+$NRES ;SET TO ACTUAL TABLE SIZE QTMCNT: .BYTE 0 ;COUNTER FOR USE IN "QTIME" TIMBSY: .BYTE 0 ;FLAG & NESTING COUNTER FOR [TIMER] BASCNT: .BYTE 0 ;OPTIONAL SUB-RESOLUTION PULSE COUNTER CURRES: .BYTE 0 ;CURRENT RESOLUTION WHEN "TIMER" ACTIVE .EVEN DQFLAG: .WORD 0 ;# OF MODULES REQUESTED TO BE DE-QUEUED ;ON CURRENT RESOLUTION WHILE,(4.#8V MO 1 ,RP)(SV MO F BUIN,CP)(SV MO ) SP,(4.#1D AD K ACSTE THN OERFFBUD ANMMCOE ACPL ;P)(S,-P)(SV MO F BUIN C &UFDBCM; F BUMD,CP)(SV MO , DMENX FI. OMROT GO; M ND,EP)(SV MO: 81NKLI 18RR E ORRR EALAT FM-OO RNO ;+ P)(ST TS 1 K8IN LLO B P)(SE,YMUSP CM: 2$ NGRISTD ANMMCOR HEOTAN; ) SP,(UF#BB SU OR FOMROR FOK ECCH; ) SP-(M,ND EOV M$: 1$ 2BR ) SP,(0.#2B SU - ES;Y) SP-(S,GCBEV MO C ND.E - ES;Y 1$E BN ? CHARSEB LIN MON ;I IBNLMOB ST T SX RDFFN.I - NO ;$ 1EQ B N?RARTFOM RO FSI;C RF*BLE ; ; SYMBOLS MATCHED ; MATCH2: .IFNDF RSX TSTB MONLIB-L6 BNE MONLT3 .ENDC MOVB (R0)+,LBYTE-L6 BITB #10,LBYTE-L6 BEQ INTERM ;UNDEF MOVB (R0)+,HBYTE-L6 ;DEFINED CMPB #1,HBYTE-L6 ;IS IT A SECTION,OR A SYMBOL? BEQ MATCH3 ;MATCHED A SECTION NAME CMPB #4,HBYTE-L6 ;MATCHED A SYMBOL BEQ MATCH3 TST -(R0) BR MISM3 .IFNDF RSX MONLT3: BITB #1,(R1) BNE MONMAT BR MISM3 .ENDC INTERM: TSTB -(R0) BR MISM3 .IFNDF RSX MONMAT: .IFNDF OLDLUK MOV INDEX-L6,4(R1) SUB #2, VALUE DIRSRV: .WORD 0 ;DIR SEARCH RET VALUE FDATA: .WORD 0 STBC: .WORD 0 NOOUTP: .BYTE 0 ;NO OUTPUT REQUESTED NOONOM: .BYTE 0 ;NO OUTPUT NO MAP REQUESTED MONTOP: 0 ;TOP OF MONITOR CMDBUF: 0 ;PTR TO CURRENT CSI BUFFER CINBUF: 0 ;PTR TO CSI LINE BUFFER HEADER SCSIRV: 0 ;SAVED CSI RETURN VALUE MAINF: .BYTE 0 ;TWO MAIN. (OVERLAYS) DATAF: .BYTE 0 ;TWO DATA. (OVERLAYS) TXTSVB: 0,0 ;SAVE AREA FOR TXT BLOCKS MSTART: .WORD 0 ;MONLIB.SYS STARTING BLOCK TSIZE: .WORD 0 ;DECREASING MRT TAB ACTIVE IN "TIMER" .END RTFOB ST T0:K8IN L DCEN . T2ARSTP JM G SENOF FD.I C ND.E 1 RYNT EMP J #2Y LAEROV ;2 D OR.W L TRON C C ND.E T OREP,RPCR JS G BUDEF FD.I : 01UN RY LAEROVR PES CKLO BBY ;2 N0RUR B #CKLO BSEEACRIN Y.TREN ;4 ,RR5D AD O T #CKLO BNGTIARST S.YE ;)+R2,(R4V MO ? YSLAEROVE OR;M 01UN RLT B R32, #UB S2:N0RU *2S AYRLVE OOFR BEUM;N3 ,R)+R2 (OV M R2B,TAUN#RV MO ; Y.NCDESIREN-NOR FO0 O TET SIT BGNSI Y.TREN ;B TAUN RVETIECSPRER EITHN IAYRLVE OCHEA ;F OERMBNUK OCBLL CASIHY PNGTIARSTE ACPL ;&4(R1) ;MAKE THE EMT VALUE CORRECT .ENDC .IFDF OLDLUK CMP 6(R0),4(R1) .ENDC CMP -(R1),-(R1) BR INCM2 .ENDC MATCH3: MOV #1,DIRSRV-L6 BR FINI1 .IFDF OLDLUK .IFNDF RSX TSTEND: TST R4 BEQ FINI JMP COMP1 .ENDC .ENDC FINI: MOV #0,DIRSRV-L6 FINI1: RTS PC .IFNDF NOSEG ENDO06: SIZO06=ENDO06-BEGO06 ; ;*****OVERLAY #7***** L7=BEGOVR-BEGO07 ;COMPUTE OFFSET FROM ;RUN TIME OVERLAY AREA BEGO07: ;JUMP TABLE TO ENTRY POINTS ;IN THIS OVERLAY. ; JMP START7 ;ENTRY1 JMP LE SIZE INDEX: .WORD 0 ;INCREASING INDEX IN MRT TABLE .=.+128. ; ;END OF AREA TO BE CLEARED ; ENDCLR: ; TOPMEM: HGHMEM-ALODSZ ;TOP OF MEMORY LIMIT: .LIMIT .IF DF RTH FIO1: .RAD50 /$OT/ ;$OTSV,FORTRAN IMPURE AREA FIO2: .RAD50 /SV / ;PTR IN RAD50 RTHSIZ: .WORD 0 ;RTH SIZE .ENDC FIL: .RAD50 /$S$/ ;DEFAULT NAM: .RAD50 /Y$M/ ;SYMBOL TABLE EXT: .RAD50 /STB/ ;OUTPUT DEV: .RAD50 /SY/ ;PARAMETERS MAIN1: .RAD50 /MAI/ ;MAIN. IN RADIX 50 MAIN2: .RAD50 /N. / DATA1: .RAD50 /DAT/ ;DATA ABRT BR ABRD30 ; GO FINISH UP ABRT ; ; ABRC10 =. ; HERE ONLY IF ABORTING THE ACTIVE TASK ABRT MOV ACTIVE,R1 ; GET TASK'S HEADER ADDRESS TO CLEAR ABRT CLR TSTACK(R1) ; THE TASK STACK POINTER FOR DISPTCH ABRT CLR ACTIVE ; GET RID OF THE ACTIVE TASK ABRT CLR COUNTR ; AND THE TASK'S COUNTER ; K.ACSTT ECRRCO ;)+R6,()+R6 (MP C3:N0RU ORRR EALAT;F PN OMT E CEOR FTOC ENOP .RMFOER;P) R6-(1, ROV M T.ENESPRT NOR OV1.K1IN;L) R6-(B,RFOV #OV M4:N0RU 05UN RBR ] ,1[1Y TR ;IDERUS1,40 #OV M E.ON DLL;A 04UN REQ B 01#4D,RISE UMP C CKTA SCTREOR;C+ 6)(R+,6)(RP CM ? STXI ELEFIS OE;D 03UN RNE B CKLO BNGTIARST ;R4+,6)(RV MO K OO.L ;4 1MT E CKLO BNKLI ;6)(R,-R1V MO ) R6-(R CL K OCBLE IL;F) R6-(B,RFOV #OV M5:N0RU E.IL FUSUOIGNTCOE THF ;O CKLO BNGTIARSTL CASIHY PHE TNEMIERET;D ;Y LAEROVR PES "PMAP10 ;ENTRY2 .ENDC ; ; SUBROUTINE TO PRINT THE LOAD MAP (PMAP) ; ; OUTPUT TO MAPSL ; INIT MAPSL TO DEVICE CODE IN MAPDEV ; ; SET POINTERS TO SYMBOL TABLE START7: SAVREG MOV SP,SSP-L7 ;SAVE SP MOV SYMB-L7,R2 ;BEGINNING OF TABLE ; ; INITIALIZE MAP OUTPUT DEVICE ; MOV #ERRET3-BEGO07+BEGOVR,MAPADR-4-L7 ;SET UP ;ERROR RETURN .INIT #MAPDEV ;INIT THE DATA SET TST MAPADR+4-L7 BNE .+10 MOV #0,MAPADR+4-L7 .=.-4 .RAD50 /MAP/ .=.+2 .DELET #MAPDEV,#MAPADR ERRET3: CLR MA. IN RADIX 50 DATA2: .RAD50 /A. / ; ; MESSAGE ; .IF DF OLDLUK MONL: +MONLA-MONL-6 ;SY:MONLIB.LDA[1,1] .BYTE FASC,0 +MONLA-MONL-6 .ASCII 'SY:MONLIB.LDA[1,1]' .ASCII '/E' .BYTE CR,LF MONLA: .EVEN .ENDC ; TRAM: +TRAMX-TRAM-6 .BYTE FASC,0 +TRAMX-TRAM-6 .BYTE CR,LF .ASCII /TRANSFER ADDRESS: / TRAMA: .=.+6 .BYTE CR,LF .ASCII /LOW LIMIT: / TRAMB: .=.+6 .BYTE CR,LF .ASCII /HIGH LIMIT: / TRAMC: .=.+6 .BYTE CR,LF TRAMX: .EVEN ; ; SAVE AREA FOR TRANSFER ADABRT CLR MFLAG ; CLEAR TASK LOCKOUT MOV SP,R1 ; HERE WE MUST TRANSFER , IN ORDER, THE ABRT ADD #ATASK+4,R1 ; CONTENTS OF THE TASK STACK TO THE SYS ABRT MOV STACK,SP ; STACK SO THAT THE RETURN (ABRFIN) WILLABRT MOV -(R1),-(SP) ; WORK. (GLAD WE ONLY DO THIS ONCE!) ABRT MOV -(R1),-(SP) ; FIRST, THE TASK# AND THE PC. ABRT .IFNZ RGSAVE ; CKLO;B5 ,R)+R6 (OV M DEVIDI7, RSR J ZESIY LAEROV ;6)(R,-RDRWOV #OV M AYRLVE OER PKSOCBLF OERMBNUE INRMTEDE ;O TZESIY LAEROVO NT IZESIK OCBLE IDIV;D K ACSTF OOP TON) DSOR(WE IZ SCKLO BALICYSPH ; CKTA SCTREOR;C+ 6)(R+,6)(RP CM 1 RATST . USATSTE ICEV DINTAOB ;1 RITIN . CEVIDEY LAEROVT NI.I ;K OCBLK IN;L1 ,RLBVR#OV MO O ;N P? UET;S 01UN REQ B LL AYSLAEROV ;T NIOI NTBTS ; ****S*AYRLVE OOR FUPT SE****;* 2:EROV CKTA SCTREOR;C )+R6 (ST T I2CS ;7 5MT E LKRBOVF OSSREDD;A R6,@R0V PADR-4-L7 ;NOW LET MONITOR HANDLE ERRORS INCB MAPOPF-L7 ;INDICATE MAP OPEN TST MAPADR+4-L7 BNE .+10 MOV #0,MAPADR+4-L7 ;SET DEFAULT EXTENSION .=.-4 .RAD50 /MAP/ .=.+2 .OPEN #MAPDEV,#MAPADR .RSTRT #PMAP14 ;SET UP ABORTING ADDRESS .IFNDF RSX .DTCVT #DATE ;GET TODAY'S DATE .TMCVT #TIME ;AND THE TIME MOVB #' ,R0 MOV #DATE,R1 MOVB R0,-(R1) MOVB R0,-(R1) .ENDC MOV #PMAP86,R0 ;PRINT HEAD MAPTYP ; ; CLEAR ID ; MOV #100040,-(SP) MOV (SP),ID-L7 MOV (SP),ID-L7+2 MDRESS TRABLK: .=.+10. TRA=.-2 ;TRA IS IN LAST WORD ; ; DDT TRANSFER ADDR DDTTRA: .=.+10. TRADDT=.-2 IN: 0 INA: INBLN-6 ;MAX .BYTE FBIN,0 ;MODE 0 ;BC ; ;THE FOLLOWING CSI BUFFER AND LINE BUFFER ;WILL BE INPUT ONCE TO THE CSI TO CAUSE ;THE SET UP OF THE OVERLAY DEVICE LINK ;BLOCK WITH THE DEFAULT (SYSTEM) DEVICE. ; .IF NDF NOSEG CMDB: .WORD 2 ;OUTPUT DATA SET SPECIFICATION. .=.+14 ;RESERVE 6 WORDS. .WORD 14 ;MAXIMUM BYTE COUNT. .WORD 0 ;FORMATTED ASCII MOD ABRT MOV -(R1),-(SP) ; THEN R0 & R1, IF SAVED. ABRT MOV -(R1),-(SP) ; ABRT .IFG $ABMES ; ABRT MOV -(R1),-(SP) ; NEXT R2 IF USING ABORT MESSAGES. ABRT .ENDC ABRT .IFNZ OVRLAY ; ABRT MOV -(R1),-(MO . EDORGN IISK ACSTF OOP TONG LA FRNTUREE TH ;S HU TE,BLTAEPCC ALYALICCTTAYN SISE IN LHE;T UFDBCMF OSSREDD;A R0 @I1CS . K.BLVR OTOS NTOI POW NR0 ;. FBVR OTOY ITIMOXPRS ITO TUE;D SI CBYD REEACLS ICEONT AAGFLE TH ;. CEONE ON;D R2VE OEQ B DYEALR AIFH NCRA;B )+R0 (TBTS . AGFLY NL OCEONF OSSREDD;A0 ,RCEON #OV M ;. EMSTSYS HI TOFT NI;U ND ACEVIDEM TEYS SHE TNEMIERET DTO ;) SI(CR TERERPTEING INTR SNDMAOM CHE TSE;U ;G SENOF NDIF . PHRA#T0, #APTR . ;R TOEC VERDLAN HAPTR; ;: T2NI IC YM,SOV (SP),ID-L7+4 MOV (SP)+,ID-L7+6 .IFDF RTH ;BRTH9 TSTB RTF-L7 ;TYPE RTH IN LOAD MAP ? BEQ .+10 ;NO- MOV #RTHB,R0 MAPTYP .ENDC ;ERTH9 ; MSG TRAM IS ALREDY FORMATTED MOV #TRAM,R0 MAPTYP MOV #4,-(SP) ;SET COUNT FLAG TO NON-GLOBAL BR PMAP01 ;GO TO PRINT LOOP ; UPDATE POINTER AND LOOK FOR END OF TABLE. PMAP02: ADD #BPSYM,R2 PMAP01: CMP R2,SSYME-L7 ;DONE BHIS PMAP09 ;YES - GO DO UNDEFINES MOVB FLAGS+1(R2),R3 ;NO - GET ENTRY TYPE MOV #PMAP82+6,R1 ;ADR OF OUTPUT BUFFER CME. .WORD 14 ;ACTUAL BYTE COUNT. .ASCII /LINK11.OVR/ ;FILENAME/EXTENSION. .BYTE 15 ;CARRIAGE RETURN. .BYTE 12 ;LINE FEED. .ENDC .=.+186. ;DATA INB: INBLN-6 ;MAX .BYTE FBIN,0 ;MODE 0 ;BC .=.+186. ;DATA OUT: 0 OUTA: OUTBL-6 .BYTE FBIN,0 0 .=.+128. OUTB: OUTBL-6 .BYTE FBIN,0 0 .=.+128. MULMSG: MULMSE-MULMSG-6 ;MAX .BYTE FASC,0 ;MODE MULMSE-MULMSG-6 ;BC .BYTE CR,LF MULMSB: .=.+6 .ASCII /,/ MULMSA: .=.+6 .BYTE CR,LF MULMSE: .EVEN ; ; OUTPUT BUFSP) ; NOW R3 - R5 IF OVERLAY VERSION ABRT MOV -(R1),-(SP) ; ABRT MOV -(R1),-(SP) ; ABRT .ENDC ABRT .ENDC ABRT MOV -(R1),-(SP) ; FINNALLY THE PS. THIS INLINE CODE IS,ABRT ; AT MOST, ONLY 4 WORDS LONGER THASPV MO E YM,SSPV MO B YM,SSPV MO S OLMBSYF OND EOR FUEAL VALTINI;IE YMUSP, SOV M SP.,00#2B SU E BLTAL BOYM STELACUAL;C DMENP, SOV M CKTA SOMFRE LUVAN URET ROP;P )+SP (ST T LLCAT EM ;T GUT EM E OD CSTUEEQ;R) SP-(4, #OV M CKTA STOE AS BCKTA SEW NSHPU ;P)(S,-SBV MO: 1$ ; SEBAK ACSTT SERE; ; G INTR SNDMAOM COYTRES D ; TOT NOO TCKTA SETES-RES;YP ,SCSEG BOV M O-;N 1$Q BE ? ANTROR FOMFRS ;C RFRTFOB ST T SEBAK ACSTT SE ;B ,SSPV MO P SET;SP ,SITIM LOV M1:ITIN 2 ITINR B RECOE P R3,#PMAX BLE .+4 ERR14 ASL R3 JMP @SCMDT-BEGO07+BEGOVR(R3) ;DISPATCH ; ; TEST FOR & LIST UNDEFINES ; PMAP09: JSR PC,FINLIN ;TERMINATE LAST LINE TST (SP)+ ;DISCARD COUNT FLAG MOV SSYME-L7,R0 ;ANY UNDEFINES? CMP USYME-L7,R0 BEQ PMAPX1 ;NO - GET OUT ;YES - PRINT THE HEADING ; ; PRINT HEADING ; MOV R0,-(SP) MOV #PMAP80,R0 ;PRINT SOME STARS MAPTYP MAPTYP ;MORE STARS MOV #PMAP84,R0 ;"UNDEFINED REFS" MAPTYP MOV (SP)+,R0 CLRB PMAP11-L7 ; ; PRINT VARIABLES, ONE FERS FOR PMAP ; PMAP80: .WORD PMAP81-PMAP80-6 ;MAX .BYTE FASC,0 ;MODE/STATUS .WORD PMAP81-PMAP80-6 ;BC .ASCII /**********/ ;OUTPUT MESSAGE .BYTE CR,LF PMAP81: .EVEN PMAP82: .WORD PMAP83-PMAP82-6 ;MAX .BYTE FASC,0 ;MODE/STATUS .WORD 0 ;BC .=.+72. ;DATA PMAP83: .EVEN PMAP84: .WORD PMAP85-PMAP84-6 ;MAX .BYTE FASC,0 .WORD PMAP85-PMAP84-6 ;BC .ASCII /UNDEFINED REFERENCES/ .BYTE CR,LF PMAP85: .EVEN PMAP86: PMAP87-PMAP86-6 .BYTE FASC,0 +PMAP87-PMAP86-6 .BYTE CR,LF .IFNDN A ABRT ; LOOP. AT BEST IT IS 2 WORDS LESS. ABRT ; ABRD10 =. ; .IFNZ OVRLAY ; CMPB R0,#OVTMIN ; IS THIS AN OVERLAY TASK? ABRT BLO ABRD30 ; NO. ABRT TSTB IOSTAT(R0) ; ANY I/O IN PROGRESS? ABRT BEQ ABRD15 ; NO. CAN ABORT NOW. ABRT ABRD13: MOVB #-3,TSTAT(R0) RE FOFD ENT SE ;DMENT,MILIV MO M MEF OOP TLTAUEF DET;SM MEOP,T)+SP@(V MO E YMUS),SP (OV M MESY),SP (OV M MCSY),SP (OV M RSTEINPOE BLTA ;P)(S,-MESYSAV MO L BOYM SNTDESIRE ; D VESAE ORSTRED AN ;B YM,SSPV MO ; ; K ACSTM RO FUEAL VRNTUREN EACL ;+ P)(ST TS L AL CMT;E UT GMT E DECOT ESQURE ;P)(S,-#4V MO K ACSTE THN OSEBAK ACSTW NE ;P)(S,-SBV MO ; E LUVAW NEO TSEBAK ACSTT SERE; ; E AS BCKTA SET;S SBP, SOV M ERNTOI PCKTA SET-SES;YP ,SMBSY SOV M O-;N T1NI ILT B S?LEFIY PER LINE. ; PMAP16: BIT #MONCND,FLAGS(R0) BEQ PMAP10 ADD #BPSYM,R0 CMP R0,USYME-L7 BLO PMAP16 BR PMAPX1 PMAP10: MOV #PMAP82+6,R1 UNPACK MOVB #CR,(R1)+ MOVB #LF,(R1)+ MOV #8.,PMAP82+4-L7 ;SET BC MOV R0,-(SP) MOV #PMAP82,R0 TSTB PMAP11-L7 BEQ PMAP12 TYPE BR PMAP13 PMAP12: MAPTYP PMAP13: MOV (SP)+,R0 ADD #BPSYM,R0 ;UPDATE PTR TO NEXT SYMBOL CMP R0,USYME-L7 ;DONE? BLO PMAP16 ;NO - DO IT AGAIN ; DONE PMAPX1: .RSTRT #LINK RESREG ;RESTORE REGISTERS ; ; CLOSE MF RSX .ASCII /LOAD MAP / NAME: .ASCII /XXXXXX./ EXTEN: .ASCII /XXX / ID: .ASCII / / TIME: .ASCII /00:00:00 / DATE: .ASCII /00-XXX-70/ .ENDC .IFDF RSX .ASCII /LOAD MAP/ .ENDC .BYTE CR,LF PMAP87: .EVEN PMAP88: PMAP89-PMAP88-6 .BYTE FASC,0 +PMAP89-PMAP88-6 .ASCII /SECTION ADDRESS SIZE/ .BYTE CR,LF PMAP89: .EVEN ; ; SYMBOL OVERFLOW MESSAGE ; USM: USME-USM-6 .BYTE FASC,0 USME-USM-6 .BYTE CR,LF USMA: .=.+6 .ASCII /,/ USMB: .=.+6 .BYTE CR,LF U; SET ABORT REQUESTED STATUS-OVERLAY. ABRT BR ABRD31 ; DON'T CALL RPOM. ABRT ABRD15: MOVB #8.,TSTAT(R0) ; SET STATUS TO 8 FOR RPOM. ABRT MOVB (SP),@#PS ; ALLOW INTERRUPTS ABRT MOV R0,-(SP) ; SAVE TASK NUMBER ABRT MOV R0,-(SP) ; PUSH TASK NUMBER FOR RPOM ABRT JSR PC,DQOVLY ; CALL ON RPOM. ABLAEROVG INNKLI ;C VL OEC D$: 1E IM TST 1RKMA ;F TROR FCBIN: 2$ O-;N T XI.E - ES;Y 2$Q BE ? METIT 1S ;#1F,TROR FPBCM - NO ;$ 1EQ B N?RARTFOM RO FCS ;RFRTFOB ST TK:IN LC ND.E K LNT=ARST EGOS NDFIF . DCEN . R.DD AERSFANTR ;K LNT=ARST D BLVR ODFFN.I C ND.E N GIBEC ^OR;F LBVR OLR C EGOS NDFFN.I G LA FCEVIDEY LAEROVT NI;IT NIOI,N77#3B OV M PFDOLOB LR C PFPOMAB LR C PFBOSTB LR C EVBDSTR CL V DEOD LLR C EVPDMAR CL V DEBJ OLR C MDNC ILR C$: 5C TBOR,FR0V MO 0 RCBIN: 4$ 3$R B R0B NCAP FILE ; TSTB PMAP11-L7 ;DO NOT CLOSE IF BNE PMAP15 ;LISTING UNDEFINES CLRB MAPOPF-L7 ;CLEAR MAP DEV OPEN FLAG .CLOSE #MAPDEV ; ; RELEASE MAP DATA SET ; .RLSE #MAPDEV PMAP15: RTS PC ;EXIT ; SCMDT--SYMBOL TABLE ENTRY TYPE DISPATCH TABLE. ; COMMANDS ARE: OBJ-MOD NAME, PROG-SECT NAME, INT-SYM NAME, ; TRA-SPEC, SYMBOL ENTRY ; SCMDT: .WORD PMAP03-BEGO07+BEGOVR .WORD PMAP04-BEGO07+BEGOVR .WORD PMAP05-BEGO07+BEGOVR .WORD PMAP05-BEGO07+BEGOVR .WORD PMAP06-BEGO07+BEGOVR .WOSME: .EVEN ; ; LOAD MODULE OUTPUT ERROR ; LMOE: LMOEE-LMOE-6 .BYTE FASC,0 LMOEE-LMOE-6 .BYTE CR,LF .ASCII /?LOAD MODULE EOM/ .BYTE CR,LF LMOEE: .EVEN ; ; MODULE NAME NOT UNIQUE ; MNNU: MNNUE-MNNU-6 .BYTE FASC,0 MNNUE-MNNU-6 .BYTE CR,LF MNNUA: .=.+6 .BYTE CR,LF MNNUE: .EVEN ORDRM: ORDRMA-ORDRM-6 .BYTE FASC,0 ORDRMA-ORDRM-6 .BYTE CR,LF ORDRER: .ASCII / / .BYTE CR,LF ORDRMA: .EVEN ; DUMMY INPUT BUFFER FOR DUMIN: +2 ;MAX BC .BYTE FASC,0 ;FORRT MOV (SP)+,R0 ; RESTORE R0 (TASK NUMBER) ABRT MOVB #340,@#PS ; LOCK OUT INTERRUPTS ABRT .ENDC ABRT ABRD30: MOVB #7,TSTAT(R0) ; SET ABORTED STATUS. ABRD31: .IFG $ABMES ; ONLY INCLUDED IF MESSAGES WANTED. ABRT AB2MES =$ABMES+$ABMES-2 ; NEED THIS VALUE FOR WORD INDEX VALUE ABRT MOV #AB2MES,R2 ; GET NUMBER OF MESSAGE BUFF I 4$Q BE R HA,CLF #PBCM R HA,C)+R1 (VBMO: 3$ R0R CL 1 ,RSPV MO ; G INTR SNDMAOM CANTROR FOFT UNCOE YT BET G ; ; NGRISTD ANMMCOO TERNTOI PVESA ;CSEG,BSPV MO N RARTFOM RO FGSINTR SNDMAOM;C RFRTFOB NC I SI CGHOUHR TGSINTR SNDMAOM;C 5$R B DCEN . RTPOREC, PSR J UGEB DDFIF . K:LN CTSE.C ; ;M RAOGPRN AI MINEG B ;; DCEN . ERLLCAO TRNTURE ;7 RTS R NTMEGUART AS PNTMERENC;I R6,@#2D AD: R2NTCO 5RUTH0 . GSREE ORSTRE ; EGSRRE: R1NTCO UTROERP JM . STREE THR EACL ;6)(R,-R8ER # RD PMAP04-BEGO07+BEGOVR ; CNTRL-C RETURN SEEN DURING MAP ; ABORT IT. ; PMAP14: MOV SSP-L7,SP ;RESTORE SP BR PMAPX1 ;GET OUT ; ; OBJ-MOD NAME PMAP03: JSR PC,FINLIN ;FINISH LAST LINE MOV #PMAP80,R0 ;PRINT STARS MAPTYP ;MOVE IN "MODULE" MOV #"MO,(R1)+ MOV #"DU,(R1)+ MOV #"LE,(R1)+ MOVB #TAB,(R1)+ ;PUT TAB IN BUFFER MOV R2,R0 ;R0=ADR OF NAME UNPACK ;DO MOD40 UNPACK ; ; IF .IDENT IS SPECIFIED THEN INSERT .IDENT ; AFTER THE OBJECT MODULE NAME IN LOAD MAP ; ADD #BPSYM,R2 ;ADMATTED ASCII 0 ;BC 0 ;DATA ; ; ERROR MESSAGE WITH FILE NAME ; ERFIL: ERFILE-ERFIL-6 .BYTE FASC,0 ERFILE-ERFIL-6 .BYTE CR,LF ERFILC: .=.+6 .ASCII /:/ ERFILA: .=.+6 .ASCII /./ ERFILB: .=.+6 .BYTE CR,LF ERFILE: .EVEN .END START ;STARTING ADDRESS=LNK OR STARTB ERS *2 ABRT ABRM10: MOV ABMTAB(R2),R1 ; SEE IF THIS MODULE IS FREE BY CHECK ABRT CMP (R1),#1 ; OF THREAD WORD. =1 IF FREE. ABRT BEQ ABRM20 ; FREE. GO USE IT. ABRT SUB #2,R2 ; SEE IF ANY MORE BUFFERS ARE LEFT ABRT BGE ABRM10 ; YES. GO CHECK IT. ABRT BR ABRFIN ; NONE LEFT. RETURN WITHOUT MESSAGE. ABRT ABRM20: MOV R0,4(R1)OV M ND ATEBYO NF;I R6 @ABSW W LOO NT IFOIN ;R6,@77#3C BI E YT BUSATSTH US;P) R6-(R,IEVR OOV M ERSFANTRN OORRR;E R2NTCOQ BE R IEVR,O000014 #IT B ERSFANTRN OORRR EOR FCKHE;C ONTILEMPCO ;D CMWTT EM R FOT AI;W) R6-(B,RLOV #OV M RSTEISEG RRETOES;R G REES R AGFLN IEW NET;S1 @R0,0000#1S BI: R4NTCO R3NTCOR B AGFLN IARLE CS,YE ;)+R2,(000010 #IC B S?IETRENE OR;M R4NTCOT BL 3 ,R#2B SU: R3NTCO *2;N3 ,R)+R2 (OV M ABNTRUE ATPD;U 10T EM Y LAEROVE TH ;6)(R,-LBVR#OV MO N IANTR;.) R6-(I,TBVR#OVANCE POINTER TEMPORARILY ;TO NEXT ENTRY AFTER NAME MOVB FLAGS+1(R2),HBYTE-L7 CMPB HBYTE-L7,#6 ;IS NEXT ENTRY .IDENT? BNE 1$ ;NO- MOVB #TAB,(R1)+ ;YES-INSERT .IDENT MOV R2,R0 ;R0=ADR OF NAME UNPACK BR PMAP07 1$: SUB #BPSYM,R2 ;RETRACT POINTER TO NAME PMAP07: CMP (SP),#4 ;ARE WE IN NON GLOBAL MODE? BEQ 3$ ;YES, DO NORMAL ENDING CMP (SP),#2 ;HAS THE LINE OVERFLOWED? BGE 1$ ;YES INC (SP) ;ADVANCE COUNT MOVB #TAB,(R1)+ MOVB #VT,(R1)+ ;STORE VERTICAL TAB BR 2$ 1$: CLRCH; R0 T TS SKFT ; AYRLOV Z FN.I SKFTK.AS TEDNDPEUS S AOFE AR CKETAO TREHE; =. 00KBFT SKFT E)BLUAUE(Q 1TOD OR WADRETHT SE; ) R1,(#1 V MO: 40KAFT SKFT Y.ARSSCENEF IT'AS'LT SERED AN; ) R2T(AS,LR4 V MO SKFT RDWOD EAHR TKSAS TUSIOEVPRO NT IRDWO; 40KAFT E BN SKFT D EAHR T'SSKTAS HI TOFS NTTEON CVEMO; ) R4,(1)(R V MO: 30KAFT SKFT ; PUT TASK NUMBER IN FIRST ARGUMENT ABRT MOV R1,-(SP) ; PUT ADDRESS OF BUFFER ON STACK FOR CALABRT JSR PC,LERTYP ; THE PS IS ALL READY ON STACK ABRT BR ABRE10 ; THEREFORE, NEED THIS BRANCH ABRT .ENDC ABRFIN =. ; COMPLETION EXIT ABRT MOVB (SP)+,@#PS ; ALLOW INTERRUPTS ABRT ABRE10: .IFNZ RGSAVE ; ERROR RETURN V MO N IDYEALR AAYRLVE;O R1NTCOT BL K OCBLN RA TUPT SE ;BIRTOV1,@RV MO Y TREND TEESQUREF OSSREDD;A R12, RDD A LEAB TOFE AS;B2 ,RABNTRU #OV M ETFSOFD OR WTOT USDJ;A R1L AS 1 RTOR BEUM NAYRLVE;O1 ,R6)(R16 @OV M 5RUTH0 S ERSTGIREE AV;S G REAV S6:R4UB S: RLNTCO ;; ERLLCAO TRNTURE 4.; NTDESIREW NOS IAYRLVE OCHHI W ;T ECFLREO TEDATPD UISB TAUN R. 3 ;R FENSRA TNGRIDU ; RSROERR FOE AD MISK ECCHA 2.; T)AI.W, ANTR(.N I'DANTRS IIT 1.; T:ENIDES ROT NISY LAEROVD TEESQUREE THF  (SP) 3$: MOVB #CR,(R1)+ ;PUT IN CR MOVB #LF,(R1)+ ; AND LF 2$: MOV #PMAP82,R0 ; SUB #PMAP82+6,R1 ;GET THE BYTE COUNT MOV R1,PMAP82+4-L7 ;SAVE IT AWAY MAPTYP ;PRINT EXTRA HEADING IF OBJ-MODULE CMP SCMDT-BEGO07+BEGOVR(R3),#PMAP03-BEGO07+BEGOVR BNE 11$ MOV #PMAP88,R0 MAPTYP 11$: JMP PMAP02 ;GO FOR MORE ; ; PROG-SECTION NAME ; PMAP04: JSR PC,FINLIN ;TERMINATE PREVIOUS LINE IF NECESSARY MOVB #LANG,(R1)+ ; MOV IN "<" MOV R2,R0 UNPACK ;MOD40 UNPACK MOVB #RANG,(R1)+ CMPB F D OR WADRETHT SEREO GENTH; 40KAFT BR SKFT STIR FTO; ) R2T(AS,LR2 D AD SKFT T INPOO TSTLAT SERE, SEELG INTHNO; ) R2T(AS,LSTIR#F V MO SKFT . EUQUE THN IISE LS ENGHIYTAN; 40KAFT E BN SKFT IFE SEN HE TT,RSFIT SERE S.YE; 2)(RSTIR,F1)(R V MO SKFT T.NOF ICHANBR E.EUQU; 30KAFT E BN SKFTE THN I 1O. NSKTAR TEAFT GHOU SHE TIS;  .IFZ OVRLAY ; ABRT .IFG $ABMES ; ONLY NEED IF WE HAVE ABORT MESSAGES ABRT MOV (SP)+,R2 ; RESTORE R2 (ONLY WITH ABORT MESSAGES) ABRT .ENDC ABRT MOV (SP)+,R1 ; RESTORE REGISTERS IF NEEDED. MOV (SP)+,R0 ; ABRT .ENDC ;I ; ; R.LEAL CHE TTOY ELATDIMEIMD NEURET RISL RONTCO ;, NTDESIREY ADREALS IAYRLVE OEDSTUEEQ RHE TIF ;; ERMBNUY LAEROVE TH ; ; ISN E ERWH ; NRDWO .; RLNTCO ;: CEENQUSEG INLLCA ;. EAARY LAEROVE THO TCEVIDEM TEYS SHE TOMFRY LAEROV ;D TEESQUREA R FENSRA TTOE INUTROUB;S ;9 #AYRLVE;O 0RDWO .D:ENUN R8 #AYRLVE;O 0RDWO . #7Y LAEROV ;0 D OR.W 6 #AYRLVE;O 0RDWO . #5Y LAEROV ;0 D OR.W 4 #AYRLVE;O 0RDWO . #3Y LAEROV ;0 D OR.W 2 #AYRLVE;O 0RDWO . #1Y LAEROV ;0 D OR.W 2 N* LAGS+1(R2),#LOCAL BNE PMAP17 MOVB #L,(R1)+ PMAP17: MOVB #TAB,(R1)+ MOV BASE(R2),R0 ;GET BASE VALUE INTO R0 OTOA ;OCTAL TO ASCII CONVERSION MOVB #TAB,(R1)+ ;INSERT A TAB MOV VALR(R2),R0 ;GET SIZE OTOA ;DO CONVERSION BR PMAP07 ; ; INTERNAL SYMBOLS AND TRA ARE ILLEGAL PMAP05: JSR PC,FINLIN ERR07 ; ; ENTRY SYMBOL ; PMAP06: CMP (SP),#4 ;NON GLOBAL MODE? BNE 1$ ;NO CLR (SP) ;YES , CLEAR THE FLAG 1$: MOVB #TAB,(R1)+ ;INSERT TAB MOV R2,R0 UNPACK ;MOD40 UNPACK MOVB # 2)(RSTIR,FR3 P CM SKFT R ROER. NO; 20KEFT Q BE SKFT ? UEUE QHE TINL ILSTK AS TIS; 1 ,#1)(R P CM SKFT TSUPRRTEINT OUK OC LTOT SERE; S #P,@40#3 VBMO: 20KAFT SKFT . NDOU FOT NSKTA T.EF LNENO; 20KEFT BR SKFT . CKHE CGO, FTLEE OR MIF; 10KAFT E BN SKFT ADRETHE THN ISSREDD AXTNET GE; 3 ,R3)(R V MO SKFT  ABRT .IFNZ OVRLAY ; ONLY IF OVERLAY VERSION. ABRT JSR R5,POPR ; ABRT .ENDC ABRT .ENDC ; FIX UP STACK SO THAT TASK NO. IS GONE MOV (SP)+,(SP) ; THEN WERE READY FOR RTS PC. ABRT RTS PC ; .PAGE ;ABNTRUD-ENUN RRDWO .B:TAUN R; NTDESIRET NO0=; NTDESIRE1=; E:OR CINS IAYRLVE;O EDATCISOASE THT NOR OERTHHE WTECADIIN ;L IL WRYNT ECHEAF O5) 1IT(BT BIN IG SHE;T Y.TRENE IVCTPEES RHE TIN ;Y LAEROVH AC EOFR BEUM NCKLO BALICYSPH ;G INRTTA SHE TCELA PLLWIT I",NK"L ;T AOLTRON CTSGER KEIN LHE TENWH ;. LEAB THE TOFD ENE THO TEDDD ABET US;M ESRINT ED,TEEACRE ARS AYRLVE OEW NAS ;. *2 NNSAINTCOE BLTAE THF ORDWOT 1S ;E TH. YSLAEROVN E THF OCHEAR FO ;Y TREND OR WNE O ANSAINTCOR KEIN;L NTDESIREE THN TAB,(R1)+ MOV BASE(R2),R0 OTOA ;CONVERT ABSOLUTE VALUE TO ASCII BR PMAP07 ;SPECIAL LINE TERMINATOR FINLIN: CMP 2(SP),#4 ;WAS IT GLOBAL BEQ 1$ ;YES TST 2(SP) BEQ 2$ MOV #4,2(SP) ;RESET FLAG MOV #2,DUMIN+4-L7 MOV #CRLF,DUMIN+6-L7 MOV #DUMIN,R0 MAPTYP CLR DUMIN+4-L7 CLR DUMIN+6-L7 1$: RTS PC 2$: MOV #4,2(SP) RTS PC ; .IFNDF NOSEG ENDO07: SIZO07=ENDO07-BEGO07 ; ;*****OVERLAY #9***** L9=BEGOVR-BEGO09 ;COMPUTE OFFSET FROM ;RUN TIME OVERLAY AREA BEGO09: ;J 4 RINS ESDRADS HI TVESA; 4 ,RR3 V MO SKFT S.YE; 20KAFT Q BE SKFT ? EKSEE WSKTAE THS HI TIS; 3 ,RR1 P CM: 10KAFT SKFT E EUQUN INDOU FOT NSKTA; 20KEFT Q BE SKFT E EUQUN IRYNT ESTIR FOFS ESDRADT GE; R3),R2T(RSFI V MO SKFT X DEIND OR WTOINT IFSH; R2 L AS: 30KZFT SKFT CHARSEO TELEV LTYRIIOPRT GE; 2 ,R1) ABRT .IFG $ABMES ; ONLY NEED IF WE HAVE ABORT MESSAGES ABRT ; THERE IS A LIMIT TO THE NUMBER OF SYSGENABLE ABORT MESSAGE ABRT ; BUFFERS THAT CAN BE ADDED TO THE SYSTEM WITHOUT ADDIONAL CODE ABRT ; BEING ALSO ADDED. THE CHECK BELOW PREVENTS AN EXCESIVE ABRT ; REQUEST FROM BEING MADE. ADDIONAL BUFFERS REQUIRE THE BUFFER ABRT ; AND AN ENTRY IN THE WORD TABLE ABMTAB. ABRT ; ILEAB TNGWILOOL FHE;T ;7 RTS R R7 ;R6,@)+R6 (OV M NTIEOTQU ;6)(R,4R0V MO: D2VIDI D1VIDIR B O.;N R0C IN ? NEDO ;2 IDIV DLE B NDDEVIDIM RO FORISIV DCTRABTSU ;6)(R,26)(R 4UB S1:IDIV D 1 T ASLET ANTIEOTQU ;0 ,R#1V MO: DEVIDI EDOYTRES DIS0 ;R NTIEOTQU+,6)(RV MO ;E IDIV,DR7R JS ;) R6-(D,ENIDIV DOV M; 6)(R,-ORISIV DOV M; E:NCUEEQ SNGLIAL C ;. ERNDAIEM R AISE ERTHF INE;O BYD TEENEMCRINS INTIEOTQUE TH. CKTA;S HE TOFP TON ONTIEOTQUE THH IT;W TSXI ED.OR WXTNEE THY BCKTA SHE;T OFD ORUMP TABLE TO ENTRY POINTS ;IN THIS OVERLAY ; JMP DONE ;ENTRY1 .ENDC ; ; ALL OBJ MODULES HAVE BEEN READ. CREATE TRA BLOCK ; ON THE LOAD MODULE, FOLLOWED BY TRAILER. DONE: .IFDF RTH ;BRTH10 TSTB NOIOF-L9 ;CREATE RTH? BEQ NORTH ;NO- SAVREG ;YES MOV #38.,@PUTR0-L9 MOV #19.,R4 MOV PUTR1-L9,R5 ZERRTH: CLR (R5)+ DEC R4 BGT ZERRTH ; ; FILL IN RTH ; TST -(R5) TSTB CSICN-L9 ;CALL NO FROM CSI ? BEQ LNK181 ;NO- USE DEFAULT MOV CN-L9,(R5) ;YES- CLRB CSICN-L9 (RORRIHP VBMO SKFT TSUPRRTEINW LOAL; S #P,@P)(S VBMO SKFT G INCHATSPDIT ENEVPRO TUSATSTT SE; ) R0T(TATS.,#8 VBMO SKFT . SKTAA E EUQUDEO TREHE; =. 00KAFT SKFT L GALEILE ARS UEAL VUSATSTR HEOTL AL; 20KEFT BR SKFT C ND.E SKFT M PO RONL AL CGO; 00KCFT Q BE SKFT Y) ABRT .IFG $ABMES-5 ; THE CURRENT MAXIMUM NUMBER OF ABORT ABRT XXXXXX ; MESSAGES BUFFERS IS 5. ABRT .ENDC ABRT ; ABRT .IFGE $ABMES-1 ; ABRT ABMES1: .WORD 1 ; MESSAGE BUFFER 1. THREAD WORD. WOP THE TDEVIDIO TNETIOUBRSU ; D N'RA TOT NDSOR WOFR BEUM;N 0RDWO . D)EA(RN IOCTUN;F 4RDWO .R:IEVR OT UNCOD OR;W RDRWOVD OR.W S ESDRADT ARSTY OREM;M VRGOBED OR.W R BEUM NCKLO BCEVIDE ;0 D OR.W: BIRTOV ;K OCBLN RA TUTNP ICEVIDEY LAEROV ;; CKLO BLEFIF OSSREDD;A FBVR ORDWO . CKLO BNKLIF OSSREDD;A LBVR ORDWO . S)RDWO7 (ERFFBUI CSF OSSREDD;A DBCMD OR.W: LKRBOV ;T SEA AT DCEVIDEY LAEROVR FOK OCBLI CS ;; AGFLY NL OCEON ;7 37E YT.B: CEON DECOT ECOTPR ;3 23E YT.B E OD CIDR SE;U 0RD BR LNK189 LNK181: MOV LOWADR-L9,(R5) ;USE LOWADR AS DEFAULT CN LNK189: MOV NAM1-L9,-2(R5) ;FILL IN NAME MOV NAM2-L9,-4(R5) CLRB CSIN-L9 MOV TRA-L9,-14(R5) ;FILL IN TRA ADR MOV LOWADR-L9,-16(R5) ;PUT LOW LIM OF PROG MOV LOWADR-L9,-(SP) ;PREPARE STACK LIMIT SUB SS-L9,(SP) SUB #2,(SP) MOV (SP)+,-22(R5) ;FILL IN STACK LIMIT MOV PRIOR-L9,-24(R5) ;FILL IN PRIORITY MOV MT-L9,-30(R5) ;FILL IN MAX TIME MOV #FIO1,R4 ;SET PTR TO $OTSV INTO R4 SRGLOB ;SEARCH FOR FORTRAN INP A PTR BR LNL OOMRPN IEDQU (9?T IIS; 2 ,R#4 B SU SKFT . YSLAEROV; 00KBFT Q BE SKFT VEHAF I 5OR FCKHE CLYON; R2 C DE SKFT ; AYRLOV Z FN.I SKFT S YE; 00KBFT Q BE SKFT ? 4)(=D DEENSPSUK AS TIS; R2 C DE SKFT 3.R ROER S.YE; 30KEABRT .WORD 99. ; ERROR CODE ABRT .WORD 0,0,0,0 ; ARGUMENTS FOR ERRTYPE. ABRT .IFGE $ABMES-2 ; ABRT ABMES2: .WORD 1,99.,0,0,0,0 ; MESSAGE BUFFER 2. ABRT .IFGE $ABMES-3 ; ABRT ABMES3: .WORD 1,99.,0,0,0,0 ; MESSAGE BUFFER 3. ABRT .IFGE $ABMES-4 ; WO .D:RISE UN IOATOT;N R/OV /50AD.R 0 5IXAD RIN ;/ 11/K0 D5RA . ONSIENXT END AMENALEFI ;/ IN/L0 D5RA .B:RFOV DECON URET RORRR;E 0TEBY . C)ENOP (EECON PE OOW;H 13E YT.B S ESDRADN URET RORRR;E 0RDWO . ;K OCBLE IL FCEVIDEY LAEROV ;; MENAE ICEV;D Y//S0 D5RA . ERMBNUT NI;U 0TEBY . EDFICIPE SCEVIDE ;1 E YT.B E AM NET STADAL CAGILO ;/ VR/O0 D5RA . B)DD (ERNTOI PNKLI ;0 D OR.W: LBVR OS ESDRADN URET RORRR;E 0RDWO . ;K OCBLK IN LCEVIDEY LAEROV ;Z SIVR+OVRGOBE.= G SENOF NDIF . 35;E C NK191 ;NOT FOUND MOV R4,-42(R5) ;FOUND- FILL IN LNK191: MOV SLARTH-L9,-44(R5) ;FILL IN LOAD ADDRESS FOR RTH IOOP TSTB IOOPER-L9 BEQ .+6 JMP LINK25-L9 MOV R0,PUTR0-L9 MOV R1,PUTR1-L9 RESREG .ENDC ;ERTH10 NORTH: MOV PUTR0-L9,R0 ;GET PTR'S TO OUTPUT BUFFER. MOV PUTR1-L9,R1 MOV #2,(R0) ;SET BC MOV TRA-L9,(R1) ;SET TRA IOOP ;DUMP TSTB IOOPER-L9 BEQ .+6 JMP LINK25-L9 ; ; CLOSE LOAD MODULE FILE ; TST LODDEV+6-L9 ;ANY LOAD MOD OUTPUT? BEQ LINK05 ;NO-- CLRB LODOPF-FT Q BE SKFT )?=3 (VETIACK AS TIS; R2 C DE SKFT S.YE; 00KAFT Q BE SKFT ? D)UEUE(Q2 S=TUTA SIS; 2 ,R#2 B SU SKFT SKTAE THF OUSATSTE THT GE; R2),R0T(TATS VBMO SKFT S PTRUERNT ILL AUT OCKLO; S #P,@40#3 VBMO SKFT R0T SERE; R0 R AS SKFT  ABRT ABMES4: .WORD 1,99.,0,0,0,0 ; MESSAGE BUFFER 4. ABRT .IFGE $ABMES-5 ; ABRT ABMES5: .WORD 1,99.,0,0,0,0 ; MESSAGE BUFFER 5. ABRT .ENDC ABRT .ENDC ABRT .ENDC ABRT ND.E C ND.E 8 O0EG-B08DOEN8=O0IZ S: 08DOEN EGOS NDFFN.I 00LDPRP JM C BSTJUAD ;) R0,(#2B SU T PUXT T 12THER ; DCEN . ZESIS ITT UCTRBSSUS-YE ;R4Z,SITH RUB S O-;N +6 .NE B D?LEMBSEASRE PAS WTH;R OFOI NTBTS 4 +1 .EQ B F?IONOT NOD ANF RT ;F RTB ST T 12THBR ;H RTF FD.I T MILIH IG HET;S4 ,REMPMTOV MO T PUXT T AGFLF OESPICOO TWT GE ;P)(S,-P)(SV MO T MILIW LOT SE ;R4R,ADOW LOV M9:MD C; TSMILIM RAOGPRT SE--9- #MD C ;; ORRR EALAT;F 10RR E ;. PETYC PBET US MMD C-- -ORRR E ;; 00LDPRL9 ;CLEAR LOD DEV OPEN FLAG MOV #LODDEV,-(SP) MOV (SP),-(SP) EMT CLOSE ; ; RELEASE LOAD MODULE DATA SET ; EMT RELEAS ; ; CLOSE KEYBOARD FILE ; LINK05: MOV #INCMD,-(SP) MOV (SP),-(SP) EMT CLOSE ; ; RELEASE KEYBOARD DATA SET ; EMT RELEAS ; ; CLOSE TELETYPE FILE ; MOV #OUTCMD,-(SP) MOV (SP),-(SP) EMT CLOSE ; ; RELEASE TELETYPE DATA SET ; EMT RELEASE TSTB OVLC-L9 ;LINKING OVERLAYS? BLE 1$ ;NO- TSTB OVLF-L9 ;YES-WHAT SECTION? BEQ 3$ CLRB OVLF-L9 ;RESIDENT SSREDD AERADHET GE; 1 ,R0)(RERADHE V MO SKFT EXND IRDWOO NT IKEMA; R0 L AS SKFT S.YE; 10KEFT I BH SKFT R BEUM NALEG LSTGEAR L >K#AS THE TIS; KSAS,TR0 PBCM SKFT C ND.E: 20KZFT SKFT E ON DDYEALR A -KSECCHD UNRO AMPJU; 30KZFT BR SKFT T. IEDNEI S AELEV LTYRIIOPRT GE; 2 ,RR4 ! .ENDC ABRT .ENDC ABRT .IFGE $ABMES-1 ; ABRT ABMTAB: .WORD ABMES1 ; TABLE OF ADDRESS OF ABORT MESS. BUFFERABRT .IFGE $ABMES-2 ; ABRT .WORD ABMES2 ; ABRT .IFGE $ABMES-3 ; Q BE ) R1,(D2CM#PB MP C 00LDPRQ BE ) R1,(D1CM#PB MP C PETYC PBEO LS ASTMUD ANMMCOT EX NE,ON DOT NIF; EXLDPRE BL D RLN ISTLAE BSTMUS NDMAOM CPC; 0)(R4, #UB S )+SP (ST T PCUR,CR4V MO Y IFOD;M4 ,R)+R1 (DD A UEAL VSEBAN IOCTSET GE ;R4),R5E(AS BOV M8:MD C; ONTICAFIDIMOC P--8 #MD C ;; D8CMR B 0)(R4, #UB S R54, ROV M CTSEPTT SE ;CTSEPT4, ROV M ORRR EALAT;F 11RR E ERNTOI PONTIEC SET;G C SEET G )+R1,()+R1 (MP C R41, ROV M7:MD C; PCT SE- -#7D CM; ; 05LDPRR B 0)(R2, #UB S R4#-CLEAR FLAG MOV SYMB-L9,SSYMB-L9 ;SAVE RESIDENT ; SYMBOL TABLE MOV SYME-L9,SASYME-L9 ;POINTERS MOV LOWADR-L9,-(SP) ;SAVE RES LOWADR-2, MOV (SP),OVLTOP-L9 BR 4$ 3$: MOV OVLTOP-L9,-(SP) ;OVERLAYS 4$: SUB #2,(SP) ;THE DEFAULT TOP OF MEM MOV (SP)+,@SASYME-L9 ;FOR THE OVERLAYS 1$: TSTB GOF-L9 ;EXECUTE LOAD MOD? BEQ 2$ ;NO- .IFNDF NOSEG MOV #OVRLB,-(SP) ;RELEASE OVERLAY DATASET EMT RELEAS .ENDC MOV #RUNBLK,-(SP) ;YES-ISSUE GET EMT EMT GET 2$: JMP LINK-L9 ;RESTART LINKER VBMO SKFTOMRPM RO FITD EE N IAS. DD AERADHET GE; 1 ,RR3 V MO SKFT . ONY RRCA L.AL COMRPDQA T NO; 20KZFT L BP SKFT ; AYRLOV Z FN.I SKFT . ALEGLL I. =0R BEUM NSKTA; 10KEFT Q BE SKFT C ND.E SKFT N)IG SEDNE- . ER VAYRLVE(O# SKTAT GE; R0),SPK(ASFT V MO SKFT % ABRT .WORD ABMES3 ; ABRT .IFGE $ABMES-4 ; ABRT .WORD ABMES4 ; ABRT .IFGE $ABMES-5 ; ABRT .WORD ABMES5 ; ABRT .ENDC ABRT +,1)(RD AD R ROER ;9 R0ER B LORG S )+R1,()+R1 (MP C R41, ROV M P1TM4, ROV M OW NPCT GE ; PCET G6:MD C; EDACPLIS DVETIDIADL BALO G--6 #MD C ;; -204LDPRR B 0)(R2, #UB S NTTANSCOE IVITDD;A4 ,R)+R1 (DD A )+R1,()+R1 (MP C ORRR;E 09RR E UEAL VALOBGLT GE ; OBGLSR 4 ,RR1V MO: D5CM ;C LOREE IVITDD AALOBGL- -#5D CM; ;2 4-D0RL PBR ) 2).+-((XM OR;F R41,MP TUB S5:D0RL PR ROER ;9 R0ER E LUVAL BALO GET;G B LORG S )+R1,()+R1 (MP C R41, ROV M P1TM4, ROV M OW NPCT GE ; PCET G4:MD C; OC' .IFNDF NOSEG ENDO09: SIZO09=ENDO09-BEGO09 .ENDC .ENDC ;END OF OVRBLD .IFNDF NOSEG .CSECT ;BEGINNING OF OVERLAY AREA ;THE SIZE OF THE OVERLAY AREA IS DETERMINED ;BY THE SYMBOL "OVRSIZ" ; BEGOVR: ;THE BEGINNING REGISTERS OF EACH ;OVERLAY CONTAIN JMP'S TO THE ;ENTRY POINTS OF THE OVERLAY ENTRY1=. ENTRY2=.+4 ENTRY3=.+10 ENTRY4=.+14 ENTRY5=.+20 ENTRY6=.+24 ENTRY7=.+30 ENTRY8=.+34 ENTRY9=.+40 .ENDC .IFDF OVRBLD ;B35 .IFNDF NOSEG ; ;*****OVERLAY #8***** L8=BEGO ; AYRLOV Z FN.I SKFT C ND.E SKFT ) ONSIER VLYONE OR(CR BEUM NSKTAT GE; R0),SPK(ASFT SBBI SKFT ADLOE YT BOR FR0R EACL; R0 R CL SKFT ; AYRLOV FZ.I SKFT ERSTGIRER ROERR EACL; R5 R CL SKFT K ACSTF OOP TONS PVESA; P)(S,-PS@# VBMO ) .ENDC ABRT .ENDC ABRT .ENDC ABRT .ENDC ABRT .ENDC ABRT .PAGE FTSK ;***********************************************EL REDACPLIS DALOBGL- -#4D CM; ;2 2-D0RL PBR ) 2).+ ( -(XM OR;F4 ,R)+R1 (DD A R4G NE . CELA PNTREUR CATC PET;G C TPGE: D3CM ;C LORED CELASPDIL NAERNT I--3 #MD C ;; 00LDPRR B 0)(R6, #UB S4:D0RL PT PUXT T ORRR;E 09RR E MENAL BALO GOR FCHARSE ; OBGLSR + 1)(R+,1)(RP CM E AM NOFR ADT SE ;4 ,RR1V MO: D2CM ; OCEL RALOBGL- -#2D CM; ;0 D0RL PBR ) R0,(#4B SU: 02LDPR UTTPTX T ITECALORE ;R4),R5E(AS BDD A UEAL VEL RET;G4 ,R)+R1 (OV M1:MD C; OCEL RALRNTEIN- -#1D CM; ; D6CM5,+VR-BEGO08 ;COMPUTE OFFSET FROM ;RUN TIME OVERLAY AREA BEGO08: ;JUMP TABLE TO ENTRY POINTS ;IN THIS OVERLAY. ; JMP START8 ;ENTRY1 .ENDC ; ; PROCESSING FOR PASS2 ; START8: TSTB LIBF-L8 BNE LNK03 IOII ;INPUT INIT. SET R0,R1 TO BUFFER. LNK05: CLR GENDF-L8 ;NO GSD END SEEN. LINK76: BITB #EOF,-1(R0) ;ERROR? BEQ .+6 JMP LINK53 ;YES,IGNORE INPUT CMPB #GSDBLK,(R1) ;IS THIS A GSD BLOCK BEQ LINK42 ; ERR03 ;ERROR-MODULE MUST START ;WITH GSD FOR MODULE NAME LINK42: CMPB SKFT ; SKFT S TUTA SORRR ETOX DEINK ACST; 4 + VESA=F RRFE SKFT S),PPCR TEAF (K#AS TTOX DEINK ACST; 4 + VESA=F K ASFT SKFT S ERSTGIREL RANEGEE TH; C ND.E SKFT VESAO TEDUSS RDWOK ACSTF OERMBNU; 2.=1 E AVFS SKFT S AYLW AEG RLL AVESA; HRUS,PR5 R JS SKFT -************************FTSK ; F R E T S K *FTSK ; *FTSK ; PROGRAM IDENTIFICATION: FRETSK *FTSK ; *FTSK ; PURPOSE: THE FUNCTION OF THIS ROUTINE IS TO PLACE EITHER A *FTSK ; QUEUED OR SUSPENDED TASK IN THE QUIESCENT STATE. *FTSK ; MD,CD4CM6,D0RL,PD2CM9,MD,CD8CM7,MD+C 6 MD,CD5CM4,MD,CD3CM2,MD,CD1CM6,D0RL+P: DTCM RR LENDHAR PERO PTECUXE EGO ;2)(RDTCM@RP JM 2 RSL A 14RR E6:D0RL P4 .+E BL X MAMD#C2, RMP C R5T,ECTS POV M TSBI7 W LOE AV;S2 ,R007617 #IC B MD CCKTA;S) SP-(2, ROV M SSREDD AALTUACM OR;F R34,#-D AD O TERNTOI PXT TEDSHPUD AD ;R3),SP2(D AD T SEFF,O#2B SU T IVESA ;ETFSOF3, ROV M XT TTOINT SEFF OET;G3 ,R)+R1 (VBMO D CMT GE ;R2+,1)(RB OV M1:D0RL P; NDMAOM CXTNES ESOCPR; ;C PTS RX:DERL PC PNTREUR CTEDAUP, ES/#OBJMN,7(R1) ;IS THIS THE NAME? BEQ LINK43 ERR04 ;ERROR. LINK43: MOV PTRG-L8,R2 ;SET R2 TO NAME IN SYMBOL TABLE TST (R1)+ ;ADVANCE POINTER TO MODULE NAME CMP (R2)+,(R1)+ ;IS THE NAME OK? BNE LINK44 ;NO-ERROR CMP (R2),(R1) ;TRY SECOND WORD. BNE LINK44 ;ERROR. CLRB FILEOR-L8 ; START READING THE NON-GSD BLOCKS. LINK45: GNGSD ;GET A NON-GSD BLOCK ;R0 POINTS TO BC. ;R1 POINTS TO FIRST BYTE OF BUFFER. SUB #2,(R0) ;DECREMENT BC. MOV (R1)+,R2 ;GET BLOCK TYPE BITB #EOF,- ; VESARG Z FN.I SKFT C ND.E: 10KZFT SKFTNTOI PRYNT ETECADIINO TIT BGNSIR EACL; P)(S+3 RBCL SKFT ; AYRLOV Z FN.I SKFT D VESAS ERSTGIREF OERMBNUT ULFADE; =0 E AVFS SKFT T INPOY TREN; =. SKETFR SKFT ; 1 *FTSK ; USAGE: THE LINKAGE FOR THIS ROUTINE IS: *FTSK ; *FTSK ; 1). MOV FTASK,-(SP) (ASSEMBLY) *FTSK ; EMT FRETSK *FTSK ; MOV (SP)+,FERR *FTSK ; ;YC RPCU),SP4( @DD A -NO ;1 D0RL PGT B D?RLH IT WNEDO ;) R0 (ST T0:D0RL P; ).NY AIF (CKLO BXT TUSIOEVPRO TNTOI PR1D AN0 REDCKTA S; RDWOK BLD RLG INOWLLFOE YT BTOS PT1 R; BCD RLO TTS PR0 ;- -UTNP I ;; LD RSSCERO PTOE INUTROUB S ;; R OVEG+B08GOBE5-K4IN LRDWO . VRGOBE8+O0EG-B47NKLID OR.W R OVEG+B08GOBE6-K4IN LRDWO . VRGOBE8+O0EG-B45NKLID OR.W: 57NKLI 2)(RVRGOBE8+O0EG-B57NKLI @MP J R2L AS 4 R1ER S YE ;4 .+E BL ? OKX DEIN ;AXTM,#R2P CM 2 ,RL8T-B OV M R10, REDCKTA SHE TVEMORE31(R0) ;INPUT ERROR? BNE LNK169 ;YES,TREAT AS MODULE END CMP #TXTBLK,R2 ;TXT? BEQ LINK46 ;YES. CMP #MODEND,R2 ;MODULE END? BEQ LINK47 ;YES CMP #GSDEND,R2 ;GSD END? BNE .+6 INC GENDF-L8 CMP #RLDBLK,R2 ;RLD? BNE LINK45 ;NO-IGNORE ALL OTHER BLOCKS. MOVB #3,T-L8 ;SET T SWITCH TO 3. CMP -(SP),-(SP) ;FAKE DOUBLE PUSH. JMP LINK48 ;GO PROCESS RLD. LNK169: BR LINK47 ; ; MODULES OUT OF ORDER ; LINK44: .IFDF BLKIO JSR PC,@#READST ;GET DEVICE STATUS .ENDC .IFNDF BLKIO .S SKFT C ND.E SKFT NTOI PRYNT ESKETFRR VE OMPJU; 10KZFT BR SKFT. NTOI PRYNT ETECADIINO TIT BGNSIT SE; ) SP3(,+00#2 SBBI SKFT SKETFRO NT INTOI PRYNT E'SOMRP; =. OMRPDQ SKFT ; SKFT S.TUTA SORRR EALRMNOE THS RNTURE' OMRPDQ '. ITEXN OTSINPOY TREN; SKFT O TWE THE ATTIENERFFDIO TEDUSS I5 *FTSK ; 2). CALL FRETSK(FTASK,FERR) (FORTRAN) *FTSK ; *FTSK ; WHERE *FTSK ; FTASK IS THE NUMBER OF THE TASK TO BE FREED. *FTSK ; FERR IS A STATUS VALUE SET BY FRETSK. THE VALUES *FTSK ; ARE: *FTSK ; ;)+SP,()+SP (MP C5:K5IN L0 ,R)+SP (OV M R1+,P)(SV MO T PUUT OXTNER FO ;L81-TRPU1, ROV M R10, RVESA ;L80-TRPU0, ROV M L85-K2IN LMP J +6 .EQ B R?ROERT OU ;8 -LEROPIOB ST T ERFFBUE THT PUUT;O P OO I4:17NK L1 H1RT;E C ND.E . INL IL F -NDOU;F) R52(-44, ROV M NDOU FOT;N 74K1LNR B ITR FOH RCEA;S B LORG S R4O NT ISVOT $TOR PTT SE ;R41,IO#FV MO G RO POFM LIW LON ILLFI ;5)(R16,-L8R-ADOW LOV M DR ARA TINL IL;F) R54(-18,-LRA TOV M1:17NK L8 -LINCSB LR C 5)(R-48,-LM2NAV MO - ES;Y) R52(,-L81-AM NOV7TAT #OBJDEV .ENDC TST (SP)+ BPL LNK151 CMP (SP)+,(SP)+ INCB FILEOR-L8 TSTB CONCAT-L8 BEQ LNK150 LNK141: IOIG BITB #EOF,-1(R0) BEQ .+10 CLRB FILEOR-L8 BR LNK150 CMPB #MODEND,(R1) BEQ .+4 BR LNK141 JMP LINK75 LNK150: JMP LINK53 LNK151: CMP (SP)+,(SP)+ MOV PTRG-L8,R0 MOV #ORDRER,R1 UNPACK MOV #ORDRM,R0 TYPE CLR -(SP) MOV #406,-(SP) ;CODE=A006 IOT .IFDF BLKIO JSR PC,@#CLOSRD ;CLOSE AND RELEASE INPUT .ENDC .IFNDF BLKIO MOV #OBJDEV,-(SP) ;CLOSE & RELEASISTH T. IRSEACL' SKETFR '. ERMBNU; SKFT SKTAE THG ININTAON CRDWOK ACSTE THN IIT BGNSIE THS ET SM'POQR'D; SKFT L VELEY ITORRI P =R4 ; SKFT S ESDRADR DEEA H =R3 ; SKFT . EDFIDIMOT NOS IT'TATS '. M)PO RBYT SES UEAL(VY TRENN OEDUS; SKFT RE ARSTEISEG RNGWILOOL FHE TENTH, EDAV SRE ARSTEISEG RLL ARYNT EON; SKFT D.SE UISM POQR DENWHD IEIFOD MOT NRE AERADHEM RAOGPRE TH; SKFT9 -1 = DEQUEUED BUT I/O IN PROGRESS *FTSK ; 0 = TASK SET QUIESCENT. *FTSK ; 1 = ILLEGAL TASK NUMBER. *FTSK ; 2 = ILLEGAL TASK STATUS *FTSK ; 3 = TASK ACTIVE. *FTSK ; *FTSK ; REGISTERS: REGISTERS R0-R5 ARE USED BY FRETSK. THE M O-;N 71K1LNQ BE ? SI COMFRE AM;N L8N-SI CTBTS 8 -LIPCSB LR C ES;Y) R54(-28,-LORRI POV M O-;N 14.+Q BE 4 E AP;T T EO . I?CSM RO FORRI;P L8P-SI CTBTS: 90K1LN L8N-ICCSB LR C S-YE ;5)(R8,-LCNV MO - NO ;0 19NK LEQ B I?CSM RO FCN ;L8N-ICCSB ST T L8T-IMCSB LR C S-YE ;5)(R30,-L8T- MOV M O-;N 14.+Q BE ? SI COMFRT ;M8 -LMTSI CTBTS 8 -LSSSI CRBCL ) R52(-2+,P)(SV MO ) SP,(#2B SU ) SP,(L8S- SUB S ITIM LCKTA SREPARE;P) SP-(8,-LDRWALOV MO S YE ;) R5-(T TS - NO ;4 17NK LNE B T?EX NTH;R8 -L;E INPUT MOV (SP),-(SP) EMT CLOSE EMT RELEASE .ENDC BR START8 ;TRY AGAIN LNK03: IOIG BR LNK05 ; ; TXT BLK ; ; MOVE TXT BLOCK TO A SAVE AREA ; LINK46: MOV #TXTSVB,R2 ;ADR OF TXT SAVE AREA MOV R2,-(SP) MOV (R0),(R2) ;MOVE IN BC SUB #2,(R2)+ SUB #2,(R0) MOV CURPC-L8,(R2)+ ;MOVE IN CURRENT PC MOV R2,-(SP) TST (R1)+ ;ADVANCE PTR TO 1-ST ; DATA WORD. LINK59: DEC (R0) ;DONE? BLT LINK49 ;YES MOVB (R1)+,(R2)+ ;MOVE IN A BYTE BR LINK59 LINK49: CLRB T-L8 GNGSD ;D ANS TUTA SSKTAE TH D.LEAL COT NISY VLQO D. ADRETHS ROE THM RO FSKTA; SKFTNGCILI SMETIA E OVEM RTOM PO RBYY NL OEDUSS IM'POQR'DT INPOY TRENE TH; SKFT ; SKFT ; AYRLOV Z FN.I SKFT ; SKFT R TEINPOK ACST= <= PC ; SKFT =WILL BE *FTSK ; RESTORED IF THE SYSGEN PARAMETER 'RGSAVE' IS SET *FTSK ; TO A NON-ZERO VALUE. *FTSK ; *FTSK ; PROGRAMMER: 53 *FTSK ; DATE: 18-NOV-71 *FTSK ; REVISION: 0 *FTSK ; CATALOGUE NUMBERRGPT8,-LTRHPRTP CM - NO ;4 17NK LEQ B H?RTG INDO ;8 -LTF RTBTS 1 H1RT;B TH RDFIF . P)(S,-R1V MO ) SP-(0, ROV M R.HEOTANO -DNO ;6 K5IN LGT B NEDO ;) R2 (EC D E.ATPD UBCT PUUT;O 4)(RC IN E YT BTADAA E OV;M+ 5)(R+,3)(RB OV M6:K5IN L. BCT PUUT OTEDAUP ;) R4,(#2D AD S ESDRADD OA LET;G+ 5)(R),R32( -OV M A.AT DUTTPOUO TND;A5 ,RL81-TRPUV MO C BUTTPOUO T'STR;P4 ,RL80-TRPUV MO C BXT TTOD AN ;R2),SP2(V MO A AT DXT TTOS R'PT ;3 ,RP)(SV MO: 54NKLI ;T TXT PUUT O ;; NO ;5 K5IN LEQ B T?PUUT OTOT ?GET NEXT NON-GSD BLOCK. MOV (R1)+,R2 ;GET BLK TYPE. SUB #2,(R0) BITB #EOF,-1(R0) ;ERROR? BNE LINK62 ;YES,TREAT AS MODULE END CMP #RLDBLK,R2 ;RLD? BEQ LINK48 ;YES CMP #TXTBLK,R2 ;TXT BEQ LINK50 ;YES CMP #GSDEND,R2 ;GSD END? BNE .+6 INC GENDF-L8 CMP #MODEND,R2 ;MODULE END BNE LINK49 ;NO-IGNORE ALL ELSE LINK62: MOVB #2,T-L8 ;TXT FOLLOWED BY MODULE END. BR LINK51 LNK06: JMP LNK10-L8 ; ; ADVANCE TO NEXT MODULE (MOVE PTRG IN SYMBOL TABLE). ; LINK47: MOV PTRG-L8,R2 ;GET PT R BEUM NSKTA ; SKFT ; SKFT AY WISTHK OO LCKTA SHE TRYNT EON; SKFT ; SKFT C ND.E SKFT ; OMRPDQ EF.D SKFT ; LYOVDQ EF.R SKFT : *FTSK ; *FTSK ;***********************************************************************FTSK .PAGE FTSK .DEF FRETSK ; FTSK .REF PUSHR,POPR ; FTSK .IFNZ OVRLAY ; TXY AN ;8 -L,T#3B MP C1:K5IN L LD RSSCERO;P0 D0RL,PPCR JS: 48NKLI ;D RLY BEDOWLLFOT TX; ;. LK BXT TSTLAT PUUT OGO ;4 K5IN LBR . BCK BLT TXT AS;L TOR TEINPOR FO0 REDCKTA SESUS ;L8C-RPCU),SP2( @DD A ;K BLT TXT AS LOFE IZ SBYC RPCUE ATPD U ;; L8T-1, #VBMO: 50NKLI ;T TXY BEDOWLLFOT TX; ;. SSCERO PND A ;6 K7IN LMP J CKLO BXTNET GE ;G OI I5:K7IN L E IL FXTNEO DS,YE ;8 -L97NKLIP JM S AS PNDCOSEN ;I ET STADAS ITE ASLERED AN ; E IL FLEDUMOT ECBJ OSELO;C C OI I2:15NK L6 K0LNE RG ADD #5,R2 ;SET TO FLAGS OF A SYMBOL. LINK52: ADD #BPSYM,R2 ;MOVE TO NEXT ENTRY. CMP R2,SYME-L8 ;TOO FAR BHIS LINK53 ;YES CMPB (R2),#OBJMN ;IS ENTRY AN OBJ MODULE NAME? BNE LINK52 ;NO-TRY NEXT ONE SUB #5,R2 ;YES,DO ANOTHER MOV R2,PTRG-L8 ;INPUT FILE TSTB LIBF-L8 BNE LNK186 MOVB TAPES-L8,-(SP) BISB CONCAT-L8,(SP)+ BNE LINK75 ;IGNORE GENDF-L8 IF TAPES OR ;CONCAT IS ON. LNK186: TST GENDF-L8 ;SEEN GSD END? BEQ LINK75 ;NO, STAY IN SAME FILE LINK53: TSTB LIBF-L8 BN