.TITLE ODT11R . = .+144+26 ;RESERVES SPACE FOR STACK ; ODT-11R. --V002A ; COPYRIGHT 1 ; PDP-11 LINKER, LINK-11 V004A ; COPYRIGHT 1970,1971 DIGITAL EQUIPMENT CORPORATION .TITLE LINK11 ; ; ; ; DEFINE REGISTERS ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; ; DEFINE PARAMETERS ; ; ASCII CHARACTERS CR=15 LF=12 VT=13 TAB=11 FF=14 ;FORM FEED LANG=74 ;< RANG=76 ;> CRLF=005015 ; ; SYMBOL TABLE PARAMETERS ; BPSYM=10. ;# OF BYTES PER SYMBOL BASE=8. ;DISTANCE TO BASE OF A SECTION FLAGS= ; PERIPHERAL INTERCHANGE PROGRAM PIP-11 ; V002A ; COPYRIGHT 1971,DIGITAL EQUIPMENT CORPORATION,MAYNARD,MASS. .CSECT .TITLE PIP11 ;DUMMY ROUTINE ADDRESS FOR THOSE NOT IMPLEMENTED .WLDCD=.NYI .FASCII=.NYI .FBIN=.NYI .QUICK=.NYI .MAGT=.NYI .XCHNG=.NYI .CONTG=.NYI ;///////////////////////// .TITLE EDIT11 ; EDIT-11 V002A ------ 4-26-71 ; COPYRIGHT 1971, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. 969,1970,1971 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 ;PRIORITY MASK - STATUS REGISTER O.TBT = 20 ;T-BIT MASK - STATUS REGISTER T 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 (0/1) UNDEF=10 ;UNDEFINED/DEFINED (0/1) INTGLB=100 ;INTERNAL/GLOBAL (0/1) MONCND=1 ;MONITOR ROUTINE CANDIDATE ; ; TXT MODIFICATION COMMANDS ; TCMD1 //////////////////////////// ;///////////////////////////////////////////////////// ;//////////LINK BLOCKS AND FILE BLOCKS//////////////// ;/////////////FOR MONITOR I/O /////////////////////// ;///////////////////////////////////////////////////// .WORD 0 ;ERROR RETURN LKBKTT: .WORD 0 ;POINTER TO DDB FOR TELEPRINTER .RAD50 /TTY/ ;LOGICAL NAME .WORD 1 ;WORDS TO FOLLOW .RAD50 /KB/ ;DEVICE NAME .WORD 0 LKBKKB: .WORD 0 ;LINK BLOCK FOR KEYB KBD=42420 TTY=100040 LSR=63440 LSP=63440 HSR=63320 HSP=63200 LPT=46600 DSK=14760 DTA=16040 EXITCD=60 WAITCD=1 WRITCD=2 OPENCD=16 CLOSCD=17 RLSECD=7 INITCD=6 READCD=4 DELTCD=21 RENAME=20 EDI=17751 TOR=77552 BAK=6263 TMP=77430 TWO=002 FASCII=20 ATSIN=100 ;;;;;;;;;;;;;;;;;;;;;THE FOLLOWING CMDS ALLOW NO ARGS CB=01 CE=02 CM=03 CRT = 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 =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. ;MODIFY PC ; MISCELLANEOUS SPLEN=100. ;STACK LENGTH ALODSZ=320 ;ABSOLUTE LOADER SIZE HGHMEM=16384. ;HIGH MEMADR +1 ; ; MONITOR IO COMMANDS ; INIT=6 OPEN=1OARD .RAD50 /KBD/ .WORD 1 .RAD50 /KB/ .WORD 0 ;ERROR RETURN .WORD 2 ;OPEN FOR OUTPUT FNBKTT: .WORD 0 ;FILE BLOCK FOR TELEPRINTER .WORD 0 .WORD 4 ;OPEN FOR INPUT FNBKKB: .WORD 0 ;FILE BLOCK FOR KEYBOARD .WORD 0 LKBK01: .WORD 0 ;GENERAL LINK BLOCK FOR PIP ROUTINE .WORD 0 ;USAGE .WORD 0 .WORD 0 .WORD 0 LKBK02: .WORD 0 ;GENERAL LNK BLK .WORD 0 .WORD 0 .WORD 0 .WORD 0 LKBKDU: .WORD 0 ;DUMMY LRD=04 CI=05 CF=06 CV=07 CU=10 ;;;;;;;;;;;;;;;;;;;;;THE FOLLOWING CMDS ALLOW POS INTEGER ARGS CH=11 CG=12 CT=13 CN=14 CS=15 CP=16 ;;;;;;;;;;;;;;;;;;;;THE FOLLOWING CMDS ALLOW ALL ARGS CC=17 CD=20 CW=21 CL=22 CA=23 CK=24 CX=25 CJ=26 CR=015 CTRLX=030 CRLF=5015 LFLF=5012 FF=014 LF=012 NEG=055 PLUS=053 RUBOUT=177 SLASH=057 EOMDET=40000 EOF=20000 SPACE=040 VERTAB=013  MOV O.TVEC+2,ST ;SET UP LOCAL STATUS MOV PC,O.UPC ;FAKE THE PC 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 RELO6 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 ; ; 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 ; ; JUMP TABLE MAX INDICES. ; TMAX=3 ;SEE LIINK BLOCK FOR CSI INTERFACE .WORD 0 .WORD 20 ;20 WORDS RESERVED OFR SWITCH SPACE .=.+20 .WORD 0 .WORD 0 FNBK01: .WORD 0 ;GENERAL FILE NAME BLOCK FOR ROUTINES .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 FNBK02: .WORD 0 ;GENERAL FILE BLOCK .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 FNBKDU: .WORD 0 ;DUMMY FILE BLOCK FOR CSI INTERFACE .WORD 0 .WORD 0 .WORD 0 .WORD 0  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 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 ;/////////////////////////////////////////////////////// ;/////////////////////////////////////CATION REGISTERS MOVB O.PRI,R4 ;GET ODT PRIORITY 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 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 -NK57 GSDMAX=4 ;SEE GGSD05 PMAX=4 ;SEE SCMDT CMDMAX=14. ;SEE RCMDT ERMAX=3 ;SEE ERTAB ; COMD SIZE (BYTES) COMDSZ=20. IND=6 ;INDEX INTO FILE BLOCK ; MISCELLANEOUS BUF=100. ;50 WORDS FOR CSI BUFFS. 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 ;RAD ;//////////////////////////////////////////////////// ;//////////////////////////////////////////////////// ;////////////// TABLES OF ACTION AND //////////////// ;//////////////QUALIFYING SWITCHES //////////////// ;//////////////////////////////////////////////////// ;TABLE OF ACTION SWITCHES .ACTSW: .WORD UN .WORD .UNLOC ;UNLOCK .WORD U .WORD .UNLOC .WORD EN .WORD .ENTER .WORD E .WORD .ENTER .WORD RE ////////////////// ;/////////////////////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 MOV R0,LAST ;SET LAST MOV R0,ABSLAST ;SET ABSLAST SUB #500,R0 MOV R0,MAX ;SET MAX CLR KIBBC ;CLEAR IMPOR(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 MOVB #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 ADDRIX50 FOR " " INC=256. ;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 ; LINKER. ; ************************************* ;2. IF THE SYMBOL "NOSEG" IS NOT DEFINED, ; THE RESULTING PACKAGE IS A LINKER ; THAT UTILIZES CORE OVERLAYS FROM DISK ; TO CONSERVE ON SYMBOL TABLE SPACE. ; ; THIS VERSION OF THE LI;RENAME SWITCH VALUE .WORD .RENAM ;RENAME ROUTINE ADDRESS .WORD R .WORD .RENAM .WORD DE ;DELETE .WORD .DELET .WORD PR ;PROTECT .WORD .PROT .WORD P .WORD .PROT .WORD AL ;ALLOCATE .WORD .ALLOC .WORD BR .WORD .BRIEF .WORD DI ;DIRECTORY .ENTB1: .WORD .DIREC ;TABLE OF QUALIFIERS .CSQF: .WORD WC ;WILDCARD SWITCH VALUE .WORD .WLDCD ;ROUTINE ADDRESS .WORD 0 ;SEEN FLAG .WORD FA ;FORMATTED ASCII .WORD TANT VARIABLES CLR TOBBC ;WHICH MIGHT HAVE BEEN SET ON LAST CLR POBBC ;PASS THROUGH THE EDITOR CLR RIBBC CLR EXFLAG CLR ENDFLG MOV #2,FNBKSO-2 ;-MOVE IN HOW OPEN CODE FOR ;SUBSIDIARY OUTPUT CLR FNBKSO-4 CLR LKBKTT CLR LKBKKB MOV #KIBBC+2,KIBPTR MOV #TOBBC+2,TOBPTR MOV #RIBBC+2,RIBPTR ;SET POINTERS FOR I/O MOV #POBBC+2,POBPTR ;LINE BUFFERS MOV #LKBKKB,-(SP) EMT INITCD ;INIT THE KEYBOARD MOV #LKBKTT,-(SP 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 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 NKER ; UTILIZES CORE OVERLAYS FROM DISK ; 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 ;RESULTING 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!.FASCII .WORD 0 .WORD FB ;FORMATTED BINARY .WORD .FBIN .WORD 0 .TRFQF: .WORD CO ;CONTIGUOUS QUALIFIER .WORD .CONTG .WORD 0 .PSTQF: .WORD MT ;MAGTAPE-POST QUALIFIER .WORD .MAGT .WORD 0 .WORD M .WORD .MAGT .WORD 0 .PREQF: .WORD ZE ;ZERO .WORD .ZERO .WORD 0 .WORD Z .WORD .ZERO .ENTB2: .WORD 0 ;/////////////////////////////////////////////////// ;/////") EMT INITCD ;INIT THE TELEPRINTER MOV #FNBKKB,-(SP) MOV #LKBKKB,-(SP) EMT OPENCD ;OPEN THE KEYBOARD MOV #FNBKTT,-(SP) MOV #LKBKTT,-(SP) EMT OPENCD ;OPEN THE TELEPRINTER MOV #REINIT,-(SP) MOV #2,-(SP) EMT 41 EDNOID: JMP EDGOID EDGOID: JSR R5,M2OB STRTID: MSG3 ADD #14,EDNOID+2 ;WILL NOW JUMP PAST PROGRAM ID BR REINIT ;ZERO LKBKS AND FNBKS STRGET: CLR CMDBUF# ;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 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 ;PRIN$ OF THE ;CONTIGUOUS FILE OF OVERLAYS ;(LINK11.OVR) ON DISK 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 DISK ;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 OV%////////////////////////////////////////////// ;////////////// VARIABLE LISTS AND ///////////////// ;//////////////// I/O LINE BUFFERS //////////////// ;/////////////////////////////////////////////////// .CMDBF: .WORD 0 ;SEVEN WORD HEADER FOR CSI .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .KIB: .WORD 110 ;LINE BUFFER FOR COMMAND STRING .WORD 0 .KIBBC: .WORD 0 ;BYTE COUNT .=.+112 ;CANNED MESSAGES .MSG1: 5 0 5 .BYTE CR,LF & ;SET CSI FOR INPUT FILES JSR R5,M2OB MSG1 ;PRINT "#" MOV #KIB,-(SP) MOV #LKBKKB,-(SP) EMT READCD ;READ THE COMMAND STRING MOV #LKBKKB,-(SP) EMT WAITCD ;WAIT ON THE KEYBOARD CMP KIBBC,#2 ;MAKE SURE HE TYPED AT LEAST ONE CHARACTER BLE STRGET ;HE DIDN'T MOV #CMDBUF,-(SP) EMT 56 ;GET FIRST PASS OF CSI MOV (SP)+,R1 BEQ GOGET INC R1 MOVB #'?,(R1)+ MOVB #CR,(R1)+ MOVB #LF,(R1)+ SUB #KIBBC+2,R1 MOV R1,KIBBC 'T 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 ;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)+(ERLAY 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=1000 ;512 DECIMAL BYTES ;THE NUMBER OF WORDS ALLOCATED FOR THE ;OVERLAY AREA OVRWRD=400 ;256 DECIMAL WORDS ; ;IF THE SYMBOL "OVRBLD" IS DEFINED (VIA A ;PARAMETER ASSIGNMENT) THE RESULTING OBJECT ;MODULE WILL CONSIST OF: ; OVERLAY BUILDER ; OVERLAY ) .BYTE LF .BYTE '# .BYTE VERTAB .EVEN .MSG4: 15 0 15 .ASCII /PIP-11 V002A/ ;THE FOLLOWING VARIABLES ARE ZEROABLE .EVEN .COUNT: .WORD 0 .NUMIN: .BYTE 0 ;NUMBER OF INPUT SPECIFIERS .NUMOT: .BYTE 0 ;NUMBER OF OUTPUT SPECIFIERS PASSGL: .BYTE 0 ;USED IN .CSII4 UFDPAS: .BYTE 0 ;USED IN GETUFD .EVEN .FLAG1: .BYTE 0 ;EIGHT SOFTWARE FLAGS .FLAG2: .BYTE 0 ;THAT GET ZEROED EVERY STRING .FLAG3: .BYTE 0 .FLAG4: .BYTE 0 .FLAG5: .* ERRORS: MOV #KIB,-(SP) MOV #LKBKTT,-(SP) EMT WRITCD MOV #LKBKTT,-(SP) EMT WAITCD REINIT: CLR LKBKSI+6 CLR LKBKSO+6 ;CLEAR OUT TRACES OF LAST STRING 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+,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 THIS THE CORRECT CHARACTER? BEQ O.SP ;JUMP IF YES CMP #O.TL+O.LG,R4 ;IS THE SEARCH DONE? BHI O.,#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 ;CONSIST OF: ; OVERLAY AREA ; RESIDENT LINK-11 ; ;THE RUN TIME TRANSFER ADDRESS WILL ;BE "LNK" IN RESIDENT LINK-11 ; ; ; ;PARAMETER ASSIGNMENTS WTCMD=1 ;.WAIT O-BYTE 0 .FLAG6: .BYTE 0 .FLAG7: .BYTE 0 .FLAG8: .BYTE 0 .FLGOT: .BYTE 0 ;TWO FLAGS FOR COMMUNICATION BETWEEN- .FLGIN: .BYTE 0 ;TRANFER AND ERROR PRINT .EVEN BLKS: .WORD 0 FILES: .WORD 0 ;USED IN DIREC AND WCSEARCH .ERCDW: .WORD 0 ;HOLDS ERROR CODE FOR MESSAGE SWCNT: .WORD 0 ;SWITCH CHECKING IN PIP .AUXWD: .WORD 0 ;AUXILARY ERROR WD (GLOBAL ACFLAG: .WORD 0 ;GARBAGE CHECKING IN PIP .ERFLG: .WORD 0 ;FLAG FOR ERROR PRINT .ACT: .WORD 0 ;ROU. 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 LKBKPO ;-CLEAR OUT LINKBLOCKS THAT MIGHT CLR LKBKPI ;-HAVE BEEN SET BY PREVIOUS JOB CLR LKBKSI CLR LKBKSO CLR NOINFG ;RESET THIS FLAG CLR BACKSW CLR FILSAM BR STRGET ;GET ANOTHER COMMAND STRING ;;;;;;;;;ROUTINE BLKCLR ROUTIN/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 ;PRINT "=" JSR R5,O.FTYP INCB O.SCRN ;SET FLAG TO ALLOW 0PN=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 ; .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 ENT1TINE ADDR FOR LAST ACTION SW .SPARE: .WORD 0 ;SPARE WORD OF TEMPORARY STORAGE ;////////////////////////////////////////////////// ;////////////////////////////////////////////////// ;///////////// PIP CONTROL ROUTINE //////////////// ;///////////// AND SWITCH DISPATCHER ////////////// ;////////////////////////////////////////////////// .START: MOV #LKBKTT-10,SP ;SET UP STACK CLR .KIBBC ;CLEAR BYTE COUNT 2E TO CLEAR CONSECUTIVE WORDS BLKCLR: CLR (R3)+ CMP R3,R4 BLT BLKCLR RTS R5 BLOCK: .WORD CMDBUF ;POINTER TO CMDBUF .WORD 0 ;POINTER TO LINKBLOCK .WORD 0 ;POINTER TO FILEBLOCK GOGET: MOV #LKBKPI,BLOCK+2 MOV #FNBKPI,BLOCK+4 MOV #BLOCK,-(SP) EMT 57 ;GET FIRST INPUT FILE FROM CSI TST LKBKPI+6 ;WAS A PRIMARY INPUT FILE GIVEN? BNE GOGET1 INC NOINFG ;SET FLAG SAYING NO INPUT FILE GOGET1: BIT (SP),#2 ;TEST FOR TOO MANY SWITC3SPACES 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 TO NORMAL 4RIES. ;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 ;OVERLAY #5 .WORD BEGO06 ;OVERLAY #6 .WORD BEGO07 ;OVERLAY #7 .WORD BEGO08 ;OVERLAY #8 .WORD BEGO09 ;OVERLAY #9 .WORD 0 ; ;OVERLAY DEVICE OUT5 MOV #LKBKTT,-(SP) EMT INIT ;INIT THE TTY MOV #LKBKKB,-(SP) EMT INIT ;INIT THE KBD MOV #FNBKTT,-(SP) MOV #LKBKTT,-(SP) EMT OPEN ;OPEN THE TTY MOV #FNBKKB,-(SP) MOV #LKBKKB,-(SP) EMT OPEN ;OPEN THE KBD TST PIPST ;FIRST PASS? BNE .RES ;NO-DON'T TYPE TITLE INC PIPST JSR R5,.M2OB ;IDENTIFY THE PROGRAM .MSG4 .RES: MOV #LKBKTT-10,SP ;REINITIALIZE STACK MOV #.CS6HES BEQ GOGET2 CLR -(SP) MOV #2203,-(SP) ;ERROR S203, SWITCH ERROR IOT BR REINIT GOGET2: TST (SP)+ ;ANOTHER INPUT FILE? BNE OUTGET ;NO MOV #LKBKSI,BLOCK+2 MOV #FNBKSI,BLOCK+4 MOV #BLOCK,-(SP) EMT 57 ;GET SECOND INPUT FILE CMP (SP)+,#1 ;w   f5eU@  [*   & * G &( 8L'4e Q$ BBB"   U@ U e  "U%Gef. U U Bb 0 * BIMMAND STRING MOV #LKBKKB,-(SP) EMT WAIT ;WAIT FOR STRING CMP .KIBBC,#2 ;MAKE SURE HE TYPED SOMETHING BLE .RES ;HE DIDN'T BIT #23400,.KIB+2 ;READ ERROR IN COMMAND STRING BNE CSERR MOV #.CMDBF,-(R6) EMT 56 ;CHECK GENERAL STRING SYNTAX TST (SP) ;IS IT SOUND? BEQ .SWSCN ;YES ECHO: MOV (SP)+,R0 ;ECHO COMMAND WHEN SYNTAX ERROR TSTB (R0)+ MOVB #'?,(R0)+ ;ECHO COMMAND MOVB #VERTAB,(R0)+ SUB #.KIBBC+2,R0 ;CALC BYTE COUNT MJEMT 57 ;GET SUBSIDIARY INPUT FILE CMP (SP)+,#1 ;MORE FILES TO COME? BEQ FILMAN CLR -(SP) MOV #2204,-(SP) ;ERROR S204, TOO MANY OUTPUT FILES IOT JMP REINIT FILMAN: TST LKBKSI+6 BEQ FILM3 CMP LKBKSI+6,LKBKSO+6 ;THIS SECTION 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 KPC,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 RTS 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: L OF OVERLAY BUILDER STARTB: MOV #OVRTAB,R6 ;INITIALIZE THE STACK START=STARTB ;SET UP TRANSFER ADRESS ;SET UP RESTART ADDRESS MOV #AGAIN,-(R6) MOV #2,-(R6) EMT 41 MOV #OVRLB,R1 ;LINK BLOCK CLR @R1 ;FOR ^C BEGIN MOV #OVRFB,R2 ;FILE BLOCK MOV #OVRTBO,R3 ;OUTPUT TRAN BLOCK ;.INIT OVERLAY DEVICE MOV R1,-(R6) ;LINK BLOCK EMT INIT ;OBTAIN DEVICE STATUS MOV R1,-(R6) ;LINK BLOCK EMT 13 CMP (R6)+,(R6)+ ;CORRECT STACK. ;PHYSICAL BLOCK MOV R0,.KIBBC MOV #.KIB,-(SP) MOV #LKBKTT,-(SP) EMT WRITE MOV #LKBKTT,-(SP) EMT WAIT JMP .RES CSERR: MOV #S202,.ERCDWD JSR R5,.ERRFT PIPST: .WORD 0 ;FLAG FOR .BEG .BLOCK: .WORD .CMDBF ;BLOCK FOR CSI .WORD LKBKDU .WORD FNBKDU ;POINTERS FOR CSI USE .SWSCN: CLR .CMDBF ;PREPARE TO GET INPUT FILES INCB .NUMIN ;INCR COUNT OF NUMBER OF INPUTS MOV #.BLOCK,-(SP) EMT NIN = SEC OUT BR FILERR FILM3: CMP LKBKSI+6,LKBKPO+6 BNE FILM4 CMP FNBKSI,FNBKPO BNE FILM4 CMP FNBKSI+2,FNBKPO+2 BNE FILM4 CMP FNBKSI+6,FNBKPO+6 BNE FILM4 MOV #3,-(SP) ;ERROR S227-3, SEC IN = PRI OUT BR FILERR 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, POMOVB #-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 TYPED 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 ;GPSIZE MOV @R6,R4 ;(IN WORDS) OF OVERLAY DEVICE MOV #OVRWRD,-(R6) JSR R7,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 Q57 ;GET INPUT SPECIFIER BIT (SP),#2 ;WAS THERE ENOUGH SWITCH ROOM? BEQ .SWS2 ;YES MOV #S203,.ERCDW ;NO JMP .ERRFT ;PRINT IT .SWS2: TST LKBKDU+6 ;INPUT SPECIFIED? BNE .SWS21 ;YES CLRB .NUMIN ;NO-SET NUMIN TO 0 .SWS21: JSR R5,.SWLOG ;LOG THEM IN .SWS10: CMP (SP)+,#1 ;MORE FILES TO COME? BEQ .SWSO ;NO-GET OUTPUT FILES BR .SWSCN ;YES-GET ANOTHER INPUT .SWSO: MOV #2,.CMDBF ;PREPARE FOR OUTPUT FILE INCB .NUMOT ;INC COUNT FRRIM 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, 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) ;ERRORSO 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.SMFD ;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 T ;PHYSICAL BLOCK MOV @R6,R4 ;TOTAL NUMBER OF ;PHYSICAL BLOCKS REQUIRED BLDR03: DEC R0 BEQ BLDR08 ;TOTAL NUMBER OF 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 MOV R2,-(R6) ;FILE BLOCK MOV R1,-(R6) ;LINK BLOCK EMT DLT BLDR04: CLR -4(R2) ;ERRORS TO MONITOR ;ALLOCATUOR OUTPUTS MOV #.BLOCK,-(SP) EMT 57 ;GET OUTPUT FILE SPECIFIER TST LKBKDU+6 ;WAS AN OUTPUT SPECIFIED? BNE .SWOS1 ;YES TST (SP) ;MORE SPECIFIERS TO COME? BEQ .SWOS2 ;NO-LEGAL .SWOS5: MOV #S204,.ERCDW ;YES JMP .ERRFT ;PRINT IT .SWOS2: CLRB .NUMOT ;NO OUTPUT SPECIFIERS BR .PREOP ;GO TO PRE-OPERATION DISPATCH .SWOS1: BIT (SP),#2 ;ENOUGH SWITCH ROOM? BEQ .SWOS3 ;YES MOV #S203,.ERCDW ;NO JMP .ERRFT ;PRINT IT .SWOS3: V S227-5, PRIM IN = SEC IN BR FILERR FILOP: MOV #LKBKPO,-(SP) EMT INITCD ;INIT THE PRIMARY OUTPUT TST NOINFG ;ANY PRIM INPUT? BNE NAMCHK ;NO MOV #LKBKPI,-(SP) EMT INITCD ;INIT THE PRIMARY OUTPUT NAMCHK: TST LKBKPI+10 ;ANY SWITCHES? BEQ NOSWIT ;NO CMP LKBKPI+12,#102 ;IS SWITCH=B? BEQ NAMCK1 CLR -(SP) MOV #2203,-(SP) ;ERROR S203, SWITCH ERROR IOT JMP REINIT NAMCK1: INC BACKSW ;SET SWITCH TO INHIBIT BACKUP NOSWIT: CMP LW ;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 O.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.REL1XE 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 FILE AND PLACE IT ;IN THE 1ST WORD OF THE OUTPUT TRAN BLOCK. BLDR09: MOV R2,-(R6) ;FILE BLOCK CLR -(R6) MOV R1,-(R6) ;LINK BLOCK EMT 14 ;.LOOK MOV (R6)+,@R3 ;STARTING BLOCK. CMPYJSR R5,.SWLOG ;LOG THEM IN TST SWCNT BLE .SWOS4 ;ALL SWITCHES SEEN ARE LEGAL MOV #S203,.ERCDW ;SWITCH NOT RECOGNIZED JSR R5,.ERRFT .SWOS4: CMP (SP)+,#1 ;MORE FILES TO COME? BEQ .PREOP ;NO-ALL IS OK TSTB .NUMIN ;IF NO INPUTS,MULTIPLE OUTPUTS OK BEQ .SWSO BR .SWOS5 ;ERROR 4 .PREOP: MOV #.PREQF,R3 ;SET UP TABLE SEARCH .PROP2: ADD #4,R3 ;BUMP R3 TO FLAG TST (R3)+ ;FLAG SEZKBKPI+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 FILOP1 CMP FNBKPI+6,FNBKPO+6 ;UIC THE SAME? BNE FILOP1 ;NO INC FILSAM ;IF WE MADE IT HERE I/O FILES ARE ;THE SAME FILE-SET SWITCH MOV #EDI,FNBKPO MOV #TOR,FNBKPO+2 MOV #TMP,FNBKPO+4 ;NAME PRIMARY OUTPUT FILE EDITOR.TMP [: 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: MOV R0,R4 ; PUT NEW N INTO R4 O.REL6: MOV @O.CAD,R1 ;OPENED VALUE IS THE MINUEND MOV R4,O.TMP1 ; \ (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. ; MOV R3,-(R6) ;TRAN BLOCK MOV R1,-(R6) ;LINK BLOCK EMT 10 ;WAIT FOR COMPLETION OF TRANSFER ; MOV R1,-(R6) ;LINK BLOCK EMT WTCMD ;CHECK FOR ERROR ON TRANSFER ; BIT #140000,OVRERR BEQ BLDR06 ;ERROR ON TRANSFER ]T? BNE .PROP1 ;YES CMP R3,#.ENTB2 ;END OF TABLE SEARCH? BLO .PROP2 ;NO BR .ACDSP ;YES-GO TO ACTION DISPATCH .PROP1: DEC -(R3) ;DECREASE FLAG JSR R5,@-(R3) ;DISPATCH TO ROUTINE INC ACFLAG BR .PREOP ;SEE IF ANY MORE .ACDSP: TST .ACT ;ANY ACTION SWITCHES SEEN? BNE .ACDS1 ;YES CMPB .NUMIN,#0 BEQ .POSOP ;NO INPUTS SO DON'T TRANSFER CMPB .NUMOT,#0 BEQ .POSOP ;NO OUTPUTS SO DON'T TRANSFER JSR R5,.TFR ;DISPATCH ^ MOV #FNBKPO,-(SP) MOV #LKBKPO,-(SP) EMT 14 ;SEARCH DIRECTORY TO SEE IF EDITOR.TMP ALREADY EXITS TST (SP)+ ;DOES IT ALREADY EXITS? BIT #200,(SP)+ BEQ FILOP1 MOV #FNBKPO,-(SP) ;YES MOV #LKBKPO,-(SP) EMT 21 ;DELETE IT FILOP1: MOV #FNBKPO,-(SP) MOV #LKBKPO,-(SP) EMT OPENCD ;OPEN THE PRIMARY OUTPUT TST NOINFG ;ANY PRIM INPUT? BNE FILOP2 ;NO MOV #FNBKPI,-(SP) MOV #LKBKPI,-(SP) EMT OPENCD ;OPEN THE PRIMARY INPUT _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 THE VALUE (@O.CAD)-($NR) O.REL9: JSR 5,O.CADV `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 EMT 60 ;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: MOV R1,-(R6) ;RELEASE THE EMT RLS ;DATA SET ; ;RETURN TO THE MONITOR aTO TRANSFER ROUTINE INC ACFLAG BR .POSOP ;GO TO POST-OP DISPATCH .ACDS1: MOV .ACT,R3 JSR R5,(R3) ;DISPATCH TO ACTION ROUTINE INC ACFLAG .POSOP: MOV #.PSTQF,R3 ;SET UP SEARCH .POSP2: ADD #4,R3 ;MOV TO FLAG TST (R3)+ ;FLAG SET? BNE .POSP1 ;YES CMP R3,#.PREQF ;END OF SEARCH BLO .POSP2 ;NO TST ACFLAG BNE .POSP3 ;OK - ACTION TAKEN ON COMMAND MOV #S242,.ERCDWD ;GARBAGE COMMAND JSR R5,.ERRFT .POSP3: JMP .RES ;GET ANOTHERbFILOP2: TST LKBKSI+6 ;ANY SUBSIDIARY INPUT? BEQ FILM1 ;NO MOV #LKBKSI,-(SP) EMT INITCD ;YES-INIT IT MOV #FNBKSI,-(SP) MOV #LKBKSI,-(SP) EMT OPENCD ;OPEN SECONDARY INPUT FILM1: TST LKBKSO+6 ;ANY SECONDARY OUTPUT? BEQ ED3A MOV #LKBKSO,-(SP) EMT INITCD ;YES-INIT IT MOV #FNBKSO,-(SP) MOV #LKBKSO,-(SP) EMT OPENCD ;OPEN SECONDARY INPUT ED3A: CLR cBR 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 dEMT 60 ;*****OVERLAYS BEGIN HERE***** ; ; OVERLAY #1 L1=BEGOVR-BEGO01 ;COMPUTE OFFSET FROM ;RUN TIME OVERLAY AREA 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 OUe STRING .POSP1: DEC -(R3) ;CLEAR FLAG JSR R5,@-(R3) ;DISPATCH TO POST OP INC ACFLAG BR .POSOP ;SEARCH FOR ANY OTHER .NYI: MOV #S203,.ERCDW ;E9=NOT YET IMPLEMENTED JSR R5,.ERRFT fKIBBC ED4: CMP LKBKPO+6,#LSP BNE BEGIN6 JSR R5,TPCHON ;GIVE HIM CHANCE TO TURN OFF PUNCH CLR KIBBC BEGIN6: MOV #102,-(SP) EMT 41 ;GET THE TOP OF THE MONITOR MOV (SP)+,BEG ADD #1500,BEG ;SET UP GEGINNING OF PGB MOV #CKUPP,-(SP) MOV #2,-(SP) EMT 41 CLRB MBF ;CLR BUFFER MOVE FLAG MOV BEG,DOT ;DOT=BEG MOV DOT,END MOV DOT,MRK ;MARK=DOT MOV BEG,R6 MOV #OPERSO,FNBKSO-4 ;SET UP ERROR RETURN FOR SUN OUT TST -(R6) JMg;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 5,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 hTPUT FILE ; OPEN OUTPUT FILE MOV #OPLOD-BEGO01+BEGOVR,LODADR-4-L1 ;SET UP ERROR RETURN MOV #LODDEV,-(SP) ;.INIT THE DATA SET EMT INIT TST LODADR+4-L1 BNE .+10 MOV #0,LODADR+4-L1 .=.-4 .RAD50 /LDA/ .=.+2 MOV #LODADR,-(SP) ;.DELETE THE FILE MOV #LODDEV,-(SP) EMT DELET ; 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 ;i ;//////////////////////////////////////////////////////// ;//////////////////////////////////////////////////////// ;/////////////// SUBROUTINE SWLOG /////////////////////// ;//////////////////////////////////////////////////////// ;//////////////////////////////////////////////////////// ;ROUTINE TO SET UP SWITCH DISPATCH BY SETTING FLAGS ;FOR QUALIFIERS AND SETTING ADDRESS FOR ACTION DISPATCH. jP CKX ;///////////////////^^^^^^^^PGB^^^^^^^^^^/////////////// ;/////////////////////////////////////////////////////// ;EDITOR STACK: .WORD 0 ;;;;;;;;;;;;;;; ;LINK BLOCKS .WORD 0 ;ERROR RETURN FROM INIT LKBKPI: .WORD 0 ;POINTER TO DDB .WORD 35160 ;"IN " ;LOGICAL NAME .WORD 3 ;INPUT DEVICE UNIT .WORD 0 ;INPUT DEVICE NAME .WORD 0 .WORD 0 .WORD 0 ;SPACES Fkl 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 MOV #OPENO,LODADR-2-L1 MOV #LODADR,-(SP) MOV #LODDEV,-(SP) EMT OPEN ; INIT OUTPUT ; LINK24: IOOI ;SETS R0,R1 TO PROPER BUFFER ; ; SET UP THE BUFFER AND DUMP IT. USE R0,R1 AS POINTERS. ; MOV #COMDSZ,(R0) ;SET BC ; SET COMD LOAD ADDRESS MOV LOWAm;CALLED BY CONTROL ROUTINE WHEN A SWITCH IS SEEN .SWLOG: MOV LKBKDU+10,R0 ;MOV # OF WDS TO FOLLOW IN R0 TST R0 ;ANY SWITCHES AT ALL? BEQ .SWL10 ;NO-CHECK FOR * ROL R0 ;MAKE IT NUMBER OF BYTES ADD #LKBKDU+10,R0 ;R0 POINTS TO SWITCH ASCII .SWL5: MOV R0,R4 TST (R4)+ ;R4 POINTS TO NEXT SWITCH INC SWCNT ;SWITCH-SEEN COUNT JSR R5,.ASCHK ;CHECK IF ACTION SWITCH TST R2 ;SUCCESS? BEQ .SWL3 ;NO TST .ACT ;YES-IT IT FIRST ACTION SWITCH? nOR BACKUP SWITCH LKBKPO: .WORD 0 .WORD 60434 ;"OUT" .WORD 1 .WORD 0 ;OUTPUT DEVICE NAME .WORD 0 LKBKSI: .WORD 0 .WORD 35217 ;IN1 .WORD 1 .WORD 0 .WORD 0 LKBKSO: .WORD 0 .WORD 60447 ;OU1 .WORD 1 .WORD 0 .WORD 0 LKBKKB: .WORD 0 ;LINK BLOCK FOR KEYBOARD .WORD 100071 ;"TTY" .WORD 1 .WORD KBD .WORD 0 LKBKTT: .WORD 0 ;LINK BLOCK FOR TELEPRINTER .WORD 100040 ;"TT" .WORD 1 .WORD KBD o ; ;REPRINT LAST OPENED ADDRESS RELATIVELY. ; A. N! WAS TYPED--PRINT N,((O.CADpDR-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. MOV #3401,(R1)+ ;SET COMMAND FOR 5 GENERAL WORDS. MOV LOWADR-L1,(R1)+ ;SET q BEQ .SWL4 ;YES MOV #S232,.ERCDW ;NO-MORE THAN ONE ACTION SWITCH JMP .ERRFT .SWL4: MOV R2,.ACT ;SAVE ROUTINE ADDRESS .SWL3: TST (R4) ;MORE SWITCHES? BEQ .SWL1 ;NO MOV (R4),R0 ;MOV # OF WDS IN R0 ROL R0 ;MAKE IT NUMBER OF BYTES ADD R4,R0 ;R0 POINTS TO SW VALUE BR .SWL5 ;LOOP TILL DONE .SWL1: MOV LKBKDU+10,R0 ;#OF WDS TO FOLLOW IN R0 ROL R0 ;TIMES 2 ADD #LKBKDU+10,R0 ;R0 POINTS TO SWITCH ASCII .SWL11: MOV R0,R4 TST r ;;;;;;;;;;;;;;; ;OPEN 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 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 2 ;OPEN FOR OUTPUT FNBKSO: .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 0 .WORD 4 ;s)-($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? BNE 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 MOVtPROGRAM LOW ADDRESS MOV PRSIZE-L1,(R1)+ ;SET PROGRAM SIZE MOV TRA-L1,(R1)+ ;SET TRA MOV TRADDT-L1,(R1)+ ;DDT ADDRESS CLR (R1)+ ;NOT LOAD-TIME RELOCATABLE MOV SYMB-L1,R2 MOV (R2)+,(R1)+ ;SET MODULE NAME MOV (R2)+,(R1)+ ; ; ; ; ; ; ; ; MOV R1,R2 MOV #2,(R1)+ MOV SSYME-L1,R3 LNK119: CMP R3,USYME-L1 BHIS LNK120 CMP -4(R0),(R0) BLE LNK126 BIT #MONCND,FLAGS(R3) BEQ LNK125 MOV BASE(R3),(R1)+ ADD #INC,(R2) ADD #2,(R0) MOVu(R4)+ ;R4 POINTS TO NEXT SWITCH TO CHECK JSR R5,.QUACK ;CHECK FOR QUALIFIERS TST (R4) ;MORE SWITCHES? BEQ .SWL10 ;NO MOV (R4),R0 ;# OF WDS IN R0 ROL R0 ;TIMES 2 ADD R4,R0 ;R0 POINTS TO ASCII SW BR .SWL11 ;/////////////// THIS PORTION OF SWITCH LOG TESTS FOR * SPECIFIER ;/////////////// IN COMMAND STRING. IF FOUND,IT FAKES OUT QUACK ;/////////////// INTO THINKING IT SEES A WILDCARD SWITCH .SWL10: CMP FNBKDU,#52 ;FILENAME=*? BNE .SWL21 vOPEN 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 0 ;/////////////////////////////////// ;////////////////////////////////////// .WORD 0 .WORD 4 ;OPEN FOR INPUT FNBKKB: .WORD 0 ;FILE BLOCK FOR KEYBOARD ;;;;;;;;;;;;;;;; .WORD 0 .WORD 2 ;OPEN FOR OUTPUT FNBKTT: .WORD 0 ;FILE BLOCw #',,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 ;GET N. THIS CODE SIMULATES O.LOC ASL R0 ;TIMES 2 FOR INDEXING x 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),LOWADR-L1 MOV LOWADR-L1,(R1)+ ADD #2,(R0) LNK127: ADD #2,(R0) CLR (R1)+ ;END OF Cy ;NO JSR R5,.QUAFK ;YES-LOG IT .SWL21: CMP FNBKDU+4,#52 ;EXT=*? BNE .SWL22 ;NO JSR R5,.QUAFK ;YES-LOG IT .SWL22: CMPB FNBKDU+6,#377 ;USER=*? BNE .SWL23 ;NO JSR R5,.QUAFK ;YES-LOG IT .SWL23: CMPB FNBKDU+7,#377 ;USER GROUP=*? BNE .SWL30 ;NO JSR R5,.QUAFK ;YES-LOG IT .SWL30: RTS R5 ;GO HOME ;////////////////////////////////////////////////////// ;/////////////// SUBROUTINE QUAFK ///////////////////// ;///////////////////////////////////zK FOR TELEPRINTER ;////////////THE FOLLOWING ARE ED11'S CANNED MESSAGES MSG1: 4 0 4 .BYTE CR,LF .ASCII /#/ .BYTE VERTAB .BYTE 0 .EVEN MSG3: 20 0 20 .ASCII /EDIT-11 V002A/ .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 .=.+110 .{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 ; ;INITIALIZE MEMORY BYTES. ; O.INIT|OMD 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. MOV LIMIT-L1,CMDBUF-L1 ;RESET CSI POINTER CMP SSYME-L1,USYME-L1 BEQ .+4 ERR23 JMP LINK73-L1 .IFNDF NOSEG ENDO01: SIZO01=ENDO01-BEGO01 ; ;*****OVERLAY #2***** L2=BEGOVR-BEGO02 ;COMPUTE OFFSET FROM ;RUN TIME OVERLAY AREA BEGO02: ;J}/////////////////// ;ROUTINE TO FAKE .QUACK INTO THINKING IT SAW A * SWITCH .QUAFK: MOV #-1,.SPARE ;SET "SWITCH"=-1 MOV #.SPARE,R0 ;MOV ADDR OF "SWITCH" IN R0 JSR R5,.QUACK ;COUNT IT RTS R5 ;COUNT IT ;/////////////////////////////////////////////////////// ;/////////////////////////////////////////////////////// ;/////////////// COMMON ERROR PRINT //////////////////// ;////////////////////////////~EVEN ;//////////ED11 JUMP TABLE ;ARRANGED BY COMMAND JTBL: ZBEG ;BEGINNING ZEND ;END MARK ZREAD INSRT FORMF VERIFY UNSAVE WHOLE GET TRAILER NEXT SAVE POSITION CHANGE DELETE WRITE LIST ADV KILL XCHANGE ZJMP EJTBL: EWRITE ;JUMP TABLE TO E-ROUTINES EWHOLE EPOSITION EMACRO EQUIT EREAD EOPEN EFILE EANY: .BYTE 'W : 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 RUMP 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- MOV #INCMD,-(SP) ;CLOSE RELEASE KB MOV (SP),-(SP) EMT CLOSE EMT RELEAS MOV #OUTCMD,-(SP) ;CLOSE RELEASE TELEPRINTER MOV (SP),-(SP) EMT CLOSE EMT RELEAS RESE06: TST OBJDEV-L2 ;IS OBJ DEV INITED? BEQ RESE01 ;NO- IOIC RESE01: MOV #MAPDEV,R0 /////////////////////////// ;/////////////////////////////////////////////////////// .ERRFT: INCB .ERFLG .ERRPR: MOV .AUXWD,-(SP) MOV .ERCDWD,-(SP) IOT ;PRINT ERROR TSTB .FLGOT ;SUPPRESS OUTPUT RELEASE? BNE .ERR3 ;YES TST LKBK01 ;NEED WE RELEASE THIS LKBK? BEQ .ERR3 ;NO TST FNBK01 BEQ .ERR5 ;NULL FILE NAME MOV #FNBK01,-(SP) ;FILE OPEN MOV #LKBK01,-(SP) ;THIS DATASET EMT SEARCH ;DO A SEARCH FOR FNBK01 TST (SP)+ ;POP STACK.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 POSAR2 CLR R5 ;R5 IS A SAVE REGISTER FOR R4 O.DCD1: CLR R4 ; R4 CONTAINS 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 THRTSTB MAPOPF-L2 ;IS MAP OPEN? BEQ RESE02 ;NO- MOV R0,-(SP) ;YES-CLOSE & RELEASE EMT CLOSE RESE02: TST @R0 ;IS IT INITED? BEQ RESE03 ;NO- MOV R0,-(SP) EMT RELEAS RESE03: MOV #LODDEV,R0 TSTB LODOPF-L2 ;IS LOD DEV OPEN? BEQ RESE04 ;NO- MOV R0,-(SP) ;YES-CLOSE & RELEASE IT EMT CLOSE MOV #LODADR,-(SP) ;DELETE LOAD MODULE FILE MOV R0,-(SP) EMT DELET RESE04: TST @R0 ;IS IT INITED? BEQ RESE05 ;NO- MOV R0,-(SP) ;YES- BIT #20,(SP)+ ;FILE OPEN? BEQ .ERR5 ;NO-JUST RELEASE DATASET MOV #LKBK01,-(SP) ;YES-CLOSE BEFORE RELEASING EMT CLOSE .ERR5: MOV #LKBK01,-(SP) ;YES EMT RELEAS ;DO IT .ERR3: TSTB .FLGIN ;SUPPRESS INPUT RELEASE? BNE .ERR4 ;NO TST LKBK02 ;NEED WE RELEASE LKBK2? BEQ .ERR4 ;NO TST FNBK02 BEQ .ERR6 ;NULL FILE NAME MOV #FNBK02,-(SP) ;DO THE SAME THING FOR THIS MOV #LKBK02,-(SP) ;DATASET THAT WE DID FOR LKBK01 EMT SEARCH ;ABOG: .BYTE '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: .BEE BITS IN R4 INC R2 ;R2 HAS NUMERIC FLAG BR O.SCAN ; AND TRY AGAIN O.CLGL: CLR R1 ;CLEAR INDEX O.LGL1: CMPB R0,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 N EMT RELEAS RESE05: CLRB PASS-L2 ;SET FOR PASS ONE. CLRB TRAF-L2 ;NO TRA YET. CLRB DDTF-L2 CLRB NOINIT-L2 ;OVERLAYS SET UP FLAG. CLRB SDDTRA-L2 CLR TRADDT-L2 CLRB FLINE-L2 CLRB CONCAT-L2 CLRB TAPES-L2 CLRB MAPF-L2 CLRB TOPF-L2 CLRB BOTF-L2 CLRB UTRA-L2 CLRB FTRA-L2 CLRB STRA-L2 CLRB MONLIB-L2 CLRB SECTIM-L2 CLRB LASTDB-L2 CLRB REINIT-L2 CLRB INTMOV-L2 CLRB FLAG-L2 CLRB FILEOR-L2 CLRB NOOUTP-L2 CLRB VE TST (SP)+ BIT #20,(SP)+ BEQ .ERR6 MOV #LKBK02,-(SP) EMT CLOSE .ERR6: MOV #LKBK02,-(SP) EMT RELEAS ;YES-DO IT .ERR4: TSTB .ERFLG ;RESTART? BEQ .ERR1 ;NO JMP .RES ;GET ANOTHER STRING .ERR1: RTS R5 ;RETURN TO CALLING ROUTINE ;///////////////////////////////////////////////////// ;///////////////////////////////////////////////////// ;/////////////// COMMON MESSAGYTE CTRLX .EVEN ;;;;;;;;;;;;;;;;;THE FOLLOWING VRBLS ARE ZEROABLE CMD: .WORD 0 ;HOLDS 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 NUOT 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 ASL 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.ORPNOONOM-L2 CLRB BELOW0-L2 CLRB ODTF-L2 CLRB NOTINP-L2 CLRB LIBF-L2 CLRB FBBF-L2 CLRB SBBF-L2 CLRB FREADF-L2 CLRB MAPOPF-L2 CLRB LODOPF-L2 ; ; INITIALIZE KEYBOARD DATA SET ; MOV #INCMD,-(SP) EMT INIT ; ; OPEN KEYBOARD FILE ; MOV #OPENI,KBDADR-2-L2 MOV #KBDADR,-(SP) MOV #INCMD,-(SP) EMT OPEN ; ; INITIALIZE TELETYPE DATA SET ; MOV #OUTCMD,-(SP) EMT INIT ; ; OPEN TELETYPE FILE ; MOV #OPENO,TTYADR-2-L2 MOV #TTYADR,-(SP)E PRINT //////////////// ;///////////////////////////////////////////////////// ;///////////////////////////////////////////////////// ;ROUTINE TO PRINT ANY CANNED MESSAGE ON THE TTY ;ADDRESS OF LINE BUFFER MUST FOLLOW JSR CALL AS ARGUMENT .M20B: .M2OB: MOV (R5)+,.M2OB1 ;GRAB LINE BUFFER ADDRESS MOV #0,-(SP) .M2OB1=.-2 ;LINE BUFFER ADDRESS GOES HERE MOV #LKBKTT,-(SP) EMT WRITE ;WRITE MESSAGE ON TTY MOV #LKBKTT,-(SP) ;WAIT FOR TTY TO FINISH EMT WAIT MBER 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 0 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 ;CC ; "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.OFST ; 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 PROCESS MOV #OUTCMD,-(SP) EMT OPEN ; MOV #LINK,-(SP) ;RESTART MOV #2,-(SP) EMT RSTRT ; ; PRINT NAME ; MOV #LNKNM,R0 TYPE ; ; START PASS 1 ; LINK66: MOV #PASS1,R0 ;TYPE "PASS1" TYPE JMP LINK80-L2 .IFNDF NOSEG ENDO02: SIZO02=ENDO02-BEGO02 ; ;*****OVERLAY #3***** 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 RTS R5 ;RETURN TO CALLING MODULE ;///////////////////////////////////////////////////// ;///////////////////////////////////////////////////// ;//////////////// SUBROUTINE ASCHK /////////////////// ;///////////////////////////////////////////////////// ;///////////////////////////////////////////////////// ;ROUTINE TO COMPARE SWITCH PINTED TO TO A TABLE OF ;ACTION SWITCHES ;R0-POINTS TO SWITCH IN LKBK OMMAND INPUT BUFFER .=.+110 TIB: 0 ;TEXT INPUT BUFFER .=.+110 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 ABSLAST:.WORD 0 ;LAST WORD OF FREE CORE FOR ANYTHING BEG: .WORD 0 ;FIRST ADDR OF PGB END: .WORD 0 ;HOLDS END OING 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 ; ! 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 ; ; PROCESS OUTPUT SPECIFICATIONS AND SET MONITOR TOP. ; STRT31: MOV #102,-(SP) EMT FMS MOV (SP)+,MONTOP-L3 ;INITIALIZE AT CURRENT SIZE MOV CMDBUF-L3,BLKO-L3 MOV #2,@CMDBUF-L3 ;PREPARE FOR OUTPUT FIELD MOV #BLKO,-(SP) ;GET FIRST OUTPUT FIELD EMT CSI2 TST LODDEV+6-L3 BNE LINK85 INCB NOOUTP-L3 LINK85: CMP #2,(SP) BGT .+4 ERR19 ASR (SP)+ BCS LINK86 ;ODD=>NO MAP FOLLOWS MOV CMDBUF-L3,BLKM-L3 ; GET MAP FILE MOV #BLKM,-(SP) EMT CSI2TO BE EXAMINED ;R2-ON RETURN,CONTAINS ADDRESS OF ROUTINE IF ;SWITCH IS ACTION SWITCH,0 OTHERWISE .ASCHK: MOV #.ACTSW,R1 ;MOV BEG OF TABLE IN R1 .ASCLP: CMP (R0),(R1)+ ;COMPARE SWITCH WITH VALUE BEQ .ASCK1 ;EQUAL? TST (R1)+ ;BUMP R1 CMP R1,#.ENTB1 ;END OF TABLE YET? BLO .ASCLP ;NO-LOOP AGAIN CLR R2 ;SEARCH UNSUCCESSFUL-SET R2=0 RTS R5 ;RETURN .ASCK1: MOV (R1),R2 ;PUT ROUTINE ADDRESS IN R2 DEC SWCNT RTS R5 F 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 ; SUBROUTINE B; 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 REXP 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 INCB MAPF-L3 ;SET MAP FLAG CMP #2,(SP) BGT .+4 ERR19 ASR (SP)+ BCS LINK86 ERR20 LINK86: TSTB NOOUTP-L3 BEQ .+12 CLRB NOOUTP-L3 INCB NOONOM-L3 CLR @CMDBUF-L3 MOV CMDBUF-L3,BLKI-L3 MOV #BLKI,-(SP) EMT CSI2 TST OBJDEV+6-L3 BNE LNK136 ASR (SP)+ BCS LNK135 ERR17 LNK135: TSTB NOONOM-L3 BEQ .+6 JMP LNK145-L3 ERR02 LNK136: TST LODDEV+6-L3 BEQ LINK35 MOV #LODADR,R0 TST (R0) BNE LINK35 MOV #OBJADR,R1 ;/////////////////////////////////////////////////////// ;/////////////////////////////////////////////////////// ;/////////////// SUBROUTINE QUACK ////////////////////// ;/////////////////////////////////////////////////////// ;/////////////////////////////////////////////////////// ;SUBROUTINE TO COMPARE A SWITCH AGAINST A TABLE OF ;QUALIFYING SWITCHES ;IF ONE IS SEEN,THE APPROPRIATE FLAG WORD IN THE TABLE IS ;INCREMENTED ;WHENEG ;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 MARK: 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 R,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 @O.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 MOV (R1)+,(R0)+ MOV (R1),(R0) LINK35: JMP LNK128-L3 ; ; OBTAIN ADR OF HIGHEST WORD IN CORE ; STRT32: MOV #100,-(SP) EMT 41 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 ;COMPUTE OFFSET FROM ;RUN TIME OVERLAY AREA BEGO04: ;JUMP TABLE TO ENTRY POINTS ;IN THIS OVE CALLED R0 MUST CONTAIN ADDRESS OF SWITCH IN LKBK ;WHEN RETURNED,R2 WILL CONTAIN 0 IF NO MATCH FOUND ;OR THE APPROPRATE ROUTINE ADDRESS IF A MATCH IS FOUND .QUACK: MOV #.CSQF,R1 ;MOV BEG OF TABLE INTO R1 .QACLP: CMP (R1)+,(R0) ;SWITCHES EQUAL? BEQ .QACK1 ;YES ADD #4,R1 ;BUMP R1 BY 2 WORDS CMP R1,#.ENTB2 ;DONE WITH SEARCH YET? BLO .QACLP ;NO-TRY AGAIN CLR R2 ;YES-FAILURE RTS R5 ;GO BACK .QACK1: TST (R1)+ ;BUMP R1 INC (R1) ;INCREMENT FL5 EOPEN1: CLR -(SP) MOV #1317,-(SP) 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 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 ; INTERMEDIATE HELP ; PROCESSRLAY. ; JMP LINK13 ;ENTRY1 .ENDC LINK13: 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. CMP #DOTBLK,NAME2(R0) ;IS 2ND WORD ". "? BEQ LNK111 ;YES-GO CHANGE ". " INTO " " BIT #MONCND,FLAGS(R0) ;MONCND FLAG SET? BEQ LNK130 ;NO- TST BASE(R0) ;YES-EMT FILLED IN? BNE LNK116 ;YES- BIC #MONCND,FLAGS(R0) ;NO- MOV #DOTBLK,NAME2(R0) AG FOR SWITCH MOV -(R1),R2 ;MOV ROUTINE ADDRESS INTO R2 DEC SWCNT RTS R5 ;RETURN ;/////////////////////////////////////////////////////// ;/////////////////////////////////////////////////////// ;///////////// ROUTINES TO SAVE AND UNSAVE ///////////// ;//////////////// GENERAL REGISTERS //////////////////// ;/////////////////////////////////////////////////////// .RSAV: MOV R0,RS0 ;SAV R0 MOV #RARG ;/A....SET DOT TO END RTS R5 ;SUBROUTINE JUMP ;ROUTINE TO ADVANCE DOT BY ARG CHARS ;INPUTS :ARG ; :DOT ;OUTPUTS:NEW DOT ZJMP: TST ARG ;WHAT IS ARG? BLE ADV ;LE MOV DOT,TMP4 TST MINUS ;WHAT IS MINUS? BEQ JMP3 ;ER---FWD ;BACKWARD JMP1: SUB ARG,DOT ;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 , 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 OBR LNK130 LNK130: BIC #ABSREL,FLAGS(R0) ;NO-MAKE ABSOLUTE BIS #UNDEF+INTGLB,FLAGS(R0) ;MAKE DEFINED AND 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 LNK111: MOV #BLANKS,NAME2(R0) ;CHANGE ". " INTO " " BIS #MONCND,FLAGS(R0) ;FLAGS ENTRY: MON ROUTINE CANDIDATE CLR BASE(R0) ;CLEAR SPACE OF EMT BR LNK116 LNK112: TSTB SECTIM-L4 BNE LNK131 INCB MONLIB-S0+2,R0 ;SET UP R0 AS POINTER MOV R1,(R0)+ MOV R2,(R0)+ MOV R3,(R0)+ MOV R4,(R0)+ RTS R5 .USAV: MOV #RS0+2,R0 MOV (R0)+,R1 MOV (R0)+,R2 MOV (R0)+,R3 MOV (R0)+,R4 MOV RS0,R0 RTS R5 RS0: .WORD 0 ;BLOCK OF STORAGE .=.+20 ;///////////////////////////////////////////////////// ;///////////////////////////////////////////////////// ;//////// COMMAND STRING INTERJMP3: 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 ;SUBROUTINE FIND LINE FEED ;ROUTINE TO ADVANCE DOT TO ;PROPER LF CHARACTER ;INPUTS ;ARG ;MINUS 1=BACKWARD,0=FWD ;DOT ;BEG ;END ;OUTPUTS ;TMP4=OLD DOT ;ARG=0 ;DOT=ADR+1 OF PROPER LF.BW,-(SP) ;SAVE BW 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 OL4 ;IN MON LIB SEARCH JMP LINK80-L4 ;CHECK FOR ROOM FOR COM ST LNK131: CLRB SECTIM-L4 ; INITIALIZE FOR PASS 2 CMP SYMB-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: MOV SYMB-L4,R0 ;SET PTR TO FIRST MODULE NAME. MOV R0,PTRG-L4 CLR PRSIZE-L4 ;0 TO PROGRAM SIZPRETER INTERFACE /////// ;///////////////////////////////////////////////////// ;///////////////////////////////////////////////////// ;INITIALIZE COMMAND STRING .CSII2: MOV #.CMDBF,-(SP) ;INITIALIZE CSI AND CHECK SYNTAX EMT 56 TST (SP)+ ;POP STACK AND CHECK FOR 0 BEQ .CS1 ;0? MOV #S204,.ERCDW ;NO-ERROR 1 JMP .ERRFT .CS1: RTS R5 ;RETURN ;FORCE NEW OUTPUT DEFAULT .CSII: MOV R0,.CMDBF+10 ;MOVE NEW DEFAULT IN TST R1 ;NEW UNIT FOR DEFAULT? B ;BACKWARD---ARG+1 LF CHARS FLF: ADD MINUS,ARG ;INC ARG IF BACKWARD MOV #1,-(LS) ;SAVE OLD DOT FLF1: TST MINUS ;DIRECTION? BEQ FLF3 ;FORWARD ;BACKWARD FLF2: CMPB -(DOT),#LF ;THIS ONE A LF? BEQ FLF2A ;YES CMPB @DOT,#FF BNE FLF2 ;NO 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.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 HANDLER - 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 THE 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 HIGH BYTE (ENTRY TYPE) MOVB FLAGS(R0),R2 ;GET FLAG LOW BYTE CMPB #OBJMN,R1 ;OBJ-MODULE NAME? BEQ LINK16 ;YES-IGNORE CMPB #SYMN,R1 ;SYMBOL ENTRY? BEQ LINK19 ;YES-GO CMPB #SECTN,R1 ;SECTION NAME? BEQ LINK20 ;YES-GO BR LINK16 ;IGNORE ALL OTHER THINGS. ; ; ENTRY POINT LINK19: BITB #ABSREL,EQ .CS3 ;NO MOV R1,.CMDBF+14 ;MOVE IN NEW UNIT DEF .CS3: RTS R5 ;RETURN ;FORCE NEW INPUT DEFAULT .CSII1: MOV R0,.CMDBF+6 ;MOV NEW DEV IN TST R1 ;NEW UNIT? BEQ .CS2 ;NO MOV R1,.CMDBF+12 ;MOV NEW UNIT IN .CS2: RTS R5 ;RETURN ;GET NEXT INPUT SPECIFIER .CSII5: MOV #2,.CMDBF ;SET CODE IN .CMDBF FOR CSI BR .CSS ;ESSENTIALLY SKIP NEXT LINE ;GET NEXT OUTPUT SPECIFIER .CSII3: CLR .CMDBF ;SET CODE IN .CMDBF ;GET NEXT SPECIFIER-CODE C (DOT)+,#LF ;THIS ONE A LF BEQ FLF7 ;YES CMPB -1(DOT),#FF ; A FF? BEQ FLF7 ;THIS THE ONE AT THE 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 IS 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 BR 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 COUNTR2 ;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 LINK16 ;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)+,OMMON TO CSII3 AND 5 .CSS: MOV #.BLOCK,-(SP) EMT 57 ;GET SPECIFIER FROM CSI2 BIT (SP)+,#1 ;MORE FILE SPECIFIERS? BEQ .CSS1 ;YES CLR R0 ;SET R0=0 RTS R5 ;RETURN TO SENDER .CSS1: MOV #1,R0 ;SET R0=1 RTS R5 ;RETURN ;SETS UP WILD CARD FILES - SENDS THEM OUT IN FNBKDU .CSII4: TSTB PASSGL ;FIRST PASS? BNE UNSAVE ;NO CMP FNBKDU,#'* ;*'S IN THIS FNBK? BEQ INCPAS ;YES CM .EVEN ;;;;;;;SUBROUTINE EXIT EQUIT: TST LKBKSO 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 COUNT 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 #'R3 ADC R3 ADD R3,PRSIZE-L4 ;SUM UP FOR TOTAL SIZE 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 BOTFP FNBKDU+4,#'* BEQ INCPAS ;YES CLR R0 RTS R5 ;NO INCPAS: INCB PASSGL ;1ST PASS MOV FNBKDU+6,UIC JSR R5,UCGET ;GET UIC INITI: MOV #LKBKDU,LKBK MOV LKBK,-(SP) EMT INIT ;INIT INPUT DEVICE JSR R5,SETUP ;PREPARE FOR DISK OR DTA BR OK MOV #S231,.ERCDW ;NON FILE-STRUCTURED INPUT DEVICE JSR R5,.ERRFT ;FATAL ERROR OK: JSR R5,FINDUC JSR R5,GETUFD BR ERR1 ;0 UFD JSR R5,.MOVFN ;GOT UFD FNBKDU FNBKWC ;WILD CARD FNB BEQ EQUITA MOV #LKBKSO,-(SP) EMT CLOSCD MOV #LKBKSO,-(SP) EMT RLSECD EQUITA: TST LKBKSI BEQ EQUITB MOV #LKBKSI,-(SP) EMT 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 J ,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 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 RAN-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),LOWADR-L4 MOV (SP)+,CURPC-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 LIBR SRCHDI UNSAVE: JSR R5,.USAV ;UNSAVE GEN REG'S. SRCHDI: JSR R5,WCSRCH ;GO TO WILD CARD SEARCH (GLOBAL SUBROUTINE) BR SEND ;GOOD FILE BR DONE ;NO MORE FILES SEND: MOV (R2),FNBKDU ;FIL MOV 2(R2),FNBKDU+2 ;NAM MOV 4(R2),FNBKDU+4 ;EXT. JSR R5,ENDTST ;ANOTHER ENTRY IN DIRECTORY? BR MORE ;YES BR DONE ;NO ERR1: MOV #S235,.ERCDW ;NO UFD ON DISK (0 ENTRY) JSR R5,.ERRFT ;SHOULD NEVER BE MORE: JSR R5,WCSRCH ;IS IT A WC? BR CUMSR 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 ;CLOSE 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 #LKBKTTGE 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 NK60 ;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 ERR12 ;MODULE NAME MUST BE THERE. LINK32: MOV R4,PTRG-L4 ;SET PTRG TO CURRENT NAME. MOV #TRABLK+4,R4 GETSECBAK ;YES DONE: CLR R0 CLRB PASSGL MOV LKBK,-(SP) EMT RELEAS RTS R5 ;SEND OUT LAST FILE CUMBAK: JSR R5,.RSAV ;SAVE GENERAL REGS. MOV #1,R0 ;SIGNAL TO COME AGAIN RTS R5 ;SEND OUT FILE IN FNBKDU ;ROUTINES TO INTERFACE WITH DOS CONVERSION ROUTINES ;////////////////////////////////////////////////// ;////////////////////////////////////////////////// ;///////////// GETOCT AND GETDEC ////,-(SP) EMT CLOSCD ;CLOSE TELETYPE MOV #LKBKTT,-(SP) EMT RLSECD ;RELEASE TELETYPE MOV #LKBKKB,-(SP) EMT CLOSCD ;CLOSE KEYBOARD MOV #LKBKKB,-(SP) EMT RLSECD ;RELEASE KEYBOARD JMP START ;BEGIN AGAIN EXFLAG: .WORD 0 EQUIT4: CLR -(SP) MOV #1317,-(SP) IOT TST (SP)+ JMP BERR ;;;;;;;;;SUBROUTINE ENDFILE EFILE: TST ENDFLG ;EF ALREADY DONE? BNE ;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 SYMB-L4,PTRG-L4 ;SET PTRG MOV TRA-L4,R0 ;PRINT MSG--TRA,LOW ADR-L4,ETC MOV #TRAMA,R1 OTOA MOV LOWADR-L4,R0 MOV #TRAMB,R1 OTOA ////////////// ;////////////////////////////////////////////////// ;////////////////////////////////////////////////// .GLOBL GETOCT,GETDEC ;ROUTINES TO CONVERT ASCII DIGITS INTO OCTAL OR BINARY ;DECIMAL BINARY EQUIVALENTS. WHEN CALLING,PUT POINTER TO ;DIGIT STRING IN R0. WILL RETURN WITH BINARY IN R0,OR -1 ;IN R0 TO SIGNIFY AN ERROR CONDITION OCCURED. GETOCT: MOV R0,-(SP) MOV #4,-(SP) .GET: EMT 42 ;GO TO MONITOR CONVERTER BVS .GOCT1 ;ERROR IF WORD OVERFLO 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; ; SEARCHES - $MSK HAS THE MASK ; $MSK+2 HAS THE FWA ; $MSK+4 HAS THE LWA O.EFF: INC R1 ;SET E MOV TOPMEM-L4,R0 MOV #TRAMC,R1 OTOA JMP EXOVL4-L4 .IFNDF NOSEG ENDO04: SIZO04=ENDO04-BEGO04 ; .EOT W MOV (SP)+,R0 ;PUT BINARY IN R0 TST (SP)+ ;POP STACK TO CLEAN IT UP RTS R5 ;RETURN .GOCT1: MOV #-1,R0 ;PUT DRROR (-1) IN R0 CMP (SP)+,(SP)+ ;CLEAN UP STACK RTS R5 ;RETURN GETDEC: MOV R0,-(SP) MOV #2,-(SP) ;MOV DECIMAL CODE ON STACK BR .GET ;SAME AS GETOCT FROM NOW ON ;///////////////////////////////////////////////////// ;/////////////// MOVLK AND MOVFN //////////////////// #FNBKPI,-(SP) ;NO BACKUP-DELETE INPUT MOV #LKBKPI,-(SP) EMT DELTCD BR 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 #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 DFFECTIVE SEARCH BR O.WDS O.WSCH: CLR R1 ;SET WORD SEARCH O.WDS: TST R3 ;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 ;TAPE2 ;*****OVERLAY #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 MOV #INA,-(SP) MOV #OBJDEV,-(SP) EMT READ GGSD26: / ;///////////////////////////////////////////////////// ;SUBROUTINES TO RETIEVE DEVICE INFORMATION AND FILENAMES ;FROM CSII . CALLED WITH TWO ARGUMENTS FOLLOWING-FIRST IS ;BLOCK TO BE MOVED FROM,SECOND IS BLOCK TO BE MOVED TO .MOVLK: MOV (R5)+,.SPARE MOV (R5)+,.COUNT ADD #4,.COUNT ADD #4,.SPARE MOV @.SPARE,@.COUNT ADD #2,.COUNT ADD #2,.SPARE MOV @.SPARE,@.COUNT RTS R5 .MOVFN: MOV (R5)+,.SPARE MOV (R5)+,.COUNT .MOVLP: MOV @.SPARE,@.COUNT AELTCD ;YES-KILL IT RNAM3: MOV #FNBKON,-(SP) ;NEW NAME MOV #FNBKPI,-(SP) ;OLD 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 (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 MATCH 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 IOIG GGSD23: BITB #EOF,-1(R0) ;ERROR? BNE GGSDEX ;YES, GET OUT 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 GGSD02: MOV (R1)+,R2 ;GET BLOCK TYPE SUB #2,(R0) ;DECREMENT BC CMPB #GSDBLK,R2 ;GSD BEQ GGSD03 ;YES MOVB TAPES-L5,DD #2,.SPARE ADD #2,.COUNT CMP .SPARE,#FNBKDU+12 BLO .MOVLP RTS R5 .END .START ; IT DOES IT BY CALLING LIST AS A 0L ; FOLLOWED BY A 1L CLR ARG JSR R5,LIST CLR MINUS INC ARG MOV #LKBKTT,-(SP) EMT WAITCD JMP LIST ;SUBROUTINE LIST ;ROUTINE TO LIST ON TELEPRINTER. ;THE LINES AS DEFINED BY ARG LIST: JSR R5,GLM ;GETS LIMS MOV #LKBKTT,-(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 OUTP(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 BR 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 EQU-(SP) BISB CONCAT-L5,(SP)+ BNE GGSD04 ;IGNORE GSDEND IF EITHER ; TAPES OR CONCAT ON. 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 BR GGSD23 GGSD24: CMP #2,CNT-L5 BNE GGSD04 MOV IN-L5,R0 CUT 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 @R5 ;INC BC CMP @R5,TOB ;BUFFER FULL? BNE TW1C2 ;NO MOVB #VERTAB,(R3)+ ;TACK ON A TERMINATOR JUST IN CASE INC @RAL 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; TYPED? BEQ O.ERR1 ; TYPE ? IF NOT MOVB #O.BKP+3,O.P ;CLEAR PROCEED ASR R5 ;CHECK LOW ORMP (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) ;DISPATCH GGSD05:5 MOV #TOB,-(SP) MOV #LKBKTT,-(SP) EMT WRITCD MOV #LKBKTT,-(SP) EMT WAITCD BR TW1C1 TW1C4: MOV #TOB,-(SP) MOV #LKBKTT,-(SP) EMT WRITCD 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 ;WHAT DIRECTION? BEQ GLM2 DER 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 REGISTERS MOV O.UST,-(SP) ; AND STATUS MOV O.UPC,-( +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 ; ; MODULE NAME ; GGSD06: MOV R4,R2 ;SAVE R4 SRMODN ;CHECK IF MODULE NAME IS UNIQUE BR GGSD10 ;ERROR IF NOT UNIQUE MOV R2,R4 MOV SYME-L5,PTRG-L5 ;SET PTR TO MODULE NAME INSYME ;INSERT AT SYME + UPDATE PTRS BR GGSD03 ;DO NEXT ENTRY GGSD10: ERR05 ;MODULE ;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 TOHSP) ; AND PC RTI ; 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 LEGAL 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,S NAME NOT UNIQUE TSTB CONCAT-L5 BEQ GGSD27 GGSD28: IOIG BITB #EOF,-1(R0) BNE GGSDEX CMPB #MODEND,(R1) BEQ .+4 BR GGSD28 JMP GGSD26 GGSD27: BR 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-L . Bұ V00A 5-- PDP-PDUԠNō BAAN PYGHԬDGA̠UPMNԠPAN MAYNADMASSAHUSSANUAY9 BGB SŠM+ Ҡ5 DŠM+ DB"D̍ DM'D DSHM+ DҠ0 GSD MD6 Ơ00 GB00 AҠ Ơ PN0 D" GBN0 GSD ERE,FROMA ;BUFFER GOING UP OR DOWN? BLOS MUP ;UP ;DOWN MDN: MOV THRUB,TMP3 ;TMP3=THRUB+1 INC TMP3 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 T ;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 HANDLER O.BRK: MOV (SP)+,O.UPC ;PRIORITY IS 7 UPON ENTRY MOV (SP)+,O.5 AND UPDATE PTRS. MOV SYME-L5,PTRH-L5 INSYME BR GGSD14 GGSD12: CMPB FLAGS+1(R4),#SECTN ;IS IT A SECTION NAME? BNE GGSD13 ;NO - ERROR - MULT DEFINITION. MOV R4,PTRH-L5 CMP VALR(R4),VALR(R2) ;WHICH SIZE IS BIGGEST BHIS GGSD14 MOV VALR(R2),VALR(R4) ;GET BIGGEST SIZE. BR GGSD14 ;GO DO NEXT ENTRY ; ; TRA SPECIFICATION ; GGSD08: TSTB DDTF-L5 ;IS THIS THE DEBUG FILE? BE" Ҡ"3 NԠM+6 NK NSԠ'ɍ Ơ SҠ"6 MAN6. BSԠ"ύ MҠ" PNM+6 DҠ"5 Pà ADM+ ASŠM+ NAMŠM+0 SADҠM+ PAŠ'ҍ 00 ұ Ҳ 33 Ҵ 55 66 SMANSM+5 B65 ұ56 MP30 SMҠ" SPAŠ0 SPSP000 SAUSM+3 SҠ SҠ"0 SYNAؠM+56 UYM+ VAB3 AŠM+ ;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 BEG 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 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 ORDER BITS RORB R5 ; IQ 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 GGSD03 ;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 MOV (R4)+,(R2)+ ;SECTION NAME MOV (R4)+,(R2)+ TST (R4)+ ;SKIP FLAGS MOV (R4)+,(R2) ŠM+ B: .D 0 A̠SAŠAA̍ B: .D 0 UPUԠBAYNKBK .AD50 B .D NϠSHSAD .AD50 DƯ .D 0 A̠SAŠAA̍ B: .D 0 NPUԠBAYNKBK .AD50 B .D 35. AKSD̠ҠD .AD50 DƯ UPϠ3.VAUSNDҍ .A̠HASPҠNō ..+6. .D 0 MAMUMNDƠSHNDҍ .D 0 A̠SAŠAA ;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 (LS)+,-(TMP3) ;FROMA=OLD DOT NTO RORB R5 ; HIGH ORDER RORB R5 ; POSITION O.BK3: 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 ;SAVE TELETYPE STATUS + ;CONSTANT MOVB DDTF-L5,-(SP) ;IS THIS THE DDT TRA? CLRB DDTF-L5 TSTB (SP)+ BNE GGSD03 ;YES-DO NOT TEST FOR ODD VALUE BIT #1,-(R2) ;IS IT ODD BNE GGSD03 ;YES - IGNORE INCB TRAF-L5 ;NO - SET FLAG GGSD14: JMP GGSD03 ; ; SYMBOL DEFINITION ; GGSD09: MOV R4,R2 ;SAVE R4 BITB #UNDEF,FLAGS(R2) ;REF OR DEF? BEQ GGSD15 ;REF PTGLOB ;SEARCH FOR IT AND SET R4 BR GGSD16 ;NOT FOUND BITB #UNDEF,FLAGS(R4) ;FOUND, IS IT DEFINED BNE B: .D 0 NPUԠŠNKBK .AD50 NP .D AKSNŠSH: .AD50 DƯ :VҠҍ ..+6 .D 0 A̠SAŠAA̍ B: .D 0 BAYSNGNKBK .AD50 ̯ .D 3 ϠAD .AD50 KB ..+ .D 0 .D B: .D 00000 UPUԠBAYŠBK .D 0 .D B: .D 00000 NPUԠBAYŠBK .D 0 .D B: .D 00000 NPUԠŠŠ 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 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) ;RGGSD13 ;YES - ERROR SQUISH SUB #BPSYM,USYME-L5 GGSD16: MOV R2,R4 INPTRH BR GGSD14 ; ; MULTIPLY DEFINED SYMBOL--BROADCAST IT ; GGSD13: MOV R0,CONVER-L5 ;SAVE R0,R1 MOV R1,-(SP) MOV #MULMSA,R1 ;ADR OF ASCII CHARS MOV R4,R0 ;ADR OF MOD40# UNPACK MOV #MULMSB,R1 ;MODULE NAME MOV PTRG-L5,R0 UNPACK MOV (SP)+,R1 MOV #MULMSG,R0 TYPE MOV #1302,R0 ;CODE=W302 CLR -(SP) MOV R0,-(SP) IOT MOV CONVER-L5,R0 BR GGSD14 ; ; REFERBK .D 0 .D B: .D 00 BAYSNGŠBK .AD50 Sԯ .D 00 MBUH: .D 0000000 SɠKAA MBU: .D . MAؠNŠSZŽHAS .D 0. ..+. .D 0 .D 0 A̠SAŠAA̍ MB: .D 0 MMANDNKBK .AD50 Mɯ .D .AD50 KB .D 0 A̠SAŠAA̍ .D MB: .AD50 MD MMANDNPUԠŠBK .D 0000 SUB BEG,R2 MOV END,R4 SUB DOT,R4 TST MINUS ;DIRECTION? 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 ESET COUNT TO 1 JSR 5,O.SVTT ;SAVE TELETYPE STATUS, R4 IS SAFE MOV #'B,R0 JSR 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 ; ENCE TO A GLOBAL ; GGSD15: PTGLOB BR GGSD17 ;NOT THERE - INSERT IT. JMP GGSD03 ;IF THERE, IGNORE GGSD17: MOV R2,R4 INUSYM ;INSERT AS UNDEFINED SYMBOL BR GGSD14 .IFNDF NOSEG ENDO05: SIZO05=ENDO05-BEGO05 ; ;*****OVERLAY #6***** L6=BEGOVR-BEGO06 ;COMPUTE OFFSET FROM ;RUN TIME OVERLAY AREA BEGO06: ;JUMP TABLE TO ENTRY POINTS ;IN THIS OVERLAY. ; JMP START6 ;ENTRY1 .ENDC ; ; NBU: .D MAN0 NŠBUҍ BDAA: DAASASHō ..+MAN B: .D .0. ŠBUҍ .BY Ҭƍ .AS B- .BY SPAŬSPAō .AS V00A .BY Ҭƍ .VN BMSG: .D .D 0 .D .BY Ҭƍ .BY '3 .VN .D 0 A̠SAŠAA̍ MB: .D 0 MMANDSNKBK .AD50 Mů .D .AD50 KB .VN BSB: .D 0.00. SNGB; 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 ZD3: 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 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 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 LIBRARY SEARCHING ROUTINE ; ; INITIALIZATION ; ; ; REGISTER ASSIGNMENTS ; ; EVEN REGISTERS ARE ASSOCIATED WITH A LIBRARY DIRECTORY ; ODD REGISTERS ARE ASSOCIATED WITH A SYMBOL TABLE. ; R0 DIRECTORY POINTER ; R1 SYMBOL TABLE POINTER ; R2 SIZE OF DIRECTORY SEGMENT ; R3 SIZE OF SYMBOL TABLE ; R4 CURRENT DIRECTORY SYMBOL ; R5 CURRENT UNDEFINED FROM SYMBOL TABLE ; START6: MOV STBC-L6,R3 ;GET SYMTAB BC BEQ OUT5 ;NO UNDEFINED GLOBALS IN SYMT MOV R3,SVSTBC-L6 ;SAVE SUҍ .BY SPAŬSPAŬSPAŬSPAŬSPAō BSN: .BY 00000 BԠMDUŠNUMBҍ BSSP: .BY SPAŬSPAō BSNM: .D 000 BԠMDUŠNAMō BSM: .BY Ҭƍ .VN BSB: .D 6.06. SNGō .BY ҬƬҬƬҬƍ .BY SPAŬSPAŬSPAŬSPAŬSPAŬSPAō BSN: .D 000 .BY '.000 .BY ҬƬҬƍ .VN BSHB: .D .0. PƠPAGŠN̍ .BY ҬƬҬƬҬƬҬƍ .VN BN 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 EDIT WHOLE FLAG BR EHOLE1 ;DO A WHOLE EPOSITION: TST LKBKSI BEQ GEXIT1 MOV #LKBKSI,R 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,R4 ;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 YMTAB BC MOV FDATA-L6,R0 ;GET PTR TO 1ST DATA ITEM MOV BC-L6,R2 ;GET DIR BC ADD #2,R2 MOV SYME-L6,R1 ;SET UP SYMTAB PTR MOV (R0)+,R4 ;GET NEXT DIRECTORY SYMBOL MOV (R1)+,R5 ;GET NEXT UNDEFINED IN SYMBOL TABLE TSTB MONLIB-L6 BNE TSTEND COMP1: CMP R4,R5 ;COMPARE SYMTAB SYMBOL TO 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 : .D 0 ҠNUMBҍ BD: .D 0 ҠAA̠ɯϠS BSM: .D MBUH NAŠϠMMANDSMANS .D 00 BB: .D MAN0 ŠBUҍ BDA: SԠDAA ..+MAN .VN B: .D 303 : .D 000 : .BY '.000 .BY VAB .VN BMB: .D MAN0 MPAYBUҍ BMD: ..+MAN RIDEV ;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 ;YESY-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 COM MODE COM IN2 BEQ GET ; 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: 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 N#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 ; TSTB MONLIB-L6 BNE INCMC1 ADD #10,R2 ;INCREMENT DIRECTORY COUNT OUT1: BR OUT6 OUT5: JMP FINI INCMC1: ADD #16,R2 OUT6: BGE FINI ;FINISHED IF NO MORE SYMBOLS IN DIRECTORY ; ; DID NOT REACH THE END OF THE DIRECTORY ; TSTB MONLIB-L6 BNE INCE1 ADD #6,R0 ;POINT TO NEXT DIR ENTRY BR OUT .VN BKBU: .D 000 ҠBANKҠNύ .VN BPGND: .D 0 PAGŠNDN̍ .BY Ƭ3 BB: .AD50 Bʯ .AD50 MD .AD50 Sԯ .VN BHD: .D 00 SԠNŠƠABAY .D BGB000 .VN BA: .BY 0 àNDAҠ(UUŠUSũ BD: .BY 0 D̠NDAҍ BNMH: .BY 0 UPUԠBNAMŠHANGDNDҍ BPASS: .BY 0 PASSNDAҍ BD: .BY 0 NDD2 ;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 TOOT 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 BREAKPOINT INC R4 INC R4 CMP R4,#O.BKP BLE O.R1 ;RE-LOOP UNTIL DONE O.R2: RTS R5 2 INCE1: ADD #14,R0 OUT2: MOV (R0)+,R4 ;GET NEXT DIRECTORY SYMBOL ; RESTART UNDEFINEDS IN SYMBOL TABLE MOV SVSTBC-L6,R3 ;RESET SYMBOL TABLE 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 COMPYNDAҍ B: .BY 0 ƠNDAҍ NMG: .D 0 BNAM: .D 00 MPҠBʠMDNAMō GUN: .D 0 UNSGBASNHŠSAK .VN B00: SAԍ MV BҬ6 NAZŠSAKPNҍ MV BԬ-(6 MV -(6 SAD SԠSAԠADDSS BA ZϠA̠NDAS BNMH BDҍ B B NMG B B MV ̬5 (5+ LOOK ;PADR=ADR OF A CHAR IN PGB ;TADR=ADR OF A CHAR IN TIB GET2: MOVB #-1,@END ;PUT A -1 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 GE;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: R1 ;GO TO COMPARE FIRST UNDEFINED MATCH1: TST (SP) ;1ST PARTS MATCHED COMP2: MOV (R0)+,R4 ;PREPARE FOR 2ND MATCHING MOV (R1)+,R5 CMP R4,R5 BEQ MATCH2 ;2ND PARTS MATCHED? MISM2: BR TRYIN2 ;NO- MISM3: TST (SP) TRYIN2: ADD #12,R3 ;TRY INCR SYMTAB COUNT BNE INCT2 ;SYMTAB ENDED? TSTB MONLIB-L6 BNE INCM2 ADD #10,R2 ;YES-TRY INCR DIR COUNT BR OUT3 INCM2: ADD #16,R2 OUT3: BGE FINI ;DIR ENDED? TSTB MONLIB-L6 BNE INCE2 ADD #4,R (5+ NAZŠҠBUҍ (5+ (5+ 5 MVB '.؍ MV SPSPBD MVB '.BSN+6 MV MB-(6 Nԍ BND: MP BGD BGD: MV B̬-(6 PNԠUԠō MV MB-(6 ō ADD 0BND+ B05: MV BMSG-(6 MV MB-(6 ASKҠMMANDS ō MV MB-(6 A MV MB-(6 Nԍ MV MB-(6 PNMMXIT1 ;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 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 STOL (SP) ;GET 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 0 ;NO- GET NEXT DIR ENTRY BR OUT4 INCE2: ADD #12,R0 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 CMP -(R0),-(R0) ;RESTART DIR ENTRY TO 1ST PART MOV (R0)+,R4 ;OF SYMBOL PAIR BR COMP1 ;IN SYMBOL TABLE ; ; SYMBOLS MATCHED ; MATCH2: TSTB MONLIB-L6 BNE MONLT3 MOVB (R0)+,LBYTE-L6 BITB #10,LB ANDō MV MB-(6 PN MV MBUƬ-(6 ADMMAND MV MB-(6 AD MV MB-(6 Aō BB AҬMBU+3 ANYAA̠S? B B0 NϠ-BANH MV 00 SԠMMANDDō MV MBUƬ3 MP B PSSHŠҍ B0: MV MB-(6 SŠMMANDō Sō MV MB-(6 AS ASŠMMANDDVō MPB MBU+605 BG SYNSԍ MPB MBU+60 BG B05 SYNS: MV MBUH-(6 RING 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 GEXIT1 ;NO-ERROR 4 TST ENDFLG ;FILE CLOSED? BEQ NEXT1 ;NO JMP FORMF1 R0,(R1)+ MOV R0,(R1)+ MOV R0,(R1)+ MOV R0,(R1)+ MOV R0,(R1)+ MOV R0,(R1)+ MOV R0,(R1)+ MOV R0,(R1) RTS R5 ; .EOT ;END OF TAPE #3 YTE-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 MONLT3: BITB #1,(R1) BNE MONMAT BR MISM3 INTERM: TSTB -(R0) BR MISM3 MONMAT: MOV 6(R0),4(R1) CMP -(R1),-(R1) BR INCM2 MATCH3: MOV #1,DIRSRV-L6 BR FINI1 TSTEND: TST R4 BEQ FINI JMP COMP1 FINI: MOV #0,DIRSRV-L6 FINI1  SYNA HKSYNA؍ MV (6+5 B B0 BANHƠSYNAAYԍ N 5 MVB '?(5+ MVB Ҭ(5+ MVB Ƭ(5+ SUB MBU+65 MV 5MBU+ MV 0MBU+ MADASɠō MV MBUƬ-(6 MV MB-(6 ō MBU+ SŠMDō B B05 B0: MV MB-(6 ASō MV MBUH ASKҠUPUԍ MV BSM-(6 MV 6Ҳ S (Ҳ+ MV B(Ҳ+ MV BҲ S ;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 NX3A CMP RRIDEV,# ; TYPE ONLY ONE CHARACTER (CONTAINED IN R0) O.FTYP: TSTB O.TCSR BPL .-4 MOVB R0,O.: 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 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: SAVRE -(Ҳ GԠUPUԠBAY SMANS B SҬ(6+ ϠMANYSHS? B B NϠ-BANH MV 0 SԠUԠBDō MP BS PSSҍ B: MV B(Ҳ+ MV BҲ S -(Ҳ GԠSNGSMANS MV BSM-(6 SMANS B SҬ6 ϠMANYSHS? B B NϠ-BANH MV 60 SԠSNGDō MP BS PSSҍ B: S (6+ MŠUPU? BN B3 NϠ-BANH 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 ;SUTDB 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 ;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 CG MOV SP,SSP-L7 ;SAVE SP MOV SYMB-L7,R2 ;BEGINNING OF TABLE ; ; INITIALIZE MAP OUTPUT DEVICE ; MOV #MAPDEV,-(SP) ;.INIT THE DATA SET EMT INIT INCB MAPOPF-L7 ;INDICATE MAP OPEN TST MAPADR+4-L7 BNE .+10 MOV #0,MAPADR+4-L7 ;SET DEFAULT EXTENSION .=.-4 .RAD50 /MAP/ .=.+2 MOV #OPENO,MAPADR-2-L7 MOV #MAPADR,-(SP) MOV #MAPDEV,-(SP) EMT OPEN MOV #PMAP14,-(SP) ;SET UP ABORTING ADDRESS MOV #2,-(SP) EMT RSTRT MOV #PMAP86,R0 ;PRINT HMP B UPUŠҍ B3: MBUH ASKҠNPUԍ MV B(Ҳ+ MV BҲ S -(Ҳ GԠNPUԠBAY MV BSM-(6 SMANS B SҬ(6+ ϠMANYSHS? B B5 NϠ-BANH MV 0 SԠNPUԠBDō MP BS PSSҍ B5: MV B(Ҳ+ MV BҲ GԠSԠNPUԠō B6: MV BSM-(6 SMANS B SҬ6 ϠMANYSHS? B B NϠ-BANH 0 BROUTINE FORM-FEED ;ROUTINE TO OUTPUT A FORN FEED ;CHARACTER TO FILE. FORMF: MOV #LKBKPO,PWDEV TST ENDFLG ;OUTPUT FILE CLOSED? BNE FORMF1 ;YES MOV #FF,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 TSTHARACTER 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 WHEN DONE MOVB (R4)+,R0 ;GET A CHARACTER JSR 5,O.FTYP ;TYPE ONE CHARACTER BR O.TYPE ;LOOP UNTIL EAD MAPTYP ; MSG TRAM IS ALREDY FORMATTED MOV #TRAM,R0 MAPTYP 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 CMP R3,#PMAX BLE .+4 ERR14 ASL R3 JMP @SCMDT-BEGO07+BEGOVR(R3) ;DISPATCH ; ; TEST FOR & LIST UNDEFINES ; PMAP09: MOV SSYME-L7,R0 ;ANY UNDSԠNPUԠŠDō MP BS PSSҍ B: S B+6 ANYHNGH? B B0 NϠ-BANH S (6+ B B5 B0: S (6+ MŠϠM? B B6 YS-BANH B5: S PìBS HKNPUԠBҠSHS S B+6 UPUԠBҠSPD? BN B35 YS-BANH S B+6 B B6 0 MP BSM HNMUSԠHAVŠNϠNPUԍ B6: S B+6 SANNPUԠBҠH BN B B: MV  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 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 MODDONE ; ;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. RETURNS WITH THE EFINES? 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 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)+0 MP BSM NϠDANDASNG B: S ұ USԬSŠSMANàҍ BN B B30: S B+6 BN B3 MV 60 MP BSMҍ B3: MP BS GϠϠSNG B35: S B+6 ƠNϠNPUԠSHN BN B0 MUSԠHAVŠNPUԠBҠH S ұ DSŠSMANàҍ B B MP BDM GϠϠDŠBʠMDUS B0: S B+6 ƠNϠNPUԠBҬHN BN B5 GϠϠAŠBAY MP Bԍ B5: E 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 ;FILE CLOSED BNE FORREGISTER ;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 DI  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: MOV #LINK,-(SP) ;RESTART MOV #2,-(SP) EMT RSTRT RESREG ;RESTORE REGISTERS ; ; CLOSE MAP FILE ; TSTB PMAP11-L7 ;DO NOT CLOSE IF BNE PMAP15 ;LISTING UNDEFINES C!S ұ ƠDHNSMANàҍ BN B SŠGϠϠPAŠҍ MP B NSԠBԠMDUS BS: SHҠPSSҍ MV 03BNύ BS00: MV BDB(0Ҳ PNԠAԠDŠBK BS05: MV ̬Ҵ NVԠANDNSԍ S PìBNM ŠNAMō BS0: -(6 MV BNϬ-(6 B BS00 BDB: .D B .D B .D B .D B .D MB .D BKBUƍ B"MF1 ;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 #FFERENCE SUB 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 R$LRB MAPOPF-L7 ;CLEAR MAP DEV OPEN FLAG MOV #MAPDEV,-(SP) EMT CLOSE ; ; RELEASE MAP DATA SET ; MOV #MAPDEV,-(SP) EMT RELEAS 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 ; CNTRL-C RETURN SEEN D%: NPUԠBҠҠPSSҍ MV 6BN NSԠDō S PìNAM AҠHŠŠNAMŠBUҍ B BS0 B: AA̠ɯϠS MV 0BN NSԠDō MV BDB(0Ҳ MV ̬Ҵ S PìBNM NҠNAMNҠBUƍ -(6 MVB 3(36 MV BNϬ-(6 B BS00 B: MV 0BNύ S PìNAMҍ B BS0 B: NPUԠŠҠPSSҍ MV 3BN NSԠDō& BIT #EOMDET,POB+2 ;OUTPUT DEVICE FULL? 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 #37'0 ;RESTORE R0 TO ORIGINAL VALUE BR O.LOC2 ;GO FO 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 V(URING MAP ; ABORT IT. ; PMAP14: MOV SSP-L7,SP ;RESTORE SP BR PMAPX1 ;GET OUT ; ; OBJ-MOD NAME PMAP03: 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 MOV #15.,PMAP82+4-L7 ;SET BC PMAP07: MOVB #CR,(R1)+ ;PUT IN CR MOVB #LF,(R1)+ ; AND LF MOV #PMAP82,R0 ; MAPTYP ;PRINT EXTRA HEADING IF OBJ-MOD) 0 B BS00 BSM: SMANàҠPSSҍ MV 03BN NSԠDō B BS00 BS00: MV MB-(6 N NԠҠDVō MV BƬ-(6 SNDҠMSSAGō MV MB-(6 ō MV MB-(6 A ԍ B: Ҡԍ S B UPUԠBҠDVŠND? B B00 NϠ-BANH MV B-(6 UPUԠBAYPN? MV B-(6*7,(SP) SWAB (SP) MOV #2202,-(SP) IOT JMP REINIT ;;;;;;;;;;;;;;;;;;;;;ROUTINE TO MOVE CHARS TO OUTPUT 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 #LKBKTT,-(SP) EMT WRITCD MOV #LKBKTT,-(SP) EMT WAITCD RTS R5 +ALUE, 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) ;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 ALR,ULE CMP SCMDT-BEGO07+BEGOVR(R3),#PMAP03-BEGO07+BEGOVR BNE PMAP02 MOV #PMAP88,R0 MAPTYP BR PMAP02 ;GO FOR MORE ; ; PROG-SECTION NAME ; PMAP04: MOVB #LANG,(R1)+ ; MOV IN "<" MOV R2,R0 UNPACK ;MOD40 UNPACK MOVB #RANG,(R1)+ 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 MOV #24.,PMAP82+4-L7 ;SET PROPER BC B- DSH S (6+ B PN(6+ B B NϠ-BANH MV B-(6 S DŠUPUԠBҍ MV B-(6 ANDASŠDVō MV B-(6 Dō B: MV B-(6 ASō B00: S B NPUԠBҠDVŠND? B B05 NϠ-BANH MV B-(6 NPUԠBAYPN? MV B-(6 DSH S (6+ B PN(6+ B B NϠ-BANH MV B-(6 S SŠŠAND. ;SUBROUTINE INSRT ;THIS ROUTINE MOVES THE ;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: MOV #MODE,R4 ;GET ADR OF MODE ;THRUB ;TO HERE ;FROMA COM (R4)+ ;CHANGE MODE;IN1 BEQ IN2ND ;SECOND T/EADY 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: 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 RELA0R PMAP07 ; ; INTERNAL SYMBOLS AND TRA ARE ILLEGAL PMAP05: ERR07 ; ; ENTRY SYMBOL ; PMAP06: MOVB #TAB,(R1)+ ;INSERT TAB MOV R2,R0 UNPACK ;MOD40 UNPACK MOVB #TAB,(R1)+ MOV BASE(R2),R0 OTOA ;CONVERT ABSOLUTE VALUE TO ASCII MOV #16.,PMAP82+4-L7 ;SET BC BR PMAP07 ; .IFNDF NOSEG ENDO07: SIZO07=ENDO07-BEGO07 ; ;*****OVERLAY #8***** L8=BEGOVR-BEGO08 ;COMPUTE OFFSET FROM ;RUN TIME OVERLAY AREA BEGO08: ;JUMP TABLE TO ENTRY POINTS ;IN TH1 B: MV B-(6 ASŠDVō ASō B05: S B NPUԠŠDVŠND? B Bر0 NϠ-BANH MV B-(6 NPUԠŠPN? MV B-(6 DSH S (6+ B PN(6+ B B NϠBANH MV B-(6 SŠŠAND S ASŠDVō B: MV B-(6 ASō Bر0: S B SNGDVŠND? B Bر5 NϠ-BANH MV B-(6 SNGŠPN? MV B-(2IME 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 MOV #720,ERCDWD INCB ERFLG ;NOPE-SET UP ERROR FLAG RTS R5 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 DOT,SVDOT3TIVE 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 ;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.ROR4IS 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 #OBJMN,7(R1) ;IS THIS THE NAME? BEQ LINK43 ERR04 ;56 DSH S (6+ B PN(6+ B B NϠ-BANH MV B-(6 Sō MV B-(6 DŠŠAND MV B-(6 ASŠDVō Dō B: MV B-(6 ASō Bر5: S MB ҠDVŠND? B Bز0 N'ԠBŠNSAԍ MV MB-(6 ASō Bز0: MP B00 NAM: MV ̬Ҳ UNŠϠAҠŠNAMŠBUҍ ҠҠPNG (Ҳ+ (Ҳ+ (Ҳ+ 6 ;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,MOVEBUF7A 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 N 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) ; 8ERROR. 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,-1(R0) ;I9(Ҳ+ (Ҳ S PÍ DŠBԠMDUS BDM: S PìBN NAZŠNPUԠBҍ S PìBN NAZŠUPUԠBҍ BD00: MV B+0Ҵ BD05: MV Ҵ5 MŠSHSNNPUԠB? B BD5 NϠ-BANH AS 5 ADD 5Ҵ PNԠAԠSH MV Ҵ-(6 ADD 6 SAVŠPNҠϠNԠNō MP DMҴ SԠD? B BD5 YS-BANH BD0: MV (6+Ҵ B : ;MOVE BUFFER BACK RTS R5 ;RETURN ;;;;;;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,TMPS;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 IN 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) ; ; <NPUT ERROR? BNE LINK47 ;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. ; ; MODULES OUT OF ORDER ; LINK44: MOV #OBJDEV,-(SP) EMT STAT TST (SP)+ BPL LNK151 =BD05 YNԠNō BD5: AS 5 D 5 ANYVAUS? BN BD0 YS-BANH BD: MV 0 SԠNPUԠBAYDō MP BS SHҍ BD0: S PìBPKM PAKNAMŠƠBʠMD S PìBDM A̠DŠBԠMDUō D 5 MŠM'SϠD? BN BD0 YS-BANH B BD0 BD5: SB BPASS DNŠY? BN BD0 YS-BANH BD30: S PìBD NSHNGDY NB BPASS SԠPASSύ >TO 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)+ ;CLOSE 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 ;;;;;;;;SUBR?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" SUB #40,R3 ;"A-1" PACK02: SUB #16,R3 PACK03: SUB #11,R3 PACK04: SUB #11,R3 ; MULT R2 BY 40. ASL @ 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: MOV PTRG-L8,R0 MOV #ORDRER,R1 UNPACK MOV #ORDRM,R0 TYPE MOV #406,CODE-L8 ;CODE=A006 CLR -(SP) MOV CODE-L8,-(SP) IOT MOV #OBJDEV,-(SP) ;CLOSE & RELEASE INPUT MOV (SP),-(SP) EMT CLOSE EMT RELEASE BR START8 ;TRY AGAIN LNK03: A B BD00 BD0: SB Bƍ B BD5 B B AҠƠNDAҍ MP B GϠϠԠPSSҍ BD5: S PìBN NSHNGBʠMDUS B BD0 ASABAY B: S PìBN NAZŠUPUԠBAY B00: S B+0 ANYSHSNNPUԠ? B B0 NϠ-BANH 0 SԠNPUԠŠDō MP BSM SMANàҍ B0: S PìBNN NAZŠNPUBOUTINE 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? BHIS 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 CR2 ;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) ; ; OUTPUT: R1 POINTS ONE PAST LAST GENERATED CHARACTER ; DIOIG 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 ;GET NEXT NON-GSD BLOCK. MOV (R1)+,R2 ;GEԠō B03: SB BPASS PASSN? BN B05 NϠ-BANH S PìBD AŠDYNY B Ḇ0 B05: S PìBM AŠBʠMDUŠNY Ḇ0: S PìBN ADNԠNŠƠNPUԠō BB Ƭ3(3 ? BN Ḇ3 YS-BANH MP GSDBDA NPUԠŠҠƠSԍ B B03 NŠSNԠAGSDNō MP Bҍ Ḇ3: S PìBN GԠNԠNPUԠō S B+6 SHŠN? BN B00 YS-BAFMAX 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 -(SP) MOV #1306,-(SP) ;ERROR W306, EMPTY SAVE BUG ; ; 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 ;ADD 1 TO QUOTIENT BR HET 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 TALBE). ; LINK47: MOV PTRG-L8,R2 INH SB BPASS ASHSPASS? B Ḇ5 NϠ-BANH MP B GϠϠԠPSSҍ Ḇ5: NB BPASS SԠPASSύ MV BDA3 MV DҬ3 ŠHŠNDDҠNō MV -(3 MP -(3-(3 S PìBҍ S PìBS SԠNPUԠANDUPUԠPS S PìB GԠSԠNPUԠŠSMANS B B00 .ԍ JFFER UNEREX: IOT TST (SP)+ JMP BERR KUNPA02 ; 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 L ;GET PTRG 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 MOVB TAPES-L8,-(SP) BISB CONCAT-L8,(SP)+ BNE LINK75 ;IGNORE GENDF-L8 IF TAPES OR ;CONCAT IS ON. TST GENDF-L8 ;SEEN GSD END? BEQ LINK75 ;NO, STAY IN SAME FILE LIi NSSҠPASBԠMDUS B: S PìBN NAZŠNPUԠBҍ S PìBN NAZŠUPUԠBҍ B: MV 0 NAZŠPSNPNҍ B00: S PìBNN NAZŠNPUԠō B03: MV B+0Ҵ MVN ;;;;;;;;;;;;;;;;;;;;;;;;;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 SETTIONEXT WORD RTS PC ; ; COEFFICIENT 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 PNK53: TSTB LIBF-L8 BNE LNK06 IOIC ;CLOSE OBJECT MODULE FILE ;AND RELEASE ITS DATA SET ;IN SECOND PASS JMP LINK97-L8 ;YES, DO NEXT FILE LINK75: IOIG ;GET NEXT BLOCK JMP LINK76 ; AND PROCESS. ; ; TXT FOLLOWED BY TXT ; LINK50: MOVB #1,T-L8 ; ; UPDATE CURPC BY SIZE OF LAST TXT BLK ; ADD @2(SP),CURPC-L8 ;USES STACKED R0 FOR POINTER TO ;LAST TXT BLK BC. BR LINK54 ;GO OUTPUT LAST TXT BLK. ; ; TXT FOLLOWED BY RLD ; LINK4RNG 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? 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 ;YESS-TAKE ERROR MOV LAST,R3 ;BEGINNING OF SO.S: .BYTE 0 ;SINGLE INSTRUCTION FLAG ;0 IF NOT ACTIVE ;-1 IF ACTIVE ;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 T8: PRLD ;PROCESS RLD LINK51: CMPB #3,T-L8 ;ANY TXT TO OUTPUT? BEQ LINK55 ;NO ; ; OUTPUT TXT ; LINK54: MOV (SP),R3 ;PTR'S TO TXT DATA MOV 2(SP),R2 ;AND TO TXT BC MOV PUTR0-L8,R4 ;PTR'S TO OUTPUT BC MOV PUTR1-L8,R5 ;AND TO OUTPUT DATA. MOV -2(R3),(R5)+ ;GET LOAD ADDRESS ADD #2,(R4) ;UPDATE OUTPUT BC. LINK56: MOVB (R3)+,(R5)+ ;MOVE A DATA BYTE INC (R4) ;OUTPUT BC UPDATE. DEC (R2) ;DONE BGT LINK56 ;NO-DO ANOTHER. MOV R0,-(SPVSAVE 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: 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,-(SW O.SMFD: .BYTE 0 ;SEMICOLON FOUND SWITCH ;=0 NO SEMICOLON FOUND ;=1 SEMICOLON FOUND O.ALF1: .BYTE 0 O.ALF2: .BYTE 0 O.ALF3: .BYTE 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 V002A/ 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 .EVX) MOV R1,-(SP) IOOP ;OUTPUT THE BUFFER TSTB IOOPER-L8 ;OUT ERROR? BEQ .+6 JMP LINK25-L8 MOV R0,PUTR0-L8 ;SAVE R0,R1 MOV R1,PUTR1-L8 ;FOR NEXT OUTPUT MOV (SP)+,R1 MOV (SP)+,R0 LINK55: CMP (SP)+,(SP)+ ;REMOVE THE STACKED R0,R1 MOVB T-L8,R2 CMP R2,#TMAX ;INDEX OK? BLE .+4 ;YES ERR14 ASL R2 JMP @LINK57-BEGO08+BEGOVR(R2) LINK57: .WORD LINK45-BEGO08+BEGOVR .WORD LINK46-BEGO08+BEGOVR .WORD LINK47-BEGO08+BEGOVR .WORD LINK45 BASҠNKSSDDANGAS ASԯZP) ;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 INPUT? BNE R26 ;NO TST ENDFLG[EN 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 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 \-BEGO08+BEGOVR .IFNDF NOSEG ENDO08: SIZO08=ENDO08-BEGO08 ; ;*****OVERLAY #9***** L9=BEGOVR-BEGO09 ;COMPUTE OFFSET FROM ;RUN TIME OVERLAY AREA BEGO09: ;JUMP 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: 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 ND. NV.: ҍ Ҭ Y.B +6..: Bҍ . AS. 6.+. A: ů: S.A +6..: ҍ Ҭ Y.B -6- 0SA BY. 6--: Ż MNAŠ̠HŠAGSSMҠ ADA 0 B 0 SàADMAһ 0SA BY. ÍBAػM + N:MDU ƾҠ<ҠBUԠPUNYMMDU NV. A:MD ƍ BY. S.A :D ƍ BY. 6M-DA-MD 0ìAS Y.B -6MD-MAD M:Dҍ NV.: UNN M^ ;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 ;LOOP BEGINS HERE R20: JSR R5,RR1C ;GET A CHAR BIT #EOMDET,RIB+2 ;+++++++++++++++++++++++++++++++++++++++ BNE R23 ;++++++++++++++++++++++++++++++++++ CMPB _ .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 ;DO 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 ; ` 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-L9 ;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ƍ BY. 6.+. A:NUMN Ҭ Y.B -6NUMN-NUMN 0SA BY. 6U-NN-MUNNM: NUMN ōUNɠUԠNMNAŠUDM NV. :M Ҭ Y.B MŠUDMADϯ? S.A Ҭ Y.B -6M-M 0SA BY. 6-M-M: M ҍԠPUUԠDUMDA̻ NV. :SM Uƍ BY. 6.+. B:SM U S.A +6..: MAUS Ҭ Y.B -6SM-UMUS 0SA BY. 6M-US-SMU: SM U GSASMV̠BYMS NV. 9:PMA Pƍ BYbRCHAR,#RUBOUT ; DISCARD NULLS AND RUBOUTS BEQ R20 TST RCHAR BEQ R20 R21: MOVB RCHAR,(ADR)+ ;GET DATA BYTE INC END 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 RDc 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 ; R2 0 ; R3 0 ; R4 0 ; R5 O.USP: 0 ;USER SP O.UPd),-(SP) EMT CLOSE ; ; RELEASE TELETYPE DATA SET ; EMT RELEASE JMP LINK-L9 ;RESTART LINKER .IFNDF NOSEG ENDO09: SIZO09=ENDO09-BEGO09 .ENDC .ENDC .IFNDF NOSEG .EOT . ZS SSDDAY N NïS S.A -6APPM9-PMA+P 0SA BY. 6-PMA-P9APPM :PMA PNV. :PMA Pƍ BY. APMAD AS. ƍ BY. 66-PMA-PAPPM+ 0ìAS Y.B -66APPM-PMAP: 6APPM NV.: 5APPM Ҭ Y.B SNƠDNNDU S.A B6 -PMA-P5APPM D. 0ìAS Y.B AػM -6APPM5-PMAPD . :PMA PNV. 3:PMA PAAԻD .+.. ÍB 0D . USASůDM 0SA BY. ؍MA6 -PMA-P3APPM fOUT 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: INCB 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 >80 CHARS BgC: 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: . = .+O.BKP+4 O.UIN: . = .+O.BKP+4 h APŠ3 .Sԍ BGNNNGƠVAYAA HŠSZŠƠHŠVAYAASDMND BYHŠSYMB̠"VSZ" BGV: HŠBGNNNGGSSƠAH VAYNANMP'SϠHō NYPNSƠHŠVAY NY. NY.+ ND.: APPM NV.: APPM Ҭ Y.B GSASMUPU AS. ÍB -60APPM-PMAPD . USASůDM 0SA BY. ؍MA6 0-PMA-PAPPM D.: 0APPM PMAPҠSUƠBUPU NV.: SMMU Ҭ Y.B +6..: SAMMU AS. 6.+. B:MSU Mƍ BY. ÍB -6SGMMU-MSUM ōDM 0SA BY. ؍MA 6 G-MSU-MSMMU G:MSUM ..+. 0 0NB Y.B -6BU: BU ..+. 0 0NB Y.B -6jGT KR1C3 ;YUP DEC KIBBC ;DEC BC BGE KR1C2 ;ANY LEFT? ;NO--DO A READ KR1C1: MOV #KIB,-(SP) MOV #LKBKKB,-(SP) EMT READCD MOV #LKBKKB,-(SP) EMT WAITCD MOV #KIB+6,KIBPTR ;SET UP POINTER 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 .END O.ODT ;END OF TAPE #4 lY3.+0 NY.+ NY5.+0 NY6.+ NY.+30 NY.+3 NY9.+0 ..+VSZ VAYDVŠNKBK .D 0 ҠUNADDSS VB: .D 0 NKPNҠ(DDB .AD50 Vү GA̠DAASԠNAMō .BY DVŠSPD .BY 0 UNԠNUMBҍ .AD50 DƯ DVŠNAMō VAYDVŠŠBK .D 0 ҠUNADDSS .BY 3 HנPNŠ(PNé .BY 0 ҠUNDō VB: .AD50 Nm (Ҵ+5 ANYSHSNNPUԠ? BN B05 YS-BANH 0 SԠNPUԠŠDō MP BSM SMANàҍ B05: D 5 ANYVAUS? BN Bɱ0 YS-BANH MP PAŬҴ SԠ? B Bɱ5 YS-BANH MP NSԬҴ SԠ? BN B30 NϠ-SHҍ MV -Ҵ NϠVAUŠMANSNSԠAԠND B0: S PìBM A̠NSԠMDUō B Bɲ0 Bɱ0: S (Ҵ+ MP NSԬҴ SԠ:V? BNn: MOV #RIB,-(SP) MOV #0,-(SP) RRIDEV=.-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 #LKBKKB,-(SP) EMT READCD MOV #LKBKKB,-(SP) EMT WAITCD RTS R5 BUF1: 1 202 1 0 BU: AU 0: U ADA . 6+.. ÍB 0 ōDM 0NB BY. ؍MA 6 N-BN B:N ADA . 6+.. ÍB 0 ōDM 0NB BY. ؍MA 6 N-BN A:N 0: N -.DAD 0.+..: ADD DADҠNSADD DҠSANSA .-A 0.+..: KABҍ SSDDASANҠAŠAVSA NV.: MA ƍ BY. 6.+. :AMҍ :MHGH S.A Ҭ Y.B +6..: MBA ԯ:Mׯ S.A p NAMŠANDNSN .AD50 K NADؠ50 .AD50 Vү NAN USD: .D 0 USҠDDō .BY 33 PԠDō .BY 0 VAYDVŠNPUԠANBK VB: .D 0 DVŠBKNUMBҍ .D BGV MMYSAԠADDSS .D VD DUNԍ V: .D UNN(AD .D 0 NUMBҠƠDSNԠAN'D SUBUNŠϠDVDŠHŠPDƍ HŠSAKBYHŠNԠD.S HHŠUNԠNq B30 NϠ-SHҍ MV -(Ҵ-(6 MV -(6 NVԠDMA̠ASɠύ UY BNAYANDPAŠNҴ MV (6+Ҵ ƠZϬSԠҴ BN Bɱ3 N Ҵ Bɱ3: S (6+ B B0 Bɱ5: S PìBM A̠PAŠMDUS Bɲ0: MV BBƬ3 S PìBN ADNԠNPUԠNō BB Ƭ3(3 NDƠ? BN Bɲ3 YS-BANH MP GSDBDA NPUԠŠҠƠSԍ B B03 NŠSNԠAGSDNō r ;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 @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Ҭ Y.B +6..: MAA ԯ:SSDDASAN AS. ƍ BY. 6M-A-MA+ 0SA BY. 6M-A-MA+ M:A Ի NV.: AN Mƍ BY. '' AS. 6-N-MAN+M 0SA BY. S LFCR2PLFCR;< -6S2AS-P2ASSPA+: S2AS P; ENEV.: 1ASSPA LFR,CE YT.B 1/S AS/P IISC.A LFR,CE YT.B -6S1AS-P1ASSPA+ 0 C,ASFE YT.B F>RLRL LFCR1<-1NKLIF>RL ICHHI WRYNT EANR ;O ONTIEC SOFD ENR FOG INOKLOP OO LRTTA;S R4M,SYBP#D AD 1:T0NP I4 ,RRHPT OVM S TR PET;S R24,RV MO EGVRSA 0:T0NP I; MESY,UMESYS ERNTOI PTEDAUP ;Y TRENE THO TTSINPO4 R; LYALICETABPHALY TR=MSSNGNPUԠSP. NK39: SB NNM B NK0 NK5: B NNM NK0: MV ƬDUMN+6 MV DUMN+ MV DUMN0 YPō MV MDBUƬ-(SP MP NK NK39: MP (SP+ HKҠSHV׍ BS NK .ԍ ;6+ ANUPHŠSAK S PÍ BM: ASANBԠMDUō NPU:SԠNŠƠBԍ MDUŠNBBƍ UPU:ANBԠMDUō MV BDAұ MV BBƬ3 BM00: S PìB ŠUԠHSNō MP MDұ NDƠMDU? BN BM05 NϠ-BANH S PÍ BM05: S PìBN ADNԠNPUԠNō MP GSDұ B BM05 GNŠGSDNS.ŠHҍ B BM00 NSNUD UNTIL SWITCH 0 IS RAISED. ONLY SINGLE ;  INPUT EXPECTED FROM DECTAPE ; ; THE INPUT IS ASSUMED TO BE IN ABSOLUTE BINARY ;  FORMAT WITH A CON DIRECTORY ; OUTPUT IS THE INITIAL SYSTEM LOAD OF THE DISK ; ; READ ROUTINE -- JSR PC,IT.RDD: ; IT.RDD: JSR PC,IT.RDX ; READ LINE IN TST (R3)+  ; POINTS TO FILLED BUFF MOV (R3)+,-(SP) ; GET STATUS ASL @SP  ; CHECK FOR EOD BPL .+6 TST @R3  ; ANY DATA TO PROCESS? BEQ IT.RDE  ; IF NONE CHECK IF MORE TO COME BIT (SP)+ENE THT ERNSI; YMPS+BH)TR(PT ARYNT EANT ERNSI; ;C PS RT EGSRRE W?LORFVE OOLMBSY; F OVYMS + 4)(R+,2)(R OVM + 4)(R+,2)(R OVM + 4)(R+,2)(R OVM L BOYM SHE TINE OV;M )+R4,()+R2(V MO MESY,UYMPS#B DDA E YM,SYMPS#B DDA E YM SATE OL H AKEMA; H ISQUNSU: 01SYIN R4E,YMSV MO R24,RV MO EGVRSA 0:Y0NS I ; ;E YMUSD ANE YM SRSTEINPOT USDJA; Y.TRENE THO TTSINPO4 R. MESYT ARYNT EANT ERNSI; ;E YMNSI; ;C PS RT R0+,P)(S OVM ? OWFLEROV; F OVYMS 9TAPE 4 ; ; PROCESS PRESWITCHES ; ERR19 ;SWITCH OVERFLOW LNK142: CLRB TAPES CLR TAPCT CMP #63320,OBJDEV+6 BNE LINK92 INCB TAPES MOV #1,TAPCT LINK92: MOV #OBJDEV+8.,R1 ; PTR TO SWITCH SIZE LINK95: TST (R1) BEQ LINK90 ; DONE- NO MORE SWITCHES MOV #PRESW,R0 SWSR ; RET DISPATCH ADR IN R0 TST R0 ; IGNORE IF DON'T RECOGNIZE THE SWITCH. BEQ LINK93 ;ASSUME IT IS A POST SWITCNGNDGSD BS: ұ UNSDUNS MV B+0Ҵ S00: MV Ҵ5 MŠSHS? BN Sױ0 YS-BANH S05: S PÍ Sױ0: AS 5 ADD 5Ҵ PNԠAԠSH MP DBҴ D̠?? B Sײ0 YS-BANH MP DMҴ D?? B Sױ3 YS-BANH MV 0 SԠNPUԠBAYDō MP BS SHҍ Sױ3: N ұ NASŠUNҍ Sױ5: S (Ҵ+ PNԠAԠHAD,#77000 ; ANY OTHER ERRORS? BNE IT.ER2  ; IF SO GO TELL USER MOV (R3)+,R4 ; GET BYTE COUNT SUB #2,R4  ; IGNORE LOAD ADDRESS RTS PC  ; R4=0 IF TFR BLK ON EXIT ; ; SUBSIDIARY READ ROUTINE (MAY BE CALLED DIRECTLY): IT.RDX: MOV IT.INB,R3 ; SET POINTER TO EMPTY BUFFER MOV R3,-(SP) ; ... & REQUEST FILL MOV #IT.INL,-(SP) EMT 4 ADD #IT.IB2-IT.IB1,R3 ; OTHER BUFFER NOW FULL CMP R3,#IT.IB2 ; SO ADJUST POINTER TO IT BEQ .+6 MOV #IT.IB1,R3 MOV R3,IT.INB E YMUSM,SYBP#D AD )+R0,()+R4(V MO )+R0,()+R4(V MO )+R0,()+R4(V MO OLMBSYD NEFIDEUNE THN IVEMO;+ 0)(R+,4)(R OVM 0 ,RMESYUV MO R0K ACST;) SP-(0,RV MO 0:S0NU I; ;A RE AEDINEFND UTOINT ERNS ITOT HA WOFR AD4= R: UTNPI; ;D NEFIDEUNS ARTSEIN--YMUSIN ;; ITEX; C PS RT P)(S2,#D AD UEAL VCHET;F R4),R4E(ASBV MO NDOU FOT;N PC TSR L BALO GTOR TEINPOT GE; B LOTGP: 00GLSR ;; NDOU FOT;N BR ;B LORGSL ALC; ;E LUVA4= R: UTTPOU ;E AM NALOBGL5H. LINK94: JSR PC,(R0) ; GO PROCESS SWITCH LINK93: MOV (R1),-(SP) ; ADVANCE R1 TO NEXT SWITCH ASL (SP) ADD (SP)+,R1 ; R1=R1+2*N TST (R1)+ BR LINK95 LNK02: CLRB LIBF BR LINK98 LINK90:TSTB LIBF ;TEST LIB. FLAG BNE LNK02 TSTB PASS BEQ .+6 JMP LINK40 ;PASS 2 GGSD ;GET GSD LINK97: TSTB TAPES ; DOING TAPES ? BEQ LINK98 ; NO- DEC TAPCT ;YES- DECREMENT COUNTER BGT LINK90 ; IF >0 , DO ANOTHER TAPE CLRB TAPES NԠSH B S00 NNUō Sײ0: NB BD SԠDŠAG B Sױ5 BN: NPUԠBAYNAZҍ MV B-(6 N NAZŠDVŠAND MV B-(6 PNBAY MV B-(6 PN MV NBUƬ3 S PìBND GԠSԠDYNY MP BGBBDAA B B05 ƠSԠϠHADSAŠK B00: MP B ASSUMŠHSSAVAD B05: S PìBND BAYHSŠA; SAVE FOR LATER RTS PC  ; GO PROCESS ; END OF MEDIUM REACHED - CHECK FOR MORE: IT.RDE: MOV #IT.INL,@SP ; CLOSE INPUT FILE EMT 17 MOV #IT.INL,-(SP) ; ... & RELEASE IT EMT 7 HALT   ; WAIT CONTINUE BIT #1,@#177570 ; MORE TO COME? BEQ .+6 IT.NDG: JMP IT.END  ; IF NOT THAT'S IT! MOV #63320,IT.INL+6 ; OTHERWISE EXPECT MORE FROM PR MOV #IT.INL,-(SP) ; SO RE-INIT EMT 6 MOV #IT.INF,-(SP) ; .... & REOPEN MOV #IT.INL,-(SP) F ODR=AR4 T:PUIN ;; R4N IUEAL VRNTURED ANL BALO GOR FCHARSE--B-LORGS; ; C PS RT RNTURET USDJ AE.AM NCTSE; ) SP,(#2 DDA E AM NONTIEC S AOT;N 01TSGE NEB ) R41(S+AGFLN,CTSE#B MPC . MENAN IOCTSEA S IITT HA TRESUIN, NDOUF; D.UNFOT NO; C PS RT 1:S0ET GE AM NALOBGLD IN;F OBGLPT 0:S0ET G; NDOU FOT;N BR ;C SEETG: LLCA ;; RYNT EEROPPRO TTS PR4 T:PUUTO; E.AM NTOS PT4 R: UTNPI; ;. MENAN 1; ; PROCESS POST SWITCHES ; LINK98: CLRB CONCAT ;NO MORE CONCATENATION MOV #OBJDEV+8.,R1 ; ADR OF FIRST SWITCH LINK99: TST (R1) ; DONE WITH SWITCHES ? BEQ LINK70 ; YES- MOV #POSTSW,R0 SWSR TST R0 ; FIND IT ? BNE LINK71 ; YES- ; ; 2 ILLEGAL SWITCH!! ; ERR19 BR LINK79 LINK71: JSR PC,(R0) ; PROCESS THE SWITCH LINK79: MOV (R1),-(SP) ASL (SP) ADD (SP)+,R1 ;R1=R1+2*N TST (R1)+Gԍ MP GSDBDAA ASANNPUԠBAYҍ BN B00 S PÍ BN: UPUԠBAYNAZҍ MV B-(6 Nԍ S B B B0A MV B0BB- B0A: MV B-(6 MV B-(6 PN MV BHDҬ3 S PìBҍ B- S PÍ B0B: N NMG B- MPB B- BN B0A MV BB MV ұB+ MV MPB+ B B0A BNN:  EMT 16 JSR PC,IT.RDX ; REFILL EMPTY BUFFER BR IT.RDD  ; .... & ALSO THE OTHER ; INPUT ERRORS: IT.ER1: MOV #1,R0  ; NO BUFFERS! ..... HALT   ; - WHAT NEXT??? BR .-2 IT.ER2: MOV #2,R0  ; FOR DATA ERROR ... BR IT.ERH IT.ER3: MOV #3,R0  ; ... OPEN ERROR BR IT.ERH IT.ER4: MOV #4,R0  ; ... & NO COMD, IT.ERH: HALT   ; STOP TO TELL USER MOV #IT.INL,-(SP) ; SET UP TRY AGAIN EMT 17  ; RELEASE EVRYTHING MOV #IT.OUL,-(SPIOCTSEO TERNTOI PET-GC-SEETG; ;. INGA ARY;T 02GLPT BR RYNT EXTNEO TR0E NCVAAD;0 ,RYMPS#B DDA: 04GLPT --CHAT MNO ;C PS RT P)(S2,#D AD EGSRRE P)(S8.0,RV MO 04GLPT EQB . ESAM NLEDUMOJ OBT OUR TEIL;F) R01(S+AGFLN,JMOB#B MPC - --CHATM; H.TCMAO ;N 04GLPT NEB D OR WNDCOSEY TR;) R02(),R42( MPC . CHAT MNO; 4 L0TGPE BN RDWOT RSFIK ECCH;) R0,(4)(R MPC: 03GLPT PC TSR T XI E -ES;Y EGSRRE O-;N 03GLPT LOB G INCHARSEE ON;D MESY,UR0 MPC: 02- BR LINK99 ; DO NEXT SWITCH ; ; CHECK FOR END OF COMMAND STRING ; LINK70: TST SCSIRV ; CHECK RETURN VALUE FROM CSI2 BNE LINK72 ; END- JMP LINK84 ; NOT END- LINK72: INCB FLINE ; COUNT TO NEXT LINE TSTB PASS ; WHICH PASS? BNE LINK73 ; PASS 2- JMP LINK80 ; PASS 1- LINK73: SUB #BUF,CMDBUF MOV CMDBUF,-(SP) JMP LINK82 ; ; PROCESSING FOR PRESWITCHES ; ; DISPATCH TABLE  NPUԠŠNAZҍ MV B-(6 N NԠDVō MV B-(6 MV B-(6 PN PNNPUԠō MV BBƬ3 S PìBN ADSԠNō BB Ƭ3(3 SMHNG'SSHYƠƍ BN BN3 MP GSDBDA ҠƠSԠNŠS B BN5 NԠAGSDNō BN3: MP Bҍ BN5: S PÍ BN: ASSNPUԠŠAND GSN. B+60ƠNϠMō MV B-(6 S) EMT 17 MOV #IT.INL,-(SP) EMT 7 MOV #IT.OUL,-(SP) EMT 7 JMP IT.BGN  ; ... & START OVER ; GENERAL WRITE ROUTINE -- JSR PC,IT.WRT: ; EXPECTS BLOCK # ON STACK TOP & BUFF ADDR IN R2 IT.WRT: MOV #IT.OUL,-(SP) ; WAIT IN CASE BUSY EMT 1 MOV 2(SP),IT.OUB ; SET TRAN BLOCK ... MOV R2,IT.OUB+2 ; ... BLOCK & BUFF ADDR MOV #IT.OUB,-(SP) ; DO .TRAN MOV #IT.OUL,-(SP) EMT 10 MOV (SP)+,@SP ; HOUSEKEEP STACK RTS PC GLPT KSANBL6 F ILEDUMOJ OBT ENRRCUT ARTTA;S R0G,TRPV MO 1:L0TG P2 L0TGPR B H RCEA SOR FTSMILIT SE; 0 ,RMBSY OVM S YE; 1 L0TGPQ BE S?NKLA B 6OFE AS;C R0),R42( ISB L IAECSPE THS HI TIS; 0 ,R4)(R OVM G REAVS: 00GLPT NDOU;F BR ;D UNFOT NO; R B ; ;B LOTGPL ALC; ;. NDOU FIFY TRENO TERNTOI=PR4 T:PUUTO; MENAO TERNTOI=PR4 T:PUIN ;; T. ITOR TEINPOA N URET R &ALOBGLR FOH RCEA-S--OBGLPT ;; ) ; PRESW: .BYTE 'T,0 ;TOP +LINK68 .BYTE 'B,0 ;BOTTOM +LINK67 .BYTE 'L,0 ;LIBRARY +LINK06 .BYTE 'O,'D ;DDT +LINK65 .BYTE 'T,'R ;TRANSFER ADDRESS +LINK69 .BYTE 'T,'A ;TAPES +LINK58 .BYTE 'C,'C ;CONCATENATED FILE +LINK74 -1 ;END OF TABLE ; ;TOP ; LINK68: MOVB PASS,-(SP) BISB TOPF,(SP)+ BNE LNK01 ;GET OUT IF PASS 2 ONEVAL MOV 2(R1),-(SP) ;PUSH ADR OF OCTAL STRING MOV #OCTOBI,-(SP) EMT CONV INCB TOPF  SŠō MV B-(6 AS ASŠDVō B: MBUH USԠNPUԠMSɍ MV BBSM+ MV BBSM+ B0: MV BSM-(6 SMANS B SҬ6 ϠMANYSHS? B Ḇ NϠ-BANH 0 SԠNPUԠŠDō MP BS PSSSHҍ Ḇ: S B+6 ANYHNGH? BN B̲ YS-BANH S (6+ ANYMŠNPU? B B0 YS-BANH S PÍ B̲: ; CHECK IF LIBRARY BLOCK YET FULL -- JSR PC,IT.ITT: ; EXPECTS R2 TO SHOW LAST BYTE ACTIONED ; & R0 TO CONTAIN BLOCK NO. TO BE WRITTEN IT.ITT: MOV IT.OBF,-(SP) ; COMPUTE BUFFER END ADD #IT.OB2-IT.OB1,@SP CMP R2,(SP)+ ; POINTER THERE YET? BNE IT.RTN  ; IF NOT CARRY ON IT.ITZ: MOV @SP,-(SP) ; OTHERWISE SET STACK ... MOV R0,2(SP) ; ... AS FOR DIRECT CALL BELOW INC R0  ; GO TO NEXT BLOCK NO. ; ; OUTPUT BLOCK TO DISK FROM MAIN BUFFERS -- JSR PC,IT.WRZ: ; EXP PC TSR G REESR K ACSTO NT OR0T ENRRCUT PU;) SP.(,8R0 OVM ! D!UNFO ;Y TRENT EX NTOO G -NO; 4 O0RMSE BN K? ORDWOD ONEC;S 0)(R,24)(R2P CM RYNT EXTNEO TGO- O ;N 04MOSR NEB ? OKD OR WSTIR;F 0)(R),R4(P CM 3:O0RM S1 O0RMSR B E ONT EX NRY T -NO;0 ,RYMPS#B DDA: 04MOSR MESAS IMENAF IEE S -ES;Y 03MOSR EQB ? MENAE ULOD MBJ OANS HI TIS ;0)(R+1GSLA,FMNBJ#O PBCM 2:O0RM ST XI;E PC TSR S ESDRADN URET RSTJUAD; ) SP,(#2 DDA D UNFOT NO- S YE% MOV (SP),TOPMEM ;SET NEW TOP ASR (SP)+ BCC .+4 ERR19 LNK04: TST (SP)+ ;IGNORE PTR TO ASCII. LNK01:LNK11: MOV (R1),-(SP) ;FORM ADDRESS OF SWITCH ASL (SP) ADD R1,(SP) CLR @(SP)+ ;CLEAR THE SWITCH LINK02: RTS PC ; ; BOTTOM ; LINK67:MOVB PASS,-(SP) BISB TOPF,(SP)+ BNE LNK01 ;IGNORE IF PASS 2 OR TOP SET ONEVAL MOV 2(R1),-(SP) ;PTR TO STRING MOV #OCTOBI,-(SP) ;CONVERSION CODS (6+ PPNDAҍ S PÍ BS: SSNPUԠANDUPUԠŠPS MV MBUH-(6 SYNA SYNAؠSSHŠPNS S (6+ PPNDAҠD S P BNM: ҲPNSϠNAMō ҴPNSϠBUҍ MV 5 S (Ҳ ƠNϠNԬHNAҍ BN BN00 HŠ.MBUҍ B 6(Ҵ BN00: MV (Ҳ+-(6 MV Ҵ-(6 UNPAKNAMŠANDPAō MV -(6 NBUҍ UECTS BLOCK NO ON TOP OF STACK. ON EXIT ; NEXT BUFFER IS ZEROED READY FOR REFILL IT.WRZ: MOV IT.OBF,R2 ; GET BUFFER START MOV 2(SP),-(SP) ; SET BLOCK # FOR GEN WRT JSR PC,IT.WRT ; ... & CALL IT ADD #IT.OB2-IT.OB1,R2 ; OTHER BUFFER NOW USABLE CMP R2,#IT.OB2 ; SO SET PTR TO IT BEQ .+6 MOV #IT.OB1,R2 MOV R2,IT.OBF ; SAVE IT ADD #IT.OB2-IT.OB1,R2 ; BUMP TO END CLR -(R2)  ; ... & CLEAR IN REVERSE CMP R2,IT.OBF BNE .-6 MOV (SP)+,@SP ; CLEAR STACK IT.R; G REESR O ;N 02MOSR LOB E ON;D MESY0,RP CM 1:O0RM SE BLTAF ORTTA STOR TEINPOT GE; 0 ,RMBSY OVM G REAVS: 00MOSR ;D UNFOT NO; R B ; NDOU;F BR ;N ODRMS: LLCA ;; NDOU FIFE AM NHE TTOS NTOI PR4: UTTPOU ;E AM N4OOD MTOS NTOI PR4 T:PUIN ;; E.AM NLEDUMOA R FOH RCEA-S--DNMOSR ;; K.;O PC TSR: 01MOSY !!IE;D 01RRE 1 O0YMSO BL )+SP,(MESYUP CM P)(SM,SYBP#B SU P)(S,-DMEN OVM: 00MOSY ;K ECCHW LORFVE OLEAB TOLMBSY--F-OVYMS; ; C !E (OCTAL) EMT CONV INCB BOTF ;SET FLAG AND MOV (SP),BOTMEM ; VALUE ASR (SP)+ BCC .+4 ERR19 JMP LINK04 ;RETURN INBLN=INB-INA ; ; LIBRARY ; LINK06: INCB FREADF ;THIS IS THE 1ST READ INCB LIBF ;SET LIB FLAG MOV R1,SWSIZE ;SAVE PTR TO SW SIZE NOVAL MOV (SP),SPRETV ;SAVE STACK RET VALUE TSTB PASS BEQ LNK129 MOV #OBJDEV,-(SP) ;1-INIT OBJ MOD DATA SET EMT INIT TST OBJADR+4 BNE .+10 MOV #0,OBJADR+4 ;SET DEFAULT EXTY D 5 B BN0 B BN5 BN05: ADD 3Ҵ B BN00 BN0: N Ҵ B BN05 BN5: S PÍ BPKM: PAKSMNAMō MV -(Ҵ-(6 PNҠϠNAMŠAԠ-(Ҵ -(6 UY MV (6+BNAM -(6 PUԠNBNAMBNAM+ UY MV (6+BNAM+ S (6+ PPUPDADADDSS S PÍ BD: NSHSNGDY MV NBUƬ3 BD00: SB BD NDDҠNNBU? BN BTN: RTS PC  ; GO REFILL ; MAIN CONTROL ROUTINE: IT.BGN: MOV #IT.RDD,SP ; INITIALIZE STACK MOV #401,@#440 ; LOG-IN AS SYSTEM MOV #IT.BOT,#0 ; SET BUFFER POINTERS IT.OBF=.-2   ; (1ST OUTPUT IS BOOT!!) MOV #IT.IB1,#0 ; INPUT BUFFER ... IT.INB=.-2 MOV #IT.CB1,#0 ; ... & DIRECTORY BUFFER IT.CBA=.-2 MOV #16040,IT.INL+6 ; ASSUME DECTAPE LOAD INITIALLY HALT   ; ALLOW USER TO CHOOSE BIT #1,@#177570 ; ... BY SWITCH SETTING BNE IT.GO MPS RT E.ACPLT ENRRCUD AD;4 ,RETFSOF DDA K OCBLO TRYNT EATC PET;G R4C,RPCU OVM: 00TPGE ;K OCBLT TXN ICELA PNTREUR COR FPCT GE ;C TPGEE INUTROUBS; ; N URET;R PC TSR N OW DSSREDD ARNTUREE OV;M P)(S+,P)(S OVM : 02TPTX R!ROERC LOREE YT B; 8 R0ER K.;O 02TPTX EQB 4 RB WAS D OR;W 02TPTX PLB ? RDWOR OTEBY; ) SP2( STT E YT BINT PU;+ 3)(R4,RB OVM: 01TPTX E.YT BNDCOSER FOE AREPPR; 4 RB WAS E YT BSTIR FINT PU;+ 3)(R4,RB OVM . NDMAOM CTEBYF I .=.-4 .RAD50 /OBJ/ .=.+2 MOV #OPENI,OBJADR-2 ;OPEN OBJ MOD DATA SET MOV #OBJADR,-(SP) MOV #OBJDEV,-(SP) EMT OPEN BR LINK07 LNK129: MOVTAB MOV #INA,IN MOV #INA,-(SP) ;DO A PREREAD MOV #OBJDEV,-(SP) EMT READ MOV #OBJDEV,-(SP) EMT WAIT LINK41: TSTB FREADF ;LOOP,1ST READ COMMING? BEQ LINK96 ;NO- CLRB FREADF ;CLEAR 1ST READ FLAG LINK23: MOV IN,-(SP) ADD #INBLN,(SP) CMP (SP)+,#INB BLOS LNK109 LNK105: MOV #INA,-(SP) D05 YS-BANH S PìBN ŠHSNY B BD00 BD05: S PìB ŠHŠNDDҠNō B BD AҠHŠAG S PìBND UNHSԠBʍ S P MDUŠNŠNNBUƍ BND: MV 3-(6 3PNSϠNŠBUҍ MV B-(6 AD ADNԠNŠM MV B-(6 NPUԠBAY Aō BB AҬ3(3 ANYAA̠S? B B00 NϠ-BANH MV 0 SԠNPUԠBAOV #63320,IT.INL+6 ; ADJUST IF PAPER TAPE IT.GO: MOV #IT.INL,-(SP) ; INIT INPUT EMT 6 MOV #IT.OUL,-(SP) ; INIT OUTPUT EMT 6 MOV #IT.INF,-(SP) ; OPEN INPUT FILE MOV #IT.INL,-(SP) EMT 16 JSR PC,IT.RDX ; FILL FIRST BUFFER READY TST @#177570 ; CHECK IF DISK CLEAR REQD. BMI IT.DTC MOV #IT.OB1,IT.OBF ; IF NOT, RESET OUTBUFF PTR JMP IT.LBD  ; ... & GO BUILD LIBRARY ONLY ; DETERMINE DISK SIZE: IT.DTC: CLR R5  ; SET PLATTER COUGO; 1 P0XTTI BM NDMAOM CRDWOR OTEBY; ) SP2( STT: 00TPTX SPK,ACSTE THM ROF ; RDWO1 S VEMOREE INUTROS HIT ; ;D KEACSTS INDMAOM CLD RHET; CKLO BXT TTOINO NF IUTP; ;T PUXT TNETIOUBRSU ;; ^00.;4 1.+ 1 .^40; . 40+ 2 .^40; . 0016+: FFOE C; LEAB TNTIEICFFOEC; ;C PS RT EGSRRE P)(S,2R1 OVM K ACSTE THO NT OR1T ENRRCUT PU--NEDO ;O ;N 07PAUN LTB S RDWO2 E ON;D R4 NCI D OR WXTNEO TVEMO; + 0)(R STT D AN0 RALINIGORE ORSTRE;  MOV #OBJDEV,-(SP) EMT READ MOV #INA,IN BR LINK96 LNK109: MOV #INB,-(SP) MOV #OBJDEV,-(SP) EMT READ MOV #INB,IN LINK96: MOV #OBJDEV,-(SP) EMT WAIT ;WAIT ON READ FROM GGSD & UP MOV IN,R0 CMP (R0)+,(R0)+ ;IGNORE FORM. BIN. CODE READER MOV (R0)+,BC ;GET BYTE COUNT NEG BC ;GET -BC CMP #10,(R0) ;DIR ENDED? BEQ LINK26 ;YES-GET OUT CMP #1,(R0) ;GSD BLOCK? BNE LINK23 ;NO- ADD #7,R0 ;YES-OBJ MOD NAME BLOCK? MOVB YDō MP Bҍ B00: S PÍ B: MV 3-(6 3PNSϠNŠBUҍ MV B-(6 ŠNԠNŠύ MV B-(6 UPUԠBAY Aō BB AҬ3(3 ANYAA̠S? B B00 NϠ-BANH MV 0 SԠUPUԠBAYDō MP Bҍ B00: S PÍ BN: MV 3-(6 3PNSϠNŠBUҍ MV B-(6 AD ADNԠNŠM MV B-(6 NPUԠō Aō BB ANT MOV #IT.CSR,R4 ; SET PTR TO DISK CONTROL MOV #400,@R4 ; ENSURE DISK CLEAR MOV #IT.CSR+10,R3 ; SET PTR TO PLATTER STORE IT.DTL: CMP (R5)+,(R5)+ ; STEP TO NEXT PLATTER MOV R5,@R3  ; TRY ADDRESS IT BIT #4000,@R4 ; SUCCESSFUL ? BEQ IT.DTL  ; NO, KEEP LOOKING SWAB R5  ; CONVERT PLATTER TO BLOCKS ASL R5  ; (SCALE 4:- 10000) ASL R5 MOV R5,R3  ; ... & SAVE FOR LATER IT.CSR=177460 ; WRITE OUT BOOT & CLEAR REST OF DISK SURFACE: CLR R1  ; SET BLOCK0 ,RP)(S OVM E OR MDOO-;N 06PAUN LTB ? RSHA C 3NEDO; 5 RC IN F.EFCOT EX NTOE NCVAAD; + 2)(R STT R TEACARCHE ORST;+ 1)(R3,RB OVM 3 ,R11#D AD 5:A0NP U3 ,R11#D AD 4:A0NP U3 ,R16#D AD 3:A0NP U" -Z"A; 3 ,R40#D AD 9"0- "OR" ".; 4 A0NPUT BG $";" 05PAUN EQB 3 #33,RB MPC " NKLA"B; 3 A0NPUQ BE R3 TBTS 1:A0NP U R TEACARCHI CIASN ATOT ERNVCO ;0 RINR DEINMARE, R3N IOTQU E.ON DDEVIDI ;2 A0NPUR B T ENTIUO QTO1 D AD; 3 RC IN F.EFCOT ACTRUB-SNO;(R0)+,HBYTE CMPB HBYTE,#0 BNE LNK100 ;NO- MOV -6(R0),FNAME ;YES-SAVE CURRENT OBJ MOD. NAME MOV -4(R0),SNAME ;IN DIRECTORY MOV IN,INSAVE INCB FBBF ;MARK THIS BLOCK AS 1ST READ LNK100: TST (R0)+ ; ADD #10,BC ;PREP BC MOV R0,FDATA ;SAVE PTR TO 1ST DATA MOV USYME,-(SP) MOV SYME,-(SP) SUB (SP)+,(SP) ;SAVE SYMTAB BC MOV (SP)+,STBC NEG STBC DIRSR TST DIRSRV ;RET VAL: 0=FAIL,1=SUCCEED BEQ LNK101 ;FAILED-GO TO READ NEXT BLOCK Ҭ3(3 ANYAA̠S? B BN00 NϠ-BANH 0 SԠNPUԠŠDō MP Bҍ BN00: S PÍ BS: MV 3-(6 3PNSϠNŠBUҍ MV B-(6 ŠHSNō MV B-(6 Aō BB AҬ3(3 ANYAA̠S? B BS0 NϠ-BANH MV 60 SԠSNGŠDō MP Bҍ BS0: S PÍ .ND B00  COUNTER IT.CDF: MOV R1,-(SP) ; CLEAR OUT DISK JSR PC,IT.WRZ CMPB (R1)+,(R1)+ ; (ALTERNATE BLOCKS!) CMP R1,R5 BLT IT.CDF BGT .+10  ; DONE TWO PASSES? MOV #1,R1  ; IF NOT DO 2ND NOW BR IT.CDF ; PREPARE SET UP PERMANENT BIT MAPS: CLR R4  ; CALCULATE NO. BM REQD INC R4  ; RESULT IN R4 SUB #960.,R5 BCC .-6 ADD #960.,R5 ; REMAINDER IN R5 ASR R5  ; REDUCE TO BM BYTES ASR R5 ASR R5 SUB R4,R3  ; START BM BLOCK MOV R3,R0  ; AG 0 ,R2)(R UBS S YE; 1 A0NPUO BL DEVIDIH IT WNEDO;) R2,(R0 MPC: 02PAUN TSENCIFIEFCOY BDEVIDI ;T ENTIUO Q;0 R3 LRC: 06PAUN LEAB TNTIEICFFOE CTOR PT;2 ,RFFOE#C OVM D OR W40OD MET;G R0),R0(V MO NTOU COPLOR NOMI; 5 ,R-3#V MO 7:A0NP UT UNCOP OO LORAJ;M R42,#- OVM G REAVS: 00PAUN ;. TC EC2T GEO T50Y BEDIDIV DISR DEINMAREE TH ;3 +C502* CISR DEINMAREE THD AN1 CIS2 0^/5 NS,HUT; C30+*5C22+0^*5C1N= ;N HE TR,BEUM N40OD MHE TISN F I; ;; ERCTRAHA CEDATER BR LNK102 ;SUCCEEDED LINK07: JMP LNK117 LINK26: JMP LNK110 LNK101: TSTB FBBF BEQ LNK108 CLRB FBBF INCB SBBF MOV #2,CNT BR LINK23 LNK108: TSTB SBBF BEQ LINK23 CLRB SBBF BR LINK23 LNK102: TSTB FBBF ;IS 1ST BB FLAG STILL ON? BNE LNK103 ;YES-GO GET GGSD,"IN" OK TSTB SBBF BNE LNK106 BR LNK107 LNK106: MOV IN,-(SP) MOV INSAVE,IN MOV (SP)+,INSAVE BR LNK103 LNK107: IOIC ;NO-CLOSE,RELEASE INPUT MOV #OBJDEV,-(SP) ;IAIN SAVE FOR LATER ; DO ALL MAPS BUT LAST: MOV #44,R1  ; SET MAP #1 TO SHOW ... COM (R2)+  ; 20K OCCUPIED FOR DEC R1  ; MONITOR BNE .-4 MOV IT.OBF,R2 ; OTHERWISE AS REST IT.BMG: MOV R3,-(SP) ; SAVE BLOCK NO. FOR WRITE INC R3  ; STEP FOR LINK INC R1  ; SET MAP NO. MOV R3,(R2)+ ; STORE BOTH AT MAP START MOV R1,(R2)+ MOV #60.,(R2)+ ; FOLLOWED BY MAP SIZE MOV R0,@R2 ; ... & 1ST MAP NO. DEC R4  ; AT LAST MAP? BEQEN GSTLAT AS PNE OTSINPO1 R: UTTPOU ;; S)TEBY6 (NGRISTI CIASF ODR=AR1 ;) DSOR W(2R BEUM N40OD MOFR AD0=R: UTNPI; ;K ACNP U40ODM; ; T XI;E PC TSR G REESR 1 RNTREUR CCKTA;S P)(S,2R1 OVM O ;N 01CKPA LTB S RDWO2 E ON;D R5 NCI D OR W40OD MRETO-SES;Y )+R0,(R2 OVM O ;N 05CKPA LTB ? RSHA C 3NEDO; 4 RC IN R23,RD AD ERCTRAHA CNTREUR CDELUNCI; R2.*40;2 ,R)+SP(D AD R2.*32; 2 RL AS R2.*16; 2 RL AS R28*K ACST;) SP-(2,RV MO R28*; NIT,OPEN INPUT EMT INIT TST OBJADR+4 BNE .+10 MOV #0,OBJADR+4 .=.-4 .RAD50 /OBJ/ .=.+2 MOV #OPENI,OBJADR-2 MOV #OBJADR,-(SP) MOV #OBJDEV,-(SP) EMT OPEN LNK104: MOV #INA,-(SP) MOV #OBJDEV,-(SP) EMT READ ;READ MOV #OBJDEV,-(SP) EMT WAIT ;WAIT ON IT MOV #INA,IN MOV IN,R0 CMP (R0)+,(R0)+ ;IGNORE 1ST 2 WORDS OF HEADER READER MOV (R0)+,BC NEG BC ;GET BC CMP #1,(R0)+ ;GSD BLOCK? BNE LNK104 ;NO-HADE TO BE GSD OV M 3:LEIT TX LEIT T R B OLMBSYR FO ; 02-OORRRQE B NC I KSECCHD AN ; E3TLTI T BG M TE ISTIR FHE;T 2 O0E-YPIT TBTS M TE I P RA T TSGE ; 02-OTEBYUR C C DE T AR PISTH ; S ABBT C P RA T E:TLTI RR LENDHAE IVCTREDIE TLTI ; L2OBGL BR ST UING LA FALOBGLT SE;1 @RG,FLLB#G SBBI 5:BLLO G2 O0E-N1AIMP JM NO;3 ,RPETY#I OVM S YE; 2 BLLOGQ BE R,TONAMIER TAS;W ? IT.BMD JSR PC,IT.WRZ ; IF NOT WRITE OUT BR IT.BMG ; NOW DO LAST MAP: IT.BMD: CLR -6(R2)  ; SCRUB LAST LINK MOV #100000,R4 ; SET MASK ADD R5,R2  ; GET TRUE MAP END MOV R2,R1 ASR R5 SUB #60.,R5  ; ... & SET UNUSED WORD CNT MOV R3,-(SP) ; SET BLOCK POINTER IT.BML: DEC @SP  ; DROP IT BIS R4,@R1  ; MARK IT IN MAP ASR R4  ; ADJUST MASK BCC .+6  ; ACROSS WORDS IF NEC. ROR R4 TST -(R1) CMP @SP,R0  ; BACK AT 1ST MAP BLOCK? BGE 2 RL AS R24*; 2 RL AS R22*; 2 RL AS 0. 4BY2 RLTMU ;3 ,R11#B SU 4:K0AC P3 ,R11#B SU 3:K0AC P3 ,R16#B SU 2:K0AC P" -Z"A; 3 ,R40#B SU 9"0- "OR" ".; 3 K0ACPO BL 'A,#R3 PBCM $";" 04CKPA EQB 3 ,R'$#B MPC " NKLA"B; 2 K0ACPQ BE R3 ,#' PBCM R.HA CIISC AXTNET GE;3 ,R)+R1(B OVM: 05CKPA UM S;0 R2 LRC . CTP OO LORIN;M R43,#- OVM: 01CKPA T. COPLOR JOMA; 5 ,R-2#V MO EGVRSA 0:K0AC P3 +C402*+C^2401*=CN ; ASD MEOR FISD OR W40OD MCHEA  END CMP (R0)+,FNAME ;YES-1ST PART OF SYMBOL MATCH? BNE LNK104 ;NO- CMP (R0)+,SNAME ;YES-2ND PART OF SYM MATCH? BNE LNK104 ;NO- TSTB (R0)+ ;YES MOVB (R0)+,HBYTE ;WAS SYMBOL OBJ MOD NAME? CMPB HBYTE,#0 BNE LNK104 ;NO- LNK103: GGSD ;YES-GO GET GGSD "IN" OK JMP LINK96 ;GO TO WAIT ON LAST READ LNK110: IOIC ;CLOSE & RELEASE OBJ DEV MOV SWSIZE,R1 ;SAVE PTR TO LIB SW SIZE MOV (R1),-(SP) ;FORM ADDRESS OF SWITCH ASL (SP) ADD R1,(02-ORMTEAV,S-3#B MPC D NEFIDEY PLTIUL MET;S 1)(R,1AGFLMD#B ISB 2 O0R-ROERRB NCI O ;N L5OBGL EQB . PREX. EG R AOLMBSYS ;I 02-OGSLATFG,FLEG#R TBBI RYNT EOFS ESDRAD;1 ,R02-OEXNDHI OVM: L6OBGL ST UIND UNFO; 2 BLLOGR B T USO NT IERNT;E ERNTEP RAT G LA FALOBGLT SE;2 O0S-AGFL,TLGBFGL#B ISB T USN ;I L6OBGL EQB T EAEP RENTHT PSF ;I L7OBGL GTB E BLTAL BOYM SCHARSE; H RCEASP RAT: L4OBGL G.LA FEDINEFED ROLMBSYT ENANRMPET SE;2 O0X-DEIN@HF,DERE#B ISB: L7OBGL IT.BML  ; ALLOWING FOR MFD #2 CMP (R2)+,(SP)+ COM (R2)+  ; FILL UNUSED MAP SECTION INC R5 BNE .-4 JSR PC,IT.WRZ ; ... & WRITE OUT ; BUILD MFD BLOCK #1: MOV R0,@R2  ; SET LINK TO MFD #2 DEC @R2 MOV (R2)+,-(SP) ; SAVE FOR LATER MOV #5,(R2)+ ; INTERLEAVE FACTOR MOV R0,(R2)+ ; SET 1ST MAP NO. MOV R0,(R2)+ ; FOLLOWED BY LIST INC R0 CMP R0,R3 BNE .-6 MOV #1,-(SP) JSR PC,IT.WRZ ; BUILD MFD BLOCK #2: CLR (R2 ;G INTR SIISC AOFD ENT AS PNE OTSINPO1 R: UTTPOU ;; S)ARCH6 (RSTEACARCHI CIASF ODR=AR1 ;) DSOR W(2S RDWO0 D4MOF ODR=AR0 T:PUIN ;; CKPA0 D4MO ;; C ND.E T6ARST MPJ G SENO DFIF. C ND.E Y1TREN MPJ 6 #AYRLVE;O 6D OR.W RLNTCO EGOSNF NDIF.: 00RSDI NETIOU RCHARSEY ARBRLIT ENIDESR; ;T XI E &..;. PC TSR K ACSTP UANLE-CES;Y )+SP(T TS 01OAOT CCB ? TSGIDI6 E ON;D SP@L AS SP) CLR @(SP)+ ;CLEAR THE SWITCH MOV SPRETV,(SP) ;RESTORE STACK RET VALUE RTS PC LNK117: TSTB FREADF ;1ST READ? BEQ LNK10 ;NO- CLRB FREADF ;YES- LNK08: MOV #INA,IN MOV #INA,-(SP) MOV #OBJDEV,-(SP) EMT READ MOV #OBJDEV,-(SP) EMT WAIT MOV IN,R0 CMP (R0)+,(R0)+ READER TST (R0)+ CMP #10,(R0) BNE LNK08 LNK09: MOV #INA,-(SP) ;BUF A STARTS W 1ST OMN MOV #OBJDEV,-(SP) ;OF LIBR CONTENT EMT READ MOV #INA,IN LNK10: 02-O1EINMA MP J H NCRA BENTH, S WA ; L2OBGL Q BE R TONAMIER TSTLAF ;I 02-ORMTEAV,S-3 # PBCM G LA FSEEL ; 2 O0R-ROER Q B NC I OLMBSYF ICHANBRE TH ; L4OBGL GT B ALEG LAS WEMITF ;I 2 O0E-YPIT B ST T A:BLLO GT ORAB ; 02-OITEX MP J X:BLLO G H NCRA BENTHS YE ; A BLLO G GT B NDOU FRSTEACARCHY AN;; 2 O0R-HATCCN B ST T OLMBSYT EX NHE TTSGE ; EMIT P RA T LXOBGL Q BE N LOCOI EM;S R05,#- B MP C LXOB)+  ; ZERO LINK MOV #401,(R2)+ ; MONITOR UIC = 1,1 MOV #2,(R2)+ ; START OF MONITOR UFD MOV #9.,(R2)+ ; NO. OF ENTRIES/UFD CLR (R2)+ MOV #100200,(R2)+ ; UIC FOR GENERAL USE CLR (R2)+ MOV #9.,(R2)+ JSR PC,IT.WRZ ; WRITE OUT ; BUILD SYSTEM FILE DIRECTORY ON BLOCK #2: MOV #3,(R2)+ ; NEXT UFD BLOCK MOV #51646,(R2)+ ; PACKED MON MOV #46152,(R2)+ ; LIB TST (R2)+  ; NO EXT MOV #100000,(R2)+ ; CONTIGUOUS FILE CLR (R2)+ SP,@23#B OVM R FEUF BINR HA CRETO SSOF ;I )+R1,(SP@B OVM ? ND EERTH OATT OUR KEAR;M 01OAOT CCB T GIDII CIASO NT IVEMO& ..;. SP@B OLR . ..ERMBNUM RO FIT BET;G R0 SLA: 01OAOT TSBIG DIT 1S& T CNP LET;S P)(S,-3022#V MO 0:A0TO O; ANLE CCKTA SOFP TO ;D REEACLR TEISEG RERMBNU ;E YT BXTNET ATR PR,FEUF BINN IORSVEON C : ITEXN O; G.RED 3RN HA TERTHRAP TOK ACST 3) ;) R1 (ET STR PD.EQ RGERATO SERFFBU 2) ;) R0Y(TRENN OERSTGIREN IERMBNU 1) ESUMSSA; N)MOV #OBJDEV,-(SP) EMT WAIT MOV IN,R0 ADD #3,R0 MOVB (R0)+,HBYTE BITB #100,HBYTE ;EOF OF LIBR SEEN? BNE LNK110 BITB #EOF,HBYTE BEQ .+4 ERR15 TST (R0)+ CMP #1,(R0) ;GSD? BNE LNK09 ;NO- MOV PTRG,R1 ;YES- TST (R0)+ ;ADVANCE PTR IN READIN BUFF CMP (R0)+,(R1)+ ;1ST MATCH? BNE LNK09 ;NO- CMP (R0)+,(R1)+ ;YES-2ND MATCH ALSO? BNE LNK09 ;NO- TSTB (R0)+ MOVB (R0)+,HBYTE CMPB HBYTE,#0 BNE LNK09 ;LIB ENTRY NGL Q BE N URET RGEIARRCA;0 ,R-4 # PBCM 0 ,R02-ORMTEAV S VBMO : L2OBGL 02-OTEBYUR C EC D 1:BLLO GS ABBT C APTR 02-ORMTEAV S B LRC 2 O0E-IZ,S-1 # VBMO : BLLORG TSENEMATSTL BALO GESDLAN HONTIEC SISTH BLLO.G ; T9ECCS BR S.'B;2 ,RS2AB#V MO )ACEPA(S'.;1 ,RS1AB#V MO IDT ECAS;. 02-OODCMSE RBCL RYNT EOLMBSYT DON IIT BAGFL; E BLTACALORER EACL;2 O0C-RPSEHU,@LGLFRE#B ICB 2 O0F-  ; MODE, ETC MOV #4,(R2)+ ; FIRST BLOCK OF FILE MOV #774,(R2)+ ; LENGTH MOV #777,(R2)+ ; LAST MOV #377,(R2)+ MOV #2,-(SP) JSR PC,IT.WRZ ; WRITE OUT UFD ; LIBRARY BUILD BEGINS HERE: IT.LBD: MOV IT.CBA,R1 ; SET LIBRARY BUFFER PTR MOV #4,(R1)+ ; SET DIRECTORY START BLK MOV #11,R0  ; SET BLOCK CONTROL IT.NUE: MOV R1,R2  ; CLEAR NEXT DIRECTORY BUFFER ADD #IT.CB2-IT.CB1-2,R2 CLR -(R2) CMP R2,R1 BNE .-4 IT.NUR: MOV ITIORSVEON CIISC ATOL TAOC (OAOTE INUTROUB;S ITEX; C PS RT R5+,P)(S OVM 4 ,R)+SP(V MO R3+,P)(S OVM 2 ,R)+SP(V MO R1+,P)(S OVM M HE TRETOES;R R0+,P)(S OVM S ESDRADN URET RCKTA;S P)(S2.,1)+SP(V MO 0:R0ES R ; RSTEISEG RRETOESR; ;. ITEX;) SP.(12@P JM P)(S,-R0 OVM ) SP-(1,RV MO P)(S,-R2 OVM ) SP-(3,RV MO P)(S,-R4 OVM M HE TVESA;) SP-(5,RV MO 0:R0AV S ; RSTEISEGRE AVS; ; . ITEX& R LENDHAF O; 03SRSW BR SSREDD ATO0 REDAV SET;S P)(S), OT OMN LINK40: .IFNDF NOSEG CONTRL .WORD 8. ;OVERLAY #8 JMP ENTRY1 .ENDC .IFDF NOSEG JMP START8 .ENDC ; ; CC SWITCH--CONCATENATION ; LINK74: INCB CONCAT NOVAL BR LINK01 ; ; TAPES ; LINK58: ONEVAL MOV 2(R1),-(SP) MOV #DETOBI,-(SP) EMT CONV INCB TAPES MOV (SP)+,TAPCT ;SET COUNT LINK04: JMP LNK04 ;EXIT LINK01:LINK11: JMP LNK01 ; ; TRANSFER ADDRESS ; LINK69: CMP (R1),#2 ;DOES IT HAVE A VALUE? BLO LINK08 ;NO VALBUTB2,O0C-SPAB OVM: T1ECAS 02-OPCIR@H1,RV MO 2:CTSE A1 RC IN T2ECAS EQB . PC. AX MEW NFF OENEV; 1 ,R#1 ITB 1 CTSEAS LOB 2 O0C-RPHI,@R1 MPC N IOCTSES OUVIRE;P 02-OPCEL@R1,RV MO OR FPCT ENRRCUE AV;S R12,O0C-RPSE@U OVM T ECCS .ONTIEC SUSIOEVPR; T ECAS .INY EDLR;A T1ECAS EQB 2 O0D-MOECSB STT T PUUT ORYNABIT ESQURE;2 O0T-OUINBB EGN R LENDHAT ECAS; : CTSERA ;E IVCTREDIT ECAS;. HE TESDLAN HRTPAS HI;T CTSE.A ; .OBF,R2 ; RESET OUTBUFFER POINTER JSR PC,IT.RDD ; GET INPUT LINE BEQ IT.ERG  ; IF JMP BLOCK MUST BE ERROR TST (R3)+  ; IGNORE LOAD ADDRESS CMP (R3)+,#3401 ; IS IT A COMD? BEQ .+6 IT.ERG: JMP IT.ER4 MOV (R3)+,#0 ; SAVE LOW LIMIT IT.BSA=.-2 MOV 10(R3),(R1)+ ; MOVE PROG NAME TO DIR. MOV 12(R3),(R1)+ MOV R0,(R1)+ ; ALSO START BLOCK NO., MOV (R3)+,@R1 ; ... & SIZE ASR (R1)+  ; (IN WORDS) MOV #2,(R1)+ CLR (R1)+  ; CLEAR EMT CODE STORE R0(V MO 1:R0WS SC PS RT ITEXS-YE; G REESR: 03SRSW O-;N 02SRSW PLB ? LEAB TOFD EN; ) R0(T TS DR AIPSKO-;N )+R0(T TS S-YE; 1 R0WSSQ BE E?ONS HI TITS ;I )+R0,(1)(R MPC: 02SRSW R0D VESAF OARLE CALTINI;I P)(S LRC 1 ,R)+SP(D AD RSTEACARCHH TCWI S; ) SP(L AS P)(S,-1)(R OVM G REAVS: 00SRSW ;. =0R0N URET R ; H,TCWI SHE TNDFIT N'CAF IE.INUTROH TCWI SOFR AD0=-RUTTPOU ;R FOH RCEA STOD EA HCHITSWF ODR=AR1 - ;E BLTAH TCPAIS DOFR AD0=-RUTUE- ONEVAL TSTB PASS BNE LINK01 ;IGNORE IF PASS 2 CMPB @2(R1),#'A ;IS FIRST CHAR A # OR A LETTER? BLO LINK09 ;NUMBER- MOV 2(R1),-(SP) ;SYMBOL-DO A RADIX 50 PACK MOV #RATOBI,-(SP) EMT CONV MOV (SP)+,TRABLK+4 MOV #RATOBI,-(SP) ;SECOND WORD EMT CONV MOV (SP)+,TRABLK+6 INCB STRA INCB TRAF BR LINK04 ; NUMBER LINK09: MOV 2(R1),-(SP) ;DO OCTAL CONV MOV #OCTOBI,-(SP) EMT CONV MOV (SP),TRA ASR (SP)+ BCC .+4 ERR19 IN 02-OITEX MPJ L FILDRP RAT D RLO TESYT BOF# ; 4 ,R10#V MO SEBAN IOCTSEM RO FNTMECELASPDI;3 ,R02-OUFBBTV MO ONTINIFIDER TEUNCON IOATOC;L R01,3.LD#R VBMO 3)(R,102-OODCMSE VBMO R32,O0C-RPSEHU OVM D IOT DTOD IONTIEC SAMGRRO PEW;N 9:CTSE C2 ,R02-O+3YMPSTM OVM 1 ,R02-O+1YMPSTM OVM D MOEC STOD ICTSE.CW NE;2 O0D-MOEC,SR3 VBMO CTSE.CW NEF OPC;2 O0F-BUTB0,@R OVM C POFS ESDRAD;2 O0C-LPRE0,RV MO 0)(R-T TS PC. AX MOFS ESDRAD;2 O0C- MOV (R3)+,(R1)+ ; ... & SET START ADDRESS IT.RNX: JSR PC,IT.RDD ; GET TEXT LINE BEQ IT.RDN  ; IF JMP BLOCK END OF ROUTINE MOV @R3,R5  ; GET LOAD ADDRESS SUB IT.BSA,R5 ; CHECK IF CONTIGUOUS LOAD BEQ IT.MIT IT.ZFL: CLRB (R2)+  ; IF NOT PAD OUTPUT WITH ZERO JSR PC,IT.ITT ; ... CHECKING FOR BUFF END DEC R5 BNE IT.ZFL IT.MIT: MOV (R3)+,IT.BSA ; BUILD LOAD POINT FOR NEXT LINE ADD R4,IT.BSA IT.MVL: MOVB (R3)+,(R2)+ ; TRANSFER TEXNPI; ;E INUTROH RCEA SCHITSW ;; 00LDPR BR BCT USDJ;A 0)(R2,#B SU UTTPTX ITIM LGHHIT SE;4 ,REMPMTO OVM T PUXTT G LA FOFS IEOP CWO TET;G P)(S,-P)(S OVM T MILIW LOT SE;4 ,RDRWALO OVM: D9CM ;S ITIM LAMGRRO PET-S--#9D CM ;; ORRR EALAT;F 10RRE ; E.YP TPCE BSTMUD CM- --R ROER ;; 00LDPR EQB ) R1,(D2CM#P PBCM 00LDPR EQB ) R1,(D1CM#P PBCM PETYC PBEO LS ASTMUD ANMMCOT EX NE,ON DOT NIF ;X DERLPE BL LD RINT AS LBET US MDSANMMCOC P; 0)(R4,CB FTRA INCB TRAF BR LINK04 LINK08: TSTB PASS ;IGNORE ON PASS 2 BNE LINK11 INCB UTRA BR LINK11 ; ; /D- DEBUG FILE ; LINK65: INCB ODTF TSTB PASS BNE LINK11 NOVAL INCB DDTF BR LINK11 ; ; PROCESSING FOR POST SWITCHES ; ; DISPATCH TABLE ; POSTSW: .BYTE 'E,0 ;EXIT +LINK12 .BYTE 'U,0 ;UNDEFINES +LINK10 .WORD 0 ; PRESWITCH +LINK02 -1 ;END OF TABLE ; ;RPHI0,RV MO RYNT ECTSE CEW NOFE AS;B R02,O0X-DEINHV MO 7:CTSE C2 O0C-RPHI,@R1 OVM: T8ECCS R1 NCI 8 CTSECQ BE PC. AX MFF OENEV; R11,#T BI T7ECCS OSBL 02-OPCIR@H1,RP CM ONTIEC SUSIOEVPR;2 O0C-LPRE,@R1 OVM R FOC PNTREUR CVESA;1 ,R02-OPCERUS@V MO E.BLTACALOREN IOCTSES OUVIRE;P BS AONTIEC SUSIOEVPR; 2 CTSECQ BE 02-OODCMSE TBTS 6:CTSE C) (876>3F IIG BOO;T TEECCS LTB R BEUM NID; 3 ,R76#3 MPC N IOCTSEL RONTCO1=;+ R3 NCI T BIE YT BOR FFTHI SRAT BYTE JSR PC,IT.ITT ; CHECK IF OUTBUFF FULL DEC R4  ; END OF INPUT? BNE IT.MVL BR IT.RNX  ; IF SO GO FOR NEXT LINE IT.RDN: CMP R2,IT.OBF ; PARTIAL BUFFER? BEQ .+6 JSR PC,IT.ITZ ; IF SO WRITE IT OUT MOV IT.CBA,R2 ; GET START OF DIR. BUFF MOV R2,-(SP) ; ... & ITS END ADD #IT.CB2-IT.CB1,@SP CMP R1,(SP)+ ; DIRECTORY FULL? BNE IT.NUR  ; IF NOT GET NEXT ROUTINE MOV @R2,-(SP) ; OTHERWISE SET OUT BLK # MOV R0,@R2  ; SET NEXT LINK JSR PC,IT#B SU )+SP(T TS PCUR,CR4 OVM Y IFOD;M R4+,1)(R DDA E LUVAE AS BONTIEC SET;G R4),R5E(ASBV MO 8:MD C; ONTICAFIDIMOC P--8 #MDC; ; 8 MDCR B ) R0,(#4 UBS 5 ,RR4 OVM T ECTS PET;S CTSEPT4,RV MO ORRR EALAT;F 11RRE R TEINPON IOCTSET GE; C SEETG + 1)(R+,1)(R MPC 4 ,RR1 OVM: D7CM ;C PET S--7 #MDC; ;5 D0RLPR B ) R0,(#2 UBS 4 ,R)+R1(D AD ORRR;E 09RRE B LORGS + 1)(R+,1)(R MPC 4 ,RR1 OVM 1 MP,TR4 OVM W NOC PET;G PCETG: D6CM U SWITCH- LIST UNDEFINES ; LINK10: NOVAL MOV R0,-(SP) ;SAVE R0,R1 MOV R1,-(SP) MOV SYME,R0 MOV R0,R1 CMP USYME,R0 ;ANY UNDEFINES? BEQ LINK03 ;NO- JSR PC,LINK14 ;YES- GO PRINT THEM LINK03: MOV (SP)+,R1 MOV (SP)+,R0 JMP LINK02 ;EXIT ; ; USE PART OF PMAP TO PRINT UNDEFINES ; LINK14: INCB PMAP11 SAVREG MOV #PMAP84,R0 ;PRINT HEADING TYPE MOV R1,R0 ;GET PTR TO END OF SYMBOLS .IFNDF NOSEG CONTRL .WORD 7 ;OVERLAY #7 JMXT; 3 RR AS R3 SRA 4 Y BEDIDIV;D R3 SRA Y TRENS HI TOFS ESDRAD;3 ,R02-OEXNDHI UBS Y TRENT 1SF OSSREDD;A R32,O0P-TOERPV MO 3:CTSE CD IONTIEC SOLTRON CTEPUOM-C--NDOU FCHAT;M ST UOFM TOOT BSTJUAD;2 O0P-TOON,C10#B SU ERNTEP RAT C PUMIMAX MND;A 02-OGSLATF LRC T ENRRCUO T;0 02-OLTSURE LRC . LEAB;T ONTIEC SOLTRON CHE;T OFP TOT ENRRCUS ;I RYNT EOFS ESDRADE AS;B 02-OEXNDHI3,RV MO Y.TRENN IOCTSEL RONTCOW NEA R TEEN; E BLTAN IOT NMENA.WRT ; OUTPUT DIR BLOCK CMP R1,#IT.CB2 ; ADJUST PTR TO NEXT BUFF BEQ .+6 MOV #IT.CB1,R1 MOV R1,IT.CBA ; ... & SAVE FOR LATER MOV R0,(R1)+ ; ALSO REMEMBER BLOCK # INC R0  ; START AGAIN NEXT BLOCK BR IT.NUE  ; GO SET UP NEXT ;ALL ROUTINES DONE - OUTPUT FINAL DIRECTORY BLOCK: IT.END: MOV IT.CBA,R2 ; SET BLOCK FOR WRITE MOV @R2,-(SP) CLR @R2  ; ... & CLEAR LAST LINK JSR PC,IT.WRT ; DO TRANSFER ... MOV #IT.OUL,-(SP) ; ... & R ;D CELASPDIE IVITDD AALOBGL- -#6D CM ;; -204LDPR BR 0)(R2,#B SU NTTANSCOE IVITDD;A R4+,1)(R DDA + 1)(R+,1)(R MPC R ROER; 9 R0ER UEAL VALOBGLT GE; B LORGS 4 ,RR1 OVM: D5CM ;C LOREE IVITDD AALOBGL- -#5D CM ;; -204LDPR BR ))+2(.X- (RMFO; 4 ,RP1TM UBS: 05LDPR ORRR;E 09RRE E LUVAL BALO GET;G OBGLSR )+R1,()+R1(P CM R41,RV MO P1TM4,RV MO OW NPCT GE; C TPGE 4:MD C; OCEL REDACPLIS DALOBGL- -#4D CM ;; -202LDPR BR ))+2(.- X P ENTRY2 .ENDC .IFDF NOSEG JMP PMAP10 .ENDC ; ; E SWITCH-FORCE UNDEFINES TO 0 AND PROCEED TO PASS 2. ; LINK12: NOVAL TST (SP)+ ;IGNORE RETURN ADDRESS TSTB PASS BNE LNK07 ;SPECIAL ACTION ON PASS 2 .IFNDF NOSEG CONTRL .WORD 4 JMP ENTRY1 .ENDC .IFDF NOSEG JMP LINK13 .ENDC LNK07: .IFNDF NOSEG CONTRL .WORD 9. ;OVERLAY #9 JMP ENTRY1 .ENDC .IFDF NOSEN IOCTSEL RONTCOS HI;T NDOU FCHAT;M T3ECCS NEB E BLTAN IOCTSE; H RCNSLI APTR OLTRON CEROVH RCEA;S R32,O0P-TOONC OVM R EAIN LRMFOER;P R22,O0P-TOERPV MO OLMBSYT US JH;TCMA; 4 @R LRC D OR WRD 3NO;4 ,RD3OR#W OVM 1 RTO1 M+SYMP;T R1 NCI R KEAC P40O ULOD;M HBRCSE APTR TEBYT 1SF OSSREDD;A R1M,SYMP#T OVM: T5ECCS +3YMPSTMD AN1 M+SYMP;T DSOR WINN IOATNTSEREEP R40O ULOD MEDCKPAO NT;I 5) (YMPSTMO T0) (YMPSTMS TEBYN IRSTEACARCHE THK AC;P 02-OUTROER MPJ T ELEASE OUTPUT EMT 7 MOV R2,R1  ; SET BOOT END PTR BR TOE  ; USE BOOT TO GET RESMON IT.BOT: ;DOS BOOTSTRAP FOR USE IN CONJUNCTION WITH ROMBOT: ; ; LOADED BY ROMBOT INTO START OF MEMORY & ; BEGUN BY IT AT LOCATION 0 ; INITIALLY MOVES ITSELF INTO AREA BELOW ABS. LDR ; AS SET IN A BASIC 8K CONFIGURATION. ; ACCESSES MONITOR LIBRARY EXPECTED TO BE STORED ; FROM DISK BLOCK 4 ONWARDS AND ASSUMES FIRST ; ENTRY IN ITS DIRECTORY REPRESENTS THE NORMAL ; RESI (RMFO;4 ,R)+R1(D AD R4 EGN . CELA PNTREUR CATC PET;G PCETG: D3CM ;C LORED CELASPDIL NAERNT I--3 #MDC; ; 0 D0RLPR B ) R0,(#6 UBS: 04LDPR UTTPTX ORRR;E 09RRE E AM NALOBGLR FOH RCEA;S OBGLSR )+R1,()+R1(P CM MENAF ODR AET;S R41,RV MO 2:MD C; C LOREL BALO G--2 #MDC; ;0 D0RLPR B ) R0,(#4 UBS: 02LDPR UTTPTX ITE ATOCEL;R R4),R5E(ASBD AD UEAL VEL RET;G R4+,1)(R OVM: D1CM G JMP DONE .ENDC .IFNDF NOSEG CONTRL .WORD 4 ;OVERLAY #4 JMP ENTRY1 .ENDC .IFDF NOSEG JMP LINK13 .ENDC EXOVL4: TSTB MAPF ;WANT A MAP BEQ .+4 ;NO PMAP ;PRINT IT MOV #TRAM,R0 ; DON'T PRINT IF A MAP WAS PRINTED TSTB MAPF BNE .+4 TYPE MOV #PASS2,R0 ;TYPE "PASS 2" TSTB BELOW0 BEQ .+4 ERR22 TYPE INCB PASS CLRB FLINE ;BACK TO FIRST LINE .IFNDF NOSEG ;OF CSI INPUT CONTRL .WORD 1 ;OVERLAYENEMNCOUNN;A 6)(R,-R1ER#V MO ORRR;E 6)(R-R CL E:CTSE CS T'ECCS .8)6(37N HA TREMO; 7 CTSECR B Y TRENL BOYM SOT DINT BIG LA;F LEABATOCEL RET;S 02-OPCERUS@HG,FLEL#R SBBI 02-OPCBS,A02-OPCERUS@V MO 2:CTSE CT ECAS .ONTIEC SUSIOEVPR; 6 CTSECR B 2 O0X-DEIN,H02-OOPRTPE OVM 1 R BEUM NID; 3 ,R#1 VBMO 02-O+3YMPSTM LRC L BOYM S40OD MEDCKPA;2 O01-M+SYMPTR CL 1:CTSE CT ECCS.D MENAUN; 2 O0E-N1AIMP JM 4:CTSE CG LA FORRR E;Q 02-OORRRQE CBIN ES;Y T5ECCS GTB ? OLMB"DENT MONITOR IMAGE. THIS IS BROUGHT INTO ; CORE STARTING FROM LOCATION 0 AND ON SATISFACTORY ; COMPLETION OF THE TRANSFER, IT IS STARTED ; AUTOMATICALLY. IF TRANSFER ERROR, TERMINAL ; HALT WILL FORCE RETRY FROM SCRATCH. ; ;REGISTER ASSIGNMENTS: R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; ;SEQUENCE TO MOVE SELF TO OPERATING AREA: START: MOV #TOE-.,R0  ;SET PTR TO PRESENT START MOV #BEGIN,R1 ;... & TO REQD. START AGAIN: MOV @R0,(R1)+ ;START MOVE .... CMP (R0)+,H ;C LOREL NAERNT I--1 #MDC; ;6 MD,CD5CM4,MD,C06LDPR2,MD,CD9CM8,MD,CD7CM+ 6 MD,CD5CM4,MD,CD3CM2,MD,CD1CM6,D0RL+P T:MDRC ERDLAN HEROPPRE UTECEXO ;G 2)(RDTCM@R MPJ 2 RL AS 14RRE: 06LDPR +4.E BL AXDMCM,#R2 MPC 5 ,RCTSEPT OVM S IT B 7OW LVESA;2 ,R007617#C BI MD CCKTA;S P)(S,-R2 OVM S ESDRADL UACT ARMFO; 3 ,R-4#D AD TOR TEINPOT TXD HEUS PDD;A R3),SP2( DDA T SEFF,O#2 UBS T IVESA;T SEFF,OR3 OVM T TXO NT IETFSOFT GE;3 ,R)+R1(B OVM D CMT GE;2 ,R)+R1(B OV$ #1 JMP ENTRY1 .ENDC .IFDF NOSEG JMP START1 .ENDC ; ; LOAD MODULE OUTPUT ERROR--DIE ; LINK25: MOVB IOOPER,HBYTE MOV #CONVER,R0 INCB NOTINP ERR15 ; ; TRAP HANDLER AND JUMP TABLE ; TRAPH: MOV @SP,2(SP) ;STACK RTN ADDRESS. SUB #2,@SP ;FORM ADR OF TRAP INSTRUCTION MOV @(SP)+,-(SP) ;GET TRAP INSTRUCTION. ADD #JTABLE-TRAP,@SP ;GET TABLE INDEX. MOV @(SP)+,PC ;GO TO SUBROUTINE. ; ; JUMP TABLE ; JTABLE: JT: UNPACK=.-JT+TRAP ;MOD40 USYL GALE;2 O0E-YPIT TBTS CTSE.CD MENAUN. NO; 1 CTSECE BL D?UNFOS ERCTRAHA CNY;A 02-OARCHNTCB STT M TE IXTNET GE; M TEIP RAT . BSTA; 2 O0E-YTRBCU ECD R OKSANBLH USFL; S ABBTCP RAT T ECCS .EDAMNN;U T1ECCS EQB N LOCOI EM;S R05,#- PBCM CTSE.CD MENAUN; 1 CTSECQ BE RNTUREE AGRIAR;C R04,#- PBCM R:TEACARCHG INATINRMTE;0 ,R02-ORMTEAVSB OVM T PUUT ORYNABIT ESQURE;2 O0T-OUINBB EGN 2 O0E-IZSB LRC: CTSERC ERDLAN HCTSE;C ;; VETIECIR DCTSE.C&EEL ;... & LOOK FOR END BNE AGAIN JMP @#BEGIN  ;JUMP TO BOOT PROPER. ;SET UP TRANSFER OF MONLIB DIRECTORY: TOE: MOV #177472,R0 ;SET POINTER TO H/W REGS. MOV R0,R5  ;... & SAVE FOR LATER CLR -(R0)  ;SET DISK ADDRESS ... MOV #400,-(R0) ;... TO BLOCK 4 MOV R1,-(R0) ;SET FOR BUFF FOLLOWING THIS MOV #-64.,-(R0) ;... & FOR 1 BLOCK READ: CMP (R1)+,(R1)+ ;BUMP BUFFER PTR MOV #5,-(R0) ;SET FOR READ TSTB @R0  ;LOOK FOR DONE FLAG BM: 01LDPR ;D ANMMCOT EX NSSCEROP; ;C PS RT X:DERL PC PNTREUR CTEDAUP, ES;Y PCUR,CP)(S@4 DDA - O ;N 01LDPR GTB ? LD RTHWIE ON;D 0)(R STT: 00LDPR ;. Y)ANF (IK OCBLT TXS OUVIRE PTOT INPO1 RND AR0D KEACST ;D OR WLK BLD RNGWILOOL FTEBYO TTS PR1 ;C BLD RTOS PT0 R ; --T PUIN ;; LD RSSCERO PTOE INUTROUBS; ; DCEN. 7 RTTASP JM EGOSNF FD.I DCEN. 1 RYNTEP JM 7D OR.W RLNTCO EG(NPACK .WORD UNPA00 PACK=.-JT+TRAP ;MOD 40 PACK .WORD PACK00 OTOA=.-JT+TRAP ;OCTAL TO ASCII CONVERRSION .WORD OTOA00 SAVREG=.-JT+TRAP ;SAVE REGISTERS .WORD SAVR00 RESREG=.-JT+TRAP ;RESTORE REGISTERS .WORD RESR00 TXTPUT=.-JT+TRAP ;PUT INTO TXT BLOCK .WORD TXTP00 GETPC=.-JT+TRAP ;GET CURRENT PC VALUE .WORD GETP00 TYPE=.-JT+TRAP ;TYPE A BUFFER ON TTY .WORD TYPE00 ACCEPT=.-JT+TRAP ;READ FROM KBD .WORD ACCE00 SQUISH=.-JT+TRAP ;E THS LENDHAT AR PISTH ;T ECCS;. ;; ;C ND.E Y8TREN; 2 R4UBSP JM Y7TREN; 5 R3UBSP JM Y6TREN; 1 R4UBSP JM Y5TREN; T MILIRP JM Y4TREN; E TLTIRP JM Y3TREN; L OBGLRP JM Y2TREN; T ECASRP JM Y1TREN; T ECCSRP JM ;. AYRLVE OISTHN ;I TSINPOY TRENO TLEAB TMPJU ; : 02GOBE METIN RU; M RO FETFSOFE UTMPCO; 2 O0EG-BVRGOBE2=O0 **** *#2Y LAEROV* **** ; #1E IL FOFD EN; T EO. ; *PL .-2 TST @R0  ;CHECK NO ERROR BMI ERROR MOV R5,R0  ;PREPARE FOR NEXT READ BEQ GO  ;... UNLESS ALREADY DONE ;SET UP RESMON TRANSFER: CLR R5  ;... AS SHOWN BY THIS TST (R1)+  ;GET START OF RESMON IN LIB MOV (R1)+,R2 ;CVT BLOCK TO DISK ADDR MOV #2000,R3 ASL R2 ROL R3 BCC .-4 MOV R3,-(R0) ;SET IN H/W REGS. MOV R2,-(R0) CLR -(R0)  ;STARTS AT 0 IN MEMORY MOV (R1)+,-(R0) ;GET LENGTH NEG @R0  ;... AS NEGATIVE WORD COUNT BR REOSNF NDIF.: 00APPM AP MADLOT INPRT ENIDESR; ; DCEN. 5 RTTASP JM EGOSNF FD.I DCEN. 1 RYNTEP JM #5Y LAEROV; 5 RDWO. L TRONC G SENO DFFN.I 0:D0GS GD GSD EA RNTDESIRE ;; T.XI E -SEEL; C PS RT RENOIG- S YE; 0 S0NGGQ BE K?OCBLD GS;) R1,(LKDBGS#B MPC G OII: 00GSGN ;K OCBLD GSN NOT GE--SDNGG; ; S YE; 2 I0OOIR B O ;N 01OIIO OSBL AR FOO;T TBOU,#R0 MPC T OU0,RV MO ERFF, ;REMOVE WORDS FROM TABLE .WORD SQUI00 UNSQUISH=.-JT+TRAP ;MAKE A HOLE IN TABLE .WORD UNSQ00 PMAP=.-JT+TRAP ;PRINT LOAD MAP .WORD PMAP00 MAPTYP=.-JT+TRAP ;TYPE ON MAP DEVICE .WORD MAPT00 IOII=.-JT+TRAP ;OBJ MODULE INPUT INIT. .WORD IOII00 IOIG=.-JT+TRAP ;OBJ MODULE INPUT GET .WORD IOIG00 IOIC=.-JT+TRAP ;OBJ MODULE INPUT CLOSE AND RELEASE .WORD IOIC00 IOOI=.-JT+TRAP ;LOAD MODULE OUTPUT INIT .WORD IOOI00 IOOP=.-JT+TRAP ;LOAD M 01GOBE1-O0ND=E01ZOSI 1:O0ND E G SENO DFFN.I ENEV. T ,V,#LFF,,LCR;3 ,143F,,LLFR,CE YT.B BC; 5D OR.W IISC AEDTTMAOR;F 0D OR.W BCX MA; 5 RDWO.: BFTLTI ENEV. B TAL CATIER;V 13 TEBY. / 4A00 VR 11AL/P IISC.A LFR,CE YT.B BC;0 2D OR.W IISC AEDTTMAOR;F 0D OR.W BCX MA;0 2D OR.W F:BUTLTI ENEV. / AL/P 50AD.R B2IFSD OR.W B2ILSD OR.W WO TUTNP ICEURSO; F BUMDCD OR.W 5:CKLO BT EXT ULFADE; / AL/P 50AD.R B1IFSD OR.W B1ILSD OR.AD  ;GO DO RESMON TFR. ;EXIT TO RESMON: GO: JMP @(R1)+  ;WHEN DONE START RESMON ERROR: HALT   ;IF ERROR MUST TRY OVER HEEL: BR . BEGIN=37000 ; DATA AREAS: ; A) BUFFER SPACE: IT.OB1:    ; OUTPUT .=.+200 IT.OB2: .=.+200 ; IT.CB1:    ; DIRECTORY .=.+200 IT.CB2: .=.+200 ; IT.IB1: .WORD 200,1,0  ; INPUT .=.+200 IT.IB2: .WORD 200,1,0 .=.+200 ; B) LINK BLOCKS: .WORD IT.ER1  ; INPUT IT.INL: .WORD 0,0,1 .RAD50 'DT' ; .WORBUT EX NTOE NCVAAD;0 ,RBLUT#O DDA F EOT EPXC ETSBIL ALR EACL ;EROPIO1,F-EO#- CBBI 2:P0OO IR PEOO,I+3TBOU VBMO TERIWT EM P)(S,-EVDDLO#V MO AERFFBUT PUUT;O P)(S,-TAOU#V MO --NO; 2 P0OOIQ BE T?PUUT ONY;A +6EVDDLO STT: 01OPIO 02OPIO BR EROPIO3,A+UTOB OVM E ITWR MTE ) SP-(V,DEOD#L OVM B R FEUF BUTTPOU;) SP-(B,UT#O OVM - O-;N 02OPIO EQB ? UTTPOUY AN;6 V+DEODLT TS 01OPIO EQB ? AERFFBU;A UT#O0,RP CM EROPIO RBCL ERFFBUT ENRRCUO TTR PET;G 0ODULE OUTPUT PUT. .WORD IOOP00 GGSD=.-JT+TRAP ;GET GSD .WORD GGSD00 GNGSD=.-JT+TRAP ;GET NON-GSD BLOCK. .WORD GNGS00 PRLD=.-JT+TRAP ;PROCESS RLD .WORD PRLD00 SRGLOB=.-JT+TRAP ;GET VALUE OF GLOBAL .WORD SRGL00 PTGLOB=.-JT+TRAP ;GET PTR TO GLOBAL .WORD PTGL00 INSYME=.-JT+TRAP ;INSERT AT SYME .WORD INSY00 SRMODN=.-JT+TRAP ;SEARCH FOR MODULE NAME .WORD SRMO00 INUSYM=.-JT+TRAP ;INSERT UNDEFINED SYMBOL .WORD INUS00 SYMOVF=.-JT.W NE OUTNP ICEURSO; F BUMDCD OR.W 4:CKLO BT EXT ULFADE; / YM/S 50AD.R FBSL RDWO. B LLSD OR.W UTTPOUE BLTAL BOYM;S UFDBCM RDWO.: K3OCBL XT ELTAUEF;D T/LS/0 D5RA. B OFLD OR.W LBLO RDWO. T PUUT ONGTIIS;L UFDBCM RDWO.: K2OCBL T.EXT ULFADE; J/OB/0 D5RA. K OCBLE IL;F FBBO RDWO. K OCBLK IN;L LBBO RDWO. T PUUT ORYNABI; F BUMDCD OR.W 1:CKLO BN VE.E 01-OTCARST MPJ N EACL2D IT.ER1  ; OUTPUT IT.OUL: .WORD 0,0,1 .RAD50 'DF' ; C) INPUT FILE BLOCK: .WORD IT.ER3,4 IT.INF: .RAD50 'MON' .RAD50 'LIB' .RAD50 'SYS' .WORD 401,233 ; D) OUTPUT TRAN BLOCK: IT.OUB: .WORD 0,0,64.,2,0 ; .END IT.BGN R0T,OU OVM: 00OPIO ;T PUT PUUTO; ;C PS RT +6UT=OR1; + 1)(R STT 1 ,RR0 OVM C BZELIIAITIN; ) R0(R CL +4UT=OR0;+ 0)(R+,0)(R MPC: 01OIIO UT,OR0 OVM R TEINPOT PUUT OET;S R0A,UT#O OVM: 02OIIO +3TBOU RBCL 0:I0OO IA UT-OTBOUL=TBOU ;T NI IUTTPOU ;; PC TSR S EAELRT EM ;E ICEV DUTNP ISEEAELR; ;E OSCL MTE ) SP-(),SP(V MO P)(S,-EVJDOB#V MO 0:C0OI IE IL FUTNP ISELOC; ;E ICEV DUTNP ISEEAEL RND ALEFIT PUINE OSCL ;; ICIOE INUTROUBS; ;5 E AP4+TRAP ;CHECK FOR SYMBOL OVERFLOW (FATAL) .WORD SYMO00 GETSEC=.-JT+TRAP ;GET SECTION NAME POINTER .WORD GETS00 ERR01=.-JT+TRAP .WORD ER0100 ERR02=.-JT+TRAP .WORD ER0200 ERR03=.-JT+TRAP .WORD ER0300 ERR04=.-JT+TRAP .WORD ER0400 ERR05=.-JT+TRAP .WORD ER0500 ERR07=.-JT+TRAP .WORD ER0700 ERR08=.-JT+TRAP .WORD ER0800 ERR09=.-JT+TRAP .WORD ER0900 ERR10=.-JT+TRAP .WORD ER1000 ERR11=.-JT+TRAP .WORD ER1100 ERR12=.-JT+TRAP .WORD ER1200 ERR13= APTR CKLO BNKLIF OSSREDD;A R1B,IL#C OVM E IL FUTNP INDMAOM;C ANLECP RAT K OCBLK IN LOFS ESDRAD;1 ,RLBCO#V MO LEFIT PUUT ONDMAOM;C ANLECP RAT K OCBLK IN LOFS ESDRAD;1 ,RLBSL#V MO LEFIT PUUT OOLMBSY; N EACL APTR CKLO BNKLIF OSSREDD;A R1B,OL#L OV ML:IAECSP LEFIT PUUT ONGTIIS;L LSRT EM ET STADAE ASLERE;) R6-(1,RV MO LTDT EM LEFIE ETEL;D 6)(R,-R1 OVM ) R6-(B,OF#B OVM E IL FSELO;C LSCT EM ES;Y 6)(R,-R1 OVM ? 'DITINT SE; L IAECSP EQBU&;T OT.E PC 8.-JT+TRAP .WORD ER1300 ERR14=.-JT+TRAP .WORD ER1400 ERR15=.-JT+TRAP .WORD ER1500 ERR16=.-JT+TRAP .WORD ER1600 ERR17=.-JT+TRAP .WORD ER1700 ERR18=.-JT+TRAP .WORD ER1800 ERR19=.-JT+TRAP .WORD ER1900 ERR20=.-JT+TRAP .WORD ER2000 ERR21=.-JT+TRAP .WORD ER2100 SWSR=.-JT+TRAP ;SWITCH SEARCH .WORD SWSR00 INPTRH=.-JT+TRAP ;INSERT AT PTRH .WORD INPT00 DIRSR=.-JT+TRAP ;DIRECTORY SEARCH .WORD DIRS00 MOVTAB=.-JT+TRAP .WORD MOVT00 NOVAL=.-JT+TRAP A AT DUTTPOUY ARIN BIS; 1 @R STT K OCBLK IN LOFS ESDRAD;1 ,RLBBO#V MO LEFIT PUUT ORYNABI; N EACL APTR R12,LBSI#V MO LEFIT PUINE RCOU SNDCOSE; N EACL APTR CKLO BNKLIF OSSREDD;A R11,LBSI# OVM: RTSTRR LEFIT PUINE RCOU;S S:ET STADAD T'NI.I; L ALE ASLERE .ND ASELO.CO TANLE CLLCA ; HAICCS BR 01-OBSCAFR CBIN CHITSWL GALEIL; 5 CHSICE BN 6334#32,@R MPC: HDICCS HAICCS BR 01-OSSPAAX,MR4 : UPDATE MAXPASS IF NECESSARY. ;IT WILL USE SOURCE FILENAME AS DEFAULT FOR ;OTHER DATA SETS. ; ;INPUT: ; R1=ADDRESS OF CSI BLOCK ; 1ST WORD : ADDR OF CMDBUF ; 2ND WORD : ADDR OF LINK BLOCK ; 3RD WORD : ADDR OF FILE BLOCK ; 4TH WORD : DEFAULT EXTENSION ; ; ;OUTPUT: ; R3 ; 0 STILL MORE OF SAME TYPE ; 1 NO MORE OF SAME TYPE ; ; R4 AND STATUS ; 0LD WAS NULL ; ; R5 ; N IF /TAPES:N IS ENCOUNTERED ; 1 OTHERWISE ;R0,R1 AND R2 ARE DESTROYED. ; FRCABS NON-0 IF /37 ENCOUNTERED. ; ;CSICHK: SUBR43: ;CALL CSI2 MOV R1,-(R6) ;ADDRESS OF CSI BLOCK EMT 57 MOV (R6)+,R3 BIT #2,R3 ;CHECK FOR TOO BEQ CSICH4 ;MANY SWITCHES. ;COMMAND SEMANTIC ERROR -- ;SWITCH ERROR CSICH5: CLR -(R6) MOV #ERR4,-(R6) JMP ERROUT-O01 CSICH4: CLR R4 ;ENTIRE FIELD NULL MOV 2(R1),R2 ;ADDR OF LINK BLO OVM: 00IGIO ;T GET PUIN ;; 46K1LN BR +6DRJAOB1,40#V MO 46K1LN BR +6DRJAOB LRC 4 R-ADBJOR CL 14.+ NEB 6 R+ADBJ,O01#4 MPC: T2REER 00IGIO BR ADRE MTE ) SP-(V,DEBJ#O OVM D EA RSTIR FRTTA;S P)(S,-NA#I OVM F DTOB LRC 4 R-ADBJOR CL ENOP MTE ) SP-(V,DEBJ#OV MO P)(S,-DRJAOB#V MO 6:14NK L2 R-ADBJ,ONIPE#O OVM 2 .+.= J/OB/0 D5RA. 4 .-.= ONSIENXT ELTAUEF DET;S +4DRJAOB0,#V MO 10.+ NEB 4 R+ADBJOT TS 7:14NK LR ADBJ,O6471#5 OVM 7 READ ERROR CHECK ; READ00: MOVB -1(R0),-(SP) BIC #-3-1,(SP)+ BEQ .+4 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 ; MOV #OBJDEV,-(SP) EMT INIT ; ; OPEN OBJECT MODULE FILE ; TSTB ODTF BEQ LNK147 MOV #ERRET2,OBJADR-4 TST OBJADR BNE LNK14NABIO TIISC AC.DE;) R6-(2,#V MO TEBYE LUVAT 1SF OSSREDD;A 6)(R,-)+R2(V MO ESLUVAY AN MOO;T H5ICCS GTB E LUVAT OUTHWIS HETCWI;S HDICCS LTB 2 ,#)+R2(P CM ESCHITSWE OR MNO; 1 CHSICT BL #1),R2(P CM R.NT CCHITSWY BTRCNX.MAT ENEMCRDE; 1 ,RR2@B SU ESCHITSWE OR MNO; 1 CHSICE BL S.TRCNH TCWI S &MENAV.DER FOE ATNSPEOM;C R1 ECD: HBICCS R.NT CCHITSWT 1SO TNTOI;P R20,#1 DDA . DSOR WCHITSWM MUXIMA;1 ,R2)(R4B OVM S HETCWI SOR FCKHE;C CHITSWS AS PNOS CK TST 6(R2) ;PHYSICAL DEVICE NAME BNE CSICH2 CSICH1: TST R4 ;RETURN RTS R7 CSICH2: MOV 4(R1),R5 ;ADDR OF FILE BLOCK TST 4(R5) BNE CSICH3 MOV 6(R1),4(R5) ;USE DEFAULT EXTENSION CSICH3: TST (R5) ;WAS FILENAME SPECIFIED BNE CSICH6 ;YES MOV SIFB2-O01,@R5 ;DEFAULT---USE INPUT MOV SIFB2+2-O01,2(R5) ;FILENAME CSICH6: MOV #1,R5 ;DEFAULT NO. OF TAPES DEC R4 ;R4<0 INDICATE #TMPSYM,R1 TRAP SERCHB MOV TMPSYM+1-O02,TITLEA-O02 MOV TMPSYM+3-O02,TITLEB-O02 TITLEX: DECB SIZE-O02 ;SPACE WAS FOUND ASSUME DEFAULT JMP EXIT-O02 ; INITIALIZATION ; ; ;LIMIT HANDLER ; ; RLIMIT: MOV #TBBUF,R5 ;RESERVE CLR (R5)+ ;TWO CLR (R5)+ ;WORDS MOV #2,R4 ;WORDS MOV #RLD3.3,RLDIR-O02 ;AND TELL TRAP