ÿ.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†× × ò f€ò5ÀeòU@ò €× [æ*ˆ² ¦¦æ× Ž & *ˆÖ G× ‚&(ˆ°Ì 8�L'ˆ°4e÷ ÌQ$ ô �BBâBä" ± üÿü× ÷ ¬ŒÉU@Ò °ðU€ Æe  Å"U%÷‹äþGæÎeÞþæfÇ.Ö … U¥… … … … U¥Ñ Bb‘â‹Ã 0Š æ*ˆ€�Ö BÃIMMAND 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 KÿPC,O.CLSE ÿ;CLOSE CURRENT CELL ÿCMP ÿ#2,O.BW ÿ ÿ;ONLY WORD MODE ALLOWED ÿBNE ÿO.TCL1 ÿ ÿ;BRANCH IF ERROR ÿMOV ÿO.CAD,R2 ÿ;CURRENT ADDRESS IN R2 ÿ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 ÿ ÿ Qÿ57 ÿ ÿÿ;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 ÿ ÿdÿEMT ÿ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 R€UMP 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 POSARƒ2 ÿ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 THR„ÿTSTB ÿ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 ÿ ÿ;ABO†G: ÿ.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: ÿ.B‡EE 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 MESSAGŠYTE ÿ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 NU‹OT 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.ORPŒÿNOONOM-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 ÿ ÿ ÿ;C�C ÿ; "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 O“ING ÿ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 ÿCSI2•TO 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 ÿ;WHENšEG ÿ ÿÿ ÿ ÿ;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 FLž5 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 ; PROCESS RLAY. ; ÿ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 ÿ#R¢ARG ÿ ÿ;/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 ÿO¤ÿBR ÿ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 INTER¦JMP3: ÿADD ÿARG,DOT ÿ ÿ ÿ;MOVE DOT ARG CHARS TO RIGHT ÿCMP ÿDOT,TMP4 ÿBLOS ÿJMP5 ÿCMP ÿEND,DOT ÿ ÿ ÿ;MOVE PAST END-1? ÿBHI ÿJMP4 ÿ ÿ ÿÿ;NO JMP5: ÿMOV ÿEND,DOT ÿ ÿ;YES---DOT=END JMP4: ÿRTS ÿR5 ÿ.EOT ÿ;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 ÿO¨L4 ÿ;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 SIZ©PRETER 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 TH¬E ÿ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 COUNT°R2 ÿ;ABS OR REL? ÿBEQ ÿLINK33 ÿ ÿ;ABS ÿMOV ÿPTSECT-L4,R3 ÿMOV ÿBASE(R3),BASE(R0) ÿ;GET SECTION BASE ÿADD ÿVALR(R0),BASE(R0) ÿ;RELOCATE ÿBR ÿ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 ÿBOTFµP ÿ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 ÿLI¹BR ÿ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 ÿCUMºSR ÿ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 ÿ#LKBKTT»GE ÿ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 ÿGETSEC½BAK ÿ ÿ;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 ÿDÇFFECTIVE 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 ÿAÊELTCD ÿ ÿ;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 ÿCÑÒUT 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 ÿ@RÓAL ÿ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 ORÔMP ÿ(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 ÿTOHÛSP) ÿ; 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Ò±±� � ÿ»V00²A ÿ ÿ5-·-·±� � � ÿ»PDP-±± PÒÏDUÃÔ ÌÉNÅ� ÿ»ÌÉBÒAÒÉAN  � ÿ»ÃÏPYÒÉGHÔ¬ DÉGÉÔAÌ ÅÑUÉPMÅNÔ ÃÏÒPÏÒAÔÉÏN� ÿ»MAYNAÒD¬ MASSAÃHUSÅÔÔS    ÊANUAÒY ±9·±� � � � � BÅGÌÉB ½ ·� ÃÌÏSÅ ½ ÅMÔ+±·� ÃÒ ½ ±5� DÅÌÅÔÅ ½ ÅMÔ+²±� DÅÌÌÉB ½ "DÌ� DÅÌÏM ½ 'D� DSÒÃH ½ ÅMÔ+±´� ÅDÉÒ ½ ±0� ÅGSD ½ ²� ÅMÏD ½ 6� ÅÏÆ ½ ±00� ÅØÔGÌB ½ ²±00� ÆAÔÅÒ ½ ´·� ÆÆ ½ ±´� ÆÉÌÏPN ½ ´0� ÆÔÅÒÃD ½ "²·� GÌBÌN ½ ±0� 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� ÉNÏK ½ ´� ÉNSÅÒÔ ½ 'É� ÌÆ ½ ±²� ÌSÔÅÒ ½ "²6� MAØÌÉN ½ ±¸6.� ÏBÊÌSÔ ½ "ÌÏ� ÏMÅÒ ½ "²´� ÏPÅN ½ ÅMÔ+±6� ÏÒDÅÒ ½ "²5 Pའ¥·� ÒÅAD ½ ÅMÔ+´� ÒÅÌÅASÅ ½ ÅMÔ+·� ÒÅNAMÅ ½ ÅMÔ+²0� ÒÅSADÒ ½ ÅMÔ+´±� ÒPÌAÃÅ ½ 'Ò� Ò0 ½ ¥0� Ò± ½ ¥±� Ò² ½ ¥²� Ò3 ½ ¥3� Ò´ ½ ¥´� Ò5 ½ ¥5� Ò6 ½ ¥6� � SÅMANÔÉÃS ½ ÅMÔ+5·� ÌÉB½´6±5²� Ò±±½·²56·� ÔMP½··´30� SÅMÅÒ ½ "²±� SPAÃÅ ½ ´0� SPSP ½ ²00´0� SÔAÔUS ½ ÅMÔ+±3� S×ÅÒ ½ ²� S×ÉÅÒ ½ "²0� SYNÔAØ ½ ÅMÔ+56� UÔÉÌÉÔY ½ ÅMÔ+´²� VÅÒÔAB ½ ±3� ×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 ÿ ÿ; IäQ ÿ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ÌÌ ÅÒÒÏÒS AÒÅ ÆAÔAÌ� ÏÌÌB: ÿ.×ÏÒD ÿ0 ÿ ÿ»ÏUÔPUÔ ÌÉBÒAÒY ÌÉNK BÌÏÃK� ÿ.ÒAD50 ÿ¯ÏÌB¯� ÿ.×ÏÒD ÿ± ÿ ÿ»NÏ S×ÉÔÃHÅS AÌÌÏ×ÅD� ÿ.ÒAD50 ÿ¯DƯ� � ÿ.×ÏÒD ÿ0 ÿ ÿ»AÌÌ ÅÒÒÏÒS AÒÅ ÆAÔAÌ� ÉÌÌB: ÿ.×ÏÒD ÿ0 ÿ ÿ»ÉNPUÔ ÌÉBÒAÒY ÌÉNK BÌÏÃK� ÿ.ÒAD50 ÿ¯ÉÌB¯� ÿ.×ÏÒD ÿ35. ÿ ÿ»ÔAKÅS ¯DÌ ÏÒ ¯D� ÿ.ÒAD50 ÿ¯DƯ ÿ ÿ»UP ÔÏ 3². VAÌUÅS ÏN ¯D ÏÒ� ÿ ÿ ÿ ÿ»·². ÔÏÔAÌ ÃHAÒS PÅÒ ÌÉNÅ� .½.+6¸.� ÿ.×ÏÒD ÿ0 ÿ ÿ»MAØÉMUM ÅND ÏÆ S×ÉÔÃH ÉNDÃÔÒ� � ÿ.×ÏÒD ÿ0 ÿ ÿ»AÌÌ ÅÒÒÏÒS AÒÅ ÆAÔAÌæ ÿÿ ÿ;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Ô ÆÉÌÅ ÌÉNK BÌÏÃK� ÿ.ÒAD50 ÿ¯ÉNP¯� ÿ.×ÏÒD ÿ´ ÿ ÿ»ÔAKÅS ÏNÅ S×ÉÔÃH:� ÿ.ÒAD50 ÿ¯DƯ ÿ ÿ»¯É:V¬ ÏÒ ¯Ò� .½.+6� ÿ.×ÏÒD ÿ0 ÿ ÿ»AÌÌ ÅÒÒÏÒS AÒÅ ÆAÔAÌ� ÌÌÌB: ÿ.×ÏÒD ÿ0 ÿ ÿ»ÌÉBÒAÒY ÌÉSÔÉNG ÌÉNK BÌÏÃK� ÿ.ÒAD50 ÿ¯Ì̯� ÿ.×ÏÒD ÿ3 ÿ ÿ»¯ÌÏ AÌÌÏ×ÅD� ÿ.ÒAD50 ÿ¯KB¯� .½.+´� ÿ.×ÏÒD ÿ0� ÿ.×ÏÒD ÿ²� ÏÌÆB: ÿ.×ÏÒD ÿ0¬0¬0¬0¬0 ÿ»ÏUÔPUÔ ÌÉBÒAÒY ÆÉÌÅ BÌÏÃK� � ÿ.×ÏÒD ÿ0� ÿ.×ÏÒD ÿ´� ÉÌÆB: ÿ.×ÏÒD ÿ0¬0¬0¬0¬0 ÿ»ÉNPUÔ ÌÉBÒAÒY ÆÉÌÅ BÌÏÃK� � ÿ.×ÏÒD ÿ0� ÿ.×ÏÒD ÿ´� ÉÆÆB: ÿ.×ÏÒD ÿ0¬0¬0¬0¬0 ÿ»É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) ÿ;RìGGSD13 ÿ ÿ;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 ; ; ÿREFERíBÌÏÃK� � ÿ.×ÏÒD ÿ0� ÿ.×ÏÒD ÿ²� ÌÌÆB: ÿ.×ÏÒD ÿ0¬0 ÿ ÿ»ÌÉBÒAÒY ÌÉSÔÉNG ÆÉÌÅ BÌÏÃK� ÿ.ÒAD50 ÿ¯ÌSÔ¯� ÿ.×ÏÒD ÿ0¬0� � � ÃMBUÆH: ÿ.×ÏÒD ÿ0¬0¬0¬0¬0¬0¬0 ÿ»ÃSÉ ×ÏÒK AÒÅA� ÃMBUÆ: ÿ.×ÏÒD ÿ·². ÿ ÿ»MAØ ÌÉNÅ SÉZŽ·² ÃHAÒS� ÿ.×ÏÒD ÿ0¬·².� .½.+·².� � ÿ.×ÏÒD ÿ0� ÿ.×ÏÒD ÿ0 ÿ ÿ»AÌÌ ÅÒÒÏÒS AÒÅ ÆAÔAÌ� ÃMÌB: ÿ.×ÏÒD ÿ0 ÿ ÿ»ÃÏMMAND ÌÉNK BÌÏÃK� ÿ.ÒAD50 ÿ¯ÃMɯ� ÿ.×ÏÒD ÿ±� ÿ.ÒAD50 ÿ¯KB¯� � ÿ.×ÏÒD ÿ0 ÿ ÿ»AÌÌ ÅÒÒÏÒS AÒÅ ÆAÔAÌ� ÿ.×ÏÒD ÿ´� ÃMÆB: ÿ.ÒAD50 ÿ¯ÃMD¯ ÿ ÿ»ÃÏMMAND ÉNPUÔ ÆÉÌÅ BÌÏÃK� ÿ.×ÏÒD ÿ0¬0¬0¬0� î ÿ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 ÿMAØÌÉN¬±¬0 ÿ»ÌÉNÅ BUÆÆÅÒ� ÌBDAÔA: ÿ ÿ ÿ ÿ»DAÔA SÔAÒÔS HÅÒÅ� .½.+MAØÌÉN� � ÌBÔÉÔÌ: ÿ.×ÏÒD ÿ±¸.¬0¬±¸. ÿ»ÔÉÔÌÅ BUÆÆÅÒ� ÿ.BYÔÅ ÿÃÒ¬ÌÆ� ÿ.ASÃÉÉ ÿ¯ÌÉBÒ-±±¯� ÿ.BYÔÅ ÿSPAÃŬSPAÃÅ� ÿ.ASÃÉÉ ÿ¯V00²A¯� ÿ.BYÔÅ ÿÃÒ¬ÌÆ� � ÿ.ÅVÅN� � ÌBÃMSG: ÿ.×ÏÒD ÿ´� ÿ.×ÏÒD ÿ0� ÿ.×ÏÒD ÿ´� ÿ.BYÔÅ ÿÃÒ¬ÌÆ� ÿ.BYÔÅ ÿ'£¬±3� � ÿ.ÅVÅN� � ÿ.×ÏÒD ÿ0 ÿ ÿ»AÌÌ ÅÒÒÏÒS AÒÅ ÆAÔAÌ� ÃMÅB: ÿ.×ÏÒD ÿ0 ÿ ÿ»ÃÏMMAND ÅÒÒÏÒS ÌÉNK BÌÏÃK� ÿ.ÒAD50 ÿ¯ÃMů� ÿ.×ÏÒD ÿ±� ÿ.ÒAD50 ÿ¯KB¯� � ÿ.ÅVÅN� ÌBÌSBÆ: ÿ.×ÏÒD ÿ²0.¬0¬²0. ÿ»ÌÉSÔÉNG Bò; 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 SõUÆÆÅÒ� ÿ.BYÔÅ ÿSPAÃŬSPAÃŬSPAÃŬSPAÃŬSPAÃÅ� ÌBÌSNÏ: ÿ.BYÔÅ ÿ0¬0¬0¬0¬0 ÿ»ÏBÊÅÃÔ MÏDUÌÅ NUMBÅÒ� ÌBÌSSP: ÿ.BYÔÅ ÿSPAÃŬSPAÃÅ� ÌBÌSNM: ÿ.×ÏÒD ÿ0¬0¬0 ÿ ÿ»ÏBÊÅÃÔ MÏDUÌÅ NAMÅ� ÌBÌSÔM: ÿ.BYÔÅ ÿÃÒ¬ÌÆ� � ÿ.ÅVÅN� � ÌBÌSÔB: ÿ.×ÏÒD ÿ²6.¬0¬²6. ÿ»ÌÉSÔÉNG ÔÉÔÌÅ� ÿ.BYÔÅ ÿÃÒ¬ÌÆ¬ÃÒ¬ÌÆ¬ÃÒ¬ÌÆ� ÿ.BYÔÅ ÿSPAÃŬSPAÃŬSPAÃŬSPAÃŬSPAÃŬSPAÃÅ� ÌBÌSÔN: ÿ.×ÏÒD ÿ0¬0¬0� ÿ.BYÔÅ ÿ'.¬0¬0¬0� ÿ.BYÔÅ ÿÃÒ¬ÌÆ¬ÃÒ¬ÌÆ� � ÿ.ÅVÅN� � � ÌBÌSHB: ÿ.×ÏÒD ÿ¸.¬0¬¸. ÿ ÿ»ÔÏP ÏÆ PAGÅ ÃÏNÔÒÏÌ� ÿ.BYÔÅ ÿÃÒ¬ÌÆ¬ÃÒ¬ÌÆ¬ÃÒ¬ÌÆ¬ÃÒ¬ÌÆ� � � ÿ.ÅVÅN� � � ÌBÅÒNÏö 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ÅÒ� ÌBÆÔÃD: ÿ.×ÏÒD ÿ0 ÿ ÿ»ÆÏÒ ÆAÔA̠ɯϠÅÒÒÏÒS� ÌBSÅM: ÿ.×ÏÒD ÿÃMBUÆH ÿ ÿ»ÉNÔÅÒÆAÃÅ ÔÏ ÃÏMMAND SÅMANÔÉÃS� ÿ.×ÏÒD ÿ0¬0� ÌBÆÌBÆ: ÿ.×ÏÒD ÿMAØÌÉN¬±¬0 ÿ»ÆÉÌÅ BUÆÆÅÒ� ÌBÆDÔA: ÿ ÿ ÿ ÿ»ÆÉÒSÔ DAÔA� .½.+MAØÌÉN� � ÿ.ÅVÅN� »ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª� ÌØÅÒBÆ: ÿ.×ÏÒD ÿ±3¬²0¬±3� ÌØÅÒÆÌ: ÿ.×ÏÒD ÿ0¬0¬0� ÌØÅÒÅØ: ÿ.BYÔÅ ÿ'.¬0¬0¬0� ÿ.BYÔÅ ÿVÅÒÔAB� ÿ.ÅVÅN� »ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª� � � � ÌBÔMBÆ: ÿ.×ÏÒD ÿMAØÌÉN¬±¬0 ÿ»ÔÅMPÏÒAÒY BUÆÆÅÒ� ÌBÔMDÔ:� .½.+MAØÌÉN� � � ú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ý� ÿ.ÅVÅN� � BÌKBUÆ: ÿ.×ÏÒD ÿ0¬0¬0 ÿ ÿ»ÆÏÒ BÌANK ÅÒÒÏÒ ÉNÆÏ� � � ÿ.ÅVÅN� � ÌBPGND: ÿ.×ÏÒD ÿ²¬0¬² ÿ ÿ»PAGÅ ÅND ÃÏNÔÒÏÌ� ÿ.BYÔÅ ÿÆÆ¬±3� � ÌBÏBÊ: ÿ.ÒAD50 ÿ¯ÏBʯ� ÿ.ÒAD50 ÿ¯MÏD¯� ÿ.ÒAD50 ÿ¯ÌSÔ¯� � ÿ.ÅVÅN� � � � � ÌÉBHDÒ: ÿ.×ÏÒD ÿ±0¬±¬±0 ÿ ÿ»ÆÉÒSÔ ÌÉNÅ ÏÆ A ÌÉBÒAÒY� ÿ.×ÏÒD ÿBÅGÌÉB¬0¬0¬0� � � � � ÿ.ÅVÅN� ÌBÃAÔ: ÿ.BYÔÅ ÿ0 ÿ ÿ»¯Ã ÉNDÉÃAÔÏÒ (ÆUÔUÒÅ USÅ©� ÌBDÅÌ: ÿ.BYÔÅ ÿ0 ÿ ÿ»¯DÌ ÉNDÉÃAÔÏÒ� ÌBNMÃH: ÿ.BYÔÅ ÿ0 ÿ ÿ»ÏUÔPUÔ ÌÉB NAMÅ ÃHANGÅD ÉNDÃÔÒ� ÌBPASS: ÿ.BYÔÅ ÿ0 ÿ ÿ»PASS ÉNDÉÃAÔÏÒ� ÌBÅDÉÒ: ÿ.BYÔÅ ÿ0 ÿ ÿ»ÅND Dþ2 ÿ ÿ ÿ;SECOND TIME THRU GET1: ÿCLR ÿCOUNT ÿ ÿ ÿ;FIRST TIME ÿMOV ÿ#ENDTIB,NL ÿ ÿ;ACCEPT 21 CHAR SEARCH OBJECT ÿRTS ÿR5 GEXIT: ÿCLRB ÿYNKFLG ÿCLR ÿ-(SP) ÿMOV ÿ#1307,-(SP) ÿ;ERROR W307, SEARCH FAILURE ÿBR ÿGEXIT2 GEXIT1: ÿCLR ÿ-(SP) ÿMOV ÿ#1317,-(SP) ÿ;ERROR W317, ILLEGAL COMMAND GEXIT2: ÿIOT ÿTST ÿ(SP)+ ÿJMP ÿBERR ÿ ÿ ÿ;LOOP BEGINS HERE ÿ ÿ ÿ;DOT=ADR OF BEGINNING SEQ IN PGB ÿ ÿ ÿ;ADR=TIB ÿ ÿ ÿ;ARG=# OF TIMES TOÿOT 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 ÿCOMPÉÒÅÃÔÏÒY ÉNDÉÃAÔÏÒ� ÌBÅÏÆ: ÿ.BYÔÅ ÿ0 ÿ ÿ»ÅÏÆ ÉNDÉÃAÔÏÒ� ÒÅNMÆG: ÿ.×ÏÒD ÿ0� ÌBÔNAM: ÿ.×ÏÒD ÿ0¬0 ÿ ÿ»ÔÅMP ÆÏÒ ÏBÊ MÏD NAMÅ� GÃÏUNÔ: ÿ.×ÏÒD ÿ0 ÿ ÿ»ÃÏUNÔS GÌÏBAÌS ÏN ÔHÅ SÔAÃK� � ÿ.ÅVÅN� � ÌÉB00: ÿ ÿ ÿ ÿ»SÔAÒÔ� ÿMÏV ÿ£ÌÉBÒ¬Ò6 ÿ»ÉNÉÔÉAÌÉZÅ SÔAÃK PÏÉNÔÅÒ� ÿMÏV ÿ£ÌBÅÒØÔ¬-(Ò6©� ÿMÏV ÿ£²¬-(Ò6©� ÿÒÅSADÒ ÿ ÿ ÿ»SÅÔ ÒÅSÔAÒÔ ADDÒÅSS� ÿÃÌÒ ÿÌBÃAÔ ÿ ÿ»ZÅÒÏ AÌÌ ÉNDÉÃAÔÏÒS� ÿÃÌÒ ÿÌBNMÃH� ÿÃÌÒ ÿÌBÅDÉÒ� ÿÃÌÒ ÿÏÌÌB� ÿÃÌÒ ÿÉÌÌB� ÿÃÌÒ ÿÒÅNMÆG� ÿÃÌÒ ÿÉÆÌB� ÿÃÌÒ ÿÌÌÌB� ÿMÏV ÿ£ÌØÅÒÆÌ¬Ò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©+ ÿ ÿ»ÉNÉÔÉAÌÉZÅ ÅÒÒÏÒ BUÆÆÅÒ� ÿÃÌÒ ÿ(Ò5©+� ÿÃÌÒ ÿ(Ò5©+� ÿÃÌÒ ÿÀÒ5� ÿMÏVB ÿ£'.¬ÌØÅÒÅØ� ÿMÏV ÿ£SPSP¬ÌBÆÔÃD� ÿMÏVB ÿ£'.¬ÌBÌSÔN+6� ÿMÏV ÿ£ÃMÅB¬-(Ò6©� ÿÉNÉÔ� ÌBNÏÉD: ÿÊMP ÿÌBGÏÉD� ÌBGÏÉD: ÿMÏV ÿ£ÌBÔÉÔ̬-(Ò6© ÿ»PÒÉNÔ ÏUÔ ÔÉÔÌÅ� ÿMÏV ÿ£ÃMÅB¬-(Ò6©� ÿ×ÒÉÔÅ� ÿADD ÿ£²0¬ÌBNÏÉD+²� ÌÉB05: ÿMÏV ÿ£ÌBÃMSG¬-(Ò6©� ÿMÏV ÿ£ÃMÅB¬-(Ò6© ÿ»ASK ÆÏÒ ÃÏMMANDS� ÿ×ÒÉÔÅ� ÿMÏV ÿ£ÃMÅB¬-(Ò6© ÿ»ªªªªªªªªªªªªªªªªªªªªªª� ÿ×AÔÅ ÿ ÿ ÿ»ªªªªªªªªªªªªªªªªªªªªªª� ÿMÏV ÿ£ÃMÌB¬-(Ò6©� ÿÉNÉÔ� ÿMÏV ÿ£ÃMÆB¬-(Ò6© ÿ»ÏPÅN ÃÏMMXIT1 ÿ ÿ;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 ÆÉÌÅ� ÿMÏV ÿ£ÃMÌB¬-(Ò6©� ÿÏPÅN� ÿMÏV ÿ£ÃMBUƬ-(Ò6© ÿ»ÒÅAD ÃÏMMAND� ÿMÏV ÿ£ÃMÌB¬-(Ò6©� ÿÒÅAD� ÿMÏV ÿ£ÃMÌB¬-(Ò6©� ÿ×AÔÅ� ÿBÉÔB ÿ£ÆAÔÅÒ¬ÃMBUÆ+3 ÿ»ANY ÆAÔAÌ ÅÒÒÏÒS?� ÿBÅÑ ÿÌÉB0· ÿ ÿ»NÏ - BÒANÃH� ÿMÏV ÿ£±0¬Ò0 ÿ ÿ»SÅÔ ÃÏMMAND ÃÏDÅ� ÿMÏV ÿ£ÃMBUƬÒ3� ÿÊMP ÿÌBÆÔÅÒ ÿ ÿ»PÒÏÃÅSS ÔHÅ ÅÒÒÏÒ� ÌÉB0·: ÿMÏV ÿ£ÃMÌB¬-(Ò6© ÿ»ÃÌÏSÅ ÃÏMMAND ÆÉÌÅ� ÿÃÌÏSÅ� ÿMÏV ÿ£ÃMÌB¬-(Ò6©� ÿÒÅÌÅASÅ ÿ ÿ ÿ»ÒÅÌÅASÅ ÃÏMMAND DÅVÉÃÅ� ÿÃMPB ÿÃMBUÆ+6¬£0±5� ÿBGÔ ÿSYNÔSÔ� ÿÃMPB ÿÃMBUÆ+6¬£0±²� ÿBGÅ ÿÌÉB05� SYNÔSÔ: ÿMÏV ÿ£ÃMBUÆH¬-(Ò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 ©� ÿSYNÔAØ ÿ ÿ ÿ»ÃHÅÃK SYNÔAØ� ÿMÏV ÿ(Ò6©+¬Ò5� ÿBÅÑ ÿÌÉB±0 ÿ ÿ»BÒANÃH ÉÆ SYNÔAÃÔÉÃAÌÌY ÃÏÒÒÅÃÔ� ÿÉNà ÿÒ5� ÿMÏVB ÿ£'?¬(Ò5©+� ÿMÏVB ÿ£ÃÒ¬(Ò5©+� ÿMÏVB ÿ£ÌƬ(Ò5©+� ÿSUB ÿ£ÃMBUÆ+6¬Ò5� ÿMÏV ÿÒ5¬ÃMBUÆ+´� ÿMÏV ÿ£²0¬ÃMBUÆ+² ÿ»ÆÏÒMAÔÔÅD ASÃÉÉ ×ÒÉÔÅ� ÿMÏV ÿ£ÃMBUƬ-(Ò6©� ÿMÏV ÿ£ÃMÅB¬-(Ò6©� ÿ×ÒÉÔÅ� ÿÃÌÒ ÿÃMBUÆ+² ÿ ÿ»ÒÅSÔÏÒÅ MÏDÅ� ÿBÒ ÿÌÉB05� ÌÉB±0: ÿMÏV ÿ£ÃMÅB¬-(Ò6©� ÿÒÅÌÅASÅ� ÿMÏV ÿ£²¬ÃMBUÆH ÿ»ASK ÆÏÒ ÏUÔPUÔ� ÿMÏV ÿ£ÌBSÅM¬-(Ò6©� ÿMÏV ÿÀÒ6¬Ò²� ÿÔSÔ ÿ(Ò²©+� ÿMÏV ÿ£ÏÌÌB¬(Ò²©+� ÿMÏV ÿ£ÏÌÆ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ÅÔ ÏUÔPUÔ ÌÉBÒAÒY� ÿSÅMANÔÉÃS� ÿBÉÔ ÿ£S×ÅÒ¬(Ò6©+ ÿ»ÔÏÏ MANY S×ÉÔÃHÅS?� ÿBÅÑ ÿÌÉB±± ÿ ÿ»NÏ - BÒANÃH� ÿMÏV ÿ£´¬Ò0 ÿ ÿ»SÅÔ ÏUÔ ÌÉB ÃÏDÅ� ÿÊMP ÿÌBS×ÅÒ ÿ ÿ»PÒÏÃÅSS ÅÒÒÏÒ� ÌÉB±±: ÿMÏV ÿ£ÌÌÌB¬(Ò²©+� ÿMÏV ÿ£ÌÌÆB¬ÀÒ²� ÿÔSÔ ÿ-(Ò²© ÿ ÿ»GÅÔ ÌÉSÔÉNG SÅMANÔÉÃS� ÿMÏV ÿ£ÌBSÅM¬-(Ò6©� ÿSÅMANÔÉÃS� ÿBÉÔ ÿ£S×ÅÒ¬ÀÒ6 ÿ»ÔÏÏ MANY S×ÉÔÃHÅS?� ÿBÅÑ ÿÌÉB±² ÿ ÿ»NÏ - BÒANÃH� ÿMÏV ÿ£6¬Ò0 ÿ ÿ»SÅÔ ÌÉSÔÉNG ÃÏDÅ� ÿÊMP ÿÌBS×ÅÒ ÿ ÿ»PÒÏÃÅSS ÅÒÒÏÒ� ÌÉB±²: ÿÔSÔ ÿ(Ò6©+ ÿ ÿ»MÏÒÅ ÏUÔPUÔ?� ÿBNÅ ÿÌÉB±3 ÿ ÿ»NÏ - BÒANÃH� ÿÊ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ÏÆÅÒ ÿ ÿ»ÏUÔPUÔÆÉÌÅ ÅÒÒÏÒ� ÌÉB±3: ÿÃÌÒ ÿÃMBUÆH ÿ ÿ»ASK ÆÏÒ ÉNPUÔ� ÿMÏV ÿ£ÉÌÌB¬(Ò²©+� ÿMÏV ÿ£ÉÌÆB¬ÀÒ²� ÿÔSÔ ÿ-(Ò²© ÿ ÿ»GÅÔ ÉNPUÔ ÌÉBÒAÒY� ÿMÏV ÿ£ÌBSÅM¬-(Ò6©� ÿSÅMANÔÉÃS� ÿBÉÔ ÿ£S×ÅÒ¬(Ò6©+ ÿ»ÔÏÏ MANY S×ÉÔÃHÅS?� ÿBÅÑ ÿÌÉB±5 ÿ ÿ»NÏ - BÒANÃH� ÿMÏV ÿ£²¬Ò0 ÿ ÿ»SÅÔ ÉNPUÔ ÌÉB ÃÏDÅ� ÿÊMP ÿÌBS×ÅÒ ÿ ÿ»PÒÏÃÅSS ÅÒÒÏÒ� ÌÉB±5: ÿMÏV ÿ£ÉÆÌB¬(Ò²©+� ÿMÏV ÿ£ÉÆÆB¬ÀÒ² ÿ»GÅÔ ÆÉÒSÔ ÉNPUÔ ÆÉÌÅ� ÌÉB±6: ÿMÏV ÿ£ÌBSÅM¬-(Ò6©� ÿSÅMANÔÉÃS� ÿBÉÔ ÿ£S×ÅÒ¬ÀÒ6 ÿ»ÔÏÏ MANY S×ÉÔÃHÅS?� ÿBÅÑ ÿÌÉB±· ÿ ÿ»NÏ - BÒANÃH� ÿÃÌÒ ÿÒ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 UND»SÅÔ ÉNPUÔ ÆÉÌÅ ÃÏDÅ� ÿÊMP ÿÌBS×ÅÒ ÿ ÿ»PÒÏÃÅSS ÅÒÒÏÒ� ÌÉB±·: ÿÔSÔ ÿÉÆÌB+6 ÿ ÿ»ANYÔHÉNG ÔHÅÒÅ?� ÿBÅÑ ÿÌÉB²0 ÿ ÿ»NÏ - BÒANÃH� ÿÔSÔ ÿ(Ò6©+� ÿBÒ ÿÌÉB²5� ÌÉB²0: ÿÔSÔ ÿ(Ò6©+ ÿ ÿ»MÏÒÅ ÔÏ ÃÏMÅ?� ÿBÅÑ ÿÌÉB±6 ÿ ÿ»YÅS - BÒANÃH� ÌÉB²5: ÿÊSÒ ÿPìÉÌBS× ÿ»ÃHÅÃK ÉNPUÔ ÌÉBÒ S×ÉÔÃHÅS� ÿÔSÔ ÿÏÌÌB+6 ÿ ÿ»ÏUÔPUÔ ÌÉBÒ SPÅÃÉÆÉÅD?� ÿBNÅ ÿÌÉB35 ÿ ÿ»YÅS - BÒANÃH� ÿÔSÔ ÿÉÆÌB+6� ÿBÅÑ ÿÌÉB²6� ÿÃÌÒ ÿÒ0� ÿÊMP ÿÌBSMÅÒ ÿ ÿ»ÔHÅN MUSÔ HAVÅ NÏ ÉNPUÔ� ÌÉB²6: ÿÔSÔ ÿÉÌÌB+6 ÿ ÿ»ÆÉÌÅS¬ AN ÉNPUÔ ÌÉBÒ ×ÉÔH� ÿBNÅ ÿÌÉB²¸� ÌÉB²·: ÿMÏV ÿ£²¬ ÿ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Ï ¯D¬AND A ÌÉSÔÉNG� ÌÉB²¸: ÿÔSÔ ÿÒ± ÿ ÿ»ÒÅÑUÅSÔ¬ ÅÌSÅ SÅMANÔÉàÅÒÒÏÒ� ÿBNÅ ÿÌÉB²·� ÌÉB30: ÿÔSÔ ÿÌÌÌB+6� ÿBNÅ ÿÌÉB3²� ÿMÏV ÿ£6¬Ò0� ÿÊMP ÿÌBSMÅÒ� ÌÉB3²: ÿÊMP ÿÌBÌÉSÔ ÿ ÿ»GÏ ÔÏ ÌÉSÔÉNG� ÌÉB35: ÿÔSÔ ÿÉÆÌB+6 ÿ ÿ»ÉÆ NÏ ÉNPUÔ ÆÉÌÅS¬ ÔHÅN� ÿBNÅ ÿÌÉB´0 ÿ ÿ»MUSÔ HAVÅ ÉNPUÔ ÌÉBÒ ×ÉÔH� ÿÔSÔ ÿÒ± ÿ ÿ»¯D¬ ÅÌSÅ SÅMANÔÉàÅÒÒÏÒ� ÿBÅÑ ÿÌÉB²·� ÿÊMP ÿÌBDÌÏM ÿ ÿ»GÏ ÔÏ DÅÌÅÔÅ ÏBÊ MÏDUÌÅS� ÌÉB´0: ÿÔSÔ ÿÉÌÌB+6 ÿ ÿ»ÉÆ NÏ ÉNPUÔ ÌÉBÒ¬ ÔHÅN� ÿBNÅ ÿÌÉB´5 ÿ ÿ»GÏ ÔÏ ÃÒÅAÔÅ ÌÉBÒAÒY� ÿÊMP ÿÌBÃÒÔ� ÌÉB´5: ÿÔ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Ô ÿÒ± ÿ ÿ»ÉÆ ¯D¬ ÔHÅN SÅMANÔÉàÅÒÒÏÒ� ÿBNÅ ÿÌÉB²· ÿ ÿ»ÅÌSÅ GÏ ÔÏ ÒÅPÌAÃÅ ÏÒ� ÿÊMP ÿÌBÒÏÒÉ ÿ ÿ»ÉNSÅÒÔ ÏBÊÅÃÔ MÏDUÌÅS� � � � � � � ÌBS×ÅÒ: ÿ ÿ ÿ ÿ»S×ÉÔÃH ÅÒÒÏÒ PÒÏÃÅSSÏÒ� ÿMÏV ÿ£²²03¬ÌBÅÒNÏ� ÌBS×00: ÿMÏV ÿÌBÃDÔB(Ò0©¬Ò² ÿ»PÏÉNÔ AÔ ÅÒÒÏÒÅD ÆÉÌÅ BÌK� ÌBS×05: ÿMÏV ÿ£ÌØÅÒÆÌ¬Ò´ ÿ»ÃÏNVÅÒÔ AND ÉNSÅÒÔ� ÿÊSÒ ÿPìÌBÅÒNM ÿ»ÆÉÌÅ NAMÅ� ÌBS×0·: ÿÃÌÒ ÿ-(Ò6©� ÿMÏV ÿÌBÅÒNϬ-(Ò6©� ÿBÒ ÿÌBSÅ00� � � ÌBÃDÔB: ÿ.×ÏÒD ÿÉÆÆB� ÿ.×ÏÒD ÿÉÌÆB� ÿ.×ÏÒD ÿÏÌÆB� ÿ.×ÏÒD ÿÌÌÆB� ÿ.×ÏÒD ÿÃMÆB� ÿ.×ÏÒD ÿBÌKBUÆ� � � Ì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Ò ÅÒÒÏÒ PÒÏÃÅSSÏÒ� ÿMÏV ÿ£²²´6¬ÌBÅÒNÏ ÿ»ÉNSÅÒÔ ÃÏDÅ� ÿÊSÒ ÿPìNAMÃÌÒ ÿ»ÃÌÅAÒ ÔHÅ ÆÉÌÅ NAMÅ BUÆÆÅÒ� ÿBÒ ÿÌBS×0·� � � ÌBÆÔÅÒ: ÿ ÿ ÿ ÿ»ÆAÔA̠ɯϠÅÒÒÏÒS� ÿMÏV ÿ£²²0²¬ÌBÅÒNÏ ÿ»ÉNSÅÒÔ ÃÏDÅ� ÿMÏV ÿÌBÃDÔB(Ò0©¬Ò²� ÿMÏV ÿ£ÌØÅÒÆÌ¬Ò´� ÿÊSÒ ÿPìÌBÅÒNM ÿ»ÅNÔÅÒ ÆÉÌNAM ÉN ÅÒÒÏÒ BUÆ� ÿÃÌÒ ÿ-(Ò6©� ÿMÏVB ÿ3(Ò3©¬ÀÒ6� ÿMÏV ÿÌBÅÒNϬ-(Ò6©� ÿBÒ ÿÌBSÅ00� � � � ÌBÏÆÅÒ: ÿMÏV ÿ£²²0´¬ÌBÅÒNÏ� ÿÊSÒ ÿPìNAMÃÌÒ� ÿBÒ ÿÌBS×0·� ÌBÉÆÅÒ: ÿ ÿ ÿ ÿ»ÉNPUÔ ÆÉÌÅ ÅÒÒÏÒ PÒÏÃÅSSÏÒ� ÿMÏV ÿ£²²±3¬ÌBÅÒNÏ ÿ»É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Ò ÿÌBS×00� � � ÌBSMÅÒ: ÿ ÿ ÿ ÿ»SÅMANÔÉàÅÒÒÏÒ PÒÏÃÅSSÏÒ� ÿMÏV ÿ£²²03¬ÌBÅÒNÏ ÿ»ÉNSÅÒÔ ÃÏDÅ� ÿBÒ ÿÌBS×00� ÌBSÅ00: ÿMÏV ÿ£ÃMÅB¬-(Ò6©� ÿÉNÉÔ ÿ ÿ ÿ»ÉNÉÔ ÅÒÒÏÒ DÅVÉÃÅ� ÿMÏV ÿ£ÌØÅÒBƬ-(Ò6© ÿ»SÅND ÅÒÒÏÒ MÅSSAGÅ� ÿMÏV ÿ£ÃMÅB¬-(Ò6©� ÿ×ÒÉÔÅ� � ÿMÏV ÿ£ÃMÅB¬-(Ò6© ÿ»ªªªªªªªªªªªªªªªªªªªªª� ÿ×AÔÅ ÿ ÿ ÿ»ªªªªªªªªªªªªªªªªªªªªª� ÿÉÏÔ� � � � ÌBÅÒØÔ: ÿ ÿ ÿ ÿ»ÅÒÒÏÒ ÅØÉÔ� ÿÔSÔ ÿÏÌÌB ÿ ÿ»ÏUÔPUÔ ÌÉBÒ DÅVÉÃÅ ÉNÉÔÅD?� ÿBÅÑ ÿÌBÒØ00 ÿ ÿ»NÏ - BÒANÃH� ÿMÏV ÿ£ÏÌÆB¬-(Ò6© ÿ»ÏUÔPUÔ ÌÉBÒAÒY ÏPÅN?� ÿMÏV ÿ£ÏÌÌ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-©� ÿDSÒÃH� ÿÔSÔ ÿ(Ò6©+� ÿBÉÔ ÿ£ÆÉÌÏPN¬(Ò6©+� ÿBÅÑ ÿÌBÒØÏÌ ÿ ÿ»NÏ - BÒANÃH� ÿMÏV ÿ£ÏÌÌB¬-(Ò6©� ÿÃÌÏSÅ ÿ ÿ ÿ»DÅÌÅÔÅ ÏUÔPUÔ ÌÉBÒ� ÿMÏV ÿ£ÏÌÆB¬-(Ò6© ÿ»AND ÒÅÌÅASÅ DÅVÉÃÅ� ÿMÏV ÿ£ÏÌÌB¬-(Ò6©� ÿDÅÌÅÔÅ� ÌBÒØÏÌ: ÿMÏV ÿ£ÏÌÌB¬-(Ò6©� ÿÒÅÌÅASÅ� ÌBÒØ00: ÿÔSÔ ÿÉÌÌB ÿ ÿ»ÉNPUÔ ÌÉBÒ DÅVÉÃÅ ÉNÉÔÅD?� ÿBÅÑ ÿÌBÒØ05 ÿ ÿ»NÏ - BÒANÃH� ÿMÏV ÿ£ÉÌÆB¬-(Ò6© ÿ»ÉNPUÔ ÌÉBÒAÒY ÏPÅN?� ÿMÏV ÿ£ÉÌÌB¬-(Ò6©� ÿDSÒÃH� ÿÔSÔ ÿ(Ò6©+� ÿBÉÔ ÿ£ÆÉÌÏPN¬(Ò6©+� ÿBÅÑ ÿÌBÒØÉÌ ÿ ÿ»NÏ - BÒANÃH� ÿMÏV ÿ£ÉÌÌ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ÒØÉÌ: ÿMÏV ÿ£ÉÌÌB¬-(Ò6© ÿ»ÒÅÌÅASÅ DÅVÉÃÅ� ÿÒÅÌÅASÅ� ÌBÒØ05: ÿÔSÔ ÿÉÆÌB ÿ ÿ»ÉNPUÔ ÆÉÌÅ DÅVÉÃÅ ÉNÉÔÅD?� ÿBÅÑ ÿÌBÒØ±0 ÿ ÿ»NÏ - BÒANÃH� ÿMÏV ÿ£ÉÆÆB¬-(Ò6© ÿ»ÉNPUÔ ÆÉÌÅ ÏPÅN?� ÿMÏV ÿ£ÉÆÌB¬-(Ò6©� ÿDSÒÃH� ÿÔSÔ ÿ(Ò6©+� ÿBÉÔ ÿ£ÆÉÌÏPN¬(Ò6©+� ÿBÅÑ ÿÌBÒØÉÆ ÿ ÿ»NÏ BÒANÃH� ÿMÏV ÿ£ÉÆÌB¬-(Ò6© ÿ»ÃÌÏSÅ ÆÉÌÅ AND� ÿÃÌÏSÅ ÿ ÿ ÿ»ÒÅÌÅASÅ DÅVÉÃÅ� ÌBÒØÉÆ: ÿMÏV ÿ£ÉÌÌB¬-(Ò6©� ÿÒÅÌÅASÅ� ÌBÒØ±0: ÿÔSÔ ÿÌÌÌB ÿ ÿ»ÌÉSÔÉNG DÅVÉÃÅ ÉNÉÔÅD?� ÿBÅÑ ÿÌBÒØ±5 ÿ ÿ»NÏ - BÒANÃH� ÿMÏV ÿ£ÌÌÆB¬-(Ò6© ÿ»ÌÉSÔÉNG ÆÉÌÅ ÏPÅN?� ÿMÏV ÿ£ÌÌÌ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©� ÿDSÒÃH� ÿÔSÔ ÿ(Ò6©+� ÿBÉÔ ÿ£ÆÉÌÏPN¬(Ò6©+� ÿBÅÑ ÿÌBÒØÌÆ ÿ ÿ»NÏ - BÒANÃH� ÿMÏV ÿ£ÌÌÌB¬-(Ò6©� ÿÃÌÏSÅ� ÿMÏV ÿ£ÌÌÆB¬-(Ò6© ÿ»DÅÌÅÔÅ ÆÉÌÅ AND� ÿMÏV ÿ£ÌÌÌB¬-(Ò6© ÿ»ÒÅÌÅASÅ DÅVÉÃÅ� ÿDÅÌÅÔÅ� ÌBÒØÌÆ: ÿMÏV ÿ£ÌÌÌB¬-(Ò6©� ÿÒÅÌÅASÅ� ÌBÒØ±5: ÿÔSÔ ÿÃMÅB ÿ ÿ»ÅÒÒÏÒ DÅVÉÃÅ ÉNÉÔÅD?� ÿBÅÑ ÿÌBÒØ²0 ÿ ÿ»×ÏN'Ô BÅ ÏN ÒÅSÔAÒÔ� ÿMÏV ÿ£ÃMÅB¬-(Ò6©� ÿÒÅÌÅASÅ� ÌBÒØ²0: ÿÊMP ÿÌÉB00� NAMÃÌÒ: ÿMÏV ÿ£ÌØÅÒÆÌ¬Ò² ÿ»ÒÏUÔÉNÅ ÔÏ ÃÌÅAÒ ÆÉÌÅ NAMÅ BUÆÆÅÒ� ÿ ÿ ÿ ÿ ÿ»ÆÏÒ ÅÒÒÏÒ ÒÅPÏÒÔÉNG� ÿÃÌÒ ÿ(Ò²©+� ÿÃÌÒ ÿ(Ò²©+� ÿÃÌÒ ÿ(Ò²©+� ÿÃÌÒ 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ÊÅÃÔ MÏDUÌÅS   ªªªªª� � � ÌBDÌÏM: ÿÊSÒ ÿPìÌBÉÌÉN ÿ»ÉNÉÔÉAÌÉZÅ ÉNPUÔ ÌÉBÒ� ÿÊSÒ ÿPìÌBÏÌÉN ÿ»ÉNÉÔÉAÌÉZÅ ÏUÔPUÔ ÌÉBÒ� ÌÉBD00: ÿMÏV ÿ£ÉÌÌB+±0¬Ò´� ÌÉBD05: ÿMÏV ÿÀÒ´¬Ò5 ÿ ÿ»MÏÒÅ S×ÉÔÃHÅS ÏN ÉNPUÔ ÌÉBÒ?� ÿBÅÑ ÿÌÉBD²5 ÿ ÿ»NÏ - BÒANÃH� ÿASÌ ÿÒ5� ÿADD ÿÒ5¬Ò´ ÿ ÿ»PÏÉNÔ AÔ S×ÉÔÃH� ÿMÏV ÿÒ´¬-(Ò6©� ÿADD ÿ£²¬ÀÒ6 ÿ ÿ»SAVÅ PÏÉNÔÅÒ ÔÏ NÅØÔ ÏNÅ� ÿÃMP ÿ£DÅÌÏM¬ÀÒ´ ÿ»ÉS ÉÔ ¯D?� ÿBÅÑ ÿÌÉBD±5 ÿ ÿ»YÅS - BÒANÃH� ÌÉBD±0: ÿMÏV ÿ(Ò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 ÿ ÿ»ÔÒY NÅØÔ ÏNÅ� ÌÉBD±5: ÿASÒ ÿÒ5� ÿDÅà ÿÒ5 ÿ ÿ»ANY VAÌUÅS?� ÿBNÅ ÿÌÉBD²0 ÿ ÿ»YÅS - BÒANÃH� ÌÉBD±·: ÿMÏV ÿ£²¬Ò0 ÿ ÿ»SÅÔ ÉNPUÔ ÌÉBÒAÒY ÃÏDÅ� ÿÊMP ÿÌBS×ÅÒ ÿ ÿ»S×ÉÔÃH ÅÒÒÏÒ� ÌÉBD²0: ÿÊSÒ ÿPìÌBPKÏM ÿ»PAÃK NAMÅ ÏÆ ÏBÊ MÏD� ÿÊSÒ ÿPìÌÉBDÏM ÿ»ÃAÌÌ DÅÌÅÔÅ ÏBÊÅÃÔ MÏDUÌÅ� ÿDÅà ÿÒ5 ÿ ÿ»MÏÒÅ ÏM'S ÔÏ DÅÌÅÔÅ?� ÿBNÅ ÿÌÉBD²0 ÿ ÿ»YÅS - BÒANÃH� ÿBÒ ÿÌÉBD±0� ÌÉBD²5: ÿÔSÔB ÿÌBPASS ÿ ÿ»DÏNÅ YÅÔ?� ÿBNÅ ÿÌÉBD´0 ÿ ÿ»YÅS - BÒANÃH� ÌÉBD30: ÿÊSÒ ÿPìÌBD×ÒÔ ÿ»ÆÉNÉSH ×ÒÉÔÉNG DÉÒÅÃÔÏÒY� ÿÉNÃB ÿÌ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� ÌÉBD´0: ÿÔSÔB ÿÌBÅÏÆ� ÿBÅÑ ÿÌÉBD´5� ÿÃÌÒB ÿÌBÅÏÆ ÿ ÿ»ÃÌÅAÒ ÅÏÆ ÉNDÉÃAÔÏÒ� ÿÊMP ÿÌBÅØÉÔ ÿ ÿ»GÏ ÔÏ ÅØÉÔ PÒÏÃÅSSÏÒ� ÌÉBD´5: ÿÊSÒ ÿPìÌBNØÔÅ ÿ»ÆÉNÉSH ×ÒÉÔÉNG ÏBÊ MÏDUÌÅS� ÿBÒ ÿÌÉBD´0� � � » ÿªªªªª   ÃÒÅAÔÅS A ÌÉBÒAÒY   ªªªªª� � ÌBÃÒÔ:� ÿÊSÒ ÿPìÌBÏÌÉN ÿ»ÉNÉÔÉAÌÉZÅ ÏUÔPUÔ ÌÉBÒAÒY� ÌBÃÌ00: ÿÔSÔ ÿÉÆÌB+±0 ÿ ÿ»ANY S×ÉÔÃHÅS ÏN ÉNPUÔ ÆÉÌÅ?� ÿBÅÑ ÿÌBÃÌ0² ÿ ÿ»NÏ - BÒANÃH� ÿÃÌÒ ÿÒ0 ÿ ÿ»SÅÔ ÉNPUÔ ÆÉÌÅ ÃÏDÅ� ÿÊMP ÿÌBSMÅÒ ÿ ÿ»SÅMANÔÉàÅÒÒÏÒ� ÌBÃÌ0²: ÿÊSÒ ÿPìÌBÉNÉN ÿ»ÉNÉÔÉAÌÉZÅ É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 CÿR2 ÿ ÿ;2*R2 ÿASL ÿR2 ÿ ÿ;4*R2 ÿASL ÿR2 ÿ ÿ;8*R2 ÿMOV ÿR2,-(SP) ÿ ÿ;STACK 8*R2 ÿASL ÿR2 ÿ ÿ;16.*R2 ÿASL ÿR2 ÿ ÿ;32.*R2 ÿADD ÿ(SP)+,R2 ÿ;40.*R2 ; ÿINCLUDE CURRENT CHARACTER ÿADD ÿR3,R2 ÿINC ÿÿR4 ÿ ÿ;DONE 3 CHARS? ÿBLT ÿPACK05 ÿ ÿ;NO ÿMOV ÿR2,(R0)+ ÿ;YES-STORE MOD40 WORD ÿRTS ÿPC ÿ ÿ;EXIT ; ; ÿMOD40 UNPACK - ENTERED VIA JSR PC,UNPA00 ; ; ÿINPUT: ÿR0=ADR OF MOD40 NUMBER (1 WORD) ; ÿ ÿR1=ADR OF ASCII STRING (3 BYTES) ; ; ÿ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Ô ÆÉÌÅ� ÌBÃÌ03: ÿÔSÔB ÿÌBPASS ÿ ÿ»PASS ÏNÅ?� ÿBNÅ ÿÌBÃÌ05 ÿ ÿ»NÏ - BÒANÃH� ÿÊSÒ ÿPìÌBÃDÉÒ ÿ»ÃÒÅAÔÅ DÉÒÅÃÔÏÒY ÅNÔÒY� ÿBÒ ÿÌBÃ̱0� ÌBÃÌ05: ÿÊSÒ ÿPìÌBÃÏM ÿ»ÃÒÅAÔÅ ÏBÊ MÏDUÌÅ ÅNÔÒY� ÌBÃ̱0: ÿÊSÒ ÿPìÌBÉNÆÌ ÿ»ÒÅAD NÅØÔ ÌÉNÅ ÏÆ ÉNPUÔ ÆÉÌÅ� ÿBÉÔB ÿ£ÅÏÆ¬3(Ò3© ÿ»ÅÏÆ?� ÿBNÅ ÿÌBÃ̱3 ÿ ÿ»YÅS - BÒANÃH� ÿÃMP ÿ£GSD¬ÌBÆDÔA ÿ»ÉNPUÔ ÆÉÌÅ ÅÒÒÏÒ ÉÆ ÆÉÒSÔ� ÿBÅÑ ÿÌBÃÌ03 ÿ ÿ»ÌÉNÅ ÉS NÏÔ A GSD ÌÉNÅ� ÿÊMP ÿÌBÉÆÅÒ� ÌBÃ̱3: ÿÊSÒ ÿPìÌBÉNÒÌ ÿ»GÅÔ NÅØÔ ÉNPUÔ ÆÉÌÅ� ÿÔSÔ ÿÉÆÌB+6 ÿ ÿ»ÉS ÔHÅÒÅ ÏNÅ?� ÿBNÅ ÿÌBÃÌ00 ÿ ÿ»YÅS - BÒAFMAX ÿ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 ÿINÃH� ÿÔSÔB ÿÌBPASS ÿ ÿ»×AS ÔHÉS PASS Ô×Ï?� ÿBÅÑ ÿÌBÃ̱5 ÿ ÿ»NÏ - BÒANÃH� ÿÊMP ÿÌBÅØÉÔ ÿ ÿ»GÏ ÔÏ ÅØÉÔ PÒÏÃÅSSÏÒ� ÌBÃ̱5: ÿÉNÃB ÿÌBPASS ÿ ÿ»SÅÔ PASS Ô×Ï� ÿMÏV ÿ£ÌBÆDÔA¬Ò3� ÿMÏV ÿ£ÅDÉÒ¬ÀÒ3 ÿ»×ÒÉÔÅ ÔHÅ ÅND DÉÒ ÌÉNÅ� ÿMÏV ÿ£²¬-(Ò3©� ÿÃMP ÿ-(Ò3©¬-(Ò3©� ÿÊSÒ ÿPìÌBÏÔ×Ò� ÿÊSÒ ÿPìÌBÒSÔ ÿ»ÒÅSÅÔ ÉNPUÔ AND ÏUÔPUÔ PÔÒS� ÿÊSÒ ÿPìÌBÉÒÌ ÿ»GÅÔ ÆÉÒSÔ ÉNPUÔ ÆÉÌÅ SÅMANÔÉÃS� ÿBÒ ÿÌBÃÌ00� ÿ.ÅÏÔ� � 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� � » ÿªªªªª   ÉNSÅÒÔS ÏÒ ÒÅPÌAÃÅS ÏBÊÅÃÔ MÏDUÌÅS   ªªªªª� � � ÌBÒÏÒÉ:� ÿÊSÒ ÿPìÌBÉÌÉN ÿ»ÉNÉÔÉAÌÉZÅ ÉNPUÔ ÌÉBÒ� ÿÊSÒ ÿPìÌBÏÌÉN ÿ»ÉNÉÔÉAÌÉZÅ ÏUÔPUÔ ÌÉBÒ� ÌBÒÉ: ÿMÏV ÿ£±¬Ò0 ÿ ÿ»ÉNÉÔÉAÌÉZÅ PÏSÉÔÉÏN PÏÉNÔÅÒ� ÌBÒÉ00: ÿÊSÒ ÿPìÌBÉNÉN ÿ»ÉNÉÔÉAÌÉZÅ ÉNPUÔ ÆÉÌÅ� ÌBÒÉ03: ÿMÏV ÿ£ÉÆÌB+±0¬Ò´� ÿMÏVN ÿ;;;;;;;;;;;;;;;;;;;;;;;;;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,-(SP³þVSAVE 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� � � ÔBAÒSÔÒ  ÏNK½ÌSSÒÅDD ANGÔÉAÒSÔÿ»Ô AÒSÔ¯þ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.Å ÿ� ÅNÅVÿ.: ÌÅÆÉÅÒ� ÌÆÒ¬ÿÃÅ YÔ.B ÿ� +6½.ÿ.: ÌBÆÉÅÒ� .¯ÿ¯É ÃÉASÿ. 6�.+.½ ÿA:ÉÌÒÆ ů�¯: ÿÉÉSÃ.A ÿ� +6½.ÿ.: ÌÃÆÉÅÒ� ÌÆÒ¬ÿÃÅ YÔ.B ÿ� -6ÉÌÒÆ-ÅÌÅÆÉÅÒ ÿ� ¬0SÃÆA ÿÔÅBYÿ. 6�Ì-ÆÉÅÒÅ-ÉÌÒÆÿÅ: ÉÌÒÆ Å»�� MÅNAÅ ÉÌ ÆÔH×ÉÅ AGSSMÅÒ ÒÏÅÒ ÿ »»�� ÔADAÿ»ÿ 0 ÿ� BÃÿ»ÿ 0 ÿ� ÉÉSàAÅDÔÔMAÏÒ»Æ ÿ ÿ¬0SÃÆA ÿÔÅBYÿ. Ã� BAØ»M ÿ ÿ ÿ+² ÿN:MÉDU� ƾ¬ÌÃÒ <ÏÒ ÆÅÒÆÆBUÔ PUÉNY MMDU ÿ »N�VÅ.Å ÿA:ÒMÒD ÏÆ�¬ÌÃÒ ÿÔÅBYÿ. ¯�      ¯  ÿÉÉSÃ.A ÿÒ:ÒÅÒD ÏÆ�¬ÌÃÒ ÿÔÅBYÿ. 6�M-DÒÏÒA-ÒMÒDÿÏ 0�ìASÿÆÅ YÔ.B ÿ� -6ÒMÒD-ÏMADÒÏÒ ÿM:DÒÏÒ� � � ÅNÅVÿ.: UÅNN 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 ÿ� ¬0SÃÆA ÿÔÅBYÿ. 6�U-NN-MUÅNNÿM: NUMN� »Å�ÑUNÉ UÏÔ NMÅNAÅ UÌÏDÿM» � » � �N�VÅ.Å ÿÅ:ÏÅÌM� ÌÆÒ¬ÿÃÅ YÔ.B ÿ� M¯ÅÏÅ UÌÏD MADÌϯ? ÿÉÉSÃ.A ÿ� ÌÆÒ¬ÿÃÅ YÔ.B ÿ� -6ÏÅÌMÅ-ÏÅÌM ÿ� ¬0SÃÆA ÿÔÅBYÿ. 6�Å-MÏ-ÌÅÅMÏÿÌ: ÏÅÌM� »Ò�ÒÏÅÒÔ PUUÔ ÏÌÅDUMÏD ÏAÿÌ» � »N�VÅ.Å ÿÅ:SM UÆ�¬ÌÃÒ ÿÔÅBYÿ. 6�.+.½ ÿB:SM U¯�¯¬ ÿÉÉSÃ.A ÿ� +6½.ÿ.: MAUS� ÌÆÒ¬ÿÃÅ YÔ.B ÿ� -6SM-UMÅUS ÿ� ¬0SÃÆA ÿÔÅBYÿ. 6�M-USÅ-SMÿU: SM U»�� GÅSAÅS MÏׯÌÅÒÏVÌ BÏYMÿS» � » � � �N VÅ.Å ÿ9:P¸MA PÆ�¬ÌÃÒ ÿÔÅBY§þbRCHAR,#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 ÿ. ¯�ZÅSÉ ÿSSÒÅDDÿAY ÔÒÅN ÿÏNÔÉÅïS ÿÉÉSÃ.A ÿ� -6¸¸APPM9-P¸MA+P ÿ� ¬0SÃÆA ÿÔÅBYÿ. 6�¸-P¸MA-P¸9APPM ÿ¸:P¸MA PN�VÅ.Å ÿ·:P¸MA PÆ�¬ÌÃÒ ÿÔÅBYÿ. ¯�AP MADÌÏÿ¯É ÃÉASÿ. Æ�¬ÌÃÒ ÿÔÅBYÿ. 6�6-P¸MA-P¸·APPMÿ+ 0�ìASÿÆÅ YÔ.B ÿ� -6¸6APPM·-P¸MAÿP: ¸6APPM� ÅNÅVÿ.: ¸5APPM� ÌÆÒ¬ÿÃÅ YÔ.B ÿ� S¯ÃÅÅNÅÒÅÆ ÒÅDÉNÅÆND¯U ÿÉÉSÃ.A ÿ� BÃÿ»6 ´-P¸MA-P¸5APPM ÿÒD×Ïÿ. 0�ìASÿÆÅ YÔ.B ÿ� AØ»M ÿ-6¸´APPM5-P¸MAÿPD ÏÒ.× ÿ´:P¸MA PN�VÅ.Å ÿ3:P¸MA PA�AÔ»D ÿ ÿ ÿ².+·½.ÿ. Ã�»B ÿ ÿÿ0D ÏÒ.× ÿ� USAÔSÔůÏD»M ÿ ÿ¬0SÃÆA ÿÔÅBYÿ. Ø�MAÿ»6 ²-P¸MA-P¸3APPM ÿ£þ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ÅÃÔ� »BÅGÉNNÉNG ÏÆ ÏVÅÒÌAY AÒÅA� »ÔHÅ SÉZÅ ÏÆ ÔHÅ ÏVÅÒÌAY AÒÅA ÉS DÅÔÅÒMÉNÅD� »BY ÔHÅ SYMBÏÌ "ÏVÒSÉZ"� »� BÅGÏVÒ:� »ÔHÅ BÅGÉNNÉNG ÒÅGÉSÔÅÒS ÏÆ ÅAÃH� »ÏVÅÒÌAY ÃÏNÔAÉN ÊMP'S ÔÏ ÔHÅ� »ÅNÔÒY PÏÉNÔS ÏÆ ÔHÅ ÏVÅÒÌAY� � ÅNÔÒY±½.� ÅNÔÒY²½.+´� ÅNÔÒÒD×Ïÿ.: ¸²APPM� ÅNÅVÿ.: ¸±APPM� ÌÆÒ¬ÿÃÅ YÔ.B ÿ� GÅSAÅS MUÔÔPÏUÿ»¯ ªªªªªªªªªªÿ¯É ÃÉASÿ. Ã�»B ÿ-6¸0APPM±-P¸MAÿPD ÏÒ.× ÿ� USAÔSÔůÏD»M ÿ ÿ¬0SÃÆA ÿÔÅBYÿ. Ø�MAÿ»6 0-P¸MA-P¸±APPM ÿÒD×Ïÿ.: ¸0APPM� »P�MA PÏÒ ÆÒSÆÅUÆ BUÔÔPÏU ÿ »»�� ÅNÅVÿ.: SÅÌMMU� ÌÆÒ¬ÿÃÅ YÔ.B ÿ� +6½.ÿ.: SAÌMMU� ¬¯ÿ¯É ÃÉASÿ. 6�.+.½ ÿB:MSUÌ MÆ�¬ÌÃÒ ÿÔÅBYÿ. Ã�»B ÿ ÿ-6SGÌMMUÅ-MSUÌÿM Å�ÏD»M ÿ ÿ¬0SÃÆA ÿÔÅBYÿ. Ø�MAÿ»ÿ 6 G-MSUÌ-MSÅÌMMU ÿG:MSUÌM� ¸.±².+.½ ÿ� ÿ0 0�N¬BÉÿÆÅ YÔ.B ÿ� -6BÌUÔÿÏ: ÔBÏU� ¸.±².+.½ ÿ� ÿ0 0�N¬BÉÿÆÅ YÔ.B ÿ� -6ŸþjGT ÿ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� ÅNÔÒY´½.+±´� ÅNÔÒY5½.+²0� ÅNÔÒY6½.+²´� ÅNÔÒY·½.+30� ÅNÔÒY¸½.+3´� ÅNÔÒY9½.+´0� ÿ.½.+ÏVÒSÉZ� »ÏVÅÒÌAY DÅVÉÃÅ ÌÉNK BÌÏÃK� »� ÿ.×ÏÒD ÿ0 ÿ ÿ»ÅÒÒÏÒ ÒÅÔUÒN ADDÒÅSS� ÏVÒÌB: ÿ.×ÏÒD ÿ0 ÿ ÿ»ÌÉNK PÏÉNÔÅÒ (DDB©� ÿ.ÒAD50 ÿ¯ÏVÒ¯ ÿ ÿ»ÌÏGÉÃAÌ DAÔA SÅÔ NAMÅ� ÿ.BYÔÅ ÿ± ÿ ÿ»DÅVÉÃÅ SPÅÃÉÆÉÅD� ÿ.BYÔÅ ÿ0 ÿ ÿ»UNÉÔ NUMBÅÒ� ÿ.ÒAD50 ÿ¯DƯ ÿ ÿ»DÅVÉÃÅ NAMÅ� »� »ÏVÅÒÌAY DÅVÉÃÅ ÆÉÌÅ BÌÏÃK� »� ÿ.×ÏÒD ÿ0 ÿ ÿ»ÅÒÒÏÒ ÒÅÔUÒN ADDÒÅSS� ÿ.BYÔÅ ÿ±3 ÿ ÿ»HÏ× ÏPÅN ÃÏÅÅ (ÏPÅNé� ÿ.BYÔÅ ÿ0 ÿ ÿ»ÅÒÒÏÒ ÒÅÔUÒN ÃÏDÅ� ÏVÒÆB: ÿ.ÒAD50 ÿ¯ÌÉNm ÿ(Ò´©+¬Ò5 ÿ»ANY S×ÉÔÃHÅS ÏN ÉNPUÔ ÆÉÌÅ?� ÿBNÅ ÿÌBÒÉ05 ÿ ÿ»YÅS - BÒANÃH� ÿÃÌÒ ÿÒ0 ÿ ÿ»SÅÔ ÉNPUÔ ÆÉÌÅ ÃÏDÅ� ÿÊMP ÿÌBSMÅÒ ÿ ÿ»SÅMANÔÉàÅÒÒÏÒ� ÌBÒÉ05: ÿDÅà ÿÒ5 ÿ ÿ»ANY VAÌUÅS?� ÿBNÅ ÿÌBÒɱ0 ÿ ÿ»YÅS - BÒANÃH� ÿÃMP ÿ£ÒPÌAÃŬÀÒ´ ÿ»ÉS ÉÔ ¯Ò?� ÿBÅÑ ÿÌBÒɱ5 ÿ ÿ»YÅS - BÒANÃH� ÿÃMP ÿ£ÉNSÅÒÔ¬ÀÒ´ ÿ»ÉS ÉÔ ¯É?� ÿBNÅ ÿÌBÒÉ30 ÿ ÿ»NÏ - S×ÉÔÃH ÅÒÒÏÒ� ÿMÏV ÿ£-±¬Ò´ ÿ ÿ»NÏ VAÌUÅ MÅANS ÉNSÅÒÔ AÔ ÅND� ÌBÒÉ0·: ÿÊSÒ ÿPìÌÉBÉÏM ÿ»ÃAÌÌ ÉNSÅÒÔ MÏDUÌÅ� ÿBÒ ÿÌBÒɲ0� ÌBÒɱ0: ÿÔSÔ ÿ(Ò´©+� ÿÃMP ÿ£ÉNSÅÒÔ¬ÀÒ´ ÿ»ÉS ÉÔ ¯É:V?� ÿBNÅn: ÿ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 BÌUÔÿÏ: ÔAÏU� � ÿ0: UÔÏ� ÔADAÿ»ÿ . ¸6+±½.ÿ. Ã�»B ÿ ÿ ÿÿ0 Å�ÏD»M ÿ ÿ¬0ÉNÆB ÿÔÅBYÿ. Ø�MAÿ»ÿ ÿ 6 N-BÌÉN ÿB:ÉN� ÔADAÿ»ÿ . ¸6+±½.ÿ. Ã�»B ÿ ÿ ÿÿ0 Å�ÏD»M ÿ ÿ¬0ÉNÆB ÿÔÅBYÿ. Ø�MAÿ»ÿ ÿ 6 N-BÌÉN ÿA:ÉN� ÿ0: ÉN� � � -²½.DÔADÔÒ ÿ� 0.+±½.ÿ.: ÒAÔÔDD� � DÒADÒ ÆÅNSÒA ÔDÔÿD» � � »D�ÏÒ ×SÔÌAN  ÉÉSA ÔÒÿ»ÿ ² .-A½ÔÒ ÿ� 0.+±½.ÿ.: ÌKABÔÒ� SSÒÅDD AÅÒSÆANÔÒÒ ÆÏA ÒÅ AVÅSA ÿ »»�� � � ÅNÅVÿ.: MØÒA ÔÆ�¬ÌÃÒ ÿÔÅBYÿ. 6�.+.½ ÿÃ:AMÔÒ�  ¯Ô:MÉÌÉH ÉG¯H ÿÉÉSÃ.A ÿ� ÌÆÒ¬ÿÃÅ YÔ.B ÿ� +6½.ÿ.: MBÒA Ô¯�: ÉÔÉM ÌÏ×¯Ì ÿÉÉSÃ.A ÿ� ›þp¯ ÿ ÿ»ÆÉÌÅNAMÅ AND ÅØÔÅNSÉÏN� ÿ.ÒAD50 ÿ¯K±±¯ ÿ ÿ»ÉN ÒADÉØ 50� ÿ.ÒAD50 ÿ¯ÏVÒ¯ ÿ ÿ»NÏÔAÔÉÏN� USÅÒÉD: ÿ.×ÏÒD ÿ0 ÿ ÿ»USÅÒ ÉD ÃÏDÅ� ÿ.BYÔÅ ÿ²33 ÿ ÿ»PÒÏÔÅÃÔ ÃÏDÅ� ÿ.BYÔÅ ÿ0� »� »ÏVÅÒÌAY DÅVÉÃÅ ÉNPUÔ ÔÒAN BÌÏÃK� »� ÏVÒÔBÉ: ÿ.×ÏÒD ÿ0 ÿ ÿ»DÅVÉÃÅ BÌÏÃK NUMBÅÒ� ÿ.×ÏÒD ÿBÅGÏVÒ ÿ ÿ»MÅMÏÒY SÔAÒÔ ADDÒÅSS� ÿ.×ÏÒD ÿÏVÒ×ÒD ÿ ÿ»×ÏÒD ÃÏUNÔ� ÏVÒÉÅÒ: ÿ.×ÏÒD ÿ´ ÿ ÿ»ÆUNÃÔÉÏN (ÒÅAD©� ÿ.×ÏÒD ÿ0 ÿ ÿ»NUMBÅÒ ÏÆ ×ÏÒDS NÏÔ ÔÒAN'D� � »SUBÒÏUÔÉNÅ ÔÏ DÉVÉDÅ ÔHÅ ÔÏP ×ÏÒD ÏÆ� »ÔHÅ SÔAÃK BY ÔHÅ NÅØÔ ×ÏÒD. ÅØÉÔS� »×ÉÔH ÔHÅ ÑUÏÔÉÅNÔ ÏN q ÿÌBÒÉ30 ÿ ÿ»NÏ - S×ÉÔÃH ÅÒÒÏÒ� ÿMÏV ÿ-(Ò´©¬-(Ò6©� ÿMÏV ÿ£²¬-(Ò6© ÿ»ÃÏNVÅÒÔ DÅÃÉMAÌ ASÃÉÉ ÔÏ� ÿUÔÉÌÉÔY ÿ ÿ ÿ»BÉNAÒY AND PÌAÃÅ ÉN Ò´� ÿMÏV ÿ(Ò6©+¬Ò´ ÿ»ÉÆ ZÅÒϬ SÅÔ Ò´ ½ ±� ÿBNÅ ÿÌBÒɱ3� ÿÉNà ÿÒ´� ÌBÒɱ3: ÿÔSÔ ÿ(Ò6©+� ÿBÒ ÿÌBÒÉ0·� ÌBÒɱ5: ÿÊSÒ ÿPìÌÉBÒÏM ÿ»ÃAÌÌ ÒÅPÌAÃÅ MÏDUÌÅS� ÌBÒɲ0: ÿMÏV ÿ£ÌBÆÌBƬÒ3� ÿÊSÒ ÿPìÌBÉNÆÌ ÿ»ÒÅAD NÅØÔ ÉNPUÔ ÌÉNÅ� ÿBÉÔB ÿ£ÅÏÆ¬3(Ò3© ÿ»ÅND ÏÆ ÆÉÌÅ?� ÿBNÅ ÿÌBÒɲ3 ÿ ÿ»YÅS - BÒANÃH� ÿÃMP ÿ£GSD¬ÌBÆDÔA ÿ»ÉNPUÔ ÆÉÌÅ ÅÒÒÏÒ ÉÆ ÆÉÒSÔ� ÿBÅÑ ÿÌBÒÉ03 ÿ ÿ»ÌÉNÅ ÉS NÏÔ A GSD ÌÉNÅ� ÿ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½.ÿ.: MAÒA Ô¯�: SSÒÅDD AÅÒSÆANÔÒÿ¯É ÃÉASÿ. Æ�¬ÌÃÒ ÿÔÅBYÿ. 6�M-ÒA-ÔMØÒA+Ô ÿ� ¬0SÃÆA ÿÔÅBYÿ. 6�M-ÒA-ÔMØÒA+Ô ÿM:ÒA Ô»�� ÅNÅVÿ.: ÌAÏN MÆ�¬ÌÃÒ ÿÔÅBYÿ. '�¯Åÿ'É ÃÉASÿ. 6�Ì-ÏN-MÌAÏN+M ÿ� ¬0SÃÆA ÿÔÅ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,ASÿFE 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 ÿOVÿM S TR PET;S ÿ ÿR24,ÿRV MO ÿ EGVRSA ÿ0:T0NP I; MESY,UMESYS ERNTOI PTEDAUP ÿ ;Y TRENE THO TTSINPO4 ÿR; LYALICETABPHALY TR=þÌ»MÉSSÉNG ÉNPUÔ SPÅÃ.� ÌNK±39: ÿÔSÔB ÿNÏÏNÏM� ÿBÅÑ ÿÌNK±´0� ÌNK±´5: ÿÃÌÒB ÿNÏÏNÏM� ÌNK±´0: ÿMÏV ÿ£ÃÒÌÆ¬DUMÉN+6� ÿMÏV ÿ£²¬DUMÉN+´� ÿMÏV ÿ£DUMÉN¬Ò0� ÿÔYPÅ� ÿMÏV ÿÃMDBUƬ-(SP©� ÿÊMP ÿÌÉNK¸±� ÌÉNK39: ÿÃMP ÿ(SP©+¬£± ÿ» ÃHÅÃK ÆÏÒ S×ÉÔÃH ÏVÅÒÆÌÏ×� ÿBÌÏS ÿÌNK±´²� ÿ.ÅÏÔ� ;Í6©+ ÿ ÿ»ÃÌÅAN UP ÔHÅ SÔAÃK� ÿÒÔS ÿPÃ� � ÌBÃÏM: ÿ ÿ ÿ ÿ»ÃÒÅAÔÅS AN ÏBÊÅÃÔ MÏDUÌÅ� ÿ ÿ ÿ ÿ»ÉNPUÔ:  ÆÉÒSÔ ÌÉNÅ ÏÆ ÏBÊÅÃÔ� ÿ ÿ ÿ ÿ»MÏDUÌÅ ÉN ÌBÆÌBÆ� ÿ ÿ ÿ ÿ»ÏUÔPUÔ:  AN ÏBÊÅÃÔ MÏDUÌÅ� ÿMÏV ÿ£ÌBÆDÔA¬Ò±� ÿMÏV ÿ£ÌBÆÌBƬÒ3� ÌBÃM00: ÿÊSÒ ÿPìÌBÏÔ×Ò ÿ»×ÒÉÔÅ ÏUÔ ÔHÉS ÌÉNÅ� ÿÃMP ÿ£ÅMÏD¬ÀÒ± ÿ»ÅND ÏÆ MÏDUÌÅ?� ÿBNÅ ÿÌBÃM05 ÿ ÿ»NÏ - BÒANÃH� ÿÒÔS ÿPÃ� ÌBÃM05: ÿÊSÒ ÿPìÌBÉNÆÌ ÿ»ÒÅAD NÅØÔ ÉNPUÔ ÌÉNÅ� ÿÃMP ÿ£GSD¬ÀÒ±� ÿBÅÑ ÿÌBÃM05 ÿ ÿ»ÉGNÏÒÅ GSD ÌÉNÅS.  ×ÒÉÔÅ ÏÔHÅÒ� ÿBÒ ÿÌBÃM00 ÿ ÿ»ÌÉNÅS¬ ÉNÃÌUDÉÎ 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 ERNSÿI; YMPS+BH)TR(PT ARYNT EANT ERNSÿI; ;C ÿPS RT ÿ EGSRRE ÿ W?LORFVE OOLMBSYÿ;ÿ ÿ F OVYMÿS + 4)(R+,2)(R ÿOVÿM + 4)(R+,2)(R ÿOVÿM + 4)(R+,2)(R ÿOVÿM L BOYM SHE TINE OV;M ÿ)+R4,()+R2ÿ(V MO ÿ MESY,UYMPS#B ÿDDÿA E YM,SYMPS#B ÿDDÿA E YM SATE OL H AKEMAÿ;ÿ H ISQUNSÿU: 01SYIN R4E,YMÿSV MO ÿ R24,ÿRV MO ÿ EGVRSA ÿ0:Y0NS I ; ;E YMUSD ANE YM SRSTEINPOT USDJÿA; Y.TRENE THO TTSINPO4 R. MESYT ARYNT EANT ERNSÿI; ;E YMNSÿI; ;C ÿPS RT ÿ R0+,P)(S ÿOVÿM ? OWFLEROVÿ;ÿ ÿ F OVYMÿS 9þÐTAPE 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 SWITCÑNG ÅND GSD� ÉÌBS×:� ÿÃÌÒ ÿÒ± ÿ ÿ»ÃÏUNÔS ¯D ÏÃÃUÒÒÅNÃÅS� ÿMÏV ÿ£ÉÌÌB+±0¬Ò´� ÉÌS×00: ÿMÏV ÿÀÒ´¬Ò5 ÿ ÿ»MÏÒÅ S×ÉÔÃHÅS?� ÿBNÅ ÿÉÌS×±0 ÿ ÿ»YÅS - BÒANÃH� ÉÌS×05: ÿÒÔS ÿPÃ� ÉÌS×±0: ÿASÌ ÿÒ5� ÿADD ÿÒ5¬Ò´ ÿ ÿ»PÏÉNÔ AÔ S×ÉÔÃH� ÿÃMP ÿ£DÅÌÌÉB¬ÀÒ´ ÿ»¯DÌ ??� ÿBÅÑ ÿÉÌSײ0 ÿ ÿ»YÅS - BÒANÃH� ÿÃMP ÿ£DÅÌÏM¬ÀÒ´ ÿ»¯D ??� ÿBÅÑ ÿÉÌS×±3 ÿ ÿ»YÅS - BÒANÃH� ÿMÏV ÿ£²¬Ò0 ÿ ÿ»SÅÔ ÉNPUÔ ÌÉBÒAÒY ÃÏDÅ� ÿÊMP ÿÌBS×ÅÒ ÿ ÿ»S×ÉÔÃH ÅÒÒÏÒ� ÉÌS×±3: ÿÉNà ÿÒ± ÿ ÿ»ÉNÃÒÅASÅ ÃÏUNÔÅÒ� ÉÌS×±5: ÿÔSÔ ÿ(Ò´©+ ÿ ÿ»PÏÉNÔ AÔ HÅAD ÏÆÒ,#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 ÿOVÿM 0 ,RMESYÿUV MO ÿ R0K ACSTÿ;) SP-(0,ÿRV MO ÿ0:S0NU I; ;A RE AEDINEFND UTOINT ERNS ITOT HA WOFR AD4= R: UTNPÿI; ;D NEFIDEUNS ARTSEIN--YMUSIN ÿ ;; ITEXÿ;ÿ C ÿPS RT ÿ P)(S2,ÿ#D AD ÿ UEAL VCHET;F ÿR4),R4E(ASÿBV MO ÿ NDOU FOT;N ÿ ÿPC ÿTSÿR L BALO GTOR TEINPOT GEÿ;ÿ ÿ B LOTGÿP: 00GLSR ;; NDOU FOT;N ÿ ÿBR ÿ ÿ ;B LORGÿSL ALÿC; ;E LUVA4= R: UTTPOU ÿ ;E AM NALOBGL5þÔH. 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ÅØÔ S×ÉÔÃH� ÿBÒ ÿÉÌS×00 ÿ ÿ»ÃÏNÔÉNUÅ� ÉÌSײ0: ÿÉNÃB ÿÌBDÅÌ ÿ ÿ»SÅÔ DÅÌÅÔÅ ÆÌAG� ÿBÒ ÿÉÌS×±5� ÌBÉÌÉN: ÿ ÿ ÿ ÿ»ÉNPUÔ ÌÉBÒAÒY ÉNÉÔÉAÌÉZÅÒ� ÿMÏV ÿ£ÉÌÌB¬-(Ò6©� ÿÉNÉÔ ÿ ÿ ÿ»ÉNÉÔÉAÌÉZÅ DÅVÉÃÅ AND� ÿMÏV ÿ£ÉÌÆB¬-(Ò6© ÿ»ÏPÅN ÌÉBÒAÒY� ÿMÏV ÿ£ÉÌÌB¬-(Ò6©� ÿÏPÅN� ÿMÏV ÿ£ÌÉNBUƬÒ3� ÿÊSÒ ÿPìÌBÉNÒD ÿ»GÅÔ ÆÉÒSÔ DÉÒÅÃÔÏÒY ÅNÔÒY� ÿÃMP ÿ£BÅGÌÉB¬ÌBDAÔA� ÿBÅÑ ÿÌBÉÌ05 ÿ ÿ»ÉÆ ÆÉÒSÔ Ô×Ï HÅADÅÒS AÒÅ ÏK¬� ÌBÉÌ00: ÿÊMP ÿÌBÉÌÅÒ ÿ ÿ»ASSUMÅ ÔHÉS ÉS A VAÌÉD� ÌBÉÌ05: ÿÊSÒ ÿPìÌBÉNÒD ÿ»ÌÉBÒAÒY¬ ÏÔHÅÒ×ÉSÅ ÆÌ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-LORGÿS; ; C ÿPS RT ÿ RNTURET USDJ AE.AM NCTSEÿ;ÿ ) SP,(#2 ÿDDÿA E AM NONTIEC S AOT;N ÿ ÿ01TSGE ÿNEÿB ) R41(S+AGFLN,CTSEÿ#B MPÿC . MENAN IOCTSEA S IITT HA TRESUIN, NDOUÿF; D.UNFOT NOÿ;ÿ C ÿPS RT ÿ1:S0ET GE AM NALOBGLD IN;F ÿ ÿ ÿOBGLPT ÿ0:S0ET G; NDOU FOT;N ÿ ÿBR ÿ ÿ ;C SEETÿG: LLCA ÿ ;; RYNT EEROPPRO TTS PR4 T:PUUTÿO; E.AM NTOS PT4 R: UTNPÿI; ;. 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 ÿ£GSD¬ÌBDAÔA ÿ»AS AN ÉNPUÔ ÌÉBÒAÒY ÅÒÒÏÒ� ÿBNÅ ÿÌBÉÌ00� ÿÒÔS ÿPÃ� ÌBÏÌÉN: ÿ ÿ ÿ ÿ»ÏUÔPUÔ ÌÉBÒAÒY ÉNÉÔÉAÌÉZÅÒ� ÿMÏV ÿ£ÏÌÌB¬-(Ò6©� ÿÉNÉÔ� ÿÔSÔ ÿÉÌÌB� ÿBÅÑ ÿÌBÏÌ0A� ÿMÏV ÿ£ÌBÏÌ0B¬ÏÌÆB-´� ÌBÏÌ0A: ÿMÏV ÿ£ÏÌÆB¬-(Ò6©� ÿMÏV ÿ£ÏÌÌB¬-(Ò6©� ÿÏPÅN� ÿMÏV ÿ£ÌÉBHDÒ¬Ò3� ÿÊSÒ ÿPìÌBÏÔ×Ò� ÿÃÌÒ ÿÏÌÆB-´� ÿÒÔS ÿPÃ� ÌBÏÌ0B: ÿÉNà ÿÒÅNMÆG� ÿÃÌÒ ÿÏÌÆB-´� ÿÃMPB ÿ£²¬ÏÌÆB-±� ÿBNÅ ÿÌBÏÌ0A� ÿMÏV ÿ£ÌÉB¬ÏÌÆB� ÿMÏV ÿ£Ò±±¬ÏÌÆB+²� ÿMÏV ÿ£ÔMP¬ÏÌÆB+´� ÿBÒ ÿÌBÏÌ0A� � ÌBÉNÉN: Ú 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-SEETÿG; ;. INGA ARY;T ÿ ÿ02GLPT ÿBR ÿ RYNT EXTNEO TR0E NCVAADÿ;0 ,RYMPS#B ÿDDÿA: 04GLPT --CHAT MNO ÿ ;C ÿPS RT ÿ P)(S2,ÿ#D AD ÿ EGSRRE ÿ P)(S8.0,ÿRV MO ÿ 04GLPT ÿEQÿB . ESAM NLEDUMOJ OBT OUR TEIL;F) R01(S+AGFLN,JMOBÿ#B MPÿC - --CHATÿM; H.TCMAO ;N ÿ ÿ04GLPT ÿNEÿB D OR WNDCOSEY TRÿ;) R02(),R42( ÿMPÿC . CHAT MNOÿ;ÿ 4 L0TGÿPE BN ÿ RDWOT RSFIK ECCHÿ;) R0,(4)(R ÿMPÿC: 03GLPT PC ÿTSÿR T XI E -ES;Y ÿ ÿ ÿEGSRRE ÿ O-;N ÿ ÿ03GLPT ÿLOÿB G INCHARSEE ON;D ÿMESY,UR0 ÿMPÿC: 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Ô ÆÉÌÅ ÉNÉÔÉAÌÉZÅÒ� ÿMÏV ÿ£ÉÆÌB¬-(Ò6©� ÿÉNÉÔ ÿ ÿ ÿ»ÉNÉÔ DÅVÉÃÅ� ÿMÏV ÿ£ÉÆÆB¬-(Ò6©� ÿMÏV ÿ£ÉÆÌB¬-(Ò6©� ÿÏPÅN ÿ ÿ ÿ»ÏPÅN ÉNPUÔ ÆÉÌÅ� ÿMÏV ÿ£ÌBÆÌBƬÒ3� ÿÊSÒ ÿPìÌBÉNÆÌ ÿ»ÒÅAD ÆÉÒSÔ ÌÉNÅ� ÿBÉÔB ÿ£ÅÏÆ¬3(Ò3© ÿ»SÏMÅÔHÉNG'S ÆÉSHY ÉÆ ÅÏÆ� ÿBNÅ ÿÌBÉNÉ3� ÿÃMP ÿ£GSD¬ÌBÆDÔA ÿ»ÅÒÒÏÒ ÉÆ ÆÉÒSÔ ÌÉNÅ ÉS� ÿBÅÑ ÿÌBÉNÉ5 ÿ ÿ»NÏÔ A GSD ÌÉNÅ� ÌBÉNÉ3: ÿÊMP ÿÌBÉÆÅÒ� ÌBÉNÉ5: ÿÒÔS ÿPÃ� � � � ÌBÉNÒÌ: ÿ ÿ ÿ ÿ»ÒÅÌÅASÅS ÉNPUÔ ÆÉÌÅ AND� ÿ ÿ ÿ ÿ»GÅÔS NÅØÔ.� ÿ ÿ ÿ ÿ»ÉÆÌB+6 ½ 0 ÉÆ NÏ MÏÒÅ� ÿMÏV ÿ£ÉÆÌ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,TRÿPV MO ÿ1:L0TG P2 L0TGÿPR ÿB H RCEA SOR FTSMILIT SEÿ;ÿ 0 ,RMBSY ÿOVÿM S YEÿ;ÿ 1 L0TGÿPQ BE ÿ S?NKLA B 6OFE AS;C ÿR0),R42( ÿISÿB L IAECSPE THS HI TISÿ;ÿ 0 ,R4)(R ÿOVÿM G REAVÿS: 00GLPT NDOU;F ÿ ÿBR ÿ ÿ ;D UNFOT NOÿ;ÿ R ÿBÿ ; ;B LOTGÿPL ALÿC; ;. NDOU FIFY TRENO TERNTOI=PR4 T:PUUTÿO; 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Å ÆÉÌÅ� ÿMÏV ÿ£ÉÆÌB¬-(Ò6©� ÿÒÅÌÅASÅ ÿ ÿ ÿ»ÒÅÌÅASÅ DÅVÉÃÅ� ÌBÉÒÌ: ÿÃÌÒ ÿÃMBUÆH ÿ ÿ»ÒÅÑUÅSÔ ÉNPUÔ ÆÒÏM ÃSÉ� ÿMÏV ÿ£ÉÆÌB¬ÌBSÅM+²� ÿMÏV ÿ£ÉÆÆB¬ÌBSÅM+´� ÌBÉÒÌ0: ÿMÏV ÿ£ÌBSÅM¬-(Ò6©� ÿSÅMANÔÉÃS� ÿBÉÔ ÿ£S×ÅÒ¬ÀÒ6 ÿ»ÔÏÏ MANY S×ÉÔÃHÅS?� ÿBÅÑ ÿÌBÉÒ̱ ÿ ÿ»NÏ - BÒANÃH� ÿÃÌÒ ÿÒ0 ÿ ÿ»SÅÔ ÉNPUÔ ÆÉÌÅ ÃÏDÅ� ÿÊMP ÿÌBS×ÅÒ ÿ ÿ»PÒÏÃÅSS S×ÉÔÃH ÅÒÒÏÒ� ÌBÉÒ̱: ÿÔSÔ ÿÉÆÌB+6 ÿ ÿ»ANYÔHÉNG ÔHÅÒÅ?� ÿBNÅ ÿÌBÉÒ̲ ÿ ÿ»YÅS - BÒANÃH� ÿÔSÔ ÿ(Ò6©+ ÿ ÿ»ANY MÏÒÅ ÉNPUÔ?� ÿBÅÑ ÿÌBÉÒÌ0 ÿ ÿ»YÅS - BÒANÃH� ÿÒÔ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 ÿTSÿR G REESÿR K ACSTO NT OR0T ENRRCUT PUÿ;) SP.(,8R0 ÿOVÿM ! D!UNFO ÿ ;Y TRENT EX NTOO G -NOÿ;ÿ 4 O0RMÿSE BN ÿ K? ORDWOD ONEC;S ÿ0)(R,24)(Rÿ2P CM ÿ RYNT EXTNEO TGO- O ;N ÿ ÿ04MOSR ÿNEÿB ? OKD OR WSTIR;F ÿ0)(R),R4ÿ(P CM ÿ3:O0RM S1 O0RMÿSR ÿB E ONT EX NRY T -NOÿ;0 ,RYMPS#B ÿDDÿA: 04MOSR MESAS IMENAF IEE S -ES;Y ÿ ÿ03MOSR ÿEQÿB ? MENAE ULOD MBJ OANS HI TIS ;0)(R+1GSLA,FMNBJ#O ÿPBCM ÿ2:O0RM ST XI;E ÿ ÿPC ÿTSÿR S ESDRADN URET RSTJUADÿ;ÿ ) SP,(#2 ÿDDÿA 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 CODåÔSÔ ÿ(Ò6©+ ÿ ÿ»PÏP ÉNDÉÃAÔÏÒ� ÿÒÔS ÿPÃ� � � � ÌBÒSÔ: ÿ ÿ ÿ ÿ»ÒÅSÅÔS ÉNPUÔ AND ÏUÔPUÔ ÆÉÌÅ PÔÒS� ÿMÏV ÿ£ÃMBUÆH¬-(Ò6©� ÿSYNÔAØ ÿ ÿ ÿ»SYNÔAØ ÒÅSÅÔS ÔHÅ PÏÉNÔÅÒS� ÿÔSÔ ÿ(Ò6©+ ÿ ÿ»PÏP ÉNDÉÃAÔÏÒ ×ÏÒD� ÿÒÔS ÿPà � � � ÌBÅÒNM: ÿ ÿ ÿ ÿ»Ò² PÏÉNÔS ÔÏ NAMÅ� ÿ ÿ ÿ ÿ»Ò´ PÏÉNÔS ÔÏ BUÆÆÅÒ� ÿMÏV ÿ£²¬Ò5� ÿÔSÔ ÿ´(Ò²© ÿ ÿ»ÉÆ NÏ ÅØÔÅNÔ¬ ÔHÅN ÃÌÅAÒ� ÿBNÅ ÿÌBÅN00 ÿ ÿ»ÔHÅ . ÆÒÏM BUÆÆÅÒ� ÿÃÌÒB ÿ6(Ò´©� ÌBÅN00: ÿMÏV ÿ(Ò²©+¬-(Ò6©� ÿMÏV ÿÒ´¬-(Ò6© ÿ»UNPAÃK NAMÅ AND PÌAÃÅ� ÿMÏV ÿ£±¬-(Ò6© ÿ»ÉN BUÆÆÅÒ� ÿUÔÉÌÉæECTS 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 REESÿR O ;N ÿ ÿ02MOSR ÿLOÿB E ON;D ÿ ÿMESY0,ÿRP CM ÿ1:O0RM SE BLTAF ORTTA STOR TEINPOT GEÿ;ÿ 0 ,RMBSY ÿOVÿM ÿ G REAVÿS: 00MOSR ;D UNFOT NOÿ;ÿ R ÿBÿ ; NDOU;F ÿ ÿBR ÿ ÿ ;N ODRMÿS: 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 ÿTSÿR: 01MOSY !!IE;D ÿ ÿ ÿ01RRÿE 1 O0YMÿSO BL ÿ )+SP,(MESYÿUP CM ÿ P)(SM,SYBPÿ#B SU ÿ P)(S,-DMEN ÿOVÿM: 00MOSY ;K ECCHW LORFVE OLEAB TOLMBSY--F-OVYMÿS; ; 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 EXTéÔY� ÿDÅà ÿÒ5� ÿBÅÑ ÿÌBÅN±0� ÿBÌÔ ÿÌBÅN±5� ÌBÅN05: ÿADD ÿ£3¬Ò´� ÿBÒ ÿÌBÅN00� ÌBÅN±0: ÿÉNà ÿÒ´� ÿBÒ ÿÌBÅN05� ÌBÅN±5: ÿÒÔS ÿPÃ� � � ÌBPKÏM: ÿ ÿ ÿ ÿ»PAÃKS ÏM NAMÅ� ÿMÏV ÿ-(Ò´©¬-(Ò6© ÿ»PÏÉNÔÅÒ ÔÏ NAMÅ AÔ -(Ò´©� ÿÃÌÒ ÿ-(Ò6©� ÿUÔÉÌÉÔY� ÿMÏV ÿ(Ò6©+¬ÌBÔNAM� ÿÃÌÒ ÿ-(Ò6© ÿ ÿ»PUÔ ÉN ÌBÔNAM ¦ ÌBÔNAM+²� ÿUÔÉÌÉÔY� ÿMÏV ÿ(Ò6©+¬ÌBÔNAM+²� ÿÔSÔ ÿ(Ò6©+ ÿ ÿ»PÏP UPDAÔÅD ADDÒÅSS� ÿÒÔS ÿPÃ� � � � � ÌBD×ÒÔ: ÿ ÿ ÿ ÿ»ÆÉNÉSHÅS ×ÒÉÔÉNG DÉÒÅÃÔÏÒY� ÿMÏV ÿ£ÌÉNBUƬÒ3� ÌBD×00: ÿÔSÔB ÿÌBÅDÉÒ ÿ ÿ»ÅND DÉÒ ÉN ÌÉNBUÆ?� ÿBNÅ ÿÌBêTN: 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 MÿPS RT ÿ E.ACPLT ENRRCUD ADÿ;4 ,RETFSOF ÿDDÿA K OCBLO TRYNT EATC PET;G ÿR4C,RPCU ÿOVÿM: 00TPGE ;K OCBLT TXN ICELA PNTREUR COR FPCT GE ÿ ;C TPGEE INUTROUBÿS; ; N URET;R ÿ ÿPC ÿTSÿR N OW DSSREDD ARNTUREE OV;M ÿP)(S+,P)(S ÿOVÿM : 02TPTX R!ROERC LOREE YT Bÿ;ÿ ÿ 8 R0ER ÿ K.;O ÿ ÿ02TPTX ÿEQÿB 4 ÿRB WAÿS D OR;W ÿ ÿ02TPTX ÿPLÿB ? RDWOR OTEBYÿ;ÿ ) SP2( ÿSTÿT E YT BINT PUÿ;+ 3)(R4,ÿRB OVÿM: 01TPTX E.YT BNDCOSER FOE AREPPRÿ;ÿ 4 ÿRB WAÿS E YT BSTIR FINT PUÿ;+ 3)(R4,ÿRB OVÿM . 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) íD×05 ÿ ÿ»YÅS - BÒANÃH� ÿÊSÒ ÿPìÌBNØÔÅ ÿ»×ÒÉÔÅ ÔHÉS ÅNÔÒY� ÿBÒ ÿÌBD×00� ÌBD×05: ÿÊSÒ ÿPìÌBÏÔ×Ò ÿ»×ÒÉÔÅ ÔHÅ ÅND DÉÒ ÌÉNÅ� ÿÃÌÒB ÿÌBÅDÉÒ ÿ ÿ»ÃÌÅAÒ ÔHÅ ÆÌAG� ÿÊSÒ ÿPìÌBÉNÒD ÿ»ÒÅÔUÒN ×ÉÔH ÆÉÒSÔ ÏBÊ� ÿÒÔS ÿPà ÿ ÿ»MÏDUÌÅ ÌÉNÅ ÉN ÌÉNBUÆ� ÌBÉNÒD: ÿMÏV ÿÒ3¬-(Ò6© ÿ»Ò3 PÏÉNÔS ÔÏ ÌÉNÅ BUÆÆÅÒ� ÿMÏV ÿ£ÉÌÌB¬-(Ò6©� ÿÒÅAD ÿ ÿ ÿ»ÒÅAD NÅØÔ ÌÉNÅ ÆÒÏM� ÿMÏV ÿ£ÉÌÌB¬-(Ò6© ÿ»ÉNPUÔ ÌÉBÒAÒY� ÿ×AÔÅ� ÿBÉÔB ÿ£ÆAÔÅÒ¬3(Ò3© ÿ»ANY ÆAÔAÌ ÅÒÒÏÒS?� ÿBÅÑ ÿÌBÉÒ00 ÿ ÿ»NÏ - BÒANÃH� ÿMÏV ÿ£²¬Ò0 ÿ ÿ»SÅÔ ÉNPUÔ ÌÉBÒAîOV #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 P0XTÿTI BM ÿ NDMAOM CRDWOR OTEBYÿ;ÿ ) SP2( ÿSTÿT: 00TPTX SPK,ACSTE THM ROÿFÿ ; RDWO1 S VEMOREE INUTROS HIÿTÿ ; ;D KEACSTS INDMAOM CLD RHEÿT; CKLO BXT TTOINO NF IUTÿP; ;T PUXT TNETIOUBRSU ÿ ;; ^00.;4 ÿ ÿ ÿ1.ÿ+ 1 .^40ÿ;ÿ ÿ . 40ÿ+ 2 .^40ÿ;ÿ ÿ . 0016ÿ+: FFOE C; LEAB TNTIEICFFOEÿC; ;C ÿPS RT ÿ EGSRRE ÿ P)(S,2R1 ÿOVÿM K ACSTE THO NT OR1T ENRRCUT PU--NEDO ÿ ;O ;N ÿ ÿ07PAUN ÿLTÿB S RDWO2 E ON;D ÿ ÿR4 ÿNCÿI D OR WXTNEO TVEMOÿ;ÿ + 0)(R ÿSTÿT 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 ÿñÒY ÃÏDÅ� ÿÊMP ÿÌBÆÔÅÒ� ÌBÉÒ00: ÿÒÔS ÿPÃ� � � � ÌBÏÔ×Ò: ÿMÏV ÿÒ3¬-(Ò6© ÿ»Ò3 PÏÉNÔS ÔÏ ÌÉNÅ BUÆÆÅÒ� ÿMÏV ÿ£ÏÌÌB¬-(Ò6©� ÿ×ÒÉÔÅ ÿ ÿ ÿ»×ÒÉÔÅ NÅØÔ ÌÉNÅ ÔÏ� ÿMÏV ÿ£ÏÌÌB¬-(Ò6© ÿ»ÏUÔPUÔ ÌÉBÒAÒY� ÿ×AÔÅ� ÿBÉÔB ÿ£ÆAÔÅÒ¬3(Ò3© ÿ»ANY ÆAÔAÌ ÅÒÒÏÒS?� ÿBÅÑ ÿÌBÏÔ00 ÿ ÿ»NÏ - BÒANÃH� ÿMÏV ÿ£´¬Ò0 ÿ ÿ»SÅÔ ÏUÔPUÔ ÌÉBÒAÒY ÃÏDÅ� ÿÊMP ÿÌBÆÔÅÒ� ÌBÏÔ00: ÿÒÔS ÿPÃ� � � � ÌBÉNÆÌ: ÿMÏV ÿÒ3¬-(Ò6© ÿ»Ò3 PÏÉNÔS ÔÏ ÌÉNÅ BUÆÆÅÒ� ÿMÏV ÿ£ÉÆÌB¬-(Ò6©� ÿÒÅAD ÿ ÿ ÿ»ÒÅAD NÅØÔ ÌÉNÅ ÆÒÏM� ÿMÏV ÿ£ÉÆÌB¬-(Ò6© ÿ»ÉNPUÔ ÆÉÌÅ� ÿ×AÔÅ� ÿBÉÔB ÿ£ÆAÔòNT 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 ÿOVÿM E OR MDOO-;N ÿ ÿ06PAUN ÿLTÿB ? RSHA C 3NEDOÿ;ÿ 5 ÿRC IN ÿ F.EFCOT EX NTOE NCVAADÿ;ÿ + 2)(R ÿSTÿT R TEACARCHE ORSTÿ;+ 1)(R3,ÿRB OVÿM 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 A0NPÿUT BG ÿ $";" ÿ ÿ05PAUN ÿEQÿB 3 #33,ÿRB MPÿC " NKLA"Bÿ;ÿ 3 A0NPÿUQ BE ÿ R3 ÿTBTS ÿ1:A0NP U R TEACARCHI CIASN ATOT ERNVCO ÿ ;0 RINR DEINMARE, R3N IOTQU E.ON DDEVIDI ÿ ;2 A0NPÿUR ÿ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© ÿ»ANY ÆAÔAÌ ÅÒÒÏÒS?� ÿBÅÑ ÿÌBÉN00 ÿ ÿ»NÏ - BÒANÃH� ÿÃÌÒ ÿÒ0 ÿ ÿ»SÅÔ ÉNPUÔ ÆÉÌÅ ÃÏDÅ� ÿÊMP ÿÌBÆÔÅÒ� ÌBÉN00: ÿÒÔS ÿPÃ� � � ÌBÌS×Ô: ÿMÏV ÿÒ3¬-(Ò6© ÿ»Ò3 PÏÉNÔS ÔÏ ÌÉNÅ BUÆÆÅÒ� ÿMÏV ÿ£ÌÌÌB¬-(Ò6©� ÿ×ÒÉÔÅ ÿ ÿ ÿ»×ÒÉÔÅ ÔHÉS ÌÉNÅ� ÿMÏV ÿ£ÌÌÌB¬-(Ò6©� ÿ×AÔÅ� ÿBÉÔB ÿ£ÆAÔÅÒ¬3(Ò3© ÿ»ANY ÆAÔAÌ ÅÒÒÏÒS?� ÿBÅÑ ÿÌBÌS×0 ÿ ÿ»NÏ - BÒANÃH� ÿMÏV ÿ£6¬Ò0 ÿ ÿ»SÅÔ ÌÉSÔÉNG ÆÉÌÅ ÃÏDÅ� ÿÊMP ÿÌBÆÔÅÒ� ÌBÌS×0: ÿÒÔ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 ÿUBÿS S YEÿ;ÿ 1 A0NPÿUO BL ÿ DEVIDIH IT WNEDOÿ;) R2,(R0 ÿMPÿC: 02PAUN TSENCIFIEFCOY BDEVIDI ÿ ;T ENTIUO Q;0 ÿ ÿR3 ÿLRÿC: 06PAUN LEAB TNTIEICFFOE CTOR PTÿ;2 ,RFFOE#C ÿOVÿM 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,#- ÿOVÿM G REAVÿS: 00PAUN ;. TC EC2T GEO T50Y BEDIDIV DISR DEINMAREE TH ÿ ;3 +C502* CISR DEINMAREE THD AN1 CIS2 0^/5 NS,HUÿT; 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) ÿ;IúAIN 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: UTNPÿI; ;K ACNP U40ODÿM; ; T XI;E ÿ ÿPC ÿTSÿR G REESÿR 1 RNTREUR CCKTA;S ÿP)(S,2R1 ÿOVÿM O ;N ÿ ÿ01CKPA ÿLTÿB S RDWO2 E ON;D ÿ ÿR5 ÿNCÿI D OR W40OD MRETO-SES;Y ÿ)+R0,(R2 ÿOVÿM O ;N ÿ ÿ05CKPA ÿLTÿB ? RSHA C 3NEDOÿ;ÿ 4 ÿRC IN ÿ R23,ÿRD AD ÿ ERCTRAHA CNTREUR CDELUNCÿI; 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-N1AIÿMP JM ÿ NOÿ;3 ,RPETY#I ÿOVÿM S YEÿ;ÿ 2 BLLOÿGQ 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 K0ACÿPO BL ÿ 'A,#R3 ÿPBCM ÿ $";" ÿ ÿ04CKPA ÿEQÿB 3 ,R'$ÿ#B MPÿC " NKLA"Bÿ;ÿ 2 K0ACÿPQ BE ÿ R3 ,#' ÿPBCM ÿ R.HA CIISC AXTNET GEÿ;3 ,R)+R1ÿ(B OVÿM: 05CKPA UM S;0 ÿ ÿR2 ÿLRÿC . CTP OO LORIN;M ÿ ÿR43,#- ÿOVÿM: 01CKPA T. COPLOR JOMAÿ;ÿ 5 ,R-2ÿ#V MO ÿ EGVRSA ÿ0:K0AC P3 +C402*+C^2401*=CÿNÿ ; 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 MPÿC D NEFIDEY PLTIUL MET;S ÿ1)(R,1AGFLMDÿ#B ISÿB 2 O0R-ROERÿRB NCÿI O ;N ÿ ÿL5OBGL ÿEQÿB . PREX. EG R AOLMBSYS ;I ÿ02-OGSLATFG,FLEG#R ÿTBBI ÿ RYNT EOFS ESDRADÿ;1 ,R02-OEXNDHI ÿOVÿM: L6OBGL ST UIND UNFOÿ; 2 BLLOÿGR ÿB T USO NT IERNT;E ÿ ÿERNTÿEP RAÿT G LA FALOBGLT SEÿ;2 O0S-AGFL,TLGBFGLÿ#B ISÿB T USN ;I ÿ ÿL6OBGL ÿEQÿB T EAEP RENTHT PSF ;I ÿ ÿL7OBGL ÿGTÿB E BLTAL BOYM SCHARSEÿ;ÿ H RCEAÿSP RAÿT: L4OBGL G.LA FEDINEFED ROLMBSYT ENANRMPET SEÿ;2 O0X-DEIN@HF,DEREÿ#B ISÿB: 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 ÿMPÿJ G SENO ÿDFIFÿ. C ND.E ÿ Y1TREN ÿMPÿJ 6 #AYRLVE;O ÿ ÿÿ6D OR.W ÿ RLNTCO ÿ EGOSÿNF NDIFÿ.: 00RSDI NETIOU RCHARSEY ARBRLIT ENIDESÿR; ;T XI E &..;. ÿ ÿPC ÿTSÿR K ACSTP UANLE-CES;Y ÿ ÿ)+SPÿ(T TS ÿ 01OAOT ÿCCÿB ? 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 OVÿM R FEUF BINR HA CRETO SSOF ;I ÿ)+R1,(SPÿ@B OVÿM ? ND EERTH OATT OUR KEAR;M ÿ ÿ01OAOT ÿCCÿB T GIDII CIASO NT IVEMO& ..;. ÿ ÿSPÿ@B OLÿR . ..ERMBNUM RO FIT BET;G ÿ ÿR0 ÿSLÿA: 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) ÿESUMSSÿA; 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 LRÿC 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 ICÿB 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 ÿOVÿM 4 ,R)+SPÿ(V MO ÿ R3+,P)(S ÿOVÿM 2 ,R)+SPÿ(V MO ÿ R1+,P)(S ÿOVÿM M HE TRETOES;R ÿR0+,P)(S ÿOVÿM S ESDRADN URET RCKTA;S ÿP)(S2.,1)+SPÿ(V MO ÿ0:R0ES R ; RSTEISEG RRETOESÿR; ;. ITEXÿ;) SP.(12ÿ@P JM ÿ P)(S,-R0 ÿOVÿM ) SP-(1,ÿRV MO ÿ P)(S,-R2 ÿOVÿM ) SP-(3,ÿRV MO ÿ P)(S,-R4 ÿOVÿM M HE TVESAÿ;) SP-(5,ÿRV MO ÿ0:R0AV S ; RSTEISEGÿRE AVÿS; ; . 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 ÿOVÿM: T1ECAS 02-OPCIR@H1,ÿRV MO ÿ2:CTSE A1 ÿRC IN ÿ T2ECAS ÿEQÿB . PC. AX MEW NFF OENEVÿ;ÿ 1 ,R#1 ÿITÿB 1 CTSEÿAS LOÿB 2 O0C-RPHI,@R1 ÿMPÿC N IOCTSES OUVIRE;P ÿ02-OPCEL@R1,ÿRV MO ÿ OR FPCT ENRRCUE AV;S ÿR12,O0C-RPSE@U ÿOVÿM T ECCS .ONTIEC SUSIOEVPRÿ; T ECAS .INY EDLR;A ÿ ÿT1ECAS ÿEQÿB 2 O0D-MOECÿSB STÿT T PUUT ORYNABIT ESQUREÿ;2 O0T-OUINÿBB EGÿN 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 REESÿR: 03SRSW O-;N ÿ ÿ02SRSW ÿPLÿB ? LEAB TOFD ENÿ;ÿ ) R0ÿ(T TS ÿ DR AIPSKO-;N ÿ ÿ)+R0ÿ(T TS ÿ S-YEÿ;ÿ 1 R0WSÿSQ BE ÿ E?ONS HI TITS ;I ÿ)+R0,(1)(R ÿMPÿC: 02SRSW R0D VESAF OARLE CALTINI;I ÿ ÿP)(S ÿLRÿC 1 ,R)+SPÿ(D AD ÿ RSTEACARCHH TCWI Sÿ;ÿ ) SPÿ(L AS ÿ P)(S,-1)(R ÿOVÿM G REAVÿS: 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=-RUTùýUE- ÿ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 ÿMPÿJ L FILDÿRP RAÿT D RLO TESYT BOF# ÿ;ÿ 4 ,R10ÿ#V MO ÿ SEBAN IOCTSEM RO FNTMECELASPDIÿ;3 ,R02-OUFBBÿTV MO ÿ ONTINIFIDER TEUNCON IOATOC;L ÿR01,3.LD#R ÿVBMO ÿ 3)(R,102-OODCMSE ÿVBMO ÿ R32,O0C-RPSEHU ÿOVÿM D IOT DTOD IONTIEC SAMGRRO PEW;N ÿ ÿ ÿ9:CTSE C2 ,R02-O+3YMPSTM ÿOVÿM 1 ,R02-O+1YMPSTM ÿOVÿM D MOEC STOD ICTSE.CW NEÿ;2 O0D-MOEC,SR3 ÿVBMO ÿ CTSE.CW NEF OPCÿ;2 O0F-BUTB0,@R ÿOVÿM 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 TEXNPÿI; ;E INUTROH RCEA SCHITSW ÿ ;; 00LDPR ÿBR ÿ BCT USDJ;A ÿ ÿ0)(R2,ÿ#B SU ÿ UTTPTX ÿ ITIM LGHHIT SEÿ;4 ,REMPMTO ÿOVÿM T PUXTÿT G LA FOFS IEOP CWO TET;G ÿP)(S,-P)(S ÿOVÿM T MILIW LOT SEÿ;4 ,RDRWALO ÿOVÿM: D9CM ;S ITIM LAMGRRO PET-S--#9D CM ÿ ;; ORRR EALAT;F ÿ ÿ10RRÿE ; E.YP TPCE BSTMUD CM- --R ROER ÿ ;; 00LDPR ÿEQÿB ) R1,(D2CM#P ÿPBCM ÿ 00LDPR ÿEQÿB ) R1,(D1CM#P ÿPBCM ÿ PETYC PBEO LS ASTMUD ANMMCOT EX NE,ON DOT NIF ÿ ;X DERLÿPE 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-DEINÿHV MO ÿ7:CTSE C2 O0C-RPHI,@R1 ÿOVÿM: T8ECCS R1 ÿNCÿI 8 CTSEÿCQ BE ÿ PC. AX MFF OENEVÿ; ÿ ÿR11,ÿ#T BI ÿ T7ECCS ÿOSBL ÿ 02-OPCIR@H1,ÿRP CM ÿ ONTIEC SUSIOEVPRÿ;2 O0C-LPRE,@R1 ÿOVÿM R FOC PNTREUR CVESAÿ;1 ,R02-OPCERUSÿ@V MO ÿ E.BLTACALOREN IOCTSES OUVIRE;P ÿ BS AONTIEC SUSIOEVPRÿ;ÿ 2 CTSEÿCQ BE ÿ 02-OODCMSE ÿTBTS ÿ6:CTSE C) (876>3F IIG BOO;T ÿ ÿTEECCS ÿLTÿB R BEUM NIDÿ;ÿ 3 ,R76#3 ÿMPÿC N IOCTSEL RONTCO1=;+ ÿ ÿR3 ÿNCÿI T BIE YT BOR FFTHI SRAóýT 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 ÿOVÿM Y IFOD;M ÿR4+,1)(R ÿDDÿA E LUVAE AS BONTIEC SET;G ÿR4),R5E(ASÿBV MO ÿ8:MD C; ONTICAFIDIMOC P--8 #MDÿC; ; 8 MDÿCR ÿB ) R0,(#4 ÿUBÿS 5 ,RR4 ÿOVÿM T ECTS PET;S ÿCTSEPT4,ÿRV MO ÿ ORRR EALAT;F ÿ ÿ11RRÿE R TEINPON IOCTSET GEÿ;ÿ ÿ C SEETÿG + 1)(R+,1)(R ÿMPÿC 4 ,RR1 ÿOVÿM: D7CM ;C PET S--7 #MDÿC; ;5 D0RLÿPR ÿB ) R0,(#2 ÿUBÿS 4 ,R)+R1ÿ(D AD ÿ ORRR;E ÿ ÿ09RRÿE B LORGÿS + 1)(R+,1)(R ÿMPÿC 4 ,RR1 ÿOVÿM 1 MP,TR4 ÿOVÿM W NOC PET;G ÿ ÿ ÿPCETÿG: 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 ÿSRÿA 4 Y BEDIDIV;D ÿ ÿR3 ÿSRÿA Y TRENS HI TOFS ESDRADÿ;3 ,R02-OEXNDHI ÿUBÿS Y TRENT 1SF OSSREDD;A ÿR32,O0P-TOERÿPV MO ÿ3:CTSE CD IONTIEC SOLTRON CTEPUOM-C--NDOU FCHAT;M ÿ ST UOFM TOOT BSTJUADÿ;2 O0P-TOON,C10ÿ#B SU ÿ ERNTÿEP RAÿT C PUMIMAX MND;A ÿ02-OGSLATF ÿLRÿC T ENRRCUO T;0 ÿ02-OLTSURE ÿLRÿC . 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 ÿDDÿA + 1)(R+,1)(R ÿMPÿC R ROERÿ;ÿ 9 R0ER ÿ UEAL VALOBGLT GEÿ;ÿ ÿ B LORGÿS 4 ,RR1 ÿOVÿM: D5CM ;C LOREE IVITDD AALOBGL- -#5D CM ÿ ;; -204LDPR ÿBR ÿ ))+2(.X- (RMFOÿ;ÿ 4 ,RP1TM ÿUBÿS: 05LDPR ORRR;E ÿ ÿ09RRÿE 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 ÿNEÿB E BLTAN IOCTSEÿ;ÿ H RCNSLI ÿAPTR ÿ OLTRON CEROVH RCEA;S ÿR32,O0P-TOONÿC ÿOVÿM R EAIN LRMFOER;P ÿR22,O0P-TOERÿPV MO ÿ OLMBSYT US JH;TCMAÿ;ÿ 4 @R ÿLRÿC D OR WRD 3NOÿ;4 ,RD3OR#W ÿOVÿM 1 RTO1 M+SYMP;T ÿ ÿR1 ÿNCÿI R KEAC P40O ULOD;M ÿ ÿHBRCSE ÿAPTR ÿ TEBYT 1SF OSSREDD;A ÿR1M,SYMP#T ÿOVÿM: 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 ÿMPÿJ 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 ÿEGÿN . CELA PNTREUR CATC PET;G ÿ ÿ ÿPCETÿG: D3CM ;C LORED CELASPDIL NAERNT I--3 #MDÿC; ; 0 D0RLÿPR ÿB ) R0,(#6 ÿUBÿS: 04LDPR UTTPTX ÿ ORRR;E ÿ ÿ09RRÿE 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 #MDÿC; ;0 D0RLÿPR ÿB ) R0,(#4 ÿUBÿS: 02LDPR UTTPTX ÿ ITE ATOCEL;R ÿR4),R5E(ASÿBD AD ÿ UEAL VEL RET;G ÿR4+,1)(R ÿOVÿM: 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 CTSEÿCR ÿ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 CTSEÿCR ÿB 2 O0X-DEIN,H02-OOPRTPE ÿOVÿM 1 R BEUM NIDÿ;ÿ 3 ,R#1 ÿVBMO ÿ 02-O+3YMPSTM ÿLRÿC L BOYM S40OD MEDCKPAÿ;2 O01-M+SYMPÿTR CL ÿ1:CTSE CT ECCSÿ.D MENAUNÿ; 2 O0E-N1AIÿMP JM ÿ4:CTSE CG LA FORRR E;Q ÿ02-OORRRQE ÿCBIN ÿ ES;Y ÿ ÿT5ECCS ÿGTÿB ? 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 #MDÿC; ;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 ÿMPÿJ 2 ÿRL AS ÿ 14RRÿE: 06LDPR +4ÿ.E BL ÿ AXDMCM,#R2 ÿMPÿC 5 ,RCTSEPT ÿOVÿM S IT B 7OW LVESAÿ;2 ,R007617ÿ#C BI ÿ MD CCKTA;S ÿP)(S,-R2 ÿOVÿM S ESDRADL UACT ARMFOÿ;ÿ 3 ,R-4ÿ#D AD ÿ TOR TEINPOT TXD HEUS PDD;A ÿR3),SP2( ÿDDÿA T SEFF,O#2 ÿUBÿS T IVESAÿ;T SEFF,OR3 ÿOVÿM T TXO NT IETFSOFT GEÿ;3 ,R)+R1ÿ(B OVÿM 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 CTSEÿCE BL ÿ D?UNFOS ERCTRAHA CNY;A ÿ02-OARCHNTÿCB STÿT M TE IXTNET GEÿ;ÿ M TEÿIP RAÿT . BSTAÿ;ÿ 2 O0E-YTRBCU ÿECÿD R OKSANBLH USFLÿ;ÿ S ABBTÿCP RAÿT T ECCS .EDAMNN;U ÿ ÿT1ECCS ÿEQÿB N LOCOI EM;S ÿ ÿR05,#- ÿPBCM ÿ CTSE.CD MENAUNÿ;ÿ 1 CTSEÿCQ BE ÿ RNTUREE AGRIAR;C ÿ ÿR04,#- ÿPBCM ÿ R:TEACARCHG INATINRMTEÿ;0 ,R02-ORMTEAVÿSB OVÿM T PUUT ORYNABIT ESQUREÿ;2 O0T-OUINÿBB EGÿN 2 O0E-IZÿSB LRÿC: 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 BÿM: 01LDPR ;D ANMMCOT EX NSSCEROÿP; ;C ÿPS RT ÿX:DERL PC PNTREUR CTEDAUP, ES;Y ÿPCUR,CP)(S@4 ÿDDÿA - O ;N ÿ ÿ01LDPR ÿGTÿB ? LD RTHWIE ON;D ÿ ÿ0)(R ÿSTÿT: 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 INUTROUBÿS; ; DCENÿ. 7 RTTAÿSP JM ÿ EGOSÿNF FD.I ÿ DCENÿ. 1 RYNTÿEP 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 R4UBÿSP JM ÿ Y7TRENÿ;ÿ 5 R3UBÿSP JM ÿ Y6TRENÿ;ÿ 1 R4UBÿSP JM ÿ Y5TRENÿ;ÿ T MILIÿRP JM ÿ Y4TRENÿ;ÿ E TLTIÿRP JM ÿ Y3TRENÿ;ÿ L OBGLÿRP JM ÿ Y2TRENÿ;ÿ T ECASÿRP JM ÿ Y1TRENÿ;ÿ T ECCSÿRP 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 REOSÿNF NDIFÿ.: 00APPM AP MADLOT INPRT ENIDESÿR; ; DCENÿ. 5 RTTAÿSP JM ÿ EGOSÿNF FD.I ÿ DCENÿ. 1 RYNTÿEP JM ÿ #5Y LAEROVÿ;ÿ 5 ÿRDWOÿ. L TRONÿC G SENO ÿDFFN.I ÿ0:D0GS GD GSD EA RNTDESIRE ;; T.XI E -SEELÿ;ÿ C ÿPS RT ÿ RENOIG- S YEÿ;ÿ 0 S0NGÿGQ BE ÿ K?OCBLD GSÿ;) R1,(LKDBGSÿ#B MPÿC G OIÿI: 00GSGN ;K OCBLD GSN NOT GE--SDNGÿG; ; S YEÿ;ÿ 2 I0OOÿIR ÿB O ;N ÿ ÿ01OIIO ÿOSBL ÿ AR FOO;T ÿTBOU,#R0 ÿMPÿC 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 ÿ B2IFÿSD OR.W ÿ B2ILÿSD OR.W ÿ WO TUTNP ICEURSOÿ;ÿ F BUMDÿCD OR.W ÿ5:CKLO BT EXT ULFADEÿ;ÿ / AL/P ÿ50AD.R ÿ B1IFÿSD OR.W ÿ B1ILÿSD 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 ÿDDÿA F EOT EPXC ETSBIL ALR EACL ;EROPIO1,F-EO#- ÿCBBI ÿ2:P0OO IR PEOO,I+3TBOU ÿVBMO ÿ TERIÿWT EM ÿ P)(S,-EVDDLOÿ#V MO ÿ AERFFBUT PUUT;O ÿP)(S,-TAOUÿ#V MO ÿ --NOÿ;ÿ 2 P0OOÿIQ BE ÿ T?PUUT ONY;A ÿ+6EVDDLO ÿSTÿT: 01OPIO 02OPIO ÿBR ÿ EROPIO3,A+UTÿOB OVÿM E ITWR ÿMTÿE ) SP-(V,DEOD#L ÿOVÿM B R FEUF BUTTPOUÿ;) SP-(B,UT#O ÿOVÿM - O-;N ÿ ÿ02OPIO ÿEQÿB ? UTTPOUY ANÿ;6 V+DEODÿLT TS ÿ 01OPIO ÿEQÿB ? 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 BUMDÿCD OR.W ÿ4:CKLO BT EXT ULFADEÿ;ÿ / YM/S ÿ50AD.R ÿ FBSL ÿRDWOÿ. B LLÿSD OR.W ÿ UTTPOUE BLTAL BOYM;S ÿ ÿUFDBCM ÿRDWOÿ.: K3OCBL XT ELTAUEF;D ÿ ÿT/LSÿ/0 D5RAÿ. B OFÿLD 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 BUMDÿCD OR.W ÿ1:CKLO BN VE.E ÿ 01-OTCARST ÿMPÿJ N EACL×ý2D 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 ÿOVÿM: 00OPIO ;T PUT PUUTÿO; ;C ÿPS RT ÿ +6UT=OR1ÿ;ÿ + 1)(R ÿSTÿT 1 ,RR0 ÿOVÿM C BZELIIAITINÿ;ÿ ) R0ÿ(R CL ÿ +4UT=OR0ÿ;+ 0)(R+,0)(R ÿMPÿC: 01OIIO UT,OR0 ÿOVÿM R TEINPOT PUUT OET;S ÿR0A,UT#O ÿOVÿM: 02OIIO +3TBOU ÿRBCL ÿ0:I0OO IA UT-OTBOUL=TBOU ;T NI IUTTPOU ÿ ;; PC ÿTSÿR S EAELÿRT EM ÿ ;E ICEV DUTNP ISEEAELÿR; ;E OSCL ÿMTÿE ) SP-(),SPÿ(V MO ÿ P)(S,-EVJDOBÿ#V MO ÿ0:C0OI IE IL FUTNP ISELOÿC; ;E ICEV DUTNP ISEEAEL RND ALEFIT PUINE OSCL ÿ ;; ICIOE INUTROUBÿS; ;5 E APÕý4+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 ÿOVÿM E IL FUTNP INDMAOM;C ÿ ANLEÿCP RAÿT K OCBLK IN LOFS ESDRADÿ;1 ,RLBCOÿ#V MO ÿ LEFIT PUUT ONDMAOM;C ÿ ANLEÿCP RAÿT 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 ÿ LSÿRT EM ÿ ET STADAE ASLEREÿ;) R6-(1,ÿRV MO ÿ LTÿDT EM ÿ LEFIE ETEL;D ÿ6)(R,-R1 ÿOVÿM ) R6-(B,OF#B ÿOVÿM E IL FSELO;C ÿ ÿLSÿCT EM ÿ ES;Y ÿ6)(R,-R1 ÿOVÿM ? 'DITINT SEÿ;ÿ L IAECSP ÿEQÿBÓýÿªUª&;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 ÿSTÿT 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ÿ# ÿOVÿM: 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 CHSIÿCE BN ÿ 6334#32,@R ÿMPÿC: 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 ÿOVÿM: 00IGIO ;T GET PUIN ÿ ;; 46K1LN ÿBR ÿ +6DRJAOB1,40ÿ#V MO ÿ 46K1LN ÿBR ÿ +6DRJAOB ÿLRÿC 4 R-ADBJÿOR CL ÿ 14.+ ÿNEÿB 6 R+ADBJ,O01#4 ÿMPÿC: T2REER 00IGIO ÿBR ÿ ADRE ÿMTÿE ) SP-(V,DEBJ#O ÿOVÿM D EA RSTIR FRTTA;S ÿP)(S,-NA#I ÿOVÿM F DTÿOB LRÿC 4 R-ADBJÿOR CL ÿ ENOP ÿMTÿE ) SP-(V,DEBJ#OÿÿV MO ÿ P)(S,-DRJAOBÿ#V MO ÿ6:14NK L2 R-ADBJ,ONIPE#O ÿOVÿM 2 .+.= ÿ J/OBÿ/0 D5RAÿ. 4 .-.= ÿ ONSIENXT ELTAUEF DET;S ÿ+4DRJAOB0,ÿ#V MO ÿ 10.+ ÿNEÿB 4 R+ADBJÿOT TS ÿ7:14NK LR ADBJ,O6471#5 ÿOVÿM 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 ÿGTÿB E LUVAT OUTHWIS HETCWI;S ÿ ÿHDICCS ÿLTÿB 2 ,#)+R2ÿ(P CM ÿ ESCHITSWE OR MNOÿ;ÿ 1 CHSIÿCT BL ÿ #1),R2ÿ(P CM ÿ R.NT CCHITSWY BTRCNX.MAT ENEMCRDEÿ;ÿ 1 ,RR2ÿ@B SU ÿ ESCHITSWE OR MNOÿ;ÿ 1 CHSIÿCE BL ÿ S.TRCNH TCWI S &MENAV.DER FOE ATNSPEOM;C ÿ ÿR1 ÿECÿD: HBICCS R.NT CCHITSWT 1SO TNTOI;P ÿ ÿR20,#1 ÿDDÿA . DSOR WCHITSWM MUXIMAÿ;1 ,R2)(Rÿ4B OVÿM 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