From f3e418cdd4a888df5976f9169871aac2e09d472d Mon Sep 17 00:00:00 2001 From: Richard Cornwell Date: Wed, 23 Nov 2016 20:01:52 -0500 Subject: [PATCH] Initial commit --- src/cdrser.mac | 245 + src/clkcss.mac | 110 + src/clock.mac | 142 + src/comcon.mac | 310 + src/comcss.mac | 302 + src/comini.mac | 155 + src/conall.ccl | 28 + src/conseq.ccl | 36 + src/core.mac | 102 + src/dtser2.mac | 891 ++ src/eddt.mac | 3014 ++++ src/editor.mac | 702 + src/editor.opr | 10 + src/errcon.mac | 393 + src/fudge2.mac | 2012 +++ src/iocont.mac | 706 + src/iocss.mac | 695 + src/ioini.mac | 36 + src/ioini1.mac | 242 + src/ioini2.mac | 255 + src/iomax.mac | 43 + src/iomin.mac | 32 + src/jobdat.mac | 50 + src/loader.1 | 2385 +++ src/loader.52 | 5251 +++++++ src/loader.nih | 5136 +++++++ src/loader.v1 | 2348 +++ src/loader.v25 | 3168 ++++ src/loader.v57 | 6309 ++++++++ src/lptser.mac | 163 + src/m140.lst |37005 ++++++++++++++++++++++++++++++++++++++++++++ src/m140n.lst |46367 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/macro.10 | 7053 +++++++++ src/macro.25 | 7051 +++++++++ src/macro.30 | 7003 +++++++++ src/mtpser.mac | 409 + src/once.mac | 351 + src/pip.mac | 4050 +++++ src/pip.opr | 8 + src/ptpser.mac | 242 + src/ptrser.mac | 170 + src/rim10b.mac | 267 + src/runcss.mac | 428 + src/s.mac | 189 + src/savget.mac | 178 + src/scnser.mac | 818 + src/syscon.mac | 286 + src/syscss.mac | 101 + src/sysini.mac | 101 + src/sysmak.mac | 54 + src/tendmp.mac | 470 + 51 files changed, 147872 insertions(+), 0 deletions(-) create mode 100644 src/cdrser.mac create mode 100644 src/clkcss.mac create mode 100644 src/clock.mac create mode 100644 src/comcon.mac create mode 100644 src/comcss.mac create mode 100644 src/comini.mac create mode 100644 src/conall.ccl create mode 100644 src/conseq.ccl create mode 100644 src/core.mac create mode 100644 src/dtser2.mac create mode 100644 src/eddt.mac create mode 100644 src/editor.mac create mode 100644 src/editor.opr create mode 100644 src/errcon.mac create mode 100644 src/fudge2.mac create mode 100644 src/iocont.mac create mode 100644 src/iocss.mac create mode 100644 src/ioini.mac create mode 100644 src/ioini1.mac create mode 100644 src/ioini2.mac create mode 100644 src/iomax.mac create mode 100644 src/iomin.mac create mode 100644 src/jobdat.mac create mode 100644 src/loader.1 create mode 100644 src/loader.52 create mode 100644 src/loader.nih create mode 100644 src/loader.v1 create mode 100644 src/loader.v25 create mode 100644 src/loader.v57 create mode 100644 src/lptser.mac create mode 100644 src/m140.lst create mode 100644 src/m140n.lst create mode 100644 src/macro.10 create mode 100644 src/macro.25 create mode 100644 src/macro.30 create mode 100644 src/mtpser.mac create mode 100644 src/once.mac create mode 100644 src/pip.mac create mode 100644 src/pip.opr create mode 100644 src/ptpser.mac create mode 100644 src/ptrser.mac create mode 100644 src/rim10b.mac create mode 100644 src/runcss.mac create mode 100644 src/s.mac create mode 100644 src/savget.mac create mode 100644 src/scnser.mac create mode 100644 src/syscon.mac create mode 100644 src/syscss.mac create mode 100644 src/sysini.mac create mode 100644 src/sysmak.mac create mode 100644 src/tendmp.mac diff --git a/src/cdrser.mac b/src/cdrser.mac new file mode 100644 index 0000000..ddb0347 --- /dev/null +++ b/src/cdrser.mac @@ -0,0 +1,245 @@ +TITLE CDRSER - CARD READER SERVICE +SUBTTL 8-2-65 + + +EXTERNAL STODAT, ADVBFF, IOSET, SETIOD, SETBYT, STOSQD +EXTERNAL CDRSAV, CDRCHN, CDRRET,ILLOUT,PIOMOD +INTERNAL CDRINT + +;DEVICE DATA BLOCK LINKAGE +EXTERNAL CDRDB,CDRDAT,CRDIS +ENTRY CDRDSP + + +,CDR PARAMETER ASSIGNMENTS + +, CDR CONTROL REGISTER + CRDONE=10; DONE FLAG + CRBUSY=20; BUSY FLAG + CRBIN=40; BINARY + CRALL=100; ALL FLAG + CRMISS=200; DATA MISSED + CREOC=400; END OF CARD + CREOFF=1000; END OF FILE + CRERR=2000; ERROR + CHCHN=2 +, ACCUMULATORS + CRDAT1=TEM + CRAC=JDAT + +, SPECIAL IO STATUS WORD ASSIGNMENTS + CRMFST=40000; FIRST CARD + CRMBIN=200000; BINARY + CRMIMG=100000; IMAGE +, SPECIAL CHARACTERS + S2EOF=32; END OF FILE + +REPEAT 0,< +,CDR DATA BLOCK + +CDRDAT: SIXBIT /CRD + 34 + 0 + EXP CDRDSP + XWD 1400+PROG,10403 + 0 + 0 + XWD PROG,0 + 0 + 0 +CRDIS: JRST . +> + +,CDR SERVICE DISPATCH TABLE + +CDRDSP: CONO CR,0 ;RELEASE + POPJ PDP,; CLOSE + JRST ILLOUT ;OUTPUT + JRST CRINP; INPUT + + +CRINP: TLZ IOS,IOBEG; VIRGIN DEVICE? IOBUF:=0 + +CDRIN1: TLO IOS,IOFST+CRMFST; IOFST:=CRMFST:=1 + LDB TAC,PIOMOD + CAIN TAC,B; MODE=BINARY? + TLO IOS,CRMBIN; YES. CRMBIN:=1 + CAIN TAC,I; MODE=IMAGE? + TLO IOS,CRMIMG; YES. CRMIMG:=1 + TRO IOS,IOACT; IOACT:=1 + MOVEM IOS,DEVIOS(DEVDAT) + PUSHJ PDP,SETBYT; TAC0-5:=TAC12-13:=0; TAC6-11:=BYTE SIZE + MOVEM TAC,DEVPTR(DEVDAT) + MOVEI TAC, CDRCHN; ASSIGN PI CHANNEL + CONO CR,CRBIN+CRALL+CRBUSY(TAC); SELECT BINARY, ALL + POPJ PDP,; RETURN + + +CDRINT: CONSO CR,CRDONE; DONE FLAG? + JRST CDRINT + JSR CDRSAV; SAVE ACCUMULATORS AND ESTABLI + MOVEI DEVDAT,CDRDAT + MOVE IOS,DEVIOS(DEVDAT) + CONSZ CR, CRMISS+CRERR; DATA MISSED OR ERROR? + TRO IOS,IODERR; IODERR:=1 + DATAI CR, CRDAT1; INPUT INFORMATION + PUSHJ PDP,IOSET; PROG:=C(JBTADR18-35), ITEM:= C(DEVPTR) + TLZN IOS,CRMFST; FIRST CARD? CRMFST:=0 + XCT CRDIS ;NOT FIRST, GO TO SUBROUTINE + +CRFIRS: TRC CRDAT1, 7400; FIRST COL OF FIRST CARD + TRCN CRDAT1,7400; Y, X, 0, OR 1 PUNCH? + JRST CREOFC; NO, END OF FILE CARD + CONSZ CR, CREOFF; END OF FILE? + JRST CREOF; YES + TLNE IOS,CRMBIN; CRMBIN=1? + JRST CRFSTB; YES + TLNE IOS,CRMIMG; CRMIMG=1? + JRST CRFSTI; YES + JRST CRFSTL+1 + +CREOFC: MOVEI TAC,CDRCHN ;WAIT FOR EOC + CONO CR,CRBUSY(TAC) +CREOF: TLO IOS, IOEND; IUEND:=1 + MOVEI DAT,S2EOF + PUSHJ PDP,STODAT; STORE END OF FILE CHARACTER + SKIP + JRST CRLST2; BLOCK FULL OR BLOCK COMPLETE + MOVEI TAC,.; DATA STATED PROPERLY + HRRM TAC, CRDIS; SET DISPATCH TO RETURN HERE. + CONSO CR, CREOC; END OF CARD? + JRST CREXIT; NO. + PUSHJ PDP,ADVBFF; ADVANCE BUFFER + SKIP + TLO IOS,IOBEG; IOBEG:=1 + JRST CROFF + +CRFSTL: PUSHJ PDP, CRITMS; STORE ITEM + MOVEI TAC,CRCV; TAC:=CRCV. HOLLERITH READ + +CRREST: CONI CR, TAC1 + TRZ TAC1, CRBIN+CRALL+CRBUSY; SELECT HOLERITH, ALL:=0, BUS + CONO CR, (TAC1); RESET CARD READER + JRST CREXT1; CHANGE DISPATCH AND GO + +, HOLLERITH READ MODE + +CRCV: MOVE CRAC, [POINT 6,CRDAT1,23]; COLUMNS 79 AND 80 + CONSO CR,CREOC; END OF CARD? + MOVE CRAC,CRC1; NO. LOOK AT ALL CHARACTERS + LDBI TAC,CRAC ;CONVERT HOLLERITH + IDIVI TAC, 5; TO ASCII + LDB DAT, CRCV1(TAC1) + PUSHJ PDP,STODAT; STORE IN BU FER + JRST CREOF+1 + JRST CRINS + TLNE CRAC, 760000; WORD COMPLETE? + JRST CRCV+3; NO + CONSZ CR,CREOC; END OF CARD? + JRST CRINS; YES + MOVEI TAC, CRCV; NEXT DISPATCH TO CRCV. HOLLERITH READ + +CREXT1: HRRM TAC, CRDIS; UPDATE DISPTACHER + JRST CREXIT +CRCON: OCT 6424 + +CRINS: MOVE CRAC,CRC2; BLOCK FULL OR BLOCK COMPLETE INSERT CR + LDBI DAT, CRAC + PUSHJ PDP,STODAT; STORE CHAR + SKIP; EXIT1. + JRST CRLST2; EXIT2. BLOCK FULL OR BLOCK COMPLETE + TLNE CRAC,760000; THATS ALL? + JRST CRINS+1; NO + JRST CRLAST; END OF CARD + +, BINARY READ MODE + +CRFSTB: LDB TAC,[POINT 3,CRDAT1,35]; 7-9 PUNCH? + CAIE TAC, 5 + TRO IOS, IOIMPM; YES. IOIMPM:=1 + CONI CR, TAC + TRZ TAC, CRBUSY+CRALL; BUSY FLAG:=0, ALL FLAG;=0 + CONO CR,(TAC); RESET TO RE-READ COL 3 + MOVEI TAC, CRCOL2; DISPATCH TO CRCOL2 ON NEXT INTERRUPT + JRST CREXT1 + +CRCOL2: MOVEI TAC, CRCOL4; DISPATCH TO CRCOL4 ON NEXT INTERRUPT + HRRM TAC,CRDIS + +CRCOL4: MOVE DAT, CRDAT1 + PUSHJ PDP, CRITMS+1; STORE THE WORD FROM DAT + JRST CREXIT + +CRC1: POINT 6,CRDAT1 +CRC2: POINT 7,CRCON,20 + +,IMAGE READ MODE + +CRFSTI: MOVEI TAC, .+3; DISPATCH TO CRFSTI + 3 ON NEXT INTERRUP + DPB CRDAT1,[POINT 24,CRTEM,23]; SAVE COLUMN 1 AS MI + JRST CREXT1 + + PUSHJ PDP, CRITMS; SET ITEM AND CHECK SIZE + IOR CRDAT1, CRTEM; CRTEM12-35:=COL 1 AND 2 + MOVEI TAC, .+2; DISPATCH TO CRFSTI + 7 ON NEXT INTERRUP + JRST CRIM1+1 + + CONI CR, TAC1 + TRZ TAC1, CRBUSY+CRALL; BUSY FLAG:=ALL FLAG:=0 + CONO CR, (TAC1); RESET READER ON COL 3 + +CRIM1: MOVEI TAC,.; DISPATCH TO CRIM1 ON NEXT INTERRUPT + CONSZ CR, CREOC; END OF CARD? + JRST CRLAST; YES + MOVEM @DEVPTR(DEVDAT) + AOS DEVPTR(DEVDAT); INCREMENT ITEM POINTER + JRST CREXT1 + +CRITMS: TLO IOS, IOFST; IOFST:=1 + PUSHJ PDP, STODAT; STORE WORD + JRST CREOF+1 + JRST CREOF+1 + POPJ PDP,; RETURN + +CRCNV: ASCII ._123456789. + ASCII .0=@^'\ /ST. + ASCII .UVWXYZ;,(". + ASCII .#%-JKLMNOP. + ASCII .QR:$*[>&+A. + ASCII :BCDEFGHI?.: + ASCII :)] + +;QUANTUM TIMES FOR EACH QUEUE + +QUANTS: EXP 4 ;MAGTAPE QUEUE + EXP 4 ;DATA CONTROL QUEUE + EXP 4 ;DECTAPE QUEUE + EXP 6 ;IOWAIT SATISFIED QUEUE + EXP QUANT1 ;STRAIGHT COMPUTATION QUEUE + +XP QUANT1,^D15; STRAIGHT COMPUTATION QUEUE + + END, diff --git a/src/clock.mac b/src/clock.mac new file mode 100644 index 0000000..4f20263 --- /dev/null +++ b/src/clock.mac @@ -0,0 +1,142 @@ +TITLE CLOCK - CLOCK SERVICE ROUTINE +SUBTTL T. HASTINGS 6-2-65 +INTERNAL CLOCK, CLKINI,NULJOB,APRINT,RSCHED +EXTERNAL APRSAV, APRRET, APRCHN,APRILM,APRCHL +EXTERNAL COMCNT,COMMAND,JOB,JOBADR,APRSAC,JOBDAC,JOBPDP,JOBREL +EXTERNAL USRPDP,JOBPFU,JOBPC,JBTADR,JOBADR,JOBDAT,USRPFU,CLDS,NXTJOB +EXTERNAL STOPU,SCHEDF,TIME,JOBLEV,JOBUXT,UUO0,JOBDHI,CLKOFF,JBTSTS + +;CLOCK WILL TIME AN INTERVAL AND PUSHJ PDP, TO AN ADDRESS +;AFTER THE INTERVAL HAS EXPIRED +;TO MAKE A REQUEST: +; CONO PI,PIOFF +; DPBI AC,CLOCK +; CONO PI,PION +;AC MUST CONTAIN- XWD ADDRESS,NUMBER OF CLOCK COUNTS+DATA*1000 +;THE HIGH ORDER SIX BITS OF THE RIGHT HALF(DATA) ARE PLACED IN AC +;TAC RIGHT JUSTIFIED BEFORE THE PUSHJ PDP, ADDRES IS DONE + +;SYSTEM FLAGS: +; STOPU IS SET NON-ZERO AT EITHER INTERRUPT SERVICE LEVEL OR +; UUO LEVEL AND A CLOCK INTERRUPT IS REQUESTED WHEN CURRENT +; JOB MUST BE STOPPED AND ANOTHER ONE RUN. +; SCHEDF IS SET NON-ZERO BY CLOCK ROUTINE WHEN IF IS IN THE PROCESS +; OF RESCHEDULING. IT IS CLEARED AFTER JOB HAS BEEN SET TO +; CURRENTLY RUNNING JOB. +; TIME IS THE TIME SYSTEM HAS RUN IN 60THS OF A SECOND + +PION=200 +PIOFF=400 + +STOR=DAT +T=TAC +JA=JDAT + +CLOCK: POINT 36,CIPWT-1,35 ;BYTE POINTER TO CLOCK QUEUE +CIPWT: BLOCK 12 ;THE QUEUE + +CLKINI: MOVEI CIPWT-1 ;SET UP BYTE POINTER + HRRM CLOCK + POPJ PDP, + +APRINT: JRST .+2 ;HERE ON APR INTERRUPT + JRST . ;TO OTHER DEVICES ON THIS CHANNEL + CONSO APR,230000 ;IS IT ANY OF THE OTHERS + JRST CIP0 ;NO. GO CHECK CLOCK + JSR APRSAV ;YES, SAVE ACS + JRST APRILM ;AND GO PROCESS ILLEGAL MEMOR +CIP0: CONSO APR, 2000 ;IS CLOCK ENABLED + JRST CIP1 ;NO. GO TO OTHER DEVICES + CONSZ APR, 1000 ;YES, DID CLOCK CAUSE INTERRUPT + JRST CIP2 ;YES +CIP1: SKIPN STOPU ;NO, IS THIS A REQUEST INTERRUPT + JRST APRINT+1 ;NO. GO TO OTHER DEVICES +CIP1B: JSR APRSAV ;YES, SAVE ACS + JRST CIP6 ;RESCHEDULE BUT DONT TIME + +CIP2: JSR APRSAV ;SAVE ACS + AOS TIME ;INCREMENT TIME + MOVE TAC,JOB ;DECREMENT CURRENT JOBS RUNNING TIME + SOS JBTSTS(TAC) + CONO APR,CLKOFF ;TURN CLOCK FLAG OFF + +;PROCESS TIMING REQUESTS STORED IN QUEUE + HRRZ STOR, CLOCK ;GET END OF LIST +CIP4: CAIN STOR, CIPWT-1 ;END YET + JRST CIP5 ;YES + SOS TAC1, (STOR) ;DECREMENT TIMING REQUEST + TRNE TAC1, 7777 ;TIME EXPIRED YET + SOJA STOR, CIP4 ;NO, CONTINUE SCAN + CONO PI, PIOFF ;YES. MOVE LAST ITEM IN LIST TO THS + MOVE TAC, @CLOCK + SOS CLOCK + CONO PI, PION + MOVEM TAC, (STOR) + LDB TAC, [POINT 6, TAC1, 23] ;GET 6 BIT DATA ITEM + MOVSS TAC1 ;SETUP DISPATCH ADDRESS + PUSH PDP, STOR ;SAVE ONLY VALUABLE AC + PUSHJ PDP, (TAC1) ;AND DISPATCH TO TIMING REQUEST ROUTINE + POP PDP, STOR + SOJA STOR, CIP4 ;GO BACK FOR MORE REQUESTS + +CIP5: SKIPE COMCNT ;ANY COMMANDS TO PROCESS + PUSHJ PDP, COMMAND ;YES +RSCHED: ;RESCHEDULE, HERE AFTER APRILM +CIP6: SETZM STOPU ;CLEAR INTERRUPT REQUEST FLAG + SETOM SCHEDF ;FLAG THAT SCHEDULING IS IN PROGRESS + PUSHJ PDP, NXTJOB ;RETURN HIGHEST PRIORITY JOB IN AC ITEM + CAMN ITEM, JOB ;IS IT SAME AS CURRENT JOB + JRST CIP8 ;YES, EXIT + +;DIFFERENT JOB, SAVE OLD JOB + SKIPN JOB ;IS OLD JOB THE NULL JOB + JRST CIP7 ;YES, DONT BOTHER TO SAVE ANYTHING + MOVE JA, JOBADR ;NO. MOVE CHANNEL ACS TO USER JOB AREA + MOVEI T,JOBDAC(JA) + HRLI T, APRSAC + BLT T, JOBDHI(JA) + MOVEI T, JOBPDP(JA) ;MOVE JOB STATE VARIABLES TO JOB DATA A + HRLI T, USRPDP + BLT T, JOBPFU(JA) + MOVE T, 40 ;SAVE LOC. 40 + MOVEM T, JOBLEV(JA) + MOVE T, UUO0 ;AND UUO PC + MOVEM T, JOBUXT(JA) + MOVE T, APRCHL ;SET C(CHANNEL INTERRUPT LOC.) AS PC + MOVEM T, JOBPC(JA) + + +;RESTOR NEW JOB +CIP7: MOVEM ITEM, JOB ;STORE NEW CURRENT JOB NUMBER + SETZB 0,SCHEDF ;INDICATE SCHEDULING FINISHED + JUMPE ITEM, NUL0 ;IS NEW JOB NULL JOB + MOVE JA, JBTADR(ITEM) ;SETUP STATE VARIABLES FOR CU + HRRZM JA, JOBADR ;IN SYSTEM AREA + HRRZM JA, JOBDAT + HLRZM JA, JOBREL(JA) ;SET RELOCATION AND PROTECTION + DATAO JA + MOVEI T,USRPDP + HRLI T, JOBPDP(JA) ;MOVE JOB STATE VARIABLES TO SYSTEM ARE + BLT T, USRPFU + MOVE T, JOBLEV(JA) ;RESTORE LOC. 40 + MOVEM T, 40 + MOVE T, JOBUXT(JA) ;AND UUO PC + MOVEM T, UUO0 + MOVE T, JOBPC(JA) ;SET C(CHANNEL LOC.) TO C(JOBPC) + MOVEM T, APRCHL + MOVSI 17, JOBDAC(JA) ;RESTORE USER ACS + BLT 17,17 + SKIPE STOPU ;HAS STOPU BEEN SET SINCE CIP6 + JRST CIP1B ;YES, GO RESCHEDULE + JEN @APRCHL ;NO. DISMISS CHANNEL + +CIP8: SETZM SCHEDF ;CLEAR SCHEDULING FLAG + JRST APRRET ;AND DISMISS INTERRUPT + +;THE NULL JOB +NUL0: JRST 10, NULJOB ;RENABLE AND RUN IN EXEC. MODE + +NULJOB: MOVE 1,.+1 + AOJA 0,1 ;COUNT IN AC0 FOR VISUAL MONITORING + ;ALSO PC = 1 + END, diff --git a/src/comcon.mac b/src/comcon.mac new file mode 100644 index 0000000..cf4d2c4 --- /dev/null +++ b/src/comcon.mac @@ -0,0 +1,310 @@ + TITLE COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES + SUBTTL T.HASTINGS 8-2-65 +;CALLED FROM COMMAND DECODER WHICH IS CALLED FROM CLOCK ROUTINE +;WITH FOLLOWING ACS SET: +;TAC= BYTE POINTER TO COMMAND STRING(SPACE OR CR AFTER COMMAND NAME) +;ITEM = JOB NUMBER +;DAT = BYTE POINTER TO LAST OUTPUT CHARACTER +;DEVDAT= ADDRESS OF DEVICE DATA BLOCK INITIATING COMMAND +;JDAT = ADDRESS OF JOB DATA AREA, = 0 IF NO JOB AREA + +;UPON RETURN FROM COMMAND SETUP ROUTINE, A CR-LF IS ADDED IF +;NEEDED AND TTY IS STARTED + +;SINCE THE COMMAND DECODER IS CALLED FROM THE CLOCK ROUTINE +;COMMAND SETUP ROUTINES MUST RUN TO COMPLETION QUICKLY +;IF A COMMAND FUNCTION CANNOT DO THIS, IT MUST JUST SET +;THE JOB TO A RUNNABLE STATUS AND RETURN I MEDIATELY + +; "IJOB" - INITIALIZE JOB +INTERNAL IJOB +EXTERNAL RADX10,JOBINI,JOBKIL,CRLF,MONJOB + +IJOB: JRST JOBINI + +;PRINT JOB NUMBER + + INTERNAL PJOB +PJOB: MOVE TAC, ITEM + PUSHJ PDP,RADX10 + JRST CRLF + +;KILL JOB(MUST HAVE CORE ASSIGNED) + + INTERNAL KJOB +KJOB: JRST JOBKIL + + +; "START L" OR "START" - START AT LOC. L OR STARTING ADDRESS +INTERNAL START +EXTERNAL OCTIN,JOBSA,START1,COMERA,STARTU,CPOPJ,CPOPJ1,STARTM + +START: PUSHJ PDP,STRT + JRST COMERA ;ERROR + JRST STARTU ;GO SET JOB TO START(CONSOLE IN USER MO + +; "STARTC L" OR "STARTC" - START AT LOC. L(TTY IN COMMAND MODE) + +INTERNAL STARTC +EXTERNAL STARTM + +STARTC: PUSHJ PDP,STRT + JRST COMERA ;ERROR + JRST STARTM ;FO SET JOB TO START(TTY IN COM. MODE) + +;ROUTINE TO SCAN ARGUMENT + +STRT: PUSHJ PDP,OCTIN ;CONVERT OCTAL NO, + JRST ST2 ;EITHER NO NUMBER OR ERROR + JRST ST3 ;START JOB C(TAC1) + +ST2: JUMPN TAC1, CPOPJ ;NOT A NUMBER IF NON-ZERO + HRRZ TAC1, JOBSA(JDAT) ;NO, START AT STARTING ADDRES +ST3: HRLI TAC1, 1000 ;USER MODE FLAG + JRST CPOPJ1 ;OR RETURN + + +; "CONT" - CONTINUE EXECUTION FROM WHERE LEFT OFF +INTERNAL CONT +EXTERNAL CONTU,CONMES,JBTSTS + +CONT: MOVSI TAC1, JERR + TDNN TAC1, JBTSTS(ITEM) ;IS JOB ERROR BIT SET? + JRST CONTU ;NO, GO SET JOB TO CONTINUE +CONTA: JSP TAC,CONMES ;YES, PRINT CANT CONTINUE + + ASCIZ /CAN'T CONTINUE +/ + +; "CONTC" - CONTINUE EXECUTION(TTY REMAINS IN COMMAND MODE) + +INTERNAL CONTC +EXTERNAL CONTM + +CONTC: MOVSI TAC1, JERR + TDNN TAC1, JBTSTS(ITEM) ;IS JOB ERROR BIT SET? + JRST CONTM ;NO + JRST CONTA ;YES + +; "DDT" - START EXECUTION AT DDT IN USER AREA +INTERNAL DDTGO +EXTERNAL JOBDDT,STARTU + +DDTGO: HRRZ TAC1, JOBDDT(JDAT) ;GET DDT STARTING ADDRESS + JUMPN TAC1,DDT1 ;GO START JOB IF NON-ZERO + JSP TAC,CONMES ;ZERO, PRINT"NO DDT" + + ASCII /NO DDT +/ + +DDT1: HRLI TAC1,USRMOD ;USER MODE BIT + JRST STARTU ;GO SET TO RUN JOB +;DIGITAL MAYNARD + +INTERNAL DIGITAL + +DIGITAL: JSP TAC,CONMES + ASCIZ /HELLO +/ + + + + +; "CORE #" - ASSIGNS #*1024 WORDS OF CORE TO JOB +; "CORE" WITH NO ARGUMENT IS EQUIVALENT TO "CORE 0" + +INTERNAL CORE +EXTERNAL CORE1,DECIN,ANYRIN,CONMES,COMERA,NOTENF +EXTERNAL JOBPFI,JBTADR,CPOPJ,JOBPRT,JOBPR1,JOBZER +EXTERNAL RADX10 + +CORE: PUSHJ PDP, DECIN ;GET NO. OF 1K BLOCKS + JRST COR3 ;ERROR + SKIPN TAC,TAC1 ;IS ZERO BEING ASKED FOR? + JUMPN JDAT,JOBZER ;YES, RELEASE ALL DEVICES IF THERE WAS + PUSHJ PDP,CORE1 + JRST COR2 ;CORE NOT AVAILABLE (AC TAC = BLO CKS L + HRRZ JDAT, JBTADR(ITEM) ;CORE GRANTED, CLEAR PART OF + JUMPE JDAT, CPOPJ ;UNLESS ALL CORE WAS RETURNED + SETZM JOBPRT(JDAT) ;CLEAR PART PROTECTED FROM IO + HRLI TAC,JOBPRT(JDAT) + HRRI TAC, JOBPR1(JDAT) + BLT TAC, JOBPFI(JDAT) + POPJ PDP, + +COR2: PUSHJ PDP,RADX10 ;PRINT NO. OF FREE 1K BLOCKS LEFT + JSP TAC,CONMES + + ASCIZ / FREE 1K BLOCKS LEFT, NONE ASSIGNED +/ +COR3: JUMPN TAC1, COMERA ;NOT A NO. IF NON-ZERO, APPEND "?" + JRST NOTENF ;NOT ENOUGH ARGUMENT + + +; "SAVE FILE-NAME" - SAVES JOB AREA ON RETRIEVABLE DEVICE +;ONLY A SAVE OR A GET IN PROGRESS FOR EACH JOB +;NO ATTEMPT IS MADE TO SAVE DEVICE ASSIGNMENTS, ACS, OR PC +INTERNAL SAVE +EXTERNAL SAVJOB,START1,SGSET + +SAVE: MOVEI TAC1, SAVJOB ;SETUP TO RUN SAVJOB + JRST SGSET + +; "GET DEVICE:FILE-NAME" - SETS UP JOB AREA FROM RETRIEVABLE DEVICE +INTERNAL GET +EXTERNAL GETJOB + +GET: MOVEI TAC1, GETJOB ;SETUP TO RUN GET JOB + JRST SGSET + + + +;"ASSIGN DEV:NAME" - ASSIGNS DEV TO JOB AND GIVES IT LOGICAL NAME NAM + +;TEMPORARY ACS + T1=BUFPNT + T=BUFWRD + +INTERNAL ASSIGN +EXTERNAL CTEXT1, NOTENF, DEVLST, ASSASG, CONMES, PJOBN, ANYRDX, ERNAM +EXTERNAL CRLF, DEVLG,SYSTAP + +ASSIGN: PUSHJ PDP, CTEXT1 ;GET FIRST ARGUMENT + JUMPE TAC1, NOTENF ;NO ARGUMENTS TYPED IF 0 + MOVE T1, TAC1 ;SAVE DEVICE NAME + PUSH PDP, ASSCON ;SAVE INPUT BYTE POINTER + MOVEI TAC1, ASSCON ;SETUP ASSIGNED BY CONSOLE BIT +ASSN: HLRZ DEVDAT, DEVLST +ASSG0: CAME T1,DEVNAM(DEVDAT) ;DOES PHYSICAL NAME MATCH? + JRST ASSG1 ;NO + PUSHJ PDP, ASSASG ;YES, TRY TO ASSIGN DEVICE + JRST ASSER1 ;ALREADY ASSIGNED TO ANOTHER JOB + JRST ASSFIN ;ASSIGNED + +ASSG1: MOVE TAC,DEVNAM(DEVDAT) ;IS THIS THE SYSTEM TAPE? + CAMN TAC,SYSTAP + JRST ASSG2 ;YES + LDB T, PJOBN ;SAVE OLD JOB NUMBER FOR THIS + TRZ TAC,-1 ;COMPARE LEFT HALF ONLY + CAMN TAC, T1 + PUSHJ PDP, ASSASG ;MATCH, TRY TO ASSIGN IT + JRST ASSG2 ;KEEP LOOKING + JUMPE T,ASSFIN ;IF OLD JOB NUMBER 0, DEVICE PREVIOSLY + +ASSG2: HLRZ DEVDAT, DEVSER(DEVDAT) + JUMPN DEVDAT, ASSG0 + POP PDP, TAC + JRST NOTDEV ;PRINT NO SUCH DEVICE + + +;ALREADY ASSIGNED TO ANOTHER JOB + +ASSER1: POP PDP, TAC + MOVEI TAC, ASSMS2 + PUSHJ PDP, CONMES + MOVEI TAC1, ^D10 + LDB TAC, PJOBN + PUSHJ PDP,ANYRDX + JRST CRLF + +ASSMS2: ASCIZ /ALREADY ASSIGNED TO JOB / + +;DEVICE ASSIGNED, GIVE IT A LOGICAL NAME + +ASSFIN: POP PDP,TAC ;RESTORE INPUT BYTE POINTER + PUSH PDP,DEVDAT ;SAVE DDB ADDRESS + PUSHJ PDP,CTEXT1 ;GET SECOND ARG, LOGICAL DEVICE NAME + SKIPE TAC,TAC1 ;IS THERE A LOGICAL NAME SPECIFIED? + PUSHJ PDP, DEVLG ;YES, SEE IF IT IS ALREADY IN USE + ;BY THIS USER + JRST ASSF1 ;NO + MOVEI TAC,LOGERR ;YES, PRINT ERROR + PUSHJ PDP,CONMES +ASSF1: MOVE DEVDAT,(PDP) ;RESTORE DDB ADDRESS + MOVEM TAC1,DEVLOG(DEVDAT) ;STORE IN DEVICE DATA BLOCK + MOVSI TAC1,DVDIRIN ;CLEAR DIRECTORY IN CORE BIT + ANDCAM TAC1,DEVMOD(DEVDAT) + PUSHJ PDP, ERNAM ;PRINT PHYSICAL DEVICE NAME + POP PDP, DEVDAT + JSP TAC,CONMES + + ASCIZ / ASSIGNED +/ + +LOGERR: ASCIZ /LOGICAL NAME ALREADY IN USE, / + + +;"DEASSIGN DEV" - DEASSIGNS DEVICE FROM CONSOLE + +INTERNAL DEASSIGN, NOTDEV +EXTERNAL CTEXT1, DEVSRC, CONMES, ERNAM, DEASG, DEASTY + +DEASSIGN: PUSHJ PDP, CTEXT1 ;GET DEVICE NAME + JUMPE TAC1,DEASTY ;NO ARG. IF 0, DEASSIGN ALL BUT TTY + MOVE TAC, TAC1 ;DEVICE NAME + PUSHJ PDP, DEVSRC ;SEARCH FOR DEVICE + JRST DEAER1 ;NOT FOUND + PUSHJ PDP, DEASG ;FOUND, DEASSIGN IT + JRST DEAER2 ;NOT PREVIOUSLY ASSIGNED + POPJ PDP, ;DEVICE DEASSIGNED + +NOTDEV: +DEAER1: JSP TAC,CONMES ;PRINT NO SUCH DEVICE + + ASCIZ /NO SUCH DEVICE +/ + +DEAER2: PUSH PDP, DEVDAT ;PRINT PHYSICAL DEVICE NAME + PUSHJ PDP, ERNAM + POP PDP, DEVDAT + JSP TAC,CONMES + + ASCIZ /WASN'T ASSIGNED +/ + + +; "ATTACH N" - ATTACH CONSOLE TO JOB N +;CHANGES ADDRESS OF TTY DEVICE DATA BLOCK STORED IN -1(PDP) +;BY THE COMMAND DECODER + +INTERNAL ATTACH +EXTERNAL DECIN,TTYATT,JOBN,ERNAM,CONMES,TTYFND + +ATTACH: PUSHJ PDP,DECIN ;GET JOB NO. + JRST ATT1 ;NOT A NUMBER OR NONE SPECIFIEED + SKIPE TAC1 ;0 IS ILLEGAL + CAIL TAC1, JOBN ;IS JOB NUMBER TOO BIG? + JRST ATT1 ;ILLEGAL JOB NUMBER + MOVSI TAC,JNA ;HAS THIS JOB NO BEEN ASSIGNED? + TDNN TAC,JBTSTS(TAC1) + JRST ATT4 ;NO, PRINT ERROR + MOVE ITEM,TAC1 ;JOB NUMBER TO ITEM + PUSHJ PDP,TTYATT ;NO, ATTACH TTY + JRST ATT2 ;ERROR CANT ATTACH + MOVEM DEVDAT,-1(PDP) ;CHANGE DEV DATA BLOCK ADDRES + JRST TTYFND ;ATTACHED. GO SET UP OUTP. BYTE PTR. + +ATT1: JSP TAC,CONMES + ASCIZ /ILLEGAL JOB NUMBER +/ + +ATT2: PUSH PDP,DEVDAT + PUSHJ PDP,ERNAM ;PRINT TTY DEVICE NAME + POP PDP,TAC + JSP TAC,CONMES + ASCIZ / ALREADY ATTACHED +/ + +ATT4: JSP TAC,CONMES + ASCIZ /JOB NEVER WAS INITIATED +/ + +; "DETACH" - DETACH CONSOLE FORM JOB + +INTERNAL DETACH +EXTERNAL TTYDET + +DETACH: AOS (PDP) ;SUPRESS CR-LF SO NO TTY DDB SETUP + JRST TTYDET ;GO DETACH TTY + + END, diff --git a/src/comcss.mac b/src/comcss.mac new file mode 100644 index 0000000..bf2ab39 --- /dev/null +++ b/src/comcss.mac @@ -0,0 +1,302 @@ +TITLE COMCSS - COMMAND COMMON ROUTINES +SUBTTL T. HASTINGS 8-15-65 +;ROUTINE TO RETURN NEXT ALPHANUMERIC STRING +; IN COMMAND LINE (SIXBIT) +; CALL: MOVE TAC, BYTE POINTER TO FIRST CHAR.-1 +; PUSHJ PDP, CTEXT +; SIXBIT STRING RETURN LEFT JUSTIFIED IN AC TAC1 + +INTERNAL CTEXT, CTEXT1 + +T=BUFPNT ;TEMPORARY ACS +T1=BUFWRD +T2=UUO + +CTEXT1: MOVEI TAC1, 0 ;CHECK PREVIOUS BREAK CHAR. + LDB T, TAC + CAIN T, 15 ;RETURN IF CR. + POPJ PDP, + +CTEXT: PUSHJ PDP, SKIPS ;SKIP LEADING SPACES, TABS + MOVE T,[POINT 6,TAC1] + MOVEI TAC1, 0 + LDB T1, TAC + JRST CTEX1 +CTEX0: ILDB T1,TAC +CTEX1: PUSHJ PDP, CTEX ;IS IT ALPHANUMERIC + POPJ PDP, ;NO. EXIT + TRC T1,40 ;CONVERT TO SIXBIT + IDPB T1,T ;YES, STORE AWAY + CAME T,[POINT 6,TAC1,35] ;SIX CHARACTER YET + JRST CTEX0 ;NO +CTEX2: ILDB T1, TAC ;YES + PUSHJ PDP, CTEX ;IS IT ALPHANUMERIC + POPJ PDP, ;NO, EXIT + JRST CTEX2 + +;SCAN FOR ALPHANUMERIC CHAR IN T1 +CTEX: CAIL T1, "0" + CAILE T1, "Z" ;LETTERS ARE LARGER THAN NOS. + POPJ PDP, ;NEITHER + CAILE T1, "9" + CAIL T1, "A" + AOS (PDP) ;LETTER OR NUMBER + POPJ PDP, + +;ROUTINE TO IGNORE LEADING SPACES AND TABS +;CALL: MOVE TAC, BYTE POINTER TO CHAR. +; PUSHJ PDP, SKIPS1 + +INTERNAL SKIPS1 + +SKIPS1: LDB T, TAC + JRST SKIPSA + +;ROUTINE TO IGNORE LEDING SPACES AND TABS +;CALL: MOVE TAC, BYTE POINTER TO CHAR.-1 +; PUSHJ PDP, SKIPS + +INTERNAL SKIPS + +SKIPS: ILDB T, TAC +SKIPSA: CAIE T, " " + CAIN T, 11 + JRST SKIPS + POPJ PDP, + +;ROUTINE TO APPEND A "?" TO INPUT STRING AND SET AS OUTPUT +;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING +; PUSHJ PDP, COMERA + +INTERNAL COMERA + +COMERA: IBP TAC + +;ROUTINE TO REPLACE LAST CHARACTER IN INPUT STRING BY "?" +;AND SET AS OUTPUT +;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING +; PUSHJ PDP, COMERR + +INTERNAL COMERR + +EXTERNAL TTYBUF + +COMERR: MOVE DAT,TAC + MOVEI T,TTYBUF(DEVDAT) ;IS THERE MORE THAN 3 WORDS I + CAIGE T,-3(DAT) + HRRI DAT,3(T) ;YES, TYPE ONLY 3 + MOVEI T, "?" ;APPEND "?" + DPB T, DAT + JSP TAC,CONMES + + ASCIZ / MONITOR COMMAND ERROR +/ + +;ROUTINE TO PRINT CARRIAGE RETURN-LINE-FEED +;CALL: MOVE DAT,BYTE POINTER TO OUTPUT +; PUSHJ PDP,CRLF + +INTERNAL CRLF + +CRLF: MOVEI TAC,[ASCII / +/] + +;ROUTINE TO MOVE ASCII CHAR. STRING TO CONSOLE OUTPUT BUFFER +; CALL: MOVE DAT, BYTE POINTER TO LAST OUTPUT CHARACTER +; MOVEI TAC, ADDRESS OF ASCII MESSAGE` +; PUSHJ PDP, CONMES +; STRING TERMINATED BY NULL +; CONMES DOES NOT START TTY + +INTERNAL CONMES + +CONMES: PUSH PDP, TAC1 + HRLI TAC, 440700 ;FORM BYTE POINTER +CON0: ILDB TAC1, TAC + JUMPE TAC1, CON1 + IDPB TAC1, DAT + JRST CON0 +CON1: POP PDP, TAC1 + POPJ PDP, + +;ROUTINE TO PRINT "TO FEW ARGUMENTS" +;CALL: MOVE DAT,BYTE POINTER +; PUSHJ PDP,NOTENF + +INTERNAL NOTENF + +NOTENF: JSP TAC,CONMES + +ASCIZ /TOO FEW ARGUMENTS +/ + +;ROUTINE TO INITIALIZE A JOB +;CALL: MOVE ITEM, JOB NUMBER +; PUSHJ PDP, JOBINI +; DEVDAT IS SETUP ON RETURN + +INTERNAL JOBINI,JOBZER +EXTERNAL JBTSTS,PJOBN,CORE1,MONJOB,ESTOP,TTYATT + +JOBINI: JUMPN ITEM,JOB0 ;HAS A JOB NUMBER BEED ASSIGNED? + PUSHJ PDP,ASSJOB ;NO, THEN ASSIGN ONE. + JRST CONMESS ;NONE LEFT +JOB0: PUSHJ PDP,TTYATT ;ATTACH TTY + JFCL ;ALREADY ATTACHED + MOVSI TAC,JNA ;CLEAR JOB NO. ASSIGNED BIT + ANDCAM TAC,JBTSTS(ITEM) ;TO FORCE MESSAGE + MOVSI TAC,646471 ;SIXBIT /TTY/ + MOVEM TAC, DEVLOG(DEVDAT) ;SET LOGICAL NAME + MOVEI T, ASSCON ;SET ASSIGNED BY CONSOLE BIT + IORM T, DEVMOD(DEVDAT) + PUSHJ PDP, DEASTY ;DE-ASSIGNED ALL DEVICES EXCEPT TTY + JUMPE JDAT,CPOPJ ;DOES JOB ALREDY HAVE CORE? + +;ROUTINE TO RELEASE ALL DEVICES AND FLUSH CORE +;RUN AS MONITOR JOB +;CALL: SAME AS JOBIN + +EXTERNAL IOKILL + +JOBZER: HRRI TAC1,JOB1 ;ADDRESS OF SUB. TO RELEASE DEV. +JOBZR1: HRLI TAC1, ESTOP ;RETURN ADDRESS AFER IORELS + JRST MONJOB ;GO SCHEDULE MONITOR JOB + +JOB1: PUSHJ PDP,IOKILL ;KILL ALL IO DEVICES + MOVEI TAC,0 ;FLUSH ALL CORE + SOS (PDP) ;CORE1 WILL SKIP RETURN + JRST CORE1 + +;ROUTINE TO KILL CURRENT JOB +;CALL PUSHJ PDP,JOBKIL + +INTERNAL JOBKIL +EXTERNAL JBTSTS,TTYKIL + +JOBKIL: AOS (PDP) ;SUPRESS CR-LF AND JOB INIT. CHECK + MOVEI TAC,1 + PUSHJ PDP,DEASAL ;DEASSIGN ALL DEVICES + JUMPE JDAT,JOBKA ;DOES JOB HAVE CORE? + HRRI TAC1,JOBK2 ;YES,RELEAS DEVICE AND CLEAR + JRST JOBZR1 + +JOBK2: PUSH PDP,DEVDAT ;SAVE DEVDAT FOR TTYKIL + PUSHJ PDP,JOB1 ;FLUSH CORE AND RELEASE DEVICES + POP PDP,DEVDAT +JOBKA: MOVSI TAC,JERR ;CLEAR ALL BUT JOB ERROR BIT + MOVEM TAC,JBTSTS(ITEM) ;IN JOB STATUS WORD + JRST TTYKIL ;RETURN TTY TO VIRGIN STATE + +;ROUTINE TO ASSIGN AN UNUSED JOB NUMBER +;CALL PUSHJ PDP,ASSJOB +; ERROR RETURN TAC DESTROYED +; OK RETURN ITEM SET, TAC AND TAC1 PRESERVED + +INTERNAL ASSJOB +EXTERNAL MJOBN,JBTSTS,CPOPJ1 + +ASSJOB: MOVSI ITEM,MJOBN + AOBJN ITEM,.+1 + MOVSI T1,JNA + TDNE T1,JBTSTS(ITEM) + AOBJN ITEM,.-1 + JUMPGE ITEM,ASSJB1 + ANDI ITEM,-1 + JRST CPOPJ1 + +ASSJB1: JSP TAC,CONMES + ASCIZ /JOB CAPACITY EXCEEDED +/ + +;ROUTINE TO DEASSIGN A DEVICE +;CALL: MOVE DEVDAT, DEVICE DATA BLOCK +; MOVE ITEM, JOB NUMBER +; PUSHJ DPD, DEASG +; ERROR NOT PREVIOUSLY ASSIGNED +; OK RETURN WITH DEVICE DEASSIGNED + +INTERNAL DEASG +EXTERNAL PJOBN, CPOPJ1 + +DEASG: LDB T, PJOBN ;WAS DEVICE ASSIGNED TO THIS JOB? + CAME T, ITEM + POPJ PDP, ;NO. RETURN + MOVSI T,DVDIRIN ;CLEAR DIRECTORY IN CORE BIT + ANDCAM T,DEVMOD(DEVDAT) + MOVEI T, ASSCON ;YES, IS ASSIGNED BY CONSOLE BIT ON? + TDNN T, DEVMOD(DEVDAT) + POPJ PDP, ;NO + ANDCAB T,DEVMOD(DEVDAT) ;YES, CLEAR BIT + SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME + TRNE T, ASSPRG ;IS ASSIGNED BY PROGRAM BIT ON? + JRST CPOPJ1 ;YES + MOVEI T,0 ;NO, CLEAR JOB NUMBER + DPB T, PJOBN + JRST CPOPJ1 + +;ROUTINE TO DEASSIGN ALL DEVICES EXCEPT LOGICAL TTY +;CALL: MOVE ITEM, JOB NUMBER +; PUSHJ PDP, DEASTY + +INTERNAL DEASTY + +DEASTY: MOVSI TAC, 646471 ;SIXBIT /TTY/ + ;FALL INTO DEASAL + +;ROUTINE TO DEASSIGN ALL DEVICES EXECPT ONE +;CALL: MOVE ITEM, JOB NUMBER +; MOVE TAC, LOGICAL DEVICE NOT TO BE DEASSIGNED +; PUSHJ PDP, DEASAL + +INTERNAL DEASAL +EXTERNAL DEVLST + +DEASAL: PUSH PDP,DEVDAT + HLRZ DEVDAT,DEVLST ;SEARCH ALL DDBS +DEA1: CAME TAC, DEVLOG(DEVDAT) ;IS THIS THE LOGICAL NAME + PUSHJ PDP, DEASG ;NO, TRY TO DEASSIGN IT + JFCL ;IGNORE IF CANT + HLRZ DEVDAT, DEVSER(DEVDAT) + JUMPN DEVDAT, DEA1 + POP PDP,DEVDAT + POPJ PDP, + +;ROUTINE TO READ CONSOLE AND CONVERT ANY RADIX NUMBER +; CALL: MOVE TAC1, DESIRED RADIX +; MOVE TAC, BYTE POINTER TO FIRST CHRACTER +; PUSHJ PDP, ANYRIN +; ERROR EXIT ;AC TAC1=0 IF NO NUMBER BEFORE FIRST NO +; NORMAL EXIT ;AC TAC1 CONTAINS NUMEBR +; SCAN STOPS ON FIRST ILLEGAL CHARACTER OR CR +; IGNORES SPACES, TABS, RUBOUTS + +INTERNAL OCTIN,ANYRIN,DECIN,DECIN1 +EXTERNAL CPOPJ1, CPOPJ + +C=BUFPNT ;CHARACTER AC +R=BUFWRD ;RADIX AC + +DECIN1: IBP TAC ;SKIP SEPARATION CHARACTER +DECIN: MOVEI TAC1,12 ;DECIMAL INPUT + JRST ANYRIN + +OCTIN: MOVEI TAC1, 10 +ANYRIN: MOVE R, TAC1 + MOVEI TAC1, 0 + PUSHJ PDP, SKIPS1 ;SKIP LEADING SPACES, TABS + LDB C, TAC + CAIN C, 15 ;CHECK FOR INITIAL CR + POPJ PDP, ;EXIT WITH 0 IN TAC1 +OCT0: CAIE C,"-" ;DASH? + CAIN C,15 ;CR? + JRST CPOPJ1 ;YES, ONLY LEGAL TERMINATORS + SUBI C,60 + JUMPL C, OCTE ;ERROR IF NEGATIVE + CAML C, R ;OR .GE. RADIX +OCTE: AOJA TAC1,CPOPJ ;ERROR,INSURE TAC1 NON-ZERO + IMUL TAC1, R + ADD TAC1, C +OCT1: ILDB C, TAC + JRST OCT0 + + END, diff --git a/src/comini.mac b/src/comini.mac new file mode 100644 index 0000000..67ded48 --- /dev/null +++ b/src/comini.mac @@ -0,0 +1,155 @@ + TITLE COMINI - THE COMMAND DECODER + SUBTTL T. HASTINGS 8-2-65 +;CALLED FROM CLOCK ROUTINE WHEN COMCNT IS GREATER THAN 0 +;AS SET BY TTY SERVICE ROUTINE +;ALL ACS HAVE BEEN SAVED BY CLOCK CHANNEL +;THE COMMAND DECODER CALLS TTYCOM WHICH SCANS FOR TTY WHICH TYPED +;THE COMMAND AND THEN DISPATCHES(PUSHJ) TO APPROPRIATE +;COMMAND SETUP ROTUINE OF THE SAME NAME WITH ACS SET AS: +;ITEM = JOB NUMBER +;TAC = BYTE POINTER TO COMMAND STRING(SSPACE OR CR AFTER COMMAND NAME) +;DAT = BYTE POINTER TO LAST OUTPUT CHARACTER +;DEVDAT = ADDRESS OF DEVICE DATA BLOCK TYPING COMMAND +;JDAT = ADDRESS OF JOB AREA, = 0 IF NO JOB AREA +;PROG = ADDRESS OF PROGRAM AREA +;DEVDAT IS ALSO PUSHED ON END OF PD LIST SO IT MAY BE DESTROYED +;UPON RETURN FROM COMMAND SETUP ROUTINE. A CR-LF IS ADDED TO +;MASSAGE AND TTY IS STARTED ON TTY SPCIFIED BY -1(PDP) + +;SINCE THE COMMAND DECODER IS CALLED FROM CLOCK ROUTINE +;COMMAND SETUP ROUTINE MUST RUN TO COMPLETION QUICKLY +;IF A COMMAND FUNCTION CANNON DO THIS. IT MUST JUST SET +;THE JOB TO RUNABLE STATUS AND RETURN IMMEDIATELY + +INTERNAL COMMAND +EXTERNAL TTYCOM,TTYSTR,CTEXT,JBTADR,CONMES +EXTERNAL COMERR,COMCNT +EXTERNAL JOBINI,CRLF,CTEXT,RADX10,ASSJOB,JBTSTS + +T=BUFPNT ;TEMPORARY ACS +T1=BUFWRD + +COMMAND: PUSHJ PDP, TTYCOM ;SETUP DEVDAT,DAT,TAC, AND ITEM + JRST COM2 ;NONE FOUND + PUSH PDP,DEVDAT ;SAVE TTY DDB ADDRESS + PUSHJ PDP, CTEXT ;RETURN COMMAND NAME IN TAC1 + JUMPE TAC1, COM2A ;IGNORE BLANK LINE + MOVSI T, -DISPL ;SEARCH FOR COMMAND NAME + CAME TAC1, COMTAB(T) + AOBJN T, .-1 + JUMPGE T,COM2B ;WAS COMMAND FOUND? + MOVE TAC1,DISP(T) ;YES, GET DISPATCH ADDRESS AND BITS + JUMPN ITEM, COM1 ;HAS A JOB NUMBER BEEN ASSIGNED + TLNE TAC1,NOJOBN ;NO, IS A JOB NUMBER NEEDED FOR THIS CO + JRST COM1 ;NO + PUSHJ PDP,ASSJOB ;TRY TO ASSIGN A FREE JOB NUMBER + JRST COM3A ;NONE AVAILABLE, ERROR MESSAGE + + PUSH PDP, TAC ;SAVE INPUT BYTE POINTER + PUSH PDP,TAC1 ;SAVE ADDRESS OF COMMAND ROUTINE + SETZB PROG,JDAT ;NO CORE, CLEAR REL. ADRESS + PUSHJ PDP,JOBINI ;INITIALIZE JOB + POP PDP,TAC1 ;RESTORE ADR OF COMMAND ROUTINE + POP PDP, TAC ;RESTORE INPUT BYTE POINTER + MOVEM DEVDAT,(PDP) ;SET ADDRESS OF TTY DEV. DATA BLOCK +COM1: HRRZ JDAT, JBTADR(ITEM) ;AND JOB DATA AREA + SKIPN PROG,JDAT ;SET PROG. DOES JOB HAVE CORE? + TLNE TAC1,NOCORE ;NO. IS CORE NEEDED FOR THIS COMMAND? + JRST COM1C ;NO + MOVEI TAC,NOCOR ;YES, PRINT "NO CORE ASSIGNED" +COM1B: PUSHJ PDP,CONMES + JRST COM1A + +COM1C: PUSHJ PDP,(TAC1) ;DISPATCH TO COMMAND SETUP ROUTINE +COM1A: JUMPN ITEM, COM3 ;ADD CR-LF AND CHECK FOR JOB INIT. +COM1D: POP PDP,DEVDAT ;RESTORE TTY DDB ADDRESS + PUSHJ PDP, TTYSTR ;START OUTPUT, IF ANY +COM2: SOS COMCNT ;DECREMENT COMMAND COUNT + POPJ PDP, ;EXIT + +COM2A: LDB TAC1, TAC ;NULL FIELD. WAS BREAK CHAR. A CR? + CAIE TAC1,15 ;A CR? + CAIN TAC1,";" ;OR A SEMI COLON? + JRST COM1D ;YES. IGNORE LINE +COM2B: PUSHJ PDP,COMERR ;NO. PRINT MONITOR COMMAND ERROR + JRST COM1D + +NOCOR: ASCIZ /NO CORE ASSIGNED +/ + +COM3: MOVE TAC,JBTSTS(ITEM) ;GET STATUS WORD + TLOE TAC,JNA ;IS JOB NO ASSIGNED BIT ON YET + JRST COM3A ;YES, JOB INIT. BEFORE + MOVEM TAC,JBTSTS(ITEM) + MOVEI TAC,[ASCIZ /JOB /] + PUSHJ PDP,CONMES ;PRINT JOB N INITIALIZED + MOVE TAC,ITEM + PUSHJ PDP,RADX10 ;PRINT JOB NUMBER + MOVEI TAC,JOBM + PUSHJ PDP,CONMES +COM3A: PUSHJ PDP,CRLF + JRST COM1D + +JOBM: ASCIZ / INITIALIZED +/ + +;TABLE OF CONSOLE COMMANDS. + +NOCORE=400000 ;NO CORE NEEDED FOR COMMAND +NOJOBN=200000 ;NO JOB NUMBER NEEDED FOR COMMAND + +DEFINE NAMES + + C CORE,CORE,NOCORE + C GET,GET,0 + C START,START,0 + C IJOB,IJOB,NOCORE+NOJOBN + C PJOB,PJOB,NOCORE + C KJOB,KJOB,NOCORE + C SAVE,SAVE,0 +REPEAT 0,< + C RESAVE,COMERR,0 +> + C CONT,CONT,0 + C DDT,DDTGO,0 + C ASSIGN,ASSIGN,NOCORE + C DEASSI,DEASSIGN,NOCORE + C STARTC,STARTC,0 + C CONTC,CONTC,0 + C DETACH,DETACH,NOCORE+NOJOBN + C ATTACH,ATTACH,NOCORE+NOJOBN +REPEAT 0,< + C MTAPE,COMERR,0 + C DAYTIM,COMERR,NOCORE + C RUNTIM,COMERR,NOCORE + C TOTTIM,COMERR,NOCORE + C NULTIM,COMERR,NOCRE + C SYSDDT,COMERR,NOCORE + C SYSMAK,SYSMAK,0 +> + C DIGITAL,DIGITAL,NOCORE+NOJOBN +> + +;GENERATE TABLE OF SIXBIT COMMAND NAMES + +DEFINE C(A,B,C) +< ZZ=.+1 + SIXBIT /A/ + IFN .-ZZ, ;ONLY FIRST 6 CHARACTERS +> + +COMTAB: NAMES +DISPL=.-COMTAB ;LENTH OF TABLE + +;GENERATE THE DISPATCH TABLE + +DEFINE C(A,B,C) +< XWD C,B +EXTERNAL B +> + +DISP: NAMES + + END, diff --git a/src/conall.ccl b/src/conall.ccl new file mode 100644 index 0000000..ca60a47 --- /dev/null +++ b/src/conall.ccl @@ -0,0 +1,28 @@ +CDRSER,CDRSER_S,CDRSER +CLKCSS,CLKCSS_S,CLKCSS +CLOCK,CLOCK_S,CLOCK +COMCON,COMCON_S,COMCON +COMCSS,COMCSS_S,COMCSS +COMINI,COMINI_S,COMINI +CORE,CORE_S,CORE +DTSER2,DTSER2_S,DTSER2 +ERRCON,ERRCON_S,ERRCON +IOCONT,IOCONT_S,IOCONT +IOCSS,IOCSS_S,IOCSS +IOINI1,IOINI1_S,IOINI,IOMIN,IOINI1 +IOINI2,IOINI2_S,IOINI,IOMIN,IOINI2 +IOINI3,IOINI3_S,IOINI,IOMAX,IOINI1 +IOINI4,IOINI4_S,IOINI,IOMAX,IOINI2 +JOBDAT,JOBDAT_JOBDAT +LPTSER,LPTSER_S,LPTSER +MTPSER,MTPSER_S,MTPSER +ONCE,ONCE_S,ONCE +PTRSER,PTRSER_S,PTRSER +PTPSER,PTPSER_S,PTPSER +RUNCSS,RUNCSS_S,RUNCSS +SAVGET,SAVGET_S,SAVGET +SCNSER,SCNSER_S,SCNSER +SYSCON,SYSCON_S,SYSCON +SYSCSS,SYSCSS_S,SYSCSS +SYSINI,SYSINI_S,SYSINI +SYSMAK,SYSMAK_S,SYSMAK diff --git a/src/conseq.ccl b/src/conseq.ccl new file mode 100644 index 0000000..1188fd1 --- /dev/null +++ b/src/conseq.ccl @@ -0,0 +1,36 @@ +cdrser.max=cdrser.mac/s +clkcss.max=clkcss.mac/s +clock.max=clock.mac/s +comcon.max=comcon.mac/s +comcss.max=comcss.mac/s +comini.max=comini.mac/s +core.max=core.mac/s +dtser2.max=dtser2.mac/s +eddt.max=eddt.mac/s +editor.max=editor.mac/s +errcon.max=errcon.mac/s +fudge2.max=fudge2.mac/s +iocont.max=iocont.mac/s +iocss.max=iocss.mac/s +ioini1.max=ioini1.mac/s +ioini2.max=ioini2.mac/s +ioini.max=ioini.mac/s +iomax.max=iomax.mac/s +iomin.max=iomin.mac/s +jobdat.max=jobdat.mac/s +lptser.max=lptser.mac/s +mtpser.max=mtpser.mac/s +once.max=once.mac/s +pip.max=pip.mac/s +ptpser.max=ptpser.mac/s +ptrser.max=ptrser.mac/s +rim10b.max=rim10b.mac/s +runcss.max=runcss.mac/s +savget.max=savget.mac/s +scnser.max=scnser.mac/s +s.max=s.mac/s +syscon.max=syscon.mac/s +syscss.max=syscss.mac/s +sysini.max=sysini.mac/s +sysmak.max=sysmak.mac/s +tendmp.max=tendmp.mac/s diff --git a/src/core.mac b/src/core.mac new file mode 100644 index 0000000..5e143e2 --- /dev/null +++ b/src/core.mac @@ -0,0 +1,102 @@ +TITLE CORE - CORE ALLOCATION ROUTINE + SUBTTL G. BELL 6-29-65 +; PUSHJ PDP, CORE1 ;ITEM = JOB #. TAC = 1K CORE BLOCKS + ;REQUESTED +; RET1 ;OLD CORE RETURNED. +; RET2 ;OLD CORE RETURNED. JBTADR, JOBREL ARE + ;SET UP +; JBADR (ITEM) = POINTER TO JOB AREA. JOBREL (JBTADR) = HIGHEST LOCAT +; C(RH) JBTADR IS SET OT 0 OR REQUESTED CORE. JOBREL IS SET IF CORE G +; NOT A PURE PROCEDURE ... +;CORTAL: 0 ;COUNT OF FREE CORE +;CORTAB: BLOCK ^D3 ;TABLE OF 72 BITS. 1 BIT FOR +;1K OF CORE. 1 = USED. 0 = FREE +;CORLST: POINT 1, CORTAB, 32 ;POINTER FIRST OUT OF BOUNDS +; +;TEMPORARY USAGE +CORUSZ: 0 ;SIZE OF USERS CODE, OLD.-NEW +CORLOC: 0 ;POSITION OF 1ST FREE BLOCK +; +;AC ASSIGNMENTS +COR1=BUFPNT +COR2=BUFWRD +COR3=UUO +INTERNAL CORE1 +EXTERNAL JBTADR,JOBREL,CORLST,CORTAL,CORTAB + +CORE1: LDB COR1, CORE1P + MOVEM COR1, CORLOC + JUMPE COR1, CORGET ;IF 0 NO CORE NOEW. + HLRZ COR1, JBTADR(ITEM) ;CLEAR OLD CORE + AOS COR1 ;HIGHEST ADDRESS AVAIL. FORM + ASH COR1, -^D10 + MOVEM COR1, CORUSZ +CORRET: CLEARM COR3 ;RETURN OLD CORE + PUSHJ PDP, CORSTG +CORGET: SETZM JBTADR(ITEM) ;CLEAR JOB ADDRESS TO 0 + JUMPE TAC, COROK ;IF NO CORE TO GET, RETURN + MOVE COR3, CORE2P ;SET UP FOR + SETOM CORLOC ;HOLE SEARCH +CORG1: PUSHJ PDP, CORHOL + JRST CORNG ;UNSUCCESSFUL SEARCH + CAMGE COR1, TAC ;HOLE FOUND + JRST CORG1 +CORGVE: MOVNS COR1 ;BACKUP CORLOC + ADDM COR1, CORLOC + MOVEM TAC, CORUSZ ;RESERVE HOLD FOR JOB + MOVEI COR3, 1 ;SET CORTAB + PUSHJ PDP, CORSTG + MOVE COR1, CORLOC ;C(RH)=RELOC, C(LH)=PROTECT + ASH COR1, ^D10 + HRRM COR1, JBTADR(ITEM) + ASH TAC, ^D10 + SUBI TAC, 1 + HRRM TAC, JOBREL (COR1) + HRLM TAC,JBTADR(ITEM) +COROK: AOS (PDP) +CORNG: MOVE TAC, CORTAL + POPJ PDP, + +CORE1P: POINT 8, JBTADRR(ITEM),25 +CORE2P: POINT 1, CORTAB + +; PUSHJ PDP, CORHOL ;COR1-HOLES FREE, COR2=TEMP +; RETURN1 ;COR3=POINTER. RETURN1=END OF STRING RE +; RETURN2 ;HOLE FOUND. +; CORLOC CONTAINS 0,1.. N, THE CORE BLK PTR. CORLST IS PTR TO +; STOP STRING TEST +CORHOL: CLEARM COR1 +CORH01: CAMN COR3, CORLST ;TEST DONE + POPJ PDP, + ILDB COR2, COR3 ;TEST NEXT BLOCK + AOS CORLOC + SKIPN COR2 + AOJA COR1, CORH01 ;COUNT FREE + JUMPE COR1, CORH01 + AOS (PDP) + POPJ PDP, +;; PUSHJ PDP, CORSTG ;CORUSZ=SIZE RESERVED. CORLOC=LOCATION +; IF COR3=0, THEN FREE CORE +; IF COR3=1, THEN RESERVE CORE. +; USES COR1, COR2, COR3 +; CORTAL=COUNT OF FREE CORE. AND IS UPDATED +CORSTG: PUSH PDP, TAC ;SAVE NO. OF BLOCKS BEING REQ + MOVE COR2,CORUSZ ;FIX CORTALLY + SKIPE COR3 + MOVNS COR2 + ADDM COR2, CORTAL + MOVE TAC, CORLOC ;GET POINTER-1 + IDIVI TAC, ^D36 ;TAC=WORD,TAC1=BIT + ADD TAC, CORLP1 ;FORM BYTE POINTER + MOVNS TAC1 + ADDI TAC1, ^D36 + DPB TAC1, [POINT 6, TAC, 5] + MOVE COR2, CORUSZ +CORLOP: DPBI COR3, TAC ;SET OR CLEAR EACH BIT IN USE + SOJG COR2, CORLOP + POP PDP, TAC + POPJ PDP, + +CORLP1: XWD 100, CORTAB + + END, diff --git a/src/dtser2.mac b/src/dtser2.mac new file mode 100644 index 0000000..7264fb4 --- /dev/null +++ b/src/dtser2.mac @@ -0,0 +1,891 @@ +TITLE DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING +SUBTTL L. HANTMANN 8-2-65 MULTIPLE DIRECTORIES VERSION + DTSIZ=1 + +;SUBROUTINE FOR DIRECTORY SEARCH +;PROG CONTAINS ACTUAL START OF PROGRAM +;DEVDAT CONTAINS ACTUAL START OF DVDB +;UUO CONTAINS RELATIVE ADDRESS OF DIRECTORY ENTRY IN USER AREA +;FORMAT PUSHJ PDP, UDIRSH +; JRST X ;RETURN IF EMPTY ENTRY FOUND +; NORMAL RETURN WHEN ENTRY IS FOUND +INTERNAL ULOOK, UENTER +EXTERNAL UXIT,PUUOAC,IOIERR,DIRERR,ADRCK,CPOPJ1,THSDAT + UDIRLN=4 + UDIRIN=100 ;DIRECTORY IN + UDIREN=200 ;DIRECTORY ENTERED INTO + UNWFRE=400 ;FREE BLCOK POINTER CHANGED + ULINKF=1000 ;LAST OUTPUT BLOCK LINKED TO STORAGE + UX1=TAC + UX2=TAC1 + UX3=DAT +UDIRSH: TRNE UUO,777760 ;IS BLOCK IN UUO ACS? + PUSHJ PDP,ADRCK ;NO. CHECK ADDRESS + MOVEI TAC,3(UUO) + TLNE IOS,IOBEG + PUSHJ PDP, UBEG + HRRZ UX1, PROG ;COPY ADR OF START OF PROGRAM + ADDM UX1, UUO ;ACTUAL START OF DIR. IN USER + MOVEI UX1,@UDIR(DEVDAT) ;ACTUAL POINTER TO DIRECTORY + HRRZ UX2, 0(UX1) ;RELATIVE ADDR OF 1ST ENTRY I + ;DIRECTORY + HRLI UX1, -^D129+UDIRLN(UX2) ;ENTRY COUNTER + ADDM UX2, UX1 ;START OF 1ST ENTRY IN DIRECT + SKIPE UX2 + CAILE UX2,174 ;IS THE REL ADR OF 1ST ENTRY INSIDE BUF + JRST DIRERR ;NO +UDIR2: SKIPN UX2, 0 (UX1) ;FIRST WORD OF ENTRY + POPJ PDP, ;SPACES FOUND + CAMN UX2, 0(UUO) ;CHECK IF = TO USER AREA + JRST UDIR4 ;CHECK 2ND WORD +UDIR3: ADD UX1, UDIRK1 + JUMPL UX1, UDIR2 + POP PDP, UX1 ;TAKE PREVIOUS EXIT FROM TABL + JRST UXIT ;TABLE FULL +UDIR4: HLRZ UX2, 1 (UUO) ;2ND WORD IN USER ARE + JUMPE UX2, CPOPJ1 + HLRZ UX3, 1 (UX1) ;2ND WORD OF DIRECTORY AREA + CAIE UX3, 0 (UX2) + JRST UDIR3 ;CHECK MORE ENTRIES + JRST CPOPJ1 ;MATCH, SKIP RETURN + +UDIRK1: XWD UDIRLN, UDIRLN + +;SUBROUTINE FOR DIRECTORY LOOKUP + +;FORMAT PUSHJ PDP, UDIRLU ;VIA UUO +; JRST X ;ENTRY NOT IN TABLE + +ULOOK: PUSHJ PDP, UDIRSH + JRST UXIT + HRR UX3, 1 (UX1) + HRLM UX3, DEVIAD (DEVDAT) +ULOOK1: HRLI UX2, 0 (UX1) ;FROM DIRECTORY + HRRI UX2, 0 (UUO) ;TO USER + BLT UX2, UDIRLN-1(UUO) + LDB UX2,[POINT 12,2(UX1),35] ;GET DATE USER(ENTER)EXEC(LOO + JUMPN UX2,.+3 ;IS IT 0? + MOVE UX2,THSDAT ;YES, USE CURRENT DATE + DPB UX2,[POINT 12,2(UUO),35] ;SET EXEC + AOS (PDP) + JRST UTWDR + +;SUBROUTINE TO ENTER NEW OR CHANGE OLD DIRECTORY ENTRY +;FORMAT PUSHJ PDP, UDIRCH +; JRST X ;NO ROOM IN TABLE + +UENTER: PUSHJ PDP, UDIRSH + JRST .+1 + AOS UX3, UFREE (DEVDAT) + HRRM UX3,1(UUO) + HRLM UX3, DEVOAD (DEVDAT) + EXCH UX1, UUO + TLO IOS, UDIREN+UNWFRE+ULINKF + MOVEM IOS, DEVIOS(DEVDAT) + JRST ULOOK1 + +;CREATE A CLEAN TAPE AND DIRECTORY + +INTERNAL UTPCLR +EXTERNAL USRJDA + +UTPCLR: LDB TAC,PUUOAC + MOVE DEVDAT,USRJDA(TAC) + JUMPE DEVDAT,IOIERR + HLRZ TAC,DEVNAM(DEVDAT) + CAIE TAC,446441 + JRST UXIT ;NOT DTA + MOVE IOS,DEVIOS(DEVDAT) + TLZ IOS,IOBEG + TLO IOS,UDIRIN+UDIREN+UNWFRE +IFE DTSIZ,< MOVEM DEVDAT,DIREC> +;THIS FOR SINGLE DIRECTORY ONLY + MOVE TAC,UDIR(DEVDAT) + MOVE TAC1,[XWD 1,5] + MOVEM TAC1,(TAC) + HRLS TAC + AOBJN TAC,.+1 + SETZM (TAC) + MOVE TAC1,TAC + AOS TAC + BLT TAC,176(TAC1) + MOVEI TAC, 1 + MOVEM TAC, UFREE (DEVDAT) + MOVEM IOS, DEVIOS(DEVDAT) + PUSHJ PDP,UTPREL + JRST UXIT + + +;END OF DTDR + +SUBTTL L. HANTMAN PART 1 7-13-65 + UREV=10000 ;DT REVERSE BIT + DTSIZ=1 ;1 FOR ONE BUFFER PER TAPE UNIT + + UBLK=1 ;NUMBER OF BLOCKS/BLOCK + UCHN=1 ;CHANNEL OF DATA CONTROL = 1, LOC 42 + UCHA=42 ;DATA CONTROL INTERRUPT POSITION + EXTERNAL UXIT,ADVBFF,ADVBFE,IOSET,OUT,WAIT1,WSYNC + EXTERNAL PIOMOD,PUNIT,UFREE,UDIR,ADRERR,JOBPFI + ENTRY UTDSP + +DACI=4010 ;DC INPUT DT +DACO=3410 ;DC OUTPUT DT +SL=220000 ;DT TURN ON. SELECT + DTR=3000 ;DT TURN AROUND DELAY +DT=2000 ;DT START/STOP DELAY +RD=300 ;DT RD +WD=700 ;DT WR +RB=200 ;DT READ BLOCK NOS. +VEOT=2 ;EOT FLAG BIT +GR=10000 ;DT REVERSE BIT +JDE=40000 ;JOB DONE ENABLE +EE=100000 ;ENABLE END FLAG +URDIR=2000 ;READING DIRECTORY + +UTDSP: JRST UTPREL ;RELEASE + JRST UTPCLS ;CLOSE + JRST UOUT ;OUTPUT + JRST UIN ;INPUT + JRST UENTER ;ENTER IN DIRECTORY + JRST ULOOK ;LOOKUP IN DIRECTORY + JRST UDMPO ;DUMPOUT + JRST UDMPI ;DUMPIN + JRST SETO ;SET OUTPUT BLOCK NO. + JRST SETI ;SET INPUT BLOCK NO. + JRST GETF ;GET FREE BLOCK + +UOUT: PUSHJ PDP, UINTER ;CHECK INTERLOCK + TLO IOS, IO ;WRITING + HRRZ TAC,DEVOAD(DEVDAT) + ADD TAC, PROG ;ACTUAL BUFFER ADDRESS + HLRZ TAC1, DEVOAD(DEVDAT) ;BLOCK TO WRITE + CAIN TAC1,1 + JRST UOUT4 ;COPY DIRECTORY + HLRZ TAC1, 1(TAC) ;BLOCK TIE + TLZ IOS, ULINKF ;NOT LINKED TO FREE STORAGE + JUMPN TAC1, UOUT1 ;USE BALOCK NUMBER INDICATED + TLZE IOS, IOBEG ;GET FREE STORAGE BLOCK + PUSHJ PDP, UBEG3 + TLO IOS,UNWFRE+ULINKF ;LINKED TO FREE STORAGE + MOVEM IOS, DEVIOS (DEVDAT) + AOS TAC1,UFREE(DEVDAT) ;NEXT FREE BLOCK +UOUT1: CAIN TAC1,1 ;IF 1, THIS IS LAST BLOCK + SETZ TAC1, ;LAST BLOCK TIE = 0 + HRLM TAC1,1(TAC) ;BLOCK + HRRZM TAC,UBUF ;ACTUAL LOCATION OF DATA + HLR TAC,DEVOAD(DEVDAT) + HRLM TAC1, DEVOAD(DEVDAT) ;NEXT BLOCK + JRST USETW +;RETURN FROM WRITING 1 BLOCK + +UOUT2: MOVE TAC,DEVOAD(DEVDAT) + HRLI TAC,PROG ;PROG, BUFFER ADDRESS + HRLZI TAC1,IOUSE + ANDCAM TAC1,@TAC ;SET USE BIT IN BUFFER + HLRZ TAC1,DEVOAD(DEVDAT) ;BLOCK TIE + JUMPE TAC1,UOUT3 ;WAS BLOCK WRITTEN THE LAST 0 + HRR TAC,@TAC ;PROG, NEXT BUFFER ADDRESS + HRRM TAC,DEVOAD(DEVDAT) ;NEXT BUFFER + TRNE IOS, IOCON ;CONTINUOUS? + JRST UOUT3 ;STOP TAPE AND DISMISS + SKIPGE @TAC ;IS NEXT BUFFER EMPTY? + JRST UOUT+1 ;PROCESS NEXT BLOCK +UOUT3: POP PDP, TAC ;REDUCE TABLE + JRST DTC1 ;STOP TAPE AND DISMISS + +;COPY DIRECTORY WHEN WRITING BLOCK 1 +UOUT4: HRLI TAC1,1(TAC) ;BUFFER ADDRESS, FROM + HRR TAC1, UDIR(DEVDAT) ;DIRECTORY ADDRESS, TO + HRRZ TAC, UDIR(DEVDAT) ;DIRECTORY ADDRESS + BLT TAC1, 177(TAC) ;MORE BUFFER AREA TO DIRECTORY + TLO IOS, UDIRIN+UDIREN ;SET DIRECTORY BITS + MOVE TAC1, @UDIR(DEVDAT) ;NEXT FREE BLOCK IN DIRECTORY + HLRZM TAC1,UFREE(DEVDAT) ;PLACE IN DATA BLOCK + HRLZI TAC1, IOUSE + ANDCAB TAC1, 0(TAC) ;CLEAR USE BIT + HRRM TAC1, DEVOAD(DEVDAT) ;ADVANCE BUFFER POINTER + JRST UEND2 +,INPUT- NON DUMP + +UIN: PUSHJ PDP, UINTER ;CHECK INTERLOCK + TLZ IOS, IO ;READING + HRRZ TAC,DEVIAD(DEVDAT) ;UBUF:=TAC:=DEVIAD+PROG + ADD TAC,PROG + HLRZ TAC1, DEVIAD(DEVDAT) ;BLOCK TO READ + CAIN TAC1, 1 ;TRYING TO READ DIRECTORY? + JRST UIN2 ;COPY DIRECTORY + HRRZM TAC,UBUF + HLRZ TAC,DEVIAD(DEVDAT) ;TAC:=C(DEVIAD LH) + JUMPE TAC,UEND ;NEXT BLOCK=00, THEN END OF FI + JRST USETR +;RETURN FROM READING ONE BLOCK + +UIN1: HRRZ TAC,DEVIAD(DEVDAT) + ADD TAC,PROG + HLRZ TAC1,1(TAC) + HLRM TAC1,DEVIAD(DEVDAT) ;NEXT BLOCK NUMBER TO READ + MOVE TAC,DEVIAD(DEVDAT) + HRLI TAC,PROG + HRLZI TAC1,IOUSE + IORM TAC1,@TAC ;SET USE BIT + HRR TAC,@TAC + HRRM TAC,DEVIAD(DEVDAT) ;NEXT BUFFER ADDRESS + TRNE IOS, IOCON ;CONTINUOUS? + JRST UOUT3 ;EXIT + SKIPL @TAC ;IS NEXT BUFFER FULL + JRST UIN+1 ;PROCESS NEXT BLOCK + JRST UOUT3 ;EXIT + +UEND: TLO IOS, IOEND + MOVEM IOS, DEVIOS(DEVDAT) + CONSZ UTC, 20000 ;IS TAPE STOPPED? + JRST UOUT3 ;STOP TAPE AND EXIT +UEND2: SOSL DCREQ ;DECREMENT REQUEST COUNT, IS ANY ONE WA + SETOM DCAVAL ;YES,SET DATA CONTROL AVAILABLE + SOSL DTREQ ;DECREMENT REQUEST COUNT, IS ANY ONE WA + SETOM DTAVAL ;YES,SET DECTAPE CONTROL AVAI + TRZ IOS, IOACT ;CLEAR ACTIVE BIT + MOVEM IOS, DEVIOS(DEVDAT) ;RESTORE STATUS BITS + POPJ PDP, 0 ;EXIT + +;COPY DIRECTORY WHEN READING BLOCK 1 +UIN2: TLZE IOS, IOBEG ;IS DIRECTORY IN + JRST UIN4 ;READ IN DIRECTORY + PUSHJ PDP, UEND2 ;CLR INDICATORS +UIN3: MOVE TAC1,UFREE(DEVDAT) ;NEXT FREE BLOCK IN DATA BLOC + HRLM TAC1, @UDIR(DEVDAT) ;PLACE IN DIRECTORY + HRRI TAC1, 1(TAC) ;BUFFER ADDRESS, TO + HRL TAC1, UDIR(DEVDAT) ;DIRECTORY ADDRESS, TO + BLT TAC1, 200 (TAC) ;MOVE DIRECTORY TO BUFFER ARE + HRLZI TAC1, IOUSE + IORB TAC1, IOUSE ;SET USE BIT + HRRM TAC1,DEVIAD(DEVDAT) ;ADVANCE BUFFER + POPJ PDP, 0 ;EXIT +UIN4: PUSHJ PDP, UBEG3 + JRST UIN3 +SETI: PUSHJ PDP,WAIT1 + HRLM UUO,DEVIAD(DEVDAT) ;SET INPUT BLOCK NO. + JRST UXIT + +SETO: PUSHJ PDP,WAIT1 + PUSHJ PDP, UINTER ;WAIT FOR USE TO STOP + PUSHJ PDP, UEND2 ;CLEAR INDICATORS + HRLM UUO,DEVOAD(DEVDAT) ;SET OUTPUT BLOCK NO. + JRST UXIT + +GETF: PUSHJ PDP,WAIT1 + TLNE IOS,IOBEG + PUSHJ PDP,UBEG + TLO IOS,UNWFRE + MOVEM IOS,DEVIOS(DEVDAT) + AOS TAC, UFREE(DEVDAT) ;GET FREE BLOCK + HRLM TAC, DEVOAD(DEVDAT) + HRLI UUO,PROG + HRRM TAC,@UUO + JRST UXIT + +INTERNAL UTPCLS,UTWDR,UBEG,UTPREL + +UTWDR: IFE DTSIZ,< PUSHJ PDP,UTPREL> + + JRST UXIT + +UTPCLS: TLNN IOS, ULINKF + JRST UTPREL + LDB TAC,PIOMOD ;MODE + CAIL TAC,16 + JRST UTPREL + HLR TAC,DEVBUF(DEVDAT) + HLRI TAC, PROG + HRR TAC, @TAC ;TAC:=BUFFER ADDRESS + ADDI TAC,1 + MOVEI TAC1,1 + HRLM TAC1,@TAC + JRST OUT + +UTPREL: IFE DTSIZ,< TLNE IOS,IOBEG ;RELEASE + POPJ PDP, + TLZE IOS,UDIREN + JRST UTPRL1 + TLNN IOS,UNWFRE + POPJ PDP, + TLNN IOS,UDIRIN + PUSHJ PDP,UBEG> + + IFN DTSIZ,< TLZN IOS,UDIREN+UNWFRE + POPJ PDP,> +UTPRL1: PUSHJ PDP,UINTER ;IS SYSTEM AVAILABLE? + HRR TAC,UFREE(DEVDAT) + HRLM TAC,@UDIR(DEVDAT) + MOVE TAC,UDIR(DEVDAT) + SUBI TAC,1 + MOVEM TAC,UBUF + TLO IOS, URDIR + MOVEM IOS,DEVIOS(DEVDAT) + MOVEI TAC,1 + PUSHJ PDP,USETW + JRST WAIT1 + +,READ THE DIRECTORY FROM THIS DEC-TAPE + +UBEG: SKIPGE DEVMOD(DEVDAT) ;IS DIRECTORY IN CORE? + TLO IOS,UDIRIN + TLNE IOS,UDIRIN + POPJ PDP, 0 + PUSHJ PDP, UINTER ;CHECK INTERLOCK +UBEG2: PUSH PDP, TAC ;SAVE TAC + HRRZ TAC,UDIR(DEVDAT) + SUBI TAC, 1 + MOVEM TAC,UBUF + TLO IOS,UDIRIN+URDIR + TLZ IOS, IOBEG + MOVEM IOS,DEVIOS(DEVDAT) + MOVSI TAC,DVDIRIN ;SET DIRECTORY IN CORE BIT + IORM TAC,DEVMOD(DEVDAT) + MOVEI TAC,1 + PUSHJ PDP,USETR + PUSHJ PDP,WSYNC + HLR TAC,@UDIR(DEVDAT) + HRRZM TAC,UFREE(DEVDAT) +UBEGX: POP PDP,TAC + POPJ PDP, 0 + +UBEG3: TLNE IOS, UDIRIN + POPJ PDP, 0 + JRST UBEG2 + +UTBERR: PUSHJ PDP, DTC1 ;ILL. BLOCK NO. + JRST UTBKER + +USETW: MOVEI TAC1, RIT + SKIPA +USETR: MOVEI TAC1,READ + HRRM TAC1,DDIG + HRRZM TAC,UBKN + JUMPLE TAC,UTBERR ;ILL. BLOCK NO.? + CAIL TAC,1102 + JRST UTBERR ;ILL. BLOCK NO. + LDB TAC,PUNIT ;UNIT + ROT TAC, 3 + ADDI TAC, DTCCHN ;DECTAPE CHANNEL + MOVEM TAC, UNIT ;UNIT AND CHANNEL + MOVEI TAC, 137 + HRRM TAC, DTCINT + SUBI TAC, 21 + HRRM TAC, CONSZ1 ;FALL INTO FILL + +FILL: CONO DC,0 ;DESELECT DC + CONO PI,2100 ;TURN ON CHANNEL 1 + MOVEM DEVDAT, USVDB ;SAVE DATA BLOCK ADDR + MOVEM DEVDAT,UDVDAT ;UDVDAT:=DTJIOS POINTER + MOVEI TAC, DEVIOS + ADDM TAC,UDVDAT + MOVE TAC, [JSR DDIF] ;DATA CONTROL INTERRUPT CHANN + MOVEM TAC,UCHA + MOVEM PROG,UPROG ;UPROG:=PROG + MOVE TAC,UBUF ;BLI:=XWD-200,C(UBUF) + HRLI TAC,-200 + MOVEM TAC,BLI + ADDI TAC,200-1 + MOVEM TAC,BLO + CONSZ UTC, 20000 ;IS TAPE MOVING? + JRST FILLC ;YES + MOVE TAC, UNIT ;RDDA:=RDRM:=WTDA:=WTRM:=C(UN + DPB TAC,F1 + DPB TAC,F2 + DPB TAC,F3 + DPB TAC,F4 + MOVE TAC,UNIT + ANDI TAC, 70 ;TAC HAS UNIT ONLY + ADDI TAC, SL+DTR+RB+EE+UCHN + TLNN IOS, UREV ;WAS REV, GO FWD + ADDI TAC,GR ;WAS FWD, GO REV + CONO UTC, @TAC +FILL2: CONO DC, DACI+UCHN ;SET UP DC FOR INPUT + MOVEM IOS, DEVIOS (DEVDAT) + POPJ PDP, + +,TAPE IS ACTIVE - GIVE A COMMAND +FILLC: CONI UTC,TAC ;UTC COMMAND: UNIT, OLD DIRE + ANDI TAC,GR+70 ;DIRECTION PLUS UNIT + CONO UTC,SL+RB+EE+UCHN(TAC) ;NO TIME DELAY + JRST FILL2 + +F1: POINT 6,RDDA,35 +F2: POINT 6,RDRM,35 +F3: POINT 6,WTDA,35 +F4: POINT 6,WTRM,35 +,CHANGE DIRECTIONS - GIVE NEW COMMANDS +RRV: CONI UTC,TAC + XORI TAC,GR ;REVERSE BIT + ANDI TAC,550777 + IORI TAC,DT + CONO UTC,SL(TAC) + CONO DC,DACI+UCHN + JRST DXIT +,EXAMINE BLOCK NUMBERS - DISPATCHED FROM INTERRUPT - CHAN, DC. +DDIF: 0 ;GOING FORWARD + MOVEM TAC,SV1 ;SV1:=TAC + CONSZ UTS, VEOT + JRST RRV + DATAI DC,TAC + CAMN TAC,UBKN ;BLK NOT =STR +DDIG: JRST . ;JRST READ, BIT, IFRIGHT UBK + CONSZ UTC,10000 ;GOING BACKWARDS + JRST .+4 ;BACKWARDS + CAML TAC,UBKN ;BLK > STR > FORWARD + JRST RRV + JRST .+3 + CAMG TAC,UBKN ;BACKWARDS + JRST RRV ;BACKWARDS +DDIG2: CONI UTC,TAC + ANDI TAC,550777 + CONO UTC,SL(TAC) + SKIPA +DXIT1: HRRM TAC,UCHA +DXIT: MOVE TAC,SV1 ;RESTORE TAC + JEN @DDIF ;RE-ENABLE, DISMISS. + +,DISPATCH FROM UCHA INITIALLY ON CORRECT BLOCK MARK +,SETS OP TO READ, WRITE IN FWD, REVERSE + +;RD FORWARD +RDDA: CONO UTC,SL+RD+JDE+EE ;GETS UNIT NO. - RE + MOVEI TAC,RDFW + CONO DC,DACI+UCHN + JRST DXIT1 + +WTDA: CONO UTC,SL+WD+JDE+EE ;GETS UNIT NO. - RE + MOVEI TAC,WTFW + CONO DC,DACO+UCHN + JRST DXIT1 + +READ: CONSO UTC,10000 ;ENTRY TO SET UP READ + JRST, RDDA +;READ REVERSE +RDRM: CONO UTC,SL+GR+RD+JDE+EE ;GETS UNIT NO. - RESETS TO RD + MOVEI TAC,RDRV + CONO DC,DACI+UCHN + JRST DXIT1 +RIT: CONSO UTC,10000 ;GOING REVERSE - ENTRY TO SET + JRST WTDA ;WRITE FORWARD +;WRITE REVERSE +WTRM: CONO UTC,SL+WD+GR+JDE+EE ;GETS UNIT NO. -RESETS. TO WT + MOVEI TAC,WTRV + CONO DC,DACO+UCHN + JRST DXIT1 + +,DC INTERRUPT PROCESSSING TO READ/WRITE DATA IN EITHER +,DIRECTION, AND RE-ENABLE INTERRUP. +,EXIT BLOCK PROCESSING AT ENPT(WRITE), ENPTI(READ) + +RDRV: 0 ;ENTRY VIA UCHA - READ REV + BLKI DC,BLO + JSR ENPTI + SOS BLO + SOS BLO + JEN @RDRV + +RDFW: 0 ;ENTRY VIA UCHA - READ FWD + BLKI DC,BLI + JSR ENPTI + JEN @RDFW + +WTRV: 0 ;ENTRY VIA UCHA - WRITE REV + BLKO DC,BLO + JSR ENPT + SOS BLO + SOS BLO + JEN @WTRV + +WTFW: 0 ;ENTRY VIA UCHA - WRITE FWD + BLKO DC,BLI + JSR ENPT + JEN @WTFW + +;END OF OUTPUT BLOCK + +ENPT: 0 + JSR, ENP +ENPT2: MOVEM TAC,SV1 ;SV1:=TAC + HRLZI TAC,UREV + CONSZ UTC,10000 + ANDCAM TAC,@UDVDAT + CONSO UTC,10000 + IORM TAC,@UDVDAT + MOVEI TAC,UOFF + HRRM TAC,UCHA + MOVE TAC,SV1 + JRSTF @ENPT + +,CHECK ERROR BITS DC MISSED, 0T PARITY, 1 LEG OP, TAPE END +ENP: 0 + CONSZ DC, 10000; DATA MISSED + JSR ERROR2 + JRSTF @ENP + +,SAVE STATE OF UTS, UTC, DC, TURN OFF DC, UTC, +1@ERRTAL,+1@UERR +;ERROR LOOPS +ERROR: 0 + CONI UTS, C12 + CONI UTC, C13 + CONI DC, C11 + SETOM ERRFLG + JRSTF @ERROR +;INTERRUPT FROM DATA FLAG AFER BLKO HAS COUNTED OUT +UOFF: 0 + CONO PI, 1100 ;TURN DC CHANNEL OFF + JEN @UOFF ;DISMISS EXTRA WRITE FLAG + +;END OF INPUT BLOCK +ENPTI: 0 + EXCH TAC, ENPTI + MOVEM TAC, ENPT + JSR ENP + CONO DC, 0 + MOVE TAC, ENPTI + JRST ENPT2 +;DETECT FIRST ERROR ONLY +ERROR2: 0 + SKIPN ERRFLG ;PREVIOUSLY DETECTED ERROR! + JSR ERROR ;STORE ERROR CONDITIONS + JRSTF @ERROR2 ;CONTINUE LOOP + +;END OF PART 1 DTSER2 + + EXTERNAL SETIOD + INTERNAL UDMP0, UDMPI + +; DUMP OUT +UDMPO: TLO IOS, IO ;SET FOR OUTPUT + PUSHJ PDP, UINTER ;CHECK INTERLOCK + TRNN UUO, 777777 ;COMMAND ADDRESS? + JRST UDMP2-1 ;ERROR + MOVEI TAC, DDUMP ;RETURN WHEN BLOCK FOUND +UDMP0: MOVE TAC1, [JSR DMPADV] ;BLKI OR BLKO RETURN, COMMANDS + +;COMMON ROUTINE FOR ALL DUMP MODES, START SEARCH +UDMP1: HRRM TAC,DDIG ;SEARCH RETURN + MOVEM TAC1, UCHA+1 ;INTERRUPT RETURN + MOVE TAC, [JSR DDIF] + MOVEM TAC, UCHA ;DATA CONTROL CHANNEL + HLRZ TAC, DEVOAD (DEVDAT) ;BLOCK NUMBER + TLNN IOS, IO ;WRITING? + HLRZ TAC, DEVIAD(DEVDAT) ;INPUT BLOCK NUMBER + MOVEM TAC, UBKN ;BLOCK TO LOOK FOR + HRRZM DEVDAT, USVDB ;DATA BLOCK ADDRESS + LDB TAC,PUNIT ;UNIT + ROT TAC, 3 + ADDI TAC, DTCCHN + MOVEM TAC, UNIT ;UNIT AND DT CHANNEL + ANDI TAC, 70 + CONO UTC, SL+DTR+RB+EE+UCHN(TAC) + SETOM UERRCN ;SET ERROR COUNTER + MOVEI TAC, 37 ;DO NOT CHECK FOR INCOMPLETE + HRRM TAC, DTCINT + MOVEI TAC,16 + HRRM TAC, DTCINT+4 + CONO DC, DACI+UCHN ;SET DATA CONTROL + CONO PI,2100 ;INSURE CHANNEL 1 ON + HRRZM PROG, UDMPA ;SAVE PROGRAM + TRNN UUO, 777777 ;COMMAND ADDRESS + POPJ PDP, 0 ;COMMAND LIST ON TAPE, INPUT + HRRZ TAC, UUO ;GET CMD PNTR + HRRZ TAC1, TAC ;SAVE POINTER +UDMP1A: ADD TAC1, PROG ;GET ACTUAL POINTER + HRRZM TAC1, UDMP ;STORE WORKING POINTER + +;CHECK ENTIRE COMMAND LIST FOR VALIDITY +UDMP1B: SKIPN TAC1, @UDMP ;GET COMMAND + JRST UDMP1C ;END OF COMMAND LIST + JUMPG TAC1, UDMP1A ;CHANGE COMMAND SEQUENCE + HLREM TAC1, SVCNTR ;SAVE -N + HRRZS TAC1 ;GET ADDRESS + CAIGE TAC1, JOBPFI ;IS IT ABOVE IO PROT. AREA + JRST ADRERR ;NO. ADDRESS CHECK ERROR + SUB TAC1, SVCNTR ;GET AREA END + CAMLE TAC1, USRREL ;LESS THEN END? + JRST UDMP2-1 ;OUT OF BOUNDS + AOS UDMP ;INDEX COMMAND LIST POINTER + JRST UDMP1B ;GET NEXT COMMAND + +;GET FIRST COMMAND +UDMP1C: ADD TAC, PROG ;GET ACTUAL ADDRESS + HRRZM TAC, UDMP ;SAVE POINTER + SKIPN TAC, @UDMP ;1ST COMMAND + JRST UDMP2 ;NOTHING TO DO + ADD TAC, PROG ;ACTUAL POINTER + JUMPGE TAC, .-4 ;CHANGE COMMAND SEQUENCE + MOVEM TAC, BLO ;SAVE I/O POINTER + POPJ PDP, 0 +;EXIT WITH ERROR + TRO IOS, IOBKTL +UDMP2: MOVEI TAC, -3 + HRREM TAC, UERRCN + SETZM ERRFLG + JRST UEND2 + +;SEARCH RETURN,OUTPUT,COMMAND LIST IN MEMORY +DDUMP: CONSZ UTC,GR + JRST DDIG2 ;KEEP GOING + MOVE TAC,[BLKO DC,BLO] + MOVEM TAC, UCHA + CONO DC,DACO+UCHN + MOVE TAC,UNIT + + CONO UTC,SL+WD+JDE+EE(TAC) + JRST DXIT +;BLKI OR BLKO RETURNS, COMMAND LIST IN MEMORY +DMPADV: 0 + MOVEM TAC,SV1 + AOSA TAC,UDMP ;POINTER + +DMPA1: HRRZM TAC, UDMP ;STORE POINTER + SKIPN TAC, 0(TAC) ;IS WORD ZERO + JRST DMPA2 ;END + ADD TAC, UDMPA ;ADD PROGRAM + JUMPGE TAC, DMPA1 ;CHANGE COMMAND + MOVEM TAC, BLO +DMPXT: MOVE TAC, SV1 + JEN @DMPADV + +;END OF COMMAND LIST, INPUT OR OUTPUT +DMPA2: JSR ENP + CONO PI, 1100 ;TURN DATA CONTROL CHANNEL OF + CONSO UTS, 40 ;WRITING? + CONO DC, 0 ;SHUT OFF DATA CONTROL + JRST DMPXT +;SEARCH RETURN, INPUT COMMAND LIST ON TAPE +DDMPI: CONSZ UTC, GR ;GOING BACKWARDS? + JRST DDIG2 ;KEEP GOING + MOVE TAC, [XWD -1,BLO-1] + MOVEM TAC, BLO + +;COMMON INSTRUCTIONS FOR COMMAND LIST IN MEMORY OR ON TAPE +DDMPI2: MOVE TAC, [BLKI DC,BLO] + MOVEM TAC, UCHA + CONO DC, DACI+UCHN + MOVE TAC, UNIT + CONO UTC, SL+RD+JDE+EE(TAC) + JRST DXIT + +;INPUT COMMAND LIST ON TAPE. BLKI RETURN AFTER READING COMMAND +DMPRD: 0 + SKIPL BLO ;END OF COMMAND LIST? + JRST DMPRD1 + MOVEM TAC, SV1 ;SAVE TAC + MOVE TAC, BLO ;PICK UP COMMAND + HLREM TAC, SVCNTR ;-N + HRRZS TAC ;ADDRESS + SUB TAC, SVCNTR ;END ADDRESS +DMPRD0: CAILE TAC, 0 ;; AN ABSOLUTE DDT (STARTING + ADRESS 4000) WITHOUT PAPER TAPE FEATURE WILL RESULT + + 5.) EDDT=; AN ABSOLUTE DDT + (STARTING ADDRESS 4000) WITH ALL THE PAPER TAPE + FEATURES WILL RESULT. +> + + + + +IFNDEF EDDT, + + + + +DEFINE XP (X.,Y.),< +IF2,> +NSYMS=0 ;INITIAL SYMBOL COUNTER + +LOC 74 +XWD DDTEND,DDT +RELOC 0 + +IFN EDDT&,B53> + +IFN EDDT&1, + +IFE EDDT&1,<TITLE UDDT V.005 - USER MODE DDT + EXTERN JOBREL,JOBSYM,JOBSA + NSYMS=NSYMS+6 + ZLOW=140> +F=0 ;FLAGS +P=1 ;PUSH DOWN +R=2 ;POINTERS TO TABLES, CORE, ETC. +S=3 +W=4 ;CONTAINS DISPATCH ADDRESS IN WORD ASSEMBLER +T=5 ;TRANSFER DATA +W1=6 +W2=7 +SCH=10 ;MODE CONTROL SWITCH FOR OUTPUT +AR=11 ;MODE CONTROL SWITCH FOR OUTPUT +ODF=12 ;MODE CONTROL SWITCH FOR OUTPUT - CURRENT RADIX +A=R +B=S +C=W + +PRS=4 +TTYY=120 +PTRR=104 +PTPP=100 + +LPDL=50 ;MAX LENGTH PUSH DOWN LIST + + TIF=100000 ;TRUNCATE TO 18 BITS - SET BY SPACE OR COMMA +PTF=100 ; +, -, OR * HAS BEEN TYPED +CTF=400 +SF=4 ;SYLLABLE FLAG +QF=1 ;QUANTITY TYPED IN TO WORD ASSEMBLER + +CF=40 ; TYPED +CCF=10000 ; TYPED +MF=2 ;MINUS SIGN TYPED IN +LTF=20 ;LETTER TYPED IN TO CURRENT SYLLABLE +ROF=10 ;REGISTER OPEN FLAG +STF=4000 +FAF=1000 ; < TYPED +SAF=2000 ; > TYPED + +FPF=20000 ; . TYPED IN +FEF=400000 ; E FLAG + +MLF=200 ;*FLAG +DVF=40000 ;DIVIDE FLAG + +PID=0 ;=0 IF SYMBOL TABLE POINTER IS IN JOBSYM + +;RIGHT HALF FLAGS + +ITF=2 ;INSTRUCTION TYPED IF ITF=1 +OUTF=4 ;OUTPUT IF OUTF=1 +CF1=400 ;OUTPUT 1 REGISTER AS CONSTANT +LF1=2000 ;OUTPUT 1 REGISTER AS FORCED SYMBOLIC OR CONSTANT +Q2F=1 ;NUMBER TYPED AFTER ALT MODE +SBF=20 +NAF=200 ;NEGATIVE ADDRESSES PERMISSABLE +POWF=4000 ;ARGUMENT FOR EXPONENT COMING +SLL=10000 ;STOP LOOKING FOR LOCALS + +GLOBAL=040000 ;GLOBAL SYMBOL +LOCAL=100000 +PNAME=740000 ;PROGRAM NAME +DELI=200000 ;DELETE INPUT +DELO=400000 ;DELETE OUTPUT + +DDT: +ENTRY DDT +NSYMS=NSYMS+2 + + +RADIX 10 +NBP=8 ;NUMBER OF BREAKPOINTS +DEFINE DBPNT (Z.)<XP $'Z.'B,B1ADR+3*Z.-3> +ZZ=0 +REPEAT NBP,<DBPNT \<ZZ=ZZ+1>> +RADIX 8 + + +XP $M,MSK +XP $I,SAVPI +XP DDTEND,DDTEND + + +IFN EDDT&1,< + +XP PI,4B11 +XP PTP,100B11 +XP PTR,104B11 +XP CDR,114B11 +XP TTY,120B11 +XP LPT,124B11 +XP DC,200B11 +XP DIS,130B11 +XP PLT,140B11 +XP CR,150B11 +XP DSK,170B11 +XP DTC,210B11 +XP DTS,214B11 +XP DCSA,300B11 +XP DCSB,304B11 +XP DF,270B11 +XP MTC,220B11 +XP MTS,224B11 +XP MTM,230B11 +XP DLS,240B11 +XP TDC,320B11 +XP TDS,324B11 +XP TMC,340B11 +XP TMS,344B11> + +XP JOV,2554B11 +XP JEN,2545B11 +XP HALT,2542B11 + + +LOW=DDT-NSYMS-1 + + + + + + + + + + + + +DDT: JSR SAVE + PUSHJ P,REMOVB + HLRZ T,ESTU + SUB T,ESTU + ADD T,@SYMP + TRNE T,-1 + JRST IFIX +DD1: TLZ F,ROF ;CLOSE ANY OPEN REGISTER + PUSHJ P,CRF +DD1.5: MOVE T,[XWD SCHM,SCH] + BLT T,ODF ;LOAD ACS +DD2: CLEARM PRNC ;PARENTHESES COUNT + MOVEI P,PS +LIS: MOVE T,ESTU + MOVEM T,ESTUT ;INIT UNDEFINED SYM ASSEM + TDZ F,[XWD 777777-ROF-STF,LF1+CF1+SBF+2+Q2F] +LIS0: TDZ F,[XWD 777777-ROF-STF-FAF-SAF,NAF] + CLEARM,WRD +LIS1: CLEARM,FRASE +LIS2: MOVEI T,1 + MOVEM T,FRASE1 + TLZ F,MLF+DVF +L1: TLZ F,CF+CCF+SF+FPF ;TURN OFF CONTROL, SYL, PERIOD FLAG + CLEARM,SYL +L1RPR: CLEARM,SYM + MOVEI T,6 + MOVEM T,TEM ;INIT SYMBOL COUNTER + CLEARM,DEN + CLEARM,WRD2 + +L2: PUSHJ P,TIN ;PICK UP CHARACTER + CAIL T,"A"+40 ;LOWER CASE A + CAILE T,"Z"+40 ;LOWER CASE Z + JRST .+2 + TRC T,40 ;CHANGE LOWER CASE TO UPPER CASE + TLNE F,CF ;CONTROL FLAG + JRST L21 + CAIG T,"Z" ;Z + CAIGE T,"A" ;A + JRST .+2 + JRST LET +L21: MOVE R,T + IDIVI R,3 + LDB W,BDISP(R+1) + CAIGE W,MULT-DDT ;FIRST EVAL ROUTINE + JRST DDT(W) + +L211: MOVE T,SYL + TLZN F,LTF + JRST POWER + PUSHJ P,EVAL + JRST UND1 +L4: TLZE F,MF + MOVN T,T + TLNN F,SF + CAIE W,LPRN-DDT + JRST .+2 + JRST LPRN + + EXCH T,FRASE1 + TLNN F,DVF + IMULB T,FRASE1 + TLZE F,DVF + IDIVB T,FRASE1 + CAIGE W,ASSEM-DDT + JRST DDT(W) ;MULTIPLY OR DIVIDE + ADDB T,FRASE + CAIGE W,SPACE-DDT + JRST DDT(W) ; + - @ , + + ADD T,WRD + TLNE F,TIF ;TRUNCATE INDICATOR FLAG + HLL T,WRD ;TRUNCATE + MOVEM T,WRD + TLNN F,QF + MOVE T,LWT + CLEARM,R + MOVE W1,ESTUT + CAMN W1,ESTU + JRST L5 + CAILE W,CARR-DDT + JRST ERR +L5: CAIG W,RPRN-DDT + JRST DDT(W) + PUSH P,KILRET + SKIPN PRNC + JRST DDT(W) + +ERR: MOVEI W1,"?" + JRST WRONG1 +UNDEF: MOVEI W1,"U" + JRST WRONG1 +WRONG: MOVE W1,[ASCII /XXX/] +WRONG1: MOVEI P,PS + PUSHJ P,TEXT +IFN EDDT&1,<PUSHJ P,LISTEN + JFCL> + RET: MOVEI P,PS + PUSHJ P,LCT ;COMMON RETURN FOR TAB;,JRST LIS + JRST DD2 + +UND1: MOVE R,ESTUT ;UNDEFINED SYM ASSEMBLER + HLRE S,ESTUT + ASH S,-1 ;SETUP EVAL END TEST + PUSHJ P,EVAL2 + CAIN W,ASSEM-DDT + TLNN F,ROF + JRST OPEVAL + SKIPE PRNC + JRST OPEVAL + MOVEI T,"#" + CAIE W,ASSEM-DDT + PUSHJ P,TOUT + + MOVN R,[XWD 2,2] + ADDB R,ESTUT + MOVE T,SYM + TLO T,GLOBAL + MOVEM T,(R) + HRRZ T,LLOCO + TLNE F,MF + TLO T,400000 + MOVEM T,1(R) + MOVEI T,0 + JRST L4 + +QUESTN: PUSHJ P,CRF ;LIST UNDEFINED SYMBOLS + MOVE R,ESTU +QUEST1: JUMPGE R,DD1 + MOVE T, (R) + SKIPA W1,ESTU + +QUEST2: ADD W1,[XWD 2,2] + CAME T,(W1) + JRST QUEST2 + +QUEST3: CAME R,W1 + JRST QUEST4 + PUSHJ P,SPT + PUSHJ P,CRF +QUEST4: ADD R,[XWD 2,2] + JRST QUEST1 + +NUM: ANDI T,17 ;T HOLDS CHARACTER + TLNE F,CF+FPF + JRST NM1 + MOVE W,SYL + LSH W,3 + ADD W,T + MOVEM W,SYL + MOVE W,DEN + IMULI W,12 ;CONVERT TO DECIMAL + ADD W,T + MOVEM W,DEN +LE1: AOJA T,LE1A + +PERC: MOVEI T,47+101-13 ;PERCENT SIGN +LET: TLC F,SF+FPF ;EXPONENT IFF LTF'*FEF'*(T=105)*SF*FPF=1 + TLZN F,LTF+FEF+SF+FPF + CAIE T,105 ; E + TLOA F,LTF + TLOA F,FEF + JRST LET1 + TLZN F,MF + SKIPA W1,SYL + MOVN W1,SYL + MOVEM W1,FSV + CLEARM DEN +LET1: SUBI T,101-13 ;FORM RADIX 50 SYMBOL +LE1A: TLO F,SF+QF +LE2: MOVE W,SYM + IMULI W,50 ;CONVERT TO RADIX 50 + ADD W,T + SOSL,TEM ;IGNORE CHARACS AFTER 6 + MOVEM W,SYM + JRST L2 + +NUM1: EXCH T,WRD2 ;FORM NUMBER AFTER $ + IMULI T,12 + ADDM T,WRD2 + TRO F,Q2F + JRST L2 + +NM1: TLNE F,CF + JRST NUM1 + MOVEI W1,6 ;FORM FLOATING POINT NUMBER + AOS NM1A +NM1A: MOVEI W2,0 + MOVSI R,201400 +NM1A1: TRZE W2,1 + FMPR R,FT(W1) + JUMPE W2,NM1B + LSH W2,-1 + SOJG W1,NM1A1 +NM1B: MOVSI W1,211000(T) + FMPR R,W1 ;COMPUTE VALUE OF NEW DIGIT + FADRB R,FH ;ADD VALUE INTO FLOATING NO. + MOVEM R,SYL + AOJA T,LE1A + +POWER: TLNN F,FEF + JRST L4 ;NO EXPONENT + CAIE W,PLUS + CAIN W,MINUS + TROE F,POWF + TRZA F,POWF + JRST (W) ; E+- + + MOVE W2,DEN + CLEARM FRASE + MOVEI W1,FT-1 + TLZE F,MF + MOVEI W1,FT01 + SKIPA T,FSV +POW2: LSH W2,-1 + TRZE W2,1 + FMPR T,(W1) + JUMPE W2,L4 + SOJA W1,POW2 + + +PERIOD: MOVE T,LLOC + TLNE F,SF ;SYLLABLE STARTED + MOVE T,DEN + MOVEM T,SYL + TLNE F,FPF ;HAS A PERIOD BEEN SEEN BEFORE? + TLO F,LTF ;YES, TWO PERIODS MAKES A SYMBOL + TLON F,FPF+SF+QF + MOVEI T,0 + IDIVI T,400 + SKIPE T + TLC T,243000 + TLC W1,233000 + FAD T,[0] ;NORMALIZE T AND W1 + FAD W1,[0] + FADR T,W1 + MOVEM T,FH + HLLZS NM1A + MOVEI T,45 ;RADIX 50 PERIOD + JRST LE2 + +QUAN: SKIPA T,LWT ;LAST QUANTITY TYPED +PILOC: MOVEI T, SAVPI +QUAN1: MOVEM T,SYL +QUAN2: TLO F,SF+QF ;WRD,SYL STARTED + TLZ F,CF+CCF + JRST L2 + +CONTRO: ;SOME KIND OF ALTMODE +IFN EDDT&1,< MOVEI T,"$" ;$ + PUSHJ P,TOUT ;TYPE OUT $ +> +DOLLAR: TLOE F,CF + TLO F,CCF + JRST L2 + + +EVAL: MOVE R,PRGM ;LOOK UP SYMBOL +EVAL0: HRLOI W1,37777+DELI + HLRE S,@SYMP + ASH S,-1 ;SETUP END TEST + JRST EVAL3 + +EVAL1: ADD R,[XWD 2,2] +EVAL2: SKIPL R + MOVE R,@SYMP + AOJG S,CPOPJ ;TRNASFER IF NO SYMBOL FOUND +EVAL3: MOVE T,(R) + XOR T,SYM + TLNN T,PNAME + TLOA W1,LOCAL + TDNE T,W1 + JRST EVAL1 + TLNN T,340000 + JRST EVAL1 + MOVE T,1(R) +CPOPJ1: AOS (P) ;FOUND SYMBOL, SKIP +CPOPJ: POPJ P, + +;BIT 40 - DELETE OUTPUT +; 20 - DELETE INPUT +; 10 - LOCAL +; 04 -GLOBAL +; NO BITS - PROGRAM NAME + +TEXI: PUSHJ P,TEXIN ;INPUT TEXT + MOVEM T,SYL + MOVEI W1,5 + MOVEI T-1,0 + PUSHJ P,TEXIN + CAIN T,33 ;NEW ALT MODE, ESCAPE + JRST QUAN2 + TLNE F,CF + JRST SIXBIN + SKIPA +TEXI2: PUSHJ P,TEXIN + CAMN T,SYL + SOJA W1,TEXI3 + ROT T,-7 + LSHC T-1,7 + SOJA W1,TEXI2 + +TEXI3: LSHC T-1,-43 + JUMPL W1,QUAN1 + LSH T,7 + SOJA W1,.-2 + + SIXBI1: PUSHJ P,TEXIN ; INPUT TEXT (SIXBIT) +SIXBIN: CAMN T,SYL + JRST SIXBI2 + ANDI T,77 + TRC T,40 + ROT T,-6 + LSHC T-1,6 + SOJA W1,SIXBI1 +SIXBI2: MOVE T,T-1 + JUMPL W1,QUAN1 + LSH T,6 + SOJA W1,.-2 + +KILL: TLNN F,LTF ;DELETE SYMBOLS + JRST KILLA + PUSHJ P,EVAL + JRST KILL1 + MOVEI T,DELO/200000 ;DELETE OUTPUT + TLNE F,CCF + MOVEI T,DELI/200000 ;NO INPUT OR OUTPUT + DPB T,[POINT 2,(R),1] ;LEFT 2 BITS IN SYMBOL +KILRET: JRST RET ;USED AS A CONSTANT + +KILLA: TLNN F,QF + TLNN F,CCF + JRST ERR + MOVE R,KILC + MOVEM R,@SYMP ;RESTORE INIT SYMS + HRRZM R,ESTU + MOVEM R,PRGM + HRLZI T,DELO+DELI + ANDCAM T,(R) ;GET RID OF DELETE BITS IN INITIAL TABLE + AOBJN R,.+1 + AOBJN R,.-2 + JRST RET + +KILL1: MOVE R,ESTU ;REMOVE UNDEFINED SYMS + JUMPGE R,UNDEF +KILL2: PUSHJ P,EVAL0 + JRST RET + PUSHJ P,REMUN + JRST KILL2 + +REMUN: MOVE S,[XWD 2,2] ;REMOVE ONE UNDEFINED SYMBOL + ADDB S,ESTU + MOVE W,-2(S) + MOVEM W,(R) + MOVE W,-1(S) + MOVEM W,1(R) + POPJ P, + + +TAG: TLNN F,LTF ; NO LETTERS IS ERROR + JRST ERR ; GO SAY ERROR + TLNE F,FAF ; DEFINE SYMBOLS + JRST DEFIN ;A<B: + TLNE F,CF ;DEFINE SYMBOL AS OPEN REGISTER + JRST SETNAM + MOVE W,LLOCO + HRRZM W,DEFV + +DEFIN: PUSHJ P,EVAL + JRST DEF1 + CAMGE R,KILC ;INITIAL SYMBOL? + JRST DEF2 ;NO, REDEFINE + MOVEI T,DELI/200000 ;YES, DELETE AND DEFINE NEW ONE + DPB T,[POINT 2,(R),1] ;LEFT 2 BITS OF SYMBOL +DEF1: MOVN R,[XWD 2,2] + ADDB R,@SYMP ;MOVE UNDEFINED TABLE 2 REGISTERS + HRRZ T,ESTU + SUBI T,2 + HRL T,ESTU + HRRM T,ESTU + SKIPGE ESTU + BLT T,-1(R) +DEF2: MOVE T,DEFV + MOVEM T,1(R) ;PUT IN NEW VALUE + MOVSI T,GLOBAL + IORB T,SYM + MOVEM T,(R) ;PUT IN NEW SYM AS GLOBAL + MOVE R,ESTU + +DEF3: JUMPGE R,RET ;PATCH IN VALUE FOR UNDEF SYM ENTRY + MOVE T,SYM + CAME T,(R) + JRST DEF4 + MOVE S,DEFV + SKIPGE, 1(R) + MOVN S,S + PUSH P,R + MOVE R,1(R) + PUSHJ P,FETCH + JRST ERR + ADD S,T + HRRM S,T + PUSHJ P,DEP + POP P,R + PUSHJ P,REMUN +DEF4: ADD R,[XWD 2,2] ;REMOVE THE NOW DEFINED SYMBOL + JRST DEF3 + +SETNAM: MOVE R,@SYMP ;SET PROGRAM NAME - DOLLAR COLON +SET1: MOVE W,R +SET2: JUMPGE R,UNDEF + MOVE T,(R) + ADD R,[XWD 2,2] + TLNE T,PNAME + JRST SET2 + CAME T,SYM + JRST SET1 + MOVEM W,PRGM + JRST RET + +MULT: TLOA F,PTF+MLF ;* +DIVD: TLO F,DVF+PTF ;SINGLE QUOTE + JRST L1 + +ASSEM: JRST PLUS ;# +MINUS: TLO F,MF +PLUS: TLO F,PTF + JRST LIS2 + +LPRN: CAML P,[XWD LPDL-4,0] ;LEFT PARENTHESIS + JRST ERR + PUSH P,F ;RECURSE FOR OPEN PAREN + PUSH P,WRD + PUSH P,FRASE + PUSH P,FRASE1 + AOS,PRNC + JRST LIS + +INDIRECT: HRLZI W,20 ;@ + IORB W,WRD + TLO F,QF + JRST LIS2 + +ACCF: MOVE R,T ;COMMA + HLLZS T + LDB W1,[POINT 3,WRD,2] ;CHECK FOR IO INSTRUCTION + IDIVI W1,7 + LSH R,27(W1) + ADD T,R + ADDB T,WRD + JRST SPACE+1 + +SPACE: TLNE F,QF + TLO F,TIF +SPAC1: TLZ F,MF+PTF + JRST LIS1 + +RPRN: TLNN F,QF ;) + MOVEI T,0 + MOVS T,T + SOSGE,PRNC + JRST ERR + POP P,FRASE1 + POP P,FRASE + POP P,WRD + POP P,F + TLNE F,PTF + TLNE F,SF + JRST RPRN1 + MOVEM T,SYL + TLO F,QF+SF + JRST L1RPR +RPRN1: ADDB T,WRD + TLO F,QF + JRST L1RPR-1 + +;REGISTER EXAMINATION LOGIC + +LINEF: PUSHJ P,DEPRA ;NEXT REGISTER +IFE EDDT&1,<PUSHJ P,CRNRB + JRST .+2> +LI0: PUSHJ P,CRF + AOS T,LLOC +LI1: HRRZM T,LLOC + HRRZM T,LLOCO + PUSHJ P,PAD + MOVEI T,"/" + TLNE F,STF + MOVEI T,"!" + PUSHJ P,TOUT +LI2: TLZ F,ROF + PUSHJ P,LCT + MOVE R,LLOCO + PUSHJ P,FETCH + JRST ERR + TLO F,ROF + TLNE F,STF + JRST DD2 + JRST CONSYM ;RETURN IS A POPJ + +VARRW: PUSHJ P,DEPRA ;^ + PUSHJ P,CRF + SOS T,LLOC + JRST LI1 + +CARR: PUSHJ P,DEPRA ;CLOSE REGISTER + IFN EDDT&1,<JRST DD1> + IFE EDDT&1,< PUSHJ P,TIN + CAIN T,15 + JRST .-2 + JRST DD1.5> + +OCON: TROA F,LF1+CF1 ;OPEN AS CONSTANT +OSYM: TRZ F,CF1 ;OPEN SYMBOLICALLY + TROA F,LF1 +SUPTYO: TLOA F,STF ;SUPPRESS TYPEOUT +SLASH: TLZ F,STF ;TYPE OUT REGISTER + TLNE F,QF + HRRZM T,LLOC ;QUANTITY TYPED +SLAS1: HRRZM T,LLOCO + JRST LI2 + +ICON: TLNN F,ROF ;REGISTER OPENED OR ERR + JRST ERR + PUSHJ P,DEPRS + JRST SLAS1 + + +TAB: PUSHJ P,DEPRS ;OPEN REGISTER OF Q + MOVEI T,-1(T) + MOVEM T,LLOC + HRROI T,700000 ;3 RUBOUTS + PUSHJ P,TEXTT + JRST LI0 + +DEPRA: TLNE F,ROF ;IF REGISTER IS BEING CHANGED + TLNN F,QF ;REMOVE ALL PREVIOUS UNDEFINED + JRST DEPRS ;SYMBOL REFERENCES TO IT + MOVE R,ESTU + MOVEM W1,ESTU +DEPRA2: JUMPGE R,DEPRS + HRRZ W,1(R) + CAMN W,LLOCO + PUSHJ P,REMUN + ADD R,[XWD 2,2] + JRST DEPRA2 + +EQUAL: TROA F,LF1+CF1 ;= +PSYM: TRZ F,CF1 ;@ + TRO F,LF1 + PUSHJ P,CONSYM + JRST RET + +R50PNT: LSH T,-36 ;RADIX 50 SYMBOL PRINTER + TRZ T,3 + PUSHJ P,TOC + PUSHJ P,TSPC + MOVEI W1,LWT ;SETUP FOR SPT + JRST SPT + +SIXBP: MOVNI W2,6 ;SIXBIT PRINTER + MOVE W1,LWT +SIXBP1: MOVEI T,0 + ROTC T,6 + ADDI T,40 + PUSHJ P,TOUT + AOJL W2,SIXBP1 + POPJ P, + +;MODE CONTROL SWITCHES + +TEXO: MOVEI R,TEXTT-HLFW ;$T ASSUME 7 BIT ASCII + MOVE T,WRD2 + CAIN T,6 ;CHECK FOR $6T + MOVEI R,SIXBP-HLFW ;SET MODE SWITCH FOR SIXBIT + CAIN T,5 ;CHECK FOR $5T + MOVEI R,R50PNT-HLFW ;SET MODE SWITCH FOR RADIX 50 +HWRDS: ADDI R,HLFW-TFLOT ;H +SFLOT: ADDI R,TFLOT-PIN ;F +SYMBOL: ADDI R,PIN-FTOC ;S +CON: ADDI R,FTOC ;C + HRRZM R,SCH + JRST BASE1 + +RELA: TRZE F,Q2F ;CHANGE ADDRESS MODE TO RELATIE + JRST BASECH + MOVEI R,PADSO-TOC +ABSA: ADDI R,TOC ;A + HRRZM R,AR + JRST BASE1 + +BASECH: MOVE T,WRD2 ;$NR CHANGE OUTPUT RADIX TO N, N>1 + CAIGE T,2 + JRST ERR + HRRZM T,ODF +BASE1: MOVS S,[XWD SCHM,SCH] + TLNN F,CCF + JRST LIS1 + BLT S,ODFM ;WITH $$, MAKE MODES PERMANENT + JRST RET + +SEMIC: MOVEM T,LWT ;SEMICOLON TYPES IN CURRENT MODE + JRST @SCH + ;GO AND EXECUTE LOGIC + +GO: HRLI T,254000 ;G + TLOE F,QF + JRST XEC0 + IFN EDDT&1,< SKIPE T,STARTA> ;LOAD TAPE START ADDRESS + IFE EDDT&1,< HRR T,JOBSA> ;GET STARTING ADDRESS + +XEC: TLNN F,QF ;X + JRST ,ERR +XEC0: MOVEM T,TEM + PUSHJ P,CRF + PUSHJ P,TTYLEV + PUSHJ P,INSRTB + JSP T,RESTORE + XCT,TEM +XEC1: JRST DDT ;USED AT PROC0 + JSR,SAVE + PUSHJ P,REMOVB + PUSHJ P,CRF + JRST DD1 + + ;BREAK POINT LOGIC +BP1: REPEAT NBP,< 0 ;JSR TO HERE FOR BREAKPOINT + JSA T, BCOM + 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE +> + +B1INS=BP1+2 +BPN=.-3 + +BCOM: 0 + POP T,LEAV ;MOVE INSTRUCTION TO LEAV + MOVEI T,B1SKP-B1INS+1(T) + HRRM T,BCOM3 ;CONDITIONAL BREAK SETUP + MOVEI T,B1CNT-B1SKP(T) + HRRM T,BCOM2 ;PROCEDE COUNTER SETUP + MOVE T,BP1-B1CNT(T) +IFN EDDT&1,< TLZ T,010000 ;TURN OFF USER MODE BIT> + HLLM T,LEAV1 ;SAVE FLAGS FOR RESTORING + EXCH T,BCOM + +BCOM3: SKIPE B1SKP ;ADDR MOD TO LOOK AT COND. INST. + XCT @.-1 +BCOM2: SOSG B1CNT ;ADDR MOD TO LOOK AT PROCEED COUNTER + JRST BREAK + + MOVEM T,AC0+T + LDB T,[POINT 9,LEAV,8] ;GET INSTRUCTION + CAIL T,264 ;JSR + CAILE T,266 ;JSA,JSP + TRNN T,700 ;UUO + JRST PROC1 ;MUST BE INTERPRETED + CAIE T,260 ;PUSHJ + CAIN T,256 ;XCT + JRST PROC1 ;MUST BE INTERPRETED + MOVE T,AC0+T + JRST 2,@LEAV1 ;RESTORE FLAGS, GO TO LEAV + +LEAV1: XWD 0,LEAV + BREAK: JSR SAVE ;SAVE THE WORLD + PUSHJ P,REMOVB ;REMOVE BREAKPOINTS + SOS T,BCOM3 + HRRZS T ;GET ADDR OF BREAKPOINT JUST HIT + PUSHJ P,PADSO ;PRINT ITS NAME- $NB + MOVSI W1,(ASCII />/) ;TYPE > FOR COND BREAK + SKIPG @BCOM2 ;TEST PROCEED COUNTER + MOVSI W1,(ASCII />>/) ;TYPE >> FOR PROCEED COUNTER BREAK + PUSHJ P,TEXT2 + MOVE T,BCOM + HLLM T, SAVPI ;SAVE PROCESSOR FLAGS + MOVEI T,-1(T) + PUSHJ P,PAD ;TYPE PC AT BREAK + HRRZ T,@BCOM3 + HRRM T,PROC0 ;SETUP ADDRESS OF BREAK + HLRZ T,@BCOM3 + JUMPE T,BREAK1 ;TEST FOR REGISTER TO EXAMINE + PUSHJ P,LCT ;PRINT TAB + HLRZ T,@BCOM3 + PUSHJ P,LI1 ;EXAMINE REGISTER C($NB)LEFT +BREAK1: HRRZ R,BCOM3 + SUBI R,B1ADR + IDIVI R,3 ;GET BREAKPOINT NUMBER-1 INTO R + MOVEI S,1 + LSH S,(R) + PUSHJ P,LISTEN ;DONT PROCEED IF TTY KEY HIT + TDNN S,AUTOPI ;DONT PROCEED IF NOT AUTOMATIC + JRST RET ;DONT PROCEED + JRST PROCD1 + +PROCEDE: TLNN F,QF ;N$P ;PROCEED AT A BREAKPOINT + MOVEI T,1 + MOVEM T,@BCOM2 + HRRZ R,BCOM3 + PUSHJ P,AUTOP +PROCD1: PUSHJ P,CRF + PUSHJ P,TTYLEV +PROC0: HRRZI R,XEC1 ;MODIFIED TO ADDR OF BREAKPOINT + PUSHJ P,FETCH + JRST BPLUP1 ;ONLY GET HERE IF MEMORY SHRANK + MOVEM T,LEAV + PUSHJ P,INSRTB + JRST PROC2 + +PROC1: MOVE T,AC0+T + JSR SAVE + JFCL +PROC2: MOVEI W,100 + MOVEM W,TEM1 ;SETUP MAX LOOP COUNT + JRST IXCT5 + IXCT4: IFE EDDT&1,< SUBI T,041 + JUMPE T,BPLUP + AOJGE T,IXCT6> ;DONT PROCEDE FOR INIT + ;DONT INTERPRET FOR SYSTEM UUOS + MOVEM R,40 ;INTERPRET FOR NON-SYSTEM UUOS + MOVEI R,41 +IXCT: SOSL TEM1 + PUSHJ P,FETCH + JRST BPLUP ;BREAKPOINT LOOPING OR FETCH FAILED + MOVEM T,LEAV +IXCT5: IFN EDDT&1,< + LDB T,[POINT 9,LEAV,8] ;GET INSTRUCTION + CAIN T,254 ;DON'T DO ANYTHING TO JRST IN EXEC MODE + JRST IXCT6> + HRLZI 17,AC0 + BLT 17,17 + MOVEI T,@LEAV + DPB T,[POINT 23,LEAV,35] ;STORE EFFECTIVE ADDRESS + LDB W1,[POINT 4,LEAV,12] ;PICK UP AC FIELD + LDB T,[POINT 9,LEAV,8] ;PICK UP INSTRUCTION FIELD + MOVEI P,PS + CAIN T,260 + JRST IPUSHJ ;INTERPRET PUSHJ + + CAIN T,264 + JRST IJSR ;INTERPRET JSR + CAIN T,265 + JRST IJSP ;INTERPRET JSP + CAIN T,266 + JRST IJSA ;INTERPRET JSA + MOVE R,LEAV + TRNN T,700 + JRST IXCT4 ;INTERPRET UUO + CAIN T,256 + JRST IXCT ;INTERPRET XCT + +IXCT6: JSP T,RESTORE +LEAV: 0 ;INSTRUCTION MODIFIED + JRST @BCOM + AOS BCOM + JRST @BCOM + +BPLUP: PUSHJ P,REMOVB ;BREAKPOINT PROCEED ERROR +BPLUP1: JSR SAVE + JFCL + JRST ERR + +IPUSHJ: DPB W1,[POINT 4,CPUSHP,12] ;STORE AC FIELD INTO A PUSH + CLEARM,TEM3 + MOVE T,LEAV + JRST RESTR1 + +IJSA: MOVE T,BCOM ;INTERPRET JSA + HRL T,LEAV + EXCH T,AC0(W1) + JRST IJSR2 + +IJSR: MOVE T,BCOM ;INTERPRET JSR + HLL T,SAVPI +IJSR2: MOVE R,LEAV + PUSHJ P,DEP + AOSA T,LEAV +IJSR3: MOVE T,LEAV + JRST RESTORE + +IJSP: MOVE W,BCOM ;INTERPRET JSP + HLL T,SAVPI + MOVEM W,AC0(W1) + JRST IJSR3 + +;INSERT BREAKPOINTS + +INSRTB: MOVE S,[JSR BP1] +INSRT1: SKIPE R,B1ADR-BP1(S) + PUSHJ P,FETCH + JRST INSRT3 + MOVEM T,B1INS-BP1(S) + MOVE T,S + PUSHJ P,DEP +INSRT3: ADDI S,3 + CAMG S,[JSR BPN] + JRST INSRT1 + POPJ P, + +;REMOVE BREAKPOINTS + +REMOVB: MOVEI S,BNADR +REMOV1: MOVE T,B1INS-B1ADR(S) + SKIPE R,(S) + PUSHJ P,DEP +REMOV3: SUBI S,3 + CAIL S,B1ADR + JRST REMOV1 + IFN EDDT&1,<JRST TTYRET> + IFE EDDT&1,<POPJ P,> + +;IN EXEC MODE, SAVE UP TTY STATUS +;IN USER MODE, DONE BY SAVE + +;ALL $B COMMANDS GET HERE IN FORM: <A>$<N>B + + +BPS: TLZE F,QF ;HAS <A> BEEN TYPED? + JRST BPS1 ;YES + TRZE F,Q2F ;NO, HAS <N> BEEN TYPED? + JRST BPS2 ;YES + MOVE T,[XWD B1ADR,B1ADR+1] ;NO, COMMAND IS $B - CLEAR ALL BREAKPOINTS + CLEARM B1ADR + BLT T,AUTOPI ;CLEAR OUT ALL BREAKPOINTS AND AUTO PROCEDE REGESTER + JRST RET + +BPS1: TRZN F,Q2F ;HAS <N> BEEN TYPED? + JRST BPS3 ;NO + MOVE R,T ;YES, PROCESS THE COMMAND A$NB + TRO F,2 +BPS2: MOVE T,WRD2 + CAIL T,1 + CAILE T,NBP + JRST ERR + IMULI T,3 + ADDI T,B1ADR-3 + TRZN F,2 + JRST MASK2 + EXCH R,T + JRST BPS5 + +BPS3: MOVEI R,B1ADR ;PROCESS THE COMMAND A$B +BPS4: HRRZ W,(R) + CAIE W,(T) + SKIPN (R) + JRST BPS5 + ADDI R,3 + CAIG R,BNADR + JRST BPS4 + JRST ERR +BPS5: MOVEM T,(R) + CLEARM,1(R) + CLEARM,2(R) + +AUTOP: SUBI R,B1ADR ;AUTO PROCEDE SETUP SUBROUTINE + IDIVI R,3 + MOVEI S,1 + LSH S,(R) + ANDCAM S,AUTOPI + TLNE F,CCF + IORM S,AUTOPI + POPJ P, + + ;FETCH AND DEPOSIT INTO MEMORY + + +DEPRS: MOVEM T,LWT ;DEPOSIT REGISTER AND SAVE AS LWT +DEPR: MOVE R,LLOCO ;QUAN TYPED IN REGIS EXAM + TLZE F,ROF + TLNN F,QF + POPJ P,0 +DEP: TRNN R,777760 + JRST DEP1 +IFE EDDT&1,< HRRZ W,JOBREL + CAIL W,(R)> + + MOVEM T,0(R) + POPJ P,0 +DEP1: MOVEM T,AC0(R) + POPJ P,0 + +FETCH: IFE EDDT&1,<HRRZ T,JOBREL + CAIGE T,(R) + POPJ P,> + TRNN R,777760 + SKIPA T,AC0(R) + MOVE T,(R) + JRST CPOPJ1 + FIRARG: MOVEM T,DEFV + TLO F,FAF + JRST ULIM1 +ULIM: TLO F,SAF + HRRZM T,ULIMIT +ULIM1: TLNN F,QF + JRST ERR + JRST LIS0 + + +LOOK: SKIPL R,PRGM ;LOOK UP SYMBOL + MOVE R,@SYMP + HLRE S,@SYMP + ASH S,-1 ;SETUP COUNT FOR LENGTH OF SYM TABLE + TLZ F,400000 + HRLZI W2,DELO+DELI + MOVEM T,TEM + +LOOK1: TDNE W2,(R) + JRST LOOK3 + MOVE T,(R) + TLNN T,PNAME ;NAME + TLOA W2,LOCAL + SKIPA T,TEM + JRST LOOK3 + MOVE W,1(R) + XOR W,T + JUMPL W,LOOK3 + SUB T,1(R) + JUMPL T,LOOK3 + JUMPGE F,LOOK2 + MOVE W,1(R) + SUB W,1(W1) + JUMPLE W,LOOK3 +LOOK2: HRR W1,R ;POINTER BEST VALUE SO FAR + TLO F,400000 + JUMPE T,SPT0 +LOOK3: ADD R,[XWD 2,2] + SKIPL R + MOVE R, @SYMP + AOJLE S,LOOK1 ;TERMINATING CONDITION + MOVE T,TEM + TLNE F,400000 + SUB T,1(W1) + JRST CPOPJ1 + +CONSYM: MOVEM T,LWT +CONSM: TRNN F,LF1 +CONS1: JRST @SCH ;PIN OR FTOC + TRNE F,CF1 + JRST FTOC + +PIN: ;PRINT INSTRUCTION + TLC T,700000 + TLCN T,700000 + JRST INOUT ;IN-OUT INSTRUCTION OR NEG NUM + AND T,[XWD 777000,0] + JUMPE T,PI3 + PUSHJ P,OPTYPE + MOVSI T,777000 + AND T,LWT + TRNN F,ITF ;HAS INSTRUCTION BEEN TYPED? + PUSHJ P,LOOK ;NO, LOOK IN SYMBOL TABLE + TROA F,NAF ;INSTRUCTION TYPED, ALOOW NEG ADDRESSES + JRST HLFW ;NOT FOUND, OUTPUT AS HALFWORDS + PUSHJ P,TSPC +PI3: LDB T,[XWD 270400,LWT] ;GET AC FIELD + JUMPE T,PI4 + PUSHJ P,PAD +PI3A: MOVEI W1,"," +PI3B: PUSHJ P,TEXT +PI4: MOVE W1,LWT + MOVEI T,"@" + TLNE W1,20 ;CHECK FOR INDIRECT BIT + PUSHJ P,TOUT +PI5: HRRZ T,LWT + LDB W1,[XWD 331100,LWT] ;INSTRUCTION BITS + CAIL W1,240 + CAILE W1,247 + JRST PI8 + PUSHJ P,PADS3A +PI7: TRZ F,NAF + LDB R,[XWD 220400,LWT] ;INDEX REGISTER CHECK + JUMPE R,PADS1 ;EXIT + MOVEI T,"(" + PUSHJ P,TOUT + MOVE T,R +PI7.1: PUSHJ P,PAD + MOVEI T,")" + JRST TOUT ;EXIT + +PI8: PUSHJ P,PAD + JRST PI7 + + +HLFW: MOVEI T,"(" ;PRINT AS HALF WORDS + PUSHJ P,TOUT + HLRZ T,LWT + PUSHJ P,PI7.1 + HRRZ T,LWT + +PAD: ANDI T,777777 ;PRINT ADDRESS + JRST @AR ;PADSO OR PAD1 +PADSO: JUMPE T,TOC2+1 + PUSHJ P,LOOK +PADS1: POPJ P,0 + MOVE W2,1(W1) + CAIGE T,100 + CAIGE W2,60 + JRST PADS3 + MOVEM T,TEM + JUMPGE F,PAD1 + PUSHJ P,SPT0 + MOVEI T,"+" +PADS1A: PUSHJ P,TOUT +PADS2: HRRZ T,TEM +PAD1: JRST TOC ;EXIT + +PADS3: MOVE T,TEM +PADS3A: TRNE F,NAF + CAIGE T,776000 + JRST TOC +PADS3B: MOVNM T,TEM +PADS4: MOVEI T,"-" + JRST PADS1A + +INOUT: TDC T,[XWD -1,400000] ;IO INSTRUCTION OR NEG NUM + TDCN T,[XWD -1,400000] + JRST PADS3B ;TYPE AS NEG NUM + LDB R,[POINT 3,T,12] + DPB R,[POINT 6,T,8] ;MOVE IO BITS OVER FOR OP DECODER + PUSHJ P,OPTYPE + PUSHJ P,TSPC + MOVSI T,077400 + AND T,LWT + JUMPE T,PI4 + PUSHJ P,LOOK ;LOOK FOR DEVICE NUMBER + JRST PI3A + MOVE T,TEM + LSH T,-30 + PUSHJ P,TOC + JRST PI3A + +MASK: TLNE F,QF + JRST MASK1 + MOVEI T,MSK +MASK2: MOVEI W,1 + MOVEM W,FRASE1 + JRST QUAN1 +MASK1: MOVEM T,MSK + JRST RET + +EFFEC: TLO F,LTF + HRRZ T,T +WORD: MOVEI R,322000-326000 ;JUMPE-JUMPN +NWORD: ADDI R,326000+40*T ;JUMPN T, + HRLM R,SEAR2 + +SEARC: TLZN F,QF + JRST ERR + SETCAM T,WRD + MOVSI T,FRASE-DEN-1 ;PREVENT TYPE OUT OF DDT PARTS + SETCMM FRASE(T) + AOBJN T,.-1 + MOVE T,ULIMIT + TLNE F,SAF + TLO F,1 + PUSHJ P,SETUP1 + PUSHJ P,CRF +SEAR1: PUSHJ P,FETCH + JRST SEAR2A + TLNE F,LTF ;CHECK FOR EFFECTIVE ADDRESS SEARCH + JRST EFFEC0 + EQV T,WRD + AND T,MSK +SEAR2: JUMPE T,SEAR3 ;OR JUMPN T +SEAR2A: PUSHJ P,LISTEN ;QUIT ON TELETYPE + AOBJN R,SEAR1 + SETCMM LWT + JRST DD1 + SEAR3: PUSHJ P,FETCH + JRST ERR + MOVEM T,LWT + MOVEM R,TEM2 + MOVEM R,T + HRRZM R,LLOC + HRRZM R,LLOCO + PUSHJ P,PAD + MOVEI T,"/" + PUSHJ P,TOUT + PUSHJ P,LCT + MOVE T,LWT + PUSHJ P,CONSYM + PUSHJ P,CRF + SETCMM LWT + SETCMM TEM +SEAR4: MOVE R,TEM2 + JRST SEAR2A + +EFFEC0: MOVEM R,TEM2 + MOVEI W,100 + MOVEM W,TEM +EFFEC1: MOVE W,T + LDB R,[POINT 4,T,17] ;GET IR FIELD + JUMPE R,EFFEC2 + HRRZ T,AC0(R) + ADD T,W +EFFEC2: HRR R,T + TLNN W,20 ;INDIRECT BIT CHECK + JRST EFFEC3 + SOSE,TEM + PUSHJ P,FETCH + JRST SEAR4 + JRST EFFEC1 +EFFEC3: MOVE R,TEM2 + EQV T,WRD + ANDI T,777777 + JRST SEAR2 + + +SETUP: TLO F,20 ;ZERO +SETUP1: ADDI T,1 ;YANK,VERIFY,SEARCHES + TLNN F,QF +SETUP2: MOVE T,@SYMP + HRRZ T,T + MOVEM T,ULIMIT + HRRZ W,@SYMP + CAMGE W,T + TLNN F,20 +IFE EDDT&1,< CAML T,JOBREL> +IFN EDDT&1,< JRST .+2> + + JRST ERR + HRRZ R,DEFV + TLNN F,FAF + MOVEI R,0 + CAML R,ULIMIT + JRST ERR + MOVEM R,DEFV + MOVE W,R + SUB W,ULIMIT + HRLM W,R + POPJ P,0 + +ZERO: TLNN F,CCF + JRST ERR + PUSHJ P,SETUP +ZERO1: TRNE R,777760 + JRST ZERO2 + CLEARM,AC0(R) + AOBJN R,ZERO1 + JRST DD1 +ZERO2: HRRZ R, R + CAIGE R,ZLOW + MOVEI R,ZLOW ;DON'T ZERO 20-ZLOW + HRRZ S,T + CAIL S, DDT + MOVEI S, DDT + CAMLE S,R + JSP W,ZEROR + HRRZ R,R + CAIG R, DDTEND ; DON'T ZERO OUT + MOVEI R, DDTEND ; DDT + HRRZ S,T + CAMLE S, R + JSP W,ZEROR + JRST DD1 + +ZEROR: HRL R,R + CLEARM,(R) + ADDI R, 1 + BLT R, -1(S) + JRST (W) + + +FTOC: ;NUMERIC OUTPUT SUBROUTINE +TOC: HRRZ W1,ODF + CAIN W1,12 + JRST TOC4 +TOCA: LSHC T,-43 + LSH W1,-1 ;W1=T+1 +TOC1: DIVI T,@ODF + HRLM W1,0(P) +TOC3: JUMPE T,TOC2 + PUSHJ P,TOCA +TOC2: HLRZ T,0(P) + ADDI T,"0" +CJTOUT: JRST TOUT ;DOES POPJ TO TOC2 OR EXIT + +TOC4: MOVM W1,T + JUMPGE T,TOC5 + MOVEI T,"-" + PUSHJ P,TOUT +TOC5: MOVEI T,0 + PUSHJ P,TOC1 +TOC6: MOVEI T,"." + JRST TOUT + +;SYMBOL OUTPUT SUBROUTINE + +SPT0: HRRZM W1,SPSAV ;SAVE POINTER TO TYPED SYM +SPT: MOVE T,CJTOUT ;RADIX 50 SYMBOL PRINT +SPT4: MOVEM T,SPTX ;SETUP OUTPUT DESTINATION + LDB T,[POINT 32,0(W1),35] ;GET SYMBOL +SPT1: IDIVI T,50 + HRLM W1,0(P) + JUMPE T,SPT2 + PUSHJ P,SPT1 +SPT2: HLRZ T,0(P) + JUMPE T,CPOPJ ;FLUSH NULL CHARACTERS + ADDI T,260-1 + CAILE T,271 + ADDI T,301-272 + CAILE T,332 + SUBI T,334-244 + CAIN T,243 +SPT3: MOVEI T,256 +SPTX: 0 ;JRST TOUT, OR IDPB T,R FROM OPEVAL + POPJ P, + +SYMD: MOVEI T,DELO/200000 ;$D ;DELETE LAST SYM & PRINT NEW + HRRZ R,SPSAV ;PICK UP POINTER TO LAST SYM + JUMPE R,ERR + DPB T,[POINT 2,(R),1] ;STORE SEMI-DELETE BITS IN SYMBOL + MOVE T,LWT + JRST CONSYM ;PRINT OUT NEXT BEST SYMBOL + +;FLOATING POINT OUTPUT + +TFLOT: MOVE A,T + JUMPG A, TFLOT1 + JUMPE A,FP1A + MOVNS A + MOVEI T,"-" + PUSHJ P,TOUT + TLZE A,400000 + JRST FP1A +TFLOT1: MOVEI T,"#" ; IF UNNORMALIZED FLOATING + TLNN A, 400 ; POINT NUMBER, SO INDICATE + PUSHJ P, TOUT ; WITH "#" BEFORE NUMBER + +FP1: MOVEI B,0 + CAMGE A,FT01 + JRST FP4 + CAML A,FT8 + AOJA B,FP4 +FP1A: MOVEI C,0 + +FP3: MULI A,400 + ASHC B,-243(A) + MOVE A,B + CLEARM,TEM1 + PUSHJ P,FP7 + PUSHJ P,TOC6 ;PRINT DECIMAL POINT + MOVNI A,10 + ADD A,TEM1 + MOVE W1,C +FP3A: MOVE T,W1 + MULI T,12 + PUSHJ P,FP7B + SKIPE,W1 + AOJL A,FP3A + POPJ P, + +FP4: MOVNI C,6 + MOVEI W2,0 +FP4A: ASH W2,1 + XCT,FCP(B) + JRST FP4B + FMPR A,@FCP+1(B) + IORI W2,1 +FP4B: AOJN C,FP4A + PUSH P,FSGN(B) + PUSHJ P,FP3 + POP P,W1 + MOVE A,W2 + PUSHJ P,TEXT + + FP7: JUMPE A,FP7A1 + IDIVI A,12 + AOS,TEM1 +FP7A: HRLM B,(P) + JUMPE A,FP7A1 + PUSHJ P,FP7 + +FP7A1: HLRZ T,(P) +FP7B: ADDI T,260 + JRST TOUT + + 353473426555 ;1.0E32 + 266434157116 ;1.0E16 +FT8: 233575360400 ;1.0E8 + 216470400000 ;1.0E4 + 207620000000 ;1.0E2 + 204500000000 ;1.0E1 +FT: 201400000000 ;1.0E0 + 026637304365 ;1.0E-32 + 113715126246 ;1.0E-16 + 146527461671 ;1.0E-8 + 163643334273 ;1.0E-4 + 172507534122 ;1.0E-2 +FT01: 175631463146 ;1.0E-1 +FT0=FT01+1 + +FCP: CAMLE A, FT0(C) + CAMGE A, FT(C) + Z FT0(C) + +FSGN: ASCII .E-. + ASCII .E+. + +TEXTT: MOVE W1,T +TEXT: TLNN W1,774000 ;LEFT JUSTIFIED UNLESS LEFT CHAR IS NULL + LSH W1,35 +TEXT2: MOVEI T, ;7 BIT ASCII TEXT OUTPUT SUBROUTINE0 + LSHC T,7 + PUSHJ P,TOUT + JUMPN W1,TEXT2 + POPJ P, + + + +KILC: XWD -NSYMS,LOW + +WRD: 0 +WRD2: 0 +PRNC: 0 + +FRASE: 0 ;DONT CHANGE ORDER, SEE SEARC+3 +SYL: 0 +LWT: 0 +TEM2: 0 +FRASE1: +TEM3: 0 +DEN: 0 + +PRGM: 0 +ESTU: 0 +ESTUT: 0 +FSV: 0 +FRACT: 0 +FPWR: 0 +FTERM: 0 +FH: 0 +SYM: 0 +SPSAV: 0 ;POINTER TO LAST SYMBOL TYPED +DEFV: 0 +ULIMIT: 0 +LLOC: 0 +LLOCO: 0 +SYMP: XWD PID,JOBSYM + +SAVPI: 0 + 1177 +SAVTTY: 0 +IFN EDDT&1,<STARTA: 0> ;START ADR FROM PTR +MSK: XWD -1,-1 +B1ADR: 0 +B1SKP: 0 +B1CNT: 0 + +REPEAT NBP*3-3, < 0> + +BNADR=.-3 +AUTOPI: 0 + +AC0: BLOCK 17 + +AC17: 0 + +SCHM: EXP PIN ;DO NOT CHANGE ORDER +ARM: EXP PADSO +ODFM: EXP 10 + +SARS: 0 +TEM: 0 +TEM1: 0 + + +IFN EDDT&1&<EDDT>B36,< + + +PSR: TLNN F,ROF + JRST ERR + MOVEM T,LWT + PUSHJ P,DEPRS + HRRZM R,DEFV ;R CONTAINS LLOCO + MOVE T,R + JRST PUN2 + +PUNCH: TLC F,FAF+QF + TLCE F,FAF+QF + JRST ERR ;ONE ARGUMENT MISSING +PUN2: ADDI T,1 + HRRZM T,TEM1 + SUB T,DEFV + JUMPLE T,ERR + +PUN1: MOVEI T,4 ;PUNCH 4 FEED HOLES + PUSHJ P,FEED + TLNE F,CF ;PUNCH NON-ZERO BLOCKS? + JRST PUNZ ;YES + HRRZ R,DEFV + IORI R,37 + ADDI R,1 + CAMLE R,TEM1 + MOVE R,TEM1 + EXCH R,DEFV + MOVE T,R + SUB T,DEFV + HRL R,T + JUMPGE R,RET ;EXIT OR PUNCH + +PBLK: MOVE T,R + SOS W,T ;INIT CHECKSUM + PUSHJ P,PWRD +PBLK1: PUSHJ P,FETCH + JRST ERR + ADD W,T + PUSHJ P,PWRD + AOBJN R,PBLK1 + MOVE T,W + PUSHJ P,PWRD + JRST PUN1 + +;PUNCH NON-ZERO BLOCKS + +PUNZ0: AOS DEFV ;LOOK AT NEXT WORD +PUNZ: HRRZ W,DEFV ;ENTER HERE - GET STARTING ADDRESS + MOVE R,W + SUB W,TEM1 ;CALCULATE NEGATIVE LENGTH + HRL R,W ;SET UP AOBJN POINTER + JUMPGE R,RET ;FINISHED? + CAMG R,[XWD -40,0] ;BLOCK LONGER THAN 40? + HRLI R,-40 ;YES, FIX IT UP + MOVSI W1,400000 ;W1 NEGATIVE MEANS FLUSH 0 WORDS +PUNZ2: PUSHJ P,FETCH ;GET WORD FROM MEMORY + JRST ERR + JUMPE T,[AOJA W1,PUNZ4] ;IF WORD IS 0, INDEX 0 WORD COUNTER + MOVEI W1,0 ;CLEAR 0 WORD COUNTER +PUNZ4: JUMPL W1,PUNZ0 ;FLUSH 0 WORD, GET ANOTHER + CAIL W1,3 ; NOSKIP FOR 3RD 0 WORD AFTER NON 0 WORD + AOSA R ;ADVANCE R TO LAST ADR+1 + AOBJN R,PUNZ2 + ADD W1,DEFV ;CALCULATE DEFV-R+W1=-WORD COUNT + SUB W1,R + HRLM W1,DEFV ;PUT -WC IN LEFT HALF OF FA + EXCH R,DEFV ;SAVE ADR FOR NEXT BLOCK, GET POINTER + JRST PBLK + +> + IFN EDDT&1&<EDDT>B36,< + + +LOADER: TLNE F,QF + JRST ERR + MOVEI T,400 + PUSHJ P,FEED + MOVE R,LOADE +LOAD1: MOVE T,0(R) + PUSHJ P,PWRD + AOBJN R,LOAD1 + MOVEI T,100 +LOAD2: PUSHJ P,FEED + JRST RET + +BLKEND: TLNN F,QF ;BLOCK END + MOVE T,[JRST 4,DDT] + TLO T,254000 ;JRST + PUSH P,T + MOVEI T,100 + PUSHJ P,FEED + POP P,T + PUSHJ P,PWRD + PUSHJ P,PWRD ;EXTRA WORD FOR READER TO STOP ON + MOVEI T,500 + JRST LOAD2 + +PWRD: MOVEI W1,6 +PWRD2: ROT T,6 + CONSZ PTPP,20 + JRST .-1 + CONO PTPP,50 + DATAO PTPP,T + SOJG W1,PWRD2 + POPJ P,0 + +FEED: CONSZ PTPP,20 + JRST .-1 + CONO PTPP,10 + DATAO PTPP,FEED1 + SOJN T,FEED +FEED1: POPJ P,0 ;ADDRESS USED AS A CONSTANT + +> + IFN EDDT&1&<EDDT>B36,< + + +VERIFY: TLO F,LTF +CORE: PUSHJ P,SETUP1 ;LOAD TAPES INTO CORE + CONO PTRR,60 +CORE1: CONSO PTRR,10 + JRST .-1 + DATAI PTRR,T + CAME T,LOADE-1 ;JRST 1 + JRST CORE1 + PUSHJ P,CRF + PUSHJ P,BLOCK + +CORE2: PUSHJ P,GETW + CAML R,DEFV + CAML R,ULIMIT + JRST VER3 + TLNE F,LTF + JRST VER2 + PUSHJ P,DEP + JRST VER3 + +VER2: MOVEM T,TEM2 + PUSHJ P,FETCH + JRST ERR + MOVEM T,TEM3 + XOR T,TEM2 + AND T,MSK + JUMPE T,VER3 + PUSH P,S + PUSH P,R + HRRZ T,R + PUSHJ P,PAD + MOVEI T,257 ;SLASH + PUSHJ P,TOUT + PUSHJ P,LCT + MOVE T,TEM3 ;CORE CONTENTS + PUSHJ P,CONSYM + PUSHJ P,LCT + MOVE T,TEM2 ;TAPE CONTENTS + PUSHJ P,CONSYM + PUSHJ P,CRF + POP P,R + POP P,S +VER3: PUSHJ P,LISTEN + AOJA R,CORE2 +RUNEND: PUSHJ P,BLOCK + JRST .-1 + + +> + IFN EDDT&1&<EDDT>B36,< + + + +GETW: JUMPL S,GETW1 + PUSHJ P,BLOCK +GETW1: MOVE T,1(S) + AOBJP S,.+1 + POPJ P,0 + +BLOCKS: CONO PTRR,60 ;READ DATA BLOCKS +BLOCK: CONSO PTRR,10 + JRST .-1 + DATAI PTRR,W + JUMPL W,BLK1 + MOVEM W,STARTA + CONO PTRR,0 ;TURN OFF READER + JRST DD1 +BLK1: MOVEM W,W1 ;INIT CHECKSUM + TLC W,777740 + TLCE W,777740 + JRST ERR ;BLOCK TOO BIG + ADDI W,1 + HRRZM W,R + HRRI W,BUFF-1 + MOVEM W,S +BLK2: CONSO PTRR,10 + JRST .-1 + BLKI PTRR,W + JRST BLK3 + ADD W1,0(W) + JRST BLK2 +BLK3: ADD W1,0(W) + CONSO PTRR,10 + JRST .-1 + DATAI PTRR,W + CAMN W,W1 + POPJ P,0 + CONO PTRR,0 ;CHECKSUM ERROR + JRST 4,BLOCKS + +;R CONTAINS RIGHT HALF OF FIRST LINE +;S CONTAINS (-WC,BUFF-1) + + +> + IFN EDDT&1&<EDDT>B36,< + + +LOADB: + +PHASE 0 ;RIM10B CHECKSUM LOADER + XWD -16,0 +BEG: CONO PTRR,60 + HRRI AA,RD+1 +RD: CONSO PTRR,10 + JRST .-1 + DATAI PTRR,@TBL1-RD+1(AA) + XCT TBL1-RD+1(AA) + XCT TBL2-RD+1(AA) +AA: SOJA AA, + +TBL1: CAME CKSM,ADR + ADD CKSM,1(ADR) + SKIPL CKSM,ADR + +TBL2: JRST 4,BEG + AOBJN ADR,RD +ADR: JRST BEG+1 +CKSM=ADR+1 + +DEPHASE + +LOADE: XWD LOADB-.,LOADB +> + + + +SAVE: 0 ;SAVE THE ACS AND PI SYSTEM + SKIPN SARS + JRST SAV1 + AOS SAVE + JRST SAV5 +SAV1: IFN EDDT&1,< + CONI PRS,SAVPI + CONO PRS, @SAVPI+1> + MOVEM 17,AC17 + HRRZI 17,AC0 + BLT 17,AC0+16 + MOVE T, SAVE + HLLM T, SAVPI +SAV5: SETOM,SARS + MOVEI P,PS + IFE EDDT&1,<PUSHJ P,TTYRET> ;IN USER MODE, GET INTO DDT MODE + MOVEI F,0 + MOVE T,[XWD SCHM,SCH] + BLT T,ODF ;LOAD THE ACS WITH MODE SWITCHES + JRST @SAVE + +RESTORE: SETOM TEM3 ;RESTORE ACS AND PI SYSTEM +RESTR1: HRRM T,SAVE + MOVE T,SAVPI + HLLM T, SAVE +IFN EDDT&1,< + AND T, SAVPI+1 + IORI T, 2000 ;TURN ON CHANNELS + MOVEM T, SAVPI> +RES1: HRLZI 17,AC0 + BLT 17,17 + SETZM SARS + SKIPL,TEM3 +CPUSHP: PUSH BCOM ;PROGRAM MODIFIED AT IPUSHJ +IFN EDDT&1,< CONO PRS,@SAVPI> + JRST 2,@SAVE + + +CRN: MOVEI T,15 ;CARRIAGE RETURN + JRST TOUT + +IFE EDDT&1,< +CRNRB: PUSHJ P,CRN + MOVEI T,177 + JRST TOUT> + +CRF: PUSHJ P,CRN +LF: MOVEI T,12 ;LINE FEED + JRST TOUT + +LCT: IFN EDDT&1,<PUSHJ P,TSPC + PUSHJ P,TSPC> + IFE EDDT&1,<MOVEI T,11 + JRST TOUT> ;TYPE A TAB + +TSPC: MOVEI T,40 ;SPACE + JRST TOUT + IFN EDDT&1,< ;EXECUTIVE MODE TELETYPE I/O + +TIN: PUSHJ P,LISTEN ;TELETYPE CHARACTER INPUT + JRST .-1 + CAIE T,175 + CAIN T,176 + MOVEI T,33 ;CHANGE ALL ALT MODES TO NEW + CAIN T,177 ;RUBOUT? + JRST WRONG ;YES, TYPE XXX + TRNE T,140 ;DON'T ECHO CR,LF,ALT,TAB,BACK SPACE,ETC +TOUT: CAIG T,04 ;DON'T TYPE EOT OR LOWER CHARS + POPJ P, + HRLM T,(P) + IMULI T,200401 ;GENERATE PARITY + AND T,[11111111] + IMUL T,[11111111] + HLR T,(P) + TLNE T,10 + TRC T,200 ;MAKE PARITY EVEN + CONSZ TTYY,20 + JRST .-1 + DATAO TTYY,T + ANDI T,177 ;FLUSH PARITY + POPJ P,0 + +LISTEN: CONSO TTYY,40 ;LISTEN FOR TTY + POPJ P, + DATAI TTYY,T + ANDI T,177 + JRST CPOPJ1 + +TTYRET: MOVEI T,3410 +TTY1: MOVEI W2,40000 + CONSZ TTYY,120 + SOJG W2,.-1 + CONI TTYY,SAVTTY + DATAI TTYY,W2 + HRLM W2,SAVTTY + CONO TTYY,(T) + POPJ P, +TTYLEV: MOVE T,SAVTTY + TRZ T,160 + TRO T,3600 + TRNE T,10 + TRZ T,200 + JRST TTY1 + + +TEXIN: PUSHJ P,TIN ;INPUT SUBROUTINE FOR TEXT MODES + TRNN T,140 + JRST TOUT ;ECHO CHARACTERS (0-37) NOT ECHOED + POPJ P, +> + IFE EDDT&1,< ;USER MODE TELETYPE I/O + + +TIN: MOVE T,POUTBF ;GET NEXT CHARACTER ROUTINE + CAME T,[POINT 7,INBFF] + PUSHJ P,FINOUT + ILDB T,PINBFF + CAIN T,175 + MOVEI T,33 ;CHANGE TO NEW ALT MODE + CAIN T,177 ;RUBOUT? + JRST WRONG ;YES PRINT XXX + JUMPN T,CPOPJ + MOVE T,[POINT 7,INBFF] + MOVEM T,PINBFF + CALL T,[SIXBIT /DDTIN/] + JRST TIN + +TOUT: JUMPE T,CPOPJ ;OUT PUT A CHARACTER FLUSH NULLS + IDPB T,POUTBF + CAIE T,12 + POPJ P, +FINOUT: MOVEI T,0 + IDPB T,POUTBF + MOVE T,[POINT 7,INBFF] + MOVEM T,PINBFF + MOVEM T,POUTBF + CALL T,[SIXBIT /DDTOUT/] + CLEARM INBFF + POPJ P, + +PINBFF: POINT 7,INBFF +POUTBF: POINT 7,INBFF + +LISTEN=CPOPJ +INBFF: BLOCK 21 + +TTYRET: CALL [SIXBIT /DDTGT/] + MOVE T,[POINT 7,INBFF] + MOVEM T,POUTBF + MOVEM T,PINBFF + CLEARM INBFF + POPJ P, + +TTYLEV: PUSHJ P,FINOUT + CALL [SIXBIT /DDTRL/] + POPJ P, + +TEXIN=TIN ;USE NORMAL INPUT FOR TEXT WHEN IN USER MODE +> + +BDISP: POINT 12,DISP(R),11 + POINT 12,DISP(R),23 + POINT 12,DISP(R),35 + +DISP: +DEFINE D (Z1,Z2,Z3)<XLIST + EXP <Z1-DDT>*1B11+<Z2-DDT>*1B23+Z3-DDT + LIST> + +IFE EDDT&1&<EDDT>B36,< PUNCH=ERR + BLKEND=ERR + LOADER=ERR + VERIFY=ERR + CORE=ERR> + + + +D ERR,ERR,ERR +D ERR,ERR,ERR +D ERR,ERR,VARRW +D TAB,LINEF,ERR +D ERR,CARR,ERR +D ERR,ERR,ERR +D PUNCH,ERR,ERR +D ERR,ERR,ERR +D ERR,ERR,ERR +D CONTROL,ERR,ERR +D ERR,ERR,SPACE +D SUPTYO,TEXI,ASSEM +D DOLLAR,PERC,ERR +D DIVD,LPRN,RPRN +D MULT,PLUS,ACCF +D MINUS,PERIOD,SLASH +D NUM,NUM,NUM +D NUM,NUM,NUM +D NUM,NUM,NUM +D NUM,TAG,SEMIC +D FIRARG,EQUAL,ULIM +D QUESTN,INDIRECT,ABSA +D BPS,CON,SYMD +D EFFEC,SFLOT,GO +D HWRDS,PILOC,BLKEND +D KILL,LOADER,MASK +D NWORD,BITO,PROCEDE +D QUAN,RELA,SYMBOL +D TEXO,ERR,VERIFY +D WORD,XEC,CORE +D ZERO,OCON,ICON +D OSYM,VARRW,PSYM + +REPEAT 11,<D ERR,ERR,ERR> + +D ERR,ERR,ERR +D ERR,WRONG,DDT + +IFIX: MOVE R,@SYMP ;DIDDLE SYMBOL TABLE POINTERS + HRRZM R,ESTU + HLRZ T,@SYMP + SUB T,@SYMP + ADDI T,NSYMS + MOVNS T + HRRM T, KILC + MOVE T, KILC + MOVEM T, PRGM + JRST DDT + +BITO: MOVEI R,BITT ;BYTE OUTPUT SUBROUTINE + HRRZI AR,TOC + TRZN F,Q2F + JRST ERR + MOVE T,WRD2 + MOVEM T,SVBTS + MOVEI T,^D36 + IDIV T,WRD2 + SKIPE T+1 + ADDI T,1 + MOVEM T,SVBTS2 + HRRZ SCH,R + JRST BASE1 +BITT: MOVE T,SVBTS2 + MOVEM T,SVBT2 + MOVE T+1,LWT + MOVEM T+1,SVBT3 +BITT2: MOVEI T,0 + MOVE T+2,SVBTS + LSHC T,(T+2) + MOVEM T,LWT + MOVEM T+1,SVBT3 + CAIE AR,PADSO + PUSHJ P,FTOC + CAIE AR,TOC + PUSHJ P,PIN + SOSG SVBT2 + POPJ P, + MOVEI T,"," + PUSHJ P,TOUT + MOVE T+1,SVBT3 + JRST BITT2 +SVBTS: 0 +SVBTS2: 0 +SVBT3: 0 +SVBT2: 0 + +;DESCRIPTION OF OP DECODER FOR DDT: +; +; THE ENTIRE INSTRUCTION SET FOR THE PDP-6 CAN BE COMPACTED INTO +;A SPACE MUCH SMALLER THAN ONE REGISTER FOR EVERY SYMBOL. THIS OCCURS +;BECAUSE OF THE MACHINE ORGANIZATION AND INSTRUCTION MNEMONICS CHOSEN +;FOR THE PDP-6. FOR EXAMPLE, IF BITS (0-2) OF AN INSTRUCTION EQUAL +;101(2) THE INSTRUCTION IS A HALF WORD INSTRUCTION AND AN "H" MAY +;BE ASSUMED. "T" MAY BE ASSUMED FOR ALL TEST INSTRUCTIONS (WHICH +;BEGIN WITH 110(2). +; +; THE TABLE TBL IN DDT CONSISTS OF 9 BIT BYTES, 4 TO A WORD. +;THE NUMBERS IN THE BYTES HAVE THE FOLLOWING SIGNIFICANCE: +;0-37(8): THIS IS A DISPATCH COMMAND FOR THE OP-DECODER INTERPRETER. +; LET THE RIGHT MOST TWO BITS EQUAL N; LET THE NEXT 3 BITS +; EQUAL P. +; +; THE CONTENTS OF INST (INSTRUCTION) CONTAIN IN THE RIGHT +; MOST NINE BITS THE BINARY FOR THE MACHINE INSTRUCTION. +; P AND N REFER TO THE CONTENTS OF INST, AND THE OP DECODER +; WILL PRODUCE AN ANSWER D GIVEN P, N, AND THE CONTENTS +; OF INSTX N+1 GIVES THE NUMBER OF BITS IN INST; P GIVES THE +; POSITION (FROM THE RIGHT EDGE) OF THE N+1 BITS. +; +; EXAMPLE: P = 6 +; N = 2 +; +;; C(INST) = .010 101 100(2) +; +; THE RESULT- D = 010(2) = 2(8) +; +; D IS USED AS A DISPATCH ON THE NEXT BYTES IN THE TABLE. +; IF D = 5, 5 BYTES IN THE TABLE (DON'T COUNT THE BYTES WHICH +; PRINT TEXT, 41-72(8)) ARE SKIPPED OVER AND THE 6TH BYTE RESUMES +; THE INTERPRETATION. +; +;40(8) THIS IS A STOP CODE; WHEN THIS IS REACHED INTERPRETATION +; IS FINISHED. + +;41(8)-72(8) THE ALPHABET IS ENCODED INTO THIS RANGE. +; 41- A +; 42- B +; 72- Z +; WHEN A BYTE IN THIS RANGE IS REACHED, ITS CORRESPONDING +; LETTER IS TYPED. +; +;73(8)-777(8) THIS IS A TRANSFER BYTE. IF THE BYTE IN THIS RANGE IS +; CONSIDERED TO BE A, TRANSFER INTERPRETATION TO THE A-73(8)RD +; BYTE IN THE TABLE. +; +;MAROS ASSEMBLE THE TABLE TBL: +; 1. A NUMBER FOLLOWED BY ^ ASSEMBLES A DISPATCH BYTE. THE FIRST +; DIGIT IS THE POSITION; THE SECOND DIGIT IS THE SIZE. +; 2. A POINT (.) ASSEMBLES A STOP CODE. +; 3. A NAME FOLLOWED BY A SLASH ASSEMBLES A TRANSFER TO THE +; SYMBOLICALLY NAMED BYTE. +; 4. A STRING OF LETTERS TERMINATED BY A SPACE, COMMA, OR POINT, +; ASSEMBLE INTO A STRING OF BYTES, EACH BYTE BEING ONE LETTER. +; +;EXAMPLE OF BINARY TO SYMBOLIC DECODING: +; THE MACHINE CODE FOR JRST IAS 254 +; INST 0 1 0 1 0 1 1 0 0 +; THE INTERPRETER STARTS WITH THE FIRST BYTE IN THE TABLE (63^). +; THE RESULT OF APPLYING THIS TO C(INST) GIVES 2. SKIPPING OVER +; 2 BYTES IN THE TABLE AND INTERPRETING THE THIRD RESULTS IN +; HAK/ BEING INTERPRETED. AT HAK:, THERE IS A 33^. APPLYING +; THIS TO C(INST) RESULTS IN 5 NON PRINTING BYTES BEING SKIPPED +; OVER: +; 1. MV/ +; MOV PRINTING TEXT +; 2. MO/ +; 3. ML/ +; 4. DV/ +; 5. SH/ +; +;H1/ IS THE NEXT BYTE INTERPRETER. AT H1: 03^ IS FOUND SO +;4 BYTES ARE SKIPPED OVER: +; EXC PRINTING TEXT +; 1. S3/ +; BL PRINTING TEXT +; T PRINTING TEXT +; 2. . +; 3. AO/ +; 4. AOB/ +; THE NEXT LETTERS JRS ARE TYPED OUT. THEN T/ IS FOUND. AT +;T; A T IS TYPED OUT; THEN A "." IS FOUND AND EVERYTHING STOPS. +; +; THE TABLE IS ALSO USED GOING FROM SYMBOLIC TO BINARY BUT A + REPEAT 0,< + +DEFINE REDEF (XX)< +DEFINE INFO (AA,BB)< +AA XX'BB>> + + +DEFINE BYT9 (L)< +XLIST +REDEF % + ZZ=0 + ZZZ=0 + ZZM=1 + + IRPC L,< + Z="L" + IFE Z-":",<INFO <>,<=CLOC> + IFNDEF FIR.,<FIR.=CLOC> + IFGE CLOC+73-1000-FIR.,<PRINTX OPTABLE TOO LONG> + Z=0> + IFE Z-"/",<IF1 <OUTP 1> + IF2,<INFO OUTP,+73-FIR.> + Z=0> + IFE Z-"^",<OUTP <ZZ&70/2+ZZ&7-1> + Z=0> + IFE <Z-",">*<Z-".">*<Z-40>,<IFN ZZZ,< + REPEAT 5,<ZZ=ZZZ&77 + IFN ZZ,<OUTP ZZ> + ZZZ=ZZZ/100>> + IFE Z-".",<OUTP 40> + Z=0> + IFN Z,<INFO REDEF,L + ZZ=ZZ*10+Z&7 + ZZZ=ZZZ+<Z-40>*ZZM + ZZM=ZZM*100> + IFE Z,<REDEF % + ZZ=0 + ZZZ=0 + ZZM=1>> +LIST> + +DEFINE OUTP (A)< + BINRY=BINRY*400+BINRY*400+A + BINC=BINC-1 + IFE BINC,<EXP BINRY + BINRY=0 + BINC=4> + CLOC=CLOC+1> + + + +TBL: ;OPDECODER BYTE TABLE + +BINRY=0 +CLOC=0 ;SET BYTE LOCATION COUNTER TO 0 +BINC=4 ;INIT BYTES/WORD COUNTER + +BYT9 <63^UUO/FLO/HAK/ACCP/BOOLE/H HWT/T ACBM/> + +;IO INSTRUCTIONS +BYT9 <21^BD/CON,11^OI/S,01^Z/O/> +BYT9 <BD:01^BLK,IO/DATA,IO:11^I/O/OI:01^O/I/> + +;UUOS +BYT9 <UUO:51^.,32^U40/U50/U60/21^U703/11^USET/01^> +BYT9 <LOOKU,P/ENTE,R/USET:USET,01^I/O/> +BYT9 <U40:03^U47/INI T/.....,U47:CALL,01^.,I/> +BYT9 <U60:21^U603/01^IN,BPUT/OUT,BPUT:11^BU,F:F.,PU,T/> +BYT9 <U603:01^U6062/STAT,11^O:O.,Z:Z.,U6062:11^S,U62/G,U62:ETST,S/> +;BYTE AND FLOATING INSTRUCTIONS + +BYT9 <FLO:51^BYTE/F 32^ AD A/SB A/MP A/DV A:> +BYT9 <21^LMB/R,IMB/LMB:02^.,L:L.,M:M.,B:B.,BYTE:32^...,03^UF,PA/DF,N/> +BYT9 <FS C/IB P:P.,I LD/LD:LD B/I DP/DP:DP B/> + +;FWT,FIXED POINT ARITH,MISC. + +BYT9 <HAK:33^MV/MV:MOV MO/ML/DV/SH/H1/JP/> +BYT9 <21^ADD IMB/SU BIMB:B IMB:02^.,I:I.,M/B/MO:22^> +BYT9 <EIMS:E IMS/S IMS/N IMS/M IMS:02^.,I/M/S:S.,> +BYT9 <ML:21^I ML1/ML1:MUL IMB/DV:21^I DV1/DV1:> +BYT9 <DI DV2:V IMB/H1:03^EXC S3/BL T:T.,AO/AO:AOBJ,> +BYT9 <AOB/JRS T/JFC L/XC T/CON S/AOB:01^P/N/> +BYT9 <JP:03^PU/PU:PUSH PUS/PO/PO:POP POP/JS,R:R.,> +BYT9 <JS P/JS PA:A.,JR PA/PUS:01^J:J..,POP:> +BYT9 <01^.,J/SH:02^A S2/ROT S1/L S2:S S3:H S1/.,S1:21^.,C:C.,> + +;ARITH COMP,SKIP,JUMP + +BYT9 <ACCP:42^CA CA1/SJ/A JS/S JS:O 31^> +BYT9 <J COMP/S COMP/CA1:31^I COMP/M COMP/> +BYT9 <SJ:31^JUM PSJ/SKI PSJ:P COMP:> +BYT9 <03^.,L/E:E.,L E/PA/G E/N:N.,G.,> + + +;HALF WORDS + +BYT9 <HWT:51^HW1/21^R HW2/L HW2:R HW3/HW1:> +BYT9 <21^L HW4/R HW4:L HW3:32^IMS/Z IMS/O IMS/EIMS/> + +;TEST INSTRUCTIONS + +BYT9 <ACBM:31^AC1/01^D AC2/S AC2/AC1:01^R AC2/L,> +BYT9 <AC2:42^N EAN/Z EAN/C EAN/O EAN:12^.,E/PA/N/> + + +;BOOLEAN + +BYT9 <BOOLE:24^ST/AN:AND B2/AN/ST/AN/ST/> +BYT9 <X OR:OR B2/I OR/AN/EQ DV2/ST/OR/ST/OR/OR/> +BYT9 <ST:SET B2:24^Z IMB/IMB/CA:C TA/TM:M IMB/> +BYT9 <CM:C TM/TA:A IMB/IMB/IMB/CB:C BIMB/IMB/CA/> +BYT9 <CA/CM/CM/CB/O IMB/> + +;MORE UUO'S +BYT9 <U50:03^OPE,N/....,RENAM,E/I,N/OU,T/> +BYT9 <U703:02^CLOS,E/RELEA,S/MTAP,E/UGET,F/> + +REPEAT BINC,<BINRY=BINRY*400+BINRY*400> +IFN BINRY,<EXP BINRY>> + + + + SUBTTL OP DECODER + +IF1, +< + +DEFINE .COLON (A) < +%'A== CLOC +FIR.== CLOC +DEFINE .COLON (AA) < +%'AA== CLOC +IFGE CLOC+73-1000-FIR., <PRINTX OPTABLE TOO LONG>>> + +DEFINE .SLASH < +CLOC= CLOC+1 ;> + +SYN .SLASH, .ARROW + +DEFINE .COMMA (A) < +IFNB <A>, <.REP5 A>> + +SYN .COMMA, .SPACE + +DEFINE .POINT (A) < +IFNB <A>, <.REP5 A> +CLOC= CLOC+1> + +DEFINE .REP5 (A) < +IRPC A, <CLOC==CLOC+1>> + +> + IF2, +< + +DEFINE .SLASH (A) < +OUTP %'A+73-FIR.> + +DEFINE .ARROW (A) < +OUTP A&70/2+A&7-1> + +DEFINE .COMMA (A) < +IFNB <A>, <.REP5 A>> + +SYN .COMMA, .SPACE + +DEFINE .POINT (A) < +IFNB <A>, <.REP5 A> +OUTP 40> + +DEFINE .REP5 (A) < +IRPC A, <OUTP "A"-40>> + +DEFINE OUTP (A)< +BINRY== BINRY+<A>_<BINC==BINC-9> +IFE BINC, < + +BINRY +BINRY==0 +BINC==^D36> +CLOC==CLOC+1> + +> + TBL: ;OPDECODER BYTE TABLE + +BINRY== 0 +CLOC== 0 ;SET BYTE LOCATION COUNTER TO 0 +BINC== ^D36 ;INIT BYTES/WORD COUNTER + +.ARROW 63 +.SLASH UUO +.SLASH FLO +.SLASH HAK +.SLASH ACCP +.SLASH BOOLE +.SPACE H +.SLASH HWT +.SPACE T +.SLASH ACBM + + +;IO INSTRUCTIONS + +.ARROW 21 +.SLASH BD +.COMMA CON +.ARROW 11 +.SLASH OI +.COMMA S +.ARROW 01 +.SLASH Z +.SLASH O + +.COLON BD +.ARROW 01 +.COMMA BLK +.SLASH IO +.COMMA DATA +.COLON IO +.ARROW 11 +.SLASH I +.SLASH O +.COLON OI +.ARROW 01 +.SLASH O +.SLASH I + ;UUOS + +.COLON UUO +.ARROW 51 +.POINT +.COMMA +.ARROW 32 +.SLASH U40 +.SLASH U50 +.SLASH U60 +.ARROW 21 +.SLASH U703 +.ARROW 11 +.SLASH USET +.ARROW 01 + +.COMMA LOOKU +.SLASH P +.COMMA ENTE +.SLASH R +.COLON USET +.COMMA USET +.ARROW 01 +.SLASH I +.SLASH O + +.COLON U40 +.ARROW 03 +.SLASH U47 +.SPACE INI +.SLASH T +.POINT +.POINT +.POINT +.POINT +.POINT +.COMMA +.COLON U47 +.COMMA CALL +.ARROW 01 +.POINT +.COMMA +.SLASH I + +.COLON U60 +.ARROW 21 +.SLASH U603 +.ARROW 01 +.COMMA IN +.SLASH BPUT +.COMMA OUT +.COLON BPUT +.ARROW 11 +.COMMA BU +.COLON F +.POINT F +.COMMA +.COMMA PU +.SLASH T + +.COLON U603 +.ARROW 01 +.SLASH U6062 +.COMMA STAT +.ARROW 11 +.COLON O +.POINT O +.COMMA +.COLON Z +.POINT Z +.COMMA +.COLON U6062 +.ARROW 11 +.COMMA S +.SLASH U62 +.COMMA G +.COLON U62 +.COMMA ETST +.SLASH S + ;BYTE AND FLOATING INSTRUCTIONS + +.COLON FLO +.ARROW 51 +.SLASH BYTE +.SPACE F +.ARROW 32 +.SPACE +.SPACE AD +.SLASH A +.SPACE SB +.SLASH A +.SPACE MP +.SLASH A +.SPACE DV +.COLON A +.ARROW 21 +.SLASH LMB +.COMMA R +.SLASH IMB +.COLON LMB +.ARROW 02 +.POINT +.COMMA +.COLON L +.POINT L +.COMMA +.COLON M +.POINT M +.COMMA +.COLON B +.POINT B +.COMMA +.COLON BYTE +.ARROW 32 +.POINT +.POINT +.POINT +.COMMA +.ARROW 03 +.COMMA UF +.SLASH PA +.COMMA DF +.SLASH N + +.SPACE FS +.SLASH C +.SPACE IB +.COLON P +.POINT P +.COMMA +.SPACE I +.SLASH LD +.COLON LD +.SPACE LD +.SLASH B +.SPACE I +.SLASH DP +.COLON DP +.SPACE DP +.SLASH B + ;FWT,FIXED POINT ARITH,MISC + +.COLON HAK +.ARROW 33 +.SLASH MV +.COLON MV +.SPACE MOV +.SLASH MO +.SLASH ML +.SLASH DV +.SLASH SH +.SLASH H1 +.SLASH JP + +.ARROW 21 +.SPACE ADD +.SLASH IMB +.SPACE SU +.COLON BIMB +.SPACE B +.COLON IMB +.ARROW 02 +.POINT +.COMMA +.COLON I +.POINT I +.COMMA +.SLASH M +.SLASH B +.COLON MO +.ARROW 22 + +.COLON EIMS +.SPACE E +.SLASH IMS +.SPACE S +.SLASH IMS +.SPACE N +.SLASH IMS +.SPACE M +.COLON IMS +.ARROW 02 +.POINT +.COMMA +.SLASH I +.SLASH M +.COLON S +.POINT S +.COMMA + +.COLON ML +.ARROW 21 +.SPACE I +.SLASH ML1 +.COLON ML1 +.SPACE MUL +.SLASH IMB +.COLON DV +.ARROW 21 +.SPACE I +.SLASH DV1 +.COLON DV1 +.SPACE DI +.COLON DV2 +.SPACE V +.SLASH IMB +.COLON H1 +.ARROW 03 +.SPACE EXC +.SLASH S3 +.SPACE BL +.COLON T +.POINT T +.COMMA +.SLASH AO +.COLON AO +.COMMA AOBJ +.SLASH AOB +.SPACE JRS +.SLASH T +.SPACE JFC +.SLASH L +.SPACE XC +.SLASH T +.SPACE CON +.SLASH S +.COLON AOB +.ARROW 01 +.SLASH P +.SLASH N + +.COLON JP +.ARROW 03 +.SLASH PU +.COLON PU +.SPACE PUSH +.SLASH PUS +.SLASH PO +.COLON PO +.SPACE POP +.SLASH POP +.COMMA JS +.COLON R +.POINT R +.COMMA + +.SPACE JS +.SLASH P +.SPACE JS +.COLON PA +.POINT A +.COMMA +.SPACE JR +.SLASH PA +.COLON PUS +.ARROW 01 +.COLON J +.POINT J +.POINT +.COMMA +.COLON POP +.ARROW 01 +.POINT +.COMMA +.SLASH J +.COLON SH +.ARROW 02 +.SPACE A +.SLASH S2 +.SPACE ROT +.SLASH S1 +.SPACE L +.COLON S2 +.SPACE S +.COLON S3 +.SPACE H +.SLASH S1 +.POINT +.COMMA +.COLON S1 +.ARROW 21 +.POINT +.COMMA +.COLON C +.POINT C +.COMMA + ;ARITH COMP,SKIP,JUMP + +.COLON ACCP +.ARROW 42 +.SPACE CA +.SLASH CA1 +.SLASH SJ +.SPACE A +.SLASH JS +.SPACE S +.COLON JS +.SPACE O +.ARROW 31 + +.SPACE J +.SLASH COMP +.SPACE S +.SLASH COMP +.COLON CA1 +.ARROW 31 +.SPACE I +.SLASH COMP +.SPACE M +.SLASH COMP + +.COLON SJ +.ARROW 31 +.SPACE JUM +.SLASH PSJ +.SPACE SKI +.COLON PSJ +.SPACE P +.COLON COMP +.ARROW 03 +.POINT +.COMMA +.SLASH L +.COLON E +.POINT E +.COMMA +.SPACE L +.SLASH E +.SLASH PA +.SPACE G +.SLASH E +.COLON N +.POINT N +.COMMA +.POINT G +.COMMA + ;HALF WORDS + +.COLON HWT +.ARROW 51 +.SLASH HW1 +.ARROW 21 +.SPACE R +.SLASH HW2 +.SPACE L +.COLON HW2 +.SPACE R +.SLASH HW3 +.COLON HW1 +.ARROW 21 +.SPACE L +.SLASH HW4 +.SPACE R +.COLON HW4 +.SPACE L +.COLON HW3 +.ARROW 32 +.SLASH IMS +.SPACE Z +.SLASH IMS +.SPACE O +.SLASH IMS +.SLASH EIMS + ;TEST INSTRUCTIONS + +.COLON ACBM +.ARROW 31 +.SLASH AC1 +.ARROW 01 +.SPACE D +.SLASH AC2 +.SPACE S +.SLASH AC2 +.COLON AC1 +.ARROW 01 +.SPACE R +.SLASH AC2 +.COMMA L +.COLON AC2 +.ARROW 42 +.SPACE N +.SLASH EAN +.SPACE Z +.SLASH EAN +.SPACE C +.SLASH EAN +.SPACE O +.COLON EAN +.ARROW 12 +.POINT +.COMMA +.SLASH E +.SLASH PA +.SLASH N + ;BOOLEAN + +.COLON BOOLE +.ARROW 24 +.SLASH ST +.COLON AN +.SPACE AND +.SLASH B2 +.SLASH AN +.SLASH ST +.SLASH AN +.SLASH ST + +.SPACE X +.COLON OR +.SPACE OR +.SLASH B2 +.SPACE I +.SLASH OR +.SLASH AN +.SPACE EQ +.SLASH DV2 +.SLASH ST +.SLASH OR +.SLASH ST +.SLASH OR +.SLASH OR + +.COLON ST +.SPACE SET +.COLON B2 +.ARROW 24 +.SPACE Z +.SLASH IMB +.SLASH IMB +.COLON CA +.SPACE C +.SLASH TA +.COLON TM +.SPACE M +.SLASH IMB + +.COLON CM +.SPACE C +.SLASH TM +.COLON TA +.SPACE A +.SLASH IMB +.SLASH IMB +.SLASH IMB +.COLON CB +.SPACE C +.SLASH BIMB +.SLASH IMB +.SLASH CA + +.SLASH CA +.SLASH CM +.SLASH CM +.SLASH CB +.SPACE O +.SLASH IMB + ;MORE UUO'S + +.COLON U50 +.ARROW 03 +.COMMA OPE +.SLASH N +.POINT +.POINT +.POINT +.POINT +.COMMA +.COMMA RENAM +.SLASH E +.COMMA I +.SLASH N +.COMMA OU +.SLASH T + +.COLON U703 +.ARROW 02 +.COMMA CLOS +.SLASH E +.COMMA RELEA +.SLASH S +.COMMA MTAP +.SLASH E +.COMMA UGET +.SLASH F + IF1, +< + BLOCK <CLOC+3>/4 +> + +IF2, +< +IFN BINC-^D36, +< + +BINRY +> +> + + + +IFNDEF CLOC.,<CLOC.=CLOC> +IFN CLOC.-CLOC,<PRINTX PHASE ERROR IN OPTABLE> + +PNTR: EXP INST ;POINTER TO BITS IN INST +INST: 0 ;BINARY FOR INSTRUCTION +CHP: 0 ;CHAR POINTER INTO TXT, TXT+1 +TXT: BLOCK 2 ;STORE INPUT TEXT FOR OPEVAL +SAVPDL: 0 ;SAVE PUSH DOWN LIST POINTER + +BTAB: POINT 9,TBL ;TABLE USED TO GET NEXT BYTE POINTER + POINT 9,TBL,8 ;FOR TRANSFER BYTE + POINT 9,TBL,17 + POINT 9,TBL,26 + +OPEVAL: MOVE T,OPEV1 ;EVALUATE FOR AN OP CODE + MOVEI W1,SYM + MOVE R,[POINT 7,TXT] + PUSHJ P,SPT4 + MOVEI T,0 +OPEV1: IDPB T,R + MOVEM P,SAVPDL + TRZA F,OUTF +OPTYPE: TRO F,OUTF ;TYPE AN OPCODE SYMBOLICALLY + LSH T,-33 + MOVEM T,INST ;GET OPCODE INTO RIGHT 9 BITS + MOVE T,[XWD 440700,TXT] + MOVEM T,CHP ;FOR OPEVAL,SETUP POINTER TO INPUT TEXT +DEC: TRZ F,ITF ;CLEAR INSTRUCTION TYPED FLAG + CLEARB R,W1 + MOVE W2,BTAB +DC1: ILDB T,W2 ;GET NEXT BYTE IN TBL + CAILE T,40 + CAIL T,73 + SOJGE R,DC1 ;SKIP OVER # BYTES = C(R) + JUMPG R,DC1 ;SKIP OVER ALPHA TEXT WITHOUT COUNTING + SUBI T,40 + JUMPE T,DECX ;TRANSFER ON ASTOP CODE + JUMPG T,DC2 + DPB T,[XWD 340500,PNTR] ;SETUP R ON A DISPATCH BYTE + TRZ T,-4 + AOS T + DPB T,[XWD 300600,PNTR] + TRNN F,OUTF + JRST DC6 ;FOR OPEVAL ONLY + LDB R,PNTR ;GET # BYTES TO SKIP OVER + JRST DC1 + +DC2: HRREI T,-33(T) + JUMPL T,DECT ;TYPE OUT A LETTER + MOVEI W1,FIR.(T) ;BYTE IS A TRANSFER + IDIVI W1,4 + MOVE W2,BTAB(W2) ;CALCULATE POINTER TO NEXT BYTE + ADDI W2,(W1) + JRST DC1 + + +DECT: TRNE F,OUTF + JRST DC8 ;TYPE OUT A LETTER + ILDB W1,CHP ;GET NEXT INPUT LETTER + CAIE W1,133(T) ;COMPARE WITH ASSUMED NEXT LETTER + JRST NOMAT ;DOESNT MATCH + JRST DC1 ;MATCHES, TRY NEXT + +DECX: TRNE F,OUTF ;STOP (CODE 40) HAS BEEN SEEN + POPJ P, ;IF FOR OUTPUT, RETURN + ILDB W1,CHP ;GET NEXT INPUT CHAR IF ANY + JUMPE W1,DC7 ;DOES # OF CHARS MATCH +NOMAT: POP P,R ;NO, BACK UP AND TRY SOME MORE + POP P,W2 + POP P,PNTR + POP P,CHP +NOMAT1: AOS R ;ASSUME NEXT NUMBER FOR BIN VALUE + DPB R,PNTR ;STUFF INTO ANSWER + LDB R,PNTR + JUMPN R,DC6AA ;IF =0, BYTE WAS TOO BIG + CAME P,SAVPDL + JRST NOMAT ;NOT AT TOP LEVEL + JRST UNDEF ;UNDEFINED, FINALLY + +DC6: MOVEI R,0 ;ASSUME 0 FOR INITIAL BINARY VALUE + DPB R,PNTR +DC6AA: CAMN P,SAVPDL + JRST DC6BB + LDB T,-2(P) ;OLD VALUE OF PNTR + CAME T,(P) + JRST NOMAT1 +DC6BB: PUSH P,CHP + PUSH P,PNTR + PUSH P,W2 + PUSH P,R + JRST DC1 + +DC7: MOVE P,SAVPDL ;RESTORE PUSH DOWN POINTER + MOVE T,INST + LSH T,33 ;PUSH BINARY INTO POSITION FOR OPEVAL + LDB R,[POINT 3,T,8] + TLC T,700000 + TLCN T,700000 + DPB R,[POINT 10,T,12] ;ONLY DONE FOR IO INSTRUCTIONS + JRST L4 + +DC8: TRO F,ITF ;SET INSTRUCTION TYPED FLAG + MOVEI T,133(T) + PUSHJ P,TOUT ;OUTPUT A LETTER + CLEARM SPSAV ;SO $D WONT TRY TO DELETE OP CODES + JRST DC1 + LIT + + +IFN EDDT&1&<EDDT>B36,<BUFF: BLOCK 40> + +PS: BLOCK LPDL + +DDTEND=. + +END + diff --git a/src/editor.mac b/src/editor.mac new file mode 100644 index 0000000..788d26b --- /dev/null +++ b/src/editor.mac @@ -0,0 +1,702 @@ + TITLE EDITOR V.003 1 APRIL 1968 +SUBTTL DECEDIT PARAMETERS + +DEFINE ERR (A) < JSR A,ERRORX> +DEFINE TSTRIN (A) < EXP "A"+"A"+1> + +S0=1 +S1=2 +S2=4 +S3=10 +S4=40 +S5=20 +S6=100 +S7=200 +S8=400 +PDP=3 +FL=4 +INDEX=11 +WC=12 +C=13 +COTP=14 +IPT=5 +TPT=6 +P=10 +SINDEX=15 +CINDEX=16 +LAST=17 +TYP=2 +DT=3 +OPDEF EXIT [POPJ PDP,] +OPDEF CAL [PUSHJ PDP,] +OPDEF SAVE [PUSH PDP,] +OPDEF UNSAVE [POP PDP,] +EXTERNAL JOBFF + SUBTTL DECTAPE IO - AUGUST 25, 1965 + +FOPEN=1000 +AC1=1 +AC2=2 +AC3=5 +AC4=6 + +FILLB: TLNN FL,1; IS BUFFER LOADED + JRST FILLB1; NO, SO LOAD IT + MOVE C,WBC; GET BUFFER COUNT + CAIG C,177; IS IT GETTIN FULL +ATSALL: EXIT; NO + TRZ FL,S8; SET FIRST BLOCK FLAG TO FALSE + TRO FL,S3; AND MODIFIED FLAG TO TRUE + MOVEI AC2,WB; GET WORKING BUFFER ADDRESS + MOVEI AC3,1; SEQUENCE NUMBER TEST + ADDI AC2,125; DUMP ABOUT 2/3 OF BUFFER + TDNN AC3,0(AC2); BUT NOT A FRACTIONAL LINE + SOJA AC2,.-1; HUNT FOR BEGIN OF LINE + HRRZ P,THSBLK; UPDATE PREVIOUS BLOCK NUMBER + UGETF DT,IAMTEM; NEXT FREE BLOCK + USETO DT,0(P); PREPARE TO DUMP THIS BLOCK + MOVE P,IAMTEM; AND PREPARE NEXT BLOCK + MOVE AC3,DTOBUF; SET UP BLT + HRLZM P,1(AC3); LINK TO NEXT DECTAPE BLOCK + HRLI AC3,WB; SOURCE + ADDI AC3,2; +2 + MOVE AC1,AC2; LAST + SUBI AC1,WB; AND MAKE A COUNT OF IT + SUB C,AC1; TOTAL REMAINING WORDS + MOVEM C,WBC; SET NEW COUNT + ADDI AC1,-1(AC3); SETUP FOR BLT + CAL DUMX; TRANSFER AND DUMP BLOCK + MOVEI AC3,WB; GET DEST FOR MOVE UP + HRL AC3,AC2; AND SOURCE + MOVE AC1,AC3; GENERATE LAST ADDRESS + ADDI AC1,(C); FROM COUNT + BLT AC3,(AC1); ON TOAST + EXCH P,THSBLK; SET NEW BLOCK + JRST FILLB; GO AGAIN + +FILLB1: TLNN FL,FOPEN; IS A FILE OPEN + ERR 7; NO, SO *NFO* + TLO FL,1; SET TO FILLED BUFFER + JRST GETF; AND GET THE FIRST BLOCK + GET: TRNE FL,S0; FORWARD OR REVERSE + JRST GETL; REVERSE + +GETN: TRNE FL,S5; IS THERE ANY MORE + EXIT; NO + HLRZ WBF; GET LINK + CAL DUMPB; OUTPUT BLOCK + MOVE P,THSBLK; SAVE PREVIOUS FLOCK NUMBER + TRZ FL,S8; SET FIRST BLOCK FLAG TO FALSE +GET0: HRRZM THSBLK; SAVE CURRENT BLOCK NUMBER + USETO DT,@THSBLK; SER OUTPUT FOR PRESENT BLOCK + +SLURP: INPUT DT,0; INPUT A NEW BLOCK + HLRZ WBF; GET LINK + SKIPN; WE DONT LIKE ZERO LINKS + TRO FL,S5; SO WE SET A FLAG TO REMIND US + HRRZ WBF; GET COUNT + MOVEM WBC; AND SAVE IT + TRNN FL,S5; WAS IT END OF FILE + SKIPE; EMPTY BLOCK + EXIT; END OF FILE OR NON-EMPTY BLOCK + HLRZ WBF; EMPTY BLOCK - GET LINK + TRNN FL,S0; DIRECTION CHECK + JRST GET0; FORWARD + +GETL: CAL DUMPB; REVERSE - GET LAST BLOCK-SAVE THIS ONE + JUMPN P,GETL1; IS LAST BLOCK AVAILABLE +GETF: HRRZ P,FBNUM; NO, SO GET FIRST ONE + TRZ FL,S0+S5; SET FORWARD AND END + TROA FL,S8; SET FIRST BLOCK AND SKIP +GETL1: TRZ FL,S5+S8; SET NON-END AND NON-FIRST + USETI DT,(P); ESTABLISH INPUT BLOCK NUMBER + USETO DT,(P); AND OUTPUT BLOCK NUMBER + MOVEM P,THSBLK; UPDATE CURRENT BLOCK NUMBER + SETZM P; AND ZERO PREVIOUS BLOCK NUMBER + JRST SLURP; AND INPUT THE BLOCK + DUMPB: CAL FILLB; SPLIT BLOCKS IF THE OVER-RUN + TRZN FL,S3; ANY MODS MADE + EXIT; NO + MOVE AC2,DTOBUF; POINTER TO BUFFERS + MOVEI AC3,2(AC2); FIRST WORD ADDRESS + HRLI AC3,WB; FIRST DATA WORD + HLRZ AC1,WBF; BLOCK NUMBER + SKIPN AC1; LAST BLOCK + SOS AC1; YES, SO EXTEND + HRLM AC1,1(AC2); INTO LINK + MOVEI AC1,1(AC2); PREPARE BLT + ADD AC1,WBC; SIZE OF BLT +DUMX: BLT AC3,(AC1); BLOCK UP SUBROUTINE + HRRM AC1,DTOBF1; LAST ADDRESS + OUTPUT DT,0; DUMP IT + STATO DT,740000; CHECK FOR DEVICE ERROR + EXIT; ALL IS GOOD + SETOM FL ; DDE ERROR + ERR 12; *DDE* + +FINISH: TLNE FL,FOPEN; IF A FILE IS OPEN + CAL DUMPB; DUMP IT +FINIS2: RELEAS DT,0; RELEASE THE TAPE + JRST INITIX; AND GO BACK TO SETUP + +THSBLK: 0; PRESENT BLOCK NUMBER +IAMTEM: 0; TEMPORARY + SUBTTL CONTROL - AUGUST 25, 1965 + ;MAIN LISTEN AND DISPATCH FOR EDITOR CONTROL MODE +OUTTER: CAL GETCHR; GET ONE CHARACTER + CAIN C,15; INITIAL CARRIAGE RETURNS + JRST OUTTER; ARE IGNORED + CAIN C,"I" + JRST INSE + CAIN C,"D" + JRST DELETE + CAIN C,"P" + JRST PRINT + CAIN C,"E" + JRST FINISH + CAIE C,33; ALTERNATE ALTMOD + CAIN C,175; THE REGULAR ALTMOD + JRST PNEXT + CAIN C,"S" + JRST DECINI + ERR 1; ILLEGAL COMMAND +;OUTPUT A CARRIAGE RETURN +CRT: MOVEI INDEX,CRM; PICK UP THE POINTER + JRST OTLINE; OUTPUT CRT-LF-* + +;ERROR PRINT +ERRORX: 0; CALLED BY JSR X,ERRORX + HRRZ INDEX,ERRORX; WHERE X IS THE ERROR NUMBER + LDB INDEX,EPT; EXTRACT THE X + MOVEI INDEX,ERT-1(INDEX) +ERROX1: MOVEI PDP,PDSTAK; INITIALIZE PUSHDOWN +ERROX2: CAL OTLINE; OUTPUT ERROR MESSAGE + JRST COMLEV; AND A CARRIAGE RETURN - EXIT +;ERROR MESSAGES ET.AL. THESE MUST NOT BE MOVED ABOUT +;SINCE THE PRINT ROUTINE DEPENDS ON THE BIT 35 OF THE +;NEXT MESSAGE TO TERMINATE THE PRESENT ONE + +CRM: OCT 64245200000; THE CARRIAGE RETURN-LINE FEED-* +ERT: TSTRIN <*ILC*>; ILLEGAL COMMAND + TSTRIN <*NLN*>; NON-EXISTENT LINE + TSTRIN <*ILS*>; ILLEGAL SEQUENCE + TSTRIN <*ILR*>; ILLEGAL REFERENCE + TSTRIN <*UNA*>; UNIT NOT AVAILABLE + TSTRIN <*DCE*>; DIRECTORY CAPACITY EXCEEDED + TSTRIN <*NFO*>; NO FILE OPEN + TSTRIN <*FAU*>; FILE NAME ALREADY IN USE + TSTRIN <*NCF*>; NOT A CURRENT FILE + TSTRIN <*DDE*>; DEVICE DATA ERROR +EPT: POINT 4,-1(INDEX),12; THE ERROR PRINT DEPENDS + ;ON THE 1 IN BIT 35 HERE +;COMMUNICATIONS + SUBTTL EDITOR - AUGUST 25, 1965 + +;INSERT LINE(S) +INSE: CAL GETSEQ; GET THE SEQUENCE NUMBER AND STEP + MOVEM CINDEX; THIS INSTR SKIPED IF ONLY ONE ARG + JRST INSE3; PROCESS IT +INSE2: CAL FIND; TOP OF THE LOOP - SEARCH FOR THE LINE + CAMN SINDEX,(INDEX); EXACT MATCH? + ERR 4; YES, *ILR* + CAL BACK1; BACKUP TO LAST LINE + CAME LAST; IS IT INDEED THE LAST ONE WE PUT IN + ERR 3; NO, *ILS* +INSE3: CAL FIND; GET THE LINE + CAL OTSEQ; OUTPUT THE SEQUENCE NUMBER + CAL GETLIN; GET THE INPUT LINE + JRST OUTTER; ALT MODE + CAL INSED; INSERT AND DELETE + MOVEM SINDEX,LAST; SAVE AWAY THIS LINE NUMBER + MOVEM SINDEX,FIRST + CAL ASCIA; STEP SEQUENCE + JRST INSE2; LOOP BACK FOR NEXT LINE + +INSED: HRRZ COTP; GET THE SIZE OF THE LINE + MOVEI 1,0; SETUP DIRECTION FLAG + CAML WC; IF LINE SIZE IS GREATER-EQUAL THAN NEW + MOVEI 1,1; SET FLAG TO 1 + CAME WC; IF OLD LINE IS NON-NULL + JRST INSEG; DELETE IT +INSE1: JUMPE WC,INSE16; NULL SIZE TO INPUT + HLRZ INDEX,COTP; GET LINE ADDRESS + ADD INDEX,WC; AND SIZE + HLRS COTP; AND COUNT + HRLI COTP,TTB; SET SOURCE + MOVE 1,COTP; READY FOR BLT + BLT COTP,-1(INDEX); MOVE IN THE NEW LINE + MOVE COTP,1; RESTORE COTP +INSE16: TRO FL,S3+S6; SET MOD FLAGS - GENERAL EXIT +CLEARE: MOVEI 1,WB; CLEAR LAST BUFFER WORD + ADD 1,WBC; END OF BUFFER + SETZM (1); SET TO ZERO + EXIT; GO AWAY + +;BACK UP LINE POINTER +BACK1: CAIE INDEX,WB; IS THIS THE FIRST LINE IN THE BUFFER + JRST BACK; NO, SO NORMAL PROCESS + TRO FL,S0; WE MUST GET THE PREVIOUS BLOCK + CAL GET; INPUT IT - THIS WILL ALWAYS WORK + ADD INDEX,WBC; LAST LINE + JRST BACK; NOW WE BACK IT UP + MOVE (INDEX); TOP OF LOOP - PICK UP DATA WORD + TRNN 1; BIT ONE MAKES IT A SEQUENCE N +BACK: SOJA INDEX,.-2; COUNT IT BACK + EXIT + INSEG: CAL CSIZE; COMPUTE SIZE OF XFER + JUMPE INSEX; ZERO SIZE XFER + JUMPN 1,INSER; FORWARD BLT + HRLS 0; REVERSE XFER + ADD INDEX,0; SET UP POINTER WORD + HRRZS 0; READY TO GO +INSER: MOVEM INDEX,C; PROTECT XFER WORD + BLT C,(INDEX); XFER ONE WORD + XCT ITAB(1); STEP UP OR DOWN + SOJGE INSER; IF NOT DONE, LOOP BACK +INSEX: HRRZ COTP; SETUP SIZE + SUB WC; OF NEW BLOCK + EXCH WBC; + SUBM WBC; NOW NEW BLOCK SIZE IS IN WBC + JRST INSE1; ALL DONE - GO BACK + +ITAB: SUB INDEX,K5; SHRINK + ADD INDEX,K5; GROW + +;THE ASCII ADDER + +ASCIA: SAVE CINDEX; PROTECT THE STEP + MOVE 7,SINDEX + AND CINDEX,K2; MASK OUT 60S + LSH CINDEX,1; + IOR SINDEX,K4; + ADD SINDEX,K1; + ADD CINDEX,SINDEX; EXCESS 166 ADDITION + AND CINDEX,K3; MASK OUT CARRY BITS + MOVE SINDEX,K4; + AND SINDEX,CINDEX; + ASH SINDEX,-3; GIVES 000 WHERE CARRY HAPPENED, 006 + SUBM CINDEX,SINDEX; CONVERT TO EXCESS 0 OR 60 + IOR SINDEX,K4; CONVERT TO EXCESS 60 + UNSAVE CINDEX; RESTORE THE STEP + CAML 7,SINDEX; IF 99999, DON'T GO TO 00009 + ERR 3 + EXIT; LEAVE + +K1: OCT 432150643214; 106 +K2: OCT 036170743617; 017 +K3: OCT 375767737576; 077 +K4: TSTRIN <00000> +K5: XWD 1,1; +,- ONE TO BOTH HALVES + FIND: CAL FILLB; FILL THE BUFFER +FIND1: TRZ FL,S0+S4; FORWARD SEARCH AND INITIAL SEARCH +FIND2: HRRZ WBC; GET THE BUFFER SIZE + JUMPE FINDA; EMPTY BLOCK + MOVEI INDEX,WB; GET THE DATA ADDRESS + MOVE WB; GET THE FIRST DATA WORD + CAMLE SINDEX; ARE WE PAST THE LINE + JRST FINDA; YES, REVERSE + CAMN SINDEX; EXACT MATCH + JRST FINDEQ; YES, BE HAPPY + ADD INDEX,WBC; FORM ADDRESS OF LAST DATA WORD + CAL BACK; FIND ITS SEQUENCE NUMBER + CAMLE SINDEX; IT THE LINE IN THIS BLOCK + JRST FIND3A; YES, INVESTIGATE FURTHER + CAMN SINDEX; EXACT MATCH + JRST FINDEQ; YES +FINDX: TRNE FL,S5; IS THIS LAST BLOCK + JRST FINDC; YES, SO EXIT WITH THIS ADDRESS + TRO FL,S4; SCANNING HAS STARTED + TRZ FL,S0; AND GO FORWARD + JRST FIND4; AWAY WE GO + +FINDA: MOVEI INDEX,0; SETUP FOR REVERSE + TRNN FL,S4; HAVE WE BEEN HERE BEFORE + TRNE FL,S8; OR IS IT THE FIRST BLOCK + JRST FINDR; YES, SO USE THIS ADDRESS + TRO FL,S0; OTHERWISE, GO BACK ONE BLOCK +FIND4: CAL GET; GET THE BLOCK + JRST FIND2; SEARCH FOR IT + +FINDC: HRRZ INDEX,WBC; TAIL OF BLOCK IF ENTERED HERE +FINDR: ADDI INDEX,WB; HEAD OF BLOCK IF ENTERED HERE + JRST FIND3; AND RETURN + +FIND3A: MOVEI INDEX,WBC; WE WISH TO SCAN THIS BLOCK FOR + CAL FINDES; THIS LINE - COMPUTE LINE SIZE + CAMN SINDEX; EXACT MATCH + JRST FINDEQ; YES, WELL, GOOD + CAMG SINDEX; HAVE WE PASSED IT + AOJA INDEX,FIND3A+1; NO, SO CONTINUE +FIND3: HRLZ COTP,INDEX; RETURN THE ADDRESS OF THE LINE + JRST CLEARE; EXIT + +FINDEQ: HRLZ COTP,INDEX; FOUND THE DESIRED LINE + CAL FINDES; COMPUTE ITS SIZE + HLRZ INDEX,COTP; SET UP INDEX + JRST CLEARE; AND EXIT + FINDES: AOS COTP; FIND SIZE OF LINE + MOVE 1(INDEX); FIND NEXT SEQUENCE NUMBER + AOS INDEX; + TRNN 1; SEQUENCE NUMBER? + JUMPN FINDES; NO, BUT ZERO ALSO DENOTES END + EXIT; DONE + +CSIZE: HRRZ COTP; COMPUTE SIZE OF TRANSFER + HLRZ INDEX,COTP; SIZE OF THIS LINE + ADD INDEX; AND THIS LOCATION + ADD INDEX,WC; PLUS THE NEW LINE SIZE + HRL INDEX,0; IN LEFT HALF IS OLD SIZE + SUBI WB; AND TURN IT INTO A COUNT + HRRZ C,WBC; FOR A SUBTRACT + SUBM C,0; AND NOW ZERO HAS THE XFER SIZE + EXIT; + + +DELETE: CAL GE2SEQ; GET THE RANGE TO BE EXCISED +DELOOP: HRRZ INDEX,WBC; GET THE WORD COUNT + ADDI INDEX,WB; FORM THE END ADDRESS + CAL BACK; GET THE LAST SEQUENCE IN THE BLOCK + CAMN LAST; IS THE LAST LINE THE END OF THE RANGE + JRST DEQ; YES + CAML LAST; DO WE WANT TO DELETE THIS ONE TOO + JRST DINB; NO,DELETE TERMINATES IN THE BUFFER + CAL DREST; ERASE THE REST OF THE BUFFER +EMPT: TRNE FL,S5; LAST BLOCK + JRST COMLEV; YES, DONE + TRZ FL,S0; FORWARD + CAL GET; INPUT NEXT BLOCK + MOVE SINDEX,WB; GET FIRST LINE + TRNN SINDEX,1; IF NOT A ONE, BLOCK IS EMPTY + JRST EMPT; SO GET THE NEXT ONE + CAL FIND; NEW SINDEX IS THE FIRST LINE - THIS CAL + JRST DELOOP; SETS UP THE COUNTS, ETC. + +DEQ: CAL DREST; DELETE THE REST OF THE BUFFER +DEX: JRST COMLEV; EXIT + DINB: MOVEI INDEX,WBF; GET INITIAL ADDRESS + CAL FINDES; SCAN THE LINE + JUMPE .+3; END OF BUFFER + CAMG LAST; LAST LINE DONE + AOJA INDEX,DINB+1; NO, GO AGAIN + HLRZS COTP; COMPUTE TOTAL SIZE + SUB INDEX,COTP; THIS MUCH SMALLER + HRLZS COTP; RESET LEFT HALF + HRRM INDEX,COTP; AND RIGHT HALF GET DELTA SIZE + CLEARM WC; SET FOR ZERO LENGTH INSERT + CAL INSED; INSERT THE NULL LINE + JRST COMLEV; AND EXIT + +DREST: HLRZ INDEX,COTP; DELETE THE REMAINING BUFFER + SUBI INDEX,WB; JUST DECREMENT SIZE + HRRM INDEX,WBC; OF THE NEW BUFFER + JRST INSE16; DONE + PRINT: CAL GE2SEQ; GET THE RANGE +PRLOOP: MOVE (INDEX); GET A LINE + JUMPE GETNEX; ZERO IMPLIES END OF BUFFER - GET NEXT + CAMLE LAST; ARE WE STILL IN THE BALLPARK + JRST COMLEV; NO, ALL DONE + CAL STEP; PREPARE FOR NEXT HUNT + CAL OTLINE; PRINT THIS LINE + CAL FIND; FIND THE NEXT LINE + JRST PRLOOP; LOOK AT IT + +GE2SEQ: CAL GETSEQ; GET A 2 NUMBER RANGE + SKIPA; THERE WERE TWO + JRST GEX; ONLY ONE + LSH 1; JUSTIFY IT + TROA 1; AND FLAG IT AS A SEQUENCE NUMBER +GEX: MOVE SINDEX; DUPLICATE THE INPUT NUMBER IF JUST ONE + MOVEM LAST; STORE THE END OF THE RANGE + CAL FIND; SEARCH FOR THE FIRST LINE + CAMN LAST,FIRST; BOTH THE SAME + CAMN SINDEX,(INDEX); BUT NO MATCH FOUNT + EXIT; WILL SKIP THIS ONE + ERR 2; AND *NLN* + +STEP: SAVE CINDEX ;PROTECT THE STEP + MOVEI CINDEX,1; PREPARE TO ADD ONE TO SINDEX + MOVEM SINDEX; WHICH WE LOAD FROM ZERO + JRST ASCIA+1; AWAY + +PNEXT: MOVE SINDEX,FIRST; PRINT NEXT LINE + MOVE SINDEX; UPDATE THE LINE POINTER + CAL STEP; NEXT LINE + CAL FIND; WHERE IS IT + SKIPN SINDEX,(INDEX); ZERO IS END, ALSO LOAD SINDEX + ERR 2; *NLN* + MOVEM SINDEX,FIRST; STEP FIRST POINTER + CAL OTLINE; PRINT THE LINE + JRST OUTTER; BACK TO CONTROL + +GETNEX: TRNE FL,S5; END OF FILE + JRST COMLEV; YES, EXIT + TRZ FL,S0; FORWARD + CAL GET; INPUT IT + MOVEI INDEX,WB; FIRST ADDRESS + JRST PRLOOP; RETURN TO PRINT SCAN + SUBTTL TELETYPE IO - AUGUST 25, 1965 + +;OUTPUT SEQUENCE NUMBER +OTSEQ: AOS TYOBF1; STEP THE WORD POINTER + MOVEM SINDEX,@TYOBF1; PUT THE SEQUENCE NO. + MOVEI 1,211; AND A TAB + IDPB 1,TYOBF1; INTO THE OUTPUT BUFFER +OTSEQ4: OUTPUT TYP,0; OUTPUT THE TELETYPE BUFFER + EXIT + +;INPUT ONE LINE FROM TELETYPE AND CONVERT TO SEQUENCED + +GETLIN: INPUT TYP,0; READ THE LINE + MOVEI 1,TTB1; PREEPARE TO BLOCK IT UP + HRLI 1,TTB; DESTINATION + CLEARM TTB + BLT 1,TTB16; BLOCK IT UP + MOVE TPT,KKK1; PREPARE THE CONVERSION POINTER + MOVE IPT,TYIBF1; AND READ POINTER + MOVE 2,TYIBF2; AND THE COUNT + MOVEM SINDEX,(TPT); PUT IN THE SEQUENCE + MOVEI 1,211; TAB + AOJA TPT,EOMLOP+2; START CONVERSION + +EOMLOP: SOJL 2,EOMOUT; IF ALL OUT OF CHARACTERS + ILDB 1,IPT; READ ONE + IDPB 1,TPT; WRITE ONE + CAIE 1,33; ALTERNATE ALTMOD + CAIN 1,175; REGULAR ALTMOD + JRST CRT; MAKE EXIT + JRST EOMLOP; GET MORE + +EOMOUT: MOVE WC,TPT; FORM WORD COUNT + SUB WC,KKK1; INITIAL VALUE + HRRZS WC; CLEAR LEFT + CAIN 1,12; LINE FEED + ADDI WC,1; MEANS STEP COUNT +STEPEX: AOS (PDP); SKIP EXIT + EXIT +KKK1: POINT 7,TTB; INITIAL POINTER + +;OUTPUT ONE LINE OF TEXT + +OTLINE: MOVE (INDEX); FIRST WORD + JRST OTL1 + MOVE (INDEX); SUBSEQUENT WORDS + JUMPE OTSEQ4; ZERO IMPLIES THE END OF THE WORLD + TRNE 1; ONE IMPLIES THE END OF THE LINE + JRST OTSEQ4 +OTL1: AOS TYOBF1; PUT IT IN THE OUTPUT BUFFER + MOVEM @TYOBF1 + AOJA INDEX,OTLINE+2; GO FOR MORE + ;GET ONE CHARACTER + +GETCHR: INPUT TYP,0; GET A LINE + MOVE IPT,TYIBF1; PREPARE INPUT POINTER + ILDB C,IPT; LOAD THE FIRST CHARACTER + EXIT + +;GET A SEQUENCE PAIR + +GETSEQ: CLEARB 0,SINDEX; MAKE BOTH ZERO + ILDB C,IPT; GET A CHARACTER + CAIL C,60; IT MUST BE A NUMBER + CAILE C,71 + JRST ETEST; OR A DELIMITER + LSH SINDEX,7; NUMBER + ADD SINDEX,C; NEW ONE + JRST GETSEQ+1 + +ETEST: CAIN C,56; POINT? + JRST PER + CAIN C,54; COMMA? + JRST CMMA + SKIPE SINDEX; IF NOTHING INPUT YET + CAIE C,15; OR NOT A CARRET +COMERR: ERR 1; ILLEGAL COMMAND + IOR SINDEX,KK4; MAKE IT AN ASCII THING + SKIPE 0; IF TWO ARGS + EXCH SINDEX,0; SWAP EM BACK + LSH SINDEX,1; LEFT JUSTIFY + TRO SINDEX,1; AND FLAG IT + MOVEM SINDEX,FIRST; SAVE IT FOR . + JUMPE STEPEX; ONLY ONE ARG + EXIT; TWO ARGS + +CMMA: JUMPE SINDEX,COMERR; THREE ARGS? + JUMPN COMERR; ONE ARG + IOR SINDEX,KK4; ASCII-IZE IT + EXCH SINDEX,0; SWAP EM + JRST GETSEQ+1 + +PER: JUMPN SINDEX,COMERR; CANT BE THIRD ARG + MOVE SINDEX,FIRST; RETREIVE POINT + LSH SINDEX,-1; RIGHT JUSTIFY + JRST GETSEQ+1 + +KK4: OCT 140603014060; 00000 + SUBTTL DECSET - AUGUST 25, 1965 + +FOPEN=1000 + +;SET FILE OPEN (*SN,NAME) + +DECINI: TLNE FL,FOPEN; IF A FILE IS NOT ALREADY OPEN + ; THEN GOTO NORMAL PROCESS + ERR 1 ; IF FILE OPEN ,MUST CLOSE W. E +DECIN1: SETZB FL,WBC; ZERO FLAGS AND WORD COUNT + CLEARM DTNAME; FILE NAME + CLEARM DTNAME+1; AND EXTENSION + CLEARM DTNAME+2; AND DATE + CAL GTCHAR; GET UNIT NUMBER + CAIL 60; IT MUST BE A NUMBER + CAILE 70; + JRST .-3; IGNORE ANYTHING ELSE + DPB [POINT 5,PLUNK,23]; DUMP INTO INIT COMMAND + CAL GTCHAR; NEXT CHARACTER + CAIE 54; COMMA? + JRST .-2; IGNORE ALL ELSE +LOOP0: MOVE 1,[POINT 6,DTNAME]; INITIALIZE NAME POINTER + MOVEI C,6; MAX NAME LENGTH +LOOP: CAL GTCHAR; GET A CHARACTER + CAIL "0"; NUMBERS AND LETTERS ONLY COME HERE + CAILE "9"; SO HERE FILTER NUMBERS + JRST LOOP1; IT IS A LETTER +LOOP2: TRC 40; NUMBER - MAKE IT SIXBIT + IDPB 1; STORE INTO NAME (OR EXTENSION) + SOJG C,LOOP; COUNT DOWN FOR SIZE + CAL GTCHAR; NEXT CHARACTER + JRST .-1; + + GTCHAR: ILDB IPT; LOAD ONE CHARACTER + CAIN 15; CRT + JRST GET1; SNEAK EXIT + CAIN "."; AN EXTENSION IS COMMING + JRST GET2; FIX IT UP + CAIE 33; THE FUNNY ALTMODE + CAIN 175; AND THE REAL ONE + JRST GET11 ;CAUSE EXIT TO OCCUR + CAIN 0,12 ;LF CHAR? + JRST GET1 ; YES TREAT AS CR + CAIE 1; CONTROL A + EXIT; NOTA SO EXIT HAPPY + TLO FL,100; SET CONTROL A FLAG + JRST GTCHAR; GET ANOTHER CHARACTER +GET11: TLO FL,2 ;NEW FILE FLAG + +GET1: UNSAVE; POP OFF EXIT +GO: MOVEI DTOBUF; THESE TWO INSTRUCTIONS REQUIRED + HRLM PLUNK+1; REQUIRED TO LINK LEFT HALF + MOVE SJOBFF; RESET JOB AREA + MOVEM JOBFF; TO PREVENT STORAGE EAT-UP + INIT DT,0; INITIALIZE DECTAPE +PLUNK: SIXBIT /DTA/; RIGHT HALF SET ABOVE + XWD 0,DTIBUF; LEFT HALF SET ABOVE + ERR 5; UNIT NOT AVAILABLE + MOVSI 400000; USE BIT + ANDCAM DTB; CLEAR IT + HRRI DTB; HEAD OF BUFFER + MOVEM DTIBUF; SETUP IN HEADER + OUTBUF DT,1; SET UP SINGLE BUFFER + TLZE FL,100; NEW DIRECTORY? + CALLI DT,13; YES, ZONK IT (UTPCLR) + SKIPN DTNAME; NO NAME MEANS JUST CLEAR, PROB + JRST FINIS2; SO EXIT AND CLOSE FILE + LOOKUP DT,DTNAME; IS THE NAME ALRRADY THERE + JRST NEWFIL; NO, SO WE ENTER IT + TLNE FL,2; ARE WE ASKING FOR A NEW FILE + ERR 10; YES, FAU + +DOIT: MOVE 2,DTNAME+1; GET LINK + USETI DT,(2); SET IT UP + OUTPUT DT,; MAKE SYSTEM HAPPY + USETO DT,(2); SET UP OUTPUT ALSO + TLZN FL,10; NEW FILE? + JRST DOIT1; NO, ALMOST DONE + SETZM WBF; WE MUST FORCE AN EMPTY BLOCK + TLO FL,1; SET BUFFER FULL FLAG + SETZM WBC; ZERO LENGTH + TRO FL,S3+S5+S6+S8; INITIAL STATE, FIRST BLOCK MODIFIED +DOIT1: MOVEM 2,THSBLK; SETUP CURRENT BLOCK NUMBER + TLO FL,FOPEN; SET FILE STATUS TO OPEN + JRST COMLEV; ALL DONE + NEWFIL: TLNN FL,2; WAS ALTMOD STRUCK + ERR 11; NO, NCF + ENTER DT,DTNAME; PUT IN DI + ERR 6; DCE + TLO FL,10; SET NEW FILE FLAG + JRST DOIT; + +LOOP1: CAIL "A"; LETTER CHECK + CAILE "Z"; IT MUST VERILY BE A LETTER + JRST LOOP; WE IGNORE IT + JRST LOOP2; WE PROCESS IT + +GET2: SKIPE DTEXTN; EXTENSION? + ERR 1; ALREADY GOT ONE, CANT HAVE TWO + TLZ 1,770000; MAGIC TO BYTE POINTER TO POINT TO NEXT + MOVEI C,3; ONLY 3 LETTERS IN EXTENSION + UNSAVE; POP OF SOME GARBAGE + JRST LOOP; RETURN TO LISTEN + +DTNAME: 0; FILE NAME +DTEXTN: 0; FILE EXTENSION +DTDATE: 0; DATE + 0; DUMMY + +FBNUM=DTEXTN + + SUBTTL INITIA - AUGUST 25, 1965 +AL=1 +INITIA: CALLI 0,0; RESET SYSTEM + INIT TYP,AL; RESET CONCOLE + SIXBIT /TTY/ + XWD TYOBUF,TYIBUF + HALT + INBUF TYP,1; SET UP ONE INPUT BUFFER + OUTBUF TYP,2; AND TWO OUTPUT BUFFERS + MOVE JOBFF; SAVE FIRST FREE + MOVEM SJOBFF; FOR LATER RESTART + OUTPUT TYP,0; MAKE SYSTEM HAPPY +INITIX: MOVE CINDEX,KK1; INITIALIZE STEP TO 10 + MOVEI PDP,PDSTAK-1; INITIALIZE PUSHDOWN POINTER + CLEARB SINDEX,FL; FLAGS AND SEQUENCE INDEX + MOVNI P,1; AND FIRST BLOCK POINTER + CLEARM WBC; WORD COUNT +COMLEV: CAL CRT; A COMMON RETURN + CAIL FL,0 ; DDE ERROR + JRST OUTTER ; NO, SO OFF TO LISTEN CONTROL + JRST INITIA ; YES GO RESET WORLD + +;BUFFERS, ET. AL. +KK1: OCT 140603014260; 00010 +TYOBUF: BLOCK 3 +TYIBUF: BLOCK 3 + +DTOBUF: BLOCK 3 +DTIBUF: 0 + XWD 700,0; SELF ASSIGNED BUFFERS, ETC. + 0 + +FIRST: 0 +SJOBFF: 0 + +WBC: 0; WORKING BUFFER COUNT + 0 +DTB: XWD 200,DTB; DECTAPE HEADER +WBF: 0 +WB: BLOCK 217; THE WORKING BUFFER +RESTT: SIXBIT .RESET. + +PDSTAK: BLOCK 7; PUSHDOWN STAK +TTB: BLOCK 23; TELETYPE BUFFER-BUFFER +TTB16: 0 + +TTB1=TTB+1 +TYIBF1=TYIBUF+1 +TYIBF2=TYIBUF+2 +TYOBF1=TYOBUF+1 +DTOBF1=DTOBUF+1 + +EXTERNAL JOBFF +EDEND: + +END INITIA + diff --git a/src/editor.opr b/src/editor.opr new file mode 100644 index 0000000..a70276e --- /dev/null +++ b/src/editor.opr @@ -0,0 +1,10 @@ + +EDITOR ASSEMBLY AND LOADING INSTRUCTIONS +$=ALTMODE + + .R MACRO + *DSK:EDITOR,_DSK:EDITOR + *^C + .R LOADER + *DSK:EDITOR$ + .SAVE DSK EDITOR diff --git a/src/errcon.mac b/src/errcon.mac new file mode 100644 index 0000000..2cd40d1 --- /dev/null +++ b/src/errcon.mac @@ -0,0 +1,393 @@ +TITLE ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS +SUBTTL 8-9-65 +EXTERNAL APRCHL,APRRET,HOLD,HOLDI,APRCHN +EXTERNAL JOB,JOBADR,JOBREL,TTYFND,TTYCTR,TTYSTR +EXTERNAL JBTADR, UXIT,JOBPDP,JOBTRP,USRPDP,UBUF,PJOBN +EXTERNAL CPOPJ,HOLDI1,WAIT1,USRPOV,JOBPFI +EXTERNAL CRLF,MJOBPD,JOBPDL,CPOPJ1 + +;CALL: PUSHJ PDP,ADRCK +; HRRZ TAC,LOC +; OK RETURN + + INTERNAL ADRCK + +ADRCK: PUSH PDP, TAC + XCT @-1(PDP) + AOS -1(PDP) + PUSH PDP,TAC1 + LDB TAC1,PJOBN + HLRZ TAC1,JBTADR(TAC1) + CAILE TAC,JOBPFI ;IN IO PROTECTED PART OF DATA AREA? + CAMLE TAC,TAC1 ;NO,IS IT GREATER THAN PROTECTION? + PUSHJ PDP,ADRERR ;YES + POP PDP,TAC1 ;NO + POP PDP, TAC + POPJ PDP, + + INTERNAL ADRERR + +ADRERR: HRRZ TAC1,PDP + CAMG TAC1,JOBADR ;IS THIS ERROR AT UUO OR INTERRUPT SERV + JRST ADRERI ;INTERRUPT SERVICE LEVEL + JSP TAC,ERRPTU + POINT 7,AERM1 + PUSHJ PDP,ERNAM + JRST ERSYC1 + +AERM1: ASCIZ /ADDRESS CHECK FOR / + +ADRERI: LDB ITEM, PJOBN + JSP TAC,ERRPNT + POINT 7,AERM1 + PUSHJ PDP,ERNAM + MOVEI TAC1,AERM3 + PUSHJ PDP,MESPNT +ADRER2: EXCH DEVDAT, (PDP) ;GET ADDRESS OF D.D. BLOCK DECTECTING ER + LDB TAC, [POINT 3, DEVCHR(DEVDAT), 11] ;GET PI CHANNEL NO. + PUSH PDP, TAC ;AND SAVE + MOVE TAC,DEVSER(DEVDAT) + PUSHJ PDP,DRL(TAC) ;RELEASE DEVICE + POP PDP, TAC ;RESTORE PI CHANNEL NO. + EXCH DEVDAT,(PDP) + JRST HOLDI ;AND GO DISMISS CHANNEL + +AERM3: ASCIZ / DURING INTERRUPT/ + + INTERNAL APRILM + EXTERNAL USRREL + + POVF=200000 + POVC=400000 + NXM=10000 + ILM=20000 + +APRILM: MOVEI TAC,APRCHN + CONSO APR,ILM + JRST APRNXM + CONO APR,ILM(TAC) + HRRZ TAC,APRCHL + CAMLE TAC, USRREL + JRST APRJRS + JSP TAC,ERRPTU + POINT 7,APM1 +APRIL1: PUSHJ PDP,EPTADR + JRST APRDMS ;GO DISMISS APR CHANNEL + +APRJRS: JSP TAC,ERRPTU + POINT 7,APM2 + PUSHJ PDP,EPTADR + JRST APRDMS + +APM1: ASCIZ /ILL MEM REF/ + +APM2: ASCIZ /PC EXCEEDS MEM BOUND/ + + + + +APRNXM: CONSO APR,NXM + JRST APRPDL + CONO APR,NXM(TAC) + JSP TAC,ERRPTU + POINT 7,APM3 + JRST APRIL1 + +APM3: ASCIZ /NON EX MEM/ + + +APRPDL: CONSO APR,POVF + JSP DAT, ERROR ;NOT APR, MUST BE HARDWARE PROB. + CONO APR,POVC(TAC) + MOVE TAC,APRCHL + SKIPE TAC1,USRPOV + TLNN TAC,10000 ;WAS OVF IN USER MODE? + JRST PDLOV ;NO, GO PRINT MESSAGE + HRRM TAC1,APRCHL ;RESET RETURN + JRST APRRET ;DISMISS CLOCK +PDLOV: JSP TAC,ERRPTU + POINT 7,APM4 + PUSHJ PDP,EPTADR + MOVE TAC,APRCHL + TLNE TAC,10000 + JRST APRDMS ;GO DISMISS APR CHANNEL + MOVEI TAC1,ERMS1 + PUSHJ PDP,MESPC +APRDMS: MOVEI TAC, 0 ;SET TO DISMISS APR CHANNEL + JRST HOLDI1 + +APM4: ASCIZ .PDL OV. + +APMSYS: ASCIZ / AT EXEC LOC / + + +APMUSR: ASCIZ / AT USER LOC / + + +EPTADR: MOVE TAC,APRCHL +EPTAD1: PUSH PDP,TAC ;PPRINT "AT EXEC LOC " OR "AT USER LOC" + MOVEI TAC1,APMSYS + TLNE TAC,10000 + MOVEI TAC1,APMUSR + PUSHJ PDP,MESPNT + POP PDP,TAC + ANDI TAC,-1 + JRST OCTPNT + + INTERNAL ERNAM + + +ERNAM: MOVEI TAC1,ERRDEV + PUSHJ PDP,MESPNT + MOVE TAC1,[POINT 6,@-(PDP)] + MOVEI 0,6 +ERNAM1: ILDB TAC,TAC1 + JUMPE TAC,.+4 + ADDI TAC,240 + IDPB TAC,DAT + SOJG 0,ERNAM1 + POPJ PDP, + +ERRDEV: ASCIZ /DEVICE / + +INTERNAL DIRERR + +DIRERR: POP PDP,0 ;FLUSH RETURN ADDRESS + JSP TAC,ERRPTU + POINT 7,DIRER1 + PUSHJ PDP,ERNAM + JRST ERSYC1 + +DIRER1: ASCIZ /BAD DIRECTORY FOR / + +; INTERNAL ERRDIS + +;ERRDIS: LDB TAC,[POINT 4,DEVCHR(DEVDAT),17] +; ADDI TAC,ERRC2 +; SKIPL TAC1,@TAC +; JRST 4,. +; TLZ TAC1,400000 +; MOVEM TAC1,@TAC +; MOVE PDP,JOBPDP(PROG) +; MOVE TAC,@TAC +; HRLI TAC,PROG +; MOVE TAC,@TAC +; HLL TAC,1(PDP) +; PUSH PDP,TAC +; JRST UXIT + +;ERRC2: XWD PROG,JOBTRP + +;UNEXPLAINED ERROR ENTRY +;CALL: JSP DAT, ERROR + +INTERNAL ERROR +EXTERNAL JOBPD1 + +ERROR: MOVEI ITEM,1 ;PRINT ON OPERATORS CONSOLE(JOB 1) + JSP TAC,ERRPNT + POINT 7,ERR1 + HRRZ TAC,-2(PDP) ;GET LOC OF CALL TO ERROR +EPOCT: PUSHJ PDP,PCPNT +ERSYC1: MOVEI TAC1,ERMS1 + +ERSYCL: PUSHJ PDP,MESPC + JRST HOLD + +EPCAD0: PUSHJ PDP,MESPNT ;PRINT MESS +EPCAD1: PUSHJ PDP,EPCAD ;PRINT LAST USER CALL TO MONITOR + JRST HOLD + +EPCADR: PUSHJ PDP,MESPNT +EPCAD: MOVE TAC, JOBPD1(JDAT) ;GET LAST USER UUO CALL + SOJA TAC,EPTAD1 + +ERR1: ASCIZ /ERROR IN MONITOR AT / +ERMS1: ASCIZ /; EXEC CALLED FROM / + +;ERROR SETUP ROUTINE +;CALL: MOVE ITEM, JOBNUMBER +; MOVE DEVDAT, DEVICE DATA BLOCK IF DEVICE ERROR +; JSP TAC, ERRPNT +; POINT 7, ERROR MESSAGE +; RETURN + + + INTERNAL ERRPNT,ERRPTU + +ERRPTU: MOVE ITEM,JOB +ERRPNT: MOVE PROG,JBTADR(ITEM) + MOVE JDAT,JBTADR(ITEM) ;GET ADDRESS OF JOB DATA AREA + JUMPE JDAT, ERRPD ;SET UP PDP IN USER AREA IF HE HAS CORE + MOVSI PDP, MJOBPD + HRRI PDP, JOBPDL(JDAT) + + AOBJN PDP, .+1 ;LEAVE ROOM FOR UUO RETURN +ERRPD: PUSH PDP, DAT ;SAVE CLALL TO ERROR SUB + PUSH PDP, DEVDAT + PUSH PDP, TAC ;SAVE RETURN + PUSHJ PDP, TTYFND + MOVEI TAC1,SYSERR + PUSHJ PDP,MESPNT + MOVE TAC, ITEM + PUSHJ PDP,RADX10 + PUSHJ PDP, CRLF ;PRINT CRLF + MOVE TAC1, @(PDP) + PUSHJ PDP, MESPNT + JRST CPOPJ1 + +SYSERR: ASCIZ / +ERROR IN JOB / + +,ERROR TRAP HANDLING + +;ERRTRP: LDB TAC,[POINT 4,DEVCHR(DEVDAT),17] +; ADDI TAC,ERRC2 +; SKIPG TAC1,@TAC +; TLO TAC1,400000 +; MOVEM TAC1,@TAC +; AOS TAC +; MOVE PDP,JOBPDP(PROG) +; AOS TAC +; MOVE TAC1,1(PDP) +; PUSH PDP,TAC +; HLL TAC1,0(PDP) +; HRLI TAC1,PROG +; MOVEM TAC,@TAC1 +; JRST UXIT + + INTERNAL ILLINP + +ILLINP: JSP TAC,ERRPTU + POINT 7,ILLOT + PUSHJ PDP,ERNAM + JSP TAC1, EPCAD0 +ASCIZ / CANNOT DO INPUT/ + +ILLOT: ASCIZ /OUTPUT / + + + INTERNAL ILLINS + +ILLINS: JSP TAC,ERRPTU + POINT 7,ERRIL + JRST EPCAD1 + +ERRIL: ASCIZ /ILL INST/ + + INTERNAL ILLMOD + +ILLMOD: JSP TAC,ERRPTU + POINT 7,ILLMO1 + PUSHJ PDP,ERNAM + JRST EPCAD1 + +ILLMO1: ASCIZ /ILL DEVICE DATA MODE FOR / + + INTERNAL ILLOUT + +ILLOUT: JSP TAC,ERRPTU + POINT 7,ILLIN + PUSHJ PDP,ERNAM + JSP TAC1,EPCAD0 + +ILM3: ASCIZ / CANNOT DO OUTPUT/ + +ILLIN: ASCIZ /INPUT / +INTERNAL IOIERR + +IOIERR: JSP TAC,ERRPTU + POINT 7,IOIER1 + JRST EPCAD1 + +IOIER1: ASCIZ /IO TO UNASSIGNED CHANNEL/ + +,CALL WITH DEST. POINTER IN DAT +,SOURCE POINTER IN TAC1 +,MOVES UNTIL A ZERO CHAR. IS FOUND + + INTERNAL MESPNT +MESPNT: HRLI TAC1,440700 +MES1: ILDB TAC, TAC1 + JUMPE TAC,CPOPJ + IDPB TAC, DAT + JRST MES1 + +,ANY RADIX PRINT +, TAC1 = RADIX +, DAT = BYTE POINTER +, TAC = NUMBER + + INTERNAL OCTPNT, ANYRDX, PCPNT + EXTERNAL UUO0,JOBPD1 + +MESPC: PUSHJ PDP, MESPNT ;PRINT LAST USER UUO CALL + HRRZ TAC,JOBPD1(JDAT) +PCPNT: SUBI TAC,1 + AND TAC,-1 +OCTPNT: MOVEI TAC1,10 +ANYRDX: PUSH PDP,ITEM + HRRZM TAC1, ITEM + PUSHJ PDP,OCTP1 + POP PDP,ITEM + POPJ PDP, + +OCTP1: IDIV TAC,ITEM + HRLM TAC1, (PDP) + JUMPE TAC, .+2 + PUSHJ PDP, OCTP1 + HLRZ TAC, (PDP) + ADDI TAC, "0" + IDPB TAC, DAT + POPJ PDP, + +INTERNAL RADX10 + +RADX10: PUSH PDP,TAC1 ;OUTPUT DECIMAL + MOVEI TAC1,12 + PUSHJ PDP,ANYRDX + POP PDP,TAC1 + POPJ PDP, + +REPEAT 0,< +PCPNT: SUBI TAC,1 +OCTPNT: HRLZ TAC1,TAC + MOVSI TAC,-1 + LSHC TAC,3 + TRNN TAC,7 + JUMPN TAC1,.-2 +OCTPN1: ADDI TAC,"0" + IDPB TAC,DAT + JUMPGE TAC,CPOPJ + HLLZS TAC + LSHC TAC,3 + JRST OCTPN1 +> + + INTERNAL UTBKER +UTBKER: LDB ITEM,PJOBN ;JOB NUMBER + JSP TAC,ERRPNT + POINT 7,UTERM + MOVE TAC,UBUF + SUBI TAC,(PROG) + PUSHJ PDP,OCTPNT + MOVEI TAC1, [ASCII / /] + PUSHJ PDP, MESPNT + PUSHJ PDP,ERNAM + JRST ADRER2 + +UTERM: ASCIZ /ILL DT BLOCK NO. , BUFFER AT / + + INTERNAL UUOERR + EXTERNAL UUO0 + +UUOERR: JSP TAC,ERRPTU + POINT 7,UUOER1 + MOVE TAC, UUO0 ;UUO PC + TLNE TAC, 10000 ;WAS IT FROM USER? + JRST EPCAD1 ;YES, JUST PRINT LOC OF CALL + PUSHJ PDP,EPTAD1 ;NO, PRINT BOTH EXEC CALL + JRST ERSYC1 ;AND USER CALL + +UUOER1: ASCIZ /ILL PROG. OP. USED/ + END, diff --git a/src/fudge2.mac b/src/fudge2.mac new file mode 100644 index 0000000..0460ef9 --- /dev/null +++ b/src/fudge2.mac @@ -0,0 +1,2012 @@ +TITLE FUDGE2 V.011 +SUBTTL 2-OCT-70 ED YOURDON/VJC/DMN +;FILE UPDATE GENERATOR +;"COPYRIGHT 1968,1969,DIGITAL EQUIPMENT CORP. MAYNARD,MASS. U.S.A." + + VFUDGE==11 ;VERSION NUMBER + VPATCH==0 ;DEC PATCH LEVEL + VCUSTOM==0 ;NON-DEC PATCH LEVEL + + JOBVER==137 + LOC JOBVER + XWD VCUSTOM,VFUDGE+VPATCH*1000 + RELOC + MLON + +;FUDGE ACCUMULATOR DEFINITIONS + + A= 1 ;GENERAL COMMUNICATION AC + B= 2 ;SCRATCH ACCUMULATOR + T= 3 ;USED IN /C AND /X ONLY + C= 4 ;SCRATCH ACCUMULATOR + D= 5 ;IO DEVICE NUMBER ACCUMULATOR + E= 6 ;SCRATCH ACCUMULATOR + F= 7 ;FLAG ACCUMULATOR + G= 10 ;DEVICE CHARACTERISTICS AC + H= 11 ;USED IN GETCHR AND GETCMN + P= 12 ;PUSHDOWN POINTER AC + R= 13 ;PROGRAM NAME-USED IN READ,WRITE + S= 14 ;SIXBIT SYMBOL ACCUMULATOR + DIS= 15 ;DISPATCH ACCUMULATOR + EXT= 16 ;FILE NAME EXTENSION ACCUMULATOR + SW= 17 ;SWITCH UUO AC + + ;FUDGE FLAG DEFINITIONS (RIGHT HALF OF ACCUMULATOR F) + + DESTB== 1 ;1-DESTINATION DEVICE SEEN + SAVEB== 2 ;1-SWITCH SEEN,BUT NOT EXECUTED + SWTB== 4 ;1-SWITCH MODE ENTERED IN GETCHR + SLSHB== 10 ;1-SWITCH MODE ENTERED WITH </> + TTYOB== 20 ;1-NON-TTY OUTPUT;USED BY IO + TTYCB== 40 ;1-NON-TTY OUTPUT;USED BY COMMAND + PROGB== 100 ;1-PROGRAM NAME SEEN IN SPECIFICATION + NOLOCB==200 ;1-DELETE LOCAL SYMBOLS ***VJC + DEVB== 400 ;1-DEVICE NAME SEEN IN SPEC. + EXTB== 1000 ;1-EXPLICIT FILE NAME EXTENSION + ERRB== 2000 ;1-ERROR IN ENTRY BLOCK CHECK + INFOB== 4000 ;1-VALID INFORMATION IN COMMAND + CONB== 10000 ;1-CONTEXT OF <.> IS PROGRAM NAME + ;0-CONTEXT OF <.> IS FILE NAME + F4IB== 20000 ;1-IGNORE F4 OUTPUT + CRLFTY==40000 ;1-CR,LF TYPED (FOR ERROR MSG) + POPBAK==100000 ;1-XCT POPJ P, ;TO RETURN TO CALLING SEQ. + XFLG== 200000 ;1-INDEX THIS FILE + DTAFLG==400000 ;1-OUTPUT DEVICE IS DTA (SPECIAL INDEX) + + + +;HANDY BITS FOR CALLS TO DEVCHR FOR DEVICE CHARACTERISTICS + OUTBIT==1 ;1-DEVICE CAN DO OUTPUT + INBIT== 2 ;1-DEVICE CAN DO INPUT + DRCTRB==4 ;1-DEVICE HAS A DIRECTORY + TTYBIT==10 ;1-DEVICE IS A TTY + DTABIT==100 ;1-DEVICE IS A DTA + LPTBIT==40000 ;1-DEVICE IS LPT + DSKBIT==200000 ;1-DEVICE IS DSK + +;OTHER USEFUL PARAMETER ASSIGNMENTS + N== 200 ;SIZE OF MASTER AND TRAN BUFFERS + XP== 20 ;SIZE OF PUSHDOWN LIST + SIZE== 500 ;SIZE OF PURE ENTRY BLOCK + X== SIZE+5 ;SIZE OF ENTRY AND SAVE BLOCKS + IOEOF== 20000 ;1-END-OF-FILE HAS BEEN SEEN + IOBKTL==40000 ;1-BLOCK-TOO-LARGE ERROR + IODATA==100000 ;1-DATA ERROR + IODEV== 200000 ;1-DEVICE ERROR + IOBOT== 4000 ;1-MAG TAPE IS AT BEGINNING OF TAPE + + RIBALC==11 ;NUMBER OF BLOCKS ALLOCATED + +;EXTERNAL SYMBOLS + EXTERN JOBFF, JOBREL, JOBSYM, JOBSA + +OPDEF JSR [PUSHJ P,] ;PURE FOR RE-ENTRANT FUDGE + + SUBTTL INITIALIZE AND SETUP OF FUDGE2 +;THIS SECTION OF CODING DOES THE FOLLOWING THINGS +; 1.RESETS ALL IO DEVICES BY CALLING [SIXBIT /RESET/] +; 2.INITIALIZES THE TELETYPE IN ASCII-LINE MODE +; 3.TYPES A * TO SIGNIFY READINESS FOR INPUT FROM USER +; 4.SETS UP A PUSHDOWN LIST +; 5.INITIALIZES VARIOUS ACCUMULATORS, CLEARS THE FLAGS, +; AND INITIALIZES THE MSTBUF AND TRNBUF COUNTERS + +FUDGE2: JFCL ;INCASE OF CCL ENTRY + RESET ;RESET I/O DEVICES + MOVE [XWD LOW,LOW+1] + SETZM LOW ;CLEAR DATA AREA + BLT LOWTOP-1 + MOVE [XWD 17,11] ;TEST FOR LEVEL D + SETZ ;FAILED, NOT LEVEL D + TLNN (7B9) ;IS IT LEVEL D OR LATER? + TDZA ;NO + HRROI -2 ;THIS IS LEVEL D + MOVEM LEVEL ;STORE STATE + SETZ ;CLEAR ACC'S + MOVEI 17,1 ;WITH A BLT OF ZERO + BLT 17,17 ;FROM 0-17 + INIT 0,1 ;INITIALIZE TTY, CHANNEL 0 + SIXBIT /TTY/ ;TTY + XWD OBUF, IBUF ;ADDRESSES FOR BUFFER HEADERS + HALT . ;ILLEGAL INSTRUCTION IF NO TTY + OUTPUT 0, ;DUMMY OUTPUT ON TTY + MOVEI A, "*" ;PICK UP A <*> + IDPB A, OBUF+1 ;TYPE IT OUT + OUTPUT 0, ;EMPTY THE BUFFER + MOVE P, XPDLST ;SET UP A PUSHDOWN POINTER + HRROI D,1 ;INITIALIZE DEVICE BUFFER + MOVEM D, DEVBUF ;... + MOVSI A, -N ;GET COUNT OF MSTBUF AND TRNBUF + HRRI A, FILBUF+1 ;INITIALIZE POINTER IN FILBUF + MOVEM A, FILBUF ;SET UP COUNT IN FILE BUFFER + HRRI A, PRGBUF+1 ;INITIALIZE POINTER IN PRGBUF + MOVEM A, PRGBUF ;... + HRRI A,PPNBUF ;INITIAL POINTER IN PPNBUF + MOVEM A,PPNBUF + SUBTTL FUDGE2 COMMAND STRING DISPATCHING +;THIS ROUTINE PICKS UP CHARACTERS FROM THE TELETYPE BUFFER AND +;DISPATCHES TO THE PROPER ROUTINE DEPENDING ON THE TYPE OF +;CHARACTER.A TABLE OF BYTES AND BYTE POINTERS ALLOWS EACH +;CHARACTER IN THE ASCII SET TO BE TREATED INDIVIDUALLY. THE +;ROUTINE MAY BE ENTERED AT GETCHR IF IT IS DESIRED TO ACCUMULATE +;A 6-LETTER SIXBIT SYMBOL IN AC S. SYMBOLS OF DIFFERENT LENGTHS +;MAY BE ACCUMULATED IN DIFFERENT REGISTERS BY SETTING THE CONTENTS +;OF AC B TO THE DESIRED LENGTH, AND PUTTING A BYTE POINTER IN E +;AND ENTERING THE ROUTINE AT GETCHR+4. + +GETCHR: TRZE F,POPBAK ;IMMEDIATE RETURN? + POPJ P, ;YES + MOVEI B, 6 ;SET COUNT OF SYMBOL TO 6 + MOVE E, SYMPTR ;SET UP A BYTE POINTER FOR AC S + MOVEI S, 0 ;INITIALIZE SYMBOL ACCUMULATOR +GETCMN: SOSG IBUF+2 ;IS TTY BUFFER EMPTY? + INPUT 0, ;YES, FILL IT UP + ILDB A, IBUF+1 ;GET A CHARACTER + MOVE G, A ;GET A COPY OF IT IN AC G + MOVE 0, CURCHR ;SAVE PREVIOUS CHAR + MOVEM 0, LSTCHR ;AS LAST CHAR + MOVEM A, CURCHR ;SAVE CURRENT CHAR + IDIVI G, 11 ;TRANSLATE TO 4-BIT CODE + LDB G, TABLE(H) ;USE PROPER BYTE POINTER + CAIGE G, 4 ;MODIFY CODE IF .GE. 4 + TRNN F, SWTB ;MODIFY CODE IF IN SWITCH MODE + ADDI G, 4 ;CHANGE DISPATCH BY ADDING 4 + HRRZ H, DSPTCH(G) ;GET PROPER DISPATCH ADDRESS + CAIL G, 10 ;BUT CHANGE IF NOT CORRECT + HLRZ H, DSPTCH-10(G) ;TO A LEFT HALF DISPATCH + JRST (H) ;EXIT TO APPROPRIATE ROUTINE + + SUBTTL COMMAND DISPATCH TABLE AND BYTE POINTERS +DSPTCH: XWD GETCMN,ERR16 ;IGNORED CHAR, BAD CHAR(SWITCH) + XWD SWTCH, SWTCHA ;<(>, LETTER(SWITCH MODE) + XWD COLON, ERR16 ;<:>, NUMBER(SWITCH MODE) + XWD PERIOD,SWTCHE ;<.>, <)>ESCAPE SWITCH MODE + XWD LFTARW,ERR17 ;<?>OR<=>, BAD CHAR (NORMAL MODE) + XWD COMMA, STORE ;<,>, ALPHABETIC CHARACTER(NORMAL) + XWD ALTMOD,STORE ;<$>,NUMERIC CHARACTER(NORMAL) + XWD SLASH, ERR17 ;</>, <)> ILLEGAL ESCAPE + XWD LBRACK, 0 ;LEFT ANGLE BRACKET, OR "[" + XWD RBRACK, 0 ;RIGHT ANGLE BRACKET + +TABLE: POINT 4, BITE(G), 3 + POINT 4, BITE(G), 7 + POINT 4, BITE(G), 11 + POINT 4, BITE(G), 15 + POINT 4, BITE(G), 19 + POINT 4, BITE(G), 23 + POINT 4, BITE(G), 27 + POINT 4, BITE(G), 31 + POINT 4, BITE(G), 35 + SUBTTL BYTE TABLE FOR DISPATCHING +;CLASSIFICATION BYTE CODES +; BYTE DISP CLASSIFICATION + +; 00 00 ILLEGAL CHARACTER, SWITCH MODE +; 01 01 ALPHABETIC CHARACTER, SWITCH MODE +; 02 02 NUMERIC CHARACTER, SWITCH MODE +; 03 03 SWITCH MODE ESCAPE, SWITCH MODE + +; 00 04 ILLEGAL CHARACTER, NORMAL MODE +; 01 05 ALPHABETIC CHARACTER, NORMAL MODE +; 02 06 NUMERIC CHARACTER, NORMAL MODE +; 03 07 SWITCH MODE ESCAPE, SWITCH MODE + +; 04 10 IGNORED CHARACTER +; 05 11 ENTER SWITCH MODE WITH A <(> +; 06 12 DEVICE DELIMITER, <:> +; 07 13 FILE EXTENSION DELIMITER, <.> +; (CAN ALSO BE PART OF A PROGRAM NAME) +; 10 14 OUTPUT SPECIFICATION, <LFT ARW> OR <=> +; 11 15 FILE DELIMITER, <,> +; 12 16 COMMAND TERMINATOR, <ALT MODE>=33,175,176 +; 13 17 ENTER SWITCH MODE WITH A </> +; 14 20 CHANGE CONTEXT OF PERIOD TO PROG NAME, <<> ,OR "[" +; 15 21 CHANGE CONTEXT OF PERIOD TO FILE NAME, <>> + +;BYTE TABLE CORRESPONDING TO 128 ASCII CHARS + +BITE: BYTE (4) 4,0,0,0,0,0,0,0,0 ;NUL + BYTE (4) 4,4,4,4,4,0,0,0,0 + BYTE (4) 0,0,0,0,0,0,0,0,12 ;?Z=$ + BYTE (4) 12,0,0,0,0,11,0,4,0 ;$ + BYTE (4) 0,0,0,0,5,3,1,0,11 ;***DMN + BYTE (4) 0,7,13,2,2,2,2,2,2 ;-,.,/,0,1,2,3,4,5 + BYTE (4) 2,2,2,2,6,0,14,10,15 ;6,7,8,9,:,;,<,=,> + BYTE (4) 0,0,1,1,1,1,1,1,1 ; , , ,B,C,D,E,F,G + BYTE (4) 1,1,1,1,1,1,1,1,1 ;H,I,J,K,L,M,N,O,P + BYTE (4) 1,1,1,1,1,1,1,1,1 ;Q,R,S,T,U,V,W,X,Y + BYTE (4) 1,14,0,0,0,10,0,1,1 ;Z,[, ,], ,?, ,A,B + BYTE (4) 1,1,1,1,1,1,1,1,1 ;C,D,E,F,G,H,I,J,K + BYTE (4) 1,1,1,1,1,1,1,1,1 ;L,M,N,O,P,Q,R,S,T + BYTE (4) 1,1,1,1,1,1,0,0,12 ;U,V,W,X,Y,Z, , ,$ + BYTE (4) 12,4 ;$,DEL + + SUBTTL ROUTINES TO HANDLE 0-9,A-Z,. CHARACTERS +;IN THE COMMAND STRING. IN NORMAL MODE, THE CHARACTER IS +;DEPOSITED TO FORM A SIXBIT SYMBOL. NOTE THAT "." IS LEGAL IN A PROGRAM NAME. +;E.G. <EXP.1,ALLIO.>, IF ENCLOSED IN< >. IN SWITCH MODE, THE PROPER +;INSTRUCTION IS EXECUTED WITH THE AID OF A DISPATCH TABLE. +;THEN, IF SWITCH MODE WAS ENTERED WITH A SLASH, FUDGE2 EXITS +;FROM SWITCH MODE. + +STORE: TRO F,INFOB ; INDICATE VALID INFO SEEN + SOJL B, GETCMN ; JUMP IF NO ROOM FOR CHARACTER + CAIGE A,141 ;WORRY ABOUT LOWER CASE LETTERS + SUBI A, 40 ;CONVERT FROM ASCII TO SIXBIT + IDPB A, E ;STORE CHARACTER ACCORDING TO BYTE + JRST GETCMN ;RETURN FOR NEXT CHARACTER + +SWTCHA: MOVSI SW, 072000 ;GET AN MTAPE OPCODE + CAIL A,141 ;ACCEPT LOWER CASE SWITCHES + SUBI A,40 + XCT SLIST-101(A) ;EXECUTE PROPER SWITCH INSTRUCTION + TRZE F, SLSHB ;SWITCH MODE ENTERED WITH A </>? + TRZ F, SWTB ;YES, EXIT FROM SWITCH MODE + JRST GETCMN ;RETURN FOR MORE CHARACTERS + + +;THE FOLLOWING THREE ROUTINES HANDLE THE CONTROL CHARACTERS IN +;THE COMMAND STRING WHICH CAUSE FUDGE2 TO ENTER INTO AND EXIT +;FROM SWITCH MODE. THERE ARE TWO TYPES OF SWITCH MODE, DEPENDING +;ON WHETHER THE IT IS ENTERED WITH A </> OR A <(>. + +SLASH: TRO F, SLSHB ;ENTER SWITCH MODE WITH A </> +SWTCH: TROA F, SWTB ;ENTER SWITCH MODE WITH A <(> +SWTCHE: TRZ F, SWTB ;EXIT FROM SWITCH MODE WITH A <)> + JRST GETCMN ;RETURN FOR MORE CHARACTERS + + SUBTTL LEFT ARROW PROCESSOR +;THE LEFT ARROW PROCESSOR IS ENTERED BY A DISPATCH FROM THE +;COMMAND STRING. IT SIGNALS THE END OF THE DESTINGATION DEVICE +;SPECIFICATION. IF THE SIXBIT SYMBOL ACCUMULATOR S IS NON- +;ZERO, IT ASSUMES THAT THE USER HAS OMITTED THE FILE NAME DE- +;LIMITER, AND CALLS THE FILE NAME ROUTINE. A PROGRAM NAME +;SPECIFICATION IN THE OUTPUT DEVICE IS ILLEGAL. +;FLAG SETTINGS: THE DESTINATION FLAG (DESTB) IS SET TO ONE, +;THE DEVICE FLAG IS SET TO ZERO, AND THE PROGR?M NAME FLAG (PROGB) +;IS SET TO ONE SO THAT THE FIRST DEVICE AFTER THE LEFT ARROW +;WILL NOT RESULT IN A CALL TO PUTDEV. +;IF NO OUTPUT DEVICE IS SEEN DSK IS ASSUMED. +;POPBAK IS SET SO CONTROL RETURNS FRON COLON VIA GETCHR + +NODEV: PUSH P,S ;SAVE FILE NAME + MOVSI S,(SIXBIT /DSK/);DSK IS DEFAULT DEVICE + TRO F,POPBAK ;RETURN FROM GETCHR + PUSHJ P,COLON ;FAKE A DEVICE SEEN + POP P,S ;RESTORE FILE NAME + POPJ P, ;RETURN + + +LFTARW: PUSHJ P, SEMICP ;DO A LOOKUP IF NECESSARY + TRZ F, DEVB ;SET THE DEVICE FLAG TO ZERO + TRO F, PROGB+DESTB ;SET PROGRAM AND DESTINATION FLAGS + JRST GETCHR ;RETURN FOR NEXT SYMBOL + + + SUBTTL THIS CODE PROCESSES PROJECT-PROGRAMMER NUMBERS + +LSQB: SETZ T, ;START WITH ZERO + PUSH P,T ;AND STORE IT +LSQB1: PUSHJ P,TTYIN ;GET NEXT CHAR. + CAIN A,"]" ;MATCHING SQB.? + JRST RSQB ;YES + CAIN A,"," ;COMMA? + JRST SQBCMA ;YES,SORT OUT XWD + CAIL A,"0" ;IS IT AN OCTAL NUMBER? + CAILE A,"9" ;... + JRST ERRISQ ;NO,ERROR + LSH T,3 ;MAKE SPACE FOR NEXT CHAR. + ADDI T,-60(A) ;ADDI IN NEW DIGIT + + + JRST LSQB1 ;BACK FOR MORE + +SQBCMA: HRLZM T,(P) ;STORE LEFT HALF ON STACK + SETZ T, ;START AFRESH + JRST LSQB1 ;AND GET RIGHT HALF + +RSQB: HRRM T,(P) ;PUT RIGHT HALF ON STACK + POP P,T ;AND POP XWD OFF + MOVEM T,PRJPRG ;SAVE DEFAULT PROJ-PROG + JUMPN S,GETCMN ;AFTER A FILE NAME IS ONLY TEMP. + MOVEM T,DEFPPN ;PERMANENT DEFAULT PPN + JRST GETCMN ;GET NEXT CHAR. + +TTYIN: SOSG IBUF+2 ;BUFFER EMPTY + INPUT 0, ;YES, FILL IT UP + ILDB A,IBUF+1 ;GET A CHARACTER + POPJ P, ;AND RETURN + +ERRISQ: MOVEI B,[ASCIZ /?Illegal project-programmer number/] + JRST ERROR + SUBTTL DISPATCH TABLE FOR SWITCHES + +SLIST: MOVEI DIS, APPEND ;A - APPEND INSTRUCTION + PUSHJ P, BSWTCH ;B - BACKSPACE ONE FILE + MOVEI DIS, DELCPY ;C - COPY AND DELETE LOCAL SYMBOLS ***VJC + MOVEI DIS, DELETE ;D - DELETE INSTRUCTION + MOVEI DIS, EXTRCT ;E - EXTRACT INSTRUCTION + JRST ERR16 ;F - ERROR + JRST ERR16 ;G - ERROR + JRST ERR16 ;H - ERROR + MOVEI DIS, INSERT ;I - INSERT INSTRUCTION + JRST ERR16 ;J - ERROR + PUSHJ P, KSWTCH ;K - SKIPFILE + MOVEI DIS, LIST ;L - LIST COMMAND + JRST ERR16 ;M - ERROR + JRST ERR16 ;N - ERROR + JRST ERR16 ;O - ERROR + JRST ERR16 ;P - ERROR + JRST ERR16 ;Q - ERROR + MOVEI DIS, REPLCE ;R - REPLACE INSTRUCTION + JRST ERR16 ;S - ERROR + PUSHJ P, TSWTCH ;T - SKIP TO LOGICAL END OF TAPE + JRST ERR16 ;U - ERROR + JRST ERR16 ;V - ERROR + PUSHJ P, WSWTCH ;W - REWIND MAG TAPE + MOVEI DIS,INDEX ;X - INDEX THIS LIBRARY + JRST ERR16 ;Y - ERROR + PUSHJ P, ZSWTCH ;Z - CLEAR DIRECTORY ON DECTAPE + + +;MAGTAPE AND DECTAPE DEVICE SWITCH HANDLERS +;THE FOLLOWING ROUTINES HANDLE THE B,K,T,W, AND Z SWITCHES +;BY ASSEMBLING THE PROPER CALL OR UUO INSTRUCTION. IF A +;DEVICE HAS ALREADY BEEN SEEN, THE CHANNEL NUMBER IS LOADED +;INTO THE COMMAND, AND THE INSTRUCTION IS EXECUTED. OTHER- +;WISE, EXECUTION IS DEFERRED BY SETTING A FLAG AND STORING +;THE PARTIALLY ASSEMBLED INSTRUCTION. THE INSTRUCTION IS +;EXECUTED LATER, AFTER THE DEVICE HAS BEEN SEEN. + +BSWTCH: ADDI SW, 1 ;CODE FOR BACKSPACE IS 17 +KSWTCH: ADDI SW, 6 ;CODE FOR SKIPFILE IS 16 +TSWTCH: ADDI SW, 7 ;CODE FOR SKIP TO L.E.O.T. IS 10 +WSWTCH: AOJA SW,.+2 ;CODE FOR REWIND IS 1 +ZSWTCH: MOVE SW, DTCLR ;DIFFERENT UUO FOR /Z + TRO F, SAVEB ;TURN ON THE SWITCH BIT + POPJ P, ;EXIT + SUBTTL PERIOD PROCESSOR +;THE PERIOD PROCESSOR IS CALLED BY A DISPATCH FROM GETCHR. IT +;PRECEDES A FILE NAME EXTENSION, UNLESS THE CONTEXT BIT CONB IS +;A ONE (CONB=1), IN WHICH CASE, THE PERIOD WAS FOUND INSIDE AN +;ANGLE BRACKET, INDICATING THAT IT IS PART OF A PROGRAM NAME. +;THE EXTENSION NAME IS GOTTEN BY ENTERING THE GETCHR ROUTINE +;WITH THE LENGTH SET TO THREE CHARACTERS, AND A BYTE POINTER +;SET TO STORE THE SYMOL IN ACCUMULATOR EXT. THE EXTENSION +;FLAG IS SET BY THIS ROUTINE. + +PERIOD: TRNE F, CONB ;IS PERIOD PART OF A PROGRAM NAME? + JRST STORE ;YES, STORE IT IN SYMBOL + TRO F, EXTB ;NO, SET EXTENSION FLAG + MOVE E, EXTPTR ;GET ANOTHER BYTE POINTER + MOVEI B, 3 ;ASSEMBLE A 3-CHARACTER WORD + JRST GETCMN ;BUT DONT DESTROY S + + SUBTTL ROUTINES TO PROCESS ANGLE BRACKETS +;THE FOLLOWING ROUTINES PROCESS THE LEFT ANGLE BRACKET "<" +;AND RIGHT ANGLE BRACKET ">" CHARACTERS. THEY ARE ENTERED BY +;A DISPATCH FROM THE GETCHR ROUTINE. THE ANGLE BRACKETS +;CAN ACT AS FILE NAME OR PROGRAM NAME DELIMITERS, SO A CHECK +;IS MADE TO SEE IF THE SYMBOL ACCUMULATOR IS NON-ZERO. THE +;MAIN FUNCTION OF THE ROUTINES IS TO SET OR CLEAR THE CONTEXT +;BIT CONB, WHOSE INTERPRETATION IS AS FOLLOWS: +;SETTING OF BIT MEANING +; 0 COMMAS DELIMIT FILE NAMES, AND PERIODS +; DELIMIT FILE NAME EXTENSIONS +; 1 COMMAS DELIMIT PROGRAM NAMES, AND PERIODS +; ARE PART OF A PROGRAM NAME + +LBRACK: TRNN F, DESTB ;IS THIS THE OUTPUT DEVICE? + JRST ERROR1 ;YES, SYNTAX ERROR + CAIN A,"[" ;PROJECT-PROGRAMMER PAIR? + JRST LSQB ;YES, HANDLE IT + MOVE 0,SDEVCHR ;GET SAVED DEV CHRSTCS + TLNN 0,DTABIT+DSKBIT ;LAST DEVICE DSK OR DTA? + JRST LBRACA ;NO + MOVE 0,LSTCHR ;GET LAST CHAR + CAIN 0,72 ;WAS IT COLON? + JRST ERROR1 ;YES,:< ILLEGAL +LBRACA: ;NO CONTINUE + PUSHJ P, SEMICP ;PROCESS THE FILE NAME + TRO F, CONB ;SET CONTEXT TO PROGRAM NAMES + AOS MATCH ;ADD ONE FOR EACH LEFT < ***VJC + JRST GETCHR ;RETURN FOR MORE CHARACTERS + +RBRACK: JUMPE S,.+2 ;IS THERE A SYMBOL TO HANDLE? + PUSHJ P,COMMAP ;YES,PROCESS THE FILE NAME + TRZ F,CONB ;SET CONTEXT TO FILE NAMES + SOS MATCH ;SUBTRACT ONE FOR EACH RIGHT > ***VJC + JRST GETCHR ;RETURN FOR MORE CHARACTERS + + SUBTTL COMMA PROCESSOR +;THE COMMA ROUTINE IS ENTERED BY A DISPATCH FROM GETCHR. +;IT DETERMINES WHETHER THE COMMA DELIMITS A FILE NAME OR A +;PROGRAM NAME, AND TRANSFERS CONTROL EITHER TO SEMICP OR TO +;COMMAP. + +COMMA: TRNN F, CONB ;FILE NAME OR PRGRAM NAME? + JRST COMMAX ;FILE NAME + PUSHJ P, COMMAP ;PROGRAM NAME + JRST GETCHR ;RETURN FOR MORE CHARACTERS + +COMMAX: PUSHJ P, SEMICP ;FILE NAME, DO A LOOKUP + SETZM PRJPRG ;CLEAR TEMP. PPN + JRST GETCHR ;RETURN FOR MORE CHARACTERS + + SUBTTL COLON PROCESSOR +;THIS ROUTINE IS ENTERED BY A DISPATCH FROM THE GETCHR +;ITS PURPOSE IS TO INITIALIZE DEVICES USED BY FUDGE2 AND +;ASSIGN THEM A CHANNEL NUMBER. IF THE DEVICE IS THE TTY, THE +;ROUTINE EXITS IMMEDIATELY, SINCE THE TTY HAS ALREADY BEEN +;INITIALIZED. IF A PROGRAM WAS NOT SEEN IN THE PREVIOUS DEVICE +;SPECIFICATION, THEN THE PRECEDING FILE HAD NO PROGRAMS +;FOLLOWING IT, AND A ZERO IS PLACED IN THE LIST STRUCTURE IN +;THE 3-WORD FILE BLOCK, SO THAT THE GETDEV ROUTINE WILL +;KNOW THAT THE ENTIRE FILE IS DESIRED. IF THE COLON ROUTINE +;IS CALLED WITH 0 IN ACCUMULATOR S, THE ROUTINE ASSUMES +;THAT SOMETHING LIKE "DTA3:FOO?DTA4:BAR<X,Y,Z>,MTA0:::/R" +;WAS TYPED, AND IT PUTS A PHONY FILE NAME IN FILBUF TO KEEP +;THE BOOK-KEEPING STRAIGHT. + +COLON: TRO F, DEVB ;DEVICE WAS SEEN IN THIS SPEC. + TRNE F,POPBAK ;DEFAULT "DSK" BEING SET + JRST .+3 ;SO DON'T CLEAR PROJ-PROG + SETZM DEFPPN ;CLEAR PERMANENT PPN + SETZM PRJPRG ;AND TEMP. ALSO + JUMPE S, COLONC ;NULL S IMPLIES FILES ON MTA,PTR + MOVEM S, COLON2 ;SAVE DEVICE FOR INIT + MOVE G, S ;GET A COPY OF THE DEVICE NAME + DEVCHR G, ;GET ITS CHARACTERISTICS + MOVEM G,SDEVCHR ;SAVE DEV CHRSTCS ***VJC + TLNE G,TTYBIT!LPTBIT ;IF EITHER TTY OR LPT + SETZM LEVEL ;DON'T DO EXTENDED LOOKUPS EVER + TLNE G, TTYBIT ;IS THE DEVICE A TTY? + JRST GETCHR ;YES, RETURN IMMEDIATELY + TRNN F, DESTB ;IS THIS THE OUTPUT DEVICE? + JRST COLON4 ;YES, GO CHECK SEPARATE THINGS + MOVE D, DEVBUF ;GET POINTER TO DEVICE NAME TABLE +COLON6: AOBJP D, COLON7 ;MORE DEVICES TO CHECK? + CAMN S, DEVBUF(D) ;HAS DEVICE ALREADY BEEN INITTED? + JRST GETCHR ;YES, DON'T RE-INIT IT + JRST COLON6 ;CHECK SOME MORE + +COLON7: MOVEM S, DEVBUF(D) ;STORE THE NEW DEVICE NAME + MOVSI A, -1 ;FIX UP THE COUNT IN THE BUFFER + ADDM A, DEVBUF ;... + TLNN G, INBIT ;CAN DEVICE DO INPUT? + JRST ERROR4 ;NO, ERROR + MOVEI S, 0 ;CLEAR OUT THE SYMBOL WORD + TRON F, PROGB ;WAS A PROGRAM NAME SEEN? + PUSHJ P, STNULL ;NO, STORE A NULL IN FILE BLOCK + MOVE A, D ;CALCULATE BUFFER HEADER POSITION + IMULI A, 3 ;3 WORDS PER BUFFER HEADER + ADDI A, IBUF ;ALL BUFFER HEADERS IN IBUF BLOCK +COLON8: AOS NUMDEV ;ONE MORE DEVICE SEEN + MOVEM A, COLON3 ;SAVE WORD FOR INIT + MOVEI A, 14 ;SET MODE TO BINARY + TLNE G,LPTBIT ;IS DEVICE THE LPT? + MOVEI A, 0 ;YES, RESTORE MODE TO ASCII + HRRM A, COLON0 ;SAVE MODE FOR INIT + DPB D, [POINT 4,COLON1,12] + XCT COLON1 ;DO OPEN ON DEVICE + JRST ERROR9 ;DEVICE NOT AVAILABLE + TRNN F, DESTB ;IS THIS THE OUTPUT DEVICE? + JRST GETCHR ;YES, NO MORE CHECKING - EXIT + TLNN G, DRCTRB ;DOES DEVICE HAVE A DIRECTORY? +COLONC: PUSHJ P, COLONB ;NO, GIVE IT A PHONY FILE NAME + JRST GETCHR ;RETURN FOR MORE CHARACTERS + +;OUTPUT DEVICE ONLY + +COLON4: MOVEM S, DEVBUF+1 ;SAVE THE DEVICE NAME + MOVEI D, 1 ;SET DEVICE NUMBER TO 1 + TLNN G, OUTBIT ;CAN DEVICE DO OUTPUT? + JRST ERROR4 ;NO, ERROR + TLNE G,DTABIT ;IS DEVICE DTA? + TRO F,DTAFLG ;YES, SET IN CASE INDEXING + MOVSI A, OBUF+3 ;CALCULATE BUFFER HEADER ADDRESS + TRO F, TTYCB ;INDICATE NON-TTY IO + JRST COLON8 ;ENTER MAIN PROCESSING LOOP + +COLONB: MOVEI S, 465757 ;FILE NAME OF "FOO" + ;FALLS THROUGH TO SEMICP ROUTINE + SUBTTL FILE NAME PROCESSOR +;THIS ROUTINE IS CALLED BY THE COMMA ROUTINE WHEN IT HAS +;BEEN DETERMINED THAT THE CONTEXT OF THE COMMA IS THAT OF A +;FILE NAME. NULL FILES ARE IGNORED BY THE ROUTINE, AND CAUSE +;AN IMMEDIATE RETURN TO GETCHR. FOR OUTPUT DEVICES, AN ENTER +;IS PERFORMED, WHILE FOR INPUT DEVICES, THE FLOW OF CONTROL IS +;AS FOLLOWS: +; 1. IF THE PREVIOUS FILE HAD NO PROGRAMS, A ZERO IS +; STORED IN THE 3RD WORD OF THE FILE BLOCK OF THAT +; FILE - THE WORD THAT ORDINARILY POINTS TO THE +; PROGRAM SUBLIST. +; 2. THE PROGRAM LIST FOR THE PREVIOUS FILE IS TERMINATED +; BY PUTTING A ZERO IN THE PROGRAM BUFFER, AND PUTTING +; A POINTER TO THE ZERO IN THE 3RD WORD OF THIS FILE +; BLOCK (NOT THE PREVIOUS BLOCK) +; 3. THE FILE NAME AND FILE NAME EXTENSION AND THE DEVICE +; CHANNEL NUMBER OF THE CURRENT FILE ARE STORED. + +SEMICP: TRNN F,DEVB ;HAS A DEVICE BEEN SEEN? + PUSHJ P,NODEV ;NO, SO ASSUME "DSK" + CAME SW,DTCLR ;Z SWITCH? YES, OPERATE ON OUTPUT ONLY + DPB D, [POINT 4,SW,12] + TRZE F, SAVEB ;IS THERE A SWITCH TO PROCESS? + XCT SW ;YES, EXECUTE IT + JUMPE S, SEMIC3 ;IGNORE NULL FILES + +SEMICA: TRZN F, EXTB ;EXPLICIT EXTENSION SEEN? + HRLI EXT, 624554 ;NO, REPLACE WITH REL" + TRNN F, DESTB ;OUTPUT DEVICE? + JRST SEMIC2 ;YES, PROCESS SEPARATELY + PUSH P, S ;SAVE FILE NAME + MOVEI S, 0 ;PUT IN A ZERO + TRZN F, PROGB ;WAS A PROGRAM SEEN IN PREVIOUS? + PUSHJ P, STNULL ;NO, CLOSE OUT PREVIOUS FILE + PUSHJ P, PUTPRG ;YES, CLOSE OUT PREVIOUS PRGLST +SEMIC4: POP P, S ;RESTORE FILE NAME + CAMN S,[12B5] ;IS IT * ?***DMN + JRST ASTRSK ;YES ***DMN + PUSHJ P, PUTFIL ;NO, STORE FILENAME + MOVE S,DEFPPN ;GET GLOBAL PPN + PUSHJ P,PUTPPN ;SAVE IT + MOVE S, EXT ;GET FILE NAME EXTENSION + PUSHJ P, PUTFIL ;STORE IT + HRRM D, (A) ;STORE CHANNEL NUMBER, ALSO + MOVE S,PRJPRG ;GET TEMP. PPN + PUSHJ P,PUTPPN ;SAVE IT ALSO + HRRZ S, PRGBUF ;GET A POINTER TO PROGRAM LIST + JRST PUTFIL ;STORE IT AND EXIT + +STNULL: HRRZ A, FILBUF ;GET ADDRESS OF CURRENT BLOCK + SETZM (A) ;CLOSE OUT THE FILE + POPJ P, ;EXIT + + SUBTTL ENTER ON OUTPUT DEVICE DIRECTORY + +SEMIC2: MOVEM S, EBLOCK ;SAVE FILE NAME FOR ENTER + MOVEM EXT, EBLOCK+1 ;SAVE FILE NAME EXTENSION + DPB D, [POINT 4,SEMIC1,12] + SETZM EBLOCK+2 ;CLEAR DATA AND PROTECTION + MOVE T,SDEVCHR ;GET CHARACTERISTICS + TLNN T,DSKBIT ;IF NOT A DSK + SETZM LEVEL ;CLEAR LEVEL D FLAG + SKIPE T,LEVEL ;EITHER -2 OR 0 + JRST DEFENT ;SAVE ENTRY BLOCK + XCT SEMIC1 ;DO AN ENTER ON THE OUTPUT DEVICE + JRST ERR14 ;DIRECTORY FULL +SEMIC3: POPJ P, ;EXIT + +DEFENT: MOVE T,[XWD EBLOCK,SVENTR] + BLT T,SVENTR+1 ;SAVE EBLOCK + MOVEI T,RIBALC ;SET FOR 11 WORD LOOKUP + MOVEM T,EBLOCK-2 ;IN EXTENDED LOOKUP + JRST SEMIC3 ;DEFER ENTRY TIL AFTER LOOKUP + SUBTTL THE PROGRAM NAME PROCESSOR +;THE COMMAP ROUTINE IS ENTERED BY A CALL FROM THE COMMA +;ROUTINE WHEN THE CONTEXT OF A COMMA IS THAT OF A PROGRAM NAME +;DELIMITER. ITS PURPOSE IS TO SAVE UP THE PROGRAM NAMES IT SEES +;IN THE PROGRAM BUFFER PRGBUF. THE PROGRAM NAMES ARE CONVERTED +;TO RADIX 50 REPRESENTATION, AND A CALL TO PUTPRG STORES THE +;PROGRAM NAME FOR LATER REFERENCE BY THE VARIOUS FUDGE SUBROUTINES +;------------------------------------------------------------------ +;RADIX50 - SIXBIT CODE CONVERSION TABLE + +;CHARACTER SIXBIT RADIX50 + +;0-9 20-31 01-12 +;A-Z 41-72 13-44 +;BLANK 00 00 +;PERIOD 16 45 +;$ 04 46 +;------------------------------------------------------------------- +;THE SYMBOL IS ASSUMED TO LEFT-JUSTIFIED UPON ENTERING, AND +;IS RIGHT-JUSTIFIED BEFORE CONVERSION TO RADIX 50. + +;FLAG SETTINGS: THE PROGRAM BIT PROGB IS SET TO 1, AND THE FILE +;BIT FILEB IS SET TO 0. +COMMAP: TRO F, PROGB ;SET PROGRAM BIT + TRNN F, DESTB ;IS THIS THE OUTPUT DEVICE? + JRST ERROR1 ;YES, SYNTAX ERROR + MOVE E, SYMPTR ;SET UP A BYTE POINTER TO S + MOVEI B, 6 ;SET COUNTER TO SIX + MOVEI C, 0 + JUMPE S, COMMA1 ;NULL SYMBOL? +COMMA3: TRNE S, 77 ;IS SYMBOL RIGHT-JUSTIFIED YET? + JRST COMMA1 ;YES, GO CONVERT TO RADIX 50 + ROT S, -6 ;NO, SHIFT IT ONE PLACE RIGHT + JRST COMMA3 ;CHECK AGAIN +COMMA1: IMULI C, 50 ;CONVERT TO RADIX50 + ILDB A, E ;PICK UP NEXT CHARACTER IN S + JUMPE A, COMMA4 ;A BLANK IS A BLANK IS A BLANK! + CAIN A, 4 ;IS IT A <$>? + ADDI A, 70 ;YES, COMPENSATE FOR SUBTRACTION + CAIN A, 16 ;IS IT A <.>? + ADDI A, 55 ;YES, COMPENSATE FOR SUBTRACTION + CAILE A, 31 ;TRANSLATE TO RADIX 50 CODE + SUBI A, 7 ;LETTER - SUBTRACT 26 + SUBI A, 17 ;NUMBER - SUBTRACT 17 + ADD C, A ;COMBINE WITH PARTIAL WORD +COMMA4: SOJG B, COMMA1 ;LOOP FOR SIX CHARACTERS + MOVE S, C ;PUT SYMBOL BACK IN S + JRST PUTPRG ;STORE IT AND EXIT + + SUBTTL THE ALTMODE PROCESSOR +;THE ALTMODE SUBROUTINE IS CALLED BY A DISPATCH FROM THE +;GETCHR ROUTINE WHEN A $ IS SEEN IN THE COMMAND STRING. IT SIGNALS +;THE END OF THE COMMAND STRING. A CHECK IS MADE ON THE SYNTAX +;OF THE COMMAND STRING, TO SEE IF AN OUTPUT DEVICE WAS SPEC- +;IFIED, AND TO SEE IF A COMMAND WAS GIVEN. THE LIST +;STRUCTURE FOR THE FILE NAMES AND PROGRAM NAMES IS TERMINATED +;BY TWO CALLS TO SEMICP, THE LAST OF WHICH HAS A FILE NAME OF 0. +;THE POINTERS AT THE TOP OF THE FILBUF,PRGBUF AND DEVBUF BUFFERS +;ARE RESET FOR LATER USER BY THE VARIOUS SUBROUTINES. + +ALTMOD: TRNN F,INFOB ; IS THERE A COMMAND? + JRST FUDGE2 ; NO, RESTART + PUSHJ P,CRLF ; ACKNOWLEDGE WITH A CR LF + TRO F,CRLFTY ;INDICATE CR,LF TYPED + PUSHJ P, SEMICP ;STORE THIS FILE NAME + MOVEI S, 0 ;MAKE A NULL FILE NAME + PUSHJ P, SEMICA ;TERMINATE THE LIST STRUCTURE + MOVE A, FILXWD ;SET UP A BLT POINTER TO FIX + BLT A, FILBUF+3 ;THE MASTER FILE PART,1ST WORD OF + SETZM FILBUF+4 ;FILBUF WAS JUNK,NOW 4TH WORD=0 + MOVEI A, FILBUF+5 ;RESET POINTER TO TRANS. FILES + MOVEM A, FILBUF ;... + MOVEI A,PPNBUF+1 ;RESET PPNBUF + MOVEM A,PPNBUF ;AS IT WAS AT START + JUMPE DIS, ERROR1 ;NO COMMAND SEEN? + TRNN F, DESTB ;NO OUTPUT FILE MENTIONED? + JRST ERROR1 ;SYNTAX ERROR + SKIPE MATCH ;LEFT < EQU RIGHT > ?***VJC + JRST ERROR1 ;SYNTAX ERROR ***VJC + TRNE F, TTYCB ;CHANGE OUTPUT IF ON TTY + TRO F, TTYOB ;... + ;AND FALL INTO INBUF0 + + +;SEE HOW MANY 204(8) WORD BLOCKS FIT IN JOBREL-JOBFF. +;DIVIDE THIS NUMBER BY THE NUMBER OF DEVICES +;IN DEVBUF TABLE. THIS GIVES THE NO. OF BLOCKS +;THAT CAN BE ASSIGNED TO EACH DEVICE, IF ZERO, +;NEED MORE CORE. THE REMAINDER OF THE DIVISION +;INDICATES EXTRA BLOCKS THAT MAY BE +;ALLOCATED TO OUTPUT OR INPUT DEVICES + +INBUF0: HRRZ A, JOBREL ;GET TOP OF JOB AREA + SUB A,JOBFF ;BUFFER AREA AVAILABLE + IDIVI A, 204 ;NUMBER OF DECTAPE BLOCKS + IDIV A,NUMDEV ;DIVIDED BY NUMBER OF DEVICES + JUMPE A,INBUFG ;NOT ENOUGH CORE + MOVEI E,2 ;START INBUFS ON DEVICE #2 + TRNE F, TTYCB ;IS OUTPUT ON TTY? + JRST INBUF1 ;NO, DO AN OUTBUF +INBUF2: MOVE C, A ;PICK UP NUMBER OF BLOCKS + SOJL A+1,.+2 ;ANY EXTRA BLOCKS? (REMAINDER) + AOJ C, ;YES, USE THEM + DPB E, [POINT 4, INBUF3,12] + XCT INBUF3 ;PERFORM THE INBUF + CAMGE E, D ;MORE DEVICES TO TAKE CARE OF? + AOJA E, INBUF2 ;YES, PROCESS THEM + JRST (DIS) ;NO, GO TO APPROPRIATE SUBROUTINE + + +INBUF1: MOVE C, A ;PICK UP NUMBER OF BLOCKS + SOJL A+1,.+2 ;ANY EXTRA BLOCKS? + AOJ C, ;YES, GIVE ONE TO OUTPUT +INBUF4: OUTBUF 1,(C) ;OUTBUF ON DEVICE #1 + JRST INBUF2 ;GO DO SOME INBUFS +;ASK FOR MORE CORE + +INBUFG: HRRZ A,JOBREL ;GET ANOTHER K OF CORE + ADDI A,2000 + CORE A, + JRST ERR22 ;NOT AVAILABLE + JRST INBUF0 ;TRY TO SET UP BUFFERS + SUBTTL FUDGE2 COMMAND PROCESSORS + +;LIST PROCESSOR +;THIS ROUTINE PROCESSES THE L COMMAND IN FUDGE2. BINARY +;PROGRAMS ARE READ, AND THEIR NAMES OUTPUT, UNTIL AN END +;OF FILE IS REACHED. + +LIST: TRNN F,TTYOB ;OUTPUT TO TTY? + JRST LIST1 ;MODE MUST BE ASCII + GETSTS 1,T ;GET STATUS + TRZN T,14 ;BINARY MODE SET? + JRST LIST1 ;NO, MUST BE ASCII + SETSTS 1,(T) ;CHANGE MODE TO ASCII + MOVSI T,700 ;SET UP NEW BYTE POINTER + MOVEM T,OBUF+4 ;SO WORD COUNT WILL BE CORRECT +LIST1: PUSHJ P, MSTGET ;GET THE MASTER DEVICE + JRST ERROR6 ;NOT ENOUGH ARGUMENTS + SETOM NOWARN ;DON'T GIVE WARNING MESSAGE IF INDEX SEEN +LIST2: PUSHJ P, READ ;READ A PROGRAM NAME + JRST EXIT ;ALL DONE + MOVE B, A ;GET THE PROGRAM NAME IN B + PUSHJ P, PTYPO ;TYPE IT OUT + PUSHJ P, CRLF ;TYPE A CRLF + JRST LIST2 ;RETURN FOR MORE PROGRAM NAMES + + +;REPLACE PROCESSOR +;THIS ROUTINE PROCESSES THE R COMMAND IN FUDGE2. THE TOTAL +;COMMAND STRING IS BROKEN INTO A LIST OF PROGRAMS FOR THE MASTER +;DEVICE, AND A LIST OF PROGRAMS FOR THE TRANSACTION DEVICES. +;THE ROUTINE READS THE MASTER FILE UNTIL ONE OF THE DESIRED +;REPLACEMENT PROGRAMS IS REACHED, THEN SWITCHES TO THE +;TRANSACTION DEVICE TO FIND THE PROGRAM WHICH IS TO REPLACE THE +;PROGRAM IN THE MASTER FILE. AFTER THE REPLACEMENT HAS BEEN +;EFFECTED, RESET IS CALLED TO RESTORE THE MASTER DEVICE TO ITS +;OLD POSITION. + +REPLCE: PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER DEVICE + JRST IPROC7 ;NO MORE, COPY REST OF MASTER + PUSHJ P, COPYTO ;COPY UP TO THE PROGRAM NAME + PUSHJ P, TRNGET ;GET A PROGRAM FROM TRANSACTION + JRST ERROR5 ;USER DID NOT SUPPLY ENOUGH + PUSHJ P, FINDCP ;FIND THE PROGRAM AND COPY IT + CAIN D, 2 ;HAS THE MASTER DEVICE BEEN MOVED? + PUSHJ P, RESET ;YES, RESET IT + JRST REPLCE ;LOOK FOR MORE REPLACEMENTS + SUBTTL INSERT PROCESSOR +;THIS SUBROUTINE PROCESSES THE I COMMAND IN FUDGE. IT READS AND +;WRITES PROGRAMS FROM THE MASTER FILE UNTIL IT FINDS THE +;PROGRAM NAME CURRENTLY POINTED TO, AT WHICH TIME IT STARTS READING +;FROM THE TRANSACTION DEVICE, MAKING AN INSERTION AT THE +;PROPER PLACE. + +INSERT: PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER FILE + JRST IPROC7 ;NO MORE, COPY REST OF MASTER + PUSHJ P, COPYTO ;COPY UP TO A PROGRAM NAME + MOVEM C, SAVEAC ;SAVE SPECIAL ACCUMULATOR + MOVE D, [XWD ENTBLK,SVEBLK] + BLT D, X+1(C) ;MOVE ENTRY BLOCK INTO SAFE PLACE + PUSHJ P, TRNGET ;GET NEXT TRANSACTION FILE + JRST ERROR5 ;NOT ENOUGH TRANSACTION FILES + PUSHJ P, FINDCP ;FIND TRANSACTION FILE AND COPY + CAIE D, 2 ;HAS MASTER FILE BEEN JIGGLED? + JRST FIXUP ;NO, RESTORE THE ENTRY BLOCK + PUSHJ P, RESET ;YES, RESET IT + JRST INSER1 ;WRITE OUTGO BACK FOR MORE INSERTIONS + +FIXUP: MOVE C, SAVEAC ;RESTORE SPECIAL AC + MOVS D, [XWD ENTBLK,SVEBLK] + BLT D, (C) ;RESTORE ENTRY BLOCK + MOVEI D, 2 ;SET UP CHANNEL AC + MOVEI DIS, 6 ;SET UP BUFFER HEADER INDEX +INSER1: PUSHJ P, WRITE ;WRITE OUT THE CURRENT FILE + JRST INSERT ;GO BACK FOR MORE INSERTIONS + +IPROC7: PUSHJ P, COPY ;COPY REST OF MASTER FILE + JRST EXIT ;EXIT + SUBTTL EXTRACT PROCESSOR +;THIS ROUTINE PROCESSES THE E COMMAND IN FUDGE. RATHER THAN +;ONE MASTER AND SEVERAL TRANSACTION FILES, ALL FILES ARE +;TREATED THE SAME. AFTER A CALL TO EITHER MSTGET OR TRNGET +;PROGRAMS ARE SEARCHED FOR AND WRITTEN ON THE OUTPUT DEVICE. + +EXTRCT: SETOM NOWARN ;NO WARNING MESSAGE + PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER DEVICE + JRST EPROC1 ;ALL DONE WITH MASTER DEVICE + JUMPN R,.+3 ;ANY PROGRAMS THIS FILE? **VJC + PUSHJ P,COPY ;NO, COPY ENTIRE FILE ***VJC + JRST EPROC1 ; ***VJC + PUSHJ P, FINDCP ;FIND THE PROGRAM AND COPY IT + JRST EXTRCT ;RETURN FOR MORE MASTER PROGRAMS +EPROC1: MOVEI A, FILBUF+5 ;GET PROGRAM FROM TRANS BUFFER + MOVEM A, FILBUF ;INITIALIZE POINTER FIRST +EPROC2: PUSHJ P, GETDEV ;... + JRST EXIT ;ALL DONE + JUMPN R,.+3 ;ANY PROGRAMS THIS FILE? ***VJC + PUSHJ P,COPY ;NO, COPY ENTIRE FILE ***VJC + JRST EPROC2 ; ***VJC + PUSHJ P, FINDCP ;FIND THE PROGRAM AND COPY IT + JRST EPROC2 ;RETURN FOR MORE TRANS FILES + SUBTTL DELETE PROCESSOR +;THIS ROUTINE PROCESSES THE D COMMAND IN FUDGE2. ONLY ONE +;INPUT FILE WILL BE READ, AND THE PROGRAM NAMES ASSOCIATED +;WITH ITS LIST WILL BE DELETED. + +DELETE: PUSHJ P, MSTGET ;GET A PROGRAM TO BE DELETED + JRST IPROC7 ;FINISH OFF THE MASTER FILE +DPROC1: PUSHJ P, READ ;READ A PROGRAM + JRST ERROR7 ;EOF - CANT FIND IT + CAMN R, A ;CORRECT PROGRAM? + JRST DELETE ;YES, GET THE NEXT ONE + PUSHJ P, WRITE ;NO, WRITE THIS ONE OUT + JRST DPROC1 ;TRY AGAIN + +;APPEND PROCESSOR +;THIS ROUTINE HANDLES THE A COMMAND IN FUDGE2. IT WILL COPY +;THE ENTIRE MASTER FILE, THEN START OBTAINING TRANSACTION +;DEVICES WITH CALLS TO TRNGET, APPENDING ONE OR MORE +;PROGRAMS FROM EACH FILE. + +APPEND: PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER FILE + JRST ERROR6 ;NOT ENOUGH ARGUMENTS + PUSHJ P, COPY ;COPY ENTIRE FILE + MOVEI A, FILBUF+5 ;INITIALIZE POINTER FOR TRANS + MOVEM A, FILBUF ;... +APROC3: PUSHJ P, GETDEV ;GET A PROGRAM NAME + JRST EXIT ;ALL DONE + PUSHJ P, FINDCP ;FIND THE PROGRAM AND COPY IT + JRST APROC3 ;GET NEXT APPENDATION + +;THIS ROUTINE PROCESSES THE X COMMAND (INDEX LIBRARY) +;AND FALLS INTO DELETE LOCAL SYMBOLS CODE. +;IF NOT DESIRED SKIP TO DELCPY+1 + +INDEX: MOVE A,DEVBUF+1 ;GET OUTPUT DEVICE + DEVCHR A, ;GET ITS CHARACTERISTICS + TLNN A,DSKBIT!DTABIT ;ONLY ALLOW DSK AND DTA AS LIBRARY DEVICES + JRST ERR23 ;GIVE ERROR MESSAGE + SETOM NOWARN ;NO WARNING MESSAGE IF /X + TRO F,XFLG ;SET INDEX FLAG +; TROA F,XFLG ;SET /X BUT NOT /C + +;DELETE LOCAL SYMBOLS AND COPY PROCESSOR +;THIS ROUTINE PROCESSES THE C COMMAND +;ONLY THE MASTER FILE IS HANDLED + +DELCPY: TRO F, NOLOCB ;SET FLAG TO DELETE LOCAL SYMBOLS + PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER FILE + JRST ERROR6 ;NOT ENOUGH ARGUMENTS + PUSHJ P, COPY ;COPY ENTIRE FILE + TRNN F,XFLG ;INDEX FLAG ON? + JRST EXIT ;ALL DONE + JRST INDEX3 ;YES DO PASS 2 + SUBTTL FUDGE2 IO SUBROUTINES + +;ROUTINES TO COPY FILES, COPY UP TO A GIVEN PROGRAM IN A FILE +;AND TO FIND A GIVEN PROGRAM IN A FILE AND COPY IT. + +;THE COPY ROUTINE WILL COPY BINARY PROGRAMS FROM WHEREVER THE +;INPUT DEVICE HAPPENS TO BE WHEN IT IS CALLED, UP TO THE +;END OF FILE. SINCE COPY IS CALLED WITH A PUSHJ, THE END-OF- +;FILE EXIT IN INGET WILL EXIT TO THE PLACE THAT CALLED COPY. + +COPY: PUSHJ P, READ ;READ A PROGRAM + POPJ P, ;EXIT WHEN ALL THROUGH FILE + PUSHJ P, WRITE ;WRITE OUT THE PROGRAM + JRST COPY ;RETURN FOR MORE PROGRAMS + +;THE COPYTO ROUTINE WILL READ AND WRITE PROGRAMS FROM THE +;INPUT DEVICE UNTIL THE PROGRAM WHOSE NAME IS IN ACCUMULATOR +;R IS FOUND, AT WHICH TIME IT EXITS + +COPYTO: PUSHJ P, READ ;READ A PROGRAM + JRST ERROR7 ;EOF - CANT FIND IT + CAMN R, A ;IS IT THE CORRECT PROGRAM? + POPJ P, ;YES, EXIT + PUSHJ P, WRITE ;NO, WRITE IT OUT + JRST COPYTO ;READ SOME MORE PROGRAMS + +;THE FINDCP ROUTINE WILL SEARCH THE INPUT FILE FOR A PROGRAM +;WHOSE NAME IS IN ACCUMULATOR R, AND HAVING FOUND IT, WILL +;WRITE IT OUT. IF THE CONTENTS OF AC R ARE ZERO, THE ENTIRE +;FILE IS COPIED. + +FINDCP: JUMPE R, COPY ;COPY ENTIRE FILE? +FIND1: PUSHJ P, READ ;READ A PROGRAM FROM INPUT FILE + JRST FIND2 ;EOF, TRY REWINDING AND TRYING AGAIN + CAME R, A ;IS THIS THE RIGHT ONE? + JRST FIND1 ;NO, TRY AGAIN + JRST WRITE ;YES, WRITE IT OUT AND EXIT + +FIND2: JUMPE A,ERROR7 ;V3 IF EOF OUTPUT ERROR MESSAGE + PUSHJ P, BACKSP ;BACKSPACE THE MAG TAPE + HRRZ A, FILBUF ;PICK UP THE FILE POINTER + HLLM A, 3(A) ;CLEAR THE LOOKUP FLAG FOR DECTAPE + PUSHJ P, GETDEV ;SET UP THE PROGRAM AGAIN + JRST ERROR3 ;IMPOSSIBLE ERROR RETURN +FIND3: PUSHJ P, READ ;READ A PROGRAM FROM INPUT FILE + JRST ERROR7 ;EOF - REALLY CANT FIND IT + CAME R, A ;IS THIS THE RIGHT ONE? + JRST FIND3 ;NO, TRY AGAIN + JRST WRITE ;YES, WRITE IT OUT AND EXIT + ;ROUTINE MSTGET RETRIEVES A PROGRAM NAME FROM THE MASTER +;DEVICE SPECIFICATIONS. IT SAVES THE POINTER IN FILBUF, +;CHANGES IT TO POINT TO ITS OWN BLOCK, THEN CALLS GETDEV + +MSTGET: MOVE A, FILBUF ;GET THE POINTER TO CURRENT FILE + MOVEM A, FILSAV ;SAVE THE CURRENT POINTER + MOVEI A, FILBUF+1 ;CHANGE IT TO POINT TO MASTER + MOVEM A, FILBUF ;... + JRST GETDEV ;CALL COMMON ROUTINE + + +;ROUTINE TRNGET RETRIEVES A PROGRAM NAME FROM THE TRANSACTION +;FILES. IT RESETS THE POINTER THAT MSTGET WIPED OUT, AND CALLS +;THE COMMON PROGRAM RETRIEVAL PROGRAM GETDEV. + +TRNGET: MOVE A, FILSAV ;GET SAVED POINTER + MOVEM A, FILBUF ;RESTORE IT TO ITS PLACE + JRST GETDEV ;CALL COMMON ROUTINE + +;ROUTINE RESET RESTORES THE STATE OF THE MASTER DEVICE TO +;WHAT IT WAS JUST AFTER THE LAST TIME MSTGET WAS CALLED. IT +;SETS THE POINTER OF THE MASTER FILE BACK TO THE PREVIOUS +;PROGRAM, CALLS MSTGET, AND FINDS THE PROGRAM AGAIN + +RESET: MOVEI A,FILBUF+5 ;START OF TRANSACTION LIST ***DMN + HLLM A, FILBUF+3 ;NOW CLEAR LOOKUP FLAG ON MASTER + SOS FILBUF+3 ;MOVE POINTER BACK ONE PROGRAM +RESET2: SKIPN (A) ;ANY TRANSACTION FILES ? ***DMN + JRST RESET3 ;NO-ALL DONE ***DMN + HLLM A,2(A) ;CLEAR LOOKUP FLAG ON IT ***DMN + ADDI A,3 ;NEXT FILE ***DMN + JRST RESET2 ;GO BACK FOR MORE ***DMN +RESET3: PUSHJ P, MSTGET ;SET UP THE MASTER DEVICE + JRST ERROR3 ;FUDGE ERROR-NO MASTER! + PUSHJ P, BACKSP ;BACKSPACE IN CASE ITS A MAG TAPE + MOVE A, FILSAV ;DIDDLE THE POINTERS, BECAUSE MSTGET + MOVEM A, FILBUF ;WILL BE CALLED AGAIN IMMEDIATELY +RESET1: PUSHJ P, READ ;READ A PROGRAM FROM MASTER FILE + JRST ERROR3 ;FUDGE ERROR-CANT FIND PROGRAM + CAME R, A ;IS IT THE RIGHT PROGRAM NAME? + JRST RESET1 ;NO, LOOK AGAIN + POPJ P, ;YES, EXIT +BACKSP: DPB D, [POINT 4, BACK0,12] + DPB D, [POINT 4, BACK1, 12] + DPB D, [POINT 4, BACK2,12] + DPB D, [POINT 4,BACK3,12] + JRST BACK0 ;GO TO POSITION MAGTAPE + SUBTTL COMMON PROGRAM RETRIEVAL PROGRAM GETDEV. +;THIS PROGRAM USES VARIOUS POINTERS AND BITS OF INFORMATION +;IN FILBUF AND PRG BUF TO RETURN TO THE USER A RADIX 50 +;PROGRAM NAME AS SEEN IN THE COMMAND STRING. THE STRUCTURE +;OF INFORMATION IN THESE TWO BUFFERS IS AS FOLLOWS: + +;FILBUF IS A LIST OF 3-WORD BLOCKS OF DATA ABOUT EACH FILE. +;THE FIRST WORD IN FILBUF IS A POINTER WHICH POINTS TO THE +;FIRST WORD OF THE BLOCK CURRENTLY BEING WORKED ON BY +;THE VARIOUS SUBROUTINES OF FUDGE. WHEN THE COMMAND STRING +;IS BEING PROCESSED AND INFORMATION IS BEING STORED IN FILBUF, +;THIS POINTER IS IN THE FORM OF AN AOBJN WORD SO THAT A CHECK +;CAN BE MADE FOR BUFFER OVERFLOW. THE CONTENTS OF THE 3-WORD +;FILE BLOCK IS AS FOLLOWS: +; 1ST WORD - SIXBIT FILE NAME, OR ZERO IF THIS IS THE +; END OF THE LIST . +; 2ND WORD - LEFT HALF CONTAINS A SIXBIT FILE NAME EXTENSION +; RIGHT HALF CONTAINS THE CHANNEL NUMBER FOR +; THIS FILE. +; 3RD WORD - LEFT HALF IS ZERO IS A LOOKUP HAS NOT BEEN +; DONE ON THIS FILE NAME, AND -1 IF IT HAS. A +; LOOKUP CAN THUS BE FORECED BY ZEROING OUT THE +; LEFT HALF OF THE WORD. +; RIGHT HALF CONTAINS A POINTER TO THE LAST +; PROGRAM NAME IN PRGBUF THAT WAS REFERENCED. THE +; RIGHT HALF IS ZERO IF THERE ARE NO PROGRAM +; NAMES ASSOCIATED WITH THE FILE. + +;PRGBUF IS A LIST OF PROGRAM NAMES USED BY THE FILES IN FILBUF. +;THE FIRST WORD OF PRGBUF IS A POINTER WORD WHOSE USE IS THE +;SAME AS THE FIRST WORD OF FILBUF.THE ENTRIES IN PRGBUF CONSIST +;OF A LIST OF RADIX50 SYMBOLS, ONE TO A WORD, TERMINATED BY +;A ZERO WORD. + +;FUDGE2 WORKS WITH FILBUF AND PRGBUF IN TWO DISTINCTLY +;DIFFERENT WAYS: ONCE WHEN IT IS PROCESSING THE COMMAND STRING +;AND STORING THE VARIOUS FILE NAMES AND PROGRAM NAMES, AND +;ONCE WHEN IT IS USING THE INFORMATION IN THE FILES TO PROCESS +;A FUDGE COMMAND. WHEN A FILE NAME IS SEEN IN THE COMMAND STRING, +;THE STATUS OF THE PREVIOUS FILE IS CHECKED. IF THE PREVIOUS +;FILE HAD NO PROGRAM NAMES, THEN ITS POINTER WORD (3RD WORD) IS +;ZEROED OUT TO INDICATE THE ABSCENCE OF ANY PROGRAMS IN PRGBUF. +;OTHERWISE, PROCESSING BEGINS ON THE CURRENT FILE: THE FILE +;NAME, FILE NAME EXTENSION, AND CHANNEL NUMBER ARE STORED. THE +;CONTENTS OF THE POINTER WORD IN PRGBUF ARE STORED IN THE +;POINTER WORD OF THE FILE BLOCK +;ROOM IS LEFT IN FILBUF SO THAT WHEN THE CARRIAGE RETURN IS +;SEEN, FUDGE2 CAN SHUFFLE THE FIRST FILE BLOCK UP ONE WORD AND +;INSERT ANOTHER NULL. THE EFFECT OF THIS KLUDGE IS THAT WE NOW +;HAVE TWO SEPARATE LISTS IN FILBUF, A MASTER LIST, AND A +;TRANSACTION LIST. + GETDEV: MOVE B, FILBUF ;GET POINTER TO FILE BLOCK + SKIPN (B) ;END OF LIST? (ZERO TERMINATES) + POPJ P, ;YES, EXIT + MOVE A,PPNBUF ;GET POINTER TO PPN'S + MOVE D,(A) ;GET GLOBAL PPN + MOVEM D,DEFPPN ;SAVE AS DEFAULT PPN + MOVE D,1(A) ;GET TEMP. PPN + MOVEM D,PRJPRG ;SAVE AS TEMP. PPN + ADDI A,2 ;INCREMENT POINTER + MOVEM A,PPNBUF ;SAVE NEW POINTER + HRRZ D, 1(B) ;GET DEVICE NUMBER FOR THIS DEVICE + SKIPL 2(B) ;HAS A LOOKUUP BEEN DONE? + JRST GET3 ;NO, GO DO LOOKUP +GET0: MOVEI DIS, 3 ;SET UP AC DIS + IMUL DIS, D ;C(DIS) = 3*C(D) + HRRZ A, 2(B) ;GET POINTER TO PROGRAM NAMES + JUMPE A, GET1 ;NULL PROGRAM LIST (NO POINTER)? + AOS A, 2(B) ;NO, INCREMENT POINTER BY ONE + MOVE R, (A) ;GET A PROGRAM NAME + JUMPN R, CPOPJ1 ;END OF PROGRAM LIST? + ADDI B, 3 ;YES, INCREMENT FILBUF POINTER + MOVEM B, FILBUF ;SAVE NEW POINTER + JRST GETDEV ;TRY NEXT FILE BLOCK + +GET1: MOVEI R, 0 ;NO PROGRAMS, RETURN ZERO + ADDI B, 3 ;MOVE FILBUF POINTER TO NEXT BLOCK + MOVEM B, FILBUF ;SAVE THE POINTER +CPOPJ1: AOSA (P) ;GOOD RETURN +POPOUT: POP P,(P) ;POP UP ONE LEVEL +CPOPJ: POPJ P, ;EXIT + +GET3: DPB D, [POINT 4,GET3A,12] + XCT GET3A ;CLOSE CURRENT FILE BEFORE DOING... + MOVE A, (B) ;GET FILE NAME OF NEXT FILE + MOVEM A, EBLOCK ;SET UP FOR LOOKUP + HLLZ A, 1(B) ;GET FILE NAME EXTENSION + MOVEM A, EBLOCK+1 ;SAVE IT FOR LOOKUP + HRROS A, 2(B) ;SET FLAG IN LEFT HALF OF 3RD WORD + DPB D, [POINT 4,GET4A,12] + SKIPN A,PRJPRG ;GET TEMP. PPN + MOVE A,DEFPPN ;USE PERMANENT IF NO TEMP. + MOVEM A,EBLOCK+3 ;SAVE IT + MOVEM A,EBLOCK-1 ;FOR LEVEL D ALSO + MOVE A,DEVBUF(D) ;GET DEVICE + DEVCHR A, ;GET ITS CHARACTERISTICS + TLNN A,DSKBIT ;IF NOT A DSK + TDZA T,T ;NO EXTENDED LOOKUP + MOVE T,LEVEL ;GET LEVEL +GET4: XCT GET4A ;DO A LOOKUP ON NEW FILE + JRST .+3 ;NOT FOUND, TRY WITH BLANKS EXT. + SETZM EBLOCK+3 ;CLEAR PROJ-PROG + JRST DOENTR ;SUCCESSFUL RETURN FROM LOOKUP + HLRZ A, 1(B) ;GET THE FILE NAME EXTENSION + CAIE A, 624554 ;IS IT "REL" ? + JRST ERROR8 ;NO, DON'T GIVE HIM ANOTHER CHANCE + HLLM A, 1(B) ;YES, TRY LOOKUP WITH 0 EXTENSION + SETZM EBLOCK+1 ;CLEAR EXTENSION IN LOOKUP BLOCK + JRST GET4 ;TRY AGAIN + +DOENTR: SKIPN LEVEL ;IF NOT LEVEL D + JRST DOXSWT ;ENTER DONE ALREADY + MOVS T,[XWD EBLOCK,SVENTR] + BLT T,EBLOCK+1 ;RESTORE EBLOCK + MOVSI T,777000 ;MASK FOR PROTECTION + ANDM T,EBLOCK+2 ;CLEAR DATE AND TIME + SETZM EBLOCK-1 ;CLEAR PPN + MOVE T,LEVEL + XCT SEMIC1 ;DO ENTER + JRST [HRRZ T,EBLOCK+1 ;GET ERROR CODE + CAIN T,17 ;PARTIAL ALLOCATION ONLY? + JRST .+1 ;YES, JUST CONTINUE + JRST ERR14] ;ERROR + SETZM LEVEL ;NEVER AGAIN +DOXSWT: TRNE F,XFLG ;INDEX FLAG ON? + PUSHJ P,INDEX0 ;YES, SET UP POINTERS AND CORE + JRST GET0 ;AND CONTINUE + +;SHORT ROUTINES TO STORE WORDS IN THE FILE BUFFER AND PROGRAM +;BUFFER +;ROUTINE PUTFIL STORES THE CONTENTS OF ACCUMULATOR S IN THE +;NEXT FREE LOCATION IN FILBUF. IT CHECKS FOR OVERFLOW. + +PUTFIL: MOVE A, FILBUF ;GET POINTER WORD FOR FILBUF + AOBJP A, ERROR2 ;INCREMENT, CHECK FOR OVERFLOW + MOVEM A, FILBUF ;SAVE NEW POINTER + MOVEM S, (A) ;SAVE FILE NAME ENTRY + POPJ P, ;EXIT + + +;ROUTINE PUTPRG STORES THE CONENTS OF ACCUMULATOR S IN THE +;NEXT FREE LOCATION IN PRGBUF. IT CHECKS FOR OVERFLOW. + +PUTPRG: MOVE A, PRGBUF ;GET POINTER WORD FOR BUFFER + AOBJP A, ERROR2 ;INCREMENT, CHECK FOR OVERFLOW + MOVEM A, PRGBUF ;SAVE NEW POINTER WORD + MOVEM S, (A) ;SAVE PROGRAM NAME + POPJ P, ;EXIT + +;ROUTINE PUTPPN STORE THE TWO PPPN NUMBER IN PPNBUF + +PUTPPN: MOVE A,PPNBUF ;GET POINTER WORD FOR BUFFER + AOBJP A,ERROR2 + MOVEM A,PPNBUF ;SAVE NEW POINTER WORD + MOVEM S,(A) ;SAVE PPN + POPJ P, ;EXIT + SUBTTL ROUTINE TO INPUT ONE PROGRAM AT A TIME +;THE FIRST WORD THAT THE PROGRAM READS WILL BE A BLOCK HEADER. +;BLOCKS ARE READ UNTIL AN ENTRY BLOCK IS FOUND, AND THE ENTIRE +;ENTRY BLOCK IS STORED IN AN INTERNAL BUFFER,SIZE PERMITTING. +;FOLLOWING THAT, THE NAME BLOCK IS READ, AND THE NAME OF THE +;PROGRAM IS RETURNED IN ACCUMULATOR A. PROVISION IS MADE FOR +;BLOCKS OF WORD COUNT ZERO. THE SECTION OF CODING AROUND READ2 +;DELIBERATELY OMITS THIS CHECK IN ORDER TO READ IN THE NEXT +;BLOCK HEADER WITH A MINIMUM OF INSTRUCTIONS. ORDINARILY, EACH +;PROGRAM WILL BEGIN WITH AN ENTRY BLOCK, BUT THE ROUTINE WILL +;ALSO ALLOW THE PROGRAM TO BEGIN WITH A NAME BLOCK IF NO +;ENTRY BLOCK IS SEEN. + +READ: MOVEI C, ENTBLK ;SET UP POINTER TO BUFFER +READ6: JSR GETIN ;GET A BLOCK HEADER + HLRZ B, A ;GET THE BLOCK CODE + CAIN B,14 ;IS IT AN INDEX BLOCK? + JRST READX ;YES, GET RID OF IT + CAIN B, 4 ;IS IT AN ENTRY BLOCK? + JRST READ1 ;YES, PROCESS IT + CAIN B, 6 ;IS IT A NAME BLOCK? + JRST READ7 ;YES, PROCESS IT + CAIN B,400 ;F4 SIGNAL WORD? + JRST F4I ;YES, PROCESS F4 BLOCKS + PUSHJ P, COUNT ;CALCULATE SIZE OF BLOCK + JUMPE B, READ6 ;WORD COUNT OF ZERO? +READ6A: CAML B, IBUF+2(DIS) ;DOES BLOCK OVERLAP IO BUFFERS? + JRST READ6B ;ADJUST B AND GET ANOTHER BUFFER + MOVE A, IBUF+2(DIS) ;NO, DIDDLE BUFFER HEADER COUNT + SUB A, B ;ELIMINATE BLOCK OF LENGTH C(B) + MOVEM A, IBUF+2(DIS) ;PUT NEW WORD COUNT BACK + ADDM B, IBUF+1(DIS) ;MOVE BYTE POINTER PAST BLOCK + JRST READ6 ;GET NEXT BLOCK +READ6B: SUB B, IBUF+2(DIS) ;ACCOUNT FOR REST OF THIS BUFFER + SETZM IBUF+2(DIS) ;FORCE ANOTHER INBUF + JSR GETIN ;GET ANOTHER BUFFER OF INPUT + JRST READ6A ;CHECK AGAIN + + +; THIS CODE MODIFIED 3-21-71 BY DCS (STANFORD) TO HANDLE +; MORE THAN ONE ENTRY BLOCK (FAIL AND SAIL BOTH ISSUE +; MULTIPLE ENTRY BLOCKS). + +SIZZ==SIZE-<<SIZE+21>/22>-4 ;ACCOUNT FOR HDR BLKS, RELOC WRDS, PROGNAME +READ1: SETZM ENTBLK ;SAME AS (C) AT PRESENT + HRLI C,-1 ;AOBJN WILL OVERFLOW FIRST TIME + +; BACK HERE FOR EACH NEW ENTRY BLOCK + +READ2: MOVNI B,400000(A) ;-1 IN LH, 377777-CT IN RH + HRRZS A + ADD A,ENTBLK ;NEW COUNT IF IT FITS + CAILE A,SIZZ ;TOO MUCH NOW? + TROA F,ERRB ; YES, MARK ENTRY BLOCK TOO BIG + MOVEM A,ENTBLK ;NO, UPDATE USED COUNT +; HERE FOR EACH NEW WORD +READ23: TRNN B,377777 ;END THIS LOADER BLOCK? + JRST READ55 ; YES, CHECK NEXT + AOBJN B,NXTWRD ;TIME FOR SOME RELOC BITS? + JSR GETIN ;YES, GET THEM AND TOSS THEM + HRLI B,-22 ;AND RESET COUNT +NXTWRD: JSR GETIN ;GET A DATA WORD +; (ROUTINE COURTESY OF DEC LOADER) + + AOBJN C,READ22 ;NEED TO INSERT RELOC WORD? + TRNN F,ERRB ;YES, UNLESS NOT INSERTING + SETZM (C) ; ALL ENTRY RELOCS ARE 0 + ADD C,[XWD -22,1] ;LH 0 BEFORE ADD, SET UP NEXT +READ22: TRNN F,ERRB ;ARE WE INSERTING? + MOVEM A,(C) ; YES, PUT IT AWAY + JRST READ23 ;LOOP + + +READ55: JSR GETIN ;GET NEXT HEADER WORD + HLRZ B,A ;TYPE + CAIN B,4 ;ANOTHER ENTRY? + JRST READ2 ; YES, STORE IT + +; PROGRAM NAME -- FINISH ENTRY BLOCK OUT + MOVEI B,4 ;ENTRY BLOCK TYPE + HRLM B,ENTBLK ;NOW CORRECT TYPE,,COUNT + HRLI C,0 ;CLEAR LH COUNT + AOJA C,READ7 ;STORE NAME BLOCK HEADER AND CONTINUE +; END OF DCS PATCH 3-21-71 + READ5: PUSHJ P, COUNT ;CALCULATE SIZE OF BLOCK + JUMPE B, READ9 ;WORD COUNT OF ZERO? +READ3: JSR GETIN ;GET A WORD + MOVEM A, (C) ;STORE IT + AOJ C, ;INCREMENT BUFFER POINTER + SOJG B, READ3 ;DONE READING YET? + CAIN G+1, 2 ;IS THERE A COMMON WORD? + MOVE A, -2(C) ;GET PROGRAM NAME IN A + JUMPE A, READ9 ;IGNORE WORD OF ZERO + MOVE B, A ;GET RID OF EXTRA BLANKS +READ8: IDIVI B, 50 ;TRY DIVIDING IT BY 50 + JUMPN B+1, READ9 ;FILTERED OUT ALL THE BLANKS? + MOVE A, B ;NO, STORE SYMBOL AGAIN + JRST READ8 ;TRY ANOTHER DIVISION + +READ9: TRNE F, ERRB ;ERROR CONDITION? + JRST ERR10 ;YES + TRNN F,XFLG ;INDEX FLAG ON? + JRST CPOPJ1 ;NO, SKIP EXIT + JRST INDEX1 ;YES SAVE ENTRIES + +READ7: MOVEM A, (C) ;STORE NAME BLOCK HEADER + AOJA C, READ5 ;GO READ NAME BLOCK + +F4I: TRO F,F4IB ;DONT OUTPUT DURING F4 SEARCH + PUSH P,C ;SAVE ENTRY BLOCK + PUSHJ P,F4 ;PASS F4 BLOCKS + POP P,C ;RESTORE ENTRY BLOCK + TRZ F,F4IB ;TURN OFF IGNORE BIT + JRST READ6 ;GO PROCESS NEXT PROGRAM + +READX: SKIPN NOWARN ;DO WE WANT A MESSAGE? + TTCALL 3,[ASCIZ /WARNING NO INDEX ON OUTPUT FILE - CONTINUING +/] + SETOM NOWARN ;ONCE IS ENOUGH + SETZM IBUF+2(DIS) ;FORCE ANOTHER INBUF + JSR GETIN ;INPUT THE NEXT BLOCK + SOS IBUF+2(DIS) ;WORD COUNT OUT BY ONE + JRST READ6+1 ;AND RETURN TO CODE + SUBTTL ROUTINE TO OUTPUT ONE PROGRAM AT A TIME +;THE WRITE SUBROUTINE WILL OUTPUT AN ENTIRE BINARY RE- +;LOCATABLE PROGRAM AS WRITTEN BY MACRO6. IT ASSUMES THAT THE +;ENTRY BLOCK AND NAME BLOCK FOR THE PROGRAM ARE IN THE +;INTERNAL BUFFER ENTBLK, AND OUTPUTS THESE BEFORE PICKING UP +;MORE BLOCKS FROM THE CURRENT INPUT DEVICE. BLOCKS ARE READ +;AND WRITTEN UNTIL THE END BLOCK HAS BEEN PROCESSED. PROVISION I +;IS MADE FOR BLOCKS WITH A WORD COUNT OF ZERO. + +WRITE: SUBI C, ENTBLK ;GET COUNT OF ENTRY BLOCK + JUMPE C, WRITE3 ;NOTHING TO OUTPUT? + MOVEI B, ENTBLK ;GET A POINTER IN B +WRITE2: MOVE A, (B) ;GET A BINARY WORD + PUSHJ P, OUT ;OUTPUT IT + AOJ B, ;INCREMENT POINTER + SOJG C, WRITE2 ;KEEP GOING UNTIL BUFFER EMPTY +WRITE3: JSR GETIN ;GET A BLOCK HEADER + HLRZ B,A ;GET THE BLOCK TYPE CODE ***VJC + TRNN F,NOLOCB ;DELETE LOCAL SYMBOLS? ***VJC + JRST .+3 ;NO + CAIN B,2 ;IS IT A SYMBOL BLOCK? ***VJC + JRST DELLOC ;GO DELETE LOCAL SYMBOL ***VJC + ;COME BACK TO WRITE3 ***VJC + ;UNLESS EXIT ON END-OF-FILE ***VJC + + PUSHJ P, OUT ;OUTPUT IT + CAIN B, 400 ;IS THIS A FORTRAN IV SIGNAL WORD? + JRST F4 ;YES, PROCESS F4 OUTPUT + MOVEM B, SAVEBT ;SAVE THE BLOCK TYPE + PUSHJ P, COUNT ;NO, GET SIZE OF BLOCK + JUMPE B, WRITE3 ;WORD COUNT OF ZERO? +WRITE4: JSR GETIN ;OUTPUT THE BLOCK + PUSHJ P, OUT ;... + SOJG B, WRITE4 ;LOOP BACK UNTIL DONE + MOVE A, SAVEBT ;RETRIEVE THE BLOCK TYPE + CAIE A, 5 ;WAS IT AN END BLOCK? + JRST WRITE3 ;NO, RETURN FOR MORE BLOCKS + POPJ P, ;YES, EXIT + +;THE COUNT SUBROUTINE CALCULATES THE LENGTH OF THE VARIOUS +;BLOCKS READ BY THE WRITE AND READ SUBROUTINES. THE POSITIVE +;WORD COUNT IS FOUND IN THE RIGHT HALF OF THE ENTRY BLOCK +;HEADER, WHICH IS ASSUMED TO BE IN AC A UPON ENTERING. THE +;LENGTH WILL BE RETURNED IN AC B, AND INCLUDES THE DATA WORDS +;(SYMBOLS, ENTRY WORDS, ETC.) AND THE SUBHEADERS, OF WHICH +;THERE IS ONE FOR EVERY 18 (DECIMIAL) DATA WORDS. THE BLOCK +;HEADER IS DESTROYED, AND IS NOT INCLUDED IN THE LENGTH. + +COUNT: HRRZ G, A ;GET NUMBER OF WORDS + IDIVI G, 22 ;1SUBHEADER/18 DATA WORDS + ADDI G,(A) ;ADD INTO WORD COUNT + JUMPE G+1,.+2 ;1 EXTRA SUBHEADER FOR + AOJ G, ;STRAY ONES + MOVE B, G ;RESULTS IN AC B + POPJ P, ;EXIT + SUBTTL ROUTINE TO HANDLE FORTRAN OUTPUT + +;SUBSECTION OF THE WRITE ROUTINE TO HANDLE OUTPUT FROM THE +;FORTRAN IV COMPILER. THE MAIN OBJECT OF THE ROUTINE IS TO +;LOOK FOR THE END BLOCK. OTHER BLOCKS ARE MERELY COPIED OUT. +;THE BLOCK TYPES ARE GIVEN BY THE FOLLOWING TABLE +;---------------------------------------------------------------- + ;BITS 0-17 BITS18-23 BITS 24-35 TYPE + +;777777 70 N DATA STATEMENT +;777777 50 N ABSOLUTE MACHINE CODE +;777777 0 - PROGRAMMER LABELS +;777777 31 - MADE LABELS +;777777 60 - ENTRY LABELS +;777777 777776 END BLOCK +;----------------------------------------------------------------- +F4: JSR GETIN ;GET A FORTRAN IV BLOCK HEADER + PUSHJ P, OUT4 ;OUTPUT IT + TLC A, -1 ;TURN ONES TO ZEROES IN LEFT HALF + TLNE A, -1 ;NO, WAS LEFT HALF ALL ONES? + JRST F4 ;NO, IT WAS CALCULATED MACHINE CODE + CAIN A, -2 ;YES, IS RIGHT HALF = 777776? + JRST ENDST ;YES, PROCESS F4 END BLOCK + LDB B, [POINT 6,A,23];GET CODE BITS FROM BITS 18-23 + TRZ A, 770000 ;THEN WIPE THEM OUT + CAIE B, 70 ;IS IT A DATA STATEMENT? + CAIN B, 50 ;IS IT ABSOLUTE MACHINE CODE? + JRST MACHCD ;YES, TREAT IT LIKE DATA STATEMENTS + JSR GETIN ;NO, ITS A LABEL OF SOME SORT + PUSHJ P, OUT4 ;WHICH CONSISTS OF ONE WORD + JRST F4 ;LOOK FOR NEXT BLOCK HEADER + +MACHCD: HRRZ B, A ;GET THE WORD COUNT IN AC B + JSR GETIN ;INPUT A WORD + PUSHJ P, OUT4 ;OUTPUT IT + SOJG B, MACHCD ;LOOP BACK FOR REST OF THE BLOCK + JRST F4 ;GO LOOK FOR NEXT BLOCK + +ENDST: MOVEI B,1 ;TWO WORDS, FIVE TABLES, ONE WORD, ONE TABLE + MOVEI C,6 ;TO GO +F4LUP1: JSR GETIN ;GET TABLE MEMBER +F4LUP3: PUSHJ P,OUT4 ;OUTPUT WORD + SOJGE B,F4LUP1 ;LOOP WITHIN A TABLE + JUMPL C,CPOPJ ;LAST TABLE - RETURN + SOJG C,F4LUP2 ;FIRST TWO WORDS AND FIVE TABLES + JUMPE C,F4LUP1 ;COMMON LENGTH WORD +F4LUP2: JSR GETIN ;READ HEADER WORD + MOVE B,A ;COUNT TO COUNTER + JRST F4LUP3 ;STASH + +OUT4: TRNN F,F4IB ;DONT DO OUTPUT? + PUSHJ P,OUT ;YES, DO OUTPUT + POPJ P, ;RETURN + SUBTTL ROUTINE TO DELETE LOCAL SYMBOLS FROM SYMBOL BLOCK + +;ALL LOCAL AND SUPPRESSED LOCAL SYMBOLS ARE DELETED +;EXTERNALS,INTERNAL AND SUPPRESSED INTERNALS ARE NOT DELETED. + +DELLOC: HRRZM A,BSZ ;SIZE OF SYMBOL BBLE + PUSHJ P,DELINI ;CLEAR NEW HEADER & RELOC WORDS + ;SET PB = SYMBLK+2 +DELGTR: JSR GETIN ;GET RELOCATION WORD + MOVEM A,RELOCS ;SAVE IT + MOVE A,PTGR ;INIT POINTER TO GET + MOVEM A,PTGRS ;RELOCATION WORD + +DELGT1: JSR GETIN ;GET FIRST WORD OF PAIR + ILDB 0,PTGRS ;GET RELOCATION BITS & HOLD + TLNE A,(1B2) ;IS SYMBOL LOCAL? + JRST DELDEC ;YES, DON'T COPY + MOVEM A,0(T) ;STORE FIRST WORD + JSR GETIN ;GET SECOND WORD INTO A + MOVEM A,1(T) ;STORE SECOND WORD + IDPB 0,PTSRS ;STORE RELOCATION BITS + MOVEI A,2 ;COUNT WORDS STORED + ADDM A,SYMBLK ;I.E. UPDATE WORD COUNT + ADDI T,2 ;UPDATE NEXT LOCATION TO STORE + MOVE A,PTSRS ;HAVE WE STORED 9 + TLNN A,770000 ;SYMBOL PAIRS? + PUSHJ P,DELWRT ;YES, WRITE IT OUT + JRST DELDEC+1 ;ALREADY HAVE 2ND WORD + +DELDEC: JSR GETIN ;GET SECOND WORD INTO A + SOS BSZ ;HAVE WE EXHAUSTED + SOSG BSZ ;ALL WORDS IN BLOCK? + JRST DELFIN ;YES, NONE LEFT + MOVE A,PTGRS ;HAVE WE GOT 9 + TLNE A,770000 ;SYMBOL PAIRS YET? + JRST DELGT1 ;NO, GET NEXT PAIR + JRST DELGTR ;YES, GET RELOCATION + +DELFIN: PUSHJ P,DELWRT ;ORIGINAL BLOCK EMPTY NOW + JRST WRITE3 ;GET NEXT BLOCK + + + SUBTTL ROUTINE TO WRITE OUT NEW SYMBOL BBLE + +DELWRT: SKIPN A,SYMBLK ;ANYTHING TO WRITE + JRST DELINI ;NO, CAN LEAVE + HRRZ 0,A ;GET WORD COUNT + HRLI A,2 ;PUT IN BLOCK TYPE + PUSHJ P,OUT ;WRITE BLOCK HEADER + MOVEI B,SYMBLK ;LOC OF FIRST WORD +DELWRU: ADDI B,1 ;LOC OF RELOC WORD + MOVE A,0(B) ;GET WORD + PUSHJ P,OUT ;OUTPUT + SOJGE 0,DELWRU ;ALL THROUGH? + +;ROUTINE TO INITIALIZE NEW SYMBOL BBLE +DELINI: SETZM SYMBLK ;YES, CLEAR COUNT + SETZM SYMBLK+1 ;CLEAR RELOCATION + MOVE A,PTSR ;INIT POINTER + MOVEM A,PTSRS ;FOR STORING NEW RELOC + MOVEI T,SYMBLK+2 ;SET TO STORE FIRST GLOBAL + POPJ P, + SUBTTL ROUTINES TO INDEX THE LIBRARY + +COMMENT * THE INDEXING OF LIBRARY FILES IS DONE IN TWO PASSES. + ON PASS 1 THE LIBRARY FILE IS COPIED AND ALL ENTRIES STORED + IN CORE ALLONG WITH A POINTER TO THE BEGINING OF THE BLOCK. + A DUMMY INDEX BLOCK (TYPE 14) IS OUTPUT AT THE BEGINING OF THE + NEW LIBRARY AND ONE IS OUTPUT WHENEVER THE CURRENT INDEX BLOCK + FILLS A BUFFER. + ON PASS 2 THE DUMMY INDEX BLOCKS ARE REPLACED BY REAL ONES. + FUDGE2 USED USETO'S AND DUMP MODE. + IF THE OUTPUT DEVICE IS DTA FUDGE2 USES UGETF UUO'S TO FIND + THE NEXT BLOCK AND NON-STANDARD DUMP MODE TO WRITE THE INDICES. + DESIGN AND CODING BY D.M.NIXON JULY 1970 +* + +INDEX0: MOVE A,INDEXH ;BLOCK HEADER + AOS BLKCNT ;START ON BLOCK #1 + PUSHJ P,OUT1 ;OUTPUT IT + OUTPUT 1, ;FORCE OUTPUT + MOVE T,OBUF+5 ;BUFFER SIZE + MOVEM T,XCOUNT + MOVEM T,BUFSIZ ;SAVE IT AWAY + AOS T,JOBREL ;TO GET 1K MORE + MOVEM T,XPNTR + MOVEM T,XBEG ;START OF INDEX BUFFERS + CORE T, + JRST ERR22 ;NOT ENUF CORE + MOVEI A,1 ;START ON BLOCK #1 (IF DSK) + MOVEM A,@XPNTR ;STORE FIRST BLOCK # + AOS XPNTR + MOVE A,INDEXH + MOVEM A,@XPNTR + AOS XPNTR + SOS XCOUNT + SOS XCOUNT ;RESERVE SPACE FOR NEXT LINK WORD + POPJ P, ;RETURN + ;HERE ON PASS 1 TO STORE ENTRIES AND POINTERS. + +INDEX1: AOS (P) ;SET SKIP RETURN + HRRZ T,ENTBLK ;GET SIZE OF BLOCK + MOVN A,T + ADDI T,1 ;WORD OF INFO + CAML T,XCOUNT ;ENUF ROOM IN BLOCK? + JRST NOROOM ;NO + MOVE T,ENTBLK ;GET HEADER WORD + MOVEM T,@XPNTR + AOS XPNTR + SOS XCOUNT + HRLS A + HRRI A,ENTBLK+1 +INDEXA: SKIPN T,(A) + AOJA A,.-1 + MOVEM T,@XPNTR + SOS XCOUNT + AOS XPNTR + AOBJN A,INDEXA +INDEX2: MOVE T,BUFSIZ + SUB T,OBUF+5 + MOVSS T + HRR T,BLKCNT + MOVEM T,@XPNTR + SOS XCOUNT + AOS XPNTR + POPJ P, + +;HERE WHEN CURRENT INDEX BLOCK IS FULL. + +NOROOM: MOVE A,INDEXH ;HEADER BLOCK OF INDEX FOR LOADER + PUSHJ P,OUTGO + OUTPUT 1, + MOVE T,BLKCNT ;GET INDEX BLOCK # + HRROM T,@XPNTR ;STORE IT WITH -1 IN LEFT HALF + MOVE A,XCOUNT + ADDM A,XPNTR + MOVE A,BUFSIZ + MOVEM A,XCOUNT + ;MARK IT AS AN INDEX INCASE BLOCK FULL + HRROM T,@XPNTR ;SAVE BLOCK # FOR PASS 2 + AOS XPNTR + TRNN F,DTAFLG ;NOT IF DTA + AOS BLKCNT ;ONE FOR OUTPUT + MOVE A,INDEXH + MOVEM A,@XPNTR + AOS XPNTR + SOS XCOUNT + SOS XCOUNT ;SPACE FOR LINK WORD TO NEXT INDEX + JRST INDEX1+1 + + ;HERE FOR PASS 2. WRITE OUT THE INDEX BLOCKS + +INDEX3: SETOM @XPNTR ;TERMINATE WITH END OF INDEX MARKER + OUTPUT 1, ;SO LAST BLOCK IS WRITTEN + TRNE F,DTAFLG ;IS IT DTA? + JRST INDEX5 ;YES, TREAT DIFFERENTLY + SETSTS 1,16 + MOVNI A,200 + HRLM A,XBEG +INDEX4: SETZM XBEG+1 + MOVE A,@XBEG + USETO 1,(A) + OUTPUT 1,XBEG + STATZ 1,760000 + JRST ERR15 + MOVEI A,200 + ADDB A,XBEG + HRRZS A + CAMG A,XPNTR + JRST INDEX4 + JRST EXIT + +INDEX5: CLOSE 1, ;AND A SEPARATE EOF BLOCK + SETSTS 1,116 ;NONE STANDARD MODE + MOVNI A,200 ;IOWD COUNT + HRLM A,XBEG ;SET IT UP FOR OUTPUT + USETI 1,@BLKCNT ;SET ON LAST BLOCK + INPUT 1,DIRIOW ;READ IT IN + LDB A,[POINT 10,DIRBLK,27] ;GET FIRST BLOCK # + HRRM A,@XBEG ;STORE IT FOR COMMON LOOP + SETZM XBEG+1 ;MAKE SURE IT'S ZERO +INDEX6: MOVE A,@XBEG ;GET BLOCK NUMBER + USETI 1,(A) ;SET FOR INPUT + INPUT 1,DIRIOW ;INPUT BLOCK + MOVE T,DIRBLK ;TO FIND LINK WORD + EXCH T,@XBEG ;PUT IT IN OUTPUT BLOCK + SOS XBEG ;BACK UP POINTER + USETO 1,(A) ;NOW FOR OUTPUT + OUTPUT 1,XBEG ;OUT IT GOES + STATZ 1,760000 ;UNLESS IN ERROR + JRST ERR15 ;DEVICE ERROR + MOVEI A,200 ;GET TO NEXT DUMP BLOCK + ADDB A,XBEG ;ADVANCE POINTER + HRRZS A ;JUST WORD LOCATION + CAMG A,XPNTR ;ALL DONE? + JRST INDEX6 ;NO, LOOP + SETSTS 1,16 ;BACK TO STANDARD MODE TO UPDATE DIR. + JRST EXIT ;YES, FINISH UP + +INDEXH: XWD 14,177 ;USED TO SIGNAL INDEX BLOCK TO LOADER + + SUBTTL INPUT SERVICE ROUTINE +;THE INPUT ROUTINE GETS CHARACTERS FROM THE DEVICE WHOSE +;CHANNEL NUMBER IS IN ACCUMULATOR D. IT CALCULATES THE POSITION +;OF THE BUFFER HEADER OF THE DEVICE, THEN EITHER LOADS AC A +;FROM THE BYTE POINTER, OR DOES AN INPUT. IF AN END OF FILE +;IS FOUND, THE ROUTINE EXITS WITH A POPJ, SINCE THE READ ROUTINE +;IS CALLED WITH A PUSHJ, FOLLOWED BY AN EOF RETURN. THE NORMAL +;EXIT FROM GETIN IS BY A JRST @GETIN. + +GETIN: SOSG IBUF+2(DIS) ;IS APPROPRIATE BUFFER EMPTY? + JRST INGET ;YES, GET ANOTHER BUFFER +GETIN1: ILDB A, IBUF+1(DIS) ;LOAD AC A WITH A CHARACTER + POPJ P, + +INGET: DPB D,[POINT 4,INGET2,12] + DPB D,[POINT 4,INGET3,12] + JRST INGET2 ;INPUT A BUFFER OF DATA + + +;OUTPUT SERVICE ROUTINE +;THE OUT ROUTINE CHECKS THE TTYOB FLAG TO SEE IF THE OUTPUT +;SHOULD BE ON THE TTY. IF SO, IT TRANSFERS CONTROL IMMEDIATELY. +;OTHERWISE, IT ASSUMES OUTPUT IS ON DEVICE #1. + +OUT: TRNN F, TTYOB ;SHOULD OUTPUT BE ON TTY? + JRST TYPO ;YES +OUT1: SOSG OBUF+5 ;IS OUTPUT BUFFER EMPTY? + JRST OUTGO ;YES, OUTPUT A BUFFER +OUT2: IDPB A, OBUF+4 ;DEPOSIT CHARACTER + POPJ P, ;EXIT + +OUTGO: TRNN F,XFLG ;IF NOT INDEXING + JRST OUTG ;DON'T WASTE TIME + TRNN F,DTAFLG ;IF DTA SKIP + AOSA BLKCNT ;INCR. COUNT IF DSK + UGETF 1,BLKCNT ;GET NEXT BLOCK IF DTA +OUTG: OUT 1, ;OUTPUT A BUFFER + JRST OUT2 ;NO ERRORS + MOVEI D, 1 ;YES, SET CHANNEL TO OUTPUT + JRST ERR15 ;GO TO ERROR ROUTINE + + SUBTTL ROUTINE TO HANDLE ASTERISK FILE NAME *.EXT +;THE DIRECTORY IS SEARCHED FOR FILE NAMES WITH GIVEN EXTENSION OR +;EXTENSION REL IF NONE SPECIFIED. THESE ARE STORED IN FILBUF +;ENTERED BY JRST FROM SEMICP +;EXIT BY POPJ +;DMN 23 MAY 1969 + + +ASTRSK: MOVE B,COLON2 ;GET DEVICE LAST SEEN + MOVEM B,DSKINI+1 ;SAVE IT IN CASE DSK + DEVCHR B, ;GET ITS CHARACTERISTICS + TLNE B,DTABIT ;IS IT A DTA + JRST DTAAST ;YES + TLNN B,DSKBIT ;IS IT THE DSK? + JRST ERR18 ;MUST BE ONE OR THE OTHER + ;FALL INTO DSKAST IF OK + +DSKAST: PUSH P,JOBFF ;SAVE OLD JOBFF + MOVEI B,DSKHDR ;WHERE BUFFER WILL GO + MOVEM B,JOBFF ;SET IT UP + + OPEN 11,DSKINI ;11 IS SAFE CH.NO. + JRST ERR19 ;CONNOT INIT DSK + INBUF 11,1 ;FORCE SINGLE BUFFERING + MOVE B,COLON2 ;GET DEVICE + DEVPPN B, ;GET PROJ-PROG INCASE SYS: ETC. + GETPPN B, ;FAILED, GET USER PROJ,PROG PAIR + MOVEM B,EBLOCK ;SAVE IT FOR LOOKUP OF UFD + MOVSI B,(SIXBIT/UFD/) ;EXTENSION + MOVEM B,EBLOCK+1 + MOVE B,[XWD 1,1] ;TO GET UFD ***VJC + MOVEM B,EBLOCK+3 ;ENTRY BLOCK SET UP + LOOKUP 11,EBLOCK ;DO LOOKUP + JRST ERR20 ;CANNOT DO IT + +DSKLUP: PUSHJ P,DSKINP ;INPUT A WORD + MOVEM S,SAVNAM ;SAVE NAME FOR LATER + PUSHJ P,DSKINP ;GET EXT AS WELL + HLLZM S,SAVEXT ;SAVE EXT, CLEAR RH ***VJC + SKIPN SAVNAM ;IS THERE A NAME + JRST DSKLUP ;NO GET NEXT PAIR + CAME EXT,SAVEXT ;EXTENSIONS MATCH + JRST DSKLUP ;NO GET NEXT PAIR + PUSHJ P,STNULL ;CLOSE OUT OLD FILE + MOVE S,SAVNAM ;RECALL NAME + PUSHJ P,PUTFIL ;STORE IT IN FILBUF + MOVE S,SAVEXT ;RECALL EXTENSION + PUSHJ P,PUTFIL + HRRM D,(A) ;GET CHANNEL + HRRZ S,PRGBUF ;POINTER TO PRGBUF + PUSHJ P,PUTFIL ;SAVE IT AS 3RD WORD + JRST DSKLUP ;GO LOOP ROUND ALL + + ;ROUTINE TO GET NEXT WORD FROM UFD + +DSKINP: SOSGE DIRBUF+2 ;USUAL INPUT ROUTINE + JRST DSKIN1 ;GET ANOTHER BUFFER + ILDB S,DIRBUF+1 ;GET A WORD + POPJ P, ;RETURN + +DSKIN1: IN 11,0 ;DO INPUT + JRST DSKINP ;NO ERRORS + STATO 11,20000 ;END OF FILE? + JRST ERR21 ;NO, READ ERROR + +FIN: POP P,JOBFF ;POP UP ONE LEVEL + POP P,JOBFF ;RESTORE JOBFF + POPJ P, ;RETURN TO COMMAND SCAN + + +DTAAST: LDB B,[POINT 4,COLON1,12] ;GET CHANNEL + DPB B,[POINT 4,DP+0,12] ;DEPOSIT IT + DPB B,[POINT 4,DP+1,12] + DPB B,[POINT 4,DP+2,12] + DPB B,[POINT 4,DP+3,12] + DPB B,[POINT 4,DP+5,12] + SETZ B, ;INITIAL CONDITION + JRST DP ;INPUT DIRECTORY + +DTALUP: CAIL B,26 ;END OF DIRECTORY + POPJ P, ;YES- FINISHED + HLLZ S,DIREXT(B) ;GET EXTENSION + SKIPE DIRNAM(B) ;IF NAME ZERO DON'T BOTHER + CAME S,EXT ;IS EXTENSION SAME + AOJA B,DTALUP ;NO GET NEXT ENTRY + PUSHJ P,STNULL ;TERMINATE LAST ENTRY + MOVE S,DIRNAM(B) ;GET NAME + PUSHJ P,PUTFIL ;STORE IT IN FILBUF + HLLZ S,DIREXT(B) ;AND EXTENSION + PUSHJ P,PUTFIL ;STORE IT + HRRM D,(A) ;SAVECH. + HRRZ S,PRGBUF ;SAVE PRGBUF POINTER + PUSHJ P,PUTFIL ;STORE IT + AOJA B,DTALUP ;GET NEXT ENTRY + + SUBTTL ERROR ROUTINES + +ERROR1: MOVEI B, EMES1 ;FUDGE COMMAND ERROR + JRST ERROR ;TYPE IT AND EXIT + +ERROR2: MOVEI B, EMES2 ;TOO MANY PROGRAM NAMES + JRST ERROR ;TYPE IT AND EXIT + +ERROR3: MOVEI B, EMES3 ;FUDGE SYSTEM ERROR + JRST ERROR ;TYPE A MESSAGE AND EXIT + +ERROR4: PUSHJ P, DTYPOQ ;TYPE DEVICE NAME + MOVEI B, EMES4 ;"CANNOT DO IO AS REQUESTED" + JUMPN G,ERROR ;TYPE IT + MOVEI B,EMES24 ;NO SUCH DEVICE IF G=0 + JRST ERROR ;TYPE IT AND EXIT + +ERROR5: MOVEI B, EMES5 ;UNEQUAL NUMBER OF MASTER AND TR. + JRST ERROR ;TYPE IT AND EXIT + +ERROR6: MOVEI B, EMES6 ;NOT ENOUGH ARGUMENTS + JRST ERROR ;TYPE IT AND EXIT + +ERROR7: PUSHJ P, DTYPOQ ;TYPE OUT THE DEVICE NAME + MOVEI A, 72 ;ASCII COLON + PUSHJ P, TYPO ;TYPE IT OUT + PUSHJ P, FTYPO ;TYPE OUT THE FILE NAME + MOVEI A, 74 ;ASCII LEFT ANGLE BRACKET + PUSHJ P, TYPO ;TYPE IT OUT + MOVE B, R ;GET PROGRAM NAME + TRZ F, TTYOB ;SET IO BACK TO TTY + PUSHJ P, PTYPO ;TYPE OUT THE PROGRAM NAME + MOVEI A, 76 ;ASCII RIGHT ANGLE BRACKET + PUSHJ P, TYPO ;TYPE IT OUT + MOVEI B, EMES7 ;GET AN ERROR MESSAGE + JRST ERROR ;TYPE IT OUT AND EXIT + +ERROR8: PUSHJ P, DTYPOQ ;TYPE OUT THE DEVICE NAME + MOVEI A, 72 ;ASCII COLON + PUSHJ P, TYPO ;TYPE IT OUT + PUSHJ P, FTYPO ;TYPE OUT FILE NAME + MOVEI A, 56 ;ASCII PERIOD + PUSHJ P, TYPO ;TYPE IT OUT + HRRZ A, FILBUF ;GET THE POINTER TO CURRENT FILE + HLRZ S, 1(A) ;GET FILE NAME EXTENSION + PUSHJ P, DTYPO1 ;TYPE IT OUT + MOVE T,SDEVCHR ;GET CHARACTERISTICS + TLNE T,DSKBIT ;IS IT A DSK? + JRST ERR8A ;YES + MOVEI B, EMES7 ;GET ERROR MESSAGE "NOT FOUND" + JRST ERROR ;TYPE IT OUT AND EXIT + ERROR9: PUSHJ P, DTYPOQ ;TYPE DEVICE NAME + MOVEI B, EMES9B ;GET REMAINDER OF MESSAGE + JRST ERROR ;TYPE IT AND EXIT + +ERR10: MOVE C, A ;SAVE PROGRAM NAME IN C + MOVEI B, EMES10 ;"ENTRY BLOCK TOO LARGE, PROGRAM" + PUSHJ P, ETYPO ;TYPE BEGINNING OF MESSAGE + MOVE B, C ;GET PROGRAM NAME IN B + PUSHJ P, PTYPO ;TYPE IT OUT + JRST EXIT1 ;EXIT + +ERR11: MOVEI B, EMES11 ;TRANSMISSION ERROR ON INPUT + PUSHJ P, ETYPO ;TYPE THE MESSAGE + PUSHJ P, DTYPO ;TYPE NAME OF OFFENDIN DEVICE + JRST EXIT1 ;EXIT + +ERR14: MOVE T,SDEVCHR ;GET DEVICE CHARACTERISTICS + TLNE T,DSKBIT ;IS IT A DSK + JRST ERROR8 ;YES + MOVEI B, EMES14 ;DIRECTORY FULL ON OUTPUT + JRST ERROR ;TYPE IT AND EXIT + +ERR8A: HRRZ T,EBLOCK+1 ;GET ERROR CODE + CAIL T,TABLND-ETABLE ;LEGAL ERROR? + SKIPA B,TABLND ;NO, USE CATCH ALL MESSAGE + MOVE B,ETABLE(T) ;PICK UP MESSAGE + JRST ERROR + + ETABLE: [ASCIZ /(0) file was not found/] + [ASCIZ /(1) no such project-programmer number/] + [ASCIZ /(2) protection failure/] + [ASCIZ /(3) file was being modified/] + [ASCIZ /(4) rename file name already exists/] + [ASCIZ /(5) illegal sequence of UUOs/] + [ASCIZ /(6) bad UFD or bad RIB/] + [ASCIZ /(7) not a SAV file/] + [ASCIZ /(10) not enough core/] + [ASCIZ /(11) device not available/] + [ASCIZ /(12) no such device/] + [ASCIZ /(13) not two reloc reg. capability/] + [ASCIZ /(14) no room or quota exceeded/] + [ASCIZ /(15) write lock error/] + [ASCIZ /(16) not enough monitor table space/] + [ASCIZ /(17) partial allocation only/] + [ASCIZ /(20) block not free on allocation/] + +TABLND: [ASCIZ /(?) lookup,enter,or rename error/] + ERR15: MOVEI B, EMES15 ;DEVICE ERROR ON OUTPUT + PUSHJ P, ETYPO ;TYPE THE MESSAGE + PUSHJ P, DTYPO ;TYPE NAME OF OFFENDING DEVICE + JRST EXIT1 ;GO AWAY + +ERR16: MOVE B,A ;SAVE OFFENDING LETTER + PUSHJ P,CRLF + MOVEI A,77 ;TYPE OUT "?" + PUSHJ P, OUT + MOVE A, B ;GET BACK OFFENDING LETTER + PUSHJ P, OUT ;TYPE OFFENDING LETTER + MOVEI B, EMES16 ;"X" IS AN ILLEGAL SWITCH + TRO F,CRLFTY + JRST ERROR ;TYPE IT AND EXIT + +ERR17: MOVE B, A + PUSHJ P,CRLF + MOVEI A, 77 + PUSHJ P, OUT + MOVE A, B + PUSHJ P, OUT ;TYPE OFFENDING LETTER + MOVEI B, EMES17 ;"X" IS AN ILLEGAL CHARACTER + TRO F,CRLFTY + JRST ERROR ;TYPE IT AND EXIT + +ERR18: MOVEI B,EMES18 + JRST ERROR + +ERR19: MOVEI B,EMES19 + JRST ERROR + +ERR20: MOVEI B,EMES20 + JRST ERROR + +ERR21: MOVEI B,EMES21 + JRST ERROR + +ERR22: MOVEI B,EMES22 + JRST ERROR + +ERR23: MOVEI B,EMES23 + JRST ERROR + SUBTTL VARIOUS ERROR ROUTINES AND SMALL TYPE-OUT ROUTINES + +ETYPO: HRLI B, 440700 ;MAKE A BYTE POINTER +ETYPO2: ILDB A, B ;GET A CHARACTER + JUMPE A,CPOPJ ;EXIT IF NULL + PUSHJ P, TYPO ;NO, TYPE IT + JRST ETYPO2 ;RETURN FOR MORE CHARACTERS + +DTYPOQ: TRON F,CRLFTY ;IS CR,LF TYPED OUT? + PUSHJ P,CRLF ;YES + MOVEI A,77 ;TYPE OUT ? FOR BATCH + PUSHJ P,TYPO + + +DTYPO: MOVE S, DEVBUF(D) ;GET DEVICE NAME FROM BUFFER +DTYPO1: MOVE C, SYMPTR ;BYTE POINTER TO SYMBOL NAME + MOVEI B, 6 ;LOOP COUNTER FOR 6 CHARACTERS +DTYPO2: ILDB A, C ;GET A CHARACTER + JUMPE A, DTYPO3 ;IGNORE BLANKS + ADDI A, 40 ;CONVERT TO 7-BIT ASCII + PUSHJ P, TYPO ;TYPE IT +DTYPO3: SOJG B, DTYPO2 ;ALL DONE? + POPJ P, ;EXIT + +FTYPO: MOVE S, @FILBUF ;PICK UP THE FILE NAME + JRST DTYPO1 ;JUMP INTO DTYPO ROUTINE + +PTYPO: MOVEI A, 6 ;SIX CHARACTERS TO GET +PTYPO2: IDIVI B, 50 ;CONVERT TO SIXBIT CODE + HRLM B+1, (P) ;STORE CHARACTER ON PD LIST + SOJLE A,.+2 ;ALL DONE? + PUSHJ P, PTYPO2 ;NO, DIVIDE SOME MORE + HLRZ A, (P) ;POP CHARACTERS OFF STACK + JUMPE A, CPOPJ ;IGNORE BLANKS + CAILE A, 12 ;LETTER OR NUMBER? + ADDI A, 7 ;LETTER - ADD 66 + ADDI A, 57 ;NUMBER - ADD 57 + CAIN A, 134 ;DOLLAR SIGN? + SUBI A, 70 ;YES, SPECIAL CASE + CAIN A, 133 ;PERIOD? + SUBI A, 55 ;YES, SPECIAL CASE + JRST OUT ;RECURSIVE EXIT FOR MORE CHARS + +TYPO: IDPB A, OBUF+1 ;STORE CHARACTER IN BUFFER + CAIN A, 12 ;LINE FEED? + OUTPUT 0, ;YES, EMPTY BUFFER + POPJ P, ;EXIT + CRLF: MOVEI A, 15 ;CARRIAGE RETURN + PUSHJ P, OUT ;OUTPUT IT + MOVEI A, 12 ;LINE FEED + JRST OUT ;OUTPUT IT AND EXIT + +ERROR: TRZ F,TTYOB ;JUST IN CASE , SET OUTPUT TO TTY + TRON F,CRLFTY + PUSHJ P,CRLF + PUSHJ P, ETYPO ;TYPE LAST MESSAGE OF ERROR +EXIT1: TRZ F,TTYOB ;ENSURE TTY OUTPUT OF CR-LF + PUSHJ P,CRLF ;FINISH WITH CR-LF + CLOSE 0, ;FORCE OUTPUT OF LAST LINE + JRST FUDGE2 ;START AGAIN + +EXIT: CLOSE 1, ;CLOSE OUT THE OUTPUT CHANNEL + JRST FUDGE2 ;RESTART + + SUBTTL ERROR MESSAGES +EMES1: ASCIZ "?FUDGE2 SYNTAX ERROR" +EMES2: ASCIZ "?TOO MANY FILE NAMES OR PROGRAM NAMES" +EMES3: ASCIZ "?PROGRAM ERROR WHILE RESETTING MASTER DEVICE" +EMES4: ASCIZ " CANNOT DO IO AS REQUESTED" +EMES5: ASCIZ "?UNEQUAL NUMBER OF MASTER AND TRANSACTION PROGRAMS" +EMES6: ASCIZ "?NOT ENOUGH ARGUMENTS" +EMES7: ASCIZ " NOT FOUND" +EMES9B: ASCIZ " NOT AVAILABLE" +EMES10: ASCIZ "?ENTRY BLOCK TOO LARGE, PROGRAM " +EMES11: ASCIZ "?TRANSMISSION ERROR ON INPUT DEVICE " +EMES14: ASCIZ "?DIRECTORY FULL ON OUTPUT DEVICE " +EMES15: ASCIZ "?DEVICE ERROR ON OUTPUT DEVICE " +EMES16: ASCIZ " IS AN ILLEGAL SWITCH" +EMES17: ASCIZ " IS AN ILLEGAL CHARACTER" +EMES18: ASCIZ "?DEVICE FOR * COMMAND MUST BE DSK OR DTA" +EMES19: ASCIZ "?CANNOT INIT DSK" +EMES20: ASCIZ "?LOOKUP FAILURE ON DSK" +EMES21: ASCIZ "?ERROR WHILE READING UFD" +EMES22: ASCIZ "?NOT ENOUGH CORE AVAILABLE " +EMES23: ASCIZ "?OUTPUT DEVICE MUST BE DSK OR DTA" +EMES24: ASCIZ " DOES NOT EXIST" + SUBTTL IMPURE CODE + + +COLON1: OPEN ,COLON0 ;INITIALIZATION SEQUENCE +SEMIC1: ENTER , EBLOCK(T) +INBUF3: INBUF ,(C) + +BACK0: MTAPE , 17 ;BACKSPACE MAG TAPE ONE FILE +BACK3: MTAPE ,0 ;WAIT FOR BACKSPACE TO FIN. +BACK1: STATO , IOBOT ;ARE WE AT BEGINNING OF TAPE +BACK2: MTAPE , 16 ;NO, SKIP FILE + POPJ P, ;EXIT + +GET3A: CLOSE , +GET4A: LOOKUP , EBLOCK(T) + +INGET2: IN 0, ;INPUT A BUFFER OF DATA + JRST GETIN1 ;NO ERRORS +INGET3: STATZ , IOEOF ;END OF FILE? + JRST POPOUT ;YES, HIGH LEVEL EXIT + JRST ERR11 ;ERROR + +DP: SETSTS ,117 ;DUMP MODE NON-STANDARD + USETI ,144 ;DIRECTORY BLOCK + INPUT ,DIRIOW ;ONE BLOCK ONLY + STATZ ,760000 ;CHECK ERRORS + JRST DP ;TRY AGAIN + SETSTS ,14 ;BACK TO BINARY + JRST DTALUP + +DSKINI: EXP 14 + SIXBIT /DSK/ ;MAY GET MODIFIED + EXP DIRBUF + +DIRIOW: IOWD 200,DIRBLK ;IOWD FOR DIRECTORY INPUT + 0 ;MUST BE IN LOW SEGMENT + + SUBTTL STORAGE AND BUFFERS + +LOW: + +FILSAV: BLOCK 1 +BLKCNT: BLOCK 1 ;NUMBER OF BUFFERS OUTPUT +SAVEAC: BLOCK 1 +SAVEBT: BLOCK 1 +COLON0: BLOCK 1 ;MODE +COLON2: BLOCK 1 ;DEVICE NAME +COLON3: BLOCK 1 ;BUFFER HEADER +FILBUF: BLOCK N +PRGBUF: BLOCK N +PPNBUF: BLOCK N +DEVBUF: BLOCK 10 +ENTBLK: BLOCK X+1 +SVEBLK: BLOCK X+1 +PDLIST: BLOCK XP + BLOCK 2 ;FOR EXTENDED LOOKUP AND ENTERS +EBLOCK: BLOCK 4 + BLOCK <RIBALC-6+1> ;MORE EXTENDED STUFF +OBUF: BLOCK 6 ;TTY:, OUTPUT DEV: +IBUF: BLOCK 30 ;INPUT DEVICES (10) + +SAVNAM: BLOCK 1 ;SAVED FILE NAME FROM UFD +SAVEXT: BLOCK 1 ;SAVED EXT NAME FROM UFD +DIRBUF: BLOCK 3 ;DIRECTORY BUFFER HEADER +DSKHDR: BLOCK N+2 ;TWO WORDS OF OVERHEAD [P,P]+EXT +DIRBLK=DSKHDR+2 +DIRNAM=DIRBLK+123 ;FILENAMES IN DTA DIRECTORY START HERE +DIREXT=DIRNAM+26 ;EXTENSIONS IN DTA DIRECTORY START HERE + +BSZ: BLOCK 1 ;SIZE OF OLD SYMBOL BLOCK +PTGRS: BLOCK 1 ;PTGR SAVED +PTSRS: BLOCK 1 ;PTSR SAVED +RELOCS: BLOCK 1 ;ORIGINAL RELOC +SYMBLK: BLOCK ^D20 ;NEW SYMBOL BLOCK + +MATCH: BLOCK 1 ;COUNT OF <'S - >'S ***VJC + +CURCHR: BLOCK 1 ;SAVED CURRENT CHAR OF CS +LSTCHR: BLOCK 1 ;SAVED LAST CHAR OF CS +SDEVCH: BLOCK 1 ;SAVED DEVICE CHARACTERS +NUMDEV: BLOCK 1 ;NUMBER OF DEVICES +XCOUNT: BLOCK 1 +XPNTR: BLOCK 1 +BUFSIZ: BLOCK 1 +XBEG: BLOCK 2 +LEVEL: BLOCK 1 ;-2 IF LEVEL D +DEFPPN: BLOCK 1 ;DEFAULT PROJ-PROG +PRJPRG: BLOCK 1 ;TEMP. PROJ-PROG +SVENTR: BLOCK 2 ;PLACE TO SAVE EBLOCK,+1 +NOWARN: BLOCK 1 ;SIGNAL TO PRINT MESSAGE ABOUT INDEX + VAR ;JUST IN CASE + +LOWTOP: + SUBTTL CONSTANTS,POINTERS AND LITERALS + +SYMPTR: POINT 6, S +EXTPTR: POINT 6, EXT +PTSR: POINT 4,SYMBLK+1 ;TO STORE RELOCATION +PTGR: POINT 4,RELOCS ;TO GET RELOCATION +DTCLR: UTPCLR 1, +FILXWD: XWD FILBUF+2, FILBUF+1 +XPDLST: XWD -XP,PDLIST-1 + + END FUDGE2 + + diff --git a/src/iocont.mac b/src/iocont.mac new file mode 100644 index 0000000..c6fbe16 --- /dev/null +++ b/src/iocont.mac @@ -0,0 +1,706 @@ + TITLE IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS + SUBTTL 8-9-95 + EXTERNAL BUFCLC,ERROR,IOSETC,IOIERR,BUFCLR + EXTERNAL SETBYT,UINTQ,WAIT1,WSYNC,ADRCK + EXTERNAL UXIT,USRJDA,JOBJDA,ILLMOD,PUUOAC,PIOMOD + EXTERNAL JOB,ASSIN,PJOBN,ADRERR,USRREL,CUXIT1,CUXIT2 + EXTERNAL SETIOS + +;FOR PURPOSES OF COMMENTING THIS SUBROUTINE THE +;TERM BUFFER HEADER SHALL REFER TO THE 3 WORD HEADER +;WHICH IS USED BY THE USER PROGRAM AND THIS EXEC FOR +;REFERING TO THE RING BUFFERS. + +;THE CONTENTS OF THE 3 WORD HEADER (AS SET BY THE MONITOR FOR THE USE +; FROM USERS PROGRAM BY AN INPUT OR AN OUTPUT UUO +; WORD 2: BYTE POINTER TO CURRENT ITEM. +; WORD 3: POSITIVE ITEM COUNT (NO. OF ITEMS LEFT ON +; INPUT, NO. OF FREE ITEMS TO GO ON OUTPUT). + +;EACH BUFFER IN THE RING HAS FOLLOWING FORMAT (AS THE USER SEES IT) + +; WORD 1: RESERVED FOR BLOCK NUMBER FOR FIXED ADDRESS DEVIC +; WORD 2: BIT 0=USE BIT FOR THIS BUFFER +; BIT 1-17=NO. OF WORDS WHICH FOLLOW (LENGTH OF BUF +; BIT 18-35=ADDRESS OF SECOND WORD OF NEXT BUFFER I +; WORD 3: LH=LINK TO NEXT BLOCK (SET BY MONITOR FOR DECTAB +; RH=NO. OF WORDS OF DATA WHICH FOLLOW (USUALLY +; SET BY EXEC EXCEPT TO COMPUTE WORD COUNT +; THAT HE WANTS TO COMPUTE WORD COUNT +; HIMSELF INSTEAD OF HAVING THE MONITOR DO IT +; USING THE BYTE POINTER IN THE 3 WORD HEADER). + + +,H. R. MORSE 2/21/65 +,CALLING SEQUENCE +, CLOSE D, +, EXIT ALWAYS RETURNS HERE +, THIS ROUTINE PROCESSES THE CLOSE UUO AND DETERMINES WHETHER THE +,OUTPUT ROUTINE SHOULD BE CALLED IF OUTPUT WERE ACTIVE, CLEARS +,THE INPUT BUFFER AREA IF INPUT WERE ACTIVE, AND CLEARS THE +,ITEM COUNTS OF BOTH INPUT AND OUTPUT HEADERS SERVING TO BOTH +,TERMINATE THE USE OF THE DEVICE AND SET THE I/O ROUTINES TO +,ACCEPT ANOTHER INPUT OR OUTPUT COMMAND IN A CLEAR STATE. +,IN THE CASE OF OUTPUT DEVICES. THE CLOSE ROUTINE OF THE DEVICE HANDL +,ING ROUTINE IS CALLED IN CASE ANY SPECIAL HANDLING IS REQUIRED. +,MONITOR INTERFACE +, STORAGE: 30 +, ROUTINES CALLED: DCL, WAIT1, UXIT +, SYMBOLS SET/USED: +, ACCUMULATORS: DAT S/U PROG U +, DEVDAT U TAC S/U +, IOS S/U TAC1 S/U +, PDP U +, DEVICE DATA BLOCK: DEVBUF U +, DEVIOS S/U +, DEVSER U +, IO STATUS WORD: IOACT S IODTER S +, IOBEG S IOEND S +, IOBKTL 2 IOFST S +, IODEND S IOIMPM S +, IODERR S IOSTRT S +, IODISC S IOW S +, JOB BUFFER AREA: IOUSE S +, JBFCTR S + + +INTERNAL CLOSE1 + +CLOSE1: TLOE DEVDAT,CLOSB ;HAS A CLOSE ALREADY BEEN DONE? + JRST UXIT ;YES, FOR THIS CHANNEL + LDB TAC,PUUOAC ;USER DEVICE CHANNEL NO. + HLLM DEVDAT,USRJDA(TAC) + PUSH PDP,DAT + LDB TAC,PIOMOD + CAIGE TAC,DR + JRST UCLS4 + MOVE TAC,DEVSER(DEVDAT) + PUSHJ PDP,DCL(TAC) + JRST UCLS3 +UCLS4: PUSHJ PDP,WAIT1; WAIT UNTIL DEVICE IS INACTIVE. + TRNN UUO,CLSIN ;SUPPRESS INPUT? + TLNN DEVDAT,IBUFB ;NO, WAS INPUT BUFFER SPECIFIED? + JRST UCLS2 ;NO + HRRZ TAC1,DEVBUF(DEVDAT) + HRLI TAC1,PROG + HRRZ DAT,@TAC1 ;FIRST WORD OF 3 WORD BUFFER HEADER + HRR TAC1,@TAC1 ;REMEMBER CURRENT BUFFER IN TAC1 + HRLZI TAC,IOUSE ;USER BOTH FOR HEADER AND EACH BUFFER + JUMPE DAT,UCLS1 ;HAS A RING BEEN SETUP?(NO IF 0) + HRLI DAT,PROG ;YES +UCLS0: HRR DAT,@DAT; ADVANCE CURRENT INPUT BUFFER ADDRESS + ADRCHK DAT ;IS ADDRESS OF? + ANDCAM TAC,@DAT ;YES, CLEAR USE BIT. + CAME TAC1,DAT; DONE? + JRST UCLS0 +UCLS1: HRLI DAT,PROG + HRR DAT,DEVBUF(DEVDAT) + IORM TAC,@DAT ;FLAG AS VIRGIN BUFFER IN 3 WORD HEADER + ADDI DAT,2; JBFCTR:=0 + SETZM @DAT ;CLEAR INPUT ITEM COUNT. +UCLS2: TRNN UUO,CLSOUT ;SUPPRESS OUTPUT? + TLNN DEVDAT,OBUFB ;NO.WAS OUPUT BUFFER SPECIFIED? + JRST UCLS3 ;NO + HLR DAT, DEVBUF(DEVDAT) ;VIRGIN OUBPUT BUFFER? + HRLI DAT, PROG + SKIPG @DAT + JRST UCLS3 ;YES + MOVE TAC,DEVSER(DEVDAT) + PUSHJ PDP,DCL(TAC); CLOSE OUTPUT BUFFER + HLR DAT,DEVBUF(DEVDAT) + HRLI DAT,PROG + HRLZI TAC,IOUSE + IORM TAC,@DAT + ADDI DAT,2 + SETZM @DAT; JBFCTR:=0 +UCLS3: PUSHJ PDP,WAIT1 + POP PDP,DAT + TDZ IOS,[XWD IOEND,IODEND] + TLO IOS,IOBEG + MOVEM IOS,DEVIOS(DEVDAT); IODISC:=0 + JRST UXIT; EXIT THIS UUO + + +,DEC 06 00 EX UUO L PT PRE 02 INBUF,OUTBUF +,H. R. MORSE 64-12-26 +,CALLING SEQUENCE +, INBUF D,N +, EXIT RETURNS HERE IF MEMORY NOT EXCEEDED +,CALLING SEQUENCE +, OUTBUF D,N +, EXIT RETURNS HERE IF MEMORY NOT EXCEEDED +, SETS UP AN N BUFFER RING FOLLOWING THE USERS PROGRAM FOR DEVICE +, D AND INITIALIZES THE JOB BUFFER AREA HEADER: +, JBFADR0:=1, JBFADR 1-17:=0 +, JBFADR 18-35:=ADDRESS OF FIRST BUFFER IN RING +,INPUT SETS DEVIAD:=ADDRESS OF FIRST BUFFER IN RING +,OUTPUT SET DEVOAD:=ADDRESS OF FIRST BUFFER IN RING +,BUFPNT IS RESTORED. +,MONITOR INTERFACE +, STORAGE:13 +, ROUTINES CALLED: BUFCLC, UXIT +, SYMBOLS SET/USED: +, ACCUMULATORS: BUFPNT S/U PROG U +, DEVDAT U TAC S/U +, PDP U TAC1 S/U +, DEVICE DATA BLOCK: DEVBUF U +, DEVIAD S +, DEVOAD S +, JOB BUFFER AREA: JBFADR S + + + INTERN UINBF, UOUTBF + +UOUTBF: PUSH PDP,BUFPNT; SAVE BUFPNT ON STACK + PUSHJ PDP,BUFCLC; SET UP BUFFER RIGH + HLR TAC,DEVBUF(DEVDAT);TAC:=OUTPUT BUFFER AREA HEADER ADDRE + HRRM BUFPNT,DEVOAD(DEVDAT);DEVOAD:=ADDRESS OF FIRST BUFFER +, IN RING +UOBF1: HRLI TAC,PROG; RELOCATE BUFFER AREA HEADER ADDRESS + MOVEM BUFPNT,@TAC; JBFADR:=IOUSE,ADDRESS OF FIRST BUFFER +, IN RING + POP PDP,BUFPNT; RESTORE BUFPNT FROM STACK + JRST UXIT; EXIT THIS UUO +UINBF: PUSH PDP,BUFPNT; SAVE BUFPNT ON STACK + PUSHJ PDP,BUFCLC; SET UP BUFFER RING + HRRM BUFPNT,DEVIAD(DEVDAT); DEVIAD:=ADDRESS OF FIRST BUFFER +, IN RING + HRR TAC,DEVBUF(DEVDAT); TAC:=INPUT BUFFER AREA HEADER ADDRE + JRST UOBF1 + + +,DEC 06 00 EX UUO L PT PRE 03 INIT +,H. R. MORSE AND D. A. WITCRAFT 2/21/65 +,CALLING SEQUENCE +, INIT D,MODUS D=JOB DEVICE CHANNEL +, MODUS=IORDEL,IOCON,IOWC,MODE. +, SIXBIT/NAME/ DEVICE NAME +, XWD OBUF,IBUF BUFFER AREA HEADER ADDRESS +, EXIT1 DEVICE NOT AVAILABLE +, EXIT2 DEVICE PROPERLY AVAILABLE +,THE LEFT HALF OF NAME CONTAINS THE THREE LETTER DEVICE MNEMONIC, +, THE RIGHT HALF IS EITHER ZOER (SYSTEM WILL ASSIGN AN ARBITRARY +, UNIT) OR NON-ZERO TO REQUEST A SPECIFIC UNIT (LEFT JUSTIFIED). +,IF THE SELECTED DEVICE IS NOT AVAILABLE. CONTROL RETURNS TO EXIT1. +,OTHERWISE, THE DEVICE IS ASSIGNED TO THE USER AND ATTACHED TO HIS +,CHANNEL D. THE DEVICE IS INITIALIZED IN THE FOLLOWING MANNER AFTER +,IOACT IS ZERO: +, IOBEG:=1 +, DATA MODE:=BITS 32-35 OF AC UUO +, IOCON:=BIT 31 OF AC UUO +, IOWC:=BIT 40 OF AC UUO +, IORDEL:=BIT 29 OF AC UUO +, IOACT:=IODEND:=IOBKTL:=IODTER:=IODERR:=IOIMPM:=0 +, JBFADR:=JBFCTR:=0 FOR THE SPECIFIED BUFFERS. +, DEVBUF:=OBUF,IBUF +,MONITOR INTERFACE +, STORAGE: 20 +, ROUTINES CALLED: UINTQ, ASSIGN(UASG1),USEL,UINITZ,UXIT +, SYMBOLS SET/USED: +, ACCUMULATORS: DEVDAT U +, PDP U TAC U +, PROG U TAC1 S/U +, DEVICE DATA BLOCK: DEVBUF S + + + INTERN UINIT,UINIT1 +UINIT: LDB TAC,PUUOAC ;USER DEVICE CHANNEL NO. + SKIPE DEVDAT,USRJDA(TAC) ;IS A DEVICE ALREADY HERE? + PUSHJ PDP,RELEA0 ;YES, RELEASE IT + MOVE UUO,40 ;RESTORE AC UUO FROM LOC 40 + PUSHJ PDP,UINTQ ;GET SIXBIT DEVICE NAME FROM USER + AOS (PDP) +UINIT1: MOVE ITEM,JOB ;CALLED BY SAVGET + PUSHJ PDP,ASSIN; TRY TO ASSIGN DEVICE + JRST CUXIT1; NOT AVAILABLE + LDB TAC,PUUOAC + HRRZM DEVDAT,USRJDA(TAC) ;STORE DDB ADR IN DEVICE TABL + HRLZI TAC,IOBEG + MOVEM TAC,DEVIOS(DEVDAT) + PUSHJ PDP,SETIOS ;SET DDB IOS STATUS WORD + ;FROM RT. HALF OF UUO + PUSHJ PDP,UINTQ + HRLI DEVDAT, INITB ;SET INIT UUO BIT + TLNN TAC,-1 + JRST UINIT4 ;OUTPUT NOT SPECIFIED + HLLM TAC,DEVBUF(DEVDAT) + TLO DEVDAT,OBUFB ;SET OUTPUT BUFFER SPECIFIED BIT +UINIT4: TRNN TAC,-1; IS IBUF SPECIFIED? + JRST UINIT5 ;INPUT BUF NOT SPECIFIED + HRRM TAC,DEVBUF(DEVDAT); DEVBUF 18-35:=IBUF + TLO DEVDAT,IBUFB ;SET INPUT BUFFER SPECIFIED BIT +UINIT5: HRRZ TAC1,TAC; TAC1:=PROG,IBUF + PUSHJ PDP,UINITZ; JBFADR:=JBFCTR:=0 FOR IBUF + HLR TAC1,TAC; TAC1:=PROG,OBUF + PUSHJ PDP,UINITZ; JBFADR:=JBFCTR:=0 FOR OBUF + LDB TAC,PUUOAC ;STORE UUO BITS FOR THIS CHANNEL + HLLM DEVDAT,USRJDA(TAC) + JRST CUXIT2 + + +,DEC 06 00 EX COM L PT PRE 03 UINITZ +,H. R. MORSE 64-12-26 +,CALLING SEQUENCE +, PUSHJ PDP,UINITZ +, EXIT RETURNS HERE IF MEMORY NOT EXCEEDED. +,SETS JBFADR:=JBFCTR:=0 FOR THE BUFFER AREA HEADER WHOSE ADDRESS +,IS IN AC TAC1. ALSO,JBFPTR 0-5:=JBFPTR 12-17:=0,JBFPTR 6-11:=BYTE S +,MONITOR INTERFACE +, STORAGE:15 +, ROUTINES CALLED: ADRCK, SETBYT +, SYMBOLS SET/USED: +, ACCUMULATORS: PDP U TAC S/U +, TAC1 S/U +, JOB BUFFER AREA: JBFADR S +, JBFCTR S +, JBFPTR S + INTERN UINITZ + +UINITZ: TRNN TAC1,-1; IS BUFFER SPECIFIED? + POPJ PDP,;RETURN + HRLI TAC1,PROG + PUSHJ PDP,ADRCK ;CHECK 3 WORD BUFFER HEADER + HRRZI TAC,2(TAC1) + SETZM @TAC1; JBFADR:=0 + AOS TAC1 + PUSH PDP,TAC + PUSH PDP,TAC1 + AOS TAC1 + SETZM @TAC1; JBFCTR:=0 + PUSHJ PDP,SETBYT; JBFPTR 6-11:=BYTE SIZE + TLZ TAC,770077 + POP PDP,TAC1 + HLLM TAC,@TAC1 + POP PDP,TAC + POPJ PDP,; RETURN + + +INTERNAL IN +IN: TLNE IOS,IO ;IS THIS DEVICE ALREADY DOING OUTPUT! + PUSHJ PDP,WAIT1 ;YES,WAIT TILL IT IS FINISHED + LDB TAC,PUUOAC ;SET BIT THAT SAYS AN INPUT UUO HAS OCC + TLO DEVDAT,INPB ;FOR THIS DEVICE + HLLM DEVDAT,USRJDA(TAC) ;IN LH OF CURRENT JOB DEVICE + LDB TAC,PIOMOD ;IO MODE + CAIL TAC,DR ;IS THE IO MODE DUMP MODE? + JRST INDMP ;YES +IN1: HRR JBUF,DEVBUF(DEVDAT) ;NO, GET ADDRESS OF R WORD BU + HRLZI TAC,IOUSE ;BUFFER INUSE BIT + HRLI JBUF,PROG ;SET INDEX FIELD FOR RELOCATION USING A + PUSHJ PDP,ADRCK ;CHECK BUFFER HEADER + HRRZI TAC,2(JBUF) ;END ADDRESS OF 3 WORD HEADER + MOVE TAC1,@JBUF ;GET WORD 1 OF 3 WORD BUFFER HEADER (PO + HRLI TAC1,PROG ;SET INDEX FIELD COR RELOCATION USING A + SKIPG @JBUF ;HAS A BUFFER RING BEEN SET UP (RH NON- + ;WHICH HAS BEEN REFERENCED BY PREVIOUS + JRST INPUTF ;NO, GO SET UP BUFFER IF NECESSARY AND + ADRCHK TAC1 ;YES, CHECK ADDRESS TO SEE IF IN BOUNDS + ANDCAB TAC,@TAC1 ;FLAG THIS BUFFER AS BEING FILLED (USE + ;AND GET POINTER TO NEXT BUFFER + HRRM TAC,@JBUF ;SET WORD 1 IN 3 WORD HEADER TO NEXT BU + ADRCHK TAC ;AND CHECK ITS ADDRESS TO SEE IF IN BOUNDS +INPUT0: MOVE IOS,DEVIOS(DEVDAT) ;GET IO STATUS WORD + TRNN IOS,IOACT ;IS THE DEVICE ALREADY ACTIVE (FILLING + JRST INPT0B ;NO. + TRNN IOS,IOCON ;DOES THE USER WANT TO STOP AFTER EVERY + JRST INPT0C ;NO. HE WANTS NORMAL CONTINUOUS OVERLAP + PUSHJ PDP,WSYNC ;YES, WAIT TILL DEVICE FINISHES WITH ON +INPT0B: HRLI TAC,PROG ;SET FOR RELOCATION + HRR TAC,@TAC ;GET POINTER 1 BLOCK AHEAD OF NEXT BBUF + SKIPL @TAC + PUSHJ PDP,CALIN +INPT0C: HRR TAC1,@TAC1 +INPT0A: SKIPGE @TAC1 + JRST INPUT2 +INPUT1: PUSHJ PDP,WSYNC + SKIPGE @TAC1 + JRST INPUT2 + TDNE IOS,[XWD IOEND,IODERR] + JRST INEOF + MOVE IOS,DEVIOS(DEVDAT) + JRST INPUT1 + +INPUT2: ADDI TAC1,1 + HRRZ ITEM,@TAC1 + SUBI TAC1,1 + PUSH PDP,ITEM ;SAVE WORD COUNT AS STORED BY IO SERVIC + PUSHJ PDP,IOSETC + POP PDP,ITEM + LDB TAC,PIOMOD ;GET DEVICE DATA MODE + CAIN TAC, I ;IMAGE MODE? + MOVEM ITEM,@JBUF ;YES, STORE WORD COUNT NOT ITEM COUNT + JRST UXIT + + +INEOF: HRRZI IOS,IODEND + IORM IOS,DEVIOS(DEVDAT) + JRST UXIT + +INPUTA: HRR TAC1,UUO + ANDCAM TAC,@TAC1 + JRST INPUT0 + +;HERE ON FIRST INPUT AFTER INIT, INIT & LOOKUP, OR INIT & LOOKUP & IN +INPUTF: ANDCAM TAC,@JBUF ;MARK THAT BUFFERS HAVE BEEN REFERENCED + HRR TAC,@JBUF ;PICKUP ADDRESS OF FIRST BUFFERE IN RING + HRRM TAC,DEVIAD(DEVDAT) ;SET CURRENT RING BUFFER ADDR + ;IN DEVICE DATA BLOCK + SKIPN @JBUF ;HAS A RING BEEN SET UP YET? + JRST INPUT3 ;NO, GO SET UP A 2 BUFFER RING + PUSHJ PDP,CALIN ;YES, GO START TO SERVICE ROUTINE + ;FILLING BUFFER + JRST INPT0A +INPUT3: HRRI UUO,2 ;BUFFERS NOT SETUP YET. + ;SET UP 2 + PUSHJ PDP, UINBF + HLLZS UUO ;CLEAR RIGHT HALF + JRST IN1 + +INDMP: PUSHJ PDP,WSYNC + MOVE TAC,DEVSER(DEVDAT) + PUSHJ PDP,DDI(TAC) + PUSHJ PDP,WAIT1 + JRST UXIT + + + + +CALIN: TLNE IOS,IOEND + POPJ PDP, + PUSHJ PDP,WSYNC + PUSH PDP,TAC1 + MOVE TAC,DEVSER(DEVDAT) + PUSHJ PDP,DIN(TAC) + POP PDP,TAC1 + POPJ PDP, + + + + +,DEC 06 00 EX COM L PT PRE 03 OUTPUT +,H.R. MORSE 2/21/65 +,CALLING SEQUENCE +, OUTPUT D, +, EXIT +,OR +, OUTPUT D, ADR +, EXIT + +,IF INPUT IS ACTIVE, WAIT FOR IT TO COMPLETE. +,IF DUMP MODE WAS SELECTED BY THE LAST INIT UUO., THEN A CHECK IS MADE +, TO SEE IF DUMP FILES ARE LEGAL FOR THIS DEVICE. IF DUMP FILES AR +, NOT LEGAL. (IORET=0) AN ERROR MESSAGE IS PRINTED ON THE TTY AND +, CONTROL IS TRANSFERRED T THE COMMAND INPUT ROUTINE. +, OTHERWISE,THE PROGRAM WAITS UNTIL THE DEVICE IS INACTIVE AND THEN +, WRITES THE DUMPFILE AND RETURNS CONTROL TO THE USERS PROGRAM +,IF THE MODE IS NOT DUMP, THEN +,1) IF ADR IS NOT ZERO, WAIT FOR DEVICE TO BECOME INACTIVE THEN SET T +, CURRENT BUFFER ADDRESS EQUAL TO ADR AND AN INDICATOR (JBFADR0) +, SPECIFYING THAT THIS BUFFER RING HAS NEVER BEEN REFERENCED FROM T +, USERS PROGRAM BY AN INPUT OR AN OUTPUT UUO. OTHERWISE, GO TO +, 2) DIRECTLY. + +,2) IF THE BUFFER RING HAS NEVER BEEN REFERENCED (JBFADR0=1), THE +, BUFFER IS CLEARED. IOUSE SET TO ZERO AND +, IF THE CURRENT BUFFER ADDRESS IS ZERO, A TWO BUFFER RING IS SE +, THE GO TO 8 +, +,3) IF THE BUFFER RING HAS BEEN REFERENCED (JBFADR0=0 ,THEN A C +, MADE TO DETERMINE IF THE WORD COUNT IS TO BE COMPUTED. +, IF THE WORD COUNT IS TO BE COMPUTED (IOWC=0), IT IS SET EQUAL +, TO THE ADDRESS FOR THE LAST DATA WORD MINUS THE ADDRESS OF THE +, BUFFER MINUS ONE, + +,4) IOUSE IS SET TO ONE. INDICATING THAT THE BUFFER IS FULL OR BEING +, EMPTIED, AND THE CURRENT BUFFER ADDRESS IS ADVANCED. + +,5) IF THE DEVICE IS NOT ACTIVE (IOACT=0), OUTPUT IS STARTED. +,6) IF THE CURRENT BUFFER IS FULL OR BEING EMPTIED (IOUSE=1), +, THE PROGRAM WAITS UNTIL THE DEVICE IS INACTIVE +,7) THE CURRENT BUFFER IS CLEARED. +,8) THE ITEM POINTER IS INITIATED TO THE CURRENT BUFFER ADDRESS+1 +, AND THE ITEM COUNT IS SET TO THE PRODUCT OF THE BUFFER SIZE +, MINUS ONE AND THE INTEGER PART OF 36/BYTE SIZE. +,9) RETURN TO THE USERS PROGRAM + + +,MONITOR INTERFACE +, STORAGE: 54 +, ROUTINE CALLED: ADRCK, BUFCLR, CALOUT, INOUT, IOSETC, OUTA, +, OUTBUF, UXIT, WSYNC, +, SYMBOLS SET/USED: +, ACCUMULATORS: DEVDAT U PROG U +, IOS U TAC S/U +, ITEM S/U TAC1 S/U +, JBUF S/U UUO S +, PDP U +, DEVICE DATA BLOCK: DEVBUF U DEVOAD S +, IO STATUS WORD: IOACT U +, IOWC U +, JOB BUFFER AREA: JBADR S/U +, JBFCTR S +, JBPPTR S/U +, BUFFER SIZE U +, IOUSE S/U +, WORD COUNT S + + + + INTERN OUT + +OUT: TLNN IOS,IO ;IS THIS DEVICE ALREADY DOING INPUT? + PUSHJ PDP,WAIT1 ;YES, WAIT TILL IT BECOMES INACTIVE + LDB TAC,PUUOAC + TLO DEVDAT,OUTPB + HLLM DEVDAT,USRJDA(TAC) + LDB TAC,PIOMOD + CAIL TAC,DR + JRST OUTDMP + PUSHJ PDP,OUTA +OUT1: HLR JBUF,DEVBUF(DEVDAT) + PUSHJ PDP,ADRCK ;CHECK END OF 3 WORD HEADER + HRRZI TAC,2(JBUF) + HRLI JBUF,PROG + HRLZI TAC, IOUSE + SKIPG TAC1, @JBUF ;HAS THIS BUFFER EVER BEEN + ;;REFERENCED?(JBFADR0=0?) + JRST OUTF + AOS JBUF + HRRZ TAC, @JBUF + ADDI TAC1, 1 + SUB TAC, TAC1 + HRLI TAC1,PROG + TRNE IOS, IOWC ;COMPUTE WORD COUNT?(IOWC=0?) + JRST OUT2 + ADRCHK TAC1 ;PROCEED IF ADDRESS OF WORD COUNT + ;<PROTECTION ADDRESS + HRRM TAC, @TAC1 ;WORD COUNT:=C(JBFPTR18-35) + ; -C(JBFPTR18-35)- +OUT2: SUBI JBUF,1 + SUBI TAC1,1 + HRLZI TAC, IOUSE + IORB TAC, @TAC1 ;IOUSE:=1 + ADRCHK TAC1 + HRRM TAC,@JBUF ;ADVANCE CURRENT BUFFER ADDRE + MOVE IOS,DEVIOS (DEVDAT) + TRNN IOS,IOACT + PUSHJ PDP, CALOUT ;START OUTPUT + HLR JBUF,DEVBUF(DEVDAT) + HRLI JBUF,PROG + MOVE TAC1,@JBUF + HRLI TAC1,PROG + SKIPG @TAC1 ;IOUSE=1? + PUSHJ PDP, WSYNC ;WAIT FOR DEVICE TO BECOME IN + JRST OUTS + + +OUTF: SKIPE TAC1,@JBUF + JRST OUTF1 + HRRI UUO,2 + PUSHJ PDP,UOUTBF + HLR JBUF,DEVBUF(DEVDAT) + HRLI JBUF,PROG +OUTF1: HRLZI TAC, IOUSE + ANDCAB TAC, @JBUF ;IOUSE:=0 + HRRM TAC,DEVOAD(DEVDAT) +OUTS: HRRZ TAC,@JBUF + PUSHJ PDP,BUFCLR + HRR TAC1,@JBUF + HRLI TAC1,PROG + LDB ITEM,[POINT 17,@TAC1,17] + SUBI ITEM,1 + PUSHJ PDP,IOSETC ;JBFPTR18-35:=CURRENT BUFFER + ;ADDRESS+1 + ;JBFCTR:=(BUFFER SIZE-1)*[36/BYTE + ;SIZE] + JRST UXIT ;RETURN TO USERS PROGRAM + +OUTDMP: PUSHJ PDP,WSYNC + MOVE TAC,DEVSER(DEVDAT) + PUSHJ PDP,DDO(TAC) + PUSHJ PDP,WAIT1 + JRST UXIT + + + +,DEC 06 00 EX COM L PT PRE 01 OUTA +,H.R. MORSE 64-12-26 + +,CALLING SEQUENCE: +, PUSHJ PDP,OUTA +, EXIT ALWAYS RETURN HERE +,IF THE ADDRESS FIELD OF AC UUO IS ZERO,EXIT. OTHERWISE,CHECK IOACT. +,IF IOACT=1, WIAT FOR IOACT=0. +,SET JBFADR18-35:=ADDRESS FIELD OF AC UUO. JBFADR0:=1 AND EXIT. + +,MONITOR INTERFACE +, STORAGE:13 +, ROUTINES CALLED: WSYNC +, SYMBOLS SET/USED: +, ACCUMULATORS: DEVDAT U +, IOS U PROG U +, JBUF S/U TAC S/U +, DEVICE DATA BLOCK: DEVIOS U DEVBUF U +, IO STATUS WORD: IOACT U +, JOB BUFFER AREA: IOUSE U +, JBFADR S + + INTERN OUTA +OUTA: TRNN UUO, 777777 ;IS BUFFER ADDRESS SPECIFIED? + POPJ PDP, ;NO + PUSHJ PDP,WAIT1 + HLR JBUF,DEVBUF(DEVDAT) + HLRI JBUF,PROG + HRRM UUO,@JBUF + HRRM UUO,DEVOAD(DEVDAT) + HRLZI TAC,IOUSE + ANDCAM TAC,@JBUF + POPJ PDP, ;RETURN + + + +,DEC 06 00 EX COM L PT PRE 03 CALOUT +,H.R. MORSE 2/21/65 + +,CALLING SEQUENCE +, PUSHJ PDP,CALOUT +, EXIT + +,DISPATCH TO DEVICE SERVICE ROUTINE DOU TO INITIATE OUTPUT. + +,MONITOR INTERFACE +, STORAGE:2 +, SYMBOLS SET/USED: +, ACCUMULATORS: DEVDAT U +, TAC U +, DEVICE DATA BLOCK: DEVSER U + + INTERN CALOUT +CALOUT: TRNN IOS,IOACT + JRST CALOU1 + TRNN IOS,IOCON + POPJ PDP, + PUSHJ PDP,WSYNC +CALOU1: MOVE TAC,DEVSER(DEVDAT) + JRST DOU(TAC) + + + +,RELEASE A DEVICE + +INTERNAL RELEA1,RELEA2,RELEA3,RELEA5 + +RELEA0: MOVE IOS,DEVIOS(DEVDAT) ;CALLED FROM INIT +RELEA2:RELEA3: +RELEA1: TRZ UUO,-1 ;CLOSE BOTH INPUT AND OUTPUT + PUSHJ PDP,CLOSE1 + PUSHJ PDP,WAIT1 ;WAIT FOR DEVICE TO BECOME INACTIVE +RELEA5: MOVE TAC, DEVSER(DEVDAT) ;RELEASE WITHOUT WAITING + PUSHJ PDP, DRL (TAC) + LDB TAC,PUUOAC + SETZM USRJDA(TAC) + MOVEI TAC,17 ;IS THE DEVICE ON AONTHER USER CHANNEL? +RELEA4: HRRZ TAC1,USRJDA(TAC) + CAIE TAC1,(DEVDAT) + SOJGE TAC,RELEA4 + JUMPGE TAC,UXIT ;EXIT IF ON ANOTHER CHANNEL + MOVEI TAC1,ASSPRG ;OTHERWISE CLEAR ASSIGNED BY PROG. BIT + ANDCAB TAC1,DEVMOD(DEVDAT) + TDNN TAC1,[XWD TTYUSE,ASSCON] ; ASSIGNED BY CONSOLE OR TTY I + DPB UUO,PJOBN ;NO. CLEAR JOB NUMBER + JRST UXIT + + + + +,DEC 06 00 EX UUO L PT PRE 01 STATO +,H.R. MORSE 64-12-26 + +,CALLING SEQUENCE +, STATO D,MASK +, EXIT1 ALL SELECTED BITS ARE 0 +, EXIT2 SOME SELECTED BITS ARE 1 +,TESTS BITS OF I/O STATUS WORD OF DEVICE ON USERS CHANNEL D WHICH +,ARE SELECTED BY MASK. + +,MONITOR INTERFACE: +, STORAGE: 3 +, ROUTINES CALLED: UXIT +, SYMBOLS SET/USED: +, ACCUMULATORS: IOS U +, PDP U +, UUO U + + INTERN USTATO + +USTATO: TRNE IOS,(UUO) ;SKIP IF ANY INDICATED BITS ARE ONE + AOS (PDP) + JRST UXIT + + +,DEC 06 00 EX UUO L PT PRE 01 STATUS +,H.R. MORSE 64-12-26 + +,CALLING SEQUENCE +, STATUS D,ADR +, EXIT ALWAYS RETURNS HERE +,STORES I/O STATUS WORD OF DEVICE ON CHANNEL D IN LOCATION ADR. + +,MONITOR INTERFACE +, STORAGE: 3 +, ROUTINES CALLED: UXIT +, SYMBOLS SET/USED: +, ACCUMULATORS: IOS U +, PROG U +, UUO U + +INTERN USTATS +EXTERNAL ADRERR,USRREL + +USTATS: MOVE TAC,USRREL ;CHECK TO SEE IF IN BOUNDS + CAIG TAC,(UUO) + PUSHJ PDP,ADRERR + HRLI UUO,PROG ;LOAD STATUS INTO INDICATED ADDRESS. + HRRZM IOS,@UUO + JRST UXIT + + +,CALLING SEQUENCE +, SETSTS D,BITS +, EXIT ALWAYS RETURN HERE + +INTERNAL USETST +EXTERNAL WAIT1,SETIOS + +USETST: PUSHJ PDP,WAIT1 ;WAIT TILL DEVICE INACTIVE + MOVSI IOS, IOBEG + IORM IOS,DEVIOS(DEVDAT) + HRRM UUO,DEVIOS(DEVDAT) + JRST UXIT + +,DEC 06 00 EX UUO L PT PRE 01 STATZ +,H.R. MORSE 64-12-26 + +,CALLING SEQUENCE +, STATZ D,MASK +, EXIT1 SOME SELECTED BITS ARE 1 +, EXIT2 ALL SELECTED BITS ARE 0 + +,TESTS BITS OF I/O STATUS WORD OF DEVICE ON USERS +,CHANNEL D WHICH ARE SELECTED BY MASK, + +,MONITOR INTERFACE +, STORAGE: 3 +, ROUTINES CALLED: UXIT +, SYMBOLS SET/USED: +, ACCUMULATORS: IOS U +, PDP U +, UUO U + + INTERN USTATZ + +USTATZ: TRNN IOS,(UUO) ;SKIP IF ALL INDICATED BITS ARE ZERO + AOS (PDP) + JRST UXIT + + END, diff --git a/src/iocss.mac b/src/iocss.mac new file mode 100644 index 0000000..d2402cc --- /dev/null +++ b/src/iocss.mac @@ -0,0 +1,695 @@ + TITLE IOCSS - IO COMMON SYSTEM SUBROUTINES + SUBTTL 8-15-65 + EXTERNAL CLOSE1,DEVLST,ERROR,JBTADR + EXTERNAL JOB,JOBFF,RELEA1,USRJDA,WAIT1,CLDS,CLEN + EXTERNAL PJOBN,CPOPJ1,PIOMOD,CPOPJ,CPOPJ2 + EXTERNAL SCNOFF,SCNON + + +,DEC 06 00 EX COM L PT PRE 01 ADVBFE +,H.R. MORSE 64-12-26 +,CALLING SEQUENCE +, PUSHJ PDP,ADVBFE +, EXIT1 RETURN IF NEXT BUFFER IS EMPTY +, EXIT2 RETURN IF NEXT BUFFER IS FULL +,CLEARS THE USE BIT (IOUSE:=0) OF THE BUFFER POINTED TO BY THE +,OUTPUT BUFFER ADDRESS (DEVOAD) OF THE CURRENT DEVICE DATA BLOCK +,AND ADVANCES THE BUFFER ADDRESS TO THE NEXT BUFFER IN THE RING +,UPON RETURN, SKIPS IF THE NEXT BUFFER IS FULL. +,MONITOR INTERFACE +, STORAGE: 6 +, SYMBOLS SET/USED: +, ACCUMULATORS: DEVDAT U +, PDP S/U +, TAC S/U +, DEVICE DATA BLOCK: DEVOAD S/U +, JOB BUFFER HEADER: IOUSE S/U + INTERN ADVBFE +ADVBFE: ADRCHK DEVOAD(DEVDAT) + HRLZI TAC,IOUSE; IOUSE:=0 + ANDCAB TAC,@DEVOAD(DEVDAT) + HRRM TAC,DEVOAD(DEVDAT); DEVOAD 18-35:=NEXT BUFFER ADDRESS + SKIPGE @DEVOAD(DEVDAT); IS IOUSE=0? + AOS (PDP); EXIT2. BUFFER IS FULL + POPJ PDP,; EXIT1. BUFFER IS EMPTY + + +,DEC 06 00 EX COM L PT PRE 01 ADVBFF +,H.R. MORSE 64-12-26 +,CALLING SEQUENCE +, PUSHJ PDP,ADVBFF +, EXIT1 RETURN IF NEXT BUFFER IS FULL +, EXIT2 RETURN IF NEXT BUFFER IS EMPTY +,SETS THE USE BIT (IOUSE:=1) OF THE BUFFER POINTED TO BY THE +,INPUT BUFFER ADDRESS (DEVIAD) OF THE CURRENT DEVICE DATA BLOCK +,AND ADVANCES THE BUFFER ADDRESS TO THE NEXT BUFFER IN THE RING. +,UPON RETURN. SKIPS IF THE NEXT BUFFER IS EMPTY, +,MONITOR INTERFACE +, STORAGE: 6 +, SYMBOLS SET/USED: +, ACCUMULATORS: DEVDAT U +, PDP S/U +, TAC S/U +, DEVICE DATA BLOCK: DEVIAD S/U +, JOB BUFFER HEADER: IOUSE S/U + INTERN ADVBFF +ADVBFF: ADRCHK DEVIAD(DEVDAT) + HRLZI TAC,IOUSE; IOUSE:=1 + IORB TAC,@DEVIAD(DEVDAT) + HRRM TAC,DEVIAD(DEVDAT); DEVIAD:=NEXT BUFFER ADDRESS + SKIPL @DEVIAD(DEVDAT); IOUSE=1? + AOS (PDP); EXIT2. NEXT BUFFER IS EMPTY + POPJ PDP,; EXIT1. NEXT BUFFER IS FULL + + + +,DEC 06 00 EX COM L PT PRE 01 ASCIA +,C. FRAZIER AND W. SEGAL 64-12-26 +,CALLING SEQUENCE +, PUSHJ PDP,ASCIA +, EXIT ALWAYS RETURNS HERE +,ADDS THE ASCII INCREMENT (RIGHT JUSTIFIED) IN AC TAC1 TO THE FIVE +,DIGIT ASCII NUMBER (LEFT JUSTIFIED) IN AC TAC AND LEAVES THE +,RESULT (LEFT JUSTIFIED) IN AC TAC. TAC1 IS RESTORED. +,MONITOR INTERFACE +, STORAGE: 21 +, SYMBOLS SET/USED: +, ACCUMULATORS: PDP U +, TAC S/U +, TAC1 S/U + + +; INTERN ASCIA +;ASCIA: PUSH PDP,TAC1; SAVE TAC1 = ASCII INCREMENT (RIGHT JUST +; AND TAC1,K2; CLEAR MOST SIGNIFICANT 3 BITS OF +;, EACH CHARACTER +; LSH TAC,-1; TAC=FIVE DIGIT ASCII NO.(RIGHT JUST.) +; IOR TAC,K4; SET SECOND AND THIRD MOST SIGNIFICANT +;, BITS OF EACH CHARACTER TO ONES. +; TLZN TAC,400000 +; ADD TAC,K1 +; ADD TAC1,TAC +; AND TAC1,K3 +; MOVE TAC,K4 +; AND TAC,TAC1 +; ASH TAC,-3 +; SUBM TAC1,TAC +; IOR TAC,K4 +; LSH TAC,1 +; TRO TAC,1 +; POP PDP,TAC1; RESTORE TAC1 +; POPJ PDP,; RETURN +;K1: OCT 215064321506; CHARACTER MASK: 1000110 +;K2: OCT 036170743617; CHARACTER MASK: 0001111 +;K3: OCT 176773757677; CHARACTER MASK: 0111111 +;K4: OCT 140603014060; CHARACTER MASK: 0110000 + + + INTERNAL ASSIN,ASSASG + +ASSIN: PUSHJ PDP,DEVSRC ;SEARCH FOR DEVICE + POPJ PDP, ;DEVICE NOT FOUND + MOVEI TAC1, ASSPRG ;DEVICE FOUND, FLAG AS ASSIGNED BY PROG + +;ASSIGN DEVICE IF UNASSIGNED +;CALL: MOVE ITEM, JOB NUMBER +; MOVE DEVDAT, ADDR. OF DDB +; MOVEI TAC1, EITHER ASSPRG OR ASSCON +; PUSHJ PDP, ASSASG +; CANT ASSIGN RETURN +; ASSIGNED RETURN + +ASSASG: CONO APR,CLDS ;DISABLE CLOCK + LDB TAC,PJOBN ;GET JOB NUMBER IN DEV DATA BLOCK + CAMN TAC,ITEM ;IS IT ALREADY ASSIGNED TO THIS JOB + JRST ASSAS1 ;YES + MOVEI TAC, ASSPRG+ASSCON ;NO, IS IT ASSIGNED TO ANOTHE + CONO PI, SCNOFF ;TURN SCANNER OFF + TDNE TAC, DEVMOD(DEVDAT) ;ARE EITHER ASSIGNED BITS SET + JRST ASSAS2 ;YES + IORM TAC1, DEVMOD(DEVDAT) ;NO, SET ONE OF THEM + DPB ITEM,PJOBN ;AND STORE JOB NUMBER +ASSAS1: AOS (PDP) +ASSAS2: CONO PI, SCNON ;TURN SCANNER BACK ON + CONO APR,CLEN ;RENABLE CLOCK + POPJ PDP, + + +;ROUTINE TO SEARCH FOR A DEVICE +;CALL: HRR ITEM,JOB NUMBER +; MOVE TAC,[SIXBIT .DEVICE NAME.] +; PUSHJ PDP, DEVSRC +; NOT FOUND +; FOUND + + INTERNAL DEVLG,DEVSRC,DEVPHY + EXTERNAL SYSTAP,DEVOPR + +DEVSRC: PUSHJ PDP, DEVLG ;SEARCH LOGICAL NAMES FIRST + JRST DEVPHY ;NOT FOUND, SEARCH PHYSICAL NAMES + JRST CPOPJ1 ;FOUND + +;SEARCH LOGICAL NAMES + +DEVLG: HLRZ DEVDAT,DEVLST ;BEGINNING OF DDB CHAIN + JUMPE TAC,CPOPJ ;0 CANNOT BE A LOGICAL NAME +DEVLP0: CAME TAC,DEVLOG(DEVDAT) ;COMPARE WITH LOGICAL NAME + JRST DEV0 ;NO MATCH + LDB TAC1,PJOBN ;DOES THE LOGICAL NAME BELONG TO THIS J + CAMN TAC1,ITEM + JRST CPOPJ1 ;YES +DEV0: HLRZ DEVDAT,DEVSER(DEVDAT) ;NO, KEEP LOOKING + JUMPN DEVDAT,DEVLP0 + POPJ PDP, ;FINISH AND NOT FOUND + +;SEARCH PHYSICAL NAMES + +DEVPHY: JUMPE TAC,CPOPJ ;ZERO CANNOT BE A LOGICAL NAME + CAMN TAC,[SIXBIT /OPR/] ;IS IT "OPR"? + MOVE TAC,DEVOPR ;YES, CHANGE TO OPERATORS TTY + CAMN TAC,[SIXBIT /SYS/] ;IS IT "SYS"? + MOVE TAC,SYSTAP ;YES, CHANGE TO SYSTEM TAPE NAME + HLRZ DEVDAT,DEVLST ;SEARCH DEVICE DATA BLOCKS +DEVLP1: CAMN TAC,DEVNAM(DEVDAT) + JRST CPOPJ1 ;FOUND + HLRZ DEVDAT,DEVSER(DEVDAT) + JUMPN DEVDAT,DEVLP1 + POPJ PDP, ;NOT FOUND + + +,DEC 06 00 EX COM L PT PRE 01 BUFCLC +,H. R. MORSE 64-12-26 +,CALLING SEQUENCE +, PUSHJ PDP,BUFCLC +, EXIT RETURNS HERE IF MEMORY NOT EXCEEDED +, SETS UP AN N BUFFER RING FOLLOWING THE USERS PROGRAM, WHERE N +, IS IN THE ADDRESS FIELD OF AC UUO. +, THE BUFFER RING FORMAT IS AS FOLLOWS: +, LOCATION LH CONTENTS RH +, C(JOBFF) + 1 BUFFER C(JOBFF) +1 +, + 0(BUFFER SIZE+2) SIZE + 1(BUFFER SIZ+2) +, C(JOBFF) +1 BUFFER C(JOBFF) +1 +, +1(BUFFER SIZE+2) SIZE + 2(BUFFER SIZE+2) +, . . . +, . . . +, . . . +, C(JOBFF) + 1 BUFFER C(JOBFF) + 1 +, + (N-2)(BUFFER SIZE+2) SIZE +(N-1)(BUFFER SIZE+2) +, C(JOBFF) + 1 BUFFER C(JOBFF) + 1 +, + (N-1)(BUFFER SIZE+2) SIZE +,THEN SET BUFPNT:=IOUS,C(JOBFF) + 1 +, AND JOBFF:=C(JOBFF) + 1 + N(BUFFER SIZE + 2) +, BUFWRD IS RESTORED. +,MONITOR INTERFACE +, STORAGE: 20 +, ROUTINES CALLED: ADRCK +, SYMBOLS SET/USED: +, ACCUMULATORS: BUFPNT S/U PROG U +, BUFWRD S/U TAC S/U +, DEVDAT U TAC1 S/U +, PDP S/U UUO U +, DEVICE DATA BLOCK: DEVCHR U +, JOB AREA: JOBFF S/U +, JOB BUFFER HEADER: IOUSE U + + + INTERN BUFCLC +BUFCLC: PUSH PDP,BUFWRD; SAVE BUFWRD ON STACK + LDB TAC,[POINT 12,DEVCHR(DEVDAT),35];TAC:=BUFFER SIZE + HRRZ BUFPNT,JOBFF(PROG);BUFPNT:=FIRST FREE LOCATION + 1 + ADDI BUFPNT,1 + HRRZ BUFWRD,BUFPNT + HRLI BUFPNT,PROG + HRL BUFWRD,TAC; BUFWRD:=BUFFER SIZE,FIRST FREE LOC + 1 + ADDI TAC,2; TAC:=BUFFER SIZE + 2 + HRRZ TAC1,UUO; TAC1:=N=ADDRESS FIELD OF AC UUO +BUFC1: ADD BUFWRD,TAC; BUFWRD:=C(BUFWRD) + C(TAC) + ADRCHK BUFPNT; CHECK BUFFER FOR MEMORY BOUND + MOVEM BUFWRD,@BUFPNT; BUFFER HEADER+1:=C(BUFWRD) + HRR BUFPNT,BUFWRD; BUFPNT 18-35:=C(BUFWRD 18-35) + SOJG TAC1,BUFC1; N:=N-1. IS N>0? + HRR BUFWRD,JOBFF(PROG) + ADDI BUFWRD,1 + PUSHJ PDP,ADRCK ;CHECK LAST ADR. OF HEADER + HRRZI TAC,-2(BUFPNT) + SUB BUFPNT,TAC + MOVEM BUFWRD,@BUFPNT;LINK LAST BUFFER TO FIRST BUFFER + ADD BUFPNT,TAC + HRRM BUFPNT,JOBFF(PROG);JOBFF:=C(JOBFF)+1+N(BUFFER SIZE+2) + HRR BUFPNT,BUFWRD; BUFPNT:=IOUSE,ADDRESS OF FIRST BUFFER +, IN RING. + HRLI BUFPNT,IOUSE + POP PDP,BUFWRD; RESTORE BUFWRD FROM STACK. + POPJ PDP,; RETURN + + +,DEC 06 00 EX COM L PT PRE 01 BUFCLR +,H. R. MORSE 64-12-26 +,CALLING SEQUENCE +, PUSHJ PDP,BUFCLR +, EXIT RETURNS HERE IF MEMORY NOT EXCEEDED +, CLEAR THE WORD COUNT AND DATA AREA OF THE BUFFER WHOSE ADDRESS +, IS IN TAC 18-35. +,MONITOR INTERFACE: +, STORAGE: 13 +, ROUTINE CALLED: ADRCK +, SYMBOLS SET/USED: +, ACCUMULATORS: PDP U TAC S/U +, PROG U TAC1 S/U + INTERN BUFCLR +BUFCLR: HRLI TAC,PROG + ADRCHK TAC; PROCEED IF CURRENT BUFFER ADDRESS +, < PROTECTION ADDRESS. + HLRZ TAC1,@TAC; TAC1 18-35=SIZE + TRZ TAC1,400000 + ADD TAC1,TAC; TAC1:=CURRENT BUFFER ADDRESS + SIZE + ADRCHK TAC1; PROCEED IF CURRENT BUFFER ADDRESS +, + SIZE < PROTECTION ADDRESS. + MOVEI TAC,@TAC; TAC:=CURRENT BUFFER ADDRESS+1, +, CURRENT BUFFER ADDRESS+1 + HRL TAC,TAC + AOBJN TAC,.+1 + CLEARM 0(TAC); WORD COUNT:=0 + AOS TAC; TAC:=CURRENT BUFFER ADDRESS+1, +, CURRENT BUFFER ADDRESS+2 + BLT TAC,@TAC1; CLEAR BUFFER + POPJ PDP,; RETURN + + SUBTTL 5-17-65 PART 2 + + +,CALLING SEQUENCE +, PUSHJ PDP,CKS12 +, EXIT ALWAYS RETURNS HERE +,CALCULATES FOLDED 12 BIT CHECKSUMS OF THE DATA WORDS IN THE +,BUFFER WHOSE ADDRESS IS IN AC TAC1. TWO ALGORITHMS ARE USED. +,ON RETURN, THE LEFT HALF OF AC TAC CONTAINS A CHECKSUM OBTAINED +,BY ACCUMULATING, IN ONES COMPLEMENT, THE DATA WORDS AND FOLDING IT. +,THE LEFT HALF OF AC DAT CONTAINS A CHECKSUM OBTAINED BY ACCUMULATING +,IN TWOS COMPLEMENT, THE DATA WORDS AND FOLDING IT. AC TAC1 +,CONTAINS A 1. +,MONITOR INTERFACE +, STORAGE: 20 +, ROUTINES CALLED: FOLD +, SYMBOLS SET/USED: +, ACCUMULATORS: DAT S/U SUB S +, PDP U TAC S/U +, PROG U TAC1 S/U + + + INTERN CKS12 +CKS12: ADD TAC1,PROG; TAC1:=-WORD COUNTER,ADDRESS OF FIRST DATA + AOS TAC1 + HRRZ TAC,0(TAC1) + MOVNS TAC + AOS TAC1 + HRL TAC1,TAC + CLEARM TAC; INITIALIZE TWOS COMPLEMENT SUM +CKS12A: ADD TAC,0(TAC1); TWOS COMPLEMENT ADD + AOBJN TAC1,CKS12A; DONE? +FOLD: LSHC TAC,-30 + LSH TAC1,-14 + ADD TAC,TAC1 + LSHC TAC,-14 + LSH TAC1,-30 + ADD TAC,TAC1 + TRZE TAC,770000 + AOS TAC + HRLZS TAC + MOVEI TAC1,1 ;TAC1:=1 + POPJ PDP, + + +,DEC 06 00 EX COM L PT PRE 01 CLRBYT +,H. R. MORSE 64-12-26 +,CALLING SEQUENCE +, PUSHJ PDP,CLRBYT +, EXIT ALWAYS RETURN HERE +,CALLED WITH A BYTE POINTER IN AC TAC, IT CLEARS THE REST OF THE +,WORD POINTED TO BY THE BYTE POINTER. +,MONITOR INTERFACE +, STORAGE: 7 +, SYMBOLS SET/USED: +, ACCUMULATORS: PDP U +, TAC U +, TAC1 S/U + INTERN CLRBYT +CLRBYT: LDB TAC1,[POINT 6,TAC,5]; TAC1:=P + DPB TAC1,[POINT 12,TAC,11]; TAC 0-5:=0, TAC 6-12:=P + SETZM TAC1 + DPB TAC1,TAC; CLEAR BITS 36-P THROUGH 35 + POPJ PDP,; RETURN + + +;ROUTINE TO RELEASE ALL DEVICES ASSIGNED TO JOB + +INTERNAL IORELS +EXTERNAL PUUOAC,RELEA3 + + +IORELS: MOVEI TAC,RELEA3 ;RELEASE ALL IO DEVICES(DONT CLOSE) + +;ROUTINE TO DO IO FOR ALL DEVICES ASSIGNED TOI JOB +;CALL MOVEI TAC,ADR. OR IO SUB. +; PUSHJ PDP,IOALL + +INTERNAL IOALL + +IOALL: PUSH PDP,TAC ;SAVE ADR. FO SUB. + HRLZI DAT, -20 +IOALL1: MOVE DEVDAT, USRJDA(DAT) + MOVE IOS,DEVIOS(DEVDAT) + MOVEI UUO,0 + DPB DAT,PUUOAC + SKIPE DEVDAT + PUSHJ PDP,@(PDP) ;CALL THE SUB. + AOBJN DAT, IOALL1 + POP PDP,TAC + POPJ PDP, + +;KILL ALL DEVICES(RELEASE WITHOUT WAITING FOR DEVICE INACTIVE) + +INTERNAL IOKILL +EXTERNAL RELEA5 + +IOKILL: MOVEI TAC,RELEA5 + JRST IOALL + + +,DEC 06 00 EX COM L PT PRE 01 IOSET +,H. R. MORSE 64-12-26 +,CALLING SEQUENCE +, PUSHJ PDP,IOSET +, EXIT ALWAYS RETURNS HERE +,THIS PROGRAM IS CALLED FROM AN INTERRUPT SERVICE ROUTINE. +,IT PUTS THE ADDRESS OF THE DATA AREA OF THE JOB (C(JBTADR18-35)) +,CONNECTED TO THE DEVICE SPECIFIED BY AC DEVDAT IN AC PROG AND +,PUTS THE ITEM POINTER (C(DEVCTR)) IN AC ITEM. +,MONITOR INTERFACE +, STORAGE: 5 +, SYMBOLS SET/USED: +, ACCUMULATORS: DEVDAT U PDP U +, ITEM S PROG S/U +, DEVICE DATA BLOCK: DEVCHR U +, DEVCTR U +, SYSTEM ADDRESSES: JBTADR U + INTERN IOSET + +IOSET: LDB PROG,PJOBN + MOVE ITEM,DEVCTR(DEVDAT); ITEM:=ITEM POINTER=C(DEVCTR) + HRRZ PROG,JBTADR(PROG); PROG:=C(JBTADR 18-35) + POPJ PDP,; RETURN + + +,6-CSS-DEC-IOSETC-PL-PRE1 +,H.R. MORSE 17-11-64 + +,CALLING SEQUENCE +, PUSHJ PDP,IOSETC +, EXIT ALWAYS RETURN HERE + +,SETS JBFPTR18-35:=C(TAC1 18-35) +, JBFCTR:=C(ITEM)*[WORD LENGTH/BYTE SIZE] +,WHERE WORD LENGTH:=36 DECIMAL +, BYTE SIZE:=C(JBFPTR6-11) +, [X]:= INTEGER PART OF X + +,MONITOR INTERFACE +, STORAGE: 11 +, ROUTINES CALLED: ITMCT1 +, SYMBOLS SET/USED: +, ACCUMULATORS: JBUF S/U TAC S/U +, ITEM S/U TAC1 S/U +, PDP U + + INTERN IOSETC + +IOSETC: ADDI JBUF,1 ;JBFPTR12-18:=0 + HRLZI TAC,7777 ;JBFPTR18-35:=C(TAC1 18-35)+1 + ANDM TAC,@JBUF + HRRM TAC1,@JBUF + AOS @JBUF + LDB TAC1,[POINT 6,@JBUF,11] ;TAC1:=BYTE SIZE + PUSHJ PDP,ITMCT1 ;JBFCTR:=C(ITEM)*[36/BYTE SIZE] + ADDI JBUF+1 + MOVEM ITEM,@JBUF + POPJ PDP, ;EXIT + + +,DEC 06 00 EX COM L PT PRE 01 ITMSET, ITMCNT, ITMCT1 +,H.R. MORSE 64-12-26 + +,CALLING SEQUENCE +, PUSHJ PDP,ITMSET +, EXIT ALWAYS RETURNS HERE +,SETS AC ITEM:=(BUFFER SIZE-1)*[WORD LENGTH/BYTE SIZE] +,WHERE BUFFER SIZE:=BITS 1-17 OF THE BUFFER HEADER WORD POINTED TO +, BY C(DEVADR) +, WORD LENGTH:=36 DECIMAL +, BYTE SIZE:=INTEGER PART OF X. + +,CALLING SEQUENCE +, PUSHJ PDP,ITMCNT +, EXIT ALWAYS RETURNS HERE +,SETS AC ITEM=C(ITEM)*[WORD LENGTH/BYTE SIZE] + +,CALLING SEQUENCE +, PUSHJ PDP,ITMCT1 +, EXIT ALWAYS RETURNS HERE +,SETS AC ITEM:=C(ITEM)*[WORD LENGTH/C(TAC1)] + +,MONITOR INTERFACE +, STOAGE: 7 +, SYMBOLS SET/USED: +, ACCUMULATORS: DEVDAT U TAC S/U +, ITEM S/U TAC1 S/U +, PDP U +, DEVICE DATA BLOCK: DEVADR U +, DEVPTR U + + + INTERN ITMSET,ITMCNT,ITMCT1 +ITMSET: LDB ITEM,[POINT 17,@DEVADR(DEVDAT),17];ITEM:=BUFFER SIZE-1 + SUBI ITEM,1 +ITMCNT: LDB TAC1,[POINT 6,DEVPTR(DEVDAT),11];TAC1:=BYTE SIZE +ITMCT1: MOVEI TAC,44 ;ITEM:=C(ITEM)*[WORD LENGTH/C(TAC1)] + IDIV TAC,TAC1 + IMUL ITEM,TAC + POPJ PDP, + + +;ROUTINE TO SET DEVICE STATUS WORD FROM UUO + +INTERNAL SETIOS +EXTERNAL ILLMOD + +SETIOS: LDB TAC,[POINT 4,UUO,35] ;GET DEVICE DATA MODE + MOVEI TAC,1 ;AND CHECK FOR LEGALITY + LSH TAC,(TAC1) + TDNN TAC,DEVMOD(DEVDAT) + JRST ILLMOD ;ILLEGAL MODE + TRZ UUO,IOACT ;LET USER SET ALL BITS EXCEPT IOACT + HRRM UUO,DEVIOS(DEVDAT) + POPJ PDP, + + +,DEC 06 00 EX COM L PT PRE 01 NEWBUF, BPNSET +,H. R. MORSE 64-12-26 +,CALLING SEQUENCE +, PUSHJ PDP,NEWBUF +, EXIT ALWAYS RETURNS HERE +,CLEARS THE BUFFERE CURRENTLY POINTED TO BY THE INPUT BUFFER +,ADDRESS (DEVDR) OF THE CURRENT DEVICE. SETS UP THE BYTE +,POINTER (DEVPTR), AND THE ITEM COUNT (DEVCTR) AND RETURNS. +,CALLING SEQUENCE +, PUSHJ PDP,BPNSET +, EXIT ALWAYS RETURNS HERE +,SETS UP THE BYTE POINTER (DEVPTR) AND THE ITEM COUNT (DEVCTR) +,OF THE CURRENT DEVICE AND RETURNS. +,MONITOR INTERFACE +, STORAGE: 10 +, ROUTINES CALLED: BUFCLR, ITMSET +, SYMBOLS SET/USED: +, ACCUMULATORS: DEVDAT U PDP U +, ITEM U TAC S/U +, DEVICE DATA BLOCKS: DEVADR U +, DEVCTR S +, DEVPTR S/U + + INTERN BPNSET,NEWBUF + +NEWBUF: HRRZ TAC,DEVADR(DEVDAT); TAC:=INPUT BUFFER HEADER ADDRESS + PUSHJ PDP,BUFCLR; CLEAR INPUT BUFFER. +BPNSET: HRR TAC,DEVADR(DEVDAT) + HRLZI TAC,7737 + AND TAC,DEVPTR(DEVDAT); DEVPTR 0-5:=0, DEVPTR 12:=0 + HRR TAC,DEVADR(DEVDAT); DEVPTR 10-35:=C(DEVADR 18-35) + 1 + AOS TAC + MOVEM TAC,DEVPTR(DEVDAT) + PUSHJ PDP,ITMSET; ITEM:=(BUFFER SIZE-1)[36/BYTE SIZE] + MOVEM ITEM,DEVCTR(DEVDAT); DEVCTR:=ITEM COUNT + POPJ PDP,; RETURN + + +,DEC 06 00 EX COM L PT PRE 02 SETBYT +,H. R. MORSE 64-12-26 +,CALLING SEQUENCE +, PUSHJ PDP,SETBYT +, EXIT ALWAYS RETURN HERE +,SETS TAC 0-5:=0 +, TAC 6-11:=S +, TAC 12-13:=0 +, TAC 14-17:=PROG +,WHERE S=35 IF DATA MODE (IOS 32-25) IS BINARY (B) +, S=8 IF DATA MODE IS IMAGE (I) +, S=7 IF DATA MODE IS ASCII PACKED (A) +, ASCII LINE (AL) +, ASCII SEQUENCED (AS) +, ASCII SEQUENCED (ASL) +, OR ALTERNATE MODE BREAK (AM) +,MONITOR INTERFACE +, STORAGE: 12 +, SYMBOLS SET/USED: +, ACCUMULATORS: PROG U TAC S +, PDP U TAC1 S/U +, DEVICE DATA BLOCK: DEVIOS U + INTERN SETBYT +SETBYT: MOVE TAC1,DEVIOS(DEVDAT); FETCH DATA MODE, BITS 32-35 0 + ANDI TAC1, 17 + CAIE TAC1,IB ;DATA MODE IMAGE BINARY? + CAIN TAC1,B; IS DATA MODE=BINARY? + HRLI TAC,4400+PROG; SET BYTE SIZE TO 36. + CAIN TAC1,I; IS DATA MODE=IMAGE? + JRST SETBY1 + TRNE TAC1,14; IS DATA MODE=ASCII PACKED,ASCII LINE, + JRST .+2; ASCII SEQUENCED,OR ASCII SEQUENCED LINE + HRLI TAC,700+PROG; SET BYTE SIZE TO 7. + POPJ PDP,; RETURN + +SETBY1: HLLZ TAC,DEVMOD(DEVDAT) + TLZ TAC,770077 + TLO TAC,PROG + POPJ PDP, + + +,DEC 06 00 EX COM L PT PRE 01 STORE ITEM +,H.R. MORSE 64-12-26 +,CALLING SEQUENCE +, PUSHJ PDP,STODAT +, EXIT1 CHECKSUM ERROR +, EXIT2 BLOCK FULL OR BLOCK COMPLETE +, EXIT3 DATA STORED CORRECTLY +,CALLED FROM AN INPUT SERVICE ROUTINE WITH A DATA ITEM IN AC DAT. +,STORES THE DATA ITEM IN THE BUFFER, CHECKING TO SEE IF IT WERE +,THE FIRST ITEM ON THE BUFFER AND SETTING UP THE POINTER AND +,WORD COUNT APPROPRIATELY CHECKING THE MODE TO SEE IF ANY SPECIAL +,PROCESSING NEED BE DONE. FOR EXAMPLE, GENERATION OF SEQUENCE +,NUMBERS PRECEDING EACH LINE IN SEQUENCE MODE, OR THE TERMINATION +,OF A BUFFER ON CERTAIN CHARACTERS IN OTHER MODES, OR IF THE BUFFER +,RETURN OCCURS ON AN ERROR CONDITION. THE SECOND RETURN OCCURS +,ON A BLOCK FULL CONDITION OR BLOCK COMPLETE CONDITION, THE THIRD +,RETURN OCCURS ON THE DATA STORED CORRECTLY CONDITION. THIS +,ROUTINE ALSO DOES SOME CHECKING ON INPUT OF BINARY RECORD, +,PAPER TAPE OR CARDS. +,CALLING SEQUENCE +, PUSHJ PDP,STOSQD +, XXXX ALWAYS SKIPS +, EXIT ALWAYS RETURNS HERE +,STORES THE WORD COUNT:=C(DEVPTR 18-35) -C(DEVIAD 18-35) - 1 +,IN THE BUFFER. +,MONITOR INTERFACE +, STORAGE: 69 +, ROUTINES CALLED: ASCIA, CKS12, ITMSET, NEWBUF +, SYMBOLS SET/USED: +, ACCUMULATORS: DAT U PDP U +, DEVDAT U TAC S/U +, IOS S/U TAC1 S/U +, ITEM S/U +, DEVICE DATA BLOCK: DEVCTR U DEVPTR S/ +, DEVIAD U DEVSEQ S/ +, IO STATUS WORD: A U I U +, AS U IOBKTL S +, ASL U IODTER S +, B U IOFST S/ +, JOB BUFFER AREA: WORD COUNT S + + INTERN STODAT, STOSQD + +STODAT: TLNE IOS,IOFST; WILL THE NEXT ITEM BE THE FIRST ITEM +, OF A BUFFER? + PUSHJ PDP,NEWBUF; SET UP A NEW BUFFER. ITEM:=(BUFFER +, SIZE - 1)*[36/BYTE SIZE] + LDB TAC1,PIOMOD; TAC1:=DATA MODE + CAIN TAC1,B; MODE=BINARY? + JRST STOBIN + TLZ IOS,IOFST +STO1: DPBI DAT,DEVPTR(DEVDAT); STORE DATA IN BUFFER. + CAIE TAC1,A; MODE=ASCII, IMAGE, OR BINARY? + CAIN TAC1,I + JRST STOAIB + CAIN TAC1,B + JRST STOAIB + CAIG DAT,214 ;LINE FEED,FORM FEED, OR VERTICAL TAB? + CAIGE DAT,212 + JRST .+2 ;NO + JRST STOSQD ;YES + SOJGE ITEM,CPOPJ2; ITEM:=C(ITEM)-1. IS C(ITEM)>OR=0? +STOE1: TRO IOS,IOBKTL ;IOBKTL:=1 + JRST CPOPJ +STOAIB: SOJG ITEM,CPOPJ2; ITEM:=C(ITEM)-1. IS C(ITEM)>0? + CAIN TAC1,A; MODE=ASCII? + JRST STOSQD + CAIN TAC1,B; MODE=BINARY? + JRST STOBND +STOI: PUSHJ PDP,ITMSET; ITEM:=(BUFFER SIZE-1)*[36/BYTE SIZE] +, - C(DEVCTR) + SUB ITEM,DEVCTR(DEVDAT) + HRRZ TAC1,DEVIAD(DEVDAT) ;STORE ITEM COUNT INSTEAD OF + ADDI ITEM,1 ;IN FIRST WORD OF BUFFER + AOJA TAC1,STOSQE + +STOSQD: MOVE TAC1,DEVIAD(DEVDAT); TAC1:=ADDRESS OF WORD COUNT + AOS TAC1 + HRRZ ITEM,DEVPTR(DEVDAT); ITEM:=C(DEVPTR 18-25) - +, C(DEVIAD 18-35) -1 + SUB ITEM,TAC1 +STOSQE: HRRM ITEM,@TAC1 ;WORD COUNT TO FIRST WORD IN BUFFER + JRST CPOPJ1; EXIT2. BLOCK COMPLETE +STOBIN: TLZN IOS,IOFST; WILL THE NEXT ITEM BE THE FIRST ITEM + JRST STO1; OF A BUFFER? IOSFST:=0 + HRRZ TAC,DAT + CAMLE TAC,ITEM; IS WORD COUNT <OR= (BUFFER SIZE-1)* + JRST STOE1; [36/BYTE SIZE]? + MOVE ITEM,TAC; ITEM:=WORD COUNT + MOVEM DAT,@DEVPTR(DEVDAT); STORE WORD COUNT IN BUFFER + JRST CPOPJ2; EXIT3. DATA STORED CORRECTLY. +STOBND: HRRZ TAC1,DEVIAD(DEVDAT) + PUSHJ PDP,CKS12; COMPUTE CHECKSUM + ADD TAC1, DEVIAD(DEVDAT) + HLLZ TAC1,@TAC1; DATA CHECKSUM=COMPUTED CHECKSUM? + CAMN TAC,TAC1 + JRST CPOPJ1; EXIT2. BLOCK COMPLETE + TRO IOS,IODTER; IODTER:=1 + JRST CPOPJ; EXIT1. CHECKSUM ERROR + + +,DEC 06 00 EX COM L PT PRE 01 UINTQ +,H.R. MORSE 64-12-26 +,CALLING SEQUENCE +, PUSHJ PDP, UINT1 +, EXIT ALWAYS RETURNS HERE +,TAC:=CONTENTYS OF WORD FOLLOWING UUO CALL +,FROM USERS AREA. +,MONITOR INTERFACE +, STORAGE: 4 +, SYMBOLS SET/USED: +, ACCUMULATORS: PDP U TAC S/U +, PROG U + INTERN UINTQ +UINTQ: MOVE TAC, -1(PDP) ;TAC:=ADDRESS FOLLOWING UUO C + HRLI TAC, PROG ;RELOCATE ADDRESS + MOVE TAC, @TAC ;TAC:=CONTENTS OF WORD FOLLOW + ;UUO CALL FROM USERS AREA + POPJ PDP, ;RETURN + + END, diff --git a/src/ioini.mac b/src/ioini.mac new file mode 100644 index 0000000..dc25546 --- /dev/null +++ b/src/ioini.mac @@ -0,0 +1,36 @@ +;SOME MACROS FOR DEFINING CONFIGURATION + +DEFINE NAME (A) +<DEFINE NAME1 +<CONFIG: ASCIZ /A/ +INTERNAL CONFIG +> +XP A,0 +SUBTTL A CONFIGURATION +> + +DEFINE DATE (A) +<DEFINE DATE1 +<SYSDAT: ASCIZ /A/ +INTERNAL SYSDAT +>> + +DEFINE VERSION (A,B) +<DEFINE VERS1 +<SYSNUM: XWD ^D'A,^D'B +XP SYSMOD,^D'A +XP SYSVER,^D'B +INTERNAL SYSNUM +>> + +DEFINE CUSPTAPE (A) +<DEFINE CUSP1 +<SYSTAP: SIXBIT /A/ +INTERNAL SYSTAP +>> + +DEFINE ACPDL (J,CHJN,CHJPDN) +< CH'J'N=CHJN + CH'J'PDN=CHJPDN +> + diff --git a/src/ioini1.mac b/src/ioini1.mac new file mode 100644 index 0000000..bf94a13 --- /dev/null +++ b/src/ioini1.mac @@ -0,0 +1,242 @@ + TITLE IOINI1 - IO INITIALIZATION PART 1 + NAME1 + DATE1 + VERS1 + CUSP1 + +;CONFIGURATION INDEPENDANT PART OF IOINIT FOLLOWS: + +EXTERNAL ERROR + +;SETUP CHANNEL SAVE AND RESTORE ROUTINES + +CHANU1=0 +CHANU2=0 +CHANU3=0 +CHANU4=0 +CHANU5=0 +CHANU6=0 +CHANU7=0 +DEFINE ASSOC(A,NO,D) +<IFE CHANU'NO,< +CHANU'NO=1 +INTERNAL CH'NO'SAV,CH'NO',CH'NO'XIT,CH'NO'SAC + +CH'NO'SAV: 0 + MOVEM CH'NO'N, CH'NO'SAC+CH'NO'N + MOVEI CH'NO'N, CH'NO'SAC + BLT CH'NO'N,CH'NO'SAC+CH'NO'N-1 ;DO ONLY ONCE FOR EACH CHANNEL + MOVE PDP, CH'NO'CJ + JRST @CH'NO'SAV + +CH'NO'SAC: REPEAT CH'NO'N+1,<EXP 0> ;SPACE TO SAVE SOME AC'S + EXP CH'NO'XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + REPEAT CH'NO'PDN-1,<EXP 0> ;REST OF PD LIST + +CH'NO'XIT: MOVSI CH'NO'N, CH'NO'SAC + BLT CH'NO'N, CH'NO'N + JEN @CH'NO + +CH'NO'CJ: XWD -CH'NO'PDN+1,CH'NO'SAC+CH'NO'N+1 ;INIT. SETTING OF P + +CH'NO': 0 ;PC STORED HERE BY JSR + JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + AOS CH'NO'ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + JEN @CH'NO ;AND DISMISS +> +> +;GENERATE THE SAVE AND RESTORE ROUTINES + + SYSTEM + +;SET UP NULL CHANNEL ROUTINES FOR UNUSED CHANNELS + +DEFINE NULCHN(J) +< +INTERNAL CH'J,CH'J'XIT +CH'J: 0 +CH'J'XIT: AOS CH'J'ERR + JEN @CH'J +> + + IFE CHANU1,<NULCHN(1)> + IFE CHANU2,<NULCHN(2)> + IFE CHANU3,<NULCHN(3)> + IFE CHANU4,<NULCHN(4)> + IFE CHANU5,<NULCHN(5)> + IFE CHANU6,<NULCHN(6)> + IFE CHANU7,<NULCHN(7)> + + +;ASSIGN DEVICE TO CHANNELS AND SETUP CORESPONDENCE TABLE +;OF CHANNELS TO SERVICE ROUTINES + +DEFINE ASSOC (A,N,D) +< A'RET=CH'N'XIT + A'SAV=CH'N'SAV + A'SAC=CH'N'SAC + A'CHL=CH'N + A'CHN=N + A'BIT=1 + REPEAT 7-N,<A'BIT=A'BIT*2> + A'OFF=1000+A'BIT ;CONO PI, A'OFF WIL TURN CHANNEL OFF + A'ON=2000+A'BIT ;TURN BACK ON + A'ACT=4000+A'BIT ;FORCE INTERRUPT ON CHAN. +INTERN A'RET, A'SAV, A'CHL, A'CHN, A'SAC +INTERNAL A'OFF,A'ON,A'ACT,A'BIT + XWD A'CHL,A'INT + EXTERNAL A'INT +> + +INTERNAL DEVINT +DEVINT: SYSTEM +NDEV=.-DEVINT ;NO. OF DEVICE INTERUPT SERVICE ROUTINES +NDEVM1=NDEV-1 ;(USED BY ONCE) +INTERNAL NDEVM1 + + +;INITIALIZE SOME IO DEVICES +;IOINI CALLED BY A PUSHJ PDP, FROM SYSINI AT SYSTEM INITIALIZATION + +DEFINE IOINIT (A) +<IRP A +< EXTERNAL A'INI + PUSHJ PDP,A'INI +>> + +DEFINE ASSOC (A,B,C) +< IFIDN <A><MTC>,< IOINIT MTC> + IFIDN <A><DTC>,< IOINIT DTC> + IFIDN <A><LPT>,< IOINIT LPT> + IFIDN <A><SCN>,< IOINIT SCN> + IFIDN <A><PTP>,<IOINIT PTP> + IFIDN <A><PTR>,<IOINIT PTR> +> + +INTERNAL IOINI + +IOINI: SYSTEM + JRST CLKINI ;ALWAYS INIT. CLOCK + +EXTERNAL CLKINI + + +;CLOCK CONTROL PARAMETERS + + CLDS=4000+APRCHN ;CLOCK DISABLE + CLEN=200+APRCHN ;CLOCK ENABLE + + INTERNAL CLDS,CLEN + +;BYTE POINTERS + +PUUOAC: POINT 4,UUO,12 ;UUO AC FIELD +PIOMOD: POINT 4,IOS,35 ;MODE BITS +PJOBN: POINT 9,DEVCHR(DEVDAT),8 ;DEVICE JOB ASSIGNMENT +PJDCHN: POINT 4,DEVCHR(DEVDAT),17 ;JOB DEVICE CHANNEL NO. +PUNIT: POINT 6,DEVCHR(DEVDAT),23 ;DEVICE UNIT NO. + +INTERNAL PUUOAC,PIOMOD,PJOBN,PJDCHN,PUNIT + +;COMMON SUBROUTINE RETURNS + +CPOPJ2: AOS (PDP) +CPOPJ1: AOS (PDP) +CPOPJ: POPJ PDP, + +INTERNAL CPOPJ,CPOPJ1,CPOPJ2 + +,SYSTEM DATA STORAGE + + +INTERNAL JOB,JOBADR,JBTADR,JBTSTS,USRREL,USRINF,USRJDA +INTERNAL USRPDP,JOBDAT,USRDDT,USRSAV,USRUXT,USRLO,USRHI +INTERNAL COMCNT,IOCOMP,USRPOV,STOPU,SCHEDF,TIME,JBTAD1 +INTERNAL MTAVAL,DCAVAL,DTAVAL,MTREQ,DCREQ,DTREQ,TTYTAB,CORTAB +INTERNAL CH1ERR,CH2ERR,CH3ERR,CH4ERR,CH5ERR,CH6ERR,CH7ERR +INTERNAL CORLST,CORTAB,CORTAL,SYSEND,SYSBEG,DEVOPR + +JOBN=0 ;DEFINE NO. OF JOBS (0 THRU JOBN-1) +;THERE MUST BE MORE TTY DEVICE DATA BLCKS THAN JOBS. + +DEFINE ASSOC (A,N,D) +<IRP D,<IFIDN <A><SCN>,<JOBN=JOBN+1>>> + SYSTEM +MJOBN=-JOBN +INTERNAL JOBN,MJOBN + +SYSBEG: ;FIRST LOC IN SYSTEM DATA AREA +XP SYSBG1,SYSBEG+1 ;FIRST LOC+1 +JOB: 0 ;CURRENT JOB NUMBER EXCEPT WEN SCHEDF IS NON-ZERO +JOBADR: 0 ;CONTAINS ADDRESS OF JOB CURRENTLY RUNNING +JOBDAT: 0 ;CONTAINS ADDRESS OF JOB DATA AREA + +JBTADR: BLOCK JOBN ;C(LH)=PROTECT, C(RH)=RELOCATION +XP JBTAD1,JBTADR+1 ;ADDRESS OF JOB 1(USED BY SYSMAK) +JBTSTS: BLOCK JOBN ;CONTAINS STATUS INFORMATION FOR EACH J + +USRPDP: 0 ;USER PUSH DOWN POINTER +USRREL: 0 ;LH=0, RH CONTAINS CONTENTS OF PROTECTION REGISTER +USRLO: ;FIRST LOC CLEARD BY SETUSR SUBROUTINE +USRUXT: 0 ;UNUSED, JOBUXT USED TO SAVE UUO PC(UUO0) +USRLEV: 0 ;UNUSED, JOBLEV USED TO SAVE LOC. 40 +USRSAV: 0 ;TEMPORARY STORAGE FOR UUO HANDLER +USRPOV: 0 ;PUSH DOWN OVERFLOW TRAP + BLOCK 2 +USRINF: 0 ;UN LAYED OUT USER INFORMATION +USRJDA: BLOCK 20 ;RH=JOB DEVICE ASSIGNMENTS FOR THIS USER,LH=UUOS +XP USRHI,.-1 ;LAST LOC CLEARED BY SETUSR ROUTINE +XP USRPFI,.-1 ;LAST LOC PROTECTED FROM IO SERVICE +XP USRPFU,. ;LAST LOC PROTECTED FROM USER PROGRAM +USRDDT: 0 ;STARTING ADDR OF USER DDT + +;DEVICE JUSTR BECOME AVAILABLE FLAGS +MTAVAL: 0 ;MAGNETIC TAPE +DCAVAL: 0 ;DATA CONTROL +DTAVAL: 0 ;DECTAPE + +;NUMBER OF JOBS WAITING FOR DEVICES(-1=NONE, 0=1 USING, 1=1 USING) +MTREQ: -1 ;MAGNETIC TAPE +DCREQ: -1 ;DATA CONTROL +DTREQ: -1 ;DECTAPE +IOCOMP: 0 ;NUMBER OF USERS IN IO WAIT STATE +COMCNT: 0 ;NUMBER OF COMMANDS TYPED-IN BUT NOT DECODED +STOPU: 0 ;NON-ZERO WHEN CLOCK INTERRUPT FORCED TO STOP USER +SCHEDF: 0 ;NON-ZERO WHEN CLOCK ROUTINE IS SCHEDULING + +CH1ERR: 0 ;SPURIOUS INTERRUPT COUNTS FOR EACH CHANNEL +CH2ERR: 0 +CH3ERR: 0 +CH4ERR: 0 +CH5ERR: 0 +CH6ERR: 0 +CH7ERR: 0 + + USRLO1=USRLO+1 + INTERNAL USRLO1 + +TIME: 0 ;TIME SYSTEM HAS RUN IN 60THS OF A SECOND + + +XP TTYLEN,SCNLIN+1 ;LENGTH OF TTY TRANSLATOR TABLES(INCLUDING CTY) +TTYTAB: BLOCK TTYLEN ;TTY TRANSLATOR TABLE + ;SIGN BIT = 1 IF COMMAND JUST TYPED + ;BITS 1 -9, JOB CONSOLE IS ATTACHED TO + ;BITS 18-35, THE DEVICE DATA BLOCK FOR +DEVOPR: 0 ;SIXBIT PHYSICAL NAME OF OPERATORS + ;CONSOLE SET BY SCNSER TO FIRST ACTIVE TTY. +;LOCATIONS FOR CORE ALLOCATION +XP CORBLK,^D256 ;NO. OF 1K BLOCKS POSSIBLE +CORTAB: BLOCK <CORBLK>/^D36+1 ;1K BLOCK USE BIT TABLE + ;A 1 MEANS BLOCK IS IN USE +CORLST: 0 ;1 BIT BYTE POINTER TO LAST FREE BLOCK POSSIBLE +CORTAL: 0 ;TOTAL NO. OF FREE CORE BLOCKS LEFT +;CORLST AND CORTAL ARE SET UP AT SYSTEM INITIALIZATION + +SYSEND=.-1 ;LAST LOC. CLEARED BY SYSINI + +INTERNAL SYSSIZ +EXTERNAL SYSFIN +SYSSIZ: EXP SYSFIN ;SIZE OF MONITOR(LAST LOC. USED) + + END, diff --git a/src/ioini2.mac b/src/ioini2.mac new file mode 100644 index 0000000..6fb218f --- /dev/null +++ b/src/ioini2.mac @@ -0,0 +1,255 @@ + TITLE IOINI2 - IO INITIALIZATION PART 2 + +;DEFINITIONS OF DEVCHN AND DEVBIT +;THESE ALSO OCCUR IN IOINT1 + +DEFINE ASSOC (A,N,D) +< + A'CHN=N +> + + SYSTEM + + + +;APR PIP BITS + +APRBIT=1 +REPEAT 7-APRCHN,<APRBIT=APRBIT*2> +XP PION,200 ;CONO PI,PION TURNS PI SYSTEM ON +XP PIOFF,400 ;TURN IT OFF +XP PICLK,PION+1B24+APRBIT ;TURN PI ON, AND FORCE CLOCK INT. +XP CLKOFF,1000+APRCHN ;CONO APR,CLKOFF TURNS CLOCK FLAG OFF + + +;ASSEMBLE ALL DEVICE DATA BLOCKS AND LINK THEM TOGETHER + +DEFINE SCNDDB (A,B,C) +< INTERNAL C'DB +C'DB: ZZ=. + SIXBIT /C/ + XWD A'CHN*PICHN,STTYBF+1 ;LONG ENOUGH FOR PRINTING + ;SEQUENCE CARD IMAGE. + ;USER BUFFERS ARE 2 WORDS + ;LONGER THEN THE MONITORY TTY BUFFERS. + 0 +EXTERNAL TTYDSP + XWD C,TTYDSP + XWD DVTTY+DVIN+DVOUT,3 + 0 + 0 + XWD PROG,0 + XWD PROG,0 + XP TTYPTR,.-ZZ + 0 + XP TTYCTR,.-ZZ + 0 + XP TTYSAV,.-ZZ + 0 + XP TTYBUF,.-ZZ + XP TTYBM1,TTYBUF-1 +XP STTYBF,20 +XP STTYB1,STTYBF+1 ;LENGTH+1 + BLOCK STTYBF +XP TTYBFE,.-ZZ-1 + +;LINE NO. PARAMETERS +XP TTYLEN,SCNLIN+1 ;LENGTH OF TTY TRANSLATOR TABLE(INCLUDE TTY) +XP TSCNLN,SCNLIN-1 ;HIGHEST TTY LINE NO.(NOT COUNTING CTY) +XP TCONLN,TSCNLN+1 ;CTY LINE NUMBER +XP MTTYLN,-TTYLEN ;NEGATIVEL LENGTH OF TRANSLATOR TABLE +XP FSNCHN,SCNCHN*101 ;CHANNEL ASSIGNED, FOR FULL DUPLEX SCN. + XP TTYLST,TTY0DB ;FIRST TTY DEVICE DATA BLOCK + > + +;NEG. NO. OF TELTYPE DEVICE DATA BLOCKS + +MLTTYL=0 +DEFINE ASSOC (A,N,D) +<IRP D,<IFIDN <A>,<SCN>,<MLTTYL=MLTTYL-1>>> + + SYSTEM + +INTERNAL MLTTYL + + +;MAG TAPE DEVICE DATA BLOCK + +MTCNUM=0 + +DEFINE MTCDDB (A,B,C) +< INTERNAL C'DB +C'DB: SIXBIT /C/ +MTCNUM=MTCNUM+1 + XWD IORET+A'CHN*PICHN,<MTCNUM-1>*10000+201 + + 0 + XWD C,MTDISP +EXTERNAL MTDISP + XWD 4400+DVMTA+DVIN+DVOUT,154403 + 0 + 0 + XWD PROG,0 + XWD PROG,0 +> + +;DECTAPE DEVICE DATA BLOCK + +DTCNUM=0 + +DEFINE DTCDDB (A,B,C) +< INTERNAL C'DB +C'DB: ZZ=. + SIXBIT /C/ +DTCNUM=DTCNUM+1 + XWD IORET+A'CHN*PICHN,<DTCNUM-1>*10000+201 + 0 + XWD C,UTDSP +EXTERNAL UTDSP + XWD 4400+DVDIR+DVIN+DVOUT,154403 + 0 + 0 + 0 + 0 +XP UFREE,.-ZZ ;NEXT FREE BLOCK NO. + 0 + XP UDIR,.-ZZ ;LINK TO DIRECTORY IN DATA BLOCK + IFE DTSIZ,< EXP DIRBUF +> +IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> +> +> + + + +;LINE PRINTER DEVICE DTA BLOCK + +DEFINE LPTDDB (A,B,C) +<INTERNAL LPTDB,LPTDAT,LPTCHR,LPTIOS,LPTSER,LPTMOD +INTERNAL LPTBUF,LPTPTR,LPTADR,LPTSV1 +EXTERNAL LPTDSP + +LPTDB: +LPTDAT: SIXBIT /LPT/ +LPTCHR: XWD A'CHN*PICHN,32 +LPTIOS: 0 +LPTSER: XWD C,LPTDSP +LPTMOD: XWD 0+DVOUT,3 + 0 +LPTBUF: 0 +LPTPTR: 0 +LPTADR: XWD PROG,0 +LPTSV1: 0 + +XP LPTCLB,LPTCHN+200 ;PI CHANNEL AND BUSY FLAG +XP LPTCHB,11*LPTCHN ;LINE PRINTER ERROR AND DATA CHANNELS +> + + +;CARD READER DEVICE DATA BLOCK + +DEFINE CDRDDB (A,B,C) +<INTERNAL CDRDB,CDRDAT,CRDIS +EXTERNAL CDRDSP + +CDRDB: +CDRDAT: SIXBIT /CDR/ + XWD A'CHN*PICHN,34 ;LONG ENOUGHT FOR BINARY CARDS + 0 + XWD C,CDRDSP + XWD DVCDR+1400+DVIN,14403 + 0 + 0 + XWD PROG,0 + 0 + 0 +CRDIS: JRST . +> + + +;PAPER TAPE READER DEVICE DATA BLOCK + +DEFINE PTRDDB (A,B,C) +<INTERNAL PTRDB,PTRDAT,PTRCHR,PTRIOS,PTRSER +INTERNAL PTRMOD,PTRBUF,PTRADR,PTRPTR,PTRCTR,PTRSVC,PTRSV1 +EXTERNAL PTRDSP + +PTRDB: +PTRDAT: SIXBIT /PTR/ +PTRCHR: XWD A'CHN*PICHN,41 +PTRIOS: 0 +PTRSER: XWD C,PTRDSP +PTRMOD: XWD 1000+DVIN,14403 + 0 +PTRBUF: 0 +PTRADR: XWD PROG,0 +PTRPTR: 0 +PTRCTR: 0 +PTRSVC: 0 +PTRSV1: 0 +> + + +;PAPER TAPE PUNCH DEVICE DATA BLOCK + +DEFINE PTPDDB (A,B,C) +<INTERNAL PTPDB,PTPDAT,PTPCHR,PTPIOS,PTPSER,PTPMOD,PTPBUF +INTERNAL PTPPTR,PTPADR,PTPCTR,PTPCNT,PTPCHA,PTPSIO +EXTERNAL PTPDSP + +PTPDB: +PTPDAT: SIXBIT /PTP/ +PTPCHR: XWD A'CHN*PICHN,41 +PTPIOS: 0 +PTPSER: XWD C,PTPDSP +PTPMOD: XWD 1000+DVOUT,14403 + 0 +PTPBUF: 0 +PTPPTR: 0 +PTPADR: XWD PROG,0 +PTPCTR: 0 +PTPCNT: 0 +PTPCHA: 0 +PTPSIO: 0 +> + + +;GENERATE DEVICE DATA BLOCKS NEEDED FOR THIS CONFIGURATION + +DEFINE ASSOC (A,B,C) +< +IRP C,< + ;DEFINE FORWARD LINL SYMBOL + LINK +; +; +; + A'DDB A,B,C + +C=0 ;SET LINK TO 0(IN CASE THIS IS LAST DDB) +DEFINE LINK +<C=.> +> +> + +INTERNAL DEVLST + +DEVLST: XWD FIRDB,0 ;BEGINNING OF DEVICE DATA BLOCK CHAIN + +DEFINE LINK +<FIRDB=.> + + SYSTEM + + + LIT + + IFE DTSIZ,< DIRBUF: BLOCK 200 + INTERNAL DIRBUF +> + +IFN DTSIZ,<DTDIR: BLOCK DTCNUM*200 +INTERNAL DTDIR +> + + END, diff --git a/src/iomax.mac b/src/iomax.mac new file mode 100644 index 0000000..0f11d00 --- /dev/null +++ b/src/iomax.mac @@ -0,0 +1,43 @@ +NAME <MAXIMAL> + + DATE <8-16-65> + VERSION 1,4 + CUSPTAPE DTA0 + +;DEFINE THE IO PART OF THE SYSTEM +;THAT IS: +; DEFINE INTERRUPT SERVICE ROTUINE TO BE USED +; ASSIGN DEVICES TO PI CHANNELS + +DEFINE SYSTEM + < + ASSOC APR,6,<> + ASSOC CTY,3,<> + ASSOC SCN,3,<TTY0,TTY1> + ASSOC DTC,4,<DTA0> + ASSOC DTC,4,<DTA1> + ASSOC DTC,4,<DTA2> + ASSOC DTC,4,<DTA3> + ASSOC MTC,2,<MTA0> + ASSOC MTC,2,<MTA1> + ASSOC MTC,2,<MTA2> + ASSOC MTC,2,<MTA3> + ASSOC LPT,5,<LPT> + ASSOC PTP,5,<PTP> + ASSOC PTR,5,<PTR> + ASSOC CDR,5,<CDR> +> + +DTSIZ=1 ;MULTIPLE DECTAPE DIRECTORIES + +SCNLIN=1 + +;DEFINE HIGHEST AC TO SAVE AND LENGTH OF PD LIST FOR EACH PI CHANNEL + +ACPDL (1,0,0) +ACPDL (2,11,20) +ACPDL (3,11,20) +ACPDL (4,11,20) +ACPDL (5,11,20) +ACPDL (6,17,20 +ACPDL (7,0,0) diff --git a/src/iomin.mac b/src/iomin.mac new file mode 100644 index 0000000..a2a46aa --- /dev/null +++ b/src/iomin.mac @@ -0,0 +1,32 @@ +NAME <MINIMAL> + + DATE <8-16-65> + VERSION 1,4 + CUSPTAPE DTA0 + +;DEFINE THE IO PART OF THE SYSTEM +;THAT IS: +; DEFINE INTERRUPT SERVICE ROTUINE TO BE USED +; ASSIGN DEVICES TO PI CHANNELS + +DEFINE SYSTEM + < + ASSOC APR,6,<> + ASSOC CTY,3,<> + ASSOC SCN,3,<TTY0,TTY1> + ASSOC DTC,4,<DTA0> +> + +DTSIZ=1 ;MULTIPLE DECTAPE DIRECTORIES + +SCNLIN=1 + +;DEFINE HIGHEST AC TO SAVE AND LENGTH OF PD LIST FOR EACH PI CHANNEL + +ACPDL (1,0,0) +ACPDL (2,0,0) +ACPDL (3,11,20) +ACPDL (4,11,20) +ACPDL (5,0,0) +ACPDL (6,17,20 +ACPDL (7,0,0) diff --git a/src/jobdat.mac b/src/jobdat.mac new file mode 100644 index 0000000..ff60b6d --- /dev/null +++ b/src/jobdat.mac @@ -0,0 +1,50 @@ +TITLE JOBDAT - JOB DATA AREA ASSIGNMENTS + + DEFINE BLK (A,B) +<JOBPRO=B +A=0 +ENTRY A +DEFINE BLK (C,D) +<C=JOBPRO +JOBPRO=JOBPRO+D +ENTRY C>> + + BLK JOBAC,20 ;SYSTEM USE AC STORAGE + BLK JOBDAC,20 ;USER'S AC STORAGE WHILE JOB IS INACTIV +JOBDHI=JOBDAT+17 ;HIGHEST AC SAVED WHILE INACTIVE + BLK JOBUUO,1 ;UUO SAVE AND TRAP LOCATIONS + BLK JOB41,1 ;UUO JSR LOCATION + BLK JOBPC,1 ;BITS 0-5=APR FLAGS, C(RH)=PC + BLK JOBPDP,1 ;PUSH DOWN POINTER FOR SYSTEM USE +JOBPRT=JOBPDP ;FIRST LOC PROTECTED FROM ITNERRUPT SER +JOBPR1=JOBPRT+1 ;FIRST LOC+1 + BLK JOBREL,1 ;C(LH)=0, C(RH)=RELOCATION ADDRESS + BLK JOBUXT,1 ;EXIT FROM UUO AT BREAK + BLK JOBLEV,1 ;C(40) WHEN INACTIVE + BLK JOBSAV,1 ;TEMPOARY STORAGE FOR UOO HANDLER + BLK JOBPOV,1 ;PUSH DOWN OVERFLOW TRAP + BLK JOBTEM,1 ;(UNUSED)TEMPORARY SYSTEM STORAGE + BLK JOBTM1,1 ;" + BLK JOBINF,1 ;UNUSED + BLK JOBJDA,20 ;JOB IO DEVICE CHANNEL ASSIGNMENTS + BLK JOBDDT,1 ;ADDRESS OF USER'S DDT +JOBPFI=JOBDDT-1 ;LAST LOC PROTECTED FROM IO SERVICE +JOBPFU=JOBDDT ;LAST LOC PROTECTED FROM USER + BLK JOBCDP,1 ;(UNUSED)POINTER TO COMMAND STRING + BLK JOBTRP,20 ;(UNUSED)TRAP LOCATIONS + BLK JOBSYM,1 ;SYMBOL TABLE POINTER + BLK JOBUSY,1 ;(UNUSED)POINTER TO UNDEFINED SYMBOL TA + BLK JOBSA,1 ;C(RH)=STARTING ADDRESS + ;C(LH)=HIGHEST LOCATION USED + BLK JOBFF,1 ;FIRST FREE LOCATION +JOBDAT=140 ;LENGTH OF JOB DATA AREA +JOBHGH=JOBDAT-1 ;HIGHEST LOC IN JOB DATA AREA +JOBPDL=JOBPRO-1 ;FIRST LOC. -1 OF PD LIST +JOBPD1=JOBPDL+1 ;FIRST LOC. IN PD LIST +MJOBPD=JOBPDL-JOBHGH ;- LENGTH OF PD LIST +JOBS41=JOBPRO ;PLACE WHERE SAVE-GET SAVES USER LOC 4 +JOBDA=JOBDAT +ENTRY JOBPFI,JOBPFU,JOBPDL,JOBPRO,MJOBPD,JOBHGH +ENTRY JOBDHI,JOBPRT,JOBPR1,JOBDA,JOBS41,JOBPD1 + + END, diff --git a/src/loader.1 b/src/loader.1 new file mode 100644 index 0000000..f123276 --- /dev/null +++ b/src/loader.1 @@ -0,0 +1,2385 @@ + SUBTTL DICK GRUEN: V25 3 AUG 68 + + +;K=1 ;K=1 MEANS 1KLOADER +IFNDEF K,<K=0> ;K=0 MEANS F4 LOADER + +;RPGSW=1 ;MEANS RPG FEATURE +IFNDEF RPGSW,<RPGSW=0> +;LDAC=1 ;MEANS LOAD CODE INTO ACS +IFNDEF LDAC,<LDAC=0> + +;BLTSYM=1 ;MOVE SYMBOL TABLE DOWN TO END OF PROG +IFNDEF BLTSYM,<BLTSYM=0> + +;EXPAND=1 ;FOR AUTOMATIC CORE EXPANSION +IFNDEF EXPAND,< IFN K,<EXPAND=0> + IFE K,<EXPAND=1>> + +;PP=1 ;ALLOW PROJ-PROG # +IFNDEF PP,<PP=0> + +;CHN5=0 ;IF CHAIN WHICH DOESN'T SAVES JOB41 +IFNDEF CHN5,<CHN5=1> + +IFE K,< TITLE LOADER - LOADS MACROX AND SIXTRAN FOUR> +IFN K,< TITLE 1KLOAD - LOADS MACROX> + ;ACCUMULATOR ASSIGNMENTS + F=0 ;FLAGS IN LH, SA IN RH + N=1 ;PROGRAM NAME POINTER + X=2 ;LOADER OFFSET + H=3 ;HIGHEST LOC LOADED + S=4 ;UNDEFINED POINTER + R=5 ;RELOCATION CONSTANT + B=6 ;SYMBOL TABLE POINTER + D=7 + T=10 + V=T+1 + W=12 ;VALUE + C=W+1 ;SYMBOL + E=C+1 ;DATA WORD COUNTER + Q=15 ;RELOCATION BITS + A=Q+1 ;SYMBOL SEARCH POINTER + P=17 ;PUSHDOWN POINTER +;FLAGS F(0 - 17) + CSW==1 ;ON - COLON SEEN + ESW==2 ;ON - EXPLICIT EXTENSION IDENT. + SKIPSW==4 ;ON - DO NOT LOAD THIS PROGRAM + FSW==10 ;ON - SCAN FORCED TO COMPLETION + FCONSW==20 ;ON - FORCE CONSOLE OUTPUT + ASW==100 ;ON - LEFT ARROW ILLEGAL + FULLSW==200 ;ON - STORAGE EXCEEDED + SLIBSW==400 ;ON - LIB SEARCH IN THIS PROG + DSYMSW==1000 ;ON - LOAD WITH SYMBOLS FOR DDT + REWSW==2000 ;ON - REWIND AFTER INIT + LIBSW==4000 ;ON - LIBRARY SEARCH MODE + F4LIB==10000 ;ON - F4 LIBRARY SEARCH LOOKUP + ISW==20000 ;ON - DO NOT PERFORM INIT + SYMSW==40000 ;ON - LOAD LOCAL SYMBOLS + DSW==100000 ;ON - CHAR IN IDENTIFIER + NSW==200000 ;ON - SUPPRESS LIBRARY SEARCH + SSW==400000 ;ON - SWITCH MODE +;FLAGS N(0 - 17) + ALLFLG==1 ;ON - LIST ALL GLOBALS + ISAFLG==2 ;ON - IGNORE STARTING ADDRESSES + COMFLG==4 ;ON - SIZE OF COMMON SET +IFE K,< F4SW==10 ;F4 IN PROGRESS + RCF==20 ;READ DATA COUNT + SYDAT==40 ;SYMBOL IN DATA> + SLASH==100 ;SLASH SEEN +IFE K,< BLKD1==200 ;ON- FIRST BLOCK DATA SEEN + PGM1==400 ;ON FIRST F4 PROG SEEN + DZER==1000 ;ON - ZERO SECOND DATA WORD> + EXEQSW==2000 ;IMMEDIATE EXECUTION + DDSW==4000 ;GO TO DDT +IFN RPGSW,<RPGF==10000 ;IN RPG MODE> + AUXSWI==20000 ;ON - AUX. DEVICE INITIALIZED + AUXSWE==40000 ;ON - AUX. DEVICE ENTERED +IFN PP,<PPSW==100000 ;ON - READING PROJ-PROG # + PPCSW==200000 ;ON - READING PROJ #> + LOC 137 +OCT 25 ;VERSION # +RELOC + MLON + SALL + + + +;MONITOR LOCATIONS IN THE USER AREA + + JOBPRO==140 ;PROGRAM ORIGIN + JOBBLT==134 ;BLT ORIGIN + JOBCHN==131 ;RH = PROG BREAK OF FIRST BLOCK DATA + ;LH = PROG BREAK OF FIRST F4 PROG + +;CALLI DEFINITIONS + +CDDTOUT==3 ;CALLI DDTOUT +CEXIT==12 ;CALLI EXIT +CDDTGT==5 ;CALLI DDTGT +CSETDDT==2 ;CALLI SETDDT + +;LENGTH OF PUSHDOWN LIST FOR POLISH FIXUPS + +PPDL==60 + IFN RPGSW,< +RPGSET: CALLI 0 + INIT 17,1 ;SET UP DSK + SIXBIT /DSK/ + XWD 0,CTLIN + JRST NUTS + MOVE [SIXBIT /QQLOAD/] ;NAME OF COMMAND FILE + MOVEM CTLNAM + MOVSI (SIXBIT /RPG/) ;AND EXT + MOVEM CTLNAM+1 + SETZM CTLNAM+3 + LOOKUP 17,CTLNAM ;THERE? + JRST NUTS ;NO + INIT 16,16 ;GET SET TO DELETE QQLOAD.RPG + SIXBIT /DSK/ + 0 + JRST LD ;GIVE UP COMPLETELY + SETZM CTLNAM+3 + HLLZS CTLNAM+1 ;CLEAR OUT EXTRA JUNK + LOOKUP 16,CTLNAM + JRST LD + RENAME 16,ZEROS ;DELETE IT + JFCL ;IGNORE IF IT WILL NOT GO + RELEASE 16,0 ;GET RID OF THIS DEVICE + SETZM NONLOD ;THIS IS NOT A CONTINUATION +RPGS3: MOVEI CTLBUF + MOVEM JOBFF ;SET UP BUFFER + INBUF 17,1 + MOVEI [ASCIZ / +LOADING +/] ;PRINT MESSAGE THAT WE ARE STARTING + CALLI CDDTOUT + SKIPE NONLOD ;CONTINUATION? + JRST RPGS2 ;YES, SPECIAL SETUP + MOVSI R,F.I ;NOW SO WE CAN SET FLAG + BLT R,R + TLO N,RPGF + JRST CTLSET ;SET UP TTY +RPGS1: PUSHJ P,[TLNE F,ESW ;HERE FROM FOO* COMMAND, STORE NAME + JRST LDDT3 ;SAVE EXTENSION + TLZE F,CSW!DSW ;OR AS NAME + MOVEM W,DTIN + POPJ P,] + MOVEM 0,SVRPG# ;SAVE 0 JUST IN CASE + SETZM NONLOD# ;DETERMINE IF CONTINUATION + MOVEI 0,2(B) ;BY SEEING IF ANY SYMBOLS LOADED + CAME 0,JOBREL + SETOM NONLOD ;SET TO -1 AND SKIP CALLI + MOVE 0,ILD1 + MOVEM 0,RPG1 + INIT 17,1 +RPG1: 0 + XWD 0,CTLIN + JSP A,ILD5 + LOOKUP 17,DTIN ;THE FILE NAME + JRST ILD9 + JRST RPGS3 + +RPGS2: MOVSI 0,RPGF ;SET FLAG + IORM 0,F.C+N + TLO N,RPGF + MOVE 0,SVRPG + JRST LD2Q ;BACK TO INPUT SCANNING +> + +;MONITOR LOADER CONTROL + +BEG: +LD: IFN RPGSW,<SKIPA ;NORMAL INITIALIZE + JRST RPGSET ;SPECIAL INIT> + HLLZS 42 ;GET RID OF ERROR COUNT IF NOT IN RPG MODE + CALLI 0 ;INITIALIZE THIS JOB +NUTS: MOVSI R,F.I ;SET UP INITIAL ACCUMULATORS + BLT R,R +CTLSET: INIT 3,1 ;INITIALIZE CONSOLE + SIXBIT /TTY/ + XWD BUFO,BUFI +CALLEX: CALLI CEXIT ;DEVICE ERROR, FATAL TO JOB + MOVEI E,TTY1 + MOVEM E,JOBFF + INBUF 3,1 + OUTBUF 3,1 ;INITIALIZE OUTPUT BUFFERS + OUTPUT 3, ;DO INITIAL REDUNDANT OUTPUT + HRRZ B,JOBREL ;PICK UP CORE BOUND + SKIPE JOBDDT ;DOES DDT EXIST? + HRRZ B,JOBSYM ;USED BOTTOM OF SYMBOL TABLE INSTEAD + SUB B,SE3 ;INITIALIZE SYMBOL TABLE POINTER + CAILE H,1(B) ;TEST CORE ALLOCATION + CALLI CEXIT ;INSUFFICIENT CORE, FATAL TO JOB + MOVS E,X ;SET UP BLT POINTER + HRRI E,1(X) + SETZM -1(E) ;ZERO FIRST WORD + BLT E,(B) ;ZERO CORE UP TO THE SYMBOL AREA + HRRZ S,B ;INITIALIZE UNDEF. POINTER + HRR N,B ;INITIALIZE PROGRAM NAME POINTER + HRRI R,JOBPRO ;INITIALIZE THE LOAD ORIGIN + MOVE E,COMM ;SET .COMM. AS THE FIRST PROGRAM + MOVEM E,1(B) ;STORE IN SYMBOL TABLE + HRRZM R,2(B) ;STORE COMMON ORIGIN + MOVEI E,F.C ;INITIALIZE STATE OF THE LOADER + BLT E,B.C + SETZM MDG ;MULTIPLY DEFINED GLOBAL COUNT + MOVSI W,254200 ;STORE HALT IN JOB41 + MOVEM W,JOB41(X) ;... +IFN LDAC!BLTSYM,<MOVEI W,20 ;SET UP SPACE TO SAVE FOR ACS AND + MOVEM W,KORSP# ;USER DEFINITIONS WITH DDT> + + +IFN RPGSW,<JRST LD2Q> +LD2: IFN RPGSW,<MOVSI B,RPGF ;HERE ON ERRORS, TURN OFF RPG + ANDCAM B,F.C+N ;IN CORE> +;LOADER SCAN FOR FILE NAMES + +LD2Q: MOVSI B,F.C ;RESTORE ACCUMULATORS + BLT B,B + MOVE P,PDLPT ;INITIALIZE PUSHDOWN LIST + SETZM BUFI2 ;CLEAR INPUT BUFFER POINTER +IFE PP,< SETZM ILD1 ;CLEAR INPUT DEVICE NAME> +IFN PP,< MOVSI T,(SIXBIT /DSK/) ;ASSUME DSK + MOVEM T,ILD1 + SETZM OLDDEV# ;TO MAKE IT GO BACK AFTER /D FOR LIBSR> + SETZM DTIN ;CLEAR INPUT FILE NAME +IFN PP,<SETZM PPN# ;CLEAR INPUT PROJ-PROG #> + +LD2B: RELEAS 1, ;RELEASE BINARY INPUT DEVICE +IFN RPGSW,< TLNE N,RPGF ;NOT IF DOING RPG + JRST LD2BA> + MOVEI T,"*" + IDPB T,BUFO1 ;OUTPUT ASTERISK TO START INPUT + OUTPUT 3, +LD2BA: TLZ F,FULLSW+ASW+ISW+CSW+ESW+SKIPSW+SLIBSW+REWSW + TLNE F,LIBSW ;WAS LIBRARY MODE ON? + TLO F,SKIPSW ;YES, NORMAL MODE IS SKIPPING + +LD2D: IFN PP,<SETZM PPN ;DO NOT REMEMBER PPNS FOR NOW +LD2DB: SKIPE W,OLDDEV ;RESET DEVICE IF NEEDED + CAMN W,ILD1 ;IS IT SAME? + JRST LD2DA ;YES, FORGET IT + TLZ F,ISW+DSW+FSW+REWSW + MOVEM W,ILD1> +LD2DA: +IFN RPGSW,< SETZM DTIN1 ;CLEAR EXTENSION> + MOVEI W,0 ;INITIALIZE IDENTIFIER SCAN + MOVEI E,6 ;INITIALIZE CHARACTER COUNTER + MOVE V,LSTPT ;INITIALIZE BYTE POINTER TO W + TLZ F,SSW+DSW+FSW ;LEAVE SWITCH MODE +LD3: IFN RPGSW,<TLNE N,RPGF ;CHECK RPG FEATURE + JRST RPGRD> + SOSG BUFI2 ;DECREMENT CHARACTER COUNT + INPUT 3, ;FILL TTY BUFFER + ILDB T,BUFI1 ;LOAD T WITH NEXT CHARACTER +LD3AA: MOVE Q,T + IDIVI Q,11 ;TRANSLATE TO 4 BIT CODE + LDB Q,LD8(A) ;LOAD CLASSIFICATION CODE + CAIGE Q,4 ;MODIFY CODE IF .GE. 4 + TLNN F,SSW ;MODIFY CODE IF SWITCH MODE OFF + ADDI Q,4 ;MODIFY CLASS. CODE FOR DISPATCH + HRRZ A,LD3A(Q) ;LOAD RH DISPATCH ENTRY + CAIL Q,10 ;SKIP IF CORRECT DISPATCH ENTRY + HLRZ A,LD3A-10(Q) ;LOAD LH DISPATCH ENTRY + JRST @A ;JUMP TO INDICATED LOCATION + +;COMMAND DISPATCH TABLE + +LD3A: XWD LD3,LD7B ;IGNORED CHAR, BAD CHAR (SWITCH) + XWD LD6A,LD6 ;</> OR <(>, LETTER (SWITCH) + XWD LD5,LD6C ;<:>, DIGIT (SWITCH ARG.) + XWD LD5A,LD6D ;<.>, ESCAPE SWITCH MODE <)> + XWD LD5C,LD7 ;<=> OR <L. ARROW>, BAD CHAR. + XWD LD5B,LD4 ;<,>, ALPHABETIC CHAR. + XWD LD5D,LD4 ;<CR.>, NUMERIC CHAR. + XWD LD5E1,LD7 ;<ALT MODE>, BAD CHAR. <)> + +IFN RPGSW,<RPGRD: SOSG CTLIN+2 ;CHECK CHARACTER COUNT + JRST [IN 17,0 + JRST .+1 ;OK + STATO 17,740000 + JRST LD2 + JSP A,ERRPT + SIXBIT /ERROR WHILE READING COMMAND FILE%/ + JRST LD2] + IBP CTLIN+1 ;ADVANCE POINTER + MOVE T,@CTLIN+1 ;AND CHECK FOR LINE # + TRNE T,1 + JRST [MOVNI T,5 + ADDM T,CTLIN+2 + AOS CTLIN+1 + JRST RPGRD ];GO READ AGAIN + LDB T,CTLIN+1 ;GET CHR + JRST LD3AA ;PASS IT ON> + ;ALPHANUMERIC CHARACTER, NORMAL MODE +LD4: SOJL E,LD3 ;JUMP IF NO SPACE FOR CHAR IN W + SUBI T,40 ;CONVERT FROM ASCII TO SIXBIT + IDPB T,V ;DEPOSIT CHAR OF IDENTIFIER IN W + TLO F,DSW ;SET IDENTIFIER FLAG + JRST LD3 ;RETURN FOR NEXT CHARACTER + +;DEVICE IDENTIFIER DELIMITER <:> + +LD5: PUSH P,W ;SAVE W + TLOE F,CSW ;TEST AND SET COLON FLAG + PUSHJ P,LDF ;FORCE LOADING + POP P,W ;RESTORE W + TLNE F,ESW ;TEST SYNTAX + JRST LD7A ;ERROR, MISSING COMMA ASSUMED + JUMPE W,LD2D ;JUMP IF NULL DEVICE IDENTIFIER + MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER +IFN PP,<MOVEM W,OLDDEV ;WE HAVE A NEW ONE SO IGNORE OLD> + TLZ F,ISW+DSW+FSW+REWSW ;CLEAR OLD DEVICE FLAGS +IFN PP,<SETZM PPN ;CLEAR OLD PP #> + JRST LD2D ;RETURN FOR NEXT IDENTIFIER + +;FILE NAME EXTENSION IDENTIFIER DELIMITER <.> + +LD5A: TLOE F,ESW ;TEST AND SET EXTENSION FLAG + JRST LD7A ;ERROR, TOO MANY PERIODS + TLZE F,CSW+DSW ;SKIP IF NULL IDENT AND NO COLON + MOVEM W,DTIN ;STORE FILE IDENTIFIER + JRST LD2D ;RETURN FOR NEXT IDENTIFIER + +;INPUT SPECIFICATION DELIMITER <,> + +LD5B: +IFN PP,<TLZE N,PPCSW ;READING PP #? + JRST [ + HRLM D,PPN ;STORE PROJ # + JRST LD6A1] ;GET PROG # + PUSHJ P,RBRA ;CHECK FOR MISSING RBRA> + TLZN F,FSW ;SKIP IF PREV. FORCED LOADING + PUSHJ P,FSCN2 ;LOAD (FSW NOT SET) + JRST LD2D ;RETURN FOR NEXT IDENTIFIER + +LD5B1: TLNE F,ESW ;TEST EXTENSION FLAG + JRST LDDT3 ;EXPLICIT EXTENSION IDENTIFIER + TLZN F,CSW+DSW ;SKIP IF IDENT. OR COLON + POPJ P, + MOVEM W,DTIN ;STORE FILE IDENTIFIER + JRST LDDT2 ;ASSUME <.REL> IN DEFAULT CASE + ;OUTPUT SPECIFICATION DELIMITER <=> OR <LEFT ARROW> +;OR PROJ-PROG # BRACKETS <[> AND <]> +LD5C: +IFN RPGSW,<CAIN T,"@" ;CHECK FOR * COMMAND + JRST RPGS1> +IFN PP,<CAIN T,"[" ;PROJ-PROG #? + JRST [TLO N,PPSW+PPCSW ;SET FLAGS + MOVEM W,PPNW# ;SAVE W + MOVEM E,PPNE# ;SAVE E + MOVEM V,PPNV# ;SAVE V + JRST LD6A1-1] ;READ NUMBERS AS SWITCHES + CAIN T,"]" ;END OF PP #? + JRST [PUSHJ P,RBRA ;PROCESS RIGHT BRACKET + JRST LD3 ];READ NEXT IDENT> + TLOE F,ASW ;TEST AND SET LEFT ARROW FLAG + JRST LD7A ;ERROR, MISPLACED LEFT ARROW + PUSHJ P,LD5B1 ;STORE IDENTIFIER + TLZN F,ESW ;TEST EXTENSION FLAG + MOVSI W,554160 ;ASSUME <.MAP> IN DEFAULT CASE + MOVEM W,DTOUT1 ;STORE FILE EXTENSION IDENTIFIER + MOVE W,DTIN ;LOAD INPUT FILE IDENTIFIER + MOVEM W,DTOUT ;USE AS OUTPUT FILE IDENTIFIER +IFN PP,<MOVE W,PPN ;PROJ-PROG # + MOVEM W,DTOUT+3 ;...> + MOVE W,ILD1 ;LOAD INPUT DEVICE IDENTIFIER + MOVEM W,LD5C1 ;USE AS OUTPUT DEVICE IDENTIFIER +IFN PP,< SKIPE W,OLDDEV ;RESTORE OLD + MOVEM W,ILD1> +;INITIALIZE AUXILIARY OUTPUT DEVICE + TLZE N,AUXSWI+AUXSWE ;FLUSH CURRENT DEVICE + RELEASE 2, ;... + CALL W,[SIXBIT ?DEVCHR?] ;IS DEVICE A TTY? + TLNE W,10 ;... +JRST LD2D ;YES, SKIP INIT + INIT 2,1 ;INIT THE AUXILIARY DEVICE +LD5C1: 0 ;AUXILIARY OUTPUT DEVICE NAME + XWD ABUF,0 ;BUFFER HEADER + JSP A,ILD5 ;ERROR RETURN + TLNE F,REWSW ;REWIND REQUESTED? + CALL 2,[SIXBIT /UTPCLR/] ;DECTAPE REWIND + TLZE F,REWSW ;SKIP IF NO REWIND REQUESTED + MTAPE 2,1 ;REWIND THE AUX DEV + MOVEI E,AUX ;SET BUFFER ORIGIN + MOVEM E,JOBFF + OUTBUF 2,1 ;INITIALIZE SINGLE BUFFER + TLO N,AUXSWI ;SET INITIALIZED FLAG + JRST LD2D ;RETURN TO CONTINUE SCAN + + +;RIGHT SQUARE BRACKET (PROJ-PROG NUMBERS) +IFN PP,< +RBRA: TLZN N,PPSW ;READING PP #? + POPJ P, ;NOPE, RETURN + TLZE N,PPCSW ;COMMA SEEN? + JRST LD7A ;NOPE, INDICATE ERROR + HRRM D,PPN ;STASH PROG NUMBER + MOVE W,PPNW# ;PICKUP OLD IDENT + MOVE E,PPNE# ;RESTORE CHAR COUNT + MOVE V,PPNV# ;RESTORE BYTE PNTR + POPJ P, ;TRA 1,4 + +;RIGHT JUSTIFY W + +RJUST: JUMPE W,LD7A ;NOTHING TO RIGHT JUSTIFY + TRNE W,77 ;IS W RJUSTED YET? + POPJ P, ;YES, TRA 1,4 + LSH W,-6 ;NOPE, TRY AGAIN + JRST .-3 ;...> + +;LINE TERMINATION <CARRIAGE RETURN> + +LD5D: +IFN PP,<PUSHJ P,RBRA ;CHECK FOR UNTERMINATED PP #> + PUSHJ P,FSCN ;FORCE SCAN TO COMPLETION + JRST LD2B ;RETURN FOR NEXT LINE + +;TERMINATE LOADING <ALT MODE> + +LD5E: SKIPE D ;ENTER FROM G COMMAND + HRR F,D ;USE NUMERIC STARTING ADDRESS +LD5E1: + PUSHJ P,CRLF ;START A NEW LINE + PUSHJ P,SASYM ;SETUP JOBSA,JOBFF,JOBSYM,JOBUSY +IFN LDAC!BLTSYM,<HRRZ A,R ;SET UP BLT OF ACS + ADDI A,(X) ;END + ADD A,KORSP ;ADD IN SPACE RESERVED + CAIL A,(S) +IFN EXPAND,<JRST [PUSHJ P,XPAND> + PUSHJ P,[ +IFE EXPAND,< JSP A,ERRPT + SIXBIT /MORE CORE NEEDED#/> + CALLI CEXIT] +IFN EXPAND,< JRST .-1]> + HRRM R,BOTACS# ;SAVE FOR LATER + HRRZ A,R ;SET BLT + ADD A,X + HRL A,X + MOVE Q,A + BLT A,17(Q)> +IFN BLTSYM,<HRRZ A,R ;PLACE TO BLT TO + ADD A,KORSP + MOVE W,A ;SAVE DEST + ADDI A,(X) ;AFTER ADJUSTMENT + MOVE Q,S ;UDEF PNTR + ADD Q,B ;TOTAL UNDEFS AND DEFS IN LEFT + HLROS Q ;NOW NEG IN RIGHT + MOVNS Q ;POSITIVE + ADDI Q,-1(A) ;END OF BLT + HRLI A,1(S) ;AND GET PLACE TO BLT FROM + SUBI W,1(S) ;PREST LOC OF SYMBOL TABLE + ADDM W,JOBSYM(X) + ADDM W,JOBUSY(X) ;ADJUST POINTERS + BLT A,(Q) ;MOVE IT + SKIPN JOBDDT(X) ;IS DDT THERE? + JRST NODDT + SUBI Q,-1(X) + HRRM Q,JOBFF(X) ;RESTET JOBFF IF DDT IS IN + HRLM Q,JOBSA(X) +NODDT:> + MOVE W,[SIXBIT ?LOADER?] ;FINAL MESSAGE + PUSHJ P,BLTSET ;SETUP FOR FINAL BLT + RELEASE 2, ;RELEASE AUX. DEV. +IFN RPGSW,<RELEASE 17,0 ;RELEASE COMMAND DEVICE> +LD5E5: MOVE W,[BLT Q,(A)] ;BLT OF ALL CODE + MOVEM W,JOBBLT ;STASH IN JOB DATA AREA + MOVEM W,JOBBLT(X) ;STASH IN RELOCATED JOBDATA AREA +LD5E2: MOVE W,CALLEX ;EXIT AFTER BLT + TLZN N,EXEQSW ;IMMEDIATE EXECUTION REQUESTED? + JRST LD5E3 ;NOPE, LET USER TYPE START HIMSELF + HRRZ W,JOBSA(X) ;PICKUP USUAL STARTING ADDRESS + TLNE N,DDSW ;DDT EXECUTION? + HRRZ W,JOBDDT(X) ;USE DDT SA INSTEAD + JUMPE W,LD5E2 ;IF SA=0, DON'T EXECUTE + HRLI W,(JRST) ;INSTRUCTION TO EXECUTE +LD5E3: +IFE LDAC,<MOVEM W,JOBBLT+1(X) ;STASH FOR EXECUTION> +IFN LDAC,<MOVEM W,JOBBLT+2(X) ;STASH FOR EXECUTION + HRLZ 17,JOBFF(X) ;BUT FIRST BLT ACS + MOVE W,[BLT 17,17] ;... + MOVEM W,JOBBLT+1(X) ;...> + JRST JOBBLT ;IF IT WERE DONE, 'TWERE BEST DONE QUICKLY + + + +;SEARCH LIBRARY, PRINT UNDEFS, SETUP JOBSA,JOBFF,JOBSYM,JOBUSY + +SASYM: TLNN F,NSW ;SKIP IF NO SEARCH FLAG ON + PUSHJ P,LIBF ;SEARCH LIBRARY FILE + PUSHJ P,FSCN ;FORCE SCAN TO COMPLETION + PUSHJ P,PMS ;PRINT UNDEFINEDS + HRRZM F,JOBSA(X) ;RH OF JOBSA :=STARTING ADDRESS +SAS1: HRRZ A,H ;COMPUTE PROG BREAK + SUBI A,(X) ;... + CAIGE A,(R) ;BUT NO HIGHER THAN RELOC + HRRZ A,R ;... + HRLM A,JOBSA(X) ;LH OR JOBSA IS PROG BREAK + HRRZM A,JOBFF(X) ;RH OF JOBFF CONTAINS PROG BREAK + MOVE A,B ;SET JOBSYM W/ SYMBOL TABLE POINTER + AOS A ;... + MOVEM A,JOBSYM(X) ;... + MOVE A,S ;SET JOBUSY W/ UNDEFINED SYMBOL POINTER + AOS A ;... + MOVEM A,JOBUSY(X) ;... + POPJ P, ;RETURN +;PRINT FINAL MESSAGE, SET UP BLT AC'S, SETDDT, RELEAS + +BLTSET: PUSHJ P,FCRLF ;START FINAL MESSAGE + PUSHJ P,PWORD ;PRINT W + PUSHJ P,SPACE + HRRZ Q,JOBREL ;PUBLISH HOW MUCH CORE USED + LSH Q,-12 ;... + ADDI Q,1 ;... + PUSHJ P,RCNUM ;PUBLISH THE NUMBER + MOVE W,[SIXBIT /K CORE/] ;PUBLISH THE UNITS + PUSHJ P,PWORD ;... + PUSHJ P,CRLF ;... + MOVSI Q,20(X) ;HOW MUCH CODE TO BLT + HRRI Q,20 ;... + HRRZ A,42 ;CHECK ON ERRORS + JUMPE A,NOEX ;NONE, GO AHEAD + TLZN N,EXEQSW ;DID HE WANT TO START EXECUTION? + JRST NOEX ;NO + JSP A ,ERRPT ;PRINT AN ERROR MESSAGE + SIXBIT /EXECUTION DELETED@/ +NOEX: HRRZ A,JOBREL ;WHEN TO STOP BLT + HRRZM A,JOBREL(X) ;SETUP FOR POSSIBLE IMMED. XEQ + SUBI A,(X) ;... +IFE BLTSYM,<CAIL A,(S) ;DON'T BLT OVER SYMBOL TABLE + MOVEI A,(S) ;OR UNDEFINED TABLE> + RELEAS 1, ;RELEASE DEVICES + RELEAS 3, ;... + MOVE R,JOBDDT(X) ;SET NEW DDT + CALLI R,CSETDDT ;... + POPJ P, ;RETURN + + +;WRITE CHAIN FILES + +CHNC: SKIPA A,JOBCHN(X) ;CHAIN FROM BREAK OF FIRST BLOCK DATA +CHNR: HLR A,JOBCHN(X) ;CHAIN FROM BREAK OF FIRST F4 PROG + HRRZS A ;ONLY RIGHT HALF IS SIGNIFICANT + JUMPE A,LD7C ;DON'T CHAIN IF ZERO + TLNN N,AUXSWI ;IS THERE AN AUX DEV? + JRST LD7D ;NO, DON'T CHAIN + PUSH P,A ;SAVE WHEREFROM TO CHAIN + SKIPE D ;STARTING ADDR SPECIFIED? + HRR F,D ;USE IT + PUSHJ P,SASYM ;DO LIB SEARCH, SETUP JOBSA, ETC. + POP P,A ;GET WHEREFROM + MOVN W,JOBREL ;CALCULATE IOWD FOR DUMP + ADDI W,-1-3-CHN5(A) ;... + HRLI W,-4-CHN5(A) ;... + MOVSM W,IOWDPP ;... + ADDI A,-4-CHN5(X) ;ADD IN OFFSET +IFN CHN5,<PUSH A,JOBSYM(X) ;SETUP FOUR WORD TABLE + PUSH A,JOB41(X) ;...> + PUSH A,JOBDDT(X) ;JOBDDT IN ALL CASES +IFE CHN5,<PUSH A,JOBSYM(X) ;JOBDDT, JOBSYM, JOBSA> + PUSH A,JOBSA(X) ;JOBRYM ALWAYS LAST + CLOSE 2, ;INSURE END OF MAP FILE + SETSTS 2,17 ;SET AUX DEV TO DUMP MODE + MOVSI W,435056 ;USE .CHN AS EXTENSION + MOVEM W,DTOUT1 ;... + PUSHJ P,IAD2 ;DO THE ENTER + TLZ N,AUXSWI+AUXSWE ;INSURE NO PRINTED OUTPUT + MOVE W,[SIXBIT ?CHAIN?] ;FINAL MESSAGE + PUSHJ P,BLTSET ;SETUP BLT PNTR, SETDDT, RELEAS + CALLI CDDTGT ;START DDT MODE OUTPUT + MOVSI CHNBLT,CHAIN3 ;BLT CHAIN3 INTO ACS + BLT CHNBLT,CHNBLT ;... + MOVEI P,CHNERR ;POINTER TO ERR MESS + JRST 0 ;GO DO CHAIN + + +;THE AC SECTION OF CHAIN + +CHAIN3: + PHASE 0 + BLT Q,(A) ;USUAL LDRBLT + OUTPUT 2,IOWDP ;WRITE THE CHAIN FILE + STATZ 2,IOBAD!IODEND ;CHECK FOR ERROR OR EOF + JRST LOSEBIG ;FOUND SAME, GO GRIPE + CLOSE 2, ;FINISH OUTPUT + STATZ 2,IOBAD!IODEND ;CHECK FOR FINAL ERROR +LOSEBI: CALLI CDDTOUT ;GRIPE ABOUT ERROR + CALLI CEXIT ;EXIT +CHNERR: ASCIZ ?DEVICE ERROR? ;ERROR MESSAGE +IOWDP: Z ;STORE IOWD FOR DUMP HERE +CHNBLT: ;LAST WORD OF AC CHAIN (ZERO OF I/O POINTER) + DEPHASE +IOWDPP=.-1 ;MEMORY LOC OF AC IOWDP + Z ;TERMINATOR OF DUMP MODE LIST + + ;EXPAND CORE + +IFN EXPAND,< +XPAND: PUSH P,H ;GET SOME REGISTERS TO USE + PUSH P,X + PUSH P,N + HRRZ X,JOBREL ;WHAT WE WANT + ADDI X,2000 + CALLI X,11 ;CORE ALLOCATOR CALLS THIS + JRST XPAND6 +IFE K,< HRRZ H,MLTP ;GET LOWEST LOCATION + TLNN N,F4SW ;IS FORTRAN LOADING> + HRRZ H,S ;NO, USE S + HRRZ X,JOBREL ;NOW MOVE + SUBI X,2000 +XPAND2: MOVE N,(X) + MOVEM N,2000(X) + CAMLE X,H ;TEST FOR END + SOJA X,XPAND2; HAND EYE SYSTEM MOVES TABLE + HRLI H,-2000 + SETZM (H) ;ZERO NEW CORE + AOBJN H,.-1 + MOVEI H,2000 + ADDM H,S + ADDM H,B + ADDM H,JOBSYM + POP P,N + ADDI N,2000 +IFE K,< TLNN N,F4SW ;F4? + JRST XPAND3 + ADDM H,PLTP + ADDM H,BITP + ADDM H,SDSTP + ADDM H,MLTP + TLNE N,SYDAT + ADDM H,V> +XPAND3: + POP P,X + POP P,H + AOS (P) + POPJ P, +XPAND6: JUMPE X,XPAND4 + JSP A,ERRPT + SIXBIT /CORE AVAILABLE, BUT NOT TO YOU#/ +XPAND4: JSP A,ERRPT + SIXBIT /MORE CORE NEEDED#/ +XPAND5: POP P,N + POP P,X + POP P,H + POPJ P, + +XPAND7: PUSHJ P,XPAND + JRST SFULLC + JRST POPJM2 + +POPJM3: SOS (P) ;POPJ TO CALL-2 +POPJM2: SOS (P) ;POPJ TO CALL-1 + SOS (P) ;SAME AS POPJ TO + POPJ P, ;NORMAL POPJ MINUS TWO + > + + +;ENTER SWITCH MODE + +LD6A: CAIN T,57 ;WAS CHAR A SLASH? + TLO N,SLASH ;REMEBER THAT + TLO F,SSW ;ENTER SWITCH MODE +LD6A1: MOVEI D,0 ;ZERO THE NUBER REGISTER + JRST LD3 ;EAT A SWITCH + +;ALPHABETIC CHARACTER, SWITCH MODE + +LD6: XCT LD6B-101(T) ;EXECUTE SWITCH FUNCTION + TLZE N,SLASH ;SWITCH MODE ENTERED W/ SLASH? + JRST LD6D ;LEAVE SWITCH MODE + JRST LD6A1 ;STAY IN SWITCH MODE + +;DISPATCH TABLE FOR SWITCHES + +; THE INSTRUCTION AT THE CHARACTER LOCATION IS EXECUTED + +LD6B: TLO N,ALLFLG ;A - LIST ALL GLOBALS + JRST LD7B ;B - ERROR + PUSHJ P,CHNC ;C - CHAIN, START W/ COMMON + PUSHJ P,LDDT ;D - DEBUG OPTION, LOAD DDT + TLO N,EXEQSW ;E - LOAD AND GO + PUSHJ P,LIBF ;F - LIBRARY SEARCH + PUSHJ P,LD5E ;G - GO INTO EXECUTION + PUSHJ P,LRAIDX ;H - LOAD AN START RAID + TLO N,ISAFLG ;I - IGNORE STARTING ADDRESSES + TLZ N,ISAFLG ;J - USE STARTING ADDRESSES +IFE BLTSYM,<JRST LD7B ;K - ERROR> +IFN BLTSYM,<PUSHJ P,KORADJ ;K - RESERVE SPACE FOR SYM DEFS> + TLO F,LIBSW+SKIPSW ;L - ENTER LIBRARY SEARCH + PUSHJ P,PRMAP ;M - PRINT STORAGE MAP + TLZ F,LIBSW+SKIPSW ;N - LEAVE LIBRARY SEARCH + HRR R,D ;O - NEW PROGRAM ORIGIN + TLO F,NSW ;P - PREVENT AUTO. LIB. SEARCH + TLZ F,NSW ;Q - ALLOW AUTO. LIB. SEARCH + PUSHJ P,CHNR ;R - CHAIN, START W/ RESIDENT + TLO F,SYMSW ;S - LOAD WITH SYMBOLS + PUSHJ P,LDDTX ;T - LOAD AND GO TO DDT + PUSHJ P,PMS ;U - PRINT UNDEFINED LIST + PUSHJ P,LRAID ;V - LOAD RAID + TLZ F,SYMSW+DSYMSW ;W - LOAD WITHOUT SYMBOLS + TLZ N,ALLFLG ;X - DO NOT LIST ALL GLOBALS + TLO F,REWSW ;Y - REWIND BEFORE USE + JRST LD ;Z - RESTART LOADER + + +;SWITCH MODE NUMERIC ARGUMENT + +LD6C: LSH D,3 ;BUILD OCTAL NUMERIC ARGUMENT + ADDI D,-60(T) + JRST LD3 + +;EXIT FROM SWITCH MODE + +LD6D: TLZ F,SSW ;CLEAR SWITCH MODE FLAG + TLNE F,FSW ;TEST FORCED SCAN FLAG + JRST LD2D ;SCAN FORCED, START NEW IDENT. + JRST LD3 ;SCAN NOT FORCED, USE PREV IDENT +;ILLEGAL CHARACTER, NORMAL MODE + +LD7: JSP A,ERRPT8 + SIXBIT /CHAR.%/ + JRST LD2 + +;SYNTAX ERROR, NORMAL MODE + +LD7A: JSP A,ERRPT8 + SIXBIT /SYNTAX%/ + JRST LD2 + +;ILLEGAL CHARACTER, SWITCH MODE + +LD7B: JSP A,ERRPT8 + SIXBIT /SWITCH%/ + JRST LD2 + +;ATTEMPT TO CHAIN WITH SPECIFIED HALF OF JOBCHN = 0 + +LD7C: JSP A,ERRPT ;GRIPE + SIXBIT ?UNCHAINABLE AS LOADED@? + JRST LD2 + +;ATTEMP TO CHAIN WITHOUT SPECIFYING DEVICE + +LD7D: JSP A,ERRPT ;GRIPE + SIXBIT ?NO CHAIN DEVICE@? + JRST LD2 + +IFN BLTSYM,<KORADJ: CAMLE D,KORSP ;IF SMALLER IGNORE + MOVEM D,KORSP + POPJ P,> + +;CHARACTER CLASSIFICATION TABLE DESCRIPTION: + +; EACH CHARACTER HAS ASSOCIATED WITH IT A FOUR BIT BYTE +; PACKED IN THE CHARACTER CLASSIFICATION TABLE. THE CHARACTER +; CLASSIFICATION CODES ARE ORDERED IN SUCH A WAY AS TO GIVE +; DELIMITERS OF HIGHER PRECEDENCE LOWER CLASSIFICATION NUMBERS. +; CERTAIN CHARACTERS HAVE NO EFFECT ON THE COMMAND STRING, AND +; THEREFORE DO NOT EFFECT ORDERING OF DELIMITERS. FOUR CODES +; ARE RESERVED FOR ALTERNATE DISPATCHES WHILE THE SWITCH MODE IS +; IN EFFECT. + + +;CLASSIFICATION BYTE CODES: + +; BYTE DISP CLASSIFICATION + +; 00 - 00 ILLEGAL CHARACTER, SWITCH MODE +; 01 - 01 ALPHABETIC CHARACTER, SWITCH MODE +; 02 - 02 NUMERIC CHARACTER, SWITCH MODE +; 03 - 03 SWITCH MODE ESCAPE, SWITCH MODE + +; 00 - 04 ILLEGAL CHARACTER, NORMAL MODE +; 01 - 05 ALPHABETIC CHARACTER, NORMAL MODE +; 02 - 06 NUMERIC CHARACTER, NORMAL MODE +; 03 - 07 SWITCH MODE ESCAPE, NORMAL MODE + +; 04 - 10 IGNORED CHARACTER +; 05 - 11 ENTER SWITCH MODE CHARACTER +; 06 - 12 DEVICE IDENTIFIER DELIMITER +; 07 - 13 FILE EXTENSION DELIMITER +; 10 - 14 OUTPUT SPECIFICATION DELIMITER +; 11 - 15 INPUT SPECIFICATION DELIMITER +; 12 - 16 LINE TERMINATION +; 13 - 17 JOB TERMINATION + + +;BYTE POINTERS TO CHARACTER CLASSIFICATION TABLE + +LD8: POINT 4,LD9(Q),3 + POINT 4,LD9(Q),7 + POINT 4,LD9(Q),11 + POINT 4,LD9(Q),15 + POINT 4,LD9(Q),19 + POINT 4,LD9(Q),23 + POINT 4,LD9(Q),27 + POINT 4,LD9(Q),31 + POINT 4,LD9(Q),35 + +;CHARACTER CLASSIFIACTION TABLE + +LD9: BYTE (4)4,0,0,0,0,0,0,0,0 + BYTE (4)4,4,4,4,12,0,0,0,0 + BYTE (4)0,0,0,0,0,0,0,0,0 + BYTE (4)13,0,0,0,0,4,0,4,0 + BYTE (4)0,0,0,0,5,3,0,0,11 + BYTE (4)0,7,5,2,2,2,2,2,2 + BYTE (4)2,2,2,2,6,0,0,10,0 +IFE RPGSW,< BYTE (4)0,0,1,1,1,1,1,1,1> +IFN RPGSW,< BYTE (4) 0,10,1,1,1,1,1,1,1> + BYTE (4)1,1,1,1,1,1,1,1,1 + BYTE (4)1,1,1,1,1,1,1,1,1 +IFE PP,<BYTE (4)1,0,0,0,0,10,0,0,0> +IFN PP,<BYTE (4)1,10,0,10,0,10,0,0,0> + BYTE (4)0,0,0,0,0,0,0,0,0 + BYTE (4)0,0,0,0,0,0,0,0,0 + BYTE (4)0,0,0,0,0,0,0,0,13 + BYTE (4)13,4 + + +;INITIALIZE LOADING OF A FILE + +ILD: MOVEI W,BUF1 ;LOAD BUFFER ORIGIN + MOVEM W,JOBFF + TLOE F,ISW ;SKIP IF INIT REQUIRED + JRST ILD6 ;DONT DO INIT + INIT 1,14 +ILD1: 0 ;LOADER INPUT DEVICE + XWD 0,BUFR + JSP A,ILD5 ;ERROR RETURN +ILD6: TLZE F,REWSW ;SKIP IF NO REWIND + MTAPE 1,1 ;REWIND +ILD2: LOOKUP 1,DTIN ;LOOK UP FILE FROM DIRECTORY + JRST ILD3 ;FILE NOT IN DIRECTORY +IFE K,< INBUF 1,2 ;SET UP BUFFERS> +IFN K,< INBUF 1,1 ;SET UP BUFFER> + TLO F,ASW ;SET LEFT ARROW ILLEGAL FLAG + TLZ F,ESW+F4LIB ;CLEAR EXTENSION FLAG + POPJ P, + +; LOOKUP FAILURE + +ILD3: TLOE F,ESW ;SKIP IF .REL WAS ASSUMED + JRST ILD4 ;FATAL LOOKUP FAILURE + SETZM DTIN1 ;ZERO FILE EXTENSION + JRST ILD2 ;TRY AGAIN WITH NULL EXTENSION + +ILD4: TLZE F,F4LIB ;WAS THIS A TRY FOR F40 LIBRARY? + JRST [MOVE W,[SIXBIT /LIB4/]; YES, TRY LIB4 + MOVEM W,DTIN ;... + PUSHJ P,LDDT2 ;USE .REL EXTENSION + TLZ F,ESW ;... + JRST ILD2 ];GO TRY AGAIN +ILD9: JSP A,ERRPT + SIXBIT /CANNOT FIND#/ + JRST LD2 + +; DEVICE SELECTION ERROR + +ILD5: MOVE W,-3(A) ;LOAD DEVICE NAME FROM INIT + TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START W/ ? + PUSHJ P,PWORD ;PRINT DEVICE NAME + JSP A,ERRPT7 + SIXBIT /UNAVAILABLE@/ + JRST LD2 + +;LIBRARY SEARCH CONTROL AND LOADER CONTROL + +;LIBF ENABLES A LIBRARY SEARCH OF <SYS:LIB4.REL> + +LIBF: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + PUSHJ P,LIBF1 ;LOAD SYS:JOBDAT.REL + TLO F,F4LIB ;INDICATE FORTRAN LIBRARY SEARCH + MOVE W,[SIXBIT /LIB40/] ;FIRST TRY AT NAME + PUSHJ P,LIBF2 ;LOAD SYS:LIB40.REL +LIBF1: MOVE W,[SIXBIT /JOBDAT/] ;LOAD SYS:JOBDAT.REL +LIBF2: PUSHJ P,LDDT1 + JUMPGE S,EOF2 ;JUMP IF NO UNDEFINED GLOBALS + TLO F,SLIBSW+SKIPSW ;ENABLE LIBRARY SEARCH + TLZ F,SYMSW+DSYMSW ;DISABLE LOADING WITH SYMBOLS + JRST LDF ;INITIALIZE LOADING LIB4 + +; LIB CONTROLS THE LIBRARY SEARCH OF ONE FILE + +LIB: JUMPGE S,EOF1 ;JUMP IF NO UNDEFINED GLOBALS + TLO F,SKIPSW ;SET SKIPSW TO IGNORE MODE + JRST LOAD ;CONTINUE LIB. SEARCH + +LIB1: CAIE A,4 ;TEST FOR ENTRY BLOCK + JRST LIB3 ;NOT AN ENTRY BLOCK, IGNORE IT +LIB2: PUSHJ P,RWORD ;READ ONE DATA WORD + MOVE C,W + TLO C,040000 ;SET CODE BITS FOR SEARCH + PUSHJ P,SREQ + TLZA F,SKIPSW ;REQUEST MATCHES ENTRY, LOAD + JRST LIB2 ;NOT FOUND +LIB3: PUSHJ P,RWORD ;READ AND IGNORE ONE DATA WORD + JRST LIB3 ;LOOP TO IGNORE INPUT + +;LDDT LOADS <SYS:DDT.REL> AND SETS DSYMSW + +LRAIDX: TLO N,DDSW!EXEQSW ;H - LOAD AND START RAID +LRAID: PUSHJ P,FSCN1 ;FORCE END OF SCAN + MOVE W,[SIXBIT /RAID/] + JRST LDDT0 +LDDTX: TLO N,DDSW+EXEQSW ;T - LOAD AND GO TO DDT +LDDT: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + MOVSI W,444464 ;FILE IDENTIFIER <DDT> +LDDT0: PUSHJ P,LDDT1 + PUSHJ P,LDF ;LOAD <SYS:DDT.REL> + TLO F,DSYMSW ;ENABLE LOADING WITH SYMBOLS + POPJ P, + +LDDT1: MOVEM W,DTIN ;STORE FILE IDENTIFIER +IFN PP,<MOVE W,ILD1 ;SAVE OLD DEV + MOVEM W,OLDDEV> + MOVSI W,637163 ;DEVICE IDENTIFIER <SYS> + MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER + TLZ F,ISW+LIBSW+SKIPSW+REWSW ;CLEAR OLD FLAGS +LDDT2: MOVSI W,624554 ;EXTENSION IDENTIFIER <.REL> +LDDT3: MOVEM W,DTIN1 ;STORE EXTENSION IDENTIFIER +IFN PP,<MOVE W,PPN ;GET PROJ-PROG # + MOVEM W,DTIN+3> + POPJ P, + ;EOF TERMINATES LOADING OF A FILE + +EOF: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER +EOF1: TLZ F,SLIBSW+SKIPSW ;CLEAR ONE FILE LIB. SEARCH FLAG +EOF2: POPJ P, + +; FORCE SCAN TO COMPLETION, LOAD IF NECESSARY + +FSCN: PUSHJ P,FSCN1 ;FORCED LOAD BEFORE TEST + TLNN F,FULLSW ;TEST FOR OVERLAP + POPJ P, ;NO OVERLAP, RETURN + MOVE W,H ;FETCH CORE SIZE REQUIRED + SUBI W,1(S) ; COMPUT DEFICIENCY + JUMPL W,EOF2 ;JUMP IF NO OVERLAP + TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START WITH ? + PUSHJ P,PRNUM0 ;INFORM USER + JSP A,ERRPT7 + SIXBIT /WORDS OF OVERLAP#/ + JRST LD2 ;ERROR RETURN + +FSCN1: TLON F,FSW ;SKIP IF NOT FIRST CALL TO FSCN + TLNN F,CSW+DSW+ESW ;TEST SCAN FOR COMPLETION + POPJ P, +FSCN2: PUSHJ P,LD5B1 ;STORE FILE OR EXTENSION IDENT. + +; LOADER CONTROL, NORMAL MODE + +LDF: PUSHJ P,ILD ;INITIALIZE LOADING + + ;LOAD SUBROUTINE + +LOAD: MOVEM P,PDSAV ;SAVE PUSHDOWN POINTER +LOAD1: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER +LOAD1A: PUSHJ P,WORD ;INPUT BLOCK HEADER WORD + MOVNI E,400000(W) ;WORD COUNT - FROM RH OF HEADER + HLRZ A,W ;BLOCK TYPE - FROM LH OF HEADER + CAILE A,DISPL*2+1 ;TEST BLOCK TYPE NUMBER + JRST LOAD4 ;ERROR, ILLEGAL BLOCK TYPE + TLNE F,SKIPSW ;BLOCK OK - TEST LOAD STATUS + JRST LIB1 ;RETURN TO LIB. SEARCH CONTROL + HRRZ T,LOAD2(A) ;LOAD RH DISPATCH ENTRY + CAILE A,DISPL ;SKIP IF CORRECT + HLRZ T,LOAD2-DISPL-1(A) ;LOAD LH DISPATCH ENTRY + TLNE F,FULLSW ;TEST CORE OVERLAP INDICATOR + SOJG A,HIGH0 ;IGNORE BLOCK IF NOT TYPE 1 + JRST @T ;DISPATCH TO BLOCK SUBROUTINE + +;DISPATCH TABLE - BLOCK TYPES + +LOAD2: XWD NAME,LOAD1A + XWD START,PROG + XWD LOCD,SYM + XWD LOAD4A,LOAD4A + XWD LOAD4A,LIB3 +LOAD3: XWD LOAD4A,HIGH + + DISPL=LOAD3-LOAD2 + +;ERROR EXIT FOR BAD HEADER WORDS + +LOAD4: IFE K,< + CAIN A,400 ;FORTRAN FOUR BLOCK + JRST F4LD> +LOAD4A: JSP A,ERRPT ;INCORRECT HEADER WORD + SIXBIT /ILL. FORMAT#/ + JRST LD2 + + ;LOAD PROGRAMS AND DATA (BLOCK TYPE 1) + +PROG: HRRZ V,W ;LOAD BLOCK LENGTH + PUSHJ P,RWORD ;READ BLOCK ORIGIN + ADD V,W ;COMPUTE NEW PROG. BREAK + CAIG H,@X ;COMPARE WITH PREV. PROG. BREAK + MOVEI H,@X ;UPDATE PROGRAM BREAK + TLNE F,FULLSW + JRST FULLC ;NO ERROR MESSAGE + CAILE H,1(S) ; SKIP IF SUFFICIENT CORE AVAILABLE +IFN EXPAND,< JRST [PUSHJ P,XPAND> + JRST FULLC +IFN EXPAND,< JRST .-1]> + MOVE V,W +PROG1: PUSHJ P,RWORD ;READ DATA WORD + MOVEM W,@X ;STORE DATA WORD IN PROG. AT LLC + AOJA V,PROG1 ;ADD ONE TO LOADER LOC. COUNTER + +;LOAD SYMBOLS (BLOCK TYPE 2) + +SYM: PUSHJ P,PRWORD ;READ TWO DATA WORDS + PUSHJ P,SYMPT; PUT INTO TABLE + JRST SYM + +; WFW SYMPT: JUMPL C,SYM3; JUMP IF GLOBAL REQUEST +SYMPT: TLNE C,200000 ;GLOBAL REQUEST? WFW + JUMPL C,SYM3 ;CHECK FOR 60 NOT JUST HIGH BIT WFW + TLNE C,100000 + JRST SYM1A ;LOCAL SYMBOL + PUSHJ P,SREQ ;GLOBAL DEF., SEARCH FOR REQUEST + JRST SYM2 ;REQUEST MATCHES + PUSHJ P,SDEF ;SEARCH FOR MULTIPLE DEFINITIONS + JRST SYM1 ;MULTIPLY DEFINED GLOBAL + JRST SYM1B + +; PROCESS MULTIPLY DEFINED GLOBAL + +SYM1: CAMN W,2(A) ;COMPARE NEW AND OLD VALUE + POPJ P,; + AOS MDG ;COUNT MULTIPLY DEFINED GLOBALS + PUSHJ P,PRQ ;START W/ ? + PUSHJ P,PRNAM ;PRINT SYMBOL AND VALUE + MOVE W,2(A) ;LOAD OLD VALUE + PUSHJ P,PRNUM ;PRINT OLD VALUE + JSP A,ERRPT7 ;PRINT MESSAGE + SIXBIT /MUL. DEF. GLOBAL#/ + POPJ P,; IGNORE MUL. DEF. GLOBAL SYM + + ; LOCAL SYMBOL + +SYM1A: TLNN F,SYMSW+DSYMSW ;SKIP IF LOAD LOCALS SWITCH ON + POPJ P,; IGNORE LOCAL SYMBOLS +SYM1B: CAIL H,(S) ;STORE DEFINED SYMBOL +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> +SYM1C: IFE K,< + TLNE N,F4SW; FORTRAN FOUR REQUIRES A BLT + PUSHJ P,MVDWN; OF THE TABLES> + MOVEI A,-2(S) ;LOAD A TO SAVE INST. AT SYM2 +SYM1D: SUBI S,2; UPDATE UNDEFINED POINTER + POP B,2(A) ;MOVE UNDEFINED VALUE POINTER + POP B,1(A) ;MOVE UNDEFINED SYMBOL + MOVEM W,2(B) ;STORE VALUE + MOVEM C,1(B) ;STORE SYMBOL + POPJ P,; + + ; GLOBAL DEFINITION MATCHES REQUEST + +SYM2: PUSH P,SYM2C ;NEXT MUST BE A SUBROUTINE FOR LATER. SET RETURN +SYM2B: MOVE V,2(A) ;LOAD REQUEST POINTER + PUSHJ P,REMSYM + JUMPL V,SYM2W ;ADDITIVE REQUEST? WFW + PUSHJ P,SYM4A ;REPLACE CHAIN WITH DEFINITION +;WFW PATCH TO LOOK FOR MORE THAN ONE REQUEST +SYM2W1: PUSHJ P,SREQ ;LOOK FOR MORE REQUESTS FOR THIS SYMBOL + JRST SYM2B ;FOUND MORE + MOVE A,SVA ;RESTORE A +;END OF PATCH WFW +SYM2C: POPJ P,SYM1D ;RETURN, SEE SYM2 FOR USE OF ADDRESS +SVA: 0 ;A TEMP CELL WFW + +; REQUEST MATCHES GLOBAL DEFINITION + +SYM2A: MOVE V,W ;LOAD POINTER TO CHAIN + MOVE W,2(A) ;LOAD VALUE + JUMPL V,FIXWP ;HANDLE ATTITIVE REQUEST WFW + JRST SYM4A; REPLACE CHAIN WITH DEFINITION + +; PROCESS GLOBAL REQUEST + +SYM3: TLNE C,040000; COMMON NAME + JRST SYM1B + TLC C,640000; PERMUTE BITS FROM 60 TO 04 + PUSHJ P,SDEF ;SEARCH FOR GLOBAL DEFINITION + JRST SYM2A ;MATCHING GLOBAL DEFINITION + JUMPL W,SYM3X1 ;ADDITIVE FIXUP WFW + PUSHJ P,SREQ ;SEARCH FOR EXISTING REQUEST WFW + JRST SYM3A ;EXISTING REQUEST FOUND WFW +SYM3X1: TLNN W,100000 ;CHECK SYMBOL TABLE FIXUP + JRST SYM3X2 ;NO + MOVE V,1(B) ;MUST BE LAST SYMBOL DEFINED. GET SYMBOL + XOR V,W ;CHECK FOR IDENTITY + TDNE V,[XWD 77777,-1] ;BUT IGNORE HIGH 3 BITS + POPJ P, ;NOT SAME, ASSUME NOT LOADED LOCAL + HRRI W,2(B) ;GET LOCATION IN RIGHT HALF + TLO W,1 + SUB W,JOBREL ;AND MAKE RELATIVE +SYM3X2: CAIL H,(S) ;STORE REQUEST IN UNDEF. TABLE WFW +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> +SYM3X: IFE K,< + TLNE N,F4SW; FORTRAN FOUR + PUSHJ P,MVDWN; ADJUST TABLES IF F4> + SUB S,SE3 ;ADVANCE UNDEFINED POINTER + MOVEM W,2(S) ;STORE UNDEFINED VALUE POINTER + MOVEM C,1(S) ;STORE UNDEFINED SYMBOL + POPJ P,; + + +; COMBINE TWO REQUEST CHAINS + +SYM3A: SKIPL 2(A) ;IS IT ADDITIVE WFW + JRST SYM3A1 ;NO, PROCESS WFW + PUSHJ P,SDEF2 ;YES, CONTINUE WFW + JRST SYM3A ;FOUND ANOTHER WFW + JRST SYM3X2 ;REALLY NO CHAIN THERE WFW +SYM3A1: SUBI A,-2(X) ;A=A-(-2+X(18-35)); A RELATIVE TO X WFW +SYM3B: HRRZ V,A ; SAVE CHAIN ADDRESS FOR HRRM W,@X + HRRZ A,@X ; LOAD NEXT ADDRESS IN CHAIN + JUMPN A,SYM3B ; JUMP IF NOT THE LAST ADDR. IN CHAIN + HRRM W,@X ;COMBINE CHAINS + POPJ P,; + +;WFW PATCH FOR ADDITIVE GLOBAL REQUESTS + +FIXWP: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + JRST FIXW + MOVE T,1(B) ;SYMBOL FIXUP, MUST BE LAST SYMBOL DEFINED + XOR T,V ;CHECK FOR SAME + TDNE T,[XWD 77777,-1] ;EXCEPT FOR HEGH CODE BITS + POPJ P, ;ASSUME NON-LOADED LOCAL + HRRI V,2(B) ;GET LOCATION + SUBI V,(X) ;SO WE CAN USE @X +FIXW: TLNE V,200000 ;IS IT LEFT HALF + JRST FIXWL + MOVE T,@X ;GET WORD + ADD T,W ;VALUE OF GLOBAL + HRRM T,@X ;FIX WITHOUT CARRY + MOVSI D,200000 ;SET UP TO REMOVE DEFERED INTERNAL IF THERE + JRST SYMFIX +FIXWL: HRLZ T,W ;UPDATE VALUE OF LEFT HALF + ADDM T,@X ;BY VALUE OF GLOBAL + MOVSI D,400000 ;LEFT DEFERED INTERNAL +SYMFIX: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + POPJ P, ;NO, RETURN + ADDI V,(X) ;GET THE LOCATION + MOVE T,-1(V) ;GET THE SYMBOL NAME + TLNN T,40000 ;CHECK TO SEE IF INTERNAL + POPJ P, ;NO, LEAVE + ANDCAB D,-1(V) ;REMOVE PROPER BIT + TLNE D,600000 ;IS IT STILL DEFERED? + POPJ P, ;YES, ALL DONE + EXCH C,D ;NO, CHECK FOR A REQUEST FOR IT + PUSHJ P,SREQ + JRST CHNSYM ;YES, WILL HAVE TO CALL THE FIXUP ROUTINE + MOVE C,D ;GET C BACK + POPJ P, +CHNSYM: PUSH P,D ;HAS THE OLD C IN IT + PUSH P,W ;WE MAY NEED IT LATER + MOVE W,(V) ;GET VALUE + PUSHJ P,SYM2B ;CALL THE FOUND GLOBAL TO MATCH REQUEST ROUTINE + POP P,W + POP P,C ;RESTORE FOR CALLER + POPJ P, ;AND GO AWAY + +SYM2W: TLNN V,100000 ;SYMBOL TABLE? + JRST SYM2WA + ADD V,JOBREL ;MAKE ABSOLUTE + SUBI V,(X) ;GET READY TO ADD X + SYM2WA: PUSHJ P,FIXW ;DO FIXUP + JRST SYM2W1 ;AND LOOK FOR MORE REQUESTS + +;END WFW PATCH + + ;PATCH VALUES INTO CHAINED REQUEST +SYM4: + HRRZ T,@X ;LOAD NEXT ADDRESS IN CHAIN + HRRM W,@X ;INSERT VALUE INTO PROGRAM + MOVE V,T +SYM4A: JUMPN V,SYM4 ;JUMP IF NOT LAST ADDR. IN CHAIN + POPJ P, + +IFE K,< +MVDWN: HRRZ T,MLTP +IFN EXPAND,< SUBI T,2> + CAIG T,@X; ANY ROOM LEFT? +IFN EXPAND,< JRST [PUSHJ P,XPAND> + TLOA F,FULLSW +IFN EXPAND,< JRST MVDWN + JRST .+2]> + TLNE F,SKIPSW+FULLSW + JRST MVABRT; ABORT BLT + HRREI T,-2 + ADDM T,PLTP; ADJUST PROGRAMMER LABEL POINTER + ADDM T,BITP; AND BIT TABLE POINTER + ADDM T,SDSTP; FIRST DATA STATEMENT + ADDM T,LTC + ADDM T,ITC + TLNE N,SYDAT + ADDM T,V + ADDB T,MLTP; AND FINALLY TO MADE LABEL TABLE + HRLS T; SET UP BLT POINTER + ADD T,[XWD 2,0] + BLT T,(S) +MVABRT: POPJ P,; +> +;HIGHEST RELOCATABLE POINT (BLOCK TYPE 4) +SFULLC: TLOE F,FULLSW ;PREVIOUS OVERFLOW? + JRST FULLC ;YES, DON'T PRINT MESSAGE + JSP A,ERRPT ;NO, COMPLAIN ABT OVERFLO + SIXBIT ?SYMBOL TABLE OVERLAP#? +FULLC: TLO F,FULLSW ;CORE OVERLAP ERROR RETURN +IFE K,< TLNE N,F4SW + POPJ P,> + JRST LIB3 ;LOOK FOR MORE + +HIGH0: CAIE A,4 ; TEST FOR END BLOCK (OVERLAP) + JRST LIB3 +HIGH: PUSHJ P,PRWORD ;READ TWO DATA WORDS + HRR R,C ;SET NEW PROGRAM BREAK + ADDI C,X; BE SURE TO RELOCATE + CAILE C,1(S) ;TEST PROGRAM BREAK +IFN EXPAND,<PUSHJ P,[ PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM2 + POPJ P,]> +IFE EXPAND,<TLO F,FULLSW> +HIGH3: MOVEI A,F.C ;SAVE CURRENT STATE OF LOADER + BLT A,B.C + TLNE F,SLIBSW+LIBSW ;NORMAL MODE EXIT THROUGH LOAD1 + JRST LIB ;LIBRARY SEARCH EXIT + JRST LOAD1 + + ;STARTING ADDRESS (BLOCK TYPE 7) + +START: PUSHJ P,PRWORD ;READ TWO DATA WORDS + TLNN N,ISAFLG ;SKIP IF IGNORE SA FLAG ON + HRR F,C ;SET STARTING ADDRESS + +;PROGRAM NAME (BLOCK TYPE 6) + +NAME: PUSHJ P,PRWORD ;READ TWO DATA WORDS + TLOE N,COMFLG ;SKIP IF COMMON NOT PREV. SET + JRST NAME1 ;SIZE OF COMMON PREV. SET + MOVEM W,COMSAV ;STORE LENGTH OF COMMON + JUMPE W,NAME2 ;JUMP IF NO COMMON IN THIS JOB + HRRI R,@R ;FIRST PROGRAM SET LOAD ORIGIN +NAME1: CAILE H,-1(S) ;TEST FOR AVAIL. SYMBOL SPACE +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> + SUBI S,2 ;UPDATE UNDEF. TABLE POINTER + POP B,2(S) + POP B,1(S) + HRRZ V,N ;POINTER TO PREVIOUS NAME + SUBM B,V ;COMPUTE RELATIVE POSITIONS + HRLM V,2(N) ;STORE FORWARD POINTER + HRR N,B ;UPDATE NAME POINTER +NAME2: MOVEM C,1(B) ;STORE PROGRAM NAME + HRRZM R,2(B) ;STORE PROGRAM ORIGIN + CAMG W,COMSAV ;CHECK COMMON SIZE + JRST LIB3 ;COMMON OK +ILC: JSP A,ERRPT + SIXBIT /ILL. COMMON#/ + JRST LD2 + +;ONE PASS LOCAL DEFINITION (BLOCK TYPE 10) + + ;PMP PATCH FOR LEFT HALF FIXUPS + ;END PMP PATCH +LOCD: PUSHJ P,RWORD ;READ ONE DATA WORD + HLRZ V,W ;STORAGE POINTER IN LEFT HALF + PUSHJ P,SYM4A ;LINK BACK REFERENCES + JRST LOCD + +REMSYM: MOVE T,1(S) + MOVEM T,1(A) + MOVE T,2(S) + MOVEM T,2(A) + ADD S,SE3 + MOVEM A,SVA + POPJ P, + + ;SYMBOL TABLE SEARCH SUBROUTINES + +; ENTERED WITH SYMBOL IN C +; RETURN IS WITH POINTER IN A IF MATCHING SYMBOL FOUND +; OTHERWISE, A SKIP ON RETURN OCCURS + +SREQ: JUMPGE S,CPOPJ1 ;JUMP IF NO UNDEF. SYMBOLS + SKIPA A,S ;LOAD REQUEST SEARCH POINTER +SDEF: MOVE A,B ;LOAD DEF. SYMBOL SEARCH POINTER +SDEF1: CAMN C,1(A) + POPJ P, ;SYMBOLS MATCH, RETURN +SDEF2: ADD A,SE3 + JUMPL A,SDEF1 +IFE K,< JRST CPOPJ1 ;SYMBOL NOT FOUND SKIPS ON RETURN> +IFN K,< +CPOPJ1: AOS (P) ;TRA 2,4 + POPJ P, ;...> + +;RELOCATION AND BLOCK INPUT + +PRWORD: PUSHJ P,RWORD ;READ A WORD PAIR + MOVE C,W ;LOAD C WITH FIRST DATA WORD + TRNE E,377777 ;TEST FOR END OF BLOCK + JRST RWORD1 ;INPUT SECOND WORD OF PAIR + MOVEI W,0 ;NO SECOND WORD, ASSUME ZERO + POPJ P, + +RWORD: TRNN E,377777 ;TEST FOR END OF BLOCK + JRST LOAD1 ;RETURN TO LOAD THE NEXT BLOCK +RWORD1: AOBJN E,RWORD2 ;JUMP IF DATA WORD NEXT + PUSHJ P,WORD ;READ CONTROL WORD + MOVE Q,W ;DON'T COUNT RELOCATION WORDS + HRLI E,-22 ;SET RELOCATION WORD BYTE COUNT +RWORD2: PUSHJ P,WORD ;READ INPUT WORD + JUMPGE Q,RWORD3 ;TEST LH RELOCATION BIT + HRLZ T,R + ADD W,T ;LH RELOCATION +RWORD3: TLNE Q,200000 ;TEST RH RELOCATION BIT + HRRI W,@R ;RH RELOCATION + LSH Q,2 + POPJ P, + + ;PRINT STORAGE MAP SUBROUTINE + +PRMAP: PUSHJ P,FSCN1 ;LOAD OTHER FILES FIRST + PUSHJ P,CRLFLF ;START NEW PAGE + HRRZ W,R + PUSHJ P,PRNUM0 + JSP A,ERRPT7 + SIXBIT ?IS THE PROGRAM BREAK@? + PUSHJ P,CRLF ;START STORAGE MAP + JSP A,ERRPT0 ;PRINT HEADER + SIXBIT ?STORAGE MAP@? + HLRE A,B + MOVNS A + ADDI A,(B) +PRMAP1: SUBI A,2 + SKIPL C,1(A) ;LOAD SYMBOL, SKIP IF DELETED + TLNE C,300000 ;TEST FOR LOCAL SYMBOL + JRST PRMAP4 ;IGNORE LOCAL SYMBOLS + TLNN C,040000 + PUSHJ P,CRLF ;PROGRAM NAME + PUSHJ P,PRNAM1 ;PRINT SYMBOL AND VALUE + TLNE C,040000 + JRST PRMAP3 ;GLOBAL SYMBOL + HLRE C,W ;POINTER TO NEXT PROG. NAME + JUMPGE C,PRMAP2 ;JUMP IF LAST PROGRAM NAME + ADDI C,2(A) ;COMPUTE LOC. OF FOLLOWING NAME + SKIPA T,@C ;LOAD ORIGIN OF FOLLOWING PROG. +PRMAP2: HRRZ T,R ;LOAD PROGRAM BREAK + SUBM T,W ;SUBTRACT ORIGIN TO GET LENGTH + PUSHJ P,PRNUM ;PRINT PROGRAM LENGTH + PUSHJ P,CRLF + TLNN N,ALLFLG ;SKIP IF LIST ALL MODE IS ON + TRNE W,777777 ;SKIP IF ZERO LENGTH PROGRAM + JRST PRMAP3 + JUMPE C,PRMAP5 ;JUMP IF LAST PROGRAM + SKIPA A,C ;SKIP GLOBALS, ZERO LENGTH PROG. +PRMAP3: PUSHJ P,CRLF +PRMAP4: CAILE A,(B) ;TEST FOR END OF SYMBOL TABLE + JRST PRMAP1 +PRMAP5: + + ;LIST UNDEFINED GLOBALS + +PMS: PUSHJ P,FSCN1 ;LOAD FILES FIRST + JUMPGE S,PMS3 ;JUMP IF NO UNDEFINED GLOBALS + HLLOS 42 ;SET SOME ERROR TO ABORT EXECUTION + PUSHJ P,FCRLF ;START THE MESSAGE + PUSHJ P,PRQ ;PRINT ? + HLRE W,S ;COMPUTE NO. OF UNDEF. GLOBALS + MOVMS W + LSH W,-1 ;<LENGTH OF LIST>/2 + PUSHJ P,PRNUM0 + JSP A,ERRPT7 + SIXBIT /UNDEFINED GLOBALS@/ + MOVE A,S ;LOAD UNDEF. POINTER +PMS2: PUSHJ P,CRLF + PUSHJ P,PRQ ;PRINT ? + PUSHJ P,PRNAM0 ;PRINT SYMBOL AND POINTER + ADD A,SE3 + JUMPL A,PMS2 + PUSHJ P,CRLF ;SPACE AFTER LISTING + +;LIST NUMBER OF MULTIPLY DEFINED GLOBALS + +PMS3: SKIPN W,MDG ;ANY MULTIPLY DEFINED GLOBALS + JRST PMS4 ;NO, EXCELSIOR + HLLOS 42 ;ANOTHER WAY TO LOSE + PUSHJ P,FCRLF ;ROOM AT THE TOP + PUSHJ P,PRQ ;PRINT ? + PUSHJ P,PRNUM0 ;NUMBER OF MULTIPLES + JSP A,ERRPT7 ;REST OF MESSAGE + SIXBIT ?MULTIPLY DEFINED GLOBALS@? +PMS4: TLNE N,AUXSWE ;AUXILIARY OUTPUT DEVICE? + OUTPUT 2, ;INSURE A COMPLETE BUFFER + POPJ P, ;RETURN + + ;ENTER FILE ON AUXILIARY OUTPUT DEVICE + +IAD2: ENTER 2,DTOUT ;WRITE FILE NAME IN DIRECTORY + JRST IMD3 ;NO MORE DIRECTORY SPACE + POPJ P, + +IMD3: JSP A,ERRPT ;DIRECTORY FULL ERROR + SIXBIT /DIR. FULL@/ + JRST LD2 + +;PRINT THE 6 DIGIT OCTAL ADDRESS IN W + +; ACCUMULATORS USED: D,T,V + +PRNAM0: MOVE C,1(A) ;LOAD SYMBOL +PRNAM1: MOVE W,2(A) ;LOAD VALUE +PRNAM: PUSHJ P,PRNAME +PRNUM: PUSHJ P,SPACES +PRNUM0: MOVE V,PRNUM2 ;LOAD BYTE POINTER TO RH. OF W + MOVNI D,6 ;LOAD CHAR. COUNT +PRNUM1: ILDB T,V ;LOAD DIGIT TO BE OUTPUT + ADDI T,60 ;CONVERT FROM BINARY TO ASCII + PUSHJ P,TYPE2 + AOJL D,PRNUM1 ;JUMP IF MORE DIGITS REMAIN + POPJ P, + +PRNUM2: XWD 220300,W + +;YE OLDE RECURSIVE NUMBER PRINTER +;PRINTS Q, WITH LEADING ZEROES SUPPRESSED; USES A AND T + +RCNUM: IDIVI Q,12 ;RADIX DECIMAL + ADDI A,"0" + HRLM A,(P) + SKIPE Q + PUSHJ P,RCNUM + HLRZ T,(P) + JRST TYPE2 + + ;PRINT FOUR SPACES + +SPACES: PUSHJ P,SP1 +SP1: PUSHJ P,SPACE +SPACE: MOVEI T,40 + JRST TYPE2 + +;SYMBOL PRINT - RADIX 50 + +; ACCUMULATORS USED: D,T + +PRNAME: MOVE T,C ;LOAD SYMBOL + TLZ T,740000 ;ZERO CODE BITS + MOVNI D,6 ;LOAD CHAR. COUNT +SPT: IDIVI T,50 ;THE REMAINDER IS THE NEXT CHAR. + HRLM V,(P) ;STORE IN LH. OF PUSHDOWN LIST + AOSGE D ;SKIP IF NO CHARS. REMAIN + PUSHJ P,SPT ;RECURSIVE CALL FOR NEXT CHAR. + HLRZ T,(P) ;LOAD FROM LH. OF PUSHDOWN LIST + JUMPE T,TYPE ;BLANK + ADDI T,60-1 + CAILE T,71 + ADDI T,101-72 + CAILE T,132 + SUBI T,134-44 + CAIN T,43 + MOVEI T,56 + JRST TYPE2 +;PRINT A WORD OF SIXBIT CHARACTERS IN AC W + +; ACCUMULATORS USED: Q,T,D + +PWORD: MOVNI Q,6 ;SET CHARACTER COUNT TO SIX +PWORD1: MOVE D,LSTPT ;ENTER HERE WITH Q PRESET +PWORD2: ILDB T,D ;LOAD NEXT CHAR. TO BE OUTPUT + PUSHJ P,TYPE ;OUTPUT CHARACTER + AOJL Q,PWORD2 + POPJ P, + + ;ERROR MESSAGE PRINT SUBROUTINE + +; FORM OF CALL: + +; JSP A,ERRPT +; SIXBIT /<MESSAGE>/ + +; ACCUMULATORS USED: T,V,C,W + +ERRPT: TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,CRLF ;ROOM AT THE TOP + PUSHJ P,PRQ ;START OFF WITH ? +ERRPT0: PUSH P,Q ;SAVE Q + SKIPA V,ERRPT5 +ERRPT1: PUSHJ P,TYPE + ILDB T,V + CAIN T,40 + JRST ERRPT4 + CAIN T,5 + JRST ERRPT9 + CAIE T,3 + JRST ERRPT1 + SKIPN C,DTIN + JRST ERRPT4 + MOVNI Q,14 + MOVEI W,77 +ERRPT2: TDNE C,W + JRST ERRPT3 + LSH W,6 + AOJL Q,ERRPT2 +ERRPT3: MOVE W,ERRPT6 + PUSHJ P,PWORD1 + SKIPN W,DTIN1 + JRST ERRPT4 + LSH W,-6 + TLO W,160000 + MOVNI Q,4 + PUSHJ P,PWORD1 +ERRPT4: PUSHJ P,CRLF +ERRP41: POP P,Q + TLZ F,FCONSW ;ONE ERROR PER CONSOLE + AOS V ;PROGRAM BUMMERS BEWARE: + JRST @V ;V HAS AN INDEX OF A + +ERRPT5: POINT 6,0(A) +ERRPT6: SIXBIT / FILE / + + ERRPT8: TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START WITH ? + CAIGE T,140 ;IS IT A NON-PRINTING CHAR? + CAIL T,40 + JRST ERRP8 + PUSH P,T + MOVEI T,136 ;UP ARROW + PUSHJ P,TYPE2 + POP P,T + ADDI T,100 ;CONVERT TO PRINTING CHAR. +ERRP8: PUSHJ P,TYPE2 +ERRPT7: PUSHJ P,SPACE + JRST ERRPT0 + +ERRPT9: MOVEI V,@V + PUSH P,V + JSP A,ERRPT7 + SIXBIT ?ILLEGAL -LOADER@? + POP P,V + JRST ERRP41 + +;PRINT QUESTION MARK + +PRQ: PUSH P,T ;SAVE + MOVEI T,"?" ;PRINT ? + PUSHJ P,TYPE2 ;... + POP P,T ;RESTORE + POPJ P, ;RETURN + + ;INPUT - OUTPUT INTERFACE + +;BINARY INPUT SUBROUTINE - RETURNS A WORD IN W +IFE K,< +WORDPR: PUSHJ P,WORD ;GET FIRST WORD OF PAIR + MOVE C,W ;KEEP IT HANDY> +WORD: SOSG BUFR2 ;SKIP IF BUFFER NOT EMPTY + JRST WORD2 +WORD1: ILDB W,BUFR1 ;PICK UP 36 BIT WORD + POPJ P, + +WORD2: INPUT 1, ;GET NEXT BUFFER LOAD + STATUS 1,W ;GET DEVICE STATUS FROM MONITOR + TRNE W,IODEND ;TEST FOR EOF + JRST EOF ;END OF FILE EXIT + TRNN W,IOBAD ;TEST FOR DATA ERROR + JRST WORD1 ;DATA OK - CONTINUE LOADING + JSP A,ERRPT ;DATA ERROR - PRINT MESSAGE + SIXBIT /INPUT ERROR#/ + JRST LD2 ;GO TO ERROR RETURN +;TYPEOUT SUBROUTINE - THE CHARACTER SUPPLIED IN T IS CONVERTED TO ASCII +;AND IS OUTPUT ON THE CONSOLE AND/OR THE SPECIFIED LOADER MAP OUTPUT +;DEVICE + +CRLFLF: PUSHJ P,CRLF +FCRLF: TLO F,FCONSW ;INSURE TTY OUTPUT +CRLF: MOVEI T,15 ;CARRIAGE RETURN LINE FEED + PUSHJ P,TYPE2 + MOVEI T,12-40 ;LINE FEED IN PSEUDO SIXBIT +TYPE: MOVEI T,40(T) ;CONVERT SIXBIT TO ASCII +TYPE2: TLNN N,AUXSWI ;IS THER AN AUXILIARY DEVICE? + JRST TYPE3 ;NO, DONT OUTPUT TO IT + TLON N,AUXSWE ;IS AUX. DEV. ENTERED? + PUSHJ P,IAD2 ;NOPE, DO SO! + SOSG ABUF2 ;SPACE LEFT IN BUFFER? + OUTPUT 2, ;CREATE A NEW BUFFER + IDPB T,ABUF1 ;DEPOSIT CHARACTER + TLNN F,FCONSW ;FORCE OUTPUT TO CONSOLE TOO? + POPJ P, ;NOPE +TYPE3: SKIPN BUFO2 ;END OF BUFFER + OUTPUT 3, ;FORCE OUTPUT NOW + IDPB T,BUFO1 ;DEPOSIT CHARACTER + CAIN T,12 ;END OF LINE + OUTPUT 3, ;FORCE AN OUTPUT + POPJ P, + + SE3: XWD 2,2 ;SYMBOL POINTER INCREMENT +LSTPT: POINT 6,W ;CHARACTER POINTER TO W +PDLPT: XWD -41,PDLST-1; INITIAL PUSHDOWN POINTER +COMM: SQUOZE 0,.COMM. +PDSAV: 0 ;SAVED PUSHDOWN POINTER +COMSAV: 0 ;LENGTH OF COMMON +MDG: 0 ;COUNTER FOR MUL DEF GLOBALS +PDLST: BLOCK 40 + +F.C: 0 + 0 ;STORE N HERE + 0 ;STORE X HERE + 0 ;STORE H HERE + 0 ;STORE S HERE + 0 ;STORE R HERE +B.C: 0 +F.I: 0 ;INITIAL F - FLAGS + 0 ;INITIAL N + XWD V,LDEND ;INITIAL X - LOAD PROGRAM AFTER LOADER + EXP LDEND+JOBPRO ;INITIAL H - INITIAL PROG BREAK + 0 ;INITIAL S + XWD W,JOBPRO ;INITIAL R - INITIAL RELOC + 0 ;INITIAL B + ;BUFFER HEADERS AND HEADER HEADERS + +BUFO: 0 ;CONSOLE INPUT HEADER HEADER +BUFO1: 0 +BUFO2: 0 + +BUFI: 0 ;CONSOLE OUTPUT HEADER HEADER +BUFI1: 0 +BUFI2: 0 + +ABUF: 0 ;AUXILIARY OUTPUT HEADER HEADER +ABUF1: 0 +ABUF2: 0 + +BUFR: 0 ;BINARY INPUT HEADER HEADER +BUFR1: 0 +BUFR2: 0 + +DTIN: 0 ;DECTAPE INPUT BLOCK +DTIN1: 0 + 0 +DTIN2: 0 + +DTOUT: 0 ;DECTAPE OUTPUT BLOCK +DTOUT1: 0 + 0 + 0 + + TTYL=52 ;TWO TTY BUFFERS +IFE K,< BUFL=406 ;TWO DTA BUFFERS FOR LOAD> +IFN K,< BUFL=203 ;ONE DTA BUFFER FOR LOAD> + ABUFL=203 ;ONE DTA BUFFER FOR AUX DEV +TTY1: BLOCK TTYL ;TTY BUFFER AREA +BUF1: BLOCK BUFL ;LOAD BUFFER AREA +AUX: BLOCK ABUFL ;AUX BUFFER AREA +ZEROS: REPEAT 4,<0> + +IFN RPGSW,<CTLIN: BLOCK 3 +CTLNAM: BLOCK 3 +CTLBUF: BLOCK 203+1 +> + IOBKTL=40000 +IOIMPM=400000 + IODERR=200000 + IODTER=100000 + IODEND=20000 + +IOBAD=IODERR+IODTER+IOBKTL+IOIMPM + + INTERN PWORD,DTIN,DTOUT,LDEND + INTERN WORD,LD,BEG,PDLST,LOAD + INTERN CRLF,TYPE,PMS,PRMAP + INTERN F,P,X,H,S,R,B,N,T,V,W,C,E,Q,A,D + + EXTERN JOBDDT,JOBFF,JOBSA,JOBREL,JOBSYM,JOBUSY,JOB41 + +;END HERE IF 1K LOADER REQUESTED. +IFN K, <LITS: LIT + VAR +LDEND: END LD +> + + ;HERE BEGINS FORTRAN FOUR LOADER + +F4LD: + HRRZ V,R; SET PROG BREAK INTO V + MOVEM V,LLC; SAVE FIRST WORD ADDRESS + MOVEI W,-2(S); GENERATE TABLES + TLO N,F4SW + HRRZM W,MLTP; MADE LABELS + HRRZM W,PLTP; PROGRAMMER LABELS + ADD W,[POINT 1,1]; GENERATE BIT-BYTE POINTER + MOVEM W,BITP + MOVEM W,SDSTP; FIRST DATA STATEMENT + AOS SDSTP; + MOVE W,[JRST ALLOVE] ;LAST DATA STATEMENT + MOVEM W,(S) + HRREI W,-^D36; BITS PER WORDUM + MOVEM W,BITC; BIT COUNT + PUSHJ P,BITWX+1 ;MAKE SURE OF ENOUGH SPACE + +TEXTR: PUSHJ P,WORD; TEXT BY DEFAULT + HLRZ C,W + CAIN C,-1 + JRST HEADER; HEADER + MOVEI C,1; RELOCATABLE + PUSHJ P,BITW; SHOVE AND STORE + JRST TEXTR; LOOP FOR NEXT WORD + +ABS: SOSG BLKSIZ; MORE TO GET + JRST TEXTR; NOPE +ABSI: PUSHJ P,WORD; + MOVEI C,0; NON-RELOCATABLE + PUSHJ P,BITW; TYPE 0 + JRST ABS + + ;PROCESS TABLE ENTRIES + +MDLB: TLNE F,FULLSW+SKIPSW; MADE LABEL PROC + JRST GLOBDF; NO ROOM AT THE IN + HLRZ C,MLTP; GET PRESENT SIZE + CAMGE C,BLKSIZ; IF NEW SIZE BIGGER, STR-R-RETCH + PUSHJ P,SMLT + HRRZ C,MLTP; GET BASE +MLPLC: ADD C,BLKSIZ; MAKE INDEX + TLNN F,FULLSW+SKIPSW; DONT LOAD + HRRZM V,(C); PUT AWAY DEFINITION +GLOBDF: PUSHJ P,WORD + TLNE F,FULLSW+SKIPSW ;SKIPPING THIS PROG? + JRST TEXTR ;YES, DON'T DEFINE + MOVEI C,(V); AND LOC + EXCH W,C + PUSHJ P,SYMXX; PUT IN DDT-SYMBOL TABLE + PUSHJ P,BITWX+1 + JRST TEXTR + +PLB: TLNE F,FULLSW+SKIPSW + JRST GLOBDF + HLRZ C,PLTP; PRESENT SIZE + CAMGE C,BLKSIZ + PUSHJ P,SPLT + HRRZ C,PLTP + JRST MLPLC + + ;STORE WORD AND SET BIT TABLE + +BITW: TLNE F,FULLSW+SKIPSW; WE DONT LOAD THIS + POPJ P,; + MOVEM W,@X; STORE AWAY OFFSET + IDPB C,BITP; STORE BIT + AOSGE BITC; STEP BIT COUNT + JRST BITWX; SOME MORE ROOM LEFT + HRREI C,-^D36; RESET COUNT + MOVEM C,BITC + SOS PLTP + SOS BITP; ALL UPDATED +IFE EXPAND,<HRL C,MLTP + SOS MLTP + HRR C,MLTP> +IFN EXPAND,<HRRZ C,MLTP; TO ADDRESS + SUBI C,1 + CAIG C,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADDI C,2000 + JRST POPJM2] + SOS MLTP + HRLI C,1(C)> + HRRZ T,SDSTP; GET DATA POINTER + BLT C,-1(T); MOVE DOWN LISTS +BITWX: AOS V; STEP LOADER LOCATION + HRRZ T,MLTP + CAIG T,@X; OVERFLOW CHECK +IFE EXPAND,<TLO F,FULLSW> +IFN EXPAND,<PUSHJ P, [PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM3 + POPJ P,]> + POPJ P,; + +SMLT: SUB C,BLKSIZ; STRETCH + MOVS W,MLTP ;LEFT HALF HAS OLD BASE + ADD C,MLTP ;RIGHT HALF HAS NEW BASE +IFN EXPAND,< HRRZS C ;GET RID OF COUNT + CAIG C,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADD W,[XWD 2000,0] + ADDI C,2000 + JRST POPJM2]> + HRRM C,MLTP ;PUT IN NEW MLTP + HLL C,W ;FORM BLT POINTER + ADDI W,(C) ;LAST ENTRY OF MLTP + HRL W,BLKSIZ ;NEW SIZE OF MLTP + HLLM W,MLTP ;... +SLTC: BLT C,0(W); MOVE DOWN (UP?) + POPJ P,; + +SPLT: SUB C,BLKSIZ + MOVS W,MLTP; + ADDM C,PLTP + ADD C,MLTP +IFN EXPAND,< HRRZS C + CAIG C,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADD W,[XWD 2000,0] + ADDI C,2000 + JRST POPJM2]> + HRRM C,MLTP ;PUT IN NEW MLTP + HLL C,W + HLRZ W,PLTP ;OLD SIZE OF PL TABLE + ADD W,PLTP ;NEW BASE OF PL TABLE + HRL W,BLKSIZ ;NEW SIZE OF PL TABLE + HLLM W,PLTP ;INTO POINTER + JRST SLTC + +PT1: 0 + + + ;PROCESS END CODE WORD + +ENDS: PUSHJ P,WORD; GET STARTING ADDRESS + TLNE F,SKIPSW + JRST ENDS1 ;FOOBAZ!!!!!!!! + JUMPE W,ENDS1; NOT MAIN + ADDI W,(R); RELOCATION OFFSET + TLNN N,ISAFLG; IGNORE STARTING ADDRESS + HRR F,W; SET SA +ENDS1: PUSHJ P,WORDPR ;DATA STORE SIZE + HRRZM C,PTEMP ;NUMBER OF PERMANENT TEMPS + MOVEM V,CCON; START OF CONSTANTS AREA + JUMPE W,E1; NULL + MOVEM W,BLKSIZ ;SAVE COUNT + MOVEI W,0(V) ;DEFINE CONST. + MOVE C,CNR50 ;... + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMPT ;... + PUSHJ P,GSWD ;STORE CONSTANT TABLE +E1: MOVEI W,0(V); GET LOADER LOC + EXCH W,PTEMP; STORE INTO PERM TEMP POINTER + ADD W,PTEMP; FORM TEMP TEMP ADDRESS + MOVEM W,TTEMP; POINTER + MOVEM V,GSTAB; STORE LOADER LOC IN GLOBSUB + MOVE C,TTR50 ;DEFINE %TEMP. + TLNE F,SKIPSW!FULLSW + JRST E1A + PUSHJ P,SYMPT ;... + MOVE C,PTR50 ;DEFINE (IF EXTANT) TEMP. + MOVEI W,0(V) ;... + CAME W,TTEMP ;ANY PERM TEMPS? + PUSHJ P,SYMPT ;YES, DEFINE +E1A: PUSHJ P,WORD; NUMBER OF GLOBSUBS + JUMPE W,E11 + MOVEM W,BLKSIZ ;SIZE OF GLOBSUB + PUSHJ P,GSWD ;STORE GLOBSUB TABLE +E11: MOVEM V,STAB; SCALARS + PUSHJ P,WORD; HOW MANY? + JUMPE W,E21; NONE + PUSHJ P,GSWDPR ;STORE SCALAR TABLE +E21: MOVEM V,ATAB; ARRAY POINTER + PUSHJ P,WORD; COMMENTS FOR SCALARS APPLY + JUMPE W,E31 + PUSHJ P,GSWDPR ;STORE ARRAY TABLE +E31: MOVEM V,AOTAB; ARRAYS OFFSET + PUSHJ P,WORD; SAME COMMENTS AS ABOVE + JUMPE W,E41 + PUSHJ P,GSWDPR ;STORE ARRAY OFFSET TABLE +E41: PUSHJ P,WORD; TEMP, SCALAR, ARRAY SIZE + TLNE F,FULLSW!SKIPSW ;SKIPPING THIS PROG? + MOVEI W,0 ;DON'T ACCEPT GLOB SUBPROG REQUESTS + MOVEM V,CTAB; SETUP COMMON TABLE POINTER + ADD W,GSTAB; GLOBAL SUBPROG BASE + MOVEM W,COMBAS; START OF COMMON + PUSHJ P,WORD; COMMON BLOCK SIZE + HRRZM W,BLKSIZ + JUMPE W,PASS2; NO COMMON +COMTOP: PUSHJ P,WORDPR ;GET A COMMON PAIR + PUSHJ P,SDEF; SEARCH + JRST COMYES; ALREADY THERE + HRLS W + HRR W,COMBAS; PICK UP THIS COMMON LOC + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMXX; DEFINE IT + MOVS W,W; SWAP HALFS + ADD W,COMBAS; UPDATE COMMON LOC + HRRM W,COMBAS; OLD BASE PLUS NEW SIZE + HLRZS W; RETURN ADDRESS + TLZ C,400000 + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMXX +COMCOM: PUSHJ P,CWSTWX ;STORE A WORD PAIR + SOS BLKSIZ + SOSLE BLKSIZ + JRST COMTOP + JRST PASS2 + +COMYES: TLNE F,SKIPSW + JRST COMCOM ;NO ERRORS IF SKIPPING + HLRZ C,2(A); PICK UP DEFINITION + CAMLE W,C; CHECK SIZE + JRST ILC; ILLEGAL COMMON + MOVE C,1(A); NAME + HRRZ W,2(A); BASE + JRST COMCOM + + +PRSTWX: PUSHJ P,WORDPR ;GET A WORD PAIR +CWSTWX: EXCH C,W ;SPACE TO STORE FIRST WORD OF PAIR? + PUSHJ P,WSTWX ;... + EXCH C,W ;THERE WAS; IT'S STORED +WSTWX: TLNE F,FULLSW!SKIPSW ;SPACE FOR ANOTHER WORD? + POPJ P, ;NOPE, RETURN + MOVEM W,@X ;YES, STORE IT. + JRST BITWX ;TELL THE TABLES ABOUT IT; THEN RETURN + + +GSWD: PUSHJ P,WORD ;GET WORD FROM TABLE + PUSHJ P,WSTWX ;STASH IT + SOSE BLKSIZ ;FINISHED? + JRST GSWD ;NOPE, LOOP + POPJ P, ;TRA 1,4 + +GSWDPR: MOVEM W,BLKSIZ ;KEEP COUNT +GSWDP1: PUSHJ P,PRSTWX ;GET AND STASH A PAIR + SOS BLKSIZ ;FINISHED? + SOSLE BLKSIZ ;... + JRST GSWDP1 ;NOPE, LOOP + POPJ P, ;TRA 1,4 + + ;BEGIN HERE PASS2 TEXT PROCESSING + +PASS2: ADDI V,(X) + MOVEM V,TOPTAB ;SAVE FOR OVERLAP CHECKING + TLNE F,FULLSW+SKIPSW; ABORT? + JRST ALLOVE; YES + MOVE V,LLC ;PICK UP PROGRAM ORIGIN + CAML V,CCON ;IS THIS A PROGRAM? + JRST FBLKD ;NO, GO LOOK FOR FIRST BLK DATA + TLOE N,PGM1 ;YES, IS THIS FIRST F4 PROG? + JRST NOPRG ;NO + HRR W,COMBAS ;YES, PLACE PROG BREAK IN LH + HRLM W,JOBCHN(X) ;FOR CHAIN +NOPRG: HRRZ W,PLTP; GET PROG TABLE BASE + HLRZ C,PLTP; AND SIZE + ADD W,C; COMPUTE END OF PROG TABLE + ADD W,[POINT 1,1]; AND BEGINNING OF BIT TABLE + EXCH W,BITP; SWAP POINTERS +PASS2B: ILDB C,BITP; GET A BIT + JUMPE C,PASS2C; NO PASS2 PROCESSING + PUSHJ P,PROC; PROCESS A TAG + JRST PASS2B; MORE TO COME + JRST ENDTP; + +PROC: LDB C,[POINT 6,@X,23]; TAG + SETZM MODIF; ZERO TO ADDRESS MODIFIER + TRZE C,40; + AOS MODIF + HRLM C,ENDTAB; ERROR SETUP + MOVEI W,TABDIS; HEAD OF TABLE + HLRZ T,(W); GET ENTRY + CAME T,C; CHECK + AOJA W,.-2 + HRRZ W,(W); GET DISPATCH + LDB C,[POINT 12,@X,35] + JRST (W); DISPATCH + +TABDIS: XWD 11,PCONS; CONSTANTS + XWD 06,PGS; GLOBAL SUBPROGRAMS + XWD 20,PST; SCALARS + XWD 22,PAT; ARRAYS + XWD 01,PATO; ARRAYS OFFSET + XWD 00,PPLT; PROGRAMMER LABELS + XWD 31,PMLT; MADE LABESL + XWD 26,PPT; PERMANENT TEMPORARYS + XWD 27,PTT; TEMPORARY TEMPORARYS +ENDTAB: XWD 00,LOAD4A; ERRORS + +PASS2C: PUSHJ P,PASS2A + JRST PASS2B + JRST ENDTP + + ;DISPATCH ON A HEADER + +HEADER: CAMN W,[EXP -2]; END OF PASS ONE + JRST ENDS + LDB C,[POINT 12,W,35]; GET SIZE + MOVEM C,BLKSIZ + ANDI W,770000 + JUMPE W,PLB; PROGRAMMER LABEL + CAIN W,500000; ABSOLUTE BLOCK + JRST ABSI; + CAIN W,310000; MADE LABEL + JRST MDLB; MADE LABEL + CAIN W,600000 + JRST GLOBDF + CAIN W,700000; DATA STATEMENT + JRST DATAS + JRST LOAD4A; DATA STATEMENTS WILL GO HERE + +TOPTAB: 0 ;TOP OF TABLES +CTAB: 0; COMMON +ATAB: 0; ARRAYS +STAB: 0; SCALARS +GSTAB: 0; GLOBAL SUBPROGS +AOTAB: 0; OFFSET ARRAYS +CCON: 0; CONSTANTS +PTEMP: 0; PERMANENT TEMPS +TTEMP: 0; TEMPORARY TEMPS +COMBAS: 0; BASE OF COMMON +LLC: 0; PROGRAM ORIGIN +BITP: 0; BIT POINTER +BITC: 0; BIT COUNT +PLTP: 0; PROGRAMMER LABEL TABLE +MLTP: 0; MADE LABEL TABLE +SDS: 0 ;START OF DATA STATEMENTS +SDSTP: 0 ;START OF DATA STATEMENTS POINTER +BLKSIZ: 0; BLOCK SIZE +MODIF: 0; ADDRESS MODIFICATION +1 +TTR50: XWD 136253,114765 ;RADIX 50 %TEMP. +PTR50: XWD 100450,614765 ;RADIX 50 TEMP. +CNR50: XWD 112320,235025 ;RADIX 50 CONST. + + ;ROUTINES TO PROCESS POINTERS + +PCONS: ADD C,CCON; GENERATE CONSTANT ADDRESS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PSTA: PUSHJ P,SWAPSY ;NON-COMMON SCALARS AND ARRAYS + ADDI C,(R); RELOCATE +PCOM1: PUSHJ P,SYDEF ;... +PCOMX: ADD C,MODIF ;ADDR RELOC FOR DP + HRRM C,@X; REPLACE ADDRESS +PASS2A: AOS V; STEP READOUT POINTER + CAML V,CCON ;END OF PROCESSABLES? +CPOPJ1: AOS (P); SKIP + POPJ P,; + +PAT: SKIPA W,ATAB ;ARRAY TABLE BASE +PST: MOVE W,STAB ;SCALAR TABLE BASE + ROT C,1 ;SCALE BY 2 + ADD C,W ;ADD IN TABLE BASE + ADDI C,-2(X); TABLE ENTRY + HLRZ W,(C); CHECK FOR COMMON + JUMPE W,PSTA; NO COMMON + PUSHJ P,COMDID ;PROCESS COMMON + JRST PCOM1 + +COMDID: LSH W,1 ;PROCESS COMMON TABLE ENTRIES + ADD W,CTAB; COMMON TAG + ADDI W,-2(X); OFFSET + PUSHJ P,SWAPSY; GET SYMBOL AND SET TO DEFINED + ADD C,1(W); BASE OF COMMON + POPJ P, ;RETURN + +PATO: ROT C,1 + ADD C,AOTAB; ARRAY OFFSET + ADDI C,-2(X); LOADER OFFSET + MOVEM C,CT1; SAVE CURRENT POINTER + HRRZ C,1(C); PICK UP REFERENCE POINTER + ANDI C,7777; MASK TO ADDRESS + ROT C,1; ALWAYS A ARRAY + ADDI C,-2(X) + ADD C,ATAB + HLRZ W,(C); COMMON CHECK + JUMPE W,NCO + PUSHJ P,COMDID ;PROCESS COMMON + PUSHJ P,SYDEF + MOVE C,CT1 + HRRE C,(C) + ADD C,1(W) + JRST PCOMX + + NCO: PUSHJ P,SWAPSY; + ADDI C,(R) ;DEFINE SYMBOL IN TRUE LOC + PUSHJ P,SYDEF ;... + MOVE C,CT1 + HRRZ C,(C) ;OFFSET ADDRESS PICKUP + ADDI C,(R) ;WHERE IT WILL BE + JRST PCOMX ;STASH ADDR AWAY + +PTT: ADD C,TTEMP; TEMPORARY TEMPS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PPT: ADD C,PTEMP; PERMANENT TEMPS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PGS: ADD C,GSTAB; GLOBSUBS + ADDI C,-1(X); OFFSET + MOVE C,(C) + TLC C,640000; MAKE A REQUEST + PUSHJ P,TBLCHK ;CHECK FOR OVERLAP + MOVEI W,(V); THIS LOC + HLRM W,@X; ZERO RIGHT HALF + PUSHJ P,SYMXX + JRST PASS2A + +SYDEF: TLNE N,SYDAT ;SYMBOL WANTS DEFININITION? + POPJ P, ;NO, GO AWAY + PUSH P,C ;SAVE THE WORLD + PUSH P,W + PUSHJ P,TBLCHK ;CHECK FOR OVERLAP + MOVE W,C + SKIPE C,T ;PICKUP VALUE + PUSHJ P,SYMXX + POP P,W + POP P,C + POPJ P,; + +PMLT: ADD C,MLTP + SKIPA +PPLT: ADD C,PLTP + HRRZ C,(C) + JRST PCOMX + +SYMXX: PUSH P,V + PUSHJ P,SYMPT + POP P,V + POPJ P,; + +SWAPSY: MOVEI T,0; SET TO EXCHANGE DEFS + EXCH T,1(C); GET NAME + HRRZ C,(C) ;GET VALUE + POPJ P, +TBLCHK: HRRZ W,MLTP ;GETT TOP OV TABLES + SUBI W,2 + CAMG W,TOPTAB ;WILL IT OVERLAP +IFE EXPAND,<TLO F,FULLSW> +IFN EXPAND,< JRST [PUSHJ P,XPAND + TLOA F,FULLSW + JRST TBLCHK + JRST .+1]> + POPJ P, + + ;END OF PASS2 + +ALLOVE: TLZ N,F4SW ;END OF F4 PROG + TLNE F,FULLSW!SKIPSW + JRST HIGH3 + HRR R,COMBAS ;TOP OF THE DATA + HRR V,R ;IS THIS THE HIGHEST LOC YET? + CAIG H,@X ;... + MOVEI H,@X ;YES, TELL THE WORLD + CAMG H,SDS ;HIGHEST LOC GREATER THAN DATA STATEMENTS? + JRST HIGH3 ;NO, RETURN + ADDI H,1(S) ;YES, SET UP MEANINGFUL ERROR COMMENT + SUB H,SDS ;... + TLO F,FULLSW ;INDICATE OVERFLO + JRST HIGH3 ;RETURN + +DATAS: TLNE F,FULLSW+SKIPSW + JRST DAX + MOVEI C,(S) ;ADDR OF WORD UNDER SYMBOL TABLE + MOVN W,BLKSIZ ;HOW FAR DOWN TO BLT + ADDM W,PLTP ;UPDATE TABLE POINTERS + ADDM W,BITP ;... + ADDM W,SDSTP ;... + ADD C,W ;RH(C):= WHEN TO STOP BLT + HRL C,MLTP ;SOURCE OF BLTED DATA + ADD W,MLTP ;UPDATE, GET DESTINATION OF BLT DATA +IFN EXPAND,< HRRZS W ;GET RID OF LEFT HALF + CAIG W,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADDI W,2000 + ADD C,[XWD 2000,2000] + JRST POPJM2]> + HRRM W,MLTP ;NO SET THIS SO EXTRA CORE NOT ZEROED + HLL W,C ;FORM BLT POINTER + BLT W,-1(C) ;MOVE TABLES DOWN (BUT NOT JRST ALLOVE) + PUSHJ P,BITWX+1 +DAX: PUSHJ P,WORD; READ ONE WORD + TLNN F,FULLSW+SKIPSW + MOVEM W,(C) + SOSLE BLKSIZ ;COUNT OF DATA SEQUENCE SIZE + AOJA C,DAX ;INCREMENT DATA SEQUENCE DEPOSIT LOC + JRST TEXTR; DONE + + FBLKD: TLOE N,BLKD1 ;IS THIS FIRST BLOCK DATA? + JRST ENDTP ;NO + HRR V,COMBAS ;PLACE PROG BREAK IN RH FOR + HRRM V,JOBCHN(X) ;CHAIN +ENDTP: TLNE F,FULLSW+SKIPSW + JRST ALLOVE + HRR V,GSTAB +ENDTP0: CAML V,STAB; ANY MORE GLOBSUBS + JRST ENDTP2; NO + MOVE C,@X; GET SUBPROG NAME + PUSHJ P,SREQ; IS IT ALLREADY REQUESTED + AOJA V,ENDTP0; YES + PUSHJ P,SDEF; OR DEFINED + AOJA V,ENDTP0; YES + PUSHJ P,TBLCHK + MOVEI W,0 ;PREPARE DUMMY LINK + TLNN F,FULLSW+SKIPSW; ABORT + PUSHJ P,SYM3X; PUT IN DUMMY REQUEST + PUSHJ P,BITWX+1; OVERLAP CHECK + AOJA V,ENDTP0 +ENDTP2: SETZM PT1 + HRR V,SDSTP +IFN EXPAND,< SUBI V,(X) + CAMG V,COMBAS + JRST [PUSHJ P,XPAND + TLOA F,FULLSW + JRST .-3 + JRST .+1] + HRR V,SDSTP> + HRRZM V,SDS ;DATA STATEMENT LOC +ENDTP1: SUBI V,(X); COMPENSATE FOR OFFSET + MOVE W,@X; GET WORD + TLNE W,-1; NO LEFT HALF IMPLIES COUNT + JRST DODON; DATA DONE + ADD W,[MOVEI W,3] + ADDI W,@X + EXCH W,@X + AOS V + ADD W,@X; ITEMS COUNT + MOVEM W,ITC + MOVE W,[MOVEM W,LTC] + MOVEM W,@X; SETUP FOR DATA EXECUTION + AOS V + MOVE W,[MOVEI W,0] + EXCH W,@X + MOVEM W,ENC; END COUNT + AOS V + MOVEI W,@X + ADDM W,ITC +LOOP: MOVE W,@X + HLRZ T,W; LEFT HALF INST. + ANDI T,777000 + CAIN T,254000 ;JRST? + JRST WRAP ;END OF DATA + CAIN T,260000 ;PUSHJ? + JRST PJTABL(W) ;DISPATCH VIA TABLE + CAIN T,200000; MOVE? + AOJA V,INNER + CAIN T,270000; ADD? + JRST ADDOP + CAIN T,221000; IMULI? + AOJA V,LOOP + CAIE T,220000; IMUL? + JRST LOAD4A; NOTA +INNER: HRRZ T,@X; GET ADDRESS + TRZE T,770000; ZERO TAG? + SOJA T,CONPOL; NO, CONSTANT POOL + SUB T,PT1; SUBTRACT INDUCTION NUMBER + ASH T,1 + SOS T; FORM INDUCTION POINTER + HRRM T,@X + HLRZ T,@X + ADDI T,P + HRLM T,@X + AOJA V,LOOP + + CONPOL: ADD T,ITC; CONSTANT BASE + HRRM T,@X + AOJA V,LOOP + +ADDOP: HRRZ T,@X + TRZE T,770000 + SOJA T,CONPOL +SKIPIN: AOJA V,LOOP + +PJTABL: JRST DWFS ;PUSHJ 17,0 + AOSA PT1 ;INCREMENT DO COUNT + SOSA PT1; DECREMENT DO COUNT + SKIPA W,[EXP DOINT.] + MOVEI W,DOEND. + HRRM W,@X + AOJA V,SKIPIN ;SKIP A WORD + +DWFS: MOVEI W,DWFS. + HRRM W,@X + AOS V + TLO N,SYDAT + PUSHJ P,PROC; PROCESS THE TAG + JRST LOAD4A ;DATA STATEMENT BELOW CODE TOP + JRST LOOP ;PROPER RETURN + +DOINT.: POP P,V; GET ADDRESS OF INITIAL VALUE + PUSH P,(V); STORE INDUCTION VARIABLE + AOS V + PUSH P,V; INITIAL ADDRESS + JRST (V) + +DOEND.: HLRZ T,@(P) + ADDM T,-2(P); INCREMENT + HRRZ T,@(P); GET FINAL VALUE + CAMGE T,-2(P); END CHECK + JRST DODONE; WRAP IT UP + POP P,(P); BACK UP POINTER + JRST @(P) + + DODONE: POP P,-1(P); BACK UP ADDRESS + POP P,-1(P) + JRST CPOPJ1 ;RETURN + +WRAP: MOVE W,ENC; NUMBER OF CONSTANTS + ADD W,ITC; CONSTANT BASE + MOVEI C,(W); CHAIN + HRRM C,@X + MOVEI V,(W); READY TO GO + JRST ENDTP1 + +DODON: TLZ N,RCF!SYDAT!DZER ;DATA STATEMENT FLAGS + MOVE W,PTEMP ;TOP OF PROG + ADDI W,(X) ;+OFFSET + MOVE C,COMBAS ;TOP OF DATA + ADDI C,(X) ;+OFFSET +SECZER: CAML W,C ;ANY DATA TO ZERO? + JRST @SDS ;NO, DO DATA STATEMENTS + CAML W,SDS ;IS DATA BELOW DATA STATEMENTS? + TLO F,FULLSW ;NO, INDICATE OVERFLO + TLNN F,FULLSW+SKIPSW ;SHOULD WE ZERO? + SETZM (W) ;YES, DO SO + TLON N,DZER ;GO BACK FOR MORE? + AOJA W,SECZER ;YES, PLEASE + CAMLE C,SDS ;ALL DATA BELOW DATA STATEMENTS? + MOVE C,SDS ;ALL ZEROED DATA MUST BE + HRLI W,-1(W) ;SET UP BLT POINTER TO ZERO DATA + TLNN F,FULLSW+SKIPSW ;SHOULD WE ZERO? + BLT W,-1(C) ;YES, DO SO + JRST @SDS ;GO DO DATA STATEMENTS + + DREAD: TLNE N,RCF; NEW REPEAT COUNT NEEDED + JRST FETCH; NO + MOVE W,LTC + MOVEM W,LTCTEM + MOVE W,@LTC; GET A WORD + HLRZM W,RCNT; SET REPEAT COUNT + HRRZM W,WCNT; SET WORD COUNT + POP W,(W); SUBTRACT ONE FROM BOTH HALFS + HLLM W,@LTC; DECREMENT REPEAT COUNT + AOS W,LTC; STEP READOUT + TLO N,RCF +FETCH: MOVE W,@LTC + AOS LTC + SOSE WCNT + POPJ P,; + SOSN RCNT + JRST DOFF. + MOVE V,LTCTEM; RESTORE READOUT + MOVEM V,LTC +DOFF.: TLZ N,RCF; RESET DATA REPEAT FLAG + POPJ P,; + +DWFS.: MOVE T,(P) + AOS (P) + MOVE T,(T); GET ADDRESS + HLRZM T,DWCT; DATA WORD COUNT + HRRES T + ADD T,W; OFFSET + ADDI T,(X); LOADER OFFSET +DWFS.1: PUSHJ P,DREAD ;GET A DATA WORD + CAML T,SDS ;BELOW BEGINNING OF DATA STATEMENTS + TLO F,FULLSW ;YES, INDICATE OVERFLO + TLNN F,FULLSW+SKIPSW ;LOAD THE NEXT DATA ITEM? + MOVEM W,(T) ;YES, STORE IT + AOS T + SOSE W,DWCT; STEP DOWN AND TEST + JRST DWFS.1 ;ONE MORE TIME, MOZART BABY! + POPJ P,; + + + ;LITERAL TABLE + +LITS: LIT + VAR +CT1: 0 ;TEMP FOR C +LTC: 0 +ITC: 0 +ENC: 0 +WCNT: 0 ;DATA WORD COUNT +RCNT: 0 ;DATA REPEAT COUNT + +LTCTEM: 0 ;TEMP FOR LTC +DWCT: 0 ;DATA WORD COUNT +LDEND: END LD + diff --git a/src/loader.52 b/src/loader.52 new file mode 100644 index 0000000..2f8528d --- /dev/null +++ b/src/loader.52 @@ -0,0 +1,5251 @@ + SUBTTL RP GRUEN/NGP/WFW/DMN V.052 7-SEP-70 +; RFS 11-30-70 +; TURNED ON FAILSW,SAILSW FOR NIH USAGE. +; DCS 1-24-71 +; ADDITIONS FOR SAIL (SHARED EXECS, UPDATED STANSW) + +; REG 7-17-71 +; TURN ON REENT FEATURES + + VLOADER==52 + VPATCH==0 ;DEC PATCH LEVEL + VCUSTOM==<SIXBIT / SG1/> ;NON-DEC PATCH LEVEL + ;SAISEG VERSION 1 + + LOC <JOBVER==137> + XWD VCUSTOM,VLOADER+1000*VPATCH + RELOC + +COMMENT * ASSEMBLY FEATURE SWITCHES (ACTION WHEN NON-ZERO) + + SWITCHES ON (NON-ZERO) IN DEC VERSION +SEG2SW GIVES TWO SEGMENT CODE (IF MACRO ALLOWS IT) +PURESW GIVES PURE CODE (VARIABLES IN LOW SEG) +REENT GIVES REENTRANT CAPABILITY PDP-10 + (REENT=0 FOR PDP-10/30 OR PDP-6 OR EARLY PDP-10) +RPGSW INCLUDE CCL FEATURE +TEMP INCLUDE TMPCOR FEATURE +DMNSW SYMBOL TABLE WILL BE MOVED DOWN FROM TOP OF CORE +KUTSW GIVES CORE CUTBACK ON /K +EXPAND FOR AUTOMATIC CORE EXPANSION +PP ALLOW PROJ-PROG # +DIDAL GIVES DIRECT ACCESS LIBRARY SEARCH MODE +ALGSW WILL LOAD ALGOL OWN BLOCK (TYPE 15) + + SWITCHES OFF (ZERO) IN DEC VERSION +K GIVES 1KLOADER - NO F4 +L FOR LISP LOADER +SPMON GIVES SPMON LOADER (MONITOR LOADER) +TEN30 FOR 10/30 LOADER +STANSW GIVES STANFORD FEATURES +LNSSW GIVES LNS VERSION +FAILSW INCLUDE PROVISIONS FOR SPECIAL FAIL FIXUPS. +LDAC MEANS LOAD CODE INTO ACS + (LDAC DOES NOT WORK WITH KUTSW=1.CORE UUO CLEARS JOBBLT) +WFWSW GIVES BLOCK TYPE 13 (VARIABLS INTO LOW SEG) +SYMARG ACCEPT SYMBOLIC (GLOBAL) ARGUMENTS FOR SWITCHES +SPCHN WILL DO SPECIAL OVERLAYING +SAILSW GIVES BLOCK TYPE 15 (FORCE LOAD OF REL FILES) + AND 16 (FORCE SEARCH OF LIBRARIES) FOR SAIL +* + +COMMENT/ +AT STANFORD WE USE + STANSW, SAILSW, FAILSW, AND REENT ALL ON + ALGSW, PURESW AND SEG2SW ALL OFF +/ + STANSW==0 + SAILSW==0 + FAILSW==0 + REENT==1 + ALGSW==0 + PURESW==0 + SEG2SW==0 + + + SUBTTL DEFAULT ASSEMBLY SWITCH SETTINGS + +IFNDEF SPMON,<SPMON=0> +IFN SPMON,< TEN30==1 + K==1> + +IFNDEF L,<L=0> + +IFNDEF TEN30,<TEN30=0> + +IFN TEN30!L,< RPGSW=0 + PP=0 +IFNDEF DMNSW,< DMNSW=0> +DIDAL==1 +IFNDEF DIDAL,< DIDAL=0> + ALGSW=0 + PURESW=0 + REENT=0 + LDAC=0 + KUTSW=0 + SEG2SW=0 + NAMESW=0> +IFN TEN30,< EXPAND=0> + +IFNDEF K,<K=0> + +STANSW==0 +IFNDEF STANSW,<STANSW=0> +IFN STANSW,< + FAILSW=1 + TEMP==0 + REENT==1> + +IFNDEF LNSSW,<LNSSW=0> +IFN LNSSW,<LDAC=1 + PP=0> + +FAILSW==1 +IFNDEF FAILSW,<FAILSW=0> + +IFNDEF RPGSW,<RPGSW==1> +IFN RPGSW,<PP==1> ;REQUIRE DISK FOR CCL +IFE RPGSW,<TEMP=0> + +IFNDEF PP,<PP==1> +IFN L,<PP==1> + +IFNDEF TEMP,<TEMP==1> + +IFNDEF NAMESW,<NAMESW==1> + +IFNDEF LDAC,<LDAC=0> +IFN LDAC,<KUTSW=0> + +IFNDEF KUTSW,<KUTSW==1> + +IFNDEF EXPAND,< IFN K,<EXPAND==0> + IFE K,<EXPAND==1>> + +IFNDEF DMNSW,<DMNSW==1> +IFN DMNSW!LDAC,<IFNDEF SYMPAT,<SYMPAT==20> + IFN LDAC,<IFG 20-SYMPAT,<SYMPAT==20>>> + +IFNDEF REENT,<REENT==1> +IFE REENT,<PURESW=0 + SEG2SW=0> +IFG STANSW,<SEG2SW==0 + PURESW==0> + +IFDEF TWOSEG,<IFNDEF SEG2SW,<SEG2SW==1>> +IFNDEF SEG2SW,<SEG2SW==0> +IFN SEG2SW,<PURESW==1> + +IFNDEF PURESW,<PURESW==1> + +IFNDEF WFWSW,<WFWSW==0> + +IFN K,<SYMARG=0 + SPCHN=0> + +IFNDEF SYMARG,<SYMARG==0> + +IFNDEF SPCHN,<SPCHN==0> + +IFNDEF DIDAL,<DIDAL==1> + +IFNDEF ALGSW,<ALGSW==0> + +SAILSW==1 +IFNDEF SAILSW,<SAILSW==0> + + + SUBTTL ACCUMULATOR ASSIGNMENTS + F=0 ;FLAGS IN BOTH HALVES OF F + N=1 ;FLAGS IN LH, PROGRAM NAME POINTER IN RH + X=2 ;LOADER OFFSET + H=3 ;HIGHEST LOC LOADED + S=4 ;UNDEFINED POINTER + R=5 ;RELOCATION CONSTANT + B=6 ;SYMBOL TABLE POINTER + D=7 + T=10 + V=T+1 + W=12 ;VALUE + C=W+1 ;SYMBOL + E=C+1 ;DATA WORD COUNTER + Q=15 ;RELOCATION BITS + A=Q+1 ;SYMBOL SEARCH POINTER + P=17 ;PUSHDOWN POINTER + + +;MONITOR LOCATIONS IN THE USER AREA + +JOBDA==140 +JOBHDA==10 + +EXTERN JOBDDT,JOBFF,JOBSA,JOBREL,JOBSYM,JOBUSY,JOB41 +IFN REENT,< EXTERN JOBHRL,JOBCOR> +IFE K,<EXTERN JOBCHN ;RH = PROG BREAK OF FIRST BLOCK DATA + ;LH = PROG BREAK OF FIRST F4 PROG> +IFN RPGSW,< EXTERN JOBERR> +IFN LDAC,< EXTERN JOBBLT> +IFN FAILSW,< EXTERN JOBAPR> + +NEGOFF==400 ;NEGATIVE OFFSET OF HIGH SEGMENT + + +IFN FAILSW,<;LENGTH OF PUSHDOWN LIST FOR POLISH FIXUPS +PPDL==60> + + + ;FLAGS F(0 - 17) + CSW==1 ;ON - COLON SEEN + ESW==2 ;ON - EXPLICIT EXTENSION IDENT. + SKIPSW==4 ;ON - DO NOT LOAD THIS PROGRAM + FSW==10 ;ON - SCAN FORCED TO COMPLETION + FCONSW==20 ;ON - FORCE CONSOLE OUTPUT +IFN REENT,<HIPROG==40 ;LOADING HI PROGRAM, SET BY HISEG. CLEARED BY EOF> + ASW==100 ;ON - LEFT ARROW ILLEGAL + FULLSW==200 ;ON - STORAGE EXCEEDED + SLIBSW==400 ;ON - LIB SEARCH IN THIS PROG + RMSMSW==1000 ;REMEMBER IF LOADING WITH SYMBOLS DURING LIB SEARCH + REWSW==2000 ;ON - REWIND AFTER INIT + LIBSW==4000 ;ON - LIBRARY SEARCH MODE + NAMSSW==10000 ;NAME BLOCK HAS BEEN SEEN FOR THIS PROG + ISW==20000 ;ON - DO NOT PERFORM INIT + SYMSW==40000 ;ON - LOAD LOCAL SYMBOLS + DSW==100000 ;ON - CHAR IN IDENTIFIER + NSW==200000 ;ON - SUPPRESS LIBRARY SEARCH + SSW==400000 ;ON - SWITCH MODE + + +;FLAGS N(0 - 17) + ALLFLG==1 ;ON - LIST ALL GLOBALS + ISAFLG==2 ;ON - IGNORE STARTING ADDRESSES + COMFLG==4 ;ON - SIZE OF COMMON SET +IFE K,< F4SW==10 ;F4 IN PROGRESS + RCF==20 ;READ DATA COUNT + SYDAT==40; SYMBOL IN DATA> + SLASH==100 ;SLASH SEEN +IFE K,< BLKD1==200 ;ON- FIRST BLOCK DATA SEEN + PGM1==400 ;ON FIRST F4 PROG SEEN + DZER==1000 ;ON - ZERO SECOND DATA WORD> + EXEQSW==2000 ;IMMEDIATE EXECUTION + DDSW==4000 ;GO TO DDT +IFN RPGSW,<RPGF==10000 ;IN RPG MODE> + AUXSWI==20000 ;ON - AUX. DEVICE INITIALIZED + AUXSWE==40000 ;ON - AUX. DEVICE ENTERED +IFN PP,<PPSW==100000 ;ON - READING PROJ-PROG #> +IFN PP!SPCHN,<PPCSW==200000 ;ON - READING PROJ #> +IFN FAILSW,<HSW==400000 ;USED IN BLOCK 11 POLISH FIXUPS> + + + +;MORE FLAGS IN F (18-35) +IFN REENT,< +SEENHI==1 ;HAVE SEEN HI STUFF +NOHI==2 ;LOAD AS NON-REENTRANT> +IFN RPGSW,<NOTTTY==4 ;DEV "TTY" IS NOT A TTY> +NOHI6==10 ;PDP-6 TYPE SYSTEM +IFN DMNSW,<HISYM==20 ;BLT SYMBOLS INTO HIGH SEGMENT> +SEGFL==40 ;LOAD INTO HI-SEG> +IFN DIDAL,<XFLG==100 ;INDEX IN CORE (BLOCK TYPE 14) +LSTLOD==200 ;LAST PROG WAS LOADED +DTAFLG==400 ;LIBRARY DEVICE IS A DTA (NEEDED FOR INDEXING)> +IFN DMNSW,<DMNFLG==1000> ;SYMBOL TABLE TO BE MOVED DOWN +IFN REENT,<VFLG==2000 ;DO LIB SEARCH OF IMP40.REL BEFORE LIB40> +IFN SYMARG,<ARGFL==4000 ;TREAT $%. AS RADIX-50 CHAR.> +TWOFL==10000 ;TWO SEGMENTS IN THIS BINARY FILE +LOCAFL==20000 ;PRINT LOCAL SYMBOLS IN MAP +TTYFL==40000 ;AUX. DEV. IS TTY + + +IFE K,<F4FL==400000 ;FORTRAN SEEN> +COBFL==200000 ;COBOL SEEN +IFN ALGSW,<ALGFL==100000 ;ALGOL SEEN> + +DEFINE ERROR (X,Y)< +JSP A,ERRPT'X +SIXBIT Y> + + + + IFE K,< TITLE LOADER - LOADS MACRO AND FORTRAN FOUR> +IFN K,< TITLE 1KLOAD - LOADS MACRO> + +IFN PURESW,< +IFE SEG2SW,<HISEG> +IFN SEG2SW,<TWOSEGMENTS + RELOC 400000>> + + + +IFN SPCHN,< +DSKBLK==200 ;LENGTH OF DISK BLOCKS +VECLEN==↑D25 ;LENGTH OF VECTOR TABLE FOR OVERLAYS> + +IFN SAILSW,< +RELLEN==↑D20 ;#NUMBER OF REL FILES OR LIBRARIES (MUST BE SAME)> + +;CALLI DEFINITIONS + +OPDEF RESET [CALLI 0] +OPDEF SETDDT [CALLI 2] +OPDEF DDTOUT [CALLI 3] +OPDEF DEVCHR [CALLI 4] +OPDEF CORE [CALLI 11] +OPDEF EXIT [CALLI 12] +OPDEF UTPCLR [CALLI 13] +OPDEF DATE [CALLI 14] +OPDEF MSTIME [CALLI 23] +OPDEF PJOB [CALLI 30] +OPDEF SETUWP [CALLI 36] +OPDEF REMAP [CALLI 37] +OPDEF GETSEG [CALLI 40] +IFE STANSW,< +OPDEF SETNAM [CALLI 43] +> +IFN STANSW,< +OPDEF SETNAM [CALLI 400002] +> +OPDEF TMPCOR [CALLI 44] + + + MLON +IFDEF SALL,< SALL> + + + SUBTTL CCL INITIALIZATION +IFN RPGSW,< +BEG: JRST LD ;NORMAL INITIALIZATION +RPGSET: RESET ;RESET UUO. +IFN TEMP,<MOVEI F,CTLBUF-1 ;USE CCL BUFFER FOR COMMANDS + HRRM F,CTLIN+1 ;DUMMY UP BYTE POINTER + HRLI F,-200 ;MAKE IT AN IOWD + MOVEM F,TMPFIL+1 + MOVSI F,(SIXBIT /LOA/) + MOVEM F,TMPFIL + MOVE N,[XWD 2,TMPFIL] ;POINTER FOR TMPCOR READ + TMPCOR N, ;READ AND DELETE LOA FILE + JRST RPGTMP ;NO SUCH FILE IN CORE, TRY DISK + IMULI N,5 ;GET CHAR COUNT + ADDI N,1 + MOVEM N,CTLIN+2 ;STORE IN BUFFER HEADER + MOVEI N,700 ;BYTE POINTER FOR LOA FILE + HRLM N,CTLIN+1 ;BYTE POINTER NOW COMPLETE + SETOM TMPFLG ;MARK THAT A TMPCOR READ WAS DONE + SETZM NONLOD ;NOT YET STARTED SCAN + JRST RPGS3C ;GET BACK IN MAIN STREAM +RPGTMP: SETZM TMPFLG ;MARK AS NOT TMP> + INIT 17,1 ;SET UP DSK FOR COMMAND FILE INPUT. + SIXBIT /DSK/ + XWD 0,CTLIN + JRST NUTS ;CAN'T INIT, GET INPUT FROM TTY. + MOVEI F,3 +IFE STANSW,< + PJOB N, ;GET JOB NUMBER +LUP: IDIVI N,12 ;STRIP OFF LAST DIGIT + ADDI N+1,"0"-40 ;CONVERT TO SIXBIT + LSHC N+1,-6 ;SAVE + SOJG F,LUP ;3 DIGITS YET? + HLLZ N+2 ;YES. + HRRI (SIXBIT /LOA/) ;LOADER NAME PART OF FILE NAME. + MOVEM CTLNAM + MOVSI (SIXBIT /TMP/) ;AND EXTENSION. + MOVEM CTLNAM+1 +> +IFN STANSW,< + MOVE N,[SIXBIT /QQLOAD/] + MOVEM N,CTLNAM + MOVSI N,(SIXBIT /RPG/) + MOVEM N,CTLNAM+1 +> + SETZM CTLNAM+3 + LOOKUP 17,CTLNAM ;FILE THERE? + JRST NUTS ;NO. + INIT 16,1 ;GET SET TO DELETE FILE + SIXBIT /DSK/ + 0 + JRST RPGS3A ;GIVE UP + SETZM CTLNAM+3 ;PUT STUFF BACK AS IT WAS + LOOKUP 16,CTLNAM + JRST RPGS3B + SETZM CTLNAM ;SET FOR RENAME +IFN STANSW,< + SETZM CTLNAM+3 ;RENAME SHOULD REQUIRE THIS ANYWAY? +> + RENAME 16,CTLNAM + JFCL ;IGNORE FAILURE +RPGS3B: RELEASE 16, ;GET RID OF DEVICE +RPGS3A: SETZM NONLOD ;TO INDICATE WE HAVE NOT YET STARTED TO SCAN + ;COMMAND IN FILE. + + + RPGS3: MOVEI CTLBUF + MOVEM JOBFF + INBUF 17,1 ;SET UP BUFFER. +RPGS3C: TTCALL 3,[ASCIZ /LOADING/] ;PRINT MESSAGE THAT WE ARE STARTING. + SKIPE NONLOD ;CONTIUATION OF COMMAND? + JRST RPGS2 ;YES, SPECIAL SETUP. +CCLCHN: MOVSI N,RPGF ;@ CHAIN FILES CYCLE FROM HERE + JRST CTLSET ;SET UP TTY + +RPGS1: PUSHJ P,[TLNE F,ESW ;HERE FROM FOO@ COMMAND, STORE NAME. + JRST LDDT3 ;SAVE EXTENSION. + TLZE F,CSW!DSW ;AS NAME + MOVEM W,DTIN ;STORE AS NAME + SETZM W,DTIN1 ;TRY BLANK EXTENSION FIRST. + JRST LDDT4] + MOVEM 0,SVRPG ;SAVE 0 JUST IN CASE + SETZM NONLOD ;DETERMINE IF CONTINUATION. + MOVEI 0,2(B) ;BY SEEING IF ANY SYMBOLS LOADED. + CAME 0,JOBREL + SETOM NONLOD ;SET TO -1 AND SKIP CALLI +IFN TEMP,<SETZM TMPFLG> + MOVE 0,ILD1 + MOVEM 0,RPG1 + OPEN 17,OPEN1 ;KEEP IT PURE + JRST [MOVE W,RPG1 + JRST ILD5] + LOOKUP 17,DTIN ;THE FILE NAME. + JRST [MOVE 0,SVRPG ;RESTORE AC0=F + TLOE F,ESW ;WAS EXT EXPLICIT? + JRST ILD9 ;YES, DON'T TRY AGAIN. + MOVEM 0,SVRPG ;SAVE AC0 AGAIN + MOVSI 0,(SIXBIT /TMP/) ;TRY TMP INSTEAD + MOVEM 0,DTIN1 + PUSHJ P,LDDT4 ;SET UP PPN + JRST .-1] ;TRY AGAIN + JRST RPGS3 + +RPGS2: MOVSI 0,RPGF ;SET FLAG + IORM 0,F.C+N + TLO N,RPGF + MOVE 0,SVRPG + JRST LD2Q ;BACK TO INPUT SCANNING. + +> + + + + SUBTTL NORMAL INITIALIZATION + +LD: IFE RPGSW,<BEG:> +IFN L,< HRRZM 0,LSPXIT + MOVEI 0,0 + HRRZM R,RINITL + RESET> +IFE L,<IFN RPGSW,< + HLLZS JOBERR ;MAKE SURE ITS CLEAR.> + RESET ;INITIALIZE THIS JOB +NUTS: SETZ N, ;CLEAR N +CTLSET: SETZB F,S ;CLEAR THESE AS WELL + HLRZ X,JOBSA ;TOP OF LOADER + HRLI X,V ;PUT IN INDEX + HRRZI H,JOBDA(X) ;PROGRAM BREAK + MOVE R,[XWD W,JOBDA] ;INITIAL RELOCATION> + MOVSI E,(SIXBIT /TTY/) + DEVCHR E, + TLNN E,10 ;IS IT A REAL TTY? +IFN RPGSW,<JRST [TLNN F,RPGF ;IN CCL MODE?> + EXIT ;NO, EXIT IF NOT TTY +IFN RPGSW,< TRO F,NOTTTY ;SET FLAG + JRST LD1] ;SKIP INIT> + INIT 3,1 ;INITIALIZE CONSOLE + SIXBIT /TTY/ + XWD BUFO,BUFI +CALLEX: EXIT ;DEVICE ERROR, FATAL TO JOB + MOVEI E,TTY1 + MOVEM E,JOBFF + INBUF 3,1 + OUTBUF 3,1 ;INITIALIZE OUTPUT BUFFERS + OUTPUT 3, ;DO INITIAL REDUNDANT OUTPUT +LD1: +IFE L,< HRRZ B,JOBREL ;MUST BE JOBREL FOR LOADING REENTRANT> +IFN L,< MOVE B,JOBSYM ;USED INSTEAD OF JOBREL FOR SYMBOL TABLE FIXUPS> + HRRZM B,HISTRT + SUB B,SE3 ;INITIALIZE SYMBOL TABLE POINTER + CAILE H,1(B) ;TEST CORE ALLOCATION> + JRST [HRRZ B,JOBREL;TOP OF CORE + ADDI B,2000 ;1K MORE + CORE B, ;TRY TO GET IT + EXIT ;INSUFFICIENT CORE, FATAL TO JOB + JRST LD1] ;TRY AGAIN +IFN EXPAND,< IFE STANSW ,<SETZ S, + CORE S, ;GET PERMITTED CORE + JFCL + LSH S,12 + SUBI S,1 ;CONVERT TO NUMBER OF WORDS + MOVEM S,ALWCOR ;SAVE IT FOR XPAND TEST>> +IFN STANSW,< + MOVEI S,-1 ;THERE IS ALWAYS CORE AT STANFORD!! + MOVEM S,ALWCOR > + +IFN PURESW,<MOVE S,[XWD HICODE,LOWCOD] + BLT S,LOWCOD+CODLN-1> +IFE L,< MOVS E,X ;SET UP BLT POINTER + HRRI E,1(X)> +IFN L,<MOVS E,H + HRRI E,1(H)> + SETZM -1(E) ;ZERO FIRST WORD + BLT E,(B) ;ZERO CORE UP TO THE SYMBOL AREA + HRRZ S,B ;INITIALIZE UNDEF. POINTER + HRR N,B ;INITIALIZE PROGRAM NAME POINTER +IFE L,< HRRI R,JOBDA ;INITIALIZE THE LOAD ORIGIN + MOVE E,COMM ;SET .COMM. AS THE FIRST PROGRAM + MOVEM E,1(B) ;STORE IN SYMBOL TABLE + HRRZM R,2(B) ;STORE COMMON ORIGIN> + MOVEI E,F.C ;INITIALIZE STATE OF THE LOADER + BLT E,B.C + SETZM MDG ;MULTIPLY DEFINED GLOBAL COUNT + SETZM STADDR ;CLEAR STARTING ADDRESS +IFN REENT,<MOVSI W,1 + MOVEM W,HVAL1 + MOVEM W,HVAL + MOVEM X,LOWX + SETZM HILOW + MOVEM R,LOWR + HRRZI W,1 +IFE STANSW,< SETUWP W, ;SETUWP UUO. + TRO F,NOHI6 ;PDP-6 COMES HERE.> + MOVEM F,F.C ;PDP-10 COMES HERE.> +IFE L,< IFN STANSW,< TRO F,DMNFLG ;ASSUME /B IS SAID... + MOVEM F,F.C ;AND SAVE>> +IFN SAILSW,<MOVE W,[XWD -RELLEN-1,LIBFLS-1] ;SET UP POINTERS + MOVEM W,LIBPNT# ;IN THE FORM OF AOBJN WORDS + MOVE W,[XWD -RELLEN-1,PRGFLS-1] + MOVEM W,PRGPNT#> +IFE L,< MOVSI W,254200 ;STORE HALT IN JOB41 + MOVEM W,JOB41(X) ;...> +IFN L,< MOVE W,JOBREL + HRRZM W,OLDJR> +IFN SPCHN,<SETZM CHNACB ;USED AS DEV INITED FLAG TOO> +IFN NAMESW,<SETZM CURNAM> +IFN FAILSW,<MOVEI W,440000 ;SET UP THE SPECIAL BITS OF HEADNUM(ADD+POLISH) + MOVEM W,HEADNM + SETZM POLSW ;SWITCH SAYS WE ARE DOING POLISH + MOVEI W,PDLOV ;ENABLE FOR PDL OV + MOVEM W,JOBAPR + MOVEI W,200000 + CALLI W,16 + SETZM LINKTB ;ZERO OUT TABLE OF LINKS + + + MOVE W,[XWD LINKTB,LINKTB+1] + BLT W,LINKTB+20> +IFN DMNSW,<MOVEI W,SYMPAT + MOVEM W,KORSP> +IFN KUTSW,< IFE STANSW,<SETOM CORSZ>> +IFN KUTSW,< IFN STANSW,<SETZM CORSZ>> ;ASSUME /K FOR KIDS... + + + IFN RPGSW,<JRST LD2Q> +LD2: IFN RPGSW,<MOVSI B,RPGF ;HERE ON ERRORS, TURN OFF RPG + ANDCAM B,F.C+N ;IN CORE> +;LOADER SCAN FOR FILE NAMES + +LD2Q: MOVSI B,F.C ;RESTORE ACCUMULATORS + BLT B,B + MOVE P,PDLPT ;INITIALIZE PUSHDOWN LIST + SETZM BUFI2 ;CLEAR INPUT BUFFER POINTER +IFE PP,< SETZM ILD1 ;CLEAR INPUT DEVICE NAME> +IFN PP,< MOVSI T,(SIXBIT /DSK/) ;ASSUME DSK. + MOVEM T,ILD1 + SETZM OLDDEV ;TO MAKE IT GO BACK AFTER /D FOR LIBSR> + SETZM DTIN ;CLEAR INPUT FILE NAME + +LD2B: RELEAS 1, ;RELEASE BINARY INPUT DEVICE +IFN RPGSW,< TLNE N,RPGF ;NOT IF DOING CCL STUFF + JRST LD2BA> + MOVEI T,"*" + IDPB T,BUFO1 ;OUTPUT ASTERISK TO START INPUT + OUTPUT 3, +LD2BA: TLZ F,FULLSW+ASW+ISW+CSW+ESW+SKIPSW+SLIBSW+REWSW +LD2BP: TLNE F,LIBSW ;WAS LIBRARY MODE ON? + TLO F,SKIPSW ;YES, NORMAL MODE IS SKIPPING + +LD2D: IFN PP,<SETZM PPN ;DON'T REMEMBER PPN FROM ONE FILE TO NEXT. +LD2DB: SKIPE W,OLDDEV ;RESET DEVICE IF NEEDED. + CAMN W,ILD1 ;IS IT SAME? + JRST LD2DA ;YES, FORGET IT. + TLZ F,ISW+DSW+FSW+REWSW + MOVEM W,ILD1> +LD2DA: MOVEI W,0 ;INITIALIZE IDENTIFIER SCAN + MOVEI E,6 ;INITIALIZE CHARACTER COUNTER + MOVE V,LSTPT ;INITIALIZE BYTE POINTER TO W + TLZ F,SSW+DSW+FSW ;LEAVE SWITCH MODE +LD3: IFN RPGSW,<TLNE N,RPGF ;CHECK RPG FEATURE + JRST RPGRD> + SOSG BUFI2 ;DECREMENT CHARACTER COUNTER + INPUT 3, ;FILL TTY BUFFER + ILDB T,BUFI1 ;LOAD T WITH NEXT CHARACTER +LD3AA: CAIN T,175 ;OLD ALTMOD + MOVEI T,33 ;NEW ONE + CAIL T,140 ;LOWER CASE? + TRZ T,40 ;CONVERT TO UPPER CASE + MOVE Q,T + HRLM Q,LIMBO ;SAVE THIS CHAR. + MOVSS LIMBO ;AND LAST ONE + IDIVI Q,11 ;TRANSLATE TO 4 BIT CODE + LDB Q,LD8(A) ;LOAD CLASSIFICATION CODE + CAIGE Q,4 ;MODIFY CODE IF .GE. 4 + TLNN F,SSW ;MODIFY CODE IF SWITCH MODE OFF + ADDI Q,4 ;MODIFY CLASS. CODE FOR DISPATCH +IFN SYMARG,<CAIL Q,20 ;SKIP UNLESS SECOND FORM OF DISPATCH + JRST LD3AB ;DIFFERENT DISPATCH> + HRRZ A,LD3A(Q) ;LOAD RH DISPATCH ENTRY + CAIL Q,10 ;SKIP IF CORRECT DISPATCH ENTRY + HLRZ A,LD3A-10(Q) ;LOAD LH DISPATCH ENTRY + JRST @A ;JUMP TO INDICATED LOCATION + +;COMMAND DISPATCH TABLE + +LD3A: XWD LD3,LD7B ;IGNORED CHAR, BAD CHAR (SWITCH) + XWD LD6A,LD6 ;</> OR <(>, LETTER (SWITCH) + XWD LD5,LD6C ;<:>, DIGIT (SWITCH ARG.) + XWD LD5A,LD6D ;<.>, ESCAPE SWITCH MODE <)> + XWD LD5C,LD7 ;<=> OR <L. ARROW>, BAD CHAR. + XWD LD5B,LD4 ;<,>, ALPHABETIC CHAR. + XWD LD5D,LD4 ;<CR.>, NUMERIC CHAR. + XWD LD5E1,LD7 ;<ALT MODE>, BAD CHAR. <)> +IFN SYMARG,<XWD LD7,LD10 ;BAD CHAR,&> + +IFN RPGSW,< +RPGRD1: MOVNI T,5 + ADDM T,CTLIN+2 + AOS CTLIN+1 +RPGRD: SOSG CTLIN+2 ;CHECK CHARACTER COUNT. + JRST [IFN TEMP,<SKIPE TMPFLG ;TMPCOR UUO READ DONE? + JRST LD2 ;YES, JUST LEAVE> + IN 17,0 + JRST .+1 + STATO 17,740000 + JRST LD2 + JSP A,ERRPT + SIXBIT /ERROR WHILE READING COMMAND FILE%/ + JRST LD2] + IBP CTLIN+1 ;ADVANCE POINTER + + + MOVE T,@CTLIN+1 ;AND CHECK FOR LINE # + + + TRNE T,1 + JRST RPGRD1 + LDB T,CTLIN+1 ;GET CHR + JRST LD3AA ;PASS IT ON> +IFN SYMARG,< +LD3AB: ROT Q,-1 ;CUT Q IN HALF + HRRZ A,LD3A(Q) ;PULL OFF RIGHT HALF OF TABLE ENTRY + JUMPGE Q,@A ;WHICH IS CORRECT FOR EVEN ENTRIES + HLRZ A,LD3A(Q) ;BUT USE LEFT HALF FOR ODD ENTRIES + JRST @A> + + + SUBTTL CHARACTER HANDLING + +;ALPHANUMERIC CHARACTER, NORMAL MODE +LD4: SOJL E,LD3 ;JUMP IF NO SPACE FOR CHAR IN W + CAIGE T,141 ;WORRY ABOUT LOWER CASE LETTERS + SUBI T,40 ;CONVERT FROM ASCII TO SIXBIT + IDPB T,V ;DEPOSIT CHAR OF IDENTIFIER IN W + TLO F,DSW ;SET IDENTIFIER FLAG + JRST LD3 ;RETURN FOR NEXT CHARACTER + +;DEVICE IDENTIFIER DELIMITER <:> + +LD5: PUSH P,W ;SAVE W + TLOE F,CSW ;TEST AND SET COLON FLAG + PUSHJ P,LDF ;FORCE LOADING + POP P,W ;RESTORE W + TLNE F,ESW ;TEST SYNTAX + JRST LD7A ;ERROR, MISSING COMMA ASSUMED + JUMPE W,LD2D ;JUMP IF NULL DEVICE IDENTIFIER + MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER +IFN PP,<MOVEM W,OLDDEV ;WE HAVE A NEW ONE, DO IGNORE OLD.> + TLZ F,ISW+DSW+FSW+REWSW ;CLEAR OLD DEVICE FLAGS + JRST LD2D ;RETURN FOR NEXT IDENTIFIER + +;FILE NAME EXTENSION IDENTIFIER DELIMITER <.> +LD5A: IFN SYMARG,< + TRNE F,ARGFL ;IS "." SPECIAL + JRST LD4 ;YES,RADIX-50> + TLOE F,ESW ;TEST AND SET EXTENSION FLAG + JRST LD7A ;ERROR, TOO MANY PERIODS + TLZE F,CSW+DSW ;SKIP IF NULL IDENT AND NO COLON + MOVEM W,DTIN ;STORE FILE IDENTIFIER + JRST LD2D ;RETURN FOR NEXT IDENTIFIER + +;INPUT SPECIFICATION DELIMITER <,> +LD5B: +IFN PP,<TLZE N,PPCSW ;READING PP #? + JRST [ +IFE STANSW,< HRLM D,PPN ;STORE PROJ # + JRST LD6A1 ];GET PROG #> +IFN STANSW,< PUSHJ P,RJUST ;RIGHT JUSTIFY W + HRLM W,PPN ;STORE PROJ NAME + JRST LD2DB ];GET PROG NAME> + PUSHJ P,RBRA ;CHECK FOR MISSING RBRA> + SETOM LIMBO ;USED TO INDICATE COMMA SEEN + TLZN F,FSW ;SKIP IF PREV. FORCED LOADING + PUSHJ P,FSCN2 ;LOAD (FSW NOT SET) + JRST LD2BP ;RETURN FOR NEXT IDENTIFIER + +LD5B1: TLNE F,ESW ;TEST EXTENSION FLAG + JRST LDDT3 ;EXPLICIT EXTENSION IDENTIFIER + TLZN F,CSW+DSW ;SKIP IF IDENT. OR COLON + POPJ P, + MOVEM W,DTIN ;STORE FILE IDENTIFIER + JRST LDDT2 ;ASSUME <.REL> IN DEFAULT CASE + + + ;OUTPUT SPECIFICATION DELIMITER <=> OR <LEFT ARROW> +;OR PROJ-PROG # BRACKETS <[> AND <]> + +LD5C: +IFN SPCHN,<CAIN T,"=" ;DO A /= AS SWITCH + TLNN F,SSW + SKIPA + JRST LD6> +IFN RPGSW,<CAIN T,"@" ;CHECK FOR * COMMAND. + JRST RPGS1> +IFN PP,<CAIN T,"[" ;PROJ-PROG #? + JRST [TLO N,PPSW+PPCSW ;SET FLAGS + MOVEM W,PPNW ;SAVE W + MOVEM E,PPNE ;SAVE E + MOVEM V,PPNV ;SAVE V +IFE STANSW,< JRST LD6A2]> ;READ NUMBERS AS SWITCHES +IFN STANSW,< JRST LD2DB]> + CAIN T,"]" ;END OF PP #? + JRST [PUSHJ P,RBRA ;PROCESS RIGHT BRACKET + JRST LD3] ;READ NEXT IDENT> + TLOE F,ASW ;TEST AND SET LEFT ARROW FLAG + JRST LD7A ;ERROR, MISPLACED LEFT ARROW + PUSHJ P,LD5B1 ;STORE IDENTIFIER + TLZN F,ESW ;TEST EXTENSION FLAG + MOVSI W,554160 ;ASSUME <.MAP> IN DEFAULT CASE + MOVEM W,DTOUT1 ;STORE FILE EXTENSION IDENTIFIER + MOVE W,DTIN ;LOAD INPUT FILE IDENTIFIER + MOVEM W,DTOUT ;USE AS OUTPUT FILE IDENTIFIER +IFN SPCHN,<MOVEM W,CHNENT ;AND FOR SPECAIL CHAINING> +IFN PP,<MOVE W,PPN ;PROJ-PROG # + MOVEM W,DTOUT+3 ;...> + MOVE W,ILD1 ;LOAD INPUT DEVICE IDENTIFIER + MOVEM W,LD5C1 ;USE AS OUTPUT DEVICE IDENTIFIER +IFN PP,<SKIPE W,OLDDEV ;RESTORE OLD + MOVEM W,ILD1> +;INITIALIZE AUXILIARY OUTPUT DEVICE + TRZ F,TTYFL + TLZE N,AUXSWI+AUXSWE ;FLUSH CURRENT DEVICE + RELEASE 2, ;... + DEVCHR W, ;IS DEVICE A TTY? + TLNE W,10 ;... + JRST [TRO F,TTYFL ;TTY IS AUX. DEV. + JRST LD2D] ;YES, SKIP INIT + OPEN 2,OPEN2 ;KEEP IT PURE + JRST ILD5A + TLNE F,REWSW ;REWIND REQUESTED? + UTPCLR 2, ;DECTAPE REWIND + TLZE F,REWSW ;SKIP IF NO REWIND REQUESTED + MTAPE 2,1 ;REWIND THE AUX DEV + MOVEI E,AUX ;SET BUFFER ORIGIN + MOVEM E,JOBFF + OUTBUF 2,1 ;INITIALIZE SINGLE BUFFER + TLO N,AUXSWI ;SET INITIALIZED FLAG +IFN LNSSW,<EXCH E,JOBFF + SUBI E,AUX + IDIV C,E + OUTBUF 2,(C)> + JRST LD2D ;RETURN TO CONTINUE SCAN + + + + ;RIGHT SQUARE BRACKET (PROJ-PROG NUMBERS) +IFN PP,< +RBRA: TLZN N,PPSW ;READING PP #? + POPJ P, ;NOPE, RETURN + TLZE N,PPCSW ;COMMA SEEN? + JRST LD7A ;NOPE, INDICATE ERROR +IFE STANSW,<HRRM D,PPN ;STASH PROG NUMBER + TLZ F,SSW ;AND TURN OFF SWITCH MODE> +IFN STANSW,<PUSHJ P,RJUST ;RIGHT JUSTIFY W + HRRM W,PPN ;STASH PROG NAME> + MOVE W,PPNW ;PICKUP OLD IDENT + MOVE E,PPNE ;RESTORE CHAR COUNT + MOVE V,PPNV ;RESTORE BYTE PNTR + POPJ P, ;TRA 1,4 + +;RIGHT JUSTIFY W + +IFN STANSW,< +RJUST: JUMPE W,LD7A ;NOTHING TO RIGHT JUSTIFY + TRNE W,77 ;IS W RJUSTED YET? + POPJ P, ;YES, TRA 1,4 + LSH W,-6 ;NOPE, TRY AGAIN + JRST .-3 ;...>> + +IFN SYMARG,< +;& SELECTS A SYMBOL RATHER THAN ANUMBER FOR A SWITCH ARGUMENT +;& MUST ALSO FOLLOW THW SYMBOL; THE FORM IS /&SYMBOL&SWITHCH +LD10: TRC F,ARGFL ;SET OR CLEAR SPECIAL CHARS. + TLCE F,SSW ;IF IN SWITCH MODE, EXIT TO GET IDENTIFIER + JRST LD10B + PUSHJ P,ASCR50 ;IF NOT, REENTER IT, CONVERT IDENTIFIER TO R50 + PUSHJ P,SDEF ;AND SEE IF IT EXISTS + JRST LD10A ;YES IT DOES + PUSHJ P,PRQ ;NO, COMPLAIN. OUTPUT ? + PUSHJ P,SPACE ;FOLLOWED BY A SPACE + PUSHJ P,PRNAME ;FOLLOWED BY THIS SYMBOL + ERROR 0,</ DOESN'T EXIST@/> + JRST LD2 +LD10A: MOVE D,2(A) ;SET D=VALUE OF SYMBOL AS NUMERIC ARG + TLZ F,DSW!FSW + MOVEI E,6 ;INITIALIZE NEW IDENTIFIER SCAN + MOVE V,LSTPT ;(W IS ALREADY 0) + JRST LD3 ;NOW EAT SWITCH AND CONTINUE PROCESSING COMMAND +LD10B: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION TO MAKE SURE FILE IS LOADED + JRST LD2DA> + + + + IFN SYMARG,< +;CONVERT SYMBOL IN W TO RADIX-50 IN C +;ALSO USES A +ASCR50: MOVEI A,0 +R50A: MOVEI C,0 + ROTC W,6 ;C IS NEXT SIXBIT CHAR + CAIGE C,20 + JRST R50B ;UNDER 20, MAY BE ., $, OR % + CAILE C,31 + JRST R50C ;OVER 31 + SUBI C,20-1 ;IS NUMBER +R50D: IMULI A,50 + ADD A,C + JUMPN W,R50A ;LOOP FOR ALL CHARS + MOVE C,A ;WIND UP WITH CHAR IN C + TLO C,040000 ;MAKE IT GLOBAL DEFINITION + POPJ P, +R50B: JUMPE C,R50D ;OK IF SPACE + CAIE C,16 ;TEST IF . + JRST .+3 ;NO + MOVEI C,45 ;YES + JRST R50D + CAIE C,4 ;SKIP IF $ +R50E: MOVEI C,5 ;ASSUME % IF NOTHING ELSE + ADDI C,42 + JRST R50D +R50C: CAIGE C,41 + JRST R50E ;BETWEEN 31 AND 41 + CAILE C,72 + JRST R50E ;OVER 72 + SUBI C,41-13 ;IS LETTER + JRST R50D> + +;DEFINE PUTS A SYMBOL IN THE UNDEFINED SYMBOL TABLE +;SO LOADER CAN SCAN LIBRARY AND LOAD PROGRAMS BEFORE THEY ARE REQUESTED +;THE FORM IS /&SYMBOL# WHERE SYMBOL IS CONVERTED TO RADIX-50 +IFN SYMARG,< +DEFINE: PUSHJ P,ASCR50 ;CONVRT TO R-50 + MOVEI W,-2(S) ;WHERE SYMBOL WILL GO + CAIG W,(H) ;ENOUGH ROOM +IFN EXPAND,<PUSHJ P,[PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM3 + POPJ P,]> +IFE EXPAND,<TLO F,FULLSW> + SUB S,SE3 ;ADJUST POINTER + MOVEM C,1(S) ;R-50 SYMBOL + SETZM 2(S) ;VALUE + TLZ F,DSW!SSW ;TURN OFF SWITCHES + JRST LD2D ;CONTINUE TO SCAN +> + + + SUBTTL TERMINATION +;LINE TERMINATION <CARRIAGE RETURN> + +LD5D: +IFN PP,<PUSHJ P,RBRA ;CHECK FOR UNTERMINATED PP #> + SKIPGE LIMBO ;WAS LAST CHAR. BEFORE CR A COMMA? + TLO F,DSW ;YES ,SO LOAD ONE MORE FILE + PUSHJ P,FSCN ;FORCE SCAN TO COMPLETION + JRST LD2B ;RETURN FOR NEXT LINE + +;TERMINATE LOADING <ALT MODE> + +LD5E: JUMPE D,LD5E1 ;ENTER FROM G COMMAND + TLO N,ISAFLG ;AND IGNORE ANY STARTING ADDRESS TO COME + HRRZM D,STADDR ;USE NUMERIC STARTING ADDRESS +LD5E1: PUSHJ P,CRLF ;START A NEW LINE +IFN RPGSW,<RELEASE 17,0 ;RELEASE COMMAND DEVICE> + PUSHJ P,SASYM ;SETUP JOBSA,JOBFF,JOBSYM,JOBUSY + MOVE W,[SIXBIT ?LOADER?] ;FINAL MESSAGE + PUSHJ P,BLTSET ;SETUP FOR FINAL BLT + RELEASE 2, ;RELEASE AUX. DEV. + RELEASE 1,0 ;INPUT DEVICE + RELEASE 3,0 ;TTY +IFN SPCHN,<RELEASE 4,0 ;SPECIAL CHAINING CHANEL> +IFN NAMESW,<HRRZ W,HISTRT ;IN CASE NO NAME SET, USE FIRST LOADED + MOVE W,-1(W) + SKIPN CURNAM + PUSHJ P,LDNAM + SKIPE W,CURNAM + CAMN W,[SIXBIT /MAIN/] ;FORTRAN MAIN PROG, OR MACRO NO TITLE + SKIPE W,PRGNAM ;USE BINARY FILE NAME IN EITHER CASE + SETNAM W, ;SETNAME> +IFN L,<JRST @LSPXIT> + + + IFE L,< ;NONE OF THIS NEEDED FOR LISP +IFN PURESW,< + MOVE V,[XWD HHIGO,HIGO] + BLT V,HIGONE ;MOVE DOWN CODE TO EXIT> + TLNN N,EXEQSW ;DO WE WANT TO START + JRST LD5E3 +IFN RPGSW,<TLNN N,RPGF ;IF IN RPG MODE + JRST LD5E2 + HRRZ C,JOBERR ;CHECK FOR ERRORS + JUMPE C,LD5E2 ;NONE +EXDLTD: TTCALL 3,[ASCIZ /?EXECUTION DELETED +/] + JRST LD5E3> +LD5E2: HRRZ W,JOBSA(X) + TLNE N,DDSW ;SHOULD WE START DDT?? + HRRZ W,JOBDDT(X) +IFN RPGSW,< TLNE N,RPGF ;IF IN RPG MODE + JUMPE W,[TTCALL 3,[ASCIZ /?NO STARTING ADDRESS +/] + JRST EXDLTD]> + JUMPE W,LD5E3 ;ANYTHING THERE? + TLOA W,(JRST) ;SET UP A JRST +LD5E3: SKIPA W,CALLEX ;NO OR NO EXECUTE, SET CALLI 12 + TTCALL 3,[ASCIZ /EXECUTION +/] +IFN LDAC,< HRLZ P,BOTACS ;SET UP FOR ACBLT + MOVEM W,JOBBLT+1(X) ;SET JOBBLT + MOVE W,[BLT P,P] + MOVEM W,JOBBLT(X)> + MOVSI LSTAC,LODACS ;SET UP TO BLT BLT CODE INTO ACS + BLT LSTAC,LSTAC +IFN KUTSW,<SKIPGE E,CORSZ ;DO WE WANT CORE ADJUST + MOVE CORAC,JFCLAC ;NO, CLEAR COREUUO> +IFE LDAC,<MOVE LSTAC,W ;SET END CONDITION> +IFN REENT,< + MOVSI V,LD ;DOES IT HAVE HISEG + JUMPG V,HINOGO ;NO,DON'T DO CORE UUO + MOVSI V,1 ;SET HISEG CORE NONE ZERO + JRST HIGO ;AND GO> +IFE REENT,<JRST 0> + +LODACS: PHASE 0 + BLT Q,(A) ;BLT CODE DOWN +IFN KUTSW,<CORAC: CORE E, ;CUT BACK CORE +JFCLAC: JFCL ;SHOULD NEVER HAVE AN ERROR SINCE REDUCING CORE> +LSTAC: IFN LDAC,<JRST JOBBLT> +IFE LDAC,<EXIT> +DEPHASE +> ;;;;END OF IFE L AT BEGINNING OF THIS PAGE + + + SUBTTL PRINT FINAL MESSAGE +; SET UP BLT AC'S, SETDDT, RELEAS + +BLTSET: IFN RPGSW,<IFE K,< + JUMPE W,.+4 ;NO MESSAGE FROM CHAIN IN CCL@>> + PUSHJ P,FCRLF ;A RETURN + PUSHJ P,PWORD ;AND CHAIN OR LOADER + PUSHJ P,SPACE +IFN FAILSW,<MOVSI Q,-20 ;FINISH UP LINK STUFF +FREND: HLRZ V,LINKTB+1(Q) + JUMPE V,NOEND + HRRZ A,LINKTB+1(Q) +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> +IFN L,<CAML V,RINITL> + HRRM A,@X ;PUT END OF LINK CHAIN IN PROPER PLACE +NOEND: AOBJN Q,FREND +IFN REENT,<MOVE X,LOWX ;RESET THINGS>> +IFN KUTSW,<SKIPGE C,CORSZ ;NEG MEANS DO NOT KUT BACK CORE + JRST NOCUT + JUMPE C,MINCUT ;0 IS KUT TO MIN. POSSIBLE + LSH C,12 ;GET AS A NUMBER OF WORDS + SUBI C,1 + CAMG C,JOBREL ;DO WE NEED MORE THAN WE HAVE?? + JRST TRYSML ;NO, SEE IF NUMBER REQUESTED IS TOO SMALL + MOVEI Q,0 + CORE Q, + JFCL ;WE JUST WANT TO KNOW HOW MUCH + HRRZS Q + CAMGE Q,CORSZ + JRST CORERR + JRST NOCUT1 ;SET FOR DO NOT CHANGE SIZE +TRYSML: CAIG C,(R) ;IS DESIRED AMOUNT BIGGER THAN NEEDED +MINCUT: HRRZ C,R ;GET MIN AMOUNT + IORI C,1777 ;CONVERT TO A 1K MULTIPLE +IFN DMNSW,< TRNN F,DMNFLG ;DID WE MOVE SYMBOLS?? + SKIPN JOBDDT(X) ;IF NOT IS DDT THERE?? + JRST .+2> +IFE DMNSW,<SKIPE JOBDDT(X) ;IF NO SYMBOL MOVING JUST CHECK DDT> + JRST NOCUT ;DO NOT CUT IF SYMBOLS AT TOP AND DDT +NOCUT1: MOVEM C,JOBREL(X) ;SAVE FOR CORE UUO + MOVEM C,CORSZ ;SAVE AWAY FOR LATER + JRST .+2 +NOCUT: SETOM CORSZ ;SET FOR NO CUT BACK> +IFN RPGSW,<IFE K,< + JUMPE W,NOMAX ;NO MESSAGE IF CHAIN IN CCL@>> +IFN L,<HRRZ Q,JOBREL + SUB Q,OLDJR ;PROPER SIZE> +IFE L,<HRRZ Q,JOBREL(X)> + LSH Q,-12 ;GET CORE SIZE TO PRINT + ADDI Q,1 + PUSHJ P,RCNUM +IFN REENT,<MOVE Q,HVAL + SUB Q,HVAL1 + HRRZS Q + JUMPE Q,NOHY ;NO HIGH SEGMENT + MOVEI T,"+"-40 ;THERE IS A HISEG + PUSHJ P,TYPE + LSH Q,-12 + ADDI Q,1 + PUSHJ P,RCNUM +NOHY:> + MOVE W,[SIXBIT /K CORE/] + PUSHJ P,PWORD + PUSHJ P,CRLF +IFE L,< +IFN RPGSW,<TLNE N,RPGF + JRST NOMAX ;DO NOT PRINT EXTRA JUNK IN RPG MODE> + MOVE Q,JOBREL + LSH Q,-12 + ADDI Q,1 + PUSHJ P,RCNUM ;PRINT MAX LOW CORE SIZE +IFN REENT,< SKIPE Q,JOBHRL ;GET SIZE OF HIGH SEGMENT + PUSHJ P,[MOVEI Q,400001(Q) ;CLEAR HIGH ORDER BIT + MOVEI T,"+"-40 ;PRINT A HIGH CORE PART + PUSHJ P,TYPE + LSH Q,-12 + JRST RCNUM]> + MOVE W,[SIXBIT /K MAX/] + PUSHJ P,PWORD +IFN DMNSW,<TRNN F,DMNFLG> + SKIPN JOBDDT(X) + SKIPA Q,JOBREL(X) + MOVEI Q,1(S) ;FIND THE AMOUNT OF SPACE LEFT OVER + SUB Q,JOBFF(X) + PUSHJ P,RCNUM + MOVE W,[SIXBIT / WORDS/] + PUSHJ P,PWORD + MOVE W,[SIXBIT / FREE/] + PUSHJ P,PWORD + PUSHJ P,CRLF > +NOMAX: MOVE W,JOBDDT(X) + SETDDT W, +IFE TEN30,<HRLI Q,20(X) ;SET UP BLT FOR CODE + HRRI Q,20> +IFN TEN30,<HRLI Q,JOBDDT(X) + HRRI Q,JOBDDT> + HRRZ A,R + POPJ P, ;WE HAVE SET R UP BY CLEVER CODE IN SASYM +IFN KUTSW,<CORERR: TTCALL 3,[ASCIZ /?NOT ENOUGH CORE +/] + EXIT> + + + SUBTTL SET UP JOBDAT +SASYM: TLNN F,NSW + PUSHJ P,LIBF ;SEARCH LIBRARY IF REQUIRED + PUSHJ P,FSCN ;FORCE END OF SCAN +IFN ALGSW,<MOVE C,[RADIX50 44,%OWN] + MOVE W,%OWN ;GET VALUE + TRNE F,ALGFL ;IF ALGOL PROG LOADED + PUSHJ P,SYMPT ;DEFINE %OWN> +IFN RPGSW,<HLRE A,S + MOVNS A + LSH A,-1 + ADD A,JOBERR + HRRM A,JOBERR> + PUSHJ P,PMS1 ;PRINT UNDEFS + HRRZ A,H ;DO NOT CLOBBER H IF STILL INSERTING SYMBOLS + SUBI A,(X) ;HIGHEST LOC LOADED INCLUDES LOC STMTS + CAILE A,(R) ;CHECK AGAINST R + HRR R,A ;AND USE LARGER +IFE L,< HRRZ A,STADDR ;GET STARTING ADDRESS + HRRM A,JOBSA(X) ;STORE STARTING ADDRESS + HRRZM R,JOBFF(X) ;AND CURRENT END OF PROG + HRLM R,JOBSA(X)> +IFN DMNSW,<MOVE C,[RADIX50 44,PAT..] ;MARK PATCH SPACE FOR RPG + MOVEI W,(R) + SKIPE JOBDDT(X) ;BUT ONLY IF DDT LOADED + PUSHJ P,SYMPT +IFN REENT,<TRNE F,HISYM ;SHOULD SYMBOLS GO IN HISEG? + JRST BLTSYM ;YES>> +IFN DMNSW!LDAC,< ;ONLY ASSEMBLE IF EITHER SET +IFE LDAC,< TRNN F,DMNFLG ;GET EXTRA SPACE IF SYMBOLS + JRST NODDT ;MOVED OR IF LOADING ACS> +IFE DMNSW,< MOVEI A,20 ;FOR LOADING ACS> +IFN DMNSW,< MOVE A,KORSP +IFN LDAC,< TRNN F,DMNFLG ;ONLY 20 IF SYMBOLS NOT MOVED + MOVEI A,20>> + ADDI A,(R) ;GET ACTUAL PLACE TO PUT END OF SPACE + ADDI A,(X) + CAIL A,(S) ;DO NOT OVERWRITE SYMBOLS +IFN EXPAND,<JRST [PUSHJ P,XPAND> + PUSHJ P,MORCOR +IFN EXPAND,< JRST .-1]> +IFN LDAC,<HRRM R,BOTACS ;SAVE BOTTOM OF WHERE WE PUT ACS + HRRZ A,R + ADDI A,(X) + HRL A,X ;SET UP BLT FROM (X) TO R(X) + MOVEI Q,17(A) + BLT A,(Q)>> +IFN DMNSW,<TRNN F,DMNFLG ;NOW THE CODE TO MOVE SYMBOLS + JRST NODDT + HRRZ A,R + ADD A,KORSP + MOVE W,A ;SAVE POINTER TO FINAL LOC OF UNDEFS + ADDI A,(X) + HLLZ Q,S ;COMPUTE LENGTH OF SYMBOL TABLE + ADD Q,B + HLROS Q + MOVNS Q + ADDI Q,-1(A) ;GET PLACE TO STOP BLT + HRLI A,1(S) ;WHERE TO BLT FROM + SUBI W,1(S) ;GET AMOUNT TO CHANGE S AND B BY + BLT A,(Q) ;MOVE SYMBOL TABLE + ADD S,W + ADD B,W ;CORRECT S AND B FOR MOVE + HRRI R,1(Q) ;SET R TO POINT TO END OF SYMBOLS + SUBI R,(X) + SKIPN JOBDDT(X) ;IS DDT LOADED + JRST NODDT ;ON THE CONTRARY, DO LEAVE SYMBOLS!!!!! + HRRM R,JOBFF(X) + HRLM R,JOBSA(X) ;AND SAVE AWAY NEW JOBFF +IFN LDAC,<SKIPA> ;SKIP THE ADD TO R +NODDT:> +IFN LDAC,<ADDI R,20> ;MAKE SURE R IS CORRECT FOR BLT + MOVE A,B + ADDI A,1 ;SET UP JOBSYM, JOBUSY +IFE L,<MOVEM A,JOBSYM(X)> +IFN L,<MOVEM A,JOBSYM> + MOVE A,S + ADDI A,1 +IFE L,<MOVEM A,JOBUSY(X) + MOVE A,HISTRT ;TAKE POSSIBLE REMAP INTO ACCOUNT + MOVEM A,JOBREL(X) ;SET UP FOR IMEDIATE EXECUTION> +IFN L,<MOVEM A,JOBUSY> +IFN REENT,< + SKIPE A,HILOW ;SET UP TOP LOC OF LOW CORE EXCLUDING BLOCKS + SUBI A,1(X) ;IF NON-ZERO THEN IT NEEDS RELOCATION + HRLM A,JOBCOR(X) + TRNN F,SEENHI + POPJ P, + HRRZ A,HVAL + HRRM A,JOBHRL(X) + SUB A,HVAL1 + HRLM A,JOBHRL(X)> + POPJ P, + + + + SUBTTL BLT SYMBOL TABLE INTO HIGH SEGMENT +IFN DMNSW&REENT,< +BLTSYM: MOVE Q,HVAL ;GET ORIGIN OF HISEG + CAMN Q,HVAL1 ;HAS IT CHANGED? + JRST NOBLT ;NO + HLLZ Q,S ;COMPUTE LENGTH OF SYMBOL TABLE + HLRS S ;PUT NEG COUNT IN BOTH HALVES + JUMPE S,.+2 ;SKIP IF S IS ZERO + HRLI S,-1(S) ;SUB 1 FROM LEFT TO FIX CARRY PROBLEM + ADD Q,B + HLROS Q + MOVNS Q + ADD Q,HVAL ;ADD LENGTH OF HISEG + SUB Q,HVAL1 ;BUT REMOVE ORIGIN + ADD Q,HISTRT ;START OF HISEG IN CORE + HRRZS Q ;CLEAR INDEX FROM Q + ADD Q,KORSP ;SAVE SPACE FOR SYMBOL PATCHES + CORE Q, ;EXPAND IF NEEDED + PUSHJ P,MORCOR + PUSH P,B ;SAVE B + SOJ B, ;REMOVE CARRY FROM ADD TO FOLLOW + MOVSS B ;SWAP SYMBOL POINTER + ADD B,JOBREL + HRRM B,(P) ;SAVE NEW B + MOVE Q,JOBREL + ADD B,S ;INCASE ANY UNDEFS. + BLT B,(Q) ;MOVE SYMBOLS + POP P,B ;GET NEW B + SUB B,HISTRT + ADD B,HVAL1 + SOJ B, ;REMOVE CARRY + ADDI S,(B) ;SET UP JOBUSY +BLTSY1: MOVE Q,JOBREL + SUB Q,HISTRT + ADD Q,HVAL1 + SUBI Q,1 ;ONE TOO HIGH + MOVEM Q,HVAL + JRST NODDT + + + + NOBLT: HRRZ Q,HILOW ;GET HIGHEST LOC LOADED + HRRZ A,S ;GET BOTTOM OF UNDF SYMBOLS + SUB A,KORSP ;DON'T FORGET PATCH SPACE + IORI A,1777 ;MAKE INTO A K BOUND + IORI Q,1777 + CAIN A,(Q) ;ARE THEY IN SAME K +IFN EXPAND,<JRST [PUSHJ P,XPAND> + PUSHJ P,MORCOR +IFN EXPAND,< JRST NOBLT]> + MOVEM Q,HISTRT ;SAVE AS START OF HIGH + MOVEI A,400000 ;HISEG ORIGIN + MOVEM A,HVAL1 ;SAVE AS ORIGIN + SUB S,HISTRT ;GET POSITION OF UNDF POINTER + ADDI S,377777 ;RELATIVE TO ORG + SUB B,HISTRT ;SAME FOR SYM POINTER + ADDI B,377777 + TRO F,SEENHI ;SO JOBHRL WILL BE SET UP + JRST BLTSY1 ;AND USE COMMON CODE +> + +IFN DMNSW!LDAC,< +MORCOR: ERROR ,</MORE CORE NEEDED#/> + EXIT> + + + SUBTTL WRITE CHAIN FILES + +IFE K,< ;DONT INCLUDE IN 1KLOAD +CHNC: SKIPA A,JOBCHN(X) ;CHAIN FROM BREAK OF FIRST BLOCK DATA +CHNR: HLR A,JOBCHN(X) ;CHAIN FROM BREAK OF FIRST F4 PROG +IFN ALGSW,<TRNE F,ALGFL ;IF ALGOL LOADING + POPJ P, ;JUST RETURN> + HRRZS A ;ONLY RIGHT HALF IS SIGNIFICANT + JUMPE A,LD7C ;DON'T CHAIN IF ZERO + TLNN N,AUXSWI ;IS THERE AN AUX DEV? + JRST LD7D ;NO, DON'T CHAIN + PUSH P,A ;SAVE WHEREFROM TO CHAIN + JUMPE D,.+2 ;STARTING ADDR SPECIFIED? + HRRZM D,STADDR ;USE IT + CLOSE 2, ;INSURE END OF MAP FILE + TLZ N,AUXSWI+AUXSWE ;INSURE NO PRINTED OUTPUT + PUSHJ P,SASYM ;DO LIB SEARCH, SETUP JOBSA, ETC. +IFN RPGSW,<TLNE N,RPGF ;IF IN CCL MODE + TDZA W,W ;NO MESSAGES> + MOVE W,[SIXBIT ?CHAIN?] ;FINAL MESSAGE + PUSHJ P,BLTSET ;SETUP BLT PNTR, SETDDT, RELEAS + POP P,A ;GET WHEREFROM + HRRZ W,R ;CALCULATE MIN IOWD NECESSARY + SKIPE JOBDDT(X) ;IF JOBDDT KEEP SYMBOLS + CAILE W,1(S) + JRST CHNLW1 + HRRZ W,JOBREL ;NEED SYMBOLS AND THEY HAVE NOT MOVED DOWN + SUBI W,(X) ;BECAUSE WE WILL NOT HAVE BLITTED + SUBI B,-1(X) ;SYMBOL TABLE WILL COME OUT IN A + MOVEM B,JOBSYM(X) ;DIFFERENT PLACE +CHNLW1: MOVNS W + ADDI W,-7(A) + ADDI A,-7(X) + PUSH A,W ;SAVE LENGTH + HRLI W,-1(A) + MOVSM W,IOWDPP ;... + SETZM IOWDPP+1 ;JUST IN CASE + PUSH A,JOBCHN(X) + PUSH A,JOBSA(X) ;SETUP SIX WORD TABLE + PUSH A,JOBSYM(X) ;... + PUSH A,JOB41(X) + PUSH A,JOBDDT(X) + SETSTS 2,17 ;SET AUX DEV TO DUMP MODE + MOVSI W,435056 ;USE .CHN AS EXTENSION + MOVEM W,DTOUT1 ;... + PUSHJ P,IAD2 ;DO THE ENTER + OUTPUT 2,IOWDPP ;WRITE THE CHAIN FILE + STATZ 2,IOBAD!IODEND + JRST LOSEBIG + CLOSE 2, + STATZ 2,IOBAD!IODEND +IFN RPGSW,<JRST LOSEBIG + TLNE N,RPGF ;IF IN CCL MODE + JRST CCLCHN ;LOAD NEXT LINK + EXIT> +LOSEBI: TTCALL 3,[ASCIZ /?DEVICE ERROR/] + EXIT> + + + SUBTTL SPECIAL CHAINB +IFE SPCHN,< XLIST > +IFN SPCHN,< +CHNBG: + PUSHJ P,FSCN1A ;FORCE SCAN TO COMPLETION FOR CURRENT FILE + TLNN N,AUXSWI ;IS THERE AN AUX DEV?? + JRST LD7D + HRLZI W,-1(R) ;CHNTAB-L = ADDRESS OF VECTOR TABLE + HRRI W,1 ;CHNTAB-R = NEXT DISK BLOCK TO RITE INTO + MOVEM W,CHNTAB + MOVE C,[RADIX50 4,OVTAB] ;DEFINE GLOBAL SYMBOL OVTAB + MOVEI W,(R) ;TO HAVE VALUE THE BEGINNING OF THE VECTOR TABLE + PUSHJ P,SYMPT + ADDI R,VECLEN ;RESERVE SPACE FOR VECTOR TABLE + MOVE C,[RADIX50 4,OVBEG] ;OVBEG IS BEGINNING OF OVERLAY AREA + MOVEI W,(R) + PUSHJ P,SYMPT + HRRZM R,BEGOV ;AND SAVE IN OVBEG + OPEN 4,CHNOUT ;OPEN FILE FOR CHAIN + JRST ILD5 ;CANT OPEN CHAIN FILE + ENTER 4,CHNENT ;ENTER CHAIN FILE + JRST IMD3 ;NO CAN DO + HRRZ W,N + SUB W,HISTRT ;KEEP N RIGHT HALF AS RELATIVE TO HISTRT + HRRZM W,CHNACN ;SAVE FOR RESTORING + MOVEM B,CHNACB ;ALSO B R IS SAVED IN BEGOV + POPJ P, + +CHNENS: TLOA N,PPCSW ;THIS FLAG UNUSED AT THIS POINT +CHNEN: TLZ N,PPCSW ;ON TO NOT DELETE NEW SYMBOLS + SKIPN CHNACB ;WILL BE NON-ZERO IF WE SAW A /< (> TO KEEP MACRO HAPPY) + JRST LD7D ;ERROR MESSAGE + PUSHJ P,FSCN1A ;LOAD LIB (IF DESIRED) AND FORCE SCAN + SKIPL Q,S ;CHECK SYMBOL TABLE FOR MISSED UNDEFS + JRST NOER ;NONE THERE + MOVEI E,0 ;COUNT OF ERRORS +ONCK: + IFN FAILSW,<SKIPL V,1(Q) ;IF HIGH ORDER BIT IS ON + TLNN V,740000 ;OR IF ALL CODE BITS 0 + JRST NXTCK ;THEN NOT TO BE CHECKED> + MOVE V,2(Q) ;GET FIXUP WORD + TLNE V,100000 ;BIT INDICATES SYMBOL TABLE FIXUP + JRST SMTBFX +IFN FAILSW,<TLNE V,40000 ;BIT INDICATES POLISH FIXUP + JRST POLCK> + TLZE V,740000 ;THESE BITS WOULD MEAN ADDITIVE + JRST [JSP A,CORCKL + JRST NXTCK] ;ONLY TRY FIRST LOCATION +CORCK: JSP A,CORCKL + HRRZ V,@X ;THE WAY TO LINK +CORCKL: IFN REENT,<CAMGE V,HVAL1> + CAMGE V,BEGOV + SKIPA ;NOT IN BAD RANGE + JRST ERCK ;BAD, GIVE ERROR + JUMPE V,NXTCK ;CHAIN HAS RUN OUT +IFN REENT,<CAMGE V,HVAL1 ;GET CORRECT LINK + SKIPA X,LOWX + MOVE X,HIGHX> + XCT (A) ;TELLS US WHAT TO DO + JRST CORCKL ;GO ON WITH NEXT LINK + + + SMTBFX: TLNE N,PPCSW ;IF NOT CUTTING BACK SYMBOL TABLE + JRST NXTCK ;THE ALL OK + ADD V,HISTRT ;GET PLACE TO POINT TO + HRRZS V + HLRE D,CHNACB ;OLD LENGTH OF TABLE (NEGATIVE) + HLRE T,B ;NEW LENGTH + SUB D,T ;-OLD LEN+NEW LEN + ADDI D,(B) ;OLD BOTTOM=NEW BOTTOM+NEW LEN-OLD LEN + CAIG V,(D) ;IS IT IN THE PART WE ARE KEEPING + JRST ERCK + JRST NXTCK ;YES +IFN FAILSW,<POLCK: HLRZ C,V ;FIND HEADER + PUSHJ P,SREQ + SKIPA + JRST LOAD4A ;SHOULD BE THERE + HRL C,2(A) ;NOW FIRST OPERATOR (STORE) + MOVSS C + PUSHJ P,SREQ + SKIPA + JRST LOAD4A + ANDI C,37 ;GET OPERATION + HRRZ V,2(A) ;DESTINATION + JRST @CKSMTB-15(C) ;DISPATCH +CKSMTB: EXP SMTBFX,SMTBFX,SMTBFX,CORCK,LCORCK,CORCK,NXTCK +LCORCK: JSP A,CORCKL + HLRZ V,@X> +ERCK: MOVE C,1(Q) ;GET SYMBOL NAME + PUSHJ P,FCRLF ;FORCE CRLF AND OUTPUT ON TTY + PUSHJ P,PRNAME ;PRINT IT + ADDI E,1 ;MARK ERROR +NXTCK: ADD Q,SE3 ;TRY ANOTHER + JUMPL Q,ONCK +IFN REENT,<PUSHJ P,RESTRX ;GET PROPER X BACK> + JUMPE E,NOER ;DID ANYTHING GO WRONG?? + ERROR ,</UNDEFINED GLOBAL(S) IN LINK@/> + JRST LD2 ;GIVE UP +NOER: MOVE A,BEGOV ;GET START OF OVERLAY + ADDI A,(X) ;GET ACTUAL CURRENT LOCATION +IFN REENT,<HRRZ W,HILOW ;AND END OF OVERLAY+1 + HRRZM A,HILOW ;RESET> +IFE REENT,<HRRZ W,R + ADDI R,(X) ;A GOOD GUESS> + SUBM A,W ;W=-LENGTH + SUBI A,1 ;SET TO BASE-1 (FOR IOWD) + HRL A,W ;GET COUNT + MOVEM A,IOWDPP + HRR A,CHNTAB ;BLOCK WE ARE WRITING ON + HLRZ V,CHNTAB ;POINTER TO SEGMENT TABLE + ADDI V,1 ;NEXT LOCATION + HRLM V,CHNTAB ;REMEMBER IT + CAML V,BEGOV ;CHECK FOR OVERRUN + JRST [ERROR </?TOO MANY LINKS@/> + JRST LD2];GIVE UP + MOVEM A,@X ;PUT INTO TABLE + MOVN W,W ;GET POSITIVE LENGTH + ADDI W,DSKBLK-1 + IDIVI W,DSKBLK ;GET NUMBER OF BLOCKS + ADDM W,CHNTAB ;AND UPDATE + TLZE N,PPCSW + JRST NOMVB ;DO NOT ADJUST SYMBOLS + HLRE W,CHNACB ;GET OLD LENGTH OF DEF SYMBOLS + HLRE C,B ;AND NEW LENGTH + SUB W,C ;-OLD LEN+NEW LEN + HRRZ C,B ;SAVE POINTER TO CURRENT S + ADD S,W + HRL W,W + ADD B,W ;UPDATE B (COUNT AND LOC) + JUMPGE S,UNLNKD ;JUST IN CASE NOTHING TO MOVE + HRRZ A,B ;PLACE TO PUT UNDEFS +UNLNK: MOVE W,(C) + MOVEM W,(A) ;TRANSFER + SUBI A,1 + CAIE A,(S) ;HAVE WE MOVED LAST WORD?? + SOJA C,UNLNK ;NO, CONTINUE +UNLNKD: HRRZ W,CHNACN ;GET SAVED N + ADD W,HISTRT + HRR N,W ;AND RESET IT +NOMVB: HRR R,BEGOV ;PICK UP BASE OF AREA + OUTPUT 4,IOWDPP ;DUMP IT + STATZ 4,IOBAD!IODEND ;AND ERROR CHECK + JRST LOSEBI + HRRZ V,R ;GET AREA TO ZERO + MOVEI W,@X + CAIL W,1(S) ;MUST MAKE SURE SOME THERE + POPJ P, ;DONE + SETZM (W) + CAIL W,(S) + POPJ P, + HRLS W + ADDI W,1 + BLT W,(S) ;ZERO WORLD + POPJ P, +> + LIST + + + SUBTTL EXPAND CORE + +IFN EXPAND,< +XPAND: TLNE F,FULLSW ;IF CORE EXCEEDED + POPJ P, ;DON'T WASTE TIME ON CORE UUO + PUSH P,Q + HRRZ Q,JOBREL + ADDI Q,2000 +XPAND1: PUSH P,H ;GET SOME REGISTERS TO USE + PUSH P,X + PUSH P,N + PUSH P,JOBREL ;SAVE PREVIOUS SIZE + CAMG Q,ALWCOR ;CHECK TO SEE IF RUNNING OVER + CORE Q, + JRST XPAND6 +IFE K,< HRRZ H,MLTP ;GET LOWEST LOCATION + TLNN N,F4SW ;IS FORTRAN LOADING> + MOVEI H,1(S) ;NO, USE S + POP P,X ;LAST JOBREL + HRRZ Q,JOBREL;NEW JOBREL + SUBI Q,(X) ;GET DIFFERENCE + HRLI Q,X ;PUT X IN INDEX FIELD +XPAND2: MOVE N,(X) + MOVEM N,@Q + CAMLE X,H ;TEST FOR END + SOJA X,XPAND2 + HRLI H,-1(Q) + TLC H,-1 ;MAKE IT NEGATIVE + SETZM (H) ;ZERO NEW CORE + AOBJN H,.-1 + MOVEI H,(Q) +XPAND8: ADD S,H + ADD B,H + ADDM H,HISTRT ;UPDATE START OF HISEG +IFN REENT,<ADDM H,HIGHX ;AND STORE LOCATION + TLNE F,HIPROG + ADDM H,-1(P) ;X IS CURRENTLY IN THE STACK> + POP P,N + ADD N,H +IFE K,< TLNN N,F4SW ;F4? + JRST XPAND3 + ADDM H,PLTP + ADDM H,BITP + ADDM H,SDSTP + ADDM H,MLTP + TLNE N,SYDAT + ADDM H,V> +XPAND3: AOSA -3(P) +XPAND5: POP P,N + POP P,X + POP P,H + POP P,Q + POPJ P, + + + +XPAND6: POP P,A ;CLEAR JOBREL OUT OF STACK + ERROR ,</MORE CORE NEEDED#/> + JRST XPAND5 + +XPAND7: PUSHJ P,XPAND + JRST SFULLC + JRST POPJM2 + +XPAND9: PUSH P,Q ;SAVE Q + HRRZ Q,JOBREL ;GET CORE SIZE + ADDI Q,(V) ;ADD XTRA NEEDED + JRST XPAND1 ;AND JOIN COMMON CODE + +POPJM3: SOS (P) ;POPJ TO CALL-2 +POPJM2: SOS (P) ;POPJ TO CALL-1 + SOS (P) ;SAME AS POPJ TO + POPJ P, ;NORMAL POPJ MINUS TWO +> + + + + SUBTTL SWITCH HANDLING + +;ENTER SWITCH MODE + +LD6A: CAIN T,57 ;WAS CHAR A SLASH? + TLO N,SLASH ;REMEBER THAT +LD6A2: TLO F,SSW ;ENTER SWITCH MODE +LD6A1: SETZB D,C ;ZERO TWO REGS FOR DECIMAL AND OCTAL + JRST LD3 ;EAT A SWITCH + +;ALPHABETIC CHARACTER, SWITCH MODE + +LD6: + CAIL T,141 ;ACCEPT LOWER CASE SWITCHES + SUBI T,40 +IFN SPCHN,<XCT LD6B-74(T) ;EXECUTE SWITCH FUNCTION> +IFE SPCHN,<XCT LD6B-101(T) ;EXECUTE SWITCH FUNCTION> + TLZE N,SLASH ;SWITCH MODE ENTERED W/ SLASH? + JRST LD6D ;LEAVE SWITCH MODE + JRST LD6A1 ;STAY IN SWITCH MODE + + + + ;DISPATCH TABLE FOR SWITCHES + +; THE INSTRUCTION AT THE CHARACTER LOCATION IS EXECUTED + +LD6B: +IFN SPCHN,<PUSHJ P,CHNBG ;LESS THAN - BEGINNING OF OVERLAY + PUSHJ P,CHNENS ;= - PUT OUT CHAIN RETAINING SYMBOLS + PUSHJ P,CHNEN ;GREATER THAN - END OF OVERLAY +IFE STANSW,<JRST LD7B ;? - ERROR + JRST LD7B ;@ - ERROR> +IFG STANSW,<PUSHJ P,VSWTCH ;? HERE = VSWITCH + PUSHJ P,HSET ;@ HERE = H SWITCH>> +COMMENT/ +AT STANFORD MAP SWITCHES ? TO V +AND @ TO H +WHAT A CROCK: REG/ + PUSHJ P,ASWTCH ;A - LIST ALL GLOBALS +IFN DMNSW,<PUSHJ P,DMN2 ;B - BLOCKS DOWN SYMBOL TABLE > +IFE DMNSW,<JRST LD7B ;B - ERROR> +IFE K,< PUSHJ P,CHNC ;C - CHAIN, START W/ COMMON> +IFN K,< JRST LD7B ;C - ILLEGAL IN 1KLOAD> + PUSHJ P,LDDT ;D - DEBUG OPTION, LOAD DDT + TLO N,EXEQSW ;E - LOAD AND GO + PUSHJ P,LIBF ;F - LIBRARY SEARCH + PUSHJ P,LD5E ;G - GO INTO EXECUTION +IFE STANSW,<IFN REENT,< PUSHJ P,HSET ;H - REENTRANT. PROGRAM> + IFE REENT,<JFCL ;NOT REENT AND NOT STANFORD>> +IFN STANSW,<PUSHJ P,LDDTQX ;H - LOAD AND START RAID> + PUSHJ P,ISWTCH ;I - IGNORE STARTING ADDRESSES + TLZ N,ISAFLG ;J - USE STARTING ADDRESSES +IFE KUTSW,<JRST LD7B ;K - ERROR> +IFN KUTSW,<MOVEM C,CORSZ ;K - SET DESIRED CORE SIZE> + PUSHJ P,LSWTCH ;L - ENTER LIBRARY SEARCH + PUSHJ P,PRMAP ;M - PRINT STORAGE MAP + TLZ F,LIBSW+SKIPSW ;N - LEAVE LIBRARY SEARCH + HRR R,D ;O - NEW PROGRAM ORIGIN + PUSHJ P,PSWTCH ;P - PREVENT AUTO. LIB. SEARCH + TLZ F,NSW ;Q - ALLOW AUTO. LIB. SEARCH +IFE K,< PUSHJ P,CHNR ;R - CHAIN, START W/ RESIDENT> +IFN K,< JRST LD7B ;R - ILLEGAL IN 1KLOAD> + PUSHJ P,SSWTCH ;S - LOAD WITH SYMBOLS + PUSHJ P,LDDTX ;T - LOAD AND GO TO DDT + PUSHJ P,PMS ;U - PRINT UNDEFINED LIST +IFE STANSW,<IFN REENT,<PUSHJ P,VSWTCH ;V - LOAD REENTRANT LIB40> + IFE REENT,<JRST LD7B ;V -NO REENT, NO STANFORD: ERROR>> +IFN STANSW,<PUSHJ P,LDDTQ ;V - LOAD RAID> + TLZ F,SYMSW+RMSMSW ;W - LOAD WITHOUT SYMBOLS + TLZ N,ALLFLG ;X - DO NOT LIST ALL GLOBALS +IFE SAILSW,< + TLO F,REWSW ;Y - REWIND BEFORE USE +> +IFN SAILSW,< + PUSHJ P,SEGLOD ;Y - LOAD SYS:SAILOW FOR 2-SGMT SAIL +> + JRST LDRSTR ;Z - RESTART LOADER + + + + ; PAIRED SWITCHES ( +,-) + +ASWTCH: JUMPL D,.+2 ;SKIP IF /-A + TLOA N,ALLFLG ;LIST ALL GLOBALS + TLZ N,ALLFLG ;DON'T + POPJ P, + +ISWTCH: JUMPL D,.+2 ;SKIP IF /-I + TLOA N,ISAFLG ;IGNORE STARTING ADDRESSES + TLZ N,ISAFLG ;DON'T + POPJ P, + +LSWTCH: JUMPL D,.+2 ;SKIP IF /-L + TLOA F,LIBSW!SKIPSW ;ENTER LIBRARY SEARCH + TLZ F,LIBSW!SKIPSW ;DON'T + POPJ P, + +PSWTCH: JUMPL D,.+2 ;SKIP IF /-P + TLOA F,NSW ;PREVENT AUTO. LIB SEARCH + TLZ F,NSW ;ALLOW + POPJ P, + +SSWTCH: JUMPL D,.+2 ;SKIP IF /-S + TLOA F,SYMSW!RMSMSW ;LOAD WITH SYMBOLS + TLZ F,SYMSW!RMSMSW ;DON'T + POPJ P, + +IFN REENT,< +VSWTCH: JUMPL D,.+2 ;SKIP IF /-V + TROA F,VFLG ;SEARCH RE-ENTRANT LIBRARY + TRZ F,VFLG ;DON'T + POPJ P,> + +IFN SAILSW,< +SEGLOD: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + HRRZ W,R ;CHECK LEGAL + CAILE W,140 ; (MUST BE NOTHING LOADED EARLIER) + JRST [ERROR ,<./Y MUST APPEAR BEFORE ANY FILES ARE LOADED`.> + JRST LD2] ;TRY AGAIN + MOVE W,[SIXBIT /SAILOW/] ;WILL LOAD SAILOW NOW + ADD W,D ;SAILOW, SAILOX, SAILOY, DEPENDING + ;ON ARG -- W FOR SAIL, X FOR OSAIL, Y FOR NSAIL + TLZ F,SYMSW!RMSMSW ;SET SWITCHES (SEE LDDT) + PUSHJ P,LDDT1 ;SET SYS AS DEVICE, PREPARE + PUSHJ P,LDF ;LOAD SAILOW + POPJ P, ;AFRAID OF `JRST LDF' +>; END OF SEGMENT LOADING OPTION + + + IFN REENT,< +; H SWITCH --- EITHER /H OR /NH +HSET: JUMPE D,SETNUM ;/H ALWAYS LEGAL + CAIGE D,2 ;WANT TO CHANGE SEGMENTS + JRST SETSEG ;YES,GO DO IT + TRNN F,SEENHI ;STARTED TO LOAD YET? + JRST HCONT ;NO, CONTINUE. + ERROR ,<?/H ILLEGAL AFTER FIRST HISEG FILE IS LOADED@?>> + +LDRSTR: ERROR 0,</LOADER RESTARTED@/> + JRST LD ;START AGAIN +IFN REENT,< +REMPFL: ERROR ,</?LOADER REMAP FAILURE@/> + JRST LDRSTR +HCONT: HRRZ C,D + ANDCMI C,1777 + CAIL C,400000 + CAIG C,(H) + JRST COROVL ;BEING SET LOWER THEN 400000 OR MORE THAN TO OF LOW SEG + HRRZM C,HVAL1 ;WE HAVE REMOVED THE ODD BITS TO MAKE A 1K MULT + ADDI C,JOBHDA + CAILE C,(D) ;MAKE SURE OF ENOUGH ROOM + MOVE D,C + HRLI D,W ;SET UP W IN LEFT HALF + MOVEM D,HVAL + POPJ P, ;RETURN. + +COROVL: ERROR ,</HISEG STARTING ADDRESS TOO LOW@/> + JRST LDRSTR +SETNUM: TRO F,NOHI ;SET NO-HIGH-SEG SWITCH. + POPJ P,> + + + ;SWITCH MODE NUMERIC ARGUMENT + +LD6C: LSH D,3 ;BUILD OCTAL NUMERIC ARGUMENT + ADDI D,-60(T) + IMULI C,↑D10 + ADDI C,-"0"(T) ;ACCUMULATE DEC AND OCTAL + JRST LD3 + +;EXIT FROM SWITCH MODE + +LD6D: TLZ F,SSW ;CLEAR SWITCH MODE FLAG + TLNE F,FSW ;TEST FORCED SCAN FLAG + JRST LD2D ;SCAN FORCED, START NEW IDENT. + JRST LD3 ;SCAN NOT FORCED, USE PREV IDENT +;ILLEGAL CHARACTER, NORMAL MODE + +LD7: IFN SYMARG,< + CAIN T,"#" ;DEFINING THIS SYMBOL + JRST DEFINE ;YES + TRNN F,ARGFL ;TREAT AS SPECIAL + JRST .+4 ;NO + CAIE T,"$" + CAIN T,"%" + JRST LD4 ;YES> + CAIN T,"Z"-100 ;TEST FOR ↑Z + JRST LD5E1 ;TREAT AS ALTMODE FOR BATCH + ERROR 8,</CHAR.%/> + JRST LD2 ;TRY TO CONTINUE + +;SYNTAX ERROR, NORMAL MODE + +LD7A: ERROR 8,</SYNTAX%/> + JRST LD2 + +;ILLEGAL CHARACTER, SWITCH MODE + +LD7B: CAIN T,"-" ;SPECIAL CHECK FOR - + JRST [SETOB C,D + JRST LD3] + CAIN T,"Z"-100 ;CHECK FOR /↑Z + JRST LD5E1 ;SAME AS ↑Z + ERROR 8,</SWITCH%/> + JRST LD2 + + + ;ATTEMPT TO CHAIN WITH SPECIFIED HALF OF JOBCHN = 0 + +IFE K,< +LD7C: ERROR ,<?UNCHAINABLE AS LOADED@?> + JRST LD2 + +;ATTEMP TO CHAIN WITHOUT SPECIFYING DEVICE + +LD7D: ERROR ,<?NO CHAIN DEVICE@?> + JRST LD2> + +IFN DMNSW,< +DMN2: +IFN ALGSW,<TRNE F,ALGFL ;IF LOADING ALGOL + POPJ P, ;JUST RETURN> + CAIN D,1 ;SPECIAL CASE + TROA F,HISYM ;YES ,BLT SYMBOLS INTO HISEG + JUMPL D,.+2 + TROA F,DMNFLG ;TURN ON /B +IFN KUTSW,<TRZA F,DMNFLG ;TURN OFF IF /-B + SETZM CORSZ ;SET TO CUT BACK CORE> +IFE KUTSW,<TRZ F,DMNFLG ;TURN OFF IF /-B> + CAMLE D,KORSP + MOVEM D,KORSP + POPJ P, ;RETURN> + + + + SUBTTL CHARACTER CLASSIFICATION TABLE DESCRIPTION: + +; EACH CHARACTER HAS ASSOCIATED WITH IT A FOUR BIT BYTE +; PACKED IN THE CHARACTER CLASSIFICATION TABLE. THE CHARACTER +; CLASSIFICATION CODES ARE ORDERED IN SUCH A WAY AS TO GIVE +; DELIMITERS OF HIGHER PRECEDENCE LOWER CLASSIFICATION NUMBERS. +; CERTAIN CHARACTERS HAVE NO EFFECT ON THE COMMAND STRING, AND +; THEREFORE DO NOT EFFECT ORDERING OF DELIMITERS. FOUR CODES +; ARE RESERVED FOR ALTERNATE DISPATCHES WHILE THE SWITCH MODE IS +; IN EFFECT. + + +;CLASSIFICATION BYTE CODES: + +; BYTE DISP CLASSIFICATION + +; 00 - 00 ILLEGAL CHARACTER, SWITCH MODE +; 01 - 01 ALPHABETIC CHARACTER, SWITCH MODE +; 02 - 02 NUMERIC CHARACTER, SWITCH MODE +; 03 - 03 SWITCH MODE ESCAPE, SWITCH MODE + +; 00 - 04 ILLEGAL CHARACTER, NORMAL MODE +; 01 - 05 ALPHABETIC CHARACTER, NORMAL MODE +; 02 - 06 NUMERIC CHARACTER, NORMAL MODE +; 03 - 07 SWITCH MODE ESCAPE, NORMAL MODE + +; 04 - 10 IGNORED CHARACTER +; 05 - 11 ENTER SWITCH MODE CHARACTER +; 06 - 12 DEVICE IDENTIFIER DELIMITER +; 07 - 13 FILE EXTENSION DELIMITER +; 10 - 14 OUTPUT SPECIFICATION DELIMITER +; 11 - 15 INPUT SPECIFICATION DELIMITER +; 12 - 16 LINE TERMINATION +; 13 - 17 JOB TERMINATION + + + ;BYTE POINTERS TO CHARACTER CLASSIFICATION TABLE + +LD8: POINT 4,LD9(Q),3 + POINT 4,LD9(Q),7 + POINT 4,LD9(Q),11 + POINT 4,LD9(Q),15 + POINT 4,LD9(Q),19 + POINT 4,LD9(Q),23 + POINT 4,LD9(Q),27 + POINT 4,LD9(Q),31 + POINT 4,LD9(Q),35 + +;CHARACTER CLASSIFICATION TABLE + +LD9: BYTE (4)4,0,0,0,0,0,0,0,0 + BYTE (4)4,4,4,4,12,0,0,0,0 + BYTE (4)0,0,0,0,0,0,0,0,0 + BYTE (4)13,0,0,0,0,4,0,4,0 +IFE SYMARG,< BYTE (4)0,0,0,0,5,3,0,0,11> +IFN SYMARG,< BYTE (4)0,0,14,0,5,3,0,0,11> + BYTE (4)0,7,5,2,2,2,2,2,2 +IFE SPCHN,< BYTE (4)2,2,2,2,6,0,0,10,0> +IFN SPCHN,< BYTE (4)2,2,2,2,6,0,1,10,1> +IFE RPGSW,< BYTE (4)0,0,1,1,1,1,1,1,1> +IFN RPGSW,< BYTE (4) 0,10,1,1,1,1,1,1,1> + BYTE (4)1,1,1,1,1,1,1,1,1 + BYTE (4)1,1,1,1,1,1,1,1,1 +IFE PP,<BYTE (4)1,0,0,0,0,10,0,1,1> +IFN PP,<BYTE (4)1,10,0,10,0,10,0,1,1> + BYTE (4)1,1,1,1,1,1,1,1,1 + BYTE (4)1,1,1,1,1,1,1,1,1 + BYTE (4)1,1,1,1,1,1,0,0,13 + BYTE (4)13,4 + + + SUBTTL INITIALIZE LOADING OF A FILE + +ILD: MOVEI W,BUF1 ;LOAD BUFFER ORIGIN + MOVEM W,JOBFF + TLOE F,ISW ;SKIP IF INIT REQUIRED + JRST ILD6 ;DONT DO INIT +ILD7: OPEN 1,OPEN3 ;KEEP IT PURE + JRST ILD5B +ILD6: TLZE F,REWSW ;SKIP IF NO REWIND + MTAPE 1,1 ;REWIND +ILD2: LOOKUP 1,DTIN ;LOOK UP FILE FROM DIRECTORY + JRST ILD3 ;FILE NOT IN DIRECTORY +IFE LNSSW,< +IFE K,< INBUF 1,2 ;SET UP BUFFERS> +IFN K,< INBUF 1,1 ;SET UP BUFFER>> +IFN LNSSW,<INBUF 1,1 + MOVEI W,BUF1 + EXCH W,JOBFF + SUBI W,BUF1 +IFE K,<MOVEI C,4*203+1> +IFN K,<MOVEI C,203+1> + IDIV C,W + INBUF 1,(C)> + TLO F,ASW ;SET LEFT ARROW ILLEGAL FLAG + TLZ F,ESW ;CLEAR EXTENSION FLAG + POPJ P, + +; LOOKUP FAILURE + +ILD3: TLOE F,ESW ;SKIP IF .REL WAS ASSUMED + JRST ILD4 ;FATAL LOOKUP FAILURE + SETZM DTIN1 ;ZERO FILE EXTENSION + JRST ILD2 ;TRY AGAIN WITH NULL EXTENSION + +ILD4: IFE REENT,<IFE TEN30,< ;PDP-6 ONLY + MOVE W,[SIXBIT /LIB40/] + CAME W,DTIN ;WAS THIS A TRY FOR LIB40? + JRST ILD4A ;NO + TRZ W,(SIXBIT / 0/) ;YES + MOVEM W,DTIN ;TRY LIB4 + PUSHJ P,LDDT2 ;USE .REL EXTENSION + TLZ F,ESW ;... + JRST ILD2 ;GO TRY AGAIN +ILD4A:>> +IFN PP,<MOVSI W,(SIXBIT /DSK/) + CAMN W,ILD1 ;TRIED DSK ONCE? + JRST ILD9 ;YES, FILE DOES NOT EXIST + MOVEM W,ILD1 ;SET IT UP + SETZM PPN ;CLEAR OLD VALUE + PUSHJ P,LDDT2 ;SET UP .REL + TLZ F,ESW ;SO WE CAN TRY BLANK EXT + JRST ILD7 ;OPEN DSK,TRY AGAIN> + +ILD9: ERROR ,</CANNOT FIND#/> + JRST LD2 + +; DEVICE SELECTION ERROR + +ILD5A: SKIPA W,LD5C1 +ILD5B: MOVE W,ILD1 +ILD5: TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START W/ ? + PUSHJ P,PWORD ;PRINT DEVICE NAME + ERROR 7,</UNAVAILABLE@/> + JRST LD2 + + + SUBTTL LIBRARY SEARCH CONTROL AND LOADER CONTROL + +;LIBF ENABLES A LIBRARY SEARCH OF <SYS:LIB4.REL> + +LIBF: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + PUSH P,ILD1 ;SAVE DEVICE NAME + PUSHJ P,LIBF1 ;LOAD SYS:JOBDAT.REL +IFN SAILSW,<LIBAGN: PUSHJ P,SALOAD ;LOAD RELS AND SEARCH LIBS> +IFN REENT,<TRNN F,SEENHI ;IF ANY HISEG LOADED NO RE-ENT OP SYSTEM + TRNN F,VFLG + JRST LIBF3 +IFN ALGSW,<TRNE F,ALGFL ;SPECIAL ACTION IF LOADING ALGOL + JRST [MOVE C,[RADIX50 44,%ALGDR] + MOVEI W,400010 ;JOBHDA + PUSHJ P,SYMPT ;DEFINE IT + JRST LIBF3] ;DON'T LOAD IMP40> + MOVE W,[SIXBIT /IMP40/] + PUSHJ P,LIBF2 +LIBF3:> + TRNN F,COBFL ;COBOL SEEN? + SKIPA W,[SIXBIT /LIB40/] ;FIRST TRY AT NAME + MOVE W,[SIXBIT /LIBOL/] ;YES, SEARCH COBOL'S LIBRARY ONLY + PUSHJ P,LIBF2 ;LOAD SYS:LIB40.REL +IFN SAILSW,<MOVE W,LIBPNT ;SEE IF ANY MORE TO DO + CAME W,[XWD -RELLEN-1,LIBFLS-1] + JRST LIBAGN + MOVE W,PRGPNT ;IT COULD BE DANGEROUS TO LOAD PROGRAMS HERE + CAME W,[XWD -RELLEN-1,PRGFLS-1] + JRST LIBAGN ;MORE TO DO, TRY AGAIN> + POP P,ILD1 ;CALL TO LDDT1 WILL PUT IT IN OLDDEV +LIBF1: MOVE W,[SIXBIT /JOBDAT/] ;LOAD SYS:JOBDAT.REL +LIBF2: PUSHJ P,LDDT1 +LIBGO: JUMPGE S,EOF2 ;JUMP IF NO UNDEFINED GLOBALS + TLO F,SLIBSW+SKIPSW ;ENABLE LIBRARY SEARCH + TLZ F,SYMSW ;DISABLE LOADING WITH SYMBOLS + JRST LDF ;INITIALIZE LOADING LIB4 + + + ; LIB CONTROLS THE LIBRARY SEARCH OF ONE FILE + +LIB: JUMPGE S,EOF1 ;JUMP IF NO UNDEFINED GLOBALS + TLO F,SKIPSW ;SET SKIPSW TO IGNORE MODE +IFN DIDAL,<TRNE F,XFLG ;INDEX IN CORE? + JRST INDEX1 ;YES> + JRST LOAD ;CONTINUE LIB. SEARCH + +LIB1: CAIE A,4 ;TEST FOR ENTRY BLOCK + JRST LIB29 ;NOT AN ENTRY BLOCK, IGNORE IT +LIB2: PUSHJ P,RWORD ;READ ONE DATA WORD + MOVE C,W + TLO C,040000 ;SET CODE BITS FOR SEARCH + PUSHJ P,SREQ + TLZA F,SKIPSW ;REQUEST MATCHES ENTRY, LOAD + JRST LIB2 ;NOT FOUND +LIB3: PUSHJ P,RWORD ;READ AND IGNORE ONE DATA WORD + JRST LIB3 ;LOOP TO IGNORE INPUT + +LIB29: +IFN DIDAL,<CAIN A,14 ;INDEX BLOCK? + JRST INDEX0 ;YES> +LIB30: HRRZ C,W ;GET WORD COUNT + JUMPE C,LOAD1 ;IF NUL BLOCK RETURN + CAILE C,↑D18 ;ONLY ONE SUB-BLOCK + JRST LIB3 ;NO,SO USE OLD SLOW METHOD + AOJA C,LIB31 ;ONE FOR RELOCATION WORD + +BLOCK0: HRRZ C,W ;GET WORD COUNT + JUMPE C,LOAD1 ;NOISE WORD +LIB31: CAML C,BUFR2 ;DOES BLOCK OVERLAP BUFFERS? + SOJA C,LIB32 ;YES,ALLOW FOR INITIAL ILDB + ADDM C,BUFR1 ;ADD TO BYTE POINTER + MOVNS C ;NEGATE + ADDM C,BUFR2 ;TO SUBTRACT C FROM WORD COUNT + JRST LOAD1 ;GET NEXT BLOCK + +LIB32: SUB C,BUFR2 ;ACCOUNT FOR REST OF THIS BUFFER + PUSHJ P,WORD+1 ;GET ANOTHER BUFFERFUL + JRST LIB31 ;TRY AGAIN + + + IFN SAILSW,< + +COMMENT * BLOCK TYPE 15 AND 16 USED TO SPECIFY PROGRAMS AND +LIBRARIES WHICH MUST BE LOADED (SEARCHED) IF THE PROGRAM +IN WHICH THE BLOCK APPEARS IS LOADED. IT IS NOW TIME TO +LOAD AND SEARCH THESE FILES. IF ANY MAKE REQUESTS, THEY ARE ADDED +TO THE END. WE WILL COME BACK AND LOOK AGAIN IN CASE A +LIBRARY PROGRAM LOAD A REL PROGRAM. ORIGINAL CODE BY DCS* + +SALOAD: MOVE T,[XWD -RELLEN-1,PRGFLS-1] ;TO RESET WITH AT END + MOVEI D,PRGPNT ;OINTER TO UPPER LIMIT + PUSHJ P,PRGPRG ;LOAD THEM IF ANY + +;NOW FOR LIBRARY SEARCH + + MOVE T,[XWD -RELLEN-1,LIBFLS-1] + MOVEI D,LIBPNT + +PRGPRG: MOVEM D,LODLIM# ;SAVE POINTER TO LIMIT + MOVEM T,LODSTP# ;START FOR RESETTING +PRGBAK: MOVEM T,LODPNT# ;AND START + CAMN T,@LODLIM ;GOTTEN TO END YET? + JRST PRGDON ;YES, DUMP IT + SKIPN W,PRGDEV(T) ;IS DEVICE SPECIFIED? + MOVSI W,(SIXBIT /DSK/) ;NO, DSK + MOVEM W,ILD1 ;WHERE WE INIT FROM + MOVSI W,(SIXBIT /REL/) ;EXTENSION + MOVEM W,DTIN1 + MOVE W,PRGFIL(T) + MOVEM W,DTIN ;FILE NAME + MOVE W,PRGPPN(T) ;THE PROJECT PROG + MOVEM W,DTIN+3 + PUSH P,JRPRG ;A RETURN ADDRESS + TLZ F,ISW ;FORCE NEW INIT + HRRZ T,LODLIM + CAIN T,LIBPNT ;WHICH ONE + JRST LIBGO + JRST LDF +PRGRET: MOVE T,LODPNT ;RETURNS HERE, GET NEXT ONE + AOBJN T,PRGBAK + +PRGDON: MOVE T,LODSTP ;RESTE POINTER IN CASE MORE ON OTHER LIBS + MOVEM T,@LODLIM +JRPRG: POPJ P,PRGRET ;PUSHED TO GET A RETURN ADDRESS + +PRGFIL==1 ;REL INDEX FOR FILE NAMES +PRGPPN==RELLEN+1 ;AND FOR PPNS +PRGDEV==2*RELLEN+1 ;AND FOR DEVICES +> ;END OF IFN SAILSW + + + SUBTTL LDDT LOADS <SYS:DDT.REL> AND SETS SYMSW + + +IFN STANSW,< +LDDTQX: TLO N,DDSW+EXEQSW ;WILL START RAID AFTER LOADING +LDDTQ: PUSH P,D ;SAVE ARG + PUSHJ P,FSCN1 ;SEE BELOW + MOVE W,['RAID '] ;LOAD RAID STATT DDT +IFN DMNSW,<SETZM (P);ELSE>POP P,D ;/0D FOR DMN2 (BELOW) !?! + JRST LDDT11 ;JOIN FORCES +>;IFN STANSW + +LDDTX: +IFN ALGSW,<TRNE F,ALGSW + POPJ P,> + TLO N,DDSW+EXEQSW ;T - LOAD AND GO TO DDT +LDDT: +IFN ALGSW,<TRNE F,ALGFL + POPJ P,> +IFN DMNSW,< PUSH P,D ;SAVE INCASE /NNND > + PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + MOVSI W,444464 ;FILE IDENTIFIER <DDT> +LDDT11: TLZ F,SYMSW!RMSMSW ;DON'T LOAD DDT WITH LOCAL SYMBOLS + PUSHJ P,LDDT1 + PUSHJ P,LDF ;LOAD <SYS:DDT.REL> + TLO F,SYMSW!RMSMSW ;ENABLE LOADING WITH SYMBOLS +IFN DMNSW,< POP P,D ;RESTORE D + JRST DMN2 ;MOVE SYMBOL TABLE > +IFE DMNSW,< POPJ P,> + +LDDT1: MOVEM W,DTIN ;STORE FILE IDENTIFIER +IFN PP,<MOVE W,ILD1 ;SAVE OLD DEV + MOVEM W,OLDDEV> + MOVSI W,637163 ;DEVICE IDENTIFIER <SYS> + MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER + TLZ F,ISW+LIBSW+SKIPSW+REWSW ;CLEAR OLD FLAGS +LDDT2: MOVSI W,624554 ;EXTENSION IDENTIFIER <.REL> +LDDT3: MOVEM W,DTIN1 ;STORE EXTENSION IDENTIFIER +LDDT4:IFN PP,<EXCH W,PPN ;GET PROJ-PROG # + MOVEM W,DTIN+3 + EXCH W,PPN ;W MUST BE SAVED SINCE IT MAY BE USED LATER> + POPJ P, + + + SUBTTL EOF TERMINATES LOADING OF A FILE + +EOF: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER +EOF1: TLZ F,SLIBSW!SKIPSW ;CLEAR ONE FILE LIB. SEARCH FLAG +IFN DIDAL,<TRZ F,XFLG!LSTLOD ;CLEAR DIDAL FLAGS> +EOF2: TLNE F,RMSMSW ;IF REMEMBER LOADING WITH SYMBOLS IS ON + TLO F,SYMSW ;THEN RESTORE SYMBOL LOADING STATE + POPJ P, + +; FORCE SCAN TO COMPLETION, LOAD IF NECESSARY + +FSCN: PUSHJ P,FSCN1 ;FORCED LOAD BEFORE TEST + TLNN F,FULLSW ;TEST FOR OVERLAP + POPJ P, ;NO OVERLAP, RETURN + MOVE W,H ;FETCH CORE SIZE REQUIRED + SUBI W,1(S) ; COMPUT DEFICIENCY + JUMPL W,EOF2 ;JUMP IF NO OVERLAP + TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START WITH ? + PUSHJ P,PRNUM0 ;INFORM USER + ERROR 7,</WORDS OF OVERLAP#/> + JRST LD2 ;ERROR RETURN + +IFN SPCHN,<FSCN1A: TLNN F,NSW + PUSHJ P,LIBF> +FSCN1: TLON F,FSW ;SKIP IF NOT FIRST CALL TO FSCN + TLNN F,CSW+DSW+ESW ;TEST SCAN FOR COMPLETION + POPJ P, +FSCN2: PUSHJ P,LD5B1 ;STORE FILE OR EXTENSION IDENT. + +; LOADER CONTROL, NORMAL MODE + +LDF: PUSHJ P,ILD ;INITIALIZE LOADING + + + SUBTTL LOAD SUBROUTINE + +LOAD: MOVEM P,PDSAV ;SAVE PUSHDOWN POINTER +IFN WFWSW,<SETZM VARLNG ;LENGTH OF VARIABLE AREA-ADDED TO RELOC> +IFN ALGSW,<SETZM OWNLNG ;LENGTH OF OWN AREA-ADDED TO RELOC> +IFN FAILSW,<SETZM LFTHSW ;RESET LOAD LEFT HALF FIXUP SW> +LOAD1: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER +LOAD1A: PUSHJ P,WORD ;INPUT BLOCK HEADER WORD + MOVNI E,400000(W) ;WORD COUNT - FROM RH OF HEADER + HLRZ A,W ;BLOCK TYPE - FROM LH OF HEADER +IFN FAILSW,<SKIPN POLSW ;ERROR IF STILL DOING POLISH> + CAIL A,DISPL*2 ;TEST BLOCK TYPE NUMBER + JRST LOAD4 ;ERROR, ILLEGAL BLOCK TYPE + TLNE F,SKIPSW ;BLOCK OK - TEST LOAD STATUS + JRST LIB1 ;RETURN TO LIB. SEARCH CONTROL + HRRZ T,LOAD2(A) ;LOAD RH DISPATCH ENTRY + CAIL A,DISPL ;SKIP IF CORRECT + HLRZ T,LOAD2-DISPL(A);LOAD LH DISPATCH ENTRY + TLNE F,FULLSW ;TEST CORE OVERLAP INDICATOR + SOJG A,HIGH0 ;IGNORE BLOCK IF NOT TYPE 1 + JRST @T ;DISPATCH TO BLOCK SUBROUTINE + +;DISPATCH TABLE - BLOCK TYPES +IFE FAILSW,<POLFIX==LOAD4A + LINK==LOAD4A> +IFE WFWSW,<LVARB==LOAD4A> +IFE DIDAL,<INDEX==LOAD4A> +IFE ALGSW!SAILSW,<ALGBLK==LOAD4A> +IFE SAILSW,<LDLIB==LOAD4A> + +LOAD2: XWD LOCD, BLOCK0 ;10,,0 + XWD POLFIX, PROG ;11,,1 + XWD LINK, SYM ;12,,2 + XWD LVARB, HISEG ;13,,3 + XWD INDEX, LIB30 ;14,,4 + XWD ALGBLK, HIGH ;15,,5 + XWD LDLIB, NAME ;16,,6 + XWD LOAD4A, START ;17,,7 + + DISPL==.-LOAD2 + +;ERROR EXIT FOR BAD HEADER WORDS + +LOAD4: IFE K,< + CAIN A,400 ;FORTRAN FOUR BLOCK + JRST F4LD> +LOAD4A: MOVE W,A ;GET BLOCK TYPE + ERROR ,</ILL. FORMAT BLOCK TYPE !/> + PUSHJ P,PRNUM ;PRINT BLOCK TYPE + JRST ILC1 ;PRINT SUBROUTINE NAME + + + SUBTTL LOAD PROGRAMS AND DATA (BLOCK TYPE 1) + +PROG: MOVEI V,-1(W) ;LOAD BLOCK LENGTH + PUSHJ P,RWORD ;READ BLOCK ORIGIN + ADD V,W ;COMPUTE NEW PROG. BREAK +IFN REENT,<TLNN F,HIPROG + JRST PROGLW ;NOT HIGH SEGMENT +PROG3: CAMGE W,HVAL1 ;CHECK TO SEE IF IN TOP SEG + JRST LOWCOR + MOVE T,JOBREL ;CHECK FOR OVERFLOW ON HIGH + CAIL T,@X + JRST PROG2 + PUSHJ P,HIEXP + JRST FULLC + JRST PROG3> + +PROGLW: MOVEI T,@X + CAMG H,T ;COMPARE WITH PREV. PROG. BREAK + MOVE H,T + TLNE F,FULLSW + JRST FULLC ;NO ERROR MESSAGE +IFN REENT,<CAML H,HVAL1 + JRST COROVL ;WE HAVE OVERFLOWED THE LOW SEGMENT + CAMLE T,HILOW + MOVEM T,HILOW ;HIGHEST LOW CODE LOADED INTO> + CAILE H,1(S) ; SKIP IF SUFFICIENT CORE AVAILABLE +IFN EXPAND,<JRST [PUSHJ P,XPAND> + JRST FULLC +IFN REENT,< TLNE F,HIPROG + SUBI W,2000 ;HISEG LOADING LOW SEG> +IFN EXPAND,< JRST .-1]> +PROG2: MOVE V,W +PROG1: PUSHJ P,RWORD ;READ DATA WORD +IFN TEN30,<CAIN V,41 ;CHANGE FOR 10/30 JOBDAT + MOVEI V,JOB41 ;JOB41 IS DIFFERENT + CAIN V,74 ;SO IS JOBDAT + MOVEI V,JOBDDT> +IFN L,<CAML V,RINITL ;CHECK FOR BAD STORE> + MOVEM W,@X ;STORE DATA WORD IN PROG. AT LLC + AOJA V,PROG1 ;ADD ONE TO LOADER LOC. COUNTER + +IFN REENT,< +LOWCOR: SUB V,HIGHX ;RELOC FOR PROPER + ADD V,LOWX ;LOADING OF LOW SEQMENT + SUB W,HIGHX + ADD W,LOWX + JRST PROGLW> + + + SUBTTL LOAD SYMBOLS (BLOCK TYPE 2) + +SYM: PUSHJ P,PRWORD ;READ TWO DATA WORDS + PUSHJ P,SYMPT; PUT INTO TABLE +IFN REENT,<PUSHJ P,RESTRX> + JRST SYM + +SYMPT: TLNE C,200000 ;GLOBAL REQUEST? WFW + JUMPL C,SYM3 ;CHECK FOR 60 NOT JUST HIGH BIT WFW + TLNN C,40000 + JRST SYM1A ;LOCAL SYMBOL + TLNE C,100000 + JRST SYM1B + PUSHJ P,SREQ ;GLOBAL DEF., SEARCH FOR REQUEST + JRST SYM2 ;REQUEST MATCHES + PUSHJ P,SDEF ;SEARCH FOR MULTIPLE DEFINITIONS + JRST SYM1 ;MULTIPLY DEFINED GLOBAL + JRST SYM1B + +; PROCESS MULTIPLY DEFINED GLOBAL + +SYM1: CAMN W,2(A) ;COMPARE NEW AND OLD VALUE + POPJ P,; + AOS MDG ;COUNT MULTIPLY DEFINED GLOBALS + PUSHJ P,PRQ ;START W/ ? + PUSHJ P,PRNAM ;PRINT SYMBOL AND VALUE +IFN RPGSW,<MOVE W,JOBERR ;RECORD THIS AS AN ERROR + ADDI W,1 + HRRM W,JOBERR> + MOVE W,2(A) ;LOAD OLD VALUE + PUSHJ P,PRNUM ;PRINT OLD VALUE + ERROR 7,</MUL. DEF. GLOBAL IN PROG. !/> + MOVE C,SBRNAM ;GET PROGRAM NAME + PUSHJ P,PRNAME ;PRINT R-50 NAME + ERROR 0,</#/> + POPJ P, ;IGNORE MUL. DEF. GLOBAL SYM + + + ; LOCAL SYMBOL + +SYM1A: TLNN F,SYMSW ;SKIP IF LOAD LOCALS SWITCH ON + POPJ P,; IGNORE LOCAL SYMBOLS +SYM1B: CAIL H,(S) ;STORE DEFINED SYMBOL +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> +SYM1C: IFE K,< + TLNE N,F4SW; FORTRAN FOUR REQUIRES A BLT + PUSHJ P,MVDWN; OF THE TABLES> + MOVEI A,-2(S) ;LOAD A TO SAVE INST. AT SYM2 +SYM1D: SUBI S,2; UPDATE UNDEFINED POINTER + POP B,2(A) ;MOVE UNDEFINED VALUE POINTER + POP B,1(A) ;MOVE UNDEFINED SYMBOL + MOVEM W,2(B) ;STORE VALUE + MOVEM C,1(B) ;STORE SYMBOL + POPJ P, + + + ; GLOBAL DEFINITION MATCHES REQUEST + +SYM2: PUSH P,SYM2C ;NEXT MUST BE A SUBROUTINE FOR LATER, SET RETURN +SYM2B: MOVE V,2(A) ;LOAD REQUEST POINTER + PUSHJ P,REMSYM + JUMPL V,SYM2W ;ADDITIVE REQUEST? WFW + PUSHJ P,SYM4A ;REPLACE CHAIN WITH DEFINITION +SYM2W1: PUSHJ P,SREQ ;LOOK FOR MORE REQUESTS FOR THIS SYMBOL + JRST SYM2B ;FOUND MORE + MOVE A,SVA ;RESTORE A +SYM2C: POPJ P,SYM1D ;RETURN, SEE SYM2 FOR USE OF ADDRESS + +; REQUEST MATCHES GLOBAL DEFINITION + +SYM2A: MOVE V,W ;LOAD POINTER TO CHAIN + MOVE W,2(A) ;LOAD VALUE + JUMPL V,FIXWP ;HANDLE ATTITIVE REQUEST WFW + JRST SYM4A + +; PROCESS GLOBAL REQUEST + +SYM3: TLNE C,040000; COMMON NAME + JRST SYM1B + TLC C,640000; PERMUTE BITS FROM 60 TO 04 + PUSHJ P,SDEF ;SEARCH FOR GLOBAL DEFINITION + JRST SYM2A ;MATCHING GLOBAL DEFINITION + JUMPL W,SYM3X1 ;ADDITIVE FIXUP WFW + PUSHJ P,SREQ ;SEARCH FOR EXISTING REQUEST WFW + JRST SYM3A ;EXISTING REQUEST FOUND WFW +SYM3X1: TLNN W,100000 ;CHECK SYMBOL TABLE FIXUP + JRST SYM3X2 ;NO + MOVE V,1(B) ;MUST BE LAST SYMBOL DEFINED. GET SYMBOL + XOR V,W ;CHECK FOR IDENTITY + TDNE V,[XWD 77777,-1] ;BUT IGNORE HIGH 3 BITS + POPJ P, ;NOT SAME, ASSUME NOT LOADED LOCAL + HRRI W,2(B) ;GET LOCATION IN RIGHT HALF + TLO W,1 + SUB W,HISTRT ;AND MAKE RELATIVE +IFN FAILSW,<TLZ W,040000> +SYM3X2: CAIL H,(S) ;STORE REQUEST IN UNDEF. TABLE WFW +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> +SYM3X: IFE K,< + TLNE N,F4SW; FORTRAN FOUR + PUSHJ P,MVDWN; ADJUST TABLES IF F4> + SUB S,SE3 ;ADVANCE UNDEFINED POINTER + MOVEM W,2(S) ;STORE UNDEFINED VALUE POINTER + MOVEM C,1(S) ;STORE UNDEFINED SYMBOL + POPJ P,; + + + +; COMBINE TWO REQUEST CHAINS + +SYM3A: SKIPL 2(A) ;IS IT ADDITIVE WFW + JRST SYM3A1 ;NO, PROCESS WFW +SYM3A4: PUSHJ P,SDEF2 ;YES, CONTINUE WFW + JRST SYM3A ;FOUND ANOTHER WFW + JRST SYM3X2 ;REALLY NO CHAIN THERE WFW +SYM3A1: SKIPE V,2(A) ;IF ADDRESS OF CHAIN IS 0, THROW IT AWAY + JRST SYM3A2 ;AND USE THE NEW ONE, ELSE ADD THE CHAINS + MOVEM W,2(A) ;W IS ADDRESS OF NEW CHAIN,STORE ON TOP OF OLD 0 + POPJ P, +SYM3A2: +SYM3A3: MOVE A,2(A) +SYM3B: HRRZ V,A +IFN L,<CAMGE V,RINITL + HALT> +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> + HRRZ A,@X ; LOAD NEXT ADDRESS IN CHAIN + JUMPN A,SYM3B ; JUMP IF NOT THE LAST ADDR. IN CHAIN + HRRM W,@X ;COMBINE CHAINS + POPJ P,; + +;WFW PATCH FOR ADDITIVE GLOBAL REQUESTS + +FIXWP: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + JRST FIXW + MOVE T,1(B) ;SYMBOL FIXUP, MUST BE LAST SYMBOL DEFINED + XOR T,V ;CHECK FO SAME + TDNE T,[XWD 77777,-1] ;EXCEPT FOR HIGH CODE BITS + POPJ P, ;ASSUME NON-LOADED LOCAL + HRRI V,2(B) ;GET LOCATION + SUBI V,(X) ;SO WE CAN USE @X + JRST FIXW1 +FIXW: IFN REENT,<HRRZ T,V + CAMGE T,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> +IFN L,< HRRZ T,V + CAMGE R,RINITL + POPJ P,> +FIXW1: TLNE V,200000 ;IS IT LEFT HALF + JRST FIXWL + MOVE T,@X ;GET WORD + ADD T,W ;VALUE OF GLOBAL + HRRM T,@X ;FIX WITHOUT CARRY + MOVSI D,200000 ;SET UP TO REMOVE DEFERED INTERNAL IF THERE + JRST SYMFIX + + + FIXWL: HRLZ T,W ;UPDATE VALUE OF LEFT HALF + ADDM T,@X ;BY VALUE OF GLOBAL + MOVSI D,400000 ;LEFT DEFERED INTERNAL +SYMFIX: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + POPJ P, ;NO, RETURN + ADDI V,(X) ;GET THE LOCATION +SYMFX1: MOVE T,-1(V) ;GET THE SYMBOL NAME + TLNN T,40000 ;CHECK TO SEE IF INTERNAL + POPJ P, ;NO, LEAVE + ANDCAB D,-1(V) ;REMOVE PROPER BIT + TLNE D,600000 ;IS IT STILL DEFERED? + POPJ P, ;YES, ALL DONE + EXCH C,D ;NO, CHECK FOR A REQUEST FOR IT + PUSHJ P,SREQ + JRST CHNSYM ;YES, WILL HAVE TO CALL THE FIXUP ROUTINE + MOVE C,D ;GET C BACK + POPJ P, +CHNSYM: PUSH P,D ;HAS THE OLD C IN IT + PUSH P,W ;WE MAY NEED IT LATER + MOVE W,(V) ;GET VALUE + PUSHJ P,SYM2B ;CALL THE FOUND GLOBAL TO MATCH REQUEST ROUTINE + POP P,W + POP P,C ;RESTORE FOR CALLER + POPJ P, ;AND GO AWAY + +SYM2W: IFN FAILSW,< + TLNE V,40000 ;CHECK FOR POLISH + JRST POLSAT> + TLNN V,100000 ;SYMBOL TABLE? + JRST SYM2WA + ADD V,HISTRT ;MAKE ABSOLUTE + SUBI V,(X) ;GET READY TO ADD X + PUSHJ P,FIXW1 + JRST SYM2W1 +SYM2WA: PUSHJ P,FIXW ;DO FIXUP + JRST SYM2W1 ;AND LOOK FOR MORE REQUESTS + +;END WFW PATCH + + + ;PATCH VALUES INTO CHAINED REQUEST + +SYM4: IFN L,<CAMGE V,RINITL + POPJ P,> +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> + HRRZ T,@X ;LOAD NEXT ADDRESS IN CHAIN + HRRM W,@X ;INSERT VALUE INTO PROGRAM + MOVE V,T +SYM4A: JUMPN V,SYM4 ;JUMP IF NOT LAST ADDR. IN CHAIN + POPJ P, + +IFE K,< +MVDWN: HRRZ T,MLTP +IFN EXPAND,< SUBI T,2> + CAIG T,(H); ANY ROOM LEFT? +IFN EXPAND,< JRST [PUSHJ P,XPAND> + TLOA F,FULLSW +IFN EXPAND,< JRST MVDWN + POPJ P,]> + TLNE F,SKIPSW+FULLSW + POPJ P, ; ABORT BLT + HRREI T,-2 + ADDM T,PLTP; ADJUST PROGRAMMER LABEL POINTER + ADDM T,BITP; AND BIT TABLE POINTER + ADDM T,SDSTP; FIRST DATA STATEMENT + ADDM T,LTC + ADDM T,ITC + TLNE N,SYDAT + ADDM T,V + ADDB T,MLTP; AND FINALLY TO MADE LABEL TABLE + HRLS T; SET UP BLT POINTER + ADD T,[XWD 2,0] + BLT T,(S) + POPJ P, +> + + + SUBTTL HIGH-SEGMENT (BLOCK TYPE 3) +;THIS PROGRAM IS INTENDED FOR HI SEGMENT IF RUNNING ON A PDP-10. +; THIS BLOCK TYPE OCCURS AFTER ENTRY AND NAME BLOCKS. + +HISEG: PUSHJ P,WORD ;GOBBLE UP A WORD. + JUMPE W,HISEG2 ;MACRO V36 + PUSHJ P,WORD ;GET THE OFSET +IFE REENT,<HISEG2==LOAD1A + JUMPGE W,LOAD1A ;NOT TWO SEG PROG.> +IFN REENT,<JUMPE W,HISEG2 ;IGNORE ZERO + JUMPG W,HISEG3 ;NEG. IF TWOSEG PSEUDO-OP> + TRO F,TWOFL ;SET FLAG +IFN REENT,< + TRNE F,NOHI!NOHI6 ;TWO SEGMENTS LEGAL? + JRST ONESEG ;LOAD AS ONE SEGMENT +HISEG3: HRRZ D,W ;GET START OF HISEG + JUMPE D,.+2 ;NOT SPECIFIED + PUSHJ P,HCONT ;AS IF /H +HISEG2: PUSHJ P,HISEG1 + JRST LOAD1 ;GET NEXT BLOCK +FAKEHI: ;AS IF BLOCK TYPE 3 +HISEG1: TRNE F,NOHI!NOHI6 ;LOAD REENT? + POPJ P, + TLOE F,HIPROG ;LOADING HI PROG + POPJ P, ;IGNORE 2'ND HISEG + TRON F,SEENHI ;HAVE WE LOADED ANY OTHER HI STUFF? + PUSHJ P,SETUPH ;NO,SET UP HI SEG. + MOVEM R,LOWR + MOVE R,HIGHR + HRRM R,2(N) ;CALL THIS THE START OF THE PROGRAM + MOVE X,HIGHX + POPJ P, +SETUPH: MOVE X,HVAL1 + CAIGE X,-1 ;SEE IF IT HAS BEEN CHANGED FROM ORIG + JRST SEENHS ;YES, MUST HAVE SEEN /H + MOVEI X,400000 + MOVEM X,HVAL1 + CAIG X,(H) ;HAVE WE RUN OVER WITH THE LOW SEG + JRST COROVL + ADDI X,JOBHDA + HRLI X,W + MOVEM X,HVAL +SEENHS: MOVE X,HVAL + MOVEM X,HIGHR + HRRZ X,JOBREL + SUB X,HVAL1 + ADDI X,1 + HRLI X,V + MOVEM X,HIGHX + POPJ P, + + + + SETSEG: TRZ F,NOHI!SEGFL ;ALLOW HI-SEG + JUMPL D,.+2 ;/-H TURNS OFF NOHI ONLY + TRO F,SEGFL ;/1H FORCES HI + POPJ P, +> + +ONESEG: HLRZ D,W ;GET LENGTH OF HISEG + SUBI D,(W) ;REMOVE OFSET + JUMPLE D,TWOERR ;LENGTH NOT AVAILABLE + MOVEM R,LOWR ;SAVE LOW SEGMENT RELOCATION + ADDM D,LOWR ;ADD TO LOW SEG RELOCATION + HRRZM W,HVAL1 ;SO RELOC WILL WORK + JRST LOAD1 ;GET NEXT BLOCK + +TWOERR: ERROR 7,</TWO SEGMENTS ILLEGAL#/> + JRST LDRSTR + + + SUBTTL HIGHEST RELOCATABLE POINT (BLOCK TYPE 5) +SFULLC: TLOE F,FULLSW ;PREVIOUS OVERFLOW? + JRST FULLC ;YES, DON'T PRINT MESSAGE + ERROR ,<?SYMBOL TABLE OVERLAP#?> +FULLC: TLO F,FULLSW ;CORE OVERLAP ERROR RETURN +IFE K,< TLNE N,F4SW + POPJ P,> + JRST LIB3 ;LOOK FOR MORE +HIGH2: PUSHJ P,RWORD ;GET HISEG BREAK + TRZ F,TWOFL ;CLEAR FLAG NOW +IFE REENT,< MOVE R,LOWR + JRST HIGH2A> +IFN REENT,< TRNE F,NOHI!NOHI6 ;SINGLE SEGMENT LOAD? + JRST [MOVE R,LOWR ;YES,GET LARGER RELOC + MOVE W,HVAL ;ORIGINAL VALUE + MOVEM W,HVAL1 ;RESET + JRST HIGH2A] ;CONTINUE AS IF LOW ONLY + HRR R,W ;PUT BREAK IN R + CAMLE R,HVAL + MOVEM R,HVAL + MOVEM R,HIGHR + MOVE R,LOWR ;NEXT WORD IS LOW SEG BREAK + TLZ F,HIPROG ;CLEAR HIPROG + PUSHJ P,PRWORD ;GET WORD PAIR + HRR R,C ;GET LOW SEG BREAK + MOVEM R,LOWR ;SAVE IT + MOVE R,HIGHR ;GET HIGH BREAK + JRST HIGHN3 ;AND JOIN COMMON CODE> + +HIGH0: CAIE A,4 ; TEST FOR END BLOCK (OVERLAP) + JRST LIB30 + +HIGH: TRNE F,TWOFL ;IS THIS A TWO SEGMENT PROGRAM? + JRST HIGH2 ;YES +HIGH2A: PUSHJ P,PRWORD ;READ TWO DATA WORDS. +IFN REENT,< TLZE F,HIPROG + JRST HIGHNP> +IFN WFWSW,<ADD C,VARLNG ;IF LOW SEG THEN VARIABLES GO AT END> +IFN ALGSW,<ADD C,OWNLNG ;ADD IN LENGTH OF OWN BLOCK> + HRR R,C ;SET NEW PROGRAM BREAK + CAMGE C,W ;CHECK 2ND WORD (LOC PROG BRK IF PRESENT) + MOVE C,W +HIGH31: ADDI C,(X) + CAIG H,(C) + MOVEI H,(C) ;SET UP H + CAILE H,1(S) ;TEST PROGRAM BREAK +IFN EXPAND,<PUSHJ P,[ PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM2 + POPJ P,]> +IFE EXPAND,<TLO F,FULLSW> +HIGH3: MOVEI A,F.C + BLT A,B.C +IFN REENT,<TRNE F,NOHI!NOHI6 ;ONE SEGMENT PROGRAM? + JRST HIGHN4 ;YES + HRLZ W,HIGHR ;GET HIGH PROG BREAK + JUMPE W,[HRRZ W,R ;NO HIGH SEGMENT YET + JRST .+2] ;SO USE LOW RELOCATION ONLY + HRR W,LOWR ;GET LOW BREAK + SETZ C, ;ZERO SYMBOL NAME + PUSHJ P,SYM1B ;PUT IN SYMBOL TABLE + MOVEM S,F.C+S ;SAVE NEW S AND B + MOVEM B,F.C+B ;INCASE OF ERROR +HIGHN4:> + TLZ F,NAMSSW ;RELAX, RELOCATION BLOCK FOUND + TLNE F,SLIBSW+LIBSW ;NORMAL MODE EXIT THROUGH LOAD1 + JRST LIB ;LIBRARY SEARCH EXIT + JRST LOAD1 +IFN REENT,< +HIGHNP: HRR R,C +HIGHN1: CAMLE R,HVAL + MOVEM R,HVAL + MOVEM R,HIGHR +HIGHN3: PUSH P,W ;SAVE W,CONTAIN HIGHEST ABSOLUTE ADDRESS + ADD W,LOWX ;LOC PROG BRK + CAIGE H,(W) ;CHECK FOR TOP OF LOW CORE + MOVEI H,(W) + POP P,W ;RESTORE + CAML H,HVAL1 + JRST COROVL ;OVERFLOW OF LOW SEGMENT +HIGHN2: HRRZ R,HVAL + SUB R,HVAL1 + ADD R,HISTRT + CAMLE R,JOBREL + JRST [PUSHJ P,HIEXP + JRST FULLC + JRST HIGHN2] + MOVE R,LOWR + MOVE X,LOWX +IFN WFWSW,<ADD R,VARLNG ;VARIABLES IN LOW SEG> +IFN ALGSW,<ADD R,OWNLNG ;OWN BLOCK IN LOW SEGMENT> + HRRZ C,R + CAIGE C,(W) ;IS ABSOLUTE LOCATION GREATER + HRR R,W ;YES USE IT + + + HRRZ C,R ;SET UP C AGAIN + JRST HIGH31 ;GO CHECK PROGRAM BREAK + + + SUBTTL EXPAND HIGH SEGMENT + +HIEXP: TLNE F,FULLSW + POPJ P, +IFN EXPAND,<PUSH P,Q> + PUSH P,H + PUSH P,X + PUSH P,N +IFE K,<HRRZ X,MLTP + TLNN N,F4SW> + MOVEI X,1(S) + HRRZ N,X + SUB N,H + CAILE N,1777 + JRST MOVHI +IFE EXPAND,<POPJ P,> +IFN EXPAND,<HRRZ N,JOBREL + ADDI N,2000 + CAMG N,ALWCOR + CORE N, + JRST XPAND6 + PUSHJ P,ZTOP + POP P,N + JRST XPAND3> + +MOVHI: MOVEI N,-2000(X) + HRL N,X + HRRZ X,JOBREL + BLT N,-2000(X) + PUSHJ P,ZTOP + MOVNI H,2000 +IFN EXPAND,<JRST XPAND8> +IFE EXPAND,<ADDM H,HISTRT + ADDM H,S + ADDM H,B + ADDM H,HIGHX + TLNE F,HIPROG + ADDM H,-1(P) + POP P,N + SUBI N,2000 ;ADJUST POINTER TO NAME +IFE K,< TLNN F4SW + JRST HIXP1 + ADDM H,PLTP + ADDM H,BITP + ADDM H,SDSTP + ADDM H,MLTP + TLNE N,SYDAT + ADDM H,V +HIXP1:> + POP P,X + POP P,H + AOS (P) + POPJ P,> + +ZTOP: HRRZ N,JOBREL + MOVEI X,-1776(N) + HRLI X,-1777(N) + SETZM -1(X) + BLT X,(N) + POPJ P,> + + + SUBTTL PROGRAM NAME (BLOCK TYPE 6) + +NAME: TLOE F,NAMSSW ;HAVE WE SEEN TWO IN A ROW? + JRST NAMERR ;YES, NO END BLOCK SEEN + PUSHJ P,PRWORD ;READ TWO DATA WORDS + MOVEM C,SBRNAM ;SAVE SUBROUTINE NAME +NCONT: HLRE V,W ;GET COMPILER TYPE + HRRZS W ;CLEAR TYPE + JUMPL V,.+3 + CAIGE V,CMPLEN-CMPLER ;ONLY IF LEGAL TYPE + XCT CMPLER(V) ;DO SPECIAL FUNCTION + TLOE N,COMFLG ;SKIP IF COMMON NOT PREV. SET + JRST NAME1 ;SIZE OF COMMON PREV. SET + MOVEM W,COMSAV ;STORE LENGTH OF COMMON + JUMPE W,NAME2 ;JUMP IF NO COMMON IN THIS JOB + HRRI R,@R ;FIRST PROGRAM SET LOAD ORIGIN +NAME1: CAILE H,-1(S) ;TEST FOR AVAIL. SYMBOL SPACE +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> + SUBI S,2 ;UPDATE UNDEF. TABLE POINTER + POP B,2(S) + POP B,1(S) + HRRZ V,N ;POINTER TO PREVIOUS NAME + SUBM B,V ;COMPUTE RELATIVE POSITIONS + HRLM V,2(N) ;STORE FORWARD POINTER + HRR N,B ;UPDATE NAME POINTER +NAME2: MOVEM C,1(B) ;STORE PROGRAM NAME + HRRZM R,2(B) ;STORE PROGRAM ORIGIN + CAMG W,COMSAV ;CHECK COMMON SIZE +IFE REENT,<JRST LIB3 ;COMMON OK> +IFN REENT,<JRST [TRNE F,SEGFL ;LOAD LOW IN HI-SEG + PUSHJ P,FAKEHI ;YES + JRST LIB3]> + SKIPA C,COMM +ILC: MOVE C,1(A) ;NAME + PUSH P,C ;SAVE COMMON NAME + ERROR ,</ILL. COMMON !/> + POP P,C + PUSHJ P,PRNAME +ILC1: SKIPN SBRNAM + JRST ILC2 + ERROR 0,</ PROG. !/> + MOVE C,SBRNAM ;RECOVER SUBROUTINE NAME + PUSHJ P,PRNAME +ILC2: ERROR 0,</ #/> + JRST LD2 + +NAMERR: SETZM DTIN ;CLEAR WRONG FILE NAME FOR MESSAGE + ERROR ,</NO END BLOCK !/> + JRST ILC1 + + + + ;COMPILER TYPE - DO SPECIAL FUNCTION FOR IT + +DEFINE CTYPE (CONDITION,TRUE,FALSE) +<IFN CONDITION,<TRUE> +IFE CONDITION,<FALSE>> + +CMPLER: CTYPE 1,JFCL,JFCL ;0 MACRO + CTYPE K-1,<TRO F,F4FL>,JFCL ;1 FORTRAN + CTYPE 1,<TRO F,COBFL>,JFCL ;2 COBOL + CTYPE ALGSW,<PUSHJ P,ALGNAM>,JFCL ;3 ALGOL + ;4 NELIAC + ;5 PL/1 +CMPLEN: + + + + SUBTTL STARTING ADDRESS (BLOCK TYPE 7) + + +START: PUSHJ P,PRWORD ;READ TWO DATA WORDS + TLNN N,ISAFLG ;SKIP IF IGNORE SA FLAG ON + HRRZM C,STADDR ;SET STARTING ADDRESS +IFN NAMESW,< + MOVE W,DTIN ;PICK UP BINARY FILE NAME + TLNN N,ISAFLG + MOVEM W,PRGNAM ;SAVE IT + MOVE W,1(N) ;SET UP NAME OF THIS PROGRAM + TLNN N,ISAFLG ;DONT SET NAME IF IGNORING SA'S + PUSHJ P,LDNAM> + PUSHJ P,PRWORD ;**OBSCURE RETURN TO LOAD1** + +IFN REENT,< +RESTRX: TLNE F,HIPROG + SKIPA X,HIGHX + MOVE X,LOWX + POPJ P,> + + + SUBTTL ONE PASS LOCAL DEFINITION (BLOCK TYPE 10) + + ;PMP PATCH FOR LEFT HALF FIXUPS +IFN FAILSW!WFWSW,< +LOCDLH: IFN L,<CAMGE V,RINITL + POPJ P,> +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> + HLRZ T,@X ;LOAD NEXT ADDRESS IN CHAIN + HRLM W,@X ;INSERT VALUE INTO PROGRAM + MOVE V,T +LOCDLF: JUMPN V,LOCDLH ;JUMP IF NOT LAST ADDR. IN CHAIN + POPJ P,> +IFN FAILSW,< +LOCDLI: PUSHJ P,LOCDLF +IFN REENT,<PUSHJ P,RESTRX> + AOSA LFTHSW ;TURN OFF LEFT HALF FIX SW (WAS -1) AND SKIP +LOCDLG: SETOM LFTHSW ;TURN ON LEFT HALF FIX SW> + ;END PMP PATCH +LOCD: PUSHJ P,RWORD ;READ ONE DATA WORD + HLRZ V,W ;STORAGE POINTER IN LEFT HALF +IFN FAILSW,< + SKIPE LFTHSW ;LEFT HALF CHAINED? PMP + JRST LOCDLI ;YES PMP + CAMN W,[-1] ;LEFT HALF NEXT? PMP + JRST LOCDLG ;YES, SET SWITCH PMP> + PUSHJ P,SYM4A ;LINK BACK REFERENCES +IFN REENT,<PUSHJ P,RESTRX> + JRST LOCD + + + SUBTTL LVAR FIX-UP (BLOCK TYPE 13) +IFN WFWSW,< +LVARB: PUSHJ P,PRWORD ;THE FIRST TWO WORDS IN THE BLOCK + MOVEM W,VARLNG ;AR SPECIAL. SECOND IS LENGTH OF VARIABLES +IFN REENT,< TLNE F,HIPROG + MOVE C,LOWR ;USE LOW RELOC IF LOADING HI SEG> + ;ELSE C HAS RELOC FOR THIS PROGRAM, USE IT + HRRZM C,VARREL ;THIS IS LOCATION 0 OF VARIABLE AREA +LVLP: PUSHJ P,PRWORD ;THINGS COME IN PAIRS + TLNE C,200000 ;BIT ON IF SYMBOL TABLE FIXUP + JRST LVSYM + HLRZ V,W ;NO GET LOC FROM LEFTH HALF OF SECOND + ADD W,VARREL ;AND RELOCATE VARIABLE + TLNE C,400000 ;ON FOR LEFT HALF + JRST [PUSHJ P,LOCDLF ;TAKE CARE OF IT +IFN REENT,< JRST LVLCOM] ;RESET X> +IFE REENT,< JRST LVLP] ;MUST BE LOW SEG X OK> + PUSHJ P,SYM4A ;RIGHT HALF CHAIN +IFN REENT,<LVLCOM: PUSHJ P,RESTRX> + JRST LVLP +LVSYM: MOVE V,B ;GET SYMBOL TABLE POINTER + ADD C,VARREL ;VALUE IS IN FIRST WORD FOR THESE + TLZ W,740000 ;MAKE SURE NO BITS ON + ADDI V,2 ;CORRECT POINTER TO SYMBOL TABLE +SRSYM: MOVE A,-1(V) ;GET A NAME + TLZN A,740000 ;CHECK FOR PROGRAM NAME + JRST LVLP ;LEAVE (PROBABLY A NON-LOADED LOCAL) + CAMN A,W ;IS IT THE RIGHT ONE?? + JRST LVSYMD ;YES + ADD V,SE3 ;CHECK NEXT ONE + JUMPL V,SRSYM ;BUT ONLY IF SOME ARE THERE + JRST LVLP ;GIVE UP +LVSYMD: TLNE C,400000 ;WHICH HALF?? + JRST LVSYML ;LEFT + ADD C,(V) ;ADDITIVE FIXUP + HRRM C,(V) + MOVSI D,200000 ;DEFERED BITS +LVSM1: PUSHJ P,COMSFX ;GO TAKE CARE OF IT + JRST LVLP ;NEXT PLEASE +LVSYML: HRLZS C + ADDM C,(V) ;WE DON'T HAVE TO WORRY ABOUT OVERFLOW HERE + MOVSI D,400000 ;LEFT DEFERED BITS + JRST LVSM1 ;GO WORRY ABOUT DEFERED INTERNALS> + + + SUBTTL FAIL LOADER +;ONLY LIST IF FAILSW=1 + XLIST +IFN FAILSW,<LIST> +REPEAT 0,<IF POLISH FIXUPS CONTAIN GLOBAL REQUESTS WHICH +CAN NOT BE SATISFIED WHEN THEY ARE SEEN, THEY MUST BE +SAVED UNTIL THESE GLOBAL SYMBOLS BECOME DEFINED. +THE POLISH FIXUP IS SAVED IN THE UNDEFINED TABLE (POINTED +TO BY S). THE FIXUP IS SAVED IN TWO WORD BLOCKS THE FIRST +WORD OF WHICH (THE ONE WHICH WOULD NORMALL CONTAIN THE SYMBOL) +HAS SPECIAL BITS ON SO IT WILL NOT BE FOUND BY A SEARCH FOR +A GLOBAL REQUEST. SINCE THE UNDEFINED TABLE MAY BE +SHUFFELED INTO A RANDOM ORDER, IT IS NOT POSSIBLE TO KEEP +ALL OF A POLISH FIXUP TOGETHER OR TO HAVE POINTERS IN +THE USUAL SENCE FROM ONE TWO WORD BLOCK TO ANOTHER. +SUFFICIENT INFORMATION IS THEREFORE GIVEN TO DETERMINE +WHAT THE FIRST WORD OF THE NEXT DESIRED BLOCK IS AND THIS +BLOCK IS FOUND BY SEARCHING THE UNDEFINED TABLE FOR A MATCH. +EACH POLISH FIXUP WHICH IS ENTERED INTO THE UNDEFINED +TABLE IS GIVEN A UNIQUE NUMBER CALLED THE "HEAD NUMBER". +EACH ELEMENT OF THE FIXUP (EITHER OPERAND OR OPERATOR) +IS ASSIGNED A NUMBER CALLED THE "OP NUMBER". THUS +THE OP NUMBER AND HEAD NUMBER TOGETHER DETERMINE +A SPECIFIC ELEMENT OF A SPECIFIC FIXUP. EACH ELEMENT +(TWO WORD BLOCK) IS ARRANGED AS FOLLOWS: +WORD 1: + BITS 0-4 THESE ARE THE USUAL CODE BITS OF A RADIX50 + SYMBOL AND CONTAIN 44 TO DISTINGUISH + AN ELEMENT OF A POLISH FIXUP FROM OTHER + SYMBOLS IN THE UNDEFINED TABLE + BITS 5-17 THE HEAD NUMBER OF THIS FIXUP + BITS 18-30 THE OP NUMBER OF THIS ELEMENT + BITS 31-35 THE OPERAND FOR THIS ELEMENT + OPERAND 2 INDICATES A WORD OF DATA +WORD 2: + IF THE OPERAND IS 2 THIS WORD CONTAINS THE DATA + + IF THIS IS NOT A DATA OPERATOR THEN THE LEFT AND + RIGHT HALVES OF THIS WORD POINT TO THE TWO OPERANDS + THE CONTENTS OF THE HALF WORD IS THE RIGHT HALF + OF THE FIRST WORD OF THE BLOCK POINTED + TO. THUS THE LEFT HALF OF THE FIRST WORD COMBINED + WITH ONE OF THESE HALF WORDS IS THE FIRST WORD + OF THE BLOCK POINTED TO AND CAN BE FOUND BY SEARCHING + +EACH FIXUP ALSO HAS A HEADER BLOCK. THIS BLOCK CONTAINS THE +FOLLOWING INFORMATION: +WORD 1: + BITS 0-17 0 + BITS 18-21 44 + BITS 22-35 THE HEAD NUMBER OF THIS FIXUP + +WORD 2: + BITS 0-17 A COUNT OF THE NUMBER OF UNDEFINED + GLOBALS REMAINING IN THIS FIXUP + BITS 18-35 A HALF WORD POINTER OF THE + SAME TYPE FOUND IN OTHER ELEMENTS POINTING + TO THE FIRST ELEMENT OF POLISH + WHICH WILL BE THE STORE OPERATOR + +THE REQUESTS FOR THE GLOBAL SYMBOLS NEEDED BY THE FIXUP ARE +ENTERED AS FOLLOWS: + +WORD 1: + BITS 0-4 04 + BITS 5-35 RADIX 50 FOR THE NAME OF THE SYMBOL + + + (NOTE THIS IS JUST A STANDARD GLOBAL REQUEST) + +WORD 2: + BITS 0-4 44 (THIS IDENTIFIES IT AS "ADITIVE TYPE" + AND BIT 4 INDICATES POLISH) + BITS 5-17 THE HEAD NUMBER OF THE FIXUP + (THIS GIVES ENOUGH INFORMATION TO FIND THE HEADER + BLOCK AND UPDATE THE COUNT WHEN THE REQUEST IS + + + SATISFIED) + BITS 18-35 A HALF WORD POINTER TO THE ELEMENT OF THE + FIXUP INTO WHICH THE VALUE OF + + + THE SYMBOL SHOULD BE STORED +> + + + IFN FAILSW,< +;POLISH FIXUPS <BLOCK TYPE 11> + +PDLOV: SKIPE POLSW ;PDL OV ARE WE DOING POLISH? + JRST COMPOL ;YES + ERROR ,</PUSHDOWN OVERFLOW#/> + JRST LD2 +COMPOL: ERROR ,</POLISH TOO COMPLEX#/> + JRST LD2 + + +;READ A HALF WORD AT A TIME + +RDHLF: TLON N,HSW ;WHICH HALF + JRST NORD + PUSHJ P,RWORD ;GET A NEW ONE + TLZ N,HSW ;SET TO READ OTEHR HALF + MOVEM W,SVHWD ;SAVE IT + HLRZS W ;GET LEFT HALF + POPJ P, ;AND RETURN +NORD: HRRZ W,SVHWD ;GET RIGHT HALF + POPJ P, ;AND RETURN + + +POLFIX: MOVE D,[IOWD PPDL,PPDB] ;SET UP THE POLISH PUSHDOWN LIST + MOVEI V,100 ;IN CASE OF ON OPERATORS + MOVEM V,SVSAT + SETOM POLSW ;WE ARE DOING POLISH + TLO N,HSW ;FIX TO READ A WORD THE FIRST TIME + SETOM GLBCNT ;NUMBER OF GLOBALS IN THIS FIXUP + SETOM OPNUM ;NUMBER OF OPERANDS AND OPERATORS THIS FIXUP + PUSH D,[15] ;FAKE OPERATOR SO STORE WILL NOT HACK + +RPOL: PUSHJ P,RDHLF ;GET A HLAF WORD + TRNE W,400000 ;IS IT A STORE OP? + JRST STOROP ;YES, DO IT +IFN WFWSW,<CAIN W,15 + JRST [PUSHJ P,RDHLF ;THIS TRICK FOR VARIABLES + ADD W,VARREL ;HOPE SOMEONE HAS DONE + HRRZ C,W ;A BLOCK TYPE 13 + JRST HLFOP]> + CAIGE W,3 ;0,1,2 ARE OPERANDS + JRST OPND + CAILE W,14 ;14 IS HIGHEST OPERATOR + JRST LOAD4A ;ILL FORMAT + PUSH D,W ;SAVE OPERATOR IN STACK + MOVE V,DESTB-3(W) ;GET NUMBER OF OPERANDS NEEDED + MOVEM V,SVSAT ;ALSO SAVE IT + JRST RPOL ;BACK FOR MORE + + + + ;HANDLE OPERANDS. THIS GETS COMPLICATED BECAUSE OF THE PRESENCE OF +;GLOBAL REQUESTS + +OPND: MOVE A,W ;GET THE OPERAND TYPE HERE + PUSHJ P,RDHLF ;THIS IS AT LEAST PART OF THE OPERAND + MOVE C,W ;GET IT INTO C + JUMPE A,HLFOP ;0 IS HALF-WORD OPERAND + PUSHJ P,RDHLF ;NEED FULL WORD, GET SECOND HALF + HRL C,W ;GET HALF IN RIGHT PLACE + MOVSS C ;WELL ALMOST RIGHT + SOJE A,HLFOP ;1 IS FULL WORD, 2 IS GLOBAL REQUEST + PUSHJ P,SDEF ;SEE IF IT IS ALREADY DEFINED + JRST [MOVE C,2(A) ;YES, WE WIN + JRST HLFOP] + AOSN GLBCNT ;NO, INCREMENT NUMBER OF GLOBALS THIS FIXUP + AOS HEADNM ;INCREMENT FIXUP NUMBER IF FIRST GLOBAL + AOS W,OPNUM ;GET AN OPERAND NUMBER + LSH W,5 ;SPACE FOR TYPE + IORI W,2 ;TYPE 2 IS GLOBAL + HRL W,HEADNM ;GET FIXUP NUMBER + PUSHJ P,SYM3X2 ;AND PUT INTO UDEFINED AREA ALONG WITH NAME + MOVE C,W ;ALSO PUT THAT PART OF THE FIXUP IN + PUSHJ P,SYM3X2 + SKIPA A,[400000] ;SET UP GLOBAL FLAG +HLFOP: MOVEI A,0 ;VALUE OPERAND FLAG +HLFOP1: SOJL V,CSAT ;ENOUGH OPERANDS SEEN? + PUSH D,C ;NO, SAVE VALUE(OR GLOBAL NAME) + HRLI A,400000 ;PUT IN A VALUE MARKER + PUSH D,A ;TO THE STACK + JRST RPOL ;GET MORE POLISH + + + + ;HAVE ENOUGH OPERANDS FOR THE CURRENT OPERATOR + +CSAT: HRRZS A ;KEEP ONLY THE GLOBAL-VALUE HALF + SKIPN SVSAT ;IS IT UNARY + JRST UNOP ;YES, NO NEED TO GET 2ND OPERAND + HRL A,(D) ;GET GLOBAL VALUE MARKER FOR 2ND OP + POP D,W + POP D,W ;VALUE OR GLOBAL NAME +UNOP: POP D,V ;OPERATOR + JUMPN A,GLOB ;IF EITHER IS A GLOBAL HANDLE SPECIALLY + XCT OPTAB-3(V) ;IF BOTH VALUES JUST XCT + MOVE C,W ;GET THE CURRENT VALUE +SETSAT: SKIPG V,(D) ;IS THERE A VALUE IN THE STACK + MOVE V,-2(D) ;YES, THIS MUST BE THE OPERATOR + MOVE V,DESTB-3(V) ;GET NUMBER OF OPERANDS NEEDED + MOVEM V,SVSAT ;SAVE IT HERE + SKIPG (D) ;WAS THERE AN OPERAND + SUBI V,1 ;HAVE 1 OPERAND ALREADY + JRST HLFOP1 ;GO SEE WHAT WE SHOULD DO NOW + +;HANDLE GLOBALS +GLOB: TRNE A,-1 ;IS IT IN RIGHT HALF + JRST TLHG ;NO, NEED TO PUT THIS VALUE INTO THE FIXUP LIST + PUSH P,W ;SAVE FOR A WHILE + MOVE W,C ;THE VALUE + AOS C,OPNUM ;GET AN OPERAND NUMBER + LSH C,5 ;AND PUT IN TYPE + IORI C,2 ;VALUE TYPE + HRL C,HEADNM ;THE FIXUP NUMBER + PUSHJ P,SYM3X2 + POP P,W ;RETRIEVE THE OTHER VALUE +TLHG: SKIPE SVSAT ;WAS THIS A UNARY OPERATOR + TLNE A,-1 ;WAS THERE A GLOBAL IN LEFT HALF + JRST GLSET + PUSH P,C ;SAVE THE FIRST OPERAND + AOS C,OPNUM ;SEE ABOVE + LSH C,5 + IORI C,2 + HRL C,HEADNM + PUSHJ P,SYM3X2 + MOVE W,C + POP P,C + +GLSET: EXCH C,W ;GET THEM IN THE OTHER ORDER + HRL W,C ;SET UP THE OPERATOR LINK + AOS C,OPNUM + LSH C,5 ;SPACE FOR THYPE + IOR C,V ;THE OPERATOR + HRL C,HEADNM + PUSHJ P,SYM3X2 ;INTO THE UNDEF LIST + MOVEI A,400000 ;SET UP AS A GLOBAL VALUE + JRST SETSAT ;AND SET UP FOR NEXT OPERATOR + + + ;FINALLY WE GET TO STORE THIS MESS + +STOROP: MOVE T,-2(D) ;THIS SHOULD BE THE FAKE OPERATOR + CAIE T,15 ;IS IT + JRST LOAD4A ;NO, ILL FORMAT + HRRZ T,(D) ;GET THE VALUE TYPE + JUMPN T,GLSTR ;AND TREAT GLOBALS SPECIAL + MOVE A,W ;THE TYPE OF STORE OPERATOR + CAIGE A,-3 + PUSHJ P,FSYMT + PUSHJ P,RDHLF ;GET THE ADDRESS + MOVE V,W ;SET UP FOR FIXUPS + POP D,W ;GET THE VALUE + POP D,W ;AFTER IGNORING THE FLAG + PUSHJ P,@STRTAB+6(A) ;CALL THE CORRECT FIXUP ROUTINE +COMSTR: SETZM POLSW ;ALL DONE WITH POLISH +IFN REENT,<PUSHJ P,RESTRX> + MOVE T,OPNUM ;CHECK ON SIZES + MOVE V,HEADNM + CAIG V,477777 + CAILE T,17777 + JRST COMPOL ;TOO BIG, GIVE ERROR + PUSHJ P,RWORD ;THIS SHOULD GET US OUT (I.E RUN OUT COUNT) + JRST LOAD4A ;IF NOT, SOMETHING IS WRONG + +STRTAB: EXP ALSYM,LFSYM,RHSYM,ALSTR,LOCDLF,SYM4A,FAKESY + +GLSTR: MOVE A,W + CAIGE A,-3 + PUSHJ P,FSYMT + PUSHJ P,RDHLF ;GET THE STORE LOCATION + MOVEI A,23(A) + POP D,V ;GET VALUE + POP D,V + HRLM V,W ;SET UP STORAGE ELEMENT + AOS C,OPNUM + LSH C,5 + IOR C,A + HRL C,HEADNM + PUSHJ P,SYM3X2 + MOVE W,C ;NOW SET UP THE HEADER + AOS V,GLBCNT ;WHICH HAS NUMBER OF GLOBALS + HRLM V,W + HRRZ C,HEADNM + PUSHJ P,SYM3X2 + JRST COMSTR ;AND FINISH + + + + ALSTR1: IFN L,<CAMGE V,RINITL + POPJ P,> +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> + HRRZ T,@X + MOVEM W,@X ;FULL WORD FIXUPS + MOVE V,T +ALSTR: JUMPN V,ALSTR1 + POPJ P, +DESTB: EXP 1,1,1,1,1,1,1,1,0,0,100 + +OPTAB: ADD W,C + SUB W,C + IMUL W,C + IDIV W,C + AND W,C + IOR W,C + LSH W,(C) + XOR W,C + SETCM W,C + MOVN W,C + REPEAT 7,<JRST STRSAT> + + +FSYMT: PUSHJ P,RDHLF ;FIRST HALF OF SYMBOL + HRL V,W + PUSHJ P,RDHLF + HRR V,W + PUSH D,A ;SAVE STORE TYPE + PUSHJ P,RDHLF ;GET BLOCK NAME + HRL C,W + PUSHJ P,RDHLF + HRR C,W + TLO C,140000 ;MAKE BLOCK NAME + PUSHJ P,SDEF ;FIND IT + CAMN A,B + JRST FNOLOC ;MUST NOT BE LOADING LOCALS +FSLP: LDB C,[POINT 32,-1(A),35] ;GET NAME + CAMN C,V + JRST FNDSYM + SUB A,SE3 + CAME A,B ;ALL DONE? + JRST FSLP ;NO +FNOLOC: POP D,A + MOVEI A,0 ;SET FOR A FAKE FIXUP + AOS (P) + POPJ P, +FNDSYM: MOVEI W,(A) ;LOC OF SYMBOL + SUB W,HISTRT + POP D,A + AOS (P) + POPJ P, + +LFSYM: ADD V,HISTRT + HRLM W,(V) + MOVSI D,400000 ;LEFT HALF + JRST COMSFX +RHSYM: ADD V,HISTRT + HRRM W,(V) + MOVSI D,200000 + JRST COMSFX +FAKESY: POPJ P, ;IGNORE + + + POLSAT: PUSH P,C ;SAVE SYMBOL + MOVE C,V ;POINTER + PUSHJ P,SREQ ;GO FIND IT + SKIPA + JRST LOAD4A ;SOMETHING IS ROTTEN IN DENMARK + MOVEM W,2(A) ;STORE VALUE + HLRZS C ;NOW FIND HEADER + PUSHJ P,SREQ + SKIPA + JRST LOAD4A + HRLZI V,-1 ;AND DECREMENT COUNT + ADDB V,2(A) + TLNN V,-1 ;IS IT NOW 0 + JRST PALSAT ;YES, GO DO POLISH + POP P,C ;RESTORE SYMBOL + JRST SYM2W1 ;AND RETURN + +PALSAT: PUSH P,W ;SAVE VALUE + MOVEM C,HDSAV ;SAVE THE HEADER NUMBER + MOVE D,[IOWD PPDL,PPDB] ;SET UP A PDL + MOVE C,V ;GET THE POINTER + HRL C,HDSAV ;AND THE FIXUP NUMBER + PUSHJ P,REMSYM ;REMOVE THE HEADER FORM EXISTANCE + PUSHJ P,SREQ ;GO FINE THE NEXT LINK + SKIPA + JRST LOAD4A ;LOSE + ANDI C,37 ;GET OPERATOR TYPE + HRRZ V,2(A) ;PLACE TO STORE + PUSH D,V + PUSH D,[XWD 400000,0] + PUSH D,C ;THIS HAD BETTER BE A STORE OR WE ARE IN TROUBLE + HLRZ C,2(A) ;GET POINTER TO POLISH CHAIN +PSAT1: PUSHJ P,REMSYM ;REMOVE SYMBOL + + + + PSAT2: HRL C,HDSAV ;GET FIXUP NUMBER + PUSHJ P,SREQ ;LOOK FOR IT + SKIPA + JRST LOAD4A + ANDI C,37 ;THE OPERATOR NUMBER + CAIN C,2 ;IS IT AN OPERAND? + JRST PSOPD ;YES, GO PROCESS + PUSH D,C ;YES STORE IT + SKIPN DESTB-3(C) ;IS IT UNARY + JRST PSUNOP ;YES + HLRZ C,2(A) ;GET FIRST OPERAND + HRLI C,600000 ;AND MARK AS VALUE + PUSH D,C +PSUNOP: HRRZ C,2(A) ;OTHER OPERAND + JRST PSAT1 ;AND AWAY WE GO + +PSOPD: MOVE C,2(A) ;THIS IS A VALUE + PUSHJ P,REMSYM ;GET RID OF THAT PART OF THE CHAIN +PSOPD1: SKIPG V,(D) ;IS THERE A VALUE IN THE STACK + JRST PSOPD2 ;YES, TAKE GOOD CARE OF IT +COMOP: POP D,V ;NO, GET THAT OPERATOR OUT OF THERE + XCT OPTAB-3(V) ;AND DO IT + MOVE C,W ;GET RESULT IN RIGHT PLACE + JRST PSOPD1 ;AND TRY FOR MORE +PSOPD2: TLNE V,200000 ;IS IT A POINTER + JRST DBLOP ;YES, NEEDS MORE WORK + MOVE W,C ;NO, ONE WE HAVE IS FIRST OPND, GET IT INTO W + POP D,C ;VALUE POINTER + POP D,C ;2ND OPERAND INTO C + JRST COMOP ;GO PROCESS OPERATOR + +DBLOP: EXCH C,(D) ;PUT VALUE IN STACK AND RETRIEV POINTER + PUSH D,[XWD 400000,0] ;MARK AS VALUE + JRST PSAT2 ;AND GO LOOK FOR MORE TROUBLE + +LINK: PUSHJ P,PRWORD ;GET TWO WORDS + JUMPLE C,ENDLNK ;THIS IS AN END OF LINK WORD + CAILE C,20 ;IS IT IN RANGE? + JRST LOAD4A + HRRZ V,W ;GET THE ADDRESS +IFN REENT,< + CAMGE V,HVAL1 ;CHECK HISEG ADDRESS + SKIPA X,LOWX ;LOW SEGMENT + MOVE X,HIGHX ;HIGH SEGMENT BASE +>;IF REENT + HRRZ W,LINKTB(C) ;GET CURRENT LINK +IFN L,< CAML V,RINITL ;LOSE> + HRRM W,@X ;PUT INTO CORE + HRRM V,LINKTB(C) ;SAVE LINK FOR NEXT ONE +IFN REENT,< + PUSHJ P,RESTRX ;RESTORE X +>;IF REENT + JRST LINK ;GO BACK FOR MORE +ENDLNK: MOVNS C ;GET ENTRY NUMBER + JUMPE C,LOAD4A ;0 IS A LOSER + CAILE C,20 ;CHECK RANGE + JRST LOAD4A + HRLM W,LINKTB(C) ;SAVE END OF LINK INFO + JRST LINK ;MORE + + + STRSAT: MOVE W,C ;GET VALUE TO STORE IN W + MOVE C,V ;GET OPERATOR HERE + POP D,V + POP D,V ;GET ADDRESS TO STORE + PUSHJ P,@STRTAB-15(C) +IFN REENT,<PUSHJ P,RESTRX> + POP P,W ;RESTORE THINGS + POP P,C + JRST SYM2W1 + +ALSYM: ADD V,HISTRT + MOVEM W,(V) + MOVSI D,600000 +> + LIST ;END OF FAILSW CODE +IFN FAILSW!WFWSW,< +COMSFX: IFN REENT,<PUSHJ P,SYMFX1 ;WAS IFE, I THINK THAT'S WRONG -- DCS + JRST RESTRX> +IFE REENT,<JRST SYMFX1>> ;WAS IFN, I THINK THAT'S WRONG -- DCS + +REMSYM: MOVE T,1(S) + MOVEM T,1(A) + MOVE T,2(S) + MOVEM T,2(A) + ADD S,SE3 + MOVEM A,SVA + POPJ P, + + + + SUBTTL LIBRARY INDEX (BLOCK TYPE 14) + + COMMENT * DIRECT ACCESS LIBRARY SEARCH MODE + INDEX WRITTEN BY FUDGE2.SEE DIDAL DOC (100-540-001-00) + DESIGN AND CODING BY D.M.NIXON JUL-AUG 1970 + * + +IFN DIDAL,< + +INDEX8: POP P,LSTBLK ;SET UP LSTBLK FOR NEXT PROG + PUSHJ P,WORD ;READ FIRST WORD + HLRZ A,W ;BLOCK TYPE ONLY + CAIE A,14 ;IS IT AN INDEX? + JRST INDEXE ;NO, ERROR + JRST INDEX9 ;DON'T SET FLAG AGAIN + +INDEX0: TRO F,XFLG ;SIGNAL INDEX IN CORE + MOVEI A,1 ;START ON BLOCK 1 (DSK) + HRROM A,LSTBLK ;BUT INDICATE AN INDEX + MOVE A,ILD1 ;INPUT DEVICE + DEVCHR A, + TLNE A,100 ;IS IT A DTA? + TRO F,DTAFLG ;YES +INDEX9: MOVEI A,AUX+2 ;AUX BUFFER + HRLI A,4400 ;MAKE BYTE POINTER + MOVEM A,ABUF1 ;AND SAVE IT + HRL A,BUFR1 ;INPUT BUFFER + BLT A,AUX+201 ;STORE BLOCK + TRO F,LSTLOD ;AND FAKE LAST PROG READ +INDEX1: ILDB T,ABUF1 + HLRE A,T ;GET WORD COUNT + JUMPL A,INDEX3 ;END OF BLOCK IF NEGATIVE + CAIE A,4 ;IS IT ENTRY + JRST INDEX + HRRZS T ;WORD COUNT ONLY +INDEX2: ILDB C,ABUF1 ;GET NEXT SYMBOL + TLO C,040000 ; + PUSHJ P,SREQ ;SEARCH FOR IT + SOJA T,INDEX4 ;REQUEST MATCHES + SOJG T,INDEX2 ;KEEP TRYING + ILDB T,ABUF1 ;GET POINTER WORD + TRZN F,LSTLOD ;WAS LAST PROG LOADED? + JRST INDEX1 ;NO + TRNN F,DTAFLG ;ALWAYS SAVE IF DTA??? + SKIPL LSTBLK ;SKIP IF LAST BLOCK WAS AN INDEX + MOVEM T,LSTBLK ;SAVE POINTER FOR CALCULATIONS + JRST INDEX1 ;GET NEXT PROG + + + INDEX4: ADDM T,ABUF1 + ILDB A,ABUF1 + PUSH P,A ;SAVE THIS BLOCK + TROE F,LSTLOD ;DID WE LOAD LAST PROG? + JRST [SKIPGE LSTBLK ;WAS LAST BLOCK AN INDEX? + JRST NXTBLK ;YES, SO GET NEXT ONE + MOVEM A,LSTBLK + JRST LOAD1] ;NEXT PROG IS ADJACENT + HRRZ T,LSTBLK ;GET LAST BLOCK NUMBER + CAIN T,(A) ;IN THIS BLOCK? + JRST THSBLK ;YES +NXTNDX: TRNE F,DTAFLG ;DIFFERENT TEST FOR DTA + JRST NXTDTA ;CHECK IF NEXT BUFFER IN CORE + CAIN T,-1(A) ;NEXT BLOCK? + JRST NXTBLK ;YES,JUST DO INPUT +INDEX5: USETI 1,(A) ;SET ON BLOCK + WAIT 1, ;LET I/O FINISH + MOVSI C,(1B0) ;CLEAR RING USE BIT IF ON +; ***** THE EQUIV. OF THE NEXT INSTR. MAY WELL BE IN LATER VERSIONS. +; ***** IT WAS MISSING, AND FOULED UP THE INDEX STUFF. (DCS 7-7-71) + HLLM C,BUFR ;INDICATE VIRGIN BUFFER + HRRZ T,BUFR + SKIPL (T) + JRST NXTBLK ;ALL DONE NOW + ANDCAM C,(T) ;CLEAR USE BIT + HRRZ T,(T) ;GET NEXT BUFFER + JRST .-4 ;LOOP + +NXTDTA: WAIT 1, ;LET I/O RUN TO COMPLETION + HRRZ T,BUFR ;GET POINTER TO CURRENT BUFFER + HLRZ T,1(T) ;FIRST DATA WORD IS LINK + CAIE T,(A) ;IS IT BLOCK WE WANT? + JRST INDEX5 ;NO +NXTBLK: IN 1, + JRST NEWBLK ;IT IS NOW + JRST WORD3 ;EOF OR ERROR + +NEWBLK: MOVE A,(P) ;GET CURRENT BLOCK + JUMPL A,INDEX8 ;JUST READ AN INDEX + HLRZS A ;GET WORD COUNT +COMMENT * DCS -- 3/15/71 + This code required modification to work with DEC's FUDGE2 + (with /X) at Stanford. I don't know the formats, so I don't know + if the bugs are unique to Stanford. + In particular, the special 0 test seems to cause all the + trouble -- removing it fixed it. However, my fix may well foul + up with Dectapes (see the SPR for "details?"). +* + +; 0 TEST REMOVED HERE -- DCS + SKIPL LSTBLK ;WAS LAST BLOCK AN INDEX? + AOJA A,INDEX6 ;NO, ALWAYS ONE WORD OUT THEN + HRRZ T,AUX+3 ;GET FIRST ENTRY BLOCK TYPE COUNT + HRRZ T,AUX+4(T) ;GET FIRST POINTER WORD + MOVEM T,LSTBLK ;SOME WHERE TO STORE IT + HRRZ T,(P) ;GET CURRENT BLOCK NUMBER + CAME T,LSTBLK ;SAME BLOCK + AOJA A,INDEX6 ;NO + TRNN F,DTAFLG ;BUFR2 OK IF DTA + SOS BUFR2 ;ONE WORD TOO MANY THOUGH + JRST INDEX6 ;YES, WORD COUNT WILL BE CORRECT +; IF A IS 0, INDEX6≡INDEX7 -- DCS + + + THSBLK: SUB A,LSTBLK ;GET WORD DIFFERENCE + MOVSS A ;INTO RIGHT HALF +INDEX6: ADDM A,BUFR1 + MOVNS A + ADDM A,BUFR2 +INDEX7: POP P,LSTBLK ;STORE THIS AS LAST BLOCK READ + JRST LOAD1 + +INDEX3: HRRE A,T ;GET BLOCK # OF NEXT INDEX + JUMPL A,EOF ;FINISHED IF -1 + PUSH P,T ;STACK THIS BLOCK + HRRZ T,LSTBLK ;GET LAST BLOCK + JRST NXTNDX ;CHECK IF NEXT BUFFER IN CORE + +INDEX: IN 1, ;GET NEXT BUFFER + SOSA BUFR2 ;O.K. RETURN, BUT 1 WORD TOO MANY + JRST WORD3 ;ERROR OR EOF + PUSHJ P,WORD ;READ FIRST WORD +INDEXE: TRZE F,XFLG ;INDEX IN CORE? + TTCALL 3,[ASCIZ /LIBRARY INDEX INCONSISTENT - CONTINUING +/] ;WARNING MESSAGE + JRST LOAD1A+1 ;AND CONTINUE +> + + + + SUBTTL ALGOL OWN BLOCK (TYPE 15) + +IFN ALGSW,< +ALGBLK: +IFN SAILSW,<TRNN F,ALGFL ;IF NOT ALGOL + JRST LDPRG ;MUST BE SAIL BLOCK TYPE 15> + PUSHJ P,RWORD ;READ 3RD WORD + HLRZ V,W ;GET START OF OWN BLOCK + MOVEI C,(W) ;GET LENGTH OF OWN BLOCK + MOVEM C,OWNLNG ;SAVE IT TO FIX RELOC AT END + PUSHJ P,ALGB2 ;FIX AND CHECK PROG BREAK + ADDI V,(R) ;RELOCATE + MOVEI W,(V) ;GET CURRENT OWN ADDRESS + EXCH W,%OWN ;SAVE FOR NEXT TIME + MOVEM W,@X ;STORE LAST OWN ADDRESS IN LEFT HALF +ALGB1: PUSHJ P,RWORD ;GET DATA WORD + HLRZ V,W ;GET ADDRESS TO FIX UP + HRRZS W ;RIGHT HALF ONLY + ADD W,%OWN ;ADD IN ADDRESS OF OWN BLOCK + ADDM W,@X ;FIX UP RIGHT HALF + JRST ALGB1 ;LOOP TIL DONE + +ALGNAM: JUMPE W,CPOPJ ;NOT ALGOL MAIN PROG + TROE F,ALGFL ;SET ALGOL SEEN FLAG + JRST ALGER1 ;ONLY ONE ALGOL MAIN PROG ALLOWED +IFN REENT,<TRNN F,SEENHI ;ANYTHING IN HIGH SEGMENT?> + CAME R,[XWD W,JOBDA] ;ANYTHING LOADED IN LOW SEGMENT? + JRST ALGER2 ;YES, ERROR ALSO + SETZM %OWN ;INITIALISE OWN AREA POINTER +IFN REENT,<TRO F,VFLG ;DEFAULT RE-ENTRANT OP-SYSTEM> +ALGB2: ADDI H,(W) ;FIX PROG BREAK +IFN REENT,<CAML H,HILOW + MOVEM H,HILOW ;HIGHEST LOW CODE LOADED> + CAILE H,1(S) ;SKIP IF SUFFICIENT CORE AVAILABLE +IFN EXPAND,<JRST [PUSHJ P,XPAND> + JRST FULLC +IFN EXPAND,< JRST .+1]> + POPJ P, + +ALGER1: ERROR ,</ONLY ONE ALGOL MAIN PROGRAM ALLOWED#/> + JRST LD2 + +ALGER2: ERROR ,</ALGOL MAIN PROGRAM MUST BE LOADED FIRST#/> + JRST LD2 + +> + + + SUBTTL SAIL BLOCK TYPE 15 + +COMMENT * BLOCK TYPE 15 AND 16. SIXBIT FOR FIL,PPN,DEV +IN THE BLOCK. SEARCH TABLE FOR ALREADY REQUESTED. IF NOT +ENTER REQUEST. ORIGINAL CODE BY DCS REWRITTEN BY WFW* + +IFN SAILSW,< +IFE ALGSW<ALGBLK:> +LDPRG: MOVEI D,PRGFLS-1 ;SET UP SOMETHING WE CAN SEARCH WITH + MOVE W,PRGPNT ;AND CURRENT POINTER + PUSHJ P,LDSAV ;GO ENTER (WILL NOT RETURN IF RUNS OUT) + MOVEM D,PRGPNT + JRST LDPRG ;BACK FOR MORE +LDLIB: MOVEI D,LIBFLS-1 + MOVE W,LIBPNT + PUSHJ P,LDSAV + MOVEM D,LIBPNT + JRST LDLIB ;LOOKS JUST LIKE THE LAST ONE, DOESN'T IT + +LDSAV: HRLI D,-RELLEN-1 ;GET AOBJN SET UP + MOVEM W,LODPN2# ;SAV IT + PUSHJ P,PRWORD ;GET FILE,PPN + MOVE A,W ;SAVE ONE + PUSHJ P,RWORD ;AND DEVICE +FILSR: CAMN D,LODPN2 + JRST FENT ;HAVE GOTTEN THERE, ENTER FILE + CAME C,PRGFIL(D) ;CHECK FOR MATCH + JRST NOMT ;NOT FILE + CAME A,PRGPPN(D) + JRST NOMT ;NO PPN + CAME W,PRGDEV(D) +NOMT: AOBJN D,FILSR ;AND NOT DEVICE SHOULD ALWAYS JUMP + MOVE D,LODPN2 + POPJ P, ;JUST RETURN CURRENT POINTER +FENT: MOVE D,LODPN2 ;ENTER IT + AOBJP D,WRONG ;THAT IS IF NOT TOO MANY + MOVEM C,PRGFIL-1(D) ;HAVE ALREADY INDEXED + MOVEM A,PRGPPN-1(D) ;HENCE THE -1 + MOVEM W,PRGDEV-1(D) + POPJ P, +WRONG: ERROR ,</TOO MANY DEMANDED FILES#/> + JRST LD2 +> + + + SUBTTL SYMBOL TABLE SEARCH SUBROUTINES + +; ENTERED WITH SYMBOL IN C +; RETURN IS WITH POINTER IN A IF MATCHING SYMBOL FOUND +; OTHERWISE, A SKIP ON RETURN OCCURS + +SREQ: JUMPGE S,CPOPJ1 ;JUMP IF NO UNDEF. SYMBOLS + SKIPA A,S ;LOAD REQUEST SEARCH POINTER +SDEF: MOVE A,B ;LOAD DEF. SYMBOL SEARCH POINTER +SDEF1: CAMN C,1(A) + POPJ P, ;SYMBOLS MATCH, RETURN +IFE K,< TLNE N,F4SW ;ARE WE IN FORTRAN? + JRST SDEF2 ;YES,JUST TRY NEXT SYMBOL> + TLC C,400000 ;MIGHT BE SUPPRESSED INTERNAL + CAMN C,1(A) ;WAS IT? + JRST [TLO C,400000 ;YES, SO ENSURE IT'S SUPPRESSED + MOVEM C,1(A) ;STORE SUPPRESSED DEFINITION + POPJ P,] ;YES + TLC C,400000 ;NO,TRY NEXT SYMBOL +SDEF2: ADD A,SE3 + JUMPL A,SDEF1 +IFE K,< JRST CPOPJ1 ;SYMBOL NOT FOUND SKIPS ON RETURN> +IFN K,< +CPOPJ1: AOS (P) + POPJ P,> + + + SUBTTL RELOCATION AND BLOCK INPUT + +PRWORD: PUSHJ P,RWORD ;READ A WORD PAIR + MOVE C,W ;LOAD C WITH FIRST DATA WORD + TRNE E,377777 ;TEST FOR END OF BLOCK + JRST RWORD1 ;INPUT SECOND WORD OF PAIR + MOVEI W,0 ;NO SECOND WORD, ASSUME ZERO + POPJ P, + +RWORD: TRNN E,377777 ;TEST FOR END OF BLOCK + JRST LOAD1 ;RETURN TO LOAD THE NEXT BLOCK +RWORD1: AOBJN E,RWORD2 ;JUMP IF DATA WORD NEXT + PUSHJ P,WORD ;READ CONTROL WORD + MOVE Q,W ;DON'T COUNT RELOCATION WORDS + HRLI E,-22 ;SET RELOCATION WORD BYTE COUNT +RWORD2: PUSHJ P,WORD ;READ INPUT WORD + JUMPGE Q,RWORD3 ;TEST LH RELOCATION BIT + TRNN F,TWOFL ;POSSIBLE TWO SEGMENTS? + JRST RWORD5 ;NO + MOVSS W + PUSHJ P,CHECK ;USE CORRECT RELOCATION + HRRI W,@R + MOVSS W + JRST RWORD3 ;AND TEST RIGHT HALF +RWORD5: HRLZ T,R + ADD W,T ;LH RELOCATION +RWORD3: TLNN Q,200000 ;TEST RH RELOCATION BIT + JRST RWORD4 ;NOT RELOCATABLE + TRNE F,TWOFL ;POSSIBLE TWO SEGMENTS? + PUSHJ P,CHECK ;USE CORRECT RELOCATION + HRRI W,@R ;RH RELOCATION +RWORD4: LSH Q,2 + POPJ P, + +CHECK: MOVE T,HVAL1 ;START OF HISEGMENT + CAIG T,NEGOFF(W) ;IN HISEG? + JRST [SUBI W,(T) ;YES REMOVE OFSET + POPJ P,] + HRRI W,@LOWR ;USE LOW SEG RELOC + JRST CPOPJ1 ;SKIP RETURN + + + SUBTTL PRINT STORAGE MAP SUBROUTINE + +PRMAP: CAIN D,1 ;IF /1M PRINT LOCAL SYMBOLS + TROA F,LOCAFL ;YES,TURN ON FLAG + TRZ F,LOCAFL ;CLEAR JUST IN CASE + PUSHJ P,FSCN1 ;LOAD OTHER FILES FIRST + PUSHJ P,CRLFLF ;START NEW PAGE + HRRZ W,R +IFN REENT,<CAIG W,JOBDA ;LOADED INTO LOW SEGMENT + JRST NOLOW ;DON'T PRINT IF NOTHING THERE> + PUSHJ P,PRNUM0 +IFE REENT,<ERROR 7,<?IS THE PROGRAM BREAK@?>> +IFN REENT,<ERROR 7,<?IS THE LOW SEGMENT BREAK@?> + PUSHJ P,CRLF ;CR-LF ON ALL BUT TTY +NOLOW: MOVE W,HVAL ;HISEG BREAK + CAMG W,HVAL1 ;HAS IT CHANGED + JRST NOHIGH ;NO HI-SEGMENT + TLO F,FCONSW ;FORCE OUT HI-SEG BREAK ALSO + PUSHJ P,PRNUM0 + ERROR 7,<?IS THE HIGH SEGMENT BREAK@?> + PUSHJ P,CRLF +NOHIGH:> +IFE NAMESW,< MOVE W,DTOUT ;OUTPUT NAME > +IFN NAMESW,< SKIPN W,DTOUT + MOVE W,CURNAM ;USE PROGRAM NAME> + JUMPE W,.+3 ;DON'T PRINT IF NOT THERE + PUSHJ P,PWORD + PUSHJ P,SPACES ;SOME SPACES + ERROR 0,<?STORAGE MAP!?> + PUSHJ P,SPACES ;SOME SPACES + PUSH P,N + PUSH P,E + MOVE N,[POINT 6,DBUF] ;INITIALIZE DATE POINTER + MSTIME Q, ;GET THE TIME + IDIVI Q,↑D60*↑D1000 + IDIVI Q,↑D60 + PUSH P,A ;SAVE MINUTES + PUSHJ P,OTOD1 ;STORE HOURS + POP P,Q ;GET MINUTES + PUSHJ P,OTOD ;STORE MINUTES + DATE E, ;GET DATE + IDIVI E,↑D31 ;GET DAY + ADDI Q,1 + PUSHJ P,OTOD ;STORE DAY + IDIVI E,↑D12 ;GET MONTH + ROT Q,-1 ;DIV BY 2 + HRR A,DTAB(Q) ;GET MNEMONIC + TLNN Q,400000 + HLR A,DTAB(Q) ;OTHER SIDE + HRRM A,DBUF+1 ;STORE IT + MOVEI Q,↑D64(E) ;GET YEAR + MOVE N,[POINT 6,DBUF+2] + PUSHJ P,OTOD ;STORE IT + POP P,E + POP P,N + PUSHJ P,DBUF1 + PUSHJ P,CRLF + SKIPN STADDR ;PRINT STARTING ADDRESS + JRST NOADDR ;NO ADDRESS SEEN + ERROR 0,</STARTING ADDRESS !/> + PUSHJ P,SP1 + MOVE W,STADDR ;GET ST. ADDR. + PUSHJ P,PRNUM0 ;PRINT IT +IFN NAMESW,< + PUSHJ P,SP1 + MOVE W,[SIXBIT / PROG /] + PUSHJ P,PWORD + MOVE W,CURNAM ;PROG NAME + PUSHJ P,PWORD + PUSHJ P,SP1 + MOVE W,ERRPT6 ;SIXBIT / FILE / + PUSHJ P,PWORD + MOVE W,PRGNAM ;FILE NAME + PUSHJ P,PWORD> +NOADDR: IFN REENT,< + HRRZ A,HVAL1 ;GET INITIAL HIGH START + ADDI A,JOBHDA ;ADD IN OFFSET + HRLI A,JOBDA ;LOW START + MOVSM A,SVBRKS ;INITIAL BREAKS> + HLRE A,B + MOVNS A + ADDI A,(B) +PRMAP1: SUBI A,2 +IFN REENT,<SKIPN C,1(A) ;LOAD SYMBOL SKIP IF REAL SYMBOL + JRST PRMAP4 ;IGNORE ZERO NAME(TWOSEG BREAKS)> +IFE REENT,<MOVE C,1(A) ;LOAD SYMBOL> + TLNN C,300000 ;TEST FOR LOCAL SYMBOL + JRST .+4 ;GLOBAL (NOT LOCAL ANYWAY) + TRNN F,LOCAFL ;PRINT LOCAL SYMBOLS? + JRST PRMAP4 ;IGNORE LOCAL SYMBOLS + TLC C,140000 ;MAKE IT LOOK LIKE INTERN + TLNE C,040000 + JRST PRMP1A + PUSHJ P,CRLF + PUSHJ P,CRLF + SETZM TABCNT + JRST PRMP1B + + + PRMP1A: PUSHJ P,TAB +PRMP1B: PUSHJ P,PRNAM1 ;PRINT SYMBOL AND VALUE + TLNE C,040000 + JRST PRMAP4 ;GLOBAL SYMBOL + HLRE C,W ;POINTER TO NEXT PROG. NAME + HRRZS W ;SO WE ONLY HAVE THE HALF WE WANT +PRMAP7: JUMPL C,PRMP7A +IFN REENT,<SKIPN 1(B) ;IS IT A ZERO SYMBOL + JRST [MOVE C,B ;SET UP C + JRST PRMAP2] ;AND GO + HRRZ T,HVAL ;GET TO OF HI PART + CAML W,HVAL1 ;IS PROGRAM START UP THERE?? + JRST PRMAP6 ;YES + HRRZ T,HILOW ;GET HIGHEST LOCATION LOADED IN LOW + SUBI T,(X) ;REMOVE OFFSET + CAIE T,(W) ;EQUAL IF ZERO LENGTH PROG> + HRRZ T,R ;GET LOW, HERE ON LAST PROG + JRST PRMAP6 ;GO + +PRMP7A: ADDI C,2(A) ;POINTER TO NEXT PROGRAM NAME +PRMAP2: IFN REENT,< + SKIPE 1(C) ;THIS IS A TWO SEG FILE + JRST PRMP2A ;NO + MOVE T,2(C) ;GET PROG BREAKS + TLNN T,-1 ;IF NO HIGH STUFF YET + HLL T,SVBRKS ;FAKE IT + SUB T,SVBRKS ;SUBTRACT LAST BREAKS + HRRZ W,T ;LOW BREAK + PUSH P,W ;SAVE IT + JUMPGE T,.+2 ;IF NEGATIVE + TDZA W,W ;MAKE ZERO (FIRST TIME THRU) + HLRZ W,T ;GET HIGH BREAK + PUSHJ P,PRNUM ;PRINT IT + PUSHJ P,TAB ;AND TAB + POP P,W ;LOW BREAK + PUSHJ P,PRNUM + MOVE T,2(C) + CAMN C,B ;EQUAL IF LAST PROG + SETZ C, ;SIGNAL END + TLNN T,-1 + HLL T,SVBRKS + CAMN T,SVBRKS ;ZERO LENGTT IF EQUAL + JRST PRMP6A ;SEE IF LIST ALL ON + MOVEM T,SVBRKS ;SAVE FOR NEXT TIME + JRST PRMAP3 ;AND CONTINUE +PRMP2A:> + HRRZ T,(C) ;GET ITS STARTING ADRESS +IFN REENT,<CAMGE W,HVAL1 ;MAKE SURE BOTH IN SAME SEGMENT + CAMGE T,HVAL1 + CAMGE T,W + JRST [HLRE T,(C) ;NO TRY NEXT ONE DOWN + JUMPE T,@PRMAP7 ;END GO USE PROG BREAK + ADDI C,(T) + JRST PRMAP2] ;CHECK THIS ONE> +PRMAP6: SUBM T,W ;SUBTRACT ORIGIN TO GET LENGTH + PUSHJ P,PRNUM ;PRINT PROGRAM LENGTH + PUSHJ P,CRLF +PRMP6A: TLNN N,ALLFLG ;SKIP IF LIST ALL MODE IS ON + TRNE W,777777 ;SKIP IF ZERO LENGTH PROGRAM + JRST PRMAP3 + HLRE C,2(A) ;GET BACK CORRECT LOCATION IF 0 LENGTH + JUMPE C,PRMAP5 ;JUMP IF LAST PROGRAM + ADDI C,2(A) ;IN CASE WE SKIPPED SOME PROGRAMS + SKIPA A,C ;SKIP GLOBALS, ZERO LENGTH PROG. +PRMAP3: PUSHJ P,CRLF +PRMAP4: CAILE A,(B) ;TEST FOR END OF SYMBOL TABLE + JRST PRMAP1 +PRMAP5: PUSHJ P,CRLF ;GIVE AN XTRA CR-LF + + + + SUBTTL LIST UNDEFINED AND MULTIPLY DEFINED GLOBALS + + PUSHJ P,PMS1 ;PRINT UNDEFINED SYMBOLS + +;LIST NUMBER OF MULTIPLY DEFINED GLOBALS + +PMS3: SKIPN W,MDG ;ANY MULTIPLY DEFINED GLOBALS + JRST PMS4 ;NO, EXCELSIOR + PUSHJ P,FCRLF ;ROOM AT THE TOP + PUSHJ P,PRQ ;PRINT ? + PUSHJ P,PRNUM0 ;NUMBER OF MULTIPLES + ERROR 7,<?MULTIPLY DEFINED GLOBALS@?> +PMS4: TLNE N,AUXSWE ;AUXILIARY OUTPUT DEVICE? + OUTPUT 2, ;INSURE A COMPLETE BUFFER + POPJ P, ;RETURN + +;LIST UNDEFINED GLOBALS + +PMS1: PUSHJ P,FSCN1 ;LOAD FILES FIRST + JUMPGE S,CPOPJ ;JUMP IF NO UNDEFINED GLOBALS + PUSHJ P,FCRLF ;START THE MESSAGE + HLRE W,S ;COMPUTE NO. OF UNDEF. GLOBALS + MOVMS W + LSH W,-1 ;<LENGTH OF LIST>/2 + PUSHJ P,PRNUM0 + ERROR 7,</UNDEFINED GLOBALS@/> + MOVE A,S ;LOAD UNDEF. POINTER +PMS2: SKIPL W,1(A) + TLNN W,40000 + JRST PMS2A + PUSHJ P,FCRLF + PUSHJ P,PRNAM0 ;PRINT SYMBOL AND POINTER +PMS2A: ADD A,SE3 + JUMPL A,PMS2 +CPOPJ: POPJ P, + +PMS: PUSHJ P,PMS1 ;PRINT UNDEFINED SYMBOLS + JUMPGE S,CPOPJ ;NO UNDEFINED SYMBOLS + PUSHJ P,CRLF ;NEW LINE,MAKE ? VISIBLE + PUSHJ P,PRQ ;FIX FOR BATCH TO PRINT ALL SYMBOLS + JRST CRLF ;SPACE AFTER LISTING + + + SUBTTL ENTER FILE ON AUXILIARY OUTPUT DEVICE + +IAD2: PUSH P,A ;SAVE A FOR RETURN + MOVE A,LD5C1 ;GET AUX. DEV. + DEVCHR A, ;GET DEVCHR + TLNN A,4 ;DOES IT HAVE A DIRECTORY + JRST IAD2A ;NO SO JUST RETURN + MOVE A,DTOUT ;GET OUTPUT NAME + CAME A,[SIXBIT /JOBDAT/] ;DON'T USE JOBDAT + JUMPN A,IAD2A ;USE ANYTHING NON-ZERO + MOVSI A,(SIXBIT /DSK/) ;DEFAULT DEVICE + CAMN A,LD5C1 ;IS IT AUX. DEV. + JRST .+5 ;YES LEAVE WELL ALONE + CLOSE 2, ;CLOSE OLD AUX. DEV. + MOVEM A,LD5C1 ;SET IT TO DSK + OPEN 2,OPEN2 ;OPEN IT FOR DSK + JRST IMD4 ;FAILED +IFN NAMESW,< SKIPN A,CURNAM ;USE PROG NAME> + MOVSI A,(SIXBIT /MAP/) ;AN UNLIKELY NAME + MOVEM A,DTOUT ;SO ENTER WILL NOT FAIL +IAD2A: POP P,A ;RECOVER A + SETZM DTOUT+2 ;CLEAR PROTECTION (LEVEL D) + ENTER 2,DTOUT ;WRITE FILE NAME IN DIRECTORY + JRST IMD3 ;NO MORE DIRECTORY SPACE + POPJ P, + +IMD3: ERROR ,</DIR. FULL@/> + JRST LD2 + +IMD4: MOVE P,[XWD -40,PDLST] ;RESTORE STACK + TLZ N,AUXSWE!AUXSWI ;NO AUX.DEV.NOW + ERROR ,</NO MAP DEVICE@/> + JRST PRMAP5 ;CONTINUE TO LOAD + + + + SUBTTL PRINT SUBROUTINES + +;PRINT THE 6 DIGIT OCTAL ADDRESS IN W + +; ACCUMULATORS USED: D,T,V + +PRNAM0: MOVE C,1(A) ;LOAD SYMBOL +PRNAM1: MOVE W,2(A) ;LOAD VALUE +PRNAM: PUSHJ P,PRNAME +PRNUM: + TRNN F,TTYFL + PUSHJ P,SP1 + PUSHJ P,SP1 +PRNUM0: MOVE V,PRNUM2 ;LOAD BYTE POINTER TO RH. OF W + MOVNI D,6 ;LOAD CHAR. COUNT +PRNUM1: ILDB T,V ;LOAD DIGIT TO BE OUTPUT + ADDI T,60 ;CONVERT FROM BINARY TO ASCII + PUSHJ P,TYPE2 + AOJL D,PRNUM1 ;JUMP IF MORE DIGITS REMAIN + POPJ P, + +PRNUM2: XWD 220300,W + + + + +IFN NAMESW,< +LDNAM: MOVE T,[POINT 6,CURNAM] ;POINTER + MOVNI D,6 ;SET COUNT + TLZ W,740000 ;REMOVE CODE BITS +SETNAM: IDIVI W,50 ;CONVERT FROM RAD 50 + HRLM C,(P) + AOJGE D,.+2 + PUSHJ P,SETNAM + HLRZ C,(P) + JUMPE C,INAM + ADDI C,17 + CAILE C,31 + ADDI C,7 + CAIG C,72 ;REMOVE SPECIAL CHARS. (. $ %) + IDPB C,T +INAM: POPJ P, > + + +;YE OLDE RECURSIVE NUMBER PRINTER +;PRINTS Q, WITH LEADING ZEROES SUPPRESSED; USES A AND T + +RCNUM: IDIVI Q,12 ;RADIX DECIMAL + ADDI A,"0" + HRLM A,(P) + JUMPE Q,.+2 + PUSHJ P,RCNUM + HLRZ T,(P) + JRST TYPE2 + + +SPACES: PUSHJ P,SP1 +SP1: PUSHJ P,SPACE +SPACE: MOVEI T,40 + JRST TYPE2 + + + ; ACCUMULATORS USED: Q,T,D + +PWORD: MOVNI Q,6 ;SET CHARACTER COUNT TO SIX +PWORD1: MOVE D,LSTPT ;ENTER HERE WITH Q PRESET +PWORD2: ILDB T,D ;LOAD NEXT CHAR. TO BE OUTPUT + PUSHJ P,TYPE ;OUTPUT CHARACTER + AOJL Q,PWORD2 + POPJ P, + + +;TYPEOUT SUBROUTINE - THE CHARACTER SUPPLIED IN T IS CONVERTED TO ASCII +;AND IS OUTPUT ON THE CONSOLE AND/OR THE SPECIFIED LOADER MAP OUTPUT +;DEVICE + +CRLFLF: PUSHJ P,CRLF +FCRLF: TLO F,FCONSW ;INSURE TTY OUTPUT +CRLF: MOVEI T,15 ;CARRIAGE RETURN LINE FEED + PUSHJ P,TYPE2 + TRCA T,7 ;CR.XOR.7=LF +TYPE: MOVEI T,40(T) ;CONVERT SIXBIT TO ASCII +TYPE2: TLNN N,AUXSWI ;IS THER AN AUXILIARY DEVICE? + JRST TYPE3 ;NO, DONT OUTPUT TO IT + TLON N,AUXSWE ;IS AUX. DEV. ENTERED? + PUSHJ P,IAD2 ;NOPE, DO SO! + SOSG ABUF2 ;SPACE LEFT IN BUFFER? + OUTPUT 2, ;CREATE A NEW BUFFER + IDPB T,ABUF1 ;DEPOSIT CHARACTER + TLNN F,FCONSW ;FORCE OUTPUT TO CONSOLE TOO? + POPJ P, ;NOPE +TYPE3: IFN RPGSW,< + TRNE F,NOTTTY ;IF TTY IS ANOTHER DEVICE + POPJ P, ;DON'T OUTPUT TO IT> + SKIPN BUFO2 ;END OF BUFFER + OUTPUT 3, ;FORCE OUTPUT NOW + IDPB T,BUFO1 ;DEPOSIT CHARACTER + CAIN T,12 ;END OF LINE + OUTPUT 3, ;FORCE AN OUTPUT + POPJ P, + + + SUBTTL SYMBOL PRINT - RADIX 50 + +; ACCUMULATORS USED: D,T + +PRNAME: MOVE T,C ;LOAD SYMBOL + TLZ T,740000 ;ZERO CODE BITS + PUSH P,T + PUSH P,C + MOVEI C,6 + MOVEI D,1 + IDIVI T,50 + JUMPN V,.+2 + IMULI D,50 + SOJN C,.-3 + POP P,C + POP P,T + IMUL T,D + MOVNI D,6 ;LOAD CHAR. COUNT +SPT: IDIVI T,50 ;THE REMAINDER IS THE NEXT CHAR. + HRLM V,(P) ;STORE IN LH. OF PUSHDOWN LIST + AOJGE D,.+2 ;SKIP IF NO CHARS. REMAIN + PUSHJ P,SPT ;RECURSIVE CALL FOR NEXT CHAR. + HLRZ T,(P) ;LOAD FROM LH. OF PUSHDOWN LIST + JUMPE T,TYPE ;BLANK + ADDI T,60-1 + CAILE T,71 + ADDI T,101-72 + CAILE T,132 + SUBI T,134-44 + CAIN T,43 + MOVEI T,56 + JRST TYPE2 + +TAB1: SETZM TABCNT + PUSHJ P,CRLF +TAB: AOS T,TABCNT + CAIN T,5 + JRST TAB1 + TRNE F,TTYFL + JRST SP1 + MOVEI T,11 + JRST TYPE2 + + + + +OTOD: IBP N +OTOD1: IDIVI Q,↑D10 + ADDI Q,20 ;FORM SIXBIT + IDPB Q,N + ADDI A,20 + IDPB A,N + POPJ P, + +DTAB: SIXBIT /JANFEB/ + SIXBIT /MARAPR/ + SIXBIT /MAYJUN/ + SIXBIT /JULAUG/ + SIXBIT /SEPOCT/ + SIXBIT /NOVDEC/ + + + + SUBTTL ERROR MESSAGE PRINT SUBROUTINE + +; FORM OF CALL: + +; JSP A,ERRPT +; SIXBIT /<MESSAGE>/ + +; ACCUMULATORS USED: T,V,C,W + +ERRPT: TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,CRLF ;ROOM AT THE TOP + PUSHJ P,PRQ ;START OFF WITH ? +ERRPT0: PUSH P,Q ;SAVE Q + SKIPA V,ERRPT5 +ERRPT1: PUSHJ P,TYPE + ILDB T,V + CAIN T,"@"-40 + JRST ERRPT4 + CAIN T,"%"-40 + JRST ERRPT9 + CAIN T,"!"-40 + JRST ERRP42 ;JUST RETURN,LEAVE FCONSW ON + CAIE T,"#"-40 + JRST ERRPT1 + SKIPN C,DTIN + JRST ERRPT4 + MOVNI Q,14 + MOVEI W,77 +ERRPT2: TDNE C,W + JRST ERRPT3 + LSH W,6 + AOJL Q,ERRPT2 +ERRPT3: MOVE W,ERRPT6 + PUSHJ P,PWORD1 + SKIPN W,DTIN1 + JRST ERRPT4 + LSH W,-6 + TLO W,160000 + MOVNI Q,4 + PUSHJ P,PWORD1 +ERRPT4: PUSHJ P,CRLF +ERRP41: TLZ F,FCONSW ;ONE ERROR PER CONSOLE +ERRP42: POP P,Q ;***DMN*** FIX FOR ILC MESSAGE + AOJ V, ;PROGRAM BUMMERS BEWARE: + JRST @V ;V HAS AN INDEX OF A + +ERRPT5: POINT 6,0(A) +ERRPT6: SIXBIT / FILE / + + + ERRPT8: TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START WITH ? + CAIGE T,140 ;IS IT A NON-PRINTING CHAR? + CAIL T,40 + JRST ERRP8 + PUSH P,T + MOVEI T,136 ;UP ARROW + PUSHJ P,TYPE2 + POP P,T + TRC T,100 ;CONVERT TO PRINTING CHAR. +ERRP8: PUSHJ P,TYPE2 +ERRPT7: PUSHJ P,SPACE + JRST ERRPT0 + +ERRPT9: MOVEI V,@V + PUSH P,V + ERROR 7,<?ILLEGAL -LOADER@?> + POP P,V + JRST ERRP41 + +;PRINT QUESTION MARK + +PRQ: PUSH P,T ;SAVE + MOVEI T,"?" ;PRINT ? + PUSHJ P,TYPE2 ;... + POP P,T ;RESTORE + POPJ P, ;RETURN + + + SUBTTL INPUT - OUTPUT INTERFACE + +;BINARY INPUT SUBROUTINE - RETURNS A WORD IN W +IFE K,< +WORDPR: PUSHJ P,WORD ;GET FIRST WORD OF PAIR + MOVE C,W ;KEEP IT HANDY> +WORD: SOSGE BUFR2 ;SKIP IF BUFFER NOT EMPTY + JRST WORD2 +WORD1: ILDB W,BUFR1 ;PICK UP 36 BIT WORD + POPJ P, + +WORD2: IN 1, ;GET NEXT BUFFER LOAD + JRST WORD ;DATA OK - CONTINUE LOADING +WORD3: STATZ 1,IODEND ;TEST FOR EOF + JRST EOF ;END OF FILE EXIT + ERROR ,< /INPUT ERROR#/> + JRST LD2 ;GO TO ERROR RETURN + + +SE3: XWD 2,2 ;SYMBOL POINTER INCREMENT +PDLPT: XWD -41,PDLST-1; INITIAL PUSHDOWN POINTER +COMM: SQUOZE 0,.COMM. +LSTPT: POINT 6,W ;CHARACTER POINTER TO W + +IOBKTL==40000 +IOIMPM==400000 +IODERR==200000 +IODTER==100000 +IODEND==20000 + +IOBAD==IODERR!IODTER!IOBKTL!IOIMPM + + + + SUBTTL IMPURE CODE +IFN SEG2SW,< RELOC +LOWCOD: RELOC> +IFN PURESW,<HICODE: +IFN SEG2SW,< PHASE LOWCOD> +IFE SEG2SW,< PHASE 140>> + + +DBUF1: JSP A,ERRPT7 +DBUF: SIXBIT /TI:ME DY-MON-YR @/ + POPJ P, + +;DATA FOR PURE OPEN UUO'S + +IFN SPCHN,< +CHNENT: 0 + SIXBIT .CHN. + 0 + 0 +CHNOUT: 17 + SIXBIT /DSK/ + 0 +> +IFN RPGSW,< +OPEN1: EXP 1 +RPG1: Z + XWD 0,CTLIN +> + +OPEN2: EXP 1 +LD5C1: Z + XWD ABUF,0 + +OPEN3: EXP 14 +ILD1: Z + XWD 0,BUFR + +IFN PURESW,<DEPHASE +CODLN=.-HICODE> + + + SUBTTL DATA STORAGE + +IFN PURESW,< +IFE SEG2SW,<LOC 140> +IFN SEG2SW,<RELOC> +LOWCOD: BLOCK CODLN> + +PDSAV: BLOCK 1 ;SAVED PUSHDOWN POINTER +COMSAV: BLOCK 1 ;LENGTH OF COMMON +MDG: BLOCK 1 ;COUNTER FOR MUL DEF GLOBALS +PDLST: BLOCK 40 + +F.C: BLOCK 1 + BLOCK 1 ;STORE N HERE + BLOCK 1 ;STORE X HERE + BLOCK 1 ;STORE H HERE + BLOCK 1 ;STORE S HERE + BLOCK 1 ;STORE R HERE +B.C: BLOCK 1 + +STADDR: BLOCK 1 ;HOLDS STARTING ADDRESS + +IFN NAMESW,< +PRGNAM: BLOCK 1 ;STORE BINARY FILE NAME-USED TO MAKE SYSTAT MORE MEANINGFUL +> +IFN REENT,< +HIGHX: BLOCK 1 +HIGHR: BLOCK 1 ;HOLD X AND R WHILE LOADING LOW SEG PIECES +LOWX: BLOCK 1 +HILOW: BLOCK 1 ;HIGHEST NON-BLOCK STMT IN LOW SEG +HVAL: BLOCK 1 ;ORG OF HIGH SEG> +HVAL1: BLOCK 1 ;ACTUAL ORG OF HIGH SEG +LOWR: BLOCK 1 ;HOLD X AND R WHILE LOADING HISEG PIECES +IFN KUTSW,<CORSZ: BLOCK 1> +IFN DMNSW,<KORSP: BLOCK 1> +IFN LDAC,<BOTACS: BLOCK 1> +IFN WFWSW,<VARLNG: BLOCK 1 +VARREL: BLOCK 1> +IFN SAILSW,<LIBFLS: BLOCK RELLEN*3 +PRGFLS: BLOCK RELLEN*3> + + + PT1: BLOCK 1 +SVA: BLOCK 1 +IFN RPGSW,< +NONLOD: BLOCK 1 +SVRPG: BLOCK 1 +IFN TEMP,< +TMPFIL: BLOCK 2 +TMPFLG: BLOCK 1> +> +IFN NAMESW,< +CURNAM: BLOCK 1 +> +IFN PP,< +OLDDEV: BLOCK 1 +PPN: BLOCK 1 +PPNE: BLOCK 1 +PPNV: BLOCK 1 +PPNW: BLOCK 1 + > +IFN FAILSW,< +GLBCNT: BLOCK 1 +HDSAV: BLOCK 1 +HEADNM: BLOCK 1 +LFTHSW: BLOCK 1 +OPNUM: BLOCK 1 +POLSW: BLOCK 1 +SVHWD: BLOCK 1 +SVSAT: BLOCK 1 +PPDB: BLOCK PPDL+1 +LINKTB: BLOCK 21 +> +HISTRT: BLOCK 1 ;JOBREL AT START OF LOADING +IFN L,< +LSPXIT: BLOCK 1 +RINITL: BLOCK 1 +OLDJR: BLOCK 1> +IFN SPCHN,< +CHNTAB: BLOCK 1 +BEGOV: BLOCK 1 +CHNACN: BLOCK 1 +CHNACB: BLOCK 1> +TABCNT: BLOCK 1 +LIMBO: BLOCK 1 ;WHERE OLD CHARS. ARE STORED +IFN DIDAL,<LSTBLK: BLOCK 1 ;POINTER TO LAST PROG LOADED> +IFN EXPAND,<ALWCOR: BLOCK 1 ;CORE AVAILABLE TO USER> +IFN ALGSW,<%OWN: BLOCK 1 ;ADDRESS OF ALGOL OWN AREA + OWNLNG: BLOCK 1 ;LENGTH OF OWN BLOCK> +IFN REENT,<SVBRKS: BLOCK 1 ;XWD HIGH,LOW (PROG BREAKS)> + + + SUBTTL BUFFER HEADERS AND HEADER HEADERS + +BUFO: BLOCK 1 ;CONSOLE INPUT HEADER HEADER +BUFO1: BLOCK 1 +BUFO2: BLOCK 1 + +BUFI: BLOCK 1 ;CONSOLE OUTPUT HEADER HEADER +BUFI1: BLOCK 1 +BUFI2: BLOCK 1 + +ABUF: BLOCK 1 ;AUXILIARY OUTPUT HEADER HEADER +ABUF1: BLOCK 1 +ABUF2: BLOCK 1 + +BUFR: BLOCK 1 ;BINARY INPUT HEADER HEADER +BUFR1: BLOCK 1 +BUFR2: BLOCK 1 + +DTIN: BLOCK 1 ;DECTAPE INPUT BLOCK +DTIN1: BLOCK 3 + +DTOUT: BLOCK 1 ;DECTAPE OUTPUT BLOCK +DTOUT1: BLOCK 3 + + TTYL==52 ;TWO TTY BUFFERS +IFN STANSW,< TTYL==70 ;;;STANFORD, JUST TO BE DIFFERENT, HAS BIG TTY BFRS> + +IFE LNSSW,< +IFE K,< BUFL==406 ;TWO DTA BUFFERS FOR LOAD> +IFN K,< BUFL==203 ;ONE DTA BUFFER FOR LOAD> + ABUFL==203 ;ONE DTA BUFFER FOR AUX DEV> +IFN LNSSW,< +IFE K,<BUFL==4*203+1> +IFN K,<BUFL==203+1> +ABUFL==2*203+1> + +TTY1: BLOCK TTYL ;TTY BUFFER AREA +BUF1: BLOCK BUFL ;LOAD BUFFER AREA +AUX: BLOCK ABUFL ;AUX BUFFER AREA + + +IFN RPGSW,< +CTLIN: BLOCK 3 +CTLNAM: BLOCK 3 +CTLBUF: BLOCK 203+1 +> + + + SUBTTL FORTRAN DATA STORAGE + +IFN STANSW,<PATCH: BLOCK 20 ;STANFORD HAS SEMI-INFINITE CORE> + +IFE K,< +TOPTAB: BLOCK 1 ;TOP OF TABLES +CTAB: BLOCK 1; COMMON +ATAB: BLOCK 1; ARRAYS +STAB: BLOCK 1; SCALARS +GSTAB: BLOCK 1; GLOBAL SUBPROGS +AOTAB: BLOCK 1; OFFSET ARRAYS +CCON: BLOCK 1; CONSTANTS +PTEMP: BLOCK 1; PERMANENT TEMPS +TTEMP: BLOCK 1; TEMPORARY TEMPS +COMBAS: BLOCK 1; BASE OF COMMON +LLC: BLOCK 1; PROGRAM ORIGIN +BITP: BLOCK 1; BIT POINTER +BITC: BLOCK 1; BIT COUNT +PLTP: BLOCK 1; PROGRAMMER LABEL TABLE +MLTP: BLOCK 1; MADE LABEL TABLE +SDS: BLOCK 1 ;START OF DATA STATEMENTS +SDSTP: BLOCK 1 ;START OF DATA STATEMENTS POINTER +BLKSIZ: BLOCK 1; BLOCK SIZE +MODIF: BLOCK 1; ADDRESS MODIFICATION +1 +SVFORH: BLOCK 1 ;SAVE H WHILE LOADING F4 PROGRAMS + +IOWDPP: BLOCK 2> +SBRNAM: BLOCK 1 + +IFE K,< +CT1: BLOCK 1 ;TEMP FOR C +LTC: BLOCK 1 +ITC: BLOCK 1 +ENC: BLOCK 1 +WCNT: BLOCK 1 ;DATA WORD COUNT +RCNT: BLOCK 1 ;DATA REPEAT COUNT + +LTCTEM: BLOCK 1 ;TEMP FOR LTC +DWCT: BLOCK 1 ;DATA WORD COUNT> + + VAR ;DUMP VARIABLES +IFN PURESW,<RELOC> + + + + SUBTTL REMAP UUO +IFN REENT,< +IFN PURESW,<HHIGO: PHASE BUF1 ;DON'T NEED BUF1 NOW> + +HIGO: CORE V, ;CORE UUO + JFCL ;NEVER FAILS +HINOGO: MOVE D,HVAL + CAMG D,HVAL1 ;ANYTHING IN HI-SEG + JRST 0 ;NO + MOVE V,HISTRT ;NOW REMAP THE HISEG. + REMAP V, ;REMAP UUO. + JRST HIGET ;FATAL ERROR. +HIRET: JRST 0 ;EXECUTE CODE IN ACC'S + +HIGET: HRRZI V,SEGBLK ;DATA FOR + GETSEG V, ;GETSEG UUO + SKIPA ;CANNOT CONTINUE NO HISEG + JRST REMPFL ;REGAINED LOADER HISEG + ;GO PRINT MESSAGE + TTCALL 3,SEGMES ;PRINT SEGMES + EXIT ;AND DIE + +SEGBLK: SIXBIT /SYS/ + SIXBIT /LOADER/ + EXP 0,0,0,0 + + +SEGMES: ASCIZ /?CANNOT FIND LOADER.SHR +/ + +IFN PURESW,<HIGONE: DEPHASE>> + + + SUBTTL LISP LOADER + +;END HERE IF 1K LOADER REQUESTED. +IFN K,<IFE L,<END BEG> +IFE L,< XLIST > + +IFN L,< LIT + VAR + LODMAK: MOVEI A,LODMAK + MOVEM A,137 + INIT 17 + SIXBIT /DSK/ + 0 + HALT + ENTER LMFILE + HALT + OUTPUT [IOWD 1,LMLST ;OUTPUT LENGTH OF FILE + 0] + OUTPUT LMLST + STATZ 740000 + HALT + RELEASE + CALL [SIXBIT /EXIT/] + +LMFILE: SIXBIT /LISP/ + SIXBIT /LOD/ + 0 + 0 + +LMLST: IOWD LODMAK+1-LD,137 + 0 + + END LODMAK>> + + + LIST + + + SUBTTL FORTRAN FOUR LOADER + +F4LD: TLNE F,SKIPSW!FULLSW ;ARE WE IN SKIP MODE + JRST REJECT ;YES,DON'T LOAD ANY OF THIS + MOVEI W,-2(S); GENERATE TABLES + CAIG W,(H) ;NEED TO EXPAND? +IFN EXPAND,<PUSHJ P,[PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM3 + POPJ P,]> +IFE EXPAND,< TLO F,FULLSW> +;IFN REENT,<TRO F,F4FL!VFLG ;RE-ENTRANT LIB40> + TLO N,F4SW; SET FORTRAN FOUR FLAG + HRRZ V,R; SET PROG BREAK INTO V + MOVEM V,LLC; SAVE FIRST WORD ADDRESS + HRRZM W,MLTP; MADE LABELS + HRRZM W,PLTP; PROGRAMMER LABELS + ADD W,[POINT 1,1]; GENERATE BIT-BYTE POINTER + MOVEM W,BITP + MOVEM W,SDSTP; FIRST DATA STATEMENT + AOS SDSTP; + HRREI W,-↑D36; BITS PER WORDUM + MOVEM W,BITC; BIT COUNT + PUSHJ P,BITWX ;MAKE SURE OF ENOUGH SPACE + MOVE W,[JRST ALLOVE] ;LAST DATA STATEMENT + MOVEM W,(S) + +TEXTR: PUSHJ P,WORD; TEXT BY DEFAULT + HLRZ C,W + CAIN C,-1 + JRST HEADER; HEADER + MOVEI C,1; RELOCATABLE + TLNN F,FULLSW!SKIPSW ;DON'T LOAD IF EITHER SET + PUSHJ P,BITW; SHOVE AND STORE + JRST TEXTR; LOOP FOR NEXT WORD + +ABS: SOSG BLKSIZ; MORE TO GET + JRST TEXTR; NOPE +ABSI: PUSHJ P,WORD; + MOVEI C,0; NON-RELOCATABLE + TLNN F,FULLSW!SKIPSW ;DON'T LOAD IF EITHER SET + PUSHJ P,BITW; TYPE 0 + JRST ABS + + + SUBTTL PROCESS TABLE ENTRIES + +MDLB: TLNE F,FULLSW+SKIPSW; MADE LABEL PROC + JRST GLOBDF; NO ROOM AT THE IN + HLRZ C,MLTP; GET PRESENT SIZE + CAMGE C,BLKSIZ; IF NEW SIZE BIGGER, STR-R-RETCH + PUSHJ P,SMLT + HRRZ C,MLTP; GET BASE +MLPLC: ADD C,BLKSIZ; MAKE INDEX + TLNN F,FULLSW+SKIPSW; DONT LOAD + HRRZM V,(C); PUT AWAY DEFINITION +GLOBDF: PUSHJ P,WORD + TLNE F,FULLSW+SKIPSW ;SKIPPING THIS PROG? + JRST TEXTR ;YES, DON'T DEFINE + MOVEI C,(V); AND LOC + EXCH W,C + PUSHJ P,SYMXX; PUT IN DDT-SYMBOL TABLE + PUSHJ P,BITWX + JRST TEXTR + +PLB: TLNE F,FULLSW+SKIPSW + JRST GLOBDF + HLRZ C,PLTP; PRESENT SIZE + CAMGE C,BLKSIZ + PUSHJ P,SPLT + HRRZ C,PLTP + JRST MLPLC + + + SUBTTL STORE WORD AND SET BIT TABLE + +BITW: MOVEM W,@X; STORE AWAY OFFSET + IDPB C,BITP; STORE BIT + AOSGE BITC; STEP BIT COUNT + AOJA V,BITWX; SOME MORE ROOM LEFT + HRREI C,-↑D36; RESET COUNT + MOVEM C,BITC + SOS PLTP + SOS BITP; ALL UPDATED +IFE EXPAND,<HRL C,MLTP + SOS MLTP + HRR C,MLTP> +IFN EXPAND,<HRRZ C,MLTP; TO ADDRESS + SUBI C,1 + CAIG C,(H) + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADDI C,2000 + JRST POPJM2] + SOS MLTP + HRLI C,1(C)> + HRRZ T,SDSTP; GET DATA POINTER + BLT C,-1(T); MOVE DOWN LISTS + AOJ V,; STEP LOADER LOCATION +BITWX: IFN REENT,< + TLNE F,HIPROG + JRST FORTHI> + CAIGE H,@X + MOVEI H,@X ;KEEP H SET RIGHT FOR HISEG STUFF +BITWX2: HRRZ T,MLTP + CAIG T,(H); OVERFLOW CHECK +IFE EXPAND,<TLO F,FULLSW> +IFN EXPAND,<PUSHJ P, [PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM3 + POPJ P,]> + POPJ P,; + +SMLT: SUB C,BLKSIZ; STRETCH + MOVS W,MLTP ;LEFT HALF HAS OLD BASE + ADD C,MLTP ;RIGHT HALF HAS NEW BASE +IFN EXPAND,< HRRZS C ;GET RID OF COUNT + CAIG C,(H) + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADD W,[XWD 2000,0] + ADDI C,2000 + JRST POPJM2]> + HRRM C,MLTP ;PUT IN NEW MLTP + HLL C,W ;FORM BLT POINTER + ADDI W,(C) ;LAST ENTRY OF MLTP + HRL W,BLKSIZ ;NEW SIZE OF MLTP + HLLM W,MLTP ;... +SLTC: BLT C,0(W); MOVE DOWN (UP?) + POPJ P,; + +SPLT: SUB C,BLKSIZ + MOVS W,MLTP; + ADDM C,PLTP + ADD C,MLTP +IFN EXPAND,< HRRZS C + CAIG C,(H) + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADD W,[XWD 2000,0] + ADDI C,2000 + JRST POPJM2]> + HRRM C,MLTP ;PUT IN NEW MLTP + HLL C,W + HLRZ W,PLTP ;OLD SIZE OF PL TABLE + ADD W,PLTP ;NEW BASE OF PL TABLE + HRL W,BLKSIZ ;NEW SIZE OF PL TABLE + HLLM W,PLTP ;INTO POINTER + JRST SLTC + + +IFN REENT,< +FORTHI: HRRZ T,JOBREL ;CHECK FOR CORE OVERFLOW + CAIGE T,@X + PUSHJ P,[PUSHJ P,HIEXP + TLOA F,FULLSW + JRST POPJM3 ;CHECK AGAIN + POPJ P,] + JRST BITWX2> + + + SUBTTL PROCESS END CODE WORD + +ENDS: PUSHJ P,WORD; GET STARTING ADDRESS + JUMPE W,ENDS1; NOT MAIN + ADDI W,(R); RELOCATION OFFSET + TLNE N,ISAFLG; IGNORE STARTING ADDRESS + JRST ENDS1 + HRRZM W,STADDR ;STORE STARTING ADDRESS +IFN NAMESW,<MOVE W,1(N) ;SET UP NAME + PUSHJ P,LDNAM + MOVE W,DTIN + MOVEM W,PRGNAM> +ENDS1: PUSHJ P,WORDPR ;DATA STORE SIZE + HRRZM C,PTEMP ;NUMBER OF PERMANENT TEMPS + MOVEM V,CCON; START OF CONSTANTS AREA + JUMPE W,E1; NULL + MOVEM W,BLKSIZ ;SAVE COUNT + MOVEI W,0(V) ;DEFINE CONST. + MOVE C,CNR50 ;... + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMPT ;... + PUSHJ P,GSWD ;STORE CONSTANT TABLE +E1: MOVEI W,0(V); GET LOADER LOC + EXCH W,PTEMP; STORE INTO PERM TEMP POINTER + ADD W,PTEMP; FORM TEMP TEMP ADDRESS + MOVEM W,TTEMP; POINTER + MOVEM V,GSTAB; STORE LOADER LOC IN GLOBSUB + MOVEM H,SVFORH + MOVE C,TTR50 ;DEFINE %TEMP. + TLNE F,SKIPSW!FULLSW + JRST E1A + PUSHJ P,SYMPT ;... + MOVE C,PTR50 ;DEFINE (IF EXTANT) TEMP. + MOVEI W,0(V) ;... + CAME W,TTEMP ;ANY PERM TEMPS? + PUSHJ P,SYMPT ;YES, DEFINE +E1A: PUSHJ P,WORD; NUMBER OF GLOBSUBS + JUMPE W,E11 + MOVEM W,BLKSIZ ;SIZE OF GLOBSUB + PUSHJ P,GSWD ;STORE GLOBSUB TABLE +E11: MOVEM V,STAB; SCALARS + PUSHJ P,WORD; HOW MANY? + JUMPE W,E21; NONE + PUSHJ P,GSWDPR ;STORE SCALAR TABLE +E21: MOVEM V,ATAB; ARRAY POINTER + PUSHJ P,WORD; COMMENTS FOR SCALARS APPLY + JUMPE W,E31 + PUSHJ P,GSWDPR ;STORE ARRAY TABLE +E31: MOVEM V,AOTAB; ARRAYS OFFSET + PUSHJ P,WORD; SAME COMMENTS AS ABOVE + JUMPE W,E41 + PUSHJ P,GSWDPR ;STORE ARRAY OFFSET TABLE +E41: PUSHJ P,WORD; TEMP, SCALAR, ARRAY SIZE + TLNE F,FULLSW!SKIPSW ;SKIPPING THIS PROG? + MOVEI W,0 ;DON'T ACCEPT GLOB SUBPROG REQUESTS + MOVEM V,CTAB; SETUP COMMON TABLE POINTER + ADD W,GSTAB; GLOBAL SUBPROG BASE + MOVEM W,COMBAS; START OF COMMON + PUSHJ P,WORD; COMMON BLOCK SIZE + HRRZM W,BLKSIZ + JUMPE W,PASS2; NO COMMON +COMTOP: PUSHJ P,WORDPR ;GET A COMMON PAIR + TLNE F,SKIPSW!FULLSW ;IF SKIPPING + JRST COMCO1 ;DON'T USE + PUSHJ P,SDEF; SEARCH + JRST COMYES; ALREADY THERE + HRLS W + HRR W,COMBAS; PICK UP THIS COMMON LOC + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMXX; DEFINE IT + MOVS W,W; SWAP HALFS + ADD W,COMBAS; UPDATE COMMON LOC + HRRM W,COMBAS; OLD BASE PLUS NEW SIZE + HLRZS W; RETURN ADDRESS + TLZ C,400000 + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMXX +COMCOM: PUSHJ P,CWSTWX ;STORE A WORD PAIR +COMCO1: SOS BLKSIZ + SOSLE BLKSIZ + JRST COMTOP + JRST PASS2 + +COMYES: HLRZ C,2(A); PICK UP DEFINITION + CAMLE W,C; CHECK SIZE + JRST ILC; ILLEGAL COMMON + MOVE C,1(A); NAME + HRRZ W,2(A); BASE + JRST COMCOM + + + +PRSTWX: PUSHJ P,WORDPR ;GET A WORD PAIR +CWSTWX: EXCH C,W ;SPACE TO STORE FIRST WORD OF PAIR? + PUSHJ P,WSTWX ;... + EXCH C,W ;THERE WAS; IT'S STORED +WSTWX: TLNE F,FULLSW!SKIPSW ;SPACE FOR ANOTHER WORD? + POPJ P, ;NOPE, RETURN + MOVEM W,@X ;YES, STORE IT. + AOJA V,BITWX ;TELL THE TABLES ABOUT IT; THEN RETURN + + +GSWD: PUSHJ P,WORD ;GET WORD FROM TABLE + PUSHJ P,WSTWX ;STASH IT + SOSE BLKSIZ ;FINISHED? + JRST GSWD ;NOPE, LOOP + POPJ P, ;TRA 1,4 + +GSWDPR: MOVEM W,BLKSIZ ;KEEP COUNT +GSWDP1: PUSHJ P,PRSTWX ;GET AND STASH A PAIR + SOS BLKSIZ ;FINISHED? + SOSLE BLKSIZ ;... + JRST GSWDP1 ;NOPE, LOOP + POPJ P, ;TRA 1,4 + + + SUBTTL BEGIN HERE PASS2 TEXT PROCESSING + +PASS2: ADDI V,(X) +IFN REENT,<TLNE F,HIPROG + HRRZ V,H> + MOVEM V,TOPTAB ;SAVE FOR OVERLAP CHECKING + TLNE F,FULLSW+SKIPSW; ABORT? + JRST ALLOVE; YES + MOVE V,LLC ;PICK UP PROGRAM ORIGIN + CAML V,CCON ;IS THIS A PROGRAM? + JRST FBLKD ;NO, GO LOOK FOR FIRST BLK DATA + TLOE N,PGM1 ;YES, IS THIS FIRST F4 PROG? + JRST NOPRG ;NO + HRR W,COMBAS ;YES, PLACE PROG BREAK IN LH +IFE L,<IFN REENT,<TLNN F,HIPROG ;DON'T BOTHER IF IN HISEG, CHAIN NOT SMART ENOUGH> + HRLM W,JOBCHN(X) ;FOR CHAIN> +NOPRG: HRRZ W,PLTP; GET PROG TABLE BASE + HLRZ C,PLTP; AND SIZE + ADD W,C; COMPUTE END OF PROG TABLE + ADD W,[POINT 1,1]; AND BEGINNING OF BIT TABLE + EXCH W,BITP; SWAP POINTERS +PASS2B: ILDB C,BITP; GET A BIT + JUMPE C,PASS2C; NO PASS2 PROCESSING + PUSHJ P,PROC; PROCESS A TAG + JRST PASS2B; MORE TO COME + JRST ENDTP; + +PROC: LDB C,[POINT 6,@X,23]; TAG + SETZM MODIF; ZERO TO ADDRESS MODIFIER + TRZE C,40 + AOS MODIF + MOVEI W,TABDIS; HEAD OF TABLE + HRLI W,-TABLNG ;SET UP FOR AOBJN + HLRZ T,(W); GET ENTRY + CAME T,C; CHECK + AOBJN W,.-2 + JUMPGE W,LOAD4A ;RAN OUT OF ENTRIES + HRRZ W,(W); GET DISPATCH + LDB C,[POINT 12,@X,35] + JRST (W); DISPATCH + + +PASS2C: PUSHJ P,PASS2A + JRST PASS2B + JRST ENDTP + + + +TABDIS: XWD 11,PCONS; CONSTANTS + XWD 06,PGS; GLOBAL SUBPROGRAMS + XWD 20,PST; SCALARS + XWD 22,PAT; ARRAYS + XWD 01,PATO; ARRAYS OFFSET + XWD 00,PPLT; PROGRAMMER LABELS + XWD 31,PMLT; MADE LABESL + XWD 26,PPT; PERMANENT TEMPORARYS + XWD 27,PTT; TEMPORARY TEMPORARYS +TABLNG==.-TABDIS +;DISPATCH ON A HEADER + +HEADER: CAMN W,[EXP -2]; END OF PASS ONE + JRST ENDS + LDB C,[POINT 12,W,35]; GET SIZE + MOVEM C,BLKSIZ + ANDI W,770000 + JUMPE W,PLB; PROGRAMMER LABEL + CAIN W,500000; ABSOLUTE BLOCK + JRST ABSI; + CAIN W,310000; MADE LABEL + JRST MDLB; MADE LABEL + CAIN W,600000 + JRST GLOBDF + CAIN W,700000; DATA STATEMENT + JRST DATAS + JRST LOAD4A; DATA STATEMENTS WILL GO HERE + +TTR50: RADIX50 10,%TEMP. +PTR50: RADIX50 10,TEMP. +CNR50: RADIX50 10,CONST. + + + SUBTTL ROUTINES TO PROCESS POINTERS + +PCONS: ADD C,CCON; GENERATE CONSTANT ADDRESS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PSTA: PUSHJ P,SWAPSY ;NON-COMMON SCALARS AND ARRAYS + ADDI C,(R); RELOCATE +PCOM1: PUSHJ P,SYDEF ;... +PCOMX: ADD C,MODIF ;ADDR RELOC FOR DP + HRRM C,@X; REPLACE ADDRESS +PASS2A: AOJ V,; STEP READOUT POINTER + CAML V,CCON ;END OF PROCESSABLES? +CPOPJ1: AOS (P); SKIP + POPJ P,; + +PAT: SKIPA W,ATAB ;ARRAY TABLE BASE +PST: MOVE W,STAB ;SCALAR TABLE BASE + ROT C,1 ;SCALE BY 2 + ADD C,W ;ADD IN TABLE BASE + ADDI C,-2(X); TABLE ENTRY + HLRZ W,(C); CHECK FOR COMMON + JUMPE W,PSTA; NO COMMON + PUSHJ P,COMDID ;PROCESS COMMON + JRST PCOM1 + +COMDID: LSH W,1 ;PROCESS COMMON TABLE ENTRIES + ADD W,CTAB; COMMON TAG + ADDI W,-2(X); OFFSET + PUSHJ P,SWAPSY; GET SYMBOL AND SET TO DEFINED + ADD C,1(W); BASE OF COMMON + POPJ P, ;RETURN + +PATO: ROT C,1 + ADD C,AOTAB; ARRAY OFFSET + ADDI C,-2(X); LOADER OFFSET + MOVEM C,CT1; SAVE CURRENT POINTER + HRRZ C,1(C); PICK UP REFERENCE POINTER + ANDI C,7777; MASK TO ADDRESS + ROT C,1; ALWAYS A ARRAY + ADDI C,-2(X) + ADD C,ATAB + HLRZ W,(C); COMMON CHECK + JUMPE W,NCO + PUSHJ P,COMDID ;PROCESS COMMON + PUSHJ P,SYDEF + MOVE C,CT1 + HRRE C,(C) + ADD C,1(W) + JRST PCOMX + + + NCO: PUSHJ P,SWAPSY; + ADDI C,(R) ;DEFINE SYMBOL IN TRUE LOC + PUSHJ P,SYDEF ;... + MOVE C,CT1 + HRRZ C,(C) ;OFFSET ADDRESS PICKUP + ADDI C,(R) ;WHERE IT WILL BE + JRST PCOMX ;STASH ADDR AWAY + +PTT: ADD C,TTEMP; TEMPORARY TEMPS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PPT: ADD C,PTEMP; PERMANENT TEMPS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PGS: ADD C,GSTAB; GLOBSUBS + ADDI C,-1(X); OFFSET + MOVE C,(C) + TLC C,640000; MAKE A REQUEST + PUSHJ P,TBLCHK ;CHECK FOR OVERLAP + MOVEI W,(V); THIS LOC + HLRM W,@X; ZERO RIGHT HALF + PUSHJ P,SYMXX + JRST PASS2A + +SYDEF: TLNE N,SYDAT ;SYMBOL WANTS DEFININITION? + POPJ P, ;NO, GO AWAY + PUSH P,C ;SAVE THE WORLD + PUSH P,W + PUSHJ P,TBLCHK ;CHECK FOR OVERLAP + MOVE W,C + SKIPE C,T ;PICKUP VALUE + PUSHJ P,SYMXX + POP P,W + POP P,C + POPJ P,; + +PMLT: ADD C,MLTP + JRST .+2 +PPLT: ADD C,PLTP + HRRZ C,(C) + JRST PCOMX + +SYMXX: PUSH P,V + PUSHJ P,SYMPT + POP P,V +IFE REENT,<POPJ P,> +IFN REENT,<JRST RESTRX> + + + +SWAPSY: MOVEI T,0; SET TO EXCHANGE DEFS + EXCH T,1(C); GET NAME + HRRZ C,(C) ;GET VALUE + POPJ P, +TBLCHK: HRRZ W,MLTP ;GETT TOP OV TABLES + SUBI W,2 + CAMG W,TOPTAB ;WILL IT OVERLAP +IFE EXPAND,<TLO F,FULLSW> +IFN EXPAND,<JRST [PUSHJ P,XPAND + TLOA F,FULLSW + JRST TBLCHK + POPJ P,]> + POPJ P, + + + SUBTTL END OF PASS2 + +ALLOVE: TLZ N,F4SW ;END OF F4 PROG + HRRZ V,SDSTP ;GET READY TO ZERO OUT DATA STMTS + SETZM (V) ;AT LEAST ONE THERE + CAIL V,(S) ;IS THERE MORE THAN ONE?? + JRST NOMODS ;NO + HRLS V + ADDI V,1 ;SET UP BLT + BLT V,(S) ;ZERO OUT ALL OF IT +NOMODS: MOVE H,SVFORH + TLNE F,FULLSW!SKIPSW + JRST HIGH3A + HRR R,COMBAS ;TOP OF THE DATA + CAMG H,SDS ;HIGHEST LOC GREATER THAN DATA STATEMENTS? + JRST HIGH3A ;NO, RETURN + ADDI H,1(S) ;YES, SET UP MEANINGFUL ERROR COMMENT + SUB H,SDS ;... + TLO F,FULLSW ;INDICATE OVERFLO +HIGH3A: IFN REENT,<SETZ W, ;CAUSES TROUBLE OTHERWISE + TLZE F,HIPROG + JRST HIGHN1 + HRRZ V,GSTAB + MOVEI V,@X + CAMLE V,HILOW + MOVEM V,HILOW> + HRRZ C,R + JRST HIGH31 ;RETURN + +DATAS: TLNE F,FULLSW+SKIPSW + JRST DAX + MOVEI C,(S) ;ADDR OF WORD UNDER SYMBOL TABLE + MOVN W,BLKSIZ ;HOW FAR DOWN TO BLT + ADDM W,PLTP ;UPDATE TABLE POINTERS + ADDM W,BITP ;... + ADDM W,SDSTP ;... + ADD C,W ;RH(C):= WHEN TO STOP BLT + HRL C,MLTP ;SOURCE OF BLTED DATA + ADD W,MLTP ;UPDATE, GET DESTINATION OF BLT DATA +IFN EXPAND,< HRRZS W ;GET RID OF LEFT HALF + CAIG W,(H) + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADDI W,2000 + ADD C,[XWD 2000,2000] + JRST POPJM2]> + HRRM W,MLTP ;NO SET THIS SO EXTRA CORE NOT ZEROED + HLL W,C ;FORM BLT POINTER + BLT W,-1(C) ;MOVE TABLES DOWN (BUT NOT JRST ALLOVE) + PUSHJ P,BITWX +DAX: PUSHJ P,WORD; READ ONE WORD + TLNN F,FULLSW+SKIPSW + MOVEM W,(C) + SOSLE BLKSIZ ;COUNT OF DATA SEQUENCE SIZE + AOJA C,DAX ;INCREMENT DATA SEQUENCE DEPOSIT LOC + JRST TEXTR; DONE + + + FBLKD: TLOE N,BLKD1 ;IS THIS FIRST BLOCK DATA? + JRST ENDTP ;NO + HRR V,COMBAS ;PLACE PROG BREAK IN RH FOR +IFE L,<IFN REENT,< TLNN F,HIPROG> + HRRM V,JOBCHN(X) ;CHAIN> +ENDTP: TLNE F,FULLSW+SKIPSW + JRST ALLOVE + HRR V,GSTAB +ENDTP0: CAML V,STAB; ANY MORE GLOBSUBS + JRST ENDTP2; NO + MOVE C,@X; GET SUBPROG NAME + PUSHJ P,SREQ; IS IT ALLREADY REQUESTED + AOJA V,ENDTP0; YES + PUSHJ P,SDEF; OR DEFINED + AOJA V,ENDTP0; YES + PUSHJ P,TBLCHK + MOVEI W,0 ;PREPARE DUMMY LINK + TLNN F,FULLSW+SKIPSW ;ABORT + PUSHJ P,SYM3X; PUT IN DUMMY REQUEST + PUSHJ P,BITWX; OVERLAP CHECK + AOJA V,ENDTP0 +ENDTP2: SETZM PT1 +ENDTPW: HRRZ V,SDSTP +IFN EXPAND,<IFN REENT,<TLNE F,HIPROG + JRST ENDTPI> + SUBI V,(X) + CAMG V,COMBAS + JRST [SUB V,COMBAS + MOVNS V + PUSHJ P,XPAND9 + TLO F,FULLSW + JRST .+1] +ENDTPH: HRR V,SDSTP> + HRRZM V,SDS ;DATA STATEMENT LOC +ENDTP1: SUBI V,(X); COMPENSATE FOR OFFSET + MOVE W,@X; GET WORD + TLNE W,-1; NO LEFT HALF IMPLIES COUNT + JRST DODON; DATA DONE + ADD W,[MOVEI W,3] + ADDI W,@X + EXCH W,@X + AOJ V, + ADD W,@X; ITEMS COUNT + MOVEM W,ITC + MOVE W,[MOVEM W,LTC] + MOVEM W,@X; SETUP FOR DATA EXECUTION + AOJ V, + MOVSI W,(MOVEI W,0) + EXCH W,@X + MOVEM W,ENC; END COUNT + AOJ V, + MOVEI W,@X + ADDM W,ITC +LOOP: MOVE W,@X + HLRZ T,W; LEFT HALF INST. + ANDI T,777000 + CAIN T,254000 ;JRST? + JRST WRAP ;END OF DATA + CAIN T,260000 ;PUSHJ? + JRST PJTABL(W) ;DISPATCH VIA TABLE + CAIN T,200000; MOVE? + AOJA V,INNER + CAIN T,270000; ADD? + JRST ADDOP + CAIN T,221000; IMULI? + AOJA V,LOOP + CAIE T,220000; IMUL? + JRST LOAD4A; NOTA +INNER: HRRZ T,@X; GET ADDRESS + TRZE T,770000; ZERO TAG? + SOJA T,CONPOL; NO, CONSTANT POOL + JUMPE T,FORCNF + SUB T,PT1; SUBTRACT INDUCTION NUMBER + ASH T,1 + SUBI T,1 + HRRM T,@X + HLRZ T,@X + ADDI T,P + HRLM T,@X + AOJA V,LOOP +IFN EXPAND,<IFN REENT,<ENDTPI: HRRZ V,COMBAS + MOVEI V,@X + CAMLE V,JOBREL + JRST [PUSHJ P,HIEXP + TLOA F,FULLSW + JRST ENDTPI + JRST ENDTPH] + JRST ENDTPH>> +FORCNF: ERROR ,</FORTRAN CONFUSED ABOUT DATA STATEMENTS#/> + JRST LD2 + + + CONPOL: ADD T,ITC; CONSTANT BASE + HRRM T,@X + AOJA V,LOOP + +ADDOP: HRRZ T,@X + TRZE T,770000 + SOJA T,CONPOL +SKIPIN: AOJA V,LOOP + +PJTABL: JRST DWFS ;PUSHJ 17,0 + AOSA PT1 ;INCREMENT DO COUNT + SOSA PT1; DECREMENT DO COUNT + SKIPA W,[EXP DOINT.] + MOVEI W,DOEND. + HRRM W,@X + AOJA V,SKIPIN ;SKIP A WORD + +DWFS: MOVEI W,DWFS. + HRRM W,@X + AOJ V, + TLO N,SYDAT + PUSHJ P,PROC; PROCESS THE TAG + JRST LOAD4A ;DATA STATEMENT BELOW CODE TOP + JRST LOOP ;PROPER RETURN + +DOINT.: POP P,V; GET ADDRESS OF INITIAL VALUE + PUSH P,(V); STORE INDUCTION VARIABLE + AOJ V, + PUSH P,V; INITIAL ADDRESS + JRST (V) + +DOEND.: HLRE T,@(P) ;RETAIN SIGN OF INCREMENT + ADDM T,-2(P); INCREMENT + HRRZ T,@(P); GET FINAL VALUE + SUB T,-2(P) ;FINAL - CURRENT + IMUL T,@(P) ;INCLUDE SIGN OF INCREMENT + JUMPL T,DODONE ;SIGN IS ONLY IMPORTANT THING + POP P,(P); BACK UP POINTER + JRST @(P) + + + DODONE: POP P,-1(P); BACK UP ADDRESS + POP P,-1(P) + JRST CPOPJ1 ;RETURN + +WRAP: MOVE W,ENC; NUMBER OF CONSTANTS + ADD W,ITC; CONSTANT BASE + MOVEI C,(W); CHAIN + HRRM C,@X + MOVEI V,(W); READY TO GO + JRST ENDTP1 + +DODON: TLZ N,RCF!SYDAT!DZER ;DATA STATEMENT FLAGS + MOVE W,PTEMP ;TOP OF PROG + ADDI W,(X) ;+OFFSET + HRRZ C,SDS +IFE EXPAND,<SUBI C,(X) ;CHECK FOR ROOM + CAMGE C,COMBAS ;IS IT THERE + TLO F,FULLSW ;NO (DONE EARLIER IF EXPAND) + HRRZ C,SDS> + SUBI C,1 ;GET ONE LESS (TOP LOCATION TO ZERO) +IFN REENT,<TLNE F,HIPROG + MOVE C,JOBREL> +SECZER: CAMLE W,C ;ANY DATA TO ZERO? + JRST @SDS ;NO, DO DATA STATEMENTS + ;FULLSW IS ON IF COMBAS GT. SDS + TLNN F,FULLSW+SKIPSW ;SHOULD WE ZERO? + SETZM (W) ;YES, DO SO + TLON N,DZER ;GO BACK FOR MORE? + AOJA W,SECZER ;YES, PLEASE + HRLI W,-1(W) ;SET UP BLT POINTER TO ZERO DATA + TLNN F,FULLSW+SKIPSW ;SHOULD WE ZERO? + BLT W,(C) ;YES, DO SO + JRST @SDS ;GO DO DATA STATEMENTS + +DATAOV: ERROR 0,</DATA STATEMENT OVERFLOW#/> + JRST LD2 + + + DREAD: TLNE N,RCF; NEW REPEAT COUNT NEEDED + JRST FETCH; NO + MOVE W,LTC + MOVEM W,LTCTEM + MOVE W,@LTC; GET A WORD + HLRZM W,RCNT; SET REPEAT COUNT + HRRZM W,WCNT; SET WORD COUNT + POP W,(W); SUBTRACT ONE FROM BOTH HALFS + HLLM W,@LTC; DECREMENT REPEAT COUNT + AOS W,LTC; STEP READOUT + TLO N,RCF +FETCH: MOVE W,@LTC + AOS LTC + SOSE WCNT + POPJ P,; + SOSN RCNT + JRST DOFF. + MOVE V,LTCTEM; RESTORE READOUT + MOVEM V,LTC +DOFF.: TLZ N,RCF; RESET DATA REPEAT FLAG + POPJ P,; + +DWFS.: MOVE T,(P) + AOS (P) + MOVE T,(T); GET ADDRESS + HLRZM T,DWCT; DATA WORD COUNT + HRRZS T + ADDI T,(W); OFFSET +IFN REENT,<HRRZS T ;CLEAR LEFT HALF INCASE OF CARRY + CAML T,HVAL1 + JRST [ADD T,HIGHX + HRRZS T ;MUST GET RID OF LEFT HALF + CAMLE T,JOBREL + JRST DATAOV ;IN CASE FORTRAN GOOFS ON LIMITS + JRST DWFS.1] + ADD T,LOWX + HRRZS T> +IFE REENT,<ADDI T,(X)> + CAML T,SDS + JRST DATAOV +DWFS.1: PUSHJ P,DREAD ;GET A DATA WORD + HRRZS T +IFN REENT,<CAMG T,JOBREL ;JUST TO MAKE SURE> + CAMN T,SDS + JRST DATAOV + TLNN F,FULLSW+SKIPSW ;LOAD THE NEXT DATA ITEM? + MOVEM W,(T) ;YES, STORE IT + SOSE W,DWCT; STEP DOWN AND TEST + AOJA T,DWFS.1 ;ONE MORE TIME, MOZART BABY! + POPJ P, + + + SUBTTL ROUTINE TO SKIP FORTRAN OUTPUT + +;SUBSECTION OF THE ROUTINE TO HANDLE OUTPUT FROM THE +;FORTRAN IV COMPILER. THE MAIN OBJECT OF THE ROUTINE IS TO +;LOOK FOR THE END BLOCK. CODE TAKEN FROM FUDGE2. + +MACHCD: HRRZ C,W ;GET THE WORD COUNT + PUSHJ P,WORD ;INPUT A WORD + SOJG C,MACHCD ;LOOP BACK FOR REST OF THE BLOCK + ;GO LOOK FOR NEXT BLOCK + +REJECT: PUSHJ P,WORD ;READ A FORTRAN BLOCK HEADER + TLC W,-1 ;TURN ONES TO ZEROES IN LEFT HALF + TLNE W,-1 ;WAS LEFT HALF ALL ONES? + JRST REJECT ;NO, IT WAS CALCULATED MACHINE CODE + CAIN W,-2 ;YES, IS RIGHT HALF = 777776? + JRST ENDST ;YES, PROCESS F4 END BLOCK + LDB C,[POINT 6,W,23];GET CODE BITS FROM BITS 18-23 + TRZ W,770000 ;THEN WIPE THEM OUT + CAIE C,70 ;IS IT A DATA STATEMENT? + CAIN C,50 ;IS IT ABSOLUTE MACHINE CODE? + JRST MACHCD ;YES, TREAT IT LIKE DATA STATEMENTS + PUSHJ P,WORD ;NO, ITS A LABEL OF SOME SORT + JRST REJECT ;WHICH CONSISTS OF ONE WORD + ;LOOK FOR NEXT BLOCK HEADER + +ENDST: MOVEI C,1 ;TWO WORDS, FIVE TABLES, ONE WORD, ONE TABLE + MOVEI T,6 ;TO GO +F4LUP1: PUSHJ P,WORD ;GET TABLE MEMBER +F4LUP3: SOJGE C,F4LUP1 ;LOOP WITHIN A TABLE + JUMPL T,LOAD1 ;LAST TABLE - RETURN + SOJG T,F4LUP2 ;FIRST TWO WORDS AND FIVE TABLES + JUMPE T,F4LUP1 ;COMMON LENGTH WORD +F4LUP2: PUSHJ P,WORD ;READ HEADER WORD + MOVE C,W ;COUNT TO COUNTER + JRST F4LUP3 ;STASH + + + SUBTTL LISP LOADER + +IFE L,< END BEG> +IFN L,< + LIT + VAR +LODMAK: MOVEI A,LODMAK + MOVEM A,137 + INIT 17 + SIXBIT /DSK/ + 0 + HALT + ENTER LMFILE + HALT + OUTPUT [IOWD 1,LMLST ;OUTPUT LENGTH OF FILE + 0] + OUTPUT LMLST + STATZ 740000 + HALT + RELEASE + CALL [SIXBIT /EXIT/] + +LMFILE: SIXBIT /LISP/ + SIXBIT /LOD/ + 0 + 0 + +LMLST: IOWD LODMAK+1-LD,137 + 0 + + END LODMAK> + + + + diff --git a/src/loader.nih b/src/loader.nih new file mode 100644 index 0000000..4f0d81d --- /dev/null +++ b/src/loader.nih @@ -0,0 +1,5136 @@ + SUBTTL RP GRUEN/NGP/WFW/DMN V.052 7-SEP-70 +; RFS 11-30-70 +; TURNED ON FAILSW,SAILSW FOR NIH USAGE. + + + VLOADER==52 + VPATCH==0 ;DEC PATCH LEVEL + VCUSTOM==0 ;NON-DEC PATCH LEVEL + + LOC <JOBVER==137> + XWD VCUSTOM,VLOADER+1000*VPATCH + RELOC + +COMMENT * ASSEMBLY FEATURE SWITCHES (ACTION WHEN NON-ZERO) + + SWITCHES ON (NON-ZERO) IN DEC VERSION +SEG2SW GIVES TWO SEGMENT CODE (IF MACRO ALLOWS IT) +PURESW GIVES PURE CODE (VARIABLES IN LOW SEG) +REENT GIVES REENTRANT CAPABILITY PDP-10 + (REENT=0 FOR PDP-10/30 OR PDP-6 OR EARLY PDP-10) +RPGSW INCLUDE CCL FEATURE +TEMP INCLUDE TMPCOR FEATURE +DMNSW SYMBOL TABLE WILL BE MOVED DOWN FROM TOP OF CORE +KUTSW GIVES CORE CUTBACK ON /K +EXPAND FOR AUTOMATIC CORE EXPANSION +PP ALLOW PROJ-PROG # +DIDAL GIVES DIRECT ACCESS LIBRARY SEARCH MODE +ALGSW WILL LOAD ALGOL OWN BLOCK (TYPE 15) + + SWITCHES OFF (ZERO) IN DEC VERSION +K GIVES 1KLOADER - NO F4 +L FOR LISP LOADER +SPMON GIVES SPMON LOADER (MONITOR LOADER) +TEN30 FOR 10/30 LOADER +STANSW GIVES STANFORD FEATURES +LNSSW GIVES LNS VERSION +FAILSW INCLUDE PROVISIONS FOR SPECIAL FAIL FIXUPS. +LDAC MEANS LOAD CODE INTO ACS + (LDAC DOES NOT WORK WITH KUTSW=1.CORE UUO CLEARS JOBBLT) +WFWSW GIVES BLOCK TYPE 13 (VARIABLS INTO LOW SEG) +SYMARG ACCEPT SYMBOLIC (GLOBAL) ARGUMENTS FOR SWITCHES +SPCHN WILL DO SPECIAL OVERLAYING +SAILSW GIVES BLOCK TYPE 15 (FORCE LOAD OF REL FILES) + AND 16 (FORCE SEARCH OF LIBRARIES) FOR SAIL +* + + +SUBTTL DEFAULT ASSEMBLY SWITCH SETTINGS + +IFNDEF SPMON,<SPMON=0> +IFN SPMON,< TEN30==1 + K==1> + +IFNDEF L,<L=0> + +IFNDEF TEN30,<TEN30=0> + +IFN TEN30!L,< RPGSW=0 + PP=0 +IFNDEF DMNSW,< DMNSW=0> +IFNDEF DIDAL,< DIDAL=0> + ALGSW=0 + PURESW=0 + REENT=0 + LDAC=0 + KUTSW=0 + SEG2SW=0 + NAMESW=0> +IFN TEN30,< EXPAND=0> + +IFNDEF K,<K=0> + +IFNDEF STANSW,<STANSW=0> +IFN STANSW,< LDAC=1 + FAILSW=1> + +IFNDEF LNSSW,<LNSSW=0> +IFN LNSSW,<LDAC=1 + PP=0> + +FAILSW==1 +IFNDEF FAILSW,<FAILSW=0> + +IFNDEF RPGSW,<RPGSW==1> +IFN RPGSW,<PP==1> ;REQUIRE DISK FOR CCL +IFE RPGSW,<TEMP=0> + +IFNDEF PP,<PP==1> + +IFNDEF TEMP,<TEMP==1> + +IFNDEF NAMESW,<NAMESW==1> + +IFNDEF LDAC,<LDAC=0> +IFN LDAC,<KUTSW=0> + +IFNDEF KUTSW,<KUTSW==1> + +IFNDEF EXPAND,< IFN K,<EXPAND==0> + IFE K,<EXPAND==1>> + +IFNDEF DMNSW,<DMNSW==1> +IFN DMNSW!LDAC,<IFNDEF SYMPAT,<SYMPAT==20> + IFN LDAC,<IFG 20-SYMPAT,<SYMPAT==20>>> + +IFNDEF REENT,<REENT==1> +IFE REENT,<PURESW=0 + SEG2SW=0> + +IFDEF TWOSEG,<IFNDEF SEG2SW,<SEG2SW==1>> +IFNDEF SEG2SW,<SEG2SW==0> +IFN SEG2SW,<PURESW==1> + +IFNDEF PURESW,<PURESW==1> + +IFNDEF WFWSW,<WFWSW==0> + +IFN K,<SYMARG=0 + SPCHN=0> + +IFNDEF SYMARG,<SYMARG==0> + +IFNDEF SPCHN,<SPCHN==0> + +IFNDEF DIDAL,<DIDAL==1> + +IFNDEF ALGSW,<ALGSW==0> + +SAILSW==1 +IFNDEF SAILSW,<SAILSW==0> + + +SUBTTL ACCUMULATOR ASSIGNMENTS + F=0 ;FLAGS IN BOTH HALVES OF F + N=1 ;FLAGS IN LH, PROGRAM NAME POINTER IN RH + X=2 ;LOADER OFFSET + H=3 ;HIGHEST LOC LOADED + S=4 ;UNDEFINED POINTER + R=5 ;RELOCATION CONSTANT + B=6 ;SYMBOL TABLE POINTER + D=7 + T=10 + V=T+1 + W=12 ;VALUE + C=W+1 ;SYMBOL + E=C+1 ;DATA WORD COUNTER + Q=15 ;RELOCATION BITS + A=Q+1 ;SYMBOL SEARCH POINTER + P=17 ;PUSHDOWN POINTER + + +;MONITOR LOCATIONS IN THE USER AREA + +JOBDA==140 +JOBHDA==10 + +EXTERN JOBDDT,JOBFF,JOBSA,JOBREL,JOBSYM,JOBUSY,JOB41 +IFN REENT,< EXTERN JOBHRL,JOBCOR> +IFE K,<EXTERN JOBCHN ;RH = PROG BREAK OF FIRST BLOCK DATA + ;LH = PROG BREAK OF FIRST F4 PROG> +IFN RPGSW,< EXTERN JOBERR> +IFN LDAC,< EXTERN JOBBLT> +IFN FAILSW,< EXTERN JOBAPR> + +NEGOFF==400 ;NEGATIVE OFFSET OF HIGH SEGMENT + + +IFN FAILSW,<;LENGTH OF PUSHDOWN LIST FOR POLISH FIXUPS +PPDL==60> + + +;FLAGS F(0 - 17) + CSW==1 ;ON - COLON SEEN + ESW==2 ;ON - EXPLICIT EXTENSION IDENT. + SKIPSW==4 ;ON - DO NOT LOAD THIS PROGRAM + FSW==10 ;ON - SCAN FORCED TO COMPLETION + FCONSW==20 ;ON - FORCE CONSOLE OUTPUT +IFN REENT,<HIPROG==40 ;LOADING HI PROGRAM, SET BY HISEG. CLEARED BY EOF> + ASW==100 ;ON - LEFT ARROW ILLEGAL + FULLSW==200 ;ON - STORAGE EXCEEDED + SLIBSW==400 ;ON - LIB SEARCH IN THIS PROG + RMSMSW==1000 ;REMEMBER IF LOADING WITH SYMBOLS DURING LIB SEARCH + REWSW==2000 ;ON - REWIND AFTER INIT + LIBSW==4000 ;ON - LIBRARY SEARCH MODE + NAMSSW==10000 ;NAME BLOCK HAS BEEN SEEN FOR THIS PROG + ISW==20000 ;ON - DO NOT PERFORM INIT + SYMSW==40000 ;ON - LOAD LOCAL SYMBOLS + DSW==100000 ;ON - CHAR IN IDENTIFIER + NSW==200000 ;ON - SUPPRESS LIBRARY SEARCH + SSW==400000 ;ON - SWITCH MODE + + +;FLAGS N(0 - 17) + ALLFLG==1 ;ON - LIST ALL GLOBALS + ISAFLG==2 ;ON - IGNORE STARTING ADDRESSES + COMFLG==4 ;ON - SIZE OF COMMON SET +IFE K,< F4SW==10 ;F4 IN PROGRESS + RCF==20 ;READ DATA COUNT + SYDAT==40; SYMBOL IN DATA> + SLASH==100 ;SLASH SEEN +IFE K,< BLKD1==200 ;ON- FIRST BLOCK DATA SEEN + PGM1==400 ;ON FIRST F4 PROG SEEN + DZER==1000 ;ON - ZERO SECOND DATA WORD> + EXEQSW==2000 ;IMMEDIATE EXECUTION + DDSW==4000 ;GO TO DDT +IFN RPGSW,<RPGF==10000 ;IN RPG MODE> + AUXSWI==20000 ;ON - AUX. DEVICE INITIALIZED + AUXSWE==40000 ;ON - AUX. DEVICE ENTERED +IFN PP,<PPSW==100000 ;ON - READING PROJ-PROG #> +IFN PP!SPCHN,<PPCSW==200000 ;ON - READING PROJ #> +IFN FAILSW,<HSW==400000 ;USED IN BLOCK 11 POLISH FIXUPS> + + + +;MORE FLAGS IN F (18-35) +IFN REENT,< +SEENHI==1 ;HAVE SEEN HI STUFF +NOHI==2 ;LOAD AS NON-REENTRANT> +IFN RPGSW,<NOTTTY==4 ;DEV "TTY" IS NOT A TTY> +NOHI6==10 ;PDP-6 TYPE SYSTEM +IFN DMNSW,<HISYM==20 ;BLT SYMBOLS INTO HIGH SEGMENT> +SEGFL==40 ;LOAD INTO HI-SEG> +IFN DIDAL,<XFLG==100 ;INDEX IN CORE (BLOCK TYPE 14) +LSTLOD==200 ;LAST PROG WAS LOADED +DTAFLG==400 ;LIBRARY DEVICE IS A DTA (NEEDED FOR INDEXING)> +IFN DMNSW,<DMNFLG==1000> ;SYMBOL TABLE TO BE MOVED DOWN +IFN REENT,<VFLG==2000 ;DO LIB SEARCH OF IMP40.REL BEFORE LIB40> +IFN SYMARG,<ARGFL==4000 ;TREAT $%. AS RADIX-50 CHAR.> +TWOFL==10000 ;TWO SEGMENTS IN THIS BINARY FILE +LOCAFL==20000 ;PRINT LOCAL SYMBOLS IN MAP +TTYFL==40000 ;AUX. DEV. IS TTY + + +IFE K,<F4FL==400000 ;FORTRAN SEEN> +COBFL==200000 ;COBOL SEEN +IFN ALGSW,<ALGFL==100000 ;ALGOL SEEN> + +DEFINE ERROR (X,Y)< +JSP A,ERRPT'X +SIXBIT Y> + + + +IFE K,< TITLE LOADER - LOADS MACRO AND FORTRAN FOUR> +IFN K,< TITLE 1KLOAD - LOADS MACRO> + +IFN PURESW,< +IFE SEG2SW,<HISEG> +IFN SEG2SW,<TWOSEGMENTS + RELOC 400000>> + + + +IFN SPCHN,< +DSKBLK==200 ;LENGTH OF DISK BLOCKS +VECLEN==↑D25 ;LENGTH OF VECTOR TABLE FOR OVERLAYS> + +IFN SAILSW,< +RELLEN==↑D5 ;#NUMBER OF REL FILES OR LIBRARIES (MUST BE SAME)> + +;CALLI DEFINITIONS + +OPDEF RESET [CALLI 0] +OPDEF SETDDT [CALLI 2] +OPDEF DDTOUT [CALLI 3] +OPDEF DEVCHR [CALLI 4] +OPDEF CORE [CALLI 11] +OPDEF EXIT [CALLI 12] +OPDEF UTPCLR [CALLI 13] +OPDEF DATE [CALLI 14] +OPDEF MSTIME [CALLI 23] +OPDEF PJOB [CALLI 30] +OPDEF SETUWP [CALLI 36] +OPDEF REMAP [CALLI 37] +OPDEF GETSEG [CALLI 40] +OPDEF SETNAM [CALLI 43] +OPDEF TMPCOR [CALLI 44] + + + MLON +IFDEF SALL,< SALL> + + +SUBTTL CCL INITIALIZATION +IFN RPGSW,< +BEG: JRST LD ;NORMAL INITIALIZATION +RPGSET: RESET ;RESET UUO. +IFN TEMP,<MOVEI F,CTLBUF-1 ;USE CCL BUFFER FOR COMMANDS + HRRM F,CTLIN+1 ;DUMMY UP BYTE POINTER + HRLI F,-200 ;MAKE IT AN IOWD + MOVEM F,TMPFIL+1 + MOVSI F,(SIXBIT /LOA/) + MOVEM F,TMPFIL + MOVE N,[XWD 2,TMPFIL] ;POINTER FOR TMPCOR READ + TMPCOR N, ;READ AND DELETE LOA FILE + JRST RPGTMP ;NO SUCH FILE IN CORE, TRY DISK + IMULI N,5 ;GET CHAR COUNT + ADDI N,1 + MOVEM N,CTLIN+2 ;STORE IN BUFFER HEADER + MOVEI N,700 ;BYTE POINTER FOR LOA FILE + HRLM N,CTLIN+1 ;BYTE POINTER NOW COMPLETE + SETOM TMPFLG ;MARK THAT A TMPCOR READ WAS DONE + SETZM NONLOD ;NOT YET STARTED SCAN + JRST RPGS3C ;GET BACK IN MAIN STREAM +RPGTMP: SETZM TMPFLG ;MARK AS NOT TMP> + INIT 17,1 ;SET UP DSK FOR COMMAND FILE INPUT. + SIXBIT /DSK/ + XWD 0,CTLIN + JRST NUTS ;CAN'T INIT, GET INPUT FROM TTY. + MOVEI F,3 + PJOB N, ;GET JOB NUMBER +LUP: IDIVI N,12 ;STRIP OFF LAST DIGIT + ADDI N+1,"0"-40 ;CONVERT TO SIXBIT + LSHC N+1,-6 ;SAVE + SOJG F,LUP ;3 DIGITS YET? + HLLZ N+2 ;YES. + HRRI (SIXBIT /LOA/) ;LOADER NAME PART OF FILE NAME. + MOVEM CTLNAM + MOVSI (SIXBIT /TMP/) ;AND EXTENSION. + MOVEM CTLNAM+1 + SETZM CTLNAM+3 + LOOKUP 17,CTLNAM ;FILE THERE? + JRST NUTS ;NO. + INIT 16,1 ;GET SET TO DELETE FILE + SIXBIT /DSK/ + 0 + JRST RPGS3A ;GIVE UP + SETZM CTLNAM+3 ;PUT STUFF BACK AS IT WAS + LOOKUP 16,CTLNAM + JRST RPGS3B + SETZM CTLNAM ;SET FOR RENAME + RENAME 16,CTLNAM + JFCL ;IGNORE FAILURE +RPGS3B: RELEASE 16, ;GET RID OF DEVICE +RPGS3A: SETZM NONLOD ;TO INDICATE WE HAVE NOT YET STARTED TO SCAN + ;COMMAND IN FILE. + + +RPGS3: MOVEI CTLBUF + MOVEM JOBFF + INBUF 17,1 ;SET UP BUFFER. +RPGS3C: TTCALL 3,[ASCIZ /LOADING/] ;PRINT MESSAGE THAT WE ARE STARTING. + SKIPE NONLOD ;CONTIUATION OF COMMAND? + JRST RPGS2 ;YES, SPECIAL SETUP. +CCLCHN: MOVSI N,RPGF ;@ CHAIN FILES CYCLE FROM HERE + JRST CTLSET ;SET UP TTY + +RPGS1: PUSHJ P,[TLNE F,ESW ;HERE FROM FOO@ COMMAND, STORE NAME. + JRST LDDT3 ;SAVE EXTENSION. + TLZE F,CSW!DSW ;AS NAME + MOVEM W,DTIN ;STORE AS NAME + SETZM W,DTIN1 ;TRY BLANK EXTENSION FIRST. + JRST LDDT4] + MOVEM 0,SVRPG ;SAVE 0 JUST IN CASE + SETZM NONLOD ;DETERMINE IF CONTINUATION. + MOVEI 0,2(B) ;BY SEEING IF ANY SYMBOLS LOADED. + CAME 0,JOBREL + SETOM NONLOD ;SET TO -1 AND SKIP CALLI +IFN TEMP,<SETZM TMPFLG> + MOVE 0,ILD1 + MOVEM 0,RPG1 + OPEN 17,OPEN1 ;KEEP IT PURE + JRST [MOVE W,RPG1 + JRST ILD5] + LOOKUP 17,DTIN ;THE FILE NAME. + JRST [MOVE 0,SVRPG ;RESTORE AC0=F + TLOE F,ESW ;WAS EXT EXPLICIT? + JRST ILD9 ;YES, DON'T TRY AGAIN. + MOVEM 0,SVRPG ;SAVE AC0 AGAIN + MOVSI 0,(SIXBIT /TMP/) ;TRY TMP INSTEAD + MOVEM 0,DTIN1 + PUSHJ P,LDDT4 ;SET UP PPN + JRST .-1] ;TRY AGAIN + JRST RPGS3 + +RPGS2: MOVSI 0,RPGF ;SET FLAG + IORM 0,F.C+N + TLO N,RPGF + MOVE 0,SVRPG + JRST LD2Q ;BACK TO INPUT SCANNING. + +> + + + +SUBTTL NORMAL INITIALIZATION + +LD: IFE RPGSW,<BEG:> +IFN L,< HRRZM 0,LSPXIT + MOVEI 0,0 + HRRZM R,RINITL + RESET> +IFE L,<IFN RPGSW,< + HLLZS JOBERR ;MAKE SURE ITS CLEAR.> + RESET ;INITIALIZE THIS JOB +NUTS: SETZ N, ;CLEAR N +CTLSET: SETZB F,S ;CLEAR THESE AS WELL + HLRZ X,JOBSA ;TOP OF LOADER + HRLI X,V ;PUT IN INDEX + HRRZI H,JOBDA(X) ;PROGRAM BREAK + MOVE R,[XWD W,JOBDA] ;INITIAL RELOCATION + MOVSI E,(SIXBIT /TTY/) + DEVCHR E, + TLNN E,10 ;IS IT A REAL TTY? +IFN RPGSW,<JRST [TLNN F,RPGF ;IN CCL MODE?> + EXIT ;NO, EXIT IF NOT TTY +IFN RPGSW,< TRO F,NOTTTY ;SET FLAG + JRST LD1] ;SKIP INIT> + INIT 3,1 ;INITIALIZE CONSOLE + SIXBIT /TTY/ + XWD BUFO,BUFI +CALLEX: EXIT ;DEVICE ERROR, FATAL TO JOB + MOVEI E,TTY1 + MOVEM E,JOBFF + INBUF 3,1 + OUTBUF 3,1 ;INITIALIZE OUTPUT BUFFERS + OUTPUT 3, ;DO INITIAL REDUNDANT OUTPUT +LD1: +IFE L,< HRRZ B,JOBREL ;MUST BE JOBREL FOR LOADING REENTRANT> +IFN L,< MOVE B,JOBSYM ;USED INSTEAD OF JOBREL FOR SYMBOL TABLE FIXUPS> + HRRZM B,HISTRT + SUB B,SE3 ;INITIALIZE SYMBOL TABLE POINTER + CAILE H,1(B) ;TEST CORE ALLOCATION> + JRST [HRRZ B,JOBREL;TOP OF CORE + ADDI B,2000 ;1K MORE + CORE B, ;TRY TO GET IT + EXIT ;INSUFFICIENT CORE, FATAL TO JOB + JRST LD1] ;TRY AGAIN +IFN EXPAND,<SETZ S, + CORE S, ;GET PERMITTED CORE + JFCL + LSH S,12 + SUBI S,1 ;CONVERT TO NUMBER OF WORDS + MOVEM S,ALWCOR ;SAVE IT FOR XPAND TEST> +IFN PURESW,<MOVE S,[XWD HICODE,LOWCOD] + BLT S,LOWCOD+CODLN-1> +IFE L,< MOVS E,X ;SET UP BLT POINTER + HRRI E,1(X)> +IFN L,<MOVS E,H + HRRI E,1(H)> + SETZM -1(E) ;ZERO FIRST WORD + BLT E,(B) ;ZERO CORE UP TO THE SYMBOL AREA + HRRZ S,B ;INITIALIZE UNDEF. POINTER + HRR N,B ;INITIALIZE PROGRAM NAME POINTER +IFE L,< HRRI R,JOBDA ;INITIALIZE THE LOAD ORIGIN + MOVE E,COMM ;SET .COMM. AS THE FIRST PROGRAM + MOVEM E,1(B) ;STORE IN SYMBOL TABLE + HRRZM R,2(B) ;STORE COMMON ORIGIN> + MOVEI E,F.C ;INITIALIZE STATE OF THE LOADER + BLT E,B.C + SETZM MDG ;MULTIPLY DEFINED GLOBAL COUNT + SETZM STADDR ;CLEAR STARTING ADDRESS +IFN REENT,<MOVSI W,1 + MOVEM W,HVAL1 + MOVEM W,HVAL + MOVEM X,LOWX + SETZM HILOW + MOVEM R,LOWR + HRRZI W,1 + SETUWP W, ;SETUWP UUO. + TRO F,NOHI6 ;PDP-6 COMES HERE. + MOVEM F,F.C ;PDP-10 COMES HERE.> +IFN SAILSW,<MOVE W,[XWD -RELLEN-1,LIBFLS-1] ;SET UP POINTERS + MOVEM W,LIBPNT# ;IN THE FORM OF AOBJN WORDS + MOVE W,[XWD -RELLEN-1,PRGFLS-1] + MOVEM W,PRGPNT#> +IFE L,< MOVSI W,254200 ;STORE HALT IN JOB41 + MOVEM W,JOB41(X) ;...> +IFN L,< MOVE W,JOBREL + HRRZM W,OLDJR> +IFN SPCHN,<SETZM CHNACB ;USED AS DEV INITED FLAG TOO> +IFN NAMESW,<SETZM CURNAM> +IFN FAILSW,<MOVEI W,440000 ;SET UP THE SPECIAL BITS OF HEADNUM(ADD+POLISH) + MOVEM W,HEADNM + SETZM POLSW ;SWITCH SAYS WE ARE DOING POLISH + MOVEI W,PDLOV ;ENABLE FOR PDL OV + MOVEM W,JOBAPR + MOVEI W,200000 + CALLI W,16 + SETZM LINKTB ;ZERO OUT TABLE OF LINKS + + + MOVE W,[XWD LINKTB,LINKTB+1] + BLT W,LINKTB+20> +IFN DMNSW,<MOVEI W,SYMPAT + MOVEM W,KORSP> +IFN KUTSW,<SETOM CORSZ> + + +IFN RPGSW,<JRST LD2Q> +LD2: IFN RPGSW,<MOVSI B,RPGF ;HERE ON ERRORS, TURN OFF RPG + ANDCAM B,F.C+N ;IN CORE> +;LOADER SCAN FOR FILE NAMES + +LD2Q: MOVSI B,F.C ;RESTORE ACCUMULATORS + BLT B,B + MOVE P,PDLPT ;INITIALIZE PUSHDOWN LIST + SETZM BUFI2 ;CLEAR INPUT BUFFER POINTER +IFE PP,< SETZM ILD1 ;CLEAR INPUT DEVICE NAME> +IFN PP,< MOVSI T,(SIXBIT /DSK/) ;ASSUME DSK. + MOVEM T,ILD1 + SETZM OLDDEV ;TO MAKE IT GO BACK AFTER /D FOR LIBSR> + SETZM DTIN ;CLEAR INPUT FILE NAME + +LD2B: RELEAS 1, ;RELEASE BINARY INPUT DEVICE +IFN RPGSW,< TLNE N,RPGF ;NOT IF DOING CCL STUFF + JRST LD2BA> + MOVEI T,"*" + IDPB T,BUFO1 ;OUTPUT ASTERISK TO START INPUT + OUTPUT 3, +LD2BA: TLZ F,FULLSW+ASW+ISW+CSW+ESW+SKIPSW+SLIBSW+REWSW +LD2BP: TLNE F,LIBSW ;WAS LIBRARY MODE ON? + TLO F,SKIPSW ;YES, NORMAL MODE IS SKIPPING + +LD2D: IFN PP,<SETZM PPN ;DON'T REMEMBER PPN FROM ONE FILE TO NEXT. +LD2DB: SKIPE W,OLDDEV ;RESET DEVICE IF NEEDED. + CAMN W,ILD1 ;IS IT SAME? + JRST LD2DA ;YES, FORGET IT. + TLZ F,ISW+DSW+FSW+REWSW + MOVEM W,ILD1> +LD2DA: MOVEI W,0 ;INITIALIZE IDENTIFIER SCAN + MOVEI E,6 ;INITIALIZE CHARACTER COUNTER + MOVE V,LSTPT ;INITIALIZE BYTE POINTER TO W + TLZ F,SSW+DSW+FSW ;LEAVE SWITCH MODE +LD3: IFN RPGSW,<TLNE N,RPGF ;CHECK RPG FEATURE + JRST RPGRD> + SOSG BUFI2 ;DECREMENT CHARACTER COUNTER + INPUT 3, ;FILL TTY BUFFER + ILDB T,BUFI1 ;LOAD T WITH NEXT CHARACTER +LD3AA: CAIN T,175 ;OLD ALTMOD + MOVEI T,33 ;NEW ONE + CAIL T,140 ;LOWER CASE? + TRZ T,40 ;CONVERT TO UPPER CASE + MOVE Q,T + HRLM Q,LIMBO ;SAVE THIS CHAR. + MOVSS LIMBO ;AND LAST ONE + IDIVI Q,11 ;TRANSLATE TO 4 BIT CODE + LDB Q,LD8(A) ;LOAD CLASSIFICATION CODE + CAIGE Q,4 ;MODIFY CODE IF .GE. 4 + TLNN F,SSW ;MODIFY CODE IF SWITCH MODE OFF + ADDI Q,4 ;MODIFY CLASS. CODE FOR DISPATCH +IFN SYMARG,<CAIL Q,20 ;SKIP UNLESS SECOND FORM OF DISPATCH + JRST LD3AB ;DIFFERENT DISPATCH> + HRRZ A,LD3A(Q) ;LOAD RH DISPATCH ENTRY + CAIL Q,10 ;SKIP IF CORRECT DISPATCH ENTRY + HLRZ A,LD3A-10(Q) ;LOAD LH DISPATCH ENTRY + JRST @A ;JUMP TO INDICATED LOCATION + +;COMMAND DISPATCH TABLE + +LD3A: XWD LD3,LD7B ;IGNORED CHAR, BAD CHAR (SWITCH) + XWD LD6A,LD6 ;</> OR <(>, LETTER (SWITCH) + XWD LD5,LD6C ;<:>, DIGIT (SWITCH ARG.) + XWD LD5A,LD6D ;<.>, ESCAPE SWITCH MODE <)> + XWD LD5C,LD7 ;<=> OR <L. ARROW>, BAD CHAR. + XWD LD5B,LD4 ;<,>, ALPHABETIC CHAR. + XWD LD5D,LD4 ;<CR.>, NUMERIC CHAR. + XWD LD5E1,LD7 ;<ALT MODE>, BAD CHAR. <)> +IFN SYMARG,<XWD LD7,LD10 ;BAD CHAR,&> + +IFN RPGSW,< +RPGRD1: MOVNI T,5 + ADDM T,CTLIN+2 + AOS CTLIN+1 +RPGRD: SOSG CTLIN+2 ;CHECK CHARACTER COUNT. + JRST [IFN TEMP,<SKIPE TMPFLG ;TMPCOR UUO READ DONE? + JRST LD2 ;YES, JUST LEAVE> + IN 17,0 + JRST .+1 + STATO 17,740000 + JRST LD2 + JSP A,ERRPT + SIXBIT /ERROR WHILE READING COMMAND FILE%/ + JRST LD2] + IBP CTLIN+1 ;ADVANCE POINTER + + + MOVE T,@CTLIN+1 ;AND CHECK FOR LINE # + + + TRNE T,1 + JRST RPGRD1 + LDB T,CTLIN+1 ;GET CHR + JRST LD3AA ;PASS IT ON> +IFN SYMARG,< +LD3AB: ROT Q,-1 ;CUT Q IN HALF + HRRZ A,LD3A(Q) ;PULL OFF RIGHT HALF OF TABLE ENTRY + JUMPGE Q,@A ;WHICH IS CORRECT FOR EVEN ENTRIES + HLRZ A,LD3A(Q) ;BUT USE LEFT HALF FOR ODD ENTRIES + JRST @A> + + +SUBTTL CHARACTER HANDLING + +;ALPHANUMERIC CHARACTER, NORMAL MODE +LD4: SOJL E,LD3 ;JUMP IF NO SPACE FOR CHAR IN W + CAIGE T,141 ;WORRY ABOUT LOWER CASE LETTERS + SUBI T,40 ;CONVERT FROM ASCII TO SIXBIT + IDPB T,V ;DEPOSIT CHAR OF IDENTIFIER IN W + TLO F,DSW ;SET IDENTIFIER FLAG + JRST LD3 ;RETURN FOR NEXT CHARACTER + +;DEVICE IDENTIFIER DELIMITER <:> + +LD5: PUSH P,W ;SAVE W + TLOE F,CSW ;TEST AND SET COLON FLAG + PUSHJ P,LDF ;FORCE LOADING + POP P,W ;RESTORE W + TLNE F,ESW ;TEST SYNTAX + JRST LD7A ;ERROR, MISSING COMMA ASSUMED + JUMPE W,LD2D ;JUMP IF NULL DEVICE IDENTIFIER + MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER +IFN PP,<MOVEM W,OLDDEV ;WE HAVE A NEW ONE, DO IGNORE OLD.> + TLZ F,ISW+DSW+FSW+REWSW ;CLEAR OLD DEVICE FLAGS + JRST LD2D ;RETURN FOR NEXT IDENTIFIER + +;FILE NAME EXTENSION IDENTIFIER DELIMITER <.> +LD5A: IFN SYMARG,< + TRNE F,ARGFL ;IS "." SPECIAL + JRST LD4 ;YES,RADIX-50> + TLOE F,ESW ;TEST AND SET EXTENSION FLAG + JRST LD7A ;ERROR, TOO MANY PERIODS + TLZE F,CSW+DSW ;SKIP IF NULL IDENT AND NO COLON + MOVEM W,DTIN ;STORE FILE IDENTIFIER + JRST LD2D ;RETURN FOR NEXT IDENTIFIER + +;INPUT SPECIFICATION DELIMITER <,> +LD5B: +IFN PP,<TLZE N,PPCSW ;READING PP #? + JRST [ +IFE STANSW,< HRLM D,PPN ;STORE PROJ # + JRST LD6A1 ];GET PROG #> +IFN STANSW,< PUSHJ P,RJUST ;RIGHT JUSTIFY W + HRLM W,PPN ;STORE PROJ NAME + JRST LD2DB ];GET PROG NAME> + PUSHJ P,RBRA ;CHECK FOR MISSING RBRA> + SETOM LIMBO ;USED TO INDICATE COMMA SEEN + TLZN F,FSW ;SKIP IF PREV. FORCED LOADING + PUSHJ P,FSCN2 ;LOAD (FSW NOT SET) + JRST LD2BP ;RETURN FOR NEXT IDENTIFIER + +LD5B1: TLNE F,ESW ;TEST EXTENSION FLAG + JRST LDDT3 ;EXPLICIT EXTENSION IDENTIFIER + TLZN F,CSW+DSW ;SKIP IF IDENT. OR COLON + POPJ P, + MOVEM W,DTIN ;STORE FILE IDENTIFIER + JRST LDDT2 ;ASSUME <.REL> IN DEFAULT CASE + + +;OUTPUT SPECIFICATION DELIMITER <=> OR <LEFT ARROW> +;OR PROJ-PROG # BRACKETS <[> AND <]> + +LD5C: +IFN SPCHN,<CAIN T,"=" ;DO A /= AS SWITCH + TLNN F,SSW + SKIPA + JRST LD6> +IFN RPGSW,<CAIN T,"@" ;CHECK FOR * COMMAND. + JRST RPGS1> +IFN PP,<CAIN T,"[" ;PROJ-PROG #? + JRST [TLO N,PPSW+PPCSW ;SET FLAGS + MOVEM W,PPNW ;SAVE W + MOVEM E,PPNE ;SAVE E + MOVEM V,PPNV ;SAVE V +IFE STANSW,< JRST LD6A2]> ;READ NUMBERS AS SWITCHES +IFN STANSW,< JRST LD2DB]> + CAIN T,"]" ;END OF PP #? + JRST [PUSHJ P,RBRA ;PROCESS RIGHT BRACKET + JRST LD3] ;READ NEXT IDENT> + TLOE F,ASW ;TEST AND SET LEFT ARROW FLAG + JRST LD7A ;ERROR, MISPLACED LEFT ARROW + PUSHJ P,LD5B1 ;STORE IDENTIFIER + TLZN F,ESW ;TEST EXTENSION FLAG + MOVSI W,554160 ;ASSUME <.MAP> IN DEFAULT CASE + MOVEM W,DTOUT1 ;STORE FILE EXTENSION IDENTIFIER + MOVE W,DTIN ;LOAD INPUT FILE IDENTIFIER + MOVEM W,DTOUT ;USE AS OUTPUT FILE IDENTIFIER +IFN SPCHN,<MOVEM W,CHNENT ;AND FOR SPECAIL CHAINING> +IFN PP,<MOVE W,PPN ;PROJ-PROG # + MOVEM W,DTOUT+3 ;...> + MOVE W,ILD1 ;LOAD INPUT DEVICE IDENTIFIER + MOVEM W,LD5C1 ;USE AS OUTPUT DEVICE IDENTIFIER +IFN PP,<SKIPE W,OLDDEV ;RESTORE OLD + MOVEM W,ILD1> +;INITIALIZE AUXILIARY OUTPUT DEVICE + TRZ F,TTYFL + TLZE N,AUXSWI+AUXSWE ;FLUSH CURRENT DEVICE + RELEASE 2, ;... + DEVCHR W, ;IS DEVICE A TTY? + TLNE W,10 ;... + JRST [TRO F,TTYFL ;TTY IS AUX. DEV. + JRST LD2D] ;YES, SKIP INIT + OPEN 2,OPEN2 ;KEEP IT PURE + JRST ILD5A + TLNE F,REWSW ;REWIND REQUESTED? + UTPCLR 2, ;DECTAPE REWIND + TLZE F,REWSW ;SKIP IF NO REWIND REQUESTED + MTAPE 2,1 ;REWIND THE AUX DEV + MOVEI E,AUX ;SET BUFFER ORIGIN + MOVEM E,JOBFF + OUTBUF 2,1 ;INITIALIZE SINGLE BUFFER + TLO N,AUXSWI ;SET INITIALIZED FLAG +IFN LNSSW,<EXCH E,JOBFF + SUBI E,AUX + IDIV C,E + OUTBUF 2,(C)> + JRST LD2D ;RETURN TO CONTINUE SCAN + + + +;RIGHT SQUARE BRACKET (PROJ-PROG NUMBERS) +IFN PP,< +RBRA: TLZN N,PPSW ;READING PP #? + POPJ P, ;NOPE, RETURN + TLZE N,PPCSW ;COMMA SEEN? + JRST LD7A ;NOPE, INDICATE ERROR +IFE STANSW,<HRRM D,PPN ;STASH PROG NUMBER + TLZ F,SSW ;AND TURN OFF SWITCH MODE> +IFN STANSW,<PUSHJ P,RJUST ;RIGHT JUSTIFY W + HRRM W,PPN ;STASH PROG NAME> + MOVE W,PPNW ;PICKUP OLD IDENT + MOVE E,PPNE ;RESTORE CHAR COUNT + MOVE V,PPNV ;RESTORE BYTE PNTR + POPJ P, ;TRA 1,4 + +;RIGHT JUSTIFY W + +IFN STANSW,< +RJUST: JUMPE W,LD7A ;NOTHING TO RIGHT JUSTIFY + TRNE W,77 ;IS W RJUSTED YET? + POPJ P, ;YES, TRA 1,4 + LSH W,-6 ;NOPE, TRY AGAIN + JRST .-3 ;...>> + +IFN SYMARG,< +;& SELECTS A SYMBOL RATHER THAN ANUMBER FOR A SWITCH ARGUMENT +;& MUST ALSO FOLLOW THW SYMBOL; THE FORM IS /&SYMBOL&SWITHCH +LD10: TRC F,ARGFL ;SET OR CLEAR SPECIAL CHARS. + TLCE F,SSW ;IF IN SWITCH MODE, EXIT TO GET IDENTIFIER + JRST LD10B + PUSHJ P,ASCR50 ;IF NOT, REENTER IT, CONVERT IDENTIFIER TO R50 + PUSHJ P,SDEF ;AND SEE IF IT EXISTS + JRST LD10A ;YES IT DOES + PUSHJ P,PRQ ;NO, COMPLAIN. OUTPUT ? + PUSHJ P,SPACE ;FOLLOWED BY A SPACE + PUSHJ P,PRNAME ;FOLLOWED BY THIS SYMBOL + ERROR 0,</ DOESN'T EXIST@/> + JRST LD2 +LD10A: MOVE D,2(A) ;SET D=VALUE OF SYMBOL AS NUMERIC ARG + TLZ F,DSW!FSW + MOVEI E,6 ;INITIALIZE NEW IDENTIFIER SCAN + MOVE V,LSTPT ;(W IS ALREADY 0) + JRST LD3 ;NOW EAT SWITCH AND CONTINUE PROCESSING COMMAND +LD10B: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION TO MAKE SURE FILE IS LOADED + JRST LD2DA> + + + + IFN SYMARG,< +;CONVERT SYMBOL IN W TO RADIX-50 IN C +;ALSO USES A +ASCR50: MOVEI A,0 +R50A: MOVEI C,0 + ROTC W,6 ;C IS NEXT SIXBIT CHAR + CAIGE C,20 + JRST R50B ;UNDER 20, MAY BE ., $, OR % + CAILE C,31 + JRST R50C ;OVER 31 + SUBI C,20-1 ;IS NUMBER +R50D: IMULI A,50 + ADD A,C + JUMPN W,R50A ;LOOP FOR ALL CHARS + MOVE C,A ;WIND UP WITH CHAR IN C + TLO C,040000 ;MAKE IT GLOBAL DEFINITION + POPJ P, +R50B: JUMPE C,R50D ;OK IF SPACE + CAIE C,16 ;TEST IF . + JRST .+3 ;NO + MOVEI C,45 ;YES + JRST R50D + CAIE C,4 ;SKIP IF $ +R50E: MOVEI C,5 ;ASSUME % IF NOTHING ELSE + ADDI C,42 + JRST R50D +R50C: CAIGE C,41 + JRST R50E ;BETWEEN 31 AND 41 + CAILE C,72 + JRST R50E ;OVER 72 + SUBI C,41-13 ;IS LETTER + JRST R50D> + +;DEFINE PUTS A SYMBOL IN THE UNDEFINED SYMBOL TABLE +;SO LOADER CAN SCAN LIBRARY AND LOAD PROGRAMS BEFORE THEY ARE REQUESTED +;THE FORM IS /&SYMBOL# WHERE SYMBOL IS CONVERTED TO RADIX-50 +IFN SYMARG,< +DEFINE: PUSHJ P,ASCR50 ;CONVRT TO R-50 + MOVEI W,-2(S) ;WHERE SYMBOL WILL GO + CAIG W,(H) ;ENOUGH ROOM +IFN EXPAND,<PUSHJ P,[PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM3 + POPJ P,]> +IFE EXPAND,<TLO F,FULLSW> + SUB S,SE3 ;ADJUST POINTER + MOVEM C,1(S) ;R-50 SYMBOL + SETZM 2(S) ;VALUE + TLZ F,DSW!SSW ;TURN OFF SWITCHES + JRST LD2D ;CONTINUE TO SCAN +> + + +SUBTTL TERMINATION +;LINE TERMINATION <CARRIAGE RETURN> + +LD5D: +IFN PP,<PUSHJ P,RBRA ;CHECK FOR UNTERMINATED PP #> + SKIPGE LIMBO ;WAS LAST CHAR. BEFORE CR A COMMA? + TLO F,DSW ;YES ,SO LOAD ONE MORE FILE + PUSHJ P,FSCN ;FORCE SCAN TO COMPLETION + JRST LD2B ;RETURN FOR NEXT LINE + +;TERMINATE LOADING <ALT MODE> + +LD5E: JUMPE D,LD5E1 ;ENTER FROM G COMMAND + TLO N,ISAFLG ;AND IGNORE ANY STARTING ADDRESS TO COME + HRRZM D,STADDR ;USE NUMERIC STARTING ADDRESS +LD5E1: PUSHJ P,CRLF ;START A NEW LINE +IFN RPGSW,<RELEASE 17,0 ;RELEASE COMMAND DEVICE> + PUSHJ P,SASYM ;SETUP JOBSA,JOBFF,JOBSYM,JOBUSY + MOVE W,[SIXBIT ?LOADER?] ;FINAL MESSAGE + PUSHJ P,BLTSET ;SETUP FOR FINAL BLT + RELEASE 2, ;RELEASE AUX. DEV. + RELEASE 1,0 ;INPUT DEVICE + RELEASE 3,0 ;TTY +IFN SPCHN,<RELEASE 4,0 ;SPECIAL CHAINING CHANEL> +IFN NAMESW,<HRRZ W,HISTRT ;IN CASE NO NAME SET, USE FIRST LOADED + MOVE W,-1(W) + SKIPN CURNAM + PUSHJ P,LDNAM + SKIPE W,CURNAM + CAMN W,[SIXBIT /MAIN/] ;FORTRAN MAIN PROG, OR MACRO NO TITLE + SKIPE W,PRGNAM ;USE BINARY FILE NAME IN EITHER CASE + SETNAM W, ;SETNAME> +IFN L,<JRST @LSPXIT> + + +IFN PURESW,< + MOVE V,[XWD HHIGO,HIGO] + BLT V,HIGONE ;MOVE DOWN CODE TO EXIT> + TLNN N,EXEQSW ;DO WE WANT TO START + JRST LD5E3 +IFN RPGSW,<TLNN N,RPGF ;IF IN RPG MODE + JRST LD5E2 + HRRZ C,JOBERR ;CHECK FOR ERRORS + JUMPE C,LD5E2 ;NONE +EXDLTD: TTCALL 3,[ASCIZ /?EXECUTION DELETED +/] + JRST LD5E3> +LD5E2: HRRZ W,JOBSA(X) + TLNE N,DDSW ;SHOULD WE START DDT?? + HRRZ W,JOBDDT(X) +IFN RPGSW,< TLNE N,RPGF ;IF IN RPG MODE + JUMPE W,[TTCALL 3,[ASCIZ /?NO STARTING ADDRESS +/] + JRST EXDLTD]> + JUMPE W,LD5E3 ;ANYTHING THERE? + TLOA W,(JRST) ;SET UP A JRST +LD5E3: SKIPA W,CALLEX ;NO OR NO EXECUTE, SET CALLI 12 + TTCALL 3,[ASCIZ /EXECUTION +/] +IFN LDAC,< HRLZ P,BOTACS ;SET UP FOR ACBLT + MOVEM W,JOBBLT+1(X) ;SET JOBBLT + MOVE W,[BLT P,P] + MOVEM W,JOBBLT(X)> + MOVSI LSTAC,LODACS ;SET UP TO BLT BLT CODE INTO ACS + BLT LSTAC,LSTAC +IFN KUTSW,<SKIPGE E,CORSZ ;DO WE WANT CORE ADJUST + MOVE CORAC,JFCLAC ;NO, CLEAR COREUUO> +IFE LDAC,<MOVE LSTAC,W ;SET END CONDITION> +IFN REENT,< + MOVSI V,LD ;DOES IT HAVE HISEG + JUMPG V,HINOGO ;NO,DON'T DO CORE UUO + MOVSI V,1 ;SET HISEG CORE NONE ZERO + JRST HIGO ;AND GO> +IFE REENT,<JRST 0> + +LODACS: PHASE 0 + BLT Q,(A) ;BLT CODE DOWN +IFN KUTSW,<CORAC: CORE E, ;CUT BACK CORE +JFCLAC: JFCL ;SHOULD NEVER HAVE AN ERROR SINCE REDUCING CORE> +LSTAC: IFN LDAC,<JRST JOBBLT> +IFE LDAC,<EXIT> +DEPHASE + + +SUBTTL PRINT FINAL MESSAGE +; SET UP BLT AC'S, SETDDT, RELEAS + +BLTSET: IFN RPGSW,<IFE K,< + JUMPE W,.+4 ;NO MESSAGE FROM CHAIN IN CCL@>> + PUSHJ P,FCRLF ;A RETURN + PUSHJ P,PWORD ;AND CHAIN OR LOADER + PUSHJ P,SPACE +IFN FAILSW,<MOVSI Q,-20 ;FINISH UP LINK STUFF +FREND: HLRZ V,LINKTB+1(Q) + JUMPE V,NOEND + HRRZ A,LINKTB+1(Q) +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> +IFN L,<CAML V,RINITL> + HRRM A,@X ;PUT END OF LINK CHAIN IN PROPER PLACE +NOEND: AOBJN Q,FREND +IFN REENT,<MOVE X,LOWX ;RESET THINGS>> +IFN KUTSW,<SKIPGE C,CORSZ ;NEG MEANS DO NOT KUT BACK CORE + JRST NOCUT + JUMPE C,MINCUT ;0 IS KUT TO MIN. POSSIBLE + LSH C,12 ;GET AS A NUMBER OF WORDS + SUBI C,1 + CAMG C,JOBREL ;DO WE NEED MORE THAN WE HAVE?? + JRST TRYSML ;NO, SEE IF NUMBER REQUESTED IS TOO SMALL + MOVEI Q,0 + CORE Q, + JFCL ;WE JUST WANT TO KNOW HOW MUCH + HRRZS Q + CAMGE Q,CORSZ + JRST CORERR + JRST NOCUT1 ;SET FOR DO NOT CHANGE SIZE +TRYSML: CAIG C,(R) ;IS DESIRED AMOUNT BIGGER THAN NEEDED +MINCUT: HRRZ C,R ;GET MIN AMOUNT + IORI C,1777 ;CONVERT TO A 1K MULTIPLE +IFN DMNSW,< TRNN F,DMNFLG ;DID WE MOVE SYMBOLS?? + SKIPN JOBDDT(X) ;IF NOT IS DDT THERE?? + JRST .+2> +IFE DMNSW,<SKIPE JOBDDT(X) ;IF NO SYMBOL MOVING JUST CHECK DDT> + JRST NOCUT ;DO NOT CUT IF SYMBOLS AT TOP AND DDT +NOCUT1: MOVEM C,JOBREL(X) ;SAVE FOR CORE UUO + MOVEM C,CORSZ ;SAVE AWAY FOR LATER + JRST .+2 +NOCUT: SETOM CORSZ ;SET FOR NO CUT BACK> +IFN RPGSW,<IFE K,< + JUMPE W,NOMAX ;NO MESSAGE IF CHAIN IN CCL@>> +IFN L,<HRRZ Q,JOBREL + SUB Q,OLDJR ;PROPER SIZE> +IFE L,<HRRZ Q,JOBREL(X) + LSH Q,-12 ;GET CORE SIZE TO PRINT + ADDI Q,1 + PUSHJ P,RCNUM +IFN REENT,<MOVE Q,HVAL + SUB Q,HVAL1 + HRRZS Q + JUMPE Q,NOHY ;NO HIGH SEGMENT + MOVEI T,"+"-40 ;THERE IS A HISEG + PUSHJ P,TYPE + LSH Q,-12 + ADDI Q,1 + PUSHJ P,RCNUM +NOHY:>> + MOVE W,[SIXBIT /K CORE/] + PUSHJ P,PWORD + PUSHJ P,CRLF +IFE L,< +IFN RPGSW,<TLNE N,RPGF + JRST NOMAX ;DO NOT PRINT EXTRA JUNK IN RPG MODE> + MOVE Q,JOBREL + LSH Q,-12 + ADDI Q,1 + PUSHJ P,RCNUM ;PRINT MAX LOW CORE SIZE +IFN REENT,< SKIPE Q,JOBHRL ;GET SIZE OF HIGH SEGMENT + PUSHJ P,[MOVEI Q,400001(Q) ;CLEAR HIGH ORDER BIT + MOVEI T,"+"-40 ;PRINT A HIGH CORE PART + PUSHJ P,TYPE + LSH Q,-12 + JRST RCNUM]> + MOVE W,[SIXBIT /K MAX/] + PUSHJ P,PWORD +IFN DMNSW,<TRNN F,DMNFLG> + SKIPN JOBDDT(X) + SKIPA Q,JOBREL(X)> + MOVEI Q,1(S) ;FIND THE AMOUNT OF SPACE LEFT OVER + SUB Q,JOBFF(X) + PUSHJ P,RCNUM + MOVE W,[SIXBIT / WORDS/] + PUSHJ P,PWORD + MOVE W,[SIXBIT / FREE/] + PUSHJ P,PWORD + PUSHJ P,CRLF +NOMAX: MOVE W,JOBDDT(X) + SETDDT W, +IFE TEN30,<HRLI Q,20(X) ;SET UP BLT FOR CODE + HRRI Q,20> +IFN TEN30,<HRLI Q,JOBDDT(X) + HRRI Q,JOBDDT> + HRRZ A,R + POPJ P, ;WE HAVE SET R UP BY CLEVER CODE IN SASYM +IFN KUTSW,<CORERR: TTCALL 3,[ASCIZ /?NOT ENOUGH CORE +/] + EXIT> + + +SUBTTL SET UP JOBDAT +SASYM: TLNN F,NSW + PUSHJ P,LIBF ;SEARCH LIBRARY IF REQUIRED + PUSHJ P,FSCN ;FORCE END OF SCAN +IFN ALGSW,<MOVE C,[RADIX50 44,%OWN] + MOVE W,%OWN ;GET VALUE + TRNE F,ALGFL ;IF ALGOL PROG LOADED + PUSHJ P,SYMPT ;DEFINE %OWN> +IFN RPGSW,<HLRE A,S + MOVNS A + LSH A,-1 + ADD A,JOBERR + HRRM A,JOBERR> + PUSHJ P,PMS1 ;PRINT UNDEFS + HRRZ A,H ;DO NOT CLOBBER H IF STILL INSERTING SYMBOLS + SUBI A,(X) ;HIGHEST LOC LOADED INCLUDES LOC STMTS + CAILE A,(R) ;CHECK AGAINST R + HRR R,A ;AND USE LARGER +IFE L,< HRRZ A,STADDR ;GET STARTING ADDRESS + HRRM A,JOBSA(X) ;STORE STARTING ADDRESS + HRRZM R,JOBFF(X) ;AND CURRENT END OF PROG + HRLM R,JOBSA(X)> +IFN DMNSW,<MOVE C,[RADIX50 44,PAT..] ;MARK PATCH SPACE FOR RPG + MOVEI W,(R) + SKIPE JOBDDT(X) ;BUT ONLY IF DDT LOADED + PUSHJ P,SYMPT +IFN REENT,<TRNE F,HISYM ;SHOULD SYMBOLS GO IN HISEG? + JRST BLTSYM ;YES>> +IFN DMNSW!LDAC,< ;ONLY ASSEMBLE IF EITHER SET +IFE LDAC,< TRNN F,DMNFLG ;GET EXTRA SPACE IF SYMBOLS + JRST NODDT ;MOVED OR IF LOADING ACS> +IFE DMNSW,< MOVEI A,20 ;FOR LOADING ACS> +IFN DMNSW,< MOVE A,KORSP +IFN LDAC,< TRNN F,DMNFLG ;ONLY 20 IF SYMBOLS NOT MOVED + MOVEI A,20>> + ADDI A,(R) ;GET ACTUAL PLACE TO PUT END OF SPACE + ADDI A,(X) + CAIL A,(S) ;DO NOT OVERWRITE SYMBOLS +IFN EXPAND,<JRST [PUSHJ P,XPAND> + PUSHJ P,MORCOR +IFN EXPAND,< JRST .-1]> +IFN LDAC,<HRRM R,BOTACS ;SAVE BOTTOM OF WHERE WE PUT ACS + HRRZ A,R + ADDI A,(X) + HRL A,X ;SET UP BLT FROM (X) TO R(X) + MOVEI Q,17(A) + BLT A,(Q)>> +IFN DMNSW,<TRNN F,DMNFLG ;NOW THE CODE TO MOVE SYMBOLS + JRST NODDT + HRRZ A,R + ADD A,KORSP + MOVE W,A ;SAVE POINTER TO FINAL LOC OF UNDEFS + ADDI A,(X) + HLLZ Q,S ;COMPUTE LENGTH OF SYMBOL TABLE + ADD Q,B + HLROS Q + MOVNS Q + ADDI Q,-1(A) ;GET PLACE TO STOP BLT + HRLI A,1(S) ;WHERE TO BLT FROM + SUBI W,1(S) ;GET AMOUNT TO CHANGE S AND B BY + BLT A,(Q) ;MOVE SYMBOL TABLE + ADD S,W + ADD B,W ;CORRECT S AND B FOR MOVE + SKIPN JOBDDT(X) ;IS DDT LOADED + JRST NODDT ;NO DO NOT RESET R + HRRI R,1(Q) ;SET R TO POINT TO END OF SYMBOLS + SUBI R,(X) + HRRM R,JOBFF(X) + HRLM R,JOBSA(X) ;AND SAVE AWAY NEW JOBFF +IFN LDAC,<SKIPA> ;SKIP THE ADD TO R +NODDT:> +IFN LDAC,<ADDI R,20> ;MAKE SURE R IS CORRECT FOR BLT + MOVE A,B + ADDI A,1 ;SET UP JOBSYM, JOBUSY +IFE L,<MOVEM A,JOBSYM(X)> +IFN L,<MOVEM A,JOBSYM> + MOVE A,S + ADDI A,1 +IFE L,<MOVEM A,JOBUSY(X) + MOVE A,HISTRT ;TAKE POSSIBLE REMAP INTO ACCOUNT + MOVEM A,JOBREL(X) ;SET UP FOR IMEDIATE EXECUTION> +IFN L,<MOVEM A,JOBUSY> +IFN REENT,< + SKIPE A,HILOW ;SET UP TOP LOC OF LOW CORE EXCLUDING BLOCKS + SUBI A,1(X) ;IF NON-ZERO THEN IT NEEDS RELOCATION + HRLM A,JOBCOR(X) + TRNN F,SEENHI + POPJ P, + HRRZ A,HVAL + HRRM A,JOBHRL(X) + SUB A,HVAL1 + HRLM A,JOBHRL(X)> + POPJ P, + + + +SUBTTL BLT SYMBOL TABLE INTO HIGH SEGMENT +IFN DMNSW&REENT,< +BLTSYM: MOVE Q,HVAL ;GET ORIGIN OF HISEG + CAMN Q,HVAL1 ;HAS IT CHANGED? + JRST NOBLT ;NO + HLLZ Q,S ;COMPUTE LENGTH OF SYMBOL TABLE + HLRS S ;PUT NEG COUNT IN BOTH HALVES + JUMPE S,.+2 ;SKIP IF S IS ZERO + HRLI S,-1(S) ;SUB 1 FROM LEFT TO FIX CARRY PROBLEM + ADD Q,B + HLROS Q + MOVNS Q + ADD Q,HVAL ;ADD LENGTH OF HISEG + SUB Q,HVAL1 ;BUT REMOVE ORIGIN + ADD Q,HISTRT ;START OF HISEG IN CORE + HRRZS Q ;CLEAR INDEX FROM Q + ADD Q,KORSP ;SAVE SPACE FOR SYMBOL PATCHES + CORE Q, ;EXPAND IF NEEDED + PUSHJ P,MORCOR + PUSH P,B ;SAVE B + SOJ B, ;REMOVE CARRY FROM ADD TO FOLLOW + MOVSS B ;SWAP SYMBOL POINTER + ADD B,JOBREL + HRRM B,(P) ;SAVE NEW B + MOVE Q,JOBREL + ADD B,S ;INCASE ANY UNDEFS. + BLT B,(Q) ;MOVE SYMBOLS + POP P,B ;GET NEW B + SUB B,HISTRT + ADD B,HVAL1 + SOJ B, ;REMOVE CARRY + ADDI S,(B) ;SET UP JOBUSY +BLTSY1: MOVE Q,JOBREL + SUB Q,HISTRT + ADD Q,HVAL1 + SUBI Q,1 ;ONE TOO HIGH + MOVEM Q,HVAL + JRST NODDT + + + +NOBLT: HRRZ Q,HILOW ;GET HIGHEST LOC LOADED + HRRZ A,S ;GET BOTTOM OF UNDF SYMBOLS + SUB A,KORSP ;DON'T FORGET PATCH SPACE + IORI A,1777 ;MAKE INTO A K BOUND + IORI Q,1777 + CAIN A,(Q) ;ARE THEY IN SAME K +IFN EXPAND,<JRST [PUSHJ P,XPAND> + PUSHJ P,MORCOR +IFN EXPAND,< JRST NOBLT]> + MOVEM Q,HISTRT ;SAVE AS START OF HIGH + MOVEI A,400000 ;HISEG ORIGIN + MOVEM A,HVAL1 ;SAVE AS ORIGIN + SUB S,HISTRT ;GET POSITION OF UNDF POINTER + ADDI S,377777 ;RELATIVE TO ORG + SUB B,HISTRT ;SAME FOR SYM POINTER + ADDI B,377777 + TRO F,SEENHI ;SO JOBHRL WILL BE SET UP + JRST BLTSY1 ;AND USE COMMON CODE +> + +IFN DMNSW!LDAC,< +MORCOR: ERROR ,</MORE CORE NEEDED#/> + EXIT> + + +SUBTTL WRITE CHAIN FILES + +IFE K,< ;DONT INCLUDE IN 1KLOAD +CHNC: SKIPA A,JOBCHN(X) ;CHAIN FROM BREAK OF FIRST BLOCK DATA +CHNR: HLR A,JOBCHN(X) ;CHAIN FROM BREAK OF FIRST F4 PROG +IFN ALGSW,<TRNE F,ALGFL ;IF ALGOL LOADING + POPJ P, ;JUST RETURN> + HRRZS A ;ONLY RIGHT HALF IS SIGNIFICANT + JUMPE A,LD7C ;DON'T CHAIN IF ZERO + TLNN N,AUXSWI ;IS THERE AN AUX DEV? + JRST LD7D ;NO, DON'T CHAIN + PUSH P,A ;SAVE WHEREFROM TO CHAIN + JUMPE D,.+2 ;STARTING ADDR SPECIFIED? + HRRZM D,STADDR ;USE IT + CLOSE 2, ;INSURE END OF MAP FILE + TLZ N,AUXSWI+AUXSWE ;INSURE NO PRINTED OUTPUT + PUSHJ P,SASYM ;DO LIB SEARCH, SETUP JOBSA, ETC. +IFN RPGSW,<TLNE N,RPGF ;IF IN CCL MODE + TDZA W,W ;NO MESSAGES> + MOVE W,[SIXBIT ?CHAIN?] ;FINAL MESSAGE + PUSHJ P,BLTSET ;SETUP BLT PNTR, SETDDT, RELEAS + POP P,A ;GET WHEREFROM + HRRZ W,R ;CALCULATE MIN IOWD NECESSARY + SKIPE JOBDDT(X) ;IF JOBDDT KEEP SYMBOLS + CAILE W,1(S) + JRST CHNLW1 + HRRZ W,JOBREL ;NEED SYMBOLS AND THEY HAVE NOT MOVED DOWN + SUBI W,(X) ;BECAUSE WE WILL NOT HAVE BLITTED + SUBI B,-1(X) ;SYMBOL TABLE WILL COME OUT IN A + MOVEM B,JOBSYM(X) ;DIFFERENT PLACE +CHNLW1: MOVNS W + ADDI W,-7(A) + ADDI A,-7(X) + PUSH A,W ;SAVE LENGTH + HRLI W,-1(A) + MOVSM W,IOWDPP ;... + SETZM IOWDPP+1 ;JUST IN CASE + PUSH A,JOBCHN(X) + PUSH A,JOBSA(X) ;SETUP SIX WORD TABLE + PUSH A,JOBSYM(X) ;... + PUSH A,JOB41(X) + PUSH A,JOBDDT(X) + SETSTS 2,17 ;SET AUX DEV TO DUMP MODE + MOVSI W,435056 ;USE .CHN AS EXTENSION + MOVEM W,DTOUT1 ;... + PUSHJ P,IAD2 ;DO THE ENTER + OUTPUT 2,IOWDPP ;WRITE THE CHAIN FILE + STATZ 2,IOBAD!IODEND + JRST LOSEBIG + CLOSE 2, + STATZ 2,IOBAD!IODEND +IFN RPGSW,<JRST LOSEBIG + TLNE N,RPGF ;IF IN CCL MODE + JRST CCLCHN ;LOAD NEXT LINK + EXIT> +LOSEBI: TTCALL 3,[ASCIZ /?DEVICE ERROR/] + EXIT> + + +SUBTTL SPECIAL CHAINB +IFE SPCHN,< XLIST > +IFN SPCHN,< +CHNBG: + PUSHJ P,FSCN1A ;FORCE SCAN TO COMPLETION FOR CURRENT FILE + TLNN N,AUXSWI ;IS THERE AN AUX DEV?? + JRST LD7D + HRLZI W,-1(R) ;CHNTAB-L = ADDRESS OF VECTOR TABLE + HRRI W,1 ;CHNTAB-R = NEXT DISK BLOCK TO RITE INTO + MOVEM W,CHNTAB + MOVE C,[RADIX50 4,OVTAB] ;DEFINE GLOBAL SYMBOL OVTAB + MOVEI W,(R) ;TO HAVE VALUE THE BEGINNING OF THE VECTOR TABLE + PUSHJ P,SYMPT + ADDI R,VECLEN ;RESERVE SPACE FOR VECTOR TABLE + MOVE C,[RADIX50 4,OVBEG] ;OVBEG IS BEGINNING OF OVERLAY AREA + MOVEI W,(R) + PUSHJ P,SYMPT + HRRZM R,BEGOV ;AND SAVE IN OVBEG + OPEN 4,CHNOUT ;OPEN FILE FOR CHAIN + JRST ILD5 ;CANT OPEN CHAIN FILE + ENTER 4,CHNENT ;ENTER CHAIN FILE + JRST IMD3 ;NO CAN DO + HRRZ W,N + SUB W,HISTRT ;KEEP N RIGHT HALF AS RELATIVE TO HISTRT + HRRZM W,CHNACN ;SAVE FOR RESTORING + MOVEM B,CHNACB ;ALSO B R IS SAVED IN BEGOV + POPJ P, + +CHNENS: TLOA N,PPCSW ;THIS FLAG UNUSED AT THIS POINT +CHNEN: TLZ N,PPCSW ;ON TO NOT DELETE NEW SYMBOLS + SKIPN CHNACB ;WILL BE NON-ZERO IF WE SAW A /< (> TO KEEP MACRO HAPPY) + JRST LD7D ;ERROR MESSAGE + PUSHJ P,FSCN1A ;LOAD LIB (IF DESIRED) AND FORCE SCAN + SKIPL Q,S ;CHECK SYMBOL TABLE FOR MISSED UNDEFS + JRST NOER ;NONE THERE + MOVEI E,0 ;COUNT OF ERRORS +ONCK: + IFN FAILSW,<SKIPL V,1(Q) ;IF HIGH ORDER BIT IS ON + TLNN V,740000 ;OR IF ALL CODE BITS 0 + JRST NXTCK ;THEN NOT TO BE CHECKED> + MOVE V,2(Q) ;GET FIXUP WORD + TLNE V,100000 ;BIT INDICATES SYMBOL TABLE FIXUP + JRST SMTBFX +IFN FAILSW,<TLNE V,40000 ;BIT INDICATES POLISH FIXUP + JRST POLCK> + TLZE V,740000 ;THESE BITS WOULD MEAN ADDITIVE + JRST [JSP A,CORCKL + JRST NXTCK] ;ONLY TRY FIRST LOCATION +CORCK: JSP A,CORCKL + HRRZ V,@X ;THE WAY TO LINK +CORCKL: IFN REENT,<CAMGE V,HVAL1> + CAMGE V,BEGOV + SKIPA ;NOT IN BAD RANGE + JRST ERCK ;BAD, GIVE ERROR + JUMPE V,NXTCK ;CHAIN HAS RUN OUT +IFN REENT,<CAMGE V,HVAL1 ;GET CORRECT LINK + SKIPA X,LOWX + MOVE X,HIGHX> + XCT (A) ;TELLS US WHAT TO DO + JRST CORCKL ;GO ON WITH NEXT LINK + + +SMTBFX: TLNE N,PPCSW ;IF NOT CUTTING BACK SYMBOL TABLE + JRST NXTCK ;THE ALL OK + ADD V,HISTRT ;GET PLACE TO POINT TO + HRRZS V + HLRE D,CHNACB ;OLD LENGTH OF TABLE (NEGATIVE) + HLRE T,B ;NEW LENGTH + SUB D,T ;-OLD LEN+NEW LEN + ADDI D,(B) ;OLD BOTTOM=NEW BOTTOM+NEW LEN-OLD LEN + CAIG V,(D) ;IS IT IN THE PART WE ARE KEEPING + JRST ERCK + JRST NXTCK ;YES +IFN FAILSW,<POLCK: HLRZ C,V ;FIND HEADER + PUSHJ P,SREQ + SKIPA + JRST LOAD4A ;SHOULD BE THERE + HRL C,2(A) ;NOW FIRST OPERATOR (STORE) + MOVSS C + PUSHJ P,SREQ + SKIPA + JRST LOAD4A + ANDI C,37 ;GET OPERATION + HRRZ V,2(A) ;DESTINATION + JRST @CKSMTB-15(C) ;DISPATCH +CKSMTB: EXP SMTBFX,SMTBFX,SMTBFX,CORCK,LCORCK,CORCK,NXTCK +LCORCK: JSP A,CORCKL + HLRZ V,@X> +ERCK: MOVE C,1(Q) ;GET SYMBOL NAME + PUSHJ P,FCRLF ;FORCE CRLF AND OUTPUT ON TTY + PUSHJ P,PRNAME ;PRINT IT + ADDI E,1 ;MARK ERROR +NXTCK: ADD Q,SE3 ;TRY ANOTHER + JUMPL Q,ONCK +IFN REENT,<PUSHJ P,RESTRX ;GET PROPER X BACK> + JUMPE E,NOER ;DID ANYTHING GO WRONG?? + ERROR ,</UNDEFINED GLOBAL(S) IN LINK@/> + JRST LD2 ;GIVE UP +NOER: MOVE A,BEGOV ;GET START OF OVERLAY + ADDI A,(X) ;GET ACTUAL CURRENT LOCATION +IFN REENT,<HRRZ W,HILOW ;AND END OF OVERLAY+1 + HRRZM A,HILOW ;RESET> +IFE REENT,<HRRZ W,R + ADDI R,(X) ;A GOOD GUESS> + SUBM A,W ;W=-LENGTH + SUBI A,1 ;SET TO BASE-1 (FOR IOWD) + HRL A,W ;GET COUNT + MOVEM A,IOWDPP + HRR A,CHNTAB ;BLOCK WE ARE WRITING ON + HLRZ V,CHNTAB ;POINTER TO SEGMENT TABLE + ADDI V,1 ;NEXT LOCATION + HRLM V,CHNTAB ;REMEMBER IT + CAML V,BEGOV ;CHECK FOR OVERRUN + JRST [ERROR </?TOO MANY LINKS@/> + JRST LD2];GIVE UP + MOVEM A,@X ;PUT INTO TABLE + MOVN W,W ;GET POSITIVE LENGTH + ADDI W,DSKBLK-1 + IDIVI W,DSKBLK ;GET NUMBER OF BLOCKS + ADDM W,CHNTAB ;AND UPDATE + TLZE N,PPCSW + JRST NOMVB ;DO NOT ADJUST SYMBOLS + HLRE W,CHNACB ;GET OLD LENGTH OF DEF SYMBOLS + HLRE C,B ;AND NEW LENGTH + SUB W,C ;-OLD LEN+NEW LEN + HRRZ C,B ;SAVE POINTER TO CURRENT S + ADD S,W + HRL W,W + ADD B,W ;UPDATE B (COUNT AND LOC) + JUMPGE S,UNLNKD ;JUST IN CASE NOTHING TO MOVE + HRRZ A,B ;PLACE TO PUT UNDEFS +UNLNK: MOVE W,(C) + MOVEM W,(A) ;TRANSFER + SUBI A,1 + CAIE A,(S) ;HAVE WE MOVED LAST WORD?? + SOJA C,UNLNK ;NO, CONTINUE +UNLNKD: HRRZ W,CHNACN ;GET SAVED N + ADD W,HISTRT + HRR N,W ;AND RESET IT +NOMVB: HRR R,BEGOV ;PICK UP BASE OF AREA + OUTPUT 4,IOWDPP ;DUMP IT + STATZ 4,IOBAD!IODEND ;AND ERROR CHECK + JRST LOSEBI + HRRZ V,R ;GET AREA TO ZERO + MOVEI W,@X + CAIL W,1(S) ;MUST MAKE SURE SOME THERE + POPJ P, ;DONE + SETZM (W) + CAIL W,(S) + POPJ P, + HRLS W + ADDI W,1 + BLT W,(S) ;ZERO WORLD + POPJ P, +> + LIST + + +SUBTTL EXPAND CORE + +IFN EXPAND,< +XPAND: TLNE F,FULLSW ;IF CORE EXCEEDED + POPJ P, ;DON'T WASTE TIME ON CORE UUO + PUSH P,Q + HRRZ Q,JOBREL + ADDI Q,2000 +XPAND1: PUSH P,H ;GET SOME REGISTERS TO USE + PUSH P,X + PUSH P,N + PUSH P,JOBREL ;SAVE PREVIOUS SIZE + CAMG Q,ALWCOR ;CHECK TO SEE IF RUNNING OVER + CORE Q, + JRST XPAND6 +IFE K,< HRRZ H,MLTP ;GET LOWEST LOCATION + TLNN N,F4SW ;IS FORTRAN LOADING> + MOVEI H,1(S) ;NO, USE S + POP P,X ;LAST JOBREL + HRRZ Q,JOBREL;NEW JOBREL + SUBI Q,(X) ;GET DIFFERENCE + HRLI Q,X ;PUT X IN INDEX FIELD +XPAND2: MOVE N,(X) + MOVEM N,@Q + CAMLE X,H ;TEST FOR END + SOJA X,XPAND2 + HRLI H,-1(Q) + TLC H,-1 ;MAKE IT NEGATIVE + SETZM (H) ;ZERO NEW CORE + AOBJN H,.-1 + MOVEI H,(Q) +XPAND8: ADD S,H + ADD B,H + ADDM H,HISTRT ;UPDATE START OF HISEG +IFN REENT,<ADDM H,HIGHX ;AND STORE LOCATION + TLNE F,HIPROG + ADDM H,-1(P) ;X IS CURRENTLY IN THE STACK> + POP P,N + ADD N,H +IFE K,< TLNN N,F4SW ;F4? + JRST XPAND3 + ADDM H,PLTP + ADDM H,BITP + ADDM H,SDSTP + ADDM H,MLTP + TLNE N,SYDAT + ADDM H,V> +XPAND3: AOSA -3(P) +XPAND5: POP P,N + POP P,X + POP P,H + POP P,Q + POPJ P, + + + +XPAND6: POP P,A ;CLEAR JOBREL OUT OF STACK + ERROR ,</MORE CORE NEEDED#/> + JRST XPAND5 + +XPAND7: PUSHJ P,XPAND + JRST SFULLC + JRST POPJM2 + +XPAND9: PUSH P,Q ;SAVE Q + HRRZ Q,JOBREL ;GET CORE SIZE + ADDI Q,(V) ;ADD XTRA NEEDED + JRST XPAND1 ;AND JOIN COMMON CODE + +POPJM3: SOS (P) ;POPJ TO CALL-2 +POPJM2: SOS (P) ;POPJ TO CALL-1 + SOS (P) ;SAME AS POPJ TO + POPJ P, ;NORMAL POPJ MINUS TWO +> + + + +SUBTTL SWITCH HANDLING + +;ENTER SWITCH MODE + +LD6A: CAIN T,57 ;WAS CHAR A SLASH? + TLO N,SLASH ;REMEBER THAT +LD6A2: TLO F,SSW ;ENTER SWITCH MODE +LD6A1: SETZB D,C ;ZERO TWO REGS FOR DECIMAL AND OCTAL + JRST LD3 ;EAT A SWITCH + +;ALPHABETIC CHARACTER, SWITCH MODE + +LD6: + CAIL T,141 ;ACCEPT LOWER CASE SWITCHES + SUBI T,40 +IFN SPCHN,<XCT LD6B-74(T) ;EXECUTE SWITCH FUNCTION> +IFE SPCHN,<XCT LD6B-101(T) ;EXECUTE SWITCH FUNCTION> + TLZE N,SLASH ;SWITCH MODE ENTERED W/ SLASH? + JRST LD6D ;LEAVE SWITCH MODE + JRST LD6A1 ;STAY IN SWITCH MODE + + + +;DISPATCH TABLE FOR SWITCHES + +; THE INSTRUCTION AT THE CHARACTER LOCATION IS EXECUTED + +LD6B: +IFN SPCHN,<PUSHJ P,CHNBG ;LESS THAN - BEGINNING OF OVERLAY + PUSHJ P,CHNENS ;= - PUT OUT CHAIN RETAINING SYMBOLS + PUSHJ P,CHNEN ;GREATER THAN - END OF OVERLAY + JRST LD7B ;? - ERROR + JRST LD7B ;@ - ERROR> + PUSHJ P,ASWTCH ;A - LIST ALL GLOBALS +IFN DMNSW,<PUSHJ P,DMN2 ;B - BLOCKS DOWN SYMBOL TABLE > +IFE DMNSW,<JRST LD7B ;B - ERROR> +IFE K,< PUSHJ P,CHNC ;C - CHAIN, START W/ COMMON> +IFN K,< JRST LD7B ;C - ILLEGAL IN 1KLOAD> + PUSHJ P,LDDT ;D - DEBUG OPTION, LOAD DDT + TLO N,EXEQSW ;E - LOAD AND GO + PUSHJ P,LIBF ;F - LIBRARY SEARCH + PUSHJ P,LD5E ;G - GO INTO EXECUTION +IFN REENT,<PUSHJ P,HSET ;H - REENTRANT. PROGRAM> +IFE REENT,<JFCL ;JUST IGNORE /H> + PUSHJ P,ISWTCH ;I - IGNORE STARTING ADDRESSES + TLZ N,ISAFLG ;J - USE STARTING ADDRESSES +IFE KUTSW,<JRST LD7B ;K - ERROR> +IFN KUTSW,<MOVEM C,CORSZ ;K - SET DESIRED CORE SIZE> + PUSHJ P,LSWTCH ;L - ENTER LIBRARY SEARCH + PUSHJ P,PRMAP ;M - PRINT STORAGE MAP + TLZ F,LIBSW+SKIPSW ;N - LEAVE LIBRARY SEARCH + HRR R,D ;O - NEW PROGRAM ORIGIN + PUSHJ P,PSWTCH ;P - PREVENT AUTO. LIB. SEARCH + TLZ F,NSW ;Q - ALLOW AUTO. LIB. SEARCH +IFE K,< PUSHJ P,CHNR ;R - CHAIN, START W/ RESIDENT> +IFN K,< JRST LD7B ;R - ILLEGAL IN 1KLOAD> + PUSHJ P,SSWTCH ;S - LOAD WITH SYMBOLS + PUSHJ P,LDDTX ;T - LOAD AND GO TO DDT + PUSHJ P,PMS ;U - PRINT UNDEFINED LIST +IFN REENT,<PUSHJ P,VSWTCH ;V - LOAD REENTRANT LIB40> +IFE REENT,<JRST LD7B ;V - ERROR> + TLZ F,SYMSW+RMSMSW ;W - LOAD WITHOUT SYMBOLS + TLZ N,ALLFLG ;X - DO NOT LIST ALL GLOBALS + TLO F,REWSW ;Y - REWIND BEFORE USE + JRST LDRSTR ;Z - RESTART LOADER + + + +; PAIRED SWITCHES ( +,-) + +ASWTCH: JUMPL D,.+2 ;SKIP IF /-A + TLOA N,ALLFLG ;LIST ALL GLOBALS + TLZ N,ALLFLG ;DON'T + POPJ P, + +ISWTCH: JUMPL D,.+2 ;SKIP IF /-I + TLOA N,ISAFLG ;IGNORE STARTING ADDRESSES + TLZ N,ISAFLG ;DON'T + POPJ P, + +LSWTCH: JUMPL D,.+2 ;SKIP IF /-L + TLOA F,LIBSW!SKIPSW ;ENTER LIBRARY SEARCH + TLZ F,LIBSW!SKIPSW ;DON'T + POPJ P, + +PSWTCH: JUMPL D,.+2 ;SKIP IF /-P + TLOA F,NSW ;PREVENT AUTO. LIB SEARCH + TLZ F,NSW ;ALLOW + POPJ P, + +SSWTCH: JUMPL D,.+2 ;SKIP IF /-S + TLOA F,SYMSW!RMSMSW ;LOAD WITH SYMBOLS + TLZ F,SYMSW!RMSMSW ;DON'T + POPJ P, + +IFN REENT,< +VSWTCH: JUMPL D,.+2 ;SKIP IF /-V + TROA F,VFLG ;SEARCH RE-ENTRANT LIBRARY + TRZ F,VFLG ;DON'T + POPJ P,> + + +IFN REENT,< +; H SWITCH --- EITHER /H OR /NH +HSET: JUMPE D,SETNUM ;/H ALWAYS LEGAL + CAIGE D,2 ;WANT TO CHANGE SEGMENTS + JRST SETSEG ;YES,GO DO IT + TRNN F,SEENHI ;STARTED TO LOAD YET? + JRST HCONT ;NO, CONTINUE. + ERROR ,<?/H ILLEGAL AFTER FIRST HISEG FILE IS LOADED@?>> + +LDRSTR: ERROR 0,</LOADER RESTARTED@/> + JRST LD ;START AGAIN +IFN REENT,< +REMPFL: ERROR ,</?LOADER REMAP FAILURE@/> + JRST LDRSTR +HCONT: HRRZ C,D + ANDCMI C,1777 + CAIL C,400000 + CAIG C,(H) + JRST COROVL ;BEING SET LOWER THEN 400000 OR MORE THAN TO OF LOW SEG + HRRZM C,HVAL1 ;WE HAVE REMOVED THE ODD BITS TO MAKE A 1K MULT + ADDI C,JOBHDA + CAILE C,(D) ;MAKE SURE OF ENOUGH ROOM + MOVE D,C + HRLI D,W ;SET UP W IN LEFT HALF + MOVEM D,HVAL + POPJ P, ;RETURN. + +COROVL: ERROR ,</HISEG STARTING ADDRESS TOO LOW@/> + JRST LDRSTR +SETNUM: TRO F,NOHI ;SET NO-HIGH-SEG SWITCH. + POPJ P,> + + +;SWITCH MODE NUMERIC ARGUMENT + +LD6C: LSH D,3 ;BUILD OCTAL NUMERIC ARGUMENT + ADDI D,-60(T) + IMULI C,↑D10 + ADDI C,-"0"(T) ;ACCUMULATE DEC AND OCTAL + JRST LD3 + +;EXIT FROM SWITCH MODE + +LD6D: TLZ F,SSW ;CLEAR SWITCH MODE FLAG + TLNE F,FSW ;TEST FORCED SCAN FLAG + JRST LD2D ;SCAN FORCED, START NEW IDENT. + JRST LD3 ;SCAN NOT FORCED, USE PREV IDENT +;ILLEGAL CHARACTER, NORMAL MODE + +LD7: IFN SYMARG,< + CAIN T,"#" ;DEFINING THIS SYMBOL + JRST DEFINE ;YES + TRNN F,ARGFL ;TREAT AS SPECIAL + JRST .+4 ;NO + CAIE T,"$" + CAIN T,"%" + JRST LD4 ;YES> + CAIN T,"Z"-100 ;TEST FOR ↑Z + JRST LD5E1 ;TREAT AS ALTMODE FOR BATCH + ERROR 8,</CHAR.%/> + JRST LD2 ;TRY TO CONTINUE + +;SYNTAX ERROR, NORMAL MODE + +LD7A: ERROR 8,</SYNTAX%/> + JRST LD2 + +;ILLEGAL CHARACTER, SWITCH MODE + +LD7B: CAIN T,"-" ;SPECIAL CHECK FOR - + JRST [SETOB C,D + JRST LD3] + CAIN T,"Z"-100 ;CHECK FOR /↑Z + JRST LD5E1 ;SAME AS ↑Z + ERROR 8,</SWITCH%/> + JRST LD2 + + +;ATTEMPT TO CHAIN WITH SPECIFIED HALF OF JOBCHN = 0 + +IFE K,< +LD7C: ERROR ,<?UNCHAINABLE AS LOADED@?> + JRST LD2 + +;ATTEMP TO CHAIN WITHOUT SPECIFYING DEVICE + +LD7D: ERROR ,<?NO CHAIN DEVICE@?> + JRST LD2> + +IFN DMNSW,< +DMN2: +IFN ALGSW,<TRNE F,ALGFL ;IF LOADING ALGOL + POPJ P, ;JUST RETURN> + CAIN D,1 ;SPECIAL CASE + TROA F,HISYM ;YES ,BLT SYMBOLS INTO HISEG + JUMPL D,.+2 + TROA F,DMNFLG ;TURN ON /B +IFN KUTSW,<TRZA F,DMNFLG ;TURN OFF IF /-B + SETZM CORSZ ;SET TO CUT BACK CORE> +IFE KUTSW,<TRZ F,DMNFLG ;TURN OFF IF /-B> + CAMLE D,KORSP + MOVEM D,KORSP + POPJ P, ;RETURN> + + + +SUBTTL CHARACTER CLASSIFICATION TABLE DESCRIPTION: + +; EACH CHARACTER HAS ASSOCIATED WITH IT A FOUR BIT BYTE +; PACKED IN THE CHARACTER CLASSIFICATION TABLE. THE CHARACTER +; CLASSIFICATION CODES ARE ORDERED IN SUCH A WAY AS TO GIVE +; DELIMITERS OF HIGHER PRECEDENCE LOWER CLASSIFICATION NUMBERS. +; CERTAIN CHARACTERS HAVE NO EFFECT ON THE COMMAND STRING, AND +; THEREFORE DO NOT EFFECT ORDERING OF DELIMITERS. FOUR CODES +; ARE RESERVED FOR ALTERNATE DISPATCHES WHILE THE SWITCH MODE IS +; IN EFFECT. + + +;CLASSIFICATION BYTE CODES: + +; BYTE DISP CLASSIFICATION + +; 00 - 00 ILLEGAL CHARACTER, SWITCH MODE +; 01 - 01 ALPHABETIC CHARACTER, SWITCH MODE +; 02 - 02 NUMERIC CHARACTER, SWITCH MODE +; 03 - 03 SWITCH MODE ESCAPE, SWITCH MODE + +; 00 - 04 ILLEGAL CHARACTER, NORMAL MODE +; 01 - 05 ALPHABETIC CHARACTER, NORMAL MODE +; 02 - 06 NUMERIC CHARACTER, NORMAL MODE +; 03 - 07 SWITCH MODE ESCAPE, NORMAL MODE + +; 04 - 10 IGNORED CHARACTER +; 05 - 11 ENTER SWITCH MODE CHARACTER +; 06 - 12 DEVICE IDENTIFIER DELIMITER +; 07 - 13 FILE EXTENSION DELIMITER +; 10 - 14 OUTPUT SPECIFICATION DELIMITER +; 11 - 15 INPUT SPECIFICATION DELIMITER +; 12 - 16 LINE TERMINATION +; 13 - 17 JOB TERMINATION + + +;BYTE POINTERS TO CHARACTER CLASSIFICATION TABLE + +LD8: POINT 4,LD9(Q),3 + POINT 4,LD9(Q),7 + POINT 4,LD9(Q),11 + POINT 4,LD9(Q),15 + POINT 4,LD9(Q),19 + POINT 4,LD9(Q),23 + POINT 4,LD9(Q),27 + POINT 4,LD9(Q),31 + POINT 4,LD9(Q),35 + +;CHARACTER CLASSIFIACTION TABLE + +LD9: BYTE (4)4,0,0,0,0,0,0,0,0 + BYTE (4)4,4,4,4,12,0,0,0,0 + BYTE (4)0,0,0,0,0,0,0,0,0 + BYTE (4)13,0,0,0,0,4,0,4,0 +IFE SYMARG,< BYTE (4)0,0,0,0,5,3,0,0,11> +IFN SYMARG,< BYTE (4)0,0,14,0,5,3,0,0,11> + BYTE (4)0,7,5,2,2,2,2,2,2 +IFE SPCHN,< BYTE (4)2,2,2,2,6,0,0,10,0> +IFN SPCHN,< BYTE (4)2,2,2,2,6,0,1,10,1> +IFE RPGSW,< BYTE (4)0,0,1,1,1,1,1,1,1> +IFN RPGSW,< BYTE (4) 0,10,1,1,1,1,1,1,1> + BYTE (4)1,1,1,1,1,1,1,1,1 + BYTE (4)1,1,1,1,1,1,1,1,1 +IFE PP,<BYTE (4)1,0,0,0,0,10,0,1,1> +IFN PP,<BYTE (4)1,10,0,10,0,10,0,1,1> + BYTE (4)1,1,1,1,1,1,1,1,1 + BYTE (4)1,1,1,1,1,1,1,1,1 + BYTE (4)1,1,1,1,1,1,0,0,13 + BYTE (4)13,4 + + +SUBTTL INITIALIZE LOADING OF A FILE + +ILD: MOVEI W,BUF1 ;LOAD BUFFER ORIGIN + MOVEM W,JOBFF + TLOE F,ISW ;SKIP IF INIT REQUIRED + JRST ILD6 ;DONT DO INIT +ILD7: OPEN 1,OPEN3 ;KEEP IT PURE + JRST ILD5B +ILD6: TLZE F,REWSW ;SKIP IF NO REWIND + MTAPE 1,1 ;REWIND +ILD2: LOOKUP 1,DTIN ;LOOK UP FILE FROM DIRECTORY + JRST ILD3 ;FILE NOT IN DIRECTORY +IFE LNSSW,< +IFE K,< INBUF 1,2 ;SET UP BUFFERS> +IFN K,< INBUF 1,1 ;SET UP BUFFER>> +IFN LNSSW,<INBUF 1,1 + MOVEI W,BUF1 + EXCH W,JOBFF + SUBI W,BUF1 +IFE K,<MOVEI C,4*203+1> +IFN K,<MOVEI C,203+1> + IDIV C,W + INBUF 1,(C)> + TLO F,ASW ;SET LEFT ARROW ILLEGAL FLAG + TLZ F,ESW ;CLEAR EXTENSION FLAG + POPJ P, + +; LOOKUP FAILURE + +ILD3: TLOE F,ESW ;SKIP IF .REL WAS ASSUMED + JRST ILD4 ;FATAL LOOKUP FAILURE + SETZM DTIN1 ;ZERO FILE EXTENSION + JRST ILD2 ;TRY AGAIN WITH NULL EXTENSION + +ILD4: IFE REENT,<IFE TEN30,< ;PDP-6 ONLY + MOVE W,[SIXBIT /LIB40/] + CAME W,DTIN ;WAS THIS A TRY FOR LIB40? + JRST ILD4A ;NO + TRZ W,(SIXBIT / 0/) ;YES + MOVEM W,DTIN ;TRY LIB4 + PUSHJ P,LDDT2 ;USE .REL EXTENSION + TLZ F,ESW ;... + JRST ILD2 ;GO TRY AGAIN +ILD4A:>> +IFN PP,<MOVSI W,(SIXBIT /DSK/) + CAMN W,ILD1 ;TRIED DSK ONCE? + JRST ILD9 ;YES, FILE DOES NOT EXIST + MOVEM W,ILD1 ;SET IT UP + SETZM PPN ;CLEAR OLD VALUE + PUSHJ P,LDDT2 ;SET UP .REL + TLZ F,ESW ;SO WE CAN TRY BLANK EXT + JRST ILD7 ;OPEN DSK,TRY AGAIN> + +ILD9: ERROR ,</CANNOT FIND#/> + JRST LD2 + +; DEVICE SELECTION ERROR + +ILD5A: SKIPA W,LD5C1 +ILD5B: MOVE W,ILD1 +ILD5: TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START W/ ? + PUSHJ P,PWORD ;PRINT DEVICE NAME + ERROR 7,</UNAVAILABLE@/> + JRST LD2 + + +SUBTTL LIBRARY SEARCH CONTROL AND LOADER CONTROL + +;LIBF ENABLES A LIBRARY SEARCH OF <SYS:LIB4.REL> + +LIBF: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + PUSH P,ILD1 ;SAVE DEVICE NAME + PUSHJ P,LIBF1 ;LOAD SYS:JOBDAT.REL +IFN SAILSW,<LIBAGN: PUSHJ P,SALOAD ;LOAD RELS AND SEARCH LIBS> +IFN REENT,<TRNN F,SEENHI ;IF ANY HISEG LOADED NO RE-ENT OP SYSTEM + TRNN F,VFLG + JRST LIBF3 +IFN ALGSW,<TRNE F,ALGFL ;SPECIAL ACTION IF LOADING ALGOL + JRST [MOVE C,[RADIX50 44,%ALGDR] + MOVEI W,400010 ;JOBHDA + PUSHJ P,SYMPT ;DEFINE IT + JRST LIBF3] ;DON'T LOAD IMP40> + MOVE W,[SIXBIT /IMP40/] + PUSHJ P,LIBF2 +LIBF3:> + TRNN F,COBFL ;COBOL SEEN? + SKIPA W,[SIXBIT /LIB40/] ;FIRST TRY AT NAME + MOVE W,[SIXBIT /LIBOL/] ;YES, SEARCH COBOL'S LIBRARY ONLY + PUSHJ P,LIBF2 ;LOAD SYS:LIB40.REL +IFN SAILSW,<MOVE W,LIBPNT ;SEE IF ANY MORE TO DO + CAME W,[XWD -RELLEN-1,LIBFLS-1] + JRST LIBAGN + MOVE W,PRGPNT ;IT COULD BE DANGEROUS TO LOAD PROGRAMS HERE + CAME W,[XWD -RELLEN-1,PRGFLS-1] + JRST LIBAGN ;MORE TO DO, TRY AGAIN> + POP P,ILD1 ;CALL TO LDDT1 WILL PUT IT IN OLDDEV +LIBF1: MOVE W,[SIXBIT /JOBDAT/] ;LOAD SYS:JOBDAT.REL +LIBF2: PUSHJ P,LDDT1 +LIBGO: JUMPGE S,EOF2 ;JUMP IF NO UNDEFINED GLOBALS + TLO F,SLIBSW+SKIPSW ;ENABLE LIBRARY SEARCH + TLZ F,SYMSW ;DISABLE LOADING WITH SYMBOLS + JRST LDF ;INITIALIZE LOADING LIB4 + + +; LIB CONTROLS THE LIBRARY SEARCH OF ONE FILE + +LIB: JUMPGE S,EOF1 ;JUMP IF NO UNDEFINED GLOBALS + TLO F,SKIPSW ;SET SKIPSW TO IGNORE MODE +IFN DIDAL,<TRNE F,XFLG ;INDEX IN CORE? + JRST INDEX1 ;YES> + JRST LOAD ;CONTINUE LIB. SEARCH + +LIB1: CAIE A,4 ;TEST FOR ENTRY BLOCK + JRST LIB29 ;NOT AN ENTRY BLOCK, IGNORE IT +LIB2: PUSHJ P,RWORD ;READ ONE DATA WORD + MOVE C,W + TLO C,040000 ;SET CODE BITS FOR SEARCH + PUSHJ P,SREQ + TLZA F,SKIPSW ;REQUEST MATCHES ENTRY, LOAD + JRST LIB2 ;NOT FOUND +LIB3: PUSHJ P,RWORD ;READ AND IGNORE ONE DATA WORD + JRST LIB3 ;LOOP TO IGNORE INPUT + +LIB29: +IFN DIDAL,<CAIN A,14 ;INDEX BLOCK? + JRST INDEX0 ;YES> +LIB30: HRRZ C,W ;GET WORD COUNT + JUMPE C,LOAD1 ;IF NUL BLOCK RETURN + CAILE C,↑D18 ;ONLY ONE SUB-BLOCK + JRST LIB3 ;NO,SO USE OLD SLOW METHOD + AOJA C,LIB31 ;ONE FOR RELOCATION WORD + +BLOCK0: HRRZ C,W ;GET WORD COUNT + JUMPE C,LOAD1 ;NOISE WORD +LIB31: CAML C,BUFR2 ;DOES BLOCK OVERLAP BUFFERS? + SOJA C,LIB32 ;YES,ALLOW FOR INITIAL ILDB + ADDM C,BUFR1 ;ADD TO BYTE POINTER + MOVNS C ;NEGATE + ADDM C,BUFR2 ;TO SUBTRACT C FROM WORD COUNT + JRST LOAD1 ;GET NEXT BLOCK + +LIB32: SUB C,BUFR2 ;ACCOUNT FOR REST OF THIS BUFFER + PUSHJ P,WORD+1 ;GET ANOTHER BUFFERFUL + JRST LIB31 ;TRY AGAIN + + +IFN SAILSW,< + +COMMENT * BLOCK TYPE 15 AND 16 USED TO SPECIFY PROGRAMS AND +LIBRARIES WHICH MUST BE LOADED (SEARCHED) IF THE PROGRAM +IN WHICH THE BLOCK APPEARS IS LOADED. IT IS NOW TIME TO +LOAD AND SEARCH THESE FILES. IF ANY MAKE REQUESTS, THEY ARE ADDED +TO THE END. WE WILL COME BACK AND LOOK AGAIN IN CASE A +LIBRARY PROGRAM LOAD A REL PROGRAM. ORIGINAL CODE BY DCS* + +SALOAD: MOVE T,[XWD -RELLEN-1,PRGFLS-1] ;TO RESET WITH AT END + MOVEI D,PRGPNT ;OINTER TO UPPER LIMIT + PUSHJ P,PRGPRG ;LOAD THEM IF ANY + +;NOW FOR LIBRARY SEARCH + + MOVE T,[XWD -RELLEN-1,LIBFLS-1] + MOVEI D,LIBPNT + +PRGPRG: MOVEM D,LODLIM# ;SAVE POINTER TO LIMIT + MOVEM T,LODSTP# ;START FOR RESETTING +PRGBAK: MOVEM T,LODPNT# ;AND START + CAMN T,@LODLIM ;GOTTEN TO END YET? + JRST PRGDON ;YES, DUMP IT + SKIPN W,PRGDEV(T) ;IS DEVICE SPECIFIED? + MOVSI W,(SIXBIT /DSK/) ;NO, DSK + MOVEM W,ILD1 ;WHERE WE INIT FROM + MOVSI W,(SIXBIT /REL/) ;EXTENSION + MOVEM W,DTIN1 + MOVE W,PRGFIL(T) + MOVEM W,DTIN ;FILE NAME + MOVE W,PRGPPN(T) ;THE PROJECT PROG + MOVEM W,DTIN+3 + PUSH P,JRPRG ;A RETURN ADDRESS + TLZ F,ISW ;FORCE NEW INIT + HRRZ T,LODLIM + CAIN T,LIBPNT ;WHICH ONE + JRST LIBGO + JRST LDF +PRGRET: MOVE T,LODPNT ;RETURNS HERE, GET NEXT ONE + AOBJN T,PRGBAK + +PRGDON: MOVE T,LODSTP ;RESTE POINTER IN CASE MORE ON OTHER LIBS + MOVEM T,@LODLIM +JRPRG: POPJ P,PRGRET ;PUSHED TO GET A RETURN ADDRESS + +PRGFIL==1 ;REL INDEX FOR FILE NAMES +PRGPPN==RELLEN+1 ;AND FOR PPNS +PRGDEV==2*RELLEN+1 ;AND FOR DEVICES +> ;END OF IFN SAILSW + + +SUBTTL LDDT LOADS <SYS:DDT.REL> AND SETS SYMSW + +LDDTX: +IFN ALGSW,<TRNE F,ALGSW + POPJ P,> + TLO N,DDSW+EXEQSW ;T - LOAD AND GO TO DDT +LDDT: +IFN ALGSW,<TRNE F,ALGFL + POPJ P,> +IFN DMNSW,< PUSH P,D ;SAVE INCASE /NNND > + PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + MOVSI W,444464 ;FILE IDENTIFIER <DDT> + TLZ F,SYMSW!RMSMSW ;DON'T LOAD DDT WITH LOCAL SYMBOLS + PUSHJ P,LDDT1 + PUSHJ P,LDF ;LOAD <SYS:DDT.REL> + TLO F,SYMSW!RMSMSW ;ENABLE LOADING WITH SYMBOLS +IFN DMNSW,< POP P,D ;RESTORE D + JRST DMN2 ;MOVE SYMBOL TABLE > +IFE DMNSW,< POPJ P,> + +LDDT1: MOVEM W,DTIN ;STORE FILE IDENTIFIER +IFN PP,<MOVE W,ILD1 ;SAVE OLD DEV + MOVEM W,OLDDEV> + MOVSI W,637163 ;DEVICE IDENTIFIER <SYS> + MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER + TLZ F,ISW+LIBSW+SKIPSW+REWSW ;CLEAR OLD FLAGS +LDDT2: MOVSI W,624554 ;EXTENSION IDENTIFIER <.REL> +LDDT3: MOVEM W,DTIN1 ;STORE EXTENSION IDENTIFIER +LDDT4:IFN PP,<EXCH W,PPN ;GET PROJ-PROG # + MOVEM W,DTIN+3 + EXCH W,PPN ;W MUST BE SAVED SINCE IT MAY BE USED LATER> + POPJ P, + + +SUBTTL EOF TERMINATES LOADING OF A FILE + +EOF: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER +EOF1: TLZ F,SLIBSW!SKIPSW ;CLEAR ONE FILE LIB. SEARCH FLAG +IFN DIDAL,<TRZ F,XFLG!LSTLOD ;CLEAR DIDAL FLAGS> +EOF2: TLNE F,RMSMSW ;IF REMEMBER LOADING WITH SYMBOLS IS ON + TLO F,SYMSW ;THEN RESTORE SYMBOL LOADING STATE + POPJ P, + +; FORCE SCAN TO COMPLETION, LOAD IF NECESSARY + +FSCN: PUSHJ P,FSCN1 ;FORCED LOAD BEFORE TEST + TLNN F,FULLSW ;TEST FOR OVERLAP + POPJ P, ;NO OVERLAP, RETURN + MOVE W,H ;FETCH CORE SIZE REQUIRED + SUBI W,1(S) ; COMPUT DEFICIENCY + JUMPL W,EOF2 ;JUMP IF NO OVERLAP + TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START WITH ? + PUSHJ P,PRNUM0 ;INFORM USER + ERROR 7,</WORDS OF OVERLAP#/> + JRST LD2 ;ERROR RETURN + +IFN SPCHN,<FSCN1A: TLNN F,NSW + PUSHJ P,LIBF> +FSCN1: TLON F,FSW ;SKIP IF NOT FIRST CALL TO FSCN + TLNN F,CSW+DSW+ESW ;TEST SCAN FOR COMPLETION + POPJ P, +FSCN2: PUSHJ P,LD5B1 ;STORE FILE OR EXTENSION IDENT. + +; LOADER CONTROL, NORMAL MODE + +LDF: PUSHJ P,ILD ;INITIALIZE LOADING + + +SUBTTL LOAD SUBROUTINE + +LOAD: MOVEM P,PDSAV ;SAVE PUSHDOWN POINTER +IFN WFWSW,<SETZM VARLNG ;LENGTH OF VARIABLE AREA-ADDED TO RELOC> +IFN ALGSW,<SETZM OWNLNG ;LENGTH OF OWN AREA-ADDED TO RELOC> +IFN FAILSW,<SETZM LFTHSW ;RESET LOAD LEFT HALF FIXUP SW> +LOAD1: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER +LOAD1A: PUSHJ P,WORD ;INPUT BLOCK HEADER WORD + MOVNI E,400000(W) ;WORD COUNT - FROM RH OF HEADER + HLRZ A,W ;BLOCK TYPE - FROM LH OF HEADER +IFN FAILSW,<SKIPN POLSW ;ERROR IF STILL DOING POLISH> + CAIL A,DISPL*2 ;TEST BLOCK TYPE NUMBER + JRST LOAD4 ;ERROR, ILLEGAL BLOCK TYPE + TLNE F,SKIPSW ;BLOCK OK - TEST LOAD STATUS + JRST LIB1 ;RETURN TO LIB. SEARCH CONTROL + HRRZ T,LOAD2(A) ;LOAD RH DISPATCH ENTRY + CAIL A,DISPL ;SKIP IF CORRECT + HLRZ T,LOAD2-DISPL(A);LOAD LH DISPATCH ENTRY + TLNE F,FULLSW ;TEST CORE OVERLAP INDICATOR + SOJG A,HIGH0 ;IGNORE BLOCK IF NOT TYPE 1 + JRST @T ;DISPATCH TO BLOCK SUBROUTINE + +;DISPATCH TABLE - BLOCK TYPES +IFE FAILSW,<POLFIX==LOAD4A + LINK==LOAD4A> +IFE WFWSW,<LVARB==LOAD4A> +IFE DIDAL,<INDEX==LOAD4A> +IFE ALGSW!SAILSW,<ALGBLK==LOAD4A> +IFE SAILSW,<LDLIB==LOAD4A> + +LOAD2: XWD LOCD, BLOCK0 ;10,,0 + XWD POLFIX, PROG ;11,,1 + XWD LINK, SYM ;12,,2 + XWD LVARB, HISEG ;13,,3 + XWD INDEX, LIB30 ;14,,4 + XWD ALGBLK, HIGH ;15,,5 + XWD LDLIB, NAME ;16,,6 + XWD LOAD4A, START ;17,,7 + + DISPL==.-LOAD2 + +;ERROR EXIT FOR BAD HEADER WORDS + +LOAD4: IFE K,< + CAIN A,400 ;FORTRAN FOUR BLOCK + JRST F4LD> +LOAD4A: MOVE W,A ;GET BLOCK TYPE + ERROR ,</ILL. FORMAT BLOCK TYPE !/> + PUSHJ P,PRNUM ;PRINT BLOCK TYPE + JRST ILC1 ;PRINT SUBROUTINE NAME + + +SUBTTL LOAD PROGRAMS AND DATA (BLOCK TYPE 1) + +PROG: MOVEI V,-1(W) ;LOAD BLOCK LENGTH + PUSHJ P,RWORD ;READ BLOCK ORIGIN + ADD V,W ;COMPUTE NEW PROG. BREAK +IFN REENT,<TLNN F,HIPROG + JRST PROGLW ;NOT HIGH SEGMENT +PROG3: CAMGE W,HVAL1 ;CHECK TO SEE IF IN TOP SEG + JRST LOWCOR + MOVE T,JOBREL ;CHECK FOR OVERFLOW ON HIGH + CAIL T,@X + JRST PROG2 + PUSHJ P,HIEXP + JRST FULLC + JRST PROG3> + +PROGLW: MOVEI T,@X + CAMG H,T ;COMPARE WITH PREV. PROG. BREAK + MOVE H,T + TLNE F,FULLSW + JRST FULLC ;NO ERROR MESSAGE +IFN REENT,<CAML H,HVAL1 + JRST COROVL ;WE HAVE OVERFLOWED THE LOW SEGMENT + CAMLE T,HILOW + MOVEM T,HILOW ;HIGHEST LOW CODE LOADED INTO> + CAILE H,1(S) ; SKIP IF SUFFICIENT CORE AVAILABLE +IFN EXPAND,<JRST [PUSHJ P,XPAND> + JRST FULLC +IFN REENT,< TLNE F,HIPROG + SUBI W,2000 ;HISEG LOADING LOW SEG> +IFN EXPAND,< JRST .-1]> +PROG2: MOVE V,W +PROG1: PUSHJ P,RWORD ;READ DATA WORD +IFN TEN30,<CAIN V,41 ;CHANGE FOR 10/30 JOBDAT + MOVEI V,JOB41 ;JOB41 IS DIFFERENT + CAIN V,74 ;SO IS JOBDAT + MOVEI V,JOBDDT> +IFN L,<CAML V,RINITL ;CHECK FOR BAD STORE> + MOVEM W,@X ;STORE DATA WORD IN PROG. AT LLC + AOJA V,PROG1 ;ADD ONE TO LOADER LOC. COUNTER + +IFN REENT,< +LOWCOR: SUB V,HIGHX ;RELOC FOR PROPER + ADD V,LOWX ;LOADING OF LOW SEQMENT + SUB W,HIGHX + ADD W,LOWX + JRST PROGLW> + + +SUBTTL LOAD SYMBOLS (BLOCK TYPE 2) + +SYM: PUSHJ P,PRWORD ;READ TWO DATA WORDS + PUSHJ P,SYMPT; PUT INTO TABLE +IFN REENT,<PUSHJ P,RESTRX> + JRST SYM + +SYMPT: TLNE C,200000 ;GLOBAL REQUEST? WFW + JUMPL C,SYM3 ;CHECK FOR 60 NOT JUST HIGH BIT WFW + TLNN C,40000 + JRST SYM1A ;LOCAL SYMBOL + TLNE C,100000 + JRST SYM1B + PUSHJ P,SREQ ;GLOBAL DEF., SEARCH FOR REQUEST + JRST SYM2 ;REQUEST MATCHES + PUSHJ P,SDEF ;SEARCH FOR MULTIPLE DEFINITIONS + JRST SYM1 ;MULTIPLY DEFINED GLOBAL + JRST SYM1B + +; PROCESS MULTIPLY DEFINED GLOBAL + +SYM1: CAMN W,2(A) ;COMPARE NEW AND OLD VALUE + POPJ P,; + AOS MDG ;COUNT MULTIPLY DEFINED GLOBALS + PUSHJ P,PRQ ;START W/ ? + PUSHJ P,PRNAM ;PRINT SYMBOL AND VALUE +IFN RPGSW,<MOVE W,JOBERR ;RECORD THIS AS AN ERROR + ADDI W,1 + HRRM W,JOBERR> + MOVE W,2(A) ;LOAD OLD VALUE + PUSHJ P,PRNUM ;PRINT OLD VALUE + ERROR 7,</MUL. DEF. GLOBAL IN PROG. !/> + MOVE C,SBRNAM ;GET PROGRAM NAME + PUSHJ P,PRNAME ;PRINT R-50 NAME + ERROR 0,</#/> + POPJ P, ;IGNORE MUL. DEF. GLOBAL SYM + + +; LOCAL SYMBOL + +SYM1A: TLNN F,SYMSW ;SKIP IF LOAD LOCALS SWITCH ON + POPJ P,; IGNORE LOCAL SYMBOLS +SYM1B: CAIL H,(S) ;STORE DEFINED SYMBOL +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> +SYM1C: IFE K,< + TLNE N,F4SW; FORTRAN FOUR REQUIRES A BLT + PUSHJ P,MVDWN; OF THE TABLES> + MOVEI A,-2(S) ;LOAD A TO SAVE INST. AT SYM2 +SYM1D: SUBI S,2; UPDATE UNDEFINED POINTER + POP B,2(A) ;MOVE UNDEFINED VALUE POINTER + POP B,1(A) ;MOVE UNDEFINED SYMBOL + MOVEM W,2(B) ;STORE VALUE + MOVEM C,1(B) ;STORE SYMBOL + POPJ P, + + +; GLOBAL DEFINITION MATCHES REQUEST + +SYM2: PUSH P,SYM2C ;NEXT MUST BE A SUBROUTINE FOR LATER, SET RETURN +SYM2B: MOVE V,2(A) ;LOAD REQUEST POINTER + PUSHJ P,REMSYM + JUMPL V,SYM2W ;ADDITIVE REQUEST? WFW + PUSHJ P,SYM4A ;REPLACE CHAIN WITH DEFINITION +SYM2W1: PUSHJ P,SREQ ;LOOK FOR MORE REQUESTS FOR THIS SYMBOL + JRST SYM2B ;FOUND MORE + MOVE A,SVA ;RESTORE A +SYM2C: POPJ P,SYM1D ;RETURN, SEE SYM2 FOR USE OF ADDRESS + +; REQUEST MATCHES GLOBAL DEFINITION + +SYM2A: MOVE V,W ;LOAD POINTER TO CHAIN + MOVE W,2(A) ;LOAD VALUE + JUMPL V,FIXWP ;HANDLE ATTITIVE REQUEST WFW + JRST SYM4A + +; PROCESS GLOBAL REQUEST + +SYM3: TLNE C,040000; COMMON NAME + JRST SYM1B + TLC C,640000; PERMUTE BITS FROM 60 TO 04 + PUSHJ P,SDEF ;SEARCH FOR GLOBAL DEFINITION + JRST SYM2A ;MATCHING GLOBAL DEFINITION + JUMPL W,SYM3X1 ;ADDITIVE FIXUP WFW + PUSHJ P,SREQ ;SEARCH FOR EXISTING REQUEST WFW + JRST SYM3A ;EXISTING REQUEST FOUND WFW +SYM3X1: TLNN W,100000 ;CHECK SYMBOL TABLE FIXUP + JRST SYM3X2 ;NO + MOVE V,1(B) ;MUST BE LAST SYMBOL DEFINED. GET SYMBOL + XOR V,W ;CHECK FOR IDENTITY + TDNE V,[XWD 77777,-1] ;BUT IGNORE HIGH 3 BITS + POPJ P, ;NOT SAME, ASSUME NOT LOADED LOCAL + HRRI W,2(B) ;GET LOCATION IN RIGHT HALF + TLO W,1 + SUB W,HISTRT ;AND MAKE RELATIVE +IFN FAILSW,<TLZ W,040000> +SYM3X2: CAIL H,(S) ;STORE REQUEST IN UNDEF. TABLE WFW +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> +SYM3X: IFE K,< + TLNE N,F4SW; FORTRAN FOUR + PUSHJ P,MVDWN; ADJUST TABLES IF F4> + SUB S,SE3 ;ADVANCE UNDEFINED POINTER + MOVEM W,2(S) ;STORE UNDEFINED VALUE POINTER + MOVEM C,1(S) ;STORE UNDEFINED SYMBOL + POPJ P,; + + + +; COMBINE TWO REQUEST CHAINS + +SYM3A: SKIPL 2(A) ;IS IT ADDITIVE WFW + JRST SYM3A1 ;NO, PROCESS WFW +SYM3A4: PUSHJ P,SDEF2 ;YES, CONTINUE WFW + JRST SYM3A ;FOUND ANOTHER WFW + JRST SYM3X2 ;REALLY NO CHAIN THERE WFW +SYM3A1: SKIPE V,2(A) ;IF ADDRESS OF CHAIN IS 0, THROW IT AWAY + JRST SYM3A2 ;AND USE THE NEW ONE, ELSE ADD THE CHAINS + MOVEM W,2(A) ;W IS ADDRESS OF NEW CHAIN,STORE ON TOP OF OLD 0 + POPJ P, +SYM3A2: +SYM3A3: MOVE A,2(A) +SYM3B: HRRZ V,A +IFN L,<CAMGE V,RINITL + HALT> +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> + HRRZ A,@X ; LOAD NEXT ADDRESS IN CHAIN + JUMPN A,SYM3B ; JUMP IF NOT THE LAST ADDR. IN CHAIN + HRRM W,@X ;COMBINE CHAINS + POPJ P,; + +;WFW PATCH FOR ADDITIVE GLOBAL REQUESTS + +FIXWP: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + JRST FIXW + MOVE T,1(B) ;SYMBOL FIXUP, MUST BE LAST SYMBOL DEFINED + XOR T,V ;CHECK FO SAME + TDNE T,[XWD 77777,-1] ;EXCEPT FOR HIGH CODE BITS + POPJ P, ;ASSUME NON-LOADED LOCAL + HRRI V,2(B) ;GET LOCATION + SUBI V,(X) ;SO WE CAN USE @X + JRST FIXW1 +FIXW: IFN REENT,<HRRZ T,V + CAMGE T,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> +IFN L,< HRRZ T,V + CAMGE R,RINITL + POPJ P,> +FIXW1: TLNE V,200000 ;IS IT LEFT HALF + JRST FIXWL + MOVE T,@X ;GET WORD + ADD T,W ;VALUE OF GLOBAL + HRRM T,@X ;FIX WITHOUT CARRY + MOVSI D,200000 ;SET UP TO REMOVE DEFERED INTERNAL IF THERE + JRST SYMFIX + + +FIXWL: HRLZ T,W ;UPDATE VALUE OF LEFT HALF + ADDM T,@X ;BY VALUE OF GLOBAL + MOVSI D,400000 ;LEFT DEFERED INTERNAL +SYMFIX: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + POPJ P, ;NO, RETURN + ADDI V,(X) ;GET THE LOCATION +SYMFX1: MOVE T,-1(V) ;GET THE SYMBOL NAME + TLNN T,40000 ;CHECK TO SEE IF INTERNAL + POPJ P, ;NO, LEAVE + ANDCAB D,-1(V) ;REMOVE PROPER BIT + TLNE D,600000 ;IS IT STILL DEFERED? + POPJ P, ;YES, ALL DONE + EXCH C,D ;NO, CHECK FOR A REQUEST FOR IT + PUSHJ P,SREQ + JRST CHNSYM ;YES, WILL HAVE TO CALL THE FIXUP ROUTINE + MOVE C,D ;GET C BACK + POPJ P, +CHNSYM: PUSH P,D ;HAS THE OLD C IN IT + PUSH P,W ;WE MAY NEED IT LATER + MOVE W,(V) ;GET VALUE + PUSHJ P,SYM2B ;CALL THE FOUND GLOBAL TO MATCH REQUEST ROUTINE + POP P,W + POP P,C ;RESTORE FOR CALLER + POPJ P, ;AND GO AWAY + +SYM2W: IFN FAILSW,< + TLNE V,40000 ;CHECK FOR POLISH + JRST POLSAT> + TLNN V,100000 ;SYMBOL TABLE? + JRST SYM2WA + ADD V,HISTRT ;MAKE ABSOLUTE + SUBI V,(X) ;GET READY TO ADD X + PUSHJ P,FIXW1 + JRST SYM2W1 +SYM2WA: PUSHJ P,FIXW ;DO FIXUP + JRST SYM2W1 ;AND LOOK FOR MORE REQUESTS + +;END WFW PATCH + + +;PATCH VALUES INTO CHAINED REQUEST + +SYM4: IFN L,<CAMGE V,RINITL + POPJ P,> +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> + HRRZ T,@X ;LOAD NEXT ADDRESS IN CHAIN + HRRM W,@X ;INSERT VALUE INTO PROGRAM + MOVE V,T +SYM4A: JUMPN V,SYM4 ;JUMP IF NOT LAST ADDR. IN CHAIN + POPJ P, + +IFE K,< +MVDWN: HRRZ T,MLTP +IFN EXPAND,< SUBI T,2> + CAIG T,(H); ANY ROOM LEFT? +IFN EXPAND,< JRST [PUSHJ P,XPAND> + TLOA F,FULLSW +IFN EXPAND,< JRST MVDWN + POPJ P,]> + TLNE F,SKIPSW+FULLSW + POPJ P, ; ABORT BLT + HRREI T,-2 + ADDM T,PLTP; ADJUST PROGRAMMER LABEL POINTER + ADDM T,BITP; AND BIT TABLE POINTER + ADDM T,SDSTP; FIRST DATA STATEMENT + ADDM T,LTC + ADDM T,ITC + TLNE N,SYDAT + ADDM T,V + ADDB T,MLTP; AND FINALLY TO MADE LABEL TABLE + HRLS T; SET UP BLT POINTER + ADD T,[XWD 2,0] + BLT T,(S) + POPJ P, +> + + +SUBTTL HIGH-SEGMENT (BLOCK TYPE 3) +;THIS PROGRAM IS INTENDED FOR HI SEGMENT IF RUNNING ON A PDP-10. +; THIS BLOCK TYPE OCCURS AFTER ENTRY AND NAME BLOCKS. + +HISEG: PUSHJ P,WORD ;GOBBLE UP A WORD. + JUMPE W,HISEG2 ;MACRO V36 + PUSHJ P,WORD ;GET THE OFSET +IFE REENT,<HISEG2==LOAD1A + JUMPGE W,LOAD1A ;NOT TWO SEG PROG.> +IFN REENT,<JUMPE W,HISEG2 ;IGNORE ZERO + JUMPG W,HISEG3 ;NEG. IF TWOSEG PSEUDO-OP> + TRO F,TWOFL ;SET FLAG +IFN REENT,< + TRNE F,NOHI!NOHI6 ;TWO SEGMENTS LEGAL? + JRST ONESEG ;LOAD AS ONE SEGMENT +HISEG3: HRRZ D,W ;GET START OF HISEG + JUMPE D,.+2 ;NOT SPECIFIED + PUSHJ P,HCONT ;AS IF /H +HISEG2: PUSHJ P,HISEG1 + JRST LOAD1 ;GET NEXT BLOCK +FAKEHI: ;AS IF BLOCK TYPE 3 +HISEG1: TRNE F,NOHI!NOHI6 ;LOAD REENT? + POPJ P, + TLOE F,HIPROG ;LOADING HI PROG + POPJ P, ;IGNORE 2'ND HISEG + TRON F,SEENHI ;HAVE WE LOADED ANY OTHER HI STUFF? + PUSHJ P,SETUPH ;NO,SET UP HI SEG. + MOVEM R,LOWR + MOVE R,HIGHR + HRRM R,2(N) ;CALL THIS THE START OF THE PROGRAM + MOVE X,HIGHX + POPJ P, +SETUPH: MOVE X,HVAL1 + CAIGE X,-1 ;SEE IF IT HAS BEEN CHANGED FROM ORIG + JRST SEENHS ;YES, MUST HAVE SEEN /H + MOVEI X,400000 + MOVEM X,HVAL1 + CAIG X,(H) ;HAVE WE RUN OVER WITH THE LOW SEG + JRST COROVL + ADDI X,JOBHDA + HRLI X,W + MOVEM X,HVAL +SEENHS: MOVE X,HVAL + MOVEM X,HIGHR + HRRZ X,JOBREL + SUB X,HVAL1 + ADDI X,1 + HRLI X,V + MOVEM X,HIGHX + POPJ P, + + + +SETSEG: TRZ F,NOHI!SEGFL ;ALLOW HI-SEG + JUMPL D,.+2 ;/-H TURNS OFF NOHI ONLY + TRO F,SEGFL ;/1H FORCES HI + POPJ P, +> + +ONESEG: HLRZ D,W ;GET LENGTH OF HISEG + SUBI D,(W) ;REMOVE OFSET + JUMPLE D,TWOERR ;LENGTH NOT AVAILABLE + MOVEM R,LOWR ;SAVE LOW SEGMENT RELOCATION + ADDM D,LOWR ;ADD TO LOW SEG RELOCATION + HRRZM W,HVAL1 ;SO RELOC WILL WORK + JRST LOAD1 ;GET NEXT BLOCK + +TWOERR: ERROR 7,</TWO SEGMENTS ILLEGAL#/> + JRST LDRSTR + + +SUBTTL HIGHEST RELOCATABLE POINT (BLOCK TYPE 5) +SFULLC: TLOE F,FULLSW ;PREVIOUS OVERFLOW? + JRST FULLC ;YES, DON'T PRINT MESSAGE + ERROR ,<?SYMBOL TABLE OVERLAP#?> +FULLC: TLO F,FULLSW ;CORE OVERLAP ERROR RETURN +IFE K,< TLNE N,F4SW + POPJ P,> + JRST LIB3 ;LOOK FOR MORE +HIGH2: PUSHJ P,RWORD ;GET HISEG BREAK + TRZ F,TWOFL ;CLEAR FLAG NOW +IFE REENT,< MOVE R,LOWR + JRST HIGH2A> +IFN REENT,< TRNE F,NOHI!NOHI6 ;SINGLE SEGMENT LOAD? + JRST [MOVE R,LOWR ;YES,GET LARGER RELOC + MOVE W,HVAL ;ORIGINAL VALUE + MOVEM W,HVAL1 ;RESET + JRST HIGH2A] ;CONTINUE AS IF LOW ONLY + HRR R,W ;PUT BREAK IN R + CAMLE R,HVAL + MOVEM R,HVAL + MOVEM R,HIGHR + MOVE R,LOWR ;NEXT WORD IS LOW SEG BREAK + TLZ F,HIPROG ;CLEAR HIPROG + PUSHJ P,PRWORD ;GET WORD PAIR + HRR R,C ;GET LOW SEG BREAK + MOVEM R,LOWR ;SAVE IT + MOVE R,HIGHR ;GET HIGH BREAK + JRST HIGHN3 ;AND JOIN COMMON CODE> + +HIGH0: CAIE A,4 ; TEST FOR END BLOCK (OVERLAP) + JRST LIB30 + +HIGH: TRNE F,TWOFL ;IS THIS A TWO SEGMENT PROGRAM? + JRST HIGH2 ;YES +HIGH2A: PUSHJ P,PRWORD ;READ TWO DATA WORDS. +IFN REENT,< TLZE F,HIPROG + JRST HIGHNP> +IFN WFWSW,<ADD C,VARLNG ;IF LOW SEG THEN VARIABLES GO AT END> +IFN ALGSW,<ADD C,OWNLNG ;ADD IN LENGTH OF OWN BLOCK> + HRR R,C ;SET NEW PROGRAM BREAK + CAMGE C,W ;CHECK 2ND WORD (LOC PROG BRK IF PRESENT) + MOVE C,W +HIGH31: ADDI C,(X) + CAIG H,(C) + MOVEI H,(C) ;SET UP H + CAILE H,1(S) ;TEST PROGRAM BREAK +IFN EXPAND,<PUSHJ P,[ PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM2 + POPJ P,]> +IFE EXPAND,<TLO F,FULLSW> +HIGH3: MOVEI A,F.C + BLT A,B.C +IFN REENT,<TRNE F,NOHI!NOHI6 ;ONE SEGMENT PROGRAM? + JRST HIGHN4 ;YES + HRLZ W,HIGHR ;GET HIGH PROG BREAK + JUMPE W,[HRRZ W,R ;NO HIGH SEGMENT YET + JRST .+2] ;SO USE LOW RELOCATION ONLY + HRR W,LOWR ;GET LOW BREAK + SETZ C, ;ZERO SYMBOL NAME + PUSHJ P,SYM1B ;PUT IN SYMBOL TABLE + MOVEM S,F.C+S ;SAVE NEW S AND B + MOVEM B,F.C+B ;INCASE OF ERROR +HIGHN4:> + TLZ F,NAMSSW ;RELAX, RELOCATION BLOCK FOUND + TLNE F,SLIBSW+LIBSW ;NORMAL MODE EXIT THROUGH LOAD1 + JRST LIB ;LIBRARY SEARCH EXIT + JRST LOAD1 +IFN REENT,< +HIGHNP: HRR R,C +HIGHN1: CAMLE R,HVAL + MOVEM R,HVAL + MOVEM R,HIGHR +HIGHN3: PUSH P,W ;SAVE W,CONTAIN HIGHEST ABSOLUTE ADDRESS + ADD W,LOWX ;LOC PROG BRK + CAIGE H,(W) ;CHECK FOR TOP OF LOW CORE + MOVEI H,(W) + POP P,W ;RESTORE + CAML H,HVAL1 + JRST COROVL ;OVERFLOW OF LOW SEGMENT +HIGHN2: HRRZ R,HVAL + SUB R,HVAL1 + ADD R,HISTRT + CAMLE R,JOBREL + JRST [PUSHJ P,HIEXP + JRST FULLC + JRST HIGHN2] + MOVE R,LOWR + MOVE X,LOWX +IFN WFWSW,<ADD R,VARLNG ;VARIABLES IN LOW SEG> +IFN ALGSW,<ADD R,OWNLNG ;OWN BLOCK IN LOW SEGMENT> + HRRZ C,R + CAIGE C,(W) ;IS ABSOLUTE LOCATION GREATER + HRR R,W ;YES USE IT + + + HRRZ C,R ;SET UP C AGAIN + JRST HIGH31 ;GO CHECK PROGRAM BREAK + + +SUBTTL EXPAND HIGH SEGMENT + +HIEXP: TLNE F,FULLSW + POPJ P, +IFN EXPAND,<PUSH P,Q> + PUSH P,H + PUSH P,X + PUSH P,N +IFE K,<HRRZ X,MLTP + TLNN N,F4SW> + MOVEI X,1(S) + HRRZ N,X + SUB N,H + CAILE N,1777 + JRST MOVHI +IFE EXPAND,<POPJ P,> +IFN EXPAND,<HRRZ N,JOBREL + ADDI N,2000 + CAMG N,ALWCOR + CORE N, + JRST XPAND6 + PUSHJ P,ZTOP + POP P,N + JRST XPAND3> + +MOVHI: MOVEI N,-2000(X) + HRL N,X + HRRZ X,JOBREL + BLT N,-2000(X) + PUSHJ P,ZTOP + MOVNI H,2000 +IFN EXPAND,<JRST XPAND8> +IFE EXPAND,<ADDM H,HISTRT + ADDM H,S + ADDM H,B + ADDM H,HIGHX + TLNE F,HIPROG + ADDM H,-1(P) + POP P,N + SUBI N,2000 ;ADJUST POINTER TO NAME +IFE K,< TLNN F4SW + JRST HIXP1 + ADDM H,PLTP + ADDM H,BITP + ADDM H,SDSTP + ADDM H,MLTP + TLNE N,SYDAT + ADDM H,V +HIXP1:> + POP P,X + POP P,H + AOS (P) + POPJ P,> + +ZTOP: HRRZ N,JOBREL + MOVEI X,-1776(N) + HRLI X,-1777(N) + SETZM -1(X) + BLT X,(N) + POPJ P,> + + +SUBTTL PROGRAM NAME (BLOCK TYPE 6) + +NAME: TLOE F,NAMSSW ;HAVE WE SEEN TWO IN A ROW? + JRST NAMERR ;YES, NO END BLOCK SEEN + PUSHJ P,PRWORD ;READ TWO DATA WORDS + MOVEM C,SBRNAM ;SAVE SUBROUTINE NAME +NCONT: HLRE V,W ;GET COMPILER TYPE + HRRZS W ;CLEAR TYPE + JUMPL V,.+3 + CAIGE V,CMPLEN-CMPLER ;ONLY IF LEGAL TYPE + XCT CMPLER(V) ;DO SPECIAL FUNCTION + TLOE N,COMFLG ;SKIP IF COMMON NOT PREV. SET + JRST NAME1 ;SIZE OF COMMON PREV. SET + MOVEM W,COMSAV ;STORE LENGTH OF COMMON + JUMPE W,NAME2 ;JUMP IF NO COMMON IN THIS JOB + HRRI R,@R ;FIRST PROGRAM SET LOAD ORIGIN +NAME1: CAILE H,-1(S) ;TEST FOR AVAIL. SYMBOL SPACE +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> + SUBI S,2 ;UPDATE UNDEF. TABLE POINTER + POP B,2(S) + POP B,1(S) + HRRZ V,N ;POINTER TO PREVIOUS NAME + SUBM B,V ;COMPUTE RELATIVE POSITIONS + HRLM V,2(N) ;STORE FORWARD POINTER + HRR N,B ;UPDATE NAME POINTER +NAME2: MOVEM C,1(B) ;STORE PROGRAM NAME + HRRZM R,2(B) ;STORE PROGRAM ORIGIN + CAMG W,COMSAV ;CHECK COMMON SIZE +IFE REENT,<JRST LIB3 ;COMMON OK> +IFN REENT,<JRST [TRNE F,SEGFL ;LOAD LOW IN HI-SEG + PUSHJ P,FAKEHI ;YES + JRST LIB3]> + SKIPA C,COMM +ILC: MOVE C,1(A) ;NAME + PUSH P,C ;SAVE COMMON NAME + ERROR ,</ILL. COMMON !/> + POP P,C + PUSHJ P,PRNAME +ILC1: SKIPN SBRNAM + JRST ILC2 + ERROR 0,</ PROG. !/> + MOVE C,SBRNAM ;RECOVER SUBROUTINE NAME + PUSHJ P,PRNAME +ILC2: ERROR 0,</ #/> + JRST LD2 + +NAMERR: SETZM DTIN ;CLEAR WRONG FILE NAME FOR MESSAGE + ERROR ,</NO END BLOCK !/> + JRST ILC1 + + + +;COMPILER TYPE - DO SPECIAL FUNCTION FOR IT + +DEFINE CTYPE (CONDITION,TRUE,FALSE) +<IFN CONDITION,<TRUE> +IFE CONDITION,<FALSE>> + +CMPLER: CTYPE 1,JFCL,JFCL ;0 MACRO + CTYPE K-1,<TRO F,F4FL>,JFCL ;1 FORTRAN + CTYPE 1,<TRO F,COBFL>,JFCL ;2 COBOL + CTYPE ALGSW,<PUSHJ P,ALGNAM>,JFCL ;3 ALGOL + ;4 NELIAC + ;5 PL/1 +CMPLEN: + + + +SUBTTL STARTING ADDRESS (BLOCK TYPE 7) + + +START: PUSHJ P,PRWORD ;READ TWO DATA WORDS + TLNN N,ISAFLG ;SKIP IF IGNORE SA FLAG ON + HRRZM C,STADDR ;SET STARTING ADDRESS +IFN NAMESW,< + MOVE W,DTIN ;PICK UP BINARY FILE NAME + TLNN N,ISAFLG + MOVEM W,PRGNAM ;SAVE IT + MOVE W,1(N) ;SET UP NAME OF THIS PROGRAM + TLNN N,ISAFLG ;DONT SET NAME IF IGNORING SA'S + PUSHJ P,LDNAM> + PUSHJ P,PRWORD ;**OBSCURE RETURN TO LOAD1** + +IFN REENT,< +RESTRX: TLNE F,HIPROG + SKIPA X,HIGHX + MOVE X,LOWX + POPJ P,> + + +SUBTTL ONE PASS LOCAL DEFINITION (BLOCK TYPE 10) + + ;PMP PATCH FOR LEFT HALF FIXUPS +IFN FAILSW!WFWSW,< +LOCDLH: IFN L,<CAMGE V,RINITL + POPJ P,> +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> + HLRZ T,@X ;LOAD NEXT ADDRESS IN CHAIN + HRLM W,@X ;INSERT VALUE INTO PROGRAM + MOVE V,T +LOCDLF: JUMPN V,LOCDLH ;JUMP IF NOT LAST ADDR. IN CHAIN + POPJ P,> +IFN FAILSW,< +LOCDLI: PUSHJ P,LOCDLF +IFN REENT,<PUSHJ P,RESTRX> + AOSA LFTHSW ;TURN OFF LEFT HALF FIX SW (WAS -1) AND SKIP +LOCDLG: SETOM LFTHSW ;TURN ON LEFT HALF FIX SW> + ;END PMP PATCH +LOCD: PUSHJ P,RWORD ;READ ONE DATA WORD + HLRZ V,W ;STORAGE POINTER IN LEFT HALF +IFN FAILSW,< + SKIPE LFTHSW ;LEFT HALF CHAINED? PMP + JRST LOCDLI ;YES PMP + CAMN W,[-1] ;LEFT HALF NEXT? PMP + JRST LOCDLG ;YES, SET SWITCH PMP> + PUSHJ P,SYM4A ;LINK BACK REFERENCES +IFN REENT,<PUSHJ P,RESTRX> + JRST LOCD + + +SUBTTL LVAR FIX-UP (BLOCK TYPE 13) +IFN WFWSW,< +LVARB: PUSHJ P,PRWORD ;THE FIRST TWO WORDS IN THE BLOCK + MOVEM W,VARLNG ;AR SPECIAL. SECOND IS LENGTH OF VARIABLES +IFN REENT,< TLNE F,HIPROG + MOVE C,LOWR ;USE LOW RELOC IF LOADING HI SEG> + ;ELSE C HAS RELOC FOR THIS PROGRAM, USE IT + HRRZM C,VARREL ;THIS IS LOCATION 0 OF VARIABLE AREA +LVLP: PUSHJ P,PRWORD ;THINGS COME IN PAIRS + TLNE C,200000 ;BIT ON IF SYMBOL TABLE FIXUP + JRST LVSYM + HLRZ V,W ;NO GET LOC FROM LEFTH HALF OF SECOND + ADD W,VARREL ;AND RELOCATE VARIABLE + TLNE C,400000 ;ON FOR LEFT HALF + JRST [PUSHJ P,LOCDLF ;TAKE CARE OF IT +IFN REENT,< JRST LVLCOM] ;RESET X> +IFN REENT,< JRST LVLP] ;MUST BE LOW SEG X OK> + PUSHJ P,SYM4A ;RIGHT HALF CHAIN +IFN REENT,<LVLCOM: PUSHJ P,RESTRX> + JRST LVLP +LVSYM: MOVE V,B ;GET SYMBOL TABLE POINTER + ADD C,VARREL ;VALUE IS IN FIRST WORD FOR THESE + TLZ W,740000 ;MAKE SURE NO BITS ON + ADDI V,2 ;CORRECT POINTER TO SYMBOL TABLE +SRSYM: MOVE A,-1(V) ;GET A NAME + TLZN A,740000 ;CHECK FOR PROGRAM NAME + JRST LVLP ;LEAVE (PROBABLY A NON-LOADED LOCAL) + CAMN A,W ;IS IT THE RIGHT ONE?? + JRST LVSYMD ;YES + ADD V,SE3 ;CHECK NEXT ONE + JUMPL V,SRSYM ;BUT ONLY IF SOME ARE THERE + JRST LVLP ;GIVE UP +LVSYMD: TLNE C,400000 ;WHICH HALF?? + JRST LVSYML ;LEFT + ADD C,(V) ;ADDITIVE FIXUP + HRRM C,(V) + MOVSI D,200000 ;DEFERED BITS +LVSM1: PUSHJ P,COMSFX ;GO TAKE CARE OF IT + JRST LVLP ;NEXT PLEASE +LVSYML: HRLZS C + ADDM C,(V) ;WE DON'T HAVE TO WORRY ABOUT OVERFLOW HERE + MOVSI D,400000 ;LEFT DEFERED BITS + JRST LVSM1 ;GO WORRY ABOUT DEFERED INTERNALS> + + +SUBTTL FAIL LOADER +;ONLY LIST IF FAILSW=1 + XLIST +IFN FAILSW,<LIST> +REPEAT 0,<IF POLISH FIXUPS CONTAIN GLOBAL REQUESTS WHICH +CAN NOT BE SATISFIED WHEN THEY ARE SEEN, THEY MUST BE +SAVED UNTIL THESE GLOBAL SYMBOLS BECOME DEFINED. +THE POLISH FIXUP IS SAVED IN THE UNDEFINED TABLE (POINTED +TO BY S). THE FIXUP IS SAVED IN TWO WORD BLOCKS THE FIRST +WORD OF WHICH (THE ONE WHICH WOULD NORMALL CONTAIN THE SYMBOL) +HAS SPECIAL BITS ON SO IT WILL NOT BE FOUND BY A SEARCH FOR +A GLOBAL REQUEST. SINCE THE UNDEFINED TABLE MAY BE +SHUFFELED INTO A RANDOM ORDER, IT IS NOT POSSIBLE TO KEEP +ALL OF A POLISH FIXUP TOGETHER OR TO HAVE POINTERS IN +THE USUAL SENCE FROM ONE TWO WORD BLOCK TO ANOTHER. +SUFFICIENT INFORMATION IS THEREFORE GIVEN TO DETERMINE +WHAT THE FIRST WORD OF THE NEXT DESIRED BLOCK IS AND THIS +BLOCK IS FOUND BY SEARCHING THE UNDEFINED TABLE FOR A MATCH. +EACH POLISH FIXUP WHICH IS ENTERED INTO THE UNDEFINED +TABLE IS GIVEN A UNIQUE NUMBER CALLED THE "HEAD NUMBER". +EACH ELEMENT OF THE FIXUP (EITHER OPERAND OR OPERATOR) +IS ASSIGNED A NUMBER CALLED THE "OP NUMBER". THUS +THE OP NUMBER AND HEAD NUMBER TOGETHER DETERMINE +A SPECIFIC ELEMENT OF A SPECIFIC FIXUP. EACH ELEMENT +(TWO WORD BLOCK) IS ARRANGED AS FOLLOWS: +WORD 1: + BITS 0-4 THESE ARE THE USUAL CODE BITS OF A RADIX50 + SYMBOL AND CONTAIN 44 TO DISTINGUISH + AN ELEMENT OF A POLISH FIXUP FROM OTHER + SYMBOLS IN THE UNDEFINED TABLE + BITS 5-17 THE HEAD NUMBER OF THIS FIXUP + BITS 18-30 THE OP NUMBER OF THIS ELEMENT + BITS 31-35 THE OPERAND FOR THIS ELEMENT + OPERAND 2 INDICATES A WORD OF DATA +WORD 2: + IF THE OPERAND IS 2 THIS WORD CONTAINS THE DATA + + IF THIS IS NOT A DATA OPERATOR THEN THE LEFT AND + RIGHT HALVES OF THIS WORD POINT TO THE TWO OPERANDS + THE CONTENTS OF THE HALF WORD IS THE RIGHT HALF + OF THE FIRST WORD OF THE BLOCK POINTED + TO. THUS THE LEFT HALF OF THE FIRST WORD COMBINED + WITH ONE OF THESE HALF WORDS IS THE FIRST WORD + OF THE BLOCK POINTED TO AND CAN BE FOUND BY SEARCHING + +EACH FIXUP ALSO HAS A HEADER BLOCK. THIS BLOCK CONTAINS THE +FOLLOWING INFORMATION: +WORD 1: + BITS 0-17 0 + BITS 18-21 44 + BITS 22-35 THE HEAD NUMBER OF THIS FIXUP + +WORD 2: + BITS 0-17 A COUNT OF THE NUMBER OF UNDEFINED + GLOBALS REMAINING IN THIS FIXUP + BITS 18-35 A HALF WORD POINTER OF THE + SAME TYPE FOUND IN OTHER ELEMENTS POINTING + TO THE FIRST ELEMENT OF POLISH + WHICH WILL BE THE STORE OPERATOR + +THE REQUESTS FOR THE GLOBAL SYMBOLS NEEDED BY THE FIXUP ARE +ENTERED AS FOLLOWS: + +WORD 1: + BITS 0-4 04 + BITS 5-35 RADIX 50 FOR THE NAME OF THE SYMBOL + + +(NOTE THIS IS JUST A STANDARD GLOBAL REQUEST) + +WORD 2: + BITS 0-4 44 (THIS IDENTIFIES IT AS "ADITIVE TYPE" + AND BIT 4 INDICATES POLISH) + BITS 5-17 THE HEAD NUMBER OF THE FIXUP + (THIS GIVES ENOUGH INFORMATION TO FIND THE HEADER + BLOCK AND UPDATE THE COUNT WHEN THE REQUEST IS + + + SATISFIED) + BITS 18-35 A HALF WORD POINTER TO THE ELEMENT OF THE + FIXUP INTO WHICH THE VALUE OF + + + THE SYMBOL SHOULD BE STORED +> + + +IFN FAILSW,< +;POLISH FIXUPS <BLOCK TYPE 11> + +PDLOV: SKIPE POLSW ;PDL OV ARE WE DOING POLISH? + JRST COMPOL ;YES + ERROR ,</PUSHDOWN OVERFLOW#/> + JRST LD2 +COMPOL: ERROR ,</POLISH TOO COMPLEX#/> + JRST LD2 + + +;READ A HALF WORD AT A TIME + +RDHLF: TLON N,HSW ;WHICH HALF + JRST NORD + PUSHJ P,RWORD ;GET A NEW ONE + TLZ N,HSW ;SET TO READ OTEHR HALF + MOVEM W,SVHWD ;SAVE IT + HLRZS W ;GET LEFT HALF + POPJ P, ;AND RETURN +NORD: HRRZ W,SVHWD ;GET RIGHT HALF + POPJ P, ;AND RETURN + + +POLFIX: MOVE D,[IOWD PPDL,PPDB] ;SET UP THE POLISH PUSHDOWN LIST + MOVEI V,100 ;IN CASE OF ON OPERATORS + MOVEM V,SVSAT + SETOM POLSW ;WE ARE DOING POLISH + TLO N,HSW ;FIX TO READ A WORD THE FIRST TIME + SETOM GLBCNT ;NUMBER OF GLOBALS IN THIS FIXUP + SETOM OPNUM ;NUMBER OF OPERANDS AND OPERATORS THIS FIXUP + PUSH D,[15] ;FAKE OPERATOR SO STORE WILL NOT HACK + +RPOL: PUSHJ P,RDHLF ;GET A HLAF WORD + TRNE W,400000 ;IS IT A STORE OP? + JRST STOROP ;YES, DO IT +IFN WFWSW,<CAIN W,15 + JRST [PUSHJ P,RDHLF ;THIS TRICK FOR VARIABLES + ADD W,VARREL ;HOPE SOMEONE HAS DONE + HRRZ C,W ;A BLOCK TYPE 13 + JRST HLFOP]> + CAIGE W,3 ;0,1,2 ARE OPERANDS + JRST OPND + CAILE W,14 ;14 IS HIGHEST OPERATOR + JRST LOAD4A ;ILL FORMAT + PUSH D,W ;SAVE OPERATOR IN STACK + MOVE V,DESTB-3(W) ;GET NUMBER OF OPERANDS NEEDED + MNVEM V,SVSAT ;ALSO SAVE IT + JRST RPOL ;BACK FOR MORE + + + +;HANDLE OPERANDS. THIS GETS COMPLICATED BECAUSE OF THE PRESENCE OF +;GLOBAL REQUESTS + +OPND: MOVE A,W ;GET THE OPERAND TYPE HERE + PUSHJ P,RDHLF ;THIS IS AT LEAST PART OF THE OPERAND + MOVE C,W ;GET IT INTO C + JUMPE A,HLFOP ;0 IS HALF-WORD OPERAND + PUSHJ P,RDHLF ;NEED FULL WORD, GET SECOND HALF + HRL C,W ;GET HALF IN RIGHT PLACE + MOVSS C ;WELL ALMOST RIGHT + SOJE A,HLFOP ;1 IS FULL WORD, 2 IS GLOBAL REQUEST + PUSHJ P,SDEF ;SEE IF IT IS ALREADY DEFINED + JRST [MOVE C,2(A) ;YES, WE WIN + JRST HLFOP] + AOSN GLBCNT ;NO, INCREMENT NUMBER OF GLOBALS THIS FIXUP + AOS HEADNM ;INCREMENT FIXUP NUMBER IF FIRST GLOBAL + AOS W,OPNUM ;GET AN OPERAND NUMBER + LSH W,5 ;SPACE FOR TYPE + IORI W,2 ;TYPE 2 IS GLOBAL + HRL W,HEADNM ;GET FIXUP NUMBER + PUSHJ P,SYM3X2 ;AND PUT INTO UDEFINED AREA ALONG WITH NAME + MOVE C,W ;ALSO PUT THAT PART OF THE FIXUP IN + PUSHJ P,SYM3X2 + SKIPA A,[400000] ;SET UP GLOBAL FLAG +HLFOP: MOVEI A,0 ;VALUE OPERAND FLAG +HLFOP1: SOJL V,CSAT ;ENOUGH OPERANDS SEEN? + PUSH D,C ;NO, SAVE VALUE(OR GLOBAL NAME) + HRLI A,400000 ;PUT IN A VALUE MARKER + PUSH D,A ;TO THE STACK + JRST RPOL ;GET MORE POLISH + + + +;HAVE ENOUGH OPERANDS FOR THE CURRENT OPERATOR + +CSAT: HRRZS A ;KEEP ONLY THE GLOBAL-VALUE HALF + SKIPN SVSAT ;IS IT UNARY + JRST UNOP ;YES, NO NEED TO GET 2ND OPERAND + HRL A,(D) ;GET GLOBAL VALUE MARKER FOR 2ND OP + POP D,W + POP D,W ;VALUE OR GLOBAL NAME +UNOP: POP D,V ;OPERATOR + JUMPN A,GLOB ;IF EITHER IS A GLOBAL HANDLE SPECIALLY + XCT OPTAB-3(V) ;IF BOTH VALUES JUST XCT + MOVE C,W ;GET THE CURRENT VALUE +SETSAT: SKIPG V,(D) ;IS THERE A VALUE IN THE STACK + MOVE V,-2(D) ;YES, THIS MUST BE THE OPERATOR + MOVE V,DESTB-3(V) ;GET NUMBER OF OPERANDS NEEDED + MOVEM V,SVSAT ;SAVE IT HERE + SKIPG (D) ;WAS THERE AN OPERAND + SUBI V,1 ;HAVE 1 OPERAND ALREADY + JRST HLFOP1 ;GO SEE WHAT WE SHOULD DO NOW + +;HANDLE GLOBALS +GLOB: TRNE A,-1 ;IS IT IN RIGHT HALF + JRST TLHG ;NO, NEED TO PUT THIS VALUE INTO THE FIXUP LIST + PUSH P,W ;SAVE FOR A WHILE + MOVE W,C ;THE VALUE + AOS C,OPNUM ;GET AN OPERAND NUMBER + LSH C,5 ;AND PUT IN TYPE + IORI C,2 ;VALUE TYPE + HRL C,HEADNM ;THE FIXUP NUMBER + PUSHJ P,SYM3X2 + POP P,W ;RETRIEVE THE OTHER VALUE +TLHG: SKIPE SVSAT ;WAS THIS A UNARY OPERATOR + TLNE A,-1 ;WAS THERE A GLOBAL IN LEFT HALF + JRST GLSET + PUSH P,C ;SAVE THE FIRST OPERAND + AOS C,OPNUM ;SEE ABOVE + LSH C,5 + IORI C,2 + HRL C,HEADNM + PUSHJ P,SYM3X2 + MOVE W,C + POP P,C + +GLSET: EXCH C,W ;GET THEM IN THE OTHER ORDER + HRL W,C ;SET UP THE OPERATOR LINK + AOS C,OPNUM + LSH C,5 ;SPACE FOR THYPE + IOR C,V ;THE OPERATOR + HRL C,HEADNM + PUSHJ P,SYM3X2 ;INTO THE UNDEF LIST + MOVEI A,400000 ;SET UP AS A GLOBAL VALUE + JRST SETSAT ;AND SET UP FOR NEXT OPERATOR + + +;FINALLY WE GET TO STORE THIS MESS + +STOROP: MOVE T,-2(D) ;THIS SHOULD BE THE FAKE OPERATOR + CAIE T,15 ;IS IT + JRST LOAD4A ;NO, ILL FORMAT + HRRZ T,(D) ;GET THE VALUE TYPE + JUMPN T,GLSTR ;AND TREAT GLOBALS SPECIAL + MOVE A,W ;THE TYPE OF STORE OPERATOR + CAIGE A,-3 + PUSHJ P,FSYMT + PUSHJ P,RDHLF ;GET THE ADDRESS + MOVE V,W ;SET UP FOR FIXUPS + POP D,W ;GET THE VALUE + POP D,W ;AFTER IGNORING THE FLAG + PUSHJ P,@STRTAB+6(A) ;CALL THE CORRECT FIXUP ROUTINE +COMSTR: SETZM POLSW ;ALL DONE WITH POLISH +IFN REENT,<PUSHJ P,RESTRX> + MOVE T,OPNUM ;CHECK ON SIZES + MOVE V,HEADNM + CAIG V,477777 + CAILE T,17777 + JRST COMPOL ;TOO BIG, GIVE ERROR + PUSHJ P,RWORD ;THIS SHOULD GET US OUT (I.E RUN OUT COUNT) + JRST LOAD4A ;IF NOT, SOMETHING IS WRONG + +STRTAB: EXP ALSYM,LFSYM,RHSYM,ALSTR,LOCDLF,SYM4A,FAKESY + +GLSTR: MOVE A,W + CAIGE A,-3 + PUSHJ P,FSYMT + PUSHJ P,RDHLF ;GET THE STORE LOCATION + MOVEI A,23(A) + POP D,V ;GET VALUE + POP D,V + HRLM V,W ;SET UP STORAGE ELEMENT + AOS C,OPNUM + LSH C,5 + IOR C,A + HRL C,HEADNM + PUSHJ P,SYM3X2 + MOVE W,C ;NOW SET UP THE HEADER + AOS V,GLBCNT ;WHICH HAS NUMBER OF GLOBALS + HRLM V,W + HRRZ C,HEADNM + PUSHJ P,SYM3X2 + JRST COMSTR ;AND FINISH + + + +ALSTR1: IFN L,<CAMGE V,RINITL + POPJ P,> +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> + HRRZ T,@X + MOVEM W,@X ;FULL WORD FIXUPS + MOVE V,T +ALSTR: JUMPN V,ALSTR1 + POPJ P, +DESTB: EXP 1,1,1,1,1,1,1,1,0,0,100 + +OPTAB: ADD W,C + SUB W,C + IMUL W,C + IDIV W,C + AND W,C + IOR W,C + LSH W,(C) + XOR W,C + SETCM W,C + MOVN W,C + REPEAT 7,<JRST STRSAT> + + +FSYMT: PUSHJ P,RDHLF ;FIRST HALF OF SYMBOL + HRL V,W + PUSHJ P,RDHLF + HRR V,W + PUSH D,A ;SAVE STORE TYPE + PUSHJ P,RDHLF ;GET BLOCK NAME + HRL C,W + PUSHJ P,RDHLF + HRR C,W + TLO C,140000 ;MAKE BLOCK NAME + PUSHJ P,SDEF ;FIND IT + CAMN A,B + JRST FNOLOC ;MUST NOT BE LOADING LOCALS +FSLP: LDB C,[POINT 32,-1(A),35] ;GET NAME + CAMN C,V + JRST FNDSYM + SUB A,SE3 + CAME A,B ;ALL DONE? + JRST FSLP ;NO +FNOLOC: POP D,A + MOVEI A,0 ;SET FOR A FAKE FIXUP + AOS (P) + POPJ P, +FNDSYM: MOVEI W,(A) ;LOC OF SYMBOL + SUB W,HISTRT + POP D,A + AOS (P) + POPJ P, + +LFSYM: ADD V,HISTRT + HRLM W,(V) + MOVSI D,400000 ;LEFT HALF + JRST COMSFX +RHSYM: ADD V,HISTRT + HRRM W,(V) + MOVSI D,200000 + JRST COMSFX +FAKESY: POPJ P, ;IGNORE + + +POLSAT: PUSH P,C ;SAVE SYMBOL + MOVE C,V ;POINTER + PUSHJ P,SREQ ;GO FIND IT + SKIPA + JRST LOAD4A ;SOMETHING IS ROTTEN IN DENMARK + MOVEM W,2(A) ;STORE VALUE + HLRZS C ;NOW FIND HEADER + PUSHJ P,SREQ + SKIPA + JRST LOAD4A + HRLZI V,-1 ;AND DECREMENT COUNT + ADDB V,2(A) + TLNN V,-1 ;IS IT NOW 0 + JRST PALSAT ;YES, GO DO POLISH + POP P,C ;RESTORE SYMBOL + JRST SYM2W1 ;AND RETURN + +PALSAT: PUSH P,W ;SAVE VALUE + MOVEM C,HDSAV ;SAVE THE HEADER NUMBER + MOVE D,[IOWD PPDL,PPDB] ;SET UP A PDL + MOVE C,V ;GET THE POINTER + HRL C,HDSAV ;AND THE FIXUP NUMBER + PUSHJ P,REMSYM ;REMOVE THE HEADER FORM EXISTANCE + PUSHJ P,SREQ ;GO FINE THE NEXT LINK + SKIPA + JRST LOAD4A ;LOSE + ANDI C,37 ;GET OPERATOR TYPE + HRRZ V,2(A) ;PLACE TO STORE + PUSH D,V + PUSH D,[XWD 400000,0] + PUSH D,C ;THIS HAD BETTER BE A STORE OR WE ARE IN TROUBLE + HLRZ C,2(A) ;GET POINTER TO POLISH CHAIN +PSAT1: PUSHJ P,REMSYM ;REMOVE SYMBOL + + + +PSAT2: HRL C,HDSAV ;GET FIXUP NUMBER + PUSHJ P,SREQ ;LOOK FOR IT + SKIPA + JRST LOAD4A + ANDI C,37 ;THE OPERATOR NUMBER + CAIN C,2 ;IS IT AN OPERAND? + JRST PSOPD ;YES, GO PROCESS + PUSH D,C ;YES STORE IT + SKIPN DESTB-3(C) ;IS IT UNARY + JRST PSUNOP ;YES + HLRZ C,2(A) ;GET FIRST OPERAND + HRLI C,600000 ;AND MARK AS VALUE + PUSH D,C +PSUNOP: HRRZ C,2(A) ;OTHER OPERAND + JRST PSAT1 ;AND AWAY WE GO + +PSOPD: MOVE C,2(A) ;THIS IS A VALUE + PUSHJ P,REMSYM ;GET RID OF THAT PART OF THE CHAIN +PSOPD1: SKIPG V,(D) ;IS THERE A VALUE IN THE STACK + JRST PSOPD2 ;YES, TAKE GOOD CARE OF IT +COMOP: POP D,V ;NO, GET THAT OPERATOR OUT OF THERE + XCT OPTAB-3(V) ;AND DO IT + MOVE C,W ;GET RESULT IN RIGHT PLACE + JRST PSOPD1 ;AND TRY FOR MORE +PSOPD2: TLNE V,200000 ;IS IT A POINTER + JRST DBLOP ;YES, NEEDS MORE WORK + MOVE W,C ;NO, ONE WE HAVE IS FIRST OPND, GET IT INTO W + POP D,C ;VALUE POINTER + POP D,C ;2ND OPERAND INTO C + JRST COMOP ;GO PROCESS OPERATOR + +DBLOP: EXCH C,(D) ;PUT VALUE IN STACK AND RETRIEV POINTER + PUSH D,[XWD 400000,0] ;MARK AS VALUE + JRST PSAT2 ;AND GO LOOK FOR MORE TROUBLE + +LINK: PUSHJ P,PRWORD ;GET TWO WORDS + JUMPLE C,ENDLNK ;THIS IS AN END OF LINK WORD + CAILE C,20 ;IS IT IN RANGE? + JRST LOAD4A + HRRZ V,W ;GET THE ADDRESS + HRRZ W,LINKTB(C) ;GET CURRENT LINK +IFN L,< CAML V,RINITL ;LOSE> + HRRM W,@X ;PUT INTO CORE + HRRM V,LINKTB(C) ;SAVE LINK FOR NEXT ONE + JRST LINK ;GO BACK FOR MORE +ENDLNK: MOVNS C ;GET ENTRY NUMBER + JUMPE C,LOAD4A ;0 IS A LOSER + CAILE C,20 ;CHECK RANGE + JRST LOAD4A + HRLM W,LINKTB(C) ;SAVE END OF LINK INFO + JRST LINK ;MORE + + +STRSAT: MOVE W,C ;GET VALUE TO STORE IN W + MOVE C,V ;GET OPERATOR HERE + POP D,V + POP D,V ;GET ADDRESS TO STORE + PUSHJ P,@STRTAB-15(C) +IFN REENT,<PUSHJ P,RESTRX> + POP P,W ;RESTORE THINGS + POP P,C + JRST SYM2W1 + +ALSYM: ADD V,HISTRT + MOVEM W,(V) + MOVSI D,600000 +> + LIST ;END OF FAILSW CODE +IFN FAILSW!WFWSW,< +COMSFX: IFE REENT,<PUSHJ P,SYMFX1 + JRST RESTRX> +IFN REENT,<JRST SYMFX1>> + +REMSYM: MOVE T,1(S) + MOVEM T,1(A) + MOVE T,2(S) + MOVEM T,2(A) + ADD S,SE3 + MOVEM A,SVA + POPJ P, + + + +SUBTTL LIBRARY INDEX (BLOCK TYPE 14) + + COMMENT * DIRECT ACCESS LIBRARY SEARCH MODE + INDEX WRITTEN BY FUDGE2.SEE DIDAL DOC (100-540-001-00) + DESIGN AND CODING BY D.M.NIXON JUL-AUG 1970 + * + +IFN DIDAL,< + +INDEX8: POP P,LSTBLK ;SET UP LSTBLK FOR NEXT PROG + PUSHJ P,WORD ;READ FIRST WORD + HLRZ A,W ;BLOCK TYPE ONLY + CAIE A,14 ;IS IT AN INDEX? + JRST INDEXE ;NO, ERROR + JRST INDEX9 ;DON'T SET FLAG AGAIN + +INDEX0: TRO F,XFLG ;SIGNAL INDEX IN CORE + MOVEI A,1 ;START ON BLOCK 1 (DSK) + HRROM A,LSTBLK ;BUT INDICATE AN INDEX + MOVE A,ILD1 ;INPUT DEVICE + DEVCHR A, + TLNE A,100 ;IS IT A DTA? + TRO F,DTAFLG ;YES +INDEX9: MOVEI A,AUX+2 ;AUX BUFFER + HRLI A,4400 ;MAKE BYTE POINTER + MOVEM A,ABUF1 ;AND SAVE IT + HRL A,BUFR1 ;INPUT BUFFER + BLT A,AUX+201 ;STORE BLOCK + TRO F,LSTLOD ;AND FAKE LAST PROG READ +INDEX1: ILDB T,ABUF1 + HLRE A,T ;GET WORD COUNT + JUMPL A,INDEX3 ;END OF BLOCK IF NEGATIVE + CAIE A,4 ;IS IT ENTRY + JRST INDEX + HRRZS T ;WORD COUNT ONLY +INDEX2: ILDB C,ABUF1 ;GET NEXT SYMBOL + TLO C,040000 ; + PUSHJ P,SREQ ;SEARCH FOR IT + SOJA T,INDEX4 ;REQUEST MATCHES + SOJG T,INDEX2 ;KEEP TRYING + ILDB T,ABUF1 ;GET POINTER WORD + TRZN F,LSTLOD ;WAS LAST PROG LOADED? + JRST INDEX1 ;NO + TRNN F,DTAFLG ;ALWAYS SAVE IF DTA??? + SKIPL LSTBLK ;SKIP IF LAST BLOCK WAS AN INDEX + MOVEM T,LSTBLK ;SAVE POINTER FOR CALCULATIONS + JRST INDEX1 ;GET NEXT PROG + + +INDEX4: ADDM T,ABUF1 + ILDB A,ABUF1 + PUSH P,A ;SAVE THIS BLOCK + TROE F,LSTLOD ;DID WE LOAD LAST PROG? + JRST [SKIPGE LSTBLK ;WAS LAST BLOCK AN INDEX? + JRST NXTBLK ;YES, SO GET NEXT ONE + MOVEM A,LSTBLK + JRST LOAD1] ;NEXT PROG IS ADJACENT + HRRZ T,LSTBLK ;GET LAST BLOCK NUMBER + CAIN T,(A) ;IN THIS BLOCK? + JRST THSBLK ;YES +NXTNDX: TRNE F,DTAFLG ;DIFFERENT TEST FOR DTA + JRST NXTDTA ;CHECK IF NEXT BUFFER IN CORE + CAIN T,-1(A) ;NEXT BLOCK? + JRST NXTBLK ;YES,JUST DO INPUT +INDEX5: USETI 1,(A) ;SET ON BLOCK + WAIT 1, ;LET I/O FINISH + MOVSI C,(1B0) ;CLEAR RING USE BIT IF ON + ; ****** THE DEC BASTARDS DON'T READ THEIR OWN MANUALS ***** + HLLM C,BUFR ;INDICATE VIRGIN BUFFER +; ****** END OF THE CURRENT DEC IDIOCY **********: + HRRZ T,BUFR + SKIPL (T) + JRST NXTBLK ;ALL DONE NOW + ANDCAM C,(T) ;CLEAR USE BIT + HRRZ T,(T) ;GET NEXT BUFFER + JRST .-4 ;LOOP + +NXTDTA: WAIT 1, ;LET I/O RUN TO COMPLETION + HRRZ T,BUFR ;GET POINTER TO CURRENT BUFFER + HLRZ T,1(T) ;FIRST DATA WORD IS LINK + CAIE T,(A) ;IS IT BLOCK WE WANT? + JRST INDEX5 ;NO +NXTBLK: IN 1, + JRST NEWBLK ;IT IS NOW + JRST WORD3 ;EOF OR ERROR + +NEWBLK: MOVE A,(P) ;GET CURRENT BLOCK + JUMPL A,INDEX8 ;JUST READ AN INDEX + HLRZS A ;GET WORD COUNT + JUMPE A,[TRNN F,DTAFLG ;WORD COUNT OK IF ON DTA + SOS BUFR2 + JRST INDEX7] + SKIPL LSTBLK ;WAS LAST BLOCK AN INDEX? + AOJA A,INDEX6 ;NO, ALWAYS ONE WORD OUT THEN + HRRZ T,AUX+3 ;GET FIRST ENTRY BLOCK TYPE COUNT + HRRZ T,AUX+4(T) ;GET FIRST POINTER WORD + MOVEM T,LSTBLK ;SOME WHERE TO STORE IT + HRRZ T,(P) ;GET CURRENT BLOCK NUMBER + CAME T,LSTBLK ;SAME BLOCK? + AOJA A,INDEX6 ;NO + TRNN F,DTAFLG ;BUFR2 OK IF DTA??? + SOS BUFR2 ;ONE WORD TO MANY THOUGH + JRST INDEX6 ;YES, WORD COUNT WILL BE CORRECT + + + +THSBLK: SUB A,LSTBLK ;GET WORD DIFFERENCE + MOVSS A ;INTO RIGHT HALF +INDEX6: ADDM A,BUFR1 + MOVNS A + ADDM A,BUFR2 +INDEX7: POP P,LSTBLK ;STORE THIS AS LAST BLOCK READ + JRST LOAD1 + +INDEX3: HRRE A,T ;GET BLOCK # OF NEXT INDEX + JUMPL A,EOF ;FINISHED IF -1 + PUSH P,T ;STACK THIS BLOCK + HRRZ T,LSTBLK ;GET LAST BLOCK + JRST NXTNDX ;CHECK IF NEXT BUFFER IN CORE + +INDEX: IN 1, ;GET NEXT BUFFER + SOSA BUFR2 ;O.K. RETURN, BUT 1 WORD TOO MANY + JRST WORD3 ;ERROR OR EOF + PUSHJ P,WORD ;READ FIRST WORD +INDEXE: TRZE F,XFLG ;INDEX IN CORE? + TTCALL 3,[ASCIZ /LIBRARY INDEX INCONSISTENT - CONTINUING +/] ;WARNING MESSAGE + JRST LOAD1A+1 ;AND CONTINUE +> + + + +SUBTTL ALGOL OWN BLOCK (TYPE 15) + +IFN ALGSW,< +ALGBLK: +IFN SAILSW,<TRNN F,ALGFL ;IF NOT ALGOL + JRST LDPRG ;MUST BE SAIL BLOCK TYPE 15> + PUSHJ P,RWORD ;READ 3RD WORD + HLRZ V,W ;GET START OF OWN BLOCK + MOVEI C,(W) ;GET LENGTH OF OWN BLOCK + MOVEM C,OWNLNG ;SAVE IT TO FIX RELOC AT END + PUSHJ P,ALGB2 ;FIX AND CHECK PROG BREAK + ADDI V,(R) ;RELOCATE + MOVEI W,(V) ;GET CURRENT OWN ADDRESS + EXCH W,%OWN ;SAVE FOR NEXT TIME + MOVEM W,@X ;STORE LAST OWN ADDRESS IN LEFT HALF +ALGB1: PUSHJ P,RWORD ;GET DATA WORD + HLRZ V,W ;GET ADDRESS TO FIX UP + HRRZS W ;RIGHT HALF ONLY + ADD W,%OWN ;ADD IN ADDRESS OF OWN BLOCK + ADDM W,@X ;FIX UP RIGHT HALF + JRST ALGB1 ;LOOP TIL DONE + +ALGNAM: JUMPE W,CPOPJ ;NOT ALGOL MAIN PROG + TROE F,ALGFL ;SET ALGOL SEEN FLAG + JRST ALGER1 ;ONLY ONE ALGOL MAIN PROG ALLOWED +IFN REENT,<TRNN F,SEENHI ;ANYTHING IN HIGH SEGMENT?> + CAME R,[XWD W,JOBDA] ;ANYTHING LOADED IN LOW SEGMENT? + JRST ALGER2 ;YES, ERROR ALSO + SETZM %OWN ;INITIALISE OWN AREA POINTER +IFN REENT,<TRO F,VFLG ;DEFAULT RE-ENTRANT OP-SYSTEM> +ALGB2: ADDI H,(W) ;FIX PROG BREAK +IFN REENT,<CAML H,HILOW + MOVEM H,HILOW ;HIGHEST LOW CODE LOADED> + CAILE H,1(S) ;SKIP IF SUFFICIENT CORE AVAILABLE +IFN EXPAND,<JRST [PUSHJ P,XPAND> + JRST FULLC +IFN EXPAND,< JRST .+1]> + POPJ P, + +ALGER1: ERROR ,</ONLY ONE ALGOL MAIN PROGRAM ALLOWED#/> + JRST LD2 + +ALGER2: ERROR ,</ALGOL MAIN PROGRAM MUST BE LOADED FIRST#/> + JRST LD2 + +> + + +SUBTTL SAIL BLOCK TYPE 15 + +COMMENT * BLOCK TYPE 15 AND 16. SIXBIT FOR FIL,PPN,DEV +IN THE BLOCK. SEARCH TABLE FOR ALREADY REQUESTED. IF NOT +ENTER REQUEST. ORIGINAL CODE BY DCS REWRITTEN BY WFW* + +IFN SAILSW,< +IFE ALGSW<ALGBLK:> +LDPRG: MOVEI D,PRGFLS-1 ;SET UP SOMETHING WE CAN SEARCH WITH + MOVE W,PRGPNT ;AND CURRENT POINTER + PUSHJ P,LDSAV ;GO ENTER (WILL NOT RETURN IF RUNS OUT) + MOVEM D,PRGPNT + JRST LDPRG ;BACK FOR MORE +LDLIB: MOVEI D,LIBFLS-1 + MOVE W,LIBPNT + PUSHJ P,LDSAV + MOVEM D,LIBPNT + JRST LDLIB ;LOOKS JUST LIKE THE LAST ONE, DOESN'T IT + +LDSAV: HRLI D,-RELLEN-1 ;GET AOBJN SET UP + MOVEM W,LODPN2# ;SAV IT + PUSHJ P,PRWORD ;GET FILE,PPN + MOVE A,W ;SAVE ONE + PUSHJ P,RWORD ;AND DEVICE +FILSR: CAMN D,LODPN2 + JRST FENT ;HAVE GOTTEN THERE, ENTER FILE + CAME C,PRGFIL(D) ;CHECK FOR MATCH + JRST NOMT ;NOT FILE + CAME A,PRGPPN(D) + JRST NOMT ;NO PPN + CAME W,PRGDEV(D) +NOMT: AOBJN D,FILSR ;AND NOT DEVICE SHOULD ALWAYS JUMP + MOVE D,LODPN2 + POPJ P, ;JUST RETURN CURRENT POINTER +FENT: MOVE D,LODPN2 ;ENTER IT + AOBJP D,WRONG ;THAT IS IF NOT TOO MANY + MOVEM C,PRGFIL-1(D) ;HAVE ALREADY INDEXED + MOVEM A,PRGPPN-1(D) ;HENCE THE -1 + MOVEM W,PRGDEV-1(D) + POPJ P, +WRONG: ERROR ,</TOO MANY DEMANDED FILES#/> + JRST LD2 +> + + +SUBTTL SYMBOL TABLE SEARCH SUBROUTINES + +; ENTERED WITH SYMBOL IN C +; RETURN IS WITH POINTER IN A IF MATCHING SYMBOL FOUND +; OTHERWISE, A SKIP ON RETURN OCCURS + +SREQ: JUMPGE S,CPOPJ1 ;JUMP IF NO UNDEF. SYMBOLS + SKIPA A,S ;LOAD REQUEST SEARCH POINTER +SDEF: MOVE A,B ;LOAD DEF. SYMBOL SEARCH POINTER +SDEF1: CAMN C,1(A) + POPJ P, ;SYMBOLS MATCH, RETURN +IFE K,< TLNE N,F4SW ;ARE WE IN FORTRAN? + JRST SDEF2 ;YES,JUST TRY NEXT SYMBOL> + TLC C,400000 ;MIGHT BE SUPPRESSED INTERNAL + CAMN C,1(A) ;WAS IT? + JRST [TLO C,400000 ;YES, SO ENSURE IT'S SUPPRESSED + MOVEM C,1(A) ;STORE SUPPRESSED DEFINITION + POPJ P,] ;YES + TLC C,400000 ;NO,TRY NEXT SYMBOL +SDEF2: ADD A,SE3 + JUMPL A,SDEF1 +IFE K,< JRST CPOPJ1 ;SYMBOL NOT FOUND SKIPS ON RETURN> +IFN K,< +CPOPJ1: AOS (P) + POPJ P,> + + +SUBTTL RELOCATION AND BLOCK INPUT + +PRWORD: PUSHJ P,RWORD ;READ A WORD PAIR + MOVE C,W ;LOAD C WITH FIRST DATA WORD + TRNE E,377777 ;TEST FOR END OF BLOCK + JRST RWORD1 ;INPUT SECOND WORD OF PAIR + MOVEI W,0 ;NO SECOND WORD, ASSUME ZERO + POPJ P, + +RWORD: TRNN E,377777 ;TEST FOR END OF BLOCK + JRST LOAD1 ;RETURN TO LOAD THE NEXT BLOCK +RWORD1: AOBJN E,RWORD2 ;JUMP IF DATA WORD NEXT + PUSHJ P,WORD ;READ CONTROL WORD + MOVE Q,W ;DON'T COUNT RELOCATION WORDS + HRLI E,-22 ;SET RELOCATION WORD BYTE COUNT +RWORD2: PUSHJ P,WORD ;READ INPUT WORD + JUMPGE Q,RWORD3 ;TEST LH RELOCATION BIT + TRNN F,TWOFL ;POSSIBLE TWO SEGMENTS? + JRST RWORD5 ;NO + MOVSS W + PUSHJ P,CHECK ;USE CORRECT RELOCATION + HRRI W,@R + MOVSS W + JRST RWORD3 ;AND TEST RIGHT HALF +RWORD5: HRLZ T,R + ADD W,T ;LH RELOCATION +RWORD3: TLNN Q,200000 ;TEST RH RELOCATION BIT + JRST RWORD4 ;NOT RELOCATABLE + TRNE F,TWOFL ;POSSIBLE TWO SEGMENTS? + PUSHJ P,CHECK ;USE CORRECT RELOCATION + HRRI W,@R ;RH RELOCATION +RWORD4: LSH Q,2 + POPJ P, + +CHECK: MOVE T,HVAL1 ;START OF HISEGMENT + CAIG T,NEGOFF(W) ;IN HISEG? + JRST [SUBI W,(T) ;YES REMOVE OFSET + POPJ P,] + HRRI W,@LOWR ;USE LOW SEG RELOC + JRST CPOPJ1 ;SKIP RETURN + + +SUBTTL PRINT STORAGE MAP SUBROUTINE + +PRMAP: CAIN D,1 ;IF /1M PRINT LOCAL SYMBOLS + TROA F,LOCAFL ;YES,TURN ON FLAG + TRZ F,LOCAFL ;CLEAR JUST IN CASE + PUSHJ P,FSCN1 ;LOAD OTHER FILES FIRST + PUSHJ P,CRLFLF ;START NEW PAGE + HRRZ W,R +IFN REENT,<CAIG W,JOBDA ;LOADED INTO LOW SEGMENT + JRST NOLOW ;DON'T PRINT IF NOTHING THERE> + PUSHJ P,PRNUM0 +IFE REENT,<ERROR 7,<?IS THE PROGRAM BREAK@?>> +IFN REENT,<ERROR 7,<?IS THE LOW SEGMENT BREAK@?> + PUSHJ P,CRLF ;CR-LF ON ALL BUT TTY +NOLOW: MOVE W,HVAL ;HISEG BREAK + CAMG W,HVAL1 ;HAS IT CHANGED + JRST NOHIGH ;NO HI-SEGMENT + TLO F,FCONSW ;FORCE OUT HI-SEG BREAK ALSO + PUSHJ P,PRNUM0 + ERROR 7,<?IS THE HIGH SEGMENT BREAK@?> + PUSHJ P,CRLF +NOHIGH:> +IFE NAMESW,< MOVE W,DTOUT ;OUTPUT NAME > +IFN NAMESW,< SKIPN W,DTOUT + MOVE W,CURNAM ;USE PROGRAM NAME> + JUMPE W,.+3 ;DON'T PRINT IF NOT THERE + PUSHJ P,PWORD + PUSHJ P,SPACES ;SOME SPACES + ERROR 0,<?STORAGE MAP!?> + PUSHJ P,SPACES ;SOME SPACES + PUSH P,N + PUSH P,E + MOVE N,[POINT 6,DBUF] ;INITIALIZE DATE POINTER + MSTIME Q, ;GET THE TIME + IDIVI Q,↑D60*↑D1000 + IDIVI Q,↑D60 + PUSH P,A ;SAVE MINUTES + PUSHJ P,OTOD1 ;STORE HOURS + POP P,Q ;GET MINUTES + PUSHJ P,OTOD ;STORE MINUTES + DATE E, ;GET DATE + IDIVI E,↑D31 ;GET DAY + ADDI Q,1 + PUSHJ P,OTOD ;STORE DAY + IDIVI E,↑D12 ;GET MONTH + ROT Q,-1 ;DIV BY 2 + HRR A,DTAB(Q) ;GET MNEMONIC + TLNN Q,400000 + HLR A,DTAB(Q) ;OTHER SIDE + HRRM A,DBUF+1 ;STORE IT + MOVEI Q,↑D64(E) ;GET YEAR + MOVE N,[POINT 6,DBUF+2] + PUSHJ P,OTOD ;STORE IT + POP P,E + POP P,N + PUSHJ P,DBUF1 + PUSHJ P,CRLF + SKIPN STADDR ;PRINT STARTING ADDRESS + JRST NOADDR ;NO ADDRESS SEEN + ERROR 0,</STARTING ADDRESS !/> + PUSHJ P,SP1 + MOVE W,STADDR ;GET ST. ADDR. + PUSHJ P,PRNUM0 ;PRINT IT +IFN NAMESW,< + PUSHJ P,SP1 + MOVE W,[SIXBIT / PROG /] + PUSHJ P,PWORD + MOVE W,CURNAM ;PROG NAME + PUSHJ P,PWORD + PUSHJ P,SP1 + MOVE W,ERRPT6 ;SIXBIT / FILE / + PUSHJ P,PWORD + MOVE W,PRGNAM ;FILE NAME + PUSHJ P,PWORD> +NOADDR: IFN REENT,< + HRRZ A,HVAL1 ;GET INITIAL HIGH START + ADDI A,JOBHDA ;ADD IN OFFSET + HRLI A,JOBDA ;LOW START + MOVSM A,SVBRKS ;INITIAL BREAKS> + HLRE A,B + MOVNS A + ADDI A,(B) +PRMAP1: SUBI A,2 +IFN REENT,<SKIPN C,1(A) ;LOAD SYMBOL SKIP IF REAL SYMBOL + JRST PRMAP4 ;IGNORE ZERO NAME(TWOSEG BREAKS)> +IFE REENT,<MOVE C,1(A) ;LOAD SYMBOL> + TLNN C,300000 ;TEST FOR LOCAL SYMBOL + JRST .+4 ;GLOBAL (NOT LOCAL ANYWAY) + TRNN F,LOCAFL ;PRINT LOCAL SYMBOLS? + JRST PRMAP4 ;IGNORE LOCAL SYMBOLS + TLC C,140000 ;MAKE IT LOOK LIKE INTERN + TLNE C,040000 + JRST PRMP1A + PUSHJ P,CRLF + PUSHJ P,CRLF + SETZM TABCNT + JRST PRMP1B + + +PRMP1A: PUSHJ P,TAB +PRMP1B: PUSHJ P,PRNAM1 ;PRINT SYMBOL AND VALUE + TLNE C,040000 + JRST PRMAP4 ;GLOBAL SYMBOL + HLRE C,W ;POINTER TO NEXT PROG. NAME + HRRZS W ;SO WE ONLY HAVE THE HALF WE WANT +PRMAP7: JUMPL C,PRMP7A +IFN REENT,<SKIPN 1(B) ;IS IT A ZERO SYMBOL + JRST [MOVE C,B ;SET UP C + JRST PRMAP2] ;AND GO + HRRZ T,HVAL ;GET TO OF HI PART + CAML W,HVAL1 ;IS PROGRAM START UP THERE?? + JRST PRMAP6 ;YES + HRRZ T,HILOW ;GET HIGHEST LOCATION LOADED IN LOW + SUBI T,(X) ;REMOVE OFFSET + CAIE T,(W) ;EQUAL IF ZERO LENGTH PROG> + HRRZ T,R ;GET LOW, HERE ON LAST PROG + JRST PRMAP6 ;GO + +PRMP7A: ADDI C,2(A) ;POINTER TO NEXT PROGRAM NAME +PRMAP2: IFN REENT,< + SKIPE 1(C) ;THIS IS A TWO SEG FILE + JRST PRMP2A ;NO + MOVE T,2(C) ;GET PROG BREAKS + TLNN T,-1 ;IF NO HIGH STUFF YET + HLL T,SVBRKS ;FAKE IT + SUB T,SVBRKS ;SUBTRACT LAST BREAKS + HRRZ W,T ;LOW BREAK + PUSH P,W ;SAVE IT + JUMPGE T,.+2 ;IF NEGATIVE + TDZA W,W ;MAKE ZERO (FIRST TIME THRU) + HLRZ W,T ;GET HIGH BREAK + PUSHJ P,PRNUM ;PRINT IT + PUSHJ P,TAB ;AND TAB + POP P,W ;LOW BREAK + PUSHJ P,PRNUM + MOVE T,2(C) + CAMN C,B ;EQUAL IF LAST PROG + SETZ C, ;SIGNAL END + TLNN T,-1 + HLL T,SVBRKS + CAMN T,SVBRKS ;ZERO LENGTT IF EQUAL + JRST PRMP6A ;SEE IF LIST ALL ON + MOVEM T,SVBRKS ;SAVE FOR NEXT TIME + JRST PRMAP3 ;AND CONTINUE +PRMP2A:> + HRRZ T,(C) ;GET ITS STARTING ADRESS +IFN REENT,<CAMGE W,HVAL1 ;MAKE SURE BOTH IN SAME SEGMENT + CAMGE T,HVAL1 + CAMGE T,W + JRST [HLRE T,(C) ;NO TRY NEXT ONE DOWN + JUMPE T,@PRMAP7 ;END GO USE PROG BREAK + ADDI C,(T) + JRST PRMAP2] ;CHECK THIS ONE> +PRMAP6: SUBM T,W ;SUBTRACT ORIGIN TO GET LENGTH + PUSHJ P,PRNUM ;PRINT PROGRAM LENGTH + PUSHJ P,CRLF +PRMP6A: TLNN N,ALLFLG ;SKIP IF LIST ALL MODE IS ON + TRNE W,777777 ;SKIP IF ZERO LENGTH PROGRAM + JRST PRMAP3 + HLRE C,2(A) ;GET BACK CORRECT LOCATION IF 0 LENGTH + JUMPE C,PRMAP5 ;JUMP IF LAST PROGRAM + ADDI C,2(A) ;IN CASE WE SKIPPED SOME PROGRAMS + SKIPA A,C ;SKIP GLOBALS, ZERO LENGTH PROG. +PRMAP3: PUSHJ P,CRLF +PRMAP4: CAILE A,(B) ;TEST FOR END OF SYMBOL TABLE + JRST PRMAP1 +PRMAP5: PUSHJ P,CRLF ;GIVE AN XTRA CR-LF + + + +SUBTTL LIST UNDEFINED AND MULTIPLY DEFINED GLOBALS + + PUSHJ P,PMS1 ;PRINT UNDEFINED SYMBOLS + +;LIST NUMBER OF MULTIPLY DEFINED GLOBALS + +PMS3: SKIPN W,MDG ;ANY MULTIPLY DEFINED GLOBALS + JRST PMS4 ;NO, EXCELSIOR + PUSHJ P,FCRLF ;ROOM AT THE TOP + PUSHJ P,PRQ ;PRINT ? + PUSHJ P,PRNUM0 ;NUMBER OF MULTIPLES + ERROR 7,<?MULTIPLY DEFINED GLOBALS@?> +PMS4: TLNE N,AUXSWE ;AUXILIARY OUTPUT DEVICE? + OUTPUT 2, ;INSURE A COMPLETE BUFFER + POPJ P, ;RETURN + +;LIST UNDEFINED GLOBALS + +PMS1: PUSHJ P,FSCN1 ;LOAD FILES FIRST + JUMPGE S,CPOPJ ;JUMP IF NO UNDEFINED GLOBALS + PUSHJ P,FCRLF ;START THE MESSAGE + HLRE W,S ;COMPUTE NO. OF UNDEF. GLOBALS + MOVMS W + LSH W,-1 ;<LENGTH OF LIST>/2 + PUSHJ P,PRNUM0 + ERROR 7,</UNDEFINED GLOBALS@/> + MOVE A,S ;LOAD UNDEF. POINTER +PMS2: SKIPL W,1(A) + TLNN W,40000 + JRST PMS2A + PUSHJ P,FCRLF + PUSHJ P,PRNAM0 ;PRINT SYMBOL AND POINTER +PMS2A: ADD A,SE3 + JUMPL A,PMS2 +CPOPJ: POPJ P, + +PMS: PUSHJ P,PMS1 ;PRINT UNDEFINED SYMBOLS + JUMPGE S,CPOPJ ;NO UNDEFINED SYMBOLS + PUSHJ P,CRLF ;NEW LINE,MAKE ? VISIBLE + PUSHJ P,PRQ ;FIX FOR BATCH TO PRINT ALL SYMBOLS + JRST CRLF ;SPACE AFTER LISTING + + +SUBTTL ENTER FILE ON AUXILIARY OUTPUT DEVICE + +IAD2: PUSH P,A ;SAVE A FOR RETURN + MOVE A,LD5C1 ;GET AUX. DEV. + DEVCHR A, ;GET DEVCHR + TLNN A,4 ;DOES IT HAVE A DIRECTORY + JRST IAD2A ;NO SO JUST RETURN + MOVE A,DTOUT ;GET OUTPUT NAME + CAME A,[SIXBIT /JOBDAT/] ;DON'T USE JOBDAT + JUMPN A,IAD2A ;USE ANYTHING NON-ZERO + MOVSI A,(SIXBIT /DSK/) ;DEFAULT DEVICE + CAMN A,LD5C1 ;IS IT AUX. DEV. + JRST .+5 ;YES LEAVE WELL ALONE + CLOSE 2, ;CLOSE OLD AUX. DEV. + MOVEM A,LD5C1 ;SET IT TO DSK + OPEN 2,OPEN2 ;OPEN IT FOR DSK + JRST IMD4 ;FAILED +IFN NAMESW,< SKIPN A,CURNAM ;USE PROG NAME> + MOVSI A,(SIXBIT /MAP/) ;AN UNLIKELY NAME + MOVEM A,DTOUT ;SO ENTER WILL NOT FAIL +IAD2A: POP P,A ;RECOVER A + SETZM DTOUT+2 ;CLEAR PROTECTION (LEVEL D) + ENTER 2,DTOUT ;WRITE FILE NAME IN DIRECTORY + JRST IMD3 ;NO MORE DIRECTORY SPACE + POPJ P, + +IMD3: ERROR ,</DIR. FULL@/> + JRST LD2 + +IMD4: MOVE P,[XWD -40,PDLST] ;RESTORE STACK + TLZ N,AUXSWE!AUXSWI ;NO AUX.DEV.NOW + ERROR ,</NO MAP DEVICE@/> + JRST PRMAP5 ;CONTINUE TO LOAD + + + +SUBTTL PRINT SUBROUTINES + +;PRINT THE 6 DIGIT OCTAL ADDRESS IN W + +; ACCUMULATORS USED: D,T,V + +PRNAM0: MOVE C,1(A) ;LOAD SYMBOL +PRNAM1: MOVE W,2(A) ;LOAD VALUE +PRNAM: PUSHJ P,PRNAME +PRNUM: + TRNN F,TTYFL + PUSHJ P,SP1 + PUSHJ P,SP1 +PRNUM0: MOVE V,PRNUM2 ;LOAD BYTE POINTER TO RH. OF W + MOVNI D,6 ;LOAD CHAR. COUNT +PRNUM1: ILDB T,V ;LOAD DIGIT TO BE OUTPUT + ADDI T,60 ;CONVERT FROM BINARY TO ASCII + PUSHJ P,TYPE2 + AOJL D,PRNUM1 ;JUMP IF MORE DIGITS REMAIN + POPJ P, + +PRNUM2: XWD 220300,W + + + + +IFN NAMESW,< +LDNAM: MOVE T,[POINT 6,CURNAM] ;POINTER + MOVNI D,6 ;SET COUNT + TLZ W,740000 ;REMOVE CODE BITS +SETNAM: IDIVI W,50 ;CONVERT FROM RAD 50 + HRLM C,(P) + AOJGE D,.+2 + PUSHJ P,SETNAM + HLRZ C,(P) + JUMPE C,INAM + ADDI C,17 + CAILE C,31 + ADDI C,7 + CAIG C,72 ;REMOVE SPECIAL CHARS. (. $ %) + IDPB C,T +INAM: POPJ P, > + + +;YE OLDE RECURSIVE NUMBER PRINTER +;PRINTS Q, WITH LEADING ZEROES SUPPRESSED; USES A AND T + +RCNUM: IDIVI Q,12 ;RADIX DECIMAL + ADDI A,"0" + HRLM A,(P) + JUMPE Q,.+2 + PUSHJ P,RCNUM + HLRZ T,(P) + JRST TYPE2 + + +SPACES: PUSHJ P,SP1 +SP1: PUSHJ P,SPACE +SPACE: MOVEI T,40 + JRST TYPE2 + + +; ACCUMULATORS USED: Q,T,D + +PWORD: MOVNI Q,6 ;SET CHARACTER COUNT TO SIX +PWORD1: MOVE D,LSTPT ;ENTER HERE WITH Q PRESET +PWORD2: ILDB T,D ;LOAD NEXT CHAR. TO BE OUTPUT + PUSHJ P,TYPE ;OUTPUT CHARACTER + AOJL Q,PWORD2 + POPJ P, + + +;TYPEOUT SUBROUTINE - THE CHARACTER SUPPLIED IN T IS CONVERTED TO ASCII +;AND IS OUTPUT ON THE CONSOLE AND/OR THE SPECIFIED LOADER MAP OUTPUT +;DEVICE + +CRLFLF: PUSHJ P,CRLF +FCRLF: TLO F,FCONSW ;INSURE TTY OUTPUT +CRLF: MOVEI T,15 ;CARRIAGE RETURN LINE FEED + PUSHJ P,TYPE2 + TRCA T,7 ;CR.XOR.7=LF +TYPE: MOVEI T,40(T) ;CONVERT SIXBIT TO ASCII +TYPE2: TLNN N,AUXSWI ;IS THER AN AUXILIARY DEVICE? + JRST TYPE3 ;NO, DONT OUTPUT TO IT + TLON N,AUXSWE ;IS AUX. DEV. ENTERED? + PUSHJ P,IAD2 ;NOPE, DO SO! + SOSG ABUF2 ;SPACE LEFT IN BUFFER? + OUTPUT 2, ;CREATE A NEW BUFFER + IDPB T,ABUF1 ;DEPOSIT CHARACTER + TLNN F,FCONSW ;FORCE OUTPUT TO CONSOLE TOO? + POPJ P, ;NOPE +TYPE3: IFN RPGSW,< + TRNE F,NOTTTY ;IF TTY IS ANOTHER DEVICE + POPJ P, ;DON'T OUTPUT TO IT> + SKIPN BUFO2 ;END OF BUFFER + OUTPUT 3, ;FORCE OUTPUT NOW + IDPB T,BUFO1 ;DEPOSIT CHARACTER + CAIN T,12 ;END OF LINE + OUTPUT 3, ;FORCE AN OUTPUT + POPJ P, + + +SUBTTL SYMBOL PRINT - RADIX 50 + +; ACCUMULATORS USED: D,T + +PRNAME: MOVE T,C ;LOAD SYMBOL + TLZ T,740000 ;ZERO CODE BITS + PUSH P,T + PUSH P,C + MOVEI C,6 + MOVEI D,1 + IDIVI T,50 + JUMPN V,.+2 + IMULI D,50 + SOJN C,.-3 + POP P,C + POP P,T + IMUL T,D + MOVNI D,6 ;LOAD CHAR. COUNT +SPT: IDIVI T,50 ;THE REMAINDER IS THE NEXT CHAR. + HRLM V,(P) ;STORE IN LH. OF PUSHDOWN LIST + AOJGE D,.+2 ;SKIP IF NO CHARS. REMAIN + PUSHJ P,SPT ;RECURSIVE CALL FOR NEXT CHAR. + HLRZ T,(P) ;LOAD FROM LH. OF PUSHDOWN LIST + JUMPE T,TYPE ;BLANK + ADDI T,60-1 + CAILE T,71 + ADDI T,101-72 + CAILE T,132 + SUBI T,134-44 + CAIN T,43 + MOVEI T,56 + JRST TYPE2 + +TAB1: SETZM TABCNT + PUSHJ P,CRLF +TAB: AOS T,TABCNT + CAIN T,5 + JRST TAB1 + TRNE F,TTYFL + JRST SP1 + MOVEI T,11 + JRST TYPE2 + + + + +OTOD: IBP N +OTOD1: IDIVI Q,↑D10 + ADDI Q,20 ;FORM SIXBIT + IDPB Q,N + ADDI A,20 + IDPB A,N + POPJ P, + +DTAB: SIXBIT /JANFEB/ + SIXBIT /MARAPR/ + SIXBIT /MAYJUN/ + SIXBIT /JULAUG/ + SIXBIT /SEPOCT/ + SIXBIT /NOVDEC/ + + + +SUBTTL ERROR MESSAGE PRINT SUBROUTINE + +; FORM OF CALL: + +; JSP A,ERRPT +; SIXBIT /<MESSAGE>/ + +; ACCUMULATORS USED: T,V,C,W + +ERRPT: TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,CRLF ;ROOM AT THE TOP + PUSHJ P,PRQ ;START OFF WITH ? +ERRPT0: PUSH P,Q ;SAVE Q + SKIPA V,ERRPT5 +ERRPT1: PUSHJ P,TYPE + ILDB T,V + CAIN T,"@"-40 + JRST ERRPT4 + CAIN T,"%"-40 + JRST ERRPT9 + CAIN T,"!"-40 + JRST ERRP42 ;JUST RETURN,LEAVE FCONSW ON + CAIE T,"#"-40 + JRST ERRPT1 + SKIPN C,DTIN + JRST ERRPT4 + MOVNI Q,14 + MOVEI W,77 +ERRPT2: TDNE C,W + JRST ERRPT3 + LSH W,6 + AOJL Q,ERRPT2 +ERRPT3: MOVE W,ERRPT6 + PUSHJ P,PWORD1 + SKIPN W,DTIN1 + JRST ERRPT4 + LSH W,-6 + TLO W,160000 + MOVNI Q,4 + PUSHJ P,PWORD1 +ERRPT4: PUSHJ P,CRLF +ERRP41: TLZ F,FCONSW ;ONE ERROR PER CONSOLE +ERRP42: POP P,Q ;***DMN*** FIX FOR ILC MESSAGE + AOJ V, ;PROGRAM BUMMERS BEWARE: + JRST @V ;V HAS AN INDEX OF A + +ERRPT5: POINT 6,0(A) +ERRPT6: SIXBIT / FILE / + + +ERRPT8: TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START WITH ? + CAIGE T,140 ;IS IT A NON-PRINTING CHAR? + CAIL T,40 + JRST ERRP8 + PUSH P,T + MOVEI T,136 ;UP ARROW + PUSHJ P,TYPE2 + POP P,T + TRC T,100 ;CONVERT TO PRINTING CHAR. +ERRP8: PUSHJ P,TYPE2 +ERRPT7: PUSHJ P,SPACE + JRST ERRPT0 + +ERRPT9: MOVEI V,@V + PUSH P,V + ERROR 7,<?ILLEGAL -LOADER@?> + POP P,V + JRST ERRP41 + +;PRINT QUESTION MARK + +PRQ: PUSH P,T ;SAVE + MOVEI T,"?" ;PRINT ? + PUSHJ P,TYPE2 ;... + POP P,T ;RESTORE + POPJ P, ;RETURN + + +SUBTTL INPUT - OUTPUT INTERFACE + +;BINARY INPUT SUBROUTINE - RETURNS A WORD IN W +IFE K,< +WORDPR: PUSHJ P,WORD ;GET FIRST WORD OF PAIR + MOVE C,W ;KEEP IT HANDY> +WORD: SOSGE BUFR2 ;SKIP IF BUFFER NOT EMPTY + JRST WORD2 +WORD1: ILDB W,BUFR1 ;PICK UP 36 BIT WORD + POPJ P, + +WORD2: IN 1, ;GET NEXT BUFFER LOAD + JRST WORD ;DATA OK - CONTINUE LOADING +WORD3: STATZ 1,IODEND ;TEST FOR EOF + JRST EOF ;END OF FILE EXIT + ERROR ,< /INPUT ERROR#/> + JRST LD2 ;GO TO ERROR RETURN + + +SE3: XWD 2,2 ;SYMBOL POINTER INCREMENT +PDLPT: XWD -41,PDLST-1; INITIAL PUSHDOWN POINTER +COMM: SQUOZE 0,.COMM. +LSTPT: POINT 6,W ;CHARACTER POINTER TO W + +IOBKTL==40000 +IOIMPM==400000 +IODERR==200000 +IODTER==100000 +IODEND==20000 + +IOBAD==IODERR!IODTER!IOBKTL!IOIMPM + + + +SUBTTL IMPURE CODE +IFN SEG2SW,< RELOC +LOWCOD: RELOC> +IFN PURESW,<HICODE: +IFN SEG2SW,< PHASE LOWCOD> +IFE SEG2SW,< PHASE 140>> + + +DBUF1: JSP A,ERRPT7 +DBUF: SIXBIT /TI:ME DY-MON-YR @/ + POPJ P, + +;DATA FOR PURE OPEN UUO'S + +IFN SPCHN,< +CHNENT: 0 + SIXBIT .CHN. + 0 + 0 +CHNOUT: 17 + SIXBIT /DSK/ + 0 +> +IFN RPGSW,< +OPEN1: EXP 1 +RPG1: Z + XWD 0,CTLIN +> + +OPEN2: EXP 1 +LD5C1: Z + XWD ABUF,0 + +OPEN3: EXP 14 +ILD1: Z + XWD 0,BUFR + +IFN PURESW,<DEPHASE +CODLN=.-HICODE> + + +SUBTTL DATA STORAGE + +IFN PURESW,< +IFE SEG2SW,<LOC 140> +IFN SEG2SW,<RELOC> +LOWCOD: BLOCK CODLN> + +PDSAV: BLOCK 1 ;SAVED PUSHDOWN POINTER +COMSAV: BLOCK 1 ;LENGTH OF COMMON +MDG: BLOCK 1 ;COUNTER FOR MUL DEF GLOBALS +PDLST: BLOCK 40 + +F.C: BLOCK 1 + BLOCK 1 ;STORE N HERE + BLOCK 1 ;STORE X HERE + BLOCK 1 ;STORE H HERE + BLOCK 1 ;STORE S HERE + BLOCK 1 ;STORE R HERE +B.C: BLOCK 1 + +STADDR: BLOCK 1 ;HOLDS STARTING ADDRESS + +IFN NAMESW,< +PRGNAM: BLOCK 1 ;STORE BINARY FILE NAME-USED TO MAKE SYSTAT MORE MEANINGFUL +> +IFN REENT,< +HIGHX: BLOCK 1 +HIGHR: BLOCK 1 ;HOLD X AND R WHILE LOADING LOW SEG PIECES +LOWX: BLOCK 1 +HILOW: BLOCK 1 ;HIGHEST NON-BLOCK STMT IN LOW SEG +HVAL: BLOCK 1 ;ORG OF HIGH SEG> +HVAL1: BLOCK 1 ;ACTUAL ORG OF HIGH SEG +LOWR: BLOCK 1 ;HOLD X AND R WHILE LOADING HISEG PIECES +IFN KUTSW,<CORSZ: BLOCK 1> +IFN DMNSW,<KORSP: BLOCK 1> +IFN LDAC,<BOTACS: BLOCK 1> +IFN WFWSW,<VARLNG: BLOCK 1 +VARREL: BLOCK 1> +IFN SAILSW,<LIBFLS: BLOCK RELLEN*3 +PRGFLS: BLOCK RELLEN*3> + + +PT1: BLOCK 1 +SVA: BLOCK 1 +IFN RPGSW,< +NONLOD: BLOCK 1 +SVRPG: BLOCK 1 +IFN TEMP,< +TMPFIL: BLOCK 2 +TMPFLG: BLOCK 1> +> +IFN NAMESW,< +CURNAM: BLOCK 1 +> +IFN PP,< +OLDDEV: BLOCK 1 +PPN: BLOCK 1 +PPNE: BLOCK 1 +PPNV: BLOCK 1 +PPNW: BLOCK 1 + > +IFN FAILSW,< +GLBCNT: BLOCK 1 +HDSAV: BLOCK 1 +HEADNM: BLOCK 1 +LFTHSW: BLOCK 1 +OPNUM: BLOCK 1 +POLSW: BLOCK 1 +SVHWD: BLOCK 1 +SVSAT: BLOCK 1 +PPDB: BLOCK PPDL+1 +LINKTB: BLOCK 21 +> +HISTRT: BLOCK 1 ;JOBREL AT START OF LOADING +IFN L,< +LSPXIT: BLOCK 1 +RINITL: BLOCK 1 +OLDJR: BLOCK 1> +IFN SPCHN,< +CHNTAB: BLOCK 1 +BEGOV: BLOCK 1 +CHNACN: BLOCK 1 +CHNACB: BLOCK 1> +TABCNT: BLOCK 1 +LIMBO: BLOCK 1 ;WHERE OLD CHARS. ARE STORED +IFN DIDAL,<LSTBLK: BLOCK 1 ;POINTER TO LAST PROG LOADED> +IFN EXPAND,<ALWCOR: BLOCK 1 ;CORE AVAILABLE TO USER> +IFN ALGSW,<%OWN: BLOCK 1 ;ADDRESS OF ALGOL OWN AREA + OWNLNG: BLOCK 1 ;LENGTH OF OWN BLOCK> +IFN REENT,<SVBRKS: BLOCK 1 ;XWD HIGH,LOW (PROG BREAKS)> + + +SUBTTL BUFFER HEADERS AND HEADER HEADERS + +BUFO: BLOCK 1 ;CONSOLE INPUT HEADER HEADER +BUFO1: BLOCK 1 +BUFO2: BLOCK 1 + +BUFI: BLOCK 1 ;CONSOLE OUTPUT HEADER HEADER +BUFI1: BLOCK 1 +BUFI2: BLOCK 1 + +ABUF: BLOCK 1 ;AUXILIARY OUTPUT HEADER HEADER +ABUF1: BLOCK 1 +ABUF2: BLOCK 1 + +BUFR: BLOCK 1 ;BINARY INPUT HEADER HEADER +BUFR1: BLOCK 1 +BUFR2: BLOCK 1 + +DTIN: BLOCK 1 ;DECTAPE INPUT BLOCK +DTIN1: BLOCK 3 + +DTOUT: BLOCK 1 ;DECTAPE OUTPUT BLOCK +DTOUT1: BLOCK 3 + + TTYL==52 ;TWO TTY BUFFERS +IFE LNSSW,< +IFE K,< BUFL==406 ;TWO DTA BUFFERS FOR LOAD> +IFN K,< BUFL==203 ;ONE DTA BUFFER FOR LOAD> + ABUFL==203 ;ONE DTA BUFFER FOR AUX DEV> +IFN LNSSW,< +IFE K,<BUFL==4*203+1> +IFN K,<BUFL==203+1> +ABUFL==2*203+1> + +TTY1: BLOCK TTYL ;TTY BUFFER AREA +BUF1: BLOCK BUFL ;LOAD BUFFER AREA +AUX: BLOCK ABUFL ;AUX BUFFER AREA + + +IFN RPGSW,< +CTLIN: BLOCK 3 +CTLNAM: BLOCK 3 +CTLBUF: BLOCK 203+1 +> + + +SUBTTL FORTRAN DATA STORAGE + +IFN STANSW,<PATCH: BLOCK 20 ;STANFORD HAS SEMI-INFINITE CORE> + +IFE K,< +TOPTAB: BLOCK 1 ;TOP OF TABLES +CTAB: BLOCK 1; COMMON +ATAB: BLOCK 1; ARRAYS +STAB: BLOCK 1; SCALARS +GSTAB: BLOCK 1; GLOBAL SUBPROGS +AOTAB: BLOCK 1; OFFSET ARRAYS +CCON: BLOCK 1; CONSTANTS +PTEMP: BLOCK 1; PERMANENT TEMPS +TTEMP: BLOCK 1; TEMPORARY TEMPS +COMBAS: BLOCK 1; BASE OF COMMON +LLC: BLOCK 1; PROGRAM ORIGIN +BITP: BLOCK 1; BIT POINTER +BITC: BLOCK 1; BIT COUNT +PLTP: BLOCK 1; PROGRAMMER LABEL TABLE +MLTP: BLOCK 1; MADE LABEL TABLE +SDS: BLOCK 1 ;START OF DATA STATEMENTS +SDSTP: BLOCK 1 ;START OF DATA STATEMENTS POINTER +BLKSIZ: BLOCK 1; BLOCK SIZE +MODIF: BLOCK 1; ADDRESS MODIFICATION +1 +SVFORH: BLOCK 1 ;SAVE H WHILE LOADING F4 PROGRAMS + +IOWDPP: BLOCK 2> +SBRNAM: BLOCK 1 + +IFE K,< +CT1: BLOCK 1 ;TEMP FOR C +LTC: BLOCK 1 +ITC: BLOCK 1 +ENC: BLOCK 1 +WCNT: BLOCK 1 ;DATA WORD COUNT +RCNT: BLOCK 1 ;DATA REPEAT COUNT + +LTCTEM: BLOCK 1 ;TEMP FOR LTC +DWCT: BLOCK 1 ;DATA WORD COUNT> + + VAR ;DUMP VARIABLES +IFN PURESW,<RELOC> + + + +SUBTTL REMAP UUO +IFN REENT,< +IFN PURESW,<HHIGO: PHASE BUF1 ;DON'T NEED BUF1 NOW> + +HIGO: CORE V, ;CORE UUO + JFCL ;NEVER FAILS +HINOGO: MOVE D,HVAL + CAMG D,HVAL1 ;ANYTHING IN HI-SEG + JRST 0 ;NO + MOVE V,HISTRT ;NOW REMAP THE HISEG. + REMAP V, ;REMAP UUO. + JRST HIGET ;FATAL ERROR. +HIRET: JRST 0 ;EXECUTE CODE IN ACC'S + +HIGET: HRRZI V,SEGBLK ;DATA FOR + GETSEG V, ;GETSEG UUO + SKIPA ;CANNOT CONTINUE NO HISEG + JRST REMPFL ;REGAINED LOADER HISEG + ;GO PRINT MESSAGE + TTCALL 3,SEGMES ;PRINT SEGMES + EXIT ;AND DIE + +SEGBLK: SIXBIT /SYS/ + SIXBIT /LOADER/ + EXP 0,0,0,0 + + +SEGMES: ASCIZ /?CANNOT FIND LOADER.SHR +/ + +IFN PURESW,<HIGONE: DEPHASE>> + + +SUBTTL LISP LOADER + +;END HERE IF 1K LOADER REQUESTED. +IFN K,<IFE L,<END BEG> +IFE L,< XLIST > + +IFN L,<LODMAK: MOVEI A,LODMAK + MOVEM A,137 ;SET UP TO SAVE THE LISP LOADER + INIT 17 + SIXBIT /DSK/ + 0 + HALT + ENTER LMFILE + HALT + MOVNI A,LD + HRLZS A + ADDM A,LMLST ;BECAUSE MACRO WON'T TAKE POLISH FIXUPS + OUTPUT LMLST + STATZ 740000 + HALT + RELEASE + EXIT +LMFILE: SIXBIT /LISP/ + SIXBIT /LOD/ + 0 + 0 +LMLST: IOWD LODMAK+1,137 + 0 + END LODMAK>> + + LIST + + +SUBTTL FORTRAN FOUR LOADER + +F4LD: TLNE F,SKIPSW!FULLSW ;ARE WE IN SKIP MODE + JRST REJECT ;YES,DON'T LOAD ANY OF THIS + MOVEI W,-2(S); GENERATE TABLES + CAIG W,(H) ;NEED TO EXPAND? +IFN EXPAND,<PUSHJ P,[PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM3 + POPJ P,]> +IFE EXPAND,< TLO F,FULLSW> +;IFN REENT,<TRO F,F4FL!VFLG ;RE-ENTRANT LIB40> + TLO N,F4SW; SET FORTRAN FOUR FLAG + HRRZ V,R; SET PROG BREAK INTO V + MOVEM V,LLC; SAVE FIRST WORD ADDRESS + HRRZM W,MLTP; MADE LABELS + HRRZM W,PLTP; PROGRAMMER LABELS + ADD W,[POINT 1,1]; GENERATE BIT-BYTE POINTER + MOVEM W,BITP + MOVEM W,SDSTP; FIRST DATA STATEMENT + AOS SDSTP; + HRREI W,-↑D36; BITS PER WORDUM + MOVEM W,BITC; BIT COUNT + PUSHJ P,BITWX ;MAKE SURE OF ENOUGH SPACE + MOVE W,[JRST ALLOVE] ;LAST DATA STATEMENT + MOVEM W,(S) + +TEXTR: PUSHJ P,WORD; TEXT BY DEFAULT + HLRZ C,W + CAIN C,-1 + JRST HEADER; HEADER + MOVEI C,1; RELOCATABLE + TLNN F,FULLSW!SKIPSW ;DON'T LOAD IF EITHER SET + PUSHJ P,BITW; SHOVE AND STORE + JRST TEXTR; LOOP FOR NEXT WORD + +ABS: SOSG BLKSIZ; MORE TO GET + JRST TEXTR; NOPE +ABSI: PUSHJ P,WORD; + MOVEI C,0; NON-RELOCATABLE + TLNN F,FULLSW!SKIPSW ;DON'T LOAD IF EITHER SET + PUSHJ P,BITW; TYPE 0 + JRST ABS + + +SUBTTL PROCESS TABLE ENTRIES + +MDLB: TLNE F,FULLSW+SKIPSW; MADE LABEL PROC + JRST GLOBDF; NO ROOM AT THE IN + HLRZ C,MLTP; GET PRESENT SIZE + CAMGE C,BLKSIZ; IF NEW SIZE BIGGER, STR-R-RETCH + PUSHJ P,SMLT + HRRZ C,MLTP; GET BASE +MLPLC: ADD C,BLKSIZ; MAKE INDEX + TLNN F,FULLSW+SKIPSW; DONT LOAD + HRRZM V,(C); PUT AWAY DEFINITION +GLOBDF: PUSHJ P,WORD + TLNE F,FULLSW+SKIPSW ;SKIPPING THIS PROG? + JRST TEXTR ;YES, DON'T DEFINE + MOVEI C,(V); AND LOC + EXCH W,C + PUSHJ P,SYMXX; PUT IN DDT-SYMBOL TABLE + PUSHJ P,BITWX + JRST TEXTR + +PLB: TLNE F,FULLSW+SKIPSW + JRST GLOBDF + HLRZ C,PLTP; PRESENT SIZE + CAMGE C,BLKSIZ + PUSHJ P,SPLT + HRRZ C,PLTP + JRST MLPLC + + +SUBTTL STORE WORD AND SET BIT TABLE + +BITW: MOVEM W,@X; STORE AWAY OFFSET + IDPB C,BITP; STORE BIT + AOSGE BITC; STEP BIT COUNT + AOJA V,BITWX; SOME MORE ROOM LEFT + HRREI C,-↑D36; RESET COUNT + MOVEM C,BITC + SOS PLTP + SOS BITP; ALL UPDATED +IFE EXPAND,<HRL C,MLTP + SOS MLTP + HRR C,MLTP> +IFN EXPAND,<HRRZ C,MLTP; TO ADDRESS + SUBI C,1 + CAIG C,(H) + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADDI C,2000 + JRST POPJM2] + SOS MLTP + HRLI C,1(C)> + HRRZ T,SDSTP; GET DATA POINTER + BLT C,-1(T); MOVE DOWN LISTS + AOJ V,; STEP LOADER LOCATION +BITWX: IFN REENT,< + TLNE F,HIPROG + JRST FORTHI> + CAIGE H,@X + MOVEI H,@X ;KEEP H SET RIGHT FOR HISEG STUFF +BITWX2: HRRZ T,MLTP + CAIG T,(H); OVERFLOW CHECK +IFE EXPAND,<TLO F,FULLSW> +IFN EXPAND,<PUSHJ P, [PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM3 + POPJ P,]> + POPJ P,; + +SMLT: SUB C,BLKSIZ; STRETCH + MOVS W,MLTP ;LEFT HALF HAS OLD BASE + ADD C,MLTP ;RIGHT HALF HAS NEW BASE +IFN EXPAND,< HRRZS C ;GET RID OF COUNT + CAIG C,(H) + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADD W,[XWD 2000,0] + ADDI C,2000 + JRST POPJM2]> + HRRM C,MLTP ;PUT IN NEW MLTP + HLL C,W ;FORM BLT POINTER + ADDI W,(C) ;LAST ENTRY OF MLTP + HRL W,BLKSIZ ;NEW SIZE OF MLTP + HLLM W,MLTP ;... +SLTC: BLT C,0(W); MOVE DOWN (UP?) + POPJ P,; + +SPLT: SUB C,BLKSIZ + MOVS W,MLTP; + ADDM C,PLTP + ADD C,MLTP +IFN EXPAND,< HRRZS C + CAIG C,(H) + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADD W,[XWD 2000,0] + ADDI C,2000 + JRST POPJM2]> + HRRM C,MLTP ;PUT IN NEW MLTP + HLL C,W + HLRZ W,PLTP ;OLD SIZE OF PL TABLE + ADD W,PLTP ;NEW BASE OF PL TABLE + HRL W,BLKSIZ ;NEW SIZE OF PL TABLE + HLLM W,PLTP ;INTO POINTER + JRST SLTC + + +IFN REENT,< +FORTHI: HRRZ T,JOBREL ;CHECK FOR CORE OVERFLOW + CAIGE T,@X + PUSHJ P,[PUSHJ P,HIEXP + TLOA F,FULLSW + JRST POPJM3 ;CHECK AGAIN + POPJ P,] + JRST BITWX2> + + +SUBTTL PROCESS END CODE WORD + +ENDS: PUSHJ P,WORD; GET STARTING ADDRESS + JUMPE W,ENDS1; NOT MAIN + ADDI W,(R); RELOCATION OFFSET + TLNE N,ISAFLG; IGNORE STARTING ADDRESS + JRST ENDS1 + HRRZM W,STADDR ;STORE STARTING ADDRESS +IFN NAMESW,<MOVE W,1(N) ;SET UP NAME + PUSHJ P,LDNAM + MOVE W,DTIN + MOVEM W,PRGNAM> +ENDS1: PUSHJ P,WORDPR ;DATA STORE SIZE + HRRZM C,PTEMP ;NUMBER OF PERMANENT TEMPS + MOVEM V,CCON; START OF CONSTANTS AREA + JUMPE W,E1; NULL + MOVEM W,BLKSIZ ;SAVE COUNT + MOVEI W,0(V) ;DEFINE CONST. + MOVE C,CNR50 ;... + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMPT ;... + PUSHJ P,GSWD ;STORE CONSTANT TABLE +E1: MOVEI W,0(V); GET LOADER LOC + EXCH W,PTEMP; STORE INTO PERM TEMP POINTER + ADD W,PTEMP; FORM TEMP TEMP ADDRESS + MOVEM W,TTEMP; POINTER + MOVEM V,GSTAB; STORE LOADER LOC IN GLOBSUB + MOVEM H,SVFORH + MOVE C,TTR50 ;DEFINE %TEMP. + TLNE F,SKIPSW!FULLSW + JRST E1A + PUSHJ P,SYMPT ;... + MOVE C,PTR50 ;DEFINE (IF EXTANT) TEMP. + MOVEI W,0(V) ;... + CAME W,TTEMP ;ANY PERM TEMPS? + PUSHJ P,SYMPT ;YES, DEFINE +E1A: PUSHJ P,WORD; NUMBER OF GLOBSUBS + JUMPE W,E11 + MOVEM W,BLKSIZ ;SIZE OF GLOBSUB + PUSHJ P,GSWD ;STORE GLOBSUB TABLE +E11: MOVEM V,STAB; SCALARS + PUSHJ P,WORD; HOW MANY? + JUMPE W,E21; NONE + PUSHJ P,GSWDPR ;STORE SCALAR TABLE +E21: MOVEM V,ATAB; ARRAY POINTER + PUSHJ P,WORD; COMMENTS FOR SCALARS APPLY + JUMPE W,E31 + PUSHJ P,GSWDPR ;STORE ARRAY TABLE +E31: MOVEM V,AOTAB; ARRAYS OFFSET + PUSHJ P,WORD; SAME COMMENTS AS ABOVE + JUMPE W,E41 + PUSHJ P,GSWDPR ;STORE ARRAY OFFSET TABLE +E41: PUSHJ P,WORD; TEMP, SCALAR, ARRAY SIZE + TLNE F,FULLSW!SKIPSW ;SKIPPING THIS PROG? + MOVEI W,0 ;DON'T ACCEPT GLOB SUBPROG REQUESTS + MOVEM V,CTAB; SETUP COMMON TABLE POINTER + ADD W,GSTAB; GLOBAL SUBPROG BASE + MOVEM W,COMBAS; START OF COMMON + PUSHJ P,WORD; COMMON BLOCK SIZE + HRRZM W,BLKSIZ + JUMPE W,PASS2; NO COMMON +COMTOP: PUSHJ P,WORDPR ;GET A COMMON PAIR + TLNE F,SKIPSW!FULLSW ;IF SKIPPING + JRST COMCO1 ;DON'T USE + PUSHJ P,SDEF; SEARCH + JRST COMYES; ALREADY THERE + HRLS W + HRR W,COMBAS; PICK UP THIS COMMON LOC + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMXX; DEFINE IT + MOVS W,W; SWAP HALFS + ADD W,COMBAS; UPDATE COMMON LOC + HRRM W,COMBAS; OLD BASE PLUS NEW SIZE + HLRZS W; RETURN ADDRESS + TLZ C,400000 + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMXX +COMCOM: PUSHJ P,CWSTWX ;STORE A WORD PAIR +COMCO1: SOS BLKSIZ + SOSLE BLKSIZ + JRST COMTOP + JRST PASS2 + +COMYES: HLRZ C,2(A); PICK UP DEFINITION + CAMLE W,C; CHECK SIZE + JRST ILC; ILLEGAL COMMON + MOVE C,1(A); NAME + HRRZ W,2(A); BASE + JRST COMCOM + + + +PRSTWX: PUSHJ P,WORDPR ;GET A WORD PAIR +CWSTWX: EXCH C,W ;SPACE TO STORE FIRST WORD OF PAIR? + PUSHJ P,WSTWX ;... + EXCH C,W ;THERE WAS; IT'S STORED +WSTWX: TLNE F,FULLSW!SKIPSW ;SPACE FOR ANOTHER WORD? + POPJ P, ;NOPE, RETURN + MOVEM W,@X ;YES, STORE IT. + AOJA V,BITWX ;TELL THE TABLES ABOUT IT; THEN RETURN + + +GSWD: PUSHJ P,WORD ;GET WORD FROM TABLE + PUSHJ P,WSTWX ;STASH IT + SOSE BLKSIZ ;FINISHED? + JRST GSWD ;NOPE, LOOP + POPJ P, ;TRA 1,4 + +GSWDPR: MOVEM W,BLKSIZ ;KEEP COUNT +GSWDP1: PUSHJ P,PRSTWX ;GET AND STASH A PAIR + SOS BLKSIZ ;FINISHED? + SOSLE BLKSIZ ;... + JRST GSWDP1 ;NOPE, LOOP + POPJ P, ;TRA 1,4 + + +SUBTTL BEGIN HERE PASS2 TEXT PROCESSING + +PASS2: ADDI V,(X) +IFN REENT,<TLNE F,HIPROG + HRRZ V,H> + MOVEM V,TOPTAB ;SAVE FOR OVERLAP CHECKING + TLNE F,FULLSW+SKIPSW; ABORT? + JRST ALLOVE; YES + MOVE V,LLC ;PICK UP PROGRAM ORIGIN + CAML V,CCON ;IS THIS A PROGRAM? + JRST FBLKD ;NO, GO LOOK FOR FIRST BLK DATA + TLOE N,PGM1 ;YES, IS THIS FIRST F4 PROG? + JRST NOPRG ;NO + HRR W,COMBAS ;YES, PLACE PROG BREAK IN LH +IFE L,<IFN REENT,<TLNN F,HIPROG ;DON'T BOTHER IF IN HISEG, CHAIN NOT SMART ENOUGH> + HRLM W,JOBCHN(X) ;FOR CHAIN> +NOPRG: HRRZ W,PLTP; GET PROG TABLE BASE + HLRZ C,PLTP; AND SIZE + ADD W,C; COMPUTE END OF PROG TABLE + ADD W,[POINT 1,1]; AND BEGINNING OF BIT TABLE + EXCH W,BITP; SWAP POINTERS +PASS2B: ILDB C,BITP; GET A BIT + JUMPE C,PASS2C; NO PASS2 PROCESSING + PUSHJ P,PROC; PROCESS A TAG + JRST PASS2B; MORE TO COME + JRST ENDTP; + +PROC: LDB C,[POINT 6,@X,23]; TAG + SETZM MODIF; ZERO TO ADDRESS MODIFIER + TRZE C,40 + AOS MODIF + MOVEI W,TABDIS; HEAD OF TABLE + HRLI W,-TABLNG ;SET UP FOR AOBJN + HLRZ T,(W); GET ENTRY + CAME T,C; CHECK + AOBJN W,.-2 + JUMPGE W,LOAD4A ;RAN OUT OF ENTRIES + HRRZ W,(W); GET DISPATCH + LDB C,[POINT 12,@X,35] + JRST (W); DISPATCH + + +PASS2C: PUSHJ P,PASS2A + JRST PASS2B + JRST ENDTP + + + +TABDIS: XWD 11,PCONS; CONSTANTS + XWD 06,PGS; GLOBAL SUBPROGRAMS + XWD 20,PST; SCALARS + XWD 22,PAT; ARRAYS + XWD 01,PATO; ARRAYS OFFSET + XWD 00,PPLT; PROGRAMMER LABELS + XWD 31,PMLT; MADE LABESL + XWD 26,PPT; PERMANENT TEMPORARYS + XWD 27,PTT; TEMPORARY TEMPORARYS +TABLNG==.-TABDIS +;DISPATCH ON A HEADER + +HEADER: CAMN W,[EXP -2]; END OF PASS ONE + JRST ENDS + LDB C,[POINT 12,W,35]; GET SIZE + MOVEM C,BLKSIZ + ANDI W,770000 + JUMPE W,PLB; PROGRAMMER LABEL + CAIN W,500000; ABSOLUTE BLOCK + JRST ABSI; + CAIN W,310000; MADE LABEL + JRST MDLB; MADE LABEL + CAIN W,600000 + JRST GLOBDF + CAIN W,700000; DATA STATEMENT + JRST DATAS + JRST LOAD4A; DATA STATEMENTS WILL GO HERE + +TTR50: RADIX50 10,%TEMP. +PTR50: RADIX50 10,TEMP. +CNR50: RADIX50 10,CONST. + + +SUBTTL ROUTINES TO PROCESS POINTERS + +PCONS: ADD C,CCON; GENERATE CONSTANT ADDRESS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PSTA: PUSHJ P,SWAPSY ;NON-COMMON SCALARS AND ARRAYS + ADDI C,(R); RELOCATE +PCOM1: PUSHJ P,SYDEF ;... +PCOMX: ADD C,MODIF ;ADDR RELOC FOR DP + HRRM C,@X; REPLACE ADDRESS +PASS2A: AOJ V,; STEP READOUT POINTER + CAML V,CCON ;END OF PROCESSABLES? +CPOPJ1: AOS (P); SKIP + POPJ P,; + +PAT: SKIPA W,ATAB ;ARRAY TABLE BASE +PST: MOVE W,STAB ;SCALAR TABLE BASE + ROT C,1 ;SCALE BY 2 + ADD C,W ;ADD IN TABLE BASE + ADDI C,-2(X); TABLE ENTRY + HLRZ W,(C); CHECK FOR COMMON + JUMPE W,PSTA; NO COMMON + PUSHJ P,COMDID ;PROCESS COMMON + JRST PCOM1 + +COMDID: LSH W,1 ;PROCESS COMMON TABLE ENTRIES + ADD W,CTAB; COMMON TAG + ADDI W,-2(X); OFFSET + PUSHJ P,SWAPSY; GET SYMBOL AND SET TO DEFINED + ADD C,1(W); BASE OF COMMON + POPJ P, ;RETURN + +PATO: ROT C,1 + ADD C,AOTAB; ARRAY OFFSET + ADDI C,-2(X); LOADER OFFSET + MOVEM C,CT1; SAVE CURRENT POINTER + HRRZ C,1(C); PICK UP REFERENCE POINTER + ANDI C,7777; MASK TO ADDRESS + ROT C,1; ALWAYS A ARRAY + ADDI C,-2(X) + ADD C,ATAB + HLRZ W,(C); COMMON CHECK + JUMPE W,NCO + PUSHJ P,COMDID ;PROCESS COMMON + PUSHJ P,SYDEF + MOVE C,CT1 + HRRE C,(C) + ADD C,1(W) + JRST PCOMX + + +NCO: PUSHJ P,SWAPSY; + ADDI C,(R) ;DEFINE SYMBOL IN TRUE LOC + PUSHJ P,SYDEF ;... + MOVE C,CT1 + HRRZ C,(C) ;OFFSET ADDRESS PICKUP + ADDI C,(R) ;WHERE IT WILL BE + JRST PCOMX ;STASH ADDR AWAY + +PTT: ADD C,TTEMP; TEMPORARY TEMPS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PPT: ADD C,PTEMP; PERMANENT TEMPS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PGS: ADD C,GSTAB; GLOBSUBS + ADDI C,-1(X); OFFSET + MOVE C,(C) + TLC C,640000; MAKE A REQUEST + PUSHJ P,TBLCHK ;CHECK FOR OVERLAP + MOVEI W,(V); THIS LOC + HLRM W,@X; ZERO RIGHT HALF + PUSHJ P,SYMXX + JRST PASS2A + +SYDEF: TLNE N,SYDAT ;SYMBOL WANTS DEFININITION? + POPJ P, ;NO, GO AWAY + PUSH P,C ;SAVE THE WORLD + PUSH P,W + PUSHJ P,TBLCHK ;CHECK FOR OVERLAP + MOVE W,C + SKIPE C,T ;PICKUP VALUE + PUSHJ P,SYMXX + POP P,W + POP P,C + POPJ P,; + +PMLT: ADD C,MLTP + JRST .+2 +PPLT: ADD C,PLTP + HRRZ C,(C) + JRST PCOMX + +SYMXX: PUSH P,V + PUSHJ P,SYMPT + POP P,V +IFE REENT,<POPJ P,> +IFN REENT,<JRST RESTRX> + + + +SWAPSY: MOVEI T,0; SET TO EXCHANGE DEFS + EXCH T,1(C); GET NAME + HRRZ C,(C) ;GET VALUE + POPJ P, +TBLCHK: HRRZ W,MLTP ;GETT TOP OV TABLES + SUBI W,2 + CAMG W,TOPTAB ;WILL IT OVERLAP +IFE EXPAND,<TLO F,FULLSW> +IFN EXPAND,<JRST [PUSHJ P,XPAND + TLOA F,FULLSW + JRST TBLCHK + POPJ P,]> + POPJ P, + + +SUBTTL END OF PASS2 + +ALLOVE: TLZ N,F4SW ;END OF F4 PROG + HRRZ V,SDSTP ;GET READY TO ZERO OUT DATA STMTS + SETZM (V) ;AT LEAST ONE THERE + CAIL V,(S) ;IS THERE MORE THAN ONE?? + JRST NOMODS ;NO + HRLS V + ADDI V,1 ;SET UP BLT + BLT V,(S) ;ZERO OUT ALL OF IT +NOMODS: MOVE H,SVFORH + TLNE F,FULLSW!SKIPSW + JRST HIGH3A + HRR R,COMBAS ;TOP OF THE DATA + CAMG H,SDS ;HIGHEST LOC GREATER THAN DATA STATEMENTS? + JRST HIGH3A ;NO, RETURN + ADDI H,1(S) ;YES, SET UP MEANINGFUL ERROR COMMENT + SUB H,SDS ;... + TLO F,FULLSW ;INDICATE OVERFLO +HIGH3A: IFN REENT,<SETZ W, ;CAUSES TROUBLE OTHERWISE + TLZE F,HIPROG + JRST HIGHN1 + HRRZ V,GSTAB + MOVEI V,@X + CAMLE V,HILOW + MOVEM V,HILOW> + HRRZ C,R + JRST HIGH31 ;RETURN + +DATAS: TLNE F,FULLSW+SKIPSW + JRST DAX + MOVEI C,(S) ;ADDR OF WORD UNDER SYMBOL TABLE + MOVN W,BLKSIZ ;HOW FAR DOWN TO BLT + ADDM W,PLTP ;UPDATE TABLE POINTERS + ADDM W,BITP ;... + ADDM W,SDSTP ;... + ADD C,W ;RH(C):= WHEN TO STOP BLT + HRL C,MLTP ;SOURCE OF BLTED DATA + ADD W,MLTP ;UPDATE, GET DESTINATION OF BLT DATA +IFN EXPAND,< HRRZS W ;GET RID OF LEFT HALF + CAIG W,(H) + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADDI W,2000 + ADD C,[XWD 2000,2000] + JRST POPJM2]> + HRRM W,MLTP ;NO SET THIS SO EXTRA CORE NOT ZEROED + HLL W,C ;FORM BLT POINTER + BLT W,-1(C) ;MOVE TABLES DOWN (BUT NOT JRST ALLOVE) + PUSHJ P,BITWX +DAX: PUSHJ P,WORD; READ ONE WORD + TLNN F,FULLSW+SKIPSW + MOVEM W,(C) + SOSLE BLKSIZ ;COUNT OF DATA SEQUENCE SIZE + AOJA C,DAX ;INCREMENT DATA SEQUENCE DEPOSIT LOC + JRST TEXTR; DONE + + +FBLKD: TLOE N,BLKD1 ;IS THIS FIRST BLOCK DATA? + JRST ENDTP ;NO + HRR V,COMBAS ;PLACE PROG BREAK IN RH FOR +IFE L,<IFN REENT,< TLNN F,HIPROG> + HRRM V,JOBCHN(X) ;CHAIN> +ENDTP: TLNE F,FULLSW+SKIPSW + JRST ALLOVE + HRR V,GSTAB +ENDTP0: CAML V,STAB; ANY MORE GLOBSUBS + JRST ENDTP2; NO + MOVE C,@X; GET SUBPROG NAME + PUSHJ P,SREQ; IS IT ALLREADY REQUESTED + AOJA V,ENDTP0; YES + PUSHJ P,SDEF; OR DEFINED + AOJA V,ENDTP0; YES + PUSHJ P,TBLCHK + MOVEI W,0 ;PREPARE DUMMY LINK + TLNN F,FULLSW+SKIPSW ;ABORT + PUSHJ P,SYM3X; PUT IN DUMMY REQUEST + PUSHJ P,BITWX; OVERLAP CHECK + AOJA V,ENDTP0 +ENDTP2: SETZM PT1 +ENDTPW: HRRZ V,SDSTP +IFN EXPAND,<IFN REENT,<TLNE F,HIPROG + JRST ENDTPI> + SUBI V,(X) + CAMG V,COMBAS + JRST [SUB V,COMBAS + MOVNS V + PUSHJ P,XPAND9 + TLO F,FULLSW + JRST .+1] +ENDTPH: HRR V,SDSTP> + HRRZM V,SDS ;DATA STATEMENT LOC +ENDTP1: SUBI V,(X); COMPENSATE FOR OFFSET + MOVE W,@X; GET WORD + TLNE W,-1; NO LEFT HALF IMPLIES COUNT + JRST DODON; DATA DONE + ADD W,[MOVEI W,3] + ADDI W,@X + EXCH W,@X + AOJ V, + ADD W,@X; ITEMS COUNT + MOVEM W,ITC + MOVE W,[MOVEM W,LTC] + MOVEM W,@X; SETUP FOR DATA EXECUTION + AOJ V, + MOVSI W,(MOVEI W,0) + EXCH W,@X + MOVEM W,ENC; END COUNT + AOJ V, + MOVEI W,@X + ADDM W,ITC +LOOP: MOVE W,@X + HLRZ T,W; LEFT HALF INST. + ANDI T,777000 + CAIN T,254000 ;JRST? + JRST WRAP ;END OF DATA + CAIN T,260000 ;PUSHJ? + JRST PJTABL(W) ;DISPATCH VIA TABLE + CAIN T,200000; MOVE? + AOJA V,INNER + CAIN T,270000; ADD? + JRST ADDOP + CAIN T,221000; IMULI? + AOJA V,LOOP + CAIE T,220000; IMUL? + JRST LOAD4A; NOTA +INNER: HRRZ T,@X; GET ADDRESS + TRZE T,770000; ZERO TAG? + SOJA T,CONPOL; NO, CONSTANT POOL + JUMPE T,FORCNF + SUB T,PT1; SUBTRACT INDUCTION NUMBER + ASH T,1 + SUBI T,1 + HRRM T,@X + HLRZ T,@X + ADDI T,P + HRLM T,@X + AOJA V,LOOP +IFN EXPAND,<IFN REENT,<ENDTPI: HRRZ V,COMBAS + MOVEI V,@X + CAMLE V,JOBREL + JRST [PUSHJ P,HIEXP + TLOA F,FULLSW + JRST ENDTPI + JRST ENDTPH] + JRST ENDTPH>> +FORCNF: ERROR ,</FORTRAN CONFUSED ABOUT DATA STATEMENTS#/> + JRST LD2 + + +CONPOL: ADD T,ITC; CONSTANT BASE + HRRM T,@X + AOJA V,LOOP + +ADDOP: HRRZ T,@X + TRZE T,770000 + SOJA T,CONPOL +SKIPIN: AOJA V,LOOP + +PJTABL: JRST DWFS ;PUSHJ 17,0 + AOSA PT1 ;INCREMENT DO COUNT + SOSA PT1; DECREMENT DO COUNT + SKIPA W,[EXP DOINT.] + MOVEI W,DOEND. + HRRM W,@X + AOJA V,SKIPIN ;SKIP A WORD + +DWFS: MOVEI W,DWFS. + HRRM W,@X + AOJ V, + TLO N,SYDAT + PUSHJ P,PROC; PROCESS THE TAG + JRST LOAD4A ;DATA STATEMENT BELOW CODE TOP + JRST LOOP ;PROPER RETURN + +DOINT.: POP P,V; GET ADDRESS OF INITIAL VALUE + PUSH P,(V); STORE INDUCTION VARIABLE + AOJ V, + PUSH P,V; INITIAL ADDRESS + JRST (V) + +DOEND.: HLRE T,@(P) ;RETAIN SIGN OF INCREMENT + ADDM T,-2(P); INCREMENT + HRRZ T,@(P); GET FINAL VALUE + SUB T,-2(P) ;FINAL - CURRENT + IMUL T,@(P) ;INCLUDE SIGN OF INCREMENT + JUMPL T,DODONE ;SIGN IS ONLY IMPORTANT THING + POP P,(P); BACK UP POINTER + JRST @(P) + + +DODONE: POP P,-1(P); BACK UP ADDRESS + POP P,-1(P) + JRST CPOPJ1 ;RETURN + +WRAP: MOVE W,ENC; NUMBER OF CONSTANTS + ADD W,ITC; CONSTANT BASE + MOVEI C,(W); CHAIN + HRRM C,@X + MOVEI V,(W); READY TO GO + JRST ENDTP1 + +DODON: TLZ N,RCF!SYDAT!DZER ;DATA STATEMENT FLAGS + MOVE W,PTEMP ;TOP OF PROG + ADDI W,(X) ;+OFFSET + HRRZ C,SDS +IFE EXPAND,<SUBI C,(X) ;CHECK FOR ROOM + CAMGE C,COMBAS ;IS IT THERE + TLO F,FULLSW ;NO (DONE EARLIER IF EXPAND) + HRRZ C,SDS> + SUBI C,1 ;GET ONE LESS (TOP LOCATION TO ZERO) +IFN REENT,<TLNE F,HIPROG + MOVE C,JOBREL> +SECZER: CAMLE W,C ;ANY DATA TO ZERO? + JRST @SDS ;NO, DO DATA STATEMENTS + ;FULLSW IS ON IF COMBAS GT. SDS + TLNN F,FULLSW+SKIPSW ;SHOULD WE ZERO? + SETZM (W) ;YES, DO SO + TLON N,DZER ;GO BACK FOR MORE? + AOJA W,SECZER ;YES, PLEASE + HRLI W,-1(W) ;SET UP BLT POINTER TO ZERO DATA + TLNN F,FULLSW+SKIPSW ;SHOULD WE ZERO? + BLT W,(C) ;YES, DO SO + JRST @SDS ;GO DO DATA STATEMENTS + +DATAOV: ERROR 0,</DATA STATEMENT OVERFLOW#/> + JRST LD2 + + +DREAD: TLNE N,RCF; NEW REPEAT COUNT NEEDED + JRST FETCH; NO + MOVE W,LTC + MOVEM W,LTCTEM + MOVE W,@LTC; GET A WORD + HLRZM W,RCNT; SET REPEAT COUNT + HRRZM W,WCNT; SET WORD COUNT + POP W,(W); SUBTRACT ONE FROM BOTH HALFS + HLLM W,@LTC; DECREMENT REPEAT COUNT + AOS W,LTC; STEP READOUT + TLO N,RCF +FETCH: MOVE W,@LTC + AOS LTC + SOSE WCNT + POPJ P,; + SOSN RCNT + JRST DOFF. + MOVE V,LTCTEM; RESTORE READOUT + MOVEM V,LTC +DOFF.: TLZ N,RCF; RESET DATA REPEAT FLAG + POPJ P,; + +DWFS.: MOVE T,(P) + AOS (P) + MOVE T,(T); GET ADDRESS + HLRZM T,DWCT; DATA WORD COUNT + HRRZS T + ADDI T,(W); OFFSET +IFN REENT,<HRRZS T ;CLEAR LEFT HALF INCASE OF CARRY + CAML T,HVAL1 + JRST [ADD T,HIGHX + HRRZS T ;MUST GET RID OF LEFT HALF + CAMLE T,JOBREL + JRST DATAOV ;IN CASE FORTRAN GOOFS ON LIMITS + JRST DWFS.1] + ADD T,LOWX + HRRZS T> +IFE REENT,<ADDI T,(X)> + CAML T,SDS + JRST DATAOV +DWFS.1: PUSHJ P,DREAD ;GET A DATA WORD + HRRZS T +IFN REENT,<CAMG T,JOBREL ;JUST TO MAKE SURE> + CAMN T,SDS + JRST DATAOV + TLNN F,FULLSW+SKIPSW ;LOAD THE NEXT DATA ITEM? + MOVEM W,(T) ;YES, STORE IT + SOSE W,DWCT; STEP DOWN AND TEST + AOJA T,DWFS.1 ;ONE MORE TIME, MOZART BABY! + POPJ P, + + +SUBTTL ROUTINE TO SKIP FORTRAN OUTPUT + +;SUBSECTION OF THE ROUTINE TO HANDLE OUTPUT FROM THE +;FORTRAN IV COMPILER. THE MAIN OBJECT OF THE ROUTINE IS TO +;LOOK FOR THE END BLOCK. CODE TAKEN FROM FUDGE2. + +MACHCD: HRRZ C,W ;GET THE WORD COUNT + PUSHJ P,WORD ;INPUT A WORD + SOJG C,MACHCD ;LOOP BACK FOR REST OF THE BLOCK + ;GO LOOK FOR NEXT BLOCK + +REJECT: PUSHJ P,WORD ;READ A FORTRAN BLOCK HEADER + TLC W,-1 ;TURN ONES TO ZEROES IN LEFT HALF + TLNE W,-1 ;WAS LEFT HALF ALL ONES? + JRST REJECT ;NO, IT WAS CALCULATED MACHINE CODE + CAIN W,-2 ;YES, IS RIGHT HALF = 777776? + JRST ENDST ;YES, PROCESS F4 END BLOCK + LDB C,[POINT 6,W,23];GET CODE BITS FROM BITS 18-23 + TRZ W,770000 ;THEN WIPE THEM OUT + CAIE C,70 ;IS IT A DATA STATEMENT? + CAIN C,50 ;IS IT ABSOLUTE MACHINE CODE? + JRST MACHCD ;YES, TREAT IT LIKE DATA STATEMENTS + PUSHJ P,WORD ;NO, ITS A LABEL OF SOME SORT + JRST REJECT ;WHICH CONSISTS OF ONE WORD + ;LOOK FOR NEXT BLOCK HEADER + +ENDST: MOVEI C,1 ;TWO WORDS, FIVE TABLES, ONE WORD, ONE TABLE + MOVEI T,6 ;TO GO +F4LUP1: PUSHJ P,WORD ;GET TABLE MEMBER +F4LUP3: SOJGE C,F4LUP1 ;LOOP WITHIN A TABLE + JUMPL T,LOAD1 ;LAST TABLE - RETURN + SOJG T,F4LUP2 ;FIRST TWO WORDS AND FIVE TABLES + JUMPE T,F4LUP1 ;COMMON LENGTH WORD +F4LUP2: PUSHJ P,WORD ;READ HEADER WORD + MOVE C,W ;COUNT TO COUNTER + JRST F4LUP3 ;STASH + + +SUBTTL LISP LOADER + +IFE L,< END BEG> + +IFN L,<LODMAK: MOVEI A,LODMAK + MOVEM A,137 ;SET UP TO SAVE THE LISP LOADER + INIT 17 + SIXBIT /DSK/ + 0 + HALT + ENTER LMFILE + HALT + MOVNI A,LD + HRLZS A + ADDM A,LMLST ;BECAUSE MACRO WON'T TAKE POLISH FIXUPS + OUTPUT LMLST + STATZ 740000 + HALT + RELEASE + EXIT +LMFILE: SIXBIT /LISP/ + SIXBIT /LOD/ + 0 + 0 +LMLST: IOWD LODMAK+1,137 + 0 + END LODMAK> + + + diff --git a/src/loader.v1 b/src/loader.v1 new file mode 100644 index 0000000..f01d580 --- /dev/null +++ b/src/loader.v1 @@ -0,0 +1,2348 @@ + SUBTTL DICK GRUEN: V25 3 AUG 68 + + +L==0 ;L=1 MEANS THE LISP LOADER +IFNDEF L,<L=0> + +;K=1 ;K=1 MEANS 1KLOADER +IFNDEF K,<K=0> ;K=0 MEANS F4 LOADER + +IFN L,< BLTSYM=0 + LDAC=0> + +;BLTSYM=1 ;MOVE SYMBOL TABLE DOWN TO END OF PROG +IFNDEF BLTSYM,<BLTSYM=0> + +;EXPAND=1 ;FOR AUTOMATIC CORE EXPANSION +IFNDEF EXPAND,< IFN K,<EXPAND=0> + IFE K,<EXPAND=1>> + +;PP=1 ;ALLOW PROJ-PROG # +IFNDEF PP,<PP=0> + +;CHN5=0 ;IF CHAIN WHICH DOESN'T SAVES JOB41 +IFNDEF CHN5,<CHN5=1> + +IFE K,< TITLE LOADER - LOADS MACROX AND SIXTRAN FOUR> +IFN K,< TITLE 1KLOAD - LOADS MACROX> + ;ACCUMULATOR ASSIGNMENTS + F=0 ;FLAGS IN LH, SA IN RH + N=1 ;PROGRAM NAME POINTER + X=2 ;LOADER OFFSET + H=3 ;HIGHEST LOC LOADED + S=4 ;UNDEFINED POINTER + R=5 ;RELOCATION CONSTANT + B=6 ;SYMBOL TABLE POINTER + D=7 + T=10 + V=T+1 + W=12 ;VALUE + C=W+1 ;SYMBOL + E=C+1 ;DATA WORD COUNTER + Q=15 ;RELOCATION BITS + A=Q+1 ;SYMBOL SEARCH POINTER + P=17 ;PUSHDOWN POINTER +;FLAGS F(0 - 17) + CSW==1 ;ON - COLON SEEN + ESW==2 ;ON - EXPLICIT EXTENSION IDENT. + SKIPSW==4 ;ON - DO NOT LOAD THIS PROGRAM + FSW==10 ;ON - SCAN FORCED TO COMPLETION + FCONSW==20 ;ON - FORCE CONSOLE OUTPUT + ASW==100 ;ON - LEFT ARROW ILLEGAL + FULLSW==200 ;ON - STORAGE EXCEEDED + SLIBSW==400 ;ON - LIB SEARCH IN THIS PROG + DSYMSW==1000 ;ON - LOAD WITH SYMBOLS FOR DDT + REWSW==2000 ;ON - REWIND AFTER INIT + LIBSW==4000 ;ON - LIBRARY SEARCH MODE + F4LIB==10000 ;ON - F4 LIBRARY SEARCH LOOKUP + ISW==20000 ;ON - DO NOT PERFORM INIT + SYMSW==40000 ;ON - LOAD LOCAL SYMBOLS + DSW==100000 ;ON - CHAR IN IDENTIFIER + NSW==200000 ;ON - SUPPRESS LIBRARY SEARCH + SSW==400000 ;ON - SWITCH MODE +;FLAGS N(0 - 17) + ALLFLG==1 ;ON - LIST ALL GLOBALS + ISAFLG==2 ;ON - IGNORE STARTING ADDRESSES + COMFLG==4 ;ON - SIZE OF COMMON SET +IFE K,< F4SW==10 ;F4 IN PROGRESS + RCF==20 ;READ DATA COUNT + SYDAT==40 ;SYMBOL IN DATA> + SLASH==100 ;SLASH SEEN +IFE K,< BLKD1==200 ;ON- FIRST BLOCK DATA SEEN + PGM1==400 ;ON FIRST F4 PROG SEEN + DZER==1000 ;ON - ZERO SECOND DATA WORD> + EXEQSW==2000 ;IMMEDIATE EXECUTION + DDSW==4000 ;GO TO DDT + AUXSWI==20000 ;ON - AUX. DEVICE INITIALIZED + AUXSWE==40000 ;ON - AUX. DEVICE ENTERED +IFN PP,<PPSW==100000 ;ON - READING PROJ-PROG # + PPCSW==200000 ;ON - READING PROJ #> + LOC 137 +OCT 25 ;VERSION # +RELOC + MLON + SALL + + + +;MONITOR LOCATIONS IN THE USER AREA + + JOBPRO==140 ;PROGRAM ORIGIN + JOBBLT==134 ;BLT ORIGIN + JOBCHN==131 ;RH = PROG BREAK OF FIRST BLOCK DATA + ;LH = PROG BREAK OF FIRST F4 PROG + +;CALLI DEFINITIONS + +CDDTOUT==3 ;CALLI DDTOUT +CEXIT==12 ;CALLI EXIT +CDDTGT==5 ;CALLI DDTGT +CSETDDT==2 ;CALLI SETDDT + +;LENGTH OF PUSHDOWN LIST FOR POLISH FIXUPS + +PPDL==60 + +;MONITOR LOADER CONTROL + +BEG: +IFE L,< +LD: HLLZS 42 ;GET RID OF ERROR COUNT IF NOT IN RPG MODE + CALLI 0 ;INITIALIZE THIS JOB +NUTS: MOVSI R,F.I ;SET UP INITIAL ACCUMULATORS + BLT R,R +> +IFN L,< +LD: HRRZM 0,LSPXIT# ;RETURN ADDRESS FOR LISP + MOVEI 0,0 + HRRZM R,RINITL# + CALLI 0 +> +CTLSET: INIT 3,1 ;INITIALIZE CONSOLE + SIXBIT /TTY/ + XWD BUFO,BUFI +CALLEX: CALLI CEXIT ;DEVICE ERROR, FATAL TO JOB + MOVEI E,TTY1 + MOVEM E,JOBFF + INBUF 3,1 + OUTBUF 3,1 ;INITIALIZE OUTPUT BUFFERS + OUTPUT 3, ;DO INITIAL REDUNDANT OUTPUT +IFE L,< HRRZ B,JOBREL ;PICK UP CORE BOUND + SKIPE JOBDDT ;DOES DDT EXIST? + HRRZ B,JOBSYM ;USED BOTTOM OF SYMBOL TABLE INSTEAD +> +IFN L,< MOVE B,JOBSYM> + SUB B,SE3 ;INITIALIZE SYMBOL TABLE POINTER + CAILE H,1(B) ;TEST CORE ALLOCATION + CALLI CEXIT ;INSUFFICIENT CORE, FATAL TO JOB +IFE L,< MOVS E,X ;SET UP BLT POINTER + HRRI E,1(X)> +IFN L,< MOVS E,H + HRRI E,1(H)> + SETZM -1(E) ;ZERO FIRST WORD + BLT E,(B) ;ZERO CORE UP TO THE SYMBOL AREA + HRRZ S,B ;INITIALIZE UNDEF. POINTER + HRR N,B ;INITIALIZE PROGRAM NAME POINTER +IFE L,<HRRI R,JOBPRO ;INITIALIZE THE LOAD ORIGIN> + MOVE E,COMM ;SET .COMM. AS THE FIRST PROGRAM + MOVEM E,1(B) ;STORE IN SYMBOL TABLE + HRRZM R,2(B) ;STORE COMMON ORIGIN + > + MOVEI E,F.C ;INITIALIZE STATE OF THE LOADER + BLT E,B.C + SETZM MDG ;MULTIPLY DEFINED GLOBAL COUNT +IFE L,< MOVSI W,254200 ;STORE HALT IN JOB41 + MOVEM W,JOB41(X)> ;... +IFN L,< MOVE W,JOBREL + HRRZM W,OLDJR#> +IFN LDAC!BLTSYM,<MOVEI W,20 ;SET UP SPACE TO SAVE FOR ACS AND + MOVEM W,KORSP# ;USER DEFINITIONS WITH DDT> + + +LD2: +;LOADER SCAN FOR FILE NAMES + +LD2Q: MOVSI B,F.C ;RESTORE ACCUMULATORS + BLT B,B + MOVE P,PDLPT ;INITIALIZE PUSHDOWN LIST + SETZM BUFI2 ;CLEAR INPUT BUFFER POINTER +IFE PP,< SETZM ILD1 ;CLEAR INPUT DEVICE NAME> +IFN PP,< MOVSI T,(SIXBIT /DSK/) ;ASSUME DSK + MOVEM T,ILD1 + SETZM OLDDEV# ;TO MAKE IT GO BACK AFTER /D FOR LIBSR> + SETZM DTIN ;CLEAR INPUT FILE NAME +IFN PP,<SETZM PPN# ;CLEAR INPUT PROJ-PROG #> + +LD2B: RELEAS 1, ;RELEASE BINARY INPUT DEVICE + MOVEI T,"*" + IDPB T,BUFO1 ;OUTPUT ASTERISK TO START INPUT + OUTPUT 3, +LD2BA: TLZ F,FULLSW+ASW+ISW+CSW+ESW+SKIPSW+SLIBSW+REWSW + TLNE F,LIBSW ;WAS LIBRARY MODE ON? + TLO F,SKIPSW ;YES, NORMAL MODE IS SKIPPING + +LD2D: IFN PP,<SETZM PPN ;DO NOT REMEMBER PPNS FOR NOW +LD2DB: SKIPE W,OLDDEV ;RESET DEVICE IF NEEDED + CAMN W,ILD1 ;IS IT SAME? + JRST LD2DA ;YES, FORGET IT + TLZ F,ISW+DSW+FSW+REWSW + MOVEM W,ILD1> +LD2DA: + MOVEI W,0 ;INITIALIZE IDENTIFIER SCAN + MOVEI E,6 ;INITIALIZE CHARACTER COUNTER + MOVE V,LSTPT ;INITIALIZE BYTE POINTER TO W + TLZ F,SSW+DSW+FSW ;LEAVE SWITCH MODE +LD3: SOSG BUFI2 ;DECREMENT CHARACTER COUNT + INPUT 3, ;FILL TTY BUFFER + ILDB T,BUFI1 ;LOAD T WITH NEXT CHARACTER +LD3AA: MOVE Q,T + IDIVI Q,11 ;TRANSLATE TO 4 BIT CODE + LDB Q,LD8(A) ;LOAD CLASSIFICATION CODE + CAIGE Q,4 ;MODIFY CODE IF .GE. 4 + TLNN F,SSW ;MODIFY CODE IF SWITCH MODE OFF + ADDI Q,4 ;MODIFY CLASS. CODE FOR DISPATCH + HRRZ A,LD3A(Q) ;LOAD RH DISPATCH ENTRY + CAIL Q,10 ;SKIP IF CORRECT DISPATCH ENTRY + HLRZ A,LD3A-10(Q) ;LOAD LH DISPATCH ENTRY + JRST @A ;JUMP TO INDICATED LOCATION + +;COMMAND DISPATCH TABLE + +LD3A: XWD LD3,LD7B ;IGNORED CHAR, BAD CHAR (SWITCH) + XWD LD6A,LD6 ;</> OR <(>, LETTER (SWITCH) + XWD LD5,LD6C ;<:>, DIGIT (SWITCH ARG.) + XWD LD5A,LD6D ;<.>, ESCAPE SWITCH MODE <)> + XWD LD5C,LD7 ;<=> OR <L. ARROW>, BAD CHAR. + XWD LD5B,LD4 ;<,>, ALPHABETIC CHAR. + XWD LD5D,LD4 ;<CR.>, NUMERIC CHAR. + XWD LD5E1,LD7 ;<ALT MODE>, BAD CHAR. <)> + + ;ALPHANUMERIC CHARACTER, NORMAL MODE +LD4: SOJL E,LD3 ;JUMP IF NO SPACE FOR CHAR IN W + SUBI T,40 ;CONVERT FROM ASCII TO SIXBIT + IDPB T,V ;DEPOSIT CHAR OF IDENTIFIER IN W + TLO F,DSW ;SET IDENTIFIER FLAG + JRST LD3 ;RETURN FOR NEXT CHARACTER + +;DEVICE IDENTIFIER DELIMITER <:> + +LD5: PUSH P,W ;SAVE W + TLOE F,CSW ;TEST AND SET COLON FLAG + PUSHJ P,LDF ;FORCE LOADING + POP P,W ;RESTORE W + TLNE F,ESW ;TEST SYNTAX + JRST LD7A ;ERROR, MISSING COMMA ASSUMED + JUMPE W,LD2D ;JUMP IF NULL DEVICE IDENTIFIER + MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER +IFN PP,<MOVEM W,OLDDEV ;WE HAVE A NEW ONE SO IGNORE OLD> + TLZ F,ISW+DSW+FSW+REWSW ;CLEAR OLD DEVICE FLAGS +IFN PP,<SETZM PPN ;CLEAR OLD PP #> + JRST LD2D ;RETURN FOR NEXT IDENTIFIER + +;FILE NAME EXTENSION IDENTIFIER DELIMITER <.> + +LD5A: TLOE F,ESW ;TEST AND SET EXTENSION FLAG + JRST LD7A ;ERROR, TOO MANY PERIODS + TLZE F,CSW+DSW ;SKIP IF NULL IDENT AND NO COLON + MOVEM W,DTIN ;STORE FILE IDENTIFIER + JRST LD2D ;RETURN FOR NEXT IDENTIFIER + +;INPUT SPECIFICATION DELIMITER <,> + +LD5B: +IFN PP,<TLZE N,PPCSW ;READING PP #? + JRST [ + HRLM D,PPN ;STORE PROJ # + JRST LD6A1] ;GET PROG # + PUSHJ P,RBRA ;CHECK FOR MISSING RBRA> + TLZN F,FSW ;SKIP IF PREV. FORCED LOADING + PUSHJ P,FSCN2 ;LOAD (FSW NOT SET) + JRST LD2D ;RETURN FOR NEXT IDENTIFIER + +LD5B1: TLNE F,ESW ;TEST EXTENSION FLAG + JRST LDDT3 ;EXPLICIT EXTENSION IDENTIFIER + TLZN F,CSW+DSW ;SKIP IF IDENT. OR COLON + POPJ P, + MOVEM W,DTIN ;STORE FILE IDENTIFIER + JRST LDDT2 ;ASSUME <.REL> IN DEFAULT CASE + ;OUTPUT SPECIFICATION DELIMITER <=> OR <LEFT ARROW> +;OR PROJ-PROG # BRACKETS <[> AND <]> +LD5C: +IFN PP,<CAIN T,"[" ;PROJ-PROG #? + JRST [TLO N,PPSW+PPCSW ;SET FLAGS + MOVEM W,PPNW# ;SAVE W + MOVEM E,PPNE# ;SAVE E + MOVEM V,PPNV# ;SAVE V + JRST LD6A1-1] ;READ NUMBERS AS SWITCHES + CAIN T,"]" ;END OF PP #? + JRST [PUSHJ P,RBRA ;PROCESS RIGHT BRACKET + JRST LD3 ];READ NEXT IDENT> + TLOE F,ASW ;TEST AND SET LEFT ARROW FLAG + JRST LD7A ;ERROR, MISPLACED LEFT ARROW + PUSHJ P,LD5B1 ;STORE IDENTIFIER + TLZN F,ESW ;TEST EXTENSION FLAG + MOVSI W,554160 ;ASSUME <.MAP> IN DEFAULT CASE + MOVEM W,DTOUT1 ;STORE FILE EXTENSION IDENTIFIER + MOVE W,DTIN ;LOAD INPUT FILE IDENTIFIER + MOVEM W,DTOUT ;USE AS OUTPUT FILE IDENTIFIER +IFN PP,<MOVE W,PPN ;PROJ-PROG # + MOVEM W,DTOUT+3 ;...> + MOVE W,ILD1 ;LOAD INPUT DEVICE IDENTIFIER + MOVEM W,LD5C1 ;USE AS OUTPUT DEVICE IDENTIFIER +IFN PP,< SKIPE W,OLDDEV ;RESTORE OLD + MOVEM W,ILD1> +;INITIALIZE AUXILIARY OUTPUT DEVICE + TLZE N,AUXSWI+AUXSWE ;FLUSH CURRENT DEVICE + RELEASE 2, ;... + CALL W,[SIXBIT ?DEVCHR?] ;IS DEVICE A TTY? + TLNE W,10 ;... +JRST LD2D ;YES, SKIP INIT + INIT 2,1 ;INIT THE AUXILIARY DEVICE +LD5C1: 0 ;AUXILIARY OUTPUT DEVICE NAME + XWD ABUF,0 ;BUFFER HEADER + JSP A,ILD5 ;ERROR RETURN + TLNE F,REWSW ;REWIND REQUESTED? + CALL 2,[SIXBIT /UTPCLR/] ;DECTAPE REWIND + TLZE F,REWSW ;SKIP IF NO REWIND REQUESTED + MTAPE 2,1 ;REWIND THE AUX DEV + MOVEI E,AUX ;SET BUFFER ORIGIN + MOVEM E,JOBFF + OUTBUF 2,1 ;INITIALIZE SINGLE BUFFER + TLO N,AUXSWI ;SET INITIALIZED FLAG + JRST LD2D ;RETURN TO CONTINUE SCAN + + +;RIGHT SQUARE BRACKET (PROJ-PROG NUMBERS) +IFN PP,< +RBRA: TLZN N,PPSW ;READING PP #? + POPJ P, ;NOPE, RETURN + TLZE N,PPCSW ;COMMA SEEN? + JRST LD7A ;NOPE, INDICATE ERROR + HRRM D,PPN ;STASH PROG NUMBER + MOVE W,PPNW# ;PICKUP OLD IDENT + MOVE E,PPNE# ;RESTORE CHAR COUNT + MOVE V,PPNV# ;RESTORE BYTE PNTR + POPJ P, ;TRA 1,4 + +;RIGHT JUSTIFY W + +RJUST: JUMPE W,LD7A ;NOTHING TO RIGHT JUSTIFY + TRNE W,77 ;IS W RJUSTED YET? + POPJ P, ;YES, TRA 1,4 + LSH W,-6 ;NOPE, TRY AGAIN + JRST .-3 ;...> + +;LINE TERMINATION <CARRIAGE RETURN> + +LD5D: +IFN PP,<PUSHJ P,RBRA ;CHECK FOR UNTERMINATED PP #> + PUSHJ P,FSCN ;FORCE SCAN TO COMPLETION + JRST LD2B ;RETURN FOR NEXT LINE + +;TERMINATE LOADING <ALT MODE> + +LD5E: SKIPE D ;ENTER FROM G COMMAND + HRR F,D ;USE NUMERIC STARTING ADDRESS +LD5E1: + PUSHJ P,CRLF ;START A NEW LINE + PUSHJ P,SASYM ;SETUP JOBSA,JOBFF,JOBSYM,JOBUSY +IFN LDAC!BLTSYM,<HRRZ A,R ;SET UP BLT OF ACS + ADDI A,(X) ;END + ADD A,KORSP ;ADD IN SPACE RESERVED + CAIL A,(S) +IFN EXPAND,<JRST [PUSHJ P,XPAND> + PUSHJ P,[ +IFE EXPAND,< JSP A,ERRPT + SIXBIT /MORE CORE NEEDED#/> + CALLI CEXIT] +IFN EXPAND,< JRST .-1]> + HRRM R,BOTACS# ;SAVE FOR LATER + HRRZ A,R ;SET BLT + ADD A,X + HRL A,X + MOVE Q,A + BLT A,17(Q)> +IFN BLTSYM,<HRRZ A,R ;PLACE TO BLT TO + ADD A,KORSP + MOVE W,A ;SAVE DEST + ADDI A,(X) ;AFTER ADJUSTMENT + MOVE Q,S ;UDEF PNTR + ADD Q,B ;TOTAL UNDEFS AND DEFS IN LEFT + HLROS Q ;NOW NEG IN RIGHT + MOVNS Q ;POSITIVE + ADDI Q,-1(A) ;END OF BLT + HRLI A,1(S) ;AND GET PLACE TO BLT FROM + SUBI W,1(S) ;PREST LOC OF SYMBOL TABLE + ADDM W,JOBSYM(X) + ADDM W,JOBUSY(X) ;ADJUST POINTERS + BLT A,(Q) ;MOVE IT + SKIPN JOBDDT(X) ;IS DDT THERE? + JRST NODDT + SUBI Q,-1(X) + HRRM Q,JOBFF(X) ;RESTET JOBFF IF DDT IS IN + HRLM Q,JOBSA(X) +NODDT:> + MOVE W,[SIXBIT ?LOADER?] ;FINAL MESSAGE + PUSHJ P,BLTSET ;SETUP FOR FINAL BLT + RELEASE 2, ;RELEASE AUX. DEV. +IFN L,< JRST @LSPXIT> +LD5E5: MOVE W,[BLT Q,(A)] ;BLT OF ALL CODE + MOVEM W,JOBBLT ;STASH IN JOB DATA AREA + MOVEM W,JOBBLT(X) ;STASH IN RELOCATED JOBDATA AREA +LD5E2: MOVE W,CALLEX ;EXIT AFTER BLT + TLZN N,EXEQSW ;IMMEDIATE EXECUTION REQUESTED? + JRST LD5E3 ;NOPE, LET USER TYPE START HIMSELF + HRRZ W,JOBSA(X) ;PICKUP USUAL STARTING ADDRESS + TLNE N,DDSW ;DDT EXECUTION? + HRRZ W,JOBDDT(X) ;USE DDT SA INSTEAD + JUMPE W,LD5E2 ;IF SA=0, DON'T EXECUTE + HRLI W,(JRST) ;INSTRUCTION TO EXECUTE +LD5E3: +IFE LDAC,<MOVEM W,JOBBLT+1(X) ;STASH FOR EXECUTION> +IFN LDAC,<MOVEM W,JOBBLT+2(X) ;STASH FOR EXECUTION + HRLZ 17,JOBFF(X) ;BUT FIRST BLT ACS + MOVE W,[BLT 17,17] ;... + MOVEM W,JOBBLT+1(X) ;...> + JRST JOBBLT ;IF IT WERE DONE, 'TWERE BEST DONE QUICKLY + + +;SEARCH LIBRARY, PRINT UNDEFS, SETUP JOBSA,JOBFF,JOBSYM,JOBUSY + +SASYM: TLNN F,NSW ;SKIP IF NO SEARCH FLAG ON + PUSHJ P,LIBF ;SEARCH LIBRARY FILE + PUSHJ P,FSCN ;FORCE SCAN TO COMPLETION + PUSHJ P,PMS ;PRINT UNDEFINEDS +IFE L,< HRRZM F,JOBSA(X) ;RH OF JOBSA :=STARTING ADDRESS> +SAS1: HRRZ A,H ;COMPUTE PROG BREAK + SUBI A,(X) ;... + CAIGE A,(R) ;BUT NO HIGHER THAN RELOC + HRRZ A,R ;... +IFE L,< HRLM A,JOBSA(X) ;LH OR JOBSA IS PROG BREAK + HRRZM A,JOBFF(X) ;RH OF JOBFF CONTAINS PROG BREAK> + MOVE A,B ;SET JOBSYM W/ SYMBOL TABLE POINTER + AOS A ;... +IFE L,< MOVEM A,JOBSYM(X) ;...> +IFN L,< MOVEM A,JOBSYM> + MOVE A,S ;SET JOBUSY W/ UNDEFINED SYMBOL POINTER + AOS A ;... +IFE L,< MOVEM A,JOBUSY(X) ;...> +IFN L,< MOVEM A,JOBUSY> + POPJ P, ;RETURN +;PRINT FINAL MESSAGE, SET UP BLT AC'S, SETDDT, RELEAS + +BLTSET: PUSHJ P,FCRLF ;START FINAL MESSAGE + PUSHJ P,PWORD ;PRINT W + PUSHJ P,SPACE + HRRZ Q,JOBREL ;PUBLISH HOW MUCH CORE USED +IFN L,< SUB Q,OLDJR ;OLD JOBREL> + LSH Q,-12 ;... + ADDI Q,1 ;... + PUSHJ P,RCNUM ;PUBLISH THE NUMBER + MOVE W,[SIXBIT /K CORE/] ;PUBLISH THE UNITS + PUSHJ P,PWORD ;... + PUSHJ P,CRLF ;... +IFE L,< MOVSI Q,20(X) ;HOW MUCH CODE TO BLT + HRRI Q,20 ;... + HRRZ A,42 ;CHECK ON ERRORS + JUMPE A,NOEX ;NONE, GO AHEAD + TLZN N,EXEQSW ;DID HE WANT TO START EXECUTION? + JRST NOEX ;NO + JSP A ,ERRPT ;PRINT AN ERROR MESSAGE + SIXBIT /EXECUTION DELETED@/ +NOEX: HRRZ A,JOBREL ;WHEN TO STOP BLT + HRRZM A,JOBREL(X) ;SETUP FOR POSSIBLE IMMED. XEQ + SUBI A,(X) ;... +IFE BLTSYM,<CAIL A,(S) ;DON'T BLT OVER SYMBOL TABLE + MOVEI A,(S) ;OR UNDEFINED TABLE> + RELEAS 1, ;RELEASE DEVICES + RELEAS 3, ;... +IFE L,< MOVE R,JOBDDT(X) ;SET NEW DDT + CALLI R,CSETDDT ;...> + POPJ P, ;RETURN + > + + +;WRITE CHAIN FILES + +CHNC: SKIPA A,JOBCHN(X) ;CHAIN FROM BREAK OF FIRST BLOCK DATA +CHNR: HLR A,JOBCHN(X) ;CHAIN FROM BREAK OF FIRST F4 PROG + HRRZS A ;ONLY RIGHT HALF IS SIGNIFICANT + JUMPE A,LD7C ;DON'T CHAIN IF ZERO + TLNN N,AUXSWI ;IS THERE AN AUX DEV? + JRST LD7D ;NO, DON'T CHAIN + PUSH P,A ;SAVE WHEREFROM TO CHAIN + SKIPE D ;STARTING ADDR SPECIFIED? + HRR F,D ;USE IT + PUSHJ P,SASYM ;DO LIB SEARCH, SETUP JOBSA, ETC. + POP P,A ;GET WHEREFROM + MOVN W,JOBREL ;CALCULATE IOWD FOR DUMP + ADDI W,-1-3-CHN5(A) ;... + HRLI W,-4-CHN5(A) ;... + MOVSM W,IOWDPP ;... + ADDI A,-4-CHN5(X) ;ADD IN OFFSET +IFN CHN5,<PUSH A,JOBSYM(X) ;SETUP FOUR WORD TABLE + PUSH A,JOB41(X) ;...> + PUSH A,JOBDDT(X) ;JOBDDT IN ALL CASES +IFE CHN5,<PUSH A,JOBSYM(X) ;JOBDDT, JOBSYM, JOBSA> + PUSH A,JOBSA(X) ;JOBRYM ALWAYS LAST + CLOSE 2, ;INSURE END OF MAP FILE + SETSTS 2,17 ;SET AUX DEV TO DUMP MODE + MOVSI W,435056 ;USE .CHN AS EXTENSION + MOVEM W,DTOUT1 ;... + PUSHJ P,IAD2 ;DO THE ENTER + TLZ N,AUXSWI+AUXSWE ;INSURE NO PRINTED OUTPUT + MOVE W,[SIXBIT ?CHAIN?] ;FINAL MESSAGE + PUSHJ P,BLTSET ;SETUP BLT PNTR, SETDDT, RELEAS + CALLI CDDTGT ;START DDT MODE OUTPUT + MOVSI CHNBLT,CHAIN3 ;BLT CHAIN3 INTO ACS + BLT CHNBLT,CHNBLT ;... + MOVEI P,CHNERR ;POINTER TO ERR MESS + JRST 0 ;GO DO CHAIN + + +;THE AC SECTION OF CHAIN + +CHAIN3: + PHASE 0 + BLT Q,(A) ;USUAL LDRBLT + OUTPUT 2,IOWDP ;WRITE THE CHAIN FILE + STATZ 2,IOBAD!IODEND ;CHECK FOR ERROR OR EOF + JRST LOSEBIG ;FOUND SAME, GO GRIPE + CLOSE 2, ;FINISH OUTPUT + STATZ 2,IOBAD!IODEND ;CHECK FOR FINAL ERROR +LOSEBI: CALLI CDDTOUT ;GRIPE ABOUT ERROR + CALLI CEXIT ;EXIT +CHNERR: ASCIZ ?DEVICE ERROR? ;ERROR MESSAGE +IOWDP: Z ;STORE IOWD FOR DUMP HERE +CHNBLT: ;LAST WORD OF AC CHAIN (ZERO OF I/O POINTER) + DEPHASE +IOWDPP=.-1 ;MEMORY LOC OF AC IOWDP + Z ;TERMINATOR OF DUMP MODE LIST + + ;EXPAND CORE + +IFN EXPAND,< +XPAND: PUSH P,H ;GET SOME REGISTERS TO USE + PUSH P,X + PUSH P,N + HRRZ X,JOBREL ;WHAT WE WANT + ADDI X,2000 + CALLI X,11 + JRST XPAND6 +IFE K,< HRRZ H,MLTP ;GET LOWEST LOCATION + TLNN N,F4SW ;IS FORTRAN LOADING> + HRRZ H,S ;NO, USE S + HRRZ X,JOBREL ;NOW MOVE + SUBI X,2000 +XPAND2: MOVE N,(X) + MOVEM N,2000(X) + CAMLE X,H ;TEST FOR END + SOJA X,XPAND2; HAND EYE SYSTEM MOVES TABLE + HRLI H,-2000 + SETZM (H) ;ZERO NEW CORE + AOBJN H,.-1 + MOVEI H,2000 + ADDM H,S + ADDM H,B + ADDM H,JOBSYM + POP P,N + ADDI N,2000 +IFE K,< TLNN N,F4SW ;F4? + JRST XPAND3 + ADDM H,PLTP + ADDM H,BITP + ADDM H,SDSTP + ADDM H,MLTP + TLNE N,SYDAT + ADDM H,V> +XPAND3: + POP P,X + POP P,H + AOS (P) + POPJ P, +XPAND6: JUMPE X,XPAND4 + JSP A,ERRPT + SIXBIT /CORE AVAILABLE, BUT NOT TO YOU#/ +XPAND4: JSP A,ERRPT + SIXBIT /MORE CORE NEEDED#/ +XPAND5: POP P,N + POP P,X + POP P,H + POPJ P, + +XPAND7: PUSHJ P,XPAND + JRST SFULLC + JRST POPJM2 + +POPJM3: SOS (P) ;POPJ TO CALL-2 +POPJM2: SOS (P) ;POPJ TO CALL-1 + SOS (P) ;SAME AS POPJ TO + POPJ P, ;NORMAL POPJ MINUS TWO + + +;ENTER SWITCH MODE + +LD6A: CAIN T,57 ;WAS CHAR A SLASH? + TLO N,SLASH ;REMEBER THAT + TLO F,SSW ;ENTER SWITCH MODE +LD6A1: MOVEI D,0 ;ZERO THE NUBER REGISTER + JRST LD3 ;EAT A SWITCH + +;ALPHABETIC CHARACTER, SWITCH MODE + +LD6: XCT LD6B-101(T) ;EXECUTE SWITCH FUNCTION + TLZE N,SLASH ;SWITCH MODE ENTERED W/ SLASH? + JRST LD6D ;LEAVE SWITCH MODE + JRST LD6A1 ;STAY IN SWITCH MODE + +;DISPATCH TABLE FOR SWITCHES + +; THE INSTRUCTION AT THE CHARACTER LOCATION IS EXECUTED + +LD6B: TLO N,ALLFLG ;A - LIST ALL GLOBALS + JRST LD7B ;B - ERROR + PUSHJ P,CHNC ;C - CHAIN, START W/ COMMON + PUSHJ P,LDDT ;D - DEBUG OPTION, LOAD DDT + TLO N,EXEQSW ;E - LOAD AND GO + PUSHJ P,LIBF ;F - LIBRARY SEARCH + PUSHJ P,LD5E ;G - GO INTO EXECUTION + PUSHJ P,LRAIDX ;H - LOAD AN START RAID + TLO N,ISAFLG ;I - IGNORE STARTING ADDRESSES + TLZ N,ISAFLG ;J - USE STARTING ADDRESSES +IFE BLTSYM,<JRST LD7B ;K - ERROR> +IFN BLTSYM,<PUSHJ P,KORADJ ;K - RESERVE SPACE FOR SYM DEFS> + TLO F,LIBSW+SKIPSW ;L - ENTER LIBRARY SEARCH + PUSHJ P,PRMAP ;M - PRINT STORAGE MAP + TLZ F,LIBSW+SKIPSW ;N - LEAVE LIBRARY SEARCH + HRR R,D ;O - NEW PROGRAM ORIGIN + TLO F,NSW ;P - PREVENT AUTO. LIB. SEARCH + TLZ F,NSW ;Q - ALLOW AUTO. LIB. SEARCH + PUSHJ P,CHNR ;R - CHAIN, START W/ RESIDENT + TLO F,SYMSW ;S - LOAD WITH SYMBOLS + PUSHJ P,LDDTX ;T - LOAD AND GO TO DDT + PUSHJ P,PMS ;U - PRINT UNDEFINED LIST + PUSHJ P,LRAID ;V - LOAD RAID + TLZ F,SYMSW+DSYMSW ;W - LOAD WITHOUT SYMBOLS + TLZ N,ALLFLG ;X - DO NOT LIST ALL GLOBALS + TLO F,REWSW ;Y - REWIND BEFORE USE + JRST LD ;Z - RESTART LOADER + + +;SWITCH MODE NUMERIC ARGUMENT + +LD6C: LSH D,3 ;BUILD OCTAL NUMERIC ARGUMENT + ADDI D,-60(T) + JRST LD3 + +;EXIT FROM SWITCH MODE + +LD6D: TLZ F,SSW ;CLEAR SWITCH MODE FLAG + TLNE F,FSW ;TEST FORCED SCAN FLAG + JRST LD2D ;SCAN FORCED, START NEW IDENT. + JRST LD3 ;SCAN NOT FORCED, USE PREV IDENT +;ILLEGAL CHARACTER, NORMAL MODE + +LD7: JSP A,ERRPT8 + SIXBIT /CHAR.%/ + JRST LD2 + +;SYNTAX ERROR, NORMAL MODE + +LD7A: JSP A,ERRPT8 + SIXBIT /SYNTAX%/ + JRST LD2 + +;ILLEGAL CHARACTER, SWITCH MODE + +LD7B: JSP A,ERRPT8 + SIXBIT /SWITCH%/ + JRST LD2 + +;ATTEMPT TO CHAIN WITH SPECIFIED HALF OF JOBCHN = 0 + +LD7C: JSP A,ERRPT ;GRIPE + SIXBIT ?UNCHAINABLE AS LOADED@? + JRST LD2 + +;ATTEMP TO CHAIN WITHOUT SPECIFYING DEVICE + +LD7D: JSP A,ERRPT ;GRIPE + SIXBIT ?NO CHAIN DEVICE@? + JRST LD2 + +IFN BLTSYM,<KORADJ: CAMLE D,KORSP ;IF SMALLER IGNORE + MOVEM D,KORSP + POPJ P,> + +;CHARACTER CLASSIFICATION TABLE DESCRIPTION: + +; EACH CHARACTER HAS ASSOCIATED WITH IT A FOUR BIT BYTE +; PACKED IN THE CHARACTER CLASSIFICATION TABLE. THE CHARACTER +; CLASSIFICATION CODES ARE ORDERED IN SUCH A WAY AS TO GIVE +; DELIMITERS OF HIGHER PRECEDENCE LOWER CLASSIFICATION NUMBERS. +; CERTAIN CHARACTERS HAVE NO EFFECT ON THE COMMAND STRING, AND +; THEREFORE DO NOT EFFECT ORDERING OF DELIMITERS. FOUR CODES +; ARE RESERVED FOR ALTERNATE DISPATCHES WHILE THE SWITCH MODE IS +; IN EFFECT. + + +;CLASSIFICATION BYTE CODES: + +; BYTE DISP CLASSIFICATION + +; 00 - 00 ILLEGAL CHARACTER, SWITCH MODE +; 01 - 01 ALPHABETIC CHARACTER, SWITCH MODE +; 02 - 02 NUMERIC CHARACTER, SWITCH MODE +; 03 - 03 SWITCH MODE ESCAPE, SWITCH MODE + +; 00 - 04 ILLEGAL CHARACTER, NORMAL MODE +; 01 - 05 ALPHABETIC CHARACTER, NORMAL MODE +; 02 - 06 NUMERIC CHARACTER, NORMAL MODE +; 03 - 07 SWITCH MODE ESCAPE, NORMAL MODE + +; 04 - 10 IGNORED CHARACTER +; 05 - 11 ENTER SWITCH MODE CHARACTER +; 06 - 12 DEVICE IDENTIFIER DELIMITER +; 07 - 13 FILE EXTENSION DELIMITER +; 10 - 14 OUTPUT SPECIFICATION DELIMITER +; 11 - 15 INPUT SPECIFICATION DELIMITER +; 12 - 16 LINE TERMINATION +; 13 - 17 JOB TERMINATION + + +;BYTE POINTERS TO CHARACTER CLASSIFICATION TABLE + +LD8: POINT 4,LD9(Q),3 + POINT 4,LD9(Q),7 + POINT 4,LD9(Q),11 + POINT 4,LD9(Q),15 + POINT 4,LD9(Q),19 + POINT 4,LD9(Q),23 + POINT 4,LD9(Q),27 + POINT 4,LD9(Q),31 + POINT 4,LD9(Q),35 + +;CHARACTER CLASSIFIACTION TABLE + +LD9: BYTE (4)4,0,0,0,0,0,0,0,0 + BYTE (4)4,4,4,4,12,0,0,0,0 + BYTE (4)0,0,0,0,0,0,0,0,0 + BYTE (4)13,0,0,0,0,4,0,4,0 + BYTE (4)0,0,0,0,5,3,0,0,11 + BYTE (4)0,7,5,2,2,2,2,2,2 + BYTE (4)2,2,2,2,6,0,0,10,0 + BYTE (4)0,0,1,1,1,1,1,1,1 + BYTE (4)1,1,1,1,1,1,1,1,1 + BYTE (4)1,1,1,1,1,1,1,1,1 +IFE PP,<BYTE (4)1,0,0,0,0,10,0,0,0> +IFN PP,<BYTE (4)1,10,0,10,0,10,0,0,0> + BYTE (4)0,0,0,0,0,0,0,0,0 + BYTE (4)0,0,0,0,0,0,0,0,0 + BYTE (4)0,0,0,0,0,0,0,0,13 + BYTE (4)13,4 + + +;INITIALIZE LOADING OF A FILE + +ILD: MOVEI W,BUF1 ;LOAD BUFFER ORIGIN + MOVEM W,JOBFF + TLOE F,ISW ;SKIP IF INIT REQUIRED + JRST ILD6 ;DONT DO INIT + INIT 1,14 +ILD1: 0 ;LOADER INPUT DEVICE + XWD 0,BUFR + JSP A,ILD5 ;ERROR RETURN +ILD6: TLZE F,REWSW ;SKIP IF NO REWIND + MTAPE 1,1 ;REWIND +ILD2: LOOKUP 1,DTIN ;LOOK UP FILE FROM DIRECTORY + JRST ILD3 ;FILE NOT IN DIRECTORY +IFE K,< INBUF 1,2 ;SET UP BUFFERS> +IFN K,< INBUF 1,1 ;SET UP BUFFER> + TLO F,ASW ;SET LEFT ARROW ILLEGAL FLAG + TLZ F,ESW+F4LIB ;CLEAR EXTENSION FLAG + POPJ P, + +; LOOKUP FAILURE + +ILD3: TLOE F,ESW ;SKIP IF .REL WAS ASSUMED + JRST ILD4 ;FATAL LOOKUP FAILURE + SETZM DTIN1 ;ZERO FILE EXTENSION + JRST ILD2 ;TRY AGAIN WITH NULL EXTENSION + +ILD4: TLZE F,F4LIB ;WAS THIS A TRY FOR F40 LIBRARY? + JRST [MOVE W,[SIXBIT /LIB4/]; YES, TRY LIB4 + MOVEM W,DTIN ;... + PUSHJ P,LDDT2 ;USE .REL EXTENSION + TLZ F,ESW ;... + JRST ILD2 ];GO TRY AGAIN +ILD9: JSP A,ERRPT + SIXBIT /CANNOT FIND#/ + JRST LD2 + +; DEVICE SELECTION ERROR + +ILD5: MOVE W,-3(A) ;LOAD DEVICE NAME FROM INIT + TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START W/ ? + PUSHJ P,PWORD ;PRINT DEVICE NAME + JSP A,ERRPT7 + SIXBIT /UNAVAILABLE@/ + JRST LD2 + +;LIBRARY SEARCH CONTROL AND LOADER CONTROL + +;LIBF ENABLES A LIBRARY SEARCH OF <SYS:LIB4.REL> + +LIBF: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + PUSHJ P,LIBF1 ;LOAD SYS:JOBDAT.REL + TLO F,F4LIB ;INDICATE FORTRAN LIBRARY SEARCH + MOVE W,[SIXBIT /LIB40/] ;FIRST TRY AT NAME + PUSHJ P,LIBF2 ;LOAD SYS:LIB40.REL +LIBF1: MOVE W,[SIXBIT /JOBDAT/] ;LOAD SYS:JOBDAT.REL +LIBF2: PUSHJ P,LDDT1 + JUMPGE S,EOF2 ;JUMP IF NO UNDEFINED GLOBALS + TLO F,SLIBSW+SKIPSW ;ENABLE LIBRARY SEARCH + TLZ F,SYMSW+DSYMSW ;DISABLE LOADING WITH SYMBOLS + JRST LDF ;INITIALIZE LOADING LIB4 + +; LIB CONTROLS THE LIBRARY SEARCH OF ONE FILE + +LIB: JUMPGE S,EOF1 ;JUMP IF NO UNDEFINED GLOBALS + TLO F,SKIPSW ;SET SKIPSW TO IGNORE MODE + JRST LOAD ;CONTINUE LIB. SEARCH + +LIB1: CAIE A,4 ;TEST FOR ENTRY BLOCK + JRST LIB3 ;NOT AN ENTRY BLOCK, IGNORE IT +LIB2: PUSHJ P,RWORD ;READ ONE DATA WORD + MOVE C,W + TLO C,040000 ;SET CODE BITS FOR SEARCH + PUSHJ P,SREQ + TLZA F,SKIPSW ;REQUEST MATCHES ENTRY, LOAD + JRST LIB2 ;NOT FOUND +LIB3: PUSHJ P,RWORD ;READ AND IGNORE ONE DATA WORD + JRST LIB3 ;LOOP TO IGNORE INPUT + +;LDDT LOADS <SYS:DDT.REL> AND SETS DSYMSW + +LRAIDX: TLO N,DDSW!EXEQSW ;H - LOAD AND START RAID +LRAID: PUSHJ P,FSCN1 ;FORCE END OF SCAN + MOVE W,[SIXBIT /RAID/] + JRST LDDT0 +LDDTX: TLO N,DDSW+EXEQSW ;T - LOAD AND GO TO DDT +LDDT: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + MOVSI W,444464 ;FILE IDENTIFIER <DDT> +LDDT0: PUSHJ P,LDDT1 + PUSHJ P,LDF ;LOAD <SYS:DDT.REL> + TLO F,DSYMSW ;ENABLE LOADING WITH SYMBOLS + POPJ P, + +LDDT1: MOVEM W,DTIN ;STORE FILE IDENTIFIER +IFN PP,<MOVE W,ILD1 ;SAVE OLD DEV + MOVEM W,OLDDEV> + MOVSI W,637163 ;DEVICE IDENTIFIER <SYS> + MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER + TLZ F,ISW+LIBSW+SKIPSW+REWSW ;CLEAR OLD FLAGS +LDDT2: MOVSI W,624554 ;EXTENSION IDENTIFIER <.REL> +LDDT3: MOVEM W,DTIN1 ;STORE EXTENSION IDENTIFIER +IFN PP,<MOVE W,PPN ;GET PROJ-PROG # + MOVEM W,DTIN+3> + POPJ P, + ;EOF TERMINATES LOADING OF A FILE + +EOF: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER +EOF1: TLZ F,SLIBSW+SKIPSW ;CLEAR ONE FILE LIB. SEARCH FLAG +EOF2: POPJ P, + +; FORCE SCAN TO COMPLETION, LOAD IF NECESSARY + +FSCN: PUSHJ P,FSCN1 ;FORCED LOAD BEFORE TEST + TLNN F,FULLSW ;TEST FOR OVERLAP + POPJ P, ;NO OVERLAP, RETURN + MOVE W,H ;FETCH CORE SIZE REQUIRED + SUBI W,1(S) ; COMPUT DEFICIENCY + JUMPL W,EOF2 ;JUMP IF NO OVERLAP + TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START WITH ? + PUSHJ P,PRNUM0 ;INFORM USER + JSP A,ERRPT7 + SIXBIT /WORDS OF OVERLAP#/ + JRST LD2 ;ERROR RETURN + +FSCN1: TLON F,FSW ;SKIP IF NOT FIRST CALL TO FSCN + TLNN F,CSW+DSW+ESW ;TEST SCAN FOR COMPLETION + ; HAND EYE DOES NOT WANT FORCED SCAN + POPJ P, +FSCN2: PUSHJ P,LD5B1 ;STORE FILE OR EXTENSION IDENT. + +; LOADER CONTROL, NORMAL MODE + +LDF: PUSHJ P,ILD ;INITIALIZE LOADING + + ;LOAD SUBROUTINE + +LOAD: MOVEM P,PDSAV ;SAVE PUSHDOWN POINTER +LOAD1: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER +LOAD1A: PUSHJ P,WORD ;INPUT BLOCK HEADER WORD + MOVNI E,400000(W) ;WORD COUNT - FROM RH OF HEADER + HLRZ A,W ;BLOCK TYPE - FROM LH OF HEADER + CAILE A,DISPL*2+1 ;TEST BLOCK TYPE NUMBER + JRST LOAD4 ;ERROR, ILLEGAL BLOCK TYPE + TLNE F,SKIPSW ;BLOCK OK - TEST LOAD STATUS + JRST LIB1 ;RETURN TO LIB. SEARCH CONTROL + HRRZ T,LOAD2(A) ;LOAD RH DISPATCH ENTRY + CAILE A,DISPL ;SKIP IF CORRECT + HLRZ T,LOAD2-DISPL-1(A) ;LOAD LH DISPATCH ENTRY + TLNE F,FULLSW ;TEST CORE OVERLAP INDICATOR + SOJG A,HIGH0 ;IGNORE BLOCK IF NOT TYPE 1 + JRST @T ;DISPATCH TO BLOCK SUBROUTINE + +;DISPATCH TABLE - BLOCK TYPES + +LOAD2: XWD NAME,LOAD1A + XWD START,PROG + XWD LOCD,SYM + XWD LOAD4A,LOAD4A + XWD LOAD4A,LIB3 +LOAD3: XWD LOAD4A,HIGH + + DISPL=LOAD3-LOAD2 + +;ERROR EXIT FOR BAD HEADER WORDS + +LOAD4: IFE K,< + CAIN A,400 ;FORTRAN FOUR BLOCK + JRST F4LD> +LOAD4A: JSP A,ERRPT ;INCORRECT HEADER WORD + SIXBIT /ILL. FORMAT#/ + JRST LD2 + + ;LOAD PROGRAMS AND DATA (BLOCK TYPE 1) + +PROG: HRRZ V,W ;LOAD BLOCK LENGTH + PUSHJ P,RWORD ;READ BLOCK ORIGIN + ADD V,W ;COMPUTE NEW PROG. BREAK + CAIG H,@X ;COMPARE WITH PREV. PROG. BREAK + MOVEI H,@X ;UPDATE PROGRAM BREAK + TLNE F,FULLSW + JRST FULLC ;NO ERROR MESSAGE + CAILE H,1(S) ; SKIP IF SUFFICIENT CORE AVAILABLE +IFN EXPAND,< JRST [PUSHJ P,XPAND> + JRST FULLC +IFN EXPAND,< JRST .-1]> + MOVE V,W +PROG1: PUSHJ P,RWORD ;READ DATA WORD +IFN L,< CAML V,RINITL ;ABSOLUTE > + MOVEM W,@X ;STORE DATA WORD IN PROG. AT LLC + AOJA V,PROG1 ;ADD ONE TO LOADER LOC. COUNTER + +;LOAD SYMBOLS (BLOCK TYPE 2) + +SYM: PUSHJ P,PRWORD ;READ TWO DATA WORDS + PUSHJ P,SYMPT; PUT INTO TABLE + JRST SYM + +; WFW SYMPT: JUMPL C,SYM3; JUMP IF GLOBAL REQUEST +SYMPT: TLNE C,200000 ;GLOBAL REQUEST? WFW + JUMPL C,SYM3 ;CHECK FOR 60 NOT JUST HIGH BIT WFW + TLNE C,100000 + JRST SYM1A ;LOCAL SYMBOL + PUSHJ P,SREQ ;GLOBAL DEF., SEARCH FOR REQUEST + JRST SYM2 ;REQUEST MATCHES + PUSHJ P,SDEF ;SEARCH FOR MULTIPLE DEFINITIONS + JRST SYM1 ;MULTIPLY DEFINED GLOBAL + JRST SYM1B + +; PROCESS MULTIPLY DEFINED GLOBAL + +SYM1: CAMN W,2(A) ;COMPARE NEW AND OLD VALUE + POPJ P,; + AOS MDG ;COUNT MULTIPLY DEFINED GLOBALS + PUSHJ P,PRQ ;START W/ ? + PUSHJ P,PRNAM ;PRINT SYMBOL AND VALUE + MOVE W,2(A) ;LOAD OLD VALUE + PUSHJ P,PRNUM ;PRINT OLD VALUE + JSP A,ERRPT7 ;PRINT MESSAGE + SIXBIT /MUL. DEF. GLOBAL#/ + POPJ P,; IGNORE MUL. DEF. GLOBAL SYM + + ; LOCAL SYMBOL + +SYM1A: TLNN F,SYMSW+DSYMSW ;SKIP IF LOAD LOCALS SWITCH ON + POPJ P,; IGNORE LOCAL SYMBOLS +SYM1B: CAIL H,(S) ;STORE DEFINED SYMBOL +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> +SYM1C: IFE K,< + TLNE N,F4SW; FORTRAN FOUR REQUIRES A BLT + PUSHJ P,MVDWN; OF THE TABLES> + MOVEI A,-2(S) ;LOAD A TO SAVE INST. AT SYM2 +SYM1D: SUBI S,2; UPDATE UNDEFINED POINTER + POP B,2(A) ;MOVE UNDEFINED VALUE POINTER + POP B,1(A) ;MOVE UNDEFINED SYMBOL + MOVEM W,2(B) ;STORE VALUE + MOVEM C,1(B) ;STORE SYMBOL + POPJ P,; + + ; GLOBAL DEFINITION MATCHES REQUEST + +SYM2: PUSH P,SYM2C ;NEXT MUST BE A SUBROUTINE FOR LATER. SET RETURN +SYM2B: MOVE V,2(A) ;LOAD REQUEST POINTER + PUSHJ P,REMSYM + JUMPL V,SYM2W ;ADDITIVE REQUEST? WFW + PUSHJ P,SYM4A ;REPLACE CHAIN WITH DEFINITION +;WFW PATCH TO LOOK FOR MORE THAN ONE REQUEST +SYM2W1: PUSHJ P,SREQ ;LOOK FOR MORE REQUESTS FOR THIS SYMBOL + JRST SYM2B ;FOUND MORE + MOVE A,SVA ;RESTORE A +;END OF PATCH WFW +SYM2C: POPJ P,SYM1D ;RETURN, SEE SYM2 FOR USE OF ADDRESS +SVA: 0 ;A TEMP CELL WFW + +; REQUEST MATCHES GLOBAL DEFINITION + +SYM2A: MOVE V,W ;LOAD POINTER TO CHAIN + MOVE W,2(A) ;LOAD VALUE + JUMPL V,FIXWP ;HANDLE ATTITIVE REQUEST WFW + JRST SYM4A; REPLACE CHAIN WITH DEFINITION + +; PROCESS GLOBAL REQUEST + +SYM3: TLNE C,040000; COMMON NAME + JRST SYM1B + TLC C,640000; PERMUTE BITS FROM 60 TO 04 + PUSHJ P,SDEF ;SEARCH FOR GLOBAL DEFINITION + JRST SYM2A ;MATCHING GLOBAL DEFINITION + JUMPL W,SYM3X1 ;ADDITIVE FIXUP WFW + PUSHJ P,SREQ ;SEARCH FOR EXISTING REQUEST WFW + JRST SYM3A ;EXISTING REQUEST FOUND WFW +SYM3X1: TLNN W,100000 ;CHECK SYMBOL TABLE FIXUP + JRST SYM3X2 ;NO + MOVE V,1(B) ;MUST BE LAST SYMBOL DEFINED. GET SYMBOL + XOR V,W ;CHECK FOR IDENTITY + TDNE V,[XWD 77777,-1] ;BUT IGNORE HIGH 3 BITS + POPJ P, ;NOT SAME, ASSUME NOT LOADED LOCAL + HRRI W,2(B) ;GET LOCATION IN RIGHT HALF + TLO W,1 + SUB W,JOBREL ;AND MAKE RELATIVE +SYM3X2: CAIL H,(S) ;STORE REQUEST IN UNDEF. TABLE WFW +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> +SYM3X: IFE K,< + TLNE N,F4SW; FORTRAN FOUR + PUSHJ P,MVDWN; ADJUST TABLES IF F4> + SUB S,SE3 ;ADVANCE UNDEFINED POINTER + MOVEM W,2(S) ;STORE UNDEFINED VALUE POINTER + MOVEM C,1(S) ;STORE UNDEFINED SYMBOL + POPJ P,; + + +; COMBINE TWO REQUEST CHAINS + +SYM3A: SKIPL 2(A) ;IS IT ADDITIVE WFW + JRST SYM3A1 ;NO, PROCESS WFW + PUSHJ P,SDEF2 ;YES, CONTINUE WFW + JRST SYM3A ;FOUND ANOTHER WFW + JRST SYM3X2 ;REALLY NO CHAIN THERE WFW +SYM3A1: SUBI A,-2(X) ;A=A-(-2+X(18-35)); A RELATIVE TO X WFW +SYM3B: HRRZ V,A ; SAVE CHAIN ADDRESS FOR HRRM W,@X +IFN L,< CAMGE V,RINITL + HALT ;LOSE LOSE LOSE> + HRRZ A,@X ; LOAD NEXT ADDRESS IN CHAIN + JUMPN A,SYM3B ; JUMP IF NOT THE LAST ADDR. IN CHAIN + HRRM W,@X ;COMBINE CHAINS + POPJ P,; +;LHQ PATCH FOR LISP ABSOLUTE FIXUP PREVENTION +IFN L,< +VTST: 0 + MOVEM V,VSVV# + HRRZS V + CAMGE V,RINITL + POPJ P, + MOVE V,VSVV + JRST @VTST> + +;WFW PATCH FOR ADDITIVE GLOBAL REQUESTS + +FIXWP: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + JRST FIXW + MOVE T,1(B) ;SYMBOL FIXUP, MUST BE LAST SYMBOL DEFINED + XOR T,V ;CHECK FOR SAME + TDNE T,[XWD 77777,-1] ;EXCEPT FOR HEGH CODE BITS + POPJ P, ;ASSUME NON-LOADED LOCAL + HRRI V,2(B) ;GET LOCATION + SUBI V,(X) ;SO WE CAN USE @X +FIXW: TLNE V,200000 ;IS IT LEFT HALF + JRST FIXWL +IFN L,< JSR VTST> + MOVE T,@X ;GET WORD + ADD T,W ;VALUE OF GLOBAL + HRRM T,@X ;FIX WITHOUT CARRY + MOVSI D,200000 ;SET UP TO REMOVE DEFERED INTERNAL IF THERE + JRST SYMFIX +FIXWL: HRLZ T,W ;UPDATE VALUE OF LEFT HALF +IFN L,< JSR VTST> + ADDM T,@X ;BY VALUE OF GLOBAL + MOVSI D,400000 ;LEFT DEFERED INTERNAL +SYMFIX: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + POPJ P, ;NO, RETURN + ADDI V,(X) ;GET THE LOCATION + MOVE T,-1(V) ;GET THE SYMBOL NAME + TLNN T,40000 ;CHECK TO SEE IF INTERNAL + POPJ P, ;NO, LEAVE + ANDCAB D,-1(V) ;REMOVE PROPER BIT + TLNE D,600000 ;IS IT STILL DEFERED? + POPJ P, ;YES, ALL DONE + EXCH C,D ;NO, CHECK FOR A REQUEST FOR IT + PUSHJ P,SREQ + JRST CHNSYM ;YES, WILL HAVE TO CALL THE FIXUP ROUTINE + MOVE C,D ;GET C BACK + POPJ P, +CHNSYM: PUSH P,D ;HAS THE OLD C IN IT + PUSH P,W ;WE MAY NEED IT LATER + MOVE W,(V) ;GET VALUE + PUSHJ P,SYM2B ;CALL THE FOUND GLOBAL TO MATCH REQUEST ROUTINE + POP P,W + POP P,C ;RESTORE FOR CALLER + POPJ P, ;AND GO AWAY + +SYM2W: TLNN V,100000 ;SYMBOL TABLE? + JRST SYM2WA + ADD V,JOBREL ;MAKE ABSOLUTE + SUBI V,(X) ;GET READY TO ADD X + SYM2WA: PUSHJ P,FIXW ;DO FIXUP + JRST SYM2W1 ;AND LOOK FOR MORE REQUESTS + +;END WFW PATCH + + ;PATCH VALUES INTO CHAINED REQUEST +SYM4: +IFN L,< CAMGE V,RINITL + POPJ P,> + HRRZ T,@X ;LOAD NEXT ADDRESS IN CHAIN + HRRM W,@X ;INSERT VALUE INTO PROGRAM + MOVE V,T +SYM4A: JUMPN V,SYM4 ;JUMP IF NOT LAST ADDR. IN CHAIN + POPJ P, + +IFE K,< +MVDWN: HRRZ T,MLTP +IFN EXPAND,< SUBI T,2> + CAIG T,@X; ANY ROOM LEFT? +IFN EXPAND,< JRST [PUSHJ P,XPAND> + TLOA F,FULLSW +IFN EXPAND,< JRST MVDWN + JRST .+2]> + TLNE F,SKIPSW+FULLSW + JRST MVABRT; ABORT BLT + HRREI T,-2 + ADDM T,PLTP; ADJUST PROGRAMMER LABEL POINTER + ADDM T,BITP; AND BIT TABLE POINTER + ADDM T,SDSTP; FIRST DATA STATEMENT + ADDM T,LTC + ADDM T,ITC + TLNE N,SYDAT + ADDM T,V + ADDB T,MLTP; AND FINALLY TO MADE LABEL TABLE + HRLS T; SET UP BLT POINTER + ADD T,[XWD 2,0] + BLT T,(S) +MVABRT: POPJ P,; +> +;HIGHEST RELOCATABLE POINT (BLOCK TYPE 4) +SFULLC: TLOE F,FULLSW ;PREVIOUS OVERFLOW? + JRST FULLC ;YES, DON'T PRINT MESSAGE + JSP A,ERRPT ;NO, COMPLAIN ABT OVERFLO + SIXBIT ?SYMBOL TABLE OVERLAP#? +FULLC: TLO F,FULLSW ;CORE OVERLAP ERROR RETURN +IFE K,< TLNE N,F4SW + POPJ P,> + JRST LIB3 ;LOOK FOR MORE + +HIGH0: CAIE A,4 ; TEST FOR END BLOCK (OVERLAP) + JRST LIB3 +HIGH: PUSHJ P,PRWORD ;READ TWO DATA WORDS + HRR R,C ;SET NEW PROGRAM BREAK + ADDI C,X; BE SURE TO RELOCATE + CAILE C,1(S) ;TEST PROGRAM BREAK +IFN EXPAND,<PUSHJ P,[ PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM2 + POPJ P,]> +IFE EXPAND,<TLO F,FULLSW> +HIGH3: MOVEI A,F.C ;SAVE CURRENT STATE OF LOADER + BLT A,B.C + TLNE F,SLIBSW+LIBSW ;NORMAL MODE EXIT THROUGH LOAD1 + JRST LIB ;LIBRARY SEARCH EXIT + JRST LOAD1 + + ;STARTING ADDRESS (BLOCK TYPE 7) + +START: PUSHJ P,PRWORD ;READ TWO DATA WORDS + TLNN N,ISAFLG ;SKIP IF IGNORE SA FLAG ON + HRR F,C ;SET STARTING ADDRESS + +;PROGRAM NAME (BLOCK TYPE 6) + +NAME: PUSHJ P,PRWORD ;READ TWO DATA WORDS + TLOE N,COMFLG ;SKIP IF COMMON NOT PREV. SET + JRST NAME1 ;SIZE OF COMMON PREV. SET + MOVEM W,COMSAV ;STORE LENGTH OF COMMON + JUMPE W,NAME2 ;JUMP IF NO COMMON IN THIS JOB + HRRI R,@R ;FIRST PROGRAM SET LOAD ORIGIN +NAME1: CAILE H,-1(S) ;TEST FOR AVAIL. SYMBOL SPACE +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> + SUBI S,2 ;UPDATE UNDEF. TABLE POINTER + POP B,2(S) + POP B,1(S) + HRRZ V,N ;POINTER TO PREVIOUS NAME + SUBM B,V ;COMPUTE RELATIVE POSITIONS + HRLM V,2(N) ;STORE FORWARD POINTER + HRR N,B ;UPDATE NAME POINTER +NAME2: MOVEM C,1(B) ;STORE PROGRAM NAME + HRRZM R,2(B) ;STORE PROGRAM ORIGIN + CAMG W,COMSAV ;CHECK COMMON SIZE + JRST LIB3 ;COMMON OK +ILC: JSP A,ERRPT + SIXBIT /ILL. COMMON#/ + JRST LD2 + +;ONE PASS LOCAL DEFINITION (BLOCK TYPE 10) + + ;PMP PATCH FOR LEFT HALF FIXUPS + ;END PMP PATCH +LOCD: PUSHJ P,RWORD ;READ ONE DATA WORD + HLRZ V,W ;STORAGE POINTER IN LEFT HALF + PUSHJ P,SYM4A ;LINK BACK REFERENCES + JRST LOCD + +REMSYM: MOVE T,1(S) + MOVEM T,1(A) + MOVE T,2(S) + MOVEM T,2(A) + ADD S,SE3 + MOVEM A,SVA + POPJ P, + + ;SYMBOL TABLE SEARCH SUBROUTINES + +; ENTERED WITH SYMBOL IN C +; RETURN IS WITH POINTER IN A IF MATCHING SYMBOL FOUND +; OTHERWISE, A SKIP ON RETURN OCCURS + +SREQ: JUMPGE S,CPOPJ1 ;JUMP IF NO UNDEF. SYMBOLS + SKIPA A,S ;LOAD REQUEST SEARCH POINTER +SDEF: MOVE A,B ;LOAD DEF. SYMBOL SEARCH POINTER +SDEF1: CAMN C,1(A) + POPJ P, ;SYMBOLS MATCH, RETURN +SDEF2: ADD A,SE3 + JUMPL A,SDEF1 +IFE K,< JRST CPOPJ1 ;SYMBOL NOT FOUND SKIPS ON RETURN> +IFN K,< +CPOPJ1: AOS (P) ;TRA 2,4 + POPJ P, ;...> + +;RELOCATION AND BLOCK INPUT + +PRWORD: PUSHJ P,RWORD ;READ A WORD PAIR + MOVE C,W ;LOAD C WITH FIRST DATA WORD + TRNE E,377777 ;TEST FOR END OF BLOCK + JRST RWORD1 ;INPUT SECOND WORD OF PAIR + MOVEI W,0 ;NO SECOND WORD, ASSUME ZERO + POPJ P, + +RWORD: TRNN E,377777 ;TEST FOR END OF BLOCK + JRST LOAD1 ;RETURN TO LOAD THE NEXT BLOCK +RWORD1: AOBJN E,RWORD2 ;JUMP IF DATA WORD NEXT + PUSHJ P,WORD ;READ CONTROL WORD + MOVE Q,W ;DON'T COUNT RELOCATION WORDS + HRLI E,-22 ;SET RELOCATION WORD BYTE COUNT +RWORD2: PUSHJ P,WORD ;READ INPUT WORD + JUMPGE Q,RWORD3 ;TEST LH RELOCATION BIT + HRLZ T,R + ADD W,T ;LH RELOCATION +RWORD3: TLNE Q,200000 ;TEST RH RELOCATION BIT + HRRI W,@R ;RH RELOCATION + LSH Q,2 + POPJ P, + + ;PRINT STORAGE MAP SUBROUTINE + +PRMAP: PUSHJ P,FSCN1 ;LOAD OTHER FILES FIRST + PUSHJ P,CRLFLF ;START NEW PAGE + HRRZ W,R + PUSHJ P,PRNUM0 + JSP A,ERRPT7 + SIXBIT ?IS THE PROGRAM BREAK@? + PUSHJ P,CRLF ;START STORAGE MAP + JSP A,ERRPT0 ;PRINT HEADER + SIXBIT ?STORAGE MAP@? + HLRE A,B + MOVNS A + ADDI A,(B) +PRMAP1: SUBI A,2 + SKIPL C,1(A) ;LOAD SYMBOL, SKIP IF DELETED + TLNE C,300000 ;TEST FOR LOCAL SYMBOL + JRST PRMAP4 ;IGNORE LOCAL SYMBOLS + TLNN C,040000 + PUSHJ P,CRLF ;PROGRAM NAME + PUSHJ P,PRNAM1 ;PRINT SYMBOL AND VALUE + TLNE C,040000 + JRST PRMAP3 ;GLOBAL SYMBOL + HLRE C,W ;POINTER TO NEXT PROG. NAME + JUMPGE C,PRMAP2 ;JUMP IF LAST PROGRAM NAME + ADDI C,2(A) ;COMPUTE LOC. OF FOLLOWING NAME + SKIPA T,@C ;LOAD ORIGIN OF FOLLOWING PROG. +PRMAP2: HRRZ T,R ;LOAD PROGRAM BREAK + SUBM T,W ;SUBTRACT ORIGIN TO GET LENGTH + PUSHJ P,PRNUM ;PRINT PROGRAM LENGTH + PUSHJ P,CRLF + TLNN N,ALLFLG ;SKIP IF LIST ALL MODE IS ON + TRNE W,777777 ;SKIP IF ZERO LENGTH PROGRAM + JRST PRMAP3 + JUMPE C,PRMAP5 ;JUMP IF LAST PROGRAM + SKIPA A,C ;SKIP GLOBALS, ZERO LENGTH PROG. +PRMAP3: PUSHJ P,CRLF +PRMAP4: CAILE A,(B) ;TEST FOR END OF SYMBOL TABLE + JRST PRMAP1 +PRMAP5: + + ;LIST UNDEFINED GLOBALS + +PMS: PUSHJ P,FSCN1 ;LOAD FILES FIRST + JUMPGE S,PMS3 ;JUMP IF NO UNDEFINED GLOBALS + HLLOS 42 ;SET SOME ERROR TO ABORT EXECUTION + PUSHJ P,FCRLF ;START THE MESSAGE + PUSHJ P,PRQ ;PRINT ? + HLRE W,S ;COMPUTE NO. OF UNDEF. GLOBALS + MOVMS W + LSH W,-1 ;<LENGTH OF LIST>/2 + PUSHJ P,PRNUM0 + JSP A,ERRPT7 + SIXBIT /UNDEFINED GLOBALS@/ + MOVE A,S ;LOAD UNDEF. POINTER +PMS2: PUSHJ P,CRLF + PUSHJ P,PRQ ;PRINT ? + PUSHJ P,PRNAM0 ;PRINT SYMBOL AND POINTER + ADD A,SE3 + JUMPL A,PMS2 + PUSHJ P,CRLF ;SPACE AFTER LISTING + +;LIST NUMBER OF MULTIPLY DEFINED GLOBALS + +PMS3: SKIPN W,MDG ;ANY MULTIPLY DEFINED GLOBALS + JRST PMS4 ;NO, EXCELSIOR + HLLOS 42 ;ANOTHER WAY TO LOSE + PUSHJ P,FCRLF ;ROOM AT THE TOP + PUSHJ P,PRQ ;PRINT ? + PUSHJ P,PRNUM0 ;NUMBER OF MULTIPLES + JSP A,ERRPT7 ;REST OF MESSAGE + SIXBIT ?MULTIPLY DEFINED GLOBALS@? +PMS4: TLNE N,AUXSWE ;AUXILIARY OUTPUT DEVICE? + OUTPUT 2, ;INSURE A COMPLETE BUFFER + POPJ P, ;RETURN + + ;ENTER FILE ON AUXILIARY OUTPUT DEVICE + +IAD2: ENTER 2,DTOUT ;WRITE FILE NAME IN DIRECTORY + JRST IMD3 ;NO MORE DIRECTORY SPACE + POPJ P, + +IMD3: JSP A,ERRPT ;DIRECTORY FULL ERROR + SIXBIT /DIR. FULL@/ + JRST LD2 + +;PRINT THE 6 DIGIT OCTAL ADDRESS IN W + +; ACCUMULATORS USED: D,T,V + +PRNAM0: MOVE C,1(A) ;LOAD SYMBOL +PRNAM1: MOVE W,2(A) ;LOAD VALUE +PRNAM: PUSHJ P,PRNAME +PRNUM: PUSHJ P,SPACES +PRNUM0: MOVE V,PRNUM2 ;LOAD BYTE POINTER TO RH. OF W + MOVNI D,6 ;LOAD CHAR. COUNT +PRNUM1: ILDB T,V ;LOAD DIGIT TO BE OUTPUT + ADDI T,60 ;CONVERT FROM BINARY TO ASCII + PUSHJ P,TYPE2 + AOJL D,PRNUM1 ;JUMP IF MORE DIGITS REMAIN + POPJ P, + +PRNUM2: XWD 220300,W + +;YE OLDE RECURSIVE NUMBER PRINTER +;PRINTS Q, WITH LEADING ZEROES SUPPRESSED; USES A AND T + +RCNUM: IDIVI Q,12 ;RADIX DECIMAL + ADDI A,"0" + HRLM A,(P) + SKIPE Q + PUSHJ P,RCNUM + HLRZ T,(P) + JRST TYPE2 + + ;PRINT FOUR SPACES + +SPACES: PUSHJ P,SP1 +SP1: PUSHJ P,SPACE +SPACE: MOVEI T,40 + JRST TYPE2 + +;SYMBOL PRINT - RADIX 50 + +; ACCUMULATORS USED: D,T + +PRNAME: MOVE T,C ;LOAD SYMBOL + TLZ T,740000 ;ZERO CODE BITS + MOVNI D,6 ;LOAD CHAR. COUNT +SPT: IDIVI T,50 ;THE REMAINDER IS THE NEXT CHAR. + HRLM V,(P) ;STORE IN LH. OF PUSHDOWN LIST + AOSGE D ;SKIP IF NO CHARS. REMAIN + PUSHJ P,SPT ;RECURSIVE CALL FOR NEXT CHAR. + HLRZ T,(P) ;LOAD FROM LH. OF PUSHDOWN LIST + JUMPE T,TYPE ;BLANK + ADDI T,60-1 + CAILE T,71 + ADDI T,101-72 + CAILE T,132 + SUBI T,134-44 + CAIN T,43 + MOVEI T,56 + JRST TYPE2 +;PRINT A WORD OF SIXBIT CHARACTERS IN AC W + +; ACCUMULATORS USED: Q,T,D + +PWORD: MOVNI Q,6 ;SET CHARACTER COUNT TO SIX +PWORD1: MOVE D,LSTPT ;ENTER HERE WITH Q PRESET +PWORD2: ILDB T,D ;LOAD NEXT CHAR. TO BE OUTPUT + PUSHJ P,TYPE ;OUTPUT CHARACTER + AOJL Q,PWORD2 + POPJ P, + + ;ERROR MESSAGE PRINT SUBROUTINE + +; FORM OF CALL: + +; JSP A,ERRPT +; SIXBIT /<MESSAGE>/ + +; ACCUMULATORS USED: T,V,C,W + +ERRPT: TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,CRLF ;ROOM AT THE TOP + PUSHJ P,PRQ ;START OFF WITH ? +ERRPT0: PUSH P,Q ;SAVE Q + SKIPA V,ERRPT5 +ERRPT1: PUSHJ P,TYPE + ILDB T,V + CAIN T,40 + JRST ERRPT4 + CAIN T,5 + JRST ERRPT9 + CAIE T,3 + JRST ERRPT1 + SKIPN C,DTIN + JRST ERRPT4 + MOVNI Q,14 + MOVEI W,77 +ERRPT2: TDNE C,W + JRST ERRPT3 + LSH W,6 + AOJL Q,ERRPT2 +ERRPT3: MOVE W,ERRPT6 + PUSHJ P,PWORD1 + SKIPN W,DTIN1 + JRST ERRPT4 + LSH W,-6 + TLO W,160000 + MOVNI Q,4 + PUSHJ P,PWORD1 +ERRPT4: PUSHJ P,CRLF +ERRP41: POP P,Q + TLZ F,FCONSW ;ONE ERROR PER CONSOLE + AOS V ;PROGRAM BUMMERS BEWARE: + JRST @V ;V HAS AN INDEX OF A + +ERRPT5: POINT 6,0(A) +ERRPT6: SIXBIT / FILE / + + ERRPT8: TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START WITH ? + CAIGE T,140 ;IS IT A NON-PRINTING CHAR? + CAIL T,40 + JRST ERRP8 + PUSH P,T + MOVEI T,136 ;UP ARROW + PUSHJ P,TYPE2 + POP P,T + ADDI T,100 ;CONVERT TO PRINTING CHAR. +ERRP8: PUSHJ P,TYPE2 +ERRPT7: PUSHJ P,SPACE + JRST ERRPT0 + +ERRPT9: MOVEI V,@V + PUSH P,V + JSP A,ERRPT7 + SIXBIT ?ILLEGAL -LOADER@? + POP P,V + JRST ERRP41 + +;PRINT QUESTION MARK + +PRQ: PUSH P,T ;SAVE + MOVEI T,"?" ;PRINT ? + PUSHJ P,TYPE2 ;... + POP P,T ;RESTORE + POPJ P, ;RETURN + + ;INPUT - OUTPUT INTERFACE + +;BINARY INPUT SUBROUTINE - RETURNS A WORD IN W +IFE K,< +WORDPR: PUSHJ P,WORD ;GET FIRST WORD OF PAIR + MOVE C,W ;KEEP IT HANDY> +WORD: SOSG BUFR2 ;SKIP IF BUFFER NOT EMPTY + JRST WORD2 +WORD1: ILDB W,BUFR1 ;PICK UP 36 BIT WORD + POPJ P, + +WORD2: INPUT 1, ;GET NEXT BUFFER LOAD + STATUS 1,W ;GET DEVICE STATUS FROM MONITOR + TRNE W,IODEND ;TEST FOR EOF + JRST EOF ;END OF FILE EXIT + TRNN W,IOBAD ;TEST FOR DATA ERROR + JRST WORD1 ;DATA OK - CONTINUE LOADING + JSP A,ERRPT ;DATA ERROR - PRINT MESSAGE + SIXBIT /INPUT ERROR#/ + JRST LD2 ;GO TO ERROR RETURN +;TYPEOUT SUBROUTINE - THE CHARACTER SUPPLIED IN T IS CONVERTED TO ASCII +;AND IS OUTPUT ON THE CONSOLE AND/OR THE SPECIFIED LOADER MAP OUTPUT +;DEVICE + +CRLFLF: PUSHJ P,CRLF +FCRLF: TLO F,FCONSW ;INSURE TTY OUTPUT +CRLF: MOVEI T,15 ;CARRIAGE RETURN LINE FEED + PUSHJ P,TYPE2 + MOVEI T,12-40 ;LINE FEED IN PSEUDO SIXBIT +TYPE: MOVEI T,40(T) ;CONVERT SIXBIT TO ASCII +TYPE2: TLNN N,AUXSWI ;IS THER AN AUXILIARY DEVICE? + JRST TYPE3 ;NO, DONT OUTPUT TO IT + TLON N,AUXSWE ;IS AUX. DEV. ENTERED? + PUSHJ P,IAD2 ;NOPE, DO SO! + SOSG ABUF2 ;SPACE LEFT IN BUFFER? + OUTPUT 2, ;CREATE A NEW BUFFER + IDPB T,ABUF1 ;DEPOSIT CHARACTER + TLNN F,FCONSW ;FORCE OUTPUT TO CONSOLE TOO? + POPJ P, ;NOPE +TYPE3: SKIPN BUFO2 ;END OF BUFFER + OUTPUT 3, ;FORCE OUTPUT NOW + IDPB T,BUFO1 ;DEPOSIT CHARACTER + CAIN T,12 ;END OF LINE + OUTPUT 3, ;FORCE AN OUTPUT + POPJ P, + + SE3: XWD 2,2 ;SYMBOL POINTER INCREMENT +LSTPT: POINT 6,W ;CHARACTER POINTER TO W +PDLPT: XWD -41,PDLST-1; INITIAL PUSHDOWN POINTER +COMM: SQUOZE 0,.COMM. +PDSAV: 0 ;SAVED PUSHDOWN POINTER +COMSAV: 0 ;LENGTH OF COMMON +MDG: 0 ;COUNTER FOR MUL DEF GLOBALS +PDLST: BLOCK 40 + +F.C: 0 + 0 ;STORE N HERE + 0 ;STORE X HERE + 0 ;STORE H HERE + 0 ;STORE S HERE + 0 ;STORE R HERE +B.C: 0 +F.I: 0 ;INITIAL F - FLAGS + 0 ;INITIAL N + XWD V,LDEND ;INITIAL X - LOAD PROGRAM AFTER LOADER + EXP LDEND+JOBPRO ;INITIAL H - INITIAL PROG BREAK + 0 ;INITIAL S + XWD W,JOBPRO ;INITIAL R - INITIAL RELOC + 0 ;INITIAL B + ;BUFFER HEADERS AND HEADER HEADERS + +BUFO: 0 ;CONSOLE INPUT HEADER HEADER +BUFO1: 0 +BUFO2: 0 + +BUFI: 0 ;CONSOLE OUTPUT HEADER HEADER +BUFI1: 0 +BUFI2: 0 +ABUF: 0 ;AUXILIARY OUTPUT HEADER HEADER +ABUF1: 0 +ABUF2: 0 + +BUFR: 0 ;BINARY INPUT HEADER HEADER +BUFR1: 0 +BUFR2: 0 + +DTIN: 0 ;DECTAPE INPUT BLOCK +DTIN1: 0 + 0 +DTIN2: 0 + +DTOUT: 0 ;DECTAPE OUTPUT BLOCK +DTOUT1: 0 + 0 + 0 + + TTYL=52 ;TWO TTY BUFFERS +IFE K,< BUFL=406 ;TWO DTA BUFFERS FOR LOAD> +IFN K,< BUFL=203 ;ONE DTA BUFFER FOR LOAD> + ABUFL=203 ;ONE DTA BUFFER FOR AUX DEV +TTY1: BLOCK TTYL ;TTY BUFFER AREA +BUF1: BLOCK BUFL ;LOAD BUFFER AREA +AUX: BLOCK ABUFL ;AUX BUFFER AREA +ZEROS: REPEAT 4,<0> + + IOBKTL=40000 +IOIMPM=400000 + IODERR=200000 + IODTER=100000 + IODEND=20000 + +IOBAD=IODERR+IODTER+IOBKTL+IOIMPM + + INTERN PWORD,DTIN,DTOUT,LDEND + INTERN WORD,LD,BEG,PDLST,LOAD + INTERN CRLF,TYPE,PMS,PRMAP + INTERN F,P,X,H,S,R,B,N,T,V,W,C,E,Q,A,D + + EXTERN JOBDDT,JOBFF,JOBSA,JOBREL,JOBSYM,JOBUSY,JOB41 + +;END HERE IF 1K LOADER REQUESTED. +IFN K, <LITS: LIT + VAR +> + + ;HERE BEGINS FORTRAN FOUR LOADER + +F4LD: + HRRZ V,R; SET PROG BREAK INTO V + MOVEM V,LLC; SAVE FIRST WORD ADDRESS + MOVEI W,-2(S); GENERATE TABLES + TLO N,F4SW + HRRZM W,MLTP; MADE LABELS + HRRZM W,PLTP; PROGRAMMER LABELS + ADD W,[POINT 1,1]; GENERATE BIT-BYTE POINTER + MOVEM W,BITP + MOVEM W,SDSTP; FIRST DATA STATEMENT + AOS SDSTP; + MOVE W,[JRST ALLOVE] ;LAST DATA STATEMENT + MOVEM W,(S) + HRREI W,-^D36; BITS PER WORDUM + MOVEM W,BITC; BIT COUNT + PUSHJ P,BITWX+1 ;MAKE SURE OF ENOUGH SPACE + +TEXTR: PUSHJ P,WORD; TEXT BY DEFAULT + HLRZ C,W + CAIN C,-1 + JRST HEADER; HEADER + MOVEI C,1; RELOCATABLE + PUSHJ P,BITW; SHOVE AND STORE + JRST TEXTR; LOOP FOR NEXT WORD + +ABS: SOSG BLKSIZ; MORE TO GET + JRST TEXTR; NOPE +ABSI: PUSHJ P,WORD; + MOVEI C,0; NON-RELOCATABLE + PUSHJ P,BITW; TYPE 0 + JRST ABS + + ;PROCESS TABLE ENTRIES + +MDLB: TLNE F,FULLSW+SKIPSW; MADE LABEL PROC + JRST GLOBDF; NO ROOM AT THE IN + HLRZ C,MLTP; GET PRESENT SIZE + CAMGE C,BLKSIZ; IF NEW SIZE BIGGER, STR-R-RETCH + PUSHJ P,SMLT + HRRZ C,MLTP; GET BASE +MLPLC: ADD C,BLKSIZ; MAKE INDEX + TLNN F,FULLSW+SKIPSW; DONT LOAD + HRRZM V,(C); PUT AWAY DEFINITION +GLOBDF: PUSHJ P,WORD + TLNE F,FULLSW+SKIPSW ;SKIPPING THIS PROG? + JRST TEXTR ;YES, DON'T DEFINE + MOVEI C,(V); AND LOC + EXCH W,C + PUSHJ P,SYMXX; PUT IN DDT-SYMBOL TABLE + PUSHJ P,BITWX+1 + JRST TEXTR + +PLB: TLNE F,FULLSW+SKIPSW + JRST GLOBDF + HLRZ C,PLTP; PRESENT SIZE + CAMGE C,BLKSIZ + PUSHJ P,SPLT + HRRZ C,PLTP + JRST MLPLC + + ;STORE WORD AND SET BIT TABLE + +BITW: TLNE F,FULLSW+SKIPSW; WE DONT LOAD THIS + POPJ P,; + MOVEM W,@X; STORE AWAY OFFSET + IDPB C,BITP; STORE BIT + AOSGE BITC; STEP BIT COUNT + JRST BITWX; SOME MORE ROOM LEFT + HRREI C,-^D36; RESET COUNT + MOVEM C,BITC + SOS PLTP + SOS BITP; ALL UPDATED +IFE EXPAND,<HRL C,MLTP + SOS MLTP + HRR C,MLTP> +IFN EXPAND,<HRRZ C,MLTP; TO ADDRESS + SUBI C,1 + CAIG C,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADDI C,2000 + JRST POPJM2] + SOS MLTP + HRLI C,1(C)> + HRRZ T,SDSTP; GET DATA POINTER + BLT C,-1(T); MOVE DOWN LISTS +BITWX: AOS V; STEP LOADER LOCATION + HRRZ T,MLTP + CAIG T,@X; OVERFLOW CHECK +IFE EXPAND,<TLO F,FULLSW> +IFN EXPAND,<PUSHJ P, [PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM3 + POPJ P,]> + POPJ P,; + +SMLT: SUB C,BLKSIZ; STRETCH + MOVS W,MLTP ;LEFT HALF HAS OLD BASE + ADD C,MLTP ;RIGHT HALF HAS NEW BASE +IFN EXPAND,< HRRZS C ;GET RID OF COUNT + CAIG C,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADD W,[XWD 2000,0] + ADDI C,2000 + JRST POPJM2]> + HRRM C,MLTP ;PUT IN NEW MLTP + HLL C,W ;FORM BLT POINTER + ADDI W,(C) ;LAST ENTRY OF MLTP + HRL W,BLKSIZ ;NEW SIZE OF MLTP + HLLM W,MLTP ;... +SLTC: BLT C,0(W); MOVE DOWN (UP?) + POPJ P,; + +SPLT: SUB C,BLKSIZ + MOVS W,MLTP; + ADDM C,PLTP + ADD C,MLTP +IFN EXPAND,< HRRZS C + CAIG C,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADD W,[XWD 2000,0] + ADDI C,2000 + JRST POPJM2]> + HRRM C,MLTP ;PUT IN NEW MLTP + HLL C,W + HLRZ W,PLTP ;OLD SIZE OF PL TABLE + ADD W,PLTP ;NEW BASE OF PL TABLE + HRL W,BLKSIZ ;NEW SIZE OF PL TABLE + HLLM W,PLTP ;INTO POINTER + JRST SLTC + +PT1: 0 + + + ;PROCESS END CODE WORD + +ENDS: PUSHJ P,WORD; GET STARTING ADDRESS + TLNE F,SKIPSW + JRST ENDS1 ;FOOBAZ!!!!!!!! + JUMPE W,ENDS1; NOT MAIN + ADDI W,(R); RELOCATION OFFSET + TLNN N,ISAFLG; IGNORE STARTING ADDRESS + HRR F,W; SET SA +ENDS1: PUSHJ P,WORDPR ;DATA STORE SIZE + HRRZM C,PTEMP ;NUMBER OF PERMANENT TEMPS + MOVEM V,CCON; START OF CONSTANTS AREA + JUMPE W,E1; NULL + MOVEM W,BLKSIZ ;SAVE COUNT + MOVEI W,0(V) ;DEFINE CONST. + MOVE C,CNR50 ;... + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMPT ;... + PUSHJ P,GSWD ;STORE CONSTANT TABLE +E1: MOVEI W,0(V); GET LOADER LOC + EXCH W,PTEMP; STORE INTO PERM TEMP POINTER + ADD W,PTEMP; FORM TEMP TEMP ADDRESS + MOVEM W,TTEMP; POINTER + MOVEM V,GSTAB; STORE LOADER LOC IN GLOBSUB + MOVE C,TTR50 ;DEFINE %TEMP. + TLNE F,SKIPSW!FULLSW + JRST E1A + PUSHJ P,SYMPT ;... + MOVE C,PTR50 ;DEFINE (IF EXTANT) TEMP. + MOVEI W,0(V) ;... + CAME W,TTEMP ;ANY PERM TEMPS? + PUSHJ P,SYMPT ;YES, DEFINE +E1A: PUSHJ P,WORD; NUMBER OF GLOBSUBS + JUMPE W,E11 + MOVEM W,BLKSIZ ;SIZE OF GLOBSUB + PUSHJ P,GSWD ;STORE GLOBSUB TABLE +E11: MOVEM V,STAB; SCALARS + PUSHJ P,WORD; HOW MANY? + JUMPE W,E21; NONE + PUSHJ P,GSWDPR ;STORE SCALAR TABLE +E21: MOVEM V,ATAB; ARRAY POINTER + PUSHJ P,WORD; COMMENTS FOR SCALARS APPLY + JUMPE W,E31 + PUSHJ P,GSWDPR ;STORE ARRAY TABLE +E31: MOVEM V,AOTAB; ARRAYS OFFSET + PUSHJ P,WORD; SAME COMMENTS AS ABOVE + JUMPE W,E41 + PUSHJ P,GSWDPR ;STORE ARRAY OFFSET TABLE +E41: PUSHJ P,WORD; TEMP, SCALAR, ARRAY SIZE + TLNE F,FULLSW!SKIPSW ;SKIPPING THIS PROG? + MOVEI W,0 ;DON'T ACCEPT GLOB SUBPROG REQUESTS + MOVEM V,CTAB; SETUP COMMON TABLE POINTER + ADD W,GSTAB; GLOBAL SUBPROG BASE + MOVEM W,COMBAS; START OF COMMON + PUSHJ P,WORD; COMMON BLOCK SIZE + HRRZM W,BLKSIZ + JUMPE W,PASS2; NO COMMON +COMTOP: PUSHJ P,WORDPR ;GET A COMMON PAIR + PUSHJ P,SDEF; SEARCH + JRST COMYES; ALREADY THERE + HRLS W + HRR W,COMBAS; PICK UP THIS COMMON LOC + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMXX; DEFINE IT + MOVS W,W; SWAP HALFS + ADD W,COMBAS; UPDATE COMMON LOC + HRRM W,COMBAS; OLD BASE PLUS NEW SIZE + HLRZS W; RETURN ADDRESS + TLZ C,400000 + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMXX +COMCOM: PUSHJ P,CWSTWX ;STORE A WORD PAIR + SOS BLKSIZ + SOSLE BLKSIZ + JRST COMTOP + JRST PASS2 + +COMYES: TLNE F,SKIPSW + JRST COMCOM ;NO ERRORS IF SKIPPING + HLRZ C,2(A); PICK UP DEFINITION + CAMLE W,C; CHECK SIZE + JRST ILC; ILLEGAL COMMON + MOVE C,1(A); NAME + HRRZ W,2(A); BASE + JRST COMCOM + + +PRSTWX: PUSHJ P,WORDPR ;GET A WORD PAIR +CWSTWX: EXCH C,W ;SPACE TO STORE FIRST WORD OF PAIR? + PUSHJ P,WSTWX ;... + EXCH C,W ;THERE WAS; IT'S STORED +WSTWX: TLNE F,FULLSW!SKIPSW ;SPACE FOR ANOTHER WORD? + POPJ P, ;NOPE, RETURN + MOVEM W,@X ;YES, STORE IT. + JRST BITWX ;TELL THE TABLES ABOUT IT; THEN RETURN + + +GSWD: PUSHJ P,WORD ;GET WORD FROM TABLE + PUSHJ P,WSTWX ;STASH IT + SOSE BLKSIZ ;FINISHED? + JRST GSWD ;NOPE, LOOP + POPJ P, ;TRA 1,4 + +GSWDPR: MOVEM W,BLKSIZ ;KEEP COUNT +GSWDP1: PUSHJ P,PRSTWX ;GET AND STASH A PAIR + SOS BLKSIZ ;FINISHED? + SOSLE BLKSIZ ;... + JRST GSWDP1 ;NOPE, LOOP + POPJ P, ;TRA 1,4 + + ;BEGIN HERE PASS2 TEXT PROCESSING + +PASS2: ADDI V,(X) + MOVEM V,TOPTAB ;SAVE FOR OVERLAP CHECKING + TLNE F,FULLSW+SKIPSW; ABORT? + JRST ALLOVE; YES + MOVE V,LLC ;PICK UP PROGRAM ORIGIN + CAML V,CCON ;IS THIS A PROGRAM? + JRST FBLKD ;NO, GO LOOK FOR FIRST BLK DATA + TLOE N,PGM1 ;YES, IS THIS FIRST F4 PROG? + JRST NOPRG ;NO + HRR W,COMBAS ;YES, PLACE PROG BREAK IN LH +IFE L,< HRLM W,JOBCHN(X) ;FOR CHAIN> +NOPRG: HRRZ W,PLTP; GET PROG TABLE BASE + HLRZ C,PLTP; AND SIZE + ADD W,C; COMPUTE END OF PROG TABLE + ADD W,[POINT 1,1]; AND BEGINNING OF BIT TABLE + EXCH W,BITP; SWAP POINTERS +PASS2B: ILDB C,BITP; GET A BIT + JUMPE C,PASS2C; NO PASS2 PROCESSING + PUSHJ P,PROC; PROCESS A TAG + JRST PASS2B; MORE TO COME + JRST ENDTP; + +PROC: LDB C,[POINT 6,@X,23]; TAG + SETZM MODIF; ZERO TO ADDRESS MODIFIER + TRZE C,40; + AOS MODIF + HRLM C,ENDTAB; ERROR SETUP + MOVEI W,TABDIS; HEAD OF TABLE + HLRZ T,(W); GET ENTRY + CAME T,C; CHECK + AOJA W,.-2 + HRRZ W,(W); GET DISPATCH + LDB C,[POINT 12,@X,35] + JRST (W); DISPATCH + +TABDIS: XWD 11,PCONS; CONSTANTS + XWD 06,PGS; GLOBAL SUBPROGRAMS + XWD 20,PST; SCALARS + XWD 22,PAT; ARRAYS + XWD 01,PATO; ARRAYS OFFSET + XWD 00,PPLT; PROGRAMMER LABELS + XWD 31,PMLT; MADE LABESL + XWD 26,PPT; PERMANENT TEMPORARYS + XWD 27,PTT; TEMPORARY TEMPORARYS +ENDTAB: XWD 00,LOAD4A; ERRORS + +PASS2C: PUSHJ P,PASS2A + JRST PASS2B + JRST ENDTP + + ;DISPATCH ON A HEADER + +HEADER: CAMN W,[EXP -2]; END OF PASS ONE + JRST ENDS + LDB C,[POINT 12,W,35]; GET SIZE + MOVEM C,BLKSIZ + ANDI W,770000 + JUMPE W,PLB; PROGRAMMER LABEL + CAIN W,500000; ABSOLUTE BLOCK + JRST ABSI; + CAIN W,310000; MADE LABEL + JRST MDLB; MADE LABEL + CAIN W,600000 + JRST GLOBDF + CAIN W,700000; DATA STATEMENT + JRST DATAS + JRST LOAD4A; DATA STATEMENTS WILL GO HERE + +TOPTAB: 0 ;TOP OF TABLES +CTAB: 0; COMMON +ATAB: 0; ARRAYS +STAB: 0; SCALARS +GSTAB: 0; GLOBAL SUBPROGS +AOTAB: 0; OFFSET ARRAYS +CCON: 0; CONSTANTS +PTEMP: 0; PERMANENT TEMPS +TTEMP: 0; TEMPORARY TEMPS +COMBAS: 0; BASE OF COMMON +LLC: 0; PROGRAM ORIGIN +BITP: 0; BIT POINTER +BITC: 0; BIT COUNT +PLTP: 0; PROGRAMMER LABEL TABLE +MLTP: 0; MADE LABEL TABLE +SDS: 0 ;START OF DATA STATEMENTS +SDSTP: 0 ;START OF DATA STATEMENTS POINTER +BLKSIZ: 0; BLOCK SIZE +MODIF: 0; ADDRESS MODIFICATION +1 +TTR50: XWD 136253,114765 ;RADIX 50 %TEMP. +PTR50: XWD 100450,614765 ;RADIX 50 TEMP. +CNR50: XWD 112320,235025 ;RADIX 50 CONST. + + ;ROUTINES TO PROCESS POINTERS + +PCONS: ADD C,CCON; GENERATE CONSTANT ADDRESS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PSTA: PUSHJ P,SWAPSY ;NON-COMMON SCALARS AND ARRAYS + ADDI C,(R); RELOCATE +PCOM1: PUSHJ P,SYDEF ;... +PCOMX: ADD C,MODIF ;ADDR RELOC FOR DP + HRRM C,@X; REPLACE ADDRESS +PASS2A: AOS V; STEP READOUT POINTER + CAML V,CCON ;END OF PROCESSABLES? +CPOPJ1: AOS (P); SKIP + POPJ P,; + +PAT: SKIPA W,ATAB ;ARRAY TABLE BASE +PST: MOVE W,STAB ;SCALAR TABLE BASE + ROT C,1 ;SCALE BY 2 + ADD C,W ;ADD IN TABLE BASE + ADDI C,-2(X); TABLE ENTRY + HLRZ W,(C); CHECK FOR COMMON + JUMPE W,PSTA; NO COMMON + PUSHJ P,COMDID ;PROCESS COMMON + JRST PCOM1 + +COMDID: LSH W,1 ;PROCESS COMMON TABLE ENTRIES + ADD W,CTAB; COMMON TAG + ADDI W,-2(X); OFFSET + PUSHJ P,SWAPSY; GET SYMBOL AND SET TO DEFINED + ADD C,1(W); BASE OF COMMON + POPJ P, ;RETURN + +PATO: ROT C,1 + ADD C,AOTAB; ARRAY OFFSET + ADDI C,-2(X); LOADER OFFSET + MOVEM C,CT1; SAVE CURRENT POINTER + HRRZ C,1(C); PICK UP REFERENCE POINTER + ANDI C,7777; MASK TO ADDRESS + ROT C,1; ALWAYS A ARRAY + ADDI C,-2(X) + ADD C,ATAB + HLRZ W,(C); COMMON CHECK + JUMPE W,NCO + PUSHJ P,COMDID ;PROCESS COMMON + PUSHJ P,SYDEF + MOVE C,CT1 + HRRE C,(C) + ADD C,1(W) + JRST PCOMX + + NCO: PUSHJ P,SWAPSY; + ADDI C,(R) ;DEFINE SYMBOL IN TRUE LOC + PUSHJ P,SYDEF ;... + MOVE C,CT1 + HRRZ C,(C) ;OFFSET ADDRESS PICKUP + ADDI C,(R) ;WHERE IT WILL BE + JRST PCOMX ;STASH ADDR AWAY + +PTT: ADD C,TTEMP; TEMPORARY TEMPS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PPT: ADD C,PTEMP; PERMANENT TEMPS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PGS: ADD C,GSTAB; GLOBSUBS + ADDI C,-1(X); OFFSET + MOVE C,(C) + TLC C,640000; MAKE A REQUEST + PUSHJ P,TBLCHK ;CHECK FOR OVERLAP + MOVEI W,(V); THIS LOC + HLRM W,@X; ZERO RIGHT HALF + PUSHJ P,SYMXX + JRST PASS2A + +SYDEF: TLNE N,SYDAT ;SYMBOL WANTS DEFININITION? + POPJ P, ;NO, GO AWAY + PUSH P,C ;SAVE THE WORLD + PUSH P,W + PUSHJ P,TBLCHK ;CHECK FOR OVERLAP + MOVE W,C + SKIPE C,T ;PICKUP VALUE + PUSHJ P,SYMXX + POP P,W + POP P,C + POPJ P,; + +PMLT: ADD C,MLTP + SKIPA +PPLT: ADD C,PLTP + HRRZ C,(C) + JRST PCOMX + +SYMXX: PUSH P,V + PUSHJ P,SYMPT + POP P,V + POPJ P,; + +SWAPSY: MOVEI T,0; SET TO EXCHANGE DEFS + EXCH T,1(C); GET NAME + HRRZ C,(C) ;GET VALUE + POPJ P, +TBLCHK: HRRZ W,MLTP ;GETT TOP OV TABLES + SUBI W,2 + CAMG W,TOPTAB ;WILL IT OVERLAP +IFE EXPAND,<TLO F,FULLSW> +IFN EXPAND,< JRST [PUSHJ P,XPAND + TLOA F,FULLSW + JRST TBLCHK + JRST .+1]> + POPJ P, + + ;END OF PASS2 + +ALLOVE: TLZ N,F4SW ;END OF F4 PROG + TLNE F,FULLSW!SKIPSW + JRST HIGH3 + HRR R,COMBAS ;TOP OF THE DATA + HRR V,R ;IS THIS THE HIGHEST LOC YET? + CAIG H,@X ;... + MOVEI H,@X ;YES, TELL THE WORLD + CAMG H,SDS ;HIGHEST LOC GREATER THAN DATA STATEMENTS? + JRST HIGH3 ;NO, RETURN + ADDI H,1(S) ;YES, SET UP MEANINGFUL ERROR COMMENT + SUB H,SDS ;... + TLO F,FULLSW ;INDICATE OVERFLO + JRST HIGH3 ;RETURN + +DATAS: TLNE F,FULLSW+SKIPSW + JRST DAX + MOVEI C,(S) ;ADDR OF WORD UNDER SYMBOL TABLE + MOVN W,BLKSIZ ;HOW FAR DOWN TO BLT + ADDM W,PLTP ;UPDATE TABLE POINTERS + ADDM W,BITP ;... + ADDM W,SDSTP ;... + ADD C,W ;RH(C):= WHEN TO STOP BLT + HRL C,MLTP ;SOURCE OF BLTED DATA + ADD W,MLTP ;UPDATE, GET DESTINATION OF BLT DATA +IFN EXPAND,< HRRZS W ;GET RID OF LEFT HALF + CAIG W,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADDI W,2000 + ADD C,[XWD 2000,2000] + JRST POPJM2]> + HRRM W,MLTP ;NO SET THIS SO EXTRA CORE NOT ZEROED + HLL W,C ;FORM BLT POINTER + BLT W,-1(C) ;MOVE TABLES DOWN (BUT NOT JRST ALLOVE) + PUSHJ P,BITWX+1 +DAX: PUSHJ P,WORD; READ ONE WORD + TLNN F,FULLSW+SKIPSW + MOVEM W,(C) + SOSLE BLKSIZ ;COUNT OF DATA SEQUENCE SIZE + AOJA C,DAX ;INCREMENT DATA SEQUENCE DEPOSIT LOC + JRST TEXTR; DONE + + FBLKD: TLOE N,BLKD1 ;IS THIS FIRST BLOCK DATA? + JRST ENDTP ;NO + HRR V,COMBAS ;PLACE PROG BREAK IN RH FOR +IFE L,< HRRM V,JOBCHN(X) ;CHAIN> +ENDTP: TLNE F,FULLSW+SKIPSW + JRST ALLOVE + HRR V,GSTAB +ENDTP0: CAML V,STAB; ANY MORE GLOBSUBS + JRST ENDTP2; NO + MOVE C,@X; GET SUBPROG NAME + PUSHJ P,SREQ; IS IT ALLREADY REQUESTED + AOJA V,ENDTP0; YES + PUSHJ P,SDEF; OR DEFINED + AOJA V,ENDTP0; YES + PUSHJ P,TBLCHK + MOVEI W,0 ;PREPARE DUMMY LINK + TLNN F,FULLSW+SKIPSW; ABORT + PUSHJ P,SYM3X; PUT IN DUMMY REQUEST + PUSHJ P,BITWX+1; OVERLAP CHECK + AOJA V,ENDTP0 +ENDTP2: SETZM PT1 + HRR V,SDSTP +IFN EXPAND,< SUBI V,(X) + CAMG V,COMBAS + JRST [PUSHJ P,XPAND + TLOA F,FULLSW + JRST .-3 + JRST .+1] + HRR V,SDSTP> + HRRZM V,SDS ;DATA STATEMENT LOC +ENDTP1: SUBI V,(X); COMPENSATE FOR OFFSET + MOVE W,@X; GET WORD + TLNE W,-1; NO LEFT HALF IMPLIES COUNT + JRST DODON; DATA DONE + ADD W,[MOVEI W,3] + ADDI W,@X + EXCH W,@X + AOS V + ADD W,@X; ITEMS COUNT + MOVEM W,ITC + MOVE W,[MOVEM W,LTC] + MOVEM W,@X; SETUP FOR DATA EXECUTION + AOS V + MOVE W,[MOVEI W,0] + EXCH W,@X + MOVEM W,ENC; END COUNT + AOS V + MOVEI W,@X + ADDM W,ITC +LOOP: MOVE W,@X + HLRZ T,W; LEFT HALF INST. + ANDI T,777000 + CAIN T,254000 ;JRST? + JRST WRAP ;END OF DATA + CAIN T,260000 ;PUSHJ? + JRST PJTABL(W) ;DISPATCH VIA TABLE + CAIN T,200000; MOVE? + AOJA V,INNER + CAIN T,270000; ADD? + JRST ADDOP + CAIN T,221000; IMULI? + AOJA V,LOOP + CAIE T,220000; IMUL? + JRST LOAD4A; NOTA +INNER: HRRZ T,@X; GET ADDRESS + TRZE T,770000; ZERO TAG? + SOJA T,CONPOL; NO, CONSTANT POOL + SUB T,PT1; SUBTRACT INDUCTION NUMBER + ASH T,1 + SOS T; FORM INDUCTION POINTER + HRRM T,@X + HLRZ T,@X + ADDI T,P + HRLM T,@X + AOJA V,LOOP + + CONPOL: ADD T,ITC; CONSTANT BASE + HRRM T,@X + AOJA V,LOOP + +ADDOP: HRRZ T,@X + TRZE T,770000 + SOJA T,CONPOL +SKIPIN: AOJA V,LOOP + +PJTABL: JRST DWFS ;PUSHJ 17,0 + AOSA PT1 ;INCREMENT DO COUNT + SOSA PT1; DECREMENT DO COUNT + SKIPA W,[EXP DOINT.] + MOVEI W,DOEND. + HRRM W,@X + AOJA V,SKIPIN ;SKIP A WORD + +DWFS: MOVEI W,DWFS. + HRRM W,@X + AOS V + TLO N,SYDAT + PUSHJ P,PROC; PROCESS THE TAG + JRST LOAD4A ;DATA STATEMENT BELOW CODE TOP + JRST LOOP ;PROPER RETURN + +DOINT.: POP P,V; GET ADDRESS OF INITIAL VALUE + PUSH P,(V); STORE INDUCTION VARIABLE + AOS V + PUSH P,V; INITIAL ADDRESS + JRST (V) + +DOEND.: HLRZ T,@(P) + ADDM T,-2(P); INCREMENT + HRRZ T,@(P); GET FINAL VALUE + CAMGE T,-2(P); END CHECK + JRST DODONE; WRAP IT UP + POP P,(P); BACK UP POINTER + JRST @(P) + + DODONE: POP P,-1(P); BACK UP ADDRESS + POP P,-1(P) + JRST CPOPJ1 ;RETURN + +WRAP: MOVE W,ENC; NUMBER OF CONSTANTS + ADD W,ITC; CONSTANT BASE + MOVEI C,(W); CHAIN + HRRM C,@X + MOVEI V,(W); READY TO GO + JRST ENDTP1 + +DODON: TLZ N,RCF!SYDAT!DZER ;DATA STATEMENT FLAGS + MOVE W,PTEMP ;TOP OF PROG + ADDI W,(X) ;+OFFSET + MOVE C,COMBAS ;TOP OF DATA + ADDI C,(X) ;+OFFSET +SECZER: CAML W,C ;ANY DATA TO ZERO? + JRST @SDS ;NO, DO DATA STATEMENTS + CAML W,SDS ;IS DATA BELOW DATA STATEMENTS? + TLO F,FULLSW ;NO, INDICATE OVERFLO + TLNN F,FULLSW+SKIPSW ;SHOULD WE ZERO? + SETZM (W) ;YES, DO SO + TLON N,DZER ;GO BACK FOR MORE? + AOJA W,SECZER ;YES, PLEASE + CAMLE C,SDS ;ALL DATA BELOW DATA STATEMENTS? + MOVE C,SDS ;ALL ZEROED DATA MUST BE + HRLI W,-1(W) ;SET UP BLT POINTER TO ZERO DATA + TLNN F,FULLSW+SKIPSW ;SHOULD WE ZERO? + BLT W,-1(C) ;YES, DO SO + JRST @SDS ;GO DO DATA STATEMENTS + + DREAD: TLNE N,RCF; NEW REPEAT COUNT NEEDED + JRST FETCH; NO + MOVE W,LTC + MOVEM W,LTCTEM + MOVE W,@LTC; GET A WORD + HLRZM W,RCNT; SET REPEAT COUNT + HRRZM W,WCNT; SET WORD COUNT + POP W,(W); SUBTRACT ONE FROM BOTH HALFS + HLLM W,@LTC; DECREMENT REPEAT COUNT + AOS W,LTC; STEP READOUT + TLO N,RCF +FETCH: MOVE W,@LTC + AOS LTC + SOSE WCNT + POPJ P,; + SOSN RCNT + JRST DOFF. + MOVE V,LTCTEM; RESTORE READOUT + MOVEM V,LTC +DOFF.: TLZ N,RCF; RESET DATA REPEAT FLAG + POPJ P,; + +DWFS.: MOVE T,(P) + AOS (P) + MOVE T,(T); GET ADDRESS + HLRZM T,DWCT; DATA WORD COUNT + HRRES T + ADD T,W; OFFSET + ADDI T,(X); LOADER OFFSET +DWFS.1: PUSHJ P,DREAD ;GET A DATA WORD + CAML T,SDS ;BELOW BEGINNING OF DATA STATEMENTS + TLO F,FULLSW ;YES, INDICATE OVERFLO + TLNN F,FULLSW+SKIPSW ;LOAD THE NEXT DATA ITEM? + MOVEM W,(T) ;YES, STORE IT + AOS T + SOSE W,DWCT; STEP DOWN AND TEST + JRST DWFS.1 ;ONE MORE TIME, MOZART BABY! + POPJ P,; + + + ;LITERAL TABLE + +LITS: LIT + VAR +CT1: 0 ;TEMP FOR C +LTC: 0 +ITC: 0 +ENC: 0 +WCNT: 0 ;DATA WORD COUNT +RCNT: 0 ;DATA REPEAT COUNT + +LTCTEM: 0 ;TEMP FOR LTC +DWCT: 0 ;DATA WORD COUNT +IFE L,< +LDEND: END LD + > +IFN L,< +LDEND: +LODMAK: MOVEI A,LODMAK + MOVEM A,137 + INIT 17 + SIXBIT /DSK/ + 0 + HALT + ENTER LMFILE + HALT + OUTPUT [IOWD 1,LMLST ;OUTPUT LENGTH OF FILE + 0] + OUTPUT LMLST + STATZ 740000 + HALT + RELEASE + CALL [SIXBIT /EXIT/] + +LMFILE: SIXBIT /LISP/ + SIXBIT /LOD/ + 0 + 0 + +LMLST: IOWD LODMAK+1-LD,137 + 0 + + END LODMAK> diff --git a/src/loader.v25 b/src/loader.v25 new file mode 100644 index 0000000..40bec91 --- /dev/null +++ b/src/loader.v25 @@ -0,0 +1,3168 @@ + SUBTTL DICK GRUEN: V25 3 AUG 68 + + +L==1 ;L=1 MEANS THE LISP LOADER +IFNDEF L,<L=0> + +IFNDEF HE,<HE=0> +IFE HE-1,<K=1> ;HE=1 IS HAND EYE 1K LOADER +IFE HE-2,<K=0> ;HE=2 IS HAND-EYE FORTRAN LOADER +;K=1 ;K=1 MEANS 1KLOADER +IFNDEF K,<K=0> ;K=0 MEANS F4 LOADER + +STANSW=1 ;GIVES STANFORD FEATURES +IFNDEF STANSW,<STANSW=0> +IFN STANSW,< LDAC=1 + EXPAND=1 + BLTSYM=1 + PP=1 + RPGSW=1 + FAILSW=1> +IFN L,< RPGSW=0 + BLTSYM=0 + LDAC=0> + +UTAHSW=1 ;NUMERIC PPN'S, BUT OTHERWISE = STANSW=1. +IFNDEF UTAHSW,<UTAHSW=0> + +;FAILSW=1 ;MEANS INCLUDE PROVISIONS FOR SPECIAL FAIL FIXUPS +IFNDEF FAILSW,<FAILSW=0> + +;RPGSW=1 ;MEANS RPG FEATURE +IFNDEF RPGSW,<RPGSW=0> +;LDAC=1 ;MEANS LOAD CODE INTO ACS +IFNDEF LDAC,<LDAC=0> + +;BLTSYM=1 ;MOVE SYMBOL TABLE DOWN TO END OF PROG +IFNDEF BLTSYM,<BLTSYM=0> + +;EXPAND=1 ;FOR AUTOMATIC CORE EXPANSION +IFNDEF EXPAND,< IFN K,<EXPAND=0> + IFE K,<EXPAND=1>> + +;PP=1 ;ALLOW PROJ-PROG # +IFNDEF PP,<PP=0> +IFN HE,<RPGSW=0 + PP=0 + LDAC=0 + EXPAND=1 + > + +;CHN5=0 ;IF CHAIN WHICH DOESN'T SAVES JOB41 +IFNDEF CHN5,<CHN5=1> + +IFE K,< TITLE LOADER - LOADS MACROX AND SIXTRAN FOUR> +IFN K,< TITLE 1KLOAD - LOADS MACROX> + ;ACCUMULATOR ASSIGNMENTS + F=0 ;FLAGS IN LH, SA IN RH + N=1 ;PROGRAM NAME POINTER + X=2 ;LOADER OFFSET + H=3 ;HIGHEST LOC LOADED + S=4 ;UNDEFINED POINTER + R=5 ;RELOCATION CONSTANT + B=6 ;SYMBOL TABLE POINTER + D=7 + T=10 + V=T+1 + W=12 ;VALUE + C=W+1 ;SYMBOL + E=C+1 ;DATA WORD COUNTER + Q=15 ;RELOCATION BITS + A=Q+1 ;SYMBOL SEARCH POINTER + P=17 ;PUSHDOWN POINTER +;FLAGS F(0 - 17) + CSW==1 ;ON - COLON SEEN + ESW==2 ;ON - EXPLICIT EXTENSION IDENT. + SKIPSW==4 ;ON - DO NOT LOAD THIS PROGRAM + FSW==10 ;ON - SCAN FORCED TO COMPLETION + FCONSW==20 ;ON - FORCE CONSOLE OUTPUT + ASW==100 ;ON - LEFT ARROW ILLEGAL + FULLSW==200 ;ON - STORAGE EXCEEDED + SLIBSW==400 ;ON - LIB SEARCH IN THIS PROG + DSYMSW==1000 ;ON - LOAD WITH SYMBOLS FOR DDT + REWSW==2000 ;ON - REWIND AFTER INIT + LIBSW==4000 ;ON - LIBRARY SEARCH MODE + F4LIB==10000 ;ON - F4 LIBRARY SEARCH LOOKUP + ISW==20000 ;ON - DO NOT PERFORM INIT + SYMSW==40000 ;ON - LOAD LOCAL SYMBOLS + DSW==100000 ;ON - CHAR IN IDENTIFIER + NSW==200000 ;ON - SUPPRESS LIBRARY SEARCH + SSW==400000 ;ON - SWITCH MODE +;FLAGS N(0 - 17) + ALLFLG==1 ;ON - LIST ALL GLOBALS + ISAFLG==2 ;ON - IGNORE STARTING ADDRESSES + COMFLG==4 ;ON - SIZE OF COMMON SET +IFE K,< F4SW==10 ;F4 IN PROGRESS + RCF==20 ;READ DATA COUNT + SYDAT==40 ;SYMBOL IN DATA> + SLASH==100 ;SLASH SEEN +IFE K,< BLKD1==200 ;ON- FIRST BLOCK DATA SEEN + PGM1==400 ;ON FIRST F4 PROG SEEN + DZER==1000 ;ON - ZERO SECOND DATA WORD> + EXEQSW==2000 ;IMMEDIATE EXECUTION + DDSW==4000 ;GO TO DDT +IFN RPGSW,<RPGF==10000 ;IN RPG MODE> + AUXSWI==20000 ;ON - AUX. DEVICE INITIALIZED + AUXSWE==40000 ;ON - AUX. DEVICE ENTERED +IFN PP,<PPSW==100000 ;ON - READING PROJ-PROG # + PPCSW==200000 ;ON - READING PROJ #> +IFN FAILSW,<HSW==400000 ;USED IN BLOCK 11 POLISH FIXUPS> + LOC 137 +OCT 25 ;VERSION # +RELOC + MLON + SALL + + + +;MONITOR LOCATIONS IN THE USER AREA + + JOBPRO==140 ;PROGRAM ORIGIN + JOBBLT==134 ;BLT ORIGIN + JOBCHN==131 ;RH = PROG BREAK OF FIRST BLOCK DATA + ;LH = PROG BREAK OF FIRST F4 PROG + +;CALLI DEFINITIONS + +CDDTOUT==3 ;CALLI DDTOUT +CEXIT==12 ;CALLI EXIT +CDDTGT==5 ;CALLI DDTGT +CSETDDT==2 ;CALLI SETDDT + +;LENGTH OF PUSHDOWN LIST FOR POLISH FIXUPS + +PPDL==60 + IFN RPGSW,< +RPGSET: CALLI 0 + INIT 17,1 ;SET UP DSK + SIXBIT /DSK/ + XWD 0,CTLIN + JRST NUTS + MOVE [SIXBIT /QQLOAD/] ;NAME OF COMMAND FILE + MOVEM CTLNAM + MOVSI (SIXBIT /RPG/) ;AND EXT + MOVEM CTLNAM+1 + SETZM CTLNAM+3 + LOOKUP 17,CTLNAM ;THERE? + JRST NUTS ;NO + INIT 16,16 ;GET SET TO DELETE QQLOAD.RPG + SIXBIT /DSK/ + 0 + JRST LD ;GIVE UP COMPLETELY + SETZM CTLNAM+3 + HLLZS CTLNAM+1 ;CLEAR OUT EXTRA JUNK + LOOKUP 16,CTLNAM + JRST LD + RENAME 16,ZEROS ;DELETE IT + JFCL ;IGNORE IF IT WILL NOT GO + RELEASE 16,0 ;GET RID OF THIS DEVICE + SETZM NONLOD ;THIS IS NOT A CONTINUATION +RPGS3: MOVEI CTLBUF + MOVEM JOBFF ;SET UP BUFFER + INBUF 17,1 + MOVEI [ASCIZ / +LOADING +/] ;PRINT MESSAGE THAT WE ARE STARTING + CALLI CDDTOUT + SKIPE NONLOD ;CONTINUATION? + JRST RPGS2 ;YES, SPECIAL SETUP + MOVSI R,F.I ;NOW SO WE CAN SET FLAG + BLT R,R + TLO N,RPGF + JRST CTLSET ;SET UP TTY +RPGS1: PUSHJ P,[TLNE F,ESW ;HERE FROM FOO* COMMAND, STORE NAME + JRST LDDT3 ;SAVE EXTENSION + TLZE F,CSW!DSW ;OR AS NAME + MOVEM W,DTIN + POPJ P,] + MOVEM 0,SVRPG# ;SAVE 0 JUST IN CASE + SETZM NONLOD# ;DETERMINE IF CONTINUATION + MOVEI 0,2(B) ;BY SEEING IF ANY SYMBOLS LOADED + CAME 0,JOBREL + SETOM NONLOD ;SET TO -1 AND SKIP CALLI + MOVE 0,ILD1 + MOVEM 0,RPG1 + INIT 17,1 +RPG1: 0 + XWD 0,CTLIN + JSP A,ILD5 + LOOKUP 17,DTIN ;THE FILE NAME + JRST ILD9 + JRST RPGS3 + +RPGS2: MOVSI 0,RPGF ;SET FLAG + IORM 0,F.C+N + TLO N,RPGF + MOVE 0,SVRPG + JRST LD2Q ;BACK TO INPUT SCANNING +> + IFN HE, < +.LOAD: SETZM ERRFLG; HAND-EYE LOADER INITIALIZATION + SETZM RESET + MOVSI R,F.I+1; INITIALIZE ACS + AOS R + BLT R,R + OR F,F.I + MOVE B,JOBSYM; SET UP SYMBOL TABLE POINTER + HLRZ H,JOBSA + HLR R,JOBSA; LOAD STARTING AT PROGRAM BREAK + MOVS E,R; CLEAR CORE + HRRI E,1(R) + SETZM (R) + BLT E,(B) + PUSHJ P,FIXNAM + MOVE S,JOBUSY + SKIPN S + HRRZ S,B + SOS S + SOS B + MOVEM P,SAVP#; SAVE SUBR POINTER + JRST BEG; FINISH INIT + +F.I: XWD SYMSW,0; INITIAL F + XWD ALLFLG+ISAFLG+COMFLG,0; INITIAL N + XWD V,0; INITIAL X - LOAD IN PLACE + Z + Z + XWD W,0; INITIAL R + Z +.AC: BLOCK 17 +LNKSAV: BLOCK 21 + +LD5B1: HALT + > + IFN HE,< +.PRMAP: MOVEM 16,.AC+16; PRINT STORAGE MAP + HRRZI 16,.AC; SAVE ACS + BLT 16,.AC+15 + MOVE F,F.I+F; SET UP ACS AS NEEDED + MOVE N,F.I+N + HLRZ R,JOBSA + MOVE S,JOBUSY + SOS S + MOVE B,JOBSYM + SOS B + INIT 2,1; INITIALIZE LPT + SIXBIT /LPT/ + XWD ABUF,0 + JSP A,ILD5 + MOVEI E,AUX + MOVEM E,JOBFF + OUTBUF 2,1 + TLO N,AUXSWI + PUSHJ P,PRMAP; PRINT MAP + RELEASE 2, + HRLZI 16,.AC + BLT 16,16 + POPJ P, + > + IFN HE,< +ILD: MOVEI W,BUF1; INITIALIZE FILE LOADING + MOVEM W,JOBFF + TLOE F,ISW + JRST ILD6 + INIT 1,14 + SIXBIT /DSK/ + Z BUFR + JSP A,ILD5; ERROR RETURN +ILD6: LOOKUP 1,DTIN; LOOKUP FILE + JRST ILD3 + INBUF 1,2 + MOVE 15,..NAME + MOVEI 12,-2(S) + SUBI S,2 + POP B,2(12) + POP B,1(12) + MOVE 12,.NAME; RIGHT HALF VALUE IS LINK + HRL 12,R; LEFT HALF IS RELOCATION + MOVEM 12,2(B) + MOVEM 15,1(B) + HRRZM B,.NAME + POPJ P, + +ILD3: PUSHJ P,ILDX; LOOKUP FAILURE + JRST ILD9; NO HOPE + JRST ILD6; TRY AGAIN + +ILDX: MOVE W,DTIN2 + CAMN W,[SIXBIT / H HE/] + POPJ P,; IF H,HE THERE IS NO HOPE + CAMN W,[SIXBIT / 1 3/] + JRST [ MOVE W,DTIN; CHECK IF HELIB[1,3] + CAME W,[SIXBIT /HELIB/] + POPJ P,; YES - TRY BACKUP FILE + JRST IX] +IX: MOVE W,[SIXBIT / H HE/] + MOVEM W,DTIN2; NOT H,HE - TRY LIBRARY AREA + AOS (P); TRY AGAIN + POPJ P, + > + IFN HE,< +FIXNAM: HLRE T,B; GET END OF PROGRAM NAME LIST + MOVMS T + ADDI T,(B) + SUBI T,3 + HLRZ D,2(T) + JUMPE D,.+3 + ADD T,D + JRST .-3 + HRRI N,2(T) + POPJ P, + +LD2: SKIPN RESET + JRST LD2Q-2 + CAMN B,F.C+B + CAME S,F.C+S + CAIA + JRST .+4 + MOVEI T,[ASCIZ / +CANNOT RECOVER/] + CALLI T,CDDTOUT + CALLI CEXIT + MOVE T,.NAME; REMOVE NAME + HRRZ T,2(T) + MOVEM T,.NAME + MOVEI T,1(S) + ADDI S,2 + PUSH B,1(T) + PUSH B,2(T) + AOSA ERRFLG# + PUSHJ P,LDF +LD2Q: MOVSI T,F.C + BLT T,B +> + IFN HE,< +GETF: MOVE P,SAVP; RESTORE SUBR POINTER + SKIPN RESET + JRST GETF4 + SETZM RESET; RECOVERABLE ERROR + PUSHJ P,ILDX; CHECK FOR ANOTHER COPY + JRST GETF4; NO + MOVEI T,[ASCIZ /_ +/] + CALLI T,CDDTOUT + JRST LD2Q-1 + +GETF4: TLNE F,LIBSW + JRST GETFY+1; LIBRARY MODE - CONTINUE + PUSHJ P,.GETF; GET NEXT FILE + SETZM 13 + LSHC 13,6 + CAIE 13,"/" + JRST GETF1 + ROT 14,6; FIRST CHAR SLASH - DECODE SWITCH + CAIN 14,"D" + JRST .DDT + CAIN 14,"S" + JRST [ TLO F,SYMSW + JRST GETF4+2] + CAIN 14,"W" + JRST [ TLZ F,SYMSW+DSYMSW + JRST GETF4+2] + CAIN 14,'C' + JRST GETF4+2; SAVE /C DECODING FOR LATER + JSP A,ERRPT8; UNKNOWN SWITCH - ERROR + SIXBIT /SYNTAX%/ + JRST LD2 + +.DDT: MOVSI W,444464; LOAD DDT + MOVEM W,DTIN + MOVE W,[SIXBIT / 1 3/] + MOVEM W,DTIN2 + JRST LD2Q-1 + > + IFN HE,< +GETF1: LSHC 13,-6 + JUMPE 14,GETF2; FILE NAME ZERO - FINISHED + OR 15,[XWD 600000,0] + SKIPN 13,.NAME# + JRST GETF3; NO FILES LOADED + CAMN 15,2(13); SEARCH FOR FILE NAME + JRST GETF4+1; FOUND - DO NOT LOAD + HRRZ 13,1(13) + JUMPN 13,.-3 +GETF3: MOVEM 15,..NAME# + MOVEM 14,DTIN; SET UP ENTER BLOCK + MOVEM 16,DTIN2 + JRST LD2Q-1 + +GETF2: MOVEI W,3; END OF FILES - SEARCH LIBRARIES + MOVEM W,CNT# + SKIPA +GETFY: TLZ F,SYMSW+DSYMSW; TURN OFF LOCAL SYMBOLS AFTER HELIB + JUMPGE S,GETF11 + TLO F,LIBSW+SKIPSW + MOVE W,[SIXBIT / 1 3/] + MOVEM W,DTIN2 + SOSGE W,CNT + JRST GETF11 + MOVE W,.TAB(W) + MOVEM W,DTIN + JRST LD2Q-1 + +.TAB: SIXBIT /JOBDAT/ + SIXBIT /LIB40/ + SIXBIT /HELIB/ + +GETF11: PUSHJ P,SAS1; TERMINATE LOADING + RELEASE 1, + PUSHJ P,BLTSET +IFN FAILSW,< + MOVE R,[XWD LINKTB,LNKSAV] + BLT R,LNKSAV+20>; SAVE LINK TABLE + MOVE R,JOBDDT + CALLI R,CSETDDT + HLRE 16,S + MOVMS 16 + LSH 16,-1; RIGHT HALF AC16 IS # UNDEF SYMBS + HRL 16,ERRFLG + POPJ P, +> + IFE HE,< +;MONITOR LOADER CONTROL + +BEG: +IFE L,< +LD: IFN RPGSW,<SKIPA ;NORMAL INITIALIZE + JRST RPGSET ;SPECIAL INIT> + HLLZS 42 ;GET RID OF ERROR COUNT IF NOT IN RPG MODE + CALLI 0 ;INITIALIZE THIS JOB +NUTS: MOVSI R,F.I ;SET UP INITIAL ACCUMULATORS + BLT R,R +> +IFN L,< +LD: HRRZM 0,LSPXIT# ;RETURN ADDRESS FOR LISP + MOVEI 0,0 + HRRZM R,RINITL# + CALLI 0 +> +CTLSET: INIT 3,1 ;INITIALIZE CONSOLE + SIXBIT /TTY/ + XWD BUFO,BUFI +CALLEX: CALLI CEXIT ;DEVICE ERROR, FATAL TO JOB + MOVEI E,TTY1 + MOVEM E,JOBFF + INBUF 3,1 + OUTBUF 3,1 ;INITIALIZE OUTPUT BUFFERS + OUTPUT 3, ;DO INITIAL REDUNDANT OUTPUT +IFE L,< HRRZ B,JOBREL ;PICK UP CORE BOUND + SKIPE JOBDDT ;DOES DDT EXIST? + HRRZ B,JOBSYM ;USED BOTTOM OF SYMBOL TABLE INSTEAD +> +IFN L,< MOVE B,JOBSYM> + SUB B,SE3 ;INITIALIZE SYMBOL TABLE POINTER + CAILE H,1(B) ;TEST CORE ALLOCATION + CALLI CEXIT ;INSUFFICIENT CORE, FATAL TO JOB +IFE L,< MOVS E,X ;SET UP BLT POINTER + HRRI E,1(X)> +IFN L,< MOVS E,H + HRRI E,1(H)> + SETZM -1(E) ;ZERO FIRST WORD + BLT E,(B) ;ZERO CORE UP TO THE SYMBOL AREA + HRRZ S,B ;INITIALIZE UNDEF. POINTER + HRR N,B ;INITIALIZE PROGRAM NAME POINTER +IFE L,<HRRI R,JOBPRO ;INITIALIZE THE LOAD ORIGIN> + MOVE E,COMM ;SET .COMM. AS THE FIRST PROGRAM + MOVEM E,1(B) ;STORE IN SYMBOL TABLE + HRRZM R,2(B) ;STORE COMMON ORIGIN + > +IFN HE,<BEG:> + MOVEI E,F.C ;INITIALIZE STATE OF THE LOADER + BLT E,B.C + SETZM MDG ;MULTIPLY DEFINED GLOBAL COUNT +IFE HE,< +IFN FAILSW,< SETZM LINKTB ;ZERO OUT TE LINK TABLE + MOVE W,[XWD LINKTB,LINKTB+1] + BLT W,LINKTB+20 ;BEFORE STARTING> +IFE L,< MOVSI W,254200 ;STORE HALT IN JOB41 + MOVEM W,JOB41(X)> ;... +IFN L,< MOVE W,JOBREL + HRRZM W,OLDJR#>> +IFN HE,<IFN FAILSW,< + MOVE W,[XWD LNKSAV,LINKTB] + BLT W,LINKTB+20 + >> +IFN STANSW,<SETZM CURNAM#> +IFN FAILSW,< MOVEI W,440000 ;SET UP THE SPECIAL BITS OF HEADNUM (ADD+POLISH) + MOVEM W,HEADNM# + SETZM POLSW# ;SWITCH SAYS WE ARE DOING POLISH + MOVEI W,PDLOV ;ENABLE FOR PDL OV + MOVEM W,JOBAPR + MOVEI W,200000 + CALLI W,16 + +EXTERNAL JOBAPR > +IFN LDAC!BLTSYM,<MOVEI W,20 ;SET UP SPACE TO SAVE FOR ACS AND + MOVEM W,KORSP# ;USER DEFINITIONS WITH DDT> + +IFN HE,<JRST LD2Q> + IFE HE,< +IFN RPGSW,<JRST LD2Q> +LD2: IFN RPGSW,<MOVSI B,RPGF ;HERE ON ERRORS, TURN OFF RPG + ANDCAM B,F.C+N ;IN CORE> +;LOADER SCAN FOR FILE NAMES + +LD2Q: MOVSI B,F.C ;RESTORE ACCUMULATORS + BLT B,B + MOVE P,PDLPT ;INITIALIZE PUSHDOWN LIST + SETZM BUFI2 ;CLEAR INPUT BUFFER POINTER +IFE PP,< SETZM ILD1 ;CLEAR INPUT DEVICE NAME> +IFN PP,< MOVSI T,(SIXBIT /DSK/) ;ASSUME DSK + MOVEM T,ILD1 + SETZM OLDDEV# ;TO MAKE IT GO BACK AFTER /D FOR LIBSR> + SETZM DTIN ;CLEAR INPUT FILE NAME +IFN PP,<SETZM PPN# ;CLEAR INPUT PROJ-PROG #> + +LD2B: RELEAS 1, ;RELEASE BINARY INPUT DEVICE +IFN RPGSW,< TLNE N,RPGF ;NOT IF DOING RPG + JRST LD2BA> + MOVEI T,"*" + IDPB T,BUFO1 ;OUTPUT ASTERISK TO START INPUT + OUTPUT 3, +LD2BA: TLZ F,FULLSW+ASW+ISW+CSW+ESW+SKIPSW+SLIBSW+REWSW + TLNE F,LIBSW ;WAS LIBRARY MODE ON? + TLO F,SKIPSW ;YES, NORMAL MODE IS SKIPPING + +LD2D: IFN PP,<SETZM PPN ;DO NOT REMEMBER PPNS FOR NOW +LD2DB: SKIPE W,OLDDEV ;RESET DEVICE IF NEEDED + CAMN W,ILD1 ;IS IT SAME? + JRST LD2DA ;YES, FORGET IT + TLZ F,ISW+DSW+FSW+REWSW + MOVEM W,ILD1> +LD2DA: +IFN RPGSW,< SETZM DTIN1 ;CLEAR EXTENSION> + MOVEI W,0 ;INITIALIZE IDENTIFIER SCAN + MOVEI E,6 ;INITIALIZE CHARACTER COUNTER + MOVE V,LSTPT ;INITIALIZE BYTE POINTER TO W + TLZ F,SSW+DSW+FSW ;LEAVE SWITCH MODE +LD3: IFN RPGSW,<TLNE N,RPGF ;CHECK RPG FEATURE + JRST RPGRD> + SOSG BUFI2 ;DECREMENT CHARACTER COUNT + INPUT 3, ;FILL TTY BUFFER + ILDB T,BUFI1 ;LOAD T WITH NEXT CHARACTER +LD3AA: MOVE Q,T + IDIVI Q,11 ;TRANSLATE TO 4 BIT CODE + LDB Q,LD8(A) ;LOAD CLASSIFICATION CODE + CAIGE Q,4 ;MODIFY CODE IF .GE. 4 + TLNN F,SSW ;MODIFY CODE IF SWITCH MODE OFF + ADDI Q,4 ;MODIFY CLASS. CODE FOR DISPATCH + HRRZ A,LD3A(Q) ;LOAD RH DISPATCH ENTRY + CAIL Q,10 ;SKIP IF CORRECT DISPATCH ENTRY + HLRZ A,LD3A-10(Q) ;LOAD LH DISPATCH ENTRY + JRST @A ;JUMP TO INDICATED LOCATION + +;COMMAND DISPATCH TABLE + +LD3A: XWD LD3,LD7B ;IGNORED CHAR, BAD CHAR (SWITCH) + XWD LD6A,LD6 ;</> OR <(>, LETTER (SWITCH) + XWD LD5,LD6C ;<:>, DIGIT (SWITCH ARG.) + XWD LD5A,LD6D ;<.>, ESCAPE SWITCH MODE <)> + XWD LD5C,LD7 ;<=> OR <L. ARROW>, BAD CHAR. + XWD LD5B,LD4 ;<,>, ALPHABETIC CHAR. + XWD LD5D,LD4 ;<CR.>, NUMERIC CHAR. + XWD LD5E1,LD7 ;<ALT MODE>, BAD CHAR. <)> + +IFN RPGSW,<RPGRD: SOSG CTLIN+2 ;CHECK CHARACTER COUNT + JRST [IN 17,0 + JRST .+1 ;OK + STATO 17,740000 + JRST LD2 + JSP A,ERRPT + SIXBIT /ERROR WHILE READING COMMAND FILE%/ + JRST LD2] + IBP CTLIN+1 ;ADVANCE POINTER + MOVE T,@CTLIN+1 ;AND CHECK FOR LINE # + TRNE T,1 + JRST [MOVNI T,5 + ADDM T,CTLIN+2 + AOS CTLIN+1 + JRST RPGRD ];GO READ AGAIN + LDB T,CTLIN+1 ;GET CHR + JRST LD3AA ;PASS IT ON> + > + ;ALPHANUMERIC CHARACTER, NORMAL MODE +IFE HE,< +LD4: SOJL E,LD3 ;JUMP IF NO SPACE FOR CHAR IN W + SUBI T,40 ;CONVERT FROM ASCII TO SIXBIT + IDPB T,V ;DEPOSIT CHAR OF IDENTIFIER IN W + TLO F,DSW ;SET IDENTIFIER FLAG + JRST LD3 ;RETURN FOR NEXT CHARACTER + +;DEVICE IDENTIFIER DELIMITER <:> + +LD5: PUSH P,W ;SAVE W + TLOE F,CSW ;TEST AND SET COLON FLAG + PUSHJ P,LDF ;FORCE LOADING + POP P,W ;RESTORE W + TLNE F,ESW ;TEST SYNTAX + JRST LD7A ;ERROR, MISSING COMMA ASSUMED + JUMPE W,LD2D ;JUMP IF NULL DEVICE IDENTIFIER + MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER +IFN PP,<MOVEM W,OLDDEV ;WE HAVE A NEW ONE SO IGNORE OLD> + TLZ F,ISW+DSW+FSW+REWSW ;CLEAR OLD DEVICE FLAGS +IFN PP,<SETZM PPN ;CLEAR OLD PP #> + JRST LD2D ;RETURN FOR NEXT IDENTIFIER + +;FILE NAME EXTENSION IDENTIFIER DELIMITER <.> + +LD5A: TLOE F,ESW ;TEST AND SET EXTENSION FLAG + JRST LD7A ;ERROR, TOO MANY PERIODS + TLZE F,CSW+DSW ;SKIP IF NULL IDENT AND NO COLON + MOVEM W,DTIN ;STORE FILE IDENTIFIER + JRST LD2D ;RETURN FOR NEXT IDENTIFIER + +;INPUT SPECIFICATION DELIMITER <,> + +LD5B: +IFN PP,<TLZE N,PPCSW ;READING PP #? + JRST [ +IFLE STANSW-UTAHSW,< HRLM D,PPN ;STORE PROJ # + JRST LD6A1] ;GET PROG #> +IFG STANSW-UTAHSW,< PUSHJ P,RJUST ;RIGHT JUSTIFY W + HRLM W,PPN ;STORE PROJ NAME + JRST LD2DB ];GET PROG NAME> + PUSHJ P,RBRA ;CHECK FOR MISSING RBRA> + TLZN F,FSW ;SKIP IF PREV. FORCED LOADING + PUSHJ P,FSCN2 ;LOAD (FSW NOT SET) + JRST LD2D ;RETURN FOR NEXT IDENTIFIER + +LD5B1: TLNE F,ESW ;TEST EXTENSION FLAG + JRST LDDT3 ;EXPLICIT EXTENSION IDENTIFIER + TLZN F,CSW+DSW ;SKIP IF IDENT. OR COLON + POPJ P, + MOVEM W,DTIN ;STORE FILE IDENTIFIER + JRST LDDT2 ;ASSUME <.REL> IN DEFAULT CASE + > + ;OUTPUT SPECIFICATION DELIMITER <=> OR <LEFT ARROW> +;OR PROJ-PROG # BRACKETS <[> AND <]> +IFE HE,< +LD5C: +IFN RPGSW,<CAIN T,"@" ;CHECK FOR * COMMAND + JRST RPGS1> +IFN PP,<CAIN T,"[" ;PROJ-PROG #? + JRST [TLO N,PPSW+PPCSW ;SET FLAGS + MOVEM W,PPNW# ;SAVE W + MOVEM E,PPNE# ;SAVE E + MOVEM V,PPNV# ;SAVE V +IFLE STANSW-UTAHSW,<JRST LD6A1-1] ;READ NUMBERS AS SWITCHES > +IFG STANSW-UTAHSW,< JRST LD2DB]> + CAIN T,"]" ;END OF PP #? + JRST [PUSHJ P,RBRA ;PROCESS RIGHT BRACKET + JRST LD3 ];READ NEXT IDENT> + TLOE F,ASW ;TEST AND SET LEFT ARROW FLAG + JRST LD7A ;ERROR, MISPLACED LEFT ARROW + PUSHJ P,LD5B1 ;STORE IDENTIFIER + TLZN F,ESW ;TEST EXTENSION FLAG + MOVSI W,554160 ;ASSUME <.MAP> IN DEFAULT CASE + MOVEM W,DTOUT1 ;STORE FILE EXTENSION IDENTIFIER + MOVE W,DTIN ;LOAD INPUT FILE IDENTIFIER + MOVEM W,DTOUT ;USE AS OUTPUT FILE IDENTIFIER +IFN PP,<MOVE W,PPN ;PROJ-PROG # + MOVEM W,DTOUT+3 ;...> + MOVE W,ILD1 ;LOAD INPUT DEVICE IDENTIFIER + MOVEM W,LD5C1 ;USE AS OUTPUT DEVICE IDENTIFIER +IFN PP,< SKIPE W,OLDDEV ;RESTORE OLD + MOVEM W,ILD1> +;INITIALIZE AUXILIARY OUTPUT DEVICE + TLZE N,AUXSWI+AUXSWE ;FLUSH CURRENT DEVICE + RELEASE 2, ;... + CALL W,[SIXBIT ?DEVCHR?] ;IS DEVICE A TTY? + TLNE W,10 ;... +JRST LD2D ;YES, SKIP INIT + INIT 2,1 ;INIT THE AUXILIARY DEVICE +LD5C1: 0 ;AUXILIARY OUTPUT DEVICE NAME + XWD ABUF,0 ;BUFFER HEADER + JSP A,ILD5 ;ERROR RETURN + TLNE F,REWSW ;REWIND REQUESTED? + CALL 2,[SIXBIT /UTPCLR/] ;DECTAPE REWIND + TLZE F,REWSW ;SKIP IF NO REWIND REQUESTED + MTAPE 2,1 ;REWIND THE AUX DEV + MOVEI E,AUX ;SET BUFFER ORIGIN + MOVEM E,JOBFF + OUTBUF 2,1 ;INITIALIZE SINGLE BUFFER + TLO N,AUXSWI ;SET INITIALIZED FLAG + JRST LD2D ;RETURN TO CONTINUE SCAN + + > + IFE HE,< +;RIGHT SQUARE BRACKET (PROJ-PROG NUMBERS) +IFN PP,< +RBRA: TLZN N,PPSW ;READING PP #? + POPJ P, ;NOPE, RETURN + TLZE N,PPCSW ;COMMA SEEN? + JRST LD7A ;NOPE, INDICATE ERROR +IFLE STANSW-UTAHSW,<HRRM D,PPN ;STASH PROG NUMBER> +IFG STANSW-UTAHSW,<PUSHJ P,RJUST ;RIGHT JUSTIFY W + HRRM W,PPN ;STASH PROG NAME> + MOVE W,PPNW# ;PICKUP OLD IDENT + MOVE E,PPNE# ;RESTORE CHAR COUNT + MOVE V,PPNV# ;RESTORE BYTE PNTR + POPJ P, ;TRA 1,4 + +;RIGHT JUSTIFY W + +RJUST: JUMPE W,LD7A ;NOTHING TO RIGHT JUSTIFY + TRNE W,77 ;IS W RJUSTED YET? + POPJ P, ;YES, TRA 1,4 + LSH W,-6 ;NOPE, TRY AGAIN + JRST .-3 ;...> + > + IFE HE,< +;LINE TERMINATION <CARRIAGE RETURN> + +LD5D: +IFN PP,<PUSHJ P,RBRA ;CHECK FOR UNTERMINATED PP #> + PUSHJ P,FSCN ;FORCE SCAN TO COMPLETION + JRST LD2B ;RETURN FOR NEXT LINE + +;TERMINATE LOADING <ALT MODE> + +LD5E: SKIPE D ;ENTER FROM G COMMAND + HRR F,D ;USE NUMERIC STARTING ADDRESS +LD5E1: + PUSHJ P,CRLF ;START A NEW LINE + PUSHJ P,SASYM ;SETUP JOBSA,JOBFF,JOBSYM,JOBUSY +IFN LDAC!BLTSYM,<HRRZ A,R ;SET UP BLT OF ACS + ADDI A,(X) ;END + ADD A,KORSP ;ADD IN SPACE RESERVED + CAIL A,(S) +IFN EXPAND,<JRST [PUSHJ P,XPAND> + PUSHJ P,[ +IFE EXPAND,< JSP A,ERRPT + SIXBIT /MORE CORE NEEDED#/> + CALLI CEXIT] +IFN EXPAND,< JRST .-1]> + HRRM R,BOTACS# ;SAVE FOR LATER + HRRZ A,R ;SET BLT + ADD A,X + HRL A,X + MOVE Q,A + BLT A,17(Q)> +IFN BLTSYM,<HRRZ A,R ;PLACE TO BLT TO + ADD A,KORSP + MOVE W,A ;SAVE DEST + ADDI A,(X) ;AFTER ADJUSTMENT + MOVE Q,S ;UDEF PNTR + ADD Q,B ;TOTAL UNDEFS AND DEFS IN LEFT + HLROS Q ;NOW NEG IN RIGHT + MOVNS Q ;POSITIVE + ADDI Q,-1(A) ;END OF BLT + HRLI A,1(S) ;AND GET PLACE TO BLT FROM + SUBI W,1(S) ;PREST LOC OF SYMBOL TABLE + ADDM W,JOBSYM(X) + ADDM W,JOBUSY(X) ;ADJUST POINTERS + BLT A,(Q) ;MOVE IT + SKIPN JOBDDT(X) ;IS DDT THERE? + JRST NODDT + SUBI Q,-1(X) + HRRM Q,JOBFF(X) ;RESTET JOBFF IF DDT IS IN + HRLM Q,JOBSA(X) +NODDT:> + MOVE W,[SIXBIT ?LOADER?] ;FINAL MESSAGE + PUSHJ P,BLTSET ;SETUP FOR FINAL BLT + RELEASE 2, ;RELEASE AUX. DEV. +IFN RPGSW,<RELEASE 17,0 ;RELEASE COMMAND DEVICE> +IFE L,< +IFN STANSW,<MOVE W,JOBREL ;IN CASE NO NAME SET + MOVE W,-1(W) ;USE FIRRST LOADED + SKIPN CURNAM + PUSHJ P,LDNAM + MOVE W,CURNAM + JRST LD5E4>> +IFN L,< JRST @LSPXIT> +LD5E5: MOVE W,[BLT Q,(A)] ;BLT OF ALL CODE + MOVEM W,JOBBLT ;STASH IN JOB DATA AREA + MOVEM W,JOBBLT(X) ;STASH IN RELOCATED JOBDATA AREA +LD5E2: MOVE W,CALLEX ;EXIT AFTER BLT + TLZN N,EXEQSW ;IMMEDIATE EXECUTION REQUESTED? + JRST LD5E3 ;NOPE, LET USER TYPE START HIMSELF + HRRZ W,JOBSA(X) ;PICKUP USUAL STARTING ADDRESS + TLNE N,DDSW ;DDT EXECUTION? + HRRZ W,JOBDDT(X) ;USE DDT SA INSTEAD + JUMPE W,LD5E2 ;IF SA=0, DON'T EXECUTE + HRLI W,(JRST) ;INSTRUCTION TO EXECUTE +LD5E3: +IFE LDAC,<MOVEM W,JOBBLT+1(X) ;STASH FOR EXECUTION> +IFN LDAC,<MOVEM W,JOBBLT+2(X) ;STASH FOR EXECUTION + HRLZ 17,JOBFF(X) ;BUT FIRST BLT ACS + MOVE W,[BLT 17,17] ;... + MOVEM W,JOBBLT+1(X) ;...> + JRST JOBBLT ;IF IT WERE DONE, 'TWERE BEST DONE QUICKLY + +IFE L,< +IFN STANSW,<LSH W,6 ;LEFT JUSTIFY +LD5E4: TLNN W,770000 ;IS IT LEFT JUSTIFIED? + JRST .-2 + CALL W,[SIXBIT /SETNAM/] + JRST LD5E5>> + + > + IFE HE, < +;SEARCH LIBRARY, PRINT UNDEFS, SETUP JOBSA,JOBFF,JOBSYM,JOBUSY + +SASYM: TLNN F,NSW ;SKIP IF NO SEARCH FLAG ON + PUSHJ P,LIBF ;SEARCH LIBRARY FILE + PUSHJ P,FSCN ;FORCE SCAN TO COMPLETION + PUSHJ P,PMS ;PRINT UNDEFINEDS +IFE L,< HRRZM F,JOBSA(X) ;RH OF JOBSA :=STARTING ADDRESS> + > +SAS1: HRRZ A,H ;COMPUTE PROG BREAK + SUBI A,(X) ;... + CAIGE A,(R) ;BUT NO HIGHER THAN RELOC + HRRZ A,R ;... +IFE L,< HRLM A,JOBSA(X) ;LH OR JOBSA IS PROG BREAK + HRRZM A,JOBFF(X) ;RH OF JOBFF CONTAINS PROG BREAK> + MOVE A,B ;SET JOBSYM W/ SYMBOL TABLE POINTER + AOS A ;... +IFE L,< MOVEM A,JOBSYM(X) ;...> +IFN L,< MOVEM A,JOBSYM> + MOVE A,S ;SET JOBUSY W/ UNDEFINED SYMBOL POINTER + AOS A ;... +IFE L,< MOVEM A,JOBUSY(X) ;...> +IFN L,< MOVEM A,JOBUSY> + POPJ P, ;RETURN +IFE HE,< +;PRINT FINAL MESSAGE, SET UP BLT AC'S, SETDDT, RELEAS + +BLTSET: PUSHJ P,FCRLF ;START FINAL MESSAGE + PUSHJ P,PWORD ;PRINT W + PUSHJ P,SPACE + > +IFN HE,< +BLTSET:> +IFN FAILSW< MOVSI Q,-20 ;SET TO FIX UP LINKS +FXEND: HLRZ V,LINKTB+1(Q) ;GET END LINK INFO + JUMPE V,NOEND ;DO NOT LINK THIS ONE + HRRZ A,LINKTB+1(Q) ;GET THE THING TO PUT THERE +IFN L,< CAML V,RINITL> + HRRM A,@X ;PUT IT IN +NOEND: AOBJN Q,FXEND ;FINISH UP> +IFN HE,<POPJ P,> +IFE HE,< + HRRZ Q,JOBREL ;PUBLISH HOW MUCH CORE USED +IFN L,< SUB Q,OLDJR ;OLD JOBREL> + LSH Q,-12 ;... + ADDI Q,1 ;... + PUSHJ P,RCNUM ;PUBLISH THE NUMBER + MOVE W,[SIXBIT /K CORE/] ;PUBLISH THE UNITS + PUSHJ P,PWORD ;... + PUSHJ P,CRLF ;... +IFE L,< MOVSI Q,20(X) ;HOW MUCH CODE TO BLT + HRRI Q,20 ;... + HRRZ A,42 ;CHECK ON ERRORS + JUMPE A,NOEX ;NONE, GO AHEAD + TLZN N,EXEQSW ;DID HE WANT TO START EXECUTION? + JRST NOEX ;NO + JSP A ,ERRPT ;PRINT AN ERROR MESSAGE + SIXBIT /EXECUTION DELETED@/ +NOEX: HRRZ A,JOBREL ;WHEN TO STOP BLT + HRRZM A,JOBREL(X) ;SETUP FOR POSSIBLE IMMED. XEQ + SUBI A,(X) ;... +IFE BLTSYM,<CAIL A,(S) ;DON'T BLT OVER SYMBOL TABLE + MOVEI A,(S) ;OR UNDEFINED TABLE> +> + RELEAS 1, ;RELEASE DEVICES + RELEAS 3, ;... +IFE L,< MOVE R,JOBDDT(X) ;SET NEW DDT + CALLI R,CSETDDT ;...> + POPJ P, ;RETURN + > + + IFE HE,< +;WRITE CHAIN FILES + +CHNC: SKIPA A,JOBCHN(X) ;CHAIN FROM BREAK OF FIRST BLOCK DATA +CHNR: HLR A,JOBCHN(X) ;CHAIN FROM BREAK OF FIRST F4 PROG + HRRZS A ;ONLY RIGHT HALF IS SIGNIFICANT + JUMPE A,LD7C ;DON'T CHAIN IF ZERO + TLNN N,AUXSWI ;IS THERE AN AUX DEV? + JRST LD7D ;NO, DON'T CHAIN + PUSH P,A ;SAVE WHEREFROM TO CHAIN + SKIPE D ;STARTING ADDR SPECIFIED? + HRR F,D ;USE IT + PUSHJ P,SASYM ;DO LIB SEARCH, SETUP JOBSA, ETC. + POP P,A ;GET WHEREFROM + MOVN W,JOBREL ;CALCULATE IOWD FOR DUMP + ADDI W,-1-3-CHN5(A) ;... + HRLI W,-4-CHN5(A) ;... + MOVSM W,IOWDPP ;... + ADDI A,-4-CHN5(X) ;ADD IN OFFSET +IFN CHN5,<PUSH A,JOBSYM(X) ;SETUP FOUR WORD TABLE + PUSH A,JOB41(X) ;...> + PUSH A,JOBDDT(X) ;JOBDDT IN ALL CASES +IFE CHN5,<PUSH A,JOBSYM(X) ;JOBDDT, JOBSYM, JOBSA> + PUSH A,JOBSA(X) ;JOBRYM ALWAYS LAST + CLOSE 2, ;INSURE END OF MAP FILE + SETSTS 2,17 ;SET AUX DEV TO DUMP MODE + MOVSI W,435056 ;USE .CHN AS EXTENSION + MOVEM W,DTOUT1 ;... + PUSHJ P,IAD2 ;DO THE ENTER + TLZ N,AUXSWI+AUXSWE ;INSURE NO PRINTED OUTPUT + MOVE W,[SIXBIT ?CHAIN?] ;FINAL MESSAGE + PUSHJ P,BLTSET ;SETUP BLT PNTR, SETDDT, RELEAS +IFE STANSW,<CALLI CDDTGT ;START DDT MODE OUTPUT> + MOVSI CHNBLT,CHAIN3 ;BLT CHAIN3 INTO ACS + BLT CHNBLT,CHNBLT ;... + MOVEI P,CHNERR ;POINTER TO ERR MESS + JRST 0 ;GO DO CHAIN + + > + IFE HE, < +;THE AC SECTION OF CHAIN + +CHAIN3: + PHASE 0 + BLT Q,(A) ;USUAL LDRBLT + OUTPUT 2,IOWDP ;WRITE THE CHAIN FILE + STATZ 2,IOBAD!IODEND ;CHECK FOR ERROR OR EOF + JRST LOSEBIG ;FOUND SAME, GO GRIPE + CLOSE 2, ;FINISH OUTPUT + STATZ 2,IOBAD!IODEND ;CHECK FOR FINAL ERROR +LOSEBI: CALLI CDDTOUT ;GRIPE ABOUT ERROR + CALLI CEXIT ;EXIT +CHNERR: ASCIZ ?DEVICE ERROR? ;ERROR MESSAGE +IOWDP: Z ;STORE IOWD FOR DUMP HERE +CHNBLT: ;LAST WORD OF AC CHAIN (ZERO OF I/O POINTER) + DEPHASE +IOWDPP=.-1 ;MEMORY LOC OF AC IOWDP + Z ;TERMINATOR OF DUMP MODE LIST + +> + ;EXPAND CORE + +IFN EXPAND,< +XPAND: PUSH P,H ;GET SOME REGISTERS TO USE + PUSH P,X + PUSH P,N +IFE HE,<HRRZ X,JOBREL ;WHAT WE WANT + ADDI X,2000 + CALLI X,11> +IFN HE,<JRST XPAND4; HAND - EYE CORE FIXUP LATER + JRST XPAND3 +XPAND2: >; CORE ALLOCATOR CALLS THIS + JRST XPAND6 +IFE K,< HRRZ H,MLTP ;GET LOWEST LOCATION + TLNN N,F4SW ;IS FORTRAN LOADING> + HRRZ H,S ;NO, USE S +IFE HE,< + HRRZ X,JOBREL ;NOW MOVE + SUBI X,2000 +XPAND2: MOVE N,(X) + MOVEM N,2000(X) + CAMLE X,H ;TEST FOR END + SOJA X,XPAND2>; HAND EYE SYSTEM MOVES TABLE + HRLI H,-2000 + SETZM (H) ;ZERO NEW CORE + AOBJN H,.-1 + MOVEI H,2000 + ADDM H,S + ADDM H,B + ADDM H,JOBSYM + POP P,N + ADDI N,2000 +IFE K,< TLNN N,F4SW ;F4? + JRST XPAND3 + ADDM H,PLTP + ADDM H,BITP + ADDM H,SDSTP + ADDM H,MLTP + TLNE N,SYDAT + ADDM H,V> +IFN HE,<POPJ P,> +XPAND3: + POP P,X + POP P,H + AOS (P) + POPJ P, +XPAND6: JUMPE X,XPAND4 + JSP A,ERRPT +IFE STANSW,<SIXBIT /CORE AVAILABLE, BUT NOT TO YOU#/> +IFN STANSW,<SIXBIT /YOU HAVE BEEN FUCKED BY THE SHIT-EATING SYSTEM#/ + JRST XPAND5> +XPAND4: JSP A,ERRPT + SIXBIT /MORE CORE NEEDED#/ +XPAND5: POP P,N + POP P,X + POP P,H + POPJ P, + +XPAND7: PUSHJ P,XPAND + JRST SFULLC + JRST POPJM2 + +POPJM3: SOS (P) ;POPJ TO CALL-2 +POPJM2: SOS (P) ;POPJ TO CALL-1 + SOS (P) ;SAME AS POPJ TO + POPJ P, ;NORMAL POPJ MINUS TWO + > + IFE HE,< + +;ENTER SWITCH MODE + +LD6A: CAIN T,57 ;WAS CHAR A SLASH? + TLO N,SLASH ;REMEBER THAT + TLO F,SSW ;ENTER SWITCH MODE +LD6A1: MOVEI D,0 ;ZERO THE NUBER REGISTER + JRST LD3 ;EAT A SWITCH + +;ALPHABETIC CHARACTER, SWITCH MODE + +LD6: XCT LD6B-101(T) ;EXECUTE SWITCH FUNCTION + TLZE N,SLASH ;SWITCH MODE ENTERED W/ SLASH? + JRST LD6D ;LEAVE SWITCH MODE + JRST LD6A1 ;STAY IN SWITCH MODE + +;DISPATCH TABLE FOR SWITCHES + +; THE INSTRUCTION AT THE CHARACTER LOCATION IS EXECUTED + +LD6B: TLO N,ALLFLG ;A - LIST ALL GLOBALS + JRST LD7B ;B - ERROR + PUSHJ P,CHNC ;C - CHAIN, START W/ COMMON + PUSHJ P,LDDT ;D - DEBUG OPTION, LOAD DDT + TLO N,EXEQSW ;E - LOAD AND GO + PUSHJ P,LIBF ;F - LIBRARY SEARCH + PUSHJ P,LD5E ;G - GO INTO EXECUTION + PUSHJ P,LRAIDX ;H - LOAD AN START RAID + TLO N,ISAFLG ;I - IGNORE STARTING ADDRESSES + TLZ N,ISAFLG ;J - USE STARTING ADDRESSES +IFE BLTSYM,<JRST LD7B ;K - ERROR> +IFN BLTSYM,<PUSHJ P,KORADJ ;K - RESERVE SPACE FOR SYM DEFS> + TLO F,LIBSW+SKIPSW ;L - ENTER LIBRARY SEARCH + PUSHJ P,PRMAP ;M - PRINT STORAGE MAP + TLZ F,LIBSW+SKIPSW ;N - LEAVE LIBRARY SEARCH + HRR R,D ;O - NEW PROGRAM ORIGIN + TLO F,NSW ;P - PREVENT AUTO. LIB. SEARCH + TLZ F,NSW ;Q - ALLOW AUTO. LIB. SEARCH + PUSHJ P,CHNR ;R - CHAIN, START W/ RESIDENT + TLO F,SYMSW ;S - LOAD WITH SYMBOLS + PUSHJ P,LDDTX ;T - LOAD AND GO TO DDT + PUSHJ P,PMS ;U - PRINT UNDEFINED LIST + PUSHJ P,LRAID ;V - LOAD RAID + TLZ F,SYMSW+DSYMSW ;W - LOAD WITHOUT SYMBOLS + TLZ N,ALLFLG ;X - DO NOT LIST ALL GLOBALS + TLO F,REWSW ;Y - REWIND BEFORE USE + JRST LD ;Z - RESTART LOADER + +> + IFE HE, < +;SWITCH MODE NUMERIC ARGUMENT + +LD6C: LSH D,3 ;BUILD OCTAL NUMERIC ARGUMENT + ADDI D,-60(T) + JRST LD3 + +;EXIT FROM SWITCH MODE + +LD6D: TLZ F,SSW ;CLEAR SWITCH MODE FLAG + TLNE F,FSW ;TEST FORCED SCAN FLAG + JRST LD2D ;SCAN FORCED, START NEW IDENT. + JRST LD3 ;SCAN NOT FORCED, USE PREV IDENT +;ILLEGAL CHARACTER, NORMAL MODE + +LD7: JSP A,ERRPT8 + SIXBIT /CHAR.%/ + JRST LD2 + +;SYNTAX ERROR, NORMAL MODE + +LD7A: JSP A,ERRPT8 + SIXBIT /SYNTAX%/ + JRST LD2 + +;ILLEGAL CHARACTER, SWITCH MODE + +LD7B: JSP A,ERRPT8 + SIXBIT /SWITCH%/ + JRST LD2 + +;ATTEMPT TO CHAIN WITH SPECIFIED HALF OF JOBCHN = 0 + +LD7C: JSP A,ERRPT ;GRIPE + SIXBIT ?UNCHAINABLE AS LOADED@? + JRST LD2 + +;ATTEMP TO CHAIN WITHOUT SPECIFYING DEVICE + +LD7D: JSP A,ERRPT ;GRIPE + SIXBIT ?NO CHAIN DEVICE@? + JRST LD2 + +> +IFN BLTSYM,<KORADJ: CAMLE D,KORSP ;IF SMALLER IGNORE + MOVEM D,KORSP + POPJ P,> + IFE HE, < +;CHARACTER CLASSIFICATION TABLE DESCRIPTION: + +; EACH CHARACTER HAS ASSOCIATED WITH IT A FOUR BIT BYTE +; PACKED IN THE CHARACTER CLASSIFICATION TABLE. THE CHARACTER +; CLASSIFICATION CODES ARE ORDERED IN SUCH A WAY AS TO GIVE +; DELIMITERS OF HIGHER PRECEDENCE LOWER CLASSIFICATION NUMBERS. +; CERTAIN CHARACTERS HAVE NO EFFECT ON THE COMMAND STRING, AND +; THEREFORE DO NOT EFFECT ORDERING OF DELIMITERS. FOUR CODES +; ARE RESERVED FOR ALTERNATE DISPATCHES WHILE THE SWITCH MODE IS +; IN EFFECT. + + +;CLASSIFICATION BYTE CODES: + +; BYTE DISP CLASSIFICATION + +; 00 - 00 ILLEGAL CHARACTER, SWITCH MODE +; 01 - 01 ALPHABETIC CHARACTER, SWITCH MODE +; 02 - 02 NUMERIC CHARACTER, SWITCH MODE +; 03 - 03 SWITCH MODE ESCAPE, SWITCH MODE + +; 00 - 04 ILLEGAL CHARACTER, NORMAL MODE +; 01 - 05 ALPHABETIC CHARACTER, NORMAL MODE +; 02 - 06 NUMERIC CHARACTER, NORMAL MODE +; 03 - 07 SWITCH MODE ESCAPE, NORMAL MODE + +; 04 - 10 IGNORED CHARACTER +; 05 - 11 ENTER SWITCH MODE CHARACTER +; 06 - 12 DEVICE IDENTIFIER DELIMITER +; 07 - 13 FILE EXTENSION DELIMITER +; 10 - 14 OUTPUT SPECIFICATION DELIMITER +; 11 - 15 INPUT SPECIFICATION DELIMITER +; 12 - 16 LINE TERMINATION +; 13 - 17 JOB TERMINATION + +> + IFE HE, < +;BYTE POINTERS TO CHARACTER CLASSIFICATION TABLE + +LD8: POINT 4,LD9(Q),3 + POINT 4,LD9(Q),7 + POINT 4,LD9(Q),11 + POINT 4,LD9(Q),15 + POINT 4,LD9(Q),19 + POINT 4,LD9(Q),23 + POINT 4,LD9(Q),27 + POINT 4,LD9(Q),31 + POINT 4,LD9(Q),35 + +;CHARACTER CLASSIFIACTION TABLE + +LD9: BYTE (4)4,0,0,0,0,0,0,0,0 + BYTE (4)4,4,4,4,12,0,0,0,0 + BYTE (4)0,0,0,0,0,0,0,0,0 + BYTE (4)13,0,0,0,0,4,0,4,0 + BYTE (4)0,0,0,0,5,3,0,0,11 + BYTE (4)0,7,5,2,2,2,2,2,2 + BYTE (4)2,2,2,2,6,0,0,10,0 +IFE RPGSW,< BYTE (4)0,0,1,1,1,1,1,1,1> +IFN RPGSW,< BYTE (4) 0,10,1,1,1,1,1,1,1> + BYTE (4)1,1,1,1,1,1,1,1,1 + BYTE (4)1,1,1,1,1,1,1,1,1 +IFE PP,<BYTE (4)1,0,0,0,0,10,0,0,0> +IFN PP,<BYTE (4)1,10,0,10,0,10,0,0,0> + BYTE (4)0,0,0,0,0,0,0,0,0 + BYTE (4)0,0,0,0,0,0,0,0,0 + BYTE (4)0,0,0,0,0,0,0,0,13 + BYTE (4)13,4 + +> + IFE HE, < +;INITIALIZE LOADING OF A FILE + +ILD: MOVEI W,BUF1 ;LOAD BUFFER ORIGIN + MOVEM W,JOBFF + TLOE F,ISW ;SKIP IF INIT REQUIRED + JRST ILD6 ;DONT DO INIT + INIT 1,14 +ILD1: 0 ;LOADER INPUT DEVICE + XWD 0,BUFR + JSP A,ILD5 ;ERROR RETURN +ILD6: TLZE F,REWSW ;SKIP IF NO REWIND + MTAPE 1,1 ;REWIND +ILD2: LOOKUP 1,DTIN ;LOOK UP FILE FROM DIRECTORY + JRST ILD3 ;FILE NOT IN DIRECTORY +IFE K,< INBUF 1,2 ;SET UP BUFFERS> +IFN K,< INBUF 1,1 ;SET UP BUFFER> + TLO F,ASW ;SET LEFT ARROW ILLEGAL FLAG + TLZ F,ESW+F4LIB ;CLEAR EXTENSION FLAG + POPJ P, + +; LOOKUP FAILURE + +ILD3: TLOE F,ESW ;SKIP IF .REL WAS ASSUMED + JRST ILD4 ;FATAL LOOKUP FAILURE + SETZM DTIN1 ;ZERO FILE EXTENSION + JRST ILD2 ;TRY AGAIN WITH NULL EXTENSION + +ILD4: TLZE F,F4LIB ;WAS THIS A TRY FOR F40 LIBRARY? + JRST [MOVE W,[SIXBIT /LIB4/]; YES, TRY LIB4 + MOVEM W,DTIN ;... + PUSHJ P,LDDT2 ;USE .REL EXTENSION + TLZ F,ESW ;... + JRST ILD2 ];GO TRY AGAIN + > +ILD9: JSP A,ERRPT + SIXBIT /CANNOT FIND#/ + JRST LD2 + +; DEVICE SELECTION ERROR + +ILD5: MOVE W,-3(A) ;LOAD DEVICE NAME FROM INIT + TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START W/ ? + PUSHJ P,PWORD ;PRINT DEVICE NAME + JSP A,ERRPT7 + SIXBIT /UNAVAILABLE@/ + JRST LD2 + IFE HE, < +;LIBRARY SEARCH CONTROL AND LOADER CONTROL + +;LIBF ENABLES A LIBRARY SEARCH OF <SYS:LIB4.REL> + +LIBF: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + PUSHJ P,LIBF1 ;LOAD SYS:JOBDAT.REL + TLO F,F4LIB ;INDICATE FORTRAN LIBRARY SEARCH + MOVE W,[SIXBIT /LIB40/] ;FIRST TRY AT NAME + PUSHJ P,LIBF2 ;LOAD SYS:LIB40.REL +LIBF1: MOVE W,[SIXBIT /JOBDAT/] ;LOAD SYS:JOBDAT.REL +LIBF2: PUSHJ P,LDDT1 + JUMPGE S,EOF2 ;JUMP IF NO UNDEFINED GLOBALS + TLO F,SLIBSW+SKIPSW ;ENABLE LIBRARY SEARCH + TLZ F,SYMSW+DSYMSW ;DISABLE LOADING WITH SYMBOLS + JRST LDF ;INITIALIZE LOADING LIB4 +>; HAND - EYE DOES OWN LIB SETUP + +; LIB CONTROLS THE LIBRARY SEARCH OF ONE FILE + +LIB: JUMPGE S,EOF1 ;JUMP IF NO UNDEFINED GLOBALS + TLO F,SKIPSW ;SET SKIPSW TO IGNORE MODE + JRST LOAD ;CONTINUE LIB. SEARCH + +LIB1: CAIE A,4 ;TEST FOR ENTRY BLOCK + JRST LIB3 ;NOT AN ENTRY BLOCK, IGNORE IT +LIB2: PUSHJ P,RWORD ;READ ONE DATA WORD + MOVE C,W + TLO C,040000 ;SET CODE BITS FOR SEARCH + PUSHJ P,SREQ + TLZA F,SKIPSW ;REQUEST MATCHES ENTRY, LOAD + JRST LIB2 ;NOT FOUND +LIB3: PUSHJ P,RWORD ;READ AND IGNORE ONE DATA WORD + JRST LIB3 ;LOOP TO IGNORE INPUT + +IFE HE,< +;LDDT LOADS <SYS:DDT.REL> AND SETS DSYMSW + +LRAIDX: TLO N,DDSW!EXEQSW ;H - LOAD AND START RAID +LRAID: PUSHJ P,FSCN1 ;FORCE END OF SCAN + MOVE W,[SIXBIT /RAID/] + JRST LDDT0 +LDDTX: TLO N,DDSW+EXEQSW ;T - LOAD AND GO TO DDT +LDDT: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + MOVSI W,444464 ;FILE IDENTIFIER <DDT> +LDDT0: PUSHJ P,LDDT1 + PUSHJ P,LDF ;LOAD <SYS:DDT.REL> + TLO F,DSYMSW ;ENABLE LOADING WITH SYMBOLS + POPJ P, + +LDDT1: MOVEM W,DTIN ;STORE FILE IDENTIFIER +IFN PP,<MOVE W,ILD1 ;SAVE OLD DEV + MOVEM W,OLDDEV> + MOVSI W,637163 ;DEVICE IDENTIFIER <SYS> + MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER + TLZ F,ISW+LIBSW+SKIPSW+REWSW ;CLEAR OLD FLAGS +LDDT2: MOVSI W,624554 ;EXTENSION IDENTIFIER <.REL> +LDDT3: MOVEM W,DTIN1 ;STORE EXTENSION IDENTIFIER +IFN PP,<MOVE W,PPN ;GET PROJ-PROG # + MOVEM W,DTIN+3> + POPJ P, +>; HAND - EYE DOES OWN DDT LOAD + ;EOF TERMINATES LOADING OF A FILE + +EOF: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER +EOF1: TLZ F,SLIBSW+SKIPSW ;CLEAR ONE FILE LIB. SEARCH FLAG +EOF2: POPJ P, + +; FORCE SCAN TO COMPLETION, LOAD IF NECESSARY + +FSCN: PUSHJ P,FSCN1 ;FORCED LOAD BEFORE TEST + TLNN F,FULLSW ;TEST FOR OVERLAP + POPJ P, ;NO OVERLAP, RETURN + MOVE W,H ;FETCH CORE SIZE REQUIRED + SUBI W,1(S) ; COMPUT DEFICIENCY + JUMPL W,EOF2 ;JUMP IF NO OVERLAP + TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START WITH ? + PUSHJ P,PRNUM0 ;INFORM USER + JSP A,ERRPT7 + SIXBIT /WORDS OF OVERLAP#/ + JRST LD2 ;ERROR RETURN + +FSCN1: IFE HE,<TLON F,FSW ;SKIP IF NOT FIRST CALL TO FSCN + TLNN F,CSW+DSW+ESW ;TEST SCAN FOR COMPLETION + >; HAND EYE DOES NOT WANT FORCED SCAN + POPJ P, +FSCN2: PUSHJ P,LD5B1 ;STORE FILE OR EXTENSION IDENT. + +; LOADER CONTROL, NORMAL MODE + +LDF: PUSHJ P,ILD ;INITIALIZE LOADING + + ;LOAD SUBROUTINE + +LOAD: MOVEM P,PDSAV ;SAVE PUSHDOWN POINTER +IFN FAILSW,< SETZM LFTHSW ;RESET LOAD LEFT HALF FIXUP SW> +LOAD1: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER +LOAD1A: PUSHJ P,WORD ;INPUT BLOCK HEADER WORD + MOVNI E,400000(W) ;WORD COUNT - FROM RH OF HEADER + HLRZ A,W ;BLOCK TYPE - FROM LH OF HEADER +IFN FAILSW,< SKIPN POLSW ;ERROR IF STILL DOING POLISH> + CAILE A,DISPL*2+1 ;TEST BLOCK TYPE NUMBER + JRST LOAD4 ;ERROR, ILLEGAL BLOCK TYPE + TLNE F,SKIPSW ;BLOCK OK - TEST LOAD STATUS + JRST LIB1 ;RETURN TO LIB. SEARCH CONTROL + HRRZ T,LOAD2(A) ;LOAD RH DISPATCH ENTRY + CAILE A,DISPL ;SKIP IF CORRECT + HLRZ T,LOAD2-DISPL-1(A) ;LOAD LH DISPATCH ENTRY + TLNE F,FULLSW ;TEST CORE OVERLAP INDICATOR + SOJG A,HIGH0 ;IGNORE BLOCK IF NOT TYPE 1 + JRST @T ;DISPATCH TO BLOCK SUBROUTINE + +;DISPATCH TABLE - BLOCK TYPES + +LOAD2: XWD NAME,LOAD1A + XWD START,PROG + XWD LOCD,SYM +IFE FAILSW,< XWD LOAD4A,LOAD4A + XWD LOAD4A,LIB3> +IFN FAILSW,< XWD POLFIX,LOAD4A + XWD LINK,LIB3> +LOAD3: XWD LOAD4A,HIGH + + DISPL=LOAD3-LOAD2 + +;ERROR EXIT FOR BAD HEADER WORDS + +LOAD4: IFE K,< + CAIN A,400 ;FORTRAN FOUR BLOCK + JRST F4LD> +IFN HE,<CAIE A,400 + JRST LOAD4A + JSP 1,ERRPT + SIXBIT /FORTRAN#/ + SETOM RESET + JRST LD2> +LOAD4A: JSP A,ERRPT ;INCORRECT HEADER WORD + SIXBIT /ILL. FORMAT#/ +IFN HE,<SETOM RESET#> + JRST LD2 + + ;LOAD PROGRAMS AND DATA (BLOCK TYPE 1) + +PROG: HRRZ V,W ;LOAD BLOCK LENGTH + PUSHJ P,RWORD ;READ BLOCK ORIGIN +IFN HE,<SETZM SFLAG + CAIG W,140 + CAIN W,JOBDDT + JRST PROG2 + SETOM SFLAG + JSP A,ERRPT + SIXBIT /ADDRESS CONFLICT#/ +PROG2: + >; HAND-EYE CANNOT HANDLE CODE BELOW 140 + ADD V,W ;COMPUTE NEW PROG. BREAK + CAIG H,@X ;COMPARE WITH PREV. PROG. BREAK + MOVEI H,@X ;UPDATE PROGRAM BREAK + TLNE F,FULLSW + JRST FULLC ;NO ERROR MESSAGE + CAILE H,1(S) ; SKIP IF SUFFICIENT CORE AVAILABLE +IFN EXPAND,< JRST [PUSHJ P,XPAND> + JRST FULLC +IFN EXPAND,< JRST .-1]> + MOVE V,W +PROG1: PUSHJ P,RWORD ;READ DATA WORD +IFN HE,<SKIPN SFLAG#> +IFN L,< CAML V,RINITL ;ABSOLUTE > + MOVEM W,@X ;STORE DATA WORD IN PROG. AT LLC + AOJA V,PROG1 ;ADD ONE TO LOADER LOC. COUNTER + +;LOAD SYMBOLS (BLOCK TYPE 2) + +SYM: PUSHJ P,PRWORD ;READ TWO DATA WORDS + PUSHJ P,SYMPT; PUT INTO TABLE + JRST SYM + +; WFW SYMPT: JUMPL C,SYM3; JUMP IF GLOBAL REQUEST +SYMPT: TLNE C,200000 ;GLOBAL REQUEST? WFW + JUMPL C,SYM3 ;CHECK FOR 60 NOT JUST HIGH BIT WFW + TLNE C,100000 + JRST SYM1A ;LOCAL SYMBOL + PUSHJ P,SREQ ;GLOBAL DEF., SEARCH FOR REQUEST + JRST SYM2 ;REQUEST MATCHES + PUSHJ P,SDEF ;SEARCH FOR MULTIPLE DEFINITIONS + JRST SYM1 ;MULTIPLY DEFINED GLOBAL + JRST SYM1B + +; PROCESS MULTIPLY DEFINED GLOBAL + +SYM1: CAMN W,2(A) ;COMPARE NEW AND OLD VALUE + POPJ P,; + AOS MDG ;COUNT MULTIPLY DEFINED GLOBALS + PUSHJ P,PRQ ;START W/ ? + PUSHJ P,PRNAM ;PRINT SYMBOL AND VALUE + MOVE W,2(A) ;LOAD OLD VALUE + PUSHJ P,PRNUM ;PRINT OLD VALUE + JSP A,ERRPT7 ;PRINT MESSAGE + SIXBIT /MUL. DEF. GLOBAL#/ + POPJ P,; IGNORE MUL. DEF. GLOBAL SYM + + ; LOCAL SYMBOL + +SYM1A: TLNN F,SYMSW+DSYMSW ;SKIP IF LOAD LOCALS SWITCH ON + POPJ P,; IGNORE LOCAL SYMBOLS +SYM1B: CAIL H,(S) ;STORE DEFINED SYMBOL +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> +SYM1C: IFE K,< + TLNE N,F4SW; FORTRAN FOUR REQUIRES A BLT + PUSHJ P,MVDWN; OF THE TABLES> + MOVEI A,-2(S) ;LOAD A TO SAVE INST. AT SYM2 +SYM1D: SUBI S,2; UPDATE UNDEFINED POINTER + POP B,2(A) ;MOVE UNDEFINED VALUE POINTER + POP B,1(A) ;MOVE UNDEFINED SYMBOL + MOVEM W,2(B) ;STORE VALUE + MOVEM C,1(B) ;STORE SYMBOL + POPJ P,; + + ; GLOBAL DEFINITION MATCHES REQUEST + +SYM2: PUSH P,SYM2C ;NEXT MUST BE A SUBROUTINE FOR LATER. SET RETURN +SYM2B: MOVE V,2(A) ;LOAD REQUEST POINTER + PUSHJ P,REMSYM + JUMPL V,SYM2W ;ADDITIVE REQUEST? WFW + PUSHJ P,SYM4A ;REPLACE CHAIN WITH DEFINITION +;WFW PATCH TO LOOK FOR MORE THAN ONE REQUEST +SYM2W1: PUSHJ P,SREQ ;LOOK FOR MORE REQUESTS FOR THIS SYMBOL + JRST SYM2B ;FOUND MORE + MOVE A,SVA ;RESTORE A +;END OF PATCH WFW +SYM2C: POPJ P,SYM1D ;RETURN, SEE SYM2 FOR USE OF ADDRESS +SVA: 0 ;A TEMP CELL WFW + +; REQUEST MATCHES GLOBAL DEFINITION + +SYM2A: MOVE V,W ;LOAD POINTER TO CHAIN + MOVE W,2(A) ;LOAD VALUE + JUMPL V,FIXWP ;HANDLE ATTITIVE REQUEST WFW + JRST SYM4A; REPLACE CHAIN WITH DEFINITION + +; PROCESS GLOBAL REQUEST + +SYM3: TLNE C,040000; COMMON NAME + JRST SYM1B + TLC C,640000; PERMUTE BITS FROM 60 TO 04 + PUSHJ P,SDEF ;SEARCH FOR GLOBAL DEFINITION + JRST SYM2A ;MATCHING GLOBAL DEFINITION + JUMPL W,SYM3X1 ;ADDITIVE FIXUP WFW + PUSHJ P,SREQ ;SEARCH FOR EXISTING REQUEST WFW + JRST SYM3A ;EXISTING REQUEST FOUND WFW +SYM3X1: TLNN W,100000 ;CHECK SYMBOL TABLE FIXUP + JRST SYM3X2 ;NO + MOVE V,1(B) ;MUST BE LAST SYMBOL DEFINED. GET SYMBOL + XOR V,W ;CHECK FOR IDENTITY + TDNE V,[XWD 77777,-1] ;BUT IGNORE HIGH 3 BITS + POPJ P, ;NOT SAME, ASSUME NOT LOADED LOCAL + HRRI W,2(B) ;GET LOCATION IN RIGHT HALF + TLO W,1 + SUB W,JOBREL ;AND MAKE RELATIVE +IFN FAILSW,< TLZ W,40000> +SYM3X2: CAIL H,(S) ;STORE REQUEST IN UNDEF. TABLE WFW +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> +SYM3X: IFE K,< + TLNE N,F4SW; FORTRAN FOUR + PUSHJ P,MVDWN; ADJUST TABLES IF F4> + SUB S,SE3 ;ADVANCE UNDEFINED POINTER + MOVEM W,2(S) ;STORE UNDEFINED VALUE POINTER + MOVEM C,1(S) ;STORE UNDEFINED SYMBOL + POPJ P,; + + +; COMBINE TWO REQUEST CHAINS + +SYM3A: SKIPL 2(A) ;IS IT ADDITIVE WFW + JRST SYM3A1 ;NO, PROCESS WFW + PUSHJ P,SDEF2 ;YES, CONTINUE WFW + JRST SYM3A ;FOUND ANOTHER WFW + JRST SYM3X2 ;REALLY NO CHAIN THERE WFW +SYM3A1: SUBI A,-2(X) ;A=A-(-2+X(18-35)); A RELATIVE TO X WFW +SYM3B: HRRZ V,A ; SAVE CHAIN ADDRESS FOR HRRM W,@X +IFN L,< CAMGE V,RINITL + HALT ;LOSE LOSE LOSE> + HRRZ A,@X ; LOAD NEXT ADDRESS IN CHAIN + JUMPN A,SYM3B ; JUMP IF NOT THE LAST ADDR. IN CHAIN + HRRM W,@X ;COMBINE CHAINS + POPJ P,; +;LHQ PATCH FOR LISP ABSOLUTE FIXUP PREVENTION +IFN L,< +VTST: 0 + MOVEM V,VSVV# + HRRZS V + CAMGE V,RINITL + POPJ P, + MOVE V,VSVV + JRST @VTST> + +;WFW PATCH FOR ADDITIVE GLOBAL REQUESTS + +FIXWP: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + JRST FIXW + MOVE T,1(B) ;SYMBOL FIXUP, MUST BE LAST SYMBOL DEFINED + XOR T,V ;CHECK FOR SAME + TDNE T,[XWD 77777,-1] ;EXCEPT FOR HEGH CODE BITS + POPJ P, ;ASSUME NON-LOADED LOCAL + HRRI V,2(B) ;GET LOCATION + SUBI V,(X) ;SO WE CAN USE @X +FIXW: TLNE V,200000 ;IS IT LEFT HALF + JRST FIXWL +IFN L,< JSR VTST> + MOVE T,@X ;GET WORD + ADD T,W ;VALUE OF GLOBAL + HRRM T,@X ;FIX WITHOUT CARRY + MOVSI D,200000 ;SET UP TO REMOVE DEFERED INTERNAL IF THERE + JRST SYMFIX +FIXWL: HRLZ T,W ;UPDATE VALUE OF LEFT HALF +IFN L,< JSR VTST> + ADDM T,@X ;BY VALUE OF GLOBAL + MOVSI D,400000 ;LEFT DEFERED INTERNAL +SYMFIX: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + POPJ P, ;NO, RETURN + ADDI V,(X) ;GET THE LOCATION + MOVE T,-1(V) ;GET THE SYMBOL NAME + TLNN T,40000 ;CHECK TO SEE IF INTERNAL + POPJ P, ;NO, LEAVE + ANDCAB D,-1(V) ;REMOVE PROPER BIT + TLNE D,600000 ;IS IT STILL DEFERED? + POPJ P, ;YES, ALL DONE + EXCH C,D ;NO, CHECK FOR A REQUEST FOR IT + PUSHJ P,SREQ + JRST CHNSYM ;YES, WILL HAVE TO CALL THE FIXUP ROUTINE + MOVE C,D ;GET C BACK + POPJ P, +CHNSYM: PUSH P,D ;HAS THE OLD C IN IT + PUSH P,W ;WE MAY NEED IT LATER + MOVE W,(V) ;GET VALUE + PUSHJ P,SYM2B ;CALL THE FOUND GLOBAL TO MATCH REQUEST ROUTINE + POP P,W + POP P,C ;RESTORE FOR CALLER + POPJ P, ;AND GO AWAY + +SYM2W: IFN FAILSW,< TLNE V,40000 ;CHECK FOR POLISH + JRST POLSAT> + TLNN V,100000 ;SYMBOL TABLE? + JRST SYM2WA + ADD V,JOBREL ;MAKE ABSOLUTE + SUBI V,(X) ;GET READY TO ADD X + SYM2WA: PUSHJ P,FIXW ;DO FIXUP + JRST SYM2W1 ;AND LOOK FOR MORE REQUESTS + +;END WFW PATCH + + ;PATCH VALUES INTO CHAINED REQUEST +SYM4: +IFN L,< CAMGE V,RINITL + POPJ P,> + HRRZ T,@X ;LOAD NEXT ADDRESS IN CHAIN + HRRM W,@X ;INSERT VALUE INTO PROGRAM + MOVE V,T +SYM4A: JUMPN V,SYM4 ;JUMP IF NOT LAST ADDR. IN CHAIN + POPJ P, + +IFE K,< +MVDWN: HRRZ T,MLTP +IFN EXPAND,< SUBI T,2> + CAIG T,@X; ANY ROOM LEFT? +IFN EXPAND,< JRST [PUSHJ P,XPAND> + TLOA F,FULLSW +IFN EXPAND,< JRST MVDWN + JRST .+2]> + TLNE F,SKIPSW+FULLSW + JRST MVABRT; ABORT BLT + HRREI T,-2 + ADDM T,PLTP; ADJUST PROGRAMMER LABEL POINTER + ADDM T,BITP; AND BIT TABLE POINTER + ADDM T,SDSTP; FIRST DATA STATEMENT + ADDM T,LTC + ADDM T,ITC + TLNE N,SYDAT + ADDM T,V + ADDB T,MLTP; AND FINALLY TO MADE LABEL TABLE + HRLS T; SET UP BLT POINTER + ADD T,[XWD 2,0] + BLT T,(S) +MVABRT: POPJ P,; +> +;HIGHEST RELOCATABLE POINT (BLOCK TYPE 4) +SFULLC: TLOE F,FULLSW ;PREVIOUS OVERFLOW? + JRST FULLC ;YES, DON'T PRINT MESSAGE + JSP A,ERRPT ;NO, COMPLAIN ABT OVERFLO + SIXBIT ?SYMBOL TABLE OVERLAP#? +FULLC: TLO F,FULLSW ;CORE OVERLAP ERROR RETURN +IFE K,< TLNE N,F4SW + POPJ P,> + JRST LIB3 ;LOOK FOR MORE + +HIGH0: CAIE A,4 ; TEST FOR END BLOCK (OVERLAP) + JRST LIB3 +HIGH: PUSHJ P,PRWORD ;READ TWO DATA WORDS + HRR R,C ;SET NEW PROGRAM BREAK + ADDI C,X; BE SURE TO RELOCATE + CAILE C,1(S) ;TEST PROGRAM BREAK +IFN EXPAND,<PUSHJ P,[ PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM2 + POPJ P,]> +IFE EXPAND,<TLO F,FULLSW> +HIGH3: MOVEI A,F.C ;SAVE CURRENT STATE OF LOADER + BLT A,B.C + TLNE F,SLIBSW+LIBSW ;NORMAL MODE EXIT THROUGH LOAD1 + JRST LIB ;LIBRARY SEARCH EXIT + JRST LOAD1 + + ;STARTING ADDRESS (BLOCK TYPE 7) + +START: PUSHJ P,PRWORD ;READ TWO DATA WORDS + TLNN N,ISAFLG ;SKIP IF IGNORE SA FLAG ON + HRR F,C ;SET STARTING ADDRESS +IFN STANSW,<MOVE W,1(N) ;SET UP NAME OF THIS PROGRAM + PUSHJ P,LDNAM> + +;PROGRAM NAME (BLOCK TYPE 6) + +NAME: PUSHJ P,PRWORD ;READ TWO DATA WORDS + TLOE N,COMFLG ;SKIP IF COMMON NOT PREV. SET + JRST NAME1 ;SIZE OF COMMON PREV. SET + MOVEM W,COMSAV ;STORE LENGTH OF COMMON + JUMPE W,NAME2 ;JUMP IF NO COMMON IN THIS JOB + HRRI R,@R ;FIRST PROGRAM SET LOAD ORIGIN +NAME1: CAILE H,-1(S) ;TEST FOR AVAIL. SYMBOL SPACE +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> + SUBI S,2 ;UPDATE UNDEF. TABLE POINTER + POP B,2(S) + POP B,1(S) + HRRZ V,N ;POINTER TO PREVIOUS NAME + SUBM B,V ;COMPUTE RELATIVE POSITIONS + HRLM V,2(N) ;STORE FORWARD POINTER + HRR N,B ;UPDATE NAME POINTER +NAME2: MOVEM C,1(B) ;STORE PROGRAM NAME + HRRZM R,2(B) ;STORE PROGRAM ORIGIN + CAMG W,COMSAV ;CHECK COMMON SIZE + JRST LIB3 ;COMMON OK +ILC: JSP A,ERRPT + SIXBIT /ILL. COMMON#/ +IFN HE,<SETOM RESET> + JRST LD2 +IFN FAILSW,< +LINK: PUSHJ P,PRWORD ;GET TWO WORDS + JUMPLE C,ENDLNK ;THIS IS AN END OF LINK WORD + CAILE C,20 ;IS IT IN RANGE? + JRST LOAD4A + HRRZ V,W ;GET THE ADDRESS + HRRZ W,LINKTB(C) ;GET CURRENT LINK +IFN L,< CAML V,RINITL ;LOSE> + HRRM W,@X ;PUT INTO CORE + HRRM V,LINKTB(C) ;SAVE LINK FOR NEXT ONE + JRST LINK ;GO BACK FOR MORE +ENDLNK: MOVNS C ;GET ENTRY NUMBER + JUMPE C,LOAD4A ;0 IS A LOSER + CAILE C,20 ;CHECK RANGE + JRST LOAD4A + HRLM W,LINKTB(C) ;SAVE END OF LINK INFO + JRST LINK ;MORE> + +;ONE PASS LOCAL DEFINITION (BLOCK TYPE 10) + + ;PMP PATCH FOR LEFT HALF FIXUPS +IFN FAILSW,< +LOCDLH: +IFN L,< CAMGE V,RINITL + JRST .+3> + HLRZ T,@X ;LOAD NEXT ADDRESS IN CHAIN + HRLM W,@X ;INSERT VALUE INTO PROGRAM + MOVE V,T +LOCDLF: JUMPN V,LOCDLH ;JUMP IF NOT LAST ADDR. IN CHAIN + POPJ P, +LOCDLI: PUSHJ P,LOCDLF + AOSA LFTHSW ;TURN OFF LEFT HALF FIX SW (WAS -1) AND SKIP +LOCDLG: SETOM LFTHSW ;TURN ON LEFT HALF FIX SW> + ;END PMP PATCH +LOCD: PUSHJ P,RWORD ;READ ONE DATA WORD + HLRZ V,W ;STORAGE POINTER IN LEFT HALF +IFN FAILSW,< SKIPE LFTHSW# ;LEFT HALF CHAINED? PMP + JRST LOCDLI ;YES PMP + CAMN W,[-1] ;LEFT HALF NEXT? PMP + JRST LOCDLG ;YES, SET SWITCH PMP> + PUSHJ P,SYM4A ;LINK BACK REFERENCES + JRST LOCD +IFN STANSW,< +LDNAM: MOVE T,[POINT 6,CURNAM] ;POINTER + MOVNI D,6 ;SET COUNT + TLZ W,740000 ;REMOVE CODE BITS +SETNAM: IDIVI W,50 ;CONVERT FROM RAD 50 + HRLM C,(P) + AOSGE D + PUSHJ P,SETNAM + HLRZ C,(P) + JUMPE C,INAM + ADDI C,17 + CAILE C,31 + ADDI C,7 + CAILE C,72 + SUBI C,70 + CAIN C,3 + MOVEI C,16 +INAM: IDPB C,T + POPJ P, > + IFN FAILSW,< +;POLISH FIXUPS <BLOCK TYPE 11> + +PDLOV: SKIPE POLSW ;PDL OV ARE WE DOING POLISH? + JRST COMPOL ;YES + JSP A,ERRPT + SIXBIT /PUSHDOWN OVERFLOW#/ +IFN HE,<SETOM RESET> + JRST LD2 +COMPOL: JSP A,ERRPT + SIXBIT /POLISH TOO COMPLEX#/ +IFN HE,<SETOM RESET> + JRST LD2 + + +;READ A HALF WORD AT A TIME + +RDHLF: TLON N,HSW ;WHICH HALF + JRST NORD + PUSHJ P,RWORD ;GET A NEW ONE + TLZ N,HSW ;SET TO READ OTEHR HALF + MOVEM W,SVHWD# ;SAVE IT + HLRZS W ;GET LEFT HALF + POPJ P, ;AND RETURN +NORD: HRRZ W,SVHWD ;GET RIGHT HALF + POPJ P, ;AND RETURN + + +POLFIX: MOVE D,[IOWD PPDL,PPDB] ;SET UP THE POLISH PUSHDOWN LIST + MOVEI V,100 ;IN CASE OF ON OPERATORS + MOVEM V,SVSAT + SETOM POLSW ;WE ARE DOING POLISH + TLO N,HSW ;FIX TO READ A WORD THE FIRST TIME + SETOM GLBCNT# ;NUMBER OF GLOBALS IN THIS FIXUP + SETOM OPNUM# ;NUMBER OF OPERANDS AND OPERATORS THIS FIXUP + PUSH D,[15] ;FAKE OPERATOR SO STORE WILL NOT HACK + +RPOL: PUSHJ P,RDHLF ;GET A HLAF WORD + TRNE W,400000 ;IS IT A STORE OP? + JRST STOROP ;YES, DO IT + CAIGE W,3 ;0,1,2 ARE OPERANDS + JRST OPND + CAILE W,14 ;14 IS HIGHEST OPERATOR + JRST LOAD4A ;ILL FORMAT + PUSH D,W ;SAVE OPERATOR IN STACK + MOVE V,DESTB-3(W) ;GET NUMBER OF OPERANDS NEEDED + MOVEM V,SVSAT# ;ALSO SAVE IT + JRST RPOL ;BACK FOR MORE + + ;HANDLE OPERANDS. THIS GETS COMPLICATED BECAUSE OF THE PRESENCE OF +;GLOBAL REQUESTS + +OPND: MOVE A,W ;GET THE OPERAND TYPE HERE + PUSHJ P,RDHLF ;THIS IS AT LEAST PART OF THE OPERAND + MOVE C,W ;GET IT INTO C + JUMPE A,HLFOP ;0 IS HALF-WORD OPERAND + PUSHJ P,RDHLF ;NEED FULL WORD, GET SECOND HALF + HRL C,W ;GET HALF IN RIGHT PLACE + MOVSS C ;WELL ALMOST RIGHT + SOJE A,HLFOP ;1 IS FULL WORD, 2 IS GLOBAL REQUEST + PUSHJ P,SDEF ;SEE IF IT IS ALREADY DEFINED + JRST [MOVE C,2(A) ;YES, WE WIN + JRST HLFOP] + AOSN GLBCNT ;NO, INCREMENT NUMBER OF GLOBALS THIS FIXUP + AOS HEADNM ;INCREMENT FIXUP NUMBER IF FIRST GLOBAL + AOS W,OPNUM ;GET AN OPERAND NUMBER + LSH W,4 ;SPACE FOR TYPE + IORI W,2 ;TYPE 2 IS GLOBAL + HRL W,HEADNM ;GET FIXUP NUMBER + PUSHJ P,SYM3X2 ;AND PUT INTO UDEFINED AREA ALONG WITH NAME + MOVE C,W ;ALSO PUT THAT PART OF THE FIXUP IN + PUSHJ P,SYM3X2 + SKIPA A,[400000] ;SET UP GLOBAL FLAG +HLFOP: MOVEI A,0 ;VALUE OPERAND FLAG +HLFOP1: SOJL V,CSAT ;ENOUGH OPERANDS SEEN? + PUSH D,C ;NO, SAVE VALUE(OR GLOBAL NAME) + HRLI A,400000 ;PUT IN A VALUE MARKER + PUSH D,A ;TO THE STACK + JRST RPOL ;GET MORE POLISH + + ;HAVE ENOUGH OPERANDS FOR THE CURRENT OPERATOR + +CSAT: HRRZS A ;KEEP ONLY THE GLOBAL-VALUE HALF + SKIPN SVSAT ;IS IT UNARY + JRST UNOP ;YES, NO NEED TO GET 2ND OPERAND + HRL A,(D) ;GET GLOBAL VALUE MARKER FOR 2ND OP + POP D,W + POP D,W ;VALUE OR GLOBAL NAME +UNOP: POP D,V ;OPERATOR + JUMPN A,GLOB ;IF EITHER IS A GLOBAL HANDLE SPECIALLY + XCT OPTAB-3(V) ;IF BOTH VALUES JUST XCT + MOVE C,W ;GET THE CURRENT VALUE +SETSAT: SKIPG V,(D) ;IS THERE A VALUE IN THE STACK + MOVE V,-2(D) ;YES, THIS MUST BE THE OPERATOR + MOVE V,DESTB-3(V) ;GET NUMBER OF OPERANDS NEEDED + MOVEM V,SVSAT ;SAVE IT HERE + SKIPG (D) ;WAS THERE AN OPERAND + SUBI V,1 ;HAVE 1 OPERAND ALREADY + JRST HLFOP1 ;GO SEE WHAT WE SHOULD DO NOW + +;HANDLE GLOBALS + +GLOB: TRNE A,-1 ;IS IT IN RIGHT HALF + JRST TLHG ;NO, NEED TO PUT THIS VALUE INTO THE FIXUP LIST + PUSH P,W ;SAVE FOR A WHILE + MOVE W,C ;THE VALUE + AOS C,OPNUM ;GET AN OPERAND NUMBER + LSH C,4 ;AND PUT IN TYPE + IORI C,2 ;VALUE TYPE + HRL C,HEADNM ;THE FIXUP NUMBER + PUSHJ P,SYM3X2 + POP P,W ;RETRIEVE THE OTHER VALUE +TLHG: SKIPE SVSAT ;WAS THIS A UNARY OPERATOR + TLNE A,-1 ;WAS THERE A GLOBAL IN LEFT HALF + JRST GLSET + PUSH P,C ;SAVE THE FIRST OPERAND + AOS C,OPNUM ;SEE ABOVE + LSH C,4 + IORI C,2 + HRL C,HEADNM + PUSHJ P,SYM3X2 + MOVE W,C + POP P,C + +GLSET: EXCH C,W ;GET THEM IN THE OTHER ORDER + HRL W,C ;SET UP THE OPERATOR LINK + AOS C,OPNUM + LSH C,4 ;SPACE FOR THYPE + IOR C,V ;THE OPERATOR + HRL C,HEADNM + PUSHJ P,SYM3X2 ;INTO THE UNDEF LIST + MOVEI A,400000 ;SET UP AS A GLOBAL VALUE + JRST SETSAT ;AND SET UP FOR NEXT OPERATOR + + ;FINALLY WE GET TO STORE THIS MESS + +STOROP: MOVE T,-2(D) ;THIS SHOULD BE THE FAKE OPERATOR + CAIE T,15 ;IS IT + JRST LOAD4A ;NO, ILL FORMAT + HRRZ T,(D) ;GET THE VALUE TYPE + JUMPN T,GLSTR ;AND TREAT GLOBALS SPECIAL + MOVE A,W ;THE TYPE OF STORE OPERATOR + PUSHJ P,RDHLF ;GET THE ADDRESS + MOVE V,W ;SET UP FOR FIXUPS + POP D,W ;GET THE VALUE + POP D,W ;AFTER IGNORING THE FLAG + PUSHJ P,@STRTAB+3(A) ;CALL THE CORRECT FIXUP ROUTINE +COMSTR: SETZM POLSW ;ALL DONE WITH POLISH + MOVE T,OPNUM ;CHECK ON SIZES + MOVE V,HEADNM + CAIG V,477777 + CAILE T,37777 + JRST COMPOL ;TOO BIG, GIVE ERROR + PUSHJ P,RWORD ;THIS SHOULD GET US OUT (I.E RUN OUT COUNT) + JRST LOAD4A ;IF NOT, SOMETHING IS WRONG + +STRTAB: EXP ALSTR,LOCDLF,SYM4A + +GLSTR: MOVEI A,20(W) ;CONVERT TO OPERATOR 15-17 + PUSHJ P,RDHLF ;GET THE STORE LOCATION + POP D,V ;GET VALUE + POP D,V + HRLM V,W ;SET UP STORAGE ELEMENT + AOS C,OPNUM + LSH C,4 + IOR C,A + HRL C,HEADNM + PUSHJ P,SYM3X2 + MOVE W,C ;NOW SET UP THE HEADER + AOS V,GLBCNT ;WHICH HAS NUMBER OF GLOBALS + HRLM V,W + HRRZ C,HEADNM + PUSHJ P,SYM3X2 + JRST COMSTR ;AND FINISH + + ALSTR1: +IFN L,< CAMGE V,RINITL + POPJ P,> + HRRZ T,@X + MOVEM W,@X ;FULL WORD FIXUPS + MOVE V,T +ALSTR: JUMPN V,ALSTR1 + POPJ P, +DESTB: EXP 1,1,1,1,1,1,1,1,0,0,100 + +OPTAB: ADD W,C + SUB W,C + IMUL W,C + IDIV W,C + AND W,C + IOR W,C + LSH W,(C) + XOR W,C + SETCM W,C + MOVN W,C + REPEAT 3,<JRST STRSAT> + + + POLSAT: PUSH P,C ;SAVE SYMBOL + MOVE C,V ;POINTER + PUSHJ P,SREQ ;GO FIND IT + SKIPA + JRST LOAD4A ;SOMETHING IS ROTTEN IN DENMARK + MOVEM W,2(A) ;STORE VALUE + HLRZS C ;NOW FIND HEADER + PUSHJ P,SREQ + SKIPA + JRST LOAD4A + HRLZI V,-1 ;AND DECREMENT COUNT + ADDB V,2(A) + TLNN V,-1 ;IS IT NOW 0 + JRST PALSAT ;YES, GO DO POLISH + POP P,C ;RESTORE SYMBOL + JRST SYM2W1 ;AND RETURN + +PALSAT: PUSH P,W ;SAVE VALUE + MOVEM C,HDSAV# ;SAVE THE HEADER NUMBER + MOVE D,[IOWD PPDL,PPDB] ;SET UP A PDL + MOVE C,V ;GET THE POINTER + HRL C,HDSAV ;AND THE FIXUP NUMBER + PUSHJ P,REMSYM ;REMOVE THE HEADER FORM EXISTANCE + PUSHJ P,SREQ ;GO FINE THE NEXT LINK + SKIPA + JRST LOAD4A ;LOSE + ANDI C,17 ;GET OPERATOR TYPE + HRRZ V,2(A) ;PLACE TO STORE + PUSH D,V + PUSH D,[XWD 400000,0] + PUSH D,C ;THIS HAD BETTER BE A STORE OR WE ARE IN TROUBLE + HLRZ C,2(A) ;GET POINTER TO POLISH CHAIN +PSAT1: PUSHJ P,REMSYM ;REMOVE SYMBOL + + PSAT2: HRL C,HDSAV ;GET FIXUP NUMBER + PUSHJ P,SREQ ;LOOK FOR IT + SKIPA + JRST LOAD4A + ANDI C,17 ;THE OPERATOR NUMBER + CAIN C,2 ;IS IT AN OPERAND? + JRST PSOPD ;YES, GO PROCESS + PUSH D,C ;YES STORE IT + SKIPN DESTB-3(C) ;IS IT UNARY + JRST PSUNOP ;YES + HLRZ C,2(A) ;GET FIRST OPERAND + HRLI C,600000 ;AND MARK AS VALUE + PUSH D,C +PSUNOP: HRRZ C,2(A) ;OTHER OPERAND + JRST PSAT1 ;AND AWAY WE GO + +PSOPD: MOVE C,2(A) ;THIS IS A VALUE + PUSHJ P,REMSYM ;GET RID OF THAT PART OF THE CHAIN +PSOPD1: SKIPG V,(D) ;IS THERE A VALUE IN THE STACK + JRST PSOPD2 ;YES, TAKE GOOD CARE OF IT +COMOP: POP D,V ;NO, GET THAT OPERATOR OUT OF THERE + XCT OPTAB-3(V) ;AND DO IT + MOVE C,W ;GET RESULT IN RIGHT PLACE + JRST PSOPD1 ;AND TRY FOR MORE +PSOPD2: TLNE V,200000 ;IS IT A POINTER + JRST DBLOP ;YES, NEEDS MORE WORK + MOVE W,C ;NO, ONE WE HAVE IS FIRST OPND, GET IT INTO W + POP D,C ;VALUE POINTER + POP D,C ;2ND OPERAND INTO C + JRST COMOP ;GO PROCESS OPERATOR + +DBLOP: EXCH C,(D) ;PUT VALUE IN STACK AND RETRIEV POINTER + PUSH D,[XWD 400000,0] ;MARK AS VALUE + JRST PSAT2 ;AND GO LOOK FOR MORE TROUBLE + + STRSAT: MOVE W,C ;GET VALUE TO STORE IN W + MOVE C,V ;GET OPERATOR HERE + POP D,V + POP D,V ;GET ADDRESS TO STORE + PUSHJ P,@STRTAB-15(C) + POP P,W ;RESTORE THINGS + POP P,C + JRST SYM2W1 + +PPDB: BLOCK PPDL+1> + +REMSYM: MOVE T,1(S) + MOVEM T,1(A) + MOVE T,2(S) + MOVEM T,2(A) + ADD S,SE3 + MOVEM A,SVA + POPJ P, + + ;SYMBOL TABLE SEARCH SUBROUTINES + +; ENTERED WITH SYMBOL IN C +; RETURN IS WITH POINTER IN A IF MATCHING SYMBOL FOUND +; OTHERWISE, A SKIP ON RETURN OCCURS + +SREQ: JUMPGE S,CPOPJ1 ;JUMP IF NO UNDEF. SYMBOLS + SKIPA A,S ;LOAD REQUEST SEARCH POINTER +SDEF: MOVE A,B ;LOAD DEF. SYMBOL SEARCH POINTER +SDEF1: CAMN C,1(A) + POPJ P, ;SYMBOLS MATCH, RETURN +SDEF2: ADD A,SE3 + JUMPL A,SDEF1 +IFE K,< JRST CPOPJ1 ;SYMBOL NOT FOUND SKIPS ON RETURN> +IFN K,< +CPOPJ1: AOS (P) ;TRA 2,4 + POPJ P, ;...> + +;RELOCATION AND BLOCK INPUT + +PRWORD: PUSHJ P,RWORD ;READ A WORD PAIR + MOVE C,W ;LOAD C WITH FIRST DATA WORD + TRNE E,377777 ;TEST FOR END OF BLOCK + JRST RWORD1 ;INPUT SECOND WORD OF PAIR + MOVEI W,0 ;NO SECOND WORD, ASSUME ZERO + POPJ P, + +RWORD: TRNN E,377777 ;TEST FOR END OF BLOCK + JRST LOAD1 ;RETURN TO LOAD THE NEXT BLOCK +RWORD1: AOBJN E,RWORD2 ;JUMP IF DATA WORD NEXT + PUSHJ P,WORD ;READ CONTROL WORD + MOVE Q,W ;DON'T COUNT RELOCATION WORDS + HRLI E,-22 ;SET RELOCATION WORD BYTE COUNT +RWORD2: PUSHJ P,WORD ;READ INPUT WORD + JUMPGE Q,RWORD3 ;TEST LH RELOCATION BIT + HRLZ T,R + ADD W,T ;LH RELOCATION +RWORD3: TLNE Q,200000 ;TEST RH RELOCATION BIT + HRRI W,@R ;RH RELOCATION + LSH Q,2 + POPJ P, + + ;PRINT STORAGE MAP SUBROUTINE + +PRMAP: PUSHJ P,FSCN1 ;LOAD OTHER FILES FIRST + PUSHJ P,CRLFLF ;START NEW PAGE + HRRZ W,R + PUSHJ P,PRNUM0 + JSP A,ERRPT7 + SIXBIT ?IS THE PROGRAM BREAK@? + PUSHJ P,CRLF ;START STORAGE MAP + JSP A,ERRPT0 ;PRINT HEADER + SIXBIT ?STORAGE MAP@? + HLRE A,B + MOVNS A + ADDI A,(B) +PRMAP1: SUBI A,2 + SKIPL C,1(A) ;LOAD SYMBOL, SKIP IF DELETED + TLNE C,300000 ;TEST FOR LOCAL SYMBOL + JRST PRMAP4 ;IGNORE LOCAL SYMBOLS + TLNN C,040000 + PUSHJ P,CRLF ;PROGRAM NAME + PUSHJ P,PRNAM1 ;PRINT SYMBOL AND VALUE + TLNE C,040000 + JRST PRMAP3 ;GLOBAL SYMBOL + HLRE C,W ;POINTER TO NEXT PROG. NAME + JUMPGE C,PRMAP2 ;JUMP IF LAST PROGRAM NAME + ADDI C,2(A) ;COMPUTE LOC. OF FOLLOWING NAME + SKIPA T,@C ;LOAD ORIGIN OF FOLLOWING PROG. +PRMAP2: HRRZ T,R ;LOAD PROGRAM BREAK + SUBM T,W ;SUBTRACT ORIGIN TO GET LENGTH + PUSHJ P,PRNUM ;PRINT PROGRAM LENGTH + PUSHJ P,CRLF + TLNN N,ALLFLG ;SKIP IF LIST ALL MODE IS ON + TRNE W,777777 ;SKIP IF ZERO LENGTH PROGRAM + JRST PRMAP3 + JUMPE C,PRMAP5 ;JUMP IF LAST PROGRAM + SKIPA A,C ;SKIP GLOBALS, ZERO LENGTH PROG. +PRMAP3: PUSHJ P,CRLF +PRMAP4: CAILE A,(B) ;TEST FOR END OF SYMBOL TABLE + JRST PRMAP1 +PRMAP5: + + ;LIST UNDEFINED GLOBALS + +PMS: PUSHJ P,FSCN1 ;LOAD FILES FIRST + JUMPGE S,PMS3 ;JUMP IF NO UNDEFINED GLOBALS + HLLOS 42 ;SET SOME ERROR TO ABORT EXECUTION + PUSHJ P,FCRLF ;START THE MESSAGE + PUSHJ P,PRQ ;PRINT ? + HLRE W,S ;COMPUTE NO. OF UNDEF. GLOBALS + MOVMS W + LSH W,-1 ;<LENGTH OF LIST>/2 + PUSHJ P,PRNUM0 + JSP A,ERRPT7 + SIXBIT /UNDEFINED GLOBALS@/ + MOVE A,S ;LOAD UNDEF. POINTER +PMS2: PUSHJ P,CRLF + PUSHJ P,PRQ ;PRINT ? + PUSHJ P,PRNAM0 ;PRINT SYMBOL AND POINTER + ADD A,SE3 + JUMPL A,PMS2 + PUSHJ P,CRLF ;SPACE AFTER LISTING + +;LIST NUMBER OF MULTIPLY DEFINED GLOBALS + +PMS3: SKIPN W,MDG ;ANY MULTIPLY DEFINED GLOBALS + JRST PMS4 ;NO, EXCELSIOR + HLLOS 42 ;ANOTHER WAY TO LOSE + PUSHJ P,FCRLF ;ROOM AT THE TOP + PUSHJ P,PRQ ;PRINT ? + PUSHJ P,PRNUM0 ;NUMBER OF MULTIPLES + JSP A,ERRPT7 ;REST OF MESSAGE + SIXBIT ?MULTIPLY DEFINED GLOBALS@? +PMS4: TLNE N,AUXSWE ;AUXILIARY OUTPUT DEVICE? + OUTPUT 2, ;INSURE A COMPLETE BUFFER + POPJ P, ;RETURN + + ;ENTER FILE ON AUXILIARY OUTPUT DEVICE + +IAD2: ENTER 2,DTOUT ;WRITE FILE NAME IN DIRECTORY + JRST IMD3 ;NO MORE DIRECTORY SPACE + POPJ P, + +IMD3: JSP A,ERRPT ;DIRECTORY FULL ERROR + SIXBIT /DIR. FULL@/ + JRST LD2 + +;PRINT THE 6 DIGIT OCTAL ADDRESS IN W + +; ACCUMULATORS USED: D,T,V + +PRNAM0: MOVE C,1(A) ;LOAD SYMBOL +PRNAM1: MOVE W,2(A) ;LOAD VALUE +PRNAM: PUSHJ P,PRNAME +PRNUM: PUSHJ P,SPACES +PRNUM0: MOVE V,PRNUM2 ;LOAD BYTE POINTER TO RH. OF W + MOVNI D,6 ;LOAD CHAR. COUNT +PRNUM1: ILDB T,V ;LOAD DIGIT TO BE OUTPUT + ADDI T,60 ;CONVERT FROM BINARY TO ASCII + PUSHJ P,TYPE2 + AOJL D,PRNUM1 ;JUMP IF MORE DIGITS REMAIN + POPJ P, + +PRNUM2: XWD 220300,W + +;YE OLDE RECURSIVE NUMBER PRINTER +;PRINTS Q, WITH LEADING ZEROES SUPPRESSED; USES A AND T + +RCNUM: IDIVI Q,12 ;RADIX DECIMAL + ADDI A,"0" + HRLM A,(P) + SKIPE Q + PUSHJ P,RCNUM + HLRZ T,(P) + JRST TYPE2 + + ;PRINT FOUR SPACES + +SPACES: PUSHJ P,SP1 +SP1: PUSHJ P,SPACE +SPACE: MOVEI T,40 + JRST TYPE2 + +;SYMBOL PRINT - RADIX 50 + +; ACCUMULATORS USED: D,T + +PRNAME: MOVE T,C ;LOAD SYMBOL + TLZ T,740000 ;ZERO CODE BITS + MOVNI D,6 ;LOAD CHAR. COUNT +SPT: IDIVI T,50 ;THE REMAINDER IS THE NEXT CHAR. + HRLM V,(P) ;STORE IN LH. OF PUSHDOWN LIST + AOSGE D ;SKIP IF NO CHARS. REMAIN + PUSHJ P,SPT ;RECURSIVE CALL FOR NEXT CHAR. + HLRZ T,(P) ;LOAD FROM LH. OF PUSHDOWN LIST + JUMPE T,TYPE ;BLANK + ADDI T,60-1 + CAILE T,71 + ADDI T,101-72 + CAILE T,132 + SUBI T,134-44 + CAIN T,43 + MOVEI T,56 + JRST TYPE2 +;PRINT A WORD OF SIXBIT CHARACTERS IN AC W + +; ACCUMULATORS USED: Q,T,D + +PWORD: MOVNI Q,6 ;SET CHARACTER COUNT TO SIX +PWORD1: MOVE D,LSTPT ;ENTER HERE WITH Q PRESET +PWORD2: ILDB T,D ;LOAD NEXT CHAR. TO BE OUTPUT + PUSHJ P,TYPE ;OUTPUT CHARACTER + AOJL Q,PWORD2 + POPJ P, + + ;ERROR MESSAGE PRINT SUBROUTINE + +; FORM OF CALL: + +; JSP A,ERRPT +; SIXBIT /<MESSAGE>/ + +; ACCUMULATORS USED: T,V,C,W + +ERRPT: TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,CRLF ;ROOM AT THE TOP + PUSHJ P,PRQ ;START OFF WITH ? +ERRPT0: PUSH P,Q ;SAVE Q + SKIPA V,ERRPT5 +ERRPT1: PUSHJ P,TYPE + ILDB T,V + CAIN T,40 + JRST ERRPT4 + CAIN T,5 + JRST ERRPT9 + CAIE T,3 + JRST ERRPT1 + SKIPN C,DTIN + JRST ERRPT4 + MOVNI Q,14 + MOVEI W,77 +ERRPT2: TDNE C,W + JRST ERRPT3 + LSH W,6 + AOJL Q,ERRPT2 +ERRPT3: MOVE W,ERRPT6 + PUSHJ P,PWORD1 + SKIPN W,DTIN1 + JRST ERRPT4 + LSH W,-6 + TLO W,160000 + MOVNI Q,4 + PUSHJ P,PWORD1 +ERRPT4: PUSHJ P,CRLF +ERRP41: POP P,Q + TLZ F,FCONSW ;ONE ERROR PER CONSOLE + AOS V ;PROGRAM BUMMERS BEWARE: + JRST @V ;V HAS AN INDEX OF A + +ERRPT5: POINT 6,0(A) +ERRPT6: SIXBIT / FILE / + + ERRPT8: TLO F,FCONSW ;INSURE TTY OUTPUT + PUSHJ P,PRQ ;START WITH ? + CAIGE T,140 ;IS IT A NON-PRINTING CHAR? + CAIL T,40 + JRST ERRP8 + PUSH P,T + MOVEI T,136 ;UP ARROW + PUSHJ P,TYPE2 + POP P,T + ADDI T,100 ;CONVERT TO PRINTING CHAR. +ERRP8: PUSHJ P,TYPE2 +ERRPT7: PUSHJ P,SPACE + JRST ERRPT0 + +ERRPT9: MOVEI V,@V + PUSH P,V + JSP A,ERRPT7 + SIXBIT ?ILLEGAL -LOADER@? + POP P,V + JRST ERRP41 + +;PRINT QUESTION MARK + +PRQ: PUSH P,T ;SAVE + MOVEI T,"?" ;PRINT ? + PUSHJ P,TYPE2 ;... + POP P,T ;RESTORE + POPJ P, ;RETURN + + ;INPUT - OUTPUT INTERFACE + +;BINARY INPUT SUBROUTINE - RETURNS A WORD IN W +IFE K,< +WORDPR: PUSHJ P,WORD ;GET FIRST WORD OF PAIR + MOVE C,W ;KEEP IT HANDY> +WORD: SOSG BUFR2 ;SKIP IF BUFFER NOT EMPTY + JRST WORD2 +WORD1: ILDB W,BUFR1 ;PICK UP 36 BIT WORD + POPJ P, + +WORD2: INPUT 1, ;GET NEXT BUFFER LOAD + STATUS 1,W ;GET DEVICE STATUS FROM MONITOR + TRNE W,IODEND ;TEST FOR EOF + JRST EOF ;END OF FILE EXIT + TRNN W,IOBAD ;TEST FOR DATA ERROR + JRST WORD1 ;DATA OK - CONTINUE LOADING + JSP A,ERRPT ;DATA ERROR - PRINT MESSAGE + SIXBIT /INPUT ERROR#/ +IFN HE,<SETOM RESET> + JRST LD2 ;GO TO ERROR RETURN +;TYPEOUT SUBROUTINE - THE CHARACTER SUPPLIED IN T IS CONVERTED TO ASCII +;AND IS OUTPUT ON THE CONSOLE AND/OR THE SPECIFIED LOADER MAP OUTPUT +;DEVICE + +CRLFLF: PUSHJ P,CRLF +FCRLF: TLO F,FCONSW ;INSURE TTY OUTPUT +CRLF: MOVEI T,15 ;CARRIAGE RETURN LINE FEED + PUSHJ P,TYPE2 + MOVEI T,12-40 ;LINE FEED IN PSEUDO SIXBIT +TYPE: MOVEI T,40(T) ;CONVERT SIXBIT TO ASCII +TYPE2: TLNN N,AUXSWI ;IS THER AN AUXILIARY DEVICE? + JRST TYPE3 ;NO, DONT OUTPUT TO IT + TLON N,AUXSWE ;IS AUX. DEV. ENTERED? + PUSHJ P,IAD2 ;NOPE, DO SO! + SOSG ABUF2 ;SPACE LEFT IN BUFFER? + OUTPUT 2, ;CREATE A NEW BUFFER + IDPB T,ABUF1 ;DEPOSIT CHARACTER + TLNN F,FCONSW ;FORCE OUTPUT TO CONSOLE TOO? + POPJ P, ;NOPE +IFE HE,< +TYPE3: SKIPN BUFO2 ;END OF BUFFER + OUTPUT 3, ;FORCE OUTPUT NOW + IDPB T,BUFO1 ;DEPOSIT CHARACTER + CAIN T,12 ;END OF LINE + OUTPUT 3, ;FORCE AN OUTPUT + > +IFN HE, < +TYPE3: ROT T,-7 + MOVEM T,FOO1# + MOVEI T,FOO1 + CALLI T,CDDTOUT> + POPJ P, + + SE3: XWD 2,2 ;SYMBOL POINTER INCREMENT +LSTPT: POINT 6,W ;CHARACTER POINTER TO W +PDLPT: XWD -41,PDLST-1; INITIAL PUSHDOWN POINTER +COMM: SQUOZE 0,.COMM. +PDSAV: 0 ;SAVED PUSHDOWN POINTER +COMSAV: 0 ;LENGTH OF COMMON +MDG: 0 ;COUNTER FOR MUL DEF GLOBALS +PDLST: IFE HE,<BLOCK 40> +IFN FAILSW,<LINKTB: BLOCK 21> + +F.C: 0 + 0 ;STORE N HERE + 0 ;STORE X HERE + 0 ;STORE H HERE + 0 ;STORE S HERE + 0 ;STORE R HERE +B.C: 0 +IFE HE,< +F.I: 0 ;INITIAL F - FLAGS + 0 ;INITIAL N + XWD V,LDEND ;INITIAL X - LOAD PROGRAM AFTER LOADER + EXP LDEND+JOBPRO ;INITIAL H - INITIAL PROG BREAK + 0 ;INITIAL S + XWD W,JOBPRO ;INITIAL R - INITIAL RELOC + 0 ;INITIAL B + > + ;BUFFER HEADERS AND HEADER HEADERS + +IFE HE,< +BUFO: 0 ;CONSOLE INPUT HEADER HEADER +BUFO1: 0 +BUFO2: 0 + +BUFI: 0 ;CONSOLE OUTPUT HEADER HEADER +BUFI1: 0 +BUFI2: 0 + > +ABUF: 0 ;AUXILIARY OUTPUT HEADER HEADER +ABUF1: 0 +ABUF2: 0 + +BUFR: 0 ;BINARY INPUT HEADER HEADER +BUFR1: 0 +BUFR2: 0 + +DTIN: 0 ;DECTAPE INPUT BLOCK +IFE HE,<DTIN1: 0> +IFN HE,<DTIN1: SIXBIT /REL /> + 0 +DTIN2: 0 + +DTOUT: 0 ;DECTAPE OUTPUT BLOCK +DTOUT1: 0 + 0 + 0 + + TTYL=52 ;TWO TTY BUFFERS +IFE K,< BUFL=406 ;TWO DTA BUFFERS FOR LOAD> +IFN K,< BUFL=203 ;ONE DTA BUFFER FOR LOAD> + ABUFL=203 ;ONE DTA BUFFER FOR AUX DEV +IFN HE,<BUFL=406> +IFE HE,< +TTY1: BLOCK TTYL ;TTY BUFFER AREA + > +BUF1: BLOCK BUFL ;LOAD BUFFER AREA +AUX: BLOCK ABUFL ;AUX BUFFER AREA +ZEROS: REPEAT 4,<0> + +IFN RPGSW,<CTLIN: BLOCK 3 +CTLNAM: BLOCK 3 +CTLBUF: BLOCK 203+1 +> + IOBKTL=40000 +IOIMPM=400000 + IODERR=200000 + IODTER=100000 + IODEND=20000 + +IOBAD=IODERR+IODTER+IOBKTL+IOIMPM + +IFE HE,< + INTERN PWORD,DTIN,DTOUT,LDEND + INTERN WORD,LD,BEG,PDLST,LOAD + INTERN CRLF,TYPE,PMS,PRMAP + INTERN F,P,X,H,S,R,B,N,T,V,W,C,E,Q,A,D + > +IFN HE,< +INTERNAL .LOAD, .PRMAP, PMS, .NAME, ERRPT8 +EXTERNAL .GETF + > + + EXTERN JOBDDT,JOBFF,JOBSA,JOBREL,JOBSYM,JOBUSY,JOB41 +IFE HE,< +IFN STANSW,<PATCH: BLOCK 20 ;STANFORD HAS SEMI-INFINITE CORE> +> + +;END HERE IF 1K LOADER REQUESTED. +IFN K, <LITS: LIT + VAR +IFE HE, < +LDEND: END LD> +IFN HE, < +LDEND: END >> + + ;HERE BEGINS FORTRAN FOUR LOADER + +F4LD: + HRRZ V,R; SET PROG BREAK INTO V + MOVEM V,LLC; SAVE FIRST WORD ADDRESS + MOVEI W,-2(S); GENERATE TABLES + TLO N,F4SW + HRRZM W,MLTP; MADE LABELS + HRRZM W,PLTP; PROGRAMMER LABELS + ADD W,[POINT 1,1]; GENERATE BIT-BYTE POINTER + MOVEM W,BITP + MOVEM W,SDSTP; FIRST DATA STATEMENT + AOS SDSTP; + MOVE W,[JRST ALLOVE] ;LAST DATA STATEMENT + MOVEM W,(S) + HRREI W,-^D36; BITS PER WORDUM + MOVEM W,BITC; BIT COUNT + PUSHJ P,BITWX+1 ;MAKE SURE OF ENOUGH SPACE + +TEXTR: PUSHJ P,WORD; TEXT BY DEFAULT + HLRZ C,W + CAIN C,-1 + JRST HEADER; HEADER + MOVEI C,1; RELOCATABLE + PUSHJ P,BITW; SHOVE AND STORE + JRST TEXTR; LOOP FOR NEXT WORD + +ABS: SOSG BLKSIZ; MORE TO GET + JRST TEXTR; NOPE +ABSI: PUSHJ P,WORD; + MOVEI C,0; NON-RELOCATABLE + PUSHJ P,BITW; TYPE 0 + JRST ABS + + ;PROCESS TABLE ENTRIES + +MDLB: TLNE F,FULLSW+SKIPSW; MADE LABEL PROC + JRST GLOBDF; NO ROOM AT THE IN + HLRZ C,MLTP; GET PRESENT SIZE + CAMGE C,BLKSIZ; IF NEW SIZE BIGGER, STR-R-RETCH + PUSHJ P,SMLT + HRRZ C,MLTP; GET BASE +MLPLC: ADD C,BLKSIZ; MAKE INDEX + TLNN F,FULLSW+SKIPSW; DONT LOAD + HRRZM V,(C); PUT AWAY DEFINITION +GLOBDF: PUSHJ P,WORD + TLNE F,FULLSW+SKIPSW ;SKIPPING THIS PROG? + JRST TEXTR ;YES, DON'T DEFINE + MOVEI C,(V); AND LOC + EXCH W,C + PUSHJ P,SYMXX; PUT IN DDT-SYMBOL TABLE + PUSHJ P,BITWX+1 + JRST TEXTR + +PLB: TLNE F,FULLSW+SKIPSW + JRST GLOBDF + HLRZ C,PLTP; PRESENT SIZE + CAMGE C,BLKSIZ + PUSHJ P,SPLT + HRRZ C,PLTP + JRST MLPLC + + ;STORE WORD AND SET BIT TABLE + +BITW: TLNE F,FULLSW+SKIPSW; WE DONT LOAD THIS + POPJ P,; + MOVEM W,@X; STORE AWAY OFFSET + IDPB C,BITP; STORE BIT + AOSGE BITC; STEP BIT COUNT + JRST BITWX; SOME MORE ROOM LEFT + HRREI C,-^D36; RESET COUNT + MOVEM C,BITC + SOS PLTP + SOS BITP; ALL UPDATED +IFE EXPAND,<HRL C,MLTP + SOS MLTP + HRR C,MLTP> +IFN EXPAND,<HRRZ C,MLTP; TO ADDRESS + SUBI C,1 + CAIG C,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADDI C,2000 + JRST POPJM2] + SOS MLTP + HRLI C,1(C)> + HRRZ T,SDSTP; GET DATA POINTER + BLT C,-1(T); MOVE DOWN LISTS +BITWX: AOS V; STEP LOADER LOCATION + HRRZ T,MLTP + CAIG T,@X; OVERFLOW CHECK +IFE EXPAND,<TLO F,FULLSW> +IFN EXPAND,<PUSHJ P, [PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM3 + POPJ P,]> + POPJ P,; + +SMLT: SUB C,BLKSIZ; STRETCH + MOVS W,MLTP ;LEFT HALF HAS OLD BASE + ADD C,MLTP ;RIGHT HALF HAS NEW BASE +IFN EXPAND,< HRRZS C ;GET RID OF COUNT + CAIG C,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADD W,[XWD 2000,0] + ADDI C,2000 + JRST POPJM2]> + HRRM C,MLTP ;PUT IN NEW MLTP + HLL C,W ;FORM BLT POINTER + ADDI W,(C) ;LAST ENTRY OF MLTP + HRL W,BLKSIZ ;NEW SIZE OF MLTP + HLLM W,MLTP ;... +SLTC: BLT C,0(W); MOVE DOWN (UP?) + POPJ P,; + +SPLT: SUB C,BLKSIZ + MOVS W,MLTP; + ADDM C,PLTP + ADD C,MLTP +IFN EXPAND,< HRRZS C + CAIG C,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADD W,[XWD 2000,0] + ADDI C,2000 + JRST POPJM2]> + HRRM C,MLTP ;PUT IN NEW MLTP + HLL C,W + HLRZ W,PLTP ;OLD SIZE OF PL TABLE + ADD W,PLTP ;NEW BASE OF PL TABLE + HRL W,BLKSIZ ;NEW SIZE OF PL TABLE + HLLM W,PLTP ;INTO POINTER + JRST SLTC + +PT1: 0 + + + ;PROCESS END CODE WORD + +ENDS: PUSHJ P,WORD; GET STARTING ADDRESS + TLNE F,SKIPSW + JRST ENDS1 ;FOOBAZ!!!!!!!! + JUMPE W,ENDS1; NOT MAIN + ADDI W,(R); RELOCATION OFFSET + TLNN N,ISAFLG; IGNORE STARTING ADDRESS + HRR F,W; SET SA +IFN STANSW,<MOVE W,1(N) ;SET UP NAME + PUSHJ P,LDNAM> +ENDS1: PUSHJ P,WORDPR ;DATA STORE SIZE + HRRZM C,PTEMP ;NUMBER OF PERMANENT TEMPS + MOVEM V,CCON; START OF CONSTANTS AREA + JUMPE W,E1; NULL + MOVEM W,BLKSIZ ;SAVE COUNT + MOVEI W,0(V) ;DEFINE CONST. + MOVE C,CNR50 ;... + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMPT ;... + PUSHJ P,GSWD ;STORE CONSTANT TABLE +E1: MOVEI W,0(V); GET LOADER LOC + EXCH W,PTEMP; STORE INTO PERM TEMP POINTER + ADD W,PTEMP; FORM TEMP TEMP ADDRESS + MOVEM W,TTEMP; POINTER + MOVEM V,GSTAB; STORE LOADER LOC IN GLOBSUB + MOVE C,TTR50 ;DEFINE %TEMP. + TLNE F,SKIPSW!FULLSW + JRST E1A + PUSHJ P,SYMPT ;... + MOVE C,PTR50 ;DEFINE (IF EXTANT) TEMP. + MOVEI W,0(V) ;... + CAME W,TTEMP ;ANY PERM TEMPS? + PUSHJ P,SYMPT ;YES, DEFINE +E1A: PUSHJ P,WORD; NUMBER OF GLOBSUBS + JUMPE W,E11 + MOVEM W,BLKSIZ ;SIZE OF GLOBSUB + PUSHJ P,GSWD ;STORE GLOBSUB TABLE +E11: MOVEM V,STAB; SCALARS + PUSHJ P,WORD; HOW MANY? + JUMPE W,E21; NONE + PUSHJ P,GSWDPR ;STORE SCALAR TABLE +E21: MOVEM V,ATAB; ARRAY POINTER + PUSHJ P,WORD; COMMENTS FOR SCALARS APPLY + JUMPE W,E31 + PUSHJ P,GSWDPR ;STORE ARRAY TABLE +E31: MOVEM V,AOTAB; ARRAYS OFFSET + PUSHJ P,WORD; SAME COMMENTS AS ABOVE + JUMPE W,E41 + PUSHJ P,GSWDPR ;STORE ARRAY OFFSET TABLE +E41: PUSHJ P,WORD; TEMP, SCALAR, ARRAY SIZE + TLNE F,FULLSW!SKIPSW ;SKIPPING THIS PROG? + MOVEI W,0 ;DON'T ACCEPT GLOB SUBPROG REQUESTS + MOVEM V,CTAB; SETUP COMMON TABLE POINTER + ADD W,GSTAB; GLOBAL SUBPROG BASE + MOVEM W,COMBAS; START OF COMMON + PUSHJ P,WORD; COMMON BLOCK SIZE + HRRZM W,BLKSIZ + JUMPE W,PASS2; NO COMMON +COMTOP: PUSHJ P,WORDPR ;GET A COMMON PAIR + PUSHJ P,SDEF; SEARCH + JRST COMYES; ALREADY THERE + HRLS W + HRR W,COMBAS; PICK UP THIS COMMON LOC + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMXX; DEFINE IT + MOVS W,W; SWAP HALFS + ADD W,COMBAS; UPDATE COMMON LOC + HRRM W,COMBAS; OLD BASE PLUS NEW SIZE + HLRZS W; RETURN ADDRESS + TLZ C,400000 + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMXX +COMCOM: PUSHJ P,CWSTWX ;STORE A WORD PAIR + SOS BLKSIZ + SOSLE BLKSIZ + JRST COMTOP + JRST PASS2 + +COMYES: TLNE F,SKIPSW + JRST COMCOM ;NO ERRORS IF SKIPPING + HLRZ C,2(A); PICK UP DEFINITION + CAMLE W,C; CHECK SIZE + JRST ILC; ILLEGAL COMMON + MOVE C,1(A); NAME + HRRZ W,2(A); BASE + JRST COMCOM + + +PRSTWX: PUSHJ P,WORDPR ;GET A WORD PAIR +CWSTWX: EXCH C,W ;SPACE TO STORE FIRST WORD OF PAIR? + PUSHJ P,WSTWX ;... + EXCH C,W ;THERE WAS; IT'S STORED +WSTWX: TLNE F,FULLSW!SKIPSW ;SPACE FOR ANOTHER WORD? + POPJ P, ;NOPE, RETURN + MOVEM W,@X ;YES, STORE IT. + JRST BITWX ;TELL THE TABLES ABOUT IT; THEN RETURN + + +GSWD: PUSHJ P,WORD ;GET WORD FROM TABLE + PUSHJ P,WSTWX ;STASH IT + SOSE BLKSIZ ;FINISHED? + JRST GSWD ;NOPE, LOOP + POPJ P, ;TRA 1,4 + +GSWDPR: MOVEM W,BLKSIZ ;KEEP COUNT +GSWDP1: PUSHJ P,PRSTWX ;GET AND STASH A PAIR + SOS BLKSIZ ;FINISHED? + SOSLE BLKSIZ ;... + JRST GSWDP1 ;NOPE, LOOP + POPJ P, ;TRA 1,4 + + ;BEGIN HERE PASS2 TEXT PROCESSING + +PASS2: ADDI V,(X) + MOVEM V,TOPTAB ;SAVE FOR OVERLAP CHECKING + TLNE F,FULLSW+SKIPSW; ABORT? + JRST ALLOVE; YES + MOVE V,LLC ;PICK UP PROGRAM ORIGIN + CAML V,CCON ;IS THIS A PROGRAM? + JRST FBLKD ;NO, GO LOOK FOR FIRST BLK DATA + TLOE N,PGM1 ;YES, IS THIS FIRST F4 PROG? + JRST NOPRG ;NO + HRR W,COMBAS ;YES, PLACE PROG BREAK IN LH +IFE L,< HRLM W,JOBCHN(X) ;FOR CHAIN> +NOPRG: HRRZ W,PLTP; GET PROG TABLE BASE + HLRZ C,PLTP; AND SIZE + ADD W,C; COMPUTE END OF PROG TABLE + ADD W,[POINT 1,1]; AND BEGINNING OF BIT TABLE + EXCH W,BITP; SWAP POINTERS +PASS2B: ILDB C,BITP; GET A BIT + JUMPE C,PASS2C; NO PASS2 PROCESSING + PUSHJ P,PROC; PROCESS A TAG + JRST PASS2B; MORE TO COME + JRST ENDTP; + +PROC: LDB C,[POINT 6,@X,23]; TAG + SETZM MODIF; ZERO TO ADDRESS MODIFIER + TRZE C,40; + AOS MODIF + HRLM C,ENDTAB; ERROR SETUP + MOVEI W,TABDIS; HEAD OF TABLE + HLRZ T,(W); GET ENTRY + CAME T,C; CHECK + AOJA W,.-2 + HRRZ W,(W); GET DISPATCH + LDB C,[POINT 12,@X,35] + JRST (W); DISPATCH + +TABDIS: XWD 11,PCONS; CONSTANTS + XWD 06,PGS; GLOBAL SUBPROGRAMS + XWD 20,PST; SCALARS + XWD 22,PAT; ARRAYS + XWD 01,PATO; ARRAYS OFFSET + XWD 00,PPLT; PROGRAMMER LABELS + XWD 31,PMLT; MADE LABESL + XWD 26,PPT; PERMANENT TEMPORARYS + XWD 27,PTT; TEMPORARY TEMPORARYS +ENDTAB: XWD 00,LOAD4A; ERRORS + +PASS2C: PUSHJ P,PASS2A + JRST PASS2B + JRST ENDTP + + ;DISPATCH ON A HEADER + +HEADER: CAMN W,[EXP -2]; END OF PASS ONE + JRST ENDS + LDB C,[POINT 12,W,35]; GET SIZE + MOVEM C,BLKSIZ + ANDI W,770000 + JUMPE W,PLB; PROGRAMMER LABEL + CAIN W,500000; ABSOLUTE BLOCK + JRST ABSI; + CAIN W,310000; MADE LABEL + JRST MDLB; MADE LABEL + CAIN W,600000 + JRST GLOBDF + CAIN W,700000; DATA STATEMENT + JRST DATAS + JRST LOAD4A; DATA STATEMENTS WILL GO HERE + +TOPTAB: 0 ;TOP OF TABLES +CTAB: 0; COMMON +ATAB: 0; ARRAYS +STAB: 0; SCALARS +GSTAB: 0; GLOBAL SUBPROGS +AOTAB: 0; OFFSET ARRAYS +CCON: 0; CONSTANTS +PTEMP: 0; PERMANENT TEMPS +TTEMP: 0; TEMPORARY TEMPS +COMBAS: 0; BASE OF COMMON +LLC: 0; PROGRAM ORIGIN +BITP: 0; BIT POINTER +BITC: 0; BIT COUNT +PLTP: 0; PROGRAMMER LABEL TABLE +MLTP: 0; MADE LABEL TABLE +SDS: 0 ;START OF DATA STATEMENTS +SDSTP: 0 ;START OF DATA STATEMENTS POINTER +BLKSIZ: 0; BLOCK SIZE +MODIF: 0; ADDRESS MODIFICATION +1 +TTR50: XWD 136253,114765 ;RADIX 50 %TEMP. +PTR50: XWD 100450,614765 ;RADIX 50 TEMP. +CNR50: XWD 112320,235025 ;RADIX 50 CONST. + + ;ROUTINES TO PROCESS POINTERS + +PCONS: ADD C,CCON; GENERATE CONSTANT ADDRESS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PSTA: PUSHJ P,SWAPSY ;NON-COMMON SCALARS AND ARRAYS + ADDI C,(R); RELOCATE +PCOM1: PUSHJ P,SYDEF ;... +PCOMX: ADD C,MODIF ;ADDR RELOC FOR DP + HRRM C,@X; REPLACE ADDRESS +PASS2A: AOS V; STEP READOUT POINTER + CAML V,CCON ;END OF PROCESSABLES? +CPOPJ1: AOS (P); SKIP + POPJ P,; + +PAT: SKIPA W,ATAB ;ARRAY TABLE BASE +PST: MOVE W,STAB ;SCALAR TABLE BASE + ROT C,1 ;SCALE BY 2 + ADD C,W ;ADD IN TABLE BASE + ADDI C,-2(X); TABLE ENTRY + HLRZ W,(C); CHECK FOR COMMON + JUMPE W,PSTA; NO COMMON + PUSHJ P,COMDID ;PROCESS COMMON + JRST PCOM1 + +COMDID: LSH W,1 ;PROCESS COMMON TABLE ENTRIES + ADD W,CTAB; COMMON TAG + ADDI W,-2(X); OFFSET + PUSHJ P,SWAPSY; GET SYMBOL AND SET TO DEFINED + ADD C,1(W); BASE OF COMMON + POPJ P, ;RETURN + +PATO: ROT C,1 + ADD C,AOTAB; ARRAY OFFSET + ADDI C,-2(X); LOADER OFFSET + MOVEM C,CT1; SAVE CURRENT POINTER + HRRZ C,1(C); PICK UP REFERENCE POINTER + ANDI C,7777; MASK TO ADDRESS + ROT C,1; ALWAYS A ARRAY + ADDI C,-2(X) + ADD C,ATAB + HLRZ W,(C); COMMON CHECK + JUMPE W,NCO + PUSHJ P,COMDID ;PROCESS COMMON + PUSHJ P,SYDEF + MOVE C,CT1 + HRRE C,(C) + ADD C,1(W) + JRST PCOMX + + NCO: PUSHJ P,SWAPSY; + ADDI C,(R) ;DEFINE SYMBOL IN TRUE LOC + PUSHJ P,SYDEF ;... + MOVE C,CT1 + HRRZ C,(C) ;OFFSET ADDRESS PICKUP + ADDI C,(R) ;WHERE IT WILL BE + JRST PCOMX ;STASH ADDR AWAY + +PTT: ADD C,TTEMP; TEMPORARY TEMPS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PPT: ADD C,PTEMP; PERMANENT TEMPS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PGS: ADD C,GSTAB; GLOBSUBS + ADDI C,-1(X); OFFSET + MOVE C,(C) + TLC C,640000; MAKE A REQUEST + PUSHJ P,TBLCHK ;CHECK FOR OVERLAP + MOVEI W,(V); THIS LOC + HLRM W,@X; ZERO RIGHT HALF + PUSHJ P,SYMXX + JRST PASS2A + +SYDEF: TLNE N,SYDAT ;SYMBOL WANTS DEFININITION? + POPJ P, ;NO, GO AWAY + PUSH P,C ;SAVE THE WORLD + PUSH P,W + PUSHJ P,TBLCHK ;CHECK FOR OVERLAP + MOVE W,C + SKIPE C,T ;PICKUP VALUE + PUSHJ P,SYMXX + POP P,W + POP P,C + POPJ P,; + +PMLT: ADD C,MLTP + SKIPA +PPLT: ADD C,PLTP + HRRZ C,(C) + JRST PCOMX + +SYMXX: PUSH P,V + PUSHJ P,SYMPT + POP P,V + POPJ P,; + +SWAPSY: MOVEI T,0; SET TO EXCHANGE DEFS + EXCH T,1(C); GET NAME + HRRZ C,(C) ;GET VALUE + POPJ P, +TBLCHK: HRRZ W,MLTP ;GETT TOP OV TABLES + SUBI W,2 + CAMG W,TOPTAB ;WILL IT OVERLAP +IFE EXPAND,<TLO F,FULLSW> +IFN EXPAND,< JRST [PUSHJ P,XPAND + TLOA F,FULLSW + JRST TBLCHK + JRST .+1]> + POPJ P, + + ;END OF PASS2 + +ALLOVE: TLZ N,F4SW ;END OF F4 PROG + TLNE F,FULLSW!SKIPSW + JRST HIGH3 + HRR R,COMBAS ;TOP OF THE DATA + HRR V,R ;IS THIS THE HIGHEST LOC YET? + CAIG H,@X ;... + MOVEI H,@X ;YES, TELL THE WORLD + CAMG H,SDS ;HIGHEST LOC GREATER THAN DATA STATEMENTS? + JRST HIGH3 ;NO, RETURN + ADDI H,1(S) ;YES, SET UP MEANINGFUL ERROR COMMENT + SUB H,SDS ;... + TLO F,FULLSW ;INDICATE OVERFLO + JRST HIGH3 ;RETURN + +DATAS: TLNE F,FULLSW+SKIPSW + JRST DAX + MOVEI C,(S) ;ADDR OF WORD UNDER SYMBOL TABLE + MOVN W,BLKSIZ ;HOW FAR DOWN TO BLT + ADDM W,PLTP ;UPDATE TABLE POINTERS + ADDM W,BITP ;... + ADDM W,SDSTP ;... + ADD C,W ;RH(C):= WHEN TO STOP BLT + HRL C,MLTP ;SOURCE OF BLTED DATA + ADD W,MLTP ;UPDATE, GET DESTINATION OF BLT DATA +IFN EXPAND,< HRRZS W ;GET RID OF LEFT HALF + CAIG W,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADDI W,2000 + ADD C,[XWD 2000,2000] + JRST POPJM2]> + HRRM W,MLTP ;NO SET THIS SO EXTRA CORE NOT ZEROED + HLL W,C ;FORM BLT POINTER + BLT W,-1(C) ;MOVE TABLES DOWN (BUT NOT JRST ALLOVE) + PUSHJ P,BITWX+1 +DAX: PUSHJ P,WORD; READ ONE WORD + TLNN F,FULLSW+SKIPSW + MOVEM W,(C) + SOSLE BLKSIZ ;COUNT OF DATA SEQUENCE SIZE + AOJA C,DAX ;INCREMENT DATA SEQUENCE DEPOSIT LOC + JRST TEXTR; DONE + + FBLKD: TLOE N,BLKD1 ;IS THIS FIRST BLOCK DATA? + JRST ENDTP ;NO + HRR V,COMBAS ;PLACE PROG BREAK IN RH FOR +IFE L,< HRRM V,JOBCHN(X) ;CHAIN> +ENDTP: TLNE F,FULLSW+SKIPSW + JRST ALLOVE + HRR V,GSTAB +ENDTP0: CAML V,STAB; ANY MORE GLOBSUBS + JRST ENDTP2; NO + MOVE C,@X; GET SUBPROG NAME + PUSHJ P,SREQ; IS IT ALLREADY REQUESTED + AOJA V,ENDTP0; YES + PUSHJ P,SDEF; OR DEFINED + AOJA V,ENDTP0; YES + PUSHJ P,TBLCHK + MOVEI W,0 ;PREPARE DUMMY LINK + TLNN F,FULLSW+SKIPSW; ABORT + PUSHJ P,SYM3X; PUT IN DUMMY REQUEST + PUSHJ P,BITWX+1; OVERLAP CHECK + AOJA V,ENDTP0 +ENDTP2: SETZM PT1 + HRR V,SDSTP +IFN EXPAND,< SUBI V,(X) + CAMG V,COMBAS + JRST [PUSHJ P,XPAND + TLOA F,FULLSW + JRST .-3 + JRST .+1] + HRR V,SDSTP> + HRRZM V,SDS ;DATA STATEMENT LOC +ENDTP1: SUBI V,(X); COMPENSATE FOR OFFSET + MOVE W,@X; GET WORD + TLNE W,-1; NO LEFT HALF IMPLIES COUNT + JRST DODON; DATA DONE + ADD W,[MOVEI W,3] + ADDI W,@X + EXCH W,@X + AOS V + ADD W,@X; ITEMS COUNT + MOVEM W,ITC + MOVE W,[MOVEM W,LTC] + MOVEM W,@X; SETUP FOR DATA EXECUTION + AOS V + MOVE W,[MOVEI W,0] + EXCH W,@X + MOVEM W,ENC; END COUNT + AOS V + MOVEI W,@X + ADDM W,ITC +LOOP: MOVE W,@X + HLRZ T,W; LEFT HALF INST. + ANDI T,777000 + CAIN T,254000 ;JRST? + JRST WRAP ;END OF DATA + CAIN T,260000 ;PUSHJ? + JRST PJTABL(W) ;DISPATCH VIA TABLE + CAIN T,200000; MOVE? + AOJA V,INNER + CAIN T,270000; ADD? + JRST ADDOP + CAIN T,221000; IMULI? + AOJA V,LOOP + CAIE T,220000; IMUL? + JRST LOAD4A; NOTA +INNER: HRRZ T,@X; GET ADDRESS + TRZE T,770000; ZERO TAG? + SOJA T,CONPOL; NO, CONSTANT POOL + SUB T,PT1; SUBTRACT INDUCTION NUMBER + ASH T,1 + SOS T; FORM INDUCTION POINTER + HRRM T,@X + HLRZ T,@X + ADDI T,P + HRLM T,@X + AOJA V,LOOP + + CONPOL: ADD T,ITC; CONSTANT BASE + HRRM T,@X + AOJA V,LOOP + +ADDOP: HRRZ T,@X + TRZE T,770000 + SOJA T,CONPOL +SKIPIN: AOJA V,LOOP + +PJTABL: JRST DWFS ;PUSHJ 17,0 + AOSA PT1 ;INCREMENT DO COUNT + SOSA PT1; DECREMENT DO COUNT + SKIPA W,[EXP DOINT.] + MOVEI W,DOEND. + HRRM W,@X + AOJA V,SKIPIN ;SKIP A WORD + +DWFS: MOVEI W,DWFS. + HRRM W,@X + AOS V + TLO N,SYDAT + PUSHJ P,PROC; PROCESS THE TAG + JRST LOAD4A ;DATA STATEMENT BELOW CODE TOP + JRST LOOP ;PROPER RETURN + +DOINT.: POP P,V; GET ADDRESS OF INITIAL VALUE + PUSH P,(V); STORE INDUCTION VARIABLE + AOS V + PUSH P,V; INITIAL ADDRESS + JRST (V) + +DOEND.: HLRZ T,@(P) + ADDM T,-2(P); INCREMENT + HRRZ T,@(P); GET FINAL VALUE + CAMGE T,-2(P); END CHECK + JRST DODONE; WRAP IT UP + POP P,(P); BACK UP POINTER + JRST @(P) + + DODONE: POP P,-1(P); BACK UP ADDRESS + POP P,-1(P) + JRST CPOPJ1 ;RETURN + +WRAP: MOVE W,ENC; NUMBER OF CONSTANTS + ADD W,ITC; CONSTANT BASE + MOVEI C,(W); CHAIN + HRRM C,@X + MOVEI V,(W); READY TO GO + JRST ENDTP1 + +DODON: TLZ N,RCF!SYDAT!DZER ;DATA STATEMENT FLAGS + MOVE W,PTEMP ;TOP OF PROG + ADDI W,(X) ;+OFFSET + MOVE C,COMBAS ;TOP OF DATA + ADDI C,(X) ;+OFFSET +SECZER: CAML W,C ;ANY DATA TO ZERO? + JRST @SDS ;NO, DO DATA STATEMENTS + CAML W,SDS ;IS DATA BELOW DATA STATEMENTS? + TLO F,FULLSW ;NO, INDICATE OVERFLO + TLNN F,FULLSW+SKIPSW ;SHOULD WE ZERO? + SETZM (W) ;YES, DO SO + TLON N,DZER ;GO BACK FOR MORE? + AOJA W,SECZER ;YES, PLEASE + CAMLE C,SDS ;ALL DATA BELOW DATA STATEMENTS? + MOVE C,SDS ;ALL ZEROED DATA MUST BE + HRLI W,-1(W) ;SET UP BLT POINTER TO ZERO DATA + TLNN F,FULLSW+SKIPSW ;SHOULD WE ZERO? + BLT W,-1(C) ;YES, DO SO + JRST @SDS ;GO DO DATA STATEMENTS + + DREAD: TLNE N,RCF; NEW REPEAT COUNT NEEDED + JRST FETCH; NO + MOVE W,LTC + MOVEM W,LTCTEM + MOVE W,@LTC; GET A WORD + HLRZM W,RCNT; SET REPEAT COUNT + HRRZM W,WCNT; SET WORD COUNT + POP W,(W); SUBTRACT ONE FROM BOTH HALFS + HLLM W,@LTC; DECREMENT REPEAT COUNT + AOS W,LTC; STEP READOUT + TLO N,RCF +FETCH: MOVE W,@LTC + AOS LTC + SOSE WCNT + POPJ P,; + SOSN RCNT + JRST DOFF. + MOVE V,LTCTEM; RESTORE READOUT + MOVEM V,LTC +DOFF.: TLZ N,RCF; RESET DATA REPEAT FLAG + POPJ P,; + +DWFS.: MOVE T,(P) + AOS (P) + MOVE T,(T); GET ADDRESS + HLRZM T,DWCT; DATA WORD COUNT + HRRES T + ADD T,W; OFFSET + ADDI T,(X); LOADER OFFSET +DWFS.1: PUSHJ P,DREAD ;GET A DATA WORD + CAML T,SDS ;BELOW BEGINNING OF DATA STATEMENTS + TLO F,FULLSW ;YES, INDICATE OVERFLO + TLNN F,FULLSW+SKIPSW ;LOAD THE NEXT DATA ITEM? + MOVEM W,(T) ;YES, STORE IT + AOS T + SOSE W,DWCT; STEP DOWN AND TEST + JRST DWFS.1 ;ONE MORE TIME, MOZART BABY! + POPJ P,; + + + ;LITERAL TABLE + +LITS: LIT + VAR +CT1: 0 ;TEMP FOR C +LTC: 0 +ITC: 0 +ENC: 0 +WCNT: 0 ;DATA WORD COUNT +RCNT: 0 ;DATA REPEAT COUNT + +LTCTEM: 0 ;TEMP FOR LTC +DWCT: 0 ;DATA WORD COUNT +IFE L,< +IFE HE,< +LDEND: END LD + >> +IFN HE,< +LDEND: END> +IFN L,< +LDEND: +LODMAK: MOVEI A,LODMAK + MOVEM A,137 + INIT 17 + SIXBIT /DSK/ + 0 + HALT + ENTER LMFILE + HALT + OUTPUT [IOWD 1,LMLST ;OUTPUT LENGTH OF FILE + 0] + OUTPUT LMLST + STATZ 740000 + HALT + RELEASE + CALL [SIXBIT /EXIT/] + +LMFILE: SIXBIT /LISP/ + SIXBIT /LOD/ + 0 + 0 + +LMLST: IOWD LODMAK+1-LD,137 + 0 + + END LODMAK> diff --git a/src/loader.v57 b/src/loader.v57 new file mode 100644 index 0000000..f4b4d7e --- /dev/null +++ b/src/loader.v57 @@ -0,0 +1,6309 @@ + L==1 ;LISP SWITCH ON FOR LISP SYSTEM VERSION + TITLE LOADER V.057 + SUBTTL RP GRUEN/NGP/WFW/DMN/WJE 25-MAR-75 +;COPYRIGHT 1968,1969,1970,1971,1972,1973 DIGITAL EQUIPMENT CORP., MAYNARD, MASS. + + VLOADER==57 + VUPDATE==0 ;DEC UPDATE LEVEL + VEDIT==151 ;EDIT LEVEL + VCUSTOM==1 ;NON-DEC UPDATE LEVEL + ;(UCI LISP MODIFICATIONS) + + LOC <.JBVER==137> + <VCUSTOM>B2+<VLOADER>B11+<VUPDATE>B17+VEDIT + RELOC + +COMMENT * ASSEMBLY FEATURE SWITCHES (ACTION WHEN NON-ZERO) + + SWITCHES ON (NON-ZERO) IN DEC VERSION +PURESW GIVES PURE CODE (VARIABLES IN LOW SEG) +REENT GIVES REENTRANT CAPABILITY PDP-10 + (REENT=0 FOR PDP-10/30 OR PDP-6 OR EARLY PDP-10) +RPGSW INCLUDE CCL FEATURE +TEMP INCLUDE TMPCOR FEATURE +DMNSW SYMBOL TABLE WILL BE MOVED DOWN FROM TOP OF CORE +KUTSW GIVES CORE CUTBACK ON /K +EXPAND FOR AUTOMATIC CORE EXPANSION +PP ALLOW PROJ-PROG # +NAMESW USE SETNAM UUO TO CHANGE PROGRAM NAME +DIDAL GIVES DIRECT ACCESS LIBRARY SEARCH MODE +ALGSW WILL LOAD ALGOL OWN BLOCK (TYPE 15) +COBSW WILL LOAD COBAL LOCAL SYMBOLS (BLOCK TYPE 37) +SFDSW NUMBER OF SFDS ALLOWED IF NON-ZERO +CPUSW LOADER WILL TEST FOR KI/KA-10 AND LOAD CORRECT LIB40 +FORSW DEFAULT VALUE OF FORSE/FOROTS FORTRAN OTS +B11SW INCLUDE POLISH FIXUP BLOCK (TYPE 11) + + SWITCHES OFF (ZERO) IN DEC VERSION +K GIVES SMALLER LOADER - NO F4 +L FOR LISP LOADER +SPMON GIVES SPMON LOADER (MONITOR LOADER) +MONLOD GIVES MONITOR LOADER WHICH USES DISK AS CORE IMAGE +TEN30 FOR 10/30 LOADER +STANSW GIVES STANFORD FEATURES +LNSSW GIVES LNS VERSION +FAILSW INCLUDE PROVISIONS FOR SPECIAL FAIL FIXUPS. +LDAC MEANS LOAD CODE INTO ACS + (LDAC DOES NOT WORK WITH KUTSW=1.CORE UUO CLEARS JOBBLT) +WFWSW GIVES BLOCK TYPE 13 (VARIABLS INTO LOW SEG) +SYMARG ACCEPT SYMBOLIC (GLOBAL) ARGUMENTS FOR SWITCHES +SPCHN WILL DO SPECIAL OVERLAYING +NELSW FOR NELIAC COMPILER +SAILSW GIVES BLOCK TYPE 16 (FORCE LOAD OF REL FILES) + AND 17 (FORCE SEARCH OF LIBRARIES) FOR SAIL +MANTIS WILL LOAD BLOCK 401 FOR F4 MANTIS DEBUGGER +SYMDSW LOADER WILL STORE SYMBOLS ON DSK +TENEX SPECIAL CODE IF RUNING UNDER TENEX +* +SUBTTL DEFAULT ASSEMBLY SWITCH SETTINGS + +IFNDEF SPMON,<SPMON=0> +IFN SPMON,< TEN30==1 + K==1> + +IFNDEF L,<L=0> + +IFNDEF TEN30,<TEN30=0> + +IFN TEN30!L,< RPGSW=0 + PP=0 +IFNDEF DMNSW,< DMNSW=0> + ALGSW=0 + COBSW=0 + PURESW=0 + REENT=0 + LDAC=0 + KUTSW=0 + NAMESW=0> +IFN TEN30,< EXPAND=0 +IFNDEF DIDAL,< DIDAL=0> +> + +IFN L,< CPUSW==0 + PP==1> + +IFNDEF MONLOD,<MONLOD=0> +IFN MONLOD,<K==1 + ALGSW=0 + COBSW=0 + DIDAL=0 + REENT=0 + B11SW==0 + SYMDSW==0 + EXPAND==1> + +IFNDEF K,<K=0> + +IFNDEF STANSW,<STANSW=0> +IFN STANSW,< TEMP==0 + REENT==0 + FAILSW=1> + +IFNDEF LNSSW,<LNSSW=0> +IFN LNSSW,<LDAC=1 + PP=0> + +IFNDEF FAILSW,<FAILSW==0> +IFN FAILSW,<B11SW==1> + +IFNDEF B11SW,<B11SW==1> + +IFNDEF RPGSW,<RPGSW==1> +IFN RPGSW,<PP==1> ;REQUIRE DISK FOR CCL +IFE RPGSW,<TEMP=0> + +IFNDEF PP,<PP==1> + +IFNDEF TEMP,<TEMP==1> + +IFNDEF NAMESW,<NAMESW==1> + +IFNDEF LDAC,<LDAC=0> +IFN LDAC,<KUTSW=0> + +IFNDEF KUTSW,<KUTSW==1> + +IFNDEF EXPAND,< IFN K,<EXPAND==0> + IFE K,<EXPAND==1>> + +IFNDEF DMNSW,<DMNSW==1> +IFN DMNSW!LDAC,<IFNDEF SYMPAT,<SYMPAT==100> + IFN LDAC,<IFG 20-SYMPAT,<SYMPAT==20>>> + +IFNDEF REENT,<REENT==1> + +IFNDEF PURESW,<PURESW==1> + +IFNDEF WFWSW,<WFWSW==0> + +IFN K,<SYMARG=0 + SPCHN=0> + +IFNDEF SYMARG,<SYMARG==0> + +IFNDEF SPCHN,<SPCHN==0> + +IFNDEF DIDAL,<DIDAL==1> + +IFNDEF ALGSW,<ALGSW==1> + +IFNDEF COBSW,<COBSW==1> + +IFNDEF SAILSW,<SAILSW==0> + +IFNDEF NELSW,<NELSW==0> + +IFN K,<MANTIS==0> +IFNDEF MANTIS,<MANTIS==0> + +IFE PP,<SFDSW==0> +IFNDEF SFDSW,<SFDSW==5> +IFNDEF CPUSW,<CPUSW==1> + +IFNDEF FORSW,<FORSW==2> ;1=FORSE, 2=FOROTS + +IFNDEF SYMDSW,<SYMDSW==0> +IFN SYMDSW,<DIDAL==0> ;BOTH USE AUX BUFFER +IFNDEF TENEX,<TENEX==0> +SUBTTL ACCUMULATOR ASSIGNMENTS + F=0 ;FLAGS IN BOTH HALVES OF F + N=1 ;FLAGS IN BOTH HALVES OF N + X=2 ;LOADER OFFSET + H=3 ;HIGHEST LOC LOADED + S=4 ;UNDEFINED POINTER + R=5 ;RELOCATION CONSTANT + B=6 ;SYMBOL TABLE POINTER + D=7 ;COMMAND ARGUMENT (OCTAL) AND WORKSPACE + T=10 + V=T+1 + W=12 ;VALUE + C=W+1 ;SYMBOL, DECIMAL COMMAND ARGUMENT + E=C+1 ;DATA WORD COUNTER + Q=15 ;RELOCATION BITS + A=Q+1 ;SYMBOL SEARCH POINTER + P=17 ;PUSHDOWN POINTER + + +;MONITOR LOCATIONS IN THE USER AREA + +.JBHDA==10 +.JBSDD==114 ;SAVE POINTER TO JOBDDT +.JBS41==122 ;SAVE POINTER TO JOB41 + +INTERN .JBVER,.JBHDA,.JBSDD,.JBS41 +EXTERN .JBDDT,.JBFF,.JBSA,.JBREL,.JBSYM,.JBUSY,.JB41,.JBHRL,.JBCOR +EXTERN .JBCHN,.JBERR,.JBBLT,.JBAPR,.JBDA,.JBHSM + +NEGOFF==400 ;NEGATIVE OFFSET OF HIGH SEGMENT + + +PDLSIZ==40 ;LENGTH OF PUSHDOWN STACK +PPDL==60 ;LENGTH OF PUSHDOWN LIST FOR POLISH FIXUPS +;FLAGS F(0 - 17) + CSW==1 ;ON - COLON SEEN + ESW==2 ;ON - EXPLICIT EXTENSION IDENT. + SKIPSW==4 ;ON - DO NOT LOAD THIS PROGRAM + FSW==10 ;ON - SCAN FORCED TO COMPLETION + FCONSW==20 ;ON - FORCE CONSOLE OUTPUT + HIPROG==40 ;LOADING HI PROGRAM, SET BY HISEG. CLEARED BY EOF + ASW==100 ;ON - LEFT ARROW ILLEGAL + FULLSW==200 ;ON - STORAGE EXCEEDED + SLIBSW==400 ;ON - LIB SEARCH IN THIS PROG + RMSMSW==1000 ;REMEMBER IF LOADING WITH SYMBOLS DURING LIB SEARCH + REWSW==2000 ;ON - REWIND AFTER INIT + LIBSW==4000 ;ON - LIBRARY SEARCH MODE + + ISW==20000 ;ON - DO NOT PERFORM INIT + SYMSW==40000 ;ON - LOAD LOCAL SYMBOLS + DSW==100000 ;ON - CHAR IN IDENTIFIER + NSW==200000 ;ON - SUPPRESS LIBRARY SEARCH + SSW==400000 ;ON - SWITCH MODE + + + +;MORE FLAGS IN F (18-35) + +SEENHI==1 ;HAVE SEEN HI STUFF +NOHI==2 ;LOAD AS NON-REENTRANT +NOTTTY==4 ;DEV "TTY" IS NOT A TTY +NOHI6==10 ;PDP-6 TYPE SYSTEM +HISYM==20 ;BLT SYMBOLS INTO HIGH SEGMENT +SEGFL==40 ;LOAD INTO HI-SEG +XFLG==100 ;INDEX IN CORE (BLOCK TYPE 14) +LSTLOD==200 ;LAST PROG WAS LOADED +DTAFLG==400 ;LIBRARY DEVICE IS A DTA (NEEDED FOR INDEXING) +DMNFLG==1000 ;SYMBOL TABLE TO BE MOVED DOWN +SFULSW==2000 ;PRINTED SYMBOL OVERLAP ONCE ALREADY +ARGFL==4000 ;TREAT $%. AS RADIX-50 CHAR. +TWOFL==10000 ;TWO SEGMENTS IN THIS BINARY FILE +LOCAFL==20000 ;PRINT LOCAL SYMBOLS IN MAP +TTYFL==40000 ;AUX. DEV. IS TTY +TRMFL==100000 ;END OF LOADING SEEN ($ OR /G) +KICPFL==200000 ;HOST CPU IS A KI-10 +LSYMFL==400000 ;STORE LOCAL SYMBOLS ON DSK +;FLAGS N(0 - 17) + ALLFLG==1 ;ON - LIST ALL GLOBALS + ISAFLG==2 ;ON - IGNORE STARTING ADDRESSES + COMFLG==4 ;ON - SIZE OF COMMON SET +IFE K,< F4SW==10 ;F4 IN PROGRESS + RCF==20 ;READ DATA COUNT + SYDAT==40; SYMBOL IN DATA> +IFN MONLOD,<DISW==10 ;DISK IMAGE LOAD IN PROGRESS + WOSW==20 ;WRITE OUT SWITCH, DATA IN WINDOW HAS CHANGED> + SLASH==100 ;SLASH SEEN +IFE K,< BLKD1==200 ;ON- FIRST BLOCK DATA SEEN + PGM1==400 ;ON FIRST F4 PROG SEEN + DZER==1000 ;ON - ZERO SECOND DATA WORD> + EXEQSW==2000 ;IMMEDIATE EXECUTION + DDSW==4000 ;GO TO DDT + RPGF==10000 ;IN RPG MODE + AUXSWI==20000 ;ON - AUX. DEVICE INITIALIZED + AUXSWE==40000 ;ON - AUX. DEVICE ENTERED + PPSW==100000 ;ON - READING PROJ-PROG # + PPCSW==200000 ;ON - READING PROJ # + HSW==400000 ;USED IN BLOCK 11 POLISH FIXUPS + +;MORE FLAGS IN N (18-35) +F4FL==400000 ;FORTRAN (F40) SEEN +COBFL==200000 ;COBOL SEEN +ALGFL==100000 ;ALGOL SEEN +NELFL==40000 ;NELIAC SEEN +PL1FL==20000 ;PL/1 SEEN +BLIFL==10000 ;BLISS-10 +SAIFL==4000 ;SAIL +FORFL==2000 ;FORTRAN-10 +F10TFL==1000 ;FORTRAN-10 CODE FOR THIS FILE SET NOHI (TEMP) +KI10FL==400 ;KI-10 ONLY CODE +KA10FL==200 ;KA-10 ONLY CODE +MANTFL==100 ;MANTIS SEEN, LOAD SPECIAL DATA +SYMFOR==40 ;SYMSW FORCED SET +MAPSUP==20 ;SUPRESS SYBOL TABLE OUTPUT +CHNMAP==10 ;MAP FOR SPCHN ROOT SEGMENT PRINTED +ATSIGN==4 ;AT SIGN - INDIRECT COMMAND +ENDMAP==2 ;DELAY MAP TO END +VFLG==1 ;DEFAULT LOAD REENTRANT OPERATION SYSTEM + +COMFLS==F4FL!COBFL!ALGFL!NELFL!PL1FL!BLIFL!SAIFL!FORFL + +DEFINE ERROR (X,Y)< +JSP A,ERRPT'X +XLIST +SIXBIT Y +LIST> + +IFN TENEX,< + OPDEF JSYS [104B8] + OPDEF SEVEC [JSYS 204] + OPDEF GEVEC [JSYS 205] + OPDEF GET [JSYS 200] + OPDEF GTJFN [JSYS 20] + OPDEF CIS [JSYS 141] + OPDEF DIR [JSYS 130] +> + IFN PURESW,<TWOSEGMENTS + RELOC 400000> + +DSKBIT==200000 ;FOR USE WITH DEVCHR +DTABIT==100 ;DITTO + + DISIZE=2000 ;CORE WINDOW SIZE + .RBEST==10 ;ESTIMATED SIZE OF BLOCK (SYMBOL) + .RBALC==11 ;ALLOCATED SIZE OF BLOCK (SYMBOL) + DALLOC==^D500 ;PREALLOCATE SOME SPACE + + +DSKBLK==200 ;LENGTH OF DISK BLOCKS +DTABLK==177 ;LENGTH OF DECTAPE BLOCKS (EXCLUDING LINK WORD) +VECLEN==^D25 ;LENGTH OF VECTOR TABLE FOR OVERLAYS + +RELLEN==^D5 ;#NUMBER OF REL FILES OR LIBRARIES (MUST BE SAME) + +;BUFFER SIZES +TTYL==52 ;TWO TTY BUFFERS +IFNDEF BUFN,<BUFN==2 ;TWO DATA BUFFERS FOR LOAD> +IFE LNSSW,< +BUFL==BUFN*203 ;'BUFN' DTA BUFFERS FOR LOAD +ABUFL==203 ;ONE DTA BUFFER FOR AUX DEV> +IFN LNSSW,< +IFE K,<BUFL==4*203+1> +IFN K,<BUFL==203+1> +ABUFL==2*203+1> + +;CALLI DEFINITIONS + +OPDEF RESET [CALLI 0] +OPDEF SETDDT [CALLI 2] +OPDEF DDTOUT [CALLI 3] +OPDEF DEVCHR [CALLI 4] +OPDEF CORE [CALLI 11] +OPDEF EXIT [CALLI 12] +OPDEF UTPCLR [CALLI 13] +OPDEF DATE [CALLI 14] +OPDEF MSTIME [CALLI 23] +OPDEF PJOB [CALLI 30] +OPDEF SETUWP [CALLI 36] +OPDEF REMAP [CALLI 37] +OPDEF GETSEG [CALLI 40] +OPDEF SETNAM [CALLI 43] +OPDEF TMPCOR [CALLI 44] + + + ASUPPRESS + MLON + SALL +SUBTTL INITIALIZATION +BEG: IFE L,< IFN RPGSW,< + TDZA F,F ;NORMAL START + SETO F, ;CCL START> + SETZM DATBEG ;ZERO FIRST WORD OF DATA STORAGE + MOVE N,[DATBEG,,DATBEG+1] + BLT N,DATEND-1 ;ZERO ENTIRE DATA AREA +IFN RPGSW,< ;IF NO CCL FALL THROUGH TO LD: + JUMPE F,LD ;CCL: IF NORMAL START GO TO LD + RESET ;RESET UUO. +IFN TEMP,<MOVEI F,CTLBUF-1 ;USE CCL BUFFER FOR COMMANDS + HRRM F,CTLIN+1 ;DUMMY UP BYTE POINTER + HRLI F,-200 ;MAKE IT AN IOWD + MOVEM F,TMPFIL+1 + MOVSI F,'LOA' + MOVEM F,TMPFIL + MOVE N,[XWD 2,TMPFIL] ;POINTER FOR TMPCOR READ + TMPCOR N, ;READ AND DELETE LOA FILE + JRST RPGTMP ;NO SUCH FILE IN CORE, TRY DISK + IMULI N,5 ;GET CHAR COUNT + ADDI N,1 + MOVEM N,CTLIN+2 ;STORE IN BUFFER HEADER + MOVEI N,700 ;BYTE POINTER FOR LOA FILE + HRLM N,CTLIN+1 ;BYTE POINTER NOW COMPLETE + SETOM TMPFLG ;MARK THAT A TMPCOR READ WAS DONE + JRST RPGS3C ;GET BACK IN MAIN STREAM +RPGTMP: ; NOT TMP> + INIT 17,1 ;SET UP DSK FOR COMMAND FILE INPUT. + SIXBIT /DSK/ + XWD 0,CTLIN + JRST NUTS ;CAN'T INIT, GET INPUT FROM TTY. + MOVEI F,3 + PJOB N, ;GET JOB NUMBER +LUP: IDIVI N,12 ;STRIP OFF LAST DIGIT + ADDI N+1,"0"-40 ;CONVERT TO SIXBIT + LSHC N+1,-6 ;SAVE + SOJG F,LUP ;3 DIGITS YET? + HRRI N+2,'LOA' ;LOADER NAME PART OF FILE NAME. + MOVEM N+2,CTLNAM + MOVSI 'TMP' ;AND EXTENSION. + MOVEM CTLNAM+1 + LOOKUP 17,CTLNAM ;FILE THERE? + JRST NUTS ;NO. + INIT 16,1 ;GET SET TO DELETE FILE + SIXBIT /DSK/ + 0 + JRST RPGS3A ;GIVE UP + SETZM CTLNAM+3 ;PUT STUFF BACK AS IT WAS + LOOKUP 16,CTLNAM + JRST RPGS3B + SETZM CTLNAM ;SET FOR RENAME + RENAME 16,CTLNAM + JFCL ;IGNORE FAILURE +RPGS3B: RELEASE 16, ;GET RID OF DEVICE +RPGS3A: ;WE HAVE NOT YET STARTED TO SCAN + ;COMMAND IN FILE. +RPGS3: MOVEI CTLBUF + MOVEM .JBFF + INBUF 17,1 ;SET UP BUFFER. +RPGS3C: TTCALL 3,[ASCIZ /LOADING/] ;PRINT MESSAGE THAT WE ARE STARTING. + SKIPE NONLOD ;CONTIUATION OF COMMAND? + JRST RPGS2 ;YES, SPECIAL SETUP. +CCLCHN: MOVSI N,RPGF ;@ CHAIN FILES CYCLE FROM HERE + JRST CTLSET ;SET UP TTY + +RPGS1: PUSHJ P,[TLNE F,ESW ;HERE FROM FOO@ COMMAND, STORE NAME. + JRST LDDT3 ;SAVE EXTENSION. + TLZE F,CSW!DSW ;AS NAME + MOVEM W,DTIN ;STORE AS NAME + SETZM W,DTIN1 ;TRY BLANK EXTENSION FIRST. + JRST LDDT4] + MOVEM 0,SVRPG ;SAVE 0 JUST IN CASE + SETZM NONLOD ;DETERMINE IF CONTINUATION. + MOVEI 0,2(B) ;BY SEEING IF ANY SYMBOLS LOADED. + CAME 0,.JBREL + SETOM NONLOD ;SET TO -1 AND SKIP CALLI +IFN TEMP,<SETZM TMPFLG> + MOVE 0,ILD1 + MOVEM 0,RPG1 + OPEN 17,OPEN1 ;KEEP IT PURE + JRST [MOVE W,RPG1 + JRST ILD5] + LOOKUP 17,DTIN ;THE FILE NAME. + JRST [MOVE 0,SVRPG ;RESTORE AC0=F + TLOE F,ESW ;WAS EXT EXPLICIT? + JRST ILD9 ;YES, DON'T TRY AGAIN. + MOVEM 0,SVRPG ;SAVE AC0 AGAIN + MOVSI 0,(SIXBIT /TMP/) ;TRY TMP INSTEAD + MOVEM 0,DTIN1 + PUSHJ P,LDDT4 ;SET UP PPN + JRST .-1] ;TRY AGAIN + JRST RPGS3 + +RPGS2: MOVSI 0,RPGF ;SET FLAG + IORM 0,F.C+N + TLO N,RPGF + MOVE 0,SVRPG + JRST LD2Q ;BACK TO INPUT SCANNING. + +NUTS: TTCALL 3,[ASCIZ /?LOADER command file not found/] + EXIT +>;END OF IFN RPGSW +>;END OF IFE L + +LD: ;HERE AFTER INITIALIZATION IF NO CCL +IFN L,< HRRZM 0,LSPXIT + HRRZM W,LSPREL# ;SAVE LISP'S RELOCATION + MOVEI 0,0 + HRRZM R,RINITL + RESET> +IFE L,<IFN RPGSW,< + HLLZS .JBERR ;MAKE SURE ITS CLEAR.> + RESET ;INITIALIZE THIS JOB + SETZ N, ;CLEAR N +CTLSET: SETZB F,S ;CLEAR THESE AS WELL +IFN TENEX,<TLO F,SYMSW!RMSMSW ;ASSUME /S + TRO F,DMNFLG ;ASSUME /B + SETZM NLSTGL ;PERMIT LST OF UNDEF. GLOBALS> + HLRZ X,.JBSA ;TOP OF LOADER + HRLI X,V ;PUT IN INDEX + HRRZI H,.JBDA(X) ;PROGRAM BREAK + MOVE R,[XWD W,.JBDA] ;INITIAL RELOCATION> + MOVSI E,'TTY' + DEVCHR E, + TLNN E,10 ;IS IT A REAL TTY? +IFN RPGSW,<JRST [TLNN N,RPGF ;IN CCL MODE?> + EXIT ;NO, EXIT IF NOT TTY +IFN RPGSW,< TRO F,NOTTTY ;SET FLAG + JRST LD1] ;SKIP INIT> + INIT 3,1 ;INITIALIZE CONSOLE + SIXBIT /TTY/ + XWD BUFO,BUFI +CALLEX: EXIT ;DEVICE ERROR, FATAL TO JOB + MOVEI E,TTY1 + MOVEM E,.JBFF + INBUF 3,1 + OUTBUF 3,1 ;INITIALIZE OUTPUT BUFFERS + OUTPUT 3, ;DO INITIAL REDUNDANT OUTPUT +LD1: +IFE L,< HRRZ B,.JBREL ;MUST BE JOBREL FOR LOADING REENTRANT> +IFN L,< MOVE B,.JBSYM ;USED INSTEAD OF JOBREL FOR SYMBOL TABLE FIXUPS> + HRRZM B,HISTRT + SUB B,SE3 ;INITIALIZE SYMBOL TABLE POINTER + CAILE H,1(B) ;TEST CORE ALLOCATION +IFE L,< JRST [HRRZ B,.JBREL;TOP OF CORE + ADDI B,2000 ;1K MORE + CORE B, ;TRY TO GET IT> + EXIT ;INSUFFICIENT CORE, FATAL TO JOB +IFE L,< JRST LD1] ;TRY AGAIN> +IFN EXPAND,<MOVE S,[10,,12] ;CORMAX IN NSWTBL + GETTAB S, ;GET MAX CORE ALLOWED TO A JOB + MOVSI S,1 ;SET TO VERY LARGE +IFN REENT,<HLRZ E,.JBHRL ;BUT DON'T INCLUDE HIGH SEGMENT + SUBI S,1(E) ;IN LOW SEGMENT MAX> +IFE REENT,<SUBI S,1 ;ONE LESS FOR K BOUND> + MOVEM S,ALWCOR ;SAVE IT FOR XPAND TEST> +IFN PURESW,<MOVE S,[XWD HICODE,LOWCOD] + BLT S,LOWCOD+CODLN-1> +IFE L,< MOVS E,X ;SET UP BLT POINTER + HRRI E,1(X)> +IFN L,<MOVS E,H + HRRI E,1(H)> + SETZM -1(E) ;ZERO FIRST WORD + BLT E,(B) ;ZERO CORE UP TO THE SYMBOL AREA + HRRZ S,B ;INITIALIZE UNDEF. POINTER + MOVEM S,NAMPTR ;INITIALIZE PROGRAM NAME POINTER +IFE L,< HRRI R,.JBDA ;INITIALIZE THE LOAD ORIGIN + MOVE E,COMM ;SET .COMM. AS THE FIRST PROGRAM + MOVEM E,1(B) ;STORE IN SYMBOL TABLE + HRRZM R,2(B) ;STORE COMMON ORIGIN> + MOVEI E,F.C ;INITIALIZE STATE OF THE LOADER + BLT E,B.C + MOVE W,[ZBEG,,ZBEG+1] + SETZM ZBEG ;CLEAR START OF INITIALIZED DATA + BLT W,ZEND ;AND THE REST +IFN CPUSW,< + MOVNI W,1 ;-1 + AOBJN W,.+1 ;STANDARD TEST + JUMPN W,.+2 ;KA-10 (OR PDP-6) + TRO F,KICPFL ;KI-10> +IFN REENT,<MOVSI W,1 + MOVEM W,HVAL1 + MOVEM W,HVAL + MOVEM X,LOWX + MOVEM R,LOWR + HRRZI W,1 + SETUWP W, ;SETUWP UUO. + TRO F,NOHI6 ;PDP-6 COMES HERE.> +IFN REENT!CPUSW,< + MOVEM F,F.C ;PDP-10 COMES HERE.> +IFN SAILSW,<MOVE W,[XWD -RELLEN-1,LIBFLS-1] ;SET UP POINTERS + MOVEM W,LIBPNT# ;IN THE FORM OF AOBJN WORDS + MOVE W,[XWD -RELLEN-1,PRGFLS-1] + MOVEM W,PRGPNT#> +IFE L,< MOVSI W,254200 ;STORE HALT IN .JB41 + MOVEM W,.JB41(X) ;...> +IFN L,< MOVE W,.JBREL + HRRZM W,OLDJR> +IFN B11SW,<MOVEI W,440000 ;SET UP THE SPECIAL BITS OF HEADNUM(ADD+POLISH) + MOVEM W,HEADNM + MOVEI W,PDLOV ;ENABLE FOR PDL OV + MOVEM W,.JBAPR + MOVEI W,200000 + CALLI W,16 +> +IFN DMNSW,<MOVEI W,SYMPAT + MOVEM W,KORSP> +IFN MONLOD,<IFN PURESW,< + MOVEI W,.RBALC ;NUMBER OF WORDS FOR ENTER + MOVEM W,DIOUT + MOVEI W,DALLOC ;NUMBER OF BLOCKS TO ALLOCATE + MOVEM W,DIOUT+.RBEST>> +IFN SFDSW,<GETPPN W, ;GET USER'S PPN + MOVEM W,MYPPN ;SAVE IT FOR [,,] ETC> +IFN FORSW,<MOVEI W,FORSW-1 ;GET DEFAULT + MOVEM W,FORLIB ;INCASE USER DOESN'T SET IT> +;LOADER SCAN FOR FILE NAMES + +LD2Q: XOR N,F.C+N ;HERE WE STORE THE TWO BITS FOR + AND N,[AUXSWI!AUXSWE,,ENDMAP] ;THE AUX FILE INTO THE + XORM N,F.C+N ;SAVED REGISTER 'N' + MOVSI B,F.C ;RESTORE ACCUMULATORS + BLT B,B + MOVE P,PDLPT ;INITIALIZE PUSHDOWN LIST + SETZM BUFI2 ;CLEAR INPUT BUFFER POINTER +IFE PP,<SETZM ILD1 ;CLEAR INPUT DEVICE NAME> +IFN PP,<MOVSI T,'DSK' ;ASSUME DSK. + MOVEM T,ILD1> + SETZM OLDDEV ;TO MAKE IT GO BACK AFTER /D FOR LIBSR + +LD2B: RELEAS 1, ;RELEASE BINARY INPUT DEVICE +IFN PP,<SETZM PPPN ;CLEAR PERMANENT PPN ON EACH NEW LINE> +IFN RPGSW,< TLNE N,RPGF ;NOT IF DOING CCL STUFF + JRST LD2BA> + MOVEI T,"*" + IDPB T,BUFO1 ;OUTPUT ASTERISK TO START INPUT + OUTPUT 3, +LD2BA: TLZ F,FULLSW+ASW+ISW+CSW+ESW+SKIPSW+SLIBSW+REWSW +LD2BP: TLNE F,LIBSW ;WAS LIBRARY MODE ON? + TLO F,SKIPSW ;YES, NORMAL MODE IS SKIPPING +LD2DD: SETZM DTIN ;CLEAR FILE NAME AFTER , CR-LF, ETC + +LD2D: SKIPE W,OLDDEV ;RESET DEVICE IF NEEDED. + CAMN W,ILD1 ;IS IT SAME? + JRST LD2DC ;YES, FORGET IT. + MOVEM W,ILD1 +LD2DB: TLZ F,ISW+DSW+FSW+REWSW +LD2DC: IFN PP,<SETZM PPN ;DON'T REMEMBER PPN FROM ONE FILE TO NEXT.> +LD2DA: SETZB W,OLDDEV ;INITIALIZE IDENTIFIER SCAN + MOVEI E,6 ;INITIALIZE CHARACTER COUNTER + MOVE V,LSTPT ;INITIALIZE BYTE POINTER TO W + TLZ F,SSW+DSW+FSW ;LEAVE SWITCH MODE +LD3: IFN RPGSW,<TLNE N,RPGF ;CHECK RPG FEATURE + JRST RPGRD> + SOSGE BUFI2 ;DECREMENT CHARACTER COUNTER + JRST [INPUT 3, ;FILL TTY BUFFER + JRST .-1] ;MAKE SURE NOT A NULL BUFFER + ILDB T,BUFI1 ;LOAD T WITH NEXT CHARACTER +LD3AA: CAIE T,175 ;OLD ALTMOD + CAIN T,176 ;EVEN OLDER ONE + MOVEI T,33 ;NEW ONE + CAIL T,140 ;LOWER CASE? + TRZ T,40 ;CONVERT TO UPPER CASE + MOVE Q,T + HRLM Q,LIMBO ;SAVE THIS CHAR. + MOVSS LIMBO ;AND LAST ONE + IDIVI Q,11 ;TRANSLATE TO 4 BIT CODE + LDB Q,LD8(A) ;LOAD CLASSIFICATION CODE + CAIGE Q,4 ;MODIFY CODE IF .GE. 4 + TLNN F,SSW ;MODIFY CODE IF SWITCH MODE OFF + ADDI Q,4 ;MODIFY CLASS. CODE FOR DISPATCH +IFN SYMARG,<CAIL Q,20 ;SKIP UNLESS SECOND FORM OF DISPATCH + JRST LD3AB ;DIFFERENT DISPATCH> + HRRZ A,LD3A(Q) ;LOAD RH DISPATCH ENTRY + CAIL Q,10 ;SKIP IF CORRECT DISPATCH ENTRY + HLRZ A,LD3A-10(Q) ;LOAD LH DISPATCH ENTRY + JRST @A ;JUMP TO INDICATED LOCATION + +;HERE ON ERRORS + +LD2C: POP P,(P) ;BACKUP ONE LEVEL +LD2: SETZM SBRNAM ;CLEAR BLOCK TYPE 6 SEEN +IFN RPGSW,<TLNE N,RPGF ;IN CCL MODE + TRNN F,TRMFL ;YES, /G SEEN?> + JRST LD2Q ;NO, START A NEW LINE +IFN RPGSW,<POPJ P, ;AND RETURN> + +;COMMAND DISPATCH TABLE + +LD3A: XWD LD3,LD7B ;IGNORED CHAR, BAD CHAR (SWITCH) + XWD LD6A,LD6 ;</> OR <(>, LETTER (SWITCH) + XWD LD5,LD6C ;<:>, DIGIT (SWITCH ARG.) + XWD LD5A,LD6D ;<.>, ESCAPE SWITCH MODE <)> + XWD LD5C,LD7 ;<=> OR <L. ARROW>, BAD CHAR. + XWD LD5B,LD4 ;<,>, ALPHABETIC CHAR. + XWD LD5D,LD4 ;<CR.>, NUMERIC CHAR. + XWD LD5E1,LD7 ;<ALT MODE>, BAD CHAR. <)> +IFN SYMARG,<XWD LD7,LD10 ;BAD CHAR,&> + +IFN SYMARG,< +LD3AB: ROT Q,-1 ;CUT Q IN HALF + HRRZ A,LD3A(Q) ;PULL OFF RIGHT HALF OF TABLE ENTRY + JUMPGE Q,@A ;WHICH IS CORRECT FOR EVEN ENTRIES + HLRZ A,LD3A(Q) ;BUT USE LEFT HALF FOR ODD ENTRIES + JRST @A> + +IFN RPGSW,< +RPGRD1: MOVNI T,5 + ADDM T,CTLIN+2 + AOS CTLIN+1 +RPGRD: SOSG CTLIN+2 ;CHECK CHARACTER COUNT. + JRST RPGRD2 + IBP CTLIN+1 ;ADVANCE POINTER + MOVE T,@CTLIN+1 ;AND CHECK FOR LINE # + TRNE T,1 + JRST RPGRD1 + LDB T,CTLIN+1 ;GET CHR + JRST LD3AA ;PASS IT ON + +RPGRD2: +IFN TEMP,<SKIPE TMPFLG ;TMPCOR UUO READ DONE? + JRST RPGRD3 ;YES, SO SHOULD NEVER GET HERE> + IN 17,0 + JRST RPGRD+2 + STATO 17,740000 + JRST RPGRD3 ;END OF FILE + ERROR ,</ERROR WHILE READING COMMAND FILE!/> + EXIT ;AND GIVE UP + +RPGRD3: ERROR ,</END-OF-FILE ON COMMAND FILE!/> + EXIT +> + SUBTTL CHARACTER HANDLING + +;ALPHANUMERIC CHARACTER, NORMAL MODE +LD4: SOJL E,LD3 ;JUMP IF NO SPACE FOR CHAR IN W + CAIGE T,141 ;WORRY ABOUT LOWER CASE LETTERS + SUBI T,40 ;CONVERT FROM ASCII TO SIXBIT + IDPB T,V ;DEPOSIT CHAR OF IDENTIFIER IN W + TLO F,DSW ;SET IDENTIFIER FLAG + JRST LD3 ;RETURN FOR NEXT CHARACTER + +;DEVICE IDENTIFIER DELIMITER <:> + +LD5: PUSH P,W ;SAVE W + TLOE F,CSW ;TEST AND SET COLON FLAG + PUSHJ P,LDF ;FORCE LOADING + POP P,W ;RESTORE W + TLNE F,ESW ;TEST SYNTAX + JRST LD7A ;ERROR, MISSING COMMA ASSUMED + JUMPE W,LD2DC ;JUMP IF NULL DEVICE IDENTIFIER + EXCH W,ILD1 ;STORE DEVICE IDENTIFIER + MOVEM W,LSTDEV ;SAVE LAST DEVICE SO WE CAN RESTORE IT + JRST LD2DB ;RETURN FOR NEXT IDENTIFIER + +;FILE NAME EXTENSION IDENTIFIER DELIMITER <.> +LD5A: IFN SYMARG,< + TRNE F,ARGFL ;IS "." SPECIAL + JRST LD4 ;YES,RADIX-50> + TLOE F,ESW ;TEST AND SET EXTENSION FLAG + JRST LD7A ;ERROR, TOO MANY PERIODS + TLZE F,CSW+DSW ;SKIP IF NULL IDENT AND NO COLON + MOVEM W,DTIN ;STORE FILE IDENTIFIER + JRST LD2DC ;RETURN FOR NEXT IDENTIFIER + +;INPUT SPECIFICATION DELIMITER <,> +LD5B: +IFN PP,<TLZE N,PPCSW ;READING PP #? + JRST [ +IFN SFDSW,< SKIPN D ;JUST A COMMA SEEN? + HLRZ D,MYPPN ;YES, USE OWN PROJ #> +IFE STANSW,< HRLM D,PPN ;STORE PROJ # + JRST LD6A1 ];GET PROG #> +IFN STANSW,< PUSHJ P,RJUST ;RIGHT JUSTIFY W + HRLM W,PPN ;STORE PROJ NAME + JRST LD2D ];GET PROG NAME> + PUSHJ P,SFDCK ;CHECK FOR SFD DIRECTORY> + SETOM LIMBO ;USED TO INDICATE COMMA SEEN + TLZN F,FSW ;SKIP IF PREV. FORCED LOADING + PUSHJ P,FSCN2 ;LOAD (FSW NOT SET) + JRST LD2BP ;RETURN FOR NEXT IDENTIFIER + +LD5B1: TLNE F,ESW ;TEST EXTENSION FLAG + JRST LDDT3 ;EXPLICIT EXTENSION IDENTIFIER + TLZN F,CSW+DSW ;SKIP IF IDENT. OR COLON + POPJ P, + MOVEM W,DTIN ;STORE FILE IDENTIFIER + JRST LDDT2 ;ASSUME <.REL> IN DEFAULT CASE + ;OUTPUT SPECIFICATION DELIMITER <=> OR <LEFT ARROW> +;OR PROJ-PROG # BRACKETS <[> AND <]> + +LD5C: +IFN SPCHN,<CAIN T,"=" ;DO A /= AS SWITCH + TLNN F,SSW + SKIPA + JRST LD6> +IFN RPGSW,<CAIN T,"@" ;CHECK FOR * COMMAND. + JRST RPGS1> +IFN PP,<CAIN T,"[" ;PROJ-PROG #? + JRST [TLO N,PPSW+PPCSW ;SET FLAGS + MOVEM W,PPNW ;SAVE W + MOVEM E,PPNE ;SAVE E + MOVEM V,PPNV ;SAVE V +IFN SFDSW,< SETZM SFD ;USED AS A FLAG> +IFE STANSW,< JRST LD6A2]> ;READ NUMBERS AS SWITCHES +IFN STANSW,< JRST LD2D]> + CAIN T,"]" ;END OF PP #? + JRST [PUSHJ P,RBRA ;PROCESS RIGHT BRACKET + JRST LD3] ;READ NEXT IDENT> + TLOE F,ASW ;TEST AND SET LEFT ARROW FLAG + JRST LD7A ;ERROR, MISPLACED LEFT ARROW + PUSHJ P,LD5B1 ;STORE IDENTIFIER + TLZN F,ESW ;TEST EXTENSION FLAG + MOVSI W,'MAP' ;ASSUME <.MAP> IN DEFAULT CASE + HRRI W,0 ;CLEAR RIGHT HALF OF EXTENSION + CAMN W,['CHN '] ;TEST FOR <.CHN> EXTENSION + MOVSI W,'MAP' ;AND TURN IT BACK TO MAP +IFN MONLOD,<CAMN W,['XPN '] ;IS EXTENSION 'XPN'? + JRST DIOPEN ;YES, OPEN DISK IMAGE FILE> +IFN SYMDSW,<CAMN W,['SYM '] ;IF EXT IS SYM + JRST SYOPEN ;OPEN AUX FOR SYMBOL FILE> + MOVEM W,DTOUT1 ;STORE FILE EXTENSION IDENTIFIER + MOVE W,DTIN ;LOAD INPUT FILE IDENTIFIER + MOVEM W,DTOUT ;USE AS OUTPUT FILE IDENTIFIER +IFN SPCHN,<MOVEM W,CHNENT ;AND FOR SPECAIL CHAINING> +IFN PP,<SKIPN W,PPN ;PROJ-PROG # + MOVE W,PPPN ;TRY PERMANENT ONE + MOVEM W,DTOUT+3 ;...> + MOVE W,ILD1 ;LOAD INPUT DEVICE IDENTIFIER + MOVEM W,LD5C1 ;USE AS OUTPUT DEVICE IDENTIFIER +IFN SPCHN,<SKIPN CHNACB ;ARE WE DOING A SPECIAL CHAIN? + MOVEM W,CHNOUT+1 ;ALLOW HIM TO CHOOSE SP CHAIN DEV> + SKIPN W,LSTDEV ;RESTORE LAST +IFN PP,<MOVSI W,'DSK' ;RESET DEVICE TO DSK> + SETZM LSTDEV ;BUT ONLY ONCE + MOVEM W,ILD1 +;INITIALIZE AUXILIARY OUTPUT DEVICE + +IFN SYMDSW,< + TLNN F,LSYMFL ;IGNORE IF ALREADY IN USE + PUSHJ P,AUXINI + JRST LD2DD +AUXINI:> + TRZ F,TTYFL +IFE SYMDSW,<TLZE N,AUXSWI+AUXSWE ;FLUSH CURRENT DEVICE + RELEASE 2, ;...> + MOVE W,LD5C1 ;GET AUX DEVICE + DEVCHR W, ;IS DEVICE A TTY? + TLNE W,10 ;... + TRO F,TTYFL ;YES SET FLAG + TLNE W,(1B4) ;IS IT CONTROLING TTY? +IFE SYMDSW,<JRST LD2DD ;YES, SKIP INIT> +IFN SYMDSW,<POPJ P,> + OPEN 2,OPEN2 ;KEEP IT PURE + JRST ILD5A + TLNE F,REWSW ;REWIND REQUESTED? + UTPCLR 2, ;DECTAPE REWIND + TLZE F,REWSW ;SKIP IF NO REWIND REQUESTED + MTAPE 2,1 ;REWIND THE AUX DEV + MOVEI E,AUX ;SET BUFFER ORIGIN + MOVEM E,.JBFF + OUTBUF 2,1 ;INITIALIZE SINGLE BUFFER + TLO N,AUXSWI ;SET INITIALIZED FLAG +IFN LNSSW,<EXCH E,.JBFF + SUBI E,AUX + IDIV C,E + OUTBUF 2,(C)> +IFE SYMDSW,<JRST LD2DD ;RETURN TO CONTINUE SCAN> +IFN SYMDSW,<POPJ P,> +;RIGHT SQUARE BRACKET (PROJ-PROG NUMBERS) +IFN PP,< +SFDCK: IFN SFDSW,< + TLNN N,PPSW ;READING PP #? + POPJ P, ;NO + SKIPE SFD ;READING SFD YET? + JRST SFDCK1 ;YES + SKIPN D ;NUMBER SEEN? + HRRZ D,MYPPN ;NO, USE MINE + HRRM D,PPN ;STORE IT + MOVEM X,SFD ;NEED AN AC, SETS SFD NON-ZERO + MOVE X,[-SFDSW,,SFD] ;INITIALIZE POINTER + JRST LD2DA ;GET FIRST SFD + +SFDCK1: AOBJP X,SFDER ;ERROR IF TOO MANY SFDS + MOVEM W,(X) ;STORE IN SLOT + JRST LD2DA ;GET NEXT SFD + +SFDER: MOVE X,SFD ;RESTORE X + ERROR ,</?TOO MANY SFDS SPECIFIED@/> + JRST LD2 + +> +RBRA: TLZN N,PPSW ;READING PP #? + POPJ P, ;NOPE, RETURN + TLZE N,PPCSW ;COMMA SEEN? + JRST LD7A ;NOPE, INDICATE ERROR +IFN SFDSW,<SKIPN SFD ;A FULL PATH SPECIFIED? + JRST RBRA1 ;NO + AOBJP X,SFDER ;MUST STORE LAST SFD + MOVEM W,(X) + SETZM 1(X) ;END WITH A ZERO + MOVE X,SFD ;RESTORE X + MOVEI W,SFDADD ;POINT TO SFD PATH + EXCH W,PPN + MOVEM W,SFD ;STORE IN BLOCK + JRST RBRA2 ;CONTINUE +RBRA1:> +IFE STANSW,<HRRM D,PPN ;STASH PROG NUMBER + TLZ F,SSW ;AND TURN OFF SWITCH MODE> +IFN STANSW,<PUSHJ P,RJUST ;RIGHT JUSTIFY W + HRRM W,PPN ;STASH PROG NAME> + MOVE W,PPN ;GET PPN +RBRA2: SKIPN DTIN ;FILE NAME SEEN IN THIS SPEC? + SKIPE PPNW ;OR SOMETHING WAITING IN W? + JRST RBRA3 ;YES, SO WE'VE GOT A FILE NAME SOMEWHERE + MOVEM W,PPPN ;NO , SO MAKE PERMANENT PPN +IFN SFDSW,<MOVE W,[SFD,,PSFD] + BLT W,PSFD+SFDSW ;MOVE FULL PATH + MOVEI W,PSFDAD ;POINT TO IT + SKIPE SFD ;BUT NOT IF IT'S ZERO + MOVEM W,PPPN ;AND STORE> +RBRA3: MOVE W,PPNW ;PICKUP OLD IDENT + MOVE E,PPNE ;RESTORE CHAR COUNT + MOVE V,PPNV ;RESTORE BYTE PNTR + POPJ P, ;TRA 1,4 + +;RIGHT JUSTIFY W + +IFN STANSW,< +RJUST: JUMPE W,LD7A ;NOTHING TO RIGHT JUSTIFY + TRNE W,77 ;IS W RJUSTED YET? + POPJ P, ;YES, TRA 1,4 + LSH W,-6 ;NOPE, TRY AGAIN + JRST .-3 ;...>> + +IFN SYMARG,< +;& SELECTS A SYMBOL RATHER THAN ANUMBER FOR A SWITCH ARGUMENT +;& MUST ALSO FOLLOW THW SYMBOL; THE FORM IS /&SYMBOL&SWITHCH +LD10: TRC F,ARGFL ;SET OR CLEAR SPECIAL CHARS. + TLCE F,SSW ;IF IN SWITCH MODE, EXIT TO GET IDENTIFIER + JRST LD10B + PUSHJ P,ASCR50 ;IF NOT, REENTER IT, CONVERT IDENTIFIER TO R50 + PUSHJ P,SDEF ;AND SEE IF IT EXISTS + JRST LD10A ;YES IT DOES + PUSHJ P,PRQ ;NO, COMPLAIN. OUTPUT ? + PUSHJ P,SPACE ;FOLLOWED BY A SPACE + PUSHJ P,PRNAME ;FOLLOWED BY THIS SYMBOL + ERROR 0,</ DOESN'T EXIST@/> + JRST LD2 +LD10A: MOVE D,2(A) ;SET D=VALUE OF SYMBOL AS NUMERIC ARG + TLZ F,DSW!FSW + MOVEI E,6 ;INITIALIZE NEW IDENTIFIER SCAN + MOVE V,LSTPT ;(W IS ALREADY 0) + JRST LD3 ;NOW EAT SWITCH AND CONTINUE PROCESSING COMMAND +LD10B: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION TO MAKE SURE FILE IS LOADED + JRST LD2DA> +SUBTTL CONVERT SYMBOL IN W TO RADIX-50 IN C + +IFN SYMARG,< +;ALSO USES A +ASCR50: MOVEI A,0 +R50A: MOVEI C,0 + ROTC W,6 ;C IS NEXT SIXBIT CHAR + CAIGE C,20 + JRST R50B ;UNDER 20, MAY BE ., $, OR % + CAILE C,31 + JRST R50C ;OVER 31 + SUBI C,20-1 ;IS NUMBER +R50D: IMULI A,50 + ADD A,C + JUMPN W,R50A ;LOOP FOR ALL CHARS + MOVE C,A ;WIND UP WITH CHAR IN C + TLO C,040000 ;MAKE IT GLOBAL DEFINITION + POPJ P, +R50B: JUMPE C,R50D ;OK IF SPACE + CAIE C,16 ;TEST IF . + JRST .+3 ;NO + MOVEI C,45 ;YES + JRST R50D + CAIE C,4 ;SKIP IF $ +R50E: MOVEI C,5 ;ASSUME % IF NOTHING ELSE + ADDI C,42 + JRST R50D +R50C: CAIGE C,41 + JRST R50E ;BETWEEN 31 AND 41 + CAILE C,72 + JRST R50E ;OVER 72 + SUBI C,41-13 ;IS LETTER + JRST R50D> + +;DEFINE PUTS A SYMBOL IN THE UNDEFINED SYMBOL TABLE +;SO LOADER CAN SCAN LIBRARY AND LOAD PROGRAMS BEFORE THEY ARE REQUESTED +;THE FORM IS /&SYMBOL# WHERE SYMBOL IS CONVERTED TO RADIX-50 +IFN SYMARG,< +DEFINE: PUSHJ P,ASCR50 ;CONVRT TO R-50 + MOVEI W,-2(S) ;WHERE SYMBOL WILL GO + CAIG W,(H) ;ENOUGH ROOM +IFN EXPAND,<PUSHJ P,[PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM3 + POPJ P,]> +IFE EXPAND,<TLO F,FULLSW> + SUB S,SE3 ;ADJUST POINTER + MOVEM C,1(S) ;R-50 SYMBOL + SETZM 2(S) ;VALUE + TLZ F,DSW!SSW ;TURN OFF SWITCHES + TRZ F,ARGFL ; DITTO + TLZN N,SLASH ;IF NOT /&NAME# + JRST LD6A2 ;MUST BE (&NAME#), GET ) + JRST LD2D ;CONTINUE TO SCAN +> + SUBTTL TERMINATION +;LINE TERMINATION <CARRIAGE RETURN> + +LD5D: +IFN PP,<PUSHJ P,RBRA ;CHECK FOR UNTERMINATED PP #> + SKIPGE LIMBO ;WAS LAST CHAR. BEFORE CR A COMMA? + TLO F,DSW ;YES ,SO LOAD ONE MORE FILE + PUSHJ P,FSCN ;FORCE SCAN TO COMPLETION + JRST LD2B ;RETURN FOR NEXT LINE + +;TERMINATE LOADING <ALT MODE> + +LD5E: JUMPE D,LD5E1 ;ENTER FROM G COMMAND + TLO N,ISAFLG ;AND IGNORE ANY STARTING ADDRESS TO COME + HRRZM D,STADDR ;USE NUMERIC STARTING ADDRESS +LD5E1: PUSHJ P,CRLF ;START A NEW LINE +IFN RPGSW,<TRO F,TRMFL ;INDICATE TERMINATION STAGE + RELEASE 17,0 ;RELEASE COMMAND DEVICE> +IFN MANTIS,<TRNN N,MANTFL ;LOADING MANTIS? + JRST LD5E2 ;NO +IFN KUTSW,<SETOM CORSZ ;DON'T KUT BACK CORE> +IFN DMNSW,<TRZ F,DMNFLG ;OR MOVE SYMBOLS> +LD5E2: > + PUSHJ P,SASYM ;SETUP JOBSA,JOBFF,JOBSYM,JOBUSY +IFE NAMESW,<MOVE W,['LOADER'] ;FINAL MESSAGE> + JUMPL S,.+2 ;UNDEFINED SYMBOLS + SKIPE MDG ;OR MULTIPLY DEFINED + PUSHJ P,PRQ ;PRINT "?" FOR BATCH +IFN NAMESW,<HRRZ W,HISTRT ;IN CASE NO NAME SET, USE FIRST LOADED + MOVE W,-1(W) + SKIPN CURNAM + PUSHJ P,LDNAM + MOVE W,CURNAM + CAME W,[SIXBIT /MAIN/] ;FORTRAN MAIN PROG, OR MACRO NO TITLE + JUMPN W,.+3 ;A USEFUL NAME SEEN + SKIPE PRGNAM ;NO, SO TRY BINARY FILE NAME + MOVE W,PRGNAM ;USE BINARY FILE NAME IN EITHER CASE +IFE L,<MOVEM W,CURNAM ;SAVE NAME FOR LATER> +IFN L,<SETNAM W, ;SETNAM>> +IFN MONLOD,<TLNN N,DISW ;SKIP IF LOADING TO DISK?> + PUSHJ P,BLTSET ;SETUP FOR FINAL BLT + RELEASE 2, ;RELEASE AUX. DEV. + RELEASE 1,0 ;INPUT DEVICE + RELEASE 3,0 ;TTY +IFN SPCHN,<RELEASE 4,0 ;SPECIAL CHAINING CHANEL> + IFN L,< MOVE W,LSPREL ;RESTORE LISP'S RELOCATION + JRST @LSPXIT> +IFE L,< ;NONE OF THIS NEEDED FOR LISP +IFN PURESW,< + MOVE V,[XWD HHIGO,HIGO] + BLT V,HIGONE ;MOVE DOWN CODE TO EXIT> + TLNN N,EXEQSW ;DO WE WANT TO START + JRST LD5E3 +IFN RPGSW,<HRRZ C,.JBERR ;CHECK FOR ERRORS +IFE MANTIS,<TLNN N,DDSW ;ALLOW EXECUTION IF TO DDT> +IFN MANTIS,<TDNN N,[DDSW,,MANTFL] ;OR MANTIS> + JUMPN C,EXDLTD ;ERRORS AND NOT TO DDT> +IFN MONLOD,<TLNE N,DISW ;DISK IMAGE LOAD IN PROGRESS? + MOVE X,XRES ;YES, GET RESIDENT X> + HRRZ W,.JBSA(X) +IFN MANTIS,<TRNN N,MANTFL ;NO MESSAGE IF STARTING SPECIAL DEBUGGER> + TLNN N,DDSW ;SHOULD WE START DDT?? +IFE TENEX,<JRST LD5E2 ;NO> +IFN TENEX,<JRST LD5E2 ;NO + PUSH P,1 + MOVEI 1,400000 ;THIS FORK + DIR + CIS + JSYS 147 ;TENEX RESET, NOT CALLI 0. FLUSH PA1050 + MOVE 1,.JBSYM(X) + MOVEM 1,@770001 ;GIVE SYMS TO DDT + MOVE 1,.JBUSY(X) + MOVEM 1,@770002 ;AND UNDEF SYMS + POP P,1> + HRRZ W,.JBDDT(X) + TTCALL 3,[ASCIZ /DDT /] +LD5E2: IFN MANTIS,< + SKIPE V,MNTSYM ;SHOULD WE START SPECIAL DEBUGGER? + TRNN N,MANTFL + JRST .+3 ;NO + HRRZ W,.JBREN##(X) ;YES + MOVEM V,.JBCN6##(X) ;SETUP AUXILARY SYMBOL POINTER> +IFN RPGSW,< TLNE N,RPGF ;IF IN RPG MODE + JUMPE W,NOSTAD ;ERROR IF NO STARTING ADDRESS> + JUMPE W,LD5E3 ;ANYTHING THERE? + TLOA W,(JRST) ;SET UP A JRST +LD5E3: SKIPA W,CALLEX ;NO OR NO EXECUTE, SET CALLI 12 +IFN MANTIS,<TRNE N,MANTFL ;NO MESSAGE IF STARTING SPECIAL DEBUGGER + CAIA> + TTCALL 3,[ASCIZ /EXECUTION +/] +IFN TENEX,<MOVEM X,V ;SAVE AWAY RELOCATION + MOVE X,.JBSA(X) ;NEW START ADDRESS + HRLI X,<JRST>B53 ;JRST IN LH + MOVEI N,400000 ;THIS FORK + SEVEC ;SET ENTRY VECTOR + MOVE X,V ;UNSAVE RELOCATION> +IFN LDAC,< HRLZ P,BOTACS ;SET UP FOR ACBLT + MOVEM W,.JBBLT+1(X) ;SET JOBBLT + MOVE W,[BLT P,P] + MOVEM W,.JBBLT(X)> + MOVE V,.JBVER(X) ;GET VERSION NUMBER + MOVEM V,.JBVER ;SET IT UP BEFORE SETNAM UUO +IFN MONLOD,<TLNE N,DISW ;LOADING TO DISK? + JRST DIOVER ;YES, CLEAN UP THE XPN FILE> + TLNE F,FULLSW ;DID WE RUN OUT OF CORE? + HRRZ A,Q ;YES, NULIFY BLT + MOVSI LSTAC,LODACS ;SET UP TO BLT BLT CODE INTO ACS + BLT LSTAC,LSTAC +IFN KUTSW,<SKIPGE E,CORSZ ;DO WE WANT CORE ADJUST + MOVE CORAC,JFCLAC ;NO, CLEAR COREUUO> +IFE LDAC,<MOVE LSTAC,W ;SET END CONDITION> +IFN PURESW,< + MOVSI V,LD ;DOES IT HAVE HISEG + JUMPG V,HINOGO ;NO,DON'T DO CORE UUO + MOVSI V,1 ;SET HISEG CORE NONE ZERO + JRST HIGO ;AND GO> +IFE PURESW,< +IFN NAMESW,<MOVE W,CURNAM ;GET PROGRAM NAME + SETNAM W, ;SET IT FOR VERSION WATCHING> +JRST 0> + +LODACS: PHASE 0 + BLT Q,(A) ;BLT CODE DOWN +IFN KUTSW,<CORAC:! CORE E, ;CUT BACK CORE +JFCLAC:! JFCL ;SHOULD NEVER HAVE AN ERROR SINCE REDUCING CORE> + SETZB 0,7 ;CLEAR ACCS OTHERWISE USER + SETZB 11,17 ;MIGHT BELIEVE GARBAGE THERE +LSTAC:! IFN LDAC,<JRST .JBBLT> + IFE LDAC,<EXIT> +DEPHASE + +IFN RPGSW,< +NOSTAD: TTCALL 3,[ASCIZ /NO STARTING ADDRESS +/] +EXDLTD: TTCALL 3,[ASCIZ /?EXECUTION DELETED +/] + JRST LD5E3> +> ;END OF IFE L AT BEGINNING OF THIS PAGE + SUBTTL PRINT FINAL MESSAGE +; SET UP BLT AC'S, SETDDT, RELEAS + +BLTSET: IFN RPGSW,<IFE K,< + JUMPE W,BLTST3 ;NO MESSAGE FROM CHAIN IN CCL@>> +IFN MANTIS,<TRNE N,MANTFL ;NO MESSAGES IF SPECIAL DEBUGGER + JRST NOMAX> + PUSHJ P,FCRLF ;A RETURN + MOVNI Q,6 ;SET CHARACTER COUNT TO 6 + MOVEI D,77 ;CHARACTER MASK +BLTST1: TDNE W,D ;TEST FOR SIXBIT BLANK + JRST BLTST2 ;NO, SO PRINT THE NAME + LSH D,6 ;SHIFT MASK LEFT ONE CHAR + AOJL Q,BLTST1 ;INCR COUNTER & REPEAT +BLTST2: PUSHJ P,PWORD1 ;OUTPUT PROGRAM NAME + PUSHJ P,SPACE +BLTST3: +IFN FAILSW,<MOVSI Q,-20 ;FINISH UP LINK STUFF +FREND: HLRZ V,LINKTB+1(Q) + JUMPE V,NOEND + HRRZ A,LINKTB+1(Q) +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> +IFN L,<CAML V,RINITL> + HRRM A,@X ;PUT END OF LINK CHAIN IN PROPER PLACE +NOEND: AOBJN Q,FREND +IFN REENT,<MOVE X,LOWX ;RESET THINGS>> +IFN KUTSW,< + SKIPGE C,CORSZ ;NEG MEANS DO NOT KUT BACK CORE + JRST NOCUT + JUMPE C,MINCUT ;0 IS KUT TO MIN. POSSIBLE + LSH C,12 ;GET AS A NUMBER OF WORDS + SUBI C,1 + CAMG C,.JBREL ;DO WE NEED MORE THAN WE HAVE?? + JRST TRYSML ;NO, SEE IF NUMBER REQUESTED IS TOO SMALL + MOVEI Q,0 + CORE Q, + JFCL ;WE JUST WANT TO KNOW HOW MUCH + HRRZS Q + CAMGE Q,CORSZ + JRST CORERR + JRST NOCUT1 ;SET FOR DO NOT CHANGE SIZE +TRYSML: CAIG C,-1(R) ;IS DESIRED AMOUNT BIGGER THAN NEEDED +IFE TENEX,<MINCUT:> + MOVEI C,-1(R) ;GET MIN AMOUNT + IORI C,1777 ;CONVERT TO A 1K MULTIPLE +IFN DMNSW,< TRNN F,DMNFLG ;DID WE MOVE SYMBOLS?? + SKIPN .JBDDT(X) ;IF NOT IS DDT THERE?? + JRST .+2> +IFE DMNSW,<SKIPE .JBDDT(X) ;IF NO SYMBOL MOVING JUST CHECK DDT> + JRST NOCUT ;DO NOT CUT IF SYMBOLS AT TOP AND DDT +NOCUT1: MOVEM C,.JBREL(X) ;SAVE FOR CORE UUO + MOVEM C,CORSZ ;SAVE AWAY FOR LATER + JRST .+2 +NOCUT: SETOM CORSZ ;SET FOR NO CUT BACK> +IFN RPGSW,<IFE K,< + JUMPE W,NOMAX ;NO MESSAGE IF CHAIN IN CCL@>> +IFN L,<HRRZ Q,.JBREL + SUB Q,OLDJR ;PROPER SIZE> +IFE L,<HRRZ Q,.JBREL(X)> + LSH Q,-12 ;GET CORE SIZE TO PRINT + ADDI Q,1 + PUSHJ P,RCNUM +IFN REENT,<MOVE Q,HVAL + SUB Q,HVAL1 + HRREI Q,-1(Q) ;SIZE IS ONE TOO BIG + CAIG Q,.JBHDA ;IS THERE ANY CODE LOADED THERE? + SETZB Q,HVAL ;NO , CLEAR ALL INDICATIONS OF IT + JUMPE Q,NOHY ;NO HIGH SEGMENT + MOVEI T,"+"-40 ;THERE IS A HISEG + PUSHJ P,TYPE + LSH Q,-12 + ADDI Q,1 + PUSHJ P,RCNUM +NOHY:> + MOVE W,[SIXBIT /K CORE/] + PUSHJ P,PWORD +IFE L,< +IFN RPGSW,<TLNN N,RPGF + JRST .+4 ;NOT IN CCL MODE SO GIVE ALL INFO + TLZ F,FCONSW ;ONLY PUT ON MAP IF IN CCL MODE + TLNN N,AUXSWI ;IS THERE AN AUX DEV? + JRST NOMESS ;NO, SO SKIP REST OF THIS STUFF> + MOVSI W,', ' ;SET DELIMITER CHARACTERS + MOVNI Q,2 ;SET COUNT TO 2 + PUSHJ P,PWORD1 ;OUTPUT THEM +IFN DMNSW,<TRNN F,DMNFLG> + SKIPN .JBDDT(X) + SKIPA Q,.JBREL(X) + MOVEI Q,1(S) ;FIND THE AMOUNT OF SPACE LEFT OVER + SUB Q,.JBFF(X) + ADDI Q,1 ;ONE TWO SMALL + PUSHJ P,RCNUM +IFN REENT,< + SKIPN HVAL ;CREATING A HIGH SEGMENT? + JRST NOHIFR ;NO + MOVEI T,'+' ;YES, TYPE + + PUSHJ P,TYPE + HLRZ Q,.JBHRL(X) ;GET HISEG BREAK + SUBI Q,1 ;1 TOO HIGH (R=NEXT TO LOAD INTO) + ANDI Q,1777 ;CUT TO WORDS FREE + XORI Q,1777 + PUSHJ P,RCNUM ;TYPE +NOHIFR:> + MOVE W,[SIXBIT / WORDS/] + PUSHJ P,PWORD + MOVE W,[SIXBIT / FREE/] + PUSHJ P,PWORD + PUSHJ P,CRLF + ERROR 0,</LOADER USED !/> ;GIVE EXPLANATION + MOVE Q,.JBREL + LSH Q,-12 + ADDI Q,1 + PUSHJ P,RCNUM ;PRINT MAX LOW CORE SIZE +IFN REENT,< SKIPE Q,.JBHRL ;GET SIZE OF HIGH SEGMENT + PUSHJ P,[MOVEI Q,400001(Q) ;CLEAR HIGH ORDER BIT + MOVEI T,"+"-40 ;PRINT A HIGH CORE PART + PUSHJ P,TYPE + LSH Q,-12 + JRST RCNUM]> + MOVE W,[SIXBIT /K CORE/] + PUSHJ P,PWORD +NOMESS: TLO F,FCONSW ;FORCE PRINTING OF CRLF> + PUSHJ P,CRLF +IFE L,< +IFN REENT,<HLRZ A,.JBCOR(X) ;GET HIGHEST ACTUAL DATA + CAIL A,.JBDA ;SEE IF GREATER THAN JOBDAT + JRST NOMAX ;YES, SKIP MESSAGE + ERROR 0,</[NULL LOW SEGMENT]!/> + PUSHJ P,CRLF> +NOMAX: +IFE TENEX,<MOVE W,.JBDDT(X) + SETDDT W, + JUMPN W,DDTSET ;DON'T BOTHER IF DDT SET + HLRE Q,.JBSYM(X) ;GET LENGTH OF SYMBOL TABLE + MOVNS Q ;AS POSITIVE NUMBER + HRRZ W,.JBSYM(X) ;GET START + ADD W,Q ;ADDRESS OF HIGHEST LOCATION + HLRZ Q,.JBSA(X) ;HIGHEST LOCATION SAVED BY MONITOR +IFN MANTIS,<TRNN N,MANTFL ;DONT CHECK ADR IF SPECIAL DEBUGGER> + CAIG W,(Q) ;IN BOUNDS? + JRST DDTSET ;YES, ALL OK +IFN REENT,<TRNE F,SEENHI ;ANY HIGH SEGMENT STUFF? + CAMGE W,HVAL1 ;YES, IN HI-SEG THEN? + JRST .+2 ;NO + JRST DDTSET ;YES, ALL IS WELL> + SETZM .JBSYM(X) ;JOBSYM IS OUT OF BOUNDS + CAIA ;JOBUSY ALSO, SO CLEAR THEM> +DDTSET: SKIPLE .JBUSY(X) ;IF ITS NOT A POINTER + SETZM .JBUSY(X) ;DON'T KEEP ADDRESS + +IFE TEN30,<HRLI Q,20(X) ;SET UP BLT FOR CODE + HRRI Q,20> +IFN TEN30,<HRLI Q,.JBDDT(X) + HRRI Q,.JBDDT> +>;END OF IFE L + HRRZ A,R + POPJ P, ;WE HAVE SET R UP BY CLEVER CODE IN SASYM +IFN KUTSW,<CORERR: TTCALL 3,[ASCIZ /?NOT ENOUGH CORE +/] + EXIT> + +IFN TENEX,< +;SETUP TO CUT BACK CORE TO MINIMUM +;THIS IS MIN OF R AND TOP OF SYMTAB +MINCUT: HLRE C,.JBSYM(X) + MOVNS C + ADD C,.JBSYM(X) + HRRZS C + JRST TRYSML ;GO COMPARE WITH R +> + SUBTTL SET UP JOBDAT +SASYM: TLNN F,NSW + PUSHJ P,LIBF ;SEARCH LIBRARY IF REQUIRED + PUSHJ P,FSCN ;FORCE END OF SCAN +IFN ALGSW,<MOVE C,[RADIX50 44,%OWN] + MOVE W,%OWN ;GET VALUE + TRNE N,ALGFL ;IF ALGOL PROG LOADED + PUSHJ P,SYMPT ;DEFINE %OWN +IFN REENT,<MOVE X,LOWX ;MAKE SURE X IS CORRECT>> +IFN RPGSW,<HLRE A,S + MOVNS A + LSH A,-1 + ADD A,.JBERR + HRRM A,.JBERR> +IFN SYMDSW,<PUSHJ P,READSYM ;READ BACK LOCAL SYMBOLS> +IFN SPCHN,< + SKIPE CHNACB ;TEST FOR SPECIAL CHAINING + TRNN N,CHNMAP ;TEST FOR ROOT SEGMENT PRINTED + JRST NOCHMP ;JUMP IF NO TO EITHER CONDITION + SETZM LINKNR ;CLEAR OVERLAY LINK NUMBER + MOVE A,BEGOV ;GET START OF OVERLAY POINT +IFN REENT,<ADDI A,(X) ;PLUS LOADER CORE BASE + HRRZS A ;CLEAR LEFT HALF OF REGISTER + HRRZ W,HILOW ;GET CURRENT SPOT IN LOW SEGMENT> +IFE REENT,<HRRZ W,R ;GET CURRENT SPOT IN LOW SEGMENT> + CAMN W,R ;TEST FOR ADDED MODULES + TRZ N,ENDMAP ;NO, THEN SUPRESS MAP AT END +NOCHMP: > ;END OF IFN SPCHN + TRNE N,ENDMAP ;WANT MAP AT END? + PUSHJ P,PRTMAP ;YES + TLNN N,AUXSWE ;TEST FOR MAP PRINTED YET + TLZ N,AUXSWI ; NO, THEN DON'T START NOW + TRNN N,ENDMAP ;DON'T PRINT UNDEFS TWICE + PUSHJ P,PMS ;PRINT UNDEFS + HRRZ A,H ;DO NOT CLOBBER H IF STILL INSERTING SYMBOLS +IFN MONLOD,<TLNN N,DISW ;SKIP IF LOADING TO DISK> + SUBI A,(X) ;HIGHEST LOC LOADED INCLUDES LOC STMTS + CAILE A,(R) ;CHECK AGAINST R + HRR R,A ;AND USE LARGER +IFN MONLOD,<TLNE N,DISW ;LOADING TO DISK? + MOVE X,XRES ;YES, GET RESIDENT OFFSET> +IFE L,< HRRZ A,STADDR ;GET STARTING ADDRESS + HRRM A,.JBSA(X) ;STORE STARTING ADDRESS + HRRZM R,.JBFF(X) ;AND CURRENT END OF PROG + HRLM R,.JBSA(X)> +IFN DMNSW,<MOVE C,[RADIX50 44,PAT..] ;MARK PATCH SPACE FOR RPG + MOVEI W,(R) + PUSHJ P,SYMPT +IFN REENT,<TRNE F,HISYM ;SHOULD SYMBOLS GO IN HISEG? + JRST BLTSYM ;YES>> +IFN DMNSW!LDAC,< ;ONLY ASSEMBLE IF EITHER SET +IFN MONLOD,<TLNE N,DISW ;LOADING TO DISK? + JRST SASYM1 ;YES, NO NEED TO EXPAND CORE> +IFE LDAC,< TRNN F,DMNFLG ;GET EXTRA SPACE IF SYMBOLS + JRST NODDT ;MOVED OR IF LOADING ACS> +IFE DMNSW,< MOVEI A,20 ;FOR LOADING ACS> +IFN DMNSW,< MOVE A,KORSP +IFN LDAC,< TRNN F,DMNFLG ;ONLY 20 IF SYMBOLS NOT MOVED + MOVEI A,20>> + ADDI A,(R) ;GET ACTUAL PLACE TO PUT END OF SPACE + ADDI A,(X) + CAIL A,(S) ;DO NOT OVERWRITE SYMBOLS +IFN EXPAND,<JRST [PUSHJ P,XPAND> + PUSHJ P,MORCOR +IFN EXPAND,< JRST .-1]> +IFN LDAC,<HRRM R,BOTACS ;SAVE BOTTOM OF WHERE WE PUT ACS + HRRZ A,R + ADDI A,(X) + HRL A,X ;SET UP BLT FROM (X) TO R(X) + MOVEI Q,17(A) + BLT A,(Q)>> +IFN DMNSW,<TRNN F,DMNFLG ;NOW THE CODE TO MOVE SYMBOLS + JRST NODDT +IFN MONLOD,<SASYM1:> + HRRZ A,R + ADD A,KORSP + MOVE W,A ;SAVE POINTER TO FINAL LOC OF UNDEFS +IFN MONLOD,<TLNE N,DISW ;LOADING TO DISK? + PUSHJ P,DISYM ;YES, GET BREAK ADDRESS INTO CORE> + ADDI A,(X) + HLLZ Q,S ;COMPUTE LENGTH OF SYMBOL TABLE + ADD Q,B + HLROS Q + MOVNS Q + ADDI Q,-1(A) ;GET PLACE TO STOP BLT + HRLI A,1(S) ;WHERE TO BLT FROM + SUBI W,1(S) ;GET AMOUNT TO CHANGE S AND B BY + BLT A,(Q) ;MOVE SYMBOL TABLE + ADD S,W + ADD B,W ;CORRECT S AND B FOR MOVE + HRRI R,1(Q) ;SET R TO POINT TO END OF SYMBOLS +IFN REENT,<HRRM R,HILOW ;SAVE THIS AS HIGHEST LOC IN LOW SEG TO SAVE> +IFN MONLOD,<TLNE N,DISW ;LOADING TO DISK? + MOVE X,XCUR ;GET CURRENT BUFFER OFFSET> + SUBI R,(X) +IFN MONLOD,<TLNE N,DISW ;LOADING TO DISK? + MOVE X,XRES ;SET UP OFFSET FOR RESIDENT PORTION> + HRRM R,.JBFF(X) + HRLM R,.JBSA(X) ;AND SAVE AWAY NEW JOBFF +IFE REENT,<HRRM R,.JBCOR(X) ;DON'T LOSE LOW SEGMENT DATA> +IFN LDAC,<SKIPA> ;SKIP THE ADD TO R +NODDT:> +IFN LDAC,<ADDI R,20> ;MAKE SURE R IS CORRECT FOR BLT + MOVE A,B + ADDI A,1 ;SET UP JOBSYM, JOBUSY +IFE L,<MOVEM A,.JBSYM(X) +IFN REENT,<TRNN A,(1B0) ;SYMBOL TABLE IN HIGH SEGMENT? + JRST NOHYSM ;NO + EXCH X,HIGHX ;RELOCATE TO HIGH SEG. + ADD X,HVAL1 ;ADD IN BASE OF HIGH SEGMENT + MOVEM A,.JBHSM(X) ;SINCE MAY NOT START AT 400000 + SUB X,HVAL1 ;BACK AS IT WAS + EXCH X,HIGHX +NOHYSM: >> +IFN L,<MOVEM A,.JBSYM> + MOVE A,S + ADDI A,1 +IFE L,<MOVEM A,.JBUSY(X) + MOVE A,HISTRT ;TAKE POSSIBLE REMAP INTO ACCOUNT +IFN MANTIS,<TRNE N,MANTFL ;SPECIAL DEBUGGER? + MOVE A,.JBREL ;YES, USE OUR SEGTOP> + MOVEM A,.JBREL(X) ;SET UP FOR IMEDIATE EXECUTION> +IFN L,<MOVEM A,.JBUSY> +IFN MONLOD,<TLNN N,DISW ;LOADING TO DSK? + JRST NOTDSK ;NO + MOVE A,.JBDDT(X) ;GET DDT STARTING ADDRESS + MOVEM A,.JBSDD(X) ;SO GET WILL RESTORE IT + MOVE A,.JB41(X) ;MAY AS WELL SET UP JOB41 + MOVEM A,.JBS41(X) ;ALSO +NOTDSK:> +IFN REENT,< + SKIPE A,HILOW ;SET UP TOP LOC OF LOW CORE EXCLUDING BLOCKS + SUBI A,1(X) ;IF NON-ZERO THEN IT NEEDS RELOCATION + HRLM A,.JBCOR(X) + TRNN F,SEENHI + POPJ P, + HRRZ A,HVAL + HRRM A,.JBHRL(X) + SUB A,HVAL1 +IFN DMNSW,<TRNE F,HISYM ;SYMBOLS IN HISEG? + ADDI A,1 ;YES, AT TOP OF CORE ALREADY + ;BUT HVAL ONE TOO SMALL> + HRLM A,.JBHRL(X)> + POPJ P, + + SUBTTL BLT SYMBOL TABLE INTO HIGH SEGMENT +IFN DMNSW&REENT,< +BLTSYM: MOVE Q,HVAL ;GET ORIGIN OF HISEG + CAMN Q,HVAL1 ;HAS IT CHANGED? + JRST NOBLT ;NO + HLLZ Q,S ;COMPUTE LENGTH OF SYMBOL TABLE + HLRS S ;PUT NEG COUNT IN BOTH HALVES + JUMPE S,.+2 ;SKIP IF S IS ZERO + HRLI S,-1(S) ;SUB 1 FROM LEFT TO FIX CARRY PROBLEM + ADD Q,B + HLROS Q + MOVNS Q + ADD Q,HVAL ;ADD LENGTH OF HISEG + SUB Q,HVAL1 ;BUT REMOVE ORIGIN + ADD Q,HISTRT ;START OF HISEG IN CORE + HRRZS Q ;CLEAR INDEX FROM Q + ADD Q,KORSP ;SAVE SPACE FOR SYMBOL PATCHES + CORE Q, ;EXPAND IF NEEDED + PUSHJ P,MORCOR + PUSH P,B ;SAVE B + SOJ B, ;REMOVE CARRY FROM ADD TO FOLLOW + MOVSS B ;SWAP SYMBOL POINTER + ADD B,.JBREL + HRRM B,(P) ;SAVE NEW B + MOVE Q,.JBREL + ADD B,S ;INCASE ANY UNDEFS. + BLT B,(Q) ;MOVE SYMBOLS + POP P,B ;GET NEW B + SUB B,HISTRT + ADD B,HVAL1 + SOJ B, ;REMOVE CARRY + ADDI S,(B) ;SET UP .JBUSY +BLTSY1: MOVE Q,.JBREL + SUB Q,HISTRT + ADD Q,HVAL1 + SUBI Q,1 ;ONE TOO HIGH + MOVEM Q,HVAL + JRST NODDT + + NOBLT: HRRZ Q,H ;GET HIGHEST LOC LOADED + IORI Q,1777 ;MAKE INTO A K BOUND + MOVEI A,-.JBHDA(S) ;GET BOTTOM OF UNDF SYMBOLS + SUB A,KORSP ;DON'T FORGET PATCH SPACE + CAIG A,(Q) ;ARE THEY IN SAME K +IFN EXPAND,<JRST [PUSHJ P,XPAND> + PUSHJ P,MORCOR +IFN EXPAND,< JRST NOBLT]> + MOVEM Q,HISTRT ;SAVE AS START OF HIGH + MOVEI A,400000 ;HISEG ORIGIN + MOVEM A,HVAL1 ;SAVE AS ORIGIN + SUB S,HISTRT ;GET POSITION OF UNDF POINTER + ADDI S,377777 ;RELATIVE TO ORG + SUB B,HISTRT ;SAME FOR SYM POINTER + ADDI B,377777 + SUBI Q,377777 + MOVEM Q,HIGHX ;SO WE CAN SET HIGH JOB DATA AREA + TRO F,SEENHI ;SO JOBHRL WILL BE SET UP + JRST BLTSY1 ;AND USE COMMON CODE +> + +IFN DMNSW!LDAC!MANTIS!SYMDSW,< +MORCOR: ERROR ,</MORE CORE NEEDED#/> + EXIT> + SUBTTL READ BACK LOCAL SYMBOLS +IFN SYMDSW,< +READSYM: + TRZN F,LSYMFL ;DID WE WRITE A SYMBOL FILE? + POPJ P, ;NO + RELEASE 2, ;CLOSE IT OUT + MOVE W,SYMNAM ;GET NAME + MOVEM W,DTIN + TRNE N,ENDMAP ;MAP STILL REQUIRED? + PUSHJ P,AUXINI ;YES, RE-INIT AUX DEV + MOVE W,SYMEXT ;SEE IF EXTENSION SPECIFIED + HRLZM W,DTIN1 + TLZ F,ISW + TLO F,ESW + MOVSI W,'DSK' + MOVEM W,ILD1 + PUSHJ P,ILD + PUSH P,S ;SAVE NUMBER OF UNDEFINED SYMBOLS FOR LATER + HLRE V,S ;GET COUNT + MOVMS V ;AND CONVERT TO POSITIVE + HRLI B,V ;PUT V IN INDEX FIELD + HRRZ S,HISTRT ;TOP OF CORE + SUB S,V ;MINUS SIZE + HRLI S,V ;V IN INDEX FIELD + ;MOW MOVE FROM S TO B + MOVE W,@B + MOVEM W,@S + SOJG V,.-2 ;FOR ALL ITEMS + HRRM S,(P) ;S IS NOW BOTTOM OF UNDEFINED + POP P,S ;SO PUT COUNT BACK INTO S + HRRZ B,HISTRT ;POINT B TO TOP OF CORE FOR EXPAND + MOVE V,SYMCNT# ;GET NUMBER OF SYMBOLS + LSH V,1 ;2 WORDS PER SYMBOL + SUBI V,(S) ;BOTTOM OF SYMBOL TABLE + ADDI V,(H) ;-TOP OF CODE + JUMPL V,.+3 + PUSHJ P,XPAND9 + JRST MORCOR + MOVE V,SYMCNT ;GET COUNT AGAIN + LSH V,1 + MOVNS V ;NEGATE + HRRZ C,S + ADD C,V ;TO + HRL C,S ;FROM + HLRE W,S ;LENGTH + MOVMS W ;POSITIVE + ADDI W,(C) ;END OF BLT + BLT C,(W) ;MOVE UNDEFS AGAIN + ADD S,V ;FIXUP POINTER + SETZM NAMPTR ;HAVE NOT SEEN A PROG YET + MOVE T,SYMCNT ;NUMBER OF SYMBOL PAIRS TO READ +READS1: PUSHJ P,WORDPR + MOVEM W,(B) + MOVEM C,-1(B) + SUB B,SE3 + TLNN C,740000 ;NAME HAS NO CODE BITS SET + JRST READS2 ;YES, HANDLE IT + SOJG T,READS1 ;READ NEXT SYMBOL + JRST READS4 ;ALL DONE + +READS2: MOVE W,NAMPTR ;POINT TO PREVIOUS NAME + HRRZM B,NAMPTR ;POINT TO THIS ONE + JUMPE W,READS3 ;FIRST TIME? + MOVE C,W ;GET COPY + SUBM B,W ;COMPUTE RELATIVE POSITION + HRLM W,2(C) ;STORE BACK +READS3: SOJG T,READS1 + +READS4: MOVEI T,'SYM' + CAMN T,SYMEXT ;IF EXT IS SYM + JRST READS5 ;DON'T DELETE FILE + SETZM DTIN + SETZM DTIN+3 + RENAME 1,DTIN + JFCL +READS5: SETOM SYMEXT ;SIGNAL NOT TO INIT SYMBOL FILE AGAIN + POPJ P, +> + SUBTTL WRITE CHAIN FILES +IFE K,< ;DONT INCLUDE IN 1KLOAD +CHNC: SKIPA A,.JBCHN(X) ;CHAIN FROM BREAK OF FIRST BLOCK DATA +CHNR: HLR A,.JBCHN(X) ;CHAIN FROM BREAK OF FIRST F4 PROG + HRRZS A ;ONLY RIGHT HALF IS SIGNIFICANT + JUMPE A,LD7C ;DON'T CHAIN IF ZERO + TLZN N,AUXSWI!AUXSWE ;IS THERE AN AUX DEV? + JRST LD7D ;NO, DON'T CHAIN + PUSH P,A ;SAVE WHEREFROM TO CHAIN + JUMPE D,.+2 ;STARTING ADDR SPECIFIED? + HRRZM D,STADDR ;USE IT + CLOSE 2, ;INSURE END OF MAP FILE + PUSHJ P,SASYM ;DO LIB SEARCH, SETUP JOBSA, ETC. +IFN RPGSW,<TLNE N,RPGF ;IF IN CCL MODE + TDZA W,W ;NO MESSAGES> + MOVE W,[SIXBIT ?CHAIN?] ;FINAL MESSAGE + PUSHJ P,BLTSET ;SETUP BLT PNTR, SETDDT, RELEAS + POP P,A ;GET WHEREFROM + HRRZ W,R ;CALCULATE MIN IOWD NECESSARY + SKIPE .JBDDT(X) ;IF JOBDDT KEEP SYMBOLS + CAILE W,1(S) + JRST CHNLW1 + HRRZ W,.JBREL ;NEED SYMBOLS AND THEY HAVE NOT MOVED DOWN + SUBI W,(X) ;BECAUSE WE WILL NOT HAVE BLITTED + SUBI B,-1(X) ;SYMBOL TABLE WILL COME OUT IN A + MOVEM B,.JBSYM(X) ;DIFFERENT PLACE +CHNLW1: MOVNS W + ADDI W,-7(A) + ADDI A,-7(X) + PUSH A,W ;SAVE LENGTH + HRLI W,-1(A) + MOVSM W,IOWDPP ;... + SETZM IOWDPP+1 ;JUST IN CASE + PUSH A,.JBCHN(X) + PUSH A,.JBSA(X) ;SETUP SIX WORD TABLE + PUSH A,.JBSYM(X) ;... + PUSH A,.JB41(X) + PUSH A,.JBDDT(X) + SETSTS 2,17 ;SET AUX DEV TO DUMP MODE + MOVSI W,'CHN' ;USE .CHN AS EXTENSION + MOVEM W,DTOUT1 ;... + PUSHJ P,IAD2 ;DO THE ENTER + JRST LD2 ;ENTER FAILURE + OUTPUT 2,IOWDPP ;WRITE THE CHAIN FILE + STATZ 2,IOBAD!IODEND + JRST LOSEBIG + CLOSE 2, + STATZ 2,IOBAD!IODEND +IFN RPGSW,<JRST LOSEBIG + TLNE N,RPGF ;IF IN CCL MODE + JRST CCLCHN ;LOAD NEXT LINK + EXIT> +LOSEBI: TTCALL 3,[ASCIZ /?DEVICE ERROR/] + EXIT> + SUBTTL SPECIAL CHAINB +IFN SPCHN,< +CHNBG: PUSHJ P,FSCN1A ;FORCE SCAN TO COMPLETION FOR CURRENT FILE + TLNN N,AUXSWI ;IS THERE AN AUX DEV?? + JRST CHNBG1 ;NO, SKIP THIS CODE + PUSH P,W ;PRESERVE W + MOVE W,CHNOUT+1 ;GET AUX DEV + DEVCHR W, ;GET ITS CHARACTERISTICS + TLNN W,DSKBIT ;IS IT A REAL DSK? + TLZA N,AUXSWI!AUXSWE ;NO, RELEASE MAP DEVICE + TLNN N,AUXSWE!AUXSWI ;SHOULD AUX DEVICE BE RELEASED? + RELEAS 2, ;YES, RELEAS IT SO ENTER WILL NOT FAIL + POP P,W ;RESTORE W +CHNBG1: ;LABEL TO SKIP AUX DEV. CHECKING +IFN REENT,<TRO N,VFLG ;GIVE HIM REENTRANT FORSE UNLESS /-V SEEN> + HRLZI W,-1(R) ;CHNTAB-L = ADDRESS OF VECTOR TABLE + HRRI W,1 ;CHNTAB-R = NEXT DISK BLOCK TO RITE INTO + MOVEM W,CHNTAB + MOVE C,[RADIX50 4,OVTAB] ;DEFINE GLOBAL SYMBOL OVTAB + MOVEI W,(R) ;TO HAVE VALUE THE BEGINNING OF THE VECTOR TABLE + PUSHJ P,SYMPT + ADDI R,VECLEN ;RESERVE SPACE FOR VECTOR TABLE + MOVE C,[RADIX50 4,OVBEG] ;OVBEG IS BEGINNING OF OVERLAY AREA + MOVEI W,(R) + PUSHJ P,SYMPT + HRRZM R,BEGOV ;AND SAVE IN OVBEG + SETZM LINKNR ;SET CURRENT LINK # TO ZERO + TRZ N,CHNMAP ;SHOW ROOT NOT PRINTED + OPEN 4,CHNOUT ;OPEN FILE FOR CHAIN + JRST ILD5 ;CANT OPEN CHAIN FILE + SKIPE CHNENT ;TEST FOR DEFINED CHAIN-FILE NAME + JRST CHNBG2 ;YES, SKIP + PUSH P,W ;SAVE W +IFN NAMESW,< + SKIPN W,CURNAM ;GET CURRENT NAME & TEST FOR DEFINED > + MOVE W,['CHAIN '] ;SET NAME = 'CHAIN' + MOVEM W,CHNENT ;AND STORE AS FILE NAME + POP P,W ;RESTORE W +CHNBG2: ENTER 4,CHNENT ;ENTER CHAIN FILE + JRST CHNBG3 ;ERROR + HRRZ W,NAMPTR + SUB W,HISTRT ;KEEP N RIGHT HALF AS RELATIVE TO HISTRT + HRRZM W,CHNACN ;SAVE FOR RESTORING + MOVEM B,CHNACB ;ALSO B R IS SAVED IN BEGOV + TRNE N,ENDMAP ;TEST FOR DEFERED MAP REQUEST + PUSHJ P,PRTMAP ;YES, PRINT IT NOW + AOS LINKNR ;SET LINE NUMBER TO 1 + POPJ P, + +CHNBG3: ERROR ,</ERROR WRITING CHAIN@/> + POPJ P, + +CHNENS: TLOA N,PPCSW ;THIS FLAG UNUSED AT THIS POINT +CHNEN: TLZ N,PPCSW ;ON TO NOT DELETE NEW SYMBOLS + SKIPN CHNACB ;WILL BE NON-ZERO IF WE SAW A /< (> TO KEEP MACRO HAPPY) + JRST LD7D ;ERROR MESSAGE + PUSHJ P,FSCN1A ;LOAD LIB (IF DESIRED) AND FORCE SCAN + TRNE N,ENDMAP ;TEST FOR DEFERED MAP REQUEST + PUSHJ P,PRTMAP ;YES, PRINT IT + AOS LINKNR ;INCR TO NEXT LINK NUMBER + SKIPL Q,S ;CHECK SYMBOL TABLE FOR MISSED UNDEFS + JRST NOER ;NONE THERE + MOVEI E,0 ;COUNT OF ERRORS +ONCK: + IFN FAILSW,<SKIPL V,1(Q) ;IF HIGH ORDER BIT IS ON + TLNN V,740000 ;OR IF ALL CODE BITS 0 + JRST NXTCK ;THEN NOT TO BE CHECKED> + MOVE V,2(Q) ;GET FIXUP WORD + TLNE V,100000 ;BIT INDICATES SYMBOL TABLE FIXUP + JRST SMTBFX +IFN FAILSW,<TLNE V,40000 ;BIT INDICATES POLISH FIXUP + JRST POLCK> + TLZE V,740000 ;THESE BITS WOULD MEAN ADDITIVE + JRST [JSP A,CORCKL + JRST NXTCK] ;ONLY TRY FIRST LOCATION +CORCK: JSP A,CORCKL + HRRZ V,@X ;THE WAY TO LINK +CORCKL: IFN REENT,<CAMGE V,HVAL1> + CAMGE V,BEGOV + SKIPA ;NOT IN BAD RANGE + JRST ERCK ;BAD, GIVE ERROR + JUMPE V,NXTCK ;CHAIN HAS RUN OUT +IFN REENT,<CAMGE V,HVAL1 ;GET CORRECT LINK + SKIPA X,LOWX + MOVE X,HIGHX> + XCT (A) ;TELLS US WHAT TO DO + JRST CORCKL ;GO ON WITH NEXT LINK + SMTBFX: TLNE N,PPCSW ;IF NOT CUTTING BACK SYMBOL TABLE + JRST NXTCK ;THE ALL OK + ADD V,HISTRT ;GET PLACE TO POINT TO + HRRZS V + HLRE D,CHNACB ;OLD LENGTH OF TABLE (NEGATIVE) + HLRE T,B ;NEW LENGTH + SUB D,T ;-OLD LEN+NEW LEN + ADDI D,(B) ;OLD BOTTOM=NEW BOTTOM+NEW LEN-OLD LEN + CAIG V,(D) ;IS IT IN THE PART WE ARE KEEPING + JRST ERCK + JRST NXTCK ;YES +IFN FAILSW,<POLCK: HLRZ C,V ;FIND HEADER + PUSHJ P,SREQ + SKIPA + JRST LOAD4A ;SHOULD BE THERE + HRL C,2(A) ;NOW FIRST OPERATOR (STORE) + MOVSS C + PUSHJ P,SREQ + SKIPA + JRST LOAD4A + ANDI C,37 ;GET OPERATION + HRRZ V,2(A) ;DESTINATION + JRST @CKSMTB-15(C) ;DISPATCH +CKSMTB: EXP SMTBFX,SMTBFX,SMTBFX,CORCK,LCORCK,CORCK,NXTCK +LCORCK: JSP A,CORCKL + HLRZ V,@X> +ERCK: MOVE C,1(Q) ;GET SYMBOL NAME + PUSHJ P,FCRLF ;FORCE CRLF AND OUTPUT ON TTY + PUSHJ P,PRNAME ;PRINT IT + ADDI E,1 ;MARK ERROR +NXTCK: ADD Q,SE3 ;TRY ANOTHER + JUMPL Q,ONCK +IFN REENT,<PUSHJ P,RESTRX ;GET PROPER X BACK> + JUMPE E,NOER ;DID ANYTHING GO WRONG?? + ERROR ,</UNDEFINED GLOBAL(S) IN LINK@/> + TRZE N,ENDMAP ;DELAYED MAP IN PIPELINE + PUSHJ P,PRTMAP ;YES, GO DO IT + JRST LD2 ;GIVE UP + +NOER: TRZE N,ENDMAP ;DELAYED MAP IN PIPELINE + PUSHJ P,PRTMAP ;YES, GO DO IT + MOVE A,BEGOV ;GET START OF OVERLAY + ADDI A,(X) ;GET ACTUAL CURRENT LOCATION +IFN REENT,<HRRZ W,HILOW ;AND END OF OVERLAY+1 + HRRZM A,HILOW ;RESET> +IFE REENT,<HRRZ W,R + ADDI W,(X) ;A BETTER GUESS> + SUBM A,W ;W=-LENGTH + SUBI A,1 ;SET TO BASE-1 (FOR IOWD) + HRL A,W ;GET COUNT + MOVEM A,IOWDPP + SETZM IOWDPP+1 + HRR A,CHNTAB ;BLOCK WE ARE WRITING ON + HLRZ V,CHNTAB ;POINTER TO SEGMENT TABLE + ADDI V,1 ;NEXT LOCATION + HRLM V,CHNTAB ;REMEMBER IT + CAML V,BEGOV ;CHECK FOR OVERRUN + JRST [ERROR ,</?TOO MANY LINKS@/> + JRST LD2];GIVE UP + MOVEM A,@X ;PUT INTO TABLE + MOVN W,W ;GET POSITIVE LENGTH + MOVE C,CHNOUT+1 ;GET CHAIN DEV. + DEVCHR C, ;WHAT IS IT? + MOVEI A,DSKBLK ;ASSUME DSK + TRNE C,DTABIT ;BUT IF DTA + MOVEI A,DTABLK ;BLOCK IS 177 + ADDI W,-1(A) + IDIV W,A ;GET NUMBER OF BLOCKS + ADDM W,CHNTAB ;AND UPDATE + TLZE N,PPCSW + JRST NOMVB ;DO NOT ADJUST SYMBOLS + HLRE W,CHNACB ;GET OLD LENGTH OF DEF SYMBOLS + HLRE C,B ;AND NEW LENGTH + SUB W,C ;-OLD LEN+NEW LEN + HRRZ C,B ;SAVE POINTER TO CURRENT S + ADD S,W + HRL W,W + ADD B,W ;UPDATE B (COUNT AND LOC) + JUMPGE S,UNLNKD ;JUST IN CASE NOTHING TO MOVE + HRRZ A,B ;PLACE TO PUT UNDEFS +UNLNK: MOVE W,(C) + MOVEM W,(A) ;TRANSFER + SUBI A,1 + CAIE A,(S) ;HAVE WE MOVED LAST WORD?? + SOJA C,UNLNK ;NO, CONTINUE +UNLNKD: HRRZ W,CHNACN ;GET SAVED N + ADD W,HISTRT + HRRZM W,NAMPTR ;AND RESET IT +NOMVB: HRR R,BEGOV ;PICK UP BASE OF AREA + SETSTS 4,16 ;SET DUMP MODE IN CASE OF INTERACTION WITH OTHER CHANNELS + OUTPUT 4,IOWDPP ;DUMP IT + STATZ 4,IOBAD!IODEND ;AND ERROR CHECK + JRST LOSEBI + HRRZ V,R ;GET AREA TO ZERO + MOVEI W,@X + CAIL W,1(S) ;MUST MAKE SURE SOME THERE + POPJ P, ;DONE + SETZM (W) + CAIL W,(S) + POPJ P, + HRLS W + ADDI W,1 + BLT W,(S) ;ZERO WORLD + POPJ P, +> + SUBTTL EXPAND CORE + +IFN EXPAND,< +XPAND: TLNE F,FULLSW ;IF CORE EXCEEDED + POPJ P, ;DON'T WASTE TIME ON CORE UUO + PUSH P,Q + HRRZ Q,.JBREL + ADDI Q,2000 +XPAND1: PUSH P,H ;GET SOME REGISTERS TO USE + PUSH P,X + PUSH P,N + PUSH P,.JBREL ;SAVE PREVIOUS SIZE + CAMG Q,ALWCOR ;CHECK TO SEE IF RUNNING OVER + CORE Q, + JRST XPANDE +IFE K,< HRRZ H,MLTP ;GET LOWEST LOCATION + TLNN N,F4SW ;IS FORTRAN LOADING> + MOVEI H,1(S) ;NO, USE S + POP P,X ;LAST .JBREL + HRRZ Q,.JBREL;NEW JOBREL + SUBI Q,(X) ;GET DIFFERENCE + HRLI Q,X ;PUT X IN INDEX FIELD +XPAND2: MOVE N,(X) + MOVEM N,@Q + CAMLE X,H ;TEST FOR END + SOJA X,XPAND2 + HRLI H,-1(Q) + TLC H,-1 ;MAKE IT NEGATIVE + SETZM (H) ;ZERO NEW CORE + AOBJN H,.-1 + MOVEI H,(Q) +XPAND8: ADD S,H + ADD B,H + ADDM H,HISTRT ;UPDATE START OF HISEG +IFN REENT,<ADDM H,HIGHX ;AND STORE LOCATION + TLNE F,HIPROG + ADDM H,-1(P) ;X IS CURRENTLY IN THE STACK> + POP P,N + ADDM H,NAMPTR +IFE K,< +IFN MANTIS,<SKIPE MNTSYM ;DEBUGGER DATA PRESENT? + ADDM H,MNTSYM> + TLNN N,F4SW ;F4? + JRST XPAND3 + ADDM H,PLTP + ADDM H,BITP + ADDM H,SDSTP + ADDM H,MLTP + TLNE N,SYDAT + ADDM H,V> +XPAND3: AOSA -3(P) +XPAND5: POP P,N + POP P,X + POP P,H + POP P,Q + POPJ P, + +XPANDE: POP P,A ;CLEAR JOBREL OUT OF STACK +XPAND6: ERROR ,</MORE CORE NEEDED#/> + TLO F,FULLSW ;ONLY ONCE + JRST XPAND5 + +XPAND7: PUSHJ P,XPAND + JRST SFULLC +IFN MONLOD,<TLNE N,DISW ;LOADING TO DISK? + JRST POPJM3 ;YES, RETURN TO CALL-2> + JRST POPJM2 + +XPAND9: PUSH P,Q ;SAVE Q + HRRZ Q,.JBREL ;GET CORE SIZE + ADDI Q,(V) ;ADD XTRA NEEDED + JRST XPAND1 ;AND JOIN COMMON CODE + +POPJM3: SOS (P) ;POPJ TO CALL-2 +POPJM2: SOS (P) ;POPJ TO CALL-1 + SOS (P) ;SAME AS POPJ TO + POPJ P, ;NORMAL POPJ MINUS TWO +> + + SUBTTL SWITCH HANDLING + +;ENTER SWITCH MODE + +LD6A: CAIN T,57 ;WAS CHAR A SLASH? + TLO N,SLASH ;REMEBER THAT +LD6A2: TLO F,SSW ;ENTER SWITCH MODE +LD6A1: SETZB D,C ;ZERO TWO REGS FOR DECIMAL AND OCTAL +IFN SYMARG,<TRZ F,ARGFL ;CLEAR SPECIAL SYMBOL SWITCH > + JRST LD3 ;EAT A SWITCH + +;ALPHABETIC CHARACTER, SWITCH MODE + +LD6: + CAIL T,141 ;ACCEPT LOWER CASE SWITCHES + SUBI T,40 +IFN SPCHN,<XCT LD6B-74(T) ;EXECUTE SWITCH FUNCTION> +IFE SPCHN,<XCT LD6B-101(T) ;EXECUTE SWITCH FUNCTION> + TLZE N,SLASH ;SWITCH MODE ENTERED W/ SLASH? + JRST LD6D ;LEAVE SWITCH MODE + JRST LD6A1 ;STAY IN SWITCH MODE + + ;DISPATCH TABLE FOR SWITCHES + +; THE INSTRUCTION AT THE CHARACTER LOCATION IS EXECUTED + +LD6B: +IFN SPCHN,<PUSHJ P,CHNBG ;LESS THAN - BEGINNING OF OVERLAY + PUSHJ P,CHNENS ;= - PUT OUT CHAIN RETAINING SYMBOLS + PUSHJ P,CHNEN ;GREATER THAN - END OF OVERLAY + JRST LD7B ;? - ERROR + JRST LD7B ;@ - ERROR> + PUSHJ P,ASWTCH ;A - LIST ALL GLOBALS +IFN DMNSW,<PUSHJ P,DMN2 ;B - BLOCKS DOWN SYMBOL TABLE > +IFE DMNSW,<JRST LD7B ;B - ERROR> +IFE K,< PUSHJ P,CHNC ;C - CHAIN, START W/ COMMON> +IFN K,< JRST LD7B ;C - ILLEGAL IN 1KLOAD> + PUSHJ P,LDDT ;D - DEBUG OPTION, LOAD DDT + TLO N,EXEQSW ;E - LOAD AND GO + PUSHJ P,LIBF0 ;F - LIBRARY SEARCH + PUSHJ P,LD5E ;G - GO INTO EXECUTION +IFN REENT,<PUSHJ P,HSET ;H - REENTRANT. PROGRAM> +IFE REENT,<JFCL ;JUST IGNORE /H> + PUSHJ P,ISWTCH ;I - IGNORE STARTING ADDRESSES + TLZ N,ISAFLG ;J - USE STARTING ADDRESSES +IFE KUTSW,<JRST LD7B ;K - ERROR> +IFN KUTSW,<MOVEM C,CORSZ ;K - SET DESIRED CORE SIZE> + PUSHJ P,LSWTCH ;L - ENTER LIBRARY SEARCH + PUSHJ P,PRMAP ;M - PRINT STORAGE MAP + TLZ F,LIBSW+SKIPSW ;N - LEAVE LIBRARY SEARCH + HRR R,D ;O - NEW PROGRAM ORIGIN + PUSHJ P,PSWTCH ;P - PREVENT AUTO. LIB. SEARCH + TLZ F,NSW ;Q - ALLOW AUTO. LIB. SEARCH +IFE K,< PUSHJ P,CHNR ;R - CHAIN, START W/ RESIDENT> +IFN K,< JRST LD7B ;R - ILLEGAL IN 1KLOAD> + PUSHJ P,SSWTCH ;S - LOAD WITH SYMBOLS + PUSHJ P,LDDTX ;T - LOAD AND GO TO DDT + PUSHJ P,PMSQ ;U - PRINT UNDEFINED LIST +IFN REENT,<PUSHJ P,VSWTCH ;V - LOAD REENTRANT LIB40> +IFE REENT,<JRST LD7B ;V - ERROR> + TLZ F,SYMSW+RMSMSW ;W - LOAD WITHOUT SYMBOLS + TLZ N,ALLFLG ;X - DO NOT LIST ALL GLOBALS +IFE TENEX,<TLO F,REWSW ;Y - REWIND BEFORE USE> +IFN TENEX,<PUSHJ P,NEWPAG ;Y - ORIGIN TO NEXT PAGE BOUNDARY> +IFE L,< JRST LDRSTR ;Z - RESTART LOADER> +IFN L,< JRST LD7B ;Z -- ILLEGAL IN LISP LOADER> + + ; PAIRED SWITCHES ( +,-) + +ASWTCH: JUMPL D,.+2 ;SKIP IF /-A + TLOA N,ALLFLG ;LIST ALL GLOBALS + TLZ N,ALLFLG ;DON'T + POPJ P, + +ISWTCH: JUMPL D,.+2 ;SKIP IF /-I + TLOA N,ISAFLG ;IGNORE STARTING ADDRESSES + TLZ N,ISAFLG ;DON'T + POPJ P, + +LSWTCH: JUMPL D,.+2 ;SKIP IF /-L + TLOA F,LIBSW!SKIPSW ;ENTER LIBRARY SEARCH + TLZ F,LIBSW!SKIPSW ;DON'T + POPJ P, + +PSWTCH: JUMPL D,.+2 ;SKIP IF /-P + TLOA F,NSW ;PREVENT AUTO. LIB SEARCH + TLZ F,NSW ;ALLOW + POPJ P, + +SSWTCH: JUMPL D,.+2 ;SKIP IF /-S + TLOA F,SYMSW!RMSMSW ;LOAD WITH SYMBOLS +IFE MANTIS,<TLZ F,SYMSW!RMSMSW ;DON'T> +IFN MANTIS,<TLZA F,SYMSW!RMSMSW ;DON'T + TRZ N,SYMFOR ;SYMBOLS LOAD EXPLICITLY SPECIFIED> + POPJ P, + +IFN REENT,< +VSWTCH: JUMPL D,.+2 ;SKIP IF /-V + MOVEI D,1 ;SET VSW = +1 FOR /V + MOVEM D,VSW ; = -1 FOR /-V + POPJ P,> + +IFN TENEX,< +;Y SWITCH - START LOADING AT NEXT PAGE BOUNDARY +NEWPAG: JUMPL C,NEWLPG ;/-Y BUMPS LOWSEG LOC + ADDI R,777 ;/Y BUMPS HISEG LOC + ANDCMI R,777 + POPJ P,0 + +NEWLPG: MOVE D,LOWR + ADDI D,777 + ANDCMI D,777 + MOVEM D,LOWR + POPJ P,0 + +> + IFN REENT,< +; H SWITCH --- EITHER /H OR /NH +HSET: JUMPE D,SETNUM ;/H ALWAYS LEGAL + CAIGE D,2 ;WANT TO CHANGE SEGMENTS + JRST SETSEG ;YES,GO DO IT + TRNN F,SEENHI ;STARTED TO LOAD YET? + JRST HCONT ;NO, CONTINUE. +IFE TENEX,<ERROR ,<?/H ILLEGAL AFTER FIRST HISEG FILE IS LOADED@?>> +IFN TENEX,<HRRZ C,HVAL + CAIGE D,0(C) + JRST HSET69 + HRRM D,HIGHR ;MOVE UP HIGH BREAK + POPJ P,0 + +HSET69: ERROR ,<?/H ILLEGAL: ATTEMPT TO LOWER HISEG BREAK@?> + POPJ P,0> +> + +IFE L,< +LDRSTR: ERROR 0,</LOADER RESTARTED@/> + JRST BEG ;START AGAIN (NO CCL)> +IFN REENT,< +HCONT: HRRZ C,D +IFE TENEX,<ANDCMI C,1777 + CAIL C,400000> + CAIG C,(H) + JRST COROVL ;BEING SET LOWER THAN 400000 OR MORE THAN TOP OF LOW SEG + HRRZM C,HVAL1 ;WE HAVE REMOVED THE ODD BITS TO MAKE A 1K MULT + ADDI C,.JBHDA + CAILE C,(D) ;MAKE SURE OF ENOUGH ROOM + MOVE D,C + HRLI D,W ;SET UP W IN LEFT HALF + MOVEM D,HVAL + POPJ P, ;RETURN. + +COROVL: ERROR ,</HISEG STARTING ADDRESS TOO LOW@/> + JRST LDRSTR +SETNUM: TRO F,NOHI ;SET NO-HIGH-SEG SWITCH. + POPJ P,> + ;SWITCH MODE NUMERIC ARGUMENT + +LD6C: LSH D,3 ;BUILD OCTAL NUMERIC ARGUMENT + ADDI D,-60(T) + IMULI C,^D10 + ADDI C,-"0"(T) ;ACCUMULATE DEC AND OCTAL + JRST LD3 + +;EXIT FROM SWITCH MODE + +LD6D: TLZ F,SSW ;CLEAR SWITCH MODE FLAG + TLNE F,FSW ;TEST FORCED SCAN FLAG + JRST LD2D ;SCAN FORCED, START NEW IDENT. + JRST LD3 ;SCAN NOT FORCED, USE PREV IDENT +;ILLEGAL CHARACTER, NORMAL MODE + +LD7: IFN SYMARG,< + CAIN T,"#" ;DEFINING THIS SYMBOL + JRST DEFINE ;YES + TRNN F,ARGFL ;TREAT AS SPECIAL + JRST .+4 ;NO + CAIE T,"$" + CAIN T,"%" + JRST LD4 ;YES> + CAIN T,"Z"-100 ;TEST FOR ^Z + JRST LD5E1 ;TREAT AS ALTMODE FOR BATCH + ERROR 8,</CHAR.%/> + JRST LD2 ;TRY TO CONTINUE + +;SYNTAX ERROR, NORMAL MODE + +LD7A: ERROR 8,</SYNTAX%/> + JRST LD2 + +;ILLEGAL CHARACTER, SWITCH MODE + +LD7B: CAIN T,"-" ;SPECIAL CHECK FOR - + JRST [SETOB C,D + JRST LD3] + CAIN T,"Z"-100 ;CHECK FOR /^Z + JRST LD5E1 ;SAME AS ^Z + ERROR 8,</SWITCH%/> + JRST LD2 + ;ATTEMPT TO CHAIN WITH SPECIFIED HALF OF JOBCHN = 0 + +IFE K,< +LD7C: ERROR ,<?UNCHAINABLE AS LOADED@?> + JRST LD2 + +;ATTEMP TO CHAIN WITHOUT SPECIFYING DEVICE + +LD7D: ERROR ,<?NO CHAIN DEVICE@?> + JRST LD2> + +IFN DMNSW,< +DMN2: +IFN REENT,<CAIN D,1 ;SPECIAL CASE + TROA F,HISYM ;YES ,BLT SYMBOLS INTO HISEG> + JUMPL D,.+2 + TROA F,DMNFLG ;TURN ON /B + TRZ F,DMNFLG ;TURN OFF IF /-B + CAMLE D,KORSP + MOVEM D,KORSP + POPJ P, ;RETURN> + + SUBTTL CHARACTER CLASSIFICATION TABLE DESCRIPTION: + +; EACH CHARACTER HAS ASSOCIATED WITH IT A FOUR BIT BYTE +; PACKED IN THE CHARACTER CLASSIFICATION TABLE. THE CHARACTER +; CLASSIFICATION CODES ARE ORDERED IN SUCH A WAY AS TO GIVE +; DELIMITERS OF HIGHER PRECEDENCE LOWER CLASSIFICATION NUMBERS. +; CERTAIN CHARACTERS HAVE NO EFFECT ON THE COMMAND STRING, AND +; THEREFORE DO NOT EFFECT ORDERING OF DELIMITERS. FOUR CODES +; ARE RESERVED FOR ALTERNATE DISPATCHES WHILE THE SWITCH MODE IS +; IN EFFECT. + + +;CLASSIFICATION BYTE CODES: + +; BYTE DISP CLASSIFICATION + +; 00 - 00 ILLEGAL CHARACTER, SWITCH MODE +; 01 - 01 ALPHABETIC CHARACTER, SWITCH MODE +; 02 - 02 NUMERIC CHARACTER, SWITCH MODE +; 03 - 03 SWITCH MODE ESCAPE, SWITCH MODE + +; 00 - 04 ILLEGAL CHARACTER, NORMAL MODE +; 01 - 05 ALPHABETIC CHARACTER, NORMAL MODE +; 02 - 06 NUMERIC CHARACTER, NORMAL MODE +; 03 - 07 SWITCH MODE ESCAPE, NORMAL MODE + +; 04 - 10 IGNORED CHARACTER +; 05 - 11 ENTER SWITCH MODE CHARACTER +; 06 - 12 DEVICE IDENTIFIER DELIMITER +; 07 - 13 FILE EXTENSION DELIMITER +; 10 - 14 OUTPUT SPECIFICATION DELIMITER +; 11 - 15 INPUT SPECIFICATION DELIMITER +; 12 - 16 LINE TERMINATION +; 13 - 17 JOB TERMINATION + ;BYTE POINTERS TO CHARACTER CLASSIFICATION TABLE + +LD8: POINT 4,LD9(Q),3 + POINT 4,LD9(Q),7 + POINT 4,LD9(Q),11 + POINT 4,LD9(Q),15 + POINT 4,LD9(Q),19 + POINT 4,LD9(Q),23 + POINT 4,LD9(Q),27 + POINT 4,LD9(Q),31 + POINT 4,LD9(Q),35 + +;CHARACTER CLASSIFICATION TABLE + +LD9: BYTE (4)4,0,0,0,0,0,0,0,0 + BYTE (4)4,4,4,4,12,0,0,0,0 + BYTE (4)0,0,0,0,0,0,0,0,0 + BYTE (4)13,0,0,0,0,4,0,4,0 +IFE SYMARG,< BYTE (4)0,0,0,0,5,3,0,0,11> +IFN SYMARG,< BYTE (4)0,0,14,0,5,3,0,0,11> + BYTE (4)0,7,5,2,2,2,2,2,2 +IFE SPCHN,< BYTE (4)2,2,2,2,6,0,0,10,0> +IFN SPCHN,< BYTE (4)2,2,2,2,6,0,1,10,1> +IFE RPGSW,< BYTE (4)0,0,1,1,1,1,1,1,1> +IFN RPGSW,< BYTE (4) 0,10,1,1,1,1,1,1,1> + BYTE (4)1,1,1,1,1,1,1,1,1 + BYTE (4)1,1,1,1,1,1,1,1,1 +IFE PP,<BYTE (4)1,0,0,0,0,10,0,1,1> +IFN PP,<BYTE (4)1,10,0,10,0,10,0,1,1> + BYTE (4)1,1,1,1,1,1,1,1,1 + BYTE (4)1,1,1,1,1,1,1,1,1 + BYTE (4)1,1,1,1,1,1,0,0,13 + BYTE (4)13,4 + SUBTTL INITIALIZE LOADING OF A FILE + +ILD: MOVEI W,BUF1 ;LOAD BUFFER ORIGIN + MOVEM W,.JBFF + TLOE F,ISW ;SKIP IF INIT REQUIRED + JRST ILD6 ;DONT DO INIT +ILD7: OPEN 1,OPEN3 ;KEEP IT PURE + JRST ILD5B +ILD6: TLZE F,REWSW ;SKIP IF NO REWIND + MTAPE 1,1 ;REWIND +ILD2: LOOKUP 1,DTIN ;LOOK UP FILE FROM DIRECTORY + JRST ILD3 ;FILE NOT IN DIRECTORY +IFE LNSSW,< + INBUF 1,BUFN ;SET UP BUFFERS> +IFN LNSSW,<INBUF 1,1 + MOVEI W,BUF1 + EXCH W,.JBFF + SUBI W,BUF1 +IFE K,<MOVEI C,4*203+1> +IFN K,<MOVEI C,203+1> + IDIV C,W + INBUF 1,(C)> + TLO F,ASW ;SET LEFT ARROW ILLEGAL FLAG + TLZ F,ESW ;CLEAR EXTENSION FLAG + POPJ P, + +; LOOKUP FAILURE + +ILD3: TLOE F,ESW ;SKIP IF .REL WAS ASSUMED + JRST ILD4 ;FATAL LOOKUP FAILURE + SETZM DTIN1 ;ZERO FILE EXTENSION + JRST ILD2 ;TRY AGAIN WITH NULL EXTENSION + +ILD4: +IFN CPUSW,< ;ALLOW LIB40I OR LIB40A TO FIND LIB40 + MOVE W,DTIN ;GET NAME WE TRIED FOR + TRZN W,77 ;DELETE 6TH CHARACTER + JRST ILD4B ;TRIED ALL CASES IF NULL +IFN REENT,<CAME W,['IMP40 '] ;IMP40? REQUESTED?> + CAMN W,['LIB40 '] ;WAS IT SOME FLAVOUR OF LIB40? + JRST [MOVEM W,DTIN ;YES, SALT NEW NAME + PUSHJ P,LDDT2 ;SET .REL AGAIN + TLZ F,ESW + JRST ILD2] +ILD4B:> + IFE REENT,<IFE TEN30,< ;PDP-6 ONLY + MOVE W,[SIXBIT /LIB40/] + CAME W,DTIN ;WAS THIS A TRY FOR LIB40? + JRST ILD4A ;NO + TRZ W,(SIXBIT / 0/) ;YES + MOVEM W,DTIN ;TRY LIB4 + PUSHJ P,LDDT2 ;USE .REL EXTENSION + TLZ F,ESW ;... + JRST ILD2 ;GO TRY AGAIN +ILD4A:>> + +ILD9: ERROR ,</CANNOT FIND#/> + JRST LD2C + +; DEVICE SELECTION ERROR + +ILD5A: SKIPA W,LD5C1 +ILD5B: MOVE W,ILD1 +ILD5: PUSHJ P,PRQ ;START W/ ? + PUSHJ P,PWORD ;PRINT DEVICE NAME + ERROR 7,</UNAVAILABLE@/> + JRST LD2 + SUBTTL LIBRARY SEARCH CONTROL AND LOADER CONTROL + +LIBF0: IFN FORSW,< + JUMPE D,LIBF ;MAKE /F WORK SAME WAY + SOSGE D ;USER SUPPLIED VALUE? + MOVEI D,FORSW-1 ;NO, SUPPLY DEFAULT + MOVEM D,FORLIB ;STORE VALUE + POPJ P, ;RETURN HAVING SETUP FOR /0F> + +LIBF: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + PUSH P,ILD1 ;SAVE DEVICE NAME +IFN PP,<SETZM PPN ;CLEAR LOCAL PPN + SETZM PPPN ;AND GLOBAL PPN> + PUSHJ P,LIBF1 ;LOAD SYS:JOBDAT.REL +IFN SAILSW,<LIBAGN: PUSHJ P,SALOAD ;LOAD RELS AND SEARCH LIBS> +IFN REENT,<SKIPGE W,VSW ;WAS /-V SEEN + TRZ N,VFLG ;YES, DOES NOT WANT REENTRANT SYSTEM + CAILE W,0 ;SKIP IF HE DOESN'T KNOW OR CARE + TRO N,VFLG ;DEFINITELY WANTS REENTRANT SYSTEM + TRNE F,SEENHI!HISYM ;IF ANY HISEG LOADED NO RE-ENT OP SYSTEM + TRZ N,VFLG!MANTFL ;YES, SO FORCE /-V SWITCH + TRNN N,VFLG + JRST LIBF3 +IFN ALGSW,<TRNE N,ALGFL ;SPECIAL ACTION IF LOADING ALGOL + PUSHJ P,SHARE> +IFN FORSW,<TRNN N,FORFL ;FORTRAN-10 ALWAYS WANTS FOROTS + TRNE N,F4FL ;IF F40 + SKIPG FORLIB ;AND WANTING FORLIB + JRST LIBF3 ;NOT BOTH TRUE + MOVE C,[RADIX50 04,FOROT%] ;SYMBOL + MOVEI W,400000+.JBHDA ;VALUE + PUSHJ P,SYMPT ;YES, DEFINE SYMBOL> +LIBF3:> +IFN NELSW,<TRNN N,NELFL ;LOADING NELIAC + JRST .+4 ;NO + PUSHJ P,NELGO ;UNDEFINED SYMBOL NELGO + MOVE W,[SIXBIT /LIBNEL/] + PUSHJ P,LIBF2 ;LOAD NELIAC LIBRARY> +IFN ALGSW,<MOVE W,[SIXBIT /ALGLIB/] +IFE NAMESW,<TRNE N,ALGFL ;LOADING ALGOL?> +IFN NAMESW,<TRNN N,ALGFL ;ALGOL? + JRST LIBF5+1 ;NO + SKIPE CURNAM ;SEE MAIN PROG YET? + JRST LIBF5 ;YES + ERROR ,</ALGOL MAIN PROGRAM NOT LOADED!/> + EXIT +LIBF5:> + PUSHJ P,LIBF2 ;YES, LOAD LIBRARY> +IFN COBSW,<MOVE W,[SIXBIT /LIBOL/] + TRNE N,COBFL ;LOADING COBOL? + PUSHJ P,LIBF2 ;YES, SCAN LIBOL> +IFN REENT,< +IFE CPUSW,<MOVE W,[SIXBIT /IMP40/]> +IFN CPUSW,<MOVE W,['IMP40A'] ;ASSUME KA-10 + TRNE F,KICPFL ;BUT IS IT? + HRRI W,'40I' ;NO, CHANGE TO IMP40A> +IFN FORSW,<SKIPG FORLIB ;IF LOADING FORLIB WE DON'T WANT IMP40> + TRNE N,COMFLS-F4FL ;ANY OTHER COMPILER ? + JRST LIBF4 ;YES, THEN WE DON'T WANT IMP40 + TRNE N,VFLG ;WANT REENTRANT OP SYSTEM? + PUSHJ P,LIBF2 ;YES, TRY REENTRANT FORSE> +LIBF4: +IFE CPUSW,<MOVE W,[SIXBIT /LIB40/]> +IFN CPUSW,<MOVE W,['LIB40A'] + TRNE F,KICPFL + HRRI W,'40I'> +IFN FORSW,<SKIPLE FORLIB ;FORSE OR FOROTS + MOVE W,['FORLIB'] ;YOU GET WHAT YOU ASK FOR> +IFN ALGSW,<TRNN N,ALGFL ;DON'T NEED LIB40 FOR ALGOL> + PUSHJ P,LIBF2 ;LOAD LIBRARY +IFN SAILSW,<MOVE W,LIBPNT ;SEE IF ANY MORE TO DO + CAME W,[XWD -RELLEN-1,LIBFLS-1] + JRST LIBAGN + MOVE W,PRGPNT ;IT COULD BE DANGEROUS TO LOAD PROGRAMS HERE + CAME W,[XWD -RELLEN-1,PRGFLS-1] + JRST LIBAGN ;MORE TO DO, TRY AGAIN> + POP P,ILD1 ;CALL TO LDDT1 WILL PUT IT IN OLDDEV +LIBF1: MOVE W,[SIXBIT /JOBDAT/] ;LOAD SYS:JOBDAT.REL +LIBF2: PUSHJ P,LDDT1 +LIBGO: JUMPGE S,EOF2 ;JUMP IF NO UNDEFINED GLOBALS + TLO F,SLIBSW+SKIPSW ;ENABLE LIBRARY SEARCH + TLZ F,SYMSW ;DISABLE LOADING WITH SYMBOLS + JRST LDF ;INITIALIZE LOADING LIB4 +IFN ALGSW!NELSW,< +IFN NELSW,< +NELGO: SKIPA C,[RADIX50 60,%NELGO]> +SHARE: MOVE C,[RADIX50 60,%SHARE] + MOVEI W,0 + JRST SYMPT ;DEFINE IT > + ; LIB CONTROLS THE LIBRARY SEARCH OF ONE FILE + +LIB: JUMPGE S,EOF1 ;JUMP IF NO UNDEFINED GLOBALS + TLO F,SKIPSW ;SET SKIPSW TO IGNORE MODE +IFN DIDAL,<TRNE F,XFLG ;INDEX IN CORE? + JRST INDEX1 ;YES> + JRST LOAD ;CONTINUE LIB. SEARCH + +LIB1: CAIE A,4 ;TEST FOR ENTRY BLOCK + JRST LIB29 ;NOT AN ENTRY BLOCK, IGNORE IT +LIB2: PUSHJ P,RWORD ;READ ONE DATA WORD + MOVE C,W + TLO C,040000 ;SET CODE BITS FOR SEARCH + PUSHJ P,SREQ + TLZA F,SKIPSW ;REQUEST MATCHES ENTRY, LOAD + JRST LIB2 ;NOT FOUND +LIB3: PUSHJ P,RWORD ;READ AND IGNORE ONE DATA WORD + JRST LIB3 ;LOOP TO IGNORE INPUT + +LIB29: CAIN A,14 ;INDEX BLOCK? + JRST INDEX0 ;YES +LIB30: HRRZ C,W ;GET WORD COUNT + JUMPE C,LOAD1 ;IF NUL BLOCK RETURN + CAILE C,^D18 ;ONLY ONE SUB-BLOCK + JRST LIB3 ;NO,SO USE OLD SLOW METHOD + ADDI C,1 ;ONE FOR RELOCATION WORD + +LIB31: CAML C,BUFR2 ;DOES BLOCK OVERLAP BUFFERS? + SOJA C,LIB32 ;YES,ALLOW FOR INITIAL ILDB + ADDM C,BUFR1 ;ADD TO BYTE POINTER + MOVNS C ;NEGATE + ADDM C,BUFR2 ;TO SUBTRACT C FROM WORD COUNT + JRST LOAD1 ;GET NEXT BLOCK + +LIB32: SUB C,BUFR2 ;ACCOUNT FOR REST OF THIS BUFFER + PUSHJ P,WORD+1 ;GET ANOTHER BUFFERFUL + JRST LIB31 ;TRY AGAIN + IFN SAILSW,< + +COMMENT * BLOCK TYPE 16 AND 17 USED TO SPECIFY PROGRAMS AND +LIBRARIES WHICH MUST BE LOADED (SEARCHED) IF THE PROGRAM +IN WHICH THE BLOCK APPEARS IS LOADED. IT IS NOW TIME TO +LOAD AND SEARCH THESE FILES. IF ANY MAKE REQUESTS, THEY ARE ADDED +TO THE END. WE WILL COME BACK AND LOOK AGAIN IN CASE A +LIBRARY PROGRAM LOAD A REL PROGRAM. ORIGINAL CODE BY DCS* + +SALOAD: MOVE T,[XWD -RELLEN-1,PRGFLS-1] ;TO RESET WITH AT END + MOVEI D,PRGPNT ;OINTER TO UPPER LIMIT + PUSHJ P,PRGPRG ;LOAD THEM IF ANY + +;NOW FOR LIBRARY SEARCH + + MOVE T,[XWD -RELLEN-1,LIBFLS-1] + MOVEI D,LIBPNT + +PRGPRG: MOVEM D,LODLIM# ;SAVE POINTER TO LIMIT + MOVEM T,LODSTP# ;START FOR RESETTING +PRGBAK: MOVEM T,LODPNT# ;AND START + CAMN T,@LODLIM ;GOTTEN TO END YET? + JRST PRGDON ;YES, DUMP IT + SKIPN W,PRGDEV(T) ;IS DEVICE SPECIFIED? + MOVSI W,(SIXBIT /DSK/) ;NO, DSK + MOVEM W,ILD1 ;WHERE WE INIT FROM + MOVSI W,(SIXBIT /REL/) ;EXTENSION + MOVEM W,DTIN1 + MOVE W,PRGFIL(T) + MOVEM W,DTIN ;FILE NAME + MOVE W,PRGPPN(T) ;THE PROJECT PROG + MOVEM W,DTIN+3 + PUSH P,JRPRG ;A RETURN ADDRESS + TLZ F,ISW ;FORCE NEW INIT + HRRZ T,LODLIM + CAIN T,LIBPNT ;WHICH ONE + JRST LIBGO + JRST LDF +PRGRET: MOVE T,LODPNT ;RETURNS HERE, GET NEXT ONE + AOBJN T,PRGBAK + +PRGDON: MOVE T,LODSTP ;RESTE POINTER IN CASE MORE ON OTHER LIBS + MOVEM T,@LODLIM +JRPRG: POPJ P,PRGRET ;PUSHED TO GET A RETURN ADDRESS + +PRGFIL==1 ;REL INDEX FOR FILE NAMES +PRGPPN==RELLEN+1 ;AND FOR PPNS +PRGDEV==2*RELLEN+1 ;AND FOR DEVICES +> ;END OF IFN SAILSW + SUBTTL LDDT LOADS <SYS:DDT.REL> AND SETS SYMSW + +LDDTX: TLO N,DDSW+EXEQSW ;T - LOAD AND GO TO DDT +LDDT: ;/D - LOAD DDT +IFN TENEX,<PUSH P,1 + PUSH P,3 + MOVEM 2,3 ; X = 2 + MOVSI 1,100001 + HRROI 2,[ASCIZ /<SUBSYS>UDDT.SAV/] + GTJFN + JRST LDDTQ + PUSH P,1 ;DDT JFN + MOVEI 1,400000 + GEVEC ;LOADER'S EV + POP P,1 + PUSH P,2 + HRLI 1,400000 ;THIS FORK + GET + MOVEI 1,400000 + GEVEC ;DDT'S EV + MOVEM 2,.JBDDT(3) ;3 HAS X IN IT + POP P,2 + SEVEC ;RESTORE LOADER'S EVEC + TLO F,SYMSW!RMSMSW ;DO /S PROBABLY ON BY DEFAULT + MOVE 2,3 + POP P,3 + POP P,1 + JRST DMN2 + +LDDTQ: TTCALL 3,[ASCIZ / +DDT10X NOT AVAILABLE. USING DEC DDT./] + MOVE 2,3 + POP P,3 + POP P,1> +IFN DMNSW,< PUSH P,D ;SAVE INCASE /NNND > + PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + MOVSI W,'DDT' ;FILE IDENTIFIER <DDT> + TLZ F,SYMSW!RMSMSW ;DON'T LOAD DDT WITH LOCAL SYMBOLS + PUSHJ P,LDDT1 + PUSHJ P,LDF ;LOAD <SYS:DDT.REL> + TLO F,SYMSW!RMSMSW ;ENABLE LOADING WITH SYMBOLS +IFN DMNSW,< POP P,D ;RESTORE D + JRST DMN2 ;MOVE SYMBOL TABLE > +IFE DMNSW,< POPJ P,> + +LDDT1: MOVEM W,DTIN ;STORE FILE IDENTIFIER + MOVE W,ILD1 ;SAVE OLD DEV + MOVEM W,OLDDEV +IFN PP,<SETZM PPPN ;CLEAR PERM PPN> + MOVSI W,'SYS' ;DEVICE IDENTIFIER <SYS> + MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER + TLZ F,ISW+LIBSW+SKIPSW+REWSW ;CLEAR OLD FLAGS +LDDT2: MOVSI W,'REL' ;EXTENSION IDENTIFIER <.REL> +LDDT3: MOVEM W,DTIN1 ;STORE EXTENSION IDENTIFIER +LDDT4: IFN PP,< + PUSH P,W ;SAVE W + SKIPN W,PPN ;GET TEMP PPN + MOVE W,PPPN ;TRY PERM + MOVEM W,DTIN+3 ;SET PPN + POP P,W ;RESTORE W> + POPJ P, + SUBTTL EOF TERMINATES LOADING OF A FILE + +EOF: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER +EOF1: TLZ F,SLIBSW!SKIPSW ;CLEAR ONE FILE LIB. SEARCH FLAG +IFN DIDAL,<TRZ F,XFLG!LSTLOD ;CLEAR DIDAL FLAGS +IFN SYMDSW,<TRNE F,LSYMFL ;USING AUX BUF FOR LOCAL SYMBOLS? + JRST EOF2 ;YES> + MOVSI W,(1B0) ;FOOL MONITOR THAT WE HAVE NOT USED THIS BUFFER + HLLM W,ABUF ;THEN NEXT OUTPUT WILL BE A "DUMMY OUTPUT" + MOVSI W,700 ;RESET BYTE POINTER TO ASCII + MOVEM W,ABUF1 ;AND HOPE DUMMY OUTPUT WILL CLEAR DIDAL STUFF + SETZM ABUF2 ;ZERO BYTE COUNT TO FORCE DUMMY OUTPUT> +EOF2: TLNE F,RMSMSW ;IF REMEMBER LOADING WITH SYMBOLS IS ON + TLO F,SYMSW ;THEN RESTORE SYMBOL LOADING STATE + POPJ P, + +; FORCE SCAN TO COMPLETION, LOAD IF NECESSARY + +FSCN: PUSHJ P,FSCN1 ;FORCED LOAD BEFORE TEST + TLNN F,FULLSW ;TEST FOR OVERLAP + POPJ P, ;NO OVERLAP, RETURN + MOVE W,H ;FETCH CORE SIZE REQUIRED +IFN MONLOD,<TLNE N,DISW ;LOADING TO DISK? + MOVE W,DIEND ;YES, GET END OF BUFFER+1> + SUBI W,1(S) ; COMPUT DEFICIENCY + JUMPL W,EOF2 ;JUMP IF NO OVERLAP + PUSHJ P,PRQ ;START WITH ? + PUSHJ P,PRNUM0 ;INFORM USER + ERROR 7,</WORDS OF OVERLAP#/> + JRST LD2 ;ERROR RETURN + +IFN SPCHN,<FSCN1A: TLNN F,NSW + PUSHJ P,LIBF> +FSCN1: TLON F,FSW ;SKIP IF NOT FIRST CALL TO FSCN +FSCN2: TLNN F,CSW+DSW+ESW ;TEST SCAN FOR COMPLETION + POPJ P, + PUSHJ P,LD5B1 ;STORE FILE OR EXTENSION IDENT. + +; LOADER CONTROL, NORMAL MODE + +LDF: PUSHJ P,ILD ;INITIALIZE LOADING + TLNE F,LIBSW ;IN LIBRARY SEARCH MODE? + JRST LIB ;CHECK IF NO UNDFS. + SUBTTL LOAD SUBROUTINE + +LOAD: MOVEM P,PDSAV ;SAVE PUSHDOWN POINTER +IFN WFWSW,<SETZM VARLNG ;LENGTH OF VARIABLE AREA-ADDED TO RELOC> +IFN ALGSW,<SETZM OWNLNG ;LENGTH OF OWN AREA-ADDED TO RELOC> +IFN FAILSW,<SETZM LFTHSW ;RESET LOAD LEFT HALF FIXUP SW> +IFN COBSW,<SETZM LOD37. ;CLEAR FLAG> +IFN MANTIS,<TRZE N,SYMFOR ;ZERO LOAD SYMBOLS IF IT WAS FORCED + TLZ F,SYMSW> +IFN TENEX,<SETZM NLSTGL ;ALLOW UNDEF. GLOBALS TO LIST> +LOAD1: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER +LOAD1A: PUSHJ P,WORD ;INPUT BLOCK HEADER WORD + MOVNI E,400000(W) ;WORD COUNT - FROM RH OF HEADER + HLRZ A,W ;BLOCK TYPE - FROM LH OF HEADER +IFN B11SW,<SKIPN POLSW ;ERROR IF STILL DOING POLISH> + CAIL A,DISPL*2 ;TEST BLOCK TYPE NUMBER + JRST LOAD4 ;ERROR, ILLEGAL BLOCK TYPE + TLNE F,SKIPSW ;BLOCK OK - TEST LOAD STATUS + JRST LIB1 ;RETURN TO LIB. SEARCH CONTROL + HRRZ T,LOAD2(A) ;LOAD RH DISPATCH ENTRY + CAIL A,DISPL ;SKIP IF CORRECT + HLRZ T,LOAD2-DISPL(A);LOAD LH DISPATCH ENTRY + TLNE F,FULLSW ;TEST CORE OVERLAP INDICATOR + SOJG A,HIGH0 ;IGNORE BLOCK IF NOT TYPE 1 + JRST @T ;DISPATCH TO BLOCK SUBROUTINE + +;DISPATCH TABLE - BLOCK TYPES +IFE B11SW,<POLFIX==LOAD4A> +IFE FAILSW,<LINK==LOAD4A> +IFE WFWSW,<LVARB==LOAD4A> +IFE ALGSW,<ALGBLK==LOAD4A> +IFE SAILSW,<LDPRG==LOAD4A + LDLIB==LOAD4A> +IFE COBSW,<COBSYM==LOAD4A> + +LOAD2: COMML,,LIB30 ;20,,0 + SPDATA,,PROG ;21,,1 + LOAD4A,,SYM ;22,,2 + LOAD4A,,HISEG ;23,,3 + LOAD4A,,LIB30 ;24,,4 + LOAD4A,,HIGH ;25,,5 + LOAD4A,,NAME ;26,,6 + LOAD4A,,START ;27,,7 + LOAD4A,,LOCD ;30,,10 + LOAD4A,,POLFIX ;31,,11 + LOAD4A,,LINK ;32,,12 + LOAD4A,,LVARB ;33,,13 + LOAD4A,,INDEX ;34,,14 + LOAD4A,,ALGBLK ;35,,15 + LOAD4A,,LDPRG ;36,,16 + COBSYM,,LDLIB ;37,,17 + + DISPL==.-LOAD2 + +;ERROR EXIT FOR BAD HEADER WORDS + +LOAD4: +IFN TENEX,<CAIN A,100 ;ASSIGN BLOCK? + JRST ASGSYM ;YES> +IFE K,<CAIN A,400 ;FORTRAN FOUR BLOCK +IFN MANTIS,< JRST F4LD + CAIE A,401 ;MANTIS DEBUGGER DATA PRESENT IN FORTRAN FILE + JRST LOAD4A ;NO + TLON F,SYMSW ;YES, FORCE SYMSW SET + TRO N,SYMFOR> + JRST F4LD> + +LOAD4A: MOVE W,A ;GET BLOCK TYPE + ERROR ,</ILL. FORMAT BLOCK TYPE !/> + PUSHJ P,PRNUM ;PRINT BLOCK TYPE + JRST ILC1 ;PRINT SUBROUTINE NAME + SUBTTL LOAD PROGRAMS AND DATA (BLOCK TYPE 1) +;(BLOCK TYPE 37) TREAT AS BLOCK TYPE 1, BUT ONLY LOAD +;IF IN LOCAL SYMBOLS MODE +IFN COBSW,< +COBSYM: TLNN F,SYMSW ;LOCAL SYMBOLS? + JRST LIB30 ;NO, SKIP OVER THIS BLOCK + MOVEI V,-1(W) ;GET BLOCK LENGTH + ADDM V,LOD37. ;COUNT EXTRA CODE> + +PROG: MOVEI V,-1(W) ;LOAD BLOCK LENGTH + PUSHJ P,RWORD ;READ BLOCK ORIGIN + SKIPGE W + PUSHJ P,PROGS ;SYMBOLIC IF 36 BITS + ADD V,W ;COMPUTE NEW PROG. BREAK +IFN REENT,<TLNN F,HIPROG + JRST PROGLW ;NOT HIGH SEGMENT +PROG3: +IFN TENEX,<MOVE X,HIGHX> + CAMGE W,HVAL1 ;CHECK TO SEE IF IN TOP SEG + JRST LOWCOR + MOVE T,.JBREL ;CHECK FOR OVERFLOW ON HIGH + CAIL T,@X + JRST PROG2 + PUSHJ P,HIEXP + JRST FULLC + JRST PROG3> + +IFN MONLOD,<TLNN N,DISW ;LOADING TO DISK? + JRST PROGLW ;NO, GO CHECK NEW BREAK + CAMG H,V ;NEW BREAK? + MOVE H,V ;YES, UPDATE + JRST PROG2 ;NO NEED TO CHECK FOR ROOM> +IFN REENT,< +LOWCOR: SUB V,HIGHX ;RELOC FOR PROPER + ADD V,LOWX ;LOADING OF LOW SEQMENT + SUB W,HIGHX + ADD W,LOWX> +PROGLW: MOVEI T,@X + CAMG H,T ;COMPARE WITH PREV. PROG. BREAK + MOVE H,T + TLNE F,FULLSW + JRST FULLC ;NO ERROR MESSAGE +IFN REENT,<CAML H,HVAL1 + JRST COROVL ;WE HAVE OVERFLOWED THE LOW SEGMENT + CAMLE T,HILOW + MOVEM T,HILOW ;HIGHEST LOW CODE LOADED INTO> + CAILE H,1(S) ; SKIP IF SUFFICIENT CORE AVAILABLE +IFN EXPAND,<JRST [PUSHJ P,XPAND> + JRST FULLC +IFN REENT,< TLNE F,HIPROG + SUBI W,2000 ;HISEG LOADING LOW SEG> +IFN EXPAND,< JRST .-1]> + PROG2: MOVE V,W +PROG1: PUSHJ P,RWORD ;READ DATA WORD +IFN TEN30,<CAIN V,41 ;CHANGE FOR 10/30 JOBDAT + MOVEI V,.JB41 ;JOB41 IS DIFFERENT + CAIN V,74 ;SO IS JOBDAT + MOVEI V,.JBDDT> +IFN L,<CAML V,RINITL ;CHECK FOR BAD STORE> +IFN MONLOD,<PUSHJ P,DICHK ;MAKE SURE ADDRESS IS IN CORE> + MOVEM W,@X ;STORE DATA WORD IN PROG. AT LLC +IFN MONLOD,<TLO N,WOSW ;SET SWITCH TO WRITE OUT BUFFER> + AOJA V,PROG1 ;ADD ONE TO LOADER LOC. COUNTER + +;HERE TO FIND SYMBOLIC ORIGIN +;W CONTAINS RADIX50 60,ORIGIN +;NEXT WORD CONTAINS OFFSET +;NOTE SYMBOL MUST BE GLOBAL AND DEFINED + +PROGS: MOVE C,W ;PUT SYMBOL IN CORRECT SEARCH AC + TLC C,640000 ;PERMUTE FROM 60 TO 04 + PUSHJ P,SDEF ;SEE IF DEFINED + SKIPA C,2(A) ;YES, GET VALUE + JRST PROGER ;NO, GIVE WARNING + HRRZ C,C ;CLEAR LEFT HALF IN CASE COMMON + PUSHJ P,RWORD ;GET NEXT WORD + ADD W,C ;FORM ORIGIN + SOJA V,CPOPJ ;BUT NOT SO MANY DATA WORDS + +PROGER: MOVEM C,(P) ;REMOVE RETURN, SAVE C + ERROR ,</VALUE NOT DEFINED FOR SYMBOLIC RELOCATION COUNTER !/> + POP P,C + PUSHJ P,PRNAME + JRST LIB3 ;IGNORE THIS BLOCK + + SUBTTL LOAD SYMBOLS (BLOCK TYPE 2) + +SYM: PUSHJ P,PRWORD ;READ TWO DATA WORDS + PUSHJ P,SYMPT; PUT INTO TABLE +IFN REENT,<PUSHJ P,RESTRX> + JRST SYM + +SYMPT: TLNE C,200000 ;GLOBAL REQUEST? WFW + JUMPL C,SYM3 ;CHECK FOR 60 NOT JUST HIGH BIT WFW + TLNN C,40000 + JRST SYM1A ;LOCAL SYMBOL + TLNE C,100000 + JRST SYM1B +SYMPTQ: PUSHJ P,SREQ ;GLOBAL DEF., SEARCH FOR REQUEST + JRST SYM2 ;REQUEST MATCHES + PUSHJ P,SDEF ;SEARCH FOR MULTIPLE DEFINITIONS + JRST SYM1 ;MULTIPLY DEFINED GLOBAL + JRST SYM1B + +; PROCESS MULTIPLY DEFINED GLOBAL + +SYM1: CAMN W,2(A) ;COMPARE NEW AND OLD VALUE + POPJ P,; + AOS MDG ;COUNT MULTIPLY DEFINED GLOBALS + PUSHJ P,PRQ ;START W/ ? + PUSHJ P,PRNAM ;PRINT SYMBOL AND VALUE +IFN RPGSW,<MOVE W,.JBERR ;RECORD THIS AS AN ERROR + ADDI W,1 + HRRM W,.JBERR> + MOVE W,2(A) ;LOAD OLD VALUE + PUSHJ P,PRNUM ;PRINT OLD VALUE + ERROR 7,</MUL. DEF. GLOBAL IN PROG. !/> + MOVE C,SBRNAM ;GET PROGRAM NAME + PUSHJ P,PRNAME ;PRINT R-50 NAME + ERROR 0,</#/> + POPJ P, ;IGNORE MUL. DEF. GLOBAL SYM + ; LOCAL SYMBOL + +SYM1A: TLNN F,SYMSW ;SKIP IF LOAD LOCALS SWITCH ON + POPJ P,; IGNORE LOCAL SYMBOLS +IFN SYMDSW,< +IFE MONLOD,<TRNE F,LSYMFL ;ONLY PUT SYMBOLS ON DSK IF EXT SYM> +IFN MONLOD,<TLNN N,DISW ;BUT NOT IF LOADING TO DISK> + JRST SYM1X ;STORE SYMBOL ON DSK> + +SYM1B: IFN MONLOD,<TLNE N,DISW ;LOADING TO DISK? + PUSHJ P,SIZCHK ;YES, CHECK FOR OVERLAP> + CAIL H,(S) ;STORE DEFINED SYMBOL +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> +SYM1C: IFE K,< + TLNE N,F4SW; FORTRAN FOUR REQUIRES A BLT + PUSHJ P,MVDWN; OF THE TABLES> +SYM1D: MOVEI A,-2(S) ;LOAD A TO SAVE INST. AT SYM2 + SUBI S,2 ;UPDATE UNDEFINED POINTER + POP B,2(A) ;MOVE UNDEFINED VALUE POINTER + POP B,1(A) ;MOVE UNDEFINED SYMBOL + MOVEM W,2(B) ;STORE VALUE + MOVEM C,1(B) ;STORE SYMBOL +IFE SYMDSW,<POPJ P,> +IFN SYMDSW,< +SYM1X: +IFN MONLOD,<SKIPL SYMEXT ;BEEN SETUP ONCE? + TLNE N,DISW ;OR, IF OUTPUTTING TO DSK + POPJ P, ;DON'T BOTHER> +IFE MONLOD,<SKIPL SYMEXT ;BEEN SETUP ONCE?> + TRNN F,LSYMFL ;OUTPUT FILE SET UP? +IFN MONLOD,<PUSHJ P,INITSYM ;NO, DO IT> +IFE MONLOD,<POPJ P, ;NO, DON'T OUTPUT SYMBOLS> + SOSG ABUF2 + OUTPUT 2, + IDPB C,ABUF1 + SOSG ABUF2 + OUTPUT 2, + IDPB W,ABUF1 + AOS SYMCNT# + POPJ P,> + + IFN SYMDSW,< +SYOPEN: HLRZM W,SYMEXT# + MOVE W,DTIN ;GET FILE NAME + MOVEM W,SYMNAM ;SAVE IT + PUSHJ P,INITSYM ;OPEN FILE + JRST LD2DD ;AND RETURN TO SCAN + +INITSYM: + TLZ N,AUXSWI!AUXSWE + INIT 2,14 + SIXBIT /DSK/ + ABUF,,0 + HALT + PUSH P,0 + PUSH P,1 + PUSH P,2 + PUSH P,3 + MOVEI 0,AUX + MOVEM 0,.JBFF + OUTBUF 2,1 + PJOB 0, + MOVEI 3,3 + IDIVI 0,^D10 + ADDI 1,"0"-40 + LSHC 1,-6 + SOJG 3,.-3 + HRRI 2,'SYM' + MOVE 0,SYMNAM# ;GET NAME + JUMPN 0,.+3 ;WAS IT SET + MOVS 0,2 ;NO + MOVEM 0,SYMNAM ;STORE IT + SKIPN 1,SYMEXT ;ALREADY SET + MOVEI 1,'TMP' + HRRZM 1,SYMEXT ;STORE FILE EXTENSION + HRLZS 1 + SETZB 2,3 + ENTER 2,0 + HALT + POP P,3 + POP P,2 + POP P,1 + POP P,0 + IORI F,LSYMFL ;SYMBOL FILE SETUP NOW + POPJ P, +> + ; GLOBAL DEFINITION MATCHES REQUEST + +SYM2: PUSH P,SYM2C ;NEXT MUST BE A SUBROUTINE FOR LATER, SET RETURN +SYM2B: MOVE V,2(A) ;LOAD REQUEST POINTER + PUSHJ P,REMSYM + JUMPL V,SYM2W ;ADDITIVE REQUEST? WFW + PUSHJ P,SYM4A ;REPLACE CHAIN WITH DEFINITION +SYM2W1: PUSHJ P,SREQ ;LOOK FOR MORE REQUESTS FOR THIS SYMBOL + JRST SYM2B ;FOUND MORE +SYM2C: POPJ P,SYM1D ;RETURN, SEE SYM2 FOR USE OF ADDRESS + +; REQUEST MATCHES GLOBAL DEFINITION + +SYM2A: MOVE V,W ;LOAD POINTER TO CHAIN + MOVE W,2(A) ;LOAD VALUE + JUMPL V,FIXWP ;HANDLE ATTITIVE REQUEST WFW + JRST SYM4A + +; PROCESS GLOBAL REQUEST + +SYM3: TLNE C,040000; COMMON NAME + JRST SYM1B + TLC C,640000; PERMUTE BITS FROM 60 TO 04 + PUSHJ P,SDEF ;SEARCH FOR GLOBAL DEFINITION + JRST SYM2A ;MATCHING GLOBAL DEFINITION + JUMPL W,SYM3X1 ;ADDITIVE FIXUP WFW + PUSHJ P,SREQ ;SEARCH FOR EXISTING REQUEST WFW + JRST SYM3A ;EXISTING REQUEST FOUND WFW +SYM3X1: TLNN W,100000 ;CHECK SYMBOL TABLE FIXUP + JRST SYM3X2 ;NO + MOVE V,1(B) ;MUST BE LAST SYMBOL DEFINED. GET SYMBOL + XOR V,W ;CHECK FOR IDENTITY + TDNE V,[XWD 77777,-1] ;BUT IGNORE HIGH 3 BITS + POPJ P, ;NOT SAME, ASSUME NOT LOADED LOCAL + HRRI W,2(B) ;GET LOCATION IN RIGHT HALF + TLO W,1 + SUB W,HISTRT ;AND MAKE RELATIVE +IFN B11SW,<TLZ W,040000> +SYM3X2: IFN MONLOD,<TLNE N,DISW ;LOADING TO DISK? + PUSHJ P,SIZCHK ;YES, CHECK FOR OVERLAP> + CAIL H,(S) ;STORE REQUEST IN UNDEF. TABLE WFW +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> +SYM3X: IFE K,< + TLNE N,F4SW; FORTRAN FOUR + PUSHJ P,MVDWN; ADJUST TABLES IF F4> + SUB S,SE3 ;ADVANCE UNDEFINED POINTER + MOVEM W,2(S) ;STORE UNDEFINED VALUE POINTER + MOVEM C,1(S) ;STORE UNDEFINED SYMBOL + POPJ P,; + +; COMBINE TWO REQUEST CHAINS + +SYM3A: SKIPL 2(A) ;IS IT ADDITIVE WFW + JRST SYM3A1 ;NO, PROCESS WFW +SYM3A4: PUSHJ P,SDEF2 ;YES, CONTINUE WFW + JRST SYM3A ;FOUND ANOTHER WFW + JRST SYM3X2 ;REALLY NO CHAIN THERE WFW +SYM3A1: SKIPE V,2(A) ;IF ADDRESS OF CHAIN IS 0, THROW IT AWAY + JRST SYM3A2 ;AND USE THE NEW ONE, ELSE ADD THE CHAINS + MOVEM W,2(A) ;W IS ADDRESS OF NEW CHAIN,STORE ON TOP OF OLD 0 + POPJ P, +SYM3A2: +SYM3A3: MOVE A,2(A) +SYM3B: HRRZ V,A +IFN L,<CAMGE V,RINITL + HALT> +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> +IFN MONLOD,<PUSHJ P,DICHK ; MAKE SURE ADDRESS IN V IS IN CORE> + HRRZ A,@X ; LOAD NEXT ADDRESS IN CHAIN + JUMPN A,SYM3B ; JUMP IF NOT THE LAST ADDR. IN CHAIN + HRRM W,@X ;COMBINE CHAINS +IFN MONLOD,<TLO N,WOSW ;SET FLAG TO WRITE OUT BUFFER> + POPJ P,; + +;WFW PATCH FOR ADDITIVE GLOBAL REQUESTS + +FIXWP: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + JRST FIXW + MOVE T,1(B) ;SYMBOL FIXUP, MUST BE LAST SYMBOL DEFINED + XOR T,V ;CHECK FO SAME + TDNE T,[XWD 77777,-1] ;EXCEPT FOR HIGH CODE BITS + POPJ P, ;ASSUME NON-LOADED LOCAL + HRRI V,2(B) ;GET LOCATION + SUBI V,(X) ;SO WE CAN USE @X + JRST FIXW1 +FIXW: IFN REENT,<HRRZ T,V + CAMGE T,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> +IFN L,< HRRZ T,V + CAMGE R,RINITL + POPJ P,> +FIXW1: TLNE V,200000 ;IS IT LEFT HALF + JRST FIXWL +IFN MONLOD,<TLNN V,100000 ;SKIP IF USING @X TO FIX SYMBOL TABLE + PUSHJ P,DICHK ;MAKE SURE ADDRESS IN V IS IN CORE> + MOVE T,@X ;GET WORD + ADD T,W ;VALUE OF GLOBAL + HRRM T,@X ;FIX WITHOUT CARRY +IFN MONLOD,<TLNN V,100000 ;SKIP IF JUST FIXED SYMBOL TABLE + TLO N,WOSW ;SET FLAG TO WRITE OUT BUFFER> + MOVSI D,200000 ;SET UP TO REMOVE DEFERED INTERNAL IF THERE + JRST SYMFIX + FIXWL: HRLZ T,W ;UPDATE VALUE OF LEFT HALF +IFN MONLOD,<TLNN V,100000 ;SKIP IF USING @X TO FIX SYMBOL TABLE + PUSHJ P,DICHK ;MAKE SURE ADDRESS IN V IS IN CORE> + ADDM T,@X ;BY VALUE OF GLOBAL +IFN MONLOD,<TLNN V,100000 ;SKIP IF JUST FIXED SYMBOL TABLE + TLO N,WOSW ;SET FLAG TO WRITE OUT BUFFER> + MOVSI D,400000 ;LEFT DEFERED INTERNAL +SYMFIX: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + POPJ P, ;NO, RETURN + ADDI V,(X) ;GET THE LOCATION +SYMFX1: MOVE T,-1(V) ;GET THE SYMBOL NAME + TLNN T,40000 ;CHECK TO SEE IF INTERNAL + POPJ P, ;NO, LEAVE + ANDCAB D,-1(V) ;REMOVE PROPER BIT + TLNE D,600000 ;IS IT STILL DEFERED? + POPJ P, ;YES, ALL DONE + EXCH C,D ;NO, CHECK FOR A REQUEST FOR IT + PUSHJ P,SREQ + JRST CHNSYM ;YES, WILL HAVE TO CALL THE FIXUP ROUTINE + MOVE C,D ;GET C BACK + POPJ P, +CHNSYM: PUSH P,D ;HAS THE OLD C IN IT + PUSH P,W ;WE MAY NEED IT LATER + MOVE W,(V) ;GET VALUE + PUSHJ P,SYM2B ;CALL THE FOUND GLOBAL TO MATCH REQUEST ROUTINE + POP P,W + POP P,C ;RESTORE FOR CALLER + POPJ P, ;AND GO AWAY + +SYM2W: IFN B11SW,< + TLNE V,40000 ;CHECK FOR POLISH + JRST POLSAT> + TLNN V,100000 ;SYMBOL TABLE? + JRST SYM2WA + ADD V,HISTRT ;MAKE ABSOLUTE + SUBI V,(X) ;GET READY TO ADD X + PUSHJ P,FIXW1 + JRST SYM2W1 +SYM2WA: PUSHJ P,FIXW ;DO FIXUP + JRST SYM2W1 ;AND LOOK FOR MORE REQUESTS + +;END WFW PATCH + ;PATCH VALUES INTO CHAINED REQUEST + +SYM4: IFN L,<CAMGE V,RINITL + POPJ P,> +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> +IFN MONLOD,<PUSHJ P,DICHK ;MAKE SURE ADDRESS IN V IS IN CORE> + HRRZ T,@X ;LOAD NEXT ADDRESS IN CHAIN + HRRM W,@X ;INSERT VALUE INTO PROGRAM +IFN MONLOD,<TLO N,WOSW ;SET FLAG TO WRITE OUT BUFFER> + MOVE V,T +SYM4A: JUMPN V,SYM4 ;JUMP IF NOT LAST ADDR. IN CHAIN + POPJ P, + +IFE K,< +MVDWN: HRRZ T,MLTP +IFN EXPAND,< SUBI T,2> + CAIG T,(H); ANY ROOM LEFT? +IFN EXPAND,< JRST [PUSHJ P,XPAND> + TLOA F,FULLSW +IFN EXPAND,< JRST MVDWN + POPJ P,]> + TLNE F,SKIPSW+FULLSW + POPJ P, ; ABORT BLT + HRREI T,-2 + ADDM T,PLTP; ADJUST PROGRAMMER LABEL POINTER + ADDM T,BITP; AND BIT TABLE POINTER + ADDM T,SDSTP; FIRST DATA STATEMENT + ADDM T,LTC + ADDM T,ITC + TLNE N,SYDAT + ADDM T,V + ADDB T,MLTP; AND FINALLY TO MADE LABEL TABLE + HRLS T; SET UP BLT POINTER + ADD T,[XWD 2,0] + BLT T,(S) + POPJ P, +> +REMSYM: MOVE T,1(S) + MOVEM T,1(A) + MOVE T,2(S) + MOVEM T,2(A) + CAIN S,A ;MOVING TO SELF? + JRST REMSY1 ;YES, DON'T CLEAR + SETZM 1(S) ;CLEAR NAME + SETZM 2(S) ;CLEAR POINTER +REMSY1: ADD S,SE3 + POPJ P, + + SUBTTL HIGH-SEGMENT (BLOCK TYPE 3) +;THIS PROGRAM IS INTENDED FOR HI SEGMENT IF RUNNING ON A PDP-10. +; THIS BLOCK TYPE OCCURS AFTER ENTRY AND NAME BLOCKS. + +HISEG: HRRZ C,W ;GET WORD COUNT + PUSHJ P,WORD ;GOBBLE UP BYTE WORD. + PUSHJ P,WORD ;GET THE HIGH SEG OFSET + SOJE C,.+4 ;FINISHED IF NOT FORTRAN-10 + MOVE C,W ;SAVE HIGH INFO + PUSHJ P,WORD ;GET LOW BREAK + EXCH W,C ;SWAP BACK +IFE REENT,<HISEG2==LOAD1A + JUMPGE W,LOAD1A ;NOT TWO SEG PROG.> +IFN REENT,<JUMPE W,HISEG2 ;IGNORE ZERO +IFE TENEX,<JUMPG W,HISEG3 ;NEG. IF TWOSEG PSEUDO-OP> +IFN TENEX,<TLNN W,-1 + JRST HISEG3> +>;END OF IFN REENT + TRO F,TWOFL ;SET FLAG +IFN REENT,< + TRNE F,NOHI!NOHI6 ;TWO SEGMENTS LEGAL? + JRST ONESEG ;LOAD AS ONE SEGMENT +HISEG3: HRRZ D,W ;GET START OF HISEG + JUMPE D,.+2 ;NOT SPECIFIED + PUSHJ P,HCONT ;AS IF /H +HISEG2: PUSHJ P,HISEG1 + JRST LOAD1 ;GET NEXT BLOCK +FAKEHI: ;AS IF BLOCK TYPE 3 +HISEG1: TRNE F,NOHI!NOHI6 ;LOAD REENT? + POPJ P, + TLOE F,HIPROG ;LOADING HI PROG + POPJ P, ;IGNORE 2'ND HISEG + TRON F,SEENHI ;HAVE WE LOADED ANY OTHER HI STUFF? + PUSHJ P,SETUPH ;NO,SET UP HI SEG. + MOVEM R,LOWR + MOVE R,HIGHR + MOVE X,NAMPTR ;GET THE POINTER TO PROGRAM NAME + HRRM R,2(X) ;CALL THIS THE START OF THE PROGRAM + MOVE X,HIGHX + POPJ P, + +SETUPH: MOVE X,HVAL1 + CAIGE X,-1 ;SEE IF IT HAS BEEN CHANGED FROM ORIG + JRST SEENHS ;YES, MUST HAVE SEEN /H + MOVEI X,400000 + MOVEM X,HVAL1 + CAIG X,(H) ;HAVE WE RUN OVER WITH THE LOW SEG + JRST COROVL + ADDI X,.JBHDA + HRLI X,W + MOVEM X,HVAL +SEENHS: MOVE X,HVAL + MOVEM X,HIGHR + HRRZ X,.JBREL + SUB X,HVAL1 + ADDI X,1 + HRLI X,V + MOVEM X,HIGHX + POPJ P, + + SETSEG: TRZ F,NOHI!SEGFL ;ALLOW HI-SEG + JUMPL D,.+2 ;/-H TURNS OFF NOHI ONLY + TRO F,SEGFL ;/1H FORCES HI + POPJ P, +> + +ONESEG: HLRZ D,W ;GET LENGTH OF HISEG + SUBI D,(W) ;REMOVE OFSET + JUMPLE D,ONELOW ;LENGTH NOT AVAILABLE + MOVEM R,LOWR ;SAVE LOW SEGMENT RELOCATION + ADDM D,LOWR ;ADD TO LOW SEG RELOCATION + HRRZM W,HVAL1 ;SO RELOC WILL WORK + JRST LOAD1 ;GET NEXT BLOCK + +ONELOW: HLRZ D,C ;TRY LOW SEG BREAK + SUBI D,(C) + JUMPLE D,TWOERR ;NOT AVAILABLE + MOVEM R,LOWR ;SAVE CURRENT BREAK + ADD R,D ;ADD LOW LENGTH + HRRZM W,HVAL1 ;SO RELOC WILL WORK + JRST LOAD1 + +TWOERR: ERROR 7,</TWO SEGMENTS ILLEGAL#/> +IFE L,< JRST LDRSTR> +IFN L,< JRST LOAD1> + SUBTTL HIGHEST RELOCATABLE POINT (BLOCK TYPE 5) + +HIGH0: CAIE A,4 ; TEST FOR END BLOCK (OVERLAP) + JRST LIB30 + +HIGH: TRNN F,TWOFL ;IS THIS A TWO SEGMENT PROGRAM? + JRST HIGH2A ;NO +HIGH2: PUSHJ P,RWORD ;GET HISEG BREAK + TRZ F,TWOFL ;CLEAR FLAG NOW +IFE REENT,<MOVE R,LOWR + JRST HIGH2A> +IFN REENT,<TRNE F,NOHI!NOHI6 ;SINGLE SEGMENT LOAD? + JRST [MOVE R,LOWR ;YES,GET LARGER RELOC + CAILE W,(R) ;IF FORTRAN-10 + SKIPA C,W ;HISEG CODE IS ON TOP + SETZ C, ;OTHERWISE ZERO ABS VALUE + MOVE W,HVAL ;ORIGINAL VALUE + MOVEM W,HVAL1 ;RESET + PUSHJ P,RWORD ;GET LOW SEG BREAK IN W + CAMGE C,W ;PUT LARGER VALUE + MOVE C,W ;IN C + JRST HIGH2B] ;CONTINUE AS IF LOW ONLY + HRR R,W ;PUT BREAK IN R + CAMLE R,HVAL + MOVEM R,HVAL + MOVEM R,HIGHR + MOVE R,LOWR ;NEXT WORD IS LOW SEG BREAK + TLZ F,HIPROG ;CLEAR HIPROG + PUSHJ P,PRWORD ;GET WORD PAIR + HRR R,C ;GET LOW SEG BREAK + MOVEM R,LOWR ;SAVE IT + MOVE R,HIGHR ;GET HIGH BREAK + JRST HIGHN3 ;AND JOIN COMMON CODE> + + HIGH2A: PUSHJ P,PRWORD ;READ TWO DATA WORDS. +HIGH2B: IFN REENT,< + TLZE F,HIPROG + JRST HIGHNP> +IFN WFWSW,<ADD C,VARLNG ;IF LOW SEG THEN VARIABLES GO AT END> +IFN ALGSW,<ADD C,OWNLNG ;ADD IN LENGTH OF OWN BLOCK> +IFN COBSW,<ADD C,LOD37. ;ADD IN LOCAL SYMBOLS + SKIPE LOD37. ;BUT WERE THERE ANY? + SUBI C,3 ;YES SO REMOVE THE 3 WORDS OVERWRITTEN> +IFE TENEX,<CAMGE C,W ;CHECK 2ND WORD (LOC PROG BRK IF PRESENT) + MOVE C,W> + HRR R,C ;SET NEW PROGRAM BREAK +HIGH31: MOVEM R,LOWR ;SAVE NEW VALUE OF R +IFN MONLOD,<TLNN N,DISW ;SKIP IF LOADING TO DISK> + ADDI C,(X) + CAIG H,(C) + MOVEI H,(C) ;SET UP H +IFN MONLOD,<TLNE N,DISW ;LOADING TO DISK? + JRST HIGH3 ;YES, DON'T WORRY ABOUT EXCEEDING CORE> + CAILE H,1(S) ;TEST PROGRAM BREAK +IFN EXPAND,<PUSHJ P,[ PUSHJ P,XPAND + POPJ P, + JRST POPJM2]> +IFE EXPAND,<TLO F,FULLSW> +HIGH3: MOVEI A,F.C + BLT A,B.C +IFN REENT,<TRNE F,NOHI!NOHI6 ;ONE SEGMENT PROGRAM? + JRST HIGHN4 ;YES + HRRZ W,LOWR ;GET LOW PROG BREAK + HRL W,HIGHR ;GET HIGH PROG BREAK + SETZ C, ;ZERO SYMBOL NAME + PUSHJ P,SYM1B ;PUT IN SYMBOL TABLE + MOVEM S,F.C+S ;SAVE NEW S AND B + MOVEM B,F.C+B ;INCASE OF ERROR +HIGHN4:> + TRZE N,F10TFL ;FORTRAN-10 SET NOHI? + TRZ F,NOHI ;YES, CLEAR IT + SETZM SBRNAM ;RELAX, RELOCATION BLOCK FOUND + TLNE F,SLIBSW+LIBSW ;NORMAL MODE EXIT THROUGH LOAD1 + JRST LIB ;LIBRARY SEARCH EXIT + JRST LOAD1 + IFN REENT,< +HIGHNP: HRR R,C + CAMG W,HVAL1 ;ABS. ADDRESS IN HIGH SEGMENT? + JRST HIGHN1 ;NO + CAIG C,(W) ;YES, GREATER THAN CURRENT HISEG RELOC? + HRR R,W ;YES, USE IT + SETZ W, ;DON'T USE IT AGAIN +HIGHN1: CAMLE R,HVAL + MOVEM R,HVAL + MOVEM R,HIGHR +HIGHN3: PUSH P,W ;SAVE W,CONTAIN HIGHEST ABSOLUTE ADDRESS + ADD W,LOWX ;LOC PROG BRK + CAIGE H,(W) ;CHECK FOR TOP OF LOW CORE + MOVEI H,(W) + POP P,W ;RESTORE + CAML H,HVAL1 + JRST COROVL ;OVERFLOW OF LOW SEGMENT +HIGHN2: HRRZ R,HVAL + SUB R,HVAL1 + ADD R,HISTRT + CAMLE R,.JBREL + JRST [PUSHJ P,HIEXP + JRST FULLC + JRST HIGHN2] + MOVE R,LOWR + MOVE X,LOWX +IFN WFWSW,<ADD R,VARLNG ;VARIABLES IN LOW SEG> +IFN ALGSW,<ADD R,OWNLNG ;OWN BLOCK IN LOW SEGMENT> +IFN COBSW,<ADD R,LOD37. ;ADD IN LOCAL SYMBOLS + SKIPE LOD37. ;BUT WERE THERE ANY? + SUBI R,3 ;YES SO REMOVE THE 3 WORDS OVERWRITTEN> + HRRZ C,R + CAIGE C,(W) ;IS ABSOLUTE LOCATION GREATER + HRR R,W ;YES USE IT + HRRZ C,R ;SET UP C AGAIN + JRST HIGH31 ;GO CHECK PROGRAM BREAK +> +SFULLC: TROE F,SFULSW ;PREVIOUS OVERFLOW? + JRST FULLC ;YES, DON'T PRINT MESSAGE + ERROR ,<?SYMBOL TABLE OVERLAP#?> +FULLC: +IFE K,< TLNE N,F4SW + POPJ P,> + JRST LIB3 ;LOOK FOR MORE + SUBTTL EXPAND HIGH SEGMENT + +IFN REENT,< +HIEXP: TLNE F,FULLSW + POPJ P, +IFN EXPAND,<PUSH P,Q> + PUSH P,H + PUSH P,X + PUSH P,N +IFE K,<HRRZ X,MLTP + TLNN N,F4SW> + MOVEI X,1(S) + HRRZ N,X + SUB N,H + CAILE N,1777 + JRST MOVHI +IFE EXPAND,<POPJ P,> +IFN EXPAND,<HRRZ N,.JBREL + ADDI N,2000 + CAMG N,ALWCOR + CORE N, + JRST XPAND6 + POP P,N + JRST XPAND3> + +MOVHI: MOVEI N,-2000(X) + HRL N,X + HRRZ X,.JBREL + BLT N,-2000(X) + MOVNI H,2000 +IFN EXPAND,<JRST XPAND8> +IFE EXPAND,<ADDM H,HISTRT + ADDM H,S + ADDM H,B + ADDM H,HIGHX + TLNE F,HIPROG + ADDM H,-1(P) + POP P,N + ADDM H,NAMPTR ;ADJUST POINTER TO NAME +IFE K,< TLNN F4SW + JRST HIXP1 + ADDM H,PLTP + ADDM H,BITP + ADDM H,SDSTP + ADDM H,MLTP + TLNE N,SYDAT + ADDM H,V +HIXP1:> + POP P,X + POP P,H + AOS (P) + POPJ P,> +> + SUBTTL PROGRAM NAME (BLOCK TYPE 6) + +NAME: SKIPE SBRNAM ;HAVE WE SEEN TWO IN A ROW? + JRST NAMERR ;YES, NO END BLOCK SEEN +NAME0: PUSHJ P,PRWORD ;READ TWO DATA WORDS + MOVEM C,SBRNAM ;SAVE SUBROUTINE NAME +IFN MANTIS,<CAMN C,[RADIX50 0,MANTIS] + CAME R,[W,,.JBDA] ;YES, BUT IS IT TO LOAD AT 140? + CAIA ;NO, NOT A DEBUG /MANTIS COMMAND + TRO N,MANTFL ;HAVE SEEN MANTIS NOW> +NCONT: HLRZ V,W ;GET COMPILER TYPE + ANDI V,7777 ;BITS 6-17 + CAILE V,CMPLEN ;ONLY IF LEGAL TYPE + SETZ V, ;MAKE DEFAULT + HLL V,W ;GET CPU TYPE ALSO + TLZ V,7777 ;BITS 0-5 + HRRZS W ;CLEAR TYPE + XCT CMPLER(V) ;DO SPECIAL FUNCTION + TLOE N,COMFLG ;SKIP IF COMMON NOT PREV. SET + JRST NAME1 ;SIZE OF COMMON PREV. SET + MOVEM W,COMSAV ;STORE LENGTH OF COMMON + JUMPE W,NAME2 ;JUMP IF NO COMMON IN THIS JOB + HRRI R,@R ;FIRST PROGRAM SET LOAD ORIGIN +NAME1: IFN MONLOD,<TLNE N,DISW ;LOADING TO DISK? + PUSHJ P,SIZCHK ;YES, CHECK FOR OVERLAP> + CAILE H,-1(S) ;TEST FOR AVAIL. SYMBOL SPACE +IFN EXPAND,< PUSHJ P,XPAND7> +IFE EXPAND,< JRST SFULLC> + SUBI S,2 ;UPDATE UNDEF. TABLE POINTER + POP B,2(S) + POP B,1(S) + EXCH N,NAMPTR ;GET NAME POINTER, SAVE N + HRRZ V,N ;POINTER TO PREVIOUS NAME + SUBM B,V ;COMPUTE RELATIVE POSITIONS + HRLM V,2(N) ;STORE FORWARD POINTER + HRRZ N,B ;UPDATE NAME POINTER + EXCH N,NAMPTR ;SWAP BACK +NAME2: MOVEM C,1(B) ;STORE PROGRAM NAME + HRRZM R,2(B) ;STORE PROGRAM ORIGIN +IFN SYMDSW,<PUSH P,W ;SAVE W + HRRZ W,R ;ORIGIN + PUSHJ P,SYM1X ;PUT IN DSK FILE ALSO + POP P,W> + CAMG W,COMSAV ;CHECK COMMON SIZE +IFE REENT,<JRST LIB3 ;COMMON OK> +IFN REENT,<JRST [TRNE F,SEGFL ;LOAD LOW IN HI-SEG + PUSHJ P,FAKEHI ;YES + JRST LIB3]> + SKIPA C,COMM +ILC: MOVE C,1(A) ;NAME + PUSH P,C ;SAVE COMMON NAME + ERROR ,</ILL. COMMON !/> + POP P,C + PUSHJ P,PRNAME +ILC1: SKIPN SBRNAM + JRST ILC2 + ERROR 0,</ PROG. !/> + MOVE C,SBRNAM ;RECOVER SUBROUTINE NAME + PUSHJ P,PRNAME +ILC2: ERROR 0,</ #/> + JRST LD2 + +NAMERR: TLNE F,FULLSW ;IF NOT ENUF CORE + JRST NAME0 ;END BLOCK IS NEVER SEEN + SETZM DTIN ;CLEAR WRONG FILE NAME FOR MESSAGE + ERROR ,</NO END BLOCK !/> + JRST ILC1 + + ;COMPILER TYPE - DO SPECIAL FUNCTION FOR IT + +CMPLER: + JFCL ; 0 UNKNOWN + PUSHJ P,F40NAM ; 1 FORTRAN (F40) + TRO N,COBFL!VFLG ; 2 COBOL + PUSHJ P,ALGNAM ; 3 ALGOL-60 + TRO N,NELFL ; 4 NELIAC + TRO N,PL1FL ; 5 PL/1 + TRO N,BLIFL ; 6 BLISS-10 + TRO N,SAIFL ; 7 SAIL + PUSHJ P,FORNAM ;10 FORTRAN-10 + ;11 MACRO + ;12 FAIL +CMPLEN==.-CMPLER + + + +F40NAM: TRNE N,FORFL ;CANNOT MIX OLD & NEW + JRST F40ERR + TRO N,F4FL!VFLG ;SET FLAGS +IFE ALGSW,<ALGNAM:;PUT LABEL ON A POPJ> + POPJ P, + +FORNAM: TRNE N,F4FL ;CANNOT MIX OLD & NEW + JRST F40ERR + TRO N,FORFL!VFLG +IFN FORSW,<SKIPG FORLIB ;IF NOT SET FOR FOROTS + AOS FORLIB ;DO SO> + HLLZ V,V ;SEE IF ANY CPU BITS + ROT V,6 ;PUT IN BITS 30-35 + CAILE V,2 ;ONLY 0, 1, 2 VALID + SETZ V, ;DEFAULT + PUSHJ P,@[EXP CPOPJ,FORNMA,FORNMI](V) +IFN REENT,<SKIPL VSW ;USER DOES N'T WANT REENT OTS? + TRNE F,NOHI!SEGFL!SEENHI ;USER SET SEGMENT OR HI CODE SEEN? + POPJ P,> ;YES + TRO F,NOHI ;DEFAULT IS ONE SEG + TRO N,F10TFL ;BUT ONLY FOR THIS FILE +IFN FORSW,<HRRZM F,FORLIB> ;SET FOROTS BY DEFAULT (FORLIB .GT. 0) + POPJ P, + +FORNMI: TRNE N,KA10FL ;CANNOT MIX KA & KI + JRST FORERR + TRO N,KI10FL ;SET FLAGS + POPJ P, + +FORNMA: TRNE N,KA10FL ;CANNOT MIX KA & KI + JRST FORERR + TLO N,KA10FL + POPJ P, + +F40ERR: ERROR ,</CANNOT MIX F40 AND FORTRAN-10 COMPILED CODE@/> +FORERR: ERROR ,</CANNOT MIX KA10 AND KI10 FORTRAN-10 COMPILED CODE@/> + +IFN ALGSW,< +ALGNAM: TRO N,ALGFL!VFLG ;SET ALGOL SEEN, AND DEFAULT REENT OPSYS + JUMPE W,CPOPJ ;NOT ALGOL MAIN PROGRAM +IFN NAMESW,< + PUSH P,C ;SAVE NAME + MOVE W,C ;EXPECTS NAME IN W + PUSHJ P,LDNAM ;USE THIS A PROGRAM NAME + POP P,C ;RESTORE C> + SETZ W, ;CLEAR COMMON SIZE, ONLY A MARKER + POPJ P, ;RETURN +> + SUBTTL STARTING ADDRESS (BLOCK TYPE 7) + + +START: PUSHJ P,PRWORD ;READ TWO DATA WORDS + TLNN N,ISAFLG ;SKIP IF IGNORE SA FLAG ON + HRRZM C,STADDR ;SET STARTING ADDRESS +IFN NAMESW,< + MOVE W,DTIN ;PICK UP BINARY FILE NAME + TLNN N,ISAFLG + MOVEM W,PRGNAM ;SAVE IT + MOVE W,NAMPTR ;GET NAME POINTER + MOVE W,1(W) ;SET UP NAME OF THIS PROGRAM +IFE ALGSW,<TLNN N,ISAFLG ;DONT SET NAME IF IGNORING SA'S> +IFN ALGSW,<TDNN N,[ISAFLG,,ALGFL] ;OR ALGOL LOADING> + PUSHJ P,LDNAM> + PUSHJ P,PRWORD ;**OBSCURE RETURN TO LOAD1** + +IFN REENT,< +RESTRX: TLNE F,HIPROG + SKIPA X,HIGHX + MOVE X,LOWX + POPJ P,> + SUBTTL ONE PASS LOCAL DEFINITION (BLOCK TYPE 10) + + ;PMP PATCH FOR LEFT HALF FIXUPS +IFN FAILSW!B11SW!WFWSW,< +LOCDLH: IFN L,<CAMGE V,RINITL + POPJ P,> +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> +IFN MONLOD,<PUSHJ P,DICHK> + HLRZ T,@X ;LOAD NEXT ADDRESS IN CHAIN + HRLM W,@X ;INSERT VALUE INTO PROGRAM + MOVE V,T +LOCDLF: JUMPN V,LOCDLH ;JUMP IF NOT LAST ADDR. IN CHAIN + POPJ P,> +IFN FAILSW,< +LOCDLI: PUSHJ P,LOCDLF +IFN REENT,<PUSHJ P,RESTRX> + AOSA LFTHSW ;TURN OFF LEFT HALF FIX SW (WAS -1) AND SKIP +LOCDLG: SETOM LFTHSW ;TURN ON LEFT HALF FIX SW> + ;END PMP PATCH +LOCD: PUSHJ P,RWORD ;READ ONE DATA WORD + HLRZ V,W ;STORAGE POINTER IN LEFT HALF +IFN FAILSW,< + SKIPE LFTHSW ;LEFT HALF CHAINED? PMP + JRST LOCDLI ;YES PMP + CAMN W,[-1] ;LEFT HALF NEXT? PMP + JRST LOCDLG ;YES, SET SWITCH PMP> + PUSHJ P,SYM4A ;LINK BACK REFERENCES +IFN REENT,<PUSHJ P,RESTRX> + JRST LOCD + SUBTTL LVAR FIX-UP (BLOCK TYPE 13) +IFN WFWSW,< +LVARB: PUSHJ P,PRWORD ;THE FIRST TWO WORDS IN THE BLOCK + MOVEM W,VARLNG ;AR SPECIAL. SECOND IS LENGTH OF VARIABLES +IFN REENT,< TLNE F,HIPROG + MOVE C,LOWR ;USE LOW RELOC IF LOADING HI SEG> + ;ELSE C HAS RELOC FOR THIS PROGRAM, USE IT + HRRZM C,VARREL ;THIS IS LOCATION 0 OF VARIABLE AREA +LVLP: PUSHJ P,PRWORD ;THINGS COME IN PAIRS + TLNE C,200000 ;BIT ON IF SYMBOL TABLE FIXUP + JRST LVSYM + HLRZ V,W ;NO GET LOC FROM LEFTH HALF OF SECOND + ADD W,VARREL ;AND RELOCATE VARIABLE + TLNE C,400000 ;ON FOR LEFT HALF + JRST [PUSHJ P,LOCDLF ;TAKE CARE OF IT +IFN REENT,< JRST LVLCOM] ;RESET X> +IFE REENT,< JRST LVLP] ;MUST BE LOW SEG X OK> + PUSHJ P,SYM4A ;RIGHT HALF CHAIN +IFN REENT,<LVLCOM: PUSHJ P,RESTRX> + JRST LVLP +LVSYM: MOVE V,B ;GET SYMBOL TABLE POINTER + ADD C,VARREL ;VALUE IS IN FIRST WORD FOR THESE + TLZ W,740000 ;MAKE SURE NO BITS ON + ADDI V,2 ;CORRECT POINTER TO SYMBOL TABLE +SRSYM: MOVE A,-1(V) ;GET A NAME + TLZN A,740000 ;CHECK FOR PROGRAM NAME + JRST LVLP ;LEAVE (PROBABLY A NON-LOADED LOCAL) + CAMN A,W ;IS IT THE RIGHT ONE?? + JRST LVSYMD ;YES + ADD V,SE3 ;CHECK NEXT ONE + JUMPL V,SRSYM ;BUT ONLY IF SOME ARE THERE + JRST LVLP ;GIVE UP +LVSYMD: TLNE C,400000 ;WHICH HALF?? + JRST LVSYML ;LEFT + ADD C,(V) ;ADDITIVE FIXUP + HRRM C,(V) + MOVSI D,200000 ;DEFERED BITS +LVSM1: PUSHJ P,COMSFX ;GO TAKE CARE OF IT + JRST LVLP ;NEXT PLEASE +LVSYML: HRLZS C + ADDM C,(V) ;WE DON'T HAVE TO WORRY ABOUT OVERFLOW HERE + MOVSI D,400000 ;LEFT DEFERED BITS + JRST LVSM1 ;GO WORRY ABOUT DEFERED INTERNALS> + SUBTTL FAIL LOADER +;ONLY LIST IF POLISH FIXUPS REQUIRED + XLIST +IFN FAILSW!B11SW,<LIST> +REPEAT 0,<IF POLISH FIXUPS CONTAIN GLOBAL REQUESTS WHICH +CAN NOT BE SATISFIED WHEN THEY ARE SEEN, THEY MUST BE +SAVED UNTIL THESE GLOBAL SYMBOLS BECOME DEFINED. +THE POLISH FIXUP IS SAVED IN THE UNDEFINED TABLE (POINTED +TO BY S). THE FIXUP IS SAVED IN TWO WORD BLOCKS THE FIRST +WORD OF WHICH (THE ONE WHICH WOULD NORMALL CONTAIN THE SYMBOL) +HAS SPECIAL BITS ON SO IT WILL NOT BE FOUND BY A SEARCH FOR +A GLOBAL REQUEST. SINCE THE UNDEFINED TABLE MAY BE +SHUFFELED INTO A RANDOM ORDER, IT IS NOT POSSIBLE TO KEEP +ALL OF A POLISH FIXUP TOGETHER OR TO HAVE POINTERS IN +THE USUAL SENCE FROM ONE TWO WORD BLOCK TO ANOTHER. +SUFFICIENT INFORMATION IS THEREFORE GIVEN TO DETERMINE +WHAT THE FIRST WORD OF THE NEXT DESIRED BLOCK IS AND THIS +BLOCK IS FOUND BY SEARCHING THE UNDEFINED TABLE FOR A MATCH. +EACH POLISH FIXUP WHICH IS ENTERED INTO THE UNDEFINED +TABLE IS GIVEN A UNIQUE NUMBER CALLED THE "HEAD NUMBER". +EACH ELEMENT OF THE FIXUP (EITHER OPERAND OR OPERATOR) +IS ASSIGNED A NUMBER CALLED THE "OP NUMBER". THUS +THE OP NUMBER AND HEAD NUMBER TOGETHER DETERMINE +A SPECIFIC ELEMENT OF A SPECIFIC FIXUP. EACH ELEMENT +(TWO WORD BLOCK) IS ARRANGED AS FOLLOWS: +WORD 1: + BITS 0-4 THESE ARE THE USUAL CODE BITS OF A RADIX50 + SYMBOL AND CONTAIN 44 TO DISTINGUISH + AN ELEMENT OF A POLISH FIXUP FROM OTHER + SYMBOLS IN THE UNDEFINED TABLE + BITS 5-17 THE HEAD NUMBER OF THIS FIXUP + BITS 18-30 THE OP NUMBER OF THIS ELEMENT + BITS 31-35 THE OPERAND FOR THIS ELEMENT + OPERAND 2 INDICATES A WORD OF DATA +WORD 2: + IF THE OPERAND IS 2 THIS WORD CONTAINS THE DATA + + IF THIS IS NOT A DATA OPERATOR THEN THE LEFT AND + RIGHT HALVES OF THIS WORD POINT TO THE TWO OPERANDS + THE CONTENTS OF THE HALF WORD IS THE RIGHT HALF + OF THE FIRST WORD OF THE BLOCK POINTED + TO. THUS THE LEFT HALF OF THE FIRST WORD COMBINED + WITH ONE OF THESE HALF WORDS IS THE FIRST WORD + OF THE BLOCK POINTED TO AND CAN BE FOUND BY SEARCHING + + EACH FIXUP ALSO HAS A HEADER BLOCK. THIS BLOCK CONTAINS THE +FOLLOWING INFORMATION: +WORD 1: + BITS 0-17 0 + BITS 18-21 44 + BITS 22-35 THE HEAD NUMBER OF THIS FIXUP + +WORD 2: + BITS 0-17 A COUNT OF THE NUMBER OF UNDEFINED + GLOBALS REMAINING IN THIS FIXUP + BITS 18-35 A HALF WORD POINTER OF THE + SAME TYPE FOUND IN OTHER ELEMENTS POINTING + TO THE FIRST ELEMENT OF POLISH + WHICH WILL BE THE STORE OPERATOR + +THE REQUESTS FOR THE GLOBAL SYMBOLS NEEDED BY THE FIXUP ARE +ENTERED AS FOLLOWS: + +WORD 1: + BITS 0-4 04 + BITS 5-35 RADIX 50 FOR THE NAME OF THE SYMBOL +(NOTE THIS IS JUST A STANDARD GLOBAL REQUEST) + +WORD 2: + BITS 0-4 44 (THIS IDENTIFIES IT AS "ADITIVE TYPE" + AND BIT 4 INDICATES POLISH) + BITS 5-17 THE HEAD NUMBER OF THE FIXUP + (THIS GIVES ENOUGH INFORMATION TO FIND THE HEADER + BLOCK AND UPDATE THE COUNT WHEN THE REQUEST IS + SATISFIED) + BITS 18-35 A HALF WORD POINTER TO THE ELEMENT OF THE + FIXUP INTO WHICH THE VALUE OF + THE SYMBOL SHOULD BE STORED +> + IFN FAILSW!B11SW,< +;POLISH FIXUPS <BLOCK TYPE 11> + +PDLOV: SKIPE POLSW ;PDL OV ARE WE DOING POLISH? + JRST COMPOL ;YES + ERROR ,</PUSHDOWN OVERFLOW#/> + JRST LD2 +COMPOL: ERROR ,</POLISH TOO COMPLEX#/> + JRST LD2 + + +;READ A HALF WORD AT A TIME + +RDHLF: TLON N,HSW ;WHICH HALF + JRST NORD + PUSHJ P,RWORD ;GET A NEW ONE + TLZ N,HSW ;SET TO READ OTEHR HALF + MOVEM W,SVHWD ;SAVE IT + HLRZS W ;GET LEFT HALF + POPJ P, ;AND RETURN +NORD: HRRZ W,SVHWD ;GET RIGHT HALF + POPJ P, ;AND RETURN + + +POLFIX: MOVE D,[IOWD PPDL,PPDB] ;SET UP THE POLISH PUSHDOWN LIST + MOVEI V,100 ;IN CASE OF ON OPERATORS + MOVEM V,SVSAT + SETOM POLSW ;WE ARE DOING POLISH + TLO N,HSW ;FIX TO READ A WORD THE FIRST TIME + SETOM GLBCNT ;NUMBER OF GLOBALS IN THIS FIXUP + SETOM OPNUM ;NUMBER OF OPERANDS AND OPERATORS THIS FIXUP + PUSH D,[15] ;FAKE OPERATOR SO STORE WILL NOT HACK + +RPOL: PUSHJ P,RDHLF ;GET A HLAF WORD + TRNE W,400000 ;IS IT A STORE OP? + JRST STOROP ;YES, DO IT +IFN WFWSW,<CAIN W,15 + JRST [PUSHJ P,RDHLF ;THIS TRICK FOR VARIABLES + ADD W,VARREL ;HOPE SOMEONE HAS DONE + HRRZ C,W ;A BLOCK TYPE 13 + JRST HLFOP]> + CAIGE W,3 ;0,1,2 ARE OPERANDS + JRST OPND + CAILE W,14 ;14 IS HIGHEST OPERATOR + JRST LOAD4A ;ILL FORMAT + PUSH D,W ;SAVE OPERATOR IN STACK + MOVE V,DESTB-3(W) ;GET NUMBER OF OPERANDS NEEDED + MOVEM V,SVSAT ;ALSO SAVE IT + JRST RPOL ;BACK FOR MORE + + ;HANDLE OPERANDS. THIS GETS COMPLICATED BECAUSE OF THE PRESENCE OF +;GLOBAL REQUESTS + +OPND: MOVE A,W ;GET THE OPERAND TYPE HERE + PUSHJ P,RDHLF ;THIS IS AT LEAST PART OF THE OPERAND + MOVE C,W ;GET IT INTO C + JUMPE A,HLFOP ;0 IS HALF-WORD OPERAND + PUSHJ P,RDHLF ;NEED FULL WORD, GET SECOND HALF + HRL C,W ;GET HALF IN RIGHT PLACE + MOVSS C ;WELL ALMOST RIGHT + SOJE A,HLFOP ;1 IS FULL WORD, 2 IS GLOBAL REQUEST + PUSHJ P,SDEF ;SEE IF IT IS ALREADY DEFINED + JRST [MOVE C,2(A) ;YES, WE WIN + JRST HLFOP] + AOSN GLBCNT ;NO, INCREMENT NUMBER OF GLOBALS THIS FIXUP + AOS HEADNM ;INCREMENT FIXUP NUMBER IF FIRST GLOBAL + AOS W,OPNUM ;GET AN OPERAND NUMBER + LSH W,5 ;SPACE FOR TYPE + IORI W,2 ;TYPE 2 IS GLOBAL + HRL W,HEADNM ;GET FIXUP NUMBER + PUSHJ P,SYM3X2 ;AND PUT INTO UDEFINED AREA ALONG WITH NAME + MOVE C,W ;ALSO PUT THAT PART OF THE FIXUP IN + PUSHJ P,SYM3X2 + SKIPA A,[400000] ;SET UP GLOBAL FLAG +HLFOP: MOVEI A,0 ;VALUE OPERAND FLAG +HLFOP1: SOJL V,CSAT ;ENOUGH OPERANDS SEEN? + PUSH D,C ;NO, SAVE VALUE(OR GLOBAL NAME) + HRLI A,400000 ;PUT IN A VALUE MARKER + PUSH D,A ;TO THE STACK + JRST RPOL ;GET MORE POLISH + + ;HAVE ENOUGH OPERANDS FOR THE CURRENT OPERATOR + +CSAT: HRRZS A ;KEEP ONLY THE GLOBAL-VALUE HALF + SKIPN SVSAT ;IS IT UNARY + JRST UNOP ;YES, NO NEED TO GET 2ND OPERAND + HRL A,(D) ;GET GLOBAL VALUE MARKER FOR 2ND OP + POP D,W + POP D,W ;VALUE OR GLOBAL NAME +UNOP: POP D,V ;OPERATOR + JUMPN A,GLOB ;IF EITHER IS A GLOBAL HANDLE SPECIALLY + XCT OPTAB-3(V) ;IF BOTH VALUES JUST XCT + MOVE C,W ;GET THE CURRENT VALUE +SETSAT: SKIPG V,(D) ;IS THERE A VALUE IN THE STACK + MOVE V,-2(D) ;YES, THIS MUST BE THE OPERATOR + MOVE V,DESTB-3(V) ;GET NUMBER OF OPERANDS NEEDED + MOVEM V,SVSAT ;SAVE IT HERE + SKIPG (D) ;WAS THERE AN OPERAND + SUBI V,1 ;HAVE 1 OPERAND ALREADY + JRST HLFOP1 ;GO SEE WHAT WE SHOULD DO NOW + +;HANDLE GLOBALS +GLOB: TRNE A,-1 ;IS IT IN RIGHT HALF + JRST TLHG ;NO, NEED TO PUT THIS VALUE INTO THE FIXUP LIST + PUSH P,W ;SAVE FOR A WHILE + MOVE W,C ;THE VALUE + AOS C,OPNUM ;GET AN OPERAND NUMBER + LSH C,5 ;AND PUT IN TYPE + IORI C,2 ;VALUE TYPE + HRL C,HEADNM ;THE FIXUP NUMBER + PUSHJ P,SYM3X2 + POP P,W ;RETRIEVE THE OTHER VALUE +TLHG: SKIPE SVSAT ;WAS THIS A UNARY OPERATOR + TLNE A,-1 ;WAS THERE A GLOBAL IN LEFT HALF + JRST GLSET + PUSH P,C ;SAVE THE FIRST OPERAND + AOS C,OPNUM ;SEE ABOVE + LSH C,5 + IORI C,2 + HRL C,HEADNM + PUSHJ P,SYM3X2 + MOVE W,C + POP P,C + +GLSET: EXCH C,W ;GET THEM IN THE OTHER ORDER + HRL W,C ;SET UP THE OPERATOR LINK + AOS C,OPNUM + LSH C,5 ;SPACE FOR THYPE + IOR C,V ;THE OPERATOR + HRL C,HEADNM + PUSHJ P,SYM3X2 ;INTO THE UNDEF LIST + MOVEI A,400000 ;SET UP AS A GLOBAL VALUE + JRST SETSAT ;AND SET UP FOR NEXT OPERATOR + ;FINALLY WE GET TO STORE THIS MESS + +STOROP: MOVE T,-2(D) ;THIS SHOULD BE THE FAKE OPERATOR + CAIE T,15 ;IS IT + JRST LOAD4A ;NO, ILL FORMAT + HRRZ T,(D) ;GET THE VALUE TYPE + JUMPN T,GLSTR ;AND TREAT GLOBALS SPECIAL + MOVE A,W ;THE TYPE OF STORE OPERATOR + CAIGE A,-3 + PUSHJ P,FSYMT + PUSHJ P,RDHLF ;GET THE ADDRESS + MOVE V,W ;SET UP FOR FIXUPS + POP D,W ;GET THE VALUE + POP D,W ;AFTER IGNORING THE FLAG + PUSHJ P,@STRTAB+6(A) ;CALL THE CORRECT FIXUP ROUTINE +COMSTR: SETZM POLSW ;ALL DONE WITH POLISH +IFN REENT,<PUSHJ P,RESTRX> + MOVE T,OPNUM ;CHECK ON SIZES + MOVE V,HEADNM + CAIG V,477777 + CAILE T,17777 + JRST COMPOL ;TOO BIG, GIVE ERROR + PUSHJ P,RWORD ;THIS SHOULD GET US OUT (I.E RUN OUT COUNT) + JRST LOAD4A ;IF NOT, SOMETHING IS WRONG + +STRTAB: EXP ALSYM,LFSYM,RHSYM,ALSTR,LOCDLF,SYM4A,FAKESY + +GLSTR: MOVE A,W + CAIGE A,-3 + PUSHJ P,FSYMT + PUSHJ P,RDHLF ;GET THE STORE LOCATION + MOVEI A,23(A) + POP D,V ;GET VALUE + POP D,V + HRLM V,W ;SET UP STORAGE ELEMENT + AOS C,OPNUM + LSH C,5 + IOR C,A + HRL C,HEADNM + PUSHJ P,SYM3X2 + MOVE W,C ;NOW SET UP THE HEADER + AOS V,GLBCNT ;WHICH HAS NUMBER OF GLOBALS + HRLM V,W + HRRZ C,HEADNM + PUSHJ P,SYM3X2 + JRST COMSTR ;AND FINISH + + ALSTR1: IFN L,<CAMGE V,RINITL + POPJ P,> +IFN REENT,<CAMGE V,HVAL1 + SKIPA X,LOWX + MOVE X,HIGHX> +IFN MONLOD,<PUSHJ P,DICHK> + HRRZ T,@X + MOVEM W,@X ;FULL WORD FIXUPS + MOVE V,T +ALSTR: JUMPN V,ALSTR1 + POPJ P, +DESTB: EXP 1,1,1,1,1,1,1,1,0,0,100 + +OPTAB: ADD W,C + SUB W,C + IMUL W,C + IDIV W,C + AND W,C + IOR W,C + LSH W,(C) + XOR W,C + SETCM W,C + MOVN W,C + REPEAT 7,<JRST STRSAT> + + +FSYMT: PUSHJ P,RDHLF ;FIRST HALF OF SYMBOL + HRL V,W + PUSHJ P,RDHLF + HRR V,W + PUSH D,A ;SAVE STORE TYPE + PUSHJ P,RDHLF ;GET BLOCK NAME + HRL C,W + PUSHJ P,RDHLF + HRR C,W + TLO C,140000 ;MAKE BLOCK NAME + PUSHJ P,SDEF ;FIND IT + CAMN A,B + JRST FNOLOC ;MUST NOT BE LOADING LOCALS +FSLP: LDB C,[POINT 32,-1(A),35] ;GET NAME + CAMN C,V + JRST FNDSYM + SUB A,SE3 + CAME A,B ;ALL DONE? + JRST FSLP ;NO +FNOLOC: POP D,A + MOVEI A,0 ;SET FOR A FAKE FIXUP + AOS (P) + POPJ P, +FNDSYM: MOVEI W,(A) ;LOC OF SYMBOL + SUB W,HISTRT + POP D,A + AOS (P) + POPJ P, + +LFSYM: ADD V,HISTRT + HRLM W,(V) + MOVSI D,400000 ;LEFT HALF + JRST COMSFX +RHSYM: ADD V,HISTRT + HRRM W,(V) + MOVSI D,200000 + JRST COMSFX +FAKESY: POPJ P, ;IGNORE + POLSAT: PUSH P,C ;SAVE SYMBOL + MOVE C,V ;POINTER + PUSHJ P,SREQ ;GO FIND IT + SKIPA + JRST LOAD4A ;SOMETHING IS ROTTEN IN DENMARK + MOVEM W,2(A) ;STORE VALUE + HLRZS C ;NOW FIND HEADER + PUSHJ P,SREQ + SKIPA + JRST LOAD4A + HRLZI V,-1 ;AND DECREMENT COUNT + ADDB V,2(A) + TLNN V,-1 ;IS IT NOW 0 + JRST PALSAT ;YES, GO DO POLISH + POP P,C ;RESTORE SYMBOL + JRST SYM2W1 ;AND RETURN + +PALSAT: PUSH P,W ;SAVE VALUE + MOVEM C,HDSAV ;SAVE THE HEADER NUMBER + MOVE D,[IOWD PPDL,PPDB] ;SET UP A PDL + MOVE C,V ;GET THE POINTER + HRL C,HDSAV ;AND THE FIXUP NUMBER + PUSHJ P,REMSYM ;REMOVE THE HEADER FORM EXISTANCE + PUSHJ P,SREQ ;GO FINE THE NEXT LINK + SKIPA + JRST LOAD4A ;LOSE + ANDI C,37 ;GET OPERATOR TYPE + HRRZ V,2(A) ;PLACE TO STORE + PUSH D,V + PUSH D,[XWD 400000,0] + PUSH D,C ;THIS HAD BETTER BE A STORE OR WE ARE IN TROUBLE + HLRZ C,2(A) ;GET POINTER TO POLISH CHAIN +PSAT1: PUSHJ P,REMSYM ;REMOVE SYMBOL + + PSAT2: HRL C,HDSAV ;GET FIXUP NUMBER + PUSHJ P,SREQ ;LOOK FOR IT + SKIPA + JRST LOAD4A + ANDI C,37 ;THE OPERATOR NUMBER + CAIN C,2 ;IS IT AN OPERAND? + JRST PSOPD ;YES, GO PROCESS + PUSH D,C ;YES STORE IT + SKIPN DESTB-3(C) ;IS IT UNARY + JRST PSUNOP ;YES + HLRZ C,2(A) ;GET FIRST OPERAND + HRLI C,600000 ;AND MARK AS VALUE + PUSH D,C +PSUNOP: HRRZ C,2(A) ;OTHER OPERAND + JRST PSAT1 ;AND AWAY WE GO + +PSOPD: MOVE C,2(A) ;THIS IS A VALUE + PUSHJ P,REMSYM ;GET RID OF THAT PART OF THE CHAIN +PSOPD1: SKIPG V,(D) ;IS THERE A VALUE IN THE STACK + JRST PSOPD2 ;YES, TAKE GOOD CARE OF IT +COMOP: POP D,V ;NO, GET THAT OPERATOR OUT OF THERE + XCT OPTAB-3(V) ;AND DO IT + MOVE C,W ;GET RESULT IN RIGHT PLACE + JRST PSOPD1 ;AND TRY FOR MORE +PSOPD2: TLNE V,200000 ;IS IT A POINTER + JRST DBLOP ;YES, NEEDS MORE WORK + MOVE W,C ;NO, ONE WE HAVE IS FIRST OPND, GET IT INTO W + POP D,C ;VALUE POINTER + POP D,C ;2ND OPERAND INTO C + JRST COMOP ;GO PROCESS OPERATOR + +DBLOP: EXCH C,(D) ;PUT VALUE IN STACK AND RETRIEV POINTER + PUSH D,[XWD 400000,0] ;MARK AS VALUE + JRST PSAT2 ;AND GO LOOK FOR MORE TROUBLE + + IFN FAILSW,< +;BLOCK TYPE 12 LINK +LINK: PUSHJ P,PRWORD ;GET TWO WORDS + JUMPLE C,ENDLNK ;THIS IS AN END OF LINK WORD + CAILE C,20 ;IS IT IN RANGE? + JRST LOAD4A + HRRZ V,W ;GET THE ADDRESS +IFN REENT,< + CAMGE V,HVAL1 ;CHECK HISEG ADDRESS + SKIPA X,LOWX ;LOW SEGMENT + MOVE X,HIGHX ;HIGH SEGMENT BASE +>;IF REENT +IFN MONLOD,<PUSHJ P,DICHK> + HRRZ W,LINKTB(C) ;GET CURRENT LINK +IFN L,< CAML V,RINITL ;LOSE> + HRRM W,@X ;PUT INTO CORE + HRRM V,LINKTB(C) ;SAVE LINK FOR NEXT ONE +IFN REENT,< + PUSHJ P,RESTRX ;RESTORE X +>;IF REENT + JRST LINK ;GO BACK FOR MORE +ENDLNK: MOVNS C ;GET ENTRY NUMBER + JUMPE C,LOAD4A ;0 IS A LOSER + CAILE C,20 ;CHECK RANGE + JRST LOAD4A + HRLM W,LINKTB(C) ;SAVE END OF LINK INFO + JRST LINK ;MORE + +> ;END OF IFN FAILSW + STRSAT: MOVE W,C ;GET VALUE TO STORE IN W + MOVE C,V ;GET OPERATOR HERE + POP D,V + POP D,V ;GET ADDRESS TO STORE + PUSHJ P,@STRTAB-15(C) +IFN REENT,<PUSHJ P,RESTRX> + POP P,W ;RESTORE THINGS + POP P,C + JRST SYM2W1 + +ALSYM: ADD V,HISTRT + MOVEM W,(V) + MOVSI D,600000 +> + LIST ;END OF FAILSW CODE +IFN FAILSW!B11SW!WFWSW,< +COMSFX: IFN REENT,<PUSHJ P,SYMFX1 + JRST RESTRX> +IFE REENT,<JRST SYMFX1>> + + SUBTTL LIBRARY INDEX (BLOCK TYPE 14) + + COMMENT * DIRECT ACCESS LIBRARY SEARCH MODE + INDEX WRITTEN BY FUDGE2.SEE DIDAL DOC (100-540-001-00) + DESIGN AND CODING BY D.M.NIXON JUL-AUG 1970 + * + +IFN DIDAL,< + +INDEX8: POP P,LSTBLK ;SET UP LSTBLK FOR NEXT PROG + PUSHJ P,WORD ;READ FIRST WORD + HLRZ A,W ;BLOCK TYPE ONLY + CAIE A,14 ;IS IT AN INDEX? + JRST INDEXE ;NO, ERROR + JRST INDEX9 ;DON'T SET FLAG AGAIN + +INDEX0: TRO F,XFLG ;SIGNAL INDEX IN CORE + MOVEI A,1 ;START ON BLOCK 1 (DSK) + HRROM A,LSTBLK ;BUT INDICATE AN INDEX + MOVE A,ILD1 ;INPUT DEVICE + DEVCHR A, + TLNE A,DTABIT ;IS IT A DTA? + TRO F,DTAFLG ;YES +INDEX9: MOVEI A,AUX+2 ;AUX BUFFER + HRLI A,4400 ;MAKE BYTE POINTER + MOVEM A,ABUF1 ;AND SAVE IT + HRL A,BUFR1 ;INPUT BUFFER + BLT A,AUX+201 ;STORE BLOCK + TRO F,LSTLOD ;AND FAKE LAST PROG READ +INDEX1: ILDB T,ABUF1 + JUMPL T,INDEX3 ;END OF BLOCK IF NEGATIVE + HRRZS T ;WORD COUNT ONLY +INDEX2: ILDB C,ABUF1 ;GET NEXT SYMBOL + TLO C,040000 ; + PUSHJ P,SREQ ;SEARCH FOR IT + SOJA T,INDEX4 ;REQUEST MATCHES + SOJG T,INDEX2 ;KEEP TRYING + ILDB T,ABUF1 ;GET POINTER WORD + TRZN F,LSTLOD ;WAS LAST PROG LOADED? + JRST INDEX1 ;NO + TRNN F,DTAFLG ;ALWAYS SAVE IF DTA??? + SKIPL LSTBLK ;SKIP IF LAST BLOCK WAS AN INDEX + MOVEM T,LSTBLK ;SAVE POINTER FOR CALCULATIONS + JRST INDEX1 ;GET NEXT PROG + INDEX4: ADDM T,ABUF1 + ILDB A,ABUF1 + PUSH P,A ;SAVE THIS BLOCK + TROE F,LSTLOD ;DID WE LOAD LAST PROG? + JRST [SKIPGE LSTBLK ;WAS LAST BLOCK AN INDEX? + JRST NXTBLK ;YES, SO GET NEXT ONE + MOVEM A,LSTBLK + JRST LOAD1] ;NEXT PROG IS ADJACENT + HRRZ T,LSTBLK ;GET LAST BLOCK NUMBER + CAIN T,(A) ;IN THIS BLOCK? + JRST THSBLK ;YES +NXTNDX: TRNE F,DTAFLG ;DIFFERENT TEST FOR DTA + JRST NXTDTA ;CHECK IF NEXT BUFFER IN CORE + CAIN T,-1(A) ;NEXT BLOCK? + JRST NXTBLK ;YES,JUST DO INPUT +INDEX5: USETI 1,(A) ;SET ON BLOCK + WAIT 1, ;LET I/O FINISH + MOVSI C,(1B0) ;CLEAR RING USE BIT IF ON + HRRZ T,BUFR + IORM C,BUFR ;SET UNUSED RING BIT (HELP OUT MONITOR) + SKIPL (T) + JRST NXTBLK ;ALL DONE NOW + ANDCAM C,(T) ;CLEAR USE BIT + HRRZ T,(T) ;GET NEXT BUFFER + JRST .-4 ;LOOP + +NXTDTA: WAIT 1, ;LET I/O RUN TO COMPLETION + HRRZ T,BUFR ;GET POINTER TO CURRENT BUFFER + HLRZ T,1(T) ;FIRST DATA WORD IS LINK + CAIE T,(A) ;IS IT BLOCK WE WANT? + JRST INDEX5 ;NO +NXTBLK: IN 1, + JRST NEWBLK ;IT IS NOW + JRST WORD3 ;EOF OR ERROR + +NEWBLK: MOVE A,(P) ;GET CURRENT BLOCK + JUMPL A,INDEX8 ;JUST READ AN INDEX + HLRZS A ;GET WORD COUNT + JRST INDEX6 ;WORD COUNT WILL BE CORRECT + + THSBLK: SUB A,LSTBLK ;GET WORD DIFFERENCE + MOVSS A ;INTO RIGHT HALF +INDEX6: ADDM A,BUFR1 + MOVNS A + ADDM A,BUFR2 +INDEX7: POP P,LSTBLK ;STORE THIS AS LAST BLOCK READ + JRST LOAD1 + +INDEX3: HRRE A,T ;GET BLOCK # OF NEXT INDEX + JUMPL A,EOF ;FINISHED IF -1 + PUSH P,T ;STACK THIS BLOCK + HRRZ T,LSTBLK ;GET LAST BLOCK + JRST NXTNDX ;CHECK IF NEXT BUFFER IN CORE + +INDEX: PUSHJ P,WORD2 ;READ FIRST WORD OF NEXT BUFFER +INDEXE: TRZE F,XFLG ;INDEX IN CORE? + TTCALL 3,[ASCIZ /LIBRARY INDEX INCONSISTENT - CONTINUING +/] ;WARNING MESSAGE + JRST LOAD1A+1 ;AND CONTINUE +> + +IFE DIDAL,<INDEX0: +INDEX: PUSHJ P,WORD2 ;READ FIRST WORD OF NEXT BUFFER + JRST LOAD1A+1> + + SUBTTL ALGOL OWN BLOCK (TYPE 15) + +IFN ALGSW,< +ALGBLK: SKIPE OWNLNG ;FIRST TIME THIS PROG? + JRST ALGB1 ;NO, JUST CHAINED SYMBOL INFO + PUSHJ P,RWORD ;READ 3RD WORD +IFN REENT,<TLNE F,HIPROG ;LOADING INTO HIGH SEGMENT? + EXCH X,LOWX ;YES, BUT OWN AREAS ARE IN LOW SEG> + HLRZ V,W ;GET START OF OWN BLOCK +IFN REENT,<TLNE F,HIPROG ;LOADING INTO HIGH SEGMENT? + HRRZ V,LOWR ;YES, BUT PUT OWN AREAS IN LOW SEG> + MOVEI C,(W) ;GET LENGTH OF OWN BLOCK + MOVEM C,OWNLNG ;SAVE IT TO FIX RELOC AT END + PUSHJ P,ALGB2 ;FIX AND CHECK PROG BREAK + MOVEI W,(V) ;GET CURRENT OWN ADDRESS + EXCH W,%OWN ;SAVE FOR NEXT TIME + MOVEM W,@X ;STORE LAST OWN ADDRESS IN LEFT HALF + HRLM C,@X ;LENGTH IN LEFT HALF +IFN REENT,<TLNE F,HIPROG ;HI-SEG? + EXCH X,LOWX ;YES, RESTORE X TO POINT TO HIGH SEG> +ALGB1: PUSHJ P,RWORD ;GET DATA WORD + HLRZ V,W ;GET ADDRESS TO FIX UP + ADD W,%OWN ;ADD IN ADDRESS OF OWN BLOCK + PUSHJ P,SYM4A ;FIX UP CHAINED REQUEST + JRST ALGB1 ;LOOP TIL DONE + +ALGB2: ADDI H,(W) ;FIX PROG BREAK +IFN REENT,<CAML H,HILOW + MOVEM H,HILOW ;HIGHEST LOW CODE LOADED> + CAILE H,1(S) ;SKIP IF SUFFICIENT CORE AVAILABLE +IFN EXPAND,<JRST [PUSHJ P,XPAND> + JRST FULLC +IFN EXPAND,< JRST .+1]> + POPJ P, + + +> + SUBTTL SAIL BLOCK TYPES 16 AND 17 + +COMMENT * BLOCK TYPE 16 AND 17. SIXBIT FOR FIL,PPN,DEV +IN THE BLOCK. SEARCH TABLE FOR ALREADY REQUESTED. IF NOT +ENTER REQUEST. ORIGINAL CODE BY DCS REWRITTEN BY WFW* + +IFN SAILSW,< +LDPRG: MOVEI D,PRGFLS-1 ;SET UP SOMETHING WE CAN SEARCH WITH + MOVE W,PRGPNT ;AND CURRENT POINTER + PUSHJ P,LDSAV ;GO ENTER (WILL NOT RETURN IF RUNS OUT) + MOVEM D,PRGPNT + JRST LDPRG ;BACK FOR MORE +LDLIB: MOVEI D,LIBFLS-1 + MOVE W,LIBPNT + PUSHJ P,LDSAV + MOVEM D,LIBPNT + JRST LDLIB ;LOOKS JUST LIKE THE LAST ONE, DOESN'T IT + +LDSAV: HRLI D,-RELLEN-1 ;GET AOBJN SET UP + MOVEM W,LODPN2# ;SAV IT + PUSHJ P,PRWORD ;GET FILE,PPN + MOVE A,W ;SAVE ONE + PUSHJ P,RWORD ;AND DEVICE +FILSR: CAMN D,LODPN2 + JRST FENT ;HAVE GOTTEN THERE, ENTER FILE + CAME C,PRGFIL(D) ;CHECK FOR MATCH + JRST NOMT ;NOT FILE + CAME A,PRGPPN(D) + JRST NOMT ;NO PPN + CAME W,PRGDEV(D) +NOMT: AOBJN D,FILSR ;AND NOT DEVICE SHOULD ALWAYS JUMP + MOVE D,LODPN2 + POPJ P, ;JUST RETURN CURRENT POINTER +FENT: MOVE D,LODPN2 ;ENTER IT + AOBJP D,WRONG ;THAT IS IF NOT TOO MANY + MOVEM C,PRGFIL-1(D) ;HAVE ALREADY INDEXED + MOVEM A,PRGPPN-1(D) ;HENCE THE -1 + MOVEM W,PRGDEV-1(D) + POPJ P, +WRONG: ERROR ,</TOO MANY DEMANDED FILES#/> + JRST LD2 +> + SUBTTL COMMON ALLOCATION (BLOCK TYPE 20) + +COMMENT * THIS BLOCK CONSISTS OF WORD PAIRS (SAME AS TYPE 2) + FIRST WORD IS RADIX50 04,SYMBOL + SECOND WORD IS 0,,COMMON LENGTH + COMMON NAME MUST BE GLOBAL AND UNIQUE + IF NOT ALREADY DEFINED LOADER DEFINES SYMBOL AND ALLOCATES + SPACE. IF DEFINED LOADER CHECK FOR TRYING TO INCREASE COMMON + SIZE, AND GIVES ERROR IF SO + NOTE... COMMON BLOCKS MUST COME DEFORE ANY DATA BLOCKS + IE. AFTER BLOCKS 4,6,3 BUT BEFORE 1,2,37,..5 +* + +IFN K,<COMML==LOAD4A> +IFE K,< +COMML: PUSHJ P,PRWORD ;GET WORD PAIR + TLO C,400000 ;TURN IT INTO 44,SYMBOL (FOR FORTRAN) + TLO N,F4SW ;INHIBITS MATCH WITH 04,SYMBOL + PUSHJ P,SDEF ;SEE IF ALREADY DEFINED + JRST COMMLD ;YES, JUST CHECK SIZE + TLZ N,F4SW ;CLEAR AGAIN +IFN REENT,<TLNN F,HIPROG ;LOADING INTO HIGH SEGMENT? + JRST .+3 ;NO + EXCH R,LOWR ;YES, BUT COMMON ALWAYS GOES TO LOW SEG + EXCH X,LOWX> + HRL W,R ;CURRENT RELOCATION + ADDI R,(W) ;BUMP RELOCATION + MOVS W,W ;LENGTH,,START + PUSH P,W ;STORE COMMON VALUE + HRRZS W ;NORMAL SYMBOL ADDRESS + TLZ C,400000 ;BACK TO 04,SYMBOL + PUSHJ P,SYM1B ;DEFINE IT + POP P,W ;RESTORE VALUE + TLO C,400000 ;AND COMMON SYMBOL + PUSHJ P,SYM1B ;AND STORE IT ALSO +IFN REENT,<TLNN F,HIPROG ;LOADING INTO HIGH SEGMENT? + JRST COMML ;NO + EXCH R,LOWR ;YES, RESTORE RELOCATION TO HIGH + EXCH X,LOWX> + JRST COMML ;GET NEXT SYMBOL + +COMMLD: TLZ N,F4SW ;CLEAR AGAIN + HLRZ C,2(A) ;PICK UP DEFINITION + CAMLE W,C ;CHECK SIZE + JRST ILC ;ILLEGAL + JRST COMML ;TRY NEXT +> + SUBTTL SPARSE DATA (BLOCK TYPE 21) + +COMMENT * + THIS BLOCK IS SIMILAR TO TYPE 1 DATA + THE DATA WORDS ARE + COUNT,,LOCATION + DATA WORDS (COUNT NUMBER OF TIMES) + COUNT,,LOCATION + DATA WORDS + ETC. + +* + +SPDATA: PUSHJ P,RWORD ;READ BLOCK ORIGIN + SKIPGE W + PUSHJ P,PROGS ;SYMBOLIC IF 36 BITS + HLRZ C,W ;GET SUB BLOCK COUNT IN C + HRRZS W ;CLEAR IT + HRRZ V,C ;AND IN V (LENGTH WE NEED) +SPDTO: ADD V,W ;COMPUTE NEW PROG. BREAK +IFN REENT,<TLNN F,HIPROG + JRST SPDTLW ;NOT HIGH SEGMENT +SPDT3: CAMGE W,HVAL1 ;CHECK TO SEE IF IN TOP SEG + JRST LOWSPD + MOVE T,.JBREL ;CHECK FOR OVERFLOW ON HIGH + CAIL T,@X + JRST SPDT2 + PUSHJ P,HIEXP + JRST FULLC + JRST SPDT3> + +IFN MONLOD,<TLNN N,DISW ;LOADING TO DISK? + JRST SPDTLW ;NO, GO CHECK NEW BREAK + CAMG H,V ;NEW BREAK? + MOVE H,V ;YES, UPDATE + JRST SPDT2 ;NO NEED TO CHECK FOR ROOM> +IFN REENT,< +LOWSPD: SUB V,HIGHX ;RELOC FOR PROPER + ADD V,LOWX ;LOADING OF LOW SEQMENT + SUB W,HIGHX + ADD W,LOWX +> +SPDTLW: MOVEI T,@X + CAMG H,T ;COMPARE WITH PREV. PROG. BREAK + MOVE H,T + TLNE F,FULLSW + JRST FULLC ;NO ERROR MESSAGE +IFN REENT,<CAML H,HVAL1 + JRST COROVL ;WE HAVE OVERFLOWED THE LOW SEGMENT + CAMLE T,HILOW + MOVEM T,HILOW ;HIGHEST LOW CODE LOADED INTO> + CAILE H,1(S) ; SKIP IF SUFFICIENT CORE AVAILABLE +IFN EXPAND,<JRST [PUSHJ P,XPAND> + JRST FULLC +IFN REENT,< TLNE F,HIPROG + SUBI W,2000 ;HISEG LOADING LOW SEG> +IFN EXPAND,< JRST .-1]> +SPDT2: MOVE V,W +SPDT1: PUSHJ P,RWORD ;READ DATA WORD +IFN L,<CAML V,RINITL ;CHECK FOR BAD STORE> +IFN MONLOD,<PUSHJ P,DICHK ;MAKE SURE ADDRESS IS IN CORE> + MOVEM W,@X ;STORE DATA WORD IN PROG. AT LLC +IFN MONLOD,<TLO N,WOSW ;SET SWITCH TO WRITE OUT BUFFER> + SOJLE C,SPDATA ;SUB-BLOCK RUN OUT, REFILL IT + AOJA V,SPDT1 ;ADD ONE TO LOADER LOC. COUNTER + + SUBTTL TENEX ASSIGNMENT (BLOCK TYPE 100) + +IFN TENEX,< +;IMPLEMENT THE SPECIAL BLOCK 100 REQUEST FOR ASSIGNING +; AND INCREMENTING OF EXTERNALS + +ASGSYM: PUSHJ P,RWORD ;GET FIRST WORD + MOVE V,W ;SAVE SYM2 + PUSHJ P,PRWORD ;GET SECOND AND THIRD WORDS + TLO C,040000 ;MAKE INTO GLOBAL + PUSHJ P,SDEF ;SEE IF DEFINED + JRST ASGSY1 ;OK. IT IS + PUSH P,PRQ ;IT'S NOT, GENERATE ERROR COMMENT + PUSHJ P,PRNAME + JSP A,ERRPT7 + SIXBIT /UNDEFINED ASSIGN IN #/ + +ASGSY0: PUSHJ P,RWORD ;SHOULD RETURN TO LOAD1 + JRST ASGSY0 ;LOOP UNTIL IT DOES + +ASGSY1: ADD W,2(A) ;INCREMENT VALUE + EXCH W,2(A) ;SAVE NEW, GET OLD + MOVE C,V ;GET SYM2 + TLO C,040000 ;MAKE INTO GLOBAL + PUSHJ P,SYMPTQ ;AND CONTINUE AS FOR GLOBAL DEF + JRST ASGSY0 ;AND RETURN + > + SUBTTL SYMBOL TABLE SEARCH SUBROUTINES + +; ENTERED WITH SYMBOL IN C +; RETURN IS WITH POINTER IN A IF MATCHING SYMBOL FOUND +; OTHERWISE, A SKIP ON RETURN OCCURS + +SREQ: JUMPGE S,CPOPJ1 ;JUMP IF NO UNDEF. SYMBOLS + SKIPA A,S ;LOAD REQUEST SEARCH POINTER +SDEF: MOVE A,B ;LOAD DEF. SYMBOL SEARCH POINTER +SDEF1: CAMN C,1(A) + POPJ P, ;SYMBOLS MATCH, RETURN +IFE K,< TLNE N,F4SW ;ARE WE IN FORTRAN? + JRST SDEF2 ;YES,JUST TRY NEXT SYMBOL> + TLC C,400000 ;MIGHT BE SUPPRESSED INTERNAL + CAMN C,1(A) ;WAS IT? + JRST [TLC C,400000 ;BACK AS IT WAS + IORM C,1(A) ;YES, SO ENSURE IT'S SUPPRESSED + POPJ P,] ;EXIT WITH SYMBOL FOUND + TLC C,400000 ;NO, TRY NEXT SYMBOL +SDEF2: ADD A,SE3 + JUMPL A,SDEF1 +IFE K,< JRST CPOPJ1 ;SYMBOL NOT FOUND SKIPS ON RETURN> +IFN K,< +CPOPJ1: AOS (P) + POPJ P,> + + SUBTTL RELOCATION AND BLOCK INPUT + +PRWORD: PUSHJ P,RWORD ;READ A WORD PAIR + MOVE C,W ;LOAD C WITH FIRST DATA WORD + TRNE E,377777 ;TEST FOR END OF BLOCK + JRST RWORD1 ;INPUT SECOND WORD OF PAIR + MOVEI W,0 ;NO SECOND WORD, ASSUME ZERO + POPJ P, + +RWORD: TRNN E,377777 ;TEST FOR END OF BLOCK + JRST LOAD1 ;RETURN TO LOAD THE NEXT BLOCK +RWORD1: AOBJN E,RWORD2 ;JUMP IF DATA WORD NEXT + PUSHJ P,WORD ;READ CONTROL WORD + MOVE Q,W ;DON'T COUNT RELOCATION WORDS + HRLI E,-22 ;SET RELOCATION WORD BYTE COUNT +RWORD2: PUSHJ P,WORD ;READ INPUT WORD + JUMPGE Q,RWORD3 ;TEST LH RELOCATION BIT + TRNN F,TWOFL ;POSSIBLE TWO SEGMENTS? + JRST RWORD5 ;NO + MOVSS W + PUSHJ P,CHECK ;USE CORRECT RELOCATION + HRRI W,@R + MOVSS W + JRST RWORD3 ;AND TEST RIGHT HALF +RWORD5: HRLZ T,R + ADD W,T ;LH RELOCATION +RWORD3: TLNN Q,200000 ;TEST RH RELOCATION BIT + JRST RWORD4 ;NOT RELOCATABLE + TRNE F,TWOFL ;POSSIBLE TWO SEGMENTS? + PUSHJ P,CHECK ;USE CORRECT RELOCATION + HRRI W,@R ;RH RELOCATION +RWORD4: LSH Q,2 + POPJ P, + +CHECK: MOVE T,HVAL1 ;START OF HISEGMENT + CAIG T,NEGOFF(W) ;IN HISEG? + JRST [CAILE W,(W) ;IS ADDRESS BELOW HISEG START? + JRST [MOVNS T ;YES + ADDI T,(W) ;THEREFORE WORRY ABOUT CARRY + HRR W,T ;INTO LEFT HALF + POPJ P,] + SUBI W,(T) ;IN HISEG, REMOVE OFSET + POPJ P,] + HRRI W,@LOWR ;USE LOW SEG RELOC + JRST CPOPJ1 ;SKIP RETURN + SUBTTL PRINT STORAGE MAP SUBROUTINE + +PRMAP: TRZ F,LOCAFL ;ASSUME LOCAL SYMBOLS SUPPRESSED + CAIE D,1 ;IF /1M PRINT LOCAL SYMBOLS + CAMN D,[-7] ;TEST FOR /-1M ALSO + TRO F,LOCAFL ;YES,TURN ON FLAG + JUMPL D,PRTMAP-1 ;JUMP IF /-M OR /-1M + TRO N,ENDMAP ;ELSE SET DEFERRED MAP FLAG + POPJ P, + + TRZ N,ENDMAP ;CLEAR DELAYED MAP FLAG +PRTMAP: PUSHJ P,FSCN1 ;LOAD OTHER FILES FIRST +IFN SPCHN,<TRZ N,MAPSUP ;SET MAP NOT SUPPRESSED + SKIPE CHNACB ;TEST FOR SPECIAL CHAINING + TRNN N,CHNMAP ;TEST FOR ROOT MAP ALREADY PRINTED + JRST PRMP0A ; SKIP IF NO TO EITHER QUESTION + PUSHJ P,CRLFLF ;SPACE TWO LINE AND FORCE TTY OUTPUT + TLZ F,FCONSW ;SUPPRESS TTY OUTPUT + ERROR 0,</******************** !/> ;PRINT SEPARATOR + TLO F,FCONSW ;FORCE TTY OUTPUT AGAIN + ERROR 0,</LINK !/> ;PRINT LINK NUMBER + MOVE W,LINKNR ;GET CURRENT LINK NUMBER + PUSHJ P,RCNUMW ;PRINT IT IN DECIMAL + TLZ F,FCONSW ;SUPPRESS TTY OUTPUT + ERROR 0,</ ********************!/> ;PRINT SEPARATOR + PUSHJ P,CRLF ;PUT BLANK LINE ON MAP FILE ONLY + PUSHJ P,CRLF ; DITTO + TLO F,FCONSW ;FORCE TTY OUTPUT AGAIN + PUSHJ P,CRLF + JRST .+2 ;SKIP NEXT CRLF CALL +PRMP0A: > + PUSHJ P,CRLFLF ;START NEW PAGE + HRRZ W,R +IFN REENT,<CAIG W,.JBDA ;LOADED INTO LOW SEGMENT + JRST NOLOW ;DON'T PRINT IF NOTHING THERE> + PUSHJ P,PRNUM0 +IFE REENT,<ERROR 7,<?IS THE PROGRAM BREAK@?>> +IFN REENT,<ERROR 7,<?IS THE LOW SEGMENT BREAK@?> + PUSHJ P,CRLF ;CR-LF ON ALL BUT TTY +NOLOW: MOVE W,HVAL ;HISEG BREAK + CAMG W,HVAL1 ;HAS IT CHANGED + JRST NOHIGH ;NO HI-SEGMENT + TLO F,FCONSW ;FORCE OUT HI-SEG BREAK ALSO + PUSHJ P,PRNUM0 + ERROR 7,<?IS THE HIGH SEGMENT BREAK@?> + PUSHJ P,CRLF +NOHIGH:> +IFN SPCHN,<SKIPE CHNACB ;TEST FOR SPECIAL CHAINING + TRNN N,CHNMAP ;TEST FOR ROOT MAP ALREADY PRINTED + JRST .+2 ; NO TO EITHER QUESTION, FALL THRU + JRST NOADDR ; ELSE SKIP HEADING OUTPUT> +IFE NAMESW,< MOVE W,DTOUT ;OUTPUT NAME > +IFN NAMESW,< SKIPN W,DTOUT + MOVE W,CURNAM ;USE PROGRAM NAME> + JUMPE W,.+3 ;DON'T PRINT IF NOT THERE + PUSHJ P,PWORD + PUSHJ P,SPACES ;SOME SPACES + + ;HERE TO DECODE AND PRINT VERSION NUMBER IN .JBVER +;USES T,V,D,Q +IFN MONLOD,<TLNE N,DISW ;LOADING TO DISK? + MOVE X,XRES ;YES, SETUP X > +IFE L,< + SKIPN V,.JBVER(X) ;GET VERSION NUMBER + JRST NOVER ;WASN'T ONE + ROT V,3 ;PUT USER BITS LAST + MOVEI T,"%" ;TO INDICATE VERSION + PUSHJ P,TYPE2 ;OUTPUT CHARACTER + MOVEI Q,3 ;3 BYTES IN MAJOR FIELD + PUSHJ P,SHFTL ;SHIFT LEFT, SKIP 0 BYTES + JRST .+3 ;NO MAJOR FIELD + MOVEI D,"0" ;CONVERT TO ASCII 0-8 + PUSHJ P,OUTVER ;OUTPUT IT + MOVEI Q,2 ;2 DIGITS IN MINOR FIELD + PUSHJ P,SHFTL + JRST .+3 ;NO MINOR FIELD + MOVEI D,"@" ;ALPHABETICAL + PUSHJ P,OUTVER + MOVEI T,"(" ;EDIT NUMBER IN PARENS + TLNN V,-1 ;SEE IF GIVEN + JRST NOEDIT ;NO + PUSHJ P,TYPE2 ;YES + MOVEI Q,6 + PUSHJ P,SHFTL ;LEFT JUSTIFY + JRST .+3 ;NEVER GETS HERE + MOVEI D,"0" ;0-7 AGAIN + PUSHJ P,OUTVER + MOVEI T,")" ;CLOSE VERSION + PUSHJ P,TYPE2 +NOEDIT: MOVEI T,"-" ;USER FIELD? + JUMPE V,.+4 ;NO + PUSHJ P,TYPE2 ;YES + MOVEI Q,1 ;ONLY ONE DIGIT + PUSHJ P,OUTVER ;OUTPUT IT + PUSHJ P,SPACES ;SOME SPACES +NOVER:>;END OF IFE L + ERROR 0,<?STORAGE MAP!?> + PUSHJ P,SPACES ;SOME SPACES + PUSH P,N + PUSH P,E + MOVE N,[POINT 6,DBUF] ;INITIALIZE DATE POINTER + MSTIME Q, ;GET THE TIME + IDIVI Q,^D60*^D1000 + IDIVI Q,^D60 + PUSH P,A ;SAVE MINUTES + PUSHJ P,OTOD1 ;STORE HOURS + POP P,Q ;GET MINUTES + PUSHJ P,OTOD ;STORE MINUTES + DATE E, ;GET DATE + IDIVI E,^D31 ;GET DAY + ADDI Q,1 + PUSHJ P,OTOD ;STORE DAY + IDIVI E,^D12 ;GET MONTH + ROT Q,-1 ;DIV BY 2 + HRR A,DTAB(Q) ;GET MNEMONIC + TLNN Q,400000 + HLR A,DTAB(Q) ;OTHER SIDE + HRRM A,DBUF+1 ;STORE IT + MOVEI Q,^D64(E) ;GET YEAR + MOVE N,[POINT 6,DBUF+2] + PUSHJ P,OTOD ;STORE IT + POP P,E + POP P,N + PUSHJ P,DBUF1 + PUSHJ P,CRLF + SKIPN STADDR ;PRINT STARTING ADDRESS + JRST NOADDR ;NO ADDRESS SEEN + ERROR 0,</STARTING ADDRESS !/> + PUSHJ P,SP1 + MOVE W,STADDR ;GET ST. ADDR. + PUSHJ P,PRNUM0 ;PRINT IT +IFN NAMESW,< + PUSHJ P,SP1 + MOVE W,[SIXBIT / PROG /] + PUSHJ P,PWORD + MOVE W,CURNAM ;PROG NAME + PUSHJ P,PWORD + PUSHJ P,SP1 + MOVE W,ERRPT6 ;SIXBIT / FILE / + PUSHJ P,PWORD + MOVE W,PRGNAM ;FILE NAME + PUSHJ P,PWORD> +NOADDR: IFN REENT,< + HRRZ A,HVAL1 ;GET INITIAL HIGH START + ADDI A,.JBHDA ;ADD IN OFFSET +IFN SPCHN,<HRL A,BEGOV ;ASSUME NON-ROOT OVERLAY + SKIPE CHNACB ;TEST FOR SPECIAL CHAINING + TRNN N,CHNMAP ;TEST FOR ROOT-MAP PRINTED + ;ASSUMPTION CORRECT IF YES TO BOTH + ; SKIP NEXT INSTRUCTION IF SO > + HRLI A,.JBDA ;LOW START + MOVSM A,SVBRKS ;INITIAL BREAKS> + HLRE A,B + MOVNS A + ADDI A,(B) +PRMAP1: SUBI A,2 +IFN REENT!L,<SKIPN C,1(A) ;LOAD SYMBOL SKIP IF REAL SYMBOL + JRST PRMAP4 ;IGNORE ZERO NAME(TWOSEG BREAKS)> +IFE REENT!L,<MOVE C,1(A) ;LOAD SYMBOL> + TLNN C,300000 ;TEST FOR LOCAL SYMBOL + JRST .+4 ;GLOBAL (NOT LOCAL ANYWAY) + TRNN F,LOCAFL ;PRINT LOCAL SYMBOLS? + JRST PRMAP4 ;IGNORE LOCAL SYMBOLS + TLC C,040000 ;MAKE IT LOOK LIKE INTERN + TLNE C,040000 + JRST PRMP1A +IFN SPCHN,<TRZ N,MAPSUP ;SET MAP NOT SUPPRESSED + SKIPE CHNACB ;TEST FOR SPECIAL CHAINING + TRNN N,CHNMAP ;TEST FOR ROOT MAP PRINTED + JRST PRMP0C ; NO TO EITHER TEST, SKIP AROUND + HRRZ T,2(A) ;GET STARTING ADDRESS + CAML T,BEGOV ;TEST FOR BELOW OVERLAY + JRST PRMP0C ;NO,JUMP + TRO N,MAPSUP ;SUPPRESS IF RE-PRINTING ROOT + JRST PRMAP4 ; & SKIP TO NEXT SYMBOL + +PRMP0C:> + PUSHJ P,CRLF + PUSHJ P,CRLF + JRST PRMP1B + PRMP1A: +IFN SPCHN,<TRNE N,MAPSUP ;TEST FOR SUPPRESSED MAP + JRST PRMAP4 ; YES, SKIP THIS SYMBOL> + PUSHJ P,TAB + MOVEI T,40 ;SPACE FOR OPEN GLOBAL + TLNE C,100000 ;LOCAL? + MOVEI T,47 ;YES, TYPE ' + TLNE C,400000 ;HALF KILLED TO DDT? + ADDI T,3 ;YES, TYPE # FOR GLOBAL, * FOR LOCAL + PUSHJ P,TYPE2 ;PRINT CHARACTER +PRMP1B: PUSHJ P,PRNAM1 ;PRINT SYMBOL AND VALUE + TLNE C,040000 + JRST PRMAP4 ;GLOBAL SYMBOL + HLRE C,W ;POINTER TO NEXT PROG. NAME + HRRZS W ;SO WE ONLY HAVE THE HALF WE WANT +PRMAP7: JUMPL C,PRMP7A +IFN REENT,<SKIPN 1(B) ;IS IT A ZERO SYMBOL + JRST [MOVE C,B ;SET UP C + JRST PRMAP2] ;AND GO + HRRZ T,HVAL ;GET TO OF HI PART + CAML W,HVAL1 ;IS PROGRAM START UP THERE?? + JRST PRMAP6 ;YES + HRRZ T,HILOW ;GET HIGHEST LOCATION LOADED IN LOW + SUBI T,(X) ;REMOVE OFFSET + CAIE T,(W) ;EQUAL IF ZERO LENGTH PROG> + HRRZ T,R ;GET LOW, HERE ON LAST PROG + JRST PRMAP6 ;GO + +PRMP7A: ADDI C,2(A) ;POINTER TO NEXT PROGRAM NAME +PRMAP2: IFN REENT,< + SKIPE 1(C) ;THIS IS A TWO SEG FILE + JRST PRMP2A ;NO + MOVE T,2(C) ;GET PROG BREAKS + TLNN T,-1 ;IF NO HIGH STUFF YET + HLL T,SVBRKS ;FAKE IT + SUB T,SVBRKS ;SUBTRACT LAST BREAKS + HRRZ W,T ;LOW BREAK + PUSH P,T ;SAVE T + PUSHJ P,PRNUM ;PRINT IT + POP P,T ;RESTORE + HLRZ W,T ;GET HIGH BREAK + JUMPE W,.+3 ;SKIP IF NO HIGH CODE + PUSHJ P,TAB ;AND TAB + PUSHJ P,PRNUM + MOVE T,2(C) + CAMN C,B ;EQUAL IF LAST PROG + SETZ C, ;SIGNAL END + TLNN T,-1 + HLL T,SVBRKS +IFE TENEX,<CAMN T,SVBRKS ;ZERO LENGTH IF EQUAL + JRST PRMP6A ;SEE IF LIST ALL ON> + MOVEM T,SVBRKS ;SAVE FOR NEXT TIME + JRST PRMAP3 ;AND CONTINUE +PRMP2A:> + HRRZ T,(C) ;GET ITS STARTING ADRESS +PRMAP6: SUBM T,W ;SUBTRACT ORIGIN TO GET LENGTH + PUSHJ P,PRNUM ;PRINT PROGRAM LENGTH + PUSHJ P,CRLF +PRMP6A: +IFE TENEX,<TLNN N,ALLFLG ;SKIP IF LIST ALL MODE IS ON + TRNE W,777777 ;SKIP IF ZERO LENGTH PROGRAM> +IFN TENEX,<TLNE N,ALLFLG ;SKIP IF LIST ALL MODE IS ON> + JRST PRMAP3 + HLRE C,2(A) ;GET BACK CORRECT LOCATION IF 0 LENGTH + JUMPE C,PRMAP5 ;JUMP IF LAST PROGRAM + ADDI C,2(A) ;IN CASE WE SKIPPED SOME PROGRAMS + SKIPA A,C ;SKIP GLOBALS, ZERO LENGTH PROG. +PRMAP3: PUSHJ P,CRLF +PRMAP4: CAILE A,(B) ;TEST FOR END OF SYMBOL TABLE + JRST PRMAP1 +PRMAP5: PUSHJ P,CRLF ;GIVE AN XTRA CR-LF +IFN SPCHN,<SKIPN CHNACB ;TEST FOR SPECIAL CHAINING + JRST PMS ;NO, SKIP + TRO N,CHNMAP ;YES, SHOW ROOT-PHASE PRINTED + JRST PMS4 ; & EXIT> +IFN TENEX,<JRST PMS ;GO PRINT UNDEFINED GLOBALS> + + SUBTTL LIST UNDEFINED AND MULTIPLY DEFINED GLOBALS + +;LIST UNDEFINED GLOBALS + +PMSQ: +IFN TENEX,<SETZM NLSTGL ;ALLOW UNDEFINED GLOBALS TO LIST> +PMS: PUSHJ P,FSCN1 ;LOAD FILES FIRST + JUMPGE S,PMS4 ;JUMP IF NO UNDEFINED GLOBALS +IFN TENEX,<SKIPE NLSTGL ;HAVE UNDEF GLOBALS BEEN LISTED? + POPJ P,0 ;YES + SETOM NLSTGL ;PREVENT IT FROM HAPPENING AGAIN> + PUSHJ P,FCRLF ;START THE MESSAGE + HLRE W,S ;COMPUTE NO. OF UNDEF. GLOBALS + MOVMS W + LSH W,-1 ;<LENGTH OF LIST>/2 + PUSHJ P,RCNUMW ;PRINT AS DECIMAL NUMBER + ERROR 7,</UNDEFINED GLOBAL(S)@/> + MOVE A,S ;LOAD UNDEF. POINTER +PMS2: SKIPL W,1(A) + TLNN W,40000 + JRST PMS2A + PUSHJ P,FCRLF + PUSHJ P,PRNAM0 ;PRINT SYMBOL AND POINTER +PMS2A: ADD A,SE3 + JUMPL A,PMS2 + PUSHJ P,CRLF ;NEW LINE + +;LIST NUMBER OF MULTIPLY DEFINED GLOBALS + +PMS3: SKIPN W,MDG ;ANY MULTIPLY DEFINED GLOBALS + JRST PMS4 ;NO, EXCELSIOR + PUSHJ P,FCRLF ;ROOM AT THE TOP + PUSHJ P,RCNUMW ;NUMBER OF MULTIPLES IN DECIMAL + ERROR 7,<?MULTIPLY DEFINED GLOBAL(S)@?> +PMS4: TLNE N,AUXSWE ;AUXILIARY OUTPUT DEVICE? + OUTPUT 2, ;INSURE A COMPLETE BUFFER +CPOPJ: POPJ P, ;RETURN + + SUBTTL ENTER FILE ON AUXILIARY OUTPUT DEVICE + +IAD2: +IFN SYMDSW,<TRNE F,LSYMFL ;ALREADY USING AUX DEV FOR LOCAL SYMBOLS? + POPJ P, ;YES, GIVE ERROR RETURN> + PUSH P,A ;SAVE A FOR RETURN + MOVE A,LD5C1 ;GET AUX. DEV. + DEVCHR A, ;GET DEVCHR + TLNN A,4 ;DOES IT HAVE A DIRECTORY + JRST [SKIPN A,DTOUT ;USE OUTPUT NAME IF GIVEN + JRST IAD2C ;FIND A DEFAULT + JRST IAD2A] ;JUST DO ENTER + MOVE A,DTOUT ;GET OUTPUT NAME + CAME A,[SIXBIT /JOBDAT/] ;DON'T USE JOBDAT + JUMPN A,IAD2A ;USE ANYTHING NON-ZERO + MOVSI A,(SIXBIT /DSK/) ;DEFAULT DEVICE + CAMN A,LD5C1 ;IS IT AUX. DEV. + JRST IAD2C ;YES LEAVE WELL ALONE + CLOSE 2, ;CLOSE OLD AUX. DEV. + MOVEM A,LD5C1 ;SET IT TO DSK + OPEN 2,OPEN2 ;OPEN IT FOR DSK + JRST IMD4 ;FAILED +IAD2C: IFN NAMESW,< + SKIPN A,CURNAM ;USE PROG NAME> + MOVSI A,(SIXBIT /MAP/) ;AN UNLIKELY NAME + MOVEM A,DTOUT ;SO ENTER WILL NOT FAIL +IAD2A: +IFN SPCHN,<MOVE A,CHNOUT+1 ;GET SP CHAIN DEV. + CAMN A,LD5C1 ;IS IT SAME AS AUX. DEV. + SKIPN CHNACB ;YES, ARE WE DOING SP CHAIN? + JRST IAD2B ;NO, PHEW! + DEVCHR A, ;IS IT REALLY A DSK? + TLNE A,DSKBIT + JRST IAD2B ;YES, LEAVE ALONE + RELEAS 2, ;NO, CLEAR OUT ANY RESIDUAL FILE + JRST IMD4 ;AWAY BEFORE SOMETHING TERRIBLE HAPPENS +IAD2B:> + POP P,A ;RECOVER A + SETZM DTOUT+2 ;CLEAR PROTECTION (LEVEL D) + ENTER 2,DTOUT ;WRITE FILE NAME IN DIRECTORY + JRST IMD3 ;NO MORE DIRECTORY SPACE + AOS (P) ;SKIP RETURN IF SUCCESSFUL + POPJ P, + +IMD3: ERROR ,</ERROR WRITING FILE@/> + TLZ N,AUXSWE!AUXSWI ;CLEAR AUX DEVICE SWITCHES + JRST LD2 + +IMD4: MOVE P,PDLPT ;RESTORE STACK + AOBJN P,.+1 ;BUT SAVE RETURN ADDRESS + TLZ N,AUXSWE!AUXSWI ;NO AUX.DEV.NOW + ERROR ,</NO MAP DEVICE@/> + JRST PRMAP5 ;CONTINUE TO LOAD + + SUBTTL MONLOD - DISK IMAGE MONITOR LOADER CODE + +IFN MONLOD,< + +DIOPEN: PUSH P,A ;SAVE AC A + PUSH P,H ;SAVE AC H + PUSH P,N ;SAVE 3 ACC'S + PUSH P,X ;IN A BLOCK + MOVE A,ILD1 ;GET DEVICE + MOVE N,A ;SPARE COPY + DEVCHR A, ;SEE WHAT IT IS + TLNN A,DSKBIT ;IS IT SOME SORT OF DSK? + SKIPA N,DIN1 ;NO, GET THE DEFAULT DEVICE (DSK) + MOVEM N,DIN1 ;YES, OBEY USER AND USE IT + MOVE A,[3,,N] ;SET UP BLOCK + DSKCHR A, ;WAS DSK, BUT SEE IF GENERIC "DSK" + JRST USEDSK ;NO POINT GOING THROUGH WITH THIS + TLNE A,(7B17) ;IS IT GENERIC DSK? + JRST USEDSK ;NO USE WHATS IN DIN1 + SETOB N,H ;REQUEST FIRST F/S + MOVE A,[3,,N] ;SET UP A AGAIN + JOBSTR A, ;GET FIRST F/S IN SEARCH LIST + JRST USEDSK ;LEVEL C + JUMPL H,USEDSK ;SWP BIT SET + TLNN H,200000 ;IS NO CREATE BIT SET? + JRST USEDSK ;NO, GENERIC 'DSK' WILL USE THIS F/S + DSKCHR A, ;GET FIRST 3 ARGS + JRST USEDSK ;SHOULD NEVER HAPPEN BUT !! + TLNN A,740200 ;RHB!OFL!HWP!SWP!NNA SET? + CAIGE X,DALLOC ;ENOUGH SPACE? + JRST USEDSK ;CANNOT USE FASTEST F/S + MOVEM N,DIN1 ;USE F/S RATHER THAN 'DSK' + MOVEM N,GENERI ;SAVE F/S INCASE ENTER FAILS +USEDSK: POP P,X ;RESTORE ACC'S + POP P,N + MOVE H,(P) ;RESET H +USDSK2: OPEN 4,OPEN4 ;OPEN DEVICE 'DSK', MODE 16 + HALT .-1 ;ERROR, NON-INTELIGENT INDICATION + MOVEM W,DIOUT1+1 ;STORE EXTENSION 'XPN' + MOVE A,DTIN ;GET FILE NAME + MOVEM A,DIOUT1 ;STORE IN 'LOOKUP-ENTER' BLOCK + SETZM DIOUT1+2 ;CLEAR PARAMETERS TO BE SUPPLIED BY MONITOR + SETZM DIOUT1+3 ;ALWAYS USE THIS JOB'S PROJ-PROG NUMBER + SETZM DIOUT+1 ;SAME AGAIN + MOVE A,[17,,11] ;STATES WORD + GETTAB A, ;GET IT + JRST .+3 ;FAILED, NOT LEVEL D FOR SURE + TLNE A,(7B9) ;TEST FOR LEVEL D + TDZA A,A ;YES, THIS IS LEVEL D + MOVEI A,2 ;NOT LEVEL D + ENTER 4,DIOUT(A) ;CREATE OR SUPERCEDE SAVE FILE + JRST ENTFAI ;ERROR, TRY DSK + JUMPE A,LEVELD ;JUMP IF LEVEL D + HRRZ A,.JBREL ;GET CURRENT SIZE + CAIL A,2000 ;NEED AT LEAST 2K + CAILE H,-2000(S) ;CHECK FOR 1K FREE +IFN EXPAND,<JRST [PUSHJ P,XPAND ;GET 1K OF ZEROS, WILL SAVE TIME LATER IN ANYCASE> + JRST FULLC ;NO MORE CORE +IFN EXPAND,< JRST .-1]> ;OK, TRY AGAIN + MOVSI A,-2000 ;FORM IOWD + HRRI A,(H) ;TO 1K OF BLANK + MOVEM A,LOLIST ;STORE IOWD + SETZM LOLIST+1 ;TERMINATE LIST + MOVEI A,DALLOC/10 ;PREALLOCATE THE HARD WAY + OUTPUT 4,LOLIST ;BY DOING OUTPUTS + SOJG A,.-1 + MOVEI A,2 ;STILL NOT LEVEL D +LEVELD: CLOSE 4,4 ;WIPE OUT THE OLD FILE IF ONE EXISTS + LOOKUP 4,DIOUT(A) ;LOOKUP FOLLOWED BY ENTER ENABLES UPDATING + HALT .-1 ;ERROR + JUMPN A,ALLOK ;NOT LEVEL D + MOVE A,DIOUT+.RBALC ;SEE WHAT WE GOT + SKIPE GENERI ;IF NOT GENERIC DSK FIRST F/S + CAIL A,DALLOC ;WAS IT ENOUGH + TDZA A,A ;YES, BUT STILL LEVEL D + JRST TRYAGN ;NO JUST USE DSK +ALLOK: ENTER 4,DIOUT(A) ;FILE CAN BE BOTH READ AND WRITTEN + HALT .-1 ;ERROR + MOVE A,H ;GET HIGHEST ADDRESS LOADED SO FAR + SUBI A,-177(X) ;SIZE OF LOW BUFFER MUST BE AN + ANDI A,777600 ;INTEGRAL MULTIPLE OF BLOCK SIZE + MOVEM A,HIRES ;SET UP POINTER FOR LOCATION CHECKING + ADDI A,(X) ;GET ADDRESS OF START OF IMAGE BUFFER + HRRM A,HILIST ;HILIST IS IOWD FOR FILE WINDOW BUFFER + SUBI A,(X) ;A=SIZE OF LOW IMAGE BUFFER (RESIDENT) + MOVN A,A ;GET MINUS BUFFER SIZE + HRLM A,LOLIST ;SET UP WORD COUNT IN LOW IOWD + HRRM X,LOLIST ;ADDRESS FIELD OF IOWD + MOVEM X,XRES ;SAVE OFFSET OF RESIDENT PORTION + MOVE H,HILIST ;GET HIGH BUFFER ADDRESS + MOVNI A,DISIZE ;NEGATIVE SIZE OF FILE WINDOW + HRLM A,HILIST ;SET UP WORD COUNT OF HIGH IOWD + MOVE A,HIRES ;GET HIGHEST ADDRESS IN RESIDENT PORTION+1 + LSH A,-7 ;CONVERT TO BLOCK NUMBER + MOVEM A,RESBLK ;STORE NUMBER OF BLOCKS IN RESIDENT PORTION + ADDI H,DISIZE ;H=TOP OF DISK WINDOW BUFFER + MOVEM H,DIEND ;LAST LOCATION IN WINDOW BUFFER+1 + CAILE H,1(S) ;SKIP IF SUFFICIENT CORE AVAILABLE +IFN EXPAND,<JRST [PUSHJ P,XPAND> + JRST FULLC +IFN EXPAND,< JRST .-1]> + SOS HILIST ;IOWD POINTS TO BUFFER-1 + SOS LOLIST ; " + SETZM HILIST+1 ;TERMINATOR SHOULD BE ZERO + SETZM LOLIST+1 ; " + TLO N,DISW ;SET DISK IMAGE IN USE FLAG + PUSH P,V ;SAVE CURRENT LOADER LOCATION COUNTER + MOVE V,HIRES ;GET FIRST ADDRESS NOT IN RESIDENT BUFFER + PUSHJ P,DICHK2 ;CALL TO INITIALIZE THE BUFFER HANDLER + POP P,V ;RESTORE V + POP P,H ;RESTORE H + SUBI H,(X) ;CONVERT TO ABSOLUTE FOR DISK IMAGE LOAD + POP P,A ;RESTORE AC A + JRST LD2D ;RETURN TO CONTINUE SCAN +DICHK: TLNN N,DISW ;ARE WE DOING A DISK IMAGE LOAD? + POPJ P, ;NO, ALL IS OK + HRRZ X,V ;LEFT HALF OF AC 'V' MAY CONTAIN FLAGS + CAMGE X,HIRES ;SKIP IF ADDRESS NOT IN RESIDENT PORTION + JRST DICHK1 ;ADDRESS IN AC X IS IN RESIDENT PORTION + CAMGE X,DILADD ;SKIP IF ADDRESS ABOVE CORRENT LOWEST WINDOW ADDRESS + JRST DICHK2 ;ADDRESS IS NOT RESIDENT + CAML X,DIHADD ;SKIP IF ADDRESS IS RESIDENT + JRST DICHK2 ;NOT RESIDENT + SKIPA X,XCUR ;GET OFFSET OF CURRENT WINDOW +DICHK1: MOVE X,XRES ;GET OFFSET OF RESIDENT LOW PORTION + POPJ P, + +DICHK2: PUSH P,A ;GET ADDRESS IN AC 'V' INTO CORE + PUSH P,Q ;GET SOME AC'S TO WORK WITH + TLZE N,WOSW ;CURRENT BUFFER TO BE WRITTEN OUT? + PUSHJ P,DICHK3 ;YES, GO DO SO + MOVE A,HILIST ;GET ADDRESS-1 OF DISK IMAGE BUFFER + ADDI A,1 ;A NOW POINTS TO START OF BUFFER + SETZM (A) ;CLEAR THE FIRST WORD OF THE BUFFER + MOVS Q,A ;MOVE ADDRESS TO SOURCE FOR BLT + HRRI Q,1(A) ;SOURCE+1 TO DESTINATION + ADDI A,DISIZE ;SET A TO TOP OF BUFFER+1 + BLT Q,-1(A) ;CLEAR THE BUFFER + HRRZ Q,V ;GET THE ADDRESS WE'RE LOOKING FOR + SUB Q,HIRES ;ACCOUNT FOR RESIDENT PART + IDIVI Q,DISIZE ;A=Q+1 + IMULI Q,DISIZE ;FIRST ADDRESS IN WINDOW + IDIVI Q,^D128 ;GET BLOCK NUMBER (-NUMBER IN RESIDENT PORTION) + ADD Q,RESBLK ;NUMBER OF RESIDENT BLOCKS + USETI 4,1(Q) ;BLOCK 0 DOES NOT EXIST + STATZ 4,20000 ;END OF FILE? + JRST DICHK4 ;YES, NO SENSE READING + INPUT 4,HILIST ;TRY TO FILL THE DISK IMAGE BUFFER + STATZ 4,740000 ;CHECK FOR ERRORS, DON'T CARE ABOUT EOF + HALT .-3 ;TRY AGAIN ON CONTINUE +DICHK4: MOVEM Q,CURSET ;LEAVE BLOCK NUMBER AROUND FOR LATER USETO + IMULI Q,^D128 ;GET ADDRESS OF FIRST WORD IN CURRENT BUFFER + MOVEM Q,DILADD ;STORE FOR FUTURE COMPARES + ADDI Q,DISIZE ;ADD SIZE OF DISK IMAGE BUFFER + MOVEM Q,DIHADD ;STORE HIGH CURRENT ADDRESS+1 + HRRZ Q,HILIST ;GET WINDOW ADDRESS-1 + ADDI Q,1 ;NOW EQUAL TO ADDRESS + SUB Q,DILADD ;COMPUTE LOADER CURRENT WINDOW OFFSET + HRLI Q,V ;SET UP INDEX REGISTER FOR STORED X + MOVEM Q,XCUR ;STORE CURRENT OFFSET + POP P,Q ;RESTORE + POP P,A ;RESTORE + MOVE X,XCUR ;SET UP LOADER OFFSET REGISTER + POPJ P, ;RETURN, ADDRESS IN 'V' NOW RESIDENT + + DICHK3: MOVE Q,CURSET ;GET BLOCK NUMBER FOR USETO + USETO 4,1(Q) ;THERE IS NO BLOCK 0 + OUTPUT 4,HILIST ;WRITE OUT HE IMAGE + STATZ 4,740000 ;ERROR? + HALT .-3 ;YES, TRY AGAIN ON CONTINUE + POPJ P, ;RETURN + +SIZCHK: EXCH A,DIEND ;SAVE A, GET END OF BUFFER ADDRESS + AOS (P) ;DEFAULT IS SKIP RETURN + CAIGE A,(S) ;IS SYMBOL TABLE ENCROACHING ON BUFFER? + AOS (P) ;NO,DON'T EXPAND CORE + EXCH A,DIEND ;RESTORE BOTH A AND DIEND + POPJ P, ;RETURN + +DISYM: PUSH P,V ;SAVE CURRENT ADDRESS + MOVE V,A ;GET ADDRESS WERE LOOGING FOR + PUSHJ P,DICHK ;MAKE SURE IT IS IN CORE + POP P,V ;RESTORE V + POPJ P, ;RETURN + +DIOVER: MOVE X,XRES ;CLEAN UP XPN FILE AND EXIT + MOVE A,.JBFF(X) ;GET LAST ADDRESS LOADER + SUB A,DILADD ;SUBTRACT CURRENT LOW ADDRESS + ADDI A,^D128 ;ROUND OFF TO NEAREST BLOCK SIZE + ANDI A,777600 ;FOR IOWD + MOVNS A ;NEGATE + HRLM A,HILIST ;PUT IN WINDOW IOWD + PUSHJ P,DICHK3 ;OUTPUT THE SYMBOL TABLE + USETO 4,1 ;SET UP TO OUTPUT RESIDENT PART + OUTPUT 4,LOLIST ;AND DO SO + STATZ 4,740000 ;ERROR CHECK + HALT .-3 ;IF ERROR TRY AGAIN + CLOSE 4, + EXIT + +TRYAGN: PUSH P,DIOUT1 ;SAVE NAME + SETZM DIOUT1 + RENAME 4,DIOUT(A) ;GET RID OF FILE + POP P,DIOUT1 ;RESTORE NAME +ENTFAI: SKIPN GENERI ;GENERIC DSK? + HALT . ;NO, JUST GIVE UP + MOVSI A,'DSK' ;TRY WITH JUST DSK + MOVEM A,DIN1 + SETZM GENERI + SETZM DIOUT+.RBALC + JRST USDSK2 ;TRY AGAIN + + +> + SUBTTL PRINT SUBROUTINES + +;PRINT THE 6 DIGIT OCTAL ADDRESS IN W + +; ACCUMULATORS USED: D,T,V + +PRNAM0: MOVE C,1(A) ;LOAD SYMBOL +PRNAM1: MOVE W,2(A) ;LOAD VALUE +PRNAM: PUSHJ P,PRNAME +PRNUM: + TRNN F,TTYFL + PUSHJ P,SP1 + PUSHJ P,SP1 +PRNUM0: MOVE V,PRNUM2 ;LOAD BYTE POINTER TO RH. OF W + MOVNI D,6 ;LOAD CHAR. COUNT +PRNUM1: ILDB T,V ;LOAD DIGIT TO BE OUTPUT + ADDI T,60 ;CONVERT FROM BINARY TO ASCII + PUSHJ P,TYPE2 + AOJL D,PRNUM1 ;JUMP IF MORE DIGITS REMAIN + POPJ P, + +PRNUM2: POINT 3,W,17 ;BYTE POINTER FOR OCTAL CONVERSION OF W + +;HERE TO LEFT JUSTIFY V, COUNT IN IN Q + LSH V,3 ;STEP LEFT ONE +SHFTL: TLNN V,700000 ;LEFT JUSTIFIED? + SOJGE Q,.-2 ;NO SHIFT IF STILL IN FIELD + JUMPLE Q,CPOPJ ;NOTHING IN THIS FIELD + JRST CPOPJ1 ;SKIP RTETURN, AT LEAST ONE CHAR + +;HERE TO OUTPUT CHARACTERS LEFT AFTER SHIFTING LEFT +OUTVER: SETZ T, ;CLEAR T TO REMOVE JUNK + LSHC T,3 ;SHIFT IN FROM T + ADDI T,(D) ;EITHER "0" OR "A" + PUSHJ P,TYPE2 ;PRINT + SOJG Q,OUTVER ;MORE? + POPJ P, ;NO + +IFN NAMESW,< +LDNAM: MOVE T,[POINT 6,CURNAM] ;POINTER + SETZM CURNAM ;CLEAR OLD NAME INCASE FEWER CHARS. IN NEW + MOVNI D,6 ;SET COUNT + TLZ W,740000 ;REMOVE CODE BITS +SETNAM: IDIVI W,50 ;CONVERT FROM RAD 50 + HRLM C,(P) + AOJGE D,.+2 + PUSHJ P,SETNAM + HLRZ C,(P) + JUMPE C,INAM + ADDI C,17 + CAILE C,31 + ADDI C,7 + CAIG C,72 ;REMOVE SPECIAL CHARS. (. $ %) + IDPB C,T +INAM: POPJ P, > + + +;SPECIAL ENTRY POINT WITH NUMBER IN REGISTER W, FALLS THRU TO RCNUM +RCNUMW: MOVE Q,W ;COPY NUMBER INTO PROPER REGISTER + +;YE OLDE RECURSIVE NUMBER PRINTER +;PRINTS Q, WITH LEADING ZEROES SUPPRESSED; USES A AND T + +RCNUM: IDIVI Q,12 ;RADIX DECIMAL + ADDI A,"0" + HRLM A,(P) + JUMPE Q,.+2 + PUSHJ P,RCNUM + HLRZ T,(P) + JRST TYPE2 + + +SPACES: PUSHJ P,SP1 +SP1: PUSHJ P,SPACE +SPACE: MOVEI T,40 + JRST TYPE2 + ; ACCUMULATORS USED: Q,T,D + +PWORD: MOVNI Q,6 ;SET CHARACTER COUNT TO SIX +PWORD1: MOVE D,LSTPT ;ENTER HERE WITH Q PRESET +PWORD2: ILDB T,D ;LOAD NEXT CHAR. TO BE OUTPUT + PUSHJ P,TYPE ;OUTPUT CHARACTER + AOJL Q,PWORD2 + POPJ P, + + +;TYPEOUT SUBROUTINE - THE CHARACTER SUPPLIED IN T IS CONVERTED TO ASCII +;AND IS OUTPUT ON THE CONSOLE AND/OR THE SPECIFIED LOADER MAP OUTPUT +;DEVICE + +CRLFLF: PUSHJ P,CRLF +FCRLF: TLO F,FCONSW ;INSURE TTY OUTPUT +CRLF: SETZM TABCNT ;RESET TAB COUNT ON NEW LINE + MOVEI T,15 ;CARRIAGE RETURN LINE FEED + PUSHJ P,TYPE2 + TRCA T,7 ;CR.XOR.7=LF +TYPE: MOVEI T,40(T) ;CONVERT SIXBIT TO ASCII +TYPE2: TLNN N,AUXSWI ;IS THER AN AUXILIARY DEVICE? + JRST TYPE3 ;NO, DONT OUTPUT TO IT + TLOE N,AUXSWE ;IS AUX. DEV. ENTERED? + JRST TYPE2A ; YES, SKIP + PUSHJ P,IAD2 ;NOPE, DO SO! + JRST TYPE3 ;ERROR RETURN +TYPE2A: SOSG ABUF2 ;SPACE LEFT IN BUFFER? + OUTPUT 2, ;CREATE A NEW BUFFER + IDPB T,ABUF1 ;DEPOSIT CHARACTER + IFN RPGSW,< + TRNN F,NOTTTY ;IF TTY IS ANOTHER DEVICE + ;DON'T OUTPUT TO IT> + TLNN F,FCONSW ;FORCE OUTPUT TO CONSOLE TOO? + POPJ P, ;NOPE +TYPE3: SKIPN BUFO2 ;END OF BUFFER + OUTPUT 3, ;FORCE OUTPUT NOW + IDPB T,BUFO1 ;DEPOSIT CHARACTER + CAIN T,12 ;END OF LINE + OUTPUT 3, ;FORCE AN OUTPUT + POPJ P, + SUBTTL SYMBOL PRINT - RADIX 50 + +; ACCUMULATORS USED: D,T + +PRNAME: MOVE T,C ;LOAD SYMBOL + TLZ T,740000 ;ZERO CODE BITS + CAML T,[50*50*50*50*50] ;SYMBOL LEFT JUSTIFIED + JRST SPT0 ;YES + PUSH P,T + PUSH P,C + MOVEI C,6 + MOVEI D,1 + IDIVI T,50 + JUMPN V,.+2 + IMULI D,50 + SOJN C,.-3 + POP P,C + POP P,T + IMUL T,D +SPT0: MOVNI D,6 ;LOAD CHAR. COUNT +SPT: IDIVI T,50 ;THE REMAINDER IS THE NEXT CHAR. + HRLM V,(P) ;STORE IN LH. OF PUSHDOWN LIST + AOJGE D,.+2 ;SKIP IF NO CHARS. REMAIN + PUSHJ P,SPT ;RECURSIVE CALL FOR NEXT CHAR. + HLRZ T,(P) ;LOAD FROM LH. OF PUSHDOWN LIST + JUMPE T,TYPE ;BLANK + ADDI T,60-1 + CAILE T,71 + ADDI T,101-72 + CAILE T,132 + SUBI T,134-44 + CAIN T,43 + MOVEI T,56 + JRST TYPE2 + +TAB1: PUSHJ P,CRLF +TAB: AOS T,TABCNT + CAIN T,5 + JRST TAB1 + TLNE N,AUXSWI ;TTY BY DEFAULT? + TRNE F,TTYFL + JRST SP1 + MOVEI T,11 + JRST TYPE2 + + +OTOD: IBP N +OTOD1: IDIVI Q,^D10 + ADDI Q,20 ;FORM SIXBIT + IDPB Q,N + ADDI A,20 + IDPB A,N + POPJ P, + +DTAB: SIXBIT /JANFEB/ + SIXBIT /MARAPR/ + SIXBIT /MAYJUN/ + SIXBIT /JULAUG/ + SIXBIT /SEPOCT/ + SIXBIT /NOVDEC/ + + SUBTTL ERROR MESSAGE PRINT SUBROUTINE + +; FORM OF CALL: + +; JSP A,ERRPT +; SIXBIT /<MESSAGE>/ + +; ACCUMULATORS USED: T,V,C,W + +ERRPT: PUSHJ P,FCRLF ;ROOM AT THE TOP + PUSHJ P,PRQ ;START OFF WITH ? +ERRPT0: PUSH P,Q ;SAVE Q + SKIPA V,ERRPT5 +ERRPT1: PUSHJ P,TYPE + ILDB T,V + CAIN T,'@' + JRST ERRPT4 + CAIN T,'%' + JRST ERRPT9 + CAIN T,'!' + JRST ERRP42 ;JUST RETURN,LEAVE FCONSW ON + CAIE T,'#' + JRST ERRPT1 + SKIPN C,DTIN + JRST ERRPT4 + MOVNI Q,14 + MOVEI W,77 +ERRPT2: TDNE C,W + JRST ERRPT3 + LSH W,6 + AOJL Q,ERRPT2 +ERRPT3: MOVE W,ERRPT6 + PUSHJ P,PWORD1 + SKIPN W,DTIN1 + JRST ERRPT4 + LSH W,-6 + TLO W,160000 + MOVNI Q,4 + PUSHJ P,PWORD1 +ERRPT4: PUSHJ P,CRLF +ERRP41: TLZ F,FCONSW ;ONE ERROR PER CONSOLE +ERRP42: POP P,Q ;***DMN*** FIX FOR ILC MESSAGE + AOJ V, ;PROGRAM BUMMERS BEWARE: + JRST @V ;V HAS AN INDEX OF A + +ERRPT5: POINT 6,0(A) +ERRPT6: SIXBIT / FILE / + ERRPT8: PUSHJ P,PRQ ;START WITH ? + CAIGE T,140 ;IS IT A NON-PRINTING CHAR? + CAIL T,40 + JRST ERRP8 + PUSH P,T + MOVEI T,136 ;UP ARROW + PUSHJ P,TYPE2 + POP P,T + TRC T,100 ;CONVERT TO PRINTING CHAR. +ERRP8: PUSHJ P,TYPE2 +ERRPT7: PUSHJ P,SPACE + JRST ERRPT0 + +ERRPT9: MOVEI V,@V + PUSH P,V + ERROR 7,<?ILLEGAL -LOADER@?> + POP P,V + JRST ERRP41 + +;PRINT QUESTION MARK + +PRQ: PUSH P,T ;SAVE + TLO F,FCONSW ;FORCE TTY OUTPUT ON ANY ERROR + MOVEI T,"?" ;PRINT ? + PUSHJ P,TYPE2 ;... + POP P,T ;RESTORE + POPJ P, ;RETURN + SUBTTL INPUT - OUTPUT INTERFACE + +;BINARY INPUT SUBROUTINE - RETURNS A WORD IN W +WORDPR: PUSHJ P,WORD ;GET FIRST WORD OF PAIR + MOVE C,W ;KEEP IT HANDY +WORD: SOSGE BUFR2 ;SKIP IF BUFFER NOT EMPTY + JRST WORD2 +WORD1: ILDB W,BUFR1 ;PICK UP 36 BIT WORD + POPJ P, + +WORD2: IN 1, ;GET NEXT BUFFER LOAD + JRST WORD ;DATA OK - CONTINUE LOADING +WORD3: STATZ 1,IODEND ;TEST FOR EOF + JRST EOF ;END OF FILE EXIT + ERROR ,< /INPUT ERROR#/> + JRST LD2 ;GO TO ERROR RETURN + + +SE3: XWD 2,2 ;SYMBOL POINTER INCREMENT +PDLPT: IOWD PDLSIZ,PDLST ;INITIAL PUSHDOWN STACK +COMM: SQUOZE 0,.COMM. +LSTPT: POINT 6,W ;CHARACTER POINTER TO W + +IOBKTL==40000 +IOIMPM==400000 +IODERR==200000 +IODTER==100000 +IODEND==20000 + +IOBAD==IODERR!IODTER!IOBKTL!IOIMPM + + SUBTTL IMPURE CODE +IFN PURESW,< RELOC +LOWCOD: RELOC +HICODE: + PHASE LOWCOD> + + +DBUF1: JSP A,ERRPT7 +DBUF: SIXBIT /TI:ME DY-MON-YR @/ + POPJ P, + +;DATA FOR PURE OPEN UUO'S + +IFN SPCHN,< +CHNENT: 0 + SIXBIT .CHN. + 0 + 0 +CHNOUT: EXP 16 + SIXBIT /DSK/ + 0 +> +IFN RPGSW,< +OPEN1: EXP 1 +RPG1: Z + XWD 0,CTLIN +> + +OPEN2: EXP 1 +LD5C1: Z + XWD ABUF,0 + +OPEN3: EXP 14 +ILD1: Z + XWD 0,BUFR + +IFN MONLOD,< +OPEN4: EXP 16 +DIN1: SIXBIT /DSK/ + Z +> + +IFN PURESW,<DEPHASE +CODLN==.-HICODE> + SUBTTL DATA STORAGE + +IFN PURESW,< RELOC +LOWCOD: BLOCK CODLN> +DATBEG:! ;STORAGE AREA CLEARED FROM HERE ON INITIALIZATION +ZBEG:! ;CLEARED FROM HERE TO ZEND ON REINITIALIZATION +MDG: BLOCK 1 ;COUNTER FOR MUL DEF GLOBALS +IFN REENT,<HILOW: BLOCK 1 ;HIGHEST NON-BLOCK STMT IN LOW SEG> +STADDR: BLOCK 1 ;HOLDS STARTING ADDRESS +IFN KUTSW,<CORSZ: BLOCK 1> +IFN REENT,<VSW: BLOCK 1> +IFN NAMESW,<CURNAM: BLOCK 1> +IFN B11SW,<POLSW: BLOCK 1> +IFN FAILSW,<LINKTB: BLOCK 21> +IFN SPCHN,<CHNACB: BLOCK 1> +ZEND==.-1 +PDSAV: BLOCK 1 ;SAVED PUSHDOWN POINTER +COMSAV: BLOCK 1 ;LENGTH OF COMMON +PDLST: BLOCK PDLSIZ + +F.C: BLOCK 1 + BLOCK 1 ;STORE N HERE + BLOCK 1 ;STORE X HERE + BLOCK 1 ;STORE H HERE + BLOCK 1 ;STORE S HERE + BLOCK 1 ;STORE R HERE +B.C: BLOCK 1 + +NAMPTR: BLOCK 1 ;POINTER TO PROGRAM NAME +IFN NAMESW,< +PRGNAM: BLOCK 1 ;STORE BINARY FILE NAME-USED TO MAKE SYSTAT MORE MEANINGFUL +> +IFN REENT,< +HIGHX: BLOCK 1 +HIGHR: BLOCK 1 ;HOLD X AND R WHILE LOADING LOW SEG PIECES +LOWX: BLOCK 1 +HVAL: BLOCK 1 ;ORG OF HIGH SEG> +HVAL1: BLOCK 1 ;ACTUAL ORG OF HIGH SEG +LOWR: BLOCK 1 ;HOLD X AND R WHILE LOADING HISEG PIECES +IFN COBSW,<LOD37.: BLOCK 1> +IFN DMNSW,<KORSP: BLOCK 1> +IFN LDAC,<BOTACS: BLOCK 1> +IFN WFWSW,<VARLNG: BLOCK 1 +VARREL: BLOCK 1> +IFN SAILSW,<LIBFLS: BLOCK RELLEN*3 +PRGFLS: BLOCK RELLEN*3> +IFN MONLOD,< +HIRES: BLOCK 1 ;HIGHEST RESIDENT LOADED ADDRESS+1 +XRES: BLOCK 1 ;DISPLACEMENT OF RESIDENT PORTION OF LOADED IMAGE +XCUR: BLOCK 1 ;DISPLACEMENT OF CURRENT PORTION OF LOADED IMAGE (WINDOW) +DILADD: BLOCK 1 ;LOWEST ADDRESS IN CURRENT WINDOW +DIHADD: BLOCK 1 ;HIGHEST ADDRESS IN CURRENT WINDOW+1 +DIEND: BLOCK 1 ;ADDRESS+1 OF TOP OF WINDOW BUFFER +CURSET: BLOCK 1 ;CURRENT USETI/USETO NUMBER +RESBLK: BLOCK 1 ;NUMBER OF BLOCKS IN RESIDENT PORTION +GENERI: BLOCK 1 ;NAME OF CURRENT F/S +> +IFN TENEX,< +NLSTGL: BLOCK 1 ;FLAG INHIBITS MULT. LIST OF UNDEF. GLOBALS> +PT1: BLOCK 1 +IFN RPGSW,< +NONLOD: BLOCK 1 +SVRPG: BLOCK 1 +IFN TEMP,< +TMPFIL: BLOCK 2 +TMPFLG: BLOCK 1> +> +OLDDEV: BLOCK 1 ;OLD DEVICE ON LIBRARY SEARCH +LSTDEV: BLOCK 1 ;LAST DEVICE BEFORE THIS ONE +IFN PP,< +PPPN: BLOCK 1 ;PERM PPN +PPN: BLOCK 1 ;TEMP PPN +PPNE: BLOCK 1 +PPNV: BLOCK 1 +PPNW: BLOCK 1 +IFN SFDSW,<MYPPN: BLOCK 1 ;HOLD USER'S PPN +SFDADD: BLOCK 2 ;DEVICE AND SCAN SWITCH +SFD: BLOCK SFDSW+2 ;TEMP SFD BLOCK +PSFDAD: BLOCK 2 ;DEV AND SCAN SWITCH +PSFD: BLOCK SFDSW+2 ;PERM SFD BLOCK> + > +IFN B11SW,< +GLBCNT: BLOCK 1 +HDSAV: BLOCK 1 +HEADNM: BLOCK 1 +LFTHSW: BLOCK 1 +OPNUM: BLOCK 1 +SVHWD: BLOCK 1 +SVSAT: BLOCK 1 +PPDB: BLOCK PPDL+1 +> +HISTRT: BLOCK 1 ;JOBREL AT START OF LOADING +IFN L,< +LSPXIT: BLOCK 1 +RINITL: BLOCK 1 +OLDJR: BLOCK 1> +IFN SPCHN,< +LINKNR: BLOCK 1 ;CURRENT OVERLAY LINK NUMBER +CHNTAB: BLOCK 1 ;CHAIN VECTOR TABLE,, NEXT BLOCK +BEGOV: BLOCK 1 ;RELATIVE ADDRESS OF BEGINNING OF OVERLAY +CHNACN: BLOCK 1 ;RELATIVE POINTER FOR SAVED NAMPTR +> +TABCNT: BLOCK 1 +LIMBO: BLOCK 1 ;WHERE OLD CHARS. ARE STORED +IFN DIDAL,<LSTBLK: BLOCK 1 ;POINTER TO LAST PROG LOADED> +IFN EXPAND,<ALWCOR: BLOCK 1 ;CORE AVAILABLE TO USER> +IFN ALGSW,<%OWN: BLOCK 1 ;ADDRESS OF ALGOL OWN AREA + OWNLNG: BLOCK 1 ;LENGTH OF OWN BLOCK> +IFN REENT,<SVBRKS: BLOCK 1 ;XWD HIGH,LOW (PROG BREAKS)> +IFN FORSW,<FORLIB: BLOCK 1 ;0=LIB40,1=FOROTS> + SUBTTL BUFFER HEADERS AND HEADER HEADERS + +BUFO: BLOCK 1 ;CONSOLE INPUT HEADER HEADER +BUFO1: BLOCK 1 +BUFO2: BLOCK 1 + +BUFI: BLOCK 1 ;CONSOLE OUTPUT HEADER HEADER +BUFI1: BLOCK 1 +BUFI2: BLOCK 1 + +ABUF: BLOCK 1 ;AUXILIARY OUTPUT HEADER HEADER +ABUF1: BLOCK 1 +ABUF2: BLOCK 1 + +BUFR: BLOCK 1 ;BINARY INPUT HEADER HEADER +BUFR1: BLOCK 1 +BUFR2: BLOCK 1 + +DTIN: BLOCK 1 ;DECTAPE INPUT BLOCK +DTIN1: BLOCK 3 + +DTOUT: BLOCK 1 ;DECTAPE OUTPUT BLOCK +DTOUT1: BLOCK 3 + +IFN MONLOD,< +DIOUT: +IFE PURESW,<EXP .RBALC ;DISK IMAGE INPUT/OUTPUT BLOCK> +IFN PURESW,<BLOCK 1> + BLOCK 1 +DIOUT1: BLOCK .RBEST-2 ;BIG WASTE OF SPACE IN ORDER TO PRE ALLOCATE SOME DISK +IFE PURESW,<EXP DALLOC ;PRE ALLOCATE SOME BLOCKS> +IFN PURESW,<BLOCK 1> ;.RBEST + BLOCK 1 ;.RBALC +> + +TTY1: BLOCK TTYL ;TTY BUFFER AREA +BUF1: BLOCK BUFL ;LOAD BUFFER AREA +AUX: BLOCK ABUFL ;AUX BUFFER AREA + +IFN MONLOD,< +LOLIST: BLOCK 2 ;IOLIST FOR LOW PART OF IMAGE +HILIST: BLOCK 2 ;IOLIST FOR HIGH (VIRTUAL) PART OF LOADED IMAGE +> + +IFN RPGSW,< +CTLIN: BLOCK 3 +CTLNAM: BLOCK 3 +CTLBUF: BLOCK 203+1 +> + SUBTTL FORTRAN DATA STORAGE + +IFN STANSW,<PATCH: BLOCK 20 ;STANFORD HAS SEMI-INFINITE CORE> +SBRNAM: BLOCK 1 + + IFE K,< +TOPTAB: BLOCK 1 ;TOP OF TABLES +CTAB: BLOCK 1; COMMON +ATAB: BLOCK 1; ARRAYS +STAB: BLOCK 1; SCALARS +GSTAB: BLOCK 1; GLOBAL SUBPROGS +AOTAB: BLOCK 1; OFFSET ARRAYS +CCON: BLOCK 1; CONSTANTS +PTEMP: BLOCK 1; PERMANENT TEMPS +TTEMP: BLOCK 1; TEMPORARY TEMPS +IFN SPCHN,< +SAVBAS: BLOCK 1 ;HIGHEST RELATIVE ADDRESS IN PROGRAM> +COMBAS: BLOCK 1; BASE OF COMMON +LLC: BLOCK 1; PROGRAM ORIGIN +BITP: BLOCK 1; BIT POINTER +BITC: BLOCK 1; BIT COUNT +PLTP: BLOCK 1; PROGRAMMER LABEL TABLE +MLTP: BLOCK 1; MADE LABEL TABLE +SDS: BLOCK 1 ;START OF DATA STATEMENTS +SDSTP: BLOCK 1 ;START OF DATA STATEMENTS POINTER +BLKSIZ: BLOCK 1; BLOCK SIZE +MODIF: BLOCK 1; ADDRESS MODIFICATION +1 +SVFORH: BLOCK 1 ;SAVE H WHILE LOADING F4 PROGRAMS + +IOWDPP: BLOCK 2 +CT1: BLOCK 1 ;TEMP FOR C +LTC: BLOCK 1 +ITC: BLOCK 1 +ENC: BLOCK 1 +WCNT: BLOCK 1 ;DATA WORD COUNT +RCNT: BLOCK 1 ;DATA REPEAT COUNT + +LTCTEM: BLOCK 1 ;TEMP FOR LTC +DWCT: BLOCK 1 ;DATA WORD COUNT +IFN MANTIS,<MNTSYM: BLOCK 1 ;HOLDS MANTIS AUX SYMBOL POINTER> +> + + + VAR ;DUMP VARIABLES +DATEND:! ;END OF AREA CLEARED ON INITIALIZATION +IFN PURESW,<RELOC> + + SUBTTL REMAP UUO + +IFN PURESW,<HHIGO: PHASE BUF1 ;DON'T NEED BUF1 NOW> + +HIGO: CORE V, ;CORE UUO + JFCL ;NEVER FAILS +HINOGO: +IFN REENT,<MOVE D,HVAL ;GET CURRENT HIGH SEG TOP + CAMG D,HVAL1 ;ANYTHING LOADED IN HI-SEG + JRST HIRET ;NO + SUB D,HVAL1 ;SEE HOW MUCH + TRNE D,1777 ;JUST CROSSED A K BOUND? + JRST HIOK ;NO + HRRZ V,D ;LENGTH ONLY + ADD V,HISTRT ;PLUS BASE + CAMGE V,.JBREL ;WE MIGHT HAVE GOT 1K EXTRA + CORE V, + JFCL +HIOK: MOVE V,HISTRT ;NOW REMAP THE HISEG. + REMAP V, ;REMAP UUO. + JRST REMPFL ;FATAL ERROR.> +HIRET: IFN NAMESW,< +IFE TENEX,<MOVE W,CURNAM ;GET PROGRAM NAME> +IFN TENEX,<SKIPA W,.+1 + '(PRIV)'> + SETNAM W, ;SET IT FOR VERSION WATCHING> + JRST 0 ;EXECUTE CODE IN ACC'S + +IFN REENT,< +REMPFL: TTCALL 3,SEGMES ;PRINT SEGMES + EXIT ;AND DIE +SEGMES: ASCIZ /?REMAP FAILURE/ + + +> +IFN PURESW,<HIGONE: DEPHASE> + SUBTTL LISP LOADER + +;END HERE IF 1K LOADER REQUESTED. +IFN K,<IFE L,<END BEG> + +IFN L,< XLIST ;THE LITERALS + LIT ;MUST DUMP NOW SO THEY GET OUTPUT + LIST + +LODMAK: MOVEI A,LODMAK + MOVEM A,137 ;SET UP TO SAVE THE LISP LOADER + INIT 17 + SIXBIT /DSK/ + 0 + HALT + ENTER LMFILE + HALT + OUTPUT LMLST + STATZ 740000 + HALT + RELEASE + EXIT +LMFILE: SIXBIT /LISP/ + SIXBIT /LOD/ + 0 + 0 +LMLST: IOWD 1,.+1 ;IOWD + IOWD LODMAK-LD+1,137 ;AND CORE IMAGE + 0 + END LODMAK>> + + SUBTTL FORTRAN FOUR LOADER + +F4LD: TLNE F,SKIPSW!FULLSW ;ARE WE IN SKIP MODE + JRST REJECT ;YES,DON'T LOAD ANY OF THIS + MOVEI W,-2(S); GENERATE TABLES + CAIG W,(H) ;NEED TO EXPAND? +IFN EXPAND,<PUSHJ P,[PUSHJ P,XPAND + POPJ P, + JRST POPJM3]> +IFE EXPAND,< TLO F,FULLSW> + TLO N,F4SW; SET FORTRAN FOUR FLAG + HRRZ V,R; SET PROG BREAK INTO V + MOVEM V,LLC; SAVE FIRST WORD ADDRESS + HRRZM W,MLTP; MADE LABELS + HRRZM W,PLTP; PROGRAMMER LABELS + ADD W,[POINT 1,1]; GENERATE BIT-BYTE POINTER + MOVEM W,BITP + MOVEM W,SDSTP; FIRST DATA STATEMENT + AOS SDSTP; + HRREI W,-^D36; BITS PER WORDUM + MOVEM W,BITC; BIT COUNT + PUSHJ P,BITWX ;MAKE SURE OF ENOUGH SPACE + MOVE W,[JRST ALLOVE] ;LAST DATA STATEMENT + MOVEM W,(S) + +TEXTR: PUSHJ P,WORD; TEXT BY DEFAULT + HLRZ C,W + CAIN C,-1 + JRST HEADER; HEADER + MOVEI C,1; RELOCATABLE + TLNN F,FULLSW!SKIPSW ;DON'T LOAD IF EITHER SET + PUSHJ P,BITW; SHOVE AND STORE + JRST TEXTR; LOOP FOR NEXT WORD + +ABS: SOSG BLKSIZ; MORE TO GET + JRST TEXTR; NOPE +ABSI: PUSHJ P,WORD; + MOVEI C,0; NON-RELOCATABLE + TLNN F,FULLSW!SKIPSW ;DON'T LOAD IF EITHER SET + PUSHJ P,BITW; TYPE 0 + JRST ABS + SUBTTL PROCESS TABLE ENTRIES + +MDLB: TLNE F,FULLSW+SKIPSW; MADE LABEL PROC + JRST GLOBDF; NO ROOM AT THE IN + HLRZ C,MLTP; GET PRESENT SIZE + CAMGE C,BLKSIZ; IF NEW SIZE BIGGER, STR-R-RETCH + PUSHJ P,SMLT + HRRZ C,MLTP; GET BASE +MLPLC: ADD C,BLKSIZ; MAKE INDEX + TLNN F,FULLSW+SKIPSW; DONT LOAD + HRRZM V,(C); PUT AWAY DEFINITION +GLOBDF: PUSHJ P,WORD + TLNE F,FULLSW+SKIPSW ;SKIPPING THIS PROG? + JRST TEXTR ;YES, DON'T DEFINE + MOVEI C,(V); AND LOC + EXCH W,C + PUSHJ P,SYMXX; PUT IN DDT-SYMBOL TABLE + PUSHJ P,BITWX + JRST TEXTR + +PLB: TLNE F,FULLSW+SKIPSW + JRST GLOBDF + HLRZ C,PLTP; PRESENT SIZE + CAMGE C,BLKSIZ + PUSHJ P,SPLT + HRRZ C,PLTP + JRST MLPLC + SUBTTL STORE WORD AND SET BIT TABLE + +BITW: MOVEM W,@X; STORE AWAY OFFSET + IDPB C,BITP; STORE BIT + AOSGE BITC; STEP BIT COUNT + AOJA V,BITWX; SOME MORE ROOM LEFT + HRREI C,-^D36; RESET COUNT + MOVEM C,BITC + SOS PLTP + SOS BITP; ALL UPDATED +IFE EXPAND,<HRL C,MLTP + SOS MLTP + HRR C,MLTP> +IFN EXPAND,<HRRZ C,MLTP; TO ADDRESS + SUBI C,1 + CAIG C,(H) + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADDI C,2000 + JRST POPJM2] + SOS MLTP + HRLI C,1(C)> + HRRZ T,SDSTP; GET DATA POINTER + BLT C,-1(T); MOVE DOWN LISTS + AOJ V,; STEP LOADER LOCATION +BITWX: IFN REENT,< + TLNE F,HIPROG + JRST FORTHI> + CAIGE H,@X + MOVEI H,@X ;KEEP H SET RIGHT FOR HISEG STUFF +BITWX2: HRRZ T,MLTP + CAIG T,(H); OVERFLOW CHECK +IFE EXPAND,<TLO F,FULLSW> +IFN EXPAND,<PUSHJ P, [PUSHJ P,XPAND + POPJ P, + JRST POPJM3]> + POPJ P,; + +SMLT: SUB C,BLKSIZ; STRETCH + MOVS W,MLTP ;LEFT HALF HAS OLD BASE + ADD C,MLTP ;RIGHT HALF HAS NEW BASE +IFN EXPAND,< HRRZS C ;GET RID OF COUNT + CAIG C,(H) + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADD W,[XWD 2000,0] + ADDI C,2000 + JRST POPJM2]> + HRRM C,MLTP ;PUT IN NEW MLTP + HLL C,W ;FORM BLT POINTER + ADDI W,(C) ;LAST ENTRY OF MLTP + HRL W,BLKSIZ ;NEW SIZE OF MLTP + HLLM W,MLTP ;... +SLTC: BLT C,0(W); MOVE DOWN (UP?) + POPJ P,; + +SPLT: SUB C,BLKSIZ + MOVS W,MLTP; + ADDM C,PLTP + ADD C,MLTP +IFN EXPAND,< HRRZS C + CAIG C,(H) + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADD W,[XWD 2000,0] + ADDI C,2000 + JRST POPJM2]> + HRRM C,MLTP ;PUT IN NEW MLTP + HLL C,W + HLRZ W,PLTP ;OLD SIZE OF PL TABLE + ADD W,PLTP ;NEW BASE OF PL TABLE + HRL W,BLKSIZ ;NEW SIZE OF PL TABLE + HLLM W,PLTP ;INTO POINTER + JRST SLTC + + +IFN REENT,< +FORTHI: HRRZ T,.JBREL ;CHECK FOR CORE OVERFLOW + CAIGE T,@X + PUSHJ P,[PUSHJ P,HIEXP + POPJ P, + JRST POPJM3] ;CHECK AGAIN + JRST BITWX2> + SUBTTL PROCESS END CODE WORD + +ENDS: PUSHJ P,WORD; GET STARTING ADDRESS + JUMPE W,ENDS1; NOT MAIN + ADDI W,(R); RELOCATION OFFSET + TLNE N,ISAFLG; IGNORE STARTING ADDRESS + JRST ENDS1 + HRRZM W,STADDR ;STORE STARTING ADDRESS +IFN NAMESW,<MOVE W,NAMPTR ;GET POINTER + MOVE W,1(W) ;SET UP NAME + PUSHJ P,LDNAM + MOVE W,DTIN + MOVEM W,PRGNAM> +ENDS1: PUSHJ P,WORDPR ;DATA STORE SIZE + HRRZM C,PTEMP ;NUMBER OF PERMANENT TEMPS + MOVEM V,CCON; START OF CONSTANTS AREA + JUMPE W,E1; NULL + MOVEM W,BLKSIZ ;SAVE COUNT + MOVEI W,0(V) ;DEFINE CONST. + MOVE C,CNR50 ;... + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMPT ;... + PUSHJ P,GSWD ;STORE CONSTANT TABLE +E1: MOVEI W,0(V); GET LOADER LOC + EXCH W,PTEMP; STORE INTO PERM TEMP POINTER + ADD W,PTEMP; FORM TEMP TEMP ADDRESS + MOVEM W,TTEMP; POINTER + MOVEM V,GSTAB; STORE LOADER LOC IN GLOBSUB + MOVEM H,SVFORH + MOVE C,TTR50 ;DEFINE %TEMP. + TLNE F,SKIPSW!FULLSW + JRST E1A + PUSHJ P,SYMPT ;... + MOVE C,PTR50 ;DEFINE (IF EXTANT) TEMP. + MOVEI W,0(V) ;... + CAME W,TTEMP ;ANY PERM TEMPS? + PUSHJ P,SYMPT ;YES, DEFINE +E1A: PUSHJ P,WORD; NUMBER OF GLOBSUBS + JUMPE W,E11 + MOVEM W,BLKSIZ ;SIZE OF GLOBSUB + PUSHJ P,GSWD ;STORE GLOBSUB TABLE +E11: MOVEM V,STAB; SCALARS + PUSHJ P,WORD; HOW MANY? + JUMPE W,E21; NONE + PUSHJ P,GSWDPR ;STORE SCALAR TABLE +E21: MOVEM V,ATAB; ARRAY POINTER + PUSHJ P,WORD; COMMENTS FOR SCALARS APPLY + JUMPE W,E31 + PUSHJ P,GSWDPR ;STORE ARRAY TABLE +E31: MOVEM V,AOTAB; ARRAYS OFFSET + PUSHJ P,WORD; SAME COMMENTS AS ABOVE + JUMPE W,E41 + PUSHJ P,GSWDPR ;STORE ARRAY OFFSET TABLE +E41: PUSHJ P,WORD; TEMP, SCALAR, ARRAY SIZE + TLNE F,FULLSW!SKIPSW ;SKIPPING THIS PROG? + MOVEI W,0 ;DON'T ACCEPT GLOB SUBPROG REQUESTS + MOVEM V,CTAB; SETUP COMMON TABLE POINTER + ADD W,GSTAB; GLOBAL SUBPROG BASE + MOVEM W,COMBAS; START OF COMMON +IFN SPCHN,<MOVEM W,SAVBAS ;SAVE AS HIGHEST ADDRESS IN PROGRAM> + PUSHJ P,WORD; COMMON BLOCK SIZE + HRRZM W,BLKSIZ + JUMPE W,PASS2; NO COMMON +COMTOP: PUSHJ P,WORDPR ;GET A COMMON PAIR + TLNE F,SKIPSW!FULLSW ;IF SKIPPING + JRST COMCO1 ;DON'T USE + PUSHJ P,SDEF; SEARCH + JRST COMYES; ALREADY THERE + HRLS W + HRR W,COMBAS; PICK UP THIS COMMON LOC + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMXX; DEFINE IT + MOVS W,W; SWAP HALFS + ADD W,COMBAS; UPDATE COMMON LOC + HRRM W,COMBAS; OLD BASE PLUS NEW SIZE + HLRZS W; RETURN ADDRESS + TLZ C,400000 + TLNN F,SKIPSW!FULLSW + PUSHJ P,SYMXX +COMCOM: PUSHJ P,CWSTWX ;STORE A WORD PAIR +COMCO1: SOS BLKSIZ + SOSLE BLKSIZ + JRST COMTOP + JRST PASS2 + +COMYES: HLRZ C,2(A); PICK UP DEFINITION + CAMLE W,C; CHECK SIZE + JRST ILC; ILLEGAL COMMON + MOVE C,1(A); NAME + HRRZ W,2(A); BASE + JRST COMCOM + +PRSTWX: PUSHJ P,WORDPR ;GET A WORD PAIR +CWSTWX: EXCH C,W ;SPACE TO STORE FIRST WORD OF PAIR? + PUSHJ P,WSTWX ;... + EXCH C,W ;THERE WAS; IT'S STORED +WSTWX: TLNE F,FULLSW!SKIPSW ;SPACE FOR ANOTHER WORD? + POPJ P, ;NOPE, RETURN + MOVEM W,@X ;YES, STORE IT. + AOJA V,BITWX ;TELL THE TABLES ABOUT IT; THEN RETURN + + +GSWD: PUSHJ P,WORD ;GET WORD FROM TABLE + PUSHJ P,WSTWX ;STASH IT + SOSE BLKSIZ ;FINISHED? + JRST GSWD ;NOPE, LOOP + POPJ P, ;TRA 1,4 + +GSWDPR: MOVEM W,BLKSIZ ;KEEP COUNT +GSWDP1: PUSHJ P,PRSTWX ;GET AND STASH A PAIR + SOS BLKSIZ ;FINISHED? + SOSLE BLKSIZ ;... + JRST GSWDP1 ;NOPE, LOOP + POPJ P, ;TRA 1,4 + SUBTTL BEGIN HERE PASS2 TEXT PROCESSING + +PASS2: ADDI V,(X) +IFN REENT,<TLNE F,HIPROG + HRRZ V,H> + MOVEM V,TOPTAB ;SAVE FOR OVERLAP CHECKING + TLNE F,FULLSW+SKIPSW; ABORT? + JRST ALLOVE; YES + MOVE V,LLC ;PICK UP PROGRAM ORIGIN + CAML V,CCON ;IS THIS A PROGRAM? + JRST FBLKD ;NO, GO LOOK FOR FIRST BLK DATA +IFE L,<IFN REENT,<TLNN F,HIPROG ;DON'T BOTHER IF IN HISEG, CHAIN NOT SMART ENOUGH> + TLOE N,PGM1 ;YES, IS THIS FIRST F4 PROG? + JRST NOPRG ;NO + HRR W,COMBAS ;YES, PLACE PROG BREAK IN LH + HRLM W,.JBCHN(X) ;FOR CHAIN> +NOPRG: HRRZ W,PLTP; GET PROG TABLE BASE + HLRZ C,PLTP; AND SIZE + ADD W,C; COMPUTE END OF PROG TABLE + ADD W,[POINT 1,1]; AND BEGINNING OF BIT TABLE + EXCH W,BITP; SWAP POINTERS +PASS2B: ILDB C,BITP; GET A BIT + JUMPE C,PASS2C; NO PASS2 PROCESSING + PUSHJ P,PROC; PROCESS A TAG + JRST PASS2B; MORE TO COME + JRST ENDTP; + +PROC: LDB C,[POINT 6,@X,23]; TAG + SETZM MODIF; ZERO TO ADDRESS MODIFIER + TRZE C,40 + AOS MODIF + MOVEI W,TABDIS; HEAD OF TABLE + HRLI W,-TABLNG ;SET UP FOR AOBJN + HLRZ T,(W); GET ENTRY + CAME T,C; CHECK + AOBJN W,.-2 + JUMPGE W,LOAD4A ;RAN OUT OF ENTRIES + HRRZ W,(W); GET DISPATCH + LDB C,[POINT 12,@X,35] + JRST (W); DISPATCH + + +PASS2C: PUSHJ P,PASS2A + JRST PASS2B + JRST ENDTP + +TABDIS: XWD 11,PCONS; CONSTANTS + XWD 06,PGS; GLOBAL SUBPROGRAMS + XWD 20,PST; SCALARS + XWD 22,PAT; ARRAYS + XWD 01,PATO; ARRAYS OFFSET + XWD 00,PPLT; PROGRAMMER LABELS + XWD 31,PMLT; MADE LABESL + XWD 26,PPT; PERMANENT TEMPORARYS + XWD 27,PTT; TEMPORARY TEMPORARYS +TABLNG==.-TABDIS + ;DISPATCH ON A HEADER + +HEADER: CAMN W,[EXP -2]; END OF PASS ONE + JRST ENDS + LDB C,[POINT 12,W,35]; GET SIZE + MOVEM C,BLKSIZ + ANDI W,770000 + JUMPE W,PLB; PROGRAMMER LABEL + CAIN W,500000; ABSOLUTE BLOCK + JRST ABSI; + CAIN W,310000; MADE LABEL + JRST MDLB; MADE LABEL + CAIN W,600000 + JRST GLOBDF + CAIN W,700000; DATA STATEMENT + JRST DATAS +IFN MANTIS,<CAIN W,770000; SPECIAL DEBUGGER DATA + JRST SPECBUG> + JRST LOAD4A; DATA STATEMENTS WILL GO HERE + +TTR50: RADIX50 10,%TEMP. +PTR50: RADIX50 10,TEMP. +CNR50: RADIX50 10,CONST. + +IFN MANTIS,< +SPECB: CAML W,.JBREL ;ROOM? + AOJA W,[CORE W, ;NO, GET IT + JRST MORCOR + JRST .+1] ;GOT IT + PUSHJ P,WORD ;GET SPECIAL DATA + MOVEM W,@MNTSYM ;DEPOSIT IT + SOSG BLKSIZ ;MORE? + JRST TEXTR ;NO +SPECBUG:TRNN N,MANTFL ;ARE WE LOADING MANTIS DATA? + JRST [PUSHJ P,WORD ;NO, READ A WORD + SOSG BLKSIZ ;AND IGNORE IT + JRST TEXTR ;BLOCK EXHAUSTED? + JRST @.] ;NO, LOOP + AOS W,MNTSYM ;STEP SPECIAL POINTER + SOJG W,SPECB ;LOOP IF SETUP ALREADY + HRRZ W,.JBREL ;SET IT UP NOW + MOVEM W,MNTSYM + JRST SPECBUG ;AND STEP IT> + SUBTTL ROUTINES TO PROCESS POINTERS + +PCONS: ADD C,CCON; GENERATE CONSTANT ADDRESS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PSTA: PUSHJ P,SWAPSY ;NON-COMMON SCALARS AND ARRAYS + ADDI C,(R); RELOCATE +PCOM1: PUSHJ P,SYDEF ;... +PCOMX: ADD C,MODIF ;ADDR RELOC FOR DP + HRRM C,@X; REPLACE ADDRESS +PASS2A: AOJ V,; STEP READOUT POINTER + CAML V,CCON ;END OF PROCESSABLES? +CPOPJ1: AOS (P); SKIP + POPJ P,; + +PAT: SKIPA W,ATAB ;ARRAY TABLE BASE +PST: MOVE W,STAB ;SCALAR TABLE BASE + ROT C,1 ;SCALE BY 2 + ADD C,W ;ADD IN TABLE BASE + ADDI C,-2(X); TABLE ENTRY + HLRZ W,(C); CHECK FOR COMMON + TRNN W,7777 ;IGNORE SIX BITS ;U/O-LKS + JRST PSTA ;NO COMMON ;U/O-LKS + PUSHJ P,COMDID ;PROCESS COMMON + JRST PCOM1 + +COMDID: ANDI W,7777 ;IGNORE SIX BITS ;U/O-LKS + LSH W,1 ;PROCESS COMMON TABLE ENTRIES + ADD W,CTAB; COMMON TAG + ADDI W,-2(X); OFFSET + PUSHJ P,SWAPSY; GET SYMBOL AND SET TO DEFINED + ADD C,1(W); BASE OF COMMON + POPJ P, ;RETURN + +PATO: ROT C,1 + ADD C,AOTAB; ARRAY OFFSET + ADDI C,-2(X); LOADER OFFSET + MOVEM C,CT1; SAVE CURRENT POINTER + HRRZ C,1(C); PICK UP REFERENCE POINTER + ANDI C,7777; MASK TO ADDRESS + ROT C,1; ALWAYS A ARRAY + ADDI C,-2(X) + ADD C,ATAB + HLRZ W,(C); COMMON CHECK + TRNN W,7777 ;IGNORE SIX BITS ;U/O-LKS + JRST NCO ;U/O-LKS + PUSHJ P,COMDID ;PROCESS COMMON + PUSHJ P,SYDEF + MOVE C,CT1 + HRRE C,(C) + ADD C,1(W) + JRST PCOMX + NCO: PUSHJ P,SWAPSY; + ADDI C,(R) ;DEFINE SYMBOL IN TRUE LOC + PUSHJ P,SYDEF ;... + MOVE C,CT1 + HRRZ C,(C) ;OFFSET ADDRESS PICKUP + ADDI C,(R) ;WHERE IT WILL BE + JRST PCOMX ;STASH ADDR AWAY + +PTT: ADD C,TTEMP; TEMPORARY TEMPS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PPT: ADD C,PTEMP; PERMANENT TEMPS + SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + +PGS: ADD C,GSTAB; GLOBSUBS + ADDI C,-1(X); OFFSET + MOVE C,(C) + TLC C,640000; MAKE A REQUEST + PUSHJ P,TBLCHK ;CHECK FOR OVERLAP + MOVEI W,(V); THIS LOC + HLRM W,@X; ZERO RIGHT HALF + PUSHJ P,SYMXX + JRST PASS2A + +SYDEF: TLNE N,SYDAT ;SYMBOL WANTS DEFININITION? + POPJ P, ;NO, GO AWAY + PUSH P,C ;SAVE THE WORLD + PUSH P,W + PUSHJ P,TBLCHK ;CHECK FOR OVERLAP + MOVE W,C + SKIPE C,T ;PICKUP VALUE + PUSHJ P,SYMXX + POP P,W + POP P,C + POPJ P,; + +PMLT: ADD C,MLTP + JRST .+2 +PPLT: ADD C,PLTP + HRRZ C,(C) + JRST PCOMX + +SYMXX: PUSH P,V + PUSHJ P,SYMPT + POP P,V +IFE REENT,<POPJ P,> +IFN REENT,<JRST RESTRX> + +SWAPSY: MOVEI T,0; SET TO EXCHANGE DEFS + EXCH T,1(C); GET NAME +IFN MANTIS,<TRNE N,MANTFL ;LOADING MANTIS DATA? + SKIPA C,(C) ;YES, GET FULLWORD VALUE> + HRRZ C,(C) ;GET HALFWORD VALUE + POPJ P, +TBLCHK: HRRZ W,MLTP ;GETT TOP OV TABLES + SUBI W,2 + CAMG W,TOPTAB ;WILL IT OVERLAP +IFE EXPAND,<TLO F,FULLSW> +IFN EXPAND,<JRST [PUSHJ P,XPAND + POPJ P, + JRST TBLCHK]> + POPJ P, + SUBTTL END OF PASS2 + +ALLOVE: TLZ N,F4SW ;END OF F4 PROG + HRRZ V,SDSTP ;GET READY TO ZERO OUT DATA STMTS + SETZM (V) ;AT LEAST ONE THERE + CAIL V,(S) ;IS THERE MORE THAN ONE?? + JRST NOMODS ;NO + HRLS V + ADDI V,1 ;SET UP BLT + BLT V,(S) ;ZERO OUT ALL OF IT +NOMODS: MOVE H,SVFORH + TLNE F,FULLSW!SKIPSW + JRST HIGH3A + HRR R,COMBAS ;TOP OF THE DATA + CAMG H,SDS ;HIGHEST LOC GREATER THAN DATA STATEMENTS? + JRST HIGH3A ;NO, RETURN + ADDI H,1(S) ;YES, SET UP MEANINGFUL ERROR COMMENT + SUB H,SDS ;... + TLO F,FULLSW ;INDICATE OVERFLO +HIGH3A: IFN REENT,<SETZ W, ;CAUSES TROUBLE OTHERWISE + TLZE F,HIPROG + JRST HIGHN1 +IFE SPCHN,<HRRZ V,GSTAB> +IFN SPCHN,<HRRZ V,SAVBAS ;GET END OF PROGRAM RELATIVE ADDRESS + ;THIS MEANS THAT WITH SPECIAL CHAINING THE + ;ENTIRE LAST PROGRAM OF A LINK WILL BE SAVED + ;BUT COMMON DECLARED FOR THE FIRST TIME + ;IN THAT PROGRAM WON'T BE. THIS SHOULD NOT + ;CAUSE PROBLEMS BECAUSE IF COMMON APPEARS HERE + ;NOBODY ELSE CAN REFERENCE IT ANYWAY. > + MOVEI V,@X + CAMLE V,HILOW + MOVEM V,HILOW> + HRRZ C,R + JRST HIGH31 ;RETURN + +DATAS: TLNE F,FULLSW+SKIPSW + JRST DAX + MOVEI C,(S) ;ADDR OF WORD UNDER SYMBOL TABLE + MOVN W,BLKSIZ ;HOW FAR DOWN TO BLT + ADDM W,PLTP ;UPDATE TABLE POINTERS + ADDM W,BITP ;... + ADDM W,SDSTP ;... + ADD C,W ;RH(C):= WHEN TO STOP BLT + HRL C,MLTP ;SOURCE OF BLTED DATA + ADD W,MLTP ;UPDATE, GET DESTINATION OF BLT DATA +IFN EXPAND,< HRRZS W ;GET RID OF LEFT HALF + CAIG W,(H) + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADDI W,2000 + ADD C,[XWD 2000,2000] + JRST POPJM2]> + HRRM W,MLTP ;NO SET THIS SO EXTRA CORE NOT ZEROED + HLL W,C ;FORM BLT POINTER + BLT W,-1(C) ;MOVE TABLES DOWN (BUT NOT JRST ALLOVE) + PUSHJ P,BITWX +DAX: PUSHJ P,WORD; READ ONE WORD + TLNN F,FULLSW+SKIPSW + MOVEM W,(C) + SOSLE BLKSIZ ;COUNT OF DATA SEQUENCE SIZE + AOJA C,DAX ;INCREMENT DATA SEQUENCE DEPOSIT LOC + JRST TEXTR; DONE + FBLKD: IFE L,<IFN REENT,< + TLNN F,HIPROG> + TLOE N,BLKD1 ;IS THIS FIRST BLOCK DATA? + JRST ENDTP ;NO + HRR V,COMBAS ;PLACE PROG BREAK IN RH FOR + HRRM V,.JBCHN(X) ;CHAIN> +ENDTP: TLNE F,FULLSW+SKIPSW + JRST ALLOVE + HRR V,GSTAB +ENDTP0: CAML V,STAB; ANY MORE GLOBSUBS + JRST ENDTP2; NO + MOVE C,@X; GET SUBPROG NAME + PUSHJ P,SREQ; IS IT ALLREADY REQUESTED + AOJA V,ENDTP0; YES + PUSHJ P,SDEF; OR DEFINED + AOJA V,ENDTP0; YES + PUSHJ P,TBLCHK + MOVEI W,0 ;PREPARE DUMMY LINK + TLNN F,FULLSW+SKIPSW ;ABORT + PUSHJ P,SYM3X; PUT IN DUMMY REQUEST + PUSHJ P,BITWX; OVERLAP CHECK + AOJA V,ENDTP0 +ENDTP2: SETZM PT1 +ENDTPW: HRRZ V,SDSTP +IFN EXPAND,<IFN REENT,<TLNE F,HIPROG + JRST ENDTPI> + SUBI V,(X) + CAMG V,COMBAS + PUSHJ P,[SUB V,COMBAS + MOVNS V + JRST XPAND9] + JFCL ;FOR ERROR RETURN FROM XPAND +ENDTPH: HRR V,SDSTP> + HRRZM V,SDS ;DATA STATEMENT LOC +ENDTP1: SUBI V,(X); COMPENSATE FOR OFFSET + MOVE W,@X; GET WORD + TLNE W,-1; NO LEFT HALF IMPLIES COUNT + JRST DODON; DATA DONE + ADD W,[MOVEI W,3] + ADDI W,@X + EXCH W,@X + AOJ V, + ADD W,@X; ITEMS COUNT + MOVEM W,ITC + MOVE W,[MOVEM W,LTC] + MOVEM W,@X; SETUP FOR DATA EXECUTION + AOJ V, + MOVSI W,(MOVEI W,0) + EXCH W,@X + MOVEM W,ENC; END COUNT + AOJ V, + MOVEI W,@X + ADDM W,ITC +LOOP: MOVE W,@X + HLRZ T,W; LEFT HALF INST. + ANDI T,777000 + CAIN T,254000 ;JRST? + JRST WRAP ;END OF DATA + CAIN T,260000 ;PUSHJ? + JRST PJTABL(W) ;DISPATCH VIA TABLE + CAIN T,200000; MOVE? + AOJA V,INNER + CAIN T,270000; ADD? + JRST ADDOP + CAIN T,221000; IMULI? + AOJA V,LOOP + CAIE T,220000; IMUL? + JRST LOAD4A; NOTA +INNER: HRRZ T,@X; GET ADDRESS + TRZE T,770000; ZERO TAG? + SOJA T,CONPOL; NO, CONSTANT POOL + JUMPE T,FORCNF + SUB T,PT1; SUBTRACT INDUCTION NUMBER + ASH T,1 + SUBI T,1 + HRRM T,@X + HLRZ T,@X + ADDI T,P + HRLM T,@X + AOJA V,LOOP +IFN EXPAND,<IFN REENT,< +ENDTPI: HRRZ V,COMBAS + MOVEI V,@X + CAMLE V,.JBREL + JRST [PUSHJ P,HIEXP + JRST ENDTPH + JRST ENDTPI] + JRST ENDTPH>> +FORCNF: ERROR ,</FORTRAN CONFUSED ABOUT DATA STATEMENTS!/> + JRST ILC1 + CONPOL: ADD T,ITC; CONSTANT BASE + HRRM T,@X + AOJA V,LOOP + +ADDOP: HRRZ T,@X + TRZE T,770000 + SOJA T,CONPOL +SKIPIN: AOJA V,LOOP + +PJTABL: JRST DWFS ;PUSHJ 17,0 + AOSA PT1 ;INCREMENT DO COUNT + SOSA PT1; DECREMENT DO COUNT + SKIPA W,[EXP DOINT.] + MOVEI W,DOEND. + HRRM W,@X + AOJA V,SKIPIN ;SKIP A WORD + +DWFS: MOVEI W,DWFS. + HRRM W,@X + AOJ V, + TLO N,SYDAT + PUSHJ P,PROC; PROCESS THE TAG + JUMPGE V,DATAOV ;DATA STATEMENT BELOW CODE TOP + JRST LOOP ;PROPER RETURN + +DOINT.: POP P,V; GET ADDRESS OF INITIAL VALUE + PUSH P,(V); STORE INDUCTION VARIABLE + AOJ V, + PUSH P,V; INITIAL ADDRESS + JRST (V) + +DOEND.: HLRE T,@(P) ;RETAIN SIGN OF INCREMENT + ADDM T,-2(P); INCREMENT + HRRE T,@(P); GET FINAL VALUE + SUB T,-2(P) ;FINAL - CURRENT + IMUL T,@(P) ;INCLUDE SIGN OF INCREMENT + JUMPL T,DODONE ;SIGN IS ONLY IMPORTANT THING + POP P,(P); BACK UP POINTER + JRST @(P) + DODONE: POP P,-1(P); BACK UP ADDRESS + POP P,-1(P) + JRST CPOPJ1 ;RETURN + +WRAP: MOVE W,ENC; NUMBER OF CONSTANTS + ADD W,ITC; CONSTANT BASE + MOVEI C,(W); CHAIN + HRRM C,@X + MOVEI V,(W); READY TO GO + JRST ENDTP1 + +DODON: TLZ N,RCF!SYDAT!DZER ;DATA STATEMENT FLAGS + MOVE W,PTEMP ;TOP OF PROG + ADDI W,(X) ;+OFFSET + HRRZ C,SDS +IFE EXPAND,<SUBI C,(X) ;CHECK FOR ROOM + CAMGE C,COMBAS ;IS IT THERE + TLO F,FULLSW ;NO (DONE EARLIER IF EXPAND) + HRRZ C,SDS> + SUBI C,1 ;GET ONE LESS (TOP LOCATION TO ZERO) +IFN REENT,<TLNE F,HIPROG + MOVE C,.JBREL> +SECZER: CAMLE W,C ;ANY DATA TO ZERO? + JRST @SDS ;NO, DO DATA STATEMENTS + ;FULLSW IS ON IF COMBAS GT. SDS + TLNN F,FULLSW+SKIPSW ;SHOULD WE ZERO? + SETZM (W) ;YES, DO SO + TLON N,DZER ;GO BACK FOR MORE? + AOJA W,SECZER ;YES, PLEASE + HRLI W,-1(W) ;SET UP BLT POINTER TO ZERO DATA + TLNN F,FULLSW+SKIPSW ;SHOULD WE ZERO? + BLT W,(C) ;YES, DO SO + JRST @SDS ;GO DO DATA STATEMENTS + +DATAOV: ERROR 0,</DATA STATEMENT OVERFLOW!/> + JRST ILC1 + DREAD: TLNE N,RCF; NEW REPEAT COUNT NEEDED + JRST FETCH; NO + MOVE W,LTC + MOVEM W,LTCTEM + MOVE W,@LTC; GET A WORD + HLRZM W,RCNT; SET REPEAT COUNT + HRRZM W,WCNT; SET WORD COUNT + POP W,(W); SUBTRACT ONE FROM BOTH HALFS + HLLM W,@LTC; DECREMENT REPEAT COUNT + AOS W,LTC; STEP READOUT + TLO N,RCF +FETCH: MOVE W,@LTC + AOS LTC + SOSE WCNT + POPJ P,; + SOSN RCNT + JRST DOFF. + MOVE V,LTCTEM; RESTORE READOUT + MOVEM V,LTC +DOFF.: TLZ N,RCF; RESET DATA REPEAT FLAG + POPJ P,; + +DWFS.: MOVE T,(P) + AOS (P) + MOVE T,(T); GET ADDRESS + HLRZM T,DWCT; DATA WORD COUNT + HRRZS T + ADDI T,(W); OFFSET +IFN REENT,<HRRZS T ;CLEAR LEFT HALF INCASE OF CARRY + CAML T,HVAL1 + JRST [ADD T,HIGHX + HRRZS T ;MUST GET RID OF LEFT HALF + CAMLE T,.JBREL + JRST DATAOV ;IN CASE FORTRAN GOOFS ON LIMITS + JRST DWFS.1] + ADD T,LOWX> + HRRZS T +IFE REENT,<ADDI T,(X)> + CAML T,SDS + JRST DATAOV +DWFS.1: PUSHJ P,DREAD ;GET A DATA WORD + HRRZS T +IFN REENT,<CAMG T,.JBREL ;JUST TO MAKE SURE> + CAMN T,SDS + JRST DATAOV + TLNN F,FULLSW+SKIPSW ;LOAD THE NEXT DATA ITEM? + MOVEM W,(T) ;YES, STORE IT + SOSE W,DWCT; STEP DOWN AND TEST + AOJA T,DWFS.1 ;ONE MORE TIME, MOZART BABY! + POPJ P, + SUBTTL ROUTINE TO SKIP FORTRAN OUTPUT + +;SUBSECTION OF THE ROUTINE TO HANDLE OUTPUT FROM THE +;FORTRAN IV COMPILER. THE MAIN OBJECT OF THE ROUTINE IS TO +;LOOK FOR THE END BLOCK. CODE TAKEN FROM FUDGE2. + +MACHCD: HRRZ C,W ;GET THE WORD COUNT + PUSHJ P,WORD ;INPUT A WORD + SOJG C,.-1 ;LOOP BACK FOR REST OF THE BLOCK + ;GO LOOK FOR NEXT BLOCK + +REJECT: PUSHJ P,WORD ;READ A FORTRAN BLOCK HEADER + TLC W,-1 ;TURN ONES TO ZEROES IN LEFT HALF + TLNE W,-1 ;WAS LEFT HALF ALL ONES? + JRST REJECT ;NO, IT WAS CALCULATED MACHINE CODE + CAIN W,-2 ;YES, IS RIGHT HALF = 777776? + JRST ENDST ;YES, PROCESS F4 END BLOCK + LDB C,[POINT 6,W,23];GET CODE BITS FROM BITS 18-23 + TRZ W,770000 ;THEN WIPE THEM OUT + CAIN C,77 ;IS IT SPECIAL DEBUGGER DATA? + JRST MACHCD ;YES, TREAT IT LIKE DATA + CAIE C,70 ;IS IT A DATA STATEMENT? + CAIN C,50 ;IS IT ABSOLUTE MACHINE CODE? + JRST MACHCD ;YES, TREAT IT LIKE DATA STATEMENTS + PUSHJ P,WORD ;NO, ITS A LABEL OF SOME SORT + JRST REJECT ;WHICH CONSISTS OF ONE WORD + ;LOOK FOR NEXT BLOCK HEADER + +ENDST: MOVEI C,1 ;TWO WORDS, FIVE TABLES, ONE WORD, ONE TABLE + MOVEI T,6 ;TO GO +F4LUP1: PUSHJ P,WORD ;GET TABLE MEMBER +F4LUP3: SOJGE C,F4LUP1 ;LOOP WITHIN A TABLE + JUMPL T,LOAD1 ;LAST TABLE - RETURN + SOJG T,F4LUP2 ;FIRST TWO WORDS AND FIVE TABLES + JUMPE T,F4LUP1 ;COMMON LENGTH WORD +F4LUP2: PUSHJ P,WORD ;READ HEADER WORD + MOVE C,W ;COUNT TO COUNTER + JRST F4LUP3 ;STASH + SUBTTL LISP LOADER + +IFE L,< END BEG> +IFN L,< XLIST + LIT + LIST + +LODMAK: MOVEI A,LODMAK + MOVEM A,137 ;SET UP TO SAVE THE LISP LOADER + INIT 17 + SIXBIT /DSK/ + 0 + HALT + ENTER LMFILE + HALT + OUTPUT LMLST + STATZ 740000 + HALT + RELEASE + EXIT +LMFILE: SIXBIT /LISP/ + SIXBIT /LOD/ + 0 + 0 +LMLST: IOWD 1,.+1 ;IOWD + IOWD LODMAK-LD+1,137 ;AND CORE IMAGE + 0 + END LODMAK> + \ No newline at end of file diff --git a/src/lptser.mac b/src/lptser.mac new file mode 100644 index 0000000..8d4ea0b --- /dev/null +++ b/src/lptser.mac @@ -0,0 +1,163 @@ +TITLE LPTSER - LINE PRINTER SERVICE ROUTINE +SUBTTL 8-4-65 +INTERNAL LPTINT,LPTINI +EXTERNAL LPTCHN, LPTCHL, LPTRET, OUT, WAIT1, LPTSAV, IOSET +EXTERNAL ADVBFE, SETIOD,ILLINP,LPTCHB,LPTCLB + +;DEVICE DATA BLOCK LINKAGE +EXTERNAL LPTDAT,LPTCHR,LPTIOS,LPTSER,LPTMOD,LPTBUF,LPTPTR +EXTERNAL LPTADR,LPTSV1 +ENTRY LPTDSP + + +,LPT PARAMETER ASSIGNMENTS + +, LPT CONTROL REGISTER + LPTCLR=2000 ;CLEAR BUFFER + LPTDON=100 ;DONE FLAG + LPTERR=400 ;ERROR FLAG + LPTLOV=1000 ;LINE OVERFLOW + +, SPECIAL IO STATUS WORD ASSIGNMENTS + LPTADV=100000 + +REPEAT 0,< +, LPT DATABLOCK + +LPTDAT: SIXBIT .LPT. +LPTCHR: 32 +LPTIOS: 0 +LPTSER: EXP LPTDSP +LPTMOD: XWD 0,3 + 0 +LPTBUF: 0 +LPTPTR: 0 +LPTADR: XWD PROG,0 +LPTSV1: 0 +> + +, LPT SERVICE DISPATCH TABLE + +LPTDSP: JRST LPTINI ;RELEASE + JRST LPTCLS ;CLOSE + JRST LPTOUT ;OUTPUT + JRST ILLINP ;INPUT + +LPTINI: CONO LPT,LPTCLR ;LPT INITIALIZE + HLLZS LPTINT + POPJ PDP, + + +LPTCLS: PUSHJ PDP,OUT ;PRINT REMAINING BUFFERS + PUSHJ PDP, WAIT1 ;WAIT FOR IOACT=0 + DATAO LPT,LPTTOP ;PRINT CARRAGE RETURN, FORM FEED + POPJ PDP, ;CLOSE RETURN + +LPTOUT: TRO IOS,IOACT ;IOACT=1 + TLZ IOS,IODISC ;IODISC:=0 + TLO IOS,IO ;IO:=1 + TLNE IOS,IOBEG ;VIRGIN DEVICE? IOBEG:=0 + JRST LPTBEG ;YES + PUSHJ PDP,LPTSET + MOVEM IOS,LPTIOS ;C(LPTIOS):=C(IOS) + MOVEI TAC,LPTDON + JRST LPTBG1 + +LPTBEG: TLO IOS,IODISC + MOVEM IOS,LPTIOS ;C(LPTIOS):=C(IOS) + PUSHJ PDP,LPTSET + MOVEI TAC,LPTCLR +LPTBG1: MOVEI TAC1,LPTLOV+LPTERR+LPTDON + HRRM TAC1,LPTINT + CONO LPT, LPTCHB(TAC) ;CLEAR BUFFER AND ASSIGN PI C + POPJ PDP, ;RETURN + + + +, LINE PRINTER INTERRUPT SERVICE + +LPTINT: CONSO LPT,LPTLOV+LPTERR+LPTDON;LINE OVERFLOW, ERROR OR DONE + JRST LPTINT ;IF LPT IS IN FLAG LIST, GO TO ERROR, E + CONSZ LPT,70 + CONSO LPT,LPTDON + JRST LPTERI ;YES +LPTIN1: SKIPGE LPTIOS ;IODISC=1? + JRST LPTDSC ;YES + BLKO LPT,LPTPTR ;PRINT + SKIPA ;BUFFER EMPTY + JEN @LPTCHL ;DISMISS INTERRUPT AND RETURN + MOVEM TAC,LPTSV1 ;SAVE TAC + HRLZI TAC,IODISC ;IODISC:=1 + IORM TAC,LPTIOS +LPTERX: MOVE TAC,LPTSV1 ;RESTORE TAC + JEN @LPTCHL ;DISMISS INTERRUPT AND RETURN + +LPTDSC: JSR LPTSAV ;SAVE ACCUMULATORS AND ESTABL + MOVEI DEVDAT,LPTDAT ;DEVDAT:=LPTDAT + PUSHJ PDP,IOSET ;PROG:=C(JBTADR18-35),ITEM:=C(DEVPTR) + MOVE IOS,LPTIOS + TLZE IOS,IOBEG + JRST LPTBG ;PUT OUT CR-LF + PUSHJ PDP,ADVBFE ;ADVANCE BUFFER + JRST LPTOFF ;NEXT BUFFER EMPTY + TRNE IOS,IOCON ;CONTINUOUS? (IOCON=0?) + JRST LPTOFF ;NO + TLZ IOS,IODISC + PUSHJ PDP,LPTSET ;SET LPTPTR + +LPTINX: TLZE IOS,IOW ;IN A WAIT? IOW:=0 + PUSHJ PDP,SETIOD ;YES. IOWS:=1 +LPTXIT: MOVEM IOS,LPTIOS ;C(LPTIOS):=C(IOS) + JRST LPTRET ;RESTORE ACCUMULATORS AND DIS + +LPTOFF: TRZ IOS,IOACT + CONO LPT,0 + HLLZS LPTINT ;TURN LPT OFF + JRST LPTINX + +LPTBG: DATAO LPT,LPTTOP ;SEND OUT CR-FF + TLZ IOS,IODISC ;WHEN IODISC=1 + JRST LPTXIT + + +;HERE ON EITHER OVERFLOW OR ERROR(OFFLINE) OR ERROR CHANNEL +;NOT ASSIGNED. + +LPTERI: MOVEM TAC,LPTSV1 ;SAVE TAC + CONSO LPT,LPTLOV ;LINE OVERFLOW? + JRST LPTER1 ;NO + MOVN TAC,[EXP 100001] ;YES, DECREMENT POINTER + ADDM TAC,LPTPTR + DATAO LPT,[EXP 15B6+12B13] ;PRINT CARRIAGE RETURN, LINE + JRST LPTERX + +LPTER1: CONSO LPT,70 ;ERROR INTERRUPT ASSIGNED? + JRST LPTER2 ;NO + CONO LPT,LPTCLB ;YES, DEASSIGN IT,SET BUSY,CLEAR REST + MOVEI TAC,LPTDON ;ENABLE FOR DONE FLAG ONLY +LPTERA: HRRM TAC,LPTINT + JRST LPTERX + +LPTER2: CONI LPT,TAC + ANDI TAC,300 + CONO LPT,LPTCHB(TAC) + MOVEI TAC,LPTDON+LPTERR+LPTLOV + HRRM TAC,LPTINT + MOVE TAC,LPTSV1 + JRST LPTIN1 +LPTTOP: EXP 15B6+14B13 ;CARRIAGE RETURN, FORM FEED + + +,SET UP PRINTER COUNTER AND POINTER + +LPTSET: MOVEI TAC,@LPTADR ;LPTPTR:=-(WORD COUNT+1), BUFFER ADDRES + MOVN TAC1,1(TAC) + HRL TAC,TAC1 + AOJLE TAC,.+2 ;C(LPTPTR0-17)<0? + HRROI TAC,LPTNUL-1 + MOVEM TAC,LPTPTR + POPJ PDP, ;RETURN + +LPTNUL: 0 + + END, diff --git a/src/m140.lst b/src/m140.lst new file mode 100644 index 0000000..3084f0e --- /dev/null +++ b/src/m140.lst @@ -0,0 +1,37005 @@ +LPTSPL Version 3(105) Running on LPT000 + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + **START** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:31 Address: **** UNKNOWN **** + + + + CCCCCCCCCCCC DDDDDDDDDDDD RRRRRRRRRRRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR + CCCCCCCCCCCC DDDDDDDDDDDD RRRRRRRRRRRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR + CCCCCCCCCCCC DDDDDDDDDDDD RRRRRRRRRRRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRRRRRRRRRRR SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +CCC DDD DDD RRRRRRRRRRRR SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +CCC DDD DDD RRRRRRRRRRRR SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR + CCCCCCCCCCCC DDDDDDDDDDDD RRR RRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + CCCCCCCCCCCC DDDDDDDDDDDD RRR RRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + CCCCCCCCCCCC DDDDDDDDDDDD RRR RRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :CDRSER.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:31 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1992 +File will be deleted after printing + +CDRSER - CARD READER SERVICE MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 8-2-65 + + XLIST + LIST + TITLE CDRSER - CARD READER SERVICE + SUBTTL 8-2-65 + EXTERNAL STODAT, ADVBFF, IOSET, SETIOD, SETBYT, STOSQD + EXTERNAL CDRSAV, CDRCHN, CDRRET,ILLOUT,PIOMOD + INTERNAL CDRINT + + ;DEVICE DATA BLOCK LINKAGE + EXTERNAL CDRDB,CDRDAT,CRDIS + ENTRY CDRDSP + + CDRSER - CARD READER SERVICE MACRO 10 05:51 24-APR-78 PAGE 2 +CDRSER MAC 24-APR-78 21:33 8-2-65 + + + + + ,CDR PARAMETER ASSIGNMENTS + + , CDR CONTROL REGISTER + 000010 CRDONE=10; DONE FLAG + 000020 CRBUSY=20; BUSY FLAG + 000040 CRBIN=40; BINARY + 000100 CRALL=100; ALL FLAG + 000200 CRMISS=200; DATA MISSED + 000400 CREOC=400; END OF CARD + 001000 CREOFF=1000; END OF FILE + 002000 CRERR=2000; ERROR + 000002 CHCHN=2 + , ACCUMULATORS + 000010 CRDAT1=TEM + 000011 CRAC=JDAT + + , SPECIAL IO STATUS WORD ASSIGNMENTS + 004000 CRMFST=40000; FIRST CARD + 020000 CRMBIN=200000; BINARY + 010000 CRMIMG=100000; IMAGE + , SPECIAL CHARACTERS + 000032 S2EOF=32; END OF FILE + + REPEAT 0,< + ,CDR DATA BLOCK + + CDRDAT: SIXBIT /CRD + 34 + 0 + EXP CDRDSP + XWD 1400+PROG,10403 + 0 + 0 + XWD PROG,0 + 0 + 0 + CRDIS: JRST . + > + + ,CDR SERVICE DISPATCH TABLE + + 000000' 715200 000000 CDRDSP: CONO CR,0 ;RELEASE + 000001' 263140 000000 POPJ PDP,; CLOSE + 000002' 254000 000000* JRST ILLOUT ;OUTPUT + 000003' 254000 000004' JRST CRINP; INPUT +--- Page break +- 2 blank + 000004' 621000 000002 CRINP: TLZ IOS,IOBEG; VIRGIN DEVICE? IOBUF:=0 + + 000005' 661000 004004 CDRIN1: TLO IOS,IOFST+CRMFST; IOFST:=CRMFST:=1 + 000006' 135040 000000* LDB TAC,PIOMOD + + CDRSER - CARD READER SERVICE MACRO 10 05:51 24-APR-78 PAGE 2-1 +CDRSER MAC 24-APR-78 21:33 8-2-65 + + 000007' 306040 000014 CAIN TAC,B; MODE=BINARY? + 000010' 661000 020000 TLO IOS,CRMBIN; YES. CRMBIN:=1 + 000011' 306040 000010 CAIN TAC,I; MODE=IMAGE? + 000012' 661000 100000 TLO IOS,CRMIMG; YES. CRMIMG:=1 + 000013' 660000 010000 TRO IOS,IOACT; IOACT:=1 + 000014' 202006 000002 MOVEM IOS,DEVIOS(DEVDAT) + 000015' 260140 000000* PUSHJ PDP,SETBYT; TAC0-5:=TAC12-13:=0; TAC6-11:=BYTE SIZE + 000016' 202046 000010 MOVEM TAC,DEVPTR(DEVDAT) + 000017' 201040 000000* MOVEI TAC, CDRCHN; ASSIGN PI CHANNEL + 000020' 715201 000160 CONO CR,CRBIN+CRALL+CRBUSY(TAC); SELECT BINARY, ALL + 000021' 263140 000000 POPJ PDP,; RETURN + + CDRSER - CARD READER SERVICE MACRO 10 05:51 24-APR-78 PAGE 3 +CDRSER MAC 24-APR-78 21:33 8-2-65 + +--- two blank + 000022' 715340 000010 CDRINT: CONSO CR,CRDONE; DONE FLAG? + 000023' 254000 000022' JRST CDRINT + 000024' 265000 000000* JSR CDRSAV; SAVE ACCUMULATORS AND ESTABLI + 000025' 201300 000000* MOVEI DEVDAT,CDRDAT + 000026' 200006 000002 MOVE IOS,DEVIOS(DEVDAT) + 000027' 715300 002200 CONSZ CR, CRMISS+CRERR; DATA MISSED OR ERROR? + 000030' 660000 200000 TRO IOS,IODERR; IODERR:=1 + 000031' 715040 000010 DATAI CR, CRDAT1; INPUT INFORMATION + 000032' 260140 000000* PUSHJ PDP,IOSET; PROG:=C(JBTADR18-35), ITEM:= C(DEVPTR) + 000033' 627000 004000 TLZN IOS,CRMFST; FIRST CARD? CRMFST:=0 + 000034' 256000 000000* XCT CRDIS ;NOT FIRST, GO TO SUBROUTINE + + 000035' 640400 007400 CRFIRS: TRC CRDAT1, 7400; FIRST COL OF FIRST CARD + 000036' 646400 007400 TRCN CRDAT1,7400; Y, X, 0, OR 1 PUNCH? + 000037' 254000 000047' JRST CREOFC; NO, END OF FILE CARD + 000040' 715300 001000 CONSZ CR, CREOFF; END OF FILE? + 000041' 254000 000051' JRST CREOF; YES + 000042' 603000 200000 TLNE IOS,CRMBIN; CRMBIN=1? + 000043' 254000 000125' JRST CRFSTB; YES + 000044' 603000 100000 TLNE IOS,CRMIMG; CRMIMG=1? + 000045' 254000 000144' JRST CRFSTI; YES + 000046' 254000 000067' JRST CRFSTL+1 + + 000047' 201040 000017* CREOFC: MOVEI TAC,CDRCHN ;WAIT FOR EOC + 000050' 715201 000020 CONO CR,CRBUSY(TAC) + 000051' 661000 000040 CREOF: TLO IOS, IOEND; IUEND:=1 + 000052' 201240 000032 MOVEI DAT,S2EOF + 000053' 260140 000000* PUSHJ PDP,STODAT; STORE END OF FILE CHARACTER + 000054' 330000 000000 SKIP + 000055' 254000 000217' JRST CRLST2; BLOCK FULL OR BLOCK COMPLETE + 000056' 201040 000056' MOVEI TAC,.; DATA STATED PROPERLY + 000057' 542040 000034* HRRM TAC, CRDIS; SET DISPATCH TO RETURN HERE. + 000060' 715340 000400 CONSO CR, CREOC; END OF CARD? + 000061' 254000 000226' JRST CREXIT; NO. + 000062' 260140 000000* PUSHJ PDP,ADVBFF; ADVANCE BUFFER + 000063' 330000 000000 SKIP + 000064 661000 000002 TLO IOS,IOBEG; IOBEG:=1 + 000065' 254000 000231' JRST CROFF + + 000066' 260140 000164' CRFSTL: PUSHJ PDP, CRITMS; STORE ITEM + 000067' 201040 000074' MOVEI TAC,CRCV; TAC:=CRCV. HOLLERITH READ + + 000070' 715240 000002 CRREST: CONI CR, TAC1 + 000071' 620100 000160 TRZ TAC1, CRBIN+CRALL+CRBUSY; SELECT HOLERITH, ALL:=0, BUS + 000072' 715202 000000 CONO CR, (TAC1); RESET CARD READER + 000073' 254000 000112' JRST CREXT1; CHANGE DISPATCH AND GO + +blank line CDRSER - CARD READER SERVICE MACRO 10 05:51 24-APR-78 PAGE 4 +CDRSER MAC 24-APR-78 21:33 8-2-65 +2 blank lines + + , HOLLERITH READ MODE + + 000074' 200440 000241' CRCV: MOVE CRAC, [POINT 6,CRDAT1,23]; COLUMNS 79 AND 80 + 000075' 715340 000400 CONSO CR,CREOC; END OF CARD? + 000076' 200440 000142' MOVE CRAC,CRC1; NO. LOOK AT ALL CHARACTERS + 000077' 134040 000011 LDBI TAC,CRAC ;CONVERT HOLLERITH + 000100' 231040 000005 IDIVI TAC, 5; TO ASCII + 000101' 135242 000206' LDB DAT, CRCV1(TAC1) + 000102' 260140 000053* PUSHJ PDP,STODAT; STORE IN BU FER + 000103' 254000 000052' JRST CREOF+1 + 000104' 254000 000115' JRST CRINS + 000105' 603440 760000 TLNE CRAC, 760000; WORD COMPLETE? + 000106' 254000 000077' JRST CRCV+3; NO + 000107' 715300 000400 CONSZ CR,CREOC; END OF CARD? + 000110' 254000 000115' JRST CRINS; YES + 000111' 201040 000074' MOVEI TAC, CRCV; NEXT DISPATCH TO CRCV. HOLLERITH READ + + 000112' 542040 000057* CREXT1: HRRM TAC, CRDIS; UPDATE DISPTACHER + 000113' 254000 000226' JRST CREXIT + 000114' 000000 006424 CRCON: OCT 6424 + + 000115' 200440 000143' CRINS: MOVE CRAC,CRC2; BLOCK FULL OR BLOCK COMPLETE INSERT CR + 000116' 134240 000011 LDBI DAT, CRAC + 000117' 260140 000102* PUSHJ PDP,STODAT; STORE CHAR + 000120' 330000 000000 SKIP; EXIT1. + 000121' 254000 000217' JRST CRLST2; EXIT2. BLOCK FULL OR BLOCK COMPLETE + 000122' 603440 760000 TLNE CRAC,760000; THATS ALL? + 000123' 254000 000116' JRST CRINS+1; NO + 000124' 254000 000213' JRST CRLAST; END OF CARD + + CDRSER - CARD READER SERVICE MACRO 10 05:51 24-APR-78 PAGE 5 +CDRSER MAC 24-APR-78 21:33 8-2-65 + + + , BINARY READ MODE + + 000125' 135040 000242' CRFSTB: LDB TAC,[POINT 3,CRDAT1,35]; 7-9 PUNCH? + 000126' 302040 000005 CAIE TAC, 5 + 000127' 660000 400000 TRO IOS, IOIMPM; YES. IOIMPM:=1 + 000130' 715240 000001 CONI CR, TAC + 000131' 620040 000120 TRZ TAC, CRBUSY+CRALL; BUSY FLAG:=0, ALL FLAG;=0 + 000132' 715201 000000 CONO CR,(TAC); RESET TO RE-READ COL 3 + 000133' 201040 000135' MOVEI TAC, CRCOL2; DISPATCH TO CRCOL2 ON NEXT INTERRUPT + 000134' 254000 000112' JRST CREXT1 + + 000135' 201040 000137' CRCOL2: MOVEI TAC, CRCOL4; DISPATCH TO CRCOL4 ON NEXT INTERRUPT + 000136' 542040 000112* HRRM TAC,CRDIS + + 000137' 200240 000010 CRCOL4: MOVE DAT, CRDAT1 + 000140' 260140 000165' PUSHJ PDP, CRITMS+1; STORE THE WORD FROM DAT + 000141' 254000 000226' JRST CREXIT + + 000142' 440600 000010 CRC1: POINT 6,CRDAT1 + 000143' 170700 000114' CRC2: POINT 7,CRCON,20 + + CDRSER - CARD READER SERVICE MACRO 10 05:51 24-APR-78 PAGE 6 +CDRSER MAC 24-APR-78 21:33 8-2-65 + + + ,IMAGE READ MODE + + 000144' 201040 000147' CRFSTI: MOVEI TAC, .+3; DISPATCH TO CRFSTI + 3 ON NEXT INTERRUP + 000145' 137400 000243' DPB CRDAT1,[POINT 24,CRTEM,23]; SAVE COLUMN 1 AS MI + 000146' 254000 000112' JRST CREXT1 + + 000147' 260140 000164' PUSHJ PDP, CRITMS; SET ITEM AND CHECK SIZE + 000150' 434400 000240' IOR CRDAT1, CRTEM; CRTEM12-35:=COL 1 AND 2 + 000151' 201040 000153' MOVEI TAC, .+2; DISPATCH TO CRFSTI + 7 ON NEXT INTERRUP + 000152' 254000 000157' JRST CRIM1+1 + + 000153' 715240 000002 CONI CR, TAC1 + 000154' 620100 000120 TRZ TAC1, CRBUSY+CRALL; BUSY FLAG:=ALL FLAG:=0 + 000155' 715202 000000 CONO CR, (TAC1); RESET READER ON COL 3 + + 000156' 201040 000156' CRIM1: MOVEI TAC,.; DISPATCH TO CRIM1 ON NEXT INTERRUPT + 000157' 715300 000400 CONSZ CR, CREOC; END OF CARD? + 000160' 254000 000213' JRST CRLAST; YES + 000161' 202026 000010 MOVEM @DEVPTR(DEVDAT) + 000162' 350006 000010 AOS DEVPTR(DEVDAT); INCREMENT ITEM POINTER + 000163' 254000 000112' JRST CREXT1 + + 000164' 661000 000004 CRITMS: TLO IOS, IOFST; IOFST:=1 + 000165' 260140 000117* PUSHJ PDP, STODAT; STORE WORD + 000166' 254000 000052' JRST CREOF+1 + 000167' 254000 000052' JRST CREOF+1 + 000170' 263140 000000 POPJ PDP,; RETURN + + 000171' 265426 231550 CRCNV: ASCII ._123456789. + 000172' 325546 734162 + 000173' 301730 057116 ASCII .0=@^'\ /ST. + 000174' 561005 751650 + 000175' 526552 754262 ASCII .UVWXYZ;,(". + 000176' 551665 424104 + 000177' 215125 545226 ASCII .#%-JKLMNOP. + 000200' 462331 647640 + 000201' 506447 222124 ASCII .QR:$*[>&+A. + 000202' 555744 625602 + 000203' 412070 442614 ASCII :BCDEFGHI?.: + 000204' 436211 137534 + 000205' 246727 420576 ASCII :)]<!?: + + 000206' 350701 000171' CRCV1: POINT 7,CRCNV(TAC),6 + 000207' 260701 000171' POINT 7,CRCNV(TAC),13 + 000210' 170701 000171' POINT 7,CRCNV(TAC),20 + 000211' 100701 000171' POINT 7,CRCNV(TAC),27 + 000212' 010701 000171' POINT 7,CRCNV(TAC),34 + + CDRSER - CARD READER SERVICE MACRO 10 05:51 24-APR-78 PAGE 7 +CDRSER MAC 24-APR-78 21:33 8-2-65 + + + 000213' 301200 000122 CRLAST: CAIL ITEM,^D82; C(ITEM)<82? + 000214' 254000 000234' JRST CRCONT; NO + 000215' 260140 000000* CRLST0: PUSHJ PDP,STOSQD; STORE WORD COUNT + 000216' 330000 000000 SKIP + 000217' 260140 000062* CRLST2: PUSHJ PDP,ADVBFF; ADVANCE BUFFER + 000220' 254000 000231' JRST CROFF; EXIT1. NECT BUFFER FULL + 000221' 201040 000047* MOVEI TAC, CDRCHN + 000222' 715201 000160 CONO CR, CRBIN+CRALL+CRBUSY(TAC); SELECT BINARY, ALL + ,ASSIGN PI CHANNEL + 000223' 661000 004004 CRLST1: TLO IOS,IOFST+CRMFST; IOFST:=CRMFST:=1 + 000224' 623000 000001 TLZE IOS, IOW; IN A WAIT? IOW:=0 + 000225' 260140 000000* PUSHJ PDP, SETIOD; IOWS:=1 + + 000226' 202006 000002 CREXIT: MOVEM IOS,DEVIOS(DEVDAT); C(CRIOS):=C(IOS) + 000227' 202206 000011 MOVEM ITEM, DEVCTR(DEVDAT); C(CRCTR):=C(ITEM) + 000230' 254000 000000* JRST CDRRET; RESTORE ACCUMULATORS AND DISMISS INTERR + + 000231' 620000 010000 CROFF: TRZ IOS,IOACT; IOACT:=0 + 000232' 715200 000000 CONO CR,0; CLEAR CDR CONTROL REGISTER + 000233' 254000 000223' JRST CRLST1 + + 000234' 201040 000221* CRCONT: MOVEI TAC, CDRCHN; ASSIGN PI CHANNEL + 000235' 715201 000160 CONO CR, CRBIN+CRALL+CRBUSY(TAC); SELECT BINARY, ALL, + 000236' 661000 040000 TLO IOS,CRMFST; CRMFST:=1 + 000237' 254000 000226' JRST CREXIT + + 000240' 000000 000000 CRTEM: 0 + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000244 + +9K CORE USED + + CDRSER - CARD READER SERVICE MACRO 10 05:51 24-APR-78 PAGE 8 +CDRSER MAC 24-APR-78 21:33 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADVBFF 000217' EXT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CDRCHN 000234' EXT +CDRDAT 000025' EXT +CDRDB 000000 EXT +CDRDSP 000000' ENT +CDRIN1 000005' +CDRINT 000022' INT +CDRRET 000230' EXT +CDRSAV 000024' EXT +CHCHN 000002 +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CR 000150 SPD +CRAC 000011 +CRALL 000100 +CRBIN 000040 +CRBUSY 000020 +CRC1 000142' +CRC2 000143' +CRCNV 000171' +CRCOL2 000135' +CRCOL4 000137' +CRCON 000114' +CRCONT 000234' +CRCV 000074' +CRCV1 000206' +CRDAT1 000010 +CRDIS 000136' EXT +CRDONE 000010 +CREOC 000400 +CREOF 000051' +CREOFC 000047' +CREOFF 001000 +CRERR 002000 +CREXIT 000226' +CREXT1 000112' +CRFIRS 000035' +CRFSTB 000125' +CRFSTI 000144' +CRFSTL 000066' +CRIM1 000156' + + + CDRSER - CARD READER SERVICE MACRO 10 05:51 24-APR-78 PAGE 8-1 +CDRSER MAC 24-APR-78 21:33 SYMBOL TABLE + +CRINP 000004' +CRINS 000115' +CRITMS 000164' +CRLAST 000213' +CRLST0 000215' +CRLST1 000223' +CRLST2 000217' +CRMBIN 020000 +CRMFST 004000 +CRMIMG 010000 +CRMISS 000200 +CROFF 000231' +CRREST 000070' +CRTEM 000240' +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT + + CDRSER - CARD READER SERVICE MACRO 10 05:51 24-APR-78 PAGE 8-2 +CDRSER MAC 24-APR-78 21:33 SYMBOL TABLE + +DVTTY 000010 INT +ENTRB 020000 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +ILLOUT 000002' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSET 000032' EXT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +MTW 010000 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PIOMOD 000006' EXT +PROG 000007 INT +RUN 200000 INT +RUNABL 204000 INT +S2EOF 000032 +SETBYT 000015' EXT +SETIOD 000225' EXT + + CDRSER - CARD READER SERVICE MACRO 10 05:51 24-APR-78 PAGE 8-3 +CDRSER MAC 24-APR-78 21:33 SYMBOL TABLE + +STODAT 000165' EXT +STOSQD 000215' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT + CCCCCCCCCCCC LLL KKK KKK CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC LLL KKK KKK CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC LLL KKK KKK CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKKKKKKKK CCC SSSSSSSSS SSSSSSSSS +CCC LLL KKKKKKKKK CCC SSSSSSSSS SSSSSSSSS +CCC LLL KKKKKKKKK CCC SSSSSSSSS SSSSSSSSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS + CCCCCCCCCCCC LLLLLLLLLLLLLLL KKK KKK CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC LLLLLLLLLLLLLLL KKK KKK CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC LLLLLLLLLLLLLLL KKK KKK CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :CLKCSS.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:32 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1980 +File will be deleted after printing + +CLKCSS - SCHEDULING ALOGRITHM MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 T. HASTING 6-29-65 + + XLIST + LIST + TITLE CLKCSS - SCHEDULING ALOGRITHM + SUBTTL T. HASTING 6-29-65 + ;SCHEDULING ALOGRITHM + ;CALL: + ; PUSHJ PDP, NXTJOB + ; EXIT ;RETURN HIGHEST PRIORITY USER IN AC ITEM + + ;NEXJOB ASSUMES NO ACS SET EXCEPT PDP AND THAT IS MAY USE + ;ANY OF THE OTHER ACS + ;EXECUTION REQUIRES ROUGHLY 37 CYCLES FOR NORMAL CASE + + INTERNAL NXTJOB, QUANTS + EXTERNAL IOCOMP,JOBN,JBTSTS,JOB + EXTERNAL MTAVAL,DCAVAL,DTAVAL,SCNOFF,SCNON +blank line+ + + 000002 T=TAC1 ;TEMPORARY AC + 000006 C=DEVDAT + 000005 P=DAT + + 000000' 200100 000000* NXTJOB: MOVE T, IOCOMP ;NO. OF COMPLETED IO JOBS + 000001' 202100 000064' MOVEM T, IOAVAL ;MAKE SLOW IO LOOK LIKE FAST IO + + ;KEEP IO DEVICES BUSY + 000002' 515240 777774 HRLZI P, -NUM ;NO. OF IO DEVICES CATEGORIES TO CHECK + 000003' 336025 000060' NXT0: SKIPN @AVALTB(P) ;NON-ZERO IF IO JUST BECOME AVAILABLE + 000004' 253240 000003' NXT1: AOBJN P, NXT0 + 000005' 327240 000026' JUMPG P, NXT4 ;FINISHED YET + 000006' 402025 000060' SETZM @AVALTB(P) ;IO DEVICE AVAIL. ACKNOWLEDGE FACT + 000007' 200105 000065' MOVE T,WAITB(P) ;GET APPROPRIATE JOB STATUS BIT + 000010' 200205 000071' MOVE ITEM,JOBP(P) ;SEARCH FOR WAITING JOB + 000011' 350000 000004 AOS ITEM ;LOOK AT EVERYONE ELSE FIRST + 000012' 301200 000000* NXT2: CAIL ITEM,JOBN ;MODULO JOBN + 000013' 201200 000001 MOVEI ITEM,1 ;SKIP NULL JOB + 000014' 617104 000000* TSNN T,JBTSTS(ITEM) ;IS WAIT BIT SET FOR THIS JOB? + 000015' 254000 000023' JRST NXT3 ;NO. KEEP LOOKING + 000016' 700600 000000* CONO PI,SCNOFF ;YES, TURN SCANNER CHAN. OFF(CONTROL C) + 000017' 554044 000014* HLRZ TAC,JBTSTS(ITEM) ;IS JOB RUNABLE? + 000020' 306042 204000 CAIN TAC,RUNABLE(T) + 000021' 254000 000041' JRST NXT7 ;YES, CLEAR BIT. SET RUN TIME. RETURN + 000022' 700600 000000* CONO PI,SCNON ;NO. TURN SCANNER CHAN. ON. KEEP LOOKIN + 000023' 312205 000071' NXT3: CAME ITEM, JOBP(P) ;HAVE ALL USERS BEEN LOOKED AT + 000024' 344200 000012' AOJA ITEM, NXT2 ;NO. KEEP LOOKING + 000025' 254000 000004' JRST NXT1 ;YES. SHOULD NOT HAPPEN + + CLKCSS - SCHEDULING ALOGRITHM MACRO 10 05:51 24-APR-78 PAGE 2 +CLKCSS MAC 24-APR-78 03:01 T. HASTING 6-29-65 + + + ;NO JOBS WAITING TO USE IO DEVICES + ;HAS CURENT JOB USED ITS QUANTUM + + 000026' 201300 000012* NXT4: MOVEI C,JOBN ;GET READY FOR POSSIBLE LOOP + 000027' 334200 000000* SKIPA ITEM, JOB ;CURRENTLY RUNNING JOB + + 000030' 350000 000004 NXT6: AOS ITEM ;LOOK AT NEXT JOB + 000031' 301200 000026* CAIL ITEM, JOBN ;MODULO JOBN + 000032' 201200 000001 MOVEI ITEM, 1 ;SKIP NULL JOB + + 000033' 554104 000017* NXT5: HLRZ T, JBTSTS(ITEM) ;IS THIS JOB RUNNABLE + 000034' 306100 204000 CAIN T, RUNABLE + 000035' 254000 000050' JRST NXT9 ;YES,RETURN WITH ITEM SET + 000036' 367300 000030' NXT5A: SOJG C, NXT6 ;NO. LOOKED AT ALL JOBS YET? + 000037' 403200 000002 SETZB ITEM,T ;YES. INDICATE NULL JOB TO RUN + 000040' 344100 000054' AOJA T,NXT8 ;SET TO RUN FOR ONE CLOCK TICK + + 000041' 202205 000071' NXT7: MOVEM ITEM, JOBP(P) ;SAVE THIS JOB NO. FOR NEXT TIME + 000042' 620042 000000 TRZ TAC,(T) ;CLEAR WAIT BIT + 000043' 506044 000033* HRLM TAC,JBTSTS(ITEM) ;IN JOB STATUS WORD + 000044' 602100 400000 TRNE T,IOWS ;IS WAIT BIT IOWS? + 000045' 370000 000000* SOS IOCOMP ;YES, SUBTRACT REQUEST COUNT + 000046' 700600 000022* CONO PI,SCNON ;TURN SCANNER CHANNEL BACK ON + 000047' 254000 000053' JRST NXT10 ;AND GO SET RUNNING TIME + + 000050' 550104 000043* NXT9: HRRZ T,JBTSTS(ITEM) ;HAS TIME GONE TO ZERO FOR THIS JOB? + 000051' 602100 777777 TRNE T,-1 + 000052' 263140 000000 POPJ PDP, ;NO + 000053' 200105 000075' NXT10: MOVE T, QUANTS(P) ;SET QUANTUM RUNNING TIME FOR THIS QUEU + 000054' 542104 000050* NXT8: HRRM T, JBTSTS(ITEM) + 000055' 316200 000027* CAMN ITEM, JOB ;IS THIS SAME AS OLD JOB? + 000056' 326200 000036' JUMPN ITEM, NXT5A ;AND NOT NULL JOB + 000057' 263140 000000 POPJ PDP, + + CLKCSS - SCHEDULING ALOGRITHM MACRO 10 05:51 24-APR-78 PAGE 3 +CLKCSS MAC 24-APR-78 03:01 T. HASTING 6-29-65 + + + ;FLAGS SET NON-ZERO WHEN IO DEVICES BECOME AVAILABLE + + 000060' 000000 000000* AVALTB: EXP MTAVAL ;MAG TAPE + 000061' 000000 000000* EXP DCAVAL ;DATA CONTROL + 000062' 000000 000000* EXP DTAVAL ;DECTAPE + 000063' 000000 000064' EXP IOAVAL ;ALL OTHER DEVICES + 000004 NUM=.-AVALTB + + 000064' 000000 000000 IOAVAL: 0 ;FLAG = NO. OF IO COMPLETED JOBS + + ;BIT IN STATUS WORD MEANING JOB WAITING TO USE DEVICE + 000065' 000000 010000 WAITB: EXP MTW + 000066' 000000 020000 EXP DCW + 000067' 000000 040000 EXP DTW + 000070' 000000 400000 EXP IOWS + + ;LAST JOB SCHEDULED FOR DEVICE + JOBP: REPEAT NUM, + < EXP 1 + > + 000071' 000000 000001 EXP 1 + + 000072' 000000 000001 EXP 1 + + 000073' 000000 000001 EXP 1 + + 000074' 000000 000001 EXP 1 + + + ;QUANTUM TIMES FOR EACH QUEUE + + 000075' 000000 000004 QUANTS: EXP 4 ;MAGTAPE QUEUE + 000076' 000000 000004 EXP 4 ;DATA CONTROL QUEUE + 000077' 000000 000004 EXP 4 ;DECTAPE QUEUE + 000100' 000000 000006 EXP 6 ;IOWAIT SATISFIED QUEUE + 000101' 000000 000017 EXP QUANT1 ;STRAIGHT COMPUTATION QUEUE + + XP QUANT1,^D15; STRAIGHT COMPUTATION QUEUE + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000102 + +9K CORE USED + + CLKCSS - SCHEDULING ALOGRITHM MACRO 10 05:51 24-APR-78 PAGE 4 +CLKCSS MAC 24-APR-78 03:01 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +AVALTB 000060' +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +C 000006 +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +D 000017 INT +DAT 000005 INT +DCAVAL 000061' EXT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTAVAL 000062' EXT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT + + + CLKCSS - SCHEDULING ALOGRITHM MACRO 10 05:51 24-APR-78 PAGE 4-1 +CLKCSS MAC 24-APR-78 03:01 SYMBOL TABLE + +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +---- +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOAVAL 000064' +IOBEG 000002 INT +IOBKTL 040000 INT +IOCOMP 000045' EXT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTSTS 000054' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000055' EXT +JOBN 000031' EXT +JOBP 000071' +LOOKB 040000 INT +MTAVAL 000060' EXT +MTW 010000 INT +NUM 000004 +NXT0 000003' + + CLKCSS - SCHEDULING ALOGRITHM MACRO 10 05:51 24-APR-78 PAGE 4-2 +CLKCSS MAC 24-APR-78 03:01 SYMBOL TABLE + +NXT1 000004' +NXT10 000053' +NXT2 000012' +NXT3 000023' +NXT4 000026' +NXT5 000033' +NXT5A 000036' +NXT6 000030' +NXT7 000041' +NXT8 000054' +NXT9 000050' +NXTJOB 000000' INT +OBUFB 100000 INT +OUTPB 004000 INT +P 000005 +PDP 000003 INT +PI 000004 SPD +PICHN 000100 INT +PROG 000007 INT +QUANT1 000017 INT +QUANTS 000075' INT +RUN 200000 INT +RUNABL 204000 INT +SCNOFF 000016' EXT +SCNON 000046' EXT +T 000002 +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT +WAITB 000065' + CCCCCCCCCCCC LLL OOOOOOOOO CCCCCCCCCCCC KKK KKK + CCCCCCCCCCCC LLL OOOOOOOOO CCCCCCCCCCCC KKK KKK + CCCCCCCCCCCC LLL OOOOOOOOO CCCCCCCCCCCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKKKKKKKK +CCC LLL OOO OOO CCC KKKKKKKKK +CCC LLL OOO OOO CCC KKKKKKKKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK + CCCCCCCCCCCC LLLLLLLLLLLLLLL OOOOOOOOO CCCCCCCCCCCC KKK KKK + CCCCCCCCCCCC LLLLLLLLLLLLLLL OOOOOOOOO CCCCCCCCCCCC KKK KKK + CCCCCCCCCCCC LLLLLLLLLLLLLLL OOOOOOOOO CCCCCCCCCCCC KKK KKK + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :CLOCK .LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:32 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1974 +File will be deleted after printing + +CLOCK - CLOCK SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 T. HASTINGS 6-2-65 + + XLIST + LIST + TITLE CLOCK - CLOCK SERVICE ROUTINE + SUBTTL T. HASTINGS 6-2-65 + INTERNAL CLOCK, CLKINI,NULJOB,APRINT,RSCHED + EXTERNAL APRSAV, APRRET, APRCHN,APRILM,APRCHL + EXTERNAL COMCNT,COMMAND,JOB,JOBADR,APRSAC,JOBDAC,JOBPDP,JOBREL + EXTERNAL USRPDP,JOBPFU,JOBPC,JBTADR,JOBADR,JOBDAT,USRPFU,CLDS,NXTJOB + EXTERNAL STOPU,SCHEDF,TIME,JOBLEV,JOBUXT,UUO0,JOBDHI,CLKOFF,JBTSTS + + ;CLOCK WILL TIME AN INTERVAL AND PUSHJ PDP, TO AN ADDRESS + ;AFTER THE INTERVAL HAS EXPIRED + ;TO MAKE A REQUEST: + ; CONO PI,PIOFF + ; DPBI AC,CLOCK + ; CONO PI,PION + ;AC MUST CONTAIN- XWD ADDRESS,NUMBER OF CLOCK COUNTS+DATA*1000 + ;THE HIGH ORDER SIX BITS OF THE RIGHT HALF(DATA) ARE PLACED IN AC + ;TAC RIGHT JUSTIFIED BEFORE THE PUSHJ PDP, ADDRES IS DONE + + ;SYSTEM FLAGS: + ; STOPU IS SET NON-ZERO AT EITHER INTERRUPT SERVICE LEVEL OR + ; UUO LEVEL AND A CLOCK INTERRUPT IS REQUESTED WHEN CURRENT + ; JOB MUST BE STOPPED AND ANOTHER ONE RUN. + ; SCHEDF IS SET NON-ZERO BY CLOCK ROUTINE WHEN IF IS IN THE PROCESS + ; OF RESCHEDULING. IT IS CLEARED AFTER JOB HAS BEEN SET TO + ; CURRENTLY RUNNING JOB. + ; TIME IS THE TIME SYSTEM HAS RUN IN 60THS OF A SECOND + + 000200 PION=200 + 000400 PIOFF=400 + + 000005 STOR=DAT + 000001 T=TAC + 000011 JA=JDAT + + 000000' 004400 000000' CLOCK: POINT 36,CIPWT-1,35 ;BYTE POINTER TO CLOCK QUEUE + 000001' CIPWT: BLOCK 12 ;THE QUEUE + + 000013' 201000 000000' CLKINI: MOVEI CIPWT-1 ;SET UP BYTE POINTER + 000014' 542000 000000' HRRM CLOCK + 000015' 263140 000000 POPJ PDP, + + CLOCK - CLOCK SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 2 +CLOCK MAC 24-APR-78 03:29 T. HASTINGS 6-2-65 + + + 000016' 254000 000020' APRINT: JRST .+2 ;HERE ON APR INTERRUPT + 000017' 254000 000017' JRST . ;TO OTHER DEVICES ON THIS CHANNEL + 000020' 700340 230000 CONSO APR,230000 ;IS IT ANY OF THE OTHERS + 000021' 254000 000024' JRST CIP0 ;NO. GO CHECK CLOCK + 000022' 264000 000000* JSR APRSAV ;YES, SAVE ACS + 000023' 254000 000000* JRST APRILM ;AND GO PROCESS ILLEGAL MEMOR + 000024' 700340 002000 CIP0: CONSO APR, 2000 ;IS CLOCK ENABLED + 000025' 254000 000030' JRST CIP1 ;NO. GO TO OTHER DEVICES + 000026' 700300 001000 CONSZ APR, 1000 ;YES, DID CLOCK CAUSE INTERRUPT + 000027' 254000 000034' JRST CIP2 ;YES + 000030' 336000 000000* CIP1: SKIPN STOPU ;NO, IS THIS A REQUEST INTERRUPT + 000031' 254000 000017' JRST APRINT+1 ;NO. GO TO OTHER DEVICES + 000032' 264000 000022* CIP1B: JSR APRSAV ;YES, SAVE ACS + 000033' 254000 000064' JRST CIP6 ;RESCHEDULE BUT DONT TIME + + CLOCK - CLOCK SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 3 +CLOCK MAC 24-APR-78 03:29 T. HASTINGS 6-2-65 + + + 000034' 264000 000032* CIP2: JSR APRSAV ;SAVE ACS + 000035' 350000 000000* AOS TIME ;INCREMENT TIME + 000036' 200040 000000* MOVE TAC,JOB ;DECREMENT CURRENT JOBS RUNNING TIME + 000037' 370001 000000* SOS JBTSTS(TAC) + 000040' 700200 000000* CONO APR,CLKOFF ;TURN CLOCK FLAG OFF + + ;PROCESS TIMING REQUESTS STORED IN QUEUE + 000041' 550240 000000' HRRZ STOR, CLOCK ;GET END OF LIST + 000042' 306240 000000' CIP4: CAIN STOR, CIPWT-1 ;END YET + 000043' 254000 000062' JRST CIP5 ;YES + 000044' 370105 000000 SOS TAC1, (STOR) ;DECREMENT TIMING REQUEST + 000045' 602100 007777 TRNE TAC1, 7777 ;TIME EXPIRED YET + 000046' 364240 000042' SOJA STOR, CIP4 ;NO, CONTINUE SCAN + 000047' 700600 000400 CONO PI, PIOFF ;YES. MOVE LAST ITEM IN LIST TO THS + 000050' 200060 000000' MOVE TAC, @CLOCK + 000051' 370000 000000' SOS CLOCK + 000052' 700600 000200 CONO PI, PION + 000053' 202045 000000 MOVEM TAC, (STOR) + 000054' 135040 000143' LDB TAC, [POINT 6, TAC1, 23] ;GET 6 BIT DATA ITEM + 000055' 207000 000002 MOVSS TAC1 ;SETUP DISPATCH ADDRESS + 000056' 261140 000005 PUSH PDP, STOR ;SAVE ONLY VALUABLE AC + 000057' 260142 000000 PUSHJ PDP, (TAC1) ;AND DISPATCH TO TIMING REQUEST ROUTINE + 000060' 262140 000005 POP PDP, STOR + 000061' 364240 000042' SOJA STOR, CIP4 ;GO BACK FOR MORE REQUESTS + + 000062' 332000 000000* CIP5: SKIPE COMCNT ;ANY COMMANDS TO PROCESS + 000063' 260140 000000* PUSHJ PDP, COMMAND ;YES + 000064' RSCHED: ;RESCHEDULE, HERE AFTER APRILM + 000064' 402000 000030* CIP6: SETZM STOPU ;CLEAR INTERRUPT REQUEST FLAG + 000065' 476000 000000* SETOM SCHEDF ;FLAG THAT SCHEDULING IS IN PROGRESS + 000066' 260140 000000* PUSHJ PDP, NXTJOB ;RETURN HIGHEST PRIORITY JOB IN AC ITEM + 000067' 316200 000036* CAMN ITEM, JOB ;IS IT SAME AS CURRENT JOB + 000070' 254000 000136' JRST CIP8 ;YES, EXIT + + CLOCK - CLOCK SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 4 +CLOCK MAC 24-APR-78 03:29 T. HASTINGS 6-2-65 + + + ;DIFFERENT JOB, SAVE OLD JOB + 000071' 336000 000067* SKIPN JOB ;IS OLD JOB THE NULL JOB + 000072' 254000 000110' JRST CIP7 ;YES, DONT BOTHER TO SAVE ANYTHING + 000073' 200440 000000* MOVE JA, JOBADR ;NO. MOVE CHANNEL ACS TO USER JOB AREA + 000074' 201051 000000* MOVEI T,JOBDAC(JA) + 000075' 505040 000000* HRLI T, APRSAC + 000076' 251051 000000* BLT T, JOBDHI(JA) + 000077' 201051 000000* MOVEI T, JOBPDP(JA) ;MOVE JOB STATE VARIABLES TO JOB DATA A + 000100' 505040 000000* HRLI T, USRPDP + 000101' 251051 000000* BLT T, JOBPFU(JA) + 000102' 200040 000040 MOVE T, 40 ;SAVE LOC. 40 + 000103' 202051 000000* MOVEM T, JOBLEV(JA) + 000104' 200040 000000* MOVE T, UUO0 ;AND UUO PC + 000105' 202051 000000* MOVEM T, JOBUXT(JA) + 000106' 200040 000000* MOVE T, APRCHL ;SET C(CHANNEL INTERRUPT LOC.) AS PC + 000107' 202051 000000* MOVEM T, JOBPC(JA) + + + CLOCK - CLOCK SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 5 +CLOCK MAC 24-APR-78 03:29 T. HASTINGS 6-2-65 + + + ;RESTOR NEW JOB + 000110' 202200 000071* CIP7: MOVEM ITEM, JOB ;STORE NEW CURRENT JOB NUMBER + 000111' 403000 000065* SETZB 0,SCHEDF ;INDICATE SCHEDULING FINISHED + 000112' 322200 000140' JUMPE ITEM, NUL0 ;IS NEW JOB NULL JOB + 000113' 200444 000000* MOVE JA, JBTADR(ITEM) ;SETUP STATE VARIABLES FOR CU + 000114' 552440 000073* HRRZM JA, JOBADR ;IN SYSTEM AREA + 000115' 552440 000000* HRRZM JA, JOBDAT + 000116' 556451 000000* HLRZM JA, JOBREL(JA) ;SET RELOCATION AND PROTECTION + 000117' 700140 000011 DATAO JA + 000120' 201040 000100* MOVEI T,USRPDP + 000121' 505051 000077* HRLI T, JOBPDP(JA) ;MOVE JOB STATE VARIABLES TO SYSTEM ARE + 000122' 251040 000000* BLT T, USRPFU + 000123' 200051 000103* MOVE T, JOBLEV(JA) ;RESTORE LOC. 40 + 000124' 202040 000040 MOVEM T, 40 + 000125' 200051 000105* MOVE T, JOBUXT(JA) ;AND UUO PC + 000126' 202040 000104* MOVEM T, UUO0 + 000127' 200051 000107* MOVE T, JOBPC(JA) ;SET C(CHANNEL LOC.) TO C(JOBPC) + 000130' 202040 000106* MOVEM T, APRCHL + 000131' 205751 000074* MOVSI 17, JOBDAC(JA) ;RESTORE USER ACS + 000132' 251740 000017 BLT 17,17 + 000133' 332000 000064* SKIPE STOPU ;HAS STOPU BEEN SET SINCE CIP6 + 000134' 254000 000032' JRST CIP1B ;YES, GO RESCHEDULE + 000135' 254520 000130* JEN @APRCHL ;NO. DISMISS CHANNEL + + 000136' 402000 000111* CIP8: SETZM SCHEDF ;CLEAR SCHEDULING FLAG + 000137' 254000 000000* JRST APRRET ;AND DISMISS INTERRUPT + + ;THE NULL JOB + 000140' 254400 000141' NUL0: JRST 10, NULJOB ;RENABLE AND RUN IN EXEC. MODE + + 000141' 200040 000142' NULJOB: MOVE 1,.+1 + 000142' 344000 000001 AOJA 0,1 ;COUNT IN AC0 FOR VISUAL MONITORING + ;ALSO PC = 1 + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000144 + +9K CORE USED + + CLOCK - CLOCK SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 6 +CLOCK MAC 24-APR-78 03:29 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APR 000000 SPD +APRCHL 000135' EXT +APRCHN 000000 EXT +APRILM 000023' EXT +APRINT 000016' INT +APRRET 000137' EXT +APRSAC 000075' EXT +APRSAV 000034' EXT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CIP0 000024' +CIP1 000030' +CIP1B 000032' +CIP2 000034' +CIP4 000042' +CIP5 000062' +CIP6 000064' +CIP7 000110' +CIP8 000136' +CIPWT 000001' +CLDS 000000 EXT +CLKINI 000013' INT +CLKOFF 000040' EXT +CLOCK 000000' INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +COMCNT 000062' EXT +COMMAN 000063' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT + + + CLOCK - CLOCK SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 6-1 +CLOCK MAC 24-APR-78 03:29 SYMBOL TABLE + +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT + + CLOCK - CLOCK SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 6-2 +CLOCK MAC 24-APR-78 03:29 SYMBOL TABLE + +ITEM 000004 INT +JA 000011 +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000113' EXT +JBTSTS 000037' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000110' EXT +JOBADR 000114' EXT +JOBDAC 000131' EXT +JOBDAT 000115' EXT +JOBDHI 000076' EXT +JOBLEV 000123' EXT +JOBPC 000127' EXT +JOBPDP 000121' EXT +JOBPFU 000101' EXT +JOBREL 000116' EXT +JOBUXT 000125' EXT +LOOKB 040000 INT +MTW 010000 INT +NUL0 000140' +NULJOB 000141' INT +NXTJOB 000066' EXT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PI 000004 SPD +PICHN 000100 INT +PIOFF 000400 +PION 000200 +PROG 000007 INT +RSCHED 000064' INT +RUN 200000 INT +RUNABL 204000 INT +SCHEDF 000136' EXT +STOPU 000133' EXT +STOR 000005 +T 000001 +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TIME 000035' EXT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +USRPDP 000120' EXT +USRPFU 000122' EXT +UUO 000014 INT + + CLOCK - CLOCK SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 6-3 +CLOCK MAC 24-APR-78 03:29 SYMBOL TABLE + +UUO0 000126' EXT + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC OOOOOOOOO NNN NNN + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC OOOOOOOOO NNN NNN + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC OOOOOOOOO NNN NNN +CCC OOO OOO MMMMMM MMMMMM CCC OOO OOO NNN NNN +CCC OOO OOO MMMMMM MMMMMM CCC OOO OOO NNN NNN +CCC OOO OOO MMMMMM MMMMMM CCC OOO OOO NNN NNN +CCC OOO OOO MMM MMM MMM CCC OOO OOO NNNNNN NNN +CCC OOO OOO MMM MMM MMM CCC OOO OOO NNNNNN NNN +CCC OOO OOO MMM MMM MMM CCC OOO OOO NNNNNN NNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNN NNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNN NNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNN NNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNNNNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNNNNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNNNNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNN + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC OOOOOOOOO NNN NNN + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC OOOOOOOOO NNN NNN + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC OOOOOOOOO NNN NNN + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :COMCON.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:32 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1965 +File will be deleted after printing + +COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 T.HASTINGS 8-2-65 + + XLIST + LIST + TITLE COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES + SUBTTL T.HASTINGS 8-2-65 + ;CALLED FROM COMMAND DECODER WHICH IS CALLED FROM CLOCK ROUTINE + ;WITH FOLLOWING ACS SET: + ;TAC= BYTE POINTER TO COMMAND STRING(SPACE OR CR AFTER COMMAND NAME) + ;ITEM = JOB NUMBER + ;DAT = BYTE POINTER TO LAST OUTPUT CHARACTER + ;DEVDAT= ADDRESS OF DEVICE DATA BLOCK INITIATING COMMAND + ;JDAT = ADDRESS OF JOB DATA AREA, = 0 IF NO JOB AREA + + ;UPON RETURN FROM COMMAND SETUP ROUTINE, A CR-LF IS ADDED IF + ;NEEDED AND TTY IS STARTED + + ;SINCE THE COMMAND DECODER IS CALLED FROM THE CLOCK ROUTINE + ;COMMAND SETUP ROUTINES MUST RUN TO COMPLETION QUICKLY + ;IF A COMMAND FUNCTION CANNOT DO THIS, IT MUST JUST SET + ;THE JOB TO A RUNNABLE STATUS AND RETURN I MEDIATELY + + ; "IJOB" - INITIALIZE JOB + INTERNAL IJOB + EXTERNAL RADX10,JOBINI,JOBKIL,CRLF,MONJOB + + 000000' 254000 000000* IJOB: JRST JOBINI + + ;PRINT JOB NUMBER + + INTERNAL PJOB + 000001' 200040 000004 PJOB: MOVE TAC, ITEM + 000002' 260140 000000* PUSHJ PDP,RADX10 + 000003' 254000 000000* JRST CRLF + + ;KILL JOB(MUST HAVE CORE ASSIGNED) + + INTERNAL KJOB + 000004' 254000 000000* KJOB: JRST JOBKIL + + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES MACRO 10 05:51 24-APR-78 PAGE 2 +COMCON MAC 24-APR-78 01:00 T.HASTINGS 8-2-65 + + + + ; "START L" OR "START" - START AT LOC. L OR STARTING ADDRESS + INTERNAL START + EXTERNAL OCTIN,JOBSA,START1,COMERA,STARTU,CPOPJ,CPOPJ1,STARTM + + 000005' 260140 000013' START: PUSHJ PDP,STRT + 000006' 254000 000000* JRST COMERA ;ERROR + 000007' 254000 000000* JRST STARTU ;GO SET JOB TO START(CONSOLE IN USER MO + + ; "STARTC L" OR "STARTC" - START AT LOC. L(TTY IN COMMAND MODE) + + INTERNAL STARTC + EXTERNAL STARTM + + 000010' 260140 000013' STARTC: PUSHJ PDP,STRT + 000011' 254000 000006* JRST COMERA ;ERROR + 000012' 254000 000000* JRST STARTM ;FO SET JOB TO START(TTY IN COM. MODE) + + ;ROUTINE TO SCAN ARGUMENT + + 000013' 260140 000000* STRT: PUSHJ PDP,OCTIN ;CONVERT OCTAL NO, + 000014' 254000 000016' JRST ST2 ;EITHER NO NUMBER OR ERROR + 000015' 254000 000020' JRST ST3 ;START JOB C(TAC1) + + 000016' 326100 000000* ST2: JUMPN TAC1, CPOPJ ;NOT A NUMBER IF NON-ZERO + 000017' 550111 000000* HRRZ TAC1, JOBSA(JDAT) ;NO, START AT STARTING ADDRES + 000020' 505100 001000 ST3: HRLI TAC1, 1000 ;USER MODE FLAG + 000021' 254000 000000* JRST CPOPJ1 ;OR RETURN + + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES MACRO 10 05:51 24-APR-78 PAGE 3 +COMCON MAC 24-APR-78 01:00 T.HASTINGS 8-2-65 + + + + ; "CONT" - CONTINUE EXECUTION FROM WHERE LEFT OFF + INTERNAL CONT + EXTERNAL CONTU,CONMES,JBTSTS + + 000022' 205100 002000 CONT: MOVSI TAC1, JERR + 000023' 616104 000000* TDNN TAC1, JBTSTS(ITEM) ;IS JOB ERROR BIT SET? + 000024' 254000 000000* JRST CONTU ;NO, GO SET JOB TO CONTINUE + 000025' 265040 000000* CONTA: JSP TAC,CONMES ;YES, PRINT CANT CONTINUE + + 000026' 416031 623650 ASCIZ /CAN'T CONTINUE + 000027' 202071 747250 + 000030' 446352 542432 + 000031' 050000 000000 / + + ; "CONTC" - CONTINUE EXECUTION(TTY REMAINS IN COMMAND MODE) + + INTERNAL CONTC + EXTERNAL CONTM + + 000032' 205100 002000 CONTC: MOVSI TAC1, JERR + 000033' 616104 000023* TDNN TAC1, JBTSTS(ITEM) ;IS JOB ERROR BIT SET? + 000034' 254000 000000* JRST CONTM ;NO + 000035' 254000 000025' JRST CONTA ;YES + + ; "DDT" - START EXECUTION AT DDT IN USER AREA + INTERNAL DDTGO + EXTERNAL JOBDDT,STARTU + + 000036' 550111 000000* DDTGO: HRRZ TAC1, JOBDDT(JDAT) ;GET DDT STARTING ADDRESS + 000037' 326100 000043' JUMPN TAC1,DDT1 ;GO START JOB IF NON-ZERO + 000040' 265040 000025* JSP TAC,CONMES ;ZERO, PRINT"NO DDT" + + 000041' 472364 042210 ASCII /NO DDT + 000042' 520321 200000 / + + 000043' 505100 010000 DDT1: HRLI TAC1,USRMOD ;USER MODE BIT + 000044' 254000 000007* JRST STARTU ;GO SET TO RUN JOB + ;DIGITAL MAYNARD + + INTERNAL DIGITAL + + 000045' 265040 000040* DIGITAL: JSP TAC,CONMES + 000046' 442131 446236 ASCIZ /HELLO + 000047' 064240 000000 / + + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES MACRO 10 05:51 24-APR-78 PAGE 4 +COMCON MAC 24-APR-78 01:00 T.HASTINGS 8-2-65 + + + + + + ; "CORE #" - ASSIGNS #*1024 WORDS OF CORE TO JOB + ; "CORE" WITH NO ARGUMENT IS EQUIVALENT TO "CORE 0" + + INTERNAL CORE + EXTERNAL CORE1,DECIN,ANYRIN,CONMES,COMERA,NOTENF + EXTERNAL JOBPFI,JBTADR,CPOPJ,JOBPRT,JOBPR1,JOBZER + EXTERNAL RADX10 + + 000050' 260140 000000* CORE: PUSHJ PDP, DECIN ;GET NO. OF 1K BLOCKS + 000051' 254000 000077' JRST COR3 ;ERROR + 000052' 336040 000002 SKIPN TAC,TAC1 ;IS ZERO BEING ASKED FOR? + 000053' 326440 000000* JUMPN JDAT,JOBZER ;YES, RELEASE ALL DEVICES IF THERE WAS + 000054' 260140 000000* PUSHJ PDP,CORE1 + 000055' 254000 000065' JRST COR2 ;CORE NOT AVAILABLE (AC TAC = BLO CKS L + 000056' 550444 000000* HRRZ JDAT, JBTADR(ITEM) ;CORE GRANTED, CLEAR PART OF + 000057' 322440 000016* JUMPE JDAT, CPOPJ ;UNLESS ALL CORE WAS RETURNED + 000060' 402011 000000* SETZM JOBPRT(JDAT) ;CLEAR PART PROTECTED FROM IO + 000061' 505051 000060* HRLI TAC,JOBPRT(JDAT) + 000062' 541051 000000* HRRI TAC, JOBPR1(JDAT) + 000063' 251051 000000* BLT TAC, JOBPFI(JDAT) + 000064' 263140 000000 POPJ PDP, + + 000065' 260140 000002* COR2: PUSHJ PDP,RADX10 ;PRINT NO. OF FREE 1K BLOCKS LEFT + 000066' 265040 000045* JSP TAC,CONMES + + 000067' 202152 242612 ASCIZ / FREE 1K BLOCKS LEFT, NONE ASSIGNED + 000070' 201431 320204 + 000071' 462370 345646 + 000072' 202310 543250 + 000073' 261011 647634 + 000074' 425010 151646 + 000075' 446171 642610 + 000076' 064240 000000 / + 000077' 326100 000011* COR3: JUMPN TAC1, COMERA ;NOT A NO. IF NON-ZERO, APPEND "?" + 000100' 254000 000000* JRST NOTENF ;NOT ENOUGH ARGUMENT + + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES MACRO 10 05:51 24-APR-78 PAGE 5 +COMCON MAC 24-APR-78 01:00 T.HASTINGS 8-2-65 + + + + ; "SAVE FILE-NAME" - SAVES JOB AREA ON RETRIEVABLE DEVICE + ;ONLY A SAVE OR A GET IN PROGRESS FOR EACH JOB + ;NO ATTEMPT IS MADE TO SAVE DEVICE ASSIGNMENTS, ACS, OR PC + INTERNAL SAVE + EXTERNAL SAVJOB,START1,SGSET + + 000101' 201100 000000* SAVE: MOVEI TAC1, SAVJOB ;SETUP TO RUN SAVJOB + 000102' 254000 000000* JRST SGSET + + ; "GET DEVICE:FILE-NAME" - SETS UP JOB AREA FROM RETRIEVABLE DEVICE + INTERNAL GET + EXTERNAL GETJOB + + 000103' 201100 000000* GET: MOVEI TAC1, GETJOB ;SETUP TO RUN GET JOB + 000104' 254000 000102* JRST SGSET + + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES MACRO 10 05:51 24-APR-78 PAGE 6 +COMCON MAC 24-APR-78 01:00 T.HASTINGS 8-2-65 + + + + + ;"ASSIGN DEV:NAME" - ASSIGNS DEV TO JOB AND GIVES IT LOGICAL NAME NAM + + ;TEMPORARY ACS + 000012 T1=BUFPNT + 000013 T=BUFWRD + + INTERNAL ASSIGN + EXTERNAL CTEXT1, NOTENF, DEVLST, ASSASG, CONMES, PJOBN, ANYRDX, ERNAM + EXTERNAL CRLF, DEVLG,SYSTAP + + 000105' 260140 000000* ASSIGN: PUSHJ PDP, CTEXT1 ;GET FIRST ARGUMENT + 000106' 322100 000100* JUMPE TAC1, NOTENF ;NO ARGUMENTS TYPED IF 0 + 000107' 200500 000002 MOVE T1, TAC1 ;SAVE DEVICE NAME + 000110' 261140 400000 PUSH PDP, ASSCON ;SAVE INPUT BYTE POINTER + 000111' 201100 400000 MOVEI TAC1, ASSCON ;SETUP ASSIGNED BY CONSOLE BIT + 000112' 554300 000000* ASSN: HLRZ DEVDAT, DEVLST + 000113' 312506 000000 ASSG0: CAME T1,DEVNAM(DEVDAT) ;DOES PHYSICAL NAME MATCH? + 000114' 254000 000120' JRST ASSG1 ;NO + 000115' 260140 000000* PUSHJ PDP, ASSASG ;YES, TRY TO ASSIGN DEVICE + 000116' 254000 000135' JRST ASSER1 ;ALREADY ASSIGNED TO ANOTHER JOB + 000117' 254000 000151' JRST ASSFIN ;ASSIGNED + + 000120' 200046 000000 ASSG1: MOVE TAC,DEVNAM(DEVDAT) ;IS THIS THE SYSTEM TAPE? + 000121' 316040 000000* CAMN TAC,SYSTAP + 000122' 254000 000131' JRST ASSG2 ;YES + 000123' 135540 000000* LDB T, PJOBN ;SAVE OLD JOB NUMBER FOR THIS + 000124' 620040 777777 TRZ TAC,-1 ;COMPARE LEFT HALF ONLY + 000125' 316040 000012 CAMN TAC, T1 + 000126' 260140 000115* PUSHJ PDP, ASSASG ;MATCH, TRY TO ASSIGN IT + 000127' 254000 000131' JRST ASSG2 ;KEEP LOOKING + 000130' 322540 000151' JUMPE T,ASSFIN ;IF OLD JOB NUMBER 0, DEVICE PREVIOSLY + + 000131' 554306 000003 ASSG2: HLRZ DEVDAT, DEVSER(DEVDAT) + 000132' 326300 000113' JUMPN DEVDAT, ASSG0 + 000133' 262140 000001 POP PDP, TAC + 000134' 254000 000211' JRST NOTDEV ;PRINT NO SUCH DEVICE + + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES MACRO 10 05:51 24-APR-78 PAGE 7 +COMCON MAC 24-APR-78 01:00 T.HASTINGS 8-2-65 + + + + ;ALREADY ASSIGNED TO ANOTHER JOB + + 000135' 262140 000001 ASSER1: POP PDP, TAC + 000136' 201040 000144' MOVEI TAC, ASSMS2 + 000137' 260140 000066* PUSHJ PDP, CONMES + 000140' 201100 000012 MOVEI TAC1, ^D10 + 000141' 135040 000123* LDB TAC, PJOBN + 000142' 260140 000000* PUSHJ PDP,ANYRDX + 000143' 254000 000003* JRST CRLF + + 000144' 406312 242602 ASSMS2: ASCIZ /ALREADY ASSIGNED TO JOB / + 000145' 422624 040646 + 000146' 516230 747212 + 000147' 421012 447500 + 000150' 452370 220000 + + ;DEVICE ASSIGNED, GIVE IT A LOGICAL NAME + + 000151' 262140 000001 ASSFIN: POP PDP,TAC ;RESTORE INPUT BYTE POINTER + 000152' 261140 000006 PUSH PDP,DEVDAT ;SAVE DDB ADDRESS + 000153' 260140 000105* PUSHJ PDP,CTEXT1 ;GET SECOND ARG, LOGICAL DEVICE NAME + 000154' 332040 000002 SKIPE TAC,TAC1 ;IS THERE A LOGICAL NAME SPECIFIED? + 000155' 260140 000000* PUSHJ PDP, DEVLG ;YES, SEE IF IT IS ALREADY IN USE + ;BY THIS USER + 000156' 254000 000161' JRST ASSF1 ;NO + 000157' 201040 000173' MOVEI TAC,LOGERR ;YES, PRINT ERROR + 000160' 260140 000137* PUSHJ PDP,CONMES + 000161' 200303 000000 ASSF1: MOVE DEVDAT,(PDP) ;RESTORE DDB ADDRESS + 000162' 202106 000005 MOVEM TAC1,DEVLOG(DEVDAT) ;STORE IN DEVICE DATA BLOCK + 000163' 205100 400000 MOVSI TAC1,DVDIRIN ;CLEAR DIRECTORY IN CORE BIT + 000164' 412106 000004 ANDCAM TAC1,DEVMOD(DEVDAT) + 000165' 260140 000000* PUSHJ PDP, ERNAM ;PRINT PHYSICAL DEVICE NAME + 000166' 262140 000006 POP PDP, DEVDAT + 000167' 265040 000160* JSP TAC,CONMES + + 000170' 202032 351622 ASCIZ / ASSIGNED + 000171' 436350 542032 + 000172' 050000 000000 / + + 000173' 462370 744606 LOGERR: ASCIZ /LOGICAL NAME ALREADY IN USE, / + 000174' 406304 047202 + 000175' 466124 040630 + 000176' 512130 142262 + 000177' 202231 620252 + 000200' 516125 420000 + + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES MACRO 10 05:51 24-APR-78 PAGE 8 +COMCON MAC 24-APR-78 01:00 T.HASTINGS 8-2-65 + + + + ;"DEASSIGN DEV" - DEASSIGNS DEVICE FROM CONSOLE + + INTERNAL DEASSIGN, NOTDEV + EXTERNAL CTEXT1, DEVSRC, CONMES, ERNAM, DEASG, DEASTY + + 000201' 260140 000153* DEASSIGN: PUSHJ PDP, CTEXT1 ;GET DEVICE NAME + 000202' 322100 000000* JUMPE TAC1,DEASTY ;NO ARG. IF 0, DEASSIGN ALL BUT TTY + 000203' 200040 000002 MOVE TAC, TAC1 ;DEVICE NAME + 000204' 260140 000000* PUSHJ PDP, DEVSRC ;SEARCH FOR DEVICE + 000205' 254000 000211' JRST DEAER1 ;NOT FOUND + 000206' 260140 000000* PUSHJ PDP, DEASG ;FOUND, DEASSIGN IT + 000207' 254000 000216' JRST DEAER2 ;NOT PREVIOUSLY ASSIGNED + 000210' 263140 000000 POPJ PDP, ;DEVICE DEASSIGNED + + 000211' NOTDEV: + 000211' 265040 000167* DEAER1: JSP TAC,CONMES ;PRINT NO SUCH DEVICE + + 000212' 472364 051652 ASCIZ /NO SUCH DEVICE + 000213' 416204 042212 + 000214' 532230 342432 + 000215' 050000 000000 / + + 000216' 261140 000006 DEAER2: PUSH PDP, DEVDAT ;PRINT PHYSICAL DEVICE NAME + 000217' 260140 000165* PUSHJ PDP, ERNAM + 000220' 262140 000006 POP PDP, DEVDAT + 000221' 265040 000211* JSP TAC,CONMES + + 000222' 536032 347116 ASCIZ /WASN'T ASSIGNED + 000223' 521010 151646 + 000224' 446171 642610 + 000225' 064240 000000 / + + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES MACRO 10 05:51 24-APR-78 PAGE 9 +COMCON MAC 24-APR-78 01:00 T.HASTINGS 8-2-65 + + + + ; "ATTACH N" - ATTACH CONSOLE TO JOB N + ;CHANGES ADDRESS OF TTY DEVICE DATA BLOCK STORED IN -1(PDP) + ;BY THE COMMAND DECODER + + INTERNAL ATTACH + EXTERNAL DECIN,TTYATT,JOBN,ERNAM,CONMES,TTYFND + + 000226' 260140 000050* ATTACH: PUSHJ PDP,DECIN ;GET JOB NO. + 000227' 254000 000243' JRST ATT1 ;NOT A NUMBER OR NONE SPECIFIEED + 000230' 332000 000002 SKIPE TAC1 ;0 IS ILLEGAL + 000231' 301100 000000* CAIL TAC1, JOBN ;IS JOB NUMBER TOO BIG? + 000232' 254000 000243' JRST ATT1 ;ILLEGAL JOB NUMBER + 000233' 205040 004000 MOVSI TAC,JNA ;HAS THIS JOB NO BEEN ASSIGNED? + 000234' 616042 000033* TDNN TAC,JBTSTS(TAC1) + 000235' 254000 000261' JRST ATT4 ;NO, PRINT ERROR + 000236' 200200 000002 MOVE ITEM,TAC1 ;JOB NUMBER TO ITEM + 000237' 260140 000000* PUSHJ PDP,TTYATT ;NO, ATTACH TTY + 000240' 254000 000251' JRST ATT2 ;ERROR CANT ATTACH + 000241' 202303 777777 MOVEM DEVDAT,-1(PDP) ;CHANGE DEV DATA BLOCK ADDRES + 000242' 254000 000000* JRST TTYFND ;ATTACHED. GO SET UP OUTP. BYTE PTR. + + 000243' 265040 000221* ATT1: JSP TAC,CONMES + 000244' 446311 442616 ASCIZ /ILLEGAL JOB NUMBER + 000245' 406304 045236 + 000246' 411011 652632 + 000247' 412132 206424 / + 000250' 000000 000000 + + 000251' 261140 000006 ATT2: PUSH PDP,DEVDAT + 000252' 260140 000217* PUSHJ PDP,ERNAM ;PRINT TTY DEVICE NAME + 000253' 262140 000001 POP PDP,TAC + 000254' 265040 000243* JSP TAC,CONMES + 000255' 202031 451212 ASCIZ / ALREADY ATTACHED + 000256' 406113 120202 + 000257' 522510 141620 + 000260' 426101 505000 / + + 000261' 265040 000254* ATT4: JSP TAC,CONMES + 000262' 452370 220234 ASCIZ /JOB NEVER WAS INITIATED + 000263' 426550 551100 + 000264' 536032 320222 + 000265' 472232 444602 + 000266' 522130 406424 / + 000267' 000000 000000 + + ; "DETACH" - DETACH CONSOLE FORM JOB + + INTERNAL DETACH + EXTERNAL TTYDET + + 000270' 350003 000000 DETACH: AOS (PDP) ;SUPRESS CR-LF SO NO TTY DDB SETUP + + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES MACRO 10 05:51 24-APR-78 PAGE 9-1 +COMCON MAC 24-APR-78 01:00 T.HASTINGS 8-2-65 + + 000271' 254000 000000* JRST TTYDET ;GO DETACH TTY + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000272 + +9K CORE USED + + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES MACRO 10 05:51 24-APR-78 PAGE 10 +COMCON MAC 24-APR-78 01:00 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ANYRDX 000142' EXT +ANYRIN 000000 EXT +ASSASG 000126' EXT +ASSCON 400000 INT +ASSER1 000135' +ASSF1 000161' +ASSFIN 000151' +ASSG0 000113' +ASSG1 000120' +ASSG2 000131' +ASSIGN 000105' INT +ASSMS2 000144' +ASSN 000112' +ASSPRG 200000 INT +ATT1 000243' +ATT2 000251' +ATT4 000261' +ATTACH 000226' INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +COMERA 000077' EXT +CONMES 000261' EXT +CONT 000022' INT +CONTA 000025' +CONTC 000032' INT +CONTM 000034' EXT +CONTU 000024' EXT +COR2 000065' +COR3 000077' +CORE 000050' INT +CORE1 000054' EXT +CPOPJ 000057' EXT +CPOPJ1 000021' EXT +CRLF 000143' EXT +CTEXT1 000201' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDT1 000043' +DDTGO 000036' INT + + + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES MACRO 10 05:51 24-APR-78 PAGE 10-1 +COMCON MAC 24-APR-78 01:00 SYMBOL TABLE + +DDTMEM 000037 INT +DDTSYM 000036 INT +DEAER1 000211' +DEAER2 000216' +DEASG 000206' EXT +DEASSI 000201' INT +DEASTY 000202' EXT +DECIN 000226' EXT +DEN 000004 INT +DETACH 000270' INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLG 000155' EXT +DEVLOG 000005 INT +DEVLST 000112' EXT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DEVSRC 000204' EXT +DGF 000012 INT +DIGITA 000045' INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERNAM 000252' EXT +GET 000103' INT +GETJOB 000103' EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +IJOB 000000' INT + + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES MACRO 10 05:51 24-APR-78 PAGE 10-2 +COMCON MAC 24-APR-78 01:00 SYMBOL TABLE + +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000056' EXT +JBTSTS 000234' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOBDDT 000036' EXT +JOBINI 000000' EXT +JOBKIL 000004' EXT +JOBN 000231' EXT +JOBPFI 000063' EXT +JOBPR1 000062' EXT +JOBPRT 000061' EXT +JOBSA 000017' EXT +JOBZER 000053' EXT +KJOB 000004' INT +LOGERR 000173' +LOOKB 040000 INT +MONJOB 000000 EXT +MTW 010000 INT +NOTDEV 000211' INT +NOTENF 000106' EXT +OBUFB 100000 INT +OCTIN 000013' EXT + + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES MACRO 10 05:51 24-APR-78 PAGE 10-3 +COMCON MAC 24-APR-78 01:00 SYMBOL TABLE + +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PJOB 000001' INT +PJOBN 000141' EXT +PROG 000007 INT +RADX10 000065' EXT +RUN 200000 INT +RUNABL 204000 INT +SAVE 000101' INT +SAVJOB 000101' EXT +SGSET 000104' EXT +ST2 000016' +ST3 000020' +START 000005' INT +START1 000000 EXT +STARTC 000010' INT +STARTM 000012' EXT +STARTU 000044' EXT +STRT 000013' +SYSTAP 000121' EXT +T 000013 +T1 000012 +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYATT 000237' EXT +TTYDET 000271' EXT +TTYFND 000242' EXT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +CCC OOO OOO MMMMMM MMMMMM CCC SSS SSS +CCC OOO OOO MMMMMM MMMMMM CCC SSS SSS +CCC OOO OOO MMMMMM MMMMMM CCC SSS SSS +CCC OOO OOO MMM MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM CCC SSSSSSSSS SSSSSSSSS +CCC OOO OOO MMM MMM CCC SSSSSSSSS SSSSSSSSS +CCC OOO OOO MMM MMM CCC SSSSSSSSS SSSSSSSSS +CCC OOO OOO MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM CCC SSS SSS + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :COMCSS.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:32 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1951 +File will be deleted after printing + +COMCSS - COMMAND COMMON ROUTINES MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 T. HASTINGS 8-15-65 + + XLIST + LIST + TITLE COMCSS - COMMAND COMMON ROUTINES + SUBTTL T. HASTINGS 8-15-65 + ;ROUTINE TO RETURN NEXT ALPHANUMERIC STRING + ; IN COMMAND LINE (SIXBIT) + ; CALL: MOVE TAC, BYTE POINTER TO FIRST CHAR.-1 + ; PUSHJ PDP, CTEXT + ; SIXBIT STRING RETURN LEFT JUSTIFIED IN AC TAC1 + + INTERNAL CTEXT, CTEXT1 + + 000012 T=BUFPNT ;TEMPORARY ACS + 000013 T1=BUFWRD + 000014 T2=UUO + + 000000' 201100 000000 CTEXT1: MOVEI TAC1, 0 ;CHECK PREVIOUS BREAK CHAR. + 000001' 135500 000001 LDB T, TAC + 000002' 306500 000015 CAIN T, 15 ;RETURN IF CR. + 000003' 263140 000000 POPJ PDP, + + 000004' 260140 000035' CTEXT: PUSHJ PDP, SKIPS ;SKIP LEADING SPACES, TABS + 000005' 200500 000231' MOVE T,[POINT 6,TAC1] + 000006' 201100 000000 MOVEI TAC1, 0 + 000007' 135540 000001 LDB T1, TAC + 000010' 254000 000012' JRST CTEX1 + 000011' 134540 000001 CTEX0: ILDB T1,TAC + 000012' 260140 000024' CTEX1: PUSHJ PDP, CTEX ;IS IT ALPHANUMERIC + 000013' 263140 000000 POPJ PDP, ;NO. EXIT + 000014' 640540 000040 TRC T1,40 ;CONVERT TO SIXBIT + 000015' 136540 000012 IDPB T1,T ;YES, STORE AWAY + 000016' 312500 000232' CAME T,[POINT 6,TAC1,35] ;SIX CHARACTER YET + 000017' 254000 000011' JRST CTEX0 ;NO + 000020' 134540 000001 CTEX2: ILDB T1, TAC ;YES + 000021' 260140 000024' PUSHJ PDP, CTEX ;IS IT ALPHANUMERIC + 000022' 263140 000000 POPJ PDP, ;NO, EXIT + 000023' 254000 000020' JRST CTEX2 + + ;SCAN FOR ALPHANUMERIC CHAR IN T1 + 000024' 301540 000060 CTEX: CAIL T1, "0" + 000025' 303540 000132 CAILE T1, "Z" ;LETTERS ARE LARGER THAN NOS. + 000026' 263140 000000 POPJ PDP, ;NEITHER + 000027' 303540 000071 CAILE T1, "9" + 000030' 301540 000101 CAIL T1, "A" + 000031' 350003 000000 AOS (PDP) ;LETTER OR NUMBER + 000032' 263140 000000 POPJ PDP, + + COMCSS - COMMAND COMMON ROUTINES MACRO 10 05:51 24-APR-78 PAGE 2 +COMCSS MAC 24-APR-78 01:01 T. HASTINGS 8-15-65 + + + ;ROUTINE TO IGNORE LEADING SPACES AND TABS + ;CALL: MOVE TAC, BYTE POINTER TO CHAR. + ; PUSHJ PDP, SKIPS1 + + INTERNAL SKIPS1 + + 000033' 135500 000001 SKIPS1: LDB T, TAC + 000034' 254000 000036' JRST SKIPSA + + ;ROUTINE TO IGNORE LEDING SPACES AND TABS + ;CALL: MOVE TAC, BYTE POINTER TO CHAR.-1 + ; PUSHJ PDP, SKIPS + + INTERNAL SKIPS + + 000035' 134500 000001 SKIPS: ILDB T, TAC + 000036' 302500 000040 SKIPSA: CAIE T, " " + 000037' 306500 000011 CAIN T, 11 + 000040' 254000 000035' JRST SKIPS + 000041' 263140 000000 POPJ PDP, + + COMCSS - COMMAND COMMON ROUTINES MACRO 10 05:51 24-APR-78 PAGE 3 +COMCSS MAC 24-APR-78 01:01 T. HASTINGS 8-15-65 + + + ;ROUTINE TO APPEND A "?" TO INPUT STRING AND SET AS OUTPUT + ;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING + ; PUSHJ PDP, COMERA + + INTERNAL COMERA + + 000042' 133000 000001 COMERA: IBP TAC + + ;ROUTINE TO REPLACE LAST CHARACTER IN INPUT STRING BY "?" + ;AND SET AS OUTPUT + ;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING + ; PUSHJ PDP, COMERR + + INTERNAL COMERR + + EXTERNAL TTYBUF + + 000043' 200240 000001 COMERR: MOVE DAT,TAC + 000044' 201506 000000* MOVEI T,TTYBUF(DEVDAT) ;IS THERE MORE THAN 3 WORDS I + 000045' 305505 777775 CAIGE T,-3(DAT) + 000046' 541252 000003 HRRI DAT,3(T) ;YES, TYPE ONLY 3 + 000047' 201500 000077 MOVEI T, "?" ;APPEND "?" + 000050' 137500 000005 DPB T, DAT + 000051' 265040 000060' JSP TAC,CONMES + + 000052' 202331 747222 ASCIZ / MONITOR COMMAND ERROR + 000053' 522372 220206 + 000054' 476331 540634 + 000055' 421010 551244 + 000056' 476441 505000 / + + COMCSS - COMMAND COMMON ROUTINES MACRO 10 05:51 24-APR-78 PAGE 4 +COMCSS MAC 24-APR-78 01:01 T. HASTINGS 8-15-65 + + + ;ROUTINE TO PRINT CARRIAGE RETURN-LINE-FEED + ;CALL: MOVE DAT,BYTE POINTER TO OUTPUT + ; PUSHJ PDP,CRLF + + INTERNAL CRLF + + CRLF: MOVEI TAC,[ASCII / + 000057' 201040 000233' /] + + ;ROUTINE TO MOVE ASCII CHAR. STRING TO CONSOLE OUTPUT BUFFER + ; CALL: MOVE DAT, BYTE POINTER TO LAST OUTPUT CHARACTER + ; MOVEI TAC, ADDRESS OF ASCII MESSAGE` + ; PUSHJ PDP, CONMES + ; STRING TERMINATED BY NULL + ; CONMES DOES NOT START TTY + + INTERNAL CONMES + + 000060' 261140 000002 CONMES: PUSH PDP, TAC1 + 000061' 505040 440700 HRLI TAC, 440700 ;FORM BYTE POINTER + 000062' 134100 000001 CON0: ILDB TAC1, TAC + 000063' 322100 000066' JUMPE TAC1, CON1 + 000064' 136100 000005 IDPB TAC1, DAT + 000065' 254000 000062' JRST CON0 + 000066' 262140 000002 CON1: POP PDP, TAC1 + 000067' 263140 000000 POPJ PDP, + + ;ROUTINE TO PRINT "TO FEW ARGUMENTS" + ;CALL: MOVE DAT,BYTE POINTER + ; PUSHJ PDP,NOTENF + + INTERNAL NOTENF + + 000070' 265040 000060' NOTENF: JSP TAC,CONMES + + 000071' 522371 720214 ASCIZ /TOO FEW ARGUMENTS + 000072' 426564 040644 + 000073' 436531 542634 + 000074' 522461 505000 / + + COMCSS - COMMAND COMMON ROUTINES MACRO 10 05:51 24-APR-78 PAGE 5 +COMCSS MAC 24-APR-78 01:01 T. HASTINGS 8-15-65 + + + ;ROUTINE TO INITIALIZE A JOB + ;CALL: MOVE ITEM, JOB NUMBER + ; PUSHJ PDP, JOBINI + ; DEVDAT IS SETUP ON RETURN + + INTERNAL JOBINI,JOBZER + EXTERNAL JBTSTS,PJOBN,CORE1,MONJOB,ESTOP,TTYATT + + 000075' 326200 000100' JOBINI: JUMPN ITEM,JOB0 ;HAS A JOB NUMBER BEED ASSIGNED? + 000076' 260140 000135' PUSHJ PDP,ASSJOB ;NO, THEN ASSIGN ONE. + 000077' 254000 000060' JRST CONMESS ;NONE LEFT + 000100' 260140 000000* JOB0: PUSHJ PDP,TTYATT ;ATTACH TTY + 000101' 255000 000000 JFCL ;ALREADY ATTACHED + 000102' 205040 004000 MOVSI TAC,JNA ;CLEAR JOB NO. ASSIGNED BIT + 000103' 412044 000000* ANDCAM TAC,JBTSTS(ITEM) ;TO FORCE MESSAGE + 000104' 205040 646471 MOVSI TAC,646471 ;SIXBIT /TTY/ + 000105' 202046 000005 MOVEM TAC, DEVLOG(DEVDAT) ;SET LOGICAL NAME + 000106' 201500 400000 MOVEI T, ASSCON ;SET ASSIGNED BY CONSOLE BIT + 000107' 436506 000004 IORM T, DEVMOD(DEVDAT) + 000110' 260140 000172' PUSHJ PDP, DEASTY ;DE-ASSIGNED ALL DEVICES EXCEPT TTY + 000111' 322440 000000* JUMPE JDAT,CPOPJ ;DOES JOB ALREDY HAVE CORE? + + ;ROUTINE TO RELEASE ALL DEVICES AND FLUSH CORE + ;RUN AS MONITOR JOB + ;CALL: SAME AS JOBIN + + EXTERNAL IOKILL + + 000112' 541100 000115' JOBZER: HRRI TAC1,JOB1 ;ADDRESS OF SUB. TO RELEASE DEV. + 000113' 505100 000000* JOBZR1: HRLI TAC1, ESTOP ;RETURN ADDRESS AFER IORELS + 000114' 254000 000000* JRST MONJOB ;GO SCHEDULE MONITOR JOB + + 000115' 260140 000000* JOB1: PUSHJ PDP,IOKILL ;KILL ALL IO DEVICES + 000116' 201040 000000 MOVEI TAC,0 ;FLUSH ALL CORE + 000117' 370003 000000 SOS (PDP) ;CORE1 WILL SKIP RETURN + 000120' 254000 000000* JRST CORE1 + + COMCSS - COMMAND COMMON ROUTINES MACRO 10 05:51 24-APR-78 PAGE 6 +COMCSS MAC 24-APR-78 01:01 T. HASTINGS 8-15-65 + + + ;ROUTINE TO KILL CURRENT JOB + ;CALL PUSHJ PDP,JOBKIL + + INTERNAL JOBKIL + EXTERNAL JBTSTS,TTYKIL + + 000121' 350003 000000 JOBKIL: AOS (PDP) ;SUPRESS CR-LF AND JOB INIT. CHECK + 000122' 201040 000001 MOVEI TAC,1 + 000123' 260140 000173' PUSHJ PDP,DEASAL ;DEASSIGN ALL DEVICES + 000124' 322440 000132' JUMPE JDAT,JOBKA ;DOES JOB HAVE CORE? + 000125' 541100 000127' HRRI TAC1,JOBK2 ;YES,RELEAS DEVICE AND CLEAR + 000126' 254000 000113' JRST JOBZR1 + + 000127' 261140 000006 JOBK2: PUSH PDP,DEVDAT ;SAVE DEVDAT FOR TTYKIL + 000130' 260140 000115' PUSHJ PDP,JOB1 ;FLUSH CORE AND RELEASE DEVICES + 000131' 262140 000006 POP PDP,DEVDAT + 000132' 205040 002000 JOBKA: MOVSI TAC,JERR ;CLEAR ALL BUT JOB ERROR BIT + 000133' 202044 000103* MOVEM TAC,JBTSTS(ITEM) ;IN JOB STATUS WORD + 000134' 254000 000000* JRST TTYKIL ;RETURN TTY TO VIRGIN STATE + + ;ROUTINE TO ASSIGN AN UNUSED JOB NUMBER + ;CALL PUSHJ PDP,ASSJOB + ; ERROR RETURN TAC DESTROYED + ; OK RETURN ITEM SET, TAC AND TAC1 PRESERVED + + INTERNAL ASSJOB + EXTERNAL MJOBN,JBTSTS,CPOPJ1 + + 000135' 205200 000000* ASSJOB: MOVSI ITEM,MJOBN + 000136' 253200 000137' AOBJN ITEM,.+1 + 000137' 205540 004000 MOVSI T1,JNA + 000140' 612544 000133* TDNE T1,JBTSTS(ITEM) + 000141' 253200 000140' AOBJN ITEM,.-1 + 000142' 325200 000145' JUMPGE ITEM,ASSJB1 + 000143' 405200 777777 ANDI ITEM,-1 + 000144' 254000 000000* JRST CPOPJ1 + + 000145' 265040 000060' ASSJB1: JSP TAC,CONMES + 000146' 452370 220206 ASCIZ /JOB CAPACITY EXCEEDED + 000147' 406410 141622 + 000150' 522624 042660 + 000151' 416130 542212 + 000152' 420321 200000 / + + COMCSS - COMMAND COMMON ROUTINES MACRO 10 05:51 24-APR-78 PAGE 7 +COMCSS MAC 24-APR-78 01:01 T. HASTINGS 8-15-65 + + + ;ROUTINE TO DEASSIGN A DEVICE + ;CALL: MOVE DEVDAT, DEVICE DATA BLOCK + ; MOVE ITEM, JOB NUMBER + ; PUSHJ DPD, DEASG + ; ERROR NOT PREVIOUSLY ASSIGNED + ; OK RETURN WITH DEVICE DEASSIGNED + + INTERNAL DEASG + EXTERNAL PJOBN, CPOPJ1 + + 000153' 135500 000000* DEASG: LDB T, PJOBN ;WAS DEVICE ASSIGNED TO THIS JOB? + 000154' 312500 000004 CAME T, ITEM + 000155' 263140 000000 POPJ PDP, ;NO. RETURN + 000156' 205500 400000 MOVSI T,DVDIRIN ;CLEAR DIRECTORY IN CORE BIT + 000157' 412506 000004 ANDCAM T,DEVMOD(DEVDAT) + 000160' 201500 400000 MOVEI T, ASSCON ;YES, IS ASSIGNED BY CONSOLE BIT ON? + 000161' 616506 000004 TDNN T, DEVMOD(DEVDAT) + 000162' 263140 000000 POPJ PDP, ;NO + 000163' 413506 000004 ANDCAB T,DEVMOD(DEVDAT) ;YES, CLEAR BIT + 000164' 402006 000005 SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME + 000165' 602500 200000 TRNE T, ASSPRG ;IS ASSIGNED BY PROGRAM BIT ON? + 000166' 254000 000144* JRST CPOPJ1 ;YES + 000167' 201500 000000 MOVEI T,0 ;NO, CLEAR JOB NUMBER + 000170' 137500 000153* DPB T, PJOBN + 000171' 254000 000166* JRST CPOPJ1 + + ;ROUTINE TO DEASSIGN ALL DEVICES EXCEPT LOGICAL TTY + ;CALL: MOVE ITEM, JOB NUMBER + ; PUSHJ PDP, DEASTY + + INTERNAL DEASTY + + 000172' 205040 646471 DEASTY: MOVSI TAC, 646471 ;SIXBIT /TTY/ + ;FALL INTO DEASAL + + ;ROUTINE TO DEASSIGN ALL DEVICES EXECPT ONE + ;CALL: MOVE ITEM, JOB NUMBER + ; MOVE TAC, LOGICAL DEVICE NOT TO BE DEASSIGNED + ; PUSHJ PDP, DEASAL + + INTERNAL DEASAL + EXTERNAL DEVLST + + 000173' 261140 000006 DEASAL: PUSH PDP,DEVDAT + 000174' 554300 000000* HLRZ DEVDAT,DEVLST ;SEARCH ALL DDBS + 000175' 312046 000005 DEA1: CAME TAC, DEVLOG(DEVDAT) ;IS THIS THE LOGICAL NAME + 000176' 260140 000153' PUSHJ PDP, DEASG ;NO, TRY TO DEASSIGN IT + 000177' 255000 000000 JFCL ;IGNORE IF CANT + 000200' 554306 000003 HLRZ DEVDAT, DEVSER(DEVDAT) + 000201' 326300 000175' JUMPN DEVDAT, DEA1 + 000202' 262140 000006 POP PDP,DEVDAT + 000203' 263140 000000 POPJ PDP, + + COMCSS - COMMAND COMMON ROUTINES MACRO 10 05:51 24-APR-78 PAGE 8 +COMCSS MAC 24-APR-78 01:01 T. HASTINGS 8-15-65 + + + ;ROUTINE TO READ CONSOLE AND CONVERT ANY RADIX NUMBER + ; CALL: MOVE TAC1, DESIRED RADIX + ; MOVE TAC, BYTE POINTER TO FIRST CHRACTER + ; PUSHJ PDP, ANYRIN + ; ERROR EXIT ;AC TAC1=0 IF NO NUMBER BEFORE FIRST NO + ; NORMAL EXIT ;AC TAC1 CONTAINS NUMEBR + ; SCAN STOPS ON FIRST ILLEGAL CHARACTER OR CR + ; IGNORES SPACES, TABS, RUBOUTS + + INTERNAL OCTIN,ANYRIN,DECIN,DECIN1 + EXTERNAL CPOPJ1, CPOPJ + + 000012 C=BUFPNT ;CHARACTER AC + 000013 R=BUFWRD ;RADIX AC + + 000204' 133000 000001 DECIN1: IBP TAC ;SKIP SEPARATION CHARACTER + 000205' 201100 000012 DECIN: MOVEI TAC1,12 ;DECIMAL INPUT + 000206' 254000 000210' JRST ANYRIN + + 000207' 201100 000010 OCTIN: MOVEI TAC1, 10 + 000210' 200540 000002 ANYRIN: MOVE R, TAC1 + 000211' 201100 000000 MOVEI TAC1, 0 + 000212' 260140 000033' PUSHJ PDP, SKIPS1 ;SKIP LEADING SPACES, TABS + 000213' 135500 000001 LDB C, TAC + 000214' 306500 000015 CAIN C, 15 ;CHECK FOR INITIAL CR + 000215' 263140 000000 POPJ PDP, ;EXIT WITH 0 IN TAC1 + 000216' 302500 000055 OCT0: CAIE C,"-" ;DASH? + 000217' 306500 000015 CAIN C,15 ;CR? + 000220' 254000 000171* JRST CPOPJ1 ;YES, ONLY LEGAL TERMINATORS + 000221' 275500 000060 SUBI C,60 + 000222' 321500 000224' JUMPL C, OCTE ;ERROR IF NEGATIVE + 000223' 311500 000013 CAML C, R ;OR .GE. RADIX + 000224' 344100 000111* OCTE: AOJA TAC1,CPOPJ ;ERROR,INSURE TAC1 NON-ZERO + 000225' 220100 000013 IMUL TAC1, R + 000226' 270100 000012 ADD TAC1, C + 000227' 134500 000001 OCT1: ILDB C, TAC + 000230' 254000 000216' JRST OCT0 + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000234 + +9K CORE USED + + COMCSS - COMMAND COMMON ROUTINES MACRO 10 05:51 24-APR-78 PAGE 9 +COMCSS MAC 24-APR-78 01:01 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ANYRIN 000210' INT +ASSCON 400000 INT +ASSJB1 000145' +ASSJOB 000135' INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +C 000012 +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +COMERA 000042' INT +COMERR 000043' INT +CON0 000062' +CON1 000066' +CONMES 000060' INT +CORE1 000120' EXT +CPOPJ 000224' EXT +CPOPJ1 000220' EXT +CRLF 000057' INT +CTEX 000024' +CTEX0 000011' +CTEX1 000012' +CTEX2 000020' +CTEXT 000004' INT +CTEXT1 000000' INT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEA1 000175' +DEASAL 000173' INT +DEASG 000153' INT +DEASTY 000172' INT +DECIN 000205' INT +DECIN1 000204' INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT + + + COMCSS - COMMAND COMMON ROUTINES MACRO 10 05:51 24-APR-78 PAGE 9-1 +COMCSS MAC 24-APR-78 01:01 SYMBOL TABLE + +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVLST 000174' EXT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ESTOP 000113' EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IOKILL 000115' EXT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT + + COMCSS - COMMAND COMMON ROUTINES MACRO 10 05:51 24-APR-78 PAGE 9-2 +COMCSS MAC 24-APR-78 01:01 SYMBOL TABLE + +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTSTS 000140' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB0 000100' +JOB1 000115' +JOBINI 000075' INT +JOBK2 000127' +JOBKA 000132' +JOBKIL 000121' INT +JOBZER 000112' INT +JOBZR1 000113' +LOOKB 040000 INT +MJOBN 000135' EXT +MONJOB 000114' EXT +MTW 010000 INT +NOTENF 000070' INT +OBUFB 100000 INT +OCT0 000216' +OCT1 000227' +OCTE 000224' +OCTIN 000207' INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PJOBN 000170' EXT +PROG 000007 INT +R 000013 +RUN 200000 INT +RUNABL 204000 INT +SKIPS 000035' INT +SKIPS1 000033' INT +SKIPSA 000036' +T 000012 +T1 000013 +T2 000014 +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYATT 000100' EXT +TTYBUF 000044' EXT +TTYKIL 000134' EXT + + COMCSS - COMMAND COMMON ROUTINES MACRO 10 05:51 24-APR-78 PAGE 9-3 +COMCSS MAC 24-APR-78 01:01 SYMBOL TABLE + +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT + CCCCCCCCCCCC OOOOOOOOO MMM MMM IIIIIIIII NNN NNN IIIIIIIII + CCCCCCCCCCCC OOOOOOOOO MMM MMM IIIIIIIII NNN NNN IIIIIIIII + CCCCCCCCCCCC OOOOOOOOO MMM MMM IIIIIIIII NNN NNN IIIIIIIII +CCC OOO OOO MMMMMM MMMMMM III NNN NNN III +CCC OOO OOO MMMMMM MMMMMM III NNN NNN III +CCC OOO OOO MMMMMM MMMMMM III NNN NNN III +CCC OOO OOO MMM MMM MMM III NNNNNN NNN III +CCC OOO OOO MMM MMM MMM III NNNNNN NNN III +CCC OOO OOO MMM MMM MMM III NNNNNN NNN III +CCC OOO OOO MMM MMM III NNN NNN NNN III +CCC OOO OOO MMM MMM III NNN NNN NNN III +CCC OOO OOO MMM MMM III NNN NNN NNN III +CCC OOO OOO MMM MMM III NNN NNNNNN III +CCC OOO OOO MMM MMM III NNN NNNNNN III +CCC OOO OOO MMM MMM III NNN NNNNNN III +CCC OOO OOO MMM MMM III NNN NNN III +CCC OOO OOO MMM MMM III NNN NNN III +CCC OOO OOO MMM MMM III NNN NNN III + CCCCCCCCCCCC OOOOOOOOO MMM MMM IIIIIIIII NNN NNN IIIIIIIII + CCCCCCCCCCCC OOOOOOOOO MMM MMM IIIIIIIII NNN NNN IIIIIIIII + CCCCCCCCCCCC OOOOOOOOO MMM MMM IIIIIIIII NNN NNN IIIIIIIII + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :COMINI.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:33 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1939 +File will be deleted after printing + +COMINI - THE COMMAND DECODER MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 T. HASTINGS 8-2-65 + + XLIST + LIST + TITLE COMINI - THE COMMAND DECODER + SUBTTL T. HASTINGS 8-2-65 + ;CALLED FROM CLOCK ROUTINE WHEN COMCNT IS GREATER THAN 0 + ;AS SET BY TTY SERVICE ROUTINE + ;ALL ACS HAVE BEEN SAVED BY CLOCK CHANNEL + ;THE COMMAND DECODER CALLS TTYCOM WHICH SCANS FOR TTY WHICH TYPED + ;THE COMMAND AND THEN DISPATCHES(PUSHJ) TO APPROPRIATE + ;COMMAND SETUP ROTUINE OF THE SAME NAME WITH ACS SET AS: + ;ITEM = JOB NUMBER + ;TAC = BYTE POINTER TO COMMAND STRING(SSPACE OR CR AFTER COMMAND NAME) + ;DAT = BYTE POINTER TO LAST OUTPUT CHARACTER + ;DEVDAT = ADDRESS OF DEVICE DATA BLOCK TYPING COMMAND + ;JDAT = ADDRESS OF JOB AREA, = 0 IF NO JOB AREA + ;PROG = ADDRESS OF PROGRAM AREA + ;DEVDAT IS ALSO PUSHED ON END OF PD LIST SO IT MAY BE DESTROYED + ;UPON RETURN FROM COMMAND SETUP ROUTINE. A CR-LF IS ADDED TO + ;MASSAGE AND TTY IS STARTED ON TTY SPCIFIED BY -1(PDP) + + ;SINCE THE COMMAND DECODER IS CALLED FROM CLOCK ROUTINE + ;COMMAND SETUP ROUTINE MUST RUN TO COMPLETION QUICKLY + ;IF A COMMAND FUNCTION CANNON DO THIS. IT MUST JUST SET + ;THE JOB TO RUNABLE STATUS AND RETURN IMMEDIATELY + + INTERNAL COMMAND + EXTERNAL TTYCOM,TTYSTR,CTEXT,JBTADR,CONMES + EXTERNAL COMERR,COMCNT + EXTERNAL JOBINI,CRLF,CTEXT,RADX10,ASSJOB,JBTSTS + + 000012 T=BUFPNT ;TEMPORARY ACS + 000013 T1=BUFWRD + + COMINI - THE COMMAND DECODER MACRO 10 05:51 24-APR-78 PAGE 2 +COMINI MAC 24-APR-78 03:49 T. HASTINGS 8-2-65 + + + 000000' 260140 000000* COMMAND: PUSHJ PDP, TTYCOM ;SETUP DEVDAT,DAT,TAC, AND ITEM + 000001' 254000 000041' JRST COM2 ;NONE FOUND + 000002' 261140 000006 PUSH PDP,DEVDAT ;SAVE TTY DDB ADDRESS + 000003' 260140 000000* PUSHJ PDP, CTEXT ;RETURN COMMAND NAME IN TAC1 + 000004' 322100 000043' JUMPE TAC1, COM2A ;IGNORE BLANK LINE + 000005' 205500 777760 MOVSI T, -DISPL ;SEARCH FOR COMMAND NAME + 000006' 312112 000074' CAME TAC1, COMTAB(T) + 000007' 253500 000006' AOBJN T, .-1 + 000010' 325500 000047' JUMPGE T,COM2B ;WAS COMMAND FOUND? + 000011' 200112 000114' MOVE TAC1,DISP(T) ;YES, GET DISPATCH ADDRESS AND BITS + 000012' 326200 000026' JUMPN ITEM, COM1 ;HAS A JOB NUMBER BEEN ASSIGNED + 000013' 603100 200000 TLNE TAC1,NOJOBN ;NO, IS A JOB NUMBER NEEDED FOR THIS CO + 000014' 254000 000026' JRST COM1 ;NO + 000015' 260140 000000* PUSHJ PDP,ASSJOB ;TRY TO ASSIGN A FREE JOB NUMBER + 000016' 254000 000067' JRST COM3A ;NONE AVAILABLE, ERROR MESSAGE + + COMINI - THE COMMAND DECODER MACRO 10 05:51 24-APR-78 PAGE 3 +COMINI MAC 24-APR-78 03:49 T. HASTINGS 8-2-65 + + 000017' 261140 000001 PUSH PDP, TAC ;SAVE INPUT BYTE POINTER + 000020' 261140 000002 PUSH PDP,TAC1 ;SAVE ADDRESS OF COMMAND ROUTINE + 000021' 403340 000011 SETZB PROG,JDAT ;NO CORE, CLEAR REL. ADRESS + 000022' 260140 000000* PUSHJ PDP,JOBINI ;INITIALIZE JOB + 000023' 262140 000002 POP PDP,TAC1 ;RESTORE ADR OF COMMAND ROUTINE + 000024' 262140 000001 POP PDP, TAC ;RESTORE INPUT BYTE POINTER + 000025' 202303 000000 MOVEM DEVDAT,(PDP) ;SET ADDRESS OF TTY DEV. DATA BLOCK + 000026' 550444 000000* COM1: HRRZ JDAT, JBTADR(ITEM) ;AND JOB DATA AREA + 000027' 336340 000011 SKIPN PROG,JDAT ;SET PROG. DOES JOB HAVE CORE? + 000030' 603100 400000 TLNE TAC1,NOCORE ;NO. IS CORE NEEDED FOR THIS COMMAND? + 000031' 254000 000035' JRST COM1C ;NO + 000032' 201040 000051' MOVEI TAC,NOCOR ;YES, PRINT "NO CORE ASSIGNED" + 000033' 260140 000000* COM1B: PUSHJ PDP,CONMES + 000034' 254000 000036' JRST COM1A + + 000035' 260142 000000 COM1C: PUSHJ PDP,(TAC1) ;DISPATCH TO COMMAND SETUP ROUTINE + 000036' 326200 000055' COM1A: JUMPN ITEM, COM3 ;ADD CR-LF AND CHECK FOR JOB INIT. + 000037' 262140 000006 COM1D: POP PDP,DEVDAT ;RESTORE TTY DDB ADDRESS + 000040' 260140 000000* PUSHJ PDP, TTYSTR ;START OUTPUT, IF ANY + 000041' 370000 000000* COM2: SOS COMCNT ;DECREMENT COMMAND COUNT + 000042' 263140 000000 POPJ PDP, ;EXIT + + 000043' 135100 000001 COM2A: LDB TAC1, TAC ;NULL FIELD. WAS BREAK CHAR. A CR? + 000044' 302100 000015 CAIE TAC1,15 ;A CR? + 000045' 306100 000073 CAIN TAC1,";" ;OR A SEMI COLON? + 000046' 254000 000037' JRST COM1D ;YES. IGNORE LINE + 000047' 260140 000000* COM2B: PUSHJ PDP,COMERR ;NO. PRINT MONITOR COMMAND ERROR + 000050' 254000 000037' JRST COM1D + + 000051' 472364 041636 NOCOR: ASCIZ /NO CORE ASSIGNED + 000052' 512124 040646 + 000053' 516230 747212 + 000054' 420321 200000 / + + 000055' 200044 000000* COM3: MOVE TAC,JBTSTS(ITEM) ;GET STATUS WORD + 000056' 663040 004000 TLOE TAC,JNA ;IS JOB NO ASSIGNED BIT ON YET + 000057' 254000 000067' JRST COM3A ;YES, JOB INIT. BEFORE + 000060' 202044 000055* MOVEM TAC,JBTSTS(ITEM) + 000061' 201040 000134' MOVEI TAC,[ASCIZ /JOB /] + 000062' 260140 000033* PUSHJ PDP,CONMES ;PRINT JOB N INITIALIZED + 000063' 200040 000004 MOVE TAC,ITEM + 000064' 260140 000000* PUSHJ PDP,RADX10 ;PRINT JOB NUMBER + 000065' 201040 000071' MOVEI TAC,JOBM + 000066' 260140 000062* PUSHJ PDP,CONMES + 000067' 260140 000000* COM3A: PUSHJ PDP,CRLF + 000070' 254000 000037' JRST COM1D + + 000071' 202231 644650 JOBM: ASCIZ / INITIALIZED + 000072' 446031 444664 + 000073' 426101 505000 / + + COMINI - THE COMMAND DECODER MACRO 10 05:51 24-APR-78 PAGE 4 +COMINI MAC 24-APR-78 03:49 T. HASTINGS 8-2-65 + + + ;TABLE OF CONSOLE COMMANDS. + + 400000 NOCORE=400000 ;NO CORE NEEDED FOR COMMAND + 200000 NOJOBN=200000 ;NO JOB NUMBER NEEDED FOR COMMAND + + DEFINE NAMES + <REPEAT 0,< + C G,COMERR,0 + > + C CORE,CORE,NOCORE + C GET,GET,0 + C START,START,0 + C IJOB,IJOB,NOCORE+NOJOBN + C PJOB,PJOB,NOCORE + C KJOB,KJOB,NOCORE + C SAVE,SAVE,0 + REPEAT 0,< + C RESAVE,COMERR,0 + > + C CONT,CONT,0 + C DDT,DDTGO,0 + C ASSIGN,ASSIGN,NOCORE + C DEASSI,DEASSIGN,NOCORE + C STARTC,STARTC,0 + C CONTC,CONTC,0 + C DETACH,DETACH,NOCORE+NOJOBN + C ATTACH,ATTACH,NOCORE+NOJOBN + REPEAT 0,< + C MTAPE,COMERR,0 + C DAYTIM,COMERR,NOCORE + C RUNTIM,COMERR,NOCORE + C TOTTIM,COMERR,NOCORE + C NULTIM,COMERR,NOCRE + C SYSDDT,COMERR,NOCORE + C SYSMAK,SYSMAK,0 + > + C DIGITAL,DIGITAL,NOCORE+NOJOBN + > + + COMINI - THE COMMAND DECODER MACRO 10 05:51 24-APR-78 PAGE 5 +COMINI MAC 24-APR-78 03:49 T. HASTINGS 8-2-65 + + + ;GENERATE TABLE OF SIXBIT COMMAND NAMES + + DEFINE C(A,B,C) + < ZZ=.+1 + SIXBIT /A/ + IFN .-ZZ,<RELOC ZZ> ;ONLY FIRST 6 CHARACTERS + > + + COMTAB: NAMES^REPEAT 0,< + C G,COMERR,0 + > + 000074' 435762 450000 SIXBIT /CORE/ + 000075' 474564 000000 SIXBIT /GET/ + 000076' 636441 626400 SIXBIT /START/ + 000077' 515257 420000 SIXBIT /IJOB/ + 000100' 605257 420000 SIXBIT /PJOB/ + 000101' 535257 420000 SIXBIT /KJOB/ + 000102' 634166 450000 SIXBIT /SAVE/ + 000103' 435756 640000 SIXBIT /CONT/ + 000104' 444464 000000 SIXBIT /DDT/ + 000105' 416363 514756 SIXBIT /ASSIGN/ + 000106' 444541 636351 SIXBIT /DEASSI/ + 000107' 636441 626443 SIXBIT /STARTC/ + 000110' 435756 644300 SIXBIT /CONTC/ + 000111' 444564 414350 SIXBIT /DETACH/ + 000112' 416464 414350 SIXBIT /ATTACH/ + 000113' 445147 516441 SIXBIT /DIGITAL/ + 000114' 540000 000000 + 000020 DISPL=.-COMTAB ;LENTH OF TABLE + + COMINI - THE COMMAND DECODER MACRO 10 05:51 24-APR-78 PAGE 6 +COMINI MAC 24-APR-78 03:49 T. HASTINGS 8-2-65 + + + ;GENERATE THE DISPATCH TABLE + + DEFINE C(A,B,C) + < XWD C,B + EXTERNAL B + > + + DISP: NAMES^REPEAT 0,< + C G,COMERR,0 + > + 000114' 400000 000000* C CORE,CORE,NOCORE^ XWD NOCORE,CORE + 000115' 000000 000000* C GET,GET,0^ XWD 0,GET + 000116' 000000 000000* C START,START,0^ XWD 0,START + 000117' 600000 000000* C IJOB,IJOB,NOCORE+NOJOBN^ XWD NOCORE+NOJOBN,IJOB + 000120' 400000 000000* C PJOB,PJOB,NOCORE^ XWD NOCORE,PJOB + 000121' 400000 000000* C KJOB,KJOB,NOCORE^ XWD NOCORE,KJOB + 000122' 000000 000000* C SAVE,SAVE,0^ XWD 0,SAVE + 000123' 000000 000000* C CONT,CONT,0^ XWD 0,CONT + 000124' 000000 000000* C DDT,DDTGO,0^ XWD 0,DDTGO + 000125' 400000 000000* C ASSIGN,ASSIGN,NOCORE^ XWD NOCORE,ASSIGN + 000126' 400000 000000* C DEASSI,DEASSIGN,NOCORE^ XWD NOCORE,DEASSIGN + 000127' 000000 000000* C STARTC,STARTC,0^ XWD 0,STARTC + 000130' 000000 000000* C CONTC,CONTC,0^ XWD 0,CONTC + 000131' 600000 000000* C DETACH,DETACH,NOCORE+NOJOBN^ XWD NOCORE+NOJOBN,DETACH + 000132' 600000 000000* C ATTACH,ATTACH,NOCORE+NOJOBN^ XWD NOCORE+NOJOBN,ATTACH + 000133' 600000 000000* C DIGITAL,DIGITAL,NOCORE+NOJOBN^ XWD NOCORE+NOJOBN,DIGITAL + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000135 + +9K CORE USED + + COMINI - THE COMMAND DECODER MACRO 10 05:51 24-APR-78 PAGE 7 +COMINI MAC 24-APR-78 03:49 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ASSCON 400000 INT +ASSIGN 000125' EXT +ASSJOB 000015' EXT +ASSPRG 200000 INT +ATTACH 000132' EXT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +COM1 000026' +COM1A 000036' +COM1B 000033' +COM1C 000035' +COM1D 000037' +COM2 000041' +COM2A 000043' +COM2B 000047' +COM3 000055' +COM3A 000067' +COMCNT 000041' EXT +COMERR 000047' EXT +COMMAN 000000' INT +COMTAB 000074' +CONMES 000066' EXT +CONT 000123' EXT +CONTC 000130' EXT +CORE 000114' EXT +CRLF 000067' EXT +CTEXT 000003' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTGO 000124' EXT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEASSI 000126' EXT +DEN 000004 INT +DETACH 000131' EXT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT + + + COMINI - THE COMMAND DECODER MACRO 10 05:51 24-APR-78 PAGE 7-1 +COMINI MAC 24-APR-78 03:49 SYMBOL TABLE + +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIGITA 000133' EXT +DIN 000003 INT +DISP 000114' +DISPL 000020 +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +GET 000115' EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +IJOB 000117' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT + + COMINI - THE COMMAND DECODER MACRO 10 05:51 24-APR-78 PAGE 7-2 +COMINI MAC 24-APR-78 03:49 SYMBOL TABLE + +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000026' EXT +JBTSTS 000060' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOBINI 000022' EXT +JOBM 000071' +KJOB 000121' EXT +LOOKB 040000 INT +MTW 010000 INT +NOCOR 000051' +NOCORE 400000 +NOJOBN 200000 +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PJOB 000120' EXT +PROG 000007 INT +RADX10 000064' EXT +RUN 200000 INT +RUNABL 204000 INT +SAVE 000122' EXT +START 000116' EXT +STARTC 000127' EXT +T 000012 +T1 000013 +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYCOM 000000' EXT +TTYSTR 000040' EXT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT +ZZ 000114' + CCCCCCCCCCCC OOOOOOOOO RRRRRRRRRRRR EEEEEEEEEEEEEEE + CCCCCCCCCCCC OOOOOOOOO RRRRRRRRRRRR EEEEEEEEEEEEEEE + CCCCCCCCCCCC OOOOOOOOO RRRRRRRRRRRR EEEEEEEEEEEEEEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRRRRRRRRRRR EEEEEEEEEEEE +CCC OOO OOO RRRRRRRRRRRR EEEEEEEEEEEE +CCC OOO OOO RRRRRRRRRRRR EEEEEEEEEEEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE + CCCCCCCCCCCC OOOOOOOOO RRR RRR EEEEEEEEEEEEEEE + CCCCCCCCCCCC OOOOOOOOO RRR RRR EEEEEEEEEEEEEEE + CCCCCCCCCCCC OOOOOOOOO RRR RRR EEEEEEEEEEEEEEE + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :CORE .LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:33 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1930 +File will be deleted after printing + +CORE - CORE ALLOCATION ROUTINE MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 G. BELL 6-29-65 + + XLIST + LIST + TITLE CORE - CORE ALLOCATION ROUTINE + SUBTTL G. BELL 6-29-65 + ; PUSHJ PDP, CORE1 ;ITEM = JOB #. TAC = 1K CORE BLOCKS + ;REQUESTED + ; RET1 ;OLD CORE RETURNED. + ; RET2 ;OLD CORE RETURNED. JBTADR, JOBREL ARE + ;SET UP + ; JBADR (ITEM) = POINTER TO JOB AREA. JOBREL (JBTADR) = HIGHEST LOCAT + ; C(RH) JBTADR IS SET OT 0 OR REQUESTED CORE. JOBREL IS SET IF CORE G + ; NOT A PURE PROCEDURE ... + ;CORTAL: 0 ;COUNT OF FREE CORE + ;CORTAB: BLOCK ^D3 ;TABLE OF 72 BITS. 1 BIT FOR + ;1K OF CORE. 1 = USED. 0 = FREE + ;CORLST: POINT 1, CORTAB, 32 ;POINTER FIRST OUT OF BOUNDS + ; + ;TEMPORARY USAGE + 000000' 000000 000000 CORUSZ: 0 ;SIZE OF USERS CODE, OLD.-NEW + 000001' 000000 000000 CORLOC: 0 ;POSITION OF 1ST FREE BLOCK + ; + ;AC ASSIGNMENTS + 000012 COR1=BUFPNT + 000013 COR2=BUFWRD + 000014 COR3=UUO + INTERNAL CORE1 + EXTERNAL JBTADR,JOBREL,CORLST,CORTAL,CORTAB + + CORE - CORE ALLOCATION ROUTINE MACRO 10 05:51 24-APR-78 PAGE 2 +CORE MAC 24-APR-78 22:34 G. BELL 6-29-65 + + + 000002' 135500 000042' CORE1: LDB COR1, CORE1P + 000003' 202500 000001' MOVEM COR1, CORLOC + 000004' 322500 000013' JUMPE COR1, CORGET ;IF 0 NO CORE NOEW. + 000005' 554504 000000* HLRZ COR1, JBTADR(ITEM) ;CLEAR OLD CORE + 000006' 350000 000012 AOS COR1 ;HIGHEST ADDRESS AVAIL. FORM + 000007' 240500 777766 ASH COR1, -^D10 + 000010' 202500 000000' MOVEM COR1, CORUSZ + 000011' 402000 000014 CORRET: CLEARM COR3 ;RETURN OLD CORE + 000012' 260140 000056' PUSHJ PDP, CORSTG + 000013' 402004 000005* CORGET: SETZM JBTADR(ITEM) ;CLEAR JOB ADDRESS TO 0 + 000014' 322040 000037' JUMPE TAC, COROK ;IF NO CORE TO GET, RETURN + 000015' 200600 000043' MOVE COR3, CORE2P ;SET UP FOR + 000016' 476000 000001' SETOM CORLOC ;HOLE SEARCH + 000017' 260140 000044' CORG1: PUSHJ PDP, CORHOL + 000020' 254000 000040' JRST CORNG ;UNSUCCESSFUL SEARCH + 000021' 315500 000001 CAMGE COR1, TAC ;HOLE FOUND + 000022' 254000 000017' JRST CORG1 + 000023' 213000 000012 CORGVE: MOVNS COR1 ;BACKUP CORLOC + 000024' 272500 000001' ADDM COR1, CORLOC + 000025' 202040 000000' MOVEM TAC, CORUSZ ;RESERVE HOLD FOR JOB + 000026' 201600 000001 MOVEI COR3, 1 ;SET CORTAB + 000027' 260140 000056' PUSHJ PDP, CORSTG + 000030' 200500 000001' MOVE COR1, CORLOC ;C(RH)=RELOC, C(LH)=PROTECT + 000031' 240500 000012 ASH COR1, ^D10 + 000032' 542504 000013* HRRM COR1, JBTADR(ITEM) + 000033' 240040 000012 ASH TAC, ^D10 + 000034' 275040 000001 SUBI TAC, 1 + 000035' 542052 000000* HRRM TAC, JOBREL (COR1) + 000036' 506044 000032* HRLM TAC,JBTADR(ITEM) + 000037' 350003 000000 COROK: AOS (PDP) + 000040' 200040 000000* CORNG: MOVE TAC, CORTAL + 000041' 263140 000000 POPJ PDP, + + 000042' 121004 000036* CORE1P: POINT 8, JBTADRR(ITEM),25 + 000043' 440100 000000* CORE2P: POINT 1, CORTAB + + CORE - CORE ALLOCATION ROUTINE MACRO 10 05:51 24-APR-78 PAGE 3 +CORE MAC 24-APR-78 22:34 G. BELL 6-29-65 + + + ; PUSHJ PDP, CORHOL ;COR1-HOLES FREE, COR2=TEMP + ; RETURN1 ;COR3=POINTER. RETURN1=END OF STRING RE + ; RETURN2 ;HOLE FOUND. + ; CORLOC CONTAINS 0,1.. N, THE CORE BLK PTR. CORLST IS PTR TO + ; STOP STRING TEST + 000044' 402000 000012 CORHOL: CLEARM COR1 + 000045' 316600 000000* CORH01: CAMN COR3, CORLST ;TEST DONE + 000046' 263140 000000 POPJ PDP, + 000047' 134540 000014 ILDB COR2, COR3 ;TEST NEXT BLOCK + 000050' 350000 000001' AOS CORLOC + 000051' 336000 000013 SKIPN COR2 + 000052' 344500 000045' AOJA COR1, CORH01 ;COUNT FREE + 000053' 322500 000045' JUMPE COR1, CORH01 + 000054' 350003 000000 AOS (PDP) + 000055' 263140 000000 POPJ PDP, + ;; PUSHJ PDP, CORSTG ;CORUSZ=SIZE RESERVED. CORLOC=LOCATION + ; IF COR3=0, THEN FREE CORE + ; IF COR3=1, THEN RESERVE CORE. + ; USES COR1, COR2, COR3 + ; CORTAL=COUNT OF FREE CORE. AND IS UPDATED + 000056' 261140 000001 CORSTG: PUSH PDP, TAC ;SAVE NO. OF BLOCKS BEING REQ + 000057' 200540 000000' MOVE COR2,CORUSZ ;FIX CORTALLY + 000060' 332000 000014 SKIPE COR3 + 000061' 213000 000013 MOVNS COR2 + 000062' 272540 000040* ADDM COR2, CORTAL + 000063' 200040 000001' MOVE TAC, CORLOC ;GET POINTER-1 + 000064' 231040 000044 IDIVI TAC, ^D36 ;TAC=WORD,TAC1=BIT + 000065' 270040 000076' ADD TAC, CORLP1 ;FORM BYTE POINTER + 000066' 213000 000002 MOVNS TAC1 + 000067' 271100 000044 ADDI TAC1, ^D36 + 000070' 137100 000077' DPB TAC1, [POINT 6, TAC, 5] + 000071' 200540 000000' MOVE COR2, CORUSZ + 000072' 136600 000001 CORLOP: DPBI COR3, TAC ;SET OR CLEAR EACH BIT IN USE + 000073' 367540 000072' SOJG COR2, CORLOP + 000074' 262140 000001 POP PDP, TAC + 000075' 263140 000000 POPJ PDP, + + 000076' 000100 000043* CORLP1: XWD 100, CORTAB + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000100 + +9K CORE USED + + CORE - CORE ALLOCATION ROUTINE MACRO 10 05:51 24-APR-78 PAGE 4 +CORE MAC 24-APR-78 22:34 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +COR1 000012 +COR2 000013 +COR3 000014 +CORE1 000002' INT +CORE1P 000042' +CORE2P 000043' +CORG1 000017' +CORGET 000013' +CORGVE 000023' +CORH01 000045' +CORHOL 000044' +CORLOC 000001' +CORLOP 000072' +CORLP1 000076' +CORLST 000045' EXT +CORNG 000040' +COROK 000037' +CORRET 000011' +CORSTG 000056' +CORTAB 000076' EXT +CORTAL 000062' EXT +CORUSZ 000000' +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT + + + CORE - CORE ALLOCATION ROUTINE MACRO 10 05:51 24-APR-78 PAGE 4-1 +CORE MAC 24-APR-78 22:34 SYMBOL TABLE + +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT + + CORE - CORE ALLOCATION ROUTINE MACRO 10 05:51 24-APR-78 PAGE 4-2 +CORE MAC 24-APR-78 22:34 SYMBOL TABLE + +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000042' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOBREL 000035' EXT +LOOKB 040000 INT +MTW 010000 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PROG 000007 INT +RUN 200000 INT +RUNABL 204000 INT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT + DDDDDDDDDDDD TTTTTTTTTTTTTTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR 222222222 +DDDDDDDDDDDD TTTTTTTTTTTTTTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR 222222222 +DDDDDDDDDDDD TTTTTTTTTTTTTTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR 222222222 +DDD DDD TTT SSS EEE RRR RRR 222 222 +DDD DDD TTT SSS EEE RRR RRR 222 222 +DDD DDD TTT SSS EEE RRR RRR 222 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR 222 +DDD DDD TTT SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR 222 +DDD DDD TTT SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDDDDDDDDDDD TTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR 222222222222222 +DDDDDDDDDDDD TTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR 222222222222222 +DDDDDDDDDDDD TTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR 222222222222222 + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :DTSER2.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:33 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1924 +File will be deleted after printing + +DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 L. HANTMANN 8-2-65 MULTIPLE DIRECTORIES VERSION + + XLIST + LIST + TITLE DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING + SUBTTL L. HANTMANN 8-2-65 MULTIPLE DIRECTORIES VERSION + 000001 DTSIZ=1 + + ;SUBROUTINE FOR DIRECTORY SEARCH + ;PROG CONTAINS ACTUAL START OF PROGRAM + ;DEVDAT CONTAINS ACTUAL START OF DVDB + ;UUO CONTAINS RELATIVE ADDRESS OF DIRECTORY ENTRY IN USER AREA + ;FORMAT PUSHJ PDP, UDIRSH + ; JRST X ;RETURN IF EMPTY ENTRY FOUND + ; NORMAL RETURN WHEN ENTRY IS FOUND + INTERNAL ULOOK, UENTER + EXTERNAL UXIT,PUUOAC,IOIERR,DIRERR,ADRCK,CPOPJ1,THSDAT + 000004 UDIRLN=4 + 000100 UDIRIN=100 ;DIRECTORY IN + 000200 UDIREN=200 ;DIRECTORY ENTERED INTO + 000400 UNWFRE=400 ;FREE BLCOK POINTER CHANGED + 001000 ULINKF=1000 ;LAST OUTPUT BLOCK LINKED TO STORAGE + 000001 UX1=TAC + 000002 UX2=TAC1 + 000005 UX3=DAT + 000000' 602600 777760 UDIRSH: TRNE UUO,777760 ;IS BLOCK IN UUO ACS? + 000001' 260140 000000* PUSHJ PDP,ADRCK ;NO. CHECK ADDRESS + 000002' 201054 000003 MOVEI TAC,3(UUO) + 000003' 603000 000002 TLNE IOS,IOBEG + 000004' 260140 000343' PUSHJ PDP, UBEG + 000005' 550040 000007 HRRZ UX1, PROG ;COPY ADR OF START OF PROGRAM + 000006' 272040 000014 ADDM UX1, UUO ;ACTUAL START OF DIR. IN USER + 000007' 201066 000000* MOVEI UX1,@UDIR(DEVDAT) ;ACTUAL POINTER TO DIRECTORY + 000010' 550101 000000 HRRZ UX2, 0(UX1) ;RELATIVE ADDR OF 1ST ENTRY I + ;DIRECTORY + 000011' 505042 777603 HRLI UX1, -^D129+UDIRLN(UX2) ;ENTRY COUNTER + 000012' 272100 000001 ADDM UX2, UX1 ;START OF 1ST ENTRY IN DIRECT + 000013' 332000 000002 SKIPE UX2 + 000014' 303100 000174 CAILE UX2,174 ;IS THE REL ADR OF 1ST ENTRY INSIDE BUF + 000015' 254000 000000* JRST DIRERR ;NO + 000016' 336101 000000 UDIR2: SKIPN UX2, 0 (UX1) ;FIRST WORD OF ENTRY + 000017' 263140 000000 POPJ PDP, ;SPACES FOUND + 000020' 316114 000000 CAMN UX2, 0(UUO) ;CHECK IF = TO USER AREA + 000021' 254000 000026' JRST UDIR4 ;CHECK 2ND WORD + 000022' 270040 000034' UDIR3: ADD UX1, UDIRK1 + 000023' 321040 000016' JUMPL UX1, UDIR2 + 000024' 262140 000001 POP PDP, UX1 ;TAKE PREVIOUS EXIT FROM TABL + 000025' 254000 000000* JRST UXIT ;TABLE FULL + 000026' 554114 000001 UDIR4: HLRZ UX2, 1 (UUO) ;2ND WORD IN USER ARE + 000027' 322100 000000* JUMPE UX2, CPOPJ1 + 000030' 554241 000001 HLRZ UX3, 1 (UX1) ;2ND WORD OF DIRECTORY AREA + 000031' 302242 000000 CAIE UX3, 0 (UX2) + 000032' 254000 000022' JRST UDIR3 ;CHECK MORE ENTRIES + 000033' 254000 000027* JRST CPOPJ1 ;MATCH, SKIP RETURN + + 000034' 000004 000004 UDIRK1: XWD UDIRLN, UDIRLN + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 2 +DTSER2 MAC 24-APR-78 02:46 L. HANTMANN 8-2-65 MULTIPLE DIRECTORIES VERSION + + + ;SUBROUTINE FOR DIRECTORY LOOKUP + + ;FORMAT PUSHJ PDP, UDIRLU ;VIA UUO + ; JRST X ;ENTRY NOT IN TABLE + + 000035' 260140 000000' ULOOK: PUSHJ PDP, UDIRSH + 000036' 254000 000025* JRST UXIT + 000037' 540241 000001 HRR UX3, 1 (UX1) + 000040' 506246 000007 HRLM UX3, DEVIAD (DEVDAT) + 000041' 505101 000000 ULOOK1: HRLI UX2, 0 (UX1) ;FROM DIRECTORY + 000042' 541114 000000 HRRI UX2, 0 (UUO) ;TO USER + 000043' 251114 000003 BLT UX2, UDIRLN-1(UUO) + 000044' 135100 001272' LDB UX2,[POINT 12,2(UX1),35] ;GET DATE USER(ENTER)EXEC(LOO + 000045' 326100 000050' JUMPN UX2,.+3 ;IS IT 0? + 000046' 200100 000000* MOVE UX2,THSDAT ;YES, USE CURRENT DATE + 000047' 137100 001273' DPB UX2,[POINT 12,2(UUO),35] ;SET EXEC + 000050' 350003 000000 AOS (PDP) + 000051' 254000 000311' JRST UTWDR + + ;SUBROUTINE TO ENTER NEW OR CHANGE OLD DIRECTORY ENTRY + ;FORMAT PUSHJ PDP, UDIRCH + ; JRST X ;NO ROOM IN TABLE + + 000052' 260140 000000' UENTER: PUSHJ PDP, UDIRSH + 000053' 254000 000054' JRST .+1 + 000054' 350246 000000* AOS UX3, UFREE (DEVDAT) + 000055' 542254 000001 HRRM UX3,1(UUO) + 000056' 506246 000010 HRLM UX3, DEVOAD (DEVDAT) + 000057' 250040 000014 EXCH UX1, UUO + 000060' 661000 001600 TLO IOS, UDIREN+UNWFRE+ULINKF + 000061' 202006 000002 MOVEM IOS, DEVIOS(DEVDAT) + 000062' 254000 000041' JRST ULOOK1 + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 3 +DTSER2 MAC 24-APR-78 02:46 L. HANTMANN 8-2-65 MULTIPLE DIRECTORIES VERSION + + + ;CREATE A CLEAN TAPE AND DIRECTORY + + INTERNAL UTPCLR + EXTERNAL USRJDA + + 000063' 135040 000000* UTPCLR: LDB TAC,PUUOAC + 000064' 200301 000000* MOVE DEVDAT,USRJDA(TAC) + 000065' 322300 000000* JUMPE DEVDAT,IOIERR + 000066' 554046 000000 HLRZ TAC,DEVNAM(DEVDAT) + 000067' 302040 446441 CAIE TAC,446441 + 000070' 254000 000036* JRST UXIT ;NOT DTA + 000071' 200006 000002 MOVE IOS,DEVIOS(DEVDAT) + 000072' 621000 000002 TLZ IOS,IOBEG + 000073' 661000 000700 TLO IOS,UDIRIN+UDIREN+UNWFRE + IFE DTSIZ,< MOVEM DEVDAT,DIREC> + ;THIS FOR SINGLE DIRECTORY ONLY + 000074' 200046 000007* MOVE TAC,UDIR(DEVDAT) + 000075' 200100 001274' MOVE TAC1,[XWD 1,5] + 000076' 202101 000000 MOVEM TAC1,(TAC) + 000077' 507000 000001 HRLS TAC + 000100' 253040 000101' AOBJN TAC,.+1 + 000101' 402001 000000 SETZM (TAC) + 000102' 200100 000001 MOVE TAC1,TAC + 000103' 350000 000001 AOS TAC + 000104' 251042 000176 BLT TAC,176(TAC1) + 000105' 201040 000001 MOVEI TAC, 1 + 000106' 202046 000054* MOVEM TAC, UFREE (DEVDAT) + 000107' 202006 000002 MOVEM IOS, DEVIOS(DEVDAT) + 000110' 260140 000326' PUSHJ PDP,UTPREL + 000111' 254000 000070* JRST UXIT + + + ;END OF DTDR + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 4 +DTSER2 MAC 24-APR-78 02:46 L. HANTMANN 8-2-65 MULTIPLE DIRECTORIES VERSION + + + SUBTTL L. HANTMAN PART 1 7-13-65 + 010000 UREV=10000 ;DT REVERSE BIT + 000001 DTSIZ=1 ;1 FOR ONE BUFFER PER TAPE UNIT + + 000001 UBLK=1 ;NUMBER OF BLOCKS/BLOCK + 000001 UCHN=1 ;CHANNEL OF DATA CONTROL = 1, LOC 42 + 000042 UCHA=42 ;DATA CONTROL INTERRUPT POSITION + EXTERNAL UXIT,ADVBFF,ADVBFE,IOSET,OUT,WAIT1,WSYNC + EXTERNAL PIOMOD,PUNIT,UFREE,UDIR,ADRERR,JOBPFI + ENTRY UTDSP + + 004010 DACI=4010 ;DC INPUT DT + 003410 DACO=3410 ;DC OUTPUT DT + 220000 SL=220000 ;DT TURN ON. SELECT + 003000 DTR=3000 ;DT TURN AROUND DELAY + 002000 DT=2000 ;DT START/STOP DELAY + 000300 RD=300 ;DT RD + 000700 WD=700 ;DT WR + 000200 RB=200 ;DT READ BLOCK NOS. + 000002 VEOT=2 ;EOT FLAG BIT + 010000 GR=10000 ;DT REVERSE BIT + 040000 JDE=40000 ;JOB DONE ENABLE + 100000 EE=100000 ;ENABLE END FLAG + 002000 URDIR=2000 ;READING DIRECTORY + + 000112' 254000 000326' UTDSP: JRST UTPREL ;RELEASE + 000113' 254000 000312' JRST UTPCLS ;CLOSE + 000114' 254000 000125' JRST UOUT ;OUTPUT + 000115' 254000 000204' JRST UIN ;INPUT + 000116' 254000 000052' JRST UENTER ;ENTER IN DIRECTORY + 000117' 254000 000035' JRST ULOOK ;LOOKUP IN DIRECTORY + 000120' 254000 000633' JRST UDMPO ;DUMPOUT + 000121' 254000 001022' JRST UDMPI ;DUMPIN + 000122' 254000 000272' JRST SETO ;SET OUTPUT BLOCK NO. + 000123' 254000 000267' JRST SETI ;SET INPUT BLOCK NO. + 000124' 254000 000277' JRST GETF ;GET FREE BLOCK + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 5 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + 000125' 260140 001142' UOUT: PUSHJ PDP, UINTER ;CHECK INTERLOCK + 000126' 661000 000020 TLO IOS, IO ;WRITING + 000127' 550046 000010 HRRZ TAC,DEVOAD(DEVDAT) + 000130' 270040 000007 ADD TAC, PROG ;ACTUAL BUFFER ADDRESS + 000131' 554106 000010 HLRZ TAC1, DEVOAD(DEVDAT) ;BLOCK TO WRITE + 000132' 306100 000001 CAIN TAC1,1 + 000133' 254000 000171' JRST UOUT4 ;COPY DIRECTORY + 000134' 554101 000001 HLRZ TAC1, 1(TAC) ;BLOCK TIE + 000135' 621000 001000 TLZ IOS, ULINKF ;NOT LINKED TO FREE STORAGE + 000136' 326100 000144' JUMPN TAC1, UOUT1 ;USE BALOCK NUMBER INDICATED + 000137' 623000 000002 TLZE IOS, IOBEG ;GET FREE STORAGE BLOCK + 000140' 260140 000370' PUSHJ PDP, UBEG3 + 000141' 661000 001400 TLO IOS,UNWFRE+ULINKF ;LINKED TO FREE STORAGE + 000142' 202006 000002 MOVEM IOS, DEVIOS (DEVDAT) + 000143' 350106 000106* AOS TAC1,UFREE(DEVDAT) ;NEXT FREE BLOCK + 000144' 306100 000001 UOUT1: CAIN TAC1,1 ;IF 1, THIS IS LAST BLOCK + 000145' 400100 000000 SETZ TAC1, ;LAST BLOCK TIE = 0 + 000146' 506101 000001 HRLM TAC1,1(TAC) ;BLOCK + 000147' 552040 001121' HRRZM TAC,UBUF ;ACTUAL LOCATION OF DATA + 000150' 544046 000010 HLR TAC,DEVOAD(DEVDAT) + 000151' 506106 000010 HRLM TAC1, DEVOAD(DEVDAT) ;NEXT BLOCK + 000152' 254000 000375' JRST USETW + ;RETURN FROM WRITING 1 BLOCK + + 000153' 200046 000010 UOUT2: MOVE TAC,DEVOAD(DEVDAT) + 000154' 505040 000007 HRLI TAC,PROG ;PROG, BUFFER ADDRESS + 000155' 515100 400000 HRLZI TAC1,IOUSE + 000156' 412120 000001 ANDCAM TAC1,@TAC ;SET USE BIT IN BUFFER + 000157' 554106 000010 HLRZ TAC1,DEVOAD(DEVDAT) ;BLOCK TIE + 000160' 322100 000167' JUMPE TAC1,UOUT3 ;WAS BLOCK WRITTEN THE LAST 0 + 000161' 540060 000001 HRR TAC,@TAC ;PROG, NEXT BUFFER ADDRESS + 000162' 542046 000010 HRRM TAC,DEVOAD(DEVDAT) ;NEXT BUFFER + 000163' 602000 000040 TRNE IOS, IOCON ;CONTINUOUS? + 000164' 254000 000167' JRST UOUT3 ;STOP TAPE AND DISMISS + 000165' 335020 000001 SKIPGE @TAC ;IS NEXT BUFFER EMPTY? + 000166' 254000 000126' JRST UOUT+1 ;PROCESS NEXT BLOCK + 000167' 262140 000001 UOUT3: POP PDP, TAC ;REDUCE TABLE + 000170' 254000 001220' JRST DTC1 ;STOP TAPE AND DISMISS + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 6 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + ;COPY DIRECTORY WHEN WRITING BLOCK 1 + 000171' 505101 000001 UOUT4: HRLI TAC1,1(TAC) ;BUFFER ADDRESS, FROM + 000172' 540106 000074* HRR TAC1, UDIR(DEVDAT) ;DIRECTORY ADDRESS, TO + 000173' 550046 000172* HRRZ TAC, UDIR(DEVDAT) ;DIRECTORY ADDRESS + 000174' 251101 000177 BLT TAC1, 177(TAC) ;MORE BUFFER AREA TO DIRECTORY + 000175' 661000 000300 TLO IOS, UDIRIN+UDIREN ;SET DIRECTORY BITS + 000176' 200126 000173* MOVE TAC1, @UDIR(DEVDAT) ;NEXT FREE BLOCK IN DIRECTORY + 000177' 556106 000143* HLRZM TAC1,UFREE(DEVDAT) ;PLACE IN DATA BLOCK + 000200' 515100 400000 HRLZI TAC1, IOUSE + 000201' 413101 000000 ANDCAB TAC1, 0(TAC) ;CLEAR USE BIT + 000202' 542106 000010 HRRM TAC1, DEVOAD(DEVDAT) ;ADVANCE BUFFER POINTER + 000203' 254000 000242' JRST UEND2 + ,INPUT- NON DUMP + + 000204' 260140 001142' UIN: PUSHJ PDP, UINTER ;CHECK INTERLOCK + 000205' 621000 000020 TLZ IOS, IO ;READING + 000206' 550046 000007 HRRZ TAC,DEVIAD(DEVDAT) ;UBUF:=TAC:=DEVIAD+PROG + 000207' 270040 000007 ADD TAC,PROG + 000210' 554106 000007 HLRZ TAC1, DEVIAD(DEVDAT) ;BLOCK TO READ + 000211' 306100 000001 CAIN TAC1, 1 ;TRYING TO READ DIRECTORY? + 000212' 254000 000251' JRST UIN2 ;COPY DIRECTORY + 000213' 552040 001121' HRRZM TAC,UBUF + 000214' 554046 000007 HLRZ TAC,DEVIAD(DEVDAT) ;TAC:=C(DEVIAD LH) + 000215' 322040 000236' JUMPE TAC,UEND ;NEXT BLOCK=00, THEN END OF FI + 000216' 254000 000377' JRST USETR + ;RETURN FROM READING ONE BLOCK + + 000217' 550046 000007 UIN1: HRRZ TAC,DEVIAD(DEVDAT) + 000220' 270040 000007 ADD TAC,PROG + 000221' 554101 000001 HLRZ TAC1,1(TAC) + 000222' 546106 000007 HLRM TAC1,DEVIAD(DEVDAT) ;NEXT BLOCK NUMBER TO READ + 000223' 200046 000007 MOVE TAC,DEVIAD(DEVDAT) + 000224' 505040 000007 HRLI TAC,PROG + 000225' 515100 400000 HRLZI TAC1,IOUSE + 000226' 436120 000001 IORM TAC1,@TAC ;SET USE BIT + 000227' 540060 000001 HRR TAC,@TAC + 000230' 542046 000007 HRRM TAC,DEVIAD(DEVDAT) ;NEXT BUFFER ADDRESS + 000231' 602000 000040 TRNE IOS, IOCON ;CONTINUOUS? + 000232' 254000 000167' JRST UOUT3 ;EXIT + 000233' 331020 000001 SKIPL @TAC ;IS NEXT BUFFER FULL + 000234' 254000 000205' JRST UIN+1 ;PROCESS NEXT BLOCK + 000235' 254000 000167' JRST UOUT3 ;EXIT + + 000236' 661000 000040 UEND: TLO IOS, IOEND + 000237' 202006 000002 MOVEM IOS, DEVIOS(DEVDAT) + 000240' 721300 020000 CONSZ UTC, 20000 ;IS TAPE STOPPED? + 000241' 254000 000167' JRST UOUT3 ;STOP TAPE AND EXIT + 000242' 371000 000000* UEND2: SOSL DCREQ ;DECREMENT REQUEST COUNT, IS ANY ONE WA + 000243' 476000 000000* SETOM DCAVAL ;YES,SET DATA CONTROL AVAILABLE + 000244' 371000 000000* SOSL DTREQ ;DECREMENT REQUEST COUNT, IS ANY ONE WA + 000245' 476000 000000* SETOM DTAVAL ;YES,SET DECTAPE CONTROL AVAI + 000246' 620000 010000 TRZ IOS, IOACT ;CLEAR ACTIVE BIT + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 6-1 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + 000247' 202006 000002 MOVEM IOS, DEVIOS(DEVDAT) ;RESTORE STATUS BITS + 000250' 263140 000000 POPJ PDP, 0 ;EXIT + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 7 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + ;COPY DIRECTORY WHEN READING BLOCK 1 + 000251' 623000 000002 UIN2: TLZE IOS, IOBEG ;IS DIRECTORY IN + 000252' 254000 000265' JRST UIN4 ;READ IN DIRECTORY + 000253' 260140 000242' PUSHJ PDP, UEND2 ;CLR INDICATORS + 000254' 200106 000177* UIN3: MOVE TAC1,UFREE(DEVDAT) ;NEXT FREE BLOCK IN DATA BLOC + 000255' 506126 000176* HRLM TAC1, @UDIR(DEVDAT) ;PLACE IN DIRECTORY + 000256' 541101 000001 HRRI TAC1, 1(TAC) ;BUFFER ADDRESS, TO + 000257' 504106 000255* HRL TAC1, UDIR(DEVDAT) ;DIRECTORY ADDRESS, TO + 000260' 251101 000200 BLT TAC1, 200 (TAC) ;MOVE DIRECTORY TO BUFFER ARE + 000261' 515100 400000 HRLZI TAC1, IOUSE + 000262' 437100 400000 IORB TAC1, IOUSE ;SET USE BIT + 000263' 542106 000007 HRRM TAC1,DEVIAD(DEVDAT) ;ADVANCE BUFFER + 000264' 263140 000000 POPJ PDP, 0 ;EXIT + 000265' 260140 000370' UIN4: PUSHJ PDP, UBEG3 + 000266' 254000 000254' JRST UIN3 + 000267' 260140 000000* SETI: PUSHJ PDP,WAIT1 + 000270' 506606 000007 HRLM UUO,DEVIAD(DEVDAT) ;SET INPUT BLOCK NO. + 000271' 254000 000111* JRST UXIT + + 000272' 260140 000267* SETO: PUSHJ PDP,WAIT1 + 000273' 260140 001142' PUSHJ PDP, UINTER ;WAIT FOR USE TO STOP + 000274' 260140 000242' PUSHJ PDP, UEND2 ;CLEAR INDICATORS + 000275' 506606 000010 HRLM UUO,DEVOAD(DEVDAT) ;SET OUTPUT BLOCK NO. + 000276' 254000 000271* JRST UXIT + + 000277' 260140 000272* GETF: PUSHJ PDP,WAIT1 + 000300' 603000 000002 TLNE IOS,IOBEG + 000301' 260140 000343' PUSHJ PDP,UBEG + 000302' 661000 000400 TLO IOS,UNWFRE + 000303' 202006 000002 MOVEM IOS,DEVIOS(DEVDAT) + 000304' 350046 000254* AOS TAC, UFREE(DEVDAT) ;GET FREE BLOCK + 000305' 506046 000010 HRLM TAC, DEVOAD(DEVDAT) + 000306' 505600 000007 HRLI UUO,PROG + 000307' 542060 000014 HRRM TAC,@UUO + 000310' 254000 000276* JRST UXIT + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 8 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + INTERNAL UTPCLS,UTWDR,UBEG,UTPREL + + 000311' UTWDR: IFE DTSIZ,< PUSHJ PDP,UTPREL> + + 000311' 254000 000310* JRST UXIT + + 000312' 607000 001000 UTPCLS: TLNN IOS, ULINKF + 000313' 254000 000326' JRST UTPREL + 000314' 135040 000000* LDB TAC,PIOMOD ;MODE + 000315' 301040 000016 CAIL TAC,16 + 000316' 254000 000326' JRST UTPREL + 000317' 544046 000006 HLR TAC,DEVBUF(DEVDAT) + 000320' 545040 000007 HLRI TAC, PROG + 000321' 540060 000001 HRR TAC, @TAC ;TAC:=BUFFER ADDRESS + 000322' 271040 000001 ADDI TAC,1 + 000323' 201100 000001 MOVEI TAC1,1 + 000324' 506120 000001 HRLM TAC1,@TAC + 000325' 254000 000000* JRST OUT + + UTPREL: IFE DTSIZ,< TLNE IOS,IOBEG ;RELEASE + POPJ PDP, + TLZE IOS,UDIREN + JRST UTPRL1 + TLNN IOS,UNWFRE + POPJ PDP, + TLNN IOS,UDIRIN + PUSHJ PDP,UBEG> + + 000326' 627000 000600 IFN DTSIZ,< TLZN IOS,UDIREN+UNWFRE + 000327' 263140 000000 POPJ PDP,> + 000330' 260140 001142' UTPRL1: PUSHJ PDP,UINTER ;IS SYSTEM AVAILABLE? + 000331' 540046 000304* HRR TAC,UFREE(DEVDAT) + 000332' 506066 000257* HRLM TAC,@UDIR(DEVDAT) + 000333' 200046 000332* MOVE TAC,UDIR(DEVDAT) + 000334' 275040 000001 SUBI TAC,1 + 000335' 202040 001121' MOVEM TAC,UBUF + 000336' 661000 002000 TLO IOS, URDIR + 000337' 202006 000002 MOVEM IOS,DEVIOS(DEVDAT) + 000340' 201040 000001 MOVEI TAC,1 + 000341' 260140 000375' PUSHJ PDP,USETW + 000342' 254000 000277* JRST WAIT1 + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 9 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + ,READ THE DIRECTORY FROM THIS DEC-TAPE + + 000343' 335006 000004 UBEG: SKIPGE DEVMOD(DEVDAT) ;IS DIRECTORY IN CORE? + 000344' 661000 000100 TLO IOS,UDIRIN + 000345' 603000 000100 TLNE IOS,UDIRIN + 000346' 263140 000000 POPJ PDP, 0 + 000347' 260140 001142' PUSHJ PDP, UINTER ;CHECK INTERLOCK + 000350' 261140 000001 UBEG2: PUSH PDP, TAC ;SAVE TAC + 000351' 550046 000333* HRRZ TAC,UDIR(DEVDAT) + 000352' 275040 000001 SUBI TAC, 1 + 000353' 202040 001121' MOVEM TAC,UBUF + 000354' 661000 002100 TLO IOS,UDIRIN+URDIR + 000355' 621000 000002 TLZ IOS, IOBEG + 000356' 202006 000002 MOVEM IOS,DEVIOS(DEVDAT) + 000357' 205040 400000 MOVSI TAC,DVDIRIN ;SET DIRECTORY IN CORE BIT + 000360' 436046 000004 IORM TAC,DEVMOD(DEVDAT) + 000361' 201040 000001 MOVEI TAC,1 + 000362' 260140 000377' PUSHJ PDP,USETR + 000363' 260140 000000* PUSHJ PDP,WSYNC + 000364' 544066 000351* HLR TAC,@UDIR(DEVDAT) + 000365' 552046 000331* HRRZM TAC,UFREE(DEVDAT) + 000366' 262140 000001 UBEGX: POP PDP,TAC + 000367' 263140 000000 POPJ PDP, 0 + + 000370' 603000 000100 UBEG3: TLNE IOS, UDIRIN + 000371' 263140 000000 POPJ PDP, 0 + 000372' 254000 000350' JRST UBEG2 + + 000373' 260140 001220' UTBERR: PUSHJ PDP, DTC1 ;ILL. BLOCK NO. + 000374' 254000 000000* JRST UTBKER + + 000375' 201100 000535' USETW: MOVEI TAC1, RIT + 000376' 334000 000000 SKIPA + 000377' 201100 000527' USETR: MOVEI TAC1,READ + 000400' 542100 000500' HRRM TAC1,DDIG + 000401' 552040 001117' HRRZM TAC,UBKN + 000402' 323040 000373' JUMPLE TAC,UTBERR ;ILL. BLOCK NO.? + 000403' 301040 001102 CAIL TAC,1102 + 000404' 254000 000373' JRST UTBERR ;ILL. BLOCK NO. + 000405' 135040 000000* LDB TAC,PUNIT ;UNIT + 000406' 241040 000003 ROT TAC, 3 + 000407' 271040 000000* ADDI TAC, DTCCHN ;DECTAPE CHANNEL + 000410' 202040 001116' MOVEM TAC, UNIT ;UNIT AND CHANNEL + 000411' 201040 000137 MOVEI TAC, 137 + 000412' 542040 001166' HRRM TAC, DTCINT + 000413' 275040 000021 SUBI TAC, 21 + 000414' 542040 001172' HRRM TAC, CONSZ1 ;FALL INTO FILL + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 10 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + 000415' 720200 000000 FILL: CONO DC,0 ;DESELECT DC + 000416' 700600 002100 CONO PI,2100 ;TURN ON CHANNEL 1 + 000417' 202300 001151' MOVEM DEVDAT, USVDB ;SAVE DATA BLOCK ADDR + 000420' 202300 001122' MOVEM DEVDAT,UDVDAT ;UDVDAT:=DTJIOS POINTER + 000421' 201040 000002 MOVEI TAC, DEVIOS + 000422' 272040 001122' ADDM TAC,UDVDAT + 000423' 200040 001275' MOVE TAC, [JSR DDIF] ;DATA CONTROL INTERRUPT CHANN + 000424' 202040 000042 MOVEM TAC,UCHA + 000425' 202340 001120' MOVEM PROG,UPROG ;UPROG:=PROG + 000426' 200040 001121' MOVE TAC,UBUF ;BLI:=XWD-200,C(UBUF) + 000427' 505040 777600 HRLI TAC,-200 + 000430' 202040 001114' MOVEM TAC,BLI + 000431' 271040 000177 ADDI TAC,200-1 + 000432' 202040 001113' MOVEM TAC,BLO + 000433' 721300 020000 CONSZ UTC, 20000 ;IS TAPE MOVING? + 000434' 254000 000453' JRST FILLC ;YES + 000435' 200040 001116' MOVE TAC, UNIT ;RDDA:=RDRM:=WTDA:=WTRM:=C(UN + 000436' 137040 000457' DPB TAC,F1 + 000437' 137040 000460' DPB TAC,F2 + 000440' 137040 000461' DPB TAC,F3 + 000441' 137040 000462' DPB TAC,F4 + 000442' 200040 001116' MOVE TAC,UNIT + 000443' 405040 000070 ANDI TAC, 70 ;TAC HAS UNIT ONLY + 000444' 271040 323201 ADDI TAC, SL+DTR+RB+EE+UCHN + 000445' 607000 010000 TLNN IOS, UREV ;WAS REV, GO FWD + 000446' 271040 010000 ADDI TAC,GR ;WAS FWD, GO REV + 000447' 721220 000001 CONO UTC, @TAC + 000450' 720200 004011 FILL2: CONO DC, DACI+UCHN ;SET UP DC FOR INPUT + 000451' 202006 000002 MOVEM IOS, DEVIOS (DEVDAT) + 000452' 263140 000000 POPJ PDP, + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 11 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + ,TAPE IS ACTIVE - GIVE A COMMAND + 000453' 721240 000001 FILLC: CONI UTC,TAC ;UTC COMMAND: UNIT, OLD DIRE + 000454' 405040 010070 ANDI TAC,GR+70 ;DIRECTION PLUS UNIT + 000455' 721201 320201 CONO UTC,SL+RB+EE+UCHN(TAC) ;NO TIME DELAY + 000456' 254000 000450' JRST FILL2 + + 000457' 000600 000517' F1: POINT 6,RDDA,35 + 000460' 000600 000531' F2: POINT 6,RDRM,35 + 000461' 000600 000523' F3: POINT 6,WTDA,35 + 000462' 000600 000537' F4: POINT 6,WTRM,35 + ,CHANGE DIRECTIONS - GIVE NEW COMMANDS + 000463' 721240 000001 RRV: CONI UTC,TAC + 000464' 431040 010000 XORI TAC,GR ;REVERSE BIT + 000465' 405040 550777 ANDI TAC,550777 + 000466' 435040 002000 IORI TAC,DT + 000467' 721201 220000 CONO UTC,SL(TAC) + 000470' 720200 004011 CONO DC,DACI+UCHN + 000471' 254000 000515' JRST DXIT + ,EXAMINE BLOCK NUMBERS - DISPATCHED FROM INTERRUPT - CHAN, DC. + 000472' 000000 000000 DDIF: 0 ;GOING FORWARD + 000473' 202040 001115' MOVEM TAC,SV1 ;SV1:=TAC + 000474' 721700 000002 CONSZ UTS, VEOT + 000475' 254000 000463' JRST RRV + 000476' 720040 000001 DATAI DC,TAC + 000477' 316040 001117' CAMN TAC,UBKN ;BLK NOT =STR + 000500' 254000 000500' DDIG: JRST . ;JRST READ, BIT, IFRIGHT UBK + 000501' 721300 010000 CONSZ UTC,10000 ;GOING BACKWARDS + 000502' 254000 000506' JRST .+4 ;BACKWARDS + 000503' 311040 001117' CAML TAC,UBKN ;BLK > STR > FORWARD + 000504' 254000 000463' JRST RRV + 000505' 254000 000510' JRST .+3 + 000506' 317040 001117' CAMG TAC,UBKN ;BACKWARDS + 000507' 254000 000463' JRST RRV ;BACKWARDS + 000510' 721240 000001 DDIG2: CONI UTC,TAC + 000511' 405040 550777 ANDI TAC,550777 + 000512' 721201 220000 CONO UTC,SL(TAC) + 000513' 334000 000000 SKIPA + 000514' 542040 000042 DXIT1: HRRM TAC,UCHA + 000515' 200040 001115' DXIT: MOVE TAC,SV1 ;RESTORE TAC + 000516' 254520 000472' JEN @DDIF ;RE-ENABLE, DISMISS. + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 12 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + ,DISPATCH FROM UCHA INITIALLY ON CORRECT BLOCK MARK + ,SETS OP TO READ, WRITE IN FWD, REVERSE + + ;RD FORWARD + 000517' 721200 360300 RDDA: CONO UTC,SL+RD+JDE+EE ;GETS UNIT NO. - RE + 000520' 201040 000551' MOVEI TAC,RDFW + 000521' 720200 004011 CONO DC,DACI+UCHN + 000522' 254000 000514' JRST DXIT1 + + 000523' 721200 360700 WTDA: CONO UTC,SL+WD+JDE+EE ;GETS UNIT NO. - RE + 000524' 201040 000563' MOVEI TAC,WTFW + 000525' 720200 003411 CONO DC,DACO+UCHN + 000526' 254000 000514' JRST DXIT1 + + 000527' 721340 010000 READ: CONSO UTC,10000 ;ENTRY TO SET UP READ + 000530' 254000 000517' JRST, RDDA + ;READ REVERSE + 000531' 721200 370300 RDRM: CONO UTC,SL+GR+RD+JDE+EE ;GETS UNIT NO. - RESETS TO RD + 000532' 201040 000543' MOVEI TAC,RDRV + 000533' 720200 004011 CONO DC,DACI+UCHN + 000534' 254000 000514' JRST DXIT1 + 000535' 721340 010000 RIT: CONSO UTC,10000 ;GOING REVERSE - ENTRY TO SET + 000536' 254000 000523' JRST WTDA ;WRITE FORWARD + ;WRITE REVERSE + 000537' 721200 370700 WTRM: CONO UTC,SL+WD+GR+JDE+EE ;GETS UNIT NO. -RESETS. TO WT + 000540' 201040 000555' MOVEI TAC,WTRV + 000541' 720200 003411 CONO DC,DACO+UCHN + 000542' 254000 000514' JRST DXIT1 + + ,DC INTERRUPT PROCESSSING TO READ/WRITE DATA IN EITHER + ,DIRECTION, AND RE-ENABLE INTERRUP. + ,EXIT BLOCK PROCESSING AT ENPT(WRITE), ENPTI(READ) + + 000543' 000000 000000 RDRV: 0 ;ENTRY VIA UCHA - READ REV + 000544' 720000 001113' BLKI DC,BLO + 000545' 264000 000620' JSR ENPTI + 000546' 370000 001113' SOS BLO + 000547' 370000 001113' SOS BLO + 000550' 254520 000543' JEN @RDRV + + 000551' 000000 000000 RDFW: 0 ;ENTRY VIA UCHA - READ FWD + 000552' 720000 001114' BLKI DC,BLI + 000553' 264000 000620' JSR ENPTI + 000554' 254520 000551' JEN @RDFW + + 000555' 000000 000000 WTRV: 0 ;ENTRY VIA UCHA - WRITE REV + 000556' 720100 001113' BLKO DC,BLO + 000557' 264000 000567' JSR ENPT + 000560' 370000 001113' SOS BLO + 000561' 370000 001113' SOS BLO + 000562' 254520 000555' JEN @WTRV + + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 12-1 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + 000563' 000000 000000 WTFW: 0 ;ENTRY VIA UCHA - WRITE FWD + 000564' 720100 001114' BLKO DC,BLI + 000565' 264000 000567' JSR ENPT + 000566' 254520 000563' JEN @WTFW + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 13 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + ;END OF OUTPUT BLOCK + + 000567' 000000 000000 ENPT: 0 + 000570' 264000 000603' JSR, ENP + 000571' 202040 001115' ENPT2: MOVEM TAC,SV1 ;SV1:=TAC + 000572' 515040 010000 HRLZI TAC,UREV + 000573' 721300 010000 CONSZ UTC,10000 + 000574' 412060 001122' ANDCAM TAC,@UDVDAT + 000575' 721340 010000 CONSO UTC,10000 + 000576' 436060 001122' IORM TAC,@UDVDAT + 000577' 201040 000615' MOVEI TAC,UOFF + 000600' 542040 000042 HRRM TAC,UCHA + 000601' 200040 001115' MOVE TAC,SV1 + 000602' 254120 000567' JRSTF @ENPT + + ,CHECK ERROR BITS DC MISSED, 0T PARITY, 1 LEG OP, TAPE END + 000603' 000000 000000 ENP: 0 + 000604' 720300 010000 CONSZ DC, 10000; DATA MISSED + 000605' 264000 000627' JSR ERROR2 + 000606' 254120 000603' JRSTF @ENP + + ,SAVE STATE OF UTS, UTC, DC, TURN OFF DC, UTC, +1@ERRTAL,+1@UERR + ;ERROR LOOPS + 000607' 000000 000000 ERROR: 0 + 000610' 721640 001111' CONI UTS, C12 + 000611' 721240 001112' CONI UTC, C13 + 000612' 720240 001110' CONI DC, C11 + 000613' 476000 001124' SETOM ERRFLG + 000614' 254120 000607' JRSTF @ERROR + ;INTERRUPT FROM DATA FLAG AFER BLKO HAS COUNTED OUT + 000615' 000000 000000 UOFF: 0 + 000616' 700600 001100 CONO PI, 1100 ;TURN DC CHANNEL OFF + 000617' 254520 000615' JEN @UOFF ;DISMISS EXTRA WRITE FLAG + + ;END OF INPUT BLOCK + 000620' 000000 000000 ENPTI: 0 + 000621' 250040 000620' EXCH TAC, ENPTI + 000622' 202040 000567' MOVEM TAC, ENPT + 000623' 264000 000603' JSR ENP + 000624' 720200 000000 CONO DC, 0 + 000625' 200040 000620' MOVE TAC, ENPTI + 000626' 254000 000571' JRST ENPT2 + ;DETECT FIRST ERROR ONLY + 000627' 000000 000000 ERROR2: 0 + 000630' 336000 001124' SKIPN ERRFLG ;PREVIOUSLY DETECTED ERROR! + 000631' 264000 000607' JSR ERROR ;STORE ERROR CONDITIONS + 000632' 254120 000627' JRSTF @ERROR2 ;CONTINUE LOOP + + ;END OF PART 1 DTSER2 + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 14 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + EXTERNAL SETIOD + INTERNAL UDMP0, UDMPI + + ; DUMP OUT + 000633' 661000 000020 UDMPO: TLO IOS, IO ;SET FOR OUTPUT + 000634' 260140 001142' PUSHJ PDP, UINTER ;CHECK INTERLOCK + 000635' 606600 777777 TRNN UUO, 777777 ;COMMAND ADDRESS? + 000636' 254000 000722' JRST UDMP2-1 ;ERROR + 000637' 201040 000727' MOVEI TAC, DDUMP ;RETURN WHEN BLOCK FOUND + 000640' 200100 001276' UDMP0: MOVE TAC1, [JSR DMPADV] ;BLKI OR BLKO RETURN, COMMANDS + + ;COMMON ROUTINE FOR ALL DUMP MODES, START SEARCH + 000641' 542040 000500' UDMP1: HRRM TAC,DDIG ;SEARCH RETURN + 000642' 202100 000043 MOVEM TAC1, UCHA+1 ;INTERRUPT RETURN + 000643' 200040 001275' MOVE TAC, [JSR DDIF] + 000644' 202040 000042 MOVEM TAC, UCHA ;DATA CONTROL CHANNEL + 000645' 554046 000010 HLRZ TAC, DEVOAD (DEVDAT) ;BLOCK NUMBER + 000646' 607000 000020 TLNN IOS, IO ;WRITING? + 000647' 554046 000007 HLRZ TAC, DEVIAD(DEVDAT) ;INPUT BLOCK NUMBER + 000650' 202040 001117' MOVEM TAC, UBKN ;BLOCK TO LOOK FOR + 000651' 552300 001151' HRRZM DEVDAT, USVDB ;DATA BLOCK ADDRESS + 000652' 135040 000405* LDB TAC,PUNIT ;UNIT + 000653' 241040 000003 ROT TAC, 3 + 000654' 271040 000407* ADDI TAC, DTCCHN + 000655' 202040 001116' MOVEM TAC, UNIT ;UNIT AND DT CHANNEL + 000656' 405040 000070 ANDI TAC, 70 + 000657' 721201 323201 CONO UTC, SL+DTR+RB+EE+UCHN(TAC) + 000660' 476000 001153' SETOM UERRCN ;SET ERROR COUNTER + 000661' 201040 000037 MOVEI TAC, 37 ;DO NOT CHECK FOR INCOMPLETE + 000662' 542040 001166' HRRM TAC, DTCINT + 000663' 201040 000016 MOVEI TAC,16 + 000664' 542040 001172' HRRM TAC, DTCINT+4 + 000665' 720200 004011 CONO DC, DACI+UCHN ;SET DATA CONTROL + 000666' 700600 002100 CONO PI,2100 ;INSURE CHANNEL 1 ON + 000667' 552340 001126' HRRZM PROG, UDMPA ;SAVE PROGRAM + 000670' 606600 777777 TRNN UUO, 777777 ;COMMAND ADDRESS + 000671' 263140 000000 POPJ PDP, 0 ;COMMAND LIST ON TAPE, INPUT + 000672' 550040 000014 HRRZ TAC, UUO ;GET CMD PNTR + 000673' 550100 000001 HRRZ TAC1, TAC ;SAVE POINTER + 000674' 270100 000007 UDMP1A: ADD TAC1, PROG ;GET ACTUAL POINTER + 000675' 552100 001125' HRRZM TAC1, UDMP ;STORE WORKING POINTER + + ;CHECK ENTIRE COMMAND LIST FOR VALIDITY + 000676' 336120 001125' UDMP1B: SKIPN TAC1, @UDMP ;GET COMMAND + 000677' 254000 000712' JRST UDMP1C ;END OF COMMAND LIST + 000700' 327100 000674' JUMPG TAC1, UDMP1A ;CHANGE COMMAND SEQUENCE + 000701' 576100 001141' HLREM TAC1, SVCNTR ;SAVE -N + 000702' 553000 000002 HRRZS TAC1 ;GET ADDRESS + 000703' 305100 000000* CAIGE TAC1, JOBPFI ;IS IT ABOVE IO PROT. AREA + 000704' 254000 000000* JRST ADRERR ;NO. ADDRESS CHECK ERROR + 000705' 274100 001141' SUB TAC1, SVCNTR ;GET AREA END + 000706' 313100 000000* CAMLE TAC1, USRREL ;LESS THEN END? + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 14-1 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + 000707' 254000 000722' JRST UDMP2-1 ;OUT OF BOUNDS + 000710' 350000 001125' AOS UDMP ;INDEX COMMAND LIST POINTER + 000711' 254000 000676' JRST UDMP1B ;GET NEXT COMMAND + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 15 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + ;GET FIRST COMMAND + 000712' 270040 000007 UDMP1C: ADD TAC, PROG ;GET ACTUAL ADDRESS + 000713' 552040 001125' HRRZM TAC, UDMP ;SAVE POINTER + 000714' 336060 001125' SKIPN TAC, @UDMP ;1ST COMMAND + 000715' 254000 000723' JRST UDMP2 ;NOTHING TO DO + 000716' 270040 000007 ADD TAC, PROG ;ACTUAL POINTER + 000717' 325040 000713' JUMPGE TAC, .-4 ;CHANGE COMMAND SEQUENCE + 000720' 202040 001113' MOVEM TAC, BLO ;SAVE I/O POINTER + 000721' 263140 000000 POPJ PDP, 0 + ;EXIT WITH ERROR + 000722' 660000 040000 TRO IOS, IOBKTL + 000723' 201040 777775 UDMP2: MOVEI TAC, -3 + 000724' 572040 001153' HRREM TAC, UERRCN + 000725' 402000 001124' SETZM ERRFLG + 000726' 254000 000242' JRST UEND2 + + ;SEARCH RETURN,OUTPUT,COMMAND LIST IN MEMORY + 000727' 721300 010000 DDUMP: CONSZ UTC,GR + 000730' 254000 000510' JRST DDIG2 ;KEEP GOING + 000731' 200040 001277' MOVE TAC,[BLKO DC,BLO] + 000732' 202040 000042 MOVEM TAC, UCHA + 000733' 720200 003411 CONO DC,DACO+UCHN + 000734' 200040 001116' MOVE TAC,UNIT + + 000735' 721201 360700 CONO UTC,SL+WD+JDE+EE(TAC) + 000736' 254000 000515' JRST DXIT + ;BLKI OR BLKO RETURNS, COMMAND LIST IN MEMORY + 000737' 000000 000000 DMPADV: 0 + 000740' 202040 001115' MOVEM TAC,SV1 + 000741' 354040 001125' AOSA TAC,UDMP ;POINTER + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 16 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + 000742' 552040 001125' DMPA1: HRRZM TAC, UDMP ;STORE POINTER + 000743' 336041 000000 SKIPN TAC, 0(TAC) ;IS WORD ZERO + 000744' 254000 000752' JRST DMPA2 ;END + 000745' 270040 001126' ADD TAC, UDMPA ;ADD PROGRAM + 000746' 325040 000742' JUMPGE TAC, DMPA1 ;CHANGE COMMAND + 000747' 202040 001113' MOVEM TAC, BLO + 000750' 200040 001115' DMPXT: MOVE TAC, SV1 + 000751' 254520 000737' JEN @DMPADV + + ;END OF COMMAND LIST, INPUT OR OUTPUT + 000752' 264000 000603' DMPA2: JSR ENP + 000753' 700600 001100 CONO PI, 1100 ;TURN DATA CONTROL CHANNEL OF + 000754' 721740 000040 CONSO UTS, 40 ;WRITING? + 000755' 720200 000000 CONO DC, 0 ;SHUT OFF DATA CONTROL + 000756' 254000 000750' JRST DMPXT + ;SEARCH RETURN, INPUT COMMAND LIST ON TAPE + 000757' 721300 010000 DDMPI: CONSZ UTC, GR ;GOING BACKWARDS? + 000760' 254000 000510' JRST DDIG2 ;KEEP GOING + 000761' 200040 001300' MOVE TAC, [XWD -1,BLO-1] + 000762' 202040 001113' MOVEM TAC, BLO + + ;COMMON INSTRUCTIONS FOR COMMAND LIST IN MEMORY OR ON TAPE + 000763' 200040 001301' DDMPI2: MOVE TAC, [BLKI DC,BLO] + 000764' 202040 000042 MOVEM TAC, UCHA + 000765' 720200 004011 CONO DC, DACI+UCHN + 000766' 200040 001116' MOVE TAC, UNIT + 000767' 721201 360300 CONO UTC, SL+RD+JDE+EE(TAC) + 000770' 254000 000515' JRST DXIT + + ;INPUT COMMAND LIST ON TAPE. BLKI RETURN AFTER READING COMMAND + 000771' 000000 000000 DMPRD: 0 + 000772' 331000 001113' SKIPL BLO ;END OF COMMAND LIST? + 000773' 254000 001010' JRST DMPRD1 + 000774' 202040 001115' MOVEM TAC, SV1 ;SAVE TAC + 000775' 200040 001113' MOVE TAC, BLO ;PICK UP COMMAND + 000776' 576040 001141' HLREM TAC, SVCNTR ;-N + 000777' 553000 000001 HRRZS TAC ;ADDRESS + 001000' 274040 001141' SUB TAC, SVCNTR ;END ADDRESS + 001001' 303040 000000 DMPRD0: CAILE TAC, 0 ;<END? MODIFIED + 001002' 254000 001102' JRST DMPERR ;OUT OF BOUNDS, EXIT + 001003' 200040 001125' MOVE TAC, UDMP ;PROG + 001004' 272040 001113' ADDM TAC, BLO ;TO GET ACTUAL I/O POINTER + 001005' 201040 001012' MOVEI TAC,DMPRDA ;NEW RETURN + 001006' 542040 000042 HRRM TAC, UCHA+ + 001007' 334040 001115' SKIPA TAC, SV1 ;RESTORE TAC + 001010' 720200 000000 DMPRD1: CONO DC, 0 + 001011' 254520 000771' JEN @DMPRD + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 17 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + ;INPUT COMMAND LIST ON TAPE. BLKI RETURN AFTER READING DATA + 001012' 000000 000000 DMPRDA: 0 + 001013' 202040 001115' MOVEM TAC, SV1 ;SAVE TAC + 001014' 200040 001300' MOVE TAC, [XWD -1,BLO-1] + 001015' 202040 001113' MOVEM TAC, BLO ;READ INTO BLO + 001016' 201040 000771' MOVEI TAC, DMPRD ;USE PREV. RETURN + 001017' 542040 000043 HRRM TAC, UCHA+1 + 001020' 200040 001115' MOVE TAC, SV1 ;SAVE TAC + 001021' 254520 001012' JEN @DMPRDA + ;DUMP IN + 001022' 621000 000020 UDMPI: TLZ IOS, IO + 001023' 260140 001142' PUSHJ PDP, UINTER + 001024' 602600 777777 TRNE UUO, 777777 ;COMMAND LIST ON TAPE + 001025' 254000 001033' JRST UDMPI2 ;COMMAND LIST IN CORE + 001026' 200040 000706* MOVE TAC, USRREL ;LENGTH OF USER AREA + 001027' 542040 001001' HRRM TAC, DMPRD0 + 001030' 201040 000757' MOVEI TAC, DDMPI ;SEARCH RETURN + 001031' 200100 001302' MOVE TAC1, [JSR DMPRD] ;BLOCK IN RETURN + 001032' 254000 000641' JRST UDMP1 + 001033' 201040 001035' UDMPI2: MOVEI TAC, DDMPI3 ;COMMAND LIST IN CORE + 001034' 254000 000640' JRST UDMP0 + ;SEARCH RETURN, INPUT COMMAND LIST IN MEMORY + 001035' 721300 010000 DDMPI3: CONSZ UTC, GR + 001036' 254000 000510' JRST DDIG2 ;KEEP GOING + 001037' 254000 000763' JRST DDMPI2 ;INPUT COMMAND LIST IN CORE + ;JOB DONE AFTER COMMAND LIST RUNS OUT + 001040' 332000 001124' DMPEND: SKIPE ERRFLG + 001041' 660000 200000 TRO IOS,IODERR + 001042' 202006 000002 MOVEM IOS,DEVIOS(DEVDAT) + 001043' 200040 001116' MOVE TAC,UNIT + 001044' 405040 000070 ANDI TAC, 70 + 001045' 700600 002100 CONO PI,2100 + 001046' 720200 004011 CONO DC, DACI+UCHN + 001047' 721201 220200 CONO UTC, SL+RB(TAC) ;SWITCH TO SEARCH MODE + 001050' 200040 001303' MOVE TAC, [JSR UDMPRB] + 001051' 202040 000042 MOVEM TAC, UCHA + 001052' 254000 000000* JRST DTCRET + ;SEARCH RETURN TO READ NEXT FREE BLOCK + 001053' 000000 000000 UDMPRB: 0 + 001054' 250300 001151' EXCH DEVDAT, USVDB ;GET DVDB + 001055' 202040 001130' MOVEM TAC,SVAC + 001056' 202000 001131' MOVEM IOS,SVAC+1 + 001057' 202140 001132' MOVEM PDP,SVAC+2 + 001060' 202100 001133' MOVEM TAC1,SVAC+3 + 001061' 200006 000002 MOVE IOS,DEVIOS(DEVDAT) + 001062' 607000 000020 TLNN IOS,IO ;INPUT OR OUTPUT? + 001063' 254000 001066' JRST .+3 ;INPUT + 001064' 720046 000365* DATAI DC,UFREE(DEVDAT) ;LAST FREEBLOCK TALLY + 001065' 661000 000400 TLO IOS,UNWFRE ;SET FREE BLOCK CHANGED BIT + 001066' 720200 000000 CONO DC,0 ;TURN OFF DATA CONTROL + 001067' 201040 000654* MOVEI TAC,DTCCHN + 001070' 721201 005000 CONO UTC,5000(TAC) ;STOP TAPE + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 17-1 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + 001071' 200140 001304' MOVE PDP,[XWD -5,SVAC+3] ;USE REST OF SCAV BLOCK + 001072' 264000 001154' JSR IODSET + 001073' 260140 001227' PUSHJ PDP,DTC1B + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 18 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + 001074' 200040 001130' MOVE TAC,SVAC + 001075' 200000 001131' MOVE IOS,SVAC+1 + 001076' 200140 001132' MOVE PDP,SVAC+2 + 001077' 200100 001133' MOVE TAC1,SVAC+3 + 001100' 250300 001151' EXCH DEVDAT,USVDB + 001101' 254520 001053' JEN @UDMPRB + ;ADDRESS CHECK FROM COMMAND. COMMANDS ON TAPE + 001102' 250300 001151' DMPERR: EXCH DEVDAT, USVDB ;GET DVDB + 001103' 201040 400000 MOVEI TAC, IOIMPM ;ERROR BITS + 001104' 436046 000002 ORM TAC, DEVIOS(DEVDAT) ;SET STATUS + 001105' 250300 001151' EXCH DEVDAT, USVDB ;RESTORE DEVDAT + 001106' 200040 001115' MOVE TAC, SV1 ;RESTORE TAC + 001107' 254000 001010' JRST DMPRD1 + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 19 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + 001110' 000000 000000 C11: 0 ;TEMP CONI DC + 001111' 000000 000000 C12: 0 ;TEMP CONI UTS + 001112' 000000 000000 C13: 0 ;TEMP CONI UTC + 001113' 000000 000000 BLO: 0 ;XWD -200 C(UBUF) + 001114' 000000 000000 BLI: 0 ;XWD,-200,C(UBUF+200) + 001115' 000000 000000 SV1: 0 ;TEMPORARY FOR TAC DURING INTERRUPT + 001116' 000000 000000 UNIT: 0 ;IN BITS 30-32 + 001117' 000000 000000 UBKN: 0 ;BLOCK BEING SEARCHED FOR + 001120' 000000 000000 UPROG: 0 ;HOLDS PROG + 001121' 000000 000000 UBUF: 0 ;ABS. LOC OF DATA + 001122' 000000 000000 UDVDAT: 0 ;PTR TO IOS + 001123' 000000 000000 ERRTAL: 0 ;TOTAL NO. OF ERRORS + 001124' 000000 000000 ERRFLG: 0 ;-1 IF ERROR OCCURED, 0 OTHERWISSE + + 001125' 000000 000000 UDMP: 0 ;HOLDS DUMP UUO ADDRESS + 001126' 000000 000000 UDMPA: 0 ;HOLDS USER PROGRAM STARTING ADDRESS + 001127' 000000 000000 SV0: 0 + 001130' SVAC: BLOCK 11 + 001141' 000000 000000 SVCNTR: 0 ;HOLDS -N OF DUMP COMMAND WORD + + ;CHECK FRO INTERLOCK ON DECTAPE AND DATA CONTROLS + 001142' 660000 010000 UINTER: TRO IOS, IOACT + 001143' 202006 000002 MOVEM IOS, DEVIOS(DEVDAT) + 001144' 352000 000244* AOSE DTREQ ;IS DECTAPE CONTROL FREE? + 001145' 260140 000000* PUSHJ PDP, DTWAIT ;WAIT + 001146' 352000 000242* AOSE DCREQ ;IS DATA CONTROL FREE? + 001147' 260140 000000* PUSHJ PDP, DCWAIT ;WAIT + 001150' 263140 000000 POPJ PDP, 0 ;EXIT + + 001151' 000000 000000 USVDB: 0 ;SAVE DATA BLOCK ADDRESS + 001152' 000000 000000 USVIOS: 0 ;SAVE IOS + 001153' 777777 777775 UERRCN: -3 ;ERROR COUNTER + + 001154' 000000 000000 IODSET: 0 + 001155' 623000 000001 TLZE IOS,IOW + 001156' 260140 000000* PUSHJ PDP,SETIOD + 001157' 202006 000002 MOVEM IOS,DEVIOS(DEVDAT) + 001160' 254020 001154' JRST @IODSET + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 20 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + ;INITIALZATION + + 001161' 201040 777775 DTCINI: MOVEI TAC, -3 ;CLEAR ERROR COUNTER + 001162' 572040 001153' HRREM TAC, UERRCN + 001163' 402000 001124' SETZM ERRFLG + 001164' 721200 000000 CONO UTC, 0 + 001165' 263140 000000 POPJ PDP, 0 + + 001166' 721740 000137 DTCINT: CONSO UTS, 137 ;ALL ERRORS AND JOB DONE + 001167' 254000 001167' JRST . ;MODIFIED BY INITIALIZATION + 001170' 721700 000020 CONSZ UTS,20 ;TIME FLAG + 001171' 254000 001244' JRST UTIME ;SET DECTAPE CONTROL AVAILABL + 001172' 721700 000116 CONSZ1: CONSZ UTS, 116 ;INC BLK, PARITY, ILL OP, END + 001173' 264000 000627' JSR ERROR2 ;ERROR + + ;JOB DONE + 001174' 720200 000000 CONO DC, 0 ;TURN OFF DATA CONTROL + 001175' 202000 001127' MOVEM 0, SV0 ;SAVE ZERO + 001176' 721240 000000 CONI UTC, 0 + 001177' 202000 001152' MOVEM 0, USVIOS + 001200' 405000 230070 ANDI 0, 230070 ;SAVE DIRECTION AND UNIT + 001201' 721220 000000 CONO UTC, @0 ;SWITCH TO MOVE MODE + 001202' 200000 001127' MOVE 0, SV0 + 001203' 264000 000000* JSR DTCSAV + 001204' 260140 001252' PUSHJ PDP, DSETAC + 001205' 332000 001124' SKIPE ERRFLG + 001206' 254000 001256' JRST DTRED0 + 001207' 623000 002000 TLZE IOS,URDIR + 001210' 254000 001213' JRST .+3 + 001211' 264000 001154' JSR IODSET + 001212' 254000 001220' JRST DTC1 + 001213' 640000 000017 TRC IOS,17 + 001214' 646000 000017 TRCN IOS,17 + 001215' 254000 001040' JRST DMPEND + 001216' 264000 001154' JSR IODSET + 001217' 254000 001237' JRST DTCONT + 001220' 200040 001152' DTC1: MOVE TAC, USVIOS + 001221' 405040 010007 ANDI TAC, 10007 ;DIRECTION, CHANNEL + 001222' 435040 005000 ORI TAC,5000 ;TIME FLAG ENABLE + 001223' 721220 000001 CONO UTC, @ TAC ;STOP TAPE, AND DESELECT + 001224' 621000 010000 TLZ IOS, UREV + 001225' 602040 010000 TRNE TAC, 10000 + 001226' 661000 010000 TLO IOS,UREV + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 21 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + + + 001227' DTC1A: + 001227' 371000 001146* DTC1B: SOSL DCREQ ;DECREMENT REQUEST COUNT, ANYONE LEFT W + 001230' 476000 000243* SETOM DCAVAL ;YES.DATA CONTROL AVAILABLE + 001231' 620000 010000 TRZ IOS, IOACT + 001232' 202006 000002 DTC2: MOVEM IOS, DEVIOS(DEVDAT) + 001233' 201040 777775 MOVEI TAC, -3 + 001234' 572040 001153' HRREM TAC, UERRCN + 001235' 402000 001124' SETZM ERRFLG + 001236' 263140 000000 POPJ PDP, + + 001237' 201100 000153' DTCONT: MOVEI TAC1, UOUT2 + 001240' 607000 000020 TLNN IOS, IO ;WRITING? + 001241' 201100 000217' MOVEI TAC1, UIN1 + 001242' 260142 000000 PUSHJ PDP, 0(TAC1) + 001243' 254000 001232' JRST DTC2 + + ;INTERRUPT FROM TIME FLAG AFTER STOP DELAY + 001244' 721340 004000 UTIME: CONSO UTC,4000 + 001245' 254000 001167' JRST DTCINT+1 + 001246' 371000 001144* SOSL DTREQ ;DECREMENT REQUEST COUNT, IS ANYONE STI + 001247' 476000 000245* SETOM DTAVAL ;YES,DECTAPE CONTROL AVAILABL + 001250' 721200 000000 CONO UTC, 0 + 001251' 254520 000000* JEN @DTCCHL + + ;SET UP NECESSARY DECTAPE ACCUMULATORS + 001252' 200300 001151' DSETAC: MOVE DEVDAT, USVDB + 001253' 200340 001120' MOVE PROG, UPROG + 001254' 200006 000002 MOVE IOS, DEVIOS(DEVDAT) + 001255' 263140 000000 POPJ PDP, + ;RE-DO DECTAPE COMMAND IF AN ERROR OCCURED + 001256' 640000 000017 DTRED0: TRC IOS,17 + 001257' 646000 000017 TRCN IOS,17 + 001260' 254000 001040' JRST DMPEND + 001261' 350000 001153' AOS UERRCN ;NOT YET 3 ERRORS + 001262' 254000 001266' JRST DTRD2 ;THIRD ERROR + 001263' 402000 001124' SETZM ERRFLG ;CLEAR FLAG +I 001264' 260140 000415' PUSHJ PDP, FILL ;RE-EXECUTE THE COMMAND + 001265' 254000 001052* JRST DTCRET ;EXIT + 001266' 660000 200000 DTRD2: TRO IOS, IODERR ;SET ERROR INDICATION + 001267' 623000 000001 TLZE IOS, IOW + 001270' 260140 001156* PUSHJ PDP, SETIOD ;RELEASE WAIT + 001271' 254000 001220' JRST DTC1 ;STOP THE TAPE + EXTERNAL DTREQ, DCREQ, DTWAIT, DCWAIT, DTCSAV,DTCRET + EXTERNAL DTAVAL, DCAVAL, DTCCHL, UTBKER, DTCCHN, USRREL + INTERNAL DTCINT, DTCINI, DTSIZ,UBUF + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 001305 + + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 21-1 +DTSER2 MAC 24-APR-78 02:46 L. HANTMAN PART 1 7-13-65 + +9K CORE USED + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 22 +DTSER2 MAC 24-APR-78 02:46 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADRCK 000001' EXT +ADRERR 000704' EXT +ADVBFE 000000 EXT +ADVBFF 000000 EXT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BLI 001114' +BLO 001113' +BUFPNT 000012 INT +BUFWRD 000013 INT +C11 001110' +C12 001111' +C13 001112' +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CONSZ1 001172' +CPOPJ1 000033' EXT +D 000017 INT +DACI 004010 +DACO 003410 +DAT 000005 INT +DC 000200 SPD +DCAVAL 001230' EXT +DCL 000001 INT +DCREQ 001227' EXT +DCW 020000 INT +DCWAIT 001147' EXT +DDI 000007 INT +DDIF 000472' +DDIG 000500' +DDIG2 000510' +DDMPI 000757' +DDMPI2 000763' +DDMPI3 001035' +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DDUMP 000727' +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT + + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 22-1 +DTSER2 MAC 24-APR-78 02:46 SYMBOL TABLE + +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DIRERR 000015' EXT +DLK 000005 INT +DMPA1 000742' +DMPA2 000752' +DMPADV 000737' +DMPEND 001040' +DMPERR 001102' +DMPRD 000771' +DMPRD0 001001' +DMPRD1 001010' +DMPRDA 001012' +DMPXT 000750' +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSETAC 001252' +DSI 000011 INT +DSO 000010 INT +DT 002000 +DTAVAL 001247' EXT +DTC1 001220' +DTC1A 001227' +DTC1B 001227' +DTC2 001232' +DTCCHL 001251' EXT +DTCCHN 001067' EXT +DTCINI 001161' INT +DTCINT 001166' INT +DTCONT 001237' +DTCRET 001265' EXT +DTCSAV 001203' EXT +DTR 003000 +DTRD2 001266' +DTRED0 001256' +DTREQ 001246' EXT +DTSIZ 000001 INT +DTW 040000 INT +DTWAIT 001145' EXT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 22-2 +DTSER2 MAC 24-APR-78 02:46 SYMBOL TABLE + +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +DXIT 000515' +DXIT1 000514' +EE 100000 +ENP 000603' +ENPT 000567' +ENPT2 000571' +ENPTI 000620' +ENTRB 020000 INT +ERRFLG 001124' +ERROR 000607' +ERROR2 000627' +ERRTAL 001123' +F1 000457' +F2 000460' +F3 000461' +F4 000462' +FILL 000415' +FILL2 000450' +FILLC 000453' +GETF 000277' +GR 010000 +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODSET 001154' +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIERR 000065' EXT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSET 000000 EXT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 22-3 +DTSER2 MAC 24-APR-78 02:46 SYMBOL TABLE + +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JDE 040000 +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOBPFI 000703' EXT +LOOKB 040000 INT +MTW 010000 INT +OBUFB 100000 INT +OUT 000325' EXT +OUTPB 004000 INT +PDP 000003 INT +PI 000004 SPD +PICHN 000100 INT +PIOMOD 000314' EXT +PROG 000007 INT +PUNIT 000652' EXT +PUUOAC 000063' EXT +RB 000200 +RD 000300 +RDDA 000517' +RDFW 000551' +RDRM 000531' +RDRV 000543' +READ 000527' +RIT 000535' +RRV 000463' +RUN 200000 INT +RUNABL 204000 INT +SETI 000267' +SETIOD 001270' EXT +SETO 000272' +SL 220000 +SV0 001127' +SV1 001115' +SVAC 001130' +SVCNTR 001141' +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +THSDAT 000046' EXT +TTYATC 020000 INT +TTYUSE 010000 INT +UBEG 000343' INT +UBEG2 000350' +UBEG3 000370' +UBEGX 000366' + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 22-4 +DTSER2 MAC 24-APR-78 02:46 SYMBOL TABLE + +UBKN 001117' +UBLK 000001 +UBUF 001121' INT +UCHA 000042 +UCHN 000001 +UDIR 000364' EXT +UDIR2 000016' +UDIR3 000022' +UDIR4 000026' +UDIREN 000200 +UDIRIN 000100 +UDIRK1 000034' +UDIRLN 000004 +UDIRSH 000000' +UDMP 001125' +UDMP0 000640' INT +UDMP1 000641' +UDMP1A 000674' +UDMP1B 000676' +UDMP1C 000712' +UDMP2 000723' +UDMPA 001126' +UDMPI 001022' INT +UDMPI2 001033' +UDMPO 000633' +UDMPRB 001053' +UDVDAT 001122' +UEND 000236' +UEND2 000242' +UENTER 000052' INT +UERRCN 001153' +UFREE 001064' EXT +UIN 000204' +UIN1 000217' +UIN2 000251' +UIN3 000254' +UIN4 000265' +UINTER 001142' +ULINKF 001000 +ULOOK 000035' INT +ULOOK1 000041' +UNIT 001116' +UNWFRE 000400 +UOFF 000615' +UOUT 000125' +UOUT1 000144' +UOUT2 000153' +UOUT3 000167' +UOUT4 000171' +UPROG 001120' +URDIR 002000 +UREV 010000 +USETR 000377' + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING MACRO 10 05:51 24-APR-78 PAGE 22-5 +DTSER2 MAC 24-APR-78 02:46 SYMBOL TABLE + +USETW 000375' +USRJDA 000064' EXT +USRMOD 010000 INT +USRREL 001026' EXT +USVDB 001151' +USVIOS 001152' +UTBERR 000373' +UTBKER 000374' EXT +UTC 000210 SPD +UTDSP 000112' ENT +UTIME 001244' +UTPCLR 000063' INT +UTPCLS 000312' INT +UTPREL 000326' INT +UTPRL1 000330' +UTS 000214 SPD +UTWDR 000311' INT +UUO 000014 INT +UX1 000001 +UX2 000002 +UX3 000005 +UXIT 000311' EXT +VEOT 000002 +WAIT1 000342' EXT +WD 000700 +WSYNC 000363' EXT +WTDA 000523' +WTFW 000563' + EEEEEEEEEEEEEEE RRRRRRRRRRRR RRRRRRRRRRRR CCCCCCCCCCCC OOOOOOOOO NNN NNN +EEEEEEEEEEEEEEE RRRRRRRRRRRR RRRRRRRRRRRR CCCCCCCCCCCC OOOOOOOOO NNN NNN +EEEEEEEEEEEEEEE RRRRRRRRRRRR RRRRRRRRRRRR CCCCCCCCCCCC OOOOOOOOO NNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNNNNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNNNNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNNNNN NNN +EEEEEEEEEEEE RRRRRRRRRRRR RRRRRRRRRRRR CCC OOO OOO NNN NNN NNN +EEEEEEEEEEEE RRRRRRRRRRRR RRRRRRRRRRRR CCC OOO OOO NNN NNN NNN +EEEEEEEEEEEE RRRRRRRRRRRR RRRRRRRRRRRR CCC OOO OOO NNN NNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNNNNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNNNNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNNNNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNN +EEEEEEEEEEEEEEE RRR RRR RRR RRR CCCCCCCCCCCC OOOOOOOOO NNN NNN +EEEEEEEEEEEEEEE RRR RRR RRR RRR CCCCCCCCCCCC OOOOOOOOO NNN NNN +EEEEEEEEEEEEEEE RRR RRR RRR RRR CCCCCCCCCCCC OOOOOOOOO NNN NNN + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :ERRCON.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:33 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1892 +File will be deleted after printing + +ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 8-9-65 + + XLIST + LIST + TITLE ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS + SUBTTL 8-9-65 + EXTERNAL APRCHL,APRRET,HOLD,HOLDI,APRCHN + EXTERNAL JOB,JOBADR,JOBREL,TTYFND,TTYCTR,TTYSTR + EXTERNAL JBTADR, UXIT,JOBPDP,JOBTRP,USRPDP,UBUF,PJOBN + EXTERNAL CPOPJ,HOLDI1,WAIT1,USRPOV,JOBPFI + EXTERNAL CRLF,MJOBPD,JOBPDL,CPOPJ1 + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 2 +ERRCON MAC 24-APR-78 23:01 8-9-65 + + + ;CALL: PUSHJ PDP,ADRCK + ; HRRZ TAC,LOC + ; OK RETURN + + INTERNAL ADRCK + + 000000' 261140 000001 ADRCK: PUSH PDP, TAC + 000001' 256023 777777 XCT @-1(PDP) + 000002' 350003 777777 AOS -1(PDP) + 000003' 261140 000002 PUSH PDP,TAC1 + 000004' 135100 000000* LDB TAC1,PJOBN + 000005' 554102 000000* HLRZ TAC1,JBTADR(TAC1) + 000006' 303040 000000* CAILE TAC,JOBPFI ;IN IO PROTECTED PART OF DATA AREA? + 000007' 313040 000002 CAMLE TAC,TAC1 ;NO,IS IT GREATER THAN PROTECTION? + 000010' 260140 000014' PUSHJ PDP,ADRERR ;YES + 000011' 262140 000002 POP PDP,TAC1 ;NO + 000012' 262140 000001 POP PDP, TAC + 000013' 263140 000000 POPJ PDP, + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 3 +ERRCON MAC 24-APR-78 23:01 8-9-65 + + + INTERNAL ADRERR + + 000014' 550100 000003 ADRERR: HRRZ TAC1,PDP + 000015' 317100 000000* CAMG TAC1,JOBADR ;IS THIS ERROR AT UUO OR INTERRUPT SERV + 000016' 254000 000027' JRST ADRERI ;INTERRUPT SERVICE LEVEL + 000017' 265040 000231' JSP TAC,ERRPTU + 000020' 440700 000023' POINT 7,AERM1 + 000021' 260140 000155' PUSHJ PDP,ERNAM + 000022' 254000 000207' JRST ERSYC1 + + 000023' 406110 451212 AERM1: ASCIZ /ADDRESS CHECK FOR / + 000024' 516464 041620 + 000025' 426071 320214 + 000026' 476444 000000 + + 000027' 135200 000004* ADRERI: LDB ITEM, PJOBN + 000030' 265040 000232' JSP TAC,ERRPNT + 000031' 440700 000023' POINT 7,AERM1 + 000032' 260140 000155' PUSHJ PDP,ERNAM + 000033' 201100 000045' MOVEI TAC1,AERM3 + 000034' 260140 000333' PUSHJ PDP,MESPNT + 000035' 250303 000000 ADRER2: EXCH DEVDAT, (PDP) ;GET ADDRESS OF D.D. BLOCK DECTECTING ER + 000036' 135040 000422' LDB TAC, [POINT 3, DEVCHR(DEVDAT), 11] ;GET PI CHANNEL NO. + 000037' 261140 000001 PUSH PDP, TAC ;AND SAVE + 000040' 200046 000003 MOVE TAC,DEVSER(DEVDAT) + 000041' 260141 000000 PUSHJ PDP,DRL(TAC) ;RELEASE DEVICE + 000042' 262140 000001 POP PDP, TAC ;RESTORE PI CHANNEL NO. + 000043' 250303 000000 EXCH DEVDAT,(PDP) + 000044' 254000 000000* JRST HOLDI ;AND GO DISMISS CHANNEL + + 000045' 202112 551222 AERM3: ASCIZ / DURING INTERRUPT/ + 000046' 472164 044634 + 000047' 522132 251252 + 000050' 502500 000000 + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 4 +ERRCON MAC 24-APR-78 23:01 8-9-65 + + + INTERNAL APRILM + EXTERNAL USRREL + + 200000 POVF=200000 + 400000 POVC=400000 + 010000 NXM=10000 + 020000 ILM=20000 + + 000051' 201040 000000* APRILM: MOVEI TAC,APRCHN + 000052' 700340 020000 CONSO APR,ILM + 000053' 254000 000100' JRST APRNXM + 000054' 700201 020000 CONO APR,ILM(TAC) + 000055' 550040 000000* HRRZ TAC,APRCHL + 000056' 313040 000000* CAMLE TAC, USRREL + 000057' 254000 000064' JRST APRJRS + 000060' 265040 000231' JSP TAC,ERRPTU + 000061' 440700 000070' POINT 7,APM1 + 000062' 260140 000144' APRIL1: PUSHJ PDP,EPTADR + 000063' 254000 000132' JRST APRDMS ;GO DISMISS APR CHANNEL + + 000064' 265040 000231' APRJRS: JSP TAC,ERRPTU + 000065' 440700 000073' POINT 7,APM2 + 000066' 260140 000144' PUSHJ PDP,EPTADR + 000067' 254000 000132' JRST APRDMS + + 000070' 446311 420232 APM1: ASCIZ /ILL MEM REF/ + 000071' 426324 051212 + 000072' 430000 000000 + + 000073' 502064 042660 APM2: ASCIZ /PC EXCEEDS MEM BOUND/ + 000074' 416130 542246 + 000075' 202330 546500 + 000076' 412372 547210 + 000077' 000000 000000 + + + + + 000100' 700340 010000 APRNXM: CONSO APR,NXM + 000101' 254000 000111' JRST APRPDL + 000102' 700201 010000 CONO APR,NXM(TAC) + 000103' 265040 000231' JSP TAC,ERRPTU + 000104' 440700 000106' POINT 7,APM3 + 000105' 254000 000062' JRST APRIL1 + + 000106' 472371 620212 APM3: ASCIZ /NON EX MEM/ + 000107' 541011 542632 + 000110' 000000 000000 + + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 5 +ERRCON MAC 24-APR-78 23:01 8-9-65 + + + 000111' 700340 200000 APRPDL: CONSO APR,POVF + 000112' 265240 000202' JSP DAT, ERROR ;NOT APR, MUST BE HARDWARE PROB. + 000113' 700201 400000 CONO APR,POVC(TAC) + 000114' 200040 000055* MOVE TAC,APRCHL + 000115' 332100 000000* SKIPE TAC1,USRPOV + 000116' 607040 010000 TLNN TAC,10000 ;WAS OVF IN USER MODE? + 000117' 254000 000122' JRST PDLOV ;NO, GO PRINT MESSAGE + 000120' 542100 000114* HRRM TAC1,APRCHL ;RESET RETURN + 000121' 254000 000000* JRST APRRET ;DISMISS CLOCK + 000122' 265040 000231' PDLOV: JSP TAC,ERRPTU + 000123' 440700 000134' POINT 7,APM4 + 000124' 260140 000144' PUSHJ PDP,EPTADR + 000125' 200040 000120* MOVE TAC,APRCHL + 000126' 603040 010000 TLNE TAC,10000 + 000127' 254000 000132' JRST APRDMS ;GO DISMISS APR CHANNEL + 000130' 201100 000225' MOVEI TAC1,ERMS1 + 000131' 260140 000340' PUSHJ PDP,MESPC + 000132' 201040 000000 APRDMS: MOVEI TAC, 0 ;SET TO DISMISS APR CHANNEL + 000133' 254000 000000* JRST HOLDI1 + + 000134' 502111 420236 APM4: ASCIZ .PDL OV. + 000135' 530000 000000 + + 000136' 202032 420212 APMSYS: ASCIZ / AT EXEC LOC / + 000137' 542130 320230 + 000140' 476064 000000 + + + 000141' 202032 420252 APMUSR: ASCIZ / AT USER LOC / + 000142' 516132 220230 + 000143' 476064 000000 + + + 000144' 200040 000125* EPTADR: MOVE TAC,APRCHL + 000145' 261140 000001 EPTAD1: PUSH PDP,TAC ;PPRINT "AT EXEC LOC " OR "AT USER LOC" + 000146' 201100 000136' MOVEI TAC1,APMSYS + 000147' 603040 010000 TLNE TAC,10000 + 000150' 201100 000141' MOVEI TAC1,APMUSR + 000151' 260140 000333' PUSHJ PDP,MESPNT + 000152' 262140 000001 POP PDP,TAC + 000153' 405040 777777 ANDI TAC,-1 + 000154' 254000 000344' JRST OCTPNT + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 6 +ERRCON MAC 24-APR-78 23:01 8-9-65 + + + INTERNAL ERNAM + + + 000155' 201100 000167' ERNAM: MOVEI TAC1,ERRDEV + 000156' 260140 000333' PUSHJ PDP,MESPNT + 000157' 200100 000423' MOVE TAC1,[POINT 6,@-(PDP)] + 000160' 201000 000006 MOVEI 0,6 + 000161' 134040 000002 ERNAM1: ILDB TAC,TAC1 + 000162' 322040 000166' JUMPE TAC,.+4 + 000163' 271040 000240 ADDI TAC,240 + 000164' 136040 000005 IDPB TAC,DAT + 000165' 367000 000161' SOJG 0,ERNAM1 + 000166' 263140 000000 POPJ PDP, + + 000167' 422132 644606 ERRDEV: ASCIZ /DEVICE / + 000170' 425000 000000 + + INTERNAL DIRERR + + 000171' 262140 000000 DIRERR: POP PDP,0 ;FLUSH RETURN ADDRESS + 000172' 265040 000231' JSP TAC,ERRPTU + 000173' 440700 000176' POINT 7,DIRER1 + 000174' 260140 000155' PUSHJ PDP,ERNAM + 000175' 254000 000207' JRST ERSYC1 + + 000176' 412030 420210 DIRER1: ASCIZ /BAD DIRECTORY FOR / + 000177' 446450 541650 + 000200' 476453 120214 + 000201' 476444 000000 + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 7 +ERRCON MAC 24-APR-78 23:01 8-9-65 + + + ; INTERNAL ERRDIS + + ;ERRDIS: LDB TAC,[POINT 4,DEVCHR(DEVDAT),17] + ; ADDI TAC,ERRC2 + ; SKIPL TAC1,@TAC + ; JRST 4,. + ; TLZ TAC1,400000 + ; MOVEM TAC1,@TAC + ; MOVE PDP,JOBPDP(PROG) + ; MOVE TAC,@TAC + ; HRLI TAC,PROG + ; MOVE TAC,@TAC + ; HLL TAC,1(PDP) + ; PUSH PDP,TAC + ; JRST UXIT + + ;ERRC2: XWD PROG,JOBTRP + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 8 +ERRCON MAC 24-APR-78 23:01 8-9-65 + + + ;UNEXPLAINED ERROR ENTRY + ;CALL: JSP DAT, ERROR + + INTERNAL ERROR + EXTERNAL JOBPD1 + + 000202' 201200 000001 ERROR: MOVEI ITEM,1 ;PRINT ON OPERATORS CONSOLE(JOB 1) + 000203' 265040 000232' JSP TAC,ERRPNT + 000204' 440700 000220' POINT 7,ERR1 + 000205' 550043 777776 HRRZ TAC,-2(PDP) ;GET LOC OF CALL TO ERROR + 000206' 260140 000342' EPOCT: PUSHJ PDP,PCPNT + 000207' 201100 000225' ERSYC1: MOVEI TAC1,ERMS1 + + 000210' 260140 000340' ERSYCL: PUSHJ PDP,MESPC + 000211' 254000 000000* JRST HOLD + + 000212' 260140 000333' EPCAD0: PUSHJ PDP,MESPNT ;PRINT MESS + 000213' 260140 000216' EPCAD1: PUSHJ PDP,EPCAD ;PRINT LAST USER CALL TO MONITOR + 000214' 254000 000211* JRST HOLD + + 000215' 260140 000333' EPCADR: PUSHJ PDP,MESPNT + 000216' 200051 000000* EPCAD: MOVE TAC, JOBPD1(JDAT) ;GET LAST USER UUO CALL + 000217' 364040 000145' SOJA TAC,EPTAD1 + + 000220' 426452 247644 ERR1: ASCIZ /ERROR IN MONITOR AT / + 000221' 202231 620232 + 000222' 476351 152236 + 000223' 511010 152100 + 000224' 000000 000000 + 000225' 355010 554212 ERMS1: ASCIZ /; EXEC CALLED FROM / + 000226' 415010 340630 + 000227' 462130 420214 + 000230' 512371 520000 + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 9 +ERRCON MAC 24-APR-78 23:01 8-9-65 + + + ;ERROR SETUP ROUTINE + ;CALL: MOVE ITEM, JOBNUMBER + ; MOVE DEVDAT, DEVICE DATA BLOCK IF DEVICE ERROR + ; JSP TAC, ERRPNT + ; POINT 7, ERROR MESSAGE + ; RETURN + + + INTERNAL ERRPNT,ERRPTU + + 000231' 200200 000000* ERRPTU: MOVE ITEM,JOB + 000232' 200344 000005* ERRPNT: MOVE PROG,JBTADR(ITEM) + 000233' 200444 000232* MOVE JDAT,JBTADR(ITEM) ;GET ADDRESS OF JOB DATA AREA + 000234' 322440 000240' JUMPE JDAT, ERRPD ;SET UP PDP IN USER AREA IF HE HAS CORE + 000235' 205140 000000* MOVSI PDP, MJOBPD + 000236' 541151 000000* HRRI PDP, JOBPDL(JDAT) + + 000237' 253140 000240' AOBJN PDP, .+1 ;LEAVE ROOM FOR UUO RETURN + 000240' 261140 000005 ERRPD: PUSH PDP, DAT ;SAVE CLALL TO ERROR SUB + 000241' 261140 000006 PUSH PDP, DEVDAT + 000242' 261140 000001 PUSH PDP, TAC ;SAVE RETURN + 000243' 260140 000000* PUSHJ PDP, TTYFND + 000244' 201100 000254' MOVEI TAC1,SYSERR + 000245' 260140 000333' PUSHJ PDP,MESPNT + 000246' 200040 000004 MOVE TAC, ITEM + 000247' 260140 000362' PUSHJ PDP,RADX10 + 000250' 260140 000000* PUSHJ PDP, CRLF ;PRINT CRLF + 000251' 200123 000000 MOVE TAC1, @(PDP) + 000252' 260140 000333' PUSHJ PDP, MESPNT + 000253' 254000 000000* JRST CPOPJ1 + + 000254' SYSERR: ASCIZ / + 000254' 064250 551244 ERROR IN JOB / + 000255' 476444 044634 + 000256' 202251 741100 + 000257' 000000 000000 + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 10 +ERRCON MAC 24-APR-78 23:01 8-9-65 + + + ,ERROR TRAP HANDLING + + ;ERRTRP: LDB TAC,[POINT 4,DEVCHR(DEVDAT),17] + ; ADDI TAC,ERRC2 + ; SKIPG TAC1,@TAC + ; TLO TAC1,400000 + ; MOVEM TAC1,@TAC + ; AOS TAC + ; MOVE PDP,JOBPDP(PROG) + ; AOS TAC + ; MOVE TAC1,1(PDP) + ; PUSH PDP,TAC + ; HLL TAC1,0(PDP) + ; HRLI TAC1,PROG + ; MOVEM TAC,@TAC1 + ; JRST UXIT + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 11 +ERRCON MAC 24-APR-78 23:01 8-9-65 + + + INTERNAL ILLINP + + 000260' 265040 000231' ILLINP: JSP TAC,ERRPTU + 000261' 440700 000270' POINT 7,ILLOT + 000262' 260140 000155' PUSHJ PDP,ERNAM + 000263' 265100 000212' JSP TAC1, EPCAD0 + 000264' 202070 147234 ASCIZ / CANNOT DO INPUT/ + 000265' 476504 042236 + 000266' 202231 650252 + 000267' 520000 000000 + + 000270' 476532 450252 ILLOT: ASCIZ /OUTPUT / + 000271' 521000 000000 + + + INTERNAL ILLINS + + 000272' 265040 000231' ILLINS: JSP TAC,ERRPTU + 000273' 440700 000275' POINT 7,ERRIL + 000274' 254000 000213' JRST EPCAD1 + + 000275' 446311 420222 ERRIL: ASCIZ /ILL INST/ + 000276' 472472 400000 + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 12 +ERRCON MAC 24-APR-78 23:01 8-9-65 + + + INTERNAL ILLMOD + + 000277' 265040 000231' ILLMOD: JSP TAC,ERRPTU + 000300' 440700 000303' POINT 7,ILLMO1 + 000301' 260140 000155' PUSHJ PDP,ERNAM + 000302' 254000 000213' JRST EPCAD1 + + 000303' 446311 420210 ILLMO1: ASCIZ /ILL DEVICE DATA MODE FOR / + 000304' 426551 141612 + 000305' 202110 152202 + 000306' 202331 742212 + 000307' 202151 751100 + 000310' 000000 000000 + + INTERNAL ILLOUT + + 000311' 265040 000231' ILLOUT: JSP TAC,ERRPTU + 000312' 440700 000321' POINT 7,ILLIN + 000313' 260140 000155' PUSHJ PDP,ERNAM + 000314' 265100 000212' JSP TAC1,EPCAD0 + + 000315' 202070 147234 ILM3: ASCIZ / CANNOT DO OUTPUT/ + 000316' 476504 042236 + 000317' 202372 552240 + 000320' 526500 000000 + + 000321' 446352 052650 ILLIN: ASCIZ /INPUT / + 000322' 200000 000000 + INTERNAL IOIERR + + 000323' 265040 000231' IOIERR: JSP TAC,ERRPTU + 000324' 440700 000326' POINT 7,IOIER1 + 000325' 254000 000213' JRST EPCAD1 + + 000326' 446364 052236 IOIER1: ASCIZ /IO TO UNASSIGNED CHANNEL/ + 000327' 202531 640646 + 000330' 516230 747212 + 000331' 421010 344202 + 000332' 472350 546000 + + ,CALL WITH DEST. POINTER IN DAT + ,SOURCE POINTER IN TAC1 + ,MOVES UNTIL A ZERO CHAR. IS FOUND + + INTERNAL MESPNT + 000333' 505100 440700 MESPNT: HRLI TAC1,440700 + 000334' 134040 000002 MES1: ILDB TAC, TAC1 + 000335' 322040 000000* JUMPE TAC,CPOPJ + 000336' 136040 000005 IDPB TAC, DAT + 000337' 254000 000334' JRST MES1 + + ,ANY RADIX PRINT + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 12-1 +ERRCON MAC 24-APR-78 23:01 8-9-65 + + , TAC1 = RADIX + , DAT = BYTE POINTER + , TAC = NUMBER + + INTERNAL OCTPNT, ANYRDX, PCPNT + EXTERNAL UUO0,JOBPD1 + + 000340' 260140 000333' MESPC: PUSHJ PDP, MESPNT ;PRINT LAST USER UUO CALL + 000341' 550051 000216* HRRZ TAC,JOBPD1(JDAT) + 000342' 275040 000001 PCPNT: SUBI TAC,1 + 000343' 404040 777777 AND TAC,-1 + 000344' 201100 000010 OCTPNT: MOVEI TAC1,10 + 000345' 261140 000004 ANYRDX: PUSH PDP,ITEM + 000346' 552100 000004 HRRZM TAC1, ITEM + 000347' 260140 000352' PUSHJ PDP,OCTP1 + 000350' 262140 000004 POP PDP,ITEM + 000351' 263140 000000 POPJ PDP, + + 000352' 230040 000004 OCTP1: IDIV TAC,ITEM + 000353' 506103 000000 HRLM TAC1, (PDP) + 000354' 322040 000356' JUMPE TAC, .+2 + 000355' 260140 000352' PUSHJ PDP, OCTP1 + 000356' 554043 000000 HLRZ TAC, (PDP) + 000357' 271040 000060 ADDI TAC, "0" + 000360' 136040 000005 IDPB TAC, DAT + 000361' 263140 000000 POPJ PDP, + + INTERNAL RADX10 + + 000362' 261140 000002 RADX10: PUSH PDP,TAC1 ;OUTPUT DECIMAL + 000363' 201100 000012 MOVEI TAC1,12 + 000364' 260140 000345' PUSHJ PDP,ANYRDX + 000365' 262140 000002 POP PDP,TAC1 + 000366' 263140 000000 POPJ PDP, + + REPEAT 0,< + PCPNT: SUBI TAC,1 + OCTPNT: HRLZ TAC1,TAC + MOVSI TAC,-1 + LSHC TAC,3 + TRNN TAC,7 + JUMPN TAC1,.-2 + OCTPN1: ADDI TAC,"0" + IDPB TAC,DAT + JUMPGE TAC,CPOPJ + HLLZS TAC + LSHC TAC,3 + JRST OCTPN1 + > + + INTERNAL UTBKER + 000367' 135200 000027* UTBKER: LDB ITEM,PJOBN ;JOB NUMBER + 000370' 265040 000232' JSP TAC,ERRPNT + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 12-2 +ERRCON MAC 24-APR-78 23:01 8-9-65 + + 000371' 440700 000401' POINT 7,UTERM + 000372' 200040 000000* MOVE TAC,UBUF + 000373' 275047 000000 SUBI TAC,(PROG) + 000374' 260140 000344' PUSHJ PDP,OCTPNT + 000375' 201100 000424' MOVEI TAC1, [ASCII / /] + 000376' 260140 000333' PUSHJ PDP, MESPNT + 000377' 260140 000155' PUSHJ PDP,ERNAM + 000400' 254000 000035' JRST ADRER2 + + 000401' 446311 420210 UTERM: ASCIZ /ILL DT BLOCK NO. , BUFFER AT / + 000402' 521010 246236 + 000403' 416264 047236 + 000404' 271005 420204 + 000405' 526150 642644 + 000406' 202032 420000 + + INTERNAL UUOERR + EXTERNAL UUO0 + + 000407' 265040 000231' UUOERR: JSP TAC,ERRPTU + 000410' 440700 000416' POINT 7,UUOER1 + 000411' 200040 000000* MOVE TAC, UUO0 ;UUO PC + 000412' 603040 010000 TLNE TAC, 10000 ;WAS IT FROM USER? + 000413' 254000 000213' JRST EPCAD1 ;YES, JUST PRINT LOC OF CALL + 000414' 260140 000145' PUSHJ PDP,EPTAD1 ;NO, PRINT BOTH EXEC CALL + 000415' 254000 000207' JRST ERSYC1 ;AND USER CALL + + 000416' 446311 420240 UUOER1: ASCIZ /ILL PROG. OP. USED/ + 000417' 512370 727100 + 000420' 476405 620252 + 000421' 516130 400000 + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000425 + +9K CORE USED + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 13 +ERRCON MAC 24-APR-78 23:01 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADRCK 000000' INT +ADRER2 000035' +ADRERI 000027' +ADRERR 000014' INT +AERM1 000023' +AERM3 000045' +AL 000001 INT +ANYRDX 000345' INT +APM1 000070' +APM2 000073' +APM3 000106' +APM4 000134' +APMSYS 000136' +APMUSR 000141' +APR 000000 SPD +APRCHL 000144' EXT +APRCHN 000051' EXT +APRDMS 000132' +APRIL1 000062' +APRILM 000051' INT +APRJRS 000064' +APRNXM 000100' +APRPDL 000111' +APRRET 000121' EXT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CPOPJ 000335' EXT +CPOPJ1 000253' EXT +CRLF 000250' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT + + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 13-1 +ERRCON MAC 24-APR-78 23:01 SYMBOL TABLE + +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DIRER1 000176' +DIRERR 000171' INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +EPCAD 000216' +EPCAD0 000212' +EPCAD1 000213' +EPCADR 000215' +EPOCT 000206' +EPTAD1 000145' +EPTADR 000144' +ERMS1 000225' +ERNAM 000155' INT +ERNAM1 000161' +ERR1 000220' +ERRDEV 000167' +ERRIL 000275' +ERROR 000202' INT +ERRPD 000240' +ERRPNT 000232' INT +ERRPTU 000231' INT +ERSYC1 000207' +ERSYCL 000210' +HOLD 000214' EXT +HOLDI 000044' EXT +HOLDI1 000133' EXT +I 000010 INT + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 13-2 +ERRCON MAC 24-APR-78 23:01 SYMBOL TABLE + +IB 000013 INT +IBUFB 200000 INT +ILLIN 000321' +ILLINP 000260' INT +ILLINS 000272' INT +ILLMO1 000303' +ILLMOD 000277' INT +ILLOT 000270' +ILLOUT 000311' INT +ILM 020000 +ILM3 000315' +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIER1 000326' +IOIERR 000323' INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000233' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000231' EXT +JOBADR 000015' EXT +JOBPD1 000341' EXT +JOBPDL 000236' EXT +JOBPDP 000000 EXT +JOBPFI 000006' EXT + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS MACRO 10 05:51 24-APR-78 PAGE 13-3 +ERRCON MAC 24-APR-78 23:01 SYMBOL TABLE + +JOBREL 000000 EXT +JOBTRP 000000 EXT +LOOKB 040000 INT +MES1 000334' +MESPC 000340' +MESPNT 000333' INT +MJOBPD 000235' EXT +MTW 010000 INT +NXM 010000 +OBUFB 100000 INT +OCTP1 000352' +OCTPNT 000344' INT +OUTPB 004000 INT +PCPNT 000342' INT +PDLOV 000122' +PDP 000003 INT +PICHN 000100 INT +PJOBN 000367' EXT +POVC 400000 +POVF 200000 +PROG 000007 INT +RADX10 000362' INT +RUN 200000 INT +RUNABL 204000 INT +SYSERR 000254' +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYCTR 000000 EXT +TTYFND 000243' EXT +TTYSTR 000000 EXT +TTYUSE 010000 INT +UBUF 000372' EXT +USRMOD 010000 INT +USRPDP 000000 EXT +USRPOV 000115' EXT +USRREL 000056' EXT +UTBKER 000367' INT +UTERM 000401' +UUO 000014 INT +UUO0 000411' EXT +UUOER1 000416' +UUOERR 000407' INT +UXIT 000000 EXT +WAIT1 000000 EXT + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC OOOOOOOOO NNN NNN TTTTTTTTTTTTTTT + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC OOOOOOOOO NNN NNN TTTTTTTTTTTTTTT + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC OOOOOOOOO NNN NNN TTTTTTTTTTTTTTT + III OOO OOO CCC OOO OOO NNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNN TTT + III OOO OOO CCC OOO OOO NNNNNN NNN TTT + III OOO OOO CCC OOO OOO NNNNNN NNN TTT + III OOO OOO CCC OOO OOO NNNNNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNNNNN TTT + III OOO OOO CCC OOO OOO NNN NNNNNN TTT + III OOO OOO CCC OOO OOO NNN NNNNNN TTT + III OOO OOO CCC OOO OOO NNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNN TTT + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC OOOOOOOOO NNN NNN TTT + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC OOOOOOOOO NNN NNN TTT + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC OOOOOOOOO NNN NNN TTT + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :IOCONT.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:33 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1874 +File will be deleted after printing + +IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 8-9-95 + + XLIST + LIST + TITLE IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS + SUBTTL 8-9-95 + EXTERNAL BUFCLC,ERROR,IOSETC,IOIERR,BUFCLR + EXTERNAL SETBYT,UINTQ,WAIT1,WSYNC,ADRCK + EXTERNAL UXIT,USRJDA,JOBJDA,ILLMOD,PUUOAC,PIOMOD + EXTERNAL JOB,ASSIN,PJOBN,ADRERR,USRREL,CUXIT1,CUXIT2 + EXTERNAL SETIOS + + ;FOR PURPOSES OF COMMENTING THIS SUBROUTINE THE + ;TERM BUFFER HEADER SHALL REFER TO THE 3 WORD HEADER + ;WHICH IS USED BY THE USER PROGRAM AND THIS EXEC FOR + ;REFERING TO THE RING BUFFERS. + + ;THE CONTENTS OF THE 3 WORD HEADER (AS SET BY THE MONITOR FOR THE USE + ; FROM USERS PROGRAM BY AN INPUT OR AN OUTPUT UUO + ; WORD 2: BYTE POINTER TO CURRENT ITEM. + ; WORD 3: POSITIVE ITEM COUNT (NO. OF ITEMS LEFT ON + ; INPUT, NO. OF FREE ITEMS TO GO ON OUTPUT). + + ;EACH BUFFER IN THE RING HAS FOLLOWING FORMAT (AS THE USER SEES IT) + + ; WORD 1: RESERVED FOR BLOCK NUMBER FOR FIXED ADDRESS DEVIC + ; WORD 2: BIT 0=USE BIT FOR THIS BUFFER + ; BIT 1-17=NO. OF WORDS WHICH FOLLOW (LENGTH OF BUF + ; BIT 18-35=ADDRESS OF SECOND WORD OF NEXT BUFFER I + ; WORD 3: LH=LINK TO NEXT BLOCK (SET BY MONITOR FOR DECTAB + ; RH=NO. OF WORDS OF DATA WHICH FOLLOW (USUALLY + ; SET BY EXEC EXCEPT TO COMPUTE WORD COUNT + ; THAT HE WANTS TO COMPUTE WORD COUNT + ; HIMSELF INSTEAD OF HAVING THE MONITOR DO IT + ; USING THE BYTE POINTER IN THE 3 WORD HEADER). + + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 2 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + ,H. R. MORSE 2/21/65 + ,CALLING SEQUENCE + , CLOSE D, + , EXIT ALWAYS RETURNS HERE + , THIS ROUTINE PROCESSES THE CLOSE UUO AND DETERMINES WHETHER THE + ,OUTPUT ROUTINE SHOULD BE CALLED IF OUTPUT WERE ACTIVE, CLEARS + ,THE INPUT BUFFER AREA IF INPUT WERE ACTIVE, AND CLEARS THE + ,ITEM COUNTS OF BOTH INPUT AND OUTPUT HEADERS SERVING TO BOTH + ,TERMINATE THE USE OF THE DEVICE AND SET THE I/O ROUTINES TO + ,ACCEPT ANOTHER INPUT OR OUTPUT COMMAND IN A CLEAR STATE. + ,IN THE CASE OF OUTPUT DEVICES. THE CLOSE ROUTINE OF THE DEVICE HANDL + ,ING ROUTINE IS CALLED IN CASE ANY SPECIAL HANDLING IS REQUIRED. + ,MONITOR INTERFACE + , STORAGE: 30 + , ROUTINES CALLED: DCL, WAIT1, UXIT + , SYMBOLS SET/USED: + , ACCUMULATORS: DAT S/U PROG U + , DEVDAT U TAC S/U + , IOS S/U TAC1 S/U + , PDP U + , DEVICE DATA BLOCK: DEVBUF U + , DEVIOS S/U + , DEVSER U + , IO STATUS WORD: IOACT S IODTER S + , IOBEG S IOEND S + , IOBKTL 2 IOFST S + , IODEND S IOIMPM S + , IODERR S IOSTRT S + , IODISC S IOW S + , JOB BUFFER AREA: IOUSE S + , JBFCTR S + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 3 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + INTERNAL CLOSE1 + + 000000' 663300 002000 CLOSE1: TLOE DEVDAT,CLOSB ;HAS A CLOSE ALREADY BEEN DONE? + 000001' 254000 000000* JRST UXIT ;YES, FOR THIS CHANNEL + 000002' 135040 000000* LDB TAC,PUUOAC ;USER DEVICE CHANNEL NO. + 000003' 502301 000000* HLLM DEVDAT,USRJDA(TAC) + 000004' 261140 000005 PUSH PDP,DAT + 000005' 135040 000000* LDB TAC,PIOMOD + 000006' 305040 000016 CAIGE TAC,DR + 000007' 254000 000013' JRST UCLS4 + 000010' 200046 000003 MOVE TAC,DEVSER(DEVDAT) + 000011' 260141 000001 PUSHJ PDP,DCL(TAC) + 000012' 254000 000060' JRST UCLS3 + 000013' 260140 000000* UCLS4: PUSHJ PDP,WAIT1; WAIT UNTIL DEVICE IS INACTIVE. + 000014' 606600 000002 TRNN UUO,CLSIN ;SUPPRESS INPUT? + 000015' 607300 200000 TLNN DEVDAT,IBUFB ;NO, WAS INPUT BUFFER SPECIFIED? + 000016' 254000 000041' JRST UCLS2 ;NO + 000017' 550106 000006 HRRZ TAC1,DEVBUF(DEVDAT) + 000020' 505100 000007 HRLI TAC1,PROG + 000021' 550260 000002 HRRZ DAT,@TAC1 ;FIRST WORD OF 3 WORD BUFFER HEADER + 000022' 540120 000002 HRR TAC1,@TAC1 ;REMEMBER CURRENT BUFFER IN TAC1 + 000023' 515040 400000 HRLZI TAC,IOUSE ;USER BOTH FOR HEADER AND EACH BUFFER + 000024' 322240 000034' JUMPE DAT,UCLS1 ;HAS A RING BEEN SETUP?(NO IF 0) + 000025' 505240 000007 HRLI DAT,PROG ;YES + 000026' 540260 000005 UCLS0: HRR DAT,@DAT; ADVANCE CURRENT INPUT BUFFER ADDRESS + ADRCHK DAT ;IS ADDRESS OF? + 000027' 260140 000000* PUSHJ PDP,ADRCK + 000030' 550040 000005 HRRZ TAC,DAT + 000031' 412060 000005 ANDCAM TAC,@DAT ;YES, CLEAR USE BIT. + 000032' 312100 000005 CAME TAC1,DAT; DONE? + 000033' 254000 000026' JRST UCLS0 + 000034' 505240 000007 UCLS1: HRLI DAT,PROG + 000035' 540246 000006 HRR DAT,DEVBUF(DEVDAT) + 000036' 436060 000005 IORM TAC,@DAT ;FLAG AS VIRGIN BUFFER IN 3 WORD HEADER + 000037' 271240 000002 ADDI DAT,2; JBFCTR:=0 + 000040' 402020 000005 SETZM @DAT ;CLEAR INPUT ITEM COUNT. + 000041' 606600 000001 UCLS2: TRNN UUO,CLSOUT ;SUPPRESS OUTPUT? + 000042' 607300 100000 TLNN DEVDAT,OBUFB ;NO.WAS OUPUT BUFFER SPECIFIED? + 000043' 254000 000060' JRST UCLS3 ;NO + 000044' 544246 000006 HLR DAT, DEVBUF(DEVDAT) ;VIRGIN OUBPUT BUFFER? + 000045' 505240 000007 HRLI DAT, PROG + 000046' 337020 000005 SKIPG @DAT + 000047' 254000 000060' JRST UCLS3 ;YES + 000050' 200046 000003 MOVE TAC,DEVSER(DEVDAT) + 000051' 260141 000001 PUSHJ PDP,DCL(TAC); CLOSE OUTPUT BUFFER + 000052' 544246 000006 HLR DAT,DEVBUF(DEVDAT) + 000053' 505240 000007 HRLI DAT,PROG + 000054' 515040 400000 HRLZI TAC,IOUSE + 000055' 436060 000005 IORM TAC,@DAT + 000056' 271240 000002 ADDI DAT,2 + 000057' 402020 000005 SETZM @DAT; JBFCTR:=0 + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 3-1 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + 000060' 260140 000013* UCLS3: PUSHJ PDP,WAIT1 + 000061' 262140 000005 POP PDP,DAT + 000062' 630000 000471' TDZ IOS,[XWD IOEND,IODEND] + 000063' 661000 000002 TLO IOS,IOBEG + 000064' 202006 000002 MOVEM IOS,DEVIOS(DEVDAT); IODISC:=0 + 000065' 254000 000001* JRST UXIT; EXIT THIS UUO + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 4 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + ,DEC 06 00 EX UUO L PT PRE 02 INBUF,OUTBUF + ,H. R. MORSE 64-12-26 + ,CALLING SEQUENCE + , INBUF D,N + , EXIT RETURNS HERE IF MEMORY NOT EXCEEDED + ,CALLING SEQUENCE + , OUTBUF D,N + , EXIT RETURNS HERE IF MEMORY NOT EXCEEDED + , SETS UP AN N BUFFER RING FOLLOWING THE USERS PROGRAM FOR DEVICE + , D AND INITIALIZES THE JOB BUFFER AREA HEADER: + , JBFADR0:=1, JBFADR 1-17:=0 + , JBFADR 18-35:=ADDRESS OF FIRST BUFFER IN RING + ,INPUT SETS DEVIAD:=ADDRESS OF FIRST BUFFER IN RING + ,OUTPUT SET DEVOAD:=ADDRESS OF FIRST BUFFER IN RING + ,BUFPNT IS RESTORED. + ,MONITOR INTERFACE + , STORAGE:13 + , ROUTINES CALLED: BUFCLC, UXIT + , SYMBOLS SET/USED: + , ACCUMULATORS: BUFPNT S/U PROG U + , DEVDAT U TAC S/U + , PDP U TAC1 S/U + , DEVICE DATA BLOCK: DEVBUF U + , DEVIAD S + , DEVOAD S + , JOB BUFFER AREA: JBFADR S + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 5 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + INTERN UINBF, UOUTBF + + 000066' 261140 000012 UOUTBF: PUSH PDP,BUFPNT; SAVE BUFPNT ON STACK + 000067' 260140 000000* PUSHJ PDP,BUFCLC; SET UP BUFFER RIGH + 000070' 544046 000006 HLR TAC,DEVBUF(DEVDAT);TAC:=OUTPUT BUFFER AREA HEADER ADDRE + 000071' 542506 000010 HRRM BUFPNT,DEVOAD(DEVDAT);DEVOAD:=ADDRESS OF FIRST BUFFER + , IN RING + 000072' 505040 000007 UOBF1: HRLI TAC,PROG; RELOCATE BUFFER AREA HEADER ADDRESS + 000073' 202520 000001 MOVEM BUFPNT,@TAC; JBFADR:=IOUSE,ADDRESS OF FIRST BUFFER + , IN RING + 000074' 262140 000012 POP PDP,BUFPNT; RESTORE BUFPNT FROM STACK + 000075' 254000 000065* JRST UXIT; EXIT THIS UUO + 000076' 261140 000012 UINBF: PUSH PDP,BUFPNT; SAVE BUFPNT ON STACK + 000077' 260140 000067* PUSHJ PDP,BUFCLC; SET UP BUFFER RING + 000100' 542506 000007 HRRM BUFPNT,DEVIAD(DEVDAT); DEVIAD:=ADDRESS OF FIRST BUFFER + , IN RING + 000101' 540046 000006 HRR TAC,DEVBUF(DEVDAT); TAC:=INPUT BUFFER AREA HEADER ADDRE + 000102' 254000 000072' JRST UOBF1 + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 6 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + ,DEC 06 00 EX UUO L PT PRE 03 INIT + ,H. R. MORSE AND D. A. WITCRAFT 2/21/65 + ,CALLING SEQUENCE + , INIT D,MODUS D=JOB DEVICE CHANNEL + , MODUS=IORDEL,IOCON,IOWC,MODE. + , SIXBIT/NAME/ DEVICE NAME + , XWD OBUF,IBUF BUFFER AREA HEADER ADDRESS + , EXIT1 DEVICE NOT AVAILABLE + , EXIT2 DEVICE PROPERLY AVAILABLE + ,THE LEFT HALF OF NAME CONTAINS THE THREE LETTER DEVICE MNEMONIC, + , THE RIGHT HALF IS EITHER ZOER (SYSTEM WILL ASSIGN AN ARBITRARY + , UNIT) OR NON-ZERO TO REQUEST A SPECIFIC UNIT (LEFT JUSTIFIED). + ,IF THE SELECTED DEVICE IS NOT AVAILABLE. CONTROL RETURNS TO EXIT1. + ,OTHERWISE, THE DEVICE IS ASSIGNED TO THE USER AND ATTACHED TO HIS + ,CHANNEL D. THE DEVICE IS INITIALIZED IN THE FOLLOWING MANNER AFTER + ,IOACT IS ZERO: + , IOBEG:=1 + , DATA MODE:=BITS 32-35 OF AC UUO + , IOCON:=BIT 31 OF AC UUO + , IOWC:=BIT 40 OF AC UUO + , IORDEL:=BIT 29 OF AC UUO + , IOACT:=IODEND:=IOBKTL:=IODTER:=IODERR:=IOIMPM:=0 + , JBFADR:=JBFCTR:=0 FOR THE SPECIFIED BUFFERS. + , DEVBUF:=OBUF,IBUF + ,MONITOR INTERFACE + , STORAGE: 20 + , ROUTINES CALLED: UINTQ, ASSIGN(UASG1),USEL,UINITZ,UXIT + , SYMBOLS SET/USED: + , ACCUMULATORS: DEVDAT U + , PDP U TAC U + , PROG U TAC1 S/U + , DEVICE DATA BLOCK: DEVBUF S + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 7 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + INTERN UINIT,UINIT1 + 000103' 135040 000002* UINIT: LDB TAC,PUUOAC ;USER DEVICE CHANNEL NO. + 000104' 332301 000003* SKIPE DEVDAT,USRJDA(TAC) ;IS A DEVICE ALREADY HERE? + 000105' 260140 000426' PUSHJ PDP,RELEA0 ;YES, RELEASE IT + 000106' 200600 000040 MOVE UUO,40 ;RESTORE AC UUO FROM LOC 40 + 000107' 260140 000000* PUSHJ PDP,UINTQ ;GET SIXBIT DEVICE NAME FROM USER + 000110' 350003 000000 AOS (PDP) + 000111' 200200 000000* UINIT1: MOVE ITEM,JOB ;CALLED BY SAVGET + 000112' 260140 000000* PUSHJ PDP,ASSIN; TRY TO ASSIGN DEVICE + 000113' 254000 000000* JRST CUXIT1; NOT AVAILABLE + 000114' 135040 000103* LDB TAC,PUUOAC + 000115' 552301 000104* HRRZM DEVDAT,USRJDA(TAC) ;STORE DDB ADR IN DEVICE TABL + 000116' 515040 000002 HRLZI TAC,IOBEG + 000117' 202046 000002 MOVEM TAC,DEVIOS(DEVDAT) + 000120' 260140 000000* PUSHJ PDP,SETIOS ;SET DDB IOS STATUS WORD + ;FROM RT. HALF OF UUO + 000121' 260140 000107* PUSHJ PDP,UINTQ + 000122' 505300 400000 HRLI DEVDAT, INITB ;SET INIT UUO BIT + 000123' 607040 777777 TLNN TAC,-1 + 000124' 254000 000127' JRST UINIT4 ;OUTPUT NOT SPECIFIED + 000125' 502046 000006 HLLM TAC,DEVBUF(DEVDAT) + 000126' 661300 100000 TLO DEVDAT,OBUFB ;SET OUTPUT BUFFER SPECIFIED BIT + 000127' 606040 777777 UINIT4: TRNN TAC,-1; IS IBUF SPECIFIED? + 000130' 254000 000133' JRST UINIT5 ;INPUT BUF NOT SPECIFIED + 000131' 542046 000006 HRRM TAC,DEVBUF(DEVDAT); DEVBUF 18-35:=IBUF + 000132' 661300 200000 TLO DEVDAT,IBUFB ;SET INPUT BUFFER SPECIFIED BIT + 000133' 550100 000001 UINIT5: HRRZ TAC1,TAC; TAC1:=PROG,IBUF + 000134' 260140 000142' PUSHJ PDP,UINITZ; JBFADR:=JBFCTR:=0 FOR IBUF + 000135' 544100 000001 HLR TAC1,TAC; TAC1:=PROG,OBUF + 000136' 260140 000142' PUSHJ PDP,UINITZ; JBFADR:=JBFCTR:=0 FOR OBUF + 000137' 135040 000114* LDB TAC,PUUOAC ;STORE UUO BITS FOR THIS CHANNEL + 000140' 502301 000115* HLLM DEVDAT,USRJDA(TAC) + 000141' 254000 000000* JRST CUXIT2 + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 8 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + ,DEC 06 00 EX COM L PT PRE 03 UINITZ + ,H. R. MORSE 64-12-26 + ,CALLING SEQUENCE + , PUSHJ PDP,UINITZ + , EXIT RETURNS HERE IF MEMORY NOT EXCEEDED. + ,SETS JBFADR:=JBFCTR:=0 FOR THE BUFFER AREA HEADER WHOSE ADDRESS + ,IS IN AC TAC1. ALSO,JBFPTR 0-5:=JBFPTR 12-17:=0,JBFPTR 6-11:=BYTE S + ,MONITOR INTERFACE + , STORAGE:15 + , ROUTINES CALLED: ADRCK, SETBYT + , SYMBOLS SET/USED: + , ACCUMULATORS: PDP U TAC S/U + , TAC1 S/U + , JOB BUFFER AREA: JBFADR S + , JBFCTR S + , JBFPTR S + INTERN UINITZ + + 000142' 606100 777777 UINITZ: TRNN TAC1,-1; IS BUFFER SPECIFIED? + 000143' 263140 000000 POPJ PDP,;RETURN + 000144' 505100 000007 HRLI TAC1,PROG + 000145' 260140 000027* PUSHJ PDP,ADRCK ;CHECK 3 WORD BUFFER HEADER + 000146' 551042 000002 HRRZI TAC,2(TAC1) + 000147' 402020 000002 SETZM @TAC1; JBFADR:=0 + 000150' 350000 000002 AOS TAC1 + 000151' 261140 000001 PUSH PDP,TAC + 000152' 261140 000002 PUSH PDP,TAC1 + 000153' 350000 000002 AOS TAC1 + 000154' 402020 000002 SETZM @TAC1; JBFCTR:=0 + 000155' 260140 000000* PUSHJ PDP,SETBYT; JBFPTR 6-11:=BYTE SIZE + 000156' 621040 770077 TLZ TAC,770077 + 000157' 262140 000002 POP PDP,TAC1 + 000160' 502060 000002 HLLM TAC,@TAC1 + 000161' 262140 000001 POP PDP,TAC + 000162' 263140 000000 POPJ PDP,; RETURN + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 9 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + INTERNAL IN + 000163' 603000 000020 IN: TLNE IOS,IO ;IS THIS DEVICE ALREADY DOING OUTPUT! + 000164' 260140 000060* PUSHJ PDP,WAIT1 ;YES,WAIT TILL IT IS FINISHED + 000165' 135040 000137* LDB TAC,PUUOAC ;SET BIT THAT SAYS AN INPUT UUO HAS OCC + 000166' 661300 010000 TLO DEVDAT,INPB ;FOR THIS DEVICE + 000167' 502301 000140* HLLM DEVDAT,USRJDA(TAC) ;IN LH OF CURRENT JOB DEVICE + 000170' 135040 000005* LDB TAC,PIOMOD ;IO MODE + 000171' 301040 000016 CAIL TAC,DR ;IS THE IO MODE DUMP MODE? + 000172' 254000 000271' JRST INDMP ;YES + 000173' 540246 000006 IN1: HRR JBUF,DEVBUF(DEVDAT) ;NO, GET ADDRESS OF R WORD BU + 000174' 515040 400000 HRLZI TAC,IOUSE ;BUFFER INUSE BIT + 000175' 505240 000007 HRLI JBUF,PROG ;SET INDEX FIELD FOR RELOCATION USING A + 000176' 260140 000145* PUSHJ PDP,ADRCK ;CHECK BUFFER HEADER + 000177' 551045 000002 HRRZI TAC,2(JBUF) ;END ADDRESS OF 3 WORD HEADER + 000200' 200120 000005 MOVE TAC1,@JBUF ;GET WORD 1 OF 3 WORD BUFFER HEADER (PO + 000201' 505100 000007 HRLI TAC1,PROG ;SET INDEX FIELD COR RELOCATION USING A + 000202' 337020 000005 SKIPG @JBUF ;HAS A BUFFER RING BEEN SET UP (RH NON- + ;WHICH HAS BEEN REFERENCED BY PREVIOUS + 000203' 254000 000256' JRST INPUTF ;NO, GO SET UP BUFFER IF NECESSARY AND + ADRCHK TAC1 ;YES, CHECK ADDRESS TO SEE IF IN BOUNDS + 000204' 260140 000176* PUSHJ PDP,ADRCK + 000205' 550040 000002 HRRZ TAC,TAC1 + 000206' 413060 000002 ANDCAB TAC,@TAC1 ;FLAG THIS BUFFER AS BEING FILLED (USE + ;AND GET POINTER TO NEXT BUFFER + 000207' 542060 000005 HRRM TAC,@JBUF ;SET WORD 1 IN 3 WORD HEADER TO NEXT BU + ADRCHK TAC ;AND CHECK ITS ADDRESS TO SEE IF IN BOUNDS + 000210' 260140 000204* PUSHJ PDP,ADRCK + 000211' 550040 000001 HRRZ TAC,TAC + 000212' 200006 000002 INPUT0: MOVE IOS,DEVIOS(DEVDAT) ;GET IO STATUS WORD + 000213' 606000 010000 TRNN IOS,IOACT ;IS THE DEVICE ALREADY ACTIVE (FILLING + 000214' 254000 000220' JRST INPT0B ;NO. + 000215' 606000 000040 TRNN IOS,IOCON ;DOES THE USER WANT TO STOP AFTER EVERY + 000216' 254000 000224' JRST INPT0C ;NO. HE WANTS NORMAL CONTINUOUS OVERLAP + 000217' 260140 000000* PUSHJ PDP,WSYNC ;YES, WAIT TILL DEVICE FINISHES WITH ON + 000220' 505040 000007 INPT0B: HRLI TAC,PROG ;SET FOR RELOCATION + 000221' 540060 000001 HRR TAC,@TAC ;GET POINTER 1 BLOCK AHEAD OF NEXT BBUF + 000222' 331020 000001 SKIPL @TAC + 000223' 260140 000276' PUSHJ PDP,CALIN + 000224' 540120 000002 INPT0C: HRR TAC1,@TAC1 + 000225' 335020 000002 INPT0A: SKIPGE @TAC1 + 000226' 254000 000236' JRST INPUT2 + 000227' 260140 000217* INPUT1: PUSHJ PDP,WSYNC + 000230' 335020 000002 SKIPGE @TAC1 + 000231' 254000 000236' JRST INPUT2 + 000232' 612000 000472' TDNE IOS,[XWD IOEND,IODERR] + 000233' 254000 000250' JRST INEOF + 000234' 200006 000002 MOVE IOS,DEVIOS(DEVDAT) + 000235' 254000 000227' JRST INPUT1 + + 000236' 271100 000001 INPUT2: ADDI TAC1,1 + 000237' 550220 000002 HRRZ ITEM,@TAC1 + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 9-1 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + 000240' 275100 000001 SUBI TAC1,1 + 000241' 261140 000004 PUSH PDP,ITEM ;SAVE WORD COUNT AS STORED BY IO SERVIC + 000242' 260140 000000* PUSHJ PDP,IOSETC + 000243' 262140 000004 POP PDP,ITEM + 000244' 135040 000170* LDB TAC,PIOMOD ;GET DEVICE DATA MODE + 000245' 306040 000010 CAIN TAC, I ;IMAGE MODE? + 000246' 202220 000005 MOVEM ITEM,@JBUF ;YES, STORE WORD COUNT NOT ITEM COUNT + 000247' 254000 000075* JRST UXIT + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 10 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + 000250' 551000 020000 INEOF: HRRZI IOS,IODEND + 000251' 436006 000002 IORM IOS,DEVIOS(DEVDAT) + 000252' 254000 000247* JRST UXIT + + 000253' 540100 000014 INPUTA: HRR TAC1,UUO + 000254' 412060 000002 ANDCAM TAC,@TAC1 + 000255' 254000 000212' JRST INPUT0 + + ;HERE ON FIRST INPUT AFTER INIT, INIT & LOOKUP, OR INIT & LOOKUP & IN + 000256' 412060 000005 INPUTF: ANDCAM TAC,@JBUF ;MARK THAT BUFFERS HAVE BEEN REFERENCED + 000257' 540060 000005 HRR TAC,@JBUF ;PICKUP ADDRESS OF FIRST BUFFERE IN RING + 000260' 542046 000007 HRRM TAC,DEVIAD(DEVDAT) ;SET CURRENT RING BUFFER ADDR + ;IN DEVICE DATA BLOCK + 000261' 336020 000005 SKIPN @JBUF ;HAS A RING BEEN SET UP YET? + 000262' 254000 000265' JRST INPUT3 ;NO, GO SET UP A 2 BUFFER RING + 000263' 260140 000276' PUSHJ PDP,CALIN ;YES, GO START TO SERVICE ROUTINE + ;FILLING BUFFER + 000264' 254000 000225' JRST INPT0A + 000265' 541600 000002 INPUT3: HRRI UUO,2 ;BUFFERS NOT SETUP YET. + ;SET UP 2 + 000266' 260140 000076' PUSHJ PDP, UINBF + 000267' 513000 000014 HLLZS UUO ;CLEAR RIGHT HALF + 000270' 254000 000173' JRST IN1 + + 000271' 260140 000227* INDMP: PUSHJ PDP,WSYNC + 000272' 200046 000003 MOVE TAC,DEVSER(DEVDAT) + 000273' 260141 000007 PUSHJ PDP,DDI(TAC) + 000274' 260140 000164* PUSHJ PDP,WAIT1 + 000275' 254000 000252* JRST UXIT + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 11 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + + + 000276' 603000 000040 CALIN: TLNE IOS,IOEND + 000277' 263140 000000 POPJ PDP, + 000300' 260140 000271* PUSHJ PDP,WSYNC + 000301' 261140 000002 PUSH PDP,TAC1 + 000302' 200046 000003 MOVE TAC,DEVSER(DEVDAT) + 000303' 260141 000003 PUSHJ PDP,DIN(TAC) + 000304' 262140 000002 POP PDP,TAC1 + 000305' 263140 000000 POPJ PDP, + + + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 12 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + ,DEC 06 00 EX COM L PT PRE 03 OUTPUT + ,H.R. MORSE 2/21/65 + ,CALLING SEQUENCE + , OUTPUT D, + , EXIT + ,OR + , OUTPUT D, ADR + , EXIT + + ,IF INPUT IS ACTIVE, WAIT FOR IT TO COMPLETE. + ,IF DUMP MODE WAS SELECTED BY THE LAST INIT UUO., THEN A CHECK IS MADE + , TO SEE IF DUMP FILES ARE LEGAL FOR THIS DEVICE. IF DUMP FILES AR + , NOT LEGAL. (IORET=0) AN ERROR MESSAGE IS PRINTED ON THE TTY AND + , CONTROL IS TRANSFERRED T THE COMMAND INPUT ROUTINE. + , OTHERWISE,THE PROGRAM WAITS UNTIL THE DEVICE IS INACTIVE AND THEN + , WRITES THE DUMPFILE AND RETURNS CONTROL TO THE USERS PROGRAM + ,IF THE MODE IS NOT DUMP, THEN + ,1) IF ADR IS NOT ZERO, WAIT FOR DEVICE TO BECOME INACTIVE THEN SET T + , CURRENT BUFFER ADDRESS EQUAL TO ADR AND AN INDICATOR (JBFADR0) + , SPECIFYING THAT THIS BUFFER RING HAS NEVER BEEN REFERENCED FROM T + , USERS PROGRAM BY AN INPUT OR AN OUTPUT UUO. OTHERWISE, GO TO + , 2) DIRECTLY. + + ,2) IF THE BUFFER RING HAS NEVER BEEN REFERENCED (JBFADR0=1), THE + , BUFFER IS CLEARED. IOUSE SET TO ZERO AND + , IF THE CURRENT BUFFER ADDRESS IS ZERO, A TWO BUFFER RING IS SE + , THE GO TO 8 + , + ,3) IF THE BUFFER RING HAS BEEN REFERENCED (JBFADR0=0 ,THEN A C + , MADE TO DETERMINE IF THE WORD COUNT IS TO BE COMPUTED. + , IF THE WORD COUNT IS TO BE COMPUTED (IOWC=0), IT IS SET EQUAL + , TO THE ADDRESS FOR THE LAST DATA WORD MINUS THE ADDRESS OF THE + , BUFFER MINUS ONE, + + ,4) IOUSE IS SET TO ONE. INDICATING THAT THE BUFFER IS FULL OR BEING + , EMPTIED, AND THE CURRENT BUFFER ADDRESS IS ADVANCED. + + ,5) IF THE DEVICE IS NOT ACTIVE (IOACT=0), OUTPUT IS STARTED. + ,6) IF THE CURRENT BUFFER IS FULL OR BEING EMPTIED (IOUSE=1), + , THE PROGRAM WAITS UNTIL THE DEVICE IS INACTIVE + ,7) THE CURRENT BUFFER IS CLEARED. + ,8) THE ITEM POINTER IS INITIATED TO THE CURRENT BUFFER ADDRESS+1 + , AND THE ITEM COUNT IS SET TO THE PRODUCT OF THE BUFFER SIZE + , MINUS ONE AND THE INTEGER PART OF 36/BYTE SIZE. + ,9) RETURN TO THE USERS PROGRAM + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 13 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + ,MONITOR INTERFACE + , STORAGE: 54 + , ROUTINE CALLED: ADRCK, BUFCLR, CALOUT, INOUT, IOSETC, OUTA, + , OUTBUF, UXIT, WSYNC, + , SYMBOLS SET/USED: + , ACCUMULATORS: DEVDAT U PROG U + , IOS U TAC S/U + , ITEM S/U TAC1 S/U + , JBUF S/U UUO S + , PDP U + , DEVICE DATA BLOCK: DEVBUF U DEVOAD S + , IO STATUS WORD: IOACT U + , IOWC U + , JOB BUFFER AREA: JBADR S/U + , JBFCTR S + , JBPPTR S/U + , BUFFER SIZE U + , IOUSE S/U + , WORD COUNT S + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 14 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + + INTERN OUT + + 000306' 607000 000020 OUT: TLNN IOS,IO ;IS THIS DEVICE ALREADY DOING INPUT? + 000307' 260140 000274* PUSHJ PDP,WAIT1 ;YES, WAIT TILL IT BECOMES INACTIVE + 000310' 135040 000165* LDB TAC,PUUOAC + 000311' 661301 000167* TLO DEVDAT,OUTPB + HLLM DEVDAT,USRJDA(TAC) + 000312' 135040 000244* LDB TAC,PIOMOD + 000313' 301040 000016 CAIL TAC,DR + 000314' 254000 000400' JRST OUTDMP + PUSHJ PDP,OUTA + 000315' 544246 000006 OUT1: HLR JBUF,DEVBUF(DEVDAT) + 000316' 260140 000210* PUSHJ PDP,ADRCK ;CHECK END OF 3 WORD HEADER + 000317' 551045 000002 HRRZI TAC,2(JBUF) + 000320' 505240 000007 HRLI JBUF,PROG + 000321' 515040 400000 HRLZI TAC, IOUSE + 000322' 337120 000005 SKIPG TAC1, @JBUF ;HAS THIS BUFFER EVER BEEN + ;;REFERENCED?(JBFADR0=0?) + 000323' 254000 000357' JRST OUTF + 000324' 350000 000005 AOS JBUF + 000325' 550060 000005 HRRZ TAC, @JBUF + 000326' 271100 000001 ADDI TAC1, 1 + 000327' 274040 000002 SUB TAC, TAC1 + 000330' 505100 000007 HRLI TAC1,PROG + 000331' 602000 000020 TRNE IOS, IOWC ;COMPUTE WORD COUNT?(IOWC=0?) + 000332' 254000 000336' JRST OUT2 + ADRCHK TAC1 ;PROCEED IF ADDRESS OF WORD COUNT + 000333' 260140 000316* PUSHJ PDP,ADRCK + 000334' 550040 000002 HRRZ TAC,TAC1 + ;<PROTECTION ADDRESS + 000335' 542060 000002 HRRM TAC, @TAC1 ;WORD COUNT:=C(JBFPTR18-35) + ; -C(JBFPTR18-35)- + 000336' 275240 000001 OUT2: SUBI JBUF,1 + 000337' 275100 000001 SUBI TAC1,1 + 000340' 515040 400000 HRLZI TAC, IOUSE + 000341' 437060 000002 IORB TAC, @TAC1 ;IOUSE:=1 + 000342' 260140 000333* ADRCHK TAC1^PUSHJ PDP,ADRCK + 000343' 550040 000002 HRRZ TAC,TAC1^ + 000344' 542060 000005 HRRM TAC,@JBUF ;ADVANCE CURRENT BUFFER ADDRE + 000345' 200006 000002 MOVE IOS,DEVIOS (DEVDAT) + 000346' 606000 010000 TRNN IOS,IOACT + 000347' 260140 000417' PUSHJ PDP, CALOUT ;START OUTPUT + 000350' 544246 000006 HLR JBUF,DEVBUF(DEVDAT) + 000351' 505240 000007 HRLI JBUF,PROG + 000352' 200120 000005 MOVE TAC1,@JBUF + 000353' 505100 000007 HRLI TAC1,PROG + 000354' 337020 000002 SKIPG @TAC1 ;IOUSE=1? + 000355' 260140 000300* PUSHJ PDP, WSYNC ;WAIT FOR DEVICE TO BECOME IN + 000356' 254000 000370' JRST OUTS + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 15 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + 000357' 332120 000005 OUTF: SKIPE TAC1,@JBUF + 000360' 254000 000365' JRST OUTF1 + 000361' 541600 000002 HRRI UUO,2 + 000362' 260140 000066' PUSHJ PDP,UOUTBF + 000363' 544246 000006 HLR JBUF,DEVBUF(DEVDAT) + 000364' 505240 000007 HRLI JBUF,PROG + 000365' 515040 400000 OUTF1: HRLZI TAC, IOUSE + 000366' 413060 000005 ANDCAB TAC, @JBUF ;IOUSE:=0 + 000367' 542046 000010 HRRM TAC,DEVOAD(DEVDAT) + 000370' 550060 000005 OUTS: HRRZ TAC,@JBUF + 000371' 260140 000000* PUSHJ PDP,BUFCLR + 000372' 540120 000005 HRR TAC1,@JBUF + 000373' 505100 000007 HRLI TAC1,PROG + 000374' 135200 000473' LDB ITEM,[POINT 17,@TAC1,17] + 000375' 275200 000001 SUBI ITEM,1 + 000376' 260140 000242* PUSHJ PDP,IOSETC ;JBFPTR18-35:=CURRENT BUFFER + ;ADDRESS+1 + ;JBFCTR:=(BUFFER SIZE-1)*[36/BYTE + ;SIZE] + 000377' 254000 000275* JRST UXIT ;RETURN TO USERS PROGRAM + + 000400' 260140 000355* OUTDMP: PUSHJ PDP,WSYNC + 000401' 200046 000003 MOVE TAC,DEVSER(DEVDAT) + 000402' 260141 000006 PUSHJ PDP,DDO(TAC) + 000403' 260140 000307* PUSHJ PDP,WAIT1 + 000404' 254000 000377* JRST UXIT + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 16 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + + ,DEC 06 00 EX COM L PT PRE 01 OUTA + ,H.R. MORSE 64-12-26 + + ,CALLING SEQUENCE: + , PUSHJ PDP,OUTA + , EXIT ALWAYS RETURN HERE + ,IF THE ADDRESS FIELD OF AC UUO IS ZERO,EXIT. OTHERWISE,CHECK IOACT. + ,IF IOACT=1, WIAT FOR IOACT=0. + ,SET JBFADR18-35:=ADDRESS FIELD OF AC UUO. JBFADR0:=1 AND EXIT. + + ,MONITOR INTERFACE + , STORAGE:13 + , ROUTINES CALLED: WSYNC + , SYMBOLS SET/USED: + , ACCUMULATORS: DEVDAT U + , IOS U PROG U + , JBUF S/U TAC S/U + , DEVICE DATA BLOCK: DEVIOS U DEVBUF U + , IO STATUS WORD: IOACT U + , JOB BUFFER AREA: IOUSE U + , JBFADR S + + INTERN OUTA + 000405' 606600 777777 OUTA: TRNN UUO, 777777 ;IS BUFFER ADDRESS SPECIFIED? + 000406' 263140 000000 POPJ PDP, ;NO + 000407' 260140 000403* PUSHJ PDP,WAIT1 + 000410' 544246 000006 HLR JBUF,DEVBUF(DEVDAT) + 000411' 545240 000007 HLRI JBUF,PROG + 000412' 542620 000005 HRRM UUO,@JBUF + 000413' 542606 000010 HRRM UUO,DEVOAD(DEVDAT) + 000414' 515040 400000 HRLZI TAC,IOUSE + 000415' 412060 000005 ANDCAM TAC,@JBUF + 000416' 263140 000000 POPJ PDP, ;RETURN + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 17 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + + ,DEC 06 00 EX COM L PT PRE 03 CALOUT + ,H.R. MORSE 2/21/65 + + ,CALLING SEQUENCE + , PUSHJ PDP,CALOUT + , EXIT + + ,DISPATCH TO DEVICE SERVICE ROUTINE DOU TO INITIATE OUTPUT. + + ,MONITOR INTERFACE + , STORAGE:2 + , SYMBOLS SET/USED: + , ACCUMULATORS: DEVDAT U + , TAC U + , DEVICE DATA BLOCK: DEVSER U + + INTERN CALOUT + 000417' 606000 010000 CALOUT: TRNN IOS,IOACT + 000420' 254000 000424' JRST CALOU1 + 000421' 606000 000040 TRNN IOS,IOCON + 000422' 263140 000000 POPJ PDP, + 000423' 260140 000400* PUSHJ PDP,WSYNC + 000424' 200046 000003 CALOU1: MOVE TAC,DEVSER(DEVDAT) + 000425' 254001 000002 JRST DOU(TAC) + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 18 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + + ,RELEASE A DEVICE + + INTERNAL RELEA1,RELEA2,RELEA3,RELEA5 + + 000426' 200006 000002 RELEA0: MOVE IOS,DEVIOS(DEVDAT) ;CALLED FROM INIT + 000427' RELEA2:RELEA3: + 000427' 620600 777777 RELEA1: TRZ UUO,-1 ;CLOSE BOTH INPUT AND OUTPUT + 000430' 260140 000000' PUSHJ PDP,CLOSE1 + 000431' 260140 000407* PUSHJ PDP,WAIT1 ;WAIT FOR DEVICE TO BECOME INACTIVE + 000432' 200046 000003 RELEA5: MOVE TAC, DEVSER(DEVDAT) ;RELEASE WITHOUT WAITING + 000433' 260141 000000 PUSHJ PDP, DRL (TAC) + 000434' 135040 000310* LDB TAC,PUUOAC + 000435' 402001 000311* SETZM USRJDA(TAC) + 000436' 201040 000017 MOVEI TAC,17 ;IS THE DEVICE ON AONTHER USER CHANNEL? + 000437' 550101 000435* RELEA4: HRRZ TAC1,USRJDA(TAC) + 000440' 302106 000000 CAIE TAC1,(DEVDAT) + 000441' 365040 000437' SOJGE TAC,RELEA4 + 000442' 325040 000404* JUMPGE TAC,UXIT ;EXIT IF ON ANOTHER CHANNEL + 000443' 201100 200000 MOVEI TAC1,ASSPRG ;OTHERWISE CLEAR ASSIGNED BY PROG. BIT + 000444' 413106 000004 ANDCAB TAC1,DEVMOD(DEVDAT) + 000445' 616100 000474' TDNN TAC1,[XWD TTYUSE,ASSCON] ; ASSIGNED BY CONSOLE OR TTY I + 000446' 137600 000000* DPB UUO,PJOBN ;NO. CLEAR JOB NUMBER + 000447' 254000 000442* JRST UXIT + + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 19 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + + ,DEC 06 00 EX UUO L PT PRE 01 STATO + ,H.R. MORSE 64-12-26 + + ,CALLING SEQUENCE + , STATO D,MASK + , EXIT1 ALL SELECTED BITS ARE 0 + , EXIT2 SOME SELECTED BITS ARE 1 + ,TESTS BITS OF I/O STATUS WORD OF DEVICE ON USERS CHANNEL D WHICH + ,ARE SELECTED BY MASK. + + ,MONITOR INTERFACE: + , STORAGE: 3 + , ROUTINES CALLED: UXIT + , SYMBOLS SET/USED: + , ACCUMULATORS: IOS U + , PDP U + , UUO U + + INTERN USTATO + + 000450' 602014 000000 USTATO: TRNE IOS,(UUO) ;SKIP IF ANY INDICATED BITS ARE ONE + 000451' 350003 000000 AOS (PDP) + 000452' 254000 000447* JRST UXIT + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 20 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + ,DEC 06 00 EX UUO L PT PRE 01 STATUS + ,H.R. MORSE 64-12-26 + + ,CALLING SEQUENCE + , STATUS D,ADR + , EXIT ALWAYS RETURNS HERE + ,STORES I/O STATUS WORD OF DEVICE ON CHANNEL D IN LOCATION ADR. + + ,MONITOR INTERFACE + , STORAGE: 3 + , ROUTINES CALLED: UXIT + , SYMBOLS SET/USED: + , ACCUMULATORS: IOS U + , PROG U + , UUO U + + INTERN USTATS + EXTERNAL ADRERR,USRREL + + 000453' 200040 000000* USTATS: MOVE TAC,USRREL ;CHECK TO SEE IF IN BOUNDS + 000454' 307054 000000 CAIG TAC,(UUO) + 000455' 260140 000000* PUSHJ PDP,ADRERR + 000456' 505600 000007 HRLI UUO,PROG ;LOAD STATUS INTO INDICATED ADDRESS. + 000457' 552020 000014 HRRZM IOS,@UUO + 000460' 254000 000452* JRST UXIT + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 21 +IOCONT MAC 24-APR-78 23:08 8-9-95 + + + + ,CALLING SEQUENCE + , SETSTS D,BITS + , EXIT ALWAYS RETURN HERE + + INTERNAL USETST + EXTERNAL WAIT1,SETIOS + + 000461' 260140 000431* USETST: PUSHJ PDP,WAIT1 ;WAIT TILL DEVICE INACTIVE + 000462' 205000 000002 MOVSI IOS, IOBEG + 000463' 436006 000002 IORM IOS,DEVIOS(DEVDAT) + 000464' 542606 000002 HRRM UUO,DEVIOS(DEVDAT) + 000465' 254000 000460* JRST UXIT + + ,DEC 06 00 EX UUO L PT PRE 01 STATZ + ,H.R. MORSE 64-12-26 + + ,CALLING SEQUENCE + , STATZ D,MASK + , EXIT1 SOME SELECTED BITS ARE 1 + , EXIT2 ALL SELECTED BITS ARE 0 + + ,TESTS BITS OF I/O STATUS WORD OF DEVICE ON USERS + ,CHANNEL D WHICH ARE SELECTED BY MASK, + + ,MONITOR INTERFACE + , STORAGE: 3 + , ROUTINES CALLED: UXIT + , SYMBOLS SET/USED: + , ACCUMULATORS: IOS U + , PDP U + , UUO U + + INTERN USTATZ + + 000466' 606014 000000 USTATZ: TRNN IOS,(UUO) ;SKIP IF ALL INDICATED BITS ARE ZERO + 000467' 350003 000000 AOS (PDP) + 000470' 254000 000465* JRST UXIT + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000475 + +9K CORE USED + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 22 +IOCONT MAC 24-APR-78 23:08 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADRCK 000342' EXT +ADRERR 000455' EXT +AL 000001 INT +ASSCON 400000 INT +ASSIN 000112' EXT +ASSPRG 200000 INT +B 000014 INT +BUFCLC 000077' EXT +BUFCLR 000371' EXT +BUFPNT 000012 INT +BUFWRD 000013 INT +CALIN 000276' +CALOU1 000424' +CALOUT 000417' INT +CLOSB 002000 INT +CLOSE1 000000' INT +CLSIN 000002 INT +CLSOUT 000001 INT +CUXIT1 000113' EXT +CUXIT2 000141' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT + + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 22-1 +IOCONT MAC 24-APR-78 23:08 SYMBOL TABLE + +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERROR 000000 EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +ILLMOD 000000 EXT +IN 000163' INT +IN1 000173' +INDMP 000271' +INEOF 000250' +INITB 400000 INT +INPB 010000 INT +INPT0A 000225' +INPT0B 000220' +INPT0C 000224' +INPUT0 000212' +INPUT1 000227' +INPUT2 000236' +INPUT3 000265' +INPUTA 000253' +INPUTF 000256' +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIERR 000000 EXT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSETC 000376' EXT +IOSTRT 000010 INT + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 22-2 +IOCONT MAC 24-APR-78 23:08 SYMBOL TABLE + +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000111' EXT +JOBJDA 000000 EXT +LOOKB 040000 INT +MTW 010000 INT +OBUFB 100000 INT +OUT 000306' INT +OUT1 000315' +OUT2 000336' +OUTA 000405' INT +OUTDMP 000400' +OUTF 000357' +OUTF1 000365' +OUTPB 004000 INT +OUTS 000370' +PDP 000003 INT +PICHN 000100 INT +PIOMOD 000312' EXT +PJOBN 000446' EXT +PROG 000007 INT +PUUOAC 000434' EXT +RELEA0 000426' +RELEA1 000427' INT +RELEA2 000427' INT +RELEA3 000427' INT +RELEA4 000437' +RELEA5 000432' INT +RUN 200000 INT +RUNABL 204000 INT +SETBYT 000155' EXT +SETIOS 000120' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +UCLS0 000026' +UCLS1 000034' +UCLS2 000041' +UCLS3 000060' +UCLS4 000013' + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS MACRO 10 05:51 24-APR-78 PAGE 22-3 +IOCONT MAC 24-APR-78 23:08 SYMBOL TABLE + +UINBF 000076' INT +UINIT 000103' INT +UINIT1 000111' INT +UINIT4 000127' +UINIT5 000133' +UINITZ 000142' INT +UINTQ 000121' EXT +UOBF1 000072' +UOUTBF 000066' INT +USETST 000461' INT +USRJDA 000437' EXT +USRMOD 010000 INT +USRREL 000453' EXT +USTATO 000450' INT +USTATS 000453' INT +USTATZ 000466' INT +UUO 000014 INT +UXIT 000470' EXT +WAIT1 000461' EXT +WSYNC 000423' EXT + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSSSSSSSS SSSSSSSSS + III OOO OOO CCC SSSSSSSSS SSSSSSSSS + III OOO OOO CCC SSSSSSSSS SSSSSSSSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :IOCSS .LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:34 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1847 +File will be deleted after printing + +IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 8-15-65 + + XLIST + LIST + TITLE IOCSS - IO COMMON SYSTEM SUBROUTINES + SUBTTL 8-15-65 + EXTERNAL CLOSE1,DEVLST,ERROR,JBTADR + EXTERNAL JOB,JOBFF,RELEA1,USRJDA,WAIT1,CLDS,CLEN + EXTERNAL PJOBN,CPOPJ1,PIOMOD,CPOPJ,CPOPJ2 + EXTERNAL SCNOFF,SCNON + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 2 +IOCSS MAC 24-APR-78 23:13 8-15-65 + + + + ,DEC 06 00 EX COM L PT PRE 01 ADVBFE + ,H.R. MORSE 64-12-26 + ,CALLING SEQUENCE + , PUSHJ PDP,ADVBFE + , EXIT1 RETURN IF NEXT BUFFER IS EMPTY + , EXIT2 RETURN IF NEXT BUFFER IS FULL + ,CLEARS THE USE BIT (IOUSE:=0) OF THE BUFFER POINTED TO BY THE + ,OUTPUT BUFFER ADDRESS (DEVOAD) OF THE CURRENT DEVICE DATA BLOCK + ,AND ADVANCES THE BUFFER ADDRESS TO THE NEXT BUFFER IN THE RING + ,UPON RETURN, SKIPS IF THE NEXT BUFFER IS FULL. + ,MONITOR INTERFACE + , STORAGE: 6 + , SYMBOLS SET/USED: + , ACCUMULATORS: DEVDAT U + , PDP S/U + , TAC S/U + , DEVICE DATA BLOCK: DEVOAD S/U + , JOB BUFFER HEADER: IOUSE S/U + INTERN ADVBFE + 000000' ADVBFE: ADRCHK DEVOAD(DEVDAT)^ EXTERNAL ADRCK + 000000' 260140 000000* PUSHJ PDP,ADRCK + 000001' 550046 000010 HRRZ TAC,DEVOAD(DEVDAT)^ + 000002' 515040 400000 HRLZI TAC,IOUSE; IOUSE:=0 + 000003' 413066 000010 ANDCAB TAC,@DEVOAD(DEVDAT) + 000004' 542046 000010 HRRM TAC,DEVOAD(DEVDAT); DEVOAD 18-35:=NEXT BUFFER ADDRESS + 000005' 335026 000010 SKIPGE @DEVOAD(DEVDAT); IS IOUSE=0? + 000006' 350003 000000 AOS (PDP); EXIT2. BUFFER IS FULL + 000007' 263140 000000 POPJ PDP,; EXIT1. BUFFER IS EMPTY + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 3 +IOCSS MAC 24-APR-78 23:13 8-15-65 + + + + ,DEC 06 00 EX COM L PT PRE 01 ADVBFF + ,H.R. MORSE 64-12-26 + ,CALLING SEQUENCE + , PUSHJ PDP,ADVBFF + , EXIT1 RETURN IF NEXT BUFFER IS FULL + , EXIT2 RETURN IF NEXT BUFFER IS EMPTY + ,SETS THE USE BIT (IOUSE:=1) OF THE BUFFER POINTED TO BY THE + ,INPUT BUFFER ADDRESS (DEVIAD) OF THE CURRENT DEVICE DATA BLOCK + ,AND ADVANCES THE BUFFER ADDRESS TO THE NEXT BUFFER IN THE RING. + ,UPON RETURN. SKIPS IF THE NEXT BUFFER IS EMPTY, + ,MONITOR INTERFACE + , STORAGE: 6 + , SYMBOLS SET/USED: + , ACCUMULATORS: DEVDAT U + , PDP S/U + , TAC S/U + , DEVICE DATA BLOCK: DEVIAD S/U + , JOB BUFFER HEADER: IOUSE S/U + INTERN ADVBFF + 000010' 260140 000000* ADVBFF: ADRCHK DEVIAD(DEVDAT)^PUSHJ PDP,ADRCK + 000011' 550046 000007 HRRZ TAC,DEVIAD(DEVDAT)^ + 000012' 515040 400000 HRLZI TAC,IOUSE; IOUSE:=1 + 000013' 437066 000007 IORB TAC,@DEVIAD(DEVDAT) + 000014' 542046 000007 HRRM TAC,DEVIAD(DEVDAT); DEVIAD:=NEXT BUFFER ADDRESS + 000015' 331026 000007 SKIPL @DEVIAD(DEVDAT); IOUSE=1? + 000016' 350003 000000 AOS (PDP); EXIT2. NEXT BUFFER IS EMPTY + 000017' 263140 000000 POPJ PDP,; EXIT1. NEXT BUFFER IS FULL + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 4 +IOCSS MAC 24-APR-78 23:13 8-15-65 + + + + + ,DEC 06 00 EX COM L PT PRE 01 ASCIA + ,C. FRAZIER AND W. SEGAL 64-12-26 + ,CALLING SEQUENCE + , PUSHJ PDP,ASCIA + , EXIT ALWAYS RETURNS HERE + ,ADDS THE ASCII INCREMENT (RIGHT JUSTIFIED) IN AC TAC1 TO THE FIVE + ,DIGIT ASCII NUMBER (LEFT JUSTIFIED) IN AC TAC AND LEAVES THE + ,RESULT (LEFT JUSTIFIED) IN AC TAC. TAC1 IS RESTORED. + ,MONITOR INTERFACE + , STORAGE: 21 + , SYMBOLS SET/USED: + , ACCUMULATORS: PDP U + , TAC S/U + , TAC1 S/U + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 5 +IOCSS MAC 24-APR-78 23:13 8-15-65 + + + + ; INTERN ASCIA + ;ASCIA: PUSH PDP,TAC1; SAVE TAC1 = ASCII INCREMENT (RIGHT JUST + ; AND TAC1,K2; CLEAR MOST SIGNIFICANT 3 BITS OF + ;, EACH CHARACTER + ; LSH TAC,-1; TAC=FIVE DIGIT ASCII NO.(RIGHT JUST.) + ; IOR TAC,K4; SET SECOND AND THIRD MOST SIGNIFICANT + ;, BITS OF EACH CHARACTER TO ONES. + ; TLZN TAC,400000 + ; ADD TAC,K1 + ; ADD TAC1,TAC + ; AND TAC1,K3 + ; MOVE TAC,K4 + ; AND TAC,TAC1 + ; ASH TAC,-3 + ; SUBM TAC1,TAC + ; IOR TAC,K4 + ; LSH TAC,1 + ; TRO TAC,1 + ; POP PDP,TAC1; RESTORE TAC1 + ; POPJ PDP,; RETURN + ;K1: OCT 215064321506; CHARACTER MASK: 1000110 + ;K2: OCT 036170743617; CHARACTER MASK: 0001111 + ;K3: OCT 176773757677; CHARACTER MASK: 0111111 + ;K4: OCT 140603014060; CHARACTER MASK: 0110000 + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 6 +IOCSS MAC 24-APR-78 23:13 8-15-65 + + + + INTERNAL ASSIN,ASSASG + + 000020' 260140 000041' ASSIN: PUSHJ PDP,DEVSRC ;SEARCH FOR DEVICE + 000021' 263140 000000 POPJ PDP, ;DEVICE NOT FOUND + 000022' 201100 200000 MOVEI TAC1, ASSPRG ;DEVICE FOUND, FLAG AS ASSIGNED BY PROG + + ;ASSIGN DEVICE IF UNASSIGNED + ;CALL: MOVE ITEM, JOB NUMBER + ; MOVE DEVDAT, ADDR. OF DDB + ; MOVEI TAC1, EITHER ASSPRG OR ASSCON + ; PUSHJ PDP, ASSASG + ; CANT ASSIGN RETURN + ; ASSIGNED RETURN + + 000023' 700200 000000* ASSASG: CONO APR,CLDS ;DISABLE CLOCK + 000024' 135040 000000* LDB TAC,PJOBN ;GET JOB NUMBER IN DEV DATA BLOCK + 000025' 316040 000004 CAMN TAC,ITEM ;IS IT ALREADY ASSIGNED TO THIS JOB + 000026' 254000 000035' JRST ASSAS1 ;YES + 000027' 201040 600000 MOVEI TAC, ASSPRG+ASSCON ;NO, IS IT ASSIGNED TO ANOTHE + 000030' 700600 000000* CONO PI, SCNOFF ;TURN SCANNER OFF + 000031' 612046 000004 TDNE TAC, DEVMOD(DEVDAT) ;ARE EITHER ASSIGNED BITS SET + 000032' 254000 000036' JRST ASSAS2 ;YES + 000033' 436106 000004 IORM TAC1, DEVMOD(DEVDAT) ;NO, SET ONE OF THEM + 000034' 137200 000024* DPB ITEM,PJOBN ;AND STORE JOB NUMBER + 000035' 350003 000000 ASSAS1: AOS (PDP) + 000036' 700600 000000* ASSAS2: CONO PI, SCNON ;TURN SCANNER BACK ON + 000037' 700200 000000* CONO APR,CLEN ;RENABLE CLOCK + 000040' 263140 000000 POPJ PDP, + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 7 +IOCSS MAC 24-APR-78 23:13 8-15-65 + + + + ;ROUTINE TO SEARCH FOR A DEVICE + ;CALL: HRR ITEM,JOB NUMBER + ; MOVE TAC,[SIXBIT .DEVICE NAME.] + ; PUSHJ PDP, DEVSRC + ; NOT FOUND + ; FOUND + + INTERNAL DEVLG,DEVSRC,DEVPHY + EXTERNAL SYSTAP,DEVOPR + + 000041' 260140 000044' DEVSRC: PUSHJ PDP, DEVLG ;SEARCH LOGICAL NAMES FIRST + 000042' 254000 000056' JRST DEVPHY ;NOT FOUND, SEARCH PHYSICAL NAMES + 000043' 254000 000000* JRST CPOPJ1 ;FOUND + + ;SEARCH LOGICAL NAMES + + 000044' 554300 000000* DEVLG: HLRZ DEVDAT,DEVLST ;BEGINNING OF DDB CHAIN + 000045' 322040 000000* JUMPE TAC,CPOPJ ;0 CANNOT BE A LOGICAL NAME + 000046' 312046 000005 DEVLP0: CAME TAC,DEVLOG(DEVDAT) ;COMPARE WITH LOGICAL NAME + 000047' 254000 000053' JRST DEV0 ;NO MATCH + 000050' 135100 000034* LDB TAC1,PJOBN ;DOES THE LOGICAL NAME BELONG TO THIS J + 000051' 316100 000004 CAMN TAC1,ITEM + 000052' 254000 000043* JRST CPOPJ1 ;YES + 000053' 554306 000003 DEV0: HLRZ DEVDAT,DEVSER(DEVDAT) ;NO, KEEP LOOKING + 000054' 326300 000046' JUMPN DEVDAT,DEVLP0 + 000055' 263140 000000 POPJ PDP, ;FINISH AND NOT FOUND + + ;SEARCH PHYSICAL NAMES + + 000056' 322040 000045* DEVPHY: JUMPE TAC,CPOPJ ;ZERO CANNOT BE A LOGICAL NAME + 000057' 316040 000367' CAMN TAC,[SIXBIT /OPR/] ;IS IT "OPR"? + 000060' 200040 000000* MOVE TAC,DEVOPR ;YES, CHANGE TO OPERATORS TTY + 000061' 316040 000370' CAMN TAC,[SIXBIT /SYS/] ;IS IT "SYS"? + 000062' 200040 000000* MOVE TAC,SYSTAP ;YES, CHANGE TO SYSTEM TAPE NAME + 000063' 554300 000044* HLRZ DEVDAT,DEVLST ;SEARCH DEVICE DATA BLOCKS + 000064' 316046 000000 DEVLP1: CAMN TAC,DEVNAM(DEVDAT) + 000065' 254000 000052* JRST CPOPJ1 ;FOUND + 000066' 554306 000003 HLRZ DEVDAT,DEVSER(DEVDAT) + 000067' 326300 000064' JUMPN DEVDAT,DEVLP1 + 000070' 263140 000000 POPJ PDP, ;NOT FOUND + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 8 +IOCSS MAC 24-APR-78 23:13 8-15-65 + + + + ,DEC 06 00 EX COM L PT PRE 01 BUFCLC + ,H. R. MORSE 64-12-26 + ,CALLING SEQUENCE + , PUSHJ PDP,BUFCLC + , EXIT RETURNS HERE IF MEMORY NOT EXCEEDED + , SETS UP AN N BUFFER RING FOLLOWING THE USERS PROGRAM, WHERE N + , IS IN THE ADDRESS FIELD OF AC UUO. + , THE BUFFER RING FORMAT IS AS FOLLOWS: + , LOCATION LH CONTENTS RH + , C(JOBFF) + 1 BUFFER C(JOBFF) +1 + , + 0(BUFFER SIZE+2) SIZE + 1(BUFFER SIZ+2) + , C(JOBFF) +1 BUFFER C(JOBFF) +1 + , +1(BUFFER SIZE+2) SIZE + 2(BUFFER SIZE+2) + , . . . + , . . . + , . . . + , C(JOBFF) + 1 BUFFER C(JOBFF) + 1 + , + (N-2)(BUFFER SIZE+2) SIZE +(N-1)(BUFFER SIZE+2) + , C(JOBFF) + 1 BUFFER C(JOBFF) + 1 + , + (N-1)(BUFFER SIZE+2) SIZE + ,THEN SET BUFPNT:=IOUS,C(JOBFF) + 1 + , AND JOBFF:=C(JOBFF) + 1 + N(BUFFER SIZE + 2) + , BUFWRD IS RESTORED. + ,MONITOR INTERFACE + , STORAGE: 20 + , ROUTINES CALLED: ADRCK + , SYMBOLS SET/USED: + , ACCUMULATORS: BUFPNT S/U PROG U + , BUFWRD S/U TAC S/U + , DEVDAT U TAC1 S/U + , PDP S/U UUO U + , DEVICE DATA BLOCK: DEVCHR U + , JOB AREA: JOBFF S/U + , JOB BUFFER HEADER: IOUSE U + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 9 +IOCSS MAC 24-APR-78 23:13 8-15-65 + + + + INTERN BUFCLC + 000071' 261140 000013 BUFCLC: PUSH PDP,BUFWRD; SAVE BUFWRD ON STACK + 000072' 135040 000371' LDB TAC,[POINT 12,DEVCHR(DEVDAT),35];TAC:=BUFFER SIZE + 000073' 550507 000000* HRRZ BUFPNT,JOBFF(PROG);BUFPNT:=FIRST FREE LOCATION + 1 + 000074' 271500 000001 ADDI BUFPNT,1 + 000075' 550540 000012 HRRZ BUFWRD,BUFPNT + 000076' 505500 000007 HRLI BUFPNT,PROG + 000077' 504540 000001 HRL BUFWRD,TAC; BUFWRD:=BUFFER SIZE,FIRST FREE LOC + 1 + 000100' 271040 000002 ADDI TAC,2; TAC:=BUFFER SIZE + 2 + 000101' 550100 000014 HRRZ TAC1,UUO; TAC1:=N=ADDRESS FIELD OF AC UUO + 000102' 270540 000001 BUFC1: ADD BUFWRD,TAC; BUFWRD:=C(BUFWRD) + C(TAC) + ADRCHK BUFPNT; CHECK BUFFER FOR MEMORY BOUND + 000103' 260140 000010* PUSHJ PDP,ADRCK + 000104' 550040 000012 HRRZ TAC,BUFPNT + 000105' 202560 000012 MOVEM BUFWRD,@BUFPNT; BUFFER HEADER+1:=C(BUFWRD) + 000106' 540500 000013 HRR BUFPNT,BUFWRD; BUFPNT 18-35:=C(BUFWRD 18-35) + 000107' 367100 000102' SOJG TAC1,BUFC1; N:=N-1. IS N>0? + 000110' 540547 000073* HRR BUFWRD,JOBFF(PROG) + 000111' 271540 000001 ADDI BUFWRD,1 + 000112' 260140 000103* PUSHJ PDP,ADRCK ;CHECK LAST ADR. OF HEADER + 000113' 551052 777776 HRRZI TAC,-2(BUFPNT) + 000114' 274500 000001 SUB BUFPNT,TAC + 000115' 202560 000012 MOVEM BUFWRD,@BUFPNT;LINK LAST BUFFER TO FIRST BUFFER + 000116' 270500 000001 ADD BUFPNT,TAC + 000117' 542507 000110* HRRM BUFPNT,JOBFF(PROG);JOBFF:=C(JOBFF)+1+N(BUFFER SIZE+2) + 000120' 540500 000013 HRR BUFPNT,BUFWRD; BUFPNT:=IOUSE,ADDRESS OF FIRST BUFFER + , IN RING. + 000121' 505500 400000 HRLI BUFPNT,IOUSE + 000122' 262140 000013 POP PDP,BUFWRD; RESTORE BUFWRD FROM STACK. + 000123' 263140 000000 POPJ PDP,; RETURN + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 10 +IOCSS MAC 24-APR-78 23:13 8-15-65 + + + + ,DEC 06 00 EX COM L PT PRE 01 BUFCLR + ,H. R. MORSE 64-12-26 + ,CALLING SEQUENCE + , PUSHJ PDP,BUFCLR + , EXIT RETURNS HERE IF MEMORY NOT EXCEEDED + , CLEAR THE WORD COUNT AND DATA AREA OF THE BUFFER WHOSE ADDRESS + , IS IN TAC 18-35. + ,MONITOR INTERFACE: + , STORAGE: 13 + , ROUTINE CALLED: ADRCK + , SYMBOLS SET/USED: + , ACCUMULATORS: PDP U TAC S/U + , PROG U TAC1 S/U + INTERN BUFCLR + 000124' 505040 000007 BUFCLR: HRLI TAC,PROG + 000125' 000000 000001* ADRCHK TAC; PROCEED IF CURRENT BUFFER ADDRESS + , < PROTECTION ADDRESS. + 000126' 554120 000001 HLRZ TAC1,@TAC; TAC1 18-35=SIZE + 000127' 620100 400000 TRZ TAC1,400000 + 000130' 270100 000001 ADD TAC1,TAC; TAC1:=CURRENT BUFFER ADDRESS + SIZE + ADRCHK TAC1; PROCEED IF CURRENT BUFFER ADDRESS + 000131' 260140 000112* PUSHJ PDP,ADRCK + 000132' 550040 000002 HRRZ TAC,TAC1 + , + SIZE < PROTECTION ADDRESS. + 000133' 201060 000001 MOVEI TAC,@TAC; TAC:=CURRENT BUFFER ADDRESS+1, + , CURRENT BUFFER ADDRESS+1 + 000134' 504040 000001 HRL TAC,TAC + 000135' 253040 000136' AOBJN TAC,.+1 + 000136' 402001 000000 CLEARM 0(TAC); WORD COUNT:=0 + 000137' 350000 000001 AOS TAC; TAC:=CURRENT BUFFER ADDRESS+1, + , CURRENT BUFFER ADDRESS+2 + 000140' 251060 000002 BLT TAC,@TAC1; CLEAR BUFFER + 000141' 263140 000000 POPJ PDP,; RETURN + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 11 +IOCSS MAC 24-APR-78 23:13 8-15-65 + + + SUBTTL 5-17-65 PART 2 + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 12 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + + ,CALLING SEQUENCE + , PUSHJ PDP,CKS12 + , EXIT ALWAYS RETURNS HERE + ,CALCULATES FOLDED 12 BIT CHECKSUMS OF THE DATA WORDS IN THE + ,BUFFER WHOSE ADDRESS IS IN AC TAC1. TWO ALGORITHMS ARE USED. + ,ON RETURN, THE LEFT HALF OF AC TAC CONTAINS A CHECKSUM OBTAINED + ,BY ACCUMULATING, IN ONES COMPLEMENT, THE DATA WORDS AND FOLDING IT. + ,THE LEFT HALF OF AC DAT CONTAINS A CHECKSUM OBTAINED BY ACCUMULATING + ,IN TWOS COMPLEMENT, THE DATA WORDS AND FOLDING IT. AC TAC1 + ,CONTAINS A 1. + ,MONITOR INTERFACE + , STORAGE: 20 + , ROUTINES CALLED: FOLD + , SYMBOLS SET/USED: + , ACCUMULATORS: DAT S/U SUB S + , PDP U TAC S/U + , PROG U TAC1 S/U + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 13 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + + INTERN CKS12 + 000142' 270100 000007 CKS12: ADD TAC1,PROG; TAC1:=-WORD COUNTER,ADDRESS OF FIRST DATA + 000143' 350000 000002 AOS TAC1 + 000144' 550042 000000 HRRZ TAC,0(TAC1) + 000145' 213000 000001 MOVNS TAC + 000146' 350000 000002 AOS TAC1 + 000147' 504100 000001 HRL TAC1,TAC + 000150' 402000 000001 CLEARM TAC; INITIALIZE TWOS COMPLEMENT SUM + 000151' 270042 000000 CKS12A: ADD TAC,0(TAC1); TWOS COMPLEMENT ADD + 000152' 253100 000151' AOBJN TAC1,CKS12A; DONE? + 000153' 246040 777750 FOLD: LSHC TAC,-30 + 000154' 242100 777764 LSH TAC1,-14 + 000155' 270040 000002 ADD TAC,TAC1 + 000156' 246040 777764 LSHC TAC,-14 + 000157' 242100 777750 LSH TAC1,-30 + 000160' 270040 000002 ADD TAC,TAC1 + 000161' 622040 770000 TRZE TAC,770000 + 000162' 350000 000001 AOS TAC + 000163' 517000 000001 HRLZS TAC + 000164' 201100 000001 MOVEI TAC1,1 ;TAC1:=1 + 000165' 263140 000000 POPJ PDP, + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 14 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + + ,DEC 06 00 EX COM L PT PRE 01 CLRBYT + ,H. R. MORSE 64-12-26 + ,CALLING SEQUENCE + , PUSHJ PDP,CLRBYT + , EXIT ALWAYS RETURN HERE + ,CALLED WITH A BYTE POINTER IN AC TAC, IT CLEARS THE REST OF THE + ,WORD POINTED TO BY THE BYTE POINTER. + ,MONITOR INTERFACE + , STORAGE: 7 + , SYMBOLS SET/USED: + , ACCUMULATORS: PDP U + , TAC U + , TAC1 S/U + INTERN CLRBYT + 000166' 135100 000372' CLRBYT: LDB TAC1,[POINT 6,TAC,5]; TAC1:=P + 000167' 137100 000373' DPB TAC1,[POINT 12,TAC,11]; TAC 0-5:=0, TAC 6-12:=P + 000170' 402000 000002 SETZM TAC1 + 000171' 137100 000001 DPB TAC1,TAC; CLEAR BITS 36-P THROUGH 35 + 000172' 263140 000000 POPJ PDP,; RETURN + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 15 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + + ;ROUTINE TO RELEASE ALL DEVICES ASSIGNED TO JOB + + INTERNAL IORELS + EXTERNAL PUUOAC,RELEA3 + + + 000173' 201040 000000* IORELS: MOVEI TAC,RELEA3 ;RELEASE ALL IO DEVICES(DONT CLOSE) + + ;ROUTINE TO DO IO FOR ALL DEVICES ASSIGNED TOI JOB + ;CALL MOVEI TAC,ADR. OR IO SUB. + ; PUSHJ PDP,IOALL + + INTERNAL IOALL + + 000174' 261140 000001 IOALL: PUSH PDP,TAC ;SAVE ADR. FO SUB. + 000175' 515240 777760 HRLZI DAT, -20 + 000176' 200305 000000* IOALL1: MOVE DEVDAT, USRJDA(DAT) + 000177' 200006 000002 MOVE IOS,DEVIOS(DEVDAT) + 000200' 201600 000000 MOVEI UUO,0 + 000201' 137240 000000* DPB DAT,PUUOAC + 000202' 332000 000006 SKIPE DEVDAT + 000203' 260163 000000 PUSHJ PDP,@(PDP) ;CALL THE SUB. + 000204' 253240 000176' AOBJN DAT, IOALL1 + 000205' 262140 000001 POP PDP,TAC + 000206' 263140 000000 POPJ PDP, + + ;KILL ALL DEVICES(RELEASE WITHOUT WAITING FOR DEVICE INACTIVE) + + INTERNAL IOKILL + EXTERNAL RELEA5 + + 000207' 201040 000000* IOKILL: MOVEI TAC,RELEA5 + 000210' 254000 000174' JRST IOALL + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 16 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + + ,DEC 06 00 EX COM L PT PRE 01 IOSET + ,H. R. MORSE 64-12-26 + ,CALLING SEQUENCE + , PUSHJ PDP,IOSET + , EXIT ALWAYS RETURNS HERE + ,THIS PROGRAM IS CALLED FROM AN INTERRUPT SERVICE ROUTINE. + ,IT PUTS THE ADDRESS OF THE DATA AREA OF THE JOB (C(JBTADR18-35)) + ,CONNECTED TO THE DEVICE SPECIFIED BY AC DEVDAT IN AC PROG AND + ,PUTS THE ITEM POINTER (C(DEVCTR)) IN AC ITEM. + ,MONITOR INTERFACE + , STORAGE: 5 + , SYMBOLS SET/USED: + , ACCUMULATORS: DEVDAT U PDP U + , ITEM S PROG S/U + , DEVICE DATA BLOCK: DEVCHR U + , DEVCTR U + , SYSTEM ADDRESSES: JBTADR U + INTERN IOSET + + 000211' 135340 000050* IOSET: LDB PROG,PJOBN + 000212' 200206 000011 MOVE ITEM,DEVCTR(DEVDAT); ITEM:=ITEM POINTER=C(DEVCTR) + 000213' 550347 000000* HRRZ PROG,JBTADR(PROG); PROG:=C(JBTADR 18-35) + 000214' 263140 000000 POPJ PDP,; RETURN + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 17 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + + ,6-CSS-DEC-IOSETC-PL-PRE1 + ,H.R. MORSE 17-11-64 + + ,CALLING SEQUENCE + , PUSHJ PDP,IOSETC + , EXIT ALWAYS RETURN HERE + + ,SETS JBFPTR18-35:=C(TAC1 18-35) + , JBFCTR:=C(ITEM)*[WORD LENGTH/BYTE SIZE] + ,WHERE WORD LENGTH:=36 DECIMAL + , BYTE SIZE:=C(JBFPTR6-11) + , [X]:= INTEGER PART OF X + + ,MONITOR INTERFACE + , STORAGE: 11 + , ROUTINES CALLED: ITMCT1 + , SYMBOLS SET/USED: + , ACCUMULATORS: JBUF S/U TAC S/U + , ITEM S/U TAC1 S/U + , PDP U + + INTERN IOSETC + + 000215' 271240 000001 IOSETC: ADDI JBUF,1 ;JBFPTR12-18:=0 + 000216' 515040 007777 HRLZI TAC,7777 ;JBFPTR18-35:=C(TAC1 18-35)+1 + 000217' 406060 000005 ANDM TAC,@JBUF + 000220' 542120 000005 HRRM TAC1,@JBUF + 000221' 350020 000005 AOS @JBUF + 000222' 135100 000374' LDB TAC1,[POINT 6,@JBUF,11] ;TAC1:=BYTE SIZE + 000223' 260140 000232' PUSHJ PDP,ITMCT1 ;JBFCTR:=C(ITEM)*[36/BYTE SIZE] + 000224' 271000 000006 ADDI JBUF+1 + 000225' 202220 000005 MOVEM ITEM,@JBUF + 000226' 263140 000000 POPJ PDP, ;EXIT + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 18 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + + ,DEC 06 00 EX COM L PT PRE 01 ITMSET, ITMCNT, ITMCT1 + ,H.R. MORSE 64-12-26 + + ,CALLING SEQUENCE + , PUSHJ PDP,ITMSET + , EXIT ALWAYS RETURNS HERE + ,SETS AC ITEM:=(BUFFER SIZE-1)*[WORD LENGTH/BYTE SIZE] + ,WHERE BUFFER SIZE:=BITS 1-17 OF THE BUFFER HEADER WORD POINTED TO + , BY C(DEVADR) + , WORD LENGTH:=36 DECIMAL + , BYTE SIZE:=INTEGER PART OF X. + + ,CALLING SEQUENCE + , PUSHJ PDP,ITMCNT + , EXIT ALWAYS RETURNS HERE + ,SETS AC ITEM=C(ITEM)*[WORD LENGTH/BYTE SIZE] + + ,CALLING SEQUENCE + , PUSHJ PDP,ITMCT1 + , EXIT ALWAYS RETURNS HERE + ,SETS AC ITEM:=C(ITEM)*[WORD LENGTH/C(TAC1)] + + ,MONITOR INTERFACE + , STOAGE: 7 + , SYMBOLS SET/USED: + , ACCUMULATORS: DEVDAT U TAC S/U + , ITEM S/U TAC1 S/U + , PDP U + , DEVICE DATA BLOCK: DEVADR U + , DEVPTR U + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 19 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + + INTERN ITMSET,ITMCNT,ITMCT1 + 000227' 135200 000375' ITMSET: LDB ITEM,[POINT 17,@DEVADR(DEVDAT),17];ITEM:=BUFFER SIZE-1 + 000230' 275200 000001 SUBI ITEM,1 + 000231' 135100 000376' ITMCNT: LDB TAC1,[POINT 6,DEVPTR(DEVDAT),11];TAC1:=BYTE SIZE + 000232' 201040 000044 ITMCT1: MOVEI TAC,44 ;ITEM:=C(ITEM)*[WORD LENGTH/C(TAC1)] + 000233' 230040 000002 IDIV TAC,TAC1 + 000234' 220200 000001 IMUL ITEM,TAC + 000235' 263140 000000 POPJ PDP, + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 20 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + + ;ROUTINE TO SET DEVICE STATUS WORD FROM UUO + + INTERNAL SETIOS + EXTERNAL ILLMOD + + 000236' 135040 000377' SETIOS: LDB TAC,[POINT 4,UUO,35] ;GET DEVICE DATA MODE + 000237' 201040 000001 MOVEI TAC,1 ;AND CHECK FOR LEGALITY + 000240' 242042 000000 LSH TAC,(TAC1) + 000241' 616046 000004 TDNN TAC,DEVMOD(DEVDAT) + 000242' 254000 000000* JRST ILLMOD ;ILLEGAL MODE + 000243' 620600 010000 TRZ UUO,IOACT ;LET USER SET ALL BITS EXCEPT IOACT + 000244' 542606 000002 HRRM UUO,DEVIOS(DEVDAT) + 000245' 263140 000000 POPJ PDP, + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 21 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + + ,DEC 06 00 EX COM L PT PRE 01 NEWBUF, BPNSET + ,H. R. MORSE 64-12-26 + ,CALLING SEQUENCE + , PUSHJ PDP,NEWBUF + , EXIT ALWAYS RETURNS HERE + ,CLEARS THE BUFFERE CURRENTLY POINTED TO BY THE INPUT BUFFER + ,ADDRESS (DEVDR) OF THE CURRENT DEVICE. SETS UP THE BYTE + ,POINTER (DEVPTR), AND THE ITEM COUNT (DEVCTR) AND RETURNS. + ,CALLING SEQUENCE + , PUSHJ PDP,BPNSET + , EXIT ALWAYS RETURNS HERE + ,SETS UP THE BYTE POINTER (DEVPTR) AND THE ITEM COUNT (DEVCTR) + ,OF THE CURRENT DEVICE AND RETURNS. + ,MONITOR INTERFACE + , STORAGE: 10 + , ROUTINES CALLED: BUFCLR, ITMSET + , SYMBOLS SET/USED: + , ACCUMULATORS: DEVDAT U PDP U + , ITEM U TAC S/U + , DEVICE DATA BLOCKS: DEVADR U + , DEVCTR S + , DEVPTR S/U + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 22 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + INTERN BPNSET,NEWBUF + + 000246' 550046 000007 NEWBUF: HRRZ TAC,DEVADR(DEVDAT); TAC:=INPUT BUFFER HEADER ADDRESS + 000247' 260140 000124' PUSHJ PDP,BUFCLR; CLEAR INPUT BUFFER. + 000250' 540046 000007 BPNSET: HRR TAC,DEVADR(DEVDAT) + 000251' 515040 007737 HRLZI TAC,7737 + 000252' 404046 000010 AND TAC,DEVPTR(DEVDAT); DEVPTR 0-5:=0, DEVPTR 12:=0 + 000253' 540046 000007 HRR TAC,DEVADR(DEVDAT); DEVPTR 10-35:=C(DEVADR 18-35) + 1 + 000254' 350000 000001 AOS TAC + 000255' 202046 000010 MOVEM TAC,DEVPTR(DEVDAT) + 000256' 260140 000227' PUSHJ PDP,ITMSET; ITEM:=(BUFFER SIZE-1)[36/BYTE SIZE] + 000257' 202206 000011 MOVEM ITEM,DEVCTR(DEVDAT); DEVCTR:=ITEM COUNT + 000260' 263140 000000 POPJ PDP,; RETURN + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 23 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + + ,DEC 06 00 EX COM L PT PRE 02 SETBYT + ,H. R. MORSE 64-12-26 + ,CALLING SEQUENCE + , PUSHJ PDP,SETBYT + , EXIT ALWAYS RETURN HERE + ,SETS TAC 0-5:=0 + , TAC 6-11:=S + , TAC 12-13:=0 + , TAC 14-17:=PROG + ,WHERE S=35 IF DATA MODE (IOS 32-25) IS BINARY (B) + , S=8 IF DATA MODE IS IMAGE (I) + , S=7 IF DATA MODE IS ASCII PACKED (A) + , ASCII LINE (AL) + , ASCII SEQUENCED (AS) + , ASCII SEQUENCED (ASL) + , OR ALTERNATE MODE BREAK (AM) + ,MONITOR INTERFACE + , STORAGE: 12 + , SYMBOLS SET/USED: + , ACCUMULATORS: PROG U TAC S + , PDP U TAC1 S/U + , DEVICE DATA BLOCK: DEVIOS U + INTERN SETBYT + 000261' 200106 000002 SETBYT: MOVE TAC1,DEVIOS(DEVDAT); FETCH DATA MODE, BITS 32-35 0 + 000262' 405100 000017 ANDI TAC1, 17 + 000263' 302100 000013 CAIE TAC1,IB ;DATA MODE IMAGE BINARY? + 000264' 306100 000014 CAIN TAC1,B; IS DATA MODE=BINARY? + 000265' 505040 004407 HRLI TAC,4400+PROG; SET BYTE SIZE TO 36. + 000266' 306100 000010 CAIN TAC1,I; IS DATA MODE=IMAGE? + 000267' 254000 000274' JRST SETBY1 + 000270' 602100 000014 TRNE TAC1,14; IS DATA MODE=ASCII PACKED,ASCII LINE, + 000271' 254000 000273' JRST .+2; ASCII SEQUENCED,OR ASCII SEQUENCED LINE + 000272' 505040 000707 HRLI TAC,700+PROG; SET BYTE SIZE TO 7. + 000273' 263140 000000 POPJ PDP,; RETURN + + 000274' 510046 000004 SETBY1: HLLZ TAC,DEVMOD(DEVDAT) + 000275' 621040 770077 TLZ TAC,770077 + 000276' 661040 000007 TLO TAC,PROG + 000277' 263140 000000 POPJ PDP, + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 24 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + + ,DEC 06 00 EX COM L PT PRE 01 STORE ITEM + ,H.R. MORSE 64-12-26 + ,CALLING SEQUENCE + , PUSHJ PDP,STODAT + , EXIT1 CHECKSUM ERROR + , EXIT2 BLOCK FULL OR BLOCK COMPLETE + , EXIT3 DATA STORED CORRECTLY + ,CALLED FROM AN INPUT SERVICE ROUTINE WITH A DATA ITEM IN AC DAT. + ,STORES THE DATA ITEM IN THE BUFFER, CHECKING TO SEE IF IT WERE + ,THE FIRST ITEM ON THE BUFFER AND SETTING UP THE POINTER AND + ,WORD COUNT APPROPRIATELY CHECKING THE MODE TO SEE IF ANY SPECIAL + ,PROCESSING NEED BE DONE. FOR EXAMPLE, GENERATION OF SEQUENCE + ,NUMBERS PRECEDING EACH LINE IN SEQUENCE MODE, OR THE TERMINATION + ,OF A BUFFER ON CERTAIN CHARACTERS IN OTHER MODES, OR IF THE BUFFER + ,RETURN OCCURS ON AN ERROR CONDITION. THE SECOND RETURN OCCURS + ,ON A BLOCK FULL CONDITION OR BLOCK COMPLETE CONDITION, THE THIRD + ,RETURN OCCURS ON THE DATA STORED CORRECTLY CONDITION. THIS + ,ROUTINE ALSO DOES SOME CHECKING ON INPUT OF BINARY RECORD, + ,PAPER TAPE OR CARDS. + ,CALLING SEQUENCE + , PUSHJ PDP,STOSQD + , XXXX ALWAYS SKIPS + , EXIT ALWAYS RETURNS HERE + ,STORES THE WORD COUNT:=C(DEVPTR 18-35) -C(DEVIAD 18-35) - 1 + ,IN THE BUFFER. + ,MONITOR INTERFACE + , STORAGE: 69 + , ROUTINES CALLED: ASCIA, CKS12, ITMSET, NEWBUF + , SYMBOLS SET/USED: + , ACCUMULATORS: DAT U PDP U + , DEVDAT U TAC S/U + , IOS S/U TAC1 S/U + , ITEM S/U + , DEVICE DATA BLOCK: DEVCTR U DEVPTR S/ + , DEVIAD U DEVSEQ S/ + , IO STATUS WORD: A U I U + , AS U IOBKTL S + , ASL U IODTER S + , B U IOFST S/ + , JOB BUFFER AREA: WORD COUNT S + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 25 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + INTERN STODAT, STOSQD + + 000300' 603000 000004 STODAT: TLNE IOS,IOFST; WILL THE NEXT ITEM BE THE FIRST ITEM + , OF A BUFFER? + 000301' 260140 000246' PUSHJ PDP,NEWBUF; SET UP A NEW BUFFER. ITEM:=(BUFFER + , SIZE - 1)*[36/BYTE SIZE] + 000302' 135100 000000* LDB TAC1,PIOMOD; TAC1:=DATA MODE + 000303' 306100 000014 CAIN TAC1,B; MODE=BINARY? + 000304' 254000 000343' JRST STOBIN + 000305' 621000 000004 TLZ IOS,IOFST + 000306' 136246 000010 STO1: DPBI DAT,DEVPTR(DEVDAT); STORE DATA IN BUFFER. + 000307' 302100 000000 CAIE TAC1,A; MODE=ASCII, IMAGE, OR BINARY? + 000310' 306100 000010 CAIN TAC1,I + 000311' 254000 000323' JRST STOAIB + 000312' 306100 000014 CAIN TAC1,B + 000313' 254000 000323' JRST STOAIB + 000314' 307240 000214 CAIG DAT,214 ;LINE FEED,FORM FEED, OR VERTICAL TAB? + 000315' 305240 000212 CAIGE DAT,212 + 000316' 254000 000320' JRST .+2 ;NO + 000317' 254000 000335' JRST STOSQD ;YES + 000320' 365200 000000* SOJGE ITEM,CPOPJ2; ITEM:=C(ITEM)-1. IS C(ITEM)>OR=0? + 000321' 660000 040000 STOE1: TRO IOS,IOBKTL ;IOBKTL:=1 + 000322' 254000 000056* JRST CPOPJ + 000323' 367200 000320* STOAIB: SOJG ITEM,CPOPJ2; ITEM:=C(ITEM)-1. IS C(ITEM)>0? + 000324' 306100 000000 CAIN TAC1,A; MODE=ASCII? + 000325' 254000 000335' JRST STOSQD + 000326' 306100 000014 CAIN TAC1,B; MODE=BINARY? + 000327' 254000 000353' JRST STOBND + 000330' 260140 000227' STOI: PUSHJ PDP,ITMSET; ITEM:=(BUFFER SIZE-1)*[36/BYTE SIZE] + , - C(DEVCTR) + 000331' 274206 000011 SUB ITEM,DEVCTR(DEVDAT) + 000332' 550106 000007 HRRZ TAC1,DEVIAD(DEVDAT) ;STORE ITEM COUNT INSTEAD OF + 000333' 271200 000001 ADDI ITEM,1 ;IN FIRST WORD OF BUFFER + 000334' 344100 000341' AOJA TAC1,STOSQE + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 26 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + 000335' 200106 000007 STOSQD: MOVE TAC1,DEVIAD(DEVDAT); TAC1:=ADDRESS OF WORD COUNT + 000336' 350000 000002 AOS TAC1 + 000337' 550206 000010 HRRZ ITEM,DEVPTR(DEVDAT); ITEM:=C(DEVPTR 18-25) - + , C(DEVIAD 18-35) -1 + 000340' 274200 000002 SUB ITEM,TAC1 + 000341' 542220 000002 STOSQE: HRRM ITEM,@TAC1 ;WORD COUNT TO FIRST WORD IN BUFFER + 000342' 254000 000065* JRST CPOPJ1; EXIT2. BLOCK COMPLETE + 000343' 627000 000004 STOBIN: TLZN IOS,IOFST; WILL THE NEXT ITEM BE THE FIRST ITEM + 000344' 254000 000306' JRST STO1; OF A BUFFER? IOSFST:=0 + 000345' 550040 000005 HRRZ TAC,DAT + 000346' 313040 000004 CAMLE TAC,ITEM; IS WORD COUNT <OR= (BUFFER SIZE-1)* + 000347' 254000 000321' JRST STOE1; [36/BYTE SIZE]? + 000350' 200200 000001 MOVE ITEM,TAC; ITEM:=WORD COUNT + 000351' 202266 000010 MOVEM DAT,@DEVPTR(DEVDAT); STORE WORD COUNT IN BUFFER + 000352' 254000 000323* JRST CPOPJ2; EXIT3. DATA STORED CORRECTLY. + 000353' 550106 000007 STOBND: HRRZ TAC1,DEVIAD(DEVDAT) + 000354' 260140 000142' PUSHJ PDP,CKS12; COMPUTE CHECKSUM + 000355' 270106 000007 ADD TAC1, DEVIAD(DEVDAT) + 000356' 510120 000002 HLLZ TAC1,@TAC1; DATA CHECKSUM=COMPUTED CHECKSUM? + 000357' 316040 000002 CAMN TAC,TAC1 + 000360' 254000 000342* JRST CPOPJ1; EXIT2. BLOCK COMPLETE + 000361' 660000 100000 TRO IOS,IODTER; IODTER:=1 + 000362' 254000 000322* JRST CPOPJ; EXIT1. CHECKSUM ERROR + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 27 +IOCSS MAC 24-APR-78 23:13 5-17-65 PART 2 + + + + ,DEC 06 00 EX COM L PT PRE 01 UINTQ + ,H.R. MORSE 64-12-26 + ,CALLING SEQUENCE + , PUSHJ PDP, UINT1 + , EXIT ALWAYS RETURNS HERE + ,TAC:=CONTENTYS OF WORD FOLLOWING UUO CALL + ,FROM USERS AREA. + ,MONITOR INTERFACE + , STORAGE: 4 + , SYMBOLS SET/USED: + , ACCUMULATORS: PDP U TAC S/U + , PROG U + INTERN UINTQ + 000363' 200043 777777 UINTQ: MOVE TAC, -1(PDP) ;TAC:=ADDRESS FOLLOWING UUO C + 000364' 505040 000007 HRLI TAC, PROG ;RELOCATE ADDRESS + 000365' 200060 000001 MOVE TAC, @TAC ;TAC:=CONTENTS OF WORD FOLLOW + ;UUO CALL FROM USERS AREA + 000366' 263140 000000 POPJ PDP, ;RETURN + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000400 + +9K CORE USED + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 28 +IOCSS MAC 24-APR-78 23:13 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADRCK 000131' EXT +ADVBFE 000000' INT +ADVBFF 000010' INT +AL 000001 INT +APR 000000 SPD +ASSAS1 000035' +ASSAS2 000036' +ASSASG 000023' INT +ASSCON 400000 INT +ASSIN 000020' INT +ASSPRG 200000 INT +B 000014 INT +BPNSET 000250' INT +BUFC1 000102' +BUFCLC 000071' INT +BUFCLR 000124' INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CKS12 000142' INT +CKS12A 000151' +CLDS 000023' EXT +CLEN 000037' EXT +CLOSB 002000 INT +CLOSE1 000000 EXT +CLRBYT 000166' INT +CLSIN 000002 INT +CLSOUT 000001 INT +CPOPJ 000362' EXT +CPOPJ1 000360' EXT +CPOPJ2 000352' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEV0 000053' +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLG 000044' INT + + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 28-1 +IOCSS MAC 24-APR-78 23:13 SYMBOL TABLE + +DEVLOG 000005 INT +DEVLP0 000046' +DEVLP1 000064' +DEVLST 000063' EXT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVOPR 000060' EXT +DEVPHY 000056' INT +DEVPTR 000010 INT +DEVSER 000003 INT +DEVSRC 000041' INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERROR 000000 EXT +FOLD 000153' +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +ILLMOD 000242' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOALL 000174' INT +IOALL1 000176' +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 28-2 +IOCSS MAC 24-APR-78 23:13 SYMBOL TABLE + +IOIMPM 400000 INT +IOKILL 000207' INT +IONRCK 000100 INT +IORDEL 000100 INT +IORELS 000173' INT +IORET 000020 INT +IOS 000000 INT +IOSET 000211' INT +IOSETC 000215' INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +ITMCNT 000231' INT +ITMCT1 000232' INT +ITMSET 000227' INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000213' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000000 EXT +JOBFF 000117' EXT +LOOKB 040000 INT +MTW 010000 INT +NEWBUF 000246' INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PI 000004 SPD +PICHN 000100 INT +PIOMOD 000302' EXT +PJOBN 000211' EXT +PROG 000007 INT +PUUOAC 000201' EXT +RELEA1 000000 EXT +RELEA3 000173' EXT +RELEA5 000207' EXT +RUN 200000 INT +RUNABL 204000 INT +SCNOFF 000030' EXT +SCNON 000036' EXT +SETBY1 000274' +SETBYT 000261' INT +SETIOS 000236' INT +STO1 000306' +STOAIB 000323' + + IOCSS - IO COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 28-3 +IOCSS MAC 24-APR-78 23:13 SYMBOL TABLE + +STOBIN 000343' +STOBND 000353' +STODAT 000300' INT +STOE1 000321' +STOI 000330' +STOSQD 000335' INT +STOSQE 000341' +SYSTAP 000062' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +UINTQ 000363' INT +USRJDA 000176' EXT +USRMOD 010000 INT +UUO 000014 INT +WAIT1 000000 EXT + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 111 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 111 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 111 + III OOO OOO III NNN NNN III 111111 + III OOO OOO III NNN NNN III 111111 + III OOO OOO III NNN NNN III 111111 + III OOO OOO III NNNNNN NNN III 111 + III OOO OOO III NNNNNN NNN III 111 + III OOO OOO III NNNNNN NNN III 111 + III OOO OOO III NNN NNN NNN III 111 + III OOO OOO III NNN NNN NNN III 111 + III OOO OOO III NNN NNN NNN III 111 + III OOO OOO III NNN NNNNNN III 111 + III OOO OOO III NNN NNNNNN III 111 + III OOO OOO III NNN NNNNNN III 111 + III OOO OOO III NNN NNN III 111 + III OOO OOO III NNN NNN III 111 + III OOO OOO III NNN NNN III 111 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 111111111 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 111111111 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 111111111 + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :IOINI1.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:34 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1816 +File will be deleted after printing + +IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 MINIMAL CONFIGURATION + + XLIST + LIST + ;SOME MACROS FOR DEFINING CONFIGURATION + + DEFINE NAME (A) + <DEFINE NAME1 + <CONFIG: ASCIZ /A/ + INTERNAL CONFIG + > + XP A,0 + SUBTTL A CONFIGURATION + > + + DEFINE DATE (A) + <DEFINE DATE1 + <SYSDAT: ASCIZ /A/ + INTERNAL SYSDAT + >> + + DEFINE VERSION (A,B) + <DEFINE VERS1 + <SYSNUM: XWD ^D'A,^D'B + XP SYSMOD,^D'A + XP SYSVER,^D'B + INTERNAL SYSNUM + >> + + DEFINE CUSPTAPE (A) + <DEFINE CUSP1 + <SYSTAP: SIXBIT /A/ + INTERNAL SYSTAP + >> + + DEFINE ACPDL (J,CHJN,CHJPDN) + < CH'J'N=CHJN + CH'J'PDN=CHJPDN + > + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 2 +IOINI MAC 24-APR-78 01:14 MINIMAL CONFIGURATION + + + NAME <MINIMAL>^DEFINE NAME1 + <CONFIG: ASCIZ /MINIMAL/ + INTERNAL CONFIG + > + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 2 +IOMIN MAC 24-APR-78 02:16 MINIMAL CONFIGURATION + + + DATE <8-16-65>^DEFINE DATE1 + <SYSDAT: ASCIZ /8-16-65/ + INTERNAL SYSDAT + >^ + VERSION 1,4^DEFINE VERS1 + <SYSNUM: XWD ^D1,^D4 + XP SYSMOD,^D1 + XP SYSVER,^D4 + INTERNAL SYSNUM + >^ + CUSPTAPE DTA0^DEFINE CUSP1 + <SYSTAP: SIXBIT /DTA0/ + INTERNAL SYSTAP + >^ + + ;DEFINE THE IO PART OF THE SYSTEM + ;THAT IS: + ; DEFINE INTERRUPT SERVICE ROTUINE TO BE USED + ; ASSIGN DEVICES TO PI CHANNELS + + DEFINE SYSTEM + < + ASSOC APR,6,<> + ASSOC CTY,3,<> + ASSOC SCN,3,<TTY0,TTY1> + ASSOC DTC,4,<DTA0> + > + + 000001 DTSIZ=1 ;MULTIPLE DECTAPE DIRECTORIES + + 000001 SCNLIN=1 + + ;DEFINE HIGHEST AC TO SAVE AND LENGTH OF PD LIST FOR EACH PI CHANNEL + + 000000 ACPDL (1,0,0)^ CH1N=0 + 000000 ACPDL (2,0,0)^ CH2N=0 + 000011 ACPDL (3,11,20)^ CH3N=11 + 000011 ACPDL (4,11,20)^ CH4N=11 + 000000 ACPDL (5,0,0)^ CH5N=0 + 000017 ACPDL (6,17,20^ CH6N=17 + 000000 ACPDL (7,0,0)^ CH7N=0 + TITLE IOINI1 - IO INITIALIZATION PART 1 + 000000' 466231 644632 NAME1^CONFIG: ASCIZ /MINIMAL/ + 000001' 406300 000000 + 000002' 341326 133132 DATE1^SYSDAT: ASCIZ /8-16-65/ + 000003' 331520 000000 + 000004' 000001 000004 VERS1^SYSNUM: XWD ^D1,^D4 + 000005' 446441 200000 CUSP1^SYSTAP: SIXBIT /DTA0/ + + ;CONFIGURATION INDEPENDANT PART OF IOINIT FOLLOWS: + + EXTERNAL ERROR + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 1 +IOINI1 MAC 24-APR-78 04:05 MINIMAL CONFIGURATION + + + ;SETUP CHANNEL SAVE AND RESTORE ROUTINES + + 000000 CHANU1=0 + 000000 CHANU2=0 + 000000 CHANU3=0 + 000000 CHANU4=0 + 000000 CHANU5=0 + 000000 CHANU6=0 + 000000 CHANU7=0 + DEFINE ASSOC(A,NO,D) + <IFE CHANU'NO,< + CHANU'NO=1 + INTERNAL CH'NO'SAV,CH'NO',CH'NO'XIT,CH'NO'SAC + + CH'NO'SAV: 0 + MOVEM CH'NO'N, CH'NO'SAC+CH'NO'N + MOVEI CH'NO'N, CH'NO'SAC + BLT CH'NO'N,CH'NO'SAC+CH'NO'N-1 ;DO ONLY ONCE FOR EACH CHANNEL + MOVE PDP, CH'NO'CJ + JRST @CH'NO'SAV + + CH'NO'SAC: REPEAT CH'NO'N+1,<EXP 0> ;SPACE TO SAVE SOME AC'S + EXP CH'NO'XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + REPEAT CH'NO'PDN-1,<EXP 0> ;REST OF PD LIST + + CH'NO'XIT: MOVSI CH'NO'N, CH'NO'SAC + BLT CH'NO'N, CH'NO'N + JEN @CH'NO + + CH'NO'CJ: XWD -CH'NO'PDN+1,CH'NO'SAC+CH'NO'N+1 ;INIT. SETTING OF P + + CH'NO': 0 ;PC STORED HERE BY JSR + JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + AOS CH'NO'ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + JEN @CH'NO ;AND DISMISS + > + > + ;GENERATE THE SAVE AND RESTORE ROUTINES + + SYSTEM^ + 000006' 000000 000000 CH6SAV: 0 + 000007' 202740 000033' MOVEM CH6N, CH6SAC+CH6N + 000010' 201740 000014' MOVEI CH6N, CH6SAC + 000011' 251740 000032' BLT CH6N,CH6SAC+CH6N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000012' 200140 000057' MOVE PDP, CH6CJ + 000013' 254020 000006' JRST @CH6SAV + 000014' 000000 000000 EXP 0 + 000015' 000000 000000 EXP 0 + 000016' 000000 000000 EXP 0 + 000017' 000000 000000 EXP 0 + 000020' 000000 000000 EXP 0 + 000021' 000000 000000 EXP 0 + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 1-1 +IOINI1 MAC 24-APR-78 04:05 MINIMAL CONFIGURATION + + 000022' 000000 000000 EXP 0 + 000023' 000000 000000 EXP 0 + 000024' 000000 000000 EXP 0 + 000025' 000000 000000 EXP 0 + 000026' 000000 000000 EXP 0 + 000027' 000000 000000 EXP 0 + 000030' 000000 000000 EXP 0 + 000031' 000000 000000 EXP 0 + 000032' 000000 000000 EXP 0 + 000033' 000000 000000 EXP 0 ;SPACE TO SAVE SOM AC'S + 000034' 000000 000054' EXP CH6XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000035' 000000 000000 EXP 0 + 000036' 000000 000000 EXP 0 + 000037' 000000 000000 EXP 0 + 000040' 000000 000000 EXP 0 + 000041' 000000 000000 EXP 0 + 000042' 000000 000000 EXP 0 + 000043' 000000 000000 EXP 0 + 000044' 000000 000000 EXP 0 + 000045' 000000 000000 EXP 0 + 000046' 000000 000000 EXP 0 + 000047' 000000 000000 EXP 0 + 000050' 000000 000000 EXP 0 + 000051' 000000 000000 EXP 0 + 000052' 000000 000000 EXP 0 + 000053' 000000 000000 EXP 0 ;REST OF PD LIST + 000054' 205740 000014' CH6XIT: MOVSI CH6N, CH6SAC + 000055' 251740 000017 BLT CH6N, CH6N + 000056' 254520 000060' JEN @CH6 + 000057' 777761 000034' CH6CJ: XWD -CH6PDN+1,CH6SAC+CH6N+1 ;INIT. SETTING OF P + 000060' 000000 000000 CH6: 0 ;PC STORED HERE BY JSR + 000061' 254000 000062' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000062' 350000 000317' AOS CH6ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000063' 254520 000060' JEN @CH6 ;AND DISMISS + 000064' 000000 000000 CH3SAV: 0 + 000065' 202440 000103' MOVEM CH3N, CH3SAC+CH3N + 000066' 201440 000072' MOVEI CH3N, CH3SAC + 000067' 251440 000102' BLT CH3N,CH3SAC+CH3N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000070' 200140 000127' MOVE PDP, CH3CJ + 000071' 254020 000064' JRST @CH3SAV + 000072' 000000 000000 EXP 0 + 000073' 000000 000000 EXP 0 + 000074' 000000 000000 EXP 0 + 000075' 000000 000000 EXP 0 + 000076' 000000 000000 EXP 0 + 000077' 000000 000000 EXP 0 + 000100' 000000 000000 EXP 0 + 000101' 000000 000000 EXP 0 + 000102' 000000 000000 EXP 0 + 000103' 000000 000000 EXP 0 ;SPACE TO SAVE SOM AC'S + 000104' 000000 000124' EXP CH3XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000105' 000000 000000 EXP 0 + 000106' 000000 000000 EXP 0 + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 1-2 +IOINI1 MAC 24-APR-78 04:05 MINIMAL CONFIGURATION + + 000107' 000000 000000 EXP 0 + 000110' 000000 000000 EXP 0 + 000111' 000000 000000 EXP 0 + 000112' 000000 000000 EXP 0 + 000113' 000000 000000 EXP 0 + 000114' 000000 000000 EXP 0 + 000115' 000000 000000 EXP 0 + 000116' 000000 000000 EXP 0 + 000117' 000000 000000 EXP 0 + 000120' 000000 000000 EXP 0 + 000121' 000000 000000 EXP 0 + 000122' 000000 000000 EXP 0 + 000123' 000000 000000 EXP 0 ;REST OF PD LIST + 000124' 205440 000072' CH3XIT: MOVSI CH3N, CH3SAC + 000125' 251440 000011 BLT CH3N, CH3N + 000126' 254520 000130' JEN @CH3 + 000127' 777761 000104' CH3CJ: XWD -CH3PDN+1,CH3SAC+CH3N+1 ;INIT. SETTING OF P + 000130' 000000 000000 CH3: 0 ;PC STORED HERE BY JSR + 000131' 254000 000132' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000132' 350000 000314' AOS CH3ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000133' 254520 000130' JEN @CH3 ;AND DISMISS + 000134' 000000 000000 CH4SAV: 0 + 000135' 202440 000153' MOVEM CH4N, CH4SAC+CH4N + 000136' 201440 000142' MOVEI CH4N, CH4SAC + 000137' 251440 000152' BLT CH4N,CH4SAC+CH4N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000140' 200140 000177' MOVE PDP, CH4CJ + 000141' 254020 000134' JRST @CH4SAV + 000142' 000000 000000 EXP 0 + 000143' 000000 000000 EXP 0 + 000144' 000000 000000 EXP 0 + 000145' 000000 000000 EXP 0 + 000146' 000000 000000 EXP 0 + 000147' 000000 000000 EXP 0 + 000150' 000000 000000 EXP 0 + 000151' 000000 000000 EXP 0 + 000152' 000000 000000 EXP 0 + 000153' 000000 000000 EXP 0 ;SPACE TO SAVE SOM AC'S + 000154' 000000 000174' EXP CH4XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000155' 000000 000000 EXP 0 + 000156' 000000 000000 EXP 0 + 000157' 000000 000000 EXP 0 + 000160' 000000 000000 EXP 0 + 000161' 000000 000000 EXP 0 + 000162' 000000 000000 EXP 0 + 000163' 000000 000000 EXP 0 + 000164' 000000 000000 EXP 0 + 000165' 000000 000000 EXP 0 + 000166' 000000 000000 EXP 0 + 000167' 000000 000000 EXP 0 + 000170' 000000 000000 EXP 0 + 000171' 000000 000000 EXP 0 + 000172' 000000 000000 EXP 0 + 000173' 000000 000000 EXP 0 ;REST OF PD LIST + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 1-3 +IOINI1 MAC 24-APR-78 04:05 MINIMAL CONFIGURATION + + 000174' 205440 000142' CH4XIT: MOVSI CH4N, CH4SAC + 000175' 251440 000011 BLT CH4N, CH4N + 000176' 254520 000200' JEN @CH4 + 000177' 777761 000154' CH4CJ: XWD -CH4PDN+1,CH4SAC+CH4N+1 ;INIT. SETTING OF P + 000200' 000000 000000 CH4: 0 ;PC STORED HERE BY JSR + 000201' 254000 000202' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000202' 350000 000315' AOS CH4ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000203' 254520 000200' JEN @CH4 ;AND DISMISS + + ;SET UP NULL CHANNEL ROUTINES FOR UNUSED CHANNELS + + DEFINE NULCHN(J) + < + INTERNAL CH'J,CH'J'XIT + CH'J: 0 + CH'J'XIT: AOS CH'J'ERR + JEN @CH'J + > + + IFE CHANU1,<NULCHN(1)>^ + 000204' 000000 000000 CH1: 0 + 000205' 350000 000312' CH1XIT: AOS CH1ERR + 000206' 254520 000204' JEN @CH1 + IFE CHANU2,<NULCHN(2)>^ + 000207' 000000 000000 CH2: 0 + 000210' 350000 000313' CH2XIT: AOS CH2ERR + 000211' 254520 000207' JEN @CH2 + IFE CHANU3,<NULCHN(3)> + IFE CHANU4,<NULCHN(4)> + IFE CHANU5,<NULCHN(5)>^ + 000212' 000000 000000 CH5: 0 + 000213' 350000 000316' CH5XIT: AOS CH5ERR + 000214' 254520 000212' JEN @CH5 + IFE CHANU6,<NULCHN(6)> + IFE CHANU7,<NULCHN(7)>^ + 000215' 000000 000000 CH7: 0 + 000216' 350000 000320' CH7XIT: AOS CH7ERR + 000217' 254520 000215' JEN @CH7 + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 2 +IOINI1 MAC 24-APR-78 04:05 MINIMAL CONFIGURATION + + + + ;ASSIGN DEVICE TO CHANNELS AND SETUP CORESPONDENCE TABLE + ;OF CHANNELS TO SERVICE ROUTINES + + DEFINE ASSOC (A,N,D) + < A'RET=CH'N'XIT + A'SAV=CH'N'SAV + A'SAC=CH'N'SAC + A'CHL=CH'N + A'CHN=N + A'BIT=1 + REPEAT 7-N,<A'BIT=A'BIT*2> + A'OFF=1000+A'BIT ;CONO PI, A'OFF WIL TURN CHANNEL OFF + A'ON=2000+A'BIT ;TURN BACK ON + A'ACT=4000+A'BIT ;FORCE INTERRUPT ON CHAN. + INTERN A'RET, A'SAV, A'CHL, A'CHN, A'SAC + INTERNAL A'OFF,A'ON,A'ACT,A'BIT + XWD A'CHL,A'INT + EXTERNAL A'INT + > + + INTERNAL DEVINT + 000220' DEVINT: SYSTEM^ + 000220' 000060' 000000* XWD APRCHL,APRINT + 000221' 000130' 000000* XWD CTYCHL,CTYINT + 000222' 000130' 000000* XWD SCNCHL,SCNINT + 000223' 000200' 000000* XWD DTCCHL,DTCINT + 000004 NDEV=.-DEVINT ;NO. OF DEVICE INTERUPT SERVICE ROUTINES + 000003 NDEVM1=NDEV-1 ;(USED BY ONCE) + INTERNAL NDEVM1 + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 3 +IOINI1 MAC 24-APR-78 04:05 MINIMAL CONFIGURATION + + + + ;INITIALIZE SOME IO DEVICES + ;IOINI CALLED BY A PUSHJ PDP, FROM SYSINI AT SYSTEM INITIALIZATION + + DEFINE IOINIT (A) + <IRP A + < EXTERNAL A'INI + PUSHJ PDP,A'INI + >> + + DEFINE ASSOC (A,B,C) + < IFIDN <A><MTC>,< IOINIT MTC> + IFIDN <A><DTC>,< IOINIT DTC> + IFIDN <A><LPT>,< IOINIT LPT> + IFIDN <A><SCN>,< IOINIT SCN> + IFIDN <A><PTP>,<IOINIT PTP> + IFIDN <A><PTR>,<IOINIT PTR> + > + + INTERNAL IOINI + + 000224' IOINI: SYSTEM^ + 000224' 260140 000000* PUSHJ PDP,SCNINI + 000225' 260140 000000* PUSHJ PDP,DTCINI + 000226' 254000 000000* JRST CLKINI ;ALWAYS INIT. CLOCK + + EXTERNAL CLKINI + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 4 +IOINI1 MAC 24-APR-78 04:05 MINIMAL CONFIGURATION + + + + ;CLOCK CONTROL PARAMETERS + + 004006 CLDS=4000+APRCHN ;CLOCK DISABLE + 000206 CLEN=200+APRCHN ;CLOCK ENABLE + + INTERNAL CLDS,CLEN + + ;BYTE POINTERS + + 000227' 270400 000014 PUUOAC: POINT 4,UUO,12 ;UUO AC FIELD + 000230' 000400 000000 PIOMOD: POINT 4,IOS,35 ;MODE BITS + 000231' 331106 000001 PJOBN: POINT 9,DEVCHR(DEVDAT),8 ;DEVICE JOB ASSIGNMENT + 000232' 220406 000001 PJDCHN: POINT 4,DEVCHR(DEVDAT),17 ;JOB DEVICE CHANNEL NO. + 000233' 140606 000001 PUNIT: POINT 6,DEVCHR(DEVDAT),23 ;DEVICE UNIT NO. + + INTERNAL PUUOAC,PIOMOD,PJOBN,PJDCHN,PUNIT + + ;COMMON SUBROUTINE RETURNS + + 000234' 350003 000000 CPOPJ2: AOS (PDP) + 000235' 350003 000000 CPOPJ1: AOS (PDP) + 000236' 263140 000000 CPOPJ: POPJ PDP, + + INTERNAL CPOPJ,CPOPJ1,CPOPJ2 + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 5 +IOINI1 MAC 24-APR-78 04:05 MINIMAL CONFIGURATION + + + ,SYSTEM DATA STORAGE + + + INTERNAL JOB,JOBADR,JBTADR,JBTSTS,USRREL,USRINF,USRJDA + INTERNAL USRPDP,JOBDAT,USRDDT,USRSAV,USRUXT,USRLO,USRHI + INTERNAL COMCNT,IOCOMP,USRPOV,STOPU,SCHEDF,TIME,JBTAD1 + INTERNAL MTAVAL,DCAVAL,DTAVAL,MTREQ,DCREQ,DTREQ,TTYTAB,CORTAB + INTERNAL CH1ERR,CH2ERR,CH3ERR,CH4ERR,CH5ERR,CH6ERR,CH7ERR + INTERNAL CORLST,CORTAB,CORTAL,SYSEND,SYSBEG,DEVOPR + + 000000 JOBN=0 ;DEFINE NO. OF JOBS (0 THRU JOBN-1) + ;THERE MUST BE MORE TTY DEVICE DATA BLCKS THAN JOBS. + + DEFINE ASSOC (A,N,D) + <IRP D,<IFIDN <A><SCN>,<JOBN=JOBN+1>>> + SYSTEM^ + 777777 777776 MJOBN=-JOBN + INTERNAL JOBN,MJOBN + + 000237' SYSBEG: ;FIRST LOC IN SYSTEM DATA AREA + XP SYSBG1,SYSBEG+1 ;FIRST LOC+1 + 000237' 000000 000000 JOB: 0 ;CURRENT JOB NUMBER EXCEPT WEN SCHEDF IS NON-ZERO + 000240' 000000 000000 JOBADR: 0 ;CONTAINS ADDRESS OF JOB CURRENTLY RUNNING + 000241' 000000 000000 JOBDAT: 0 ;CONTAINS ADDRESS OF JOB DATA AREA + + 000242' JBTADR: BLOCK JOBN ;C(LH)=PROTECT, C(RH)=RELOCATION + XP JBTAD1,JBTADR+1 ;ADDRESS OF JOB 1(USED BY SYSMAK) + 000244' JBTSTS: BLOCK JOBN ;CONTAINS STATUS INFORMATION FOR EACH J + + 000246' 000000 000000 USRPDP: 0 ;USER PUSH DOWN POINTER + 000247' 000000 000000 USRREL: 0 ;LH=0, RH CONTAINS CONTENTS OF PROTECTION REGISTER + 000250' USRLO: ;FIRST LOC CLEARD BY SETUSR SUBROUTINE + 000250' 000000 000000 USRUXT: 0 ;UNUSED, JOBUXT USED TO SAVE UUO PC(UUO0) + 000251' 000000 000000 USRLEV: 0 ;UNUSED, JOBLEV USED TO SAVE LOC. 40 + 000252' 000000 000000 USRSAV: 0 ;TEMPORARY STORAGE FOR UUO HANDLER + 000253' 000000 000000 USRPOV: 0 ;PUSH DOWN OVERFLOW TRAP + 000254' BLOCK 2 + 000256' 000000 000000 USRINF: 0 ;UN LAYED OUT USER INFORMATION + 000257' USRJDA: BLOCK 20 ;RH=JOB DEVICE ASSIGNMENTS FOR THIS USER,LH=UUOS + XP USRHI,.-1 ;LAST LOC CLEARED BY SETUSR ROUTINE + XP USRPFI,.-1 ;LAST LOC PROTECTED FROM IO SERVICE + XP USRPFU,. ;LAST LOC PROTECTED FROM USER PROGRAM + 000277' 000000 000000 USRDDT: 0 ;STARTING ADDR OF USER DDT + + ;DEVICE JUSTR BECOME AVAILABLE FLAGS + 000300' 000000 000000 MTAVAL: 0 ;MAGNETIC TAPE + 000301' 000000 000000 DCAVAL: 0 ;DATA CONTROL + 000302' 000000 000000 DTAVAL: 0 ;DECTAPE + + ;NUMBER OF JOBS WAITING FOR DEVICES(-1=NONE, 0=1 USING, 1=1 USING) + 000303' 777777 777777 MTREQ: -1 ;MAGNETIC TAPE + 000304' 777777 777777 DCREQ: -1 ;DATA CONTROL + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 5-1 +IOINI1 MAC 24-APR-78 04:05 MINIMAL CONFIGURATION + + 000305' 777777 777777 DTREQ: -1 ;DECTAPE + 000306' 000000 000000 IOCOMP: 0 ;NUMBER OF USERS IN IO WAIT STATE + 000307' 000000 000000 COMCNT: 0 ;NUMBER OF COMMANDS TYPED-IN BUT NOT DECODED + 000310' 000000 000000 STOPU: 0 ;NON-ZERO WHEN CLOCK INTERRUPT FORCED TO STOP USER + 000311' 000000 000000 SCHEDF: 0 ;NON-ZERO WHEN CLOCK ROUTINE IS SCHEDULING + + 000312' 000000 000000 CH1ERR: 0 ;SPURIOUS INTERRUPT COUNTS FOR EACH CHANNEL + 000313' 000000 000000 CH2ERR: 0 + 000314' 000000 000000 CH3ERR: 0 + 000315' 000000 000000 CH4ERR: 0 + 000316' 000000 000000 CH5ERR: 0 + 000317' 000000 000000 CH6ERR: 0 + 000320' 000000 000000 CH7ERR: 0 + + 000251' USRLO1=USRLO+1 + INTERNAL USRLO1 + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 6 +IOINI1 MAC 24-APR-78 04:05 MINIMAL CONFIGURATION + + + 000321' 000000 000000 TIME: 0 ;TIME SYSTEM HAS RUN IN 60THS OF A SECOND + + + XP TTYLEN,SCNLIN+1 ;LENGTH OF TTY TRANSLATOR TABLES(INCLUDING CTY) + 000322' TTYTAB: BLOCK TTYLEN ;TTY TRANSLATOR TABLE + ;SIGN BIT = 1 IF COMMAND JUST TYPED + ;BITS 1 -9, JOB CONSOLE IS ATTACHED TO + ;BITS 18-35, THE DEVICE DATA BLOCK FOR + 000324' 000000 000000 DEVOPR: 0 ;SIXBIT PHYSICAL NAME OF OPERATORS + ;CONSOLE SET BY SCNSER TO FIRST ACTIVE TTY. + ;LOCATIONS FOR CORE ALLOCATION + XP CORBLK,^D256 ;NO. OF 1K BLOCKS POSSIBLE + 000325' CORTAB: BLOCK <CORBLK>/^D36+1 ;1K BLOCK USE BIT TABLE + ;A 1 MEANS BLOCK IS IN USE + 000335' 000000 000000 CORLST: 0 ;1 BIT BYTE POINTER TO LAST FREE BLOCK POSSIBLE + 000336' 000000 000000 CORTAL: 0 ;TOTAL NO. OF FREE CORE BLOCKS LEFT + ;CORLST AND CORTAL ARE SET UP AT SYSTEM INITIALIZATION + + 000336' SYSEND=.-1 ;LAST LOC. CLEARED BY SYSINI + + INTERNAL SYSSIZ + EXTERNAL SYSFIN + 000337' 000000 000000* SYSSIZ: EXP SYSFIN ;SIZE OF MONITOR(LAST LOC. USED) + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 7 +IOINI1 MAC 24-APR-78 04:05 MINIMAL CONFIGURATION + + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000340 + +9K CORE USED + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 8 +IOINI1 MAC 24-APR-78 04:05 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APRACT 004002 INT +APRBIT 000002 INT +APRCHL 000060' INT +APRCHN 000006 INT +APRINT 000220' EXT +APROFF 001002 INT +APRON 002002 INT +APRRET 000054' INT +APRSAC 000014' INT +APRSAV 000006' INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CH1 000204' INT +CH1ERR 000312' INT +CH1N 000000 +CH1PDN 000000 +CH1XIT 000205' INT +CH2 000207' INT +CH2ERR 000313' INT +CH2N 000000 +CH2PDN 000000 +CH2XIT 000210' INT +CH3 000130' INT +CH3CJ 000127' +CH3ERR 000314' INT +CH3N 000011 +CH3PDN 000020 +CH3SAC 000072' INT +CH3SAV 000064' INT +CH3XIT 000124' INT +CH4 000200' INT +CH4CJ 000177' +CH4ERR 000315' INT +CH4N 000011 +CH4PDN 000020 +CH4SAC 000142' INT +CH4SAV 000134' INT +CH4XIT 000174' INT +CH5 000212' INT +CH5ERR 000316' INT +CH5N 000000 +CH5PDN 000000 + + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 8-1 +IOINI1 MAC 24-APR-78 04:05 SYMBOL TABLE + +CH5XIT 000213' INT +CH6 000060' INT +CH6CJ 000057' +CH6ERR 000317' INT +CH6N 000017 +CH6PDN 000020 +CH6SAC 000014' INT +CH6SAV 000006' INT +CH6XIT 000054' INT +CH7 000215' INT +CH7ERR 000320' INT +CH7N 000000 +CH7PDN 000000 +CH7XIT 000216' INT +CHANU1 000000 +CHANU2 000000 +CHANU3 000001 +CHANU4 000001 +CHANU5 000000 +CHANU6 000001 +CHANU7 000000 +CLDS 004006 INT +CLEN 000206 INT +CLKINI 000226' EXT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +COMCNT 000307' INT +CONFIG 000000' INT +CORBLK 000400 INT +CORLST 000335' INT +CORTAB 000325' INT +CORTAL 000336' INT +CPOPJ 000236' INT +CPOPJ1 000235' INT +CPOPJ2 000234' INT +CTYACT 004020 INT +CTYBIT 000020 INT +CTYCHL 000130' INT +CTYCHN 000003 INT +CTYINT 000221' EXT +CTYOFF 001020 INT +CTYON 002020 INT +CTYRET 000124' INT +CTYSAC 000072' INT +CTYSAV 000064' INT +D 000017 INT +DAT 000005 INT +DCAVAL 000301' INT + + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 8-2 +IOINI1 MAC 24-APR-78 04:05 SYMBOL TABLE + +DCL 000001 INT +DCREQ 000304' INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVINT 000220' INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVOPR 000324' INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTAVAL 000302' INT +DTCACT 004010 INT +DTCBIT 000010 INT +DTCCHL 000200' INT +DTCCHN 000004 INT +DTCINI 000225' EXT +DTCINT 000223' EXT +DTCOFF 001010 INT +DTCON 002010 INT +DTCRET 000174' INT +DTCSAC 000142' INT +DTCSAV 000134' INT +DTREQ 000305' INT +DTSIZ 000001 +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 8-3 +IOINI1 MAC 24-APR-78 04:05 SYMBOL TABLE + +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERROR 000000 EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCOMP 000306' INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IOINI 000224' INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTAD1 000243' INT +JBTADR 000242' INT +JBTSTS 000244' INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000237' INT +JOBADR 000240' INT +JOBDAT 000241' INT +JOBN 000002 INT +LOOKB 040000 INT +MINIMA 000000 INT +MJOBN 777777 777776 INT + + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 8-4 +IOINI1 MAC 24-APR-78 04:05 SYMBOL TABLE + +MTAVAL 000300' INT +MTREQ 000303' INT +MTW 010000 INT +NDEV 000004 +NDEVM1 000003 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PIOMOD 000230' INT +PJDCHN 000232' INT +PJOBN 000231' INT +PROG 000007 INT +PUNIT 000233' INT +PUUOAC 000227' INT +RUN 200000 INT +RUNABL 204000 INT +SCHEDF 000311' INT +SCNACT 004020 INT +SCNBIT 000020 INT +SCNCHL 000130' INT +SCNCHN 000003 INT +SCNINI 000224' EXT +SCNINT 000222' EXT +SCNLIN 000001 +SCNOFF 001020 INT +SCNON 002020 INT +SCNRET 000124' INT +SCNSAC 000072' INT +SCNSAV 000064' INT +STOPU 000310' INT +SYSBEG 000237' INT +SYSBG1 000240' INT +SYSDAT 000002' INT +SYSEND 000336' INT +SYSFIN 000337' EXT +SYSMOD 000001 INT +SYSNUM 000004' INT +SYSSIZ 000337' INT +SYSTAP 000005' INT +SYSVER 000004 INT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TIME 000321' INT +TTYATC 020000 INT +TTYLEN 000002 INT +TTYTAB 000322' INT +TTYUSE 010000 INT + + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 8-5 +IOINI1 MAC 24-APR-78 04:05 SYMBOL TABLE + +USRDDT 000277' INT +USRHI 000276' INT +USRINF 000256' INT +USRJDA 000257' INT +USRLEV 000251' +USRLO 000250' INT +USRLO1 000251' INT +USRMOD 010000 INT +USRPDP 000246' INT +USRPFI 000276' INT +USRPFU 000277' INT +USRPOV 000253' INT +USRREL 000247' INT +USRSAV 000252' INT +USRUXT 000250' INT +UUO 000014 INT + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 222222222 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 222222222 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 222222222 + III OOO OOO III NNN NNN III 222 222 + III OOO OOO III NNN NNN III 222 222 + III OOO OOO III NNN NNN III 222 222 + III OOO OOO III NNNNNN NNN III 222 + III OOO OOO III NNNNNN NNN III 222 + III OOO OOO III NNNNNN NNN III 222 + III OOO OOO III NNN NNN NNN III 222 + III OOO OOO III NNN NNN NNN III 222 + III OOO OOO III NNN NNN NNN III 222 + III OOO OOO III NNN NNNNNN III 222 + III OOO OOO III NNN NNNNNN III 222 + III OOO OOO III NNN NNNNNN III 222 + III OOO OOO III NNN NNN III 222 + III OOO OOO III NNN NNN III 222 + III OOO OOO III NNN NNN III 222 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 222222222222222 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 222222222222222 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 222222222222222 + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :IOINI2.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:34 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1796 +File will be deleted after printing + +IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 MINIMAL CONFIGURATION + + XLIST + LIST + ;SOME MACROS FOR DEFINING CONFIGURATION + + DEFINE NAME (A) + <DEFINE NAME1 + <CONFIG: ASCIZ /A/ + INTERNAL CONFIG + > + XP A,0 + SUBTTL A CONFIGURATION + > + + DEFINE DATE (A) + <DEFINE DATE1 + <SYSDAT: ASCIZ /A/ + INTERNAL SYSDAT + >> + + DEFINE VERSION (A,B) + <DEFINE VERS1 + <SYSNUM: XWD ^D'A,^D'B + XP SYSMOD,^D'A + XP SYSVER,^D'B + INTERNAL SYSNUM + >> + + DEFINE CUSPTAPE (A) + <DEFINE CUSP1 + <SYSTAP: SIXBIT /A/ + INTERNAL SYSTAP + >> + + DEFINE ACPDL (J,CHJN,CHJPDN) + < CH'J'N=CHJN + CH'J'PDN=CHJPDN + > + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 2 +IOINI MAC 24-APR-78 01:14 MINIMAL CONFIGURATION + + + NAME <MINIMAL>^DEFINE NAME1 + <CONFIG: ASCIZ /MINIMAL/ + INTERNAL CONFIG + > + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 2 +IOMIN MAC 24-APR-78 02:16 MINIMAL CONFIGURATION + + + DATE <8-16-65>^DEFINE DATE1 + <SYSDAT: ASCIZ /8-16-65/ + INTERNAL SYSDAT + >^ + VERSION 1,4^DEFINE VERS1 + <SYSNUM: XWD ^D1,^D4 + XP SYSMOD,^D1 + XP SYSVER,^D4 + INTERNAL SYSNUM + >^ + CUSPTAPE DTA0^DEFINE CUSP1 + <SYSTAP: SIXBIT /DTA0/ + INTERNAL SYSTAP + >^ + + ;DEFINE THE IO PART OF THE SYSTEM + ;THAT IS: + ; DEFINE INTERRUPT SERVICE ROTUINE TO BE USED + ; ASSIGN DEVICES TO PI CHANNELS + + DEFINE SYSTEM + < + ASSOC APR,6,<> + ASSOC CTY,3,<> + ASSOC SCN,3,<TTY0,TTY1> + ASSOC DTC,4,<DTA0> + > + + 000001 DTSIZ=1 ;MULTIPLE DECTAPE DIRECTORIES + + 000001 SCNLIN=1 + + ;DEFINE HIGHEST AC TO SAVE AND LENGTH OF PD LIST FOR EACH PI CHANNEL + + 000000 ACPDL (1,0,0)^ CH1N=0 + 000000 ACPDL (2,0,0)^ CH2N=0 + 000011 ACPDL (3,11,20)^ CH3N=11 + 000011 ACPDL (4,11,20)^ CH4N=11 + 000000 ACPDL (5,0,0)^ CH5N=0 + 000017 ACPDL (6,17,20^ CH6N=17 + 000000 ACPDL (7,0,0)^ CH7N=0 + TITLE IOINI2 - IO INITIALIZATION PART 2 + + ;DEFINITIONS OF DEVCHN AND DEVBIT + ;THESE ALSO OCCUR IN IOINT1 + + DEFINE ASSOC (A,N,D) + < + A'CHN=N + > + + SYSTEM^ + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 1 +IOINI2 MAC 24-APR-78 03:06 MINIMAL CONFIGURATION + + + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 2 +IOINI2 MAC 24-APR-78 03:06 MINIMAL CONFIGURATION + + + + ;APR PIP BITS + + 000001 APRBIT=1 + 000002 REPEAT 7-APRCHN,<APRBIT=APRBIT*2> + XP PION,200 ;CONO PI,PION TURNS PI SYSTEM ON + XP PIOFF,400 ;TURN IT OFF + XP PICLK,PION+1B24+APRBIT ;TURN PI ON, AND FORCE CLOCK INT. + XP CLKOFF,1000+APRCHN ;CONO APR,CLKOFF TURNS CLOCK FLAG OFF + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 3 +IOINI2 MAC 24-APR-78 03:06 MINIMAL CONFIGURATION + + + + ;ASSEMBLE ALL DEVICE DATA BLOCKS AND LINK THEM TOGETHER + + DEFINE SCNDDB (A,B,C) + < INTERNAL C'DB + C'DB: ZZ=. + SIXBIT /C/ + XWD A'CHN*PICHN,STTYBF+1 ;LONG ENOUGH FOR PRINTING + ;SEQUENCE CARD IMAGE. + ;USER BUFFERS ARE 2 WORDS + ;LONGER THEN THE MONITORY TTY BUFFERS. + 0 + EXTERNAL TTYDSP + XWD C,TTYDSP + XWD DVTTY+DVIN+DVOUT,3 + 0 + 0 + XWD PROG,0 + XWD PROG,0 + XP TTYPTR,.-ZZ + 0 + XP TTYCTR,.-ZZ + 0 + XP TTYSAV,.-ZZ + 0 + XP TTYBUF,.-ZZ + XP TTYBM1,TTYBUF-1 + XP STTYBF,20 + XP STTYB1,STTYBF+1 ;LENGTH+1 + BLOCK STTYBF + XP TTYBFE,.-ZZ-1 + + ;LINE NO. PARAMETERS + XP TTYLEN,SCNLIN+1 ;LENGTH OF TTY TRANSLATOR TABLE(INCLUDE TTY) + XP TSCNLN,SCNLIN-1 ;HIGHEST TTY LINE NO.(NOT COUNTING CTY) + XP TCONLN,TSCNLN+1 ;CTY LINE NUMBER + XP MTTYLN,-TTYLEN ;NEGATIVEL LENGTH OF TRANSLATOR TABLE + XP FSNCHN,SCNCHN*101 ;CHANNEL ASSIGNED, FOR FULL DUPLEX SCN. + XP TTYLST,TTY0DB ;FIRST TTY DEVICE DATA BLOCK + > + + ;NEG. NO. OF TELTYPE DEVICE DATA BLOCKS + + 000000 MLTTYL=0 + DEFINE ASSOC (A,N,D) + <IRP D,<IFIDN <A>,<SCN>,<MLTTYL=MLTTYL-1>>> + + SYSTEM^ + + INTERNAL MLTTYL + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 4 +IOINI2 MAC 24-APR-78 03:06 MINIMAL CONFIGURATION + + + + ;MAG TAPE DEVICE DATA BLOCK + + 000000 MTCNUM=0 + + DEFINE MTCDDB (A,B,C) + < INTERNAL C'DB + C'DB: SIXBIT /C/ + MTCNUM=MTCNUM+1 + XWD IORET+A'CHN*PICHN,<MTCNUM-1>*10000+201 + + 0 + XWD C,MTDISP + EXTERNAL MTDISP + XWD 4400+DVMTA+DVIN+DVOUT,154403 + 0 + 0 + XWD PROG,0 + XWD PROG,0 + > + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 5 +IOINI2 MAC 24-APR-78 03:06 MINIMAL CONFIGURATION + + + ;DECTAPE DEVICE DATA BLOCK + + 000000 DTCNUM=0 + + DEFINE DTCDDB (A,B,C) + < INTERNAL C'DB + C'DB: ZZ=. + SIXBIT /C/ + DTCNUM=DTCNUM+1 + XWD IORET+A'CHN*PICHN,<DTCNUM-1>*10000+201 + 0 + XWD C,UTDSP + EXTERNAL UTDSP + XWD 4400+DVDIR+DVIN+DVOUT,154403 + 0 + 0 + 0 + 0 + XP UFREE,.-ZZ ;NEXT FREE BLOCK NO. + 0 + XP UDIR,.-ZZ ;LINK TO DIRECTORY IN DATA BLOCK + IFE DTSIZ,< EXP DIRBUF + > + IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> + > + > + + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 6 +IOINI2 MAC 24-APR-78 03:06 MINIMAL CONFIGURATION + + + + ;LINE PRINTER DEVICE DTA BLOCK + + DEFINE LPTDDB (A,B,C) + <INTERNAL LPTDB,LPTDAT,LPTCHR,LPTIOS,LPTSER,LPTMOD + INTERNAL LPTBUF,LPTPTR,LPTADR,LPTSV1 + EXTERNAL LPTDSP + + LPTDB: + LPTDAT: SIXBIT /LPT/ + LPTCHR: XWD A'CHN*PICHN,32 + LPTIOS: 0 + LPTSER: XWD C,LPTDSP + LPTMOD: XWD 0+DVOUT,3 + 0 + LPTBUF: 0 + LPTPTR: 0 + LPTADR: XWD PROG,0 + LPTSV1: 0 + + XP LPTCLB,LPTCHN+200 ;PI CHANNEL AND BUSY FLAG + XP LPTCHB,11*LPTCHN ;LINE PRINTER ERROR AND DATA CHANNELS + > + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 7 +IOINI2 MAC 24-APR-78 03:06 MINIMAL CONFIGURATION + + + + ;CARD READER DEVICE DATA BLOCK + + DEFINE CDRDDB (A,B,C) + <INTERNAL CDRDB,CDRDAT,CRDIS + EXTERNAL CDRDSP + + CDRDB: + CDRDAT: SIXBIT /CDR/ + XWD A'CHN*PICHN,34 ;LONG ENOUGHT FOR BINARY CARDS + 0 + XWD C,CDRDSP + XWD DVCDR+1400+DVIN,14403 + 0 + 0 + XWD PROG,0 + 0 + 0 + CRDIS: JRST . + > + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 8 +IOINI2 MAC 24-APR-78 03:06 MINIMAL CONFIGURATION + + + + ;PAPER TAPE READER DEVICE DATA BLOCK + + DEFINE PTRDDB (A,B,C) + <INTERNAL PTRDB,PTRDAT,PTRCHR,PTRIOS,PTRSER + INTERNAL PTRMOD,PTRBUF,PTRADR,PTRPTR,PTRCTR,PTRSVC,PTRSV1 + EXTERNAL PTRDSP + + PTRDB: + PTRDAT: SIXBIT /PTR/ + PTRCHR: XWD A'CHN*PICHN,41 + PTRIOS: 0 + PTRSER: XWD C,PTRDSP + PTRMOD: XWD 1000+DVIN,14403 + 0 + PTRBUF: 0 + PTRADR: XWD PROG,0 + PTRPTR: 0 + PTRCTR: 0 + PTRSVC: 0 + PTRSV1: 0 + > + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 9 +IOINI2 MAC 24-APR-78 03:06 MINIMAL CONFIGURATION + + + + ;PAPER TAPE PUNCH DEVICE DATA BLOCK + + DEFINE PTPDDB (A,B,C) + <INTERNAL PTPDB,PTPDAT,PTPCHR,PTPIOS,PTPSER,PTPMOD,PTPBUF + INTERNAL PTPPTR,PTPADR,PTPCTR,PTPCNT,PTPCHA,PTPSIO + EXTERNAL PTPDSP + + PTPDB: + PTPDAT: SIXBIT /PTP/ + PTPCHR: XWD A'CHN*PICHN,41 + PTPIOS: 0 + PTPSER: XWD C,PTPDSP + PTPMOD: XWD 1000+DVOUT,14403 + 0 + PTPBUF: 0 + PTPPTR: 0 + PTPADR: XWD PROG,0 + PTPCTR: 0 + PTPCNT: 0 + PTPCHA: 0 + PTPSIO: 0 + > + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 10 +IOINI2 MAC 24-APR-78 03:06 MINIMAL CONFIGURATION + + + + ;GENERATE DEVICE DATA BLOCKS NEEDED FOR THIS CONFIGURATION + + DEFINE ASSOC (A,B,C) + < + IRP C,< + ;DEFINE FORWARD LINL SYMBOL + LINK + ; + ; + ; + A'DDB A,B,C + + C=0 ;SET LINK TO 0(IN CASE THIS IS LAST DDB) + DEFINE LINK + <C=.> + > + > + + INTERNAL DEVLST + + 000000' 000001' 000000 DEVLST: XWD FIRDB,0 ;BEGINNING OF DEVICE DATA BLOCK CHAIN + + DEFINE LINK + <FIRDB=.> + + SYSTEM^ + 000001' 646471 200000 SIXBIT /TTY0/ + 000002' 000300 000021 XWD SCNCHN*PICHN,STTYBF+1 ;LONG ENOUGH FOR PRINTING + 000003' 000000 000000 0 + 000004' 000035' 000000* XWD TTY0,TTYDSP + 000005' 000013 000003 XWD DVTTY+DVIN+DVOUT,3 + 000006' 000000 000000 0 + 000007' 000000 000000 0 + 000010' 000007 000000 XWD PROG,0 + 000011' 000007 000000 XWD PROG,0 + 000012' 000000 000000 0 + 000013' 000000 000000 0 + 000014' 000000 000000 0 + 000035' 646471 210000 SIXBIT /TTY1/ + 000036' 000300 000021 XWD SCNCHN*PICHN,STTYBF+1 ;LONG ENOUGH FOR PRINTING + 000037' 000000 000000 0 + 000040' 000071' 000004* XWD TTY1,TTYDSP + 000041' 000013 000003 XWD DVTTY+DVIN+DVOUT,3 + 000042' 000000 000000 0 + 000043' 000000 000000 0 + 000044' 000007 000000 XWD PROG,0 + 000045' 000007 000000 XWD PROG,0 + 000046' 000000 000000 0 + 000047' 000000 000000 0 + 000050' 000000 000000 0 + 000071' 446441 200000 SIXBIT /DTA0/ + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 10-1 +IOINI2 MAC 24-APR-78 03:06 MINIMAL CONFIGURATION + + 000072' 000420 000201 XWD IORET+DTCCHN*PICHN,<DTCNUM-1>*10000+201 + 000073' 000000 000000 0 + 000074' 000000 000000* XWD DTA0,UTDSP + 000075' 004407 154403 XWD 4400+DVDIR+DVIN+DVOUT,154403 + 000076' 000000 000000 0 + 000077' 000000 000000 0 + 000100' 000000 000000 0 + 000101' 000000 000000 0 + 000102' 000000 000000 0 + 000103' 000000 000104' IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 11 +IOINI2 MAC 24-APR-78 03:06 MINIMAL CONFIGURATION + + + + 000104' LIT + + IFE DTSIZ,< DIRBUF: BLOCK 200 + INTERNAL DIRBUF + > + + 000104' IFN DTSIZ,<DTDIR: BLOCK DTCNUM*200 + INTERNAL DTDIR + > + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000304 + +10K CORE USED + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 12 +IOINI2 MAC 24-APR-78 03:06 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APRBIT 000002 +APRCHN 000006 +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CH1N 000000 +CH1PDN 000000 +CH2N 000000 +CH2PDN 000000 +CH3N 000011 +CH3PDN 000020 +CH4N 000011 +CH4PDN 000020 +CH5N 000000 +CH5PDN 000000 +CH6N 000017 +CH6PDN 000020 +CH7N 000000 +CH7PDN 000000 +CLKOFF 001006 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CTYCHN 000003 +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT + + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 12-1 +IOINI2 MAC 24-APR-78 03:06 SYMBOL TABLE + +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVLST 000000' INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTA0 000000 +DTA0DB 000071' INT +DTCCHN 000004 +DTCNUM 000001 +DTDIR 000104' INT +DTSIZ 000001 +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +FIRDB 000001' +FSNCHN 000303 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT + + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 12-2 +IOINI2 MAC 24-APR-78 03:06 SYMBOL TABLE + +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +MINIMA 000000 INT +MLTTYL 777777 777776 INT +MTCNUM 000000 +MTTYLN 777777 777776 INT +MTW 010000 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PICLK 004202 INT +PIOFF 000400 INT +PION 000200 INT +PROG 000007 INT +RUN 200000 INT +RUNABL 204000 INT +SCNCHN 000003 +SCNLIN 000001 +STTYB1 000021 INT +STTYBF 000020 INT +TAC 000001 INT +TAC1 000002 INT +TCONLN 000001 INT +TEM 000010 INT + + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 12-3 +IOINI2 MAC 24-APR-78 03:06 SYMBOL TABLE + +TSCNLN 000000 INT +TTY0 000035' +TTY0DB 000001' INT +TTY1 000071' +TTY1DB 000035' INT +TTYATC 020000 INT +TTYBFE 000033 INT +TTYBM1 000013 INT +TTYBUF 000014 INT +TTYCTR 000012 INT +TTYDSP 000040' EXT +TTYLEN 000002 INT +TTYLST 000001' INT +TTYPTR 000011 INT +TTYSAV 000013 INT +TTYUSE 010000 INT +UDIR 000012 INT +UFREE 000011 INT +USRMOD 010000 INT +UTDSP 000074' EXT +UUO 000014 INT + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 333333333 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 333333333 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 333333333 + III OOO OOO III NNN NNN III 333 333 + III OOO OOO III NNN NNN III 333 333 + III OOO OOO III NNN NNN III 333 333 + III OOO OOO III NNNNNN NNN III 333 + III OOO OOO III NNNNNN NNN III 333 + III OOO OOO III NNNNNN NNN III 333 + III OOO OOO III NNN NNN NNN III 333 + III OOO OOO III NNN NNN NNN III 333 + III OOO OOO III NNN NNN NNN III 333 + III OOO OOO III NNN NNNNNN III 333 + III OOO OOO III NNN NNNNNN III 333 + III OOO OOO III NNN NNNNNN III 333 + III OOO OOO III NNN NNN III 333 333 + III OOO OOO III NNN NNN III 333 333 + III OOO OOO III NNN NNN III 333 333 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 333333333 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 333333333 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 333333333 + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :IOINI3.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:34 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1777 +File will be deleted after printing + +IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 MAXIMAL CONFIGURATION + + XLIST + LIST + ;SOME MACROS FOR DEFINING CONFIGURATION + + DEFINE NAME (A) + <DEFINE NAME1 + <CONFIG: ASCIZ /A/ + INTERNAL CONFIG + > + XP A,0 + SUBTTL A CONFIGURATION + > + + DEFINE DATE (A) + <DEFINE DATE1 + <SYSDAT: ASCIZ /A/ + INTERNAL SYSDAT + >> + + DEFINE VERSION (A,B) + <DEFINE VERS1 + <SYSNUM: XWD ^D'A,^D'B + XP SYSMOD,^D'A + XP SYSVER,^D'B + INTERNAL SYSNUM + >> + + DEFINE CUSPTAPE (A) + <DEFINE CUSP1 + <SYSTAP: SIXBIT /A/ + INTERNAL SYSTAP + >> + + DEFINE ACPDL (J,CHJN,CHJPDN) + < CH'J'N=CHJN + CH'J'PDN=CHJPDN + > + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 2 +IOINI MAC 24-APR-78 01:14 MAXIMAL CONFIGURATION + + + NAME <MAXIMAL>^DEFINE NAME1 + <CONFIG: ASCIZ /MAXIMAL/ + INTERNAL CONFIG + > + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 2 +IOMAX MAC 24-APR-78 02:50 MAXIMAL CONFIGURATION + + + DATE <8-16-65>^DEFINE DATE1 + <SYSDAT: ASCIZ /8-16-65/ + INTERNAL SYSDAT + >^ + VERSION 1,4^DEFINE VERS1 + <SYSNUM: XWD ^D1,^D4 + XP SYSMOD,^D1 + XP SYSVER,^D4 + INTERNAL SYSNUM + >^ + CUSPTAPE DTA0^DEFINE CUSP1 + <SYSTAP: SIXBIT /DTA0/ + INTERNAL SYSTAP + >^ + + ;DEFINE THE IO PART OF THE SYSTEM + ;THAT IS: + ; DEFINE INTERRUPT SERVICE ROTUINE TO BE USED + ; ASSIGN DEVICES TO PI CHANNELS + + DEFINE SYSTEM + < + ASSOC APR,6,<> + ASSOC CTY,3,<> + ASSOC SCN,3,<TTY0,TTY1> + ASSOC DTC,4,<DTA0> + ASSOC DTC,4,<DTA1> + ASSOC DTC,4,<DTA2> + ASSOC DTC,4,<DTA3> + ASSOC MTC,2,<MTA0> + ASSOC MTC,2,<MTA1> + ASSOC MTC,2,<MTA2> + ASSOC MTC,2,<MTA3> + ASSOC LPT,5,<LPT> + ASSOC PTP,5,<PTP> + ASSOC PTR,5,<PTR> + ASSOC CDR,5,<CDR> + > + + 000001 DTSIZ=1 ;MULTIPLE DECTAPE DIRECTORIES + + 000001 SCNLIN=1 + + ;DEFINE HIGHEST AC TO SAVE AND LENGTH OF PD LIST FOR EACH PI CHANNEL + + 000000 ACPDL (1,0,0)^ CH1N=0 + 000011 ACPDL (2,11,20)^ CH2N=11 + 000011 ACPDL (3,11,20)^ CH3N=11 + 000011 ACPDL (4,11,20)^ CH4N=11 + 000011 ACPDL (5,11,20)^ CH5N=11 + 000017 ACPDL (6,17,20^ CH6N=17 + 000000 ACPDL (7,0,0)^ CH7N=0 + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 2-1 +IOMAX MAC 24-APR-78 02:50 MAXIMAL CONFIGURATION + + TITLE IOINI1 - IO INITIALIZATION PART 1 + 000000' 466033 044632 NAME1^CONFIG: ASCIZ /MAXIMAL/ + 000001' 406300 000000 + 000002' 341326 133132 DATE1^SYSDAT: ASCIZ /8-16-65/ + 000003' 331520 000000 + 000004' 000001 000004 VERS1^SYSNUM: XWD ^D1,^D4 + 000005' 446441 200000 CUSP1^SYSTAP: SIXBIT /DTA0/ + + ;CONFIGURATION INDEPENDANT PART OF IOINIT FOLLOWS: + + EXTERNAL ERROR + + ;SETUP CHANNEL SAVE AND RESTORE ROUTINES + + 000000 CHANU1=0 + 000000 CHANU2=0 + 000000 CHANU3=0 + 000000 CHANU4=0 + 000000 CHANU5=0 + 000000 CHANU6=0 + 000000 CHANU7=0 + DEFINE ASSOC(A,NO,D) + <IFE CHANU'NO,< + CHANU'NO=1 + INTERNAL CH'NO'SAV,CH'NO',CH'NO'XIT,CH'NO'SAC + + CH'NO'SAV: 0 + MOVEM CH'NO'N, CH'NO'SAC+CH'NO'N + MOVEI CH'NO'N, CH'NO'SAC + BLT CH'NO'N,CH'NO'SAC+CH'NO'N-1 ;DO ONLY ONCE FOR EACH CHANNEL + MOVE PDP, CH'NO'CJ + JRST @CH'NO'SAV + + CH'NO'SAC: REPEAT CH'NO'N+1,<EXP 0> ;SPACE TO SAVE SOM AC'S + EXP CH'NO'XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + REPEAT CH'NO'PDN-1,<EXP 0> ;REST OF PD LIST + + CH'NO'XIT: MOVSI CH'NO'N, CH'NO'SAC + BLT CH'NO'N, CH'NO'N + JEN @CH'NO + + CH'NO'CJ: XWD -CH'NO'PDN+1,CH'NO'SAC+CH'NO'N+1 ;INIT. SETTING OF P + + CH'NO': 0 ;PC STORED HERE BY JSR + JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + AOS CH'NO'ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + JEN @CH'NO ;AND DISMISS + > + > + ;GENERATE THE SAVE AND RESTORE ROUTINES + + SYSTEM^ 000006' 000000 000000 CH6SAV: 0 + 000007' 202740 000033' MOVEM CH6N, CH6SAC+CH6N + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 1 +IOINI1 MAC 24-APR-78 04:05 MAXIMAL CONFIGURATION + + 000010' 201740 000014' MOVEI CH6N, CH6SAC + 000011' 251740 000032' BLT CH6N,CH6SAC+CH6N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000012' 200140 000057' MOVE PDP, CH6CJ + 000013' 254020 000006' JRST @CH6SAV + 000014' 000000 000000 EXP 0 + 000015' 000000 000000 EXP 0 + 000016' 000000 000000 EXP 0 + 000017' 000000 000000 EXP 0 + 000020' 000000 000000 EXP 0 + 000021' 000000 000000 EXP 0 + 000022' 000000 000000 EXP 0 + 000023' 000000 000000 EXP 0 + 000024' 000000 000000 EXP 0 + 000025' 000000 000000 EXP 0 + 000026' 000000 000000 EXP 0 + 000027' 000000 000000 EXP 0 + 000030' 000000 000000 EXP 0 + 000031' 000000 000000 EXP 0 + 000032' 000000 000000 EXP 0 + 000033' 000000 000000 EXP 0 ;SPACE TO SAVE SOM AC'S + 000034' 000000 000054' EXP CH6XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000035' 000000 000000 EXP 0 + 000036' 000000 000000 EXP 0 + 000037' 000000 000000 EXP 0 + 000040' 000000 000000 EXP 0 + 000041' 000000 000000 EXP 0 + 000042' 000000 000000 EXP 0 + 000043' 000000 000000 EXP 0 + 000044' 000000 000000 EXP 0 + 000045' 000000 000000 EXP 0 + 000046' 000000 000000 EXP 0 + 000047' 000000 000000 EXP 0 + 000050' 000000 000000 EXP 0 + 000051' 000000 000000 EXP 0 + 000052' 000000 000000 EXP 0 + 000053' 000000 000000 EXP 0 ;REST OF PD LIST + 000054' 205740 000014' CH6XIT: MOVSI CH6N, CH6SAC + 000055' 251740 000017 BLT CH6N, CH6N + 000056' 254520 000060' JEN @CH6 + 000057' 777761 000034' CH6CJ: XWD -CH6PDN+1,CH6SAC+CH6N+1 ;INIT. SETTING OF P + 000060' 000000 000000 CH6: 0 ;PC STORED HERE BY JSR + 000061' 254000 000062' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000062' 350000 000456' AOS CH6ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000063' 254520 000060' JEN @CH6 ;AND DISMISS + 000064' 000000 000000 CH3SAV: 0 + 000065' 202440 000103' MOVEM CH3N, CH3SAC+CH3N + 000066' 201440 000072' MOVEI CH3N, CH3SAC + 000067' 251440 000102' BLT CH3N,CH3SAC+CH3N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000070' 200140 000127' MOVE PDP, CH3CJ + 000071' 254020 000064' JRST @CH3SAV + 000072' 000000 000000 EXP 0 + 000073' 000000 000000 EXP 0 + 000074' 000000 000000 EXP 0 + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 1-1 +IOINI1 MAC 24-APR-78 04:05 MAXIMAL CONFIGURATION + + 000075' 000000 000000 EXP 0 + 000076' 000000 000000 EXP 0 + 000077' 000000 000000 EXP 0 + 000100' 000000 000000 EXP 0 + 000101' 000000 000000 EXP 0 + 000102' 000000 000000 EXP 0 + 000103' 000000 000000 EXP 0 ;SPACE TO SAVE SOM AC'S + 000104' 000000 000124' EXP CH3XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000105' 000000 000000 EXP 0 + 000106' 000000 000000 EXP 0 + 000107' 000000 000000 EXP 0 + 000110' 000000 000000 EXP 0 + 000111' 000000 000000 EXP 0 + 000112' 000000 000000 EXP 0 + 000113' 000000 000000 EXP 0 + 000114' 000000 000000 EXP 0 + 000115' 000000 000000 EXP 0 + 000116' 000000 000000 EXP 0 + 000117' 000000 000000 EXP 0 + 000120' 000000 000000 EXP 0 + 000121' 000000 000000 EXP 0 + 000122' 000000 000000 EXP 0 + 000123' 000000 000000 EXP 0 ;REST OF PD LIST + 000124' 205440 000072' CH3XIT: MOVSI CH3N, CH3SAC + 000125' 251440 000011 BLT CH3N, CH3N + 000126' 254520 000130' JEN @CH3 + 000127' 777761 000104' CH3CJ: XWD -CH3PDN+1,CH3SAC+CH3N+1 ;INIT. SETTING OF P + 000130' 000000 000000 CH3: 0 ;PC STORED HERE BY JSR + 000131' 254000 000132' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000132' 350000 000453' AOS CH3ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000133' 254520 000130' JEN @CH3 ;AND DISMISS + 000134' 000000 000000 CH4SAV: 0 + 000135' 202440 000153' MOVEM CH4N, CH4SAC+CH4N + 000136' 201440 000142' MOVEI CH4N, CH4SAC + 000137' 251440 000152' BLT CH4N,CH4SAC+CH4N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000140' 200140 000177' MOVE PDP, CH4CJ + 000141' 254020 000134' JRST @CH4SAV + 000142' 000000 000000 EXP 0 + 000143' 000000 000000 EXP 0 + 000144' 000000 000000 EXP 0 + 000145' 000000 000000 EXP 0 + 000146' 000000 000000 EXP 0 + 000147' 000000 000000 EXP 0 + 000150' 000000 000000 EXP 0 + 000151' 000000 000000 EXP 0 + 000152' 000000 000000 EXP 0 + 000153' 000000 000000 EXP 0 ;SPACE TO SAVE SOM AC'S + 000154' 000000 000174' EXP CH4XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000155' 000000 000000 EXP 0 + 000156' 000000 000000 EXP 0 + 000157' 000000 000000 EXP 0 + 000160' 000000 000000 EXP 0 + 000161' 000000 000000 EXP 0 + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 1-2 +IOINI1 MAC 24-APR-78 04:05 MAXIMAL CONFIGURATION + + 000162' 000000 000000 EXP 0 + 000163' 000000 000000 EXP 0 + 000164' 000000 000000 EXP 0 + 000165' 000000 000000 EXP 0 + 000166' 000000 000000 EXP 0 + 000167' 000000 000000 EXP 0 + 000170' 000000 000000 EXP 0 + 000171' 000000 000000 EXP 0 + 000172' 000000 000000 EXP 0 + 000173' 000000 000000 EXP 0 ;REST OF PD LIST + 000174' 205440 000142' CH4XIT: MOVSI CH4N, CH4SAC + 000175' 251440 000011 BLT CH4N, CH4N + 000176' 254520 000200' JEN @CH4 + 000177' 777761 000154' CH4CJ: XWD -CH4PDN+1,CH4SAC+CH4N+1 ;INIT. SETTING OF P + 000200' 000000 000000 CH4: 0 ;PC STORED HERE BY JSR + 000201' 254000 000202' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000202' 350000 000454' AOS CH4ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000203' 254520 000200' JEN @CH4 ;AND DISMISS + 000204' 000000 000000 CH2SAV: 0 + 000205' 202440 000223' MOVEM CH2N, CH2SAC+CH2N + 000206' 201440 000212' MOVEI CH2N, CH2SAC + 000207' 251440 000222' BLT CH2N,CH2SAC+CH2N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000210' 200140 000247' MOVE PDP, CH2CJ + 000211' 254020 000204' JRST @CH2SAV + 000212' 000000 000000 EXP 0 + 000213' 000000 000000 EXP 0 + 000214' 000000 000000 EXP 0 + 000215' 000000 000000 EXP 0 + 000216' 000000 000000 EXP 0 + 000217' 000000 000000 EXP 0 + 000220' 000000 000000 EXP 0 + 000221' 000000 000000 EXP 0 + 000222' 000000 000000 EXP 0 + 000223' 000000 000000 EXP 0 ;SPACE TO SAVE SOM AC'S + 000224' 000000 000244' EXP CH2XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000225' 000000 000000 EXP 0 + 000226' 000000 000000 EXP 0 + 000227' 000000 000000 EXP 0 + 000230' 000000 000000 EXP 0 + 000231' 000000 000000 EXP 0 + 000232' 000000 000000 EXP 0 + 000233' 000000 000000 EXP 0 + 000234' 000000 000000 EXP 0 + 000235' 000000 000000 EXP 0 + 000236' 000000 000000 EXP 0 + 000237' 000000 000000 EXP 0 + 000240' 000000 000000 EXP 0 + 000241' 000000 000000 EXP 0 + 000242' 000000 000000 EXP 0 + 000243' 000000 000000 EXP 0 ;REST OF PD LIST + 000244' 205440 000212' CH2XIT: MOVSI CH2N, CH2SAC + 000245' 251440 000011 BLT CH2N, CH2N + 000246' 254520 000250' JEN @CH2 + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 1-3 +IOINI1 MAC 24-APR-78 04:05 MAXIMAL CONFIGURATION + + 000247' 777761 000224' CH2CJ: XWD -CH2PDN+1,CH2SAC+CH2N+1 ;INIT. SETTING OF P + 000250' 000000 000000 CH2: 0 ;PC STORED HERE BY JSR + 000251' 254000 000252' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000252' 350000 000452' AOS CH2ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000253' 254520 000250' JEN @CH2 ;AND DISMISS + 000254' 000000 000000 CH5SAV: 0 + 000255' 202440 000273' MOVEM CH5N, CH5SAC+CH5N + 000256' 201440 000262' MOVEI CH5N, CH5SAC + 000257' 251440 000272' BLT CH5N,CH5SAC+CH5N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000260' 200140 000317' MOVE PDP, CH5CJ + 000261' 254020 000254' JRST @CH5SAV + 000262' 000000 000000 EXP 0 + 000263' 000000 000000 EXP 0 + 000264' 000000 000000 EXP 0 + 000265' 000000 000000 EXP 0 + 000266' 000000 000000 EXP 0 + 000267' 000000 000000 EXP 0 + 000270' 000000 000000 EXP 0 + 000271' 000000 000000 EXP 0 + 000272' 000000 000000 EXP 0 + 000273' 000000 000000 EXP 0 ;SPACE TO SAVE SOM AC'S + 000274' 000000 000314' EXP CH5XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000275' 000000 000000 EXP 0 + 000276' 000000 000000 EXP 0 + 000277' 000000 000000 EXP 0 + 000300' 000000 000000 EXP 0 + 000301' 000000 000000 EXP 0 + 000302' 000000 000000 EXP 0 + 000303' 000000 000000 EXP 0 + 000304' 000000 000000 EXP 0 + 000305' 000000 000000 EXP 0 + 000306' 000000 000000 EXP 0 + 000307' 000000 000000 EXP 0 + 000310' 000000 000000 EXP 0 + 000311' 000000 000000 EXP 0 + 000312' 000000 000000 EXP 0 + 000313' 000000 000000 EXP 0 ;REST OF PD LIST + 000314' 205440 000262' CH5XIT: MOVSI CH5N, CH5SAC + 000315' 251440 000011 BLT CH5N, CH5N + 000316' 254520 000320' JEN @CH5 + 000317' 777761 000274' CH5CJ: XWD -CH5PDN+1,CH5SAC+CH5N+1 ;INIT. SETTING OF P + 000320' 000000 000000 CH5: 0 ;PC STORED HERE BY JSR + 000321' 254000 000322' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000322' 350000 000455' AOS CH5ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000323' 254520 000320' JEN @CH5 ;AND DISMISS + + ;SET UP NULL CHANNEL ROUTINES FOR UNUSED CHANNELS + + DEFINE NULCHN(J) + < + INTERNAL CH'J,CH'J'XIT + CH'J: 0 + CH'J'XIT: AOS CH'J'ERR + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 1-4 +IOINI1 MAC 24-APR-78 04:05 MAXIMAL CONFIGURATION + + JEN @CH'J + > + + IFE CHANU1,<NULCHN(1)>^ + 000324' 000000 000000 CH1: 0 + 000325' 350000 000451' CH1XIT: AOS CH1ERR + 000326' 254520 000324' JEN @CH1 + IFE CHANU2,<NULCHN(2)> + IFE CHANU3,<NULCHN(3)> + IFE CHANU4,<NULCHN(4)> + IFE CHANU5,<NULCHN(5)> + IFE CHANU6,<NULCHN(6)> + IFE CHANU7,<NULCHN(7)>^ + 000327' 000000 000000 CH7: 0 + 000330' 350000 000457' CH7XIT: AOS CH7ERR + 000331' 254520 000327' JEN @CH7 + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 2 +IOINI1 MAC 24-APR-78 04:05 MAXIMAL CONFIGURATION + + + + ;ASSIGN DEVICE TO CHANNELS AND SETUP CORESPONDENCE TABLE + ;OF CHANNELS TO SERVICE ROUTINES + + DEFINE ASSOC (A,N,D) + < A'RET=CH'N'XIT + A'SAV=CH'N'SAV + A'SAC=CH'N'SAC + A'CHL=CH'N + A'CHN=N + A'BIT=1 + REPEAT 7-N,<A'BIT=A'BIT*2> + A'OFF=1000+A'BIT ;CONO PI, A'OFF WIL TURN CHANNEL OFF + A'ON=2000+A'BIT ;TURN BACK ON + A'ACT=4000+A'BIT ;FORCE INTERRUPT ON CHAN. + INTERN A'RET, A'SAV, A'CHL, A'CHN, A'SAC + INTERNAL A'OFF,A'ON,A'ACT,A'BIT + XWD A'CHL,A'INT + EXTERNAL A'INT + > + + INTERNAL DEVINT + 000332' DEVINT: SYSTEM^ 000332' 000060' 000000* XWD APRCHL,APRINT + 000333' 000130' 000000* XWD CTYCHL,CTYINT + 000334' 000130' 000000* XWD SCNCHL,SCNINT + 000335' 000200' 000000* XWD DTCCHL,DTCINT + 000336' 000200' 000335* XWD DTCCHL,DTCINT + 000337' 000200' 000336* XWD DTCCHL,DTCINT + 000340' 000200' 000337* XWD DTCCHL,DTCINT + 000341' 000250' 000000* XWD MTCCHL,MTCINT + 000342' 000250' 000341* XWD MTCCHL,MTCINT + 000343' 000250' 000342* XWD MTCCHL,MTCINT + 000344' 000250' 000343* XWD MTCCHL,MTCINT + 000345' 000320' 000000* XWD LPTCHL,LPTINT + 000346' 000320' 000000* XWD PTPCHL,PTPINT + 000347' 000320' 000000* XWD PTRCHL,PTRINT + 000350' 000320' 000000* XWD CDRCHL,CDRINT + 000017 NDEV=.-DEVINT ;NO. OF DEVICE INTERUPT SERVICE ROUTINES + 000016 NDEVM1=NDEV-1 ;(USED BY ONCE) + INTERNAL NDEVM1 + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 3 +IOINI1 MAC 24-APR-78 04:05 MAXIMAL CONFIGURATION + + + + ;INITIALIZE SOME IO DEVICES + ;IOINI CALLED BY A PUSHJ PDP, FROM SYSINI AT SYSTEM INITIALIZATION + + DEFINE IOINIT (A) + <IRP A + < EXTERNAL A'INI + PUSHJ PDP,A'INI + >> + + DEFINE ASSOC (A,B,C) + < IFIDN <A><MTC>,< IOINIT MTC> + IFIDN <A><DTC>,< IOINIT DTC> + IFIDN <A><LPT>,< IOINIT LPT> + IFIDN <A><SCN>,< IOINIT SCN> + IFIDN <A><PTP>,<IOINIT PTP> + IFIDN <A><PTR>,<IOINIT PTR> + > + + INTERNAL IOINI + + 000351' IOINI: SYSTEM^ 000351' 260140 000000* PUSHJ PDP,SCNINI + 000352' 260140 000000* PUSHJ PDP,DTCINI + 000353' 260140 000352* PUSHJ PDP,DTCINI + 000354' 260140 000353* PUSHJ PDP,DTCINI + 000355' 260140 000354* PUSHJ PDP,DTCINI + 000356' 260140 000000* PUSHJ PDP,MTCINI + 000357' 260140 000356* PUSHJ PDP,MTCINI + 000360' 260140 000357* PUSHJ PDP,MTCINI + 000361' 260140 000360* PUSHJ PDP,MTCINI + 000362' 260140 000000* PUSHJ PDP,LPTINI + 000363' 260140 000000* PUSHJ PDP,PTPINI + 000364' 260140 000000* PUSHJ PDP,PTRINI + 000365' 254000 000000* JRST CLKINI ;ALWAYS INIT. CLOCK + + EXTERNAL CLKINI + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 4 +IOINI1 MAC 24-APR-78 04:05 MAXIMAL CONFIGURATION + + + + ;CLOCK CONTROL PARAMETERS + + 004006 CLDS=4000+APRCHN ;CLOCK DISABLE + 000206 CLEN=200+APRCHN ;CLOCK ENABLE + + INTERNAL CLDS,CLEN + + ;BYTE POINTERS + + 000366' 270400 000014 PUUOAC: POINT 4,UUO,12 ;UUO AC FIELD + 000367' 000400 000000 PIOMOD: POINT 4,IOS,35 ;MODE BITS + 000370' 331106 000001 PJOBN: POINT 9,DEVCHR(DEVDAT),8 ;DEVICE JOB ASSIGNMENT + 000371' 220406 000001 PJDCHN: POINT 4,DEVCHR(DEVDAT),17 ;JOB DEVICE CHANNEL NO. + 000372' 140606 000001 PUNIT: POINT 6,DEVCHR(DEVDAT),23 ;DEVICE UNIT NO. + + INTERNAL PUUOAC,PIOMOD,PJOBN,PJDCHN,PUNIT + + ;COMMON SUBROUTINE RETURNS + + 000373' 350003 000000 CPOPJ2: AOS (PDP) + 000374' 350003 000000 CPOPJ1: AOS (PDP) + 000375' 263140 000000 CPOPJ: POPJ PDP, + + INTERNAL CPOPJ,CPOPJ1,CPOPJ2 + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 5 +IOINI1 MAC 24-APR-78 04:05 MAXIMAL CONFIGURATION + + + ,SYSTEM DATA STORAGE + + + INTERNAL JOB,JOBADR,JBTADR,JBTSTS,USRREL,USRINF,USRJDA + INTERNAL USRPDP,JOBDAT,USRDDT,USRSAV,USRUXT,USRLO,USRHI + INTERNAL COMCNT,IOCOMP,USRPOV,STOPU,SCHEDF,TIME,JBTAD1 + INTERNAL MTAVAL,DCAVAL,DTAVAL,MTREQ,DCREQ,DTREQ,TTYTAB,CORTAB + INTERNAL CH1ERR,CH2ERR,CH3ERR,CH4ERR,CH5ERR,CH6ERR,CH7ERR + INTERNAL CORLST,CORTAB,CORTAL,SYSEND,SYSBEG,DEVOPR + + 000000 JOBN=0 ;DEFINE NO. OF JOBS (0 THRU JOBN-1) + ;THERE MUST BE MORE TTY DEVICE DATA BLCKS THAN JOBS. + + DEFINE ASSOC (A,N,D) + <IRP D,<IFIDN <A><SCN>,<JOBN=JOBN+1>>> + SYSTEM^ 777777 777776 MJOBN=-JOBN + INTERNAL JOBN,MJOBN + + 000376' SYSBEG: ;FIRST LOC IN SYSTEM DATA AREA + XP SYSBG1,SYSBEG+1 ;FIRST LOC+1 + 000376' 000000 000000 JOB: 0 ;CURRENT JOB NUMBER EXCEPT WEN SCHEDF IS NON-ZERO + 000377' 000000 000000 JOBADR: 0 ;CONTAINS ADDRESS OF JOB CURRENTLY RUNNING + 000400' 000000 000000 JOBDAT: 0 ;CONTAINS ADDRESS OF JOB DATA AREA + + 000401' JBTADR: BLOCK JOBN ;C(LH)=PROTECT, C(RH)=RELOCATION + XP JBTAD1,JBTADR+1 ;ADDRESS OF JOB 1(USED BY SYSMAK) + 000403' JBTSTS: BLOCK JOBN ;CONTAINS STATUS INFORMATION FOR EACH J + + 000405' 000000 000000 USRPDP: 0 ;USER PUSH DOWN POINTER + 000406' 000000 000000 USRREL: 0 ;LH=0, RH CONTAINS CONTENTS OF PROTECTION REGISTER + 000407' USRLO: ;FIRST LOC CLEARD BY SETUSR SUBROUTINE + 000407' 000000 000000 USRUXT: 0 ;UNUSED, JOBUXT USED TO SAVE UUO PC(UUO0) + 000410' 000000 000000 USRLEV: 0 ;UNUSED, JOBLEV USED TO SAVE LOC. 40 + 000411' 000000 000000 USRSAV: 0 ;TEMPORARY STORAGE FOR UUO HANDLER + 000412' 000000 000000 USRPOV: 0 ;PUSH DOWN OVERFLOW TRAP + 000413' BLOCK 2 + 000415' 000000 000000 USRINF: 0 ;UN LAYED OUT USER INFORMATION + 000416' USRJDA: BLOCK 20 ;RH=JOB DEVICE ASSIGNMENTS FOR THIS USER,LH=UUOS + XP USRHI,.-1 ;LAST LOC CLEARED BY SETUSR ROUTINE + XP USRPFI,.-1 ;LAST LOC PROTECTED FROM IO SERVICE + XP USRPFU,. ;LAST LOC PROTECTED FROM USER PROGRAM + 000436' 000000 000000 USRDDT: 0 ;STARTING ADDR OF USER DDT + + ;DEVICE JUSTR BECOME AVAILABLE FLAGS + 000437' 000000 000000 MTAVAL: 0 ;MAGNETIC TAPE + 000440' 000000 000000 DCAVAL: 0 ;DATA CONTROL + 000441' 000000 000000 DTAVAL: 0 ;DECTAPE + + ;NUMBER OF JOBS WAITING FOR DEVICES(-1=NONE, 0=1 USING, 1=1 USING) + 000442' 777777 777777 MTREQ: -1 ;MAGNETIC TAPE + 000443' 777777 777777 DCREQ: -1 ;DATA CONTROL + 000444' 777777 777777 DTREQ: -1 ;DECTAPE + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 5-1 +IOINI1 MAC 24-APR-78 04:05 MAXIMAL CONFIGURATION + + 000445' 000000 000000 IOCOMP: 0 ;NUMBER OF USERS IN IO WAIT STATE + 000446' 000000 000000 COMCNT: 0 ;NUMBER OF COMMANDS TYPED-IN BUT NOT DECODED + 000447' 000000 000000 STOPU: 0 ;NON-ZERO WHEN CLOCK INTERRUPT FORCED TO STOP USER + 000450' 000000 000000 SCHEDF: 0 ;NON-ZERO WHEN CLOCK ROUTINE IS SCHEDULING + + 000451' 000000 000000 CH1ERR: 0 ;SPURIOUS INTERRUPT COUNTS FOR EACH CHANNEL + 000452' 000000 000000 CH2ERR: 0 + 000453' 000000 000000 CH3ERR: 0 + 000454' 000000 000000 CH4ERR: 0 + 000455' 000000 000000 CH5ERR: 0 + 000456' 000000 000000 CH6ERR: 0 + 000457' 000000 000000 CH7ERR: 0 + + 000410' USRLO1=USRLO+1 + INTERNAL USRLO1 + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 6 +IOINI1 MAC 24-APR-78 04:05 MAXIMAL CONFIGURATION + + + 000460' 000000 000000 TIME: 0 ;TIME SYSTEM HAS RUN IN 60THS OF A SECOND + + + XP TTYLEN,SCNLIN+1 ;LENGTH OF TTY TRANSLATOR TABLES(INCLUDING CTY) + 000461' TTYTAB: BLOCK TTYLEN ;TTY TRANSLATOR TABLE + ;SIGN BIT = 1 IF COMMAND JUST TYPED + ;BITS 1 -9, JOB CONSOLE IS ATTACHED TO + ;BITS 18-35, THE DEVICE DATA BLOCK FOR + 000463' 000000 000000 DEVOPR: 0 ;SIXBIT PHYSICAL NAME OF OPERATORS + ;CONSOLE SET BY SCNSER TO FIRST ACTIVE TTY. + ;LOCATIONS FOR CORE ALLOCATION + XP CORBLK,^D256 ;NO. OF 1K BLOCKS POSSIBLE + 000464' CORTAB: BLOCK <CORBLK>/^D36+1 ;1K BLOCK USE BIT TABLE + ;A 1 MEANS BLOCK IS IN USE + 000474' 000000 000000 CORLST: 0 ;1 BIT BYTE POINTER TO LAST FREE BLOCK POSSIBLE + 000475' 000000 000000 CORTAL: 0 ;TOTAL NO. OF FREE CORE BLOCKS LEFT + ;CORLST AND CORTAL ARE SET UP AT SYSTEM INITIALIZATION + + 000475' SYSEND=.-1 ;LAST LOC. CLEARED BY SYSINI + + INTERNAL SYSSIZ + EXTERNAL SYSFIN + 000476' 000000 000000* SYSSIZ: EXP SYSFIN ;SIZE OF MONITOR(LAST LOC. USED) + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 7 +IOINI1 MAC 24-APR-78 04:05 MAXIMAL CONFIGURATION + + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000477 + +9K CORE USED + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 8 +IOINI1 MAC 24-APR-78 04:05 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APRACT 004002 INT +APRBIT 000002 INT +APRCHL 000060' INT +APRCHN 000006 INT +APRINT 000332' EXT +APROFF 001002 INT +APRON 002002 INT +APRRET 000054' INT +APRSAC 000014' INT +APRSAV 000006' INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CDRACT 004004 INT +CDRBIT 000004 INT +CDRCHL 000320' INT +CDRCHN 000005 INT +CDRINT 000350' EXT +CDROFF 001004 INT +CDRON 002004 INT +CDRRET 000314' INT +CDRSAC 000262' INT +CDRSAV 000254' INT +CH1 000324' INT +CH1ERR 000451' INT +CH1N 000000 +CH1PDN 000000 +CH1XIT 000325' INT +CH2 000250' INT +CH2CJ 000247' +CH2ERR 000452' INT +CH2N 000011 +CH2PDN 000020 +CH2SAC 000212' INT +CH2SAV 000204' INT +CH2XIT 000244' INT +CH3 000130' INT +CH3CJ 000127' +CH3ERR 000453' INT +CH3N 000011 +CH3PDN 000020 +CH3SAC 000072' INT +CH3SAV 000064' INT + + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 8-1 +IOINI1 MAC 24-APR-78 04:05 SYMBOL TABLE + +CH3XIT 000124' INT +CH4 000200' INT +CH4CJ 000177' +CH4ERR 000454' INT +CH4N 000011 +CH4PDN 000020 +CH4SAC 000142' INT +CH4SAV 000134' INT +CH4XIT 000174' INT +CH5 000320' INT +CH5CJ 000317' +CH5ERR 000455' INT +CH5N 000011 +CH5PDN 000020 +CH5SAC 000262' INT +CH5SAV 000254' INT +CH5XIT 000314' INT +CH6 000060' INT +CH6CJ 000057' +CH6ERR 000456' INT +CH6N 000017 +CH6PDN 000020 +CH6SAC 000014' INT +CH6SAV 000006' INT +CH6XIT 000054' INT +CH7 000327' INT +CH7ERR 000457' INT +CH7N 000000 +CH7PDN 000000 +CH7XIT 000330' INT +CHANU1 000000 +CHANU2 000001 +CHANU3 000001 +CHANU4 000001 +CHANU5 000001 +CHANU6 000001 +CHANU7 000000 +CLDS 004006 INT +CLEN 000206 INT +CLKINI 000365' EXT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +COMCNT 000446' INT +CONFIG 000000' INT +CORBLK 000400 INT +CORLST 000474' INT +CORTAB 000464' INT +CORTAL 000475' INT +CPOPJ 000375' INT +CPOPJ1 000374' INT +CPOPJ2 000373' INT +CTYACT 004020 INT + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 8-2 +IOINI1 MAC 24-APR-78 04:05 SYMBOL TABLE + +CTYBIT 000020 INT +CTYCHL 000130' INT +CTYCHN 000003 INT +CTYINT 000333' EXT +CTYOFF 001020 INT +CTYON 002020 INT +CTYRET 000124' INT +CTYSAC 000072' INT +CTYSAV 000064' INT +D 000017 INT +DAT 000005 INT +DCAVAL 000440' INT +DCL 000001 INT +DCREQ 000443' INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVINT 000332' INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVOPR 000463' INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTAVAL 000441' INT +DTCACT 004010 INT +DTCBIT 000010 INT +DTCCHL 000200' INT +DTCCHN 000004 INT +DTCINI 000355' EXT + + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 8-3 +IOINI1 MAC 24-APR-78 04:05 SYMBOL TABLE + +DTCINT 000340' EXT +DTCOFF 001010 INT +DTCON 002010 INT +DTCRET 000174' INT +DTCSAC 000142' INT +DTCSAV 000134' INT +DTREQ 000444' INT +DTSIZ 000001 +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERROR 000000 EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCOMP 000445' INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IOINI 000351' INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT + + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 8-4 +IOINI1 MAC 24-APR-78 04:05 SYMBOL TABLE + +JBFPTR 000001 INT +JBTAD1 000402' INT +JBTADR 000401' INT +JBTSTS 000403' INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000376' INT +JOBADR 000377' INT +JOBDAT 000400' INT +JOBN 000002 INT +LOOKB 040000 INT +LPTACT 004004 INT +LPTBIT 000004 INT +LPTCHL 000320' INT +LPTCHN 000005 INT +LPTINI 000362' EXT +LPTINT 000345' EXT +LPTOFF 001004 INT +LPTON 002004 INT +LPTRET 000314' INT +LPTSAC 000262' INT +LPTSAV 000254' INT +MAXIMA 000000 INT +MJOBN 777777 777776 INT +MTAVAL 000437' INT +MTCACT 004040 INT +MTCBIT 000040 INT +MTCCHL 000250' INT +MTCCHN 000002 INT +MTCINI 000361' EXT +MTCINT 000344' EXT +MTCOFF 001040 INT +MTCON 002040 INT +MTCRET 000244' INT +MTCSAC 000212' INT +MTCSAV 000204' INT +MTREQ 000442' INT +MTW 010000 INT +NDEV 000017 +NDEVM1 000016 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PIOMOD 000367' INT +PJDCHN 000371' INT +PJOBN 000370' INT + + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 8-5 +IOINI1 MAC 24-APR-78 04:05 SYMBOL TABLE + +PROG 000007 INT +PTPACT 004004 INT +PTPBIT 000004 INT +PTPCHL 000320' INT +PTPCHN 000005 INT +PTPINI 000363' EXT +PTPINT 000346' EXT +PTPOFF 001004 INT +PTPON 002004 INT +PTPRET 000314' INT +PTPSAC 000262' INT +PTPSAV 000254' INT +PTRACT 004004 INT +PTRBIT 000004 INT +PTRCHL 000320' INT +PTRCHN 000005 INT +PTRINI 000364' EXT +PTRINT 000347' EXT +PTROFF 001004 INT +PTRON 002004 INT +PTRRET 000314' INT +PTRSAC 000262' INT +PTRSAV 000254' INT +PUNIT 000372' INT +PUUOAC 000366' INT +RUN 200000 INT +RUNABL 204000 INT +SCHEDF 000450' INT +SCNACT 004020 INT +SCNBIT 000020 INT +SCNCHL 000130' INT +SCNCHN 000003 INT +SCNINI 000351' EXT +SCNINT 000334' EXT +SCNLIN 000001 +SCNOFF 001020 INT +SCNON 002020 INT +SCNRET 000124' INT +SCNSAC 000072' INT +SCNSAV 000064' INT +STOPU 000447' INT +SYSBEG 000376' INT +SYSBG1 000377' INT +SYSDAT 000002' INT +SYSEND 000475' INT +SYSFIN 000476' EXT +SYSMOD 000001 INT +SYSNUM 000004' INT +SYSSIZ 000476' INT +SYSTAP 000005' INT +SYSVER 000004 INT +TAC 000001 INT + + + IOINI1 - IO INITIALIZATION PART 1 MACRO 10 05:51 24-APR-78 PAGE 8-6 +IOINI1 MAC 24-APR-78 04:05 SYMBOL TABLE + +TAC1 000002 INT +TEM 000010 INT +TIME 000460' INT +TTYATC 020000 INT +TTYLEN 000002 INT +TTYTAB 000461' INT +TTYUSE 010000 INT +USRDDT 000436' INT +USRHI 000435' INT +USRINF 000415' INT +USRJDA 000416' INT +USRLEV 000410' +USRLO 000407' INT +USRLO1 000410' INT +USRMOD 010000 INT +USRPDP 000405' INT +USRPFI 000435' INT +USRPFU 000436' INT +USRPOV 000412' INT +USRREL 000406' INT +USRSAV 000411' INT +USRUXT 000407' INT + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 444 444 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 444 444 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 444 444 + III OOO OOO III NNN NNN III 444 444 + III OOO OOO III NNN NNN III 444 444 + III OOO OOO III NNN NNN III 444 444 + III OOO OOO III NNNNNN NNN III 444 444 + III OOO OOO III NNNNNN NNN III 444 444 + III OOO OOO III NNNNNN NNN III 444 444 + III OOO OOO III NNN NNN NNN III 444444444444444 + III OOO OOO III NNN NNN NNN III 444444444444444 + III OOO OOO III NNN NNN NNN III 444444444444444 + III OOO OOO III NNN NNNNNN III 444 + III OOO OOO III NNN NNNNNN III 444 + III OOO OOO III NNN NNNNNN III 444 + III OOO OOO III NNN NNN III 444 + III OOO OOO III NNN NNN III 444 + III OOO OOO III NNN NNN III 444 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 444 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 444 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 444 + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :IOINI4.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:35 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1754 +File will be deleted after printing + +IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 MAXIMAL CONFIGURATION + + XLIST + LIST + ;SOME MACROS FOR DEFINING CONFIGURATION + + DEFINE NAME (A) + <DEFINE NAME1 + <CONFIG: ASCIZ /A/ + INTERNAL CONFIG + > + XP A,0 + SUBTTL A CONFIGURATION + > + + DEFINE DATE (A) + <DEFINE DATE1 + <SYSDAT: ASCIZ /A/ + INTERNAL SYSDAT + >> + + DEFINE VERSION (A,B) + <DEFINE VERS1 + <SYSNUM: XWD ^D'A,^D'B + XP SYSMOD,^D'A + XP SYSVER,^D'B + INTERNAL SYSNUM + >> + + DEFINE CUSPTAPE (A) + <DEFINE CUSP1 + <SYSTAP: SIXBIT /A/ + INTERNAL SYSTAP + >> + + DEFINE ACPDL (J,CHJN,CHJPDN) + < CH'J'N=CHJN + CH'J'PDN=CHJPDN + > + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 2 +IOINI MAC 24-APR-78 01:14 MAXIMAL CONFIGURATION + + + NAME <MAXIMAL>^DEFINE NAME1 + <CONFIG: ASCIZ /MAXIMAL/ + INTERNAL CONFIG + > + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 2 +IOMAX MAC 24-APR-78 02:50 MAXIMAL CONFIGURATION + + + DATE <8-16-65>^DEFINE DATE1 + <SYSDAT: ASCIZ /8-16-65/ + INTERNAL SYSDAT + >^ + VERSION 1,4^DEFINE VERS1 + <SYSNUM: XWD ^D1,^D4 + XP SYSMOD,^D1 + XP SYSVER,^D4 + INTERNAL SYSNUM + >^ + CUSPTAPE DTA0^DEFINE CUSP1 + <SYSTAP: SIXBIT /DTA0/ + INTERNAL SYSTAP + >^ + + ;DEFINE THE IO PART OF THE SYSTEM + ;THAT IS: + ; DEFINE INTERRUPT SERVICE ROTUINE TO BE USED + ; ASSIGN DEVICES TO PI CHANNELS + + DEFINE SYSTEM + < + ASSOC APR,6,<> + ASSOC CTY,3,<> + ASSOC SCN,3,<TTY0,TTY1> + ASSOC DTC,4,<DTA0> + ASSOC DTC,4,<DTA1> + ASSOC DTC,4,<DTA2> + ASSOC DTC,4,<DTA3> + ASSOC MTC,2,<MTA0> + ASSOC MTC,2,<MTA1> + ASSOC MTC,2,<MTA2> + ASSOC MTC,2,<MTA3> + ASSOC LPT,5,<LPT> + ASSOC PTP,5,<PTP> + ASSOC PTR,5,<PTR> + ASSOC CDR,5,<CDR> + > + + 000001 DTSIZ=1 ;MULTIPLE DECTAPE DIRECTORIES + + 000001 SCNLIN=1 + + ;DEFINE HIGHEST AC TO SAVE AND LENGTH OF PD LIST FOR EACH PI CHANNEL + + 000000 ACPDL (1,0,0)^ CH1N=0 + 000011 ACPDL (2,11,20)^ CH2N=11 + 000011 ACPDL (3,11,20)^ CH3N=11 + 000011 ACPDL (4,11,20)^ CH4N=11 + 000011 ACPDL (5,11,20)^ CH5N=11 + 000017 ACPDL (6,17,20^ CH6N=17 + 000000 ACPDL (7,0,0)^ CH7N=0 + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 2-1 +IOMAX MAC 24-APR-78 02:50 MAXIMAL CONFIGURATION + + TITLE IOINI2 - IO INITIALIZATION PART 2 + + ;DEFINITIONS OF DEVCHN AND DEVBIT + ;THESE ALSO OCCUR IN IOINT1 + + DEFINE ASSOC (A,N,D) + < + A'CHN=N + > + + SYSTEM^ + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 2 +IOINI2 MAC 24-APR-78 03:06 MAXIMAL CONFIGURATION + + + + ;APR PIP BITS + + 000001 APRBIT=1 + 000002 REPEAT 7-APRCHN,<APRBIT=APRBIT*2> + XP PION,200 ;CONO PI,PION TURNS PI SYSTEM ON + XP PIOFF,400 ;TURN IT OFF + XP PICLK,PION+1B24+APRBIT ;TURN PI ON, AND FORCE CLOCK INT. + XP CLKOFF,1000+APRCHN ;CONO APR,CLKOFF TURNS CLOCK FLAG OFF + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 3 +IOINI2 MAC 24-APR-78 03:06 MAXIMAL CONFIGURATION + + + + ;ASSEMBLE ALL DEVICE DATA BLOCKS AND LINK THEM TOGETHER + + DEFINE SCNDDB (A,B,C) + < INTERNAL C'DB + C'DB: ZZ=. + SIXBIT /C/ + XWD A'CHN*PICHN,STTYBF+1 ;LONG ENOUGH FOR PRINTING + ;SEQUENCE CARD IMAGE. + ;USER BUFFERS ARE 2 WORDS + ;LONGER THEN THE MONITORY TTY BUFFERS. + 0 + EXTERNAL TTYDSP + XWD C,TTYDSP + XWD DVTTY+DVIN+DVOUT,3 + 0 + 0 + XWD PROG,0 + XWD PROG,0 + XP TTYPTR,.-ZZ + 0 + XP TTYCTR,.-ZZ + 0 + XP TTYSAV,.-ZZ + 0 + XP TTYBUF,.-ZZ + XP TTYBM1,TTYBUF-1 + XP STTYBF,20 + XP STTYB1,STTYBF+1 ;LENGTH+1 + BLOCK STTYBF + XP TTYBFE,.-ZZ-1 + + ;LINE NO. PARAMETERS + XP TTYLEN,SCNLIN+1 ;LENGTH OF TTY TRANSLATOR TABLE(INCLUDE TTY) + XP TSCNLN,SCNLIN-1 ;HIGHEST TTY LINE NO.(NOT COUNTING CTY) + XP TCONLN,TSCNLN+1 ;CTY LINE NUMBER + XP MTTYLN,-TTYLEN ;NEGATIVEL LENGTH OF TRANSLATOR TABLE + XP FSNCHN,SCNCHN*101 ;CHANNEL ASSIGNED, FOR FULL DUPLEX SCN. + XP TTYLST,TTY0DB ;FIRST TTY DEVICE DATA BLOCK + > + + ;NEG. NO. OF TELTYPE DEVICE DATA BLOCKS + + 000000 MLTTYL=0 + DEFINE ASSOC (A,N,D) + <IRP D,<IFIDN <A>,<SCN>,<MLTTYL=MLTTYL-1>>> + + SYSTEM^ + INTERNAL MLTTYL + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 4 +IOINI2 MAC 24-APR-78 03:06 MAXIMAL CONFIGURATION + + + + ;MAG TAPE DEVICE DATA BLOCK + + 000000 MTCNUM=0 + + DEFINE MTCDDB (A,B,C) + < INTERNAL C'DB + C'DB: SIXBIT /C/ + MTCNUM=MTCNUM+1 + XWD IORET+A'CHN*PICHN,<MTCNUM-1>*10000+201 + + 0 + XWD C,MTDISP + EXTERNAL MTDISP + XWD 4400+DVMTA+DVIN+DVOUT,154403 + 0 + 0 + XWD PROG,0 + XWD PROG,0 + > + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 5 +IOINI2 MAC 24-APR-78 03:06 MAXIMAL CONFIGURATION + + + ;DECTAPE DEVICE DATA BLOCK + + 000000 DTCNUM=0 + + DEFINE DTCDDB (A,B,C) + < INTERNAL C'DB + C'DB: ZZ=. + SIXBIT /C/ + DTCNUM=DTCNUM+1 + XWD IORET+A'CHN*PICHN,<DTCNUM-1>*10000+201 + 0 + XWD C,UTDSP + EXTERNAL UTDSP + XWD 4400+DVDIR+DVIN+DVOUT,154403 + 0 + 0 + 0 + 0 + XP UFREE,.-ZZ ;NEXT FREE BLOCK NO. + 0 + XP UDIR,.-ZZ ;LINK TO DIRECTORY IN DATA BLOCK + IFE DTSIZ,< EXP DIRBUF + > + IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> + > + > + + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 6 +IOINI2 MAC 24-APR-78 03:06 MAXIMAL CONFIGURATION + + + + ;LINE PRINTER DEVICE DTA BLOCK + + DEFINE LPTDDB (A,B,C) + <INTERNAL LPTDB,LPTDAT,LPTCHR,LPTIOS,LPTSER,LPTMOD + INTERNAL LPTBUF,LPTPTR,LPTADR,LPTSV1 + EXTERNAL LPTDSP + + LPTDB: + LPTDAT: SIXBIT /LPT/ + LPTCHR: XWD A'CHN*PICHN,32 + LPTIOS: 0 + LPTSER: XWD C,LPTDSP + LPTMOD: XWD 0+DVOUT,3 + 0 + LPTBUF: 0 + LPTPTR: 0 + LPTADR: XWD PROG,0 + LPTSV1: 0 + + XP LPTCLB,LPTCHN+200 ;PI CHANNEL AND BUSY FLAG + XP LPTCHB,11*LPTCHN ;LINE PRINTER ERROR AND DATA CHANNELS + > + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 7 +IOINI2 MAC 24-APR-78 03:06 MAXIMAL CONFIGURATION + + + + ;CARD READER DEVICE DATA BLOCK + + DEFINE CDRDDB (A,B,C) + <INTERNAL CDRDB,CDRDAT,CRDIS + EXTERNAL CDRDSP + + CDRDB: + CDRDAT: SIXBIT /CDR/ + XWD A'CHN*PICHN,34 ;LONG ENOUGHT FOR BINARY CARDS + 0 + XWD C,CDRDSP + XWD DVCDR+1400+DVIN,14403 + 0 + 0 + XWD PROG,0 + 0 + 0 + CRDIS: JRST . + > + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 8 +IOINI2 MAC 24-APR-78 03:06 MAXIMAL CONFIGURATION + + + + ;PAPER TAPE READER DEVICE DATA BLOCK + + DEFINE PTRDDB (A,B,C) + <INTERNAL PTRDB,PTRDAT,PTRCHR,PTRIOS,PTRSER + INTERNAL PTRMOD,PTRBUF,PTRADR,PTRPTR,PTRCTR,PTRSVC,PTRSV1 + EXTERNAL PTRDSP + + PTRDB: + PTRDAT: SIXBIT /PTR/ + PTRCHR: XWD A'CHN*PICHN,41 + PTRIOS: 0 + PTRSER: XWD C,PTRDSP + PTRMOD: XWD 1000+DVIN,14403 + 0 + PTRBUF: 0 + PTRADR: XWD PROG,0 + PTRPTR: 0 + PTRCTR: 0 + PTRSVC: 0 + PTRSV1: 0 + > + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 9 +IOINI2 MAC 24-APR-78 03:06 MAXIMAL CONFIGURATION + + + + ;PAPER TAPE PUNCH DEVICE DATA BLOCK + + DEFINE PTPDDB (A,B,C) + <INTERNAL PTPDB,PTPDAT,PTPCHR,PTPIOS,PTPSER,PTPMOD,PTPBUF + INTERNAL PTPPTR,PTPADR,PTPCTR,PTPCNT,PTPCHA,PTPSIO + EXTERNAL PTPDSP + + PTPDB: + PTPDAT: SIXBIT /PTP/ + PTPCHR: XWD A'CHN*PICHN,41 + PTPIOS: 0 + PTPSER: XWD C,PTPDSP + PTPMOD: XWD 1000+DVOUT,14403 + 0 + PTPBUF: 0 + PTPPTR: 0 + PTPADR: XWD PROG,0 + PTPCTR: 0 + PTPCNT: 0 + PTPCHA: 0 + PTPSIO: 0 + > + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 10 +IOINI2 MAC 24-APR-78 03:06 MAXIMAL CONFIGURATION + + + + ;GENERATE DEVICE DATA BLOCKS NEEDED FOR THIS CONFIGURATION + + DEFINE ASSOC (A,B,C) + < + IRP C,< + ;DEFINE FORWARD LINL SYMBOL + LINK + ; + ; + ; + A'DDB A,B,C + + C=0 ;SET LINK TO 0(IN CASE THIS IS LAST DDB) + DEFINE LINK + <C=.> + > + > + + INTERNAL DEVLST + + 000000' 000001' 000000 DEVLST: XWD FIRDB,0 ;BEGINNING OF DEVICE DATA BLOCK CHAIN + + DEFINE LINK + <FIRDB=.> + + SYSTEM^ 000001' 646471 200000 SIXBIT /TTY0/ + 000002' 000300 000021 XWD SCNCHN*PICHN,STTYBF+1 ;LONG ENOUGH FOR PRINTING + 000003' 000000 000000 0 + 000004' 000035' 000000* XWD TTY0,TTYDSP + 000005' 000013 000003 XWD DVTTY+DVIN+DVOUT,3 + 000006' 000000 000000 0 + 000007' 000000 000000 0 + 000010' 000007 000000 XWD PROG,0 + 000011' 000007 000000 XWD PROG,0 + 000012' 000000 000000 0 + 000013' 000000 000000 0 + 000014' 000000 000000 0 + 000035' 646471 210000 SIXBIT /TTY1/ + 000036' 000300 000021 XWD SCNCHN*PICHN,STTYBF+1 ;LONG ENOUGH FOR PRINTING + 000037' 000000 000000 0 + 000040' 000071' 000004* XWD TTY1,TTYDSP + 000041' 000013 000003 XWD DVTTY+DVIN+DVOUT,3 + 000042' 000000 000000 0 + 000043' 000000 000000 0 + 000044' 000007 000000 XWD PROG,0 + 000045' 000007 000000 XWD PROG,0 + 000046' 000000 000000 0 + 000047' 000000 000000 0 + 000050' 000000 000000 0 + 000071' 446441 200000 SIXBIT /DTA0/ + 000072' 000420 000201 XWD IORET+DTCCHN*PICHN,<DTCNUM-1>*10000+201 + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 10-1 +IOINI2 MAC 24-APR-78 03:06 MAXIMAL CONFIGURATION + + 000073' 000000 000000 0 + 000074' 000104' 000000* XWD DTA0,UTDSP + 000075' 004407 154403 XWD 4400+DVDIR+DVIN+DVOUT,154403 + 000076' 000000 000000 0 + 000077' 000000 000000 0 + 000100' 000000 000000 0 + 000101' 000000 000000 0 + 000102' 000000 000000 0 + 000103' 000000 000267' IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> + 000104' 446441 210000 SIXBIT /DTA1/ + 000105' 000420 010201 XWD IORET+DTCCHN*PICHN,<DTCNUM-1>*10000+201 + 000106' 000000 000000 0 + 000107' 000117' 000074* XWD DTA1,UTDSP + 000110' 004407 154403 XWD 4400+DVDIR+DVIN+DVOUT,154403 + 000111' 000000 000000 0 + 000112' 000000 000000 0 + 000113' 000000 000000 0 + 000114' 000000 000000 0 + 000115' 000000 000000 0 + 000116' 000000 000467' IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> + 000117' 446441 220000 SIXBIT /DTA2/ + 000120' 000420 020201 XWD IORET+DTCCHN*PICHN,<DTCNUM-1>*10000+201 + 000121' 000000 000000 0 + 000122' 000132' 000107* XWD DTA2,UTDSP + 000123' 004407 154403 XWD 4400+DVDIR+DVIN+DVOUT,154403 + 000124' 000000 000000 0 + 000125' 000000 000000 0 + 000126' 000000 000000 0 + 000127' 000000 000000 0 + 000130' 000000 000000 0 + 000131' 000000 000667' IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> + 000132' 446441 230000 SIXBIT /DTA3/ + 000133' 000420 030201 XWD IORET+DTCCHN*PICHN,<DTCNUM-1>*10000+201 + 000134' 000000 000000 0 + 000135' 000145' 000122* XWD DTA3,UTDSP + 000136' 004407 154403 XWD 4400+DVDIR+DVIN+DVOUT,154403 + 000137' 000000 000000 0 + 000140' 000000 000000 0 + 000141' 000000 000000 0 + 000142' 000000 000000 0 + 000143' 000000 000000 0 + 000144' 000000 001067' IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> + 000145' 556441 200000 MTA0DB: SIXBIT /MTA0/ + 000146' 000220 000201 XWD IORET+MTCCHN*PICHN,<MTCNUM-1>*10000+201 + 000147' 000000 000000 0 + 000150' 000156' 000000* XWD MTA0,MTDISP + 000151' 004423 154403 XWD 4400+DVMTA+DVIN+DVOUT,154403 + 000152' 000000 000000 0 + 000153' 000000 000000 0 + 000154' 000007 000000 XWD PROG,0 + 000155' 000007 000000 XWD PROG,0 + 000156' 556441 210000 MTA1DB: SIXBIT /MTA1/ + 000157' 000220 010201 XWD IORET+MTCCHN*PICHN,<MTCNUM-1>*10000+201 + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 10-2 +IOINI2 MAC 24-APR-78 03:06 MAXIMAL CONFIGURATION + + 000160' 000000 000000 0 + 000161' 000167' 000150* XWD MTA1,MTDISP + 000162' 004423 154403 XWD 4400+DVMTA+DVIN+DVOUT,154403 + 000163' 000000 000000 0 + 000164' 000000 000000 0 + 000165' 000007 000000 XWD PROG,0 + 000166' 000007 000000 XWD PROG,0 + 000167' 556441 220000 MTA2DB: SIXBIT /MTA2/ + 000170' 000220 020201 XWD IORET+MTCCHN*PICHN,<MTCNUM-1>*10000+201 + 000171' 000000 000000 0 + 000172' 000200' 000161* XWD MTA2,MTDISP + 000173' 004423 154403 XWD 4400+DVMTA+DVIN+DVOUT,154403 + 000174' 000000 000000 0 + 000175' 000000 000000 0 + 000176' 000007 000000 XWD PROG,0 + 000177' 000007 000000 XWD PROG,0 + 000200' 556441 230000 MTA3DB: SIXBIT /MTA3/ + 000201' 000220 030201 XWD IORET+MTCCHN*PICHN,<MTCNUM-1>*10000+201 + 000202' 000000 000000 0 + 000203' 000211' 000172* XWD MTA3,MTDISP + 000204' 004423 154403 XWD 4400+DVMTA+DVIN+DVOUT,154403 + 000205' 000000 000000 0 + 000206' 000000 000000 0 + 000207' 000007 000000 XWD PROG,0 + 000210' 000007 000000 XWD PROG,0 + 000211' 546064 000000 LPTDAT: SIXBIT /LPT/ + 000212' 000500 000032 LPTCHR: XWD LPTCHN*PICHN,32 + 000213' 000000 000000 LPTIOS: 0 + 000214' 000223' 000000* LPTSER: XWD LPT,LPTDSP + 000215' 000001 000003 LPTMOD: XWD 0+DVOUT,3 + 000216' 000000 000000 0 + 000217' 000000 000000 LPTBUF: 0 + 000220' 000000 000000 LPTPTR: 0 + 000221' 000007 000000 LPTADR: XWD PROG,0 + 000222' 000000 000000 LPTSV1: 0 + 000223' 606460 000000 PTPDAT: SIXBIT /PTP/ + 000224' 000500 000041 PTPCHR: XWD PTPCHN*PICHN,41 + 000225' 000000 000000 PTPIOS: 0 + 000226' 000240' 000000* PTPSER: XWD PTP,PTPDSP + 000227' 001001 014403 PTPMOD: XWD 1000+DVOUT,14403 + 000230' 000000 000000 0 + 000231' 000000 000000 PTPBUF: 0 + 000232' 000000 000000 PTPPTR: 0 + 000233' 000007 000000 PTPADR: XWD PROG,0 + 000234' 000000 000000 PTPCTR: 0 + 000235' 000000 000000 PTPCNT: 0 + 000236' 000000 000000 PTPCHA: 0 + 000237' 000000 000000 PTPSIO: 0 + 000240' 606462 000000 PTRDAT: SIXBIT /PTR/ + 000241' 000500 000041 PTRCHR: XWD PTRCHN*PICHN,41 + 000242' 000000 000000 PTRIOS: 0 + 000243' 000254' 000000* PTRSER: XWD PTR,PTRDSP + 000244' 001002 014403 PTRMOD: XWD 1000+DVIN,14403 + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 10-3 +IOINI2 MAC 24-APR-78 03:06 MAXIMAL CONFIGURATION + + 000245' 000000 000000 0 + 000246' 000000 000000 PTRBUF: 0 + 000247' 000007 000000 PTRADR: XWD PROG,0 + 000250' 000000 000000 PTRPTR: 0 + 000251' 000000 000000 PTRCTR: 0 + 000252' 000000 000000 PTRSVC: 0 + 000253' 000000 000000 PTRSV1: 0 + 000254' 434462 000000 CDRDAT: SIXBIT /CDR/ + 000255' 000500 000034 XWD CDRCHN*PICHN,34 ;LONG ENOUGHT FOR BINARY CARDS + 000256' 000000 000000 0 + 000257' 000000 000000* XWD CDR,CDRDSP + 000260' 101402 014403 XWD DVCDR+1400+DVIN,14403 + 000261' 000000 000000 0 + 000262' 000000 000000 0 + 000263' 000007 000000 XWD PROG,0 + 000264' 000000 000000 0 + 000265' 000000 000000 0 + 000266' 254000 000266' CRDIS: JRST . + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 11 +IOINI2 MAC 24-APR-78 03:06 MAXIMAL CONFIGURATION + + + + 000267' LIT + + IFE DTSIZ,< DIRBUF: BLOCK 200 + INTERNAL DIRBUF + > + + 000267' IFN DTSIZ,<DTDIR: BLOCK DTCNUM*200 + INTERNAL DTDIR + > + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 001267 + +10K CORE USED + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 12 +IOINI2 MAC 24-APR-78 03:06 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APRBIT 000002 +APRCHN 000006 +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CDR 000000 +CDRCHN 000005 +CDRDAT 000254' INT +CDRDB 000254' INT +CDRDSP 000257' EXT +CH1N 000000 +CH1PDN 000000 +CH2N 000011 +CH2PDN 000020 +CH3N 000011 +CH3PDN 000020 +CH4N 000011 +CH4PDN 000020 +CH5N 000011 +CH5PDN 000020 +CH6N 000017 +CH6PDN 000020 +CH7N 000000 +CH7PDN 000000 +CLKOFF 001006 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CRDIS 000266' INT +CTYCHN 000003 +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT + + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 12-1 +IOINI2 MAC 24-APR-78 03:06 SYMBOL TABLE + +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVLST 000000' INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTA0 000104' +DTA0DB 000071' INT +DTA1 000117' +DTA1DB 000104' INT +DTA2 000132' +DTA2DB 000117' INT +DTA3 000145' +DTA3DB 000132' INT +DTCCHN 000004 +DTCNUM 000004 +DTDIR 000267' INT +DTSIZ 000001 +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +FIRDB 000001' +FSNCHN 000303 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT + + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 12-2 +IOINI2 MAC 24-APR-78 03:06 SYMBOL TABLE + +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +LPT 000223' +LPTADR 000221' INT +LPTBUF 000217' INT +LPTCHB 000055 INT +LPTCHN 000005 +LPTCHR 000212' INT +LPTCLB 000205 INT +LPTDAT 000211' INT +LPTDB 000211' INT +LPTDSP 000214' EXT +LPTIOS 000213' INT +LPTMOD 000215' INT +LPTPTR 000220' INT +LPTSER 000214' INT +LPTSV1 000222' INT +MAXIMA 000000 INT +MLTTYL 777777 777776 INT +MTA0 000156' + + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 12-3 +IOINI2 MAC 24-APR-78 03:06 SYMBOL TABLE + +MTA0DB 000145' INT +MTA1 000167' +MTA1DB 000156' INT +MTA2 000200' +MTA2DB 000167' INT +MTA3 000211' +MTA3DB 000200' INT +MTCCHN 000002 +MTCNUM 000004 +MTDISP 000203' EXT +MTTYLN 777777 777776 INT +MTW 010000 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PICLK 004202 INT +PIOFF 000400 INT +PION 000200 INT +PROG 000007 INT +PTP 000240' +PTPADR 000233' INT +PTPBUF 000231' INT +PTPCHA 000236' INT +PTPCHN 000005 +PTPCHR 000224' INT +PTPCNT 000235' INT +PTPCTR 000234' INT +PTPDAT 000223' INT +PTPDB 000223' INT +PTPDSP 000226' EXT +PTPIOS 000225' INT +PTPMOD 000227' INT +PTPPTR 000232' INT +PTPSER 000226' INT +PTPSIO 000237' INT +PTR 000254' +PTRADR 000247' INT +PTRBUF 000246' INT +PTRCHN 000005 +PTRCHR 000241' INT +PTRCTR 000251' INT +PTRDAT 000240' INT +PTRDB 000240' INT +PTRDSP 000243' EXT +PTRIOS 000242' INT +PTRMOD 000244' INT +PTRPTR 000250' INT + + + IOINI2 - IO INITIALIZATION PART 2 MACRO 10 05:51 24-APR-78 PAGE 12-4 +IOINI2 MAC 24-APR-78 03:06 SYMBOL TABLE + +PTRSER 000243' INT +PTRSV1 000253' INT +PTRSVC 000252' INT +RUN 200000 INT +RUNABL 204000 INT +SCNCHN 000003 +SCNLIN 000001 +STTYB1 000021 INT +STTYBF 000020 INT +TAC 000001 INT +TAC1 000002 INT +TCONLN 000001 INT +TEM 000010 INT +TSCNLN 000000 INT +TTY0 000035' +TTY0DB 000001' INT +TTY1 000071' +TTY1DB 000035' INT +TTYATC 020000 INT +TTYBFE 000033 INT +TTYBM1 000013 INT +TTYBUF 000014 INT +TTYCTR 000012 INT +TTYDSP 000040' EXT +TTYLEN 000002 INT +TTYLST 000001' INT +TTYPTR 000011 INT +TTYSAV 000013 INT +TTYUSE 010000 INT +UDIR 000012 INT +UFREE 000011 INT +USRMOD 010000 INT +UTDSP 000135' EXT +UUO 000014 INT + JJJ OOOOOOOOO BBBBBBBBBBBB DDDDDDDDDDDD AAAAAAAAA TTTTTTTTTTTTTTT + JJJ OOOOOOOOO BBBBBBBBBBBB DDDDDDDDDDDD AAAAAAAAA TTTTTTTTTTTTTTT + JJJ OOOOOOOOO BBBBBBBBBBBB DDDDDDDDDDDD AAAAAAAAA TTTTTTTTTTTTTTT + JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBBBBBBBBBBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBBBBBBBBBBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBBBBBBBBBBB DDD DDD AAA AAA TTT +JJJ JJJ OOO OOO BBB BBB DDD DDD AAAAAAAAAAAAAAA TTT +JJJ JJJ OOO OOO BBB BBB DDD DDD AAAAAAAAAAAAAAA TTT +JJJ JJJ OOO OOO BBB BBB DDD DDD AAAAAAAAAAAAAAA TTT +JJJ JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT +JJJ JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT +JJJ JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT + JJJJJJJJJ OOOOOOOOO BBBBBBBBBBBB DDDDDDDDDDDD AAA AAA TTT + JJJJJJJJJ OOOOOOOOO BBBBBBBBBBBB DDDDDDDDDDDD AAA AAA TTT + JJJJJJJJJ OOOOOOOOO BBBBBBBBBBBB DDDDDDDDDDDD AAA AAA TTT + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :JOBDAT.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:35 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1732 +File will be deleted after printing + +JOBDAT - JOB DATA AREA ASSIGNMENTS MACRO 10 05:51 24-APR-78 PAGE 1 +JOBDAT MAC 24-APR-78 01:24 + + TITLE JOBDAT - JOB DATA AREA ASSIGNMENTS + + DEFINE BLK (A,B) + <JOBPRO=B + A=0 + ENTRY A + DEFINE BLK (C,D) + <C=JOBPRO + JOBPRO=JOBPRO+D + ENTRY C>> + + BLK JOBAC,20 ;SYSTEM USE AC STORAGE + BLK JOBDAC,20 ;USER'S AC STORAGE WHILE JOB IS INACTIV + 000157 JOBDHI=JOBDAT+17 ;HIGHEST AC SAVED WHILE INACTIVE + BLK JOBUUO,1 ;UUO SAVE AND TRAP LOCATIONS + BLK JOB41,1 ;UUO JSR LOCATION + BLK JOBPC,1 ;BITS 0-5=APR FLAGS, C(RH)=PC + BLK JOBPDP,1 ;PUSH DOWN POINTER FOR SYSTEM USE + 000043 JOBPRT=JOBPDP ;FIRST LOC PROTECTED FROM ITNERRUPT SER + 000044 JOBPR1=JOBPRT+1 ;FIRST LOC+1 + BLK JOBREL,1 ;C(LH)=0, C(RH)=RELOCATION ADDRESS + BLK JOBUXT,1 ;EXIT FROM UUO AT BREAK + BLK JOBLEV,1 ;C(40) WHEN INACTIVE + BLK JOBSAV,1 ;TEMPOARY STORAGE FOR UOO HANDLER + BLK JOBPOV,1 ;PUSH DOWN OVERFLOW TRAP + BLK JOBTEM,1 ;(UNUSED)TEMPORARY SYSTEM STORAGE + BLK JOBTM1,1 ;" + BLK JOBINF,1 ;UNUSED + BLK JOBJDA,20 ;JOB IO DEVICE CHANNEL ASSIGNMENTS + BLK JOBDDT,1 ;ADDRESS OF USER'S DDT + 000073 JOBPFI=JOBDDT-1 ;LAST LOC PROTECTED FROM IO SERVICE + 000074 JOBPFU=JOBDDT ;LAST LOC PROTECTED FROM USER + BLK JOBCDP,1 ;(UNUSED)POINTER TO COMMAND STRING + BLK JOBTRP,20 ;(UNUSED)TRAP LOCATIONS + BLK JOBSYM,1 ;SYMBOL TABLE POINTER + BLK JOBUSY,1 ;(UNUSED)POINTER TO UNDEFINED SYMBOL TA + BLK JOBSA,1 ;C(RH)=STARTING ADDRESS + ;C(LH)=HIGHEST LOCATION USED + BLK JOBFF,1 ;FIRST FREE LOCATION + 000140 JOBDAT=140 ;LENGTH OF JOB DATA AREA + 000137 JOBHGH=JOBDAT-1 ;HIGHEST LOC IN JOB DATA AREA + 000121 JOBPDL=JOBPRO-1 ;FIRST LOC. -1 OF PD LIST + 000122 JOBPD1=JOBPDL+1 ;FIRST LOC. IN PD LIST + 777777 777762 MJOBPD=JOBPDL-JOBHGH ;- LENGTH OF PD LIST + 000122 JOBS41=JOBPRO ;PLACE WHERE SAVE-GET SAVES USER LOC 4 + 000140 JOBDA=JOBDAT + ENTRY JOBPFI,JOBPFU,JOBPDL,JOBPRO,MJOBPD,JOBHGH + ENTRY JOBDHI,JOBPRT,JOBPR1,JOBDA,JOBS41,JOBPD1 + + END, + +NO ERRORS DETECTED + + + JOBDAT - JOB DATA AREA ASSIGNMENTS MACRO 10 05:51 24-APR-78 PAGE 1-1 +JOBDAT MAC 24-APR-78 01:24 + +PROGRAM BREAK IS 000000 + +8K CORE USED + + JOBDAT - JOB DATA AREA ASSIGNMENTS MACRO 10 05:51 24-APR-78 PAGE 2 +JOBDAT MAC 24-APR-78 01:24 SYMBOL TABLE + +JOB41 000041 ENT +JOBAC 000000 ENT +JOBCDP 000075 ENT +JOBDA 000140 ENT +JOBDAC 000020 ENT +JOBDAT 000140 +JOBDDT 000074 ENT +JOBDHI 000157 ENT +JOBFF 000121 ENT +JOBHGH 000137 ENT +JOBINF 000053 ENT +JOBJDA 000054 ENT +JOBLEV 000046 ENT +JOBPC 000042 ENT +JOBPD1 000122 ENT +JOBPDL 000121 ENT +JOBPDP 000043 ENT +JOBPFI 000073 ENT +JOBPFU 000074 ENT +JOBPOV 000050 ENT +JOBPR1 000044 ENT +JOBPRO 000122 ENT +JOBPRT 000043 ENT +JOBREL 000044 ENT +JOBS41 000122 ENT +JOBSA 000120 ENT +JOBSAV 000047 ENT +JOBSYM 000116 ENT +JOBTEM 000051 ENT +JOBTM1 000052 ENT +JOBTRP 000076 ENT +JOBUSY 000117 ENT +JOBUUO 000040 ENT +JOBUXT 000045 ENT +MJOBPD 777777 777762 ENT + + LLL PPPPPPPPPPPP TTTTTTTTTTTTTTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +LLL PPPPPPPPPPPP TTTTTTTTTTTTTTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +LLL PPPPPPPPPPPP TTTTTTTTTTTTTTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +LLL PPP PPP TTT SSS EEE RRR RRR +LLL PPP PPP TTT SSS EEE RRR RRR +LLL PPP PPP TTT SSS EEE RRR RRR +LLL PPP PPP TTT SSS EEE RRR RRR +LLL PPP PPP TTT SSS EEE RRR RRR +LLL PPP PPP TTT SSS EEE RRR RRR +LLL PPPPPPPPPPPP TTT SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +LLL PPPPPPPPPPPP TTT SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +LLL PPPPPPPPPPPP TTT SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +LLL PPP TTT SSS EEE RRR RRR +LLL PPP TTT SSS EEE RRR RRR +LLL PPP TTT SSS EEE RRR RRR +LLL PPP TTT SSS EEE RRR RRR +LLL PPP TTT SSS EEE RRR RRR +LLL PPP TTT SSS EEE RRR RRR +LLLLLLLLLLLLLLL PPP TTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +LLLLLLLLLLLLLLL PPP TTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +LLLLLLLLLLLLLLL PPP TTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :LPTSER.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:35 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1729 +File will be deleted after printing + +LPTSER - LINE PRINTER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 8-4-65 + + XLIST + LIST + TITLE LPTSER - LINE PRINTER SERVICE ROUTINE + SUBTTL 8-4-65 + INTERNAL LPTINT,LPTINI + EXTERNAL LPTCHN, LPTCHL, LPTRET, OUT, WAIT1, LPTSAV, IOSET + EXTERNAL ADVBFE, SETIOD,ILLINP,LPTCHB,LPTCLB + + ;DEVICE DATA BLOCK LINKAGE + EXTERNAL LPTDAT,LPTCHR,LPTIOS,LPTSER,LPTMOD,LPTBUF,LPTPTR + EXTERNAL LPTADR,LPTSV1 + ENTRY LPTDSP + + LPTSER - LINE PRINTER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 2 +LPTSER MAC 24-APR-78 01:26 8-4-65 + + + + ,LPT PARAMETER ASSIGNMENTS + + , LPT CONTROL REGISTER + 002000 LPTCLR=2000 ;CLEAR BUFFER + 000100 LPTDON=100 ;DONE FLAG + 000400 LPTERR=400 ;ERROR FLAG + 001000 LPTLOV=1000 ;LINE OVERFLOW + + , SPECIAL IO STATUS WORD ASSIGNMENTS + 100000 LPTADV=100000 + + REPEAT 0,< + , LPT DATABLOCK + + LPTDAT: SIXBIT .LPT. + LPTCHR: 32 + LPTIOS: 0 + LPTSER: EXP LPTDSP + LPTMOD: XWD 0,3 + 0 + LPTBUF: 0 + LPTPTR: 0 + LPTADR: XWD PROG,0 + LPTSV1: 0 + > + + , LPT SERVICE DISPATCH TABLE + + 000000' 254000 000004' LPTDSP: JRST LPTINI ;RELEASE + 000001' 254000 000007' JRST LPTCLS ;CLOSE + 000002' 254000 000013' JRST LPTOUT ;OUTPUT + 000003' 254000 000000* JRST ILLINP ;INPUT + + 000004' 712600 002000 LPTINI: CONO LPT,LPTCLR ;LPT INITIALIZE + 000005' 513000 000034' HLLZS LPTINT + 000006' 263140 000000 POPJ PDP, + + LPTSER - LINE PRINTER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 3 +LPTSER MAC 24-APR-78 01:26 8-4-65 + + + +E 000007' 260140 000000* LPTCLS: PUSHJ PDP,OUT ;PRINT REMAINING BUFFERS + 000010' 260140 000000* PUSHJ PDP, WAIT1 ;WAIT FOR IOACT=0 + 000011' 712540 000126' DATAO LPT,LPTTOP ;PRINT CARRAGE RETURN, FORM FEED + 000012' 263140 000000 POPJ PDP, ;CLOSE RETURN + + 000013' 660000 010000 LPTOUT: TRO IOS,IOACT ;IOACT=1 + 000014' 621000 400000 TLZ IOS,IODISC ;IODISC:=0 + 000015' 661000 000020 TLO IOS,IO ;IO:=1 + 000016' 603000 000002 TLNE IOS,IOBEG ;VIRGIN DEVICE? IOBEG:=0 + 000017' 254000 000024' JRST LPTBEG ;YES + 000020' 260140 000127' PUSHJ PDP,LPTSET + 000021' 202000 000000* MOVEM IOS,LPTIOS ;C(LPTIOS):=C(IOS) + 000022' 201040 000100 MOVEI TAC,LPTDON + 000023' 254000 000030' JRST LPTBG1 + + 000024' 661000 400000 LPTBEG: TLO IOS,IODISC + 000025' 202000 000021* MOVEM IOS,LPTIOS ;C(LPTIOS):=C(IOS) + 000026' 260140 000127' PUSHJ PDP,LPTSET + 000027' 201040 002000 MOVEI TAC,LPTCLR + 000030' 201100 001500 LPTBG1: MOVEI TAC1,LPTLOV+LPTERR+LPTDON + 000031' 542100 000034' HRRM TAC1,LPTINT + 000032' 712601 000000* CONO LPT, LPTCHB(TAC) ;CLEAR BUFFER AND ASSIGN PI C + 000033' 263140 000000 POPJ PDP, ;RETURN + + LPTSER - LINE PRINTER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 4 +LPTSER MAC 24-APR-78 01:26 8-4-65 + + + + + , LINE PRINTER INTERRUPT SERVICE + + 000034' 712740 001500 LPTINT: CONSO LPT,LPTLOV+LPTERR+LPTDON;LINE OVERFLOW, ERROR OR DONE + 000035' 254000 000034' JRST LPTINT ;IF LPT IS IN FLAG LIST, GO TO ERROR, E + 000036' 712700 000070 CONSZ LPT,70 + 000037' 712740 000100 CONSO LPT,LPTDON + 000040' 254000 000102' JRST LPTERI ;YES + 000041' 335000 000025* LPTIN1: SKIPGE LPTIOS ;IODISC=1? + 000042' 254000 000053' JRST LPTDSC ;YES + 000043' 712500 000000* BLKO LPT,LPTPTR ;PRINT + 000044' 334000 000000 SKIPA ;BUFFER EMPTY + 000045' 254520 000000* JEN @LPTCHL ;DISMISS INTERRUPT AND RETURN + 000046' 202040 000000* MOVEM TAC,LPTSV1 ;SAVE TAC + 000047' 515040 400000 HRLZI TAC,IODISC ;IODISC:=1 + 000050' 436040 000041* IORM TAC,LPTIOS + 000051' 200040 000046* LPTERX: MOVE TAC,LPTSV1 ;RESTORE TAC + 000052' 254520 000045* JEN @LPTCHL ;DISMISS INTERRUPT AND RETURN + + 000053' 264000 000000* LPTDSC: JSR LPTSAV ;SAVE ACCUMULATORS AND ESTABL + 000054' 201300 000000* MOVEI DEVDAT,LPTDAT ;DEVDAT:=LPTDAT + 000055' 260140 000000* PUSHJ PDP,IOSET ;PROG:=C(JBTADR18-35),ITEM:=C(DEVPTR) + 000056' 200000 000050* MOVE IOS,LPTIOS + 000057' 623000 000002 TLZE IOS,IOBEG + 000060' 254000 000077' JRST LPTBG ;PUT OUT CR-LF + 000061' 260140 000000* PUSHJ PDP,ADVBFE ;ADVANCE BUFFER + 000062' 254000 000073' JRST LPTOFF ;NEXT BUFFER EMPTY + 000063' 602000 000040 TRNE IOS,IOCON ;CONTINUOUS? (IOCON=0?) + 000064' 254000 000073' JRST LPTOFF ;NO + 000065' 621000 400000 TLZ IOS,IODISC + 000066' 260140 000127' PUSHJ PDP,LPTSET ;SET LPTPTR + + 000067' 623000 000001 LPTINX: TLZE IOS,IOW ;IN A WAIT? IOW:=0 + 000070' 260140 000000* PUSHJ PDP,SETIOD ;YES. IOWS:=1 + 000071' 202000 000056* LPTXIT: MOVEM IOS,LPTIOS ;C(LPTIOS):=C(IOS) + 000072' 254000 000000* JRST LPTRET ;RESTORE ACCUMULATORS AND DIS + + 000073' 620000 010000 LPTOFF: TRZ IOS,IOACT + 000074' 712600 000000 CONO LPT,0 + 000075' 513000 000034' HLLZS LPTINT ;TURN LPT OFF + 000076' 254000 000067' JRST LPTINX + + 000077' 712540 000126' LPTBG: DATAO LPT,LPTTOP ;SEND OUT CR-FF + 000100' 621000 400000 TLZ IOS,IODISC ;WHEN IODISC=1 + 000101' 254000 000071' JRST LPTXIT + + LPTSER - LINE PRINTER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 5 +LPTSER MAC 24-APR-78 01:26 8-4-65 + + + + ;HERE ON EITHER OVERFLOW OR ERROR(OFFLINE) OR ERROR CHANNEL + ;NOT ASSIGNED. + + 000102' 202040 000051* LPTERI: MOVEM TAC,LPTSV1 ;SAVE TAC + 000103' 712740 001000 CONSO LPT,LPTLOV ;LINE OVERFLOW? + 000104' 254000 000111' JRST LPTER1 ;NO + 000105' 210040 000137' MOVN TAC,[EXP 100001] ;YES, DECREMENT POINTER + 000106' 272040 000043* ADDM TAC,LPTPTR + 000107' 712540 000140' DATAO LPT,[EXP 15B6+12B13] ;PRINT CARRIAGE RETURN, LINE + 000110' 254000 000051' JRST LPTERX + + 000111' 712740 000070 LPTER1: CONSO LPT,70 ;ERROR INTERRUPT ASSIGNED? + 000112' 254000 000117' JRST LPTER2 ;NO + 000113' 712600 000000* CONO LPT,LPTCLB ;YES, DEASSIGN IT,SET BUSY,CLEAR REST + 000114' 201040 000100 MOVEI TAC,LPTDON ;ENABLE FOR DONE FLAG ONLY + 000115' 542040 000034' LPTERA: HRRM TAC,LPTINT + 000116' 254000 000051' JRST LPTERX + + 000117' 712640 000001 LPTER2: CONI LPT,TAC + 000120' 405040 000300 ANDI TAC,300 + 000121' 712601 000032* CONO LPT,LPTCHB(TAC) + 000122' 201040 001500 MOVEI TAC,LPTDON+LPTERR+LPTLOV + 000123' 542040 000034' HRRM TAC,LPTINT + 000124' 200040 000102* MOVE TAC,LPTSV1 + 000125' 254000 000041' JRST LPTIN1 + 000126' 064300 000000 LPTTOP: EXP 15B6+14B13 ;CARRIAGE RETURN, FORM FEED + + LPTSER - LINE PRINTER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 6 +LPTSER MAC 24-APR-78 01:26 8-4-65 + + + + ,SET UP PRINTER COUNTER AND POINTER + + 000127' 201060 000000* LPTSET: MOVEI TAC,@LPTADR ;LPTPTR:=-(WORD COUNT+1), BUFFER ADDRES + 000130' 210101 000001 MOVN TAC1,1(TAC) + 000131' 504040 000002 HRL TAC,TAC1 + 000132' 343040 000134' AOJLE TAC,.+2 ;C(LPTPTR0-17)<0? + 000133' 561040 000135' HRROI TAC,LPTNUL-1 + 000134' 202040 000106* MOVEM TAC,LPTPTR + 000135' 263140 000000 POPJ PDP, ;RETURN + + 000136' 000000 000000 LPTNUL: 0 + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000141 + +9K CORE USED + + LPTSER - LINE PRINTER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 7 +LPTSER MAC 24-APR-78 01:26 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADVBFE 000061' EXT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT + + + LPTSER - LINE PRINTER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 7-1 +LPTSER MAC 24-APR-78 01:26 SYMBOL TABLE + +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +ILLINP 000003' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSET 000055' EXT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +LPT 000124 SPD +LPTADR 000127' EXT +LPTADV 100000 +LPTBEG 000024' +LPTBG 000077' +LPTBG1 000030' +LPTBUF 000000 EXT +LPTCHB 000121' EXT +LPTCHL 000052' EXT +LPTCHN 000000 EXT +LPTCHR 000000 EXT + + LPTSER - LINE PRINTER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 7-2 +LPTSER MAC 24-APR-78 01:26 SYMBOL TABLE + +LPTCLB 000113' EXT +LPTCLR 002000 +LPTCLS 000007' +LPTDAT 000054' EXT +LPTDON 000100 +LPTDSC 000053' +LPTDSP 000000' ENT +LPTER1 000111' +LPTER2 000117' +LPTERA 000115' +LPTERI 000102' +LPTERR 000400 +LPTERX 000051' +LPTIN1 000041' +LPTINI 000004' INT +LPTINT 000034' INT +LPTINX 000067' +LPTIOS 000071' EXT +LPTLOV 001000 +LPTMOD 000000 EXT +LPTNUL 000136' +LPTOFF 000073' +LPTOUT 000013' +LPTPTR 000134' EXT +LPTRET 000072' EXT +LPTSAV 000053' EXT +LPTSER 000000 EXT +LPTSET 000127' +LPTSV1 000124' EXT +LPTTOP 000126' +LPTXIT 000071' +MTW 010000 INT +OBUFB 100000 INT +OUT 000007' EXT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PROG 000007 INT +RUN 200000 INT +RUNABL 204000 INT +SETIOD 000070' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT +WAIT1 000010' EXT + MMM MMM TTTTTTTTTTTTTTT PPPPPPPPPPPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +MMM MMM TTTTTTTTTTTTTTT PPPPPPPPPPPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +MMM MMM TTTTTTTTTTTTTTT PPPPPPPPPPPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +MMMMMM MMMMMM TTT PPP PPP SSS EEE RRR RRR +MMMMMM MMMMMM TTT PPP PPP SSS EEE RRR RRR +MMMMMM MMMMMM TTT PPP PPP SSS EEE RRR RRR +MMM MMM MMM TTT PPP PPP SSS EEE RRR RRR +MMM MMM MMM TTT PPP PPP SSS EEE RRR RRR +MMM MMM MMM TTT PPP PPP SSS EEE RRR RRR +MMM MMM TTT PPPPPPPPPPPP SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +MMM MMM TTT PPPPPPPPPPPP SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +MMM MMM TTT PPPPPPPPPPPP SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +MMM MMM TTT PPP SSS EEE RRR RRR +MMM MMM TTT PPP SSS EEE RRR RRR +MMM MMM TTT PPP SSS EEE RRR RRR +MMM MMM TTT PPP SSS EEE RRR RRR +MMM MMM TTT PPP SSS EEE RRR RRR +MMM MMM TTT PPP SSS EEE RRR RRR +MMM MMM TTT PPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +MMM MMM TTT PPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +MMM MMM TTT PPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :MTPSER.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:35 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1720 +File will be deleted after printing + +MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 L. HANTMAN 8-9-65 + + XLIST + LIST + TITLE MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES + SUBTTL L. HANTMAN 8-9-65 + 000004 T=ITEM + ; MAG TAPE SERVICE SUBROUTINES + + 000000' 260140 000000* MTAPE1: PUSHJ PDP,WAIT1 + 000001' 551000 776000 HRRZI IOS,776000 + 000002' 413006 000002 ANDCAB IOS,DEVIOS(DEVDAT) + 000003' 201214 000000 MOVEI T,(UUO) + 000004' 260140 000007' PUSHJ PDP,MTAPE+1 + 000005' 254000 000000* JRST UXIT + + 000006' 260140 000000* MTAPE: PUSHJ PDP,WAIT1 + 000007' 621000 010000 TLZ IOS,IODT + 000010' 660000 010000 TRO IOS, IOACT ;SET ACTIVE + 000011' 260140 000063' PUSHJ PDP,MTCHK2 ;CHECK IF MAG TAPE CONTROL AV + 000012' 242200 000010 LSH T,^D8 ;MOVE TO FUNCTION + 000013' 405200 007400 ANDI T,7400 ;MODE BITS + 000014' 306200 004000 CAIN T,4000 ;LOGICAL EOT? + 000015' 254000 000435' JRST MTLEOT + 000016' 302200 000400 CAIE T,400 ;RWD? + 000017' 254000 000022' JRST .+3 + 000020' 722700 004000 CONSZ 224,4000 ;AT LOAD POINT? + 000021' 254000 000517' JRST MTDMP4 + 000022' 201040 000001 MOVEI TAC, TCF ;LOOK FOR TAPE CONTROL FREE 0 + 000023' 542040 000044' MTGO1: HRRM TAC, MTCONO + 000024' 542040 000211' HRRM TAC, MTCINT + 000025' 135040 000000* MTGO1A: LDB TAC,PUNIT ;UNIT + 000026' 137040 000536' DPB TAC,[POINT 3,T,31] ;UNIT + 000027' 135040 000537' LDB TAC, [POINT 3, IOS,28] ;DENSITY PARITY + 000030' 431040 000005 XORI TAC, 5 ;ODD, 556 + 000031' 137040 000540' DPB TAC,[POINT 3,T,23] + 000032' 201044 000000* MOVEI TAC,MTCCHN(T) ;CHANNEL + + 000033' 722600 000000 MTGO: CONO 224, 0 ;DISABLE ALL INTERRUPTS + 000034' 660040 000200 TRO TAC, 200 ;INHIBIT RETURN TO POOL + 000035' 722201 000000 CONO 220,(TAC) ;COMMAND + 000036' 402000 000533' SETZM MTEOFF# ;CLEAR EOF FLAG + 000037' 542300 000532' HRRM DEVDAT,MTDEV# ;COMMAND, DVDB + 000040' 506040 000532' HRLM TAC,MTDEV + 000041' 603000 010000 TLNE IOS,IODT + 000042' 700600 002100 CONO PI,2000+DCB + 000043' 201040 000225' MOVEI TAC,MTPDUN + HRRM TAC, MTIDSP + 000044' 722600 000005 MTCONO: CONO 224,TCF+ERF ;ENABLE FLAGS + 000045' 263140 000000 POPJ PDP, + + ;READ + 000046' 621000 000020 MTIN: TLZ IOS, IO ;READING + 000047' 260140 000056' PUSHJ PDP,MTCHEK ;IS SYSTEM AVAILABLE? + 000050' 460066 000007 SETCM TAC,@DEVIAD(DEVDAT) ;-SIZE-1 + 000051' 541066 000007 MTIN1: HRRI TAC,@DEVIAD(DEVDAT) ;BUFFER ADDRESS, PROG INCLUDE + 000052' 270040 000541' ADD TAC,[XWD 2,1] ;-SIZE+1,BUFFER+1 + 000053' 201200 002400 MOVEI T,2400 ;READ + 000054' 200100 000542' MTIN2: MOVE TAC1,[BLKI DC,4000+DCN+MTDC*10] + 000055' 254000 000132' JRST MTINDC + +MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 2 +MTPSER MAC 24-APR-78 01:34 L. HANTMAN 8-9-65 + + + ;IS SYSTEM AVAILABLE + 000056' 660000 010000 MTCHEK: TRO IOS, IOACT ;SET ACTIVE + 000057' 661000 010000 TLO IOS, IODT ;SET FOR DATA TRANSFER + 000060' 202006 000002 MOVEM IOS, DEVIOS(DEVDAT) + 000061' 352000 000000* MTCHK1: AOSE DCREQ + 000062' 260140 000000* PUSHJ PDP,DCWAIT + 000063' 621000 004002 MTCHK2: TLZ IOS, IOSEOF+IOBEG ;CLEAR SPACE TO EOF + 000064' 202006 000002 MOVEM IOS, DEVIOS(DEVDAT) ;STORE BITS + 000065' 352000 000000* AOSE MTREQ + 000066' 260140 000000* PUSHJ PDP,MTWAIT + 000067' 256000 000025' XCT MTGO1A ;UNIT + 000070' 241040 000004 ROT TAC, 4 ;PUT IN UNIT POSITION + 000071' 722201 000200 CONO 220, 200(TAC) ;HAS UNIT ONLY + 000072' 722600 000002 CONO 224, SEL ;JAM UNIT INTO COMMAND BUFFER + 000073' 722700 000002 CONSZ 224, SEL ;UNIT NOT READY? + 000074' 263140 000000 POPJ PDP, 0 ;EXIT + 000075' 241040 777774 ROT TAC, -4 ;UNIT IN TAC + 000076' 542301 000425' HRRM DEVDAT, MTSTAK(TAC) ;PUT IN STACK + 000077' 200100 000543' MOVE TAC1, [XWD MTCLOK,^D32] ;HALF SECOND + 000100' 137040 000544' DPB TAC, [POINT 3,TAC1,23] ;STORE UNIT NUMBER + 000101' 506101 000425' HRLM TAC1, MTSTAK(TAC) ;SAVE ACTUAL CLOCK REQUEST + 000102' 700600 000400 CONO PI, 400 ;TURN OFF PI + 000103' 136100 000000* IDPB TAC1, CLOCK ;REQUEST CLOCK RETURN TO MTCL + 000104' 700600 000200 CONO PI, 200 ;TURN PI ON + 000105' 371000 000065* SOSL MTREQ ;DECREMENT REQUEST COUNT, ANYONE LEFT W + 000106' 476000 000000* SETOM MTAVAL ;YES,SET MAG TAPE AVAL + 000107' 607000 010000 TLNN IOS, IODT ;NON-DATA TRANSFER? + 000110' 254000 000113' JRST MTCHK3 ;YES + 000111' 371000 000061* SOSL DCREQ ;NO,DECREMENT REQUEST COUNT,ANYONE LEFT + 000112' 476000 000000* SETOM DCAVAL ;YES,SET DATA CONTROL AVAILAB + 000113' 260140 000000* MTCHK3: PUSHJ PDP, WSYNC ;REQUEST WAIT + 000114' 200006 000002 MOVE IOS, DEVIOS(DEVDAT) ;LOAD STATUS + 000115' 607000 010000 TLNN IOS, IODT ;DATA TRANFER? + 000116' 254000 000065' JRST MTCHK2+2 ;CHECK FOR MT AVAILABLE ONLY + 000117' 254000 000061' JRST MTCHK1 ;CHECK FOR MT AND DC AVAIALABL + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 3 +MTPSER MAC 24-APR-78 01:34 L. HANTMAN 8-9-65 + + + ;WRITE + 000120' 661000 000020 MTOUT: TLO IOS, IO ;WRITING + 000121' 260140 000056' PUSHJ PDP,MTCHEK + 000122' 722700 000200 CONSZ 224,200 ;IS FILE PROTECT RING IN? + 000123' 254000 000145' JRST MTOUTE ;NO, ERROR CANT WRITE. CROCK!! + 000124' 201066 000010 MTOUT1: MOVEI TAC,@DEVOAD(DEVDAT) ;BUFFER ADDRESS, PROG INCLUDE + 000125' 210101 000001 MOVN TAC1,1(TAC) ;-WD COUNT + 000126' 504040 000002 HRL TAC,TAC1 ;-WD CMT,BUFFER + 000127' 347040 000273' AOJG TAC,MTNOTI ;BUFFER+1, TEST FOR ZERO WORD COUNT + 000130' 200040 000545' MTOUT2: MOVE TAC,[BLKO DC,3400+DCN+MTDC*10] + 000131' 201200 001000 MOVEI T,1000 ;WRITE + 000132' 202040 000531' MTINDC: MOVEM TAC,MTDCCN# ;BLKO POINTER + 000133' 202040 000526' MOVEM TAC,DCWRD# + 000134' 552100 000527' HRRZM TAC1, MDCSAV# ;SAVE DC COMMAND + 000135' 541100 000526' HRRI TAC1,DCWRD + 000136' 202100 000042 MOVEM TAC1,40+<2*DCN> ;BLK COMMAND + 000137' 200100 000546' MOVE TAC1,[JSR MTDCND] + 000140' 202100 000043 MOVEM TAC1,41+<2*DCN> + 000141' 700600 001100 CONO PI,1100 + 000142' 720220 000527' CONO DC, @MDCSAV ;DATA CONTROL COMMAND + 000143' 201040 000004 MOVEI TAC, ERF + 000144' 254000 000023' JRST MTGO1 + + 000145' 660000 200000 MTOUTE: TRO IOS,IODERR ;WRITE LOCK, DEVICE ERROR + 000146' 260140 000246' PUSHJ PDP,MTEND1 + 000147' 254000 000005* JRST UXIT + + 000150' 135040 000000* MTCLS: LDB TAC,PIOMOD ;MODE + 000151' 307040 000016 CAIG TAC, 16 ;DUMP MODE + 000152' 254000 000157' JRST MTCLS1 ;CLOSE OUTPUT + 000153' 603000 000020 TLNE IOS,IO ;INPUT? + 000154' 254000 000160' JRST MTCLS1+1 ;WRITE EOFS + 000155' 201200 000016 MOVEI T,16 ;SPACE TO EOF + 000156' 254000 000006' JRST MTAPE ;GOES BACK TO UUO LEVEL + 000157' 260140 000000* MTCLS1: PUSHJ PDP,OUT + 000160' 201200 000003 MOVEI T,3 ;WRITE IOF + 000161' 260140 000006' PUSHJ PDP, MTAPE + 000162' 201200 000003 MOVEI T,3 ;WRITE EOF + 000163' 260140 000006' PUSHJ PDP, MTAPE + 000164' 201200 000007 MOVEI T,7 ;BSP + 000165' 254000 000006' JRST MTAPE + 000166' 263140 000000 MTDISP: POPJ PDP, ;RELEASE + 000167' 254000 000150' JRST MTCLS ;CLOSE + 000170' 254000 000120' JRST MTOUT ;WRITE + 000171' 254000 000046' JRST MTIN ;READ + 000172' 254000 000000* JRST CUXIT1 ;ENTER IN DIRECTORY + 000173' 254000 000172* JRST CUXIT1 ;LOOKUP IN DIRECTORY + 000174' 254000 000454' JRST MTDMPO ;DUMP OUT + 000175' 254000 000504' JRST MTDMPI ;DUMP IN + 000176' 254000 000147* JRST UXIT ;SETO + 000177' 254000 000176* JRST UXIT ;SETI + 000200' 254000 000177* JRST UXIT ;GETF + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 3-1 +MTPSER MAC 24-APR-78 01:34 L. HANTMAN 8-9-65 + + + 000201' 210040 000453' MTCINI: MOVN TAC, MTREDO ;REPEAT COUNTER + 000202' 572040 000534' HRREM TAC, MTERCN ;RESET ERROR CNTR + 000203' 722600 000000 CONO 224,0 ;CLEAR ENABLES + 000204' 513000 000211' HLLZS MTCINT ;CLEAR CONSO + 000205' 263140 000000 POPJ PDP, + + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 4 +MTPSER MAC 24-APR-78 01:34 L. HANTMAN 8-9-65 + + + + + ;BLK COUNTED OUT + + 000206' 000000 000000 MTDCND: 0 + 000207' 700600 001100 CONO PI,DCB+1000 ;SHUT OF DC CHANNEL + 000210' 254520 000206' JEN @MTDCND + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 5 +MTPSER MAC 24-APR-78 01:34 L. HANTMAN 8-9-65 + + + + ;FLAG FROM TAPE CONTROL. SET UP BY INSERT MACRO + 000211' 722740 000005 MTCINT: CONSO 224,TCF+ERF + 000212' 254000 000212' JRST . + 000213' 264000 000000* JSR MTCSAV ;SAVE ACS + 000214' 550300 000532' HRRZ DEVDAT,MTDEV ;DVBD + 000215' 135340 000000* LDB PROG,PJOBN; JOB NUMBER + 000216' 550347 000000* HRRZ PROG, JBTADR(PROG) + 000217' 200006 000002 MOVE IOS, DEVIOS(DEVDAT) + 000220' 722740 000001 CONSO 224,TCF ;TAPE CONTROL FREE + 000221' 254000 000323' JRST MTEOR + 000222' 254000 000225' MTIDSP: JRST MTPDUN ;POINTS TO MTERR FOR ERROR + 000223' 254000 000355' JRST MTBSP ;AFTER BACKSPACE + 000224' 254000 000335' JRST MTERR ;IF ERROR FOUND + 000225' 607000 010000 MTPDUN: TLNN IOS,IODT + 000226' 254000 000312' JRST MTNIO2 + 000227' 135040 000150* LDB TAC,PIOMOD + 000230' 301040 000016 CAIL TAC,16 + 000231' 254000 000246' JRST MTEND1 ;DUMP + 000232' 603000 000020 TLNE IOS,IO + 000233' 254000 000273' JRST MTNOTI ;WRITING + 000234' 332000 000533' SKIPE MTEOFF ;NOT EOF? + JRST MTEOF + 000235' 201066 000007 MTINDN: MOVEI TAC,@DEVIAD(DEVDAT) ;BUFFER ADDRESS + 000236' 210100 000531' MOVN TAC1,MTDCCN ;WD CNT-1 + 000237' 253100 000240' AOBJN TAC1, .+1 ;WD CNT + 000240' 513000 000002 HLLZS TAC1 ;CLR RT HALF + 000241' 270100 000526' ADD TAC1,DCWRD ;ADD CURRENT COUNT=NO. OF WDS + 000242' 546101 000001 HLRM TAC1,1(TAC) ;STORE AT WORD COUNT + 000243' 260140 000000* PUSHJ PDP,ADVBFF + 000244' 254000 000246' JRST .+2 ;NEXT BUFFER FULL + 000245' 254000 000275' JRST MTCON ;CONTINUE MODE + 000246' 720200 000000 MTEND1: CONO DC, 0 ;TURN OFF DATA CONTROL + 000247' 371000 000111* SOSL DCREQ ;DECREMENT REQUEST COUNT, ANYONE LEFT? + 000250' 476000 000112* SETOM DCAVAL ;YES, SET FLAG FOR CLOCK + 000251' 371000 000105* MTNIO: SOSL MTREQ + 000252' 476000 000106* SETOM MTAVAL ;YES, SET FLAG FOR CLOCK + 000253' 722700 010000 CONSZ 224,10000 ;END OF TAPE? + 000254' 660000 002000 TRO IOS, IOTEND ;SET END OF TAPE INDICATION + 000255' 620000 004000 TRZ IOS, IOBOT ;CLR LOAD POINT INDICATION + 000256' 722700 004000 CONSZ 224, 4000 ;LOAD POINT? + 000257' 660000 004000 TRO IOS, IOBOT ;SET LOAD POINT INDICATION + 000260' 722700 020000 CONSZ 224, 20000 ;TAPE REWINDING? + 000261' 660000 004000 TRO IOS, IOBOT ;SET LOAD POINT INDICATION + 000262' 623000 000001 TLZE IOS, IOW ;CLEAR WAIT + 000263' 260140 000000* PUSHJ PDP, SETIOD ;REQUEST WAIT SATISFIED + 000264' 620000 010000 TRZ IOS, IOACT ;CLEAR ACTIVE + 000265' 202006 000002 MOVEM IOS, DEVIOS(DEVDAT) ;RESTORE BITS + 000266' 722600 000000 CONO 224,0 ;CLEAR MAG TAPE ENABLES + 000267' 513000 000211' HLLZS MTCINT ;CLEAR CONSO + 000270' 210040 000453' MOVN TAC, MTREDO ;REPEAT COUNTER + 000271' 572040 000534' HRREM TAC, MTERCN# + 000272' 263140 000000 POPJ PDP, ;DISMISS INTERRUPT OR RETURN TO CALLER + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 6 +MTPSER MAC 24-APR-78 01:34 L. HANTMAN 8-9-65 + + + 000273' 260140 000000* MTNOTI: PUSHJ PDP,ADVBFE ;WRITING + 000274' 254000 000246' JRST MTEND1 + 000275' 602000 000040 MTCON: TRNE IOS,IOCON ;CONTINUOUS? + 000276' 254000 000246' JRST MTEND1 ;STOP TAPE + 000277' 722700 010000 CONSZ 224,10000 ;END OF TAPE? + 000300' 254000 000246' JRST MTEND1 ;STOP TAPE + 000301' 720200 000000 CONO DC,0 ;CLEAR DATA CONTROL + 000302' 623000 000001 TLZE IOS,IOW + 000303' 260140 000263* PUSHJ PDP,SETIOD + 000304' 202006 000002 MOVEM IOS,DEVIOS(DEVDAT) + 000305' 210040 000453' MOVN TAC,MTREDO + 000306' 572040 000534' HRREM TAC,MTERCN + 000307' 607000 000020 TLNN IOS,IO ;INPUT OR OUTPUT? + 000310' 254000 000051' JRST MTIN1 ;CALL INPUT SUBROUTINE + 000311' 254000 000124' JRST MTOUT1 ;CALL OUTPUT SUBROUTINE + 000312' 554040 000532' MTNIO2: HLRZ TAC,MTDEV ;COMMAND + 000313' 405040 007400 ANDI TAC,7400 + 000314' 302040 003000 CAIE TAC, 3000 ;SPACE ONE RECORD + 000315' 254000 000251' JRST MTNIO ;EXIT + 000316' 722700 000400 CONSZ 224, 400 ;EOF? + 000317' 661000 004000 TLO IOS, IOSEOF ;SET EOF DETECTED + 000320' 254000 000251' JRST MTNIO ;EXIT + 000321' 661000 000040 MTEOF: TLO IOS, IOEND + 000322' 254000 000246' JRST MTEND1 + 000323' 722700 000030 MTEOR: CONSZ 224,LPE+CPE ;IF END OF RECORD CHECK PARIT + 000324' 370000 000222' SOS MTIDSP ;IF ERROR CAUSE INTERRUPT TO + ;ERROR ROUTIE VIA TCF + 000325' 722700 000400 CONSZ 224, 400 ;EOF? + 000326' 476000 000533' SETOM MTEOFF ;SET EOF FLAG + 000327' 722600 000001 MTIGN: CONO 224, TCF ;IF ERF, CAUSE INTERRUPT TO D + ;PATCH TABLE, DISABLE ERF FLA + 000330' 202040 000206' MOVEM TAC, MTDCND ;SAVE TAC + 000331' 201040 000001 MOVEI TAC, TCF ;LOOK FOR TCF ONLY + 000332' 542040 000211' HRRM TAC, MTCINT ;SET CONSO + 000333' 200040 000206' MOVE TAC,MTDCND ;RESTORE TAC + 000334' 254000 000000* JRST MTCRET ;DISMISS AND RETURN VIA TCF + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 7 +MTPSER MAC 24-APR-78 01:34 L. HANTMAN 8-9-65 + + + 000335' 554040 000532' MTERR: HLRZ TAC,MTDEV ;COMMAND + 000336' 405040 007400 ANDI TAC,7400 + 000337' 306040 002400 CAIN TAC,2400 ;READ? + 000340' 254000 000343' JRST .+3 + 000341' 306040 001000 CAIN TAC,1000 ;WRITE + 000342' 254000 000401' JRST MTIGN2 ;IGNORE IF NOT RD OR WRITE + 000343' 606000 000100 TRNN IOS, IONRCK ;RE-DO? + 000344' 351000 000534' AOSL MTERCN ;THIRD ERROR? + 000345' 254000 000353' JRST MTERR2 ;TRIPLE ERROR + 000346' 554040 000532' HLRZ TAC,MTDEV ;COMMAND + 000347' 405040 770377 ANDI TAC,770377 + 000350' 722201 003400 CONO 220,3400(TAC) ;BSP + 000351' 370000 000222' SOS MTIDSP + 000352' 254000 000327' JRST MTIGN + + 000353' 660000 200000 MTERR2: TRO IOS, IODERR ;DEVICE ERROR + 000354' 254000 000225' JRST MTPDUN + + 000355' 200040 000531' MTBSP: MOVE TAC,MTDCCN ;POINTER + 000356' 202040 000526' MOVEM TAC,DCWRD ;RESET POINTER WORD + 000357' 720240 000001 CONI DC,TAC ;SAVE IN/OUT, PACK MD. DEV NU + ;PRIORITY + 000360' 405040 000777 ANDI TAC,777 + 000361' 271040 003000 ADDI TAC,3000 ;MAKE WRITE + 000362' 606040 000400 TRNN TAC,400 ;WAS IT WRITING? + 000363' 271040 001000 ADDI TAC,1000 ;MAKE READ + 000364' 720201 000000 CONO DC,(TAC) ;REISSUE CONO + 000365' 554040 000532' HLRZ TAC,MTDEV ;COMMAND + 000366' 722740 040000 CONSO 224,XNC ;WAIT FOR XNC + 000367' 254000 000366' JRST .-1 ;SHOULD ADD A COUNT(RUNAWAY TAPE TURNED + 000370' 722201 000000 CONO 220,(TAC) ;REISSUE RD OR WRITE + 000371' 402000 000533' SETZM MTEOFF ;CLR EOF FLAG + 000372' 700600 002100 CONO PI,2000+DCB ;TURN ON CHANNEL + 000373' 201040 000225' MOVEI TAC,MTPDUN ;RESET SWITCH + 000374' 542040 000222' HRRM TAC,MTIDSP + 000375' 201040 000004 MOVEI TAC, ERF + 000376' 542040 000211' HRRM TAC, MTCINT + 000377' 722600 000004 CONO 224, ERF + 000400' 254000 000334* JRST MTCRET ;ENABLE PROPER FLAGS + 000401' 350000 000222' MTIGN2: AOS MTIDSP ;RESET DISPATCH SWITCH + 000402' 254000 000327' JRST MTIGN + + ;NEED TO TRY WRITING LONG RECORD GAP ON OUTPUT(ONLY) AND TRY + ;ONCE MORE AT NEW SPOT ON TAPE IF TRIPLE ERROR + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 8 +MTPSER MAC 24-APR-78 01:34 L. HANTMAN 8-9-65 + + + + 040000 XNC=40000 ;TRANSFER NEW COMMAND + 000002 MTDC=2 ;MAG TAPE DATA CONTROL DEVICE NO. + 000001 TCF=1 ;TAPE CONTROL FREE + 000004 ERF=4 ;END OF RECORD FLAG + 000020 LPE=20 ;LONG. PARITY ERROR + 000010 CPE=10 ;CHAR. PARITY ERROR + 000100 DCB=100 ;DATA CHANNEL NUMBER + 000001 DCN=1 ;DATA CHANNEL NUMBER + 000002 SEL=2 ;UNIT TO COMMAND BUFFER + 004000 IOSEOF=4000 ;SPACING ONE RECORD FORWARD FOUND EOF + 002000 IOTEND=2000 ;EOT INDICATION + 000100 IONRCK=100 ;DO NOT RE-TRY ON ERRORS + 004000 IOBOT=4000 ;TAPE AT LOAD POINT + 010000 IODT=10000 ;A 1 FOR A DATA TRANFER TYPE COMMAND + EXTERNAL UXIT, ADVBFF, ADVBFE, DCREQ, DCWAIT, MTCSAV + EXTERNAL MTCRET, DCAVAL, MTAVAL, MTCCHN, MTCCHL, MTREQ + EXTERNAL MTWAIT,OUT,SETIOD,CLOCK,CUXIT1 + EXTERNAL WSYNC,USRREL,WAIT1,ADRERR,PUNIT,PIOMOD,PJOBN + EXTERNAL JBTADR + ENTRY MTDISP + INTERNAL MTCINT,MTAPE1,MTCINI + ;CLOCK INTERRUPT, UNIT IN TAC + 000403' 550301 000425' MTCLOK: HRRZ DEVDAT, MTSTAK(TAC) ;DVDB + 000404' 241040 000004 ROT TAC, 4 ;PUT UNIT IN SEL BITS + 000405' 722201 000200 CONO 220, 200(TAC) ;UNIT ONLY + 000406' 722600 000002 CONO 224, SEL ;SEL UNIT + 000407' 722700 000002 CONSZ 224, SEL ;UNIT NOT READY? + 000410' 254000 000420' JRST MTCLK2 ;UNIT READY + 000411' 241040 777774 ROT TAC, -4 ;FOR INDEXING PURPOSES + 000412' 544101 000425' HLR TAC1, MTSTAK(TAC) ;CLOCK REQUEST + 000413' 505100 000403' HRLI TAC1, MTCLOK ;GET CLOCK REQUEST + 000414' 700600 000400 CONO PI, 400 ;TURN OFF PI + 000415' 136100 000103* IDPB TAC1, CLOCK ;STORE CLOCK REQUESTED + 000416' 700600 000200 CONO PI, 200 ;TURN ON PI + 000417' 263140 000000 POPJ PDP, 0 ;EXIT + 000420' 200006 000002 MTCLK2: MOVE IOS, DEVIOS(DEVDAT) + 000421' 623000 000001 TLZE IOS,IOW + 000422' 260140 000303* PUSHJ PDP, SETIOD + 000423' 202006 000002 MOVEM IOS, DEVIOS(DEVDAT) + 000424' 263140 000000 POPJ PDP, 0 + 000425' MTSTAK: BLOCK ^D8 + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 9 +MTPSER MAC 24-APR-78 01:34 L. HANTMAN 8-9-65 + + + + ;LOGICAL END OF TAPE LOOP + 000435' 722700 004000 MTLEOT: CONSZ 224, 4000 ;TAPE NOT AT LOAD POINT? + 000436' 254000 000441' JRST MTEOT2 ;AVOID BACKSPACE IFAT LOAD P + 000437' 201200 003400 MOVEI T,3400 ;BACKSPACE + 000440' 260140 000022' PUSHJ PDP, MTGO1-1 + 000441' 201200 000016 MTEOT2: MOVEI T,16 ;SPACE ONE FILE + 000442' 260140 000006' PUSHJ PDP, MTAPE + 000443' 201200 000006 MOVEI T,6 ;SPACE ONE RECORD + 000444' 260140 000006' PUSHJ PDP, MTAPE + 000445' 260140 000006* PUSHJ PDP, WAIT1 ;WAIT UNTIL SPACING IS COMPLE + 000446' 200006 000002 MOVE IOS, DEVIOS(DEVDAT) + 000447' 607000 004000 TLNN IOS, IOSEOF ;WAS EOF DETECTED? + 000450' 254000 000441' JRST MTEOT2 ;RESUME SPACING + 000451' 201200 000007 MOVEI T,7 ;BACKSPACE, LOGICAL EOF FOUND + 000452' 254000 000006' JRST MTAPE ;RETURN BACK TO MAIN PROGRAM + 000453' 000000 000012 MTREDO: 12 ;NUMBER OF TIMES TO RE-EXECUTE + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 10 +MTPSER MAC 24-APR-78 01:34 L. HANTMAN 8-9-65 + + + + ;DEVICE DEPENDENT DUMP MODES. MODE 16. + ;OUTPUT + 000454' 661000 000020 MTDMPO: TLO IOS, IO ;WRITING + 000455' 550200 000014 HRRZ T,UUO + 000456' 260140 000056' PUSHJ PDP, MTCHEK ;IS SYSTEM AVAILABLE? + 000457' 200120 000130' MOVE TAC1, @MTOUT2 ;BLK0 AND DATA CONTROL COMMAN + 000460' 200040 000004 MOVE TAC,T ;COMMAND LIST POINTER + 000461' 201200 001000 MOVEI T,1000 ;WRITING COMMAND + 000462' 505040 000007 MTDMP1: HRLI TAC, PROG ;ACTUAL ADDRESS OF COMMAND LI + 000463' 202040 000530' MOVEM TAC, MTCMDP# ;COMMAND POINTER + 000464' 336060 000001 SKIPN TAC,@TAC ;COMMAND WORD + 000465' 254000 000515' JRST MTDMP3 ;NOTHING TO DO + 000466' 325040 000462' JUMPGE TAC, MTDMP1 ;CHANGE COMMAND SEQUENCE + 000467' 576040 000535' HLREM TAC, SVCNTR# ;SAVE COUNTER + 000470' 553000 000001 HRRZS TAC ;GET ADDRESS ALONE + 000471' 274040 000535' SUB TAC, SVCNTR ;GET LAST ADDRESS + 000472' 313040 000000* CAMLE TAC, USRREL ;LESS THAN END? + 000473' 254000 000513' JRST MTDMP2 ;OUT OF BOUNDS + 000474' 200060 000530' MOVE TAC, @MTCMDP ;PICK UP POINTER AGAIN + 000475' 270040 000007 ADD TAC, PROG ;GET ACTUAL ADDRESS + 000476' 260140 000132' PUSHJ PDP, MTINDC ;MOVE TAPE + 000477' 260140 000445* PUSHJ PDP,WAIT1 + 000500' 350200 000530' AOS T,MTCMDP ;UPDATE COMMAND POINTER + 000501' 607000 000020 TLNN IOS, IO ;WRITING? + 000502' 254000 000506' JRST MTDMPI+2 ;READING + 000503' 254000 000456' JRST MTDMPO+2 ;WRITING + ;INPUT + 000504' 621000 000020 MTDMPI: TLZ IOS, IO ;READING + 000505' 550200 000014 HRRZ T,UUO + 000506' 260140 000056' PUSHJ PDP, MTCHEK ;IS SYSTEM AVAILABLE + 000507' 200120 000054' MOVE TAC1,@MTIN2 ;BLKI AND DATA CONTROL COMMAN + 000510' 200040 000004 MOVE TAC,T ;COMMAND LIST POINTER + 000511' 201200 002400 MOVEI T,2400 ;READ COMMAND + 000512' 254000 000462' JRST MTDMP1 ;DUMP + ;ADDRESS ERROR + + 000513' 260140 000515' MTDMP2: PUSHJ PDP,MTDMP3 + 000514' 254000 000000* JRST ADRERR + ;CLEAR ALL USE BITS. NOTHING IN COMMAND LIST + + 000515' 371000 000247* MTDMP3: SOSL DCREQ + 000516' 476000 000250* SETOM DCAVAL + 000517' 371000 000251* MTDMP4: SOSL MTREQ + 000520' 476000 000252* SETOM MTAVAL + 000521' 620000 010000 TRZ IOS,IOACT + 000522' 623000 000001 TLZE IOS,IOW + 000523' 260140 000422* PUSHJ PDP,SETIOD + 000524' 202006 000002 MOVEM IOS,DEVIOS(DEVDAT) + 000525' 263140 000000 POPJ PDP, + + END, + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 10-2 +MTPSER MAC 24-APR-78 01:34 L. HANTMAN 8-9-65 + + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000547 + +9K CORE USED + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 11 +MTPSER MAC 24-APR-78 01:34 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADRERR 000514' EXT +ADVBFE 000273' EXT +ADVBFF 000243' EXT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOCK 000415' EXT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CPE 000010 +CUXIT1 000173' EXT +D 000017 INT +DAT 000005 INT +DC 000200 SPD +DCAVAL 000516' EXT +DCB 000100 +DCL 000001 INT +DCN 000001 +DCREQ 000515' EXT +DCW 020000 INT +DCWAIT 000062' EXT +DCWRD 000526' +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT + + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 11-1 +MTPSER MAC 24-APR-78 01:34 SYMBOL TABLE + +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERF 000004 +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOBOT 004000 +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODT 010000 +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSEOF 004000 +IOSTRT 000010 INT +IOTEND 002000 +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000216' EXT +JBUF 000005 INT + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 11-2 +MTPSER MAC 24-APR-78 01:34 SYMBOL TABLE + +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +LPE 000020 +MDCSAV 000527' +MTAPE 000006' +MTAPE1 000000' INT +MTAVAL 000520' EXT +MTBSP 000355' +MTCCHL 000000 EXT +MTCCHN 000032' EXT +MTCHEK 000056' +MTCHK1 000061' +MTCHK2 000063' +MTCHK3 000113' +MTCINI 000201' INT +MTCINT 000211' INT +MTCLK2 000420' +MTCLOK 000403' +MTCLS 000150' +MTCLS1 000157' +MTCMDP 000530' +MTCON 000275' +MTCONO 000044' +MTCRET 000400' EXT +MTCSAV 000213' EXT +MTDC 000002 +MTDCCN 000531' +MTDCND 000206' +MTDEV 000532' +MTDISP 000166' ENT +MTDMP1 000462' +MTDMP2 000513' +MTDMP3 000515' +MTDMP4 000517' +MTDMPI 000504' +MTDMPO 000454' +MTEND1 000246' +MTEOF 000321' +MTEOFF 000533' +MTEOR 000323' +MTEOT2 000441' +MTERCN 000534' +MTERR 000335' +MTERR2 000353' +MTGO 000033' +MTGO1 000023' +MTGO1A 000025' +MTIDSP 000222' +MTIGN 000327' +MTIGN2 000401' + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES MACRO 10 05:51 24-APR-78 PAGE 11-3 +MTPSER MAC 24-APR-78 01:34 SYMBOL TABLE + +MTIN 000046' +MTIN1 000051' +MTIN2 000054' +MTINDC 000132' +MTINDN 000235' +MTLEOT 000435' +MTNIO 000251' +MTNIO2 000312' +MTNOTI 000273' +MTOUT 000120' +MTOUT1 000124' +MTOUT2 000130' +MTOUTE 000145' +MTPDUN 000225' +MTREDO 000453' +MTREQ 000517' EXT +MTSTAK 000425' +MTW 010000 INT +MTWAIT 000066' EXT +OBUFB 100000 INT +OUT 000157' EXT +OUTPB 004000 INT +PDP 000003 INT +PI 000004 SPD +PICHN 000100 INT +PIOMOD 000227' EXT +PJOBN 000215' EXT +PROG 000007 INT +PUNIT 000025' EXT +RUN 200000 INT +RUNABL 204000 INT +SEL 000002 +SETIOD 000523' EXT +SVCNTR 000535' +T 000004 +TAC 000001 INT +TAC1 000002 INT +TCF 000001 +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +USRREL 000472' EXT +UUO 000014 INT +UXIT 000200' EXT +WAIT1 000477' EXT +WSYNC 000113' EXT +XNC 040000 + OOOOOOOOO NNN NNN CCCCCCCCCCCC EEEEEEEEEEEEEEE + OOOOOOOOO NNN NNN CCCCCCCCCCCC EEEEEEEEEEEEEEE + OOOOOOOOO NNN NNN CCCCCCCCCCCC EEEEEEEEEEEEEEE +OOO OOO NNN NNN CCC EEE +OOO OOO NNN NNN CCC EEE +OOO OOO NNN NNN CCC EEE +OOO OOO NNNNNN NNN CCC EEE +OOO OOO NNNNNN NNN CCC EEE +OOO OOO NNNNNN NNN CCC EEE +OOO OOO NNN NNN NNN CCC EEEEEEEEEEEE +OOO OOO NNN NNN NNN CCC EEEEEEEEEEEE +OOO OOO NNN NNN NNN CCC EEEEEEEEEEEE +OOO OOO NNN NNNNNN CCC EEE +OOO OOO NNN NNNNNN CCC EEE +OOO OOO NNN NNNNNN CCC EEE +OOO OOO NNN NNN CCC EEE +OOO OOO NNN NNN CCC EEE +OOO OOO NNN NNN CCC EEE + OOOOOOOOO NNN NNN CCCCCCCCCCCC EEEEEEEEEEEEEEE + OOOOOOOOO NNN NNN CCCCCCCCCCCC EEEEEEEEEEEEEEE + OOOOOOOOO NNN NNN CCCCCCCCCCCC EEEEEEEEEEEEEEE + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :ONCE .LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:36 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1704 +File will be deleted after printing + +ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + XLIST + LIST + TITLE ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE + SUBTTL THIS IS ONLY CODE PLACED AT THE END OF IOINIT + ;WHICH SHOULD BE THE LAST LOADED PROGRAM BEFORE SYSMAK AND DDT + ;THUS IF IT OVERFLOWS INTO THE USER AREA NO HARM IS DONE + ;INITIALIZE PRIORITY CHANNELS AND SETUP INTERRUPT SERVICE ROUTINE CHA + XP SYSFIN,.-1 + 000000 XP SYSFIN,,^SYSFIN= + 000000' 777777 777777' ^.-1 ;LAST LOC. IN SYSTEM + 010000 NXM=10000 ;NON EX-MEM + + INTERNAL PATCH + + 000001' PATCH: BLOCK 100 ;PATCH SPACE + ;C(SYSSIZE) SHOULD BE UPDATED AS PATCHES ARE MADE + + 000001 T=TAC ;SOME ACS + 000002 C=TAC1 + 000005 INT=DAT ;INTERRUPT SERVICE ENTRY POINT(USUALLY A CONSO INSTR.) + 000006 CHL=DEVDAT ;THE PLACE WHERE PC IS STORED FOR THAT CHANNEL + + ;LINK TO SERVICE ROUTINES + + INTERNAL LINKSR + EXTERNAL NDEVM1 ;=NDOV-1 (DEFINED IN IOINI1) + EXTERNAL DEVINT,JOBSYM + + 000101' 000000 000000 LINKSR: 0 ;CALLED WITH JSR FROM SYSINI + ;CHAIN INTERUPT SERVICE ROUTINES TOGETH + 000102' 515240 254000 HRLZI INT, 254000 ;FORM JRST INSTR. + 000103' 201100 000000* MOVEI C, NDEVM1 ;NO. OV DEV. SERV. ROUTINES TO CHAIN + 000104' 554302 000000* DEV1: HLRZ CHL, DEVINT(C) ;LOC. WHERE PC IS STORED + 000105' 540242 000104* HRR INT, DEVINT(C) ;INTERRUPT SERVICE ROUTINE ENTRY POINT + 000106' 200046 000001 MOVE T, 1(CHL) ;INSERT THIS ROUTINE AT FRONT OF CHAIN + 000107' 202045 000001 MOVEM T, 1(INT) + 000110' 202246 000001 MOVEM INT, 1(CHL) + 000111' 365100 000104' SOJGE C, DEV1 + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 2 +ONCE MAC 24-APR-78 00:18 THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + ;MOVE SYMBOL TABLE UP IN MEMORY + ;EXEC MUST BE LOADED IN 15K OR LESS IF GOING INTO 16K MACHINE + + 000112' 402000 000005 SETZM DAT ;FIND FIRST NON EX MEM + 000113' 700200 010000 CONO APR,NXM ;CLEAR NON-EX MEM FLAG + 000114' 271240 002000 ADDI DAT,2000 ;TRY NEXT 1K BLOCK + 000115' 200105 000000 MOVE TAC1,(DAT) ;REFERENCE THIS LOCATION + 000116' 700340 010000 CONSO APR,NXM ;NON-EXISTENT? + 000117' 254000 000114' JRST .-3 ;NO + 000120' 275240 000001 SUBI DAT,1 ;YES, HIGHEST LEGAL LOC + 000121' 202240 000037 MOVEM DAT,DDTMEM ;FOR DDT + 000122' 275240 000177 SUBI DAT,200-1 ;MAKE ROOM FOR DECDUMP + 000123' 574100 000000* HLRE TAC1,JOBSYM ;-LENGTH OF S. T. + 000124' 322100 000143' JUMPE TAC1,JRSTI1 ;0 IF NON S. T. TO MOVE UP + 000125' 213000 000002 MOVNS TAC1 ;+LENGTH + 000126' 550040 000123* HRRZ TAC,JOBSYM ;FIRST ADDRESS + ADDI TAC,(TAC1) + 000127' 504040 000002 HRL TAC,TAC1 ;XWD LENGTH,LENGTH+FIRST ADDRESS + 000130' 275241 000001 SUBI DAT,1(TAC) ;NEW LAST+1-OLD LAST+1 + 000131' 542240 000140' HRRM DAT,STO1 ;DIST. TO MOVE + 000132' 200100 000126* MOVE TAC1,JOBSYM ;-N,FIRST ADD. + 000133' 271045 000001 ADDI TAC,1(DAT) ;FORM NEW S.T. POINTER + 000134' 202100 000132* MOVEM TAC1,JOBSYM + 000135' 201100 000134* MOVEI TAC1,JOBSYM + 000136' 202100 000036 MOVEM TAC1,DDTSYM + 000137' 200101 777777 MOVE TAC1,-1(TAC) + 000140' 202101 000140' STO1: MOVEM TAC1,.(TAC) + 000141' 274040 000551' SUB TAC,[XWD 1,1] + 000142' 325040 000137' JUMPGE TAC,.-3 + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 3 +ONCE MAC 24-APR-78 00:18 THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + ;SETUP LOCATIONS 40 THRU 57 + + 000143' 200040 000552' JRSTI1: MOVE TAC,[XWD LOC40,40] + 000144' 251040 000057 BLT TAC,57 + 000145' 200040 000147' MOVE TAC,JRSTI + 000146' 202040 000102' MOVEM TAC,LINKSR+1 ;DO ONCE ONLY + 000147' 254020 000101' JRSTI: JRST @LINKSR + + EXTERN UUO0,ERROR + EXTERN CH1,CH2,CH3,CH4,CH5,CH6,CH7 + + 000150' 000000 000000 LOC40: 0 ;UUO PC + 000151' 264000 000000* JSR UUO0 ;TO UUO HANDLER + 000152' 264000 000000* JSR CH1 + 000153' 265240 000000* JSP DAT,ERROR + 000154' 264000 000000* JSR CH2 + 000155' 265240 000153* JSP DAT,ERROR + 000156' 264000 000000* JSR CH3 + 000157' 265240 000155* JSP DAT,ERROR + 000160' 264000 000000* JSR CH4 + 000161' 265240 000157* JSP DAT,ERROR + 000162' 264000 000000* JSR CH5 + 000163' 265240 000161* JSP DAT,ERROR + 000164' 264000 000000* JSR CH6 + 000165' 265240 000163* JSP DAT,ERROR + 000166' 264000 000000* JSR CH7 + 000167' 265240 000165* JSP DAT,ERROR + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 4 +ONCE MAC 24-APR-78 00:18 THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + + ;ONCE ONLY CODE - OPERATOR SETUP DIALOGUE + + INTERNAL ONCE + EXTERNAL CONMES,RADX10,CRLF,DECIN,DECIN1 + EXTERNAL THSDAT,MAKEND,JOBFF + EXTERNAL ERNAM,OCTPNT,SYSSIZ,CONFIG,SYSNUM,SYSDAT + + 000170' 000000 000000 ONCE: 0 + 000171' 201040 000000 MOVEI TAC,SYSFIN ;SET SIZE OF MONITOR + 000172' 202040 000000* MOVEM TAC,SYSSIZ + 000173' 200240 000443' MOVE DAT,LINEP ;SETUP LINE BYTE POINTER + 000174' 200140 000553' MOVE PDP,[XWD ONCEPN,ONCEPD] + 000175' 260140 000000* PUSHJ PDP,CRLF + 000176' 201040 000000* MOVEI TAC,CONFIG + 000177' 260140 000000* PUSHJ PDP,CONMES + 000200' 201040 000474' MOVEI TAC,TSEXEC + 000201' 260140 000177* PUSHJ PDP,CONMES + 000202' 554040 000000* HLRZ TAC,SYSNUM + 000203' 260140 000000* PUSHJ PDP,RADX10 + 000204' 201040 000554' MOVEI TAC,[ASCIZ /./] + 000205' 260140 000201* PUSHJ PDP,CONMES + 000206' 550040 000202* HRRZ TAC,SYSNUM + 000207' 260140 000203* PUSHJ PDP,RADX10 + 000210' 201040 000555' MOVEI TAC,[ASCIZ / /] + 000211' 260140 000205* PUSHJ PDP,CONMES + 000212' 201040 000000* MOVEI TAC,SYSDAT + 000213' 260140 000211* PUSHJ PDP,CONMES + 000214' 260140 000175* PUSHJ PDP,CRLF + 000215' 260140 000421' PUSHJ PDP,OPOUT + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 5 +ONCE MAC 24-APR-78 00:18 THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + ;ASK FOR TODAYS DATE AND CONVERT + ;DATE STORED AS ((Y-64)*12.+M-1)*31.+D-1 + + 000216' 402000 000000* DATLOP: SETZM THSDAT + 000217' 200240 000443' MOVE DAT,LINEP + 000220' 201040 000477' MOVEI TAC,TODATE + 000221' 260140 000213* PUSHJ PDP,CONMES + 000222' 260140 000421' PUSHJ PDP,OPOUT + 000223' 260140 000376' PUSHJ PDP,GETLIN + 000224' 254000 000216' JRST DATLOP ;JUST CR + 000225' 260140 000000* PUSHJ PDP,DECIN1 ;MONTH + 000226' 254000 000216' JRST DATLOP ;ERROR + 000227' 332000 000002 SKIPE TAC1 + 000230' 303100 000014 CAILE TAC1,^D12 + 000231' 254000 000216' JRST DATLOP + 000232' 275100 000001 SUBI TAC1,1 + 000233' 221100 000037 IMULI TAC1,^D31 + 000234' 272100 000216* ADDM TAC1,THSDAT + 000235' 260140 000225* PUSHJ PDP,DECIN1 ;DAY + 000236' 254000 000216' JRST DATLOP + 000237' 332000 000002 SKIPE TAC1 + 000240' 303040 000037 CAILE TAC,^D31 + 000241' 254000 000216' JRST DATLOP + 000242' 275100 000001 SUBI TAC1,1 + 000243' 272100 000234* ADDM TAC1,THSDAT + 000244' 260140 000235* PUSHJ PDP,DECIN1 ;YEAR + 000245' 254000 000216' JRST DATLOP + 000246' 301100 000101 CAIL TAC1,^D65 + 000247' 303100 000143 CAILE TAC1,^D99 + 000250' 254000 000216' JRST DATLOP + 000251' 275100 000100 SUBI TAC1,^D64 ;YEAR ZERO + 000252' 221100 000564 IMULI TAC1,^D12*^D31 + 000253' 272100 000243* ADDM TAC1,THSDAT + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 6 +ONCE MAC 24-APR-78 00:18 THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + ;GET TIME OF DAY + + EXTERN TIME + + 000254' 402000 000000* TIMLOP: SETZM TIME + 000255' 200240 000443' MOVE DAT,LINEP + 000256' 201040 000506' MOVEI TAC,TIMEM + 000257' 260140 000221* PUSHJ PDP,CONMES + 000260' 260140 000421' PUSHJ PDP,OPOUT + 000261' 260140 000376' PUSHJ PDP,GETLIN + 000262' 254000 000254' JRST TIMLOP ;JUST A CR + 000263' 134100 000001 ILDB TAC1,TAC + 000264' 275100 000060 SUBI TAC1,60 + 000265' 331000 000002 SKIPL TAC1 ;CHECK FIRST DIGIT OF HOUR + 000266' 303100 000002 CAILE TAC1,2 + 000267' 254000 000254' JRST TIMLOP + 000270' 220100 000556' IMUL TAC1,[^D60*^D60*^D60*^D10] + 000271' 272100 000254* ADDM TAC1,TIME + 000272' 134100 000001 ILDB TAC1,TAC + 000273' 275100 000060 SUBI TAC1,60 ;CONVERT TO BINARY + 000274' 331000 000002 SKIPL TAC1 + 000275' 303100 000011 CAILE TAC1,^D9 + 000276' 254000 000254' JRST TIMLOP + 000277' 221100 645700 IMULI TAC1,^D60*^D60*^D60 + 000300' 272100 000271* ADDM TAC1,TIME + 000301' 260140 000244* PUSHJ PDP,DECIN1 + 000302' 254000 000254' JRST TIMLOP + 000303' 303100 000073 CAILE TAC1,^D59 + 000304' 254000 000254' JRST TIMLOP + 000305' 221100 007020 IMULI TAC1,^D60*^D60 + 000306' 272100 000300* ADDM TAC1,TIME + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 7 +ONCE MAC 24-APR-78 00:18 THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + ;PRINT IO CONFIGURATION + + EXTERN DEVLST + + 000307' 200240 000443' MOVE DAT,LINEP + 000310' 201040 000517' MOVEI TAC,IOCONF + 000311' 260140 000257* PUSHJ PDP,CONMES + 000312' 554300 000000* HLRZ DEVDAT,DEVLST + 000313' 201040 000004 MOVEI TAC,ITEM + 000314' 261140 000001 PUSH PDP,TAC + 000315' 201040 000001 ONCE5: MOVEI TAC,1 + 000316' 510206 000000 HLLZ ITEM,DEVNAM(DEVDAT) + 000317' 554306 000003 ONCE4: HLRZ DEVDAT,DEVSER(DEVDAT) + 000320' 322300 000324' JUMPE DEVDAT,ONCE6 + 000321' 510106 000000 HLLZ TAC1,DEVNAM(DEVDAT) + 000322' 316100 000004 CAMN TAC1,ITEM + 000323' 344040 000317' AOJA TAC,ONCE4 + 000324' 200340 000001 ONCE6: MOVE PROG,TAC ;SAVE NO. + 000325' 260140 000207* PUSHJ PDP,RADX10 + 000326' 201600 000040 MOVEI UUO," " + 000327' 136600 000005 IDPB UUO,DAT + 000330' 201600 000003 MOVEI UUO,3 + 000331' 200440 000557' MOVE JDAT,[POINT 6,ITEM] + 000332' 134100 000011 ONCE7: ILDB TAC1,JDAT + 000333' 271100 000240 ADDI TAC1,240 + 000334' 136100 000005 IDPB TAC1,DAT + 000335' 367600 000332' SOJG UUO,ONCE7 + 000336' 201040 000560' MOVEI TAC,[ASCIZ /'S/] + 000337' 303340 000001 CAILE PROG,1 + 000340' 260140 000311* PUSHJ PDP,CONMES + 000341' 260140 000214* PUSHJ PDP,CRLF + 000342' 326300 000315' JUMPN DEVDAT,ONCE5 + 000343' 262140 000002 POP PDP,TAC1 + 000344' 260140 000421' PUSHJ PDP,OPOUT + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 8 +ONCE MAC 24-APR-78 00:18 THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + ;ASK IF SYSMAK IS WANTED + + 000345' 200240 000443' MOVE DAT,LINEP + 000346' 201040 000524' MOVEI TAC,SYSM + 000347' 260140 000340* PUSHJ PDP,CONMES + 000350' 260140 000421' PUSHJ PDP,OPOUT + 000351' 260140 000376' PUSHJ PDP,GETLIN + 000352' 254000 000355' JRST ONCE2 ;NO SYSMAK + 000353' 201040 000000* MOVEI TAC,MAKEND ;YES + 000354' 202040 000172* MOVEM TAC,SYSSIZ + + ;IS EXEC DDT WANTED? + + 000355' 200240 000443' ONCE2: MOVE DAT,LINEP + 000356' 201040 000536' MOVEI TAC,SYSDM + 000357' 260140 000347* PUSHJ PDP,CONMES + 000360' 260140 000421' PUSHJ PDP,OPOUT + 000361' 260140 000376' PUSHJ PDP,GETLIN + 000362' 254000 000365' JRST ONCE3 ;NO + 000363' 201040 000000* MOVEI TAC,JOBFF ;FIRST FREE LOCATION + 000364' 552040 000354* HRRZM TAC,SYSSIZ + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 9 +ONCE MAC 24-APR-78 00:18 THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + ;PRINT OCTAL SIZE OF MONITOR + + 000365' 200240 000443' ONCE3: MOVE DAT,LINEP + 000366' 201040 000541' MOVEI TAC,EXECIS + 000367' 260140 000357* PUSHJ PDP,CONMES + 000370' 200040 000364* MOVE TAC,SYSSIZ + 000371' 260140 000000* PUSHJ PDP,OCTPNT + 000372' 201040 000544' MOVEI TAC,LENGTH + 000373' 260140 000367* PUSHJ PDP,CONMES + 000374' 260140 000421' PUSHJ PDP,OPOUT + 000375' 254020 000170' JRST @ONCE + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 10 +ONCE MAC 24-APR-78 00:18 THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + ;ROUTINE TO READ A LINE FROM OPERATORS CONSOLE + ;CALL: PUSHJ PDP,GETLIN + ; JUST A CR TYPED IN + ; A LINE TYPED IN,TAC SET AS BYTE POINTER + + EXTERN CPOPJ, CPOPJ1 + + 000376' 200040 000443' GETLIN: MOVE TAC,LINEP + 000377' 201200 000000 MOVEI ITEM,0 + 000400' 712340 000040 GET1: CONSO TTY,40 + 000401' 254000 000400' JRST .-1 + 000402' 712040 000002 DATAI TTY,TAC1 + 000403' 712140 000002 DATAO TTY,TAC1 + 000404' 136100 000001 IDPB TAC1,TAC + 000405' 405100 000177 ANDI TAC1,177 + 000406' 306100 000177 CAIN TAC1,177 ;RUBOUT + 000407' 254000 000000* JRST CPOPJ + 000410' 302100 000015 CAIE TAC1,15 + 000411' 344200 000400' AOJA ITEM,GET1 + 000412' 712340 000020 CONSO TTY,20 + 000413' 254000 000412' JRST .-1 + 000414' 201100 000012 MOVEI TAC1,12 + 000415' 712140 000002 DATAO TTY,TAC1 + 000416' 200040 000443' MOVE TAC,LINEP + 000417' 326200 000000* JUMPN ITEM,CPOPJ1 + 000420' 263140 000000 POPJ PDP, + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 11 +ONCE MAC 24-APR-78 00:18 THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + ;ROUTINE TO TYPE A LINE ON OPERATORS CONSOLE + ;ECHO CHECK STOPS LINE AND RETURNS + ;CALL: DAT SET TO END OF MESSAGE + + 000421' 200040 000443' OPOUT: MOVE TAC,LINEP + 000422' 712040 000002 DATAI TTY,TAC1 + 000423' 316040 000005 OPOUT1: CAMN TAC,DAT + 000424' 262140 000000 POP PDP, + 000425' 712300 000040 CONSZ TTY,40 + 000426' 254000 000434' JRST OPOUT2 ;ECHO CHECK + 000427' 712300 000020 CONSZ TTY,20 + 000430' 254000 000427' JRST .-1 + 000431' 134100 000001 ILDB TAC1,TAC + 000432' 712140 000002 DATAO TTY,TAC1 + 000433' 254000 000423' JRST OPOUT1 + 000434' 712300 000020 OPOUT2: CONSZ TTY,20 + 000435' 254000 000434' JRST .-1 + 000436' 712140 000561' DATAO TTY,[15] + 000437' 712300 000020 CONSZ TTY,20 + 000440' 254000 000437' JRST .-1 + 000441' 712140 000562' DATAO TTY,[12] + 000442' 263140 000000 POPJ PDP, + + 000443' 440700 000444' LINEP: POINT 7,LINBUF + 000444' LINBUF: BLOCK 20 + 000010 ONCEPN=10 + 000464' ONCEPD: BLOCK ONCEPN + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 12 +ONCE MAC 24-APR-78 00:18 THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + ;MESSAGES + + 000474' 202505 620246 TSEXEC: ASCIZ / T. S. EXEC-/ + 000475' 271010 554212 + 000476' 415320 000000 + 000477' TODATE: ASCIZ / + 000477' 064252 454640 TYPE TODAY'S DATE AS ABOVE. + 000500' 425012 447610 + 000501' 406624 751500 + 000502' 422032 442500 + 000503' 406464 040604 + 000504' 476550 527032 + 000505' 050000 000000 / + 000506' TIMEM: ASCIZ / + 000506' 064252 454640 TYPE 4 DIGIT NAVY TIME(0953 IS 9:53 AM). + 000507' 425006 420210 + 000510' 446171 152100 + 000511' 472032 654500 + 000512' 522231 542520 + 000513' 301626 531500 + 000514' 446464 034564 + 000515' 325464 040632 + 000516' 245341 505000 / + 000517' IOCONF: ASCIZ / + 000517' 064251 147500 IO CONFIGURATION + 000520' 416371 643222 + 000521' 436532 240650 + 000522' 446371 606424 / + 000523' 000000 000000 + + 000524' SYSM: ASCIZ / + 000524' 064250 447500 DO YOU WANT SYSMAK(TYPE Y IF YES,CR IF NO)? + 000525' 546372 520256 + 000526' 406352 420246 + 000527' 546471 540626 + 000530' 242513 150212 + 000531' 202624 044614 + 000532' 202630 551530 + 000533' 416444 044614 + 000534' 202351 724576 + 000535' 064240 000000 / + + 000536' SYSDM: ASCIZ / + 000536' 064250 554212 EXEC DDT? + 000537' 415010 442250 + 000540' 374321 200000 / + 000541' EXECIS: ASCIZ / + 000541' 064250 554212 EXEC IS / + 000542' 415011 151500 + 000543' 000000 000000 + 000544' 476072 440630 LENGTH: ASCIZ /OCTAL LOCATIONS LONG. + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 12-1 +ONCE MAC 24-APR-78 00:18 THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + 000545' 202311 741602 + 000546' 522231 747246 + 000547' 202311 747216 + 000550' 270321 200000 / + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000563 + +9K CORE USED + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 13 +ONCE MAC 24-APR-78 00:18 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APR 000000 SPD +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +C 000002 +CH1 000152' EXT +CH2 000154' EXT +CH3 000156' EXT +CH4 000160' EXT +CH5 000162' EXT +CH6 000164' EXT +CH7 000166' EXT +CHL 000006 +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CONFIG 000176' EXT +CONMES 000373' EXT +CPOPJ 000407' EXT +CPOPJ1 000417' EXT +CRLF 000341' EXT +D 000017 INT +DAT 000005 INT +DATLOP 000216' +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DECIN 000000 EXT +DECIN1 000301' EXT +DEN 000004 INT +DEV1 000104' +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVINT 000105' EXT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVLST 000312' EXT +DEVMOD 000004 INT + + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 13-1 +ONCE MAC 24-APR-78 00:18 SYMBOL TABLE + +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERNAM 000000 EXT +ERROR 000167' EXT +EXECIS 000541' +GET1 000400' +GETLIN 000376' +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +INT 000005 +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IOCONF 000517' +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 13-2 +ONCE MAC 24-APR-78 00:18 SYMBOL TABLE + +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOBFF 000363' EXT +JOBSYM 000135' EXT +JRSTI 000147' +JRSTI1 000143' +LENGTH 000544' +LINBUF 000444' +LINEP 000443' +LINKSR 000101' INT +LOC40 000150' +LOOKB 040000 INT +MAKEND 000353' EXT +MTW 010000 INT +NDEVM1 000103' EXT +NXM 010000 +OBUFB 100000 INT +OCTPNT 000371' EXT +ONCE 000170' INT +ONCE2 000355' +ONCE3 000365' +ONCE4 000317' +ONCE5 000315' +ONCE6 000324' +ONCE7 000332' +ONCEPD 000464' +ONCEPN 000010 +OPOUT 000421' +OPOUT1 000423' +OPOUT2 000434' +OUTPB 004000 INT +PATCH 000001' INT +PDP 000003 INT +PICHN 000100 INT +PROG 000007 INT +RADX10 000325' EXT +RUN 200000 INT +RUNABL 204000 INT +STO1 000140' +SYSDAT 000212' EXT +SYSDM 000536' +SYSFIN 000000 INT + + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE MACRO 10 05:51 24-APR-78 PAGE 13-3 +ONCE MAC 24-APR-78 00:18 SYMBOL TABLE + +SYSM 000524' +SYSNUM 000206' EXT +SYSSIZ 000370' EXT +T 000001 +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +THSDAT 000253' EXT +TIME 000306' EXT +TIMEM 000506' +TIMLOP 000254' +TODATE 000477' +TSEXEC 000474' +TTY 000120 SPD +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT +UUO0 000151' EXT + PPPPPPPPPPPP TTTTTTTTTTTTTTT RRRRRRRRRRRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTTTTTTTTTTTTTT RRRRRRRRRRRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTTTTTTTTTTTTTT RRRRRRRRRRRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +PPP PPP TTT RRR RRR SSS EEE RRR RRR +PPP PPP TTT RRR RRR SSS EEE RRR RRR +PPP PPP TTT RRR RRR SSS EEE RRR RRR +PPP PPP TTT RRR RRR SSS EEE RRR RRR +PPP PPP TTT RRR RRR SSS EEE RRR RRR +PPP PPP TTT RRR RRR SSS EEE RRR RRR +PPPPPPPPPPPP TTT RRRRRRRRRRRR SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTT RRRRRRRRRRRR SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTT RRRRRRRRRRRR SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +PPP TTT RRR RRR SSS EEE RRR RRR +PPP TTT RRR RRR SSS EEE RRR RRR +PPP TTT RRR RRR SSS EEE RRR RRR +PPP TTT RRR RRR SSS EEE RRR RRR +PPP TTT RRR RRR SSS EEE RRR RRR +PPP TTT RRR RRR SSS EEE RRR RRR +PPP TTT RRR RRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +PPP TTT RRR RRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +PPP TTT RRR RRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :PTRSER.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:36 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1687 +File will be deleted after printing + +PTRSER - PAPER TAPE READER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 8-15-65 + + XLIST + LIST + TITLE PTRSER - PAPER TAPE READER SERVICE ROUTINE + SUBTTL 8-15-65 + EXTERNAL WSYNC, STOSQD, ILLOUT + EXTERNAL STODAT, IOSET, SETBYT, CKS12, ADVBFF + EXTERNAL SETIOD, PTRSAV, PTRCHN, PTRRET,PIOMOD + INTERNAL PTRINT + + ;PTR DEVICE DATA BLOCK LINKAGE + + EXTERNAL PTRDB,PTRDAT,PTRCHR,PTRIOS,PTRSER,PTRMOD,PTRBUF + EXTERNAL PTRADR,PTRPTR,PTRCTR,PTRSVC,PTRSV1 + ENTRY PTRDSP + + PTRSER - PAPER TAPE READER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 2 +PTRSER MAC 24-APR-78 01:35 8-15-65 + + + + ,PARAMETER ASSIGNMENTS + , PTR CONTROL REGISTER + 000010 PTRDON=10; DONE FLAG + 000020 PTRBSY=20; BUSY FLAG + 000040 PTRBIN=40; BINARY READ MODE + 000400 POW=400; POWER. ON=1 + + , SPECIAL IO STATUS WORD ASSIGMENTS + 002000 PTRERR=2000 + 200000 PTRFCI=200000 + 100000 PTRPOW=100000 + , SPECIAL ASCII CHARACTERS + 000200 NULL=200 + 000377 RUBOUT=377 + 000232 S2EOF=232; END OF FILE + , PI CONTROL REGISTER + 000200 PION=200 + 000400 PIOFF=400 + + REPEAT 0,<P + ,PTR DATA BLOCK + PTRDAT: SIXBIT "PTR" + PTRCHR: 41 + PTRIOS: 0 + PTRSER: EXP PTRDSP + PTRMOD: XWD 1000+PROG,10403 + 0 + PTRBUF: 0 + PTRADR: XWD PROG,0 + PTRPTR: 0 + PTRCTR: 0 + PTRSVC: 0 + PTRSV1: 0 + > + + ,PTR SERVICE DISPATCH TABLE + + 000000' 254000 000133' PTRDSP: JRST PTRREL ;RELEASE + 000001' 263140 000000 POPJ PDP,; CLOSE + 000002' 254000 000000* JRST ILLOUT ;OUTPUT + 000003' 254000 000004' JRST PTRINP; INPUT + + PTRSER - PAPER TAPE READER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 3 +PTRSER MAC 24-APR-78 01:35 8-15-65 + + + + 000004' 607000 000002 PTRINP: TLNN IOS,IOBEG; VIRGIN DEVICE? (IOBEG=1?) + 000005' 254000 000013' JRST PTRIN1; NO + 000006' 661000 000004 TLO IOS,IOFST; IOFST:=1. NEXT ITEM WILL BE FIRST ITEM + 000007' 260140 000000* PUSHJ PDP,SETBYT; TAC0-5:=TAC12-13:=0,TAC6-11:=BYTE SIZE + , TAC14-17:=PROG + 000010' 202040 000000* MOVEM TAC,PTRPTR; PTRPTR:=C(TAC) + 000011' 710700 000400 CONSZ PTR,POW; IS POWER ON? + 000012' 661000 100000 TLO IOS,PTRPOW; YES. PTRPOW:=1 + 000013' 660000 010000 PTRIN1: TRO IOS,IOACT; IOACT:=1 + 000014' 135040 000000* LDB TAC,PIOMOD + 000015' 201100 000000* MOVEI TAC1, PTRCHN; TAC1:=PTR PI CHANNEL ASSIGNME + 000016' 306040 000014 CAIN TAC,B; MODE=BINARY? + 000017' 271100 000040 ADDI TAC1,PTRBIN; YES. ALPHA/BINARY:=BINARY + 000020' 201040 000010 MOVEI TAC,PTRDON ;SET CONSO INTERRUPT FLAG + 000021' 542040 000032' HRRM TAC,PTRINT + 000022' 627000 000002 TLZN IOS,IOBEG; VIRGIN DEVICE? (IOBEG=1?) + 000023' 254000 000027' JRST PTRIN4; NO + 000024' 202000 000000* MOVEM IOS,PTRIOS; PTRIOS:=C(IOS) + 000025' 710602 000020 CONO PTR,PTRBSY(TAC1); PTR BUSY FLAG:=1,ASSIGN INTER + 000026' 263140 000000 POPJ PDP,; INPUT RETURN-VIRGIN DEVICE + + 000027' 202000 000024* PTRIN4: MOVEM IOS,PTRIOS; PTRIOS:=C(IOS) + 000030' 710602 000010 CONO PTR,PTRDON(TAC1); PTR DONE FLAG:=1,ASSIGN INTER + 000031' 263140 000000 POPJ PDP, + + PTRSER - PAPER TAPE READER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 4 +PTRSER MAC 24-APR-78 01:35 8-15-65 + + + + 000032' 710740 000010 PTRINT: CONSO PTR,PTRDON ;INTERRUPT. IS DONE FLAG = 1? + 000033' 254000 000032' JRST PTRINT ;NO. IF PTR IS IN FLAG LIST, THIS LOC + 000034' 331000 000027* SKIPL PTRIOS ;DISCONNECT REQUEST? (IODISC=1?) + 000035' 710440 000000* DATAI PTR,PTRSV1 ;SAVE ACCUMULATORS AND ESTABLISH PDP + jsr ptrsav + 000036' 201300 000000* MOVEI DEVDAT,PTRDAT ;DEVDAT: = PTR SIXBIT + 000037' 260140 000000* PUSHJ PDP,IOSET ;PROG:=C(JBTADR18-35),ITEM:=C(DEVCTR) + 000040' 200000 000034* MOVE IOS,PTRIOS ;IOS:=C(PTRIOS) + 000041' 200240 000035* MOVE DAT,PTRSV1 ;DAT:=C(PTRSV1) + 000042' 710740 000400 CONSO PTR,POW ;PTR POWER ON? + 000043' 254000 000074' JRST PTREND ;NO + 000044' 667000 100000 TLON IOS,PTRPOW ;PTRPOW=1? PTRPOW:=1 + 000045' 254000 000130' JRST PTREX1 ;NO + 000046' 623000 400000 TLZE IOS,IODISC + 000047' 254000 000120' JRST PTREX + 000050' 623000 200000 TLZE IOS,PTRFCI ;IS PTRFCI=1? + 000051' 200240 000000* MOVE DAT,PTRSVC ;YES. DAT:=C(PTRSVC) + 000052' 602000 000014 PTRIN0: TRNE IOS,B ;MODE=BINARY? + 000053' 254000 000060' JRST PTRI0 ;YES + 000054' 302240 000200 CAIE DAT,NULL ;LAST CHARACTER NULL OR RUBOUT + 000055' 306240 000377 CAIN DAT,RUBOUT + 000056' 254000 000130' JRST PTREX1 ;YES + 000057' 322240 000130' JUMPE DAT,PTREX1 ;DAT=0? + + 000060' 260140 000000* PTRI0: PUSHJ PDP,STODAT ;NO STORE DATA WORD. + + 000061' 255000 000000 JFCL ;CHECKSUM ERROR + 000062' 254000 000064' JRST PTRI1 ;BLOCK FULL OR BLOCK COMPLETE + 000063' 254000 000130' JRST PTREX1 ;DATA STORED CORRECTLY. + + 000064' 260140 000000* PTRI1: PUSHJ PDP,ADVBFF ;ADVANCE BUFFER + 000065' 661000 400000 TLO IOS,IODISC; NEXT BUFFER IS FULL. IODISC:=1 + 000066' 602000 000040 TRNE IOS,IOCON; NEXT BUFFER IS EMPTY. CONTINUOUS? (IOC + 000067' 661000 400000 TLO IOS,IODISC; NON-CONT. OPERATION. IODISC:=1 + 000070' 661000 000004 PTRI2: TLO IOS,IOFST; IOFST:=1. NEXT ITEM IS FIRST ITEM OF A + 000071' 623000 000001 TLZE IOS,IOW; IN A WAIT? IOW:=0 + 000072' 260140 000000* PUSHJ PDP,SETIOD; IOWS:=1 + 000073' 254000 000130' JRST PTREX1 + + PTRSER - PAPER TAPE READER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 5 +PTRSER MAC 24-APR-78 01:35 8-15-65 + + + + ,COME HERE WHEN THE READER IS SHUT OFF + + 000074' 630000 000136' PTREND: TDZ IOS,[XWD PTRPOW,IOACT] ;PTRPOW:=0,IOACT:=0 + 000075' 260140 000133' PUSHJ PDP,PTRREL ;CLEAR PTR AND CONSO FLAG + 000076' 135040 000014* LDB TAC,PIOMOD + 000077' 661000 000040 TLO IOS,IOEND ;IOEND:=1 + 000100' 602040 000014 TRNE TAC,B ;MODE=A,AL + 000101' 254000 000113' JRST PTREIB ;NO + 000102' 201240 000232 MOVEI DAT,S2EOF; EOF CHAR + 000103' 260140 000060* PUSHJ PDP,STODAT ;STORE DATA WORD + 000104' 254000 000061' JRST PTRI0+1 ;CHECKSUM ERROR + 000105' 254000 000110' JRST .+3 ;BLOCK FULL OF BLOCK COMPLETE + 000106' 260140 000000* PTREI: PUSHJ PDP,STOSQD; FINISH THIS BUFFER, STORE WORD COUNT + 000107' 330000 000000 SKIP + 000110' 260140 000064* PUSHJ PDP,ADVBFF ;ADVANCE BUFFER + 000111' 330000 000000 SKIP + 000112' 254000 000070' JRST PTRI2 + + 000113' 302040 000014 PTREIB: CAIE TAC,B ;MODE=BINARY? + 000114' 254000 000106' JRST PTREI ;NO + 000115' 607000 000004 TLNN IOS,IOFST ;IOFST=1? + 000116' 660000 002000 TRO IOS,PTRERR ;NO. PTRERR:=1. BINARY BLOCK INCOMPLE + 000117' 254000 000070' JRST PTRI2 + + PTRSER - PAPER TAPE READER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 6 +PTRSER MAC 24-APR-78 01:35 8-15-65 + + + + ,DISCONNECT PTR + 000120' 337020 000000* PTREX: SKIPG @PTRADR ;IOUSE=1? + 000121' 254000 000124' JRST PTREX0 ;YES. + 000122' 710440 000041* DATAI PTR,PTRSV1 + 000123' 254000 000052' JRST PTRIN0 + + 000124' 710440 000051* PTREX0: DATAI PTR,PTRSVC ;SAVE LAST DATA WORD FROM PTR + 000125' 260140 000133' PUSHJ PDP,PTRREL ;CLEAR PTR AND CONSO FLAG + 000126' 661000 200000 TLO IOS,PTRFCI ;PTRFCI:=1 + 000127' 620000 010000 TRZ IOS,IOACT ;IOACT:=0 + + 000130' 202200 000000* PTREX1: MOVEM ITEM,PTRCTR ;PTRCTR:=C(ITEM) + 000131' 202000 000040* MOVEM IOS,PTRIOS ;PTRIOS:=C(IOS) + 000132' 254000 000000* JRST PTRRET ;RESTORE ACCUMULATORS AND DISMISS INTER + + INTERNAL PTRINI + + 000133' PTRINI: + 000133' 710600 000000 PTRREL: CONO PTR,0 ;CLEAR PTR CONTROL + 000134' 513000 000032' HLLZS PTRINT ;CLEAR CONSO FLAG + 000135' 263140 000000 POPJ PDP, + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000137 + +9K CORE USED + + PTRSER - PAPER TAPE READER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 7 +PTRSER MAC 24-APR-78 01:35 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADVBFF 000110' EXT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CKS12 000000 EXT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT + + + PTRSER - PAPER TAPE READER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 7-1 +PTRSER MAC 24-APR-78 01:35 SYMBOL TABLE + +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +ILLOUT 000002' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSET 000037' EXT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +MTW 010000 INT +NULL 000200 +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PIOFF 000400 +PIOMOD 000076' EXT +PION 000200 +POW 000400 + + PTRSER - PAPER TAPE READER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 7-2 +PTRSER MAC 24-APR-78 01:35 SYMBOL TABLE + +PROG 000007 INT +PTR 000104 SPD +PTRADR 000120' EXT +PTRBIN 000040 +PTRBSY 000020 +PTRBUF 000000 EXT +PTRCHN 000015' EXT +PTRCHR 000000 EXT +PTRCTR 000130' EXT +PTRDAT 000036' EXT +PTRDB 000000 EXT +PTRDON 000010 +PTRDSP 000000' ENT +PTREI 000106' +PTREIB 000113' +PTREND 000074' +PTRERR 002000 +PTREX 000120' +PTREX0 000124' +PTREX1 000130' +PTRFCI 200000 +PTRI0 000060' +PTRI1 000064' +PTRI2 000070' +PTRIN0 000052' +PTRIN1 000013' +PTRIN4 000027' +PTRINI 000133' INT +PTRINP 000004' +PTRINT 000032' INT +PTRIOS 000131' EXT +PTRMOD 000000 EXT +PTRPOW 100000 +PTRPTR 000010' EXT +PTRREL 000133' +PTRRET 000132' EXT +PTRSAV 000000 EXT +PTRSER 000000 EXT +PTRSV1 000122' EXT +PTRSVC 000124' EXT +RUBOUT 000377 +RUN 200000 INT +RUNABL 204000 INT +S2EOF 000232 +SETBYT 000007' EXT +SETIOD 000072' EXT +STODAT 000103' EXT +STOSQD 000106' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT + + PTRSER - PAPER TAPE READER SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 7-3 +PTRSER MAC 24-APR-78 01:35 SYMBOL TABLE + +USRMOD 010000 INT +UUO 000014 INT +WSYNC 000000 EXT + PPPPPPPPPPPP TTTTTTTTTTTTTTT PPPPPPPPPPPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTTTTTTTTTTTTTT PPPPPPPPPPPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTTTTTTTTTTTTTT PPPPPPPPPPPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +PPP PPP TTT PPP PPP SSS EEE RRR RRR +PPP PPP TTT PPP PPP SSS EEE RRR RRR +PPP PPP TTT PPP PPP SSS EEE RRR RRR +PPP PPP TTT PPP PPP SSS EEE RRR RRR +PPP PPP TTT PPP PPP SSS EEE RRR RRR +PPP PPP TTT PPP PPP SSS EEE RRR RRR +PPPPPPPPPPPP TTT PPPPPPPPPPPP SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTT PPPPPPPPPPPP SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTT PPPPPPPPPPPP SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +PPP TTT PPP SSS EEE RRR RRR +PPP TTT PPP SSS EEE RRR RRR +PPP TTT PPP SSS EEE RRR RRR +PPP TTT PPP SSS EEE RRR RRR +PPP TTT PPP SSS EEE RRR RRR +PPP TTT PPP SSS EEE RRR RRR +PPP TTT PPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +PPP TTT PPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +PPP TTT PPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :PTPSER.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:36 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1677 +File will be deleted after printing + +PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 8-15-65 + + XLIST + LIST + TITLE PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE + SUBTTL 8-15-65 + EXTERNAL PTPCHN, PTPSAV, ADVBFE, ITMCT1, SETIOD, SETBYT, IOSET, CKS12 + EXTERNAL ILLINP, OUT, WAIT1, PTPRET,PTPCHL,PIOMOD + INTERNAL PTPINT + + ;PTP DEVICE DATA BLOCK LINKAGE + + EXTERNAL PTPDB,PTPDAT,PTPCHR,PTPIOS,PTPSER,PTPMOD,PTPBUF + EXTERNAL PTPPTR,PTPADR,PTPCTR,PTPCNT,PTPCHA,PTPSIO + ENTRY PTPDSP + + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 2 +PTPSER MAC 24-APR-78 13:00 8-15-65 + + + + , PARAMETER ASSIGNMENTS + + + , PTP CONTROL REGISTER + 000010 PTPDON=10 + + , FORMAT CONTROL + 000200 PTPFDN=200 + + , SPECIAL IO STATUS WORD ASSIGNMENTS + 200000 PTPFED=200000 + 040000 PTPSSQ=40000 + 020000 PTPEOL=20000 + 010000 PTPSEQ=10000 + 004000 PTPBIN=4000 ;CHECKSUM BINARY + 002000 PTPIB=2000 ;IMAGE BINARY + + , SPECIAL ASCII CHARACTERS + 000200 NULL=200 + 000377 RUBOUT=377 + 000211 HORTAB=211 + 000213 VERTAB=213 + 000214 FORMFD=214 + + REPEAT 0,< + ,PTP DATA BLOCK + + PTPDAT: SIXBIT "PTP" + PTPCHR: 41 + PTPIOS: 0 + PTPSER: EXP PTPDSP + PTPMOD: XWD 1000+PROG.14403 + 0 + PTPBUF: 0 + PTPPTR: 0 + PTPADR: XWD PROG,0 + PTPCTR: 0 + PTPCNT: 0 + PTPCHA: 0 + PTPSIO: 0 + > + + ,PTP SERVICE DISPATCH TABLE + + 000000' 254000 000004' PTPDSP: JRST PTPREL ;RELEASE + 000001' 254000 000007' JRST PTPCLS ;CLOSE + 000002' 254000 000024' JRST PTPOUT ;OUTPUT + 000003' 254000 000000* JRST ILLINP ;INPUT + + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 3 +PTPSER MAC 24-APR-78 13:00 8-15-65 + + + + INTERNAL PTPINI + 000004' PTPINI: + 000004' 710200 000000 PTPREL: CONO PTP,0 + 000005' 513000 000052' HLLZS PTPINT ;CLEAR CONSO FLAG BITS + 000006' 263140 000000 POPJ PDP, ;RETURN + + 000007' 260140 000000* PTPCLS: PUSHJ PDP,OUT; OUTPUT REMAINING BUFFERS + 000010' 260140 000000* PUSHJ PDP,WAIT1; WAIT FOR IOACT=0. + 000011' 200000 000000* MOVE IOS,PTPIOS; C(IOS):=C(PTPIOS) + 000012' 661000 600001 TLO IOS,IODISC+PTPFED+IOW; IODISC:=IOW:=PTPFED:=1 + 000013' 660000 010000 TRO IOS,IOACT; IOACT:=1 + 000014' 202000 000011* MOVEM IOS,PTPIOS; C(PTPIOS):=C(IOS) + 000015' 201040 000200 MOVEI TAC,200 + 000016' 202040 000000* MOVEM TAC,PTPCNT; PTPCNT:=400 + 000017' 201040 000010 MOVEI TAC,PTPDON ;SET CONSO FLAG + 000020' 542040 000052' HRRM TAC,PTPINT + 000021' 201040 000000* MOVEI TAC,PTPCHN; TAC:=PTPCHN,PI CHANNEL ASSIGNMENT + 000022' 710201 000010 CONO PTP,PTPDON(TAC); DONE FLAG:=1, ASSIGN PI CHANN + 000023' 254000 000010* JRST WAIT1 ;WAIT FOR IOACT=0, ALL BUFFERS FINISHED + + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 4 +PTPSER MAC 24-APR-78 13:00 8-15-65 + + + + 000024' 623000 000002 PTPOUT: TLZE IOS,IOBEG ;VIRGIN DEVICE? (IOBEG:=0) + 000025' 254000 000036' JRST PTPIN2 ;YES + + 000026' 660000 010000 PTPIN1: TRO IOS,IOACT ;IOACT:=1 + 000027' 621000 400000 TLZ IOS,IODISC ;CLEAR DISCONNECT BIT + 000030' 202000 000014* MOVEM IOS,PTPIOS ;PTPIOS:=C(IOS) + 000031' 201040 000010 MOVEI TAC,PTPDON ;SET CONSO FLAG BIT + 000032' 542040 000052' HRRM TAC,PTPINT + 000033' 201040 000021* MOVEI TAC, PTPCHN + 000034' 710201 000010 CONO PTP,PTPDON (TAC); DONE FLAG:=1, ASSIGN PI CHAN + 000035' 263140 000000 POPJ PDP, ;RETURN + + 000036' 135040 000000* PTPIN2: LDB TAC,PIOMOD + 000037' 661000 200024 TLO IOS, IOFST+PTPFED+IO ;IOFST:=PTPFED:=IO:=1 + 000040' 621000 006000 TLZ IOS,PTPBIN+PTPIB ;CLEAR BINARY AND IMAGE BINAR + 000041' 306040 000013 CAIN TAC,IB ;IMAGE BINARY? + 000042' 661000 002000 TLO IOS,PTPIB ;YES + 000043' 306040 000014 CAIN TAC,B ;MODE:=BINARY? + 000044' 661000 004000 TLO IOS,PTPBIN ;YES, PTPBIN:=1 + 000045' 201040 000200 MOVEI TAC,PTPFDN ;PTPCNT:=PTPFDN + 000046' 202040 000016* MOVEM TAC,PTPCNT + 000047' 260140 000000* PUSHJ PDP,SETBYT ;SETBYT + 000050' 502040 000000* HLLM TAC,PTPPTR ;PTPPTR0-5:=PTPPTR12-13:=0,PTPPTR6-11:= + ;SIZE; PTPPTR14-17:=PROG + 000051' 254000 000026' JRST PTPIN1 + + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 5 +PTPSER MAC 24-APR-78 13:00 8-15-65 + + + + ,PUNCH INTERRUPT SERVICE + + 000052' 710340 000010 PTPINT: CONSO PTP,PTPDON; DONE FLAG=1? + 000053' 254000 000052' JRST PTPINT ;NO. IF PTP IS IN FLAG LIST GO TO ERROR + 000054' 202000 000000* MOVEM IOS,PTPSIO ;PTPSIO:=C(IOS) SAVE IOS + 000055' 200000 000030* MOVE IOS,PTPIOS ;IOS:=C(PTPIOS) + 000056' 603000 200000 TLNE IOS,PTPFED ;FEED REQUEST? (PTPFED=1?) + 000057' 254000 000151' JRST PTPS2 ;YES + 000060' 200000 000054* MOVE IOS,PTPSIO ;RESTORE IOS + 000061' 264000 000000* JSR PTPSAV ;SAVE ACS AND ESTABLISH PDP + 000062' 201300 000000* MOVEI DEVDAT,PTPDAT + 000063' 260140 000000* PUSHJ PDP,IOSET ;PROG:=(JBTADR 18-35),ITEM:=C(DEVCTR) + 000064' 200000 000055* MOVE IOS,PTPIOS + 000065' 623000 400000 TLZE IOS,IODISC ;DISCONNECT? (IODISC=1?) + 000066' 254000 000167' JRST PTPADV ;YES + 000067' 623000 000004 TLZE IOS,IOFST ;IOFST=1? IOFST:=0 + 000070' 254000 000175' JRST PTP9 ;YES + 000071' 607000 006000 TLNN IOS,PTPBIN+PTPIB ;BINARY PUNCH MODE? + 000072' 254000 000121' JRST PTP3 ;NO + + 000073' 200040 000000* PTPB0: MOVE TAC,PTPCHA; BINARY OUTPUT BYTE SIZE=36 + 000074' 241040 000006 ROT TAC,6 + 000075' 202040 000073* MOVEM TAC,PTPCHA + 000076' 405040 000077 ANDI TAC,77; TAC:=XX, SIXBIT SUB-BYTE + 000077' 271040 000200 ADDI TAC,200 + 000100' 710140 000001 DATAO PTP,TAC; PUNCH 2XX + 000101' 371000 000046* SOSL PTPCNT; C(PTPCNT):=C(PTPCNT)-1. WORD DONE? + 000102' 254000 000227' JRST PTPXIT; NO + 000103' 371000 000000* SOSL PTPCTR; C(PTPCTR):=C(PTPCTR)-1. ITEM COUNT < 0 + 000104' 254000 000113' JRST PTPB1; NO + 000105' 603000 002000 TLNE IOS,PTPIB ;IMAGE BINARY? + 000106' 665000 400000 TLOA IOS,IODISC ;YES, SUPPRESS TAPE FEED. + 000107' 661000 600000 TLO IOS,IODISC+PTPFED ;IODIS:=PTPFED:=1 + 000110' 201040 000010 MOVEI TAC,10 + 000111' 202040 000101* MOVEM TAC,PTPCNT; PTPCNT:=10 + 000112' 254000 000227' JRST PTPXIT + + 000113' 201040 000005 PTPB1: MOVEI TAC,5 ;PTPCNT:=5 + 000114' 202040 000111* MOVEM TAC,PTPCNT + 000115' 200260 000050* MOVE DAT,@PTPPTR; PTPCHA:=OUTPUT DATA WORD + 000116' 350000 000115* AOS PTPPTR; PTPPTR:=C(PTPPTR)+1. ADVANCE ITEM POIN + 000117' 202240 000075* MOVEM DAT,PTPCHA + 000120' 254000 000227' JRST PTPXIT + + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 6 +PTPSER MAC 24-APR-78 13:00 8-15-65 + + + + 000121' 710140 000117* PTP3: DATAO PTP,PTPCHA; PUNCH CHARACTER + 000122' 602000 000014 TRNE IOS,14; IS MODE AN ALPHA MODE + 000123' 254000 000136' JRST PTP1; NO + 000124' 200240 000121* MOVE DAT,PTPCHA + 000125' 302240 000211 CAIE DAT,HORTAB; HORIZONTAL OR VERTICAL TAB? + 000126' 306240 000213 CAIN DAT,VERTAB + 000127' 254000 000216' JRST PTPP1; YES + 000130' 302240 000214 CAIE DAT,FORMFD; FORM FEED? + 000131' 254000 000136' JRST PTP1; NO + 000132' 661000 220000 TLO IOS,PTPFED+PTPEOL; PTPFED:=PTPEOL:=1 + 000133' 201240 000020 MOVEI DAT,20 + 000134' 202240 000114* MOVEM DAT,PTPCNT; PTPCNT:=20 + 000135' 254000 000227' JRST PTPXIT + + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 7 +PTPSER MAC 24-APR-78 13:00 8-15-65 + + + + 000136' 375000 000103* PTP1: SOSGE PTPCTR; C(PTPCTR:=C(PTPCTR)-1. IS C(PTPCTR)<0 + 000137' 254000 000160' JRST PTP5 ;YES + 000140' 134240 000116* LDBI DAT,PTPPTR ;DAT:=OUTPUT ITEM + 000141' 135040 000036* LDB TAC,PIOMOD + 000142' 306040 000010 CAIN TAC,I; MODE=IMAGE? + 000143' 254000 000147' JRST PTP6 ;YES + 000144' 435240 000200 IORI DAT,200; NO, INSERT EIGHTH HOLD + 000145' 306240 000200 CAIN DAT,NULL; NULL? + 000146' 254000 000136' JRST PTP1; YES + + 000147' 202240 000124* PTP6: MOVEM DAT,PTPCHA; PTPCHA:=OUTPUT ITEM + 000150' 254000 000227' JRST PTPXIT + + 000151' 402000 000147* PTPS2: CLEARM PTPCHA; PUNCH FEED + 000152' 710140 000151* DATAO PTP,PTPCHA + 000153' 377000 000134* SOSG PTPCNT; COUNT FEED LINES + 000154' 621000 200000 TLZ IOS,PTPFED; PTPFED:=0 + 000155' 202000 000064* MOVEM IOS,PTPIOS; PTPIOS:=C(IOS) + 000156' 200000 000060* MOVE IOS,PTPSIO ;RESTORE IOS + 000157' 254520 000000* JEN @PTPCHL ;DISMISS + + 000160' 661000 400000 PTP5: TLO IOS,IODISC; IODISC:=1 + 000161' 254000 000227' JRST PTPXIT + + 000162' 550100 000000* PTPBN: HRRZ TAC1,PTPADR; TAC1:=BUFFER ADDRESS + 000163' 260140 000000* PUSHJ PDP,CKS12; TAC:=CALCULATE CHECKSUM + 000164' 270100 000162* ADD TAC1, PTPADR + 000165' 502060 000002 HLLM TAC,@TAC1; STORE CHECKSUM IN LEFT HALF OF FIRST BU + 000166' 254000 000113' JRST PTPB1 + + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 8 +PTPSER MAC 24-APR-78 13:00 8-15-65 + + + + 000167' 260140 000000* PTPADV: PUSHJ PDP,ADVBFE; ADVANCE BUFFER + 000170' 254000 000222' JRST PTPDSC; EXIT1. NEXT BUFFER EMPTY + 000171' 602000 000040 TRNE IOS,IOCON; CONTINUOUS? (IOCON=1?) + 000172' 254000 000222' JRST PTPDSC; YES + 000173' 623000 000001 TLZE IOS,IOW; IN A WAIT? IOW:=0 + 000174' 260140 000000* PUSHJ PDP,SETIOD; YES. IOWS:=1 + 000175' 621000 000004 PTP9: TLZ IOS,IOFST; IOFST:=0 + 000176' 200040 000164* MOVE TAC,PTPADR + 000177' 350000 000001 AOS TAC + 000200' 542040 000140* HRRM TAC,PTPPTR; PTPPTR18-35:=C(PTPADR18-25)+1 + 000201' 550220 000001 HRRZ ITEM,@TAC; ITEM:=WORD COUNT + 000202' 135100 000215' LDB TAC1,PTP91 ;PICK UP BYTE SIZE + 000203' 260140 000000* PUSHJ PDP,ITMCT1; ITEM:=WORD COUNT*[36/BYTE SIZE] + 000204' 202200 000136* MOVEM ITEM,PTPCTR; PTPCTR:=C(ITEM) + 000205' 322200 000167' JUMPE ITEM,PTPADV ; IS ITEM COUNT=0? + 000206' 603000 004000 TLNE IOS,PTPBIN; BINARY PUNCH MODE? + 000207' 254000 000162' JRST PTPBN; YES + 000210' 607000 002000 TLNN IOS,PTPIB ;IMAGE BINARY? + 000211' 254000 000136' JRST PTP1 + 000212' 350000 000200* AOS PTPPTR ;YES + 000213' 370000 000204* SOS PTPCTR + 000214' 254000 000113' JRST PTPB1 + + 000215' 300600 000212* PTP91: POINT 6,PTPPTR,11 + + 000216' 201240 000377 PTPP1: MOVEI DAT,RUBOUT; PTPCHA:=RUBOUT + 000217' 202240 000152* MOVEM DAT,PTPCHA + 000220' 661000 020000 TLO IOS,PTPEOL; PTPEOL:=1 + 000221' 254000 000227' JRST PTPXIT + + 000222' 260140 000004' PTPDSC: PUSHJ PDP,PTPREL ;CLEAR PTP CONTROL REG AND CONSO BITS + 000223' 620000 010000 TRZ IOS,IOACT; IOACT:=0 + 000224' 661000 000004 TLO IOS,IOFST; IOFST:=1 + 000225' 623000 000001 TLZE IOS,IOW; IN A WAIT? IOW:=0 + 000226' 260140 000174* PUSHJ PDP,SETIOD; YES. IOSW:=1 + + 000227' 202000 000155* PTPXIT: MOVEM IOS,PTPIOS; PTPIOS:=C(IOS) + 000230' 254000 000000* JRST PTPRET; NO + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000231 + +9K CORE USED + + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 9 +PTPSER MAC 24-APR-78 13:00 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADVBFE 000167' EXT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CKS12 000163' EXT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT + + + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 9-1 +PTPSER MAC 24-APR-78 13:00 SYMBOL TABLE + +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +FORMFD 000214 +HORTAB 000211 +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +ILLINP 000003' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSET 000063' EXT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +ITMCT1 000203' EXT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +MTW 010000 INT +NULL 000200 +OBUFB 100000 INT +OUT 000007' EXT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT + + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 9-2 +PTPSER MAC 24-APR-78 13:00 SYMBOL TABLE + +PIOMOD 000141' EXT +PROG 000007 INT +PTP 000100 SPD +PTP1 000136' +PTP3 000121' +PTP5 000160' +PTP6 000147' +PTP9 000175' +PTP91 000215' +PTPADR 000176' EXT +PTPADV 000167' +PTPB0 000073' +PTPB1 000113' +PTPBIN 004000 +PTPBN 000162' +PTPBUF 000000 EXT +PTPCHA 000217' EXT +PTPCHL 000157' EXT +PTPCHN 000033' EXT +PTPCHR 000000 EXT +PTPCLS 000007' +PTPCNT 000153' EXT +PTPCTR 000213' EXT +PTPDAT 000062' EXT +PTPDB 000000 EXT +PTPDON 000010 +PTPDSC 000222' +PTPDSP 000000' ENT +PTPEOL 020000 +PTPFDN 000200 +PTPFED 200000 +PTPIB 002000 +PTPIN1 000026' +PTPIN2 000036' +PTPINI 000004' INT +PTPINT 000052' INT +PTPIOS 000227' EXT +PTPMOD 000000 EXT +PTPOUT 000024' +PTPP1 000216' +PTPPTR 000215' EXT +PTPREL 000004' +PTPRET 000230' EXT +PTPS2 000151' +PTPSAV 000061' EXT +PTPSEQ 010000 +PTPSER 000000 EXT +PTPSIO 000156' EXT +PTPSSQ 040000 +PTPXIT 000227' +RUBOUT 000377 +RUN 200000 INT +RUNABL 204000 INT + + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE MACRO 10 05:51 24-APR-78 PAGE 9-3 +PTPSER MAC 24-APR-78 13:00 SYMBOL TABLE + +SETBYT 000047' EXT +SETIOD 000226' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT +VERTAB 000213 +WAIT1 000023' EXT + RRRRRRRRRRRR UUU UUU NNN NNN CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +RRRRRRRRRRRR UUU UUU NNN NNN CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +RRRRRRRRRRRR UUU UUU NNN NNN CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +RRR RRR UUU UUU NNN NNN CCC SSS SSS +RRR RRR UUU UUU NNN NNN CCC SSS SSS +RRR RRR UUU UUU NNN NNN CCC SSS SSS +RRR RRR UUU UUU NNNNNN NNN CCC SSS SSS +RRR RRR UUU UUU NNNNNN NNN CCC SSS SSS +RRR RRR UUU UUU NNNNNN NNN CCC SSS SSS +RRRRRRRRRRRR UUU UUU NNN NNN NNN CCC SSSSSSSSS SSSSSSSSS +RRRRRRRRRRRR UUU UUU NNN NNN NNN CCC SSSSSSSSS SSSSSSSSS +RRRRRRRRRRRR UUU UUU NNN NNN NNN CCC SSSSSSSSS SSSSSSSSS +RRR RRR UUU UUU NNN NNNNNN CCC SSS SSS +RRR RRR UUU UUU NNN NNNNNN CCC SSS SSS +RRR RRR UUU UUU NNN NNNNNN CCC SSS SSS +RRR RRR UUU UUU NNN NNN CCC SSS SSS +RRR RRR UUU UUU NNN NNN CCC SSS SSS +RRR RRR UUU UUU NNN NNN CCC SSS SSS +RRR RRR UUUUUUUUUUUUUUU NNN NNN CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +RRR RRR UUUUUUUUUUUUUUU NNN NNN CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +RRR RRR UUUUUUUUUUUUUUU NNN NNN CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :RUNCSS.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:36 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1665 +File will be deleted after printing + +RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 T. HASTINGS 8-16-65 + + XLIST + LIST + TITLE RUNCSS - RUN CONTROL SUBROUTINES + SUBTTL T. HASTINGS 8-16-65 + EXTERNAL APRCHN,APRCHL,CH6SAC,JBTADR,JOB,JOBAC,JOBDAT,JOBN + EXTERNAL JOBPDP,USRDDT,USRPDP,JOBDDT + EXTERNAL IORELS,JBTSTS,JOBADR,JOBCDP,JOBPC,JOBREL,JOBSA,JOBSYM + EXTERNAL MESPNT,QUANT1,JOBDAC,TTYSTR,STOPU,SCHEDF + EXTERNAL UXIT,IOCOMP,DCREQ,DCAVAL,DTREQ,DTAVAL,MTREQ,MTAVAL + EXTERNAL CH1XIT,CH2XIT,CH3XIT,CH4XIT,CH5XIT,CH6XIT,CH7XIT + EXTERNAL JOBFF,MJOBPD,JOBPDL,IOCOMP,PJOBN,USRLO,USRLO1,USRHI + EXTERNAL TTYFNU,RSCHED + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 2 +RUNCSS MAC 24-APR-78 01:40 T. HASTINGS 8-16-65 + + + ;EXIT UUO ROUTINE + + INTERNAL EXIT + EXTERNAL IORELS,TTYFNU,MESPNT,IOKILL + + 000000' 260140 000000* EXIT: PUSHJ PDP,IORELS ;RELEASE ALL DEVICES + 000001' 260140 000000* PUSHJ PDP,TTYFNU + 000002' 201100 000005' MOVEI TAC1,EXMESS + 000003' 260140 000000* PUSHJ PDP,MESPNT + 000004' 254000 000030' JRST HOLD ;STOP THIS USER IMMEDIATELY + + 000005' EXMESS: ASCIZ / + 000005' 064250 554222 EXIT + 000006' 520321 200000 / + ;RESET UUO ROUTINE + + INTERNAL RESET + + 000007' 260140 000000* RESET: PUSHJ PDP,IOKILL ;RELEASE ALL DEVICES + 000010' 260140 000227' PUSHJ PDP,SETUSR ;CLEAR PART OF JOB DATA AREA + 000011' 254000 000000* JRST UXIT ;AND RETURN TO CALLER + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 3 +RUNCSS MAC 24-APR-78 01:40 T. HASTINGS 8-16-65 + + + + ;COMMON ERROR HANDLING ROUTINES + ;DEVDAT MUST BE SET UP TO TTY DDB ON WHICH TO PRINT ERROR MESSAGE + + ;HERE ON ERROR DETECTED AT INTERRUPT SERVICE LEVEL + ;0(PDP) CONTAINS ADR. OF DEVICE DATA BLOCK CAUSING ERROR + + ;CALL MOVE TAC, PI CHANNEL NO DETECTING ERROR + ; JRST HOLDI + + INTERNAL HOLDI,HOLD,HOLDI1 + + 000012' 200103 000000 HOLDI: MOVE TAC1, 0(PDP) ;DEVICE DATA BLOCK + 000013' 135200 000265' LDB ITEM, [POINT 9, DEVCHR(TAC1), 8] ;GET JOB NUMBER + 000014' 261140 000001 HOLDI1: PUSH PDP, TAC ;SAVE PI CHANNEL NO. + 000015' 260140 000032' PUSHJ PDP, HOLDSB + 000016' 262140 000001 POP PDP, TAC + 000017' 254001 000020' JRST CHNTAB(TAC) ;GO RESTORE ACS AND DISMISS CHANNEL + + 000020' 254000 000000* CHNTAB: JRST RSCHED ;INTERRUPT ON CLOCK CHANNEL,RESCHEDULE + 000021' 254000 000000* JRST CH1XIT + 000022' 254000 000000* JRST CH2XIT + 000023' 254000 000000* JRST CH3XIT + 000024' 254000 000000* JRST CH4XIT + 000025' 254000 000000* JRST CH5XIT + 000026' 254000 000000* JRST CH6XIT + 000027' 254000 000000* JRST CH7XIT + + ;HERE ON ERROR FROM UUO LEVEL. ERROR MESSAGE ALREADY IN TTY BUFFER + + ;DAT=BYTE POINTER TO END OF MESSAGE; DEVDAT=TTY DEV. DATA BLOCK + 000030' 200200 000000* HOLD: MOVE ITEM, JOB ;NO. OF THIS JOB + 000031' 260140 000242' PUSHJ PDP,WAIT1 ;WAIT UNTIL TTY FINISHED + + 000032' 260140 000000* HOLDSB: PUSHJ PDP,CRLF + 000033' 260140 000000* PUSHJ PDP, TTYSTR ;START UP TTY TO PRINT ERROR MESSAGE + EXTERNAL CRLF + + ;ROUTINE TO STOP USER AND FLAG AS ERROR STOP + ;CALL: MOVE ITEM, JOB NUMBER + ; PUSHJ PDP,ESTOP + + + INTERNAL ESTOP + + 000034' 205040 002000 ESTOP: MOVSI TAC,JERR ;SET ERROR BIT IN JOB STATUS + 000035' 436044 000000* IORM TAC, JBTSTS(ITEM) + 000036' 254000 000070' JRST STOP1 + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 4 +RUNCSS MAC 24-APR-78 01:40 T. HASTINGS 8-16-65 + + + + ,BLOCK TRANSFER PROGRAM OVER LOADER + + INTERNAL LDRBLT + EXTERNAL USRREL + + 000002 PGADR=2 ;AC CONTAINING BEGINNING OF PROGRAM(LOA + + 000037' 260140 000000* LDRBLT: PUSHJ PDP,IORELS + 000040' 550051 000002 HRRZ TAC, PGADR (JDAT) ;ADD OFFSET TO SYMBOL TABLE P + 000041' 402011 000002 SETZM PGADR(JDAT) ;THEN CLEAR SO SYSMAK WILL STILL WORK + 000042' 550240 000007 HRRZ DAT,PROG + 000043' 270240 000001 ADD DAT,TAC + 000044' 272045 000000* ADDM TAC,JOBSYM(DAT) + 000045' 504240 000007 HRL DAT,PROG + 000046' 554045 000000* HLRZ TAC,JOBSA(DAT) + 000047' 313040 000000* CAMLE TAC,USRREL ;IS HIGHEST DESTINATION STILL IN USER A + 000050' 200040 000047* MOVE TAC,USRREL ;NO. MAKE SURE IT IS. + 000051' 207000 000005 MOVSS DAT + 000052' 270040 000005 ADD TAC,DAT + 000053' 270240 000266' ADD DAT,[XWD 30,30] ;MOVE PROGRAM DOWN + 000054' 251241 000000 BLT DAT,(TAC) + 000055' 200051 000000* MOVE TAC,JOBDDT(JDAT) + moveM TAC,USRDDT + 000056' 260140 000227' PUSHJ PDP,SETUSR + 000057' 260140 000001* PUSHJ PDP,TTYFNU + 000060' 201100 000063' MOVEI TAC1,LDRMES + 000061' 260140 000003* PUSHJ PDP,MESPNT + 000062' 254000 000030' JRST HOLD + + 000063' LDRMES: ASCIZ / + 000063' 064251 447602 LOADER FINISHED + 000064' 422132 220214 + 000065' 446351 151620 + 000066' 426101 505000 / + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 5 +RUNCSS MAC 24-APR-78 01:40 T. HASTINGS 8-16-65 + + + + INTERNAL STOP1, STOP2, CONT1, START1 + + 000200 PION=200 + 000400 PIOFF=400 + + ;ROUTINE TO PUT CURRENT JOB IN IO WAIT + ;ROUTINE TO STOP CURRENT JOB + ;MAY BE CALLED FROM ANY LEVEL + ;CALL; PUSHJ PDP,STOP0 + ; RETURN ;RETURN HERE IMMEDIATELY, IF CALLED FRO + ;PRIORITY CHANNEL THAN CLOCK. OTHERWISE RETURN WHEN JOB IS RUNABLE AG + + INTERNAL STOP0 + + 000067' 200200 000030* STOP0: MOVE ITEM, JOB ;CURRENT JOB NUMBER + + ;ROUTINE TO STOP ANY JOB FROM BEING SCHEDULED + ;CALL: + ; MOVE ITEM, JOB NUMBER + ; PUSHJ PDP, STOP1 + ; EXIT ;RETURN HERE IMMEDIATELY, IF CALLED FROM HIGHER + ;PRIORITY CHANNEL THAN CLOCK, OTHERWISE RETURN WHEN JOB IC RUNABLE + ;CALLED WHEN CONTROL C TYPED OR ON ERROR MESSAGES + + 000070' 205040 200000 STOP1: MOVSI TAC, RUN + 000071' 700600 000400 CONO PI, PIOFF ;DONE AT INTERUPT LEVEL HIGHER THAN DT + 000072' 616044 000035* TDNN TAC, JBTSTS(ITEM) ;IS RUN BIT ON IN JOB STATUS + 000073' 254000 000104' JRST STOPA ;NO + 000074' 413044 000072* ANDCAB TAC, JBTSTS(ITEM) ;YES, SO CLEAR IT + 000075' 700600 000200 CONO PI, PION + 000076' 603040 040000 TLNE TAC, DTW ;WAITING TO USE DECTAPE + 000077' 370000 000000* SOS DTREQ ;YES, REDUCE REQUEST COUNT + 000100' 603040 020000 TLNE TAC, DCW ;DATA CONTROL + 000101' 370000 000000* SOS DCREQ + 000102' 603040 010000 TLNE TAC,MTW ;MAG TAPE + 000103' 370000 000000* SOS MTREQ + 000104' 700600 000200 STOPA: CONO PI, PION ;MAKE SURE PI ON + 000105' 332000 000000* SKIPE SCHEDF ;IS CLOCK IN THE MIDDLE OF SCHEDULING + 000106' 254000 000111' JRST STOP2 ;YES, MAKE SURE THIS JOB WONT RUN + 000107' 312200 000067* CAME ITEM, JOB ;NO, IS THIS JOB CURRENT USER + 000110' 263140 000000 POPJ PDP, ;NO + ;YES, MAKE CLOCK RESCHEDULE + + ;ROUTINE TO CAUSE CLOCK TO RESCHEDULE + ;CALL : + ; PUSHJ PDP, STOP2 + ; EXIT ;RETURN WHEN JOB RUNABLE AGAIN + + EXTERNAL PICLK + + 000111' 700600 000400 STOP2: CONO PI, PIOFF ;PREVENT CLOCK INTERRUPT + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 5-1 +RUNCSS MAC 24-APR-78 01:40 T. HASTINGS 8-16-65 + + 000112' 476000 000000* SETOM STOPU ;SET FLAG FOR CLOCK ROUTINE + 000113' 700600 000000* CONO PI,PICLK ;REQUEST CLOCK INTERRUPT AND TURN PI ON + ;CLOCK WILL TRAP IMMEDIATELY IF AT UUO + 000114' 263140 000000 POPJ PDP, ;RETURN HERE WHEN JOB RUNABLE AGAIN + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 6 +RUNCSS MAC 24-APR-78 01:40 T. HASTINGS 8-16-65 + + + + ;SUBROUTINE TO SETUP A MONITOR JOB TO BE RUN + ;JOB MUST HAVE CORE ASSIGNED + ;CALL: MOVE ITEM, JOB NUMBER + ; HRRI TAC1, ADDRESS OF MONITOR JOB(A SUBROUTINE) + ; HRLI TAC1, RETURN ADDRESS WHEN JOB FINISHED + ; PUSHJ PDP, MONJOB + ; RETURN IMMEDIATELY IF CALLED FROM CLOCK LEV OR HIGHER + + ;ALL ACS WILL BE SAVED FOR THE MONITOR JOB + + INTERNAL MONJOB + EXTERNAL JOBDAC,JOBDHI,JOBPDP,MJOBPD,JOBPDL,JBTADR + + 000115' 261140 000002 MONJOB: PUSH PDP, TAC1 ;SAVE ARG. + 000116' 550444 000000* HRRZ JDAT,JBTADR(ITEM) ;ADDRESS OF JOBS DATA AREA + 000117' 201111 000000* MOVEI TAC1, JOBDAC(JDAT) ;SAVE 0-17 IN DUMP ACS + 000120' 251111 000000* BLT TAC1, JOBDHI(JDAT) ;IN JOB DATA AREA + 000121' 205100 000000* MOVSI TAC1,MJOBPD ;SET UP PD LIST IN JOB DATA AREA + 000122' 541111 000000* HRRI TAC1, JOBPDL(JDAT) + 000123' 514043 000000 HlrZ TAC, (PDP) ;WITH RETURN AS FIRST ITEM + 000124' 261100 000001 PUSH TAC1, TAC + 000125' 201051 000117* MOVEI TAC, JOBDAC(JDAT) + 000126' 202101 000003 MOVEM TAC1,PDP(TAC) + 000127' 262140 000002 POP PDP, TAC1 ;SET TO RUN + 000130' 405100 777777 ANDI TAC1, 777777 ;FALL INTO STARTU + + ;ROUTINE TO START A JOB AND LEAVE CONSOLE IN COMMAND MODE + ;CALL: MOVE TAC1, START PC + ; MOVE ITEM, JOB NUMBER + ; PUSHJ PDP, STARTU + ; RETURN IMMEDIATELY + INTERNAL STARTM + EXTERNAL TTYURC + + 000131' 260140 000137' STARTM: PUSHJ PDP, START1 + 000132' 254000 000000* JRST TTYURC + + ;START WITH TTY IN USER MODE + + INTERNAL STARTU + EXTERNAL TTYSET + + 000133' 260140 000137' STARTU: PUSHJ PDP,START1 + 000134' 254000 000000* JRST TTYSET ;SET SCANNER TO CALL SETRUN WHEN + ;CR-LF AND INITIALIZE TTY + + INTERNAL CONTM + EXTERNAL TTYURC + + 000135' 254000 000132* CONTM: JRST TTYURC + + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 6-1 +RUNCSS MAC 24-APR-78 01:40 T. HASTINGS 8-16-65 + + ;ROUTINE TO CONTINUE A JOB FROM COMMAND MODE + ;CALL: MOVE ITEM, JOB NUMBER + ; PUSHJ PDP, CONTU + ; RETURN IMMEDIATELY + INTERNAL CONTU + EXTERNAL TTYURC + + 000136' 254000 000135* CONTU: JRST TTYURC ;SET SCANNER TO CALL SETRUN WHEN CR-LF + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 7 +RUNCSS MAC 24-APR-78 01:40 T. HASTINGS 8-16-65 + + + + ;ROUTINE TO SET JOB STATE TO BE SCHEDULED TO RUN + ;WITH SPECIFIED STARTING ADDRESS INCLUDING PC FLAGS + ;CALL: MOVE TAC1,STARTING PC + ; MOVE ITEM, JOB NUMBER + ; MOVE JDAT, ADDRESS OF JOBS DATA AREA(THERE MUST BE ONE) + ; PUSHJ PDP, START1 + ; EXIT RETURN HERE IMMEDIATELY + + 000137' 200051 000000* START1: MOVE TAC,JOBPC(JDAT) ;GET OLD PC + 000140' 202111 000137* MOVEM TAC1,JOBPC(JDAT) ;STORE NEW PC + 000141' 603100 010000 TLNE TAC1,USRMOD ;IS NEW PC IN USER AREA? + 000142' 603040 010000 TLNE TAC,USRMOD ;YES, WAS OLD PC IN USER AREA + 000143' 254000 000147' JRST START2 ;YES,DUMP ACS ARE HIS + 000144' 205111 000000 MOVSI TAC1,(JDAT) ;NO, UUO ACS ARE HIS + 000145' 541111 000125* HRRI TAC1,JOBDAC(JDAT) ;MOVE THEM TO DUMP ACS + 000146' 251111 000120* BLT TAC1,JOBDHI(JDAT) + 000147' 205100 172000 START2: MOVSI TAC1,JERR+DCW+DTW+MTW+JIOW ;CLEAR WAIT BITS + 000150' 412044 000074* ANDCAM TAC, JBTSTS(ITEM) ;IN JOB STATUS WORD + + ;ROUTINE TO CONTINUE ANY JOB AT CURRENT PC + ;CALL: + ; MOVE ITEM, JOB NUMBER + ; PUSHJ PDP, CONT1 + ; EXIT RETURN IMMEDIATELY + + 000151' 263140 000000 CONT1: POPJ PDP, + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 8 +RUNCSS MAC 24-APR-78 01:40 T. HASTINGS 8-16-65 + + + + ;ROUTINE TO SET JOB STATUS RUN BIT + ;CALL: MOVE ITEM,JOB NUMBER + ; PUSHJ PDP,SETRUN + + INTERNAL SETRUN + 000152' 205040 200000 SETRUN: MOVSI TAC,RUN + 000153' 437044 000150* IORB TAC,JBTSTS(ITEM) + 000154' 607040 020000 TLNN TAC,DCW ;IS JOB WAITING FOR DATA CONTROL? + 000155' 254000 000160' JRST CONT2 ;NO + 000156' 357000 000101* AOSG DCREQ ;YES, INCREMENT REQUEST COUNT + 000157' 476000 000000* SETOM DCAVAL ;AND SET DC AS AVAIL IF NOT IN USE + 000160' 607040 040000 CONT2: TLNN TAC,DTW ;DECTAPE? + 000161' 254000 000164' JRST CONT3 ;NO + 000162' 357000 000077* AOSG DTREQ + 000163' 476000 000000* SETOM DTAVAL + 000164' 607040 010000 CONT3: TLNN TAC,MTW ;MAG TAPE? + 000165' 254000 000170' JRST CONT4 + 000166' 357000 000103* AOSG MTREQ + 000167' 476000 000000* SETOM MTAVAL + 000170' 603040 400000 CONT4: TLNE TAC,IOWS ;IO WAIT SATISFIED? + 000171' 350000 000000* AOS IOCOMP ;YES + 000172' 201040 000000* MOVEI TAC,QUANT1 ;SET TIME TO RUN FOR STRAIGHT QUEUE COM + 000173' 542044 000153* HRRM TAC,JBTSTS(ITEM) ;RESPONSE IS FINISHED + 000174' 332000 000107* SKIPE JOB ;IS NULL JOB RUNNING? + 000175' 263140 000000 POPJ PDP, ;NO + 000176' 254000 000111' JRST STOP2 ;YES, RESCHEDULE + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 9 +RUNCSS MAC 24-APR-78 01:40 T. HASTINGS 8-16-65 + + + + ,ROUTINE TO INIATE A WAIT FOR MAG TAPE. DECTAPE, AND DATA CONTROL AC + INTERNAL MTWAIT + 000177' 261140 000002 MTWAIT: PUSH PDP,TAC1 + 000200' 515100 010000 HRLZI TAC1,MTW + 000201' 261140 000001 DVWAIT: PUSH PDP, TAC + 000202' 200040 000174* MOVE TAC,JOB + 000203' 436101 000173* IORM TAC1,JBTSTS(TAC) + 000204' 260140 000111' PUSHJ PDP,STOP2 + 000205' 262140 000001 POP PDP,TAC + 000206' 262140 000002 POP PDP,TAC1 + 000207' 263140 000000 POPJ PDP, + INTERNAL DTWAIT + 000210' 261140 000002 DTWAIT: PUSH PDP,TAC1 + 000211' 515100 040000 HRLZI TAC1,DTW + 000212' 254000 000201' JRST DVWAIT + INTERNAL DCWAIT + 000213' 261140 000002 DCWAIT: PUSH PDP,TAC1 + 000214' 515100 020000 HRLZI TAC1,DCW + 000215' 254000 000201' JRST DVWAIT + INTERNAL DVWAIT + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 10 +RUNCSS MAC 24-APR-78 01:40 T. HASTINGS 8-16-65 + + + + + ,DEC 06 00 EX JOB L PT PRE 02 SETIOD + ,H.R. MORSE 64-12-26 + ,CALLING SEQUENCE + , PUSHJ PDP, SETIOD + , EXIT ALWAYS RETURNS HERE + ,SETS THEBIT (IOWS:=1) IN THE JOB STATUS WORD (JBTSTS) + ,INFORMING THE SYSTEM THAT AN I/O WAIT HAS BEEN COMPLETED + ,AND THE JOB IS READY TO RUN AGAIN. + ,MONITOR INTERFACE + , STORAGE: 6 + , SYMBOLS SET/USED: + , ACCUMULATORS: DEVDAT U TAC S/U + , PDP U TAC1 S/U + , DEVICE DATA BLOCK: DEVCHR U + , SYSTEM DATA STORAGE: JBTSTS S/U + , JOB STATUS WORD: IOWS S + INTERNAL SETIOD + + 000216' 350000 000171* SETIOD: AOS IOCOMP + 000217' 135040 000000* LDB TAC,PJOBN + 000220' 205100 400000 MOVSI TAC1, IOWS ;SET IO-WAIT SATISFIED BIT + 000221' 436101 000203* IORM TAC1, JBTSTS(TAC) + 000222' 205100 100000 MOVSI TAC1, JIOW ;CLEAR JOB IO-WAIT BIT + 000223' 412101 000221* ANDCAM TAC1, JBTSTS(TAC) + 000224' 336000 000202* SKIPN JOB ;IS NULL JOB RUNNING + 000225' 254000 000111' JRST STOP2 ;YES, FORCE CLOCK TO RE-SCHED + 000226' 263140 000000 POPJ PDP,; RETURN + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 11 +RUNCSS MAC 24-APR-78 01:40 T. HASTINGS 8-16-65 + + + + + ;SET CURRENT JOB AREA IN SYSTEM AREA + + INTERNAL SETUSR + + 000227' 541040 000000* SETUSR: HRRI TAC,USRLO1 + 000230' 505040 000000* HRLI TAC,USRLO + 000231' 402000 000230* SETZM USRLO + 000232' 251040 000000* BLT TAC,USRHI + 000233' 205040 000121* MOVSI TAC,MJOBPD + 000234' 541040 000122* HRRI TAC,JOBPDL + 000235' 202040 000000* MOVEM TAC,USRPDP + 000236' 200440 000000* MOVE JDAT,JOBDAT + 000237' 544051 000046* HLR TAC,JOBSA(JDAT) + 000240' 542051 000000* HRRM TAC,JOBFF(JDAT) + 000241' 263140 000000 POPJ PDP, + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 12 +RUNCSS MAC 24-APR-78 01:40 T. HASTINGS 8-16-65 + + + + ,DEC 06 00 EX COM L PT PRE 02 WAIT1,WSYNC + ,H.R. MORSE 64-12-26 + ,CALLING SEQUENCE + , PUSHJ PDP, WAIT1 + , EXIT ALWAYS RETURNS HERE + + ,IF THE DEVICE IS INACTIVE (IOACT=0), RETURNS TO EXIT. OTHERWISE, SET + ,IOW:=1 AND ENTERS WAIT UNLESS IOACT BECOMES ZERO BEFORE THE + ,JUMP IS MADE, IN WHICH CHASEIT SETS IOW:=0 AND RETURNS TO EXIT. + ,ON LEAVING THE WAIT STAT, RETURNS TO EXIT. + ,THIS ROUTINE PREVENTS THE STATE IOACT=0 AND IOW=1 FROM OCCURING + ,CALLING SEQUENCE + , PUSHJ PDP, WSYNC + , EXIT ALWAYS RETURNS HERE + ,SETS IOW:=1 AND ENTERS WAIT ROUTINE. RETURNS TO EXIT WHEN IOACT=0. + ,MONITOR INTERFACE + , STORAGE: 13 + , ROUTINES CALLED: WAIT + , SYMBOLS SET/USED: + , ACCUMULATORS: DEVDAT U PDP U + , IOS S/U TAC S/U + , DEVICE DATA BLOCK: DEVIOS S/U + , IO STATUS WORD: IOACT U + , IOW S/U + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 13 +RUNCSS MAC 24-APR-78 01:40 T. HASTINGS 8-16-65 + + + + INTERN WAIT1, WSYNC + + ; WAIT1 WAITS UNTIL DEVICE IS COMPLETELY INACTIVE BEFORE RETURNING + 000242' 200006 000002 WAIT1: MOVE IOS,DEVIOS(DEVDAT) + 000243' 606000 010000 TRNN IOS, IOACT ;IS DEVICE ACTIVE? (IOACT=1?) + 000244' 263140 000000 POPJ PDP,; RETURN + 000245' 260140 000247' PUSHJ PDP,WSYNC; WAIT + 000246' 254000 000242' JRST WAIT1 + + ;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE + ;IE UNTIL CURRENT BUFFER ACTIVITY IS COMPLETED + ;DEVDAT MUST BE SET UP + + 000200 PION=200 + 000400 PIOFF=400 + + WSYNC: REPEAT 0,< PUSH PDP, TAC ;MUST THESE BE SAVED? + PUSH PDP, TAC1 + PUSH PDP, DAT> + + 000247' 205000 000001 MOVSI IOS, IOW + 000250' 205640 100000 MOVSI AC1, JIOW + 000251' 200700 000224* MOVE AC2, JOB + 000252' 201740 010000 MOVEI AC3, IOACT + 000253' 700600 000400 CONO PI, PIOFF ;TURN PI OFF + 000254' 616746 000002 TDNN AC3, DEVIOS(DEVDAT) ;IS THE DEVICE ACTIVE? + 000255' 254000 000262' JRST WSYNC1 ;NO + 000256' 436006 000002 IORM IOS, DEVIOS(DEVDAT) ;YES, SET DEVICE IO-WAIT BIT + 000257' 436656 000223* IORM AC1, JBTSTS(AC2) ;AND JOB IO-WAIT BIT + 000260' 700600 000200 CONO PI, PION ;TURN PI ON + 000261' 260140 000111' PUSHJ PDP, STOP2 ;STOP THIS USER BY FORCING CL + ;RETURN WHEN IO-WAIT FINISHED + 000262' 700600 000200 WSYNC1: CONO PI, PION + 000263' 413006 000002 ANDCAB IOS, DEVIOS(DEVDAT) ;CLEAR DEVICE IO-WAIT BIT + REPEAT 0,< POP PDP, DAT + POP PDP, TAC1 + POP PDP, TAC> + + 000264' 263140 000000 POPJ PDP, + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000267 + +9K CORE USED + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 14 +RUNCSS MAC 24-APR-78 01:40 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APRCHL 000000 EXT +APRCHN 000000 EXT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CH1XIT 000021' EXT +CH2XIT 000022' EXT +CH3XIT 000023' EXT +CH4XIT 000024' EXT +CH5XIT 000025' EXT +CH6SAC 000000 EXT +CH6XIT 000026' EXT +CH7XIT 000027' EXT +CHNTAB 000020' +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CONT1 000151' INT +CONT2 000160' +CONT3 000164' +CONT4 000170' +CONTM 000135' INT +CONTU 000136' INT +CRLF 000032' EXT +D 000017 INT +DAT 000005 INT +DCAVAL 000157' EXT +DCL 000001 INT +DCREQ 000156' EXT +DCW 020000 INT +DCWAIT 000213' INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT + + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 14-1 +RUNCSS MAC 24-APR-78 01:40 SYMBOL TABLE + +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTAVAL 000163' EXT +DTREQ 000162' EXT +DTW 040000 INT +DTWAIT 000210' INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +DVWAIT 000201' INT +ENTRB 020000 INT +ESTOP 000034' INT +EXIT 000000' INT +EXMESS 000005' +HOLD 000030' INT +HOLDI 000012' INT +HOLDI1 000014' INT +HOLDSB 000032' +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCOMP 000216' EXT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 14-2 +RUNCSS MAC 24-APR-78 01:40 SYMBOL TABLE + +IOKILL 000007' EXT +IONRCK 000100 INT +IORDEL 000100 INT +IORELS 000037' EXT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000116' EXT +JBTSTS 000257' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000251' EXT +JOBAC 000000 EXT +JOBADR 000000 EXT +JOBCDP 000000 EXT +JOBDAC 000145' EXT +JOBDAT 000236' EXT +JOBDDT 000055' EXT +JOBDHI 000146' EXT +JOBFF 000240' EXT +JOBN 000000 EXT +JOBPC 000140' EXT +JOBPDL 000234' EXT +JOBPDP 000000 EXT +JOBREL 000000 EXT +JOBSA 000237' EXT +JOBSYM 000044' EXT +LDRBLT 000037' INT +LDRMES 000063' +LOOKB 040000 INT +MESPNT 000061' EXT +MJOBPD 000233' EXT +MONJOB 000115' INT +MTAVAL 000167' EXT +MTREQ 000166' EXT +MTW 010000 INT +MTWAIT 000177' INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PGADR 000002 +PI 000004 SPD + + RUNCSS - RUN CONTROL SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 14-3 +RUNCSS MAC 24-APR-78 01:40 SYMBOL TABLE + +PICHN 000100 INT +PICLK 000113' EXT +PIOFF 000400 +PION 000200 +PJOBN 000217' EXT +PROG 000007 INT +QUANT1 000172' EXT +RESET 000007' INT +RSCHED 000020' EXT +RUN 200000 INT +RUNABL 204000 INT +SCHEDF 000105' EXT +SETIOD 000216' INT +SETRUN 000152' INT +SETUSR 000227' INT +START1 000137' INT +START2 000147' +STARTM 000131' INT +STARTU 000133' INT +STOP0 000067' INT +STOP1 000070' INT +STOP2 000111' INT +STOPA 000104' +STOPU 000112' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYFNU 000057' EXT +TTYSET 000134' EXT +TTYSTR 000033' EXT +TTYURC 000136' EXT +TTYUSE 010000 INT +USRDDT 000000 EXT +USRHI 000232' EXT +USRLO 000231' EXT +USRLO1 000227' EXT +USRMOD 010000 INT +USRPDP 000235' EXT +USRREL 000050' EXT +UUO 000014 INT +UXIT 000011' EXT +WAIT1 000242' INT +WSYNC 000247' INT +WSYNC1 000262' + SSSSSSSSSSSS AAAAAAAAA VVV VVV GGGGGGGGGGGG EEEEEEEEEEEEEEE TTTTTTTTTTTTTTT + SSSSSSSSSSSS AAAAAAAAA VVV VVV GGGGGGGGGGGG EEEEEEEEEEEEEEE TTTTTTTTTTTTTTT + SSSSSSSSSSSS AAAAAAAAA VVV VVV GGGGGGGGGGGG EEEEEEEEEEEEEEE TTTTTTTTTTTTTTT +SSS AAA AAA VVV VVV GGG EEE TTT +SSS AAA AAA VVV VVV GGG EEE TTT +SSS AAA AAA VVV VVV GGG EEE TTT +SSS AAA AAA VVV VVV GGG EEE TTT +SSS AAA AAA VVV VVV GGG EEE TTT +SSS AAA AAA VVV VVV GGG EEE TTT + SSSSSSSSS AAA AAA VVV VVV GGG EEEEEEEEEEEE TTT + SSSSSSSSS AAA AAA VVV VVV GGG EEEEEEEEEEEE TTT + SSSSSSSSS AAA AAA VVV VVV GGG EEEEEEEEEEEE TTT + SSS AAAAAAAAAAAAAAA VVV VVV GGG GGGGGGGGG EEE TTT + SSS AAAAAAAAAAAAAAA VVV VVV GGG GGGGGGGGG EEE TTT + SSS AAAAAAAAAAAAAAA VVV VVV GGG GGGGGGGGG EEE TTT + SSS AAA AAA VVV VVV GGG GGG EEE TTT + SSS AAA AAA VVV VVV GGG GGG EEE TTT + SSS AAA AAA VVV VVV GGG GGG EEE TTT +SSSSSSSSSSSS AAA AAA VVV GGGGGGGGG EEEEEEEEEEEEEEE TTT +SSSSSSSSSSSS AAA AAA VVV GGGGGGGGG EEEEEEEEEEEEEEE TTT +SSSSSSSSSSSS AAA AAA VVV GGGGGGGGG EEEEEEEEEEEEEEE TTT + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :SAVGET.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:37 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1646 +File will be deleted after printing + +SAVGET- SAVE AND GET COMMANDS MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 T.HASTINGS 8-4-64 + + XLIST + LIST + + TITLE SAVGET- SAVE AND GET COMMANDS + SUBTTL T.HASTINGS 8-4-64 + ;ROUTINE TO SET UP SAVE-GET DEVICE FILE-NAME TABLE + ;CALLED BY COMMAND SETUP ROUTINES AND SAVE GET + + INTERNAL SGSET + EXTERNAL CTEXT1,SETUSR,HOLD,MONJOB + EXTERNAL CONMES,NOTENF,CPOPJ1 + + 000000' 261140 000002 SGSET: PUSH PDP, TAC1 ;SAVE STARTTING ADDRESS(SAVJOB OR GETJOB) + 000001' 260140 000000* PUSHJ PDP, CTEXT1 ;GET DEVICE NAME FROM COMMAND STRING + 000002' 322100 000012' JUMPE TAC1,SGSET1 + 000003' 202107 000017 MOVEM TAC1, 17(PROG) ;SAVE IN UUO AC AREA + 000004' 260140 000001* PUSHJ PDP, CTEXT1 ;GET FILE NAME FROM COMMAND STRING + 000005' 322100 000012' JUMPE TAC1,SGSET1 + 000006' 202107 000014 MOVEM TAC1, 14(PROG) + 000007' 262140 000002 POP PDP, TAC1 ;SCHEDULE MONITOR JOB + 000010' 260140 000000* PUSHJ PDP, MONJOB + 000011' 254000 000000* JRST CPOPJ1 ;SUPPRESS CR-LF PRINTED BY COMINI + + 000012' 262140 000002 SGSET1: POP PDP,TAC1 + 000013' 254000 000000* JRST NOTENF + + SAVGET- SAVE AND GET COMMANDS MACRO 10 05:51 24-APR-78 PAGE 2 +SAVGET MAC 24-APR-78 00:32 T.HASTINGS 8-4-64 + + + + ;THIS JOB SAVES A JOB AREA ON RETRIEVABLE STORAGE + ;THIS JOB RUNS IN EXEC. MODE AND CALLS IO ROUTINES DIRECTLY + ;NO ATTTEMPT IS MADE TO SAVE STATUS OF IO DEVICES, JOBPDP, OR ACS + ;IN FACT THE ONLY USEFUL THING WHICH MAY BE DONE WITH A JOB AREA + ;AFTER IT HAS BEEN SAVED IS TO START EXECUTION OVER AT THE STARTING + ;ADDRESS + + INTERNAL SAVJOB + EXTERNAL USRPDP, OUT, USRREL,JOBPFI,JOB41,JOBS41,THSDAT + + 000012 T=BUFPNT ;TEMPORARY ACS + 000013 T1=BUFWRD + + 000014' 265040 000076' SAVJOB: JSP TAC, SG1 ;SET UP ACS AND ASSIGN DEVICE + 000015' 200551 000000* MOVE T1,JOB41(JDAT) ;SAVE USR UUOI HANDLING JSR + 000016' 202551 000000* MOVEM T1,JOBS41(JDAT) + 000017' 200540 000000* MOVE T1,THSDAT ;SET DATE IN THIRD WORD + 000020' 202547 000016 MOVEM T1,16(PROG) + 000021' 260152 000004 PUSHJ PDP, DEN(T) ;ENTER FILE NAME IN DIRECTORY + 000022' 254000 000031' JRST SAV4 ;DIRECTORY FULL + 000023' 260140 000134' PUSHJ PDP, SETLST ;SET DUMP COMMAND LIST IN USER ARE + 000024' 260140 000000* PUSHJ PDP, OUT ;DO AN OUTPUT + 000025' 265040 000054' JSP TAC,SG2 + + 000026' 452370 220246 ASCIZ /JOB SAVED + 000027' 406550 542032 + 000030' 050000 000000 / + 000031' 265040 000054' SAV4: JSP TAC,SG2 + + 000032' 422232 242606 ASCIZ /DIRECTORY FULL + 000033' 522372 254500 + 000034' 432531 446032 + 000035' 050000 000000 / + + SAVGET- SAVE AND GET COMMANDS MACRO 10 05:51 24-APR-78 PAGE 3 +SAVGET MAC 24-APR-78 00:32 T.HASTINGS 8-4-64 + + + + + ;THIS JOB GETS A JOB AREA FROM RETRIEVABLE DEVICE + ;THIS JOB RUNS IN EXEC. MODE AND CALLS IO ROUTINES DIRECTLY + ;NO ATTEMPT IS MADE TO RESTORE STATUS OF IO DEVICES, PC, OR ACS + ;JOBPC IS SET TO STARTING ADDRESS OF JOB + ;CORE MUST ALREADY HAVE BEEN ASSIGNED AND THE FOLLOWING LOC. SETUP IN + ;JOB DATA AREA: + ;JOBPDP, JOBREL + + INTERNAL GETJOB + EXTERNAL USRREL, IN + + 000036' 265040 000076' GETJOB: JSP TAC, SG1 ;SETUP ACS AND ASSIGN DEVICE + 000037' 260152 000005 PUSHJ PDP, DLK(T) ;LOOKUP FILE NAME IN DIRECTORY + 000040' 254000 000047' JRST GET2 ;NOT FOUND + 000041' 260140 000134' PUSHJ PDP, SETLST ;SET DUMP COMMAND LIST IN USER ARE + 000042' 260140 000000* PUSHJ PDP, IN ;DO AN INPUT + 000043' 265040 000054' JSP TAC,SG2 + + 000044' 452370 220246 ASCIZ /JOB SETUP + 000045' 426512 550032 + 000046' 050000 000000 / + + 000047' 265040 000054' GET2: JSP TAC,SG2 + + 000050' 432231 442500 ASCIZ /FILE NOT FOUND + 000051' 472372 420214 + 000052' 476531 642032 + 000053' 050000 000000 / + + SAVGET- SAVE AND GET COMMANDS MACRO 10 05:51 24-APR-78 PAGE 4 +SAVGET MAC 24-APR-78 00:32 T.HASTINGS 8-4-64 + + + + ;ROUTINE TERMINATES SAVJOB AND GETJOB + ;CLOSE, RELEASE, CHECK FOR ERRORS AND PRINT MESSAGE AND STOP JOB + ;ADDRESS OF MESSAGE IN AC TAC + + EXTERNAL RELEA2, SETUSR, TTYFNU, WAIT1,JOBS41,JOB41 + + 740000 ERRORS=1B18+1B19+1B20+1B21 ;ERRORS CHECKED FOR IN IO TRANSMISSION + + 000054' 260140 000000* SG2: PUSHJ PDP, WAIT1 + 000055' 602000 740000 TRNE IOS, ERRORS ;ANY ERRORS? + 000056' 254000 000070' JRST SG2A ;AN ERROR + 000057' 261140 000001 PUSH PDP,TAC ;SAVE PRINT ADDRESS + 000060' 260140 000000* PUSHJ PDP,RELEA2 ;RELEASE DEVICE + 000061' 260140 000000* PUSHJ PDP,SETUSR ;SETUP COPY OF JOB AREA STORED IN SYSTE + 000062' 200051 000016* MOVE TAC,JOBS41(JDAT) + ;RESTORE USER LOCATION 41 + 000063' 202051 000015* MOVEM TAC,JOB41(JDAT) + 000064' 260140 000000* SG4: PUSHJ PDP,TTYFNU ;FIND TELETYPE + 000065' 262140 000001 POP PDP,TAC ;RESTORE PRINT MESSAGE ADDRESS + 000066' 260140 000000* SG5: PUSHJ PDP,CONMES + 000067' 254000 000000* JRST HOLD + + 000070' 265040 000064' SG2A: JSP TAC,SG4 + + 000071' 522450 147246 ASCIZ /TRANSMISSION ERROR + 000072' 466232 351622 + 000073' 476344 042644 + 000074' 512372 206424 / + 000075' 000000 000000 + + SAVGET- SAVE AND GET COMMANDS MACRO 10 05:51 24-APR-78 PAGE 5 +SAVGET MAC 24-APR-78 00:32 T.HASTINGS 8-4-64 + + + + ;ROUTINE CALED BY SAVJOB AND GETJOBTO SETUP ACS + ;AND ASSIGN DEVICE + ;CALL JSP TAC, SG1 + + EXTERNAL JOBDAT, JOB, UINIT1, WAIT1, JOBADR, RESET + + 000076' 505140 777763 SG1: HRLI PDP, -15 ;SET UP PD LIST IN UUO ACS + 000077' 541147 777777 HRRI PDP, -1(PROG) + 000100' 261140 000001 PUSH PDP, TAC ;SAVE RETURN ADDRESS + 000101' 260140 000000* PUSHJ PDP, RESET ;DO RESET UUO + 000102' 201600 000017 MOVEI UUO, D ;DUMP MODE + 000103' 200047 000017 MOVE TAC, 17(PROG) ;DEVICE NAME + 000104' 201340 000000 MOVEI PROG, 0 ;PRETEND RELOC. IS 0 + 000105' 260140 000000* PUSHJ PDP, UINIT1 ;ASSIGN DEVICE + 000106' 000000 000000 0 ;IBF,OBF + 000107' 254000 000124' JRST SGERRA ;NOT AVAILABLE + 000110' 200006 000002 MOVE IOS, DEVIOS(DEVDAT) ;SETUP IOS + 000111' 201600 000014 MOVEI UUO,14 ;REL.ADDRESS OF 4 WORD DIRECTORY ENTRY + 000112' 200340 000000* MOVE PROG, JOBADR ;RESTORE PROG + 000113' 205500 445560 MOVSI T,445560 ;SET FILE EXTENSION TO DMP + 000114' 202507 000015 MOVEM T, 15(PROG) + 000115' 402007 000016 SETZM 16(PROG) + 000116' 210540 000000* MOVN T1,USRREL ;SET NEG. WORD COUNT FROM JOBREL + 000117' 271540 000000* ADDI T1,JOBPFI ;DONT DUMP LOC. 0-JOBPFI + 000120' 505540 000117* HRLI T1,JOBPFI + 000121' 206547 000017 MOVSM T1,17(PROG) ;STORE IN 4TH WORD OF DICECTORY + 000122' 200506 000003 MOVE T, DEVSER(DEVDAT) ;SETUP FOR DOING ENTRY OF LOO + 000123' 263140 000000 POPJ PDP, + + 000124' 201040 000127' SGERRA: MOVEI TAC,SGNAVL + 000125' 261140 000001 PUSH PDP,TAC + 000126' 254000 000066' JRST SG5 + + 000127' 422132 644606 SGNAVL: ASCIZ /DEVICE NOT AVAILABLE + 000130' 425011 647650 + 000131' 202032 640622 + 000132' 462030 246212 + 000133' 064240 000000 / + + SAVGET- SAVE AND GET COMMANDS MACRO 10 05:51 24-APR-78 PAGE 6 +SAVGET MAC 24-APR-78 00:32 T.HASTINGS 8-4-64 + + + + + ;ROUTINE TO SET DUMP MODE COMMAND LIST IN USER AREA + + EXTERNAL ANYRDX,RELEA2,TTYFNU + + 000134' 200507 000017 SETLST: MOVE T, 17(PROG) ;4TH WORD FROM DIRECTORY + 000135' 202507 000016 MOVEM T, 16(PROG) + 000136' 402007 000017 SETZM 17(PROG) + 000137' 574500 000012 HLRE T, T + 000140' 270500 000116* ADD T, USRREL + 000141' 321500 000144' JUMPL T, NOROOM + 000142' 201600 000016 MOVEI UUO,16 ;DUMP MODE + 000143' 263140 000000 POPJ PDP, + + 000144' 260140 000060* NOROOM: PUSHJ PDP,RELEA2 + 000145' 260140 000064* PUSHJ PDP,TTYFNU + 000146' 255000 000000 JFCL + 000147' 574047 000016 HLRE TAC, 16(PROG) ;PRINT NO. OF BLOCKS NEEDED + 000150' 213000 000001 MOVNS TAC + 000151' 242040 777766 LSH TAC, -12 + 000152' 271040 000001 ADDI TAC, 1 + 000153' 201100 000012 MOVEI TAC1, 12 + 000154' 260140 000000* PUSHJ PDP, ANYRDX + 000155' 265040 000066' JSP TAC,SG5 + + 000156' 201431 320204 ASCIZ / 1K BLOCKS OF CORE NEEDED + 000157' 462370 345646 + 000160' 202370 620206 + 000161' 476450 520234 + 000162' 426130 442610 + 000163' 064240 000000 / + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000164 + +9K CORE USED + + SAVGET- SAVE AND GET COMMANDS MACRO 10 05:51 24-APR-78 PAGE 7 +SAVGET MAC 24-APR-78 00:32 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ANYRDX 000154' EXT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CONMES 000066' EXT +CPOPJ1 000011' EXT +CTEXT1 000004' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT + + + SAVGET- SAVE AND GET COMMANDS MACRO 10 05:51 24-APR-78 PAGE 7-1 +SAVGET MAC 24-APR-78 00:32 SYMBOL TABLE + +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERRORS 740000 +GET2 000047' +GETJOB 000036' INT +HOLD 000067' EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +IN 000042' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000000 EXT +JOB41 000063' EXT +JOBADR 000112' EXT +JOBDAT 000000 EXT +JOBPFI 000120' EXT +JOBS41 000062' EXT + + SAVGET- SAVE AND GET COMMANDS MACRO 10 05:51 24-APR-78 PAGE 7-2 +SAVGET MAC 24-APR-78 00:32 SYMBOL TABLE + +LOOKB 040000 INT +MONJOB 000010' EXT +MTW 010000 INT +NOROOM 000144' +NOTENF 000013' EXT +OBUFB 100000 INT +OUT 000024' EXT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PROG 000007 INT +RELEA2 000144' EXT +RESET 000101' EXT +RUN 200000 INT +RUNABL 204000 INT +SAV4 000031' +SAVJOB 000014' INT +SETLST 000134' +SETUSR 000061' EXT +SG1 000076' +SG2 000054' +SG2A 000070' +SG4 000064' +SG5 000066' +SGERRA 000124' +SGNAVL 000127' +SGSET 000000' INT +SGSET1 000012' +T 000012 +T1 000013 +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +THSDAT 000017' EXT +TTYATC 020000 INT +TTYFNU 000145' EXT +TTYUSE 010000 INT +UINIT1 000105' EXT +USRMOD 010000 INT +USRPDP 000000 EXT +USRREL 000140' EXT +UUO 000014 INT +WAIT1 000054' EXT + SSSSSSSSSSSS CCCCCCCCCCCC NNN NNN SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR + SSSSSSSSSSSS CCCCCCCCCCCC NNN NNN SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR + SSSSSSSSSSSS CCCCCCCCCCCC NNN NNN SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +SSS CCC NNN NNN SSS EEE RRR RRR +SSS CCC NNN NNN SSS EEE RRR RRR +SSS CCC NNN NNN SSS EEE RRR RRR +SSS CCC NNNNNN NNN SSS EEE RRR RRR +SSS CCC NNNNNN NNN SSS EEE RRR RRR +SSS CCC NNNNNN NNN SSS EEE RRR RRR + SSSSSSSSS CCC NNN NNN NNN SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR + SSSSSSSSS CCC NNN NNN NNN SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR + SSSSSSSSS CCC NNN NNN NNN SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR + SSS CCC NNN NNNNNN SSS EEE RRR RRR + SSS CCC NNN NNNNNN SSS EEE RRR RRR + SSS CCC NNN NNNNNN SSS EEE RRR RRR + SSS CCC NNN NNN SSS EEE RRR RRR + SSS CCC NNN NNN SSS EEE RRR RRR + SSS CCC NNN NNN SSS EEE RRR RRR +SSSSSSSSSSSS CCCCCCCCCCCC NNN NNN SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +SSSSSSSSSSSS CCCCCCCCCCCC NNN NNN SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +SSSSSSSSSSSS CCCCCCCCCCCC NNN NNN SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :SCNSER.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:37 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1637 +File will be deleted after printing + +SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 TOM EGGERS 8-9-65 + + XLIST + LIST + TITLE SCNSER - SCANNER SERVICE + SUBTTL TOM EGGERS 8-9-65 + EXTERN SETIOD, ADVBFE, ADVBFF, JBTADR, CLRBYT,STTYB1 + EXTERN SCNCHN, COMCNT, SCNSAV, SCNRET,STOP1, DEVLST,TTYTAB + INTERN SCNINI + + ;TTYPTR=DEVOAD+1 + ;TTYCTR=TTYPTR+1 + ;TTYBUF=TTYCTR+1 + 000200 PION=200 ;TURN PI ON BIT + 000400 PIOFF=400 ;TURN PI OFF BIT + ;SCNDDB ;NUMBER OF DEVICE DATA BLOCKS + ;STTYBF7 ;SIZE OF TELETYPE BUFFER + 000010 CHREC=TEM ;AC FOR CHARACTER + 000004 VPOS=ITEM ;VERITICAL POSITION OF TELETYPE + 000005 HPOS=VPOS+1 ; HORIZONTAL POS. + 000006 DDB=DEVDAT + 000002 LINE=TAC1 ;AC THAT HOLDS SCANNER LINE NUMBER + 040000 SYNC=40000 ;1 WHEN A BUFFER IS READY TO TRANSFER + 010000 DETH=10000 ;1 IF TTY DETACHED AND OUTPUT WAITING + 020000 NIO=20000 ;STOP ALL IO + 000010 TOUT=IO ;OUTPUT IN PROGRESS + 040000 NCERR=IOBKTL ;CHARACTER LOST ON TYPE IN + 000177 DCHAR=177 ;DELETE CHARACTER + 100000 ECHOF=IODTER ;ECHO FAILURE OCCURED + 001000 TPMON=1000 ;IO IS FROM MONITOR + 002000 SP=2000 ;SPECIAL TELETYPE CHAR. IS BEING INTERPRETED + 100000 DDTM=100000 ;DDT MODE + 004000 T35=4000 ;TELETYPE HAS TAB,FF,VT,ETC. MECHANISM + 000100 USRB=100 ;TURN OFF TPMON WHEN OUTPUT IS FINISHED + 020000 USRBC=20000 ;RT HALF MONITOR IOS WORD. REMAIN IN MONITOR MODE + INTERNAL SCNINT,CTYINT,TTYUSR,TTYURC + ENTRY TTYDSP + EXTERN TSCNLN,TCONLN,MTTYLN,CPOPJ1 + EXTERN CPOPJ + EXTERN FSNCHN,SCNCHL,OUT,PUUOAC,PJOBN,PUNIT,PIOMOD + INTERNAL DDTGT,DDTRL,DDTIN,DDTOUT,TTYFND,TTYSTR,TTYFNU + EXTERNAL WAIT1,WSYNC,CLRBYT,JOB,CLDS,CLEN,TTYBFE,TTYBM1 + EXTERNAL UXIT,ADRCK,TTYSAV,DEVPHY,DEVOPR + EXTERNAL TTYCTR,TTYPTR,TTYBUF,TTYLST,MLTTYL,SETRUN,STTYBF,TTY0DB + + 000000' 270706 000007 PHPOS: POINT 7,DEVIAD(DEVDAT),12 ;POINTER HORIZONTAL POSITION + 000001' 270506 000010 PVPOS: POINT 5,DEVOAD(DEVDAT),12 ;POINTER VERITICAL POSITION + 000002' 340706 000010 PLASTC: POINT 7,DEVOAD(DEVDAT),7 ;POINTER TO LAST CHARACTER OU + 000003' 360606 000007 PSCHAR: POINT 6,DEVIAD(DEVDAT),5 ;POINTER TO ^C OR ^O + + 000004' 321102 000000* TPCJOBN: POINT 9,TTYTAB(LINE),9 ;CONSOLE NUMBER FOR TTY + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 2 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + 000005' 201040 100000 SCNINI: MOVEI TAC,100000 + 000006' 712200 000000 CONO TTY,0 ;SHUT DOWN CONSOLE TTY + 000007' 730200 004010 CONO DCSA,4010 ;RELEASE XMITTER,RECEIVER + 000010' 730300 001000 CONSZ DCSA, 1000 + 000011' 730200 004000 CONO DCSA, 4000 + 000012' 730300 000010 CONSZ DCSA, 10 + 000013' 730440 000002 DATAI DCSB, TAC1 + 000014' 367040 000010' SOJG TAC,.-4 + 000015' 201040 000000* MOVEI TAC,SCNCHN + 000016' 712201 003600 CONO TTY,3600(TAC) ;CLEAR TTY, ASSIGN CHANNEL + 000017' 730200 000000* CONO DCSA,FSNCHN ;ASSIGN INTERRUPT CHANNELS + 000020' 205040 000000* MOVSI TAC,MLTTYL ;NO. OF TTY DEV. DATA BLOCKS + 000021' 205240 010000 MOVSI DAT,TTYUSE ;TTY DDB IN USE BIT + 000022' 205000 001004 MOVSI IOS,TPMON+IOFST ;VIRGIN STATUS + 000023' 201300 000000* MOVEI DDB,TTYLST ;FIRST TTY DDB ADDRESS + 000024' 616246 000004 SCN1: TDNN DAT,DEVMOD(DDB) ;IS THIS TTY DDB IN USE? + 000025' 402006 000000 SETZM DEVNAM(DDB) ;NO. SET NAME TO 0 + 000026' 202006 000002 MOVEM IOS,DEVIOS(DDB) + 000027' 402006 000000* SETZM TTYSAV(DDB) ;CLEAR USER MODE TTY STATUS WORD + 000030' 412246 000004 ANDCAM DAT,DEVMOD(DDB) ;CLEAR USE BIT + 000031' 554306 000003 HLRZ DDB,DEVSER(DDB) ;GET NEXT TTY DDB + 000032' 253040 000024' AOBJN TAC,SCN1 + 000033' 205040 000000* MOVSI TAC,MTTYLN ;SET DDB USE BITS FROM TRANSLATOR TABLE + 000034' 205100 010000 MOVSI TAC1,TTYUSE + 000035' 332301 000004* SCN2: SKIPE DDB,TTYTAB(TAC) + 000036' 436106 000004 IORM TAC1,DEVMOD(DDB) + 000037' 253040 000035' AOBJN TAC,SCN2 + 000040' 263140 000000 POPJ PDP, + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 3 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + ;ROUTINE TO RETURN TTY TO VIRGIN STATE + ;CALL: MOVE DDB, ADDRESS OF DEVICE DATA BLOCK + ; PUSHJ PDP,TTYKIL + + INTERNAL TTYKIL + + 000041' 200040 001142' TTYKIL: MOVE TAC,[XWD TTYUSE+TTYATC,ASSCON+ASSPRG] + 000042' 412046 000004 ANDCAM TAC,DEVMOD(DEVDAT) ;CLEAR DDB USE BIT + 000043' 402006 000000 SETZM DEVNAM(DEVDAT) ;CLEAR PHYSICAL NAME + 000044' 402006 000005 SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME + 000045' 254000 000052' JRST TTYDT1 + + ;ROUTINE TO DETACH TTY FROM JOB + ;CALL: MOVE DEVDAT,ADDRESS OF TTY DDB TO BE DETACHED + + INTERNAL TTYDET + + 000046' 200046 000004 TTYDET: MOVE TAC,DEVMOD(DEVDAT) + 000047' 627040 020000 TLZN TAC,TTYATC ;WAS TTY ATTACHED? + 000050' 254000 000041' JRST TTYKIL ;NO, SO RETURN DDB TO POOL + 000051' 202046 000004 MOVEM TAC,DEVMOD(DEVDAT) ;YES, JUST CLEAR ATTACH BIT + 000052' 135100 000000* TTYDT1: LDB LINE,PUNIT + 000053' 414002 000035* SETM TTYTAB(LINE) + 000054' 263140 000000 POPJ PDP, + + + 000055' 000000 000000 CCHAR: 0 ;HOLDS CHARACTER FOR CONSOLE TELETYPE + ;CONTROL C - GO BACK TO MONITOR + ;CONTROL 0 - SUPPRESS OUTPUT + + 000056' 334040 001143' TTYURC: SKIPA TAC,[XWD USRB,USRBC] ;START JOB BUT REMAIN IN MON1 + 000057' 205040 000100 TTYUSR: MOVSI TAC,USRB ;CAUSE TTY TO GO INTO + 000060' 436046 000002 IORM TAC,DEVIOS(DEVDAT) ;USER MODE WHEN + 000061' 263140 000000 POPJ PDP, ;OUTPUT FINISHES + + INTERNAL TTYSET + + 000062' 205040 000004 TTYSET: MOVSI TAC,IOFST ;INITIALIZE USER TTY IOS WORD + 000063' 202046 000027* MOVEM TAC,TTYSAV(DEVDAT) ;FOR START COMMAND + 000064' 254000 000057' JRST TTYUSR + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 4 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + + ;ROUTINE TO ATTACH TTY TO A JOB + ;CALL: MOVE DEVDAT,ADDRESS OF TTY DEVICE DATA BLOCK + ; MOVE ITEM,JOB NUMBER + ; PUSHJ PDP,TTYATT + ; ERROR ;DEVDAT=DDB ADR OF OTHER TTY + ;IF ANOTHER ALREADY IS ATTACHED. + ; OK RETURN ;DEVDAT, DAT AND TRANSLATOR TABLE SET + + INTERNAL TTYATT + + 000065' 135100 000052* TTYATT: LDB LINE,PUNIT ;LINE NO. OF THIS TTY + 000066' 201300 000023* MOVEI DEVDAT,TTYLST ;SEARCH FOR DDB THAT IS ATTACHED + 000067' 334000 000000 SKIPA + 000070' 554306 000003 TTYAT2: HLRZ DEVDAT,DEVSER(DEVDAT) + 000071' 322300 000115' JUMPE DEVDAT,TTYAT4 + 000072' 135040 000000* LDB TAC,PJOBN ;JOB NUMBER + 000073' 500046 000004 HLL TAC,DEVMOD(DEVDAT) ;ATTACH AND USE BITS + 000074' 607040 000010 TLNN TAC,DVTTY ;IS THIS STILL A TTY DDB? + 000075' 254000 000115' JRST TTYAT4 ;NO, THIS MUST BE IJOB + 000076' 306201 000000 CAIN ITEM,(TAC) ;JOB NUMBER THE ONE TO ATTACH? + 000077' 607040 010000 TLNN TAC,TTYUSE ;YES, IS IT THE DETACHED ONE? + 000100' 254000 000070' JRST TTYAT2 ;NO, KEEP LOOKING + 000101' 603040 020000 TLNE TAC,TTYATC ;IS SOME TTY ALREADY ATTACHED? + 000102' 263140 000000 POPJ PDP, ;YES, ERROR RETURN WITH DEVDAT SET + 000103' 261140 000006 PUSH PDP,DEVDAT ;SAVE NEW DDB ADDRESS + 000104' 200302 000053* MOVE DEVDAT,TTYTAB(LINE) + 000105' 200046 000004 MOVE TAC,DEVMOD(DEVDAT) + 000106' 260140 000046' PUSHJ PDP,TTYDET ;DETACH DDB FROM TTY + 000107' 262140 000006 POP PDP,DEVDAT + 000110' 137200 000004' TTYAT3: DPB ITEM,TPCJOBN ;STORE ATTACHED JOB NO. + 000111' 137200 000072* DPB ITEM,PJOBN ;SET JOB NUMBER + 000112' 205040 020000 MOVSI TAC,TTYATC ;SET ATTACHED BIT + 000113' 260140 000247' PUSHJ PDP,TTYDAT ;SETUP OUTPUT BYTE + 000114' 254000 000410' JRST SCNIN ;GO INITIALIZE DDB + + 000115' 200302 000104* TTYAT4: MOVE DEVDAT,TTYTAB(LINE) ;RESTORE OLD DDB ADDRESS + 000116' 254000 000110' JRST TTYAT3 + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 5 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + + ;ROUTINE TO SETUP AC DEVDAT TO ADDRESS OF TTY WHICH HAS TYPED A COMMA + ;AC DAT TO BYTE POINTER TO OUTPUT BUFFER FOR COMMAND MESSAGE + ;AC TAC TO BYTE POINTER TO COMMAND STRING + ;AC ITEM TO JOB NUNMBER TTY IS ATTACHED TO + ;CALL: PUSHJ PDP,TTYCOM + ; NONE FOUND + ; ACS SETUP + + INTERNAL TTYCOM + + 000117' 205100 000033* TTYCOM: MOVSI LINE,MTTYLN + 000120' 331002 000115* SKIPL TTYTAB(LINE) + 000121' 253100 000120' AOBJN LINE,.-1 + 000122' 327100 000000* JUMPG LINE,CPOPJ + 000123' 205300 400000 MOVSI DEVDAT,400000 + 000124' 413302 000120* ANDCAB DEVDAT,TTYTAB(LINE) + 000125' 205240 440700 MOVSI DAT,440700 + 000126' 271246 000000* ADDI DAT,TTYBUF(DEVDAT) + 000127' 200040 000005 MOVE TAC,DAT + + ;FALL INTO TTYJOB + + ;ROUTINE TO RETURN IN AC ITEM JOB NUMBER WHICH TTY IS ATTACHED TO + ;CALL: MOVE DEVDAT,ADDRESS OF TTY DEVICE DATA BLOCK + + INTERNAL TTYJOB + + 000130' 135100 000065* TTYJOB: LDB LINE, PUNIT + 000131' 135200 000004' LDB ITEM,TPCJOBN + 000132' 254000 000000* JRST CPOPJ1 + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 6 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + + ;TELETYPE SCANNER UUO ROUTINES + ;FOR DDT + + ;DDTGT WAITS FOR OUTPUT TO COMPLETE THEN PUTS + ;TELETYPE INTO DDT MODE + + 000133' 260140 000230' DDTGT: PUSHJ PDP,TTYSR1 ;FIND DEVICE DATA BLOCK + 000134' 200006 000002 MOVE IOS,DEVIOS(DEVDAT) + 000135' 607000 100000 TLNN IOS,DDTM + 000136' 607000 000020 TLNN IOS,IO ;OUTPUT IN PROGRESS + 000137' 254000 000141' JRST DDTGT2 ;NO + ; PUSHJ PDP,OUT ;MAKE SURE OUTPUT STARTED + 000140' 260140 000000* PUSHJ PDP,WAIT1 ;WAIT FOR OUTPUT TO FINISH + 000141' 661000 100000 DDTGT2: TLO IOS,DDTM ;SET DDT MODE BIT + 000142' 202006 000002 MOVEM IOS,DEVIOS(DEVDAT) + 000143' 254000 000000* JRST UXIT + + ;RELEASE TELETYPE FROM DDT MODE + ;MAKE SURE OUPUT IS FINISHED FIRST + + 000144' 260140 000230' DDTRL: PUSHJ PDP,TTYSR1 ;FIND DEVICE DATA BLOCK + 000145' 200006 000002 MOVE IOS,DEVIOS(DEVDAT) + 000146' 603000 000020 TLNE IOS,IO ;OUTPUT IN PROGRESS? + 000147' 260140 000140* PUSHJ PDP,WAIT1 ;YES, WAIT + 000150' 205000 140000 MOVSI IOS,DDTM+SYNC + 000151' 412006 000002 ANDCAM IOS,DEVIOS(DEVDAT) ;TURN OFF DDT BIT + 000152' 254000 000143* JRST UXIT + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 7 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + + ;INPUT TO DDT + ;CALL AC,[SIXBIT /DDTIN/] AC CONTAINS POINTER TO BUFFER AREA + ;BUFFER AREA MUST BE 21 WORDS LONG + + 000153' 260140 000230' DDTIN: PUSHJ PDP,TTYSR1 ;SET UP DEVDAT + 000154' 200006 000002 MOVE IOS,DEVIOS(DEVDAT) + 000155' 603000 000020 TLNE IOS,IO ;OUTPUT IN PROGRESS + 000156' 260140 000147* PUSHJ PDP,WAIT1 ;YES, WAIT + 000157' 200006 000002 DDTIN2: MOVE IOS,DEVIOS(DEVDAT) + 000160' 603000 000040 TLNE IOS,IOEND ;BUFFER ALREADY? + 000161' 254000 000166' JRST DDTIN3 ;YES + 000162' 201000 010000 MOVEI IOS,IOACT + 000163' 436006 000002 IORM IOS,DEVIOS(DDB) + 000164' 260140 000000* PUSHJ PDP,WSYNC ;NO, WAIT + 000165' 254000 000157' JRST DDTIN2 + + 000166' 205040 120004 DDTIN3: MOVSI TAC,NIO+IOFST+DDTM + 000167' 436046 000002 IORM TAC,DEVIOS(DEVDAT) ;STOP ALL IO + 000170' 200046 000000* MOVE TAC,TTYPTR(DEVDAT) + 000171' 260140 000000* PUSHJ PDP,CLRBYT ;CLEAR OUT REMAINING BYTES + 000172' 275046 000000* SUBI TAC,TTYBM1(DEVDAT) ;NUMBER OF WORDS + 000173' 135100 000000* LDB TAC1,PUUOAC ;PICK UP AC NUMBER + 000174' 271107 000000 ADDI TAC1,(PROG) ;FIND REAL ADDRESS + 000175' 200102 000000 MOVE TAC1,(TAC1) ;PICK UP POINTER + 000176' 271107 000000 ADDI TAC1,(PROG) ;FIND REAL ADDRESS OF BUFFER + 000177' 505106 000126* HRLI TAC1,TTYBUF(DEVDAT) + 000200' 271042 000000 ADDI TAC,(TAC1) + 000201' 251101 000000 BLT TAC1,(TAC) ;TRANSFER MONITOR BUFFER TO U + 000202' 402001 000001 CLEARM 1(TAC) ;MAKE SURE THERE ARE SOME NUL + 000203' 205040 020040 MOVSI TAC,NIO+IOEND + 000204' 412046 000002 ANDCAM TAC,DEVIOS(DEVDAT) + 000205' 254000 000152* JRST UXIT + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 8 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + + ;OUTPUT FROM DDT + ;CALL AC,[SIXBIT /DDTOUT/] AC HAS POINTER TO DDT OUTPUT BUFFER + + 000206' 260140 000230' DDTOUT: PUSHJ PDP,TTYSR1 + 000207' 200006 000002 MOVE IOS,DEVIOS(DEVDAT) + 000210' 603000 000020 TLNE IOS,IO ;OUTPUT IN PROGRESS? + 000211' 260140 000156* PUSHJ PDP,WAIT1 ;YES, WAIT + 000212' 200000 001144' MOVE IOS,[XWD NIO+TOUT+DDTM,IOACT] + 000213' 437006 000002 IORB IOS,DEVIOS(DEVDAT) + 000214' 135040 000173* LDB TAC,PUUOAC ;PICK UP AC NUMBER + 000215' 505040 000011 HRLI TAC,JDAT ;CALC REAL ADDRESS OF AC + 000216' 540060 000001 HRR TAC,@TAC ;PICK UP AC + 000217' 505060 000001 HRLI TAC,@TAC ;CALC REAL ADDRESS OF DDT BUF + 000220' 541046 000177* HRRI TAC,TTYBUF(DEVDAT) + 000221' 552046 000000* HRRZM TAC,TTYCTR(DDB) ;A SUITABLY LARGE NUMBER + 000222' 200100 000001 MOVE TAC1,TAC + 000223' 251042 000020 BLT TAC,20(TAC1) ;MOVE DDT BUFFER TO MONITOR + hrli tac1,440700 + + 000224' 202106 000170* MOVEM TAC1,TTYPTR(DEVDAT) + 000225' 621000 000004 TLZ IOS,IOS+IOFST + 000226' 260140 000302' PUSHJ PDP,TTYOU0 + 000227' 254000 000205* JRST UXIT + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 9 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + + + 000230' 200200 000000* TTYSR1: MOVE ITEM,JOB + 000231' 205100 000117* TTYSRC: MOVSI LINE,MTTYLN + 000232' 550302 000124* HRRZ DEVDAT,TTYTAB(LINE) + 000233' 322300 000237' JUMPE DEVDAT,TTYF0 + 000234' 135040 000004' LDB TAC,TPCJOBN + 000235' 306044 000000 CAIN TAC,(ITEM) + 000236' 263140 000000 POPJ PDP, ;FOUND + 000237' 253100 000232' TTYF0: AOBJN LINE,TTYSRC+1 + 000240' 205040 576062 MOVSI TAC,576062 ;SIXBIT /OPR/ + 000241' 254000 000000* JRST DEVPHY ;SEARCH PHYSICAL DEVICE NAMES + ;AND RETURN OPERATOR TTY. + + ;ROUTINE TO FIND A TTY FOR A JOB + ;CALL: MOVE ITEM,JOB NUMBER + ; PUSHJ PDP, TTYFND + ; ERROR RETURN + ; RETURN WITH DEVDAT SET TO ADR OF DDB + ; AND DAT SET TO BYTE POINTER TO MONITOR OUTPUT BUFFER + + 000242' 200200 000230* TTYFNU: MOVE ITEM,JOB + 000243' 260140 000231' TTYFND: PUSHJ PDP,TTYSRC ;CALLED BY PUSHJ PDP,TTYFND + 000244' 260140 000164* ; PUSHJ PDP,WSYNC + 000245' 205040 020000 MOVSI TAC,NIO ;JOB NUMBER IN TAC1 + 000246' 436046 000002 IORM TAC,DEVIOS(DEVDAT) + 000247' 201246 000220* TTYDAT: MOVEI DAT,TTYBUF(DEVDAT) ;SETUP OUTPUT BYTE POINTER + 000250' 505240 440700 HRLI DAT,440700 + 000251' 263140 000000 POPJ PDP, + + 000252' 200040 000005 TTYSTR: MOVE TAC,DAT + 000253' 260140 000171* PUSHJ PDP,CLRBYT + 000254' 275046 000172* SUBI TAC,TTYBM1(DEVDAT) + 000255' 405040 777777 ANDI TAC,-1 + 000256' 221040 000005 IMULI TAC,5 + 000257' 202046 000221* MOVEM TAC,TTYCTR(DEVDAT) + 000260' 201046 000247* MOVEI TAC,TTYBUF(DEVDAT) + 000261' 505040 440700 HRLI TAC,440700 + 000262' 202046 000224* MOVEM TAC,TTYPTR(DEVDAT) + 000263' 200006 000002 MOVE IOS,DEVIOS(DEVDAT) + 000264' 434000 001145' IOR IOS,[XWD NIO+IOFST,IODTER+IOBKTL] + andcm ios,[xwd nio+iofst,iodter+iobktl] + 000265' 260140 000767' PUSHJ PDP,GCHAR + 000266' 263140 000000 POPJ PDP, ;NOTHING TO TYPE + 000267' 254000 000310' JRST TTYOU2 ;START OUTPUT + + ;DISPATCH TABLE; + + 000270' 263140 000000 TTYDSP: POPJ PDP, ;RELEASE + 000271' 254000 000000* JRST OUT ;CLOSE + 000272' 254000 000300' JRST TTYOUT + 000273' 630000 001146' TDZ IOS,[XWD TPMON,ECHOF+NCERR] ;INPUT + 000274' 660000 010000 TRO IOS,IOACT + 000275' 623000 000002 TLZE IOS, IOBEG + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 9-1 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + 000276' 661000 000004 TLO IOS, IOFST + 000277' 254000 001131' JRST MIS1 + + 000300' 670000 001147' TTYOUT: TDO IOS,[XWD TOUT+IOFST,IOACT] + 000301' 630000 001146' TDZ IOS,[XWD TPMON,ECHOF+NCERR] + 000302' 135240 000000' TTYOU0: LDB HPOS,PHPOS + 000303' 135200 000001' LDB VPOS,PVPOS + 000304' 260140 000767' PUSHJ PDP, GCHAR + 000305' 263140 000000 POPJ PDP, + 000306' 137240 000000' DPB HPOS,PHPOS + 000307' 137200 000001' DPB VPOS,PVPOS + 000310' 135100 000130* TTYOU2: LDB LINE,PUNIT + 000311' 700200 000000* CONO CLDS ;DISABLE CLOCK + 000312' 306100 000000* CAIN LINE,TCONLN + 000313' 254000 000324' JRST CTYOUT + 000314' 730200 000000 CONO DCSA,0 ;DISABLE SCANNER + 000315' 730602 000000 CONO DCSB, (LINE) + 000316' 730140 000010 DATAO DCSA, CHREC + 000317' 730200 000017* CONO DCSA,FSNCHN + 000320' 137400 000002' DPB CHREC,PLASTC + 000321' 700200 000000* TTYOU1: CONO CLEN ;RE-ENABLE CLOCK + 000322' 202006 000002 MOVEM IOS,DEVIOS(DEVDAT) + 000323' 263140 000000 POPJ PDP, + + 000324' 712200 000000 CTYOUT: CONO TTY,0 ;DISABLE TTY + 000325' 712140 000010 DATAO TTY,CHREC + 000326' 202400 000055' MOVEM CHREC,CCHAR + 000327' 712200 000015* CONO TTY,SCNCHN ;RE-ENABLE + 000330' 254000 000300' JRST TTYOUT1 + + 000331' 712340 000050 CTYINT: CONSO TTY,50 + 000332' 254000 000332' JRST . + 000333' 712340 000040 CONSO TTY,40 + 000334' 254000 000346' JRST CTYOU1 + 000335' 202040 000055' MOVEM TAC, CCHAR ;DONT ECHO RUBOUT + 000336' 712040 000001 DATAI TTY, TAC + 000337' 405040 000177 ANDI TAC, 177 + 000340' 306040 000177 CAIN TAC, 177 + 000341' 254000 000345' JRST CTYRUB ;IS A RUBOUT + 000342' 712140 000001 DATAO TTY, TAC ;NOT, SO ECHO + 000343' 250040 000055' EXCH TAC, CCHAR + 000344' 254520 000000* JRST 12,@SCNCHL ;DISMISS INTERRUP + + 000345' 250040 000055' CTYRUB: EXCH TAC, CCHAR + 000346' 264000 000000* CTYOU1: JSR SCNSAV + 000347' 201400 000327* MOVEI CHREC,SCNCHN + 000350' 712210 000200 CONO TTY,200(CHREC) + 000351' 200400 000055' MOVE CHREC,CCHAR + 000352' 201100 000312* MOVEI LINE,TCONLN + 000353' 254000 000363' JRST TCOMM + + 000354' 730340 001010 SCNINT: CONSO DCSA,1010 + 000355' 254000 000355' JRST . + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 9-2 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + 000356' 264000 000346* JSR SCNSAV + 000357' 730340 000010 CONSO DCSA,10 ;RECEIVER FLAG? + 000360' 254000 000437' JRST SCNIN1 ;NO,XMITTER FLAG + 000361' 730640 000002 CONI DCSB, LINE + 000362' 730440 000010 DATAI DCSB, CHREC + 000363' 405400 000177 TCOMM: ANDI CHREC, 177 + 000364' 303100 000352* CAILE LINE,TCONLN ;CTY LINE OR LESS + 000365' 254000 000447' JRST TYPX ;NO + 000366' 332302 000232* SKIPE DDB,TTYTAB(LINE) ;DATA BLOCK ASSIGNED? + 000367' 254000 000461' JRST INUSE ;YES + 000370' 260140 000377' PUSHJ PDP,DDBSRC ;SEARCH FOR FREE TTY DEV. DATA BLOCK + 000371' 254000 000447' JRST TYPX ;NONE FOUND, TYPE X + 000372' 403240 000004 CLEARB HPOS,VPOS ;ASSUME TTY IS AT BEGIN OF FORM + 000373' 730300 000700 CONSZ DCSA,700 ;FULL DUPLEX? + 000374' 306100 000364* CAIN LINE,TCONLN ;CTY? + 000375' 254000 000574' JRST INJEST ;NO, SWALLOW CHAR + 000376' 254000 000510' JRST TYP1 + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 10 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + + ;ROUTINE TO SEARCH FOR FREE TTY DEV DATA BLOCK + ;CALL: MOVE LINE,TTY LINE NO + ; PUSHJ PDP,DDBSRC + ; NONE FOUND + ; RETURN DEVDAT, LINE SET + + 000377' 205000 000020* DDBSRC: MOVSI IOS,MLTTYL ;NO. OF TTY DDB + 000400' 201300 000066* MOVEI DEVDAT,TTYLST ;ADDRESS OF FIRST DDB + 000401' 334040 001142' SKIPA TAC,[XWD TTYUSE+TTYATC,ASSPRG+ASSCON] + 000402' 554306 000003 HLRZ DEVDAT,DEVSER(DEVDAT) + 000403' 612046 000004 TDNE TAC,DEVMOD(DEVDAT) ;USE.ATTACH, AND BOTH ASSIGN + 000404' 253000 000402' AOBJN IOS,.-2 + 000405' 325000 000122* JUMPGE IOS,CPOPJ ;DDB FOUND? + 000406' 200000 001150' MOVE IOS,[XWD TPMON+IOFST,IOACT] + 000407' 200040 001151' MOVE TAC,[XWD TTYUSE,ASSCON] + + ;INITIALIZE TTY DEVICE DATA BLOCK(CALLED FROM TTYATT TOO) + + 000410' 436046 000004 SCNIN: IORM TAC,DEVMOD(DEVDAT) + 000411' 137100 000310* DPB LINE,PUNIT ;SET LINE NO. IN DDB + 000412' 205040 064647 MOVSI TAC,646471 ;SIXBIT /TTY/ + 000413' 202046 000000 MOVEM TAC,DEVNAM(DEVDAT) + 000414' 200040 001152' MOVE TAC,[POINT 6,DEVNAM(DEVDAT),17] + 000415' 261140 000002 PUSH PDP,LINE ;SAVE LINE NO. + 000416' 606100 000070 TRNN LINE,70 ;IS THERE A HIGH ORDER OCTAL DIGIT? + 000417' 254000 000424' JRST SCNIN0 ;NO + 000420' 241100 777775 ROT LINE,-3 ;YES,CONVERT TO SIXBIT + 000421' 271100 000020 ADDI LINE,20 + 000422' 136100 000001 IDPB LINE,TAC ;STORE HIGH ORDER SIXBIT DIGIT + 000423' 242100 000020 LSH LINE,20 ;IN PHYSICAL NAME + 000424' 271100 000020 SCNIN0: ADDI LINE,20 + 000425' 136100 000001 IDPB LINE,TAC ;STORE LOW ORDER DIGIT + 000426' 262140 000002 POP PDP,LINE + + 000427' 542302 000366* HRRM DEVDAT,TTYTAB(LINE) ;SET LINE NO. IN TRANSLATOR T + 000430' 205040 436471 MOVSI TAC,436471 ;SIXBIT /CTY/ + 000431' 306100 000374* CAIN LINE,TCONLN ;IS THIS CONSOLE TTY? + 000432' 202046 000000 MOVEM TAC,DEVNAM(DEVDAT) ;YES, SET NAME TO CTY + 000433' 200046 000000 MOVE TAC,DEVNAM(DEVDAT) + 000434' 336000 000000* SKIPN DEVOPR ;IS THIS FIRST CHAR. TYPED BY ANYONE? + 000435' 202040 000434* MOVEM TAC,DEVOPR ;YES,SET THIS TTY AS OPERATOR TTY + 000436' 254000 000132* JRST CPOPJ1 ;SUCCESSFUL RETURN + + 000437' 730040 000002 SCNIN1: DATAI DCSA,LINE ;GET LINE NO. FROM FULL DUPLEX + 000440' 201040 000317* MOVEI TAC,FSNCHN + 000441' 730201 004000 CONO DCSA,4000(TAC) ;RELEASE XMITTER SCANNER + 000442' 332302 000427* SKIPE DDB,TTYTAB(LINE) ;DATA BLOCK ASSIGNED? + 000443' 301100 000431* CAIL LINE,TCONLN ;LINE NO. TOO LARGE? + 000444' 254000 000000* JRST SCNRET ;GO AWAY + 000445' 135400 000002' LDB CHREC,PLASTC + 000446' 254000 000470' JRST INUS1 + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 11 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + + 000447' 306400 000130 TYPX: CAIN CHREC,"X" ;CHARACTER RECEIVED AN X? + 000450' 254000 000444* JRST SCNRET ;YES, GO AWAY + 000451' 201400 000130 MOVEI CHREC,"X" + 000452' 302100 000443* CAIE LINE,TCONLN + 000453' 254000 000456' JRST TYPX1 + 000454' 712140 000010 DATAO TTY,CHREC + 000455' 254000 000450* JRST SCNRET + 000456' 730742 000000 TYPX1: CONSO DCSB,(LINE) + 000457' 730140 000010 DATAO DCSA,CHREC ;TYPE AN X + 000460' 254000 000455* JRST SCNRET + + 000461' 730300 000700 INUSE: CONSZ DCSA,700 ;FULL DUPLEX? + 000462' 306100 000452* CAIN LINE,TCONLN + 000463' 254000 000470' JRST INUS1 + 000464' 730602 000000 CONO DCSB,(LINE) + 000465' 730140 000010 DATAO DCSA,CHREC + 000466' 137400 000002' DPB CHREC,PLASTC + 000467' 254000 000460* JRST SCNRET + + 000470' 200006 000002 INUS1: MOVE IOS,DEVIOS(DDB) + 000471' 135340 000111* LDB PROG,PJOBN + 000472' 550347 000000* HRRZ PROG,JBTADR(PROG) + 000473' 135240 000000' LDB HPOS,PHPOS + 000474' 135200 000001' LDB VPOS,PVPOS + 000475' 135046 000262* LDB TAC, TTYPTR(DDB) + 000476' 603000 002000 TLNE IOS, SP + 000477' 254000 000532' JRST SIM35 + 000500' 607000 000010 INUS2: TLNN IOS,TOUT + 000501' 254000 000574' JRST INJEST + 000502' 312040 000010 CAME TAC, CHREC + 000503' 254000 000526' JRST ECHO + 000504' 260140 000767' INUS3: PUSHJ PDP, GCHAR + 000505' 254000 000517' JRST LEAV0 + 000506' 306100 000462* TYPE: CAIN LINE,TCONLN + 000507' 254000 000523' JRST CTSER3 + 000510' 730602 000000 TYP1: CONO DCSB,(LINE) + 000511' 730140 000010 DATAO DCSA, CHREC + 000512' 137400 000002' DPB CHREC,PLASTC ;SAVE CHARACTER FOR FULL DUPLEX + 000513' 202006 000002 LEAVE: MOVEM IOS, DEVIOS(DDB) + 000514' 137240 000000' LEAV1: DPB HPOS,PHPOS + 000515' 137200 000001' DPB VPOS,PVPOS + 000516' 254000 000467* JRST SCNRET + 000517' 202046 000004 LEAV0: MOVEM TAC,DEVMOD(DEVDAT) ;IS TTY ATTCHED? + 000520' 607040 020000 TLNN TAC,TTYATC + 000521' 260140 000041' PUSHJ PDP,TTYKIL ;NO,RETURN TO POOL + 000522' 254000 000514' JRST LEAV1 + + 000523' 712140 000010 CTSER3: DATAO TTY,CHREC + 000524' 202400 000055' MOVEM CHREC,CCHAR + 000525' 254000 000513' JRST LEAVE + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 12 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + + 000526' 670000 001153' ECHO: TDO IOS,[XWD SP,ECHOF] + 000527' 621000 000010 TLZ IOS,TOUT + 000530' 201400 000177 MOVEI CHREC,177 ;SEND A RUBOUT AFTER ECHO CHE + 000531' 254000 000506' JRST TYPE + + 000532' 205040 777766 SIM35: MOVSI TAC,-SCTABL + 000533' 200241 000544' MOVE HPOS, SCTAB(TAC) + 000534' 302405 000000 CAIE CHREC,(HPOS) + 000535' 253040 000533' AOBJN TAC, .-2 + 000536' 135240 000000' LDB HPOS,PHPOS + 000537' 325040 000526' JUMPGE TAC, ECHO + 000540' 204041 000544' MOVS TAC, SCTAB(TAC) + 000541' 603040 000140 TLNE TAC, 140 ;SPACING CHARACTER + 000542' 344241 000000 AOJA HPOS,(TAC) ;YES + 000543' 254001 000000 JRST (TAC) ;NO + + 000544' 000556' 000040 SCTAB: XWD SPACE," " + 000545' 000564' 000012 XWD SIMLF,12 + 000546' 000571' 000177 XWD SIMRO,177 ;RUBOUT + 000547' 000571' 000134 XWD SIMRO,134 ;BACK SLASH + 000550' 000733' 000015 XWD ASC3,15 ;CR + 000551' 000561' 000136 XWD SIMVA,"^" + 000552' 000764' 000103 XWD DELET1,"C" + 000553' 000764' 000117 XWD DELET1,"O" + 000554' 000565' 000132 XWD SIM4,"Z" + 000555' 000764' 000125 XWD DELET1,"U" + 000012 SCTABL=.-SCTAB + + 000556' 606240 000007 SPACE: TRNN HPOS,7 ;FINISHED SIMULATING TABS(8) + 000557' 254000 000565' JRST SIM4 ;YES + 000560' 254000 000506' JRST TYPE ;NO, SEND ANOTHER SPACE + + 000561' 135400 000003' SIMVA: LDB CHREC,PSCHAR + 000562' 660400 000100 TRO CHREC, 100 + 000563' 254000 000506' JRST TYPE + + 000564' 367200 000506' SIMLF: SOJG VPOS,TYPE ;SEND ANOTHER LINE-FEED + 000565' 621000 002000 SIM4: TLZ IOS,SP + 000566' 607000 000010 TLNN IOS,TOUT + 000567' 254000 000626' JRST INJ4 + 000570' 254000 000504' JRST INUS3 + + 000571' 625000 002000 SIMRO: TLZA IOS, SP + 000572' 640000 004000 MOD35: TRC IOS,T35 + 000573' 254000 000513' JRST LEAVE + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 13 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + + 000574' 306400 000003 INJEST: CAIN CHREC,3 ;CONTROL C? + 000575' 254000 000642' JRST INJ5 + 000576' 623000 000004 TLZE IOS,IOFST ;IF FIRST CHARACTER IN, INITIALIZE + 000577' 260140 000630' PUSHJ PDP,SETMB1 + 000600' 603000 100000 TLNE IOS,DDTM ;1 DDT CHAR RESTARTS PROGRAM + 000601' 661000 040040 TLO IOS,SYNC+IOEND ;YES, TERMINATE BUFFER + 000602' 306400 000017 CAIN CHREC,17 ;COTNROL O? + 000603' 254000 000655' JRST INJ6 ;YES, FLUSH OUTPUT + 000604' 622000 100000 TRZE IOS,ECHOF ;ECHO HAS OCCURRED? + 000605' 254000 000675' JRST INJ7 ;YES, NOW RESUME OUTPUT + 000606' 602000 040000 TRNE IOS,NCERR + 000607' 254000 000513' JRST LEAVE + 000610' 302400 000033 CAIE CHREC,033 ;NEW NEW ALT-MODE? + 000611' 306400 000176 CAIN CHREC,176 ;NEW ALT-MODE? + 000612' 201400 000175 MOVEI CHREC,175 ;CHANGE TO OLD + 000613' 306400 000020 CAIN CHREC,20 ;CONTROL P TAB SIMULATION FLIP FLOP SWI + 000614' 254000 000572' JRST MOD35 + 000615' 603000 100000 TLNE IOS,DDTM + 000616' 254000 000620' JRST INJ25 ;SENT RUBOUTS ON TO DDT + 000617' 306400 000177 CAIN CHREC,177 ;RUBOUT + jrst delet + 000620' 136406 000475* INJ25: DPBI CHREC, TTYPTR(DDB) + 000621' 370046 000257* SOS TAC, TTYCTR(DDB) + 000622' 301400 000040 CAIL CHREC, 40 + 000623' 303400 000137 CAILE CHREC, 137 + 000624' 254000 000677' JRST SPCIN + 000625' 271240 000001 ADDI HPOS,1 + 000626' 260140 001062' INJ4: PUSHJ PDP, MOVBUF + 000627' 254000 000513' JRST LEAVE + + 000630' 541046 000260* SETMB1: HRRI TAC, TTYBUF(DDB) + 000631' 505040 440700 HRLI TAC, 440700 + 000632' 202046 000620* MOVEM TAC, TTYPTR(DDB) + 000633' 507000 000001 HRLS TAC + 000634' 350000 000001 AOS TAC + 000635' 402006 000630* SETZM TTYBUF(DDB) + 000636' 251046 000000* BLT TAC,TTYBFE(DDB) ;CLEAR OUT MONITOR BUFFER + 000637' 201040 000111 MOVEI TAC, 111 + 000640' 202046 000621* MOVEM TAC, TTYCTR(DDB) + 000641' 263140 000000 POPJ PDP, + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 14 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + + 000642' 260140 000630' INJ5: PUSHJ PDP,SETMB1 + 000643' 261140 000004 PUSH PDP,ITEM ;^C + 000644' 135200 000004' LDB ITEM,TPCJOBN ;YES, GET USER CONSOLE NUMBER + 000645' 332000 000004 SKIPE ITEM + 000646' 260140 000000* PUSHJ PDP,STOP1 ;SHUT OFF JOB + 000647' 262140 000004 POP PDP,ITEM + 000650' 607000 001000 TLNN IOS,TPMON ;SAVE STATUS OF TTY + 000651' 202006 000063* MOVEM IOS,TTYSAV(DDB) ;WHEN IT WAS IN USER MODE + 000652' 200000 001150' MOVE IOS,[XWD TPMON+IOFST,IOACT] + 000653' 201040 000103 MOVEI TAC,"C" + 000654' 254000 000672' JRST INJ61 + + 000655' 261140 000002 INJ6: PUSH PDP,TAC1 ;^O + 000656' 623000 000001 TLZE IOS,IOW + 000657' 260140 000000* PUSHJ PDP,SETIOD + 000660' 262140 000002 POP PDP,TAC1 + 000661' 603000 101000 TLNE IOS,TPMON+DDTM + 000662' 254000 000665' JRST INJ6A + 000663' 603000 000010 TLNE IOS,TOUT + 000664' 260140 000000* PUSHJ PDP,ADVBFE + 000665' 665000 000004 INJ6A: TLOA IOS,IOFST + 000666' 254000 000664' JRST .-2 + 000667' 620000 100000 TRZ IOS,ECHOF + 000670' 660000 020000 TRO IOS,IODEND + 000671' 201040 000060 MOVEI TAC,"0" + 000672' 137040 000003' INJ61: DPB TAC,PSCHAR + 000673' 201400 000136 MOVEI CHREC,"^" + 000674' 254000 000743' JRST SPC21 + + 000675' 661000 000010 INJ7: TLO IOS,TOUT + 000676' 254000 000504' JRST INUS3 + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 15 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + + 000677' 205040 777770 SPCIN: MOVSI TAC,-SCITL ;SEARCH FOR SPECIAL INPUT CHAR + 000700' 200101 000707' MOVE TAC1,SCITAB(TAC) + 000701' 302402 000000 CAIE CHREC,(TAC1) ;FOUND? + 000702' 253040 000700' AOBJN TAC,.-2 ;NO + 000703' 544040 000002 HLR TAC,TAC1 ;SAVE DISPATCH ADDRESS + 000704' 135100 000411* LDB LINE,PUNIT ;RESTORE TAC1 + 000705' 321041 000000 JUMPL TAC,(TAC) + 000706' 254000 000626' JRST INJ4 ;CHARACTER NOT FOUND + + 000707' 000717' 000015 SCITAB: XWD SPCCR,15 ;CR + 000710' 000725' 000012 XWD ASC1,12 ;LF + 000711' 000740' 000011 XWD SPC2,11 ;HORIZ TAB + 000712' 000722' 000013 XWD SPVT,13 ;VT + 000713' 000721' 000014 XWD SPFF,14 ;FF + 000714' 000735' 000025 XWD SPC4A,25 ;^U + 000715' 000745' 000032 XWD SPC7,32 ;^Z + 000716' 000725' 000175 XWD ASC1, 175 ;ALT MODE + 000010 SCITL=.-SCITAB + + 000717' 201240 000000 SPCCR: MOVEI HPOS,0 + 000720' 254000 000733' JRST ASC3 + + 000721' 334200 001154' SPFF: SKIPA VPOS,[10] + 000722' 201200 000004 SPVT: MOVEI VPOS,4 + 000723' 607000 004000 TLNN IOS,T35 ;DONT SIMULATE FOR A MOD 35 + 000724' 661000 002000 TLO IOS,SP + 000725' 135040 000000* ASC1: LDB TAC,PIOMOD + 000726' 607000 001000 TLNN IOS,TPMON + 000727' 306040 000001 CAIN TAC,AL + 000730' 661000 040000 TLO IOS,SYNC + 000731' 607000 002000 ASC2: TLNN IOS,SP + 000732' 254000 000626' JRST INJ4 + 000733' 201400 000012 ASC3: MOVEI CHREC,12 ;LINE FEED + 000734' 254000 000506' JRST TYPE + + 000735' 260140 000630' SPC4A: PUSHJ PDP,SETMB1 + 000736' 201040 000125 MOVEI TAC,"U" + 000737' 254000 000672' JRST INJ61 + + 000740' 602000 004000 SPC2: TRNE IOS,T35 + 000741' 254000 000513' JRST LEAVE + 000742' 201400 000040 MOVEI CHREC," " + 000743' 661000 002000 SPC21: TLO IOS,SP + 000744' 254000 000506' JRST TYPE + + 000745' 661000 042040 SPC7: TLO IOS,SYNC+IOEND+SP ;^Z + 000746' 201040 000132 MOVEI TAC,"Z" + 000747' 254000 000672' JRST INJ61 ;ECHO ^Z + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 16 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + + 000750' 200046 000640* DELET: MOVE TAC,TTYCTR(DDB) + 000751' 301040 000111 CAIL TAC,111 + 000752' 254000 000764' JRST DELET1 + + 000753' 205040 070000 MOVSI TAC,070000 + 000754' 270046 000632* ADD TAC,TTYPTR(DDB) + 000755' 603040 400000 TLNE TAC,400000 + 000756' 270040 001155' ADD TAC,[XWD 347777,-1] + 000757' 202046 000754* MOVEM TAC,TTYPTR(DDB) + 000760' 350006 000750* AOS TTYCTR(DDB) + + 000761' 201400 000334 MOVEI CHREC,334 ;BACK SLASH + 000762' 661000 002000 DELET2: TLO IOS,SP + 000763' 254000 000506' JRST TYPE + + 000764' 201200 000001 DELET1: MOVEI VPOS,1 + 000765' 201400 000015 MOVEI CHREC,15 + 000766' 254000 000762' JRST DELET2 + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 17 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + + ;ROUTINE TO GET NEXT CHARACTER FROM OUTPUT BUFFER + ;CALL: PUSHJ PDP,GCHAR + ; NO MORE LEFT + ; RETURN WITH CHAR. IN CHREC + + 000767' 627000 000004 GCHAR: TLZN IOS, IOFST + 000770' 254000 000777' JRST GCHAR3 + 000771' 550046 000010 GCHAR1: HRRZ TAC,DEVOAD(DDB) + 000772' 270040 001156' ADD TAC, [XWD 000700+PROG,1] + 000773' 202046 000757* MOVEM TAC, TTYPTR(DDB) + 000774' 550060 000001 HRRZ TAC, @TAC + 000775' 221040 000005 IMULI TAC, 5 + 000776' 202046 000760* MOVEM TAC,TTYCTR(DDB) + 000777' 375006 000776* GCHAR3: SOSGE TTYCTR(DDB) + 001000' 254000 001023' JRST GCHAR5 + 001001' 134406 000773* LDBI CHREC, TTYPTR(DDB) + 001002' 322400 001021' JUMPE CHREC, GCHAR7 + 001003' 306400 000011 CAIN CHREC, 11 + 001004' 254000 001050' JRST HT + 001005' 306400 000012 CAIN CHREC, 12 + 001006' 344200 001015' AOJA VPOS,GCH3 + 001007' 302400 000013 CAIE CHREC, 13 + 001010' 306400 000014 CAIN CHREC, 14 + 001011' 254000 001055' JRST VTFF + 001012' 271240 000001 ADDI HPOS,1 + 001013' 306400 000015 CAIN CHREC,15 + 001014' 201240 000000 MOVEI HPOS,0 + 001015' 354003 000000 GCH3: AOSA (PDP) + 001016' 200006 000651* GCH3A: MOVE IOS,TTYSAV(DDB) ;RESTORE STATUS TO USER + 001017' 202006 000002 GCHAR4: MOVEM IOS,DEVIOS(DDB) + 001020' 263140 000000 POPJ PDP, + + 001021' 607000 100000 GCHAR7: TLNN IOS,DDTM ;DDT BUFFER TERMINATED WITH NULL + 001022' 254000 000777' JRST GCHAR3 + 001023' 261140 000002 GCHAR5: PUSH PDP,TAC1 + 001024' 623000 000001 TLZE IOS, IOW + 001025' 260140 000657* PUSHJ PDP, SETIOD + 001026' 262140 000002 POP PDP,TAC1 + 001027' 607000 101000 TLNN IOS,TPMON+DDTM + 001030' 260140 000664* PUSHJ PDP, ADVBFE + 001031' 665000 000004 TLOA IOS,IOFST + 001032' 254000 000771' JRST GCHAR1 + 001033' 630000 001157' TDZ IOS,[XWD IO,IOACT] + 001034' 627000 000100 TLZN IOS,USRB + 001035' 254000 001017' JRST GCHAR4 + 001036' 621000 001000 TLZ IOS,TPMON + 001037' 135100 000704* LDB LINE,PUNIT ;GET LINE NO. + 001040' 261140 000004 PUSH PDP,ITEM + 001041' 135200 000004' LDB ITEM,TPCJOB + 001042' 260140 000000* PUSHJ PDP,SETRUN + 001043' 262140 000004 POP PDP,ITEM + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 17-1 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + 001044' 626000 020000 TRZN IOS,USRBC + 001045' 254000 001016' JRST GCH3A + 001046' 205000 001004 MOVSI IOS,TPMON+IOFST + 001047' 254000 001017' JRST GCHAR4 + 001050' 602000 004000 HT: TRNE IOS,T35 + 001051' 344240 001015' AOJA HPOS,GCH3 + 001052' 661000 002000 TLO IOS,SP + 001053' 201400 000240 SPOUT: MOVEI CHREC,240 + 001054' 254000 001015' JRST GCH3 + + 001055' 602000 004000 VTFF: TRNE IOS,T35 + 001056' 344200 001015' AOJA VPOS,GCH3 + 001057' 201400 000012 MOVEI CHREC,12 + 001060' 661000 002000 TLO IOS,SP + 001061' 254000 001015' JRST GCH3 + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 18 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + + 001062' 603000 100000 MOVBUF: TLNE IOS,DDTM + 001063' 254000 001123' JRST MOV3 ;DONT ADVANCE BUFFERS FOR DDT MODE + 001064' 627000 040000 TLZN IOS,SYNC + 001065' 337006 000777* SKIPG TTYCTR(DDB) + 001066' 254000 001070' JRST .+2 + 001067' 254000 001131' JRST MIS1 + 001070' 603000 001000 TLNE IOS, TPMON + 001071' 254000 001133' JRST MOVMON + 001072' 200046 000007 MOVE TAC,DEVIAD(DDB) ;IS TTY EXPECTING INPUT? + 001073' 602040 777777 TRNE TAC,-1 + 001074' 335020 000001 SKIPGE @TAC ;OR IS NEXT BUFFER READY? + 001075' 254000 001130' JRST MIS ;NO + 001076' 261140 000002 PUSH PDP,TAC1 + 001077' 200046 001001* MOVE TAC,TTYPTR(DDB) + 001100' 260140 000253* PUSHJ PDP,CLRBYT + 001101' 200046 000007 MOVE TAC,DEVIAD(DDB) + 001102' 260140 000000* PUSHJ PDP,ADRCK ;MAKE SURE BUFFER WILL FIT + 001103' 551041 000000* HRRZI TAC,STTYB1(TAC) ;LENGTH+1 + + 001104' 201066 000007 MOVEI TAC,@DEVIAD(DDB) + 001105' 271040 000002 ADDI TAC,2 + 001106' 540400 000001 HRR CHREC,TAC + 001107' 271040 000000* ADDI TAC,STTYBF + 001110' 505406 000635* HRLI CHREC,TTYBUF(DDB) + 001111' 251401 777777 BLT CHREC,-1 (TAC) + + 001112' 201040 000111 MOVEI TAC,111 + 001113' 274046 001065* SUB TAC, TTYCTR(DDB) + 001114' 271040 000004 ADDI TAC,4 + 001115' 231040 000005 IDIVI TAC,5 + 001116' 201426 000007 MOVEI CHREC,@DEVIAD(DDB) + 001117' 202050 000001 MOVEM TAC,1(CHREC) + 001120' 260140 000000* PUSHJ PDP, ADVBFF + 001121' 254000 001122' JRST .+1 + 001122' 665000 000004 TLOA IOS,IOFST + 001123' 261140 000002 MOV3: PUSH PDP,TAC1 + 001124' 623000 000001 TLZE IOS, IOW + 001125' 260140 001025* PUSHJ PDP, SETIOD + 001126' 262140 000002 POP PDP,TAC1 + 001127' 624000 050000 TRZA IOS,NCERR+IOACT + 001130' 660000 040000 MIS: TRO IOS, NCERR + 001131' 202006 000002 MIS1: MOVEM IOS, DEVIOS(DDB) + 001132' 263140 000000 POPJ PDP, + 001133' 205040 400000 MOVMON: MOVSI TAC,400000 + 001134' 436042 000442* IORM TAC,TTYTAB(LINE) ;SET BIT FOR MONITOR + 001135' 661000 000004 TLO IOS,IOFST + 001136' 201040 000015 MOVEI TAC,15 + 001137' 137046 001077* DPB TAC,TTYPTR(DDB) ;FORCE A CARRIAGE RET INTO MONITOR COMM + 001140' 350000 000000* AOS COMCNT + 001141' 263140 000000 POPJ PDP, + + END, + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 18-2 +SCNSER MAC 24-APR-78 03:04 TOM EGGERS 8-9-65 + + +NO ERRORS DETECTED + +PROGRAM BREAK IS 001160 + +9K CORE USED + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 19 +SCNSER MAC 24-APR-78 03:04 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADRCK 001102' EXT +ADVBFE 001030' EXT +ADVBFF 001120' EXT +AL 000001 INT +ASC1 000725' +ASC2 000731' +ASC3 000733' +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CCHAR 000055' +CHREC 000010 +CLDS 000311' EXT +CLEN 000321' EXT +CLOSB 002000 INT +CLRBYT 001100' EXT +CLSIN 000002 INT +CLSOUT 000001 INT +COMCNT 001140' EXT +CPOPJ 000405' EXT +CPOPJ1 000436' EXT +CTSER3 000523' +CTYINT 000331' INT +CTYOU1 000346' +CTYOUT 000324' +CTYRUB 000345' +D 000017 INT +DAT 000005 INT +DCHAR 000177 +DCL 000001 INT +DCSA 000300 SPD +DCSB 000304 SPD +DCW 020000 INT +DDB 000006 +DDBSRC 000377' +DDI 000007 INT +DDO 000006 INT +DDTGT 000133' INT +DDTGT2 000141' +DDTIN 000153' INT +DDTIN2 000157' +DDTIN3 000166' +DDTM 100000 +DDTMEM 000037 INT +DDTOUT 000206' INT +DDTRL 000144' INT + + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 19-1 +SCNSER MAC 24-APR-78 03:04 SYMBOL TABLE + +DDTSYM 000036 INT +DELET 000750' +DELET1 000764' +DELET2 000762' +DEN 000004 INT +DETH 010000 +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVLST 000000 EXT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVOPR 000435' EXT +DEVPHY 000241' EXT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ECHO 000526' +ECHOF 100000 +ENTRB 020000 INT +FSNCHN 000440' EXT +GCH3 001015' +GCH3A 001016' +GCHAR 000767' +GCHAR1 000771' +GCHAR3 000777' +GCHAR4 001017' +GCHAR5 001023' +GCHAR7 001021' +HPOS 000005 + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 19-2 +SCNSER MAC 24-APR-78 03:04 SYMBOL TABLE + +HT 001050' +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INJ25 000620' +INJ4 000626' +INJ5 000642' +INJ6 000655' +INJ61 000672' +INJ6A 000665' +INJ7 000675' +INJEST 000574' +INPB 010000 INT +INUS1 000470' +INUS2 000500' +INUS3 000504' +INUSE 000461' +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000472' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000242' EXT +LEAV0 000517' +LEAV1 000514' + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 19-3 +SCNSER MAC 24-APR-78 03:04 SYMBOL TABLE + +LEAVE 000513' +LINE 000002 +LOOKB 040000 INT +MIS 001130' +MIS1 001131' +MLTTYL 000377' EXT +MOD35 000572' +MOV3 001123' +MOVBUF 001062' +MOVMON 001133' +MTTYLN 000231' EXT +MTW 010000 INT +NCERR 040000 +NIO 020000 +OBUFB 100000 INT +OUT 000271' EXT +OUTPB 004000 INT +PDP 000003 INT +PHPOS 000000' +PICHN 000100 INT +PIOFF 000400 +PIOMOD 000725' EXT +PION 000200 +PJOBN 000471' EXT +PLASTC 000002' +PROG 000007 INT +PSCHAR 000003' +PUNIT 001037' EXT +PUUOAC 000214' EXT +PVPOS 000001' +RUN 200000 INT +RUNABL 204000 INT +SCITAB 000707' +SCITL 000010 +SCN1 000024' +SCN2 000035' +SCNCHL 000344' EXT +SCNCHN 000347' EXT +SCNIN 000410' +SCNIN0 000424' +SCNIN1 000437' +SCNINI 000005' INT +SCNINT 000354' INT +SCNRET 000516' EXT +SCNSAV 000356' EXT +SCTAB 000544' +SCTABL 000012 +SETIOD 001125' EXT +SETMB1 000630' +SETRUN 001042' EXT +SIM35 000532' +SIM4 000565' +SIMLF 000564' + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 19-4 +SCNSER MAC 24-APR-78 03:04 SYMBOL TABLE + +SIMRO 000571' +SIMVA 000561' +SP 002000 +SPACE 000556' +SPC2 000740' +SPC21 000743' +SPC4A 000735' +SPC7 000745' +SPCCR 000717' +SPCIN 000677' +SPFF 000721' +SPOUT 001053' +SPVT 000722' +STOP1 000646' EXT +STTYB1 001103' EXT +STTYBF 001107' EXT +SYNC 040000 +T35 004000 +TAC 000001 INT +TAC1 000002 INT +TCOMM 000363' +TCONLN 000506' EXT +TEM 000010 INT +TOUT 000010 +TPCJOB 000004' +TPMON 001000 +TSCNLN 000000 EXT +TTY 000120 SPD +TTY0DB 000000 EXT +TTYAT2 000070' +TTYAT3 000110' +TTYAT4 000115' +TTYATC 020000 INT +TTYATT 000065' INT +TTYBFE 000636' EXT +TTYBM1 000254' EXT +TTYBUF 001110' EXT +TTYCOM 000117' INT +TTYCTR 001113' EXT +TTYDAT 000247' +TTYDET 000046' INT +TTYDSP 000270' ENT +TTYDT1 000052' +TTYF0 000237' +TTYFND 000243' INT +TTYFNU 000242' INT +TTYJOB 000130' INT +TTYKIL 000041' INT +TTYLST 000400' EXT +TTYOU0 000302' +TTYOU1 000321' +TTYOU2 000310' +TTYOUT 000300' + + SCNSER - SCANNER SERVICE MACRO 10 05:51 24-APR-78 PAGE 19-5 +SCNSER MAC 24-APR-78 03:04 SYMBOL TABLE + +TTYPTR 001137' EXT +TTYSAV 001016' EXT +TTYSET 000062' INT +TTYSR1 000230' +TTYSRC 000231' +TTYSTR 000252' INT +TTYTAB 001134' EXT +TTYURC 000056' INT +TTYUSE 010000 INT +TTYUSR 000057' INT +TYP1 000510' +TYPE 000506' +TYPX 000447' +TYPX1 000456' +USRB 000100 +USRBC 020000 +USRMOD 010000 INT +UUO 000014 INT +UXIT 000227' EXT +VPOS 000004 +VTFF 001055' + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS CCCCCCCCCCCC OOOOOOOOO NNN NNN + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS CCCCCCCCCCCC OOOOOOOOO NNN NNN + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS CCCCCCCCCCCC OOOOOOOOO NNN NNN +SSS YYY YYY SSS CCC OOO OOO NNN NNN +SSS YYY YYY SSS CCC OOO OOO NNN NNN +SSS YYY YYY SSS CCC OOO OOO NNN NNN +SSS YYY YYY SSS CCC OOO OOO NNNNNN NNN +SSS YYY YYY SSS CCC OOO OOO NNNNNN NNN +SSS YYY YYY SSS CCC OOO OOO NNNNNN NNN + SSSSSSSSS YYY SSSSSSSSS CCC OOO OOO NNN NNN NNN + SSSSSSSSS YYY SSSSSSSSS CCC OOO OOO NNN NNN NNN + SSSSSSSSS YYY SSSSSSSSS CCC OOO OOO NNN NNN NNN + SSS YYY SSS CCC OOO OOO NNN NNNNNN + SSS YYY SSS CCC OOO OOO NNN NNNNNN + SSS YYY SSS CCC OOO OOO NNN NNNNNN + SSS YYY SSS CCC OOO OOO NNN NNN + SSS YYY SSS CCC OOO OOO NNN NNN + SSS YYY SSS CCC OOO OOO NNN NNN +SSSSSSSSSSSS YYY SSSSSSSSSSSS CCCCCCCCCCCC OOOOOOOOO NNN NNN +SSSSSSSSSSSS YYY SSSSSSSSSSSS CCCCCCCCCCCC OOOOOOOOO NNN NNN +SSSSSSSSSSSS YYY SSSSSSSSSSSS CCCCCCCCCCCC OOOOOOOOO NNN NNN + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :SYSCON.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:37 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1609 +File will be deleted after printing + +SYSCON - UUO HANDLER MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 8-9-65 + + XLIST + LIST + TITLE SYSCON - UUO HANDLER + SUBTTL 8-9-65 + EXTERNAL CLOSE1,ILLINS,IN,JOBAC,JOBADR,JOBDAT + EXTERNAL MTAPE1,OUT,RELEA1,UINBF,UINIT,UOUTBF + EXTERNAL USRJDA,USRSAV,USTATO,USTATS,USTATZ + EXTERNAL ERROR,UUOERR,CLDS,CLEN + EXTERNAL IOIERR,MJOBPD,JOBPDL,WAIT1,USRREL,PUUOAC + EXTERNAL JOBPDL,MJOBPD,USETST + + SYSCON - UUO HANDLER MACRO 10 05:51 24-APR-78 PAGE 2 +SYSCON MAC 24-APR-78 03:48 8-9-65 + + + + + , DEC 06 00 EX UUO L PT PRE 06 UUO HANDLER + , 3/10/65 + , ALL UUOS DROP THEMSELVE IN REAL LOCATION 40, AND TRAP + , TO 41. THE UUO HANDLER SHUFFLES THE UUO OFF TO THE USERS + , 40,41, IF IT IS NOT A SYSTEM UUO. + , SYSTEM UUOS FALL INTO THREE CLASSES, HANDLED DIFFERENTLY + , (1) SYSTEM FUNCTIONS: LOAD ACS PDP, PROG, AND DISPATCH TO THE + , FUNCTION. + , (2) DEVICE INDEPENDENT I/O UUO: ALSO LOAD ACS DEVDAT AND IOS + , AND GO THE THE SYSTEM FUNCTION. + , (3) DEVICE DEPENDENT I/O UUOS: DO (1) AND (2), THEN DISPATCH + , THROUGH THE TABLE WHOSE ADDRESS IS IN THE RIGHT HALF OF DEVSER(DEVD + , CONTROL MAY ALWAYS BE RETURNED BY EXECUTING A + , JRST UXIT + , WHICH WILL RESTORE THE ACS, ARP BITS, AND RETURN. + , THE UUO HANDLER IS PURE IF THE FOLLOWING RESTRICTIONS ARE OBSERVED. + , RESTRICTIONS: UUOS CANNOT BE CALLED BY INTERRUPT SERVICE ROUTINES. + , MONITOR INTERFACE + , STORAGE: 89 + , ROUTINES CALLED: ILLINS, ADRCK, EXCLK, UUOH, SETIOS,UUOUSR + , UUOS CALLED: CALL, INIT, RELEAS, CLOSE, OUTBUF, INBUF + , STATS, STATO, STATZ, OUTPUT, INPUT + , DEVICE DEPENDENT: DEN, DLK, DSO, DSI, DGF + , SYMBOLS SET/USED: + , ACCUMULATORS: POP S/U TAC S/U + , PROG S/U TAC1 S/U + , SUB S + , SYSTEM PARAMETERS: UIO U + , USYS U + , USYSN U + , JOB AREA: JOBAC U JOBDAT U + , JOBPDP U + , SYSTEM ADDRESSES: CLK S/U + , JOBADR U + , USRLEV S/U + , DEVICE DATA BLOCK: DEVSER U + , INTERNAL ADDRESSES: 40 S/U + , UUO0 S/U + , UUSAV S/U + + SYSCON - UUO HANDLER MACRO 10 05:51 24-APR-78 PAGE 3 +SYSCON MAC 24-APR-78 03:48 8-9-65 + + + + + INTERNAL UUO0 + + 000000' 000000 000000 UUO0: 0 + 000001' 250040 000040 EXCH TAC,40 ;SAVE TAC; PICK UP UUO + 000002' 202740 000000* MOVEM 17,USRSAV ;SAVE 17 + 000003' 603040 077000 TLNE TAC,77000 ;0 UUO IS ILLEGAL + 000004' 603040 740000 TLNE TAC,740000 ;UUO FOR SYSTEM? + 000005' 254000 000030' JRST UUOSYS ;YES + 000006' 200740 000000* MOVE 17,JOBADR ;GET JOB AREA ADDRESS + 000007' 202057 000040 MOVEM TAC,40(17) ;STORE UUO IN USERS 40 + 000010' 550057 000041 HRRZ TAC,41(17) ;PICK UP ADR OF USERS JSR + 000011' 322040 000030' JUMPE TAC,UUOSYS ;IF ADDRESS=0,ILLEGAL USER UU + 000012' 500040 000000' HLL TAC,UUO0 ;PICK UP PROCESSOR FLAGS FOR + 000013' 607040 010000 TLNN TAC,USRMOD ;WAS UUO FROM USER? + 000014' 254000 000030' JRST UUOSYS ;NO, ILLEGAL NUUO FROM SYSTEM + 000015' 201741 000000 MOVEI 17,(TAC) ;17 NOW HAS REL. ADR. OF USER + 000016' 317740 000000* CAMG 17,USRREL ;DONT INCREMENT RETURN IF PC + 000017' 541041 000001 HRRI TAC,1(TAC) ;INCREMENT PC + 000020' 250040 000000' EXCH TAC,UUO0 ;SET UP RETURN TO USER, PICK + ;UP USERS FLAGS,PC + 000021' 313740 000016* CAMLE 17,USRREL ;LEGAL MEMORY? + 000022' 254000 000025' JRST .+3 ;NO. DONT STORE PC + 000023' 270740 000006* ADD 17,JOBADR ;MAKE REL. ADR. INTO ABS. ADR + 000024' 202057 000000 MOVEM TAC,(17) ;STORE FLAGS AND PC LIKE JSR + 000025' 200040 000040 MOVE TAC,40 ;RESTORE TAC + 000026' 200740 000002* MOVE 17,USRSAV ;RESTORE 17 + 000027' 254120 000000' JRST 2,@UUO0 ;RETURN TO USER + + SYSCON - UUO HANDLER MACRO 10 05:51 24-APR-78 PAGE 4 +SYSCON MAC 24-APR-78 03:48 8-9-65 + + + + + 000030' 250040 000040 UUOSYS: EXCH TAC,40 ;RESTORE TA. RESTORE THE UUO + 000031' 200740 000000' MOVE 17,UUO0 ;PICK UP PROCESSOR FLAG + 000032' 607740 010000 TLNN 17,USRMOD ;SYSTEM UUO FROM SYSTEM? + 000033' 254000 000046' JRST UUOSY1 ;YES + 000034' 200740 000023* MOVE 17,JOBADR ;NO. PICK UP ADR. OF USER PRO + 000035' 202717 000016 MOVEM 16,16(17) ;STORE AC16 IN USER 16 + 000036' 550700 000017 HRRZ 16,17 ;SET UP BLP POINTER + 000037' 251717 000015 BLT 16,15(17) ;MOVE REAL ACS TO USER AREA + 000040' 200000 000026* MOVE 0,USRSAV ;MOVE USER 17 TO USERS AREA + 000041' 202017 000017 MOVEM 0,17(17) + + 000042' 200440 000000* MOVE JDAT,JOBDAT ;LOAD UP JOB DAT AREA ADDRES + 000043' 205140 000000* MOVSI PDP,MJOBPD ;LOAD UP PUSH DOWN AC AND + 000044' 541151 000000* HRRI PDP,JOBPDL(JDAT) ;MAKE ABSOLUTE PATH + 000045' 334340 000017 SKIPA PROG,17 ;PROGRAM BASE ADDRESS + 000046' 200740 000040* UUOSY1: MOVE 17,USRSAV ;RESTORE AC17 IF UUO FROM SYS + 000047' 261140 000000' PUSH PDP,UUO0 ;SAVE RETURN ON PUSH DOWN LIS + 000050' 200600 000040 MOVE UUO,40 ;GET THE UUO INTO AC(UUO) + 000051' 135100 000250' LDB TAC1,[POINT 9,UUO,8] ;PICK UP UUO OP COD + 000052' 301100 000100 CAIL TAC1,100 ;ILLEGAL INSTRUCTION? + 000053' 254000 000000* JRST ILLINS ;YES + 000054' 305100 000040 CAIGE TAC1,40 ;SYSTEM UUO? + 000055' 254000 000000* JRST UUOERR ;NO. ILLEGAL + 000056' 135040 000000* LDB TAC,PUUOAC + 000057' 200301 000000* MOVE DEVDAT,USRJDA(TAC) ;GET DDB + 000060' 305100 000060 CAIGE TAC1,100-UUOT2L ;AN IO UUO? + 000061' 254000 000070' JRST UUODSP ;NO + 000062' 302100 000070 CAIE TAC1,70 ;CLOSE AND RELEASE ARE ALWAYS LEGAL + 000063' 306100 000071 CAIN TAC1,71 + 000064' 322300 000236' JUMPE DEVDAT,UXIT + 000065' 322300 000000* JUMPE DEVDAT,IOIERR ;CHANNEL MUST BE ASSIGNED + 000066' 200006 000002 MOVE IOS,DEVIOS(DEVDAT) ;GET DATA BLOCK STA + 000067' 254002 000015' JRST UUOT2-77+UUOT2L-1(TAC1) ;DISPATCH + + 000070' 305100 000042 UUODSP: CAIGE TAC1,40+UUOT1L ;LEGAL SYSTEM UUO? + 000071' 254002 000033' JRST UUOT1-40(TAC1) ;YES. DISPATCH + 000072' 254000 000055* JRST UUOERR + + SYSCON - UUO HANDLER MACRO 10 05:51 24-APR-78 PAGE 5 +SYSCON MAC 24-APR-78 03:48 8-9-65 + + + + 000073' 254000 000162' UUOT1: JRST UCALL ;40 + 000074' 254000 000000* JRST UINIT + ;ADD NON IO UUOS HERE + + 000002 UUOT1L=.-UUOT1 + + 000075' UUOT2: + ;ADD IO UUOS HERE + 000075' 254000 000000* JRST USETST + 000076' 254000 000000* JRST USTATO + 000077' 254000 000000* JRST USTATS + 000100' 254000 000000* JRST USTATZ + 000101' 254000 000000* JRST UINBF + 000102' 254000 000000* JRST UOUTBF + 000103' 254000 000000* JRST IN + 000104' 254000 000000* JRST OUT + 000105' 254000 000000* JRST CLOSE1 + 000106' 254000 000000* JRST RELEA1 + 000107' 254000 000000* JRST MTAPE1 + 000110' 254000 000160' JRST UDGF + 000111' 254000 000156' JRST UDSI + 000112' 254000 000154' JRST UDSO + 000113' 254000 000143' JRST UDLK + 000114' 254000 000131' JRST UDEN ;77 + 000020 UUOT2L=.-UUOT2 + + SYSCON - UUO HANDLER MACRO 10 05:51 24-APR-78 PAGE 6 +SYSCON MAC 24-APR-78 03:48 8-9-65 + + + + ,DISPATCH TO SPECIAL ROUTINE + DEFINE DSPT(A) + <U'A: PUSHJ PDP,UDSP + JRST A(TAC) + > + 000115' 200046 000003 UDSP: MOVE TAC,DEVSER(DEVDAT) + 000116' 200106 000001 MOVE TAC1,DEVCHR(DEVDAT) + 000117' 607100 000020 TLNN TAC1,IORET + 000120' 201040 000116' MOVEI TAC,NRTOSP-4 ;IGNORE THESE CALLS FOR NON- + 000121' 263140 000000 POPJ PDP, + 000122' 254000 000235' NRTOSP: JRST CUXIT1 ;SKIP RETURN + 000123' 254000 000235' JRST CUXIT1 ;SKIP RETURN + 000124' 265240 000000* JSP DAT,ERROR ;DUMP0 + 000125' 265240 000124* JSP DAT,ERROR ;DUMP1 + 000126' 254000 000072* JRST UUOERR ;USETO + 000127' 254000 000126* JRST UUOERR ;USETI + 000130' 254000 000127* JRST UUOERR ;GETF + 000131' 260140 000000* UDEN: PUSHJ PDP,WAIT1 + 000132' 661000 000002 TLO IOS,IOBEG + 000133' 620000 776000 TRZ IOS,776000 + 000134' 202006 000002 MOVEM IOS,DEVIOS(DEVDAT) + 000135' 135040 000056* LDB TAC,PUUOAC + 000136' 661300 020000 TLO DEVDAT,ENTRB + 000137' 621300 002000 TLZ DEVDAT,CLOSB + 000140' 502301 000057* HLLM DEVDAT,USRJDA(TAC) + 000141' 260140 000115' PUSHJ PDP,UDSP + 000142' 254001 000004 JRST DEN(TAC) + + 000143' 260140 000131* UDLK: PUSHJ PDP,WAIT1 + 000144' 630000 000251' TDZ IOS,[XWD IOEND,776000] + 000145' 202006 000002 MOVEM IOS,DEVIOS(DEVDAT) + 000146' 135040 000135* LDB TAC,PUUOAC + 000147' 661300 040000 TLO DEVDAT,LOOKB + 000150' 621300 002000 TLZ DEVDAT,CLOSB + 000151' 502301 000140* HLLM DEVDAT,USRJDA(TAC) + 000152' 260140 000115' PUSHJ PDP,UDSP + 000153' 254001 000005 JRST DLK(TAC) + + 000154' 260140 000115' DSPT(DSO)^UDSO: PUSHJ PDP,UDSP + 000155' 254001 000010 JRST DSO(TAC) + + 000156' 260140 000115' DSPT(DSI)^UDSI: PUSHJ PDP,UDSP + 000157' 254001 000011 JRST DSI(TAC) + + 000160' 260140 000115' DSPT(DGF)^UDGF: PUSHJ PDP,UDSP + 000161' 254001 000012 JRST DGF(TAC) + + + SYSCON - UUO HANDLER MACRO 10 05:51 24-APR-78 PAGE 7 +SYSCON MAC 24-APR-78 03:48 8-9-65 + + + + , 6-CSS-DEC-CALL-PL-PRE2 + , H. R. MORSE 64-11-17 + , CALLING SEQUENCE + , CALL 0,[SIXBIT/NAME/] + , WHERE NAME IS THE NAME OF A SYSTEM ROUTINE. + , IF NO SYSTEM ROUTINE WITH THE SPECIFIED NAME IF FOUND, THIS ROUTINE + , EXISTS TO ERROR. + , MONITOR INTERFACE + , ROUTINES CALLED: ERROR, HASH, SYSTEM ROUTINES DEFINED BY + , USE OF UCALIN. + , SYMBOLS SET/USED: + , ACCUMULATORS: DAT S/U PROG U + , PDP U UUO S/U + ;CONTENTS OF USER AC PLACED IN AC TAC + + 000162' 661600 000011 UCALL: TLO UUO,JDAT ;RELATIVIZE UUO ADDRESS + 000163' 200260 000014 MOVE DAT,@UUO; DAT:=NAME OF SYSTEM ROUTINE C + 000164' 205100 777760 MOVSI TAC1,-UCLLEN + 000165' 312242 000174' CAME DAT,UCLTAB(TAC1); SEARCH SYSTEM TOUTINE NAME TA + 000166' 253100 000165' AOBJN TAC1,.-1 + 000167' 135240 000146* LDB DAT,PUUOAC ;USER UUO AC FIELD + 000170' 505240 000011 HRLI DAT,JDAT + 000171' 200060 000005 MOVE TAC,@DAT ;PICK UP CONTENTS OF USER AC + 000172' 321122 000214' JUMPL TAC1,@UCLJMP(TAC1) + 000173' 254000 000130* JRST UUOERR + + DEFINE NAMES + < X DDTIN,DDTIN + X DDTOUT,DDTOUT + X DDTGT,DDTGT + X DDTRL,DDTRL + X SETDDT,SETDDT + X DEVCHR,DVCHR + X GETCHR,DVCHR + X WAIT,WAIT + X RESET,RESET + X EXIT,EXIT + X LDRBLT,LDRBLT + X UTPCLR,UTPCLR + X DATE,DATE + X SETPOV,SETPOV + X SWITCH,SWITCH + X TIMER,TIMER + > + DEFINE X (A,B) + < SIXBIT /A/ + > + 000174' 444464 515600 UCLTAB: NAMES^ X DDTIN,DDTIN^ SIXBIT /DDTIN/ + 000175' 444464 576564 X DDTOUT,DDTOUT^ SIXBIT /DDTOUT/ + 000176' 444464 476400 X DDTGT,DDTGT^ SIXBIT /DDTGT/ + 000177' 444464 625400 X DDTRL,DDTRL^ SIXBIT /DDTRL/ + + SYSCON - UUO HANDLER MACRO 10 05:51 24-APR-78 PAGE 7-1 +SYSCON MAC 24-APR-78 03:48 8-9-65 + + 000200' 634564 444464 X SETDDT,SETDDT^ SIXBIT /SETDDT/ + 000201' 444566 435062 X DEVCHR,DVCHR^ SIXBIT /DEVCHR/ + 000202' 474564 435062 X GETCHR,DVCHR^ SIXBIT /GETCHR/ + 000203' 674151 640000 X WAIT,WAIT^ SIXBIT /WAIT/ + 000204' 624563 456400 X RESET,RESET^ SIXBIT /RESET/ + 000205' 457051 640000 X EXIT,EXIT^ SIXBIT /EXIT/ + 000206' 544462 425464 X LDRBLT,LDRBLT^ SIXBIT /LDRBLT/ + 000207' 656460 435462 X UTPCLR,UTPCLR^ SIXBIT /UTPCLR/ + 000210' 444164 450000 X DATE,DATE^ SIXBIT /DATE/ + 000211' 634564 605766 X SETPOV,SETPOV^ SIXBIT /SETPOV/ + 000212' 636751 644350 X SWITCH,SWITCH^ SIXBIT /SWITCH/ + 000213' 645155 456200 X TIMER,TIMER^ SIXBIT /TIMER/ + 000020 UCLLEN=.-UCLTAB + + DEFINE X(A,B) + < JRST B + EXTERNAL B + > + 000214' 254000 000000* UCLJMP: NAMES^ X DDTIN,DDTIN^ JRST DDTIN + 000215' 254000 000000* X DDTOUT,DDTOUT^ JRST DDTOUT + 000216' 254000 000000* X DDTGT,DDTGT^ JRST DDTGT + 000217' 254000 000000* X DDTRL,DDTRL^ JRST DDTRL + 000220' 254000 000000* X SETDDT,SETDDT^ JRST SETDDT + 000221' 254000 000000* X DEVCHR,DVCHR^ JRST DVCHR + 000222' 254000 000221* X GETCHR,DVCHR^ JRST DVCHR + 000223' 254000 000000* X WAIT,WAIT^ JRST WAIT + 000224' 254000 000000* X RESET,RESET^ JRST RESET + 000225' 254000 000000* X EXIT,EXIT^ JRST EXIT + 000226' 254000 000000* X LDRBLT,LDRBLT^ JRST LDRBLT + 000227' 254000 000000* X UTPCLR,UTPCLR^ JRST UTPCLR + 000230' 254000 000000* X DATE,DATE^ JRST DATE + 000231' 254000 000000* X SETPOV,SETPOV^ JRST SETPOV + 000232' 254000 000000* X SWITCH,SWITCH^ JRST SWITCH + 000233' 254000 000000* X TIMER,TIMER^ JRST TIMER + + SYSCON - UUO HANDLER MACRO 10 05:51 24-APR-78 PAGE 8 +SYSCON MAC 24-APR-78 03:48 8-9-65 + + + + , DEV 06 00 EX COM L PT PRE 02 UXIT + , H. R. MORSE 64-12-26 + , CALLING SEQUENCE + , ANY TRANSFER OF CONTROL TO UXIT + , EXITS THIS UUO CALL. + , MONITOR INTERFACE + , SYMBOLS SET/USED: + , ACCUMULATORS: MAY RESTORE ALL ACCUMULATORS + , JDAT U + , PDP U + , 17 S/U + , JOB AREA: JOBAC U + , SYSTEM ADDRESSES: USRUXT U + , USRLEV S/U + + SYSCON - UUO HANDLER MACRO 10 05:51 24-APR-78 PAGE 9 +SYSCON MAC 24-APR-78 03:48 8-9-65 + + + + + INTERN UXIT,CUXIT1,CUXIT2 + + 000234' 350003 000000 CUXIT2: AOS (PDP) + 000235' 350003 000000 CUXIT1: AOS (PDP) + 000236' 262140 000046* UXIT: POP PDP,USRSAV ;RESTORE UUO EXIT ADDRESS FRO + 000237' 250040 000236* EXCH TAC,USRSAV + 000240' 607040 010000 TLNN TAC,USRMOD ;WAS ENTRY FROM USER MODE? + 000241' 254000 000246' JRST UXIT2 + 000242' 202040 000237* MOVEM TAC,USRSAV ;SET UP RETURN + 000243' 205751 000000* MOVSI 17, JOBAC(JDAT) ;RESTORE ACCUMULATO + 000244' 251740 000017 BLT 17,17 + 000245' 254120 000242* UXIT1: JRST 2,@USRSAV ;RETURN TO USERS PROGRAM + + 000246' 250040 000245* UXIT2: EXCH TAC,USRSAV + 000247' 254120 000246* JRST 2,@USRSAV + + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000252 + +9K CORE USED + + SYSCON - UUO HANDLER MACRO 10 05:51 24-APR-78 PAGE 10 +SYSCON MAC 24-APR-78 03:48 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLDS 000000 EXT +CLEN 000000 EXT +CLOSB 002000 INT +CLOSE1 000105' EXT +CLSIN 000002 INT +CLSOUT 000001 INT +CUXIT1 000235' INT +CUXIT2 000234' INT +D 000017 INT +DAT 000005 INT +DATE 000230' EXT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTGT 000216' EXT +DDTIN 000214' EXT +DDTMEM 000037 INT +DDTOUT 000215' EXT +DDTRL 000217' EXT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT + + + SYSCON - UUO HANDLER MACRO 10 05:51 24-APR-78 PAGE 10-1 +SYSCON MAC 24-APR-78 03:48 SYMBOL TABLE + +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVCHR 000222' EXT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERROR 000125' EXT +EXIT 000225' EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +ILLINS 000053' EXT +IN 000103' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIERR 000065' EXT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT + + + SYSCON - UUO HANDLER MACRO 10 05:51 24-APR-78 PAGE 10-2 +SYSCON MAC 24-APR-78 03:48 SYMBOL TABLE + +JIOW 100000 INT +JNA 004000 INT +JOBAC 000243' EXT +JOBADR 000034' EXT +JOBDAT 000042' EXT +JOBPDL 000044' EXT +LDRBLT 000226' EXT +LOOKB 040000 INT +MJOBPD 000043' EXT +MTAPE1 000107' EXT +MTW 010000 INT +NRTOSP 000122' +OBUFB 100000 INT +OUT 000104' EXT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PROG 000007 INT +PUUOAC 000167' EXT +RELEA1 000106' EXT +RESET 000224' EXT +RUN 200000 INT +RUNABL 204000 INT +SETDDT 000220' EXT +SETPOV 000231' EXT +SWITCH 000232' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TIMER 000233' EXT +TTYATC 020000 INT +TTYUSE 010000 INT +UCALL 000162' +UCLJMP 000214' +UCLLEN 000020 +UCLTAB 000174' +UDEN 000131' +UDGF 000160' +UDLK 000143' +UDSI 000156' +UDSO 000154' +UDSP 000115' +UINBF 000101' EXT +UINIT 000074' EXT +UOUTBF 000102' EXT +USETST 000075' EXT +USRJDA 000151' EXT +USRMOD 010000 INT +USRREL 000021' EXT +USRSAV 000247' EXT +USTATO 000076' EXT +USTATS 000077' EXT + + + SYSCON - UUO HANDLER MACRO 10 05:51 24-APR-78 PAGE 10-3 +SYSCON MAC 24-APR-78 03:48 SYMBOL TABLE + +USTATZ 000100' EXT +UTPCLR 000227' EXT +UUO 000014 INT +UUO0 000000' INT +UUODSP 000070' +UUOERR 000173' EXT +UUOSY1 000046' +UUOSYS 000030' +UUOT1 000073' +UUOT1L 000002 +UUOT2 000075' +UUOT2L 000020 +UXIT 000236' INT +UXIT1 000245' +UXIT2 000246' +WAIT 000223' EXT +WAIT1 000143' EXT + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +SSS YYY YYY SSS CCC SSS SSS +SSS YYY YYY SSS CCC SSS SSS +SSS YYY YYY SSS CCC SSS SSS +SSS YYY YYY SSS CCC SSS SSS +SSS YYY YYY SSS CCC SSS SSS +SSS YYY YYY SSS CCC SSS SSS + SSSSSSSSS YYY SSSSSSSSS CCC SSSSSSSSS SSSSSSSSS + SSSSSSSSS YYY SSSSSSSSS CCC SSSSSSSSS SSSSSSSSS + SSSSSSSSS YYY SSSSSSSSS CCC SSSSSSSSS SSSSSSSSS + SSS YYY SSS CCC SSS SSS + SSS YYY SSS CCC SSS SSS + SSS YYY SSS CCC SSS SSS + SSS YYY SSS CCC SSS SSS + SSS YYY SSS CCC SSS SSS + SSS YYY SSS CCC SSS SSS +SSSSSSSSSSSS YYY SSSSSSSSSSSS CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +SSSSSSSSSSSS YYY SSSSSSSSSSSS CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +SSSSSSSSSSSS YYY SSSSSSSSSSSS CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :SYSCSS.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:38 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1595 +File will be deleted after printing + +SYSCSS - COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 8-9-65 + + XLIST + LIST + TITLE SYSCSS - COMMON SYSTEM SUBROUTINES + SUBTTL 8-9-65 + EXTERNAL UXIT,ERROR,USRDDT,USRPOV,PUUOAC,USRREL + + ;RETURN THE DATE TO THE USER + + + INTERNAL DATE,THSDAT + + 000000' 200240 000002' DATE: MOVE DAT, THSDAT + 000001' 254000 000005' JRST STOAC + + 000002' 000000 000000 THSDAT: 0 ;CONTAINS THE DATE + + ;RETURN TIME SYSTEM HAS RUN IN 60THS OF A SECOND + + INTERNAL TIMER + EXTERNAL TIME + + 000003' 334240 000000* TIMER: SKIPA DAT, TIME ;FALL INTO STOAC + + ;RETURN DATA SWITCHES + + INTERNAL SWITCH + + 000004' 700040 000005 SWITCH: DATAI DAT + + ;STORE DAT IN USER AC + + INTERNAL STOAC + + 000005' 135040 000000* STOAC: LDB TAC, PUUOAC + 000006' 505040 000007 HRLI TAC, PROG + 000007' 202260 000001 MOVEM DAT,@TAC + 000010' 254000 000000* JRST UXIT + + ;RETURN DEVICE CHARACTERISTICS + + INTERNAL DVCHR + EXTERNAL JOB,DEVSRC,PJOBN + + 000011' 200200 000000* DVCHR: MOVE ITEM,JOB + 000012' 260140 000000* PUSHJ PDP,DEVSRC ;SEARCH FOR DEVICE + 000013' 334240 000034' SKIPA DAT,[0] ;NOT A DEVICE + 000014' 334246 000004 SKIPA DAT,DEVMOD(DEVDAT) + 000015' 254000 000005' JRST STOAC + 000016' 135040 000000* LDB TAC,PJOBN ;GET JOB NUMBER + 000017' 312040 000011* CAME TAC,JOB ;DOES USER ALREADY HAVE THIS DEVICE? + 000020' 606240 600000 TRNN DAT,ASSCON+ASSPRG ;NO + 000021' 661240 000040 TLO DAT,DVAVAL ;NO, BUT HE CAN GET IT + 000022' 254000 000005' JRST STOAC + + SYSCSS - COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 2 +SYSCSS MAC 24-APR-78 03:01 8-9-65 + + + + , CALLING SEQUENCE + , PUSHJ PDP,HASH + , EXIT;L ALWAYS RETURNS HERE + , COMPUTES XOR HASH TYPE INDEX FROM NAME (SIXBIT CODE) IN AC DAT + , AND LEAVES THE RESULT (00<OR= INDEX <OR=77) AS AN INTEGER IN TAC. + , THE ALGORITHM IS AS FOLLOWS: (V = EXCLUSIVE OR) + , BIT 35:=8V17V26V35 + , 34:=7V16V25V34 + , 33:=6V15V24V33 + , 32:=5V11V23V29 + , 31:=4V10V22V28 + , 30:=3V9V21V27 + , MONITOR INTERFACE + , SYMBOLS SET/USED: + , ACCUMULATORS: DAT U TAC S/U + , PDP S/U TAC1 S/U + ; INTERN HASH + + ;HASH: HLR TAC,DAT + ; MOVE TAC1,DAT + ; XORB TAC1,TAC + ; ROT TAC1,-11 + ; XOR TAC,TAC1 + ; ANDI TAC,UTBNM1 + ; POPJ PDP, ; RETURN + + SYSCSS - COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 3 +SYSCSS MAC 24-APR-78 03:01 8-9-65 + + + INTERNAL SETDDT + + 000023' 545040 010000 SETDDT: HLRI TAC,10000 + 000024' 202040 000000* MOVEM TAC,USRDDT + 000025' 254000 000010* JRST UXIT + + + INTERNAL SETPOV + + 000026' 545040 010000 SETPOV: HLRI TAC,10000 + 000027' 202040 000000* MOVEM TAC,USRPOV + 000030' 254000 000025* JRST UXIT + + ;WAIT FOR IO TO BECOME INACTIVE ON CHANNEL AC + + INTERNAL WAIT + EXTERNAL IOIERR,WAIT1 + + 000031' 322300 000000* WAIT: JUMPE DEVDAT,IOIERR ;CHANNEL ASSIGNED? + 000032' 260140 000000* PUSHJ PDP,WAIT1 ;WAIT TILL INACTIVE + 000033' 254000 000030* JRST UXIT + END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000035 + +9K CORE USED + + SYSCSS - COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 4 +SYSCSS MAC 24-APR-78 03:01 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +D 000017 INT +DAT 000005 INT +DATE 000000' INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DEVSRC 000012' EXT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVCHR 000011' INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT + + + SYSCSS - COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 4-1 +SYSCSS MAC 24-APR-78 03:01 SYMBOL TABLE + +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERROR 000000 EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIERR 000031' EXT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000017' EXT +LOOKB 040000 INT +MTW 010000 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PJOBN 000016' EXT +PROG 000007 INT +PUUOAC 000005' EXT + + SYSCSS - COMMON SYSTEM SUBROUTINES MACRO 10 05:51 24-APR-78 PAGE 4-2 +SYSCSS MAC 24-APR-78 03:01 SYMBOL TABLE + +RUN 200000 INT +RUNABL 204000 INT +SETDDT 000023' INT +SETPOV 000026' INT +STOAC 000005' INT +SWITCH 000004' INT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +THSDAT 000002' INT +TIME 000003' EXT +TIMER 000003' INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRDDT 000024' EXT +USRMOD 010000 INT +USRPOV 000027' EXT +USRREL 000000 EXT +UUO 000014 INT +UXIT 000033' EXT +WAIT 000031' INT +WAIT1 000032' EXT + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS IIIIIIIII NNN NNN IIIIIIIII + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS IIIIIIIII NNN NNN IIIIIIIII + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS IIIIIIIII NNN NNN IIIIIIIII +SSS YYY YYY SSS III NNN NNN III +SSS YYY YYY SSS III NNN NNN III +SSS YYY YYY SSS III NNN NNN III +SSS YYY YYY SSS III NNNNNN NNN III +SSS YYY YYY SSS III NNNNNN NNN III +SSS YYY YYY SSS III NNNNNN NNN III + SSSSSSSSS YYY SSSSSSSSS III NNN NNN NNN III + SSSSSSSSS YYY SSSSSSSSS III NNN NNN NNN III + SSSSSSSSS YYY SSSSSSSSS III NNN NNN NNN III + SSS YYY SSS III NNN NNNNNN III + SSS YYY SSS III NNN NNNNNN III + SSS YYY SSS III NNN NNNNNN III + SSS YYY SSS III NNN NNN III + SSS YYY SSS III NNN NNN III + SSS YYY SSS III NNN NNN III +SSSSSSSSSSSS YYY SSSSSSSSSSSS IIIIIIIII NNN NNN IIIIIIIII +SSSSSSSSSSSS YYY SSSSSSSSSSSS IIIIIIIII NNN NNN IIIIIIIII +SSSSSSSSSSSS YYY SSSSSSSSSSSS IIIIIIIII NNN NNN IIIIIIIII + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :SYSINI.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:38 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1589 +File will be deleted after printing + +SYSINI - SYSTEM INITIALIZATION MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 8-9-65 + + XLIST + LIST + TITLE SYSINI - SYSTEM INITIALIZATION + SUBTTL 8-9-65 + EXTERNAL APRCHN,ERROR,IOINI + EXTERNAL DDT,NULJOB,SYSMAK,ONCE,SYSBEG,SYSBG1,SYSEND + EXTERNAL CORTAB,CORLST,CORTAL,CORBLK,SYSSIZ,LINKSR + + ;SYSTEM INITIALIZATION DISPATCHTABLE, STARTING AT LOC. 140 + ;THIS SUBROUTINE MUST BE LOADED FIRST + ;ROUTINE ONCE IS ONCE ONLY CODE. IT CONVERTS THE DATE + ;AND SETS UP IO SERVICE CHAIN. + + + + INTERNAL SYSDSP + + 000000' 254000 000010' SYSDSP: JRST SYSINI ;INITIALIZE SYSTEM VARIABLES ONCE ONLY + 000001' 254000 000000* JRST DDT ;EXEC DDT + 000002' 254000 000000* JRST SYSMAK ;MAKE NEW SYSTEM + 000003' 254000 000010' JRST SYSINI ;INITIALIZE SYSTEM VARIABLES ALWAYS + 000004' 254000 000000* JEN NULJOB ;ERROR RECOVERY + 000005' 254000 000007' JRST SYSONE ;DO ONCE ONLY CODE OVER AGAIN + 000006' 254000 000012' JRST JSR2 ;BYPASS ONCE ONLY OPERATOR DIALOG + ;(IN CASE CONSOLE TTY DOWN) + + SYSINI - SYSTEM INITIALIZATION MACRO 10 05:51 24-APR-78 PAGE 2 +SYSINI MAC 24-APR-78 00:39 8-9-65 + + + + ;INITIALIZE SYSTEM DATA STORAGE + + INTERNAL SYSINI + 010000 NXM=10000 ;NON EX MEM FLAG + + 000007' 264000 000000* SYSONE: JSR ONCE ;ONCE ONLY CODE + 000010' 700200 200000 SYSINI: CONO APR,200000 ;IO RESET + 000011' 264000 000007* JSR1: JSR ONCE ;DO ONCE ONLY CODE ONCE + 000012' 264000 000000* JSR2: JSR LINKSR ;LINK IO SERVICE ROUTINES + 000013' 204040 000014' MOVS TAC,.+1 + 000014' 403100 000000* SETZB TAC1,SYSBEG + 000015' 206040 000011' MOVSM TAC,JSR1 + 000016' 206040 000012' MOVSM TAC,JSR2 + 000017' 541040 000000* HRRI TAC,SYSBG1 ;CLEAR SYSTEM DATA STORAGE + 000020' 251040 000000* BLT TAC,SYSEND + 000021' 205040 430000 MOVSI TAC, DVDIRIN+TTYATC+TTYUSE + 000022' 541040 600000 HRRI TAC,ASSCON+ASSPRG + 000023' 554300 000000* HLRZ DEVDAT,DEVLST ;SCAN ALL DEVICES + 000024' 412046 000004 SYS1: ANDCAM TAC, DEVMOD(DEVDAT) ;CLEAR DIRECTORY IN CORE BIT, + ;ASSIGNED BY CONSOLE & PROGRAM + 000025' 402006 000005 SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME + 000026' 554306 000003 HLRZ DEVDAT, DEVSER(DEVDAT) + 000027' 326300 000024' JUMPN DEVDAT, SYS1 + 000030' 200440 000105' MOVE JDAT,COREP ;SET UP CORE USE BIT TABLE + 000031' 202440 000000* MOVEM JDAT,CORLST + 000032' 201040 000000* MOVEI TAC,CORBLK ;NO. OF 1K BLOCKS IN TABLE + 000033' 700200 010000 SYS2: CONO APR,NXM ;CLEAR NON EX MEM + 000034' 133000 000011 IBP JDAT ;MOVE BYTE POINTER + 000035' 510242 000000 HLLZ DAT,(TAC1) ;REFERENCE MEMORY, CLEAR RT. OF DAT + 000036' 313100 000000* CAMLE TAC1,SYSSIZ ;HIGHEST LOC IN EXEC. + 000037' 700300 010000 CONSZ APR,NXM ;CAN MEMORY BE USED FOR USER PROG? + 000040' 344240 000043' AOJA DAT,SYS3 ;NO, MARK AS INACCESIBLE (1 BIT) + 000041' 350000 000000* AOS CORTAL + 000042' 202440 000031* MOVEM JDAT,CORLST ;AND SET LAST FREE BLOCK POINTER + 000043' 137240 000011 SYS3: DPB DAT,JDAT ;STORE 0 OR 1 IN TABLE + 000044' 271100 002000 ADDI TAC1,2000 ;INCREMENT MEMORY REF + 000045' 367040 000033' SOJG TAC,SYS2 + 000046' 133000 000042* IBP CORLST ;SET TO FIRST UNAVAILABLE BLOCK + 000047' 541040 000051' HRRI 1,IOGO + 000050' 542040 000000' HRRM 1,SYSDSP ;FALINTO IOGO + + SYSINI - SYSTEM INITIALIZATION MACRO 10 05:51 24-APR-78 PAGE 3 +SYSINI MAC 24-APR-78 00:39 8-9-65 + + + + ;INITIALIZE ALL IODEVICES + + INTERNAL IOGO + EXTERNAL DEVLST, MJOBN, JBTADR,JBTSTS,IOINI + EXTERNAL DCREQ,MTREQ,DTREQ + + 000051' 201040 000000* IOGO: MOVEI TAC,APRCHN + 000052' 700201 633440 CONO APR,633440(TAC) + 000053' 554040 000023* HLRZ TAC, DEVLST ;CHAIN OF DEVICE DATA BLOKS + 000054' 201100 200000 IOG0: MOVEI TAC1,ASSPRG ;CLEAR ASSIGNED BY PROGRAM BIT + 000055' 413101 000004 ANDCAB TAC1,DEVMOD(TAC) + 000056' 525200 000720 HRLOI ITEM,IORET+7*PICHN ;CLEAR JOB NO., USER CHANNEL + 000057' 602100 400000 TRNE TAC1,ASSCON + 000060' 661200 777000 TLO ITEM,777000 + 000061' 406201 000001 ANDM ITEM,DEVCHR(TAC) ;BUT NOT IORET BIT OR PII CHA + 000062' 402001 000002 SETZM DEVIOS(TAC) ;CLEAR IO STATUS WORD + 000063' 402001 000006 SETZM DEVBUF(TAC) ;CLEAR BUFFER ADDRESS + 000064' 554041 000003 HLRZ TAC, DEVSER(TAC) + 000065' 326040 000054' JUMPN TAC, IOG0 + 000066' 476000 000000* SETOM DCREQ ;CLEAR DEVICE REQUEST COUNTS + 000067' 476000 000000* SETOM MTREQ + 000070' 476000 000000* SETOM DTREQ + 000071' 201140 000100' MOVEI PDP,IOPDL-1 + 000072' 260140 000000* PUSHJ PDP,IOINI ;INITIALIZE IO DEVICES + 000073' 205240 000000* MOVSI DAT,MJOBN ;JOB NUMBER ASSIGNED BIT + 000074' 200040 000106' MOVE TAC,[XWD JERR,1] ;SET ERROR BIT, CLEAR ALL 0TH + 000075' 202045 000000* IOG1: MOVEM TAC,JBTSTS(DAT) + 000076' 253240 000075' AOBJN DAT,IOG1 + 000077' 700600 012377 CONO PI,12377 + 000100' 254000 000004* JRST NULJOB ;START THE NULL JOB + 000101' IOPDL: BLOCK 4 + 000105' 440100 000000* COREP: POINT 1,CORTAB ;1 BIT BYTE POINTER TO CORE USE TABLE + + 000010' END SYSINI + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000107 + +9K CORE USED + + SYSINI - SYSTEM INITIALIZATION MACRO 10 05:51 24-APR-78 PAGE 4 +SYSINI MAC 24-APR-78 00:39 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APR 000000 SPD +APRCHN 000051' EXT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CORBLK 000032' EXT +COREP 000105' +CORLST 000046' EXT +CORTAB 000105' EXT +CORTAL 000041' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCREQ 000066' EXT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDT 000001' EXT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVLST 000053' EXT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT + + + SYSINI - SYSTEM INITIALIZATION MACRO 10 05:51 24-APR-78 PAGE 4-1 +SYSINI MAC 24-APR-78 00:39 SYMBOL TABLE + +DSO 000010 INT +DTREQ 000070' EXT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERROR 000000 EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOG0 000054' +IOG1 000075' +IOGO 000051' INT +IOIMPM 400000 INT +IOINI 000072' EXT +IONRCK 000100 INT +IOPDL 000101' +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000000 EXT +JBTSTS 000075' EXT +JBUF 000005 INT + + SYSINI - SYSTEM INITIALIZATION MACRO 10 05:51 24-APR-78 PAGE 4-2 +SYSINI MAC 24-APR-78 00:39 SYMBOL TABLE + +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JSR1 000011' +JSR2 000012' +LINKSR 000012' EXT +LOOKB 040000 INT +MJOBN 000073' EXT +MTREQ 000067' EXT +MTW 010000 INT +NULJOB 000100' EXT +NXM 010000 +OBUFB 100000 INT +ONCE 000011' EXT +OUTPB 004000 INT +PDP 000003 INT +PI 000004 SPD +PICHN 000100 INT +PROG 000007 INT +RUN 200000 INT +RUNABL 204000 INT +SYS1 000024' +SYS2 000033' +SYS3 000043' +SYSBEG 000014' EXT +SYSBG1 000017' EXT +SYSDSP 000000' INT +SYSEND 000020' EXT +SYSINI 000010' INT +SYSMAK 000002' EXT +SYSONE 000007' +SYSSIZ 000036' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS MMM MMM AAAAAAAAA KKK KKK + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS MMM MMM AAAAAAAAA KKK KKK + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS MMM MMM AAAAAAAAA KKK KKK +SSS YYY YYY SSS MMMMMM MMMMMM AAA AAA KKK KKK +SSS YYY YYY SSS MMMMMM MMMMMM AAA AAA KKK KKK +SSS YYY YYY SSS MMMMMM MMMMMM AAA AAA KKK KKK +SSS YYY YYY SSS MMM MMM MMM AAA AAA KKK KKK +SSS YYY YYY SSS MMM MMM MMM AAA AAA KKK KKK +SSS YYY YYY SSS MMM MMM MMM AAA AAA KKK KKK + SSSSSSSSS YYY SSSSSSSSS MMM MMM AAA AAA KKKKKKKKK + SSSSSSSSS YYY SSSSSSSSS MMM MMM AAA AAA KKKKKKKKK + SSSSSSSSS YYY SSSSSSSSS MMM MMM AAA AAA KKKKKKKKK + SSS YYY SSS MMM MMM AAAAAAAAAAAAAAA KKK KKK + SSS YYY SSS MMM MMM AAAAAAAAAAAAAAA KKK KKK + SSS YYY SSS MMM MMM AAAAAAAAAAAAAAA KKK KKK + SSS YYY SSS MMM MMM AAA AAA KKK KKK + SSS YYY SSS MMM MMM AAA AAA KKK KKK + SSS YYY SSS MMM MMM AAA AAA KKK KKK +SSSSSSSSSSSS YYY SSSSSSSSSSSS MMM MMM AAA AAA KKK KKK +SSSSSSSSSSSS YYY SSSSSSSSSSSS MMM MMM AAA AAA KKK KKK +SSSSSSSSSSSS YYY SSSSSSSSSSSS MMM MMM AAA AAA KKK KKK + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :SYSMAK.LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:38 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1583 +File will be deleted after printing + +SYSMAK - MAKE NEW SYSTEM WITH THE OLD MACRO 10 05:51 24-APR-78 PAGE 1 +S MAC 24-APR-78 21:40 7-21-65 + + XLIST + LIST + TITLE SYSMAK - MAKE NEW SYSTEM WITH THE OLD + SUBTTL 7-21-65 + ,SYSMAK ASSUMES AN EXISTING SYSTEM WITH A LOADER IN CORE FOR JOB 1 + ,AND HIGHEST EMORY ADDRESS IN REAL 37. TO CREATE A NEW SYSTEM, SET + ,37 AS DESIRED, LOAD NEW SYSTEM (WITHOUT GOING INTO EXECUTION), AND + ,START AT REAL 62. THE COMPUTE WILL HALT AFTER THE NEW SYSTEM + ,HAS BEEN BLOCKED DOWN. TO START, PRESS CONTINUE OR START AT REAL + ,60. EXEC DDT (IF LOADED WITH THE NEW SYSTEM) STARTS AT REAL 141. + ;FROM REL. LOC. 30 ON UP IS BLOCKED DOWN + + ,WHEN LOADING A NEW SYSTEM, LOAD SYSINI FIRST. + ;SYSINI CONTAINS A DISPATCH TABLE DOCUMENTED TO BE AT LOC. 60 + ;ALSO LOAD IOINI LAST SINCE IT CONTAINS SOME ONCE ONLY CODE AT END + ;THEN LOAD SYSMAK FOLLOWED BY DDT(EXEC) + ;BE SURE THAT LOC SYSSIZ(SIZ OF SYSTEM) IS GREATER THAN + ;LAST LOC IN SYSMAK BEFORE STARTING TO LOAD. + ;LOC SYSSIZ IS IN LOWER CORE AND MAY HAVE TO BE PATCHED + ;USING CONSOLE SWITCHES. + + INTERNAL SYSMAK,MAKEND + EXTERNAL JBTADR,JBTAD1 + + 000000' 200040 000000* SYSMAK: MOVE 1,JBTAD1 ;LOADER BLOCK ADDRESS FROM JOB ADDRESS + 000001' 200301 000002 MOVE 6,2(1) ;LOADER OFFSET + 000002' 271301 000000 ADDI 6,(1) ;BLOCK ADDRESS+OFFSET + 000003' 200101 000006 MOVE 2,6(1); SYSMBOL TABLE POINTER: -N,L = LOWEST AD + 000004' 271001 000002 ADDI 2(1) + 000005' 564140 000002 HLRO 3,2 + 000006' 213000 000003 MOVNS 3 ;N = SYMBOL TABLE LENGTH + 000007' 200200 000037 MOVE 4,DDTMEM ;MEMORY SIZE(LOC 37) + 000010' 202206 000037 MOVEM 4,DDTMEM(6) ;STORE IN NEW DDTMEM + 000011' 275200 000200 SUBI 4,200 ;ROOM FOR DECDUMP + 000012' 202206 000036 MOVEM 4,DDTSYM(6) ;ALSO STORE IN WHAT WILL BECOME DDTSYM + 000013' 200240 000002 MOVE 5,2 ;LEAVES ROOM FOR DECDMP + 000014' 270240 000003 ADD 5,3 + 000015' 504240 000003 HRL 5,3 ;C(5):=N,L+N + 000016' 274200 000005 SUB 4,5 + 000017' 553000 000004 HRRZS 4 ;C(4):=0,C(37)-200-(L+N) + 000020' 270100 000004 ADD 2,4 ;C(2):=-N,C(37)-200-N + 000021' 202105 000000 MOVEM 2,(5) + 000022' 542200 000023' HRRM 4,.+1 + 000023' 262245 000000 POP 5,(5) ;MOVE SYMOBOL TABLE TO TOP OF MEMORY + 000024' 325240 000023' JUMPGE 5,.-1 + 000025' 200400 000034' MOVE 10,[BLT 3,(2)] + 000026' 200440 000035' MOVE 11,[JRST 4,] + 000027' 541140 000030 HRRI 3,30 + 000030' 505146 000030 HRLI 3,30(6) ;C(3):=LOADER OFFSET+LOADER BLOCK ADDRE + 000031' 550101 000006 HRRZ 2,6(1) ;C(2):=LOWEST LOCATION IN SYMBOL TABLE + 000032' 540441 000000 HRR 11,(1) ;C(11):=JRST 4,START ADDRESS + 000033' 254000 000010 JRST 10 ;MOVE SYSTEM TO BOTTOM OF MEMORY AND HALT + + 000034' LIT + 000034' 251142 000000 + 000035' 254200 000000 + + +SYSMAK - MAKE NEW SYSTEM WITH THE OLD MACRO 10 05:51 24-APR-78 PAGE 1 +SYSMAK MAC 24-APR-78 03:47 7-21-65 + + 000036' MAKEND: END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000036 + +9K CORE USED + + SYSMAK - MAKE NEW SYSTEM WITH THE OLD MACRO 10 05:51 24-APR-78 PAGE 2 +SYSMAK MAC 24-APR-78 03:47 SYMBOL TABLE + +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT + + + SYSMAK - MAKE NEW SYSTEM WITH THE OLD MACRO 10 05:51 24-APR-78 PAGE 2-1 +SYSMAK MAC 24-APR-78 03:47 SYMBOL TABLE + +DVTTY 000010 INT +ENTRB 020000 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTAD1 000000' EXT +JBTADR 000000 EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +MAKEND 000036' INT +MTW 010000 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PROG 000007 INT +RUN 200000 INT +RUNABL 204000 INT +SYSMAK 000000' INT +TAC 000001 INT +TAC1 000002 INT + + SYSMAK - MAKE NEW SYSTEM WITH THE OLD MACRO 10 05:51 24-APR-78 PAGE 2-2 +SYSMAK MAC 24-APR-78 03:47 SYMBOL TABLE + +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT + MMM MMM AAAAAAAAA CCCCCCCCCCCC RRRRRRRRRRRR OOOOOOOOO +MMM MMM AAAAAAAAA CCCCCCCCCCCC RRRRRRRRRRRR OOOOOOOOO +MMM MMM AAAAAAAAA CCCCCCCCCCCC RRRRRRRRRRRR OOOOOOOOO +MMMMMM MMMMMM AAA AAA CCC RRR RRR OOO OOO +MMMMMM MMMMMM AAA AAA CCC RRR RRR OOO OOO +MMMMMM MMMMMM AAA AAA CCC RRR RRR OOO OOO +MMM MMM MMM AAA AAA CCC RRR RRR OOO OOO +MMM MMM MMM AAA AAA CCC RRR RRR OOO OOO +MMM MMM MMM AAA AAA CCC RRR RRR OOO OOO +MMM MMM AAA AAA CCC RRRRRRRRRRRR OOO OOO +MMM MMM AAA AAA CCC RRRRRRRRRRRR OOO OOO +MMM MMM AAA AAA CCC RRRRRRRRRRRR OOO OOO +MMM MMM AAAAAAAAAAAAAAA CCC RRR RRR OOO OOO +MMM MMM AAAAAAAAAAAAAAA CCC RRR RRR OOO OOO +MMM MMM AAAAAAAAAAAAAAA CCC RRR RRR OOO OOO +MMM MMM AAA AAA CCC RRR RRR OOO OOO +MMM MMM AAA AAA CCC RRR RRR OOO OOO +MMM MMM AAA AAA CCC RRR RRR OOO OOO +MMM MMM AAA AAA CCCCCCCCCCCC RRR RRR OOOOOOOOO +MMM MMM AAA AAA CCCCCCCCCCCC RRR RRR OOOOOOOOO +MMM MMM AAA AAA CCCCCCCCCCCC RRR RRR OOOOOOOOO + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :MACRO .LST [8,296] Created: 20-April-1967 05:51:00 Printed: 24-April-1978 05:53:38 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1578 +File will be deleted after printing + +MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 1 +MACRO 10 24-APR-78 02:11 RPG/CMF/JF/PMH/DMN 7-SEPT-71 + + ;STANFORD ASSEMBLY: + 000170 LPTWID==^D120 ;120 CHARACTERS/LINE ON LPT AT STANFORD + TITLE MACRO V.46(52) + SUBTTL RPG/CMF/JF/PMH/DMN 7-SEPT-71 + ;COPYRIGHT 1968,1969,1970,1971, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. + + 000010 VMACRO==10 ;VERSION NUMBER + 000000 VUPDATE==0 ;DEC UPDATE LEVEL + 000000 VEDIT==0 ;EDIT NUMBER + 000000 VCUSTOM==0 ;NON-DEC UPDATE LEVEL + + + 000137 LOC <JOBVER==137> + 000137 001000 000000 <VCUSTOM>B2+<VMACRO>B11+<VUPDATE>B17+VEDIT + 000000' RELOC + MLON + + COMMENT * ASSEMBLY FEATURE SWITCHES (ACTION WHEN NON-ZERO) + + SWITCHES ON (NON-ZERO) IN DEC VERSION + CCLSW GIVES RAPID PROGRAM GENERATION FEATURE + FTDISK GIVES DISK FEATURES + RENTSW ASSEMBLE REENTRANT PROGRAMS + + SWITCHES OFF (ZERO) IN DEC VERSION + LNSSW GIVES LNS VERSION + WFWSW GIVES ARRAY, INTEGER AND LVAR FEATURES + IIISW GIVES III FEATURES + OPHSH GIVES HASH SEARCH OF OPCODES + * + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 2 +MACRO 10 24-APR-78 02:11 DEFAULT ASSEMBLY SWITCH SETTINGS + + SUBTTL DEFAULT ASSEMBLY SWITCH SETTINGS + + + IFNDEF RENTSW,<RENTSW==0> + + IFNDEF LNSSW,<LNSSW==0> + IFN LNSSW,<FTDISK==0> + + IFNDEF CCLSW,<CCLSW==1> + 000001 IFN CCLSW,<FTDISK==1> + + IFNDEF WFWSW,<WFWSW==0> + + + IFNDEF FTDISK,<FTDISK==0> + + IFNDEF IIISW,<IIISW==0> + + IFNDEF OPHSH,<OPHSH==0> + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 3 +MACRO 10 24-APR-78 02:11 OTHER PARAMETERS + + SUBTTL OTHER PARAMETERS + + 000062 .PDP== ^D50 ;BASIC PUSH-DOWN POINTER + IFNDEF LPTWID,<LPTWID==^D132> ;DEFAULT WIDTH OF PRINTER + 000170 .LPTWD==8*<LPTWID/8> ;USEFUL WIDTH IN MAIN LISTING + 000130 .CPL== .LPTWD-^D32 ;WIDTH AVAIABLE FOR TEXT WHEN + ;BINARY IS IN HALFWORD FORMAT + 000067 .LPP==^D55 ;LINES/PAGE + 000050 .STP== ^D40 ;STOW SIZE + 000120 .TBUF== ^D80 ;TITLE BUFFER + 000120 .SBUF== ^D80 ;SUB-TITLE BUFFER + 000024 .IFBLK==^D20 ;IFIDN COMPARISON BLOCK SIZE + 000022 .R1B==^D18 + 000012 .UNIV==^D10 ;NUMBER OF UNIVERSAL DEFINITIONS + 000004 .LEAF==4 ;SIZE OF BLOCKS IN MACRO TREE + + 000001 NCOLS==1 ;NUMBER OF COLUMNS IN SYMBOL TABLE + IFN CCLSW,<IFNDEF CTLSIZ,<CTLSIZ==^D200>> + IFN OPHSH,<IFNDEF PRIME,<PRIME==^D701>> + IFNDEF NUMBUF,< + IFE LNSSW,<NUMBUF==2 ;NUMBER OF INPUT BUFFERS> + IFN LNSSW,<NUMBUF==4 ;DOUBLE BUFFER FOR DOUBLE SIZE DEVICES> + > + + EXTERN JOBREL,JOBSYM,JOBDDT,JOBFF,JOBAPR,JOBSA + IFN CCLSW,< EXTERN JOBERR> + + SALL ;SUPPRESS ALL MACROS + + ;SOME ASCII CHARACTERS + + 000011 HT==11 + 000012 LF==12 + 000013 VT==13 + 000014 FF==14 + 000015 CR==15 + 000033 EOL==33 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 4 +MACRO 10 24-APR-78 02:11 OTHER PARAMETERS + + ;ACCUMULATORS + 000000 AC0== 0 + 000001 AC1= AC0+1 + 000002 AC2= AC1+1 + 000003 SDEL= 3 ;SEARCH INCREMENT + 000004 SX= SDEL+1 ;SEARCH INDEX + 000005 ARG= 5 ;ARGUMENT + 000006 V= 6 ;VALUE + 000007 C= 7 ;CURRENT CHARACTER + 000010 CS= C+1 ;CHARACTER STATUS BITS + 000011 RC= 11 ;RELOCATION BITS + 000012 MWP= 12 ;MACRO WRITE POINTER + 000013 MRP= 13 ;MACRO READ POINTER + 000014 IO= 14 ;IO REGISTER (LEFT) + 000014 ER== IO ;ERROR REGISTER (RIGHT) + 000015 FR= 15 ;FLAG REGISTER (LEFT) + 000015 RX== FR ;CURRENT RADIX (RIGHT) + 000016 MP= 16 ;MACRO PUSHDOWN POINTER + 000017 PP= 17 ;BASIC PUSHDOWN POINTER + + 000003 %OP== 3 + 000005 %MAC== 5 + 000002 %DSYM== 2 + 000001 %SYM== 1 + 000006 %DMAC== %MAC+1 + + OPDEF RESET [CALLI 0] + OPDEF SETDDT [CALLI 2] + OPDEF DDTOUT [CALLI 3] + OPDEF DEVCHR [CALLI 4] + OPDEF WAIT [MTAPE 0] + OPDEF CORE [CALLI 11] + OPDEF EXIT [CALLI 12] + OPDEF UTPCLR [CALLI 13] + OPDEF DATE [CALLI 14] + OPDEF APRENB [CALLI 16] + OPDEF MSTIME [CALLI 23] + OPDEF PJOB [CALLI 30] + OPDEF RUN [CALLI 35] + OPDEF TMPCOR [CALLI 44] + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 5 +MACRO 10 24-APR-78 02:11 OTHER PARAMETERS + + ;FR FLAG REGISTER (FR/RX) + 000001 IOSCR== 000001 ;NO CR AFTER LINE + 000004 MTAPSW==000004 ;MAG TAPE + 000010 ERRQSW==000010 ;IGNORE Q ERRORS + 000020 LOADSW==000020 ;END OF PASS1 & NO EOF YET + 000040 DCFSW== 000040 ;DECIMAL FRACTION + 000100 RIM1SW==000100 ;RIM10 MODE + 000200 NEGSW== 000200 ;NEGATIVE ATOM + 000400 RIMSW== 000400 ;RIM OUTPUT + 001000 PNCHSW==001000 ;RIM/BIN OUTPUT WANTED + 002000 CREFSW==002000 + 004000 R1BSW== 004000 ;RIM10 BINARY OUTPUT + 010000 TMPSW== 010000 ;EVALUATE CURRENT ATOM + 020000 INDSW== 020000 ;INDIRECT ADDRESSING WANTED + 040000 RADXSW==040000 ;RADIX ERROR SWITCH + 100000 FSNSW== 100000 ;NON BLANK FIELD SEEN + 200000 MWLFLG==200000 ;ON FOR DON'T ALLOW MULTI-WORD LITERALS + 400000 P1== 400000 ;PASS1 + + ;IO FLAG REGISTER (IO/ER) + 400000 FLDSW== 400000 ;ADDRESS FIELD + 200000 IOMSTR==200000 + 100000 ARPGSW==100000 ;ALLOW RAPID PROGRAM GENERATION + 040000 IOPROG==040000 ;SUPRESS LISTING (LIST/XLIST PSEUDO OP) + 020000 NUMSW== 020000 + 010000 IOMAC== 010000 ;MACRO EXPANSION IN PROGRESS + 004000 IOPALL==004000 ;SUPRESS LISTING OF MACRO EXPANSIONS + 002000 IONCRF==002000 ;SUPRESS OUTPUT OF CREF INFORMATION + 001000 CRPGSW==001000 ;CURRENTLY IN PROGRESS ON RPG + 000400 IOCREF==000400 ;WE ARE NOW OUTPUTTING CREF INFO + 000200 IOENDL==000200 ;BEEN TO STOUT + 000100 IOPAGE==000100 + 000040 DEFCRS==000040 ;THIS IS A DEFINING OCCURANCE (MACROS) + 000020 IOIOPF==000020 ;IOP INSTRUCTION SEEN + 000010 MFLSW== 000010 ;MULTI-FILE MODE,PRGEND SEEN + 000004 IORPTC==000004 ;REPEAT CURRENT CHARACTER + 000002 IOTLSN==000002 ;TITLE SEEN + 000001 IOSALL==000001 ;SUPPRESS MACRO LISTING EVEN IF BINARY IS GENERATED + + OPDEF JUMP1 [JUMPL FR, ] ;JUMP IF PASS 1 + OPDEF JUMP2 [JUMPGE FR, ] ;JUMP IF PASS 2 + + OPDEF JUMPOC [JUMPGE IO, ] ;JUMP IF IN OP-CODE FIELD + OPDEF JUMPAD [JUMPL IO, ] ;JUMP IF IN ADDRESS FIELD + + OPDEF JUMPCM [JUMPL CS, ] ;JUMP IF CURRENT CHAR IS COMMA + OPDEF JUMPNC [JUMPGE CS, ] ;JUMP IF CURRENT CHAR IS NON-COMMA + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 6 +MACRO 10 24-APR-78 02:11 OTHER PARAMETERS + + ;ER ERROR REGISTERS (IO/ER) + 000020 ERRM== 000020 ;MULTIPLY DEFINED SYMBOL + 000040 ERRE== 000040 ;ILLEGAL USE OF EXTERNAL + 000100 ERRP== 000100 ;PHASE DISCREPANCY + 000200 ERRO== 000200 ;UNDEFINED OP CODE + 000400 ERRN== 000400 ;NUMBER ERROR + 001000 ERRV== 001000 ;VALUE PREVIOUSLY UNDEFINED + 002000 ERRU== 002000 ;UNDEFINED SYMBOL + 004000 ERRR== 004000 ;RELOCATION ERROR + 010000 ERRL== 010000 ;LITERAL ERROR + 020000 ERRD== 020000 ;REFERENCE TO MULTIPLY DEFINED SYMBOL + 040000 ERRA== 040000 ;PECULIAR ARGUMENT + 100000 ERRX== 100000 ;MACRO DEFINITION ERROR + 200000 ERRQ== 200000 ;QUESTIONABLE, NON-FATAL ERROR + 777760 ERRORS==777760 + 000002 LPTSW== 000002 + 000001 TTYSW== 000001 + + ;SYMBOL TABLE FLAGS + 400000 SYMF== 400000 ;SYMBOL + 200000 TAGF== 200000 ;TAG + 100000 NOOUTF==100000 ;NO DDT OUTPUT WFW + 040000 SYNF== 040000 ;SYNONYM + 020000 MACF== SYNF_-1 ;MACRO + 010000 OPDF== SYNF_-2 ;OPDEF + 004000 PNTF== 004000 ;"VALUE" IN SYMBOL TBL IS PNTR TO 36BIT VALUE + 002000 UNDF== 002000 ;UNDEFINED + 001000 EXTF== 001000 ;EXTERNAL + 000400 INTF== 000400 ;INTERNAL + 000200 ENTF== 000200 ;ENTRY + 000100 VARF== 000100 ;VARIABLE + 000020 MDFF== 000020 ;MULTIPLY DEFINED + 000010 SPTR== 000010 ;SPECIAL EXTERNAL POINTER + 000004 SUPRBT==000004 ;SUPRESS OUTPUT TO DDT + 000002 LELF== 000002 ;LEFT HAND RELOCATABLE + 000001 RELF== 000001 ;RIGHT HAND RELOCATABLE + + 200000 LITF== 200000 ;FLAG FOR PSEUDO-OPS INVALID IN LIT'S + 100000 ADDF== 100000 ;FLAG FOR PSEUDO-OPS INVALID IN ADDRESSES + + 200000 TNODE== 200000 ;TERMINAL NODE FOR EVALEX + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 7 +MACRO 10 24-APR-78 02:11 RUN UUO + + SUBTTL RUN UUO + + IFN CCLSW,< + ;THIS CODE MUST BE IN FIRST 1K TO ALLOW MAXIMUM SPACE + ; FOR OVERWRITING + ; 74 APPEARS BECAUSE ONLY LOCS 74 AND BEYOND ARE SAVED BY "SAVE" + + 000000' 000000 000016' IFN CCLSW,<NUNCOM: IOWD 0,INHERE ;WHERE TO DO IO + 000001' 000000 000000 0 ;TERMINATE COMMAND LIST + 000002' 056040 000000' NUNGO2: IN BIN,NUNCOM ;READ FILE + 000003' 254000 000011' JRST NUNGO3 ;THERE ARE NO ERRORS + 000004' 047400 000003 NUNERR: DDTOUT NUNPNT, ;COMPLAIN + 000005' 047000 000012 EXIT ;GIVE UP + 000006' 376311 147226 NUNERM: ASCIZ /?LINKAGE ERROR/ + 000007' 406170 520212 + 000010' 512451 751000 + 000011' 332500 000056' NUNGO3: SKIPE 12,INHERE+133-74 ;LOOK AT JOBCOR + ;DOES JOB WANT TO RUN IN MORE CORE? + 000012' 317500 000000* CAMG 12,JOBREL ;MORE CORE THAN CURRENTLY USED? + 000013' 254000 000000 JRST NUNGO4 ;NO, GO BLT PROG + 000014' 047500 000011 CORE 12, ;ASK FOR MORE CORE + 000015' 254000 000004' JRST NUNERR ;NOT AVAILABLE + 000016' 254000 000000 JRST NUNGO4 ;GO BLT PROGRAM + 000017' INHERE: + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 8 +MACRO 10 24-APR-78 02:11 RUN UUO + + ;THIS CODE MUST BE IN FIRST 1K + 000017' 326040 000021' NUNSET: JUMPN ACDEV,.+2 ;DEVICE SPECIFIED? + 000020' 205040 637163 MOVSI ACDEV,(SIXBIT /SYS/) ;NO, USE SYSTEM DEVICE + 000021' 326140 000023' JUMPN ACEXT,.+2 ;EXT SPECIFIED? + 000022' 205140 634166 MOVSI ACEXT,(SIXBIT /SAV/) ;NO, USE "SAV" + 000023' 202040 013226' MOVEM ACDEV,NUNDEV ;DEVICE NAME TO USE + 000024' 050040 013225' OPEN BIN,NUNINI ;INIT THE DEVICE + 000025' 254000 010162' JRST EINIT ;ERROR + 000026' 202100 013333' MOVEM ACFILE,NUNDIR ;IS THE FILE AVAILABLE? + 000027' 512140 013334' HLLZM ACEXT,NUNDIR+1 ;STASH EXTENSION + 000030' 402000 013336' SETZM NUNDIR+3 ;CLEAR PPN + 000031' 076040 013333' LOOKUP BIN,NUNDIR ;LOOK FOR FILE + JRST [HLRZ ACEXT,NUNDIR+1 ;WAS EXTENSION "SAV"? + CAIE ACEXT,(SIXBIT /SAV/) ;... + JRST ERRCF ;GO COMPLAIN + MOVSI ACEXT,(SIXBIT /DMP/) ;TRY "DMP" EXTENSION + 000032' 254000 014570' JRST .-3 ] ;TRA -3,4 + 000033' 260740 000066' PUSHJ PP,DELETE ;COMMAND FILE + 000034' 200640 013333' MOVE 15,NUNDIR ;GET THE NAME + 000035' 047640 000043 CALLI 15,43 ;TELL SYSTEM "SETNAM" + 000036' 564640 013336' HLRO 15,NUNDIR+3 ;GET WORD COUNT + 000037' 506640 000000' HRLM 15,NUNCOM ;STASH COUNT + 000040' 213000 000015 MOVNS 15 ;NEGATIVE COUNT + 000041' 201715 000073 MOVEI 16,73(15) ;WHERE TO STOP BLT + 000042' 271640 000017' ADDI 15,INHERE ;HOW BIG TO MAKE CORE + 000043' 435640 001777 IORI 15,1777 ;AN EVEN MULTIPLE OF 1K + 000044' 047640 000011 CORE 15, ;ASK TS EXEC FOR CORE + JRST [HRROI RC,[SIXBIT /NOT ENUF CORE FOR LINKAGE@/] + 000045' 254000 014602' JRST ERRFIN ];GO COMPLAIN + 000046' 205440 000054' MOVSI NUNTOP,NUNAC + 000047' 251440 000011 BLT NUNTOP,NUNTOP ;SET ACS + 000050' 540200 000016 HRR NUNBLT,16 ;... + 000051' 607600 001000 TLNN IO,CRPGSW ;WAS RPG IN PROGRESS? + 000052' 621300 577000 TLZ NUNAOS,577000 ;NO, DON'T MAKE NEXT AN RPG + 000053' 254000 000002' JRST NUNGO2 + + 000000 NUNAC: PHASE 0 + 000054' 200500 000017' NUNGO4: MOVE NUNLAC,INHERE+74-74 ;SETUP FOR NEW DDT + 000055' 047500 000002 SETDDT NUNLAC, ;... + INTERN JOBS41 + 000122 JOBS41=122 ;LOADER WILL GIVE MUL. DEF. GLOBAL IF CHANGED + + EXTERN JOB41 + 000056' 200500 000045' MOVE NUNLAC,JOBS41+INHERE-74 ;RESTORE LOC 41 + 000057' 202500 000000* MOVEM NUNLAC,JOB41 ;... + 000060' 251440 000000 NUNBLT: BLT NUNTOP,.-. ;MOVE PRGM TO WHERE IT BELONGS + 000061' 047000 000000 RESET ;RESET ALL I/O + 000062' 350040 000000* NUNAOS: AOS 1,JOBSA ;GET STARTING ADDR FOR RPG + 000063' 254001 000000 JRST 0(1) ;GET ON WITH THE GAME + 000064' 000000 000006' NUNPNT: NUNERM ;ERROR MESSAGE POINTER + 000065' 000020' 000075 NUNTOP: XWD INHERE+1,75 + 000012 NUNLAC=. + 000066' DEPHASE + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 8-1 +MACRO 10 24-APR-78 02:11 RUN UUO + + > + LIST + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 9 +MACRO 10 24-APR-78 02:11 RUN UUO + + 000066' 550000 014104' DELETE: HRRZ EXTMP ;IF THE EXTENSION + 000067' 302000 645560 CAIE (SIXBIT/TMP/) ;IS .TMP + 000070' 263740 000000 POPJ PP, ;RETURN. + 000071' 070200 000000 CLOSE CTL2, ;DELETE + 000072' 403200 000005 SETZB 4,5 ;THE COMMAND FILE. + 000073' 403300 000007 SETZB 6,7 + 000074' 055200 000004 RENAME CTL2,4 ; + 000075' 255000 000000 JFCL + 000076' 263740 000000 POPJ PP, + > + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 10 +MACRO 10 24-APR-78 02:11 START ASSEMBLING + + SUBTTL START ASSEMBLING + + 000077' 260740 003356' ASSEMB: PUSHJ PP,INZ ;INITIALIZE FOR PASS + 000100' 200000 014604' MOVE [ASCII /.MAIN/] + 000101' 202000 013701' MOVEM TBUF + 000102' 201000 013527' MOVEI SBUF + 000103' 542000 013550' HRRM SUBTTX + + 000104' 260740 001415' ASSEM1: PUSHJ PP,CHARAC ;TEST FOR FORM FEED + 000105' 335000 013452' SKIPGE LIMBO ;CRLF FLAG? + 000106' 254000 000104' JRST ASSEM1 ;YES ,IGNORE LF + 000107' 306340 000014 CAIN C,14 + 000110' 332000 013214' SKIPE SEQNO + 000111' 254000 000115' JRST ASSEM2 + 000112' 260740 010674' PUSHJ PP,OUTFF1 + 000113' 260740 001774' PUSHJ PP,OUTLI + 000114' 254000 000104' JRST ASSEM1 + + 000115' 350000 014051' ASSEM2: AOS TAGINC + 000116' 306340 000134 CAIN C,"\" ;BACK-SLASH? + 000117' 625600 010000 TLZA IO,IOMAC ;YES, LIST IF IN MACRO + 000120' 661600 000004 TLO IO,IORPTC + 000121' 260740 000125' PUSHJ PP,STMNT ;OFF WE GO + 000122' 627600 000200 TLZN IO,IOENDL ;WAS STOUT PRE-EMPTED? + 000123' 260740 000237' PUSHJ PP,STOUT ;NO, POLISH OFF LINE + 000124' 254000 000104' JRST ASSEM1 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 11 +MACRO 10 24-APR-78 02:11 STATEMENT PROCESSOR + + SUBTTL STATEMENT PROCESSOR + + 000125' 621640 120000 STMNT: TLZ FR,INDSW!FSNSW + 000126' 625600 400000 TLZA IO,FLDSW + 000127' 260740 000253' STMNT1: PUSHJ PP,LABEL + 000130' 260740 000334' STMNT2: PUSHJ PP,ATOM ;GET THE FIRST ATOM + 000131' 306340 000035 CAIN C,35 ;"="? + 000132' 254000 004112' JRST ASSIGN ;YES + 000133' 306340 000032 CAIN C,32 ;":"? + 000134' 254000 000127' JRST STMNT1 ;YES + 000135' 321600 000200' JUMPAD STMNT7 ;NUMERIC EXPRESSION + 000136' 326000 000146' JUMPN AC0,STMN2A ;JUMP IF NON NULL FIELD + 000137' 336000 013773' SKIPN LITLVL ;ALLOW COMMA IN LITERALS + 000140' 302340 000014 CAIE C,14 ;NULL, COMMA? + 000141' 306340 000033 CAIN C,EOL ;OR END OF LINE? + 000142' 263740 000000 POPJ PP, ;YES,EXIT + 000143' 306340 000135 CAIN C,"]" ;CLOSING LITERAL? + 000144' 263740 000000 POPJ PP, ;YES + 000145' 254000 000201' JRST STMNT9 ;NO,AT LEAST SKIP ALL THIS NONSENSE + + 000146' 322340 000150' STMN2A: JUMPE C,.+2 + 000147' 661600 000004 TLO IO,IORPTC + 000150' 260740 012573' PUSHJ PP,MSRCH ;SEARCH FOR MACRO/OPDEF/SYN + 000151' 254000 000157' JRST STMNT3 ;NOT FOUND, TRY OP CODE + 000152' 135140 014605' LDB SDEL,[POINT 3,ARG,5] + 000153' 322140 003400' JUMPE SDEL,ERRAX ;ERROR IF NO FLAGS + 000154' 362140 004437' SOJE SDEL,OPD1 ;OPDEF IF 1 + 000155' 362140 005705' SOJE SDEL,CALLM ;MACRO IF 2 + 000156' 254000 000161' JRST STMNT4 ;SYNONYM, PROCESS WITH OP-CODES + + 000157' 260740 010754' STMNT3: PUSHJ PP,OPTSCH ;SEARCH OP CODE TABLE + 000160' 254000 000167' JRST STMNT5 ;NOT FOUND + 000161' 510000 000006 STMNT4: HLLZ AC0,V ;PUT CODE IN AC0 + 000162' 620300 100000 TRZ V,ADDF ;CLEAR ADDRESS NON-VALID FLAG + 000163' 622300 200000 TRZE V,LITF ;VALID IN LITERAL? + 000164' 336000 013773' SKIPN LITLVL ;NO, ARE WE IN A LITERAL? + 000165' 254006 000000 JRST 0(V) ;NO, GO TO APPROPRIATE PROCESSOR + 000166' 263740 000000 POPJ PP, ;YES,EXIT + + 000167' 260740 012610' STMNT5: PUSHJ PP,SSRCH ;TRY SYMBOLS + 000170' 254000 000207' JRST STMNT8 ;NOT FOUND + 000171' 603240 003000 TLNE ARG,EXTF!UNDF ;EXTERNAL OR UNDEFINED? + 000172' 254000 000200' JRST STMNT7 ;YES, PROCESS IN EVALEX + 000173' 607440 777776 TLNN RC,-2 ;CHECK FOR EXTERNAL + 000174' 602440 777776 TRNE RC,-2 + 000175' 254000 000200' JRST STMNT7 + 000176' 200000 000006 MOVE AC0,V ;FOUND, PUT VALUE IN AC0 + 000177' 661600 020000 TLO IO,NUMSW ;FLAG AS NUMERIC + 000200' 621600 000004 STMNT7: TLZ IO,IORPTC + 000201' 260740 001065' STMNT9: PUSHJ PP,EVALHA ;EVALUATE EXPRESSION + 000202' 603640 100000 TLNE FR,FSNSW ;FIELD SEEN? + 000203' 254000 002751' JRST STOW ;YES,STOW THE CODE AND EXIT + 000204' 302340 000075 CAIE C,"]"-40 ;CLOSING LITERAL? + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 11-1 +MACRO 10 24-APR-78 02:11 STATEMENT PROCESSOR + + 000205' 660600 200000 TRO ER,ERRQ ;NO, GIVE "Q" ERROR + 000206' 263740 000000 POPJ PP, ;EXIT + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 12 +MACRO 10 24-APR-78 02:11 STATEMENT PROCESSOR + + 000207' 201300 000000 STMNT8: MOVEI V,0 ;ALWAYS START SCAN WITH 0 + 000210' 301300 000112 CAIL V,CALNTH ;END OF TABLE? + 000211' 254000 000221' JRST STMN8C ;YES, TRY TTCALLS + 000212' 312006 012443' CAME AC0,CALTBL(V) ;FOUND IT? + 000213' 344300 000210' AOJA V,.-3 ;NO,TRY AGAIN + 000214' 275300 000001 SUBI V,NEGCAL ;CALLI'S START AT -1 + 000215' 505300 047000 HRLI V,(CALLI) ;PUT IN UUO + 000216' 205240 010000 STMN8D: MOVSI ARG,OPDF ;SET FLAG FOR OPDEF + 000217' 260740 013036' STMN8B: PUSHJ PP,INSERT ;PUT OPDEF IN TABLE + 000220' 254000 004441' JRST OPD ;AND TREAT AS OPDEF + + 000221' 400300 000000 STMN8C: SETZ V, ;START WITH ZERO + 000222' 301300 000016 CAIL V,TTCLTH ;END OF TABLE? + 000223' 254000 000231' JRST STMN8A ;YES, ERROR + 000224' 312006 012555' CAME AC0,TTCTBL(V) ;MATCH? + 000225' 344300 000222' AOJA V,.-3 ;NO, KEEP TRYING + 000226' 242300 000005 LSH V,5 ;PUT IN AC FIELD (RIGHT HALF) + 000227' 515306 051000 HRLZI V,<(TTCALL)>(V) ;PUT UUO IN LEFT HALF + 000230' 254000 000216' JRST STMN8D ;SET OPDEF FLAG + + 000231' 403300 000011 STMN8A: SETZB V,RC ;CLEAR VALUE AND RELOCATION + 000232' 660600 000200 TRO ER,ERRO ;FLAG AS UNDEFINED OP-CODE + 000233' 321640 004441' JUMP1 OPD ;TREAT AS STANDARD OP ON PASS1 + 000234' 205240 013000 MOVSI ARG,OPDF!UNDF!EXTF ;SET A FEW FLAGS + 000235' 254000 000217' JRST STMN8B ;TO FORCE OUT A MESSAGE + + ;STATEMENT OUT PASSES REMAINDER OF LINE (CMNT) + ;UNTIL A LINE TERMINATOR IS SEEN. + 000236' 665600 000204 STOUTS: TLOA IO,IOENDL!IORPTC + 000237' 661600 000004 STOUT: TLO IO,IORPTC + 000240' 260740 004543' PUSHJ PP,BYPAS1 + 000241' 306340 000014 CAIN C,14 ;COMMA? + 000242' 331000 013555' SKIPL STPX ;YES, ERROR IF CODE STORED + 000243' 306340 000033 CAIN C,EOL + 000244' 665600 000004 TLOA IO,IORPTC + 000245' 660600 200000 TRO ER,ERRQ + 000246' 260740 001415' STOUT1: PUSHJ PP,CHARAC + 000247' 307340 000015 CAIG C,CR + 000250' 307340 000011 CAIG C,HT + 000251' 254000 000246' JRST STOUT1 + 000252' 254000 001556' JRST OUTLIN ;OUTPUT THE LINE (BIN AND LST) + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 13 +MACRO 10 24-APR-78 02:11 LABEL PROCESSOR + + SUBTTL LABEL PROCESSOR + + 000253' 321600 000317' LABEL: JUMPAD LABEL4 ;COMPARE IF NON-SYMBOLIC + 000254' 322000 000321' JUMPE AC0,LABEL5 ;ERROR IF BLANK + 000255' 661600 000040 TLO IO,DEFCRS ;THIS IS A DEFINITION + 000256' 260740 012610' PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + 000257' 205240 602000 MOVSI ARG,SYMF!UNDF!TAGF ;NOT FOUND + 000260' 607240 001000 TLNN ARG,EXTF ;OPERAND FOUND (SKIP EXIT) + 000261' 254000 000266' JRST LABEL0 + 000262' 321640 000313' JUMP1 LABEL3 ;ERROR ON PASS1 + 000263' 607240 002000 TLNN ARG,UNDF ;UNDEFINED ON PASS1 + 000264' 254000 000313' JRST LABEL3 ;NO, FLAG ERROR + 000265' 621240 005000 TLZ ARG,EXTF!PNTF ;TURN OFF EXT FLAG NOW + 000266' 627240 002100 LABEL0: TLZN ARG,UNDF!VARF ;WAS IT PREVIOUSLY DEFINED? + 000267' 254000 000310' JRST LABEL2 ;YES, CHECK EQUALITY + 000270' 200300 013777' MOVE V,LOCA ;WFW + 000271' 200440 014004' MOVE RC,MODA + 000272' 661240 200000 TLO ARG,TAGF + 000273' 260740 006531' PUSHJ PP,PEEK ;GET NEXT CHAR. + 000274' 302340 000072 CAIE C,":" ;SPECIAL CHECK FOR :: + 000275' 254000 000301' JRST LABEL1 ;NO MATCH + 000276' 661240 000400 TLO ARG,INTF ;MAKE IT INTERNAL + 000277' 260740 001363' PUSHJ PP,GETCHR ;PROCESS NEXT CHAR. + 000300' 260740 006531' PUSHJ PP,PEEK ;PREVIEW NEXT CHAR. + 000301' 302340 000041 LABEL1: CAIE C,"!" ;HALF-KILL SIGN + 000302' 254000 000305' JRST LABEL6 ;NO + 000303' 661240 100000 TLO ARG,NOOUTF ;YES, SUPPRESS IT + 000304' 260740 001363' PUSHJ PP,GETCHR ;AND GET RID OF IT + 000305' 202000 013211' LABEL6: MOVEM AC0,TAG ;SAVE FOR PASS 1 ERRORS + 000306' 513000 014051' HLLZS TAGINC ;ZERO INCREMENT + 000307' 254000 013036' JRST INSERT ;INSERT/UPDATE AND EXIT + + 000310' 526300 013776' LABEL2: HRLOM V,LOCBLK ;SAVE LIST LOCATION + 000311' 316300 013777' CAMN V,LOCA ;DOES IT COMPARE WITH PREVIOUS? WFW + 000312' 312440 014004' CAME RC,MODA + 000313' 665240 000020 LABEL3: TLOA ARG,MDFF ;NO, FLAG MULTIPLY DEFINED AND SKIP + 000314' 254000 000323' JRST LABEL7 ;YES, GET RID OF EXTRA CHARS. + 000315' 660600 000020 TRO ER,ERRM ;FLAG MULTIPLY DEFINED ERROR + 000316' 254000 013137' JRST UPDATE ;UPDATE AND EXIT + + 000317' 316000 013777' LABEL4: CAMN AC0,LOCA ;DO THEY COMPARE? + 000320' 312440 014004' CAME RC,MODA + 000321' 660600 000100 LABEL5: TRO ER,ERRP ;NO, FLAG PHASE ERROR + 000322' 263740 000000 POPJ PP, + + 000323' 332000 013773' LABEL7: SKIPE LITLVL ;LABEL IN A LITERAL? + 000324' 202000 013774' MOVEM AC0,LITLBL ;YES, SAVE LABEL NAME FOR LATER + 000325' 260740 006531' PUSHJ PP,PEEK ;INSPECT A CHAR. + 000326' 306340 000072 CAIN C,":" ;COLON? + 000327' 260740 001363' PUSHJ PP,GETCHR ;YES, DISPOSE OF IT + 000330' 260740 006531' PUSHJ PP,PEEK ;EXAMINE ONE MORE CHAR. + 000331' 306340 000041 CAIN C,"!" ;EXCLAMATION? + 000332' 254000 001363' JRST GETCHR ;YES, INDEED + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 14 +MACRO 10 24-APR-78 02:11 LABEL PROCESSOR + + 000333' 263740 000000 POPJ PP, + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 15 +MACRO 10 24-APR-78 02:11 ATOM PROCESSOR + + SUBTTL ATOM PROCESSOR + 000334' 260740 000363' ATOM: PUSHJ PP,CELL ;GET FIRST CELL + 000335' 603600 020000 TLNE IO,NUMSW ;IF NON-NUMERIC + 000336' 302340 000042 ATOM1: CAIE C,42 ;OR NOT A BINARY SHIFT, + 000337' 263740 000000 POPJ PP, ;EXIT + + 000340' 261740 000000 PUSH PP,AC0 ;STACK REGISTERS, ITS A BINARY SHIFT + 000341' 261740 000001 PUSH PP,AC1 + 000342' 261740 000011 PUSH PP,RC + 000343' 261740 000015 PUSH PP,RX + 000344' 541640 000012 HRRI RX,^D10 ;COMPUTE SHIFT RADIX 10 + 000345' 260740 000362' PUSHJ PP,CELLSF ;GET SHIFT + 000346' 200240 000011 MOVE ARG,RC ;SAVE RELOCATION + 000347' 262740 000015 POP PP,RX ;RESTORE REGISTERS + 000350' 262740 000011 POP PP,RC + 000351' 262740 000001 POP PP,AC1 + 000352' 210200 000000 MOVN SX,AC0 ;USE NEGATIVE OF SHIFT + 000353' 262740 000000 POP PP,AC0 + 000354' 326240 000441' JUMPN ARG,NUMER2 ;IF NOT ABSOLUTE + 000355' 607600 020000 TLNN IO,NUMSW ;AND NUMERIC, + 000356' 254000 000441' JRST NUMER2 ;FLAG ERROR + 000357' 246004 000043 LSHC AC0,^D35(SX) + 000360' 242444 000043 LSH RC,^D35(SX) + 000361' 254000 000336' JRST ATOM1 ;TEST FOR ANOTHER + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 16 +MACRO 10 24-APR-78 02:11 ATOM PROCESSOR + + 000362' 661600 400000 CELLSF: TLO IO,FLDSW + 000363' 403000 000011 CELL: SETZB AC0,RC ;CLEAR RESULT AND RELOCATION + 000364' 403040 000002 SETZB AC1,AC2 ;CLEAR WORK REGISTERS + 000365' 202740 014014' MOVEM PP,PPTEMP ;SAVE PUSHDOWN POINTER + 000366' 621600 020000 TLZ IO,NUMSW + 000367' 625640 040240 TLZA FR,NEGSW!DCFSW!RADXSW + + 000370' 661600 400000 CELL1: TLO IO,FLDSW + 000371' 260740 004543' PUSHJ PP,BYPASS + 000372' 135300 014606' LDB V,[POINT 4,CSTAT(C),14] ;GET CODE + 000373' 256006 000374' XCT .+1(V) ;EXECUTE, INDEX VIA BITS 11,12,13,14 OF CSTAT TABLE + 000374' 254000 000370' JRST CELL1 ;0; BLANK, (TAB OR "+") + 000375' 254000 000407' JRST LETTER ;1; LETTER ] $ % ( ) , ; > + 000376' 641640 000200 TLC FR,NEGSW ;2; "-" + 000377' 661640 020000 TLO FR,INDSW ;3; "@" + 000400' 254000 000717' JRST NUM1 ;4; NUMERIC 0 - 9 + 000401' 254000 000662' JRST ANGLB ;5; "<" + 000402' 254000 000557' JRST SQBRK ;6; "[" + 000403' 254000 000456' JRST QUOTES ;7; ""","'" + 000404' 254000 000523' JRST QUAL ;10; "^" + 000405' 254000 000700' JRST PERIOD ;11; "." + 000406' 664600 200000 TROA ER,ERRQ ;12; ERROR, FLAG AND TREAT AS DELIMITER + ;12; ! # & * / : = ? \ _ + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 17 +MACRO 10 24-APR-78 02:11 ATOM PROCESSOR + + 000407' 665100 440600 LETTER: TLOA AC2,(POINT 6,AC0,) ;SET BYTE POINTER + 000410' 260740 001363' LETTE1: PUSHJ PP,GETCHR ;GET CHARACTER + 000411' 607400 000006 TLNN CS,6 ;ALPHA-NUMERIC? + 000412' 254000 000416' JRST LETTE3 ;NO,TEST FOR VARIABLE + 000413' 603100 770000 TLNE AC2,770000 ;STORE ONLY SIX BYTES + 000414' 136340 000002 LETTE2: IDPB C,AC2 ;RETURN FROM PERIOD + 000415' 254000 000410' JRST LETTE1 + + 000416' 302340 000003 LETTE3: CAIE C,03 ;"#"? + 000417' 263740 000000 POPJ PP, + 000420' 322000 000455' JUMPE AC0,POPOUT ;TEST FOR NULL + 000421' 260740 006531' PUSHJ PP,PEEK ;PEEK AT NEXT CHAR. + 000422' 306340 000043 CAIN C,"#" ;IS IT 2ND #? + 000423' 254000 000435' JRST LETTE4 ;YES, THEN IT'S AN EXTERN + 000424' 661600 000040 TLO IO,DEFCRS + 000425' 260740 012610' PUSHJ PP,SSRCH ;YES, SEARCH FOR SYMBOL (OPERAND) + 000426' 205240 402000 MOVSI ARG,SYMF!UNDF ;NOT FOUND, FLAGAS UNDEFINED SYM. + 000427' 607240 002000 TLNN ARG,UNDF ;UNDEFINED? + 000430' 254000 001363' JRST GETCHR ;NO, GET NEXT CHAR AND RETURN + 000431' 661240 000100 TLO ARG,VARF ;YES, FLAG AS A VARIABLE + 000432' 660600 002000 TRO ER,ERRU ;SET UNDEFINED ERROR FLAG + 000433' 260740 013035' PUSHJ PP,INSERZ ;INSERT IT WITH A ZERO VALUE + 000434' 254000 000442' JRST GETDEL + + 000435' 260740 001363' LETTE4: PUSHJ PP,GETCHR ;AND SCAN PAST IT + 000436' 260740 001363' PUSHJ PP,GETCHR ;GET RID OF # + 000437' 254000 004006' JRST EXTER1 ;PUT IN SYMBOL TABLE + + 000440' 403000 000011 NUMER1: SETZB AC0,RC ;RETURN ZERO + 000441' 660600 000400 NUMER2: TRO ER,ERRN ;FLAG ERROR + + 000442' 260740 004543' GETDEL: PUSHJ PP,BYPASS + 000443' 322340 000442' GETDE1: JUMPE C,.-1 + 000444' 201040 000000 MOVEI AC1,0 + 000445' 661600 420000 GETDE3: TLO IO,NUMSW!FLDSW ;FLAG NUMERIC + 000446' 607640 000200 TLNN FR,NEGSW ;IS ATOM NEGATIVE? + 000447' 263740 000000 POPJ PP, ;NO, EXIT + 000450' 322040 000453' JUMPE AC1,GETDE2 + 000451' 213000 000001 MOVNS AC1 + 000452' 654000 014607' TDCA AC0,[-1] + 000453' 213000 000000 GETDE2: MOVNS AC0 ;YES, NEGATE VALUE + 000454' 213000 000011 MOVNS RC ;AND RELOCATION + 000455' 263740 000000 POPOUT: POPJ PP, ;EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 18 +MACRO 10 24-APR-78 02:11 ATOM PROCESSOR + + 000456' 302340 000007 QUOTES: CAIE C,"'"-40 ;IS IT "'" + 000457' 254000 000465' JRST QUOTE ;NO MUST BE """ + 000460' 254000 000507' JRST SQUOTE ;YES + + 000461' 603000 376000 QUOTE0: TLNE AC0,376000 ;5 CHARACTERS STORED ALREADY? + 000462' 660600 200000 TRO ER,ERRQ ;YES, GIVE WARNING + 000463' 240000 000007 ASH AC0,7 + 000464' 434000 000007 IOR AC0,C + 000465' 260740 001415' QUOTE: PUSHJ PP,CHARAC ;GET 7-BIT ASCII + 000466' 307340 000015 CAIG C,15 ;TEST FOR LF, VT, FF OR CR + 000467' 305340 000012 CAIGE C,12 + 000470' 254000 000472' JRST .+2 ;NO, SO ALL IS WELL + 000471' 254000 000501' JRST QUOTE2 ;ESCAPE WITH Q ERROR + 000472' 302340 000042 CAIE C,42 + 000473' 254000 000461' JRST QUOTE0 + 000474' 260740 006531' PUSHJ PP,PEEK ;LOOK AT NEXT CHAR. + 000475' 302340 000042 CAIE C,42 + 000476' 254000 000502' JRST QUOTE1 ;RESTORE REPEAT LEVEL AND QUIT + 000477' 260740 001415' PUSHJ PP,CHARAC ;GET NEXT CHAR. + 000500' 254000 000461' JRST QUOTE0 ;USE IT + + 000501' 660600 200000 QUOTE2: TRO ER,ERRQ ;SET Q ERROR + 000502' 254000 000442' QUOTE1: JRST GETDEL + + 000503' 603000 770000 SQUOT0: TLNE AC0,770000 ;SIX CHARS. STORED ALREADY ? + 000504' 660600 200000 TRO ER,ERRQ ;YES + 000505' 242000 000006 LSH AC0,6 + 000506' 435007 777740 IORI AC0,-40(C) ;OR IN SIXBIT CHAR. + + 000507' 260740 001415' SQUOTE: PUSHJ PP,CHARAC + 000510' 307340 000015 CAIG C,CR + 000511' 305340 000012 CAIGE C,LF + 000512' 254000 000514' JRST .+2 + 000513' 254000 000502' JRST QUOTE1 + 000514' 302340 000047 CAIE C,"'" + 000515' 254000 000503' JRST SQUOT0 + 000516' 260740 006531' PUSHJ PP,PEEK + 000517' 302340 000047 CAIE C,"'" + 000520' 254000 000502' JRST QUOTE1 + 000521' 260740 001415' PUSHJ PP,CHARAC + 000522' 254000 000503' JRST SQUOT0 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 19 +MACRO 10 24-APR-78 02:11 ATOM PROCESSOR + + 000523' 260740 004543' QUAL: PUSHJ PP,BYPAS1 ;SKIP BLANKS, GET NEXT CHARACTER + 000524' 306340 000042 CAIN C,42 ;"B"? + 000525' 254000 000540' JRST QUAL2 ;YES, RADIX=D2 + 000526' 306340 000057 CAIN C,57 ;"O"? + 000527' 254000 000537' JRST QUAL8 ;YES, RADIX=D8 + 000530' 306340 000046 CAIN C,46 ;"F"? + 000531' 254000 000713' JRST NUMDF ;YES, PROCESS DECIMAL FRACTION + 000532' 306340 000054 CAIN C,54 ;"L"? + 000533' 254000 000550' JRST QUALL ;YES + 000534' 302340 000044 CAIE C,44 ;"D"? + 000535' 254000 000440' JRST NUMER1 ;NO, FLAG NUMERIC ERROR + 000536' 271100 000002 ADDI AC2,2 + 000537' 271100 000006 QUAL8: ADDI AC2,6 + 000540' 271100 000002 QUAL2: ADDI AC2,2 + 000541' 261740 000015 PUSH PP,RX + 000542' 540640 000002 HRR RX,AC2 + 000543' 260740 000362' PUSHJ PP,CELLSF + 000544' 262740 000015 QUAL2A: POP PP,RX + 000545' 607600 020000 TLNN IO,NUMSW + 000546' 254000 000440' JRST NUMER1 + 000547' 254000 000443' JRST GETDE1 + + 000550' 261740 000015 QUALL: PUSH PP,FR + 000551' 260740 000362' PUSHJ PP,CELLSF + 000552' 200100 000000 MOVE AC2,AC0 + 000553' 201000 000044 MOVEI AC0,^D36 + 000554' 322100 000544' JUMPE AC2,QUAL2A + 000555' 242100 777777 LSH AC2,-1 + 000556' 364000 000554' SOJA AC0,.-2 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 20 +MACRO 10 24-APR-78 02:11 LITERAL PROCESSOR + + SUBTTL LITERAL PROCESSOR + + 000557' 261740 000015 SQBRK: PUSH PP,FR + 000560' 261740 013742' PUSH PP,EXTPNT ;ALLOW EXTERN TO PRECEDE LIT IN XWD + 000561' 402000 013742' SETZM EXTPNT + 000562' 332000 013773' SKIPE LITLVL ;SAVE SEQNO AND PAGE IF NOT IN LIT ALREADY + 000563' 254000 000570' JRST SQB5 + 000564' 200340 014101' MOVE C,SEQNO2 + 000565' 202340 013756' MOVEM C,LITSEQ + 000566' 200340 014100' MOVE C,PAGENO + 000567' 202340 013755' MOVEM C,LITPG + 000570' 265100 003007' SQB5: JSP AC2,SVSTOW + 000571' 260740 000125' SQB3: PUSHJ PP,STMNT + 000572' 306340 000075 CAIN C,75 ;CHECK FOR ] + 000573' 254000 000627' JRST SQB1 + 000574' 661600 000004 TLO IO,IORPTC + 000575' 603640 200000 TLNE FR,MWLFLG ;CALL IT ] IF NOT MULTI-WORD FLAG + 000576' 254000 000630' JRST SQB2 ;BUT REPEAT LAST CHARACTER + 000577' 260740 004543' PUSHJ PP,BYPAS1 + 000600' 306340 000033 CAIN C,EOL + 000601' 665600 000004 TLOA IO,IORPTC + 000602' 660600 200000 TRO ER,ERRQ + 000603' 260740 001415' SQB4: PUSHJ PP,CHARAC + 000604' 306340 000073 CAIN C,";" ;COMMENT? + 000605' 254000 000622' JRST SQB6 ;YES, IGNORE SQUARE BRACKETS + 000606' 306340 000135 CAIN C,"]" ;LOOK FOR TERMINAL SQB + 000607' 606600 777760 TRNN ER,ERRORS ;IN CASE OF ERROR IN LITERAL + 000610' 254000 000612' JRST .+2 ;NO ALL IS WELL + 000611' 254000 000627' JRST SQB1 ;FINISH THE LITERAL NOW!! + 000612' 307340 000015 CAIG C,CR ;LOOK FOR END OF LINE + 000613' 306340 000011 CAIN C,HT + 000614' 254000 000603' JRST SQB4 + 000615' 260740 002020' SQB4A: PUSHJ PP,OUTIML ;DUMP + 000616' 260740 001415' PUSHJ PP,CHARAC ;GET ANOTHER CHAR. + 000617' 331000 013452' SKIPL LIMBO ;CRLF FLAG + 000620' 661600 000004 TLO IO,IORPTC ;NO REPEAT + 000621' 254000 000571' JRST SQB3 + + 000622' 260740 001415' SQB6: PUSHJ PP,CHARAC ;GET A CHARACTER + 000623' 307340 000015 CAIG C,CR + 000624' 306340 000011 CAIN C,HT ;LOOK FOR END OF LINE CHAR. + 000625' 254000 000622' JRST SQB6 ;NOT YET + 000626' 254000 000615' JRST SQB4A ;GOT IT + + 000627' 621600 000004 SQB1: TLZ IO,IORPTC + 000630' 260740 001273' SQB2: PUSHJ PP,STOLIT + 000631' 265100 003015' JSP AC2,GTSTOW + 000632' 332000 013774' SKIPE LITLBL ;NEED TO FIXUP A LABEL? + 000633' 260740 000641' PUSHJ PP,RELBLE ;YES, USE LOC OF LITERAL + 000634' 262740 013742' POP PP,EXTPNT + 000635' 262740 000015 POP PP,FR + 000636' 332000 013773' SKIPE LITLVL ;WERE WE NESTED? + 000637' 321640 000441' JUMP1 NUMER2 ;YES, FORCE ERROR IF PASS 1 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 20-1 +MACRO 10 24-APR-78 02:11 LITERAL PROCESSOR + + 000640' 254000 000442' JRST GETDEL + + 000641' 261740 000000 RELBLE: PUSH PP,AC0 ;SAVE LOCATION COUNTER + 000642' 261740 000011 PUSH PP,RC ;AND RELOCATION + 000643' 200000 013774' MOVE AC0,LITLBL ;SYMBOL WE NEED + 000644' 402000 013774' SETZM LITLBL ;ZERO INDICATOR + 000645' 260740 012610' PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + 000646' 254000 000657' JRST RELBL1 ;SHOULD NEVER HAPPEN + 000647' 607240 200000 TLNN ARG,TAGF ;IT BETTER BE A LABEL + 000650' 254000 000657' JRST RELBL1 ;IT WASN'T , GIVE UP BEFORE SOME HARM IS DONE + 000651' 621240 007000 TLZ ARG,UNDF!EXTF!PNTF ;CLEAR FLAGS NOW + 000652' 262740 000011 POP PP,RC ;GET LITERAL RELOCATION + 000653' 200317 000000 MOVE V,(PP) ;GET VALUE (LOC COUNTER) + 000654' 260740 013137' PUSHJ PP,UPDATE ;UPDATE VALUE + 000655' 262740 000000 POP PP,AC0 ;RESTORE LITERAL COUNT + 000656' 263740 000000 POPJ PP, ;RETURN + + 000657' 262740 000011 RELBL1: POP PP,RC ;RESTORE RC + 000660' 262740 000000 POP PP,AC0 ;AND AC0 + 000661' 263740 000000 POPJ PP, ;JUST RETURN + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 21 +MACRO 10 24-APR-78 02:11 LITERAL PROCESSOR + + 000662' 261740 000015 ANGLB: PUSH PP,FR + 000663' 621640 020000 TLZ FR,INDSW + 000664' 260740 000334' PUSHJ PP,ATOM + 000665' 607600 020000 TLNN IO,NUMSW + 000666' 302340 000035 CAIE C,35 + 000667' 254000 000673' JRST ANGLB1 + 000670' 260740 004126' PUSHJ PP,ASSIG1 + 000671' 200000 000006 MOVE AC0,V + 000672' 254000 000674' JRST ANGLB2 + + 000673' 260740 001065' ANGLB1: PUSHJ PP,EVALHA + 000674' 262740 000015 ANGLB2: POP PP,FR + 000675' 302340 000036 CAIE C,36 + 000676' 660600 000400 TRO ER,ERRN + 000677' 254000 000442' JRST GETDEL + + 000700' 260740 001363' PERIOD: PUSHJ PP,GETCHR ;LOOK AT NEXT CHARACTER + 000701' 607400 000002 TLNN CS,2 ;ALPHABETIC? + 000702' 254000 000706' JRST PERNUM ;NO, TEST NUMERIC + 000703' 205000 160000 MOVSI AC0,(SIXBIT /./) ;YES, PUT PERIOD IN AC0 + 000704' 205100 360600 MOVSI AC2,(POINT 6,AC0,5) ;SET BYTE POINTER + 000705' 254000 000414' JRST LETTE2 ;AND TREAT AS SYMBOL + + 000706' 603400 000004 PERNUM: TLNE CS,4 ;IS IT A NUMBER + 000707' 254000 000745' JRST NUM32 ;YES + 000710' 200000 013777' MOVE AC0,LOCA ;NO. CURRENT LOC SYMBOL (.) + 000711' 200440 014004' MOVE RC,MODA ;SET TO CURRENT ASSEMBLY MODE + 000712' 254000 000443' JRST GETDE1 ;GET DELIMITER + 000713' 661640 000040 NUMDF: TLO FR,DCFSW ;SET DECIMAL FRACTION FLAG + 000714' 260740 001363' NUM: PUSHJ PP,GETCHR ;GET A CHARACTER + 000715' 607400 000004 TLNN CS,4 ;NUMERIC? + 000716' 254000 000727' JRST NUM10 ;NO + 000717' 275340 000020 NUM1: SUBI C,20 ;CONVERT TO OCTAL + 000720' 261740 000007 PUSH PP,C ;STACK FOR FLOATING POINT + 000721' 200000 000001 MOVE AC0,AC1 + 000722' 225015 000000 MULI AC0,0(RX) + 000723' 270040 000007 ADD AC1,C ;ADD IN LAST VALUE + 000724' 301355 000000 CAIL C,0(RX) ;IS NUMBER LESS THAN CURRENT RADIX? + 000725' 661640 040000 TLO FR,RADXSW ;NO, SET FLAG + 000726' 344100 000714' AOJA AC2,NUM ;YES, AC2=NO. OF DECIMAL PLACES + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 22 +MACRO 10 24-APR-78 02:11 LITERAL PROCESSOR + + 000727' 302340 000016 NUM10: CAIE C,16 ;PERIOD? + 000730' 603640 000040 TLNE FR,DCFSW ;OR DECIMAL FRACTION? + 000731' 254000 000741' JRST NUM30 ;YES, PROCESS FLOATING POINT + 000732' 242040 000001 LSH AC1,1 ;NO, CLEAR THE SIGN BIT + 000733' 246000 000043 LSHC AC0,^D35 ;AND SHIFT INTO AC0 + 000734' 200740 014014' MOVE PP,PPTEMP ;RESTORE PP + 000735' 362100 000443' SOJE AC2,GETDE1 ;NO RADIX ERROR TEST IF ONE DIGIT + 000736' 603640 040000 TLNE FR,RADXSW ;WAS ILLEGAL NUMBER ENCOUNTERED? + 000737' 660600 000400 TRO ER,ERRN ;YES, FLAG N ERROR + 000740' 254000 000443' JRST GETDE1 + + 000741' 302340 000042 NUM30: CAIE C,"B"-40 ;IF "B" THEN MISSING "." + 000742' 260740 001363' NUM31: PUSHJ PP,GETCHR + 000743' 607400 000004 TLNN CS,4 ;NUMERIC? + 000744' 254000 000750' JRST NUM40 ;NO + 000745' 275340 000020 NUM32: SUBI C,20 + 000746' 261740 000007 PUSH PP,C + 000747' 254000 000742' JRST NUM31 + + 000750' 261740 000015 NUM40: PUSH PP,FR ;STACK VALUES + 000751' 541640 000012 HRRI RX,^D10 + 000752' 261740 000002 PUSH PP,AC2 + 000753' 261740 014014' PUSH PP,PPTEMP + 000754' 306340 000045 CAIN C,45 ;"E"? + JRST [PUSHJ PP,PEEK ;GET NEXT CHAR + PUSH PP,C ;SAVE NEXT CHAR + PUSHJ PP,CELL ;YES, GET EXPONENT + POP PP,C ;GET FIRST CHAR. AFTER E + CAIN V,4 ;MUST HAVE NUMERICAL STATUS + JRST .+2 ;SKIP RETURN + CAIN C,"<" ;ALLOW <EXP> + JRST .+2 ;SKIP RETURN + SKIPN AC0 ;ERROR IF NON-ZERO EXPRESSION + TROA ER,ERRQ ;ALLOW E+,E- + SETOM RC ;FORCE NUMERICAL ERROR + 000755' 254000 014610' JRST .+2] ;SKIP RETURN + 000756' 201000 000000 MOVEI AC0,0 ;NO, ZERO EXPONENT + 000757' 262740 014014' POP PP,PPTEMP + 000760' 262740 000004 POP PP,SX + 000761' 262740 000015 POP PP,FR + 000762' 550300 000017 HRRZ V,PP + 000763' 200740 014014' MOVE PP,PPTEMP + 000764' 326440 000440' JUMPN RC,NUMER1 ;EXPONENT MUST BE ABSOLUTE + 000765' 270200 000000 ADD SX,AC0 + 000766' 550240 000017 HRRZ ARG,PP + 000767' 270200 000005 ADD SX,ARG + 000770' 403000 000002 SETZB AC0,AC2 + 000771' 603640 000040 TLNE FR,DCFSW + 000772' 254000 001013' JRST NUM60 + 000773' 255400 000774' JOV NUM50 ;CLEAR OVERFLOW FLAG + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 23 +MACRO 10 24-APR-78 02:11 LITERAL PROCESSOR + + + 000774' 265140 001027' NUM50: JSP SDEL,NUMUP ;FLOATING POINT + 000775' 254000 001002' JRST NUM52 ;END OF WHOLE NUMBERS + 000776' 164000 014624' FMPR AC0,[10.0] ;MULTIPLY BY 10 + 000777' 661040 233000 TLO AC1,233000 ;CONVERT TO FLOATING POINT + 001000' 144000 000001 FADR AC0,AC1 ;ADD IT IN + 001001' 254000 000774' JRST NUM50 + + 001002' 265140 001035' NUM52: JSP SDEL,NUMDN ;PROCESS FRACTION + 001003' 144000 000002 FADR AC0,AC2 + 001004' 255400 000440' JOV NUMER1 ;TEST FOR OVERFLOW + 001005' 254000 000443' JRST GETDE1 + + 001006' 661040 233000 TLO AC1,233000 + 001007' 602040 777777 TRNE AC1,-1 + 001010' 144100 000001 FADR AC2,AC1 ;ACCUMULATE FRACTION + 001011' 174100 014624' FDVR AC2,[10.0] + 001012' 254000 001002' JRST NUM52 + + 001013' 265140 001027' NUM60: JSP SDEL,NUMUP + 001014' 254000 001020' JRST NUM62 + 001015' 221000 000012 IMULI AC0,^D10 + 001016' 270000 000001 ADD AC0,AC1 + 001017' 254000 001013' JRST NUM60 + + 001020' 246040 777734 NUM62: LSHC AC1,-^D36 + 001021' 265140 001035' JSP SDEL,NUMDN + 001022' 246040 000045 LSHC AC1,^D37 + 001023' 260740 004544' PUSHJ PP,BYPAS2 + 001024' 254000 000445' JRST GETDE3 + + 001025' 235040 000012 DIVI AC1,^D10 + 001026' 254000 001020' JRST NUM62 + + 001027' 201040 000000 NUMUP: MOVEI AC1,0 + 001030' 311240 000004 CAML ARG,SX + 001031' 254003 000000 JRST 0(SDEL) + 001032' 315240 000006 CAMGE ARG,V + 001033' 200045 000001 MOVE AC1,1(ARG) + 001034' 344243 000001 AOJA ARG,1(SDEL) + + 001035' 201040 000000 NUMDN: MOVEI AC1,0 + 001036' 317300 000004 CAMG V,SX + 001037' 254003 000000 JRST 0(SDEL) + 001040' 313300 000005 CAMLE V,ARG + 001041' 200046 000000 MOVE AC1,0(V) + 001042' 364303 000003 SOJA V,3(SDEL) + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 24 +MACRO 10 24-APR-78 02:11 GETSYM + + SUBTTL GETSYM + 001043' 201000 000000 GETSYM: MOVEI AC0,0 ;CLEAR AC0 + 001044' 205040 440600 MOVSI AC1,(POINT 6,AC0) ;PUT POINTER IN AC1 + 001045' 260740 004543' PUSHJ PP,BYPASS ;SKIP LEADING BLANKS + 001046' 607400 000002 TLNN CS,2 ;ALPHABETIC? + 001047' 254000 001055' JRST GETSY1 ;NO, ERROR + 001050' 302340 000016 CAIE C,16 ;PERIOD? + 001051' 254000 001056' JRST GETSY2 ;NO, A VALID SYMBOL + 001052' 136340 000001 IDPB C,AC1 ;STORE THE CHARACTER + 001053' 260740 001363' PUSHJ PP,GETCHR ;YES, TEST NEXT CHARACTER + 001054' 607400 000002 TLNN CS,2 ;ALPHABETIC? + 001055' 664600 040000 GETSY1: TROA ER,ERRA + 001056' 350017 000000 GETSY2: AOS 0(PP) ;YES, SET SKIP EXIT + 001057' 607400 000006 GETSY3: TLNN CS,6 ;ALPHA-NUMERIC? + 001060' 254000 004544' JRST BYPAS2 ;NO, GET DELIMITER + 001061' 603040 770000 TLNE AC1,770000 ;YES, HAVE WE STORED SIX? + 001062' 136340 000001 IDPB C,AC1 ;NO, STORE IT + 001063' 260740 001363' PUSHJ PP,GETCHR + 001064' 254000 001057' JRST GETSY3 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 25 +MACRO 10 24-APR-78 02:11 EXPRESSION EVALUATOR + + SUBTTL EXPRESSION EVALUATOR + 000000 CV== AC0 ;CURRENT VALUE + 000001 PV== AC1 ;PREVIOUS VALUE + 000011 RC== RC ;CURRENT RELOCATABILITY + 000002 PR== AC2 ;PREVIOUS RELOCATABILITY + 000010 CS= CS ;CURRENT STATUS + 000003 PS== SDEL ;PREVIOUS STATUS + + 001065' 661640 010000 EVALHA: TLO FR,TMPSW + 001066' 260740 001077' EVALCM: PUSHJ PP,EVALEX ;EVALUATE FIRST EXPRESSION + 001067' 261740 014625' PUSH PP,[0] ;MARK PDL + 001070' 321400 001073' JUMPCM EVALC3 ;JUMP IF COMMA + 001071' 661600 000004 TLO IO,IORPTC ;IT'S NOT,SO REPEAT + 001072' 254000 004445' JRST OP ;PROCESS IN OP + 001073' EVALC3: + 001073' 261740 014625' PUSH PP,[0] ;STORE ZERO'S ON PDL + 001074' 261740 014625' PUSH PP,[0] ;....... + 001075' 205100 270417 MOVSI AC2,(POINT 4,(PP),12) + 001076' 254000 004454' JRST OP1B ;PROCESS IN OP + + 001077' 661600 400000 EVALEX: TLO IO,FLDSW + 001100' 261740 014626' PUSH PP,[XWD TNODE,0] ;MARK THE LIST 200000,,0 + 001101' 627640 010000 TLZN FR,TMPSW + 001102' 260740 000334' EVATOM: PUSHJ PP,ATOM ;GET THE NEXT ATOM + 001103' 322000 001177' JUMPE AC0,EVGETD ;TEST FOR NULL/ZERO + 001104' 663600 020000 TLOE IO,NUMSW ;SET NUMERIC, WAS IT PREVIOUSLY? + 001105' 254000 001200' JRST EVGETD+1 ;YES, TREAT ACCORDINGLY + 001106' 260740 012713' PUSHJ PP,SEARCH ;SEARCH FOR MACRO OR SYMBOL + 001107' 254000 001131' JRST EVOP ;NOT FOUND, TRY FOR OP-CODE + 001110' 321240 001112' JUMPL ARG,.+2 ;SKIP IF OPERAND + 001111' 260740 012613' PUSHJ PP,SSRCH1 ;OPERATOR, TRY FOR SYMBOL (OPERAND) + 001112' 260740 012603' PUSHJ PP,QSRCH ;PERFORM CROSS-REFERENCE + 001113' 327240 001116' JUMPG ARG,EVMAC ;BRANCH IF OPERATOR + 001114' 200000 000006 MOVE AC0,V ;SYMBOL, SET VALUE + 001115' 254000 001161' JRST EVTSTS ;TEST STATUS + + 001116' 603640 000200 EVMAC: TLNE FR,NEGSW ;UNARY MINUS? + 001117' 254000 001156' JRST EVERRZ ;YES, INVALID BEFORE OPERATOR + 001120' 135140 014605' LDB SDEL,[POINT 3,ARG,5] ;GET MACF/OPDF/SYNF + 001121' 361140 001156' SOJL SDEL,EVERRZ ;ERROR IF NO FLAGS + + 001122' 322340 001124' JUMPE C,.+2 ;NON-BLANK? + 001123' 661600 000004 TLO IO,IORPTC ;YES, REPEAT CHARACTER + 001124' 362140 005705' SOJE SDEL,CALLM ;MACRO IF 2 + 001125' 327140 001135' JUMPG SDEL,EVOPS ;SYNONYM IF 4 + + 001126' 200000 000006 MOVE AC0,V ;OPDEF + 001127' 201300 004445' MOVEI V,OP ;SET TRANSFER VECTOR + 001130' 254000 001141' JRST EVOPD + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 26 +MACRO 10 24-APR-78 02:11 EXPRESSION EVALUATOR + + 001131' 603640 000200 EVOP: TLNE FR,NEGSW ;OPCODE, UNARY MINUS? + 001132' 254000 001156' JRST EVERRZ ;YES, ERROR + + 001133' 260740 010754' PUSHJ PP,OPTSCH ;SEARCH SYMBOL TABLE + 001134' 254000 001154' JRST EVOPX ;NOT FOUND + 001135' 620300 200000 EVOPS: TRZ V,LITF ;CLEAR LIT INVALID FLAG + 001136' 622300 100000 TRZE V,ADDF ;SYNONYM + 001137' 254000 001154' JRST EVOPX ;PSEUDO-OP THAT GENERATES NO DATA JUMPS + 001140' 510000 000006 HLLZ AC0,V + 001141' 322340 001143' EVOPD: JUMPE C,.+2 ;OPDEF, NON-BLANK DELIMITER? + 001142' 661600 000004 TLO IO,IORPTC ;YES, REPEAT CHARACTER + 001143' 265100 003007' JSP AC2,SVSTOW + 001144' 260746 000000 PUSHJ PP,0(V) + 001145' 260740 002776' PUSHJ PP,DSTOW + 001146' 265100 003015' JSP AC2,GTSTOW + 001147' 602440 777776 TRNE RC,-2 + 001150' 542440 013742' HRRM RC,EXTPNT + 001151' 603440 777776 TLNE RC,-2 + 001152' 502440 013742' HLLM RC,EXTPNT + 001153' 254000 001204' JRST EVNUM + + 001154' 205240 402000 EVOPX: MOVSI ARG,SYMF!UNDF + 001155' 260740 013035' PUSHJ PP,INSERZ + 001156' 403000 000011 EVERRZ: SETZB AC0,RC ;CLEAR CODE AND RELOCATION + 001157' 660600 002000 EVERRU: TRO ER,ERRU + 001160' 254000 001177' JRST EVGETD + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 27 +MACRO 10 24-APR-78 02:11 EXPRESSION EVALUATOR + + 001161' 603240 002000 EVTSTS: TLNE ARG,UNDF + JRST [TRO ER,ERRU ;SET UNDEF ERROR + JUMP1 EVGETD ;TREAT AS UNDF ON PASS1 + 001162' 254000 014627' JRST .+1] ;TREAT AS EXTERNAL ON PASS2 + 001163' 607240 001000 TLNN ARG,EXTF + 001164' 254000 001173' JRST EVTSTR + 001165' 550440 000005 HRRZ RC,ARG ;GET ADRES WFW + 001166' 550240 013742' HRRZ ARG,EXTPNT ;SAVE IT WFW + 001167' 542440 013742' HRRM RC,EXTPNT ;WFW + 001170' 602240 777777 TRNE ARG,-1 ;WFW + 001171' 660600 000040 TRO ER,ERRE + 001172' 403000 000005 SETZB AC0,ARG + + 001173' 603240 000020 EVTSTR: TLNE ARG,MDFF ;MULTIPLY DEFINED? + 001174' 660600 020000 TRO ER,ERRD ;YES, FLAG IT + 001175' 603640 000200 TLNE FR,NEGSW ;NEGATIVE ATOM? + 001176' 260740 000453' PUSHJ PP,GETDE2 ;YES, NEGATE AC0 AND RC + + 001177' 603600 020000 EVGETD: TLNE IO,NUMSW ;NON BLANK FIELD + 001200' 661640 100000 TLO FR,FSNSW ;YES,SET FLAG + 001201' 260740 004544' PUSHJ PP,BYPAS2 + 001202' 603400 000006 TLNE CS,6 ;ALPHA-NUMERIC? + 001203' 661600 000004 TLO IO,IORPTC ;YES, REPEAT IT + 001204' 262740 000003 EVNUM: POP PP,PS ;POP THE PREVIOUS DELIMITER/TNODE + 001205' 661140 004000 TLO PS,4000 + 001206' 315140 000010 CAMGE PS,CS ;OPERATION REQUIRED? + 001207' 254000 001214' JRST EVPUSH ;NO, PUT VALUES BACK ON STACK + 001210' 607140 200000 TLNN PS,TNODE ;YES, HAVE WE REACHED TERMINAL NODE? + 001211' 254000 001221' JRST EVXCT ;NO, EXECUTION REQUIRED + 001212' 607400 170000 TLNN CS,170000 ;YES, ARE WE POINTING AT DEL? (& ! * / + - _) + 001213' 263740 000000 POPJ PP, ;YES, EXIT + ;NO,FALL INTO EVPUSH + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 28 +MACRO 10 24-APR-78 02:11 EXPRESSION EVALUATOR + + 001214' 261740 000003 EVPUSH: PUSH PP,PS ;STACK VALUES + 001215' 261740 000000 PUSH PP,CV + 001216' 261740 000011 PUSH PP,RC + 001217' 261740 000010 PUSH PP,CS + 001220' 254000 001102' JRST EVATOM ;GET NEXT ATOM + + 001221' 262740 000002 EVXCT: POP PP,PR ;POP PREVIOUS RELOCATABILITY + 001222' 262740 000001 POP PP,PV ;AND PREVIOUS VALUE + 001223' 135140 014632' LDB PS,[POINT 3,PS,29] ;TYPE OF OPERATION TO PS + 001224' 254003 001225' JRST .+1(PS) ;PERFORM PROPER OPERATION + 001225' 254000 000104' JRST ASSEM1 ;0; SHOULD NEVER GET HERE ;DMN + 001226' 254000 001253' JRST XMUL ;1; + 001227' 254000 001247' JRST XDIV ;2; + 001230' 254000 001244' JRST XADD ;3; + 001231' 254000 001241' JRST XSUB ;4; + 001232' 254000 001264' JRST XLRW ;5; "_" + 001233' 674000 000001 TDOA CV,PV ;6; MERGE PV INTO CV + 001234' 404000 000001 AND CV,PV ;7; AND PV INTO CV + 001235' 326440 001237' JUMPN RC,.+2 ;COMMON RELOCATION TEST + 001236' 322100 001204' EVXCT1: JUMPE PR,EVNUM + 001237' 660600 004000 TRO ER,ERRR ;BOTH MUST BE FIXED + 001240' 254000 001204' JRST EVNUM ;GO TRY AGAIN + + 001241' 276040 000000 XSUB: SUBM PV,CV + 001242' 276100 000011 SUBM PR,RC + 001243' 254000 001204' JRST EVNUM + + 001244' 272040 000000 XADD: ADDM PV,CV + 001245' 272100 000011 ADDM PR,RC + 001246' 254000 001204' JRST EVNUM + + 001247' 230100 000000 XDIV: IDIV PR,CV ;CORRECT RELOCATABILITY + 001250' 232040 000000 IDIVM PV,CV + 001251' 250100 000011 XDIV1: EXCH PR,RC ;TAKE RELOCATION OF NUMERATOR + 001252' 254000 001236' JRST EVXCT1 + + 001253' 322100 001256' XMUL: JUMPE PR,XMUL1 ;AT LEAST ONE OPERAND + 001254' 322440 001256' JUMPE RC,XMUL1 ;MUST BE FIXED + 001255' 660600 004000 TRO ER,ERRR + 001256' 436100 000011 XMUL1: IORM PR,RC ;GET RELOCATION TO RC + 001257' 315040 000000 CAMGE PV,CV ;FIND THE GREATER + 001260' 250040 000000 EXCH PV,CV ;FIX IN CASE CV=0,OR 1 + 001261' 222040 000011 IMULM PV,RC + 001262' 222040 000000 IMULM PV,CV + 001263' 254000 001204' JRST EVNUM + 001264' 250040 000000 XLRW: EXCH PV,CV + 001265' 242001 000000 LSH CV,0(PV) + 001266' 242101 000000 LSH PR,0(PV) + 001267' 254000 001251' JRST XDIV1 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 29 +MACRO 10 24-APR-78 02:11 LITERAL STORAGE HANDLER + + SUBTTL LITERAL STORAGE HANDLER + + 001270' STOLER: + 001270' 403000 000011 SETZB AC0,RC ;ERROR, NO CODE STORED + 001271' 260740 002751' PUSHJ PP,STOW ;STOW ZERO + 001272' 660600 010000 TRO ER,ERRL ;AND FLAG THE ERROR + + 001273' 200140 013555' STOLIT: MOVE SDEL,STPX + 001274' 274140 013556' SUB SDEL,STPY ;COMPUTE NUMBER OF WORDS + 001275' 322140 001270' JUMPE SDEL,STOLER ;ERROR IF NONE STORED + 001276' 606600 777760 TRNN ER,ERRORS ;ANY ERRORS? + 001277' 254000 001303' JRST STOL06 ;NO + 001300' 325640 001342' JUMP2 STOL22 ;YES, NO SEARCH. BRANCH IF PASS2 + 001301' 272140 013506' ADDM SDEL,LITCNT ;PASS ONE, UPDATE COUNT + 001302' 254000 003003' JRST STOWI ;INITIALIZE STOW + + 001303' 201200 013501' STOL06: MOVEI SX,LITAB ;PREPARE FOR SEARCH + 001304' 200240 013555' MOVE ARG,STPX ;SAVE IN THE EVENT OF MULTIPLE-WORD + 001305' 504240 013556' HRL ARG,STPY + 001306' 200100 013507' MOVE AC2,LITNUM + 001307' 201140 000000 MOVEI SDEL,0 + 001310' 260740 002776' STOL08: PUSHJ PP,DSTOW ;GET VALUE WFW + + 001311' 361100 001344' STOL10: SOJL AC2,STOL24 ;TEST FOR END + 001312' 200204 000000 MOVE SX,0(SX) ;NO, GET NEXT STORAGE CELL + 001313' 200304 777777 MOVE V,-1(SX) ;GET RELOCATION BITS WFW + 001314' 316004 777776 CAMN AC0,-2(SX) ;DO CODES COMPARE? WFW + 001315' 312440 000006 CAME RC,V ;YES, HOW ABOUT RELOCATION? + 001316' 344140 001311' AOJA SDEL,STOL10 ;NO, TRY AGAIN + 001317' 335000 013555' SKIPGE STPX ;YES, MULTI-WORD? + 001320' 254000 001355' JRST STOL26 ;NO, JUST RETURN LOCATION + 001321' 202100 013517' MOVEM AC2,SAVBLK+AC2 ;YES, SAVE STARTING INFO + 001322' 202200 013521' MOVEM SX,SAVBLK+SX + + 001323' 361100 001343' STOL12: SOJL AC2,STOL23 ;TEST FOR END + 001324' 260740 002776' PUSHJ PP,DSTOW ;GET NEXT WORD WFW + 001325' 200204 000000 MOVE SX,0(SX) ;UPDATE POINTER + 001326' 200304 777777 MOVE V,-1(SX) ;GET RELOCATION WFW + 001327' 316004 777776 CAMN AC0,-2(SX) ;COMPARE VALUE WFW + 001330' 312440 000006 CAME RC,V ;AND RELOCATION + 001331' 254000 001335' JRST STOL14 ;NO MATCH, TRY AGAIN + 001332' 331000 013555' SKIPL STPX ;MATCH, HAVE WE FINISHED SEARCH? + 001333' 254000 001323' JRST STOL12 ;NO, TRY NEXT WORD + 001334' 254000 001355' JRST STOL26 ;YES, RETURN LOCATION + + 001335' 200100 013517' STOL14: MOVE AC2,SAVBLK+AC2 ;RESTORE STOW POINTERS + 001336' 200200 013521' MOVE SX,SAVBLK+SX + 001337' 572240 013555' HRREM ARG,STPX + 001340' 576240 013556' HLREM ARG,STPY + 001341' 344140 001310' AOJA SDEL,STOL08 ;BETTER LUCK NEXT TIME + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 30 +MACRO 10 24-APR-78 02:11 LITERAL STORAGE HANDLER + + + 001342' 200140 013507' STOL22: MOVE SDEL,LITNUM + 001343' 260740 002776' STOL23: PUSHJ PP,DSTOW ;DSTOW AND CONVERT + 001344' 200200 013502' STOL24: MOVE SX,LITABX ;GET CURRENT STORAGE + 001345' 260740 003533' PUSHJ PP,GETTOP ;GET NEXT CELL + 001346' 202004 777776 MOVEM AC0,-2(SX) ;STORE CODE WFW + 001347' 202444 777777 MOVEM RC,-1(SX) ;WFW + 001350' 202200 013502' MOVEM SX,LITABX ;SET POINTER TO CURRENT CELL + 001351' 350000 013507' AOS LITNUM ;INCREMENT NUMBER STORED + 001352' 350000 013506' AOS LITCNT ;INCREMENT NUMBER RESERVED + 001353' 331000 013555' SKIPL STPX ;ANY MORE CODE? + 001354' 254000 001343' JRST STOL23 ;YES + 001355' 321640 000455' STOL26: JUMP1 POPOUT ;EXIT IF PASS ONE + 001356' 200200 013505' MOVE SX,LITHDX ;GET HEADER BLOCK + 001357' 554444 777777 HLRZ RC,-1(SX) ;GET BLOCK RELOCATION + 001360' 550004 777777 HRRZ AC0,-1(SX) + 001361' 271003 000000 ADDI AC0,0(SDEL) ;COMPUTE ACTUAL LOCATION + 001362' 263740 000000 POPJ PP, ;EXIT + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 31 +MACRO 10 24-APR-78 02:11 INPUT ROUTINES + + SUBTTL INPUT ROUTINES + 001363' 260740 001415' GETCHR: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + 001364' 301340 000141 CAIL C,"A"+40 ;CHECK FOR LOWER CASE + 001365' 303340 000172 CAILE C,"Z"+40 + 001366' 254000 001370' JRST .+2 ;NOT LOWER CASE + 001367' 624340 000100 TRZA C,100 ;CONVERT LOWER CASE TO SIXBIT + 001370' 275340 000040 SUBI C,40 ;CONVERT TO SIXBIT + 001371' 307340 000077 CAIG C,77 ;CHAR GREATER THAN SIXBIT? + 001372' 325340 001404' JUMPGE C,GETCS ;TEST FOR VALID SIXBIT + 001373' 271340 000040 ADDI C,40 ;BACK TO ASCII + 001374' 306340 000011 CAIN C,HT ;CHECK FOR TAB + 001375' 254000 001403' JRST GETCS2 ;MAKE IT LOOK LIKE SPACE + 001376' 307340 000015 CAIG C,CR ;GREATER THAN CR + 001377' 307340 000011 CAIG C,HT ;GREATER THAN TAB + 001400' 254000 001406' JRST GETCS1 ;IS NOT FF,VT,LF OR CR + 001401' 201340 000033 MOVEI C,EOL ;LINE OR FORM FEED OR V TAB + 001402' 665600 000004 TLOA IO,IORPTC ;REPEAT CHARACTER + 001403' 201340 000000 GETCS2: MOVEI C,0 ;BUT TREAT AS BLANK + 001404' 200407 001456' GETCS: MOVE CS,CSTAT(C) ;GET STATUS BITS + 001405' 263740 000000 POPJ PP, ;EXIT + + 001406' 322340 001404' GETCS1: JUMPE C,GETCS ;IGNORE NULS + 001407' 640340 000100 TRC C,100 ;MAKE CHAR. VISIBLE + 001410' 201400 000136 MOVEI CS,"^" + 001411' 137400 013453' DPB CS,LBUFP ;PUT ^ IN OUTPUT + 001412' 260740 001423' PUSHJ PP,RSW2 ;ALSO MODIFIED CHAR. + 001413' 660600 200000 TRO ER,ERRQ ;FLAG Q ERROR + 001414' 254000 001363' JRST GETCHR ;BUT IGNORE CHAR. + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 32 +MACRO 10 24-APR-78 02:11 INPUT ROUTINES + + + 001415' 623600 000004 CHARAC: TLZE IO,IORPTC ;REPEAT REQUESTED? + 001416' 254000 001443' JRST CHARAX ;YES + 001417' 326540 006474' RSW0: JUMPN MRP,MREAD ;BRANCH IF TREE POINTER SET + 001420' 260740 010503' PUSHJ PP,READ + 001421' 332000 014022' RSW1: SKIPE RPOLVL ;ARE WE IN "REPEAT ONCE"? + 001422' 254000 005375' JRST REPO1 ;YES + 001423' 200400 013452' RSW2: MOVE CS,LIMBO ;GET LAST CHAR. + 001424' 202340 013452' MOVEM C,LIMBO ;STORE THIS CHAR. FOR RPTC + 001425' 306340 000012 CAIN C,LF ;LF? + 001426' 302400 000015 CAIE CS,CR ;YES,LAST CHAR. A CR? + 001427' 254000 001432' JRST RSW3 ;NO + 001430' 563000 013452' HRROS LIMBO ;YES,FLAG + 001431' 263740 000000 POPJ PP, ;AND EXIT + + 001432' 603600 000001 RSW3: TLNE IO,IOSALL ;MACRO SUPPRESS ALL? + 001433' 326540 003447' JUMPN MRP,CPOPJ ;YES,DON'T LIST IN MACRO + 001434' 377000 013737' SOSG CPL ;ANY ROOM IN THE IMAGE BUFFER? + 001435' 260740 001657' PUSHJ PP,OUTPL ;NO, OUTPUT THE PARTIAL LINE + 001436' 136340 013453' IDPB C,LBUFP ;YES, STORE IN PRINT AREA + 001437' 302340 000011 CAIE C,HT ;TAB? + 001440' 263740 000000 POPJ PP, ;NO, EXIT + 001441' 201340 000007 MOVEI C,7 + 001442' 412340 013737' ANDCAM C,CPL ;MASK + 001443' 550340 013452' CHARAX: HRRZ C,LIMBO ;GET LAST CHARACTER + 001444' 263740 000000 POPJ PP, ;EXIT + + 001445' 260740 001415' CHARL: PUSHJ PP,CHARAC ;GET AND TEST 7-BIT ASCII + 001446' 307340 000014 CAIG C,FF ;LINE OR FORM FEED OR VT? + 001447' 305340 000012 CAIGE C,LF + 001450' 263740 000000 POPJ PP, ;NO,EXIT + 001451' 332000 013773' SKIPE LITLVL ;IN LITERAL? + 001452' 254000 002020' JRST OUTIML ;YES + 001453' 260740 007473' CHARL1: PUSHJ PP,SAVEXS ;SAVE REGISTERS + 001454' 260740 001556' PUSHJ PP,OUTLIN ;DUMP THE LINE + 001455' 254000 007467' JRST RSTRXS ;RESTORE REGISTERS AND EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 33 +MACRO 10 24-APR-78 02:11 CHARACTER STATUS TABLE + + SUBTTL CHARACTER STATUS TABLE + + DEFINE GENCS (OPLVL,ATOM,AN,SQUOZ,OPTYPE,SEQNO) + <BYTE (6)OPLVL (9)ATOM (3)AN (6)SQUOZ,OPTYPE,SEQNO> + + ;OPLVL PRIORITY OF BINARY OPERATORS + ;ATOM INDEX TO JUMP TABLE AT CELL1 + ;AN TYPE OF CHARACTER + ; 1=OTHER, 2=ALPHA, 4=NUMERIC + ;SQUOZ VALUE IN RADIX 50 + ;OPTYPE INDEX TO JUMP TABLE AT EVXCT + ;SEQNO VALUE IN SIXBIT + 001456' CSTAT: + 001456' 000001 000000 GENCS 00,00,1,00,00,00 ; ' ' + 001457' 040121 000601 GENCS 04,12,1,00,06,01 ; '!' + 001460' 000071 000002 GENCS 00,07,1,00,00,02 ; '"' + 001461' 000121 000003 GENCS 00,12,1,00,00,03 ; '#' + 001462' 000012 460004 GENCS 00,01,2,46,00,04 ; '$' + 001463' 000012 470005 GENCS 00,01,2,47,00,05 ; '%' + 001464' 040121 000706 GENCS 04,12,1,00,07,06 ; '&' + 001465' 000071 000007 GENCS 00,07,1,00,00,07 ; ''' + + 001466' 000011 000010 GENCS 00,01,1,00,00,10 ; '(' + 001467' 000011 000011 GENCS 00,01,1,00,00,11 ; ')' + 001470' 020121 000112 GENCS 02,12,1,00,01,12 ; '*' + 001471' 010001 000313 GENCS 01,00,1,00,03,13 ; '+' + 001472' 400011 000014 GENCS 40,01,1,00,00,14 ; ',' + 001473' 010021 000415 GENCS 01,02,1,00,04,15 ; '-' + 001474' 000112 450016 GENCS 00,11,2,45,00,16 ; '.' + 001475' 020121 000217 GENCS 02,12,1,00,02,17 ; '/' + + 001476' 000044 010020 GENCS 00,04,4,01,00,20 ; '0' + 001477' 000044 020021 GENCS 00,04,4,02,00,21 ; '1' + 001500' 000044 030022 GENCS 00,04,4,03,00,22 ; '2' + 001501' 000044 040023 GENCS 00,04,4,04,00,23 ; '3' + 001502' 000044 050024 GENCS 00,04,4,05,00,24 ; '4' + 001503' 000044 060025 GENCS 00,04,4,06,00,25 ; '5' + 001504' 000044 070026 GENCS 00,04,4,07,00,26 ; '6' + 001505' 000044 100027 GENCS 00,04,4,10,00,27 ; '7' + + 001506' 000044 110030 GENCS 00,04,4,11,00,30 ; '8' + 001507' 000044 120031 GENCS 00,04,4,12,00,31 ; '9' + 001510' 000121 000032 GENCS 00,12,1,00,00,32 ; ':' + 001511' 000011 000033 GENCS 00,01,1,00,00,33 ; ';' + 001512' 000051 000034 GENCS 00,05,1,00,00,34 ; '<' + 001513' 000121 000035 GENCS 00,12,1,00,00,35 ; '=' + 001514' 000011 000036 GENCS 00,01,1,00,00,36 ; '>' + 001515' 000121 000037 GENCS 00,12,1,00,00,37 ; '?' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 34 +MACRO 10 24-APR-78 02:11 CHARACTER STATUS TABLE + + 001516' 000031 000040 GENCS 00,03,1,00,00,40 ; '@' + 001517' 000012 130041 GENCS 00,01,2,13,00,41 ; 'A' + 001520' 000012 140042 GENCS 00,01,2,14,00,42 ; 'B' + 001521' 000012 150043 GENCS 00,01,2,15,00,43 ; 'C' + 001522' 000012 160044 GENCS 00,01,2,16,00,44 ; 'D' + 001523' 000012 170045 GENCS 00,01,2,17,00,45 ; 'E' + 001524' 000012 200046 GENCS 00,01,2,20,00,46 ; 'F' + 001525' 000012 210047 GENCS 00,01,2,21,00,47 ; 'G' + + 001526' 000012 220050 GENCS 00,01,2,22,00,50 ; 'H' + 001527' 000012 230051 GENCS 00,01,2,23,00,51 ; 'I' + 001530' 000012 240052 GENCS 00,01,2,24,00,52 ; 'J' + 001531' 000012 250053 GENCS 00,01,2,25,00,53 ; 'K' + 001532' 000012 260054 GENCS 00,01,2,26,00,54 ; 'L' + 001533' 000012 270055 GENCS 00,01,2,27,00,55 ; 'M' + 001534' 000012 300056 GENCS 00,01,2,30,00,56 ; 'N' + 001535' 000012 310057 GENCS 00,01,2,31,00,57 ; 'O' + + 001536' 000012 320060 GENCS 00,01,2,32,00,60 ; 'P' + 001537' 000012 330061 GENCS 00,01,2,33,00,61 ; 'Q' + 001540' 000012 340062 GENCS 00,01,2,34,00,62 ; 'R' + 001541' 000012 350063 GENCS 00,01,2,35,00,63 ; 'S' + 001542' 000012 360064 GENCS 00,01,2,36,00,64 ; 'T' + 001543' 000012 370065 GENCS 00,01,2,37,00,65 ; 'U' + 001544' 000012 400066 GENCS 00,01,2,40,00,66 ; 'V' + 001545' 000012 410067 GENCS 00,01,2,41,00,67 ; 'W' + + 001546' 000012 420070 GENCS 00,01,2,42,00,70 ; 'X' + 001547' 000012 430071 GENCS 00,01,2,43,00,71 ; 'Y' + 001550' 000012 440072 GENCS 00,01,2,44,00,72 ; 'Z' + 001551' 000061 000073 GENCS 00,06,1,00,00,73 ; '[' + 001552' 000121 000074 GENCS 00,12,1,00,00,74 ; '\' + 001553' 000011 000075 GENCS 00,01,1,00,00,75 ; ']' + 001554' 000101 000076 GENCS 00,10,1,00,00,76 ; '^' + 001555' 100121 000577 GENCS 10,12,1,00,05,77 ; '_' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 35 +MACRO 10 24-APR-78 02:11 LISTING ROUTINES + + SUBTTL LISTING ROUTINES + + 001556' 606600 577760 OUTLIN: TRNN ER,ERRORS-ERRQ ;ANY ERRORS? + 001557' 603640 000010 TLNE FR,ERRQSW ;NO, IGNORE Q ERRORS? + 001560' 620600 200000 TRZ ER,ERRQ ;YES, YES, ZERO THE Q ERROR + 001561' 514000 000014 HRLZ AC0,ER ;PUT ERROR FLAGS IN AC0 LEFT + 001562' 630600 013727' TDZ ER,TYPERR + 001563' 321640 001674' JUMP1 OUTL30 ;BRANCH IF PASS ONE + 001564' 326000 001576' JUMPN AC0,OUTL02 ;JUMP IF ANY ERRORS TO FORCE PRINTING + 001565' 331000 013555' SKIPL STPX ;SKIP IF NO CODE, OTHERWISE + 001566' 254000 001574' JRST OUTL01 ;NO + 001567' 607600 000001 TLNN IO,IOSALL ;YES,SUPPRESS ALL? + 001570' 254000 001575' JRST OUTL03 ;NO + 001571' 326540 003447' JUMPN MRP,CPOPJ ;YES,EXIT IF IN MACRO + 001572' 135340 014633' LDB C,[XWD 350700,LBUF] + 001573' 302340 000015 CAIE C,15 ;FIRST CHAR CR? + 001574' 621600 010000 OUTL01: TLZ IO,IOMAC ;FORCE MACRO PRINTING + 001575' 607600 250000 OUTL03: TLNN IO,IOMSTR!IOPROG!IOMAC + 001576' 434600 013512' OUTL02: IOR ER,OUTSW ;FORCE IT. + 001577' 136000 013453' IDPB AC0,LBUFP ;STORE ZERO TERMINATOR AFTER ASCII SRC LINE + 001600' 607640 002000 TLNN FR,CREFSW ;CREF? + 001601' 260740 012674' PUSHJ PP,CLSCRF ;YES, WRITE END OF CREF DATA (177,003) + 001602' 322000 001606' JUMPE AC0,OUTL20 ;BRANCH IF NO ERRORS + 001603' 623000 000020 TLZE AC0,ERRM ;M ERROR? + 001604' 661000 000100 TLO AC0,ERRP ;M ERROR SET - SET P ERROR. + 001605' 260740 001721' PUSHJ PP,OUTLER ;PROCESS ERRORS + + 001606' 336440 013775' OUTL20: SKIPN RC,ASGBLK + 001607' 332400 013776' SKIPE CS,LOCBLK ; + 001610' 331000 013555' SKIPL STPX ;ANY BINARY? + 001611' 254000 001634' JRST OUTL23 ;YES, JUMP + 001612' 322440 001630' JUMPE RC,OUTL22 ;SEQUENCE BREAK AND NO BINARY JUMPS + 001613' 134340 013677' ILDB C,TABP ;ASSIGNMENT FALLS THROUGH + 001614' 260740 010607' PUSHJ PP,OUTL ;OUTPUT A TAB. + 001615' 134340 013677' ILDB C,TABP ;OUTPUT 2ND TAB, LOCATION FIELD + 001616' 260740 010663' PUSHJ PP,OUTC ;NEXT IS BINARY LISTING FIELD + 001617' 520400 013776' HLLO CS,LOCBLK ;LEFT HALF OF A 36BIT VALUE + 001620' 321440 001622' JUMPL RC,.+2 ;SKIP IF LEFT HALF IS NOT RELOC + 001621' 624400 000001 TRZA CS,1 ;IT IS, SET THE FLAG + 001622' 603400 777777 TLNE CS,-1 ;SKIP IF ITS A 18BIT VALUE, OTHERWISE + 001623' 260740 003035' PUSHJ PP,ONC1 ;PRINT LH OF A 36 BIT VALUE IN CS + 001624' 524400 013776' HRLO CS,LOCBLK ;PICK UP THE RIGHT HALF (18BIT VALUE) + 001625' 620411 000000 TRZ CS,0(RC) ; + 001626' 260740 003033' PUSHJ PP,ONC ;PRINT IT + 001627' 254000 001634' JRST OUTL23 ;SKIP SINGLE QUOTE TEST + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 36 +MACRO 10 24-APR-78 02:11 LISTING ROUTINES + + 001630' 260740 003033' OUTL22: PUSHJ PP,ONC ;TAB TO RH AND PRINT IT + 001631' 201340 000047 MOVEI C,"'" + 001632' 332000 014004' SKIPE MODA + 001633' 260740 010663' PUSHJ PP,OUTC + 001634' 331000 013555' OUTL23: SKIPL STPX ;ANY BINARY? + 001635' 260740 002517' PUSHJ PP,BOUT ;YES, DUMP IT + 001636' 200420 002003' MOVE CS,@OUTLI2 ;[POINT 7,LBUF] + 001637' 134340 000010 OUTL24: ILDB C,CS + 001640' 322340 001645' JUMPE C,OUTL25 + 001641' 307340 000040 CAIG C," " + 001642' 254000 001637' JRST OUTL24 + 001643' 200400 013677' MOVE CS,TABP + 001644' 260740 003061' PUSHJ PP,OUTASC ;OUTPUT TABS + 001645' 201400 013454' OUTL25: MOVEI CS,LBUF + 001646' 260740 003060' PUSHJ PP,OUTAS0 ;DUMP THE LINE + 001647' 603600 000001 TLNE IO,IOSALL ;SUPPRESSING ALL + 001650' 326540 001655' JUMPN MRP,OUTL27 ;YES,EXTRA CR IF IN MACRO + 001651' 335000 013555' OUTL26: SKIPGE STPX ;ANY BINARY? + 001652' 254000 001774' JRST OUTLI ;NO, CLEAN UP AND EXIT + 001653' 260740 002003' PUSHJ PP,OUTLI2 ;YES, INITIALIZE FOR NEXT LINE + 001654' 260740 002517' PUSHJ PP,BOUT ;YES, DUMP IT + 001655' 260740 010600' OUTL27: PUSHJ PP,OUTCR ;OUTPUT CARRIAGE RETURN + 001656' 254000 001651' JRST OUTL26 ;TEST FOR MORE BINARY + + 001657' 336000 013773' OUTPL: SKIPN LITLVL ;IF IN LITERAL + 001660' 331000 013555' SKIPL STPX ;OR CODE GENERATED + 001661' 254000 001746' JRST OUTIM ;JUST OUTPUT THE IMAGE + 001662' 336000 013775' SKIPN ASGBLK ;SKIP IF AN ASSIGNMENT + 001663' 254000 001746' JRST OUTIM ;OTHERWISE OUTPUT IMAGE + 001664' 261740 000007 PUSH PP,C ;SAVE CHAR. + 001665' 201340 000015 MOVEI C,CR + 001666' 136340 013453' IDPB C,LBUFP + 001667' 201340 000012 MOVEI C,LF + 001670' 136340 013453' IDPB C,LBUFP ;FINISH WITH CRLF + 001671' 260740 001556' PUSHJ PP,OUTLIN ;OUTPUT PARTIAL LINE + 001672' 262740 000007 POP PP,C ;RESTORE CHAR. + 001673' 254000 002003' JRST OUTLI2 ;INITIALISE REST OF LINE + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 37 +MACRO 10 24-APR-78 02:11 LISTING ROUTINES + + 001674' 350400 013555' OUTL30: AOS CS,STPX ;PASS ONE + 001675' 272400 014000' ADDM CS,LOCO ;INCREMENT OUTPUT LOCATION + 001676' 260740 003003' PUSHJ PP,STOWI ;INITIALIZE STOW + 001677' 621000 776640 TLZ AC0,ERRORS-ERRM-ERRP-ERRV + 001700' 326000 001704' JUMPN AC0,OUTL32 ;JUMP IF ERRORS + 001701' 603600 000001 TLNE IO,IOSALL ;SUPPRESSING ALL/ + 001702' 326540 003447' JUMPN MRP,CPOPJ ;YES,EXIT + 001703' 254000 002002' JRST OUTLI1 ;NO,INIT LINE + + 001704' 136000 013453' OUTL32: IDPB AC0,LBUFP ;ZERO TERNIMATOR + 001705' 434600 013512' IOR ER,OUTSW ;LIST ERRORS + 001706' 201400 013211' MOVEI CS,TAG + 001707' 260740 003065' PUSHJ PP,OUTSIX ;OUTPUT TAG + 001710' 550340 014051' HRRZ C,TAGINC + 001711' 260740 003051' PUSHJ PP,DNC ;CONVERT INCREMENT TO DECIMAL + 001712' 260740 010571' PUSHJ PP,OUTTAB ;OUTPUT TAB + 001713' 260740 001721' PUSHJ PP,OUTLER ;OUTPUT ERROR FLAGS + 001714' 260740 010571' PUSHJ PP,OUTTAB + 001715' 201400 013214' MOVEI CS,SEQNO ;ADDRESS OF SEQUENCE NO. + 001716' 332000 013214' SKIPE SEQNO ;FILE NOT SEQUENCED + 001717' 260740 003060' PUSHJ PP,OUTAS0 ;OUTPUT IT + 001720' 254000 001645' JRST OUTL25 ;OUTPUT BASIC LINE + + 001721' 261740 000014 OUTLER: PUSH PP,ER ;SAVE LISTING SWITCHES FOR LATER + 001722' 602600 000001 TRNE ER,TTYSW ;IF THIS IS ON, LISTING IS ON TTY + 001723' 620600 777760 TRZ ER,ERRORS ;SO SUPPRESS ON TTY + 001724' 630600 013512' TDZ ER,OUTSW ;BUT THIS SHOULD ONLY GO TO THE TTY + 001725' 200400 013343' MOVE CS,INDIR ;GET FILE NAME + 001726' 312400 013207' CAME CS,LSTFIL ;AND SEE IF SAME + JRST [MOVEM CS,LSTFIL ;SAVE AS LAST ONE + MOVEI CS,LSTFIL + PUSHJ PP,OUTSIX ;LIST NAME + MOVEI C," " + PUSHJ PP,OUTL + MOVE CS,PAGENO ;PRINT PAGE NUMBER TOO + 001727' 254000 014634' JRST OUTLE8] + 001730' 200400 014100' MOVE CS,PAGENO ;NOW CHECK PAGE NUMBER + 001731' 312400 014102' CAME CS,LSTPGN + OUTLE8: JRST [MOVEM CS,LSTPGN + MOVEI CS,[ASCIZ /PAGE /] + PUSHJ PP,OUTAS0 + MOVE C,PAGENO + PUSHJ PP,DNC + PUSHJ PP,OUTCR ;AND NOW FOR THE ERROR LINE + 001732' 254000 014645' JRST .+1] + 001733' 502617 000000 HLLM ER,(PP) ;RESTORE ER BUT NOT IO (LEFT HALF OF AC) + 001734' 262740 000014 POP PP,ER + 001735' 200400 014657' MOVE CS,[POINT 7,[ASCII / QXADLRUVNOPEM/]] + 001736' 134340 000010 OUTLE2: ILDB C,CS ;GET ERROR MNEMONIC + 001737' 325000 001742' JUMPGE AC0,OUTLE4 ;BRANCH IF NOT FLAGGED + 001740' 260740 010607' PUSHJ PP,OUTL ;OUTPUT THE CHARACTER + 001741' 350000 013376' AOS ERRCNT ;INCREMENT ERROR COUNT + 001742' 242000 000001 OUTLE4: LSH AC0,1 ;SHIFT NEXT FLAG INTO SIGN BIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 38 +MACRO 10 24-APR-78 02:11 LISTING ROUTINES + + 001743' 326000 001736' JUMPN AC0,OUTLE2 ;TEST FOR END + 001744' 263740 000000 POPJ PP, ;EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 39 +MACRO 10 24-APR-78 02:11 LISTING ROUTINES + + 001745' 665640 000001 OUTIM1: TLOA FR,IOSCR ;SUPPRESS CRLF AFTER LINE + 001746' 621640 000001 OUTIM: TLZ FR,IOSCR ;DON'T FOR PARTIAL LINE + 001747' 603600 000001 TLNE IO,IOSALL ;SUPPRESSING ALL? + 001750' 326540 003447' JUMPN MRP,CPOPJ ;YES ,EXIT IF IN MACRO + 001751' 321640 002002' JUMP1 OUTLI1 ;BYPASS IF PASS ONE + 001752' 261740 000014 PUSH PP,ER + 001753' 630600 013727' TDZ ER,TYPERR + 001754' 607600 250000 TLNN IO,IOMSTR!IOPROG!IOMAC + 001755' 434600 013512' IOR ER,OUTSW + 001756' 261740 000007 PUSH PP,C ;OUTPUT IMAGE + 001757' 607640 002000 TLNN FR,CREFSW + 001760' 260740 012674' PUSHJ PP,CLSCRF + 001761' 200400 013677' OUTIM2: MOVE CS,TABP + 001762' 260740 003061' PUSHJ PP,OUTASC ;OUTPUT TABS + 001763' 136340 013453' IDPB C,LBUFP ;STORE ZERO TERMINATOR + 001764' 201400 013454' MOVEI CS,LBUF + 001765' 260740 003060' PUSHJ PP,OUTAS0 ;OUTPUT THE IMAGE + 001766' 627640 000001 TLZN FR,IOSCR ;CRLF SUPPRESS? + 001767' 260740 010600' PUSHJ PP,OUTCR ;NO,OUTPUT + 001770' 262740 000007 POP PP,C + 001771' 502617 000000 HLLM ER,0(PP) + 001772' 262740 000014 POP PP,ER + 001773' 254000 002003' JRST OUTLI2 + + 001774' 603600 000001 OUTLI: TLNE IO,IOSALL ;SUPPRESSING ALL + 001775' 326540 002001' JUMPN MRP,OUTLI3 ;YES,SET FLAG IN REPEATS ALSO + 001776' 603600 004000 TLNE IO,IOPALL ;MACRO EXPANSION SUPRESS REQUESTED? + 001777' 336000 014072' SKIPN MACLVL ;YES, ARE WE IN MACRO? + 002000' 625600 010000 TLZA IO,IOMAC ;NO, CLEAR MAC FLAG + 002001' 661600 010000 OUTLI3: TLO IO,IOMAC ;YES, SET FLAG + + 002002' 620600 777763 OUTLI1: TRZ ER,ERRORS!LPTSW!TTYSW + 002003' 200400 014660' OUTLI2: MOVE CS,[POINT 7,LBUF] ;INITIALIZE BUFFERS + 002004' 202400 013453' MOVEM CS,LBUFP + 002005' 200400 014661' MOVE CS,[POINT 7,TABI,6] + 002006' 202400 013677' MOVEM CS,TABP + 002007' 201400 000130 MOVEI CS,.CPL + 002010' 202400 013737' MOVEM CS,CPL + 002011' 205400 044000 MOVSI CS,(ASCII / /) + 002012' 332000 013214' SKIPE SEQNO ;HAVE WE SEQUENCE NUMBERS? + 002013' 202400 013214' MOVEM CS,SEQNO ;YES, STORE TAB IN CASE OF MACRO + 002014' 202400 013215' MOVEM CS,SEQNO+1 ;STORE TAB AND TERMINATOR + 002015' 402000 013775' SETZM ASGBLK + 002016' 402000 013776' SETZM LOCBLK + 002017' 263740 000000 POPJ PP, + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 40 +MACRO 10 24-APR-78 02:11 LISTING ROUTINES + + 002020' 603600 000001 OUTIML: TLNE IO,IOSALL ;SUPPRESSING ALL? + 002021' 326540 003447' JUMPN MRP,CPOPJ ;YES,EXIT IF IN MACRO + 002022' 606600 577760 TRNN ER,ERRORS-ERRQ ;FOR LITERALS (MULIT-LINE) OUTPUT ERRORS + 002023' 603640 000010 TLNE FR,ERRQSW + 002024' 620600 200000 TRZ ER,ERRQ + 002025' 514400 000014 HRLZ CS,ER + 002026' 321640 002045' JUMP1 OUTML1 ;CHECK PASS1 ERRORS + 002027' 630600 013727' TDZ ER,TYPERR + 002030' 322400 001745' JUMPE CS,OUTIM1 + 002031' 261740 014625' PUSH PP,[0] ;ERRORS SHOULD BE ZEROED + 002032' 261740 000007 PUSH PP,C + 002033' 261740 000000 PUSH PP,AC0 ;SAVE AC0 IN CASE CALLED FROM ASCII + 002034' 200000 000010 MOVE AC0,CS ;ERROR ROUTINE WANTS FLAGS IN AC0 + 002035' 434600 013512' IOR ER,OUTSW + 002036' 607640 002000 TLNN FR,CREFSW + 002037' 260740 012674' PUSHJ PP,CLSCRF ;FIX CREF + 002040' 623000 000020 TLZE AC0,ERRM + 002041' 661000 000100 TLO AC0,ERRP + 002042' 260740 001721' PUSHJ PP,OUTLER ;OUTPUT THEM + 002043' 262740 000000 POP PP,AC0 + 002044' 254000 001761' JRST OUTIM2 ;AND LINE + + 002045' 621400 776640 OUTML1: TLZ CS,ERRORS-ERRM-ERRP-ERRV + 002046' 322400 002003' JUMPE CS,OUTLI2 ;NONE + 002047' 620600 001120 TRZ ER,ERRM!ERRP!ERRV + 002050' 660600 010000 TRO ER,ERRL + 002051' 261740 000014 PUSH PP,ER ;SAVE + 002052' 261740 000007 PUSH PP,C ;SAVE THIS + 002053' 261740 000000 PUSH PP,AC0 ;AS ABOVE + 002054' 200000 000010 MOVE AC0,CS ;... + 002055' 630600 013727' TDZ ER,TYPERR + 002056' 434600 013512' IOR ER,OUTSW + 002057' 201400 013211' MOVEI CS,TAG + 002060' 260740 003065' PUSHJ PP,OUTSIX + 002061' 550340 014051' HRRZ C,TAGINC + 002062' 260740 003051' PUSHJ PP,DNC + 002063' 260740 010571' PUSHJ PP,OUTTAB + 002064' 260740 001721' PUSHJ PP,OUTLER ;DO NOT FORGET ERRORS + 002065' 260740 010571' PUSHJ PP,OUTTAB + 002066' 201400 013454' MOVEI CS,LBUF ;PRINT REST OF LINE + 002067' 260740 002503' PUSHJ PP,SOUT20 + 002070' 262740 000000 POP PP,AC0 + 002071' 262740 000007 POP PP,C + 002072' 262740 000014 POP PP,ER + 002073' 254000 002003' JRST OUTLI2 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 41 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + SUBTTL OUTPUT ROUTINES + 002074' 260740 003111' UOUT: PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + 002075' 606240 004000 TRNN ARG,PNTF ;WFW + 002076' 606240 002000 TRNN ARG,UNDF + 002077' 254000 002116' JRST UOUT13 ;TEST FOR UNDF!EXTF!PNTF ON PASS2 + 002100' 325640 002122' JUMP2 UOUT10 + 002101' 607600 000020 TLNN IO,IOIOPF ;ANY IOP'S SEEN + 002102' 254000 002112' JRST UOUT12 ;NO,MAKE EXTERNAL + 002103' 205400 777700 MOVSI CS,PRMTBL-PRMEND;YES LOOKUP IN TABLE + 002104' 312010 012206' UOUT1: CAME AC0,PRMTBL(CS) ;HAVE WE A MATCH? + 002105' 253400 002111' AOBJN CS,UOUT2 ;NO,INCREMENT AND JUMP + 002106' 200250 012207' MOVE ARG,PRMTBL+1(CS);YES,GET VALUE + 002107' 202244 000000 MOVEM ARG,(SX) ;UPDATE SYMBOL TABLE + 002110' 263740 000000 POPJ PP, ;EXIT + 002111' 253400 002104' UOUT2: AOBJN CS,UOUT1 ;TEST FOR END + + 002112' 260740 004015' UOUT12: PUSHJ PP,EXTER2 ;MAKE IT EXTERNAL + 002113' 205240 002000 MOVSI ARG,UNDF ;BUT PUT UNDF BACK ON + 002114' 436244 000000 IORM ARG,(SX) ;SO MESSAGE WILL COME OUT + 002115' 263740 000000 POPJ PP, ;GET NEXT SYMBOL + + 002116' 321640 003447' UOUT13: JUMP1 CPOPJ ;RECYCLE ON PASS1 + 002117' 640240 007000 TRC ARG,UNDF!EXTF!PNTF ;CHECK FOR ALL THREE ON + 002120' 642240 007000 TRCE ARG,UNDF!EXTF!PNTF ;ARE THEY? + 002121' 263740 000000 POPJ PP, ;NO, RECYCLE + 002122' 260740 010600' UOUT10: PUSHJ PP,OUTCR + 002123' 260740 003074' PUSHJ PP,OUTSYM ;OUTPUT THE SYMBOL + 002124' 201400 014662' MOVEI CS,[SIXBIT /UNASSIGNED, DEFINED AS IF EXTERNAL @/] + 002125' 254000 003065' JRST OUTSIX ;POPJ FOR NEXT SYMBOL + + 002126' 260740 003035' UOUT30: PUSHJ PP,ONC1 ;OUTPUT THE LOCATION + 002127' 254000 004235' JRST HIGHQ ;EXIT THROUGH HIGHQ + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 42 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + ;OUTPUT THE ENTRIES + + 002130' 201340 000000 EOUT: MOVEI C,0 ;INITIALIZE THE COUNT + 002131' 200200 013552' MOVE SX,SYMBOL + 002132' 200144 000000 MOVE SDEL,0(SX) + 002133' 361140 002141' EOUT1: SOJL SDEL,EOUT2 ;TEST FOR END + 002134' 271200 000002 ADDI SX,2 + 002135' 554244 000000 HLRZ ARG,0(SX) + 002136' 411240 400600 ANDCAI ARG,SYMF!INTF!ENTF + 002137' 326240 002133' JUMPN ARG,EOUT1 ;IF INVALID, DON'T COUNT + 002140' 344340 002133' AOJA C,EOUT1 ;BUMP COUNT + + 002141' 505340 000004 EOUT2: HRLI C,4 ;BLOCK TYPE 4 + 002142' 260740 010404' PUSHJ PP,OUTBIN + 002143' 403340 000005 SETZB C,ARG + 002144' 260740 010404' PUSHJ PP,OUTBIN + 002145' 200200 013552' MOVE SX,SYMBOL + 002146' 200144 000000 MOVE SDEL,0(SX) + 002147' 201300 000022 MOVEI V,^D18 + + 002150' 361140 000455' EOUT3: SOJL SDEL,POPOUT + 002151' 271200 000002 ADDI SX,2 + 002152' 554344 000000 HLRZ C,0(SX) + 002153' 411340 400600 ANDCAI C,SYMF!INTF!ENTF + 002154' 326340 002150' JUMPN C,EOUT3 + 002155' 365300 002160' SOJGE V,EOUT4 ;TEST END OF BLOCK + 002156' 260740 010404' PUSHJ PP,OUTBIN + 002157' 201300 000021 MOVEI V,^D17 ;WFW + 002160' 200004 777777 EOUT4: MOVE AC0,-1(SX) + 002161' 260740 004770' PUSHJ PP,SQOZE + 002162' 200340 000000 MOVE C,AC0 + 002163' 260740 010404' PUSHJ PP,OUTBIN + 002164' 254000 002150' JRST EOUT3 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 43 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + ;OUTPUT THE SYMBOLS + + 002165' 336000 013730' SOUT: SKIPN IONSYM ;SKIP IF NOSYM SEEN + 002166' 606600 000003 TRNN ER,LPTSW!TTYSW ;A LISTING REQUIRED? + 002167' 254000 002377' JRST SOUT1 ;NO + 002170' 201000 014670' MOVEI [ASCIZ /SYMBOL TABLE/] + 002171' 542000 013550' HRRM SUBTTX ;SET NEW SUB-TITLE + 002172' 260740 010703' PUSHJ PP,OUTFF ;FORCE NEW PAGE + 002173' 201240 000001 MOVEI ARG,NCOLS ;SET UP FOR NCOLS ACROSS SYMBOL TABLE + 002174' 602600 000001 TRNE ER,TTYSW ;IS TTY LISTING DEVICE? + 002175' 201240 000002 MOVEI ARG,2 ;YES,ONLY 2 COLLUMNS + 002176' 202240 013451' MOVEM ARG,NCOLLS ;STORE ANSWER + 002177' 202240 013554' MOVEM ARG,SYMCNT + 002200' 260740 002205' PUSHJ PP,LOUT1 ;OUTPUT THEM + 002201' 200240 013554' MOVE ARG,SYMCNT ;SEE IF WE ENDED EVEN + 002202' 312240 013451' CAME ARG,NCOLLS + 002203' 260740 010600' PUSHJ PP,OUTCR ;NO, NEED CR + 002204' 254000 002377' JRST SOUT1 ;NOW FOR BLOCK TYPE 2 + + 002205' 260740 002306' LOUT1: PUSHJ PP,LLUKUP ;SET FOR TABLE SCAN + 002206' 606240 400000 TRNN ARG,SYMF + 002207' 606240 060000 TRNN ARG,MACF!SYNF + 002210' 634540 000013 TDZA MRP,MRP ;SKIP AND CLEAR MRP + 002211' 263740 000000 POPJ PP, ;NO, TRY AGAIN + 002212' 602240 000400 TRNE ARG,INTF + 002213' 201540 000001 MOVEI MRP,1 + 002214' 602240 001000 TRNE ARG,EXTF + 002215' 211540 000001 MOVNI MRP,1 ;MRP=-1 FOR EXTERNAL + 002216' 602240 040000 TRNE ARG,SYNF ;SYNONYM? + 002217' 321540 000455' JUMPL MRP,POPOUT ;YES, DON'T OUTPUT IF EXTERNAL + 002220' 602240 000004 TRNE ARG,SUPRBT ;IF SUPRESSED + ; JUMPGE MRP,POPOUT ;DO NOT OUTPUT UNLESS EXTERNAL + 002221' 263740 000000 POPJ PP, ;DO NOT OUTPUT + 002222' 350017 000000 AOS (PP) ;SET FOR SKIP RETURN IF SYMBOL IS PRINTED + 002223' 325540 002230' JUMPGE MRP,LOUT10 ;BRANCH IF NOT EXTERNAL + 002224' 554440 000006 HLRZ RC,V ;PUT POINTER/FLAGS IN RC + 002225' 602440 777776 TRNE RC,-2 ;POINTER? + 002226' 204451 000000 MOVS RC,0(RC) ;YES + 002227' 500300 000011 HLL V,RC ;STORE LEFT VALUE + + 002230' 261740 000011 LOUT10: PUSH PP,RC ;SAVE FOR LATER + 002231' 260740 003074' PUSHJ PP,OUTSYM ;OUTPUT THE NAME + 002232' 200457 000000 MOVE RC,(PP) ;GET COPY + 002233' 201040 000000 MOVEI AC1,0 + 002234' 323540 002241' JUMPLE MRP,LOUT15 ;SET DEFFERRED BITS IF EXTERNAL + 002235' 603440 777776 TLNE RC,-2 ;CHECK FOR LEFT FIXUP + 002236' 435040 000040 IORI AC1,40 ;AND SET BITS + 002237' 602440 777776 TRNE RC,-2 ;CHECK FOR RIGHT FIXUP + 002240' 435040 000020 IORI AC1,20 ;AND SET BITS + 002241' 603440 777776 LOUT15: TLNE RC,-2 ;FIX RELOC AS 0 IF EXTERNAL + 002242' 553000 000011 HRRZS RC + 002243' 602440 777776 TRNE RC,-2 + 002244' 513000 000011 HLLZS RC + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 43-1 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 002245' 623440 777777 TLZE RC,-1 + 002246' 660440 000002 TRO RC,2 + 002247' 504540 000011 HRL MRP,RC + 002250' 201440 000000 MOVEI RC,0 + 002251' 602240 000200 TRNE ARG,ENTF ;ENTRY DMN + 002252' 541540 777773 HRRI MRP,-5 + 002253' 602240 100000 TRNE ARG,NOOUTF ;SUPRESS OUTPUT? WFW + 002254' 271540 000003 ADDI MRP,3 ;YES WFW + 002255' 602240 002000 TRNE ARG,UNDF ;UNDEFINED IS EXTERNAL + 002256' 541540 000002 HRRI MRP,2 ;SO FLAG AS UXT + 002257' 434053 002512' IOR AC1,SOUTC(MRP) + 002260' 200240 000001 MOVE ARG,AC1 + 002261' 202000 013551' MOVEM AC0,SVSYM ;SAVE IT + 002262' 200000 000006 MOVE AC0,V ;GET THE VALUE + 002263' 554440 000013 HLRZ RC,MRP ;AND THE RELOCATION + 002264' 520400 000006 HLLO CS,V + 002265' 602440 000002 TRNE RC,2 ;LEFT HALF RELOCATABLE? + 002266' 624400 000001 TRZA CS,1 ;NO, FLAG AND PRINT + 002267' 603400 777777 TLNE CS,-1 ;IS THE LEFT HALF ZERO? + 002270' 260740 003035' PUSHJ PP,ONC1 ;NO, OUTPUT IT + 002271' 260740 010571' LOUT11: PUSHJ PP,OUTTAB + 002272' 524400 000006 LOUT30: HRLO CS,V + 002273' 630400 000011 TDZ CS,RC ;SET RELOCATION + 002274' 260740 003035' PUSHJ PP,ONC1 + 002275' 260740 010571' PUSHJ PP,OUTTAB + 002276' 262740 000011 POP PP,RC ;GET BACK RELOC AND CHECK EXTERNAL + 002277' 201413 002512' LOUT60: MOVEI CS,SOUTC(MRP) + 002300' 260740 003060' PUSHJ PP,OUTAS0 ;EXT/INT + 002301' 373000 013554' SOSLE SYMCNT ;SEE IF WE HAVE RUN OUT + 002302' 254000 010571' JRST OUTTAB ;NOT YET, PRINT ONE TAB + 002303' 200400 013451' LOUT64: MOVE CS,NCOLLS ;YES, RESET + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 44 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 002304' 202400 013554' MOVEM CS,SYMCNT + 002305' 254000 010600' JRST OUTCR ;CARRIAGE RETURN AND TRY FOR ANOTHER + + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 45 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + SYN IFBLK,SYMBLK ;SOMEWHERE TO STORE THE POINTERS + + 002306' 262740 013510' LLUKUP: POP PP,LOOKX ;INTERCEPT RETURN POP + 002307' 200200 013552' MOVE SX,SYMBOL + 002310' 200144 000000 MOVE SDEL,(SX) + 002311' 271200 000002 ADDI SX,2 ;SKIP COUNT OF SYMBOLS + 002312' 505200 777712 LLUKP2: HRLI SX,-<.LPP-1> ;LENGTH OF PAGE + 002313' 200300 000005 MOVE V,ARG ;COPY OF ARG + 002314' 202206 013400' MOVEM SX,SYMBLK(V) ;STORE SYMBOL POINTER IN TABLE + 002315' 271200 000152 ADDI SX,2*<.LPP-2> ;SYMBOLS PER PAGE + 002316' 367300 002314' SOJG V,.-2 ;FOR ALL COLUMNS + 002317' 200300 013554' MOVE V,SYMCNT + 002320' 550206 013400' HRRZ SX,SYMBLK(V) + 002321' 315200 013553' CAMGE SX,SYMTOP + 002322' 367300 002320' SOJG V,.-2 + 002323' 271300 000001 ADDI V,1 + 002324' 202300 013400' MOVEM V,SYMBLK + 002325' 254000 002334' JRST LLUKP7 ;ENTER LOOP + + 002326' 202205 013400' LLUKP1: MOVEM SX,SYMBLK(ARG) ;SAVE IT + 002327' 200004 777777 MOVE AC0,-1(SX) + 002330' 260740 012740' PUSHJ PP,SRCH7 + 002331' 557000 000005 HLRZS ARG + 002332' 260760 013510' PUSHJ PP,@LOOKX + JRST [MOVE ARG,SYMCNT + MOVEM SX,SYMBLK(ARG) + 002333' 254000 014673' JRST .+1] + 002334' 361140 000455' LLUKP7: SOJL SDEL,POPOUT ;TEST FOR END + 002335' 200240 013554' LLUKP3: MOVE ARG,SYMCNT ;GET PAGE POSITION + 002336' 200205 013400' MOVE SX,SYMBLK(ARG) ;GET NEXT POINTER + 002337' 252200 002346' AOBJP SX,LLUKP4 + 002340' 550300 000004 HRRZ V,SX + 002341' 317300 013553' CAMG V,SYMTOP + 002342' 344200 002326' AOJA SX,LLUKP1 + 002343' 260740 002303' LLUKP6: PUSHJ PP,LOUT64 ;RESET SYMCNT + 002344' 322140 000455' JUMPE SDEL,POPOUT ;EXIT IF ALL DONE + 002345' 254000 002335' JRST LLUKP3 + + 002346' 340200 000000 LLUKP4: AOJ SX, + 002347' 202205 013400' MOVEM SX,SYMBLK(ARG) + 002350' 200300 013451' MOVE V,NCOLLS + 002351' 335006 013400' SKIPGE SYMBLK(V) ;TEST IF ALL FINISHED + 002352' 254000 002370' JRST LLUKP5 ;NO + 002353' 367300 002351' SOJG V,.-2 ;KEEP GOING + 002354' 200200 013400' MOVE SX,SYMBLK + 002355' 200204 013400' MOVE SX,SYMBLK(SX) + 002356' 554300 000004 HLRZ V,SX ;GET NUMBER ADVANCED + 002357' 242300 000001 LSH V,1 ;2 WORDS PER SYMBOL + 002360' 275206 000002 SUBI SX,2(V) ;BACK UP ONE SYMBOL + 002361' 335000 014003' SKIPGE LPP ;IF PAGE FULL + 002362' 254000 002365' JRST .+3 ;DON'T FINISH WITH EXTRA CR-LF + 002363' 402000 014003' SETZM LPP ;ENSURE END OF PAGE + 002364' 260740 002303' PUSHJ PP,LOUT64 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 45-1 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 002365' 200240 013451' MOVE ARG,NCOLLS + 002366' 202240 013554' MOVEM ARG,SYMCNT ;JUST IN CASE + 002367' 254000 002312' JRST LLUKP2 + + 002370' 377000 013554' LLUKP5: SOSG SYMCNT ;ON LAST COL? + 002371' 254000 002343' JRST LLUKP6 + 002372' 335000 014003' SKIPGE LPP ;IF PAGE FULL + 002373' 254000 002335' JRST LLUKP3 ;NO MORE OUTPUT + REPEAT 2,<PUSHJ PP,OUTAB2> ;NO, TAB OUT TO NEXT COLUMN + 002374' 260740 010570' + 002375' 260740 010570' + 002376' 254000 002335' JRST LLUKP3 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 46 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 002377' 260740 003111' SOUT1: PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + 002400' 606240 400000 TRNN ARG,SYMF + 002401' 606240 060000 TRNN ARG,MACF!SYNF + 002402' 634540 000013 TDZA MRP,MRP ;SKIP AND CLEAR MRP + 002403' 263740 000000 POPJ PP, ;NO, TRY AGAIN + 002404' 602240 000400 TRNE ARG,INTF + 002405' 201540 000001 MOVEI MRP,1 + IFN WFWSW,<TRNE ARG,VARF ;IF THIS FLAG IS ON SHOULD GO IN LOW SEG + JRST SOUT1W > + 002406' 602240 001000 TRNE ARG,EXTF + 002407' 211540 000001 MOVNI MRP,1 ;MRP=-1 FOR EXTERNAL + 002410' 602240 040000 TRNE ARG,SYNF ;SYNONYM? + 002411' 321540 000455' JUMPL MRP,POPOUT ;YES, DON'T OUTPUT IF EXTERNAL + 002412' 602240 000004 TRNE ARG,SUPRBT ;IF SUPRESSED + ; JUMPGE MRP,POPOUT ;DO NOT OUTPUT UNLESS EXTERNAL + 002413' 263740 000000 POPJ PP, ;DO NOT OUTPUT + 002414' 325540 002421' JUMPGE MRP,SOUT10 ;BRANCH IF NOT EXTERNAL + 002415' 554440 000006 HLRZ RC,V ;PUT POINTER/FLAGS IN RC + 002416' 602440 777776 TRNE RC,-2 ;POINTER? + 002417' 204451 000000 MOVS RC,0(RC) ;YES + 002420' 500300 000011 HLL V,RC ;STORE LEFT VALUE + + 002421' 261740 000011 SOUT10: PUSH PP,RC ;SAVE FOR LATER + 002422' 201040 000000 MOVEI AC1,0 + 002423' 323540 002430' JUMPLE MRP,SOUT15 ;SET DEFFERRED BITS IF EXTERNAL + 002424' 603440 777776 TLNE RC,-2 ;CHECK FOR LEFT FIXUP + 002425' 435040 000040 IORI AC1,40 ;AND SET BITS + 002426' 602440 777776 TRNE RC,-2 ;CHECK FOR RIGHT FIXUP + 002427' 435040 000020 IORI AC1,20 ;AND SET BITS + IFN WFWSW,<TRNE ARG,VARF ;IF SO THEN DEFERD + IORI AC1,20> + 002430' 603440 777776 SOUT15: TLNE RC,-2 ;FIX RELOC AS 0 IF EXTERNAL + 002431' 553000 000011 HRRZS RC + 002432' 602440 777776 TRNE RC,-2 + 002433' 513000 000011 HLLZS RC + 002434' 623440 777777 TLZE RC,-1 + 002435' 660440 000002 TRO RC,2 + 002436' 504540 000011 HRL MRP,RC + 002437' 201440 000000 MOVEI RC,0 + 002440' 602240 000200 TRNE ARG,ENTF ;ENTRY DMN + 002441' 541540 777773 HRRI MRP,-5 + 002442' 602240 100000 TRNE ARG,NOOUTF ;SUPRESS OUTPUT? WFW + 002443' 271540 000003 ADDI MRP,3 ;YES WFW + 002444' 434053 002512' IOR AC1,SOUTC(MRP) + 002445' 200240 000001 MOVE ARG,AC1 + 002446' 260740 002710' PUSHJ PP,NOUT2 ;SQUOZE AND DUMP THE SYMBOL + 002447' 202000 013551' MOVEM AC0,SVSYM ;SAVE IT + 002450' 200000 000006 MOVE AC0,V ;GET THE VALUE + 002451' 554440 000013 HLRZ RC,MRP ;AND THE RELOCATION + 002452' 260740 002724' PUSHJ PP,COUT + 002453' 262740 000011 POP PP,RC ;GET BACK RELOC AND CHECK EXTERNAL + 002454' 606440 777776 TRNN RC,-2 ;IS IT? + 002455' 254000 002467' JRST SOUT50 ;NO + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 46-1 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 002456' 200011 000001 MOVE AC0,1(RC) ;GET NAME + IFN WFWSW,<JUMPE AC0,[MOVSI AC0,200000 ;RIGHT DEFERED + PUSHJ PP,INVRSF ;INSERT IN SYMBOL INFORMATION + JRST SOUT50]> + 002457' 201240 000060 MOVEI ARG,60 ;EXTERNAL REQ + 002460' 260740 004770' PUSHJ PP,SQOZE + 002461' 513000 000011 HLLZS RC ;NO RELOC + 002462' 260740 002724' PUSHJ PP,COUT ;OUTPUT IT + 002463' 200000 013551' MOVE AC0,SVSYM ;GET SYMBOL NAME + 002464' 661000 500000 TLO AC0,500000 ;SET AS ADDITIVE SYMBOL + 002465' 621000 200000 TLZ AC0,200000 ;BUT NOT LEFT HALF ETC + 002466' 260740 002724' PUSHJ PP,COUT + 002467' 207000 000011 SOUT50: MOVSS RC ;CHECK LEFT HALF + 002470' 606440 777776 TRNN RC,-2 + 002471' 254000 002502' JRST SOUT60 + 002472' 200011 000001 MOVE AC0,1(RC) + IFN WFWSW,<JUMPE AC0,[MOVSI AC0,600000 ;LEFT DEFERED + PUSHJ PP,INVRSF + JRST SOUT60]> + 002473' 201240 000060 MOVEI ARG,60 + 002474' 260740 004770' PUSHJ PP,SQOZE + 002475' 201440 000000 MOVEI RC,0 + 002476' 260740 002724' PUSHJ PP,COUT + 002477' 200000 013551' MOVE AC0,SVSYM + 002500' 661000 700000 TLO AC0,700000 + 002501' 260740 002724' PUSHJ PP,COUT + 002502' 263740 000000 SOUT60: POPJ PP, + + 002503' 260740 003060' SOUT20: PUSHJ PP,OUTAS0 + 002504' 254000 010600' JRST OUTCR + + 002505' 426352 400004 <ASCII /ENT/>!04 ;DMN + 002506' 000000 000000 Z + 002507' 000000 000000 Z + 002510' 516131 600044 <ASCII /SEN/>!44 ;SUPRESSED ENTRY + 002511' 426612 400060 <ASCII /EXT/>!60 + 002512' 000000 000010 SOUTC: EXP 10 + 002513' 446352 400004 <ASCII /INT/>!04 + 002514' 526612 400060 <ASCII /UXT/>!60 ;UNDEFINED EXTERNAL + 002515' 516410 400050 <ASCII /SPD/>!50 + 002516' 516231 600044 <ASCII /SIN/>!44 ;DMN + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 47 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + IFN WFWSW,< + INVRSF: MOVEI ARG,3 ;GET A BLOCK + ADDB ARG,FREE + CAML ARG,SYMBOL + PUSHJ PP,XCEEDS + MOVEM AC0,(ARG) ;SAVE WHICH HALF INFO + MOVE AC0,SVSYM ;GET SYMBOL NAME + TLZ AC0,740000 ;GET RID OF CODE BITS + MOVEM AC0,-1(ARG) ;SAVE IT + HLRZ AC0,(RC) ;SYMBOL TABLE FIXUP POINTER + MOVEM AC0,-2(ARG) ;LINK IN THIS BLOCK + SUBI ARG,2 ;POINT TO START OF BLOCK + HRLM ARG,(RC) + POPJ PP, + + SOUT1W: HLRZS V ;GET THE SYMBOL TABLE POINTER + MOVEI RC,3 ;SET UP A NEW BLOCK FOR THIS SYMBOL + ADDB RC,FREE + CAML RC,SYMBOL + PUSHJ PP,XCEEDS ;CHECK ON OUT OF ROOM + PUSH PP,ARG ;SAVE ARG AND ACO + PUSH PP,AC0 + MOVEI ARG,0 ;NO CODE BITS + PUSHJ PP,SQOZE ;CONVERT TO RAD50 + MOVEM AC0,-1(RC) ;SYMBOL NAME + POP PP,AC0 + POP PP,ARG ;RESTORE + HRRZM V,-2(RC) ;LINK TO NEXT BLOCK + MOVSI V,200000 ;FLAG AS SYMBOL TABLE FIXUP + MOVEM V,(RC) + HRRZ V,(SX) ;GET POINTER TO HEADER BLOCK + SUBI RC,2 ;POINT TO HEAD OF BLOCK + HRLM RC,(V) ;PUT IN LINK TO NEW BLOCK + MOVE RC,FIXLNK ;ADD SYMBOL TO CHAIN OF ONES TO DO + MOVEM SX,FIXLNK ;CHAIN THROUGH SYMBOL ENTRY + MOVEM RC,-1(SX) ;WHICH IS NO LONGER NEEDED + SETZB RC,V ;PUT OUT 0 FOR SYMBOL VALUE + JRST SOUT10> + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 48 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + ;OUTPUT THE BINARY + + 002517' 524400 014000' BOUT: HRLO CS,LOCO ;PICKUP THE LOCATION + 002520' 260740 003033' PUSHJ PP,ONC ;OUTPUT IT TO THE LISTING FILE + 002521' 201340 000047 MOVEI C,"'" + 002522' 332000 014006' SKIPE MODO ;IF MODE IS NOT ABSOLUTE + 002523' 260740 010663' PUSHJ PP,OUTC ;PRINT A SINGLE QUOTE + 002524' 260740 002776' PUSHJ PP,DSTOW ;GET THE CODE + 002525' 261740 000011 PUSH PP,RC ;SAVE RELOC + 002526' 261740 000011 PUSH PP,RC ;AND AGAIN + 002527' 603440 777776 IFE WFWSW,<TLNE RC,-2 ;CHECK LEFT EXTERNAL + 002530' 553000 000011 HRRZS RC ;MAKE LEFT NON-RELOC> + IFN WFWSW,<TLNE FR,RIMSW!RIM1SW!R1BSW ;CHECK FOR SPECIAL BIN OUT + JRST BOUT30 ;AND LET HIM DISCOVER THE HORROR + TLNN RC,-2 ;LEFT HALF EXTERNAL?? + JRST BOUT11 ;NO + HLRZ AC1,RC ;GET POINTER + SKIPE 1(AC1) ;IS IT SPECIAL LVAR KIND (NAME IS 0) + JRST [HRRZS RC + JRST BOUT11] ;IGNORE FOR NOW + PUSH PP,AC0 ;SAVE WORD + HLRZS AC0 ;GET OFFSET + PUSHJ PP,INCSRC ;FIND A MATCH OR INSERT NEW BLOCK + ADDI AC1,1 ;POINT ONE FURTHER IN BLOCK + PUSHJ PP,LVLINK ;AND SET INFORMATION + POP PP,AC0 + HRLM RC,AC0 ;THE LINK + HLLM RC,-1(PP) ;AND ITS RELOC + MOVE RC,-1(PP) ;GET RELOC BACK + BOUT11:> + 002531' 606440 777776 TRNN RC,-2 ;RIGHT EXT? + 002532' 254000 002553' JRST BOUT30 ;NO + IFN WFWSW,<HRRZ AC1,RC ;GET POINTER + SKIPE 1(AC1) + JRST [HRRZ AC1,AC0 ;ORDINARY EXTERNAL, HANDLE + JUMPE AC1,BOUT20 + HLLZS RC ;ADD EXTERNAL + JRST BOUT30] + PUSH PP,AC0 ;SAVE WORD + HRRZS AC0 ;GET OFFSET + PUSHJ PP,INCSRC + PUSHJ PP,LVLINK + POP PP,AC0 + HRRM RC,AC0 + HLRM RC,-1(PP) + MOVE RC,-1(PP)> + 002533' 550040 000000 IFE WFWSW,<HRRZ AC1,AC0 ;YES + 002534' 322040 002537' JUMPE AC1,BOUT20 ;PROCESS IF ZERO CODE THERE + 002535' 513000 000011 HLLZS RC ;MAKE NON-RELOC> + 002536' 254000 002553' JRST BOUT30 ;PROCESS + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 49 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 002537' BOUT20: + 002537' 542057 777777 HRRM AC1,-1(PP) ;FIX RC IN STACK SO NO CONFUSION WFW (AC1 HAS 0) + 002540' 540011 000000 HRR AC0,0(RC) ;NO, SET ADDRESS LINK + 002541' 200040 014000' MOVE AC1,LOCO ;GET CURRENT LOCATION + 002542' 542051 000000 HRRM AC1,0(RC) ;SET NEW LINK + 002543' 554051 000000 HLRZ AC1,0(RC) ;GET FLAGS/POINTER + 002544' 606040 777776 TRNN AC1,-2 ;POINTER? + 002545' 540040 000011 HRR AC1,RC ;NO, SET TO FLAGS + 002546' 544441 000000 HLR RC,0(AC1) ;PUT FLAGS IN RC + 002547' 504040 014006' HRL AC1,MODO ;GET CURRENT MODE + 002550' 622440 777776 TRZE RC,-2 ;LEFT HALF RELOCATABLE+ + 002551' 661040 000002 TLO AC1,2 ;YES, SET FLAG + 002552' 502041 000000 HLLM AC1,0(AC1) ;STORE NEW FLAGS + 002553' 520400 000000 BOUT30: HLLO CS,AC0 + 002554' 623440 000001 TLZE RC,1 ;PACK RELOCATION BITS + 002555' 660440 000002 TRO RC,2 + 002556' 602440 000002 TRNE RC,2 ;LEFT HALF RELOCATABLE? + 002557' 620400 000001 TRZ CS,1 ;YES, RESET BIT + 002560' 261740 000000 PUSH PP,AC0 ;NEED AN AC + 002561' 554017 777777 HLRZ AC0,-1(PP) ;AC0 = LEFT RELOCATION + 002562' 303000 000001 CAILE AC0,1 ;EXTERNAL? + 002563' 431400 001001 XORI CS,EXTF!1 ;YES, SET SWITCH + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 50 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 002564' 262740 000000 POP PP,AC0 ;RESTORE + 002565' 260740 003033' PUSHJ PP,ONC + 002566' 524400 000000 HRLO CS,AC0 + 002567' 630400 000011 TDZ CS,RC ;SET RELOCATION + 002570' 550357 000000 HRRZ C,(PP) ;C = RIGHT RELOCATION + 002571' 303340 000001 CAILE C,1 ;EXTERNAL + 002572' 431400 001001 XORI CS,EXTF!1 ;YES, SET SWITCH + 002573' 260740 003033' PUSHJ PP,ONC + 002574' 262740 000010 BOUT3I: POP PP,CS ;GET RID OF ENTRY ON STACK + 002575' 550400 014000' HRRZ CS,LOCO + 002576' 603640 004500 TLNE FR,RIMSW!RIM1SW!R1BSW ;RIM OUTPUT? + 002577' 254000 010360' JRST ROUT ;YES, GO PROCESS + + 002600' 504400 014006' HRL CS,MODO + 002601' 312400 014005' CAME CS,MODLOC ;SEQUENCE OR RELOCATION BREAK? + 002602' 260740 002731' PUSHJ PP,COUTD ;YES, DUMP THE BUFFER + 002603' 331000 013350' SKIPL COUTX ;NEW BUFFER? + 002604' 254000 002613' JRST BOUT40 ;NO, STORE CODE AND EXIT + 002605' 202400 014005' MOVEM CS,MODLOC ;YES, STORE NEW VALUES + 002606' 250000 014000' EXCH AC0,LOCO + 002607' 250440 014006' EXCH RC,MODO + 002610' 260740 002724' PUSHJ PP,COUT ;STORE BLOCK LOCATION AND MODE + 002611' 250440 014006' EXCH RC,MODO ;RESTORE CURRENT VALUES + 002612' 250000 014000' EXCH AC0,LOCO + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 51 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 002613' 260740 002724' BOUT40: PUSHJ PP,COUT ;EMIT CODE + 002614' 262740 000011 POP PP,RC ;RETRIEVE EXTERNAL BITS + 002615' 606440 777776 TRNN RC,-2 ;RIGHT EXTERNAL? + 002616' 254000 002640' JRST BOUT50 ;TRY FOR LEFT + 002617' 260740 002731' PUSHJ PP,COUTD + 002620' 261740 013347' PUSH PP,BLKTYP ;TERMINATE TYPE AND SAVE + 002621' 201000 000002 MOVEI AC0,2 ;BLOCK TYPE 2 + 002622' 202000 013347' MOVEM AC0,BLKTYP + 002623' 200011 000001 MOVE AC0,1(RC) ;GET SYMBOL + 002624' 201240 000060 MOVEI ARG,60 ;CODE BITS + 002625' 260740 004770' PUSHJ PP,SQOZE ;CONVERT TO RADIX 50 + 002626' 513000 000011 HLLZS RC ;SYMBOL HAS NO RELOCATION + 002627' 260740 002724' PUSHJ PP,COUT ;EMIT + 002630' 200000 014000' MOVE AC0,LOCO ;GET CURRENT LOC + 002631' 505000 400000 HRLI AC0,400000 ;ADDITIVE REQ + 002632' 540440 014006' HRR RC,MODO ;CURRENT MODE + 002633' 260740 002724' PUSHJ PP,COUT ;EMIT + 002634' 207000 000011 MOVSS RC ;NOW FOR LEFT + 002635' 606440 777776 TRNN RC,-2 + 002636' 254000 002660' JRST BOUT60 + 002637' 254000 002647' JRST BOUT70 + 002640' 207000 000011 BOUT50: MOVSS RC ;CHECK OTHER HALF + 002641' 606440 777776 TRNN RC,-2 ;LEFT HALF EXTERNAL? + 002642' 254000 002662' JRST BOUT80 ;NO, FALSE ALARM + 002643' 260740 002731' PUSHJ PP,COUTD ;CHANGE MODE + 002644' 261740 013347' PUSH PP,BLKTYP + 002645' 201000 000002 MOVEI AC0,2 + 002646' 202000 013347' MOVEM AC0,BLKTYP + 002647' 200011 000001 BOUT70: MOVE AC0,1(RC) + 002650' 201240 000060 MOVEI ARG,60 + 002651' 260740 004770' PUSHJ PP,SQOZE + 002652' 513000 000011 HLLZS RC + 002653' 260740 002724' PUSHJ PP,COUT + 002654' 200000 014000' MOVE AC0,LOCO + 002655' 505000 600000 HRLI AC0,600000 ;LEFT HALF ADD + 002656' 540440 014006' HRR RC,MODO + 002657' 260740 002724' PUSHJ PP,COUT ;EMIT + 002660' 260740 002731' BOUT60: PUSHJ PP,COUTD ;CHANGE MODE + 002661' 262740 013347' POP PP,BLKTYP ;TO OLD ONE + 002662' 350000 014000' BOUT80: AOS LOCO + 002663' 350000 014005' AOS MODLOC + 002664' 263740 000000 POPJ PP, + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 52 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + IFN WFWSW,< + INCSC1: HLRZ RC,(AC1) ;GET OFFSET OF NEXT BLOCK + CAMN RC,AC0 ;IS IT THE SAME?? + POPJ PP, ;YES, RETURN AC1 POINTS TO BLOCK + INCSRC: MOVE RC,AC1 ;CURRENT POINTER + HRRZ AC1,(AC1) ;IN CASE THIS COMES UP 0 + JUMPN AC1,INCSC1 ;SINCE 0 IS END OF CHAIN. ANY MORE?? + MOVEI AC1,3 ;NO, GET A NEW BLOCK + ADDB AC1,FREE + CAML AC1,SYMBOL + PUSHJ PP,XCEED + SUBI AC1,2 ;WE MUST BE POINTING RIGHT WHEN WE GET OUT + HRRM AC1,(RC) ;INSERT WHERE END OF CHAIN WAS + HRLZM AC0,(AC1) ;SET OFFSET AND END OF CHAIN + SETZM 1(AC1) + SETZM 2(AC1) ;NO LEFT OR RIGHT HALF FIXUPS + POPJ PP, ;DONE + + LVLINK: MOVE RC,LOCO ;GET CURRENT LOCATION + HRL RC,MODO ;AND MODE + EXCH RC,1(AC1) ;PUT IN AND GET PLACE TO LINK TO + POPJ PP,> + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 53 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 002665' 200300 014676' NOUT: MOVE V,[POINT 7,TBUF] ;POINTER TO ASCII LINE + 002666' 205400 440600 MOVSI CS,(POINT 6,AC0) ;POINTER TO SIXBIT AC0 + 002667' 403240 000000 SETZB ARG,AC0 + 002670' 134340 000006 NOUT1: ILDB C,V ;GET ASCII + 002671' 301340 000141 CAIL C,"A"+40 + 002672' 303340 000172 CAILE C,"Z"+40 + 002673' 254000 002675' JRST .+2 + 002674' 624340 000100 TRZA C,100 ;LOWER CASE TO SIXBIT + 002675' 275340 000040 SUBI C,40 ;CONVERT TO SIXBIT + 002676' 323340 002704' JUMPLE C,NOUT3 ;TEST FORM NON-SIXBIT + 002677' 303340 000077 CAILE C,77 ;AND NOT GREATER THAN SIXBIT + 002700' 254000 002704' JRST NOUT3 ;... + 002701' 136340 000010 IDPB C,CS ;DEPOSIT IN AC0 + 002702' 603400 770000 TLNE CS,770000 ;TEST FOR SIX CHARACTERS + 002703' 254000 002670' JRST NOUT1 ;NO, GET ANOTHER + 002704' 335000 013733' NOUT3: SKIPGE UNIVSN ;IF A UNIVERSAL PROG + 002705' 263740 000000 POPJ PP, ;RETURN TO PUT IT IN THE TABLE + + 002706' 607600 000002 IFN CCLSW,< TLNN IO,IOTLSN ;AND IF WE HAVE NOT SEEN A TITLE + 002707' 260740 004326' PUSHJ PP,PRNAM ;THEN PRINT THE NAME> + 002710' 260740 004770' NOUT2: PUSHJ PP,SQOZE ;CONVERT TO SIXBIT + 002711' 254000 002724' JRST COUT ;DUMP AND EXIT + + 002712' HOUT: + 002712' 201440 000001 MOVEI RC,1 ;RELOCATABLE + IFN RENTSW,< + MOVE AC0,HHIGH ;GET HIGH SEG IF TWO SEGMENTS + JUMPE AC0,.+2 ;NOT TWO SEGMENTS + PUSHJ PP,COUT ;OUTPUT IT > + 002713' 200000 013735' MOVE AC0,HIGH + IFN RENTSW,< + SKIPE HHIGH ;ANY TWOSEG HIGH STUFF + JRST COUT ;YES,SO NO ABS.> + 002714' 260740 002724' PUSHJ PP,COUT ;OUTPUT THE HIGHEST LOCATION + 002715' 200000 013734' MOVE AC0,ABSHI + ;PUT OUT ABS PORTION OF PROGRAM BREAK + 002716' 364440 002724' SOJA RC,COUT ;OUTPUT A WORD OF ZERO AND EXIT + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 54 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + IFN RENTSW,< + HSOUT: SETZM HISNSW ;CLEAR FOR PASS2 + MOVE AC0,SVTYP3 ;GET HISEG ARG + JUMPGE AC0,.+4 ;JUMP IF ONLY HISEG + HRL AC0,HIGH1 ;GET BREAK FROM PASS 1 + JUMPL AC0,.+2 ;OK IF GREATER THAN 400000 + HRLS AC0 ;SIGNAL TWO SEGMENT TO LOADER + MOVEI RC,1 ;ASSUME RELOCATABLE + JRST COUT ;OUTPUT THE WORD> + + 002717' 336440 014052' VOUT: SKIPN RC,VECREL ;IS VECTOR ABSOLUTE ZERO? + 002720' 332000 014053' SKIPE VECTOR ;ALSO CHECK RELOCATION + 002721' 254000 002723' JRST .+2 + 002722' 263740 000000 POPJ PP, ;YES, EXIT + 002723' 200000 014053' MOVE AC0,VECTOR ;AC0 SHOULD BE FLAGS + + 002724' 350340 013350' COUT: AOS C,COUTX ;INCREMENT INDEX + 002725' 202007 013354' MOVEM AC0,COUTDB(C) ;STORE CODE + 002726' 136440 013352' IDPB RC,COUTP ;STORE RELOCATION BITS + 002727' 302340 000021 CAIE C,^D17 ;IS THE BUFFER FULL? + 002730' 263740 000000 POPJ PP, ;NO, EXIT + + 002731' 357340 013350' COUTD: AOSG C,COUTX ;DUMP THE BUFFER + 002732' 254000 002743' JRST COUTI ;BUFFER WAS EMPTY + 002733' 504340 013347' HRL C,BLKTYP ;SET BLOCK TYPE + 002734' 260740 010404' PUSHJ PP,OUTBIN ;OUTPUT COUNT AND TYPE + 002735' 477340 013351' SETOB C,COUTY ;INITIALIZE INDEX + + 002736' 200347 013354' COUTD2: MOVE C,COUTDB(C) ;GET RELOCATION BITS/CODE + 002737' 260740 010404' PUSHJ PP,OUTBIN ;DUMP IT + 002740' 350340 013351' AOS C,COUTY ;INCREMENT INDEX + 002741' 315340 013350' CAMGE C,COUTX ;TEST FOR END + 002742' 254000 002736' JRST COUTD2 ;NO, GET NEXT WORD + + 002743' 476000 013350' COUTI: SETOM COUTX ;INITIALIZE BUFFER INDEX + 002744' 402000 013353' SETZM COUTRB ;ZERO RELOCATION BITS + 002745' 200340 014677' MOVE C,[POINT 2,COUTRB] + 002746' 202340 013352' MOVEM C,COUTP ;INITIALIZE BIT POINTER + 002747' 263740 000000 POPJ PP, ;EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 55 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 002750' STOWZ1: + 002750' 201440 000000 STOWZ: MOVEI RC,0 + 002751' STOW: + 002751' 321640 002763' JUMP1 STOW20 ;SKIP TEST IF PASS ONE + 002752' 602440 777776 TRNE RC,-2 ;RIGHT HALF ZERO OR 1? + 002753' 260740 003021' PUSHJ PP,STOWT ;NO, HANDLE EXTERNAL + 002754' 607440 777776 TLNN RC,-2 ;LEFT HALF ZERO OR 1? WFW + 002755' 254000 002761' JRST STOW10 ;YES, SKIP TEST + 002756' 207000 000011 MOVSS RC ;SWAP HALVES + 002757' 260740 003026' PUSHJ PP,STOWT1 ;HANDLE EXTERNAL WFW + 002760' 207000 000011 MOVSS RC ;RESTORE VALUES + + 002761' 332000 013742' STOW10: SKIPE EXTPNT ;ANY EXTERNALS REMAINING? + 002762' 660600 000040 TRO ER,ERRE ;YES, SET EXTERNAL ERROR FLAG + + 002763' 350040 013555' STOW20: AOS AC1,STPX ;INCREMENT POINTER + 002764' 202001 013557' MOVEM AC0,STCODE(AC1) ;STOW CODE + 002765' 202441 013627' MOVEM RC,STOWRC(AC1) ;STOW RELOCATION BITS + 002766' 336000 013773' SKIPN LITLVL ;ARE WE IN LITERAL? + 002767' 350000 013777' AOS LOCA ;NO, INCREMENT ASSEMBLY LOCATION + 002770' 305040 000047 CAIGE AC1,.STP-1 ;OVERFLOW? + 002771' 263740 000000 POPJ PP, ;NO, EXIT + + 002772' 332000 013773' SKIPE LITLVL ;ARE WE IN A LITERAL? + 002773' 664600 010000 TROA ER,ERRL ;YES, FLAG ERROR BUT DON'T DUMP + 002774' 254000 001453' JRST CHARL1 ;NO, SAVE REGISTERS AND DUMP THE BUFFER + 002775' 254000 003003' JRST STOWI ;INITIALIZE BUFFER + + 002776' 350040 013556' DSTOW: AOS AC1,STPY ;INCREMENT POINTER + 002777' 200001 013557' MOVE AC0,STCODE(AC1) ;FETCH CODE + 003000' 200441 013627' MOVE RC,STOWRC(AC1) ;FETCH RELOCATION BITS + 003001' 315040 013555' CAMGE AC1,STPX ;IS THIS THE END? + 003002' 263740 000000 POPJ PP, ;NO, EXIT + + 003003' 476000 013555' STOWI: SETOM STPX ;INITIALIZE FOR INPUT + 003004' 476000 013556' SETOM STPY ;INITIALIZE FOR OUTPUT + 003005' 402000 013742' SETZM EXTPNT + 003006' 263740 000000 POPJ PP, ;EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 56 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 003007' 350000 013773' SVSTOW: AOS LITLVL ;NESTED LITERALS + 003010' 261740 013555' PUSH PP,STPX ;MAKE ROOM FOR ANOTHER + 003011' 261740 013556' PUSH PP,STPY + 003012' 200040 013555' MOVE AC1,STPX + 003013' 202040 013556' MOVEM AC1,STPY + 003014' 254002 000000 JRST 0(AC2) + + 003015' 262740 013556' GTSTOW: POP PP,STPY ;BACK UP A LEVEL + 003016' 262740 013555' POP PP,STPX + 003017' 370000 013773' SOS LITLVL + 003020' 254002 000000 JRST 0(AC2) + + ;EXTERNAL RIGHT + 003021' 550040 013742' STOWT: HRRZ AC1,EXTPNT ;GET RIGHT POINTER + 003022' 302051 000000 CAIE AC1,(RC) ;DOES IT MATCH + 003023' 260740 004041' PUSHJ PP,QEXT ;EXTERNAL OR RELOCATION ERROR + 003024' 513000 013742' HLLZS EXTPNT + 003025' 263740 000000 POPJ PP, ;EXIT + + ;EXTERNAL LEFT + 003026' 554040 013742' STOWT1: HLRZ AC1,EXTPNT ;GET LEFT HALF + 003027' 302051 000000 CAIE AC1,(RC) ;SEE ABOVE + 003030' 260740 004041' PUSHJ PP,QEXT + 003031' 553000 013742' HRRZS EXTPNT + 003032' 263740 000000 POPJ PP, ;EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 57 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 003033' 134340 013677' ONC: ILDB C,TABP ;ENTRY TO ADVANCE TAB POINTER + 003034' 260740 010607' PUSHJ PP,OUTL ;OUTPUT A TAB + ;OUTPUT 6 OCT NUMBERS FROM CS LEFT + 003035' 201340 000006 ONC1: MOVEI C,6 ;CONVERT TO ASCII + 003036' 246340 000003 LSHC C,3 ;SHIFT IN OCTAL + 003037' 260740 010607' PUSHJ PP,OUTL ;OUTPUT ASCII FROM C + 003040' 602400 777777 TRNE CS,-1 ;ARE WE THROUGH? + 003041' 254000 003035' JRST ONC1 ;NO, GET ANOTHER + 003042' 201340 000000 MOVEI C,0 ;CLEAR C + 003043' 607400 000001 TLNN CS,1 ;RELOCATABLE? + 003044' 201340 000047 MOVEI C,"'" ;YES + 003045' 607400 001000 TLNN CS,EXTF ;OR EXTERNAL + 003046' 201340 000052 MOVEI C,"*" ;YES + 003047' 326340 010663' ONC2: JUMPN C,OUTC ;OUTPUT IF EXTERN OR RELOCATABLE + 003050' 263740 000000 POPJ PP, ;EXIT + + 003051' 231340 000012 DNC: IDIVI C,^D10 + 003052' 506417 000000 HRLM CS,0(PP) + 003053' 322340 003055' JUMPE C,.+2 + 003054' 260740 003051' PUSHJ PP,DNC ;RECURSE IF NON-ZERO + 003055' 554357 000000 HLRZ C,0(PP) + 003056' 271340 000060 ADDI C,"0" ;FORM ASCII + 003057' 254000 010572' JRST PRINT ;DUMP AND TEST FOR END + + 003060' 505400 440700 OUTAS0: HRLI CS,(POINT 7,,) ;ENTRY TO SET POINTER + 003061' 134340 000010 OUTASC: ILDB C,CS ;GET NEXT BYTE + 003062' 322340 000455' JUMPE C,POPOUT ;EXIT ON ZERO DELIMITER + 003063' 260740 010572' PUSHJ PP,PRINT + 003064' 254000 003061' JRST OUTASC + + 003065' 505400 440600 OUTSIX: HRLI CS,(POINT 6,,) ;OUTPUT SIXBIT + 003066' 134340 000010 ILDB C,CS ;GET SIXBIT + 003067' 306340 000040 CAIN C,40 ;"@" DELIMITER? + 003070' 263740 000000 POPJ PP, ;YES, EXIT + 003071' 271340 000040 ADDI C,40 ;NO, FORM ASCII + 003072' 260740 010607' PUSHJ PP,OUTL ;OUTPUT ASCII CHAR FROM C + 003073' 254000 003066' JRST OUTSIX+1 + + 003074' 200400 000000 OUTSYM: MOVE CS,AC0 ;PLACE NAME IN CS + 003075' 201340 000000 OUTSY1: MOVEI C,0 ;CLEAR C + 003076' 246340 000006 LSHC C,6 ;MOVE NEXT SIXBIT CHARACTER IN + 003077' 322340 010571' JUMPE C,OUTTAB ;TEST FOR END + 003100' 271340 000040 ADDI C,40 ;CONVERT TO ASCII + 003101' 260740 010607' PUSHJ PP,OUTL ;OUTPUT + 003102' 254000 003075' JRST OUTSY1 ;LOOP + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 58 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 003103' 350217 000000 OUTSET: AOS SX,0(PP) ;GET RETURN LOCATION + 003104' 200204 777777 MOVE SX,-1(SX) ;GET XWD CODE + 003105' 546200 013347' HLRM SX,BLKTYP ;SET BLOCK TYPE + 003106' 403240 000011 SETZB ARG,RC + 003107' 260744 000000 PUSHJ PP,0(SX) ;GO TO PRESCRIBED ROUTINE + 003110' 254000 002731' JRST COUTD ;TERMINATE BLOCK AND EXIT + + ;LOOKUP SCANS ALL THE SYMBOLS IN THE SYMBOL TABLE + + 003111' 262740 013510' LOOKUP: POP PP,LOOKX ;INTERCEPT RETURN POP + 003112' 200200 013552' MOVE SX,SYMBOL + 003113' 200144 000000 MOVE SDEL,0(SX) ;SET FOR TABLE SCAN + 003114' 361140 000455' LOOKL: SOJL SDEL,POPOUT ;TEST FOR END + 003115' 271200 000002 ADDI SX,2 + 003116' 200004 777777 MOVE AC0,-1(SX) + 003117' 260740 012740' PUSHJ PP,SRCH7 ;LOAD REGISTERS + 003120' 557000 000005 HLRZS ARG + 003121' 260760 013510' PUSHJ PP,@LOOKX ;RETURN TO CALLING ROUTINE + 003122' 254000 003114' JRST LOOKL ;TRY AGAIN + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 59 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 003123' 260740 001066' END0: PUSHJ PP,EVALCM ;GET A WORD + 003124' 332000 013742' SKIPE EXTPNT ;ANY EXTERNALS? + 003125' 660600 000040 TRO ER,ERRE ;YES, ERROR + 003126' 336300 000000 SKIPN V,AC0 ;NON-ZERO? + 003127' 322440 003131' JUMPE RC,.+2 ;OR RELOC? + 003130' 260740 004116' PUSHJ PP,ASSIG7 ;YES, LIST THE VALUE + 003131' 202000 014053' MOVEM AC0,VECTOR + 003132' 202440 014052' MOVEM RC,VECREL + 003133' 260740 003551' PUSHJ PP,VARA ;FILL OUT SELF-DEFINED VARIABLES + 003134' 260740 000236' PUSHJ PP,STOUTS ;DUMP THE LINE + 003135' 261740 000014 PUSH PP,IO ;SAVE FLAGS + 003136' 661600 040000 TLO IO,IOPROG ;XLIST LITS + 003137' 260740 003456' PUSHJ PP,LIT1 + 003140' 262740 000014 POP PP,IO ;GET FLAG BACK + 003141' 325640 003216' JUMP2 ENDP2 + + 003142' 260740 002074' PUSHJ PP,UOUT + 003143' 607600 000010 TLNN IO,MFLSW ;SKIP IF ONLY PSEND + 003144' 260740 007437' PUSHJ PP,REC2 + 003145' 200000 013343' MOVE INDIR ;SET UP FIRST AS LAST + 003146' 202000 013207' MOVEM LSTFIL ;PRINTED + 003147' 402000 014102' SETZM LSTPGN + 003150' 260740 003356' PUSHJ PP,INZ + 003151' 603600 000010 TLNE IO,MFLSW ;IF PSEND + 003152' 263740 000000 POPJ PP, ;BACK TO PSEND0 + 003153' 332000 013731' SKIPE PRGPTR ;HAVE ANY PRGEND'S BEEN SEEN + 003154' 254000 005027' JRST PSEND3 ;YES,GO SET UP AGAIN + + 003155' 402000 013740' PASS20: SETZM CTLSAV + 003156' 260740 002743' PUSHJ PP,COUTI + 003157' 260740 002130' PUSHJ PP,EOUT ;OUTPUT THE ENTRIES + 003160' 260740 003103' PUSHJ PP,OUTSET + 003161' 000006 002665' XWD 6,NOUT ;OUTPUT THE NAME (BLKTYP-6) + IFN RENTSW,< + SKIPN HISNSW ;PUT OUT BLOCK TYPE 3? + JRST PASS21 ;NO + PUSHJ PP,OUTSET + XWD 3,HSOUT ;OUTPUT THE HISEG BLOCK + PASS21: > + 003162' 201000 000001 MOVEI 1 + 003163' 542000 013347' HRRM BLKTYP ;SET FOR TYPE 1 BLOCK + 003164' 621640 400000 TLZ FR,P1 ;SET FOR PASS 2 AND TURN OFF FLAG + 003165' 661600 004000 TLO IO,IOPALL ;PUT THESE BACK + 003166' 621600 040440 TLZ IO,IOPROG!IOCREF!DEFCRS ;SO LISTINGS WILL BE THE WAY THEY SHOULD + 003167' 607640 004000 TLNN FR,R1BSW + 003170' 254000 003003' JRST STOWI + + 003171' 200400 014700' MOVE CS,[XWD $ST-1-$CKSM,R1BLDR] + 003172' 200350 000000 MOVE C,0(CS) + 003173' 260740 010405' PUSHJ PP,PTPBIN + 003174' 253400 003172' AOBJN CS,.-2 + 003175' 260740 010465' PUSHJ PP,R1BI + 003176' 254000 003003' JRST STOWI + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 60 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + + 003177' R1BLDR: + 000000 PHASE 0 + 003177' 777762 000000 IOWD $ADR,$ST + 003200' 710600 000060 $ST: CONO PTR,60 + 003201' 541400 000004 HRRI $A,$RD+1 + 003202' 710740 000010 $RD: CONSO PTR,10 + 003203' 254000 000003 JRST .-1 + 003204' 710470 000007 DATAI PTR,@$TBL1-$RD+1($A) + 003205' 256010 000007 XCT $TBL1-$RD+1($A) + 003206' 256010 000012 XCT $TBL2-$RD+1($A) + 003207' 364400 000000 $A: SOJA $A, + 003210' 312740 000016 $TBL1: CAME $CKSM,$ADR + 003211' 270756 000001 ADD $CKSM,1($ADR) + 003212' 331740 000016 SKIPL $CKSM,$ADR + 003213' 254200 000001 $TBL2: JRST 4,$ST + 003214' 253700 000003 AOBJN $ADR,$RD + 003215' 254000 000002 $ADR: JRST $ST+1 + 000017 $CKSM: + 003216' DEPHASE + + IF2,< PURGE $ST,$RD,$A,$TBL1,$TBL2,$ADR,$CKSM> + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 61 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 003216' 260740 002731' ENDP2: PUSHJ PP,COUTD ;DUMP THE BUFFER + 003217' 200000 014000' MOVE AC0,LOCO ;CHECK TO SEE IF LIT DIFFERED + 003220' 336000 014006' SKIPN MODO ;AND USE SMALLER SINCE AT END + JRST [CAMN AC0,ABSHI + HRRZM AC2,ABSHI + 003221' 254000 014701' JRST ENDP2W] + IFN RENTSW,<SKIPE HHIGH ;SKIP IF NOT TWO SEGMENTS + JRST [CAMN AC0,HHIGH + HRRZM AC2,HHIGH + JRST ENDP2W]> + 003222' 316000 013735' CAMN AC0,HIGH + 003223' 552100 013735' HRRZM AC2,HIGH + 003224' ENDP2W: + 003224' 603600 000400 REPEAT 1,<TLNE IO,IOCREF ;CLOSE CREF IF NECESSARY> + REPEAT 0,<TLNE FR,CREFSW ;IF CREFFING + JRST ENDP2Q + MOVEI SDEL,0 + PUSH PP,DBUF+3 ;SO NO PAGE INFO + DPB SDEL,[POINT 7,DBUF+3,13] + IOR ER,OUTSW ;MAKE SURE OF OUTPUT + PUSHJ PP,CREF + MOVEI C,20 ;CODE FOR TITLE + PUSHJ PP,OUTLST + PUSH PP,IO ;SAVE THIS + TLZ IO,IOPAGE ;AND PREVENT PAGE DURING TITLE + MOVEI CS,TBUF + PUSHJ PP,OUTAS0 + MOVEI CS,VBUF + PUSHJ PP,OUTAS0 + POP PP,IO ;RESTORE THE IO WORD + POP PP,DBUF+3 > ;NEEDS FIX TO CREF + 003225' 260740 012676' PUSHJ PP,CLSCR2 ;CLOSE IT UP + 003226' 540600 013512' ENDP2Q: HRR ER,OUTSW ;SET OUTPUT SWITCH + 003227' 336000 013727' SKIPN TYPERR + 003230' 660600 000001 TRO ER,TTYSW + 003231' 260740 002074' PUSHJ PP,UOUT ;OUTPUT UNDEFINEDS + 003232' 660600 000001 TRO ER,TTYSW + 003233' 051540 000007 SKPINC C ;SEE IF WE CAN INPUT A CHAR. + 003234' 255000 000000 JFCL ;BUT ONLY TO DEFEAT ^O + 003235' 337340 013376' SKIPG C,ERRCNT ;GET ERROR COUNT AND CHECK FOR POSITIVE + 003236' 254000 003254' JRST NOERW ;PRINT NO ERROR MESSAGE + 003237' 272340 000000* IFN CCLSW,<ADDM C,JOBERR ;REMEMBER ERROR COUNT FOR EXECUTION DELETION> + 003240' 260740 010600' PUSHJ PP,OUTCR + 003241' 200340 013376' MOVE C,ERRCNT + 003242' 306340 000001 CAIN C,1 ;1 IS A SPECIAL CASE + 003243' 254000 003251' JRST ONERW ;PRINT MESSAGE + 003244' 201340 000077 MOVEI C,"?" ;? FOR BATCH + 003245' 260740 010607' PUSHJ PP,OUTL ;... + 003246' 200340 013376' MOVE C,ERRCNT ;PRINT NUMBER OF ERRORS + 003247' 260740 003051' PUSHJ PP,DNC + 003250' 334400 014704' SKIPA CS,[EXP ERRMS1] ;LOAD TO PRINT + 003251' 201400 010153' ONERW: MOVEI CS,ERRMS2 ;ONE ERROR DETECTED + 003252' 260740 003065' ONERW1: PUSHJ PP,OUTSIX ;PRINT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 61-1 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 003253' 254000 003262' JRST ENDP2A + 003254' 201400 010156' NOERW: MOVEI CS,ERRMS3 + 003255' 603600 001010 IFN CCLSW,<TLNE IO,CRPGSW!MFLSW ;IF RPG, DON'T PRINT MESSAGE> + IFE CCLSW,<TLNE IO,MFLSW ;NOR IF MULTI-FILE MODE> + 003256' 620600 000001 TRZ ER,TTYSW ;NO TTY OUTPUT + 003257' 434600 013512' IOR ER,OUTSW ;UNLESS NEEDED FOR LISTING + 003260' 260740 010600' PUSHJ PP,OUTCR + 003261' 254000 003252' JRST ONERW1 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 62 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 003262' 260740 010600' ENDP2A: PUSHJ PP,OUTCR + 003263' 607600 000010 TLNN IO,MFLSW ;IN A MULTI-PROG FILE? + 003264' 254000 003270' JRST ENDP2D ;NO + 003265' 332000 013376' SKIPE ERRCNT ;ANY ERROR? + PUSHJ PP,[MOVEI CS,[ASCIZ /PROGRAM /] + PUSHJ PP,OUTAS0 ;YES,SO PRINT MESSAGE + MOVEI CS,TBUF ;AND TITLE + PUSHJ PP,OUTAS0 ;FOR IDENTIFICATION + 003266' 260740 014707' JRST OUTCR] ;AND A CR-LF + 003267' 624600 000001 TRZA ER,TTYSW ;NO MORE OUTPUT NOW + 003270' ENDP2D: + 003270' 603600 001000 IFN CCLSW,<TLNE IO,CRPGSW ;IF RPG, DON'T PRINT PGM BREAK + 003271' 620600 000001 TRZ ER,TTYSW ;...> + IFE CCLSW,< SKIPA ;SO PRGEND CODE CAN WORK> + 003272' 434600 013512' IOR ER,OUTSW ;... + 003273' 260740 010600' PUSHJ PP,OUTCR + IFN RENTSW,< + MOVEI CS,[SIXBIT /HI-SEG. BREAK IS @/] + SKIPN HHIGH ;DON'T PRINT IF ZERO + JRST ENDP2C ;IT WAS + PUSHJ PP,OUTSIX + HRLO CS,HHIGH ;GET THE BREAK + PUSHJ PP,ONC1 + PUSHJ PP,OUTCR + ENDP2C:> + 003274' 201400 014714' MOVEI CS,[SIXBIT /PROGRAM BREAK IS @/] + 003275' 260740 003065' PUSHJ PP,OUTSIX ;OUTPUT PROGRAM BREAK + 003276' 550400 013734' HRRZ CS,ABSHI ;GET ABS. BREAK + 003277' 307400 000140 CAIG CS,140 ;ANY ABS. CODE + JRST [HRLO CS,HIGH ;NO + 003300' 254000 014717' JRST ENDP2B] ;SO DON'T PRINT + 003301' 524400 013735' HRLO CS,HIGH ;GET PROGRAM BREAK + 003302' 260740 003035' PUSHJ PP,ONC1 + 003303' 260740 010600' PUSHJ PP,OUTCR + 003304' 201400 014721' MOVEI CS,[SIXBIT /ABSLUTE BREAK IS @/] + 003305' 260740 003065' PUSHJ PP,OUTSIX + 003306' 524400 013734' HRLO CS,ABSHI + 003307' 260740 003035' ENDP2B: PUSHJ PP,ONC1 + 003310' 260740 010600' PUSHJ PP,OUTCR + 003311' 603640 004400 TLNE FR,RIMSW!R1BSW ;RIM MODE? + 003312' 260740 003345' PUSHJ PP,RIMFIN ;YES, FINISH IT + 003313' 607600 001010 IFN CCLSW,<TLNN IO,CRPGSW!MFLSW ;IF NOT IN CCL MODE> + IFE CCLSW,<TLNN IO,MFLSW ;NOR IF IN MULTI-FILE MODE> + 003314' 660600 000001 TRO ER,TTYSW ;PRINT SIZE + 003315' 260740 010600' PUSHJ PP,OUTCR + 003316' 200340 000012* MOVE C,JOBREL + 003317' 242340 777766 LSH C,-^D10 + 003320' 271340 000001 ADDI C,1 + 003321' 260740 003051' PUSHJ PP,DNC + 003322' 201400 014724' MOVEI CS,[SIXBIT /K CORE USED@/] + 003323' 260740 003065' PUSHJ PP,OUTSIX + 003324' 260740 010600' PUSHJ PP,OUTCR + 003325' 540600 013512' HRR ER,OUTSW + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 62-1 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + 003326' 260740 003103' PUSHJ PP,OUTSET + 003327' 000002 002165' XWD 2,SOUT ;OUTPUT THE SYMBOLS (BLKTYP-2) + 003330' 260740 003103' PUSHJ PP,OUTSET + 003331' 000007 002717' XWD 7,VOUT ;OUTPUT TRANSFER VECTOR (..-7) + IFN WFWSW,<PUSHJ PP,OUTSET ;OUTPUT THE LVAR FIXUPS + XWD 13,OUTB12> + 003332' 260740 003103' PUSHJ PP,OUTSET + 003333' 000005 002712' XWD 5,HOUT ;OUTPUT HIGHEST RELOCATABLE (..-5) + 003334' 260740 002731' PUSHJ PP,COUTD + 003335' 607600 000010 TLNN IO,MFLSW ;IS IT PRGEND? + 003336' 254000 007225' JRST FINIS ;ALAS, FINISHED + 003337' 201400 013527' MOVEI CS,SBUF ;RESET SBUF POINTER + 003340' 542400 013550' HRRM CS,SUBTTX ;TO SUBTTL + 003341' 402000 013734' SETZM PASS2I ;CLEAR PASS2 VARIABLES + 003342' 200000 014726' MOVE [XWD PASS2I,PASS2I+1] + 003343' 251000 014076' BLT PASS2Z-1 ;BUT NOT ALL OF VARIABLES + 003344' 254000 003356' JRST INZ ;RE-INITIALIZE FOR NEXT PROG + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 63 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + IFN WFWSW,< + OUTB12: SKIPN ARG,FIXLNK ;WERE THERE ANY?? + POPJ PP, ;JUST GO AWAY + OUTB19: HRRZ SX,(ARG) ;POINTER TO HEADER BLOCK NOW IN SX + HRRZ AC1,(SX) ;NOW AC1 HAS POINTER TO CODE FIXUPS + JUMPE AC1,OUTB13 ;NONE THERE + OUTB16: HLRZ AC0,(AC1) ;GET LOCATION OFFSET + ADD AC0,2(SX) ;ADD BASE LOCATION + SKIPN 1(AC1) ;AND RIGHT HALF?? + JRST OUTB14 ;NO + PUSH PP,AC0 ;SAVE FIXUP VALUE + SETZB AC0,RC + PUSHJ PP,OUTBWD ;OUTPUT A Z (SAYS RIGHT HALF CODE) + POP PP,AC0 ;GET VALUE BACK + HLRZ RC,1(AC1) ;GET RELOC OF FIXUP CHAIN + LSH RC,1 ;GOES IN LEFT HALF + HRL AC0,1(AC1) ;LOCATION OF CHAIN + PUSHJ PP,OUTBWD ;LEFT HALF LOCATION, RIGHT HALF VALUE + OUTB14: SKIPN 2(AC1) ;ANY LEFT HALF?? + JRST OUTB15 ;NO, GO LOOK FOR NEXT BLOCK + PUSH PP,AC0 ;SAVE VALUE + MOVEI RC,0 + MOVSI AC0,400000 ;INDICATE LEFT HALF + PUSHJ PP,OUTBWD + POP PP,AC0 + HLRZ RC,2(AC1) ;GET RELOC FOR LEFT HALF + LSH RC,1 + HRL AC0,2(AC1) + PUSHJ PP,OUTBWD + OUTB15: HRRZ AC1,(AC1) ;NEXT LINK IN CHAIN + JUMPN AC1,OUTB16 ;IF NOT END, PROCESS + OUTB13: HLRZ AC1,(SX) ;POINTER TO SYMBOL TABLE FIXUP CHAIN + JUMPE AC1,OUTB17 ;CHACK FOR SOME THERE + OUTB18: MOVE AC0,2(AC1) ;FLAGS + HRR AC0,2(SX) ;VALUE IN RH + MOVEI RC,0 ;NO RELCO ON IT + PUSHJ PP,OUTBWD + MOVE AC0,1(AC1) ;THE SYMBOL NAME + PUSHJ PP,OUTBWD + HRRZ AC1,(AC1) ;FOOLOW CHAIN + JUMPN AC1,OUTB18 + OUTB17: HRRZ ARG,-1(ARG) ;DONE WITH THIS SYMBOL GET NEXT + JUMPN ARG,OUTB19 + POPJ PP, ;ALL DONE + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 64 +MACRO 10 24-APR-78 02:11 OUTPUT ROUTINES + + + OUTBWD: SKIPL COUTX ;IF WE ARE AT THE START + JRST COUT ;NO PUT OUT + PUSH PP,AC0 ;WE NEED TO PUT NEW RELOC AND VAR LENGTH + PUSH PP,RC ;AS FIRST TWO WORDS + MOVE AC0,HIGH + MOVEI RC,1 ;IT IS RELOC + PUSHJ PP,COUT + MOVE AC0,LVARLC ;THE LENGTH + MOVEI RC,0 + PUSHJ PP,COUT + POP PP,RC + POP PP,AC0 + JRST COUT ;NOW PUT OUT THE ONE WE WANTED TO + > + + 003345' 603640 004000 RIMFIN: TLNE FR,R1BSW + 003346' 260740 010447' PUSHJ PP,R1BDMP + 003347' 336340 014053' SKIPN C,VECTOR + 003350' 205340 254200 MOVSI C,(JRST 4,) + 003351' 607340 777000 TLNN C,777000 + 003352' 661340 254000 TLO C,(JRST) + 003353' 260740 010405' PUSHJ PP,PTPBIN + 003354' 201340 000000 MOVEI C,0 + 003355' 254000 010405' JRST PTPBIN + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 65 +MACRO 10 24-APR-78 02:11 PASS INITIALIZE + + SUBTTL PASS INITIALIZE + 003356' 350000 014004' INZ: AOS MODA + 003357' 350000 014006' AOS MODO + 003360' 402000 013214' SETZM SEQNO + 003361' 402000 013211' SETZM TAG + 003362' 541640 000010 HRRI RX,^D8 + 003363' 201000 013477' MOVEI VARHD + 003364' 202000 013500' MOVEM VARHDX + 003365' 201000 013504' MOVEI LITHD + 003366' 202000 013505' MOVEM LITHDX + 003367' 260740 003526' PUSHJ PP,LITI + 003370' 260740 003003' PUSHJ PP,STOWI + 003371' 254000 001774' JRST OUTLI + + 003372' 220100 000005 RCPNTR: POINT 1,ARG,^L<RELF>-18 ;POINT 1,ARG,22 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 66 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + SUBTTL PSEUDO-OP HANDLERS + + 003373' 260740 000236' TAPE0: PUSHJ PP,STOUTS ;FINISH THIS LINE + 003374' 254000 007447' JRST GOTEND ;AND IGNORE THE REST OF THIS FILE + + 003375' 260740 004034' RADIX0: PUSHJ PP,EVAL10 ;EVALUATE RADIX D10 + 003376' 307000 000012 CAIG AC0,^D10 ;IF GREATER THAN 10 + 003377' 307000 000001 CAIG AC0,1 ;OR LESS THAN 2, + 003400' 664600 040000 ERRAX: TROA ER,ERRA ;FLAG ERROR AND SKIP + 003401' 540640 000000 HRR RX,AC0 ;SET NEW RADIX + 003402' 263740 000000 POPJ PP, + + + 003403' 621600 000001 XALL0: TLZ IO,IOSALL ;TURN OFF MACRO SUPPRESS ALL + 003404' 321640 000455' IOSET: JUMP1 POPOUT ;NOSYM (IONSYM), XALL (IOPALL), XLIST (IOPROG) + 003405' 554200 000000 HLRZ SX,AC0 ;STORE FLAGS + 003406' 260740 000236' PUSHJ PP,STOUTS ;POLISH OFF LINE + 003407' 661604 000000 TLO IO,0(SX) ;NOW SUPRESS PRINTING + 003410' 263740 000000 POPJ PP, + + 003411' 630600 000000 IORSET: TDZ IO,AC0 ;RESET FLAG IOPALL/IOPROG + 003412' 603000 002000 TLNE AC0,IONCRF ;RESTORING CREFFING? + 003413' 621600 000040 TLZ IO,DEFCRS ;YES, CLEAR ANY WAITING DEFINING OCCURENCES + 003414' 263740 000000 POPJ PP, + + 003415' 260740 004235' BLOCK0: PUSHJ PP,HIGHQ + 003416' 260740 001077' PUSHJ PP,EVALEX ;EVALUATE + 003417' 622440 777777 TRZE RC,-1 ;EXTERNAL OR RELOCATABLE? + 003420' 260740 004041' PUSHJ PP,QEXT ;YES, DETERMINE TYPE + 003421' 272000 014000' ADDM AC0,LOCO ;UPDATE ASSEMBLY LOCATION + 003422' 250000 013777' BLOCK1: EXCH AC0,LOCA ;SAVE START OF BLOCK + 003423' 272000 013777' ADDM AC0,LOCA ;UPDATE OUTPUT LOCATION + 003424' 526000 013776' BLOCK2: HRLOM AC0,LOCBLK + 003425' 325640 000455' JUMP2 POPOUT + 003426' 602600 002000 TRNE ER,ERRU + 003427' 660600 001000 TRO ER,ERRV + 003430' 263740 000000 POPJ PP, + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 67 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + + 003431' 660600 000001 PRNTX0: TRO ER,TTYSW ;SET OUTPUT TO TTY + 003432' 325640 003434' JUMP2 PRNTX2 ;PASS1? + 003433' 674600 013512' TDOA ER,OUTSW ;YES,OUTPUT TO LSTDEV ALSO + 003434' 420600 013512' PRNTX2: ANDCM ER,OUTSW ;NO,DON'T OUTPUT TO TTY IF IT IS LSTDEV + 003435' 260740 004543' PUSHJ PP,BYPASS ;GET FIRST CHAR. + 003436' 665600 000004 TLOA IO,IORPTC ;REPEAT IT AND SKIP + 003437' 260740 010572' PRNTX4: PUSHJ PP,PRINT ;PRINT THE CHAR. + 003440' 260740 001415' PUSHJ PP,CHARAC ;GET ASCII CHAR. + 003441' 307340 000015 CAIG C,CR ;IF GREATER THAN CR + 003442' 307340 000011 CAIG C,HT ;OR LESS THAN LF + 003443' 254000 003437' JRST PRNTX4 ;THEN CONTINUE + 003444' 260740 010600' PUSHJ PP,OUTCR ;OUTPUT A CRLF + 003445' 624600 000003 TRZA ER,TTYSW!LPTSW ;TURN OF OUTPUT + 003446' 350017 000000 CPOPJ1: AOS (PP) ;USEFUL TAG HAS TO GO SOMEWHERE + 003447' 263740 000000 CPOPJ: POPJ PP, ;EXIT + + 003450' 260740 001363' REMAR0: PUSHJ PP,GETCHR ;GET A CHARACTER + 003451' 302340 000033 CAIE C,EOL + 003452' 254000 003450' JRST REMAR0 + 003453' 263740 000000 POPJ PP, ;EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 68 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 003454' 260740 003422' LIT0: PUSHJ PP,BLOCK1 + 003455' 260740 000236' PUSHJ PP,STOUTS + 003456' 325640 003466' LIT1: JUMP2 LIT20 + + ;ON PASS ONE, WE JUST STEP THE LOCATION COUNTER AND CLEAR + + 003457' 200000 013506' MOVE AC0,LITCNT + 003460' 200200 013505' MOVE SX,LITHDX + 003461' 506004 000000 HRLM AC0,0(SX) + 003462' 200300 013777' MOVE V,LOCA + 003463' 504300 014004' HRL V,MODA + 003464' 202304 777777 MOVEM V,-1(SX) + 003465' 254000 003522' JRST LIT24 + + 003466' 261740 013777' LIT20: PUSH PP,LOCA + 003467' 261740 014000' PUSH PP,LOCO + 003470' 336000 013507' SKIPN LITNUM + 003471' 254000 003476' JRST LIT20A + 003472' 200200 013505' MOVE SX,LITHDX + 003473' 550004 777777 HRRZ AC0,-1(SX) + 003474' 312000 013777' CAME AC0,LOCA + 003475' 660600 000100 TRO ER,ERRP + 003476' 200200 013501' LIT20A: MOVE SX,LITAB + 003477' 375000 013507' LIT21: SOSGE LITNUM + 003500' 254000 003511' JRST LIT22 + 003501' 200004 777776 MOVE AC0,-2(SX) ;WFW + 003502' 200444 777777 MOVE RC,-1(SX) ;WFW + 003503' 200204 000000 MOVE SX,(SX) ;WFW POINTER TO THE NEXT LIT + 003504' 260740 002763' PUSHJ PP,STOW20 ;STOW CODE + 003505' 201340 000012 MOVEI C,12 ;SET LINE FEED + 003506' 136340 013453' IDPB C,LBUFP + 003507' 260740 001556' PUSHJ PP,OUTLIN ;OUTPUT THE LINE + 003510' 254000 003477' JRST LIT21 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 69 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 003511' 550100 014000' LIT22: HRRZ AC2,LOCO + 003512' 262740 014000' POP PP,LOCO + 003513' 262740 013777' POP PP,LOCA + 003514' 200200 013505' MOVE SX,LITHDX + 003515' 554004 000000 HLRZ AC0,0(SX) + 003516' 274100 014000' SUB AC2,LOCO ;COMPUTE LENGTH USED + 003517' 315000 000002 CAMGE AC0,AC2 ;USE LARGER + 003520' 200000 000002 MOVE AC0,AC2 + 003521' 270100 014000' ADD AC2,LOCO + 003522' 272000 013777' LIT24: ADDM AC0,LOCA + 003523' 272000 014000' ADDM AC0,LOCO + 003524' 260740 003533' PUSHJ PP,GETTOP + 003525' 542200 013505' HRRM SX,LITHDX + 003526' 402000 013506' LITI: SETZM LITCNT + 003527' 402000 013507' SETZM LITNUM + 003530' 201000 013501' MOVEI LITAB + 003531' 202000 013502' MOVEM LITABX + 003532' 254000 004235' JRST HIGHQ + + 003533' 550040 000004 GETTOP: HRRZ AC1,SX ;VARHD + 003534' 550204 000000 HRRZ SX,0(SX) + 003535' 326200 000455' JUMPN SX,POPOUT + 003536' 201200 000003 MOVEI SX,3 ;WFW + 003537' 273200 013377' ADDB SX,FREE + 003540' 311200 013552' CAML SX,SYMBOL + 003541' 260740 010277' PUSHJ PP,XCEED + 003542' 275200 000001 SUBI SX,1 ;MAKE SX POINT TO LINK + 003543' 402004 000000 SETZM 0(SX) ;CLEAR FORWARD LINK + 003544' 542201 000000 HRRM SX,0(AC1) ;STORE ADDRESS IN LAST LINK + 003545' 263740 000000 POPJ PP, + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 70 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 003546' 260740 003422' VAR0: PUSHJ PP,BLOCK1 ;PRINT LOCATION + 003547' 260740 003551' PUSHJ PP,VARA + 003550' 254000 000236' JRST STOUTS + + 003551' 200200 013500' VARA: MOVE SX,VARHDX + 003552' 200000 013777' MOVE AC0,LOCA ;GET LOCATION FOR CHECK + 003553' 321640 003556' JUMP1 VARB ;DO NOT CHECK START ON PASS 1 + 003554' 312004 777777 CAME AC0,-1(SX) ;CHECK START OF VAR AREA + 003555' 660600 000100 TRO ER,ERRP ;AND GIVE ERROR + 003556' 202004 777777 VARB: MOVEM AC0,-1(SX) ;SAVE START FOR PASS 2 + 003557' 554004 000000 HLRZ AC0,0(SX) + 003560' 272000 013777' ADDM AC0,LOCA + 003561' 272000 014000' ADDM AC0,LOCO + 003562' 260740 003533' PUSHJ PP,GETTOP + 003563' 542200 013500' HRRM SX,VARHDX + 003564' 325640 000455' JUMP2 POPOUT + + 003565' 260740 003111' PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + IFN WFWSW,<TRNN ARG,EXTF ;IN CASE LVAR HAS BEEN THROUGH> + 003566' 626240 000100 TRZN ARG,VARF + 003567' 263740 000000 POPJ PP, ;NO, EXIT + 003570' 620240 002000 TRZ ARG,UNDF ;TURN OFF FLAG NOW + IFN WFWSW,<MOVSI AC0,1(V) ;NUMBER TO ADD TO> + 003571' 205000 000001 IFE WFWSW,<MOVSI AC0,1 ;ADD 1> + 003572' 272001 000000 ADDM AC0,0(AC1) ;UPDATE COUNT + IFN WFWSW,< + VARA1: ADDI V,1 ;GET LENGTH OF DESIRED BLOCK + ADDM V,LOCO + EXCH V,LOCA + ADDM V,LOCA + HRL ARG,V ;GET STARTING LOCATION AND UPDAT PCS + > + + 003573' 434240 014004' IOR ARG,MODA ;SET TO ASSEMBLY MODE + 003574' 504240 013777' IFE WFWSW,<HRL ARG,LOCA> + 003575' 206244 000000 MOVSM ARG,0(SX) ;UPDATE 2ND WRD OF SYM TAB ENTRY + 003576' 350000 013777' IFE WFWSW,<AOS LOCA + 003577' 350000 014000' AOS LOCO> + 003600' 254000 004235' JRST HIGHQ1 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 71 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 003601' 261740 000000 IF: PUSH PP,AC0 ;SAVE AC0 + 003602' 261740 000014 PUSH PP,IO + 003603' 260740 004046' PUSHJ PP,EVALXQ ;EVALUATE AND TEST EXTERNAL + 003604' 262740 000001 POP PP,AC1 + 003605' 321040 003607' JUMPL AC1,IFPOP + 003606' 621600 400000 TLZ IO,FLDSW + 003607' 262740 000001 IFPOP: POP PP,AC1 ;RETRIEVE SKIP INSTRUCTION + 003610' 661600 000004 IFSET: TLO IO,IORPTC ;REPEAT CHARACTER + 003611' 256000 000001 IFXCT: XCT AC1 ;EXECUTE INSTRUCTION + 003612' 634000 000000 TDZA AC0,AC0 ;FALSE + 003613' 201000 000001 MOVEI AC0,1 ;TRUE + 003614' 325600 005266' IFEXIT: JUMPOC REPEA1 ;BRANCH IF IN OP-CODE FIELD + 003615' 260740 001363' IFEX1: PUSHJ PP,GETCHR ;SEARCH FOR "<" + 003616' 306340 000033 CAIN C,EOL ;ERROR IF END OF LINE + 003617' 254000 003400' JRST ERRAX + 003620' 302340 000034 CAIE C,34 + 003621' 254000 003615' JRST IFEX1 + 003622' 322000 003753' JUMPE AC0,IFEX2 ;TEST FOR 0 + 003623' 661600 000004 TLO IO,IORPTC ;NO, PROCESS AS CELL + 003624' 260740 000363' PUSHJ PP,CELL + 003625' 402000 013747' SETZM INCND ;NOT ANY MORE + 003626' 254000 002751' JRST STOW ;STOW CODE AND EXIT + + 003627' 541000 400000 IFPASS: HRRI AC0,P1 ;MAKE IT TLNX IO,P1 + 003630' 200040 000000 MOVE AC1,AC0 ;PLACE IT IN AC1 + 003631' 254000 003610' JRST IFSET ;EXECUTE INSTRUCTION + + 003632' 520040 000000 IFB0: HLLO AC1,AC0 ;FORM AND STORE TEST INSTRUCTION + 003633' 260740 001445' IFB1: PUSHJ PP,CHARL ;GET FIRST NON-BLANK + 003634' 302340 000040 CAIE C," " + 003635' 306340 000011 CAIN C," " + 003636' 254000 003633' JRST IFB1 ;SKIP BLANKS AND TABS + 003637' 307340 000015 CAIG C,CR ;CHECK FOR CARRET AS DELIM. + 003640' 305340 000012 CAIGE C,LF + 003641' 334200 014101' SKIPA SX,SEQNO2 + 003642' 254000 003400' JRST ERRAX + 003643' 202200 013764' MOVEM SX,CNDSEQ + 003644' 200200 014100' MOVE SX,PAGENO + 003645' 202200 013763' MOVEM SX,CNDPG + 003646' 476000 013747' SETOM INCND ;SAVE INFO. FOR PASS 1 ERRORS + 003647' 306340 000074 CAIN C,"<" ;LEFT BRACKET? + 003650' 403340 000011 SETZB C,RC ;YES, PREPARE FOR OLD FORMAT + 003651' 334200 000007 SKIPA SX,C ;SAVE FOR COMPARISON + 003652' 660000 000001 IFB3: TRO AC0,1 ;SET FLAG + 003653' 260740 001445' IFB2: PUSHJ PP,CHARL ;GET ASCII CHARACTER AND LIST + 003654' 316340 000004 CAMN C,SX ;TEST FOR DELIMITER + 003655' 254000 003611' JRST IFXCT ;FOUND + 003656' 302340 000040 CAIE C," " ;BLANK? + 003657' 306340 000011 CAIN C," " ;OR TAB? + 003660' 254000 003653' JRST IFB2 ;YES + 003661' 326200 003652' JUMPN SX,IFB3 ;JUMP IF NEW FORMAT + 003662' 306340 000074 CAIN C,"<" ;<? + 003663' 344440 003653' AOJA RC,IFB2 ;YES, INCREMENT COUNT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 71-1 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 003664' 306340 000076 CAIN C,">" ;>? + 003665' 361440 003611' SOJL RC,IFXCT ;YES, DECREMENT AND EXIT IF DONE + 003666' 254000 003652' JRST IFB3 ;GET NEXT CHARACTER + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 72 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 003667' 541000 002000 IFDEF0: HRRI AC0,UNDF ;MAKE IT TLNX ARG,UNDF + 003670' 261740 000000 PUSH PP,AC0 ;STACK IT + 003671' 260740 001043' PUSHJ PP,GETSYM ;TAKES SKIP RETURN IF SYM NAME IS LEGAL + 003672' 664600 040000 TROA ER,ERRA ;ILLEGAL! + 003673' 260740 012713' PUSHJ PP,SEARCH + JRST [PUSHJ PP,OPTSCH + TLO ARG,UNDF + 003674' 254000 014727' JRST .+1] + 003675' 260740 012620' PUSHJ PP,SSRCH3 ;EMIT TO CREF ANYWAY + 003676' 254000 003607' JRST IFPOP ;POP AND EXECUTE INSTRUCTION + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 73 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 003677' 557000 000000 IFIDN0: HLRZS AC0 + 003700' 201300 000047 MOVEI V,2*.IFBLK-1 + 003701' 402006 013400' SETZM IFBLK(V) ;CLEAR COMPARISON BLOCK + 003702' 365300 003701' SOJGE V,.-1 + 003703' 402000 014054' SETZM .TEMP ;CLEAR STORED DELIMETER + 003704' 201440 013400' MOVEI RC,IFBLK ;SET FOR FIRST BLOCK + 003705' 260740 003717' PUSHJ PP,IFCL ;GET FIRST STRING + 003706' 201440 013424' MOVEI RC,IFBLKA + 003707' 260740 003717' PUSHJ PP,IFCL ;GET SECOND STRING + 003710' 201300 000023 MOVEI V,.IFBLK-1 + 003711' 200206 013400' MOVE SX,IFBLK(V) ;GET WORD FROM FIRST STRING + 003712' 316206 013424' CAMN SX,IFBLKA(V) ;COMPARE WITH SECOND STRING + 003713' 365300 003711' SOJGE V,.-2 ;EQUAL, TRY NEXT WORD + 003714' 321300 003614' JUMPL V,IFEXIT ;DID WE FINISH STRING + 003715' 431000 000001 XORI AC0,1 ;NO, TOGGLE REQUEST + 003716' 254000 003614' JRST IFEXIT ;DO NOT TURN ON IORPTC WFW + + 003717' 260740 001415' IFCL: PUSHJ PP,CHARAC ;GET AND LIST CHARACTER + 003720' 302340 000040 CAIE C," " ;SKIP SPACES + 003721' 307340 000015 CAIG C,CR ;ALSO SKIP CR-LF + 003722' 305340 000011 CAIGE C,HT ;AND TAB + 003723' 254000 003725' JRST .+2 ;NOT ONE OF THEM + 003724' 254000 003717' JRST IFCL ;SO LONG COMPARISONS WILL WORK + ;*** A CROCK SO THAT IFIDN <X>,<X>,<INST.> WILL WORK *** + 003725' 302340 000054 CAIE C,"," ;IS IT A COMMA? + 003726' 254000 003731' JRST .+3 ;NO + 003727' 336000 014054' SKIPN .TEMP ;YES, WAS PREVIOUS FIELD OLD METHOD? + 003730' 254000 003717' JRST IFCL ;YES, IGNORE COMMA AND SPACES + ; *** + 003731' 306340 000074 CAIN C,"<" ;WAS IT LEFT BRACKET? + 003732' 474340 000000 SETO C, ;SIGNAL OLD METHOD, LOOK FOR RIGHT BRACKET + 003733' 202340 014054' MOVEM C,.TEMP ;STORE TERMINATOR FOR COMPARISON + 003734' 201200 000143 MOVEI SX,5*.IFBLK-1 ;LIMIT SEARCH + 003735' 505440 440700 HRLI RC,(POINT 7,,) ;SET UP BYTE IN RC + 003736' 260740 001415' IFCLR: PUSHJ PP,CHARAC + 003737' 333000 014054' SKIPLE .TEMP ;NEW METHOD? + 003740' 254000 003745' JRST IFCLR1 ;YES, IGNORE ANGLE BRACKET COUNTING + 003741' 306340 000074 CAIN C,"<" ;ANOTHER LEFT ANGLE? + 003742' 370000 014054' SOS .TEMP ;YES, KEEP COUNT + 003743' 306340 000076 CAIN C,">" ;CLOSING ANGLE + 003744' 355000 014054' AOSGE .TEMP ;MATCHING COUNT? + 003745' 316340 014054' IFCLR1: CAMN C,.TEMP ;TEST FOR DELIMITER + 003746' 263740 000000 POPJ PP, ;EXIT ON RIGHT DELIMITER + 003747' 367200 003751' SOJG SX,.+2 ;ANY ROOM IN COMPARISON BLOCK? + 003750' 664600 040000 TROA ER,ERRA ;NO, FLAG ERROR BUT KEEP ON GOING + 003751' 136340 000011 IDPB C,RC ;DEPOSIT BYTE + 003752' 254000 003736' JRST IFCLR + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 74 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + + 003753' 260740 001363' IFEX2: PUSHJ PP,GETCHR + 003754' 306340 000033 CAIN C,EOL ;EXIT WITH ERROR IF END OF LINE + 003755' 254000 003400' JRST ERRAX + 003756' 306340 000034 CAIN C,34 ;"<"? + 003757' 344000 003753' AOJA AC0,IFEX2 ;YES, INCREMENT COUNT + 003760' 302340 000036 CAIE C,36 ;">"? + 003761' 254000 003753' JRST IFEX2 ;NO, TRY AGAIN + 003762' 365000 003753' SOJGE AC0,IFEX2 ;YES, TEST FOR MATCH + 003763' 260740 004543' PUSHJ PP,BYPASS ;YES, MOVE TO NEXT DELIMITER + 003764' 402000 013747' SETZM INCND ;OUT OF CONDITIONAL NOW + 003765' 344000 002750' AOJA AC0,STOWZ1 ;STOW ZERO + + + 003766' 512000 013743' INTER0: HLLZM AC0,INTENT ;AC0 CONTAINS INTF/ENTF FLAGS + + 003767' 260740 001043' INTER1: PUSHJ PP,GETSYM ;GET A SYMBOL + 003770' 254000 003777' JRST INTER3 ;INVALID, SKIP + 003771' 260740 012610' PUSHJ PP,SSRCH ;SEARCH THE TABLE + 003772' 205240 402400 MOVSI ARG,SYMF!INTF!UNDF + 003773' 603240 002000 TLNE ARG,UNDF ;UNDEFINED? + 003774' 660600 040000 TRO ER,ERRA ;YES, FLAG ERROR + IFN WFWSW,<TLNN ARG,VARF ;LET HIM MAKE INTERNAL EVEN IF EXTF ON> + 003775' 607240 041000 TLNN ARG,SYNF!EXTF + 003776' 674240 013743' TDOA ARG,INTENT ;SET APPROPRIATE FLAGS + 003777' 664600 040000 INTER3: TROA ER,ERRA ;FLAG ARG EROR AND SKIP + 004000' 260740 013034' PUSHJ PP,INSERQ ;INSERT/UPDATE + 004001' 321400 003767' JUMPCM INTER1 + 004002' 402000 013742' SETZM EXTPNT ;JUST IN CASE, SO AS NOT TO CONFUSE WORLD + 004003' 263740 000000 POPJ PP, ;NO, EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 75 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004004' 260740 001043' EXTER0: PUSHJ PP,GETSYM ;GET A SYMBOL + 004005' 254000 004030' JRST EXTER4 ;INVALID, ERROR + 004006' 661600 000040 EXTER1: TLO IO,DEFCRS ;FLAG THIS AS A DEFINITION + 004007' 260740 012610' PUSHJ PP,SSRCH ;OK, SEARCH SYMBOL TABLE + 004010' 254000 004015' JRST EXTER2 ;NOT THERE, INSERT IT + 004011' 607240 003100 TLNN ARG,EXTF!VARF!UNDF + 004012' 664600 000040 TROA ER,ERRE ;FLAG ERROR AND BYPASS + 004013' 603240 001000 TLNE ARG,EXTF ;VALID, ALREADY DEFINED? + JRST [JUMP1 EXTER3 ;YES, BYPASS + TLZN ARG,UNDF ;SKIP IF UNDEFINED ALSO + JRST EXTER3 ;CONTINUE + ANDM ARG,(SX) ;CLEAR UNDF ON PASS 2 + 004014' 254000 014732' JRST EXTER2] ;SET UP EXTERNAL NOW + 004015' 201300 000002 EXTER2: MOVEI V,2 ;NO, GET 2 CELLS FROM THE TREE + 004016' 273300 013377' ADDB V,FREE + 004017' 311300 013552' CAML V,SYMBOL ;HAVE WE RUN OUT OF CORE? + 004020' 260740 010276' PUSHJ PP,XCEEDS ;YES, TRY TO BORROW SOME MORE + 004021' 275300 000002 SUBI V,2 ;GET RIGHT CELL FOR POINTER + 004022' 403446 000000 SETZB RC,0(V) ;ALL SET, ZERO VALUES + 004023' 205240 401000 MOVSI ARG,SYMF!EXTF + 004024' 260740 013036' PUSHJ PP,INSERT ;INSERT/UPDATE IT + 004025' 205240 004000 MOVSI ARG,PNTF + 004026' 436244 000000 IORM ARG,0(SX) + 004027' 334244 777777 SKIPA ARG,-1(SX) ;GET THE SIXBIT FOR THE NAME + 004030' 664600 040000 EXTER4: TROA ER,ERRA ;FLAG AS ERROR + 004031' 202246 000001 MOVEM ARG,1(V) ;AND STORE THAT IN CASE SYMBOL TABLE MOVES + 004032' 321400 004004' EXTER3: JUMPCM EXTER0 + 004033' 263740 000000 POPJ PP, ;NO, EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 76 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004034' 261740 000015 EVAL10: PUSH PP,RX + 004035' 541640 000012 HRRI RX,^D10 + 004036' 260740 001077' PUSHJ PP,EVALEX ;EVALUATE + 004037' 262740 000015 POP PP,RX ;RESET RADIX + 004040' 322440 000455' JUMPE RC,POPOUT ;EXIT IF ABSOLUTE + + 004041' 332000 013742' QEXT: SKIPE EXTPNT ;ANY POSSIBILITIES? + 004042' 664600 000040 TROA ER,ERRE ;YES, FLAG EXTERNAL ERROR + 004043' 660600 004000 TRO ER,ERRR ;NO, FLAG RELOCATION ERROR + 004044' 513000 000011 HLLZS RC ;CLEAR RELOCATION/EXTERNAL + 004045' 263740 000000 POPJ PP, + + 004046' 260740 001077' EVALXQ: PUSHJ PP,EVALEX ;EVALUATE EXPRESSION + 004047' 627440 777776 TLZN RC,-2 ;LEFT HALF EXTERNAL + 004050' 622440 777776 TRZE RC,-2 ;WAS AN EXTERNAL FOUND? + 004051' 660600 000040 TRO ER,ERRE ;YES, FLAG ERROR + 004052' 263740 000000 POPJ PP, ;RETURN + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 77 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004053' 260740 001043' OPDEF0: PUSHJ PP,GETSYM ;GET THE FIRST SYMBOL + 004054' 263740 000000 POPJ PP, ;ERROR IF INVALID SYMBOL + 004055' 302340 000073 CAIE C,73 ;"["? + 004056' 254000 003400' JRST ERRAX ;NO, ERROR + 004057' 261740 000000 PUSH PP,AC0 ;STACK MNEMONIC + 004060' 350000 013773' AOS LITLVL ;SHORT OUT LOCATION INCREMENT + 004061' 260740 000125' PUSHJ PP,STMNT ;EVALUATE STATEMENT + 004062' 335000 013555' SKIPGE STPX ;CODE STORED? + 004063' 664600 040000 TROA ER,ERRA ;NO,"A" ERROR + 004064' 260740 002776' PUSHJ PP,DSTOW ;GET AND DECODE VALUE + 004065' 370000 013773' SOS LITLVL + 004066' 250017 000000 EXCH AC0,0(PP) ;EXCHANGE VALUE FOR MNEMONIC + 004067' 261740 000011 PUSH PP,RC ;STACK RELOCATION + 004070' 661600 000040 TLO IO,DEFCRS ;SAY WE ARE DEFINING IT + 004071' 260740 012573' PUSHJ PP,MSRCH ;SEARCH SYMBOL TABLE + 004072' 205240 010000 MOVSI ARG,OPDF ;NOT FOUND + 004073' 262740 000011 POP PP,RC ;RESTORE VALUES + 004074' 262740 000006 POP PP,V + 004075' 603240 060000 TLNE ARG,SYNF!MACF + 004076' 660600 040000 TRO ER,ERRA ;YES "A" ERROR + 004077' 606600 040000 TRNN ER,ERRA ;ERROR? + 004100' 260740 013036' PUSHJ PP,INSERT ;NO, INSERT/UPDATE + 004101' 621600 000040 TLZ IO,DEFCRS ;JUST IN CASE + 004102' 260740 004543' PUSHJ PP,BYPASS + 004103' 254000 003003' JRST STOWI ;BE SURE STOW IS RESET + + + 004104' 200000 014000' DEPHA0: MOVE AC0,LOCO + 004105' 334440 014006' SKIPA RC,MODO ;SET TO OUTPUT VALUES AND SKIP + 004106' 260740 004046' PHASE0: PUSHJ PP,EVALXQ ;EVALUATE AND CHECK FOR EXTERNAL + 004107' 202000 013777' MOVEM AC0,LOCA ;SET ASSEMBLY LOCATION COUNTER + 004110' 202440 014004' MOVEM RC,MODA + 004111' 254000 003424' JRST BLOCK2 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 78 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004112' 321600 003400' ASSIGN: JUMPAD ERRAX ;NO, ERROR + 004113' 260740 004126' PUSHJ PP,ASSIG1 + 004114' 603600 000001 TLNE IO,IOSALL ;SUPPRESS ALL? + 004115' 326540 003447' JUMPN MRP,CPOPJ ;IF IN MACRO + 004116' 202440 013775' ASSIG7: MOVEM RC,ASGBLK + 004117' 602440 777776 TRNE RC,-2 ;EXTERNAL + 004120' 513000 013775' HLLZS ASGBLK ;YES,CLEAR RELOCATION + 004121' 603440 000001 TLNE RC,1 ;LEFT HALF NOT RELOC? + 004122' 603440 777776 TLNE RC,-2 ;... + 004123' 563000 013775' HRROS ASGBLK ;YES, SET FLAG + 004124' 202300 013776' MOVEM V,LOCBLK + 004125' 263740 000000 POPJ PP, + + 004126' 261740 000000 ASSIG1: PUSH PP,AC0 ;SAVE SYMBOL + 004127' 403000 013742' SETZB AC0,EXTPNT ;SPECIAL CHECK FOR == WFW + 004130' 260740 006531' PUSHJ PP,PEEK ;IS THE NEXT ON = + 004131' 302340 000075 CAIE C,"=" + 004132' 254000 004136' JRST ASSIG5 + 004133' 661000 100000 TLO AC0,NOOUTF ;YES, NOT OUT TO DDT WFW + 004134' 260740 001363' PUSHJ PP,GETCHR ;PROCESS THE CHAR. + 004135' 260740 006531' PUSHJ PP,PEEK ;CHECK FOR ==: DMN + 004136' 302340 000072 ASSIG5: CAIE C,":" ;IS IT + 004137' 254000 004142' JRST ASSIG6 ;NO + 004140' 661000 000400 TLO AC0,INTF ;MAKE INTERNAL + 004141' 260740 001363' PUSHJ PP,GETCHR ;REPEAT IT + 004142' 202000 014103' ASSIG6: MOVEM AC0,HDAS ;STORE THESE BITS WFW + 004143' 260740 001066' PUSHJ PP,EVALCM ;EVALUATE EXPRESSION + 004144' 250017 000000 EXCH AC0,0(PP) ;SWAP VALUE FOR SYMBOL + 004145' 261740 000011 PUSH PP,RC + 004146' 606440 777776 TRNN RC,-2 ;CHECK EXTERNAL AGREEMENT + 004147' 254000 004154' JRST ASSIG2 + 004150' 553000 000011 HRRZS RC + 004151' 550240 013742' HRRZ ARG,EXTPNT + 004152' 312440 000005 CAME RC,ARG + 004153' 260740 004041' PUSHJ PP,QEXT ;EXTERNAL OR RELOCATION ERROR + 004154' 554457 000000 ASSIG2: HLRZ RC,(PP) + 004155' 606440 777776 TRNN RC,-2 + 004156' 254000 004162' JRST ASSIG3 + 004157' 554240 013742' HLRZ ARG,EXTPNT + 004160' 312440 000005 CAME RC,ARG + 004161' 260740 004041' PUSHJ PP,QEXT + 004162' 661600 000040 ASSIG3: TLO IO,DEFCRS + 004163' 260740 012610' PUSHJ PP,SSRCH + 004164' 205240 400000 MOVSI ARG,SYMF + 004165' 434240 014103' IOR ARG,HDAS ;WFW + 004166' 603240 002000 TLNE ARG,UNDF ;WAS IT UNDEFINED + 004167' 621240 005000 TLZ ARG,EXTF!PNTF ;YES,CLEAR EXTF NOW + 004170' 621240 002100 TLZ ARG,UNDF!VARF ;CANCEL UNDEFINED AND VARIABLE FLAGS + 004171' 402000 013742' SETZM EXTPNT ;FOR REST OF WORLD + 004172' 262740 000011 POP PP,RC + 004173' 602600 577760 TRNE ER,ERRORS-ERRQ + 004174' 400440 000000 SETZ RC, ;CLEAR RELOCATION + 004175' 262740 000006 POP PP,V + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 78-1 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004176' 602600 002000 TRNE ER,ERRU ;WAS VALUE UNDEFINED? + 004177' 661240 002000 TLO ARG,UNDF ;YES,SO TURN UNDF ON + 004200' 603240 201000 TLNE ARG,TAGF!EXTF + 004201' 254000 003400' JRST ERRAX + 004202' 254000 013036' JRST INSERT + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 79 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004203' 260740 004235' LOC0: PUSHJ PP,HIGHQ ;AC0=0,0 + 004204' 261740 000000 PUSH PP,AC0 ;SAVE MODE REQUESTED + 004205' 557000 000000 HLRZS AC0 ;PUT MODE IN RIGHT HALF + 004206' 326000 004227' JUMPN AC0,RELOC0 ;RELOC PSEUDO-OP + 004207' 316000 014006' CAMN AC0,MODO ;SAME AS PRESENT MODE? + JRST [HRRZ AC0,LOCO ;YES + EXCH AC0,ABSLOC ;EXCH VALUES + 004210' 254000 014737' JRST LOC01] + 004211' 550000 014000' HRRZ AC0,LOCO ;NO, GET CURRENT VALUE + 004212' 202000 014001' MOVEM AC0,RELLOC ;SAVE IT + 004213' 200000 014002' MOVE AC0,ABSLOC ;GET LAST RELOC VALUE + 004214' 260740 004543' LOC01: PUSHJ PP,BYPASS ;SKIP BLANKS + 004215' 661600 000004 TLO IO,IORPTC + 004216' 302340 000033 CAIE C,EOL ;USE PREVIOUS VALUE IF NULL ARGUMENT + 004217' 260740 004046' PUSHJ PP,EVALXQ ;GET EXPRESSION AND TEST EXTERNAL + 004220' 542017 000000 HRRM AC0,(PP) ;STORE NEW VALUE + 004221' 262740 000000 POP PP,AC0 ;RETRIEVE STORED MODE AND VALUE + 004222' 552000 013777' LOC10: HRRZM AC0,LOCA ;SET ASSEMBLY LOCATION + 004223' 552000 014000' HRRZM AC0,LOCO ;AND OUTPUT LOCATION + 004224' 556000 014004' HLRZM AC0,MODA ;SET MODE + 004225' 556000 014006' HLRZM AC0,MODO + 004226' 254000 003424' JRST BLOCK2 + + 004227' 316000 014006' RELOC0: CAMN AC0,MODO + JRST [HRRZ AC0,LOCO + EXCH AC0,RELLOC + 004230' 254000 014742' JRST LOC01] + 004231' 550000 014000' HRRZ AC0,LOCO + 004232' 202000 014002' MOVEM AC0,ABSLOC + 004233' 200000 014001' MOVE AC0,RELLOC + 004234' 254000 004214' JRST LOC01 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 80 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + IFN RENTSW,< + HISEG1: PUSHJ PP,HIGHQ ;SET CURRENT PROGRAM BREAK + PUSHJ PP,COUTD ;DUMP CURRENT TYPE OF BLOCK + SKIPN HISNSW ;IF WE HAVE SEEN IT BEFORE + SKIPE HIGH ;OR ANY RELOC CODE PUT OUT + TRO ER,ERRQ ;FLAG AS AN ERROR + PUSHJ PP,BYPASS ;GO GET EXPRESSION + TLO IO,IORPTC + PUSHJ PP,EVALXQ ;CHECK FOR EXTERNAL + ANDCMI AC0,1777 ;ONLY ALLOWED TO START ON NEW K BOUND + HRRZM AC0,LOCA ;SET LOC COUNTERS + HRRZM AC0,LOCO + MOVEI RC,1 ;ASSUME RELOCATABLE + POPJ PP, + + TWSEG0: PUSHJ PP,HISEG1 ;COMMON CODE + JUMPN AC0,.+2 ;ARGUMENT SEEN + MOVEI AC0,400000 ;ASSUME 400000 + HRRZM AC0,HMIN ;SET OFSET OF HIGH SEG. + HRRZM AC0,HHIGH ;INCASE NO HISEG CODE + TLOA AC0,(1B0) ;SIGNAL TWO SEGMENTS AND SKIP + + HISEG0: PUSHJ PP,HISEG1 ;COMMON CODE + HISEG2: MOVEM AC0,SVTYP3 ;SAVE THE HISEG ARG + MOVEM RC,MODA ;SET MODES + MOVEM RC,MODO + SETOM HISNSW ;WE HAVE ALREADY PUT ONE OUT + JRST BLOCK2 ;MAKE LISTING HAPPEN RIGHT> + + IFE RENTSW,< + SYN CPOPJ,HISEG0 + SYN CPOPJ,TWSEG0> + + SYN CPOPJ,ONFORM + SYN CPOPJ,OFFORM + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 81 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004235' HIGHQ: + 004235' 200300 014000' HIGHQ1: MOVE V,LOCO ;GET ASSEMBLY LOCATION + 004236' 336000 014006' SKIPN MODO ;IF ASSEMBLY MODE IS ABSOLUTE + JRST [CAMLE V,ABSHI ;RECORED ABS HIGHEST ALSO + MOVEM V,ABSHI + 004237' 254000 014745' POPJ PP,] + IFN RENTSW,<SKIPE HMIN ;IS IT A TWO SEGMENT PROGRAM? + JRST [CAMGE V,HMIN ;YES,IS THIS HIGH SEG.? + JRST .+1 ;NO,STORE LOW SEGMENT + CAMLE V,HHIGH ;YES,IS IT GREATER THAN "HHIGH"? + MOVEM V,HHIGH ;YES,REPLACE WITH LARGER VALUE + POPJ PP,]> + 004240' 313300 013735' CAMLE V,HIGH ;IS IT GREATER THAN "HIGH"? + 004241' 202300 013735' MOVEM V,HIGH ;YES, REPLACE WITH LARGER VALUE + 004242' 263740 000000 POPJ PP, + + 004243' 625640 200000 ONML: TLZA FR,MWLFLG ;MULTI-WORD LITERALS OK + 004244' 661640 200000 OFFML: TLO FR,MWLFLG ;NO + 004245' 263740 000000 POPJ PP, + + 004246' 476000 013730' OFFSYM: SETOM IONSYM ;SUPRESS SYMBOL TABLE LISTING + 004247' 263740 000000 POPJ PP, + + 004250' 260740 001043' SUPRE0: PUSHJ PP,GETSYM ;GET A SYMBOL TO SUPRES + 004251' 254000 004255' JRST SUPRE1 ;ERROR + 004252' 260740 012610' PUSHJ PP,SSRCH ;SYMBOL ONLY + 004253' 254000 004255' JRST SUPRE1 ;GIVE ERROR MESSAGE + 004254' 665240 000004 TLOA ARG,SUPRBT ;SET THE SUPRESS BIT + 004255' 664600 040000 SUPRE1: TROA ER,ERRA + 004256' 436244 000000 IORM ARG,(SX) ;PUT BACK + 004257' 321400 004250' JUMPCM SUPRE0 ;ANY MORE? + 004260' 254000 004264' JRST SUPRS1 + + 004261' 260740 003111' SUPRSA: PUSHJ PP,LOOKUP ;SUPRESS ALL + 004262' 205240 000004 MOVSI ARG,SUPRBT + 004263' 436244 000000 IORM ARG,(SX) + 004264' 402000 013742' SUPRS1: SETZM EXTPNT ;JUST IN CASE WE LOOKED ONE UP + 004265' 263740 000000 POPJ PP, + + 004266' 321640 000455' XPUNG0: JUMP1 POPOUT + 004267' 260740 003111' PUSHJ PP,LOOKUP + 004270' 200244 000000 MOVE ARG,(SX) ;GET SYMBOL FLAGS + 004271' 607240 001610 TLNN ARG,INTF!ENTF!EXTF!SPTR + 004272' 665240 000004 TLOA ARG,SUPRBT ;LOCAL SYMBOL,SO SUPPRESS IT + 004273' 402000 013742' SETZM EXTPNT + 004274' 202244 000000 MOVEM ARG,(SX) ;RESTORE FLAGS + 004275' 263740 000000 POPJ PP, + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 82 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004276' 325640 003450' TITLE0: JUMP2 REMAR0 + 004277' 201200 000120 MOVEI SX,.TBUF + 004300' 541000 013701' HRRI AC0,TBUF + 004301' 260740 004315' PUSHJ PP,SUBTT1 ;GO READ IT + 004302' 202200 013700' MOVEM SX,TCNT ;SAVE COUNT OF CHARS. WRITTEN + 004303' 332000 013733' SKIPE UNIVSN ;WAS IT A UNIVERSAL? + 004304' 260740 005176' PUSHJ PP,ADDUNV ;YES ADD TO TABLE + 004305' 663600 000002 TLOE IO,IOTLSN ;HAVE WE SEEN ONE + IFE CCLSW,<TRO ER,ERRM ;YES, COMPLAIN> + 004306' 664600 000020 IFN CCLSW,<TROA ER,ERRM ;YES, MESSAGE + 004307' 254000 004326' JRST PRNAM ;PRINT NAME IF FIRST ONE> + 004310' 263740 000000 POPJ PP, ;EXIT OTHERWISE + + 004311' 332000 013527' SUBTT0: SKIPE SBUF ;STORE FIRST SUBTTL ON PASS1 + 004312' 321640 003450' JUMP1 REMAR0 ;OTHERWISE EXIT IF PASS ONE + 004313' 201200 000120 MOVEI SX,.SBUF + 004314' 541000 013527' HRRI AC0,SBUF + + 004315' 260740 004543' SUBTT1: PUSHJ PP,BYPASS ;BYPASS LEADING BLANKS + 004316' 661600 000004 TLO IO,IORPTC + 004317' 260740 001415' SUBTT3: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + 004320' 136340 000000 IDPB C,AC0 ;STORE IN BLOCK + 004321' 305340 000040 CAIGE C,40 ;TEST FOR TERMINATOR + 004322' 306340 000011 CAIN C,HT + 004323' 367200 004317' SOJG SX,SUBTT3 ;TEST FOR BUFFER FULL + 004324' 137440 000000 DPB RC,AC0 ;END, STORE TERMINATOR + 004325' 364200 003447' SOJA SX,CPOPJ ;COUNT NUL AND EXIT + + IFN CCLSW,< + 004326' 607600 001000 PRNAM: TLNN IO,CRPGSW ;NOT IF NOT RPG + 004327' 263740 000000 POPJ PP, + 004330' 261740 000000 PUSH PP,AC0 ;SAVE AC0 DMN + 004331' 261740 000011 PUSH PP,RC ;AND RC + 004332' 200000 014676' MOVE AC0,[POINT 7,TBUF] + 004333' 200200 014750' MOVE SX,[POINT 7,OTBUF] + 004334' 201440 000006 MOVEI RC,6 ;MAX OF SIX CHRS + 004335' 134340 000000 PN1: ILDB C,AC0 + 004336' 303340 000040 CAILE C," " ;CHECK FOR LEGAL + 004337' 303340 000172 CAILE C,"Z"+40 ;CHECK AGAINST LOWER CASE Z + 004340' 254000 004343' JRST PN2 + 004341' 136340 000004 IDPB C,SX ;PUT IN OUTPUT BUFFER + 004342' 367440 004335' SOJG RC,PN1 ;GET MORE + 004343' 201340 000000 PN2: MOVEI C,0 + 004344' 136340 000004 IDPB C,SX ;TERMINATOR + 004345' 051140 014007' TTCALL 3,OTBUF + TTCALL 3,[ASCIZ / + 004346' 051140 014751' /] + 004347' 262740 000011 POP PP,RC + 004350' 262740 000000 POP PP,AC0 ;RESTORE AC0 DMN + 004351' 263740 000000 POPJ PP, + > + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 83 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004352' 260740 001043' SYN0: PUSHJ PP,GETSYM ;GET THE FIRST SYMBOL + 004353' 254000 003400' JRST ERRAX ;ERROR, EXIT + 004354' 260740 012573' PUSHJ PP,MSRCH ;TRY FOR MACRO/OPDEF + 004355' 254000 004373' JRST SYN3 ;NO,0THRY FOR OPERAND + 004356' 201200 012573' SYN1: MOVEI SX,MSRCH ;YES, SET FLAG + 004357' 260740 007473' SYN2: PUSHJ PP,SAVEXS ;SAVE REGISTERS + 004360' 325400 003400' JUMPNC ERRAX ;ERROR IF NO COMMA + 004361' 260740 001043' PUSHJ PP,GETSYM ;GET THE SECOND SYMBOL + 004362' 263740 000000 POPJ PP, + 004363' 260760 013521' PUSHJ PP,@SAVBLK+SX ;SEARCH FOR SECOND SYMBOL + 004364' 255000 000000 JFCL + 004365' 200240 013522' MOVE ARG,SAVBLK+ARG ;GET VALUES + 004366' 200440 013526' MOVE RC,SAVBLK+RC + 004367' 200300 013523' MOVE V,SAVBLK+V + 004370' 603240 020000 TLNE ARG,MACF ;MACRO? + 004371' 260740 006543' PUSHJ PP,REFINC ;YES, INCREMENT REFERENCE + 004372' 254000 013036' JRST INSERT ;INSERT AND EXIT + + 004373' 260740 012610' SYN3: PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + 004374' 254000 004404' JRST SYN4 ;NOT FOUND, TRY OP CODE + 004375' 661240 040000 TLO ARG,SYNF ;FLAG AS SYNONYM + 004376' 603240 001000 TLNE ARG,EXTF ;EXTERNAL? + 004377' 550300 000005 HRRZ V,ARG ;YES, RELPACE WITH POINTER + 004400' 201200 012610' MOVEI SX,SSRCH ;SET FLAG + 004401' 607240 000100 TLNN ARG,VARF ;DO NOT LET HIM SYN A VARIABLE + 004402' 254000 004357' JRST SYN2 + 004403' 254000 003400' JRST ERRAX + + 004404' 260740 010754' SYN4: PUSHJ PP,OPTSCH ;SEARCH FOR OP-CODE + 004405' 254000 003400' JRST ERRAX ;NOT FOUND, EXIT WITH ERROR + 004406' 205240 040000 MOVSI ARG,SYNF ;FLAG AS SYNONYM + 004407' 254000 004356' JRST SYN1 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 84 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004410' 260740 001043' PURGE0: PUSHJ PP,GETSYM ;GET A MNEMONIC + JRST [TRZ ER,ERRA ;CLEAR ERROR + 004411' 254000 014752' POPJ PP,] ;AND RETURN + 004412' 260740 012573' PUSHJ PP,MSRCH ;SEARCH MACRO SYMBOL TABLE + 004413' 254000 004421' JRST PURGE2 ;NOT FOUND, TRY SYMBOLS + 004414' 261740 000010 PUSH PP,CS ;SAVE CS AS IT MAY GET GARBAGED + 004415' 603240 020000 TLNE ARG,MACF ;MACRO? + 004416' 260740 006546' PUSHJ PP,REFDEC ;YES, DECREMENT THE REFERENCE + 004417' 262740 000010 POP PP,CS + 004420' 254000 004434' JRST PURGE4 ;REMOVE SYMBOL FROM TABLE + + 004421' 260740 012610' PURGE2: PUSHJ PP,SSRCH ;TRY OPERAND SYMBOL TABLE + 004422' 254000 004435' JRST PURGE5 ;NOT FOUND GET NEXT SYMBOL + 004423' 606440 777776 TRNN RC,-2 ;CHECK COMPLEX EXTERNAL + 004424' 603440 777776 TLNE RC,-2 + 004425' 603240 040000 TLNE ARG,SYNF + 004426' 254000 004430' JRST .+2 + 004427' 254000 004433' JRST PURGE3 + 004430' 603240 003000 TLNE ARG,EXTF!UNDF ;ERROR IF EXTERNAL OR UNDEFINED + 004431' 603240 040000 TLNE ARG,SYNF ;BUT NOT A SYNONYM + 004432' 254000 004434' JRST PURGE4 + 004433' 664600 040000 PURGE3: TROA ER,ERRA ;NOT FOUND, ERROR + 004434' 260740 013115' PURGE4: PUSHJ PP,REMOVE ;REMOVE FROM THE SYMBOL TABLE + 004435' 321400 004410' PURGE5: JUMPCM PURGE0 + 004436' 263740 000000 POPJ PP, ;EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 85 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004437' 603240 002000 OPD1: TLNE ARG,UNDF ;IF OPDEF IS UNDEFINED + 004440' 660600 000200 TRO ER,ERRO ;GIVE "O" ERROR + 004441' 200000 000006 OPD: MOVE AC0,V ;PUT VALUE IN AC0 + 004442' 254000 004445' JRST OP + 004443' 205100 301117 IOP: MOVSI AC2,(POINT 9,0(PP),11) + 004444' 665600 000020 TLOA IO,IOIOPF ;SET "IOP SEEN" AND SKIP + 004445' 205100 270417 OP: MOVSI AC2,(POINT 4,0(PP),12) + 004446' 261740 000011 PUSH PP,RC + 004447' 261740 000000 PUSH PP,AC0 ;STACK CODE + 004450' 261740 000002 PUSH PP,AC2 + 004451' 260740 001077' PUSHJ PP,EVALEX ;EVALUATE FIRST EXPRESSION + 004452' 262740 000002 POP PP,AC2 + 004453' 325400 004465' JUMPNC OP2 + 004454' 260740 001363' OP1B: PUSHJ PP,GETCHR ;GET A CHARACTER + 004455' 321400 004676' JUMPCM XWD5 ;PROCESS COMMA COMMA IN XWD + 004456' 661600 000004 TLO IO,IORPTC ;NOT A COMMA,REPEAT IT + 004457' 135040 000002 LDB AC1,AC2 + 004460' 270040 000000 ADD AC1,AC0 + 004461' 137040 000002 DPB AC1,AC2 + 004462' 322440 004464' JUMPE RC,OP1A ;EXTERNAL OR RELOCATABLE? + 004463' 260740 004041' PUSHJ PP,QEXT ;YES, DETERMINE WHICH AND FLAG AN ERROR + + 004464' 260740 001077' OP1A: PUSHJ PP,EVALEX ;GET ADDRESS PART + 004465' 260740 004474' OP2: PUSHJ PP,EVADR ;EVALUATE STANDARD ADDRESS + 004466' 262740 000000 OP3: POP PP,AC0 ;PUT IN AC0 + 004467' 262740 000011 POP PP,RC + 004470' 332017 000000 SKIPE (PP) ;CAME FROM EVALCM? + 004471' 254000 002751' JRST STOW ;NO,STOW CODE AND EXIT + 004472' 262740 000001 POP PP,AC1 ;YES,EXIT IMMEDIATELY + 004473' 263740 000000 POPJ PP, + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 86 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004474' EVADR: ;EVALUATE STANDARD ADDRESS + 004474' 607000 777777 IFE IIISW,<TLNN AC0,-1 ;OK IF ALL 0'S + 004475' 254000 004501' JRST .+4 ;IT WAS + 004476' 641000 777777 TLC AC0,-1 ;CHANGE ALL ONES TO ZEROS + 004477' 643000 777777 TLCE AC0,-1 ;OK IF ALL 1'S + 004500' 660600 200000 TRO ER,ERRQ ;NO,FLAG Q ERROR> + 004501' 270017 777777 ADD AC0,-1(PP) ;ADD ADDRESS PORTIONS + 004502' 500017 777777 HLL AC0,-1(PP) ;GET LEFT HALF + 004503' 623640 020000 TLZE FR,INDSW ;INDIRECT BIT? + 004504' 661000 000020 TLO AC0,(Z @) ;YES, PUT IT IN + 004505' 202017 777777 MOVEM AC0,-1(PP) ;RE-STACK CODE + 004506' 270457 777776 ADD RC,-2(PP) ;UPDATE RELOCATION + 004507' 542457 777776 HRRM RC,-2(PP) ;USE HALF WORD ADD + 004510' 302340 000010 CAIE C,10 ;"("? + 004511' 263740 000000 POPJ PP, ;NO, EXIT + + 004512' 207000 013742' MOVSS EXTPNT ;WFW + 004513' 260740 001066' PUSHJ PP,EVALCM ;EVALUATE + 004514' 207000 013742' MOVSS EXTPNT ;WFW + 004515' 207300 000000 MOVSS V,AC0 ;SWAP HALVES + 004516' 207200 000011 IFE IIISW,<MOVSS SX,RC + 004517' 434200 000006 IOR SX,V ;MERGE RELOCATION + 004520' 606200 777777 TRNN SX,-1 ;RIGHT HALF ZERO? + 004521' 254000 004533' JRST OP2A ;YES, DO SIMPLE ADD + 004522' 200240 000011 MOVE ARG,RC ;NO, SWAP RC INTO ARG> + IFN IIISW,<MOVSS ARG,RC> + 004523' 270317 777777 ADD V,-1(PP) ;ADD RIGHT HALVES + 004524' 270257 777776 ADD ARG,-2(PP) + 004525' 542317 777777 HRRM V,-1(PP) ;UPDATE WITHOUT CARRY + 004526' 542257 777776 HRRM ARG,-2(PP) + 004527' 513000 000000 HLLZS AC0 ;PREPARE LEFT HALVES + 004530' 513000 000011 HLLZS RC + 004531' 603200 777777 IFE IIISW,<TLNE SX,-1 ;IS LEFT HALF ZERO? + 004532' 660600 200000 TRO ER,ERRQ ;NO FLAG FORMAT ERROR + 004533' 603440 777777 OP2A: TLNE RC,-1 ;RELOCATION FOR LEFT HALF? + 004534' 260740 004546' PUSHJ PP,OP2A1 ;YES,IS IT LEGAL? + 004535' 603000 777000 TLNE AC0,777000 ;OP CODE FIELD USED? + JRST [EXCH AC0,-1(PP);YES, GET STORED CODE + TLNE AC0,777000 ;OP CODE FIELD BEEN SET? + TRO ER,ERRQ ;YES, MOST LIKELY AN ERROR + EXCH AC0,-1(PP) + 004536' 254000 014754' JRST .+1] ;RETURN TO ADD > + 004537' 272017 777777 ADDM AC0,-1(PP) ;MERGE WITH PREVIOUS VALUE + 004540' 272457 777776 ADDM RC,-2(PP) + 004541' 302340 000011 CAIE C,11 ;")"? + 004542' 254000 003400' JRST ERRAX ;NO, FLAG ERROR + ;YES, BYPASS PARENTHESIS + 004543' BYPASS: + 004543' 260740 001363' BYPAS1: PUSHJ PP,GETCHR + 004544' 322340 004543' BYPAS2: JUMPE C,.-1 ;SKIP TRAILING BLANKS + 004545' 263740 000000 POPJ PP, ;EXIT + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 87 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + IFE IIISW,< + 004546' 250457 777776 OP2A1: EXCH RC,-2(PP) ;GET STORED CODE + 004547' 607440 777777 TLNN RC,-1 ;OK IF ALL ZERO + 004550' 254000 004554' JRST OP2A2 ;OK SO RETURN + 004551' 641440 777777 TLC RC,-1 ;CHANGE ALL ONES TO ZEROS + 004552' 643440 777777 TLCE RC,-1 ;OK IF ALL ONES + 004553' 660600 200000 TRO ER,ERRQ ;OTHERWISE A "Q" ERROR + 004554' 250457 777776 OP2A2: EXCH RC,-2(PP) ;GET RC,BACK + 004555' 263740 000000 POPJ PP, ;AND RETURN> + + + 004556' 514000 000015 EXPRES: HRLZ AC0,RX ;FUDGE FOR OCT0 + + 004557' 261740 000015 OCT0: PUSH PP,RX + 004560' 544640 000000 HLR RX,AC0 + 004561' 260740 001077' OCT1: PUSHJ PP,EVALEX ;EVALUATE + 004562' 260740 002751' PUSHJ PP,STOW ;STOW CODE + 004563' 321400 004561' JUMPCM OCT1 + 004564' 262740 000015 POP PP,RX ;YES, RESTORE RADIX + 004565' 263740 000000 POPJ PP, ;EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 88 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004566' 205440 440600 SIXB10: MOVSI RC,(POINT 6,AC0) ;SET UP POINTER + 004567' 201000 000000 MOVEI AC0,0 ;CLEAR WORD + + 004570' 260740 001445' SIXB20: PUSHJ PP,CHARL ;GET NEXT CHARACTER + 004571' 316340 000004 CAMN C,SX ;IS THIS PRESET DELIMITER? + 004572' 254000 004644' JRST ASC60 ;YES + 004573' 301340 000141 CAIL C,"A"+40 + 004574' 303340 000172 CAILE C,"Z"+40 + 004575' 254000 004577' JRST .+2 + 004576' 624340 000100 TRZA C,100 ;CONVERT LOWER CASE TO SIXBIT + 004577' 275340 000040 SUBI C,40 ;CONVERT TO SIXBIT + 004600' 321340 004641' JUMPL C,ASC55 ;TEST FOR INVALID CHARACTER + 004601' 136340 000011 IDPB C,RC ;NO, DEPOSIT THE BYTE + 004602' 603440 770000 TLNE RC,770000 ;IS THE WORD FULL? + 004603' 254000 004570' JRST SIXB20 ;NO, GET NEXT CHARACTER + 004604' 260740 002750' PUSHJ PP,STOWZ ;YES, STORE + 004605' 254000 004566' JRST SIXB10 ;GET NEXT WORD + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 89 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004606' 510140 000000 ASCII0: HLLZ SDEL,AC0 ;STORE ASCII/ASCIZ FLAG + 004607' 260740 001445' ASC10: PUSHJ PP,CHARL ;GET FIRST NON-BLANK + 004610' 302340 000040 CAIE C," " + 004611' 306340 000011 CAIN C,HT + 004612' 254000 004607' JRST ASC10 + 004613' 307340 000015 CAIG C,CR ;CHECK FOR CRRET AS DELIM + 004614' 305340 000012 CAIGE C,LF + 004615' 334200 014101' SKIPA SX,SEQNO2 + 004616' 254000 003400' JRST ERRAX + 004617' 202200 013762' MOVEM SX,TXTSEQ ;SAVE SEQ AND PAGE + 004620' 200200 014100' MOVE SX,PAGENO + 004621' 202200 013761' MOVEM SX,TXTPG + 004622' 476000 013746' SETOM INTXT + 004623' 200200 000007 MOVE SX,C ;SAVE FOR COMPARISON + 004624' 327140 004566' JUMPG SDEL,SIXB10 ;BRANCH IF SIXBIT + + 004625' 205440 440700 ASC20: MOVSI RC,(POINT 7,AC0) ;SET UP POINTER + 004626' 603140 200000 TLNE SDEL,200000 ;THIS BIT (AND BIT0) IN FOR COMMENT + 004627' 205440 440000 MOVSI RC,440000 ;SO NOTHING WILL BE DEPOSITED + 004630' 201000 000000 IFE IIISW,<MOVEI AC0,0 ;CLEAR WORD> + IFN IIISW,<TLNE SDEL,100000 ;ASCID? + TLZA SDEL,400000 ;YES, ZERO ASCIZ BIT + TDZA AC0,AC0 ;NO, ZERO WORD + MOVE AC0,[BYTE (7) 10,10,10,10,10 (1) 1] ;YES, A WORD FULL OF BACKSPACES + > + 004631' 260740 001445' ASC30: PUSHJ PP,CHARL ;GET ASCII CHARACTER AND LIST + 004632' 316340 000004 CAMN C,SX ;TEST FOR DELIMITER + 004633' 254000 004642' JRST ASC50 ;FOUND + 004634' 136340 000011 IDPB C,RC ;DEPOSIT BYTE + 004635' 603440 760000 TLNE RC,760000 ;HAVE WE FINISHED WORD? + 004636' 254000 004631' JRST ASC30 ;NO,GET NEXT CHARACTER + 004637' 260740 002750' PUSHJ PP,STOWZ ;YES, STOW IT + 004640' 254000 004625' JRST ASC20 ;GET NEXT WORD + + 004641' 634400 000010 ASC55: TDZA CS,CS ;ZERO CS IN CASE NESTED + 004642' 634440 000003 ASC50: TDZA RC,SDEL ;TEST FOR ASCIIZ + 004643' 664600 040000 TROA ER,ERRA ;SIXBIT ERROR EXIT + 004644' 260740 004543' ASC60: PUSHJ PP,BYPAS1 ;POLISH OFF TERMINATOR + 004645' 402000 013746' SETZM INTXT ;WE ARE OUT OF IT + IFN IIISW,<TLNN SDEL,100000 ;NO EXTRA WORDS FOR ASCID> + 004646' 420440 013555' ANDCM RC,STPX ;STORE AT LEAST ONE WORD + 004647' 607140 200000 TLNN SDEL,200000 ;GET OUT WITHOUT STORING + 004650' 325440 002750' JUMPGE RC,STOWZ ;STOW + 004651' 263740 000000 POPJ PP, ;ASCII, NO BYTES STORED, SO EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 90 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004652' POINT0: + 004652' 261740 000011 PUSH PP,RC ;STACK REGISTERS + 004653' 261740 000000 PUSH PP,AC0 + 004654' 260740 004034' PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + 004655' 137000 014761' DPB AC0,[POINT 6,0(PP),11] ;STORE BYTE SIZE + 004656' 325400 004665' JUMPNC POINT2 + 004657' 260740 001077' PUSHJ PP,EVALEX ;NO, GET ADDRESS + 004660' 260740 004474' PUSHJ PP,EVADR ;EVALUATE STANDARD ADDRESS + 004661' 325400 004665' JUMPNC POINT2 + 004662' 260740 004034' PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + 004663' 603600 020000 TLNE IO,NUMSW ;IF NUMERIC + 004664' 654000 014607' TDCA AC0,[-1] ;POSITION=D35-RHB + 004665' 201000 000000 POINT2: MOVEI AC0,0 ;OTHERWISE SET TO D36 + 004666' 271000 000044 ADDI AC0,^D36 + 004667' 242000 000036 LSH AC0,^D30 + 004670' 272017 000000 ADDM AC0,0(PP) ;UPDATE VALUE + 004671' 254000 004466' JRST OP3 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 91 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004672' XWD0: + 004672' 261740 000011 PUSH PP,RC + 004673' 261740 000000 PUSH PP,AC0 ;STORE ZERO ON STACK + 004674' 260740 001077' PUSHJ PP,EVALEX ;EVALUATE EXPRESSION + 004675' 325400 004465' JUMPNC OP2 + 004676' 336017 000000 XWD5: SKIPN (PP) ;ANY CODE YET? + 004677' 254000 004704' JRST XWD10 ;NO,USE VALUE IN AC0 + 004700' 322000 004702' JUMPE AC0,.+2 ;ANYTHING IN AC0? + 004701' 660600 200000 TRO ER,ERRQ ;YES,FLAG "Q"ERROR + 004702' 200017 000000 MOVE AC0,(PP) ;USE PREVIOUS VALUE + 004703' 200457 777777 MOVE RC,-1(PP) ;AND RELOCATION + 004704' 516017 000000 XWD10: HRLZM AC0,0(PP) ;SET LEFT HALF + 004705' 516457 777777 HRLZM RC,-1(PP) + 004706' 207000 013742' MOVSS EXTPNT ;WFW + 004707' 254000 004464' JRST OP1A ;EXIT THROUGH OP + + 004710' 260740 004046' IOWD0: PUSHJ PP,EVALXQ ;EVALUATE AND TEST FOR EXTERNAL + 004711' 302340 000014 CAIE C,14 ;","? + JRST [SKIPN AC0 ;IF NZERO AND NO "," SEEN + TRO ER,ERRQ ;TREAT AS Q ERROR + 004712' 254000 014762' SOJA AC0,STOW] ;NO, TREAT AS RIGHT HALF + 004713' 261740 000000 PUSH PP,AC0 ;YES, STACK LEFT HALF + 004714' 260740 001077' PUSHJ PP,EVALEX ;WFW + 004715' 275000 000001 SUBI AC0,1 + 004716' 262740 000001 POP PP,AC1 ;RETRIEVE LEFT HALF + 004717' 213000 000001 MOVNS AC1 + 004720' 504000 000001 HRL AC0,AC1 + 004721' 254000 002751' JRST STOW ;STOW CODE AND EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 92 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004722' 260740 004543' BYTE0: PUSHJ PP,BYPASS ;GET FIRST NON-BLANK + 004723' 302340 000010 CAIE C,10 ;"("? + 004724' 254000 003400' JRST ERRAX ;NO, FLAG ERROR AND EXIT + 004725' 261740 000011 PUSH PP,RC + 004726' 261740 000000 PUSH PP,AC0 ;INITIALIZE STACK TO ZERO + 004727' 205240 447717 MOVSI ARG,(POINT -1,(PP)) + + 004730' 261740 000005 BYTE1: PUSH PP,ARG + 004731' 260740 004034' PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + 004732' 262740 000005 POP PP,ARG + 004733' 307000 000044 CAIG AC0,^D36 ;TEST SIZE + 004734' 325000 004736' JUMPGE AC0,.+2 + 004735' 660600 040000 TRO ER,ERRA + 004736' 137000 014765' DPB AC0,[POINT 6,ARG,11] ;STORE BYTE SIZE + + 004737' 133000 000005 BYTE2: IBP ARG ;INCREMENT BYTE + 004740' 626240 777777 TRZN ARG,-1 ;OVERFLOW? + 004741' 254000 004746' JRST BYTE3 ;NO + 004742' 403000 000011 SETZB AC0,RC ;YES + 004743' 250017 000000 EXCH AC0,0(PP) ;GET CURRENT VALUES + 004744' 250457 777777 EXCH RC,-1(PP) ;AND STACK ZEROS + 004745' 260740 002751' PUSHJ PP,STOW ;STOW FULL WORD + + 004746' 261740 000005 BYTE3: PUSH PP,ARG + 004747' 260740 001077' PUSHJ PP,EVALEX ;COMPUTE NEXT BYTE + 004750' 262740 000005 POP PP,ARG + 004751' 137000 000005 DPB AC0,ARG ;STORE BYTE + 004752' 520000 000005 HLLO AC0,ARG + 004753' 137440 000000 DPB RC,AC0 ;STORE RELOCATION + + 004754' 321400 004737' JUMPCM BYTE2 + 004755' 306340 000010 CAIN C,10 ;"("? + 004756' 254000 004730' JRST BYTE1 ;YES, GET NEW BYTE SIZE + 004757' 254000 004466' JRST OP3 ;NO, EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 93 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 004760' 260740 001077' RADX50: PUSHJ PP,EVALEX ;EVALUATE CODE + 004761' 326440 003400' JUMPN RC,ERRAX ;ERROR IF NOT ABSOLUTE + 004762' 200240 000000 MOVE ARG,AC0 + 004763' 325400 003400' JUMPNC ERRAX + 004764' 260740 001043' PUSHJ PP,GETSYM ;YES, GET SYMBOL + 004765' 620600 040000 TRZ ER,ERRA ;CLEAR ERROR + 004766' 260740 004770' PUSHJ PP,SQOZE ;SQUOZE SIXBIT AND ADD CODE + 004767' 254000 002751' JRST STOW ;STOW CODE AND EXIT + + + 004770' 200100 000000 SQOZE: MOVE AC1+1,AC0 ;PUT SIXBIT IN AC1+1 + 004771' 201000 000000 MOVEI AC0,0 ;CLEAR RESULT + 004772' 201040 000000 SQOZ1: MOVEI AC1,0 + 004773' 246040 000006 LSHC AC1,6 ;PUT 6-BIT CHARACTER IN AC1 + 004774' 135040 014766' LDB AC1,[POINT 6,CSTAT(AC1),23] ;CONVERT TO RADIX50 + 004775' 221000 000050 IMULI AC0,50 ;MULTIPLY PREVIOUS RESULT + 004776' 270000 000001 ADD AC0,AC1 ;ADD NEW CHARACTER + 004777' 326100 004772' JUMPN AC1+1,SQOZ1 ;TEST FOR END + 005000' 242240 000036 LSH ARG,^D30 ;LEFT-JUSTIFY CODE + 005001' 434000 000005 IOR AC0,ARG ;MERGE WITH RESULT + 005002' 263740 000000 POPJ PP, + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 94 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + REPEAT 0,< EXPLANATION OF ARRAY AND LVAR FEATURES + + WHEN A VARIABLE IS SEEN EITHER BY #, INTEGER OR ARRAY + THE VALUE PORTION OF THE SYMBOL TABLE ENTRY (RH OF 2ND WORD) + IS USE TO HOLD THE DESIRED SIZE-1. THE CORRECT VALUE IS + ASSIGNED BY THE VAR PSEUDO OP. + + WHEN LVAR IS SEEN, A SEARCH OF THE SYMBOL TABLE IS MADE + FOR ALL VARIABLES. THE VARF (VARIABLE) FLAG IS + LEFT ON AND EXTF AND PNTF ARE TURNED ON SO THAT THE + VARIABLE LOOKS LIKE AN EXTERNAL. THE POINTER + (RH OF 2ND WORD OF THE SYMBOL TABLE ENTRY) POINTS + TO THE HEADER BLOCK. THE HEADER BLOCK IS FORMATTED AS FOLLOWS: + WORD 1: LEFT HALF IS A POINTER TO SYMBOL TABLE FIXUP BLOCKS + RIGHT HALF IS A POINTER TO CODE FIXUP BLOCKS + WORD 2: 0 THIS IS USED TO DISTINGUISH IT FROM NORMAL EXTERNALS + WHICH HAVE THE SYMBOL NAME HERE + WORD 3: THE LOCATION RELATIVE TO THE START OF THE LOW CORE + VARIABLES + + CORE FIXUP BLOCKS ARE SET UP BY BOUT + + WORD1: RH LINK TO NEXT CORE FIXUP BLOCK 0 IF END OF CHAIN + LH OFFSET. NUMBER TO BE ADDED TO SYMBOL VALUE BEFORE + FIXUP IS DONE + WORD 2: POINTER TO A FIXUP CHAIN FOR RIGHT HALVES + LEFT HALF IS RELOCATION RH IS ADDRESS + WORD 3: SAME AS WORD 2 BUT FOR LEFT HALF FIXUPS + + NOTE ALL THESE FIXUPS ARE CHAINED EVEN IF IN LEFT HALF. + SIMILARY ALL REFERENCES TO SAY A+1 ARE CHAINED + + SYMBOL TABLE FIXUP BLOCKS. THESE ARE GENERATED BY SOUT + AS THE SYMBOL TABLE IS PUT OUT. THESE FIXUPS ARE ADDITIVE + NOT CHAINED. + + WORD 1: RH LINK TO NEXT BLOCK + LH 0 + WORD 2: RADIX50 FOR THE SYMBOL + WORD 3: 200000,,0 IF RH FIXUP + 600000,,0 IF LH FIXUP + + SOUT ALSO SETS UP FIXLNK. FIXLNK POINTS TO THE CHAIN OF + ALL LVAR FIXUPS TO BE DONE. IT POINTS TO THE SECOND WORD + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 95 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + OF A 2 WORD BLOCK + + WORD 1: LINK TO 2ND WORD OF NEXT BLOCK 0 IF END + WORD 2: RH POINTER TO A HEADER BLOCK + LH GARBAGE + + FIXUPS ARE BLOCK TYPE 13 AS FOLLOWS + WORD 1: THE PROGRAM BREAK (AS BLOCK TYPE 5) + WORD 2: THE NUMBER OF LOCATION USED FOR VARIABLES IN THE + LOW SEGMENT+1 + + REMAINING WORDS COME IN PAIRS AS FOLLOWS: + 1ST WORD BIT 0=0 RH FIXUP + BIT 0=1 LH FIXUP + BIT 1=0 CORE FIXUP + WORD 2 LH POINTER TO CHAIN + WORD 2 RH VALUE + BIT 1=1 SYMBOL FIXUP + WORD 1 RH VALUE + WORD 2 SYMBOL + > + + REPEAT 0,< EXPLANATION OF ICC FEATURES + + IF FORMSW IS SET NON ZERO THE FORM OF THE OCTAL LISTING OUTPUT + IS CHANGED FROM STANDARD HALF WORD FORM TO THE FOLLOWING:- + + IF INSTRUCTION BYTE 9,4,1,4,18 + IF I/O INSTRUCTION BYTE 3,7,3,1,4,18 + IF BYTE POINTER BYTE 6,6,2,4,18 + IF ASCII BYTE 7,7,7,7,7 + IF SIXBIT BYTE 6,6,6,6,6,6 + + ALL OTHERS ARE STANDARD HALF WORD + + THIS FEATURE CAN BE OVER RIDDEN BY USE OF /H SWITCH + STANDARD HALF WORD FORM IS THEN USED. + HOWEVER BECAUSE OF EXTRA SPACING THE OUTPUT IS PUSHED MORE + TO THE RIGHT AND LONG COMMENTS OVERFLOW THE LINE + > + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 96 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + IFN WFWSW,< + %INTEG: PUSHJ PP,GETSYM ;GET A SYMBOL + JRST INTG2 ;BAD SYMBOL ERROR + TLO IO,DEFCRS ;THIS IS A DEFINTION + PUSHJ PP,SSRCH ;SEE IF THERE + MOVSI ARG,SYMF!UNDF ;SET SYMBOL AND UNDEFINED IF NOT + TLNN ARG,UNDF ;IF ALREADY DEFINED + JRST INTG1 ;JUST IGNORE + TLOA ARG,VARF ;SET VARIABLE FLAG + INTG2: TROA ER,ERRA ;SYMBOL ERROR + PUSHJ PP,INSERZ ;PUT IN WITH ZERO VALUE (LENGTH OF 1) + INTG1: JUMPCM %INTEG + POPJ PP, + + %ARAY: MOVEM PP,ARAYP ;SAVE PUSHDOW POINTER + ARAY2: PUSHJ PP,GETSYM + JRST ARAY1 ;BAD SYMBOL GIVE ERROR AND ABORT + PUSH PP,AC0 ;SAVE NAME + JUMPCM ARAY2 ;AND GO ON IF A COMMA + CAIE C,"["-40 ;MUST BE A [ + JRST ARAY1 + PUSHJ PP,BYPASS ;OH, WELL + TLO IO,IORPTC + PUSHJ PP,EVALXQ ;GET A SIZE + CAIE C,"]"-40 ;MUST END RIGHT + JRST ARAY1 + PUSHJ PP,BYPASS ;?? + HRRZ V,AC0 ;GET VALUE + SUBI V,1 + NXTVAL: POP PP,AC0 + PUSH PP,V ;SAVE OVER SEARCH + TLO IO,DEFCRS + PUSHJ PP,SSRCH ;FIND IT + MOVSI ARG,SYMF!UNDF + POP PP,V ;GET VALUE BACK + TLNN ARG,UNDF + JRST ARAY3 + TLO ARG,VARF + MOVEI RC,0 ;NO RELOC + PUSHJ PP,INSERT + ARAY3: CAME PP,ARAYP + JRST NXTVAL ;STILL NAMES STACKED + JUMPCM ARAY2 + POPJ PP, + + ARAY1: TRO ER,ERRA ;ERROR EXIT + MOVE PP,ARAYP + POPJ PP, ;RESET PDL AND GO + > + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 97 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + IFN WFWSW,< + %LVAR: JUMP2 POPOUT ;IGNORE ON PASS2 + PUSHJ PP,LOOKUP ;SCAN SYMBOL TABLE + TRNN ARG,EXTF ;THESE ARE LVARS WE HAVE DONE ONCE + TRNN ARG,VARF ;FOR VARIABLES + POPJ PP, ;IGNORE ALL OTHERS + TRZ ARG,UNDF ;SET AS DEFINED + MOVEI RC,3 + ADDB RC,FREE + CAML RC,SYMBOL ;GET BLOCK + PUSHJ PP,XCEEDS + SUBI RC,2 ;POINT TO START OF BLOCK + ADDI V,1 + EXCH V,LVARLC ;GET CORRECT VARIABLE LOCATION + MOVEM V,2(RC) ;SAVE IT + ADDM V,LVARLC ;AND UPDATE BASE + SETZM (RC) + SETZM 1(RC) ;NO NAME TO IDENT AN LVAR AND NO FIXUPS + HRL ARG,RC ;POINTER + TRO ARG,EXTF!PNTF ;FLAG AS EXTERNAL AND POINTER + MOVSM ARG,(SX) ;PUT IT AWAY + POPJ PP, + > + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 98 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + ; PSEUDO-END STATEMENT FOR MULTI-FILE CAPABILITY + + ; HERE IF PRGEND (PASS 1) + 005003' 661600 000010 PSEND0: TLO IO,MFLSW ;PSEND SEEN + 005004' 260740 003123' PUSHJ PP,END0 ;AS IF END STATEMENT + 005005' 513000 000014 HLLZS IO ;CLEAR ER(RH) + 005006' 402000 013376' SETZM ERRCNT ;CLEAR ERROR COUNT FOR EACH PROG. + 005007' 325640 005023' JUMP2 PSEND2 ;DIFFERENT ON PASS2 + 005010' 332000 013733' SKIPE UNIVSN ;SEEN A UNIVERSAL + 005011' 260740 005207' PUSHJ PP,UNISYM ;YES, STORE SYMBOLS + 005012' 260740 005033' PUSHJ PP,PSEND4 ;SAVE SYMBOLS, POINTERS AND TITLE + 005013' 621600 000002 TLZ IO,IOTLSN ;CLEAR TITLE SEEN FLAG + 005014' 621600 000010 PSEND1: TLZ IO,MFLSW ;FOR NEXT FILE + 005015' 402000 014055' SETZM UNISCH ;CLEAR UNIVERSAL SEARCH TABLE + 005016' 200000 014767' MOVE AC0,[UNISCH,,UNISCH+1] + 005017' 251000 014066' BLT AC0,UNISCH+.UNIV-1 + 005020' 260740 010703' PUSHJ PP,OUTFF ;RESET PAGE COUNT + 005021' 205000 000001 MOVSI AC0,1 ;SET SO RELOC 0 WORKS + 005022' 254000 004222' JRST LOC10 ;FOR RELOC 0 + + ; HERE IF PRGEND (PASS 2) + 005023' 402000 013527' PSEND2: SETZM SBUF ;SO SUBTTL IS NOT WRONG + 005024' 260740 005115' PUSHJ PP,PSEND5 ;PUT TITLE BACK + 005025' 260740 005014' PUSHJ PP,PSEND1 ;COMMON CODE + 005026' 254000 003155' JRST PASS20 ;OUTPUT THE ENTRIES + + ; HERE IF END (PASS 1) + 005027' 260740 005033' PSEND3: PUSHJ PP,PSEND4 ;SAVE LAST PROGRAM + 005030' 547000 013731' HLRS PRGPTR ;REINITIALIZE POINTER + 005031' 260740 005115' PUSHJ PP,PSEND5 ;READ BACK FIRST PROGRAM + 005032' 254000 003155' JRST PASS20 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 99 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + ;HERE TO SAVE AND RESTORE SYMBOL TABLE, TITLE AND OTHER USEFUL LOCATIONS + 000004 XTRA==4 ;NUMBER OF OTHER LOCATIONS TO SAVE + + 005033' 200300 013377' PSEND4: MOVE V,FREE ;GET NEXT FREE LOCATION + 005034' 271300 000030 ADDI V,LENGTH+.TBUF/5+XTRA + 005035' 311300 013552' CAML V,SYMBOL ;WILL WORST CASE FIT? + 005036' 260740 010277' PUSHJ PP,XCEED ;NO, EXPAND + 005037' 204300 013377' MOVS V,FREE + 005040' 540300 013731' HRR V,PRGPTR ;LAST PRGEND BLOCK + 005041' 546306 000000 HLRM V,(V) ;LINK THIS BLOCK + 005042' 336000 013731' SKIPN PRGPTR ;IF FIRST TIME + 005043' 512300 013731' HLLZM V,PRGPTR ;SET LINK TO START OF CHAIN + 005044' 546300 013731' HLRM V,PRGPTR ;POINTER TO IT + 005045' 402020 013377' SETZM @FREE ;CLEAR LINK WORD + 005046' 350000 013377' AOS FREE ;THIS LOCATION USED NOW + 005047' 204000 013552' MOVS AC0,SYMBOL ;BOTTOM OF SYMBOL TABLE + 005050' 540000 013377' HRR AC0,FREE ;FREE SPACE + 005051' 200320 013552' MOVE V,@SYMBOL ;GET NUMBER OF SYMBOLS + 005052' 240300 000001 ASH V,1 ;TWO WORDS PER SYMBOL + 005053' 271300 000001 ADDI V,1 ;ONE MORE FOR COUNT + 005054' 273300 013377' ADDB V,FREE ;END OF TABLE WHEN MOVED + 005055' 251006 000000 BLT AC0,(V) ;MOVE TABLE + 005056' 550000 003316* HRRZ AC0,JOBREL ;TOP OF CORE + 005057' 275000 000001 SUBI AC0,1 + 005060' 202000 013553' MOVEM AC0,SYMTOP ;FOR NEXT SYMBOL TABLE + 005061' 275000 000004 SUBI AC0,LENGTH ;LENGTH OF INITIAL SYMBOLS + 005062' 202000 013552' MOVEM AC0,SYMBOL ;SET POINTER TO COUNT OF SYMBOLS + 005063' 505000 012201' HRLI AC0,SYMNUM ;BLT POINTER + 005064' 251020 013553' BLT AC0,@SYMTOP ;SET UP INITIAL SYMBOL TABLE + 005065' 260740 013125' PUSHJ PP,SRCHI ;SET UP SEARCH POINTER + 005066' 201000 000120 MOVEI AC0,.TBUF ;MAX NUMBER OF CHARS. IN TITLE + 005067' 274000 013700' SUB AC0,TCNT ;ACTUAL NUMBER + 005070' 231000 000005 IDIVI AC0,5 ;NUMBER OF WORDS + 005071' 332000 000001 SKIPE AC1 ;REMAINDER? + 005072' 271000 000001 ADDI AC0,1 ;YES + 005073' 202020 013377' MOVEM AC0,@FREE ;STORE COUNT + 005074' 350000 013377' AOS FREE ;THIS LOCATION USED NOW + 005075' 250000 013377' EXCH AC0,FREE ;SET UP AC0 FOR BLT + 005076' 272000 013377' ADDM AC0,FREE ;WILL BE AFTER TITLE MOVES + 005077' 505000 013701' HRLI AC0,TBUF ;BLT POINTER + 005100' 251020 013377' BLT AC0,@FREE ;MOVE TITLE + 005101' 200100 013505' MOVE AC2,LITHDX ;POINTER TO LIT INFO. + 005102' 200002 777777 MOVE AC0,-1(AC2) ;SIZE OF PASS1 LOCO + 005103' 260740 005160' PUSHJ PP,STORIT ;SAVE IT IN SYMBOL TABLE + 005104' 200100 013500' MOVE AC2,VARHDX ;SAME FOR VARS + 005105' 200002 777777 MOVE AC0,-1(AC2) + 005106' 260740 005160' PUSHJ PP,STORIT + IFN RENTSW,< + MOVE AC0,HISNSW ;GET TWOSEG/HISEG FLAG + HRR AC0,HIGH1 ;AND PASS1 BREAK + PUSHJ PP,STORIT + JUMPGE AC0,PSEND6 ;NOT TWOSEG + MOVE AC0,SVTYP3 ;HIGH SEGMENT OFFSET + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 99-1 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + PUSHJ PP,STORIT ;SAVE IT ALSO> + 005107' 200000 013377' PSEND6: MOVE AC0,FREE ;GET NEXT FREE LOCATION + 005110' 275000 000001 SUBI AC0,1 ;LAST ONE USED + 005111' 550300 013731' HRRZ V,PRGPTR ;POINTER TO START OF DATA BLOCK + 005112' 506006 000000 HRLM AC0,(V) ;LINK TO END OF BLOCK + 005113' 263740 000000 POPJ PP, ;RETURN + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 100 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 005114' 260740 010277' PSENDX: PUSHJ PP,XCEED ;NEED TO EXPAND CORE FIRST + 005115' 550000 005056* PSEND5: HRRZ AC0,JOBREL ;GET TOP OF CORE + 005116' 275000 000001 SUBI AC0,1 + 005117' 202000 013553' MOVEM AC0,SYMTOP ;TOP OF NEW SYMBOL TABLE + 005120' 550300 013731' HRRZ V,PRGPTR ;ADDRESS OF THIS BLOCK + 005121' 322300 005165' JUMPE V,PSNDER ;ERROR LINK NOT SET UP + 005122' 200046 000000 MOVE AC1,(V) ;NEXT LINK + 005123' 200306 000001 MOVE V,1(V) ;GET ITS SYMBOL COUNT + 005124' 240300 000001 ASH V,1 ;NUMBER OF WORDS + 005125' 271300 000001 ADDI V,1 ;PLUS ONE FOR COUNT + 005126' 275006 000000 SUBI AC0,(V) ;START OF NEW SYMBOL TABLE + 005127' 317000 013377' CAMG AC0,FREE ;WILL IT FIT + 005130' 254000 005114' JRST PSENDX ;NO, NEED TO EXPAND AND RESET AC0 + 005131' 270300 013731' ADD V,PRGPTR ;POINT TO END OF SYMBOL TABLE + 005132' 201306 000001 MOVEI V,1(V) ;THEN TO BEG OF TITLE + 005133' 202000 013552' MOVEM AC0,SYMBOL ;BOTTOM OF NEW TABLE + 005134' 504000 013731' HRL AC0,PRGPTR ;ADDRESS OF FIRST WORD OF BLOCK + 005135' 270000 014770' ADD AC0,[1,,0] ;MAKE BLT POINTER + 005136' 542040 013731' HRRM AC1,PRGPTR ;POINT TO NEXT BLOCK + 005137' 251020 013553' BLT AC0,@SYMTOP ;MOVE TABLE + 005140' 260740 013125' PUSHJ PP,SRCHI ;SET UP POINTER + 005141' 200046 000000 MOVE AC1,(V) ;NUMBER OF WORDS OF TITLE + 005142' 201006 000001 MOVEI AC0,1(V) ;START OF STORED TITLE + 005143' 270300 000001 ADD V,AC1 ;INCREMENT PAST TITLE + 005144' 271040 013700' ADDI AC1,TBUF-1 ;END OF TITLE + 005145' 505000 013701' HRLI AC0,TBUF ;WHERE TO PUT IT + 005146' 207000 000000 MOVSS AC0 ;BLT POINTER + 005147' 251001 000000 BLT AC0,(AC1) ;MOVE TITLE + 005150' 661600 000002 TLO IO,IOTLSN ;SET AS IF TITLE SEEN + 005151' 200100 013505' MOVE AC2,LITHDX ;INVERSE OF ABOVE + 005152' 260740 005163' PUSHJ PP,GETIT + 005153' 202002 777777 MOVEM AC0,-1(AC2) + 005154' 200100 013500' MOVE AC2,VARHDX ;SAME FOR VARS + 005155' 260740 005163' PUSHJ PP,GETIT + 005156' 202002 777777 MOVEM AC0,-1(AC2) + IFN RENTSW,< + PUSHJ PP,GETIT ;GET TWO HALF WORDS + HRRZM AC0,HIGH1 ;PASS1 BREAK + HLLEM AC0,HISNSW ;TWOSEG/HISEG FLAG + JUMPGE AC0,CPOPJ ;NOT TWOSEG + PUSHJ PP,GETIT + MOVEM AC0,SVTYP3 ;BLOCK 3 WORD> + 005157' 263740 000000 POPJ PP, + + 005160' 202020 013377' STORIT: MOVEM AC0,@FREE ;STORE IT IN DATA BLOCK + 005161' 350000 013377' AOS FREE ;ADVANCE POINTER + 005162' 263740 000000 POPJ PP, + + 005163' 200006 000001 GETIT: MOVE AC0,1(V) ;FILL AC0 OUT OF PRGEND BLOCK + 005164' 344300 003447' AOJA V,CPOPJ ;INCREMENT AND RETURN + + 005165' 561440 014771' PSNDER: HRROI RC,[SIXBIT /PRGEND ERROR @/] + 005166' 254000 010176' JRST ERRFIN + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 101 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + ;MULTIPLE SYMBOL TABLE FEATURE PSEUDO-OPS + + 005167' 325640 004276' UNIV0: JUMP2 TITLE0 ;DO IT ALL ON PASS 1 + 005170' 550200 014122' HRRZ SX,UNIVNO ;GET NUMBER OF UNIVERSALS SEEN + 005171' 301200 000012 CAIL SX,.UNIV ;ALLOW ONE MORE? + 005172' 254000 005205' JRST UNVERR ;NO, GIVE FATAL ERROR + 005173' 350000 014122' AOS UNIVNO ;ONE MORE NOW + 005174' 476000 013733' SETOM UNIVSN ;AND SET SEEN A UNIVERSAL + 005175' 254000 004276' JRST TITLE0 ;CONTINUE AS IF TITLE + + + 005176' 261740 000011 ADDUNV: PUSH PP,RC ;AN AC TO USE + 005177' 260740 002665' PUSHJ PP,NOUT ;CONVERT TO SIXBIT + 005200' 550440 014122' HRRZ RC,UNIVNO ;GET ENTRY INDEX + 005201' 202011 014123' MOVEM AC0,UNITBL(RC) ;STORE SIXBIT NAME IN TABLE + 005202' 553000 013733' HRRZS UNIVSN ;ONLY DO IT ONCE + 005203' 262740 000011 POP PP,RC ;RESTORE RC + 005204' 263740 000000 POPJ PP, ;AND RETURN + + 005205' 561440 014774' UNVERR: HRROI RC,[SIXBIT /TOO MANY UNIVERSALS@/] + 005206' 254000 010176' JRST ERRFIN + + 005207' 550000 013377' UNISYM: HRRZ AC0,FREE ;GET HIGHEST FREE LOCATION + 005210' 202000 000000* MOVEM AC0,JOBFF ;INTO JOBFF + 005211' 260740 004261' PUSHJ PP,SUPRSA ;TURN ON SUPPRESS BIT + 005212' 261740 013552' PUSH PP,SYMBOL ;NEED TO SAVE INCASE PRGEND + 005213' 200000 013553' MOVE AC0,SYMTOP ;TOP OF TABLE + 005214' 274000 013552' SUB AC0,SYMBOL ;GET LENGTH OF TABLE + 005215' 504240 013552' HRL ARG,SYMBOL ;BOTTOM OF TABLE + 005216' 540240 005210* HRR ARG,JOBFF ;WHERE TO GO + 005217' 550440 014122' HRRZ RC,UNIVNO ;GET TABLE INDEX + 005220' 542240 013552' HRRM ARG,SYMBOL ;WILL BE THERE SOON + 005221' 552251 014135' HRRZM ARG,UNIPTR(RC) ;STORE IN CORRESPONDING PLACE + 005222' 273000 005216* ADDB AC0,JOBFF ;WHERE TO END + 005223' 506011 014135' HRLM AC0,UNIPTR(RC) ;SAVE NEW SYMTOP + 005224' 251260 005222* BLT ARG,@JOBFF ;MOVE TABLE + 005225' 552000 014121' HRRZM AC0,UNITOP ;SAVE TOP OF TABLES+1 + 005226' 313000 014117' CAMLE AC0,MACSIZ ;IN CASE OVER A K BOUND + 005227' 202000 014117' MOVEM AC0,MACSIZ ;DON'T REDUCE SO FAR NOW + 005230' 202000 013377' MOVEM AC0,FREE ;JUST IN CASE IN MACRO + 005231' 200000 013547' MOVE AC0,SRCHX ;SAVE OLD SEARCH POINTER + 005232' 260740 013125' PUSHJ PP,SRCHI ;GET SEARCH POINTER + 005233' 250000 013547' EXCH AC0,SRCHX + 005234' 202011 014147' MOVEM AC0,UNISHX(RC) ;SAVE IT + 005235' 402000 013733' SETZM UNIVSN ;CLEAR FLAG INCASE PRGEND + 005236' 262740 013552' POP PP,SYMBOL ;RESTORE OLD VALUE + 005237' 263740 000000 POPJ PP, ;RETURN + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 102 +MACRO 10 24-APR-78 02:11 PSEUDO-OP HANDLERS + + 005240' 260740 001043' SERCH0: PUSHJ PP,GETSYM ;GET A SYMBOL + 005241' 254000 003400' JRST ERRAX ;ERROR IF NOT VALID + 005242' 201440 000001 MOVEI RC,1 ;START AT ENTRY ONE + 005243' 301440 000012 CAIL RC,.UNIV ;CHECK FOR CONSISTENCY ERROR + 005244' 254000 005260' JRST SCHERR ;CANNOT FIND THIS ONE + 005245' 312011 014123' CAME AC0,UNITBL(RC) ;LOOK FOR MATCH + 005246' 344440 005243' AOJA RC,.-3 ;NOT FOUND YET + 005247' 200000 000011 MOVE AC0,RC ;STORE TABLE ENTRY NUMBER + 005250' 201440 000001 MOVEI RC,1 ;START AT ENTRY ONE + 005251' 301440 000012 CAIL RC,.UNIV ;CHECK FOR CONSISTENCY ERROR + 005252' 254000 005260' JRST SCHERR ;SHOULD NEVER HAPPEN!! + 005253' 332011 014055' SKIPE UNISCH(RC) ;LOOK FOR AN EMPTY SLOT + 005254' 344440 005251' AOJA RC,.-3 ;NOT FOUND YET + 005255' 202011 014055' MOVEM AC0,UNISCH(RC) ;STORE INDEX IN TABLE + 005256' 321400 005240' JUMPCM SERCH0 ;LOOK FOR MORE NAMES + 005257' 263740 000000 POPJ PP, ;FINISHED + + 005260' 205440 015000' SCHERR: MOVSI RC,[SIXBIT /CANNOT FIND UNIVERSAL@/] + 005261' 254000 010176' JRST ERRFIN ;NAME IN AC0 + + ;MESSAGE FOR CASE WHERE FILES AFTER UNIVERSAL USED MORE BUFFER SPACE THAN FIRST UNIVERS + AL + UNIERR: HRROI RC,[SIXBIT /UNIVERSAL PROGRAM(S) MUST HAVE SAME OUTPUT SPECIFICATION AS + 005262' 561440 015004' OTHER FILES@/] + 005263' 254000 010176' JRST ERRFIN + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 103 +MACRO 10 24-APR-78 02:11 MACRO/REPEAT HANDLERS + + SUBTTL MACRO/REPEAT HANDLERS + + 005264' 260740 004046' REPEA0: PUSHJ PP,EVALXQ ;EVALUATE REPEAT EXP, EXTERNS ARE ILL. + 005265' 325400 003400' JUMPNC ERRAX + + 005266' 323000 005346' REPEA1: JUMPLE AC0,REPZ ;PASS THE EXP., DONT PROCESS + 005267' 362000 005365' SOJE AC0,REPO ;REPEAT ONCE + 005270' 260740 006450' REPEA2: PUSHJ PP,GCHARQ ;GET STARTING "<" + 005271' 302340 000074 CAIE C,"<" + 005272' 254000 005270' JRST REPEA2 + 005273' 260740 006413' PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + 005274' 261700 014020' PUSH MP,REPEXP + 005275' 202000 014020' MOVEM AC0,REPEXP + 005276' 261700 014021' PUSH MP,REPPNT ;STACK PREVIOUS REPEAT POINTER + 005277' 202240 014021' MOVEM ARG,REPPNT ;STORE NEW POINTER + 005300' 634140 000003 TDZA SDEL,SDEL ;YES, INITIALIZE BRACKET COUNT AND SKIP + + 005301' 260740 006456' REPEA4: PUSHJ PP,WCHARQ ;WRITE A CHARACTER + 005302' 260740 006450' PUSHJ PP,GCHARQ ;GET A CHARACTER + 005303' 306340 000074 CAIN C,"<" ;"<"? + 005304' 344140 005301' AOJA SDEL,REPEA4 ;YES, INCREMENT AND WRITE + 005305' 302340 000076 CAIE C,">" ;">"? + 005306' 254000 005301' JRST REPEA4 ;NO, WRITE THE CHARACTER + 005307' 365140 005301' SOJGE SDEL,REPEA4 ;YES, WRITE IF NON-NEGATIVE COUNT + 005310' 205400 774060 MOVSI CS,(BYTE (7) 177,3) ;SET "REPEAT" END + 005311' 260740 006466' PUSHJ PP,WWRXE ;WRITE END + 005312' 336000 013773' SKIPN LITLVL ;LITERAL MIGHT END ON LINE + 005313' 332000 014072' SKIPE MACLVL ;IF IN MACRO DARE NOT PROCESS + 005314' 254000 005317' JRST .+3 ;REST OF LINE SINCE MACRO MIGHT END ON IT + 005315' 260740 004543' PUSHJ PP,BYPASS ;BYPASS + 005316' 260740 000236' PUSHJ PP,STOUTS ;POLISH OF LINE BEFORE PROCESSING REPEAT + 005317' 261700 000013 PUSH MP,MRP ;STACK PREVIOUS READ POINTER + 005320' 261700 014075' PUSH MP,RCOUNT ;SAVE WORD COUNT + 005321' 550540 014021' HRRZ MRP,REPPNT ;SET UP READ POINTER + 005322' 336000 014072' SKIPN MACLVL ;IF IN MACRO GIVE CR-LF FIRST + 005323' 332000 013773' SKIPE LITLVL ;SAME FOR LITERAL + 005324' 254000 005326' JRST REPEA7 + 005325' 344540 000455' AOJA MRP,POPOUT ;BYPASS ARG COUNT + + 005326' 550540 014021' REPEA7: HRRZ MRP,REPPNT ;SET UP READ POINTER + 005327' 271540 000001 ADDI MRP,1 ;BYPASS ARG COUNT + 005330' 201340 000015 REPEA8: MOVEI C,CR + 005331' 254000 001421' JRST RSW1 + + 005332' 371000 014020' REPEND: SOSL REPEXP + 005333' 254000 005326' JRST REPEA7 + 005334' 550300 014021' HRRZ V,REPPNT ;GET START OF TREE + 005335' 260740 006546' PUSHJ PP,REFDEC ;DECREMENT REFERENCE + 005336' 262700 014075' POP MP,RCOUNT + 005337' 262700 000013 POP MP,MRP + 005340' 262700 014021' POP MP,REPPNT + 005341' 262700 014020' POP MP,REPEXP + 005342' 336000 013773' SKIPN LITLVL ;IF IN LITERAL OR + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 103-1 +MACRO 10 24-APR-78 02:11 MACRO/REPEAT HANDLERS + + 005343' 332000 014072' SKIPE MACLVL ;IF IN MACRO + 005344' 254000 001417' JRST RSW0 ;FINISH OF LINE NOW + 005345' 254000 005330' JRST REPEA8 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 104 +MACRO 10 24-APR-78 02:11 MACRO/REPEAT HANDLERS + + 005346' 200140 014101' REPZ: MOVE SDEL,SEQNO2 ;SAVE IN CASE OF END OF FILE + 005347' 202140 013760' MOVEM SDEL,REPSEQ + 005350' 200140 014100' MOVE SDEL,PAGENO + 005351' 202140 013757' MOVEM SDEL,REPPG + 005352' 476000 013744' SETOM INREP + 005353' 201140 000000 MOVEI SDEL,0 ;SET COUNT + 005354' 260740 006451' REPZ1: PUSHJ PP,GCHAR ;GET NEXT CHARACTER + 005355' 306340 000074 CAIN C,"<" ;"<"? + 005356' 344140 005354' AOJA SDEL,REPZ1 ;YES, INCREMENT COUNT + 005357' 306340 000076 CAIN C,">" ;">"? + 005360' 363140 005362' SOJLE SDEL,REPZ2 ;YES, EXIT IF MATCHING + 005361' 254000 005354' JRST REPZ1 ;NO, RECYCLE + 005362' 402000 013744' REPZ2: SETZM INREP ;FLAG OUT OF IT + 005363' 402000 013747' SETZM INCND ;AND CONDITIONAL ALSO + 005364' 254000 000125' JRST STMNT ;AND EXIT + + 005365' 260740 006451' REPO: PUSHJ PP,GCHAR ;GET "<" + 005366' 302340 000074 CAIE C,"<" + 005367' 254000 005365' JRST REPO + 005370' 332000 014022' SKIPE RPOLVL ;ARE WE NESTED? + 005371' 350000 014022' AOS RPOLVL ;YES, DECREMENT CURRENT + 005372' 261700 014022' PUSH MP,RPOLVL + 005373' 476000 014022' SETOM RPOLVL + 005374' 254000 000125' JRST STMNT + + 005375' 306340 000074 REPO1: CAIN C,"<" + 005376' 370000 014022' SOS RPOLVL + 005377' 306340 000076 CAIN C,">" + 005400' 352000 014022' AOSE RPOLVL + 005401' 254000 001423' JRST RSW2 + 005402' 262700 014022' POP MP,RPOLVL + 005403' 260740 001423' PUSHJ PP,RSW2 + 005404' 254000 001417' JRST RSW0 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 105 +MACRO 10 24-APR-78 02:11 MACRO/REPEAT HANDLERS + + 005405' 260740 001043' DEFIN0: PUSHJ PP,GETSYM ;GET MACRO NAME + 005406' 254000 003400' JRST ERRAX ;EXIT ON ERROR + 005407' 202740 014015' MOVEM PP,PPTMP1 ;SAVE POINTER + 005410' 202000 014016' MOVEM AC0,PPTMP2 ;SAVE NAME + 005411' 661600 000004 TLO IO,IORPTC + 005412' 200200 014101' MOVE SX,SEQNO2 ;SAVE IN CASE OF EOF + 005413' 202200 013754' MOVEM SX,DEFSEQ + 005414' 200200 014100' MOVE SX,PAGENO + 005415' 202200 013753' MOVEM SX,DEFPG + 005416' 476000 013745' SETOM INDEF ;AND FLAG IN DEFINE + SYN .TEMP,COMSW ;SAVE SPACE + 005417' 403200 014054' SETZB SX,COMSW ;SET ARGUMENT AND REFERENCE COUNT AND COMMENT SWITCH + 005420' 260740 006451' DEF02: PUSHJ PP,GCHAR ;SEARCH FOR "(" OR "<" + 005421' 307340 000014 CAIG C,FF ;SEARCH FOR END OF LINE + 005422' 305340 000012 CAIGE C,LF ;LF,VT, OR FF + 005423' 254000 005425' JRST .+2 ;WASN'T ANY OF THEM + 005424' 402000 014054' SETZM COMSW ;RESET COMMENT SWITCH + 005425' 306340 000073 CAIN C,";" ;COMMENT? + 005426' 476000 014054' SETOM COMSW ;YES, SET COMMENT SWITCH + 005427' 332000 014054' SKIPE COMSW ;INSIDE A COMMENT? + 005430' 254000 005420' JRST DEF02 ;YES, IGNORE CHARACTER + 005431' 306340 000074 CAIN C,"<" ;"<"? + 005432' 254000 005450' JRST DEF20 ;YES + 005433' 302340 000050 CAIE C,"(" ;"("? + 005434' 254000 005420' JRST DEF02 ;NO + 005435' 260740 001043' DEF10: PUSHJ PP,GETSYM ;YES, GET DUMMY SYMBOL + 005436' 660600 040000 TRO ER,ERRA ;FLAG ERROR + 005437' 271200 000001 ADDI SX,1 ;INCREMENT ARG COUNT + 005440' 261740 000000 PUSH PP,AC0 ;STACK IT + 005441' 306340 000034 CAIN C,'<' ;A DEFAULT ARGUMENT COMING UP? + 005442' 254000 005663' JRST DEF80 ;YES, STORE IT AWAY + 005443' 302340 000011 CAIE C,11 ;")"? + 005444' 254000 005435' JRST DEF10 ;NO, GET NEXT DUMMY SYMBOL + 005445' 260740 006451' DEF12: PUSHJ PP,GCHAR + 005446' 302340 000074 CAIE C,"<" ;"<"? + 005447' 254000 005445' JRST DEF12 ;NO + 005450' 261740 014625' DEF20: PUSH PP,[0] ;YES, MARK THE LIST + 005451' 242200 000011 LSH SX,9 ;SHIFT ARG COUNT + 005452' 350240 000004 AOS ARG,SX + 005453' 260740 006414' PUSHJ PP,SKELI ;INITIALIZE MACRO SKELETON + 005454' 200000 014016' MOVE AC0,PPTMP2 ;GET NAME + 005455' 661600 000040 TLO IO,DEFCRS + 005456' 260740 012573' PUSHJ PP,MSRCH ;SEARCH THE TABLE + 005457' 254000 005463' JRST DEF24 ;NOT FOUND + 005460' 607240 020000 TLNN ARG,MACF ;FOUND, IS IT A MACRO? + 005461' 664600 100000 TROA ER,ERRX ;NO, FLAG ERROR AND SKIP + 005462' 260740 006546' PUSHJ PP,REFDEC ;YES, DECREMENT THE REFERENCE + 005463' 550300 014074' DEF24: HRRZ V,WWRXX ;GET START OF TREE + 005464' 336000 014054' SKIPN .TEMP ;ANY DEFAULT ARGUMENTS TO TAKE CARE OF? + 005465' 254000 005513' JRST DEF25 ;NO + 005466' 550346 000001 HRRZ C,1(V) ;GET SHIFTED ARG COUNT + 005467' 242340 777767 LSH C,-9 ;GET ARG COUNT BACK + 005470' 271340 000001 ADDI C,1 ;ONE MORE FOR TERMINAL ZERO + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 105-1 +MACRO 10 24-APR-78 02:11 MACRO/REPEAT HANDLERS + + 005471' 270340 014054' ADD C,.TEMP ;NUMBER OF ITEMS IN STACK + 005472' 507000 000007 HRLS C ;MAKE XWD + 005473' 274740 000007 SUB PP,C ;BACK UP STACK + 005474' 200140 014054' MOVE SDEL,.TEMP ;NUMBER OF WORDS NEEDED + 005475' 273140 013377' ADDB SDEL,FREE ;FROM FREE CORE + 005476' 311140 013552' CAML SDEL,SYMBOL ;MORE CORE NEEDED + 005477' 260740 010276' PUSHJ PP,XCEEDS ;YES, TRY TO GET IT + 005500' 274140 014054' SUB SDEL,.TEMP ;FORM POINTER + 005501' 506146 000001 HRLM SDEL,1(V) ;STORE IT WITH ARG COUNT IN MACRO + 005502' 275140 000001 SUBI SDEL,1 ;TO USE FOR PUSHING POINTER INTO STORAGE + 005503' 201357 000001 MOVEI C,1(PP) ;POINT TO START OF STACK + 005504' 200247 000000 DEF26: MOVE ARG,(C) ;GET AN ITEM OFF STACK + 005505' 607240 777740 TLNN ARG,-40 ;A POINTER? + JUMPN ARG,[PUSH SDEL,ARG ;YES, STORE IT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 106 +MACRO 10 24-APR-78 02:11 MACRO/REPEAT HANDLERS + + 005506' 326240 015020' AOJA C,DEF26] ;GET NEXT + 005507' 261740 000005 PUSH PP,ARG ;RESTACK ARGUMENT + 005510' 332000 000005 SKIPE ARG ;FINISHED IF ZERO + 005511' 344340 005504' AOJA C,DEF26 ;GET NEXT + 005512' 261140 000005 PUSH SDEL,ARG ;STORE ZERO IN DEFAULT LIST ALSO + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 107 +MACRO 10 24-APR-78 02:11 MACRO/REPEAT HANDLERS + + 005513' 205240 020000 DEF25: MOVSI ARG,MACF + 005514' 202740 014016' MOVEM PP,PPTMP2 ;STORE TEMP STORAGE POINTER + 005515' 260740 013036' PUSHJ PP,INSERT ;INSERT/UPDATE + 005516' 621600 000040 TLZ IO,DEFCRS ;JUST IN CASE + 005517' 402000 014070' SETZM ARGF ;NO ARGUMENT SEEN + 005520' 402000 014067' SETZM SQFLG ;AND NO ' SEEN + 005521' 634140 000003 TDZA SDEL,SDEL ;CLEAR BRACKET COUNT + 005522' 260740 006456' DEF30: PUSHJ PP,WCHAR ;WRITE CHARACTER + 005523' 260740 006451' DEF31: PUSHJ PP,GCHAR ;GET A CHARACTER + 005524' 200400 000007 DEF32: MOVE CS,C ;GET A COPY + 005525' 306340 000073 CAIN C,";" ;IS IT A COMMENT + 005526' 254000 005565' JRST CPEEK ;YES CHECK FOR ;; + 005527' 307400 000172 DEF33: CAIG CS,"Z"+40 ;CONVERT LOWER CASE + 005530' 305400 000141 CAIGE CS,"A"+40 + 005531' 254000 005533' JRST .+2 + 005532' 275400 000040 SUBI CS,40 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 108 +MACRO 10 24-APR-78 02:11 MACRO/REPEAT HANDLERS + + 005533' 305400 000040 CAIGE CS,40 ;TEST FOR CONTROL CHAR. + JRST [SKIPN SQFLG ;HAS SINGLE QUOTE BEEN SEEN? + JRST DEF30 ;NO, OUTPUT THIS CHAR. + PUSH PP,C ;YES, SAVE CURRENT CHAR + MOVEI C,47 ;SET UP QUOTE + PUSHJ PP,WCHAR;WRITE IT + POP PP,C ;GET BACK CURRENT CHAR. + SETZM SQFLG ;RESET FLAG + 005534' 254000 015022' JRST DEF30] ;AND CONTINUE + 005535' 303400 000137 CAILE CS,77+40 + 005536' 254000 005522' JRST DEF30 ;TEST FOR SPECIAL + 005537' 200410 001416' MOVE CS,CSTAT-40(CS) ;GET STATUS BITS + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 109 +MACRO 10 24-APR-78 02:11 MACRO/REPEAT HANDLERS + + 005540' 603400 000006 TLNE CS,6 ;ALPHA-NUMERIC? + 005541' 254000 005602' JRST DEF40 ;YES + 005542' 336000 014067' SKIPN SQFLG ;WAS A ' SEEN? + 005543' 254000 005551' JRST DEF36 ;NO, PROCESH + 005544' 261740 000007 PUSH PP,C ;YES, SAVE CURRENT CHARACTER + 005545' 201340 000047 MOVEI C,47 ;AND PUT IN A ' + 005546' 260740 006456' PUSHJ PP,WCHAR ;... + 005547' 262740 000007 POP PP,C ;RESTORE CURRENT CHARACTER + 005550' 402000 014067' SETZM SQFLG ;AND RESET FLAG + 005551' 302340 000047 DEF36: CAIE C,47 ;IS THIS A '? + 005552' 254000 005557' JRST DEF35 ;NOPE + 005553' 336000 014070' SKIPN ARGF ;YES, WAS LAST THING SEEN AN ARG? + 005554' 476000 014067' SETOM SQFLG ;IF NOT, SET SNGL QUOT FLAG + 005555' 402000 014070' SETZM ARGF ;BUT NOT ARGUMENT IN ANY CASE + 005556' 254000 005523' JRST DEF31 ;GO GET NEXT CHARACTER + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 110 +MACRO 10 24-APR-78 02:11 MACRO/REPEAT HANDLERS + + 005557' 402000 014070' DEF35: SETZM ARGF ;THIS IS NOT AN ARGUMENT + 005560' 306340 000074 CAIN C,"<" ;"<"? + 005561' 344140 005522' AOJA SDEL,DEF30 ;YES, INCREMENT COUNT AND WRITE + 005562' 306340 000076 CAIN C,">" ;">"? + 005563' 361140 005656' SOJL SDEL,DEF70 ;YES, TEST FOR END + 005564' 254000 005522' JRST DEF30 ;NO, WRITE IT + + 005565' 607600 004000 CPEEK: TLNN IO,IOPALL ;IF LALL IS ON + 005566' 254000 005527' JRST DEF33 ;JUST RETURN + 005567' 260740 006531' PUSHJ PP,PEEK ;LOOK AT NEXT CHAR. + 005570' 306340 000073 CAIN C,";" ;IS IT ;;? + 005571' 254000 005574' JRST CPEEK1 ;YES + 005572' 200340 000010 MOVE C,CS ;RESTORE C + 005573' 254000 005527' JRST DEF33 ;AND RETURN + + 005574' 260740 006451' CPEEK1: PUSHJ PP,GCHAR ;GET THE CHAR. + 005575' 302340 000076 CAIE C,">" ;RETURN IF END OF MACRO + 005576' 307340 000015 CAIG C,CR ;IS CHAR ONE OF + 005577' 305340 000012 CAIGE C,LF ;LF,VT,FF,CR + 005600' 254000 005574' JRST CPEEK1 ;NO,SO GET NEXT CHAR. + 005601' 254000 005524' JRST DEF32 ;YES,RETURN AND STORE + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 111 +MACRO 10 24-APR-78 02:11 MACRO/REPEAT HANDLERS + + 005602' 201000 000000 DEF40: MOVEI AC0,0 ;CLEAR ATOM + 005603' 205040 440600 MOVSI AC1,(POINT 6,AC0) ;SET POINTER + 005604' 261740 000007 DEF42: PUSH PP,C ;STACK CHARACTER + 005605' 603040 770000 TLNE AC1,770000 ;HAVE WE STORED 6? + 005606' 136400 000001 IDPB CS,AC1 ;NO, STORE IN ATOM + 005607' 260740 006451' PUSHJ PP,GCHAR ;GET NEXT CHARACTER + 005610' 200400 000007 MOVE CS,C + 005611' 307400 000172 CAIG CS,"Z"+40 + 005612' 305400 000141 CAIGE CS,"A"+40 + 005613' 254000 005615' JRST .+2 + 005614' 275400 000040 SUBI CS,40 ;CONVERT LOWER TO UPPER + 005615' 301400 000040 CAIL CS,40 + 005616' 303400 000137 CAILE CS,77+40 + 005617' 254000 005623' JRST DEF44 ;TEST SPECIAL + 005620' 200410 001416' MOVE CS,CSTAT-40(CS) ;GET STATUS + 005621' 603400 000006 TLNE CS,6 ;ALPHA-NUMERIC? + 005622' 254000 005604' JRST DEF42 ;YES, GET ANOTHER + 005623' 261740 014625' DEF44: PUSH PP,[0] ;NO, MARK THE LIST + 005624' 200200 014015' MOVE SX,PPTMP1 ;GET POINTER TO TOP + + 005625' 336004 000001 DEF46: SKIPN 1(SX) ;END OF LIST? + 005626' 254000 005645' JRST DEF50 ;YES + 005627' 312004 000001 CAME AC0,1(SX) ;NO, DO THEY COMPARE? + 005630' 344200 005625' AOJA SX,DEF46 ;NO, TRY AGAIN + 005631' 274200 014015' SUB SX,PPTMP1 ;YES, GET DUMMY SYMBOL NUMBER + 005632' 242200 000004 LSH SX,4 + 005633' 205404 776020 MOVSI CS,<(BYTE (7) 177,101)>(SX) ;SET ESCAPE CODE MACEND + 005634' 242000 777742 LSH AC0,-^D30 + 005635' 306000 000005 CAIN AC0,5 ;"%"? + 005636' 661400 001000 TLO CS,1000 ;YES, SET CRESYM FLAG + 005637' 260740 006462' PUSHJ PP,WWORD ;WRITE THE WORD + 005640' 476000 014070' SETOM ARGF ;SET ARGUMENT SEEN FLAG + 005641' 402000 014067' SETZM SQFLG ;AND IGNORE ANY ' WAITING TO GET INTO STRING + 005642' 200740 014016' DEF48: MOVE PP,PPTMP2 ;RESET PUSHDOWN POINTER + 005643' 661600 000004 TLO IO,IORPTC ;ECHO LAST CHARACTER + 005644' 254000 005523' JRST DEF31 ;RECYCLE + + 005645' DEF50: + 005645' 336000 014067' SKIPN SQFLG ;HAVE WE SEEN A '? + 005646' 254000 005652' JRST DEF51 ;NOPE + 005647' 201340 000047 MOVEI C,47 ;YES, PUT IT IN + 005650' 260740 006456' PUSHJ PP,WCHAR ;... + 005651' 402000 014067' SETZM SQFLG ;AND CLEAR FLAG + 005652' 200344 000002 DEF51: MOVE C,2(SX) ;GET CHARACTER + 005653' 322340 005642' JUMPE C,DEF48 ;CLEAN UP IF END + 005654' 260740 006456' PUSHJ PP,WCHAR ;WRITE THE CHARACTER + 005655' 344200 005652' AOJA SX,DEF51 ;GET NEXT + + 005656' 200740 014015' DEF70: MOVE PP,PPTMP1 ;RESTORE PUSHDOWN POINTER + 005657' 205400 774020 MOVSI CS,(BYTE (7) 177,1) + 005660' 260740 006466' PUSHJ PP,WWRXE ;WRITE END + 005661' 402000 013745' SETZM INDEF ;OUT OF IT + 005662' 254000 004543' JRST BYPASS + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 112 +MACRO 10 24-APR-78 02:11 MACRO/REPEAT HANDLERS + + ; HERE TO STORE DEFAULT ARGUMENTS + + 005663' 350000 014054' DEF80: AOS .TEMP ;COUNT ONE MORE + 005664' 260740 006413' PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + 005665' 504300 000004 HRL V,SX ;SYMBOL NUMBER + 005666' 261740 000006 PUSH PP,V ;STORE POINTER + 005667' 634140 000003 TDZA SDEL,SDEL ;ZERO BRACKET COUNT + 005670' 260740 006456' DEF81: PUSHJ PP,WCHARQ ;WRITE A CHARACTER + 005671' 260740 006450' PUSHJ PP,GCHARQ ;GET A CHARACTER + 005672' 306340 000074 CAIN C,"<" ;ANOTHER "<"? + 005673' 344140 005670' AOJA SDEL,DEF81 ;YES, INCREMENT AND WRITE + 005674' 302340 000076 CAIE C,">" ;CLOSING ANGLE? + 005675' 254000 005670' JRST DEF81 ;NO, JUST WRITE THE CHAR. + 005676' 365140 005670' SOJGE SDEL,DEF81 ;YES, WRITE IF NOT END + 005677' 205400 774040 MOVSI CS,(BYTE (7) 177,2) + 005700' 260740 006466' PUSHJ PP,WWRXE ;WRITE END OF DUMMY ARGUMENT + 005701' 260740 006451' PUSHJ PP,GCHAR ;READ AT NEXT CHAR. + 005702' 302340 000051 CAIE C,")" ;END OF ARGUMENT LIST? + 005703' 254000 005435' JRST DEF10 ;NO, GET NEXT SYMBOL + 005704' 254000 005445' JRST DEF12 ;YES, LOOK FOR "<" + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 113 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + SUBTTL MACRO CALL PROCESSOR + 005705' 335000 014071' CALLM: SKIPGE MACENL ;ARE WE TRYING TO RE-ENTER? + 005706' 254000 003400' JRST ERRAX ;YES, BOMB OUT WITH ERROR + 005707' 563000 014071' HRROS MACENL ;FLAG "CALLM IN PROGRESS" + 005710' 250700 013250' EXCH MP,RP + 005711' 261700 000006 PUSH MP,V ;STACK FOR REFDEC + 005712' 250700 013250' EXCH MP,RP + 005713' 202000 013750' MOVEM AC0,CALNAM ;SAVE MACRO NAME INCASE OF ERROR + 005714' 200140 014101' MOVE SDEL,SEQNO2 ;SAVE IN CASE OF EOF + 005715' 202140 013752' MOVEM SDEL,CALSEQ + 005716' 200140 014100' MOVE SDEL,PAGENO + 005717' 202140 013751' MOVEM SDEL,CALPG + 005720' 271300 000001 ADDI V,1 ;POINT TO DUMMY SYMBOL COUNT + 005721' 350146 000000 AOS SDEL,0(V) ;INCREMENT ARG COUNT + 005722' 512140 014054' HLLZM SDEL,.TEMP ;DEFAULT ARG POINTER IF NON-ZERO + 005723' 246140 777723 LSHC SDEL,-^D<9+36> ;ZERO SDEL, GET ARG COUNT IN SX + 005724' 405200 000777 ANDI SX,777 ;MASK + 005725' 332000 014054' SKIPE .TEMP ;IF AT LEAST ONE DEFAULT ARG + 005726' 542200 014054' HRRM SX,.TEMP ;STORE COUNT OF ARGS + 005727' 261740 000006 PUSH PP,V ;STACK FOR MRP + 005730' 261740 013250' PUSH PP,RP ;STACK FOR MACPNT + 005731' 322200 005776' JUMPE SX,MAC20 ;TEST FOR NO ARGS + 005732' 260740 001415' PUSHJ PP,CHARAC + 005733' 302340 000050 CAIE C,"(" ;"(" + 005734' 664140 777777 TROA SDEL,-1 ;NO, FUDGE PAREN COUNT AND SKIP + + 005735' 260740 006451' MAC10: PUSHJ PP,GCHAR ;GET A CHARACTER, LOOK FOR AN ARG + 005736' 307340 000015 CAIG C,CR + 005737' 305340 000012 CAIGE C,LF + 005740' 306340 000073 CAIN C,";" ;";"? + 005741' 254000 006000' JRST MAC21 ;YES, END OF ARGUMENT STRING + + 005742' 260740 006413' PUSHJ PP,SKELI1 ;NO, INITIALIZE SKELETON + 005743' 306340 000074 CAIN C,"<" ;"<"? + 005744' 254000 006073' JRST MAC30 ;YES, PROCESS AS SPECIAL + 005745' 302340 000176 CAIE C,176 + 005746' 306340 000134 CAIN C,134 ;"\" + 005747' 254000 006103' JRST MAC40 ;YES, PROCESS SYMBOL + + 005750' 306340 000054 MAC14: CAIN C,"," ;","? + 005751' 254000 005767' JRST MAC16 ;YES; NULL SYMBOL + 005752' 306340 000050 CAIN C,"(" ;"("? + 005753' 271140 000001 ADDI SDEL,1 ;YES, INCREMENT COUNT + 005754' 306340 000051 CAIN C,")" ;")"? + 005755' 361140 005767' SOJL SDEL,MAC16 ;YES, TEST FOR END + 005756' 260740 006456' PUSHJ PP,WCHAR ;WRITE INTO SKELETON + 005757' 260740 001415' MAC14A: PUSHJ PP,CHARAC ;GET NEXT CHARACTER + 005760' 307340 000015 CAIG C,CR + 005761' 305340 000012 CAIGE C,LF + 005762' 254000 005764' JRST .+2 + 005763' 254000 005766' JRST MAC15 ;TEST FOR END OF LINE + 005764' 302340 000073 CAIE C,";" ;";"? + 005765' 254000 005750' JRST MAC14 ;YES, END OF LINE + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 113-1 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + + 005766' 661600 000004 MAC15: TLO IO,IORPTC + 005767' 205400 774040 MAC16: MOVSI CS,(BYTE (7) 177,2) + 005770' 260740 006466' PUSHJ PP,WWRXE ;WRITE END + 005771' 250700 013250' EXCH MP,RP + 005772' 261700 014074' PUSH MP,WWRXX + 005773' 250700 013250' EXCH MP,RP + 005774' 363200 005776' SOJLE SX,MAC20 ;BRANCH IF NO MORE ARGS + 005775' 325140 005735' JUMPGE SDEL,MAC10 ;HAVEN'T SEEN TERMINAL ")" YET + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 114 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + 005776' 627600 000004 MAC20: TLZN IO,IORPTC + 005777' 260740 001415' PUSHJ PP,CHARAC + 006000' 250700 013250' MAC21: EXCH MP,RP + 006001' 322200 006023' JUMPE SX,MAC21B ;NO MISSING ARGS + 006002' 261700 014607' MAC21A: PUSH MP,[-1] ;FILL IN MISSING ARGS + 006003' 336000 014054' SKIPN .TEMP ;ANY DEFAULT ARGS? + 006004' 254000 006022' JRST MAC21C ;NO + 006005' 550340 014054' HRRZ C,.TEMP ;GET ARG COUNT + 006006' 275344 777777 SUBI C,-1(SX) ;ACCOUNT FOR THOSE GIVEN + 006007' 517000 000007 HRLZS C ;PUT IN LEFT HALF + 006010' 554140 014054' HLRZ SDEL,.TEMP ;ADDRESS OF TABLE + 006011' 336003 000000 MAC21D: SKIPN (SDEL) ;END OF LIST + 006012' 254000 006022' JRST MAC21C ;YES + 006013' 430343 000000 XOR C,(SDEL) ;TEST FOR CORRECT ARG + 006014' 607340 777777 TLNN C,-1 ;WAS IT? + 006015' 254000 006020' JRST MAC21E ;YES + 006016' 430343 000000 XOR C,(SDEL) ;BACK THE WAY IT WAS + 006017' 344140 006011' AOJA SDEL,MAC21D ;AND TRY AGAIN + + 006020' 202356 000000 MAC21E: MOVEM C,(MP) ;REPLACE -1 WITH TREE POINTER + 006021' 350007 000001 AOS 1(C) ;INCREMENT REFERENCE + 006022' 367200 006002' MAC21C: SOJG SX,MAC21A + 006023' 261700 014625' MAC21B: PUSH MP,[0] ;SET TERMINAL + 006024' 550340 013452' HRRZ C,LIMBO + 006025' 607600 000001 TLNN IO,IOSALL ;SUPPRESSING ALL? + 006026' 254000 006045' JRST MAC23 ;NO + 006027' 326540 006043' JUMPN MRP,MAC27 ;IN MACRO? + 006030' 302340 000073 CAIE C,";" ;NO,IN COMMENT? + 006031' 254000 006036' JRST MAC26 ;NO + 006032' 260740 001415' MAC22: PUSHJ PP,CHARAC ;YES,GET IT INTO THE LBUF + 006033' 307340 000015 CAIG C,CR ;LESS THAN CR? + 006034' 305340 000012 CAIGE C,LF ;AND GREATER THAN LF? + 006035' 254000 006032' JRST MAC22 ;NO GET ANOTHER + 006036' 515200 070000 MAC26: HRLZI SX,70000 ;DECREMENT BYTE POINTER + 006037' 273200 013453' ADDB SX,LBUFP + 006040' 325200 006043' JUMPGE SX,MAC27 + 006041' 525200 347777 HRLOI SX,347777 + 006042' 272200 013453' ADDM SX,LBUFP + 006043' 505340 777777 MAC27: HRLI C,-1 ;SET FLAG + 006044' 254000 006060' JRST MAC25 + + 006045' 201200 000136 MAC23: MOVEI SX,"^" + 006046' 321600 006057' JUMPAD MAC24 ;BRANCH IF ADDRESS FIELD + 006047' 306340 000073 CAIN C,";" ;IF SEMI-COLON + 006050' 332000 013773' SKIPE LITLVL ;AND NOT IN A LITERAL + 006051' 254000 006057' JRST MAC24 ;NOT BOTH TRUE + 006052' 326540 006057' JUMPN MRP,MAC24 ;OR IN A MACRO + 006053' 260740 000237' PUSHJ PP,STOUT ;LIST COMMENT OR CR-LF + 006054' 603600 004000 TLNE IO,IOPALL ;MACRO EXPANSION SUPPRESSION? + 006055' 661600 010000 TLO IO,IOMAC ; NO, SET TEMP BIT + 006056' 674340 014607' TDOA C,[-1] ;FLAG LAST CHARACTER + 006057' 137200 013453' MAC24: DPB SX,LBUFP ;SET ^ INTO LINE BUFFER + 006060' 261700 014073' MAC25: PUSH MP,MACPNT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 114-1 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + 006061' 262740 014073' POP PP,MACPNT + 006062' 261700 000007 PUSH MP,C + 006063' 261700 014075' PUSH MP,RCOUNT ;STACK WORD COUNT + 006064' 261700 000013 PUSH MP,MRP ;STACK MACRO POINTER + 006065' 262740 000013 POP PP,MRP ;SET NEW READ POINTER + 006066' 250700 013250' EXCH MP,RP + 006067' 350000 014072' AOS MACLVL + 006070' 553000 014071' HRRZS MACENL ;RESET "CALLM IN PROGRESS" + 006071' 325600 000130' JUMPOC STMNT2 ;OP-CODE FIELD + 006072' 254000 001102' JRST EVATOM ;ADDRESS FIELD + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 115 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + 006073' 201000 000000 MAC30: MOVEI AC0,0 ;INITIALIZE BRACKET COUNTER + 006074' 260740 006451' MAC31: PUSHJ PP,GCHAR ;GET A CHARACTER + 006075' 306340 000074 CAIN C,"<" ;"<"? + 006076' 271000 000001 ADDI AC0,1 ;YES, INCREMENT COUNT + 006077' 306340 000076 CAIN C,">" ;">"? + 006100' 361000 005757' SOJL AC0,MAC14A ;YES, EXIT IF MATCHING + 006101' 260740 006456' PUSHJ PP,WCHAR ;WRITE INTO SKELETON + 006102' 254000 006074' JRST MAC31 ;GO BACK FOR ANOTHER + + 006103' 261740 000004 MAC40: PUSH PP,SX ;STACK REGISTERS + 006104' 261740 000003 PUSH PP,SDEL + 006105' 502600 014051' HLLM IO,TAGINC ;SAVE IO FLAGS + 006106' 260740 000363' PUSHJ PP,CELL ;GET AN ATOM + 006107' 200300 000000 MOVE V,AC0 ;ASSUME NUMERIC + 006110' 603600 020000 TLNE IO,NUMSW ;GOOD GUESS? + 006111' 254000 006114' JRST MAC41 ;YES + 006112' 260740 012610' PUSHJ PP,SSRCH ;SEARCH THE SYMBOL TABLE + 006113' 664600 100000 TROA ER,ERRX ;NOT FOUND, ERROR + 006114' 260740 006122' MAC41: PUSHJ PP,MAC42 ;FORM ASCII STRING + 006115' 500600 014051' HLL IO,TAGINC ;RESTORE IO FLAGS + 006116' 262740 000003 POP PP,SDEL + 006117' 262740 000004 POP PP,SX + 006120' 661600 000004 TLO IO,IORPTC ;REPEAT LAST CHARACTER + 006121' 254000 005757' JRST MAC14A ;RETURN TO MAIN SCAN + + 006122' 200340 000006 MAC42: MOVE C,V + 006123' 246340 777735 MAC44: LSHC C,-^D35 + 006124' 242400 777777 LSH CS,-1 + 006125' 235355 000000 DIVI C,0(RX) ;DIVIDE BY CURRENT RADIX + 006126' 506417 000000 HRLM CS,0(PP) + 006127' 322340 006131' JUMPE C,.+2 ;TEST FOR END + 006130' 260740 006123' PUSHJ PP,MAC44 + 006131' 554357 000000 HLRZ C,0(PP) + 006132' 271340 000060 ADDI C,"0" ;FORM TEXT + 006133' 254000 006456' JRST WCHAR ;WRITE INTO SKELETON + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 116 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + 006134' 370000 014071' MACEN0: SOS MACENL + 006135' 335340 014071' MACEND: SKIPGE C,MACENL ;TEST "CALLM IN PROGRESS" + 006136' 350000 014071' AOS MACENL ;INCREMENT END LEVEL AND EXIT + 006137' 321340 005330' JUMPL C,REPEA8 + 006140' 250700 013250' EXCH MP,RP + 006141' 262700 000013 POP MP,MRP ;RETRIEVE READ POINTER + 006142' 262700 014075' POP MP,RCOUNT ;AND WORD COUNT + 006143' 201340 000136 MOVEI C,"^" + 006144' 331016 000000 SKIPL 0(MP) ;TEST FLAG + 006145' 260740 001423' PUSHJ PP,RSW2 ;MARK END OF SUBSTITUTION + 006146' 262700 000007 POP MP,C + 006147' 262700 000005 POP MP,ARG + 006150' 334700 014073' SKIPA MP,MACPNT ;RESET MP AND SKIP + 006151' 260740 006546' MACEN1: PUSHJ PP,REFDEC ;DECREMENT REFERENCE + 006152' 350300 014073' MACEN2: AOS V,MACPNT ;GET POINTER + 006153' 200306 000000 MOVE V,0(V) + 006154' 327300 006151' JUMPG V,MACEN1 ;IF >0, DECREMENT REFERENCE + 006155' 321300 006152' JUMPL V,MACEN2 ;IF <0, BYPASS + 006156' 262700 000006 POP MP,V ;IF=0, RETRIEVE POINTER + 006157' 260740 006546' PUSHJ PP,REFDEC ;DECREMENT REFERENCE + 006160' 202240 014073' MOVEM ARG,MACPNT + 006161' 250700 013250' EXCH MP,RP + 006162' 370000 014072' SOS MACLVL + 006163' 336000 014071' SKIPN MACENL ;CHECK UNPROCESSED END LEVEL + 006164' 254000 006167' JRST MACEN3 ;NONE TO PROCESS + 006165' 606540 777777 TRNN MRP,-1 ;MRP AT END OF TEXT + 006166' 254000 006134' JRST MACEN0 ;THEN POP THE MACRO STACK NOW + 006167' 606340 077400 MACEN3: TRNN C,77400 ;SALL FLAG? + 006170' 505340 000000 HRLI C,0 ;YES,TURN IT OFF + 006171' 321340 005330' JUMPL C,REPEA8 ;IF FLAG SET SUBSTITUTE + 006172' 254000 001421' JRST RSW1 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 117 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + 006173' 336000 014072' IRP0: SKIPN MACLVL ;ARE WE IN A MACRO? + 006174' 254000 003400' JRST ERRAX ;NO, BOMB OUT + 006175' 260740 006516' IRP10: PUSHJ PP,MREADS ;YES, GET DATA SPEC + 006176' 302340 000040 CAIE C,40 ;SKIP LEADING BLANKS + 006177' 306340 000050 CAIN C,"(" ;"("? + 006200' 254000 006175' JRST IRP10 ;YES, BYPASS + 006201' 306340 000011 CAIN C,11 + 006202' 254000 006175' JRST IRP10 + 006203' 302340 000177 CAIE C,177 ;NO, IS IT SPECIAL? + 006204' 254000 003400' JRST ERRAX ;NO, ERROR + 006205' 260740 006516' PUSHJ PP,MREADS ;YES + 006206' 626340 000100 TRZN C,100 ;CREATED? + 006207' 254000 003400' JRST ERRAX + 006210' 301340 000040 CAIL C,40 ;TOO BIG? + 006211' 254000 003400' JRST ERRAX + 006212' 270340 014073' ADD C,MACPNT ;NO, FORM POINTER TO STACK + 006213' 261700 013770' PUSH MP,IRPCF ;STACK PREVIOUS POINTERS + 006214' 261700 013772' PUSH MP,IRPSW + 006215' 261700 013767' PUSH MP,IRPARP + 006216' 261700 013766' PUSH MP,IRPARG + 006217' 261700 013765' PUSH MP,IRPCNT + 006220' 261707 000000 PUSH MP,0(C) + 006221' 261700 013771' PUSH MP,IRPPOI + + 006222' 552340 013767' HRRZM C,IRPARP + 006223' 202000 013770' MOVEM AC0,IRPCF ;IRPC FLAG FOUND IN AC0 + 006224' 476000 013772' SETOM IRPSW ;RESET IRP SWITCH + 006225' 200407 000000 MOVE CS,0(C) + 006226' 202400 013766' MOVEM CS,IRPARG + + 006227' 260740 006516' PUSHJ PP,MREADS + 006230' 302340 000074 CAIE C,"<" ;"<"? + 006231' 254000 006227' JRST .-2 ;NO, SEARCH UNTIL FOUND + 006232' 260740 006413' PUSHJ PP,SKELI1 ;INITIALIZE NEW STRING + 006233' 202240 013771' MOVEM ARG,IRPPOI ;SET NEW POINTER + + 006234' 634140 000003 TDZA SDEL,SDEL ;ZERO BRACKET COUNT AND SKIP + 006235' 260740 006456' IRP20: PUSHJ PP,WCHAR1 + 006236' 260740 006516' PUSHJ PP,MREADS + 006237' 306340 000074 CAIN C,"<" ;"<"? + 006240' 344140 006235' AOJA SDEL,IRP20 ;YES, INCREMENT COUNT AND WRITE + 006241' 302340 000076 CAIE C,">" ;">"? + 006242' 254000 006235' JRST IRP20 ;NO, JUST WRITE IT + 006243' 365140 006235' SOJGE SDEL,IRP20 ;YES, WRITE IF NOT MATCHING + 006244' 200400 015032' MOVE CS,[BYTE (7) 15,177,4] + 006245' 260740 006466' PUSHJ PP,WWRXE ;WRITE END + 006246' 261700 000013 PUSH MP,MRP ;STACK PREVIOUS READ POINTER + 006247' 261700 014075' PUSH MP,RCOUNT ;AND WORD COUNT + 006250' 337400 013766' SKIPG CS,IRPARG + 006251' 254000 006331' JRST IRPPOP ;EXIT IF NOT VALID ARGUMENT + 006252' 201350 000001 MOVEI C,1(CS) ;INITIALIZE POINTER + 006253' 202340 013766' MOVEM C,IRPARG + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 118 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + 006254' 250540 013766' IRPSET: EXCH MRP,IRPARG ;SWAP READ POINTERS + 006255' 200200 014075' MOVE SX,RCOUNT ;SWAP COUNT OF WORDS TO READ + 006256' 250200 013765' EXCH SX,IRPCNT + 006257' 202200 014075' MOVEM SX,RCOUNT + 006260' 260740 006413' PUSHJ PP,SKELI1 ;INITIALIZE SKELETON FOR DATA + 006261' 552260 013767' HRRZM ARG,@IRPARP ;STORE NEW DS POINTER + 006262' 403200 000003 SETZB SX,SDEL ;ZERO FOUND FLAG AND BRACKET COUNT + 006263' 135340 000013 LDB C,MRP ;GET LAST CHAR + 006264' 306340 000054 CAIN C,"," + 006265' 332000 013770' SKIPE IRPCF ;IN IRPC + 006266' 254000 006270' JRST IRPSE1 ;NO + 006267' 201200 000001 MOVEI SX,1 ;FORCE ARGUMENT + 006270' 260740 006516' IRPSE1: PUSHJ PP,MREADS + 006271' 302340 000177 CAIE C,177 ;SPECIAL? + 006272' 344200 006277' AOJA SX,IRPSE2 ;NO, FLAG AS FOUND + 006273' 260740 006535' PUSHJ PP,PEEKM ;LOOK AT NEXT CHARACTER + 006274' 402000 013772' SETZM IRPSW ;SET IRP SWITCH + 006275' 327200 006312' JUMPG SX,IRPSE4 ;IF ARG FOUND, PROCESS IT + 006276' 254000 006331' JRST IRPPOP ;NO, CLEAN UP AND EXIT + + 006277' 332000 013770' IRPSE2: SKIPE IRPCF ;IRPC? + 006300' 254000 006307' JRST IRPSE3 ;YES, WRITE IT + 006301' 306340 000054 CAIN C,"," ;NO, IS IT A COMMA? + 006302' 322140 006312' JUMPE SDEL,IRPSE4 ;YES, EXIT IF NOT NESTED + 006303' 306340 000074 CAIN C,"<" ;"<"? + 006304' 271140 000001 ADDI SDEL,1 ;YES, INCREMENT COUNT + 006305' 306340 000076 CAIN C,">" ;">"? + 006306' 275140 000001 SUBI SDEL,1 ;YES, DECREMENT COUNT + + 006307' 260740 006456' IRPSE3: PUSHJ PP,WCHAR + 006310' 336000 013770' SKIPN IRPCF ;IRPC? + 006311' 254000 006270' JRST IRPSE1 ;NO, GET NEXT CHARACTER + + 006312' 205400 774040 IRPSE4: MOVSI CS,(BYTE (7) 177,2) + 006313' 260740 006466' PUSHJ PP,WWRXE ;WRITE END + 006314' 202540 013766' MOVEM MRP,IRPARG ;SAVE POINTER + 006315' 200540 014075' MOVE MRP,RCOUNT ;SAVE COUNT + 006316' 202540 013765' MOVEM MRP,IRPCNT + 006317' 550540 013771' HRRZ MRP,IRPPOI ;SET FOR NEW SCAN + 006320' 344540 005330' AOJA MRP,REPEA8 ;ON ARG COUNT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 119 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + 006321' 336000 013767' STOPI0: SKIPN IRPARP ;IRP IN PROGRESS? + 006322' 254000 003400' JRST ERRAX ;NO, ERROR + 006323' 402000 013772' SETZM IRPSW ;YES, SET SWITCH + 006324' 263740 000000 POPJ PP, + + 006325' 200320 013767' IRPEND: MOVE V,@IRPARP + 006326' 260740 006546' PUSHJ PP,REFDEC + 006327' 332000 013772' SKIPE IRPSW ;MORE TO COME? + 006330' 254000 006254' JRST IRPSET ;YES + + 006331' 200300 013771' IRPPOP: MOVE V,IRPPOI + 006332' 260740 006546' PUSHJ PP,REFDEC ;DECREMENT REFERENCE + 006333' 262700 014075' POP MP,RCOUNT + 006334' 262700 000013 POP MP,MRP ;RESTORE CELLS + 006335' 262700 013771' POP MP,IRPPOI + 006336' 262720 013767' POP MP,@IRPARP + 006337' 262700 013765' POP MP,IRPCNT + 006340' 262700 013766' POP MP,IRPARG + 006341' 262700 013767' POP MP,IRPARP + 006342' 262700 013772' POP MP,IRPSW + 006343' 262700 013770' POP MP,IRPCF + 006344' 254000 005330' JRST REPEA8 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 120 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + 006345' GETDS: ;GET DUMMY SYMBOL NUMBER + 006345' 200400 000007 MOVE CS,C ;USE CS FOR WORK REGISTER + 006346' 405400 000037 ANDI CS,37 ;MASK + 006347' 270400 014073' ADD CS,MACPNT ;ADD BASE ADDRESS + 006350' 200310 000000 MOVE V,0(CS) ;GET POINTER FLAG + 006351' 327300 006377' JUMPG V,GETDS1 ;BRANCH IF POINTER + 006352' 606340 000040 TRNN C,40 ;NOT POINTER, SHOULD WE CREATE? + 006353' 254000 001417' JRST RSW0 ;NO, FORGET THIS ARG + 006354' 261740 014074' PUSH PP,WWRXX + 006355' 261740 000012 PUSH PP,MWP ;STACK MACRO WRITE POINTER + 006356' 261740 014076' PUSH PP,WCOUNT ;SAVE WORD COUNT + 006357' 260740 006413' PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + 006360' 202250 000000 MOVEM ARG,0(CS) ;STORE POINTER + 006361' 200400 015033' MOVE CS,[BYTE (7) 0,170,170,170,171] ;CREATE A SYMBOL + 006362' 270400 014077' ADD CS,LSTSYM ;LSTSYM= # OF LAST CREATED + 006363' 630400 015034' TDZ CS,[BYTE (7) 0,170,170,170,170] + 006364' 202400 014077' MOVEM CS,LSTSYM + 006365' 434400 015035' IOR CS,[ASCII /.0000/] + 006366' 201340 000056 MOVEI C,"." + 006367' 260740 006456' PUSHJ PP,WCHAR + 006370' 260740 006462' PUSHJ PP,WWORD ;WRITE INTO SKELETON + 006371' 205400 774040 MOVSI CS,(BYTE (7) 177,2) + 006372' 260740 006466' PUSHJ PP,WWRXE ;WRITE END CODE + 006373' 262740 014076' POP PP,WCOUNT ;RESTORE WORD COUNT + 006374' 262740 000012 POP PP,MWP ;RESTORE MACRO WRITE POINTER + 006375' 262740 014074' POP PP,WWRXX + 006376' 200300 000005 MOVE V,ARG ;SET UP FOR REFINC + + 006377' 260740 006543' GETDS1: PUSHJ PP,REFINC ;INCREMENT REFERENCE + 006400' 504300 014075' HRL V,RCOUNT ;SAVE WORD COUNT + 006401' 261700 000006 PUSH MP,V ;STACK V FOR DECREMENT + 006402' 261700 000013 PUSH MP,MRP ;STACK READ POINTER + 006403' 201546 000001 MOVEI MRP,1(V) ;FORM READ POINTER + 006404' 254000 001417' JRST RSW0 ;EXIT + + 006405' 262700 000013 DSEND: POP MP,MRP + 006406' 262700 000006 POP MP,V + 006407' 576300 014075' HLREM V,RCOUNT ;RESTORE WORD COUNT + 006410' 553000 000006 HRRZS V ;CLEAR COUNT + 006411' 260740 006546' PUSHJ PP,REFDEC ;DECREMENT REFERENCE + 006412' 254000 001417' JRST RSW0 ;EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 121 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + 006413' 201240 000001 SKELI1: MOVEI ARG,1 ;ENTRY FOR SINGLE ARG + 006414' 400500 000000 SKELI: SETZ MWP, ;SIGNAL FIRST TIME THROUGH + 006415' 260740 006427' PUSHJ PP,SKELWL ;GET POINTER WORD + 006416' 552500 014074' HRRZM MWP,WWRXX ;SAVE FIRST ADDRESS + 006417' 552500 013450' HRRZM MWP,LADR ;SAVE START OF LINKED LIST + 006420' 552252 000001 HRRZM ARG,1(MWP) ;STORE COUNT + 006421' 370000 014076' SOS WCOUNT ;ACCOUNT FOR WORD + 006422' 550240 014074' HRRZ ARG,WWRXX ;SET FIRST ADDRESS + 006423' 271500 000002 ADDI MWP,2 ;BUMP POINTER + 006424' 505500 440700 HRLI MWP,(POINT 7) ;SET FOR 5 ASCII BYTES + ;SKELW RETURNS WITH ADR OF NEXT FREE LOC IN V (RIGHT) + + 006425' 373000 014076' SKELW: SOSLE WCOUNT ;STILL SOME SPACE IN LEAF? + 006426' 263740 000000 POPJ PP, ;YES, RETURN + 006427' 332300 013511' SKELWL: SKIPE V,NEXT ;GET FIRST FREE ADDRESS + 006430' 254000 006437' JRST SKELW1 ;IF NON-ZERO, UPDATE FREE + 006431' 200300 013377' MOVE V,FREE ;GET FREE + 006432' 271300 000004 ADDI V,.LEAF ;INCREMENT BY LEAF SIZE + 006433' 311300 013552' CAML V,SYMBOL ;OVERFLOW? + 006434' 260740 010277' PUSHJ PP,XCEED ;YES, BOMB OUT + 006435' 250300 013377' EXCH V,FREE ;UPDATE FREE + 006436' 402006 000000 SETZM (V) ;CLEAR LINK + + 006437' 500306 000000 SKELW1: HLL V,0(V) ;GET ADDRESS + 006440' 546300 013511' HLRM V,NEXT ;UPDATE NEXT + 006441' 332000 000012 SKIPE MWP ;IF FIRST TIME + 006442' 506312 777775 HRLM V,1-.LEAF(MWP) ;STORE LINK IN FIRST WORD OF LEAF + 006443' 201500 000004 MOVEI MWP,.LEAF ;SIZE OF LEAF + 006444' 202500 014076' MOVEM MWP,WCOUNT ;STORE FOR COUNT DOWN + 006445' 201506 000000 MOVEI MWP,(V) ;SET UP WRITE POINTER + 006446' 661500 160700 TLO MWP,(POINT 7,,21) ;2 ASCII CHARS + 006447' 263740 000000 POPJ PP, + + ;WWRXX POINTS TO END OF TREE + ;MWP IDPB POINTER TO NEXT HOLE + ;NEXT FIRST OF A LINKED PORTION THAT IS NOT BEING USED (LEAVES) + ;FREE POINTS TO FREE CORE BETWEEN TREE AND SYM-TABLE + ;LADR POINTS TO BEG OF LINKED PORTION. + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 122 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + 006450' 326540 006516' GCHARQ: JUMPN MRP,MREADS ;IF GETTING CHAR. FROM TREE + 006451' 260740 001415' GCHAR: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + 006452' 307340 000014 CAIG C,FF ;TEST FOR LF, VT OR FF + 006453' 305340 000012 CAIGE C,LF + 006454' 263740 000000 POPJ PP, ;NO + 006455' 254000 001745' JRST OUTIM1 ;YES, LIST IT + + 006456' WCHARQ: + 006456' WCHAR: + 006456' 607500 760000 WCHAR1: TLNN MWP,760000 ;END OF WORD? + 006457' 260740 006425' PUSHJ PP,SKELW ;YES, GET ANOTHER + 006460' 136340 000012 IDPB C,MWP ;STORE CHARACTER + 006461' 263740 000000 POPJ PP, + + 006462' 246340 000007 WWORD: LSHC C,7 ;MOVE ASCII INTO C + 006463' 260740 006456' PUSHJ PP,WCHAR1 ;STORE IT + 006464' 326400 006462' JUMPN CS,WWORD ;TEST FOR END + 006465' 263740 000000 POPJ PP, ;YES, EXIT + + 006466' 260740 006462' WWRXE: PUSHJ PP,WWORD ;WRITE LAST WORD + 006467' 270500 014076' ADD MWP,WCOUNT ;GET TO END OF LEAF + 006470' 275500 000004 SUBI MWP,.LEAF ;NOW POINT TO START OF IT + 006471' 553012 000000 HRRZS (MWP) ;ZERO LEFT HALF OF LAST LEAF + 006472' 542520 014074' HRRM MWP,@WWRXX ;SET POINTER TO END + 006473' 263740 000000 POPJ PP, + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 123 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + 006474' 260740 006516' MREAD: PUSHJ PP,MREADS ;READ ONE CHARACTER + 006475' 302340 000177 CAIE C,177 ;SPECIAL? + 006476' 254000 001421' JRST RSW1 ;NO, EXIT + 006477' 260740 006516' PUSHJ PP,MREADS ;YES, GET CODE WORD + 006500' 622340 000100 TRZE C,100 ;SYMBOL? + 006501' 254000 006345' JRST GETDS ;YES + 006502' 303340 000004 CAILE C,4 ;POSSIBLY ILLEGAL + 006503' 254000 003400' JRST ERRAX ;YUP + 006504' 541540 000000 HRRI MRP,0 ;NO, SIGNAL END OF TEXT + 006505' 254007 006506' JRST .+1(C) + 006506' 260740 010277' PUSHJ PP,XCEED + 006507' 254000 006135' JRST MACEND ;1; END OF MACRO + 006510' 254000 006405' JRST DSEND ;2; END OF DUMMY SYMBOL + 006511' 254000 005332' JRST REPEND ;3; END OF REPEAT + 006512' 254000 006325' JRST IRPEND ;4; END OF IRP + + 006513' 505540 000700 MREADI: HRLI MRP,700 ;SET UP BYTE POINTER + 006514' 201340 000003 MOVEI C,.LEAF-1 ;NUMBER OF WORDS + 006515' 202340 014075' MOVEM C,RCOUNT + 006516' 607540 777777 MREADS: TLNN MRP,-1 ;FIRST TIME HERE? + 006517' 254000 006513' JRST MREADI ;YES, SET UP MRP AND RCOUNT + 006520' 607540 760000 TLNN MRP,760000 ;HAVE WE FINISHED WORD? + 006521' 373000 014075' SOSLE RCOUNT ;YES, STILL ROOM IN LEAF? + 006522' 254000 006527' JRST MREADC ;STILL CHAR. IN LEAF + 006523' 554553 777775 HLRZ MRP,1-.LEAF(MRP);YES, GET LINK + 006524' 505540 160700 HRLI MRP,(POINT 7,,21) ;SET POINTER + 006525' 201340 000004 MOVEI C,.LEAF ;RESET COUNT + 006526' 202340 014075' MOVEM C,RCOUNT + 006527' 134340 000013 MREADC: ILDB C,MRP ;GET CHARACTER + 006530' 263740 000000 POPJ PP, + + 006531' 326540 006535' PEEK: JUMPN MRP,PEEKM ;THIS IS A MACRO READ + 006532' 260740 001415' PUSHJ PP,CHARAC ;READ AN ASCII CHAR. + 006533' 661600 000004 TLO IO,IORPTC ;REPEAT FOR NEXT + 006534' 263740 000000 POPJ PP, ;AND RETURN + + 006535' 261740 000013 PEEKM: PUSH PP,MRP ;SAVE MACRO READ POINTER + 006536' 261740 014075' PUSH PP,RCOUNT ;SAVE WORD COUNT + 006537' 260740 006516' PUSHJ PP,MREADS ;READ IN A CHAR. + 006540' 262740 014075' POP PP,RCOUNT ;RESTORE WORD COUNT + 006541' 262740 000013 POP PP,MRP ;RESET READ POINTER + 006542' 263740 000000 POPJ PP, ;IORPTC IS NOT SET + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 124 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + 006543' 201406 000001 REFINC: MOVEI CS,1(V) ;GET POINTER TO TREE + 006544' 350010 000000 AOS 0(CS) ;INCREMENT REFERENCE + 006545' 263740 000000 POPJ PP, + + 006546' 323300 006560' REFDEC: JUMPLE V,DECERR ;CATASTROPHIC ERROR SOMEWHERE + 006547' 201406 000001 MOVEI CS,1(V) ;GET POINTER TO TREE + 006550' 370410 000000 SOS CS,0(CS) ;DECREMENT REFERENCE + 006551' 602400 000777 TRNE CS,000777 ;IS IT ZERO? + 006552' 263740 000000 POPJ PP, ;NO, EXIT + 006553' 550406 000000 HRRZ CS,0(V) ;YES, GET POINTER TO END + 006554' 504400 013511' HRL CS,NEXT ;GET POINTER TO NEXT RE-USABLE + 006555' 502410 000000 HLLM CS,0(CS) ;SET LINK + 006556' 542300 013511' HRRM V,NEXT ;RESET NEXT + 006557' 263740 000000 POPJ PP, + + 006560' 200000 013750' DECERR: MOVE AC0,CALNAM ;GET MACRO NAME + 006561' 205440 015036' MOVSI RC,[SIXBIT /ERROR WHILE EXPANDING@/] + 006562' 260740 010241' PUSHJ PP,TYPMSG + 006563' 254000 010140' JRST ERRNE2 ;COMMON MESSAGE + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 125 +MACRO 10 24-APR-78 02:11 MACRO CALL PROCESSOR + + 000000 A== 0 ;ASCII MODE + 000001 AL== 1 ;ASCII LINE MODE + 000013 IB== 13 ;IMAGE BINARY MODE + 000014 B== 14 ;BINARY MODE + 000016 DMP==16 ;DUMP MODE + + 000000 CTL== 0 ;CONTROL DEVICE NUMBER + 000004 IFN CCLSW,<CTL2==4 ;INPUT DEV FOR CCL FILE> + 000001 BIN== 1 ;BINARY DEVICE NUMBER + 000002 CHAR== 2 ;INPUT DEVICE NUMBER + 000003 LST== 3 ;LISTING DEVICE NUMBER + + ; COMMAND STRING ACCUMULATORS + + 000001 ACDEV== 1 ;DEVICE + 000002 ACFILE==2 ;FILE + 000003 ACEXT== 3 ;EXTENSION + 000004 ACPPN== 4 ;PPN + 000004 ACDEL== 4 ;DELIMITER + 000005 ACPNTR==5 ;BYTE POINTER + + 000006 TIO== 6 + + 001000 TIORW== 1000 + 002000 TIOLE== 2000 + 020000 TIOCLD==20000 + + 000004 DIRBIT==4 ;DIRECTORY DEVICE + 000010 TTYBIT==10 ;TTY + 000020 MTABIT==20 ;MTA + 000100 DTABIT==100 ;DTA + 002000 DISBIT==2000 ;DISPLAY + 020000 CONBIT==20000 ;CONTROLING TTY + 040000 LPTBIT==40000 ;LPT + 200000 DSKBIT==200000 ;DSK + + ;GETSTS ERROR BITS + + 400000 IOIMPM==400000 ;IMPROPER MODE (WRITE LOCK) + 200000 IODERR==200000 ;DEVICE DATA ERROR + 100000 IODTER==100000 ;CHECKSUM OR PARITY ERROR + 040000 IOBKTL== 40000 ;BLOCK TOO LARGE + 740000 ERRBIT==IOIMPM!IODERR!IODTER!IOBKTL + + SYN .TEMP,PPN + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 126 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + SUBTTL I/O ROUTINES + 006564' BEG: + 006564' 625600 100000 IFN CCLSW,<TLZA IO,ARPGSW ;DON'T ALLOW RAPID PROGRAM GENERATION + 006565' 661600 100000 TLO IO,ARPGSW ;ALLOW RAPID PROGRAM GENERATION> + 006566' 550540 005115* HRRZ MRP,JOBREL ;GET LOWSEG SIZE + 006567' 202540 014117' MOVEM MRP,MACSIZ ;SAVE CORE SIZE + ;DECODE VERSION NUMBER + 006570' 201740 014161' MOVEI PP,JOBFFI ;TEMP PUSH DOWN STACK + 006571' 261740 014625' PUSH PP,[0] ;MARK BOTTOM OF STACK + 006572' 135000 015042' LDB 0,[POINT 3,JOBVER,2] ;GET USER BITS + 006573' 322000 006600' JUMPE 0,GETE ;NOT SET IF ZERO + 006574' 271000 000060 ADDI 0,"0" ;FORM NUMBER + 006575' 261740 000000 PUSH PP,0 ;STACK IT + 006576' 201000 000055 MOVEI 0,"-" ;SEPARATE BY HYPHEN + 006577' 261740 000000 PUSH PP,0 ;STACK IT ALSO + 006600' 550000 000137 GETE: HRRZ 0,JOBVER ;GET EDIT NUMBER + 006601' 322000 006612' JUMPE 0,GETU ;SKIP ALL THIS IF ZERO + 006602' 201040 000051 MOVEI 1,")" ;ENCLOSE IN PARENS. + 006603' 261740 000001 PUSH PP,1 + 006604' 231000 000010 GETED: IDIVI 0,8 ;GET OCTAL DIGITS + 006605' 271040 000060 ADDI 1,"0" ;MAKE ASCII + 006606' 261740 000001 PUSH PP,1 ;STACK IT + 006607' 326000 006604' JUMPN 0,GETED ;LOOP TIL DONE + 006610' 201000 000050 MOVEI 0,"(" ;OTHER PAREN. + 006611' 261740 000000 PUSH PP,0 + 006612' 135000 015043' GETU: LDB 0,[POINT 6,JOBVER,17] ;UPDATE NUMBER + 006613' 322000 006620' JUMPE 0,GETV ;SKIP IF ZERO + 006614' 231000 000010 IDIVI 0,8 ;MIGHT BE TWO DIGITS + 006615' 271040 000100 ADDI 1,"@" ;FORM ALPHA + 006616' 261740 000001 PUSH PP,1 + 006617' 326000 006613' JUMPN 0,GETU+1 ;LOOP IF NOT DONE + 006620' 135000 015044' GETV: LDB 0,[POINT 9,JOBVER,11] ;GET VERSION NUMBER + 006621' 231000 000010 IDIVI 0,8 ;GET DIGIT + 006622' 271040 000060 ADDI 1,"0" ;TO ASCII + 006623' 261740 000001 PUSH PP,1 ;STACK + 006624' 326000 006621' JUMPN 0,GETV+1 ;LOOP + 006625' 200040 015045' MOVE 1,[POINT 7,VBUF+1,13] ;POINTER TO DEPOSIT IN VBUF + 006626' 262740 000000 POP PP,0 ;GET CHARACTER + 006627' 136000 000001 IDPB 0,1 ;DEPOSIT IT + 006630' 326000 006626' JUMPN 0,.-2 ;KEEP GOING IF NOT ZERO + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 127 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + IFN CCLSW,< + 006631' 625600 001000 TLZA IO,CRPGSW ;SET TO INIT NEW COMMAND FILE + 006632' 607600 001000 M: TLNN IO,CRPGSW ;CURRENTLY DOING RPG?> + IFE CCLSW,<M:> + 006633' 047000 000000 RESET ;INITIALIZE PROGRAM + 006634' 402000 013220' SETZM BINDEV ;CLEAR INCASE NOT USED NEXT TIME + 006635' 402000 013223' SETZM LSTDEV ;SAME REASON + 006636' 402000 013234' SETZM INDEV ;INCASE OF ERROR + 006637' 550540 014117' HRRZ MRP,MACSIZ ;GET INITIAL SIZE + 006640' 047540 000011 CORE MRP, ;BACK TO ORIGINAL SIZ4 + 006641' 255000 000000 JFCL ;SHOULD NEVER FAIL + 006642' 403540 013250' SETZB MRP,PASS1I + 006643' 200000 015046' MOVE [XWD PASS1I,PASS1I+1] + 006644' 251000 014101' BLT PASS2X-1 ;ZERO THE PASS1 AND PASS2 VARIABLES + 006645' 201740 014161' MOVEI PP,JOBFFI ;SET TEMP PUSH-DOWN POINTER + 006646' 200400 015047' MOVE CS,[POINT 7,DBUF,6] ;INITIALIZE FOR DATE + 006647' 047100 000023 MSTIME 2, ;GET TIME FROM MONITOR + 006650' 260740 010707' PUSHJ PP,TIMOUT ;TIME FORMAT OUTPUT + 006651' 047040 000014 DATE 1, ;GET DATE + 006652' 133000 000010 IBP CS ;PASS OVER PRESET SPACE + 006653' 260740 010724' PUSHJ PP,DATOUT ;DATE FORMAT OUTPUT + 006654' 205640 402000 MOVSI FR,P1!CREFSW + 006655' 603600 001000 IFN CCLSW,<TLNE IO,CRPGSW ;RPG IN PROGRESS? + 006656' 254000 006742' JRST GOSET ;YES, GO READ NEXT COMMAND + 006657' 603600 100000 TLNE IO,ARPGSW ;NO, RPG ALLOWED? + 006660' 254000 006703' JRST RPGSET ;YES, GO TRY + 006661' 071200 000000 CTLSET: RELEASE CTL2, ;IN CASE OF LOOKUP FAILURE> + IFE CCLSW,<CTLSET:> + 006662' 205600 004000 MOVSI IO,IOPALL ;ZERO FLAGS + 006663' 041000 000001 INIT CTL,AL ;INITIALIZE USER CONSOLE + 006664' 646471 000000 SIXBIT /TTY/ + 006665' 014114' 014111' XWD CTOBUF,CTIBUF + 006666' 047000 000012 EXIT ;NO TTY, NO ASSEMBLY + 006667' 205340 646471 MOVSI C,(SIXBIT /TTY/) + 006670' 047340 000004 DEVCHR C, ;GET CHARACTERISTICS + 006671' 607340 000010 TLNN C,10 ;IS IT REALLY A TTY + 006672' 047000 000012 EXIT ;NO + 006673' 064000 000001 INBUF CTL,1 ;INITIALIZE SINGLE CONTROL + 006674' 065000 000001 OUTBUF CTL,1 ;BUFFERS + 006675' 260740 010247' PUSHJ PP,CRLF ;OUTPUT CARRIAGE RETURN - LINE FEED + 006676' 201340 000052 MOVEI C,"*" + 006677' 136340 014115' IDPB C,CTOBUF+1 + 006700' 067000 000000 OUTPUT CTL, + 006701' 066000 000000 INPUT CTL, + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 128 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 006702' 254000 007022' IFN CCLSW,<JRST BINSET ;BEGIN WITH BINARY FILE + + 006703' RPGSET: + 006703' 041200 000001 INIT CTL2,AL ;LOOK FOR DISK + 006704' 446353 000000 SIXBIT /DSK/ ;... + 006705' 000000 014106' XWD 0,CTLBLK ;... + 006706' 254000 006661' JRST CTLSET ;DSK NOT THERE + + 006707' 515140 554143 HRLZI 3,(SIXBIT /MAC/) ;###MAC + 006710' 201000 000003 MOVEI 3 ;COUNT + 006711' 047040 000030 PJOB AC1, ;RETURNS JOB NO. TO AC1 + 006712' 231040 000012 RPGLUP: IDIVI AC1,12 ;CONVERT + 006713' 271100 000020 ADDI AC2,"0"-40 ;SIXBITIZE IT + 006714' 246100 777772 LSHC AC2,-6 ; + 006715' 367000 006712' SOJG 0,RPGLUP ;3 TIMES + 006716' 202140 013251' MOVEM 3,CTLBUF ;###MAC + 006717' 515000 645560 HRLZI (SIXBIT /TMP/) ; + 006720' 202000 013252' MOVEM CTLBUF+1 ;TMP + 006721' 402000 013254' SETZM CTLBUF+3 ;PROG-PRO + 006722' 076200 013251' LOOKUP CTL2,CTLBUF ;COMMAND FILE + 006723' 254000 006661' JRST CTLSET ;NOT THERE + 006724' 546000 014104' HLRM EXTMP ;SAVE THE EXTENSION + + 006725' 064200 000001 RPGS2: INBUF CTL2,1 ;SINGLE BUFFERED + 006726' 041000 000001 RPGS2A: INIT CTL,AL ;TTY FOR CONSOLE MESSAGES + 006727' 646471 000000 SIXBIT /TTY/ ;... + 006730' 014114' 000000 XWD CTOBUF,0 ;... + 006731' 047000 000012 EXIT ;NO TTY, NO ASSEMBLY + 006732' 065000 000001 OUTBUF CTL,1 ;SINGLE BUFFERED + 006733' 200000 005224* MOVE JOBFF ;REMEMBER WHERE BINARY BUFFERS BEGIN + 006734' 202000 014105' MOVEM SAVFF ;... + 006735' 550000 006566* HRRZ JOBREL ;TOP OF CORE + 006736' 313000 014117' CAMLE MACSIZ ;SEE IF IT HAS GROWN + 006737' 202000 014117' MOVEM MACSIZ ;PREVENTS ADDRESS CHECK ON EXIT + 006740' 603600 001000 TLNE IO,CRPGSW ;ARE WE ALREADY IN RPG MODE? + 006741' 254000 006632' JRST M ;MUST HAVE COME FROM @ COMMAND, RESET + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 129 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 006742' 205600 005000 GOSET: MOVSI IO,IOPALL!CRPGSW ;SET INITIAL FLAGS + 006743' 201400 000310 MOVEI CS,CTLSIZ ;MAXIMUM CHARS IN A LINE + 006744' 200040 014110' MOVE AC1,CTLBLK+2 ;NUMBER OF CHARACTERS + 006745' 202040 014113' MOVEM AC1,CTIBUF+2 ;SAVE FOR PASS 2 + 006746' 200040 015050' MOVE AC1,[POINT 7,CTLBUF] ;WHERE TO STASH CHARS + 006747' 202040 014112' MOVEM AC1,CTIBUF+1 ;... + 006750' 377000 014110' GOSET1: SOSG CTLBLK+2 ;ANY MORE CHARS? + PUSHJ PP,[IN CTL2, ;READ ANOTHER BUFFERFUL + POPJ PP, ;EVERYTHING OK, RETURN + STATO CTL2,20000 ;EOF? + JRST [HRROI RC,[SIXBIT /ERROR READING COMMAND FILE@/] + JRST ERRFIN] ;GO COMPLAIN + PUSHJ PP,DELETE ;CMD FILE + 006751' 260740 015060' EXIT] ;EOF AND FINISHED + 006752' 134340 014107' ILDB C,CTLBLK+1 ;GET NEXT CHAR + 006753' 200460 014107' MOVE RC,@CTLBLK+1 ;CHECK FOR SEQUENCE NUMBERS + 006754' 602440 000001 TRNE RC,1 ;... + JRST [AOS CTLBLK+1 ;SKIP OVER ANOTHER 5 CHARS + MOVNI RC,5 ;... + ADDM RC,CTLBLK+2 ;... + 006755' 254000 015066' JRST GOSET1 ] ;GO READ ANOTHER CHAR + 006756' 322340 006750' JUMPE C,GOSET1 ;IGNORE NULLS + 006757' 136340 014112' IDPB C,CTIBUF+1 ;STASH AWAY + 006760' 350000 014113' AOS CTIBUF+2 ;INCREMENT CHAR. COUNT + 006761' 302340 000012 CAIE C,12 ;LINE FEED OR + 006762' 306340 000175 CAIN C,175 ;ALTMODE? + 006763' 254000 006772' JRST GOSET2 ;YES, FINISHED WITH COMMAND + 006764' 302340 000176 CAIE C,176 + 006765' 306340 000033 CAIN C,33 + 006766' 254000 006772' JRST GOSET2 ;ALTMODE. + 006767' 367400 006750' SOJG CS,GOSET1 ;GO READ ANOTHER + 006770' 561440 015072' HRROI RC,[SIXBIT /COMMAND LINE TOO LONG@/] + 006771' 254000 010176' JRST ERRFIN ;GO COMPLAIN + 006772' 201340 000012 GOSET2: MOVEI C,12 ;MAKE SURE THERE'S A LF + 006773' 136340 014112' IDPB C,CTIBUF+1 ;... + 006774' 202040 014112' MOVEM AC1,CTIBUF+1 ;SET POINTER TO BEGINNING + 006775' 350000 014113' AOS CTIBUF+2 ;ADD I TO COUNT + 006776' 200000 014105' MOVE SAVFF ;RESET JOBFF FOR NEW BINARY + 006777' 202000 006733* MOVEM JOBFF ;... + 007000' 254000 007022' JRST BINSET + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 130 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + + 007001' 260740 000066' RPGS1: PUSHJ PP,DELETE ;DELETE COMMAND FILE + 007002' 202040 013231' MOVEM ACDEV,RPGDEV ;GET SET TO INIT + 007003' 050200 013230' OPEN CTL2,RPGINI ;DO IT + 007004' 254000 010162' JRST EINIT ;ERROR + 007005' 202100 013343' MOVEM ACFILE,INDIR ;USE INPUT BLOCK + 007006' 202200 013346' MOVEM ACPPN,INDIR+3 ;SET PPN + 007007' 202140 013344' MOVEM ACEXT,INDIR+1 + 007010' 076200 013343' LOOKUP CTL2,INDIR + JRST [JUMPN ACEXT,RPGLOS ;GIVE UP ,EXPLICIT EXTENSION + MOVSI ACEXT,(SIXBIT /CCL/) ;IF BLANK TRY CCL + 007011' 254000 015076' JRST .-2 ] + 007012' 546140 014104' HLRM ACEXT,EXTMP ;SAVE THE EXTENSION + 007013' 554000 000062* HLRZ JOBSA ;RESET JOBFF TO ORIGINAL + 007014' 202000 006777* MOVEM JOBFF + 007015' 661600 001000 TLO IO,CRPGSW ;TURN ON SWITCH SO WE RESET WORLD + 007016' 254000 006725' JRST RPGS2 ;AND GO + 007017' 071200 000000 RPGLOS: RELEAS CTL2,0 + 007020' 621600 001000 TLZ IO,CRPGSW ;STOPS IO TO UNASGD CHAN + 007021' 254000 010171' JRST ERRCF ;NO FILE FOUND + > + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 131 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 007022' 260740 007477' BINSET: PUSHJ PP,NAME1 ;GET FIRST NAME + 007023' 306340 000041 IFN CCLSW,<CAIN C,"!" ;WAS THIS AN IMPERATIVE? + 007024' 254000 000017' JRST NUNSET ;GET THEE TO A NUNNERY + 007025' 306340 000100 CAIN C,"@" ;CHEK FOR A NEW RPG FILE + 007026' 254000 007001' JRST RPGS1> + 007027' 607640 002000 TLNN FR,CREFSW ;CROSS REF REQUESTED? + 007030' 254000 007070' JRST LSTSE1 ;YES, SKIP BINARY + 007031' 306340 000054 CAIN C,"," ;COMMA? + 007032' 322040 007067' JUMPE ACDEV,LSTSET ;YES, SKIP BINARY IF NO DEVICE SPECIFIED + 007033' 306340 000137 CAIN C,"_" ;LEFT ARROW? + 007034' 322040 007070' JUMPE ACDEV,LSTSE1 ;YES, SKIP BINARY IF NO DEVICE SPECIFIED + 007035' 322040 006632' JUMPE ACDEV,M ;IGNORE IF JUST <CR-LF> + 007036' 661640 001000 TLO FR,PNCHSW ;OK, SET SWITCH + 007037' 202040 013220' MOVEM ACDEV,BINDEV ;STORE DEVICE NAME + 007040' 202100 013337' MOVEM ACFILE,BINDIR ;STORE FILE NAME IN DIRECTORY + 007041' 326140 007043' JUMPN ACEXT,.+2 ;EXTENSION SPECIFIED? + 007042' 205140 624554 MOVSI ACEXT,(SIXBIT /REL/) ;NO, ASSUME RELOCATABLE BINARY + 007043' 202140 013340' MOVEM ACEXT,BINDIR+1 ;STORE IN DIRECTORY + 007044' 202200 013342' MOVEM ACPPN,BINDIR+3 ;SET PPN + 007045' 050040 013217' OPEN BIN,BININI ;INITIALIZE BINARY + 007046' 254000 010162' JRST EINIT ;ERROR + 007047' 623300 002000 TLZE TIO,TIOLE ;SKIP TO EOT + 007050' 072040 000010 MTAPE BIN,10 + 007051' 623300 001000 TLZE TIO,TIORW ;REWIND REQUESTED? + 007052' 072040 000001 MTAPE BIN,1 ;YES + 007053' 325400 007061' JUMPGE CS,BINSE2 ;BRANCH IF NO BACK-SPACE + 007054' 072040 000017 MTAPE BIN,17 ;BACK-SPACE A FILE + 007055' 341400 007054' AOJL CS,.-1 ;TEST FOR END + 007056' 072040 000000 WAIT BIN, + 007057' 061040 004000 STATO BIN,1B24 ;LOAD POINT? + 007060' 072040 000016 MTAPE BIN,16 ;NO, GO FORWARD ONE + 007061' 367400 007060' BINSE2: SOJG CS,.-1 ;TEST FORWARD SPACING + + 007062' 603300 020000 TLNE TIO,TIOCLD ;DIRECTORY CLEAR REQUESTED? + 007063' 047040 000013 UTPCLR BIN, ;YES, CLEAR IT + 007064' 065040 000002 OUTBUF BIN,2 ;SET UP TWO RING BUFFER + 007065' 306340 000137 CAIN C,"_" + 007066' 254000 007142' JRST GETSET ;NO LISTING + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 132 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 007067' 260740 007477' LSTSET: PUSHJ PP,NAME1 ;GET NEXT DEVICE + 007070' 302340 000137 LSTSE1: CAIE C,"_" + 007071' 254000 007603' JRST ERRCM + 007072' 603640 002000 TLNE FR,CREFSW ;CROSS-REF REQUESTED? + 007073' 254000 007102' JRST LSTSE2 ;NO, BRANCH + 007074' 326040 007076' JUMPN ACDEV,.+2 ;YES, WAS DEVICE SPECIFIED? + 007075' 205040 446353 MOVSI ACDEV,(SIXBIT /DSK/) ;NO, ASSUME DSK + 007076' 326100 007100' JUMPN ACFILE,.+2 + 007077' 200100 015101' MOVE ACFILE,[SIXBIT /CREF/] + 007100' 326140 007102' JUMPN ACEXT,.+2 + 007101' 205140 436246 MOVSI ACEXT,(SIXBIT /CRF/) + 007102' 322040 007142' LSTSE2: JUMPE ACDEV,GETSET ;FORGET LISTING IF NO DEVICE SPECIFIED + 007103' 200000 000001 MOVE AC0,ACDEV + 007104' 047000 000004 DEVCHR AC0, ;GET CHARACTERISTICS + 007105' 603000 042010 TLNE AC0,LPTBIT!DISBIT!TTYBIT + 007106' 603640 002000 TLNE FR,CREFSW ; WAS CROSS-REF REQUESTED? + 007107' 354000 013512' AOSA OUTSW+0*TTYSW ;NO, ASSUME TTY + 007110' 254000 007603' JRST ERRCM ;YES, ERROR - CREF DEV MUST NOT BE LPT, DIS, OR TTY + 007111' 603000 020000 TLNE AC0,CONBIT ;CONTROLING TELETYPE LISTING? + 007112' 254000 007142' JRST GETSET ;YES, BUFFER ALREADY SET + 007113' 202040 013223' MOVEM ACDEV,LSTDEV ;STORE DEVICE NAME + 007114' 350000 013512' AOS OUTSW+0*LPTSW ;SET FOR LPT + 007115' 202100 013333' MOVEM ACFILE,LSTDIR ;STORE FILE NAME + 007116' 326140 007120' JUMPN ACEXT,.+2 + 007117' 205140 546364 MOVSI ACEXT,(SIXBIT /LST/) + 007120' 202140 013334' MOVEM ACEXT,LSTDIR+1 + 007121' 202200 013336' MOVEM ACPPN,LSTDIR+3 ;SET PPN + 007122' 050140 013222' OPEN LST,LSTINI ;INITIALIZE LISTING OUTPUT + 007123' 254000 010162' JRST EINIT ;ERROR + 007124' 623300 002000 TLZE TIO,TIOLE + 007125' 072140 000010 MTAPE LST,10 + 007126' 623300 001000 TLZE TIO,TIORW ;REWIND REQUESTED? + 007127' 072140 000001 MTAPE LST,1 ;YES + 007130' 325400 007136' JUMPGE CS,LSTSE3 + 007131' 072140 000017 MTAPE LST,17 + 007132' 341400 007131' AOJL CS,.-1 + 007133' 072140 000000 WAIT LST, + 007134' 061140 004000 STATO LST,1B24 + 007135' 072140 000016 MTAPE LST,16 + 007136' 367400 007135' LSTSE3: SOJG CS,.-1 + 007137' 603300 020000 TLNE TIO,TIOCLD ;DIRECTORY CLEAR REQUESTED? + 007140' 047140 000013 UTPCLR LST, ;YES, CLEAR IT + 007141' 065140 000002 OUTBUF LST,2 ;SET UP A TWO RING BUFFER + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 133 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 007142' 201140 010321' GETSET: MOVEI 3,PDPERR + 007143' 542140 000000* HRRM 3,JOBAPR ;SET TRAP LOCATION + 007144' 201140 200000 MOVEI 3,1B19 ;SET FOR PUSH-DOWN OVERFLOW + 007145' 047140 000016 APRENB 3, + 007146' 370140 013513' SOS 3,PDP ;GET PDP REQUEST MINUS 1 + 007147' 221140 000062 IMULI 3,.PDP ;COMPUTE SIZE (50*<NUMBER OF /P'S +1>) + 007150' 514700 000003 HRLZ MP,3 + 007151' 540700 007014* HRR MP,JOBFF ;SET BASIC POINTER + 007152' 200740 000016 MOVE PP,MP + 007153' 274740 000003 SUB PP,3 + 007154' 202740 013250' MOVEM PP,RP ;SET RP + 007155' 274740 000003 SUB PP,3 + 007156' 240140 000001 ASH 3,1 ;DOUBLE SIZE OF BASIC POINTER + 007157' 504740 000003 HRL PP,3 + 007160' 276740 000003 SUBM PP,3 ;COMPUTE TOP LOCATION + 007161' 336000 014121' SKIPN UNITOP ;IF ANY UNIVERSALS HAVE BEEN SEEN + 007162' 254000 007167' JRST GETSE0 ;NO + 007163' 553000 000003 HRRZS 3 ;GET TOP OF BUFFERS AND STACKS + 007164' 313140 014120' CAMLE 3,UNISIZ ;HOPE ITS NOT BIGGER THAN UNIVERSAL ONE + 007165' 254000 005262' JRST UNIERR ;IT WAS, YOU LOSE + 007166' 334140 014121' SKIPA 3,UNITOP ;DON'T LOSE THEM + 007167' 552140 014120' GETSE0: HRRZM 3,UNISIZ ;STORE UNTIL A UNIVERSAL IS SEEN + 007170' 552140 013450' HRRZM 3,LADR ;SET START OF MACRO TREE + 007171' 552140 013377' HRRZM 3,FREE + + 007172' 550000 006735* GETSE1: HRRZ JOBREL + 007173' 275000 000001 SUBI 1 + 007174' 202000 013553' MOVEM SYMTOP ;SET TOP OF SYMBOL TABLE + 007175' 275000 000004 SUBI LENGTH ;SET POINTER FOR INITIAL SYMBOLS + 007176' 313000 013450' CAMLE LADR ;HAVE WE ROOM? + 007177' 254000 007205' JRST GETSE2 ;YES + + 007200' 550100 007172* HRRZ 2,JOBREL ;NO, TRY FOR MORE CORE + 007201' 271100 002000 ADDI 2,2000 + 007202' 047100 000011 CORE 2, + 007203' 254000 010317' JRST XCEED2 ;NO MORE, INFORM USER + 007204' 254000 007172' JRST GETSE1 ;TRY AGAIN + + 007205' 202000 013552' GETSE2: MOVEM SYMBOL ;SET START OF SYMBOL TABLE + 007206' 505000 012201' HRLI SYMNUM + 007207' 251020 013553' BLT @SYMTOP ;STORE SYMBOLS + 007210' 260740 013125' PUSHJ PP,SRCHI ;INITIALIZE TABLE + 007211' 200000 015102' MOVE [XWD CTIBUF+1,CTLSAV] ;SAVE CONTROL INPUT BUFFER + 007212' 251000 013741' BLT CTLS1 ;FOR RESCAN ON PASS 2 + 007213' 205000 446353 IFN FTDISK,<MOVSI (SIXBIT /DSK/) ;SET INPUT TO TAKE DSK AS DEV + 007214' 202000 013736' MOVEM ACDEVX> + 007215' 260740 002743' PUSHJ PP,COUTI ;INIT OUTPUT JUST IN CASE + 007216' 260740 007242' PUSHJ PP,INSET ;GET FIRST INPUT FILE + + 007217' 603600 001000 IFN CCLSW,<TLNE IO,CRPGSW ;BUT ONLY IF DOING RPG + 007220' 051140 015103' TTCALL 3,[ASCIZ /MACRO: /] ;PUBLISH COMPILER NAME> + 007221' 200400 013343' MOVE CS,INDIR ;SET UP NAME OF FIRST FILE + 007222' 202400 013207' MOVEM CS,LSTFIL ;AS LAST PRINTED + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 133-1 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 007223' 402000 014102' SETZM LSTPGN + 007224' 254000 000077' JRST ASSEMB ;START ASSEMBLY + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 134 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 007225' 070040 000000 FINIS: CLOSE BIN, ;DUMP BUFFER + 007226' 603640 001000 TLNE FR,PNCHSW ;PUNCH REQUESTED? + 007227' 260740 010415' PUSHJ PP,TSTBIN ;YES, TEST FOR ERRORS + 007230' 071040 000000 RELEAS BIN, + 007231' 070140 000000 CLOSE LST, + 007232' 373000 013512' SOSLE OUTSW+0*LPTSW ;LPT TYPE OUTPUT? + 007233' 260740 010424' PUSHJ PP,TSTLST ;YES, TEST FOR ERRORS + 007234' 071140 000000 RELEAS LST, + 007235' 071100 000000 RELEAS CHAR, + 007236' 067000 000000 OUTPUT CTL,0 ;FLUSH TTY OUTPUT + 007237' 332000 013733' SKIPE UNIVSN ;SKIP IF NOT ASSEMBLING UNIVERSAL + 007240' 260740 005207' PUSHJ PP,UNISYM ;STORE SYMBOLS ETC. FIRST + 007241' 254000 006632' JRST M ;RETURN FOR NEXT ASSEMBLY + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 135 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 007242' 201000 014161' INSET: MOVEI JOBFFI ;POINTER TO INPUT BUFFER + 007243' 542000 007151* HRRM JOBFF ;INFORM SYSTEM OF BUFFER AREA + 007244' 260740 007500' PUSHJ PP,NAME2 ;GET NEXT COMMAND NAME + 007245' 322040 010115' JUMPE ACDEV,ERRNE ;ERROR IF NONE LEFT + 007246' 202040 013234' MOVEM ACDEV,INDEV ;STORE DEVICE + 007247' 202100 013343' MOVEM ACFILE,INDIR ;STORE FILE IN DIRECTORY + 007250' 202200 013346' MOVEM ACPPN,INDIR+3 ;STORE PPN BEFORE WE LOSE IT + 007251' 050100 013233' OPEN CHAR,INDEVI + 007252' 254000 010162' JRST EINIT ;ERROR + 007253' 047040 000004 DEVCHR ACDEV, ;TEST CHARACTERISTICS + 007254' 607040 000020 TLNN ACDEV,MTABIT ;MAG TAPE? + 007255' 254000 007300' JRST INSET3 ;NO + 007256' 627640 000004 TLZN FR,MTAPSW ;FIRST MAG TAPE IN PASS 2? + 007257' 254000 007262' JRST INSET1 ;NO + 007260' 607300 001000 TLNN TIO,TIORW ;YES, REWIND REQUESTED? + 007261' 274400 013514' SUB CS,RECCNT ;NO, PREPARE TO BACK-SPACE TAPE + 007262' 350000 013514' INSET1: AOS RECCNT ;INCREMENT FILE COUNTER + 007263' 272400 013514' ADDM CS,RECCNT ;UPDATE COUNT + 007264' 623300 002000 TLZE TIO,TIOLE + 007265' 072100 000010 MTAPE CHAR,10 + 007266' 623300 001000 TLZE TIO,TIORW ;REWIND? + 007267' 072100 000001 MTAPE CHAR,1 ;YES + 007270' 325400 007277' JUMPGE CS,INSET2 + 007271' 072100 000017 MTAPE CHAR,17 + 007272' 072100 000017 MTAPE CHAR,17 + 007273' 341400 007272' AOJL CS,.-1 + 007274' 072100 000000 WAIT CHAR, + 007275' 061100 004000 STATO CHAR,1B24 + 007276' 072100 000016 MTAPE CHAR,16 + 007277' 365400 007276' INSET2: SOJGE CS,.-1 + + 007300' 064100 000001 INSET3: INBUF CHAR,1 + 007301' 201240 014161' MOVEI ACPNTR,JOBFFI + 007302' 250240 007243* EXCH ACPNTR,JOBFF + 007303' 275240 014161' SUBI ACPNTR,JOBFFI + 007304' 201200 000407 MOVEI ACDEL,NUMBUF*203+1 + 007305' 230200 000005 IDIV ACDEL,ACPNTR + 007306' 064104 000000 INBUF CHAR,(ACDEL) + 007307' 326140 007312' JUMPN ACEXT,INSET4 ;TAKE USER'S EXTENSION IF NON-BLANK + 007310' 205140 554143 MOVSI ACEXT,(SIXBIT /MAC/) ;BLANK, TRY .MAC FIRST + 007311' 260740 007425' PUSHJ PP,INSETI + 007312' 260740 007425' INSET4: PUSHJ PP,INSETI + 007313' 322140 010171' JUMPE ACEXT,ERRCF ;ERROR IF ZERO + 007314' 603040 000010 TLNE ACDEV,TTYBIT ;TELETYPE? + 007315' 060100 000001 SETSTS CHAR,AL ;YES, CHANGE TO ASCII LINE + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 136 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + ;DO ALL ENTERS HERE FOR LEVEL D + 007316' 332000 013732' SKIPE ENTERS ;HAVE ENTERS BEEN DONE ALREADY? + 007317' 254000 007351' JRST ENTRDN ;YES, DON'T DO TWICE + 007320' 336140 013223' SKIPN ACEXT,LSTDEV ;IS THERE A LIST DEVICE? + 007321' 254000 007342' JRST LSTSE5 ;NO SO DON'T DO ENTER + 007322' 336100 013333' SKIPN ACFILE,LSTDIR ;GET FILE NAME INCASE OF ERROR + JRST [DEVCHR ACEXT, + TLNE ACEXT,DIRBIT ;DOES IT HAVE A DIRECTORY? + JRST LSTSE4 ;YES, GIVE UP BEFORE HARM IS DONE + SKIPE ACFILE,INDIR ;USE INPUT FILE NAME + MOVEM ACFILE,LSTDIR ;TOO BAD IF ZERO ALSO + 007323' 254000 015105' JRST LSTSE4] + 007324' 510140 013334' HLLZ ACEXT,LSTDIR+1 ;EXT ALSO + 007325' 200200 013336' MOVE ACPPN,LSTDIR+3 ;SAVE PPN + 007326' 076140 013333' LOOKUP LST,LSTDIR ;PREVIOUS ONE STILL THERE + 007327' 254000 007340' JRST LSTSE4 ;NO + 007330' 402000 013333' SETZM LSTDIR ;YES,CLEAR NAME + 007331' 202200 013336' MOVEM ACPPN,LSTDIR+3 ;RESET PPN + 007332' 055140 013333' RENAME LST,LSTDIR + 007333' 070140 000000 CLOSE LST, ;IGNORE FAILURE + 007334' 202100 013333' MOVEM ACFILE,LSTDIR ;RESTORE NAME + 007335' 513000 013334' HLLZS LSTDIR+1 ;BH 11/19/74 FOR DATE75. CLEAR RH. + 007336' 402000 013335' SETZM LSTDIR+2 ;CLEAR PROTECTION AND DATE + 007337' 202200 013336' MOVEM ACPPN,LSTDIR+3 ;SET PPN AGAIN + 007340' LSTSE4: + 007340' 077140 013333' ENTER LST,LSTDIR ;SET UP DIRECTORY + 007341' 254000 010164' JRST ERRCL ;ERROR + 007342' 336140 013220' LSTSE5: SKIPN ACEXT,BINDEV ;A BINARY DEVICE THEN ? + 007343' 254000 007351' JRST ENTRDN ;NO + 007344' 336100 013337' SKIPN ACFILE,BINDIR ;INCASE OF ERROR + JRST [DEVCHR ACEXT, + TLNE ACEXT,DIRBIT ;DOES IT HAVE A DIRECTORY? + JRST .+1 ;YES, GIVE UP BEFORE HARM IS DONE + SKIPE ACFILE,INDIR ;USE INPUT FILE NAME + MOVEM ACFILE,BINDIR ;TOO BAD IF ZERO ALSO + 007345' 254000 015113' JRST .+1] + 007346' 513140 013340' HLLZS ACEXT,BINDIR+1 ;BH 11/19/74 DATE75. WAS HLLZ. + 007347' 077040 013337' ENTER BIN,BINDIR ;ENTER FILE NAME + 007350' 254000 010166' JRST ERRCB ;ERROR + + 007351' 476000 013732' ENTRDN: SETOM ENTERS ;MAKE SURE ONLY DONE ONCE + 007352' 200400 015121' MOVE CS,[POINT 7,DEVBUF] + 007353' 261740 000001 PUSH PP,1 ;SAVE THE ACCS + 007354' 261740 000002 PUSH PP,2 + 007355' 261740 000003 PUSH PP,3 + 007356' 336100 013343' SKIPN 2,INDIR ;GET INPUT NAME + 007357' 254000 007412' JRST FINDEV ;FINISHED WITH DEVICE + 007360' 400040 000000 SETZ 1, ;CLEAR FOR RECEIVING + 007361' 246040 000006 LSHC 1,6 ;SHIFT ONE CHAR. IN + 007362' 271040 000040 ADDI 1,40 ;FORM ASCII + 007363' 136040 000010 IDPB 1,CS ;STORE CHAR. + 007364' 326100 007360' JUMPN 2,.-4 ;MORE TO DO? + 007365' 201040 000011 MOVEI 1," " ;SEPARATE BY TAB + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 136-1 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 007366' 136040 000010 IDPB 1,CS + 007367' 510100 013344' HLLZ 2,INDIR+1 ;GET EXT + 007370' 322100 007376' JUMPE 2,FINEXT ;NO EXT + 007371' 400040 000000 SETZ 1, + 007372' 246040 000006 LSHC 1,6 ;SAME LOOP AS ABOVE + 007373' 271040 000040 ADDI 1,40 + 007374' 136040 000010 IDPB 1,CS + 007375' 326100 007371' JUMPN 2,.-4 + 007376' 201040 000011 FINEXT: MOVEI 1," " + 007377' 136040 000010 IDPB 1,CS ;SEPARATE BY TAB + 007400' 135040 015122' LDB 1,[POINT 12,INDIR+2,35] ;GET DATE + 007401' 135100 015123' LDB 2,[POINT 3,INDIR+1,20] ;BH 11/19/74 DATE75. + 007402' 137100 015124' DPB 2,[POINT 3,1,23] ;BH 11/19/74 DATE75. + 007403' 322040 007412' JUMPE 1,FINDEV ;NO DATE? + 007404' 260740 010724' PUSHJ PP,DATOUT ;STORE IT + 007405' 135100 015125' LDB 2,[POINT 11,INDIR+2,23] ;GET CREATION TIME + 007406' 322100 007412' JUMPE 2,FINDEV ;NO TIME (DECTAPE) + 007407' 201040 000040 MOVEI 1," " ;SEPARATE BY SPACE + 007410' 136040 000010 IDPB 1,CS + 007411' 260740 010710' PUSHJ PP,TIMOU1 ;STORE TIME + 007412' 400040 000000 FINDEV: SETZ 1, + 007413' 201100 000011 MOVEI 2," " ;FINAL TAB + 007414' 136100 000010 IDPB 2,CS + 007415' 136040 000010 IDPB 1,CS ;TERMINATE FOR NOW + 007416' 262740 000003 POP PP,3 ;RESTORE ACCS + 007417' 262740 000002 POP PP,2 + 007420' 262740 000001 POP PP,1 + 007421' 336000 014100' SKIPN PAGENO ;IF FIRST TIME THRU + 007422' 254000 010703' JRST OUTFF ;START NEW PAGE + 007423' 402000 014100' SETZM PAGENO ;ON NEW FILE, RESET PAGES + 007424' 254000 010704' JRST OUTFF2 ;DON'T START NEW PAGE UNLESS FF + + 007425' 512140 013344' INSETI: HLLZM ACEXT,INDIR+1 ;STORE EXTENSION + 007426' 200200 013346' MOVE ACPPN,INDIR+3 ;SAVE PPN + 007427' 076100 013343' LOOKUP CHAR,INDIR + 007430' 334140 013344' SKIPA ACEXT,INDIR+1 ;GET ERROR CODE + 007431' 254000 003446' JRST CPOPJ1 ;SKIP-RETURN IF FOUND + 007432' 602140 777777 TRNE ACEXT,-1 ;ERROR CODE OF 0 IS FILE NOT FOUND + 007433' 254000 010171' JRST ERRCF ;FILE THERE BUT NOT READABLE + 007434' 400140 000000 SETZ ACEXT, ;CLEAR EXT AND TRY AGAIN + 007435' 202200 013346' MOVEM ACPPN,INDIR+3 ;RESTORE PPN + 007436' 263740 000000 POPJ PP, + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 137 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 007437' 204000 015102' REC2: MOVS [XWD CTIBUF+1,CTLSAV] ;RESCAN CONTROL (FROM PASS1 END STMNT) + 007440' 251000 014113' BLT CTIBUF+2 ;INPUT BUFFER + 007441' 201000 000137 MOVEI "_" + 007442' 506000 013347' HRLM ACDELX ;FUDGE PREVIOUS DELIMITER + IFN RENTSW,<MOVE HHIGH ;GET HI-SEG BREAK + MOVEM HIGH1 ;SAVE THE ONE WE GOT ON PASS1 (FOR HISEG)> + 007443' 402000 013734' SETZM PASS2I + 007444' 200000 014726' MOVE [XWD PASS2I,PASS2I+1] + 007445' 251000 014101' BLT PASS2X-1 ;ZERO PASS2 VARIABLES + 007446' 661640 000024 TLO FR,MTAPSW!LOADSW ;SET FLAGS + + 007447' 200000 013234' GOTEND: MOVE INDEV ;GET LAST DEVICE + 007450' 047000 000004 DEVCHR ;GET ITS CHARACTERISTICS + 007451' 603000 000004 TLNE 4 ;TEST FOR DIRECTORY (DSK OR DTA) + 007452' 254000 007460' JRST EOT ;YES, SO DON'T WASTE TIME + 007453' 254000 007456' JRST .+3 ;NO, INPUT BUFFER BY BUFFER + 007454' 056100 000000 IN CHAR, + 007455' 254000 007454' JRST .-1 ;NO ERRORS + 007456' 061100 020000 STATO CHAR,1B22 ;TEST FOR EOF + 007457' 254000 007454' JRST .-3 ;IGNORE ERRORS + + 007460' 260740 007473' EOT: PUSHJ PP,SAVEXS ;SAVE REGISTERS + 007461' 260740 007242' PUSHJ PP,INSET ;GET THE NEXT INPUT DEVICE + 007462' 561440 015126' HRROI RC,[SIXBIT /END OF PASS 1@/] ;ASSUME END OF PASS + 007463' 627640 000020 TLZN FR,LOADSW ;ZERO ONLY ON END OF PASS 1 + 007464' 561440 015131' HRROI RC,[SIXBIT /LOAD THE NEXT FILE@/] ;NOT END OF PASS + 007465' 607040 000024 TLNN ACDEV,(1B13!1B15) ;WAS ALL THAT WORK NECESSARY? + 007466' 260740 010241' PUSHJ PP,TYPMSG ;YES + + 007467' 205440 013515' RSTRXS: MOVSI RC,SAVBLK ;SET POINTER + 007470' 251440 000010 BLT RC,RC-1 ;RESTORE REGISTERS + 007471' 200440 013526' MOVE RC,SAVERC ;RESTORE RC + 007472' 263740 000000 POPJ PP, ;EXIT + + 007473' 202440 013526' SAVEXS: MOVEM RC,SAVERC ;SAVE RC + 007474' 201440 013515' MOVEI RC,SAVBLK ;SET POINTER + 007475' 251440 013525' BLT RC,SAVBLK+RC-1 ;BLT ALL REGISTERS BELOW RC + 007476' 263740 000000 POPJ PP, ;EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 138 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 007477' 402000 013736' NAME1: SETZM ACDEVX ;ENTRY FOR DESTINATION + 007500' 403040 013345' NAME2: SETZB ACDEV,INDIR+2 ;ENTRY FOR SOURCE + 007501' 201100 000000 MOVEI ACFILE,0 ;CLEAR FILE + 007502' 554200 013347' HLRZ ACDEL,ACDELX ;GET PREVIOUS DELIMITER + 007503' 403300 000010 SETZB TIO,CS + 007504' 403140 013346' SETZB ACEXT,INDIR+3 ;RESET EXTENSION AND PROGRAM-NUMBER PAIR + 007505' 402000 014054' SETZM PPN ;CLEAR PPN + 007506' 205240 440600 NAME3: MOVSI ACPNTR,(POINT 6,AC0) ;SET POINTER + 007507' 634000 000000 TDZA AC0,AC0 ;CLEAR SYMBOL + + 007510' 260740 007630' SLASH: PUSHJ PP,SW0 + 007511' 260740 010076' GETIOC: PUSHJ PP,TTYIN ;GET INPUT CHARACTER + 007512' 306340 000057 CAIN C,"/" + 007513' 254000 007510' JRST SLASH + 007514' 306340 000050 CAIN C,"(" + 007515' 254000 007624' JRST SWITCH + 007516' 306340 000072 CAIN C,":" + 007517' 254000 007551' JRST DEVICE + 007520' 306340 000056 CAIN C,"." + 007521' 254000 007554' JRST NAME + 007522' 302340 000041 IFN CCLSW,<CAIE C,"!" ;IS CHAR AN IMPERATIVE? + 007523' 306340 000100 CAIN C,"@" + 007524' 254000 007560' JRST TERM ;YES, GO DO IT> + 007525' 302340 000033 CAIE C,33 ;CHECK FOR THREE FLAVORS OF ALT-MODE + 007526' 306340 000176 CAIN C,176 ;... + 007527' 254000 007560' JRST TERM ;... + 007530' 307340 000015 CAIG C,CR ;LESS THAN CR? + 007531' 305340 000012 CAIGE C,LF ;AND GREATER THAN LF? + 007532' 306340 000175 CAIN C,175 ;OR 3RD ALTMOD + 007533' 254000 007560' JRST TERM ;YES + 007534' 306340 000133 IFN FTDISK,<CAIN C,"[" + 007535' 254000 007605' JRST PROGNP ;GET PROGRAMER NUMBER PAIR> + 007536' 306340 000075 CAIN C,"=" ;EQUALS IS SAME AS LEFT ARROW + 007537' 644340 000142 TRCA C,142 ;SO MAKE IT A "_" AND SKIP + 007540' 302340 000054 CAIE C,"," + 007541' 306340 000137 CAIN C,"_" + 007542' 254000 007560' JRST TERM + 007543' 305340 000040 CAIGE C,40 ;VALID AS SIXBIT? + JRST [CAIN C,"Z"-100 ;NO,IS IT ^Z + EXIT ;YES,EXIT FOR BATCH + 007544' 254000 015135' JRST GETIOC] ;JUST IGNORE + 007545' 275340 000040 SUBI C,40 ;CONVERT TO 6-BIT + 007546' 603240 770000 TLNE ACPNTR,770000 ;HAVE WE STORED SIX BYTES? + 007547' 136340 000005 IDPB C,ACPNTR ;NO, STORE IT + 007550' 254000 007511' JRST GETIOC ;GET NEXT CHARACTER + + 007551' 326040 007603' DEVICE: JUMPN ACDEV,ERRCM ;ERROR IF ALREADY SET + 007552' 200040 000000 MOVE ACDEV,AC0 ;DEVICE NAME + 007553' 254000 007556' JRST DEVNAM ;COMMON CODE + + 007554' 326100 007603' NAME: JUMPN ACFILE,ERRCM ;ERROR IF ALREADY SET + 007555' 200100 000000 MOVE ACFILE,AC0 ;FILE NAME + 007556' 200200 000007 DEVNAM: MOVE ACDEL,C ;SET DELIMITER + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 138-1 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 007557' 254000 007506' JRST NAME3 ;GET NEXT SYMBOL + + 007560' 322200 007565' TERM: JUMPE ACDEL,TERM1 ;IF NO PREVIOUS TERMINATOR, THEN FILENAME + 007561' 306200 000137 CAIN ACDEL,"_" ;... + 007562' 254000 007565' JRST TERM1 ;... + 007563' 302200 000072 CAIE ACDEL,":" ;IF PREVIOUS DELIMITER + 007564' 306200 000054 CAIN ACDEL,"," ;WAS COLON OR COMMA + 007565' 200100 000000 TERM1: MOVE ACFILE,AC0 ;SET FILE + 007566' 306200 000056 CAIN ACDEL,"." ;IF PERIOD, + 007567' 510140 000000 HLLZ ACEXT,AC0 ;SET EXTENSION + 007570' 506340 013347' HRLM C,ACDELX ;SAVE PREVIOUS DELIMITER + 007571' 326040 007573' JUMPN ACDEV,.+2 ;IF DEVICE SET USE IT + 007572' 334040 013736' SKIPA ACDEV,ACDEVX ;OTHERWISE USE LAST DEVICE + 007573' 202040 013736' MOVEM ACDEV,ACDEVX ;AND DEVICE + 007574' 200200 014054' MOVE ACPPN,PPN ;PUT PPN IN RIGHT PLACE + 007575' 306340 000041 IFN FTDISK,<CAIN C,"!" ;IMPERATIVE? + 007576' 263740 000000 POPJ PP, ;YES, DON'T ASSUME DEV + 007577' 322100 003447' JUMPE ACFILE,CPOPJ ;IF THERE IS A FILE, + 007600' 326040 007602' JUMPN ACDEV,.+2 ;BUT NO DEVICE + 007601' 205040 446353 MOVSI ACDEV,(SIXBIT /DSK/) ;THEN ASSUME DISK> + 007602' 263740 000000 POPJ PP, ;EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 139 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 007603' 561440 015140' ERRCM: HRROI RC,[SIXBIT /COMMAND ERROR@/] + 007604' 254000 010176' JRST ERRFIN + + 007605' IFN FTDISK,<PROGNP: + 007605' 516440 014054' PROGN1: HRLZM RC,PPN ;COMMA, STORE LEFT HALF + 007606' 201440 000000 PROGN2: MOVEI RC,0 ;CLEAR AC + 007607' 260740 010076' PROGN3: PUSHJ PP,TTYIN + 007610' 306340 000054 CAIN C,"," + 007611' 254000 007605' JRST PROGN1 ;STORE LEFT HALF + 007612' 542440 014054' HRRM RC,PPN ;ASSUME TERMINAL + 007613' 306340 000135 CAIN C,"]" + 007614' 254000 007511' JRST GETIOC ;YES, RETURN TO MAIN SCAN + 007615' 301340 000060 CAIL C,"0" ;CHECK FOR VALID NUMBERS + 007616' 303340 000067 CAILE C,"7" + 007617' 254000 007603' JRST ERRCM ;NOT VALID + 007620' 242440 000003 LSH RC,3 ;SHIFT PREVIOUS RESULT + 007621' 271447 777720 ADDI RC,-"0"(C) ;ADD IN NEW NUMBER + 007622' 254000 007607' JRST PROGN3 ;GET NEXT CHARACTER> + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 140 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 007623' 260740 007631' SWITC0: PUSHJ PP,SW1 ;PROCESS CHARACTER + 007624' 260740 010076' SWITCH: PUSHJ PP,TTYIN ;GET NEXT CHARACTER + 007625' 302340 000051 CAIE C,")" ;END OF STRING? + 007626' 254000 007623' JRST SWITC0 ;NO + 007627' 254000 007511' JRST GETIOC ;YES + + 007630' 260740 010076' SW0: PUSHJ PP,TTYIN + 007631' 201347 777677 SW1: MOVEI C,-"A"(C) ;CONVERT FROM ASCII TO NUMERIC + 007632' 303340 000031 CAILE C,"Z"-"A" ;WITHIN BOUNDS? (IS IT ALPHA?) + 007633' 254000 007603' JRST ERRCM ;NO, ERROR + 007634' 200440 015143' MOVE RC,[POINT 4,BYTAB] + 007635' 133000 000011 IBP RC + 007636' 365340 007635' SOJGE C,.-1 ;MOVE TO PROPER BYTE + 007637' 135340 000011 LDB C,RC ;PICK UP BYTE + 007640' 322340 007603' JUMPE C,ERRCM ;TEST FOR VALID SWITCH + 007641' 307340 000003 CAIG C,SWTABT-SWTAB ;LEGAL ON SOURCE? + 007642' 321740 007603' JUMPL PP,ERRCM ;NO, TEST FOR SOURCE + 007643' 135440 015144' LDB RC,[POINT 4,SWTAB-1(C),12] + 007644' 306440 000014 CAIN RC,IO + 007645' 336000 013740' SKIPN CTLSAV ;IF PASS2 OR IO SWITCH, + 007646' 256007 010052' XCT SWTAB-1(C) ;EXECUTE INSTRUCTION + 007647' 263740 000000 POPJ PP, ;EXIT + 007650' 621600 000001 TLZ IO,IOSALL ;TAKE CARE OF /X + 007651' 263740 000000 POPJ PP, + + DEFINE HELP (TEXT)< + XLIST + ASCIZ ?TEXT? + LIST> + + HLPMES: HELP < + Switches are :- + */A advance one file + */B backspace one file + /C produce a cref listing + */E list macro expansions (LALL) + */F list in new format (.MFRMT) + /G list in old format (.HWFRMT) + /H type this text + */L reinstate listing (LIST) + /M suppress ascii in macro and repeat expansion (SALL) + */N suppress error printout on tty + /O set MLOFF pseudo-op + /P increase size of the pushdown stack + /Q suppress Q errors on the listing + */S suppress listing (XLIST) + */T rewind device + */X suppress all macro expansions (XALL) + */Z zero the directory + Switches A,B,C,T,W,X, and Z must immediately follow + the device or file to which they refer. + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 141 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + DEFINE SETSW (LETTER,INSTRUCTION) < INSTRUCTION + J= <"LETTER"-"A">-^D9*<I=<"LETTER"-"A">/^D9> + SETCOD \I,J> + + DEFINE SETCOD (I,J) + <BYTAB'I=BYTAB'I!<.-SWTAB>B<4*J+3>> + + 000000 BYTAB0= 0 ;INITIALIZE TABLE + 000000 BYTAB1= 0 + 000000 BYTAB2= 0 + + 010053' SWTAB: + 010053' 661300 020000 SETSW Z,<TLO TIO,TIOCLD > + 010054' 621640 002000 SETSW C,<TLZ FR,CREFSW > + 010055' 370000 013513' SETSW P,<SOS PDP > + 010056' SWTABT: ;THE ABOVE SW'S ARE LEGAL ON OUTPUT ONLY + 010056' 271400 000001 SETSW A,<ADDI CS,1 > + 010057' 275400 000001 SETSW B,<SUBI CS,1 > + 010060' 621600 004001 SETSW E,<TLZ IO,IOPALL!IOSALL > + 010061' 051140 007652' SETSW H,<OUTSTR HLPMES> + 010062' 621600 200000 SETSW L,<TLZ IO,IOMSTR > + 010063' 661600 004001 SETSW M,<TLO IO,IOPALL!IOSALL > + 010064' 523000 013727' SETSW N,<HLLOS TYPERR > + 010065' 256000 004244' SETSW O,<XCT OFFML > + 010066' 661640 000010 SETSW Q,<TLO FR,ERRQSW > + 010067' 661600 200000 SETSW S,<TLO IO,IOMSTR > + 010070' 661300 002000 SETSW T,<TLO TIO,TIOLE > + 010071' 661300 001000 SETSW W,<TLO TIO,TIORW > + 010072' 665600 004000 SETSW X,<TLOA IO,IOPALL > + + 010073' BYTAB: ;BYTAB CONTAINS AN INDEX TO SWTAB + ;IT CONSIST OF 9 4BIT BYTES/WORD + ;OR ONE BYTE FOR EACH LETTER + + 010073' 212201 400160 +BYTAB0 ;A-I BYTE = 1 THROUGH 17 = INDEX + 010074' 001046 531700 +BYTAB1 ;J-R BYTE = 0 = COMMAND ERROR + 010075' 674003 600020 +BYTAB2 ;S-Z + + IF2,<PURGE I,J,BYTAB0,BYTAB1,BYTAB2> + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 142 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 010076' 375000 014113' TTYIN: SOSGE CTIBUF+2 ;ENUF CHAR.? + 010077' 254000 010113' JRST TTYERR ;NO + 010100' 134340 014112' ILDB C,CTIBUF+1 ;GET CHARACTER + 010101' 302340 000040 CAIE C," " ;SKIP BLANKS + 010102' 306340 000011 CAIN C,HT ;AND TABS + 010103' 254000 010076' JRST TTYIN + 010104' 306340 000015 CAIN C,15 ;CR? + 010105' 402000 014113' SETZM CTIBUF+2 ;YES,IGNORE REST OF LINE + 010106' 307340 000172 CAIG C,"Z"+40 ;CHECK FOR LOWER CASE + 010107' 305340 000141 CAIGE C,"A"+40 + 010110' 263740 000000 POPJ PP, ;NO,EXIT + 010111' 275340 000040 SUBI C,40 + 010112' 263740 000000 POPJ PP, ;YES, EXIT + + 010113' 336000 013234' TTYERR: SKIPN INDEV ;INPUT DEVICE SEEN? + 010114' 254000 007603' JRST ERRCM ;NO, SO MISSING "_" + 010115' 561440 015145' ERRNE: HRROI RC,[SIXBIT /?NO END STATEMENT ENCOUNTERED ON INPUT FILE@/] + 010116' 051540 000006 ERRNE0: SKPINC V ;SEE IF WE CAN INPUT A CHAR. + 010117' 255000 000000 JFCL ;BUT ONLY TO DEFEAT ^O + 010120' 260740 010241' PUSHJ PP,TYPMSG ;OUTPUT IT + 010121' 332000 013773' SKIPE LITLVL ;SEE IF IN LITERAL + 010122' 336000 013755' SKIPN LITPG ;PAGE 0 MEANS NOT IN A LITERAL REALY + 010123' 254000 010126' JRST ERRNE1 ;NO, TRY OTHERS + 010124' 200300 015157' MOVE V,[XWD [SIXBIT /IN LITERAL@/],LITPG] + 010125' 260740 010323' PUSHJ PP,PRNUM ;GO PRINT INFORMATION + 010126' 201300 000000 ERRNE1: MOVEI V,0 ;CHECK FOR OTHER PLACES + 010127' 332000 013745' SKIPE INDEF + 010130' 200300 015162' MOVE V,[XWD [SIXBIT /IN DEFINE@/],DEFPG] + 010131' 332000 013746' SKIPE INTXT + 010132' 200300 015165' MOVE V,[XWD [SIXBIT /IN TEXT@/],TXTPG] + 010133' 332000 013744' SKIPE INREP + 010134' 200300 015173' MOVE V,[XWD [SIXBIT /IN CONDITIONAL OR REPEAT@/],REPPG] + 010135' 332000 013747' SKIPE INCND + 010136' 200300 015177' MOVE V,[XWD [SIXBIT /IN CONDITIONAL@/],CNDPG] + 010137' 335000 014071' SKIPGE MACENL + 010140' 200300 015203' ERRNE2: MOVE V,[XWD [SIXBIT /IN MACRO CALL@/],CALPG] + 010141' 326300 010145' JUMPN V,ERRNE3 + 010142' 336000 013773' SKIPN LITLVL ;HAD ONE PAGE NUMBER ALREADY + 010143' 334300 015204' SKIPA V,[XWD [SIXBIT /@/],PAGENO] ;BETTER THAN NOTHING + 010144' 254000 010146' JRST .+2 + 010145' 260740 010323' ERRNE3: PUSHJ PP,PRNUM + 010146' 561440 015134' HRROI RC,[SIXBIT /@/] ;WILL GET A RETURN + 010147' 254000 010176' JRST ERRFIN + + 010150' 004562 625762 ERRMS1: SIXBIT / ERRORS DETECTED@/ + 010151' 630044 456445 + 010152' 436445 444000 + 010153' 372100 456262 ERRMS2: SIXBIT /?1 ERROR DETECTED@/ + 010154' 576200 444564 + 010155' 454364 454440 + 010156' 565700 456262 ERRMS3: SIXBIT /NO ERRORS DETECTED@/ + 010157' 576263 004445 + 010160' 644543 644544 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 142-1 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 010161' 400000 000000 + 010162' 200440 015210' EINIT: MOVE RC,[XWD ACDEV,[SIXBIT /NOT AVAILABLE@/]] + 010163' 254000 010176' JRST ERRFIN + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 143 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 010164' 550440 013334' ERRCL: HRRZ RC,LSTDIR+1 ;GET LST DEV ERROR CODE + 010165' 254000 010167' JRST .+2 ;GET ERROR MESSAGE + 010166' 550440 013340' ERRCB: HRRZ RC,BINDIR+1 ;GET BIN DEV ERROR CODE + 010167' 326440 010173' JUMPN RC,ERRTYP + 010170' 364440 010173' SOJA RC,ERRTYP ;SPECIAL CASE IF ERROR CODE 0 + + 010171' 550440 013344' ERRCF: HRRZ RC,INDIR+1 ;GET INPUT DEV ERROR CODE + 010172' 510140 013344' HLLZ ACEXT,INDIR+1 ;SET UP EXT + + 010173' 301440 000027 ERRTYP: CAIL RC,TABLND-TABLE ;IS ERROR CODE LEGAL? + 010174' 334440 010240' SKIPA RC,TABLND ;NO, GIVE CATCH ALL MESSAGE + 010175' 200451 010211' MOVE RC,TABLE(RC) ;YES, PICK UP MESSAGE + + 010176' 051540 000007 ERRFIN: SKPINC C ;SEE IN WE CAN INPUT A CHAR. + 010177' 255000 000000 JFCL ;BUT ONLY TO DEFEAT ^O + 010200' 260740 010247' PUSHJ PP,CRLF + 010201' 201340 000077 MOVEI C,"?" + 010202' 260740 010252' PUSHJ PP,TYO + 010203' 260740 010242' PUSHJ PP,TYPMS1 + 010204' 070140 000000 CLOSE LST, ;GIVE USER A PARTIAL LISTING + 010205' 070040 000040 CLOSE BIN,40 ;BUT NEVER A BUM REL FILE + 010206' 350000 003237* IFN CCLSW,<AOS JOBERR ;RECORD ERROR SO EXECUTION DELETED> + 010207' 254000 006632' JRST M + + 010210' 015211' 000002 [SIXBIT /(0) ILLEGAL FILE NAME@/],,ACFILE + 010211' 015215' 000002 TABLE: [SIXBIT /(0) FILE WAS NOT FOUND@/],,ACFILE + 010212' 015221' 000002 [SIXBIT /(1) NO DIRECTORY FOR PROJECT-PROGRAMMER NUMBER@/],,ACFILE + 010213' 015231' 000002 [SIXBIT /(2) PROTECTION FAILURE@/],,ACFILE + 010214' 015235' 000002 [SIXBIT /(3) FILE WAS BEING MODIFIED@/],,ACFILE + 010215' 015242' 000002 [SIXBIT /(4) RENAME FILE NAME ALREADY EXISTS@/],,ACFILE + 010216' 015250' 000002 [SIXBIT /(5) ILLEGAL SEQUENCE OF UUOS@/],,ACFILE + 010217' 015255' 000002 [SIXBIT /(6) BAD UFD OR BAD RIB@/],,ACFILE + 010220' 015261' 000002 [SIXBIT /(7) NOT A SAV FILE@/],,ACFILE + 010221' 015265' 000002 [SIXBIT /(10) NOT ENOUGH CORE@/],,ACFILE + 010222' 015271' 000002 [SIXBIT /(11) DEVICE NOT AVAILABLE@/],,ACFILE + 010223' 015276' 000002 [SIXBIT /(12) NO SUCH DEVICE@/],,ACFILE + 010224' 015302' 000002 [SIXBIT /(13) NOT TWO RELOC REG. CAPABILITY@/],,ACFILE + 010225' 015310' 000002 [SIXBIT /(14) NO ROOM OR QUOTA EXCEEDED@/],,ACFILE + 010226' 015316' 000002 [SIXBIT /(15) WRITE LOCK ERROR@/],,ACFILE + 010227' 015322' 000002 [SIXBIT /(16) NOT ENOUGH MONITOR TABLE SPACE@/],,ACFILE + 010230' 015330' 000002 [SIXBIT /(17) PARTIAL ALLOCATION ONLY@/],,ACFILE + 010231' 015335' 000002 [SIXBIT /(20) BLOCK NOT FREE ON ALLOCATION@/],,ACFILE + 010232' 015343' 000002 [SIXBIT /(21) CAN'T SUPERSEDE (ENTER) AN EXISTING DIRECTORY@/],,ACFILE + 010233' 015354' 000002 [SIXBIT /(22) CAN'T DELETE (RENAME) A NON-EMPTY DIRECTORY@/],,ACFILE + 010234' 015365' 000002 [SIXBIT /(23) SFD NOT FOUND@/],,ACFILE + 010235' 015371' 000002 [SIXBIT /(24) SEARCH LIST EMPTY@/],,ACFILE + 010236' 015375' 000002 [SIXBIT /(25) SFD NESTED TOO DEEPLY@/],,ACFILE + 010237' 015402' 000002 [SIXBIT /(26) NO-CREATE ON FOR SPECIFIED PATH@/],,ACFILE + + 010240' 015411' 000002 TABLND: [SIXBIT /(?) LOOKUP, ENTER, OR RENAME ERROR@/],,ACFILE + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 144 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 010241' 260740 010247' TYPMSG: PUSHJ PP,CRLF ;MOVE TO NEXT LINE + 010242' 554400 000011 TYPMS1: HLRZ CS,RC ;GET FIRST MESSAGE + 010243' 302400 777777 CAIE CS,-1 ;SKIP IF MINUS ONE + 010244' 260740 010262' PUSHJ PP,TYPM2 ;TYPE MESSAGE + 010245' 550400 000011 HRRZ CS,RC ;GET SECOND HALF + 010246' 260740 010262' PUSHJ PP,TYPM2 + + 010247' 201340 000015 CRLF: MOVEI C,CR ;OUTPUT CARRIAGE RETURN + 010250' 260740 010252' PUSHJ PP,TYO + 010251' 201340 000012 MOVEI C,LF ;AND LINE FEED + + 010252' 377000 014116' TYO: SOSG CTOBUF+2 ;BUFFER FULL? + 010253' 067000 000000 OUTPUT CTL,0 ;YES, DUMP IT + 010254' 136340 014115' IDPB C,CTOBUF+1 ;STORE BYTE + 010255' 307340 000014 CAIG C,FF ;FORM FEED? + 010256' 305340 000012 CAIGE C,LF ;V TAB OR LINE FEED? + 010257' 263740 000000 POPJ PP, ;NO + 010260' 067000 000000 OUTPUT CTL,0 ;YES + 010261' 263740 000000 POPJ PP, ;AND EXIT + + 010262' 205340 400000 TYPM2: MOVSI C,(1B0) ;ANTICIPATE REGISTER WORD + 010263' 306400 000002 CAIN CS,ACFILE ;FILE NAME ? + JRST [JUMPE ACEXT,.+1 ;YES, TEST FOR EXT + LSH ACEXT,-6 ;MAKE SPACE FOR "." + IOR ACEXT,[SIXBIT /. @/] + 010264' 254000 015420' JRST TYPM2A] + 010265' 307400 000017 CAIG CS,17 ;IS IT? + 010266' 202350 000001 MOVEM C,1(CS) + 010267' 505400 440600 TYPM2A: HRLI CS,(POINT 6,,) ;FORM BYTE POINTER + + 010270' 134340 000010 TYPM3: ILDB C,CS ;GET A SIXBIT BYTE + 010271' 306340 000040 CAIN C,40 ;"@"? + 010272' 254000 010252' JRST TYO ;YES, TYPE SPACE AND EXIT + 010273' 271340 000040 ADDI C,40 ;NO, FORM 7-BIT ASCII + 010274' 260740 010252' PUSHJ PP,TYO ;OUTPUT CHARACTER + 010275' 254000 010270' JRST TYPM3 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 145 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 010276' 271200 002000 XCEEDS: ADDI SX,2000 ;ADJUST SYMBOL POINTER + 010277' 260740 007473' XCEED: PUSHJ PP,SAVEXS ;SAVE THE REGISTERS + 010300' 550040 007200* HRRZ 1,JOBREL ;GET CURRENT TOP + 010301' 201001 002000 MOVEI 0,2000(1) + 010302' 047000 000011 CORE 0, ;REQUEST MORE CORE + 010303' 254000 010317' JRST XCEED2 ;ERROR, BOMB OUT + 010304' 550100 010300* HRRZ 2,JOBREL ;GET NEW TOP + + 010305' 200001 000000 XCEED1: MOVE 0,0(1) ;GET ORIGIONAL + 010306' 202002 000000 MOVEM 0,0(2) ;STORE IN NEW LOCATION + 010307' 275100 000001 SUBI 2,1 ;DECREMENT UPPER + 010310' 313040 013552' CAMLE 1,SYMBOL ;HAVE WE ARRIVED? + 010311' 364040 010305' SOJA 1,XCEED1 ;NO, GET ANOTHER + 010312' 201040 002000 MOVEI 1,2000 + 010313' 272040 013552' ADDM 1,SYMBOL + 010314' 272040 013553' ADDM 1,SYMTOP + 010315' 260740 013125' PUSHJ PP,SRCHI ;RE-INITIALIZE SYMBOL TABLE + 010316' 254000 007467' JRST RSTRXS ;RESTORE REGISTERS AND EXIT + + 010317' 561440 015424' XCEED2: HRROI RC,[SIXBIT /INSUFFICIENT CORE@/] + 010320' 254000 010116' JRST ERRNE0 + 010321' 561440 015427' PDPERR: HRROI RC,[SIXBIT .PDP OVERFLOW, TRY /P@.] + 010322' 254000 010116' JRST ERRNE0 + + 010323' 554400 000006 PRNUM: HLRZ CS,V ;GET MESSAGE + 010324' 260740 010262' PUSHJ PP,TYPM2 + 010325' 201400 015433' MOVEI CS,[SIXBIT /ON PAGE@/] + 010326' 260740 010262' PUSHJ PP,TYPM2 + 010327' 200006 000000 MOVE AC0,(V) ;GET PAGE + 010330' 260740 010345' PUSHJ PP,DP1 ;PRINT NUMBER + 010331' 201340 000040 MOVEI C,40 + 010332' 260740 010252' PUSHJ PP,TYO + 010333' 336046 000001 SKIPN AC1,1(V) ;GET SEQ NUM IF THERE + 010334' 263740 000000 POPJ PP, ;NO, RETURN + 010335' 202040 014011' MOVEM AC1,OUTSQ + 010336' 201400 015435' MOVEI CS,[SIXBIT /LINE@/] + 010337' 260740 010262' PUSHJ PP,TYPM2 + 010340' 201000 014011' MOVEI AC0,OUTSQ ;PRINT IT + 010341' 067000 000000 OUTPUT CTL,0 ;TO MAKE THINGS PRINT IN RIGHT ORDER + 010342' 047000 000003 DDTOUT AC0, + 010343' 201340 000040 MOVEI C,40 + 010344' 254000 010252' JRST TYO ;AND RETURN + + 010345' 231000 000012 DP1: IDIVI AC0,^D10 + 010346' 506057 000000 HRLM AC1,(PP) + 010347' 322000 010351' JUMPE AC0,.+2 + 010350' 260740 010345' PUSHJ PP,DP1 + 010351' 554357 000000 HLRZ C,(PP) + 010352' 271340 000060 ADDI C,"0" + 010353' 254000 010252' JRST TYO + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 146 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 010354' 670640 000000 RIM0: TDO FR,AC0 ;SET RIM/RIM10 FLAG + 010355' 603640 001000 TLNE FR,PNCHSW ;FORGET IT IF PUNCH RESET + 010356' 060040 000013 SETSTS BIN,IB ;SET TO IMAGE BINARY MODE + 010357' 263740 000000 POPJ PP, + + 010360' 250400 014050' ROUT: EXCH CS,RIMLOC + 010361' 274740 015436' SUB PP,[XWD 1,1] ;CLEAR OUT STACK WFW + 010362' 603640 004000 TLNE FR,R1BSW + 010363' 254000 010471' JRST ROUT6 + 010364' 607640 000100 TLNN FR,RIM1SW + 010365' 254000 010375' JRST ROUT1 + 010366' 322400 010375' JUMPE CS,ROUT1 ;RIM10 OUTPUT + 010367' 274400 014050' SUB CS,RIMLOC + 010370' 322400 010375' JUMPE CS,ROUT1 + 010371' 327400 003400' JUMPG CS,ERRAX + 010372' 201340 000000 MOVEI C,0 + 010373' 260740 010405' PUSHJ PP,PTPBIN + 010374' 341400 010373' AOJL CS,.-1 + 010375' 205340 710440 ROUT1: MOVSI C,(DATAI PTR,) ;RIM OUTPUT + 010376' 540340 014000' HRR C,LOCO ;GET ADDRESS + 010377' 603640 000100 TLNE FR,RIM1SW ;NO DATAI IF RIM10 + 010400' 354000 014050' AOSA RIMLOC + 010401' 260740 010405' PUSHJ PP,PTPBIN ;OUTPUT + 010402' 200340 000000 MOVE C,AC0 ;CODE + 010403' 354000 014000' AOSA LOCO ;INCREMENT CURRENT LOCATION + + 010404' 607640 004500 OUTBIN: TLNN FR,RIMSW!RIM1SW!R1BSW ;EXIT IF RIM MODE + 010405' 607640 001000 PTPBIN: TLNN FR,PNCHSW ;EXIT IF PUNCH NOT REQUESTED + 010406' 263740 000000 POPJ PP, + 010407' 377000 013327' SOSG BINBUF+2 ;TEST FOR BUFFER FULL + 010410' 260740 010413' PUSHJ PP,DMPBIN ;YES, DUMP IT + 010411' 136340 013326' IDPB C,BINBUF+1 ;DEPOSIT BYTE + 010412' 263740 000000 POPJ PP, ;EXIT + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 147 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 010413' 057040 000000 DMPBIN: OUT BIN,0 ;DUMP THE BUFFER + 010414' 263740 000000 POPJ PP, ;NO ERRORS + 010415' 062040 000007 TSTBIN: GETSTS BIN,C ;GET STSTUS BITS + 010416' 606340 740000 TRNN C,ERRBIT ;ERROR? + 010417' 263740 000000 POPJ PP, ;NO, EXIT + 010420' 200000 013220' MOVE AC0,BINDEV ;YES, GET TAG + 010421' 254000 010430' JRST ERRLST ;TYPE MESSAGE AND ABORT + + 010422' 057140 000000 DMPLST: OUT LST,0 ;OUTPUT BUFFER + 010423' 263740 000000 POPJ PP, ;NO ERRORS + 010424' 062140 000007 TSTLST: GETSTS LST,C ;ANY ERRORS? + 010425' 606340 740000 TRNN C,ERRBIT + 010426' 263740 000000 POPJ PP, ;NO, EXIT + 010427' 200000 013223' MOVE AC0,LSTDEV + 010430' 205440 015437' ERRLST: MOVSI RC,[SIXBIT /OUTPUT WRITE-LOCK ERROR DEVICE@/] + 010431' 602340 400000 TRNE C,IOIMPM ;IMPROPER MODE? + 010432' 254000 010176' JRST ERRFIN ;YES + 010433' 205440 015445' MOVSI RC,[SIXBIT /OUTPUT DATA ERROR DEVICE@/] + 010434' 602340 200000 TRNE C,IODERR ;DEVICE DATA ERROR? + 010435' 254000 010176' JRST ERRFIN ;YES + 010436' 205440 015452' MOVSI RC,[SIXBIT /OUTPUT CHECKSUM OR PARITY ERROR DEVICE@/] + 010437' 602340 100000 TRNE C,IODTER ;IS IT + 010440' 254000 010176' JRST ERRFIN ;YES + 010441' 200400 000000 MOVE CS,AC0 ;GET DEVICE + 010442' 047400 000004 DEVCHR CS, ;FIND OUT WHAT IT IS + 010443' 205440 015461' MOVSI RC,[SIXBIT /OUTPUT QUOTA EXCEEDED ON DEVICE@/] + 010444' 607400 200000 TLNN CS,DSKBIT ;SKIP IF DSK OUTPUT + 010445' 205440 015467' MOVSI RC,[SIXBIT /OUTPUT BLOCK TOO LARGE DEVICE@/] + 010446' 254000 010176' JRST ERRFIN + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 148 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + + 010447' 460400 014023' R1BDMP: SETCM CS,R1BCNT + 010450' 322400 010465' JUMPE CS,R1BI + 010451' 517340 000010 HRLZS C,CS + 010452' 540340 014047' HRR C,R1BLOC + 010453' 541347 777777 HRRI C,-1(C) + 010454' 202340 014024' MOVEM C,R1BCHK + 010455' 260740 010405' PUSHJ PP,PTPBIN + 010456' 541400 014025' HRRI CS,R1BBLK + 010457' 200350 000000 R1BDM1: MOVE C,0(CS) + 010460' 272340 014024' ADDM C,R1BCHK + 010461' 260740 010405' PUSHJ PP,PTPBIN + 010462' 253400 010457' AOBJN CS,R1BDM1 + 010463' 200340 014024' MOVE C,R1BCHK + 010464' 260740 010405' PUSHJ PP,PTPBIN + 010465' 476000 014023' R1BI: SETOM R1BCNT + 010466' 261740 014000' PUSH PP,LOCO + 010467' 262740 014047' POP PP,R1BLOC + 010470' 263740 000000 POPJ PP, + + 010471' 312400 014050' ROUT6: CAME CS,RIMLOC + 010472' 260740 010447' PUSHJ PP,R1BDMP + 010473' 350340 014023' AOS C,R1BCNT + 010474' 202007 014025' MOVEM AC0,R1BBLK(C) + 010475' 350000 014000' AOS LOCO + 010476' 306340 000021 CAIN C,.R1B-1 + 010477' 260740 010447' PUSHJ PP,R1BDMP + 010500' 350000 014050' AOS RIMLOC + 010501' 263740 000000 POPJ PP, + + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 149 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 010502' 260740 007460' READ0: PUSHJ PP,EOT ;END OF TAPE + + 010503' 375000 013332' READ: SOSGE IBUF+2 ;BUFFER EMPTY? + 010504' 254000 010545' JRST READ3 ;YES + 010505' 134340 013331' READ1: ILDB C,IBUF+1 ;PLACE CHARACTER IN C + 010506' 200420 013331' MOVE CS,@IBUF+1 ;CHECK FOR SEQUENCE NUMBER + 010507' 606400 000001 TRNN CS,1 + 010510' 254000 010525' JRST READ1A + 010511' 306400 000001 CAIN CS,1 ;CHECK FOR SPECIAL + 010512' 200400 015474' MOVE CS,[<ASCII/ />+1] + 010513' 202400 013214' MOVEM CS,SEQNO + 010514' 202400 014101' MOVEM CS,SEQNO2 + 010515' 211400 000004 MOVNI CS,4 + 010516' 272400 013332' ADDM CS,IBUF+2 ;ADJUST WORD COUNT + REPEAT 4,< IBP IBUF+1> ;SKIP SEQ NO + 010517' 133000 013331' + 010520' 133000 013331' + 010521' 133000 013331' + 010522' 133000 013331' + 010523' 260740 010503' PUSHJ PP,READ ;AND THE TAB + 010524' 254000 010503' JRST READ ;GET NEXT CHARACTER + + 010525' 322340 010503' READ1A: JUMPE C,READ ;IGNORE NULL + 010526' 306340 000032 CAIN C,32 ;IF IT'S A "^Z" + 010527' 201340 000012 MOVEI C,LF ;TREAT IT AS A "LF" + 010530' 302340 000037 CAIE C,37 ;CONTROL _ + 010531' 263740 000000 POPJ PP, + 010532' 201340 000136 MOVEI C,"^" ;MAKE CONTROL-SHIFT _ VISIBLE + 010533' 260740 001423' PUSHJ PP,RSW2 + 010534' 201340 000137 MOVEI C,"_" + 010535' 260740 001423' PUSHJ PP,RSW2 + 010536' 260740 010503' READ2: PUSHJ PP,READ ;YES, TEST FOR LINE FEED + 010537' 260740 001423' PUSHJ PP,RSW2 ;LIST IN ANY EVENT + 010540' 307340 000014 CAIG C,FF ;IS IT ONE OF + 010541' 305340 000012 CAIGE C,LF ;LF, VT, OR FF? + 010542' 254000 010536' JRST READ2 ;NO + 010543' 260740 001745' PUSHJ PP,OUTIM1 ;YES, DUMP THE LINE + 010544' 254000 010503' JRST READ ;RETURN NEXT CHARACTER + + 010545' 056100 000000 READ3: IN CHAR,0 ;GET NEXT BUFFER + 010546' 254000 010503' JRST READ ;NO ERRORS + 010547' 062100 000007 GETSTS CHAR,C + 010550' 606340 742000 TRNN C,ERRBIT!2000 ;ERRORS? + 010551' 254000 010502' JRST READ0 ;EOF + 010552' 200000 013234' MOVE AC0,INDEV + 010553' 205440 015475' MOVSI RC,[SIXBIT/ INPUT PHYSICAL END OF TAPE DEVICE@/] + 010554' 602340 002000 TRNE C,2000 + 010555' 254000 010176' JRST ERRFIN ;E-O-T + 010556' 205440 015503' MOVSI RC,[SIXBIT /MONITOR DETECTED SOFTWARE INPUT ERROR DEVICE@/] + 010557' 602340 400000 TRNE C,IOIMPM ;IMPROPER MODE? + 010560' 254000 010176' JRST ERRFIN ;YES + 010561' 205440 015513' MOVSI RC,[SIXBIT /INPUT DATA ERROR DEVICE@/] + 010562' 602340 200000 TRNE C,IODERR ;DEVICE DATA ERROR? + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 149-1 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 010563' 254000 010176' JRST ERRFIN ;YES + 010564' 205440 015517' MOVSI RC,[SIXBIT /INPUT CHECKSUM OR PARITY ERROR DEVICE@/] + 010565' 606340 100000 TRNN C,IODTER + 010566' 205440 015526' MOVSI RC,[SIXBIT /INPUT BLOCK TOO LARGE DEVICE@/] + 010567' 254000 010176' JRST ERRFIN + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 150 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 010570' 260740 010571' OUTAB2: PUSHJ PP,OUTTAB ;PRINT TWO TABS + 010571' 201340 000011 OUTTAB: MOVEI C,HT + 010572' 302340 000015 PRINT: CAIE C,CR ;IS THIS A CR? + 010573' 306340 000012 CAIN C,LF ;OR LF? + 010574' 254000 010600' JRST OUTCR ;YES, GO PROCESS + 010575' 306340 000014 CAIN C,FF ;FORM FEED? + 010576' 254000 010703' JRST OUTFF ;YES, FORCE NEW PAGE + 010577' 254000 010607' JRST OUTL + + 010600' 606600 777763 OUTCR: TRNN ER,ERRORS!LPTSW!TTYSW + 010601' 263740 000000 POPJ PP, + 010602' 201340 000015 MOVEI C,CR ;CARRIAGE RETURN, LINE FEED + 010603' 260740 010607' PUSHJ PP,OUTL + 010604' 375000 014003' SOSGE LPP ;END OF PAGE? + 010605' 661600 000100 TLO IO,IOPAGE ;YES, SET FLAG + 010606' 644340 000007 TRCA C,7 ;FORM LINE FEED AND SKIP + + 010607' 627600 000100 OUTL: TLZN IO,IOPAGE ;NEW PAGE REQUESTED? + 010610' 254000 010663' JRST OUTC ;NO + 010611' 321640 010663' JUMP1 OUTC ;YES, BYPASS IF PASS ONE + 010612' 261740 000007 PUSH PP,C ;SAVE C AND CS + 010613' 261740 000010 PUSH PP,CS + 010614' 261740 000014 PUSH PP,ER + 010615' 607600 240000 TLNN IO,IOMSTR!IOPROG + 010616' 540600 013512' HRR ER,OUTSW + 010617' 603600 000400 TLNE IO,IOCREF ;IF DOING CREF OUTPUT NOW + 010620' 603640 002000 TLNE FR,CREFSW ;AND CREFFING (JUST IN CASE) + 010621' 254000 010623' JRST .+2 + 010622' 260740 012674' PUSHJ PP,CLSC3 ;CLOSE IT OUT + 010623' 502617 000000 HLLM IO,(PP) ;SAVE THIS NEW STATE OF IO + 010624' 201340 000067 MOVEI C,.LPP + 010625' 202340 014003' MOVEM C,LPP ;SET NEW COUNTER + 010626' 201340 000015 MOVEI C,CR + 010627' 260740 010663' PUSHJ PP,OUTC + 010630' 201340 000014 MOVEI C,FF + 010631' 260740 010663' PUSHJ PP,OUTC ;OUTPUT FORM FEED + 010632' 201400 013701' MOVEI CS,TBUF + 010633' 260740 003060' PUSHJ PP,OUTAS0 ;OUTPUT TITLE + 010634' 201400 013243' MOVEI CS,VBUF + 010635' 260740 003060' PUSHJ PP,OUTAS0 ;OUTPUT VERSION + 010636' 201400 013236' MOVEI CS,DBUF + 010637' 260740 003060' PUSHJ PP,OUTAS0 ; AND DATE + 010640' 200340 014100' MOVE C,PAGENO + 010641' 260740 003051' PUSHJ PP,DNC ;OUTPUT PAGE NUMBER + 010642' 357000 014013' AOSG PAGEN. ;FIRST PAGE OF THIS NUMBER? + 010643' 254000 010650' JRST OUTL1 ;YES + 010644' 201340 000055 MOVEI C,"-" ;NO, PUT OUT MODIFIER + 010645' 260740 010663' PUSHJ PP,OUTC + 010646' 200340 014013' MOVE C,PAGEN. + 010647' 260740 003051' PUSHJ PP,DNC + 010650' 260740 010600' OUTL1: PUSHJ PP,OUTCR + 010651' 201400 013721' MOVEI CS,DEVBUF + 010652' 260740 003060' PUSHJ PP,OUTAS0 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 150-1 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 010653' 550400 013550' HRRZ CS,SUBTTX ;SWITCH FOR SUB-TITLE + 010654' 332010 000000 SKIPE 0(CS) ;IS THERE A SUB-TITLE? + 010655' 260740 010571' PUSHJ PP,OUTTAB ;YES, OUTPUT A TAB + 010656' 260740 002503' PUSHJ PP,SOUT20 ;OUTPUT ASCII WITH CARRIAGE RETURN + 010657' 260740 010600' PUSHJ PP,OUTCR + 010660' 262740 000014 POP PP,ER + 010661' 262740 000010 POP PP,CS ;RESTORE REGISTERS + 010662' 262740 000007 POP PP,C + + 010663' 602600 777761 OUTC: TRNE ER,ERRORS!TTYSW + 010664' 260740 010252' PUSHJ PP,TYO + 010665' 606600 000002 TRNN ER,LPTSW + 010666' 263740 000000 POPJ PP, + 010667' 377000 013324' OUTLST: SOSG LSTBUF+2 ;BUFFER FULL? + 010670' 260740 010422' PUSHJ PP,DMPLST ;YES, DUMP IT + COMMENT $ REG DOESN'T LIKE THIS FEATURE ANY MORE 9-5-72 + $ + 010671' 136340 013323' IDPB C,LSTBUF+1 ;STORE BYTE + 010672' 263740 000000 POPJ PP, ;EXIT + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 151 +MACRO 10 24-APR-78 02:11 I/O ROUTINES + + 010673' 260740 000236' PAGE0: PUSHJ PP,STOUTS ;PAGE PSEUDO-OP + 010674' 603600 000400 OUTFF1: TLNE IO,IOCREF ;CURRENTLY DOING CREF? + 010675' 603600 040000 TLNE IO,IOPROG ;AND NOT XLISTED? + 010676' 254000 010703' JRST OUTFF ;NO + 010677' 540600 013512' HRR ER,OUTSW + 010700' 260740 012674' PUSHJ PP,CLSCRF + 010701' 260740 010600' PUSHJ PP,OUTCR + 010702' 541600 000000 HRRI ER,0 + 010703' 661600 000100 OUTFF: TLO IO,IOPAGE + 010704' 476000 014013' OUTFF2: SETOM PAGEN. + 010705' 350000 014100' AOS PAGENO + 010706' 263740 000000 POPJ PP, + + 010707' 231100 165140 TIMOUT: IDIVI 2,^D60*^D1000 + 010710' 231100 000074 TIMOU1: IDIVI 2,^D60 + 010711' 261740 000003 PUSH PP,3 ;SAVE MINUTES + 010712' 260740 010716' PUSHJ PP,OTOD ;STORE HOURS + 010713' 201140 000072 MOVEI 3,":" ;SEPARATE BY COLON + 010714' 136140 000010 IDPB 3,CS + 010715' 262740 000002 POP PP,2 ;STORE MINUTES + 010716' 231100 000012 OTOD: IDIVI 2,^D10 + 010717' 271100 000060 ADDI 2,60 ;FORM ASCII + 010720' 136100 000010 IDPB 2,CS + 010721' 271140 000060 ADDI 3,60 + 010722' 136140 000010 IDPB 3,CS + 010723' 263740 000000 POPJ PP, + + 010724' 231040 000037 DATOUT: IDIVI 1,^D31 ;GET DAY + 010725' 271100 000001 ADDI 2,1 + 010726' 307100 000011 CAIG 2,^D9 ;TWO DIGITS? + 010727' 271100 117540 ADDI 2,7760*^D10 ;NO, PUT IN SPACE + 010730' 260740 010716' PUSHJ PP,OTOD ;STORE DAY + 010731' 231040 000014 IDIVI 1,^D12 ;GET MONTH + 010732' 200102 010740' MOVE 2,DTAB(2) ;GET MNEMONIC + 010733' 136100 000010 IDPB 2,CS ;DEPOSIT RIGHT MOST 7 BITS + 010734' 242100 777771 LSH 2,-7 ;SHIFT NEXT IN + 010735' 326100 010733' JUMPN 2,.-2 ;DEPOSIT IFIT EXISTS + 010736' 201101 000100 MOVEI 2,^D64(1) ;GET YEAR + 010737' 254000 010716' JRST OTOD ;STORE IT + + 010740' 133164 062455 DTAB: "-NAJ-" + 010741' 133024 261455 "-BEF-" + 010742' 133224 063255 "-RAM-" + 010743' 133225 020255 "-RPA-" + 010744' 133314 063255 "-YAM-" + 010745' 133165 262455 "-NUJ-" + 010746' 133145 262455 "-LUJ-" + 010747' 133075 260255 "-GUA-" + 010750' 133204 264655 "-PES-" + 010751' 133244 163655 "-TCO-" + 010752' 133264 763455 "-VON-" + 010753' 133034 261055 "-CED-" + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 152 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + SUBTTL MACHINE INSTRUCTION SEARCH ROUTINES + IFE OPHSH,< + 010754' 201440 000000 OPTSCH: MOVEI RC,0 + 010755' 201240 000400 MOVEI ARG,1B^L<OP1END-OP1TOP> ;SET UP INDEX + 010756' 201300 000200 MOVEI V,1B^L<OP1END-OP1TOP>/2 ;SET UP INCREMENT + + 010757' 316005 011012' OPT1A: CAMN AC0,OP1TOP(ARG) ;ARE WE POINTING AT SYMBOL? + 010760' 254000 010771' JRST OPT1D ;YES, GET THE CODE + 010761' 322300 000455' JUMPE V,POPOUT ;TEST FOR END + 010762' 311005 011012' CAML AC0,OP1TOP(ARG) ;NO, SHOULD WE MOVE DOWN? + 010763' 674240 000006 TDOA ARG,V ;NO, INCREMENT + 010764' 274240 000006 OPT1B: SUB ARG,V ;YES, DECREMENT + 010765' 240300 777777 ASH V,-1 ;HALVE INCREMENT + 010766' 307240 000770 CAIG ARG,OP1END-OP1TOP ;ARE WE OUT OF BOUNDS? + 010767' 254000 010757' JRST OPT1A ;NO, TRY AGAIN + 010770' 254000 010764' JRST OPT1B ;YES, BRING IT DOWN A PEG + > + + IFN OPHSH,< + OPTSCH: MOVE ARG,AC0 ;GET SIXBIT NAME + TLZ ARG,400000 ;CLEAR SIGN BIT + IDIVI ARG,PRIME ;REM. GOES IN V + CAMN AC0,OP1TOP(V) ;ARE WE POINTING AT SYMBOL? + JRST OPT1D ;YES + SKIPN OP1TOP(V) ;TEST FOR END + POPJ PP, ;SYMBOL NOT FOUND + HLRZ RC,ARG ;SAVE LHS OF QUOTIENT + SKIPA ARG,RC ;GET IT BACK + OPT1A: ADDI ARG,(RC) ;INCREMENT ARG + ADDI V,(ARG) ;QUADRATIC INCREASE TO V + CAIL V,PRIME ;V IS MODULO PRIME + JRST [SUBI V,PRIME + JRST .-1] + CAMN AC0,OP1TOP(V) ;IS THIS IT? + JRST OPT1D ;YES + SKIPE OP1TOP(V) ;END? + JRST OPT1A ;TRY AGAIN + POPJ PP, ;FAILED + > + 010771' OPT1D: + IFN OPHSH,< SETZ RC, ;CLEAR RELOCATION + MOVE ARG,V ;GET INDEX IN RIGHT ACC.> + 010771' 231240 000004 IDIVI ARG,4 ;ARG HAS INDEX USED IN OPTTAB + 010772' 135306 011007' LDB V,OPTTAB(V) ;V HAS INDEX TO OPTTAB + 010773' 301300 000700 CAIL V,700 ;PSEUDO-OP OR IO INSTRUCTION? + 010774' 254000 011002' JRST OPT1G ;YES + 010775' 241300 777767 ROT V,-^D9 ;LEFT JUSTIFY + 010776' 541300 004445' HRRI V,OP ;POINT TO BASIC FORMAT + 010777' 350017 000000 OPT1F: AOS 0(PP) ;SET FOR SKIP EXIT + 011000' 201140 000003 MOVEI SDEL,%OP ;SET OP-CODE CROSS-REF FLAG + 011001' 254000 012621' JRST CREF ;TEST AND OUTPUT, AC0=SYMBOL, V=VALUE + + 011002' 327000 011005' OPT1G: JUMPG AC0,.+3 ;IF ".","$",OR "%" USE TABLE 1 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 152-1 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 011003' 607000 200000 TLNN AC0,200000 ;PSEUDO-OP OR IO INST., TEST FOR PROPER TABLE + 011004' 334306 011452' SKIPA V,OP2TAB-700(V) ;2ND TABLE, FIRST LETTER IS "A" TO "O" + 011005' 200306 011406' MOVE V,OP1TAB-700(V) ;1ST TABLE, ..."P" TO "Z" + 011006' 254000 010777' JRST OPT1F ;EXIT + + 011007' OPTTAB: + 011007' 001105 012002' IFE OPHSH,< POINT 9,OP1COD-1(ARG),35> + 011010' 331105 012003' POINT 9,OP1COD (ARG), 8 + 011011' 221105 012003' POINT 9,OP1COD (ARG),17 + 011012' 111105 012003' POINT 9,OP1COD (ARG),26 + IFN OPHSH,< POINT 9,OP1COD (ARG),35> + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 153 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + IFDEF .XCREF,< .XCREF ;DON'T CREF THIS MESS> + IFE OPHSH,< + 011012' RELOC .-1 + 011012' OP1TOP: + 011013' RELOC + + IF1,<N1=0 + DEFINE X <N1=N1+1 ;>> + + IF2, < + 000044 N2=^D36 + 000000 CC=0 + 012003' RELOC OP1COD + 011013' RELOC + DEFINE X (SYMBOL,CODE) + <SIXBIT /SYMBOL/ + CC=CC+CODE_<N2=N2-9> + IFE N2, <OUTLIT>> + + DEFINE OUTLIT < + RELOC + +CC + RELOC + N2=^D36+<CC=0>>> + SYN X,XX ;JUST THE SAME MACRO> + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 154 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + + IFN OPHSH,< + DEFINE XX (SB,CD)<> ;A NUL MACRO + OP1TOP: IF1,< BLOCK PRIME> + IF1,<DEFINE X (SB,CD)<>> + IF2,< + DEFINE OPSTOR (RM)<.$'RM=.$'RM+<OPCODE_<9*<3-R&3>>>> + + DEFINE X (SB,CD)< + SXB=<SIXBIT /SB/> + Q=SXB&-1_-1/PRIME + R=SXB&-1_-1-Q*PRIME + H=Q_-22&777 + TRY=1 + OPCODE=CD + ITEM Q,\R + IFL PRIME-TRY,<PRINTX HASH FAILURE>> + + DEFINE ITEM (QT,RM)< + IFN .%'RM,<R=R+H + IFL PRIME-R,<R=R-R/PRIME*PRIME> + H=H+Q_-22&777 + IFGE PRIME-<TRY=TRY+1>,<ITEM Q,\R>> + IFE .%'RM,<.%'RM=SXB + OPSTOR \<R/4>>>> + IF1,< + DEFINE GETSYM (N)<.%'N=0> + + N=0 + XLIST + REPEAT PRIME,<GETSYM \N + N=N+1> + DEFINE GETSYM (N)<.$'N=0> + N=0 + REPEAT <PRIME/4+1>,<GETSYM \N + N=N+1> + > + LIST> + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 155 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + IFN OPHSH,< ;PUT THE MOST USED OP CODES FIRST + X JRST , 254 + X PUSHJ , 260 + X POPJ , 263 + X PUSH , 261 + X POP , 262 + X AOS , 350 + X ASCIZ , 701 + X CALLI , 047 + X EXTERN, 724 + X INTERN, 744 + X JFCL , 255 + X JSP , 265 + X MOVE , 200 + X MOVEI , 201 + X MOVEM , 202 + X SETZM , 402 + X SIXBIT, 717 + X SOS , 370 + X TLNE , 603 + X TLNN , 607 + X TLO , 661 + X TLZ , 621 + X TLZA , 625 + X TLZE , 623 + X TLZN , 627 + X TRNE , 602 + X TRNN , 606 + X TRZ , 620 + > + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 156 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 011013' 414444 000000 X ADD , 270 + 011014' 414444 420000 X ADDB , 273 + 011015' 414444 510000 X ADDI , 271 + 011016' 414444 550000 X ADDM , 272 + 012003' 270273 271272 + + 011017' 415644 000000 X AND , 404 + 011020' 415644 420000 X ANDB , 407 + 011021' 415644 434100 X ANDCA , 410 + 011022' 415644 434142 X ANDCAB, 413 + 012004' 404407 410413 + 011023' 415644 434151 X ANDCAI, 411 + 011024' 415644 434155 X ANDCAM, 412 + 011025' 415644 434200 X ANDCB , 440 + 011026' 415644 434242 X ANDCBB, 443 + 012005' 411412 440443 + 011027' 415644 434251 X ANDCBI, 441 + 011030' 415644 434255 X ANDCBM, 442 + 011031' 415644 435500 X ANDCM , 420 + 011032' 415644 435542 X ANDCMB, 423 + 012006' 441442 420423 + 011033' 415644 435551 X ANDCMI, 421 + 011034' 415644 435555 X ANDCMM, 422 + 011035' 415644 510000 X ANDI , 405 + 011036' 415644 550000 X ANDM , 406 + 012007' 421422 405406 + + 011037' 415742 525600 X AOBJN , 253 + 011040' 415742 526000 X AOBJP , 252 + + 011041' 415752 000000 X AOJ , 340 + 011042' 415752 410000 X AOJA , 344 + 012010' 253252 340344 + 011043' 415752 450000 X AOJE , 342 + 011044' 415752 470000 X AOJG , 347 + 011045' 415752 474500 X AOJGE , 345 + 011046' 415752 540000 X AOJL , 341 + 012011' 342347 345341 + 011047' 415752 544500 X AOJLE , 343 + 011050' 415752 560000 X AOJN , 346 + + 011051' 415763 000000 XX AOS , 350 + 011052' 415763 410000 X AOSA , 354 + 012012' 343346 350354 + 011053' 415763 450000 X AOSE , 352 + 011054' 415763 470000 X AOSG , 357 + 011055' 415763 474500 X AOSGE , 355 + 011056' 415763 540000 X AOSL , 351 + 012013' 352357 355351 + 011057' 415763 544500 X AOSLE , 353 + 011060' 415763 560000 X AOSN , 356 + 011061' 416247 000000 X ARG , 320 + IFN WFWSW,<X ARRAY , 772> + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 156-1 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + IFN IIISW,<X ASCID , 771> + 011062' 416343 515100 X ASCII , 700 + 012014' 353356 320700 + 011063' 416343 517200 XX ASCIZ , 701 + + 011064' 416350 000000 X ASH , 240 + 011065' 416350 430000 X ASHC , 244 + + 011066' 416365 606062 X ASUPPR, 705 + 012015' 701240 244705 + 011067' 425453 510000 X BLKI , 702 + 011070' 425453 570000 X BLKO , 703 + 011071' 425457 435300 X BLOCK , 704 + + 011072' 425464 000000 X BLT , 251 + 012016' 702703 704251 + + 011073' 427164 450000 X BYTE , 707 + + 011074' 434151 000000 XX CAI , 300 + 011075' 434151 410000 X CAIA , 304 + 011076' 434151 450000 X CAIE , 302 + 012017' 707300 304302 + 011077' 434151 470000 X CAIG , 307 + 011100' 434151 474500 X CAIGE , 305 + 011101' 434151 540000 X CAIL , 301 + 011102' 434151 544500 X CAILE , 303 + 012020' 307305 301303 + 011103' 434151 560000 X CAIN , 306 + + 011104' 434154 540000 X CALL , 040 + 011105' 434154 545100 XX CALLI , 047 + + 011106' 434155 000000 XX CAM , 310 + 012021' 306040 047310 + 011107' 434155 410000 X CAMA , 314 + 011110' 434155 450000 X CAME , 312 + 011111' 434155 470000 X CAMG , 317 + 011112' 434155 474500 X CAMGE , 315 + 012022' 314312 317315 + 011113' 434155 540000 X CAML , 311 + 011114' 434155 544500 X CAMLE , 313 + 011115' 434155 560000 X CAMN , 316 + + 011116' 435445 416200 XX CLEAR , 400 + 012023' 311313 316400 + 011117' 435445 416242 XX CLEARB, 403 + 011120' 435445 416251 XX CLEARI, 401 + 011121' 435445 416255 XX CLEARM, 402 + + 011122' 435457 634500 X CLOSE , 070 + 012024' 403401 402070 + 011123' 435755 554556 X COMMEN, 770 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 156-2 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + + + 011124' 435756 510000 X CONI , 710 + 011125' 435756 570000 X CONO , 711 + 011126' 435756 635700 X CONSO , 712 + 012025' 770710 711712 + 011127' 435756 637200 X CONSZ , 713 + + 011130' 444164 411600 XX DATA. , 020 + + 011131' 444164 415100 X DATAI , 714 + 011132' 444164 415700 X DATAO , 715 + 012026' 713020 714715 + 011133' 444543 000000 X DEC , 716 + 011134' 444546 515645 X DEFINE, 717 + 011135' 444560 504163 X DEPHAS, 720 + + 011136' 444656 000000 X DFN , 131 + 012027' 716717 720131 + + 011137' 445166 000000 X DIV , 234 + 011140' 445166 420000 X DIVB , 237 + 011141' 445166 510000 X DIVI , 235 + 011142' 445166 550000 X DIVM , 236 + 012030' 234237 235236 + + + 011143' 446042 000000 X DPB , 137 + 011144' 446042 510000 X DPBI , 136 + + 011145' 455644 000000 X END , 721 + + 011146' 455664 456200 X ENTER , 077 + 012031' 137136 721077 + + 011147' 455664 627100 X ENTRY , 722 + + 011150' 456166 000000 X EQV , 444 + 011151' 456166 420000 X EQVB , 447 + 011152' 456166 510000 X EQVI , 445 + 012032' 722444 447445 + 011153' 456166 550000 X EQVM , 446 + + 011154' 457043 500000 X EXCH , 250 + + 011155' 457060 000000 X EXP , 723 + 011156' 457064 456256 XX EXTERN, 724 + 012033' 446250 723724 + + 011157' 464144 000000 X FAD , 140 + 011160' 464144 420000 X FADB , 143 + 011161' 464144 540000 X FADL , 141 + 011162' 464144 550000 X FADM , 142 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 156-3 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 012034' 140143 141142 + + 011163' 464144 620000 X FADR , 144 + 011164' 464144 624200 X FADRB , 147 + 011165' 464144 625100 X FADRI , 145 + 011166' 464144 625500 X FADRM , 146 + 012035' 144147 145146 + + 011167' 464466 000000 X FDV , 170 + 011170' 464466 420000 X FDVB , 173 + 011171' 464466 540000 X FDVL , 171 + 011172' 464466 550000 X FDVM , 172 + 012036' 170173 171172 + + 011173' 464466 620000 X FDVR , 174 + 011174' 464466 624200 X FDVRB , 177 + 011175' 464466 625100 X FDVRI , 175 + 011176' 464466 625500 X FDVRM , 176 + 012037' 174177 175176 + + 011177' 465156 160000 XX FIN. , 021 + + + 011200' 465560 000000 X FMP , 160 + 011201' 465560 420000 X FMPB , 163 + 011202' 465560 540000 X FMPL , 161 + 012040' 021160 163161 + 011203' 465560 550000 X FMPM , 162 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 157 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 011204' 465560 620000 X FMPR , 164 + 011205' 465560 624200 X FMPRB , 167 + 011206' 465560 625100 X FMPRI , 165 + 012041' 162164 167165 + 011207' 465560 625500 X FMPRM , 166 + + 011210' 466342 000000 X FSB , 150 + 011211' 466342 420000 X FSBB , 153 + 011212' 466342 540000 X FSBL , 151 + 012042' 166150 153151 + 011213' 466342 550000 X FSBM , 152 + + 011214' 466342 620000 X FSBR , 154 + 011215' 466342 624200 X FSBRB , 157 + 011216' 466342 625100 X FSBRI , 155 + 012043' 152154 157155 + 011217' 466342 625500 X FSBRM , 156 + + 011220' 466343 000000 X FSC , 132 + + 011221' 474564 636463 X GETSTS, 062 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 158 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 011222' 504154 640000 X HALT , 725 + 012044' 156132 062725 + 011223' 505163 454700 X HISEG , 706 + + 011224' 505454 000000 X HLL , 500 + 011225' 505454 450000 X HLLE , 530 + 011226' 505454 455100 X HLLEI , 531 + 012045' 706500 530531 + 011227' 505454 455500 X HLLEM , 532 + 011230' 505454 456300 X HLLES , 533 + 011231' 505454 510000 X HLLI , 501 + 011232' 505454 550000 X HLLM , 502 + 012046' 532533 501502 + 011233' 505454 570000 X HLLO , 520 + 011234' 505454 575100 X HLLOI , 521 + 011235' 505454 575500 X HLLOM , 522 + 011236' 505454 576300 X HLLOS , 523 + 012047' 520521 522523 + 011237' 505454 630000 X HLLS , 503 + 011240' 505454 720000 X HLLZ , 510 + 011241' 505454 725100 X HLLZI , 511 + 011242' 505454 725500 X HLLZM , 512 + 012050' 503510 511512 + 011243' 505454 726300 X HLLZS , 513 + + 011244' 505462 000000 X HLR , 544 + 011245' 505462 450000 X HLRE , 574 + 011246' 505462 455100 X HLREI , 575 + 012051' 513544 574575 + 011247' 505462 455500 X HLREM , 576 + 011250' 505462 456300 X HLRES , 577 + 011251' 505462 510000 X HLRI , 545 + 011252' 505462 550000 X HLRM , 546 + 012052' 576577 545546 + 011253' 505462 570000 X HLRO , 564 + 011254' 505462 575100 X HLROI , 565 + 011255' 505462 575500 X HLROM , 566 + 011256' 505462 576300 X HLROS , 567 + 012053' 564565 566567 + 011257' 505462 630000 X HLRS , 547 + 011260' 505462 720000 X HLRZ , 554 + 011261' 505462 725100 X HLRZI , 555 + 011262' 505462 725500 X HLRZM , 556 + 012054' 547554 555556 + 011263' 505462 726300 X HLRZS , 557 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 159 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 011264' 506254 000000 X HRL , 504 + 011265' 506254 450000 X HRLE , 534 + 011266' 506254 455100 X HRLEI , 535 + 012055' 557504 534535 + 011267' 506254 455500 X HRLEM , 536 + 011270' 506254 456300 X HRLES , 537 + 011271' 506254 510000 X HRLI , 505 + 011272' 506254 550000 X HRLM , 506 + 012056' 536537 505506 + 011273' 506254 570000 X HRLO , 524 + 011274' 506254 575100 X HRLOI , 525 + 011275' 506254 575500 X HRLOM , 526 + 011276' 506254 576300 X HRLOS , 527 + 012057' 524525 526527 + 011277' 506254 630000 X HRLS , 507 + 011300' 506254 720000 X HRLZ , 514 + 011301' 506254 725100 X HRLZI , 515 + 011302' 506254 725500 X HRLZM , 516 + 012060' 507514 515516 + 011303' 506254 726300 X HRLZS , 517 + + 011304' 506262 000000 X HRR , 540 + 011305' 506262 450000 X HRRE , 570 + 011306' 506262 455100 X HRREI , 571 + 012061' 517540 570571 + 011307' 506262 455500 X HRREM , 572 + 011310' 506262 456300 X HRRES , 573 + 011311' 506262 510000 X HRRI , 541 + 011312' 506262 550000 X HRRM , 542 + 012062' 572573 541542 + 011313' 506262 570000 X HRRO , 560 + 011314' 506262 575100 X HRROI , 561 + 011315' 506262 575500 X HRROM , 562 + 011316' 506262 576300 X HRROS , 563 + 012063' 560561 562563 + 011317' 506262 630000 X HRRS , 543 + 011320' 506262 720000 X HRRZ , 550 + 011321' 506262 725100 X HRRZI , 551 + 011322' 506262 725500 X HRRZM , 552 + 012064' 543550 551552 + 011323' 506262 726300 X HRRZS , 553 + + 011324' 514260 000000 X IBP , 133 + + 011325' 514451 660000 X IDIV , 230 + 011326' 514451 664200 X IDIVB , 233 + 012065' 553133 230233 + 011327' 514451 665100 X IDIVI , 231 + 011330' 514451 665500 X IDIVM , 232 + + 011331' 514460 420000 X IDPB , 136 + + 011332' 514621 000000 X IF1 , 726 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 159-1 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 012066' 231232 136726 + 011333' 514622 000000 X IF2 , 727 + 011334' 514642 000000 X IFB , 730 + 011335' 514644 454600 X IFDEF , 731 + 011336' 514644 514600 X IFDIF , 732 + 012067' 727730 731732 + 011337' 514645 000000 X IFE , 733 + 011340' 514647 000000 X IFG , 734 + 011341' 514647 450000 X IFGE , 735 + 011342' 514651 445600 X IFIDN , 736 + 012070' 733734 735736 + 011343' 514654 000000 X IFL , 737 + 011344' 514654 450000 X IFLE , 740 + 011345' 514656 000000 X IFN , 741 + 011346' 514656 420000 X IFNB , 742 + 012071' 737740 741742 + 011347' 514656 444546 X IFNDEF, 743 + + 011350' 515444 420000 X ILDB , 134 + + 011351' 515565 540000 X IMUL , 220 + 011352' 515565 544200 X IMULB , 223 + 012072' 743134 220223 + 011353' 515565 545100 X IMULI , 221 + 011354' 515565 545500 X IMULM , 222 + + 011355' 515600 000000 X IN , 056 + 011356' 515616 000000 XX IN. , 016 + 012073' 221222 056016 + 011357' 515642 654600 X INBUF , 064 + 011360' 515646 160000 XX INF. , 026 + 011361' 515651 640000 X INIT , 041 + 011362' 515660 656400 X INPUT , 066 + 012074' 064026 041066 + IFN WFWSW,<X INTEGE, 773> + + 011363' 515664 456256 XX INTERN, 744 + + 011364' 515762 000000 X IOR , 434 + 011365' 515762 420000 X IORB , 437 + 011366' 515762 510000 X IORI , 435 + 012075' 744434 437435 + 011367' 515762 550000 X IORM , 436 + + + 011370' 515767 440000 X IOWD , 745 + 011371' 516260 000000 X IRP , 746 + 011372' 516260 430000 X IRPC , 747 + 012076' 436745 746747 + 011373' 524362 710000 X JCRY , 750 + 011374' 524362 712000 X JCRY0 , 751 + 011375' 524362 712100 X JCRY1 , 752 + 011376' 524556 000000 X JEN , 753 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 159-2 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 012077' 750751 752753 + + 011377' 524643 540000 XX JFCL , 255 + + 011400' 524646 570000 X JFFO , 243 + 011401' 524657 660000 X JFOV , 765 + 011402' 525766 000000 X JOV , 754 + 012100' 255243 765754 + + 011403' 526241 000000 X JRA , 267 + 011404' 526263 640000 XX JRST , 254 + + 011405' 526263 644600 X JRSTF , 755 + + 011406' 526341 000000 X JSA , 266 + 012101' 267254 755266 + 011407' 526360 000000 XX JSP , 265 + 011410' 526362 000000 X JSR , 264 + + 011411' 526555 600000 XX JUMP , 320 + 011412' 526555 604100 XX JUMPA , 324 + 012102' 265264 320324 + 011413' 526555 604500 X JUMPE , 322 + 011414' 526555 604700 X JUMPG , 327 + 011415' 526555 604745 X JUMPGE, 325 + 011416' 526555 605400 X JUMPL , 321 + 012103' 322327 325321 + 011417' 526555 605445 X JUMPLE, 323 + 011420' 526555 605600 X JUMPN , 326 + + 011421' 544154 540000 X LALL , 756 + + 011422' 544442 000000 X LDB , 135 + 012104' 323326 756135 + 011423' 544442 510000 X LDBI , 134 + + + 011424' 545163 640000 X LIST , 757 + 011425' 545164 000000 X LIT , 760 + 011426' 545743 000000 X LOC , 761 + 012105' 134757 760761 + + 011427' 545757 536560 X LOOKUP, 076 + + 011430' 546350 000000 X LSH , 242 + 011431' 546350 430000 X LSHC , 246 + IFN WFWSW,<X LVAR , 774> + 011432' 555457 464600 X MLOFF , 767 + 012106' 076242 246767 + 011433' 555457 560000 X MLON , 766 + 011434' 555766 450000 XX MOVE , 200 + 011435' 555766 455100 XX MOVEI , 201 + 011436' 555766 455500 XX MOVEM , 202 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 159-3 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 012107' 766200 201202 + 011437' 555766 456300 X MOVES , 203 + 011440' 555766 550000 X MOVM , 214 + 011441' 555766 555100 X MOVMI , 215 + 011442' 555766 555500 X MOVMM , 216 + 012110' 203214 215216 + 011443' 555766 556300 X MOVMS , 217 + 011444' 555766 560000 X MOVN , 210 + 011445' 555766 565100 X MOVNI , 211 + 011446' 555766 565500 X MOVNM , 212 + 012111' 217210 211212 + 011447' 555766 566300 X MOVNS , 213 + 011450' 555766 630000 X MOVS , 204 + 011451' 555766 635100 X MOVSI , 205 + 011452' 555766 635500 X MOVSM , 206 + 012112' 213204 205206 + 011453' 555766 636300 X MOVSS , 207 + + + 011454' 556441 604500 X MTAPE , 072 + 011455' 556457 601600 XX MTOP. , 024 + + 011456' 556554 000000 X MUL , 224 + 012113' 207072 024224 + 011457' 556554 420000 X MULB , 227 + 011460' 556554 510000 X MULI , 225 + 011461' 556554 550000 X MULM , 226 + 011462' 565451 160000 XX NLI. , 031 + 012114' 227225 226031 + 011463' 565457 160000 XX NLO. , 032 + + 011464' 565763 715500 X NOSYM , 762 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 160 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 011465' 574364 000000 X OCT , 763 + 011466' 576044 454600 X OPDEF , 764 + 012115' 032762 763764 + + 011467' 576045 560000 X OPEN , 050 + + 011470' 576200 000000 X OR , 434 + 011471' 576242 000000 X ORB , 437 + 011472' 576243 410000 X ORCA , 454 + 012116' 050434 437454 + 011473' 576243 414200 X ORCAB , 457 + 011474' 576243 415100 X ORCAI , 455 + 011475' 576243 415500 X ORCAM , 456 + 011476' 576243 420000 X ORCB , 470 + 012117' 457455 456470 + 011477' 576243 424200 X ORCBB , 473 + + 011500' 576243 425100 X ORCBI , 471 + 011501' 576243 425500 X ORCBM , 472 + 011502' 576243 550000 X ORCM , 464 + 012120' 473471 472464 + 011503' 576243 554200 X ORCMB , 467 + 011504' 576243 555100 X ORCMI , 465 + 011505' 576243 555500 X ORCMM , 466 + 011506' 576251 000000 X ORI , 435 + 012121' 467465 466435 + 011507' 576255 000000 X ORM , 436 + + 011510' 576564 000000 X OUT , 057 + 011511' 576564 160000 XX OUT. , 017 + 011512' 576564 426546 X OUTBUF, 065 + 012122' 436057 017065 + 011513' 576564 461600 XX OUTF. , 027 + 011514' 576564 606564 X OUTPUT, 067 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 161 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 011515' 604147 450000 X PAGE , 700 + 011516' 604163 632200 X PASS2 , 701 + 012123' 027067 700701 + 011517' 605041 634500 X PHASE , 702 + 011520' 605751 566400 X POINT , 703 + + 011521' 605760 000000 XX POP , 262 + 011522' 605760 520000 XX POPJ , 263 + 012124' 702703 262263 + + 011523' 606247 455644 X PRGEND, 714 + 011524' 606251 566470 X PRINTX, 704 + 011525' 606562 474500 X PURGE , 705 + + 011526' 606563 500000 XX PUSH , 261 + 012125' 714704 705261 + 011527' 606563 505200 XX PUSHJ , 260 + + 011530' 624144 517000 X RADIX , 706 + 011531' 624144 517025 X RADIX5, 707 + + 011532' 624554 454163 X RELEAS, 071 + 012126' 260706 707071 + + 011533' 624554 574300 X RELOC , 710 + 011534' 624555 416253 X REMARK, 711 + + 011535' 624556 415545 X RENAME, 055 + + 011536' 624560 454164 X REPEAT, 712 + 012127' 710711 055712 + + 011537' 624563 456416 XX RESET., 015 + 011540' 625155 000000 X RIM , 715 + 011541' 625155 212000 X RIM10 , 735 + 011542' 625155 212042 X RIM10B, 736 + 012130' 015715 735736 + + 011543' 625764 000000 X ROT , 241 + 011544' 625764 430000 X ROTC , 245 + + 011545' 626367 000000 X RSW , 716 + 011546' 626442 160000 XX RTB. , 022 + 012131' 241245 716022 + 011547' 634154 540000 X SALL , 720 + 011550' 634541 624350 X SEARCH, 721 + + 011551' 634564 410000 X SETA , 424 + 011552' 634564 414200 X SETAB , 427 + 012132' 720721 424427 + 011553' 634564 415100 X SETAI , 425 + 011554' 634564 415500 X SETAM , 426 + 011555' 634564 434100 X SETCA , 450 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 161-1 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 011556' 634564 434142 X SETCAB, 453 + 012133' 425426 450453 + 011557' 634564 434151 X SETCAI, 451 + 011560' 634564 434155 X SETCAM, 452 + 011561' 634564 435500 X SETCM , 460 + 011562' 634564 435542 X SETCMB, 463 + 012134' 451452 460463 + 011563' 634564 435551 X SETCMI, 461 + 011564' 634564 435555 X SETCMM, 462 + 011565' 634564 550000 X SETM , 414 + 011566' 634564 554200 X SETMB , 417 + 012135' 461462 414417 + 011567' 634564 555100 X SETMI , 415 + 011570' 634564 555500 X SETMM , 416 + 011571' 634564 570000 X SETO , 474 + 011572' 634564 574200 X SETOB , 477 + 012136' 415416 474477 + 011573' 634564 575100 X SETOI , 475 + 011574' 634564 575500 X SETOM , 476 + 011575' 634564 636463 X SETSTS, 060 + 011576' 634564 720000 X SETZ , 400 + 012137' 475476 060400 + 011577' 634564 724200 X SETZB , 403 + 011600' 634564 725100 X SETZI , 401 + 011601' 634564 725500 XX SETZM , 402 + + 011602' 635170 425164 XX SIXBIT, 717 + 012140' 403401 402717 + + 011603' 635351 600000 XX SKIP , 330 + 011604' 635351 604100 X SKIPA , 334 + 011605' 635351 604500 X SKIPE , 332 + 011606' 635351 604700 X SKIPG , 337 + 012141' 330334 332337 + 011607' 635351 604745 X SKIPGE, 335 + 011610' 635351 605400 X SKIPL , 331 + 011611' 635351 605445 X SKIPLE, 333 + 011612' 635351 605600 X SKIPN , 336 + 012142' 335331 333336 + + 011613' 635451 636416 XX SLIST., 025 + + 011614' 635752 000000 X SOJ , 360 + 011615' 635752 410000 X SOJA , 364 + 011616' 635752 450000 X SOJE , 362 + 012143' 025360 364362 + 011617' 635752 470000 X SOJG , 367 + 011620' 635752 474500 X SOJGE , 365 + 011621' 635752 540000 X SOJL , 361 + 011622' 635752 544500 X SOJLE , 363 + 012144' 367365 361363 + 011623' 635752 560000 X SOJN , 366 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 161-2 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 011624' 635763 000000 XX SOS , 370 + 011625' 635763 410000 X SOSA , 374 + 011626' 635763 450000 X SOSE , 372 + 012145' 366370 374372 + 011627' 635763 470000 X SOSG , 377 + 011630' 635763 474500 X SOSGE , 375 + 011631' 635763 540000 X SOSL , 371 + 011632' 635763 544500 X SOSLE , 373 + 012146' 377375 371373 + 011633' 635763 560000 X SOSN , 376 + + 011634' 636165 577245 X SQUOZE, 707 + + 011635' 636441 645700 X STATO , 061 + 011636' 636441 646563 X STATUS, 062 + 012147' 376707 061062 + 011637' 636441 647200 X STATZ , 063 + + 011640' 636457 605100 X STOPI , 722 + + 011641' 636542 000000 X SUB , 274 + 011642' 636542 420000 X SUBB , 277 + 012150' 063722 274277 + 011643' 636542 510000 X SUBI , 275 + 011644' 636542 550000 X SUBM , 276 + + IF2,<IFE OPHSH,<SUBTL:>> + 011645' 636542 646454 X SUBTTL, 723 + 011646' 636560 606245 X SUPPRE, 713 + 012151' 275276 723713 + 011647' 637156 000000 X SYN , 724 + 011650' 644160 450000 X TAPE , 725 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 162 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 011651' 644443 000000 X TDC , 650 + 011652' 644443 410000 X TDCA , 654 + 012152' 724725 650654 + 011653' 644443 450000 X TDCE , 652 + 011654' 644443 560000 X TDCN , 656 + 011655' 644456 000000 X TDN , 610 + 011656' 644456 410000 X TDNA , 614 + 012153' 652656 610614 + 011657' 644456 450000 X TDNE , 612 + 011660' 644456 560000 X TDNN , 616 + 011661' 644457 000000 X TDO , 670 + 011662' 644457 410000 X TDOA , 674 + 012154' 612616 670674 + 011663' 644457 450000 X TDOE , 672 + 011664' 644457 560000 X TDON , 676 + 011665' 644472 000000 X TDZ , 630 + 011666' 644472 410000 X TDZA , 634 + 012155' 672676 630634 + 011667' 644472 450000 X TDZE , 632 + 011670' 644472 560000 X TDZN , 636 + + 011671' 645164 544500 X TITLE , 726 + + 011672' 645443 000000 X TLC , 641 + 012156' 632636 726641 + 011673' 645443 410000 X TLCA , 645 + 011674' 645443 450000 X TLCE , 643 + 011675' 645443 560000 X TLCN , 647 + 011676' 645456 000000 X TLN , 601 + 012157' 645643 647601 + 011677' 645456 410000 X TLNA , 605 + 011700' 645456 450000 XX TLNE , 603 + 011701' 645456 560000 XX TLNN , 607 + 011702' 645457 000000 XX TLO , 661 + 012160' 605603 607661 + 011703' 645457 410000 X TLOA , 665 + 011704' 645457 450000 X TLOE , 663 + 011705' 645457 560000 X TLON , 667 + 011706' 645472 000000 XX TLZ , 621 + 012161' 665663 667621 + 011707' 645472 410000 XX TLZA , 625 + 011710' 645472 450000 XX TLZE , 623 + 011711' 645472 560000 XX TLZN , 627 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 163 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 011712' 646243 000000 X TRC , 640 + 012162' 625623 627640 + 011713' 646243 410000 X TRCA , 644 + 011714' 646243 450000 X TRCE , 642 + 011715' 646243 560000 X TRCN , 646 + 011716' 646256 000000 X TRN , 600 + 012163' 644642 646600 + 011717' 646256 410000 X TRNA , 604 + 011720' 646256 450000 XX TRNE , 602 + 011721' 646256 560000 XX TRNN , 606 + 011722' 646257 000000 X TRO , 660 + 012164' 604602 606660 + 011723' 646257 410000 X TROA , 664 + 011724' 646257 450000 X TROE , 662 + 011725' 646257 560000 X TRON , 666 + 011726' 646272 000000 XX TRZ , 620 + 012165' 664662 666620 + 011727' 646272 410000 X TRZA , 624 + 011730' 646272 450000 X TRZE , 622 + 011731' 646272 560000 X TRZN , 626 + + 011732' 646343 000000 X TSC , 651 + 012166' 624622 626651 + 011733' 646343 410000 X TSCA , 655 + 011734' 646343 450000 X TSCE , 653 + 011735' 646343 560000 X TSCN , 657 + 011736' 646356 000000 X TSN , 611 + 012167' 655653 657611 + 011737' 646356 410000 X TSNA , 615 + 011740' 646356 450000 X TSNE , 613 + + 011741' 646356 560000 X TSNN , 617 + 011742' 646357 000000 X TSO , 671 + 012170' 615613 617671 + 011743' 646357 410000 X TSOA , 675 + 011744' 646357 450000 X TSOE , 673 + 011745' 646357 560000 X TSON , 677 + 011746' 646372 000000 X TSZ , 631 + 012171' 675673 677631 + 011747' 646372 410000 X TSZA , 635 + 011750' 646372 450000 X TSZE , 633 + 011751' 646372 560000 X TSZN , 637 + 011752' 646443 415454 X TTCALL, 051 + 012172' 635633 637051 + 011753' 646757 634547 X TWOSEG, 731 + 011754' 654641 000000 X UFA , 130 + 011755' 654745 644600 X UGETF , 073 + 011756' 655245 560000 X UJEN , 100 + 012173' 731130 073100 + 011757' 655651 664562 X UNIVER, 737 + 011760' 656345 645100 X USETI , 074 + 011761' 656345 645700 X USETO , 075 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 163-1 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + 011762' 664162 000000 X VAR , 727 + 012174' 737074 075727 + + 011763' 676442 160000 XX WTB. , 023 + + 011764' 704154 540000 X XALL , 732 + + 011765' 704364 000000 X XCT , 256 + + 011766' 705451 636400 X XLIST , 733 + 012175' 023732 256733 + + 011767' 705762 000000 X XOR , 430 + 011770' 705762 420000 X XORB , 433 + 011771' 705762 510000 X XORI , 431 + 011772' 705762 550000 X XORM , 432 + 012176' 430433 431432 + + 011773' 706065 564745 X XPUNGE, 730 + 011774' 706744 000000 X XWD , 734 + + 011775' 720000 000000 X Z , 000 + + 011776' 164362 454600 X .CREF , 740 + 012177' 730734 000740 + 011777' 165067 466255 X .HWFRM, 742 + 012000' 165546 625564 X .MFRMT, 743 + 012001' 167043 624546 X .XCREF, 741 + + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 164 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + IFN OPHSH,< ;NO-OPS, OLD MNEMONICS,F4 UUOS + X CAI , 300 + X CAM , 310 + X CLEAR , 400 + X CLEARB, 403 + X CLEARI, 401 + X CLEARM, 402 + X JUMP , 320 + X JUMPA , 324 + X SKIP , 330 + X RESET., 015 + X IN. , 016 + X OUT. , 017 + X DATA. , 020 + X FIN. , 021 + X RTB. , 022 + X WTB. , 023 + X MTOP. , 024 + X SLIST., 025 + X INF. , 026 + X OUTF. , 027 + X NLI. , 031 + X NLO. , 032 + > + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 165 +MACRO 10 24-APR-78 02:11 MACHINE INSTRUCTION SEARCH ROUTINES + + IFE OPHSH,< + IF1, < BLOCK N1> + 012002' 377777 777777 OP1END: -1B36 + 012003' OP1COD: BLOCK N1/4 + 012200' 742743 741000 CC> + IFN OPHSH,< + IF2,< + DEFINE SETVAL (N)<EXP .%'N + PURGE .%'N> + N=0 + XLIST + REPEAT PRIME,<SETVAL \N + N=N+1> + LIST + > + OP1COD: IF1,< BLOCK <PRIME/4+1>> + IF2,< + DEFINE SETVAL (N)<EXP .$'N + PURGE .$'N> + N=0 + XLIST + REPEAT <PRIME/4+1>,<SETVAL \N + N=N+1> + > + LIST> + + IFDEF .CREF,< .CREF ;START CREFFING AGAIN> + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 166 +MACRO 10 24-APR-78 02:11 PERMANENT SYMBOLS + + SUBTTL PERMANENT SYMBOLS + 012201' 000000 000002 SYMNUM: EXP LENGTH/2 ;NUMBER OF PERMANENT SYMBOLS + DEFINE P (A,B)< + SIXBIT /A/ + XWD SYMF!NOOUTF,B> + + 012202' 400000 000000 P @, 0(SUPRBT) + 012203' 500004 000000 + 012204' 373737 373737 P ??????, 0(SUPRBT) + 012205' 500004 000000 + + 000004 LENGTH= .-SYMNUM-1 ;LENGTH OF INITIAL SYMBOLS + + 012206' PRMTBL: ;PERMANENT SYMBOLS + 012206' 414443 000000 P ADC, 24 + 012207' 500000 000024 + 012210' 416062 000000 P APR, 0 + 012211' 500000 000000 + 012212' 434351 000000 P CCI, 14 + 012213' 500000 000014 + 012214' 434460 000000 P CDP, 110 + 012215' 500000 000110 + 012216' 434462 000000 P CDR, 114 + 012217' 500000 000114 + 012220' 436041 000000 P CPA, 0 + 012221' 500000 000000 + 012222' 436200 000000 P CR, 150 + 012223' 500000 000150 + 012224' 444300 000000 P DC, 200 + 012225' 500000 000200 + 012226' 444363 410000 P DCSA, 300 + 012227' 500000 000300 + 012230' 444363 420000 P DCSB, 304 + 012231' 500000 000304 + 012232' 444600 000000 P DF, 270 + 012233' 500000 000270 + 012234' 445163 000000 P DIS, 130 + 012235' 500000 000130 + 012236' 445463 000000 P DLS, 240 + 012237' 500000 000240 + 012240' 446043 000000 P DPC, 250 + 012241' 500000 000250 + 012242' 446353 000000 P DSK, 170 + 012243' 500000 000170 + 012244' 446443 000000 P DTC, 320 + 012245' 500000 000320 + 012246' 446463 000000 P DTS, 324 + 012247' 500000 000324 + 012250' 546064 000000 P LPT, 124 + 012251' 500000 000124 + 012252' 554446 000000 P MDF, 260 + 012253' 500000 000260 + 012254' 556443 000000 P MTC, 220 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 166-1 +MACRO 10 24-APR-78 02:11 PERMANENT SYMBOLS + + 012255' 500000 000220 + 012256' 556455 000000 P MTM, 230 + 012257' 500000 000230 + 012260' 556463 000000 P MTS, 224 + 012261' 500000 000224 + 012262' 604147 000000 P PAG, 10 + 012263' 500000 000010 + 012264' 605100 000000 P PI, 4 + 012265' 500000 000004 + 012266' 605464 000000 P PLT, 140 + 012267' 500000 000140 + 012270' 606460 000000 P PTP, 100 + 012271' 500000 000100 + 012272' 606462 000000 P PTR, 104 + 012273' 500000 000104 + + 012274' 645543 000000 P TMC, 340 + 012275' 500000 000340 + 012276' 645563 000000 P TMS, 344 + 012277' 500000 000344 + 012300' 646471 000000 P TTY, 120 + 012301' 500000 000120 + 012302' 656443 000000 P UTC, 210 + 012303' 500000 000210 + 012304' 656463 000000 P UTS, 214 + 012305' 500000 000214 + IFE LNSSW,< XLIST > + LIST + 012306' PRMEND: ;END OF PERMANENT SYMBOLS + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 167 +MACRO 10 24-APR-78 02:11 PERMANENT SYMBOLS + + OPDEF ZL [Z LITF] ;INVALID IN LITERALS + OPDEF ZA [Z ADDF] ;INVALID IN ADDRESSES + OPDEF ZAL [Z ADDF!LITF] + + 012306' OP1TAB: + + 012306' 000000 110673' ZA PAGE0 ;PAGE + 012307' 000000 303155' ZAL PASS20 ;PASS2 + 012310' 000000 304106' ZAL PHASE0 ;PHASE + 012311' 000000 004652' Z POINT0 ;POINT + 012312' 000000 103431' ZA PRNTX0 ;PRINTX + 012313' 000000 104410' ZA PURGE0 ;PURGE + 012314' 000000 103375' ZA RADIX0 ;RADIX + 012315' 000000 004760' Z RADX50 ;RADIX50,SQUOZE + 012316' 000001 304203' ZAL LOC0 (1) ;RELOC + 012317' 000000 303450' ZAL REMAR0 ;REMARK + 012320' 000000 105264' ZA REPEA0 ;REPEAT + 012321' 000000 104250' ZA SUPRE0 ;SUPRESS + 012322' 000000 305003' ZAL PSEND0 ;PRGEND + 012323' 000400 310354' ZAL RIM0 (RIMSW) ;RIM + 012324' 700040 004443' DATAI 0,IOP ;RSW + 012325' 000001 004606' Z ASCII0 (1) ;SIXBIT + 012326' 004001 303404' ZAL IOSET (IOPALL!IOSALL) ;SALL + 012327' 000000 305240' ZAL SERCH0 ;SEARCH + 012330' 000000 106321' ZA STOPI0 ;STOPI + 012331' 440700 104311' ZA SUBTT0 (Z (POINT 7,,)) ;SUBTTL + 012332' 000000 104352' ZA SYN0 ;SYN + 012333' 000000 303373' ZAL TAPE0 ;TAPE + 012334' 440700 104276' ZA TITLE0 (Z (POINT 7,,)) ;TITLE + 012335' 000000 303546' ZAL VAR0 ;VAR + + 012336' 000000 004266' Z XPUNG0 ;XPUNGE + 012337' 000000 303447' ZAL TWSEG0 ;TWOSEGMENTS + 012340' 004000 303403' ZAL XALL0 (IOPALL) ;XALL + 012341' 040000 303404' ZAL IOSET (IOPROG) ;XLIST + 012342' 000000 004672' Z XWD0 ;XWD + 012343' 000100 310354' ZAL RIM0 (RIM1SW) ;RIM10 + 012344' 004000 310354' ZAL RIM0 (R1BSW) ;RIM10B + 012345' 440700 105167' ZA UNIV0 (Z (POINT 7,,)) ;UNIVERSAL + 012346' 002000 303411' ZAL IORSET (IONCRF) ;.CREF + 012347' 002000 303404' ZAL IOSET (IONCRF) ;.XCREF + 012350' 000000 103447' ZA OFFORM ;.HWFRMT + 012351' 000000 103447' ZA ONFORM ;.MFRMT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 168 +MACRO 10 24-APR-78 02:11 PERMANENT SYMBOLS + + 012352' OP2TAB: + + 012352' 000000 004606' Z ASCII0 (0) ;ASCII + 012353' 400000 004606' Z ASCII0 (1B18) ;ASCIZ + 012354' 700000 004443' BLKI IOP ;BLKI + 012355' 700100 004443' BLKO IOP ;BLKO + 012356' 000000 303415' ZAL BLOCK0 ;BLOCK + 012357' 000000 104261' ZA SUPRSA ;ASUPPRESS + 012360' 000000 303447' ZAL HISEG0 ;HISEG + 012361' 000000 004722' Z BYTE0 ;BYTE + 012362' 700240 004443' CONI IOP ;CONI + 012363' 700200 004443' CONO IOP ;CONO + 012364' 700340 004443' CONSO IOP ;CONSO + 012365' 700300 004443' CONSZ IOP ;CONSZ + 012366' 700040 004443' DATAI IOP ;DATAI + 012367' 700140 004443' DATAO IOP ;DATAO + 012370' 000012 004557' Z OCT0 (^D10) ;DEC + 012371' 000000 105405' ZA DEFIN0 ;DEFINE + + 012372' 000000 304104' ZAL DEPHA0 ;DEPHASE + 012373' 000000 303123' ZAL END0 ;END + 012374' 000600 103766' ZA INTER0 (INTF!ENTF) ;ENTRY + 012375' 000000 004556' Z EXPRES ;EXP + 012376' 000000 104004' ZA EXTER0 ;EXTERN + 012377' 254200 004445' JRST 4,OP ;HALT + 012400' 607640 003627' TLNN FR,IFPASS ;IF1 + 012401' 603640 003627' TLNE FR,IFPASS ;IF2 + + 012402' 602000 003632' TRNE AC0,IFB0 ;IFB + 012403' 603240 003667' TLNE ARG,IFDEF0 ;IFDEF + 012404' 000000 003677' Z IFIDN0 (0) ;IFDIF + 012405' 332000 003601' SKIPE IF ;IFE + 012406' 337000 003601' SKIPG IF ;IFG + 012407' 335000 003601' SKIPGE IF ;IFGE + 012410' 000001 003677' Z IFIDN0 (1) ;IFIDN + 012411' 331000 003601' SKIPL IF ;IFL + + 012412' 333000 003601' SKIPLE IF ;IFLE + 012413' 336000 003601' SKIPN IF ;IFN + 012414' 606000 003632' TRNN AC0,IFB0 ;IFNB + 012415' 607240 003667' TLNN ARG,IFDEF0 ;IFNDEF + 012416' 000400 103766' ZA INTER0 (INTF) ;INTERN + 012417' 000000 004710' Z IOWD0 ;IOWD + 012420' 000000 006173' Z IRP0 (0) ;IRP + 012421' 400000 006173' Z IRP0 (400000) ;IRPC + + 012422' 255300 004445' JFCL 6,OP ;JCRY + 012423' 255200 004445' JFCL 4,OP ;JCRY0 + 012424' 255100 004445' JFCL 2,OP ;JCRY1 + 012425' 254500 004445' JRST 12,OP ;JEN + 012426' 255400 004445' JFCL 10,OP ;JOV + 012427' 254100 004445' JRST 2,OP ;JRSTF + 012430' 004001 303411' ZAL IORSET (IOPALL!IOSALL) ;LALL + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 168-1 +MACRO 10 24-APR-78 02:11 PERMANENT SYMBOLS + + 012431' 040000 303411' ZAL IORSET (IOPROG) ;LIST + 012432' 000000 303454' ZAL LIT0 ;LIT + 012433' 000000 304203' ZAL LOC0 (0) ;LOC + 012434' 000000 104246' ZA OFFSYM ;NOSYM + 012435' 000010 004557' Z OCT0 (^D8) ;OCT + 012436' 000000 104053' ZA OPDEF0 ;OPDEF + 012437' 255040 004445' JFCL 1,OP ;JFOV + 012440' 000000 104243' ZA ONML ;MLON + 012441' 000000 104244' ZA OFFML ;MLOFF + 012442' 600000 004606' Z ASCII0 (3B19) ;COMMENT + IFN IIISW!WFWSW,< + Z ASCII0 (5B20) ;ASCID + IFN WFWSW,< + ZAL %ARAY ;ARRAY + ZAL %INTEG ;INTEGER + ZAL %LVAR ;LVAR>> + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 169 +MACRO 10 24-APR-78 02:11 PERMANENT SYMBOLS + + + 012443' CALTBL: + ;USER DEFINED CALLI'S GO HERE + 012443' 545147 506463 SIXBIT /LIGHTS/ ;-1 + 012444' 624563 456400 CALLI0: SIXBIT /RESET/ ; 0 + 012445' 444464 515600 SIXBIT /DDTIN/ ; 1 + 012446' 634564 444464 SIXBIT /SETDDT/ ; 2 + 012447' 444464 576564 SIXBIT /DDTOUT/ ; 3 + 012450' 444566 435062 SIXBIT /DEVCHR/ ; 4 + 012451' 444464 476400 SIXBIT /DDTGT/ ; 5 + 012452' 474564 435062 SIXBIT /GETCHR/ ; 6 + 012453' 444464 625400 SIXBIT /DDTRL/ ; 7 + 012454' 674151 640000 SIXBIT /WAIT/ ;10 + 012455' 435762 450000 SIXBIT /CORE/ ;11 + 012456' 457051 640000 SIXBIT /EXIT/ ;12 + 012457' 656460 435462 SIXBIT /UTPCLR/ ;13 + 012460' 444164 450000 SIXBIT /DATE/ ;14 + 012461' 545747 515600 SIXBIT /LOGIN/ ;15 + 012462' 416062 455642 SIXBIT /APRENB/ ;16 + 012463' 545747 576564 SIXBIT /LOGOUT/ ;17 + 012464' 636751 644350 SIXBIT /SWITCH/ ;20 + 012465' 624541 636351 SIXBIT /REASSI/ ;21 + 012466' 645155 456200 SIXBIT /TIMER/ ;22 + 012467' 556364 515545 SIXBIT /MSTIME/ ;23 + 012470' 474564 606056 SIXBIT /GETPPN/ ;24 + 012471' 646260 634564 SIXBIT /TRPSET/ ;25 + 012472' 646260 524556 SIXBIT /TRPJEN/ ;26 + 012473' 626556 645155 SIXBIT /RUNTIM/ ;27 + 012474' 605257 420000 SIXBIT /PJOB/ ;30 + 012475' 635445 456000 SIXBIT /SLEEP/ ;31 + 012476' 634564 605766 SIXBIT /SETPOV/ ;32 + 012477' 604545 530000 SIXBIT /PEEK/ ;33 + 012500' 474564 545156 SIXBIT /GETLIN/ ;34 + 012501' 626556 000000 SIXBIT /RUN/ ;35 + 012502' 634564 656760 SIXBIT /SETUWP/ ;36 + 012503' 624555 416000 SIXBIT /REMAP/ ;37 + 012504' 474564 634547 SIXBIT /GETSEG/ ;40 + 012505' 474564 644142 SIXBIT /GETTAB/ ;41 + 012506' 636071 000000 SIXBIT /SPY/ ;42 + 012507' 634564 564155 SIXBIT /SETNAM/ ;43 + 012510' 645560 435762 SIXBIT /TMPCOR/ ;44 + 012511' 446353 435062 SIXBIT /DSKCHR/ ;45 + 012512' 637163 636462 SIXBIT /SYSSTR/ ;46 + 012513' 525742 636462 SIXBIT /JOBSTR/ ;47 + 012514' 636462 656557 SIXBIT /STRUUO/ ;50 + 012515' 637163 605071 SIXBIT /SYSPHY/ ;51 + 012516' 466245 435056 SIXBIT /FRECHN/ ;52 + 012517' 444566 647160 SIXBIT /DEVTYP/ ;53 + 012520' 444566 636463 SIXBIT /DEVSTS/ ;54 + 012521' 444566 606056 SIXBIT /DEVPPN/ ;55 + 012522' 634545 530000 SIXBIT /SEEK/ ;56 + 012523' 626464 626000 SIXBIT /RTTRP/ ;57 + 012524' 545743 530000 SIXBIT /LOCK/ ;60 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 169-1 +MACRO 10 24-APR-78 02:11 PERMANENT SYMBOLS + + 012525' 525742 636463 SIXBIT /JOBSTS/ ;61 + 012526' 545743 416445 SIXBIT /LOCATE/ ;62 + 012527' 675045 624500 SIXBIT /WHERE/ ;63 + 012530' 444566 564155 SIXBIT /DEVNAM/ ;64 + 012531' 436454 525742 SIXBIT /CTLJOB/ ;65 + 012532' 475742 636462 SIXBIT /GOBSTR/ ;66 + 012533' 000000 000000 0 ;67 + 012534' 000000 000000 0 ;70 + 012535' 506061 000000 SIXBIT /HPQ/ ;71 + 012536' 505142 456200 SIXBIT /HIBER/ ;72 + 012537' 674153 450000 SIXBIT /WAKE/ ;73 + 012540' 435047 606056 SIXBIT /CHGPPN/ ;74 + 012541' 634564 656557 SIXBIT /SETUUO/ ;75 + 012542' 444566 474556 SIXBIT /DEVGEN/ ;76 + 012543' 576450 656362 SIXBIT /OTHUSR/ ;77 + 012544' 435053 414343 SIXBIT /CHKACC/ ;100 + 012545' 444566 635172 SIXBIT /DEVSIZ/ ;101 + 012546' 444145 555756 SIXBIT /DAEMON/ ;102 + 012547' 525742 604553 SIXBIT /JOBPEK/ ;103 + 012550' 416464 414350 SIXBIT /ATTACH/ ;104 + 012551' 444145 465156 SIXBIT /DAEFIN/ ;105 + 012552' 466243 656557 SIXBIT /FRCUUO/ ;106 + 012553' 444566 545655 SIXBIT /DEVLNM/ ;107 + 012554' 604164 501600 SIXBIT /PATH./ ;110 + + 000112 CALNTH==.-CALTBL + 000001 NEGCAL==CALLI0-CALTBL ;NUMBER OF NEGATIVE CALLI'S + + 012555' 515643 506267 TTCTBL: SIXBIT /INCHRW/ ; 0 INPUT A CHAR. AND WAIT + 012556' 576564 435062 SIXBIT /OUTCHR/ ; 1 OUTPUT A CHAR. + 012557' 515643 506263 SIXBIT /INCHRS/ ; 2 INPUT A CHAR. AND SKIP + 012560' 576564 636462 SIXBIT /OUTSTR/ ; 3 OUTPUT A STRING + 012561' 515643 506754 SIXBIT /INCHWL/ ; 4 INPUT CHAR., WAIT, LINE MODE + 012562' 515643 506354 SIXBIT /INCHSL/ ; 5 INPUT CHAR., SKIP, LINE MODE + 012563' 474564 544350 SIXBIT /GETLCH/ ; 6 GET LINE CHARACTERISTICS + 012564' 634564 544350 SIXBIT /SETLCH/ ; 7 SET LINE CHARACTERISTICS + 012565' 624563 434156 SIXBIT /RESCAN/ ;10 RESET INPUT STREAM TO COMMAND + 012566' 435462 424651 SIXBIT /CLRBFI/ ;11 CLEAR TYPEIN BUFFER + 012567' 435462 424657 SIXBIT /CLRBFO/ ;12 CLEAR TYPEOUT BUFFER + 012570' 635360 515643 SIXBIT /SKPINC/ ;13 SKIPS IF A CHAR. CAN BE INPUT + 012571' 635360 515654 SIXBIT /SKPINL/ ;14 SKIPS IF A LINE CAN BE INPUT + 012572' 515756 455765 SIXBIT /IONEOU/ ;15 OUTPUT AS AN IMAGE CHAR. + + 000016 TTCLTH==.-TTCTBL + SUBTTL USER-DEFINED SYMBOL SEARCH ROUTINES + 012573' 260740 012713' MSRCH: PUSHJ PP,SEARCH ;PERFORM GENERAL SEARCH + 012574' 263740 000000 POPJ PP, ;NOT FOUND, EXIT + 012575' 327240 012602' JUMPG ARG,MSRCH2 ;SKIP-EXIT AND CROSS-REF IF FOUND + 012576' 312004 000001 CAME AC0,1(SX) ;WE ARE LOOKING AT SYMBOL, TRY ONE ABOVE + 012577' 263740 000000 POPJ PP, ;NO, EXIT + 012600' 271200 000002 ADDI SX,2 ;YES, POINT TO IT + 012601' 260740 012736' PUSHJ PP,SRCH5 ;LOAD REGISTERS + 012602' 354017 000000 MSRCH2: AOSA 0(PP) ;SET SKIP-EXIT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 169-2 +MACRO 10 24-APR-78 02:11 USER-DEFINED SYMBOL SEARCH ROUTINES + + 012603' 321240 012620' QSRCH: JUMPL ARG,SSRCH3 ;BRANCH IF OPERAND + 012604' 201140 000005 MOVEI SDEL,%MAC ;SET OPERATOR FLAG + 012605' 623600 000040 TLZE IO,DEFCRS ;IS IT A DEFINITION? + 012606' 201140 000006 MOVEI SDEL,%DMAC ;YES + 012607' 254000 012621' JRST CREF ;CROSS-REF AND EXIT + + 012610' 260740 012713' SSRCH: PUSHJ PP,SEARCH ;PERFORM GENERAL SEARCH + 012611' 263740 000000 POPJ PP, ;NOT FOUND, EXIT + 012612' 321240 012617' JUMPL ARG,SSRCH2 ;SKIP-EXIT AND CROSS-REF IF FOUND + 012613' 312004 777775 SSRCH1: CAME AC0,-3(SX) ;WE ARE LOOKING AT MACRO, LOOK ONE SLOT BELOW + 012614' 263740 000000 POPJ PP, ;NO DICE, EXIT + 012615' 275200 000002 SUBI SX,2 ;YES, POINT TO IT + 012616' 260740 012736' PUSHJ PP,SRCH5 ;LOAD REGISTERS + 012617' 350017 000000 SSRCH2: AOS 0(PP) ;SET FOR SKIP-EXIT + 012620' 201140 000001 SSRCH3: MOVEI SDEL,%SYM ;SET OPERAND FLAG + + 012621' 607600 002000 CREF: TLNN IO,IONCRF ;NO CREFFING FOR THIS SYMBOL? + 012622' 603640 402000 TLNE FR,P1!CREFSW ;PASS ONE OR CROSS-REF SUPPRESSION? + 012623' 263740 000000 POPJ PP, ;YES, EXIT + 012624' 250140 000007 EXCH SDEL,C ;PUT FLAG IN C, SACE C + 012625' 261740 000010 PUSH PP,CS + 012626' 603600 000400 TLNE IO,IOCREF ;HAVE WE PUT OUT THE 177,102 + 012627' 254000 012641' JRST CREF3 ;YES + 012630' 261740 000007 PUSH PP,C ;START OF CREF DATA + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 170 +MACRO 10 24-APR-78 02:11 USER-DEFINED SYMBOL SEARCH ROUTINES + + REPEAT 0,< ;NEEDS CHANGE TO CREF + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,102 + PUSHJ PP,OUTLST + TLO IO,IOCREF ;WE NOW ARE IN THAT STATE + POP PP,C ;WE HAVE NOW + CREF3: JUMPE C,NOFLG ;JUST CLOSE IT + PUSHJ PP,OUTLST ;TYPE OF SYMBOL (%MAC,%DMAC,%SYM) + MOVSI CS,770000 ;COUNT CHRS + TDZA C,C ;STARTING AT 0 + LSH CS,-6 ;TRY NEXT + TDNE AC0,CS ;IS THAT ONE THERE? + AOJA C,.-2 ;YES + PUSHJ PP,OUTLST ;PRINT NUMBER OF SYMBOL CONSTITUENTS + MOVE CS,AC0 + + CREF2: MOVEI C,0 + LSHC C,6 + ADDI C,40 + PUSHJ PP,OUTLST ;THE ASCII SYMBOL + JUMPN CS,CREF2 + MOVEI C,%DSYM + TLZE IO,DEFCRS + PUSHJ PP,OUTLST ;MARK IT AS A DEFINING OCCURENCE + NOFLG: MOVE C,SDEL + POP PP,CS + POPJ PP, + + CLSCRF: TRNN ER,LPTSW + POPJ PP, ;LEAVE IF WE SHOULD NOT BE PRINTING + CLSCR2: MOVEI C,177 + PUSHJ PP,PRINT + TLZE IO,IOCREF ;WAS IT OPEN? + JRST CLSCR1 ;YES, JUST CLOSE IT + MOVEI C,102 ;NO, OPEN IT FIRST + PUSHJ PP,OUTLST ;MARK BEGINNING OF CREF DATA + MOVEI C,177 + PUSHJ PP,OUTLST + CLSCR1: MOVEI C,103 + JRST OUTLST ;MARK END OF CREF DATA + + CLSC3: TLZ IO,IOCREF + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,104 + JRST OUTLST ;177,104 CLOSES IT FOR NOW + > ;END OF REPEAT 0 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 171 +MACRO 10 24-APR-78 02:11 USER-DEFINED SYMBOL SEARCH ROUTINES + + REPEAT 1,< ;WORKS WITH EXISTING CREF + 012631' 603600 000100 TLNE IO,IOPAGE + 012632' 260740 012664' PUSHJ PP,CRFHDR ;GET CORRECT SUBTTL + 012633' 201340 000177 MOVEI C,177 + 012634' 260740 010667' PUSHJ PP,OUTLST + 012635' 201340 000102 MOVEI C,102 + 012636' 260740 010667' PUSHJ PP,OUTLST + 012637' 661600 000400 TLO IO,IOCREF ;WE NOW ARE IN THAT STATE + 012640' 262740 000007 POP PP,C ;WE HAVE NOW + 012641' 260740 010667' CREF3: PUSHJ PP,OUTLST ;TYPE OF SYMBOL (%MAC,%DMAC,%SYM) + 012642' 205400 770000 MOVSI CS,770000 ;COUNT CHRS + 012643' 634340 000007 TDZA C,C ;STARTING AT 0 + 012644' 242400 777772 LSH CS,-6 ;TRY NEXT + 012645' 612000 000010 TDNE AC0,CS ;IS THAT ONE THERE? + 012646' 344340 012644' AOJA C,.-2 ;YES + 012647' 260740 010667' PUSHJ PP,OUTLST ;PRINT NUMBER OF SYMBOL CONSTITUENTS + 012650' 200400 000000 MOVE CS,AC0 + + 012651' 201340 000000 CREF2: MOVEI C,0 + 012652' 246340 000006 LSHC C,6 + 012653' 271340 000040 ADDI C,40 + 012654' 260740 010667' PUSHJ PP,OUTLST ;THE ASCII SYMBOL + 012655' 326400 012651' JUMPN CS,CREF2 + 012656' 201340 000002 MOVEI C,%DSYM + 012657' 623600 000040 TLZE IO,DEFCRS + 012660' 260740 010667' PUSHJ PP,OUTLST ;MARK IT AS A DEFINING OCCURENCE + 012661' 200340 000003 MOVE C,SDEL + 012662' 262740 000010 POP PP,CS + 012663' 263740 000000 POPJ PP, + + IFN OPHSH,< + SUBTL: SIXBIT /SUBTTL/> + 012664' 312000 011645' CRFHDR: CAME AC0,SUBTL ;IS FIRST SYMBOL "SUBTTL" + 012665' 254000 012672' JRST CRFHD1 ;NO + 012666' 510000 000006 HLLZ AC0,V + 012667' 260740 004311' PUSHJ PP,SUBTT0 ;UPDATE SUBTTL + 012670' 200000 011645' MOVE AC0,SUBTL ;RESTORE ARG. + 012671' 201300 003447' MOVEI V,CPOPJ + 012672' 201340 000000 CRFHD1: MOVEI C,0 + 012673' 254000 010607' JRST OUTL + + 012674' CLSC3: + 012674' 606600 000002 CLSCRF: TRNN ER,LPTSW + 012675' 263740 000000 POPJ PP, ;LEAVE IF WE SHOULD NOT BE PRINTING + 012676' 623600 000400 CLSCR2: TLZE IO,IOCREF ;FINISH UP LINE + 012677' 254000 012707' JRST CLSCR1 + 012700' 201340 000000 MOVEI C,0 + 012701' 603600 000100 TLNE IO,IOPAGE ;NEW PAGE? + 012702' 260740 010607' PUSHJ PP,OUTL ;YES,GIVE IT A ROUSING SENDOFF! + 012703' 201340 000177 MOVEI C,177 + 012704' 260740 010667' PUSHJ PP,OUTLST + 012705' 201340 000102 MOVEI C,102 + 012706' 260740 010667' PUSHJ PP,OUTLST ;MARK BEGINNING OF CREF DATA + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 171-1 +MACRO 10 24-APR-78 02:11 USER-DEFINED SYMBOL SEARCH ROUTINES + + 012707' 201340 000177 CLSCR1: MOVEI C,177 + 012710' 260740 010667' PUSHJ PP,OUTLST + 012711' 201340 000103 MOVEI C,103 + 012712' 254000 010667' JRST OUTLST ;MARK END OF CREF DATA + > ;END OF REPEAT 1 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 172 +MACRO 10 24-APR-78 02:11 USER-DEFINED SYMBOL SEARCH ROUTINES + + 012713' 554200 013547' SEARCH: HLRZ SX,SRCHX + 012714' 550140 013547' HRRZ SDEL,SRCHX + + 012715' 311004 777777 SRCH1: CAML AC0,-1(SX) + 012716' 254000 012725' JRST SRCH3 + 012717' 274200 000003 SRCH2: SUB SX,SDEL + 012720' 242140 777777 LSH SDEL,-1 + 012721' 317200 013553' CAMG SX,SYMTOP + 012722' 326140 012715' JUMPN SDEL,SRCH1 + 012723' 326140 012717' JUMPN SDEL,SRCH2 + 012724' 364200 012761' SOJA SX,SRCHNO ;NOT FOUND + + 012725' 316004 777777 SRCH3: CAMN AC0,-1(SX) + 012726' 254000 012735' JRST SRCH4 ;NORMAL / FOUND EXIT + 012727' 270200 000003 ADD SX,SDEL + 012730' 242140 777777 LSH SDEL,-1 + 012731' 317200 013553' CAMG SX,SYMTOP + 012732' 326140 012715' JUMPN SDEL,SRCH1 + 012733' 326140 012717' JUMPN SDEL,SRCH2 + 012734' 364200 012761' SOJA SX,SRCHNO ;NOT FOUND + + 012735' 350017 000000 SRCH4: AOS 0(PP) ;SET FOR SKIP EXIT + 012736' 205240 000004 SRCH5: MOVSI ARG,SUPRBT ;HE IS USING IT, TURN OFF BIT + 012737' 412244 000000 ANDCAM ARG,(SX) ; IN THE TABLE + 012740' 200244 000000 SRCH7: MOVE ARG,0(SX) ;FLAG AND VALUE TO ARG + 012741' 135440 003372' LDB RC,RCPNTR ;POINT 1,ARG,17 + 012742' 603240 000002 TLNE ARG,LELF ;CHECK LEFT RELOCATE + 012743' 661440 000001 TLO RC,1 + 012744' 550300 000005 HRRZ V,ARG + 012745' 603240 000010 TLNE ARG,SPTR ;CHECK SPECIAL EXTESN POINTER + 012746' 254000 012752' JRST SRCH6 + 012747' 603240 004000 TLNE ARG,PNTF + 012750' 200305 000000 MOVE V,0(ARG) ;36BIT VALUE TO V + 012751' 254000 013005' JRST SRCHOK + + 012752' 200305 000000 SRCH6: MOVE V,0(ARG) ;VALUE + 012753' 200445 000001 MOVE RC,1(ARG) ;AND RELOC + 012754' 603440 777776 TLNE RC,-2 ;CHECK AND SET EXTPNT + 012755' 502440 013742' HLLM RC,EXTPNT + 012756' 602440 777776 TRNE RC,-2 + 012757' 542440 013742' HRRM RC,EXTPNT + 012760' 254000 013005' JRST SRCHOK + 012761' 336000 014056' SRCHNO: SKIPN UNISCH+1 ;ALLOWED TO SEARCH OTHER TABLES + 012762' 263740 000000 POPJ PP, ;NO, JUST RETURN + 012763' 350300 014055' AOS V,UNISCH ;GET NEXT INDEX TO TABLE + 012764' 302300 000001 CAIE V,1 ;FIRST TIME IN + 012765' 254000 012774' JRST SRCHN1 ;YES, SAVE SYMBOL INFO + 012766' 506200 014055' HRLM SX,UNISCH ;SAVE SX AND SET FLAG + 012767' 200240 013547' MOVE ARG,SRCHX ;SEARCH POINTER + 012770' 202240 014147' MOVEM ARG,UNISHX ;TO A SAFE PLACE + 012771' 540240 013552' HRR ARG,SYMBOL + 012772' 504240 013553' HRL ARG,SYMTOP + 012773' 202240 014135' MOVEM ARG,UNIPTR ;STORE ALSO + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 172-1 +MACRO 10 24-APR-78 02:11 USER-DEFINED SYMBOL SEARCH ROUTINES + + 012774' 200306 014055' SRCHN1: MOVE V,UNISCH(V) ;GET TRUE INDEX + 012775' 322300 013004' JUMPE V,SRCHKO ;IF ZERO ALL TABLE SCANNED + 012776' 200246 014147' MOVE ARG,UNISHX(V) ;NEW SRCHX + 012777' 202240 013547' MOVEM ARG,SRCHX ;SET IT UP + 013000' 200246 014135' MOVE ARG,UNIPTR(V) ;SYMTOP,,SYMBOL + 013001' 552240 013552' HRRZM ARG,SYMBOL + 013002' 556240 013553' HLRZM ARG,SYMTOP + 013003' 254000 012713' JRST SEARCH ;TRY AGAIN + + 013004' 400240 000000 SRCHKO: SETZ ARG, ;CLEAR ARG SO ZERO STORED + 013005' 336000 014055' SRCHOK: SKIPN UNISCH ;HAVE WE SEARCH OTHER TABLES + 013006' 263740 000000 POPJ PP, ;NO, JUST RETURN + 013007' 554200 014055' SYMBCK: HLRZ SX,UNISCH ;RESTORE SX + 013010' 402000 014055' SETZM UNISCH ;CLEAR SYMBCK FLAG + 013011' 261740 000006 PUSH PP,V ;SAVE AN AC + 013012' 200300 014147' MOVE V,UNISHX ;SRCHX + 013013' 202300 013547' MOVEM V,SRCHX ;RESTORE ORIGINAL + 013014' 200300 014135' MOVE V,UNIPTR ;SYMTOP,,SYMBOL + 013015' 552300 013552' HRRZM V,SYMBOL + 013016' 556300 013553' HLRZM V,SYMTOP + 013017' 322240 013032' JUMPE ARG,SRCHK2 ;TOTALLY UNDEFINED + 013020' 261740 000011 PUSH PP,RC ;SAVE SOME ACCS + 013021' 261740 000005 PUSH PP,ARG + 013022' 261740 013742' PUSH PP,EXTPNT + 013023' 403240 013742' SETZB ARG,EXTPNT ;CLEAR ALL SYMBOL DATA + 013024' 403440 000006 SETZB RC,V + 013025' 260740 013036' PUSHJ PP,INSERT ;INSERT SYMBOL IN TABLE + 013026' 262740 013742' POP PP,EXTPNT ;RESTORE ACCS ETC. + 013027' 262740 000005 POP PP,ARG + 013030' 262740 000011 POP PP,RC + 013031' 202244 000000 MOVEM ARG,(SX) ;SET FLAGS AND VALUE AS IT SHOULD BE + 013032' 262740 000006 SRCHK2: POP PP,V + 013033' 263740 000000 POPJ PP, ;RETURN + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 173 +MACRO 10 24-APR-78 02:11 USER-DEFINED SYMBOL SEARCH ROUTINES + + 013034' 603240 002100 INSERQ: TLNE ARG,UNDF!VARF + 013035' 403440 000006 INSERZ: SETZB RC,V + 013036' 312004 777777 INSERT: CAME AC0,-1(SX) ;ARE WE LOOKING AT MATCHING MNEMONIC? + 013037' 254000 013047' JRST INSRT2 ;NO, JUST INSERT + 013040' 321240 013044' JUMPL ARG,INSRT1 ;YES, BRANCH IF OPERAND + 013041' 331004 000000 SKIPL 0(SX) ;OPERATOR, ARE WE LOOKING AT ONE? + 013042' 254000 013137' JRST UPDATE ;YES, UPDATE + 013043' 254000 013047' JRST INSRT2 ;NO, INSERT + + 013044' 337004 000000 INSRT1: SKIPG 0(SX) ;OPERAND, ARE WE LOOKING AT ONE? + 013045' 254000 013137' JRST UPDATE ;YES, UPDATE + 013046' 275200 000002 SUBI SX,2 ;NO, MOVE UNDER OPERATOR AND INSERT + 013047' 200140 013552' INSRT2: MOVE SDEL,SYMBOL + 013050' 275140 000002 SUBI SDEL,2 + 013051' 313140 013377' CAMLE SDEL,FREE + 013052' 254000 013055' JRST INSRT3 + 013053' 260740 010276' PUSHJ PP,XCEEDS + 013054' 271140 002000 ADDI SDEL,2000 + 013055' 202140 013552' INSRT3: MOVEM SDEL,SYMBOL ;MAKE ROOM FOR A TWO WORD ENTRY + 013056' 505143 000002 HRLI SDEL,2(SDEL) + 013057' 251144 777776 BLT SDEL,-2(SX) ;PUSH EVERYONE DOWN TWO LOACTIONS + 013060' 350020 013552' AOS @SYMBOL ;INCREMENT THE SYMBOL COUNT + 013061' 607440 777776 TLNN RC,-2 ;NEED SPECIAL? + 013062' 602440 777776 TRNE RC,-2 ;LEFT OR RIGHT EXTERNAL? + 013063' 254000 013104' JRST INSRT5 ;YES, JUMP + 013064' 607300 777777 TLNN V,-1 ;SKIP IF V IS A 36BIT VALUE + 013065' 254000 013074' JRST INSRT4 ;JUMP, ITS A 18BIT VALUE + 013066' 350140 013377' AOS SDEL,FREE ;36BIT, SO GET A CELL FROM FREE CORE + 013067' 311140 013552' CAML SDEL,SYMBOL ;MORE CORE NEEDED? + 013070' 260740 010276' PUSHJ PP,XCEEDS ;YES + 013071' 541243 777777 HRRI ARG,-1(SDEL) ;POINTER TO ARG + 013072' 202305 000000 MOVEM V,0(ARG) ;36BIT VALUE TO FREE CORE + 013073' 665240 004000 TLOA ARG,PNTF ;NOTE THAT ARG IS APOINTER, NOT A 18BIT VALUE + + 013074' 540240 000006 INSRT4: HRR ARG,V ;18BIT VALUE TO ARG + 013075' 137440 003372' DPB RC,RCPNTR ;FIX RIGHT RELOCATION + 013076' 603440 000001 TLNE RC,1 + 013077' 661240 000002 TLO ARG,LELF ;FIX LEFT RELOCATION + 013100' 202244 000000 INSRT6: MOVEM ARG,0(SX) ;INSERT FLAGS AND VALUE. + 013101' 202004 777777 MOVEM AC0,-1(SX) ;INSERT SYMBOL NAME. + 013102' 260740 013125' PUSHJ PP,SRCHI ;INITILIAZE SRCHX + 013103' 254000 012603' JRST QSRCH ;EXIT THROUGH CREF + + 013104' 201140 000002 INSRT5: MOVEI SDEL,2 ;GET TWO CELLS FROM FREE CORE + 013105' 273140 013377' ADDB SDEL,FREE + 013106' 311140 013552' CAML SDEL,SYMBOL;MORE CORE NEEDED? + 013107' 260740 010276' PUSHJ PP,XCEEDS ;YES + 013110' 202443 777777 MOVEM RC,-1(SDEL) + 013111' 541243 777776 HRRI ARG,-2(SDEL) ;POINTER TO ARG + 013112' 202305 000000 MOVEM V,0(ARG) + 013113' 661240 000010 TLO ARG,SPTR ;SET SPECIAL POINTER, POINTS TO TWO CELLS + 013114' 254000 013100' JRST INSRT6 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 174 +MACRO 10 24-APR-78 02:11 USER-DEFINED SYMBOL SEARCH ROUTINES + + 013115' 275200 000002 REMOVE: SUBI SX,2 ;MOVE EVERYONE UP TWO LOCATIONS + 013116' 200004 000000 REMOV1: MOVE 0(SX) + 013117' 202004 000002 MOVEM 2(SX) ;OVERWRITE THE DELETED SYMBOL + 013120' 312200 013552' CAME SX,SYMBOL ;SKIP WHEN DONE + 013121' 364200 013116' SOJA SX,REMOV1 + 013122' 271200 000002 ADDI SX,2 + 013123' 202200 013552' MOVEM SX,SYMBOL + 013124' 370004 000000 SOS 0(SX) ;DECREMENT THE SYMBOL COUNT + + 013125' 201100 000000 SRCHI: MOVEI AC2,0 ;THIS CODE SETS UP SRCHX + 013126' 140120 013552' FAD AC2,@SYMBOL + 013127' 242100 777745 LSH AC2,-^D27 + 013130' 201040 001000 MOVEI AC1,1000 + 013131' 242042 777421 LSH AC1,-357(AC2) + 013132' 542040 013547' HRRM AC1,SRCHX + 013133' 242040 000001 LSH AC1,1 + 013134' 270040 013552' ADD AC1,SYMBOL + 013135' 506040 013547' HRLM AC1,SRCHX + 013136' 263740 000000 POPJ PP, ;SRCHX=XWD <SYMTBL+LENGTH/2>,LENGTH/4 + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 175 +MACRO 10 24-APR-78 02:11 USER-DEFINED SYMBOL SEARCH ROUTINES + + 013137' 137440 003372' UPDATE: DPB RC,RCPNTR ;FIX RIGHT RELOCATION + 013140' 603240 000010 TLNE ARG,SPTR ;SKIP IF THERE IS NO SPECIAL POINTER + 013141' 254000 013171' JRST UPDAT4 ;YES, USE THE TWO CELLS + 013142' 607440 777776 TLNN RC,-2 ;NEED TO CHANGE + 013143' 602440 777776 TRNE RC,-2 ;ANY CURRENT EXTERNS? + 013144' 254000 013175' JRST UPDAT5 ;YES ,JUMP + 013145' 621240 000002 TLZ ARG,LELF ;CLEAR LELF + 013146' 603440 000001 TLNE RC,1 ;LEFT RELOCATABLE? + 013147' 661240 000002 TLO ARG,LELF ;YES, SET THE FLAG + 013150' 603240 004000 TLNE ARG,PNTF ;WAS THERE A 36BIT VALUE? + 013151' 254000 013164' JRST UPDAT2 ;YES, USE IT. + 013152' 603300 777777 TLNE V,-1 ;NO,IS THERE A 36BIT VALUE? + 013153' 254000 013157' JRST UPDAT1 ;YES, GET A CELL + 013154' 540240 000006 HRR ARG,V ;NO, USE RH OF ARG + 013155' 202244 000000 UPDAT3: MOVEM ARG,0(SX) ;OVERWRITE THE ONE IN THE TABLE + 013156' 263740 000000 POPJ PP, ;AND EXIT + + 013157' 350140 013377' UPDAT1: AOS SDEL,FREE ;GET ONE CELL + 013160' 311140 013552' CAML SDEL,SYMBOL ;NEED MORE CORE? + 013161' 260740 010276' PUSHJ PP,XCEEDS ;YES + 013162' 541243 777777 HRRI ARG,-1(SDEL) ;POINTER TO ARG + 013163' 661240 004000 TLO ARG,PNTF ;AND NOTE IT. + 013164' 603240 001000 UPDAT2: TLNE ARG,EXTF ;IS THERE A EXTERNAL? + 013165' 254000 013155' JRST UPDAT3 ;YES, - JUST SAVE A LOCATION + 013166' 202244 000000 MOVEM ARG,0(SX) ;NO, OVERWRITE THE POINTER IN THE TABLE + 013167' 202305 000000 MOVEM V,0(ARG) ;STORE VALUE AS A 36BIT VALUE + 013170' 263740 000000 POPJ PP, ;AND EXIT + + 013171' 202244 000000 UPDAT4: MOVEM ARG,0(SX) ;WE HAVE TWO CELLS, WE USE THEM + 013172' 202305 000000 MOVEM V,0(ARG) ;SAVE AS 36BIT VALUE + 013173' 202445 000001 MOVEM RC,1(ARG) ;SAVE RELOCATION BITS + 013174' 263740 000000 POPJ PP, ;AND EXIT + + 013175' 201140 000002 UPDAT5: MOVEI SDEL,2 ;THERE IS A EXTERNAL + 013176' 273140 013377' ADDB SDEL,FREE ;SO WE NEED TWO LOACTIONS + 013177' 311140 013552' CAML SDEL,SYMBOL ;NEED MORE CORE? + 013200' 260740 010276' PUSHJ PP,XCEEDS ;YES + 013201' 202443 777777 MOVEM RC,-1(SDEL) ;SAVE RELOCATION BITS + 013202' 541243 777776 HRRI ARG,-2(SDEL) ;SAVE THE POINTER IN ARG + 013203' 202305 000000 MOVEM V,0(ARG) ;SAVE A 36BIT VALUE + 013204' 661240 000010 TLO ARG,SPTR ;SET SPECIAL PNTR FLAG + 013205' 621240 004000 TLZ ARG,PNTF ;CLEAR POINTER FLAG + 013206' 254000 013155' JRST UPDAT3 ;SAVE THE POINTER AND EXIT + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 176 +MACRO 10 24-APR-78 02:11 CONSTANTS + + SUBTTL CONSTANTS + + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 177 +MACRO 10 24-APR-78 02:11 PHASED CODE + + SUBTTL PHASED CODE + SUBTTL PHASED CODE + 013207' LSTFIL: BLOCK 1 + 013210' 400000 000000 SIXBIT /@/ ;SYMBOL TO STOP PRINTING + 013211' TAG: BLOCK 1 + 013212' 001300 400000 SIXBIT / + @/ + 013213' TABI: + 013213' 000221 104422 BYTE (7) 0, 11, 11, 11, 11 + 013214' SEQNO: BLOCK 1 + 013215' 201004 020100 ASCIZ / / + 013216' 201000 000000 + 013217' 000000 000014 BININI: EXP B + 013220' BINDEV: BLOCK 1 + 013221' 013325' 000000 XWD BINBUF,0 + 013222' 000000 000001 LSTINI: EXP AL + 013223' LSTDEV: BLOCK 1 + 013224' 013322' 000000 XWD LSTBUF,0 + IFN CCLSW,< + 013225' 000000 000016 NUNINI: EXP DMP + 013226' NUNDEV: BLOCK 1 + 013227' 000000 000000 XWD 0,0 + 013230' 000000 000001 RPGINI: EXP AL + 013231' RPGDEV: BLOCK 1 + 013232' 000000 014106' XWD 0,CTLBLK + > + 013233' 000000 000000 INDEVI: EXP A + 013234' INDEV: BLOCK 1 + 013235' 000000 013330' XWD 0,IBUF + 013236' 202511 135232 DBUF: ASCIZ / TI:ME DY-MON-YR PAGE / + 013237' 425010 454532 + 013240' 466371 626662 + 013241' 511012 040616 + 013242' 425000 000000 + 013243' 046330 141644 VBUF: ASCIZ / MACRO / ;MUST BE LAST LOCATIONS IN BLOCK + 013244' 475000 000000 + 013245' BLOCK 3 ;ALLOW FOR LONG TITLE + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 178 +MACRO 10 24-APR-78 02:11 STORAGE CELLS + + SUBTTL STORAGE CELLS + + 013250' PASS1I: + + 013250' RP: BLOCK 1 + + IFE CCLSW,<CTIBUF: BLOCK 3 + CTOBUF: BLOCK 3 + > + 013251' IFN CCLSW,<CTLBUF: BLOCK <CTLSIZ+5>/5 + > + 013322' LSTBUF: BLOCK 3 + 013325' BINBUF: BLOCK 3 + 013330' IBUF: BLOCK 3 + 013333' IFN CCLSW,<NUNDIR:> + 013333' LSTDIR: BLOCK 4 + 013337' BINDIR: BLOCK 4 + 013343' INDIR: BLOCK 4 + + 013347' ACDELX: ;LEFT HALF + 013347' BLKTYP: BLOCK 1 ;RIGHT HALF + + 013350' COUTX: BLOCK 1 + 013351' COUTY: BLOCK 1 + 013352' COUTP: BLOCK 1 + 013353' COUTRB: BLOCK 1 + 013354' COUTDB: BLOCK ^D18 + + 013376' ERRCNT: BLOCK 1 + 013377' FREE: BLOCK 1 + IFN RENTSW,<HIGH1: BLOCK 1 + HISNSW: BLOCK 1 + SVTYP3: BLOCK 1 + HMIN: BLOCK 1 ;START OF HIGH SEG. IN TWO SEG. PROG.> + 013400' IFBLK: BLOCK .IFBLK + 013424' IFBLKA: BLOCK .IFBLK + 013450' LADR: BLOCK 1 + 013451' NCOLLS: BLOCK 1 + 013452' LIMBO: BLOCK 1 + 013453' LBUFP: BLOCK 1 + 013454' LBUF: BLOCK <.CPL+5>/5 + 013476' BLOCK 1 + 013477' VARHD: BLOCK 1 + 013500' VARHDX: BLOCK 1 + IFN WFWSW,<LVARLC: BLOCK 1> + + 013501' LITAB: BLOCK 1 + 013502' LITABX: BLOCK 1 + 013503' BLOCK 1 + 013504' LITHD: BLOCK 1 + 013505' LITHDX: BLOCK 1 + 013506' LITCNT: BLOCK 1 + 013507' LITNUM: BLOCK 1 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 178-1 +MACRO 10 24-APR-78 02:11 STORAGE CELLS + + + 013510' LOOKX: BLOCK 1 + 013511' NEXT: BLOCK 1 + 013512' OUTSW: BLOCK 1 + 013513' PDP: BLOCK 1 + 013514' RECCNT: BLOCK 1 + 013515' SAVBLK: BLOCK RC + 013526' SAVERC: BLOCK 1 + 013527' SBUF: BLOCK .SBUF/5 + 013547' SRCHX: BLOCK 1 + 013550' SUBTTX: BLOCK 1 + 013551' SVSYM: BLOCK 1 + 013552' SYMBOL: BLOCK 1 + 013553' SYMTOP: BLOCK 1 + 013554' SYMCNT: BLOCK 1 + + 013555' STPX: BLOCK 1 + 013556' STPY: BLOCK 1 + 013557' STCODE: BLOCK .STP + 013627' STOWRC: BLOCK .STP + + 013677' TABP: BLOCK 1 + 013700' TCNT: BLOCK 1 ;COUNT OF CHARS. LEFT IN TBUF + 013701' TBUF: BLOCK .TBUF/5 + 013721' DEVBUF: BLOCK 6 ;STORE NAME.EXT CREATION DATE AND TIME + 013727' TYPERR: BLOCK 1 + 013730' IONSYM: BLOCK 1 ;-1 SUPRESS LISTING OF SYMBOLS + 013731' PRGPTR: BLOCK 1 ;POINTER TO CHAIN OF PRGEND BLOCKS + 013732' ENTERS: BLOCK 1 ;-1 WHEN ENTERS HAVE BEEN DONE + 013733' UNIVSN: BLOCK 1 ;-1 WHEN A UNIVERSAL SEEN + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 179 +MACRO 10 24-APR-78 02:11 STORAGE CELLS + + 013734' PASS2I: + + 013734' ABSHI: BLOCK 1 + 013735' HIGH: BLOCK 1 + IFN RENTSW,<HHIGH: BLOCK 1 ;SAVE BREAK OF HIGH SEG. IN TWO SEG PROG.> + 013736' ACDEVX: BLOCK 1 + 013737' CPL: BLOCK 1 + 013740' CTLSAV: BLOCK 1 + 013741' CTLS1: BLOCK 1 + 013742' EXTPNT: BLOCK 1 + 013743' INTENT: BLOCK 1 + 013744' INREP: BLOCK 1 + 013745' INDEF: BLOCK 1 + 013746' INTXT: BLOCK 1 + 013747' INCND: BLOCK 1 + 013750' CALNAM: BLOCK 1 + 013751' CALPG: BLOCK 1 + 013752' CALSEQ: BLOCK 1 + 013753' DEFPG: BLOCK 1 + 013754' DEFSEQ: BLOCK 1 + 013755' LITPG: BLOCK 1 + 013756' LITSEQ: BLOCK 1 + 013757' REPPG: BLOCK 1 + 013760' REPSEQ: BLOCK 1 + 013761' TXTPG: BLOCK 1 + 013762' TXTSEQ: BLOCK 1 + 013763' CNDPG: BLOCK 1 + 013764' CNDSEQ: BLOCK 1 + 013765' IRPCNT: BLOCK 1 + 013766' IRPARG: BLOCK 1 + 013767' IRPARP: BLOCK 1 + 013770' IRPCF: BLOCK 1 + 013771' IRPPOI: BLOCK 1 + 013772' IRPSW: BLOCK 1 + IFN WFWSW,<FIXLNK: BLOCK 1> + 013773' LITLVL: BLOCK 1 + 013774' LITLBL: BLOCK 1 ;NAME OF LABEL DEFINED INSIDE A LITERAL + + 013775' ASGBLK: BLOCK 1 + 013776' LOCBLK: BLOCK 1 + + 013777' LOCA: BLOCK 1 + 014000' LOCO: BLOCK 1 + 014001' RELLOC: BLOCK 1 + 014002' ABSLOC: BLOCK 1 + 014003' LPP: BLOCK 1 + 014004' MODA: BLOCK 1 + 014005' MODLOC: BLOCK 1 + 014006' MODO: BLOCK 1 + 014007' IFN CCLSW,<OTBUF: BLOCK 2> + 014011' OUTSQ: BLOCK 2 + 014013' PAGEN.: BLOCK 1 + 014014' PPTEMP: BLOCK 1 + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 179-1 +MACRO 10 24-APR-78 02:11 STORAGE CELLS + + 014015' PPTMP1: BLOCK 1 + 014016' PPTMP2: BLOCK 1 + + 014017' REPCNT: BLOCK 1 + 014020' REPEXP: BLOCK 1 + 014021' REPPNT: BLOCK 1 + 014022' RPOLVL: BLOCK 1 + 014023' R1BCNT: BLOCK 1 + 014024' R1BCHK: BLOCK 1 + 014025' R1BBLK: BLOCK .R1B + 014047' R1BLOC: BLOCK 1 + 014050' RIMLOC: BLOCK 1 + 014051' TAGINC: BLOCK 1 + 014052' VECREL: BLOCK 1 + 014053' VECTOR: BLOCK 1 + 014054' .TEMP: BLOCK 1 ;TEMPORARY STORAGE + 014055' UNISCH: BLOCK .UNIV ;SEARCH TABLE FOR UNIVERSALS + 014067' SQFLG: BLOCK 1 + 014070' ARGF: BLOCK 1 + 014071' MACENL: BLOCK 1 + 014072' MACLVL: BLOCK 1 + 014073' MACPNT: BLOCK 1 + 014074' WWRXX: BLOCK 1 + 014075' RCOUNT: BLOCK 1 ;COUNT OF WORDS STILL TO READ IN LEAF + 014076' WCOUNT: BLOCK 1 ;COUNT OF WORDS STILL FREE IN LEAF + 014077' PASS2Z: ;ONLY CLEAR TO HERE ON PRGEND + 014077' LSTSYM: BLOCK 1 + 014100' PAGENO: BLOCK 1 + 014101' SEQNO2: BLOCK 1 + 014102' PASS2X: + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 180 +MACRO 10 24-APR-78 02:11 MULTI-ASSEMBLY STORAGE CELLS + + SUBTTL MULTI-ASSEMBLY STORAGE CELLS + + 014102' LSTPGN: BLOCK 1 + IFN WFWSW,<ARAYP: BLOCK 1> + 014103' HDAS: BLOCK 1 + 014104' IFN CCLSW,<EXTMP: BLOCK 1 ;HOLDS EXT OF COMMAND FILE (RH) + 014105' SAVFF: BLOCK 1 + 014106' CTLBLK: BLOCK 3 + 014111' CTIBUF: BLOCK 3 + 014114' CTOBUF: BLOCK 3> + 014117' MACSIZ: BLOCK 1 ;INITIAL SIZE OF LOW SEG + 014120' UNISIZ: BLOCK 1 ;TOP OF BUFFERS AND STACKS + 014121' UNITOP: BLOCK 1 ;TOP OF UNIVERSAL SYMBOL TABLE + 014122' UNIVNO: BLOCK 1 ;NUMBER OF UNIVERSALS SEEN + 014123' UNITBL: BLOCK .UNIV ;TABLE OF UNIVERSAL NAMES + 014135' UNIPTR: BLOCK .UNIV ;TABLE OF SYMBOL POINTERS + 014147' UNISHX: BLOCK .UNIV ;TABLE OF SRCHX POINTERS + 014161' VAR ;CLEAR VARIABLES + + 014161' JOBFFI: BLOCK 203*NUMBUF+1 ;INPUT BUFFER PLUS ONE + + 006564' END BEG + +NO ERRORS DETECTED + +PROGRAM BREAK IS 015533 + +12K CORE USED + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +A 000000 SPD +ABSHI 013734' +ABSLOC 014002' +AC0 000000 SPD +AC1 000001 +AC2 000002 +ACDEL 000004 SPD +ACDELX 013347' +ACDEV 000001 SPD +ACDEVX 013736' +ACEXT 000003 SPD +ACFILE 000002 SPD +ACPNTR 000005 SPD +ACPPN 000004 SPD +ADDF 100000 SPD +ADDUNV 005176' +AL 000001 SPD +ANGLB 000662' +ANGLB1 000673' +ANGLB2 000674' +APRENB 047000 000016 +ARG 000005 +ARGF 014070' +ARPGSW 100000 SPD +ASC10 004607' +ASC20 004625' +ASC30 004631' +ASC50 004642' +ASC55 004641' +ASC60 004644' +ASCII0 004606' +ASGBLK 013775' +ASSEM1 000104' +ASSEM2 000115' +ASSEMB 000077' +ASSIG1 004126' +ASSIG2 004154' +ASSIG3 004162' +ASSIG5 004136' +ASSIG6 004142' +ASSIG7 004116' +ASSIGN 004112' +ATOM 000334' +ATOM1 000336' +B 000014 SPD +BEG 006564' +BIN 000001 SPD +BINBUF 013325' +BINDEV 013220' +BINDIR 013337' +BININI 013217' +BINSE2 007061' +BINSET 007022' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-1 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +BLKTYP 013347' +BLOCK0 003415' +BLOCK1 003422' +BLOCK2 003424' +BOUT 002517' +BOUT20 002537' +BOUT30 002553' +BOUT3I 002574' +BOUT40 002613' +BOUT50 002640' +BOUT60 002660' +BOUT70 002647' +BOUT80 002662' +BYPAS1 004543' +BYPAS2 004544' +BYPASS 004543' +BYTAB 010073' +BYTE0 004722' +BYTE1 004730' +BYTE2 004737' +BYTE3 004746' +C 000007 +CALLI0 012444' +CALLM 005705' +CALNAM 013750' +CALNTH 000112 SPD +CALPG 013751' +CALSEQ 013752' +CALTBL 012443' +CC 742743 741000 +CCLSW 000001 SPD +CELL 000363' +CELL1 000370' +CELLSF 000362' +CHAR 000002 SPD +CHARAC 001415' +CHARAX 001443' +CHARL 001445' +CHARL1 001453' +CLSC3 012674' +CLSCR1 012707' +CLSCR2 012676' +CLSCRF 012674' +CNDPG 013763' +CNDSEQ 013764' +COMSW 014054' +CONBIT 020000 SPD +CORE 047000 000011 +COUT 002724' +COUTD 002731' +COUTD2 002736' +COUTDB 013354' +COUTI 002743' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-2 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +COUTP 013352' +COUTRB 013353' +COUTX 013350' +COUTY 013351' +CPEEK 005565' +CPEEK1 005574' +CPL 013737' +CPOPJ 003447' +CPOPJ1 003446' +CR 000015 SPD +CREF 012621' +CREF2 012651' +CREF3 012641' +CREFSW 002000 SPD +CRFHD1 012672' +CRFHDR 012664' +CRLF 010247' +CRPGSW 001000 SPD +CS 000010 +CSTAT 001456' +CTIBUF 014111' +CTL 000000 SPD +CTL2 000004 SPD +CTLBLK 014106' +CTLBUF 013251' +CTLS1 013741' +CTLSAV 013740' +CTLSET 006661' +CTLSIZ 000310 SPD +CTOBUF 014114' +CV 000000 SPD +DATE 047000 000014 +DATOUT 010724' +DBUF 013236' +DCFSW 000040 SPD +DDTOUT 047000 000003 +DECERR 006560' +DEF02 005420' +DEF10 005435' +DEF12 005445' +DEF20 005450' +DEF24 005463' +DEF25 005513' +DEF26 005504' +DEF30 005522' +DEF31 005523' +DEF32 005524' +DEF33 005527' +DEF35 005557' +DEF36 005551' +DEF40 005602' +DEF42 005604' +DEF44 005623' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-3 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +DEF46 005625' +DEF48 005642' +DEF50 005645' +DEF51 005652' +DEF70 005656' +DEF80 005663' +DEF81 005670' +DEFCRS 000040 SPD +DEFIN0 005405' +DEFPG 013753' +DEFSEQ 013754' +DELETE 000066' +DEPHA0 004104' +DEVBUF 013721' +DEVCHR 047000 000004 +DEVICE 007551' +DEVNAM 007556' +DIRBIT 000004 SPD +DISBIT 002000 SPD +DMP 000016 SPD +DMPBIN 010413' +DMPLST 010422' +DNC 003051' +DP1 010345' +DSEND 006405' +DSKBIT 200000 SPD +DSTOW 002776' +DTAB 010740' +DTABIT 000100 SPD +EINIT 010162' +END0 003123' +ENDP2 003216' +ENDP2A 003262' +ENDP2B 003307' +ENDP2D 003270' +ENDP2Q 003226' +ENDP2W 003224' +ENTERS 013732' +ENTF 000200 SPD +ENTRDN 007351' +EOL 000033 SPD +EOT 007460' +EOUT 002130' +EOUT1 002133' +EOUT2 002141' +EOUT3 002150' +EOUT4 002160' +ER 000014 SPD +ERRA 040000 SPD +ERRAX 003400' +ERRBIT 740000 SPD +ERRCB 010166' +ERRCF 010171' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-4 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +ERRCL 010164' +ERRCM 007603' +ERRCNT 013376' +ERRD 020000 SPD +ERRE 000040 SPD +ERRFIN 010176' +ERRL 010000 SPD +ERRLST 010430' +ERRM 000020 SPD +ERRMS1 010150' +ERRMS2 010153' +ERRMS3 010156' +ERRN 000400 SPD +ERRNE 010115' +ERRNE0 010116' +ERRNE1 010126' +ERRNE2 010140' +ERRNE3 010145' +ERRO 000200 SPD +ERRORS 777760 SPD +ERRP 000100 SPD +ERRQ 200000 SPD +ERRQSW 000010 SPD +ERRR 004000 SPD +ERRTYP 010173' +ERRU 002000 SPD +ERRV 001000 SPD +ERRX 100000 SPD +EVADR 004474' +EVAL10 004034' +EVALC3 001073' +EVALCM 001066' +EVALEX 001077' +EVALHA 001065' +EVALXQ 004046' +EVATOM 001102' +EVERRU 001157' +EVERRZ 001156' +EVGETD 001177' +EVMAC 001116' +EVNUM 001204' +EVOP 001131' +EVOPD 001141' +EVOPS 001135' +EVOPX 001154' +EVPUSH 001214' +EVTSTR 001173' +EVTSTS 001161' +EVXCT 001221' +EVXCT1 001236' +EXIT 047000 000012 +EXPRES 004556' +EXTER0 004004' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-5 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +EXTER1 004006' +EXTER2 004015' +EXTER3 004032' +EXTER4 004030' +EXTF 001000 SPD +EXTMP 014104' +EXTPNT 013742' +FF 000014 SPD +FINDEV 007412' +FINEXT 007376' +FINIS 007225' +FLDSW 400000 SPD +FR 000015 +FREE 013377' +FSNSW 100000 SPD +FTDISK 000001 SPD +GCHAR 006451' +GCHARQ 006450' +GETCHR 001363' +GETCS 001404' +GETCS1 001406' +GETCS2 001403' +GETDE1 000443' +GETDE2 000453' +GETDE3 000445' +GETDEL 000442' +GETDS 006345' +GETDS1 006377' +GETE 006600' +GETED 006604' +GETIOC 007511' +GETIT 005163' +GETSE0 007167' +GETSE1 007172' +GETSE2 007205' +GETSET 007142' +GETSY1 001055' +GETSY2 001056' +GETSY3 001057' +GETSYM 001043' +GETTOP 003533' +GETU 006612' +GETV 006620' +GOSET 006742' +GOSET1 006750' +GOSET2 006772' +GOTEND 007447' +GTSTOW 003015' +HDAS 014103' +HIGH 013735' +HIGHQ 004235' + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-6 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +HIGHQ1 004235' +HISEG0 003447' +HLPMES 007652' +HOUT 002712' +HT 000011 SPD +IB 000013 SPD +IBUF 013330' +IF 003601' +IFB0 003632' +IFB1 003633' +IFB2 003653' +IFB3 003652' +IFBLK 013400' +IFBLKA 013424' +IFCL 003717' +IFCLR 003736' +IFCLR1 003745' +IFDEF0 003667' +IFEX1 003615' +IFEX2 003753' +IFEXIT 003614' +IFIDN0 003677' +IFPASS 003627' +IFPOP 003607' +IFSET 003610' +IFXCT 003611' +IIISW 000000 SPD +INCND 013747' +INDEF 013745' +INDEV 013234' +INDEVI 013233' +INDIR 013343' +INDSW 020000 SPD +INHERE 000017' +INREP 013744' +INSERQ 013034' +INSERT 013036' +INSERZ 013035' +INSET 007242' +INSET1 007262' +INSET2 007277' +INSET3 007300' +INSET4 007312' +INSETI 007425' +INSRT1 013044' +INSRT2 013047' +INSRT3 013055' +INSRT4 013074' +INSRT5 013104' +INSRT6 013100' +INTENT 013743' +INTER0 003766' +INTER1 003767' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-7 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +INTER3 003777' +INTF 000400 SPD +INTXT 013746' +INZ 003356' +IO 000014 +IOBKTL 040000 SPD +IOCREF 000400 SPD +IODERR 200000 SPD +IODTER 100000 SPD +IOENDL 000200 SPD +IOIMPM 400000 SPD +IOIOPF 000020 SPD +IOMAC 010000 SPD +IOMSTR 200000 SPD +IONCRF 002000 SPD +IONSYM 013730' +IOP 004443' +IOPAGE 000100 SPD +IOPALL 004000 SPD +IOPROG 040000 SPD +IORPTC 000004 SPD +IORSET 003411' +IOSALL 000001 SPD +IOSCR 000001 SPD +IOSET 003404' +IOTLSN 000002 SPD +IOWD0 004710' +IRP0 006173' +IRP10 006175' +IRP20 006235' +IRPARG 013766' +IRPARP 013767' +IRPCF 013770' +IRPCNT 013765' +IRPEND 006325' +IRPPOI 013771' +IRPPOP 006331' +IRPSE1 006270' +IRPSE2 006277' +IRPSE3 006307' +IRPSE4 006312' +IRPSET 006254' +IRPSW 013772' +JOB41 000057' EXT +JOBAPR 007143' EXT +JOBDDT 000000 EXT +JOBERR 010206' EXT +JOBFF 007302' EXT +JOBFFI 014161' +JOBREL 010304' EXT +JOBS41 000122 INT +JOBSA 007013' EXT +JOBSYM 000000 EXT + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-8 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +JOBVER 000137 SPD +JUMP1 321640 000000 +JUMP2 325640 000000 +JUMPAD 321600 000000 +JUMPCM 321400 000000 +JUMPNC 325400 000000 +JUMPOC 325600 000000 +LABEL 000253' +LABEL0 000266' +LABEL1 000301' +LABEL2 000310' +LABEL3 000313' +LABEL4 000317' +LABEL5 000321' +LABEL6 000305' +LABEL7 000323' +LADR 013450' +LBUF 013454' +LBUFP 013453' +LELF 000002 SPD +LENGTH 000004 +LETTE1 000410' +LETTE2 000414' +LETTE3 000416' +LETTE4 000435' +LETTER 000407' +LF 000012 SPD +LIMBO 013452' +LIT0 003454' +LIT1 003456' +LIT20 003466' +LIT20A 003476' +LIT21 003477' +LIT22 003511' +LIT24 003522' +LITAB 013501' +LITABX 013502' +LITCNT 013506' +LITF 200000 SPD +LITHD 013504' +LITHDX 013505' +LITI 003526' +LITLBL 013774' +LITLVL 013773' +LITNUM 013507' +LITPG 013755' +LITSEQ 013756' +LLUKP1 002326' +LLUKP2 002312' +LLUKP3 002335' +LLUKP4 002346' +LLUKP5 002370' +LLUKP6 002343' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-9 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +LLUKP7 002334' +LLUKUP 002306' +LNSSW 000000 SPD +LOADSW 000020 SPD +LOC0 004203' +LOC01 004214' +LOC10 004222' +LOCA 013777' +LOCBLK 013776' +LOCO 014000' +LOOKL 003114' +LOOKUP 003111' +LOOKX 013510' +LOUT1 002205' +LOUT10 002230' +LOUT11 002271' +LOUT15 002241' +LOUT30 002272' +LOUT60 002277' +LOUT64 002303' +LPP 014003' +LPTBIT 040000 SPD +LPTSW 000002 SPD +LPTWID 000170 SPD +LST 000003 SPD +LSTBUF 013322' +LSTDEV 013223' +LSTDIR 013333' +LSTFIL 013207' +LSTINI 013222' +LSTPGN 014102' +LSTSE1 007070' +LSTSE2 007102' +LSTSE3 007136' +LSTSE4 007340' +LSTSE5 007342' +LSTSET 007067' +LSTSYM 014077' +M 006632' +MAC10 005735' +MAC14 005750' +MAC14A 005757' +MAC15 005766' +MAC16 005767' +MAC20 005776' +MAC21 006000' +MAC21A 006002' +MAC21B 006023' +MAC21C 006022' +MAC21D 006011' +MAC21E 006020' +MAC22 006032' +MAC23 006045' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-10 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +MAC24 006057' +MAC25 006060' +MAC26 006036' +MAC27 006043' +MAC30 006073' +MAC31 006074' +MAC40 006103' +MAC41 006114' +MAC42 006122' +MAC44 006123' +MACEN0 006134' +MACEN1 006151' +MACEN2 006152' +MACEN3 006167' +MACEND 006135' +MACENL 014071' +MACF 020000 SPD +MACLVL 014072' +MACPNT 014073' +MACSIZ 014117' +MDFF 000020 SPD +MFLSW 000010 SPD +MODA 014004' +MODLOC 014005' +MODO 014006' +MP 000016 +MREAD 006474' +MREADC 006527' +MREADI 006513' +MREADS 006516' +MRP 000013 +MSRCH 012573' +MSRCH2 012602' +MSTIME 047000 000023 +MTABIT 000020 SPD +MTAPSW 000004 SPD +MWLFLG 200000 SPD +MWP 000012 +N1 000767 +N2 000011 +NAME 007554' +NAME1 007477' +NAME2 007500' +NAME3 007506' +NCOLLS 013451' +NCOLS 000001 SPD +NEGCAL 000001 SPD +NEGSW 000200 SPD +NEXT 013511' +NOERW 003254' +NOOUTF 100000 SPD +NOUT 002665' +NOUT1 002670' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-11 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +NOUT2 002710' +NOUT3 002704' +NUM 000714' +NUM1 000717' +NUM10 000727' +NUM30 000741' +NUM31 000742' +NUM32 000745' +NUM40 000750' +NUM50 000774' +NUM52 001002' +NUM60 001013' +NUM62 001020' +NUMBUF 000002 SPD +NUMDF 000713' +NUMDN 001035' +NUMER1 000440' +NUMER2 000441' +NUMSW 020000 SPD +NUMUP 001027' +NUNAC 000054' +NUNAOS 000006 +NUNBLT 000004 +NUNCOM 000000' +NUNDEV 013226' +NUNDIR 013333' +NUNERM 000006' +NUNERR 000004' +NUNGO2 000002' +NUNGO3 000011' +NUNGO4 000000 +NUNINI 013225' +NUNLAC 000012 +NUNPNT 000010 +NUNSET 000017' +NUNTOP 000011 +OCT0 004557' +OCT1 004561' +OFFML 004244' +OFFORM 003447' +OFFSYM 004246' +ONC 003033' +ONC1 003035' +ONC2 003047' +ONERW 003251' +ONERW1 003252' +ONFORM 003447' +ONML 004243' +OP 004445' +OP1A 004464' +OP1B 004454' +OP1COD 012003' +OP1END 012002' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-12 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +OP1TAB 012306' +OP1TOP 011012' +OP2 004465' +OP2A 004533' +OP2A1 004546' +OP2A2 004554' +OP2TAB 012352' +OP3 004466' +OPD 004441' +OPD1 004437' +OPDEF0 004053' +OPDF 010000 SPD +OPHSH 000000 SPD +OPT1A 010757' +OPT1B 010764' +OPT1D 010771' +OPT1F 010777' +OPT1G 011002' +OPTSCH 010754' +OPTTAB 011007' +OTBUF 014007' +OTOD 010716' +OUTAB2 010570' +OUTAS0 003060' +OUTASC 003061' +OUTBIN 010404' +OUTC 010663' +OUTCR 010600' +OUTFF 010703' +OUTFF1 010674' +OUTFF2 010704' +OUTIM 001746' +OUTIM1 001745' +OUTIM2 001761' +OUTIML 002020' +OUTL 010607' +OUTL01 001574' +OUTL02 001576' +OUTL03 001575' +OUTL1 010650' +OUTL20 001606' +OUTL22 001630' +OUTL23 001634' +OUTL24 001637' +OUTL25 001645' +OUTL26 001651' +OUTL27 001655' +OUTL30 001674' +OUTL32 001704' +OUTLE2 001736' +OUTLE4 001742' +OUTLE8 001732' +OUTLER 001721' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-13 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +OUTLI 001774' +OUTLI1 002002' +OUTLI2 002003' +OUTLI3 002001' +OUTLIN 001556' +OUTLST 010667' +OUTML1 002045' +OUTPL 001657' +OUTSET 003103' +OUTSIX 003065' +OUTSQ 014011' +OUTSTR 051140 000000 +OUTSW 013512' +OUTSY1 003075' +OUTSYM 003074' +OUTTAB 010571' +P1 400000 SPD +PAGE0 010673' +PAGEN. 014013' +PAGENO 014100' +PASS1I 013250' +PASS20 003155' +PASS2I 013734' +PASS2X 014102' +PASS2Z 014077' +PDP 013513' +PDPERR 010321' +PEEK 006531' +PEEKM 006535' +PERIOD 000700' +PERNUM 000706' +PHASE0 004106' +PJOB 047000 000030 +PN1 004335' +PN2 004343' +PNCHSW 001000 SPD +PNTF 004000 SPD +POINT0 004652' +POINT2 004665' +POPOUT 000455' +PP 000017 +PPN 014054' +PPTEMP 014014' +PPTMP1 014015' +PPTMP2 014016' +PR 000002 SPD +PRGPTR 013731' +PRINT 010572' +PRMEND 012306' +PRMTBL 012206' +PRNAM 004326' + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-14 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +PRNTX0 003431' +PRNTX2 003434' +PRNTX4 003437' +PRNUM 010323' +PROGN1 007605' +PROGN2 007606' +PROGN3 007607' +PROGNP 007605' +PS 000003 SPD +PSEND0 005003' +PSEND1 005014' +PSEND2 005023' +PSEND3 005027' +PSEND4 005033' +PSEND5 005115' +PSEND6 005107' +PSENDX 005114' +PSNDER 005165' +PTPBIN 010405' +PTR 000104 SPD +PURGE0 004410' +PURGE2 004421' +PURGE3 004433' +PURGE4 004434' +PURGE5 004435' +PV 000001 SPD +QEXT 004041' +QSRCH 012603' +QUAL 000523' +QUAL2 000540' +QUAL2A 000544' +QUAL8 000537' +QUALL 000550' +QUOTE 000465' +QUOTE0 000461' +QUOTE1 000502' +QUOTE2 000501' +QUOTES 000456' +R1BBLK 014025' +R1BCHK 014024' +R1BCNT 014023' +R1BDM1 010457' +R1BDMP 010447' +R1BI 010465' +R1BLDR 003177' +R1BLOC 014047' +R1BSW 004000 SPD +RADIX0 003375' +RADX50 004760' +RADXSW 040000 SPD +RC 000011 SPD +RCOUNT 014075' +RCPNTR 003372' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-15 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +READ 010503' +READ0 010502' +READ1 010505' +READ1A 010525' +READ2 010536' +READ3 010545' +REC2 007437' +RECCNT 013514' +REFDEC 006546' +REFINC 006543' +RELBL1 000657' +RELBLE 000641' +RELF 000001 SPD +RELLOC 014001' +RELOC0 004227' +REMAR0 003450' +REMOV1 013116' +REMOVE 013115' +RENTSW 000000 SPD +REPCNT 014017' +REPEA0 005264' +REPEA1 005266' +REPEA2 005270' +REPEA4 005301' +REPEA7 005326' +REPEA8 005330' +REPEND 005332' +REPEXP 014020' +REPO 005365' +REPO1 005375' +REPPG 013757' +REPPNT 014021' +REPSEQ 013760' +REPZ 005346' +REPZ1 005354' +REPZ2 005362' +RESET 047000 000000 +RIM0 010354' +RIM1SW 000100 SPD +RIMFIN 003345' +RIMLOC 014050' +RIMSW 000400 SPD +ROUT 010360' +ROUT1 010375' +ROUT6 010471' +RP 013250' +RPGDEV 013231' +RPGINI 013230' +RPGLOS 007017' +RPGLUP 006712' +RPGS1 007001' +RPGS2 006725' +RPGS2A 006726' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-16 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +RPGSET 006703' +RPOLVL 014022' +RSTRXS 007467' +RSW0 001417' +RSW1 001421' +RSW2 001423' +RSW3 001432' +RUN 047000 000035 +RX 000015 SPD +SAVBLK 013515' +SAVERC 013526' +SAVEXS 007473' +SAVFF 014105' +SBUF 013527' +SCHERR 005260' +SDEL 000003 +SEARCH 012713' +SEQNO 013214' +SEQNO2 014101' +SERCH0 005240' +SETDDT 047000 000002 +SIXB10 004566' +SIXB20 004570' +SKELI 006414' +SKELI1 006413' +SKELW 006425' +SKELW1 006437' +SKELWL 006427' +SKPINC 051540 000000 +SLASH 007510' +SOUT 002165' +SOUT1 002377' +SOUT10 002421' +SOUT15 002430' +SOUT20 002503' +SOUT50 002467' +SOUT60 002502' +SOUTC 002512' +SPTR 000010 SPD +SQB1 000627' +SQB2 000630' +SQB3 000571' +SQB4 000603' +SQB4A 000615' +SQB5 000570' +SQB6 000622' +SQBRK 000557' +SQFLG 014067' +SQOZ1 004772' +SQOZE 004770' +SQUOT0 000503' + + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-17 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +SQUOTE 000507' +SRCH1 012715' +SRCH2 012717' +SRCH3 012725' +SRCH4 012735' +SRCH5 012736' +SRCH6 012752' +SRCH7 012740' +SRCHI 013125' +SRCHK2 013032' +SRCHKO 013004' +SRCHN1 012774' +SRCHNO 012761' +SRCHOK 013005' +SRCHX 013547' +SSRCH 012610' +SSRCH1 012613' +SSRCH2 012617' +SSRCH3 012620' +STCODE 013557' +STMN2A 000146' +STMN8A 000231' +STMN8B 000217' +STMN8C 000221' +STMN8D 000216' +STMNT 000125' +STMNT1 000127' +STMNT2 000130' +STMNT3 000157' +STMNT4 000161' +STMNT5 000167' +STMNT7 000200' +STMNT8 000207' +STMNT9 000201' +STOL06 001303' +STOL08 001310' +STOL10 001311' +STOL12 001323' +STOL14 001335' +STOL22 001342' +STOL23 001343' +STOL24 001344' +STOL26 001355' +STOLER 001270' +STOLIT 001273' +STOPI0 006321' +STORIT 005160' +STOUT 000237' +STOUT1 000246' +STOUTS 000236' +STOW 002751' +STOW10 002761' +STOW20 002763' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-18 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +STOWI 003003' +STOWRC 013627' +STOWT 003021' +STOWT1 003026' +STOWZ 002750' +STOWZ1 002750' +STPX 013555' +STPY 013556' +SUBTL 011645' +SUBTT0 004311' +SUBTT1 004315' +SUBTT3 004317' +SUBTTX 013550' +SUPRBT 000004 SPD +SUPRE0 004250' +SUPRE1 004255' +SUPRS1 004264' +SUPRSA 004261' +SVSTOW 003007' +SVSYM 013551' +SW0 007630' +SW1 007631' +SWITC0 007623' +SWITCH 007624' +SWTAB 010053' +SWTABT 010056' +SX 000004 +SYMBCK 013007' +SYMBLK 013400' +SYMBOL 013552' +SYMCNT 013554' +SYMF 400000 SPD +SYMNUM 012201' +SYMTOP 013553' +SYN0 004352' +SYN1 004356' +SYN2 004357' +SYN3 004373' +SYN4 004404' +SYNF 040000 SPD +TABI 013213' +TABLE 010211' +TABLND 010240' +TABP 013677' +TAG 013211' +TAGF 200000 SPD +TAGINC 014051' +TAPE0 003373' +TBUF 013701' +TCNT 013700' +TERM 007560' +TERM1 007565' +TIMOU1 010710' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-19 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +TIMOUT 010707' +TIO 000006 SPD +TIOCLD 020000 SPD +TIOLE 002000 SPD +TIORW 001000 SPD +TITLE0 004276' +TMPCOR 047000 000044 +TMPSW 010000 SPD +TNODE 200000 SPD +TSTBIN 010415' +TSTLST 010424' +TTCLTH 000016 SPD +TTCTBL 012555' +TTYBIT 000010 SPD +TTYERR 010113' +TTYIN 010076' +TTYSW 000001 SPD +TWSEG0 003447' +TXTPG 013761' +TXTSEQ 013762' +TYO 010252' +TYPERR 013727' +TYPM2 010262' +TYPM2A 010267' +TYPM3 010270' +TYPMS1 010242' +TYPMSG 010241' +UNDF 002000 SPD +UNIERR 005262' +UNIPTR 014135' +UNISCH 014055' +UNISHX 014147' +UNISIZ 014120' +UNISYM 005207' +UNITBL 014123' +UNITOP 014121' +UNIV0 005167' +UNIVNO 014122' +UNIVSN 013733' +UNVERR 005205' +UOUT 002074' +UOUT1 002104' +UOUT10 002122' +UOUT12 002112' +UOUT13 002116' +UOUT2 002111' +UOUT30 002126' +UPDAT1 013157' +UPDAT2 013164' +UPDAT3 013155' +UPDAT4 013171' +UPDAT5 013175' +UPDATE 013137' + + MACRO V.46(52) MACRO 10 05:51 24-APR-78 PAGE 181-20 +MACRO 10 24-APR-78 02:11 SYMBOL TABLE + +UTPCLR 047000 000013 +V 000006 +VAR0 003546' +VARA 003551' +VARB 003556' +VARF 000100 SPD +VARHD 013477' +VARHDX 013500' +VBUF 013243' +VCUSTO 000000 SPD +VECREL 014052' +VECTOR 014053' +VEDIT 000000 SPD +VMACRO 000010 SPD +VOUT 002717' +VT 000013 SPD +VUPDAT 000000 SPD +WAIT 072000 000000 +WCHAR 006456' +WCHAR1 006456' +WCHARQ 006456' +WCOUNT 014076' +WFWSW 000000 SPD +WWORD 006462' +WWRXE 006466' +WWRXX 014074' +XADD 001244' +XALL0 003403' +XCEED 010277' +XCEED1 010305' +XCEED2 010317' +XCEEDS 010276' +XDIV 001247' +XDIV1 001251' +XLRW 001264' +XMUL 001253' +XMUL1 001256' +XPUNG0 004266' +XSUB 001241' +XTRA 000004 SPD +XWD0 004672' +XWD10 004704' +XWD5 004676' +ZA 100000 +ZAL 300000 + EEEEEEEEEEEEEEE DDDDDDDDDDDD IIIIIIIII TTTTTTTTTTTTTTT OOOOOOOOO RRRRRRRRRRRR +EEEEEEEEEEEEEEE DDDDDDDDDDDD IIIIIIIII TTTTTTTTTTTTTTT OOOOOOOOO RRRRRRRRRRRR +EEEEEEEEEEEEEEE DDDDDDDDDDDD IIIIIIIII TTTTTTTTTTTTTTT OOOOOOOOO RRRRRRRRRRRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEEEEEEEEEEE DDD DDD III TTT OOO OOO RRRRRRRRRRRR +EEEEEEEEEEEE DDD DDD III TTT OOO OOO RRRRRRRRRRRR +EEEEEEEEEEEE DDD DDD III TTT OOO OOO RRRRRRRRRRRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEEEEEEEEEEEEEE DDDDDDDDDDDD IIIIIIIII TTT OOOOOOOOO RRR RRR +EEEEEEEEEEEEEEE DDDDDDDDDDDD IIIIIIIII TTT OOOOOOOOO RRR RRR +EEEEEEEEEEEEEEE DDDDDDDDDDDD IIIIIIIII TTT OOOOOOOOO RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :EDITOR.LST [8,296] Created: 20-April-1967 05:52:00 Printed: 24-April-1978 05:53:40 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1338 +File will be deleted after printing + +EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 3 +EDITOR MAC 24-APR-78 03:01 DECEDIT PARAMETERS + + TITLE EDITOR V.003 1 APRIL 1968 + SUBTTL DECEDIT PARAMETERS + + DEFINE ERR (A) < JSR A,ERRORX> + DEFINE TSTRIN (A) < EXP "A"+"A"+1> + + 000001 S0=1 + 000002 S1=2 + 000004 S2=4 + 000010 S3=10 + 000040 S4=40 + 000020 S5=20 + 000100 S6=100 + 000200 S7=200 + 000400 S8=400 + 000003 PDP=3 + 000004 FL=4 + 000011 INDEX=11 + 000012 WC=12 + 000013 C=13 + 000014 COTP=14 + 000005 IPT=5 + 000006 TPT=6 + 000010 P=10 + 000015 SINDEX=15 + 000016 CINDEX=16 + 000017 LAST=17 + 000002 TYP=2 + 000003 DT=3 + OPDEF EXIT [POPJ PDP,] + OPDEF CAL [PUSHJ PDP,] + OPDEF SAVE [PUSH PDP,] + OPDEF UNSAVE [POP PDP,] + EXTERNAL JOBFF + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 4 +EDITOR MAC 24-APR-78 03:01 DECTAPE IO - AUGUST 25, 1965 + + SUBTTL DECTAPE IO - AUGUST 25, 1965 + + 001000 FOPEN=1000 + 000001 AC1=1 + 000002 AC2=2 + 000005 AC3=5 + 000006 AC4=6 + + 000000' 607200 000001 FILLB: TLNN FL,1; IS BUFFER LOADED + 000001' 254000 000041' JRST FILLB1; NO, SO LOAD IT + 000002' 200540 001060' MOVE C,WBC; GET BUFFER COUNT + 000003' 307540 000177 CAIG C,177; IS IT GETTIN FULL + 000004' 263140 000000 ATSALL: EXIT; NO + 000005' 620200 000400 TRZ FL,S8; SET FIRST BLOCK FLAG TO FALSE + 000006' 660200 000010 TRO FL,S3; AND MODIFIED FLAG TO TRUE + 000007' 201100 001064' MOVEI AC2,WB; GET WORKING BUFFER ADDRESS + 000010' 201240 000001 MOVEI AC3,1; SEQUENCE NUMBER TEST + 000011' 271100 000125 ADDI AC2,125; DUMP ABOUT 2/3 OF BUFFER + 000012' 616242 000000 TDNN AC3,0(AC2); BUT NOT A FRACTIONAL LINE + 000013' 364100 000012' SOJA AC2,.-1; HUNT FOR BEGIN OF LINE + 000014' 550400 000135' HRRZ P,THSBLK; UPDATE PREVIOUS BLOCK NUMBER + 000015' 073140 000136' UGETF DT,IAMTEM; NEXT FREE BLOCK + 000016' 075150 000000 USETO DT,0(P); PREPARE TO DUMP THIS BLOCK + 000017' 200400 000136' MOVE P,IAMTEM; AND PREPARE NEXT BLOCK + 000020' 200240 001050' MOVE AC3,DTOBUF; SET UP BLT + 000021' 516405 000001 HRLZM P,1(AC3); LINK TO NEXT DECTAPE BLOCK + 000022' 505240 001064' HRLI AC3,WB; SOURCE + 000023' 271240 000002 ADDI AC3,2; +2 + 000024' 200040 000002 MOVE AC1,AC2; LAST + 000025' 275040 001064' SUBI AC1,WB; AND MAKE A COUNT OF IT + 000026' 274540 000001 SUB C,AC1; TOTAL REMAINING WORDS + 000027' 202540 001060' MOVEM C,WBC; SET NEW COUNT + 000030' 271045 777777 ADDI AC1,-1(AC3); SETUP FOR BLT + 000031' 260140 000122' CAL DUMX; TRANSFER AND DUMP BLOCK + 000032' 201240 001064' MOVEI AC3,WB; GET DEST FOR MOVE UP + 000033' 504240 000002 HRL AC3,AC2; AND SOURCE + 000034' 200040 000005 MOVE AC1,AC3; GENERATE LAST ADDRESS + 000035' 271053 000000 ADDI AC1,(C); FROM COUNT + 000036' 251241 000000 BLT AC3,(AC1); ON TOAST + 000037' 250400 000135' EXCH P,THSBLK; SET NEW BLOCK + 000040' 254000 000000' JRST FILLB; GO AGAIN + + 000041' 607200 001000 FILLB1: TLNN FL,FOPEN; IS A FILE OPEN + ERR 7; NO, SO *NFO* + 000042' 264340 000162' JSR 7,ERRORX + 000043' 661200 000001 TLO FL,1; SET TO FILLED BUFFER + 000044' 254000 000075' JRST GETF; AND GET THE FIRST BLOCK + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 5 +EDITOR MAC 24-APR-78 03:01 DECTAPE IO - AUGUST 25, 1965 + + 000045' 602200 000001 GET: TRNE FL,S0; FORWARD OR REVERSE + 000046' 254000 000073' JRST GETL; REVERSE + + 000047' 602200 000020 GETN: TRNE FL,S5; IS THERE ANY MORE + 000050' 263140 000000 EXIT; NO + 000051' 554000 001063' HLRZ WBF; GET LINK + 000052' 260140 000106' CAL DUMPB; OUTPUT BLOCK + 000053' 200400 000135' MOVE P,THSBLK; SAVE PREVIOUS FLOCK NUMBER + 000054' 620200 000400 TRZ FL,S8; SET FIRST BLOCK FLAG TO FALSE + 000055' 552000 000135' GET0: HRRZM THSBLK; SAVE CURRENT BLOCK NUMBER + 000056' 075160 000135' USETO DT,@THSBLK; SER OUTPUT FOR PRESENT BLOCK + + 000057' 066140 000000 SLURP: INPUT DT,0; INPUT A NEW BLOCK + 000060' 554000 001063' HLRZ WBF; GET LINK + 000061' 336000 000000 SKIPN; WE DONT LIKE ZERO LINKS + 000062' 660200 000020 TRO FL,S5; SO WE SET A FLAG TO REMIND US + 000063' 550000 001063' HRRZ WBF; GET COUNT + 000064' 202000 001060' MOVEM WBC; AND SAVE IT + 000065' 606200 000020 TRNN FL,S5; WAS IT END OF FILE + 000066' 332000 000000 SKIPE; EMPTY BLOCK + 000067' 263140 000000 EXIT; END OF FILE OR NON-EMPTY BLOCK + 000070' 554000 001063' HLRZ WBF; EMPTY BLOCK - GET LINK + 000071' 606200 000001 TRNN FL,S0; DIRECTION CHECK + 000072' 254000 000055' JRST GET0; FORWARD + + 000073' 260140 000106' GETL: CAL DUMPB; REVERSE - GET LAST BLOCK-SAVE THIS ONE + 000074' 326400 000100' JUMPN P,GETL1; IS LAST BLOCK AVAILABLE + 000075' 550400 001013' GETF: HRRZ P,FBNUM; NO, SO GET FIRST ONE + 000076' 620200 000021 TRZ FL,S0+S5; SET FORWARD AND END + 000077' 664200 000400 TROA FL,S8; SET FIRST BLOCK AND SKIP + 000100' 620200 000420 GETL1: TRZ FL,S5+S8; SET NON-END AND NON-FIRST + 000101' 074150 000000 USETI DT,(P); ESTABLISH INPUT BLOCK NUMBER + 000102' 075150 000000 USETO DT,(P); AND OUTPUT BLOCK NUMBER + 000103' 202400 000135' MOVEM P,THSBLK; UPDATE CURRENT BLOCK NUMBER + 000104' 402000 000010 SETZM P; AND ZERO PREVIOUS BLOCK NUMBER + 000105' 254000 000057' JRST SLURP; AND INPUT THE BLOCK + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 6 +EDITOR MAC 24-APR-78 03:01 DECTAPE IO - AUGUST 25, 1965 + + 000106' 260140 000000' DUMPB: CAL FILLB; SPLIT BLOCKS IF THE OVER-RUN + 000107' 626200 000010 TRZN FL,S3; ANY MODS MADE + 000110' 263140 000000 EXIT; NO + 000111' 200100 001050' MOVE AC2,DTOBUF; POINTER TO BUFFERS + 000112' 201242 000002 MOVEI AC3,2(AC2); FIRST WORD ADDRESS + 000113' 505240 001064' HRLI AC3,WB; FIRST DATA WORD + 000114' 554040 001063' HLRZ AC1,WBF; BLOCK NUMBER + 000115' 336000 000001 SKIPN AC1; LAST BLOCK + 000116' 370000 000001 SOS AC1; YES, SO EXTEND + 000117' 506042 000001 HRLM AC1,1(AC2); INTO LINK + 000120' 201042 000001 MOVEI AC1,1(AC2); PREPARE BLT + 000121' 270040 001060' ADD AC1,WBC; SIZE OF BLT + 000122' 251241 000000 DUMX: BLT AC3,(AC1); BLOCK UP SUBROUTINE + 000123' 542040 001051' HRRM AC1,DTOBF1; LAST ADDRESS + 000124' 067140 000000 OUTPUT DT,0; DUMP IT + 000125' 061140 740000 STATO DT,740000; CHECK FOR DEVICE ERROR + 000126' 263140 000000 EXIT; ALL IS GOOD + 000127' 476000 000004 SETOM FL ; DDE ERROR + ERR 12; *DDE* + 000130' 264500 000162' JSR 12,ERRORX + + 000131' 603200 001000 FINISH: TLNE FL,FOPEN; IF A FILE IS OPEN + 000132' 260140 000106' CAL DUMPB; DUMP IT + 000133' 071140 000000 FINIS2: RELEAS DT,0; RELEASE THE TAPE + 000134' 254000 001030' JRST INITIX; AND GO BACK TO SETUP + + 000135' 000000 000000 THSBLK: 0; PRESENT BLOCK NUMBER + 000136' 000000 000000 IAMTEM: 0; TEMPORARY + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 9 +EDITOR MAC 24-APR-78 03:01 CONTROL - AUGUST 25, 1965 + + SUBTTL CONTROL - AUGUST 25, 1965 + ;MAIN LISTEN AND DISPATCH FOR EDITOR CONTROL MODE + 000137' 260140 000612' OUTTER: CAL GETCHR; GET ONE CHARACTER + 000140' 306540 000015 CAIN C,15; INITIAL CARRIAGE RETURNS + 000141' 254000 000137' JRST OUTTER; ARE IGNORED + 000142' 306540 000111 CAIN C,"I" + 000143' 254000 000205' JRST INSE + 000144' 306540 000104 CAIN C,"D" + 000145' 254000 000425' JRST DELETE + 000146' 306540 000120 CAIN C,"P" + 000147' 254000 000471' JRST PRINT + 000150' 306540 000105 CAIN C,"E" + 000151' 254000 000131' JRST FINISH + 000152' 302540 000033 CAIE C,33; ALTERNATE ALTMOD + 000153' 306540 000175 CAIN C,175; THE REGULAR ALTMOD + 000154' 254000 000522' JRST PNEXT + 000155' 306540 000123 CAIN C,"S" + 000156' 254000 000657' JRST DECINI + ERR 1; ILLEGAL COMMAND + 000157' 264040 000162' JSR 1,ERRORX + ;OUTPUT A CARRIAGE RETURN + 000160' 201440 000171' CRT: MOVEI INDEX,CRM; PICK UP THE POINTER + 000161' 254000 000601' JRST OTLINE; OUTPUT CRT-LF-* + + ;ERROR PRINT + 000162' 000000 000000 ERRORX: 0; CALLED BY JSR X,ERRORX + 000163' 550440 000162' HRRZ INDEX,ERRORX; WHERE X IS THE ERROR NUMBER + 000164' 135440 000204' LDB INDEX,EPT; EXTRACT THE X + 000165' 201451 000171' MOVEI INDEX,ERT-1(INDEX) + 000166' 201140 001304' ERROX1: MOVEI PDP,PDSTAK; INITIALIZE PUSHDOWN + 000167' 260140 000601' ERROX2: CAL OTLINE; OUTPUT ERROR MESSAGE + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 10 +EDITOR MAC 24-APR-78 03:01 CONTROL - AUGUST 25, 1965 + + 000170' 254000 001035' JRST COMLEV; AND A CARRIAGE RETURN - EXIT + ;ERROR MESSAGES ET.AL. THESE MUST NOT BE MOVED ABOUT + ;SINCE THE PRINT ROUTINE DEPENDS ON THE BIT 35 OF THE + ;NEXT MESSAGE TO TERMINATE THE PRESENT ONE + + 000171' 064245 200000 CRM: OCT 64245200000; THE CARRIAGE RETURN-LINE FEED-* + 000172' ERT: TSTRIN <*ILC*>; ILLEGAL COMMAND + 000172' 252231 441525 EXP "*ILC*"+"*ILC*"+1 + TSTRIN <*NLN*>; NON-EXISTENT LINE + 000173' 252351 447125 EXP "*NLN*"+"*NLN*"+1 + TSTRIN <*ILS*>; ILLEGAL SEQUENCE + 000174' 252231 451525 EXP "*ILS*"+"*ILS*"+1 + TSTRIN <*ILR*>; ILLEGAL REFERENCE + 000175' 252231 451125 EXP "*ILR*"+"*ILR*"+1 + TSTRIN <*UNA*>; UNIT NOT AVAILABLE + 000176' 252531 640525 EXP "*UNA*"+"*UNA*"+1 + TSTRIN <*DCE*>; DIRECTORY CAPACITY EXCEEDED + 000177' 252110 342525 EXP "*DCE*"+"*DCE*"+1 + TSTRIN <*NFO*>; NO FILE OPEN + 000200' 252350 647525 EXP "*NFO*"+"*NFO*"+1 + TSTRIN <*FAU*>; FILE NAME ALREADY IN USE + 000201' 252150 152525 EXP "*FAU*"+"*FAU*"+1 + TSTRIN <*NCF*>; NOT A CURRENT FILE + 000202' 252350 343125 EXP "*NCF*"+"*NCF*"+1 + TSTRIN <*DDE*>; DEVICE DATA ERROR + 000203' 252110 442525 EXP "*DDE*"+"*DDE*"+1 + 000204' 270411 777777 EPT: POINT 4,-1(INDEX),12; THE ERROR PRINT DEPENDS + ;ON THE 1 IN BIT 35 HERE + ;COMMUNICATIONS + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 12 +EDITOR MAC 24-APR-78 03:01 EDITOR - AUGUST 25, 1965 + + SUBTTL EDITOR - AUGUST 25, 1965 + + ;INSERT LINE(S) + 000205' 260140 000616' INSE: CAL GETSEQ; GET THE SEQUENCE NUMBER AND STEP + 000206' 202000 000016 MOVEM CINDEX; THIS INSTR SKIPED IF ONLY ONE ARG + 000207' 254000 000216' JRST INSE3; PROCESS IT + 000210' 260140 000333' INSE2: CAL FIND; TOP OF THE LOOP - SEARCH FOR THE LINE + 000211' 316651 000000 CAMN SINDEX,(INDEX); EXACT MATCH? + ERR 4; YES, *ILR* + 000212' 264200 000162' JSR 4,ERRORX + 000213' 260140 000252' CAL BACK1; BACKUP TO LAST LINE + 000214' 312000 000017 CAME LAST; IS IT INDEED THE LAST ONE WE PUT IN + ERR 3; NO, *ILS* + 000215' 264140 000162' JSR 3,ERRORX + 000216' 260140 000333' INSE3: CAL FIND; GET THE LINE + 000217' 260140 000541' CAL OTSEQ; OUTPUT THE SEQUENCE NUMBER + 000220' 260140 000547' CAL GETLIN; GET THE INPUT LINE + 000221' 254000 000137' JRST OUTTER; ALT MODE + 000222' 260140 000227' CAL INSED; INSERT AND DELETE + 000223' 202640 000017 MOVEM SINDEX,LAST; SAVE AWAY THIS LINE NUMBER + 000224' 202640 001056' MOVEM SINDEX,FIRST + 000225' 260140 000305' CAL ASCIA; STEP SEQUENCE + 000226' 254000 000210' JRST INSE2; LOOP BACK FOR NEXT LINE + + 000227' 550000 000014 INSED: HRRZ COTP; GET THE SIZE OF THE LINE + 000230' 201040 000000 MOVEI 1,0; SETUP DIRECTION FLAG + 000231' 311000 000012 CAML WC; IF LINE SIZE IS GREATER-EQUAL THAN NEW + 000232' 201040 000001 MOVEI 1,1; SET FLAG TO 1 + 000233' 312000 000012 CAME WC; IF OLD LINE IS NON-NULL + 000234' 254000 000264' JRST INSEG; DELETE IT + 000235' 322500 000245' INSE1: JUMPE WC,INSE16; NULL SIZE TO INPUT + 000236' 554440 000014 HLRZ INDEX,COTP; GET LINE ADDRESS + 000237' 270440 000012 ADD INDEX,WC; AND SIZE + 000240' 547000 000014 HLRS COTP; AND COUNT + 000241' 505600 001313' HRLI COTP,TTB; SET SOURCE + 000242' 200040 000014 MOVE 1,COTP; READY FOR BLT + 000243' 251611 777777 BLT COTP,-1(INDEX); MOVE IN THE NEW LINE + 000244' 200600 000001 MOVE COTP,1; RESTORE COTP + 000245' 660200 000110 INSE16: TRO FL,S3+S6; SET MOD FLAGS - GENERAL EXIT + 000246' 201040 001064' CLEARE: MOVEI 1,WB; CLEAR LAST BUFFER WORD + 000247' 270040 001060' ADD 1,WBC; END OF BUFFER + 000250' 402001 000000 SETZM (1); SET TO ZERO + 000251' 263140 000000 EXIT; GO AWAY + + ;BACK UP LINE POINTER + 000252' 302440 001064' BACK1: CAIE INDEX,WB; IS THIS THE FIRST LINE IN THE BUFFER + 000253' 254000 000262' JRST BACK; NO, SO NORMAL PROCESS + 000254' 660200 000001 TRO FL,S0; WE MUST GET THE PREVIOUS BLOCK + 000255' 260140 000045' CAL GET; INPUT IT - THIS WILL ALWAYS WORK + 000256' 270440 001060' ADD INDEX,WBC; LAST LINE + 000257' 254000 000262' JRST BACK; NOW WE BACK IT UP + 000260' 200011 000000 MOVE (INDEX); TOP OF LOOP - PICK UP DATA WORD + 000261' 606000 000001 TRNN 1; BIT ONE MAKES IT A SEQUENCE N + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 12-1 +EDITOR MAC 24-APR-78 03:01 EDITOR - AUGUST 25, 1965 + + 000262' 364440 000260' BACK: SOJA INDEX,.-2; COUNT IT BACK + 000263' 263140 000000 EXIT + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 13 +EDITOR MAC 24-APR-78 03:01 EDITOR - AUGUST 25, 1965 + + 000264' 260140 000414' INSEG: CAL CSIZE; COMPUTE SIZE OF XFER + 000265' 322000 000276' JUMPE INSEX; ZERO SIZE XFER + 000266' 326040 000272' JUMPN 1,INSER; FORWARD BLT + 000267' 507000 000000 HRLS 0; REVERSE XFER + 000270' 270440 000000 ADD INDEX,0; SET UP POINTER WORD + 000271' 553000 000000 HRRZS 0; READY TO GO + 000272' 202440 000013 INSER: MOVEM INDEX,C; PROTECT XFER WORD + 000273' 251551 000000 BLT C,(INDEX); XFER ONE WORD + 000274' 256001 000303' XCT ITAB(1); STEP UP OR DOWN + 000275' 365000 000272' SOJGE INSER; IF NOT DONE, LOOP BACK + 000276' 550000 000014 INSEX: HRRZ COTP; SETUP SIZE + 000277' 274000 000012 SUB WC; OF NEW BLOCK + 000300' 250000 001060' EXCH WBC; + 000301' 276000 001060' SUBM WBC; NOW NEW BLOCK SIZE IS IN WBC + 000302' 254000 000235' JRST INSE1; ALL DONE - GO BACK + + 000303' 274440 000332' ITAB: SUB INDEX,K5; SHRINK + 000304' 270440 000332' ADD INDEX,K5; GROW + + ;THE ASCII ADDER + + 000305' 261140 000016 ASCIA: SAVE CINDEX; PROTECT THE STEP + 000306' 200340 000015 MOVE 7,SINDEX + 000307' 404700 000327' AND CINDEX,K2; MASK OUT 60S + 000310' 242700 000001 LSH CINDEX,1; + 000311' 434640 000331' IOR SINDEX,K4; + 000312' 270640 000326' ADD SINDEX,K1; + 000313' 270700 000015 ADD CINDEX,SINDEX; EXCESS 166 ADDITION + 000314' 404700 000330' AND CINDEX,K3; MASK OUT CARRY BITS + 000315' 200640 000331' MOVE SINDEX,K4; + 000316' 404640 000016 AND SINDEX,CINDEX; + 000317' 240640 777775 ASH SINDEX,-3; GIVES 000 WHERE CARRY HAPPENED, 006 + 000320' 276700 000015 SUBM CINDEX,SINDEX; CONVERT TO EXCESS 0 OR 60 + 000321' 434640 000331' IOR SINDEX,K4; CONVERT TO EXCESS 60 + 000322' 262140 000016 UNSAVE CINDEX; RESTORE THE STEP + 000323' 311340 000015 CAML 7,SINDEX; IF 99999, DON'T GO TO 00009 + 000324' 264140 000162' ERR 3^ JSR 3,ERRORX^ + 000325' 263140 000000 EXIT; LEAVE + + 000326' 432150 643214 K1: OCT 432150643214; 106 + 000327' 036170 743617 K2: OCT 036170743617; 017 + 000330' 375767 737576 K3: OCT 375767737576; 077 + 000331' 301406 030141 K4: TSTRIN <00000>^ EXP "00000"+"00000"+1^ + 000332' 000001 000001 K5: XWD 1,1; +,- ONE TO BOTH HALVES + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 14 +EDITOR MAC 24-APR-78 03:01 EDITOR - AUGUST 25, 1965 + + 000333' 260140 000000' FIND: CAL FILLB; FILL THE BUFFER + 000334' 620200 000041 FIND1: TRZ FL,S0+S4; FORWARD SEARCH AND INITIAL SEARCH + 000335' 550000 001060' FIND2: HRRZ WBC; GET THE BUFFER SIZE + 000336' 322000 000360' JUMPE FINDA; EMPTY BLOCK + 000337' 201440 001064' MOVEI INDEX,WB; GET THE DATA ADDRESS + 000340' 200000 001064' MOVE WB; GET THE FIRST DATA WORD + 000341' 313000 000015 CAMLE SINDEX; ARE WE PAST THE LINE + 000342' 254000 000360' JRST FINDA; YES, REVERSE + 000343' 316000 000015 CAMN SINDEX; EXACT MATCH + 000344' 254000 000402' JRST FINDEQ; YES, BE HAPPY + 000345' 270440 001060' ADD INDEX,WBC; FORM ADDRESS OF LAST DATA WORD + 000346' 260140 000262' CAL BACK; FIND ITS SEQUENCE NUMBER + 000347' 313000 000015 CAMLE SINDEX; IT THE LINE IN THIS BLOCK + 000350' 254000 000372' JRST FIND3A; YES, INVESTIGATE FURTHER + 000351' 316000 000015 CAMN SINDEX; EXACT MATCH + 000352' 254000 000402' JRST FINDEQ; YES + 000353' 602200 000020 FINDX: TRNE FL,S5; IS THIS LAST BLOCK + 000354' 254000 000367' JRST FINDC; YES, SO EXIT WITH THIS ADDRESS + 000355' 660200 000040 TRO FL,S4; SCANNING HAS STARTED + 000356' 620200 000001 TRZ FL,S0; AND GO FORWARD + 000357' 254000 000365' JRST FIND4; AWAY WE GO + + 000360' 201440 000000 FINDA: MOVEI INDEX,0; SETUP FOR REVERSE + 000361' 606200 000040 TRNN FL,S4; HAVE WE BEEN HERE BEFORE + 000362' 602200 000400 TRNE FL,S8; OR IS IT THE FIRST BLOCK + 000363' 254000 000370' JRST FINDR; YES, SO USE THIS ADDRESS + 000364' 660200 000001 TRO FL,S0; OTHERWISE, GO BACK ONE BLOCK + 000365' 260140 000045' FIND4: CAL GET; GET THE BLOCK + 000366' 254000 000335' JRST FIND2; SEARCH FOR IT + + 000367' 550440 001060' FINDC: HRRZ INDEX,WBC; TAIL OF BLOCK IF ENTERED HERE + 000370' 271440 001064' FINDR: ADDI INDEX,WB; HEAD OF BLOCK IF ENTERED HERE + 000371' 254000 000400' JRST FIND3; AND RETURN + + 000372' 201440 001060' FIND3A: MOVEI INDEX,WBC; WE WISH TO SCAN THIS BLOCK FOR + 000373' 260140 000406' CAL FINDES; THIS LINE - COMPUTE LINE SIZE + 000374' 316000 000015 CAMN SINDEX; EXACT MATCH + 000375' 254000 000402' JRST FINDEQ; YES, WELL, GOOD + 000376' 317000 000015 CAMG SINDEX; HAVE WE PASSED IT + 000377' 344440 000373' AOJA INDEX,FIND3A+1; NO, SO CONTINUE + 000400' 514600 000011 FIND3: HRLZ COTP,INDEX; RETURN THE ADDRESS OF THE LINE + 000401' 254000 000246' JRST CLEARE; EXIT + + 000402' 514600 000011 FINDEQ: HRLZ COTP,INDEX; FOUND THE DESIRED LINE + 000403' 260140 000406' CAL FINDES; COMPUTE ITS SIZE + 000404' 554440 000014 HLRZ INDEX,COTP; SET UP INDEX + 000405' 254000 000246' JRST CLEARE; AND EXIT + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 15 +EDITOR MAC 24-APR-78 03:01 EDITOR - AUGUST 25, 1965 + + 000406' 350000 000014 FINDES: AOS COTP; FIND SIZE OF LINE + 000407' 200011 000001 MOVE 1(INDEX); FIND NEXT SEQUENCE NUMBER + 000410' 350000 000011 AOS INDEX; + 000411' 606000 000001 TRNN 1; SEQUENCE NUMBER? + 000412' 326000 000406' JUMPN FINDES; NO, BUT ZERO ALSO DENOTES END + 000413' 263140 000000 EXIT; DONE + + 000414' 550000 000014 CSIZE: HRRZ COTP; COMPUTE SIZE OF TRANSFER + 000415' 554440 000014 HLRZ INDEX,COTP; SIZE OF THIS LINE + 000416' 270000 000011 ADD INDEX; AND THIS LOCATION + 000417' 270440 000012 ADD INDEX,WC; PLUS THE NEW LINE SIZE + 000420' 504440 000000 HRL INDEX,0; IN LEFT HALF IS OLD SIZE + 000421' 275000 001064' SUBI WB; AND TURN IT INTO A COUNT + 000422' 550540 001060' HRRZ C,WBC; FOR A SUBTRACT + 000423' 276540 000000 SUBM C,0; AND NOW ZERO HAS THE XFER SIZE + 000424' 263140 000000 EXIT; + + + 000425' 260140 000502' DELETE: CAL GE2SEQ; GET THE RANGE TO BE EXCISED + 000426' 550440 001060' DELOOP: HRRZ INDEX,WBC; GET THE WORD COUNT + 000427' 271440 001064' ADDI INDEX,WB; FORM THE END ADDRESS + 000430' 260140 000262' CAL BACK; GET THE LAST SEQUENCE IN THE BLOCK + 000431' 316000 000017 CAMN LAST; IS THE LAST LINE THE END OF THE RANGE + 000432' 254000 000447' JRST DEQ; YES + 000433' 311000 000017 CAML LAST; DO WE WANT TO DELETE THIS ONE TOO + 000434' 254000 000451' JRST DINB; NO,DELETE TERMINATES IN THE BUFFER + 000435' 260140 000465' CAL DREST; ERASE THE REST OF THE BUFFER + 000436' 602200 000020 EMPT: TRNE FL,S5; LAST BLOCK + 000437' 254000 001035' JRST COMLEV; YES, DONE + 000440' 620200 000001 TRZ FL,S0; FORWARD + 000441' 260140 000045' CAL GET; INPUT NEXT BLOCK + 000442' 200640 001064' MOVE SINDEX,WB; GET FIRST LINE + 000443' 606640 000001 TRNN SINDEX,1; IF NOT A ONE, BLOCK IS EMPTY + 000444' 254000 000436' JRST EMPT; SO GET THE NEXT ONE + 000445' 260140 000333' CAL FIND; NEW SINDEX IS THE FIRST LINE - THIS CAL + 000446' 254000 000426' JRST DELOOP; SETS UP THE COUNTS, ETC. + + 000447' 260140 000465' DEQ: CAL DREST; DELETE THE REST OF THE BUFFER + 000450' 254000 001035' DEX: JRST COMLEV; EXIT + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 16 +EDITOR MAC 24-APR-78 03:01 EDITOR - AUGUST 25, 1965 + + 000451' 201440 001063' DINB: MOVEI INDEX,WBF; GET INITIAL ADDRESS + 000452' 260140 000406' CAL FINDES; SCAN THE LINE + 000453' 322000 000456' JUMPE .+3; END OF BUFFER + 000454' 317000 000017 CAMG LAST; LAST LINE DONE + 000455' 344440 000452' AOJA INDEX,DINB+1; NO, GO AGAIN + 000456' 557000 000014 HLRZS COTP; COMPUTE TOTAL SIZE + 000457' 274440 000014 SUB INDEX,COTP; THIS MUCH SMALLER + 000460' 517000 000014 HRLZS COTP; RESET LEFT HALF + 000461' 542440 000014 HRRM INDEX,COTP; AND RIGHT HALF GET DELTA SIZE + 000462' 402000 000012 CLEARM WC; SET FOR ZERO LENGTH INSERT + 000463' 260140 000227' CAL INSED; INSERT THE NULL LINE + 000464' 254000 001035' JRST COMLEV; AND EXIT + + 000465' 554440 000014 DREST: HLRZ INDEX,COTP; DELETE THE REMAINING BUFFER + 000466' 275440 001064' SUBI INDEX,WB; JUST DECREMENT SIZE + 000467' 542440 001060' HRRM INDEX,WBC; OF THE NEW BUFFER + 000470' 254000 000245' JRST INSE16; DONE + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 17 +EDITOR MAC 24-APR-78 03:01 EDITOR - AUGUST 25, 1965 + + 000471' 260140 000502' PRINT: CAL GE2SEQ; GET THE RANGE + 000472' 200011 000000 PRLOOP: MOVE (INDEX); GET A LINE + 000473' 322000 000533' JUMPE GETNEX; ZERO IMPLIES END OF BUFFER - GET NEXT + 000474' 313000 000017 CAMLE LAST; ARE WE STILL IN THE BALLPARK + 000475' 254000 001035' JRST COMLEV; NO, ALL DONE + 000476' 260140 000516' CAL STEP; PREPARE FOR NEXT HUNT + 000477' 260140 000601' CAL OTLINE; PRINT THIS LINE + 000500' 260140 000333' CAL FIND; FIND THE NEXT LINE + 000501' 254000 000472' JRST PRLOOP; LOOK AT IT + + 000502' 260140 000616' GE2SEQ: CAL GETSEQ; GET A 2 NUMBER RANGE + 000503' 334000 000000 SKIPA; THERE WERE TWO + 000504' 254000 000507' JRST GEX; ONLY ONE + 000505' 242000 000001 LSH 1; JUSTIFY IT + 000506' 664000 000001 TROA 1; AND FLAG IT AS A SEQUENCE NUMBER + 000507' 200000 000015 GEX: MOVE SINDEX; DUPLICATE THE INPUT NUMBER IF JUST ONE + 000510' 202000 000017 MOVEM LAST; STORE THE END OF THE RANGE + 000511' 260140 000333' CAL FIND; SEARCH FOR THE FIRST LINE + 000512' 316740 001056' CAMN LAST,FIRST; BOTH THE SAME + 000513' 316651 000000 CAMN SINDEX,(INDEX); BUT NO MATCH FOUNT + 000514' 263140 000000 EXIT; WILL SKIP THIS ONE + ERR 2; AND *NLN* + 000515' 264100 000162' JSR 2,ERRORX + + 000516' 261140 000016 STEP: SAVE CINDEX ;PROTECT THE STEP + 000517' 201700 000001 MOVEI CINDEX,1; PREPARE TO ADD ONE TO SINDEX + 000520' 202000 000015 MOVEM SINDEX; WHICH WE LOAD FROM ZERO + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 24 +EDITOR MAC 24-APR-78 03:01 EDITOR - AUGUST 25, 1965 + + 000521' 254000 000306' JRST ASCIA+1; AWAY + + 000522' 200640 001056' PNEXT: MOVE SINDEX,FIRST; PRINT NEXT LINE + 000523' 200000 000015 MOVE SINDEX; UPDATE THE LINE POINTER + 000524' 260140 000516' CAL STEP; NEXT LINE + 000525' 260140 000333' CAL FIND; WHERE IS IT + 000526' 336651 000000 SKIPN SINDEX,(INDEX); ZERO IS END, ALSO LOAD SINDEX + ERR 2; *NLN* + 000527' 264100 000162' JSR 2,ERRORX + 000530' 202640 001056' MOVEM SINDEX,FIRST; STEP FIRST POINTER + 000531' 260140 000601' CAL OTLINE; PRINT THE LINE + 000532' 254000 000137' JRST OUTTER; BACK TO CONTROL + + 000533' 602200 000020 GETNEX: TRNE FL,S5; END OF FILE + 000534' 254000 001035' JRST COMLEV; YES, EXIT + 000535' 620200 000001 TRZ FL,S0; FORWARD + 000536' 260140 000045' CAL GET; INPUT IT + 000537' 201440 001064' MOVEI INDEX,WB; FIRST ADDRESS + 000540' 254000 000472' JRST PRLOOP; RETURN TO PRINT SCAN + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 26 +EDITOR MAC 24-APR-78 03:01 TELETYPE IO - AUGUST 25, 1965 + + SUBTTL TELETYPE IO - AUGUST 25, 1965 + + ;OUTPUT SEQUENCE NUMBER + 000541' 350000 001043' OTSEQ: AOS TYOBF1; STEP THE WORD POINTER + + + 000542' 202660 001043' MOVEM SINDEX,@TYOBF1; PUT THE SEQUENCE NO. + 000543' 201040 000211 MOVEI 1,211; AND A TAB + 000544' 136040 001043' IDPB 1,TYOBF1; INTO THE OUTPUT BUFFER + 000545' 067100 000000 OTSEQ4: OUTPUT TYP,0; OUTPUT THE TELETYPE BUFFER + 000546' 263140 000000 EXIT + + ;INPUT ONE LINE FROM TELETYPE AND CONVERT TO SEQUENCED + + 000547' 066100 000000 GETLIN: INPUT TYP,0; READ THE LINE + 000550' 201040 001314' MOVEI 1,TTB1; PREEPARE TO BLOCK IT UP + 000551' 505040 001313' HRLI 1,TTB; DESTINATION + 000552' 402000 001313' CLEARM TTB + 000553' 251040 001336' BLT 1,TTB16; BLOCK IT UP + 000554' 200300 000600' MOVE TPT,KKK1; PREPARE THE CONVERSION POINTER + 000555' 200240 001046' MOVE IPT,TYIBF1; AND READ POINTER + 000556' 200100 001047' MOVE 2,TYIBF2; AND THE COUNT + 000557' 202646 000000 MOVEM SINDEX,(TPT); PUT IN THE SEQUENCE + 000560' 201040 000211 MOVEI 1,211; TAB + 000561' 344300 000564' AOJA TPT,EOMLOP+2; START CONVERSION + + 000562' 361100 000571' EOMLOP: SOJL 2,EOMOUT; IF ALL OUT OF CHARACTERS + 000563' 134040 000005 ILDB 1,IPT; READ ONE + 000564' 136040 000006 IDPB 1,TPT; WRITE ONE + 000565' 302040 000033 CAIE 1,33; ALTERNATE ALTMOD + 000566' 306040 000175 CAIN 1,175; REGULAR ALTMOD + 000567' 254000 000160' JRST CRT; MAKE EXIT + 000570' 254000 000562' JRST EOMLOP; GET MORE + + 000571' 200500 000006 EOMOUT: MOVE WC,TPT; FORM WORD COUNT + 000572' 274500 000600' SUB WC,KKK1; INITIAL VALUE + 000573' 553000 000012 HRRZS WC; CLEAR LEFT + 000574' 306040 000012 CAIN 1,12; LINE FEED + 000575' 271500 000001 ADDI WC,1; MEANS STEP COUNT + 000576' 350003 000000 STEPEX: AOS (PDP); SKIP EXIT + 000577' 263140 000000 EXIT + 000600' 440700 001313' KKK1: POINT 7,TTB; INITIAL POINTER + + ;OUTPUT ONE LINE OF TEXT + + 000601' 200011 000000 OTLINE: MOVE (INDEX); FIRST WORD + 000602' 254000 000607' JRST OTL1 + 000603' 200011 000000 MOVE (INDEX); SUBSEQUENT WORDS + 000604' 322000 000545' JUMPE OTSEQ4; ZERO IMPLIES THE END OF THE WORLD + 000605' 602000 000001 TRNE 1; ONE IMPLIES THE END OF THE LINE + 000606' 254000 000545' JRST OTSEQ4 + 000607' 350000 001043' OTL1: AOS TYOBF1; PUT IT IN THE OUTPUT BUFFER + 000610' 202020 001043' MOVEM @TYOBF1 + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 26-1 +EDITOR MAC 24-APR-78 03:01 TELETYPE IO - AUGUST 25, 1965 + + 000611' 344440 000603' AOJA INDEX,OTLINE+2; GO FOR MORE + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 27 +EDITOR MAC 24-APR-78 03:01 TELETYPE IO - AUGUST 25, 1965 + + ;GET ONE CHARACTER + + 000612' 066100 000000 GETCHR: INPUT TYP,0; GET A LINE + 000613' 200240 001046' MOVE IPT,TYIBF1; PREPARE INPUT POINTER + 000614' 134540 000005 ILDB C,IPT; LOAD THE FIRST CHARACTER + 000615' 263140 000000 EXIT + + ;GET A SEQUENCE PAIR + + 000616' 403000 000015 GETSEQ: CLEARB 0,SINDEX; MAKE BOTH ZERO + 000617' 134540 000005 ILDB C,IPT; GET A CHARACTER + 000620' 301540 000060 CAIL C,60; IT MUST BE A NUMBER + 000621' 303540 000071 CAILE C,71 + 000622' 254000 000626' JRST ETEST; OR A DELIMITER + 000623' 242640 000007 LSH SINDEX,7; NUMBER + 000624' 270640 000013 ADD SINDEX,C; NEW ONE + 000625' 254000 000617' JRST GETSEQ+1 + + 000626' 306540 000056 ETEST: CAIN C,56; POINT? + 000627' 254000 000652' JRST PER + 000630' 306540 000054 CAIN C,54; COMMA? + 000631' 254000 000645' JRST CMMA + 000632' 332000 000015 SKIPE SINDEX; IF NOTHING INPUT YET + 000633' 302540 000015 CAIE C,15; OR NOT A CARRET + 000634' COMERR: ERR 1; ILLEGAL COMMAND + 000634' 264040 000162' JSR 1,ERRORX + 000635' 434640 000656' IOR SINDEX,KK4; MAKE IT AN ASCII THING + 000636' 332000 000000 SKIPE 0; IF TWO ARGS + 000637' 250640 000000 EXCH SINDEX,0; SWAP EM BACK + 000640' 242640 000001 LSH SINDEX,1; LEFT JUSTIFY + 000641' 660640 000001 TRO SINDEX,1; AND FLAG IT + 000642' 202640 001056' MOVEM SINDEX,FIRST; SAVE IT FOR . + 000643' 322000 000576' JUMPE STEPEX; ONLY ONE ARG + 000644' 263140 000000 EXIT; TWO ARGS + + 000645' 322640 000634' CMMA: JUMPE SINDEX,COMERR; THREE ARGS? + 000646' 326000 000634' JUMPN COMERR; ONE ARG + 000647' 434640 000656' IOR SINDEX,KK4; ASCII-IZE IT + 000650' 250640 000000 EXCH SINDEX,0; SWAP EM + 000651' 254000 000617' JRST GETSEQ+1 + + 000652' 326640 000634' PER: JUMPN SINDEX,COMERR; CANT BE THIRD ARG + 000653' 200640 001056' MOVE SINDEX,FIRST; RETREIVE POINT + 000654' 242640 777777 LSH SINDEX,-1; RIGHT JUSTIFY + 000655' 254000 000617' JRST GETSEQ+1 + + 000656' 140603 014060 KK4: OCT 140603014060; 00000 + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 28 +EDITOR MAC 24-APR-78 03:01 DECSET - AUGUST 25, 1965 + + SUBTTL DECSET - AUGUST 25, 1965 + + 001000 FOPEN=1000 + + ;SET FILE OPEN (*SN,NAME) + + 000657' 603200 001000 DECINI: TLNE FL,FOPEN; IF A FILE IS NOT ALREADY OPEN + ; THEN GOTO NORMAL PROCESS + ERR 1 ; IF FILE OPEN ,MUST CLOSE W. E + 000660' 264040 000162' JSR 1 ,ERRORX + 000661' 403200 001060' DECIN1: SETZB FL,WBC; ZERO FLAGS AND WORD COUNT + 000662' 402000 001012' CLEARM DTNAME; FILE NAME + 000663' 402000 001013' CLEARM DTNAME+1; AND EXTENSION + 000664' 402000 001014' CLEARM DTNAME+2; AND DATE + 000665' 260140 000710' CAL GTCHAR; GET UNIT NUMBER + 000666' 301000 000060 CAIL 60; IT MUST BE A NUMBER + 000667' 303000 000070 CAILE 70; + 000670' 254000 000665' JRST .-3; IGNORE ANYTHING ELSE + 000671' 137000 001337' DPB [POINT 5,PLUNK,23]; DUMP INTO INIT COMMAND + 000672' 260140 000710' CAL GTCHAR; NEXT CHARACTER + 000673' 302000 000054 CAIE 54; COMMA? + 000674' 254000 000672' JRST .-2; IGNORE ALL ELSE + 000675' 200040 001340' LOOP0: MOVE 1,[POINT 6,DTNAME]; INITIALIZE NAME POINTER + 000676' 201540 000006 MOVEI C,6; MAX NAME LENGTH + 000677' 260140 000710' LOOP: CAL GTCHAR; GET A CHARACTER + 000700' 301000 000060 CAIL "0"; NUMBERS AND LETTERS ONLY COME HERE + 000701' 303000 000071 CAILE "9"; SO HERE FILTER NUMBERS + 000702' 254000 001000' JRST LOOP1; IT IS A LETTER + 000703' 640000 000040 LOOP2: TRC 40; NUMBER - MAKE IT SIXBIT + 000704' 136000 000001 IDPB 1; STORE INTO NAME (OR EXTENSION) + 000705' 367540 000677' SOJG C,LOOP; COUNT DOWN FOR SIZE + 000706' 260140 000710' CAL GTCHAR; NEXT CHARACTER + 000707' 254000 000706' JRST .-1; + + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 29 +EDITOR MAC 24-APR-78 03:01 DECSET - AUGUST 25, 1965 + + 000710' 134000 000005 GTCHAR: ILDB IPT; LOAD ONE CHARACTER + 000711' 306000 000015 CAIN 15; CRT + 000712' 254000 000727' JRST GET1; SNEAK EXIT + 000713' 306000 000056 CAIN "."; AN EXTENSION IS COMMING + 000714' 254000 001004' JRST GET2; FIX IT UP + 000715' 302000 000033 CAIE 33; THE FUNNY ALTMODE + 000716' 306000 000175 CAIN 175; AND THE REAL ONE + 000717' 254000 000726' JRST GET11 ;CAUSE EXIT TO OCCUR + 000720' 306000 000012 CAIN 0,12 ;LF CHAR? + 000721' 254000 000727' JRST GET1 ; YES TREAT AS CR + 000722' 302000 000001 CAIE 1; CONTROL A + 000723' 263140 000000 EXIT; NOTA SO EXIT HAPPY + 000724' 661200 000100 TLO FL,100; SET CONTROL A FLAG + 000725' 254000 000710' JRST GTCHAR; GET ANOTHER CHARACTER + 000726' 661200 000002 GET11: TLO FL,2 ;NEW FILE FLAG + + 000727' 262140 000000 GET1: UNSAVE; POP OFF EXIT + 000730' 201000 001050' GO: MOVEI DTOBUF; THESE TWO INSTRUCTIONS REQUIRED + 000731' 506000 000736' HRLM PLUNK+1; REQUIRED TO LINK LEFT HALF + 000732' 200000 001057' MOVE SJOBFF; RESET JOB AREA + 000733' 202000 000000* MOVEM JOBFF; TO PREVENT STORAGE EAT-UP + 000734' 041140 000000 INIT DT,0; INITIALIZE DECTAPE + 000735' 446441 000000 PLUNK: SIXBIT /DTA/; RIGHT HALF SET ABOVE + 000736' 000000 001053' XWD 0,DTIBUF; LEFT HALF SET ABOVE + ERR 5; UNIT NOT AVAILABLE + 000737' 264240 000162' JSR 5,ERRORX + 000740' 205000 400000 MOVSI 400000; USE BIT + 000741' 412000 001062' ANDCAM DTB; CLEAR IT + 000742' 541000 001062' HRRI DTB; HEAD OF BUFFER + 000743' 202000 001053' MOVEM DTIBUF; SETUP IN HEADER + 000744' 065140 000001 OUTBUF DT,1; SET UP SINGLE BUFFER + 000745' 623200 000100 TLZE FL,100; NEW DIRECTORY? + 000746' 047140 000013 CALLI DT,13; YES, ZONK IT (UTPCLR) + 000747' 336000 001012' SKIPN DTNAME; NO NAME MEANS JUST CLEAR, PROB + 000750' 254000 000133' JRST FINIS2; SO EXIT AND CLOSE FILE + 000751' 076140 001012' LOOKUP DT,DTNAME; IS THE NAME ALRRADY THERE + 000752' 254000 000772' JRST NEWFIL; NO, SO WE ENTER IT + 000753' 603200 000002 TLNE FL,2; ARE WE ASKING FOR A NEW FILE + ERR 10; YES, FAU + 000754' 264400 000162' JSR 10,ERRORX + + 000755' 200100 001013' DOIT: MOVE 2,DTNAME+1; GET LINK + 000756' 074142 000000 USETI DT,(2); SET IT UP + 000757' 067140 000000 OUTPUT DT,; MAKE SYSTEM HAPPY + 000760' 075142 000000 USETO DT,(2); SET UP OUTPUT ALSO + 000761' 627200 000010 TLZN FL,10; NEW FILE? + 000762' 254000 000767' JRST DOIT1; NO, ALMOST DONE + 000763' 402000 001063' SETZM WBF; WE MUST FORCE AN EMPTY BLOCK + 000764' 661200 000001 TLO FL,1; SET BUFFER FULL FLAG + 000765' 402000 001060' SETZM WBC; ZERO LENGTH + 000766' 660200 000530 TRO FL,S3+S5+S6+S8; INITIAL STATE, FIRST BLOCK MODIFIED + 000767' 202100 000135' DOIT1: MOVEM 2,THSBLK; SETUP CURRENT BLOCK NUMBER + 000770' 661200 001000 TLO FL,FOPEN; SET FILE STATUS TO OPEN + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 29-1 +EDITOR MAC 24-APR-78 03:01 DECSET - AUGUST 25, 1965 + + 000771' 254000 001035' JRST COMLEV; ALL DONE + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 30 +EDITOR MAC 24-APR-78 03:01 DECSET - AUGUST 25, 1965 + + 000772' 607200 000002 NEWFIL: TLNN FL,2; WAS ALTMOD STRUCK + ERR 11; NO, NCF + 000773' 264440 000162' JSR 11,ERRORX + 000774' 077140 001012' ENTER DT,DTNAME; PUT IN DI + ERR 6; DCE + 000775' 264300 000162' JSR 6,ERRORX + 000776' 661200 000010 TLO FL,10; SET NEW FILE FLAG + 000777' 254000 000755' JRST DOIT; + + 001000' 301000 000101 LOOP1: CAIL "A"; LETTER CHECK + 001001' 303000 000132 CAILE "Z"; IT MUST VERILY BE A LETTER + 001002' 254000 000677' JRST LOOP; WE IGNORE IT + 001003' 254000 000703' JRST LOOP2; WE PROCESS IT + + 001004' 332000 001013' GET2: SKIPE DTEXTN; EXTENSION? + ERR 1; ALREADY GOT ONE, CANT HAVE TWO + 001005' 264040 000162' JSR 1,ERRORX + 001006' 621040 770000 TLZ 1,770000; MAGIC TO BYTE POINTER TO POINT TO NEXT + 001007' 201540 000003 MOVEI C,3; ONLY 3 LETTERS IN EXTENSION + 001010' 262140 000000 UNSAVE; POP OF SOME GARBAGE + 001011' 254000 000677' JRST LOOP; RETURN TO LISTEN + + 001012' 000000 000000 DTNAME: 0; FILE NAME + 001013' 000000 000000 DTEXTN: 0; FILE EXTENSION + 001014' 000000 000000 DTDATE: 0; DATE + 001015' 000000 000000 0; DUMMY + + 001013' FBNUM=DTEXTN + + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 31 +EDITOR MAC 24-APR-78 03:01 INITIA - AUGUST 25, 1965 + + SUBTTL INITIA - AUGUST 25, 1965 + 000001 AL=1 + 001016' 047000 000000 INITIA: CALLI 0,0; RESET SYSTEM + 001017' 041100 000001 INIT TYP,AL; RESET CONCOLE + 001020' 646471 000000 SIXBIT /TTY/ + 001021' 001042' 001045' XWD TYOBUF,TYIBUF + 001022' 254200 000000 HALT + 001023' 064100 000001 INBUF TYP,1; SET UP ONE INPUT BUFFER + 001024' 065100 000002 OUTBUF TYP,2; AND TWO OUTPUT BUFFERS + 001025' 200000 000733* MOVE JOBFF; SAVE FIRST FREE + 001026' 202000 001057' MOVEM SJOBFF; FOR LATER RESTART + 001027' 067100 000000 OUTPUT TYP,0; MAKE SYSTEM HAPPY + 001030' 200700 001041' INITIX: MOVE CINDEX,KK1; INITIALIZE STEP TO 10 + 001031' 201140 001303' MOVEI PDP,PDSTAK-1; INITIALIZE PUSHDOWN POINTER + 001032' 403640 000004 CLEARB SINDEX,FL; FLAGS AND SEQUENCE INDEX + 001033' 211400 000001 MOVNI P,1; AND FIRST BLOCK POINTER + 001034' 402000 001060' CLEARM WBC; WORD COUNT + 001035' 260140 000160' COMLEV: CAL CRT; A COMMON RETURN + 001036' 301200 000000 CAIL FL,0 ; DDE ERROR + 001037' 254000 000137' JRST OUTTER ; NO, SO OFF TO LISTEN CONTROL + 001040' 254000 001016' JRST INITIA ; YES GO RESET WORLD + + ;BUFFERS, ET. AL. + 001041' 140603 014260 KK1: OCT 140603014260; 00010 + 001042' TYOBUF: BLOCK 3 + 001045' TYIBUF: BLOCK 3 + + 001050' DTOBUF: BLOCK 3 + 001053' 000000 000000 DTIBUF: 0 + 001054' 000700 000000 XWD 700,0; SELF ASSIGNED BUFFERS, ETC. + 001055' 000000 000000 0 + + 001056' 000000 000000 FIRST: 0 + 001057' 000000 000000 SJOBFF: 0 + + 001060' 000000 000000 WBC: 0; WORKING BUFFER COUNT + 001061' 000000 000000 0 + 001062' 000200 001062' DTB: XWD 200,DTB; DECTAPE HEADER + 001063' 000000 000000 WBF: 0 + 001064' WB: BLOCK 217; THE WORKING BUFFER + 001303' 624563 456400 RESTT: SIXBIT .RESET. + + 001304' PDSTAK: BLOCK 7; PUSHDOWN STAK + 001313' TTB: BLOCK 23; TELETYPE BUFFER-BUFFER + 001336' 000000 000000 TTB16: 0 + + 001314' TTB1=TTB+1 + 001046' TYIBF1=TYIBUF+1 + 001047' TYIBF2=TYIBUF+2 + 001043' TYOBF1=TYOBUF+1 + 001051' DTOBF1=DTOBUF+1 + + EXTERNAL JOBFF + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 31-1 +EDITOR MAC 24-APR-78 03:01 INITIA - AUGUST 25, 1965 + + 001337' EDEND: + + 001016' END INITIA + +NO ERRORS DETECTED + +PROGRAM BREAK IS 001341 + +9K CORE USED + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 32 +EDITOR MAC 24-APR-78 03:01 SYMBOL TABLE + +AC1 000001 +AC2 000002 +AC3 000005 +AC4 000006 +AL 000001 +ASCIA 000305' +ATSALL 000004' +BACK 000262' +BACK1 000252' +C 000013 +CAL 260140 000000 +CINDEX 000016 +CLEARE 000246' +CMMA 000645' +COMERR 000634' +COMLEV 001035' +COTP 000014 +CRM 000171' +CRT 000160' +CSIZE 000414' +DECIN1 000661' +DECINI 000657' +DELETE 000425' +DELOOP 000426' +DEQ 000447' +DEX 000450' +DINB 000451' +DOIT 000755' +DOIT1 000767' +DREST 000465' +DT 000003 +DTB 001062' +DTDATE 001014' +DTEXTN 001013' +DTIBUF 001053' +DTNAME 001012' +DTOBF1 001051' +DTOBUF 001050' +DUMPB 000106' +DUMX 000122' +EDEND 001337' +EMPT 000436' +EOMLOP 000562' +EOMOUT 000571' +EPT 000204' +ERRORX 000162' +ERROX1 000166' +ERROX2 000167' +ERT 000172' +ETEST 000626' +EXIT 263140 000000 +FBNUM 001013' + + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 32-1 +EDITOR MAC 24-APR-78 03:01 SYMBOL TABLE + +FILLB 000000' +FILLB1 000041' +FIND 000333' +FIND1 000334' +FIND2 000335' +FIND3 000400' +FIND3A 000372' +FIND4 000365' +FINDA 000360' +FINDC 000367' +FINDEQ 000402' +FINDES 000406' +FINDR 000370' +FINDX 000353' +FINIS2 000133' +FINISH 000131' +FIRST 001056' +FL 000004 +FOPEN 001000 +GE2SEQ 000502' +GET 000045' +GET0 000055' +GET1 000727' +GET11 000726' +GET2 001004' +GETCHR 000612' +GETF 000075' +GETL 000073' +GETL1 000100' +GETLIN 000547' +GETN 000047' +GETNEX 000533' +GETSEQ 000616' +GEX 000507' +GO 000730' +GTCHAR 000710' +IAMTEM 000136' +INDEX 000011 +INITIA 001016' +INITIX 001030' +INSE 000205' +INSE1 000235' +INSE16 000245' +INSE2 000210' +INSE3 000216' +INSED 000227' +INSEG 000264' +INSER 000272' +INSEX 000276' +IPT 000005 +ITAB 000303' +JOBFF 001025' EXT +K1 000326' + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 32-2 +EDITOR MAC 24-APR-78 03:01 SYMBOL TABLE + +K2 000327' +K3 000330' +K4 000331' +K5 000332' +KK1 001041' +KK4 000656' +KKK1 000600' +LAST 000017 +LOOP 000677' +LOOP0 000675' +LOOP1 001000' +LOOP2 000703' +NEWFIL 000772' +OTL1 000607' +OTLINE 000601' +OTSEQ 000541' +OTSEQ4 000545' +OUTTER 000137' +P 000010 +PDP 000003 +PDSTAK 001304' +PER 000652' +PLUNK 000735' +PNEXT 000522' +PRINT 000471' +PRLOOP 000472' +RESTT 001303' +S0 000001 +S1 000002 +S2 000004 +S3 000010 +S4 000040 +S5 000020 +S6 000100 +S7 000200 +S8 000400 +SAVE 261140 000000 +SINDEX 000015 +SJOBFF 001057' +SLURP 000057' +STEP 000516' +STEPEX 000576' +THSBLK 000135' +TPT 000006 +TTB 001313' +TTB1 001314' +TTB16 001336' +TYIBF1 001046' +TYIBF2 001047' +TYIBUF 001045' +TYOBF1 001043' +TYOBUF 001042' + + + EDITOR V.003 1 APRIL 1968 MACRO 10 05:51 24-APR-78 PAGE 32-3 +EDITOR MAC 24-APR-78 03:01 SYMBOL TABLE + +TYP 000002 +UNSAVE 262140 000000 +WB 001064' +WBC 001060' +WBF 001063' + FFFFFFFFFFFFFFF UUU UUU DDDDDDDDDDDD GGGGGGGGGGGG EEEEEEEEEEEEEEE 222222222 +FFFFFFFFFFFFFFF UUU UUU DDDDDDDDDDDD GGGGGGGGGGGG EEEEEEEEEEEEEEE 222222222 +FFFFFFFFFFFFFFF UUU UUU DDDDDDDDDDDD GGGGGGGGGGGG EEEEEEEEEEEEEEE 222222222 +FFF UUU UUU DDD DDD GGG EEE 222 222 +FFF UUU UUU DDD DDD GGG EEE 222 222 +FFF UUU UUU DDD DDD GGG EEE 222 222 +FFF UUU UUU DDD DDD GGG EEE 222 +FFF UUU UUU DDD DDD GGG EEE 222 +FFF UUU UUU DDD DDD GGG EEE 222 +FFFFFFFFFFFF UUU UUU DDD DDD GGG EEEEEEEEEEEE 222 +FFFFFFFFFFFF UUU UUU DDD DDD GGG EEEEEEEEEEEE 222 +FFFFFFFFFFFF UUU UUU DDD DDD GGG EEEEEEEEEEEE 222 +FFF UUU UUU DDD DDD GGG GGGGGGGGG EEE 222 +FFF UUU UUU DDD DDD GGG GGGGGGGGG EEE 222 +FFF UUU UUU DDD DDD GGG GGGGGGGGG EEE 222 +FFF UUU UUU DDD DDD GGG GGG EEE 222 +FFF UUU UUU DDD DDD GGG GGG EEE 222 +FFF UUU UUU DDD DDD GGG GGG EEE 222 +FFF UUUUUUUUUUUUUUU DDDDDDDDDDDD GGGGGGGGG EEEEEEEEEEEEEEE 222222222222222 +FFF UUUUUUUUUUUUUUU DDDDDDDDDDDD GGGGGGGGG EEEEEEEEEEEEEEE 222222222222222 +FFF UUUUUUUUUUUUUUU DDDDDDDDDDDD GGGGGGGGG EEEEEEEEEEEEEEE 222222222222222 + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB0 :FUDGE2.LST [8,296] Created: 20-April-1967 05:52:00 Printed: 24-April-1978 05:53:41 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1311 +File will be deleted after printing + +FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 1 +FUDGE2 MAC 24-APR-78 03:09 2-OCT-70 ED YOURDON/VJC/DMN + + TITLE FUDGE2 V.011 + SUBTTL 2-OCT-70 ED YOURDON/VJC/DMN + ;FILE UPDATE GENERATOR + ;"COPYRIGHT 1968,1969,DIGITAL EQUIPMENT CORP. MAYNARD,MASS. U.S.A." + + 000011 VFUDGE==11 ;VERSION NUMBER + 000000 VPATCH==0 ;DEC PATCH LEVEL + 000000 VCUSTOM==0 ;NON-DEC PATCH LEVEL + + 000137 JOBVER==137 + 000137 LOC JOBVER + 000137 000000 000011 XWD VCUSTOM,VFUDGE+VPATCH*1000 + 000000' RELOC + MLON + + ;FUDGE ACCUMULATOR DEFINITIONS + + 000001 A= 1 ;GENERAL COMMUNICATION AC + 000002 B= 2 ;SCRATCH ACCUMULATOR + 000003 T= 3 ;USED IN /C AND /X ONLY + 000004 C= 4 ;SCRATCH ACCUMULATOR + 000005 D= 5 ;IO DEVICE NUMBER ACCUMULATOR + 000006 E= 6 ;SCRATCH ACCUMULATOR + 000007 F= 7 ;FLAG ACCUMULATOR + 000010 G= 10 ;DEVICE CHARACTERISTICS AC + 000011 H= 11 ;USED IN GETCHR AND GETCMN + 000012 P= 12 ;PUSHDOWN POINTER AC + 000013 R= 13 ;PROGRAM NAME-USED IN READ,WRITE + 000014 S= 14 ;SIXBIT SYMBOL ACCUMULATOR + 000015 DIS= 15 ;DISPATCH ACCUMULATOR + 000016 EXT= 16 ;FILE NAME EXTENSION ACCUMULATOR + 000017 SW= 17 ;SWITCH UUO AC + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 2 +FUDGE2 MAC 24-APR-78 03:09 2-OCT-70 ED YOURDON/VJC/DMN + + ;FUDGE FLAG DEFINITIONS (RIGHT HALF OF ACCUMULATOR F) + + 000001 DESTB== 1 ;1-DESTINATION DEVICE SEEN + 000002 SAVEB== 2 ;1-SWITCH SEEN,BUT NOT EXECUTED + 000004 SWTB== 4 ;1-SWITCH MODE ENTERED IN GETCHR + 000010 SLSHB== 10 ;1-SWITCH MODE ENTERED WITH </> + 000020 TTYOB== 20 ;1-NON-TTY OUTPUT;USED BY IO + 000040 TTYCB== 40 ;1-NON-TTY OUTPUT;USED BY COMMAND + 000100 PROGB== 100 ;1-PROGRAM NAME SEEN IN SPECIFICATION + 000200 NOLOCB==200 ;1-DELETE LOCAL SYMBOLS ***VJC + 000400 DEVB== 400 ;1-DEVICE NAME SEEN IN SPEC. + 001000 EXTB== 1000 ;1-EXPLICIT FILE NAME EXTENSION + 002000 ERRB== 2000 ;1-ERROR IN ENTRY BLOCK CHECK + 004000 INFOB== 4000 ;1-VALID INFORMATION IN COMMAND + 010000 CONB== 10000 ;1-CONTEXT OF <.> IS PROGRAM NAME + ;0-CONTEXT OF <.> IS FILE NAME + 020000 F4IB== 20000 ;1-IGNORE F4 OUTPUT + 040000 CRLFTY==40000 ;1-CR,LF TYPED (FOR ERROR MSG) + 100000 POPBAK==100000 ;1-XCT POPJ P, ;TO RETURN TO CALLING SEQ. + 200000 XFLG== 200000 ;1-INDEX THIS FILE + 400000 DTAFLG==400000 ;1-OUTPUT DEVICE IS DTA (SPECIAL INDEX) + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 3 +FUDGE2 MAC 24-APR-78 03:09 2-OCT-70 ED YOURDON/VJC/DMN + + + + + ;HANDY BITS FOR CALLS TO DEVCHR FOR DEVICE CHARACTERISTICS + 000001 OUTBIT==1 ;1-DEVICE CAN DO OUTPUT + 000002 INBIT== 2 ;1-DEVICE CAN DO INPUT + 000004 DRCTRB==4 ;1-DEVICE HAS A DIRECTORY + 000010 TTYBIT==10 ;1-DEVICE IS A TTY + 000100 DTABIT==100 ;1-DEVICE IS A DTA + 040000 LPTBIT==40000 ;1-DEVICE IS LPT + 200000 DSKBIT==200000 ;1-DEVICE IS DSK + + ;OTHER USEFUL PARAMETER ASSIGNMENTS + 000200 N== 200 ;SIZE OF MASTER AND TRAN BUFFERS + 000020 XP== 20 ;SIZE OF PUSHDOWN LIST + 000500 SIZE== 500 ;SIZE OF PURE ENTRY BLOCK + 000505 X== SIZE+5 ;SIZE OF ENTRY AND SAVE BLOCKS + 020000 IOEOF== 20000 ;1-END-OF-FILE HAS BEEN SEEN + 040000 IOBKTL==40000 ;1-BLOCK-TOO-LARGE ERROR + 100000 IODATA==100000 ;1-DATA ERROR + 200000 IODEV== 200000 ;1-DEVICE ERROR + 004000 IOBOT== 4000 ;1-MAG TAPE IS AT BEGINNING OF TAPE + + 000011 RIBALC==11 ;NUMBER OF BLOCKS ALLOCATED + + ;EXTERNAL SYMBOLS + EXTERN JOBFF, JOBREL, JOBSYM, JOBSA + + OPDEF JSR [PUSHJ P,] ;PURE FOR RE-ENTRANT FUDGE + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 4 +FUDGE2 MAC 24-APR-78 03:09 INITIALIZE AND SETUP OF FUDGE2 + + SUBTTL INITIALIZE AND SETUP OF FUDGE2 + ;THIS SECTION OF CODING DOES THE FOLLOWING THINGS + ; 1.RESETS ALL IO DEVICES BY CALLING [SIXBIT /RESET/] + ; 2.INITIALIZES THE TELETYPE IN ASCII-LINE MODE + ; 3.TYPES A * TO SIGNIFY READINESS FOR INPUT FROM USER + ; 4.SETS UP A PUSHDOWN LIST + ; 5.INITIALIZES VARIOUS ACCUMULATORS, CLEARS THE FLAGS, + ; AND INITIALIZES THE MSTBUF AND TRNBUF COUNTERS + + 000000' 255000 000000 FUDGE2: JFCL ;INCASE OF CCL ENTRY + 000001' 047000 000000 RESET ;RESET I/O DEVICES + 000002' 200000 005126' MOVE [XWD LOW,LOW+1] + 000003' 402000 002515' SETZM LOW ;CLEAR DATA AREA + 000004' 251000 005116' BLT LOWTOP-1 + 000005' 200000 005127' MOVE [XWD 17,11] ;TEST FOR LEVEL D + 000006' 400000 000000 SETZ ;FAILED, NOT LEVEL D + 000007' 607000 003400 TLNN (7B9) ;IS IT LEVEL D OR LATER? + 000010' 634000 000000 TDZA ;NO + 000011' 561000 777776 HRROI -2 ;THIS IS LEVEL D + 000012' 202000 005111' MOVEM LEVEL ;STORE STATE + 000013' 400000 000000 SETZ ;CLEAR ACC'S + 000014' 201740 000001 MOVEI 17,1 ;WITH A BLT OF ZERO + 000015' 251740 000017 BLT 17,17 ;FROM 0-17 + 000016' 041000 000001 INIT 0,1 ;INITIALIZE TTY, CHANNEL 0 + 000017' 646471 000000 SIXBIT /TTY/ ;TTY + 000020' 004602' 004610' XWD OBUF, IBUF ;ADDRESSES FOR BUFFER HEADERS + 000021' 254200 000021' HALT . ;ILLEGAL INSTRUCTION IF NO TTY + 000022' 067000 000000 OUTPUT 0, ;DUMMY OUTPUT ON TTY + 000023' 201040 000052 MOVEI A, "*" ;PICK UP A <*> + 000024' 136040 004603' IDPB A, OBUF+1 ;TYPE IT OUT + 000025' 067000 000000 OUTPUT 0, ;EMPTY THE BUFFER + 000026' 200500 005125' MOVE P, XPDLST ;SET UP A PUSHDOWN POINTER + 000027' 561240 000001 HRROI D,1 ;INITIALIZE DEVICE BUFFER + 000030' 202240 003324' MOVEM D, DEVBUF ;... + 000031' 205040 777600 MOVSI A, -N ;GET COUNT OF MSTBUF AND TRNBUF + 000032' 541040 002525' HRRI A, FILBUF+1 ;INITIALIZE POINTER IN FILBUF + 000033' 202040 002524' MOVEM A, FILBUF ;SET UP COUNT IN FILE BUFFER + 000034' 541040 002725' HRRI A, PRGBUF+1 ;INITIALIZE POINTER IN PRGBUF + 000035' 202040 002724' MOVEM A, PRGBUF ;... + 000036' 541040 003124' HRRI A,PPNBUF ;INITIAL POINTER IN PPNBUF + 000037' 202040 003124' MOVEM A,PPNBUF + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 5 +FUDGE2 MAC 24-APR-78 03:09 FUDGE2 COMMAND STRING DISPATCHING + + SUBTTL FUDGE2 COMMAND STRING DISPATCHING + ;THIS ROUTINE PICKS UP CHARACTERS FROM THE TELETYPE BUFFER AND + ;DISPATCHES TO THE PROPER ROUTINE DEPENDING ON THE TYPE OF + ;CHARACTER.A TABLE OF BYTES AND BYTE POINTERS ALLOWS EACH + ;CHARACTER IN THE ASCII SET TO BE TREATED INDIVIDUALLY. THE + ;ROUTINE MAY BE ENTERED AT GETCHR IF IT IS DESIRED TO ACCUMULATE + ;A 6-LETTER SIXBIT SYMBOL IN AC S. SYMBOLS OF DIFFERENT LENGTHS + ;MAY BE ACCUMULATED IN DIFFERENT REGISTERS BY SETTING THE CONTENTS + ;OF AC B TO THE DESIRED LENGTH, AND PUTTING A BYTE POINTER IN E + ;AND ENTERING THE ROUTINE AT GETCHR+4. + + 000040' 622340 100000 GETCHR: TRZE F,POPBAK ;IMMEDIATE RETURN? + 000041' 263500 000000 POPJ P, ;YES + 000042' 201100 000006 MOVEI B, 6 ;SET COUNT OF SYMBOL TO 6 + 000043' 200300 005117' MOVE E, SYMPTR ;SET UP A BYTE POINTER FOR AC S + 000044' 201600 000000 MOVEI S, 0 ;INITIALIZE SYMBOL ACCUMULATOR + 000045' 377000 004612' GETCMN: SOSG IBUF+2 ;IS TTY BUFFER EMPTY? + 000046' 066000 000000 INPUT 0, ;YES, FILL IT UP + 000047' 134040 004611' ILDB A, IBUF+1 ;GET A CHARACTER + 000050' 200400 000001 MOVE G, A ;GET A COPY OF IT IN AC G + 000051' 200000 005100' MOVE 0, CURCHR ;SAVE PREVIOUS CHAR + 000052' 202000 005101' MOVEM 0, LSTCHR ;AS LAST CHAR + 000053' 202040 005100' MOVEM A, CURCHR ;SAVE CURRENT CHAR + 000054' 231400 000011 IDIVI G, 11 ;TRANSLATE TO 4-BIT CODE + 000055' 135411 000077' LDB G, TABLE(H) ;USE PROPER BYTE POINTER + 000056' 305400 000004 CAIGE G, 4 ;MODIFY CODE IF .GE. 4 + 000057' 606340 000004 TRNN F, SWTB ;MODIFY CODE IF IN SWITCH MODE + 000060' 271400 000004 ADDI G, 4 ;CHANGE DISPATCH BY ADDING 4 + 000061' 550450 000065' HRRZ H, DSPTCH(G) ;GET PROPER DISPATCH ADDRESS + 000062' 301400 000010 CAIL G, 10 ;BUT CHANGE IF NOT CORRECT + 000063' 554450 000055' HLRZ H, DSPTCH-10(G) ;TO A LEFT HALF DISPATCH + 000064' 254011 000000 JRST (H) ;EXIT TO APPROPRIATE ROUTINE + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 6 +FUDGE2 MAC 24-APR-78 03:09 COMMAND DISPATCH TABLE AND BYTE POINTERS + + SUBTTL COMMAND DISPATCH TABLE AND BYTE POINTERS + 000065' 000045' 002136' DSPTCH: XWD GETCMN,ERR16 ;IGNORED CHAR, BAD CHAR(SWITCH) + 000066' 000145' 000135' XWD SWTCH, SWTCHA ;<(>, LETTER(SWITCH MODE) + 000067' 000317' 002136' XWD COLON, ERR16 ;<:>, NUMBER(SWITCH MODE) + 000070' 000257' 000146' XWD PERIOD,SWTCHE ;<.>, <)>ESCAPE SWITCH MODE + 000071' 000156' 002147' XWD LFTARW,ERR17 ;<?>OR<=>, BAD CHAR (NORMAL MODE) + 000072' 000310' 000127' XWD COMMA, STORE ;<,>, ALPHABETIC CHARACTER(NORMAL) + 000073' 000521' 000127' XWD ALTMOD,STORE ;<$>,NUMERIC CHARACTER(NORMAL) + 000074' 000144' 002147' XWD SLASH, ERR17 ;</>, <)> ILLEGAL ESCAPE + 000075' 000265' 000000 XWD LBRACK, 0 ;LEFT ANGLE BRACKET, OR "[" + 000076' 000303' 000000 XWD RBRACK, 0 ;RIGHT ANGLE BRACKET + + 000077' 400410 000110' TABLE: POINT 4, BITE(G), 3 + 000100' 340410 000110' POINT 4, BITE(G), 7 + 000101' 300410 000110' POINT 4, BITE(G), 11 + 000102' 240410 000110' POINT 4, BITE(G), 15 + 000103' 200410 000110' POINT 4, BITE(G), 19 + 000104' 140410 000110' POINT 4, BITE(G), 23 + 000105' 100410 000110' POINT 4, BITE(G), 27 + 000106' 040410 000110' POINT 4, BITE(G), 31 + 000107' 000410 000110' POINT 4, BITE(G), 35 + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 7 +FUDGE2 MAC 24-APR-78 03:09 BYTE TABLE FOR DISPATCHING + + SUBTTL BYTE TABLE FOR DISPATCHING + ;CLASSIFICATION BYTE CODES + ; BYTE DISP CLASSIFICATION + + ; 00 00 ILLEGAL CHARACTER, SWITCH MODE + ; 01 01 ALPHABETIC CHARACTER, SWITCH MODE + ; 02 02 NUMERIC CHARACTER, SWITCH MODE + ; 03 03 SWITCH MODE ESCAPE, SWITCH MODE + + ; 00 04 ILLEGAL CHARACTER, NORMAL MODE + ; 01 05 ALPHABETIC CHARACTER, NORMAL MODE + ; 02 06 NUMERIC CHARACTER, NORMAL MODE + ; 03 07 SWITCH MODE ESCAPE, SWITCH MODE + + ; 04 10 IGNORED CHARACTER + ; 05 11 ENTER SWITCH MODE WITH A <(> + ; 06 12 DEVICE DELIMITER, <:> + ; 07 13 FILE EXTENSION DELIMITER, <.> + ; (CAN ALSO BE PART OF A PROGRAM NAME) + ; 10 14 OUTPUT SPECIFICATION, <LFT ARW> OR <=> + ; 11 15 FILE DELIMITER, <,> + ; 12 16 COMMAND TERMINATOR, <ALT MODE>=33,175,176 + ; 13 17 ENTER SWITCH MODE WITH A </> + ; 14 20 CHANGE CONTEXT OF PERIOD TO PROG NAME, <<> ,OR "[" + ; 15 21 CHANGE CONTEXT OF PERIOD TO FILE NAME, <>> + + ;BYTE TABLE CORRESPONDING TO 128 ASCII CHARS + + 000110' 200000 000000 BITE: BYTE (4) 4,0,0,0,0,0,0,0,0 ;NUL + 000111' 210421 000000 BYTE (4) 4,4,4,4,4,0,0,0,0 + 000112' 000000 000012 BYTE (4) 0,0,0,0,0,0,0,0,12 ;?Z=$ + 000113' 500000 110100 BYTE (4) 12,0,0,0,0,11,0,4,0 ;$ + 000114' 000001 230411 BYTE (4) 0,0,0,0,5,3,1,0,11 ;***DMN + 000115' 017310 421042 BYTE (4) 0,7,13,2,2,2,2,2,2 ;-,.,/,0,1,2,3,4,5 + 000116' 104211 406215 BYTE (4) 2,2,2,2,6,0,14,10,15 ;6,7,8,9,:,;,<,=,> + 000117' 000104 210421 BYTE (4) 0,0,1,1,1,1,1,1,1 ; , , ,B,C,D,E,F,G + 000120' 042104 210421 BYTE (4) 1,1,1,1,1,1,1,1,1 ;H,I,J,K,L,M,N,O,P + 000121' 042104 210421 BYTE (4) 1,1,1,1,1,1,1,1,1 ;Q,R,S,T,U,V,W,X,Y + 000122' 070000 100021 BYTE (4) 1,14,0,0,0,10,0,1,1 ;Z,[, ,], ,?, ,A,B + 000123' 042104 210421 BYTE (4) 1,1,1,1,1,1,1,1,1 ;C,D,E,F,G,H,I,J,K + 000124' 042104 210421 BYTE (4) 1,1,1,1,1,1,1,1,1 ;L,M,N,O,P,Q,R,S,T + 000125' 042104 210012 BYTE (4) 1,1,1,1,1,1,0,0,12 ;U,V,W,X,Y,Z, , ,$ + 000126' 510000 000000 BYTE (4) 12,4 ;$,DEL + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 8 +FUDGE2 MAC 24-APR-78 03:09 ROUTINES TO HANDLE 0-9,A-Z,. CHARACTERS + + SUBTTL ROUTINES TO HANDLE 0-9,A-Z,. CHARACTERS + ;IN THE COMMAND STRING. IN NORMAL MODE, THE CHARACTER IS + ;DEPOSITED TO FORM A SIXBIT SYMBOL. NOTE THAT "." IS LEGAL IN A PROGRAM NAME. + ;E.G. <EXP.1,ALLIO.>, IF ENCLOSED IN< >. IN SWITCH MODE, THE PROPER + ;INSTRUCTION IS EXECUTED WITH THE AID OF A DISPATCH TABLE. + ;THEN, IF SWITCH MODE WAS ENTERED WITH A SLASH, FUDGE2 EXITS + ;FROM SWITCH MODE. + + 000127' 660340 004000 STORE: TRO F,INFOB ; INDICATE VALID INFO SEEN + 000130' 361100 000045' SOJL B, GETCMN ; JUMP IF NO ROOM FOR CHARACTER + 000131' 305040 000141 CAIGE A,141 ;WORRY ABOUT LOWER CASE LETTERS + 000132' 275040 000040 SUBI A, 40 ;CONVERT FROM ASCII TO SIXBIT + 000133' 136040 000006 IDPB A, E ;STORE CHARACTER ACCORDING TO BYTE + 000134' 254000 000045' JRST GETCMN ;RETURN FOR NEXT CHARACTER + + 000135' 205740 072000 SWTCHA: MOVSI SW, 072000 ;GET AN MTAPE OPCODE + 000136' 301040 000141 CAIL A,141 ;ACCEPT LOWER CASE SWITCHES + 000137' 275040 000040 SUBI A,40 + 000140' 256001 000115' XCT SLIST-101(A) ;EXECUTE PROPER SWITCH INSTRUCTION + 000141' 622340 000010 TRZE F, SLSHB ;SWITCH MODE ENTERED WITH A </>? + 000142' 620340 000004 TRZ F, SWTB ;YES, EXIT FROM SWITCH MODE + 000143' 254000 000045' JRST GETCMN ;RETURN FOR MORE CHARACTERS + + + ;THE FOLLOWING THREE ROUTINES HANDLE THE CONTROL CHARACTERS IN + ;THE COMMAND STRING WHICH CAUSE FUDGE2 TO ENTER INTO AND EXIT + ;FROM SWITCH MODE. THERE ARE TWO TYPES OF SWITCH MODE, DEPENDING + ;ON WHETHER THE IT IS ENTERED WITH A </> OR A <(>. + + 000144' 660340 000010 SLASH: TRO F, SLSHB ;ENTER SWITCH MODE WITH A </> + 000145' 664340 000004 SWTCH: TROA F, SWTB ;ENTER SWITCH MODE WITH A <(> + 000146' 620340 000004 SWTCHE: TRZ F, SWTB ;EXIT FROM SWITCH MODE WITH A <)> + 000147' 254000 000045' JRST GETCMN ;RETURN FOR MORE CHARACTERS + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 9 +FUDGE2 MAC 24-APR-78 03:09 LEFT ARROW PROCESSOR + + SUBTTL LEFT ARROW PROCESSOR + ;THE LEFT ARROW PROCESSOR IS ENTERED BY A DISPATCH FROM THE + ;COMMAND STRING. IT SIGNALS THE END OF THE DESTINGATION DEVICE + ;SPECIFICATION. IF THE SIXBIT SYMBOL ACCUMULATOR S IS NON- + ;ZERO, IT ASSUMES THAT THE USER HAS OMITTED THE FILE NAME DE- + ;LIMITER, AND CALLS THE FILE NAME ROUTINE. A PROGRAM NAME + ;SPECIFICATION IN THE OUTPUT DEVICE IS ILLEGAL. + ;FLAG SETTINGS: THE DESTINATION FLAG (DESTB) IS SET TO ONE, + ;THE DEVICE FLAG IS SET TO ZERO, AND THE PROGR?M NAME FLAG (PROGB) + ;IS SET TO ONE SO THAT THE FIRST DEVICE AFTER THE LEFT ARROW + ;WILL NOT RESULT IN A CALL TO PUTDEV. + ;IF NO OUTPUT DEVICE IS SEEN DSK IS ASSUMED. + ;POPBAK IS SET SO CONTROL RETURNS FRON COLON VIA GETCHR + + 000150' 261500 000014 NODEV: PUSH P,S ;SAVE FILE NAME + 000151' 205600 446353 MOVSI S,(SIXBIT /DSK/);DSK IS DEFAULT DEVICE + 000152' 660340 100000 TRO F,POPBAK ;RETURN FROM GETCHR + 000153' 260500 000317' PUSHJ P,COLON ;FAKE A DEVICE SEEN + 000154' 262500 000014 POP P,S ;RESTORE FILE NAME + 000155' 263500 000000 POPJ P, ;RETURN + + + 000156' 260500 000407' LFTARW: PUSHJ P, SEMICP ;DO A LOOKUP IF NECESSARY + 000157' 620340 000400 TRZ F, DEVB ;SET THE DEVICE FLAG TO ZERO + 000160' 660340 000101 TRO F, PROGB+DESTB ;SET PROGRAM AND DESTINATION FLAGS + 000161' 254000 000040' JRST GETCHR ;RETURN FOR NEXT SYMBOL + + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 10 +FUDGE2 MAC 24-APR-78 03:09 THIS CODE PROCESSES PROJECT-PROGRAMMER NUMBERS + + SUBTTL THIS CODE PROCESSES PROJECT-PROGRAMMER NUMBERS + + 000162' 400140 000000 LSQB: SETZ T, ;START WITH ZERO + 000163' 261500 000003 PUSH P,T ;AND STORE IT + 000164' 260500 000210' LSQB1: PUSHJ P,TTYIN ;GET NEXT CHAR. + 000165' 306040 000135 CAIN A,"]" ;MATCHING SQB.? + 000166' 254000 000202' JRST RSQB ;YES + 000167' 306040 000054 CAIN A,"," ;COMMA? + 000170' 254000 000177' JRST SQBCMA ;YES,SORT OUT XWD + 000171' 301040 000060 CAIL A,"0" ;IS IT AN OCTAL NUMBER? + 000172' 303040 000071 CAILE A,"9" ;... + 000173' 254000 000214' JRST ERRISQ ;NO,ERROR + 000174' 242140 000003 LSH T,3 ;MAKE SPACE FOR NEXT CHAR. + 000175' 271141 777720 ADDI T,-60(A) ;ADDI IN NEW DIGIT + + + 000176' 254000 000164' JRST LSQB1 ;BACK FOR MORE + + 000177' 516152 000000 SQBCMA: HRLZM T,(P) ;STORE LEFT HALF ON STACK + 000200' 400140 000000 SETZ T, ;START AFRESH + 000201' 254000 000164' JRST LSQB1 ;AND GET RIGHT HALF + + 000202' 542152 000000 RSQB: HRRM T,(P) ;PUT RIGHT HALF ON STACK + 000203' 262500 000003 POP P,T ;AND POP XWD OFF + 000204' 202140 005113' MOVEM T,PRJPRG ;SAVE DEFAULT PROJ-PROG + 000205' 326600 000045' JUMPN S,GETCMN ;AFTER A FILE NAME IS ONLY TEMP. + 000206' 202140 005112' MOVEM T,DEFPPN ;PERMANENT DEFAULT PPN + 000207' 254000 000045' JRST GETCMN ;GET NEXT CHAR. + + 000210' 377000 004612' TTYIN: SOSG IBUF+2 ;BUFFER EMPTY + 000211' 066000 000000 INPUT 0, ;YES, FILL IT UP + 000212' 134040 004611' ILDB A,IBUF+1 ;GET A CHARACTER + 000213' 263500 000000 POPJ P, ;AND RETURN + + 000214' 201100 005130' ERRISQ: MOVEI B,[ASCIZ /?Illegal project-programmer number/] + 000215' 254000 002247' JRST ERROR + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 11 +FUDGE2 MAC 24-APR-78 03:09 DISPATCH TABLE FOR SWITCHES + + SUBTTL DISPATCH TABLE FOR SWITCHES + + 000216' 201640 000711' SLIST: MOVEI DIS, APPEND ;A - APPEND INSTRUCTION + 000217' 260500 000250' PUSHJ P, BSWTCH ;B - BACKSPACE ONE FILE + 000220' 201640 000730' MOVEI DIS, DELCPY ;C - COPY AND DELETE LOCAL SYMBOLS ***VJC + 000221' 201640 000701' MOVEI DIS, DELETE ;D - DELETE INSTRUCTION + 000222' 201640 000660' MOVEI DIS, EXTRCT ;E - EXTRACT INSTRUCTION + 000223' 254000 002136' JRST ERR16 ;F - ERROR + 000224' 254000 002136' JRST ERR16 ;G - ERROR + 000225' 254000 002136' JRST ERR16 ;H - ERROR + 000226' 201640 000632' MOVEI DIS, INSERT ;I - INSERT INSTRUCTION + 000227' 254000 002136' JRST ERR16 ;J - ERROR + 000230' 260500 000251' PUSHJ P, KSWTCH ;K - SKIPFILE + 000231' 201640 000600' MOVEI DIS, LIST ;L - LIST COMMAND + 000232' 254000 002136' JRST ERR16 ;M - ERROR + 000233' 254000 002136' JRST ERR16 ;N - ERROR + 000234' 254000 002136' JRST ERR16 ;O - ERROR + 000235' 254000 002136' JRST ERR16 ;P - ERROR + 000236' 254000 002136' JRST ERR16 ;Q - ERROR + 000237' 201640 000621' MOVEI DIS, REPLCE ;R - REPLACE INSTRUCTION + 000240' 254000 002136' JRST ERR16 ;S - ERROR + 000241' 260500 000252' PUSHJ P, TSWTCH ;T - SKIP TO LOGICAL END OF TAPE + 000242' 254000 002136' JRST ERR16 ;U - ERROR + 000243' 254000 002136' JRST ERR16 ;V - ERROR + 000244' 260500 000253' PUSHJ P, WSWTCH ;W - REWIND MAG TAPE + 000245' 201640 000722' MOVEI DIS,INDEX ;X - INDEX THIS LIBRARY + 000246' 254000 002136' JRST ERR16 ;Y - ERROR + 000247' 260500 000254' PUSHJ P, ZSWTCH ;Z - CLEAR DIRECTORY ON DECTAPE + + + ;MAGTAPE AND DECTAPE DEVICE SWITCH HANDLERS + ;THE FOLLOWING ROUTINES HANDLE THE B,K,T,W, AND Z SWITCHES + ;BY ASSEMBLING THE PROPER CALL OR UUO INSTRUCTION. IF A + ;DEVICE HAS ALREADY BEEN SEEN, THE CHANNEL NUMBER IS LOADED + ;INTO THE COMMAND, AND THE INSTRUCTION IS EXECUTED. OTHER- + ;WISE, EXECUTION IS DEFERRED BY SETTING A FLAG AND STORING + ;THE PARTIALLY ASSEMBLED INSTRUCTION. THE INSTRUCTION IS + ;EXECUTED LATER, AFTER THE DEVICE HAS BEEN SEEN. + + 000250' 271740 000001 BSWTCH: ADDI SW, 1 ;CODE FOR BACKSPACE IS 17 + 000251' 271740 000006 KSWTCH: ADDI SW, 6 ;CODE FOR SKIPFILE IS 16 + 000252' 271740 000007 TSWTCH: ADDI SW, 7 ;CODE FOR SKIP TO L.E.O.T. IS 10 + 000253' 344740 000255' WSWTCH: AOJA SW,.+2 ;CODE FOR REWIND IS 1 + 000254' 200740 005123' ZSWTCH: MOVE SW, DTCLR ;DIFFERENT UUO FOR /Z + 000255' 660340 000002 TRO F, SAVEB ;TURN ON THE SWITCH BIT + 000256' 263500 000000 POPJ P, ;EXIT + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 12 +FUDGE2 MAC 24-APR-78 03:09 PERIOD PROCESSOR + + SUBTTL PERIOD PROCESSOR + ;THE PERIOD PROCESSOR IS CALLED BY A DISPATCH FROM GETCHR. IT + ;PRECEDES A FILE NAME EXTENSION, UNLESS THE CONTEXT BIT CONB IS + ;A ONE (CONB=1), IN WHICH CASE, THE PERIOD WAS FOUND INSIDE AN + ;ANGLE BRACKET, INDICATING THAT IT IS PART OF A PROGRAM NAME. + ;THE EXTENSION NAME IS GOTTEN BY ENTERING THE GETCHR ROUTINE + ;WITH THE LENGTH SET TO THREE CHARACTERS, AND A BYTE POINTER + ;SET TO STORE THE SYMOL IN ACCUMULATOR EXT. THE EXTENSION + ;FLAG IS SET BY THIS ROUTINE. + + 000257' 602340 010000 PERIOD: TRNE F, CONB ;IS PERIOD PART OF A PROGRAM NAME? + 000260' 254000 000127' JRST STORE ;YES, STORE IT IN SYMBOL + 000261' 660340 001000 TRO F, EXTB ;NO, SET EXTENSION FLAG + 000262' 200300 005120' MOVE E, EXTPTR ;GET ANOTHER BYTE POINTER + 000263' 201100 000003 MOVEI B, 3 ;ASSEMBLE A 3-CHARACTER WORD + 000264' 254000 000045' JRST GETCMN ;BUT DONT DESTROY S + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 13 +FUDGE2 MAC 24-APR-78 03:09 ROUTINES TO PROCESS ANGLE BRACKETS + + SUBTTL ROUTINES TO PROCESS ANGLE BRACKETS + ;THE FOLLOWING ROUTINES PROCESS THE LEFT ANGLE BRACKET "<" + ;AND RIGHT ANGLE BRACKET ">" CHARACTERS. THEY ARE ENTERED BY + ;A DISPATCH FROM THE GETCHR ROUTINE. THE ANGLE BRACKETS + ;CAN ACT AS FILE NAME OR PROGRAM NAME DELIMITERS, SO A CHECK + ;IS MADE TO SEE IF THE SYMBOL ACCUMULATOR IS NON-ZERO. THE + ;MAIN FUNCTION OF THE ROUTINES IS TO SET OR CLEAR THE CONTEXT + ;BIT CONB, WHOSE INTERPRETATION IS AS FOLLOWS: + ;SETTING OF BIT MEANING + ; 0 COMMAS DELIMIT FILE NAMES, AND PERIODS + ; DELIMIT FILE NAME EXTENSIONS + ; 1 COMMAS DELIMIT PROGRAM NAMES, AND PERIODS + ; ARE PART OF A PROGRAM NAME + + 000265' 606340 000001 LBRACK: TRNN F, DESTB ;IS THIS THE OUTPUT DEVICE? + 000266' 254000 002007' JRST ERROR1 ;YES, SYNTAX ERROR + 000267' 306040 000133 CAIN A,"[" ;PROJECT-PROGRAMMER PAIR? + 000270' 254000 000162' JRST LSQB ;YES, HANDLE IT + 000271' 200000 005102' MOVE 0,SDEVCHR ;GET SAVED DEV CHRSTCS + 000272' 607000 200100 TLNN 0,DTABIT+DSKBIT ;LAST DEVICE DSK OR DTA? + 000273' 254000 000277' JRST LBRACA ;NO + 000274' 200000 005101' MOVE 0,LSTCHR ;GET LAST CHAR + 000275' 306000 000072 CAIN 0,72 ;WAS IT COLON? + 000276' 254000 002007' JRST ERROR1 ;YES,:< ILLEGAL + 000277' LBRACA: ;NO CONTINUE + 000277' 260500 000407' PUSHJ P, SEMICP ;PROCESS THE FILE NAME + 000300' 660340 010000 TRO F, CONB ;SET CONTEXT TO PROGRAM NAMES + 000301' 350000 005077' AOS MATCH ;ADD ONE FOR EACH LEFT < ***VJC + 000302' 254000 000040' JRST GETCHR ;RETURN FOR MORE CHARACTERS + + 000303' 322600 000305' RBRACK: JUMPE S,.+2 ;IS THERE A SYMBOL TO HANDLE? + 000304' 260500 000470' PUSHJ P,COMMAP ;YES,PROCESS THE FILE NAME + 000305' 620340 010000 TRZ F,CONB ;SET CONTEXT TO FILE NAMES + 000306' 370000 005077' SOS MATCH ;SUBTRACT ONE FOR EACH RIGHT > ***VJC + 000307' 254000 000040' JRST GETCHR ;RETURN FOR MORE CHARACTERS + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 14 +FUDGE2 MAC 24-APR-78 03:09 COMMA PROCESSOR + + SUBTTL COMMA PROCESSOR + ;THE COMMA ROUTINE IS ENTERED BY A DISPATCH FROM GETCHR. + ;IT DETERMINES WHETHER THE COMMA DELIMITS A FILE NAME OR A + ;PROGRAM NAME, AND TRANSFERS CONTROL EITHER TO SEMICP OR TO + ;COMMAP. + + 000310' 606340 010000 COMMA: TRNN F, CONB ;FILE NAME OR PRGRAM NAME? + 000311' 254000 000314' JRST COMMAX ;FILE NAME + 000312' 260500 000470' PUSHJ P, COMMAP ;PROGRAM NAME + 000313' 254000 000040' JRST GETCHR ;RETURN FOR MORE CHARACTERS + + 000314' 260500 000407' COMMAX: PUSHJ P, SEMICP ;FILE NAME, DO A LOOKUP + 000315' 402000 005113' SETZM PRJPRG ;CLEAR TEMP. PPN + 000316' 254000 000040' JRST GETCHR ;RETURN FOR MORE CHARACTERS + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 15 +FUDGE2 MAC 24-APR-78 03:09 COLON PROCESSOR + + SUBTTL COLON PROCESSOR + ;THIS ROUTINE IS ENTERED BY A DISPATCH FROM THE GETCHR + ;ITS PURPOSE IS TO INITIALIZE DEVICES USED BY FUDGE2 AND + ;ASSIGN THEM A CHANNEL NUMBER. IF THE DEVICE IS THE TTY, THE + ;ROUTINE EXITS IMMEDIATELY, SINCE THE TTY HAS ALREADY BEEN + ;INITIALIZED. IF A PROGRAM WAS NOT SEEN IN THE PREVIOUS DEVICE + ;SPECIFICATION, THEN THE PRECEDING FILE HAD NO PROGRAMS + ;FOLLOWING IT, AND A ZERO IS PLACED IN THE LIST STRUCTURE IN + ;THE 3-WORD FILE BLOCK, SO THAT THE GETDEV ROUTINE WILL + ;KNOW THAT THE ENTIRE FILE IS DESIRED. IF THE COLON ROUTINE + ;IS CALLED WITH 0 IN ACCUMULATOR S, THE ROUTINE ASSUMES + ;THAT SOMETHING LIKE "DTA3:FOO?DTA4:BAR<X,Y,Z>,MTA0:::/R" + ;WAS TYPED, AND IT PUTS A PHONY FILE NAME IN FILBUF TO KEEP + ;THE BOOK-KEEPING STRAIGHT. + + 000317' 660340 000400 COLON: TRO F, DEVB ;DEVICE WAS SEEN IN THIS SPEC. + 000320' 602340 100000 TRNE F,POPBAK ;DEFAULT "DSK" BEING SET + 000321' 254000 000324' JRST .+3 ;SO DON'T CLEAR PROJ-PROG + 000322' 402000 005112' SETZM DEFPPN ;CLEAR PERMANENT PPN + 000323' 402000 005113' SETZM PRJPRG ;AND TEMP. ALSO + 000324' 322600 000373' JUMPE S, COLONC ;NULL S IMPLIES FILES ON MTA,PTR + 000325' 202600 002522' MOVEM S, COLON2 ;SAVE DEVICE FOR INIT + 000326' 200400 000014 MOVE G, S ;GET A COPY OF THE DEVICE NAME + 000327' 047400 000004 DEVCHR G, ;GET ITS CHARACTERISTICS + 000330' 202400 005102' MOVEM G,SDEVCHR ;SAVE DEV CHRSTCS ***VJC + 000331' 603400 040010 TLNE G,TTYBIT!LPTBIT ;IF EITHER TTY OR LPT + 000332' 402000 005111' SETZM LEVEL ;DON'T DO EXTENDED LOOKUPS EVER + 000333' 603400 000010 TLNE G, TTYBIT ;IS THE DEVICE A TTY? + 000334' 254000 000040' JRST GETCHR ;YES, RETURN IMMEDIATELY + 000335' 606340 000001 TRNN F, DESTB ;IS THIS THE OUTPUT DEVICE? + 000336' 254000 000375' JRST COLON4 ;YES, GO CHECK SEPARATE THINGS + 000337' 200240 003324' MOVE D, DEVBUF ;GET POINTER TO DEVICE NAME TABLE + 000340' 252240 000344' COLON6: AOBJP D, COLON7 ;MORE DEVICES TO CHECK? + 000341' 316605 003324' CAMN S, DEVBUF(D) ;HAS DEVICE ALREADY BEEN INITTED? + 000342' 254000 000040' JRST GETCHR ;YES, DON'T RE-INIT IT + 000343' 254000 000340' JRST COLON6 ;CHECK SOME MORE + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 16 +FUDGE2 MAC 24-APR-78 03:09 COLON PROCESSOR + + + 000344' 202605 003324' COLON7: MOVEM S, DEVBUF(D) ;STORE THE NEW DEVICE NAME + 000345' 205040 777777 MOVSI A, -1 ;FIX UP THE COUNT IN THE BUFFER + 000346' 272040 003324' ADDM A, DEVBUF ;... + 000347' 607400 000002 TLNN G, INBIT ;CAN DEVICE DO INPUT? + 000350' 254000 002015' JRST ERROR4 ;NO, ERROR + 000351' 201600 000000 MOVEI S, 0 ;CLEAR OUT THE SYMBOL WORD + 000352' 666340 000100 TRON F, PROGB ;WAS A PROGRAM NAME SEEN? + 000353' 260500 000444' PUSHJ P, STNULL ;NO, STORE A NULL IN FILE BLOCK + 000354' 200040 000005 MOVE A, D ;CALCULATE BUFFER HEADER POSITION + 000355' 221040 000003 IMULI A, 3 ;3 WORDS PER BUFFER HEADER + 000356' 271040 004610' ADDI A, IBUF ;ALL BUFFER HEADERS IN IBUF BLOCK + 000357' 350000 005103' COLON8: AOS NUMDEV ;ONE MORE DEVICE SEEN + 000360' 202040 002523' MOVEM A, COLON3 ;SAVE WORD FOR INIT + 000361' 201040 000014 MOVEI A, 14 ;SET MODE TO BINARY + 000362' 603400 040000 TLNE G,LPTBIT ;IS DEVICE THE LPT? + 000363' 201040 000000 MOVEI A, 0 ;YES, RESTORE MODE TO ASCII + 000364' 542040 002521' HRRM A, COLON0 ;SAVE MODE FOR INIT + 000365' 137240 005137' DPB D, [POINT 4,COLON1,12] + 000366' 256000 002462' XCT COLON1 ;DO OPEN ON DEVICE + 000367' 254000 002061' JRST ERROR9 ;DEVICE NOT AVAILABLE + 000370' 606340 000001 TRNN F, DESTB ;IS THIS THE OUTPUT DEVICE? + 000371' 254000 000040' JRST GETCHR ;YES, NO MORE CHECKING - EXIT + 000372' 607400 000004 TLNN G, DRCTRB ;DOES DEVICE HAVE A DIRECTORY? + 000373' 260500 000406' COLONC: PUSHJ P, COLONB ;NO, GIVE IT A PHONY FILE NAME + 000374' 254000 000040' JRST GETCHR ;RETURN FOR MORE CHARACTERS + + ;OUTPUT DEVICE ONLY + + 000375' 202600 003325' COLON4: MOVEM S, DEVBUF+1 ;SAVE THE DEVICE NAME + 000376' 201240 000001 MOVEI D, 1 ;SET DEVICE NUMBER TO 1 + 000377' 607400 000001 TLNN G, OUTBIT ;CAN DEVICE DO OUTPUT? + 000400' 254000 002015' JRST ERROR4 ;NO, ERROR + 000401' 603400 000100 TLNE G,DTABIT ;IS DEVICE DTA? + 000402' 660340 400000 TRO F,DTAFLG ;YES, SET IN CASE INDEXING + 000403' 205040 004605' MOVSI A, OBUF+3 ;CALCULATE BUFFER HEADER ADDRESS + 000404' 660340 000040 TRO F, TTYCB ;INDICATE NON-TTY IO + 000405' 254000 000357' JRST COLON8 ;ENTER MAIN PROCESSING LOOP + + 000406' 201600 465757 COLONB: MOVEI S, 465757 ;FILE NAME OF "FOO" + ;FALLS THROUGH TO SEMICP ROUTINE + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 17 +FUDGE2 MAC 24-APR-78 03:09 FILE NAME PROCESSOR + + SUBTTL FILE NAME PROCESSOR + ;THIS ROUTINE IS CALLED BY THE COMMA ROUTINE WHEN IT HAS + ;BEEN DETERMINED THAT THE CONTEXT OF THE COMMA IS THAT OF A + ;FILE NAME. NULL FILES ARE IGNORED BY THE ROUTINE, AND CAUSE + ;AN IMMEDIATE RETURN TO GETCHR. FOR OUTPUT DEVICES, AN ENTER + ;IS PERFORMED, WHILE FOR INPUT DEVICES, THE FLOW OF CONTROL IS + ;AS FOLLOWS: + ; 1. IF THE PREVIOUS FILE HAD NO PROGRAMS, A ZERO IS + ; STORED IN THE 3RD WORD OF THE FILE BLOCK OF THAT + ; FILE - THE WORD THAT ORDINARILY POINTS TO THE + ; PROGRAM SUBLIST. + ; 2. THE PROGRAM LIST FOR THE PREVIOUS FILE IS TERMINATED + ; BY PUTTING A ZERO IN THE PROGRAM BUFFER, AND PUTTING + ; A POINTER TO THE ZERO IN THE 3RD WORD OF THIS FILE + ; BLOCK (NOT THE PREVIOUS BLOCK) + ; 3. THE FILE NAME AND FILE NAME EXTENSION AND THE DEVICE + ; CHANNEL NUMBER OF THE CURRENT FILE ARE STORED. + + 000407' 606340 000400 SEMICP: TRNN F,DEVB ;HAS A DEVICE BEEN SEEN? + 000410' 260500 000150' PUSHJ P,NODEV ;NO, SO ASSUME "DSK" + 000411' 312740 005123' CAME SW,DTCLR ;Z SWITCH? YES, OPERATE ON OUTPUT ONLY + 000412' 137240 005140' DPB D, [POINT 4,SW,12] + 000413' 622340 000002 TRZE F, SAVEB ;IS THERE A SWITCH TO PROCESS? + 000414' 256000 000017 XCT SW ;YES, EXECUTE IT + 000415' 322600 000462' JUMPE S, SEMIC3 ;IGNORE NULL FILES + + 000416' 626340 001000 SEMICA: TRZN F, EXTB ;EXPLICIT EXTENSION SEEN? + 000417' 505700 624554 HRLI EXT, 624554 ;NO, REPLACE WITH REL" + 000420' 606340 000001 TRNN F, DESTB ;OUTPUT DEVICE? + 000421' 254000 000447' JRST SEMIC2 ;YES, PROCESS SEPARATELY + 000422' 261500 000014 PUSH P, S ;SAVE FILE NAME + 000423' 201600 000000 MOVEI S, 0 ;PUT IN A ZERO + 000424' 626340 000100 TRZN F, PROGB ;WAS A PROGRAM SEEN IN PREVIOUS? + 000425' 260500 000444' PUSHJ P, STNULL ;NO, CLOSE OUT PREVIOUS FILE + 000426' 260500 001144' PUSHJ P, PUTPRG ;YES, CLOSE OUT PREVIOUS PRGLST + 000427' 262500 000014 SEMIC4: POP P, S ;RESTORE FILE NAME + 000430' 316600 005141' CAMN S,[12B5] ;IS IT * ?***DMN + 000431' 254000 001675' JRST ASTRSK ;YES ***DMN + 000432' 260500 001137' PUSHJ P, PUTFIL ;NO, STORE FILENAME + 000433' 200600 005112' MOVE S,DEFPPN ;GET GLOBAL PPN + 000434' 260500 001151' PUSHJ P,PUTPPN ;SAVE IT + 000435' 200600 000016 MOVE S, EXT ;GET FILE NAME EXTENSION + 000436' 260500 001137' PUSHJ P, PUTFIL ;STORE IT + 000437' 542241 000000 HRRM D, (A) ;STORE CHANNEL NUMBER, ALSO + 000440' 200600 005113' MOVE S,PRJPRG ;GET TEMP. PPN + 000441' 260500 001151' PUSHJ P,PUTPPN ;SAVE IT ALSO + 000442' 550600 002724' HRRZ S, PRGBUF ;GET A POINTER TO PROGRAM LIST + 000443' 254000 001137' JRST PUTFIL ;STORE IT AND EXIT + + 000444' 550040 002524' STNULL: HRRZ A, FILBUF ;GET ADDRESS OF CURRENT BLOCK + 000445' 402001 000000 SETZM (A) ;CLOSE OUT THE FILE + 000446' 263500 000000 POPJ P, ;EXIT + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 18 +FUDGE2 MAC 24-APR-78 03:09 ENTER ON OUTPUT DEVICE DIRECTORY + + SUBTTL ENTER ON OUTPUT DEVICE DIRECTORY + + 000447' 202600 004572' SEMIC2: MOVEM S, EBLOCK ;SAVE FILE NAME FOR ENTER + 000450' 202700 004573' MOVEM EXT, EBLOCK+1 ;SAVE FILE NAME EXTENSION + 000451' 137240 005142' DPB D, [POINT 4,SEMIC1,12] + 000452' 402000 004574' SETZM EBLOCK+2 ;CLEAR DATA AND PROTECTION + 000453' 200140 005102' MOVE T,SDEVCHR ;GET CHARACTERISTICS + 000454' 607140 200000 TLNN T,DSKBIT ;IF NOT A DSK + 000455' 402000 005111' SETZM LEVEL ;CLEAR LEVEL D FLAG + 000456' 332140 005111' SKIPE T,LEVEL ;EITHER -2 OR 0 + 000457' 254000 000463' JRST DEFENT ;SAVE ENTRY BLOCK + 000460' 256000 002463' XCT SEMIC1 ;DO AN ENTER ON THE OUTPUT DEVICE + 000461' 254000 002076' JRST ERR14 ;DIRECTORY FULL + 000462' 263500 000000 SEMIC3: POPJ P, ;EXIT + + 000463' 200140 005143' DEFENT: MOVE T,[XWD EBLOCK,SVENTR] + 000464' 251140 005115' BLT T,SVENTR+1 ;SAVE EBLOCK + 000465' 201140 000011 MOVEI T,RIBALC ;SET FOR 11 WORD LOOKUP + 000466' 202140 004570' MOVEM T,EBLOCK-2 ;IN EXTENDED LOOKUP + 000467' 254000 000462' JRST SEMIC3 ;DEFER ENTRY TIL AFTER LOOKUP + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 19 +FUDGE2 MAC 24-APR-78 03:09 THE PROGRAM NAME PROCESSOR + + SUBTTL THE PROGRAM NAME PROCESSOR + ;THE COMMAP ROUTINE IS ENTERED BY A CALL FROM THE COMMA + ;ROUTINE WHEN THE CONTEXT OF A COMMA IS THAT OF A PROGRAM NAME + ;DELIMITER. ITS PURPOSE IS TO SAVE UP THE PROGRAM NAMES IT SEES + ;IN THE PROGRAM BUFFER PRGBUF. THE PROGRAM NAMES ARE CONVERTED + ;TO RADIX 50 REPRESENTATION, AND A CALL TO PUTPRG STORES THE + ;PROGRAM NAME FOR LATER REFERENCE BY THE VARIOUS FUDGE SUBROUTINES + ;------------------------------------------------------------------ + ;RADIX50 - SIXBIT CODE CONVERSION TABLE + + ;CHARACTER SIXBIT RADIX50 + + ;0-9 20-31 01-12 + ;A-Z 41-72 13-44 + ;BLANK 00 00 + ;PERIOD 16 45 + ;$ 04 46 + ;------------------------------------------------------------------- + ;THE SYMBOL IS ASSUMED TO LEFT-JUSTIFIED UPON ENTERING, AND + ;IS RIGHT-JUSTIFIED BEFORE CONVERSION TO RADIX 50. + + ;FLAG SETTINGS: THE PROGRAM BIT PROGB IS SET TO 1, AND THE FILE + ;BIT FILEB IS SET TO 0. + 000470' 660340 000100 COMMAP: TRO F, PROGB ;SET PROGRAM BIT + 000471' 606340 000001 TRNN F, DESTB ;IS THIS THE OUTPUT DEVICE? + 000472' 254000 002007' JRST ERROR1 ;YES, SYNTAX ERROR + 000473' 200300 005117' MOVE E, SYMPTR ;SET UP A BYTE POINTER TO S + 000474' 201100 000006 MOVEI B, 6 ;SET COUNTER TO SIX + 000475' 201200 000000 MOVEI C, 0 + 000476' 322600 000503' JUMPE S, COMMA1 ;NULL SYMBOL? + 000477' 602600 000077 COMMA3: TRNE S, 77 ;IS SYMBOL RIGHT-JUSTIFIED YET? + 000500' 254000 000503' JRST COMMA1 ;YES, GO CONVERT TO RADIX 50 + 000501' 241600 777772 ROT S, -6 ;NO, SHIFT IT ONE PLACE RIGHT + 000502' 254000 000477' JRST COMMA3 ;CHECK AGAIN + 000503' 221200 000050 COMMA1: IMULI C, 50 ;CONVERT TO RADIX50 + 000504' 134040 000006 ILDB A, E ;PICK UP NEXT CHARACTER IN S + 000505' 322040 000516' JUMPE A, COMMA4 ;A BLANK IS A BLANK IS A BLANK! + 000506' 306040 000004 CAIN A, 4 ;IS IT A <$>? + 000507' 271040 000070 ADDI A, 70 ;YES, COMPENSATE FOR SUBTRACTION + 000510' 306040 000016 CAIN A, 16 ;IS IT A <.>? + 000511' 271040 000055 ADDI A, 55 ;YES, COMPENSATE FOR SUBTRACTION + 000512' 303040 000031 CAILE A, 31 ;TRANSLATE TO RADIX 50 CODE + 000513' 275040 000007 SUBI A, 7 ;LETTER - SUBTRACT 26 + 000514' 275040 000017 SUBI A, 17 ;NUMBER - SUBTRACT 17 + 000515' 270200 000001 ADD C, A ;COMBINE WITH PARTIAL WORD + 000516' 367100 000503' COMMA4: SOJG B, COMMA1 ;LOOP FOR SIX CHARACTERS + 000517' 200600 000004 MOVE S, C ;PUT SYMBOL BACK IN S + 000520' 254000 001144' JRST PUTPRG ;STORE IT AND EXIT + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 20 +FUDGE2 MAC 24-APR-78 03:09 THE ALTMODE PROCESSOR + + SUBTTL THE ALTMODE PROCESSOR + ;THE ALTMODE SUBROUTINE IS CALLED BY A DISPATCH FROM THE + ;GETCHR ROUTINE WHEN A $ IS SEEN IN THE COMMAND STRING. IT SIGNALS + ;THE END OF THE COMMAND STRING. A CHECK IS MADE ON THE SYNTAX + ;OF THE COMMAND STRING, TO SEE IF AN OUTPUT DEVICE WAS SPEC- + ;IFIED, AND TO SEE IF A COMMAND WAS GIVEN. THE LIST + ;STRUCTURE FOR THE FILE NAMES AND PROGRAM NAMES IS TERMINATED + ;BY TWO CALLS TO SEMICP, THE LAST OF WHICH HAS A FILE NAME OF 0. + ;THE POINTERS AT THE TOP OF THE FILBUF,PRGBUF AND DEVBUF BUFFERS + ;ARE RESET FOR LATER USER BY THE VARIOUS SUBROUTINES. + + 000521' 606340 004000 ALTMOD: TRNN F,INFOB ; IS THERE A COMMAND? + 000522' 254000 000000' JRST FUDGE2 ; NO, RESTART + 000523' 260500 002243' PUSHJ P,CRLF ; ACKNOWLEDGE WITH A CR LF + 000524' 660340 040000 TRO F,CRLFTY ;INDICATE CR,LF TYPED + 000525' 260500 000407' PUSHJ P, SEMICP ;STORE THIS FILE NAME + 000526' 201600 000000 MOVEI S, 0 ;MAKE A NULL FILE NAME + 000527' 260500 000416' PUSHJ P, SEMICA ;TERMINATE THE LIST STRUCTURE + 000530' 200040 005124' MOVE A, FILXWD ;SET UP A BLT POINTER TO FIX + 000531' 251040 002527' BLT A, FILBUF+3 ;THE MASTER FILE PART,1ST WORD OF + 000532' 402000 002530' SETZM FILBUF+4 ;FILBUF WAS JUNK,NOW 4TH WORD=0 + 000533' 201040 002531' MOVEI A, FILBUF+5 ;RESET POINTER TO TRANS. FILES + 000534' 202040 002524' MOVEM A, FILBUF ;... + 000535' 201040 003125' MOVEI A,PPNBUF+1 ;RESET PPNBUF + 000536' 202040 003124' MOVEM A,PPNBUF ;AS IT WAS AT START + 000537' 322640 002007' JUMPE DIS, ERROR1 ;NO COMMAND SEEN? + 000540' 606340 000001 TRNN F, DESTB ;NO OUTPUT FILE MENTIONED? + 000541' 254000 002007' JRST ERROR1 ;SYNTAX ERROR + 000542' 332000 005077' SKIPE MATCH ;LEFT < EQU RIGHT > ?***VJC + 000543' 254000 002007' JRST ERROR1 ;SYNTAX ERROR ***VJC + 000544' 602340 000040 TRNE F, TTYCB ;CHANGE OUTPUT IF ON TTY + 000545' 660340 000020 TRO F, TTYOB ;... + ;AND FALL INTO INBUF0 + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 21 +FUDGE2 MAC 24-APR-78 03:09 THE ALTMODE PROCESSOR + + + ;SEE HOW MANY 204(8) WORD BLOCKS FIT IN JOBREL-JOBFF. + ;DIVIDE THIS NUMBER BY THE NUMBER OF DEVICES + ;IN DEVBUF TABLE. THIS GIVES THE NO. OF BLOCKS + ;THAT CAN BE ASSIGNED TO EACH DEVICE, IF ZERO, + ;NEED MORE CORE. THE REMAINDER OF THE DIVISION + ;INDICATES EXTRA BLOCKS THAT MAY BE + ;ALLOCATED TO OUTPUT OR INPUT DEVICES + + 000546' 550040 000000* INBUF0: HRRZ A, JOBREL ;GET TOP OF JOB AREA + 000547' 274040 000000* SUB A,JOBFF ;BUFFER AREA AVAILABLE + 000550' 231040 000204 IDIVI A, 204 ;NUMBER OF DECTAPE BLOCKS + 000551' 230040 005103' IDIV A,NUMDEV ;DIVIDED BY NUMBER OF DEVICES + 000552' 322040 000573' JUMPE A,INBUFG ;NOT ENOUGH CORE + 000553' 201300 000002 MOVEI E,2 ;START INBUFS ON DEVICE #2 + 000554' 602340 000040 TRNE F, TTYCB ;IS OUTPUT ON TTY? + 000555' 254000 000566' JRST INBUF1 ;NO, DO AN OUTBUF + 000556' 200200 000001 INBUF2: MOVE C, A ;PICK UP NUMBER OF BLOCKS + 000557' 361100 000561' SOJL A+1,.+2 ;ANY EXTRA BLOCKS? (REMAINDER) + 000560' 340200 000000 AOJ C, ;YES, USE THEM + 000561' 137300 005144' DPB E, [POINT 4, INBUF3,12] + 000562' 256000 002464' XCT INBUF3 ;PERFORM THE INBUF + 000563' 315300 000005 CAMGE E, D ;MORE DEVICES TO TAKE CARE OF? + 000564' 344300 000556' AOJA E, INBUF2 ;YES, PROCESS THEM + 000565' 254015 000000 JRST (DIS) ;NO, GO TO APPROPRIATE SUBROUTINE + + + 000566' 200200 000001 INBUF1: MOVE C, A ;PICK UP NUMBER OF BLOCKS + 000567' 361100 000571' SOJL A+1,.+2 ;ANY EXTRA BLOCKS? + 000570' 340200 000000 AOJ C, ;YES, GIVE ONE TO OUTPUT + 000571' 065044 000000 INBUF4: OUTBUF 1,(C) ;OUTBUF ON DEVICE #1 + 000572' 254000 000556' JRST INBUF2 ;GO DO SOME INBUFS + ;ASK FOR MORE CORE + + 000573' 550040 000546* INBUFG: HRRZ A,JOBREL ;GET ANOTHER K OF CORE + 000574' 271040 002000 ADDI A,2000 + 000575' 047040 000011 CORE A, + 000576' 254000 002170' JRST ERR22 ;NOT AVAILABLE + 000577' 254000 000546' JRST INBUF0 ;TRY TO SET UP BUFFERS + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 22 +FUDGE2 MAC 24-APR-78 03:09 FUDGE2 COMMAND PROCESSORS + + SUBTTL FUDGE2 COMMAND PROCESSORS + + ;LIST PROCESSOR + ;THIS ROUTINE PROCESSES THE L COMMAND IN FUDGE2. BINARY + ;PROGRAMS ARE READ, AND THEIR NAMES OUTPUT, UNTIL AN END + ;OF FILE IS REACHED. + + 000600' 606340 000020 LIST: TRNN F,TTYOB ;OUTPUT TO TTY? + 000601' 254000 000610' JRST LIST1 ;MODE MUST BE ASCII + 000602' 062040 000003 GETSTS 1,T ;GET STATUS + 000603' 626140 000014 TRZN T,14 ;BINARY MODE SET? + 000604' 254000 000610' JRST LIST1 ;NO, MUST BE ASCII + 000605' 060043 000000 SETSTS 1,(T) ;CHANGE MODE TO ASCII + 000606' 205140 000700 MOVSI T,700 ;SET UP NEW BYTE POINTER + 000607' 202140 004606' MOVEM T,OBUF+4 ;SO WORD COUNT WILL BE CORRECT + 000610' 260500 000772' LIST1: PUSHJ P, MSTGET ;GET THE MASTER DEVICE + 000611' 254000 002024' JRST ERROR6 ;NOT ENOUGH ARGUMENTS + 000612' 476000 005116' SETOM NOWARN ;DON'T GIVE WARNING MESSAGE IF INDEX SEEN + 000613' 260500 001156' LIST2: PUSHJ P, READ ;READ A PROGRAM NAME + 000614' 254000 002257' JRST EXIT ;ALL DONE + 000615' 200100 000001 MOVE B, A ;GET THE PROGRAM NAME IN B + 000616' 260500 002220' PUSHJ P, PTYPO ;TYPE IT OUT + 000617' 260500 002243' PUSHJ P, CRLF ;TYPE A CRLF + 000620' 254000 000613' JRST LIST2 ;RETURN FOR MORE PROGRAM NAMES + + + ;REPLACE PROCESSOR + ;THIS ROUTINE PROCESSES THE R COMMAND IN FUDGE2. THE TOTAL + ;COMMAND STRING IS BROKEN INTO A LIST OF PROGRAMS FOR THE MASTER + ;DEVICE, AND A LIST OF PROGRAMS FOR THE TRANSACTION DEVICES. + ;THE ROUTINE READS THE MASTER FILE UNTIL ONE OF THE DESIRED + ;REPLACEMENT PROGRAMS IS REACHED, THEN SWITCHES TO THE + ;TRANSACTION DEVICE TO FIND THE PROGRAM WHICH IS TO REPLACE THE + ;PROGRAM IN THE MASTER FILE. AFTER THE REPLACEMENT HAS BEEN + ;EFFECTED, RESET IS CALLED TO RESTORE THE MASTER DEVICE TO ITS + ;OLD POSITION. + + 000621' 260500 000772' REPLCE: PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER DEVICE + 000622' 254000 000656' JRST IPROC7 ;NO MORE, COPY REST OF MASTER + 000623' 260500 000743' PUSHJ P, COPYTO ;COPY UP TO THE PROGRAM NAME + 000624' 260500 000777' PUSHJ P, TRNGET ;GET A PROGRAM FROM TRANSACTION + 000625' 254000 002022' JRST ERROR5 ;USER DID NOT SUPPLY ENOUGH + 000626' 260500 000751' PUSHJ P, FINDCP ;FIND THE PROGRAM AND COPY IT + 000627' 306240 000002 CAIN D, 2 ;HAS THE MASTER DEVICE BEEN MOVED? + 000630' 260500 001002' PUSHJ P, RESET ;YES, RESET IT + 000631' 254000 000621' JRST REPLCE ;LOOK FOR MORE REPLACEMENTS + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 23 +FUDGE2 MAC 24-APR-78 03:09 INSERT PROCESSOR + + SUBTTL INSERT PROCESSOR + ;THIS SUBROUTINE PROCESSES THE I COMMAND IN FUDGE. IT READS AND + ;WRITES PROGRAMS FROM THE MASTER FILE UNTIL IT FINDS THE + ;PROGRAM NAME CURRENTLY POINTED TO, AT WHICH TIME IT STARTS READING + ;FROM THE TRANSACTION DEVICE, MAKING AN INSERTION AT THE + ;PROPER PLACE. + + 000632' 260500 000772' INSERT: PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER FILE + 000633' 254000 000656' JRST IPROC7 ;NO MORE, COPY REST OF MASTER + 000634' 260500 000743' PUSHJ P, COPYTO ;COPY UP TO A PROGRAM NAME + 000635' 202200 002517' MOVEM C, SAVEAC ;SAVE SPECIAL ACCUMULATOR + 000636' 200240 005145' MOVE D, [XWD ENTBLK,SVEBLK] + 000637' 251244 000506 BLT D, X+1(C) ;MOVE ENTRY BLOCK INTO SAFE PLACE + 000640' 260500 000777' PUSHJ P, TRNGET ;GET NEXT TRANSACTION FILE + 000641' 254000 002022' JRST ERROR5 ;NOT ENOUGH TRANSACTION FILES + 000642' 260500 000751' PUSHJ P, FINDCP ;FIND TRANSACTION FILE AND COPY + 000643' 302240 000002 CAIE D, 2 ;HAS MASTER FILE BEEN JIGGLED? + 000644' 254000 000647' JRST FIXUP ;NO, RESTORE THE ENTRY BLOCK + 000645' 260500 001002' PUSHJ P, RESET ;YES, RESET IT + 000646' 254000 000654' JRST INSER1 ;WRITE OUTGO BACK FOR MORE INSERTIONS + + 000647' 200200 002517' FIXUP: MOVE C, SAVEAC ;RESTORE SPECIAL AC + 000650' 204240 005145' MOVS D, [XWD ENTBLK,SVEBLK] + 000651' 251244 000000 BLT D, (C) ;RESTORE ENTRY BLOCK + 000652' 201240 000002 MOVEI D, 2 ;SET UP CHANNEL AC + 000653' 201640 000006 MOVEI DIS, 6 ;SET UP BUFFER HEADER INDEX + 000654' 260500 001305' INSER1: PUSHJ P, WRITE ;WRITE OUT THE CURRENT FILE + 000655' 254000 000632' JRST INSERT ;GO BACK FOR MORE INSERTIONS + + 000656' 260500 000737' IPROC7: PUSHJ P, COPY ;COPY REST OF MASTER FILE + 000657' 254000 002257' JRST EXIT ;EXIT + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 24 +FUDGE2 MAC 24-APR-78 03:09 EXTRACT PROCESSOR + + SUBTTL EXTRACT PROCESSOR + ;THIS ROUTINE PROCESSES THE E COMMAND IN FUDGE. RATHER THAN + ;ONE MASTER AND SEVERAL TRANSACTION FILES, ALL FILES ARE + ;TREATED THE SAME. AFTER A CALL TO EITHER MSTGET OR TRNGET + ;PROGRAMS ARE SEARCHED FOR AND WRITTEN ON THE OUTPUT DEVICE. + + 000660' 476000 005116' EXTRCT: SETOM NOWARN ;NO WARNING MESSAGE + 000661' 260500 000772' PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER DEVICE + 000662' 254000 000670' JRST EPROC1 ;ALL DONE WITH MASTER DEVICE + 000663' 326540 000666' JUMPN R,.+3 ;ANY PROGRAMS THIS FILE? **VJC + 000664' 260500 000737' PUSHJ P,COPY ;NO, COPY ENTIRE FILE ***VJC + 000665' 254000 000670' JRST EPROC1 ; ***VJC + 000666' 260500 000751' PUSHJ P, FINDCP ;FIND THE PROGRAM AND COPY IT + 000667' 254000 000660' JRST EXTRCT ;RETURN FOR MORE MASTER PROGRAMS + 000670' 201040 002531' EPROC1: MOVEI A, FILBUF+5 ;GET PROGRAM FROM TRANS BUFFER + 000671' 202040 002524' MOVEM A, FILBUF ;INITIALIZE POINTER FIRST + 000672' 260500 001031' EPROC2: PUSHJ P, GETDEV ;... + 000673' 254000 002257' JRST EXIT ;ALL DONE + 000674' 326540 000677' JUMPN R,.+3 ;ANY PROGRAMS THIS FILE? ***VJC + 000675' 260500 000737' PUSHJ P,COPY ;NO, COPY ENTIRE FILE ***VJC + 000676' 254000 000672' JRST EPROC2 ; ***VJC + 000677' 260500 000751' PUSHJ P, FINDCP ;FIND THE PROGRAM AND COPY IT + 000700' 254000 000672' JRST EPROC2 ;RETURN FOR MORE TRANS FILES + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 25 +FUDGE2 MAC 24-APR-78 03:09 DELETE PROCESSOR + + SUBTTL DELETE PROCESSOR + ;THIS ROUTINE PROCESSES THE D COMMAND IN FUDGE2. ONLY ONE + ;INPUT FILE WILL BE READ, AND THE PROGRAM NAMES ASSOCIATED + ;WITH ITS LIST WILL BE DELETED. + + 000701' 260500 000772' DELETE: PUSHJ P, MSTGET ;GET A PROGRAM TO BE DELETED + 000702' 254000 000656' JRST IPROC7 ;FINISH OFF THE MASTER FILE + 000703' 260500 001156' DPROC1: PUSHJ P, READ ;READ A PROGRAM + 000704' 254000 002026' JRST ERROR7 ;EOF - CANT FIND IT + 000705' 316540 000001 CAMN R, A ;CORRECT PROGRAM? + 000706' 254000 000701' JRST DELETE ;YES, GET THE NEXT ONE + 000707' 260500 001305' PUSHJ P, WRITE ;NO, WRITE THIS ONE OUT + 000710' 254000 000703' JRST DPROC1 ;TRY AGAIN + + ;APPEND PROCESSOR + ;THIS ROUTINE HANDLES THE A COMMAND IN FUDGE2. IT WILL COPY + ;THE ENTIRE MASTER FILE, THEN START OBTAINING TRANSACTION + ;DEVICES WITH CALLS TO TRNGET, APPENDING ONE OR MORE + ;PROGRAMS FROM EACH FILE. + + 000711' 260500 000772' APPEND: PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER FILE + 000712' 254000 002024' JRST ERROR6 ;NOT ENOUGH ARGUMENTS + 000713' 260500 000737' PUSHJ P, COPY ;COPY ENTIRE FILE + 000714' 201040 002531' MOVEI A, FILBUF+5 ;INITIALIZE POINTER FOR TRANS + 000715' 202040 002524' MOVEM A, FILBUF ;... + 000716' 260500 001031' APROC3: PUSHJ P, GETDEV ;GET A PROGRAM NAME + 000717' 254000 002257' JRST EXIT ;ALL DONE + 000720' 260500 000751' PUSHJ P, FINDCP ;FIND THE PROGRAM AND COPY IT + 000721' 254000 000716' JRST APROC3 ;GET NEXT APPENDATION + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 26 +FUDGE2 MAC 24-APR-78 03:09 DELETE PROCESSOR + + + ;THIS ROUTINE PROCESSES THE X COMMAND (INDEX LIBRARY) + ;AND FALLS INTO DELETE LOCAL SYMBOLS CODE. + ;IF NOT DESIRED SKIP TO DELCPY+1 + + 000722' 200040 003325' INDEX: MOVE A,DEVBUF+1 ;GET OUTPUT DEVICE + 000723' 047040 000004 DEVCHR A, ;GET ITS CHARACTERISTICS + 000724' 607040 200100 TLNN A,DSKBIT!DTABIT ;ONLY ALLOW DSK AND DTA AS LIBRARY DEVICES + 000725' 254000 002172' JRST ERR23 ;GIVE ERROR MESSAGE + 000726' 476000 005116' SETOM NOWARN ;NO WARNING MESSAGE IF /X + 000727' 660340 200000 TRO F,XFLG ;SET INDEX FLAG + ; TROA F,XFLG ;SET /X BUT NOT /C + + ;DELETE LOCAL SYMBOLS AND COPY PROCESSOR + ;THIS ROUTINE PROCESSES THE C COMMAND + ;ONLY THE MASTER FILE IS HANDLED + + 000730' 660340 000200 DELCPY: TRO F, NOLOCB ;SET FLAG TO DELETE LOCAL SYMBOLS + 000731' 260500 000772' PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER FILE + 000732' 254000 002024' JRST ERROR6 ;NOT ENOUGH ARGUMENTS + 000733' 260500 000737' PUSHJ P, COPY ;COPY ENTIRE FILE + 000734' 606340 200000 TRNN F,XFLG ;INDEX FLAG ON? + 000735' 254000 002257' JRST EXIT ;ALL DONE + 000736' 254000 001571' JRST INDEX3 ;YES DO PASS 2 + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 27 +FUDGE2 MAC 24-APR-78 03:09 FUDGE2 IO SUBROUTINES + + SUBTTL FUDGE2 IO SUBROUTINES + + ;ROUTINES TO COPY FILES, COPY UP TO A GIVEN PROGRAM IN A FILE + ;AND TO FIND A GIVEN PROGRAM IN A FILE AND COPY IT. + + ;THE COPY ROUTINE WILL COPY BINARY PROGRAMS FROM WHEREVER THE + ;INPUT DEVICE HAPPENS TO BE WHEN IT IS CALLED, UP TO THE + ;END OF FILE. SINCE COPY IS CALLED WITH A PUSHJ, THE END-OF- + ;FILE EXIT IN INGET WILL EXIT TO THE PLACE THAT CALLED COPY. + + 000737' 260500 001156' COPY: PUSHJ P, READ ;READ A PROGRAM + 000740' 263500 000000 POPJ P, ;EXIT WHEN ALL THROUGH FILE + 000741' 260500 001305' PUSHJ P, WRITE ;WRITE OUT THE PROGRAM + 000742' 254000 000737' JRST COPY ;RETURN FOR MORE PROGRAMS + + ;THE COPYTO ROUTINE WILL READ AND WRITE PROGRAMS FROM THE + ;INPUT DEVICE UNTIL THE PROGRAM WHOSE NAME IS IN ACCUMULATOR + ;R IS FOUND, AT WHICH TIME IT EXITS + + 000743' 260500 001156' COPYTO: PUSHJ P, READ ;READ A PROGRAM + 000744' 254000 002026' JRST ERROR7 ;EOF - CANT FIND IT + 000745' 316540 000001 CAMN R, A ;IS IT THE CORRECT PROGRAM? + 000746' 263500 000000 POPJ P, ;YES, EXIT + 000747' 260500 001305' PUSHJ P, WRITE ;NO, WRITE IT OUT + 000750' 254000 000743' JRST COPYTO ;READ SOME MORE PROGRAMS + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 28 +FUDGE2 MAC 24-APR-78 03:09 FUDGE2 IO SUBROUTINES + + + ;THE FINDCP ROUTINE WILL SEARCH THE INPUT FILE FOR A PROGRAM + ;WHOSE NAME IS IN ACCUMULATOR R, AND HAVING FOUND IT, WILL + ;WRITE IT OUT. IF THE CONTENTS OF AC R ARE ZERO, THE ENTIRE + ;FILE IS COPIED. + + 000751' 322540 000737' FINDCP: JUMPE R, COPY ;COPY ENTIRE FILE? + 000752' 260500 001156' FIND1: PUSHJ P, READ ;READ A PROGRAM FROM INPUT FILE + 000753' 254000 000757' JRST FIND2 ;EOF, TRY REWINDING AND TRYING AGAIN + 000754' 312540 000001 CAME R, A ;IS THIS THE RIGHT ONE? + 000755' 254000 000752' JRST FIND1 ;NO, TRY AGAIN + 000756' 254000 001305' JRST WRITE ;YES, WRITE IT OUT AND EXIT + + 000757' 322040 002026' FIND2: JUMPE A,ERROR7 ;V3 IF EOF OUTPUT ERROR MESSAGE + 000760' 260500 001024' PUSHJ P, BACKSP ;BACKSPACE THE MAG TAPE + 000761' 550040 002524' HRRZ A, FILBUF ;PICK UP THE FILE POINTER + 000762' 502041 000003 HLLM A, 3(A) ;CLEAR THE LOOKUP FLAG FOR DECTAPE + 000763' 260500 001031' PUSHJ P, GETDEV ;SET UP THE PROGRAM AGAIN + 000764' 254000 002013' JRST ERROR3 ;IMPOSSIBLE ERROR RETURN + 000765' 260500 001156' FIND3: PUSHJ P, READ ;READ A PROGRAM FROM INPUT FILE + 000766' 254000 002026' JRST ERROR7 ;EOF - REALLY CANT FIND IT + 000767' 312540 000001 CAME R, A ;IS THIS THE RIGHT ONE? + 000770' 254000 000765' JRST FIND3 ;NO, TRY AGAIN + 000771' 254000 001305' JRST WRITE ;YES, WRITE IT OUT AND EXIT + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 29 +FUDGE2 MAC 24-APR-78 03:09 FUDGE2 IO SUBROUTINES + + ;ROUTINE MSTGET RETRIEVES A PROGRAM NAME FROM THE MASTER + ;DEVICE SPECIFICATIONS. IT SAVES THE POINTER IN FILBUF, + ;CHANGES IT TO POINT TO ITS OWN BLOCK, THEN CALLS GETDEV + + 000772' 200040 002524' MSTGET: MOVE A, FILBUF ;GET THE POINTER TO CURRENT FILE + 000773' 202040 002515' MOVEM A, FILSAV ;SAVE THE CURRENT POINTER + 000774' 201040 002525' MOVEI A, FILBUF+1 ;CHANGE IT TO POINT TO MASTER + 000775' 202040 002524' MOVEM A, FILBUF ;... + 000776' 254000 001031' JRST GETDEV ;CALL COMMON ROUTINE + + + ;ROUTINE TRNGET RETRIEVES A PROGRAM NAME FROM THE TRANSACTION + ;FILES. IT RESETS THE POINTER THAT MSTGET WIPED OUT, AND CALLS + ;THE COMMON PROGRAM RETRIEVAL PROGRAM GETDEV. + + 000777' 200040 002515' TRNGET: MOVE A, FILSAV ;GET SAVED POINTER + 001000' 202040 002524' MOVEM A, FILBUF ;RESTORE IT TO ITS PLACE + 001001' 254000 001031' JRST GETDEV ;CALL COMMON ROUTINE + + ;ROUTINE RESET RESTORES THE STATE OF THE MASTER DEVICE TO + ;WHAT IT WAS JUST AFTER THE LAST TIME MSTGET WAS CALLED. IT + ;SETS THE POINTER OF THE MASTER FILE BACK TO THE PREVIOUS + ;PROGRAM, CALLS MSTGET, AND FINDS THE PROGRAM AGAIN + + 001002' 201040 002531' RESET: MOVEI A,FILBUF+5 ;START OF TRANSACTION LIST ***DMN + 001003' 502040 002527' HLLM A, FILBUF+3 ;NOW CLEAR LOOKUP FLAG ON MASTER + 001004' 370000 002527' SOS FILBUF+3 ;MOVE POINTER BACK ONE PROGRAM + 001005' 336001 000000 RESET2: SKIPN (A) ;ANY TRANSACTION FILES ? ***DMN + 001006' 254000 001012' JRST RESET3 ;NO-ALL DONE ***DMN + 001007' 502041 000002 HLLM A,2(A) ;CLEAR LOOKUP FLAG ON IT ***DMN + 001010' 271040 000003 ADDI A,3 ;NEXT FILE ***DMN + 001011' 254000 001005' JRST RESET2 ;GO BACK FOR MORE ***DMN + 001012' 260500 000772' RESET3: PUSHJ P, MSTGET ;SET UP THE MASTER DEVICE + 001013' 254000 002013' JRST ERROR3 ;FUDGE ERROR-NO MASTER! + 001014' 260500 001024' PUSHJ P, BACKSP ;BACKSPACE IN CASE ITS A MAG TAPE + 001015' 200040 002515' MOVE A, FILSAV ;DIDDLE THE POINTERS, BECAUSE MSTGET + 001016' 202040 002524' MOVEM A, FILBUF ;WILL BE CALLED AGAIN IMMEDIATELY + 001017' 260500 001156' RESET1: PUSHJ P, READ ;READ A PROGRAM FROM MASTER FILE + 001020' 254000 002013' JRST ERROR3 ;FUDGE ERROR-CANT FIND PROGRAM + 001021' 312540 000001 CAME R, A ;IS IT THE RIGHT PROGRAM NAME? + 001022' 254000 001017' JRST RESET1 ;NO, LOOK AGAIN + 001023' 263500 000000 POPJ P, ;YES, EXIT + 001024' 137240 005146' BACKSP: DPB D, [POINT 4, BACK0,12] + 001025' 137240 005147' DPB D, [POINT 4, BACK1, 12] + 001026' 137240 005150' DPB D, [POINT 4, BACK2,12] + 001027' 137240 005151' DPB D, [POINT 4,BACK3,12] + 001030' 254000 002465' JRST BACK0 ;GO TO POSITION MAGTAPE + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 30 +FUDGE2 MAC 24-APR-78 03:09 COMMON PROGRAM RETRIEVAL PROGRAM GETDEV. + + SUBTTL COMMON PROGRAM RETRIEVAL PROGRAM GETDEV. + ;THIS PROGRAM USES VARIOUS POINTERS AND BITS OF INFORMATION + ;IN FILBUF AND PRG BUF TO RETURN TO THE USER A RADIX 50 + ;PROGRAM NAME AS SEEN IN THE COMMAND STRING. THE STRUCTURE + ;OF INFORMATION IN THESE TWO BUFFERS IS AS FOLLOWS: + + ;FILBUF IS A LIST OF 3-WORD BLOCKS OF DATA ABOUT EACH FILE. + ;THE FIRST WORD IN FILBUF IS A POINTER WHICH POINTS TO THE + ;FIRST WORD OF THE BLOCK CURRENTLY BEING WORKED ON BY + ;THE VARIOUS SUBROUTINES OF FUDGE. WHEN THE COMMAND STRING + ;IS BEING PROCESSED AND INFORMATION IS BEING STORED IN FILBUF, + ;THIS POINTER IS IN THE FORM OF AN AOBJN WORD SO THAT A CHECK + ;CAN BE MADE FOR BUFFER OVERFLOW. THE CONTENTS OF THE 3-WORD + ;FILE BLOCK IS AS FOLLOWS: + ; 1ST WORD - SIXBIT FILE NAME, OR ZERO IF THIS IS THE + ; END OF THE LIST . + ; 2ND WORD - LEFT HALF CONTAINS A SIXBIT FILE NAME EXTENSION + ; RIGHT HALF CONTAINS THE CHANNEL NUMBER FOR + ; THIS FILE. + ; 3RD WORD - LEFT HALF IS ZERO IS A LOOKUP HAS NOT BEEN + ; DONE ON THIS FILE NAME, AND -1 IF IT HAS. A + ; LOOKUP CAN THUS BE FORECED BY ZEROING OUT THE + ; LEFT HALF OF THE WORD. + ; RIGHT HALF CONTAINS A POINTER TO THE LAST + ; PROGRAM NAME IN PRGBUF THAT WAS REFERENCED. THE + ; RIGHT HALF IS ZERO IF THERE ARE NO PROGRAM + ; NAMES ASSOCIATED WITH THE FILE. + + ;PRGBUF IS A LIST OF PROGRAM NAMES USED BY THE FILES IN FILBUF. + ;THE FIRST WORD OF PRGBUF IS A POINTER WORD WHOSE USE IS THE + ;SAME AS THE FIRST WORD OF FILBUF.THE ENTRIES IN PRGBUF CONSIST + ;OF A LIST OF RADIX50 SYMBOLS, ONE TO A WORD, TERMINATED BY + ;A ZERO WORD. + + ;FUDGE2 WORKS WITH FILBUF AND PRGBUF IN TWO DISTINCTLY + ;DIFFERENT WAYS: ONCE WHEN IT IS PROCESSING THE COMMAND STRING + ;AND STORING THE VARIOUS FILE NAMES AND PROGRAM NAMES, AND + ;ONCE WHEN IT IS USING THE INFORMATION IN THE FILES TO PROCESS + ;A FUDGE COMMAND. WHEN A FILE NAME IS SEEN IN THE COMMAND STRING, + ;THE STATUS OF THE PREVIOUS FILE IS CHECKED. IF THE PREVIOUS + ;FILE HAD NO PROGRAM NAMES, THEN ITS POINTER WORD (3RD WORD) IS + ;ZEROED OUT TO INDICATE THE ABSCENCE OF ANY PROGRAMS IN PRGBUF. + ;OTHERWISE, PROCESSING BEGINS ON THE CURRENT FILE: THE FILE + ;NAME, FILE NAME EXTENSION, AND CHANNEL NUMBER ARE STORED. THE + ;CONTENTS OF THE POINTER WORD IN PRGBUF ARE STORED IN THE + ;POINTER WORD OF THE FILE BLOCK + ;ROOM IS LEFT IN FILBUF SO THAT WHEN THE CARRIAGE RETURN IS + ;SEEN, FUDGE2 CAN SHUFFLE THE FIRST FILE BLOCK UP ONE WORD AND + ;INSERT ANOTHER NULL. THE EFFECT OF THIS KLUDGE IS THAT WE NOW + ;HAVE TWO SEPARATE LISTS IN FILBUF, A MASTER LIST, AND A + ;TRANSACTION LIST. + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 31 +FUDGE2 MAC 24-APR-78 03:09 COMMON PROGRAM RETRIEVAL PROGRAM GETDEV. + + 001031' 200100 002524' GETDEV: MOVE B, FILBUF ;GET POINTER TO FILE BLOCK + 001032' 336002 000000 SKIPN (B) ;END OF LIST? (ZERO TERMINATES) + 001033' 263500 000000 POPJ P, ;YES, EXIT + 001034' 200040 003124' MOVE A,PPNBUF ;GET POINTER TO PPN'S + 001035' 200241 000000 MOVE D,(A) ;GET GLOBAL PPN + 001036' 202240 005112' MOVEM D,DEFPPN ;SAVE AS DEFAULT PPN + 001037' 200241 000001 MOVE D,1(A) ;GET TEMP. PPN + 001040' 202240 005113' MOVEM D,PRJPRG ;SAVE AS TEMP. PPN + 001041' 271040 000002 ADDI A,2 ;INCREMENT POINTER + 001042' 202040 003124' MOVEM A,PPNBUF ;SAVE NEW POINTER + 001043' 550242 000001 HRRZ D, 1(B) ;GET DEVICE NUMBER FOR THIS DEVICE + 001044' 331002 000002 SKIPL 2(B) ;HAS A LOOKUUP BEEN DONE? + 001045' 254000 001066' JRST GET3 ;NO, GO DO LOOKUP + 001046' 201640 000003 GET0: MOVEI DIS, 3 ;SET UP AC DIS + 001047' 220640 000005 IMUL DIS, D ;C(DIS) = 3*C(D) + 001050' 550042 000002 HRRZ A, 2(B) ;GET POINTER TO PROGRAM NAMES + 001051' 322040 001060' JUMPE A, GET1 ;NULL PROGRAM LIST (NO POINTER)? + 001052' 350042 000002 AOS A, 2(B) ;NO, INCREMENT POINTER BY ONE + 001053' 200541 000000 MOVE R, (A) ;GET A PROGRAM NAME + 001054' 326540 001063' JUMPN R, CPOPJ1 ;END OF PROGRAM LIST? + 001055' 271100 000003 ADDI B, 3 ;YES, INCREMENT FILBUF POINTER + 001056' 202100 002524' MOVEM B, FILBUF ;SAVE NEW POINTER + 001057' 254000 001031' JRST GETDEV ;TRY NEXT FILE BLOCK + + 001060' 201540 000000 GET1: MOVEI R, 0 ;NO PROGRAMS, RETURN ZERO + 001061' 271100 000003 ADDI B, 3 ;MOVE FILBUF POINTER TO NEXT BLOCK + 001062' 202100 002524' MOVEM B, FILBUF ;SAVE THE POINTER + 001063' 354012 000000 CPOPJ1: AOSA (P) ;GOOD RETURN + 001064' 262512 000000 POPOUT: POP P,(P) ;POP UP ONE LEVEL + 001065' 263500 000000 CPOPJ: POPJ P, ;EXIT + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 32 +FUDGE2 MAC 24-APR-78 03:09 COMMON PROGRAM RETRIEVAL PROGRAM GETDEV. + + + 001066' 137240 005152' GET3: DPB D, [POINT 4,GET3A,12] + 001067' 256000 002472' XCT GET3A ;CLOSE CURRENT FILE BEFORE DOING... + 001070' 200042 000000 MOVE A, (B) ;GET FILE NAME OF NEXT FILE + 001071' 202040 004572' MOVEM A, EBLOCK ;SET UP FOR LOOKUP + 001072' 510042 000001 HLLZ A, 1(B) ;GET FILE NAME EXTENSION + 001073' 202040 004573' MOVEM A, EBLOCK+1 ;SAVE IT FOR LOOKUP + 001074' 563042 000002 HRROS A, 2(B) ;SET FLAG IN LEFT HALF OF 3RD WORD + 001075' 137240 005153' DPB D, [POINT 4,GET4A,12] + 001076' 336040 005113' SKIPN A,PRJPRG ;GET TEMP. PPN + 001077' 200040 005112' MOVE A,DEFPPN ;USE PERMANENT IF NO TEMP. + 001100' 202040 004575' MOVEM A,EBLOCK+3 ;SAVE IT + 001101' 202040 004571' MOVEM A,EBLOCK-1 ;FOR LEVEL D ALSO + 001102' 200045 003324' MOVE A,DEVBUF(D) ;GET DEVICE + 001103' 047040 000004 DEVCHR A, ;GET ITS CHARACTERISTICS + 001104' 607040 200000 TLNN A,DSKBIT ;IF NOT A DSK + 001105' 634140 000003 TDZA T,T ;NO EXTENDED LOOKUP + 001106' 200140 005111' MOVE T,LEVEL ;GET LEVEL + 001107' 256000 002473' GET4: XCT GET4A ;DO A LOOKUP ON NEW FILE + 001110' 254000 001113' JRST .+3 ;NOT FOUND, TRY WITH BLANKS EXT. + 001111' 402000 004575' SETZM EBLOCK+3 ;CLEAR PROJ-PROG + 001112' 254000 001121' JRST DOENTR ;SUCCESSFUL RETURN FROM LOOKUP + 001113' 554042 000001 HLRZ A, 1(B) ;GET THE FILE NAME EXTENSION + 001114' 302040 624554 CAIE A, 624554 ;IS IT "REL" ? + 001115' 254000 002043' JRST ERROR8 ;NO, DON'T GIVE HIM ANOTHER CHANCE + 001116' 502042 000001 HLLM A, 1(B) ;YES, TRY LOOKUP WITH 0 EXTENSION + 001117' 402000 004573' SETZM EBLOCK+1 ;CLEAR EXTENSION IN LOOKUP BLOCK + 001120' 254000 001107' JRST GET4 ;TRY AGAIN + + 001121' 336000 005111' DOENTR: SKIPN LEVEL ;IF NOT LEVEL D + 001122' 254000 001134' JRST DOXSWT ;ENTER DONE ALREADY + 001123' 204140 005143' MOVS T,[XWD EBLOCK,SVENTR] + 001124' 251140 004573' BLT T,EBLOCK+1 ;RESTORE EBLOCK + 001125' 205140 777000 MOVSI T,777000 ;MASK FOR PROTECTION + 001126' 406140 004574' ANDM T,EBLOCK+2 ;CLEAR DATE AND TIME + 001127' 402000 004571' SETZM EBLOCK-1 ;CLEAR PPN + 001130' 200140 005111' MOVE T,LEVEL + 001131' 256000 002463' XCT SEMIC1 ;DO ENTER + JRST [HRRZ T,EBLOCK+1 ;GET ERROR CODE + CAIN T,17 ;PARTIAL ALLOCATION ONLY? + JRST .+1 ;YES, JUST CONTINUE + 001132' 254000 005154' JRST ERR14] ;ERROR + 001133' 402000 005111' SETZM LEVEL ;NEVER AGAIN + 001134' 602340 200000 DOXSWT: TRNE F,XFLG ;INDEX FLAG ON? + 001135' 260500 001467' PUSHJ P,INDEX0 ;YES, SET UP POINTERS AND CORE + 001136' 254000 001046' JRST GET0 ;AND CONTINUE + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 33 +FUDGE2 MAC 24-APR-78 03:09 COMMON PROGRAM RETRIEVAL PROGRAM GETDEV. + + + ;SHORT ROUTINES TO STORE WORDS IN THE FILE BUFFER AND PROGRAM + ;BUFFER + ;ROUTINE PUTFIL STORES THE CONTENTS OF ACCUMULATOR S IN THE + ;NEXT FREE LOCATION IN FILBUF. IT CHECKS FOR OVERFLOW. + + 001137' 200040 002524' PUTFIL: MOVE A, FILBUF ;GET POINTER WORD FOR FILBUF + 001140' 252040 002011' AOBJP A, ERROR2 ;INCREMENT, CHECK FOR OVERFLOW + 001141' 202040 002524' MOVEM A, FILBUF ;SAVE NEW POINTER + 001142' 202601 000000 MOVEM S, (A) ;SAVE FILE NAME ENTRY + 001143' 263500 000000 POPJ P, ;EXIT + + + ;ROUTINE PUTPRG STORES THE CONENTS OF ACCUMULATOR S IN THE + ;NEXT FREE LOCATION IN PRGBUF. IT CHECKS FOR OVERFLOW. + + 001144' 200040 002724' PUTPRG: MOVE A, PRGBUF ;GET POINTER WORD FOR BUFFER + 001145' 252040 002011' AOBJP A, ERROR2 ;INCREMENT, CHECK FOR OVERFLOW + 001146' 202040 002724' MOVEM A, PRGBUF ;SAVE NEW POINTER WORD + 001147' 202601 000000 MOVEM S, (A) ;SAVE PROGRAM NAME + 001150' 263500 000000 POPJ P, ;EXIT + + ;ROUTINE PUTPPN STORE THE TWO PPPN NUMBER IN PPNBUF + + 001151' 200040 003124' PUTPPN: MOVE A,PPNBUF ;GET POINTER WORD FOR BUFFER + 001152' 252040 002011' AOBJP A,ERROR2 + 001153' 202040 003124' MOVEM A,PPNBUF ;SAVE NEW POINTER WORD + 001154' 202601 000000 MOVEM S,(A) ;SAVE PPN + 001155' 263500 000000 POPJ P, ;EXIT + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 34 +FUDGE2 MAC 24-APR-78 03:09 ROUTINE TO INPUT ONE PROGRAM AT A TIME + + SUBTTL ROUTINE TO INPUT ONE PROGRAM AT A TIME + ;THE FIRST WORD THAT THE PROGRAM READS WILL BE A BLOCK HEADER. + ;BLOCKS ARE READ UNTIL AN ENTRY BLOCK IS FOUND, AND THE ENTIRE + ;ENTRY BLOCK IS STORED IN AN INTERNAL BUFFER,SIZE PERMITTING. + ;FOLLOWING THAT, THE NAME BLOCK IS READ, AND THE NAME OF THE + ;PROGRAM IS RETURNED IN ACCUMULATOR A. PROVISION IS MADE FOR + ;BLOCKS OF WORD COUNT ZERO. THE SECTION OF CODING AROUND READ2 + ;DELIBERATELY OMITS THIS CHECK IN ORDER TO READ IN THE NEXT + ;BLOCK HEADER WITH A MINIMUM OF INSTRUCTIONS. ORDINARILY, EACH + ;PROGRAM WILL BEGIN WITH AN ENTRY BLOCK, BUT THE ROUTINE WILL + ;ALSO ALLOW THE PROGRAM TO BEGIN WITH A NAME BLOCK IF NO + ;ENTRY BLOCK IS SEEN. + + 001156' 201200 003334' READ: MOVEI C, ENTBLK ;SET UP POINTER TO BUFFER + 001157' 260500 001647' READ6: JSR GETIN ;GET A BLOCK HEADER + 001160' 554100 000001 HLRZ B, A ;GET THE BLOCK CODE + 001161' 306100 000014 CAIN B,14 ;IS IT AN INDEX BLOCK? + 001162' 254000 001276' JRST READX ;YES, GET RID OF IT + 001163' 306100 000004 CAIN B, 4 ;IS IT AN ENTRY BLOCK? + 001164' 254000 001206' JRST READ1 ;YES, PROCESS IT + 001165' 306100 000006 CAIN B, 6 ;IS IT A NAME BLOCK? + 001166' 254000 001266' JRST READ7 ;YES, PROCESS IT + 001167' 306100 000400 CAIN B,400 ;F4 SIGNAL WORD? + 001170' 254000 001270' JRST F4I ;YES, PROCESS F4 BLOCKS + 001171' 260500 001337' PUSHJ P, COUNT ;CALCULATE SIZE OF BLOCK + 001172' 322100 001157' JUMPE B, READ6 ;WORD COUNT OF ZERO? + 001173' 311115 004612' READ6A: CAML B, IBUF+2(DIS) ;DOES BLOCK OVERLAP IO BUFFERS? + 001174' 254000 001202' JRST READ6B ;ADJUST B AND GET ANOTHER BUFFER + 001175' 200055 004612' MOVE A, IBUF+2(DIS) ;NO, DIDDLE BUFFER HEADER COUNT + 001176' 274040 000002 SUB A, B ;ELIMINATE BLOCK OF LENGTH C(B) + 001177' 202055 004612' MOVEM A, IBUF+2(DIS) ;PUT NEW WORD COUNT BACK + 001200' 272115 004611' ADDM B, IBUF+1(DIS) ;MOVE BYTE POINTER PAST BLOCK + 001201' 254000 001157' JRST READ6 ;GET NEXT BLOCK + 001202' 274115 004612' READ6B: SUB B, IBUF+2(DIS) ;ACCOUNT FOR REST OF THIS BUFFER + 001203' 402015 004612' SETZM IBUF+2(DIS) ;FORCE ANOTHER INBUF + 001204' 260500 001647' JSR GETIN ;GET ANOTHER BUFFER OF INPUT + 001205' 254000 001173' JRST READ6A ;CHECK AGAIN + + + ; THIS CODE MODIFIED 3-21-71 BY DCS (STANFORD) TO HANDLE + ; MORE THAN ONE ENTRY BLOCK (FAIL AND SAIL BOTH ISSUE + ; MULTIPLE ENTRY BLOCKS). + + 000452 SIZZ==SIZE-<<SIZE+21>/22>-4 ;ACCOUNT FOR HDR BLKS, RELOC WRDS, PROGNAME + 001206' 402000 003334' READ1: SETZM ENTBLK ;SAME AS (C) AT PRESENT + 001207' 505200 777777 HRLI C,-1 ;AOBJN WILL OVERFLOW FIRST TIME + + ; BACK HERE FOR EACH NEW ENTRY BLOCK + + 001210' 211101 400000 READ2: MOVNI B,400000(A) ;-1 IN LH, 377777-CT IN RH + 001211' 553000 000001 HRRZS A + 001212' 270040 003334' ADD A,ENTBLK ;NEW COUNT IF IT FITS + 001213' 303040 000452 CAILE A,SIZZ ;TOO MUCH NOW? + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 34-1 +FUDGE2 MAC 24-APR-78 03:09 ROUTINE TO INPUT ONE PROGRAM AT A TIME + + 001214' 664340 002000 TROA F,ERRB ; YES, MARK ENTRY BLOCK TOO BIG + 001215' 202040 003334' MOVEM A,ENTBLK ;NO, UPDATE USED COUNT + ; HERE FOR EACH NEW WORD + 001216' 606100 377777 READ23: TRNN B,377777 ;END THIS LOADER BLOCK? + 001217' 254000 001233' JRST READ55 ; YES, CHECK NEXT + 001220' 253100 001223' AOBJN B,NXTWRD ;TIME FOR SOME RELOC BITS? + 001221' 260500 001647' JSR GETIN ;YES, GET THEM AND TOSS THEM + 001222' 505100 777756 HRLI B,-22 ;AND RESET COUNT + 001223' 260500 001647' NXTWRD: JSR GETIN ;GET A DATA WORD + ; (ROUTINE COURTESY OF DEC LOADER) + + 001224' 253200 001230' AOBJN C,READ22 ;NEED TO INSERT RELOC WORD? + 001225' 606340 002000 TRNN F,ERRB ;YES, UNLESS NOT INSERTING + 001226' 402004 000000 SETZM (C) ; ALL ENTRY RELOCS ARE 0 + 001227' 270200 005160' ADD C,[XWD -22,1] ;LH 0 BEFORE ADD, SET UP NEXT + 001230' 606340 002000 READ22: TRNN F,ERRB ;ARE WE INSERTING? + 001231' 202044 000000 MOVEM A,(C) ; YES, PUT IT AWAY + 001232' 254000 001216' JRST READ23 ;LOOP + + + 001233' 260500 001647' READ55: JSR GETIN ;GET NEXT HEADER WORD + 001234' 554100 000001 HLRZ B,A ;TYPE + 001235' 306100 000004 CAIN B,4 ;ANOTHER ENTRY? + 001236' 254000 001210' JRST READ2 ; YES, STORE IT + + ; PROGRAM NAME -- FINISH ENTRY BLOCK OUT + 001237' 201100 000004 MOVEI B,4 ;ENTRY BLOCK TYPE + 001240' 506100 003334' HRLM B,ENTBLK ;NOW CORRECT TYPE,,COUNT + 001241' 505200 000000 HRLI C,0 ;CLEAR LH COUNT + 001242' 344200 001266' AOJA C,READ7 ;STORE NAME BLOCK HEADER AND CONTINUE + ; END OF DCS PATCH 3-21-71 + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 35 +FUDGE2 MAC 24-APR-78 03:09 ROUTINE TO INPUT ONE PROGRAM AT A TIME + + 001243' 260500 001337' READ5: PUSHJ P, COUNT ;CALCULATE SIZE OF BLOCK + 001244' 322100 001261' JUMPE B, READ9 ;WORD COUNT OF ZERO? + 001245' 260500 001647' READ3: JSR GETIN ;GET A WORD + 001246' 202044 000000 MOVEM A, (C) ;STORE IT + 001247' 340200 000000 AOJ C, ;INCREMENT BUFFER POINTER + 001250' 367100 001245' SOJG B, READ3 ;DONE READING YET? + 001251' 306440 000002 CAIN G+1, 2 ;IS THERE A COMMON WORD? + 001252' 200044 777776 MOVE A, -2(C) ;GET PROGRAM NAME IN A + 001253' 322040 001261' JUMPE A, READ9 ;IGNORE WORD OF ZERO + 001254' 200100 000001 MOVE B, A ;GET RID OF EXTRA BLANKS + 001255' 231100 000050 READ8: IDIVI B, 50 ;TRY DIVIDING IT BY 50 + 001256' 326140 001261' JUMPN B+1, READ9 ;FILTERED OUT ALL THE BLANKS? + 001257' 200040 000002 MOVE A, B ;NO, STORE SYMBOL AGAIN + 001260' 254000 001255' JRST READ8 ;TRY ANOTHER DIVISION + + 001261' 602340 002000 READ9: TRNE F, ERRB ;ERROR CONDITION? + 001262' 254000 002064' JRST ERR10 ;YES + 001263' 606340 200000 TRNN F,XFLG ;INDEX FLAG ON? + 001264' 254000 001063' JRST CPOPJ1 ;NO, SKIP EXIT + 001265' 254000 001514' JRST INDEX1 ;YES SAVE ENTRIES + + 001266' 202044 000000 READ7: MOVEM A, (C) ;STORE NAME BLOCK HEADER + 001267' 344200 001243' AOJA C, READ5 ;GO READ NAME BLOCK + + 001270' 660340 020000 F4I: TRO F,F4IB ;DONT OUTPUT DURING F4 SEARCH + 001271' 261500 000004 PUSH P,C ;SAVE ENTRY BLOCK + 001272' 260500 001346' PUSHJ P,F4 ;PASS F4 BLOCKS + 001273' 262500 000004 POP P,C ;RESTORE ENTRY BLOCK + 001274' 620340 020000 TRZ F,F4IB ;TURN OFF IGNORE BIT + 001275' 254000 001157' JRST READ6 ;GO PROCESS NEXT PROGRAM + + 001276' 336000 005116' READX: SKIPN NOWARN ;DO WE WANT A MESSAGE? + TTCALL 3,[ASCIZ /WARNING NO INDEX ON OUTPUT FILE - CONTINUING + 001277' 051140 005161' /] + 001300' 476000 005116' SETOM NOWARN ;ONCE IS ENOUGH + 001301' 402015 004612' SETZM IBUF+2(DIS) ;FORCE ANOTHER INBUF + 001302' 260500 001647' JSR GETIN ;INPUT THE NEXT BLOCK + 001303' 370015 004612' SOS IBUF+2(DIS) ;WORD COUNT OUT BY ONE + 001304' 254000 001160' JRST READ6+1 ;AND RETURN TO CODE + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 36 +FUDGE2 MAC 24-APR-78 03:09 ROUTINE TO OUTPUT ONE PROGRAM AT A TIME + + SUBTTL ROUTINE TO OUTPUT ONE PROGRAM AT A TIME + ;THE WRITE SUBROUTINE WILL OUTPUT AN ENTIRE BINARY RE- + ;LOCATABLE PROGRAM AS WRITTEN BY MACRO6. IT ASSUMES THAT THE + ;ENTRY BLOCK AND NAME BLOCK FOR THE PROGRAM ARE IN THE + ;INTERNAL BUFFER ENTBLK, AND OUTPUTS THESE BEFORE PICKING UP + ;MORE BLOCKS FROM THE CURRENT INPUT DEVICE. BLOCKS ARE READ + ;AND WRITTEN UNTIL THE END BLOCK HAS BEEN PROCESSED. PROVISION I + ;IS MADE FOR BLOCKS WITH A WORD COUNT OF ZERO. + + 001305' 275200 003334' WRITE: SUBI C, ENTBLK ;GET COUNT OF ENTRY BLOCK + 001306' 322200 001314' JUMPE C, WRITE3 ;NOTHING TO OUTPUT? + 001307' 201100 003334' MOVEI B, ENTBLK ;GET A POINTER IN B + 001310' 200042 000000 WRITE2: MOVE A, (B) ;GET A BINARY WORD + 001311' 260500 001656' PUSHJ P, OUT ;OUTPUT IT + 001312' 340100 000000 AOJ B, ;INCREMENT POINTER + 001313' 367200 001310' SOJG C, WRITE2 ;KEEP GOING UNTIL BUFFER EMPTY + 001314' 260500 001647' WRITE3: JSR GETIN ;GET A BLOCK HEADER + 001315' 554100 000001 HLRZ B,A ;GET THE BLOCK TYPE CODE ***VJC + 001316' 606340 000200 TRNN F,NOLOCB ;DELETE LOCAL SYMBOLS? ***VJC + 001317' 254000 001322' JRST .+3 ;NO + 001320' 306100 000002 CAIN B,2 ;IS IT A SYMBOL BLOCK? ***VJC + 001321' 254000 001410' JRST DELLOC ;GO DELETE LOCAL SYMBOL ***VJC + ;COME BACK TO WRITE3 ***VJC + ;UNLESS EXIT ON END-OF-FILE ***VJC + + 001322' 260500 001656' PUSHJ P, OUT ;OUTPUT IT + 001323' 306100 000400 CAIN B, 400 ;IS THIS A FORTRAN IV SIGNAL WORD? + 001324' 254000 001346' JRST F4 ;YES, PROCESS F4 OUTPUT + 001325' 202100 002520' MOVEM B, SAVEBT ;SAVE THE BLOCK TYPE + 001326' 260500 001337' PUSHJ P, COUNT ;NO, GET SIZE OF BLOCK + 001327' 322100 001314' JUMPE B, WRITE3 ;WORD COUNT OF ZERO? + 001330' 260500 001647' WRITE4: JSR GETIN ;OUTPUT THE BLOCK + 001331' 260500 001656' PUSHJ P, OUT ;... + 001332' 367100 001330' SOJG B, WRITE4 ;LOOP BACK UNTIL DONE + 001333' 200040 002520' MOVE A, SAVEBT ;RETRIEVE THE BLOCK TYPE + 001334' 302040 000005 CAIE A, 5 ;WAS IT AN END BLOCK? + 001335' 254000 001314' JRST WRITE3 ;NO, RETURN FOR MORE BLOCKS + 001336' 263500 000000 POPJ P, ;YES, EXIT + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 37 +FUDGE2 MAC 24-APR-78 03:09 ROUTINE TO OUTPUT ONE PROGRAM AT A TIME + + + ;THE COUNT SUBROUTINE CALCULATES THE LENGTH OF THE VARIOUS + ;BLOCKS READ BY THE WRITE AND READ SUBROUTINES. THE POSITIVE + ;WORD COUNT IS FOUND IN THE RIGHT HALF OF THE ENTRY BLOCK + ;HEADER, WHICH IS ASSUMED TO BE IN AC A UPON ENTERING. THE + ;LENGTH WILL BE RETURNED IN AC B, AND INCLUDES THE DATA WORDS + ;(SYMBOLS, ENTRY WORDS, ETC.) AND THE SUBHEADERS, OF WHICH + ;THERE IS ONE FOR EVERY 18 (DECIMIAL) DATA WORDS. THE BLOCK + ;HEADER IS DESTROYED, AND IS NOT INCLUDED IN THE LENGTH. + + 001337' 550400 000001 COUNT: HRRZ G, A ;GET NUMBER OF WORDS + 001340' 231400 000022 IDIVI G, 22 ;1SUBHEADER/18 DATA WORDS + 001341' 271401 000000 ADDI G,(A) ;ADD INTO WORD COUNT + 001342' 322440 001344' JUMPE G+1,.+2 ;1 EXTRA SUBHEADER FOR + 001343' 340400 000000 AOJ G, ;STRAY ONES + 001344' 200100 000010 MOVE B, G ;RESULTS IN AC B + 001345' 263500 000000 POPJ P, ;EXIT + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 38 +FUDGE2 MAC 24-APR-78 03:09 ROUTINE TO HANDLE FORTRAN OUTPUT + + SUBTTL ROUTINE TO HANDLE FORTRAN OUTPUT + + ;SUBSECTION OF THE WRITE ROUTINE TO HANDLE OUTPUT FROM THE + ;FORTRAN IV COMPILER. THE MAIN OBJECT OF THE ROUTINE IS TO + ;LOOK FOR THE END BLOCK. OTHER BLOCKS ARE MERELY COPIED OUT. + ;THE BLOCK TYPES ARE GIVEN BY THE FOLLOWING TABLE + ;---------------------------------------------------------------- + ;BITS 0-17 BITS18-23 BITS 24-35 TYPE + + ;777777 70 N DATA STATEMENT + ;777777 50 N ABSOLUTE MACHINE CODE + ;777777 0 - PROGRAMMER LABELS + ;777777 31 - MADE LABELS + ;777777 60 - ENTRY LABELS + ;777777 777776 END BLOCK + ;----------------------------------------------------------------- + 001346' 260500 001647' F4: JSR GETIN ;GET A FORTRAN IV BLOCK HEADER + 001347' 260500 001405' PUSHJ P, OUT4 ;OUTPUT IT + 001350' 641040 777777 TLC A, -1 ;TURN ONES TO ZEROES IN LEFT HALF + 001351' 603040 777777 TLNE A, -1 ;NO, WAS LEFT HALF ALL ONES? + 001352' 254000 001346' JRST F4 ;NO, IT WAS CALCULATED MACHINE CODE + 001353' 306040 777776 CAIN A, -2 ;YES, IS RIGHT HALF = 777776? + 001354' 254000 001372' JRST ENDST ;YES, PROCESS F4 END BLOCK + 001355' 135100 005173' LDB B, [POINT 6,A,23];GET CODE BITS FROM BITS 18-23 + 001356' 620040 770000 TRZ A, 770000 ;THEN WIPE THEM OUT + 001357' 302100 000070 CAIE B, 70 ;IS IT A DATA STATEMENT? + 001360' 306100 000050 CAIN B, 50 ;IS IT ABSOLUTE MACHINE CODE? + 001361' 254000 001365' JRST MACHCD ;YES, TREAT IT LIKE DATA STATEMENTS + 001362' 260500 001647' JSR GETIN ;NO, ITS A LABEL OF SOME SORT + 001363' 260500 001405' PUSHJ P, OUT4 ;WHICH CONSISTS OF ONE WORD + 001364' 254000 001346' JRST F4 ;LOOK FOR NEXT BLOCK HEADER + + 001365' 550100 000001 MACHCD: HRRZ B, A ;GET THE WORD COUNT IN AC B + 001366' 260500 001647' JSR GETIN ;INPUT A WORD + 001367' 260500 001405' PUSHJ P, OUT4 ;OUTPUT IT + 001370' 367100 001365' SOJG B, MACHCD ;LOOP BACK FOR REST OF THE BLOCK + 001371' 254000 001346' JRST F4 ;GO LOOK FOR NEXT BLOCK + + 001372' 201100 000001 ENDST: MOVEI B,1 ;TWO WORDS, FIVE TABLES, ONE WORD, ONE TABLE + 001373' 201200 000006 MOVEI C,6 ;TO GO + 001374' 260500 001647' F4LUP1: JSR GETIN ;GET TABLE MEMBER + 001375' 260500 001405' F4LUP3: PUSHJ P,OUT4 ;OUTPUT WORD + 001376' 365100 001374' SOJGE B,F4LUP1 ;LOOP WITHIN A TABLE + 001377' 321200 001065' JUMPL C,CPOPJ ;LAST TABLE - RETURN + 001400' 367200 001402' SOJG C,F4LUP2 ;FIRST TWO WORDS AND FIVE TABLES + 001401' 322200 001374' JUMPE C,F4LUP1 ;COMMON LENGTH WORD + 001402' 260500 001647' F4LUP2: JSR GETIN ;READ HEADER WORD + 001403' 200100 000001 MOVE B,A ;COUNT TO COUNTER + 001404' 254000 001375' JRST F4LUP3 ;STASH + + 001405' 606340 020000 OUT4: TRNN F,F4IB ;DONT DO OUTPUT? + 001406' 260500 001656' PUSHJ P,OUT ;YES, DO OUTPUT + 001407' 263500 000000 POPJ P, ;RETURN + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 39 +FUDGE2 MAC 24-APR-78 03:09 ROUTINE TO DELETE LOCAL SYMBOLS FROM SYMBOL BLOCK + + SUBTTL ROUTINE TO DELETE LOCAL SYMBOLS FROM SYMBOL BLOCK + + ;ALL LOCAL AND SUPPRESSED LOCAL SYMBOLS ARE DELETED + ;EXTERNALS,INTERNAL AND SUPPRESSED INTERNALS ARE NOT DELETED. + + 001410' 552040 005047' DELLOC: HRRZM A,BSZ ;SIZE OF SYMBOL BBLE + 001411' 260500 001461' PUSHJ P,DELINI ;CLEAR NEW HEADER & RELOC WORDS + ;SET PB = SYMBLK+2 + 001412' 260500 001647' DELGTR: JSR GETIN ;GET RELOCATION WORD + 001413' 202040 005052' MOVEM A,RELOCS ;SAVE IT + 001414' 200040 005122' MOVE A,PTGR ;INIT POINTER TO GET + 001415' 202040 005050' MOVEM A,PTGRS ;RELOCATION WORD + + 001416' 260500 001647' DELGT1: JSR GETIN ;GET FIRST WORD OF PAIR + 001417' 134000 005050' ILDB 0,PTGRS ;GET RELOCATION BITS & HOLD + 001420' 603040 100000 TLNE A,(1B2) ;IS SYMBOL LOCAL? + 001421' 254000 001435' JRST DELDEC ;YES, DON'T COPY + 001422' 202043 000000 MOVEM A,0(T) ;STORE FIRST WORD + 001423' 260500 001647' JSR GETIN ;GET SECOND WORD INTO A + 001424' 202043 000001 MOVEM A,1(T) ;STORE SECOND WORD + 001425' 136000 005051' IDPB 0,PTSRS ;STORE RELOCATION BITS + 001426' 201040 000002 MOVEI A,2 ;COUNT WORDS STORED + 001427' 272040 005053' ADDM A,SYMBLK ;I.E. UPDATE WORD COUNT + 001430' 271140 000002 ADDI T,2 ;UPDATE NEXT LOCATION TO STORE + 001431' 200040 005051' MOVE A,PTSRS ;HAVE WE STORED 9 + 001432' 607040 770000 TLNN A,770000 ;SYMBOL PAIRS? + 001433' 260500 001447' PUSHJ P,DELWRT ;YES, WRITE IT OUT + 001434' 254000 001436' JRST DELDEC+1 ;ALREADY HAVE 2ND WORD + + 001435' 260500 001647' DELDEC: JSR GETIN ;GET SECOND WORD INTO A + 001436' 370000 005047' SOS BSZ ;HAVE WE EXHAUSTED + 001437' 377000 005047' SOSG BSZ ;ALL WORDS IN BLOCK? + 001440' 254000 001445' JRST DELFIN ;YES, NONE LEFT + 001441' 200040 005050' MOVE A,PTGRS ;HAVE WE GOT 9 + 001442' 603040 770000 TLNE A,770000 ;SYMBOL PAIRS YET? + 001443' 254000 001416' JRST DELGT1 ;NO, GET NEXT PAIR + 001444' 254000 001412' JRST DELGTR ;YES, GET RELOCATION + + 001445' 260500 001447' DELFIN: PUSHJ P,DELWRT ;ORIGINAL BLOCK EMPTY NOW + 001446' 254000 001314' JRST WRITE3 ;GET NEXT BLOCK + + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 40 +FUDGE2 MAC 24-APR-78 03:09 ROUTINE TO WRITE OUT NEW SYMBOL BBLE + + SUBTTL ROUTINE TO WRITE OUT NEW SYMBOL BBLE + + 001447' 336040 005053' DELWRT: SKIPN A,SYMBLK ;ANYTHING TO WRITE + 001450' 254000 001461' JRST DELINI ;NO, CAN LEAVE + 001451' 550000 000001 HRRZ 0,A ;GET WORD COUNT + 001452' 505040 000002 HRLI A,2 ;PUT IN BLOCK TYPE + 001453' 260500 001656' PUSHJ P,OUT ;WRITE BLOCK HEADER + 001454' 201100 005053' MOVEI B,SYMBLK ;LOC OF FIRST WORD + 001455' 271100 000001 DELWRU: ADDI B,1 ;LOC OF RELOC WORD + 001456' 200042 000000 MOVE A,0(B) ;GET WORD + 001457' 260500 001656' PUSHJ P,OUT ;OUTPUT + 001460' 365000 001455' SOJGE 0,DELWRU ;ALL THROUGH? + + ;ROUTINE TO INITIALIZE NEW SYMBOL BBLE + 001461' 402000 005053' DELINI: SETZM SYMBLK ;YES, CLEAR COUNT + 001462' 402000 005054' SETZM SYMBLK+1 ;CLEAR RELOCATION + 001463' 200040 005121' MOVE A,PTSR ;INIT POINTER + 001464' 202040 005051' MOVEM A,PTSRS ;FOR STORING NEW RELOC + 001465' 201140 005055' MOVEI T,SYMBLK+2 ;SET TO STORE FIRST GLOBAL + 001466' 263500 000000 POPJ P, + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 41 +FUDGE2 MAC 24-APR-78 03:09 ROUTINES TO INDEX THE LIBRARY + + SUBTTL ROUTINES TO INDEX THE LIBRARY + + COMMENT * THE INDEXING OF LIBRARY FILES IS DONE IN TWO PASSES. + ON PASS 1 THE LIBRARY FILE IS COPIED AND ALL ENTRIES STORED + IN CORE ALLONG WITH A POINTER TO THE BEGINING OF THE BLOCK. + A DUMMY INDEX BLOCK (TYPE 14) IS OUTPUT AT THE BEGINING OF THE + NEW LIBRARY AND ONE IS OUTPUT WHENEVER THE CURRENT INDEX BLOCK + FILLS A BUFFER. + ON PASS 2 THE DUMMY INDEX BLOCKS ARE REPLACED BY REAL ONES. + FUDGE2 USED USETO'S AND DUMP MODE. + IF THE OUTPUT DEVICE IS DTA FUDGE2 USES UGETF UUO'S TO FIND + THE NEXT BLOCK AND NON-STANDARD DUMP MODE TO WRITE THE INDICES. + DESIGN AND CODING BY D.M.NIXON JULY 1970 + * + + 001467' 200040 001646' INDEX0: MOVE A,INDEXH ;BLOCK HEADER + 001470' 350000 002516' AOS BLKCNT ;START ON BLOCK #1 + 001471' 260500 001660' PUSHJ P,OUT1 ;OUTPUT IT + 001472' 067040 000000 OUTPUT 1, ;FORCE OUTPUT + 001473' 200140 004607' MOVE T,OBUF+5 ;BUFFER SIZE + 001474' 202140 005104' MOVEM T,XCOUNT + 001475' 202140 005106' MOVEM T,BUFSIZ ;SAVE IT AWAY + 001476' 350140 000573* AOS T,JOBREL ;TO GET 1K MORE + 001477' 202140 005105' MOVEM T,XPNTR + 001500' 202140 005107' MOVEM T,XBEG ;START OF INDEX BUFFERS + 001501' 047140 000011 CORE T, + 001502' 254000 002170' JRST ERR22 ;NOT ENUF CORE + 001503' 201040 000001 MOVEI A,1 ;START ON BLOCK #1 (IF DSK) + 001504' 202060 005105' MOVEM A,@XPNTR ;STORE FIRST BLOCK # + 001505' 350000 005105' AOS XPNTR + 001506' 200040 001646' MOVE A,INDEXH + 001507' 202060 005105' MOVEM A,@XPNTR + 001510' 350000 005105' AOS XPNTR + 001511' 370000 005104' SOS XCOUNT + 001512' 370000 005104' SOS XCOUNT ;RESERVE SPACE FOR NEXT LINK WORD + 001513' 263500 000000 POPJ P, ;RETURN + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 42 +FUDGE2 MAC 24-APR-78 03:09 ROUTINES TO INDEX THE LIBRARY + + ;HERE ON PASS 1 TO STORE ENTRIES AND POINTERS. + + 001514' 350012 000000 INDEX1: AOS (P) ;SET SKIP RETURN + 001515' 550140 003334' HRRZ T,ENTBLK ;GET SIZE OF BLOCK + 001516' 210040 000003 MOVN A,T + 001517' 271140 000001 ADDI T,1 ;WORD OF INFO + 001520' 311140 005104' CAML T,XCOUNT ;ENUF ROOM IN BLOCK? + 001521' 254000 001546' JRST NOROOM ;NO + 001522' 200140 003334' MOVE T,ENTBLK ;GET HEADER WORD + 001523' 202160 005105' MOVEM T,@XPNTR + 001524' 350000 005105' AOS XPNTR + 001525' 370000 005104' SOS XCOUNT + 001526' 507000 000001 HRLS A + 001527' 541040 003335' HRRI A,ENTBLK+1 + 001530' 336141 000000 INDEXA: SKIPN T,(A) + 001531' 344040 001530' AOJA A,.-1 + 001532' 202160 005105' MOVEM T,@XPNTR + 001533' 370000 005104' SOS XCOUNT + 001534' 350000 005105' AOS XPNTR + 001535' 253040 001530' AOBJN A,INDEXA + 001536' 200140 005106' INDEX2: MOVE T,BUFSIZ + 001537' 274140 004607' SUB T,OBUF+5 + 001540' 207000 000003 MOVSS T + 001541' 540140 002516' HRR T,BLKCNT + 001542' 202160 005105' MOVEM T,@XPNTR + 001543' 370000 005104' SOS XCOUNT + 001544' 350000 005105' AOS XPNTR + 001545' 263500 000000 POPJ P, + + ;HERE WHEN CURRENT INDEX BLOCK IS FULL. + + 001546' 200040 001646' NOROOM: MOVE A,INDEXH ;HEADER BLOCK OF INDEX FOR LOADER + 001547' 260500 001664' PUSHJ P,OUTGO + 001550' 067040 000000 OUTPUT 1, + 001551' 200140 002516' MOVE T,BLKCNT ;GET INDEX BLOCK # + 001552' 562160 005105' HRROM T,@XPNTR ;STORE IT WITH -1 IN LEFT HALF + 001553' 200040 005104' MOVE A,XCOUNT + 001554' 272040 005105' ADDM A,XPNTR + 001555' 200040 005106' MOVE A,BUFSIZ + 001556' 202040 005104' MOVEM A,XCOUNT + ;MARK IT AS AN INDEX INCASE BLOCK FULL + 001557' 562160 005105' HRROM T,@XPNTR ;SAVE BLOCK # FOR PASS 2 + 001560' 350000 005105' AOS XPNTR + 001561' 606340 400000 TRNN F,DTAFLG ;NOT IF DTA + 001562' 350000 002516' AOS BLKCNT ;ONE FOR OUTPUT + 001563' 200040 001646' MOVE A,INDEXH + 001564' 202060 005105' MOVEM A,@XPNTR + 001565' 350000 005105' AOS XPNTR + 001566' 370000 005104' SOS XCOUNT + 001567' 370000 005104' SOS XCOUNT ;SPACE FOR LINK WORD TO NEXT INDEX + 001570' 254000 001515' JRST INDEX1+1 + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 43 +FUDGE2 MAC 24-APR-78 03:09 ROUTINES TO INDEX THE LIBRARY + + ;HERE FOR PASS 2. WRITE OUT THE INDEX BLOCKS + + 001571' 476020 005105' INDEX3: SETOM @XPNTR ;TERMINATE WITH END OF INDEX MARKER + 001572' 067040 000000 OUTPUT 1, ;SO LAST BLOCK IS WRITTEN + 001573' 602340 400000 TRNE F,DTAFLG ;IS IT DTA? + 001574' 254000 001614' JRST INDEX5 ;YES, TREAT DIFFERENTLY + 001575' 060040 000016 SETSTS 1,16 + 001576' 211040 000200 MOVNI A,200 + 001577' 506040 005107' HRLM A,XBEG + 001600' 402000 005110' INDEX4: SETZM XBEG+1 + 001601' 200060 005107' MOVE A,@XBEG + 001602' 075041 000000 USETO 1,(A) + 001603' 067040 005107' OUTPUT 1,XBEG + 001604' 063040 760000 STATZ 1,760000 + 001605' 254000 002132' JRST ERR15 + 001606' 201040 000200 MOVEI A,200 + 001607' 273040 005107' ADDB A,XBEG + 001610' 553000 000001 HRRZS A + 001611' 317040 005105' CAMG A,XPNTR + 001612' 254000 001600' JRST INDEX4 + 001613' 254000 002257' JRST EXIT + + 001614' 070040 000000 INDEX5: CLOSE 1, ;AND A SEPARATE EOF BLOCK + 001615' 060040 000116 SETSTS 1,116 ;NONE STANDARD MODE + 001616' 211040 000200 MOVNI A,200 ;IOWD COUNT + 001617' 506040 005107' HRLM A,XBEG ;SET IT UP FOR OUTPUT + 001620' 074060 002516' USETI 1,@BLKCNT ;SET ON LAST BLOCK + 001621' 066040 002513' INPUT 1,DIRIOW ;READ IT IN + 001622' 135040 005174' LDB A,[POINT 10,DIRBLK,27] ;GET FIRST BLOCK # + 001623' 542060 005107' HRRM A,@XBEG ;STORE IT FOR COMMON LOOP + 001624' 402000 005110' SETZM XBEG+1 ;MAKE SURE IT'S ZERO + 001625' 200060 005107' INDEX6: MOVE A,@XBEG ;GET BLOCK NUMBER + 001626' 074041 000000 USETI 1,(A) ;SET FOR INPUT + 001627' 066040 002513' INPUT 1,DIRIOW ;INPUT BLOCK + 001630' 200140 004647' MOVE T,DIRBLK ;TO FIND LINK WORD + 001631' 250160 005107' EXCH T,@XBEG ;PUT IT IN OUTPUT BLOCK + 001632' 370000 005107' SOS XBEG ;BACK UP POINTER + 001633' 075041 000000 USETO 1,(A) ;NOW FOR OUTPUT + 001634' 067040 005107' OUTPUT 1,XBEG ;OUT IT GOES + 001635' 063040 760000 STATZ 1,760000 ;UNLESS IN ERROR + 001636' 254000 002132' JRST ERR15 ;DEVICE ERROR + 001637' 201040 000200 MOVEI A,200 ;GET TO NEXT DUMP BLOCK + 001640' 273040 005107' ADDB A,XBEG ;ADVANCE POINTER + 001641' 553000 000001 HRRZS A ;JUST WORD LOCATION + 001642' 317040 005105' CAMG A,XPNTR ;ALL DONE? + 001643' 254000 001625' JRST INDEX6 ;NO, LOOP + 001644' 060040 000016 SETSTS 1,16 ;BACK TO STANDARD MODE TO UPDATE DIR. + 001645' 254000 002257' JRST EXIT ;YES, FINISH UP + + 001646' 000014 000177 INDEXH: XWD 14,177 ;USED TO SIGNAL INDEX BLOCK TO LOADER + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 44 +FUDGE2 MAC 24-APR-78 03:09 INPUT SERVICE ROUTINE + + SUBTTL INPUT SERVICE ROUTINE + ;THE INPUT ROUTINE GETS CHARACTERS FROM THE DEVICE WHOSE + ;CHANNEL NUMBER IS IN ACCUMULATOR D. IT CALCULATES THE POSITION + ;OF THE BUFFER HEADER OF THE DEVICE, THEN EITHER LOADS AC A + ;FROM THE BYTE POINTER, OR DOES AN INPUT. IF AN END OF FILE + ;IS FOUND, THE ROUTINE EXITS WITH A POPJ, SINCE THE READ ROUTINE + ;IS CALLED WITH A PUSHJ, FOLLOWED BY AN EOF RETURN. THE NORMAL + ;EXIT FROM GETIN IS BY A JRST @GETIN. + + 001647' 377015 004612' GETIN: SOSG IBUF+2(DIS) ;IS APPROPRIATE BUFFER EMPTY? + 001650' 254000 001653' JRST INGET ;YES, GET ANOTHER BUFFER + 001651' 134055 004611' GETIN1: ILDB A, IBUF+1(DIS) ;LOAD AC A WITH A CHARACTER + 001652' 263500 000000 POPJ P, + + 001653' 137240 005175' INGET: DPB D,[POINT 4,INGET2,12] + 001654' 137240 005176' DPB D,[POINT 4,INGET3,12] + 001655' 254000 002474' JRST INGET2 ;INPUT A BUFFER OF DATA + + + ;OUTPUT SERVICE ROUTINE + ;THE OUT ROUTINE CHECKS THE TTYOB FLAG TO SEE IF THE OUTPUT + ;SHOULD BE ON THE TTY. IF SO, IT TRANSFERS CONTROL IMMEDIATELY. + ;OTHERWISE, IT ASSUMES OUTPUT IS ON DEVICE #1. + + 001656' 606340 000020 OUT: TRNN F, TTYOB ;SHOULD OUTPUT BE ON TTY? + 001657' 254000 002237' JRST TYPO ;YES + 001660' 377000 004607' OUT1: SOSG OBUF+5 ;IS OUTPUT BUFFER EMPTY? + 001661' 254000 001664' JRST OUTGO ;YES, OUTPUT A BUFFER + 001662' 136040 004606' OUT2: IDPB A, OBUF+4 ;DEPOSIT CHARACTER + 001663' 263500 000000 POPJ P, ;EXIT + + 001664' 606340 200000 OUTGO: TRNN F,XFLG ;IF NOT INDEXING + 001665' 254000 001671' JRST OUTG ;DON'T WASTE TIME + 001666' 606340 400000 TRNN F,DTAFLG ;IF DTA SKIP + 001667' 354000 002516' AOSA BLKCNT ;INCR. COUNT IF DSK + 001670' 073040 002516' UGETF 1,BLKCNT ;GET NEXT BLOCK IF DTA + 001671' 057040 000000 OUTG: OUT 1, ;OUTPUT A BUFFER + 001672' 254000 001662' JRST OUT2 ;NO ERRORS + 001673' 201240 000001 MOVEI D, 1 ;YES, SET CHANNEL TO OUTPUT + 001674' 254000 002132' JRST ERR15 ;GO TO ERROR ROUTINE + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 45 +FUDGE2 MAC 24-APR-78 03:09 ROUTINE TO HANDLE ASTERISK FILE NAME *.EXT + + SUBTTL ROUTINE TO HANDLE ASTERISK FILE NAME *.EXT + ;THE DIRECTORY IS SEARCHED FOR FILE NAMES WITH GIVEN EXTENSION OR + ;EXTENSION REL IF NONE SPECIFIED. THESE ARE STORED IN FILBUF + ;ENTERED BY JRST FROM SEMICP + ;EXIT BY POPJ + ;DMN 23 MAY 1969 + + + 001675' 200100 002522' ASTRSK: MOVE B,COLON2 ;GET DEVICE LAST SEEN + 001676' 202100 002511' MOVEM B,DSKINI+1 ;SAVE IT IN CASE DSK + 001677' 047100 000004 DEVCHR B, ;GET ITS CHARACTERISTICS + 001700' 603100 000100 TLNE B,DTABIT ;IS IT A DTA + 001701' 254000 001760' JRST DTAAST ;YES + 001702' 607100 200000 TLNN B,DSKBIT ;IS IT THE DSK? + 001703' 254000 002160' JRST ERR18 ;MUST BE ONE OR THE OTHER + ;FALL INTO DSKAST IF OK + + 001704' 261500 000547* DSKAST: PUSH P,JOBFF ;SAVE OLD JOBFF + 001705' 201100 004645' MOVEI B,DSKHDR ;WHERE BUFFER WILL GO + 001706' 202100 001704* MOVEM B,JOBFF ;SET IT UP + + 001707' 050440 002510' OPEN 11,DSKINI ;11 IS SAFE CH.NO. + 001710' 254000 002162' JRST ERR19 ;CONNOT INIT DSK + 001711' 064440 000001 INBUF 11,1 ;FORCE SINGLE BUFFERING + 001712' 200100 002522' MOVE B,COLON2 ;GET DEVICE + 001713' 047100 000055 DEVPPN B, ;GET PROJ-PROG INCASE SYS: ETC. + 001714' 047100 000024 GETPPN B, ;FAILED, GET USER PROJ,PROG PAIR + 001715' 202100 004572' MOVEM B,EBLOCK ;SAVE IT FOR LOOKUP OF UFD + 001716' 205100 654644 MOVSI B,(SIXBIT/UFD/) ;EXTENSION + 001717' 202100 004573' MOVEM B,EBLOCK+1 + 001720' 200100 005177' MOVE B,[XWD 1,1] ;TO GET UFD ***VJC + 001721' 202100 004575' MOVEM B,EBLOCK+3 ;ENTRY BLOCK SET UP + 001722' 076440 004572' LOOKUP 11,EBLOCK ;DO LOOKUP + 001723' 254000 002164' JRST ERR20 ;CANNOT DO IT + + 001724' 260500 001745' DSKLUP: PUSHJ P,DSKINP ;INPUT A WORD + 001725' 202600 004640' MOVEM S,SAVNAM ;SAVE NAME FOR LATER + 001726' 260500 001745' PUSHJ P,DSKINP ;GET EXT AS WELL + 001727' 512600 004641' HLLZM S,SAVEXT ;SAVE EXT, CLEAR RH ***VJC + 001730' 336000 004640' SKIPN SAVNAM ;IS THERE A NAME + 001731' 254000 001724' JRST DSKLUP ;NO GET NEXT PAIR + 001732' 312700 004641' CAME EXT,SAVEXT ;EXTENSIONS MATCH + 001733' 254000 001724' JRST DSKLUP ;NO GET NEXT PAIR + 001734' 260500 000444' PUSHJ P,STNULL ;CLOSE OUT OLD FILE + 001735' 200600 004640' MOVE S,SAVNAM ;RECALL NAME + 001736' 260500 001137' PUSHJ P,PUTFIL ;STORE IT IN FILBUF + 001737' 200600 004641' MOVE S,SAVEXT ;RECALL EXTENSION + 001740' 260500 001137' PUSHJ P,PUTFIL + 001741' 542241 000000 HRRM D,(A) ;GET CHANNEL + 001742' 550600 002724' HRRZ S,PRGBUF ;POINTER TO PRGBUF + 001743' 260500 001137' PUSHJ P,PUTFIL ;SAVE IT AS 3RD WORD + 001744' 254000 001724' JRST DSKLUP ;GO LOOP ROUND ALL + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 46 +FUDGE2 MAC 24-APR-78 03:09 ROUTINE TO HANDLE ASTERISK FILE NAME *.EXT + + ;ROUTINE TO GET NEXT WORD FROM UFD + + 001745' 375000 004644' DSKINP: SOSGE DIRBUF+2 ;USUAL INPUT ROUTINE + 001746' 254000 001751' JRST DSKIN1 ;GET ANOTHER BUFFER + 001747' 134600 004643' ILDB S,DIRBUF+1 ;GET A WORD + 001750' 263500 000000 POPJ P, ;RETURN + + 001751' 056440 000000 DSKIN1: IN 11,0 ;DO INPUT + 001752' 254000 001745' JRST DSKINP ;NO ERRORS + 001753' 061440 020000 STATO 11,20000 ;END OF FILE? + 001754' 254000 002166' JRST ERR21 ;NO, READ ERROR + + 001755' 262500 001706* FIN: POP P,JOBFF ;POP UP ONE LEVEL + 001756' 262500 001755* POP P,JOBFF ;RESTORE JOBFF + 001757' 263500 000000 POPJ P, ;RETURN TO COMMAND SCAN + + + 001760' 135100 005137' DTAAST: LDB B,[POINT 4,COLON1,12] ;GET CHANNEL + 001761' 137100 005200' DPB B,[POINT 4,DP+0,12] ;DEPOSIT IT + 001762' 137100 005201' DPB B,[POINT 4,DP+1,12] + 001763' 137100 005202' DPB B,[POINT 4,DP+2,12] + 001764' 137100 005203' DPB B,[POINT 4,DP+3,12] + 001765' 137100 005204' DPB B,[POINT 4,DP+5,12] + 001766' 400100 000000 SETZ B, ;INITIAL CONDITION + 001767' 254000 002501' JRST DP ;INPUT DIRECTORY + + 001770' 301100 000026 DTALUP: CAIL B,26 ;END OF DIRECTORY + 001771' 263500 000000 POPJ P, ;YES- FINISHED + 001772' 510602 005020' HLLZ S,DIREXT(B) ;GET EXTENSION + 001773' 332002 004772' SKIPE DIRNAM(B) ;IF NAME ZERO DON'T BOTHER + 001774' 312600 000016 CAME S,EXT ;IS EXTENSION SAME + 001775' 344100 001770' AOJA B,DTALUP ;NO GET NEXT ENTRY + 001776' 260500 000444' PUSHJ P,STNULL ;TERMINATE LAST ENTRY + 001777' 200602 004772' MOVE S,DIRNAM(B) ;GET NAME + 002000' 260500 001137' PUSHJ P,PUTFIL ;STORE IT IN FILBUF + 002001' 510602 005020' HLLZ S,DIREXT(B) ;AND EXTENSION + 002002' 260500 001137' PUSHJ P,PUTFIL ;STORE IT + 002003' 542241 000000 HRRM D,(A) ;SAVECH. + 002004' 550600 002724' HRRZ S,PRGBUF ;SAVE PRGBUF POINTER + 002005' 260500 001137' PUSHJ P,PUTFIL ;STORE IT + 002006' 344100 001770' AOJA B,DTALUP ;GET NEXT ENTRY + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 47 +FUDGE2 MAC 24-APR-78 03:09 ERROR ROUTINES + + SUBTTL ERROR ROUTINES + + 002007' 201100 002261' ERROR1: MOVEI B, EMES1 ;FUDGE COMMAND ERROR + 002010' 254000 002247' JRST ERROR ;TYPE IT AND EXIT + + 002011' 201100 002266' ERROR2: MOVEI B, EMES2 ;TOO MANY PROGRAM NAMES + 002012' 254000 002247' JRST ERROR ;TYPE IT AND EXIT + + 002013' 201100 002276' ERROR3: MOVEI B, EMES3 ;FUDGE SYSTEM ERROR + 002014' 254000 002247' JRST ERROR ;TYPE A MESSAGE AND EXIT + + 002015' 260500 002201' ERROR4: PUSHJ P, DTYPOQ ;TYPE DEVICE NAME + 002016' 201100 002307' MOVEI B, EMES4 ;"CANNOT DO IO AS REQUESTED" + 002017' 326400 002247' JUMPN G,ERROR ;TYPE IT + 002020' 201100 002456' MOVEI B,EMES24 ;NO SUCH DEVICE IF G=0 + 002021' 254000 002247' JRST ERROR ;TYPE IT AND EXIT + + 002022' 201100 002315' ERROR5: MOVEI B, EMES5 ;UNEQUAL NUMBER OF MASTER AND TR. + 002023' 254000 002247' JRST ERROR ;TYPE IT AND EXIT + + 002024' 201100 002330' ERROR6: MOVEI B, EMES6 ;NOT ENOUGH ARGUMENTS + 002025' 254000 002247' JRST ERROR ;TYPE IT AND EXIT + + 002026' 260500 002201' ERROR7: PUSHJ P, DTYPOQ ;TYPE OUT THE DEVICE NAME + 002027' 201040 000072 MOVEI A, 72 ;ASCII COLON + 002030' 260500 002237' PUSHJ P, TYPO ;TYPE IT OUT + 002031' 260500 002216' PUSHJ P, FTYPO ;TYPE OUT THE FILE NAME + 002032' 201040 000074 MOVEI A, 74 ;ASCII LEFT ANGLE BRACKET + 002033' 260500 002237' PUSHJ P, TYPO ;TYPE IT OUT + 002034' 200100 000013 MOVE B, R ;GET PROGRAM NAME + 002035' 620340 000020 TRZ F, TTYOB ;SET IO BACK TO TTY + 002036' 260500 002220' PUSHJ P, PTYPO ;TYPE OUT THE PROGRAM NAME + 002037' 201040 000076 MOVEI A, 76 ;ASCII RIGHT ANGLE BRACKET + 002040' 260500 002237' PUSHJ P, TYPO ;TYPE IT OUT + 002041' 201100 002335' MOVEI B, EMES7 ;GET AN ERROR MESSAGE + 002042' 254000 002247' JRST ERROR ;TYPE IT OUT AND EXIT + + 002043' 260500 002201' ERROR8: PUSHJ P, DTYPOQ ;TYPE OUT THE DEVICE NAME + 002044' 201040 000072 MOVEI A, 72 ;ASCII COLON + 002045' 260500 002237' PUSHJ P, TYPO ;TYPE IT OUT + 002046' 260500 002216' PUSHJ P, FTYPO ;TYPE OUT FILE NAME + 002047' 201040 000056 MOVEI A, 56 ;ASCII PERIOD + 002050' 260500 002237' PUSHJ P, TYPO ;TYPE IT OUT + 002051' 550040 002524' HRRZ A, FILBUF ;GET THE POINTER TO CURRENT FILE + 002052' 554601 000001 HLRZ S, 1(A) ;GET FILE NAME EXTENSION + 002053' 260500 002206' PUSHJ P, DTYPO1 ;TYPE IT OUT + 002054' 200140 005102' MOVE T,SDEVCHR ;GET CHARACTERISTICS + 002055' 603140 200000 TLNE T,DSKBIT ;IS IT A DSK? + 002056' 254000 002103' JRST ERR8A ;YES + 002057' 201100 002335' MOVEI B, EMES7 ;GET ERROR MESSAGE "NOT FOUND" + 002060' 254000 002247' JRST ERROR ;TYPE IT OUT AND EXIT + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 48 +FUDGE2 MAC 24-APR-78 03:09 ERROR ROUTINES + + 002061' 260500 002201' ERROR9: PUSHJ P, DTYPOQ ;TYPE DEVICE NAME + 002062' 201100 002340' MOVEI B, EMES9B ;GET REMAINDER OF MESSAGE + 002063' 254000 002247' JRST ERROR ;TYPE IT AND EXIT + + 002064' 200200 000001 ERR10: MOVE C, A ;SAVE PROGRAM NAME IN C + 002065' 201100 002343' MOVEI B, EMES10 ;"ENTRY BLOCK TOO LARGE, PROGRAM" + 002066' 260500 002174' PUSHJ P, ETYPO ;TYPE BEGINNING OF MESSAGE + 002067' 200100 000004 MOVE B, C ;GET PROGRAM NAME IN B + 002070' 260500 002220' PUSHJ P, PTYPO ;TYPE IT OUT + 002071' 254000 002253' JRST EXIT1 ;EXIT + + 002072' 201100 002352' ERR11: MOVEI B, EMES11 ;TRANSMISSION ERROR ON INPUT + 002073' 260500 002174' PUSHJ P, ETYPO ;TYPE THE MESSAGE + 002074' 260500 002205' PUSHJ P, DTYPO ;TYPE NAME OF OFFENDIN DEVICE + 002075' 254000 002253' JRST EXIT1 ;EXIT + + 002076' 200140 005102' ERR14: MOVE T,SDEVCHR ;GET DEVICE CHARACTERISTICS + 002077' 603140 200000 TLNE T,DSKBIT ;IS IT A DSK + 002100' 254000 002043' JRST ERROR8 ;YES + 002101' 201100 002362' MOVEI B, EMES14 ;DIRECTORY FULL ON OUTPUT + 002102' 254000 002247' JRST ERROR ;TYPE IT AND EXIT + + 002103' 550140 004573' ERR8A: HRRZ T,EBLOCK+1 ;GET ERROR CODE + 002104' 301140 000021 CAIL T,TABLND-ETABLE ;LEGAL ERROR? + 002105' 334100 002131' SKIPA B,TABLND ;NO, USE CATCH ALL MESSAGE + 002106' 200103 002110' MOVE B,ETABLE(T) ;PICK UP MESSAGE + 002107' 254000 002247' JRST ERROR + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 49 +FUDGE2 MAC 24-APR-78 03:09 ERROR ROUTINES + + 002110' 000000 005205' ETABLE: [ASCIZ /(0) file was not found/] + 002111' 000000 005212' [ASCIZ /(1) no such project-programmer number/] + 002112' 000000 005222' [ASCIZ /(2) protection failure/] + 002113' 000000 005227' [ASCIZ /(3) file was being modified/] + 002114' 000000 005235' [ASCIZ /(4) rename file name already exists/] + 002115' 000000 005245' [ASCIZ /(5) illegal sequence of UUOs/] + 002116' 000000 005253' [ASCIZ /(6) bad UFD or bad RIB/] + 002117' 000000 005260' [ASCIZ /(7) not a SAV file/] + 002120' 000000 005264' [ASCIZ /(10) not enough core/] + 002121' 000000 005271' [ASCIZ /(11) device not available/] + 002122' 000000 005277' [ASCIZ /(12) no such device/] + 002123' 000000 005303' [ASCIZ /(13) not two reloc reg. capability/] + 002124' 000000 005312' [ASCIZ /(14) no room or quota exceeded/] + 002125' 000000 005321' [ASCIZ /(15) write lock error/] + 002126' 000000 005326' [ASCIZ /(16) not enough monitor table space/] + 002127' 000000 005336' [ASCIZ /(17) partial allocation only/] + 002130' 000000 005344' [ASCIZ /(20) block not free on allocation/] + + 002131' 000000 005353' TABLND: [ASCIZ /(?) lookup,enter,or rename error/] + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 50 +FUDGE2 MAC 24-APR-78 03:09 ERROR ROUTINES + + 002132' 201100 002371' ERR15: MOVEI B, EMES15 ;DEVICE ERROR ON OUTPUT + 002133' 260500 002174' PUSHJ P, ETYPO ;TYPE THE MESSAGE + 002134' 260500 002205' PUSHJ P, DTYPO ;TYPE NAME OF OFFENDING DEVICE + 002135' 254000 002253' JRST EXIT1 ;GO AWAY + + 002136' 200100 000001 ERR16: MOVE B,A ;SAVE OFFENDING LETTER + 002137' 260500 002243' PUSHJ P,CRLF + 002140' 201040 000077 MOVEI A,77 ;TYPE OUT "?" + 002141' 260500 001656' PUSHJ P, OUT + 002142' 200040 000002 MOVE A, B ;GET BACK OFFENDING LETTER + 002143' 260500 001656' PUSHJ P, OUT ;TYPE OFFENDING LETTER + 002144' 201100 002400' MOVEI B, EMES16 ;"X" IS AN ILLEGAL SWITCH + 002145' 660340 040000 TRO F,CRLFTY + 002146' 254000 002247' JRST ERROR ;TYPE IT AND EXIT + + 002147' 200100 000001 ERR17: MOVE B, A + 002150' 260500 002243' PUSHJ P,CRLF + 002151' 201040 000077 MOVEI A, 77 + 002152' 260500 001656' PUSHJ P, OUT + 002153' 200040 000002 MOVE A, B + 002154' 260500 001656' PUSHJ P, OUT ;TYPE OFFENDING LETTER + 002155' 201100 002405' MOVEI B, EMES17 ;"X" IS AN ILLEGAL CHARACTER + 002156' 660340 040000 TRO F,CRLFTY + 002157' 254000 002247' JRST ERROR ;TYPE IT AND EXIT + + 002160' 201100 002412' ERR18: MOVEI B,EMES18 + 002161' 254000 002247' JRST ERROR + + 002162' 201100 002423' ERR19: MOVEI B,EMES19 + 002163' 254000 002247' JRST ERROR + + 002164' 201100 002427' ERR20: MOVEI B,EMES20 + 002165' 254000 002247' JRST ERROR + + 002166' 201100 002434' ERR21: MOVEI B,EMES21 + 002167' 254000 002247' JRST ERROR + + 002170' 201100 002441' ERR22: MOVEI B,EMES22 + 002171' 254000 002247' JRST ERROR + + 002172' 201100 002447' ERR23: MOVEI B,EMES23 + 002173' 254000 002247' JRST ERROR + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 51 +FUDGE2 MAC 24-APR-78 03:09 VARIOUS ERROR ROUTINES AND SMALL TYPE-OUT ROUTINES + + SUBTTL VARIOUS ERROR ROUTINES AND SMALL TYPE-OUT ROUTINES + + 002174' 505100 440700 ETYPO: HRLI B, 440700 ;MAKE A BYTE POINTER + 002175' 134040 000002 ETYPO2: ILDB A, B ;GET A CHARACTER + 002176' 322040 001065' JUMPE A,CPOPJ ;EXIT IF NULL + 002177' 260500 002237' PUSHJ P, TYPO ;NO, TYPE IT + 002200' 254000 002175' JRST ETYPO2 ;RETURN FOR MORE CHARACTERS + + 002201' 666340 040000 DTYPOQ: TRON F,CRLFTY ;IS CR,LF TYPED OUT? + 002202' 260500 002243' PUSHJ P,CRLF ;YES + 002203' 201040 000077 MOVEI A,77 ;TYPE OUT ? FOR BATCH + 002204' 260500 002237' PUSHJ P,TYPO + + + 002205' 200605 003324' DTYPO: MOVE S, DEVBUF(D) ;GET DEVICE NAME FROM BUFFER + 002206' 200200 005117' DTYPO1: MOVE C, SYMPTR ;BYTE POINTER TO SYMBOL NAME + 002207' 201100 000006 MOVEI B, 6 ;LOOP COUNTER FOR 6 CHARACTERS + 002210' 134040 000004 DTYPO2: ILDB A, C ;GET A CHARACTER + 002211' 322040 002214' JUMPE A, DTYPO3 ;IGNORE BLANKS + 002212' 271040 000040 ADDI A, 40 ;CONVERT TO 7-BIT ASCII + 002213' 260500 002237' PUSHJ P, TYPO ;TYPE IT + 002214' 367100 002210' DTYPO3: SOJG B, DTYPO2 ;ALL DONE? + 002215' 263500 000000 POPJ P, ;EXIT + + 002216' 200620 002524' FTYPO: MOVE S, @FILBUF ;PICK UP THE FILE NAME + 002217' 254000 002206' JRST DTYPO1 ;JUMP INTO DTYPO ROUTINE + + 002220' 201040 000006 PTYPO: MOVEI A, 6 ;SIX CHARACTERS TO GET + 002221' 231100 000050 PTYPO2: IDIVI B, 50 ;CONVERT TO SIXBIT CODE + 002222' 506152 000000 HRLM B+1, (P) ;STORE CHARACTER ON PD LIST + 002223' 363040 002225' SOJLE A,.+2 ;ALL DONE? + 002224' 260500 002221' PUSHJ P, PTYPO2 ;NO, DIVIDE SOME MORE + 002225' 554052 000000 HLRZ A, (P) ;POP CHARACTERS OFF STACK + 002226' 322040 001065' JUMPE A, CPOPJ ;IGNORE BLANKS + 002227' 303040 000012 CAILE A, 12 ;LETTER OR NUMBER? + 002230' 271040 000007 ADDI A, 7 ;LETTER - ADD 66 + 002231' 271040 000057 ADDI A, 57 ;NUMBER - ADD 57 + 002232' 306040 000134 CAIN A, 134 ;DOLLAR SIGN? + 002233' 275040 000070 SUBI A, 70 ;YES, SPECIAL CASE + 002234' 306040 000133 CAIN A, 133 ;PERIOD? + 002235' 275040 000055 SUBI A, 55 ;YES, SPECIAL CASE + 002236' 254000 001656' JRST OUT ;RECURSIVE EXIT FOR MORE CHARS + + 002237' 136040 004603' TYPO: IDPB A, OBUF+1 ;STORE CHARACTER IN BUFFER + 002240' 306040 000012 CAIN A, 12 ;LINE FEED? + 002241' 067000 000000 OUTPUT 0, ;YES, EMPTY BUFFER + 002242' 263500 000000 POPJ P, ;EXIT + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 52 +FUDGE2 MAC 24-APR-78 03:09 VARIOUS ERROR ROUTINES AND SMALL TYPE-OUT ROUTINES + + 002243' 201040 000015 CRLF: MOVEI A, 15 ;CARRIAGE RETURN + 002244' 260500 001656' PUSHJ P, OUT ;OUTPUT IT + 002245' 201040 000012 MOVEI A, 12 ;LINE FEED + 002246' 254000 001656' JRST OUT ;OUTPUT IT AND EXIT + + 002247' 620340 000020 ERROR: TRZ F,TTYOB ;JUST IN CASE , SET OUTPUT TO TTY + 002250' 666340 040000 TRON F,CRLFTY + 002251' 260500 002243' PUSHJ P,CRLF + 002252' 260500 002174' PUSHJ P, ETYPO ;TYPE LAST MESSAGE OF ERROR + 002253' 620340 000020 EXIT1: TRZ F,TTYOB ;ENSURE TTY OUTPUT OF CR-LF + 002254' 260500 002243' PUSHJ P,CRLF ;FINISH WITH CR-LF + 002255' 070000 000000 CLOSE 0, ;FORCE OUTPUT OF LAST LINE + 002256' 254000 000000' JRST FUDGE2 ;START AGAIN + + 002257' 070040 000000 EXIT: CLOSE 1, ;CLOSE OUT THE OUTPUT CHANNEL + 002260' 254000 000000' JRST FUDGE2 ;RESTART + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 53 +FUDGE2 MAC 24-APR-78 03:09 ERROR MESSAGES + + SUBTTL ERROR MESSAGES + 002261' 376152 542216 EMES1: ASCIZ "?FUDGE2 SYNTAX ERROR" + 002262' 425444 051662 + 002263' 472510 154100 + 002264' 426452 247644 + 002265' 000000 000000 + 002266' 376511 747500 EMES2: ASCIZ "?TOO MANY FILE NAMES OR PROGRAM NAMES" + 002267' 466031 654500 + 002270' 432231 442500 + 002271' 472031 542646 + 002272' 202372 220240 + 002273' 512370 751202 + 002274' 465011 640632 + 002275' 426460 000000 + 002276' 376412 247616 EMES3: ASCIZ "?PROGRAM ERROR WHILE RESETTING MASTER DEVICE" + 002277' 512031 520212 + 002300' 512451 751100 + 002301' 536211 146212 + 002302' 202450 551612 + 002303' 522511 147216 + 002304' 202330 151650 + 002305' 426444 042212 + 002306' 532230 342400 + 002307' 202070 147234 EMES4: ASCIZ " CANNOT DO IO AS REQUESTED" + 002310' 476504 042236 + 002311' 202231 720202 + 002312' 515012 242642 + 002313' 526132 352212 + 002314' 420000 000000 + 002315' 376531 642642 EMES5: ASCIZ "?UNEQUAL NUMBER OF MASTER AND TRANSACTION PROGRAMS" + 002316' 526031 420234 + 002317' 526330 242644 + 002320' 202370 620232 + 002321' 406472 442644 + 002322' 202031 642100 + 002323' 522450 147246 + 002324' 406072 444636 + 002325' 471012 051236 + 002326' 436450 146646 + 002327' 000000 000000 + 002330' 376351 752100 EMES6: ASCIZ "?NOT ENOUGH ARGUMENTS" + 002331' 426351 752616 + 002332' 441010 151216 + 002333' 526330 547250 + 002334' 514000 000000 + 002335' 202351 752100 EMES7: ASCIZ " NOT FOUND" + 002336' 432372 547210 + 002337' 000000 000000 + 002340' 202351 752100 EMES9B: ASCIZ " NOT AVAILABLE" + 002341' 406550 144630 + 002342' 406051 442400 + 002343' 376131 652244 EMES10: ASCIZ "?ENTRY BLOCK TOO LARGE, PROGRAM " + 002344' 545010 246236 + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 53-1 +FUDGE2 MAC 24-APR-78 03:09 ERROR MESSAGES + + 002345' 416264 052236 + 002346' 475011 440644 + 002347' 436125 420240 + 002350' 512370 751202 + 002351' 465000 000000 + 002352' 376512 240634 EMES11: ASCIZ "?TRANSMISSION ERROR ON INPUT DEVICE " + 002353' 516331 151646 + 002354' 446371 620212 + 002355' 512451 751100 + 002356' 476344 044634 + 002357' 502532 420210 + 002360' 426551 141612 + 002361' 200000 000000 + 002362' 376111 151212 EMES14: ASCIZ "?DIRECTORY FULL ON OUTPUT DEVICE " + 002363' 416511 751262 + 002364' 202152 546230 + 002365' 202371 620236 + 002366' 526512 052650 + 002367' 202110 553222 + 002370' 416124 000000 + 002371' 376110 553222 EMES15: ASCIZ "?DEVICE ERROR ON OUTPUT DEVICE " + 002372' 416124 042644 + 002373' 512372 220236 + 002374' 471011 752650 + 002375' 502532 420210 + 002376' 426551 141612 + 002377' 200000 000000 + 002400' 202232 320202 EMES16: ASCIZ " IS AN ILLEGAL SWITCH" + 002401' 471011 146230 + 002402' 426170 146100 + 002403' 516571 152206 + 002404' 440000 000000 + 002405' 202232 320202 EMES17: ASCIZ " IS AN ILLEGAL CHARACTER" + 002406' 471011 146230 + 002407' 426170 146100 + 002410' 416210 151202 + 002411' 416510 551000 + 002412' 376110 553222 EMES18: ASCIZ "?DEVICE FOR * COMMAND MUST BE DSK OR DTA" + 002413' 416124 043236 + 002414' 511005 220206 + 002415' 476331 540634 + 002416' 421011 552646 + 002417' 521010 242500 + 002420' 422471 320236 + 002421' 511010 452202 + 002422' 000000 000000 + 002423' 376070 147234 EMES19: ASCIZ "?CANNOT INIT DSK" + 002424' 476504 044634 + 002425' 446504 042246 + 002426' 454000 000000 + 002427' 376311 747626 EMES20: ASCIZ "?LOOKUP FAILURE ON DSK" + 002430' 526404 043202 + 002431' 446312 551212 + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 53-2 +FUDGE2 MAC 24-APR-78 03:09 ERROR MESSAGES + + 002432' 202371 620210 + 002433' 516260 000000 + 002434' 376132 251236 EMES21: ASCIZ "?ERROR WHILE READING UFD" + 002435' 511012 744222 + 002436' 462124 051212 + 002437' 406111 147216 + 002440' 202530 642000 + 002441' 376351 752100 EMES22: ASCIZ "?NOT ENOUGH CORE AVAILABLE " + 002442' 426351 752616 + 002443' 441010 347644 + 002444' 425010 153202 + 002445' 446310 141230 + 002446' 425000 000000 + 002447' 376372 552240 EMES23: ASCIZ "?OUTPUT DEVICE MUST BE DSK OR DTA" + 002450' 526504 042212 + 002451' 532230 342500 + 002452' 466532 352100 + 002453' 412124 042246 + 002454' 455011 751100 + 002455' 422510 100000 + 002456' 202111 742646 EMES24: ASCIZ " DOES NOT EXIST" + 002457' 202351 752100 + 002460' 426611 151650 + 002461' 000000 000000 + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 54 +FUDGE2 MAC 24-APR-78 03:09 IMPURE CODE + + SUBTTL IMPURE CODE + + + 002462' 050000 002521' COLON1: OPEN ,COLON0 ;INITIALIZATION SEQUENCE + 002463' 077003 004572' SEMIC1: ENTER , EBLOCK(T) + 002464' 064004 000000 INBUF3: INBUF ,(C) + + 002465' 072000 000017 BACK0: MTAPE , 17 ;BACKSPACE MAG TAPE ONE FILE + 002466' 072000 000000 BACK3: MTAPE ,0 ;WAIT FOR BACKSPACE TO FIN. + 002467' 061000 004000 BACK1: STATO , IOBOT ;ARE WE AT BEGINNING OF TAPE + 002470' 072000 000016 BACK2: MTAPE , 16 ;NO, SKIP FILE + 002471' 263500 000000 POPJ P, ;EXIT + + 002472' 070000 000000 GET3A: CLOSE , + 002473' 076003 004572' GET4A: LOOKUP , EBLOCK(T) + + 002474' 056000 000000 INGET2: IN 0, ;INPUT A BUFFER OF DATA + 002475' 254000 001651' JRST GETIN1 ;NO ERRORS + 002476' 063000 020000 INGET3: STATZ , IOEOF ;END OF FILE? + 002477' 254000 001064' JRST POPOUT ;YES, HIGH LEVEL EXIT + 002500' 254000 002072' JRST ERR11 ;ERROR + + 002501' 060000 000117 DP: SETSTS ,117 ;DUMP MODE NON-STANDARD + 002502' 074000 000144 USETI ,144 ;DIRECTORY BLOCK + 002503' 066000 002513' INPUT ,DIRIOW ;ONE BLOCK ONLY + 002504' 063000 760000 STATZ ,760000 ;CHECK ERRORS + 002505' 254000 002501' JRST DP ;TRY AGAIN + 002506' 060000 000014 SETSTS ,14 ;BACK TO BINARY + 002507' 254000 001770' JRST DTALUP + + 002510' 000000 000014 DSKINI: EXP 14 + 002511' 446353 000000 SIXBIT /DSK/ ;MAY GET MODIFIED + 002512' 000000 004642' EXP DIRBUF + + 002513' 777600 004646' DIRIOW: IOWD 200,DIRBLK ;IOWD FOR DIRECTORY INPUT + 002514' 000000 000000 0 ;MUST BE IN LOW SEGMENT + + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 55 +FUDGE2 MAC 24-APR-78 03:09 STORAGE AND BUFFERS + + SUBTTL STORAGE AND BUFFERS + + 002515' LOW: + + 002515' FILSAV: BLOCK 1 + 002516' BLKCNT: BLOCK 1 ;NUMBER OF BUFFERS OUTPUT + 002517' SAVEAC: BLOCK 1 + 002520' SAVEBT: BLOCK 1 + 002521' COLON0: BLOCK 1 ;MODE + 002522' COLON2: BLOCK 1 ;DEVICE NAME + 002523' COLON3: BLOCK 1 ;BUFFER HEADER + 002524' FILBUF: BLOCK N + 002724' PRGBUF: BLOCK N + 003124' PPNBUF: BLOCK N + 003324' DEVBUF: BLOCK 10 + 003334' ENTBLK: BLOCK X+1 + 004042' SVEBLK: BLOCK X+1 + 004550' PDLIST: BLOCK XP + 004570' BLOCK 2 ;FOR EXTENDED LOOKUP AND ENTERS + 004572' EBLOCK: BLOCK 4 + 004576' BLOCK <RIBALC-6+1> ;MORE EXTENDED STUFF + 004602' OBUF: BLOCK 6 ;TTY:, OUTPUT DEV: + 004610' IBUF: BLOCK 30 ;INPUT DEVICES (10) + + 004640' SAVNAM: BLOCK 1 ;SAVED FILE NAME FROM UFD + 004641' SAVEXT: BLOCK 1 ;SAVED EXT NAME FROM UFD + 004642' DIRBUF: BLOCK 3 ;DIRECTORY BUFFER HEADER + 004645' DSKHDR: BLOCK N+2 ;TWO WORDS OF OVERHEAD [P,P]+EXT + 004647' DIRBLK=DSKHDR+2 + 004772' DIRNAM=DIRBLK+123 ;FILENAMES IN DTA DIRECTORY START HERE + 005020' DIREXT=DIRNAM+26 ;EXTENSIONS IN DTA DIRECTORY START HERE + + 005047' BSZ: BLOCK 1 ;SIZE OF OLD SYMBOL BLOCK + 005050' PTGRS: BLOCK 1 ;PTGR SAVED + 005051' PTSRS: BLOCK 1 ;PTSR SAVED + 005052' RELOCS: BLOCK 1 ;ORIGINAL RELOC + 005053' SYMBLK: BLOCK ^D20 ;NEW SYMBOL BLOCK + + 005077' MATCH: BLOCK 1 ;COUNT OF <'S - >'S ***VJC + + 005100' CURCHR: BLOCK 1 ;SAVED CURRENT CHAR OF CS + 005101' LSTCHR: BLOCK 1 ;SAVED LAST CHAR OF CS + 005102' SDEVCH: BLOCK 1 ;SAVED DEVICE CHARACTERS + 005103' NUMDEV: BLOCK 1 ;NUMBER OF DEVICES + 005104' XCOUNT: BLOCK 1 + 005105' XPNTR: BLOCK 1 + 005106' BUFSIZ: BLOCK 1 + 005107' XBEG: BLOCK 2 + 005111' LEVEL: BLOCK 1 ;-2 IF LEVEL D + 005112' DEFPPN: BLOCK 1 ;DEFAULT PROJ-PROG + 005113' PRJPRG: BLOCK 1 ;TEMP. PROJ-PROG + 005114' SVENTR: BLOCK 2 ;PLACE TO SAVE EBLOCK,+1 + 005116' NOWARN: BLOCK 1 ;SIGNAL TO PRINT MESSAGE ABOUT INDEX + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 55-1 +FUDGE2 MAC 24-APR-78 03:09 STORAGE AND BUFFERS + + 005117' VAR ;JUST IN CASE + + 005117' LOWTOP: + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 56 +FUDGE2 MAC 24-APR-78 03:09 CONSTANTS,POINTERS AND LITERALS + + SUBTTL CONSTANTS,POINTERS AND LITERALS + + 005117' 440600 000014 SYMPTR: POINT 6, S + 005120' 440600 000016 EXTPTR: POINT 6, EXT + 005121' 440400 005054' PTSR: POINT 4,SYMBLK+1 ;TO STORE RELOCATION + 005122' 440400 005052' PTGR: POINT 4,RELOCS ;TO GET RELOCATION + 005123' 047040 000013 DTCLR: UTPCLR 1, + 005124' 002526' 002525' FILXWD: XWD FILBUF+2, FILBUF+1 + 005125' 777760 004547' XPDLST: XWD -XP,PDLIST-1 + + 000000' END FUDGE2 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 005362 + +9K CORE USED + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 57 +FUDGE2 MAC 24-APR-78 03:09 SYMBOL TABLE + +A 000001 +ALTMOD 000521' +APPEND 000711' +APROC3 000716' +ASTRSK 001675' +B 000002 +BACK0 002465' +BACK1 002467' +BACK2 002470' +BACK3 002466' +BACKSP 001024' +BITE 000110' +BLKCNT 002516' +BSWTCH 000250' +BSZ 005047' +BUFSIZ 005106' +C 000004 +COLON 000317' +COLON0 002521' +COLON1 002462' +COLON2 002522' +COLON3 002523' +COLON4 000375' +COLON6 000340' +COLON7 000344' +COLON8 000357' +COLONB 000406' +COLONC 000373' +COMMA 000310' +COMMA1 000503' +COMMA3 000477' +COMMA4 000516' +COMMAP 000470' +COMMAX 000314' +CONB 010000 SPD +COPY 000737' +COPYTO 000743' +CORE 047000 000011 +COUNT 001337' +CPOPJ 001065' +CPOPJ1 001063' +CRLF 002243' +CRLFTY 040000 SPD +CURCHR 005100' +D 000005 +DEFENT 000463' +DEFPPN 005112' +DELCPY 000730' +DELDEC 001435' +DELETE 000701' +DELFIN 001445' +DELGT1 001416' +DELGTR 001412' + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 57-1 +FUDGE2 MAC 24-APR-78 03:09 SYMBOL TABLE + +DELINI 001461' +DELLOC 001410' +DELWRT 001447' +DELWRU 001455' +DESTB 000001 SPD +DEVB 000400 SPD +DEVBUF 003324' +DEVCHR 047000 000004 +DEVPPN 047000 000055 +DIRBLK 004647' +DIRBUF 004642' +DIREXT 005020' +DIRIOW 002513' +DIRNAM 004772' +DIS 000015 +DOENTR 001121' +DOXSWT 001134' +DP 002501' +DPROC1 000703' +DRCTRB 000004 SPD +DSKAST 001704' +DSKBIT 200000 SPD +DSKHDR 004645' +DSKIN1 001751' +DSKINI 002510' +DSKINP 001745' +DSKLUP 001724' +DSPTCH 000065' +DTAAST 001760' +DTABIT 000100 SPD +DTAFLG 400000 SPD +DTALUP 001770' +DTCLR 005123' +DTYPO 002205' +DTYPO1 002206' +DTYPO2 002210' +DTYPO3 002214' +DTYPOQ 002201' +E 000006 +EBLOCK 004572' +EMES1 002261' +EMES10 002343' +EMES11 002352' +EMES14 002362' +EMES15 002371' +EMES16 002400' +EMES17 002405' +EMES18 002412' +EMES19 002423' +EMES2 002266' +EMES20 002427' +EMES21 002434' +EMES22 002441' + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 57-2 +FUDGE2 MAC 24-APR-78 03:09 SYMBOL TABLE + +EMES23 002447' +EMES24 002456' +EMES3 002276' +EMES4 002307' +EMES5 002315' +EMES6 002330' +EMES7 002335' +EMES9B 002340' +ENDST 001372' +ENTBLK 003334' +EPROC1 000670' +EPROC2 000672' +ERR10 002064' +ERR11 002072' +ERR14 002076' +ERR15 002132' +ERR16 002136' +ERR17 002147' +ERR18 002160' +ERR19 002162' +ERR20 002164' +ERR21 002166' +ERR22 002170' +ERR23 002172' +ERR8A 002103' +ERRB 002000 SPD +ERRISQ 000214' +ERROR 002247' +ERROR1 002007' +ERROR2 002011' +ERROR3 002013' +ERROR4 002015' +ERROR5 002022' +ERROR6 002024' +ERROR7 002026' +ERROR8 002043' +ERROR9 002061' +ETABLE 002110' +ETYPO 002174' +ETYPO2 002175' +EXIT 002257' +EXIT1 002253' +EXT 000016 +EXTB 001000 SPD +EXTPTR 005120' +EXTRCT 000660' +F 000007 +F4 001346' +F4I 001270' +F4IB 020000 SPD +F4LUP1 001374' +F4LUP2 001402' +F4LUP3 001375' + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 57-3 +FUDGE2 MAC 24-APR-78 03:09 SYMBOL TABLE + +FILBUF 002524' +FILSAV 002515' +FILXWD 005124' +FIN 001755' +FIND1 000752' +FIND2 000757' +FIND3 000765' +FINDCP 000751' +FIXUP 000647' +FTYPO 002216' +FUDGE2 000000' +G 000010 +GET0 001046' +GET1 001060' +GET3 001066' +GET3A 002472' +GET4 001107' +GET4A 002473' +GETCHR 000040' +GETCMN 000045' +GETDEV 001031' +GETIN 001647' +GETIN1 001651' +GETPPN 047000 000024 +H 000011 +IBUF 004610' +INBIT 000002 SPD +INBUF0 000546' +INBUF1 000566' +INBUF2 000556' +INBUF3 002464' +INBUF4 000571' +INBUFG 000573' +INDEX 000722' +INDEX0 001467' +INDEX1 001514' +INDEX2 001536' +INDEX3 001571' +INDEX4 001600' +INDEX5 001614' +INDEX6 001625' +INDEXA 001530' +INDEXH 001646' +INFOB 004000 SPD +INGET 001653' +INGET2 002474' +INGET3 002476' +INSER1 000654' +INSERT 000632' +IOBKTL 040000 SPD +IOBOT 004000 SPD +IODATA 100000 SPD +IODEV 200000 SPD + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 57-4 +FUDGE2 MAC 24-APR-78 03:09 SYMBOL TABLE + +IOEOF 020000 SPD +IPROC7 000656' +JOBFF 001756' EXT +JOBREL 001476' EXT +JOBSA 000000 EXT +JOBSYM 000000 EXT +JOBVER 000137 SPD +JSR 260500 000000 +KSWTCH 000251' +LBRACA 000277' +LBRACK 000265' +LEVEL 005111' +LFTARW 000156' +LIST 000600' +LIST1 000610' +LIST2 000613' +LOW 002515' +LOWTOP 005117' +LPTBIT 040000 SPD +LSQB 000162' +LSQB1 000164' +LSTCHR 005101' +MACHCD 001365' +MATCH 005077' +MSTGET 000772' +N 000200 SPD +NODEV 000150' +NOLOCB 000200 SPD +NOROOM 001546' +NOWARN 005116' +NUMDEV 005103' +NXTWRD 001223' +OBUF 004602' +OUT 001656' +OUT1 001660' +OUT2 001662' +OUT4 001405' +OUTBIT 000001 SPD +OUTG 001671' +OUTGO 001664' +P 000012 +PDLIST 004550' +PERIOD 000257' +POPBAK 100000 SPD +POPOUT 001064' +PPNBUF 003124' +PRGBUF 002724' +PRJPRG 005113' +PROGB 000100 SPD +PTGR 005122' +PTGRS 005050' +PTSR 005121' +PTSRS 005051' + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 57-5 +FUDGE2 MAC 24-APR-78 03:09 SYMBOL TABLE + +PTYPO 002220' +PTYPO2 002221' +PUTFIL 001137' +PUTPPN 001151' +PUTPRG 001144' +R 000013 +RBRACK 000303' +READ 001156' +READ1 001206' +READ2 001210' +READ22 001230' +READ23 001216' +READ3 001245' +READ5 001243' +READ55 001233' +READ6 001157' +READ6A 001173' +READ6B 001202' +READ7 001266' +READ8 001255' +READ9 001261' +READX 001276' +RELOCS 005052' +REPLCE 000621' +RESET 001002' +RESET 047000 000000 +RESET1 001017' +RESET2 001005' +RESET3 001012' +RIBALC 000011 SPD +RSQB 000202' +S 000014 +SAVEAC 002517' +SAVEB 000002 SPD +SAVEBT 002520' +SAVEXT 004641' +SAVNAM 004640' +SDEVCH 005102' +SEMIC1 002463' +SEMIC2 000447' +SEMIC3 000462' +SEMIC4 000427' +SEMICA 000416' +SEMICP 000407' +SIZE 000500 SPD +SIZZ 000452 SPD +SLASH 000144' +SLIST 000216' +SLSHB 000010 SPD +SQBCMA 000177' +STNULL 000444' +STORE 000127' +SVEBLK 004042' + + FUDGE2 V.011 MACRO 10 05:52 24-APR-78 PAGE 57-6 +FUDGE2 MAC 24-APR-78 03:09 SYMBOL TABLE + +SVENTR 005114' +SW 000017 +SWTB 000004 SPD +SWTCH 000145' +SWTCHA 000135' +SWTCHE 000146' +SYMBLK 005053' +SYMPTR 005117' +T 000003 +TABLE 000077' +TABLND 002131' +TRNGET 000777' +TSWTCH 000252' +TTYBIT 000010 SPD +TTYCB 000040 SPD +TTYIN 000210' +TTYOB 000020 SPD +TYPO 002237' +UTPCLR 047000 000013 +VCUSTO 000000 SPD +VFUDGE 000011 SPD +VPATCH 000000 SPD +WRITE 001305' +WRITE2 001310' +WRITE3 001314' +WRITE4 001330' +WSWTCH 000253' +X 000505 SPD +XBEG 005107' +XCOUNT 005104' +XFLG 200000 SPD + LLL OOOOOOOOO AAAAAAAAA DDDDDDDDDDDD EEEEEEEEEEEEEEE RRRRRRRRRRRR +LLL OOOOOOOOO AAAAAAAAA DDDDDDDDDDDD EEEEEEEEEEEEEEE RRRRRRRRRRRR +LLL OOOOOOOOO AAAAAAAAA DDDDDDDDDDDD EEEEEEEEEEEEEEE RRRRRRRRRRRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEEEEEEEEEEE RRRRRRRRRRRR +LLL OOO OOO AAA AAA DDD DDD EEEEEEEEEEEE RRRRRRRRRRRR +LLL OOO OOO AAA AAA DDD DDD EEEEEEEEEEEE RRRRRRRRRRRR +LLL OOO OOO AAAAAAAAAAAAAAA DDD DDD EEE RRR RRR +LLL OOO OOO AAAAAAAAAAAAAAA DDD DDD EEE RRR RRR +LLL OOO OOO AAAAAAAAAAAAAAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLLLLLLLLLLLLLL OOOOOOOOO AAA AAA DDDDDDDDDDDD EEEEEEEEEEEEEEE RRR RRR +LLLLLLLLLLLLLLL OOOOOOOOO AAA AAA DDDDDDDDDDDD EEEEEEEEEEEEEEE RRR RRR +LLLLLLLLLLLLLLL OOOOOOOOO AAA AAA DDDDDDDDDDDD EEEEEEEEEEEEEEE RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB1 :LOADER.LST [8,296] Created: 20-April-1967 05:52:00 Printed: 24-April-1978 05:53:41 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1244 +File will be deleted after printing + PPPPPPPPPPPP IIIIIIIII PPPPPPPPPPPP +PPPPPPPPPPPP IIIIIIIII PPPPPPPPPPPP +PPPPPPPPPPPP IIIIIIIII PPPPPPPPPPPP +PPP PPP III PPP PPP +PPP PPP III PPP PPP +PPP PPP III PPP PPP +PPP PPP III PPP PPP +PPP PPP III PPP PPP +PPP PPP III PPP PPP +PPPPPPPPPPPP III PPPPPPPPPPPP +PPPPPPPPPPPP III PPPPPPPPPPPP +PPPPPPPPPPPP III PPPPPPPPPPPP +PPP III PPP +PPP III PPP +PPP III PPP +PPP III PPP +PPP III PPP +PPP III PPP +PPP IIIIIIIII PPP +PPP IIIIIIIII PPP +PPP IIIIIIIII PPP + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB1 :PIP .LST [8,296] Created: 20-April-1967 05:53:00 Printed: 24-April-1978 05:53:41 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1244 +File will be deleted after printing + +PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + TITLE PIP V.030 MOD SANDERS/DBP 19-AUG-71 + SUBTTL VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;PERIPHERAL INTERCHANGE PROGRAM + ;"COPYRIGHT 1968, 1969, DIGITAL EQUIPMENT CORP.,MAYNARD,MASS.,U.S.A. + + 000030 VPIP==30 ;VERSION NUMBER + 000005 SVER==5 ; SANDERS VERSION + + + ;WCH==0 PIP IS ASSEMBLED FOR PDP-10 AND ASSUMES NEW FORMAT DECTAPES. + ;WCH==1 PIP IS ASSEMBLED FOR PDP-6 AND ASSUMES OLD FORMAT DECTAPES. + + ;DISK30==0 PIP IS ASSEMBLED TO RUN WITH 10/40, 10/50 MONITOR SYSTEMS. + ;DISK30==1 PIP IS ASSEMBLED TO RUN WITH 10/30 DISK SYSTEM. + + ;BLOC0==0 PIP ALLOWS COPYING OF BLOCK0 (DECTAPE). + ;BLOC0==1 PIP WILL NOT ALLOW BLOCK0 TO BE COPIED. + + ;RIMSW==0 /Y SWITCH OPTION UNAVAILABLE. (ALSO UNAVAILABLE FOR OLD FORMAT DECTAPES) + ;RIMSW==1 /Y SWITCH OPTION AVAILABLE. + + ;FTDSK==0 NON DSK SYSTEM.NO CCL.SAVES CORE ON 10/40 + ;FTDSK==1 10/50 DSK SYSTEM,ALSO 10/30 DSK SYSTEM + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 2 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + ;CONDITIONAL ASSEMBLY SWITCH SETUP (NORMAL CONFIGURATION) + ;--------------------------------- + + IFNDEF WCH, <WCH==0> + IFNDEF DISK30, <DISK30==0> + IFNDEF BLOC0, <BLOC0==0> + IFNDEF FTDSK, <FTDSK==0> + IFN WCH, <RIMSW==0> + IFNDEF RIMSW, <RIMSW==0> + IFNDEF K, <K==0> + + + + + 000124 LOC 124 + 000124 000000 000000' PIP1 ;SET REENTER ADDRESS + 000000' RELOC + 000137 LOC 137 + 000137 000005 000030 XWD SVER,VPIP + 000000' RELOC + + + MLON + IFDEF SALL, <SALL> + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 3 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + EXTERN JOBFF,JOBSA,JOBREL + + ;FLAG ASSIGNMENTS (RIGHT HALF) + + 000001 LINE==1 ;ASCII LINE MODE PROCESSING + 000002 BMOD==2 ;BINARY PROCESSING + 000004 TBMOD==4 ;SUPPRESS TRAILING SP, CHANGE MULTIPLE SP TO TABS + 000010 DFLG==10 ;DELETE FILES MODE + 000020 LFLG==20 ;LIST DIRECTORY + 000040 NSMOD==40 ;IGNORE INPUT SEQUENCE NUMBERS + 000100 RFLG==100 ;RENAME FILE MODE + 000200 SQMOD==200 ;GENERATE SEQUENCE NUMBERS + 000400 STS==400 ;END OF LINE SEEN, OUTPUT SEQUENCE NUMBER NEXT + 001000 SPMOD==1000 ;SUPPRESS TRAILING SPACES + 002000 XFLG==2000 ;COPY DECTAPE MODE + 004000 ZFLG==4000 ;CLEAR DECTAPE DIRECTORY + 010000 SUS==10000 ;SEQUENCE NUMBER GENERATION IN PROGRESS + 020000 SPOK==20000 ;SPACE WAS LAST CHARACTER + 040000 ESQ==40000 ;STOP OUTPUTTING SEQ NUM, RESUME OUTPUTTING DATA + 100000 SNI==100000 ;DO NOT INCREMENT SEQUENCE NUMBER + 200000 MTFLG==200000 ;MTA REQUEST RECEIVED + 400000 OSFLG==400000 ;GENERATE SEQ. NOS. INCR. BY ONE + + ;FLAG ASSIGNMENTS (LEFT HALF) + + 000001 OFLG==1 ;BLOCK 0 COPY + 000002 RIMFLG==2 ;RIM FORMAT INPUT /OUT TO DTA. ILLEG IF RIMSW==0,OR WCH==1 + 000004 PFLG==4 ;FORTRAN PROGRAM OUTPUT FORMAT CONVERSION + 000010 PCONV==10 ;COLUMN 1 CONVERSION IN PROGRESS + 000020 NEWFIL==20 ;NEW FILE JUST INITIATED + 000040 CHKFLG==40 ;PARENTHESES CHECK MODE + 000100 IFLG==100 ;SELECT IMAGE MODE + 000200 GFLG==200 ;KEEP GOING IF THERE ARE I/O ERRORS + 000400 IBFLG==400 ;SELECT IMAGE BINARY MODE + 001000 JFLG==1000 ;NON-STANDARD MODE + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 4 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;AUXFLG ASSIGNMENTS (LEFT HALF) + + 000001 QFLG==1 ;PLEASE PRINT SWITCH SET + 000002 NSPROT==2 ;NON-STANDARD DISK OUTPUT PROTECTION + 000004 SBIN==4 ;36-BIT PR. ON REL. ETC. FILES + 000020 NOMORE==20 ;IGNORE ANY SWITCHES BUT MTA FROM NOW ON + 000040 CDRFLG==40 ;CONVERT COLS 73-80 TO SPACES + /C + 000100 INFOFL==100 ;FLAG USED BY ERR3A: + 000200 RSDCFL==200 ;USED FOR MERGING FILES, ==1 IF FILE HAS EXTENSION + ;REL,SAV,DMP,CHN OR OTHERWISE == 0 + 000400 FRSTIN==400 ;THIS IS THE FIRST INPUT FILE (USED IN FILE + ;MERGE COMMAND) == 0 FOR FIRST INPUT + + ;MTAREQ ASSIGNMENTS (RIGHT HALF) + + 000001 MTAFLG==1 ;MTA ADVANCE ONE FILE + 000002 MTBFLG==2 ;MTA BACKSPACE ONE FILE + 000004 MTTFLG==4 ;MTA SKIP TP LOGICAL EOT + 000010 MTWFLG==10 ;MTA REWIND + 000020 MTFFLG==20 ;MTA MARK EOF + 000040 MTUFLG==40 ;MTA REWIND AND UNLOAD + 000100 MTDFLG==100 ;MTA ADVANCE ONE RECORD + 000200 MTPFLG==200 ;MTA BACKSPACE ONE RECORD + 000400 MT8FLG==400 ;MTA SET 800 B.P.I. + 001000 MT5FLG==1000 ;MTA SET 556 B.P.I. + 002000 MT2FLG==2000 ;MTA SET 200 B.P.I. + 004000 MTEFLG==4000 ;MTA SELECT EVEN PARITY + + ;AUXFLG ASSIGNMENTS (RIGHT HALF) + + 000001 REDFLG==1 ;==1 IF ANY FILES ARE INPUT (OTHER THAN DIRECTORIES) + 000002 SYSFLG==2 ;DEVICE IS SYS + 000004 SYSLST==4 ;LAST DEVICE WAS SYS + 000010 LPTOUT==10 ;LPT OUTPUT + 000020 FFLG==20 ;LIST SHORT DISK DIRECTORY + 000040 ONEOUT==40 ;ONE OUTPUT FILE INITIALIZED + 000100 CDRIN==100 ;CARDS IN + 000200 MTAOUT==200 ;OUTPUT TO MTA + 000400 MTAIN==400 ;INPUT FROM MTA + 001000 TTYIN==1000 ;INPUT FROM TTY + 002000 READ1==2000 ;LOOK FOUND NEW INPUT FILE, NO READ YET. + 004000 DTAOUT==4000 ;OUTPUT TO DTA + 010000 DSKOUT==10000 ;OUTPUT TO DSK + 020000 DTAIN==20000 ;INPUT FROM DTA + 040000 DSKIN==40000 ;INPUT FROM DSK + 100000 TTYOUT==100000 ;OUTPUT TO TTY + 200000 PPTIN==200000 ;INPUT FROM PTR + 400000 PPTOUT==400000 ;OUTPUT TO PTP + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 5 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;CALFLG ASSIGNMENTS (RIGHT HALF) FOR DESCRIBING A BLOCK OF INFORMATION + ;FOUND BY THE COMMAND SCANNER. + + 000001 FNEX==1 ;==1 WHEN FN.EX==*.*, *.EXT, FN.* (WHEN MORE + ;THAN ONE FN.EX IS IMPLIED). + 000002 MATEX==2 ;FILE EXTENSIONS MUST MATCH + 000004 MATFN==4 ;FILE NAMES MUST MATCH + 000010 NEWDEV==10 ;A NEW INPUT DEVICE WAS GIVEN + 000020 NEWPP==20 ;A NEW #P-P WAS GIVEN + 000040 ASTFLG==40 ;FLAG SET WHEN FILE NAMED IN CS FOUND + ;BY LOOK ROUTINE EVEN IF FN OR EXT =* + 000100 DEV==100 ;DEVICE NAME INDICATOR + 000200 DVSWTH==200 ;OUTPUT DEVICE SEEN + 000400 NSWTCH==400 ;INDICATES NULL NAME + 001000 SSWTCH==1000 ;LEFT ARROW SEEN + 002000 LISTTY==2000 ;LIST TO TTY + 004000 TMPI==4000 ;INPUT DEVICE TMPCOR SEEN + 010000 TMPO==10000 ;OUTPUT DEVICE TMPCOR + 020000 RXFLG==20000 ;(RX) SEEN + + 000037 ALLCLF==FNEX!MATEX!MATFN!NEWDEV!NEWPP + + ;DEVICE CHANNEL ASSIGNMENTS + + 000001 CON==1 ;COMMAND INPUT CHANNEL + 000002 OUT==2 ;OUTPUT DEVICE + 000003 IN==3 ;INPUT DEVICE + 000004 TAPE==4 ;MTA POSITIONING + 000005 DIR==5 ;DISK DIR. READ + 000006 BLKIN==6 ;INPUT FOR 10/30 DISK FILES + 000007 DTDIR==7 ; DECTAPE DIR. READ(FOR PPN) + + ;ACCUMULATOR ASSIGNMENTS + + 000001 T1=1 ;GENERAL PURPOSE + 000002 T2=2 ;G.P. + 000003 T3=3 ;G.P. + 000004 CHR=4 ;INPUT CHARACTER + 000005 P=5 ;PUSHDOWN POINTER + 000006 FLAG=6 ;FLAG REGISTER + 000007 T4=7 ;G.P. + 000010 IOS=10 ;IO STATUS BITS + 000011 T5=11 ;G.P. + 000012 T6=12 ; G.P. + 000013 AUXFLG=13 ;AUXILIARY FLAG REGISTER + 000014 T7=14 ;G.P. + 000015 DOUT=15 ;DIVIDED NO. FOR OUTPUT + 000016 DOUT1=16 ;REMAINDER, DOUT+1 + 000017 CALFLG=17 ;MORE FLAGS + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 6 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + ;MISCELLANEOUS PARAMETERS + + 400000 WRTLOK==400000 ;WRITE LOCK (DECTAPE) /IMPROPER I/O + 040000 BIGBLK==40000 ;BLOCK TOO LARGE + 000002 INBIT==2 ;DEVCHR BIT FOR DEV CAN DO INPUT + 000001 OUTBIT==1 ;DEVCHR BIT FOR DEV CAN DO OUTPUT + 020000 EOFBIT==20000 ;END OF FILE + 002000 EOTBIT==2000 ;END OF TAPE + 000004 DTABIT==4 ;DEVCHR BIT FOR DECTAPE IDENTIFICATION + 000001 INHIB==1 ;OUTPUT RELEASE INHIBIT BIT + 000010 TABSP==10 ;SPACES PER TAB + 000200 PTRBIT==200 ;DEVCHR BIT FOR PTR + 000400 PTPBIT==400 ;DEVCHR BIT FOR PTP + 200000 DSKBIT==200000 ;DEVCHR BIT FOR DSK + 000020 MTABIT==20 ;DEVCHR BIT FOR MTA + 040000 LPTBIT==40000 ;DEVCHR BIT FOR LPT + 000010 TTYBIT==10 ;DEVCHR BIT FOR TTY + 100000 CDRBIT==100000 ;DEVCHR FOR CDR + 000200 DENS2==200 ;MTA 200 BPI + 000400 DENS5==400 ;MTA 556 BPI + 000600 DENS8==600 ;MTA 800 BPI + 001000 PARE==1000 ;MTA EVEN PARITY + 004000 LDP==4000 ;MTA LOAD POINT STATUS + 000020 HPAGE==20 + + ;MACRO DEFINITIONS + + DEFINE SKIP (J)<JRST .+1+'J> + + DEFINE LSTLIN (Z),< + SKIPA T1,[POINT 7,Z] + PUSHJ P,PUT + ILDB CHR,T1 + IFN WCH,<PUSHJ P,CCASE> + JUMPN CHR,.-2> + + DEFINE ERRPNT (X),< + JSP T1,PTEXT + ASCIZ X> + + DEFINE ERRPN2 (X),< + JSP T1,PTEXT2 + ASCIZ X> + + DEFINE ERRPNX (X),< + JSP T1,PRETXT + ASCIZ X> + + + 000000' LOW: + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 7 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + ;ASCII CHARACTERS + + 000015 CR==15 ;CARRIAGE RETURN + 000012 LF==12 ;LINE FEED + 000014 FF==14 ;FORM-FEED + 000033 ALTMOD==33 ;NEWEST ALTMODE + 000175 ALT175==175 ;OLDEST ALTMODE + 000176 ALT176==176 ;OLDER ALTMODE + 000137 LA==137 ;LEFT ARROW + 000032 CZ==32 ;CONTROL Z + 000021 XON==21 ;^Q,START TTY PTR + 000023 XOFF==23 ;^S,STOP TTY PTR MODE + 000054 COMMA==54 + 000056 PERIOD==56 ;PERIOD + 000072 COLON==72 + 000040 SPACE==40 + 000177 DEL==177 ;DELETE,RUBOUT,REPEAT MOD.35 + 000011 TAB==11 ;TAB + + + ;CALLI DEFINITIONS + + OPDEF RESET [CALLI 0] + OPDEF DEVCHR [CALLI 4] + OPDEF CORE [CALLI 11] + OPDEF EXIT [CALLI 12] + OPDEF UTPCLR [CALLI 13] + OPDEF DATE [CALLI 14] + OPDEF MSTIME [CALLI 23] + OPDEF GETPPN [CALLI 24] + OPDEF PJOB [CALLI 30] + OPDEF RUN [CALLI 35] + OPDEF GETTAB [CALLI 41] + OPDEF TMPCOR [CALLI 44] + OPDEF DSKCHR [CALLI 45] + OPDEF JOBSTR [CALLI 47] + OPDEF DEVPPN [CALLI 55] + OPDEF WAIT [MTAPE 0] + + ;EXTENDED LOOKUP PARAMETERS + + 000005 RBSIZ==5 ;WRITTEN FILE LENGTH + 000017 RIBSTS==17 ;STATUS BITS + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 8 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + + 000000' 200000 004665' PIP1: MOVE 0,[LOW,,LOW+1] + 000001' 402000 000000' SETZM LOW + 000002' 251000 004665' BLT 0,LOWTOP + 000003' 205000 637163 MOVSI (SIXBIT /SYS/) + 000004' 047000 000055 DEVPPN ;FIND PP OF DEVICE SYS + 000005' 200000 003733' MOVE PP13 ;ASSUME 1,,3 IF NOT LEVELD + 000006' 202000 004037' MOVEM SYSPP ;SAVE AS SYS PP + IFN FTDSK,< + MOVE [XWD 17,11] ;STATES WORD + GETTAB ;GET IT + SETZ ;ERROR RETURN + TLNN (7B9) ;TEST FOR LEVEL D + TDZA ;NOT LEVEL D + HRROI -2 ;THIS IS LEVEL D + MOVEM LEVEL ;SAVE > + 000007' 554040 000000* IFE FTDSK,<HLRZ T1,JOBSA ;NO DSK SO USE JOBFF> + IFN FTDSK,<MOVEI T1,DSKDR ;ASSUME NO DISK FOR TEST, LOC OF DSK RTNS + MOVSI 0,(SIXBIT /DSK/) + DEVCHR ;DEVCHR REQUEST: IS THERE A DSK + JUMPE 0,P1 ;0 IF NO DISK: USE DSKDR + MOVE T1,JOBFF ;DISK: PREPARE TO SAVE C(JOBFF) + HRRZ T2,JOBREL ;HIGHEST REL LOC AVAILABLE TO USER + CAIL T2,6000 ;CURRENT SIZE 4K + JRST P1 ;YES + MOVEI T2,7777 ;NO. EXPAND TO 4K + HRRZM T1,SVJBFF ;SAVE JOBFF SO BUFFERS CAN BE CREATED + CORE T2, ;CORE UUO + JRST DERR7 ;CORE UNAVAILABLE> + 000010' 552040 004016' P1: HRRZM T1,SVJBFF ;SAVE JOBFF SO BUFFERS CAN BE CREATED + 000011' 254000 000012' JRST PIP + + IFN FTDSK,< + DERR7: ERRPNT </?4K needed/> + EXIT ;EXIT TO MONITOR> + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 9 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 000012' 047000 000000 PIP: RESET ;REINITIALIZE WHEN RESTARTED MANUALLY + ;NEW COMMAND STRING SCAN STARTS HERE + 000013' PIP2: + 000013' 265440 000541' PIP2A: JSP T5,INICN1 ;INITIALIZE THE TTY AND PDL + 000014' 201000 000015 MOVEI 0,CR ;TYPE CR + 000015' 136000 003757' IDPB 0,TFO+1 + 000016' 201000 000012 MOVEI 0,LF ;AND LF + 000017' 136000 003757' IDPB 0,TFO+1 + 000020' 201000 000052 MOVEI 0,"*" ;TYPE ASTERISK****** + 000021' 136000 003757' IDPB 0,TFO+1 ;READY TO ACCEPT + 000022' 067040 000000 OUTPUT CON, ;COMMAND FROM TTY + 000023' 402000 004026' PIP2B: SETZM TOTBRK ;CLEAR PAREN COUNTER + 000024' 201000 000010 MOVEI 0,TABSP ;SPACES PER TAB + 000025' 202000 004027' MOVEM 0,TABCT ;INITIALIZE TAB COUNT + 000026' 200000 003721' MOVE 0,ZRO ;ASCII /00000/ + 000027' 202000 004014' MOVEM 0,SQNUM ;INITIALIZE SEQUENCE NUMBERS + 000030' 071040 000000 RELEAS CON, ;RELEASE TTY FOR USE AS IN-OUT DEVICE + + 000031' 403300 004040' MAINA1: SETZB FLAG,FILNAM ;INITIALIZE FOR FIRST/NEXT COMMAND STRING + 000032' 403540 004637' SETZB AUXFLG,DEVICE + IFN FTDSK,<HRRZI 0,(SIXBIT /SYS/) ;SYSTEM DIRECT DEV, DSK/DTA + HRLZM 0,ADSK ;PUT IN SYSTEM DEVICE> + 000033' 200000 004666' MOVE 0,[XWD FILNAM,FILNAM+1] ;SET PROJECT, PROG NO. + 000034' 251000 004136' BLT 0,AB ;ZERO OUT FILNAM - AB + 000035' 400740 000000 SETZ CALFLG, ;CLEAR OTHER FLOGS + 000036' 200140 000055' MOVE T3,COMPTR ;BYTE POINTER FOR STORING CS IN BUFFER + + ;ACCUMULATE CS CHARS IN COMBUF ALLOW LONG CS ONLY FOR TTY COMMAND + + 000037' 260240 001352' COMSTO: PUSHJ P,GETTA ;GET CS CHAR + 000040' 350340 004131' AOS T4,COMCNT ;COUNT CHARS + 000041' 303340 000310 CAILE T4,^D200 ;ALLOW UP TO 200 CHARS + 000042' 254000 002045' JRST ERR6B ;MORE THAN 200 CHARS + 000043' 306000 000032 CAIN 0,CZ ;CHECK FOR ^Z + 000044' 260240 001415' COMASK: PUSHJ P,GETEN2 ;SET ^Z IN 0 + 000045' 136000 000003 IDPB 0,T3 ;STORE IN COMBUF + 000046' 332000 004057' SKIPE COMEOF ;END-OF-FILE SET? + 000047' 254000 000056' JRST COMPRO ;YES, PROCESS CS IN COMBUF + 000050' 307000 000015 CAIG 0,CR ;NOT EOF + 000051' 305000 000012 CAIGE 0,LF ;LF,VT,FF,CR? + 000052' 306000 000033 CAIN 0,ALTMODE ;NO, $? + 000053' 254000 000044' JRST COMASK ;YES + 000054' 254000 000037' JRST COMSTO ;NO, KEEP STORING + + 000055' 440700 004060' COMPTR: POINT 7,COMBUF + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 10 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + ;******************************************************************** + ;BEGIN SCAN OF DESTINATION PORTION OF COMMAND STRING + 000056' COMPRO: + IFN FTDSK,< + MOVSI 0,(SIXBIT/DSK/) + DEVCHR ;IS THERE A DSK? + JUMPE 0,COMPRP + MOVSI 0,(SIXBIT /DSK/) ;MAKE DEFAULT DEVICE + MOVEM 0,DEVICE ;TENTATIVELY DSK> + + 000056' 071040 000000 COMPRP: RELEASE CON, ;RELEASE TTY + 000057' 200000 000055' MOVE 0,COMPTR ;INITIALIZE POINTER + 000060' 202000 004132' MOVEM 0,COMPTS ;TO PICK UP CS FROM COMBUF + 000061' 260240 000557' PUSHJ P,NAME ;GO SCAN DESTINATION PORTION OF COMMAND STRING + 000062' 332000 004135' SKIPE XNAME ;NO SCAN OVERSHOOT ALLOWED + 000063' 254000 002040' JRST ERR6A + 000064' 331000 004134' SKIPL ESWTCH ;11/25/69 END OF CS ? + 000065' 254000 000073' JRST MAINC ;NO + 000066' 606740 000400 TRNN CALFLG,NSWTCH ;NON-NULL DESTINATION + 000067' 602740 001000 TRNE CALFLG,SSWTCH ;_ NOT SEEN? + 000070' 332000 004040' SKIPE FILNAM ;OR ANYTHING IN FILENAME + 000071' 254000 002040' JRST ERR6A ;YES, ERROR + 000072' 254000 000013' JRST PIP2 ;NO, ALL OK + + 000073' 200000 004637' MAINC: MOVE 0,DEVICE ;GET OUTPUT DEVICE NAME + 000074' 202000 004634' MOVEM 0,ODEV ;SAVE DEVICE NAME FOR LATER USAGE + 000075' 260240 000506' PUSHJ P,DEVTST ;SAVE DEVICE TYPE, SET XXXOUT.E.G. DTAOUT + 000076' 260240 000466' PUSHJ P,ABCHK ;CHECK MTA BACKSPACE/ADV VALUES + 000077' 260240 000476' PUSHJ P,PROTK ;CHECK PROTECTION + 000100' 200000 004136' MOVE 0,AB ;MTA VALUE SWITCHES + 000101' 202000 004031' MOVEM 0,ABOUT ;GET MTA CONTROL NUMBERS FO R OUT + 000102' 200000 004133' MOVE 0,AUX + 000103' 202000 004032' MOVEM 0,AUXOUT + 000104' 200000 004667' MOVE 0,[XWD FILNAM,DTON] + 000105' 251000 004047' BLT 0,DTON+3 ;SAVE DESTINATION FILE NAME + IFN FTDSK,<TRNN AUXFLG,DSKOUT ;DISK OUTPUT?> + 000106' 402000 004047' SETZM DTON+3 ;ZERO 4TH WD OF DIRECTORY ENTRY + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 11 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 000107' 620740 001000 M3: TRZ CALFLG,SSWTCH ;TERMINATE DESTINATION FILE SCAN + 000110' 402000 004637' SETZM DEVICE ;DONT CARRY OVER INPUT DEVICE + IFN FTDSK,<MOVSI 0,(SIXBIT/DSK/) + DEVCHR ;IS THERE A DISK + JUMPE 0,M3A + MOVSI 0,(SIXBIT /DSK/) ;DEFAULT CASE DSK + MOVEM 0,DEVICE ;MUST NOT LET O/DEV. CARRY OVER AS I/DEV.> + 000111' 260240 000451' M3A: PUSHJ P,DESCRP ;GET A UNIT DESCRIPTOR (INPUT). + 000112' 607540 000001 TLNN AUXFLG,QFLG;Q? ;SCAN INPUT PORTION OF COMMAND STRING + 000113' 254000 000132' JRST M2 ;NO + 000114' 551000 637163 HRRZI 0,(SIXBIT /SYS/) ;YES MAKE INPUT DEVICE SYS + 000115' 516000 004637' HRLZM 0,DEVICE + 000116' 516000 004050' HRLZM DEVA ;SAVE COPY OF INPUT DEVICE + 000117' 200000 003727' MOVE 0,QPIP ;MAKE INPUT FILENAME QPIP + 000120' 202000 004040' MOVEM 0,FILNAM + 000121' 205000 120000 MOVSI 0,(SIXBIT /*/) ;DONT RESTRICT QPIP + 000122' 202000 004041' MOVEM 0,FILEX ;EXT TO BEING NULL + 000123' 620740 000002 TRZ CALFLG,MATEX ;DON'T MATCH EXTENSIONS + 000124' 660540 000002 TRO AUXFLG,SYSFLG ;DEVICE IS SYS + 000125' 200000 004037' MOVE 0,SYSPP ;GET SYS PP + 000126' 202000 004043' MOVEM 0,PP ;AND SET IT + 000127' 370000 004134' SOS ESWTCH ;NO MORE COMMAND STRING + 000130' 620540 261500 TRZ AUXFLG,DTAIN+DSKIN+CDRIN+PPTIN+TTYIN+MTAIN + 000131' 260240 002132' PUSHJ P,CHECK1 ;CHECK INPUT DEVICE + + 000132' 661540 000020 M2: TLO AUXFLG,NOMORE ;NO MORE SWITCHES BUT MTA ALLOWED + 000133' 603300 000001 TLNE FLAG,OFLG ;BLOCK 0 COPY? + 000134' 254000 003451' JRST BLOCK0 ;YES + 000135' 640300 002100 TRC FLAG,XFLG+RFLG;(RX) + 000136' 646300 002100 TRCN FLAG,XFLG+RFLG + 000137' 260240 000173' PUSHJ P,M5 ;YES,(RX) + IFN RIMSW,< + TLNN FLAG,RIMFLG ;RIM OUTPUT? + JRST M1 ;NO + IFE WCH,< + TRNE AUXFLG,PPTOUT ;RIM IS ONLY DTA TO PTP + TRNN AUXFLG,DTAIN!DSKIN!MTAIN + JRST ERR5B> + IFN WCH,<JRST RIMTB >> + + 000140' 201340 000001 M1: MOVEI T4,1 ;ASCII LINE MODE ASSUMED + 000141' 260240 000200' PUSHJ P,OUTLOOK ;SEE IF OUTPUT DEV MTA + 000142' 260240 000154' PUSHJ P,M4 ;NOT MTA + 000143' 603300 001000 TLNE FLAG,JFLG ;NON STARDARD MODE ? + 000144' 660340 000100 TRO T4,100 ;TO PUNCH 029 ON CDP + 000145' 552340 004633' HRRZM T4,OMOD ;SET MODE OF OUTPUT DEV + 000146' 201340 000001 MOVEI T4,1 + 000147' 260240 000204' PUSHJ P,INLOOK ;SEE IF INPUT DEV MTA + 000150' 260240 000154' PUSHJ P,M4 ;NOT MTA + 000151' 552340 004636' HRRZM T4,ININI1 ;SET MODE OF INPUT DEV + 000152' 260240 002746' PUSHJ P,FNSET ;NOW DEVICE, DEVA CORRECT FOR START + 000153' 254000 000251' JRST OMOD1 ;INIT OUTPUT DEVICE + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 12 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + ;SET MODE IF /I,/B,/H, + + 000154' 607300 000100 M4: TLNN FLAG,IFLG ;IMAGE BINARY MODE? + 000155' 254000 000160' JRST .+3 ;NO + 000156' 660340 000010 TRO T4,10 ;IM. MODE + 000157' 620340 000001 TRZ T4,1 ;CLEAR ASCII LINE MODE + + 000160' 606300 000002 TRNN FLAG,BMOD ;BINARY MODE? + 000161' 254000 000164' JRST .+3 ;NO + 000162' 660340 000014 TRO T4,14 ;BIN. MODE + 000163' 620340 000001 TRZ T4,1 ;CLEAR ASCII LINE MODE + + 000164' 603300 000400 TLNE FLAG,IBFLG ;ASCII TO START. IB MODE? + 000165' 660340 000013 TRO T4,13 ;YES + 000166' 602300 002000 TRNE FLAG,XFLG ;COPY MODE? + 000167' 263240 000000 POPJ P, ;YES, DON'T ALTER DATA MODE + + 000170' 602300 000110 TRNE FLAG,DFLG+RFLG ;DELETE OR RENAME? + 000171' 660340 000020 TRO T4,20 ;DIRECTORY WILL BE WRITTEN, DON'T + 000172' 263240 000000 POPJ P, ;COMPUTE WORD COUNT MODE NEEDED. + ;FORCE MONITOR TO USE WORD COUNT + ;IN FIRST DATA WORD OF BUFFER + + 000173' 620300 000100 M5: TRZ FLAG,RFLG ;CLEAR /R FLAG + 000174' 660740 020000 TRO CALFLG,RXFLG ;SET (RX) FLAG + 000175' 200000 004670' MOVE 0,[XWD DTON,MATCH] + 000176' 251000 004650' BLT 0,MATCH+1 ;SAVE NAME AND EXT + 000177' 263240 000000 POPJ P, ;RETURN + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 13 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;IF OUTPUT DEVICE IS MTA PERFORM ALL PRE-TRANSFER REQUESTS + ;SUCH AS REWIND. IF OUTPUT DEVICE IS MTA, AND THERE IS NO + ;INPUT DEVICE, EXIT. FOR OTHER MTA OUTPUT, PREPARE INIT + ;DENSITY AND PARITY. + + 000200' OUTLOOK: + 000200' 200140 004031' MOVE T3,ABOUT ;AB FOR OUTPUT DEV + 000201' 200040 004032' MOVE T1,AUXOUT ;AUX FOR OUTPUT DEV + 000202' 201500 003666' MOVEI T6,INOMTA ;SET TO INIT + 000203' 254000 003531' JRST MT1 ;MTA FOR OUTPUT + + + + + ;SAME FOR INPUT DEVICE. + + 000204' 332140 004040' INLOOK: SKIPE T3,FILNAM ;IF NO FILENAME + 000205' 606300 002000 TRNN FLAG,XFLG ;OR NOT /X + 000206' 254000 000217' JRST INLUK1 ;CONTINUE + 000207' 332000 004044' SKIPE DTON ;IF OUTPUT NAME SET UP + 000210' 254000 000217' JRST INLUK1 ;CONTINUE + 000211' 554040 004041' HLRZ T1,FILEX ;GET EXT + 000212' 302040 120000 CAIE T1,(SIXBIT /*/) ;IF EITHER IS * + 000213' 316140 003730' CAMN T3,STAR ;DON'T SET OUTNAME + 000214' 254000 000217' JRST INLUK1 ;BUT JUST CONTINUE + 000215' 202140 004044' MOVEM T3,DTON ;SET OUT NAME + 000216' 516040 004045' HRLZM T1,DTON+1 ;AND EXTENSION + 000217' 200140 004136' INLUK1: MOVE T3,AB ;ADV OR BKSPACE + 000220' 200040 004133' MOVE T1,AUX ;AUX FOR INPUT DEV + 000221' 201500 003667' MOVEI T6,INIMTA ;SET TO INIT + 000222' 254000 003531' JRST MT1 ;MTA FOR INPUT + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 14 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;ROUTINE TO INITIALIZE OUTPUT DEVICE + + 000223' 200040 004671' OMODE: MOVE T1,[XWD OBF,IBF] + 000224' 202040 004635' MOVEM T1,ODEV+1 + 000225' 200040 004015' MOVE T1,DTJBFF ;JOBFF AFTER 2 TTY BUFS + 000226' 202040 000000* MOVEM T1,JOBFF ;SET UP + + 000227' 050100 004633' OPEN OUT,OMOD ;INITIALIZE OUTPUT DEVICE + 000230' 254000 001767' JRST ERR1 ;UNAVAILABLE ERROR + 000231' 065100 000001 OUTBUF OUT,1 ;TRY ONE OUTBUFFER FOR SIZE + 000232' 250040 000226* EXCH T1,JOBFF ;JOBFF_DTJBFF+BUFSZ + ;NOTE JOBFF RESET TO DTJBFF + 000233' 274040 004015' SUB T1,DTJBFF ;T1=BUFSZ + 000234' 550000 000000* HRRZ 0,JOBREL ;HIGHEST CORE AVAILABLE + 000235' 274000 004015' SUB 0,DTJBFF ;0=TOTAL CORE AVAILABLE + 000236' 240000 777777 ASH 0,-1 ;COMPUTE HOW MANY OUTPUT BUFFERS + 000237' 232000 000001 IDIVM 0,T1 ;FIT IN HALF THE AVAILABLE SPACE + 000240' 201340 000223' MOVEI T4,OMODE ;SET RETURN FROM MORCOR + 000241' 305040 000001 CAIGE T1,1 ;1 OR MORE THAN 1 FIT? + 000242' 254000 000262' JRST MORCOR ;NO, NEED MORE CORE + 000243' 065101 000000 OUTBUF OUT,(T1) ;SET UP OUTPUT BUFFERS + 000244' 200000 003746' MOVE 0,OBF+1 + 000245' 202000 003741' MOVEM 0,SVOBF ;SAVE ORIGINAL MODE SETTING + 000246' 200000 000232* MOVE 0,JOBFF + 000247' 552000 004017' HRRZM 0,SVJBF1 ;PREPARE TO RECLAIM INBUFFER SPACE + 000250' 263240 000000 POPJ P, + + 000251' 260240 000223' OMOD1: PUSHJ P,OMODE ;GO INITIALIZE OUTPUT DEVICE + 000252' 626300 004000 TRZN FLAG,ZFLG ;Z COMMAND TYPED? + 000253' 254000 000275' JRST MAINA2 ;NO, + 000254' 260240 002212' PUSHJ P,DTCLR ;YES, GO CLEAR DIRECTORY + 000255' 071100 000000 RELEASE OUT, + 000256' 071240 000000 RELEASE DIR, + 000257' 606740 000400 TRNN CALFLG,NSWTCH ;SEE IF DEVICE WAS TYPED + 000260' 254000 000251' JRST OMOD1 ;YES + 000261' 254000 000013' JRST PIP2 ;GET NEXT COMMAND + + 000262' 550000 000234* MORCOR: HRRZ 0,JOBREL ;TRY TO GET + 000263' 271000 002000 ADDI 0,2000 ;1K MORE OF CORE + 000264' 047000 000011 CORE ;ASK MONITOR FOR 1K CORE + 000265' 254000 000267' JRST OMODER ;NOT AVAILABLE + 000266' 254007 000000 JRST (T4) ;GOT IT + + 000267' 265040 002155' OMODER: ERRPNT</?Not enough core/> + 000270' 376355 772100 + 000271' 627355 772716 + 000272' 641014 367744 + 000273' 624000 000000 + 000274' 047000 000012 EXIT + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 15 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;MAIN LOOP TO PROCESS INPUT SIDE OF CS + + + 000275' 602300 000110 MAINA2: TRNE FLAG,RFLG+DFLG ;RENAME OR DELETE FILE MODE? + 000276' 254000 002432' JRST DTDELE ;YES./D,/X,OR(DX) + IFN RIMSW,< + TLNE FLAG,RIMFLG ;RIM? + JRST RIMTB ;YES./Y + > + 000277' 602300 002000 TRNE FLAG,XFLG ;TRANSFER EVERYTHING MODE? + 000300' 254000 002220' JRST PRECOP ;YES./X + ;LOOP TO COPY ALL FILES BEGINS HERE FROM MAIN2 + 000301' 606540 000020 MAINA3: TRNN AUXFLG,FFLG ;LIST DSK DIR SHORT? + 000302' 602300 000020 TRNE FLAG,LFLG ;LIST DIRECTORY? + 000303' 254000 003017' JRST DTPDIR ;YES./F OR /L + 000304' 260240 000426' PUSHJ P,ININIT ;INITIALIZE INPUT FILE + 000305' 602540 020000 TRNE AUXFLG,DTAIN ;DEC TAPE INPUT? + 000306' 260240 002701' PUSHJ P,DTADIR ;INIT DTA DIR + + IFN FTDSK,<TRNE AUXFLG,DSKIN ;NO, DISK INPUT? + PUSHJ P,DSKDIR ;OR DSK> + 000307' 260240 002566' MAINA4: PUSHJ P,LOOK ;GET A FILE TO COPY + 000310' 254000 000323' JRST MAINA5 ;NO MORE + 000311' 076140 004052' LOOKUP IN,ZRF + 000312' 254000 002003' JRST ERR3 ;LOOKUP FAILURE + IFN WCH,< + MAINA6: TRNN AUXFLG,DTAIN+DTAOUT + JRST .+5 + HLRZ 0,ZRF+1 + CAIE 0,(SIXBIT /DMP/) + IFN DISK30,<CAIN 0,(SIXBIT/SVE/)> + IFE DISK30,<CAIN 0,(SIXBIT/SAV/)> + JRST MAINA4 ;DONT COPY DMP OR SAV FILES ON DTA> + 000313' 661300 000020 TLO FLAG,NEWFIL + 000314' 260240 003353' PUSHJ P,FILTYP + 000315' 602540 000040 TRNE AUXFLG,ONEOUT + 000316' 254000 000333' JRST PSCANA ;OUT HAS BEEN INITIALIZED + IFE WCH,< + 000317' 260240 002412' PUSHJ P,OKBLKS> + 000320' 077100 004044' ENTER OUT,DTON ;CREATE OUTPUT FILE + 000321' 254000 002024' JRST ERR4 ;DIR. FULL OR 0 FILE NAME + 000322' 254000 000333' JRST PSCANA + + 000323' 626540 000001 MAINA5: TRZN AUXFLG,REDFLG + 000324' 254000 001107' JRST IOERRN ;NEVER READ A FILE + 000325' 254000 000411' JRST MAIN1 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 16 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 000326' 602540 201500 PSCANB: TRNE AUXFLG,MTAIN!CDRIN!TTYIN!PPTIN ;ON NON-DIR DEVICE? + 000327' 620740 000037 TRZ CALFLG,ALLCLF ;END OF THE ONE OR MANY FILES SPECIFIED + 000330' 666540 000040 TRON AUXFLG,ONEOUT ;HAS OUT JUST BEEN INIT? + 000331' 067100 000000 OUTPUT OUT, ;YES, AND FIRST FILE IS EOF ONLY, INIT OUT IN + ;CASE NO MORE SOURCE FILES + 000332' 254000 000407' JRST PSCAN5 ;EMPTY FILE, CLOSE INPUT, RETURN FOR MORE + + 000333' 660540 000001 PSCANA: TRO AUXFLG,REDFLG ;SET FLAG FOR INPUT FILE READ + 000334' 260240 001616' PUSHJ P,INP ;GO READ INPUT FILE + 000335' 620540 002000 TRZ AUXFLG,READ1 + 000336' 260240 002376' PUSHJ P,TTYZ ;CHECK IF INPUT IS TTY + 000337' 602400 020000 TRNE IOS,EOFBIT ;EOF FIRST DATA? + 000340' 254000 000326' JRST PSCANB + 000341' 336000 003744' SKIPN IBF+2 + 000342' 254000 000333' JRST PSCANA + + 000343' 660540 000040 PSCAN: TRO AUXFLG,ONEOUT ;INDICATE ONE OUTPUT FILE INITED + 000344' 200000 003723' MOVE 0,OPTRA ;PRESCAN A LINE, INITIALIZE LINE BUFFER PTR + 000345' 202000 004020' MOVEM 0,OPTR + 000346' 402000 004035' SETZM CDRCNT + 000347' 260240 000553' PUSHJ P,CLRBUF ;CLEAR LINE BUFFER + 000350' 664300 000400 TROA FLAG,STS ;START A FRESH LINE + 000351' 260240 000756' PSCAN3: PUSHJ P,PUT ;HERE FOR BINARY DATA + + 000352' 260240 001462' PSCAN2: PUSHJ P,GET ;GET CHARACTER + 000353' 254000 000376' JRST PSCAN1 ;END OF FILE RETURN + 000354' 616300 004672' TDNN FLAG,[XWD IFLG+IBFLG,BMOD] ;BIN. OR NO CHAR. PROCESSING + 000355' 603540 000004 TLNE AUXFLG,SBIN + 000356' 254000 000351' JRST PSCAN3 ;YES + 000357' 200040 004020' MOVE T1,OPTR + 000360' 306200 000177 CAIN CHR,DEL ;VJC 4/16/69 + 000361' 254000 000352' JRST PSCAN2 ; STR# 10-2615 + 000362' 316040 003722' CAMN T1,OPTMAX ;CHECK LENGTH OF LINE + 000363' 254000 001751' JRST ERR10 ;LINE TOO LONG + 000364' 136200 004020' IDPB CHR,OPTR ;DEPOSIT CHAR. IN LINE BUFFER + 000365' 307200 000024 CAIG CHR,24 + 000366' 305200 000020 CAIGE CHR,20 ;LINE PRINTERR CONTROL CHAR + 000367' 254000 000371' SKIP 1 ;NO + 000370' 254000 000374' JRST PSCAN4 ;YES, TREAT AS END OF LINE + 000371' 307200 000014 CAIG CHR,14 + 000372' 305200 000012 CAIGE CHR,12 ;END OF LINE CHARACTER? + 000373' 254000 000352' JRST PSCAN2 ;NO, SO CONTINUE + 000374' 260240 000707' PSCAN4: PUSHJ P,OUTLBF ;YES, SO DUMP THE LINE BUFFER + 000375' 254000 000343' JRST PSCAN ;SCAN THE NEXT LINE + + 000376' 135200 004020' PSCAN1: LDB CHR,OPTR ;PICK UP LAST CHAR. + 000377' 306200 000032 CAIN CHR,CZ ;IS IT ^Z + 000400' 606540 001000 TRNN AUXFLG,TTYIN ;FROM TTY? + 000401' 254000 000404' JRST PSCAN6 ;NO + 000402' 400200 000000 SETZ CHR, ;YES,CLEAR CHAR. + 000403' 137200 004020' DPB CHR,OPTR ;AND REMOVE FROM BUFFER + 000404' 260240 000707' PSCAN6: PUSHJ P,OUTLBF ;DUMP THE REMAINING BUFFER + 000405' 602300 002000 TRNE FLAG,XFLG ;COPY MODE? + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 16-1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 000406' 254000 002311' JRST COPY2A ;YES, GO COPY THE NEXT FILE + 000407' 070140 000000 PSCAN5: CLOSE IN, + 000410' 254000 000307' JRST MAINA4 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 17 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;COME HERE AFTER /L,/D,/R ON DISK OR THROUGH COPYING + + 000411' 071240 000000 MAIN1: RELEAS DIR, ;RELEASE THE DIRECTORY DEVICE + 000412' 071140 000001 RELEAS IN,INHIB ;RELEASE THE INPUT DEVICE + 000413' 331340 004134' SKIPL T4,ESWTCH ;MORE COMMAND STRING TO PROCESS? + 000414' 254000 000421' JRST MAIN2 ;YES + + ;COME HERE AFTER /D,/R ON DTA. ALSO FROM ABOVE + + 000415' 070100 000000 MAINB: CLOSE OUT, ;CLOSE THE OUTPUT FILE + 000416' 260240 000764' PUSHJ P,OUTP1 ;CHECK THE FINAL ERROR BITS + IFN FTDSK,<TLNE AUXFLG,NSPROT ;NON-ST. PROT? + TRNN AUXFLG,DSKOUT+DTAOUT ;DISK OUT/ OR DTA + JRST MAINB1 ;NO + LDB 0,PRPTL + DPB 0,PRPTD + RENAME OUT,DTON ;SET UP RENAME REQUEST + JRST DERR6 ;DISK ERROR + MAINB1:> + 000417' 071100 000000 RELEAS OUT, ;RELEASE THE OUTPUT DEVICE + 000420' 254000 000013' JRST PIP2 ;PROCESS THE NEXT COMMAND + + 000421' 260240 000451' MAIN2: PUSHJ P,DESCRP ;GET THE NEXT INPUT FILE TO PROCESS + 000422' 260240 000204' PUSHJ P,INLOOK + 000423' 260240 000154' PUSHJ P,M4 + 000424' 552340 004636' HRRZM T4,ININI1 + 000425' 254000 000301' JRST MAINA3 + ;END OF LOOP BEGINNING AT MAINA3 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 18 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;SUBROUTINE TO INITIALIZE THE INPUT FILE + + 000426' 200040 004017' ININIT: MOVE T1,SVJBF1 ;SVJBF1=END OF OUTPUT BUFFERS + + 000427' 202040 000246* MOVEM T1,JOBFF ;COMPARE OMODE CODE + 000430' 201000 003742' MOVEI 0,IBF + 000431' 202000 004640' MOVEM 0,DEVICE+1 + 000432' 050140 004636' OPEN IN,ININI1 + 000433' 254000 001770' JRST ERR1A ;NOT AVAILABLE ERROR + 000434' 064140 000001 INBUF IN,1 ;TRY ONE INPUT BUFFER FOR SIZE + 000435' 250040 000427* EXCH T1,JOBFF ;HOW MANY INBUFFERS WILL FIT? + 000436' 274040 004017' SUB T1,SVJBF1 + 000437' 550000 000262* HRRZ 0,JOBREL + 000440' 274000 000435* SUB 0,JOBFF ;JOBREL-SVJBF1=TOTAL SPACE LEFT + 000441' 232000 000001 IDIVM 0,T1 + 000442' 201340 000426' MOVEI T4,ININIT ;RETURN FROM MORCOR IS ININIT + 000443' 305040 000001 CAIGE T1,1 ;1 OR MORE THAN 1 FITS? + 000444' 254000 000262' JRST MORCOR ;NO, GET MORE CORE + 000445' 064141 000000 INBUF IN,(T1) ;SET UP AS MANY BUFFS AS FIT + 000446' 200000 003743' MOVE 0,IBF+1 ;SAVE ORIGINAL MODE + 000447' 202000 003740' MOVEM 0,SVIBF + 000450' 263240 000000 POPJ P, + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 19 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;THIS ROUTINE GETS AN INPUT UNIT DESCRIPTOR AND, FOR + ;ADVANCE FILE AND BSPF ON MTA, ENSURES THE VALUE 1 IF NO + ;NUMBER WAS GIVEN. + + 000451' 402000 004133' DESCRP: SETZM AUX ;WILL GET ANY MTA REQ. GOING TO AUXFLG. + 000452' 622540 000002 TRZE AUXFLG,SYSFLG ;IS THIS DEVICE SYS.? + 000453' 660540 000004 TRO AUXFLG,SYSLST ;YES,SET SYS AS LAST DEVICE + 000454' 402000 004136' SETZM AB ;MTA VALUE SWITCHES + 000455' 402000 004042' SETZM PR ;PROTECTION + 000456' 402000 004043' SETZM PP ;PROJ-PROG NUMBER + ;******************************************************************** + 000457' 260240 000557' PUSHJ P,NAME ;GO SCAN INPUT SIDE OF COMMAND STRING + 000460' 200040 004042' MOVE T1,PR ;PROTECTION + 000461' 512040 004042' HLLZM T1,PR ;IGNORE PR FLAG IN RHS FOR INPUT + 000462' 620540 261500 TRZ AUXFLG,DTAIN+DSKIN+PPTIN+MTAIN+CDRIN+TTYIN + 000463' 260240 002132' PUSHJ P,CHECK1 ;CHECK UNIT, AND FOR _ + + IFN FTDSK,<TRNN AUXFLG,DSKIN ;DSK INPUT? + JRST DESCR1 ;NO + TRNE AUXFLG,SYSFLG ;IS THIS DEVICE SYS? + JRST DESCR1 ;YES + TRNN AUXFLG,SYSLST ;WAS LAST DEVICE? + JRST DESCR1 ;NO + MOVE T2,FNPPNS ;YES, SAVE LAST [P,P] + SKIPE PP ;[P,P] ZERO? + JRST DESCR1 + MOVEM T2,PP ;YES, MAKE OLD [P,P] CURRENT [P,P] + MOVEM T2,FNPPN ;RESERVE [P,P]> + 000464' 332000 004135' DESCR1: SKIPE XNAME ;NO OVERSHOOT ALLOWED + 000465' 254000 002040' JRST ERR6A + + 000466' 554100 004136' ABCHK: HLRZ T2,AB ;NO RECS/FILES TO BACKSPACE + 000467' 326100 000471' JUMPN T2,.+2 ;IF 0 + 000470' 201100 000001 MOVEI T2,1 ;GUARANTEE ONE + 000471' 506100 004136' HRLM T2,AB ;SET AB LH + + 000472' 550100 004136' HRRZ T2,AB ;NO RECS/FILES TO ADV + 000473' 326100 002746' JUMPN T2,FNSET ;IF 0 + 000474' 350000 004136' AOS AB ;GUARANTEE 1 + 000475' 254000 002746' JRST FNSET ;FIND OUT DETAILS OF FILENAME + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 20 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + ;IF A NON-STANDARD OUTPUT PROTECTION IS REQUESTED, SAVE FOR RENAME. + + 000476' 200040 004042' PROTK: MOVE T1,PR + 000477' 606040 000001 TRNN T1,1 + 000500' 254000 000504' JRST PROTK1 + 000501' 512040 004033' HLLZM T1,PROTS + 000502' 512040 004042' HLLZM T1,PR + 000503' 665540 000002 TLOA AUXFLG,NSPROT + 000504' 403040 004042' PROTK1: SETZB T1,PR + 000505' 263240 000000 POPJ P, + + ;TEST "DEVICE" TO SEE IF DESTINATION DEVICE IS DTA, DSK, PTP, LPT, TTY, MTA + ;IF ANY IS TRUE, SET RELEVANT BIT IN AUXFLG. "0" CONTAINS + ;"DEVICE" ON ENTRY. + + 000506' 047000 000004 DEVTST: DEVCHR ;GET DEVICE CHARACTERISTICS + IFN FTDSK,<TLNN 0,DSKBIT ;IS OUTPUT DEV DSK? + JRST DEVTSU ;NO + TRO AUXFLG,DSKOUT ;YES, SET BIT + PUSH P,DEVICE ;SAVE DEVICE NAME + POP P,ADSK ;PUT NAME IN DSK INIT + POPJ P, + DEVTSU:> + 000507' 322000 000525' JUMPE 0,DEVER2 ;NON-EXISTENT DEVICE + 000510' 607000 000001 TLNN 0,OUTBIT ;CAN DEV DO OUTPUT? + 000511' 254000 002040' JRST ERR6A ;NO + + 000512' 603000 000004 TLNE 0,DTABIT ;DECTAPE? + 000513' 660540 004000 TRO AUXFLG,DTAOUT ;YES + + 000514' 603000 000400 TLNE 0,PTPBIT ;PAPER TAPE PUNCH? + 000515' 660540 400000 TRO AUXFLG,PPTOUT + + 000516' 603000 040000 TLNE 0,LPTBIT ;LINE PRINTER? + 000517' 660540 000010 TRO AUXFLG,LPTOUT + + 000520' 603000 000010 TLNE 0,TTYBIT ;TELETYPE? + 000521' 660540 100000 TRO AUXFLG,TTYOUT + + 000522' 603000 000020 TLNE 0,MTABIT ;MAGTAPE? + 000523' 660540 000200 TRO AUXFLG,MTAOUT + + 000524' 263240 000000 POPJ P, + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 21 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + ;ROUTINE TO CHECK IF DEVICE SYS AND SET [P,P], IF NONE GIVEN + + IFN FTDSK,< + PSYSP: CAME 0,[SIXBIT /SYS/];IS DEVICE SYS? + POPJ P, ;NO + MOVE T1,SYSPP ;GET SYS PP + MOVEM T1,PP ;AND SET IT + TRO AUXFLG,SYSFLG ;SET FLAG TO INDICATE + POPJ P, ;CURRENT INPUT DEVICE IS SYS> + + 000525' DEVER1: + 000525' 200040 004637' DEVER2: MOVE T1,DEVICE + 000526' 202040 004641' DEVER: MOVEM T1,DEVERR + 000527' 265040 002155' ERRPNT </?Device /> + 000530' 376114 573322 + 000531' 617124 000000 + 000532' 260240 002201' PUSHJ P,P6BIT + 000533' 000000 004641' DEVERR + 000534' 265040 002166' ERRPN2 </does not exist!/> + 000535' 623374 571500 + 000536' 673376 420312 + 000537' 743236 372102 + 000540' 000000 000000 + ;ROUTINE TO INIT PDL POINTER AND TTY + + 000541' 201240 004153' INICN1: MOVEI P,PDL-1 ;INITIALIZE PUSHDOWN POINTER + 000542' 200000 004016' INICN2: MOVE 0,SVJBFF ;IS INITIALIZED AT PIP1 + 000543' 202000 000440* MOVEM 0,JOBFF ;SET JOBFF TO BEGINNING OF BUFFER AREA + 000544' 260240 001410' PUSHJ P,INICON ;INITIALIZE THE TTY + 000545' 064040 000001 INBUF CON,1 ;ONE INBUFFER + 000546' 065040 000001 OUTBUF CON,1 ;ONE OUTBUFFER + 000547' 200000 000543* MOVE 0,JOBFF + 000550' 552000 004015' HRRZM 0,DTJBFF ;JOBFF AFTER 2 TTY BUFFERS SET + 000551' 067040 000000 OUTPUT CON, ;INITIALIZE BUFFER POINTERS + 000552' 254011 000000 JRST (T5) + + ;ROUTINE TO CLEAR LINE BUFFER + + 000553' 402000 004174' CLRBUF: SETZM LBUF ;SUBR. TO CLEAR LINE BUFFER + 000554' 200000 004673' MOVE 0,[XWD LBUF,LBUF+1] + 000555' 251000 004377' BLT 0,LBUFE + 000556' 263240 000000 POPJ P, + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 22 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;COMMAND SCANNER ROUTINE + + 000557' 606740 001000 NAME: TRNN CALFLG,SSWTCH ;RETURN NULL IF _ OR END-OF-LINE SEEN + 000560' 335000 004134' SKIPGE ESWTCH + 000561' 254000 000666' JRST NM13 ; + 000562' 620740 000400 TRZ CALFLG,NSWTCH + 000563' 332040 004135' SKIPE T1,XNAME ;IF COMMAND SCAN OVERSHOOT PICKED UP + ;DEVICE NAME, USE IT NOW + 000564' 254000 000640' JRST NM7 + 000565' 620740 000100 TRZ CALFLG,DEV + ;LOOK FOR FILE NAME, EXT + 000566' 402000 004041' NM1: SETZM FILEX + 000567' 402000 004040' NM2: SETZM FILNAM + 000570' 200040 000672' MOVE T1,NM15 + ;LOOP TO PICK OFF FILENAME, EXT + 000571' 260240 001175' NM3: PUSHJ P,GETCOM ;GO GET 7 BIT ASCII CHAR. FROM COMMAND STRING + 000572' 302000 000052 CAIE 0,"*" ;TO ALLOW FN.EX = *.* + 000573' 301000 000101 CAIL 0,"A" ;ALPHABETIC CHARACTER? + 000574' 303000 000132 CAILE 0,"Z" + 000575' 254000 000602' JRST NM4A ;NO + 000576' 275000 000040 NM4: SUBI 0,40 ;CONVERT TO SIXBIT + 000577' 603040 770000 TLNE T1,770000 ;6 CHARS. YET? + 000600' 136000 000001 IDPB 0,T1 ;NO + 000601' 254000 000571' JRST NM3 ;GET NEXT CHAR. + 000602' 301000 000060 NM4A: CAIL 0,"0" ;NUMERIC? + 000603' 303000 000071 CAILE 0,"9" + 000604' 254000 000606' JRST NM5 ;NO + 000605' 254000 000576' JRST NM4 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 23 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;CHARACTER NOT *,0-9,A-Z + 000606' 307000 000015 NM5: CAIG 0,CR ;CARRIAGE RETURN + 000607' 305000 000012 CAIGE 0,LF ;LINE FEED + 000610' 306000 000033 CAIN 0,ALTMOD ;ALTMODE + 000611' 254000 000613' JRST NM5A ;YES + 000612' 306000 000032 CAIN 0,CZ ;END-OF-FILE(CCL)? + 000613' 374000 004134' NM5A: SOSA ESWTCH ;YES, OR EOF + 000614' 306000 000054 CAIN 0,COMMA ;COMMA + 000615' 254000 000633' JRST NM6 ;YES + 000616' 306000 000056 CAIN 0,PERIOD ;PERIOD + 000617' 254000 000654' JRST NM10 ;YES + 000620' 306000 000072 CAIN 0,COLON ;COLON + 000621' 254000 000646' JRST NM9 ;YES + 000622' 306000 000073 CAIN 0,";" ;IS THE REST A COMMENT? + 000623' 254000 000700' JRST NM16 ;YES + 000624' 306000 000003 CAIN 0,"C"-100 ;^C + 000625' 047000 000012 EXIT ;IN CASE JACCT ON ??? + 000626' 302000 000137 CAIE 0,LA ;LEFT ARROW + 000627' 254000 000673' JRST NM5B ;NO + 000630' 660740 001000 TRO CALFLG,SSWTCH ;SET LEFT ARROW SWITCH + 000631' 602740 000100 TRNE CALFLG,DEV ;HAS A DEVICE BEEN SEEN? + 000632' 660740 000200 TRO CALFLG,DVSWTH ;YES-NEEDED FOR /Z/,/D + + 000633' 336040 004041' NM6: SKIPN T1,FILEX ;COMMA ROUTINE - FIGURE OUT WHAT WE HAVE + 000634' 254000 000661' JRST NM11 ;NO FILE NAME TEMPORARILY IN FILEX + 000635' 250040 004040' EXCH T1,FILNAM ;PUT THE FILE NAME WHERE IT BELONGS + 000636' 512040 004041' HLLZM T1,FILEX ;PUT THE EXTENSION WHERE IT BELONGS + 000637' 263240 000000 POPJ P, + + 000640' 402000 004135' NM7: SETZM XNAME ;USE XNAME ONLY ONCE + 000641' 306040 000001 CAIN T1,1 ;1 FLAGS A NULL OVERSHOOT + 000642' 254000 000666' JRST NM13 ;RETURN NULL NAME + 000643' 202040 004637' NM8: MOVEM T1,DEVICE ;NEW DEVICE + 000644' 660740 000100 TRO CALFLG,DEV + 000645' 254000 000566' JRST NM1 ;LOOK FOR A FILE NAME AND EXTENSION + + 000646' 606740 000100 NM9: TRNN CALFLG,DEV ;COLON ROUTINE - IS DEVICE NAME IN YET? + 000647' 254000 000664' JRST NM12 ;NO + 000650' 336040 004040' SKIPN T1,FILNAM ;SCAN OVERSHOOT - NULL OVERSHOOT? + 000651' 201040 000001 MOVEI T1,1 ;YES - FLAG NULL OVERSHOOT WITH A 1 + 000652' 202040 004135' MOVEM T1,XNAME ;XNAME = OVERSHOOT NAME + 000653' 254000 000670' JRST NM14 + 000654' 332000 004041' NM10: SKIPE FILEX + 000655' 254000 002040' JRST ERR6 + 000656' 200000 004040' MOVE 0,FILNAM ;PERIOD ROUTINE - SAVE FILE NAME + 000657' 202000 004041' MOVEM 0,FILEX ;TEMPORARILY IN FILEX + 000660' 254000 000567' JRST NM2 ;LOOK FOR EXTENSION + 000661' 336000 004040' NM11: SKIPN FILNAM ;WAS A FILE NAME SPECIFIED? + 000662' 602740 000100 TRNE CALFLG,DEV ;WAS ANYTHING SPECIFIED? + 000663' 263240 000000 POPJ P, ;YES + 000664' 332040 004040' NM12: SKIPE T1,FILNAM ;NULL NAME SPECIFIED? + 000665' 254000 000643' JRST NM8 ;NO - SO REMEMBER AND LOOK FOR FILE NAME + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 23-1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 000666' 660740 000400 NM13: TRO CALFLG,NSWTCH ;RETURN A NULL NAME + 000667' 402000 004041' SETZM FILEX + 000670' 402000 004040' NM14: SETZM FILNAM + 000671' 263240 000000 POPJ P, + + 000672' 440600 004040' NM15: POINT 6,FILNAM + 000673' 307000 000137 NM5B: CAIG 0,LA ;ALLOW ANY SIXBIT CHAR NOT CS DELIMITER + 000674' 307000 000040 CAIG 0,SPACE ;SPACES IGNORED + 000675' 254000 000571' JRST NM3 ;IGNORE NOT LEGAL SIXBIT + 000676' 254000 000576' JRST NM4 ;ACCEPT + + 000677' 260240 001404' PUSHJ P,GETBUF ;GET NEXT ASCII CHAR. + 000700' 303000 000012 NM16: CAILE 0,LF + 000701' 307000 000015 CAIG 0,CR ;IF LF,FF,VT,OR CR + 000702' 254000 000613' JRST NM5A ;RETURN + 000703' 302000 000033 CAIE 0,ALTMOD ;SAME IF ALTMOD + 000704' 306000 000032 CAIN 0,CZ ;OR ^Z + 000705' 254000 000613' JRST NM5A + 000706' 254000 000677' JRST NM16-1 ;GET NEXT CHARACTER + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 24 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;ROUTINE TO OUTPUT ONE LINE FROM LBUF + + 000707' 602300 000001 OUTLBF: TRNE FLAG,LINE + 000710' 254000 000717' JRST OUTLBA ;OUTPUT LINE-BY-LINE + 000711' 200100 003723' OUTCH1: MOVE T2,OPTRA ;OUTPUT CHARACTER-BY-CHARACTER + 000712' 316100 004020' OUTLB1: CAMN T2,OPTR ;ARE ALL CHARACTERS OUT? + 000713' 263240 000000 POPJ P, ;YES + 000714' 134200 000002 ILDB CHR,T2 ;NO + 000715' 260240 000756' PUSHJ P,PUT ;GO OUTPUT CHARACTER + 000716' 254000 000712' JRST OUTLB1 + 000717' 603300 000040 OUTLBA: TLNE FLAG,CHKFLG;PAREN COUNTING? + 000720' 254000 003305' JRST OUTCHK ;YES, SO DO IT + 000721' 602540 100010 TRNE AUXFLG,TTYOUT+LPTOUT + 000722' 254000 000711' JRST OUTCH1 ;IF OUTPUT TO TTY OR LPT DO CHR BY CHR + 000723' 201040 000004 MOVEI T1,4 ;CLEAR UNUSED PORTION OF LAST WORD USED IN LBUF + 000724' 201100 000000 MOVEI T2,0 + 000725' 200140 004020' MOVE T3,OPTR + 000726' 136100 000003 IDPB T2,T3 + 000727' 367040 000726' SOJG T1,.-1 + 000730' 201100 000005 MOVEI T2,5 + 000731' 550040 004020' HRRZ T1,OPTR ;COMPUTE NUMBER OF WORDS FILLED + 000732' 275040 004173' SUBI T1,LBUF-1 + 000733' 322040 000754' JUMPE T1,OUTLB3 ;DO NOTHING IF BUFFER EMPTY + 000734' 222040 000002 IMULM T1,T2 ;COMPUTE CHARACTER COUNT=5 TIMES WORD CT + ;THIS IS WHERE OLD FORTRAN MODE WAS TESTED. + 000735' 317100 003747' CAMG T2,OBF+2 ;WILL LINE FIT IN THE OUTBUFFER? + 000736' 254000 000745' JRST OUTLB2 ;YES + 000737' 260240 000762' PUSHJ P,OUTP ;NO, SO DUMP BUFFER AND CHECK ERROR BITS + 000740' 201500 000001 MOVEI T6 ,1 + 000741' 612500 004174' TDNE T6,LBUF ;SEQUENCED? + 000742' 606540 004000 TRNN AUXFLG,DTAOUT ;YES, ON DTA? + 000743' 254000 000745' SKIP 1 ;NO + 000744' 271100 000240 ADDI T2,40*5 ;LEAVE EDITING ROOM + 000745' 213000 000002 OUTLB2: MOVNS T2 + 000746' 272100 003747' ADDM T2,OBF+2 ;UPDATE OUTBUFFER CHARACTER COUNT + 000747' 505100 004174' HRLI T2,LBUF + 000750' 540100 003746' HRR T2,OBF+1 + 000751' 340100 000000 AOJ T2, + 000752' 273040 003746' ADDB T1,OBF+1 ;UPDATE OUTBUFFER BYTE POINTER + 000753' 251101 000000 BLT T2,(T1) ;MOVE DATA TO OUTBUFFER + 000754' 263240 000000 OUTLB3: POPJ P, + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 25 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;ROUTINE TO PUT ONE CHAR INTO OUT BUFFER + + 000755' 201200 000011 TABOUT: MOVEI CHR,TAB ;OUTPUT A TAB + 000756' 377000 003747' PUT: SOSG OBF+2 ;SUBR. TO OUTPUT ONE CHARACTER IN AC CHR + 000757' 260240 000762' PUSHJ P,OUTP ;IF BUFFER FULL, DUMP AND CHECK ERR BITS + 000760' 136200 003746' IDPB CHR,OBF+1 ;PUT CHARACTER IN BUFFER + 000761' 263240 000000 POPJ P, + + ;ROUTINE TO DUMP OUT BUFFER WHEN FULL + + 000762' 057100 000000 OUTP: OUT OUT, ;SUBR. TO DUMP OUTBUFFER AND CHECK ERR BITS + 000763' 254000 001710' JRST CPOPJZ ;NO ERRERS,BUT CLEAR IOS JUST IN CASE + 000764' 062100 000010 OUTP1: GETSTS OUT,IOS ;HERE FOR BIT CHECKING ONLY + 000765' 260240 000770' PUSHJ P,OUTP4 + 000766' 060110 000000 SETSTS OUT,(IOS);ERRORS WERE DETECTED + 000767' 263240 000000 POPJ P, ;NO ERRORS + + 000770' 606540 000200 OUTP4: TRNN AUXFLG,MTAOUT + 000771' 254000 000774' JRST .+3 + 000772' 602400 002000 OUTP3: TRNE IOS,EOTBIT ;EOT? + 000773' 254000 000776' JRST .+3 ;YES + 000774' 606400 740000 TRNN IOS,740000 ;ANY ERROR BITS ON? + 000775' 254000 001707' JRST CPOPJ1 ;NO + 000776' 260240 001135' PUSHJ P,COMERR ;YES + + 000777' 265440 000542' JSP T5,INICN2 ;INIT TTY + 001000' 260240 001652' PUSHJ P,QUEST + 001001' 265040 002166' ERRPN2 </Output device /> + 001002' 477536 470352 + 001003' 721014 462754 + 001004' 647074 520000 + 001005' 260240 002201' PUSHJ P,P6BIT + 001006' 000000 004634' ODEV + 001007' 336000 004044' SKIPN DTON ;ONLY IF THERE IS A FILE NAME + 001010' 254000 001014' JRST .+4 ;DON'T PRINT IF NOT + 001011' 265040 002166' ERRPN2 </: file /> + 001012' 351014 664730 + 001013' 625000 000000 + 001014' 201140 004044' MOVEI T3,DTON ;OUTPUT FILE NAME LOC + 001015' 260240 001146' PUSHJ P,FN.EX ;PRINT FILE NAME EXT + 001016' 200100 000013 MOVE T2,AUXFLG + 001017' 405100 014200 ANDI T2,MTAOUT+DSKOUT+DTAOUT + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 26 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 001020' 201040 001074' IOERR: MOVEI T1,TXTC ;PHYSICAL END OF TAPE + 001021' 602400 002000 TRNE IOS,EOTBIT + 001022' 254000 002166' JRST PTEXT2 ;YES + + 001023' 201040 001055' MOVEI T1,TXTD2 ;7-9 PUNCH MISSING + 001024' 606100 000100 TRNN T2,CDRIN + + IFN FTDSK,< + MOVEI T1,TXTD3 + TRNN T2,DSKIN!DSKOUT> + + 001025' 201040 001042' MOVEI T1,TXTD ;WRITE LOCK ERROR + 001026' 606100 074600 TRNN T2,DSKIN+DSKOUT+DTAIN+DTAOUT+MTAIN+MTAOUT + + 001027' 201040 001047' MOVEI T1,TXTD1 + 001030' 602400 400000 TRNE IOS,WRTLOK + 001031' 254000 002166' JRST PTEXT2 + + 001032' 201040 001062' MOVEI T1,TXTA ;DEVICE ERROR + 001033' 602400 200000 TRNE IOS,200000 + 001034' 254000 002166' JRST PTEXT2 + + 001035' 201040 001066' MOVEI T1,TXTB ;CHECKSUM/PARITY ERROR + 001036' 602400 100000 TRNE IOS,100000 + 001037' 254000 002166' JRST PTEXT2 + + IFN FTDSK,< + HRRZ T1,TABLE+14 + TRNN T2,DSKOUT ;QUOTA EXCEDED> + + 001040' 201040 001100' MOVEI T1,TXTC1 ;BLOCK TOO LARGE + 001041' 254000 002166' JRST PTEXT2 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 27 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;DEVICE ERROR COMMENTS + + 001042' 737455 172312 TXTD: ASCIZ /write (lock) error/ + 001043' 201215 467706 + 001044' 655224 062744 + 001045' 713376 200000 + 001046' 254000 001107' JRST IOERRN ;NO RECOVERY + + 001047' 613235 660744 TXTD1: ASCIZ /binary data incomplete/ + 001050' 745014 460750 + 001051' 605015 167306 + 001052' 677336 066312 + 001053' 723120 000000 + 001054' 254000 001114' JRST IOERRG + + 001055' 335327 120340 TXTD2: ASCIZ /7-9 punch missing/ + 001056' 727354 364100 + 001057' 667236 371722 + 001060' 673160 000000 + 001061' 254000 001114' JRST IOERRG + + 001062' 623136 664706 TXTA: ASCIZ /device error/ + 001063' 625014 571344 + 001064' 677440 000000 + 001065' 254000 001114' JRST IOERRG + + 001066' 617214 561726 TXTB: ASCIZ /checksum or parity error/ + 001067' 717535 520336 + 001070' 711016 060744 + 001071' 647517 120312 + 001072' 713455 771000 + 001073' 254000 001114' JRST IOERRG + + 001074' 703217 171722 TXTC: ASCIZ /physical eot/ + 001075' 617035 420312 + 001076' 677500 000000 + 001077' 254000 001114' JRST IOERRG + + 001100' 613315 761726 TXTC1: ASCIZ /block or block number too large/ + 001101' 203376 220304 + 001102' 663374 365500 + 001103' 673535 561312 + 001104' 711016 467736 + 001105' 203314 171316 + 001106' 624000 000000 + ;FALLS THROUGH TO IOERRN + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 28 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 001107' 071200 000000 IOERRN: RELEAS TAPE, ;NO RECOVERY ERRORS EXIT HERE + 001110' 071240 000000 RELEAS DIR, + 001111' 071100 000000 RELEAS OUT, + 001112' 071140 000000 RELEAS IN, + IFN DISK30,< + RELEAS BLKIN,> + 001113' 254000 000013' JRST PIP2 ;GET NEXT COMMAND + + IFN FTDSK,< + TXTD3: ASCIZ /monitor detected software error/> + + ;TEST IF /G FLAG(IGNORE ERRORS) SET + + 001114' 607300 000200 IOERRG: TLNN FLAG,GFLG ;PRINTED CURRENT MESSAGE + 001115' 254000 001107' JRST IOERRN ;NO RECOVERY + + ERRPN2</ + 001116' 265040 002166' /> ;PRINT CR, LF DON'T MOVE> + 001117' 064240 000000 + + 001120' 071040 000000 RELEAS CON, + 001121' 602540 100000 TRNE AUXFLG,TTYOUT ;TTY OUTPUT DEVICE? + 001122' 260240 000223' PUSHJ P,OMODE ;YES, INIT OUTPUT DEVICE + 001123' 602540 001000 TRNE AUXFLG,TTYIN ;REINIT TTYIN,TTYOUT + 001124' 260240 000426' PUSHJ P,ININIT + 001125' 620400 740000 TRZ IOS,740000 ;CLEAR FILE STATUS, I/O ERRORS + 001126' 602100 000600 TRNE T2,MTAIN+MTAOUT + 001127' 620400 002000 TRZ IOS,EOTBIT ;CLEAR PHYSICAL EOT I/O ERROR + 001130' 204000 004674' MOVS 0,[XWD 1,SAVAC] + 001131' 251000 000003 BLT 0,3 + 001132' 200440 003764' MOVE T5,SAVAC+3 + 001133' 200500 003765' MOVE T6,SAVAC+4 + 001134' 263240 000000 POPJ P, + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 29 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 001135' 200000 004674' COMERR: MOVE 0,[XWD 1,SAVAC] ;SAVE ACS T1,T2,T3,T5,T6 + 001136' 251000 003763' BLT 0,SAVAC+2 + 001137' 202440 003764' MOVEM T5,SAVAC+3 + 001140' 202500 003765' MOVEM T6,SAVAC+4 + 001141' 602540 100000 TRNE AUXFLG,TTYOUT ;RELEASE ANY TTYIO + 001142' 071100 000000 RELEAS OUT, + 001143' 602540 001000 TRNE AUXFLG,TTYIN + 001144' 071140 000000 RELEAS IN, + 001145' 263240 000000 POPJ P, + ;PRINT FILE NAME AND EXTENSION FROM (T3), 1(T3). + + 001146' 200043 000000 FN.EX: MOVE T1,(T3) ;T1=FILENAME + 001147' 554503 000001 HLRZ T6,1(T3) ;T6=FILE EXT + 001150' 306500 654644 CAIN T6,(SIXBIT /UFD/) + 001151' 400040 000000 SETZ T1, ;UFD FILES ONLY ARE ASSUMED TO HAVE FILENAME + 001152' 202040 004642' MOVEM T1,DERR2 ;OF NUMERIC FORM (#,# P-P NUMBER). + 001153' 322500 001166' JUMPE T6,DERR2A ;FILE EXT=0? + 001154' 302500 654644 CAIE T6,(SIXBIT /UFD/) + 001155' 254000 001165' JRST DERR2B ;NO + + 001156' 554643 000000 HLRZ DOUT,(T3) ;YES, GET PROJ. NO. + 001157' 201100 002175' MOVEI T2,PUTCON ;PRINT PROJ-PROG. NO. + 001160' 260240 003235' PUSHJ P,OUTDC1 ;CONVERT TO ASCII + + 001161' 201200 000054 MOVEI CHR,COMMA + 001162' 260240 002175' PUSHJ P,PUTCON + + 001163' 550643 000000 HRRZ DOUT,(T3) ;GET PROG. NO. + 001164' 260240 003235' PUSHJ P,OUTDC1 ;CONVERT TO ASCII + + 001165' 661500 000016 DERR2B: TLO T6,"."-40 ;PUT SIXBIT PERIOD + 001166' 202500 004643' DERR2A: MOVEM T6,DERR2+1 ;INTO EXTENSION + 001167' 260240 002201' PUSHJ P,P6BIT + 001170' 000000 004642' DERR2 + 001171' 260240 002201' PUSHJ P,P6BIT + 001172' 000000 004643' DERR2+1 + 001173' 201200 000040 MOVEI CHR," " + 001174' 254000 002175' JRST PUTCON + + + + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 30 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;THIS ROUTINE GETS A 7 BIT ASCII CHARACTER FROM THE COMMAND STRING + ;AND RETURNS IT TO THE COMMAND SCANNER ROUTINE (NAME) IN AC0 + + 001175' 260240 001404' GETCOM: PUSHJ P,GETBUF + 001176' 306000 000057 CAIN 0,"/" ;SINGLE CHARACTER SWITCH + 001177' 254000 001300' JRST GETT6 + 001200' 306000 000050 CAIN 0,"(" ;LOOK FOR (MULTI-CHAR.) SWITCH + 001201' 254000 001252' JRST GETT3 + 001202' 306000 000074 CAIN 0,"<" ;GO LOOK FOR PROTECTION + 001203' 254000 001223' JRST GETT9 + 001204' 302000 000133 CAIE 0,"[" + 001205' 263240 000000 POPJ P, + + 001206' 260240 001236' GETT10: PUSHJ P,GETDEC ;LOOK FOR PROJECT-PROGRAMMER NUMBER + 001207' 303600 777777 CAILE T7,-1 ;GREATER THAN HALF WORD? + 001210' 254000 002107' JRST ERR2A ;YES, ERROR + 001211' 302000 000054 CAIE 0,"," ;SEPARATOR? + 001212' 254000 001232' JRST GETUPJ ;OR TERMINATOR (NON-NUMERIC) + 001213' 516600 004043' HRLZM T7,PP + 001214' 260240 001236' PUSHJ P,GETDEC + 001215' 303600 777777 CAILE T7,-1 + 001216' 254000 002107' JRST ERR2A + + 001217' 542600 004043' GETT11: HRRM T7,PP + 001220' 306000 000135 CAIN 0,"]" ;FORCE CORRECT TERMINATOR + 001221' 254000 001175' JRST GETCOM + 001222' 254000 002076' JRST ERR2 + + 001223' 260240 001235' GETT9: PUSHJ P,GETOCT + 001224' 306000 000076 CAIN 0,">" ;TERMINATE ON RIGHT BRKT ONLY + 001225' 303600 000777 CAILE T7,777 ;PR. IN RANGE? + 001226' 254000 002107' JRST ERR2A + 001227' 241600 777767 ROT T7,-11 + 001230' 522600 004042' HLLOM T7,PR ;RHS=1'S MEANS <> SEEN (PR MAY BE 0) + 001231' 254000 001175' JRST GETCOM + + 001232' 200440 003734' GETUPJ: MOVE T5,UPROJ + 001233' 516440 004043' HRLZM T5,PP + 001234' 254000 001217' JRST GETT11 + 001235' 334440 004675' GETOCT: SKIPA T5,[EXP 10] + 001236' 201440 000012 GETDEC: MOVEI T5,12 + 001237' 201600 000000 GETNUM: MOVEI T7,0 ;TO PICK UP P-P NUMBER + 001240' 260240 001404' GETN1: PUSHJ P,GETBUF ;AND PROTECTION + 001241' 306000 000040 CAIN 0," " ;IGNORE SPACES + 001242' 254000 001240' JRST GETN1 + 001243' 301000 000060 CAIL 0,"0" + 001244' 301011 000060 CAIL 0,"0"(T5) + 001245' 263240 000000 POPJ P, ;GOT A NON-NUMERIC + 001246' 220600 000011 IMUL T7,T5 ; MULTIPLY BY RADIX + 001247' 275000 000060 SUBI 0,"0" + 001250' 270600 000000 ADD T7,0 ; ADD DIGIT + 001251' 254000 001240' JRST GETN1 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 31 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 001252' 260240 001320' GETT3: PUSHJ P,GETT5 ;PROCESS SWITCH CHARACTER + 001253' 306000 000051 CAIN 0,")" ;CLOSING PAREN? + 001254' 254000 001175' JRST GETCOM ;YES + 001255' 306000 000115 CAIN 0,"M" ;MTA FLAG? + 001256' 660300 200000 TRO FLAG, MTFLG ;SET MTA, LOOK FOR MULTI CHAR. SWITCH + 001257' 302000 000043 CAIE 0,"#" ;MTA# + 001260' 254000 001252' JRST GETT3 ;NO + 001261' 606300 200000 TRNN FLAG,MTFLG ;ONLY LOOK AFTER # IF MTFLG IS ON. + 001262' 254000 002040' JRST ERR6A ;I.E. IF MT SWITCH IS IN PROGRESS. + 001263' 260240 001305' PUSHJ P,GETNUD ;GET A NUMBER + 001264' 302000 000104 CAIE 0,"D" ;TERMINATED BY D? + 001265' 306000 000101 CAIN 0,"A" ;TERMINATED BY A? + 001266' 254000 001276' JRST GETT3A ;YES, MARK AB UPPER + 001267' 302000 000120 CAIE 0,"P" ;ONLY A,D,P AND B CAN BE + 001270' 306000 000102 CAIN 0,"B" ;PRECEDED BY #. + 001271' 254000 001273' SKIP 1 + 001272' 254000 002040' JRST ERR6A + 001273' 542600 004136' HRRM T7,AB ;NO. FILES/RECS TO ADVANCE + ;GOES IN AB (RH) + 001274' 260240 001321' GETT3B: PUSHJ P,GETT5A + 001275' 254000 001252' JRST GETT3 + + 001276' 506600 004136' GETT3A: HRLM T7,AB ;NO. FILES/RECS TO BACK SPACE + 001277' 254000 001274' JRST GETT3B ;GOES IN AB (LH) + + 001300' 260240 001320' GETT6: PUSHJ P,GETT5 ;PROCESS ONE SWITCH CHAR + 001301' 302000 000115 CAIE 0,"M" + 001302' 306000 000051 CAIN 0,")" ;THESE ARE ILLEGAL 1-SWITCH CHARS. + 001303' 254000 002040' JRST ERR6A + 001304' 254000 001175' JRST GETCOM + + 001305' 201600 000000 GETNUD: MOVEI T7,0 ;GET A DECIMAL NUMBER + 001306' 260240 001404' GETN2: PUSHJ P,GETBUF ;GET CHAR FROM COMMAND STRING + 001307' 306000 000040 CAIN 0,SPACE ;SPACE? + 001310' 254000 001306' JRST GETN2 ;YES, IGNORE + 001311' 301000 000060 CAIL 0,"0" ;NUMBER? + 001312' 303000 000071 CAILE 0,"9" + 001313' 263240 000000 POPJ P, ;NO + 001314' 221600 000012 IMULI T7,^D10 ;T7*10 + 001315' 405000 000017 ANDI 0,17 ;ADD ON LAST DIGIT + 001316' 270600 000000 ADD T7,0 ;+ LOW 4 BITS + 001317' 254000 001306' JRST GETN2 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 32 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + ;GET NEXT COMMAND STRING CHAR(SWITCH),CHECK WITH TABLE,SET FLAGS + + 001320' 260240 001404' GETT5: PUSHJ P,GETBUF ;GET CHAR FROM COMMAND STRING + 001321' 200100 004676' GETT5A: MOVE T2,[XWD 350700,DISPTB] ;SET DISPTB NEXT SEARCH + 001322' 201500 004056' MOVEI T6,MTAREQ ;SET MTAREQ NEXT SEARCH + + 001323' 606300 200000 TRNN FLAG,MTFLG ;SET UP TABLE TO SEARCH AND FLAG TO SET. + 001324' 541100 001436' HRRI T2,DISPTA ;PUT IN BYTE POINTER, NOT MTA REQUEST + + ;SET TO LOOK AT NON-MTA LETTERS FIRST + + 001325' 606300 200000 TRNN FLAG,MTFLG ;IF MTFLG SET, START AT DISPTB AND STORE RESULT IN + 001326' 201500 000013 MOVEI T6,AUXFLG ;MTAREQ, ELSE START AT DISPTA AND STORE RESULT IN + ;AUXFLG OR FLAG + ;GET FIRST CHAR DISPTA OR DISPTB, LOOK FOR MATCH, SET SWITCH FLAGS. + + 001327' 135140 000002 GETT7: LDB T3,T2 ;COMPARE WITH LEFT 7 BITS OF + 001330' 326140 001335' JUMPN T3,GETT8 ;TABLE ENTRIES + 001331' 620300 200000 TRZ FLAG, MTFLG ;SEARCHED TABLE 1 (DISPTB) DROP MTA FLAG + 001332' 201500 000013 MOVEI T6,AUXFLG ;SET AUXFLG NEXT TABLE SEARCH + 001333' 603540 000020 TLNE AUXFLG,NOMORE ;AFTER FIRST INPUT DEVICE ONLY ACCEPT MTA FLAGS + 001334' 263240 000000 POPJ P, + + 001335' 306140 000001 GETT8: CAIN T3,1 ;END OF DISPTA 1ST HALF? + 001336' 201500 000006 MOVEI T6,FLAG ;YES, SEARCH DISPTA 2ND HALF FROM NOW ON + 001337' 306140 000002 CAIN T3,2 ;END OF DISPTA 2ND HALF? + 001340' 254000 002040' JRST ERR6A ;SEARCHED TABLE 3, ERROR EXIT + 001341' 312140 000000 CAME T3,0 ;MATCHING CHARACTER? + 001342' 344100 001327' AOJA T2,GETT7 ;NO, GET NEXT SWITCH IN TABLE. + + 001343' 200442 000000 MOVE T5,(T2) ;YES, SET FLAG OR AUXFLG OR MTAREQ + 001344' 436452 000000 ORM T5,(T6) ;FLAG OR AUXFLG + 001345' 602300 200000 TRNE FLAG,MTFLG + 001346' 436440 004133' ORM T5,AUX ;MTA REQUESTS SAVED IN AUX + IFE RIMSW,< + 001347' 603300 000002 TLNE FLAG,RIMFLG + 001350' 254000 004652' JRST RIMTB ;NO RIM IF RIMSW=0 + > ;PRINT ERROR MESSAGE + 001351' 263240 000000 POPJ P, ;EXIT ON MATCHING CHAR + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 33 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + ;ROUTINE TO GET ONE TTY OR CCL COMMAND STRING CHAR INTO AC 0 + + 001352' GETTA: + + 001352' 373000 003755' SOSLE TFI+2 ;SUBR TO GET ONE TTY CHAR IN AC 0 + 001353' 254000 001371' JRST GETT2 ;BUFFER NOT EMPTY + 001354' 200000 003753' MOVE 0,TFI ;BUFFER EMPTY, SAVE + 001355' 200440 003756' MOVE T5,TFO ;CURRENT BUFFER LOCS + 001356' 260240 001410' PUSHJ P,INICON ;BUFFER EMPTY SO RE-ATTACH TTY + 001357' 562000 003753' HRROM 0,TFI ;RESTORE OLD BUFFER LOCS + 001360' 562440 003756' HRROM T5,TFO ;USE PREVIOUSLY ASSIGNED I/O BUF. FOR TTY + 001361' 200440 004131' MOVE T5,COMCNT ;DONT TYPE CR,LF + 001362' 307440 000105 CAIG T5,^D69 ;FOR SHORT LINE + 001363' 254000 001365' JRST GETTIN + 001364' 260240 002735' PUSHJ P,INFO2 ;TYPE CR,LF + 001365' 066040 000000 GETTIN: INPUT CON, ;GET THE NEXT LINE + 001366' 200440 003755' MOVE T5,TFI+2 ;SAVE CHAR COUNT + 001367' 071040 000000 RELEAS CON, ;LET GO OF TTY FOR USE AS IN-OUT DEVICE + 001370' 202440 003755' MOVEM T5,TFI+2 ;RESTORE CHAR COUNT LOST DURING RELEASE + 001371' 134000 003754' GETT2: ILDB 0,TFI+1 ;FETCH CHAR + 001372' 302000 000175 GETT4: CAIE 0,ALT175 ;OLD ALTMODE? + 001373' 306000 000176 CAIN 0,ALT176 + 001374' 201000 000033 MOVEI 0,ALTMOD ;YES,MAKE NEW ALTMOD + 001375' 322000 001352' JUMPE 0,GETTA ;IGNORE NULL CHARS + 001376' 301000 000140 CAIL 0,140 ;LOWER CASE? + 001377' 620000 000040 TRZ 0,40 ;YES MAKE UPPER CASE? + 001400' 302000 000021 CAIE 0,XON ;IGNORE XON,XOFF ONLY FOR + 001401' 306000 000023 CAIN 0,XOFF ;TTY SERVICE TO SIGNAL TTY + 001402' 254000 001352' JRST GETTA ;PTR READ IN MODE + 001403' 263240 000000 POPJ P, + + ;ROUTINE TO GET ONE TTY CHAR FROM COMBUF INTO AC0 + + 001404' 375000 004131' GETBUF: SOSGE COMCNT ;ANY CHARS LEFT? + 001405' 254000 002045' JRST ERR6B ;NO, COMMAND ERROR + 001406' 134000 004132' ILDB 0,COMPTS ;PICK UP CHAR FROM COMBUF + 001407' 263240 000000 POPJ P, + + ;ROUTINE TO INITIALIZE THE TTY, ASCII LINE MODE + + 001410' 041040 000001 INICON: INIT CON,1 ;SUBR TO INITIALIZE THE TTY + 001411' 646471 000000 SIXBIT /TTY/ + 001412' 003756' 003753' XWD TFO,TFI ;TTY OUT/IN BUFFER HEADERS + 001413' 047000 000012 EXIT ;IF TTY NOT AVAILABLE,FATAL.JOB DET? + 001414' 263240 000000 POPJ P, + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 34 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;GET 7 BIT ASCII CHARACTER - INPUT FROM CCL COMMAND FILE + + 001415' 476000 004057' GETEN2: SETOM COMEOF ;INDICATE END OF FILE + 001416' 201000 000032 MOVEI 0,CZ ;NEEDED TO TERM CCL CS SCAN + 001417' 263240 000000 POPJ P, + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 35 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;TABLE OF RECOGNIZED COMMAND LETTERS AND CORRESPONDING FLAG BITS + + DEFINE DISP (A,B) + < XWD <"A">*4000,B> + ;MAGTAPE SWITCHES AND FLAG BITS. TABLE 1 (MTAREQ) + 001420' 404000 000001 DISPTB: DISP A,MTAFLG + 001421' 410000 000002 DISP B,MTBFLG + 001422' 520000 000004 DISP T,MTTFLG + 001423' 534000 000010 DISP W,MTWFLG + 001424' 340000 000400 DISP 8,MT8FLG + 001425' 324000 001000 DISP 5,MT5FLG + 001426' 310000 002000 DISP 2,MT2FLG + 001427' 424000 004000 DISP E,MTEFLG + 001430' 524000 000040 DISP U,MTUFLG + 001431' 430000 000020 DISP F,MTFFLG + 001432' 420000 000100 DISP D,MTDFLG + 001433' 500000 000200 DISP P,MTPFLG + 001434' 214000 000000 DISP #,0 + 001435' 000000 000000 OCT 000000000000 + ;1ST BYTE 0=END OF DISPTB + ;------------------------ + ;COMMAND STRING LETTERS AND FLAG BITS. TABLE 2 (AUXFLG) + 001436' 504001 000000 DISPTA: XWD <"Q">*4000+QFLG,0 + 001437' 424040 000000 XWD <"E">*4000+CDRFLG,0 + 001440' 430000 000020 DISP F,FFLG + 001441' 004000 000000 OCT 004000000000 + ;1ST BYTE 1=END OF DISPTA 1ST HALF + ;------------------------ + ;COMMAND STRING LETTERS AND FLAG BITS. TABLE 3 (FLAG) + 001442' 404000 000001 DISP A,LINE + 001443' 410000 000002 DISP B,BMOD + IFN,K,< DISP C,TBMOD + DISP D,DFLG + DISP L,LFLG> + 001444' 464000 000000 DISP M,0 + 001445' 244000 000000 DISP ),0 + 001446' 470000 000040 DISP N,NSMOD + 001447' 474000 400640 DISP O,SQMOD+NSMOD+STS+OSFLG + 001450' 500014 000000 XWD <"P">*4000+PFLG+PCONV,0 + IFN,K< DISP R,RFLG> + 001451' 514000 000640 DISP S,SQMOD+NSMOD+STS + IFN,K< DISP T,SPMOD + XWD <"V">*4000+CHKFLG,LINE + DISP X,XFLG> + 001452' 550000 004000 DISP Z,ZFLG + 001453' 524001 000000 XWD <"U">*4000+OFLG,0 + 001454' 544402 000000 XWD <"Y">*4000+IBFLG+RIMFLG,0 + 001455' 451000 000000 XWD <"J">*4000+JFLG,0 + 001456' 444100 000000 XWD <"I">*4000+IFLG,0 + 001457' 440400 000000 XWD <"H">*4000+IBFLG,0 + 001460' 434200 000000 XWD <"G">*4000+GFLG,0 + 001461' 010000 000000 OCT 010000000000 + ;FIRST BYTE 2=END OF DISPTA 2ND HALF + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 36 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;SUBR TO GET NEXT CHAR INTO AC CHR + ;NO SKIP RETURN IS END OF FILE, SINGLE SKIP IS NORMAL RETURN + + 001462' 607300 000020 GET: TLNN FLAG,NEWFIL ;NEW FILE? + 001463' 627300 000030 TLZN FLAG,PCONV+NEWFIL ;NO,CONVERT THIS CHAR? + 001464' 254000 001506' JRST GETPC1 ;YES + 001465' 135200 003743' LDB CHR,IBF+1 ;GET CHAR + 001466' 306200 000040 CAIN CHR," " ;SPACE? + 001467' 254000 001544' JRST GETPC2 ;YES, CONVERT TO LINE FEED + 001470' 307200 000063 CAIG CHR,"3" ;IS THE CHAR A PROPER FORMAT CONTROL CHAR? + 001471' 305200 000052 CAIGE CHR,"*" + 001472' 254000 001542' JRST GETPC3 ;NO, SO OUTPUT LINE FEED FOLLOWED BY BAD CHAR + 001473' 307200 000056 CAIG CHR,"." ;USE LEFT HALF OF TABLE? + 001474' 334204 001474' SKIPA CHR,PCHTAB-<"*">(CHR) + 001475' 204204 001467' MOVS CHR,PCHTAB-<"/">(CHR) + 001476' 137200 003743' GETPC4: DPB CHR,IBF+1 ;CLOBBER OLD CHAR, USUALLY BECOMES NULL + 001477' 242200 777771 LSH CHR,-7 ;BUT OTHERWISE BECOMES ANOTHER FORMAT CHAR + 001500' 405200 000377 ANDI CHR,377 ;EXTRACT THE CHAR TO BE OUTPUT + 001501' 622200 000200 TRZE CHR,200 ;=1 FOR GENERATING MULTIPLE LINE FEEDS + 001502' 661300 000010 TLO FLAG,PCONV ;CONTINUE TO CONVERT + 001503' 326200 001707' JUMPN CHR,CPOPJ1;OUTPUT THE GENERATED CHAR UNLESS NULL + 001504' 262245 000000 POP P,(P) ;IGNORE NULL CHARS + 001505' 254000 000374' JRST PSCAN4 ;DUMP THE LINE BUFFER + 001506' 606300 010000 GETPC1: TRNN FLAG,SUS ;SUPPLYING SEQ. NUM. NOW? + 001507' 254000 001532' JRST GET2 ;NO + 001510' 134200 004036' ILDB CHR,PTRPT ;YES, SO GET CHAR OF SEQ NUM + 001511' 326200 001707' JUMPN CHR,CPOPJ1;0 MARKS LAST CHAR + 001512' 135040 003743' LDB T1,IBF+1 ;GET FIRST CHAR OF THIS LINE + 001513' 201200 000015 MOVEI CHR,15 + 001514' 307040 000015 CAIG T1,15 ;PREPARE TO OUTPUT A CR,LF + 001515' 305040 000012 CAIGE T1,12 ;IS FIRST CHAR OF LINE AN END OF LINE CHAR? + 001516' 201200 000011 MOVEI CHR,TAB ;NO, SO OUTPUT A TAB + 001517' 620300 010000 TRZ FLAG,SUS ;TURN OFF SUS SUPPLY + 001520' 254000 001724' JRST GETA5 + 001521' 350000 003743' GET5: AOS IBF+1 ;HERE IF A SEQ NUM FOUND IN INBUFFER + 001522' 275040 000005 SUBI T1,5 ;IGNORE SEQ NUM, TAB AND DECREMENT CHAR COUNT + 001523' 202040 003744' MOVEM T1,IBF+2 + 001524' 602300 000040 TRNE FLAG,NSMOD ;REMOVE SEQ NUMS MODE? + 001525' 254000 001532' JRST GET2 ;YES, SO GET NEXT CHAR + 001526' 202100 004014' MOVEM T2,SQNUM ;SEQ NUM FROM BUFFER BECOMES NEW SEQ NUM + 001527' 260240 000707' PUSHJ P,OUTLBF ;DUMP THE LINE BUFFER (IF REQUIRED) + 001530' 666300 100400 TRON FLAG,STS+SNI ;TURN ON START OF LINE + ;AND NO-INCREMENT SEQ NUM FLAG + 001531' 260240 000553' PUSHJ P,CLRBUF ;CLEAR LBUF IF IN THE MIDDLE OF A LINE + + 001532' 622300 040000 GET2: TRZE FLAG,ESQ ;REPROCESS LAST CHAR? + 001533' 254000 001557' JRST GET1 ;YES + 001534' 371040 003744' SOSL T1,IBF+2 ;CHARS REMAINING IN INBUFFER? + 001535' 254000 001553' JRST GET4 ;YES + 001536' 260240 001616' PUSHJ P,INP ;NO, SO REFILL AND CHECK ERR BITS + 001537' 602400 020000 TRNE IOS,EOFBIT ;END OF FILE? IOS HAS STATUS BITS + 001540' 263240 000000 POPJ P, ;YES + 001541' 254000 001532' JRST GET2 ;NO, SO PROCESS INBUFFER + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 36-1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 001542' 660300 040000 GETPC3: TRO FLAG,ESQ ;REPROCESS BAD CHAR + 001543' 664200 002400 TROA CHR,12*200 ;PRECEED BAD CHAR WITH LINE FEED + 001544' 201200 002400 GETPC2: MOVEI CHR,12*200;CHANGE SPACE TO LINE FEED + 001545' 254000 001476' JRST GETPC4 + + 001546' 005000 004656 PCHTAB: XWD 24*200,23*200+"." ;/ * + 001547' 042440 037600 XWD 212*200+" ",177*200 ;0 + VJC 4/16/49 + 001550' 003000 004200 XWD 14*200,21*200 ;1 , + 001551' 004000 042460 XWD 20*200,212*200+"0" ;2 - + 001552' 002600 004400 XWD 13*200,22*200 ;3 . + + 001553' 134200 003743' GET4: ILDB CHR,IBF+1 ;FETCH CHAR FROM INBUFFER + 001554' 616300 004672' TDNN FLAG,[XWD IFLG+IBFLG,BMOD] ;BIN, IB, I OR SBIN MODE? + 001555' 603540 000004 TLNE AUXFLG,SBIN + 001556' 254000 001707' JRST CPOPJ1 ;YES, SO NO PROCESSING REQUIRED + 001557' 135200 003743' GET1: LDB CHR,IBF+1 ;AFTER SEQ NUM, HERE FOR 1ST CHAR + 001560' 322200 001532' JUMPE CHR,GET2 ;IGNORE NULL CHARS + 001561' 306200 000012 CAIN CHR,LF ;IGNORE LINE FEED IN FORTRAN OUTPUT + 001562' 607300 000004 TLNN FLAG,PFLG ;/P SWITCH IN EFFECT? + 001563' 254000 001566' JRST GET1A ;NO + 001564' 661300 000010 TLO FLAG,PCONV ;CONVERT THE NEXT LIVE CHAR + 001565' 254000 001532' JRST GET2 ;GET NEXT CHAR + 001566' 200120 003743' GET1A: MOVE T2,@IBF+1 ;BIT 35 OF BUFFER SET? + 001567' 622100 000001 TRZE T2,1 + 001570' 254000 001521' JRST GET5 ;YES, THIS IS A SEQ NUM + 001571' 622300 000400 TRZE FLAG,STS ;START SEQ (NEW LINE) FLAG ON? + 001572' 606300 100200 TRNN FLAG,SQMOD+SNI ;YES, SEQ MODE OR SEQ COPY? + 001573' 254000 001666' JRST GET7 ;NO, SO PROCESS CHAR + 001574' 200100 004014' MOVE T2,SQNUM ;NO, SO ADD 10. TO SEQ NUM + 001575' 200040 003724' MOVE T1,K1 + 001576' 602300 400000 TRNE FLAG,OSFLG ;TEST FOR INCR. BY ONE + 001577' 200040 003726' MOVE T1,K4 + 001600' 270100 000001 ADD T2,T1 ;ASCII INCREMENT + 001601' 404100 003725' AND T2,K3 ;MASK SIGNIFICANT DIGITS + 001602' 200040 000002 MOVE T1,T2 + 001603' 404040 003721' AND T1,ZRO ;MASK CARRY BITS + 001604' 240040 777775 ASH T1,-3 + 001605' 274100 000001 SUB T2,T1 ;ADJUST CARRIES + 001606' 434100 003721' IOR T2,ZRO + 001607' 626300 100000 TRZN FLAG,SNI ;NON-INCREMENT SEQ NUM FLAG ON? + 001610' 202100 004014' MOVEM T2,SQNUM ;NO, SO SAVE THE RESULT + 001611' 660300 050001 TRO FLAG,LINE+SUS+ESQ ;TURN ON SUPPLY SEQ, REPROCESS + ;LAST CHAR, AND LINE-BY-LINE FLAGS + 001612' 350000 004174' AOS LBUF ;SET BIT 35 IN LBUF TO MARK SEQ NUM + 001613' 200040 004677' MOVE T1,[POINT 7,SQNUM] + 001614' 202040 004036' MOVEM T1,PTRPT ;INITIALIZE SEQ NUM PICK-UP POINTER + 001615' 254000 001462' JRST GET ;GO OUTPUT FIRST CHAR OF SEQ NUM + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 37 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;ROUTINE TO INPUT INPUT FILE + + 001616' 056140 000000 INP: IN IN, ;INPUT DATA + 001617' 254000 001710' JRST CPOPJZ ;NO ERRORS ,BUT CLEAR IOS JUST IN CASE + 001620' 062140 000010 INERR: GETSTS IN,IOS ;SUBR TO CHECK INPUT ERR BITS + 001621' 606540 000400 TRNN AUXFLG,MTAIN ;MTA INPUT? + 001622' 602400 740000 TRNE IOS,740000 ;ANY ERROR BITS SET? + 001623' 606400 742000 TRNN IOS,740000+EOTBIT ;EOT FOR MTA? + 001624' 263240 000000 POPJ P, ;NO + + 001625' 260240 001135' PUSHJ P,COMERR ;SAVE AC'S RELEASE TTY + 001626' 265440 000542' JSP T5,INICN2 ;YES SO PRINT OUT COMPLETE FILE DESCRIPTOR + 001627' 260240 001652' PUSHJ P,QUEST + 001630' 265040 002166' ERRPN2 </Input device /> + 001631' 447356 072750 + 001632' 203114 573322 + 001633' 617124 000000 + 001634' 260240 002201' PUSHJ P,P6BIT + 001635' 000000 004637' DEVICE + 001636' 336000 004052' SKIPN ZRF ;IS THERE A FILE NAME + 001637' 254000 001643' JRST .+4 ;NO,SO DON'T PRINT + 001640' 265040 002166' ERRPN2 </: file /> + 001641' 351014 664730 + 001642' 625000 000000 + 001643' 201140 004052' MOVEI T3,ZRF ;LOC OF INPUT FILE NAME TO T3 + 001644' 260240 001146' PUSHJ P,FN.EX ;DEPOSIT FILE NAME, EXT INTO TTY OUT BUFFER + 001645' 200100 000013 MOVE T2,AUXFLG + 001646' 405100 060500 ANDI T2,CDRIN+DTAIN+DSKIN+MTAIN + 001647' 260240 001020' PUSHJ P,IOERR ;GO PRINT ERROR DESCRIPTOR + 001650' 060150 000000 SETSTS IN,(IOS) + 001651' 263240 000000 POPJ P, + + ;ROUTINE TO TEST IF BLOCK TOO LARGE, OR WRITE LOCKED + + 001652' 201200 000077 QUEST: MOVEI CHR,"?" ;DEPOSIT "?" IN ERROR MSG + 001653' 607300 000200 TLNN FLAG,GFLG ;ONLY IF /G NOT ON + 001654' 254000 002175' JRST PUTCON ;/G NOT ON, PRINT ?(FATAL) BEFORE ERR MSG + + 001655' 606400 040000 TRNN IOS,BIGBLK ;BLOCK NO. TOO LARGE? + 001656' 254000 001662' JRST QUEST2 ;NO + 001657' 606540 024000 TRNN AUXFLG,DTAIN+DTAOUT ;YES + 001660' 263240 000000 POPJ P, ;BLOCK TOO LARGE + + 001661' 254000 002175' JRST PUTCON ;DEPOSIT "?" FATAL EVEN IF /G ON + + 001662' 602400 400000 QUEST2: TRNE IOS,WRTLOK ;WRITE LOCKED? + 001663' 606540 034600 TRNN AUXFLG,DTAIN+DTAOUT+MTAIN+MTAOUT+DSKOUT + 001664' 263240 000000 POPJ P, ;NO + 001665' 254000 002175' JRST PUTCON ;DEPOSIT "?" FATAL EVEN IF /G ON + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 38 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 001666' 603300 000010 GET7: TLNE FLAG,PCONV ;CONVERTING FORTRAN CARRAIGE CONTROL CHAR? + 001667' 254000 001463' JRST GET+1 ;YES, GO DO IT + 001670' 350040 004035' AOS T1,CDRCNT + 001671' 603540 000040 TLNE AUXFLG,CDRFLG + 001672' 254000 001712' JRST GET7B ;CARD READER INPUT + + 001673' 306200 000040 GET7C: CAIN CHR,SPACE ;SPACE? + 001674' 254000 001727' JRST GETA2 ;YES + 001675' 306200 000015 CAIN CHR,CR ;CAR. RET.? + 001676' 254000 001717' JRST GETA3 ;YES + 001677' 620300 020000 TRZ FLAG,SPOK ;CHAR NOT A SPACE STOP COUNTING CONSEC. SPACES + 001700' 306200 000011 CAIN CHR,TAB ;TAB? + 001701' 254000 001724' JRST GETA5 ;KEEP TRACK OF TAB STOPS + 001702' 307200 000137 CAIG CHR,137 + 001703' 305200 000040 CAIGE CHR,SPACE ;NON-SPACING CHARACTER? + 001704' 254000 001707' JRST CPOPJ1 ;YES, SO RETURN IMMEDIATELY + 001705' 377000 004027' SOSG TABCT ;COUNT DOWN THE TAB STOP COUNTER + 001706' 254000 001724' JRST GETA5 ;RESET THE COUNTER IF TAB STOP IS PASSED + 001707' 354005 000000 CPOPJ1: AOSA (P) ;SKIP RETURN + 001710' 400400 000000 CPOPJZ: SETZ IOS, ;CLEAR IOS JUST IN CASE + 001711' 263240 000000 CPOPJ: POPJ P, + + + 001712' 301040 000111 GET7B: CAIL T1,^D73 ;LT COL 73? + 001713' 303040 000120 CAILE T1,^D80 ;NO, LE COL 80? + 001714' 254000 001673' JRST GET7C ;CANT BE A CARD SEQUENCE NUMBER + 001715' 201200 000040 MOVEI CHR,SPACE ;REPLACE CARD SEQUENCE NOS. BY SPACE + 001716' 254000 001673' JRST GET7C + + 001717' 622300 020000 GETA3: TRZE FLAG,SPOK ;CAR. RET. SEEN, ANY TRAILING SPACES? + 001720' 606300 001004 TRNN FLAG,SPMOD+TBMOD ;YES, ARE WE FLUSHING TRAILING SPACES + 001721' 254000 001724' JRST GETA5 ;NO, RESET TAB COUNTER ONLY + 001722' 200000 004023' MOVE 0,SVPTR1 + 001723' 202000 004020' MOVEM 0,OPTR ;CLOBBER THE OUTPUT POINTER TO LBUF + 001724' 201000 000010 GETA5: MOVEI 0,TABSP + 001725' 202000 004027' MOVEM 0,TABCT ;RESET THE TAB COUNTER + 001726' 254000 001707' JRST CPOPJ1 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 39 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 001727' 662300 020000 GETA2: TROE FLAG,SPOK ;SPACE WAS SEEN, IS THIS ONE OF A SEQUENCE? + 001730' 254000 001735' JRST GETA7 ;YES + 001731' 200000 004020' MOVE 0,OPTR ;THIS IS THE FIRST SPACE SEEN, SAVE LBUF + ;POINTER IN CASE THIS SPACE MUST BE FLUSHED + 001732' 202000 004023' MOVEM 0,SVPTR1 ;THIS POINTER FOR FLUSHING FINAL SPACES + 001733' 202000 004024' MOVEM 0,SVPTR2 ;THIS POINTER FOR CHANGING MULT. SPACES TO TABS + 001734' 402000 004030' SETZM SPCT ;INITIALIZE THE SPACE COUNTER + 001735' 350040 004030' GETA7: AOS T1,SPCT + 001736' 373000 004027' SOSLE TABCT ;ARE WE AT THE NEXT TAB STOP? + 001737' 254000 001707' JRST CPOPJ1 ;NO + 001740' 301040 000002 CAIL T1,2 ;DONT BOTHER CHANGING ONE SPACE TO A TAB + 001741' 606300 000004 TRNN FLAG,TBMOD ;TAB GENERATING MODE? + 001742' 254000 001747' JRST GETA5A ;NO, GO RESET TAB COUNTER + 001743' 200000 004024' MOVE 0,SVPTR2 + 001744' 202000 004020' MOVEM 0,OPTR ;BACK UP THE OUTPUT POINTER OVER THE LAST + ;GROUP OF SPACES + 001745' 201200 000011 MOVEI CHR,TAB ;OUTPUT A TAB + 001746' 402000 004030' SETZM SPCT ;RESET THE SPACE COUNTER + 001747' 133000 004024' GETA5A: IBP SVPTR2 ;UPDATE THE CHANGE-SPACES-TO-TABS POINTER + 001750' 254000 001724' JRST GETA5 ;RESET THE TAB COUNTER + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 40 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;ERROR ROUTINES + + IFE WCH,<IFN RIMSW,< + ERR8A: MOVEI T4,ERR382 + JRST E10B + ERR3B: MOVEI T4,ERR381 + JRST E10B>> + + 001751' 201340 002053' ERR10: MOVEI T4,E10A + 001752' 336000 004052' E10B: SKIPN ZRF + 001753' 254000 001757' SKIP 3 + 001754' 265040 002155' ERRPNT </?File /> + 001755' 376155 166312 + 001756' 200000 000000 + 001757' 201140 004052' MOVEI T3,ZRF + 001760' 260240 001146' PUSHJ P,FN.EX + 001761' 254007 000000 JRST (T4) + + IFE WCH,<IFN RIMSW,< + ERR381: ERRPN2 </illegal extension!/> + + ERR382: ERRPN2 </illegal format!/> + + ERR5B: ERRPN2 </? DTA to PTP only!/>>> + + 001762' 265040 002155' ERR9: ERRPNT </?/> + 001763' 374000 000000 + 001764' 201140 004044' MOVEI T3,DTON + 001765' 260240 001146' PUSHJ P,FN.EX + 001766' 254000 002033' JRST ERR4B + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 41 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 001767' 334100 004634' ERR1: SKIPA T2,ODEV ;OUTPUT UNAVAILABLE + 001770' 200100 004637' ERR1A: MOVE T2,DEVICE ;INPUT UNAVAILABLE + 001771' 265040 002155' ERR1B: ERRPNT </?Device /> + 001772' 376114 573322 + 001773' 617124 000000 + 001774' 260240 002201' PUSHJ P,P6BIT + 001775' 000000 000002 T2 + 001776' 265040 002166' ERRPN2 </ not available!/> + 001777' 203355 772100 + 002000' 607554 164730 + 002001' 607055 462502 + 002002' 000000 000000 + 002003' ERR3: + IFN FTDSK,<TRNE AUXFLG,DSKIN + JRST DERR5 ;ERR ON DSK> + 002003' 260240 002005' PUSHJ P,ERR3A + 002004' 254000 001107' JRST IOERRN ;EXIT + 002005' 661540 000100 ERR3A: TLO AUXFLG,INFOFL ;SIGNAL RETURN TO ERR3AA + 002006' 254000 002711' JRST INFO + 002007' 265040 002166' ERR3AA: ERRPN2 </? No file named /> + 002010' 375011 667500 + 002011' 633235 462500 + 002012' 673035 562710 + 002013' 200000 000000 + 002014' 201140 004040' MOVEI T3,FILNAM + 002015' 260240 001146' PUSHJ P,FN.EX ;PRINT NAME OF FILE THAT CANNOT BE FOUND + 002016' 260240 002735' PUSHJ P,INFO2 ;OUTPUT MESS. WITH CR-LF + 002017' 606540 101000 TRNN AUXFLG,TTYIN!TTYOUT ;WAS TTY IN USE? + 002020' 263240 000000 POPJ P, ;NO + 002021' 602540 001000 TRNE AUXFLG,TTYIN ;INPUT DEVICE? + 002022' 254000 000426' JRST ININIT ;YES ,RE-INIT + 002023' 254000 000223' JRST OMODE ;MUST BE OUTPUT + + 002024' 336000 004044' ERR4: SKIPN DTON + 002025' 254000 002033' JRST ERR4A + IFN FTDSK,<TRNE AUXFLG,DSKOUT ;ERR ON DSK + JRST DERR6> + 002026' 265040 002155' ERRPNT </? Directory full!/> + 002027' 375010 464744 + 002030' 627076 467744 + 002031' 745014 672730 + 002032' 661020 000000 + 002033' ERR4A: + IFN FTDSK,<TRNE AUXFLG,DSKOUT + JRST ERR4C> + 002033' 265040 002155' ERR4B: ERRPNT </?Illegal file name!/> + 002034' 376235 466312 + 002035' 637035 420314 + 002036' 647314 520334 + 002037' 607334 520400 + IFN FTDSK,< + ERR4C: ERRPNT </?(0) Illegal file name!/>> + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 41-1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 002040' ERR6: + 002040' 265040 002155' ERR6A: ERRPNT </?PIP command error!/> + 002041' 376411 150100 + 002042' 617375 566702 + 002043' 673104 062744 + 002044' 713376 220400 + + 002045' 265040 002155' ERR6B: ERRPNT </?PIP command too long!/> + 002046' 376411 150100 + 002047' 617375 566702 + 002050' 673104 072336 + 002051' 675015 467734 + 002052' 635020 000000 + + 002053' 265040 002166' E10A: ERRPN2 </ line too long!/> + 002054' 203315 167312 + 002055' 203515 767500 + 002056' 663375 663502 + 002057' 000000 000000 + 002060' 265040 002155' ERR5A: ERRPNT </?Too many input devices!/> + 002061' 376515 767500 + 002062' 667035 674500 + 002063' 647356 072750 + 002064' 203114 573322 + 002065' 617136 320400 + ;FILE MANIPULATION COMMANDS TO NON-DIRECTORY DEVICES COME HERE + + 002066' 265040 002155' ERR5: ERRPNT </?Disk or DECtape input required!/> + 002067' 376115 171726 + 002070' 203376 220210 + 002071' 426076 460740 + 002072' 625015 167340 + 002073' 727504 071312 + 002074' 707535 171312 + 002075' 621020 000000 + 002076' 265040 002155' ERR2: ERRPNT </?Incorrect Project-Programmer number!/> + 002077' 376235 661736 + 002100' 713454 561750 + 002101' 202416 267724 + 002102' 627076 426640 + 002103' 713374 771302 + 002104' 667334 571100 + 002105' 673535 561312 + 002106' 711020 000000 + 002107' 265040 002155' ERR2A: ERRPNX </?Illegal protection!/> + 002110' 376235 466312 + 002111' 637035 420340 + 002112' 713376 462706 + 002113' 723235 767102 + 002114' 000000 000000 + IFE BLOC0,< + 002115' 265040 002155' ERR7A: ERRPNT <Z?DECtape I/O only!Z>> + 002116' 376110 541750 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 41-2 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 002117' 607414 520222 + 002120' 276364 067734 + 002121' 663624 100000 + + 002122' 265040 002155' ERR8: ERRPNT </?Explicit output device required!/> + 002123' 376137 070330 + 002124' 647075 172100 + 002125' 677536 470352 + 002126' 721014 462754 + 002127' 647074 520344 + 002130' 627436 564744 + 002131' 627104 100000 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 42 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + ;ROUTINE TO CHECK INPUT DEV, SET XXXIN.E.G.DTAIN + + 002132' 200000 004637' CHECK1: MOVE 0,DEVICE ;INPUT DEVICE NAME TO AC 0 + 002133' 322000 002152' JUMPE 0,CHECK ;IGNORE IF NO INPUT DEVICE + IFN FTDSK,<PUSHJ P,PSYSP ; STR# 10-3178> + 002134' 047000 000004 DEVCHR ;GET INPUT DEVCHR + IFN FTDSK,<TLNN 0,DSKBIT ;INPUT DEVICE DISK? + JRST CHECK2 ;NO + TRO AUXFLG,DSKIN;INPUT DEVICE IS DSK, SET BIT + MOVE T1,DEVICE + CAMN T1,[SIXBIT/SYS/] ; INIT SYS AS DSK + MOVSI T1,(SIXBIT/DSK/) + MOVEM T1,ADSK + JRST CHECK> + + 002135' 322000 000525' CHECK2: JUMPE 0,DEVER1 ;NON-EX. DEVICE + + 002136' 607000 000002 TLNN 0,INBIT ;CAN DEVICE DO INPUT? + 002137' 254000 002040' JRST ERR6A ;NO, COMMD ERROR + + 002140' 603000 000200 TLNE 0,PTRBIT ;PAPER TAPE READER? + 002141' 660540 200000 TRO AUXFLG,PPTIN;YES + + 002142' 603000 000004 TLNE 0,DTABIT ;DECTAPE? + 002143' 660540 020000 TRO AUXFLG,DTAIN + + 002144' 603000 000020 TLNE 0,MTABIT ;MAGTAPE? + 002145' 660540 000400 TRO AUXFLG, MTAIN + + 002146' 603000 100000 TLNE CDRBIT ;CARD READER? + 002147' 660540 000100 TRO AUXFLG,CDRIN + + 002150' 603000 000010 TLNE 0,TTYBIT ;TELETYPE? + 002151' 660540 001000 TRO AUXFLG,TTYIN + + 002152' 602740 001000 CHECK: TRNE CALFLG,SSWTCH ;_FLAG STILL ON? + 002153' 254000 002040' JRST ERR6A ; YES ,COMMAND ERROR + 002154' 263240 000000 POPJ P, ; NO, RETURN + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 43 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;SUBR TO PRINT ERROR MESSAGES + ;! MARKS THE END OF MESSAGE & SIGNALS GO TO PIP2 + ;NULL IS A FLAG TO RETURN TO THE NEXT LOCATION + + 002155' PRETXT: + 002155' 071240 000000 PTEXT: RELEAS DIR, ;RELEASE DIRECTORY DEVICE + + 002156' 071200 000000 RELEAS TAPE, ;RELEASE MAGTAPE + 002157' 071100 000000 RELEAS OUT, ;LET GO OF BOTH OUTPUT AND + 002160' 071140 000000 RELEAS IN, ;INPUT DEVICES + 002161' 265440 000541' JSP T5,INICN1 ;INITIALIZE THE TTY + 002162' 201000 000015 MOVEI 0,CR + 002163' 136000 003757' IDPB 0,TFO+1 ;OUTPUT A CR-LF + 002164' 201000 000012 MOVEI 0,LF + 002165' 136000 003757' IDPB 0,TFO+1 ;FOR BATCH + 002166' 505040 440700 PTEXT2: HRLI T1,440700 ;GET SET TO SCAN 7-BIT DATA + 002167' 134000 000001 PTEXT1: ILDB 0,T1 ;GET CHAR OF ERR MESSAGE + 002170' 322001 000001 JUMPE 0,1(T1) ;RETURN ON ZERO + 002171' 306000 000041 CAIN 0,"!" ;!? + 002172' 254000 000013' JRST PIP2 ;YES, END OF MESSAGE, APPEND CAR.RET., LF + 002173' 136000 003757' IDPB 0,TFO+1 ;DEPOSIT CHAR IN OUTBUFFER + 002174' 254000 002167' JRST PTEXT1 ;GET NEXT CHAR + + ;ROUTINE TO DEPOSIT CHARACTER IN TTY OUT BUFFER + + 002175' 377000 003760' PUTCON: SOSG TFO+2 ;STORED MORE THAN BUFFER HOLDS? + 002176' 067040 000000 OUTPUT CON, ;YES + 002177' 136200 003757' IDPB CHR,TFO+1 + 002200' 263240 000000 POPJ P, + + ;ROUTINE TO CONVERT ONE WORD OF SIXBIT + ;FROM ADDRESS IN LOCATION AFTER CALL AND DEPOSIT INTO TTY OUT BUFFER + + 002201' 200065 000000 P6BIT: MOVE T1,@(P) ;PICK UP WORD OF 6-BIT + 002202' 505040 440600 HRLI T1,440600 ;SET UP POINTER + 002203' 134200 000001 P6BIT1: ILDB CHR,T1 + 002204' 322200 002207' JUMPE CHR,P6BIT2 + 002205' 271200 000040 ADDI CHR,40 + 002206' 260240 002175' PUSHJ P,PUTCON ;DEPOSIT IN TTY + 002207' 603040 770000 P6BIT2: TLNE T1,770000 ;DONE SIX? + 002210' 254000 002203' JRST P6BIT1 ;NO + 002211' 254000 001707' JRST CPOPJ1 ;SKIP RETURN + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 44 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;ROUTINE TO CLEAR DSK OR DTA DIRECTORY (/Z SWITCH) + + 002212' 606740 000200 DTCLR: TRNN CALFLG,DVSWTH ;HAS A DEVICE BEEN SEEN? + 002213' 254000 002122' JRST ERR8 ;NO,SO DON'T SCREW USER + IFN FTDSK,<TRNE AUXFLG,DSKOUT ;CLEAR DSK OR DTA DIR. + JRST DSKZRO> + 002214' 606540 004000 TRNN AUXFLG,DTAOUT ;MUST BE DTA + 002215' 254000 002066' JRST ERR5 + 002216' 047100 000013 UTPCLR OUT, ;CLEAR DIRECTORY + 002217' 263240 000000 POPJ P, + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 45 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;ROUTINE TO SET UP TO COPY EVERYTHING + + 002220' 260240 000426' PRECOP: PUSHJ P,ININIT ;INIT INPUT FILE + 002221' 606540 020000 TRNN AUXFLG,DTAIN ;DECTAPE INPUT + 002222' 254000 002225' SKIP 2 ;NO + 002223' 260240 003272' PUSHJ P,DTCH2 ;YES, GET DIRECT, SET POINTERS TO DIRECT + + 002224' 260240 002702' DTCOPY: PUSHJ P,DTADI1 ;START (T5) + IFN FTDSK,<TRNE AUXFLG,DSKIN ;DSK INPUT. ENTER HERE FROM DTD2 + PUSHJ P,DSKDIR ;YES, PREPARE TO LOOKUP FILES> + 002225' 402000 004034' COPY1A: SETZM ZCNT ;CLEAR COUNT FOR DSK ZERO REQUESTS + 002226' 201100 000006 MOVEI T2,6 ;FILL 0 CHARS. IN DEST-FILE + 002227' 200040 004700' MOVE T1,[POINT 6,DTON] ;NAME WITH X'S. THIS IS + 002230' 134000 000001 XSS: ILDB 0,T1 ;THEN THE BASE FOR GENERATED + 002231' 326000 002233' JUMPN 0,.+2 ;DESTINATION FILES FROM + 002232' 201000 000070 MOVEI 0,"X"-40 ;NON-DIR. DEVICES IN /X + 002233' 137000 000001 DPB 0,T1 + 002234' 367100 002230' SOJG T2,XSS ;DON'T YET KNOW IF ONE + ;OF THE INPUT DEV. WILL + 002235' 200000 004044' MOVE 0,DTON ;BE NON-DIR + 002236' 202000 004021' MOVEM 0,DTONSV + 002237' 200000 004045' MOVE 0,DTON+1 + 002240' 202000 004022' MOVEM 0,DTONSV+1 + + 002241' 260240 002371' COPY1: PUSHJ P,SR2 ;SET INIT. COPYING MODE + 002242' 260240 002566' PUSHJ P,LOOK ;GET A FILE TO COPY + 002243' 254000 002317' JRST CAL6 ;NO MORE + IFN FTDSK<PUSHJ P,XDDSK ;GOT ONE, CHECK (XD) FROM DSK, NAMTAB + JRST COPY1 ;IN LIST, DON'T COPY> + 002244' 606540 201500 TRNN AUXFLG,MTAIN+PPTIN+CDRIN+TTYIN ;OK, COPY FILE + 002245' 254000 002250' JRST COPY6A ;MUST BE DIRECTORY DEVICE + 002246' 260240 002337' PUSHJ P,MTPTCR ;SET UP A DEST. FN. + 002247' 254000 002252' JRST COPY6 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 46 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 002250' 076140 004052' COPY6A: LOOKUP IN,ZRF ;LOOKUP INPUT FILE NAME + 002251' 254000 002315' JRST CAL5 ;INPUT FILE FILE PROTECTED + 002252' 260240 003353' COPY6: PUSHJ P,FILTYP ;CHECK FOR DMP,SAV,REL,CHN + IFN WCH,< + TRNN AUXFLG,DTAIN+DTAOUT + JRST .+5 + HLRZ 0,ZRF+1 + CAIE 0,(SIXBIT /DMP/) + IFN DISK30,<CAIN 0,(SIXBIT/SVE/)> + IFE DISK30,<CAIN 0,(SIXBIT/SAV/)> + JRST COPY1> + 002253' 260240 002323' PUSHJ P,COPY3 + 002254' 200000 004052' COPY6B: MOVE 0,ZRF ;INPUT FILE NAME + 002255' 202000 004044' MOVEM 0,DTON ;IS OUTPUT FILE NAME + 002256' 510000 004053' HLLZ 0,ZRF+1 ;LIKEWISE EXT + 002257' 512000 004045' HLLZM 0,DTON+1 + + ;THIS CODE OPERATES AS FOLLOWS - FOR E+2, SET = 0 + ;TO START (ASSUMING /X) + ;DSK TO DSK IF EDIT SWITCHES PUT E+2 = 0 IF NO EDITS TRANSFER + ; DATE, TIME, BITS 13-35 + ;DSK TO DTA FOR EDITS E+2 = 0, NO EDITS TRANSFER 24-35 FOR + ;DATE, FOR"SAV" FILES TRANSLATE NO. 1K BLOCKS + ;DTA TO DSK FOR NO EDITS XFER BITS 24-35, ELSE E+2 = 0 + ;DTA TO DTA ALWAYS XFER 18-23, (1K BLOCK) NO EDITS XFER 24-35(DATE) + + 002260' 402000 004046' SETZM DTON+2 ;CLEAR DATE. OUTPUT FILE, DSK/DTA + 002261' 135000 003717' LDB 0,DATE ;GET DSK/DTA DATE CREATED + 002262' 616300 004701' TDNN FLAG,[XWD PFLG,LINE+TBMOD+NSMOD+SQMOD+SPMOD] + 002263' 603540 000040 TLNE AUXFLG,CDRFLG + 002264' 254000 002266' JRST COPY6C + 002265' 137000 003720' DPB 0,DATED ;DEPOSIT IF NO EDITS + IFN FTDSK,<LDB 0,TIME + TRC AUXFLG,DSKIN+DSKOUT + TRCN AUXFLG,DSKIN+DSKOUT + DPB 0,TIMED ;DSK TO DSK TIME> + 002266' COPY6C: IFE WCH,< + 002266' 260240 002412' PUSHJ P,OKBLKS ;SETUP 1K BLOCKS> + 002267' 077100 004044' ENTER OUT,DTON ;GOT DATA, CREATE NEW FILE + 002270' 254000 002024' JRST ERR4 ;DIRECTORY FULL + 002271' 200000 003721' MOVE 0,ZRO ;GET ASCII/00000/AND + 002272' 202000 004014' MOVEM 0,SQNUM ;RESET SEQUENCE NO. + 002273' 661300 000020 TLO FLAG,NEWFIL ;SET NEW FILE FLAG + 002274' 402000 004026' SETZM TOTBRK ;CLEAR PAREN COUNTER + 002275' 607540 000044 TLNN AUXFLG,CDRFLG+SBIN ;SPECIAL PROCESSING? + 002276' 612300 004702' TDNE FLAG,[XWD PFLG+IFLG+IBFLG,LINE+BMOD+TBMOD+NSMOD+SQMOD+SPMOD] + 002277' 254000 000343' JRST PSCAN ;YES, DO IT + 002300' 375000 003744' COPY5: SOSGE IBF+2 ;INPUT BUFFER EMPTY? + 002301' 254000 002305' JRST COPY4 ;YES + 002302' 134200 003743' ILDB CHR,IBF+1 ;GET NEXT WORD AND + 002303' 260240 000756' PUSHJ P,PUT ;OUTPUT IT + 002304' 254000 002300' JRST COPY5 + 002305' 260240 002323' COPY4: PUSHJ P,COPY3 ;GET NEXT FULL SOURCE BLOCK + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 46-1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 002306' 260240 000762' PUSHJ P,OUTP ;OUTPUT PREV. BLOCK-DONT ALTER DATA + 002307' 350000 003747' AOS OBF+2 ;MAKE PUT HAPPY BECAUSE OF + 002310' 254000 002300' JRST COPY5 ;OUTPUT HERE. + 002311' 070140 000000 COPY2A: CLOSE IN, + 002312' 070100 000000 CLOSE OUT, + IFN FTDSK,<TLNE AUXFLG,NSPROT ;NON-STANDARD PROTECTION? + TRNN AUXFLG,DSKOUT ;RENAME ALL OUTPUT FILES IF + JRST COPY2B ;NON-STANDARD PROTECTION + MOVE 0,PROTS ;GET NEW PROTECTION + MOVEM 0,DTON+2 + + RENAME OUT,DTON ;RENAME OUTPUT FILE + JRST DERR6> + 002313' 260240 000764' COPY2B: PUSHJ P,OUTP1 + 002314' 254000 002241' JRST COPY1 ;GO GET NEXT FILE + + 002315' 350000 004034' CAL5: AOS ZCNT ;INPUT FILE READ PROT. + 002316' 254000 002241' JRST COPY1 ;COUNT READ FAILURES + + ;NO MORE FILES TO COPY + + 002317' 621540 000002 CAL6: TLZ AUXFLG,NSPROT + IFN FTDSK,< SKIPN ZCNT ;FILES READ PROTECTED ?> + 002320' 254000 000411' JRST MAIN1 ;NO + IFN FTDSK,<MOVSI T4,(SIXBIT /X/) ;YES,PRINT FAILURE DURING + JRST DSKZ5 ;/X REQUEST> + + 002321' 332000 003744' COPY3B: SKIPE IBF+2 ;EMPTY BLOCK? + 002322' 263240 000000 POPJ P, ;NO, RETURN + + 002323' 260240 001616' COPY3: PUSHJ P,INP ;READ NEXT BLOCK + 002324' 622540 002000 TRZE AUXFLG,READ1 + 002325' 260240 002376' PUSHJ P,TTYZ ;END OF FILE FROM TTY? + 002326' 606400 020000 TRNN IOS,EOFBIT ;END OF FILE? IOS HAS STATUS BITS + 002327' 254000 002321' JRST COPY3B ;NO. + 002330' 262240 000000 POP P,0 ;FIND WHERE CALLED FROM + 002331' 553000 000000 HRRZS 0 + 002332' 602540 201500 TRNE AUXFLG,MTAIN+CDRIN+TTYIN+PPTIN + 002333' 302000 002254' CAIE 0,COPY6B ;DID WE COME FROM COPY6B-1 + 002334' 254000 002311' JRST COPY2A ;NO, EOF NOT FIRST DATA IN FILE + 002335' 620740 000037 TRZ CALFLG,ALLCLF ;END OF INFO ON NON-DIR. DEVICE + 002336' 254000 002241' JRST COPY1 + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 47 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;CREATE DESTINATION FILE NAME. RANGE IS ...001 TO ...999 + + 002337' 350040 004051' MTPTCR: AOS T1,NO. + 002340' 303040 001747 CAILE T1,^D999 + 002341' 254000 002350' JRST MPC2 + 002342' 260240 002362' PUSHJ P,MTPTC1 + 002343' 200000 004021' MOVE 0,DTONSV ;FILNAM=DTON IS ONLY WAY TO IDENTIFY + 002344' 202000 004052' MOVEM 0,ZRF ;INPUT FILE + 002345' 200000 004022' MOVE 0,DTONSV+1 + 002346' 202000 004053' MOVEM 0,ZRF+1 + 002347' 263240 000000 POPJ P, + 002350' 265040 002155' MPC2: ERRPNT <Z?Terminate /X, max. of 999 files processed!Z> + 002351' 376514 571332 + 002352' 647354 172312 + 002353' 201373 026100 + 002354' 667037 027100 + 002355' 677144 034562 + 002356' 345014 664730 + 002357' 627464 070344 + 002360' 677074 571746 + 002361' 627104 100000 + + 002362' 201641 001750 MTPTC1: MOVEI DOUT,^D1000(T1) + 002363' 200040 004703' MOVE T1,[POINT 6,DTONSV,17] + 002364' 265100 003235' JSP T2,OUTDC1 + 002365' 344100 001711' AOJA T2,CPOPJ + 002366' 275200 000040 SUBI CHR,40 + 002367' 136200 000001 IDPB CHR,T1 + 002370' 263240 000000 POPJ P, + + ;ROUTINE TO RESTORE BYTE POINTERS TO INITED MODE + ;FOR INPUT AND OUTPUT DEVICES + + 002371' 200000 003740' SR2: MOVE 0,SVIBF + 002372' 502000 003743' HLLM 0,IBF+1 + 002373' 200000 003741' MOVE 0,SVOBF + 002374' 502000 003746' HLLM 0,OBF+1 + 002375' 263240 000000 POPJ P, + + ;ROUTINE TO SEE IF ^Z FIRST CHAR ON TTY + + 002376' 606540 001000 TTYZ: TRNN AUXFLG,TTYIN ;SEE IF FIRST CHAR. IS ^Z + 002377' 263240 000000 POPJ P, ;NOT TTY INPUT + 002400' 550040 003743' HRRZ T1,IBF+1 ;ON TTY + 002401' 554001 000001 HLRZ 0,1(T1) ;GET FIRST CHARACTER + 002402' 620000 003777 TRZ 0,3777 ;CLEAR ANY OTHER CHAR. + 002403' 306000 150000 CAIN 0,(<CZ>B6) ;IS IT ^Z? + 002404' 664400 020000 TROA IOS,EOFBIT ;YES,SET END OF FILE + 002405' 302000 104000 CAIE 0,(<XON>B6) ;IS IT XON "^Q" + 002406' 263240 000000 POPJ P, ;NO + 002407' 205000 774000 MOVSI 0,(<DEL>B6) ;A RUBOUT + 002410' 436001 000001 IORM 1(T1) ;CLEAR "^Q" FROM BUFFER + 002411' 263240 000000 POPJ P, ;AND RETURN + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 48 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + IFE WCH,< + ;DTA TO DTA MAINTAIN BITS 18-23 OF E+2 IF SET + ;DSK TO DSK NO TRANSLATION (E+2) + ;DSK TO DTA TRANSLATE E+3 (LHS) INTO E+2 (18-23) + ;DTA TO DSK NO TRANSLATION (E+2) + ;THIS ROUTINE ENSURES "SAVE" FILES MAINTAIN + ;CORRECT DATA FOR LOADING. FOR DSK INPUT + ;A "SAVE" FILE IS ONE WITH THE EXTENSION + ;"SAV". E+3 = (-[(200XN)+NO. WDS IN LAST BLOCK] + ;IN LHS TRANSLATE TO NO. 1K BLOCKS NEEDED + ;TO LOAD FILE - BEFORE IT IS EXPANDED IN CORE. + + 002412' 606740 020000 OKBLKS: TRNN CALFLG,RXFLG ;(RX)? + 002413' 254000 002422' JRST OKBLK0 ;NO + 002414' 200000 004647' MOVE 0,MATCH ;GET FILE NAME + 002415' 554040 004650' HLRZ T1,MATCH+1 ;AND EXT. + 002416' 312000 003730' CAME 0,STAR ;SKIP IF NAME IS "*" + 002417' 202000 004044' MOVEM 0,DTON ;OTHERWISE REPLACE NAME + 002420' 302040 120000 CAIE T1,(SIXBIT /*/) ;SAME FOR EXT + 002421' 506040 004045' HRLM T1,DTON+1 + 002422' 200000 004044' OKBLK0: MOVE 0,DTON ;GET OUTPUT FILE NAME + 002423' 554040 004045' HLRZ T1,DTON+1 ;AND EXT + 002424' 302040 120000 CAIE T1,(SIXBIT /*/) ;IS IT "*" + 002425' 316000 003730' CAMN 0,STAR ;IS IT "*" + 002426' 254000 002033' JRST ERR4B ;YES, ERROR + + REPEAT 0,< ;NEEDS FIX TO TENDMP OR MONITOR + TRNE AUXFLG,DTAOUT ;OUTPUT TO DTA? + CAIE T1,(SIXBIT /SAV/) ;AND A SAV FILE? + SKIP 1 ;NO + UGETF OUT,0 ;SET TO FIRST FREE BLOCK + > + + IFN FTDSK,<TRC AUXFLG,DSKIN+DSKOUT ;DSK I/O + TRCN AUXFLG,DSKIN+DSKOUT + POPJ P, ;YES, EXIT + TRC AUXFLG,DTAIN+DTAOUT ;NO + TRCE AUXFLG,DTAIN+DTAOUT ;DTA I/O + JRST OKBLK1 ;NO> + 002427' 135000 003716' LDB 0,OKB ;DTA I/O - 1K BLKS + 002430' 137000 003715' DPB 0,OKBD ;DEPOSIT IN DTON + 002431' 263240 000000 POPJ P, + + IFN FTDSK,< + OKBLK1: TRC AUXFLG,DTAIN+DSKOUT ;DTA-TO-DSK + TRCN AUXFLG,DTAIN+DSKOUT + POPJ P, ;YES + TRC AUXFLG,DSKIN+DTAOUT ;NO,DSK-TO-DTA? + TRCE AUXFLG,DSKIN+DTAOUT ;NO + POPJ P, + HLRZ 0,ZRF+1 ;YES DSK-TO-DTA + IFE DISK30,< + CAIE 0,(SIXBIT /SAV/) ;GET LOOKED UP EXT,(INPUT). + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 48-1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + > + IFN DISK30,<CAIE 0,SIXBIT /SVE/> + POPJ P, + HLRO T1,ZRF+3 ;EXTENSION=SAV + MOVNS T1 ;WORD COUNT + IDIVI T1,2000 ;DIVIDE BY 1K CORE(OCTAL LOCS.) + JUMPN T2,.+2 + SOJ T1, ;N-1 + DPB T1,OKBD + POPJ P,>> + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 49 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + IFN FTDSK,< + ;ARE WE DOING (XD) FROM DSK? IF NOT, EXIT. + ;SEE IF CURRENT FILE SELECTED IN ZRF IS IN THE + ;LIST OF FILES NOT TO BE COPIED. (POPJ IF IT IS) + + XDDSK: TRC FLAG,XFLG+DFLG ;COMPLEMENT + TRCN FLAG,XFLG+DFLG ;RESET AND TEST + TRNN AUXFLG,DSKIN ;/X AND /D WERE SET + JRST CPOPJ1 ;NOT DSKIN SO COPY FILE + HRROI T1,-12 ;SET TO LOOP NAMTAB + XDDSK2: MOVE T2,ZRF ;GET FILE NAME + SKIPN T3,NAMTAB+12(T1) ;END OF TABLE ENTRIES? + JRST CPOPJ1 ;YES, EXIT + CAME T2,T3 ;FN IS * OR MATCH? + CAMN T3,STAR + SKIP 1 ;YES, * OR MATCH? + JRST XDDSK1 ;NO MATCH + HLLZ T2,ZRF+1 ;GET EXT + SKIPN T3,NAMTAB+24(T1) ;NO EXT MATCH WANTED + POPJ P, ;EXIT THEN + CAME T2,T3 ;EXT IS * OR MATCH? + CAMN T3,STAR + POPJ P, ;FN EX MATCH, NO COPY + XDDSK1: AOJL T1,XDDSK2 ;TRY ANOTHER FOR MATCH + JRST CPOPJ1 ;SEARCHED TABLE, NO MATCH> + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 50 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;ROUTINE TO DELETE OR RENAME FILES ON DTA OR DSK OR SET UP NAMTAB + ;FOR (DX) (DISK ONLY) + + 002432' 602300 002000 DTDELE: TRNE FLAG,XFLG ;/X + 002433' 254000 002443' JRST DELE1 ;YES + 002434' 606300 000010 TRNN FLAG,DFLG ;/D NEED EXPLICIT DEVICE + 002435' 254000 002440' SKIP 2 + 002436' 606740 000200 TRNN CALFLG,DVSWTH ;-1 IF DEVICE SEEN + 002437' 254000 002122' JRST ERR8 ;NO, ERROR + 002440' 200000 004634' MOVE 0,ODEV ;OUTPUT DEVICE + 002441' 202000 004637' MOVEM 0,DEVICE ;NO,SET DEVICE FOR INPUT + 002442' 202000 004050' MOVEM 0,DEVA + 002443' 620540 261500 DELE1: TRZ AUXFLG,DTAIN+CDRIN+TTYIN+PPTIN+MTAIN+DSKIN + 002444' 260240 002132' PUSHJ P,CHECK1 ;RESET INPUT DEVICE DESCRP + 002445' 201000 003766' MOVEI 0,NAMTAB ;FOR /R GET NEW NAME + 002446' 505000 004044' HRLI 0,DTON ;SET TO BLT OUTPUT DIRECT ENTRY + 002447' 251000 003771' BLT 0,NAMTAB+3 ;TO NAMTAB + + 002450' 606540 060000 TRNN AUXFLG,DTAIN+DSKIN + 002451' 254000 002066' JRST ERR5 ;NOT DTA OR DSK + 002452' 260240 002746' PUSHJ P,FNSET ;SET UP CALFLG CORRECTLY + 002453' 602300 002000 TRNE FLAG,XFLG ;/X? + 002454' 254000 002456' JRST DTD1 ;YES, (DX). RX ILLEGAL + IFN FTDSK,<TRNE AUXFLG,DSKOUT ;NO, HAS TO BE /D OR /R + JRST DSKDR0 ;ON DSK> + 002455' 254000 002460' JRST DTADR ;OR DTA + + 002456' DTD1: + IFN FTDSK,<TRNE AUXFLG,DSKIN ;DSK INPUT? + JRST DTD1A ;YES> + 002456' 260240 003271' PUSHJ P,DTCHECK ;NO, HAS TO BE DTA, GET DIR + 002457' 254000 002466' JRST DELE3 ;DELETE, FILES FROM DIR + IFN FTDSK,< + DTD1A: SETZM NAMTAB ;COLLECT NAMES FOR DX, DSK SOURCE + MOVE T1,[XWD NAMTAB,NAMTAB+1] + BLT T1,NAMTAB+23 ;FIRST CLEAR TABLE + MOVEI T1,NAMTAB ;LOCATION OF NAMTAB + MOVEM T1,LOCNAM + DTD4: MOVE 0,FILNAM + JUMPE 0,DTD4A ;FN=0 ILLEGAL + MOVE T1,LOCNAM + MOVEM 0,(T1) ;STORE FILENAME FROM CS + MOVE 0,FILEX ;STORE FILE EXT + MOVEM 0,12(T1) ;TABLE FULL? + MOVEI T2,NAMTAB+11 + CAMN T2,T1 + SOS ESWTCH ;YES + SKIPE ESWTCH ;NO, END OF CS SCAN? + JRST DTD2 ;END OF NAME PROCESSING + AOS T1,LOCNAM ;SET TO STORE IN NEXT SLOT NAMTAB + DTD4B: PUSHJ P,DESCRP ;NO, GET NEXT FILENAME FROM CS + TRNE CALFLG,NEWPP!NEWDEV + JRST ERR5A ;ERROR, NEW DEV OR# PP + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 50-1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + JRST DTD4 + DTD4A: PUSHJ P,ERR3A + JRST DTD4B + + ;END OF CS OR NAMTAB FULL + DTD2: PUSHJ P,ININIT ;INIT INPUT FILE + MOVEI T1,1 ;SET TO RETURN DTCOPY+1 + JRST DTD5> + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 51 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;ROUTINE TO DELETE OR RENAME FILES ON DTA + + 002460' 260240 003271' DTADR: PUSHJ P,DTCHECK ;GO GET DTA DIRECTORY + 002461' 200040 003742' MOVE T1,IBF ;CURRENT INPUT BUFFER + IFN WCH,< + USETO OUT,1 ;TRY TO WRITE OUTPUT TAPE + > ;DETERMINE IF WRITE LOCKED + IFE WCH,< + 002462' 075100 000144 USETO OUT,144> ;THIS SHOULD GIVE ERROR MSG + 002463' 067101 000000 OUTPUT OUT,(T1) ;IF DTA WRITE LOCKED + 002464' 260240 003271' PUSHJ P,DTCHECK ;GO GET DTA DIRECTORY + + 002465' 260240 002711' PUSHJ P,INFO ;WRITE "FILES DELETED/RENAME + + ;********************************************************************* + + + ;LOOP TO DELETE/RENAME. FOR (DX) DELETE FILES FROM DTA DIR + ;THEN USE REVISED DIRECTORY TO COPY ALL REMAINING FILES + + + 002466' 260240 002566' DELE3: PUSHJ P,LOOK ;GET FILE TO DELETE OR RENAME FROM CS + 002467' 254000 002513' JRST DELE5 ;NO MORE FILES + 002470' 606300 002000 TRNN FLAG,XFLG ;/X? + 002471' 260240 002743' PUSHJ P,INFO3 ;PRINT FILENAME-EXT + 002472' 200040 004012' MOVE T1,DIRST ;GOT A MATCH - PROCESS IT + 002473' 602300 000100 TRNE FLAG,RFLG ;AND IT IS AT (T5) IN (DTA) DIR + 002474' 254000 002522' JRST DTRNAM ;RENAME + IFN WCH,< + SKIPA T2,T1 + ADDI T2,4 + SKIPE 4(T2) + JRST .-2 + HRLS T1 + ADDI T1,4 ;GET TO END OF NAMES + MOVSS T1 ;BLOCK UP DIR + BLT T1,-1(T2) ;ZERO OUT LAST 4 WORDS + SETZM (T2) + SETZM 1(T2) + SETZM 2(T2) + SETZM 3(T2) + MOVE T1,DIRST1 + MOVEM T1,DIRST + JRST DELE3> + IFE WCH,< + 002475' 402001 000000 SETZM (T1) ;DELETE FILENAME IN CORE DIRECT + 002476' 402001 000026 SETZM 26(T1) ;DELETE EXT + 002477' 274040 004013' SUB T1,DIRST1 ;GET FILE "NUMBER" (POS IN DIRECT) + 002500' 201140 001102 MOVEI T3,1102 ;TO LOOK AT ALL BLOCKS + 002501' 205100 440500 MOVSI T2,(POINT 5,0) + 002502' 540100 004013' HRR T2,DIRST1 ;TO CALCULATE ADDRESS OF FIRST WORD + 002503' 275100 000122 SUBI T2,122 ;OF BLOCK TABLE IN DIRECTORY + 002504' 363140 002466' DELE2: SOJLE T3,DELE3 ;LOOK AT 1101 BLOCKS + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 51-1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 002505' 134000 000002 ILDB 0,T2 ;GET BLOCK NUMBER + 002506' 312000 000001 CAME 0,T1 ;IS IT SAME AS FILE "NUMBER" + 002507' 254000 002504' JRST DELE2 ;NO IGNORE + 002510' 400000 000000 SETZ 0, ;FREE THE BLOCKS OF THIS FILE + 002511' 137000 000002 DPB 0,T2 ;CLEAR OUT BLOCK NUMBER + 002512' 254000 002504' JRST DELE2> ;LOOP ON 1102 BLOCKS + 002513' 200040 003742' DELE5: MOVE T1,IBF ;LOC OF INPUT BUFFER + 002514' 602300 002000 TRNE FLAG,XFLG ;DX SWITCH? + 002515' 254000 002543' JRST DTD6 ;YES, NOW MUST COPY REMAINING FILES + IFN WCH,< + USETO OUT,1> + IFE WCH,< + 002516' 075100 000144 USETO OUT,144> + 002517' 067101 000000 OUTPUT OUT,(T1) ;OUTPUT DTA DIRECTORY + 002520' 071040 000000 RELEAS CON, ;OUTPUT DELETE OR RENAME INFO TO TTY + 002521' 254000 000415' JRST MAINB + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 52 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;ROUTINE TO RENAME FILE ON DECTAPE + + 002522' 260240 002553' DTRNAM: PUSHJ P,RENAME + 002523' 402000 004046' SETZM DTON+2 ;MAKE MONITOR SUPPLY + 002524' 402000 004047' SETZM DTON+3 ;DATE TIME + 002525' 076100 004044' LOOKUP OUT,DTON ;LOOK UP FILENAME-EXT ON OUTPUT DEV + 002526' 254000 002530' SKIP 1 ;NO FILE ALREADY OF DESTINATION NAME + 002527' 254000 002536' JRST DTRNM1 + 002530' 200000 004044' MOVE 0,DTON ;RENAME, FILENAME + 002531' 322000 002466' JUMPE 0,DELE3 ;BUT NOT IF ZERO + 002532' 202001 000000 MOVEM 0,(T1) ;PUT IN DIRECTORY + 002533' 200000 004045' MOVE 0,DTON+1 ;GET EXT + IFE WCH,< + 002534' 502001 000026 HLLM 0,26(T1)> ;RENAME, EXT + IFN WCH,< + HLLM 0,1(T1)> + 002535' 254000 002466' JRST DELE3 + 002536' 550100 003742' DTRNM1: HRRZ T2,IBF ; GET PROTECTION DIR SLOT + 002537' 135000 004704' LDB 0,[POINT 5,17(T2),14] + 002540' 302000 000036 CAIE 0,36 ; FILE PROTECTION ? + 002541' 254000 001762' JRST ERR9 ; NO,ILLEGAL FILE NAME + 002542' 254000 002466' JRST DELE3 ; RENAME DONE AT MAINB + + ;END OF LOOP + ;********************************************************************* + ;DX SWITCH ON, COPY ALL BUT SPECIFIED FILES. I.E. THOSE NOT DELETED + + 002543' 201040 000000 DTD6: MOVEI T1,0 ;SET TO RETURN TO DTCOPY + 002544' 205000 120000 DTD5: MOVSI 0,(SIXBIT /*/) + 002545' 202000 004040' MOVEM 0,FILNAM ;FORCE COPY-ALL + 002546' 202000 004041' MOVEM 0,FILEX ;BY MAKING FILE-EXT=*.* + 002547' 260240 002746' PUSHJ P,FNSET ;FIND DETAILS OF FILE-EXT + 002550' 602540 020000 TRNE AUXFLG,DTAIN ;DTA INPUT + 002551' 260240 003277' PUSHJ P,DTCH1 ;INIT DIRST,DIRST1 + IFN RIMSW, < + TLNE FLAG,RIMFLG ;NO + JRST RIMTB + > + 002552' 254001 002224' JRST DTCOPY(T1) + + + ;SET UP OUTPUT DIRECTORY ENTRY FOR RENAME + ;ONLY ONE FILE NAME ALLOWED, BUT MAY BE *.EXT OR FN.* + + 002553' 331000 004134' RENAME: SKIPL ESWTCH ;SKIP IF CR,LF SEEN IN C.S. + 002554' 254000 002040' JRST ERR6A ;ONLY 1 SOURCE FILE DESCRIPTOR ALLOWED + 002555' 554000 003767' HLRZ 0,NAMTAB+1 ;GET EXT + 002556' 306000 120000 CAIN 0,(SIXBIT /*/) ;USE SPEC. EXTENSION, BUT IF + 002557' 554000 004053' HLRZ 0,ZRF+1 ;EXT.=*, USE SOURCE EXTENSION + 002560' 506000 004045' HRLM 0,DTON+1 ;USE SPECIFIED EXT + 002561' 200100 003766' MOVE T2,NAMTAB ;USE SPEC. FN, BUT IF + 002562' 316100 003730' CAMN T2,STAR ;FN=* OR 0, USE SOURCE FILENAME + 002563' 200100 004052' MOVE T2,ZRF ;SOURCE FILE NAME=DEST + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 52-1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 002564' 202100 004044' MOVEM T2,DTON ;USE SPECIFIED FILENAME + 002565' 263240 000000 POPJ P, + + + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 53 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;THIS ROUTINE GETS NEXT FILENAME.EXT FROM CS + ;THEN SEES IF ONE IN DIRECTORY MATCHES + ;IF IT DOES - EXIT IS CPOPJ1 + ;NO-MORE-FN.EX-TO-HANDLE-EXIT IS POPJ + ;PREPARE ZRF FOR A "LOOKUP" ON THE NEXT REQUESTED FILE. + + 002566' 602740 000001 LOOK: TRNE CALFLG,FNEX ;DOES FILNAM, FILEX CONTAIN + 002567' 254000 002572' JRST LOOK6 ;A FILE TO THINK ABOUT? YES + 002570' 260240 002767' LOOK01: PUSHJ P,LOOKA ;GET ONE (NOTE: DEVICE MAY ALTER) + 002571' 263240 000000 POPJ P, ;NONE, END OF CS + ;RETURN SKIP FROM LOOKA + 002572' 200100 004041' LOOK6: MOVE T2,FILEX ;GET FILE EXT INTO T2 + 002573' 336040 004040' SKIPN T1,FILNAM ;FILNAME AND EXT=0? + 002574' 332100 004041' SKIPE T2,FILEX + 002575' 254000 002577' SKIP 1 ;EITHER FN OR EX N.E.0 + 002576' 254000 002650' JRST LOOK7C ;FN.EX=0, ONE FILE COPY + 002577' 312040 003730' CAME T1,STAR ;FILNAME OR EXT=*? + 002600' 316100 003730' CAMN T2,STAR + 002601' 254000 002640' JRST LOOK7A ;FN OR EX=*, MANY FILES + + 002602' 602540 060000 TRNE AUXFLG,DTAIN+DSKIN ;DONT REQUIRE FILENAME + 002603' 322040 002616' JUMPE T1,LOOK6C ;HERE FOR 0.EX,FN.EX OR FN.0,0.EX ILLEGAL + 002604' 620740 000001 LOOK7B: TRZ CALFLG,FNEX ;IF HERE, ONLY ONE FILE WAS ENTAILED IN REQUEST. + 002605' 606540 060000 TRNN AUXFLG,DTAIN+DSKIN + 002606' 254000 002635' JRST LOOK4 ;GOT A FILE TO HANDLE + + 002607' 260240 002662' LOOK8: PUSHJ P,PICUP ;GET A FILE (ANY) FROM DIRECTORY + 002610' 254000 002623' JRST LOOK2 ;WE GOT A FILE, DOES IT MATCH? + 002611' 622740 000001 TRZE CALFLG,FNEX ;SEE IF A PARTIC. FILE WAS REQUESTED? + 002612' 254000 002620' JRST LOOK6D ;NO + 002613' 254000 002616' JRST LOOK6C ;YES + + 002614' 260240 002005' LOOK6A: PUSHJ P,ERR3A + 002615' 254000 001107' JRST IOERRN ;NO RECOVERY + 002616' 260240 002005' LOOK6C: PUSHJ P,ERR3A + 002617' 254000 002570' JRST LOOK01 ;GET NEXT FILE FROM CS + + 002620' 626740 000040 LOOK6D: TRZN CALFLG,ASTFLG ;DID WE FIND AT LEAST ONE + 002621' 260240 002005' PUSHJ P,ERR3A ;NO, PRINT MSG. + 002622' 254000 002566' JRST LOOK ;GET NEXT FILE FROM CS + ;CHECK IF FILE.EXT IN DIRECTORY MATCHES FILE TO /D,/R + ;NOTE WE MAY HAVE *.EXT,FIL.*, OR *.* + + + 002623' 606740 000004 LOOK2: TRNN CALFLG,MATFN ;SHOULD FILENAMES MATCH + 002624' 254000 002630' JRST LOOK3 ;NO + 002625' 200040 004040' MOVE T1,FILNAM ;YES + 002626' 312040 004052' CAME T1,ZRF + 002627' 254000 002607' JRST LOOK8 ;NO MATCH + + 002630' 606740 000002 LOOK3: TRNN CALFLG,MATEX ;SHOULD EXTENSIONS MATCH + 002631' 254000 002635' JRST LOOK5 ;NO + 002632' 200040 004041' MOVE T1,FILEX ;YES + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 53-1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 002633' 312040 004053' CAME T1,ZRF+1 + 002634' 254000 002607' JRST LOOK8 ;NO MATCH + LOOK5: IFN DISK30,< + TRNN AUXFLG,DSKIN ;DSK INPUT? + JRST LOOK4 ;NO + LDB T1,UFDIN+1 ;PICKUP P-P# IN DIRECTORY + HRRZM T1,T2 + CAME T2,MASK ;COMPARE WITH OWN P-P# + JRST LOOK8 ;NO MATCH> + 002635' 660540 002000 LOOK4: TRO AUXFLG,READ1 ;READY FOR FIRST READ + 002636' 660740 000040 TRO CALFLG,ASTFLG ;FOUND A FILE *.EXT, F.*,*.* + 002637' 254000 001707' JRST CPOPJ1 ;MATCH OR NO CARES + + ;FILENAME OR EXT=* + 002640' 322100 002642' LOOK7A: JUMPE T2,.+2 ;EXT=0? + 002641' 316100 003730' CAMN T2,STAR ;NO, + 002642' 312040 003730' CAME T1,STAR + 002643' 254000 002645' SKIP 1 + 002644' 254000 002655' JRST LOOK1 ;*.* ALWAYS O.K. AND * + 002645' 606540 060000 TRNN AUXFLG,DSKIN+DTAIN + 002646' 254000 002614' JRST LOOK6A ;*.A OR * ON NON-DIRECT DEV + 002647' 254000 002607' JRST LOOK8 + + 002650' 602540 060000 LOOK7C: TRNE AUXFLG,DSKIN+DTAIN + 002651' 254000 002616' JRST LOOK6C ;0.0 ON DIR DEVICE + 002652' 402000 004052' SETZM ZRF + 002653' 402000 004053' SETZM ZRF+1 + 002654' 254000 002604' JRST LOOK7B ;0.0 ON NON-DIR. DEV. + + 002655' 602540 060000 LOOK1: TRNE AUXFLG,DTAIN+DSKIN + 002656' 254000 002607' JRST LOOK8 + 002657' 402000 004052' SETZM ZRF + 002660' 402000 004053' SETZM ZRF+1 + 002661' 254000 002635' JRST LOOK4 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 54 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;ROUTINE TO GET NEXT FILE NAME FROM DIRECTORY + ;FILNAM, FILEX CONTAIN THE FILE NAME. EXT TO BE + ;MATCHED WITH DIR. NAMES. PUT SUGGESTED FILE + ;NAME EXT IN ZRF, ZRF+1 AND #P-P IN ZRF+3 + ;NOTE THAT WE HAVE TO HANDLE *.EXT,FILE.* + + 002662' PICUP: + IFN FTDSK,<TRNN AUXFLG,DSKIN ;DSK INPUT? + JRST PICUP2 ;N0, DTA + SOSLE UFDIN+2 ;YES + JRST .+3 + PICUP1: PUSHJ P,UIN ;INPUT USER'S FILE DIRECTORY + JRST CPOPJ1 ;EOF ON DSK + ILDB 0,UFDIN+1 ;PICK UP FILENAME + JUMPE 0,PICUP1 ;IGNORE NULL + MOVEM 0,ZRF ;SET FILE NAME + MOVE 0,FNPPN + MOVEM 0,ZRF+3 ;SET DSK #P-P + SOS UFDIN+2 ;COUNT DOWN FOR NEXT TIME + ILDB 0,UFDIN+1 ;SET FILE EX + HLLZM 0,ZRF+1 + IFN DISK30,< + IBP UFDIN+1 ;INCREMENT POINTER TO GET PROJ,PROG # + IBP UFDIN+1> + POPJ P,> + + 002662' PICUP2: + IFN WCH,< + MOVE T5,DIRST ;DIRST=LOC 4 FIRST TIME THRU + ADDI T5,4 ;CALCULATE FIRST/NEXT FILENAME + MOVEM T5,DIRST + MOVE 0,(T5) + JUMPE 0,CPOPJ1 ;NO MORE FILENAMES IN DIRECTORY + MOVEM 0,ZRF + MOVE 0,1(T5)> + IFE WCH,< + 002662' 200140 004013' MOVE T3,DIRST1 ;SETUP TO CHECK ALL FILENAME SLOTS + 002663' 271140 000026 ADDI T3,26 ;IN DIRECTORY (22 FILE NAMES) + 002664' 200440 004012' MOVE T5,DIRST ;LOC OF FIRST/NEXT FILE + 002665' 271440 000001 PICUP4: ADDI T5,1 ; + 002666' 313440 000003 CAMLE T5,T3 ;END OF FILE SLOTS? + 002667' 254000 001707' JRST CPOPJ1 ;END OF FILE NAMES + 002670' 202440 004012' MOVEM T5,DIRST ;NEXT SLOT TO LOOK AT + 002671' 200011 000000 MOVE 0,(T5) ;GOT FILE NAME FROM DIRECT + 002672' 322000 002665' JUMPE 0,PICUP4 ;IGNORE IF 0 + 002673' 202000 004052' MOVEM 0,ZRF + 002674' 200011 000026 MOVE 0,26(T5)> ;GET EXT ETC + 002675' 512000 004053' HLLZM 0,ZRF+1 + 002676' 200000 004043' MOVE 0,PP + 002677' 202000 004055' MOVEM 0,ZRF+3 + 002700' 263240 000000 POPJ P, + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 55 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;READ DTA DIR. AND PREPARE T5 TO PICK UP FIRST ENTRY. + + 002701' 260240 003272' DTADIR: PUSHJ P,DTCH2 ;READ DTA DIR INTO INPUT BUF + 002702' 201140 004400' DTADI1: MOVEI T3,DBUF ;SET BLT FROM INBUF TO DBUF + 002703' 504140 000011 HRL T3,T5 ;FIRST DATA WORD OF DIRECTORY IN T5 + IFN WCH,< + MOVNS T2 + BLT T3,DBUF+176(T2) + SETZM DBUF+177(T2) + MOVEI T5,DBUF-4> + IFE WCH,< + 002704' 251140 004576' BLT T3,DBUF+176 ;MOVE FROM INBUF TO DBUF + 002705' 201440 004522' MOVEI T5,DBUF+123-1> ;LOC OF FIRST FILE NAME + 002706' 202440 004012' MOVEM T5,DIRST ;T5 POINTS TO FILNAME JUST HANDLED + 002707' 202440 004013' MOVEM T5,DIRST1 ;TO RESTORE DIRST + 002710' 263240 000000 POPJ P, ;(IE NONE BUT NEXT WILL BE FIRST) + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 56 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + ;ROUTINE TO OUTPUT FILENAMES THAT WERE DELETED OR RENAMED + ;PRINT "FILES DELETED:" OR "FILES RENAMED:" + ;ALSO USED TO PRINT "NO FILE NAMED XXX.XXX" + + + 002711' 200040 003756' INFO: MOVE T1,TFO ;SETUP TTY FOR OUTPUT + 002712' 200100 003753' MOVE T2,TFI ;SAVE BUFFER LOCS + 002713' 260240 001410' PUSHJ P,INICON ;INIT TTY + 002714' 562100 003753' HRROM T2,TFI ;SET BUFFER LOCS + 002715' 562040 003756' HRROM T1,TFO + 002716' 067040 000000 OUTPUT CON, + 002717' 623540 000100 TLZE AUXFLG,INFOFL ;ERROR PRINT ONLY? + 002720' 254000 002007' JRST ERR3AA ;YES + 002721' 606300 000010 TRNN FLAG,DFLG ;DELETE? + 002722' 254000 002730' JRST INFO1 ;NO, MUST BE RENAME + 002723' 265040 002166' ERRPN2 </Files deleted:/> + 002724' 433235 462746 + 002725' 203114 566312 + 002726' 723134 435000 + 002727' 254000 002735' JRST INFO2 + 002730' 476000 004651' INFO1: SETOM RENSN ;DON'T PRINT IT TWICE + 002731' 265040 002166' ERRPN2 </Files renamed:/> ;RENAME (/R) + 002732' 433235 462746 + 002733' 203454 567302 + 002734' 667134 435000 + 002735' 201200 000015 INFO2: MOVEI CHR,CR ;OUTPUT CR/LF + 002736' 260240 002175' PUSHJ P,PUTCON ;ON TTY + 002737' 201200 000012 MOVEI CHR,LF + 002740' 260240 002175' PUSHJ P,PUTCON + 002741' 067040 000000 OUTPUT CON, + 002742' 263240 000000 POPJ P, + + ;********************************************************************** + ;PRINT FILENAME.EXT OR [P,P].UFD OF FILE DELETED + + 002743' 201140 004052' INFO3: MOVEI T3,ZRF ;LOCATION OF FILENAME + 002744' 260240 001146' PUSHJ P,FN.EX + 002745' 254000 002735' JRST INFO2 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 57 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;/X OR /D. FIND OUT DETAILS OF FILE NAME AND + ;EXTENSION (0 FN.EX=*.*) AND ANY CHANGE IN + ;SOURCE DEV. SET BITS IN CALFLG. + + 002746' 620740 000037 FNSET: TRZ CALFLG,ALLCLF ;CLEAR FLAGS ON ENTRY + 002747' 660740 000001 TRO CALFLG,FNEX + 002750' 205000 120000 MOVSI 0,(SIXBIT /*/) ;* TO AC0 + 002751' 312000 004040' CAME 0,FILNAM ;FILNAM=* OR 0? + 002752' 336000 004040' SKIPN FILNAM + 002753' 254000 002755' SKIP 1 ;FILENAME = * OR 0 + 002754' 660740 000004 TRO CALFLG,MATFN ;FILENAME MUST BE MATCHED + 002755' 336000 004041' SKIPN FILEX ;EXT=0? + 002756' 606540 201500 TRNN AUXFLG, MTAIN+CDRIN+PPTIN+TTYIN ;YES + 002757' 316000 004041' CAMN 0,FILEX ;NO, EXT = *? + 002760' 254000 002762' SKIP 1 ;YES + 002761' 660740 000002 TRO CALFLG,MATEX ;FILE EXTENSION MUST BE MATCHED + IFN FTDSK,<TRNN AUXFLG,DSKIN + JRST FNSET1 + SKIPN T2,PP + JRST FNSET2 ;IF #P-P=0 IT IS COUNTED AS UNCHANGED + CAME T2,FNPPN + TRO CALFLG,NEWPP ;CHANGE IN # P-P + JRST FNSET1 + FNSET2: MOVE T2,FNPPN ;IF P-P#=0, SET TO PREVIOUS VALUE + MOVEM T2,PP> + 002762' 200100 004637' FNSET1: MOVE T2,DEVICE + 002763' 312100 004050' CAME T2,DEVA + 002764' 660740 000010 TRO CALFLG,NEWDEV ;CHANGE IN SOURCE DEV. + 002765' 202100 004050' MOVEM T2,DEVA ;SET DEVA=DEVICE + 002766' 263240 000000 POPJ P, + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 58 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;POPJ EXIT IF END OF COMMAND STRING, OTHERWISE RESET + ;POINTER TO START OF DIRECTORY, READING IN NEW DIR. + ;IF DEV OR #P-P CHANGED (EXIT CPOPJ1) + ;IF DIR. IS ON DSK RESET BY REINIT. + + 002767' 332340 004134' LOOKA: SKIPE T4,ESWTCH ;MORE C.S.? + 002770' 263240 000000 POPJ P, ;NO + 002771' 260240 000451' PUSHJ P,DESCRP ;YES, GET NEXT FN.EX FROM CS + 002772' 260240 000204' PUSHJ P,INLOOK ;CHECK FOR MTA REQUESTS, MODE + 002773' 260240 000154' PUSHJ P,M4 ;CHECK FOR /I,/B,/H + 002774' 552340 004636' HRRZM T4,ININI1 ;SET MODE + 002775' 071240 000000 RELEAS DIR, + 002776' 606540 201500 TRNN AUXFLG,MTAIN+CDRIN+PPTIN+TTYIN ;NON-DIR DEVICE? + 002777' 254000 003002' JRST LOOKF + + 003000' 602740 000006 TRNE CALFLG,MATEX!MATFN ;YES, NO FN EX BUT *.* OR * ALLOWED + 003001' 254000 002040' JRST ERR6A + + 003002' 606300 000010 LOOKF: TRNN FLAG,DFLG ;FOR DELETE, ONE SOURCE FILE + 003003' 254000 003006' JRST LOOKB ;... + + 003004' 602740 000030 TRNE CALFLG,NEWDEV!NEWPP ;ONLY IS PERMITTED + 003005' 254000 002060' JRST ERR5A + + 003006' 606740 000030 LOOKB: TRNN CALFLG,NEWDEV!NEWPP ;PREPARE TO LOOK FOR NEW FILE + 003007' 254000 003014' JRST LOOKC ;NAME AT HEAD OF DIRECTORY + + 003010' 260240 000426' PUSHJ P,ININIT ;INIT INPUT FILE + 003011' 606540 060000 TRNN AUXFLG,DTAIN+DSKIN + 003012' 254000 001707' JRST CPOPJ1 + IFN FTDSK,<TRNN AUXFLG,DTAIN ;DTA INPUT? + JRST LOOKD ;NO, MUST BE DSK> + 003013' 260240 002701' PUSHJ P,DTADIR ;YES, READ IN DTA DIRECT + + 003014' LOOKC: + IFN FTDSK,<TRNE AUXFLG,DSKIN ;DSK INPUT? + JRST LOOKD ;YES> + 003014' 200440 004013' MOVE T5,DIRST1 ;NO, RESET DIRECTORY START + 003015' 202440 004012' MOVEM T5,DIRST + 003016' 254000 001707' JRST CPOPJ1 + + IFN FTDSK,< + LOOKD: PUSHJ P,DSKDIR ;GET USER'S FILE DIRECTORY + SETZM UFDIN+2 ;DSK DIR BUF EMPTY + JRST CPOPJ1> + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 59 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;ROUTINE TO LIST DTA OR DSK DIRECTORIES + + + 003017' 077100 004044' DTPDIR: ENTER OUT,DTON ;OUTPUT DEV,NROCT ENTRY + 003020' 254000 002024' JRST ERR4 ;DIRECTORY FULL + IFN FTDSK,<TRNE AUXFLG,FFLG ;/F? SHORT FORM? + SKIPE DEVICE ;INPUT DEVICE SPECIFIED? + JRST PDIR1A ;YES + MOVSI 0,(SIXBIT/DSK/) + DEVCHR + JUMPE 0,PDIR1A ;NO DISK + HRRZI 0,(SIXBIT /DSK/);ASSUME DSK IF NO DEVICE GIVEN + HRLZM 0,DEVICE + TROA AUXFLG,DSKIN ;SET DSK INPUT + PDIR1A: TRNE AUXFLG,DSKIN ;DSK INPUT? + JRST DSKLST ;YES, GO AND TRY TO LIST DSK> + 003021' 606540 020000 TRNN AUXFLG,DTAIN ;DECTAPE INPUT? + 003022' 254000 002066' JRST ERR5 ;NOT DSK OR DTA. ERROR + + ;ROUTINE TO LIST DTA DIRECTORY. /L OR /F SWITCH + + 003023' 260240 003271' DTALST: PUSHJ P,DTCHECK ;CHECK FOR DTA INPUT-MUST BE DECTAPE AND + ;GET DIRECTORY + 003024' 260240 003205' PUSHJ P,CRLF ;PRINT NO. OF FREE BLOCKS LEFT + 003025' 135040 004705' LDB T1,[POINT 5,16(T5),14] + 003026' 302040 000036 CAIE T1,36 ; SKIP DIR HEADER IF + 003027' 254000 003070' JRST PDIR1B ; DECTAPE HAS NO PROTECTION +U 003030' 334040 004706' LSTLIN HEDL1 ; PRINT HEADER + 003031' 260240 000756' + 003032' 134200 000001 + 003033' 326200 003031' + 003034' 200100 003736' MOVE T2,DTAID + 003035' 322100 003055' JUMPE T2,DTALS4 + 003036' 201100 000005 MOVEI T2,5 ; CHARACTER COUNT + 003037' 200000 004707' MOVE 0,[POINT 6,DTAID] + 003040' 134200 000000 ILDB CHR,0 ; GET CLASSIFICATION + 003041' 302200 000023 CAIE CHR,23 ; STD (I.E.=3) ? + 003042' 344100 003052' AOJA T2,DTALS3 + 003043' 134200 000000 DTALS1: ILDB CHR,0 ; GET NEXT DIGIT + 003044' 271200 000040 ADDI CHR,40 ; CONVERT TO ASCII + 003045' 306200 000060 CAIN CHR,"0" ; SUPPRESS LEADING ZEROS + 003046' 367100 003043' SOJG T2,DTALS1 + 003047' 260240 000756' PUSHJ P,PUT + 003050' 363100 003055' DTALS2: SOJLE T2,DTALS4 + 003051' 134200 000000 ILDB CHR,0 + 003052' 271200 000040 DTALS3: ADDI CHR,40 + 003053' 260240 000756' PUSHJ P,PUT + 003054' 254000 003050' JRST DTALS2 + 003055' 201200 000133 DTALS4: MOVEI CHR,"[" + 003056' 260240 000756' PUSHJ P,PUT + 003057' 554640 003737' HLRZ DOUT,DIRPPN + 003060' 260240 003260' PUSHJ P,OUTDEC + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 59-1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 003061' 201200 000054 MOVEI CHR,"," + 003062' 260240 000756' PUSHJ P,PUT + 003063' 550640 003737' HRRZ DOUT,DIRPPN + 003064' 260240 003260' PUSHJ P,OUTDEC + 003065' 201200 000135 MOVEI CHR,"]" + 003066' 260240 000756' PUSHJ P,PUT + 003067' 260240 003205' PUSHJ P,CRLF + 003070' PDIR1B: + + IFN WCH,< + MOVE T1,IBF + HLRZ DOUT,1(T1) ;GET FREE BLOCK POINTER + MOVNS DOUT + ADDI DOUT,1101 ;GET NO. OF FREE BLOCKS LESS FREE BLOCK NO. + PUSHJ P,OUTDEC ;PRINT RESULT> + IFE WCH,< + 003070' 400640 000000 SETZ DOUT, ;CLEAR NO. FREE BLOCKS + 003071' 201340 001102 MOVEI T4,1102 ;OCTAL NO. OF BLOCKS ON DECTAPE + 003072' 205040 440500 MOVSI T1,(POINT 5,0) ;5 BIT BYTES + 003073' 550440 003742' HRRZ T5,IBF ;CURRENT INPUT BUFFER + 003074' 271051 000001 ADDI T1,1(T5) ;POINTER TO 1ST DATA WORD IN DIRECT + + + 003075' 363340 003101' PDIR8: SOJLE T4,PDIR1 ;ALL THROUGH? + 003076' 134140 000001 ILDB T3,T1 ;CALCULATE NO. OF FREE BLOCKS + 003077' 326140 003075' JUMPN T3,PDIR8 + + ;THIS BLOCK FULL + 003100' 344640 003075' AOJA DOUT,PDIR8 ;COUNT NO. WITH ZERO IN + 003101' 260240 003260' PDIR1: PUSHJ P,OUTDEC ;PRINT RESULT> + 003102' 200000 004710' MOVE 0,[POINT 6,PDIR7] + 003103' 201100 000022 MOVEI T2,^D18 ;SET LOOP TO DEPOSIT 18 CHARS + 003104' 260240 003211' PUSHJ P,PDIR2 ;PRINT "FREE BLOCKS LEFT" MESSAGE + 003105' 260240 003205' PUSHJ P,CRLF ;CARRIAGE RET, LINEFEED + 003106' 260240 003277' PUSHJ P,DTCH1 ;FIX T5, TO POINT AT BEGIN OF DIR + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 60 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;LOOP TO EXAMINE FILE NAMES DTA DIRECTORY + 003107' PDIR4: + IFE WCH,< + 003107' 336011 000123 SKIPN 123(T5) ;NULL (=0) FILE NAME? + 003110' 254000 003200' JRST PDIR6 ;YES SO LOOK FOR ANOTHER> + IFN WCH,< + SKIPN (T5) ;NULL (=0) FILE NAME? + JRST MAIN1 ;YES, SO END OF DIR.> + 003111' 201100 000006 MOVEI T2,6 ;TRANSMIT UP TO 6 CHARACTERS + 003112' 205000 440611 MOVSI 0,440600+T5 ;SET UP SOURCE BYTE POINTER + IFE WCH,< + 003113' 541000 000123 HRRI 0,123> ;SET TO PICK UP FILE NAME + 003114' 400340 000000 SETZ T4, + ;FOLLOWING CODE TO OUTPUT PROJ, PROG FILENAME + ;***************************************************************** + IFE WCH,< + 003115' 554211 000151 HLRZ CHR,151(T5) ;GET EXT + 003116' 302200 654644 CAIE CHR,(SIXBIT/UFD/) ;UFD? + 003117' 254000 003130' JRST PDIR4A ;NO + + 003120' 554651 000123 HLRZ DOUT,123(T5) ;PROJ NO. + 003121' 201100 000756' MOVEI T2,PUT + 003122' 260240 003235' PUSHJ P,OUTDC1 + + 003123' 201200 000054 MOVEI CHR,COMMA ;COMMA + 003124' 260240 000756' PUSHJ P,PUT + + 003125' 550651 000123 HRRZ DOUT,123(T5) ;PROG NO. + 003126' 260240 003235' PUSHJ P,OUTDC1 + 003127' 254000 003131' JRST PDIR4B + > + ;********************************************************************* + 003130' 260240 003211' PDIR4A: PUSHJ P,PDIR2 ;OUTPUT 6-BIT DATA AND INCR DIRECTORY PTR + IFE WCH,< + 003131' 510211 000151 PDIR4B: HLLZ CHR,151(T5)> ;PICK UP EXTENSION + IFN WCH,< + HLLZ CHR,(T5)> + 003132' 205000 440611 MOVSI 0,440600+T5 ;SET BYTE POINTER + IFE WCH,< + 003133' 541000 000151 HRRI 0,151> ;PICK UP EXTENSION + 003134' 201100 000004 MOVEI T2,4 ;PRINT UP TO 4 CHRS. (PERIOD+3*EXT) + 003135' 326200 003140' JUMPN CHR,.+3 ;EXTENSION NULL? + 003136' 260240 003214' PUSHJ P,PDIR2A+1 ;YES + 003137' 254000 003142' SKIP 2 ;NO + 003140' 201200 000016 MOVEI CHR,PERIOD-40 ;NO, SO PRINT A PERIOD + 003141' 260240 003213' PDIR3: PUSHJ P,PDIR2A ;OUTPT 6 BIT OR INCR T5 + IFE WCH,< + 003142' 201200 000040 MOVEI CHR,SPACE ;OUTPUT 2 SPACES + 003143' 260240 000756' PUSHJ P,PUT + 003144' 260240 000756' PUSHJ P,PUT + 003145' 602540 000020 TRNE AUXFLG,FFLG ;SHORT FORM DIRECT ? + 003146' 254000 003177' JRST PDIR3A ;YES VJC 4/16/69 + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 60-1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 003147' 400640 000000 SETZ DOUT, ;CALCULATE NBR OF BLOCKS PER FILE + 003150' 201340 001101 MOVEI T4,1101 + 003151' 205000 440500 MOVSI 0,(POINT 5,0) + 003152' 550100 003742' HRRZ T2,IBF + 003153' 271002 000001 ADDI 0,1(T2) + 003154' 550600 000011 HRRZ T7,T5 + 003155' 275602 000000 SUBI T7,(T2) + 003156' 134500 000000 ILDB T6,0 ;LOAD CONTENTS OF S.A.T. BLOCK + 003157' 316500 000014 CAMN T6,T7 ;COMPARE WITH FILE SLOT NBR + 003160' 271640 000001 ADDI DOUT,1 ;ADD 1 TO COUNT IF EQUAL + 003161' 367340 003156' SOJG T4,.-3 + 003162' 260240 003260' PUSHJ P,OUTDEC ;OUTPUT NBR OF BLOCKS PER FILE + 003163' 201200 000011 MOVEI CHR,TAB + > + IFN WCH,< + AOJ T5, ;STEP DIR. POINTER + MOVEI CHR,11 + PUSHJ P,PUT ;OUTPUT A TAB + CAIG T4,7> + 003164' 260240 000756' PUSHJ P,PUT + 003165' 135040 004711' LDB T1,[POINT 5,DBUF+16,14] + 003166' 302040 000036 CAIE T1,36 + 003167' 254000 003174' JRST PDIR3B + 003170' 550040 003742' HRRZ T1,IBF + 003171' 276440 000001 SUBM T5,T1 + 003172' 135000 004712' LDB 0,[POINT 9,DBUF+200(T1),8] +U 003173' 260240 000000* PUSHJ P,PROTO ; OUTPUT PROTECTION + 003174' PDIR3B: + IFE WCH,< + 003174' 200011 000151 MOVE 0,151(T5) ;GET ENTRY DATE> + IFN WCH,< + MOVE 0,-1(T5) ;GET ENTRY DATE> + 003175' 405000 007777 ANDI 0,7777 ;LEFT BITS ARE IRRELEVENT + 003176' 260240 003224' PUSHJ P,DATOUT ;OUTPUT THE DATE + 003177' 260240 003205' PDIR3A: PUSHJ P,CRLF ;GIVE CR,LF 4/16/69 + IFN WCH,< + AOJA T5,PDIR4 ;PROCESS NEXT ENTRY> + IFE WCH,< + 003200' 550040 003742' PDIR6: HRRZ T1,IBF ;PROCESS NEXT ENTRY + 003201' 276440 000001 SUBM T5,T1 + 003202' 301040 000026 CAIL T1,26 ;FILE "NUMBER" OK? + 003203' 254000 000411' JRST MAIN1 ;NO, END OF ENTRIES + 003204' 344440 003107' AOJA T5,PDIR4 ;END OF LOOP, GET NEXT FILENAME> + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 61 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + IFN FTDSK,< + CLRF: SOS LIN> + 003205' 201200 000015 CRLF: MOVEI CHR,CR ;OUTPUT CAR. RET. + 003206' 260240 000756' PUSHJ P,PUT + 003207' 201200 000012 MOVEI CHR,LF ;LINE FEED + 003210' 254000 000756' JRST PUT + + 003211' 134200 000000 PDIR2: ILDB CHR,0 ;ROUTINE TO OUTPUT 6-BIT DATA + 003212' 606000 777777 TRNN 0,-1 ;PRINT SPACES WHEN PRINTING THE FREE BLOCKS + 003213' 322200 003220' PDIR2A: JUMPE CHR,PDIR21 ;TERMINATE ON SPACE + 003214' 271200 000040 ADDI CHR,40 ;CONVERT TO 7 BIT + 003215' 260240 000756' PUSHJ P,PUT ;OUTPUT CHARACTER + 003216' 271340 000001 ADDI T4,1 + 003217' 367100 003211' SOJG T2,PDIR2 ;COUNT DOWN MAX-CHARS COUNTER + IFN WCH,< + PDIR21: AOJA T5,CPOPJ ;STEP AND CONTINUE> + IFE WCH,< + 003220' 263240 000000 PDIR21: POPJ P, ;CONTINUE> + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 62 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 003221' 160046 624545 PDIR7: SIXBIT /. FREE BLOCKS LEFT/ + 003222' 004254 574353 + 003223' 630054 454664 + ;OUTPUT THE DATE FOUND IN AC 0. + + 003224' 201100 000756' DATOUT: MOVEI T2,PUT ;PUT CHAR IN OUT + 003225' 231000 000037 IDIVI 0,^D31 + 003226' 201141 000001 MOVEI T3,1(1) + 003227' 231000 000014 IDIVI 0,^D12 + 003230' 200640 000003 MOVE DOUT,T3 ;DOUT=DAY + 003231' 260240 003235' PUSHJ P,OUTDC1 ;PRINT DAY + 003232' 260240 003262' PUSHJ P,DATO2 ;PRINT -MONTH- + 003233' 200640 000000 MOVE DOUT,0 + 003234' 271640 000100 ADDI DOUT,^D64 ;DOUT=YEAR + 003235' 334700 003731' OUTDC1: SKIPA DOUT+1,TWL ;RADIX 10 + ;******************************************************************* + ;ROUTINE TO CONVERT OCTAL TO ASCII + ;DOUT CONTAINS OCTAL VALUE ON ENTRY + + 003236' 201700 000010 OUTOCT: MOVEI DOUT+1,10 ;RADIX 8 + 003237' 552700 000007 PRNUMA: HRRZM DOUT+1,T4 + 003240' 201200 000060 MOVEI CHR,"0" + 003241' 315640 000016 CAMGE DOUT,DOUT+1 ;PRINT AT LEAST 2 DIGITS + 003242' 260242 000000 PUSHJ P,(T2) ;PUT OR PUTCON + 003243' 231647 000000 PRN: IDIVI DOUT,(T4) ;DIVIDE BY RADIX + 003244' 506705 000000 HRLM DOUT+1,(P) ;SAVE NO. FOR PRINT + 003245' 322640 003247' JUMPE DOUT,.+2 ;ENUF DIGITS? + 003246' 260240 003243' PUSHJ P,PRN ;NO, GET MORE + 003247' 554205 000000 HLRZ CHR,(P) ;YES, GET LEFTMOST + 003250' 271200 000060 ADDI CHR,60 ;CONVERT TO ASCII + 003251' 254002 000000 JRST (T2) ;PUT OR PUTCON + + 003252' 201200 000040 OUTDE4: MOVEI CHR," " ;SET UP FOR SPACES + 003253' 301640 001750 CAIL DOUT,^D1000 ;PRINT 4 CHAR. + 003254' 254000 003260' JRST OUTDEC ;AT LEAST 4 SEEN + 003255' 260240 000756' PUSHJ P,PUT ;OUTPUT ONE SPACE + 003256' 305640 000144 CAIGE DOUT,^D100 ;3 CHAR.? + 003257' 260240 000756' PUSHJ P,PUT ;NO,SO ANOTHER SPACE + 003260' 201100 000756' OUTDEC: MOVEI T2,PUT ;PUT CHAR IN OUT BUF + 003261' 254000 003235' JRST OUTDC1 + + 003262' 201340 000005 DATO2: MOVEI T4,5 + 003263' 200500 004153' MOVE T6,MNPT + 003264' 272040 000012 ADDM 1,T6 + 003265' 134200 000012 ILDB CHR,T6 + 003266' 260242 000000 PUSHJ P,(T2) ;PUT OR PUTCON + 003267' 367340 003265' SOJG T4,.-2 + 003270' 263240 000000 POPJ P, + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 63 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + ;READ DTA DIRECTORY AND INITIALIZE DIRST AND DIRST1 + + 003271' 260240 000426' DTCHECK:PUSHJ P,ININIT ;INITIALIZE INPUT DEVICE + 003272' DTCH2: + IFN WCH,< + USETI IN,1 ;GET DTA DIR> + IFE WCH,< + 003272' 074140 000144 USETI IN,144 ;GET DTA DIR> + 003273' 260240 001616' PUSHJ P,INP ;INPUT DIRECTORY + 003274' 070140 000000 CLOSE IN, + 003275' 260240 003333' PUSHJ P,GETPPN ; GET PPN OF DECTAPE + 003276' 260240 000426' PUSHJ P,ININIT ; REINITIALIZE INPUT DEVICE + IFN WCH,< + DTCH1: MOVE T5,IBF + HRRZ T2,1(T5) + ADDI T5,1(T2) ;GET ADD. OF FIRST ENTRY + MOVE 0,T5 + SUBI 0,4> + IFE WCH,< + 003277' 550440 003742' DTCH1: HRRZ T5,IBF ;LOC. OF CURRENT BUF, 2ND WORD + 003300' 201011 000123 MOVEI 0,123(T5) ;83 WORDS,7, FIVE-BIT BYTES + 003301' 271440 000001 ADDI T5,1 ;COMPUTE ADD. OF DIR. START> + 003302' 202000 004012' MOVEM 0,DIRST ;FIRST FILE NAME LOC + 003303' 202000 004013' MOVEM 0,DIRST1 ;TO RESTORE DIRST + 003304' 263240 000000 POPJ P, + + ;ROUTINE TO CHECK BRACKET COUNT/MATCHING + + 003305' 403140 004025' OUTCHK: SETZB T3,TLBRKT ;COUNT <> ON THIS LINE, CLEAR THINGS + 003306' 200040 003723' MOVE T1,OPTRA ;BYTE POINTER FOR READING OUT THE LINE + 003307' 316040 004020' OUTCH2: CAMN T1,OPTR ;LINE DONE? + 003310' 254000 003320' JRST OUTCH3 ;YES, SO DECIDE WHETHER TO PRINT + 003311' 134100 000001 ILDB T2,T1 ;GET CHAR + 003312' 306100 000074 CAIN T2,"<" ;LEFT BRACKET? + 003313' 350000 004025' AOS TLBRKT ;YES, SO INCREMENT BRACKET COUNT + 003314' 306100 000076 CAIN T2,">" ;RIGHT BRACKET? + 003315' 371000 004025' SOSL TLBRKT ;YES, SUBTRACT BRACKET COUNT, GONE NEG? + 003316' 254000 003307' JRST OUTCH2 ;NO, SO DO NEXT CHAR + 003317' 344140 003307' AOJA T3,OUTCH2 ;YES, SO FLAG COUNT GONE NEG. + + 003320' 336100 004025' OUTCH3: SKIPN T2,TLBRKT ;BRACKET COUNT OFF THIS LINE? + 003321' 322140 001711' JUMPE T3,CPOPJ ;NO, WENT NEG.? + 003322' 272100 004026' ADDM T2,TOTBRK ;YES, SO ADD INTO CUMULATIVE COUNT + 003323' 201200 000055 MOVEI CHR,"-" ;PRINT MINUS FOR NEG TOTAL + 003324' 335000 004026' SKIPGE TOTBRK + 003325' 260240 000756' PUSHJ P,PUT + 003326' 214640 004026' MOVM DOUT,TOTBRK;PRINT MAGNITUDE OF TOTAL + 003327' 260240 003260' PUSHJ P,OUTDEC + 003330' 201200 000011 MOVEI CHR,TAB ;FOLLOW WITH TAB + 003331' 260240 000756' PUSHJ P,PUT + 003332' 254000 000711' JRST OUTCH1 ;AND PRINT THE LINE + + 003333' 201440 000117 GETPPN: MOVEI T5,117 ; NON STD DUMP MODE + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 63-1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + +U 003334' 202440 000000* MOVEM T5,DTBLK + 003335' 200440 004637' MOVE T5,DEVICE ; GET INPUT DEVICE +U 003336' 202440 000000* MOVEM T5,DTDEV +U 003337' 050340 003334* OPEN DTDIR,DTBLK + 003340' 263240 000000 POPJ P, + 003341' 074340 000144 USETI DTDIR,144 ; READ BLOCK 100 AND + 003342' 200440 004713' MOVE T5,[IOWD 227,DBUF] + 003343' 201500 000000 MOVEI T6,0 + 003344' 066340 000011 INPUT DTDIR,T5 ; WORD 1 OF BLOCK 101. + 003345' 200440 004577' MOVE T5,177+DBUF + 003346' 202440 003736' MOVEM T5,DTAID + 003347' 200440 004600' MOVE T5,200+DBUF + 003350' 202440 003737' MOVEM T5,DIRPPN ; SAVE PPN FOR LISTING + 003351' 071340 000000 RELEASE DTDIR, + 003352' 263240 000000 POPJ P, + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 64 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 003353' 612300 004672' FILTYP: TDNE FLAG,[XWD IFLG+IBFLG,BMOD] + 003354' 263240 000000 POPJ P, ;BIN MODE DON'T CARE IF DMP, ETC + 003355' 606540 060400 TRNN AUXFLG,DSKIN!DTAIN!MTAIN ;BINARY INPUT POSSIBLE? + 003356' 254000 003365' JRST FIL11 ;NO + 003357' 606540 014200 TRNN AUXFLG,DSKOUT!DTAOUT!MTAOUT ;BINARY OUTPUT? + 003360' 254000 003365' JRST FIL11 ;NO + 003361' 616300 004701' TDNN FLAG,[XWD PFLG,LINE!TBMOD!NSMOD!SQMOD!SPMOD] + 003362' 603540 000040 TLNE AUXFLG,CDRFLG ;/E FROM DSK IS NOT BINARY + 003363' 254000 003365' JRST FIL11 ;SO TURN OFF SBIN + 003364' 254000 003414' JRST FIL3 ;FORCE BINARY MODE + 003365' 621540 000004 FIL11: TLZ AUXFLG,SBIN ;IS + 003366' 554000 004053' HLRZ 0,ZRF+1 ; INPUT EXTENSION + 003367' 302000 445560 CAIE 0,(SIXBIT /DMP/) ;DMP? + 003370' 306000 634166 IFE DISK30,<CAIN 0,(SIXBIT /SAV/) ;SAV?> + IFN DISK30,<CAIN 0,(SIXBIT/SVE/)> + 003371' 254000 003414' JRST FIL3 ;YES + 003372' 302000 435056 CAIE 0,(SIXBIT /CHN/) ;CHN? + 003373' 306000 624554 CAIN 0,(SIXBIT /REL/) ;REL? + 003374' 254000 003414' JRST FIL3 ;YES + 003375' 302000 635062 CAIE 0,(SIXBIT /SHR/) + 003376' 306000 504750 CAIN 0,(SIXBIT /HGH/) + 003377' 254000 003414' JRST FIL3 + 003400' 302000 425156 CAIE 0,'BIN' ; GENERAL BINARY EXTENSION? + 003401' 306000 545767 CAIN 0,(SIXBIT /LOW/) + 003402' 254000 003414' JRST FIL3 + 003403' 606300 002000 TRNN FLAG,XFLG ;DO NORMAL PROCESSING ON ALL + 003404' 254000 003430' JRST FIL2 ;BUT DMP ETC FILES IF NOT /X + 003405' 607540 000040 TLNN AUXFLG,CDRFLG + 003406' 612300 004701' TDNE FLAG,[XWD PFLG,LINE+TBMOD+NSMOD+SQMOD+SPMOD] + 003407' 263240 000000 POPJ P, ;NO SIGNIFICANT SWITCHES + 003410' 515000 004400 FIL1: HRLZI 0,004400 ;FORCE 36-BIT. + 003411' 502000 003743' HLLM 0,IBF+1 ;INPUT BYTE POINTER + 003412' 502000 003746' HLLM 0,OBF+1 ;OUTPUT BYTE POINTER + 003413' 263240 000000 POPJ P, ;CHANGE TO FORCED BINARY + 003414' 661540 000004 FIL3: TLO AUXFLG,SBIN ;INPUT EXT = DMP,SAV,CHN,REL + 003415' 602300 002000 TRNE FLAG,XFLG + 003416' 254000 003410' JRST FIL1 + 003417' 667540 000400 TLON AUXFLG,FRSTIN ;NOT /X TEST FURTHER + 003420' 254000 003443' JRST FIL4 ;IS THIS FIRST SOURCE, YES + 003421' 663540 000200 TLOE AUXFLG,RSDCFL ;NOT FIRST, WAS PREVIOS FILE RSCD? + 003422' 254000 003445' JRST FIL5 ;YES, NO CHANGE UNLESS DEVICE HAS CHANGED + 003423' 067100 000000 OUTPUT OUT, ;NO CHANGE TO 36-BIT + 003424' 200000 003747' MOVE 0,OBF+2 ;CURRENTLY 7-BIT I/O, MUST CHANGE TO 36-BIT + ;OUTPUT CURRENT BUFFER + 003425' 231000 000005 IDIVI 0,5 ;DIVIDE OBF+2 BY 5 (CHAR. COUNT) + 003426' 202000 003747' MOVEM 0,OBF+2 + 003427' 254000 003410' JRST FIL1 + 003430' 663540 000400 FIL2: TLOE AUXFLG,FRSTIN ;NOT A RSCD FILE + 003431' 627540 000200 TLZN AUXFLG,RSDCFL ;NO, WAS PREV. FILE RSCD? + 003432' 263240 000000 POPJ P, ;NO, NO CHANGE + 003433' 067100 000000 OUTPUT OUT, ;YES, CHANGE 36-BIT TO 7-BIT + 003434' 201000 000005 MOVEI 0,5 + 003435' 222000 003747' IMULM 0,OBF+2 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 64-1 +PIP MAC 24-APR-78 03:15 VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 003436' 200000 003740' MOVE 0,SVIBF ;RESTORE 7-BIT + 003437' 502000 003743' HLLM 0,IBF+1 + 003440' 200000 003741' MOVE 0,SVOBF + 003441' 502000 003746' HLLM 0,OBF+1 + 003442' 263240 000000 POPJ P, + 003443' 661540 000200 FIL4: TLO AUXFLG,RSDCFL ;SET REL,SAV,DMP,CHN FLAG + 003444' 254000 003410' JRST FIL1 + 003445' 515000 004400 FIL5: HRLZI 0,004400 ;NEW DEVICE, SET 36-BIT INPUT + 003446' 602740 000010 TRNE CALFLG,NEWDEV ;SOURCE DEVICE CHANGED + 003447' 502000 003743' HLLM 0,IBF+1 + 003450' 263240 000000 POPJ P, ;OUTPUT ALREADY SET + + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 65 +PIP MAC 24-APR-78 03:15 BLOCK 0 CODE + + SUBTTL BLOCK 0 CODE + + IFE BLOC0,< + IFE WCH,<;THIS CODE COPIES BLOCK 0,1,2 ONLY. I/O MUST BE DECTAPE.> + IFN WCH,<;THIS CODE COPIES BLOCK 0 ONLY. I/O MUST BE DECTAPE.> + ;MODE SELECTED MUST BE BIT 100, 20 AND NOT DUMP MODE (134). + + 003451' 640540 024000 BLOCK0: TRC AUXFLG,DTAIN+DTAOUT + 003452' 642540 024000 TRCE AUXFLG,DTAIN+DTAOUT;FORCE DTA I/O + 003453' 254000 002115' JRST ERR7A + 003454' 201000 000134 MOVEI 0,134 + 003455' 202000 004633' MOVEM 0,OMOD + 003456' 202000 004636' MOVEM 0,ININI1 + 003457' 205000 003745' MOVSI 0,OBF + 003460' 202000 004635' MOVEM 0,ODEV+1 + 003461' 201000 003742' MOVEI 0,IBF + 003462' 202000 004640' MOVEM 0,DEVICE+1 + 003463' 050100 004633' OPEN OUT,OMOD + 003464' 254000 001767' JRST ERR1 ;UNAVAILABLE + 003465' 065100 000001 OUTBUF OUT,1 + 003466' 067100 000000 OUTPUT OUT, + 003467' 050140 004636' OPEN IN,ININI1 + 003470' 254000 001770' JRST ERR1A + 003471' 064140 000001 INBUF IN,1 + 003472' 403040 003735' SETZB T1,BL0CNT + 003473' 074141 000000 BL4: USETI IN,(T1) + 003474' 066140 000000 INPUT IN, ;READ + 003475' 062140 000010 GETSTS IN,IOS + 003476' 606400 740000 TRNN IOS,740000 ;ANY ERRORS + 003477' 254000 003515' JRST BL1 ;NO + 003500' 265440 000542' JSP T5,INICN2 + 003501' 260240 001652' PUSHJ P,QUEST + 003502' 265040 002166' ERRPN2 </Input device /> + 003503' 447356 072750 + 003504' 203114 573322 + 003505' 617124 000000 + 003506' 260240 002201' PUSHJ P,P6BIT + 003507' 000000 004637' DEVICE + 003510' 265040 002166' ERRPN2 </: /> + 003511' 351000 000000 + 003512' 200100 000013 MOVE T2,AUXFLG ;DECTAPE FOR ERROR MESSAGE + 003513' 405100 020000 ANDI T2,DTAIN + 003514' 260240 001020' PUSHJ P,IOERR ;PRINT ERROR TYPE + 003515' 514440 003743' BL1: HRLZ T5,IBF+1 + 003516' 540440 003746' HRR T5,OBF+1 + 003517' 201351 000177 MOVEI T4,177(T5) + 003520' 251447 000000 BLT T5,(T4) ;SHIFT DATA TO OUTPUT BUFFER + 003521' 075120 003735' USETO OUT,@BL0CNT + 003522' 067100 000000 OUTPUT OUT, ;WRITE BLOCK + 003523' 260240 000764' PUSHJ P, OUTP1 ;CHECK ERRORS + IFE WCH,< + 003524' 350040 003735' AOS T1,BL0CNT + 003525' 305040 000003 CAIGE T1,3 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 65-1 +PIP MAC 24-APR-78 03:15 BLOCK 0 CODE + + 003526' 254000 003473' JRST BL4> + 003527' 071100 000000 BL3: RELEASE OUT, ;IF ANY, PDL IS RESET + 003530' 254000 000013' JRST PIP2> + + IFN BLOC0,< + BLOCK0: ERRPNT </?No block 0 copy!/> + > + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 66 +PIP MAC 24-APR-78 03:15 MAGTAPE ROUTINES + + SUBTTL MAGTAPE ROUTINES + + ;TEST TO SEE IF MORE THAN ONE OF THE LOWEST EIGHT MTA FLAGS + ;HAVE BEEN SELECTED. IF SO ERROR. OTHERWISE, IMPLEMENT + ;REQUEST. T1, T3, T6 SET AT ENTRY BY INLOOK OR OUTLOOK + ;TO EQUAL AUX/AUXOUT, AB/ABOUT,INIMTA/INOMTA + + 003531' 550100 000001 MT1: HRRZ T2,T1 ;T1 CONTAINS REQUEST + 003532' 405102 777777 ANDI T2,-1(T2) ;KNOCK OFF RIGHT MOST 1 + 003533' 602100 000377 TRNE T2,377 + 003534' 254000 003701' JRST MTR1 ;PRINT ERROR MESSAGE + + 003535' 606040 000377 TRNN T1,MTAFLG+MTBFLG+MTWFLG+MTTFLG+MTFFLG+MTUFLG+MTDFLG+MTPFLG + 003536' 254000 003562' JRST MTC1 + 003537' 260252 000000 PUSHJ P,(T6) ;THERE IS A REQUEST + ;GO TO INIMTA/INOMTA + + ;PERFORM POSITIONING REQUESTS + 003540' 602040 000040 TRNE T1,MTUFLG + 003541' 254000 003600' JRST UNLOAD + + 003542' 602040 000010 TRNE T1,MTWFLG + 003543' 254000 003602' JRST REWIND + + 003544' 602040 000020 TRNE T1,MTFFLG + 003545' 254000 003605' JRST MARKEF + + 003546' 602040 000004 TRNE T1,MTTFLG + 003547' 254000 003615' JRST SLEOT + + 003550' 602040 000202 TRNE T1,MTBFLG+MTPFLG ;MULTIPLE REQUESTS ALLOWED + 003551' 254000 003617' JRST BSPF + + 003552' 602040 000101 TRNE T1,MTAFLG+MTDFLG ;MULTIPLE REQUESTS ALLOWED + 003553' 254000 003653' JRST ADVF + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 67 +PIP MAC 24-APR-78 03:15 MAGTAPE ROUTINES + + ;T1=AUX,AUXOUT. T3=AB,ABOUT. T6=INIMTA,INOMTA. + + 003554' 071200 000000 MTCONT: RELEAS TAPE, + 003555' 606040 000040 TRNN T1,MTUFLG ;UNLOAD? + 003556' 602740 000400 TRNE CALFLG,NSWTCH ;IS THERE AN INPUT DEVICE? + 003557' 302500 003666' CAIE T6,INOMTA ;OUTPUT TAPE? + 003560' 263240 000000 POPJ P, ;NO + 003561' 254000 000013' JRST PIP2 ;YES, END OF COMMAND + + ;ROUTINE TO CHECK AND SET DENSITY FOR NEW DEVICE + + 003562' 200340 000001 MTC1: MOVE T4,T1 ;GET AUX/AUXOUT + 003563' 405340 003400 ANDI T4,MT2FLG+MT5FLG+MT8FLG + 003564' 405347 777777 ANDI T4,-1(T4) ;REMOVE RIGHT MOST 1 + 003565' 326340 003701' JUMPN T4,MTR1 ;MORE THAN 1 REQ, ERROR + + 003566' 201340 000001 MOVEI T4,1 ;ASCII LINE STANDARD MODE + + 003567' 602040 002000 TRNE T1,MT2FLG + 003570' 660340 000200 TRO T4,DENS2 ;SET 200 BPI + + 003571' 602040 001000 TRNE T1,MT5FLG + 003572' 660340 000400 TRO T4,DENS5 ;SET 556 BPI + + 003573' 602040 000400 TRNE T1,MT8FLG + 003574' 660340 000600 TRO T4,DENS8 ;SET 800 BPI + + 003575' 602040 004000 TRNE T1,MTEFLG + 003576' 660340 001000 TRO T4,PARE ;EVEN PARITY + + 003577' 263240 000000 POPJ P, + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 68 +PIP MAC 24-APR-78 03:15 MAGTAPE ROUTINES + + ;REWIND AND UNLOAD + + 003600' 072200 000011 UNLOAD: MTAPE TAPE,11 + 003601' 254000 003554' JRST MTCONT + + ;REWIND ONLY + + 003602' 072200 000001 REWIND: MTAPE TAPE,1 + 003603' 072200 000000 MTWAIT: WAIT TAPE, + 003604' 254000 003554' JRST MTCONT + + + + + ;MARK END OF FILE + + 003605' 200440 004645' MARKEF: MOVE T5,MTANAM + 003606' 250440 004634' EXCH T5,ODEV + 003607' 072200 000003 MTAPE TAPE,3 + 003610' 062200 000010 GETSTS TAPE,IOS + 003611' 260240 000772' PUSHJ P,OUTP3 + 003612' 060210 000000 SETSTS TAPE,(IOS) + 003613' 202440 004634' MOVEM T5,ODEV + 003614' 254000 003554' JRST MTCONT + + + + + ;SKIP TO LOGICAL END OF TAPE. + + 003615' 072200 000010 SLEOT: MTAPE TAPE,10 + 003616' 254000 003603' JRST MTWAIT + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 69 +PIP MAC 24-APR-78 03:15 MAGTAPE ROUTINES + + ;BACKSPACE MTA 1 FILE, T3=AB OR ABOUT + ;AB/ABOUT = INPUT/OUTPUT DEVICE + + 003617' 550140 000003 BSPF: HRRZ T3,T3 ;T3=NO. OF FILES/RECORDS TO BACK + 003620' 072200 000000 BSPF2: WAIT TAPE, ;WAIT + 003621' 062200 000010 GETSTS TAPE,IOS + 003622' 606400 004000 TRNN IOS,LDP ;AT LOAD POINT? + 003623' 254000 003637' JRST BSPF3 ;NO LDP + 003624' 265040 002155' ERRPNT </?Load point before end of (MB) or (MP) request!/> + 003625' 376315 760710 + 003626' 203415 764734 + 003627' 721014 262714 + 003630' 677454 520312 + 003631' 673104 067714 + 003632' 201211 541122 + 003633' 203376 220120 + 003634' 466405 120344 + 003635' 627436 562746 + 003636' 721020 000000 + 003637' 201440 000007 BSPF3: MOVEI T5,7 ;BSPR + 003640' 606040 000200 TRNN T1,MTPFLG ;BSPR? + 003641' 201440 000017 MOVEI T5,17 ;BSPF + 003642' 072211 000000 MTAPE TAPE,(T5) ;BACKSPACE FILE/RECORD + 003643' 365140 003620' SOJGE T3,BSPF2 ;MORE FILES/RECORDS TO BSP? + ;NO, END OF LOOP + 003644' 072200 000000 WAIT TAPE, + 003645' 062200 000010 GETSTS TAPE,IOS + 003646' 606040 000002 TRNN T1,MTBFLG ;BACKSPACE FILE? + 003647' 254000 003554' JRST MTCONT ;NO + 003650' 606400 004000 TRNN IOS,LDP ;IF AT LOAD POINT + 003651' 072200 000016 MTAPE TAPE,16 ;(MOVE FWD. OVER EOF) + 003652' 254000 003554' JRST MTCONT ;DON'T SKIP A RECORD + + + + ;ADVANCE MTA 1 FILE, T3=AB OR ABOUT + ;AB/ABOUT = INPUT/OUTPUT DEVICE + + 003653' 554140 000003 ADVF: HLRZ T3,T3 ;T3=NO. FILES (OR REC) TO ADVANCE + 003654' 201440 000006 ADVF2: MOVEI T5,6 ;ADVR + 003655' 606040 000100 TRNN T1,MTDFLG ;ADVR ? + 003656' 201440 000016 MOVEI T5,16 ;ADVF + 003657' 072211 000000 MTAPE TAPE,(T5) ;ADVANCE FILE/RECORD + 003660' 367140 003654' SOJG T3,ADVF2 ;MORE FILES/RECORDS TO ADV? + ;NO, END OF LOOP + 003661' 072200 000000 WAIT TAPE, ;WAIT... + 003662' 062200 000010 GETSTS TAPE,IOS + 003663' 622400 020000 TRZE IOS,EOFBIT + 003664' 060210 000000 SETSTS TAPE,(IOS) ;END OF FILE + 003665' 254000 003554' JRST MTCONT + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 70 +PIP MAC 24-APR-78 03:15 MAGTAPE ROUTINES + + ;ROUTINE TO INITIALIZE MAGTAPE FOR INPUT OR OUTPUT + + 003666' 334100 004634' INOMTA: SKIPA T2,ODEV ;INIT OUTPUT DEVICE + 003667' 200100 004637' INIMTA: MOVE T2,DEVICE ;INIT INPUT DEVICE + 003670' 402000 004646' SETZM MTANAM+1 + 003671' 202100 004645' MOVEM T2,MTANAM + 003672' 606740 000010 TRNN CALFLG,NEWDEV + 003673' 254000 003676' JRST INMTA ;SAME DEVICE + 003674' 260240 003562' PUSHJ P,MTC1 ;NEW DEVICE + 003675' 552340 004644' HRRZM T4,INMTA1 ;SET MODE,DENSITY,PARITY + + 003676' 050200 004644' INMTA: OPEN TAPE,INMTA1 + 003677' 254000 001771' JRST ERR1B + 003700' 263240 000000 POPJ P, + + ;ROUTINE TO PRINT ERROR MSG IF MORE THAN 1/8 FLAGS SET + + 003701' 200340 004637' MTR1: MOVE T4,DEVICE ;TENTATIVELY SET I/DEV + + 003702' 302500 003667' CAIE T6,INIMTA ;INPUT DEVICE? + 003703' 200340 004634' MOVE T4,ODEV ;NO, SET O/DEV + 003704' 265040 002155' ERRPNT </?Too many requests for /> + 003705' 376515 767500 + 003706' 667035 674500 + 003707' 713136 172712 + 003710' 717516 320314 + 003711' 677444 000000 + 003712' 260240 002201' PUSHJ P,P6BIT + 003713' 000000 000007 T4 + 003714' 254000 000013' JRST PIP2 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 71 +PIP MAC 24-APR-78 03:15 CONSTANTS/STORAGE/VARIABLES + + SUBTTL CONSTANTS/STORAGE/VARIABLES + + ;CONSTANTS + + IFE WCH,< + 003715' 140600 004046' OKBD: POINT 6,DTON+2,23 ;FOR NO. 1K BLOCKS + 003716' 140600 004054' OKB: POINT 6,ZRF+2,23> + 003717' 001400 004054' DATE: POINT 12,ZRF+2,35 + 003720' 001400 004046' DATED: POINT 12,DTON+2,35 ;CREATION DATE /X + 003721' 301406 030140 ZRO: ASCII /00000/ + 003722' 010700 004376' OPTMAX: POINT 7,LBUFE-1,34 + 003723' 000700 004173' OPTRA: XWD 700,LBUF-1 ;INITIAL POINTER TO LINE BUFFER + 003724' 432150 643240 K1: 432150643240 ;MAGIC ASCII INCREMENT BY 10 + 003725' 375767 737576 K3: 375767737576 ;CHARACTER MASK 077 + 003726' 432150 643216 K4: 432150643216 ;MAGIC ASCII INCREMENT BY 1 + 003727' 616051 600000 QPIP: SIXBIT /QPIP/ ;DATA FOR Q SWITCH + 003730' 120000 000000 STAR: SIXBIT /*/ ;LOOK FOR *.* FILNAM.EXT + 003731' 000000 000012 TWL: OCT 12 + 003732' 000001 000001 PP11: XWD 1,1 + 003733' 000001 000003 PP13: XWD 1,3 ; SANDERS SYS + 003734' 000000 000145 UPROJ: EXP ^D101 ; SANDERS UNIVERSAL PROJECT + IFN FTDSK,< + PRPTL: POINT 9,PROTS,8 ;PROTECTION FOR RENAME + PRPTD: POINT 9,DTON+2,8 + PRNM: POINT 9,ZRF+2,8 ;PROT FOR /R + TIME: POINT 11,ZRF+2,23 ;CREATE TIME /X + TIMED: POINT 11,DTON+2,23 ;DEPOSIT CREATE TIME> + + + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 72 +PIP MAC 24-APR-78 03:15 CONSTANTS/STORAGE/VARIABLES + + ;PROGRAM STORAGE AREA + + IFE BLOC0,< + 003735' BL0CNT: BLOCK 1 ;COUNT> + 003736' DTAID: BLOCK 1 ; STORE DTA SERIAL NUMBER + 003737' DIRPPN: BLOCK 1 ; STORE OWNERSHIP + 003740' SVIBF: BLOCK 1 ;SAVE INIT MODE (INPUT) + 003741' SVOBF: BLOCK 1 ;SAVE INIT MODE (OUTPUT) + 003742' IBF: BLOCK 3 ;INPUT BUFFER HEADER + 003745' OBF: BLOCK 3 ;OUTPUT BUFFER HEADER + 003750' OBI: BLOCK 3 ;OUTPUT BUFFER INPUT HEADER FOR DSK /Z + 003753' TFI: BLOCK 3 ;CONSOLE INPUT HEADER + 003756' TFO: BLOCK 3 ;CONSOLE OUTPUT HEADER + 003761' SAVAC: BLOCK 5 ;SAVE SOME ACS + 003766' NAMTAB: BLOCK 24 ;FOR (XD) ON DSK OR RENAME + IFN FTDSK,< + LOCNAM: BLOCK 1 ;POINTER FOR NAMTAB> + 004012' DIRST: BLOCK 1 ;LOC. OF LAST DIR. FILE NAME REFERENCED + 004013' DIRST1: BLOCK 1 ;SAVE INITIAL DIRST + 004014' SQNUM: BLOCK 1 ;CURRENT SEQUENCE NUMBER + 004015' DTJBFF: BLOCK 1 ;VALUE OF JOBFF AFTER CONSOLE I/O BUFFERS + 004016' SVJBFF: BLOCK 1 ;INITIAL VALUE OF JOBFF + 004017' SVJBF1: BLOCK 1 ;VALUE OF JOBFF AFTER OUTBUF UUO + 004020' OPTR: BLOCK 1 ;CURRENT POINTER FOR LINE PRESCAN + 004021' DTONSV: BLOCK 2 ;OUTPUT DIRECTORY ENTRY COPY + 004023' SVPTR1: BLOCK 1 ;POINTER TO LAST PRINTING CHARACTER + 004024' SVPTR2: BLOCK 1 ;POINTER TO LAST GENERATED TAB + 004025' TLBRKT: BLOCK 1 ;TOTAL PARENS ON THIS LINE + 004026' TOTBRK: BLOCK 1 ;TOTAL CUMULATIVE PARENS + 004027' TABCT: BLOCK 1 ;SPACES TO NEXT TAB STOP + 004030' SPCT: BLOCK 1 ;CONSECUTIVE SPACES COUNTER + 004031' ABOUT: BLOCK 1 ;AB FOR OUTPUT UNIT + 004032' AUXOUT: BLOCK 1 ;AUX FOR OUTPUT UNIT + 004033' PROTS: BLOCK 1 ;SAVE PROTECTION + 004034' ZCNT: BLOCK 1 ;COUNT FOR DSK ZRO REQ. + 004035' CDRCNT: BLOCK 1 ;COUNT CARD COLS. + 004036' PTRPT: BLOCK 1 ;STORE SEQ. NO. POINTER + 004037' SYSPP: BLOCK 1 ;PP OF DEVICE SYS + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 73 +PIP MAC 24-APR-78 03:15 CONSTANTS/STORAGE/VARIABLES + + ;THIS IS A BLOCK OF VARIABLE LOCATIONS, ZEROED AT THE START OF EACH + ;PIP RUN, I.E EACH TIME PIP TYPES *. + + ;***** DO NOT SPLIT THIS BLOCK ***** + IFN FTDSK,< + RIBFIR: BLOCK 1 ;NUMBER OF WORDS IN LOOKUP + PPP: BLOCK 1 ;PROJ-PROG FOR EXTENDED LOOKUP> + 004040' FILNAM: BLOCK 1 ;FILE NAME FROM COMMAND SCANNER + 004041' FILEX: BLOCK 1 ;EXTENSION + 004042' PR: BLOCK 1 ;PROTECTION + 004043' PP: BLOCK 1 ;P-P NUMBER TYPED BY USER + IFN FTDSK,<BLOCK 20+RIBFIR-.> ;TOTAL LENGTH OF LOOKUP BLOCK + ;***** END OF BLOCK ***** + 004044' DTON: BLOCK 4 ;OUTPUT DIR. ENTRY + 004050' DEVA: BLOCK 1 ;SAVE INPUT DEV. NAME + 004051' NO.: BLOCK 1 ;GENERATE FILE NAMES + 004052' ZRF: BLOCK 4 ;LOOKUP FILE NAMES + 004056' MTAREQ: BLOCK 1 ;STORE MTA REQUESTS + + 004057' COMEOF: BLOCK 1 ;EOF INDICATOR + 004060' COMBUF: BLOCK ^D41 ;COMMAND BUFFER. ALLOWS 205 CHARS. + 004131' COMCNT: BLOCK 1 ;COMBUF CHARS COUNT + 004132' COMPTS: BLOCK 1 ;POINTER FOR STORING/EXTRACTING CS + + + 004133' AUX: BLOCK 1 ;COPT AUXFLG (MTA) + IFN FTDSK,< + FNPPN: BLOCK 1 ;RESERVE #P-P + FNPPNS: BLOCK 1 ;COPY FNPPN FOR LATEST NON-SYS #P-P> + 004134' ESWTCH: BLOCK 1 ;-1 INDICATES END OF LINE + 004135' XNAME: BLOCK 1 ;-1 INDICATES SCAN OVERSHOOT WITH A NULL NAME + ;0 INDICATES NO SCAN OVERSHOOT + ;CONTAINS OVERSHOOT NAME IF NOT NULL + 004136' AB: BLOCK 1 ;MTA VALUE SWITCHES + ;THIS IS THE END OF THE INIT. ZEROED BLOCK. + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 74 +PIP MAC 24-APR-78 03:15 CONSTANTS/STORAGE/VARIABLES + + 004137' 266254 167132 MONTH: ASCII /-Jan-/ + 004140' 266154 561132 ASCII /-Feb-/ + 004141' 266334 171132 ASCII /-Mar-/ + 004142' 266036 071132 ASCII /-Apr-/ + 004143' 266334 174532 ASCII /-May-/ + 004144' 266256 567132 ASCII /-Jun-/ + 004145' 266256 566132 ASCII /-Jul-/ + 004146' 266036 563532 ASCII /-Aug-/ + 004147' 266474 570132 ASCII /-Sep-/ + 004150' 266374 372132 ASCII /-Oct-/ + 004151' 266355 773132 ASCII /-Nov-/ + 004152' 266114 561532 ASCII /-Dec-/ + + 004153' 440700 004137' MNPT: POINT 7,MONTH + + 004154' PDL: BLOCK 20 ;PUSHDOWN LIST + + 004174' LBUF: BLOCK 204 ;LINE BUFFER. ALLOW FOR FORTRAN DATA + 004377' LBUFE==.-1 + + 004400' DBUF: BLOCK 204 ;DIRECTORY BUFFER + 004604' BLOCK 27 ; ALLOW ENOUGH FOR DTA PROT. + + 004633' OMOD: BLOCK 1 ;OUTPUT DEVICE MODE, STATUS + 004634' ODEV: BLOCK 2 ;OUTPUT DEVICE NAME + ;BUFFER HEADER(S) LOC + + 004636' ININI1: BLOCK 1 ;INPUT DEVICE + 004637' DEVICE: BLOCK 2 + + + 004641' DEVERR: BLOCK 1 + 004642' DERR2: BLOCK 2 + + 004644' INMTA1: BLOCK 1 + 004645' MTANAM: BLOCK 2 + 004647' MATCH: BLOCK 2 ;NAME AND EXT FOR /L OR (RX) + 004651' RENSN: BLOCK 1 ;-1 IF RENAME MESSAGE SEEN + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 75 +PIP MAC 24-APR-78 03:15 RIM LOADER + + SUBTTL RIM LOADER + IFE RIMSW,< + 004652' 265040 002155' RIMTB: ERRPNT <Z? /Y switch option not available this assembly!Z> + 004653' 375005 754500 + 004654' 717575 172306 + 004655' 641015 770350 + 004656' 647375 620334 + 004657' 677504 060754 + 004660' 607235 460704 + 004661' 663124 072320 + 004662' 647464 060746 + 004663' 717135 561330 + 004664' 745020 000000 + XLIST> + LIST + + IFE FTDSK,< + 004665' VAR + 004665' LOWTOP: + 000000' END PIP1> + +DTBLK UNASSIGNED, DEFINED AS IF EXTERNAL +DTDEV UNASSIGNED, DEFINED AS IF EXTERNAL +HEDL1 UNASSIGNED, DEFINED AS IF EXTERNAL +PROTO UNASSIGNED, DEFINED AS IF EXTERNAL +?5 ERRORS DETECTED + +PROGRAM BREAK IS 004714 + +10K CORE USED + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 81 +PIP MAC 24-APR-78 03:15 SYMBOL TABLE + +AB 004136' +ABCHK 000466' +ABOUT 004031' +ADVF 003653' +ADVF2 003654' +ALLCLF 000037 SPD +ALT175 000175 SPD +ALT176 000176 SPD +ALTMOD 000033 SPD +ASTFLG 000040 SPD +AUX 004133' +AUXFLG 000013 +AUXOUT 004032' +BIGBLK 040000 SPD +BL0CNT 003735' +BL1 003515' +BL3 003527' +BL4 003473' +BLKIN 000006 SPD +BLOC0 000000 SPD +BLOCK0 003451' +BMOD 000002 SPD +BSPF 003617' +BSPF2 003620' +BSPF3 003637' +CAL5 002315' +CAL6 002317' +CALFLG 000017 +CDRBIT 100000 SPD +CDRCNT 004035' +CDRFLG 000040 SPD +CDRIN 000100 SPD +CHECK 002152' +CHECK1 002132' +CHECK2 002135' +CHKFLG 000040 SPD +CHR 000004 +CLRBUF 000553' +COLON 000072 SPD +COMASK 000044' +COMBUF 004060' +COMCNT 004131' +COMEOF 004057' +COMERR 001135' +COMMA 000054 SPD +COMPRO 000056' +COMPRP 000056' +COMPTR 000055' +COMPTS 004132' +COMSTO 000037' +CON 000001 SPD +COPY1 002241' +COPY1A 002225' + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 81-1 +PIP MAC 24-APR-78 03:15 SYMBOL TABLE + +COPY2A 002311' +COPY2B 002313' +COPY3 002323' +COPY3B 002321' +COPY4 002305' +COPY5 002300' +COPY6 002252' +COPY6A 002250' +COPY6B 002254' +COPY6C 002266' +CORE 047000 000011 +CPOPJ 001711' +CPOPJ1 001707' +CPOPJZ 001710' +CR 000015 SPD +CRLF 003205' +CZ 000032 SPD +DATE 003717' +DATE 047000 000014 +DATED 003720' +DATO2 003262' +DATOUT 003224' +DBUF 004400' +DEL 000177 SPD +DELE1 002443' +DELE2 002504' +DELE3 002466' +DELE5 002513' +DENS2 000200 SPD +DENS5 000400 SPD +DENS8 000600 SPD +DERR2 004642' +DERR2A 001166' +DERR2B 001165' +DESCR1 000464' +DESCRP 000451' +DEV 000100 SPD +DEVA 004050' +DEVCHR 047000 000004 +DEVER 000526' +DEVER1 000525' +DEVER2 000525' +DEVERR 004641' +DEVICE 004637' +DEVPPN 047000 000055 +DEVTST 000506' +DFLG 000010 SPD +DIR 000005 SPD +DIRPPN 003737' +DIRST 004012' +DIRST1 004013' +DISK30 000000 SPD + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 81-2 +PIP MAC 24-APR-78 03:15 SYMBOL TABLE + +DISPTA 001436' +DISPTB 001420' +DOUT 000015 +DOUT1 000016 +DSKBIT 200000 SPD +DSKCHR 047000 000045 +DSKIN 040000 SPD +DSKOUT 010000 SPD +DTABIT 000004 SPD +DTADI1 002702' +DTADIR 002701' +DTADR 002460' +DTAID 003736' +DTAIN 020000 SPD +DTALS1 003043' +DTALS2 003050' +DTALS3 003052' +DTALS4 003055' +DTALST 003023' +DTAOUT 004000 SPD +DTBLK 003337' UXT +DTCH1 003277' +DTCH2 003272' +DTCHEC 003271' +DTCLR 002212' +DTCOPY 002224' +DTD1 002456' +DTD5 002544' +DTD6 002543' +DTDELE 002432' +DTDEV 003336' UXT +DTDIR 000007 SPD +DTJBFF 004015' +DTON 004044' +DTONSV 004021' +DTPDIR 003017' +DTRNAM 002522' +DTRNM1 002536' +DVSWTH 000200 SPD +E10A 002053' +E10B 001752' +EOFBIT 020000 SPD +EOTBIT 002000 SPD +ERR1 001767' +ERR10 001751' +ERR1A 001770' +ERR1B 001771' +ERR2 002076' +ERR2A 002107' +ERR3 002003' +ERR3A 002005' +ERR3AA 002007' +ERR4 002024' + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 81-3 +PIP MAC 24-APR-78 03:15 SYMBOL TABLE + +ERR4A 002033' +ERR4B 002033' +ERR5 002066' +ERR5A 002060' +ERR6 002040' +ERR6A 002040' +ERR6B 002045' +ERR7A 002115' +ERR8 002122' +ERR9 001762' +ESQ 040000 SPD +ESWTCH 004134' +EXIT 047000 000012 +FF 000014 SPD +FFLG 000020 SPD +FIL1 003410' +FIL11 003365' +FIL2 003430' +FIL3 003414' +FIL4 003443' +FIL5 003445' +FILEX 004041' +FILNAM 004040' +FILTYP 003353' +FLAG 000006 +FN.EX 001146' +FNEX 000001 SPD +FNSET 002746' +FNSET1 002762' +FRSTIN 000400 SPD +FTDSK 000000 SPD +GET 001462' +GET1 001557' +GET1A 001566' +GET2 001532' +GET4 001553' +GET5 001521' +GET7 001666' +GET7B 001712' +GET7C 001673' +GETA2 001727' +GETA3 001717' +GETA5 001724' +GETA5A 001747' +GETA7 001735' +GETBUF 001404' +GETCOM 001175' +GETDEC 001236' +GETEN2 001415' +GETN1 001240' + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 81-4 +PIP MAC 24-APR-78 03:15 SYMBOL TABLE + +GETN2 001306' +GETNUD 001305' +GETNUM 001237' +GETOCT 001235' +GETPC1 001506' +GETPC2 001544' +GETPC3 001542' +GETPC4 001476' +GETPPN 003333' +GETPPN 047000 000024 +GETT10 001206' +GETT11 001217' +GETT2 001371' +GETT3 001252' +GETT3A 001276' +GETT3B 001274' +GETT4 001372' +GETT5 001320' +GETT5A 001321' +GETT6 001300' +GETT7 001327' +GETT8 001335' +GETT9 001223' +GETTA 001352' +GETTAB 047000 000041 +GETTIN 001365' +GETUPJ 001232' +GFLG 000200 SPD +HEDL1 004706' UXT +HPAGE 000020 SPD +IBF 003742' +IBFLG 000400 SPD +IFLG 000100 SPD +IN 000003 SPD +INBIT 000002 SPD +INERR 001620' +INFO 002711' +INFO1 002730' +INFO2 002735' +INFO3 002743' +INFOFL 000100 SPD +INHIB 000001 SPD +INICN1 000541' +INICN2 000542' +INICON 001410' +INIMTA 003667' +ININI1 004636' +ININIT 000426' +INLOOK 000204' +INLUK1 000217' +INMTA 003676' +INMTA1 004644' +INOMTA 003666' + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 81-5 +PIP MAC 24-APR-78 03:15 SYMBOL TABLE + +INP 001616' +IOERR 001020' +IOERRG 001114' +IOERRN 001107' +IOS 000010 +JFLG 001000 SPD +JOBFF 000547' EXT +JOBREL 000437' EXT +JOBSA 000007' EXT +JOBSTR 047000 000047 +K 000000 SPD +K1 003724' +K3 003725' +K4 003726' +LA 000137 SPD +LBUF 004174' +LBUFE 004377' SPD +LDP 004000 SPD +LF 000012 SPD +LFLG 000020 SPD +LINE 000001 SPD +LISTTY 002000 SPD +LOOK 002566' +LOOK01 002570' +LOOK1 002655' +LOOK2 002623' +LOOK3 002630' +LOOK4 002635' +LOOK5 002635' +LOOK6 002572' +LOOK6A 002614' +LOOK6C 002616' +LOOK6D 002620' +LOOK7A 002640' +LOOK7B 002604' +LOOK7C 002650' +LOOK8 002607' +LOOKA 002767' +LOOKB 003006' +LOOKC 003014' +LOOKF 003002' +LOW 000000' +LOWTOP 004665' +LPTBIT 040000 SPD +LPTOUT 000010 SPD +M1 000140' +M2 000132' +M3 000107' +M3A 000111' +M4 000154' +M5 000173' +MAIN1 000411' + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 81-6 +PIP MAC 24-APR-78 03:15 SYMBOL TABLE + +MAIN2 000421' +MAINA1 000031' +MAINA2 000275' +MAINA3 000301' +MAINA4 000307' +MAINA5 000323' +MAINB 000415' +MAINC 000073' +MARKEF 003605' +MATCH 004647' +MATEX 000002 SPD +MATFN 000004 SPD +MNPT 004153' +MONTH 004137' +MORCOR 000262' +MPC2 002350' +MSTIME 047000 000023 +MT1 003531' +MT2FLG 002000 SPD +MT5FLG 001000 SPD +MT8FLG 000400 SPD +MTABIT 000020 SPD +MTAFLG 000001 SPD +MTAIN 000400 SPD +MTANAM 004645' +MTAOUT 000200 SPD +MTAREQ 004056' +MTBFLG 000002 SPD +MTC1 003562' +MTCONT 003554' +MTDFLG 000100 SPD +MTEFLG 004000 SPD +MTFFLG 000020 SPD +MTFLG 200000 SPD +MTPFLG 000200 SPD +MTPTC1 002362' +MTPTCR 002337' +MTR1 003701' +MTTFLG 000004 SPD +MTUFLG 000040 SPD +MTWAIT 003603' +MTWFLG 000010 SPD +NAME 000557' +NAMTAB 003766' +NEWDEV 000010 SPD +NEWFIL 000020 SPD +NEWPP 000020 SPD +NM1 000566' +NM10 000654' +NM11 000661' +NM12 000664' +NM13 000666' +NM14 000670' + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 81-7 +PIP MAC 24-APR-78 03:15 SYMBOL TABLE + +NM15 000672' +NM16 000700' +NM2 000567' +NM3 000571' +NM4 000576' +NM4A 000602' +NM5 000606' +NM5A 000613' +NM5B 000673' +NM6 000633' +NM7 000640' +NM8 000643' +NM9 000646' +NO. 004051' +NOMORE 000020 SPD +NSMOD 000040 SPD +NSPROT 000002 SPD +NSWTCH 000400 SPD +OBF 003745' +OBI 003750' +ODEV 004634' +OFLG 000001 SPD +OKB 003716' +OKBD 003715' +OKBLK0 002422' +OKBLKS 002412' +OMOD 004633' +OMOD1 000251' +OMODE 000223' +OMODER 000267' +ONEOUT 000040 SPD +OPTMAX 003722' +OPTR 004020' +OPTRA 003723' +OSFLG 400000 SPD +OUT 000002 SPD +OUTBIT 000001 SPD +OUTCH1 000711' +OUTCH2 003307' +OUTCH3 003320' +OUTCHK 003305' +OUTDC1 003235' +OUTDE4 003252' +OUTDEC 003260' +OUTLB1 000712' +OUTLB2 000745' +OUTLB3 000754' +OUTLBA 000717' +OUTLBF 000707' +OUTLOO 000200' +OUTOCT 003236' +OUTP 000762' +OUTP1 000764' + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 81-8 +PIP MAC 24-APR-78 03:15 SYMBOL TABLE + +OUTP3 000772' +OUTP4 000770' +P 000005 +P1 000010' +P6BIT 002201' +P6BIT1 002203' +P6BIT2 002207' +PARE 001000 SPD +PCHTAB 001546' +PCONV 000010 SPD +PDIR1 003101' +PDIR1B 003070' +PDIR2 003211' +PDIR21 003220' +PDIR2A 003213' +PDIR3 003141' +PDIR3A 003177' +PDIR3B 003174' +PDIR4 003107' +PDIR4A 003130' +PDIR4B 003131' +PDIR6 003200' +PDIR7 003221' +PDIR8 003075' +PDL 004154' +PERIOD 000056 SPD +PFLG 000004 SPD +PICUP 002662' +PICUP2 002662' +PICUP4 002665' +PIP 000012' +PIP1 000000' +PIP2 000013' +PIP2A 000013' +PIP2B 000023' +PJOB 047000 000030 +PP 004043' +PP11 003732' +PP13 003733' +PPTIN 200000 SPD +PPTOUT 400000 SPD +PR 004042' +PRECOP 002220' +PRETXT 002155' +PRN 003243' +PRNUMA 003237' +PROTK 000476' +PROTK1 000504' +PROTO 003173' UXT +PROTS 004033' +PSCAN 000343' +PSCAN1 000376' +PSCAN2 000352' + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 81-9 +PIP MAC 24-APR-78 03:15 SYMBOL TABLE + +PSCAN3 000351' +PSCAN4 000374' +PSCAN5 000407' +PSCAN6 000404' +PSCANA 000333' +PSCANB 000326' +PTEXT 002155' +PTEXT1 002167' +PTEXT2 002166' +PTPBIT 000400 SPD +PTRBIT 000200 SPD +PTRPT 004036' +PUT 000756' +PUTCON 002175' +QFLG 000001 SPD +QPIP 003727' +QUEST 001652' +QUEST2 001662' +RBSIZ 000005 SPD +READ1 002000 SPD +REDFLG 000001 SPD +RENAME 002553' +RENSN 004651' +RESET 047000 000000 +REWIND 003602' +RFLG 000100 SPD +RIBSTS 000017 SPD +RIMFLG 000002 SPD +RIMSW 000000 SPD +RIMTB 004652' +RSDCFL 000200 SPD +RUN 047000 000035 +RXFLG 020000 SPD +SAVAC 003761' +SBIN 000004 SPD +SLEOT 003615' +SNI 100000 SPD +SPACE 000040 SPD +SPCT 004030' +SPMOD 001000 SPD +SPOK 020000 SPD +SQMOD 000200 SPD +SQNUM 004014' +SR2 002371' +SSWTCH 001000 SPD +STAR 003730' +STS 000400 SPD +SUS 010000 SPD +SVER 000005 SPD +SVIBF 003740' +SVJBF1 004017' +SVJBFF 004016' + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 MACRO 10 05:52 24-APR-78 PAGE 81-10 +PIP MAC 24-APR-78 03:15 SYMBOL TABLE + +SVOBF 003741' +SVPTR1 004023' +SVPTR2 004024' +SYSFLG 000002 SPD +SYSLST 000004 SPD +SYSPP 004037' +T1 000001 +T2 000002 +T3 000003 +T4 000007 +T5 000011 +T6 000012 +T7 000014 +TAB 000011 SPD +TABCT 004027' +TABOUT 000755' +TABSP 000010 SPD +TAPE 000004 SPD +TBMOD 000004 SPD +TFI 003753' +TFO 003756' +TLBRKT 004025' +TMPCOR 047000 000044 +TMPI 004000 SPD +TMPO 010000 SPD +TOTBRK 004026' +TTYBIT 000010 SPD +TTYIN 001000 SPD +TTYOUT 100000 SPD +TTYZ 002376' +TWL 003731' +TXTA 001062' +TXTB 001066' +TXTC 001074' +TXTC1 001100' +TXTD 001042' +TXTD1 001047' +TXTD2 001055' +UNLOAD 003600' +UPROJ 003734' +UTPCLR 047000 000013 +VPIP 000030 SPD +WAIT 072000 000000 +WCH 000000 SPD +WRTLOK 400000 SPD +XFLG 002000 SPD + TTTTTTTTTTTTTTT EEEEEEEEEEEEEEE NNN NNN DDDDDDDDDDDD MMM MMM PPPPPPPPPPPP +TTTTTTTTTTTTTTT EEEEEEEEEEEEEEE NNN NNN DDDDDDDDDDDD MMM MMM PPPPPPPPPPPP +TTTTTTTTTTTTTTT EEEEEEEEEEEEEEE NNN NNN DDDDDDDDDDDD MMM MMM PPPPPPPPPPPP + TTT EEE NNN NNN DDD DDD MMMMMM MMMMMM PPP PPP + TTT EEE NNN NNN DDD DDD MMMMMM MMMMMM PPP PPP + TTT EEE NNN NNN DDD DDD MMMMMM MMMMMM PPP PPP + TTT EEE NNNNNN NNN DDD DDD MMM MMM MMM PPP PPP + TTT EEE NNNNNN NNN DDD DDD MMM MMM MMM PPP PPP + TTT EEE NNNNNN NNN DDD DDD MMM MMM MMM PPP PPP + TTT EEEEEEEEEEEE NNN NNN NNN DDD DDD MMM MMM PPPPPPPPPPPP + TTT EEEEEEEEEEEE NNN NNN NNN DDD DDD MMM MMM PPPPPPPPPPPP + TTT EEEEEEEEEEEE NNN NNN NNN DDD DDD MMM MMM PPPPPPPPPPPP + TTT EEE NNN NNNNNN DDD DDD MMM MMM PPP + TTT EEE NNN NNNNNN DDD DDD MMM MMM PPP + TTT EEE NNN NNNNNN DDD DDD MMM MMM PPP + TTT EEE NNN NNN DDD DDD MMM MMM PPP + TTT EEE NNN NNN DDD DDD MMM MMM PPP + TTT EEE NNN NNN DDD DDD MMM MMM PPP + TTT EEEEEEEEEEEEEEE NNN NNN DDDDDDDDDDDD MMM MMM PPP + TTT EEEEEEEEEEEEEEE NNN NNN DDDDDDDDDDDD MMM MMM PPP + TTT EEEEEEEEEEEEEEE NNN NNN DDDDDDDDDDDD MMM MMM PPP + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 05:53:58 +File: DSKB1 :TENDMP.LST [8,296] Created: 20-April-1967 05:53:00 Printed: 24-April-1978 05:53:42 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1142 +File will be deleted after printing + +TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 1 +TENDMP MAC 24-APR-78 14:35 TD10 VERSION + + TITLE TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 + IFNDEF REL,<REL=0> ;0 PAPER TAPE, 1 RELOCATABLE BINARY + IFNDEF MAGT,<MAGT=0> ;0 DTAPE, 1 MTAPE + IFN MAGT,< + ; MAGTAPE UTILITY ROUTINE - COURTSEY DATALINE SYSTEMS J HANCOCK + > + IFNDEF MODE,<MODE=0> ;0 IS TD10, 1 IS 551/136 + IFNDEF CORE,<CORE=4> ;NUMBER OF 8K MEMORY BLOCKS + + IFE MODE,<SUBTTL TD10 VERSION> + IFN MODE,<SUBTTL 551/136 VERSION> + + IFE REL,< + IFE MAGT,<RIM10B> + IFN MAGT,<RIM10>> + 000210 UTC=210 + 000214 UTS=214 + 000200 DC=200 + 000320 DTC=320 + 000324 DTS=324 + + 000000 F=0 ;MUST BE 0. USED BY JRA'S + 000002 A=2 ;MISC TEMP. HOLDS 136 CONO INDEX IN UWAIT + 000001 B=1 ;TEMP. HOLDS BLOCK # COMPUTATION IN SEARCH + 000003 C=3 ;HOLDS BITS FOR DECTAPE CONO DURING I/O + 000004 D=4 ;HOLDS POINTERS FOR AOBJN'S THROUGH CORE + 000005 E=5 ;HOLDS COUNT OF WORDS IN CURRENT DT BLOCK + 000006 P=6 ;PC FOR JSP'S + 000007 CKS=7 ;HAD BEEN CHECKSUM IN MACDMP + 000010 FILN=10 ;NUMBER OF FILE IN DIRECTORY, 1 TO 26 OCTAL + 000011 BLKNO=11 ;BLOCK NUMBER SEARCHED FOR ON TAPE + 000012 WRITE=12 ;MULTI-STATE FLAG FOR DEFINING I/O OPERATION + ;1=D 0=K -1=ELSE + 000013 PNTR=13 ;POINTER TO BYTE TABLE IN DIRECTORY + 000014 CH=14 ;HOLDS 6BIT CHARACTER OF COMMAND, OR -1 + 000015 Q=15 ;ANOTHER JSP AC + 000016 G=16 ;RARELY USED VERY TEMP + 000017 CT=17 ;COUNT OF WORDS TO DUMP + + 077777 COMPTR=BEGR+377 ;COMMAND POINTER, IF SUPPLIED + 077175 LOZAD=BEGR-203 ;WHEN CORE IS CLEARED, IT + ;IS FROM 40 THRU LOZAD + 000020 LOW=20 ;FIRST LOCATION CONSIDERED FOR DUMPING + 077175 HIGH=BEGR-203 ;LAST LOCATION CONSIDERED FOR DUMPING + ;ZEROED AT BEG THESE DAYS + 077176 FOOF=BEGR-202 ;NEEDED FOR ZERO CORE SEARCH, ZEROED AT BEG1 + 077177 TAB=BEGR-201 ;FILE DIRECTORY + 077377 LINK=BEGR-1 ;0-17=LINK, 18-27=FBN, 29-35=WC + 077400 IFE REL,<IFE MAGT,<LOC 17400+<<CORE-1>*20000>> + IFN MAGT,<LOC 17377+<<CORE-1>*20000> + IOWD LAST-BEGR+1,BEGR>> + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 2 +TENDMP MAC 24-APR-78 14:35 TD10 VERSION + + ;INITIAL ENTRY IS AT BEGR, UNLESS A COMMAND POINTER IS + ;SUPPLIED IN COMPTR. IN THAT CASE, ENTRY IS AT BEGR+1 + + 077400 402000 077777 BEGR: SETZM COMPTR ;CLEAR ANY JUNK IN COMMAND POINTER + 077401 700200 635550 CONO 635550 ;I/O RESET, ETC. + 077402 265300 077467 BEG: JSP P,CRR ;TYPE A CR-LF + 077403 201200 077750 MOVEI D,SPNT-2 ;PREPARE TO REMOVE AOBJN POINTERS + 077404 403100 077176 BEG1: SETZB A,FOOF ;CLEAR A TO PUT IN CORE, CLEAR + ;FOOF FOR THE NEXT ZERO CORE SEARCH + 077405 250104 000002 EXCH A,2(D) ;REMOVE HEADER LIST + 077406 253100 077406 AOBJN A,. ;COUNT THROUGH TO NEXT HEADER + 077407 201202 777777 MOVEI D,-1(A) ;ACCOUNT FOR OVERSHOOT IN AOBJN + 077410 326200 077404 JUMPN D,BEG1 ;IF WE DIDNT AOBJN A 0, GO FOR NEXT HDR + 077411 200540 077753 MOVE PNTR,[XWD 500,TAB-1] ;5 BIT BYTES IN DIRECTORY + 077412 403600 000000 SETZB CH,F + 077413 475500 000215 CRCH: SETOI WRITE,215 ;USED FOR CARRET TYPEOUT + 077414 403140 077175 TYI: SETZB C,HIGH ;HOPEFULLY HIGH IS TEMPORARY + 077415 403040 000005 SETZB B,E ;NAME INITIALIZING + 077416 665040 400000 TLOA B,400000 ;NULL NAME IS "@. " + 077417 201240 000002 SPACE: MOVEI E,C-1 ;EXTENSION INTO C + 077420 505240 020600 HRLI E,20600 ;FAKE OUT END TEST OF BYTE PTR + ;STOP TAPE DRIVE + IFN MODE,<CONO UTC,0> + 077421 732200 400000 IFE MODE,<CONO DTC,400000> + 077422 134120 077400 NEXT: ILDB A,@BEGR ;GIVES A 0 UNLESS COMMAND POINTER SUPPLIED + ;RH OF NEXT IS USED AS A CONSTANT + 077423 475400 000207 BELL: SETOI FILN,207 ;INITIALIZATION FOR SEARCH + 077424 403440 000017 SETZB BLKNO,CT ; " + 077425 402000 077377 SETZM LINK + 077426 326100 077433 JUMPN A,RCH ;JUMP IF COMMAND READ FROM CORE + 077427 712340 000040 CONSO TTY,40 ;TYPEIN FLAG? + 077430 254000 077427 JRST .-1 ;NO,WAIT + 077431 712040 000002 DATAI TTY,A ;GET TYPED IN CHARACTER + 077432 265300 077471 JSP P,TYO ;ECHO IT (WITH PARITY) + 077433 405100 000177 RCH: ANDI A,177 ;STRIP OFF PARITY + 077434 306100 000177 CAIN A,177 ;RUBOUT? + 077435 254000 077400 JRST BEGR ;YES. RESTART TENDMP + 077436 302100 000033 CAIE A,33 ;NEW ALTMODE? + 077437 301100 000175 CAIL A,175 ;OR 175 OR 176 ALTMODES? + 077440 254000 077501 JRST ALTTST ;YES, SOME ALTMODE. + 077441 301100 000140 CAIL A,140 ;LOWER CASE CHARACTER? + 077442 620100 000040 TRZ A,40 ;YES. CHANGE TO UPPER CASE + 077443 275100 000040 SUBI A,40 ;CONVERT TO SIXBIT + 077444 321100 077504 JUMPL A,CARRET ;ANY CONTROL CHARACTER + 077445 322100 077417 JUMPE A,SPACE ;CHAR WAS 40 + 077446 603240 770000 NEXT1: TLNE E,770000 ;NO MORE THAN SIX CHARS + 077447 136100 000005 IDPB A,E ;GOES INTO AC1 = B + 077450 254000 077422 JRST NEXT ;GET ANOTHER CHARACTER + + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 3 +TENDMP MAC 24-APR-78 14:35 TD10 VERSION + + + ;HERE ON JUMP BLOCK DURING LOADS, OR NUMBER>7 ALT + 077451 JBLK: + ;STOP TAPE DRIVE + IFN MODE,<CONO UTC,0> + 077451 732200 400000 IFE MODE,<CONO DTC,400000> + 077452 542200 077454 HRRM D,SADR ;SAVE STARTING ADDRESS + 077453 326600 077402 JUMPN CH,BEG ;IF NOT LOADGO COMMAND + 077454 254000 077402 SADR: JRST BEG ;CURRENT S.A. + 077455 LOADS: ;HERE TO LOAD TAPE TO CORE + 077455 201200 077176 MOVEI D,LOZAD+1 ;FIRST LOC NOT TO ZERO + 077456 402000 000040 SETZM 40 ;A "FEATURE" + 077457 200140 077754 MOVE C,[XWD 40,41] ;PREPARE TO CLEAR CORE. + 077460 606600 000003 TRNN CH,3 ;SKIP ON M,N NOT ON L,T,@ + 077461 251144 777777 BLT C,-1(D) ;ZERO CORE + 077462 265640 077557 LOAD: JSP Q,LODUMP ;START READING FILE. LODUMP PROCESSES + ;ONE HEADER AND ITS DATA + 077463 254000 077462 JRST LOAD ;IF OK, GET NEXT BLOCK.(IF NONE, + ;LODUMP RETURNS TO JBLK.) + 077464 336240 000012 DELE: SKIPN E,WRITE ;SKIP IF NOT IN THE K PHASE OF A D COMMAND. + ;OR A K COMMAND + ;ALSO, SET E =0, SO SEARCH HAPPENS IN RBLK + 077465 344500 077713 CLS1: AOJA WRITE,CLSTP ; 0 TO 1. GO DUMP OUT DIRECTORY. + 077466 334300 077422 ERR: SKIPA P,NEXT ;SET TO RETURN TO BEGR + 077467 334100 077413 CRR: SKIPA A,CRCH ;LIKE HRROI A,215 AND SKIPA + 077470 334100 077423 SKIPA A,BELL ;GET A BELL CHARACTER + 077471 336000 077777 TYO: SKIPN COMPTR ;DONT TYO IF NO TYI, UNLESS ERR + 077472 712140 000002 DATAO TTY,A ;TYPE OUT + 077473 712300 000020 CONSZ TTY,20 ;WAIT FOR TTY TO FINISH + 077474 254000 077473 JRST .-1 ;NOT YET + 077475 302100 000215 CAIE A,215 ;IF CR TYPED IN, + 077476 325106 000000 JUMPGE A,(P) ;OR SIGN BIT OF CHAR ON,(SEE CRR) + 077477 201100 000012 MOVEI A,12 ;APPEND A LINEFEED + 077500 254000 077471 JRST TYO ;GO TYPE LF + + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 4 +TENDMP MAC 24-APR-78 14:35 TD10 VERSION + + 077501 607040 004040 ALTTST: TLNN B,4040 ;IF ALPHA CHARACTERS, DONT GET CH + 077502 135600 000005 LDB CH,E ;LAST CH BEFORE ALT, -40 + 077503 326600 077667 JUMPN CH,ALTMD ;IF CH NOT NULL, GOT PROCESS ALTMODE + 077504 205400 777752 CARRET: MOVSI FILN,-26 ;FILE NAME SPECIFIED. FIRST THING TO + ;DO IS LOOK IT UP IN DIRECTORY + 077505 336010 077322 LUP: SKIPN TAB+123(FILN) ;SEARCH FOR FREE FILE + 077506 332450 077350 SKIPE BLKNO,TAB+151(FILN) ;CHECK BOTH WORDS + 077507 634440 000011 TDZA BLKNO,BLKNO ;ENSURE CLEAR BLOCK NUMBER + 077510 542400 077517 HRRM FILN,FREE ;SAVE NUMBER OF A FREE FILE + 077511 510710 077350 HLLZ G,TAB+151(FILN) ;ONLY CHECK LEFT OF 2ND WD + 077512 316050 077322 CAMN B,TAB+123(FILN) ;SEARCH FOR TYPED-IN FILE + 077513 312140 000016 CAME C,G ;BOTH WORDS + 077514 253400 077505 AOBJN FILN,LUP ;NOT THIS ONE. KEEP LOOKING + 077515 321400 077522 JUMPL FILN,BEG69 ;IF FILE FOUND, JUMP + 077516 323500 077466 JUMPLE WRITE,ERR ;IF NOT FOUND, BETTER BE DUMP + 077517 201400 077517 FREE: MOVEI FILN,. ;DUMP & NOT FOUND, MAKE ENTRY WHERE FREE + ;(ADDRESS MODIFIED ABOVE) + 077520 332010 077322 SKIPE TAB+123(FILN) ;MAKE SURE HOLE AVAILABLE + 077521 254000 077466 JRST ERR ;NO FREE SLOTS + + 077522 201410 000001 BEG69: MOVEI FILN,1(FILN) ;FILN IS FILE #+1; CLR LH + 077523 321500 077455 JUMPL WRITE,LOADS ;ALL LOAD INSTRUCTIONS + IFE MAGT,< + 077524 336000 000012 SKIPN WRITE ;DELETE? (K COMMAND) + 077525 403040 000003 SETZB B,C ;YES, KILL FILE + 077526 202050 077321 MOVEM B,TAB+122(FILN) ;CLEAR IF DELE, ENTER IF NEW DUMP + 077527 512150 077347 HLLZM C,TAB+150(FILN) ;BOTH WORDS + ;FALL INTO DUMP ROUTINE + ;WHICH IS A NO-OP FOR K + + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 5 +TENDMP MAC 24-APR-78 14:35 TD10 VERSION + + + ;DUMP WRITES OUT CORE ONTO TAPE + + ;DUMP THRU DUMP2-1 SETS UP POINTERS TO NON-ZERO CORE AREAS. THESE + ;AOBJN POINTERS ARE CALLED "HEADERS", AND PRECEDE THE DATA WHEN + ;THE TAPE IS WRITTEN. + ;THE FIRST HEADER IS KEPT IN SPNT. SUCCESIVE HEADERS GO INTO THE FIRST + ;ZERO WORD FOLLOWING THE BLOCK CORRESPONDING TO THE PREVIOUS HEADER. + ;AFTER THE LAST NON-ZERO BLOCK IS (BY DEFINITION) A ZERO, WHICH + ;TERMINATES THE HEADER LIST. THIS WORD MAY BE LOCATION FOOF (37176) IF + ;CORE WAS FILLED UP TO THE BASE OF TENDMP. + + 077530 DUMP: ;HERE ON D,K. (BLKN)=0, FILN SET UP + 077530 210100 077755 MOVN A,[XWD HIGH-LOW-1,-LOW+1] ;COUNTER TO EXAMINE + ;CORE FOR BLOCKS OF 0 + 077531 201340 077751 MOVEI CKS,SPNT-1 ;FIRST HEADER GOES INTO SPNT + 077532 336002 000001 DMP1: SKIPN 1(A) ;FIND SOME NON-ZERO CORE + 077533 253100 077532 AOBJN A,.-1 ;ZERO. KEEP LOOKING. + 077534 202100 000004 MOVEM A,D ;SAVE ADR + 077535 336002 000001 SKIPN 1(A) ;FIND SOME ZERO CORE + 077536 332002 000002 SKIPE 2(A) ;DON'T MAKE NEW BLOCK FOR 1 ZERO + 077537 253100 077535 AOBJN A,.-2 ;NON-ZERO. KEEP LOOKING + 077540 274200 000002 SUB D,A ;GET -COUNT IN BOTH HALVES OF D + 077541 275744 777777 SUBI CT,-1(D) ;COUNT N WORDS DATA, 1 HDR + 077542 271202 000000 ADDI D,(A) ;GET F.A.-1 IN RH OF D + 077543 202207 000001 MOVEM D,1(CKS) ;SAVE HEADER + 077544 325200 077546 JUMPGE D,.+2 ;ON DATA GROUPS, + 077545 200340 000002 MOVE CKS,A ;GET THE HEADER + ;F.A.+W.C. IS ADR OF NEXT HEADER + ;I.E., FIRST 0 AFTER NON-ZERO BLOCK + 077546 321100 077532 JUMPL A,DMP1 ;LOOP IF MORE CORE + 077547 242340 000002 LSH CKS,2 ;SHIFT CORE SIZ FOR DIR + 077550 333000 000012 SKIPLE WRITE ;IF DUMPING, SET JOBREL + 077551 542350 077347 HRRM CKS,TAB+150(FILN) ;PUT IN DIR + 077552 201200 077751 DMP2: MOVEI D,SPNT-1 ;SET UP TO FOLLOW THE HEADERS. + 077553 201757 000001 MOVEI CT,1(CT) ;CLR LH, COUNT JBLK + 077554 200204 000001 DMP3: MOVE D,1(D) ;GET HEADER + 077555 325200 077566 JUMPGE D,THRU ;IF NULL HEADER FOUND + 077556 201640 077554 MOVEI Q,DMP3 ;Q:= DMP3 AS A RETURN AFTER AOBJN + > + + IFN MAGT,< + JRST ERR ;HOW DID WE GET HERE? DLS*** + ;DUMP WRITES OUT CORE ONTO MAGNETIC TAPE + ;DUMP WRITES OUT A CORE IMAGE ON MAGNETIC TAPE WITHOUT + ;ZERO COMPRESSION. THE RECORDS ARE 200(OCTAL) WORDS IN LENGTH + ;AND BEGIN WITH WORD ZERO. BEFORE STARTING THE TAPE IS REWOUND. + ;IT ASSUMES MTA0, AT LEAST FOR NOW. + + MTC= 340 + MTS= 344 + DUMP: CONO MTC,1000 ;REWIND + CONSO MTS,300000 ;WAIT FOR BOT OR REWINDING + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 5-1 +TENDMP MAC 24-APR-78 14:35 TD10 VERSION + + JRST .-1 + CONSO MTS,40 ;TRANSPORT READY? + JRST .-1 + SETZ A, + DUMP1: HRLI A,-200 ;WORDS PER BLOCK + CONO MTC,64100 ;START WRITE OPERATION + DUMP2: CONSO MTS,1 ;TD10 READY FOR DATA? + JRST .-1 + DATAO MTC,(A) ;SEND OUT DATA + AOBJN A,DUMP2 ;POINT TO NEXT WORD AND LOOP + CONO MTS,1 ;STOP THE DRIVE + CONSO MTS,100 ;WAIT TILL STOPPED + JRST .-1 + CONSZ MTS,464610 ;ANY ERRORS? + JRST ERR ;YES, GO RING BELL + AOSE [-CORE*20000/200+2] ;ALL CORE DUMPED? + JRST DUMP1 ;NO + CONO MTC,65100 ;WRITE END OF FILE + CONSO MTS,100 ;DONE? + JRST .-1 + CONO MTC,65100 + CONSO MTS,100 + JRST .-1 + JRST BEGR ;ALL DONE + > + + + 077557 265300 077572 LODUMP: JSP P,UWAIT + 077560 255000 000004 JFCL D ;IN/OUTPUT HEADER + 077561 325200 077451 JUMPGE D,JBLK ;IF JRST BLOCK READ. CANT HAPPEN ON WRITE + 077562 265300 077572 DMP5: JSP P,UWAIT + 077563 255004 000001 JFCL 1(D) ;IN/OUTPUT DATA WORD + 077564 253200 077562 AOBJN D,DMP5 ;COUNT DOWN THE HEADER + 077565 254015 000000 JRST (Q) ;END OF HEADER. TO DMP3 OR LOAD+1 + ;WRITE: 1=D 0=K -1=ELSE + + 077566 265300 077572 THRU: JSP P,UWAIT ;WRITE OUT JRST BLOCK + 077567 255000 077454 JFCL SADR ;FROM LOC SADR + 077570 341240 077627 IFE MODE,< AOJL E,UWAIT1 ;FILL OUT BLOCK, TO GET CKSM OUT> + 077571 624500 777777 TRZA WRITE,-1 ;THEN SET WRITE TO 0, AND GO CLOBBER + ;ANY FURTHER BLOCKS WITH THIS FILN + 077572 341240 077627 UWAIT: AOJL E,UWAIT1 ;RETURN ADDR = (P) DATA ADDR = @(P) + ;E IS -WD COUNT IN BLOCK OR POSITIVE + ;BYTE POINTER FIRST TIME THRU + 077573 554440 077377 HLRZ BLKNO,LINK ;SET TO FOLLOW LINK + 077574 325500 077576 MNLUP0: JUMPGE WRITE,MNLUP ;WRITING OR DELETING + 077575 326440 077620 JUMPN BLKNO,RBLK + 077576 354000 000011 MNLUP: AOSA BLKNO ;NEXT BLOCK IN THE DIRECTORY + 077577 137040 000013 MNLUP1: DPB B,PNTR ;FOR DELETE, 0 FILE NAME AND NUMBER + 077600 134100 000013 ILDB A,PNTR ;SEARCH FILE DIR + 077601 306100 000037 CAIN A,37 + 077602 254000 077464 JRST DELE ;END OF TAB MARKER, DELE GOES TO + ;CLSTP ON A "D" TO DUMP DIRECTORY + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 5-2 +TENDMP MAC 24-APR-78 14:35 TD10 VERSION + + 077603 661112 777777 TLO A,-1(WRITE) ;0 ON D, -1 ON K OR K PHASE OF D + 077604 302402 000000 CAIE FILN,(A) ;IS THIS BLOCK ASSIGNED TO CURRENT FILE? + 077605 326100 077576 JUMPN A,MNLUP ;OR MAYBE FREE? JUMP IF IN USE BY + ;ANOTHER FILE. + 077606 137400 000013 DPB FILN,PNTR ;SMASH AWAY WRITE BLOCK ON D OR K. BUT + ;SEE MNLUP1 ON K. + 077607 322500 077577 JUMPE WRITE,MNLUP1 ;K COMMAND + 077610 336140 077377 SKIPN C,LINK ;HAS LINK BEEN SET UP? + 077611 137440 077756 DPB BLKNO,[XWD 101200,LINK] ;NO. PUT BLOCK IN AS FIRST BLK NO + 077612 506440 077377 HRLM BLKNO,LINK ;PUT BLOCK IN AS LINK + 077613 322140 077574 JUMPE C,MNLUP0 ;JUMP IF THIS IS THE FIRST PASS THRU DIRECTORY + 077614 554440 000003 HLRZ BLKNO,C ;GET LINKED BLOCK CHOSEN BEFORE + 077615 201140 000177 MOVEI C,177 ;PUT IN A WORD COUNT FOR PIP + 077616 436140 077377 IORM C,LINK ;AND PUT ALL THAT INTO LINK WORD + 077617 275740 000177 SUBI CT,177 ;DECREMENT WORDS LEFT TO GO + + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 6 +TENDMP MAC 24-APR-78 14:35 TD10 VERSION + + + ;RBLK SEARCHES FOR THE BLOCK IN BLKNO, ENTERS IT GOING FORWARD, + ;AND THEN READS INTO CORE, DUMPS CORE, OR COMPARES CORE AS + ;DETERMINED BY CONTENTS OF WRITE. + + 077620 560140 077744 RBLK: HRRO C,TAPENO ;CURRENT TAPE NO. + ;SET LH TO PREPARE FOR JUMPN IN DELE + IFE MODE,< + 077621 660040 777777 TRO B,-1 ;ENSURE GOING FORWARD WHEN FIRST SEARCH + 077622 732340 300000 CONSO DTC,300000 ;IS A DIRECTION ASSERTED? + 077623 660140 210000 TRO C,210000 ;NO. GO FORWARD + 077624 606040 400001 RB1: TRNN B,400001 ;DECIDE WHETHER TO TURN AROUND + 077625 660140 300000 TRO C,300000 ;TURN AROUND + 077626 732203 020200 RBG: CONO DTC,20200(C) ;ISSUE THE COMMAND TO TD10. + ;200=SEARCH, 300=READ, 700=WRITE. + 077627 732700 672700 UWAIT1: CONSZ DTS,672700 ;ANY ERRORS? + 077630 254000 077466 JRST ERR ;YES. GO DING AND THEN TYI + 077631 732740 000001 CONSO DTS,1 ;DATA READY? + 077632 254000 077627 JRST .-3 ;NO. GO WAIT SOME MORE + 077633 321252 077660 JUMPL E,INOUT(WRITE) ;IF IN MIDST OF A DT BLOCK, DISPATCH + 077634 732040 000001 DATAI DTC,B ;NO. SEARCHING. GET BLOCK NO. + 077635 620140 310000 TRZ C,310000 ;CLOBBER DIRECTION BITS IN CONO + 077636 275051 000000 SUBI B,(BLKNO) ;COMPARE WITH DESIRED BLOCK + 077637 732300 100000 CONSZ DTC,100000 ;COMPLEMENT DECISION IF GOING REVERSE + 077640 640040 777776 TRC B,-2 ;BIT 35 IS FOR TURNAROUND SPACE. + > + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 7 +TENDMP MAC 24-APR-78 14:35 TD10 VERSION + + + IFN MODE,< + SETOB A,B ;GO FORWARD, SET DC FOR SEARCH + CONSZ UTS,40 ;IS CHECKSUM BEING WRITTEN? + JRST .-1 ;WAIT + RB1: TRNN B,400001 ;DECIDE WHETHER TO TURN AROUND + TRCA C,10000 ;CHANGE DIRECTION AND DELAY + CONSO UTC,200000 ;UNIT SELECTED? + TRO C,2000 ;INVOKE STARTUP DELAY + RBG: CONO UTC,220200(C) ;COMMAND TO THE 551. + ;200=SEARCH, 300=READ, 700=WRITE. + CONO DC,4011(A) ;COMMAND TO THE 136. + UWAIT1: CONSZ UTS,6 ;ANY ERRORS? + JRST ERR ;YES. GO DING AND THEN TYI + CONSO DC,1000 ;DATA READY? + JRST .-3 ;NO. WAIT SOME MORE + JUMPL E,INOUT(WRITE) ;IF IN MIDST OF A DT BLOCK, DISPATCH + DATAI DC,B ;NO. SEARCHING. GET BLOCK NUMBER + TRZ C,2000 ;DONT DELAY ANY MORE + SUBI B,(BLKNO) ;COMPARE WITH DESIRED BLOCK + TRNE C,10000 ;COMPLEMENT IF GOING REVERSE + TRC B,-2 ;BIT 35 IS FOR TURNAROUND SPACE. + > + 077641 326040 077624 JUMPN B,RB1 ;JUMP IF NOT GOING FORWARD INTO (BLKNO) + 077642 211240 000200 MOVNI E,200 ;WORDS PER BLOCK + 077643 202300 000000 MOVEM P,F ;SAVE RETURN IN AC0 + 077644 660140 000100 TRO C,100 ;READ COMMAND, MAYBE + 077645 323500 077652 JUMPLE WRITE,RB2 ;JUMP IF READ + 077646 660140 000400 TRO C,400 ;CHANGE TO WRITE COMMAND + IFN MODE,<MOVNI A,401 ;SET 136 TO OUTPUT> + 077647 327740 077652 JUMPG CT,.+3 + 077650 553000 077377 HRRZS LINK ;IF LAST BLK, KILL LINK + 077651 137240 000013 DPB E,PNTR ;AND THE DIR BYTE ? 0 + 077652 302440 000144 RB2: CAIE BLKNO,^D100 ;IF NOT DIRECTORY BLOCK + 077653 201300 077655 MOVEI P,.+2 ;SETUP NEW RETURN + 077654 254000 077626 JRST RBG + 077655 340240 077377 AOJ E,LINK ;IN/OUTPUT LINK + 077656 267300 077627 JRA P,UWAIT1 ;RESTORE CALLER ADR + ;AND PROCESS DATA WORDS + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 8 +TENDMP MAC 24-APR-78 14:35 TD10 VERSION + + + IFE MODE,< + 077657 732066 000000 DATAI DTC,@(P) ;READ COMMANDS. GET WORD TO CORE + 077660 254000 077662 INOUT: JRST UWAIT2 ;INOUT-1 TO INOUT +1 ARE DISPATCHED TO. + 077661 732166 000000 DATAO DTC,@(P) ;OUTPUT TO TAPE + 077662 346240 077666 UWAIT2: AOJN E,UWAIT3 ;WAS THAT THE LAST WORD IN THE DT BLOCK? + 077663 732600 000001 CONO DTS,1 ;YES. GIVE FUNCTION STOP TO TD10 + 077664 732740 100000 CONSO DTS,100000 ;AND WAIT FOR CHECKSUM TO BE DONE + 077665 254000 077664 JRST .-1 ;NOT YET. WAIT + 077666 364246 000000 UWAIT3: SOJA E,0(P) ;DONE. COMPENSATE FOR THE AOJN ABOVE, AND + ;RETURN TO CALLER OF UWAIT OR RBLK + > + + IFN MODE,< + DATAI DC,@(P) ;READ COMMANDS. GET WORD TO CORE + INOUT: JRST UWAIT2 ;INOUT-1 THRU INOUT+1 ARE DISPATCHED TO. + DATAO DC,@(P) ;OUTPUT TO TAPE + UWAIT2: JRST 0(P) ;RETURN TO CALLER OF UWAIT OR RBLK. + > + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 9 +TENDMP MAC 24-APR-78 14:35 TD10 VERSION + + + 077667 201100 000044 ALTMD: MOVEI A,"$" + 077670 265300 077471 JSP P,TYO ;ALTMODE IS PRINTED AS "$" + + IFE MAGT,< + 077671 302600 000053 CAIE CH,"K"-40 ;FOR K, WRITE := 0 + 077672 306600 000044 CAIN CH,"D"-40 ;FOR D, WRITE :=1 + 077673 343500 077672 AOJLE WRITE,.-1 ;COUNT (WRITE) + > + + IFN MAGT,< + CAIN CH,"D"-40 ;FOR D, WRITE :=1 + AOJLE WRITE,.-1 ;COUNT (WRITE) + JUMPG WRITE,DUMP ;D MEANS GO DUMP ON MAG TAPE + > + + 077674 306600 000047 CAIN CH,"G"-40 ;GO TO PROGRAM? + 077675 254020 077454 JRST @SADR ;YES. JUMP OUT + 077676 306600 000046 CAIN CH,"F"-40 ;FILE DIR PRINT? + 077677 254000 077732 JRST FDIR ;YES. PRINT FILE DIR OF THIS TAPE + 077700 306600 000072 CAIN CH,"Z"-40 ;ZERO DIRECTORY? + 077701 254000 077721 JRST ZDIR ;DISPATCH + 077702 303600 000027 CAILE CH,27 ;SKIP IF OCTAL NUMBER + 077703 254000 077414 JRST TYI ;NO. GO PROCESS FILE NAME + 077704 242040 000003 LSH B,3 ;CONVERT SIXBIT TO OCTAL + 077705 246000 000003 LSHC F,3 ;F+1=B + 077706 326040 077704 JUMPN B,.-2 ;MAY BE MORE THAN 1 DIGIT (START ADR) + 077707 303000 000007 CAILE F,7 ;SKIP IF ONE DIGIT + 077710 267200 077451 JRA D,JBLK ;D:=SADR. DISPATCH TO JBLK WHICH SAVES SADR. + 077711 OPNTP: ;SHIFT UNIT NUMBER LEFT FOR CONO + 077711 242000 000011 IFE MODE,<LSH F,11> + IFN MODE,<LSH F,3> + 077712 542000 077744 HRRM F,TAPENO ;SAVE IN CORE + 077713 201440 000144 CLSTP: MOVEI BLKNO,^D100 ;BLK NO OF FILE DIR + 077714 401540 000000 SETZI PNTR,0 ;DONT CLOBBER DIRECTORY BYTE + 077715 265300 077620 JSP P,RBLK ;MOVE TO BLOCK 100 + 077716 255005 077377 JFCL TAB+200(E) ;READ OR WRITE DIR TAB AS DETERMINED BY WRITE + 077717 341240 077627 AOJL E,UWAIT1 ;COUNT THE 200 WORDS + 077720 254000 077402 JRST BEG ;GO ASK FOR NEXT COMMAND + + 077721 200100 077757 ZDIR: MOVE A,[XWD FOOF,TAB] ;FOOF IS CLEAR + 077722 251100 077375 BLT A,TAB+176 ;CLEAR DIRECTORY, EXCEPT LAST WORD FOR ID + 077723 205100 757000 MOVSI A,(36B4+36B9) ;RESERVE BLOCKS 1 & 2 + 077724 202100 077177 MOVEM A,TAB ;IN DIRECTORY + 077725 205100 017000 MOVSI A,(36B9) + 077726 202100 077215 MOVEM A,TAB+16 ;BLK 100 (DIR) IS RESERVED TOO + 077727 525100 000007 HRLOI A,7 ;AND BLOCKS >1100 ARE EOT + 077730 202100 077321 MOVEM A,TAB+122 ;END OF BYTE TAB + 077731 344500 077465 AOJA WRITE,CLS1 ;SET WRITE TO OUTPUT + ;AND DUMP BLK 100. + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 10 +TENDMP MAC 24-APR-78 14:35 TD10 VERSION + + 077732 211400 000026 FDIR: MOVNI FILN,26 ;26 FILES (OCTAL) + 077733 265300 077467 FD2: JSP P,CRR ;CR-LF + 077734 336150 077350 FD3: SKIPN C,TAB+123+26(FILN) ;FIRST WORD OF NAME. IS IT BLANK? + 077735 344140 077741 AOJA C,FD1 ;YES. SET C=1 AND LOOP + 077736 265700 077743 JSP G,SIXBP ;PRINT FIRST WORD AND A SPACE + 077737 510150 077376 HLLZ C,TAB+151+26(FILN) ;SECOND WORD OF FILE NAME + 077740 265700 077743 JSP G,SIXBP ;PRINT AND CLEAR C + 077741 341403 077733 FD1: AOJL FILN,FD2(C) ;CAN JUMP TO FD2 OR FD3. COUNT FILES. + 077742 254000 077402 JRST BEG ;ALL FILES PRINTED OR BLANK. RETURN. + + 077743 201040 000007 SIXBP: MOVEI B,7 ;SIXBP PRINTS C(C) IN 6BIT + ;AND ADDS A TRAILING SPACE + ;AND LEAVES (C)=0 + + 077744 TAPENO: ;USE ADR AS TEMP FOR CURRENT UNIT + 077744 401100 000000 SIXBP1: SETZI A,.-. ;CLEAR A + 077745 246100 000006 LSHC A,6 + 077746 271100 000040 ADDI A,40 ;SIXBIT TO ASCII + 077747 265300 077471 JSP P,TYO ;TYPE OUT CHARACTER + 077750 367040 077744 SOJG B,SIXBP1 ;LOOP IF MORE CHARACTERS + 077751 254016 000000 JRST 0(G) ;RETURN + + 077752 000000 000000 SPNT: 0 ;POINTER TO HEADERS IN CORE. + + 077753 LIT + 077753 000500 077176 + 077754 000040 000041 + 077755 077154 777761 + 077756 101200 077377 + 077757 077176 077177 + + + IFN MAGT,< + SLOP: MOVE .+3 + MOVEM COMPTR + JRST BEGR+1 + XWD 440700,.+1 + BYTE (7) "0",33,177 + LAST: JRST SLOP + > + IFE MAGT,< + 000000 SLOP=COMPTR-17-. ;THIS MANY WORDS BEFORE RESERVED AREA + ;FOR COMMAND STRINGS. + ;!!!!! NOTE: ABOVE PARAMETER MUST COME OUT POSITIVE IN + ; ORDER TO MEET THE DOCUMENTATION OF RESERVED COMMAND STRING AREA. + ; + ; THIS MEANS ANY CODE ADDED MUST BE COMPENSATED FOR BY + ; A CORRESPONDING TIGHTENING SOMEWHERE. GOOD LUCK. + ; TENDMP IS VERY TIGHT ALREADY. + > + + 077400 END BEGR + + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 10-1 +TENDMP MAC 24-APR-78 14:35 TD10 VERSION + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000000 +ABSLUTE BREAK IS 077760 + +8K CORE USED + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 11 +TENDMP MAC 24-APR-78 14:35 SYMBOL TABLE + +A 000002 +ALTMD 077667 +ALTTST 077501 +B 000001 +BEG 077402 +BEG1 077404 +BEG69 077522 +BEGR 077400 +BELL 077423 +BLKNO 000011 +C 000003 +CARRET 077504 +CH 000014 +CKS 000007 +CLS1 077465 +CLSTP 077713 +COMPTR 077777 +CORE 000004 +CRCH 077413 +CRR 077467 +CT 000017 +D 000004 +DC 000200 +DELE 077464 +DMP1 077532 +DMP2 077552 +DMP3 077554 +DMP5 077562 +DTC 000320 +DTS 000324 +DUMP 077530 +E 000005 +ERR 077466 +F 000000 +FD1 077741 +FD2 077733 +FD3 077734 +FDIR 077732 +FILN 000010 +FOOF 077176 +FREE 077517 +G 000016 +HIGH 077175 +INOUT 077660 +JBLK 077451 +LINK 077377 +LOAD 077462 +LOADS 077455 +LODUMP 077557 +LOW 000020 +LOZAD 077175 +LUP 077505 +MAGT 000000 + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 MACRO 10 05:53 24-APR-78 PAGE 11-1 +TENDMP MAC 24-APR-78 14:35 SYMBOL TABLE + +MNLUP 077576 +MNLUP0 077574 +MNLUP1 077577 +MODE 000000 +NEXT 077422 +NEXT1 077446 +OPNTP 077711 +P 000006 +PNTR 000013 +Q 000015 +RB1 077624 +RB2 077652 +RBG 077626 +RBLK 077620 +RCH 077433 +REL 000000 +SADR 077454 +SIXBP 077743 +SIXBP1 077744 +SLOP 000000 +SPACE 077417 +SPNT 077752 +TAB 077177 +TAPENO 077744 +THRU 077566 +TTY 000120 SPD +TYI 077414 +TYO 077471 +UTC 000210 +UTS 000214 +UWAIT 077572 +UWAIT1 077627 +UWAIT2 077662 +UWAIT3 077666 +WRITE 000012 +ZDIR 077721 + Spooler runtime 0 Seconds, 0 KCS, 2085 disk reads, 74 disk writes, 865 pages + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + ***END*** Name: MON45 Address: **** UNKNOWN **** CDRSER-144 24-April-1978 05:53:43 Address: **** UNKNOWN **** + + + + \ No newline at end of file diff --git a/src/m140n.lst b/src/m140n.lst new file mode 100644 index 0000000..c95f7b4 --- /dev/null +++ b/src/m140n.lst @@ -0,0 +1,46367 @@ +LPTSPL Version 3(105) Running on LPT000 + **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     **START** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:18 Address: **** UNKNOWN ****     CCCCCCCCCCCC DDDDDDDDDDDD RRRRRRRRRRRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR + CCCCCCCCCCCC DDDDDDDDDDDD RRRRRRRRRRRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR + CCCCCCCCCCCC DDDDDDDDDDDD RRRRRRRRRRRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRRRRRRRRRRR SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +CCC DDD DDD RRRRRRRRRRRR SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +CCC DDD DDD RRRRRRRRRRRR SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR +CCC DDD DDD RRR RRR SSS EEE RRR RRR + CCCCCCCCCCCC DDDDDDDDDDDD RRR RRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + CCCCCCCCCCCC DDDDDDDDDDDD RRR RRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + CCCCCCCCCCCC DDDDDDDDDDDD RRR RRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :CDRSER.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:18 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2632 +File will be deleted after printing + CDRSER - CARD READER SERVICE PAGE 1 + 8-2-65 + + 00010 XLIST + 01930 LIST + CDRSER - CARD READER SERVICE PAGE 7 + 8-2-65 + + + 00010 TITLE CDRSER - CARD READER SERVICE + 00020 SUBTTL 8-2-65 + + + 00050 EXTERNAL STODAT, ADVBFF, IOSET, SETIOD, SETBYT, STOSQD + 00060 EXTERNAL CDRSAV, CDRCHN, CDRRET,ILLOUT,PIOMOD + 00070 INTERNAL CDRINT + + 00090 ;DEVICE DATA BLOCK LINKAGE + 00100 EXTERNAL CDRDB,CDRDAT,CRDIS + 00110 ENTRY CDRDSP + CDRSER - CARD READER SERVICE PAGE 2 + 8-2-65 + + + + 00150 ,CDR PARAMETER ASSIGNMENTS + + 00170 , CDR CONTROL REGISTER + 000010 00180 CRDONE=10; DONE FLAG + 000020 00190 CRBUSY=20; BUSY FLAG + 000040 00200 CRBIN=40; BINARY + 000100 00210 CRALL=100; ALL FLAG + 000200 00220 CRMISS=200; DATA MISSED + 000400 00230 CREOC=400; END OF CARD + 001000 00240 CREOFF=1000; END OF FILE + 002000 00250 CRERR=2000; ERROR + 000002 00260 CHCHN=2 + 00270 , ACCUMULATORS + 000010 00280 CRDAT1=TEM + 000011 00290 CRAC=JDAT + + 00310 , SPECIAL IO STATUS WORD ASSIGNMENTS + 040000 00320 CRMFST=40000; FIRST CARD + 200000 00330 CRMBIN=200000; BINARY + 100000 00340 CRMIMG=100000; IMAGE + 00350 , SPECIAL CHARACTERS + 000032 00360 S2EOF=32; END OF FILE + + 00380 REPEAT 0,< + 00390 ,CDR DATA BLOCK + 00400 + 00410 CDRDAT: SIXBIT /CRD + 00420 34 + 00430 0 + 00440 EXP CDRDSP + 00450 XWD 1400+PROG,10403 + 00460 0 + 00470 0 + 00480 XWD PROG,0 + 00490 0 + 00500 0 + 00510 CRDIS: JRST . + 00520 > + + 00540 ,CDR SERVICE DISPATCH TABLE + + 000000' 715200 000000 00560 CDRDSP: CONO CR,0 ;RELEASE + 000001' 263140 000000 00570 POPJ PDP,; CLOSE + 000002' 254000 000000* 00580 JRST ILLOUT ;OUTPUT + 000003' 254000 000004' 00590 JRST CRINP; INPUT + CDRSER - CARD READER SERVICE PAGE 3 + 8-2-65 + + + + 000004' 621000 000002 00630 CRINP: TLZ IOS,IOBEG; VIRGIN DEVICE? IOBUF:=0 + + 000005' 661000 040004 00650 CDRIN1: TLO IOS,IOFST+CRMFST; IOFST:=CRMFST:=1 + 000006' 135040 000000* 00660 LDB TAC,PIOMOD + 000007' 306040 000014 00670 CAIN TAC,B; MODE=BINARY? + 000010' 661000 200000 00680 TLO IOS,CRMBIN; YES. CRMBIN:=1 + 000011' 306040 000010 00690 CAIN TAC,I; MODE=IMAGE? + 000012' 661000 100000 00700 TLO IOS,CRMIMG; YES. CRMIMG:=1 + 000013' 660000 010000 00710 TRO IOS,IOACT; IOACT:=1 + 000014' 202006 000002 00720 MOVEM IOS,DEVIOS(DEVDAT) + 000015' 260140 000000* 00730 PUSHJ PDP,SETBYT; TAC0-5:=TAC12-13:=0; TAC6-11:=BYTE SIZE + 000016' 202046 000010 00740 MOVEM TAC,DEVPTR(DEVDAT) + 000017' 201040 000000* 00750 MOVEI TAC, CDRCHN; ASSIGN PI CHANNEL + 000020' 715201 000160 00760 CONO CR,CRBIN+CRALL+CRBUSY(TAC); SELECT BINARY, ALL + 000021' 263140 000000 00770 POPJ PDP,; RETURN + CDRSER - CARD READER SERVICE PAGE 4 + 8-2-65 + + + + 000022' 715340 000010 00810 CDRINT: CONSO CR,CRDONE; DONE FLAG? + 000023' 254000 000022' 00820 JRST CDRINT + 000024' 264000 000000* 00830 JSR CDRSAV; SAVE ACCUMULATORS AND ESTABLI + 000025' 201300 000000* 00840 MOVEI DEVDAT,CDRDAT + 000026' 200006 000002 00850 MOVE IOS,DEVIOS(DEVDAT) + 000027' 715300 002200 00860 CONSZ CR, CRMISS+CRERR; DATA MISSED OR ERROR? + 000030' 660000 200000 00870 TRO IOS,IODERR; IODERR:=1 + 000031' 715040 000010 00880 DATAI CR, CRDAT1; INPUT INFORMATION + 000032' 260140 000000* 00890 PUSHJ PDP,IOSET; PROG:=C(JBTADR18-35), ITEM:= C(DEVPTR) + 000033' 627000 040000 00900 TLZN IOS,CRMFST; FIRST CARD? CRMFST:=0 + 000034' 256000 000000* 00910 XCT CRDIS ;NOT FIRST, GO TO SUBROUTINE + + 000035' 640400 007400 00930 CRFIRS: TRC CRDAT1, 7400; FIRST COL OF FIRST CARD + 000036' 646400 007400 00940 TRCN CRDAT1,7400; Y, X, 0, OR 1 PUNCH? + 000037' 254000 000047' 00950 JRST CREOFC; NO, END OF FILE CARD + 000040' 715300 001000 00960 CONSZ CR, CREOFF; END OF FILE? + 000041' 254000 000051' 00970 JRST CREOF; YES + 000042' 603000 200000 00980 TLNE IOS,CRMBIN; CRMBIN=1? + 000043' 254000 000125' 00990 JRST CRFSTB; YES + 000044' 603000 100000 01000 TLNE IOS,CRMIMG; CRMIMG=1? + 000045' 254000 000144' 01010 JRST CRFSTI; YES + 000046' 254000 000067' 01020 JRST CRFSTL+1 + + 000047' 201040 000017* 01040 CREOFC: MOVEI TAC,CDRCHN ;WAIT FOR EOC + 000050' 715201 000020 01050 CONO CR,CRBUSY(TAC) + 000051' 661000 000040 01060 CREOF: TLO IOS, IOEND; IUEND:=1 + 000052' 201240 000032 01070 MOVEI DAT,S2EOF + 000053' 260140 000000* 01080 PUSHJ PDP,STODAT; STORE END OF FILE CHARACTER + 000054' 330000 000000 01090 SKIP + 000055' 254000 000217' 01100 JRST CRLST2; BLOCK FULL OR BLOCK COMPLETE + 000056' 201040 000056' 01110 MOVEI TAC,.; DATA STATED PROPERLY + 000057' 542040 000034* 01120 HRRM TAC, CRDIS; SET DISPATCH TO RETURN HERE. + 000060' 715340 000400 01130 CONSO CR, CREOC; END OF CARD? + 000061' 254000 000226' 01140 JRST CREXIT; NO. + 000062' 260140 000000* 01150 PUSHJ PDP,ADVBFF; ADVANCE BUFFER + 000063' 330000 000000 01160 SKIP + 000064' 661000 000002 01170 TLO IOS,IOBEG; IOBEG:=1 + 000065' 254000 000231' 01180 JRST CROFF + + 000066' 260140 000164' 01200 CRFSTL: PUSHJ PDP, CRITMS; STORE ITEM + 000067' 201040 000074' 01210 MOVEI TAC,CRCV; TAC:=CRCV. HOLLERITH READ + + 000070' 715240 000002 01230 CRREST: CONI CR, TAC1 + 000071' 620100 000160 01240 TRZ TAC1, CRBIN+CRALL+CRBUSY; SELECT HOLERITH, ALL:=0, BUS + 000072' 715202 000000 01250 CONO CR, (TAC1); RESET CARD READER + 000073' 254000 000112' 01260 JRST CREXT1; CHANGE DISPATCH AND GO + CDRSER - CARD READER SERVICE PAGE 5 + 8-2-65 + + + 01290 , HOLLERITH READ MODE + + 000074' 200440 000241' 01310 CRCV: MOVE CRAC, [POINT 6,CRDAT1,23]; COLUMNS 79 AND 80 + 000075' 715340 000400 01320 CONSO CR,CREOC; END OF CARD? + 000076' 200440 000142' 01330 MOVE CRAC,CRC1; NO. LOOK AT ALL CHARACTERS + 000077' 134040 000011 01340 LDBI TAC,CRAC ;CONVERT HOLLERITH + 000100' 231040 000005 01350 IDIVI TAC, 5; TO ASCII + 000101' 135242 000206' 01360 LDB DAT, CRCV1(TAC1) + 000102' 260140 000053* 01370 PUSHJ PDP,STODAT; STORE IN BU FER + 000103' 254000 000052' 01380 JRST CREOF+1 + 000104' 254000 000115' 01390 JRST CRINS + 000105' 603440 760000 01400 TLNE CRAC, 760000; WORD COMPLETE? + 000106' 254000 000077' 01410 JRST CRCV+3; NO + 000107' 715300 000400 01420 CONSZ CR,CREOC; END OF CARD? + 000110' 254000 000115' 01430 JRST CRINS; YES + 000111' 201040 000074' 01440 MOVEI TAC, CRCV; NEXT DISPATCH TO CRCV. HOLLERITH READ + + 000112' 542040 000057* 01460 CREXT1: HRRM TAC, CRDIS; UPDATE DISPTACHER + 000113' 254000 000226' 01470 JRST CREXIT + 000114' 000000 006424 01480 CRCON: OCT 6424 + + 000115' 200440 000143' 01500 CRINS: MOVE CRAC,CRC2; BLOCK FULL OR BLOCK COMPLETE INSERT CR + 000116' 134240 000011 01510 LDBI DAT, CRAC + 000117' 260140 000102* 01520 PUSHJ PDP,STODAT; STORE CHAR + 000120' 330000 000000 01530 SKIP; EXIT1. + 000121' 254000 000217' 01540 JRST CRLST2; EXIT2. BLOCK FULL OR BLOCK COMPLETE + 000122' 603440 760000 01550 TLNE CRAC,760000; THATS ALL? + 000123' 254000 000116' 01560 JRST CRINS+1; NO + 000124' 254000 000213' 01570 JRST CRLAST; END OF CARD + CDRSER - CARD READER SERVICE PAGE 6 + 8-2-65 + + + 01600 , BINARY READ MODE + + 000125' 135040 000242' 01620 CRFSTB: LDB TAC,[POINT 3,CRDAT1,35]; 7-9 PUNCH? + 000126' 302040 000005 01630 CAIE TAC, 5 + 000127' 660000 400000 01640 TRO IOS, IOIMPM; YES. IOIMPM:=1 + 000130' 715240 000001 01650 CONI CR, TAC + 000131' 620040 000120 01660 TRZ TAC, CRBUSY+CRALL; BUSY FLAG:=0, ALL FLAG;=0 + 000132' 715201 000000 01670 CONO CR,(TAC); RESET TO RE-READ COL 3 + 000133' 201040 000135' 01680 MOVEI TAC, CRCOL2; DISPATCH TO CRCOL2 ON NEXT INTERRUPT + 000134' 254000 000112' 01690 JRST CREXT1 + + 000135' 201040 000137' 01710 CRCOL2: MOVEI TAC, CRCOL4; DISPATCH TO CRCOL4 ON NEXT INTERRUPT + 000136' 542040 000112* 01720 HRRM TAC,CRDIS + + 000137' 200240 000010 01740 CRCOL4: MOVE DAT, CRDAT1 + 000140' 260140 000165' 01750 PUSHJ PDP, CRITMS+1; STORE THE WORD FROM DAT + 000141' 254000 000226' 01760 JRST CREXIT + + 000142' 440600 000010 01780 CRC1: POINT 6,CRDAT1 + 000143' 170700 000114' 01790 CRC2: POINT 7,CRCON,20 + CDRSER - CARD READER SERVICE PAGE 7 + 8-2-65 + + + 01820 ,IMAGE READ MODE + + 000144' 201040 000147' 01840 CRFSTI: MOVEI TAC, .+3; DISPATCH TO CRFSTI + 3 ON NEXT INTERRUP + 000145' 137400 000243' 01850 DPB CRDAT1,[POINT 24,CRTEM,23]; SAVE COLUMN 1 AS MI + 000146' 254000 000112' 01860 JRST CREXT1 + + 000147' 260140 000164' 01880 PUSHJ PDP, CRITMS; SET ITEM AND CHECK SIZE + 000150' 434400 000240' 01890 IOR CRDAT1, CRTEM; CRTEM12-35:=COL 1 AND 2 + 000151' 201040 000153' 01900 MOVEI TAC, .+2; DISPATCH TO CRFSTI + 7 ON NEXT INTERRUP + 000152' 254000 000157' 01910 JRST CRIM1+1 + + 000153' 715240 000002 01930 CONI CR, TAC1 + 000154' 620100 000120 01940 TRZ TAC1, CRBUSY+CRALL; BUSY FLAG:=ALL FLAG:=0 + 000155' 715202 000000 01950 CONO CR, (TAC1); RESET READER ON COL 3 + + 000156' 201040 000156' 01970 CRIM1: MOVEI TAC,.; DISPATCH TO CRIM1 ON NEXT INTERRUPT + 000157' 715300 000400 01980 CONSZ CR, CREOC; END OF CARD? + 000160' 254000 000213' 01990 JRST CRLAST; YES + 000161' 202026 000010 02000 MOVEM @DEVPTR(DEVDAT) + 000162' 350006 000010 02010 AOS DEVPTR(DEVDAT); INCREMENT ITEM POINTER + 000163' 254000 000112' 02020 JRST CREXT1 + + 000164' 661000 000004 02040 CRITMS: TLO IOS, IOFST; IOFST:=1 + 000165' 260140 000117* 02050 PUSHJ PDP, STODAT; STORE WORD + 000166' 254000 000052' 02060 JRST CREOF+1 + 000167' 254000 000052' 02070 JRST CREOF+1 + 000170' 263140 000000 02080 POPJ PDP,; RETURN + + 000171' 575426 231550 02100 CRCNV: ASCII ._123456789. + 000172' 325546 734162 + 000173' 301730 057116 02110 ASCII .0=@^'\ /ST. + 000174' 561005 751650 + 000175' 526552 754262 02120 ASCII .UVWXYZ;,(". + 000176' 551665 424104 + 000177' 215125 545226 02130 ASCII .#%-JKLMNOP. + 000200' 462331 647640 + 000201' 506447 222124 02140 ASCII .QR:$*[>&+A. + 000202' 555744 625602 + 000203' 412070 442614 02150 ASCII :BCDEFGHI?.: + 000204' 436211 137534 + 000205' 246727 420576 02160 ASCII :)]<!?: + + 000206' 350701 000171' 02180 CRCV1: POINT 7,CRCNV(TAC),6 + 000207' 260701 000171' 02190 POINT 7,CRCNV(TAC),13 + 000210' 170701 000171' 02200 POINT 7,CRCNV(TAC),20 + 000211' 100701 000171' 02210 POINT 7,CRCNV(TAC),27 + 000212' 010701 000171' 02220 POINT 7,CRCNV(TAC),34 + CDRSER - CARD READER SERVICE PAGE 8 + 8-2-65 + + + 000213' 301200 000122 02250 CRLAST: CAIL ITEM,^D82; C(ITEM)<82? + 000214' 254000 000234' 02260 JRST CRCONT; NO + 000215' 260140 000000* 02270 CRLST0: PUSHJ PDP,STOSQD; STORE WORD COUNT + 000216' 330000 000000 02280 SKIP + 000217' 260140 000062* 02290 CRLST2: PUSHJ PDP,ADVBFF; ADVANCE BUFFER + 000220' 254000 000231' 02300 JRST CROFF; EXIT1. NECT BUFFER FULL + 000221' 201040 000047* 02310 MOVEI TAC, CDRCHN + 000222' 715201 000160 02320 CONO CR, CRBIN+CRALL+CRBUSY(TAC); SELECT BINARY, ALL + 02330 ,ASSIGN PI CHANNEL + 000223' 661000 040004 02340 CRLST1: TLO IOS,IOFST+CRMFST; IOFST:=CRMFST:=1 + 000224' 623000 000001 02350 TLZE IOS, IOW; IN A WAIT? IOW:=0 + 000225' 260140 000000* 02360 PUSHJ PDP, SETIOD; IOWS:=1 + + 000226' 202006 000002 02380 CREXIT: MOVEM IOS,DEVIOS(DEVDAT); C(CRIOS):=C(IOS) + 000227' 202206 000011 02390 MOVEM ITEM, DEVCTR(DEVDAT); C(CRCTR):=C(ITEM) + 000230' 254000 000000* 02400 JRST CDRRET; RESTORE ACCUMULATORS AND DISMISS INTERR + + 000231' 620000 010000 02420 CROFF: TRZ IOS,IOACT; IOACT:=0 + 000232' 715200 000000 02430 CONO CR,0; CLEAR CDR CONTROL REGISTER + 000233' 254000 000223' 02440 JRST CRLST1 + + 000234' 201040 000221* 02460 CRCONT: MOVEI TAC, CDRCHN; ASSIGN PI CHANNEL + 000235' 715201 000160 02470 CONO CR, CRBIN+CRALL+CRBUSY(TAC); SELECT BINARY, ALL, + 000236' 661000 040000 02480 TLO IOS,CRMFST; CRMFST:=1 + 000237' 254000 000226' 02490 JRST CREXIT + + 000240' 000000 000000 02510 CRTEM: 0 + 02520 END, + 000241' 140600 000010 + 000242' 000300 000010 + 000243' 143000 000240' + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000244 + +8K CORE USED + CDRSER - CARD READER SERVICE PAGE 9 + SYMBOL TABLE + + 000253 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADVBFF 000217' EXT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CDRCHN 000234' EXT +CDRDAT 000025' EXT +CDRDB 000000 EXT +CDRDSP 000000' ENT +CDRIN1 000005' +CDRINT 000022' INT +CDRRET 000230' EXT +CDRSAV 000024' EXT +CHCHN 000002 +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CR 000150 SPD +CRAC 000011 +CRALL 000100 +CRBIN 000040 +CRBUSY 000020 +CRC1 000142' +CRC2 000143' +CRCNV 000171' +CRCOL2 000135' +CRCOL4 000137' +CRCON 000114' +CRCONT 000234' +CRCV 000074' +CRCV1 000206' +CRDAT1 000010 +CRDIS 000136' EXT +CRDONE 000010 +CREOC 000400 +CREOF 000051' +CREOFC 000047' +CREOFF 001000 +CRERR 002000 +CREXIT 000226' +CREXT1 000112' +CRFIRS 000035' +CRFSTB 000125' +CRFSTI 000144' +CRFSTL 000066' +CRIM1 000156' + CDRSER - CARD READER SERVICE PAGE 9-1 + SYMBOL TABLE + +CRINP 000004' +CRINS 000115' +CRITMS 000164' +CRLAST 000213' +CRLST0 000215' +CRLST1 000223' +CRLST2 000217' +CRMBIN 200000 +CRMFST 040000 +CRMIMG 100000 +CRMISS 000200 +CROFF 000231' +CRREST 000070' +CRTEM 000240' +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT + CDRSER - CARD READER SERVICE PAGE 9-2 + SYMBOL TABLE + +DVTTY 000010 INT +ENTRB 020000 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +ILLOUT 000002' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSET 000032' EXT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +MTW 010000 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PIOMOD 000006' EXT +PROG 000007 INT +RUN 200000 INT +RUNABL 204000 INT +S2EOF 000032 +SETBYT 000015' EXT +SETIOD 000225' EXT + CDRSER - CARD READER SERVICE PAGE 9-3 + SYMBOL TABLE + +STODAT 000165' EXT +STOSQD 000215' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT + CCCCCCCCCCCC LLL KKK KKK CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC LLL KKK KKK CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC LLL KKK KKK CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKKKKKKKK CCC SSSSSSSSS SSSSSSSSS +CCC LLL KKKKKKKKK CCC SSSSSSSSS SSSSSSSSS +CCC LLL KKKKKKKKK CCC SSSSSSSSS SSSSSSSSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS +CCC LLL KKK KKK CCC SSS SSS + CCCCCCCCCCCC LLLLLLLLLLLLLLL KKK KKK CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC LLLLLLLLLLLLLLL KKK KKK CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC LLLLLLLLLLLLLLL KKK KKK CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :CLKCSS.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:18 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2619 +File will be deleted after printing + CLKCSS - SCHEDULING ALOGRITHM PAGE 1 + T. HASTING 6-29-65 + + 00010 XLIST + 01930 LIST + CLKCSS - SCHEDULING ALOGRITHM PAGE 7 + T. HASTING 6-29-65 + + + 00010 TITLE CLKCSS - SCHEDULING ALOGRITHM + 00020 SUBTTL T. HASTING 6-29-65 + 00030 ;SCHEDULING ALOGRITHM + 00040 ;CALL: + 00050 ; PUSHJ PDP, NXTJOB + 00060 ; EXIT ;RETURN HIGHEST PRIORITY USER IN AC ITEM + + 00080 ;NEXJOB ASSUMES NO ACS SET EXCEPT PDP AND THAT IS MAY USE + 00090 ;ANY OF THE OTHER ACS + 00100 ;EXECUTION REQUIRES ROUGHLY 37 CYCLES FOR NORMAL CASE + + 00120 INTERNAL NXTJOB, QUANTS + 00130 EXTERNAL IOCOMP,JOBN,JBTSTS,JOB + 00140 EXTERNAL MTAVAL,DCAVAL,DTAVAL,SCNOFF,SCNON + + 000002 00160 T=TAC1 ;TEMPORARY AC + 000006 00170 C=DEVDAT + 000005 00180 P=DAT + + 000000' 200100 000000* 00200 NXTJOB: MOVE T, IOCOMP ;NO. OF COMPLETED IO JOBS + 000001' 202100 000064' 00210 MOVEM T, IOAVAL ;MAKE SLOW IO LOOK LIKE FAST IO + + 00230 ;KEEP IO DEVICES BUSY + 000002' 515240 777774 00240 HRLZI P, -NUM ;NO. OF IO DEVICES CATEGORIES TO CHECK + 000003' 336025 000060' 00250 NXT0: SKIPN @AVALTB(P) ;NON-ZERO IF IO JUST BECOME AVAILABLE + 000004' 253240 000003' 00260 NXT1: AOBJN P, NXT0 + 000005' 327240 000026' 00270 JUMPG P, NXT4 ;FINISHED YET + 000006' 402025 000060' 00280 SETZM @AVALTB(P) ;IO DEVICE AVAIL. ACKNOWLEDGE FACT + 000007' 200105 000065' 00290 MOVE T,WAITB(P) ;GET APPROPRIATE JOB STATUS BIT + 000010' 200205 000071' 00300 MOVE ITEM,JOBP(P) ;SEARCH FOR WAITING JOB + 000011' 350000 000004 00310 AOS ITEM ;LOOK AT EVERYONE ELSE FIRST + 000012' 301200 000000* 00320 NXT2: CAIL ITEM,JOBN ;MODULO JOBN + 000013' 201200 000001 00330 MOVEI ITEM,1 ;SKIP NULL JOB + 000014' 617104 000000* 00340 TSNN T,JBTSTS(ITEM) ;IS WAIT BIT SET FOR THIS JOB? + 000015' 254000 000023' 00350 JRST NXT3 ;NO. KEEP LOOKING + 000016' 700600 000000* 00360 CONO PI,SCNOFF ;YES, TURN SCANNER CHAN. OFF(CONTROL C) + 000017' 554044 000014* 00370 HLRZ TAC,JBTSTS(ITEM) ;IS JOB RUNABLE? + 000020' 306042 204000 00380 CAIN TAC,RUNABLE(T) + 000021' 254000 000041' 00390 JRST NXT7 ;YES, CLEAR BIT. SET RUN TIME. RETURN + 000022' 700600 000000* 00400 CONO PI,SCNON ;NO. TURN SCANNER CHAN. ON. KEEP LOOKIN + 000023' 312205 000071' 00410 NXT3: CAME ITEM, JOBP(P) ;HAVE ALL USERS BEEN LOOKED AT + 000024' 344200 000012' 00420 AOJA ITEM, NXT2 ;NO. KEEP LOOKING + 000025' 254000 000004' 00430 JRST NXT1 ;YES. SHOULD NOT HAPPEN + CLKCSS - SCHEDULING ALOGRITHM PAGE 2 + T. HASTING 6-29-65 + + + 00460 ;NO JOBS WAITING TO USE IO DEVICES + 00470 ;HAS CURENT JOB USED ITS QUANTUM + + 000026' 201300 000012* 00490 NXT4: MOVEI C,JOBN ;GET READY FOR POSSIBLE LOOP + 000027' 334200 000000* 00500 SKIPA ITEM, JOB ;CURRENTLY RUNNING JOB + + 000030' 350000 000004 00520 NXT6: AOS ITEM ;LOOK AT NEXT JOB + 000031' 301200 000026* 00530 CAIL ITEM, JOBN ;MODULO JOBN + 000032' 201200 000001 00540 MOVEI ITEM, 1 ;SKIP NULL JOB + + 000033' 554104 000017* 00560 NXT5: HLRZ T, JBTSTS(ITEM) ;IS THIS JOB RUNNABLE + 000034' 306100 204000 00570 CAIN T, RUNABLE + 000035' 254000 000050' 00580 JRST NXT9 ;YES,RETURN WITH ITEM SET + 000036' 367300 000030' 00590 NXT5A: SOJG C, NXT6 ;NO. LOOKED AT ALL JOBS YET? + 000037' 403200 000002 00600 SETZB ITEM,T ;YES. INDICATE NULL JOB TO RUN + 000040' 344100 000054' 00610 AOJA T,NXT8 ;SET TO RUN FOR ONE CLOCK TICK + + 000041' 202205 000071' 00630 NXT7: MOVEM ITEM, JOBP(P) ;SAVE THIS JOB NO. FOR NEXT TIME + 000042' 620042 000000 00640 TRZ TAC,(T) ;CLEAR WAIT BIT + 000043' 506044 000033* 00650 HRLM TAC,JBTSTS(ITEM) ;IN JOB STATUS WORD + 000044' 602100 400000 00660 TRNE T,IOWS ;IS WAIT BIT IOWS? + 000045' 370000 000000* 00670 SOS IOCOMP ;YES, SUBTRACT REQUEST COUNT + 000046' 700600 000022* 00680 CONO PI,SCNON ;TURN SCANNER CHANNEL BACK ON + 000047' 254000 000053' 00690 JRST NXT10 ;AND GO SET RUNNING TIME + + 000050' 550104 000043* 00710 NXT9: HRRZ T,JBTSTS(ITEM) ;HAS TIME GONE TO ZERO FOR THIS JOB? + 000051' 602100 777777 00720 TRNE T,-1 + 000052' 263140 000000 00730 POPJ PDP, ;NO + 000053' 200105 000075' 00740 NXT10: MOVE T, QUANTS(P) ;SET QUANTUM RUNNING TIME FOR THIS QUEU + 000054' 542104 000050* 00750 NXT8: HRRM T, JBTSTS(ITEM) + 000055' 316200 000027* 00760 CAMN ITEM, JOB ;IS THIS SAME AS OLD JOB? + 000056' 326200 000036' 00770 JUMPN ITEM, NXT5A ;AND NOT NULL JOB + 000057' 263140 000000 00780 POPJ PDP, + CLKCSS - SCHEDULING ALOGRITHM PAGE 3 + T. HASTING 6-29-65 + + + 00810 ;FLAGS SET NON-ZERO WHEN IO DEVICES BECOME AVAILABLE + + 000060' 000000 000000* 00830 AVALTB: EXP MTAVAL ;MAG TAPE + 000061' 000000 000000* 00840 EXP DCAVAL ;DATA CONTROL + 000062' 000000 000000* 00850 EXP DTAVAL ;DECTAPE + 000063' 000000 000064' 00860 EXP IOAVAL ;ALL OTHER DEVICES + 000004 00870 NUM=.-AVALTB + + 000064' 000000 000000 00890 IOAVAL: 0 ;FLAG = NO. OF IO COMPLETED JOBS + + 00910 ;BIT IN STATUS WORD MEANING JOB WAITING TO USE DEVICE + 000065' 000000 010000 00920 WAITB: EXP MTW + 000066' 000000 020000 00930 EXP DCW + 000067' 000000 040000 00940 EXP DTW + 000070' 000000 400000 00950 EXP IOWS + + 00970 ;LAST JOB SCHEDULED FOR DEVICE + 00980 JOBP: REPEAT NUM, + 00990 < EXP 1 + 01000 > + 000071' 000000 000001 EXP 1 + + 000072' 000000 000001 EXP 1 + + 000073' 000000 000001 EXP 1 + + 000074' 000000 000001 EXP 1 + + + 01020 ;QUANTUM TIMES FOR EACH QUEUE + + 000075' 000000 000004 01040 QUANTS: EXP 4 ;MAGTAPE QUEUE + 000076' 000000 000004 01050 EXP 4 ;DATA CONTROL QUEUE + 000077' 000000 000004 01060 EXP 4 ;DECTAPE QUEUE + 000100' 000000 000006 01070 EXP 6 ;IOWAIT SATISFIED QUEUE + 000101' 000000 000017 01080 EXP QUANT1 ;STRAIGHT COMPUTATION QUEUE + + 01100 XP QUANT1,^D15; STRAIGHT COMPUTATION QUEUE + + 01120 END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000102 + +8K CORE USED + CLKCSS - SCHEDULING ALOGRITHM PAGE 4 + SYMBOL TABLE + + 000217 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +AVALTB 000060' +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +C 000006 +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +D 000017 INT +DAT 000005 INT +DCAVAL 000061' EXT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTAVAL 000062' EXT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT + CLKCSS - SCHEDULING ALOGRITHM PAGE 4-1 + SYMBOL TABLE + +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOAVAL 000064' +IOBEG 000002 INT +IOBKTL 040000 INT +IOCOMP 000045' EXT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTSTS 000054' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000055' EXT +JOBN 000031' EXT +JOBP 000071' +LOOKB 040000 INT +MTAVAL 000060' EXT +MTW 010000 INT +NUM 000004 +NXT0 000003' + CLKCSS - SCHEDULING ALOGRITHM PAGE 4-2 + SYMBOL TABLE + +NXT1 000004' +NXT10 000053' +NXT2 000012' +NXT3 000023' +NXT4 000026' +NXT5 000033' +NXT5A 000036' +NXT6 000030' +NXT7 000041' +NXT8 000054' +NXT9 000050' +NXTJOB 000000' INT +OBUFB 100000 INT +OUTPB 004000 INT +P 000005 +PDP 000003 INT +PI 000004 SPD +PICHN 000100 INT +PROG 000007 INT +QUANT1 000017 INT +QUANTS 000075' INT +RUN 200000 INT +RUNABL 204000 INT +SCNOFF 000016' EXT +SCNON 000046' EXT +T 000002 +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT +WAITB 000065' + CCCCCCCCCCCC LLL OOOOOOOOO CCCCCCCCCCCC KKK KKK + CCCCCCCCCCCC LLL OOOOOOOOO CCCCCCCCCCCC KKK KKK + CCCCCCCCCCCC LLL OOOOOOOOO CCCCCCCCCCCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKKKKKKKK +CCC LLL OOO OOO CCC KKKKKKKKK +CCC LLL OOO OOO CCC KKKKKKKKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK +CCC LLL OOO OOO CCC KKK KKK + CCCCCCCCCCCC LLLLLLLLLLLLLLL OOOOOOOOO CCCCCCCCCCCC KKK KKK + CCCCCCCCCCCC LLLLLLLLLLLLLLL OOOOOOOOO CCCCCCCCCCCC KKK KKK + CCCCCCCCCCCC LLLLLLLLLLLLLLL OOOOOOOOO CCCCCCCCCCCC KKK KKK + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :CLOCK .LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:18 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2612 +File will be deleted after printing + CLOCK - CLOCK SERVICE ROUTINE PAGE 1 + T. HASTINGS 6-2-65 + + 00010 XLIST + 01930 LIST + CLOCK - CLOCK SERVICE ROUTINE PAGE 7 + T. HASTINGS 6-2-65 + + + 00010 TITLE CLOCK - CLOCK SERVICE ROUTINE + 00020 SUBTTL T. HASTINGS 6-2-65 + 00030 INTERNAL CLOCK, CLKINI,NULJOB,APRINT,RSCHED + 00040 EXTERNAL APRSAV, APRRET, APRCHN,APRILM,APRCHL + 00050 EXTERNAL COMCNT,COMMAND,JOB,JOBADR,APRSAC,JOBDAC,JOBPDP,JOBREL + 00060 EXTERNAL USRPDP,JOBPFU,JOBPC,JBTADR,JOBADR,JOBDAT,USRPFU,CLDS,NXTJOB + 00070 EXTERNAL STOPU,SCHEDF,TIME,JOBLEV,JOBUXT,UUO0,JOBDHI,CLKOFF,JBTSTS + + 00090 ;CLOCK WILL TIME AN INTERVAL AND PUSHJ PDP, TO AN ADDRESS + 00100 ;AFTER THE INTERVAL HAS EXPIRED + 00110 ;TO MAKE A REQUEST: + 00120 ; CONO PI,PIOFF + 00130 ; DPBI AC,CLOCK + 00140 ; CONO PI,PION + 00150 ;AC MUST CONTAIN- XWD ADDRESS,NUMBER OF CLOCK COUNTS+DATA*1000 + 00160 ;THE HIGH ORDER SIX BITS OF THE RIGHT HALF(DATA) ARE PLACED IN AC + 00170 ;TAC RIGHT JUSTIFIED BEFORE THE PUSHJ PDP, ADDRES IS DONE + + 00190 ;SYSTEM FLAGS: + 00200 ; STOPU IS SET NON-ZERO AT EITHER INTERRUPT SERVICE LEVEL OR + 00210 ; UUO LEVEL AND A CLOCK INTERRUPT IS REQUESTED WHEN CURRENT + 00220 ; JOB MUST BE STOPPED AND ANOTHER ONE RUN. + 00230 ; SCHEDF IS SET NON-ZERO BY CLOCK ROUTINE WHEN IF IS IN THE PROCESS + 00240 ; OF RESCHEDULING. IT IS CLEARED AFTER JOB HAS BEEN SET TO + 00250 ; CURRENTLY RUNNING JOB. + 00260 ; TIME IS THE TIME SYSTEM HAS RUN IN 60THS OF A SECOND + + 000200 00280 PION=200 + 000400 00290 PIOFF=400 + + 000005 00310 STOR=DAT + 000001 00320 T=TAC + 000011 00330 JA=JDAT + + 000000' 004400 000000' 00350 CLOCK: POINT 36,CIPWT-1,35 ;BYTE POINTER TO CLOCK QUEUE + 000001' 00360 CIPWT: BLOCK 12 ;THE QUEUE + + 000013' 201000 000000' 00380 CLKINI: MOVEI CIPWT-1 ;SET UP BYTE POINTER + 000014' 542000 000000' 00390 HRRM CLOCK + 000015' 263140 000000 00400 POPJ PDP, + CLOCK - CLOCK SERVICE ROUTINE PAGE 2 + T. HASTINGS 6-2-65 + + + 000016' 254000 000020' 00430 APRINT: JRST .+2 ;HERE ON APR INTERRUPT + 000017' 254000 000017' 00440 JRST . ;TO OTHER DEVICES ON THIS CHANNEL + 000020' 700340 230000 00450 CONSO APR,230000 ;IS IT ANY OF THE OTHERS + 000021' 254000 000024' 00460 JRST CIP0 ;NO. GO CHECK CLOCK + 000022' 264000 000000* 00470 JSR APRSAV ;YES, SAVE ACS + 000023' 254000 000000* 00480 JRST APRILM ;AND GO PROCESS ILLEGAL MEMOR + 000024' 700340 002000 00490 CIP0: CONSO APR, 2000 ;IS CLOCK ENABLED + 000025' 254000 000030' 00500 JRST CIP1 ;NO. GO TO OTHER DEVICES + 000026' 700300 001000 00510 CONSZ APR, 1000 ;YES, DID CLOCK CAUSE INTERRUPT + 000027' 254000 000034' 00520 JRST CIP2 ;YES + 000030' 336000 000000* 00530 CIP1: SKIPN STOPU ;NO, IS THIS A REQUEST INTERRUPT + 000031' 254000 000017' 00540 JRST APRINT+1 ;NO. GO TO OTHER DEVICES + 000032' 264000 000022* 00550 CIP1B: JSR APRSAV ;YES, SAVE ACS + 000033' 254000 000064' 00560 JRST CIP6 ;RESCHEDULE BUT DONT TIME + CLOCK - CLOCK SERVICE ROUTINE PAGE 3 + T. HASTINGS 6-2-65 + + + 000034' 264000 000032* 00590 CIP2: JSR APRSAV ;SAVE ACS + 000035' 350000 000000* 00600 AOS TIME ;INCREMENT TIME + 000036' 200040 000000* 00610 MOVE TAC,JOB ;DECREMENT CURRENT JOBS RUNNING TIME + 000037' 370001 000000* 00620 SOS JBTSTS(TAC) + 000040' 700200 000000* 00630 CONO APR,CLKOFF ;TURN CLOCK FLAG OFF + + 00650 ;PROCESS TIMING REQUESTS STORED IN QUEUE + 000041' 550240 000000' 00660 HRRZ STOR, CLOCK ;GET END OF LIST + 000042' 306240 000000' 00670 CIP4: CAIN STOR, CIPWT-1 ;END YET + 000043' 254000 000062' 00680 JRST CIP5 ;YES + 000044' 370105 000000 00690 SOS TAC1, (STOR) ;DECREMENT TIMING REQUEST + 000045' 602100 007777 00700 TRNE TAC1, 7777 ;TIME EXPIRED YET + 000046' 364240 000042' 00710 SOJA STOR, CIP4 ;NO, CONTINUE SCAN + 000047' 700600 000400 00720 CONO PI, PIOFF ;YES. MOVE LAST ITEM IN LIST TO THS + 000050' 200060 000000' 00730 MOVE TAC, @CLOCK + 000051' 370000 000000' 00740 SOS CLOCK + 000052' 700600 000200 00750 CONO PI, PION + 000053' 202045 000000 00760 MOVEM TAC, (STOR) + 000054' 135040 000143' 00770 LDB TAC, [POINT 6, TAC1, 23] ;GET 6 BIT DATA ITEM + 000055' 207000 000002 00780 MOVSS TAC1 ;SETUP DISPATCH ADDRESS + 000056' 261140 000005 00790 PUSH PDP, STOR ;SAVE ONLY VALUABLE AC + 000057' 260142 000000 00800 PUSHJ PDP, (TAC1) ;AND DISPATCH TO TIMING REQUEST ROUTINE + 000060' 262140 000005 00810 POP PDP, STOR + 000061' 364240 000042' 00820 SOJA STOR, CIP4 ;GO BACK FOR MORE REQUESTS + + 000062' 332000 000000* 00840 CIP5: SKIPE COMCNT ;ANY COMMANDS TO PROCESS + 000063' 260140 000000* 00850 PUSHJ PDP, COMMAND ;YES + 000064' 00860 RSCHED: ;RESCHEDULE, HERE AFTER APRILM + 000064' 402000 000030* 00870 CIP6: SETZM STOPU ;CLEAR INTERRUPT REQUEST FLAG + 000065' 476000 000000* 00880 SETOM SCHEDF ;FLAG THAT SCHEDULING IS IN PROGRESS + 000066' 260140 000000* 00890 PUSHJ PDP, NXTJOB ;RETURN HIGHEST PRIORITY JOB IN AC ITEM + 000067' 316200 000036* 00900 CAMN ITEM, JOB ;IS IT SAME AS CURRENT JOB + 000070' 254000 000136' 00910 JRST CIP8 ;YES, EXIT + CLOCK - CLOCK SERVICE ROUTINE PAGE 4 + T. HASTINGS 6-2-65 + + + 00940 ;DIFFERENT JOB, SAVE OLD JOB + 000071' 336000 000067* 00950 SKIPN JOB ;IS OLD JOB THE NULL JOB + 000072' 254000 000110' 00960 JRST CIP7 ;YES, DONT BOTHER TO SAVE ANYTHING + 000073' 200440 000000* 00970 MOVE JA, JOBADR ;NO. MOVE CHANNEL ACS TO USER JOB AREA + 000074' 201051 000000* 00980 MOVEI T,JOBDAC(JA) + 000075' 505040 000000* 00990 HRLI T, APRSAC + 000076' 251051 000000* 01000 BLT T, JOBDHI(JA) + 000077' 201051 000000* 01010 MOVEI T, JOBPDP(JA) ;MOVE JOB STATE VARIABLES TO JOB DATA A + 000100' 505040 000000* 01020 HRLI T, USRPDP + 000101' 251051 000000* 01030 BLT T, JOBPFU(JA) + 000102' 200040 000040 01040 MOVE T, 40 ;SAVE LOC. 40 + 000103' 202051 000000* 01050 MOVEM T, JOBLEV(JA) + 000104' 200040 000000* 01060 MOVE T, UUO0 ;AND UUO PC + 000105' 202051 000000* 01070 MOVEM T, JOBUXT(JA) + 000106' 200040 000000* 01080 MOVE T, APRCHL ;SET C(CHANNEL INTERRUPT LOC.) AS PC + 000107' 202051 000000* 01090 MOVEM T, JOBPC(JA) + + CLOCK - CLOCK SERVICE ROUTINE PAGE 5 + T. HASTINGS 6-2-65 + + + 01130 ;RESTOR NEW JOB + 000110' 202200 000071* 01140 CIP7: MOVEM ITEM, JOB ;STORE NEW CURRENT JOB NUMBER + 000111' 403000 000065* 01150 SETZB 0,SCHEDF ;INDICATE SCHEDULING FINISHED + 000112' 322200 000140' 01160 JUMPE ITEM, NUL0 ;IS NEW JOB NULL JOB + 000113' 200444 000000* 01170 MOVE JA, JBTADR(ITEM) ;SETUP STATE VARIABLES FOR CU + 000114' 552440 000073* 01180 HRRZM JA, JOBADR ;IN SYSTEM AREA + 000115' 552440 000000* 01190 HRRZM JA, JOBDAT + 000116' 556451 000000* 01200 HLRZM JA, JOBREL(JA) ;SET RELOCATION AND PROTECTION + 000117' 700140 000011 01210 DATAO JA + 000120' 201040 000100* 01220 MOVEI T,USRPDP + 000121' 505051 000077* 01230 HRLI T, JOBPDP(JA) ;MOVE JOB STATE VARIABLES TO SYSTEM ARE + 000122' 251040 000000* 01240 BLT T, USRPFU + 000123' 200051 000103* 01250 MOVE T, JOBLEV(JA) ;RESTORE LOC. 40 + 000124' 202040 000040 01260 MOVEM T, 40 + 000125' 200051 000105* 01270 MOVE T, JOBUXT(JA) ;AND UUO PC + 000126' 202040 000104* 01280 MOVEM T, UUO0 + 000127' 200051 000107* 01290 MOVE T, JOBPC(JA) ;SET C(CHANNEL LOC.) TO C(JOBPC) + 000130' 202040 000106* 01300 MOVEM T, APRCHL + 000131' 205751 000074* 01310 MOVSI 17, JOBDAC(JA) ;RESTORE USER ACS + 000132' 251740 000017 01320 BLT 17,17 + 000133' 332000 000064* 01330 SKIPE STOPU ;HAS STOPU BEEN SET SINCE CIP6 + 000134' 254000 000032' 01340 JRST CIP1B ;YES, GO RESCHEDULE + 000135' 254520 000130* 01350 JEN @APRCHL ;NO. DISMISS CHANNEL + + 000136' 402000 000111* 01370 CIP8: SETZM SCHEDF ;CLEAR SCHEDULING FLAG + 000137' 254000 000000* 01380 JRST APRRET ;AND DISMISS INTERRUPT + + 01400 ;THE NULL JOB + 000140' 254400 000141' 01410 NUL0: JRST 10, NULJOB ;RENABLE AND RUN IN EXEC. MODE + + 000141' 200040 000142' 01430 NULJOB: MOVE 1,.+1 + 000142' 344000 000001 01440 AOJA 0,1 ;COUNT IN AC0 FOR VISUAL MONITORING + 01450 ;ALSO PC = 1 + 01460 END, + 000143' 140600 000002 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000144 + +8K CORE USED + CLOCK - CLOCK SERVICE ROUTINE PAGE 6 + SYMBOL TABLE + + 000243 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APR 000000 SPD +APRCHL 000135' EXT +APRCHN 000000 EXT +APRILM 000023' EXT +APRINT 000016' INT +APRRET 000137' EXT +APRSAC 000075' EXT +APRSAV 000034' EXT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CIP0 000024' +CIP1 000030' +CIP1B 000032' +CIP2 000034' +CIP4 000042' +CIP5 000062' +CIP6 000064' +CIP7 000110' +CIP8 000136' +CIPWT 000001' +CLDS 000000 EXT +CLKINI 000013' INT +CLKOFF 000040' EXT +CLOCK 000000' INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +COMCNT 000062' EXT +COMMAN 000063' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT + CLOCK - CLOCK SERVICE ROUTINE PAGE 6-1 + SYMBOL TABLE + +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT + CLOCK - CLOCK SERVICE ROUTINE PAGE 6-2 + SYMBOL TABLE + +ITEM 000004 INT +JA 000011 +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000113' EXT +JBTSTS 000037' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000110' EXT +JOBADR 000114' EXT +JOBDAC 000131' EXT +JOBDAT 000115' EXT +JOBDHI 000076' EXT +JOBLEV 000123' EXT +JOBPC 000127' EXT +JOBPDP 000121' EXT +JOBPFU 000101' EXT +JOBREL 000116' EXT +JOBUXT 000125' EXT +LOOKB 040000 INT +MTW 010000 INT +NUL0 000140' +NULJOB 000141' INT +NXTJOB 000066' EXT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PI 000004 SPD +PICHN 000100 INT +PIOFF 000400 +PION 000200 +PROG 000007 INT +RSCHED 000064' INT +RUN 200000 INT +RUNABL 204000 INT +SCHEDF 000136' EXT +STOPU 000133' EXT +STOR 000005 +T 000001 +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TIME 000035' EXT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +USRPDP 000120' EXT +USRPFU 000122' EXT +UUO 000014 INT + CLOCK - CLOCK SERVICE ROUTINE PAGE 6-3 + SYMBOL TABLE + +UUO0 000126' EXT + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC OOOOOOOOO NNN NNN + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC OOOOOOOOO NNN NNN + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC OOOOOOOOO NNN NNN +CCC OOO OOO MMMMMM MMMMMM CCC OOO OOO NNN NNN +CCC OOO OOO MMMMMM MMMMMM CCC OOO OOO NNN NNN +CCC OOO OOO MMMMMM MMMMMM CCC OOO OOO NNN NNN +CCC OOO OOO MMM MMM MMM CCC OOO OOO NNNNNN NNN +CCC OOO OOO MMM MMM MMM CCC OOO OOO NNNNNN NNN +CCC OOO OOO MMM MMM MMM CCC OOO OOO NNNNNN NNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNN NNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNN NNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNN NNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNNNNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNNNNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNNNNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNN +CCC OOO OOO MMM MMM CCC OOO OOO NNN NNN + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC OOOOOOOOO NNN NNN + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC OOOOOOOOO NNN NNN + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC OOOOOOOOO NNN NNN + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :COMCON.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:18 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2602 +File will be deleted after printing + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 1 + T.HASTINGS 8-2-65 + + 00010 XLIST + 01930 LIST + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 7 + T.HASTINGS 8-2-65 + + + 00010 TITLE COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES + 00020 SUBTTL T.HASTINGS 8-2-65 + 00030 ;CALLED FROM COMMAND DECODER WHICH IS CALLED FROM CLOCK ROUTINE + 00040 ;WITH FOLLOWING ACS SET: + 00050 ;TAC= BYTE POINTER TO COMMAND STRING(SPACE OR CR AFTER COMMAND NAME) + 00060 ;ITEM = JOB NUMBER + 00070 ;DAT = BYTE POINTER TO LAST OUTPUT CHARACTER + 00080 ;DEVDAT= ADDRESS OF DEVICE DATA BLOCK INITIATING COMMAND + 00090 ;JDAT = ADDRESS OF JOB DATA AREA, = 0 IF NO JOB AREA + + 00110 ;UPON RETURN FROM COMMAND SETUP ROUTINE, A CR-LF IS ADDED IF + 00120 ;NEEDED AND TTY IS STARTED + + 00140 ;SINCE THE COMMAND DECODER IS CALLED FROM THE CLOCK ROUTINE + 00150 ;COMMAND SETUP ROUTINES MUST RUN TO COMPLETION QUICKLY + 00160 ;IF A COMMAND FUNCTION CANNOT DO THIS, IT MUST JUST SET + 00170 ;THE JOB TO A RUNNABLE STATUS AND RETURN I MEDIATELY + + 00190 ; "IJOB" - INITIALIZE JOB + 00200 INTERNAL IJOB + 00210 EXTERNAL RADX10,JOBINI,JOBKIL,CRLF,MONJOB + + 000000' 254000 000000* 00230 IJOB: JRST JOBINI + + 00250 ;PRINT JOB NUMBER + + 00270 INTERNAL PJOB + 000001' 200040 000004 00280 PJOB: MOVE TAC, ITEM + 000002' 260140 000000* 00290 PUSHJ PDP,RADX10 + 000003' 254000 000000* 00300 JRST CRLF + + 00320 ;KILL JOB(MUST HAVE CORE ASSIGNED) + + 00340 INTERNAL KJOB + 000004' 254000 000000* 00350 KJOB: JRST JOBKIL + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 2 + T.HASTINGS 8-2-65 + + + + 00390 ; "START L" OR "START" - START AT LOC. L OR STARTING ADDRESS + 00400 INTERNAL START + 00410 EXTERNAL OCTIN,JOBSA,START1,COMERA,STARTU,CPOPJ,CPOPJ1,STARTM + + 000005' 260140 000013' 00430 START: PUSHJ PDP,STRT + 000006' 254000 000000* 00440 JRST COMERA ;ERROR + 000007' 254000 000000* 00450 JRST STARTU ;GO SET JOB TO START(CONSOLE IN USER MO + + 00470 ; "STARTC L" OR "STARTC" - START AT LOC. L(TTY IN COMMAND MODE) + + 00490 INTERNAL STARTC + 00500 EXTERNAL STARTM + + 000010' 260140 000013' 00520 STARTC: PUSHJ PDP,STRT + 000011' 254000 000006* 00530 JRST COMERA ;ERROR + 000012' 254000 000000* 00540 JRST STARTM ;FO SET JOB TO START(TTY IN COM. MODE) + + 00560 ;ROUTINE TO SCAN ARGUMENT + + 000013' 260140 000000* 00580 STRT: PUSHJ PDP,OCTIN ;CONVERT OCTAL NO, + 000014' 254000 000016' 00590 JRST ST2 ;EITHER NO NUMBER OR ERROR + 000015' 254000 000020' 00600 JRST ST3 ;START JOB C(TAC1) + + 000016' 326100 000000* 00620 ST2: JUMPN TAC1, CPOPJ ;NOT A NUMBER IF NON-ZERO + 000017' 550111 000000* 00630 HRRZ TAC1, JOBSA(JDAT) ;NO, START AT STARTING ADDRES + 000020' 505100 001000 00640 ST3: HRLI TAC1, 1000 ;USER MODE FLAG + 000021' 254000 000000* 00650 JRST CPOPJ1 ;OR RETURN + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 3 + T.HASTINGS 8-2-65 + + + + 00690 ; "CONT" - CONTINUE EXECUTION FROM WHERE LEFT OFF + 00700 INTERNAL CONT + 00710 EXTERNAL CONTU,CONMES,JBTSTS + + 000022' 205100 002000 00730 CONT: MOVSI TAC1, JERR + 000023' 616104 000000* 00740 TDNN TAC1, JBTSTS(ITEM) ;IS JOB ERROR BIT SET? + 000024' 254000 000000* 00750 JRST CONTU ;NO, GO SET JOB TO CONTINUE + 000025' 265040 000000* 00760 CONTA: JSP TAC,CONMES ;YES, PRINT CANT CONTINUE + + 000026' 416031 623650 00780 ASCIZ /CAN'T CONTINUE + 000027' 202071 747250 + 000030' 446352 542432 + 000031' 050000 000000 00790 / + + 00810 ; "CONTC" - CONTINUE EXECUTION(TTY REMAINS IN COMMAND MODE) + + 00830 INTERNAL CONTC + 00840 EXTERNAL CONTM + + 000032' 205100 002000 00860 CONTC: MOVSI TAC1, JERR + 000033' 616104 000023* 00870 TDNN TAC1, JBTSTS(ITEM) ;IS JOB ERROR BIT SET? + 000034' 254000 000000* 00880 JRST CONTM ;NO + 000035' 254000 000025' 00890 JRST CONTA ;YES + + 00910 ; "DDT" - START EXECUTION AT DDT IN USER AREA + 00920 INTERNAL DDTGO + 00930 EXTERNAL JOBDDT,STARTU + + 000036' 550111 000000* 00950 DDTGO: HRRZ TAC1, JOBDDT(JDAT) ;GET DDT STARTING ADDRESS + 000037' 326100 000043' 00960 JUMPN TAC1,DDT1 ;GO START JOB IF NON-ZERO + 000040' 265040 000025* 00970 JSP TAC,CONMES ;ZERO, PRINT"NO DDT" + + 000041' 472364 042210 00990 ASCII /NO DDT + 000042' 520321 200000 01000 / + + 000043' 505100 010000 01020 DDT1: HRLI TAC1,USRMOD ;USER MODE BIT + 000044' 254000 000007* 01030 JRST STARTU ;GO SET TO RUN JOB + 01040 ;DIGITAL MAYNARD + + 01060 INTERNAL DIGITAL + + 000045' 265040 000040* 01080 DIGITAL: JSP TAC,CONMES + 000046' 442131 446236 01090 ASCIZ /HELLO + 000047' 064240 000000 01100 / + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 4 + T.HASTINGS 8-2-65 + + + + + + 01160 ; "CORE #" - ASSIGNS #*1024 WORDS OF CORE TO JOB + 01170 ; "CORE" WITH NO ARGUMENT IS EQUIVALENT TO "CORE 0" + + 01190 INTERNAL CORE + 01200 EXTERNAL CORE1,DECIN,ANYRIN,CONMES,COMERA,NOTENF + 01210 EXTERNAL JOBPFI,JBTADR,CPOPJ,JOBPRT,JOBPR1,JOBZER + 01220 EXTERNAL RADX10 + + 000050' 260140 000000* 01240 CORE: PUSHJ PDP, DECIN ;GET NO. OF 1K BLOCKS + 000051' 254000 000077' 01250 JRST COR3 ;ERROR + 000052' 336040 000002 01260 SKIPN TAC,TAC1 ;IS ZERO BEING ASKED FOR? + 000053' 326440 000000* 01270 JUMPN JDAT,JOBZER ;YES, RELEASE ALL DEVICES IF THERE WAS + 000054' 260140 000000* 01280 PUSHJ PDP,CORE1 + 000055' 254000 000065' 01290 JRST COR2 ;CORE NOT AVAILABLE (AC TAC = BLO CKS L + 000056' 550444 000000* 01300 HRRZ JDAT, JBTADR(ITEM) ;CORE GRANTED, CLEAR PART OF + 000057' 322440 000016* 01310 JUMPE JDAT, CPOPJ ;UNLESS ALL CORE WAS RETURNED + 000060' 402011 000000* 01320 SETZM JOBPRT(JDAT) ;CLEAR PART PROTECTED FROM IO + 000061' 505051 000060* 01330 HRLI TAC,JOBPRT(JDAT) + 000062' 541051 000000* 01340 HRRI TAC, JOBPR1(JDAT) + 000063' 251051 000000* 01350 BLT TAC, JOBPFI(JDAT) + 000064' 263140 000000 01360 POPJ PDP, + + 000065' 260140 000002* 01380 COR2: PUSHJ PDP,RADX10 ;PRINT NO. OF FREE 1K BLOCKS LEFT + 000066' 265040 000045* 01390 JSP TAC,CONMES + + 000067' 202152 242612 01410 ASCIZ / FREE 1K BLOCKS LEFT, NONE ASSIGNED + 000070' 201431 320204 + 000071' 462370 345646 + 000072' 202310 543250 + 000073' 261011 647634 + 000074' 425010 151646 + 000075' 446171 642610 + 000076' 064240 000000 01420 / + 000077' 326100 000011* 01430 COR3: JUMPN TAC1, COMERA ;NOT A NO. IF NON-ZERO, APPEND "?" + 000100' 254000 000000* 01440 JRST NOTENF ;NOT ENOUGH ARGUMENT + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 5 + T.HASTINGS 8-2-65 + + + + 01480 ; "SAVE FILE-NAME" - SAVES JOB AREA ON RETRIEVABLE DEVICE + 01490 ;ONLY A SAVE OR A GET IN PROGRESS FOR EACH JOB + 01500 ;NO ATTEMPT IS MADE TO SAVE DEVICE ASSIGNMENTS, ACS, OR PC + 01510 INTERNAL SAVE + 01520 EXTERNAL SAVJOB,START1,SGSET + + 000101' 201100 000000* 01540 SAVE: MOVEI TAC1, SAVJOB ;SETUP TO RUN SAVJOB + 000102' 254000 000000* 01550 JRST SGSET + + 01570 ; "GET DEVICE:FILE-NAME" - SETS UP JOB AREA FROM RETRIEVABLE DEVICE + 01580 INTERNAL GET + 01590 EXTERNAL GETJOB + + 000103' 201100 000000* 01610 GET: MOVEI TAC1, GETJOB ;SETUP TO RUN GET JOB + 000104' 254000 000102* 01620 JRST SGSET + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 6 + T.HASTINGS 8-2-65 + + + + + 01670 ;"ASSIGN DEV:NAME" - ASSIGNS DEV TO JOB AND GIVES IT LOGICAL NAME NAM + + 01690 ;TEMPORARY ACS + 000012 01700 T1=BUFPNT + 000013 01710 T=BUFWRD + + 01730 INTERNAL ASSIGN + 01740 EXTERNAL CTEXT1, NOTENF, DEVLST, ASSASG, CONMES, PJOBN, ANYRDX, ERNAM + 01750 EXTERNAL CRLF, DEVLG,SYSTAP + + 000105' 260140 000000* 01770 ASSIGN: PUSHJ PDP, CTEXT1 ;GET FIRST ARGUMENT + 000106' 322100 000100* 01780 JUMPE TAC1, NOTENF ;NO ARGUMENTS TYPED IF 0 + 000107' 200500 000002 01790 MOVE T1, TAC1 ;SAVE DEVICE NAME + 000110' 261140 400000 01800 PUSH PDP, ASSCON ;SAVE INPUT BYTE POINTER + 000111' 201100 400000 01810 MOVEI TAC1, ASSCON ;SETUP ASSIGNED BY CONSOLE BIT + 000112' 554300 000000* 01820 ASSN: HLRZ DEVDAT, DEVLST + 000113' 312506 000000 01830 ASSG0: CAME T1,DEVNAM(DEVDAT) ;DOES PHYSICAL NAME MATCH? + 000114' 254000 000120' 01840 JRST ASSG1 ;NO + 000115' 260140 000000* 01850 PUSHJ PDP, ASSASG ;YES, TRY TO ASSIGN DEVICE + 000116' 254000 000135' 01860 JRST ASSER1 ;ALREADY ASSIGNED TO ANOTHER JOB + 000117' 254000 000151' 01870 JRST ASSFIN ;ASSIGNED + + 000120' 200046 000000 01890 ASSG1: MOVE TAC,DEVNAM(DEVDAT) ;IS THIS THE SYSTEM TAPE? + 000121' 316040 000000* 01900 CAMN TAC,SYSTAP + 000122' 254000 000131' 01910 JRST ASSG2 ;YES + 000123' 135540 000000* 01920 LDB T, PJOBN ;SAVE OLD JOB NUMBER FOR THIS + 000124' 620040 777777 01930 TRZ TAC,-1 ;COMPARE LEFT HALF ONLY + 000125' 316040 000012 01940 CAMN TAC, T1 + 000126' 260140 000115* 01950 PUSHJ PDP, ASSASG ;MATCH, TRY TO ASSIGN IT + 000127' 254000 000131' 01960 JRST ASSG2 ;KEEP LOOKING + 000130' 322540 000151' 01970 JUMPE T,ASSFIN ;IF OLD JOB NUMBER 0, DEVICE PREVIOSLY + + 000131' 554306 000003 01990 ASSG2: HLRZ DEVDAT, DEVSER(DEVDAT) + 000132' 326300 000113' 02000 JUMPN DEVDAT, ASSG0 + 000133' 262140 000001 02010 POP PDP, TAC + 000134' 254000 000211' 02020 JRST NOTDEV ;PRINT NO SUCH DEVICE + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 7 + T.HASTINGS 8-2-65 + + + + 02060 ;ALREADY ASSIGNED TO ANOTHER JOB + + 000135' 262140 000001 02080 ASSER1: POP PDP, TAC + 000136' 201040 000144' 02090 MOVEI TAC, ASSMS2 + 000137' 260140 000066* 02100 PUSHJ PDP, CONMES + 000140' 201100 000012 02110 MOVEI TAC1, ^D10 + 000141' 135040 000123* 02120 LDB TAC, PJOBN + 000142' 260140 000000* 02130 PUSHJ PDP,ANYRDX + 000143' 254000 000003* 02140 JRST CRLF + + 000144' 406312 242602 02160 ASSMS2: ASCIZ /ALREADY ASSIGNED TO JOB / + 000145' 422624 040646 + 000146' 516230 747212 + 000147' 421012 447500 + 000150' 452370 220000 + + 02180 ;DEVICE ASSIGNED, GIVE IT A LOGICAL NAME + + 000151' 262140 000001 02200 ASSFIN: POP PDP,TAC ;RESTORE INPUT BYTE POINTER + 000152' 261140 000006 02210 PUSH PDP,DEVDAT ;SAVE DDB ADDRESS + 000153' 260140 000105* 02220 PUSHJ PDP,CTEXT1 ;GET SECOND ARG, LOGICAL DEVICE NAME + 000154' 332040 000002 02230 SKIPE TAC,TAC1 ;IS THERE A LOGICAL NAME SPECIFIED? + 000155' 260140 000000* 02240 PUSHJ PDP, DEVLG ;YES, SEE IF IT IS ALREADY IN USE + 02250 ;BY THIS USER + 000156' 254000 000161' 02260 JRST ASSF1 ;NO + 000157' 201040 000173' 02270 MOVEI TAC,LOGERR ;YES, PRINT ERROR + 000160' 260140 000137* 02280 PUSHJ PDP,CONMES + 000161' 200303 000000 02290 ASSF1: MOVE DEVDAT,(PDP) ;RESTORE DDB ADDRESS + 000162' 202106 000005 02300 MOVEM TAC1,DEVLOG(DEVDAT) ;STORE IN DEVICE DATA BLOCK + 000163' 205100 400000 02310 MOVSI TAC1,DVDIRIN ;CLEAR DIRECTORY IN CORE BIT + 000164' 412106 000004 02320 ANDCAM TAC1,DEVMOD(DEVDAT) + 000165' 260140 000000* 02330 PUSHJ PDP, ERNAM ;PRINT PHYSICAL DEVICE NAME + 000166' 262140 000006 02340 POP PDP, DEVDAT + 000167' 265040 000160* 02350 JSP TAC,CONMES + + 000170' 202032 351622 02370 ASCIZ / ASSIGNED + 000171' 436350 542032 + 000172' 050000 000000 02380 / + + 000173' 462370 744606 02400 LOGERR: ASCIZ /LOGICAL NAME ALREADY IN USE, / + 000174' 406304 047202 + 000175' 466124 040630 + 000176' 512130 142262 + 000177' 202231 620252 + 000200' 516125 420000 + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 8 + T.HASTINGS 8-2-65 + + + + 02440 ;"DEASSIGN DEV" - DEASSIGNS DEVICE FROM CONSOLE + + 02460 INTERNAL DEASSIGN, NOTDEV + 02470 EXTERNAL CTEXT1, DEVSRC, CONMES, ERNAM, DEASG, DEASTY + + 000201' 260140 000153* 02490 DEASSIGN: PUSHJ PDP, CTEXT1 ;GET DEVICE NAME + 000202' 322100 000000* 02500 JUMPE TAC1,DEASTY ;NO ARG. IF 0, DEASSIGN ALL BUT TTY + 000203' 200040 000002 02510 MOVE TAC, TAC1 ;DEVICE NAME + 000204' 260140 000000* 02520 PUSHJ PDP, DEVSRC ;SEARCH FOR DEVICE + 000205' 254000 000211' 02530 JRST DEAER1 ;NOT FOUND + 000206' 260140 000000* 02540 PUSHJ PDP, DEASG ;FOUND, DEASSIGN IT + 000207' 254000 000216' 02550 JRST DEAER2 ;NOT PREVIOUSLY ASSIGNED + 000210' 263140 000000 02560 POPJ PDP, ;DEVICE DEASSIGNED + + 000211' 02580 NOTDEV: + 000211' 265040 000167* 02590 DEAER1: JSP TAC,CONMES ;PRINT NO SUCH DEVICE + + 000212' 472364 051652 02610 ASCIZ /NO SUCH DEVICE + 000213' 416204 042212 + 000214' 532230 342432 + 000215' 050000 000000 02620 / + + 000216' 261140 000006 02640 DEAER2: PUSH PDP, DEVDAT ;PRINT PHYSICAL DEVICE NAME + 000217' 260140 000165* 02650 PUSHJ PDP, ERNAM + 000220' 262140 000006 02660 POP PDP, DEVDAT + 000221' 265040 000211* 02670 JSP TAC,CONMES + + 000222' 536032 347116 02690 ASCIZ /WASN'T ASSIGNED + 000223' 521010 151646 + 000224' 446171 642610 + 000225' 064240 000000 02700 / + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 9 + T.HASTINGS 8-2-65 + + + + 02740 ; "ATTACH N" - ATTACH CONSOLE TO JOB N + 02750 ;CHANGES ADDRESS OF TTY DEVICE DATA BLOCK STORED IN -1(PDP) + 02760 ;BY THE COMMAND DECODER + + 02780 INTERNAL ATTACH + 02790 EXTERNAL DECIN,TTYATT,JOBN,ERNAM,CONMES,TTYFND + + 000226' 260140 000050* 02810 ATTACH: PUSHJ PDP,DECIN ;GET JOB NO. + 000227' 254000 000243' 02820 JRST ATT1 ;NOT A NUMBER OR NONE SPECIFIEED + 000230' 332000 000002 02830 SKIPE TAC1 ;0 IS ILLEGAL + 000231' 301100 000000* 02840 CAIL TAC1, JOBN ;IS JOB NUMBER TOO BIG? + 000232' 254000 000243' 02850 JRST ATT1 ;ILLEGAL JOB NUMBER + 000233' 205040 004000 02860 MOVSI TAC,JNA ;HAS THIS JOB NO BEEN ASSIGNED? + 000234' 616042 000033* 02870 TDNN TAC,JBTSTS(TAC1) + 000235' 254000 000261' 02880 JRST ATT4 ;NO, PRINT ERROR + 000236' 200200 000002 02890 MOVE ITEM,TAC1 ;JOB NUMBER TO ITEM + 000237' 260140 000000* 02900 PUSHJ PDP,TTYATT ;NO, ATTACH TTY + 000240' 254000 000251' 02910 JRST ATT2 ;ERROR CANT ATTACH + 000241' 202303 777777 02920 MOVEM DEVDAT,-1(PDP) ;CHANGE DEV DATA BLOCK ADDRES + 000242' 254000 000000* 02930 JRST TTYFND ;ATTACHED. GO SET UP OUTP. BYTE PTR. + + 000243' 265040 000221* 02950 ATT1: JSP TAC,CONMES + 000244' 446311 442616 02960 ASCIZ /ILLEGAL JOB NUMBER + 000245' 406304 045236 + 000246' 411011 652632 + 000247' 412132 206424 02970 / + 000250' 000000 000000 + + 000251' 261140 000006 02990 ATT2: PUSH PDP,DEVDAT + 000252' 260140 000217* 03000 PUSHJ PDP,ERNAM ;PRINT TTY DEVICE NAME + 000253' 262140 000001 03010 POP PDP,TAC + 000254' 265040 000243* 03020 JSP TAC,CONMES + 000255' 202031 451212 03030 ASCIZ / ALREADY ATTACHED + 000256' 406113 120202 + 000257' 522510 141620 + 000260' 426101 505000 03040 / + + 000261' 265040 000254* 03060 ATT4: JSP TAC,CONMES + 000262' 452370 220234 03070 ASCIZ /JOB NEVER WAS INITIATED + 000263' 426550 551100 + 000264' 536032 320222 + 000265' 472232 444602 + 000266' 522130 406424 03080 / + 000267' 000000 000000 + + 03100 ; "DETACH" - DETACH CONSOLE FORM JOB + + 03120 INTERNAL DETACH + 03130 EXTERNAL TTYDET + + 000270' 350003 000000 03150 DETACH: AOS (PDP) ;SUPRESS CR-LF SO NO TTY DDB SETUP + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 9-1 + T.HASTINGS 8-2-65 + + 000271' 254000 000000* 03160 JRST TTYDET ;GO DETACH TTY + + 03180 END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000272 + +8K CORE USED + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 10 + SYMBOL TABLE + + 000303 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ANYRDX 000142' EXT +ANYRIN 000000 EXT +ASSASG 000126' EXT +ASSCON 400000 INT +ASSER1 000135' +ASSF1 000161' +ASSFIN 000151' +ASSG0 000113' +ASSG1 000120' +ASSG2 000131' +ASSIGN 000105' INT +ASSMS2 000144' +ASSN 000112' +ASSPRG 200000 INT +ATT1 000243' +ATT2 000251' +ATT4 000261' +ATTACH 000226' INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +COMERA 000077' EXT +CONMES 000261' EXT +CONT 000022' INT +CONTA 000025' +CONTC 000032' INT +CONTM 000034' EXT +CONTU 000024' EXT +COR2 000065' +COR3 000077' +CORE 000050' INT +CORE1 000054' EXT +CPOPJ 000057' EXT +CPOPJ1 000021' EXT +CRLF 000143' EXT +CTEXT1 000201' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDT1 000043' +DDTGO 000036' INT + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 10-1 + SYMBOL TABLE + +DDTMEM 000037 INT +DDTSYM 000036 INT +DEAER1 000211' +DEAER2 000216' +DEASG 000206' EXT +DEASSI 000201' INT +DEASTY 000202' EXT +DECIN 000226' EXT +DEN 000004 INT +DETACH 000270' INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLG 000155' EXT +DEVLOG 000005 INT +DEVLST 000112' EXT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DEVSRC 000204' EXT +DGF 000012 INT +DIGITA 000045' INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERNAM 000252' EXT +GET 000103' INT +GETJOB 000103' EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +IJOB 000000' INT + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 10-2 + SYMBOL TABLE + +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000056' EXT +JBTSTS 000234' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOBDDT 000036' EXT +JOBINI 000000' EXT +JOBKIL 000004' EXT +JOBN 000231' EXT +JOBPFI 000063' EXT +JOBPR1 000062' EXT +JOBPRT 000061' EXT +JOBSA 000017' EXT +JOBZER 000053' EXT +KJOB 000004' INT +LOGERR 000173' +LOOKB 040000 INT +MONJOB 000000 EXT +MTW 010000 INT +NOTDEV 000211' INT +NOTENF 000106' EXT +OBUFB 100000 INT +OCTIN 000013' EXT + COMCON - COMMON CONTROL - THE COMMAND SETUP ROUTINES PAGE 10-3 + SYMBOL TABLE + +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PJOB 000001' INT +PJOBN 000141' EXT +PROG 000007 INT +RADX10 000065' EXT +RUN 200000 INT +RUNABL 204000 INT +SAVE 000101' INT +SAVJOB 000101' EXT +SGSET 000104' EXT +ST2 000016' +ST3 000020' +START 000005' INT +START1 000000 EXT +STARTC 000010' INT +STARTM 000012' EXT +STARTU 000044' EXT +STRT 000013' +SYSTAP 000121' EXT +T 000013 +T1 000012 +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYATT 000237' EXT +TTYDET 000271' EXT +TTYFND 000242' EXT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +CCC OOO OOO MMMMMM MMMMMM CCC SSS SSS +CCC OOO OOO MMMMMM MMMMMM CCC SSS SSS +CCC OOO OOO MMMMMM MMMMMM CCC SSS SSS +CCC OOO OOO MMM MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM CCC SSSSSSSSS SSSSSSSSS +CCC OOO OOO MMM MMM CCC SSSSSSSSS SSSSSSSSS +CCC OOO OOO MMM MMM CCC SSSSSSSSS SSSSSSSSS +CCC OOO OOO MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM CCC SSS SSS +CCC OOO OOO MMM MMM CCC SSS SSS + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + CCCCCCCCCCCC OOOOOOOOO MMM MMM CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :COMCSS.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:19 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2587 +File will be deleted after printing + COMCSS - COMMAND COMMON ROUTINES PAGE 1 + T. HASTINGS 8-15-65 + + 00010 XLIST + 01930 LIST + COMCSS - COMMAND COMMON ROUTINES PAGE 7 + T. HASTINGS 8-15-65 + + + 00010 TITLE COMCSS - COMMAND COMMON ROUTINES + 00020 SUBTTL T. HASTINGS 8-15-65 + 00030 ;ROUTINE TO RETURN NEXT ALPHANUMERIC STRING + 00040 ; IN COMMAND LINE (SIXBIT) + 00050 ; CALL: MOVE TAC, BYTE POINTER TO FIRST CHAR.-1 + 00060 ; PUSHJ PDP, CTEXT + 00070 ; SIXBIT STRING RETURN LEFT JUSTIFIED IN AC TAC1 + + 00090 INTERNAL CTEXT, CTEXT1 + + 000012 00110 T=BUFPNT ;TEMPORARY ACS + 000013 00120 T1=BUFWRD + 000014 00130 T2=UUO + + 000000' 201100 000000 00150 CTEXT1: MOVEI TAC1, 0 ;CHECK PREVIOUS BREAK CHAR. + 000001' 135500 000001 00160 LDB T, TAC + 000002' 306500 000015 00170 CAIN T, 15 ;RETURN IF CR. + 000003' 263140 000000 00180 POPJ PDP, + + 000004' 260140 000035' 00200 CTEXT: PUSHJ PDP, SKIPS ;SKIP LEADING SPACES, TABS + 000005' 200500 000231' 00210 MOVE T,[POINT 6,TAC1] + 000006' 201100 000000 00220 MOVEI TAC1, 0 + 000007' 135540 000001 00230 LDB T1, TAC + 000010' 254000 000012' 00240 JRST CTEX1 + 000011' 134540 000001 00250 CTEX0: ILDB T1,TAC + 000012' 260140 000024' 00260 CTEX1: PUSHJ PDP, CTEX ;IS IT ALPHANUMERIC + 000013' 263140 000000 00270 POPJ PDP, ;NO. EXIT + 000014' 640540 000040 00280 TRC T1,40 ;CONVERT TO SIXBIT + 000015' 136540 000012 00290 IDPB T1,T ;YES, STORE AWAY + 000016' 312500 000232' 00300 CAME T,[POINT 6,TAC1,35] ;SIX CHARACTER YET + 000017' 254000 000011' 00310 JRST CTEX0 ;NO + 000020' 134540 000001 00320 CTEX2: ILDB T1, TAC ;YES + 000021' 260140 000024' 00330 PUSHJ PDP, CTEX ;IS IT ALPHANUMERIC + 000022' 263140 000000 00340 POPJ PDP, ;NO, EXIT + 000023' 254000 000020' 00350 JRST CTEX2 + + 00370 ;SCAN FOR ALPHANUMERIC CHAR IN T1 + 000024' 301540 000060 00380 CTEX: CAIL T1, "0" + 000025' 303540 000132 00390 CAILE T1, "Z" ;LETTERS ARE LARGER THAN NOS. + 000026' 263140 000000 00400 POPJ PDP, ;NEITHER + 000027' 303540 000071 00410 CAILE T1, "9" + 000030' 301540 000101 00420 CAIL T1, "A" + 000031' 350003 000000 00430 AOS (PDP) ;LETTER OR NUMBER + 000032' 263140 000000 00440 POPJ PDP, + COMCSS - COMMAND COMMON ROUTINES PAGE 2 + T. HASTINGS 8-15-65 + + + 00470 ;ROUTINE TO IGNORE LEADING SPACES AND TABS + 00480 ;CALL: MOVE TAC, BYTE POINTER TO CHAR. + 00490 ; PUSHJ PDP, SKIPS1 + + 00510 INTERNAL SKIPS1 + + 000033' 135500 000001 00530 SKIPS1: LDB T, TAC + 000034' 254000 000036' 00540 JRST SKIPSA + + 00560 ;ROUTINE TO IGNORE LEDING SPACES AND TABS + 00570 ;CALL: MOVE TAC, BYTE POINTER TO CHAR.-1 + 00580 ; PUSHJ PDP, SKIPS + + 00600 INTERNAL SKIPS + + 000035' 134500 000001 00620 SKIPS: ILDB T, TAC + 000036' 302500 000040 00630 SKIPSA: CAIE T, " " + 000037' 306500 000011 00640 CAIN T, 11 + 000040' 254000 000035' 00650 JRST SKIPS + 000041' 263140 000000 00660 POPJ PDP, + COMCSS - COMMAND COMMON ROUTINES PAGE 3 + T. HASTINGS 8-15-65 + + + 00690 ;ROUTINE TO APPEND A "?" TO INPUT STRING AND SET AS OUTPUT + 00700 ;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING + 00710 ; PUSHJ PDP, COMERA + + 00730 INTERNAL COMERA + + 000042' 133000 000001 00750 COMERA: IBP TAC + + 00770 ;ROUTINE TO REPLACE LAST CHARACTER IN INPUT STRING BY "?" + 00780 ;AND SET AS OUTPUT + 00790 ;CALL: MOVE TAC, BYTE POINTER TO LAST CHAR. IN INPUT STRING + 00800 ; PUSHJ PDP, COMERR + + 00820 INTERNAL COMERR + + 00840 EXTERNAL TTYBUF + + 000043' 200240 000001 00860 COMERR: MOVE DAT,TAC + 000044' 201506 000000* 00870 MOVEI T,TTYBUF(DEVDAT) ;IS THERE MORE THAN 3 WORDS I + 000045' 305505 777775 00880 CAIGE T,-3(DAT) + 000046' 541252 000003 00890 HRRI DAT,3(T) ;YES, TYPE ONLY 3 + 000047' 201500 000077 00900 MOVEI T, "?" ;APPEND "?" + 000050' 137500 000005 00910 DPB T, DAT + 000051' 265040 000060' 00920 JSP TAC,CONMES + + 000052' 202331 747222 00940 ASCIZ / MONITOR COMMAND ERROR + 000053' 522372 220206 + 000054' 476331 540634 + 000055' 421010 551244 + 000056' 476441 505000 00950 / + COMCSS - COMMAND COMMON ROUTINES PAGE 4 + T. HASTINGS 8-15-65 + + + 00980 ;ROUTINE TO PRINT CARRIAGE RETURN-LINE-FEED + 00990 ;CALL: MOVE DAT,BYTE POINTER TO OUTPUT + 01000 ; PUSHJ PDP,CRLF + + 01020 INTERNAL CRLF + + 01040 CRLF: MOVEI TAC,[ASCII / + 000057' 201040 000233' 01050 /] + + 01070 ;ROUTINE TO MOVE ASCII CHAR. STRING TO CONSOLE OUTPUT BUFFER + 01080 ; CALL: MOVE DAT, BYTE POINTER TO LAST OUTPUT CHARACTER + 01090 ; MOVEI TAC, ADDRESS OF ASCII MESSAGE` + 01100 ; PUSHJ PDP, CONMES + 01110 ; STRING TERMINATED BY NULL + 01120 ; CONMES DOES NOT START TTY + + 01140 INTERNAL CONMES + + 000060' 261140 000002 01160 CONMES: PUSH PDP, TAC1 + 000061' 505040 440700 01170 HRLI TAC, 440700 ;FORM BYTE POINTER + 000062' 134100 000001 01180 CON0: ILDB TAC1, TAC + 000063' 322100 000066' 01190 JUMPE TAC1, CON1 + 000064' 136100 000005 01200 IDPB TAC1, DAT + 000065' 254000 000062' 01210 JRST CON0 + 000066' 262140 000002 01220 CON1: POP PDP, TAC1 + 000067' 263140 000000 01230 POPJ PDP, + + 01250 ;ROUTINE TO PRINT "TO FEW ARGUMENTS" + 01260 ;CALL: MOVE DAT,BYTE POINTER + 01270 ; PUSHJ PDP,NOTENF + + 01290 INTERNAL NOTENF + + 000070' 265040 000060' 01310 NOTENF: JSP TAC,CONMES + + 000071' 522371 720214 01330 ASCIZ /TOO FEW ARGUMENTS + 000072' 426564 040644 + 000073' 436531 542634 + 000074' 522461 505000 01340 / + COMCSS - COMMAND COMMON ROUTINES PAGE 5 + T. HASTINGS 8-15-65 + + + 01370 ;ROUTINE TO INITIALIZE A JOB + 01380 ;CALL: MOVE ITEM, JOB NUMBER + 01390 ; PUSHJ PDP, JOBINI + 01400 ; DEVDAT IS SETUP ON RETURN + + 01420 INTERNAL JOBINI,JOBZER + 01430 EXTERNAL JBTSTS,PJOBN,CORE1,MONJOB,ESTOP,TTYATT + + 000075' 326200 000100' 01450 JOBINI: JUMPN ITEM,JOB0 ;HAS A JOB NUMBER BEED ASSIGNED? + 000076' 260140 000135' 01460 PUSHJ PDP,ASSJOB ;NO, THEN ASSIGN ONE. + 000077' 254000 000060' 01470 JRST CONMESS ;NONE LEFT + 000100' 260140 000000* 01480 JOB0: PUSHJ PDP,TTYATT ;ATTACH TTY + 000101' 255000 000000 01490 JFCL ;ALREADY ATTACHED + 000102' 205040 004000 01500 MOVSI TAC,JNA ;CLEAR JOB NO. ASSIGNED BIT + 000103' 412044 000000* 01510 ANDCAM TAC,JBTSTS(ITEM) ;TO FORCE MESSAGE + 000104' 205040 646471 01520 MOVSI TAC,646471 ;SIXBIT /TTY/ + 000105' 202046 000005 01530 MOVEM TAC, DEVLOG(DEVDAT) ;SET LOGICAL NAME + 000106' 201500 400000 01540 MOVEI T, ASSCON ;SET ASSIGNED BY CONSOLE BIT + 000107' 436506 000004 01550 IORM T, DEVMOD(DEVDAT) + 000110' 260140 000172' 01560 PUSHJ PDP, DEASTY ;DE-ASSIGNED ALL DEVICES EXCEPT TTY + 000111' 322440 000000* 01570 JUMPE JDAT,CPOPJ ;DOES JOB ALREDY HAVE CORE? + + 01590 ;ROUTINE TO RELEASE ALL DEVICES AND FLUSH CORE + 01600 ;RUN AS MONITOR JOB + 01610 ;CALL: SAME AS JOBIN + + 01630 EXTERNAL IOKILL + + 000112' 541100 000115' 01650 JOBZER: HRRI TAC1,JOB1 ;ADDRESS OF SUB. TO RELEASE DEV. + 000113' 505100 000000* 01660 JOBZR1: HRLI TAC1, ESTOP ;RETURN ADDRESS AFER IORELS + 000114' 254000 000000* 01670 JRST MONJOB ;GO SCHEDULE MONITOR JOB + + 000115' 260140 000000* 01690 JOB1: PUSHJ PDP,IOKILL ;KILL ALL IO DEVICES + 000116' 201040 000000 01700 MOVEI TAC,0 ;FLUSH ALL CORE + 000117' 370003 000000 01710 SOS (PDP) ;CORE1 WILL SKIP RETURN + 000120' 254000 000000* 01720 JRST CORE1 + COMCSS - COMMAND COMMON ROUTINES PAGE 6 + T. HASTINGS 8-15-65 + + + 01750 ;ROUTINE TO KILL CURRENT JOB + 01760 ;CALL PUSHJ PDP,JOBKIL + + 01780 INTERNAL JOBKIL + 01790 EXTERNAL JBTSTS,TTYKIL + + 000121' 350003 000000 01810 JOBKIL: AOS (PDP) ;SUPRESS CR-LF AND JOB INIT. CHECK + 000122' 201040 000001 01820 MOVEI TAC,1 + 000123' 260140 000173' 01830 PUSHJ PDP,DEASAL ;DEASSIGN ALL DEVICES + 000124' 322440 000132' 01840 JUMPE JDAT,JOBKA ;DOES JOB HAVE CORE? + 000125' 541100 000127' 01850 HRRI TAC1,JOBK2 ;YES,RELEAS DEVICE AND CLEAR + 000126' 254000 000113' 01860 JRST JOBZR1 + + 000127' 261140 000006 01880 JOBK2: PUSH PDP,DEVDAT ;SAVE DEVDAT FOR TTYKIL + 000130' 260140 000115' 01890 PUSHJ PDP,JOB1 ;FLUSH CORE AND RELEASE DEVICES + 000131' 262140 000006 01900 POP PDP,DEVDAT + 000132' 205040 002000 01910 JOBKA: MOVSI TAC,JERR ;CLEAR ALL BUT JOB ERROR BIT + 000133' 202044 000103* 01920 MOVEM TAC,JBTSTS(ITEM) ;IN JOB STATUS WORD + 000134' 254000 000000* 01930 JRST TTYKIL ;RETURN TTY TO VIRGIN STATE + + 01950 ;ROUTINE TO ASSIGN AN UNUSED JOB NUMBER + 01960 ;CALL PUSHJ PDP,ASSJOB + 01970 ; ERROR RETURN TAC DESTROYED + 01980 ; OK RETURN ITEM SET, TAC AND TAC1 PRESERVED + + 02000 INTERNAL ASSJOB + 02010 EXTERNAL MJOBN,JBTSTS,CPOPJ1 + + 000135' 205200 000000* 02030 ASSJOB: MOVSI ITEM,MJOBN + 000136' 253200 000137' 02040 AOBJN ITEM,.+1 + 000137' 205540 004000 02050 MOVSI T1,JNA + 000140' 612544 000133* 02060 TDNE T1,JBTSTS(ITEM) + 000141' 253200 000140' 02070 AOBJN ITEM,.-1 + 000142' 325200 000145' 02080 JUMPGE ITEM,ASSJB1 + 000143' 405200 777777 02090 ANDI ITEM,-1 + 000144' 254000 000000* 02100 JRST CPOPJ1 + + 000145' 265040 000060' 02120 ASSJB1: JSP TAC,CONMES + 000146' 452370 220206 02130 ASCIZ /JOB CAPACITY EXCEEDED + 000147' 406410 141622 + 000150' 522624 042660 + 000151' 416130 542212 + 000152' 420321 200000 02140 / + COMCSS - COMMAND COMMON ROUTINES PAGE 7 + T. HASTINGS 8-15-65 + + + 02170 ;ROUTINE TO DEASSIGN A DEVICE + 02180 ;CALL: MOVE DEVDAT, DEVICE DATA BLOCK + 02190 ; MOVE ITEM, JOB NUMBER + 02200 ; PUSHJ DPD, DEASG + 02210 ; ERROR NOT PREVIOUSLY ASSIGNED + 02220 ; OK RETURN WITH DEVICE DEASSIGNED + + 02240 INTERNAL DEASG + 02250 EXTERNAL PJOBN, CPOPJ1 + + 000153' 135500 000000* 02270 DEASG: LDB T, PJOBN ;WAS DEVICE ASSIGNED TO THIS JOB? + 000154' 312500 000004 02280 CAME T, ITEM + 000155' 263140 000000 02290 POPJ PDP, ;NO. RETURN + 000156' 205500 400000 02300 MOVSI T,DVDIRIN ;CLEAR DIRECTORY IN CORE BIT + 000157' 412506 000004 02310 ANDCAM T,DEVMOD(DEVDAT) + 000160' 201500 400000 02320 MOVEI T, ASSCON ;YES, IS ASSIGNED BY CONSOLE BIT ON? + 000161' 616506 000004 02330 TDNN T, DEVMOD(DEVDAT) + 000162' 263140 000000 02340 POPJ PDP, ;NO + 000163' 413506 000004 02350 ANDCAB T,DEVMOD(DEVDAT) ;YES, CLEAR BIT + 000164' 402006 000005 02360 SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME + 000165' 602500 200000 02370 TRNE T, ASSPRG ;IS ASSIGNED BY PROGRAM BIT ON? + 000166' 254000 000144* 02380 JRST CPOPJ1 ;YES + 000167' 201500 000000 02390 MOVEI T,0 ;NO, CLEAR JOB NUMBER + 000170' 137500 000153* 02400 DPB T, PJOBN + 000171' 254000 000166* 02410 JRST CPOPJ1 + + 02430 ;ROUTINE TO DEASSIGN ALL DEVICES EXCEPT LOGICAL TTY + 02440 ;CALL: MOVE ITEM, JOB NUMBER + 02450 ; PUSHJ PDP, DEASTY + + 02470 INTERNAL DEASTY + + 000172' 205040 646471 02490 DEASTY: MOVSI TAC, 646471 ;SIXBIT /TTY/ + 02500 ;FALL INTO DEASAL + + 02520 ;ROUTINE TO DEASSIGN ALL DEVICES EXECPT ONE + 02530 ;CALL: MOVE ITEM, JOB NUMBER + 02540 ; MOVE TAC, LOGICAL DEVICE NOT TO BE DEASSIGNED + 02550 ; PUSHJ PDP, DEASAL + + 02570 INTERNAL DEASAL + 02580 EXTERNAL DEVLST + + 000173' 261140 000006 02600 DEASAL: PUSH PDP,DEVDAT + 000174' 554300 000000* 02610 HLRZ DEVDAT,DEVLST ;SEARCH ALL DDBS + 000175' 312046 000005 02620 DEA1: CAME TAC, DEVLOG(DEVDAT) ;IS THIS THE LOGICAL NAME + 000176' 260140 000153' 02630 PUSHJ PDP, DEASG ;NO, TRY TO DEASSIGN IT + 000177' 255000 000000 02640 JFCL ;IGNORE IF CANT + 000200' 554306 000003 02650 HLRZ DEVDAT, DEVSER(DEVDAT) + 000201' 326300 000175' 02660 JUMPN DEVDAT, DEA1 + 000202' 262140 000006 02670 POP PDP,DEVDAT + 000203' 263140 000000 02680 POPJ PDP, + COMCSS - COMMAND COMMON ROUTINES PAGE 8 + T. HASTINGS 8-15-65 + + + 02710 ;ROUTINE TO READ CONSOLE AND CONVERT ANY RADIX NUMBER + 02720 ; CALL: MOVE TAC1, DESIRED RADIX + 02730 ; MOVE TAC, BYTE POINTER TO FIRST CHRACTER + 02740 ; PUSHJ PDP, ANYRIN + 02750 ; ERROR EXIT ;AC TAC1=0 IF NO NUMBER BEFORE FIRST NO + 02760 ; NORMAL EXIT ;AC TAC1 CONTAINS NUMEBR + 02770 ; SCAN STOPS ON FIRST ILLEGAL CHARACTER OR CR + 02780 ; IGNORES SPACES, TABS, RUBOUTS + + 02800 INTERNAL OCTIN,ANYRIN,DECIN,DECIN1 + 02810 EXTERNAL CPOPJ1, CPOPJ + + 000012 02830 C=BUFPNT ;CHARACTER AC + 000013 02840 R=BUFWRD ;RADIX AC + + 000204' 133000 000001 02860 DECIN1: IBP TAC ;SKIP SEPARATION CHARACTER + 000205' 201100 000012 02870 DECIN: MOVEI TAC1,12 ;DECIMAL INPUT + 000206' 254000 000210' 02880 JRST ANYRIN + + 000207' 201100 000010 02900 OCTIN: MOVEI TAC1, 10 + 000210' 200540 000002 02910 ANYRIN: MOVE R, TAC1 + 000211' 201100 000000 02920 MOVEI TAC1, 0 + 000212' 260140 000033' 02930 PUSHJ PDP, SKIPS1 ;SKIP LEADING SPACES, TABS + 000213' 135500 000001 02940 LDB C, TAC + 000214' 306500 000015 02950 CAIN C, 15 ;CHECK FOR INITIAL CR + 000215' 263140 000000 02960 POPJ PDP, ;EXIT WITH 0 IN TAC1 + 000216' 302500 000055 02970 OCT0: CAIE C,"-" ;DASH? + 000217' 306500 000015 02980 CAIN C,15 ;CR? + 000220' 254000 000171* 02990 JRST CPOPJ1 ;YES, ONLY LEGAL TERMINATORS + 000221' 275500 000060 03000 SUBI C,60 + 000222' 321500 000224' 03010 JUMPL C, OCTE ;ERROR IF NEGATIVE + 000223' 311500 000013 03020 CAML C, R ;OR .GE. RADIX + 000224' 344100 000111* 03030 OCTE: AOJA TAC1,CPOPJ ;ERROR,INSURE TAC1 NON-ZERO + 000225' 220100 000013 03040 IMUL TAC1, R + 000226' 270100 000012 03050 ADD TAC1, C + 000227' 134500 000001 03060 OCT1: ILDB C, TAC + 000230' 254000 000216' 03070 JRST OCT0 + + 03090 END, + 000231' 440600 000002 + 000232' 000600 000002 + 000233' 064240 000000 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000234 + +8K CORE USED + COMCSS - COMMAND COMMON ROUTINES PAGE 9 + SYMBOL TABLE + + 000245 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ANYRIN 000210' INT +ASSCON 400000 INT +ASSJB1 000145' +ASSJOB 000135' INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +C 000012 +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +COMERA 000042' INT +COMERR 000043' INT +CON0 000062' +CON1 000066' +CONMES 000060' INT +CORE1 000120' EXT +CPOPJ 000224' EXT +CPOPJ1 000220' EXT +CRLF 000057' INT +CTEX 000024' +CTEX0 000011' +CTEX1 000012' +CTEX2 000020' +CTEXT 000004' INT +CTEXT1 000000' INT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEA1 000175' +DEASAL 000173' INT +DEASG 000153' INT +DEASTY 000172' INT +DECIN 000205' INT +DECIN1 000204' INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT + COMCSS - COMMAND COMMON ROUTINES PAGE 9-1 + SYMBOL TABLE + +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVLST 000174' EXT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ESTOP 000113' EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IOKILL 000115' EXT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT + COMCSS - COMMAND COMMON ROUTINES PAGE 9-2 + SYMBOL TABLE + +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTSTS 000140' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB0 000100' +JOB1 000115' +JOBINI 000075' INT +JOBK2 000127' +JOBKA 000132' +JOBKIL 000121' INT +JOBZER 000112' INT +JOBZR1 000113' +LOOKB 040000 INT +MJOBN 000135' EXT +MONJOB 000114' EXT +MTW 010000 INT +NOTENF 000070' INT +OBUFB 100000 INT +OCT0 000216' +OCT1 000227' +OCTE 000224' +OCTIN 000207' INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PJOBN 000170' EXT +PROG 000007 INT +R 000013 +RUN 200000 INT +RUNABL 204000 INT +SKIPS 000035' INT +SKIPS1 000033' INT +SKIPSA 000036' +T 000012 +T1 000013 +T2 000014 +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYATT 000100' EXT +TTYBUF 000044' EXT +TTYKIL 000134' EXT + COMCSS - COMMAND COMMON ROUTINES PAGE 9-3 + SYMBOL TABLE + +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT + CCCCCCCCCCCC OOOOOOOOO MMM MMM IIIIIIIII NNN NNN IIIIIIIII + CCCCCCCCCCCC OOOOOOOOO MMM MMM IIIIIIIII NNN NNN IIIIIIIII + CCCCCCCCCCCC OOOOOOOOO MMM MMM IIIIIIIII NNN NNN IIIIIIIII +CCC OOO OOO MMMMMM MMMMMM III NNN NNN III +CCC OOO OOO MMMMMM MMMMMM III NNN NNN III +CCC OOO OOO MMMMMM MMMMMM III NNN NNN III +CCC OOO OOO MMM MMM MMM III NNNNNN NNN III +CCC OOO OOO MMM MMM MMM III NNNNNN NNN III +CCC OOO OOO MMM MMM MMM III NNNNNN NNN III +CCC OOO OOO MMM MMM III NNN NNN NNN III +CCC OOO OOO MMM MMM III NNN NNN NNN III +CCC OOO OOO MMM MMM III NNN NNN NNN III +CCC OOO OOO MMM MMM III NNN NNNNNN III +CCC OOO OOO MMM MMM III NNN NNNNNN III +CCC OOO OOO MMM MMM III NNN NNNNNN III +CCC OOO OOO MMM MMM III NNN NNN III +CCC OOO OOO MMM MMM III NNN NNN III +CCC OOO OOO MMM MMM III NNN NNN III + CCCCCCCCCCCC OOOOOOOOO MMM MMM IIIIIIIII NNN NNN IIIIIIIII + CCCCCCCCCCCC OOOOOOOOO MMM MMM IIIIIIIII NNN NNN IIIIIIIII + CCCCCCCCCCCC OOOOOOOOO MMM MMM IIIIIIIII NNN NNN IIIIIIIII + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :COMINI.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:19 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2574 +File will be deleted after printing + COMINI - THE COMMAND DECODER PAGE 1 + T. HASTINGS 8-2-65 + + 00010 XLIST + 01930 LIST + COMINI - THE COMMAND DECODER PAGE 7 + T. HASTINGS 8-2-65 + + + 00010 TITLE COMINI - THE COMMAND DECODER + 00020 SUBTTL T. HASTINGS 8-2-65 + 00030 ;CALLED FROM CLOCK ROUTINE WHEN COMCNT IS GREATER THAN 0 + 00040 ;AS SET BY TTY SERVICE ROUTINE + 00050 ;ALL ACS HAVE BEEN SAVED BY CLOCK CHANNEL + 00060 ;THE COMMAND DECODER CALLS TTYCOM WHICH SCANS FOR TTY WHICH TYPED + 00070 ;THE COMMAND AND THEN DISPATCHES(PUSHJ) TO APPROPRIATE + 00080 ;COMMAND SETUP ROTUINE OF THE SAME NAME WITH ACS SET AS: + 00090 ;ITEM = JOB NUMBER + 00100 ;TAC = BYTE POINTER TO COMMAND STRING(SSPACE OR CR AFTER COMMAND NAME) + 00110 ;DAT = BYTE POINTER TO LAST OUTPUT CHARACTER + 00120 ;DEVDAT = ADDRESS OF DEVICE DATA BLOCK TYPING COMMAND + 00130 ;JDAT = ADDRESS OF JOB AREA, = 0 IF NO JOB AREA + 00140 ;PROG = ADDRESS OF PROGRAM AREA + 00150 ;DEVDAT IS ALSO PUSHED ON END OF PD LIST SO IT MAY BE DESTROYED + 00160 ;UPON RETURN FROM COMMAND SETUP ROUTINE. A CR-LF IS ADDED TO + 00170 ;MASSAGE AND TTY IS STARTED ON TTY SPCIFIED BY -1(PDP) + + 00190 ;SINCE THE COMMAND DECODER IS CALLED FROM CLOCK ROUTINE + 00200 ;COMMAND SETUP ROUTINE MUST RUN TO COMPLETION QUICKLY + 00210 ;IF A COMMAND FUNCTION CANNON DO THIS. IT MUST JUST SET + 00220 ;THE JOB TO RUNABLE STATUS AND RETURN IMMEDIATELY + + 00240 INTERNAL COMMAND + 00250 EXTERNAL TTYCOM,TTYSTR,CTEXT,JBTADR,CONMES + 00260 EXTERNAL COMERR,COMCNT + 00270 EXTERNAL JOBINI,CRLF,CTEXT,RADX10,ASSJOB,JBTSTS + + 000012 00290 T=BUFPNT ;TEMPORARY ACS + 000013 00300 T1=BUFWRD + COMINI - THE COMMAND DECODER PAGE 2 + T. HASTINGS 8-2-65 + + + 000000' 260140 000000* 00330 COMMAND: PUSHJ PDP, TTYCOM ;SETUP DEVDAT,DAT,TAC, AND ITEM + 000001' 254000 000041' 00340 JRST COM2 ;NONE FOUND + 000002' 261140 000006 00350 PUSH PDP,DEVDAT ;SAVE TTY DDB ADDRESS + 000003' 260140 000000* 00360 PUSHJ PDP, CTEXT ;RETURN COMMAND NAME IN TAC1 + 000004' 322100 000043' 00370 JUMPE TAC1, COM2A ;IGNORE BLANK LINE + 000005' 205500 777760 00380 MOVSI T, -DISPL ;SEARCH FOR COMMAND NAME + 000006' 312112 000074' 00390 CAME TAC1, COMTAB(T) + 000007' 253500 000006' 00400 AOBJN T, .-1 + 000010' 325500 000047' 00410 JUMPGE T,COM2B ;WAS COMMAND FOUND? + 000011' 200112 000114' 00420 MOVE TAC1,DISP(T) ;YES, GET DISPATCH ADDRESS AND BITS + 000012' 326200 000026' 00430 JUMPN ITEM, COM1 ;HAS A JOB NUMBER BEEN ASSIGNED + 000013' 603100 200000 00440 TLNE TAC1,NOJOBN ;NO, IS A JOB NUMBER NEEDED FOR THIS CO + 000014' 254000 000026' 00450 JRST COM1 ;NO + 000015' 260140 000000* 00460 PUSHJ PDP,ASSJOB ;TRY TO ASSIGN A FREE JOB NUMBER + 000016' 254000 000067' 00470 JRST COM3A ;NONE AVAILABLE, ERROR MESSAGE + COMINI - THE COMMAND DECODER PAGE 3 + T. HASTINGS 8-2-65 + + + 000017' 261140 000001 00500 PUSH PDP, TAC ;SAVE INPUT BYTE POINTER + 000020' 261140 000002 00510 PUSH PDP,TAC1 ;SAVE ADDRESS OF COMMAND ROUTINE + 000021' 403340 000011 00520 SETZB PROG,JDAT ;NO CORE, CLEAR REL. ADRESS + 000022' 260140 000000* 00530 PUSHJ PDP,JOBINI ;INITIALIZE JOB + 000023' 262140 000002 00540 POP PDP,TAC1 ;RESTORE ADR OF COMMAND ROUTINE + 000024' 262140 000001 00550 POP PDP, TAC ;RESTORE INPUT BYTE POINTER + 000025' 202303 000000 00560 MOVEM DEVDAT,(PDP) ;SET ADDRESS OF TTY DEV. DATA BLOCK + 000026' 550444 000000* 00570 COM1: HRRZ JDAT, JBTADR(ITEM) ;AND JOB DATA AREA + 000027' 336340 000011 00580 SKIPN PROG,JDAT ;SET PROG. DOES JOB HAVE CORE? + 000030' 603100 400000 00590 TLNE TAC1,NOCORE ;NO. IS CORE NEEDED FOR THIS COMMAND? + 000031' 254000 000035' 00600 JRST COM1C ;NO + 000032' 201040 000051' 00610 MOVEI TAC,NOCOR ;YES, PRINT "NO CORE ASSIGNED" + 000033' 260140 000000* 00620 COM1B: PUSHJ PDP,CONMES + 000034' 254000 000036' 00630 JRST COM1A + + 000035' 260142 000000 00650 COM1C: PUSHJ PDP,(TAC1) ;DISPATCH TO COMMAND SETUP ROUTINE + 000036' 326200 000055' 00660 COM1A: JUMPN ITEM, COM3 ;ADD CR-LF AND CHECK FOR JOB INIT. + 000037' 262140 000006 00670 COM1D: POP PDP,DEVDAT ;RESTORE TTY DDB ADDRESS + 000040' 260140 000000* 00680 PUSHJ PDP, TTYSTR ;START OUTPUT, IF ANY + 000041' 370000 000000* 00690 COM2: SOS COMCNT ;DECREMENT COMMAND COUNT + 000042' 263140 000000 00700 POPJ PDP, ;EXIT + + 000043' 135100 000001 00720 COM2A: LDB TAC1, TAC ;NULL FIELD. WAS BREAK CHAR. A CR? + 000044' 302100 000015 00730 CAIE TAC1,15 ;A CR? + 000045' 306100 000073 00740 CAIN TAC1,";" ;OR A SEMI COLON? + 000046' 254000 000037' 00750 JRST COM1D ;YES. IGNORE LINE + 000047' 260140 000000* 00760 COM2B: PUSHJ PDP,COMERR ;NO. PRINT MONITOR COMMAND ERROR + 000050' 254000 000037' 00770 JRST COM1D + + 000051' 472364 041636 00790 NOCOR: ASCIZ /NO CORE ASSIGNED + 000052' 512124 040646 + 000053' 516230 747212 + 000054' 420321 200000 00800 / + + 000055' 200044 000000* 00820 COM3: MOVE TAC,JBTSTS(ITEM) ;GET STATUS WORD + 000056' 663040 004000 00830 TLOE TAC,JNA ;IS JOB NO ASSIGNED BIT ON YET + 000057' 254000 000067' 00840 JRST COM3A ;YES, JOB INIT. BEFORE + 000060' 202044 000055* 00850 MOVEM TAC,JBTSTS(ITEM) + 000061' 201040 000134' 00860 MOVEI TAC,[ASCIZ /JOB /] + 000062' 260140 000033* 00870 PUSHJ PDP,CONMES ;PRINT JOB N INITIALIZED + 000063' 200040 000004 00880 MOVE TAC,ITEM + 000064' 260140 000000* 00890 PUSHJ PDP,RADX10 ;PRINT JOB NUMBER + 000065' 201040 000071' 00900 MOVEI TAC,JOBM + 000066' 260140 000062* 00910 PUSHJ PDP,CONMES + 000067' 260140 000000* 00920 COM3A: PUSHJ PDP,CRLF + 000070' 254000 000037' 00930 JRST COM1D + + 000071' 202231 644650 00950 JOBM: ASCIZ / INITIALIZED + 000072' 446031 444664 + 000073' 426101 505000 00960 / + COMINI - THE COMMAND DECODER PAGE 4 + T. HASTINGS 8-2-65 + + + 00990 ;TABLE OF CONSOLE COMMANDS. + + 400000 01010 NOCORE=400000 ;NO CORE NEEDED FOR COMMAND + 200000 01020 NOJOBN=200000 ;NO JOB NUMBER NEEDED FOR COMMAND + + 01040 DEFINE NAMES + 01050 <REPEAT 0,< + 01060 C G,COMERR,0 + 01070 > + 01080 C CORE,CORE,NOCORE + 01090 C GET,GET,0 + 01100 C START,START,0 + 01110 C IJOB,IJOB,NOCORE+NOJOBN + 01120 C PJOB,PJOB,NOCORE + 01130 C KJOB,KJOB,NOCORE + 01140 C SAVE,SAVE,0 + 01150 REPEAT 0,< + 01160 C RESAVE,COMERR,0 + 01170 > + 01180 C CONT,CONT,0 + 01190 C DDT,DDTGO,0 + 01200 C ASSIGN,ASSIGN,NOCORE + 01210 C DEASSI,DEASSIGN,NOCORE + 01220 C STARTC,STARTC,0 + 01230 C CONTC,CONTC,0 + 01240 C DETACH,DETACH,NOCORE+NOJOBN + 01250 C ATTACH,ATTACH,NOCORE+NOJOBN + 01260 REPEAT 0,< + 01270 C MTAPE,COMERR,0 + 01280 C DAYTIM,COMERR,NOCORE + 01290 C RUNTIM,COMERR,NOCORE + 01300 C TOTTIM,COMERR,NOCORE + 01310 C NULTIM,COMERR,NOCRE + 01320 C SYSDDT,COMERR,NOCORE + 01330 C SYSMAK,SYSMAK,0 + 01340 > + 01350 C DIGITAL,DIGITAL,NOCORE+NOJOBN + 01360 > + COMINI - THE COMMAND DECODER PAGE 5 + T. HASTINGS 8-2-65 + + + 01390 ;GENERATE TABLE OF SIXBIT COMMAND NAMES + + 01410 DEFINE C(A,B,C) + 01420 < ZZ=.+1 + 01430 SIXBIT /A/ + 01440 IFN .-ZZ,<RELOC ZZ> ;ONLY FIRST 6 CHARACTERS + 01450 > + + 01470 COMTAB: NAMES^REPEAT 0,< + C G,COMERR,0 + > + 000074' 435762 450000 SIXBIT /CORE/ + 000075' 474564 000000 SIXBIT /GET/ + 000076' 636441 626400 SIXBIT /START/ + 000077' 515257 420000 SIXBIT /IJOB/ + 000100' 605257 420000 SIXBIT /PJOB/ + 000101' 535257 420000 SIXBIT /KJOB/ + 000102' 634166 450000 SIXBIT /SAVE/ + 000103' 435756 640000 SIXBIT /CONT/ + 000104' 444464 000000 SIXBIT /DDT/ + 000105' 416363 514756 SIXBIT /ASSIGN/ + 000106' 444541 636351 SIXBIT /DEASSI/ + 000107' 636441 626443 SIXBIT /STARTC/ + 000110' 435756 644300 SIXBIT /CONTC/ + 000111' 444564 414350 SIXBIT /DETACH/ + 000112' 416464 414350 SIXBIT /ATTACH/ + 000113' 445147 516441 SIXBIT /DIGITAL/ + 000114' 540000 000000 + 000020 01480 DISPL=.-COMTAB ;LENTH OF TABLE + COMINI - THE COMMAND DECODER PAGE 6 + T. HASTINGS 8-2-65 + + + 01510 ;GENERATE THE DISPATCH TABLE + + 01530 DEFINE C(A,B,C) + 01540 < XWD C,B + 01550 EXTERNAL B + 01560 > + + 01580 DISP: NAMES^REPEAT 0,< + C G,COMERR,0 + > + 000114' 400000 000000* C CORE,CORE,NOCORE^ XWD NOCORE,CORE + 000115' 000000 000000* C GET,GET,0^ XWD 0,GET + 000116' 000000 000000* C START,START,0^ XWD 0,START + 000117' 600000 000000* C IJOB,IJOB,NOCORE+NOJOBN^ XWD NOCORE+NOJOBN,IJOB + 000120' 400000 000000* C PJOB,PJOB,NOCORE^ XWD NOCORE,PJOB + 000121' 400000 000000* C KJOB,KJOB,NOCORE^ XWD NOCORE,KJOB + 000122' 000000 000000* C SAVE,SAVE,0^ XWD 0,SAVE + 000123' 000000 000000* C CONT,CONT,0^ XWD 0,CONT + 000124' 000000 000000* C DDT,DDTGO,0^ XWD 0,DDTGO + 000125' 400000 000000* C ASSIGN,ASSIGN,NOCORE^ XWD NOCORE,ASSIGN + 000126' 400000 000000* C DEASSI,DEASSIGN,NOCORE^ XWD NOCORE,DEASSIGN + 000127' 000000 000000* C STARTC,STARTC,0^ XWD 0,STARTC + 000130' 000000 000000* C CONTC,CONTC,0^ XWD 0,CONTC + 000131' 600000 000000* C DETACH,DETACH,NOCORE+NOJOBN^ XWD NOCORE+NOJOBN,DETACH + 000132' 600000 000000* C ATTACH,ATTACH,NOCORE+NOJOBN^ XWD NOCORE+NOJOBN,ATTACH + 000133' 600000 000000* C DIGITAL,DIGITAL,NOCORE+NOJOBN^ XWD NOCORE+NOJOBN,DIGITAL + + 01600 END, + 000134' 452370 220000 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000135 + +9K CORE USED + COMINI - THE COMMAND DECODER PAGE 7 + SYMBOL TABLE + + 000241 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ASSCON 400000 INT +ASSIGN 000125' EXT +ASSJOB 000015' EXT +ASSPRG 200000 INT +ATTACH 000132' EXT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +COM1 000026' +COM1A 000036' +COM1B 000033' +COM1C 000035' +COM1D 000037' +COM2 000041' +COM2A 000043' +COM2B 000047' +COM3 000055' +COM3A 000067' +COMCNT 000041' EXT +COMERR 000047' EXT +COMMAN 000000' INT +COMTAB 000074' +CONMES 000066' EXT +CONT 000123' EXT +CONTC 000130' EXT +CORE 000114' EXT +CRLF 000067' EXT +CTEXT 000003' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTGO 000124' EXT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEASSI 000126' EXT +DEN 000004 INT +DETACH 000131' EXT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT + COMINI - THE COMMAND DECODER PAGE 7-1 + SYMBOL TABLE + +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIGITA 000133' EXT +DIN 000003 INT +DISP 000114' +DISPL 000020 +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +GET 000115' EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +IJOB 000117' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT + COMINI - THE COMMAND DECODER PAGE 7-2 + SYMBOL TABLE + +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000026' EXT +JBTSTS 000060' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOBINI 000022' EXT +JOBM 000071' +KJOB 000121' EXT +LOOKB 040000 INT +MTW 010000 INT +NOCOR 000051' +NOCORE 400000 +NOJOBN 200000 +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PJOB 000120' EXT +PROG 000007 INT +RADX10 000064' EXT +RUN 200000 INT +RUNABL 204000 INT +SAVE 000122' EXT +START 000116' EXT +STARTC 000127' EXT +T 000012 +T1 000013 +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYCOM 000000' EXT +TTYSTR 000040' EXT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT +ZZ 000114' + CCCCCCCCCCCC OOOOOOOOO RRRRRRRRRRRR EEEEEEEEEEEEEEE + CCCCCCCCCCCC OOOOOOOOO RRRRRRRRRRRR EEEEEEEEEEEEEEE + CCCCCCCCCCCC OOOOOOOOO RRRRRRRRRRRR EEEEEEEEEEEEEEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRRRRRRRRRRR EEEEEEEEEEEE +CCC OOO OOO RRRRRRRRRRRR EEEEEEEEEEEE +CCC OOO OOO RRRRRRRRRRRR EEEEEEEEEEEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE +CCC OOO OOO RRR RRR EEE + CCCCCCCCCCCC OOOOOOOOO RRR RRR EEEEEEEEEEEEEEE + CCCCCCCCCCCC OOOOOOOOO RRR RRR EEEEEEEEEEEEEEE + CCCCCCCCCCCC OOOOOOOOO RRR RRR EEEEEEEEEEEEEEE + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :CORE .LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:19 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2564 +File will be deleted after printing + CORE - CORE ALLOCATION ROUTINE PAGE 1 + G. BELL 6-29-65 + + 00010 XLIST + 01930 LIST + CORE - CORE ALLOCATION ROUTINE PAGE 7 + G. BELL 6-29-65 + + + 00010 TITLE CORE - CORE ALLOCATION ROUTINE + 00020 SUBTTL G. BELL 6-29-65 + 00030 ; PUSHJ PDP, CORE1 ;ITEM = JOB #. TAC = 1K CORE BLOCKS + 00040 ;REQUESTED + 00050 ; RET1 ;OLD CORE RETURNED. + 00060 ; RET2 ;OLD CORE RETURNED. JBTADR, JOBREL ARE + 00070 ;SET UP + 00080 ; JBADR (ITEM) = POINTER TO JOB AREA. JOBREL (JBTADR) = HIGHEST LOCAT + 00090 ; C(RH) JBTADR IS SET OT 0 OR REQUESTED CORE. JOBREL IS SET IF CORE G + 00100 ; NOT A PURE PROCEDURE ... + 00110 ;CORTAL: 0 ;COUNT OF FREE CORE + 00120 ;CORTAB: BLOCK ^D3 ;TABLE OF 72 BITS. 1 BIT FOR + 00130 ;1K OF CORE. 1 = USED. 0 = FREE + 00140 ;CORLST: POINT 1, CORTAB, 32 ;POINTER FIRST OUT OF BOUNDS + 00150 ; + 00160 ;TEMPORARY USAGE + 000000' 000000 000000 00170 CORUSZ: 0 ;SIZE OF USERS CODE, OLD.-NEW + 000001' 000000 000000 00180 CORLOC: 0 ;POSITION OF 1ST FREE BLOCK + 00190 ; + 00200 ;AC ASSIGNMENTS + 000012 00210 COR1=BUFPNT + 000013 00220 COR2=BUFWRD + 000014 00230 COR3=UUO + 00240 INTERNAL CORE1 + 00250 EXTERNAL JBTADR,JOBREL,CORLST,CORTAL,CORTAB + CORE - CORE ALLOCATION ROUTINE PAGE 2 + G. BELL 6-29-65 + + + 000002' 135500 000042' 00280 CORE1: LDB COR1, CORE1P + 000003' 202500 000001' 00290 MOVEM COR1, CORLOC + 000004' 322500 000013' 00300 JUMPE COR1, CORGET ;IF 0 NO CORE NOEW. + 000005' 554504 000000* 00310 HLRZ COR1, JBTADR(ITEM) ;CLEAR OLD CORE + 000006' 350000 000012 00320 AOS COR1 ;HIGHEST ADDRESS AVAIL. FORM + 000007' 240500 777766 00330 ASH COR1, -^D10 + 000010' 202500 000000' 00340 MOVEM COR1, CORUSZ + 000011' 402000 000014 00350 CORRET: CLEARM COR3 ;RETURN OLD CORE + 000012' 260140 000056' 00360 PUSHJ PDP, CORSTG + 000013' 402004 000005* 00370 CORGET: SETZM JBTADR(ITEM) ;CLEAR JOB ADDRESS TO 0 + 000014' 322040 000037' 00380 JUMPE TAC, COROK ;IF NO CORE TO GET, RETURN + 000015' 200600 000043' 00390 MOVE COR3, CORE2P ;SET UP FOR + 000016' 476000 000001' 00400 SETOM CORLOC ;HOLE SEARCH + 000017' 260140 000044' 00410 CORG1: PUSHJ PDP, CORHOL + 000020' 254000 000040' 00420 JRST CORNG ;UNSUCCESSFUL SEARCH + 000021' 315500 000001 00430 CAMGE COR1, TAC ;HOLE FOUND + 000022' 254000 000017' 00440 JRST CORG1 + 000023' 213000 000012 00450 CORGVE: MOVNS COR1 ;BACKUP CORLOC + 000024' 272500 000001' 00460 ADDM COR1, CORLOC + 000025' 202040 000000' 00470 MOVEM TAC, CORUSZ ;RESERVE HOLD FOR JOB + 000026' 201600 000001 00480 MOVEI COR3, 1 ;SET CORTAB + 000027' 260140 000056' 00490 PUSHJ PDP, CORSTG + 000030' 200500 000001' 00500 MOVE COR1, CORLOC ;C(RH)=RELOC, C(LH)=PROTECT + 000031' 240500 000012 00510 ASH COR1, ^D10 + 000032' 542504 000013* 00520 HRRM COR1, JBTADR(ITEM) + 000033' 240040 000012 00530 ASH TAC, ^D10 + 000034' 275040 000001 00540 SUBI TAC, 1 + 000035' 542052 000000* 00550 HRRM TAC, JOBREL (COR1) + 000036' 506044 000032* 00560 HRLM TAC,JBTADR(ITEM) + 000037' 350003 000000 00570 COROK: AOS (PDP) + 000040' 200040 000000* 00580 CORNG: MOVE TAC, CORTAL + 000041' 263140 000000 00590 POPJ PDP, + + 000042' 121004 000036* 00610 CORE1P: POINT 8, JBTADRR(ITEM),25 + 000043' 440100 000000* 00620 CORE2P: POINT 1, CORTAB + CORE - CORE ALLOCATION ROUTINE PAGE 3 + G. BELL 6-29-65 + + + 00650 ; PUSHJ PDP, CORHOL ;COR1-HOLES FREE, COR2=TEMP + 00660 ; RETURN1 ;COR3=POINTER. RETURN1=END OF STRING RE + 00670 ; RETURN2 ;HOLE FOUND. + 00680 ; CORLOC CONTAINS 0,1.. N, THE CORE BLK PTR. CORLST IS PTR TO + 00690 ; STOP STRING TEST + 000044' 402000 000012 00700 CORHOL: CLEARM COR1 + 000045' 316600 000000* 00710 CORH01: CAMN COR3, CORLST ;TEST DONE + 000046' 263140 000000 00720 POPJ PDP, + 000047' 134540 000014 00730 ILDB COR2, COR3 ;TEST NEXT BLOCK + 000050' 350000 000001' 00740 AOS CORLOC + 000051' 336000 000013 00750 SKIPN COR2 + 000052' 344500 000045' 00760 AOJA COR1, CORH01 ;COUNT FREE + 000053' 322500 000045' 00770 JUMPE COR1, CORH01 + 000054' 350003 000000 00780 AOS (PDP) + 000055' 263140 000000 00790 POPJ PDP, + 00800 ;; PUSHJ PDP, CORSTG ;CORUSZ=SIZE RESERVED. CORLOC=LOCATION + 00810 ; IF COR3=0, THEN FREE CORE + 00820 ; IF COR3=1, THEN RESERVE CORE. + 00830 ; USES COR1, COR2, COR3 + 00840 ; CORTAL=COUNT OF FREE CORE. AND IS UPDATED + 000056' 261140 000001 00850 CORSTG: PUSH PDP, TAC ;SAVE NO. OF BLOCKS BEING REQ + 000057' 200540 000000' 00860 MOVE COR2,CORUSZ ;FIX CORTALLY + 000060' 332000 000014 00870 SKIPE COR3 + 000061' 213000 000013 00880 MOVNS COR2 + 000062' 272540 000040* 00890 ADDM COR2, CORTAL + 000063' 200040 000001' 00900 MOVE TAC, CORLOC ;GET POINTER-1 + 000064' 231040 000044 00910 IDIVI TAC, ^D36 ;TAC=WORD,TAC1=BIT + 000065' 270040 000076' 00920 ADD TAC, CORLP1 ;FORM BYTE POINTER + 000066' 213000 000002 00930 MOVNS TAC1 + 000067' 271100 000044 00940 ADDI TAC1, ^D36 + 000070' 137100 000077' 00950 DPB TAC1, [POINT 6, TAC, 5] + 000071' 200540 000000' 00960 MOVE COR2, CORUSZ + 000072' 136600 000001 00970 CORLOP: DPBI COR3, TAC ;SET OR CLEAR EACH BIT IN USE + 000073' 367540 000072' 00980 SOJG COR2, CORLOP + 000074' 262140 000001 00990 POP PDP, TAC + 000075' 263140 000000 01000 POPJ PDP, + + 000076' 000100 000043* 01020 CORLP1: XWD 100, CORTAB + + 01040 END, + 000077' 360600 000001 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000100 + +8K CORE USED + CORE - CORE ALLOCATION ROUTINE PAGE 4 + SYMBOL TABLE + + 000206 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +COR1 000012 +COR2 000013 +COR3 000014 +CORE1 000002' INT +CORE1P 000042' +CORE2P 000043' +CORG1 000017' +CORGET 000013' +CORGVE 000023' +CORH01 000045' +CORHOL 000044' +CORLOC 000001' +CORLOP 000072' +CORLP1 000076' +CORLST 000045' EXT +CORNG 000040' +COROK 000037' +CORRET 000011' +CORSTG 000056' +CORTAB 000076' EXT +CORTAL 000062' EXT +CORUSZ 000000' +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT + CORE - CORE ALLOCATION ROUTINE PAGE 4-1 + SYMBOL TABLE + +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT + CORE - CORE ALLOCATION ROUTINE PAGE 4-2 + SYMBOL TABLE + +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000042' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOBREL 000035' EXT +LOOKB 040000 INT +MTW 010000 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PROG 000007 INT +RUN 200000 INT +RUNABL 204000 INT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT + DDDDDDDDDDDD TTTTTTTTTTTTTTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR 222222222 +DDDDDDDDDDDD TTTTTTTTTTTTTTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR 222222222 +DDDDDDDDDDDD TTTTTTTTTTTTTTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR 222222222 +DDD DDD TTT SSS EEE RRR RRR 222 222 +DDD DDD TTT SSS EEE RRR RRR 222 222 +DDD DDD TTT SSS EEE RRR RRR 222 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR 222 +DDD DDD TTT SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR 222 +DDD DDD TTT SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDD DDD TTT SSS EEE RRR RRR 222 +DDDDDDDDDDDD TTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR 222222222222222 +DDDDDDDDDDDD TTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR 222222222222222 +DDDDDDDDDDDD TTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR 222222222222222 + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :DTSER2.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:20 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2557 +File will be deleted after printing + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 1 + L. HANTMANN 8-2-65 MULTIPLE DIRECTORIES VERSION + + 00010 XLIST + 01930 LIST + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 7 + L. HANTMANN 8-2-65 MULTIPLE DIRECTORIES VERSION + + + 00010 TITLE DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING + 00020 SUBTTL L. HANTMANN 8-2-65 MULTIPLE DIRECTORIES VERSION + 000001 00030 DTSIZ=1 + + 00050 ;SUBROUTINE FOR DIRECTORY SEARCH + 00060 ;PROG CONTAINS ACTUAL START OF PROGRAM + 00070 ;DEVDAT CONTAINS ACTUAL START OF DVDB + 00080 ;UUO CONTAINS RELATIVE ADDRESS OF DIRECTORY ENTRY IN USER AREA + 00090 ;FORMAT PUSHJ PDP, UDIRSH + 00100 ; JRST X ;RETURN IF EMPTY ENTRY FOUND + 00110 ; NORMAL RETURN WHEN ENTRY IS FOUND + 00120 INTERNAL ULOOK, UENTER + 00130 EXTERNAL UXIT,PUUOAC,IOIERR,DIRERR,ADRCK,CPOPJ1,THSDAT + 000004 00140 UDIRLN=4 + 000100 00150 UDIRIN=100 ;DIRECTORY IN + 000200 00160 UDIREN=200 ;DIRECTORY ENTERED INTO + 000400 00170 UNWFRE=400 ;FREE BLCOK POINTER CHANGED + 001000 00180 ULINKF=1000 ;LAST OUTPUT BLOCK LINKED TO STORAGE + 000001 00190 UX1=TAC + 000002 00200 UX2=TAC1 + 000005 00210 UX3=DAT + 000000' 602600 777760 00220 UDIRSH: TRNE UUO,777760 ;IS BLOCK IN UUO ACS? + 000001' 260140 000000* 00230 PUSHJ PDP,ADRCK ;NO. CHECK ADDRESS + 000002' 201054 000003 00240 MOVEI TAC,3(UUO) + 000003' 603000 000002 00250 TLNE IOS,IOBEG + 000004' 260140 000343' 00260 PUSHJ PDP, UBEG + 000005' 550040 000007 00270 HRRZ UX1, PROG ;COPY ADR OF START OF PROGRAM + 000006' 272040 000014 00280 ADDM UX1, UUO ;ACTUAL START OF DIR. IN USER + 000007' 201066 000000* 00290 MOVEI UX1,@UDIR(DEVDAT) ;ACTUAL POINTER TO DIRECTORY + 000010' 550101 000000 00300 HRRZ UX2, 0(UX1) ;RELATIVE ADDR OF 1ST ENTRY I + 00310 ;DIRECTORY + 000011' 505042 777603 00320 HRLI UX1, -^D129+UDIRLN(UX2) ;ENTRY COUNTER + 000012' 272100 000001 00330 ADDM UX2, UX1 ;START OF 1ST ENTRY IN DIRECT + 000013' 332000 000002 00340 SKIPE UX2 + 000014' 303100 000174 00350 CAILE UX2,174 ;IS THE REL ADR OF 1ST ENTRY INSIDE BUF + 000015' 254000 000000* 00360 JRST DIRERR ;NO + 000016' 336101 000000 00370 UDIR2: SKIPN UX2, 0 (UX1) ;FIRST WORD OF ENTRY + 000017' 263140 000000 00380 POPJ PDP, ;SPACES FOUND + 000020' 316114 000000 00390 CAMN UX2, 0(UUO) ;CHECK IF = TO USER AREA + 000021' 254000 000026' 00400 JRST UDIR4 ;CHECK 2ND WORD + 000022' 270040 000034' 00410 UDIR3: ADD UX1, UDIRK1 + 000023' 321040 000016' 00420 JUMPL UX1, UDIR2 + 000024' 262140 000001 00430 POP PDP, UX1 ;TAKE PREVIOUS EXIT FROM TABL + 000025' 254000 000000* 00440 JRST UXIT ;TABLE FULL + 000026' 554114 000001 00450 UDIR4: HLRZ UX2, 1 (UUO) ;2ND WORD IN USER ARE + 000027' 322100 000000* 00460 JUMPE UX2, CPOPJ1 + 000030' 554241 000001 00470 HLRZ UX3, 1 (UX1) ;2ND WORD OF DIRECTORY AREA + 000031' 302242 000000 00480 CAIE UX3, 0 (UX2) + 000032' 254000 000022' 00490 JRST UDIR3 ;CHECK MORE ENTRIES + 000033' 254000 000027* 00500 JRST CPOPJ1 ;MATCH, SKIP RETURN + + 000034' 000004 000004 00520 UDIRK1: XWD UDIRLN, UDIRLN + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 2 + L. HANTMANN 8-2-65 MULTIPLE DIRECTORIES VERSION + + + 00550 ;SUBROUTINE FOR DIRECTORY LOOKUP + + 00570 ;FORMAT PUSHJ PDP, UDIRLU ;VIA UUO + 00580 ; JRST X ;ENTRY NOT IN TABLE + + 000035' 260140 000000' 00600 ULOOK: PUSHJ PDP, UDIRSH + 000036' 254000 000025* 00610 JRST UXIT + 000037' 540241 000001 00620 HRR UX3, 1 (UX1) + 000040' 506246 000007 00630 HRLM UX3, DEVIAD (DEVDAT) + 000041' 505101 000000 00640 ULOOK1: HRLI UX2, 0 (UX1) ;FROM DIRECTORY + 000042' 541114 000000 00650 HRRI UX2, 0 (UUO) ;TO USER + 000043' 251114 000003 00660 BLT UX2, UDIRLN-1(UUO) + 000044' 135100 001272' 00670 LDB UX2,[POINT 12,2(UX1),35] ;GET DATE USER(ENTER)EXEC(LOO + 000045' 326100 000050' 00680 JUMPN UX2,.+3 ;IS IT 0? + 000046' 200100 000000* 00690 MOVE UX2,THSDAT ;YES, USE CURRENT DATE + 000047' 137100 001273' 00700 DPB UX2,[POINT 12,2(UUO),35] ;SET EXEC + 000050' 350003 000000 00710 AOS (PDP) + 000051' 254000 000311' 00720 JRST UTWDR + + 00740 ;SUBROUTINE TO ENTER NEW OR CHANGE OLD DIRECTORY ENTRY + 00750 ;FORMAT PUSHJ PDP, UDIRCH + 00760 ; JRST X ;NO ROOM IN TABLE + + 000052' 260140 000000' 00780 UENTER: PUSHJ PDP, UDIRSH + 000053' 254000 000054' 00790 JRST .+1 + 000054' 350246 000000* 00800 AOS UX3, UFREE (DEVDAT) + 000055' 542254 000001 00810 HRRM UX3,1(UUO) + 000056' 506246 000010 00820 HRLM UX3, DEVOAD (DEVDAT) + 000057' 250040 000014 00830 EXCH UX1, UUO + 000060' 661000 001600 00840 TLO IOS, UDIREN+UNWFRE+ULINKF + 000061' 202006 000002 00850 MOVEM IOS, DEVIOS(DEVDAT) + 000062' 254000 000041' 00860 JRST ULOOK1 + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 3 + L. HANTMANN 8-2-65 MULTIPLE DIRECTORIES VERSION + + + 00890 ;CREATE A CLEAN TAPE AND DIRECTORY + + 00910 INTERNAL UTPCLR + 00920 EXTERNAL USRJDA + + 000063' 135040 000000* 00940 UTPCLR: LDB TAC,PUUOAC + 000064' 200301 000000* 00950 MOVE DEVDAT,USRJDA(TAC) + 000065' 322300 000000* 00960 JUMPE DEVDAT,IOIERR + 000066' 554046 000000 00970 HLRZ TAC,DEVNAM(DEVDAT) + 000067' 302040 446441 00980 CAIE TAC,446441 + 000070' 254000 000036* 00990 JRST UXIT ;NOT DTA + 000071' 200006 000002 01000 MOVE IOS,DEVIOS(DEVDAT) + 000072' 621000 000002 01010 TLZ IOS,IOBEG + 000073' 661000 000700 01020 TLO IOS,UDIRIN+UDIREN+UNWFRE + 01030 IFE DTSIZ,< MOVEM DEVDAT,DIREC> + 01040 ;THIS FOR SINGLE DIRECTORY ONLY + 000074' 200046 000007* 01050 MOVE TAC,UDIR(DEVDAT) + 000075' 200100 001274' 01060 MOVE TAC1,[XWD 1,5] + 000076' 202101 000000 01070 MOVEM TAC1,(TAC) + 000077' 507000 000001 01080 HRLS TAC + 000100' 253040 000101' 01090 AOBJN TAC,.+1 + 000101' 402001 000000 01100 SETZM (TAC) + 000102' 200100 000001 01110 MOVE TAC1,TAC + 000103' 350000 000001 01120 AOS TAC + 000104' 251042 000176 01130 BLT TAC,176(TAC1) + 000105' 201040 000001 01140 MOVEI TAC, 1 + 000106' 202046 000054* 01150 MOVEM TAC, UFREE (DEVDAT) + 000107' 202006 000002 01160 MOVEM IOS, DEVIOS(DEVDAT) + 000110' 260140 000326' 01170 PUSHJ PDP,UTPREL + 000111' 254000 000070* 01180 JRST UXIT + + + 01210 ;END OF DTDR + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 4 + L. HANTMANN 8-2-65 MULTIPLE DIRECTORIES VERSION + + + 01240 SUBTTL L. HANTMAN PART 1 7-13-65 + 010000 01250 UREV=10000 ;DT REVERSE BIT + 000001 01260 DTSIZ=1 ;1 FOR ONE BUFFER PER TAPE UNIT + + 000001 01280 UBLK=1 ;NUMBER OF BLOCKS/BLOCK + 000001 01290 UCHN=1 ;CHANNEL OF DATA CONTROL = 1, LOC 42 + 000042 01300 UCHA=42 ;DATA CONTROL INTERRUPT POSITION + 01310 EXTERNAL UXIT,ADVBFF,ADVBFE,IOSET,OUT,WAIT1,WSYNC + 01320 EXTERNAL PIOMOD,PUNIT,UFREE,UDIR,ADRERR,JOBPFI + 01330 ENTRY UTDSP + + 004010 01350 DACI=4010 ;DC INPUT DT + 003410 01360 DACO=3410 ;DC OUTPUT DT + 220000 01370 SL=220000 ;DT TURN ON. SELECT + 003000 01380 DTR=3000 ;DT TURN AROUND DELAY + 002000 01390 DT=2000 ;DT START/STOP DELAY + 000300 01400 RD=300 ;DT RD + 000700 01410 WD=700 ;DT WR + 000200 01420 RB=200 ;DT READ BLOCK NOS. + 000002 01430 VEOT=2 ;EOT FLAG BIT + 010000 01440 GR=10000 ;DT REVERSE BIT + 040000 01450 JDE=40000 ;JOB DONE ENABLE + 100000 01460 EE=100000 ;ENABLE END FLAG + 002000 01470 URDIR=2000 ;READING DIRECTORY + + 000112' 254000 000326' 01490 UTDSP: JRST UTPREL ;RELEASE + 000113' 254000 000312' 01500 JRST UTPCLS ;CLOSE + 000114' 254000 000125' 01510 JRST UOUT ;OUTPUT + 000115' 254000 000204' 01520 JRST UIN ;INPUT + 000116' 254000 000052' 01530 JRST UENTER ;ENTER IN DIRECTORY + 000117' 254000 000035' 01540 JRST ULOOK ;LOOKUP IN DIRECTORY + 000120' 254000 000633' 01550 JRST UDMPO ;DUMPOUT + 000121' 254000 001022' 01560 JRST UDMPI ;DUMPIN + 000122' 254000 000272' 01570 JRST SETO ;SET OUTPUT BLOCK NO. + 000123' 254000 000267' 01580 JRST SETI ;SET INPUT BLOCK NO. + 000124' 254000 000277' 01590 JRST GETF ;GET FREE BLOCK + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 5 + L. HANTMAN PART 1 7-13-65 + + + 000125' 260140 001142' 01620 UOUT: PUSHJ PDP, UINTER ;CHECK INTERLOCK + 000126' 661000 000020 01630 TLO IOS, IO ;WRITING + 000127' 550046 000010 01640 HRRZ TAC,DEVOAD(DEVDAT) + 000130' 270040 000007 01650 ADD TAC, PROG ;ACTUAL BUFFER ADDRESS + 000131' 554106 000010 01660 HLRZ TAC1, DEVOAD(DEVDAT) ;BLOCK TO WRITE + 000132' 306100 000001 01670 CAIN TAC1,1 + 000133' 254000 000171' 01680 JRST UOUT4 ;COPY DIRECTORY + 000134' 554101 000001 01690 HLRZ TAC1, 1(TAC) ;BLOCK TIE + 000135' 621000 001000 01700 TLZ IOS, ULINKF ;NOT LINKED TO FREE STORAGE + 000136' 326100 000144' 01710 JUMPN TAC1, UOUT1 ;USE BALOCK NUMBER INDICATED + 000137' 623000 000002 01720 TLZE IOS, IOBEG ;GET FREE STORAGE BLOCK + 000140' 260140 000370' 01730 PUSHJ PDP, UBEG3 + 000141' 661000 001400 01740 TLO IOS,UNWFRE+ULINKF ;LINKED TO FREE STORAGE + 000142' 202006 000002 01750 MOVEM IOS, DEVIOS (DEVDAT) + 000143' 350106 000106* 01760 AOS TAC1,UFREE(DEVDAT) ;NEXT FREE BLOCK + 000144' 306100 000001 01770 UOUT1: CAIN TAC1,1 ;IF 1, THIS IS LAST BLOCK + 000145' 400100 000000 01780 SETZ TAC1, ;LAST BLOCK TIE = 0 + 000146' 506101 000001 01790 HRLM TAC1,1(TAC) ;BLOCK + 000147' 552040 001121' 01800 HRRZM TAC,UBUF ;ACTUAL LOCATION OF DATA + 000150' 544046 000010 01810 HLR TAC,DEVOAD(DEVDAT) + 000151' 506106 000010 01820 HRLM TAC1, DEVOAD(DEVDAT) ;NEXT BLOCK + 000152' 254000 000375' 01830 JRST USETW + 01840 ;RETURN FROM WRITING 1 BLOCK + + 000153' 200046 000010 01860 UOUT2: MOVE TAC,DEVOAD(DEVDAT) + 000154' 505040 000007 01870 HRLI TAC,PROG ;PROG, BUFFER ADDRESS + 000155' 515100 400000 01880 HRLZI TAC1,IOUSE + 000156' 412120 000001 01890 ANDCAM TAC1,@TAC ;SET USE BIT IN BUFFER + 000157' 554106 000010 01900 HLRZ TAC1,DEVOAD(DEVDAT) ;BLOCK TIE + 000160' 322100 000167' 01910 JUMPE TAC1,UOUT3 ;WAS BLOCK WRITTEN THE LAST 0 + 000161' 540060 000001 01920 HRR TAC,@TAC ;PROG, NEXT BUFFER ADDRESS + 000162' 542046 000010 01930 HRRM TAC,DEVOAD(DEVDAT) ;NEXT BUFFER + 000163' 602000 000040 01940 TRNE IOS, IOCON ;CONTINUOUS? + 000164' 254000 000167' 01950 JRST UOUT3 ;STOP TAPE AND DISMISS + 000165' 335020 000001 01960 SKIPGE @TAC ;IS NEXT BUFFER EMPTY? + 000166' 254000 000126' 01970 JRST UOUT+1 ;PROCESS NEXT BLOCK + 000167' 262140 000001 01980 UOUT3: POP PDP, TAC ;REDUCE TABLE + 000170' 254000 001220' 01990 JRST DTC1 ;STOP TAPE AND DISMISS + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 6 + L. HANTMAN PART 1 7-13-65 + + + 02020 ;COPY DIRECTORY WHEN WRITING BLOCK 1 + 000171' 505101 000001 02030 UOUT4: HRLI TAC1,1(TAC) ;BUFFER ADDRESS, FROM + 000172' 540106 000074* 02040 HRR TAC1, UDIR(DEVDAT) ;DIRECTORY ADDRESS, TO + 000173' 550046 000172* 02050 HRRZ TAC, UDIR(DEVDAT) ;DIRECTORY ADDRESS + 000174' 251101 000177 02060 BLT TAC1, 177(TAC) ;MORE BUFFER AREA TO DIRECTORY + 000175' 661000 000300 02070 TLO IOS, UDIRIN+UDIREN ;SET DIRECTORY BITS + 000176' 200126 000173* 02080 MOVE TAC1, @UDIR(DEVDAT) ;NEXT FREE BLOCK IN DIRECTORY + 000177' 556106 000143* 02090 HLRZM TAC1,UFREE(DEVDAT) ;PLACE IN DATA BLOCK + 000200' 515100 400000 02100 HRLZI TAC1, IOUSE + 000201' 413101 000000 02110 ANDCAB TAC1, 0(TAC) ;CLEAR USE BIT + 000202' 542106 000010 02120 HRRM TAC1, DEVOAD(DEVDAT) ;ADVANCE BUFFER POINTER + 000203' 254000 000242' 02130 JRST UEND2 + 02140 ,INPUT- NON DUMP + + 000204' 260140 001142' 02160 UIN: PUSHJ PDP, UINTER ;CHECK INTERLOCK + 000205' 621000 000020 02170 TLZ IOS, IO ;READING + 000206' 550046 000007 02180 HRRZ TAC,DEVIAD(DEVDAT) ;UBUF:=TAC:=DEVIAD+PROG + 000207' 270040 000007 02190 ADD TAC,PROG + 000210' 554106 000007 02200 HLRZ TAC1, DEVIAD(DEVDAT) ;BLOCK TO READ + 000211' 306100 000001 02210 CAIN TAC1, 1 ;TRYING TO READ DIRECTORY? + 000212' 254000 000251' 02220 JRST UIN2 ;COPY DIRECTORY + 000213' 552040 001121' 02230 HRRZM TAC,UBUF + 000214' 554046 000007 02240 HLRZ TAC,DEVIAD(DEVDAT) ;TAC:=C(DEVIAD LH) + 000215' 322040 000236' 02250 JUMPE TAC,UEND ;NEXT BLOCK=00, THEN END OF FI + 000216' 254000 000377' 02260 JRST USETR + 02270 ;RETURN FROM READING ONE BLOCK + + 000217' 550046 000007 02290 UIN1: HRRZ TAC,DEVIAD(DEVDAT) + 000220' 270040 000007 02300 ADD TAC,PROG + 000221' 554101 000001 02310 HLRZ TAC1,1(TAC) + 000222' 546106 000007 02320 HLRM TAC1,DEVIAD(DEVDAT) ;NEXT BLOCK NUMBER TO READ + 000223' 200046 000007 02330 MOVE TAC,DEVIAD(DEVDAT) + 000224' 505040 000007 02340 HRLI TAC,PROG + 000225' 515100 400000 02350 HRLZI TAC1,IOUSE + 000226' 436120 000001 02360 IORM TAC1,@TAC ;SET USE BIT + 000227' 540060 000001 02370 HRR TAC,@TAC + 000230' 542046 000007 02380 HRRM TAC,DEVIAD(DEVDAT) ;NEXT BUFFER ADDRESS + 000231' 602000 000040 02390 TRNE IOS, IOCON ;CONTINUOUS? + 000232' 254000 000167' 02400 JRST UOUT3 ;EXIT + 000233' 331020 000001 02410 SKIPL @TAC ;IS NEXT BUFFER FULL + 000234' 254000 000205' 02420 JRST UIN+1 ;PROCESS NEXT BLOCK + 000235' 254000 000167' 02430 JRST UOUT3 ;EXIT + + 000236' 661000 000040 02450 UEND: TLO IOS, IOEND + 000237' 202006 000002 02460 MOVEM IOS, DEVIOS(DEVDAT) + 000240' 721300 020000 02470 CONSZ UTC, 20000 ;IS TAPE STOPPED? + 000241' 254000 000167' 02480 JRST UOUT3 ;STOP TAPE AND EXIT + 000242' 371000 000000* 02490 UEND2: SOSL DCREQ ;DECREMENT REQUEST COUNT, IS ANY ONE WA + 000243' 476000 000000* 02500 SETOM DCAVAL ;YES,SET DATA CONTROL AVAILABLE + 000244' 371000 000000* 02510 SOSL DTREQ ;DECREMENT REQUEST COUNT, IS ANY ONE WA + 000245' 476000 000000* 02520 SETOM DTAVAL ;YES,SET DECTAPE CONTROL AVAI + 000246' 620000 010000 02530 TRZ IOS, IOACT ;CLEAR ACTIVE BIT + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 6-1 + L. HANTMAN PART 1 7-13-65 + + 000247' 202006 000002 02540 MOVEM IOS, DEVIOS(DEVDAT) ;RESTORE STATUS BITS + 000250' 263140 000000 02550 POPJ PDP, 0 ;EXIT + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 7 + L. HANTMAN PART 1 7-13-65 + + + 02580 ;COPY DIRECTORY WHEN READING BLOCK 1 + 000251' 623000 000002 02590 UIN2: TLZE IOS, IOBEG ;IS DIRECTORY IN + 000252' 254000 000265' 02600 JRST UIN4 ;READ IN DIRECTORY + 000253' 260140 000242' 02610 PUSHJ PDP, UEND2 ;CLR INDICATORS + 000254' 200106 000177* 02620 UIN3: MOVE TAC1,UFREE(DEVDAT) ;NEXT FREE BLOCK IN DATA BLOC + 000255' 506126 000176* 02630 HRLM TAC1, @UDIR(DEVDAT) ;PLACE IN DIRECTORY + 000256' 541101 000001 02640 HRRI TAC1, 1(TAC) ;BUFFER ADDRESS, TO + 000257' 504106 000255* 02650 HRL TAC1, UDIR(DEVDAT) ;DIRECTORY ADDRESS, TO + 000260' 251101 000200 02660 BLT TAC1, 200 (TAC) ;MOVE DIRECTORY TO BUFFER ARE + 000261' 515100 400000 02670 HRLZI TAC1, IOUSE + 000262' 437100 400000 02680 IORB TAC1, IOUSE ;SET USE BIT + 000263' 542106 000007 02690 HRRM TAC1,DEVIAD(DEVDAT) ;ADVANCE BUFFER + 000264' 263140 000000 02700 POPJ PDP, 0 ;EXIT + 000265' 260140 000370' 02710 UIN4: PUSHJ PDP, UBEG3 + 000266' 254000 000254' 02720 JRST UIN3 + 000267' 260140 000000* 02730 SETI: PUSHJ PDP,WAIT1 + 000270' 506606 000007 02740 HRLM UUO,DEVIAD(DEVDAT) ;SET INPUT BLOCK NO. + 000271' 254000 000111* 02750 JRST UXIT + + 000272' 260140 000267* 02770 SETO: PUSHJ PDP,WAIT1 + 000273' 260140 001142' 02780 PUSHJ PDP, UINTER ;WAIT FOR USE TO STOP + 000274' 260140 000242' 02790 PUSHJ PDP, UEND2 ;CLEAR INDICATORS + 000275' 506606 000010 02800 HRLM UUO,DEVOAD(DEVDAT) ;SET OUTPUT BLOCK NO. + 000276' 254000 000271* 02810 JRST UXIT + + 000277' 260140 000272* 02830 GETF: PUSHJ PDP,WAIT1 + 000300' 603000 000002 02840 TLNE IOS,IOBEG + 000301' 260140 000343' 02850 PUSHJ PDP,UBEG + 000302' 661000 000400 02860 TLO IOS,UNWFRE + 000303' 202006 000002 02870 MOVEM IOS,DEVIOS(DEVDAT) + 000304' 350046 000254* 02880 AOS TAC, UFREE(DEVDAT) ;GET FREE BLOCK + 000305' 506046 000010 02890 HRLM TAC, DEVOAD(DEVDAT) + 000306' 505600 000007 02900 HRLI UUO,PROG + 000307' 542060 000014 02910 HRRM TAC,@UUO + 000310' 254000 000276* 02920 JRST UXIT + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 8 + L. HANTMAN PART 1 7-13-65 + + + 02950 INTERNAL UTPCLS,UTWDR,UBEG,UTPREL + + 000311' 02970 UTWDR: IFE DTSIZ,< PUSHJ PDP,UTPREL> + + 000311' 254000 000310* 02990 JRST UXIT + + 000312' 607000 001000 03010 UTPCLS: TLNN IOS, ULINKF + 000313' 254000 000326' 03020 JRST UTPREL + 000314' 135040 000000* 03030 LDB TAC,PIOMOD ;MODE + 000315' 301040 000016 03040 CAIL TAC,16 + 000316' 254000 000326' 03050 JRST UTPREL + 000317' 544046 000006 03060 HLR TAC,DEVBUF(DEVDAT) + 000320' 545040 000007 03070 HLRI TAC, PROG + 000321' 540060 000001 03080 HRR TAC, @TAC ;TAC:=BUFFER ADDRESS + 000322' 271040 000001 03090 ADDI TAC,1 + 000323' 201100 000001 03100 MOVEI TAC1,1 + 000324' 506120 000001 03110 HRLM TAC1,@TAC + 000325' 254000 000000* 03120 JRST OUT + + 03140 UTPREL: IFE DTSIZ,< TLNE IOS,IOBEG ;RELEASE + 03150 POPJ PDP, + 03160 TLZE IOS,UDIREN + 03170 JRST UTPRL1 + 03180 TLNN IOS,UNWFRE + 03190 POPJ PDP, + 03200 TLNN IOS,UDIRIN + 03210 PUSHJ PDP,UBEG> + + 000326' 627000 000600 03230 IFN DTSIZ,< TLZN IOS,UDIREN+UNWFRE + 000327' 263140 000000 03240 POPJ PDP,> + 000330' 260140 001142' 03250 UTPRL1: PUSHJ PDP,UINTER ;IS SYSTEM AVAILABLE? + 000331' 540046 000304* 03260 HRR TAC,UFREE(DEVDAT) + 000332' 506066 000257* 03270 HRLM TAC,@UDIR(DEVDAT) + 000333' 200046 000332* 03280 MOVE TAC,UDIR(DEVDAT) + 000334' 275040 000001 03290 SUBI TAC,1 + 000335' 202040 001121' 03300 MOVEM TAC,UBUF + 000336' 661000 002000 03310 TLO IOS, URDIR + 000337' 202006 000002 03320 MOVEM IOS,DEVIOS(DEVDAT) + 000340' 201040 000001 03330 MOVEI TAC,1 + 000341' 260140 000375' 03340 PUSHJ PDP,USETW + 000342' 254000 000277* 03350 JRST WAIT1 + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 9 + L. HANTMAN PART 1 7-13-65 + + + 03380 ,READ THE DIRECTORY FROM THIS DEC-TAPE + + 000343' 335006 000004 03400 UBEG: SKIPGE DEVMOD(DEVDAT) ;IS DIRECTORY IN CORE? + 000344' 661000 000100 03410 TLO IOS,UDIRIN + 000345' 603000 000100 03420 TLNE IOS,UDIRIN + 000346' 263140 000000 03430 POPJ PDP, 0 + 000347' 260140 001142' 03440 PUSHJ PDP, UINTER ;CHECK INTERLOCK + 000350' 261140 000001 03450 UBEG2: PUSH PDP, TAC ;SAVE TAC + 000351' 550046 000333* 03460 HRRZ TAC,UDIR(DEVDAT) + 000352' 275040 000001 03470 SUBI TAC, 1 + 000353' 202040 001121' 03480 MOVEM TAC,UBUF + 000354' 661000 002100 03490 TLO IOS,UDIRIN+URDIR + 000355' 621000 000002 03500 TLZ IOS, IOBEG + 000356' 202006 000002 03510 MOVEM IOS,DEVIOS(DEVDAT) + 000357' 205040 400000 03520 MOVSI TAC,DVDIRIN ;SET DIRECTORY IN CORE BIT + 000360' 436046 000004 03530 IORM TAC,DEVMOD(DEVDAT) + 000361' 201040 000001 03540 MOVEI TAC,1 + 000362' 260140 000377' 03550 PUSHJ PDP,USETR + 000363' 260140 000000* 03560 PUSHJ PDP,WSYNC + 000364' 544066 000351* 03570 HLR TAC,@UDIR(DEVDAT) + 000365' 552046 000331* 03580 HRRZM TAC,UFREE(DEVDAT) + 000366' 262140 000001 03590 UBEGX: POP PDP,TAC + 000367' 263140 000000 03600 POPJ PDP, 0 + + 000370' 603000 000100 03620 UBEG3: TLNE IOS, UDIRIN + 000371' 263140 000000 03630 POPJ PDP, 0 + 000372' 254000 000350' 03640 JRST UBEG2 + + 000373' 260140 001220' 03660 UTBERR: PUSHJ PDP, DTC1 ;ILL. BLOCK NO. + 000374' 254000 000000* 03670 JRST UTBKER + + 000375' 201100 000535' 03690 USETW: MOVEI TAC1, RIT + 000376' 334000 000000 03700 SKIPA + 000377' 201100 000527' 03710 USETR: MOVEI TAC1,READ + 000400' 542100 000500' 03720 HRRM TAC1,DDIG + 000401' 552040 001117' 03730 HRRZM TAC,UBKN + 000402' 323040 000373' 03740 JUMPLE TAC,UTBERR ;ILL. BLOCK NO.? + 000403' 301040 001102 03750 CAIL TAC,1102 + 000404' 254000 000373' 03760 JRST UTBERR ;ILL. BLOCK NO. + 000405' 135040 000000* 03770 LDB TAC,PUNIT ;UNIT + 000406' 241040 000003 03780 ROT TAC, 3 + 000407' 271040 000000* 03790 ADDI TAC, DTCCHN ;DECTAPE CHANNEL + 000410' 202040 001116' 03800 MOVEM TAC, UNIT ;UNIT AND CHANNEL + 000411' 201040 000137 03810 MOVEI TAC, 137 + 000412' 542040 001166' 03820 HRRM TAC, DTCINT + 000413' 275040 000021 03830 SUBI TAC, 21 + 000414' 542040 001172' 03840 HRRM TAC, CONSZ1 ;FALL INTO FILL + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 10 + L. HANTMAN PART 1 7-13-65 + + + 000415' 720200 000000 03870 FILL: CONO DC,0 ;DESELECT DC + 000416' 700600 002100 03880 CONO PI,2100 ;TURN ON CHANNEL 1 + 000417' 202300 001151' 03890 MOVEM DEVDAT, USVDB ;SAVE DATA BLOCK ADDR + 000420' 202300 001122' 03900 MOVEM DEVDAT,UDVDAT ;UDVDAT:=DTJIOS POINTER + 000421' 201040 000002 03910 MOVEI TAC, DEVIOS + 000422' 272040 001122' 03920 ADDM TAC,UDVDAT + 000423' 200040 001275' 03930 MOVE TAC, [JSR DDIF] ;DATA CONTROL INTERRUPT CHANN + 000424' 202040 000042 03940 MOVEM TAC,UCHA + 000425' 202340 001120' 03950 MOVEM PROG,UPROG ;UPROG:=PROG + 000426' 200040 001121' 03960 MOVE TAC,UBUF ;BLI:=XWD-200,C(UBUF) + 000427' 505040 777600 03970 HRLI TAC,-200 + 000430' 202040 001114' 03980 MOVEM TAC,BLI + 000431' 271040 000177 03990 ADDI TAC,200-1 + 000432' 202040 001113' 04000 MOVEM TAC,BLO + 000433' 721300 020000 04010 CONSZ UTC, 20000 ;IS TAPE MOVING? + 000434' 254000 000453' 04020 JRST FILLC ;YES + 000435' 200040 001116' 04030 MOVE TAC, UNIT ;RDDA:=RDRM:=WTDA:=WTRM:=C(UN + 000436' 137040 000457' 04040 DPB TAC,F1 + 000437' 137040 000460' 04050 DPB TAC,F2 + 000440' 137040 000461' 04060 DPB TAC,F3 + 000441' 137040 000462' 04070 DPB TAC,F4 + 000442' 200040 001116' 04080 MOVE TAC,UNIT + 000443' 405040 000070 04090 ANDI TAC, 70 ;TAC HAS UNIT ONLY + 000444' 271040 323201 04100 ADDI TAC, SL+DTR+RB+EE+UCHN + 000445' 607000 010000 04110 TLNN IOS, UREV ;WAS REV, GO FWD + 000446' 271040 010000 04120 ADDI TAC,GR ;WAS FWD, GO REV + 000447' 721220 000001 04130 CONO UTC, @TAC + 000450' 720200 004011 04140 FILL2: CONO DC, DACI+UCHN ;SET UP DC FOR INPUT + 000451' 202006 000002 04150 MOVEM IOS, DEVIOS (DEVDAT) + 000452' 263140 000000 04160 POPJ PDP, + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 11 + L. HANTMAN PART 1 7-13-65 + + + 04190 ,TAPE IS ACTIVE - GIVE A COMMAND + 000453' 721240 000001 04200 FILLC: CONI UTC,TAC ;UTC COMMAND: UNIT, OLD DIRE + 000454' 405040 010070 04210 ANDI TAC,GR+70 ;DIRECTION PLUS UNIT + 000455' 721201 320201 04220 CONO UTC,SL+RB+EE+UCHN(TAC) ;NO TIME DELAY + 000456' 254000 000450' 04230 JRST FILL2 + + 000457' 000600 000517' 04250 F1: POINT 6,RDDA,35 + 000460' 000600 000531' 04260 F2: POINT 6,RDRM,35 + 000461' 000600 000523' 04270 F3: POINT 6,WTDA,35 + 000462' 000600 000537' 04280 F4: POINT 6,WTRM,35 + 04290 ,CHANGE DIRECTIONS - GIVE NEW COMMANDS + 000463' 721240 000001 04300 RRV: CONI UTC,TAC + 000464' 431040 010000 04310 XORI TAC,GR ;REVERSE BIT + 000465' 405040 550777 04320 ANDI TAC,550777 + 000466' 435040 002000 04330 IORI TAC,DT + 000467' 721201 220000 04340 CONO UTC,SL(TAC) + 000470' 720200 004011 04350 CONO DC,DACI+UCHN + 000471' 254000 000515' 04360 JRST DXIT + 04370 ,EXAMINE BLOCK NUMBERS - DISPATCHED FROM INTERRUPT - CHAN, DC. + 000472' 000000 000000 04380 DDIF: 0 ;GOING FORWARD + 000473' 202040 001115' 04390 MOVEM TAC,SV1 ;SV1:=TAC + 000474' 721700 000002 04400 CONSZ UTS, VEOT + 000475' 254000 000463' 04410 JRST RRV + 000476' 720040 000001 04420 DATAI DC,TAC + 000477' 316040 001117' 04430 CAMN TAC,UBKN ;BLK NOT =STR + 000500' 254000 000500' 04440 DDIG: JRST . ;JRST READ, BIT, IFRIGHT UBK + 000501' 721300 010000 04450 CONSZ UTC,10000 ;GOING BACKWARDS + 000502' 254000 000506' 04460 JRST .+4 ;BACKWARDS + 000503' 311040 001117' 04470 CAML TAC,UBKN ;BLK > STR > FORWARD + 000504' 254000 000463' 04480 JRST RRV + 000505' 254000 000510' 04490 JRST .+3 + 000506' 317040 001117' 04500 CAMG TAC,UBKN ;BACKWARDS + 000507' 254000 000463' 04510 JRST RRV ;BACKWARDS + 000510' 721240 000001 04520 DDIG2: CONI UTC,TAC + 000511' 405040 550777 04530 ANDI TAC,550777 + 000512' 721201 220000 04540 CONO UTC,SL(TAC) + 000513' 334000 000000 04550 SKIPA + 000514' 542040 000042 04560 DXIT1: HRRM TAC,UCHA + 000515' 200040 001115' 04570 DXIT: MOVE TAC,SV1 ;RESTORE TAC + 000516' 254520 000472' 04580 JEN @DDIF ;RE-ENABLE, DISMISS. + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 12 + L. HANTMAN PART 1 7-13-65 + + + 04610 ,DISPATCH FROM UCHA INITIALLY ON CORRECT BLOCK MARK + 04620 ,SETS OP TO READ, WRITE IN FWD, REVERSE + + 04640 ;RD FORWARD + 000517' 721200 360300 04650 RDDA: CONO UTC,SL+RD+JDE+EE ;GETS UNIT NO. - RE + 000520' 201040 000551' 04660 MOVEI TAC,RDFW + 000521' 720200 004011 04670 CONO DC,DACI+UCHN + 000522' 254000 000514' 04680 JRST DXIT1 + + 000523' 721200 360700 04700 WTDA: CONO UTC,SL+WD+JDE+EE ;GETS UNIT NO. - RE + 000524' 201040 000563' 04710 MOVEI TAC,WTFW + 000525' 720200 003411 04720 CONO DC,DACO+UCHN + 000526' 254000 000514' 04730 JRST DXIT1 + + 000527' 721340 010000 04750 READ: CONSO UTC,10000 ;ENTRY TO SET UP READ + 000530' 254000 000517' 04760 JRST, RDDA + 04770 ;READ REVERSE + 000531' 721200 370300 04780 RDRM: CONO UTC,SL+GR+RD+JDE+EE ;GETS UNIT NO. - RESETS TO RD + 000532' 201040 000543' 04790 MOVEI TAC,RDRV + 000533' 720200 004011 04800 CONO DC,DACI+UCHN + 000534' 254000 000514' 04810 JRST DXIT1 + 000535' 721340 010000 04820 RIT: CONSO UTC,10000 ;GOING REVERSE - ENTRY TO SET + 000536' 254000 000523' 04830 JRST WTDA ;WRITE FORWARD + 04840 ;WRITE REVERSE + 000537' 721200 370700 04850 WTRM: CONO UTC,SL+WD+GR+JDE+EE ;GETS UNIT NO. -RESETS. TO WT + 000540' 201040 000555' 04860 MOVEI TAC,WTRV + 000541' 720200 003411 04870 CONO DC,DACO+UCHN + 000542' 254000 000514' 04880 JRST DXIT1 + + 04900 ,DC INTERRUPT PROCESSSING TO READ/WRITE DATA IN EITHER + 04910 ,DIRECTION, AND RE-ENABLE INTERRUP. + 04920 ,EXIT BLOCK PROCESSING AT ENPT(WRITE), ENPTI(READ) + + 000543' 000000 000000 04940 RDRV: 0 ;ENTRY VIA UCHA - READ REV + 000544' 720000 001113' 04950 BLKI DC,BLO + 000545' 264000 000620' 04960 JSR ENPTI + 000546' 370000 001113' 04970 SOS BLO + 000547' 370000 001113' 04980 SOS BLO + 000550' 254520 000543' 04990 JEN @RDRV + + 000551' 000000 000000 05010 RDFW: 0 ;ENTRY VIA UCHA - READ FWD + 000552' 720000 001114' 05020 BLKI DC,BLI + 000553' 264000 000620' 05030 JSR ENPTI + 000554' 254520 000551' 05040 JEN @RDFW + + 000555' 000000 000000 05060 WTRV: 0 ;ENTRY VIA UCHA - WRITE REV + 000556' 720100 001113' 05070 BLKO DC,BLO + 000557' 264000 000567' 05080 JSR ENPT + 000560' 370000 001113' 05090 SOS BLO + 000561' 370000 001113' 05100 SOS BLO + 000562' 254520 000555' 05110 JEN @WTRV + + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 12-1 + L. HANTMAN PART 1 7-13-65 + + 000563' 000000 000000 05130 WTFW: 0 ;ENTRY VIA UCHA - WRITE FWD + 000564' 720100 001114' 05140 BLKO DC,BLI + 000565' 264000 000567' 05150 JSR ENPT + 000566' 254520 000563' 05160 JEN @WTFW + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 13 + L. HANTMAN PART 1 7-13-65 + + + 05190 ;END OF OUTPUT BLOCK + + 000567' 000000 000000 05210 ENPT: 0 + 000570' 264000 000603' 05220 JSR, ENP + 000571' 202040 001115' 05230 ENPT2: MOVEM TAC,SV1 ;SV1:=TAC + 000572' 515040 010000 05240 HRLZI TAC,UREV + 000573' 721300 010000 05250 CONSZ UTC,10000 + 000574' 412060 001122' 05260 ANDCAM TAC,@UDVDAT + 000575' 721340 010000 05270 CONSO UTC,10000 + 000576' 436060 001122' 05280 IORM TAC,@UDVDAT + 000577' 201040 000615' 05290 MOVEI TAC,UOFF + 000600' 542040 000042 05300 HRRM TAC,UCHA + 000601' 200040 001115' 05310 MOVE TAC,SV1 + 000602' 254120 000567' 05320 JRSTF @ENPT + + 05340 ,CHECK ERROR BITS DC MISSED, 0T PARITY, 1 LEG OP, TAPE END + 000603' 000000 000000 05350 ENP: 0 + 000604' 720300 010000 05360 CONSZ DC, 10000; DATA MISSED + 000605' 264000 000627' 05370 JSR ERROR2 + 000606' 254120 000603' 05380 JRSTF @ENP + + 05400 ,SAVE STATE OF UTS, UTC, DC, TURN OFF DC, UTC, +1@ERRTAL,+1@UERR + 05410 ;ERROR LOOPS + 000607' 000000 000000 05420 ERROR: 0 + 000610' 721640 001111' 05430 CONI UTS, C12 + 000611' 721240 001112' 05440 CONI UTC, C13 + 000612' 720240 001110' 05450 CONI DC, C11 + 000613' 476000 001124' 05460 SETOM ERRFLG + 000614' 254120 000607' 05470 JRSTF @ERROR + 05480 ;INTERRUPT FROM DATA FLAG AFER BLKO HAS COUNTED OUT + 000615' 000000 000000 05490 UOFF: 0 + 000616' 700600 001100 05500 CONO PI, 1100 ;TURN DC CHANNEL OFF + 000617' 254520 000615' 05510 JEN @UOFF ;DISMISS EXTRA WRITE FLAG + + 05530 ;END OF INPUT BLOCK + 000620' 000000 000000 05540 ENPTI: 0 + 000621' 250040 000620' 05550 EXCH TAC, ENPTI + 000622' 202040 000567' 05560 MOVEM TAC, ENPT + 000623' 264000 000603' 05570 JSR ENP + 000624' 720200 000000 05580 CONO DC, 0 + 000625' 200040 000620' 05590 MOVE TAC, ENPTI + 000626' 254000 000571' 05600 JRST ENPT2 + 05610 ;DETECT FIRST ERROR ONLY + 000627' 000000 000000 05620 ERROR2: 0 + 000630' 336000 001124' 05630 SKIPN ERRFLG ;PREVIOUSLY DETECTED ERROR! + 000631' 264000 000607' 05640 JSR ERROR ;STORE ERROR CONDITIONS + 000632' 254120 000627' 05650 JRSTF @ERROR2 ;CONTINUE LOOP + + 05670 ;END OF PART 1 DTSER2 + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 14 + L. HANTMAN PART 1 7-13-65 + + + 05700 EXTERNAL SETIOD + 05710 INTERNAL UDMP0, UDMPI + + 05730 ; DUMP OUT + 000633' 661000 000020 05740 UDMPO: TLO IOS, IO ;SET FOR OUTPUT + 000634' 260140 001142' 05750 PUSHJ PDP, UINTER ;CHECK INTERLOCK + 000635' 606600 777777 05760 TRNN UUO, 777777 ;COMMAND ADDRESS? + 000636' 254000 000722' 05770 JRST UDMP2-1 ;ERROR + 000637' 201040 000727' 05780 MOVEI TAC, DDUMP ;RETURN WHEN BLOCK FOUND + 000640' 200100 001276' 05790 UDMP0: MOVE TAC1, [JSR DMPADV] ;BLKI OR BLKO RETURN, COMMANDS + + 05810 ;COMMON ROUTINE FOR ALL DUMP MODES, START SEARCH + 000641' 542040 000500' 05820 UDMP1: HRRM TAC,DDIG ;SEARCH RETURN + 000642' 202100 000043 05830 MOVEM TAC1, UCHA+1 ;INTERRUPT RETURN + 000643' 200040 001275' 05840 MOVE TAC, [JSR DDIF] + 000644' 202040 000042 05850 MOVEM TAC, UCHA ;DATA CONTROL CHANNEL + 000645' 554046 000010 05860 HLRZ TAC, DEVOAD (DEVDAT) ;BLOCK NUMBER + 000646' 607000 000020 05870 TLNN IOS, IO ;WRITING? + 000647' 554046 000007 05880 HLRZ TAC, DEVIAD(DEVDAT) ;INPUT BLOCK NUMBER + 000650' 202040 001117' 05890 MOVEM TAC, UBKN ;BLOCK TO LOOK FOR + 000651' 552300 001151' 05900 HRRZM DEVDAT, USVDB ;DATA BLOCK ADDRESS + 000652' 135040 000405* 05910 LDB TAC,PUNIT ;UNIT + 000653' 241040 000003 05920 ROT TAC, 3 + 000654' 271040 000407* 05930 ADDI TAC, DTCCHN + 000655' 202040 001116' 05940 MOVEM TAC, UNIT ;UNIT AND DT CHANNEL + 000656' 405040 000070 05950 ANDI TAC, 70 + 000657' 721201 323201 05960 CONO UTC, SL+DTR+RB+EE+UCHN(TAC) + 000660' 476000 001153' 05970 SETOM UERRCN ;SET ERROR COUNTER + 000661' 201040 000037 05980 MOVEI TAC, 37 ;DO NOT CHECK FOR INCOMPLETE + 000662' 542040 001166' 05990 HRRM TAC, DTCINT + 000663' 201040 000016 06000 MOVEI TAC,16 + 000664' 542040 001172' 06010 HRRM TAC, DTCINT+4 + 000665' 720200 004011 06020 CONO DC, DACI+UCHN ;SET DATA CONTROL + 000666' 700600 002100 06030 CONO PI,2100 ;INSURE CHANNEL 1 ON + 000667' 552340 001126' 06040 HRRZM PROG, UDMPA ;SAVE PROGRAM + 000670' 606600 777777 06050 TRNN UUO, 777777 ;COMMAND ADDRESS + 000671' 263140 000000 06060 POPJ PDP, 0 ;COMMAND LIST ON TAPE, INPUT + 000672' 550040 000014 06070 HRRZ TAC, UUO ;GET CMD PNTR + 000673' 550100 000001 06080 HRRZ TAC1, TAC ;SAVE POINTER + 000674' 270100 000007 06090 UDMP1A: ADD TAC1, PROG ;GET ACTUAL POINTER + 000675' 552100 001125' 06100 HRRZM TAC1, UDMP ;STORE WORKING POINTER + + 06120 ;CHECK ENTIRE COMMAND LIST FOR VALIDITY + 000676' 336120 001125' 06130 UDMP1B: SKIPN TAC1, @UDMP ;GET COMMAND + 000677' 254000 000712' 06140 JRST UDMP1C ;END OF COMMAND LIST + 000700' 327100 000674' 06150 JUMPG TAC1, UDMP1A ;CHANGE COMMAND SEQUENCE + 000701' 576100 001141' 06160 HLREM TAC1, SVCNTR ;SAVE -N + 000702' 553000 000002 06170 HRRZS TAC1 ;GET ADDRESS + 000703' 305100 000000* 06180 CAIGE TAC1, JOBPFI ;IS IT ABOVE IO PROT. AREA + 000704' 254000 000000* 06190 JRST ADRERR ;NO. ADDRESS CHECK ERROR + 000705' 274100 001141' 06200 SUB TAC1, SVCNTR ;GET AREA END + 000706' 313100 000000* 06210 CAMLE TAC1, USRREL ;LESS THEN END? + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 14-1 + L. HANTMAN PART 1 7-13-65 + + 000707' 254000 000722' 06220 JRST UDMP2-1 ;OUT OF BOUNDS + 000710' 350000 001125' 06230 AOS UDMP ;INDEX COMMAND LIST POINTER + 000711' 254000 000676' 06240 JRST UDMP1B ;GET NEXT COMMAND + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 15 + L. HANTMAN PART 1 7-13-65 + + + 06270 ;GET FIRST COMMAND + 000712' 270040 000007 06280 UDMP1C: ADD TAC, PROG ;GET ACTUAL ADDRESS + 000713' 552040 001125' 06290 HRRZM TAC, UDMP ;SAVE POINTER + 000714' 336060 001125' 06300 SKIPN TAC, @UDMP ;1ST COMMAND + 000715' 254000 000723' 06310 JRST UDMP2 ;NOTHING TO DO + 000716' 270040 000007 06320 ADD TAC, PROG ;ACTUAL POINTER + 000717' 325040 000713' 06330 JUMPGE TAC, .-4 ;CHANGE COMMAND SEQUENCE + 000720' 202040 001113' 06340 MOVEM TAC, BLO ;SAVE I/O POINTER + 000721' 263140 000000 06350 POPJ PDP, 0 + 06360 ;EXIT WITH ERROR + 000722' 660000 040000 06370 TRO IOS, IOBKTL + 000723' 201040 777775 06380 UDMP2: MOVEI TAC, -3 + 000724' 572040 001153' 06390 HRREM TAC, UERRCN + 000725' 402000 001124' 06400 SETZM ERRFLG + 000726' 254000 000242' 06410 JRST UEND2 + + 06430 ;SEARCH RETURN,OUTPUT,COMMAND LIST IN MEMORY + 000727' 721300 010000 06440 DDUMP: CONSZ UTC,GR + 000730' 254000 000510' 06450 JRST DDIG2 ;KEEP GOING + 000731' 200040 001277' 06460 MOVE TAC,[BLKO DC,BLO] + 000732' 202040 000042 06470 MOVEM TAC, UCHA + 000733' 720200 003411 06480 CONO DC,DACO+UCHN + 000734' 200040 001116' 06490 MOVE TAC,UNIT + + 000735' 721201 360700 06510 CONO UTC,SL+WD+JDE+EE(TAC) + 000736' 254000 000515' 06520 JRST DXIT + 06530 ;BLKI OR BLKO RETURNS, COMMAND LIST IN MEMORY + 000737' 000000 000000 06540 DMPADV: 0 + 000740' 202040 001115' 06550 MOVEM TAC,SV1 + 000741' 354040 001125' 06560 AOSA TAC,UDMP ;POINTER + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 16 + L. HANTMAN PART 1 7-13-65 + + + 000742' 552040 001125' 06590 DMPA1: HRRZM TAC, UDMP ;STORE POINTER + 000743' 336041 000000 06600 SKIPN TAC, 0(TAC) ;IS WORD ZERO + 000744' 254000 000752' 06610 JRST DMPA2 ;END + 000745' 270040 001126' 06620 ADD TAC, UDMPA ;ADD PROGRAM + 000746' 325040 000742' 06630 JUMPGE TAC, DMPA1 ;CHANGE COMMAND + 000747' 202040 001113' 06640 MOVEM TAC, BLO + 000750' 200040 001115' 06650 DMPXT: MOVE TAC, SV1 + 000751' 254520 000737' 06660 JEN @DMPADV + + 06680 ;END OF COMMAND LIST, INPUT OR OUTPUT + 000752' 264000 000603' 06690 DMPA2: JSR ENP + 000753' 700600 001100 06700 CONO PI, 1100 ;TURN DATA CONTROL CHANNEL OF + 000754' 721740 000040 06710 CONSO UTS, 40 ;WRITING? + 000755' 720200 000000 06720 CONO DC, 0 ;SHUT OFF DATA CONTROL + 000756' 254000 000750' 06730 JRST DMPXT + 06740 ;SEARCH RETURN, INPUT COMMAND LIST ON TAPE + 000757' 721300 010000 06750 DDMPI: CONSZ UTC, GR ;GOING BACKWARDS? + 000760' 254000 000510' 06760 JRST DDIG2 ;KEEP GOING + 000761' 200040 001300' 06770 MOVE TAC, [XWD -1,BLO-1] + 000762' 202040 001113' 06780 MOVEM TAC, BLO + + 06800 ;COMMON INSTRUCTIONS FOR COMMAND LIST IN MEMORY OR ON TAPE + 000763' 200040 001301' 06810 DDMPI2: MOVE TAC, [BLKI DC,BLO] + 000764' 202040 000042 06820 MOVEM TAC, UCHA + 000765' 720200 004011 06830 CONO DC, DACI+UCHN + 000766' 200040 001116' 06840 MOVE TAC, UNIT + 000767' 721201 360300 06850 CONO UTC, SL+RD+JDE+EE(TAC) + 000770' 254000 000515' 06860 JRST DXIT + + 06880 ;INPUT COMMAND LIST ON TAPE. BLKI RETURN AFTER READING COMMAND + 000771' 000000 000000 06890 DMPRD: 0 + 000772' 331000 001113' 06900 SKIPL BLO ;END OF COMMAND LIST? + 000773' 254000 001010' 06910 JRST DMPRD1 + 000774' 202040 001115' 06920 MOVEM TAC, SV1 ;SAVE TAC + 000775' 200040 001113' 06930 MOVE TAC, BLO ;PICK UP COMMAND + 000776' 576040 001141' 06940 HLREM TAC, SVCNTR ;-N + 000777' 553000 000001 06950 HRRZS TAC ;ADDRESS + 001000' 274040 001141' 06960 SUB TAC, SVCNTR ;END ADDRESS + 001001' 303040 000000 06970 DMPRD0: CAILE TAC, 0 ;<END? MODIFIED + 001002' 254000 001102' 06980 JRST DMPERR ;OUT OF BOUNDS, EXIT + 001003' 200040 001125' 06990 MOVE TAC, UDMP ;PROG + 001004' 272040 001113' 07000 ADDM TAC, BLO ;TO GET ACTUAL I/O POINTER + 001005' 201040 001012' 07010 MOVEI TAC,DMPRDA ;NEW RETURN + 001006' 542040 000042 07020 HRRM TAC, UCHA+ + 001007' 334040 001115' 07030 SKIPA TAC, SV1 ;RESTORE TAC + 001010' 720200 000000 07040 DMPRD1: CONO DC, 0 + 001011' 254520 000771' 07050 JEN @DMPRD + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 17 + L. HANTMAN PART 1 7-13-65 + + + 07080 ;INPUT COMMAND LIST ON TAPE. BLKI RETURN AFTER READING DATA + 001012' 000000 000000 07090 DMPRDA: 0 + 001013' 202040 001115' 07100 MOVEM TAC, SV1 ;SAVE TAC + 001014' 200040 001300' 07110 MOVE TAC, [XWD -1,BLO-1] + 001015' 202040 001113' 07120 MOVEM TAC, BLO ;READ INTO BLO + 001016' 201040 000771' 07130 MOVEI TAC, DMPRD ;USE PREV. RETURN + 001017' 542040 000043 07140 HRRM TAC, UCHA+1 + 001020' 200040 001115' 07150 MOVE TAC, SV1 ;SAVE TAC + 001021' 254520 001012' 07160 JEN @DMPRDA + 07170 ;DUMP IN + 001022' 621000 000020 07180 UDMPI: TLZ IOS, IO + 001023' 260140 001142' 07190 PUSHJ PDP, UINTER + 001024' 602600 777777 07200 TRNE UUO, 777777 ;COMMAND LIST ON TAPE + 001025' 254000 001033' 07210 JRST UDMPI2 ;COMMAND LIST IN CORE + 001026' 200040 000706* 07220 MOVE TAC, USRREL ;LENGTH OF USER AREA + 001027' 542040 001001' 07230 HRRM TAC, DMPRD0 + 001030' 201040 000757' 07240 MOVEI TAC, DDMPI ;SEARCH RETURN + 001031' 200100 001302' 07250 MOVE TAC1, [JSR DMPRD] ;BLOCK IN RETURN + 001032' 254000 000641' 07260 JRST UDMP1 + 001033' 201040 001035' 07270 UDMPI2: MOVEI TAC, DDMPI3 ;COMMAND LIST IN CORE + 001034' 254000 000640' 07280 JRST UDMP0 + 07290 ;SEARCH RETURN, INPUT COMMAND LIST IN MEMORY + 001035' 721300 010000 07300 DDMPI3: CONSZ UTC, GR + 001036' 254000 000510' 07310 JRST DDIG2 ;KEEP GOING + 001037' 254000 000763' 07320 JRST DDMPI2 ;INPUT COMMAND LIST IN CORE + 07330 ;JOB DONE AFTER COMMAND LIST RUNS OUT + 001040' 332000 001124' 07340 DMPEND: SKIPE ERRFLG + 001041' 660000 200000 07350 TRO IOS,IODERR + 001042' 202006 000002 07360 MOVEM IOS,DEVIOS(DEVDAT) + 001043' 200040 001116' 07370 MOVE TAC,UNIT + 001044' 405040 000070 07380 ANDI TAC, 70 + 001045' 700600 002100 07390 CONO PI,2100 + 001046' 720200 004011 07400 CONO DC, DACI+UCHN + 001047' 721201 220200 07410 CONO UTC, SL+RB(TAC) ;SWITCH TO SEARCH MODE + 001050' 200040 001303' 07420 MOVE TAC, [JSR UDMPRB] + 001051' 202040 000042 07430 MOVEM TAC, UCHA + 001052' 254000 000000* 07440 JRST DTCRET + 07450 ;SEARCH RETURN TO READ NEXT FREE BLOCK + 001053' 000000 000000 07460 UDMPRB: 0 + 001054' 250300 001151' 07470 EXCH DEVDAT, USVDB ;GET DVDB + 001055' 202040 001130' 07480 MOVEM TAC,SVAC + 001056' 202000 001131' 07490 MOVEM IOS,SVAC+1 + 001057' 202140 001132' 07500 MOVEM PDP,SVAC+2 + 001060' 202100 001133' 07510 MOVEM TAC1,SVAC+3 + 001061' 200006 000002 07520 MOVE IOS,DEVIOS(DEVDAT) + 001062' 607000 000020 07530 TLNN IOS,IO ;INPUT OR OUTPUT? + 001063' 254000 001066' 07540 JRST .+3 ;INPUT + 001064' 720046 000365* 07550 DATAI DC,UFREE(DEVDAT) ;LAST FREEBLOCK TALLY + 001065' 661000 000400 07560 TLO IOS,UNWFRE ;SET FREE BLOCK CHANGED BIT + 001066' 720200 000000 07570 CONO DC,0 ;TURN OFF DATA CONTROL + 001067' 201040 000654* 07580 MOVEI TAC,DTCCHN + 001070' 721201 005000 07590 CONO UTC,5000(TAC) ;STOP TAPE + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 17-1 + L. HANTMAN PART 1 7-13-65 + + 001071' 200140 001304' 07600 MOVE PDP,[XWD -5,SVAC+3] ;USE REST OF SCAV BLOCK + 001072' 264000 001154' 07610 JSR IODSET + 001073' 260140 001227' 07620 PUSHJ PDP,DTC1B + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 18 + L. HANTMAN PART 1 7-13-65 + + + 001074' 200040 001130' 07650 MOVE TAC,SVAC + 001075' 200000 001131' 07660 MOVE IOS,SVAC+1 + 001076' 200140 001132' 07670 MOVE PDP,SVAC+2 + 001077' 200100 001133' 07680 MOVE TAC1,SVAC+3 + 001100' 250300 001151' 07690 EXCH DEVDAT,USVDB + 001101' 254520 001053' 07700 JEN @UDMPRB + 07710 ;ADDRESS CHECK FROM COMMAND. COMMANDS ON TAPE + 001102' 250300 001151' 07720 DMPERR: EXCH DEVDAT, USVDB ;GET DVDB + 001103' 201040 400000 07730 MOVEI TAC, IOIMPM ;ERROR BITS + 001104' 436046 000002 07740 ORM TAC, DEVIOS(DEVDAT) ;SET STATUS + 001105' 250300 001151' 07750 EXCH DEVDAT, USVDB ;RESTORE DEVDAT + 001106' 200040 001115' 07760 MOVE TAC, SV1 ;RESTORE TAC + 001107' 254000 001010' 07770 JRST DMPRD1 + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 19 + L. HANTMAN PART 1 7-13-65 + + + 001110' 000000 000000 07800 C11: 0 ;TEMP CONI DC + 001111' 000000 000000 07810 C12: 0 ;TEMP CONI UTS + 001112' 000000 000000 07820 C13: 0 ;TEMP CONI UTC + 001113' 000000 000000 07830 BLO: 0 ;XWD -200 C(UBUF) + 001114' 000000 000000 07840 BLI: 0 ;XWD,-200,C(UBUF+200) + 001115' 000000 000000 07850 SV1: 0 ;TEMPORARY FOR TAC DURING INTERRUPT + 001116' 000000 000000 07860 UNIT: 0 ;IN BITS 30-32 + 001117' 000000 000000 07870 UBKN: 0 ;BLOCK BEING SEARCHED FOR + 001120' 000000 000000 07880 UPROG: 0 ;HOLDS PROG + 001121' 000000 000000 07890 UBUF: 0 ;ABS. LOC OF DATA + 001122' 000000 000000 07900 UDVDAT: 0 ;PTR TO IOS + 001123' 000000 000000 07910 ERRTAL: 0 ;TOTAL NO. OF ERRORS + 001124' 000000 000000 07920 ERRFLG: 0 ;-1 IF ERROR OCCURED, 0 OTHERWISSE + + 001125' 000000 000000 07940 UDMP: 0 ;HOLDS DUMP UUO ADDRESS + 001126' 000000 000000 07950 UDMPA: 0 ;HOLDS USER PROGRAM STARTING ADDRESS + 001127' 000000 000000 07960 SV0: 0 + 001130' 07970 SVAC: BLOCK 11 + 001141' 000000 000000 07980 SVCNTR: 0 ;HOLDS -N OF DUMP COMMAND WORD + + 08000 ;CHECK FRO INTERLOCK ON DECTAPE AND DATA CONTROLS + 001142' 660000 010000 08010 UINTER: TRO IOS, IOACT + 001143' 202006 000002 08020 MOVEM IOS, DEVIOS(DEVDAT) + 001144' 352000 000244* 08030 AOSE DTREQ ;IS DECTAPE CONTROL FREE? + 001145' 260140 000000* 08040 PUSHJ PDP, DTWAIT ;WAIT + 001146' 352000 000242* 08050 AOSE DCREQ ;IS DATA CONTROL FREE? + 001147' 260140 000000* 08060 PUSHJ PDP, DCWAIT ;WAIT + 001150' 263140 000000 08070 POPJ PDP, 0 ;EXIT + + 001151' 000000 000000 08090 USVDB: 0 ;SAVE DATA BLOCK ADDRESS + 001152' 000000 000000 08100 USVIOS: 0 ;SAVE IOS + 001153' 777777 777775 08110 UERRCN: -3 ;ERROR COUNTER + + 001154' 000000 000000 08130 IODSET: 0 + 001155' 623000 000001 08140 TLZE IOS,IOW + 001156' 260140 000000* 08150 PUSHJ PDP,SETIOD + 001157' 202006 000002 08160 MOVEM IOS,DEVIOS(DEVDAT) + 001160' 254020 001154' 08170 JRST @IODSET + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 20 + L. HANTMAN PART 1 7-13-65 + + + 08200 ;INITIALZATION + + 001161' 201040 777775 08220 DTCINI: MOVEI TAC, -3 ;CLEAR ERROR COUNTER + 001162' 572040 001153' 08230 HRREM TAC, UERRCN + 001163' 402000 001124' 08240 SETZM ERRFLG + 001164' 721200 000000 08250 CONO UTC, 0 + 001165' 263140 000000 08260 POPJ PDP, 0 + + 001166' 721740 000137 08280 DTCINT: CONSO UTS, 137 ;ALL ERRORS AND JOB DONE + 001167' 254000 001167' 08290 JRST . ;MODIFIED BY INITIALIZATION + 001170' 721700 000020 08300 CONSZ UTS,20 ;TIME FLAG + 001171' 254000 001244' 08310 JRST UTIME ;SET DECTAPE CONTROL AVAILABL + 001172' 721700 000116 08320 CONSZ1: CONSZ UTS, 116 ;INC BLK, PARITY, ILL OP, END + 001173' 264000 000627' 08330 JSR ERROR2 ;ERROR + + 08350 ;JOB DONE + 001174' 720200 000000 08360 CONO DC, 0 ;TURN OFF DATA CONTROL + 001175' 202000 001127' 08370 MOVEM 0, SV0 ;SAVE ZERO + 001176' 721240 000000 08380 CONI UTC, 0 + 001177' 202000 001152' 08390 MOVEM 0, USVIOS + 001200' 405000 230070 08400 ANDI 0, 230070 ;SAVE DIRECTION AND UNIT + 001201' 721220 000000 08410 CONO UTC, @0 ;SWITCH TO MOVE MODE + 001202' 200000 001127' 08420 MOVE 0, SV0 + 001203' 264000 000000* 08430 JSR DTCSAV + 001204' 260140 001252' 08440 PUSHJ PDP, DSETAC + 001205' 332000 001124' 08450 SKIPE ERRFLG + 001206' 254000 001256' 08460 JRST DTRED0 + 001207' 623000 002000 08470 TLZE IOS,URDIR + 001210' 254000 001213' 08480 JRST .+3 + 001211' 264000 001154' 08490 JSR IODSET + 001212' 254000 001220' 08500 JRST DTC1 + 001213' 640000 000017 08510 TRC IOS,17 + 001214' 646000 000017 08520 TRCN IOS,17 + 001215' 254000 001040' 08530 JRST DMPEND + 001216' 264000 001154' 08540 JSR IODSET + 001217' 254000 001237' 08550 JRST DTCONT + 001220' 200040 001152' 08560 DTC1: MOVE TAC, USVIOS + 001221' 405040 010007 08570 ANDI TAC, 10007 ;DIRECTION, CHANNEL + 001222' 435040 005000 08580 ORI TAC,5000 ;TIME FLAG ENABLE + 001223' 721220 000001 08590 CONO UTC, @ TAC ;STOP TAPE, AND DESELECT + 001224' 621000 010000 08600 TLZ IOS, UREV + 001225' 602040 010000 08610 TRNE TAC, 10000 + 001226' 661000 010000 08620 TLO IOS,UREV + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 21 + L. HANTMAN PART 1 7-13-65 + + + 001227' 08650 DTC1A: + 001227' 371000 001146* 08660 DTC1B: SOSL DCREQ ;DECREMENT REQUEST COUNT, ANYONE LEFT W + 001230' 476000 000243* 08670 SETOM DCAVAL ;YES.DATA CONTROL AVAILABLE + 001231' 620000 010000 08680 TRZ IOS, IOACT + 001232' 202006 000002 08690 DTC2: MOVEM IOS, DEVIOS(DEVDAT) + 001233' 201040 777775 08700 MOVEI TAC, -3 + 001234' 572040 001153' 08710 HRREM TAC, UERRCN + 001235' 402000 001124' 08720 SETZM ERRFLG + 001236' 263140 000000 08730 POPJ PDP, + + 001237' 201100 000153' 08750 DTCONT: MOVEI TAC1, UOUT2 + 001240' 607000 000020 08760 TLNN IOS, IO ;WRITING? + 001241' 201100 000217' 08770 MOVEI TAC1, UIN1 + 001242' 260142 000000 08780 PUSHJ PDP, 0(TAC1) + 001243' 254000 001232' 08790 JRST DTC2 + + 08810 ;INTERRUPT FROM TIME FLAG AFTER STOP DELAY + 001244' 721340 004000 08820 UTIME: CONSO UTC,4000 + 001245' 254000 001167' 08830 JRST DTCINT+1 + 001246' 371000 001144* 08840 SOSL DTREQ ;DECREMENT REQUEST COUNT, IS ANYONE STI + 001247' 476000 000245* 08850 SETOM DTAVAL ;YES,DECTAPE CONTROL AVAILABL + 001250' 721200 000000 08860 CONO UTC, 0 + 001251' 254520 000000* 08870 JEN @DTCCHL + + 08890 ;SET UP NECESSARY DECTAPE ACCUMULATORS + 001252' 200300 001151' 08900 DSETAC: MOVE DEVDAT, USVDB + 001253' 200340 001120' 08910 MOVE PROG, UPROG + 001254' 200006 000002 08920 MOVE IOS, DEVIOS(DEVDAT) + 001255' 263140 000000 08930 POPJ PDP, + 08940 ;RE-DO DECTAPE COMMAND IF AN ERROR OCCURED + 001256' 640000 000017 08950 DTRED0: TRC IOS,17 + 001257' 646000 000017 08960 TRCN IOS,17 + 001260' 254000 001040' 08970 JRST DMPEND + 001261' 350000 001153' 08980 AOS UERRCN ;NOT YET 3 ERRORS + 001262' 254000 001266' 08990 JRST DTRD2 ;THIRD ERROR + 001263' 402000 001124' 09000 SETZM ERRFLG ;CLEAR FLAG + 001264' 260140 000415' 09010 PUSHJ PDP, FILL ;RE-EXECUTE THE COMMAND + 001265' 254000 001052* 09020 JRST DTCRET ;EXIT + 001266' 660000 200000 09030 DTRD2: TRO IOS, IODERR ;SET ERROR INDICATION + 001267' 623000 000001 09040 TLZE IOS, IOW + 001270' 260140 001156* 09050 PUSHJ PDP, SETIOD ;RELEASE WAIT + 001271' 254000 001220' 09060 JRST DTC1 ;STOP THE TAPE + 09070 EXTERNAL DTREQ, DCREQ, DTWAIT, DCWAIT, DTCSAV,DTCRET + 09080 EXTERNAL DTAVAL, DCAVAL, DTCCHL, UTBKER, DTCCHN, USRREL + 09090 INTERNAL DTCINT, DTCINI, DTSIZ,UBUF + + 09110 END, + 001272' 001401 000002 + 001273' 001414 000002 + 001274' 000001 000005 + 001275' 264000 000472' + 001276' 264000 000737' + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 21-1 + L. HANTMAN PART 1 7-13-65 + + 001277' 720100 001113' + 001300' 777777 001112' + 001301' 720000 001113' + 001302' 264000 000771' + 001303' 264000 001053' + 001304' 777773 001133' + +NO ERRORS DETECTED + +PROGRAM BREAK IS 001305 + +9K CORE USED + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 22 + SYMBOL TABLE + + 000452 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADRCK 000001' EXT +ADRERR 000704' EXT +ADVBFE 000000 EXT +ADVBFF 000000 EXT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BLI 001114' +BLO 001113' +BUFPNT 000012 INT +BUFWRD 000013 INT +C11 001110' +C12 001111' +C13 001112' +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CONSZ1 001172' +CPOPJ1 000033' EXT +D 000017 INT +DACI 004010 +DACO 003410 +DAT 000005 INT +DC 000200 SPD +DCAVAL 001230' EXT +DCL 000001 INT +DCREQ 001227' EXT +DCW 020000 INT +DCWAIT 001147' EXT +DDI 000007 INT +DDIF 000472' +DDIG 000500' +DDIG2 000510' +DDMPI 000757' +DDMPI2 000763' +DDMPI3 001035' +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DDUMP 000727' +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 22-1 + SYMBOL TABLE + +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DIRERR 000015' EXT +DLK 000005 INT +DMPA1 000742' +DMPA2 000752' +DMPADV 000737' +DMPEND 001040' +DMPERR 001102' +DMPRD 000771' +DMPRD0 001001' +DMPRD1 001010' +DMPRDA 001012' +DMPXT 000750' +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSETAC 001252' +DSI 000011 INT +DSO 000010 INT +DT 002000 +DTAVAL 001247' EXT +DTC1 001220' +DTC1A 001227' +DTC1B 001227' +DTC2 001232' +DTCCHL 001251' EXT +DTCCHN 001067' EXT +DTCINI 001161' INT +DTCINT 001166' INT +DTCONT 001237' +DTCRET 001265' EXT +DTCSAV 001203' EXT +DTR 003000 +DTRD2 001266' +DTRED0 001256' +DTREQ 001246' EXT +DTSIZ 000001 INT +DTW 040000 INT +DTWAIT 001145' EXT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 22-2 + SYMBOL TABLE + +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +DXIT 000515' +DXIT1 000514' +EE 100000 +ENP 000603' +ENPT 000567' +ENPT2 000571' +ENPTI 000620' +ENTRB 020000 INT +ERRFLG 001124' +ERROR 000607' +ERROR2 000627' +ERRTAL 001123' +F1 000457' +F2 000460' +F3 000461' +F4 000462' +FILL 000415' +FILL2 000450' +FILLC 000453' +GETF 000277' +GR 010000 +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODSET 001154' +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIERR 000065' EXT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSET 000000 EXT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 22-3 + SYMBOL TABLE + +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JDE 040000 +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOBPFI 000703' EXT +LOOKB 040000 INT +MTW 010000 INT +OBUFB 100000 INT +OUT 000325' EXT +OUTPB 004000 INT +PDP 000003 INT +PI 000004 SPD +PICHN 000100 INT +PIOMOD 000314' EXT +PROG 000007 INT +PUNIT 000652' EXT +PUUOAC 000063' EXT +RB 000200 +RD 000300 +RDDA 000517' +RDFW 000551' +RDRM 000531' +RDRV 000543' +READ 000527' +RIT 000535' +RRV 000463' +RUN 200000 INT +RUNABL 204000 INT +SETI 000267' +SETIOD 001270' EXT +SETO 000272' +SL 220000 +SV0 001127' +SV1 001115' +SVAC 001130' +SVCNTR 001141' +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +THSDAT 000046' EXT +TTYATC 020000 INT +TTYUSE 010000 INT +UBEG 000343' INT +UBEG2 000350' +UBEG3 000370' +UBEGX 000366' + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 22-4 + SYMBOL TABLE + +UBKN 001117' +UBLK 000001 +UBUF 001121' INT +UCHA 000042 +UCHN 000001 +UDIR 000364' EXT +UDIR2 000016' +UDIR3 000022' +UDIR4 000026' +UDIREN 000200 +UDIRIN 000100 +UDIRK1 000034' +UDIRLN 000004 +UDIRSH 000000' +UDMP 001125' +UDMP0 000640' INT +UDMP1 000641' +UDMP1A 000674' +UDMP1B 000676' +UDMP1C 000712' +UDMP2 000723' +UDMPA 001126' +UDMPI 001022' INT +UDMPI2 001033' +UDMPO 000633' +UDMPRB 001053' +UDVDAT 001122' +UEND 000236' +UEND2 000242' +UENTER 000052' INT +UERRCN 001153' +UFREE 001064' EXT +UIN 000204' +UIN1 000217' +UIN2 000251' +UIN3 000254' +UIN4 000265' +UINTER 001142' +ULINKF 001000 +ULOOK 000035' INT +ULOOK1 000041' +UNIT 001116' +UNWFRE 000400 +UOFF 000615' +UOUT 000125' +UOUT1 000144' +UOUT2 000153' +UOUT3 000167' +UOUT4 000171' +UPROG 001120' +URDIR 002000 +UREV 010000 +USETR 000377' + DTSER2 - EXECUTIVE SYSTEM DEC-TAPE SERVICE WITH STACKING PAGE 22-5 + SYMBOL TABLE + +USETW 000375' +USRJDA 000064' EXT +USRMOD 010000 INT +USRREL 001026' EXT +USVDB 001151' +USVIOS 001152' +UTBERR 000373' +UTBKER 000374' EXT +UTC 000210 SPD +UTDSP 000112' ENT +UTIME 001244' +UTPCLR 000063' INT +UTPCLS 000312' INT +UTPREL 000326' INT +UTPRL1 000330' +UTS 000214 SPD +UTWDR 000311' INT +UUO 000014 INT +UX1 000001 +UX2 000002 +UX3 000005 +UXIT 000311' EXT +VEOT 000002 +WAIT1 000342' EXT +WD 000700 +WSYNC 000363' EXT +WTDA 000523' +WTFW 000563' +WTRM 000537' +WTRV 000555' + EEEEEEEEEEEEEEE RRRRRRRRRRRR RRRRRRRRRRRR CCCCCCCCCCCC OOOOOOOOO NNN NNN +EEEEEEEEEEEEEEE RRRRRRRRRRRR RRRRRRRRRRRR CCCCCCCCCCCC OOOOOOOOO NNN NNN +EEEEEEEEEEEEEEE RRRRRRRRRRRR RRRRRRRRRRRR CCCCCCCCCCCC OOOOOOOOO NNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNNNNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNNNNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNNNNN NNN +EEEEEEEEEEEE RRRRRRRRRRRR RRRRRRRRRRRR CCC OOO OOO NNN NNN NNN +EEEEEEEEEEEE RRRRRRRRRRRR RRRRRRRRRRRR CCC OOO OOO NNN NNN NNN +EEEEEEEEEEEE RRRRRRRRRRRR RRRRRRRRRRRR CCC OOO OOO NNN NNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNNNNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNNNNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNNNNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNN +EEE RRR RRR RRR RRR CCC OOO OOO NNN NNN +EEEEEEEEEEEEEEE RRR RRR RRR RRR CCCCCCCCCCCC OOOOOOOOO NNN NNN +EEEEEEEEEEEEEEE RRR RRR RRR RRR CCCCCCCCCCCC OOOOOOOOO NNN NNN +EEEEEEEEEEEEEEE RRR RRR RRR RRR CCCCCCCCCCCC OOOOOOOOO NNN NNN + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :ERRCON.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:20 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2524 +File will be deleted after printing + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 1 + 8-9-65 + + 00010 XLIST + 01930 LIST + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 7 + 8-9-65 + + + 00010 TITLE ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS + 00020 SUBTTL 8-9-65 + 00030 EXTERNAL APRCHL,APRRET,HOLD,HOLDI,APRCHN + 00040 EXTERNAL JOB,JOBADR,JOBREL,TTYFND,TTYCTR,TTYSTR + 00050 EXTERNAL JBTADR, UXIT,JOBPDP,JOBTRP,USRPDP,UBUF,PJOBN + 00060 EXTERNAL CPOPJ,HOLDI1,WAIT1,USRPOV,JOBPFI + 00070 EXTERNAL CRLF,MJOBPD,JOBPDL,CPOPJ1 + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 2 + 8-9-65 + + + 00100 ;CALL: PUSHJ PDP,ADRCK + 00110 ; HRRZ TAC,LOC + 00120 ; OK RETURN + + 00140 INTERNAL ADRCK + + 000000' 261140 000001 00160 ADRCK: PUSH PDP, TAC + 000001' 256023 777777 00170 XCT @-1(PDP) + 000002' 350003 777777 00180 AOS -1(PDP) + 000003' 261140 000002 00190 PUSH PDP,TAC1 + 000004' 135100 000000* 00200 LDB TAC1,PJOBN + 000005' 554102 000000* 00210 HLRZ TAC1,JBTADR(TAC1) + 000006' 303040 000000* 00220 CAILE TAC,JOBPFI ;IN IO PROTECTED PART OF DATA AREA? + 000007' 313040 000002 00230 CAMLE TAC,TAC1 ;NO,IS IT GREATER THAN PROTECTION? + 000010' 260140 000014' 00240 PUSHJ PDP,ADRERR ;YES + 000011' 262140 000002 00250 POP PDP,TAC1 ;NO + 000012' 262140 000001 00260 POP PDP, TAC + 000013' 263140 000000 00270 POPJ PDP, + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 3 + 8-9-65 + + + 00300 INTERNAL ADRERR + + 000014' 550100 000003 00320 ADRERR: HRRZ TAC1,PDP + 000015' 317100 000000* 00330 CAMG TAC1,JOBADR ;IS THIS ERROR AT UUO OR INTERRUPT SERV + 000016' 254000 000027' 00340 JRST ADRERI ;INTERRUPT SERVICE LEVEL + 000017' 265040 000231' 00350 JSP TAC,ERRPTU + 000020' 440700 000023' 00360 POINT 7,AERM1 + 000021' 260140 000155' 00370 PUSHJ PDP,ERNAM + 000022' 254000 000207' 00380 JRST ERSYC1 + + 000023' 406110 451212 00400 AERM1: ASCIZ /ADDRESS CHECK FOR / + 000024' 516464 041620 + 000025' 426071 320214 + 000026' 476444 000000 + + 000027' 135200 000004* 00420 ADRERI: LDB ITEM, PJOBN + 000030' 265040 000232' 00430 JSP TAC,ERRPNT + 000031' 440700 000023' 00440 POINT 7,AERM1 + 000032' 260140 000155' 00450 PUSHJ PDP,ERNAM + 000033' 201100 000045' 00460 MOVEI TAC1,AERM3 + 000034' 260140 000333' 00470 PUSHJ PDP,MESPNT + 000035' 250303 000000 00480 ADRER2: EXCH DEVDAT, (PDP) ;GET ADDRESS OF D.D. BLOCK DECTECTING ER + 000036' 135040 000422' 00490 LDB TAC, [POINT 3, DEVCHR(DEVDAT), 11] ;GET PI CHANNEL NO. + 000037' 261140 000001 00500 PUSH PDP, TAC ;AND SAVE + 000040' 200046 000003 00510 MOVE TAC,DEVSER(DEVDAT) + 000041' 260141 000000 00520 PUSHJ PDP,DRL(TAC) ;RELEASE DEVICE + 000042' 262140 000001 00530 POP PDP, TAC ;RESTORE PI CHANNEL NO. + 000043' 250303 000000 00540 EXCH DEVDAT,(PDP) + 000044' 254000 000000* 00550 JRST HOLDI ;AND GO DISMISS CHANNEL + + 000045' 202112 551222 00570 AERM3: ASCIZ / DURING INTERRUPT/ + 000046' 472164 044634 + 000047' 522132 251252 + 000050' 502500 000000 + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 4 + 8-9-65 + + + 00600 INTERNAL APRILM + 00610 EXTERNAL USRREL + + 200000 00630 POVF=200000 + 400000 00640 POVC=400000 + 010000 00650 NXM=10000 + 020000 00660 ILM=20000 + + 000051' 201040 000000* 00680 APRILM: MOVEI TAC,APRCHN + 000052' 700340 020000 00690 CONSO APR,ILM + 000053' 254000 000100' 00700 JRST APRNXM + 000054' 700201 020000 00710 CONO APR,ILM(TAC) + 000055' 550040 000000* 00720 HRRZ TAC,APRCHL + 000056' 313040 000000* 00730 CAMLE TAC, USRREL + 000057' 254000 000064' 00740 JRST APRJRS + 000060' 265040 000231' 00750 JSP TAC,ERRPTU + 000061' 440700 000070' 00760 POINT 7,APM1 + 000062' 260140 000144' 00770 APRIL1: PUSHJ PDP,EPTADR + 000063' 254000 000132' 00780 JRST APRDMS ;GO DISMISS APR CHANNEL + + 000064' 265040 000231' 00800 APRJRS: JSP TAC,ERRPTU + 000065' 440700 000073' 00810 POINT 7,APM2 + 000066' 260140 000144' 00820 PUSHJ PDP,EPTADR + 000067' 254000 000132' 00830 JRST APRDMS + + 000070' 446311 420232 00850 APM1: ASCIZ /ILL MEM REF/ + 000071' 426324 051212 + 000072' 430000 000000 + + 000073' 502064 042660 00870 APM2: ASCIZ /PC EXCEEDS MEM BOUND/ + 000074' 416130 542246 + 000075' 202330 546500 + 000076' 412372 547210 + 000077' 000000 000000 + + + + + 000100' 700340 010000 00920 APRNXM: CONSO APR,NXM + 000101' 254000 000111' 00930 JRST APRPDL + 000102' 700201 010000 00940 CONO APR,NXM(TAC) + 000103' 265040 000231' 00950 JSP TAC,ERRPTU + 000104' 440700 000106' 00960 POINT 7,APM3 + 000105' 254000 000062' 00970 JRST APRIL1 + + 000106' 472371 620212 00990 APM3: ASCIZ /NON EX MEM/ + 000107' 541011 542632 + 000110' 000000 000000 + + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 5 + 8-9-65 + + + 000111' 700340 200000 01030 APRPDL: CONSO APR,POVF + 000112' 265240 000202' 01040 JSP DAT, ERROR ;NOT APR, MUST BE HARDWARE PROB. + 000113' 700201 400000 01050 CONO APR,POVC(TAC) + 000114' 200040 000055* 01060 MOVE TAC,APRCHL + 000115' 332100 000000* 01070 SKIPE TAC1,USRPOV + 000116' 607040 010000 01080 TLNN TAC,10000 ;WAS OVF IN USER MODE? + 000117' 254000 000122' 01090 JRST PDLOV ;NO, GO PRINT MESSAGE + 000120' 542100 000114* 01100 HRRM TAC1,APRCHL ;RESET RETURN + 000121' 254000 000000* 01110 JRST APRRET ;DISMISS CLOCK + 000122' 265040 000231' 01120 PDLOV: JSP TAC,ERRPTU + 000123' 440700 000134' 01130 POINT 7,APM4 + 000124' 260140 000144' 01140 PUSHJ PDP,EPTADR + 000125' 200040 000120* 01150 MOVE TAC,APRCHL + 000126' 603040 010000 01160 TLNE TAC,10000 + 000127' 254000 000132' 01170 JRST APRDMS ;GO DISMISS APR CHANNEL + 000130' 201100 000225' 01180 MOVEI TAC1,ERMS1 + 000131' 260140 000340' 01190 PUSHJ PDP,MESPC + 000132' 201040 000000 01200 APRDMS: MOVEI TAC, 0 ;SET TO DISMISS APR CHANNEL + 000133' 254000 000000* 01210 JRST HOLDI1 + + 000134' 502111 420236 01230 APM4: ASCIZ .PDL OV. + 000135' 530000 000000 + + 000136' 202032 420212 01250 APMSYS: ASCIZ / AT EXEC LOC / + 000137' 542130 320230 + 000140' 476064 000000 + + + 000141' 202032 420252 01280 APMUSR: ASCIZ / AT USER LOC / + 000142' 516132 220230 + 000143' 476064 000000 + + + 000144' 200040 000125* 01310 EPTADR: MOVE TAC,APRCHL + 000145' 261140 000001 01320 EPTAD1: PUSH PDP,TAC ;PPRINT "AT EXEC LOC " OR "AT USER LOC" + 000146' 201100 000136' 01330 MOVEI TAC1,APMSYS + 000147' 603040 010000 01340 TLNE TAC,10000 + 000150' 201100 000141' 01350 MOVEI TAC1,APMUSR + 000151' 260140 000333' 01360 PUSHJ PDP,MESPNT + 000152' 262140 000001 01370 POP PDP,TAC + 000153' 405040 777777 01380 ANDI TAC,-1 + 000154' 254000 000344' 01390 JRST OCTPNT + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 6 + 8-9-65 + + + 01420 INTERNAL ERNAM + + + 000155' 201100 000167' 01450 ERNAM: MOVEI TAC1,ERRDEV + 000156' 260140 000333' 01460 PUSHJ PDP,MESPNT + 000157' 200100 000423' 01470 MOVE TAC1,[POINT 6,@-(PDP)] + 000160' 201000 000006 01480 MOVEI 0,6 + 000161' 134040 000002 01490 ERNAM1: ILDB TAC,TAC1 + 000162' 322040 000166' 01500 JUMPE TAC,.+4 + 000163' 271040 000240 01510 ADDI TAC,240 + 000164' 136040 000005 01520 IDPB TAC,DAT + 000165' 367000 000161' 01530 SOJG 0,ERNAM1 + 000166' 263140 000000 01540 POPJ PDP, + + 000167' 422132 644606 01560 ERRDEV: ASCIZ /DEVICE / + 000170' 425000 000000 + + 01580 INTERNAL DIRERR + + 000171' 262140 000000 01600 DIRERR: POP PDP,0 ;FLUSH RETURN ADDRESS + 000172' 265040 000231' 01610 JSP TAC,ERRPTU + 000173' 440700 000176' 01620 POINT 7,DIRER1 + 000174' 260140 000155' 01630 PUSHJ PDP,ERNAM + 000175' 254000 000207' 01640 JRST ERSYC1 + + 000176' 412030 420210 01660 DIRER1: ASCIZ /BAD DIRECTORY FOR / + 000177' 446450 541650 + 000200' 476453 120214 + 000201' 476444 000000 + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 7 + 8-9-65 + + + 01690 ; INTERNAL ERRDIS + + 01710 ;ERRDIS: LDB TAC,[POINT 4,DEVCHR(DEVDAT),17] + 01720 ; ADDI TAC,ERRC2 + 01730 ; SKIPL TAC1,@TAC + 01740 ; JRST 4,. + 01750 ; TLZ TAC1,400000 + 01760 ; MOVEM TAC1,@TAC + 01770 ; MOVE PDP,JOBPDP(PROG) + 01780 ; MOVE TAC,@TAC + 01790 ; HRLI TAC,PROG + 01800 ; MOVE TAC,@TAC + 01810 ; HLL TAC,1(PDP) + 01820 ; PUSH PDP,TAC + 01830 ; JRST UXIT + + 01850 ;ERRC2: XWD PROG,JOBTRP + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 8 + 8-9-65 + + + 01880 ;UNEXPLAINED ERROR ENTRY + 01890 ;CALL: JSP DAT, ERROR + + 01910 INTERNAL ERROR + 01920 EXTERNAL JOBPD1 + + 000202' 201200 000001 01940 ERROR: MOVEI ITEM,1 ;PRINT ON OPERATORS CONSOLE(JOB 1) + 000203' 265040 000232' 01950 JSP TAC,ERRPNT + 000204' 440700 000220' 01960 POINT 7,ERR1 + 000205' 550043 777776 01970 HRRZ TAC,-2(PDP) ;GET LOC OF CALL TO ERROR + 000206' 260140 000342' 01980 EPOCT: PUSHJ PDP,PCPNT + 000207' 201100 000225' 01990 ERSYC1: MOVEI TAC1,ERMS1 + + 000210' 260140 000340' 02010 ERSYCL: PUSHJ PDP,MESPC + 000211' 254000 000000* 02020 JRST HOLD + + 000212' 260140 000333' 02040 EPCAD0: PUSHJ PDP,MESPNT ;PRINT MESS + 000213' 260140 000216' 02050 EPCAD1: PUSHJ PDP,EPCAD ;PRINT LAST USER CALL TO MONITOR + 000214' 254000 000211* 02060 JRST HOLD + + 000215' 260140 000333' 02080 EPCADR: PUSHJ PDP,MESPNT + 000216' 200051 000000* 02090 EPCAD: MOVE TAC, JOBPD1(JDAT) ;GET LAST USER UUO CALL + 000217' 364040 000145' 02100 SOJA TAC,EPTAD1 + + 000220' 426452 247644 02120 ERR1: ASCIZ /ERROR IN MONITOR AT / + 000221' 202231 620232 + 000222' 476351 152236 + 000223' 511010 152100 + 000224' 000000 000000 + 000225' 355010 554212 02130 ERMS1: ASCIZ /; EXEC CALLED FROM / + 000226' 415010 340630 + 000227' 462130 420214 + 000230' 512371 520000 + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 9 + 8-9-65 + + + 02160 ;ERROR SETUP ROUTINE + 02170 ;CALL: MOVE ITEM, JOBNUMBER + 02180 ; MOVE DEVDAT, DEVICE DATA BLOCK IF DEVICE ERROR + 02190 ; JSP TAC, ERRPNT + 02200 ; POINT 7, ERROR MESSAGE + 02210 ; RETURN + + + 02240 INTERNAL ERRPNT,ERRPTU + + 000231' 200200 000000* 02260 ERRPTU: MOVE ITEM,JOB + 000232' 200344 000005* 02270 ERRPNT: MOVE PROG,JBTADR(ITEM) + 000233' 200444 000232* 02280 MOVE JDAT,JBTADR(ITEM) ;GET ADDRESS OF JOB DATA AREA + 000234' 322440 000240' 02290 JUMPE JDAT, ERRPD ;SET UP PDP IN USER AREA IF HE HAS CORE + 000235' 205140 000000* 02300 MOVSI PDP, MJOBPD + 000236' 541151 000000* 02310 HRRI PDP, JOBPDL(JDAT) + + 000237' 253140 000240' 02330 AOBJN PDP, .+1 ;LEAVE ROOM FOR UUO RETURN + 000240' 261140 000005 02340 ERRPD: PUSH PDP, DAT ;SAVE CLALL TO ERROR SUB + 000241' 261140 000006 02350 PUSH PDP, DEVDAT + 000242' 261140 000001 02360 PUSH PDP, TAC ;SAVE RETURN + 000243' 260140 000000* 02370 PUSHJ PDP, TTYFND + 000244' 201100 000254' 02380 MOVEI TAC1,SYSERR + 000245' 260140 000333' 02390 PUSHJ PDP,MESPNT + 000246' 200040 000004 02400 MOVE TAC, ITEM + 000247' 260140 000362' 02410 PUSHJ PDP,RADX10 + 000250' 260140 000000* 02420 PUSHJ PDP, CRLF ;PRINT CRLF + 000251' 200123 000000 02430 MOVE TAC1, @(PDP) + 000252' 260140 000333' 02440 PUSHJ PDP, MESPNT + 000253' 254000 000000* 02450 JRST CPOPJ1 + + 000254' 02470 SYSERR: ASCIZ / + 000254' 064250 551244 02480 ERROR IN JOB / + 000255' 476444 044634 + 000256' 202251 741100 + 000257' 000000 000000 + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 10 + 8-9-65 + + + 02510 ,ERROR TRAP HANDLING + + 02530 ;ERRTRP: LDB TAC,[POINT 4,DEVCHR(DEVDAT),17] + 02540 ; ADDI TAC,ERRC2 + 02550 ; SKIPG TAC1,@TAC + 02560 ; TLO TAC1,400000 + 02570 ; MOVEM TAC1,@TAC + 02580 ; AOS TAC + 02590 ; MOVE PDP,JOBPDP(PROG) + 02600 ; AOS TAC + 02610 ; MOVE TAC1,1(PDP) + 02620 ; PUSH PDP,TAC + 02630 ; HLL TAC1,0(PDP) + 02640 ; HRLI TAC1,PROG + 02650 ; MOVEM TAC,@TAC1 + 02660 ; JRST UXIT + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 11 + 8-9-65 + + + 02690 INTERNAL ILLINP + + 000260' 265040 000231' 02710 ILLINP: JSP TAC,ERRPTU + 000261' 440700 000270' 02720 POINT 7,ILLOT + 000262' 260140 000155' 02730 PUSHJ PDP,ERNAM + 000263' 265100 000212' 02740 JSP TAC1, EPCAD0 + 000264' 202070 147234 02750 ASCIZ / CANNOT DO INPUT/ + 000265' 476504 042236 + 000266' 202231 650252 + 000267' 520000 000000 + + 000270' 476532 450252 02770 ILLOT: ASCIZ /OUTPUT / + 000271' 521000 000000 + + + 02800 INTERNAL ILLINS + + 000272' 265040 000231' 02820 ILLINS: JSP TAC,ERRPTU + 000273' 440700 000275' 02830 POINT 7,ERRIL + 000274' 254000 000213' 02840 JRST EPCAD1 + + 000275' 446311 420222 02860 ERRIL: ASCIZ /ILL INST/ + 000276' 472472 400000 + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 12 + 8-9-65 + + + 02890 INTERNAL ILLMOD + + 000277' 265040 000231' 02910 ILLMOD: JSP TAC,ERRPTU + 000300' 440700 000303' 02920 POINT 7,ILLMO1 + 000301' 260140 000155' 02930 PUSHJ PDP,ERNAM + 000302' 254000 000213' 02940 JRST EPCAD1 + + 000303' 446311 420210 02960 ILLMO1: ASCIZ /ILL DEVICE DATA MODE FOR / + 000304' 426551 141612 + 000305' 202110 152202 + 000306' 202331 742212 + 000307' 202151 751100 + 000310' 000000 000000 + + 02980 INTERNAL ILLOUT + + 000311' 265040 000231' 03000 ILLOUT: JSP TAC,ERRPTU + 000312' 440700 000321' 03010 POINT 7,ILLIN + 000313' 260140 000155' 03020 PUSHJ PDP,ERNAM + 000314' 265100 000212' 03030 JSP TAC1,EPCAD0 + + 000315' 202070 147234 03050 ILM3: ASCIZ / CANNOT DO OUTPUT/ + 000316' 476504 042236 + 000317' 202372 552240 + 000320' 526500 000000 + + 000321' 446352 052650 03070 ILLIN: ASCIZ /INPUT / + 000322' 200000 000000 + 03080 INTERNAL IOIERR + + 000323' 265040 000231' 03100 IOIERR: JSP TAC,ERRPTU + 000324' 440700 000326' 03110 POINT 7,IOIER1 + 000325' 254000 000213' 03120 JRST EPCAD1 + + 000326' 446364 052236 03140 IOIER1: ASCIZ /IO TO UNASSIGNED CHANNEL/ + 000327' 202531 640646 + 000330' 516230 747212 + 000331' 421010 344202 + 000332' 472350 546000 + + 03160 ,CALL WITH DEST. POINTER IN DAT + 03170 ,SOURCE POINTER IN TAC1 + 03180 ,MOVES UNTIL A ZERO CHAR. IS FOUND + + 03200 INTERNAL MESPNT + 000333' 505100 440700 03210 MESPNT: HRLI TAC1,440700 + 000334' 134040 000002 03220 MES1: ILDB TAC, TAC1 + 000335' 322040 000000* 03230 JUMPE TAC,CPOPJ + 000336' 136040 000005 03240 IDPB TAC, DAT + 000337' 254000 000334' 03250 JRST MES1 + + 03270 ,ANY RADIX PRINT + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 12-1 + 8-9-65 + + 03280 , TAC1 = RADIX + 03290 , DAT = BYTE POINTER + 03300 , TAC = NUMBER + + 03320 INTERNAL OCTPNT, ANYRDX, PCPNT + 03330 EXTERNAL UUO0,JOBPD1 + + 000340' 260140 000333' 03350 MESPC: PUSHJ PDP, MESPNT ;PRINT LAST USER UUO CALL + 000341' 550051 000216* 03360 HRRZ TAC,JOBPD1(JDAT) + 000342' 275040 000001 03370 PCPNT: SUBI TAC,1 + 000343' 404040 777777 03380 AND TAC,-1 + 000344' 201100 000010 03390 OCTPNT: MOVEI TAC1,10 + 000345' 261140 000004 03400 ANYRDX: PUSH PDP,ITEM + 000346' 552100 000004 03410 HRRZM TAC1, ITEM + 000347' 260140 000352' 03420 PUSHJ PDP,OCTP1 + 000350' 262140 000004 03430 POP PDP,ITEM + 000351' 263140 000000 03440 POPJ PDP, + + 000352' 230040 000004 03460 OCTP1: IDIV TAC,ITEM + 000353' 506103 000000 03470 HRLM TAC1, (PDP) + 000354' 322040 000356' 03480 JUMPE TAC, .+2 + 000355' 260140 000352' 03490 PUSHJ PDP, OCTP1 + 000356' 554043 000000 03500 HLRZ TAC, (PDP) + 000357' 271040 000060 03510 ADDI TAC, "0" + 000360' 136040 000005 03520 IDPB TAC, DAT + 000361' 263140 000000 03530 POPJ PDP, + + 03550 INTERNAL RADX10 + + 000362' 261140 000002 03570 RADX10: PUSH PDP,TAC1 ;OUTPUT DECIMAL + 000363' 201100 000012 03580 MOVEI TAC1,12 + 000364' 260140 000345' 03590 PUSHJ PDP,ANYRDX + 000365' 262140 000002 03600 POP PDP,TAC1 + 000366' 263140 000000 03610 POPJ PDP, + + 03630 REPEAT 0,< + 03640 PCPNT: SUBI TAC,1 + 03650 OCTPNT: HRLZ TAC1,TAC + 03660 MOVSI TAC,-1 + 03670 LSHC TAC,3 + 03680 TRNN TAC,7 + 03690 JUMPN TAC1,.-2 + 03700 OCTPN1: ADDI TAC,"0" + 03710 IDPB TAC,DAT + 03720 JUMPGE TAC,CPOPJ + 03730 HLLZS TAC + 03740 LSHC TAC,3 + 03750 JRST OCTPN1 + 03760 > + + 03780 INTERNAL UTBKER + 000367' 135200 000027* 03790 UTBKER: LDB ITEM,PJOBN ;JOB NUMBER + 000370' 265040 000232' 03800 JSP TAC,ERRPNT + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 12-2 + 8-9-65 + + 000371' 440700 000401' 03810 POINT 7,UTERM + 000372' 200040 000000* 03820 MOVE TAC,UBUF + 000373' 275047 000000 03830 SUBI TAC,(PROG) + 000374' 260140 000344' 03840 PUSHJ PDP,OCTPNT + 000375' 201100 000424' 03850 MOVEI TAC1, [ASCII / /] + 000376' 260140 000333' 03860 PUSHJ PDP, MESPNT + 000377' 260140 000155' 03870 PUSHJ PDP,ERNAM + 000400' 254000 000035' 03880 JRST ADRER2 + + 000401' 446311 420210 03900 UTERM: ASCIZ /ILL DT BLOCK NO. , BUFFER AT / + 000402' 521010 246236 + 000403' 416264 047236 + 000404' 271005 420204 + 000405' 526150 642644 + 000406' 202032 420000 + + 03920 INTERNAL UUOERR + 03930 EXTERNAL UUO0 + + 000407' 265040 000231' 03950 UUOERR: JSP TAC,ERRPTU + 000410' 440700 000416' 03960 POINT 7,UUOER1 + 000411' 200040 000000* 03970 MOVE TAC, UUO0 ;UUO PC + 000412' 603040 010000 03980 TLNE TAC, 10000 ;WAS IT FROM USER? + 000413' 254000 000213' 03990 JRST EPCAD1 ;YES, JUST PRINT LOC OF CALL + 000414' 260140 000145' 04000 PUSHJ PDP,EPTAD1 ;NO, PRINT BOTH EXEC CALL + 000415' 254000 000207' 04010 JRST ERSYC1 ;AND USER CALL + + 000416' 446311 420240 04030 UUOER1: ASCIZ /ILL PROG. OP. USED/ + 000417' 512370 727100 + 000420' 476405 620252 + 000421' 516130 400000 + 04040 END, + 000422' 300306 000001 + 000423' 440623 000000 + 000424' 200000 000000 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000425 + +8K CORE USED + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 13 + SYMBOL TABLE + + 000320 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADRCK 000000' INT +ADRER2 000035' +ADRERI 000027' +ADRERR 000014' INT +AERM1 000023' +AERM3 000045' +AL 000001 INT +ANYRDX 000345' INT +APM1 000070' +APM2 000073' +APM3 000106' +APM4 000134' +APMSYS 000136' +APMUSR 000141' +APR 000000 SPD +APRCHL 000144' EXT +APRCHN 000051' EXT +APRDMS 000132' +APRIL1 000062' +APRILM 000051' INT +APRJRS 000064' +APRNXM 000100' +APRPDL 000111' +APRRET 000121' EXT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CPOPJ 000335' EXT +CPOPJ1 000253' EXT +CRLF 000250' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 13-1 + SYMBOL TABLE + +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DIRER1 000176' +DIRERR 000171' INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +EPCAD 000216' +EPCAD0 000212' +EPCAD1 000213' +EPCADR 000215' +EPOCT 000206' +EPTAD1 000145' +EPTADR 000144' +ERMS1 000225' +ERNAM 000155' INT +ERNAM1 000161' +ERR1 000220' +ERRDEV 000167' +ERRIL 000275' +ERROR 000202' INT +ERRPD 000240' +ERRPNT 000232' INT +ERRPTU 000231' INT +ERSYC1 000207' +ERSYCL 000210' +HOLD 000214' EXT +HOLDI 000044' EXT +HOLDI1 000133' EXT +I 000010 INT + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 13-2 + SYMBOL TABLE + +IB 000013 INT +IBUFB 200000 INT +ILLIN 000321' +ILLINP 000260' INT +ILLINS 000272' INT +ILLMO1 000303' +ILLMOD 000277' INT +ILLOT 000270' +ILLOUT 000311' INT +ILM 020000 +ILM3 000315' +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIER1 000326' +IOIERR 000323' INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000233' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000231' EXT +JOBADR 000015' EXT +JOBPD1 000341' EXT +JOBPDL 000236' EXT +JOBPDP 000000 EXT +JOBPFI 000006' EXT + ERRCON - ERROR HANDLING ROUTINE FOR MONITOR DECTECTED ERRORS PAGE 13-3 + SYMBOL TABLE + +JOBREL 000000 EXT +JOBTRP 000000 EXT +LOOKB 040000 INT +MES1 000334' +MESPC 000340' +MESPNT 000333' INT +MJOBPD 000235' EXT +MTW 010000 INT +NXM 010000 +OBUFB 100000 INT +OCTP1 000352' +OCTPNT 000344' INT +OUTPB 004000 INT +PCPNT 000342' INT +PDLOV 000122' +PDP 000003 INT +PICHN 000100 INT +PJOBN 000367' EXT +POVC 400000 +POVF 200000 +PROG 000007 INT +RADX10 000362' INT +RUN 200000 INT +RUNABL 204000 INT +SYSERR 000254' +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYCTR 000000 EXT +TTYFND 000243' EXT +TTYSTR 000000 EXT +TTYUSE 010000 INT +UBUF 000372' EXT +USRMOD 010000 INT +USRPDP 000000 EXT +USRPOV 000115' EXT +USRREL 000056' EXT +UTBKER 000367' INT +UTERM 000401' +UUO 000014 INT +UUO0 000411' EXT +UUOER1 000416' +UUOERR 000407' INT +UXIT 000000 EXT +WAIT1 000000 EXT + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC OOOOOOOOO NNN NNN TTTTTTTTTTTTTTT + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC OOOOOOOOO NNN NNN TTTTTTTTTTTTTTT + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC OOOOOOOOO NNN NNN TTTTTTTTTTTTTTT + III OOO OOO CCC OOO OOO NNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNN TTT + III OOO OOO CCC OOO OOO NNNNNN NNN TTT + III OOO OOO CCC OOO OOO NNNNNN NNN TTT + III OOO OOO CCC OOO OOO NNNNNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNNNNN TTT + III OOO OOO CCC OOO OOO NNN NNNNNN TTT + III OOO OOO CCC OOO OOO NNN NNNNNN TTT + III OOO OOO CCC OOO OOO NNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNN TTT + III OOO OOO CCC OOO OOO NNN NNN TTT + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC OOOOOOOOO NNN NNN TTT + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC OOOOOOOOO NNN NNN TTT + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC OOOOOOOOO NNN NNN TTT + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :IOCONT.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:20 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2505 +File will be deleted after printing + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 1 + 8-9-95 + + 00010 XLIST + 01930 LIST + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 7 + 8-9-95 + + + 00010 TITLE IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS + 00020 SUBTTL 8-9-95 + 00030 EXTERNAL BUFCLC,ERROR,IOSETC,IOIERR,BUFCLR + 00040 EXTERNAL SETBYT,UINTQ,WAIT1,WSYNC,ADRCK + 00050 EXTERNAL UXIT,USRJDA,JOBJDA,ILLMOD,PUUOAC,PIOMOD + 00060 EXTERNAL JOB,ASSIN,PJOBN,ADRERR,USRREL,CUXIT1,CUXIT2 + 00070 EXTERNAL SETIOS + + 00090 ;FOR PURPOSES OF COMMENTING THIS SUBROUTINE THE + 00100 ;TERM BUFFER HEADER SHALL REFER TO THE 3 WORD HEADER + 00110 ;WHICH IS USED BY THE USER PROGRAM AND THIS EXEC FOR + 00120 ;REFERING TO THE RING BUFFERS. + + 00140 ;THE CONTENTS OF THE 3 WORD HEADER (AS SET BY THE MONITOR FOR THE USE + 00150 ; FROM USERS PROGRAM BY AN INPUT OR AN OUTPUT UUO + 00160 ; WORD 2: BYTE POINTER TO CURRENT ITEM. + 00170 ; WORD 3: POSITIVE ITEM COUNT (NO. OF ITEMS LEFT ON + 00180 ; INPUT, NO. OF FREE ITEMS TO GO ON OUTPUT). + + 00200 ;EACH BUFFER IN THE RING HAS FOLLOWING FORMAT (AS THE USER SEES IT) + + 00220 ; WORD 1: RESERVED FOR BLOCK NUMBER FOR FIXED ADDRESS DEVIC + 00230 ; WORD 2: BIT 0=USE BIT FOR THIS BUFFER + 00240 ; BIT 1-17=NO. OF WORDS WHICH FOLLOW (LENGTH OF BUF + 00250 ; BIT 18-35=ADDRESS OF SECOND WORD OF NEXT BUFFER I + 00260 ; WORD 3: LH=LINK TO NEXT BLOCK (SET BY MONITOR FOR DECTAB + 00270 ; RH=NO. OF WORDS OF DATA WHICH FOLLOW (USUALLY + 00280 ; SET BY EXEC EXCEPT TO COMPUTE WORD COUNT + 00290 ; THAT HE WANTS TO COMPUTE WORD COUNT + 00300 ; HIMSELF INSTEAD OF HAVING THE MONITOR DO IT + 00310 ; USING THE BYTE POINTER IN THE 3 WORD HEADER). + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 2 + 8-9-95 + + + 00350 ,H. R. MORSE 2/21/65 + 00360 ,CALLING SEQUENCE + 00370 , CLOSE D, + 00380 , EXIT ALWAYS RETURNS HERE + 00390 , THIS ROUTINE PROCESSES THE CLOSE UUO AND DETERMINES WHETHER THE + 00400 ,OUTPUT ROUTINE SHOULD BE CALLED IF OUTPUT WERE ACTIVE, CLEARS + 00410 ,THE INPUT BUFFER AREA IF INPUT WERE ACTIVE, AND CLEARS THE + 00420 ,ITEM COUNTS OF BOTH INPUT AND OUTPUT HEADERS SERVING TO BOTH + 00430 ,TERMINATE THE USE OF THE DEVICE AND SET THE I/O ROUTINES TO + 00440 ,ACCEPT ANOTHER INPUT OR OUTPUT COMMAND IN A CLEAR STATE. + 00450 ,IN THE CASE OF OUTPUT DEVICES. THE CLOSE ROUTINE OF THE DEVICE HANDL + 00460 ,ING ROUTINE IS CALLED IN CASE ANY SPECIAL HANDLING IS REQUIRED. + 00470 ,MONITOR INTERFACE + 00480 , STORAGE: 30 + 00490 , ROUTINES CALLED: DCL, WAIT1, UXIT + 00500 , SYMBOLS SET/USED: + 00510 , ACCUMULATORS: DAT S/U PROG U + 00520 , DEVDAT U TAC S/U + 00530 , IOS S/U TAC1 S/U + 00540 , PDP U + 00550 , DEVICE DATA BLOCK: DEVBUF U + 00560 , DEVIOS S/U + 00570 , DEVSER U + 00580 , IO STATUS WORD: IOACT S IODTER S + 00590 , IOBEG S IOEND S + 00600 , IOBKTL 2 IOFST S + 00610 , IODEND S IOIMPM S + 00620 , IODERR S IOSTRT S + 00630 , IODISC S IOW S + 00640 , JOB BUFFER AREA: IOUSE S + 00650 , JBFCTR S + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 3 + 8-9-95 + + + + 00690 INTERNAL CLOSE1 + + 000000' 663300 002000 00710 CLOSE1: TLOE DEVDAT,CLOSB ;HAS A CLOSE ALREADY BEEN DONE? + 000001' 254000 000000* 00720 JRST UXIT ;YES, FOR THIS CHANNEL + 000002' 135040 000000* 00730 LDB TAC,PUUOAC ;USER DEVICE CHANNEL NO. + 000003' 502301 000000* 00740 HLLM DEVDAT,USRJDA(TAC) + 000004' 261140 000005 00750 PUSH PDP,DAT + 000005' 135040 000000* 00760 LDB TAC,PIOMOD + 000006' 305040 000016 00770 CAIGE TAC,DR + 000007' 254000 000013' 00780 JRST UCLS4 + 000010' 200046 000003 00790 MOVE TAC,DEVSER(DEVDAT) + 000011' 260141 000001 00800 PUSHJ PDP,DCL(TAC) + 000012' 254000 000060' 00810 JRST UCLS3 + 000013' 260140 000000* 00820 UCLS4: PUSHJ PDP,WAIT1; WAIT UNTIL DEVICE IS INACTIVE. + 000014' 606600 000002 00830 TRNN UUO,CLSIN ;SUPPRESS INPUT? + 000015' 607300 200000 00840 TLNN DEVDAT,IBUFB ;NO, WAS INPUT BUFFER SPECIFIED? + 000016' 254000 000041' 00850 JRST UCLS2 ;NO + 000017' 550106 000006 00860 HRRZ TAC1,DEVBUF(DEVDAT) + 000020' 505100 000007 00870 HRLI TAC1,PROG + 000021' 550260 000002 00880 HRRZ DAT,@TAC1 ;FIRST WORD OF 3 WORD BUFFER HEADER + 000022' 540120 000002 00890 HRR TAC1,@TAC1 ;REMEMBER CURRENT BUFFER IN TAC1 + 000023' 515040 400000 00900 HRLZI TAC,IOUSE ;USER BOTH FOR HEADER AND EACH BUFFER + 000024' 322240 000034' 00910 JUMPE DAT,UCLS1 ;HAS A RING BEEN SETUP?(NO IF 0) + 000025' 505240 000007 00920 HRLI DAT,PROG ;YES + 000026' 540260 000005 00930 UCLS0: HRR DAT,@DAT; ADVANCE CURRENT INPUT BUFFER ADDRESS + 00940 ADRCHK DAT ;IS ADDRESS OF? + 000027' 260140 000000* PUSHJ PDP,ADRCK + 000030' 550040 000005 HRRZ TAC,DAT + 000031' 412060 000005 00950 ANDCAM TAC,@DAT ;YES, CLEAR USE BIT. + 000032' 312100 000005 00960 CAME TAC1,DAT; DONE? + 000033' 254000 000026' 00970 JRST UCLS0 + 000034' 505240 000007 00980 UCLS1: HRLI DAT,PROG + 000035' 540246 000006 00990 HRR DAT,DEVBUF(DEVDAT) + 000036' 436060 000005 01000 IORM TAC,@DAT ;FLAG AS VIRGIN BUFFER IN 3 WORD HEADER + 000037' 271240 000002 01010 ADDI DAT,2; JBFCTR:=0 + 000040' 402020 000005 01020 SETZM @DAT ;CLEAR INPUT ITEM COUNT. + 000041' 606600 000001 01030 UCLS2: TRNN UUO,CLSOUT ;SUPPRESS OUTPUT? + 000042' 607300 100000 01040 TLNN DEVDAT,OBUFB ;NO.WAS OUPUT BUFFER SPECIFIED? + 000043' 254000 000060' 01050 JRST UCLS3 ;NO + 000044' 544246 000006 01060 HLR DAT, DEVBUF(DEVDAT) ;VIRGIN OUBPUT BUFFER? + 000045' 505240 000007 01070 HRLI DAT, PROG + 000046' 337020 000005 01080 SKIPG @DAT + 000047' 254000 000060' 01090 JRST UCLS3 ;YES + 000050' 200046 000003 01100 MOVE TAC,DEVSER(DEVDAT) + 000051' 260141 000001 01110 PUSHJ PDP,DCL(TAC); CLOSE OUTPUT BUFFER + 000052' 544246 000006 01120 HLR DAT,DEVBUF(DEVDAT) + 000053' 505240 000007 01130 HRLI DAT,PROG + 000054' 515040 400000 01140 HRLZI TAC,IOUSE + 000055' 436060 000005 01150 IORM TAC,@DAT + 000056' 271240 000002 01160 ADDI DAT,2 + 000057' 402020 000005 01170 SETZM @DAT; JBFCTR:=0 + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 3-1 + 8-9-95 + + 000060' 260140 000013* 01180 UCLS3: PUSHJ PDP,WAIT1 + 000061' 262140 000005 01190 POP PDP,DAT + 000062' 630000 000473' 01200 TDZ IOS,[XWD IOEND,IODEND] + 000063' 661000 000002 01210 TLO IOS,IOBEG + 000064' 202006 000002 01220 MOVEM IOS,DEVIOS(DEVDAT); IODISC:=0 + 000065' 254000 000001* 01230 JRST UXIT; EXIT THIS UUO + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 4 + 8-9-95 + + + + 01270 ,DEC 06 00 EX UUO L PT PRE 02 INBUF,OUTBUF + 01280 ,H. R. MORSE 64-12-26 + 01290 ,CALLING SEQUENCE + 01300 , INBUF D,N + 01310 , EXIT RETURNS HERE IF MEMORY NOT EXCEEDED + 01320 ,CALLING SEQUENCE + 01330 , OUTBUF D,N + 01340 , EXIT RETURNS HERE IF MEMORY NOT EXCEEDED + 01350 , SETS UP AN N BUFFER RING FOLLOWING THE USERS PROGRAM FOR DEVICE + 01360 , D AND INITIALIZES THE JOB BUFFER AREA HEADER: + 01370 , JBFADR0:=1, JBFADR 1-17:=0 + 01380 , JBFADR 18-35:=ADDRESS OF FIRST BUFFER IN RING + 01390 ,INPUT SETS DEVIAD:=ADDRESS OF FIRST BUFFER IN RING + 01400 ,OUTPUT SET DEVOAD:=ADDRESS OF FIRST BUFFER IN RING + 01410 ,BUFPNT IS RESTORED. + 01420 ,MONITOR INTERFACE + 01430 , STORAGE:13 + 01440 , ROUTINES CALLED: BUFCLC, UXIT + 01450 , SYMBOLS SET/USED: + 01460 , ACCUMULATORS: BUFPNT S/U PROG U + 01470 , DEVDAT U TAC S/U + 01480 , PDP U TAC1 S/U + 01490 , DEVICE DATA BLOCK: DEVBUF U + 01500 , DEVIAD S + 01510 , DEVOAD S + 01520 , JOB BUFFER AREA: JBFADR S + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 5 + 8-9-95 + + + + 01560 INTERN UINBF, UOUTBF + + 000066' 261140 000012 01580 UOUTBF: PUSH PDP,BUFPNT; SAVE BUFPNT ON STACK + 000067' 260140 000000* 01590 PUSHJ PDP,BUFCLC; SET UP BUFFER RIGH + 000070' 544046 000006 01600 HLR TAC,DEVBUF(DEVDAT);TAC:=OUTPUT BUFFER AREA HEADER ADDRE + 000071' 542506 000010 01610 HRRM BUFPNT,DEVOAD(DEVDAT);DEVOAD:=ADDRESS OF FIRST BUFFER + 01620 , IN RING + 000072' 505040 000007 01630 UOBF1: HRLI TAC,PROG; RELOCATE BUFFER AREA HEADER ADDRESS + 000073' 202520 000001 01640 MOVEM BUFPNT,@TAC; JBFADR:=IOUSE,ADDRESS OF FIRST BUFFER + 01650 , IN RING + 000074' 262140 000012 01660 POP PDP,BUFPNT; RESTORE BUFPNT FROM STACK + 000075' 254000 000065* 01670 JRST UXIT; EXIT THIS UUO + 000076' 261140 000012 01680 UINBF: PUSH PDP,BUFPNT; SAVE BUFPNT ON STACK + 000077' 260140 000067* 01690 PUSHJ PDP,BUFCLC; SET UP BUFFER RING + 000100' 542506 000007 01700 HRRM BUFPNT,DEVIAD(DEVDAT); DEVIAD:=ADDRESS OF FIRST BUFFER + 01710 , IN RING + 000101' 540046 000006 01720 HRR TAC,DEVBUF(DEVDAT); TAC:=INPUT BUFFER AREA HEADER ADDRE + 000102' 254000 000072' 01730 JRST UOBF1 + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 6 + 8-9-95 + + + + 01770 ,DEC 06 00 EX UUO L PT PRE 03 INIT + 01780 ,H. R. MORSE AND D. A. WITCRAFT 2/21/65 + 01790 ,CALLING SEQUENCE + 01800 , INIT D,MODUS D=JOB DEVICE CHANNEL + 01810 , MODUS=IORDEL,IOCON,IOWC,MODE. + 01820 , SIXBIT/NAME/ DEVICE NAME + 01830 , XWD OBUF,IBUF BUFFER AREA HEADER ADDRESS + 01840 , EXIT1 DEVICE NOT AVAILABLE + 01850 , EXIT2 DEVICE PROPERLY AVAILABLE + 01860 ,THE LEFT HALF OF NAME CONTAINS THE THREE LETTER DEVICE MNEMONIC, + 01870 , THE RIGHT HALF IS EITHER ZOER (SYSTEM WILL ASSIGN AN ARBITRARY + 01880 , UNIT) OR NON-ZERO TO REQUEST A SPECIFIC UNIT (LEFT JUSTIFIED). + 01890 ,IF THE SELECTED DEVICE IS NOT AVAILABLE. CONTROL RETURNS TO EXIT1. + 01900 ,OTHERWISE, THE DEVICE IS ASSIGNED TO THE USER AND ATTACHED TO HIS + 01910 ,CHANNEL D. THE DEVICE IS INITIALIZED IN THE FOLLOWING MANNER AFTER + 01920 ,IOACT IS ZERO: + 01930 , IOBEG:=1 + 01940 , DATA MODE:=BITS 32-35 OF AC UUO + 01950 , IOCON:=BIT 31 OF AC UUO + 01960 , IOWC:=BIT 40 OF AC UUO + 01970 , IORDEL:=BIT 29 OF AC UUO + 01980 , IOACT:=IODEND:=IOBKTL:=IODTER:=IODERR:=IOIMPM:=0 + 01990 , JBFADR:=JBFCTR:=0 FOR THE SPECIFIED BUFFERS. + 02000 , DEVBUF:=OBUF,IBUF + 02010 ,MONITOR INTERFACE + 02020 , STORAGE: 20 + 02030 , ROUTINES CALLED: UINTQ, ASSIGN(UASG1),USEL,UINITZ,UXIT + 02040 , SYMBOLS SET/USED: + 02050 , ACCUMULATORS: DEVDAT U + 02060 , PDP U TAC U + 02070 , PROG U TAC1 S/U + 02080 , DEVICE DATA BLOCK: DEVBUF S + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 7 + 8-9-95 + + + + 02120 INTERN UINIT,UINIT1 + 000103' 135040 000002* 02130 UINIT: LDB TAC,PUUOAC ;USER DEVICE CHANNEL NO. + 000104' 332301 000003* 02140 SKIPE DEVDAT,USRJDA(TAC) ;IS A DEVICE ALREADY HERE? + 000105' 260140 000430' 02150 PUSHJ PDP,RELEA0 ;YES, RELEASE IT + 000106' 200600 000040 02160 MOVE UUO,40 ;RESTORE AC UUO FROM LOC 40 + 000107' 260140 000000* 02170 PUSHJ PDP,UINTQ ;GET SIXBIT DEVICE NAME FROM USER + 000110' 350003 000000 02180 AOS (PDP) + 000111' 200200 000000* 02190 UINIT1: MOVE ITEM,JOB ;CALLED BY SAVGET + 000112' 260140 000000* 02200 PUSHJ PDP,ASSIN; TRY TO ASSIGN DEVICE + 000113' 254000 000000* 02210 JRST CUXIT1; NOT AVAILABLE + 000114' 135040 000103* 02220 LDB TAC,PUUOAC + 000115' 552301 000104* 02230 HRRZM DEVDAT,USRJDA(TAC) ;STORE DDB ADR IN DEVICE TABL + 000116' 515040 000002 02240 HRLZI TAC,IOBEG + 000117' 202046 000002 02250 MOVEM TAC,DEVIOS(DEVDAT) + 000120' 260140 000000* 02260 PUSHJ PDP,SETIOS ;SET DDB IOS STATUS WORD + 02270 ;FROM RT. HALF OF UUO + 000121' 260140 000107* 02280 PUSHJ PDP,UINTQ + 000122' 505300 400000 02290 HRLI DEVDAT, INITB ;SET INIT UUO BIT + 000123' 607040 777777 02300 TLNN TAC,-1 + 000124' 254000 000127' 02310 JRST UINIT4 ;OUTPUT NOT SPECIFIED + 000125' 502046 000006 02320 HLLM TAC,DEVBUF(DEVDAT) + 000126' 661300 100000 02330 TLO DEVDAT,OBUFB ;SET OUTPUT BUFFER SPECIFIED BIT + 000127' 606040 777777 02340 UINIT4: TRNN TAC,-1; IS IBUF SPECIFIED? + 000130' 254000 000133' 02350 JRST UINIT5 ;INPUT BUF NOT SPECIFIED + 000131' 542046 000006 02360 HRRM TAC,DEVBUF(DEVDAT); DEVBUF 18-35:=IBUF + 000132' 661300 200000 02370 TLO DEVDAT,IBUFB ;SET INPUT BUFFER SPECIFIED BIT + 000133' 550100 000001 02380 UINIT5: HRRZ TAC1,TAC; TAC1:=PROG,IBUF + 000134' 260140 000142' 02390 PUSHJ PDP,UINITZ; JBFADR:=JBFCTR:=0 FOR IBUF + 000135' 544100 000001 02400 HLR TAC1,TAC; TAC1:=PROG,OBUF + 000136' 260140 000142' 02410 PUSHJ PDP,UINITZ; JBFADR:=JBFCTR:=0 FOR OBUF + 000137' 135040 000114* 02420 LDB TAC,PUUOAC ;STORE UUO BITS FOR THIS CHANNEL + 000140' 502301 000115* 02430 HLLM DEVDAT,USRJDA(TAC) + 000141' 254000 000000* 02440 JRST CUXIT2 + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 8 + 8-9-95 + + + + 02480 ,DEC 06 00 EX COM L PT PRE 03 UINITZ + 02490 ,H. R. MORSE 64-12-26 + 02500 ,CALLING SEQUENCE + 02510 , PUSHJ PDP,UINITZ + 02520 , EXIT RETURNS HERE IF MEMORY NOT EXCEEDED. + 02530 ,SETS JBFADR:=JBFCTR:=0 FOR THE BUFFER AREA HEADER WHOSE ADDRESS + 02540 ,IS IN AC TAC1. ALSO,JBFPTR 0-5:=JBFPTR 12-17:=0,JBFPTR 6-11:=BYTE S + 02550 ,MONITOR INTERFACE + 02560 , STORAGE:15 + 02570 , ROUTINES CALLED: ADRCK, SETBYT + 02580 , SYMBOLS SET/USED: + 02590 , ACCUMULATORS: PDP U TAC S/U + 02600 , TAC1 S/U + 02610 , JOB BUFFER AREA: JBFADR S + 02620 , JBFCTR S + 02630 , JBFPTR S + 02640 INTERN UINITZ + + 000142' 606100 777777 02660 UINITZ: TRNN TAC1,-1; IS BUFFER SPECIFIED? + 000143' 263140 000000 02670 POPJ PDP,;RETURN + 000144' 505100 000007 02680 HRLI TAC1,PROG + 000145' 260140 000027* 02690 PUSHJ PDP,ADRCK ;CHECK 3 WORD BUFFER HEADER + 000146' 551042 000002 02700 HRRZI TAC,2(TAC1) + 000147' 402020 000002 02710 SETZM @TAC1; JBFADR:=0 + 000150' 350000 000002 02720 AOS TAC1 + 000151' 261140 000001 02730 PUSH PDP,TAC + 000152' 261140 000002 02740 PUSH PDP,TAC1 + 000153' 350000 000002 02750 AOS TAC1 + 000154' 402020 000002 02760 SETZM @TAC1; JBFCTR:=0 + 000155' 260140 000000* 02770 PUSHJ PDP,SETBYT; JBFPTR 6-11:=BYTE SIZE + 000156' 621040 770077 02780 TLZ TAC,770077 + 000157' 262140 000002 02790 POP PDP,TAC1 + 000160' 502060 000002 02800 HLLM TAC,@TAC1 + 000161' 262140 000001 02810 POP PDP,TAC + 000162' 263140 000000 02820 POPJ PDP,; RETURN + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 9 + 8-9-95 + + + + 02860 INTERNAL IN + 000163' 603000 000020 02870 IN: TLNE IOS,IO ;IS THIS DEVICE ALREADY DOING OUTPUT! + 000164' 260140 000060* 02880 PUSHJ PDP,WAIT1 ;YES,WAIT TILL IT IS FINISHED + 000165' 135040 000137* 02890 LDB TAC,PUUOAC ;SET BIT THAT SAYS AN INPUT UUO HAS OCC + 000166' 661300 010000 02900 TLO DEVDAT,INPB ;FOR THIS DEVICE + 000167' 502301 000140* 02910 HLLM DEVDAT,USRJDA(TAC) ;IN LH OF CURRENT JOB DEVICE + 000170' 135040 000005* 02920 LDB TAC,PIOMOD ;IO MODE + 000171' 301040 000016 02930 CAIL TAC,DR ;IS THE IO MODE DUMP MODE? + 000172' 254000 000271' 02940 JRST INDMP ;YES + 000173' 540246 000006 02950 IN1: HRR JBUF,DEVBUF(DEVDAT) ;NO, GET ADDRESS OF R WORD BU + 000174' 515040 400000 02960 HRLZI TAC,IOUSE ;BUFFER INUSE BIT + 000175' 505240 000007 02970 HRLI JBUF,PROG ;SET INDEX FIELD FOR RELOCATION USING A + 000176' 260140 000145* 02980 PUSHJ PDP,ADRCK ;CHECK BUFFER HEADER + 000177' 551045 000002 02990 HRRZI TAC,2(JBUF) ;END ADDRESS OF 3 WORD HEADER + 000200' 200120 000005 03000 MOVE TAC1,@JBUF ;GET WORD 1 OF 3 WORD BUFFER HEADER (PO + 000201' 505100 000007 03010 HRLI TAC1,PROG ;SET INDEX FIELD COR RELOCATION USING A + 000202' 337020 000005 03020 SKIPG @JBUF ;HAS A BUFFER RING BEEN SET UP (RH NON- + 03030 ;WHICH HAS BEEN REFERENCED BY PREVIOUS + 000203' 254000 000256' 03040 JRST INPUTF ;NO, GO SET UP BUFFER IF NECESSARY AND + 03050 ADRCHK TAC1 ;YES, CHECK ADDRESS TO SEE IF IN BOUNDS + 000204' 260140 000176* PUSHJ PDP,ADRCK + 000205' 550040 000002 HRRZ TAC,TAC1 + 000206' 413060 000002 03060 ANDCAB TAC,@TAC1 ;FLAG THIS BUFFER AS BEING FILLED (USE + 03070 ;AND GET POINTER TO NEXT BUFFER + 000207' 542060 000005 03080 HRRM TAC,@JBUF ;SET WORD 1 IN 3 WORD HEADER TO NEXT BU + 03090 ADRCHK TAC ;AND CHECK ITS ADDRESS TO SEE IF IN BOUNDS + 000210' 260140 000204* PUSHJ PDP,ADRCK + 000211' 550040 000001 HRRZ TAC,TAC + 000212' 200006 000002 03100 INPUT0: MOVE IOS,DEVIOS(DEVDAT) ;GET IO STATUS WORD + 000213' 606000 010000 03110 TRNN IOS,IOACT ;IS THE DEVICE ALREADY ACTIVE (FILLING + 000214' 254000 000220' 03120 JRST INPT0B ;NO. + 000215' 606000 000040 03130 TRNN IOS,IOCON ;DOES THE USER WANT TO STOP AFTER EVERY + 000216' 254000 000224' 03140 JRST INPT0C ;NO. HE WANTS NORMAL CONTINUOUS OVERLAP + 000217' 260140 000000* 03150 PUSHJ PDP,WSYNC ;YES, WAIT TILL DEVICE FINISHES WITH ON + 000220' 505040 000007 03160 INPT0B: HRLI TAC,PROG ;SET FOR RELOCATION + 000221' 540060 000001 03170 HRR TAC,@TAC ;GET POINTER 1 BLOCK AHEAD OF NEXT BBUF + 000222' 331020 000001 03180 SKIPL @TAC + 000223' 260140 000276' 03190 PUSHJ PDP,CALIN + 000224' 540120 000002 03200 INPT0C: HRR TAC1,@TAC1 + 000225' 335020 000002 03210 INPT0A: SKIPGE @TAC1 + 000226' 254000 000236' 03220 JRST INPUT2 + 000227' 260140 000217* 03230 INPUT1: PUSHJ PDP,WSYNC + 000230' 335020 000002 03240 SKIPGE @TAC1 + 000231' 254000 000236' 03250 JRST INPUT2 + 000232' 612000 000474' 03260 TDNE IOS,[XWD IOEND,IODERR] + 000233' 254000 000250' 03270 JRST INEOF + 000234' 200006 000002 03280 MOVE IOS,DEVIOS(DEVDAT) + 000235' 254000 000227' 03290 JRST INPUT1 + + 000236' 271100 000001 03310 INPUT2: ADDI TAC1,1 + 000237' 550220 000002 03320 HRRZ ITEM,@TAC1 + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 9-1 + 8-9-95 + + 000240' 275100 000001 03330 SUBI TAC1,1 + 000241' 261140 000004 03340 PUSH PDP,ITEM ;SAVE WORD COUNT AS STORED BY IO SERVIC + 000242' 260140 000000* 03350 PUSHJ PDP,IOSETC + 000243' 262140 000004 03360 POP PDP,ITEM + 000244' 135040 000170* 03370 LDB TAC,PIOMOD ;GET DEVICE DATA MODE + 000245' 306040 000010 03380 CAIN TAC, I ;IMAGE MODE? + 000246' 202220 000005 03390 MOVEM ITEM,@JBUF ;YES, STORE WORD COUNT NOT ITEM COUNT + 000247' 254000 000075* 03400 JRST UXIT + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 10 + 8-9-95 + + + + 000250' 551000 020000 03440 INEOF: HRRZI IOS,IODEND + 000251' 436006 000002 03450 IORM IOS,DEVIOS(DEVDAT) + 000252' 254000 000247* 03460 JRST UXIT + + 000253' 540100 000014 03480 INPUTA: HRR TAC1,UUO + 000254' 412060 000002 03490 ANDCAM TAC,@TAC1 + 000255' 254000 000212' 03500 JRST INPUT0 + + 03520 ;HERE ON FIRST INPUT AFTER INIT, INIT & LOOKUP, OR INIT & LOOKUP & IN + 000256' 412060 000005 03530 INPUTF: ANDCAM TAC,@JBUF ;MARK THAT BUFFERS HAVE BEEN REFERENCED + 000257' 540060 000005 03540 HRR TAC,@JBUF ;PICKUP ADDRESS OF FIRST BUFFERE IN RING + 000260' 542046 000007 03550 HRRM TAC,DEVIAD(DEVDAT) ;SET CURRENT RING BUFFER ADDR + 03560 ;IN DEVICE DATA BLOCK + 000261' 336020 000005 03570 SKIPN @JBUF ;HAS A RING BEEN SET UP YET? + 000262' 254000 000265' 03580 JRST INPUT3 ;NO, GO SET UP A 2 BUFFER RING + 000263' 260140 000276' 03590 PUSHJ PDP,CALIN ;YES, GO START TO SERVICE ROUTINE + 03600 ;FILLING BUFFER + 000264' 254000 000225' 03610 JRST INPT0A + 000265' 541600 000002 03620 INPUT3: HRRI UUO,2 ;BUFFERS NOT SETUP YET. + 03630 ;SET UP 2 + 000266' 260140 000076' 03640 PUSHJ PDP, UINBF + 000267' 513000 000014 03650 HLLZS UUO ;CLEAR RIGHT HALF + 000270' 254000 000173' 03660 JRST IN1 + + 000271' 260140 000227* 03680 INDMP: PUSHJ PDP,WSYNC + 000272' 200046 000003 03690 MOVE TAC,DEVSER(DEVDAT) + 000273' 260141 000007 03700 PUSHJ PDP,DDI(TAC) + 000274' 260140 000164* 03710 PUSHJ PDP,WAIT1 + 000275' 254000 000252* 03720 JRST UXIT + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 11 + 8-9-95 + + + + + + 000276' 603000 000040 03780 CALIN: TLNE IOS,IOEND + 000277' 263140 000000 03790 POPJ PDP, + 000300' 260140 000271* 03800 PUSHJ PDP,WSYNC + 000301' 261140 000002 03810 PUSH PDP,TAC1 + 000302' 200046 000003 03820 MOVE TAC,DEVSER(DEVDAT) + 000303' 260141 000003 03830 PUSHJ PDP,DIN(TAC) + 000304' 262140 000002 03840 POP PDP,TAC1 + 000305' 263140 000000 03850 POPJ PDP, + + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 12 + 8-9-95 + + + + 03910 ,DEC 06 00 EX COM L PT PRE 03 OUTPUT + 03920 ,H.R. MORSE 2/21/65 + 03930 ,CALLING SEQUENCE + 03940 , OUTPUT D, + 03950 , EXIT + 03960 ,OR + 03970 , OUTPUT D, ADR + 03980 , EXIT + + 04000 ,IF INPUT IS ACTIVE, WAIT FOR IT TO COMPLETE. + 04010 ,IF DUMP MODE WAS SELECTED BY THE LAST INIT UUO., THEN A CHECK IS MADE + 04020 , TO SEE IF DUMP FILES ARE LEGAL FOR THIS DEVICE. IF DUMP FILES AR + 04030 , NOT LEGAL. (IORET=0) AN ERROR MESSAGE IS PRINTED ON THE TTY AND + 04040 , CONTROL IS TRANSFERRED T THE COMMAND INPUT ROUTINE. + 04050 , OTHERWISE,THE PROGRAM WAITS UNTIL THE DEVICE IS INACTIVE AND THEN + 04060 , WRITES THE DUMPFILE AND RETURNS CONTROL TO THE USERS PROGRAM + 04070 ,IF THE MODE IS NOT DUMP, THEN + 04080 ,1) IF ADR IS NOT ZERO, WAIT FOR DEVICE TO BECOME INACTIVE THEN SET T + 04090 , CURRENT BUFFER ADDRESS EQUAL TO ADR AND AN INDICATOR (JBFADR0) + 04100 , SPECIFYING THAT THIS BUFFER RING HAS NEVER BEEN REFERENCED FROM T + 04110 , USERS PROGRAM BY AN INPUT OR AN OUTPUT UUO. OTHERWISE, GO TO + 04120 , 2) DIRECTLY. + + 04140 ,2) IF THE BUFFER RING HAS NEVER BEEN REFERENCED (JBFADR0=1), THE + 04150 , BUFFER IS CLEARED. IOUSE SET TO ZERO AND + 04160 , IF THE CURRENT BUFFER ADDRESS IS ZERO, A TWO BUFFER RING IS SE + 04170 , THE GO TO 8 + 04180 , + 04190 ,3) IF THE BUFFER RING HAS BEEN REFERENCED (JBFADR0=0 ,THEN A C + 04200 , MADE TO DETERMINE IF THE WORD COUNT IS TO BE COMPUTED. + 04210 , IF THE WORD COUNT IS TO BE COMPUTED (IOWC=0), IT IS SET EQUAL + 04220 , TO THE ADDRESS FOR THE LAST DATA WORD MINUS THE ADDRESS OF THE + 04230 , BUFFER MINUS ONE, + + 04250 ,4) IOUSE IS SET TO ONE. INDICATING THAT THE BUFFER IS FULL OR BEING + 04260 , EMPTIED, AND THE CURRENT BUFFER ADDRESS IS ADVANCED. + + 04280 ,5) IF THE DEVICE IS NOT ACTIVE (IOACT=0), OUTPUT IS STARTED. + 04290 ,6) IF THE CURRENT BUFFER IS FULL OR BEING EMPTIED (IOUSE=1), + 04300 , THE PROGRAM WAITS UNTIL THE DEVICE IS INACTIVE + 04310 ,7) THE CURRENT BUFFER IS CLEARED. + 04320 ,8) THE ITEM POINTER IS INITIATED TO THE CURRENT BUFFER ADDRESS+1 + 04330 , AND THE ITEM COUNT IS SET TO THE PRODUCT OF THE BUFFER SIZE + 04340 , MINUS ONE AND THE INTEGER PART OF 36/BYTE SIZE. + 04350 ,9) RETURN TO THE USERS PROGRAM + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 13 + 8-9-95 + + + + 04390 ,MONITOR INTERFACE + 04400 , STORAGE: 54 + 04410 , ROUTINE CALLED: ADRCK, BUFCLR, CALOUT, INOUT, IOSETC, OUTA, + 04420 , OUTBUF, UXIT, WSYNC, + 04430 , SYMBOLS SET/USED: + 04440 , ACCUMULATORS: DEVDAT U PROG U + 04450 , IOS U TAC S/U + 04460 , ITEM S/U TAC1 S/U + 04470 , JBUF S/U UUO S + 04480 , PDP U + 04490 , DEVICE DATA BLOCK: DEVBUF U DEVOAD S + 04500 , IO STATUS WORD: IOACT U + 04510 , IOWC U + 04520 , JOB BUFFER AREA: JBADR S/U + 04530 , JBFCTR S + 04540 , JBPPTR S/U + 04550 , BUFFER SIZE U + 04560 , IOUSE S/U + 04570 , WORD COUNT S + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 14 + 8-9-95 + + + + + 04620 INTERN OUT + + 000306' 607000 000020 04640 OUT: TLNN IOS,IO ;IS THIS DEVICE ALREADY DOING INPUT? + 000307' 260140 000274* 04650 PUSHJ PDP,WAIT1 ;YES, WAIT TILL IT BECOMES INACTIVE + 000310' 135040 000165* 04660 LDB TAC,PUUOAC + 000311' 661300 004000 04670 TLO DEVDAT,OUTPB + 000312' 502301 000167* 04680 HLLM DEVDAT,USRJDA(TAC) + 000313' 135040 000244* 04690 LDB TAC,PIOMOD + 000314' 301040 000016 04700 CAIL TAC,DR + 000315' 254000 000402' 04710 JRST OUTDMP + 000316' 260140 000407' 04720 PUSHJ PDP,OUTA + 000317' 544246 000006 04730 OUT1: HLR JBUF,DEVBUF(DEVDAT) + 000320' 260140 000210* 04740 PUSHJ PDP,ADRCK ;CHECK END OF 3 WORD HEADER + 000321' 551045 000002 04750 HRRZI TAC,2(JBUF) + 000322' 505240 000007 04760 HRLI JBUF,PROG + 000323' 515040 400000 04770 HRLZI TAC, IOUSE + 000324' 337120 000005 04780 SKIPG TAC1, @JBUF ;HAS THIS BUFFER EVER BEEN + 04790 ;;REFERENCED?(JBFADR0=0?) + 000325' 254000 000361' 04800 JRST OUTF + 000326' 350000 000005 04810 AOS JBUF + 000327' 550060 000005 04820 HRRZ TAC, @JBUF + 000330' 271100 000001 04830 ADDI TAC1, 1 + 000331' 274040 000002 04840 SUB TAC, TAC1 + 000332' 505100 000007 04850 HRLI TAC1,PROG + 000333' 602000 000020 04860 TRNE IOS, IOWC ;COMPUTE WORD COUNT?(IOWC=0?) + 000334' 254000 000340' 04870 JRST OUT2 + 04880 ADRCHK TAC1 ;PROCEED IF ADDRESS OF WORD COUNT + 000335' 260140 000320* PUSHJ PDP,ADRCK + 000336' 550040 000002 HRRZ TAC,TAC1 + 04890 ;<PROTECTION ADDRESS + 000337' 542060 000002 04900 HRRM TAC, @TAC1 ;WORD COUNT:=C(JBFPTR18-35) + 04910 ; -C(JBFPTR18-35)- + 000340' 275240 000001 04920 OUT2: SUBI JBUF,1 + 000341' 275100 000001 04930 SUBI TAC1,1 + 000342' 515040 400000 04940 HRLZI TAC, IOUSE + 000343' 437060 000002 04950 IORB TAC, @TAC1 ;IOUSE:=1 + 000344' 260140 000335* 04960 ADRCHK TAC1^PUSHJ PDP,ADRCK + 000345' 550040 000002 HRRZ TAC,TAC1^ + 000346' 542060 000005 04970 HRRM TAC,@JBUF ;ADVANCE CURRENT BUFFER ADDRE + 000347' 200006 000002 04980 MOVE IOS,DEVIOS (DEVDAT) + 000350' 606000 010000 04990 TRNN IOS,IOACT + 000351' 260140 000421' 05000 PUSHJ PDP, CALOUT ;START OUTPUT + 000352' 544246 000006 05010 HLR JBUF,DEVBUF(DEVDAT) + 000353' 505240 000007 05020 HRLI JBUF,PROG + 000354' 200120 000005 05030 MOVE TAC1,@JBUF + 000355' 505100 000007 05040 HRLI TAC1,PROG + 000356' 337020 000002 05050 SKIPG @TAC1 ;IOUSE=1? + 000357' 260140 000300* 05060 PUSHJ PDP, WSYNC ;WAIT FOR DEVICE TO BECOME IN + 000360' 254000 000372' 05070 JRST OUTS + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 15 + 8-9-95 + + + + 000361' 332120 000005 05110 OUTF: SKIPE TAC1,@JBUF + 000362' 254000 000367' 05120 JRST OUTF1 + 000363' 541600 000002 05130 HRRI UUO,2 + 000364' 260140 000066' 05140 PUSHJ PDP,UOUTBF + 000365' 544246 000006 05150 HLR JBUF,DEVBUF(DEVDAT) + 000366' 505240 000007 05160 HRLI JBUF,PROG + 000367' 515040 400000 05170 OUTF1: HRLZI TAC, IOUSE + 000370' 413060 000005 05180 ANDCAB TAC, @JBUF ;IOUSE:=0 + 000371' 542046 000010 05190 HRRM TAC,DEVOAD(DEVDAT) + 000372' 550060 000005 05200 OUTS: HRRZ TAC,@JBUF + 000373' 260140 000000* 05210 PUSHJ PDP,BUFCLR + 000374' 540120 000005 05220 HRR TAC1,@JBUF + 000375' 505100 000007 05230 HRLI TAC1,PROG + 000376' 135200 000475' 05240 LDB ITEM,[POINT 17,@TAC1,17] + 000377' 275200 000001 05250 SUBI ITEM,1 + 000400' 260140 000242* 05260 PUSHJ PDP,IOSETC ;JBFPTR18-35:=CURRENT BUFFER + 05270 ;ADDRESS+1 + 05280 ;JBFCTR:=(BUFFER SIZE-1)*[36/BYTE + 05290 ;SIZE] + 000401' 254000 000275* 05300 JRST UXIT ;RETURN TO USERS PROGRAM + + 000402' 260140 000357* 05320 OUTDMP: PUSHJ PDP,WSYNC + 000403' 200046 000003 05330 MOVE TAC,DEVSER(DEVDAT) + 000404' 260141 000006 05340 PUSHJ PDP,DDO(TAC) + 000405' 260140 000307* 05350 PUSHJ PDP,WAIT1 + 000406' 254000 000401* 05360 JRST UXIT + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 16 + 8-9-95 + + + + + 05410 ,DEC 06 00 EX COM L PT PRE 01 OUTA + 05420 ,H.R. MORSE 64-12-26 + + 05440 ,CALLING SEQUENCE: + 05450 , PUSHJ PDP,OUTA + 05460 , EXIT ALWAYS RETURN HERE + 05470 ,IF THE ADDRESS FIELD OF AC UUO IS ZERO,EXIT. OTHERWISE,CHECK IOACT. + 05480 ,IF IOACT=1, WIAT FOR IOACT=0. + 05490 ,SET JBFADR18-35:=ADDRESS FIELD OF AC UUO. JBFADR0:=1 AND EXIT. + + 05510 ,MONITOR INTERFACE + 05520 , STORAGE:13 + 05530 , ROUTINES CALLED: WSYNC + 05540 , SYMBOLS SET/USED: + 05550 , ACCUMULATORS: DEVDAT U + 05560 , IOS U PROG U + 05570 , JBUF S/U TAC S/U + 05580 , DEVICE DATA BLOCK: DEVIOS U DEVBUF U + 05590 , IO STATUS WORD: IOACT U + 05600 , JOB BUFFER AREA: IOUSE U + 05610 , JBFADR S + + 05630 INTERN OUTA + 000407' 606600 777777 05640 OUTA: TRNN UUO, 777777 ;IS BUFFER ADDRESS SPECIFIED? + 000410' 263140 000000 05650 POPJ PDP, ;NO + 000411' 260140 000405* 05660 PUSHJ PDP,WAIT1 + 000412' 544246 000006 05670 HLR JBUF,DEVBUF(DEVDAT) + 000413' 545240 000007 05680 HLRI JBUF,PROG + 000414' 542620 000005 05690 HRRM UUO,@JBUF + 000415' 542606 000010 05700 HRRM UUO,DEVOAD(DEVDAT) + 000416' 515040 400000 05710 HRLZI TAC,IOUSE + 000417' 412060 000005 05720 ANDCAM TAC,@JBUF + 000420' 263140 000000 05730 POPJ PDP, ;RETURN + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 17 + 8-9-95 + + + + + 05780 ,DEC 06 00 EX COM L PT PRE 03 CALOUT + 05790 ,H.R. MORSE 2/21/65 + + 05810 ,CALLING SEQUENCE + 05820 , PUSHJ PDP,CALOUT + 05830 , EXIT + + 05850 ,DISPATCH TO DEVICE SERVICE ROUTINE DOU TO INITIATE OUTPUT. + + 05870 ,MONITOR INTERFACE + 05880 , STORAGE:2 + 05890 , SYMBOLS SET/USED: + 05900 , ACCUMULATORS: DEVDAT U + 05910 , TAC U + 05920 , DEVICE DATA BLOCK: DEVSER U + + 05940 INTERN CALOUT + 000421' 606000 010000 05950 CALOUT: TRNN IOS,IOACT + 000422' 254000 000426' 05960 JRST CALOU1 + 000423' 606000 000040 05970 TRNN IOS,IOCON + 000424' 263140 000000 05980 POPJ PDP, + 000425' 260140 000402* 05990 PUSHJ PDP,WSYNC + 000426' 200046 000003 06000 CALOU1: MOVE TAC,DEVSER(DEVDAT) + 000427' 254001 000002 06010 JRST DOU(TAC) + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 18 + 8-9-95 + + + + + 06060 ,RELEASE A DEVICE + + 06080 INTERNAL RELEA1,RELEA2,RELEA3,RELEA5 + + 000430' 200006 000002 06100 RELEA0: MOVE IOS,DEVIOS(DEVDAT) ;CALLED FROM INIT + 000431' 06110 RELEA2:RELEA3: + 000431' 620600 777777 06120 RELEA1: TRZ UUO,-1 ;CLOSE BOTH INPUT AND OUTPUT + 000432' 260140 000000' 06130 PUSHJ PDP,CLOSE1 + 000433' 260140 000411* 06140 PUSHJ PDP,WAIT1 ;WAIT FOR DEVICE TO BECOME INACTIVE + 000434' 200046 000003 06150 RELEA5: MOVE TAC, DEVSER(DEVDAT) ;RELEASE WITHOUT WAITING + 000435' 260141 000000 06160 PUSHJ PDP, DRL (TAC) + 000436' 135040 000310* 06170 LDB TAC,PUUOAC + 000437' 402001 000312* 06180 SETZM USRJDA(TAC) + 000440' 201040 000017 06190 MOVEI TAC,17 ;IS THE DEVICE ON AONTHER USER CHANNEL? + 000441' 550101 000437* 06200 RELEA4: HRRZ TAC1,USRJDA(TAC) + 000442' 302106 000000 06210 CAIE TAC1,(DEVDAT) + 000443' 365040 000441' 06220 SOJGE TAC,RELEA4 + 000444' 325040 000406* 06230 JUMPGE TAC,UXIT ;EXIT IF ON ANOTHER CHANNEL + 000445' 201100 200000 06240 MOVEI TAC1,ASSPRG ;OTHERWISE CLEAR ASSIGNED BY PROG. BIT + 000446' 413106 000004 06250 ANDCAB TAC1,DEVMOD(DEVDAT) + 000447' 616100 000476' 06260 TDNN TAC1,[XWD TTYUSE,ASSCON] ; ASSIGNED BY CONSOLE OR TTY I + 000450' 137600 000000* 06270 DPB UUO,PJOBN ;NO. CLEAR JOB NUMBER + 000451' 254000 000444* 06280 JRST UXIT + + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 19 + 8-9-95 + + + + + 06340 ,DEC 06 00 EX UUO L PT PRE 01 STATO + 06350 ,H.R. MORSE 64-12-26 + + 06370 ,CALLING SEQUENCE + 06380 , STATO D,MASK + 06390 , EXIT1 ALL SELECTED BITS ARE 0 + 06400 , EXIT2 SOME SELECTED BITS ARE 1 + 06410 ,TESTS BITS OF I/O STATUS WORD OF DEVICE ON USERS CHANNEL D WHICH + 06420 ,ARE SELECTED BY MASK. + + 06440 ,MONITOR INTERFACE: + 06450 , STORAGE: 3 + 06460 , ROUTINES CALLED: UXIT + 06470 , SYMBOLS SET/USED: + 06480 , ACCUMULATORS: IOS U + 06490 , PDP U + 06500 , UUO U + + 06520 INTERN USTATO + + 000452' 602014 000000 06540 USTATO: TRNE IOS,(UUO) ;SKIP IF ANY INDICATED BITS ARE ONE + 000453' 350003 000000 06550 AOS (PDP) + 000454' 254000 000451* 06560 JRST UXIT + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 20 + 8-9-95 + + + + 06600 ,DEC 06 00 EX UUO L PT PRE 01 STATUS + 06610 ,H.R. MORSE 64-12-26 + + 06630 ,CALLING SEQUENCE + 06640 , STATUS D,ADR + 06650 , EXIT ALWAYS RETURNS HERE + 06660 ,STORES I/O STATUS WORD OF DEVICE ON CHANNEL D IN LOCATION ADR. + + 06680 ,MONITOR INTERFACE + 06690 , STORAGE: 3 + 06700 , ROUTINES CALLED: UXIT + 06710 , SYMBOLS SET/USED: + 06720 , ACCUMULATORS: IOS U + 06730 , PROG U + 06740 , UUO U + + 06760 INTERN USTATS + 06770 EXTERNAL ADRERR,USRREL + + 000455' 200040 000000* 06790 USTATS: MOVE TAC,USRREL ;CHECK TO SEE IF IN BOUNDS + 000456' 307054 000000 06800 CAIG TAC,(UUO) + 000457' 260140 000000* 06810 PUSHJ PDP,ADRERR + 000460' 505600 000007 06820 HRLI UUO,PROG ;LOAD STATUS INTO INDICATED ADDRESS. + 000461' 552020 000014 06830 HRRZM IOS,@UUO + 000462' 254000 000454* 06840 JRST UXIT + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 21 + 8-9-95 + + + + 06880 ,CALLING SEQUENCE + 06890 , SETSTS D,BITS + 06900 , EXIT ALWAYS RETURN HERE + + 06920 INTERNAL USETST + 06930 EXTERNAL WAIT1,SETIOS + + 000463' 260140 000433* 06950 USETST: PUSHJ PDP,WAIT1 ;WAIT TILL DEVICE INACTIVE + 000464' 205000 000002 06960 MOVSI IOS, IOBEG + 000465' 436006 000002 06970 IORM IOS,DEVIOS(DEVDAT) + 000466' 542606 000002 06980 HRRM UUO,DEVIOS(DEVDAT) + 000467' 254000 000462* 06990 JRST UXIT + + 07010 ,DEC 06 00 EX UUO L PT PRE 01 STATZ + 07020 ,H.R. MORSE 64-12-26 + + 07040 ,CALLING SEQUENCE + 07050 , STATZ D,MASK + 07060 , EXIT1 SOME SELECTED BITS ARE 1 + 07070 , EXIT2 ALL SELECTED BITS ARE 0 + + 07090 ,TESTS BITS OF I/O STATUS WORD OF DEVICE ON USERS + 07100 ,CHANNEL D WHICH ARE SELECTED BY MASK, + + 07120 ,MONITOR INTERFACE + 07130 , STORAGE: 3 + 07140 , ROUTINES CALLED: UXIT + 07150 , SYMBOLS SET/USED: + 07160 , ACCUMULATORS: IOS U + 07170 , PDP U + 07180 , UUO U + + 07200 INTERN USTATZ + + 000470' 606014 000000 07220 USTATZ: TRNN IOS,(UUO) ;SKIP IF ALL INDICATED BITS ARE ZERO + 000471' 350003 000000 07230 AOS (PDP) + 000472' 254000 000467* 07240 JRST UXIT + + 07260 END, + 000473' 000040 020000 + 000474' 000040 200000 + 000475' 222120 000002 + 000476' 010000 400000 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000477 + +8K CORE USED + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 22 + SYMBOL TABLE + + 000266 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADRCK 000344' EXT +ADRERR 000457' EXT +AL 000001 INT +ASSCON 400000 INT +ASSIN 000112' EXT +ASSPRG 200000 INT +B 000014 INT +BUFCLC 000077' EXT +BUFCLR 000373' EXT +BUFPNT 000012 INT +BUFWRD 000013 INT +CALIN 000276' +CALOU1 000426' +CALOUT 000421' INT +CLOSB 002000 INT +CLOSE1 000000' INT +CLSIN 000002 INT +CLSOUT 000001 INT +CUXIT1 000113' EXT +CUXIT2 000141' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 22-1 + SYMBOL TABLE + +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERROR 000000 EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +ILLMOD 000000 EXT +IN 000163' INT +IN1 000173' +INDMP 000271' +INEOF 000250' +INITB 400000 INT +INPB 010000 INT +INPT0A 000225' +INPT0B 000220' +INPT0C 000224' +INPUT0 000212' +INPUT1 000227' +INPUT2 000236' +INPUT3 000265' +INPUTA 000253' +INPUTF 000256' +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIERR 000000 EXT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSETC 000400' EXT +IOSTRT 000010 INT + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 22-2 + SYMBOL TABLE + +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000111' EXT +JOBJDA 000000 EXT +LOOKB 040000 INT +MTW 010000 INT +OBUFB 100000 INT +OUT 000306' INT +OUT1 000317' +OUT2 000340' +OUTA 000407' INT +OUTDMP 000402' +OUTF 000361' +OUTF1 000367' +OUTPB 004000 INT +OUTS 000372' +PDP 000003 INT +PICHN 000100 INT +PIOMOD 000313' EXT +PJOBN 000450' EXT +PROG 000007 INT +PUUOAC 000436' EXT +RELEA0 000430' +RELEA1 000431' INT +RELEA2 000431' INT +RELEA3 000431' INT +RELEA4 000441' +RELEA5 000434' INT +RUN 200000 INT +RUNABL 204000 INT +SETBYT 000155' EXT +SETIOS 000120' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +UCLS0 000026' +UCLS1 000034' +UCLS2 000041' +UCLS3 000060' +UCLS4 000013' + IOCONT - CONTROL FOR IO PROGRAMMED OPERATORS PAGE 22-3 + SYMBOL TABLE + +UINBF 000076' INT +UINIT 000103' INT +UINIT1 000111' INT +UINIT4 000127' +UINIT5 000133' +UINITZ 000142' INT +UINTQ 000121' EXT +UOBF1 000072' +UOUTBF 000066' INT +USETST 000463' INT +USRJDA 000441' EXT +USRMOD 010000 INT +USRREL 000455' EXT +USTATO 000452' INT +USTATS 000455' INT +USTATZ 000470' INT +UUO 000014 INT +UXIT 000472' EXT +WAIT1 000463' EXT +WSYNC 000425' EXT + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSSSSSSSS SSSSSSSSS + III OOO OOO CCC SSSSSSSSS SSSSSSSSS + III OOO OOO CCC SSSSSSSSS SSSSSSSSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + III OOO OOO CCC SSS SSS + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + IIIIIIIII OOOOOOOOO CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :IOCSS .LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:21 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2477 +File will be deleted after printing + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 1 + 8-15-65 + + 00010 XLIST + 01930 LIST + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 7 + 8-15-65 + + + 00010 TITLE IOCSS - IO COMMON SYSTEM SUBROUTINES + 00020 SUBTTL 8-15-65 + 00030 EXTERNAL CLOSE1,DEVLST,ERROR,JBTADR + 00040 EXTERNAL JOB,JOBFF,RELEA1,USRJDA,WAIT1,CLDS,CLEN + 00050 EXTERNAL PJOBN,CPOPJ1,PIOMOD,CPOPJ,CPOPJ2 + 00060 EXTERNAL SCNOFF,SCNON + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 2 + 8-15-65 + + + + 00100 ,DEC 06 00 EX COM L PT PRE 01 ADVBFE + 00110 ,H.R. MORSE 64-12-26 + 00120 ,CALLING SEQUENCE + 00130 , PUSHJ PDP,ADVBFE + 00140 , EXIT1 RETURN IF NEXT BUFFER IS EMPTY + 00150 , EXIT2 RETURN IF NEXT BUFFER IS FULL + 00160 ,CLEARS THE USE BIT (IOUSE:=0) OF THE BUFFER POINTED TO BY THE + 00170 ,OUTPUT BUFFER ADDRESS (DEVOAD) OF THE CURRENT DEVICE DATA BLOCK + 00180 ,AND ADVANCES THE BUFFER ADDRESS TO THE NEXT BUFFER IN THE RING + 00190 ,UPON RETURN, SKIPS IF THE NEXT BUFFER IS FULL. + 00200 ,MONITOR INTERFACE + 00210 , STORAGE: 6 + 00220 , SYMBOLS SET/USED: + 00230 , ACCUMULATORS: DEVDAT U + 00240 , PDP S/U + 00250 , TAC S/U + 00260 , DEVICE DATA BLOCK: DEVOAD S/U + 00270 , JOB BUFFER HEADER: IOUSE S/U + 00280 INTERN ADVBFE + 000000' 00290 ADVBFE: ADRCHK DEVOAD(DEVDAT)^ EXTERNAL ADRCK + 000000' 260140 000000* PUSHJ PDP,ADRCK + 000001' 550046 000010 HRRZ TAC,DEVOAD(DEVDAT)^ + 000002' 515040 400000 00300 HRLZI TAC,IOUSE; IOUSE:=0 + 000003' 413066 000010 00310 ANDCAB TAC,@DEVOAD(DEVDAT) + 000004' 542046 000010 00320 HRRM TAC,DEVOAD(DEVDAT); DEVOAD 18-35:=NEXT BUFFER ADDRESS + 000005' 335026 000010 00330 SKIPGE @DEVOAD(DEVDAT); IS IOUSE=0? + 000006' 350003 000000 00340 AOS (PDP); EXIT2. BUFFER IS FULL + 000007' 263140 000000 00350 POPJ PDP,; EXIT1. BUFFER IS EMPTY + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 3 + 8-15-65 + + + + 00390 ,DEC 06 00 EX COM L PT PRE 01 ADVBFF + 00400 ,H.R. MORSE 64-12-26 + 00410 ,CALLING SEQUENCE + 00420 , PUSHJ PDP,ADVBFF + 00430 , EXIT1 RETURN IF NEXT BUFFER IS FULL + 00440 , EXIT2 RETURN IF NEXT BUFFER IS EMPTY + 00450 ,SETS THE USE BIT (IOUSE:=1) OF THE BUFFER POINTED TO BY THE + 00460 ,INPUT BUFFER ADDRESS (DEVIAD) OF THE CURRENT DEVICE DATA BLOCK + 00470 ,AND ADVANCES THE BUFFER ADDRESS TO THE NEXT BUFFER IN THE RING. + 00480 ,UPON RETURN. SKIPS IF THE NEXT BUFFER IS EMPTY, + 00490 ,MONITOR INTERFACE + 00500 , STORAGE: 6 + 00510 , SYMBOLS SET/USED: + 00520 , ACCUMULATORS: DEVDAT U + 00530 , PDP S/U + 00540 , TAC S/U + 00550 , DEVICE DATA BLOCK: DEVIAD S/U + 00560 , JOB BUFFER HEADER: IOUSE S/U + 00570 INTERN ADVBFF + 000010' 260140 000000* 00580 ADVBFF: ADRCHK DEVIAD(DEVDAT)^PUSHJ PDP,ADRCK + 000011' 550046 000007 HRRZ TAC,DEVIAD(DEVDAT)^ + 000012' 515040 400000 00590 HRLZI TAC,IOUSE; IOUSE:=1 + 000013' 437066 000007 00600 IORB TAC,@DEVIAD(DEVDAT) + 000014' 542046 000007 00610 HRRM TAC,DEVIAD(DEVDAT); DEVIAD:=NEXT BUFFER ADDRESS + 000015' 331026 000007 00620 SKIPL @DEVIAD(DEVDAT); IOUSE=1? + 000016' 350003 000000 00630 AOS (PDP); EXIT2. NEXT BUFFER IS EMPTY + 000017' 263140 000000 00640 POPJ PDP,; EXIT1. NEXT BUFFER IS FULL + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 4 + 8-15-65 + + + + + 00690 ,DEC 06 00 EX COM L PT PRE 01 ASCIA + 00700 ,C. FRAZIER AND W. SEGAL 64-12-26 + 00710 ,CALLING SEQUENCE + 00720 , PUSHJ PDP,ASCIA + 00730 , EXIT ALWAYS RETURNS HERE + 00740 ,ADDS THE ASCII INCREMENT (RIGHT JUSTIFIED) IN AC TAC1 TO THE FIVE + 00750 ,DIGIT ASCII NUMBER (LEFT JUSTIFIED) IN AC TAC AND LEAVES THE + 00760 ,RESULT (LEFT JUSTIFIED) IN AC TAC. TAC1 IS RESTORED. + 00770 ,MONITOR INTERFACE + 00780 , STORAGE: 21 + 00790 , SYMBOLS SET/USED: + 00800 , ACCUMULATORS: PDP U + 00810 , TAC S/U + 00820 , TAC1 S/U + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 5 + 8-15-65 + + + + 00860 ; INTERN ASCIA + 00870 ;ASCIA: PUSH PDP,TAC1; SAVE TAC1 = ASCII INCREMENT (RIGHT JUST + 00880 ; AND TAC1,K2; CLEAR MOST SIGNIFICANT 3 BITS OF + 00890 ;, EACH CHARACTER + 00900 ; LSH TAC,-1; TAC=FIVE DIGIT ASCII NO.(RIGHT JUST.) + 00910 ; IOR TAC,K4; SET SECOND AND THIRD MOST SIGNIFICANT + 00920 ;, BITS OF EACH CHARACTER TO ONES. + 00930 ; TLZN TAC,400000 + 00940 ; ADD TAC,K1 + 00950 ; ADD TAC1,TAC + 00960 ; AND TAC1,K3 + 00970 ; MOVE TAC,K4 + 00980 ; AND TAC,TAC1 + 00990 ; ASH TAC,-3 + 01000 ; SUBM TAC1,TAC + 01010 ; IOR TAC,K4 + 01020 ; LSH TAC,1 + 01030 ; TRO TAC,1 + 01040 ; POP PDP,TAC1; RESTORE TAC1 + 01050 ; POPJ PDP,; RETURN + 01060 ;K1: OCT 215064321506; CHARACTER MASK: 1000110 + 01070 ;K2: OCT 036170743617; CHARACTER MASK: 0001111 + 01080 ;K3: OCT 176773757677; CHARACTER MASK: 0111111 + 01090 ;K4: OCT 140603014060; CHARACTER MASK: 0110000 + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 6 + 8-15-65 + + + + 01130 INTERNAL ASSIN,ASSASG + + 000020' 260140 000041' 01150 ASSIN: PUSHJ PDP,DEVSRC ;SEARCH FOR DEVICE + 000021' 263140 000000 01160 POPJ PDP, ;DEVICE NOT FOUND + 000022' 201100 200000 01170 MOVEI TAC1, ASSPRG ;DEVICE FOUND, FLAG AS ASSIGNED BY PROG + + 01190 ;ASSIGN DEVICE IF UNASSIGNED + 01200 ;CALL: MOVE ITEM, JOB NUMBER + 01210 ; MOVE DEVDAT, ADDR. OF DDB + 01220 ; MOVEI TAC1, EITHER ASSPRG OR ASSCON + 01230 ; PUSHJ PDP, ASSASG + 01240 ; CANT ASSIGN RETURN + 01250 ; ASSIGNED RETURN + + 000023' 700200 000000* 01270 ASSASG: CONO APR,CLDS ;DISABLE CLOCK + 000024' 135040 000000* 01280 LDB TAC,PJOBN ;GET JOB NUMBER IN DEV DATA BLOCK + 000025' 316040 000004 01290 CAMN TAC,ITEM ;IS IT ALREADY ASSIGNED TO THIS JOB + 000026' 254000 000035' 01300 JRST ASSAS1 ;YES + 000027' 201040 600000 01310 MOVEI TAC, ASSPRG+ASSCON ;NO, IS IT ASSIGNED TO ANOTHE + 000030' 700600 000000* 01320 CONO PI, SCNOFF ;TURN SCANNER OFF + 000031' 612046 000004 01330 TDNE TAC, DEVMOD(DEVDAT) ;ARE EITHER ASSIGNED BITS SET + 000032' 254000 000036' 01340 JRST ASSAS2 ;YES + 000033' 436106 000004 01350 IORM TAC1, DEVMOD(DEVDAT) ;NO, SET ONE OF THEM + 000034' 137200 000024* 01360 DPB ITEM,PJOBN ;AND STORE JOB NUMBER + 000035' 350003 000000 01370 ASSAS1: AOS (PDP) + 000036' 700600 000000* 01380 ASSAS2: CONO PI, SCNON ;TURN SCANNER BACK ON + 000037' 700200 000000* 01390 CONO APR,CLEN ;RENABLE CLOCK + 000040' 263140 000000 01400 POPJ PDP, + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 7 + 8-15-65 + + + + 01440 ;ROUTINE TO SEARCH FOR A DEVICE + 01450 ;CALL: HRR ITEM,JOB NUMBER + 01460 ; MOVE TAC,[SIXBIT .DEVICE NAME.] + 01470 ; PUSHJ PDP, DEVSRC + 01480 ; NOT FOUND + 01490 ; FOUND + + 01510 INTERNAL DEVLG,DEVSRC,DEVPHY + 01520 EXTERNAL SYSTAP,DEVOPR + + 000041' 260140 000044' 01540 DEVSRC: PUSHJ PDP, DEVLG ;SEARCH LOGICAL NAMES FIRST + 000042' 254000 000056' 01550 JRST DEVPHY ;NOT FOUND, SEARCH PHYSICAL NAMES + 000043' 254000 000000* 01560 JRST CPOPJ1 ;FOUND + + 01580 ;SEARCH LOGICAL NAMES + + 000044' 554300 000000* 01600 DEVLG: HLRZ DEVDAT,DEVLST ;BEGINNING OF DDB CHAIN + 000045' 322040 000000* 01610 JUMPE TAC,CPOPJ ;0 CANNOT BE A LOGICAL NAME + 000046' 312046 000005 01620 DEVLP0: CAME TAC,DEVLOG(DEVDAT) ;COMPARE WITH LOGICAL NAME + 000047' 254000 000053' 01630 JRST DEV0 ;NO MATCH + 000050' 135100 000034* 01640 LDB TAC1,PJOBN ;DOES THE LOGICAL NAME BELONG TO THIS J + 000051' 316100 000004 01650 CAMN TAC1,ITEM + 000052' 254000 000043* 01660 JRST CPOPJ1 ;YES + 000053' 554306 000003 01670 DEV0: HLRZ DEVDAT,DEVSER(DEVDAT) ;NO, KEEP LOOKING + 000054' 326300 000046' 01680 JUMPN DEVDAT,DEVLP0 + 000055' 263140 000000 01690 POPJ PDP, ;FINISH AND NOT FOUND + + 01710 ;SEARCH PHYSICAL NAMES + + 000056' 322040 000045* 01730 DEVPHY: JUMPE TAC,CPOPJ ;ZERO CANNOT BE A LOGICAL NAME + 000057' 316040 000370' 01740 CAMN TAC,[SIXBIT /OPR/] ;IS IT "OPR"? + 000060' 200040 000000* 01750 MOVE TAC,DEVOPR ;YES, CHANGE TO OPERATORS TTY + 000061' 316040 000371' 01760 CAMN TAC,[SIXBIT /SYS/] ;IS IT "SYS"? + 000062' 200040 000000* 01770 MOVE TAC,SYSTAP ;YES, CHANGE TO SYSTEM TAPE NAME + 000063' 554300 000044* 01780 HLRZ DEVDAT,DEVLST ;SEARCH DEVICE DATA BLOCKS + 000064' 316046 000000 01790 DEVLP1: CAMN TAC,DEVNAM(DEVDAT) + 000065' 254000 000052* 01800 JRST CPOPJ1 ;FOUND + 000066' 554306 000003 01810 HLRZ DEVDAT,DEVSER(DEVDAT) + 000067' 326300 000064' 01820 JUMPN DEVDAT,DEVLP1 + 000070' 263140 000000 01830 POPJ PDP, ;NOT FOUND + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 8 + 8-15-65 + + + + 01870 ,DEC 06 00 EX COM L PT PRE 01 BUFCLC + 01880 ,H. R. MORSE 64-12-26 + 01890 ,CALLING SEQUENCE + 01900 , PUSHJ PDP,BUFCLC + 01910 , EXIT RETURNS HERE IF MEMORY NOT EXCEEDED + 01920 , SETS UP AN N BUFFER RING FOLLOWING THE USERS PROGRAM, WHERE N + 01930 , IS IN THE ADDRESS FIELD OF AC UUO. + 01940 , THE BUFFER RING FORMAT IS AS FOLLOWS: + 01950 , LOCATION LH CONTENTS RH + 01960 , C(JOBFF) + 1 BUFFER C(JOBFF) +1 + 01970 , + 0(BUFFER SIZE+2) SIZE + 1(BUFFER SIZ+2) + 01980 , C(JOBFF) +1 BUFFER C(JOBFF) +1 + 01990 , +1(BUFFER SIZE+2) SIZE + 2(BUFFER SIZE+2) + 02000 , . . . + 02010 , . . . + 02020 , . . . + 02030 , C(JOBFF) + 1 BUFFER C(JOBFF) + 1 + 02040 , + (N-2)(BUFFER SIZE+2) SIZE +(N-1)(BUFFER SIZE+2) + 02050 , C(JOBFF) + 1 BUFFER C(JOBFF) + 1 + 02060 , + (N-1)(BUFFER SIZE+2) SIZE + 02070 ,THEN SET BUFPNT:=IOUS,C(JOBFF) + 1 + 02080 , AND JOBFF:=C(JOBFF) + 1 + N(BUFFER SIZE + 2) + 02090 , BUFWRD IS RESTORED. + 02100 ,MONITOR INTERFACE + 02110 , STORAGE: 20 + 02120 , ROUTINES CALLED: ADRCK + 02130 , SYMBOLS SET/USED: + 02140 , ACCUMULATORS: BUFPNT S/U PROG U + 02150 , BUFWRD S/U TAC S/U + 02160 , DEVDAT U TAC1 S/U + 02170 , PDP S/U UUO U + 02180 , DEVICE DATA BLOCK: DEVCHR U + 02190 , JOB AREA: JOBFF S/U + 02200 , JOB BUFFER HEADER: IOUSE U + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 9 + 8-15-65 + + + + 02240 INTERN BUFCLC + 000071' 261140 000013 02250 BUFCLC: PUSH PDP,BUFWRD; SAVE BUFWRD ON STACK + 000072' 135040 000372' 02260 LDB TAC,[POINT 12,DEVCHR(DEVDAT),35];TAC:=BUFFER SIZE + 000073' 550507 000000* 02270 HRRZ BUFPNT,JOBFF(PROG);BUFPNT:=FIRST FREE LOCATION + 1 + 000074' 271500 000001 02280 ADDI BUFPNT,1 + 000075' 550540 000012 02290 HRRZ BUFWRD,BUFPNT + 000076' 505500 000007 02300 HRLI BUFPNT,PROG + 000077' 504540 000001 02310 HRL BUFWRD,TAC; BUFWRD:=BUFFER SIZE,FIRST FREE LOC + 1 + 000100' 271040 000002 02320 ADDI TAC,2; TAC:=BUFFER SIZE + 2 + 000101' 550100 000014 02330 HRRZ TAC1,UUO; TAC1:=N=ADDRESS FIELD OF AC UUO + 000102' 270540 000001 02340 BUFC1: ADD BUFWRD,TAC; BUFWRD:=C(BUFWRD) + C(TAC) + 02350 ADRCHK BUFPNT; CHECK BUFFER FOR MEMORY BOUND + 000103' 260140 000010* PUSHJ PDP,ADRCK + 000104' 550040 000012 HRRZ TAC,BUFPNT + 000105' 202560 000012 02360 MOVEM BUFWRD,@BUFPNT; BUFFER HEADER+1:=C(BUFWRD) + 000106' 540500 000013 02370 HRR BUFPNT,BUFWRD; BUFPNT 18-35:=C(BUFWRD 18-35) + 000107' 367100 000102' 02380 SOJG TAC1,BUFC1; N:=N-1. IS N>0? + 000110' 540547 000073* 02390 HRR BUFWRD,JOBFF(PROG) + 000111' 271540 000001 02400 ADDI BUFWRD,1 + 000112' 260140 000103* 02410 PUSHJ PDP,ADRCK ;CHECK LAST ADR. OF HEADER + 000113' 551052 777776 02420 HRRZI TAC,-2(BUFPNT) + 000114' 274500 000001 02430 SUB BUFPNT,TAC + 000115' 202560 000012 02440 MOVEM BUFWRD,@BUFPNT;LINK LAST BUFFER TO FIRST BUFFER + 000116' 270500 000001 02450 ADD BUFPNT,TAC + 000117' 542507 000110* 02460 HRRM BUFPNT,JOBFF(PROG);JOBFF:=C(JOBFF)+1+N(BUFFER SIZE+2) + 000120' 540500 000013 02470 HRR BUFPNT,BUFWRD; BUFPNT:=IOUSE,ADDRESS OF FIRST BUFFER + 02480 , IN RING. + 000121' 505500 400000 02490 HRLI BUFPNT,IOUSE + 000122' 262140 000013 02500 POP PDP,BUFWRD; RESTORE BUFWRD FROM STACK. + 000123' 263140 000000 02510 POPJ PDP,; RETURN + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 10 + 8-15-65 + + + + 02550 ,DEC 06 00 EX COM L PT PRE 01 BUFCLR + 02560 ,H. R. MORSE 64-12-26 + 02570 ,CALLING SEQUENCE + 02580 , PUSHJ PDP,BUFCLR + 02590 , EXIT RETURNS HERE IF MEMORY NOT EXCEEDED + 02600 , CLEAR THE WORD COUNT AND DATA AREA OF THE BUFFER WHOSE ADDRESS + 02610 , IS IN TAC 18-35. + 02620 ,MONITOR INTERFACE: + 02630 , STORAGE: 13 + 02640 , ROUTINE CALLED: ADRCK + 02650 , SYMBOLS SET/USED: + 02660 , ACCUMULATORS: PDP U TAC S/U + 02670 , PROG U TAC1 S/U + 02680 INTERN BUFCLR + 000124' 505040 000007 02690 BUFCLR: HRLI TAC,PROG + 02700 ADRCHK TAC; PROCEED IF CURRENT BUFFER ADDRESS + 000125' 260140 000112* PUSHJ PDP,ADRCK + 000126' 550040 000001 HRRZ TAC,TAC + 02710 , < PROTECTION ADDRESS. + 000127' 554120 000001 02720 HLRZ TAC1,@TAC; TAC1 18-35=SIZE + 000130' 620100 400000 02730 TRZ TAC1,400000 + 000131' 270100 000001 02740 ADD TAC1,TAC; TAC1:=CURRENT BUFFER ADDRESS + SIZE + 02750 ADRCHK TAC1; PROCEED IF CURRENT BUFFER ADDRESS + 000132' 260140 000125* PUSHJ PDP,ADRCK + 000133' 550040 000002 HRRZ TAC,TAC1 + 02760 , + SIZE < PROTECTION ADDRESS. + 000134' 201060 000001 02770 MOVEI TAC,@TAC; TAC:=CURRENT BUFFER ADDRESS+1, + 02780 , CURRENT BUFFER ADDRESS+1 + 000135' 504040 000001 02790 HRL TAC,TAC + 000136' 253040 000137' 02800 AOBJN TAC,.+1 + 000137' 402001 000000 02810 CLEARM 0(TAC); WORD COUNT:=0 + 000140' 350000 000001 02820 AOS TAC; TAC:=CURRENT BUFFER ADDRESS+1, + 02830 , CURRENT BUFFER ADDRESS+2 + 000141' 251060 000002 02840 BLT TAC,@TAC1; CLEAR BUFFER + 000142' 263140 000000 02850 POPJ PDP,; RETURN + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 11 + 8-15-65 + + + 02880 SUBTTL 5-17-65 PART 2 + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 12 + 5-17-65 PART 2 + + + + 02920 ,CALLING SEQUENCE + 02930 , PUSHJ PDP,CKS12 + 02940 , EXIT ALWAYS RETURNS HERE + 02950 ,CALCULATES FOLDED 12 BIT CHECKSUMS OF THE DATA WORDS IN THE + 02960 ,BUFFER WHOSE ADDRESS IS IN AC TAC1. TWO ALGORITHMS ARE USED. + 02970 ,ON RETURN, THE LEFT HALF OF AC TAC CONTAINS A CHECKSUM OBTAINED + 02980 ,BY ACCUMULATING, IN ONES COMPLEMENT, THE DATA WORDS AND FOLDING IT. + 02990 ,THE LEFT HALF OF AC DAT CONTAINS A CHECKSUM OBTAINED BY ACCUMULATING + 03000 ,IN TWOS COMPLEMENT, THE DATA WORDS AND FOLDING IT. AC TAC1 + 03010 ,CONTAINS A 1. + 03020 ,MONITOR INTERFACE + 03030 , STORAGE: 20 + 03040 , ROUTINES CALLED: FOLD + 03050 , SYMBOLS SET/USED: + 03060 , ACCUMULATORS: DAT S/U SUB S + 03070 , PDP U TAC S/U + 03080 , PROG U TAC1 S/U + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 13 + 5-17-65 PART 2 + + + + 03120 INTERN CKS12 + 000143' 270100 000007 03130 CKS12: ADD TAC1,PROG; TAC1:=-WORD COUNTER,ADDRESS OF FIRST DATA + 000144' 350000 000002 03140 AOS TAC1 + 000145' 550042 000000 03150 HRRZ TAC,0(TAC1) + 000146' 213000 000001 03160 MOVNS TAC + 000147' 350000 000002 03170 AOS TAC1 + 000150' 504100 000001 03180 HRL TAC1,TAC + 000151' 402000 000001 03190 CLEARM TAC; INITIALIZE TWOS COMPLEMENT SUM + 000152' 270042 000000 03200 CKS12A: ADD TAC,0(TAC1); TWOS COMPLEMENT ADD + 000153' 253100 000152' 03210 AOBJN TAC1,CKS12A; DONE? + 000154' 246040 777750 03220 FOLD: LSHC TAC,-30 + 000155' 242100 777764 03230 LSH TAC1,-14 + 000156' 270040 000002 03240 ADD TAC,TAC1 + 000157' 246040 777764 03250 LSHC TAC,-14 + 000160' 242100 777750 03260 LSH TAC1,-30 + 000161' 270040 000002 03270 ADD TAC,TAC1 + 000162' 622040 770000 03280 TRZE TAC,770000 + 000163' 350000 000001 03290 AOS TAC + 000164' 517000 000001 03300 HRLZS TAC + 000165' 201100 000001 03310 MOVEI TAC1,1 ;TAC1:=1 + 000166' 263140 000000 03320 POPJ PDP, + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 14 + 5-17-65 PART 2 + + + + 03360 ,DEC 06 00 EX COM L PT PRE 01 CLRBYT + 03370 ,H. R. MORSE 64-12-26 + 03380 ,CALLING SEQUENCE + 03390 , PUSHJ PDP,CLRBYT + 03400 , EXIT ALWAYS RETURN HERE + 03410 ,CALLED WITH A BYTE POINTER IN AC TAC, IT CLEARS THE REST OF THE + 03420 ,WORD POINTED TO BY THE BYTE POINTER. + 03430 ,MONITOR INTERFACE + 03440 , STORAGE: 7 + 03450 , SYMBOLS SET/USED: + 03460 , ACCUMULATORS: PDP U + 03470 , TAC U + 03480 , TAC1 S/U + 03490 INTERN CLRBYT + 000167' 135100 000373' 03500 CLRBYT: LDB TAC1,[POINT 6,TAC,5]; TAC1:=P + 000170' 137100 000374' 03510 DPB TAC1,[POINT 12,TAC,11]; TAC 0-5:=0, TAC 6-12:=P + 000171' 402000 000002 03520 SETZM TAC1 + 000172' 137100 000001 03530 DPB TAC1,TAC; CLEAR BITS 36-P THROUGH 35 + 000173' 263140 000000 03540 POPJ PDP,; RETURN + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 15 + 5-17-65 PART 2 + + + + 03580 ;ROUTINE TO RELEASE ALL DEVICES ASSIGNED TO JOB + + 03600 INTERNAL IORELS + 03610 EXTERNAL PUUOAC,RELEA3 + + + 000174' 201040 000000* 03640 IORELS: MOVEI TAC,RELEA3 ;RELEASE ALL IO DEVICES(DONT CLOSE) + + 03660 ;ROUTINE TO DO IO FOR ALL DEVICES ASSIGNED TOI JOB + 03670 ;CALL MOVEI TAC,ADR. OR IO SUB. + 03680 ; PUSHJ PDP,IOALL + + 03700 INTERNAL IOALL + + 000175' 261140 000001 03720 IOALL: PUSH PDP,TAC ;SAVE ADR. FO SUB. + 000176' 515240 777760 03730 HRLZI DAT, -20 + 000177' 200305 000000* 03740 IOALL1: MOVE DEVDAT, USRJDA(DAT) + 000200' 200006 000002 03750 MOVE IOS,DEVIOS(DEVDAT) + 000201' 201600 000000 03760 MOVEI UUO,0 + 000202' 137240 000000* 03770 DPB DAT,PUUOAC + 000203' 332000 000006 03780 SKIPE DEVDAT + 000204' 260163 000000 03790 PUSHJ PDP,@(PDP) ;CALL THE SUB. + 000205' 253240 000177' 03800 AOBJN DAT, IOALL1 + 000206' 262140 000001 03810 POP PDP,TAC + 000207' 263140 000000 03820 POPJ PDP, + + 03840 ;KILL ALL DEVICES(RELEASE WITHOUT WAITING FOR DEVICE INACTIVE) + + 03860 INTERNAL IOKILL + 03870 EXTERNAL RELEA5 + + 000210' 201040 000000* 03890 IOKILL: MOVEI TAC,RELEA5 + 000211' 254000 000175' 03900 JRST IOALL + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 16 + 5-17-65 PART 2 + + + + 03940 ,DEC 06 00 EX COM L PT PRE 01 IOSET + 03950 ,H. R. MORSE 64-12-26 + 03960 ,CALLING SEQUENCE + 03970 , PUSHJ PDP,IOSET + 03980 , EXIT ALWAYS RETURNS HERE + 03990 ,THIS PROGRAM IS CALLED FROM AN INTERRUPT SERVICE ROUTINE. + 04000 ,IT PUTS THE ADDRESS OF THE DATA AREA OF THE JOB (C(JBTADR18-35)) + 04010 ,CONNECTED TO THE DEVICE SPECIFIED BY AC DEVDAT IN AC PROG AND + 04020 ,PUTS THE ITEM POINTER (C(DEVCTR)) IN AC ITEM. + 04030 ,MONITOR INTERFACE + 04040 , STORAGE: 5 + 04050 , SYMBOLS SET/USED: + 04060 , ACCUMULATORS: DEVDAT U PDP U + 04070 , ITEM S PROG S/U + 04080 , DEVICE DATA BLOCK: DEVCHR U + 04090 , DEVCTR U + 04100 , SYSTEM ADDRESSES: JBTADR U + 04110 INTERN IOSET + + 000212' 135340 000050* 04130 IOSET: LDB PROG,PJOBN + 000213' 200206 000011 04140 MOVE ITEM,DEVCTR(DEVDAT); ITEM:=ITEM POINTER=C(DEVCTR) + 000214' 550347 000000* 04150 HRRZ PROG,JBTADR(PROG); PROG:=C(JBTADR 18-35) + 000215' 263140 000000 04160 POPJ PDP,; RETURN + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 17 + 5-17-65 PART 2 + + + + 04200 ,6-CSS-DEC-IOSETC-PL-PRE1 + 04210 ,H.R. MORSE 17-11-64 + + 04230 ,CALLING SEQUENCE + 04240 , PUSHJ PDP,IOSETC + 04250 , EXIT ALWAYS RETURN HERE + + 04270 ,SETS JBFPTR18-35:=C(TAC1 18-35) + 04280 , JBFCTR:=C(ITEM)*[WORD LENGTH/BYTE SIZE] + 04290 ,WHERE WORD LENGTH:=36 DECIMAL + 04300 , BYTE SIZE:=C(JBFPTR6-11) + 04310 , [X]:= INTEGER PART OF X + + 04330 ,MONITOR INTERFACE + 04340 , STORAGE: 11 + 04350 , ROUTINES CALLED: ITMCT1 + 04360 , SYMBOLS SET/USED: + 04370 , ACCUMULATORS: JBUF S/U TAC S/U + 04380 , ITEM S/U TAC1 S/U + 04390 , PDP U + + 04410 INTERN IOSETC + + 000216' 271240 000001 04430 IOSETC: ADDI JBUF,1 ;JBFPTR12-18:=0 + 000217' 515040 007777 04440 HRLZI TAC,7777 ;JBFPTR18-35:=C(TAC1 18-35)+1 + 000220' 406060 000005 04450 ANDM TAC,@JBUF + 000221' 542120 000005 04460 HRRM TAC1,@JBUF + 000222' 350020 000005 04470 AOS @JBUF + 000223' 135100 000375' 04480 LDB TAC1,[POINT 6,@JBUF,11] ;TAC1:=BYTE SIZE + 000224' 260140 000233' 04490 PUSHJ PDP,ITMCT1 ;JBFCTR:=C(ITEM)*[36/BYTE SIZE] + 000225' 271000 000006 04500 ADDI JBUF+1 + 000226' 202220 000005 04510 MOVEM ITEM,@JBUF + 000227' 263140 000000 04520 POPJ PDP, ;EXIT + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 18 + 5-17-65 PART 2 + + + + 04560 ,DEC 06 00 EX COM L PT PRE 01 ITMSET, ITMCNT, ITMCT1 + 04570 ,H.R. MORSE 64-12-26 + + 04590 ,CALLING SEQUENCE + 04600 , PUSHJ PDP,ITMSET + 04610 , EXIT ALWAYS RETURNS HERE + 04620 ,SETS AC ITEM:=(BUFFER SIZE-1)*[WORD LENGTH/BYTE SIZE] + 04630 ,WHERE BUFFER SIZE:=BITS 1-17 OF THE BUFFER HEADER WORD POINTED TO + 04640 , BY C(DEVADR) + 04650 , WORD LENGTH:=36 DECIMAL + 04660 , BYTE SIZE:=INTEGER PART OF X. + + 04680 ,CALLING SEQUENCE + 04690 , PUSHJ PDP,ITMCNT + 04700 , EXIT ALWAYS RETURNS HERE + 04710 ,SETS AC ITEM=C(ITEM)*[WORD LENGTH/BYTE SIZE] + + 04730 ,CALLING SEQUENCE + 04740 , PUSHJ PDP,ITMCT1 + 04750 , EXIT ALWAYS RETURNS HERE + 04760 ,SETS AC ITEM:=C(ITEM)*[WORD LENGTH/C(TAC1)] + + 04780 ,MONITOR INTERFACE + 04790 , STOAGE: 7 + 04800 , SYMBOLS SET/USED: + 04810 , ACCUMULATORS: DEVDAT U TAC S/U + 04820 , ITEM S/U TAC1 S/U + 04830 , PDP U + 04840 , DEVICE DATA BLOCK: DEVADR U + 04850 , DEVPTR U + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 19 + 5-17-65 PART 2 + + + + 04890 INTERN ITMSET,ITMCNT,ITMCT1 + 000230' 135200 000376' 04900 ITMSET: LDB ITEM,[POINT 17,@DEVADR(DEVDAT),17];ITEM:=BUFFER SIZE-1 + 000231' 275200 000001 04910 SUBI ITEM,1 + 000232' 135100 000377' 04920 ITMCNT: LDB TAC1,[POINT 6,DEVPTR(DEVDAT),11];TAC1:=BYTE SIZE + 000233' 201040 000044 04930 ITMCT1: MOVEI TAC,44 ;ITEM:=C(ITEM)*[WORD LENGTH/C(TAC1)] + 000234' 230040 000002 04940 IDIV TAC,TAC1 + 000235' 220200 000001 04950 IMUL ITEM,TAC + 000236' 263140 000000 04960 POPJ PDP, + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 20 + 5-17-65 PART 2 + + + + 05000 ;ROUTINE TO SET DEVICE STATUS WORD FROM UUO + + 05020 INTERNAL SETIOS + 05030 EXTERNAL ILLMOD + + 000237' 135040 000400' 05050 SETIOS: LDB TAC,[POINT 4,UUO,35] ;GET DEVICE DATA MODE + 000240' 201040 000001 05060 MOVEI TAC,1 ;AND CHECK FOR LEGALITY + 000241' 242042 000000 05070 LSH TAC,(TAC1) + 000242' 616046 000004 05080 TDNN TAC,DEVMOD(DEVDAT) + 000243' 254000 000000* 05090 JRST ILLMOD ;ILLEGAL MODE + 000244' 620600 010000 05100 TRZ UUO,IOACT ;LET USER SET ALL BITS EXCEPT IOACT + 000245' 542606 000002 05110 HRRM UUO,DEVIOS(DEVDAT) + 000246' 263140 000000 05120 POPJ PDP, + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 21 + 5-17-65 PART 2 + + + + 05160 ,DEC 06 00 EX COM L PT PRE 01 NEWBUF, BPNSET + 05170 ,H. R. MORSE 64-12-26 + 05180 ,CALLING SEQUENCE + 05190 , PUSHJ PDP,NEWBUF + 05200 , EXIT ALWAYS RETURNS HERE + 05210 ,CLEARS THE BUFFERE CURRENTLY POINTED TO BY THE INPUT BUFFER + 05220 ,ADDRESS (DEVDR) OF THE CURRENT DEVICE. SETS UP THE BYTE + 05230 ,POINTER (DEVPTR), AND THE ITEM COUNT (DEVCTR) AND RETURNS. + 05240 ,CALLING SEQUENCE + 05250 , PUSHJ PDP,BPNSET + 05260 , EXIT ALWAYS RETURNS HERE + 05270 ,SETS UP THE BYTE POINTER (DEVPTR) AND THE ITEM COUNT (DEVCTR) + 05280 ,OF THE CURRENT DEVICE AND RETURNS. + 05290 ,MONITOR INTERFACE + 05300 , STORAGE: 10 + 05310 , ROUTINES CALLED: BUFCLR, ITMSET + 05320 , SYMBOLS SET/USED: + 05330 , ACCUMULATORS: DEVDAT U PDP U + 05340 , ITEM U TAC S/U + 05350 , DEVICE DATA BLOCKS: DEVADR U + 05360 , DEVCTR S + 05370 , DEVPTR S/U + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 22 + 5-17-65 PART 2 + + + 05400 INTERN BPNSET,NEWBUF + + 000247' 550046 000007 05420 NEWBUF: HRRZ TAC,DEVADR(DEVDAT); TAC:=INPUT BUFFER HEADER ADDRESS + 000250' 260140 000124' 05430 PUSHJ PDP,BUFCLR; CLEAR INPUT BUFFER. + 000251' 540046 000007 05440 BPNSET: HRR TAC,DEVADR(DEVDAT) + 000252' 515040 007737 05450 HRLZI TAC,7737 + 000253' 404046 000010 05460 AND TAC,DEVPTR(DEVDAT); DEVPTR 0-5:=0, DEVPTR 12:=0 + 000254' 540046 000007 05470 HRR TAC,DEVADR(DEVDAT); DEVPTR 10-35:=C(DEVADR 18-35) + 1 + 000255' 350000 000001 05480 AOS TAC + 000256' 202046 000010 05490 MOVEM TAC,DEVPTR(DEVDAT) + 000257' 260140 000230' 05500 PUSHJ PDP,ITMSET; ITEM:=(BUFFER SIZE-1)[36/BYTE SIZE] + 000260' 202206 000011 05510 MOVEM ITEM,DEVCTR(DEVDAT); DEVCTR:=ITEM COUNT + 000261' 263140 000000 05520 POPJ PDP,; RETURN + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 23 + 5-17-65 PART 2 + + + + 05560 ,DEC 06 00 EX COM L PT PRE 02 SETBYT + 05570 ,H. R. MORSE 64-12-26 + 05580 ,CALLING SEQUENCE + 05590 , PUSHJ PDP,SETBYT + 05600 , EXIT ALWAYS RETURN HERE + 05610 ,SETS TAC 0-5:=0 + 05620 , TAC 6-11:=S + 05630 , TAC 12-13:=0 + 05640 , TAC 14-17:=PROG + 05650 ,WHERE S=35 IF DATA MODE (IOS 32-25) IS BINARY (B) + 05660 , S=8 IF DATA MODE IS IMAGE (I) + 05670 , S=7 IF DATA MODE IS ASCII PACKED (A) + 05680 , ASCII LINE (AL) + 05690 , ASCII SEQUENCED (AS) + 05700 , ASCII SEQUENCED (ASL) + 05710 , OR ALTERNATE MODE BREAK (AM) + 05720 ,MONITOR INTERFACE + 05730 , STORAGE: 12 + 05740 , SYMBOLS SET/USED: + 05750 , ACCUMULATORS: PROG U TAC S + 05760 , PDP U TAC1 S/U + 05770 , DEVICE DATA BLOCK: DEVIOS U + 05780 INTERN SETBYT + 000262' 200106 000002 05790 SETBYT: MOVE TAC1,DEVIOS(DEVDAT); FETCH DATA MODE, BITS 32-35 0 + 000263' 405100 000017 05800 ANDI TAC1, 17 + 000264' 302100 000013 05810 CAIE TAC1,IB ;DATA MODE IMAGE BINARY? + 000265' 306100 000014 05820 CAIN TAC1,B; IS DATA MODE=BINARY? + 000266' 505040 004407 05830 HRLI TAC,4400+PROG; SET BYTE SIZE TO 36. + 000267' 306100 000010 05840 CAIN TAC1,I; IS DATA MODE=IMAGE? + 000270' 254000 000275' 05850 JRST SETBY1 + 000271' 602100 000014 05860 TRNE TAC1,14; IS DATA MODE=ASCII PACKED,ASCII LINE, + 000272' 254000 000274' 05870 JRST .+2; ASCII SEQUENCED,OR ASCII SEQUENCED LINE + 000273' 505040 000707 05880 HRLI TAC,700+PROG; SET BYTE SIZE TO 7. + 000274' 263140 000000 05890 POPJ PDP,; RETURN + + 000275' 510046 000004 05910 SETBY1: HLLZ TAC,DEVMOD(DEVDAT) + 000276' 621040 770077 05920 TLZ TAC,770077 + 000277' 661040 000007 05930 TLO TAC,PROG + 000300' 263140 000000 05940 POPJ PDP, + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 24 + 5-17-65 PART 2 + + + + 05980 ,DEC 06 00 EX COM L PT PRE 01 STORE ITEM + 05990 ,H.R. MORSE 64-12-26 + 06000 ,CALLING SEQUENCE + 06010 , PUSHJ PDP,STODAT + 06020 , EXIT1 CHECKSUM ERROR + 06030 , EXIT2 BLOCK FULL OR BLOCK COMPLETE + 06040 , EXIT3 DATA STORED CORRECTLY + 06050 ,CALLED FROM AN INPUT SERVICE ROUTINE WITH A DATA ITEM IN AC DAT. + 06060 ,STORES THE DATA ITEM IN THE BUFFER, CHECKING TO SEE IF IT WERE + 06070 ,THE FIRST ITEM ON THE BUFFER AND SETTING UP THE POINTER AND + 06080 ,WORD COUNT APPROPRIATELY CHECKING THE MODE TO SEE IF ANY SPECIAL + 06090 ,PROCESSING NEED BE DONE. FOR EXAMPLE, GENERATION OF SEQUENCE + 06100 ,NUMBERS PRECEDING EACH LINE IN SEQUENCE MODE, OR THE TERMINATION + 06110 ,OF A BUFFER ON CERTAIN CHARACTERS IN OTHER MODES, OR IF THE BUFFER + 06120 ,RETURN OCCURS ON AN ERROR CONDITION. THE SECOND RETURN OCCURS + 06130 ,ON A BLOCK FULL CONDITION OR BLOCK COMPLETE CONDITION, THE THIRD + 06140 ,RETURN OCCURS ON THE DATA STORED CORRECTLY CONDITION. THIS + 06150 ,ROUTINE ALSO DOES SOME CHECKING ON INPUT OF BINARY RECORD, + 06160 ,PAPER TAPE OR CARDS. + 06170 ,CALLING SEQUENCE + 06180 , PUSHJ PDP,STOSQD + 06190 , XXXX ALWAYS SKIPS + 06200 , EXIT ALWAYS RETURNS HERE + 06210 ,STORES THE WORD COUNT:=C(DEVPTR 18-35) -C(DEVIAD 18-35) - 1 + 06220 ,IN THE BUFFER. + 06230 ,MONITOR INTERFACE + 06240 , STORAGE: 69 + 06250 , ROUTINES CALLED: ASCIA, CKS12, ITMSET, NEWBUF + 06260 , SYMBOLS SET/USED: + 06270 , ACCUMULATORS: DAT U PDP U + 06280 , DEVDAT U TAC S/U + 06290 , IOS S/U TAC1 S/U + 06300 , ITEM S/U + 06310 , DEVICE DATA BLOCK: DEVCTR U DEVPTR S/ + 06320 , DEVIAD U DEVSEQ S/ + 06330 , IO STATUS WORD: A U I U + 06340 , AS U IOBKTL S + 06350 , ASL U IODTER S + 06360 , B U IOFST S/ + 06370 , JOB BUFFER AREA: WORD COUNT S + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 25 + 5-17-65 PART 2 + + + 06400 INTERN STODAT, STOSQD + + 000301' 603000 000004 06420 STODAT: TLNE IOS,IOFST; WILL THE NEXT ITEM BE THE FIRST ITEM + 06430 , OF A BUFFER? + 000302' 260140 000247' 06440 PUSHJ PDP,NEWBUF; SET UP A NEW BUFFER. ITEM:=(BUFFER + 06450 , SIZE - 1)*[36/BYTE SIZE] + 000303' 135100 000000* 06460 LDB TAC1,PIOMOD; TAC1:=DATA MODE + 000304' 306100 000014 06470 CAIN TAC1,B; MODE=BINARY? + 000305' 254000 000344' 06480 JRST STOBIN + 000306' 621000 000004 06490 TLZ IOS,IOFST + 000307' 136246 000010 06500 STO1: DPBI DAT,DEVPTR(DEVDAT); STORE DATA IN BUFFER. + 000310' 302100 000000 06510 CAIE TAC1,A; MODE=ASCII, IMAGE, OR BINARY? + 000311' 306100 000010 06520 CAIN TAC1,I + 000312' 254000 000324' 06530 JRST STOAIB + 000313' 306100 000014 06540 CAIN TAC1,B + 000314' 254000 000324' 06550 JRST STOAIB + 000315' 307240 000214 06560 CAIG DAT,214 ;LINE FEED,FORM FEED, OR VERTICAL TAB? + 000316' 305240 000212 06570 CAIGE DAT,212 + 000317' 254000 000321' 06580 JRST .+2 ;NO + 000320' 254000 000336' 06590 JRST STOSQD ;YES + 000321' 365200 000000* 06600 SOJGE ITEM,CPOPJ2; ITEM:=C(ITEM)-1. IS C(ITEM)>OR=0? + 000322' 660000 040000 06610 STOE1: TRO IOS,IOBKTL ;IOBKTL:=1 + 000323' 254000 000056* 06620 JRST CPOPJ + 000324' 367200 000321* 06630 STOAIB: SOJG ITEM,CPOPJ2; ITEM:=C(ITEM)-1. IS C(ITEM)>0? + 000325' 306100 000000 06640 CAIN TAC1,A; MODE=ASCII? + 000326' 254000 000336' 06650 JRST STOSQD + 000327' 306100 000014 06660 CAIN TAC1,B; MODE=BINARY? + 000330' 254000 000354' 06670 JRST STOBND + 000331' 260140 000230' 06680 STOI: PUSHJ PDP,ITMSET; ITEM:=(BUFFER SIZE-1)*[36/BYTE SIZE] + 06690 , - C(DEVCTR) + 000332' 274206 000011 06700 SUB ITEM,DEVCTR(DEVDAT) + 000333' 550106 000007 06710 HRRZ TAC1,DEVIAD(DEVDAT) ;STORE ITEM COUNT INSTEAD OF + 000334' 271200 000001 06720 ADDI ITEM,1 ;IN FIRST WORD OF BUFFER + 000335' 344100 000342' 06730 AOJA TAC1,STOSQE + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 26 + 5-17-65 PART 2 + + + 000336' 200106 000007 06760 STOSQD: MOVE TAC1,DEVIAD(DEVDAT); TAC1:=ADDRESS OF WORD COUNT + 000337' 350000 000002 06770 AOS TAC1 + 000340' 550206 000010 06780 HRRZ ITEM,DEVPTR(DEVDAT); ITEM:=C(DEVPTR 18-25) - + 06790 , C(DEVIAD 18-35) -1 + 000341' 274200 000002 06800 SUB ITEM,TAC1 + 000342' 542220 000002 06810 STOSQE: HRRM ITEM,@TAC1 ;WORD COUNT TO FIRST WORD IN BUFFER + 000343' 254000 000065* 06820 JRST CPOPJ1; EXIT2. BLOCK COMPLETE + 000344' 627000 000004 06830 STOBIN: TLZN IOS,IOFST; WILL THE NEXT ITEM BE THE FIRST ITEM + 000345' 254000 000307' 06840 JRST STO1; OF A BUFFER? IOSFST:=0 + 000346' 550040 000005 06850 HRRZ TAC,DAT + 000347' 313040 000004 06860 CAMLE TAC,ITEM; IS WORD COUNT <OR= (BUFFER SIZE-1)* + 000350' 254000 000322' 06870 JRST STOE1; [36/BYTE SIZE]? + 000351' 200200 000001 06880 MOVE ITEM,TAC; ITEM:=WORD COUNT + 000352' 202266 000010 06890 MOVEM DAT,@DEVPTR(DEVDAT); STORE WORD COUNT IN BUFFER + 000353' 254000 000324* 06900 JRST CPOPJ2; EXIT3. DATA STORED CORRECTLY. + 000354' 550106 000007 06910 STOBND: HRRZ TAC1,DEVIAD(DEVDAT) + 000355' 260140 000143' 06920 PUSHJ PDP,CKS12; COMPUTE CHECKSUM + 000356' 270106 000007 06930 ADD TAC1, DEVIAD(DEVDAT) + 000357' 510120 000002 06940 HLLZ TAC1,@TAC1; DATA CHECKSUM=COMPUTED CHECKSUM? + 000360' 316040 000002 06950 CAMN TAC,TAC1 + 000361' 254000 000343* 06960 JRST CPOPJ1; EXIT2. BLOCK COMPLETE + 000362' 660000 100000 06970 TRO IOS,IODTER; IODTER:=1 + 000363' 254000 000323* 06980 JRST CPOPJ; EXIT1. CHECKSUM ERROR + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 27 + 5-17-65 PART 2 + + + + 07020 ,DEC 06 00 EX COM L PT PRE 01 UINTQ + 07030 ,H.R. MORSE 64-12-26 + 07040 ,CALLING SEQUENCE + 07050 , PUSHJ PDP, UINT1 + 07060 , EXIT ALWAYS RETURNS HERE + 07070 ,TAC:=CONTENTYS OF WORD FOLLOWING UUO CALL + 07080 ,FROM USERS AREA. + 07090 ,MONITOR INTERFACE + 07100 , STORAGE: 4 + 07110 , SYMBOLS SET/USED: + 07120 , ACCUMULATORS: PDP U TAC S/U + 07130 , PROG U + 07140 INTERN UINTQ + 000364' 200043 777777 07150 UINTQ: MOVE TAC, -1(PDP) ;TAC:=ADDRESS FOLLOWING UUO C + 000365' 505040 000007 07160 HRLI TAC, PROG ;RELOCATE ADDRESS + 000366' 200060 000001 07170 MOVE TAC, @TAC ;TAC:=CONTENTS OF WORD FOLLOW + 07180 ;UUO CALL FROM USERS AREA + 000367' 263140 000000 07190 POPJ PDP, ;RETURN + + 07210 END, + 000370' 576062 000000 + 000371' 637163 000000 + 000372' 001406 000001 + 000373' 360600 000001 + 000374' 301400 000001 + 000375' 300620 000005 + 000376' 222126 000007 + 000377' 300606 000010 + 000400' 000400 000014 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000401 + +8K CORE USED + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 28 + SYMBOL TABLE + + 000264 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADRCK 000132' EXT +ADVBFE 000000' INT +ADVBFF 000010' INT +AL 000001 INT +APR 000000 SPD +ASSAS1 000035' +ASSAS2 000036' +ASSASG 000023' INT +ASSCON 400000 INT +ASSIN 000020' INT +ASSPRG 200000 INT +B 000014 INT +BPNSET 000251' INT +BUFC1 000102' +BUFCLC 000071' INT +BUFCLR 000124' INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CKS12 000143' INT +CKS12A 000152' +CLDS 000023' EXT +CLEN 000037' EXT +CLOSB 002000 INT +CLOSE1 000000 EXT +CLRBYT 000167' INT +CLSIN 000002 INT +CLSOUT 000001 INT +CPOPJ 000363' EXT +CPOPJ1 000361' EXT +CPOPJ2 000353' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEV0 000053' +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLG 000044' INT + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 28-1 + SYMBOL TABLE + +DEVLOG 000005 INT +DEVLP0 000046' +DEVLP1 000064' +DEVLST 000063' EXT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVOPR 000060' EXT +DEVPHY 000056' INT +DEVPTR 000010 INT +DEVSER 000003 INT +DEVSRC 000041' INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERROR 000000 EXT +FOLD 000154' +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +ILLMOD 000243' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOALL 000175' INT +IOALL1 000177' +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 28-2 + SYMBOL TABLE + +IOIMPM 400000 INT +IOKILL 000210' INT +IONRCK 000100 INT +IORDEL 000100 INT +IORELS 000174' INT +IORET 000020 INT +IOS 000000 INT +IOSET 000212' INT +IOSETC 000216' INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +ITMCNT 000232' INT +ITMCT1 000233' INT +ITMSET 000230' INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000214' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000000 EXT +JOBFF 000117' EXT +LOOKB 040000 INT +MTW 010000 INT +NEWBUF 000247' INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PI 000004 SPD +PICHN 000100 INT +PIOMOD 000303' EXT +PJOBN 000212' EXT +PROG 000007 INT +PUUOAC 000202' EXT +RELEA1 000000 EXT +RELEA3 000174' EXT +RELEA5 000210' EXT +RUN 200000 INT +RUNABL 204000 INT +SCNOFF 000030' EXT +SCNON 000036' EXT +SETBY1 000275' +SETBYT 000262' INT +SETIOS 000237' INT +STO1 000307' +STOAIB 000324' + IOCSS - IO COMMON SYSTEM SUBROUTINES PAGE 28-3 + SYMBOL TABLE + +STOBIN 000344' +STOBND 000354' +STODAT 000301' INT +STOE1 000322' +STOI 000331' +STOSQD 000336' INT +STOSQE 000342' +SYSTAP 000062' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +UINTQ 000364' INT +USRJDA 000177' EXT +USRMOD 010000 INT +UUO 000014 INT +WAIT1 000000 EXT + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 111 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 111 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 111 + III OOO OOO III NNN NNN III 111111 + III OOO OOO III NNN NNN III 111111 + III OOO OOO III NNN NNN III 111111 + III OOO OOO III NNNNNN NNN III 111 + III OOO OOO III NNNNNN NNN III 111 + III OOO OOO III NNNNNN NNN III 111 + III OOO OOO III NNN NNN NNN III 111 + III OOO OOO III NNN NNN NNN III 111 + III OOO OOO III NNN NNN NNN III 111 + III OOO OOO III NNN NNNNNN III 111 + III OOO OOO III NNN NNNNNN III 111 + III OOO OOO III NNN NNNNNN III 111 + III OOO OOO III NNN NNN III 111 + III OOO OOO III NNN NNN III 111 + III OOO OOO III NNN NNN III 111 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 111111111 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 111111111 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 111111111 + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :IOINI1.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:21 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2445 +File will be deleted after printing + IOINI1 - IO INITIALIZATION PART 1 PAGE 1 + MINIMAL CONFIGURATION + + 00010 XLIST + 01930 LIST + IOINI1 - IO INITIALIZATION PART 1 PAGE 7 + MINIMAL CONFIGURATION + + + 00010 ;SOME MACROS FOR DEFINING CONFIGURATION + + 00030 DEFINE NAME (A) + 00040 <DEFINE NAME1 + 00050 <CONFIG: ASCIZ /A/ + 00060 INTERNAL CONFIG + 00070 > + 00080 XP A,0 + 00090 SUBTTL A CONFIGURATION + 00100 > + + 00120 DEFINE DATE (A) + 00130 <DEFINE DATE1 + 00140 <SYSDAT: ASCIZ /A/ + 00150 INTERNAL SYSDAT + 00160 >> + + 00180 DEFINE VERSION (A,B) + 00190 <DEFINE VERS1 + 00200 <SYSNUM: XWD ^D'A,^D'B + 00210 XP SYSMOD,^D'A + 00220 XP SYSVER,^D'B + 00230 INTERNAL SYSNUM + 00240 >> + + 00260 DEFINE CUSPTAPE (A) + 00270 <DEFINE CUSP1 + 00280 <SYSTAP: SIXBIT /A/ + 00290 INTERNAL SYSTAP + 00300 >> + + 00320 DEFINE ACPDL (J,CHJN,CHJPDN) + 00330 < CH'J'N=CHJN + 00340 CH'J'PDN=CHJPDN + 00350 > + IOINI1 - IO INITIALIZATION PART 1 PAGE 2 + MINIMAL CONFIGURATION + + + 00010 NAME <MINIMAL>^DEFINE NAME1 + <CONFIG: ASCIZ /MINIMAL/ + INTERNAL CONFIG + > + IOINI1 - IO INITIALIZATION PART 1 PAGE 2 + MINIMAL CONFIGURATION + + + 00040 DATE <8-16-65>^DEFINE DATE1 + <SYSDAT: ASCIZ /8-16-65/ + INTERNAL SYSDAT + >^ + 00050 VERSION 1,4^DEFINE VERS1 + <SYSNUM: XWD ^D1,^D4 + XP SYSMOD,^D1 + XP SYSVER,^D4 + INTERNAL SYSNUM + >^ + 00060 CUSPTAPE DTA0^DEFINE CUSP1 + <SYSTAP: SIXBIT /DTA0/ + INTERNAL SYSTAP + >^ + + 00080 ;DEFINE THE IO PART OF THE SYSTEM + 00090 ;THAT IS: + 00100 ; DEFINE INTERRUPT SERVICE ROTUINE TO BE USED + 00110 ; ASSIGN DEVICES TO PI CHANNELS + + 00130 DEFINE SYSTEM + 00140 < + 00150 ASSOC APR,6,<> + 00160 ASSOC CTY,3,<> + 00170 ASSOC SCN,3,<TTY0,TTY1> + 00180 ASSOC DTC,4,<DTA0> + 00190 > + + 000001 00210 DTSIZ=1 ;MULTIPLE DECTAPE DIRECTORIES + + 000001 00230 SCNLIN=1 + + 00250 ;DEFINE HIGHEST AC TO SAVE AND LENGTH OF PD LIST FOR EACH PI CHANNEL + + 000000 00270 ACPDL (1,0,0)^ CH1N=0 + 000000 00280 ACPDL (2,0,0)^ CH2N=0 + 000011 00290 ACPDL (3,11,20)^ CH3N=11 + 000011 00300 ACPDL (4,11,20)^ CH4N=11 + 000000 00310 ACPDL (5,0,0)^ CH5N=0 + 000017 00320 ACPDL (6,17,20^ CH6N=17 + 000000 00330 ACPDL (7,0,0)^ CH7N=0 + 00010 TITLE IOINI1 - IO INITIALIZATION PART 1 + 000000' 466231 644632 00020 NAME1^CONFIG: ASCIZ /MINIMAL/ + 000001' 406300 000000 + 000002' 341326 133132 00030 DATE1^SYSDAT: ASCIZ /8-16-65/ + 000003' 331520 000000 + 000004' 000001 000004 00040 VERS1^SYSNUM: XWD ^D1,^D4 + 000005' 446441 200000 00050 CUSP1^SYSTAP: SIXBIT /DTA0/ + + 00070 ;CONFIGURATION INDEPENDANT PART OF IOINIT FOLLOWS: + + 00090 EXTERNAL ERROR + IOINI1 - IO INITIALIZATION PART 1 PAGE 1 + MINIMAL CONFIGURATION + + + 00110 ;SETUP CHANNEL SAVE AND RESTORE ROUTINES + + 000000 00130 CHANU1=0 + 000000 00140 CHANU2=0 + 000000 00150 CHANU3=0 + 000000 00160 CHANU4=0 + 000000 00170 CHANU5=0 + 000000 00180 CHANU6=0 + 000000 00190 CHANU7=0 + 00200 DEFINE ASSOC(A,NO,D) + 00210 <IFE CHANU'NO,< + 00220 CHANU'NO=1 + 00230 INTERNAL CH'NO'SAV,CH'NO',CH'NO'XIT,CH'NO'SAC + 00240 + 00250 CH'NO'SAV: 0 + 00260 MOVEM CH'NO'N, CH'NO'SAC+CH'NO'N + 00270 MOVEI CH'NO'N, CH'NO'SAC + 00280 BLT CH'NO'N,CH'NO'SAC+CH'NO'N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 00290 MOVE PDP, CH'NO'CJ + 00300 JRST @CH'NO'SAV + 00310 + 00320 CH'NO'SAC: REPEAT CH'NO'N+1,<EXP 0> ;SPACE TO SAVE SOME AC'S + 00330 EXP CH'NO'XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 00340 REPEAT CH'NO'PDN-1,<EXP 0> ;REST OF PD LIST + 00350 + 00360 CH'NO'XIT: MOVSI CH'NO'N, CH'NO'SAC + 00370 BLT CH'NO'N, CH'NO'N + 00380 JEN @CH'NO + 00390 + 00400 CH'NO'CJ: XWD -CH'NO'PDN+1,CH'NO'SAC+CH'NO'N+1 ;INIT. SETTING OF P + 00410 + 00420 CH'NO': 0 ;PC STORED HERE BY JSR + 00430 JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 00440 AOS CH'NO'ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 00450 JEN @CH'NO ;AND DISMISS + 00460 > + 00470 > + 00480 ;GENERATE THE SAVE AND RESTORE ROUTINES + + 00500 SYSTEM^ + 000006' 000000 000000 CH6SAV: 0 + 000007' 202740 000033' MOVEM CH6N, CH6SAC+CH6N + 000010' 201740 000014' MOVEI CH6N, CH6SAC + 000011' 251740 000032' BLT CH6N,CH6SAC+CH6N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000012' 200140 000057' MOVE PDP, CH6CJ + 000013' 254020 000006' JRST @CH6SAV + 000014' 000000 000000 EXP 0 + 000015' 000000 000000 EXP 0 + 000016' 000000 000000 EXP 0 + 000017' 000000 000000 EXP 0 + 000020' 000000 000000 EXP 0 + 000021' 000000 000000 EXP 0 + IOINI1 - IO INITIALIZATION PART 1 PAGE 1-1 + MINIMAL CONFIGURATION + + 000022' 000000 000000 EXP 0 + 000023' 000000 000000 EXP 0 + 000024' 000000 000000 EXP 0 + 000025' 000000 000000 EXP 0 + 000026' 000000 000000 EXP 0 + 000027' 000000 000000 EXP 0 + 000030' 000000 000000 EXP 0 + 000031' 000000 000000 EXP 0 + 000032' 000000 000000 EXP 0 + 000033' 000000 000000 EXP 0 ;SPACE TO SAVE SOME AC'S + 000034' 000000 000054' EXP CH6XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000035' 000000 000000 EXP 0 + 000036' 000000 000000 EXP 0 + 000037' 000000 000000 EXP 0 + 000040' 000000 000000 EXP 0 + 000041' 000000 000000 EXP 0 + 000042' 000000 000000 EXP 0 + 000043' 000000 000000 EXP 0 + 000044' 000000 000000 EXP 0 + 000045' 000000 000000 EXP 0 + 000046' 000000 000000 EXP 0 + 000047' 000000 000000 EXP 0 + 000050' 000000 000000 EXP 0 + 000051' 000000 000000 EXP 0 + 000052' 000000 000000 EXP 0 + 000053' 000000 000000 EXP 0 ;REST OF PD LIST + 000054' 205740 000014' CH6XIT: MOVSI CH6N, CH6SAC + 000055' 251740 000017 BLT CH6N, CH6N + 000056' 254520 000060' JEN @CH6 + 000057' 777761 000034' CH6CJ: XWD -CH6PDN+1,CH6SAC+CH6N+1 ;INIT. SETTING OF P + 000060' 000000 000000 CH6: 0 ;PC STORED HERE BY JSR + 000061' 254000 000062' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000062' 350000 000317' AOS CH6ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000063' 254520 000060' JEN @CH6 ;AND DISMISS + 000064' 000000 000000 CH3SAV: 0 + 000065' 202440 000103' MOVEM CH3N, CH3SAC+CH3N + 000066' 201440 000072' MOVEI CH3N, CH3SAC + 000067' 251440 000102' BLT CH3N,CH3SAC+CH3N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000070' 200140 000127' MOVE PDP, CH3CJ + 000071' 254020 000064' JRST @CH3SAV + 000072' 000000 000000 EXP 0 + 000073' 000000 000000 EXP 0 + 000074' 000000 000000 EXP 0 + 000075' 000000 000000 EXP 0 + 000076' 000000 000000 EXP 0 + 000077' 000000 000000 EXP 0 + 000100' 000000 000000 EXP 0 + 000101' 000000 000000 EXP 0 + 000102' 000000 000000 EXP 0 + 000103' 000000 000000 EXP 0 ;SPACE TO SAVE SOME AC'S + 000104' 000000 000124' EXP CH3XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000105' 000000 000000 EXP 0 + 000106' 000000 000000 EXP 0 + IOINI1 - IO INITIALIZATION PART 1 PAGE 1-2 + MINIMAL CONFIGURATION + + 000107' 000000 000000 EXP 0 + 000110' 000000 000000 EXP 0 + 000111' 000000 000000 EXP 0 + 000112' 000000 000000 EXP 0 + 000113' 000000 000000 EXP 0 + 000114' 000000 000000 EXP 0 + 000115' 000000 000000 EXP 0 + 000116' 000000 000000 EXP 0 + 000117' 000000 000000 EXP 0 + 000120' 000000 000000 EXP 0 + 000121' 000000 000000 EXP 0 + 000122' 000000 000000 EXP 0 + 000123' 000000 000000 EXP 0 ;REST OF PD LIST + 000124' 205440 000072' CH3XIT: MOVSI CH3N, CH3SAC + 000125' 251440 000011 BLT CH3N, CH3N + 000126' 254520 000130' JEN @CH3 + 000127' 777761 000104' CH3CJ: XWD -CH3PDN+1,CH3SAC+CH3N+1 ;INIT. SETTING OF P + 000130' 000000 000000 CH3: 0 ;PC STORED HERE BY JSR + 000131' 254000 000132' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000132' 350000 000314' AOS CH3ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000133' 254520 000130' JEN @CH3 ;AND DISMISS + 000134' 000000 000000 CH4SAV: 0 + 000135' 202440 000153' MOVEM CH4N, CH4SAC+CH4N + 000136' 201440 000142' MOVEI CH4N, CH4SAC + 000137' 251440 000152' BLT CH4N,CH4SAC+CH4N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000140' 200140 000177' MOVE PDP, CH4CJ + 000141' 254020 000134' JRST @CH4SAV + 000142' 000000 000000 EXP 0 + 000143' 000000 000000 EXP 0 + 000144' 000000 000000 EXP 0 + 000145' 000000 000000 EXP 0 + 000146' 000000 000000 EXP 0 + 000147' 000000 000000 EXP 0 + 000150' 000000 000000 EXP 0 + 000151' 000000 000000 EXP 0 + 000152' 000000 000000 EXP 0 + 000153' 000000 000000 EXP 0 ;SPACE TO SAVE SOME AC'S + 000154' 000000 000174' EXP CH4XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000155' 000000 000000 EXP 0 + 000156' 000000 000000 EXP 0 + 000157' 000000 000000 EXP 0 + 000160' 000000 000000 EXP 0 + 000161' 000000 000000 EXP 0 + 000162' 000000 000000 EXP 0 + 000163' 000000 000000 EXP 0 + 000164' 000000 000000 EXP 0 + 000165' 000000 000000 EXP 0 + 000166' 000000 000000 EXP 0 + 000167' 000000 000000 EXP 0 + 000170' 000000 000000 EXP 0 + 000171' 000000 000000 EXP 0 + 000172' 000000 000000 EXP 0 + 000173' 000000 000000 EXP 0 ;REST OF PD LIST + IOINI1 - IO INITIALIZATION PART 1 PAGE 1-3 + MINIMAL CONFIGURATION + + 000174' 205440 000142' CH4XIT: MOVSI CH4N, CH4SAC + 000175' 251440 000011 BLT CH4N, CH4N + 000176' 254520 000200' JEN @CH4 + 000177' 777761 000154' CH4CJ: XWD -CH4PDN+1,CH4SAC+CH4N+1 ;INIT. SETTING OF P + 000200' 000000 000000 CH4: 0 ;PC STORED HERE BY JSR + 000201' 254000 000202' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000202' 350000 000315' AOS CH4ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000203' 254520 000200' JEN @CH4 ;AND DISMISS + + 00520 ;SET UP NULL CHANNEL ROUTINES FOR UNUSED CHANNELS + + 00540 DEFINE NULCHN(J) + 00550 < + 00560 INTERNAL CH'J,CH'J'XIT + 00570 CH'J: 0 + 00580 CH'J'XIT: AOS CH'J'ERR + 00590 JEN @CH'J + 00600 > + + 00620 IFE CHANU1,<NULCHN(1)>^ + 000204' 000000 000000 CH1: 0 + 000205' 350000 000312' CH1XIT: AOS CH1ERR + 000206' 254520 000204' JEN @CH1 + 00630 IFE CHANU2,<NULCHN(2)>^ + 000207' 000000 000000 CH2: 0 + 000210' 350000 000313' CH2XIT: AOS CH2ERR + 000211' 254520 000207' JEN @CH2 + 00640 IFE CHANU3,<NULCHN(3)> + 00650 IFE CHANU4,<NULCHN(4)> + 00660 IFE CHANU5,<NULCHN(5)>^ + 000212' 000000 000000 CH5: 0 + 000213' 350000 000316' CH5XIT: AOS CH5ERR + 000214' 254520 000212' JEN @CH5 + 00670 IFE CHANU6,<NULCHN(6)> + 00680 IFE CHANU7,<NULCHN(7)>^ + 000215' 000000 000000 CH7: 0 + 000216' 350000 000320' CH7XIT: AOS CH7ERR + 000217' 254520 000215' JEN @CH7 + IOINI1 - IO INITIALIZATION PART 1 PAGE 2 + MINIMAL CONFIGURATION + + + + 00720 ;ASSIGN DEVICE TO CHANNELS AND SETUP CORESPONDENCE TABLE + 00730 ;OF CHANNELS TO SERVICE ROUTINES + + 00750 DEFINE ASSOC (A,N,D) + 00760 < A'RET=CH'N'XIT + 00770 A'SAV=CH'N'SAV + 00780 A'SAC=CH'N'SAC + 00790 A'CHL=CH'N + 00800 A'CHN=N + 00810 A'BIT=1 + 00820 REPEAT 7-N,<A'BIT=A'BIT*2> + 00830 A'OFF=1000+A'BIT ;CONO PI, A'OFF WIL TURN CHANNEL OFF + 00840 A'ON=2000+A'BIT ;TURN BACK ON + 00850 A'ACT=4000+A'BIT ;FORCE INTERRUPT ON CHAN. + 00860 INTERN A'RET, A'SAV, A'CHL, A'CHN, A'SAC + 00870 INTERNAL A'OFF,A'ON,A'ACT,A'BIT + 00880 XWD A'CHL,A'INT + 00890 EXTERNAL A'INT + 00900 > + + 00920 INTERNAL DEVINT + 000220' 00930 DEVINT: SYSTEM^ + 000220' 000060' 000000* XWD APRCHL,APRINT + 000221' 000130' 000000* XWD CTYCHL,CTYINT + 000222' 000130' 000000* XWD SCNCHL,SCNINT + 000223' 000200' 000000* XWD DTCCHL,DTCINT + 000004 00940 NDEV=.-DEVINT ;NO. OF DEVICE INTERUPT SERVICE ROUTINES + 000003 00950 NDEVM1=NDEV-1 ;(USED BY ONCE) + 00960 INTERNAL NDEVM1 + IOINI1 - IO INITIALIZATION PART 1 PAGE 3 + MINIMAL CONFIGURATION + + + + 01000 ;INITIALIZE SOME IO DEVICES + 01010 ;IOINI CALLED BY A PUSHJ PDP, FROM SYSINI AT SYSTEM INITIALIZATION + + 01030 DEFINE IOINIT (A) + 01040 <IRP A + 01050 < EXTERNAL A'INI + 01060 PUSHJ PDP,A'INI + 01070 >> + + 01090 DEFINE ASSOC (A,B,C) + 01100 < IFIDN <A><MTC>,< IOINIT MTC> + 01110 IFIDN <A><DTC>,< IOINIT DTC> + 01120 IFIDN <A><LPT>,< IOINIT LPT> + 01130 IFIDN <A><SCN>,< IOINIT SCN> + 01140 IFIDN <A><PTP>,<IOINIT PTP> + 01150 IFIDN <A><PTR>,<IOINIT PTR> + 01160 > + + 01180 INTERNAL IOINI + + 000224' 01200 IOINI: SYSTEM^ + 000224' 260140 000000* PUSHJ PDP,SCNINI + 000225' 260140 000000* PUSHJ PDP,DTCINI + 000226' 254000 000000* 01210 JRST CLKINI ;ALWAYS INIT. CLOCK + + 01230 EXTERNAL CLKINI + IOINI1 - IO INITIALIZATION PART 1 PAGE 4 + MINIMAL CONFIGURATION + + + + 01270 ;CLOCK CONTROL PARAMETERS + + 004006 01290 CLDS=4000+APRCHN ;CLOCK DISABLE + 000206 01300 CLEN=200+APRCHN ;CLOCK ENABLE + + 01320 INTERNAL CLDS,CLEN + + 01340 ;BYTE POINTERS + + 000227' 270400 000014 01360 PUUOAC: POINT 4,UUO,12 ;UUO AC FIELD + 000230' 000400 000000 01370 PIOMOD: POINT 4,IOS,35 ;MODE BITS + 000231' 331106 000001 01380 PJOBN: POINT 9,DEVCHR(DEVDAT),8 ;DEVICE JOB ASSIGNMENT + 000232' 220406 000001 01390 PJDCHN: POINT 4,DEVCHR(DEVDAT),17 ;JOB DEVICE CHANNEL NO. + 000233' 140606 000001 01400 PUNIT: POINT 6,DEVCHR(DEVDAT),23 ;DEVICE UNIT NO. + + 01420 INTERNAL PUUOAC,PIOMOD,PJOBN,PJDCHN,PUNIT + + 01440 ;COMMON SUBROUTINE RETURNS + + 000234' 350003 000000 01460 CPOPJ2: AOS (PDP) + 000235' 350003 000000 01470 CPOPJ1: AOS (PDP) + 000236' 263140 000000 01480 CPOPJ: POPJ PDP, + + 01500 INTERNAL CPOPJ,CPOPJ1,CPOPJ2 + IOINI1 - IO INITIALIZATION PART 1 PAGE 5 + MINIMAL CONFIGURATION + + + 01530 ,SYSTEM DATA STORAGE + + + 01560 INTERNAL JOB,JOBADR,JBTADR,JBTSTS,USRREL,USRINF,USRJDA + 01570 INTERNAL USRPDP,JOBDAT,USRDDT,USRSAV,USRUXT,USRLO,USRHI + 01580 INTERNAL COMCNT,IOCOMP,USRPOV,STOPU,SCHEDF,TIME,JBTAD1 + 01590 INTERNAL MTAVAL,DCAVAL,DTAVAL,MTREQ,DCREQ,DTREQ,TTYTAB,CORTAB + 01600 INTERNAL CH1ERR,CH2ERR,CH3ERR,CH4ERR,CH5ERR,CH6ERR,CH7ERR + 01610 INTERNAL CORLST,CORTAB,CORTAL,SYSEND,SYSBEG,DEVOPR + + 000000 01630 JOBN=0 ;DEFINE NO. OF JOBS (0 THRU JOBN-1) + 01640 ;THERE MUST BE MORE TTY DEVICE DATA BLCKS THAN JOBS. + + 01660 DEFINE ASSOC (A,N,D) + 01670 <IRP D,<IFIDN <A><SCN>,<JOBN=JOBN+1>>> + 01680 SYSTEM^ + 777777 777776 01690 MJOBN=-JOBN + 01700 INTERNAL JOBN,MJOBN + + 000237' 01720 SYSBEG: ;FIRST LOC IN SYSTEM DATA AREA + 01730 XP SYSBG1,SYSBEG+1 ;FIRST LOC+1 + 000237' 000000 000000 01740 JOB: 0 ;CURRENT JOB NUMBER EXCEPT WEN SCHEDF IS NON-ZERO + 000240' 000000 000000 01750 JOBADR: 0 ;CONTAINS ADDRESS OF JOB CURRENTLY RUNNING + 000241' 000000 000000 01760 JOBDAT: 0 ;CONTAINS ADDRESS OF JOB DATA AREA + + 000242' 01780 JBTADR: BLOCK JOBN ;C(LH)=PROTECT, C(RH)=RELOCATION + 01790 XP JBTAD1,JBTADR+1 ;ADDRESS OF JOB 1(USED BY SYSMAK) + 000244' 01800 JBTSTS: BLOCK JOBN ;CONTAINS STATUS INFORMATION FOR EACH J + + 000246' 000000 000000 01820 USRPDP: 0 ;USER PUSH DOWN POINTER + 000247' 000000 000000 01830 USRREL: 0 ;LH=0, RH CONTAINS CONTENTS OF PROTECTION REGISTER + 000250' 01840 USRLO: ;FIRST LOC CLEARD BY SETUSR SUBROUTINE + 000250' 000000 000000 01850 USRUXT: 0 ;UNUSED, JOBUXT USED TO SAVE UUO PC(UUO0) + 000251' 000000 000000 01860 USRLEV: 0 ;UNUSED, JOBLEV USED TO SAVE LOC. 40 + 000252' 000000 000000 01870 USRSAV: 0 ;TEMPORARY STORAGE FOR UUO HANDLER + 000253' 000000 000000 01880 USRPOV: 0 ;PUSH DOWN OVERFLOW TRAP + 000254' 01890 BLOCK 2 + 000256' 000000 000000 01900 USRINF: 0 ;UN LAYED OUT USER INFORMATION + 000257' 01910 USRJDA: BLOCK 20 ;RH=JOB DEVICE ASSIGNMENTS FOR THIS USER,LH=UUOS + 01920 XP USRHI,.-1 ;LAST LOC CLEARED BY SETUSR ROUTINE + 01930 XP USRPFI,.-1 ;LAST LOC PROTECTED FROM IO SERVICE + 01940 XP USRPFU,. ;LAST LOC PROTECTED FROM USER PROGRAM + 000277' 000000 000000 01950 USRDDT: 0 ;STARTING ADDR OF USER DDT + + 01970 ;DEVICE JUSTR BECOME AVAILABLE FLAGS + 000300' 000000 000000 01980 MTAVAL: 0 ;MAGNETIC TAPE + 000301' 000000 000000 01990 DCAVAL: 0 ;DATA CONTROL + 000302' 000000 000000 02000 DTAVAL: 0 ;DECTAPE + + 02020 ;NUMBER OF JOBS WAITING FOR DEVICES(-1=NONE, 0=1 USING, 1=1 USING) + 000303' 777777 777777 02030 MTREQ: -1 ;MAGNETIC TAPE + 000304' 777777 777777 02040 DCREQ: -1 ;DATA CONTROL + IOINI1 - IO INITIALIZATION PART 1 PAGE 5-1 + MINIMAL CONFIGURATION + + 000305' 777777 777777 02050 DTREQ: -1 ;DECTAPE + 000306' 000000 000000 02060 IOCOMP: 0 ;NUMBER OF USERS IN IO WAIT STATE + 000307' 000000 000000 02070 COMCNT: 0 ;NUMBER OF COMMANDS TYPED-IN BUT NOT DECODED + 000310' 000000 000000 02080 STOPU: 0 ;NON-ZERO WHEN CLOCK INTERRUPT FORCED TO STOP USER + 000311' 000000 000000 02090 SCHEDF: 0 ;NON-ZERO WHEN CLOCK ROUTINE IS SCHEDULING + + 000312' 000000 000000 02110 CH1ERR: 0 ;SPURIOUS INTERRUPT COUNTS FOR EACH CHANNEL + 000313' 000000 000000 02120 CH2ERR: 0 + 000314' 000000 000000 02130 CH3ERR: 0 + 000315' 000000 000000 02140 CH4ERR: 0 + 000316' 000000 000000 02150 CH5ERR: 0 + 000317' 000000 000000 02160 CH6ERR: 0 + 000320' 000000 000000 02170 CH7ERR: 0 + + 000251' 02190 USRLO1=USRLO+1 + 02200 INTERNAL USRLO1 + IOINI1 - IO INITIALIZATION PART 1 PAGE 6 + MINIMAL CONFIGURATION + + + 000321' 000000 000000 02230 TIME: 0 ;TIME SYSTEM HAS RUN IN 60THS OF A SECOND + + + 02260 XP TTYLEN,SCNLIN+1 ;LENGTH OF TTY TRANSLATOR TABLES(INCLUDING CTY) + 000322' 02270 TTYTAB: BLOCK TTYLEN ;TTY TRANSLATOR TABLE + 02280 ;SIGN BIT = 1 IF COMMAND JUST TYPED + 02290 ;BITS 1 -9, JOB CONSOLE IS ATTACHED TO + 02300 ;BITS 18-35, THE DEVICE DATA BLOCK FOR + 000324' 000000 000000 02310 DEVOPR: 0 ;SIXBIT PHYSICAL NAME OF OPERATORS + 02320 ;CONSOLE SET BY SCNSER TO FIRST ACTIVE TTY. + 02330 ;LOCATIONS FOR CORE ALLOCATION + 02340 XP CORBLK,^D256 ;NO. OF 1K BLOCKS POSSIBLE + 000325' 02350 CORTAB: BLOCK <CORBLK>/^D36+1 ;1K BLOCK USE BIT TABLE + 02360 ;A 1 MEANS BLOCK IS IN USE + 000335' 000000 000000 02370 CORLST: 0 ;1 BIT BYTE POINTER TO LAST FREE BLOCK POSSIBLE + 000336' 000000 000000 02380 CORTAL: 0 ;TOTAL NO. OF FREE CORE BLOCKS LEFT + 02390 ;CORLST AND CORTAL ARE SET UP AT SYSTEM INITIALIZATION + + 000336' 02410 SYSEND=.-1 ;LAST LOC. CLEARED BY SYSINI + + 02430 INTERNAL SYSSIZ + 02440 EXTERNAL SYSFIN + 000337' 000000 000000* 02450 SYSSIZ: EXP SYSFIN ;SIZE OF MONITOR(LAST LOC. USED) + IOINI1 - IO INITIALIZATION PART 1 PAGE 7 + MINIMAL CONFIGURATION + + + 02480 END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000340 + +9K CORE USED + IOINI1 - IO INITIALIZATION PART 1 PAGE 8 + SYMBOL TABLE + + 000436 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APRACT 004002 INT +APRBIT 000002 INT +APRCHL 000060' INT +APRCHN 000006 INT +APRINT 000220' EXT +APROFF 001002 INT +APRON 002002 INT +APRRET 000054' INT +APRSAC 000014' INT +APRSAV 000006' INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CH1 000204' INT +CH1ERR 000312' INT +CH1N 000000 +CH1PDN 000000 +CH1XIT 000205' INT +CH2 000207' INT +CH2ERR 000313' INT +CH2N 000000 +CH2PDN 000000 +CH2XIT 000210' INT +CH3 000130' INT +CH3CJ 000127' +CH3ERR 000314' INT +CH3N 000011 +CH3PDN 000020 +CH3SAC 000072' INT +CH3SAV 000064' INT +CH3XIT 000124' INT +CH4 000200' INT +CH4CJ 000177' +CH4ERR 000315' INT +CH4N 000011 +CH4PDN 000020 +CH4SAC 000142' INT +CH4SAV 000134' INT +CH4XIT 000174' INT +CH5 000212' INT +CH5ERR 000316' INT +CH5N 000000 +CH5PDN 000000 +CH5XIT 000213' INT +CH6 000060' INT + IOINI1 - IO INITIALIZATION PART 1 PAGE 8-1 + SYMBOL TABLE + +CH6CJ 000057' +CH6ERR 000317' INT +CH6N 000017 +CH6PDN 000020 +CH6SAC 000014' INT +CH6SAV 000006' INT +CH6XIT 000054' INT +CH7 000215' INT +CH7ERR 000320' INT +CH7N 000000 +CH7PDN 000000 +CH7XIT 000216' INT +CHANU1 000000 +CHANU2 000000 +CHANU3 000001 +CHANU4 000001 +CHANU5 000000 +CHANU6 000001 +CHANU7 000000 +CLDS 004006 INT +CLEN 000206 INT +CLKINI 000226' EXT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +COMCNT 000307' INT +CONFIG 000000' INT +CORBLK 000400 INT +CORLST 000335' INT +CORTAB 000325' INT +CORTAL 000336' INT +CPOPJ 000236' INT +CPOPJ1 000235' INT +CPOPJ2 000234' INT +CTYACT 004020 INT +CTYBIT 000020 INT +CTYCHL 000130' INT +CTYCHN 000003 INT +CTYINT 000221' EXT +CTYOFF 001020 INT +CTYON 002020 INT +CTYRET 000124' INT +CTYSAC 000072' INT +CTYSAV 000064' INT +D 000017 INT +DAT 000005 INT +DCAVAL 000301' INT +DCL 000001 INT +DCREQ 000304' INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT + IOINI1 - IO INITIALIZATION PART 1 PAGE 8-2 + SYMBOL TABLE + +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVINT 000220' INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVOPR 000324' INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTAVAL 000302' INT +DTCACT 004010 INT +DTCBIT 000010 INT +DTCCHL 000200' INT +DTCCHN 000004 INT +DTCINI 000225' EXT +DTCINT 000223' EXT +DTCOFF 001010 INT +DTCON 002010 INT +DTCRET 000174' INT +DTCSAC 000142' INT +DTCSAV 000134' INT +DTREQ 000305' INT +DTSIZ 000001 +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERROR 000000 EXT +I 000010 INT +IB 000013 INT + IOINI1 - IO INITIALIZATION PART 1 PAGE 8-3 + SYMBOL TABLE + +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCOMP 000306' INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IOINI 000224' INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTAD1 000243' INT +JBTADR 000242' INT +JBTSTS 000244' INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000237' INT +JOBADR 000240' INT +JOBDAT 000241' INT +JOBN 000002 INT +LOOKB 040000 INT +MINIMA 000000 INT +MJOBN 777777 777776 INT +MTAVAL 000300' INT +MTREQ 000303' INT +MTW 010000 INT +NDEV 000004 +NDEVM1 000003 INT +OBUFB 100000 INT +OUTPB 004000 INT + IOINI1 - IO INITIALIZATION PART 1 PAGE 8-4 + SYMBOL TABLE + +PDP 000003 INT +PICHN 000100 INT +PIOMOD 000230' INT +PJDCHN 000232' INT +PJOBN 000231' INT +PROG 000007 INT +PUNIT 000233' INT +PUUOAC 000227' INT +RUN 200000 INT +RUNABL 204000 INT +SCHEDF 000311' INT +SCNACT 004020 INT +SCNBIT 000020 INT +SCNCHL 000130' INT +SCNCHN 000003 INT +SCNINI 000224' EXT +SCNINT 000222' EXT +SCNLIN 000001 +SCNOFF 001020 INT +SCNON 002020 INT +SCNRET 000124' INT +SCNSAC 000072' INT +SCNSAV 000064' INT +STOPU 000310' INT +SYSBEG 000237' INT +SYSBG1 000240' INT +SYSDAT 000002' INT +SYSEND 000336' INT +SYSFIN 000337' EXT +SYSMOD 000001 INT +SYSNUM 000004' INT +SYSSIZ 000337' INT +SYSTAP 000005' INT +SYSVER 000004 INT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TIME 000321' INT +TTYATC 020000 INT +TTYLEN 000002 INT +TTYTAB 000322' INT +TTYUSE 010000 INT +USRDDT 000277' INT +USRHI 000276' INT +USRINF 000256' INT +USRJDA 000257' INT +USRLEV 000251' +USRLO 000250' INT +USRLO1 000251' INT +USRMOD 010000 INT +USRPDP 000246' INT +USRPFI 000276' INT +USRPFU 000277' INT + IOINI1 - IO INITIALIZATION PART 1 PAGE 8-5 + SYMBOL TABLE + +USRPOV 000253' INT +USRREL 000247' INT +USRSAV 000252' INT +USRUXT 000250' INT +UUO 000014 INT + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 222222222 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 222222222 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 222222222 + III OOO OOO III NNN NNN III 222 222 + III OOO OOO III NNN NNN III 222 222 + III OOO OOO III NNN NNN III 222 222 + III OOO OOO III NNNNNN NNN III 222 + III OOO OOO III NNNNNN NNN III 222 + III OOO OOO III NNNNNN NNN III 222 + III OOO OOO III NNN NNN NNN III 222 + III OOO OOO III NNN NNN NNN III 222 + III OOO OOO III NNN NNN NNN III 222 + III OOO OOO III NNN NNNNNN III 222 + III OOO OOO III NNN NNNNNN III 222 + III OOO OOO III NNN NNNNNN III 222 + III OOO OOO III NNN NNN III 222 + III OOO OOO III NNN NNN III 222 + III OOO OOO III NNN NNN III 222 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 222222222222222 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 222222222222222 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 222222222222222 + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :IOINI2.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:21 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2424 +File will be deleted after printing + IOINI2 - IO INITIALIZATION PART 2 PAGE 1 + MINIMAL CONFIGURATION + + 00010 XLIST + 01930 LIST + IOINI2 - IO INITIALIZATION PART 2 PAGE 7 + MINIMAL CONFIGURATION + + + 00010 ;SOME MACROS FOR DEFINING CONFIGURATION + + 00030 DEFINE NAME (A) + 00040 <DEFINE NAME1 + 00050 <CONFIG: ASCIZ /A/ + 00060 INTERNAL CONFIG + 00070 > + 00080 XP A,0 + 00090 SUBTTL A CONFIGURATION + 00100 > + + 00120 DEFINE DATE (A) + 00130 <DEFINE DATE1 + 00140 <SYSDAT: ASCIZ /A/ + 00150 INTERNAL SYSDAT + 00160 >> + + 00180 DEFINE VERSION (A,B) + 00190 <DEFINE VERS1 + 00200 <SYSNUM: XWD ^D'A,^D'B + 00210 XP SYSMOD,^D'A + 00220 XP SYSVER,^D'B + 00230 INTERNAL SYSNUM + 00240 >> + + 00260 DEFINE CUSPTAPE (A) + 00270 <DEFINE CUSP1 + 00280 <SYSTAP: SIXBIT /A/ + 00290 INTERNAL SYSTAP + 00300 >> + + 00320 DEFINE ACPDL (J,CHJN,CHJPDN) + 00330 < CH'J'N=CHJN + 00340 CH'J'PDN=CHJPDN + 00350 > + IOINI2 - IO INITIALIZATION PART 2 PAGE 2 + MINIMAL CONFIGURATION + + + 00010 NAME <MINIMAL>^DEFINE NAME1 + <CONFIG: ASCIZ /MINIMAL/ + INTERNAL CONFIG + > + IOINI2 - IO INITIALIZATION PART 2 PAGE 2 + MINIMAL CONFIGURATION + + + 00040 DATE <8-16-65>^DEFINE DATE1 + <SYSDAT: ASCIZ /8-16-65/ + INTERNAL SYSDAT + >^ + 00050 VERSION 1,4^DEFINE VERS1 + <SYSNUM: XWD ^D1,^D4 + XP SYSMOD,^D1 + XP SYSVER,^D4 + INTERNAL SYSNUM + >^ + 00060 CUSPTAPE DTA0^DEFINE CUSP1 + <SYSTAP: SIXBIT /DTA0/ + INTERNAL SYSTAP + >^ + + 00080 ;DEFINE THE IO PART OF THE SYSTEM + 00090 ;THAT IS: + 00100 ; DEFINE INTERRUPT SERVICE ROTUINE TO BE USED + 00110 ; ASSIGN DEVICES TO PI CHANNELS + + 00130 DEFINE SYSTEM + 00140 < + 00150 ASSOC APR,6,<> + 00160 ASSOC CTY,3,<> + 00170 ASSOC SCN,3,<TTY0,TTY1> + 00180 ASSOC DTC,4,<DTA0> + 00190 > + + 000001 00210 DTSIZ=1 ;MULTIPLE DECTAPE DIRECTORIES + + 000001 00230 SCNLIN=1 + + 00250 ;DEFINE HIGHEST AC TO SAVE AND LENGTH OF PD LIST FOR EACH PI CHANNEL + + 000000 00270 ACPDL (1,0,0)^ CH1N=0 + 000000 00280 ACPDL (2,0,0)^ CH2N=0 + 000011 00290 ACPDL (3,11,20)^ CH3N=11 + 000011 00300 ACPDL (4,11,20)^ CH4N=11 + 000000 00310 ACPDL (5,0,0)^ CH5N=0 + 000017 00320 ACPDL (6,17,20^ CH6N=17 + 000000 00330 ACPDL (7,0,0)^ CH7N=0 + 00010 TITLE IOINI2 - IO INITIALIZATION PART 2 + + 00030 ;DEFINITIONS OF DEVCHN AND DEVBIT + 00040 ;THESE ALSO OCCUR IN IOINT1 + + 00060 DEFINE ASSOC (A,N,D) + 00070 < + 00080 A'CHN=N + 00090 > + + 00110 SYSTEM^ + IOINI2 - IO INITIALIZATION PART 2 PAGE 1 + MINIMAL CONFIGURATION + + + IOINI2 - IO INITIALIZATION PART 2 PAGE 2 + MINIMAL CONFIGURATION + + + + 00160 ;APR PIP BITS + + 000001 00180 APRBIT=1 + 000002 00190 REPEAT 7-APRCHN,<APRBIT=APRBIT*2> + 00200 XP PION,200 ;CONO PI,PION TURNS PI SYSTEM ON + 00210 XP PIOFF,400 ;TURN IT OFF + 00220 XP PICLK,PION+1B24+APRBIT ;TURN PI ON, AND FORCE CLOCK INT. + 00230 XP CLKOFF,1000+APRCHN ;CONO APR,CLKOFF TURNS CLOCK FLAG OFF + IOINI2 - IO INITIALIZATION PART 2 PAGE 3 + MINIMAL CONFIGURATION + + + + 00270 ;ASSEMBLE ALL DEVICE DATA BLOCKS AND LINK THEM TOGETHER + + 00290 DEFINE SCNDDB (A,B,C) + 00300 < INTERNAL C'DB + 00310 C'DB: ZZ=. + 00320 SIXBIT /C/ + 00330 XWD A'CHN*PICHN,STTYBF+1 ;LONG ENOUGH FOR PRINTING + 00340 ;SEQUENCE CARD IMAGE. + 00350 ;USER BUFFERS ARE 2 WORDS + 00360 ;LONGER THEN THE MONITORY TTY BUFFERS. + 00370 0 + 00380 EXTERNAL TTYDSP + 00390 XWD C,TTYDSP + 00400 XWD DVTTY+DVIN+DVOUT,3 + 00410 0 + 00420 0 + 00430 XWD PROG,0 + 00440 XWD PROG,0 + 00450 XP TTYPTR,.-ZZ + 00460 0 + 00470 XP TTYCTR,.-ZZ + 00480 0 + 00490 XP TTYSAV,.-ZZ + 00500 0 + 00510 XP TTYBUF,.-ZZ + 00520 XP TTYBM1,TTYBUF-1 + 00530 XP STTYBF,20 + 00540 XP STTYB1,STTYBF+1 ;LENGTH+1 + 00550 BLOCK STTYBF + 00560 XP TTYBFE,.-ZZ-1 + 00570 + 00580 ;LINE NO. PARAMETERS + 00590 XP TTYLEN,SCNLIN+1 ;LENGTH OF TTY TRANSLATOR TABLE(INCLUDE TTY) + 00600 XP TSCNLN,SCNLIN-1 ;HIGHEST TTY LINE NO.(NOT COUNTING CTY) + 00610 XP TCONLN,TSCNLN+1 ;CTY LINE NUMBER + 00620 XP MTTYLN,-TTYLEN ;NEGATIVEL LENGTH OF TRANSLATOR TABLE + 00630 XP FSNCHN,SCNCHN*101 ;CHANNEL ASSIGNED, FOR FULL DUPLEX SCN. + 00640 XP TTYLST,TTY0DB ;FIRST TTY DEVICE DATA BLOCK + 00650 > + + 00670 ;NEG. NO. OF TELTYPE DEVICE DATA BLOCKS + + 000000 00690 MLTTYL=0 + 00700 DEFINE ASSOC (A,N,D) + 00710 <IRP D,<IFIDN <A>,<SCN>,<MLTTYL=MLTTYL-1>>> + + 00730 SYSTEM^ + + 00750 INTERNAL MLTTYL + IOINI2 - IO INITIALIZATION PART 2 PAGE 4 + MINIMAL CONFIGURATION + + + + 00790 ;MAG TAPE DEVICE DATA BLOCK + + 000000 00810 MTCNUM=0 + + 00830 DEFINE MTCDDB (A,B,C) + 00840 < INTERNAL C'DB + 00850 C'DB: SIXBIT /C/ + 00860 MTCNUM=MTCNUM+1 + 00870 XWD IORET+A'CHN*PICHN,<MTCNUM-1>*10000+201 + 00880 + 00890 0 + 00900 XWD C,MTDISP + 00910 EXTERNAL MTDISP + 00920 XWD 4400+DVMTA+DVIN+DVOUT,154403 + 00930 0 + 00940 0 + 00950 XWD PROG,0 + 00960 XWD PROG,0 + 00970 > + IOINI2 - IO INITIALIZATION PART 2 PAGE 5 + MINIMAL CONFIGURATION + + + 01000 ;DECTAPE DEVICE DATA BLOCK + + 000000 01020 DTCNUM=0 + + 01040 DEFINE DTCDDB (A,B,C) + 01050 < INTERNAL C'DB + 01060 C'DB: ZZ=. + 01070 SIXBIT /C/ + 01080 DTCNUM=DTCNUM+1 + 01090 XWD IORET+A'CHN*PICHN,<DTCNUM-1>*10000+201 + 01100 0 + 01110 XWD C,UTDSP + 01120 EXTERNAL UTDSP + 01130 XWD 4400+DVDIR+DVIN+DVOUT,154403 + 01140 0 + 01150 0 + 01160 0 + 01170 0 + 01180 XP UFREE,.-ZZ ;NEXT FREE BLOCK NO. + 01190 0 + 01200 XP UDIR,.-ZZ ;LINK TO DIRECTORY IN DATA BLOCK + 01210 IFE DTSIZ,< EXP DIRBUF + 01220 > + 01230 IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> + 01240 > + 01250 > + + IOINI2 - IO INITIALIZATION PART 2 PAGE 6 + MINIMAL CONFIGURATION + + + + 01300 ;LINE PRINTER DEVICE DTA BLOCK + + 01320 DEFINE LPTDDB (A,B,C) + 01330 <INTERNAL LPTDB,LPTDAT,LPTCHR,LPTIOS,LPTSER,LPTMOD + 01340 INTERNAL LPTBUF,LPTPTR,LPTADR,LPTSV1 + 01350 EXTERNAL LPTDSP + 01360 + 01370 LPTDB: + 01380 LPTDAT: SIXBIT /LPT/ + 01390 LPTCHR: XWD A'CHN*PICHN,32 + 01400 LPTIOS: 0 + 01410 LPTSER: XWD C,LPTDSP + 01420 LPTMOD: XWD 0+DVOUT,3 + 01430 0 + 01440 LPTBUF: 0 + 01450 LPTPTR: 0 + 01460 LPTADR: XWD PROG,0 + 01470 LPTSV1: 0 + 01480 + 01490 XP LPTCLB,LPTCHN+200 ;PI CHANNEL AND BUSY FLAG + 01500 XP LPTCHB,11*LPTCHN ;LINE PRINTER ERROR AND DATA CHANNELS + 01510 > + IOINI2 - IO INITIALIZATION PART 2 PAGE 7 + MINIMAL CONFIGURATION + + + + 01550 ;CARD READER DEVICE DATA BLOCK + + 01570 DEFINE CDRDDB (A,B,C) + 01580 <INTERNAL CDRDB,CDRDAT,CRDIS + 01590 EXTERNAL CDRDSP + 01600 + 01610 CDRDB: + 01620 CDRDAT: SIXBIT /CDR/ + 01630 XWD A'CHN*PICHN,34 ;LONG ENOUGHT FOR BINARY CARDS + 01640 0 + 01650 XWD C,CDRDSP + 01660 XWD DVCDR+1400+DVIN,14403 + 01670 0 + 01680 0 + 01690 XWD PROG,0 + 01700 0 + 01710 0 + 01720 CRDIS: JRST . + 01730 > + IOINI2 - IO INITIALIZATION PART 2 PAGE 8 + MINIMAL CONFIGURATION + + + + 01770 ;PAPER TAPE READER DEVICE DATA BLOCK + + 01790 DEFINE PTRDDB (A,B,C) + 01800 <INTERNAL PTRDB,PTRDAT,PTRCHR,PTRIOS,PTRSER + 01810 INTERNAL PTRMOD,PTRBUF,PTRADR,PTRPTR,PTRCTR,PTRSVC,PTRSV1 + 01820 EXTERNAL PTRDSP + 01830 + 01840 PTRDB: + 01850 PTRDAT: SIXBIT /PTR/ + 01860 PTRCHR: XWD A'CHN*PICHN,41 + 01870 PTRIOS: 0 + 01880 PTRSER: XWD C,PTRDSP + 01890 PTRMOD: XWD 1000+DVIN,14403 + 01900 0 + 01910 PTRBUF: 0 + 01920 PTRADR: XWD PROG,0 + 01930 PTRPTR: 0 + 01940 PTRCTR: 0 + 01950 PTRSVC: 0 + 01960 PTRSV1: 0 + 01970 > + IOINI2 - IO INITIALIZATION PART 2 PAGE 9 + MINIMAL CONFIGURATION + + + + 02010 ;PAPER TAPE PUNCH DEVICE DATA BLOCK + + 02030 DEFINE PTPDDB (A,B,C) + 02040 <INTERNAL PTPDB,PTPDAT,PTPCHR,PTPIOS,PTPSER,PTPMOD,PTPBUF + 02050 INTERNAL PTPPTR,PTPADR,PTPCTR,PTPCNT,PTPCHA,PTPSIO + 02060 EXTERNAL PTPDSP + 02070 + 02080 PTPDB: + 02090 PTPDAT: SIXBIT /PTP/ + 02100 PTPCHR: XWD A'CHN*PICHN,41 + 02110 PTPIOS: 0 + 02120 PTPSER: XWD C,PTPDSP + 02130 PTPMOD: XWD 1000+DVOUT,14403 + 02140 0 + 02150 PTPBUF: 0 + 02160 PTPPTR: 0 + 02170 PTPADR: XWD PROG,0 + 02180 PTPCTR: 0 + 02190 PTPCNT: 0 + 02200 PTPCHA: 0 + 02210 PTPSIO: 0 + 02220 > + IOINI2 - IO INITIALIZATION PART 2 PAGE 10 + MINIMAL CONFIGURATION + + + + 02260 ;GENERATE DEVICE DATA BLOCKS NEEDED FOR THIS CONFIGURATION + + 02280 DEFINE ASSOC (A,B,C) + 02290 < + 02300 IRP C,< + 02310 ;DEFINE FORWARD LINL SYMBOL + 02320 LINK + 02330 ; + 02340 ; + 02350 ; + 02360 A'DDB A,B,C + 02370 + 02380 C=0 ;SET LINK TO 0(IN CASE THIS IS LAST DDB) + 02390 DEFINE LINK + 02400 <C=.> + 02410 > + 02420 > + + 02440 INTERNAL DEVLST + + 000000' 000001' 000000 02460 DEVLST: XWD FIRDB,0 ;BEGINNING OF DEVICE DATA BLOCK CHAIN + + 02480 DEFINE LINK + 02490 <FIRDB=.> + + 02510 SYSTEM^ + 000001' 646471 200000 SIXBIT /TTY0/ + 000002' 000300 000021 XWD SCNCHN*PICHN,STTYBF+1 ;LONG ENOUGH FOR PRINTING + 000003' 000000 000000 0 + 000004' 000035' 000000* XWD TTY0,TTYDSP + 000005' 000013 000003 XWD DVTTY+DVIN+DVOUT,3 + 000006' 000000 000000 0 + 000007' 000000 000000 0 + 000010' 000007 000000 XWD PROG,0 + 000011' 000007 000000 XWD PROG,0 + 000012' 000000 000000 0 + 000013' 000000 000000 0 + 000014' 000000 000000 0 + 000035' 646471 210000 SIXBIT /TTY1/ + 000036' 000300 000021 XWD SCNCHN*PICHN,STTYBF+1 ;LONG ENOUGH FOR PRINTING + 000037' 000000 000000 0 + 000040' 000071' 000004* XWD TTY1,TTYDSP + 000041' 000013 000003 XWD DVTTY+DVIN+DVOUT,3 + 000042' 000000 000000 0 + 000043' 000000 000000 0 + 000044' 000007 000000 XWD PROG,0 + 000045' 000007 000000 XWD PROG,0 + 000046' 000000 000000 0 + 000047' 000000 000000 0 + 000050' 000000 000000 0 + 000071' 446441 200000 SIXBIT /DTA0/ + IOINI2 - IO INITIALIZATION PART 2 PAGE 10-1 + MINIMAL CONFIGURATION + + 000072' 000420 000201 XWD IORET+DTCCHN*PICHN,<DTCNUM-1>*10000+201 + 000073' 000000 000000 0 + 000074' 000000 000000* XWD DTA0,UTDSP + 000075' 004407 154403 XWD 4400+DVDIR+DVIN+DVOUT,154403 + 000076' 000000 000000 0 + 000077' 000000 000000 0 + 000100' 000000 000000 0 + 000101' 000000 000000 0 + 000102' 000000 000000 0 + 000103' 000000 000104' IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> + IOINI2 - IO INITIALIZATION PART 2 PAGE 11 + MINIMAL CONFIGURATION + + + + 000104' 02550 LIT + + 02570 IFE DTSIZ,< DIRBUF: BLOCK 200 + 02580 INTERNAL DIRBUF + 02590 > + + 000104' 02610 IFN DTSIZ,<DTDIR: BLOCK DTCNUM*200 + 02620 INTERNAL DTDIR + 02630 > + + 02650 END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000304 + +9K CORE USED + IOINI2 - IO INITIALIZATION PART 2 PAGE 12 + SYMBOL TABLE + + 000272 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APRBIT 000002 +APRCHN 000006 +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CH1N 000000 +CH1PDN 000000 +CH2N 000000 +CH2PDN 000000 +CH3N 000011 +CH3PDN 000020 +CH4N 000011 +CH4PDN 000020 +CH5N 000000 +CH5PDN 000000 +CH6N 000017 +CH6PDN 000020 +CH7N 000000 +CH7PDN 000000 +CLKOFF 001006 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CTYCHN 000003 +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVLST 000000' INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT + IOINI2 - IO INITIALIZATION PART 2 PAGE 12-1 + SYMBOL TABLE + +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTA0 000000 +DTA0DB 000071' INT +DTCCHN 000004 +DTCNUM 000001 +DTDIR 000104' INT +DTSIZ 000001 +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +FIRDB 000001' +FSNCHN 000303 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT + IOINI2 - IO INITIALIZATION PART 2 PAGE 12-2 + SYMBOL TABLE + +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +MINIMA 000000 INT +MLTTYL 777777 777776 INT +MTCNUM 000000 +MTTYLN 777777 777776 INT +MTW 010000 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PICLK 004202 INT +PIOFF 000400 INT +PION 000200 INT +PROG 000007 INT +RUN 200000 INT +RUNABL 204000 INT +SCNCHN 000003 +SCNLIN 000001 +STTYB1 000021 INT +STTYBF 000020 INT +TAC 000001 INT +TAC1 000002 INT +TCONLN 000001 INT +TEM 000010 INT +TSCNLN 000000 INT +TTY0 000035' +TTY0DB 000001' INT +TTY1 000071' +TTY1DB 000035' INT +TTYATC 020000 INT +TTYBFE 000033 INT +TTYBM1 000013 INT +TTYBUF 000014 INT +TTYCTR 000012 INT +TTYDSP 000040' EXT +TTYLEN 000002 INT +TTYLST 000001' INT +TTYPTR 000011 INT +TTYSAV 000013 INT +TTYUSE 010000 INT +UDIR 000012 INT + IOINI2 - IO INITIALIZATION PART 2 PAGE 12-3 + SYMBOL TABLE + +UFREE 000011 INT +USRMOD 010000 INT +UTDSP 000074' EXT +UUO 000014 INT +ZZ 000071' + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 333333333 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 333333333 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 333333333 + III OOO OOO III NNN NNN III 333 333 + III OOO OOO III NNN NNN III 333 333 + III OOO OOO III NNN NNN III 333 333 + III OOO OOO III NNNNNN NNN III 333 + III OOO OOO III NNNNNN NNN III 333 + III OOO OOO III NNNNNN NNN III 333 + III OOO OOO III NNN NNN NNN III 333 + III OOO OOO III NNN NNN NNN III 333 + III OOO OOO III NNN NNN NNN III 333 + III OOO OOO III NNN NNNNNN III 333 + III OOO OOO III NNN NNNNNN III 333 + III OOO OOO III NNN NNNNNN III 333 + III OOO OOO III NNN NNN III 333 333 + III OOO OOO III NNN NNN III 333 333 + III OOO OOO III NNN NNN III 333 333 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 333333333 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 333333333 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 333333333 + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :IOINI3.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:21 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2404 +File will be deleted after printing + IOINI1 - IO INITIALIZATION PART 1 PAGE 1 + MAXIMAL CONFIGURATION + + 00010 XLIST + 01930 LIST + IOINI1 - IO INITIALIZATION PART 1 PAGE 7 + MAXIMAL CONFIGURATION + + + 00010 ;SOME MACROS FOR DEFINING CONFIGURATION + + 00030 DEFINE NAME (A) + 00040 <DEFINE NAME1 + 00050 <CONFIG: ASCIZ /A/ + 00060 INTERNAL CONFIG + 00070 > + 00080 XP A,0 + 00090 SUBTTL A CONFIGURATION + 00100 > + + 00120 DEFINE DATE (A) + 00130 <DEFINE DATE1 + 00140 <SYSDAT: ASCIZ /A/ + 00150 INTERNAL SYSDAT + 00160 >> + + 00180 DEFINE VERSION (A,B) + 00190 <DEFINE VERS1 + 00200 <SYSNUM: XWD ^D'A,^D'B + 00210 XP SYSMOD,^D'A + 00220 XP SYSVER,^D'B + 00230 INTERNAL SYSNUM + 00240 >> + + 00260 DEFINE CUSPTAPE (A) + 00270 <DEFINE CUSP1 + 00280 <SYSTAP: SIXBIT /A/ + 00290 INTERNAL SYSTAP + 00300 >> + + 00320 DEFINE ACPDL (J,CHJN,CHJPDN) + 00330 < CH'J'N=CHJN + 00340 CH'J'PDN=CHJPDN + 00350 > + IOINI1 - IO INITIALIZATION PART 1 PAGE 2 + MAXIMAL CONFIGURATION + + + 00010 NAME <MAXIMAL>^DEFINE NAME1 + <CONFIG: ASCIZ /MAXIMAL/ + INTERNAL CONFIG + > + IOINI1 - IO INITIALIZATION PART 1 PAGE 2 + MAXIMAL CONFIGURATION + + + 00040 DATE <8-16-65>^DEFINE DATE1 + <SYSDAT: ASCIZ /8-16-65/ + INTERNAL SYSDAT + >^ + 00050 VERSION 1,4^DEFINE VERS1 + <SYSNUM: XWD ^D1,^D4 + XP SYSMOD,^D1 + XP SYSVER,^D4 + INTERNAL SYSNUM + >^ + 00060 CUSPTAPE DTA0^DEFINE CUSP1 + <SYSTAP: SIXBIT /DTA0/ + INTERNAL SYSTAP + >^ + + 00080 ;DEFINE THE IO PART OF THE SYSTEM + 00090 ;THAT IS: + 00100 ; DEFINE INTERRUPT SERVICE ROTUINE TO BE USED + 00110 ; ASSIGN DEVICES TO PI CHANNELS + + 00130 DEFINE SYSTEM + 00140 < + 00150 ASSOC APR,6,<> + 00160 ASSOC CTY,3,<> + 00170 ASSOC SCN,3,<TTY0,TTY1> + 00180 ASSOC DTC,4,<DTA0> + 00190 ASSOC DTC,4,<DTA1> + 00200 ASSOC DTC,4,<DTA2> + 00210 ASSOC DTC,4,<DTA3> + 00220 ASSOC MTC,2,<MTA0> + 00230 ASSOC MTC,2,<MTA1> + 00240 ASSOC MTC,2,<MTA2> + 00250 ASSOC MTC,2,<MTA3> + 00260 ASSOC LPT,5,<LPT> + 00270 ASSOC PTP,5,<PTP> + 00280 ASSOC PTR,5,<PTR> + 00290 ASSOC CDR,5,<CDR> + 00300 > + + 000001 00320 DTSIZ=1 ;MULTIPLE DECTAPE DIRECTORIES + + 000001 00340 SCNLIN=1 + + 00360 ;DEFINE HIGHEST AC TO SAVE AND LENGTH OF PD LIST FOR EACH PI CHANNEL + + 000000 00380 ACPDL (1,0,0)^ CH1N=0 + 000011 00390 ACPDL (2,11,20)^ CH2N=11 + 000011 00400 ACPDL (3,11,20)^ CH3N=11 + 000011 00410 ACPDL (4,11,20)^ CH4N=11 + 000011 00420 ACPDL (5,11,20)^ CH5N=11 + 000017 00430 ACPDL (6,17,20^ CH6N=17 + 000000 00440 ACPDL (7,0,0)^ CH7N=0 + IOINI1 - IO INITIALIZATION PART 1 PAGE 2-1 + MAXIMAL CONFIGURATION + + 00010 TITLE IOINI1 - IO INITIALIZATION PART 1 + 000000' 466033 044632 00020 NAME1^CONFIG: ASCIZ /MAXIMAL/ + 000001' 406300 000000 + 000002' 341326 133132 00030 DATE1^SYSDAT: ASCIZ /8-16-65/ + 000003' 331520 000000 + 000004' 000001 000004 00040 VERS1^SYSNUM: XWD ^D1,^D4 + 000005' 446441 200000 00050 CUSP1^SYSTAP: SIXBIT /DTA0/ + + 00070 ;CONFIGURATION INDEPENDANT PART OF IOINIT FOLLOWS: + + 00090 EXTERNAL ERROR + + 00110 ;SETUP CHANNEL SAVE AND RESTORE ROUTINES + + 000000 00130 CHANU1=0 + 000000 00140 CHANU2=0 + 000000 00150 CHANU3=0 + 000000 00160 CHANU4=0 + 000000 00170 CHANU5=0 + 000000 00180 CHANU6=0 + 000000 00190 CHANU7=0 + 00200 DEFINE ASSOC(A,NO,D) + 00210 <IFE CHANU'NO,< + 00220 CHANU'NO=1 + 00230 INTERNAL CH'NO'SAV,CH'NO',CH'NO'XIT,CH'NO'SAC + 00240 + 00250 CH'NO'SAV: 0 + 00260 MOVEM CH'NO'N, CH'NO'SAC+CH'NO'N + 00270 MOVEI CH'NO'N, CH'NO'SAC + 00280 BLT CH'NO'N,CH'NO'SAC+CH'NO'N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 00290 MOVE PDP, CH'NO'CJ + 00300 JRST @CH'NO'SAV + 00310 + 00320 CH'NO'SAC: REPEAT CH'NO'N+1,<EXP 0> ;SPACE TO SAVE SOME AC'S + 00330 EXP CH'NO'XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 00340 REPEAT CH'NO'PDN-1,<EXP 0> ;REST OF PD LIST + 00350 + 00360 CH'NO'XIT: MOVSI CH'NO'N, CH'NO'SAC + 00370 BLT CH'NO'N, CH'NO'N + 00380 JEN @CH'NO + 00390 + 00400 CH'NO'CJ: XWD -CH'NO'PDN+1,CH'NO'SAC+CH'NO'N+1 ;INIT. SETTING OF P + 00410 + 00420 CH'NO': 0 ;PC STORED HERE BY JSR + 00430 JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 00440 AOS CH'NO'ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 00450 JEN @CH'NO ;AND DISMISS + 00460 > + 00470 > + 00480 ;GENERATE THE SAVE AND RESTORE ROUTINES + + 00500 SYSTEM^ 000006' 000000 000000 CH6SAV: 0 + 000007' 202740 000033' MOVEM CH6N, CH6SAC+CH6N + IOINI1 - IO INITIALIZATION PART 1 PAGE 1 + MAXIMAL CONFIGURATION + + 000010' 201740 000014' MOVEI CH6N, CH6SAC + 000011' 251740 000032' BLT CH6N,CH6SAC+CH6N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000012' 200140 000057' MOVE PDP, CH6CJ + 000013' 254020 000006' JRST @CH6SAV + 000014' 000000 000000 EXP 0 + 000015' 000000 000000 EXP 0 + 000016' 000000 000000 EXP 0 + 000017' 000000 000000 EXP 0 + 000020' 000000 000000 EXP 0 + 000021' 000000 000000 EXP 0 + 000022' 000000 000000 EXP 0 + 000023' 000000 000000 EXP 0 + 000024' 000000 000000 EXP 0 + 000025' 000000 000000 EXP 0 + 000026' 000000 000000 EXP 0 + 000027' 000000 000000 EXP 0 + 000030' 000000 000000 EXP 0 + 000031' 000000 000000 EXP 0 + 000032' 000000 000000 EXP 0 + 000033' 000000 000000 EXP 0 ;SPACE TO SAVE SOME AC'S + 000034' 000000 000054' EXP CH6XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000035' 000000 000000 EXP 0 + 000036' 000000 000000 EXP 0 + 000037' 000000 000000 EXP 0 + 000040' 000000 000000 EXP 0 + 000041' 000000 000000 EXP 0 + 000042' 000000 000000 EXP 0 + 000043' 000000 000000 EXP 0 + 000044' 000000 000000 EXP 0 + 000045' 000000 000000 EXP 0 + 000046' 000000 000000 EXP 0 + 000047' 000000 000000 EXP 0 + 000050' 000000 000000 EXP 0 + 000051' 000000 000000 EXP 0 + 000052' 000000 000000 EXP 0 + 000053' 000000 000000 EXP 0 ;REST OF PD LIST + 000054' 205740 000014' CH6XIT: MOVSI CH6N, CH6SAC + 000055' 251740 000017 BLT CH6N, CH6N + 000056' 254520 000060' JEN @CH6 + 000057' 777761 000034' CH6CJ: XWD -CH6PDN+1,CH6SAC+CH6N+1 ;INIT. SETTING OF P + 000060' 000000 000000 CH6: 0 ;PC STORED HERE BY JSR + 000061' 254000 000062' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000062' 350000 000456' AOS CH6ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000063' 254520 000060' JEN @CH6 ;AND DISMISS + 000064' 000000 000000 CH3SAV: 0 + 000065' 202440 000103' MOVEM CH3N, CH3SAC+CH3N + 000066' 201440 000072' MOVEI CH3N, CH3SAC + 000067' 251440 000102' BLT CH3N,CH3SAC+CH3N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000070' 200140 000127' MOVE PDP, CH3CJ + 000071' 254020 000064' JRST @CH3SAV + 000072' 000000 000000 EXP 0 + 000073' 000000 000000 EXP 0 + 000074' 000000 000000 EXP 0 + IOINI1 - IO INITIALIZATION PART 1 PAGE 1-1 + MAXIMAL CONFIGURATION + + 000075' 000000 000000 EXP 0 + 000076' 000000 000000 EXP 0 + 000077' 000000 000000 EXP 0 + 000100' 000000 000000 EXP 0 + 000101' 000000 000000 EXP 0 + 000102' 000000 000000 EXP 0 + 000103' 000000 000000 EXP 0 ;SPACE TO SAVE SOME AC'S + 000104' 000000 000124' EXP CH3XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000105' 000000 000000 EXP 0 + 000106' 000000 000000 EXP 0 + 000107' 000000 000000 EXP 0 + 000110' 000000 000000 EXP 0 + 000111' 000000 000000 EXP 0 + 000112' 000000 000000 EXP 0 + 000113' 000000 000000 EXP 0 + 000114' 000000 000000 EXP 0 + 000115' 000000 000000 EXP 0 + 000116' 000000 000000 EXP 0 + 000117' 000000 000000 EXP 0 + 000120' 000000 000000 EXP 0 + 000121' 000000 000000 EXP 0 + 000122' 000000 000000 EXP 0 + 000123' 000000 000000 EXP 0 ;REST OF PD LIST + 000124' 205440 000072' CH3XIT: MOVSI CH3N, CH3SAC + 000125' 251440 000011 BLT CH3N, CH3N + 000126' 254520 000130' JEN @CH3 + 000127' 777761 000104' CH3CJ: XWD -CH3PDN+1,CH3SAC+CH3N+1 ;INIT. SETTING OF P + 000130' 000000 000000 CH3: 0 ;PC STORED HERE BY JSR + 000131' 254000 000132' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000132' 350000 000453' AOS CH3ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000133' 254520 000130' JEN @CH3 ;AND DISMISS + 000134' 000000 000000 CH4SAV: 0 + 000135' 202440 000153' MOVEM CH4N, CH4SAC+CH4N + 000136' 201440 000142' MOVEI CH4N, CH4SAC + 000137' 251440 000152' BLT CH4N,CH4SAC+CH4N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000140' 200140 000177' MOVE PDP, CH4CJ + 000141' 254020 000134' JRST @CH4SAV + 000142' 000000 000000 EXP 0 + 000143' 000000 000000 EXP 0 + 000144' 000000 000000 EXP 0 + 000145' 000000 000000 EXP 0 + 000146' 000000 000000 EXP 0 + 000147' 000000 000000 EXP 0 + 000150' 000000 000000 EXP 0 + 000151' 000000 000000 EXP 0 + 000152' 000000 000000 EXP 0 + 000153' 000000 000000 EXP 0 ;SPACE TO SAVE SOME AC'S + 000154' 000000 000174' EXP CH4XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000155' 000000 000000 EXP 0 + 000156' 000000 000000 EXP 0 + 000157' 000000 000000 EXP 0 + 000160' 000000 000000 EXP 0 + 000161' 000000 000000 EXP 0 + IOINI1 - IO INITIALIZATION PART 1 PAGE 1-2 + MAXIMAL CONFIGURATION + + 000162' 000000 000000 EXP 0 + 000163' 000000 000000 EXP 0 + 000164' 000000 000000 EXP 0 + 000165' 000000 000000 EXP 0 + 000166' 000000 000000 EXP 0 + 000167' 000000 000000 EXP 0 + 000170' 000000 000000 EXP 0 + 000171' 000000 000000 EXP 0 + 000172' 000000 000000 EXP 0 + 000173' 000000 000000 EXP 0 ;REST OF PD LIST + 000174' 205440 000142' CH4XIT: MOVSI CH4N, CH4SAC + 000175' 251440 000011 BLT CH4N, CH4N + 000176' 254520 000200' JEN @CH4 + 000177' 777761 000154' CH4CJ: XWD -CH4PDN+1,CH4SAC+CH4N+1 ;INIT. SETTING OF P + 000200' 000000 000000 CH4: 0 ;PC STORED HERE BY JSR + 000201' 254000 000202' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000202' 350000 000454' AOS CH4ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000203' 254520 000200' JEN @CH4 ;AND DISMISS + 000204' 000000 000000 CH2SAV: 0 + 000205' 202440 000223' MOVEM CH2N, CH2SAC+CH2N + 000206' 201440 000212' MOVEI CH2N, CH2SAC + 000207' 251440 000222' BLT CH2N,CH2SAC+CH2N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000210' 200140 000247' MOVE PDP, CH2CJ + 000211' 254020 000204' JRST @CH2SAV + 000212' 000000 000000 EXP 0 + 000213' 000000 000000 EXP 0 + 000214' 000000 000000 EXP 0 + 000215' 000000 000000 EXP 0 + 000216' 000000 000000 EXP 0 + 000217' 000000 000000 EXP 0 + 000220' 000000 000000 EXP 0 + 000221' 000000 000000 EXP 0 + 000222' 000000 000000 EXP 0 + 000223' 000000 000000 EXP 0 ;SPACE TO SAVE SOME AC'S + 000224' 000000 000244' EXP CH2XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000225' 000000 000000 EXP 0 + 000226' 000000 000000 EXP 0 + 000227' 000000 000000 EXP 0 + 000230' 000000 000000 EXP 0 + 000231' 000000 000000 EXP 0 + 000232' 000000 000000 EXP 0 + 000233' 000000 000000 EXP 0 + 000234' 000000 000000 EXP 0 + 000235' 000000 000000 EXP 0 + 000236' 000000 000000 EXP 0 + 000237' 000000 000000 EXP 0 + 000240' 000000 000000 EXP 0 + 000241' 000000 000000 EXP 0 + 000242' 000000 000000 EXP 0 + 000243' 000000 000000 EXP 0 ;REST OF PD LIST + 000244' 205440 000212' CH2XIT: MOVSI CH2N, CH2SAC + 000245' 251440 000011 BLT CH2N, CH2N + 000246' 254520 000250' JEN @CH2 + IOINI1 - IO INITIALIZATION PART 1 PAGE 1-3 + MAXIMAL CONFIGURATION + + 000247' 777761 000224' CH2CJ: XWD -CH2PDN+1,CH2SAC+CH2N+1 ;INIT. SETTING OF P + 000250' 000000 000000 CH2: 0 ;PC STORED HERE BY JSR + 000251' 254000 000252' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000252' 350000 000452' AOS CH2ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000253' 254520 000250' JEN @CH2 ;AND DISMISS + 000254' 000000 000000 CH5SAV: 0 + 000255' 202440 000273' MOVEM CH5N, CH5SAC+CH5N + 000256' 201440 000262' MOVEI CH5N, CH5SAC + 000257' 251440 000272' BLT CH5N,CH5SAC+CH5N-1 ;DO ONLY ONCE FOR EACH CHANNEL + 000260' 200140 000317' MOVE PDP, CH5CJ + 000261' 254020 000254' JRST @CH5SAV + 000262' 000000 000000 EXP 0 + 000263' 000000 000000 EXP 0 + 000264' 000000 000000 EXP 0 + 000265' 000000 000000 EXP 0 + 000266' 000000 000000 EXP 0 + 000267' 000000 000000 EXP 0 + 000270' 000000 000000 EXP 0 + 000271' 000000 000000 EXP 0 + 000272' 000000 000000 EXP 0 + 000273' 000000 000000 EXP 0 ;SPACE TO SAVE SOME AC'S + 000274' 000000 000314' EXP CH5XIT ;FIRST ENTRY IN PD LIST(CHAN. EXIT) + 000275' 000000 000000 EXP 0 + 000276' 000000 000000 EXP 0 + 000277' 000000 000000 EXP 0 + 000300' 000000 000000 EXP 0 + 000301' 000000 000000 EXP 0 + 000302' 000000 000000 EXP 0 + 000303' 000000 000000 EXP 0 + 000304' 000000 000000 EXP 0 + 000305' 000000 000000 EXP 0 + 000306' 000000 000000 EXP 0 + 000307' 000000 000000 EXP 0 + 000310' 000000 000000 EXP 0 + 000311' 000000 000000 EXP 0 + 000312' 000000 000000 EXP 0 + 000313' 000000 000000 EXP 0 ;REST OF PD LIST + 000314' 205440 000262' CH5XIT: MOVSI CH5N, CH5SAC + 000315' 251440 000011 BLT CH5N, CH5N + 000316' 254520 000320' JEN @CH5 + 000317' 777761 000274' CH5CJ: XWD -CH5PDN+1,CH5SAC+CH5N+1 ;INIT. SETTING OF P + 000320' 000000 000000 CH5: 0 ;PC STORED HERE BY JSR + 000321' 254000 000322' JRST .+1 ;INSTR. AT END OF SERVICE CHAIN + 000322' 350000 000455' AOS CH5ERR ;SPURIOUS INTERRUPT, ADD TO COUNT + 000323' 254520 000320' JEN @CH5 ;AND DISMISS + + 00520 ;SET UP NULL CHANNEL ROUTINES FOR UNUSED CHANNELS + + 00540 DEFINE NULCHN(J) + 00550 < + 00560 INTERNAL CH'J,CH'J'XIT + 00570 CH'J: 0 + 00580 CH'J'XIT: AOS CH'J'ERR + IOINI1 - IO INITIALIZATION PART 1 PAGE 1-4 + MAXIMAL CONFIGURATION + + 00590 JEN @CH'J + 00600 > + + 00620 IFE CHANU1,<NULCHN(1)>^ + 000324' 000000 000000 CH1: 0 + 000325' 350000 000451' CH1XIT: AOS CH1ERR + 000326' 254520 000324' JEN @CH1 + 00630 IFE CHANU2,<NULCHN(2)> + 00640 IFE CHANU3,<NULCHN(3)> + 00650 IFE CHANU4,<NULCHN(4)> + 00660 IFE CHANU5,<NULCHN(5)> + 00670 IFE CHANU6,<NULCHN(6)> + 00680 IFE CHANU7,<NULCHN(7)>^ + 000327' 000000 000000 CH7: 0 + 000330' 350000 000457' CH7XIT: AOS CH7ERR + 000331' 254520 000327' JEN @CH7 + IOINI1 - IO INITIALIZATION PART 1 PAGE 2 + MAXIMAL CONFIGURATION + + + + 00720 ;ASSIGN DEVICE TO CHANNELS AND SETUP CORESPONDENCE TABLE + 00730 ;OF CHANNELS TO SERVICE ROUTINES + + 00750 DEFINE ASSOC (A,N,D) + 00760 < A'RET=CH'N'XIT + 00770 A'SAV=CH'N'SAV + 00780 A'SAC=CH'N'SAC + 00790 A'CHL=CH'N + 00800 A'CHN=N + 00810 A'BIT=1 + 00820 REPEAT 7-N,<A'BIT=A'BIT*2> + 00830 A'OFF=1000+A'BIT ;CONO PI, A'OFF WIL TURN CHANNEL OFF + 00840 A'ON=2000+A'BIT ;TURN BACK ON + 00850 A'ACT=4000+A'BIT ;FORCE INTERRUPT ON CHAN. + 00860 INTERN A'RET, A'SAV, A'CHL, A'CHN, A'SAC + 00870 INTERNAL A'OFF,A'ON,A'ACT,A'BIT + 00880 XWD A'CHL,A'INT + 00890 EXTERNAL A'INT + 00900 > + + 00920 INTERNAL DEVINT + 000332' 00930 DEVINT: SYSTEM^ 000332' 000060' 000000* XWD APRCHL,APRINT + 000333' 000130' 000000* XWD CTYCHL,CTYINT + 000334' 000130' 000000* XWD SCNCHL,SCNINT + 000335' 000200' 000000* XWD DTCCHL,DTCINT + 000336' 000200' 000335* XWD DTCCHL,DTCINT + 000337' 000200' 000336* XWD DTCCHL,DTCINT + 000340' 000200' 000337* XWD DTCCHL,DTCINT + 000341' 000250' 000000* XWD MTCCHL,MTCINT + 000342' 000250' 000341* XWD MTCCHL,MTCINT + 000343' 000250' 000342* XWD MTCCHL,MTCINT + 000344' 000250' 000343* XWD MTCCHL,MTCINT + 000345' 000320' 000000* XWD LPTCHL,LPTINT + 000346' 000320' 000000* XWD PTPCHL,PTPINT + 000347' 000320' 000000* XWD PTRCHL,PTRINT + 000350' 000320' 000000* XWD CDRCHL,CDRINT + 000017 00940 NDEV=.-DEVINT ;NO. OF DEVICE INTERUPT SERVICE ROUTINES + 000016 00950 NDEVM1=NDEV-1 ;(USED BY ONCE) + 00960 INTERNAL NDEVM1 + IOINI1 - IO INITIALIZATION PART 1 PAGE 3 + MAXIMAL CONFIGURATION + + + + 01000 ;INITIALIZE SOME IO DEVICES + 01010 ;IOINI CALLED BY A PUSHJ PDP, FROM SYSINI AT SYSTEM INITIALIZATION + + 01030 DEFINE IOINIT (A) + 01040 <IRP A + 01050 < EXTERNAL A'INI + 01060 PUSHJ PDP,A'INI + 01070 >> + + 01090 DEFINE ASSOC (A,B,C) + 01100 < IFIDN <A><MTC>,< IOINIT MTC> + 01110 IFIDN <A><DTC>,< IOINIT DTC> + 01120 IFIDN <A><LPT>,< IOINIT LPT> + 01130 IFIDN <A><SCN>,< IOINIT SCN> + 01140 IFIDN <A><PTP>,<IOINIT PTP> + 01150 IFIDN <A><PTR>,<IOINIT PTR> + 01160 > + + 01180 INTERNAL IOINI + + 000351' 01200 IOINI: SYSTEM^ 000351' 260140 000000* PUSHJ PDP,SCNINI + 000352' 260140 000000* PUSHJ PDP,DTCINI + 000353' 260140 000352* PUSHJ PDP,DTCINI + 000354' 260140 000353* PUSHJ PDP,DTCINI + 000355' 260140 000354* PUSHJ PDP,DTCINI + 000356' 260140 000000* PUSHJ PDP,MTCINI + 000357' 260140 000356* PUSHJ PDP,MTCINI + 000360' 260140 000357* PUSHJ PDP,MTCINI + 000361' 260140 000360* PUSHJ PDP,MTCINI + 000362' 260140 000000* PUSHJ PDP,LPTINI + 000363' 260140 000000* PUSHJ PDP,PTPINI + 000364' 260140 000000* PUSHJ PDP,PTRINI + 000365' 254000 000000* 01210 JRST CLKINI ;ALWAYS INIT. CLOCK + + 01230 EXTERNAL CLKINI + IOINI1 - IO INITIALIZATION PART 1 PAGE 4 + MAXIMAL CONFIGURATION + + + + 01270 ;CLOCK CONTROL PARAMETERS + + 004006 01290 CLDS=4000+APRCHN ;CLOCK DISABLE + 000206 01300 CLEN=200+APRCHN ;CLOCK ENABLE + + 01320 INTERNAL CLDS,CLEN + + 01340 ;BYTE POINTERS + + 000366' 270400 000014 01360 PUUOAC: POINT 4,UUO,12 ;UUO AC FIELD + 000367' 000400 000000 01370 PIOMOD: POINT 4,IOS,35 ;MODE BITS + 000370' 331106 000001 01380 PJOBN: POINT 9,DEVCHR(DEVDAT),8 ;DEVICE JOB ASSIGNMENT + 000371' 220406 000001 01390 PJDCHN: POINT 4,DEVCHR(DEVDAT),17 ;JOB DEVICE CHANNEL NO. + 000372' 140606 000001 01400 PUNIT: POINT 6,DEVCHR(DEVDAT),23 ;DEVICE UNIT NO. + + 01420 INTERNAL PUUOAC,PIOMOD,PJOBN,PJDCHN,PUNIT + + 01440 ;COMMON SUBROUTINE RETURNS + + 000373' 350003 000000 01460 CPOPJ2: AOS (PDP) + 000374' 350003 000000 01470 CPOPJ1: AOS (PDP) + 000375' 263140 000000 01480 CPOPJ: POPJ PDP, + + 01500 INTERNAL CPOPJ,CPOPJ1,CPOPJ2 + IOINI1 - IO INITIALIZATION PART 1 PAGE 5 + MAXIMAL CONFIGURATION + + + 01530 ,SYSTEM DATA STORAGE + + + 01560 INTERNAL JOB,JOBADR,JBTADR,JBTSTS,USRREL,USRINF,USRJDA + 01570 INTERNAL USRPDP,JOBDAT,USRDDT,USRSAV,USRUXT,USRLO,USRHI + 01580 INTERNAL COMCNT,IOCOMP,USRPOV,STOPU,SCHEDF,TIME,JBTAD1 + 01590 INTERNAL MTAVAL,DCAVAL,DTAVAL,MTREQ,DCREQ,DTREQ,TTYTAB,CORTAB + 01600 INTERNAL CH1ERR,CH2ERR,CH3ERR,CH4ERR,CH5ERR,CH6ERR,CH7ERR + 01610 INTERNAL CORLST,CORTAB,CORTAL,SYSEND,SYSBEG,DEVOPR + + 000000 01630 JOBN=0 ;DEFINE NO. OF JOBS (0 THRU JOBN-1) + 01640 ;THERE MUST BE MORE TTY DEVICE DATA BLCKS THAN JOBS. + + 01660 DEFINE ASSOC (A,N,D) + 01670 <IRP D,<IFIDN <A><SCN>,<JOBN=JOBN+1>>> + 01680 SYSTEM^ 777777 777776 01690 MJOBN=-JOBN + 01700 INTERNAL JOBN,MJOBN + + 000376' 01720 SYSBEG: ;FIRST LOC IN SYSTEM DATA AREA + 01730 XP SYSBG1,SYSBEG+1 ;FIRST LOC+1 + 000376' 000000 000000 01740 JOB: 0 ;CURRENT JOB NUMBER EXCEPT WEN SCHEDF IS NON-ZERO + 000377' 000000 000000 01750 JOBADR: 0 ;CONTAINS ADDRESS OF JOB CURRENTLY RUNNING + 000400' 000000 000000 01760 JOBDAT: 0 ;CONTAINS ADDRESS OF JOB DATA AREA + + 000401' 01780 JBTADR: BLOCK JOBN ;C(LH)=PROTECT, C(RH)=RELOCATION + 01790 XP JBTAD1,JBTADR+1 ;ADDRESS OF JOB 1(USED BY SYSMAK) + 000403' 01800 JBTSTS: BLOCK JOBN ;CONTAINS STATUS INFORMATION FOR EACH J + + 000405' 000000 000000 01820 USRPDP: 0 ;USER PUSH DOWN POINTER + 000406' 000000 000000 01830 USRREL: 0 ;LH=0, RH CONTAINS CONTENTS OF PROTECTION REGISTER + 000407' 01840 USRLO: ;FIRST LOC CLEARD BY SETUSR SUBROUTINE + 000407' 000000 000000 01850 USRUXT: 0 ;UNUSED, JOBUXT USED TO SAVE UUO PC(UUO0) + 000410' 000000 000000 01860 USRLEV: 0 ;UNUSED, JOBLEV USED TO SAVE LOC. 40 + 000411' 000000 000000 01870 USRSAV: 0 ;TEMPORARY STORAGE FOR UUO HANDLER + 000412' 000000 000000 01880 USRPOV: 0 ;PUSH DOWN OVERFLOW TRAP + 000413' 01890 BLOCK 2 + 000415' 000000 000000 01900 USRINF: 0 ;UN LAYED OUT USER INFORMATION + 000416' 01910 USRJDA: BLOCK 20 ;RH=JOB DEVICE ASSIGNMENTS FOR THIS USER,LH=UUOS + 01920 XP USRHI,.-1 ;LAST LOC CLEARED BY SETUSR ROUTINE + 01930 XP USRPFI,.-1 ;LAST LOC PROTECTED FROM IO SERVICE + 01940 XP USRPFU,. ;LAST LOC PROTECTED FROM USER PROGRAM + 000436' 000000 000000 01950 USRDDT: 0 ;STARTING ADDR OF USER DDT + + 01970 ;DEVICE JUSTR BECOME AVAILABLE FLAGS + 000437' 000000 000000 01980 MTAVAL: 0 ;MAGNETIC TAPE + 000440' 000000 000000 01990 DCAVAL: 0 ;DATA CONTROL + 000441' 000000 000000 02000 DTAVAL: 0 ;DECTAPE + + 02020 ;NUMBER OF JOBS WAITING FOR DEVICES(-1=NONE, 0=1 USING, 1=1 USING) + 000442' 777777 777777 02030 MTREQ: -1 ;MAGNETIC TAPE + 000443' 777777 777777 02040 DCREQ: -1 ;DATA CONTROL + 000444' 777777 777777 02050 DTREQ: -1 ;DECTAPE + IOINI1 - IO INITIALIZATION PART 1 PAGE 5-1 + MAXIMAL CONFIGURATION + + 000445' 000000 000000 02060 IOCOMP: 0 ;NUMBER OF USERS IN IO WAIT STATE + 000446' 000000 000000 02070 COMCNT: 0 ;NUMBER OF COMMANDS TYPED-IN BUT NOT DECODED + 000447' 000000 000000 02080 STOPU: 0 ;NON-ZERO WHEN CLOCK INTERRUPT FORCED TO STOP USER + 000450' 000000 000000 02090 SCHEDF: 0 ;NON-ZERO WHEN CLOCK ROUTINE IS SCHEDULING + + 000451' 000000 000000 02110 CH1ERR: 0 ;SPURIOUS INTERRUPT COUNTS FOR EACH CHANNEL + 000452' 000000 000000 02120 CH2ERR: 0 + 000453' 000000 000000 02130 CH3ERR: 0 + 000454' 000000 000000 02140 CH4ERR: 0 + 000455' 000000 000000 02150 CH5ERR: 0 + 000456' 000000 000000 02160 CH6ERR: 0 + 000457' 000000 000000 02170 CH7ERR: 0 + + 000410' 02190 USRLO1=USRLO+1 + 02200 INTERNAL USRLO1 + IOINI1 - IO INITIALIZATION PART 1 PAGE 6 + MAXIMAL CONFIGURATION + + + 000460' 000000 000000 02230 TIME: 0 ;TIME SYSTEM HAS RUN IN 60THS OF A SECOND + + + 02260 XP TTYLEN,SCNLIN+1 ;LENGTH OF TTY TRANSLATOR TABLES(INCLUDING CTY) + 000461' 02270 TTYTAB: BLOCK TTYLEN ;TTY TRANSLATOR TABLE + 02280 ;SIGN BIT = 1 IF COMMAND JUST TYPED + 02290 ;BITS 1 -9, JOB CONSOLE IS ATTACHED TO + 02300 ;BITS 18-35, THE DEVICE DATA BLOCK FOR + 000463' 000000 000000 02310 DEVOPR: 0 ;SIXBIT PHYSICAL NAME OF OPERATORS + 02320 ;CONSOLE SET BY SCNSER TO FIRST ACTIVE TTY. + 02330 ;LOCATIONS FOR CORE ALLOCATION + 02340 XP CORBLK,^D256 ;NO. OF 1K BLOCKS POSSIBLE + 000464' 02350 CORTAB: BLOCK <CORBLK>/^D36+1 ;1K BLOCK USE BIT TABLE + 02360 ;A 1 MEANS BLOCK IS IN USE + 000474' 000000 000000 02370 CORLST: 0 ;1 BIT BYTE POINTER TO LAST FREE BLOCK POSSIBLE + 000475' 000000 000000 02380 CORTAL: 0 ;TOTAL NO. OF FREE CORE BLOCKS LEFT + 02390 ;CORLST AND CORTAL ARE SET UP AT SYSTEM INITIALIZATION + + 000475' 02410 SYSEND=.-1 ;LAST LOC. CLEARED BY SYSINI + + 02430 INTERNAL SYSSIZ + 02440 EXTERNAL SYSFIN + 000476' 000000 000000* 02450 SYSSIZ: EXP SYSFIN ;SIZE OF MONITOR(LAST LOC. USED) + IOINI1 - IO INITIALIZATION PART 1 PAGE 7 + MAXIMAL CONFIGURATION + + + 02480 END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000477 + +9K CORE USED + IOINI1 - IO INITIALIZATION PART 1 PAGE 8 + SYMBOL TABLE + + 000532 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APRACT 004002 INT +APRBIT 000002 INT +APRCHL 000060' INT +APRCHN 000006 INT +APRINT 000332' EXT +APROFF 001002 INT +APRON 002002 INT +APRRET 000054' INT +APRSAC 000014' INT +APRSAV 000006' INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CDRACT 004004 INT +CDRBIT 000004 INT +CDRCHL 000320' INT +CDRCHN 000005 INT +CDRINT 000350' EXT +CDROFF 001004 INT +CDRON 002004 INT +CDRRET 000314' INT +CDRSAC 000262' INT +CDRSAV 000254' INT +CH1 000324' INT +CH1ERR 000451' INT +CH1N 000000 +CH1PDN 000000 +CH1XIT 000325' INT +CH2 000250' INT +CH2CJ 000247' +CH2ERR 000452' INT +CH2N 000011 +CH2PDN 000020 +CH2SAC 000212' INT +CH2SAV 000204' INT +CH2XIT 000244' INT +CH3 000130' INT +CH3CJ 000127' +CH3ERR 000453' INT +CH3N 000011 +CH3PDN 000020 +CH3SAC 000072' INT +CH3SAV 000064' INT +CH3XIT 000124' INT +CH4 000200' INT + IOINI1 - IO INITIALIZATION PART 1 PAGE 8-1 + SYMBOL TABLE + +CH4CJ 000177' +CH4ERR 000454' INT +CH4N 000011 +CH4PDN 000020 +CH4SAC 000142' INT +CH4SAV 000134' INT +CH4XIT 000174' INT +CH5 000320' INT +CH5CJ 000317' +CH5ERR 000455' INT +CH5N 000011 +CH5PDN 000020 +CH5SAC 000262' INT +CH5SAV 000254' INT +CH5XIT 000314' INT +CH6 000060' INT +CH6CJ 000057' +CH6ERR 000456' INT +CH6N 000017 +CH6PDN 000020 +CH6SAC 000014' INT +CH6SAV 000006' INT +CH6XIT 000054' INT +CH7 000327' INT +CH7ERR 000457' INT +CH7N 000000 +CH7PDN 000000 +CH7XIT 000330' INT +CHANU1 000000 +CHANU2 000001 +CHANU3 000001 +CHANU4 000001 +CHANU5 000001 +CHANU6 000001 +CHANU7 000000 +CLDS 004006 INT +CLEN 000206 INT +CLKINI 000365' EXT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +COMCNT 000446' INT +CONFIG 000000' INT +CORBLK 000400 INT +CORLST 000474' INT +CORTAB 000464' INT +CORTAL 000475' INT +CPOPJ 000375' INT +CPOPJ1 000374' INT +CPOPJ2 000373' INT +CTYACT 004020 INT +CTYBIT 000020 INT +CTYCHL 000130' INT + IOINI1 - IO INITIALIZATION PART 1 PAGE 8-2 + SYMBOL TABLE + +CTYCHN 000003 INT +CTYINT 000333' EXT +CTYOFF 001020 INT +CTYON 002020 INT +CTYRET 000124' INT +CTYSAC 000072' INT +CTYSAV 000064' INT +D 000017 INT +DAT 000005 INT +DCAVAL 000440' INT +DCL 000001 INT +DCREQ 000443' INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVINT 000332' INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVOPR 000463' INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTAVAL 000441' INT +DTCACT 004010 INT +DTCBIT 000010 INT +DTCCHL 000200' INT +DTCCHN 000004 INT +DTCINI 000355' EXT +DTCINT 000340' EXT +DTCOFF 001010 INT +DTCON 002010 INT +DTCRET 000174' INT +DTCSAC 000142' INT +DTCSAV 000134' INT + IOINI1 - IO INITIALIZATION PART 1 PAGE 8-3 + SYMBOL TABLE + +DTREQ 000444' INT +DTSIZ 000001 +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERROR 000000 EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCOMP 000445' INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IOINI 000351' INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTAD1 000402' INT +JBTADR 000401' INT +JBTSTS 000403' INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT + IOINI1 - IO INITIALIZATION PART 1 PAGE 8-4 + SYMBOL TABLE + +JIOW 100000 INT +JNA 004000 INT +JOB 000376' INT +JOBADR 000377' INT +JOBDAT 000400' INT +JOBN 000002 INT +LOOKB 040000 INT +LPTACT 004004 INT +LPTBIT 000004 INT +LPTCHL 000320' INT +LPTCHN 000005 INT +LPTINI 000362' EXT +LPTINT 000345' EXT +LPTOFF 001004 INT +LPTON 002004 INT +LPTRET 000314' INT +LPTSAC 000262' INT +LPTSAV 000254' INT +MAXIMA 000000 INT +MJOBN 777777 777776 INT +MTAVAL 000437' INT +MTCACT 004040 INT +MTCBIT 000040 INT +MTCCHL 000250' INT +MTCCHN 000002 INT +MTCINI 000361' EXT +MTCINT 000344' EXT +MTCOFF 001040 INT +MTCON 002040 INT +MTCRET 000244' INT +MTCSAC 000212' INT +MTCSAV 000204' INT +MTREQ 000442' INT +MTW 010000 INT +NDEV 000017 +NDEVM1 000016 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PIOMOD 000367' INT +PJDCHN 000371' INT +PJOBN 000370' INT +PROG 000007 INT +PTPACT 004004 INT +PTPBIT 000004 INT +PTPCHL 000320' INT +PTPCHN 000005 INT +PTPINI 000363' EXT +PTPINT 000346' EXT +PTPOFF 001004 INT +PTPON 002004 INT +PTPRET 000314' INT + IOINI1 - IO INITIALIZATION PART 1 PAGE 8-5 + SYMBOL TABLE + +PTPSAC 000262' INT +PTPSAV 000254' INT +PTRACT 004004 INT +PTRBIT 000004 INT +PTRCHL 000320' INT +PTRCHN 000005 INT +PTRINI 000364' EXT +PTRINT 000347' EXT +PTROFF 001004 INT +PTRON 002004 INT +PTRRET 000314' INT +PTRSAC 000262' INT +PTRSAV 000254' INT +PUNIT 000372' INT +PUUOAC 000366' INT +RUN 200000 INT +RUNABL 204000 INT +SCHEDF 000450' INT +SCNACT 004020 INT +SCNBIT 000020 INT +SCNCHL 000130' INT +SCNCHN 000003 INT +SCNINI 000351' EXT +SCNINT 000334' EXT +SCNLIN 000001 +SCNOFF 001020 INT +SCNON 002020 INT +SCNRET 000124' INT +SCNSAC 000072' INT +SCNSAV 000064' INT +STOPU 000447' INT +SYSBEG 000376' INT +SYSBG1 000377' INT +SYSDAT 000002' INT +SYSEND 000475' INT +SYSFIN 000476' EXT +SYSMOD 000001 INT +SYSNUM 000004' INT +SYSSIZ 000476' INT +SYSTAP 000005' INT +SYSVER 000004 INT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TIME 000460' INT +TTYATC 020000 INT +TTYLEN 000002 INT +TTYTAB 000461' INT +TTYUSE 010000 INT +USRDDT 000436' INT +USRHI 000435' INT +USRINF 000415' INT +USRJDA 000416' INT + IOINI1 - IO INITIALIZATION PART 1 PAGE 8-6 + SYMBOL TABLE + +USRLEV 000410' +USRLO 000407' INT +USRLO1 000410' INT +USRMOD 010000 INT +USRPDP 000405' INT +USRPFI 000435' INT +USRPFU 000436' INT +USRPOV 000412' INT +USRREL 000406' INT +USRSAV 000411' INT +USRUXT 000407' INT +UUO 000014 INT + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 444 444 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 444 444 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 444 444 + III OOO OOO III NNN NNN III 444 444 + III OOO OOO III NNN NNN III 444 444 + III OOO OOO III NNN NNN III 444 444 + III OOO OOO III NNNNNN NNN III 444 444 + III OOO OOO III NNNNNN NNN III 444 444 + III OOO OOO III NNNNNN NNN III 444 444 + III OOO OOO III NNN NNN NNN III 444444444444444 + III OOO OOO III NNN NNN NNN III 444444444444444 + III OOO OOO III NNN NNN NNN III 444444444444444 + III OOO OOO III NNN NNNNNN III 444 + III OOO OOO III NNN NNNNNN III 444 + III OOO OOO III NNN NNNNNN III 444 + III OOO OOO III NNN NNN III 444 + III OOO OOO III NNN NNN III 444 + III OOO OOO III NNN NNN III 444 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 444 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 444 + IIIIIIIII OOOOOOOOO IIIIIIIII NNN NNN IIIIIIIII 444 + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :IOINI4.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:22 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2380 +File will be deleted after printing + IOINI2 - IO INITIALIZATION PART 2 PAGE 1 + MAXIMAL CONFIGURATION + + 00010 XLIST + 01930 LIST + IOINI2 - IO INITIALIZATION PART 2 PAGE 7 + MAXIMAL CONFIGURATION + + + 00010 ;SOME MACROS FOR DEFINING CONFIGURATION + + 00030 DEFINE NAME (A) + 00040 <DEFINE NAME1 + 00050 <CONFIG: ASCIZ /A/ + 00060 INTERNAL CONFIG + 00070 > + 00080 XP A,0 + 00090 SUBTTL A CONFIGURATION + 00100 > + + 00120 DEFINE DATE (A) + 00130 <DEFINE DATE1 + 00140 <SYSDAT: ASCIZ /A/ + 00150 INTERNAL SYSDAT + 00160 >> + + 00180 DEFINE VERSION (A,B) + 00190 <DEFINE VERS1 + 00200 <SYSNUM: XWD ^D'A,^D'B + 00210 XP SYSMOD,^D'A + 00220 XP SYSVER,^D'B + 00230 INTERNAL SYSNUM + 00240 >> + + 00260 DEFINE CUSPTAPE (A) + 00270 <DEFINE CUSP1 + 00280 <SYSTAP: SIXBIT /A/ + 00290 INTERNAL SYSTAP + 00300 >> + + 00320 DEFINE ACPDL (J,CHJN,CHJPDN) + 00330 < CH'J'N=CHJN + 00340 CH'J'PDN=CHJPDN + 00350 > + IOINI2 - IO INITIALIZATION PART 2 PAGE 2 + MAXIMAL CONFIGURATION + + + 00010 NAME <MAXIMAL>^DEFINE NAME1 + <CONFIG: ASCIZ /MAXIMAL/ + INTERNAL CONFIG + > + IOINI2 - IO INITIALIZATION PART 2 PAGE 2 + MAXIMAL CONFIGURATION + + + 00040 DATE <8-16-65>^DEFINE DATE1 + <SYSDAT: ASCIZ /8-16-65/ + INTERNAL SYSDAT + >^ + 00050 VERSION 1,4^DEFINE VERS1 + <SYSNUM: XWD ^D1,^D4 + XP SYSMOD,^D1 + XP SYSVER,^D4 + INTERNAL SYSNUM + >^ + 00060 CUSPTAPE DTA0^DEFINE CUSP1 + <SYSTAP: SIXBIT /DTA0/ + INTERNAL SYSTAP + >^ + + 00080 ;DEFINE THE IO PART OF THE SYSTEM + 00090 ;THAT IS: + 00100 ; DEFINE INTERRUPT SERVICE ROTUINE TO BE USED + 00110 ; ASSIGN DEVICES TO PI CHANNELS + + 00130 DEFINE SYSTEM + 00140 < + 00150 ASSOC APR,6,<> + 00160 ASSOC CTY,3,<> + 00170 ASSOC SCN,3,<TTY0,TTY1> + 00180 ASSOC DTC,4,<DTA0> + 00190 ASSOC DTC,4,<DTA1> + 00200 ASSOC DTC,4,<DTA2> + 00210 ASSOC DTC,4,<DTA3> + 00220 ASSOC MTC,2,<MTA0> + 00230 ASSOC MTC,2,<MTA1> + 00240 ASSOC MTC,2,<MTA2> + 00250 ASSOC MTC,2,<MTA3> + 00260 ASSOC LPT,5,<LPT> + 00270 ASSOC PTP,5,<PTP> + 00280 ASSOC PTR,5,<PTR> + 00290 ASSOC CDR,5,<CDR> + 00300 > + + 000001 00320 DTSIZ=1 ;MULTIPLE DECTAPE DIRECTORIES + + 000001 00340 SCNLIN=1 + + 00360 ;DEFINE HIGHEST AC TO SAVE AND LENGTH OF PD LIST FOR EACH PI CHANNEL + + 000000 00380 ACPDL (1,0,0)^ CH1N=0 + 000011 00390 ACPDL (2,11,20)^ CH2N=11 + 000011 00400 ACPDL (3,11,20)^ CH3N=11 + 000011 00410 ACPDL (4,11,20)^ CH4N=11 + 000011 00420 ACPDL (5,11,20)^ CH5N=11 + 000017 00430 ACPDL (6,17,20^ CH6N=17 + 000000 00440 ACPDL (7,0,0)^ CH7N=0 + IOINI2 - IO INITIALIZATION PART 2 PAGE 2-1 + MAXIMAL CONFIGURATION + + 00010 TITLE IOINI2 - IO INITIALIZATION PART 2 + + 00030 ;DEFINITIONS OF DEVCHN AND DEVBIT + 00040 ;THESE ALSO OCCUR IN IOINT1 + + 00060 DEFINE ASSOC (A,N,D) + 00070 < + 00080 A'CHN=N + 00090 > + + 00110 SYSTEM^ + IOINI2 - IO INITIALIZATION PART 2 PAGE 2 + MAXIMAL CONFIGURATION + + + + 00160 ;APR PIP BITS + + 000001 00180 APRBIT=1 + 000002 00190 REPEAT 7-APRCHN,<APRBIT=APRBIT*2> + 00200 XP PION,200 ;CONO PI,PION TURNS PI SYSTEM ON + 00210 XP PIOFF,400 ;TURN IT OFF + 00220 XP PICLK,PION+1B24+APRBIT ;TURN PI ON, AND FORCE CLOCK INT. + 00230 XP CLKOFF,1000+APRCHN ;CONO APR,CLKOFF TURNS CLOCK FLAG OFF + IOINI2 - IO INITIALIZATION PART 2 PAGE 3 + MAXIMAL CONFIGURATION + + + + 00270 ;ASSEMBLE ALL DEVICE DATA BLOCKS AND LINK THEM TOGETHER + + 00290 DEFINE SCNDDB (A,B,C) + 00300 < INTERNAL C'DB + 00310 C'DB: ZZ=. + 00320 SIXBIT /C/ + 00330 XWD A'CHN*PICHN,STTYBF+1 ;LONG ENOUGH FOR PRINTING + 00340 ;SEQUENCE CARD IMAGE. + 00350 ;USER BUFFERS ARE 2 WORDS + 00360 ;LONGER THEN THE MONITORY TTY BUFFERS. + 00370 0 + 00380 EXTERNAL TTYDSP + 00390 XWD C,TTYDSP + 00400 XWD DVTTY+DVIN+DVOUT,3 + 00410 0 + 00420 0 + 00430 XWD PROG,0 + 00440 XWD PROG,0 + 00450 XP TTYPTR,.-ZZ + 00460 0 + 00470 XP TTYCTR,.-ZZ + 00480 0 + 00490 XP TTYSAV,.-ZZ + 00500 0 + 00510 XP TTYBUF,.-ZZ + 00520 XP TTYBM1,TTYBUF-1 + 00530 XP STTYBF,20 + 00540 XP STTYB1,STTYBF+1 ;LENGTH+1 + 00550 BLOCK STTYBF + 00560 XP TTYBFE,.-ZZ-1 + 00570 + 00580 ;LINE NO. PARAMETERS + 00590 XP TTYLEN,SCNLIN+1 ;LENGTH OF TTY TRANSLATOR TABLE(INCLUDE TTY) + 00600 XP TSCNLN,SCNLIN-1 ;HIGHEST TTY LINE NO.(NOT COUNTING CTY) + 00610 XP TCONLN,TSCNLN+1 ;CTY LINE NUMBER + 00620 XP MTTYLN,-TTYLEN ;NEGATIVEL LENGTH OF TRANSLATOR TABLE + 00630 XP FSNCHN,SCNCHN*101 ;CHANNEL ASSIGNED, FOR FULL DUPLEX SCN. + 00640 XP TTYLST,TTY0DB ;FIRST TTY DEVICE DATA BLOCK + 00650 > + + 00670 ;NEG. NO. OF TELTYPE DEVICE DATA BLOCKS + + 000000 00690 MLTTYL=0 + 00700 DEFINE ASSOC (A,N,D) + 00710 <IRP D,<IFIDN <A>,<SCN>,<MLTTYL=MLTTYL-1>>> + + 00730 SYSTEM^ + 00750 INTERNAL MLTTYL + IOINI2 - IO INITIALIZATION PART 2 PAGE 4 + MAXIMAL CONFIGURATION + + + + 00790 ;MAG TAPE DEVICE DATA BLOCK + + 000000 00810 MTCNUM=0 + + 00830 DEFINE MTCDDB (A,B,C) + 00840 < INTERNAL C'DB + 00850 C'DB: SIXBIT /C/ + 00860 MTCNUM=MTCNUM+1 + 00870 XWD IORET+A'CHN*PICHN,<MTCNUM-1>*10000+201 + 00880 + 00890 0 + 00900 XWD C,MTDISP + 00910 EXTERNAL MTDISP + 00920 XWD 4400+DVMTA+DVIN+DVOUT,154403 + 00930 0 + 00940 0 + 00950 XWD PROG,0 + 00960 XWD PROG,0 + 00970 > + IOINI2 - IO INITIALIZATION PART 2 PAGE 5 + MAXIMAL CONFIGURATION + + + 01000 ;DECTAPE DEVICE DATA BLOCK + + 000000 01020 DTCNUM=0 + + 01040 DEFINE DTCDDB (A,B,C) + 01050 < INTERNAL C'DB + 01060 C'DB: ZZ=. + 01070 SIXBIT /C/ + 01080 DTCNUM=DTCNUM+1 + 01090 XWD IORET+A'CHN*PICHN,<DTCNUM-1>*10000+201 + 01100 0 + 01110 XWD C,UTDSP + 01120 EXTERNAL UTDSP + 01130 XWD 4400+DVDIR+DVIN+DVOUT,154403 + 01140 0 + 01150 0 + 01160 0 + 01170 0 + 01180 XP UFREE,.-ZZ ;NEXT FREE BLOCK NO. + 01190 0 + 01200 XP UDIR,.-ZZ ;LINK TO DIRECTORY IN DATA BLOCK + 01210 IFE DTSIZ,< EXP DIRBUF + 01220 > + 01230 IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> + 01240 > + 01250 > + + IOINI2 - IO INITIALIZATION PART 2 PAGE 6 + MAXIMAL CONFIGURATION + + + + 01300 ;LINE PRINTER DEVICE DTA BLOCK + + 01320 DEFINE LPTDDB (A,B,C) + 01330 <INTERNAL LPTDB,LPTDAT,LPTCHR,LPTIOS,LPTSER,LPTMOD + 01340 INTERNAL LPTBUF,LPTPTR,LPTADR,LPTSV1 + 01350 EXTERNAL LPTDSP + 01360 + 01370 LPTDB: + 01380 LPTDAT: SIXBIT /LPT/ + 01390 LPTCHR: XWD A'CHN*PICHN,32 + 01400 LPTIOS: 0 + 01410 LPTSER: XWD C,LPTDSP + 01420 LPTMOD: XWD 0+DVOUT,3 + 01430 0 + 01440 LPTBUF: 0 + 01450 LPTPTR: 0 + 01460 LPTADR: XWD PROG,0 + 01470 LPTSV1: 0 + 01480 + 01490 XP LPTCLB,LPTCHN+200 ;PI CHANNEL AND BUSY FLAG + 01500 XP LPTCHB,11*LPTCHN ;LINE PRINTER ERROR AND DATA CHANNELS + 01510 > + IOINI2 - IO INITIALIZATION PART 2 PAGE 7 + MAXIMAL CONFIGURATION + + + + 01550 ;CARD READER DEVICE DATA BLOCK + + 01570 DEFINE CDRDDB (A,B,C) + 01580 <INTERNAL CDRDB,CDRDAT,CRDIS + 01590 EXTERNAL CDRDSP + 01600 + 01610 CDRDB: + 01620 CDRDAT: SIXBIT /CDR/ + 01630 XWD A'CHN*PICHN,34 ;LONG ENOUGHT FOR BINARY CARDS + 01640 0 + 01650 XWD C,CDRDSP + 01660 XWD DVCDR+1400+DVIN,14403 + 01670 0 + 01680 0 + 01690 XWD PROG,0 + 01700 0 + 01710 0 + 01720 CRDIS: JRST . + 01730 > + IOINI2 - IO INITIALIZATION PART 2 PAGE 8 + MAXIMAL CONFIGURATION + + + + 01770 ;PAPER TAPE READER DEVICE DATA BLOCK + + 01790 DEFINE PTRDDB (A,B,C) + 01800 <INTERNAL PTRDB,PTRDAT,PTRCHR,PTRIOS,PTRSER + 01810 INTERNAL PTRMOD,PTRBUF,PTRADR,PTRPTR,PTRCTR,PTRSVC,PTRSV1 + 01820 EXTERNAL PTRDSP + 01830 + 01840 PTRDB: + 01850 PTRDAT: SIXBIT /PTR/ + 01860 PTRCHR: XWD A'CHN*PICHN,41 + 01870 PTRIOS: 0 + 01880 PTRSER: XWD C,PTRDSP + 01890 PTRMOD: XWD 1000+DVIN,14403 + 01900 0 + 01910 PTRBUF: 0 + 01920 PTRADR: XWD PROG,0 + 01930 PTRPTR: 0 + 01940 PTRCTR: 0 + 01950 PTRSVC: 0 + 01960 PTRSV1: 0 + 01970 > + IOINI2 - IO INITIALIZATION PART 2 PAGE 9 + MAXIMAL CONFIGURATION + + + + 02010 ;PAPER TAPE PUNCH DEVICE DATA BLOCK + + 02030 DEFINE PTPDDB (A,B,C) + 02040 <INTERNAL PTPDB,PTPDAT,PTPCHR,PTPIOS,PTPSER,PTPMOD,PTPBUF + 02050 INTERNAL PTPPTR,PTPADR,PTPCTR,PTPCNT,PTPCHA,PTPSIO + 02060 EXTERNAL PTPDSP + 02070 + 02080 PTPDB: + 02090 PTPDAT: SIXBIT /PTP/ + 02100 PTPCHR: XWD A'CHN*PICHN,41 + 02110 PTPIOS: 0 + 02120 PTPSER: XWD C,PTPDSP + 02130 PTPMOD: XWD 1000+DVOUT,14403 + 02140 0 + 02150 PTPBUF: 0 + 02160 PTPPTR: 0 + 02170 PTPADR: XWD PROG,0 + 02180 PTPCTR: 0 + 02190 PTPCNT: 0 + 02200 PTPCHA: 0 + 02210 PTPSIO: 0 + 02220 > + IOINI2 - IO INITIALIZATION PART 2 PAGE 10 + MAXIMAL CONFIGURATION + + + + 02260 ;GENERATE DEVICE DATA BLOCKS NEEDED FOR THIS CONFIGURATION + + 02280 DEFINE ASSOC (A,B,C) + 02290 < + 02300 IRP C,< + 02310 ;DEFINE FORWARD LINL SYMBOL + 02320 LINK + 02330 ; + 02340 ; + 02350 ; + 02360 A'DDB A,B,C + 02370 + 02380 C=0 ;SET LINK TO 0(IN CASE THIS IS LAST DDB) + 02390 DEFINE LINK + 02400 <C=.> + 02410 > + 02420 > + + 02440 INTERNAL DEVLST + + 000000' 000001' 000000 02460 DEVLST: XWD FIRDB,0 ;BEGINNING OF DEVICE DATA BLOCK CHAIN + + 02480 DEFINE LINK + 02490 <FIRDB=.> + + 02510 SYSTEM^ 000001' 646471 200000 SIXBIT /TTY0/ + 000002' 000300 000021 XWD SCNCHN*PICHN,STTYBF+1 ;LONG ENOUGH FOR PRINTING + 000003' 000000 000000 0 + 000004' 000035' 000000* XWD TTY0,TTYDSP + 000005' 000013 000003 XWD DVTTY+DVIN+DVOUT,3 + 000006' 000000 000000 0 + 000007' 000000 000000 0 + 000010' 000007 000000 XWD PROG,0 + 000011' 000007 000000 XWD PROG,0 + 000012' 000000 000000 0 + 000013' 000000 000000 0 + 000014' 000000 000000 0 + 000035' 646471 210000 SIXBIT /TTY1/ + 000036' 000300 000021 XWD SCNCHN*PICHN,STTYBF+1 ;LONG ENOUGH FOR PRINTING + 000037' 000000 000000 0 + 000040' 000071' 000004* XWD TTY1,TTYDSP + 000041' 000013 000003 XWD DVTTY+DVIN+DVOUT,3 + 000042' 000000 000000 0 + 000043' 000000 000000 0 + 000044' 000007 000000 XWD PROG,0 + 000045' 000007 000000 XWD PROG,0 + 000046' 000000 000000 0 + 000047' 000000 000000 0 + 000050' 000000 000000 0 + 000071' 446441 200000 SIXBIT /DTA0/ + 000072' 000420 000201 XWD IORET+DTCCHN*PICHN,<DTCNUM-1>*10000+201 + IOINI2 - IO INITIALIZATION PART 2 PAGE 10-1 + MAXIMAL CONFIGURATION + + 000073' 000000 000000 0 + 000074' 000104' 000000* XWD DTA0,UTDSP + 000075' 004407 154403 XWD 4400+DVDIR+DVIN+DVOUT,154403 + 000076' 000000 000000 0 + 000077' 000000 000000 0 + 000100' 000000 000000 0 + 000101' 000000 000000 0 + 000102' 000000 000000 0 + 000103' 000000 000267' IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> + 000104' 446441 210000 SIXBIT /DTA1/ + 000105' 000420 010201 XWD IORET+DTCCHN*PICHN,<DTCNUM-1>*10000+201 + 000106' 000000 000000 0 + 000107' 000117' 000074* XWD DTA1,UTDSP + 000110' 004407 154403 XWD 4400+DVDIR+DVIN+DVOUT,154403 + 000111' 000000 000000 0 + 000112' 000000 000000 0 + 000113' 000000 000000 0 + 000114' 000000 000000 0 + 000115' 000000 000000 0 + 000116' 000000 000467' IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> + 000117' 446441 220000 SIXBIT /DTA2/ + 000120' 000420 020201 XWD IORET+DTCCHN*PICHN,<DTCNUM-1>*10000+201 + 000121' 000000 000000 0 + 000122' 000132' 000107* XWD DTA2,UTDSP + 000123' 004407 154403 XWD 4400+DVDIR+DVIN+DVOUT,154403 + 000124' 000000 000000 0 + 000125' 000000 000000 0 + 000126' 000000 000000 0 + 000127' 000000 000000 0 + 000130' 000000 000000 0 + 000131' 000000 000667' IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> + 000132' 446441 230000 SIXBIT /DTA3/ + 000133' 000420 030201 XWD IORET+DTCCHN*PICHN,<DTCNUM-1>*10000+201 + 000134' 000000 000000 0 + 000135' 000145' 000122* XWD DTA3,UTDSP + 000136' 004407 154403 XWD 4400+DVDIR+DVIN+DVOUT,154403 + 000137' 000000 000000 0 + 000140' 000000 000000 0 + 000141' 000000 000000 0 + 000142' 000000 000000 0 + 000143' 000000 000000 0 + 000144' 000000 001067' IFN DTSIZ,< EXP DTDIR+200*<DTCNUM-1> + 000145' 556441 200000 MTA0DB: SIXBIT /MTA0/ + 000146' 000220 000201 XWD IORET+MTCCHN*PICHN,<MTCNUM-1>*10000+201 + 000147' 000000 000000 0 + 000150' 000156' 000000* XWD MTA0,MTDISP + 000151' 004423 154403 XWD 4400+DVMTA+DVIN+DVOUT,154403 + 000152' 000000 000000 0 + 000153' 000000 000000 0 + 000154' 000007 000000 XWD PROG,0 + 000155' 000007 000000 XWD PROG,0 + 000156' 556441 210000 MTA1DB: SIXBIT /MTA1/ + 000157' 000220 010201 XWD IORET+MTCCHN*PICHN,<MTCNUM-1>*10000+201 + IOINI2 - IO INITIALIZATION PART 2 PAGE 10-2 + MAXIMAL CONFIGURATION + + 000160' 000000 000000 0 + 000161' 000167' 000150* XWD MTA1,MTDISP + 000162' 004423 154403 XWD 4400+DVMTA+DVIN+DVOUT,154403 + 000163' 000000 000000 0 + 000164' 000000 000000 0 + 000165' 000007 000000 XWD PROG,0 + 000166' 000007 000000 XWD PROG,0 + 000167' 556441 220000 MTA2DB: SIXBIT /MTA2/ + 000170' 000220 020201 XWD IORET+MTCCHN*PICHN,<MTCNUM-1>*10000+201 + 000171' 000000 000000 0 + 000172' 000200' 000161* XWD MTA2,MTDISP + 000173' 004423 154403 XWD 4400+DVMTA+DVIN+DVOUT,154403 + 000174' 000000 000000 0 + 000175' 000000 000000 0 + 000176' 000007 000000 XWD PROG,0 + 000177' 000007 000000 XWD PROG,0 + 000200' 556441 230000 MTA3DB: SIXBIT /MTA3/ + 000201' 000220 030201 XWD IORET+MTCCHN*PICHN,<MTCNUM-1>*10000+201 + 000202' 000000 000000 0 + 000203' 000211' 000172* XWD MTA3,MTDISP + 000204' 004423 154403 XWD 4400+DVMTA+DVIN+DVOUT,154403 + 000205' 000000 000000 0 + 000206' 000000 000000 0 + 000207' 000007 000000 XWD PROG,0 + 000210' 000007 000000 XWD PROG,0 + 000211' 546064 000000 LPTDAT: SIXBIT /LPT/ + 000212' 000500 000032 LPTCHR: XWD LPTCHN*PICHN,32 + 000213' 000000 000000 LPTIOS: 0 + 000214' 000223' 000000* LPTSER: XWD LPT,LPTDSP + 000215' 000001 000003 LPTMOD: XWD 0+DVOUT,3 + 000216' 000000 000000 0 + 000217' 000000 000000 LPTBUF: 0 + 000220' 000000 000000 LPTPTR: 0 + 000221' 000007 000000 LPTADR: XWD PROG,0 + 000222' 000000 000000 LPTSV1: 0 + 000223' 606460 000000 PTPDAT: SIXBIT /PTP/ + 000224' 000500 000041 PTPCHR: XWD PTPCHN*PICHN,41 + 000225' 000000 000000 PTPIOS: 0 + 000226' 000240' 000000* PTPSER: XWD PTP,PTPDSP + 000227' 001001 014403 PTPMOD: XWD 1000+DVOUT,14403 + 000230' 000000 000000 0 + 000231' 000000 000000 PTPBUF: 0 + 000232' 000000 000000 PTPPTR: 0 + 000233' 000007 000000 PTPADR: XWD PROG,0 + 000234' 000000 000000 PTPCTR: 0 + 000235' 000000 000000 PTPCNT: 0 + 000236' 000000 000000 PTPCHA: 0 + 000237' 000000 000000 PTPSIO: 0 + 000240' 606462 000000 PTRDAT: SIXBIT /PTR/ + 000241' 000500 000041 PTRCHR: XWD PTRCHN*PICHN,41 + 000242' 000000 000000 PTRIOS: 0 + 000243' 000254' 000000* PTRSER: XWD PTR,PTRDSP + 000244' 001002 014403 PTRMOD: XWD 1000+DVIN,14403 + IOINI2 - IO INITIALIZATION PART 2 PAGE 10-3 + MAXIMAL CONFIGURATION + + 000245' 000000 000000 0 + 000246' 000000 000000 PTRBUF: 0 + 000247' 000007 000000 PTRADR: XWD PROG,0 + 000250' 000000 000000 PTRPTR: 0 + 000251' 000000 000000 PTRCTR: 0 + 000252' 000000 000000 PTRSVC: 0 + 000253' 000000 000000 PTRSV1: 0 + 000254' 434462 000000 CDRDAT: SIXBIT /CDR/ + 000255' 000500 000034 XWD CDRCHN*PICHN,34 ;LONG ENOUGHT FOR BINARY CARDS + 000256' 000000 000000 0 + 000257' 000000 000000* XWD CDR,CDRDSP + 000260' 101402 014403 XWD DVCDR+1400+DVIN,14403 + 000261' 000000 000000 0 + 000262' 000000 000000 0 + 000263' 000007 000000 XWD PROG,0 + 000264' 000000 000000 0 + 000265' 000000 000000 0 + 000266' 254000 000266' CRDIS: JRST . + IOINI2 - IO INITIALIZATION PART 2 PAGE 11 + MAXIMAL CONFIGURATION + + + + 000267' 02550 LIT + + 02570 IFE DTSIZ,< DIRBUF: BLOCK 200 + 02580 INTERNAL DIRBUF + 02590 > + + 000267' 02610 IFN DTSIZ,<DTDIR: BLOCK DTCNUM*200 + 02620 INTERNAL DTDIR + 02630 > + + 02650 END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 001267 + +10K CORE USED + IOINI2 - IO INITIALIZATION PART 2 PAGE 12 + SYMBOL TABLE + + 000376 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APRBIT 000002 +APRCHN 000006 +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CDR 000000 +CDRCHN 000005 +CDRDAT 000254' INT +CDRDB 000254' INT +CDRDSP 000257' EXT +CH1N 000000 +CH1PDN 000000 +CH2N 000011 +CH2PDN 000020 +CH3N 000011 +CH3PDN 000020 +CH4N 000011 +CH4PDN 000020 +CH5N 000011 +CH5PDN 000020 +CH6N 000017 +CH6PDN 000020 +CH7N 000000 +CH7PDN 000000 +CLKOFF 001006 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CRDIS 000266' INT +CTYCHN 000003 +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT + IOINI2 - IO INITIALIZATION PART 2 PAGE 12-1 + SYMBOL TABLE + +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVLST 000000' INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTA0 000104' +DTA0DB 000071' INT +DTA1 000117' +DTA1DB 000104' INT +DTA2 000132' +DTA2DB 000117' INT +DTA3 000145' +DTA3DB 000132' INT +DTCCHN 000004 +DTCNUM 000004 +DTDIR 000267' INT +DTSIZ 000001 +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +FIRDB 000001' +FSNCHN 000303 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT + IOINI2 - IO INITIALIZATION PART 2 PAGE 12-2 + SYMBOL TABLE + +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +LPT 000223' +LPTADR 000221' INT +LPTBUF 000217' INT +LPTCHB 000055 INT +LPTCHN 000005 +LPTCHR 000212' INT +LPTCLB 000205 INT +LPTDAT 000211' INT +LPTDB 000211' INT +LPTDSP 000214' EXT +LPTIOS 000213' INT +LPTMOD 000215' INT +LPTPTR 000220' INT +LPTSER 000214' INT +LPTSV1 000222' INT +MAXIMA 000000 INT +MLTTYL 777777 777776 INT +MTA0 000156' +MTA0DB 000145' INT +MTA1 000167' +MTA1DB 000156' INT +MTA2 000200' +MTA2DB 000167' INT +MTA3 000211' +MTA3DB 000200' INT +MTCCHN 000002 +MTCNUM 000004 +MTDISP 000203' EXT + IOINI2 - IO INITIALIZATION PART 2 PAGE 12-3 + SYMBOL TABLE + +MTTYLN 777777 777776 INT +MTW 010000 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PICLK 004202 INT +PIOFF 000400 INT +PION 000200 INT +PROG 000007 INT +PTP 000240' +PTPADR 000233' INT +PTPBUF 000231' INT +PTPCHA 000236' INT +PTPCHN 000005 +PTPCHR 000224' INT +PTPCNT 000235' INT +PTPCTR 000234' INT +PTPDAT 000223' INT +PTPDB 000223' INT +PTPDSP 000226' EXT +PTPIOS 000225' INT +PTPMOD 000227' INT +PTPPTR 000232' INT +PTPSER 000226' INT +PTPSIO 000237' INT +PTR 000254' +PTRADR 000247' INT +PTRBUF 000246' INT +PTRCHN 000005 +PTRCHR 000241' INT +PTRCTR 000251' INT +PTRDAT 000240' INT +PTRDB 000240' INT +PTRDSP 000243' EXT +PTRIOS 000242' INT +PTRMOD 000244' INT +PTRPTR 000250' INT +PTRSER 000243' INT +PTRSV1 000253' INT +PTRSVC 000252' INT +RUN 200000 INT +RUNABL 204000 INT +SCNCHN 000003 +SCNLIN 000001 +STTYB1 000021 INT +STTYBF 000020 INT +TAC 000001 INT +TAC1 000002 INT +TCONLN 000001 INT +TEM 000010 INT +TSCNLN 000000 INT +TTY0 000035' + IOINI2 - IO INITIALIZATION PART 2 PAGE 12-4 + SYMBOL TABLE + +TTY0DB 000001' INT +TTY1 000071' +TTY1DB 000035' INT +TTYATC 020000 INT +TTYBFE 000033 INT +TTYBM1 000013 INT +TTYBUF 000014 INT +TTYCTR 000012 INT +TTYDSP 000040' EXT +TTYLEN 000002 INT +TTYLST 000001' INT +TTYPTR 000011 INT +TTYSAV 000013 INT +TTYUSE 010000 INT +UDIR 000012 INT +UFREE 000011 INT +USRMOD 010000 INT +UTDSP 000135' EXT +UUO 000014 INT +ZZ 000132' + JJJ OOOOOOOOO BBBBBBBBBBBB DDDDDDDDDDDD AAAAAAAAA TTTTTTTTTTTTTTT + JJJ OOOOOOOOO BBBBBBBBBBBB DDDDDDDDDDDD AAAAAAAAA TTTTTTTTTTTTTTT + JJJ OOOOOOOOO BBBBBBBBBBBB DDDDDDDDDDDD AAAAAAAAA TTTTTTTTTTTTTTT + JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBBBBBBBBBBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBBBBBBBBBBB DDD DDD AAA AAA TTT + JJJ OOO OOO BBBBBBBBBBBB DDD DDD AAA AAA TTT +JJJ JJJ OOO OOO BBB BBB DDD DDD AAAAAAAAAAAAAAA TTT +JJJ JJJ OOO OOO BBB BBB DDD DDD AAAAAAAAAAAAAAA TTT +JJJ JJJ OOO OOO BBB BBB DDD DDD AAAAAAAAAAAAAAA TTT +JJJ JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT +JJJ JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT +JJJ JJJ OOO OOO BBB BBB DDD DDD AAA AAA TTT + JJJJJJJJJ OOOOOOOOO BBBBBBBBBBBB DDDDDDDDDDDD AAA AAA TTT + JJJJJJJJJ OOOOOOOOO BBBBBBBBBBBB DDDDDDDDDDDD AAA AAA TTT + JJJJJJJJJ OOOOOOOOO BBBBBBBBBBBB DDDDDDDDDDDD AAA AAA TTT + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :JOBDAT.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:22 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2357 +File will be deleted after printing + JOBDAT - JOB DATA AREA ASSIGNMENTS PAGE 1 + + + 00010 TITLE JOBDAT - JOB DATA AREA ASSIGNMENTS + + 00030 DEFINE BLK (A,B) + 00040 <JOBPRO=B + 00050 A=0 + 00060 ENTRY A + 00070 DEFINE BLK (C,D) + 00080 <C=JOBPRO + 00090 JOBPRO=JOBPRO+D + 00100 ENTRY C>> + + 00120 BLK JOBAC,20 ;SYSTEM USE AC STORAGE + 00130 BLK JOBDAC,20 ;USER'S AC STORAGE WHILE JOB IS INACTIV + 000157 00140 JOBDHI=JOBDAT+17 ;HIGHEST AC SAVED WHILE INACTIVE + 00150 BLK JOBUUO,1 ;UUO SAVE AND TRAP LOCATIONS + 00160 BLK JOB41,1 ;UUO JSR LOCATION + 00170 BLK JOBPC,1 ;BITS 0-5=APR FLAGS, C(RH)=PC + 00180 BLK JOBPDP,1 ;PUSH DOWN POINTER FOR SYSTEM USE + 000043 00190 JOBPRT=JOBPDP ;FIRST LOC PROTECTED FROM ITNERRUPT SER + 000044 00200 JOBPR1=JOBPRT+1 ;FIRST LOC+1 + 00210 BLK JOBREL,1 ;C(LH)=0, C(RH)=RELOCATION ADDRESS + 00220 BLK JOBUXT,1 ;EXIT FROM UUO AT BREAK + 00230 BLK JOBLEV,1 ;C(40) WHEN INACTIVE + 00240 BLK JOBSAV,1 ;TEMPOARY STORAGE FOR UOO HANDLER + 00250 BLK JOBPOV,1 ;PUSH DOWN OVERFLOW TRAP + 00260 BLK JOBTEM,1 ;(UNUSED)TEMPORARY SYSTEM STORAGE + 00270 BLK JOBTM1,1 ;" + 00280 BLK JOBINF,1 ;UNUSED + 00290 BLK JOBJDA,20 ;JOB IO DEVICE CHANNEL ASSIGNMENTS + 00300 BLK JOBDDT,1 ;ADDRESS OF USER'S DDT + 000073 00310 JOBPFI=JOBDDT-1 ;LAST LOC PROTECTED FROM IO SERVICE + 000074 00320 JOBPFU=JOBDDT ;LAST LOC PROTECTED FROM USER + 00330 BLK JOBCDP,1 ;(UNUSED)POINTER TO COMMAND STRING + 00340 BLK JOBTRP,20 ;(UNUSED)TRAP LOCATIONS + 00350 BLK JOBSYM,1 ;SYMBOL TABLE POINTER + 00360 BLK JOBUSY,1 ;(UNUSED)POINTER TO UNDEFINED SYMBOL TA + 00370 BLK JOBSA,1 ;C(RH)=STARTING ADDRESS + 00380 ;C(LH)=HIGHEST LOCATION USED + 00390 BLK JOBFF,1 ;FIRST FREE LOCATION + 000140 00400 JOBDAT=140 ;LENGTH OF JOB DATA AREA + 000137 00410 JOBHGH=JOBDAT-1 ;HIGHEST LOC IN JOB DATA AREA + 000121 00420 JOBPDL=JOBPRO-1 ;FIRST LOC. -1 OF PD LIST + 000122 00430 JOBPD1=JOBPDL+1 ;FIRST LOC. IN PD LIST + 777777 777762 00440 MJOBPD=JOBPDL-JOBHGH ;- LENGTH OF PD LIST + 000122 00450 JOBS41=JOBPRO ;PLACE WHERE SAVE-GET SAVES USER LOC 4 + 000140 00460 JOBDA=JOBDAT + 00470 ENTRY JOBPFI,JOBPFU,JOBPDL,JOBPRO,MJOBPD,JOBHGH + 00480 ENTRY JOBDHI,JOBPRT,JOBPR1,JOBDA,JOBS41,JOBPD1 + + 00500 END, + +NO ERRORS DETECTED + + JOBDAT - JOB DATA AREA ASSIGNMENTS PAGE 1-1 + + +PROGRAM BREAK IS 000000 + +8K CORE USED + JOBDAT - JOB DATA AREA ASSIGNMENTS PAGE 2 + SYMBOL TABLE + + 000046 +JOB41 000041 ENT +JOBAC 000000 ENT +JOBCDP 000075 ENT +JOBDA 000140 ENT +JOBDAC 000020 ENT +JOBDAT 000140 +JOBDDT 000074 ENT +JOBDHI 000157 ENT +JOBFF 000121 ENT +JOBHGH 000137 ENT +JOBINF 000053 ENT +JOBJDA 000054 ENT +JOBLEV 000046 ENT +JOBPC 000042 ENT +JOBPD1 000122 ENT +JOBPDL 000121 ENT +JOBPDP 000043 ENT +JOBPFI 000073 ENT +JOBPFU 000074 ENT +JOBPOV 000050 ENT +JOBPR1 000044 ENT +JOBPRO 000122 ENT +JOBPRT 000043 ENT +JOBREL 000044 ENT +JOBS41 000122 ENT +JOBSA 000120 ENT +JOBSAV 000047 ENT +JOBSYM 000116 ENT +JOBTEM 000051 ENT +JOBTM1 000052 ENT +JOBTRP 000076 ENT +JOBUSY 000117 ENT +JOBUUO 000040 ENT +JOBUXT 000045 ENT +MJOBPD 777777 777762 ENT + LLL PPPPPPPPPPPP TTTTTTTTTTTTTTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +LLL PPPPPPPPPPPP TTTTTTTTTTTTTTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +LLL PPPPPPPPPPPP TTTTTTTTTTTTTTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +LLL PPP PPP TTT SSS EEE RRR RRR +LLL PPP PPP TTT SSS EEE RRR RRR +LLL PPP PPP TTT SSS EEE RRR RRR +LLL PPP PPP TTT SSS EEE RRR RRR +LLL PPP PPP TTT SSS EEE RRR RRR +LLL PPP PPP TTT SSS EEE RRR RRR +LLL PPPPPPPPPPPP TTT SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +LLL PPPPPPPPPPPP TTT SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +LLL PPPPPPPPPPPP TTT SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +LLL PPP TTT SSS EEE RRR RRR +LLL PPP TTT SSS EEE RRR RRR +LLL PPP TTT SSS EEE RRR RRR +LLL PPP TTT SSS EEE RRR RRR +LLL PPP TTT SSS EEE RRR RRR +LLL PPP TTT SSS EEE RRR RRR +LLLLLLLLLLLLLLL PPP TTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +LLLLLLLLLLLLLLL PPP TTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +LLLLLLLLLLLLLLL PPP TTT SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :LPTSER.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:22 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2354 +File will be deleted after printing + LPTSER - LINE PRINTER SERVICE ROUTINE PAGE 1 + 8-4-65 + + 00010 XLIST + 01930 LIST + LPTSER - LINE PRINTER SERVICE ROUTINE PAGE 7 + 8-4-65 + + + 00010 TITLE LPTSER - LINE PRINTER SERVICE ROUTINE + 00020 SUBTTL 8-4-65 + 00030 INTERNAL LPTINT,LPTINI + 00040 EXTERNAL LPTCHN, LPTCHL, LPTRET, OUT, WAIT1, LPTSAV, IOSET + 00050 EXTERNAL ADVBFE, SETIOD,ILLINP,LPTCHB,LPTCLB + + 00070 ;DEVICE DATA BLOCK LINKAGE + 00080 EXTERNAL LPTDAT,LPTCHR,LPTIOS,LPTSER,LPTMOD,LPTBUF,LPTPTR + 00090 EXTERNAL LPTADR,LPTSV1 + 00100 ENTRY LPTDSP + LPTSER - LINE PRINTER SERVICE ROUTINE PAGE 2 + 8-4-65 + + + + 00140 ,LPT PARAMETER ASSIGNMENTS + + 00160 , LPT CONTROL REGISTER + 002000 00170 LPTCLR=2000 ;CLEAR BUFFER + 000100 00180 LPTDON=100 ;DONE FLAG + 000400 00190 LPTERR=400 ;ERROR FLAG + 001000 00200 LPTLOV=1000 ;LINE OVERFLOW + + 00220 , SPECIAL IO STATUS WORD ASSIGNMENTS + 100000 00230 LPTADV=100000 + + 00250 REPEAT 0,< + 00260 , LPT DATABLOCK + 00270 + 00280 LPTDAT: SIXBIT .LPT. + 00290 LPTCHR: 32 + 00300 LPTIOS: 0 + 00310 LPTSER: EXP LPTDSP + 00320 LPTMOD: XWD 0,3 + 00330 0 + 00340 LPTBUF: 0 + 00350 LPTPTR: 0 + 00360 LPTADR: XWD PROG,0 + 00370 LPTSV1: 0 + 00380 > + + 00400 , LPT SERVICE DISPATCH TABLE + + 000000' 254000 000004' 00420 LPTDSP: JRST LPTINI ;RELEASE + 000001' 254000 000007' 00430 JRST LPTCLS ;CLOSE + 000002' 254000 000013' 00440 JRST LPTOUT ;OUTPUT + 000003' 254000 000000* 00450 JRST ILLINP ;INPUT + + 000004' 712600 002000 00470 LPTINI: CONO LPT,LPTCLR ;LPT INITIALIZE + 000005' 513000 000034' 00480 HLLZS LPTINT + 000006' 263140 000000 00490 POPJ PDP, + LPTSER - LINE PRINTER SERVICE ROUTINE PAGE 3 + 8-4-65 + + + + 000007' 260140 000000* 00530 LPTCLS: PUSHJ PDP,OUT ;PRINT REMAINING BUFFERS + 000010' 260140 000000* 00540 PUSHJ PDP, WAIT1 ;WAIT FOR IOACT=0 + 000011' 712540 000126' 00550 DATAO LPT,LPTTOP ;PRINT CARRAGE RETURN, FORM FEED + 000012' 263140 000000 00560 POPJ PDP, ;CLOSE RETURN + + 000013' 660000 010000 00580 LPTOUT: TRO IOS,IOACT ;IOACT=1 + 000014' 621000 400000 00590 TLZ IOS,IODISC ;IODISC:=0 + 000015' 661000 000020 00600 TLO IOS,IO ;IO:=1 + 000016' 603000 000002 00610 TLNE IOS,IOBEG ;VIRGIN DEVICE? IOBEG:=0 + 000017' 254000 000024' 00620 JRST LPTBEG ;YES + 000020' 260140 000127' 00630 PUSHJ PDP,LPTSET + 000021' 202000 000000* 00640 MOVEM IOS,LPTIOS ;C(LPTIOS):=C(IOS) + 000022' 201040 000100 00650 MOVEI TAC,LPTDON + 000023' 254000 000030' 00660 JRST LPTBG1 + + 000024' 661000 400000 00680 LPTBEG: TLO IOS,IODISC + 000025' 202000 000021* 00690 MOVEM IOS,LPTIOS ;C(LPTIOS):=C(IOS) + 000026' 260140 000127' 00700 PUSHJ PDP,LPTSET + 000027' 201040 002000 00710 MOVEI TAC,LPTCLR + 000030' 201100 001500 00720 LPTBG1: MOVEI TAC1,LPTLOV+LPTERR+LPTDON + 000031' 542100 000034' 00730 HRRM TAC1,LPTINT + 000032' 712601 000000* 00740 CONO LPT, LPTCHB(TAC) ;CLEAR BUFFER AND ASSIGN PI C + 000033' 263140 000000 00750 POPJ PDP, ;RETURN + LPTSER - LINE PRINTER SERVICE ROUTINE PAGE 4 + 8-4-65 + + + + + 00800 , LINE PRINTER INTERRUPT SERVICE + + 000034' 712740 001500 00820 LPTINT: CONSO LPT,LPTLOV+LPTERR+LPTDON;LINE OVERFLOW, ERROR OR DONE + 000035' 254000 000034' 00830 JRST LPTINT ;IF LPT IS IN FLAG LIST, GO TO ERROR, E + 000036' 712700 000070 00840 CONSZ LPT,70 + 000037' 712740 000100 00850 CONSO LPT,LPTDON + 000040' 254000 000102' 00860 JRST LPTERI ;YES + 000041' 335000 000025* 00870 LPTIN1: SKIPGE LPTIOS ;IODISC=1? + 000042' 254000 000053' 00880 JRST LPTDSC ;YES + 000043' 712500 000000* 00890 BLKO LPT,LPTPTR ;PRINT + 000044' 334000 000000 00900 SKIPA ;BUFFER EMPTY + 000045' 254520 000000* 00910 JEN @LPTCHL ;DISMISS INTERRUPT AND RETURN + 000046' 202040 000000* 00920 MOVEM TAC,LPTSV1 ;SAVE TAC + 000047' 515040 400000 00930 HRLZI TAC,IODISC ;IODISC:=1 + 000050' 436040 000041* 00940 IORM TAC,LPTIOS + 000051' 200040 000046* 00950 LPTERX: MOVE TAC,LPTSV1 ;RESTORE TAC + 000052' 254520 000045* 00960 JEN @LPTCHL ;DISMISS INTERRUPT AND RETURN + + 000053' 264000 000000* 00980 LPTDSC: JSR LPTSAV ;SAVE ACCUMULATORS AND ESTABL + 000054' 201300 000000* 00990 MOVEI DEVDAT,LPTDAT ;DEVDAT:=LPTDAT + 000055' 260140 000000* 01000 PUSHJ PDP,IOSET ;PROG:=C(JBTADR18-35),ITEM:=C(DEVPTR) + 000056' 200000 000050* 01010 MOVE IOS,LPTIOS + 000057' 623000 000002 01020 TLZE IOS,IOBEG + 000060' 254000 000077' 01030 JRST LPTBG ;PUT OUT CR-LF + 000061' 260140 000000* 01040 PUSHJ PDP,ADVBFE ;ADVANCE BUFFER + 000062' 254000 000073' 01050 JRST LPTOFF ;NEXT BUFFER EMPTY + 000063' 602000 000040 01060 TRNE IOS,IOCON ;CONTINUOUS? (IOCON=0?) + 000064' 254000 000073' 01070 JRST LPTOFF ;NO + 000065' 621000 400000 01080 TLZ IOS,IODISC + 000066' 260140 000127' 01090 PUSHJ PDP,LPTSET ;SET LPTPTR + + 000067' 623000 000001 01110 LPTINX: TLZE IOS,IOW ;IN A WAIT? IOW:=0 + 000070' 260140 000000* 01120 PUSHJ PDP,SETIOD ;YES. IOWS:=1 + 000071' 202000 000056* 01130 LPTXIT: MOVEM IOS,LPTIOS ;C(LPTIOS):=C(IOS) + 000072' 254000 000000* 01140 JRST LPTRET ;RESTORE ACCUMULATORS AND DIS + + 000073' 620000 010000 01160 LPTOFF: TRZ IOS,IOACT + 000074' 712600 000000 01170 CONO LPT,0 + 000075' 513000 000034' 01180 HLLZS LPTINT ;TURN LPT OFF + 000076' 254000 000067' 01190 JRST LPTINX + + 000077' 712540 000126' 01210 LPTBG: DATAO LPT,LPTTOP ;SEND OUT CR-FF + 000100' 621000 400000 01220 TLZ IOS,IODISC ;WHEN IODISC=1 + 000101' 254000 000071' 01230 JRST LPTXIT + LPTSER - LINE PRINTER SERVICE ROUTINE PAGE 5 + 8-4-65 + + + + 01270 ;HERE ON EITHER OVERFLOW OR ERROR(OFFLINE) OR ERROR CHANNEL + 01280 ;NOT ASSIGNED. + + 000102' 202040 000051* 01300 LPTERI: MOVEM TAC,LPTSV1 ;SAVE TAC + 000103' 712740 001000 01310 CONSO LPT,LPTLOV ;LINE OVERFLOW? + 000104' 254000 000111' 01320 JRST LPTER1 ;NO + 000105' 210040 000137' 01330 MOVN TAC,[EXP 100001] ;YES, DECREMENT POINTER + 000106' 272040 000043* 01340 ADDM TAC,LPTPTR + 000107' 712540 000140' 01350 DATAO LPT,[EXP 15B6+12B13] ;PRINT CARRIAGE RETURN, LINE + 000110' 254000 000051' 01360 JRST LPTERX + + 000111' 712740 000070 01380 LPTER1: CONSO LPT,70 ;ERROR INTERRUPT ASSIGNED? + 000112' 254000 000117' 01390 JRST LPTER2 ;NO + 000113' 712600 000000* 01400 CONO LPT,LPTCLB ;YES, DEASSIGN IT,SET BUSY,CLEAR REST + 000114' 201040 000100 01410 MOVEI TAC,LPTDON ;ENABLE FOR DONE FLAG ONLY + 000115' 542040 000034' 01420 LPTERA: HRRM TAC,LPTINT + 000116' 254000 000051' 01430 JRST LPTERX + + 000117' 712640 000001 01450 LPTER2: CONI LPT,TAC + 000120' 405040 000300 01460 ANDI TAC,300 + 000121' 712601 000032* 01470 CONO LPT,LPTCHB(TAC) + 000122' 201040 001500 01480 MOVEI TAC,LPTDON+LPTERR+LPTLOV + 000123' 542040 000034' 01490 HRRM TAC,LPTINT + 000124' 200040 000102* 01500 MOVE TAC,LPTSV1 + 000125' 254000 000041' 01510 JRST LPTIN1 + 000126' 064300 000000 01520 LPTTOP: EXP 15B6+14B13 ;CARRIAGE RETURN, FORM FEED + LPTSER - LINE PRINTER SERVICE ROUTINE PAGE 6 + 8-4-65 + + + + 01560 ,SET UP PRINTER COUNTER AND POINTER + + 000127' 201060 000000* 01580 LPTSET: MOVEI TAC,@LPTADR ;LPTPTR:=-(WORD COUNT+1), BUFFER ADDRES + 000130' 210101 000001 01590 MOVN TAC1,1(TAC) + 000131' 504040 000002 01600 HRL TAC,TAC1 + 000132' 343040 000134' 01610 AOJLE TAC,.+2 ;C(LPTPTR0-17)<0? + 000133' 561040 000135' 01620 HRROI TAC,LPTNUL-1 + 000134' 202040 000106* 01630 MOVEM TAC,LPTPTR + 000135' 263140 000000 01640 POPJ PDP, ;RETURN + + 000136' 000000 000000 01660 LPTNUL: 0 + + 01680 END, + 000137' 000000 100001 + 000140' 064240 000000 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000141 + +8K CORE USED + LPTSER - LINE PRINTER SERVICE ROUTINE PAGE 7 + SYMBOL TABLE + + 000236 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADVBFE 000061' EXT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT + LPTSER - LINE PRINTER SERVICE ROUTINE PAGE 7-1 + SYMBOL TABLE + +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +ILLINP 000003' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSET 000055' EXT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +LPT 000124 SPD +LPTADR 000127' EXT +LPTADV 100000 +LPTBEG 000024' +LPTBG 000077' +LPTBG1 000030' +LPTBUF 000000 EXT +LPTCHB 000121' EXT +LPTCHL 000052' EXT +LPTCHN 000000 EXT +LPTCHR 000000 EXT + LPTSER - LINE PRINTER SERVICE ROUTINE PAGE 7-2 + SYMBOL TABLE + +LPTCLB 000113' EXT +LPTCLR 002000 +LPTCLS 000007' +LPTDAT 000054' EXT +LPTDON 000100 +LPTDSC 000053' +LPTDSP 000000' ENT +LPTER1 000111' +LPTER2 000117' +LPTERA 000115' +LPTERI 000102' +LPTERR 000400 +LPTERX 000051' +LPTIN1 000041' +LPTINI 000004' INT +LPTINT 000034' INT +LPTINX 000067' +LPTIOS 000071' EXT +LPTLOV 001000 +LPTMOD 000000 EXT +LPTNUL 000136' +LPTOFF 000073' +LPTOUT 000013' +LPTPTR 000134' EXT +LPTRET 000072' EXT +LPTSAV 000053' EXT +LPTSER 000000 EXT +LPTSET 000127' +LPTSV1 000124' EXT +LPTTOP 000126' +LPTXIT 000071' +MTW 010000 INT +OBUFB 100000 INT +OUT 000007' EXT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PROG 000007 INT +RUN 200000 INT +RUNABL 204000 INT +SETIOD 000070' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT +WAIT1 000010' EXT + MMM MMM TTTTTTTTTTTTTTT PPPPPPPPPPPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +MMM MMM TTTTTTTTTTTTTTT PPPPPPPPPPPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +MMM MMM TTTTTTTTTTTTTTT PPPPPPPPPPPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +MMMMMM MMMMMM TTT PPP PPP SSS EEE RRR RRR +MMMMMM MMMMMM TTT PPP PPP SSS EEE RRR RRR +MMMMMM MMMMMM TTT PPP PPP SSS EEE RRR RRR +MMM MMM MMM TTT PPP PPP SSS EEE RRR RRR +MMM MMM MMM TTT PPP PPP SSS EEE RRR RRR +MMM MMM MMM TTT PPP PPP SSS EEE RRR RRR +MMM MMM TTT PPPPPPPPPPPP SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +MMM MMM TTT PPPPPPPPPPPP SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +MMM MMM TTT PPPPPPPPPPPP SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +MMM MMM TTT PPP SSS EEE RRR RRR +MMM MMM TTT PPP SSS EEE RRR RRR +MMM MMM TTT PPP SSS EEE RRR RRR +MMM MMM TTT PPP SSS EEE RRR RRR +MMM MMM TTT PPP SSS EEE RRR RRR +MMM MMM TTT PPP SSS EEE RRR RRR +MMM MMM TTT PPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +MMM MMM TTT PPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +MMM MMM TTT PPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :MTPSER.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:22 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2344 +File will be deleted after printing + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 1 + L. HANTMAN 8-9-65 + + 00010 XLIST + 01930 LIST + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 7 + L. HANTMAN 8-9-65 + + + 00010 TITLE MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES + 00020 SUBTTL L. HANTMAN 8-9-65 + 000004 00030 T=ITEM + 00040 ; MAG TAPE SERVICE SUBROUTINES + + 000000' 260140 000000* 00060 MTAPE1: PUSHJ PDP,WAIT1 + 000001' 551000 776000 00070 HRRZI IOS,776000 + 000002' 413006 000002 00080 ANDCAB IOS,DEVIOS(DEVDAT) + 000003' 201214 000000 00090 MOVEI T,(UUO) + 000004' 260140 000007' 00100 PUSHJ PDP,MTAPE+1 + 000005' 254000 000000* 00110 JRST UXIT + + 000006' 260140 000000* 00130 MTAPE: PUSHJ PDP,WAIT1 + 000007' 621000 010000 00140 TLZ IOS,IODT + 000010' 660000 010000 00150 TRO IOS, IOACT ;SET ACTIVE + 000011' 260140 000063' 00160 PUSHJ PDP,MTCHK2 ;CHECK IF MAG TAPE CONTROL AV + 000012' 242200 000010 00170 LSH T,^D8 ;MOVE TO FUNCTION + 000013' 405200 007400 00180 ANDI T,7400 ;MODE BITS + 000014' 306200 004000 00190 CAIN T,4000 ;LOGICAL EOT? + 000015' 254000 000436' 00200 JRST MTLEOT + 000016' 302200 000400 00210 CAIE T,400 ;RWD? + 000017' 254000 000022' 00220 JRST .+3 + 000020' 722700 004000 00230 CONSZ 224,4000 ;AT LOAD POINT? + 000021' 254000 000520' 00240 JRST MTDMP4 + 000022' 201040 000001 00250 MOVEI TAC, TCF ;LOOK FOR TAPE CONTROL FREE 0 + 000023' 542040 000044' 00260 MTGO1: HRRM TAC, MTCONO + 000024' 542040 000211' 00270 HRRM TAC, MTCINT + 000025' 135040 000000* 00280 MTGO1A: LDB TAC,PUNIT ;UNIT + 000026' 137040 000537' 00290 DPB TAC,[POINT 3,T,31] ;UNIT + 000027' 135040 000540' 00300 LDB TAC, [POINT 3, IOS,28] ;DENSITY PARITY + 000030' 431040 000005 00310 XORI TAC, 5 ;ODD, 556 + 000031' 137040 000541' 00320 DPB TAC,[POINT 3,T,23] + 000032' 201044 000000* 00330 MOVEI TAC,MTCCHN(T) ;CHANNEL + + 000033' 722600 000000 00350 MTGO: CONO 224, 0 ;DISABLE ALL INTERRUPTS + 000034' 660040 000200 00360 TRO TAC, 200 ;INHIBIT RETURN TO POOL + 000035' 722201 000000 00370 CONO 220,(TAC) ;COMMAND + 000036' 402000 000534' 00380 SETZM MTEOFF# ;CLEAR EOF FLAG + 000037' 542300 000533' 00390 HRRM DEVDAT,MTDEV# ;COMMAND, DVDB + 000040' 506040 000533' 00400 HRLM TAC,MTDEV + 000041' 603000 010000 00410 TLNE IOS,IODT + 000042' 700600 002100 00420 CONO PI,2000+DCB + 000043' 201040 000225' 00430 MOVEI TAC,MTPDUN + 000044' 722600 000005 00440 MTCONO: CONO 224,TCF+ERF ;ENABLE FLAGS + 000045' 263140 000000 00450 POPJ PDP, + + 00470 ;READ + 000046' 621000 000020 00480 MTIN: TLZ IOS, IO ;READING + 000047' 260140 000056' 00490 PUSHJ PDP,MTCHEK ;IS SYSTEM AVAILABLE? + 000050' 460066 000007 00500 SETCM TAC,@DEVIAD(DEVDAT) ;-SIZE-1 + 000051' 541066 000007 00510 MTIN1: HRRI TAC,@DEVIAD(DEVDAT) ;BUFFER ADDRESS, PROG INCLUDE + 000052' 270040 000542' 00520 ADD TAC,[XWD 2,1] ;-SIZE+1,BUFFER+1 + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 1 + L. HANTMAN 8-9-65 + + 000053' 201200 002400 00530 MOVEI T,2400 ;READ + 000054' 200100 000543' 00540 MTIN2: MOVE TAC1,[BLKI DC,4000+DCN+MTDC*10] + 000055' 254000 000132' 00550 JRST MTINDC + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 2 + L. HANTMAN 8-9-65 + + + 00580 ;IS SYSTEM AVAILABLE + 000056' 660000 010000 00590 MTCHEK: TRO IOS, IOACT ;SET ACTIVE + 000057' 661000 010000 00600 TLO IOS, IODT ;SET FOR DATA TRANSFER + 000060' 202006 000002 00610 MOVEM IOS, DEVIOS(DEVDAT) + 000061' 352000 000000* 00620 MTCHK1: AOSE DCREQ + 000062' 260140 000000* 00630 PUSHJ PDP,DCWAIT + 000063' 621000 004002 00640 MTCHK2: TLZ IOS, IOSEOF+IOBEG ;CLEAR SPACE TO EOF + 000064' 202006 000002 00650 MOVEM IOS, DEVIOS(DEVDAT) ;STORE BITS + 000065' 352000 000000* 00660 AOSE MTREQ + 000066' 260140 000000* 00670 PUSHJ PDP,MTWAIT + 000067' 256000 000025' 00680 XCT MTGO1A ;UNIT + 000070' 241040 000004 00690 ROT TAC, 4 ;PUT IN UNIT POSITION + 000071' 722201 000200 00700 CONO 220, 200(TAC) ;HAS UNIT ONLY + 000072' 722600 000002 00710 CONO 224, SEL ;JAM UNIT INTO COMMAND BUFFER + 000073' 722700 000002 00720 CONSZ 224, SEL ;UNIT NOT READY? + 000074' 263140 000000 00730 POPJ PDP, 0 ;EXIT + 000075' 241040 777774 00740 ROT TAC, -4 ;UNIT IN TAC + 000076' 542301 000426' 00750 HRRM DEVDAT, MTSTAK(TAC) ;PUT IN STACK + 000077' 200100 000544' 00760 MOVE TAC1, [XWD MTCLOK,^D32] ;HALF SECOND + 000100' 137040 000545' 00770 DPB TAC, [POINT 3,TAC1,23] ;STORE UNIT NUMBER + 000101' 506101 000426' 00780 HRLM TAC1, MTSTAK(TAC) ;SAVE ACTUAL CLOCK REQUEST + 000102' 700600 000400 00790 CONO PI, 400 ;TURN OFF PI + 000103' 136100 000000* 00800 IDPB TAC1, CLOCK ;REQUEST CLOCK RETURN TO MTCL + 000104' 700600 000200 00810 CONO PI, 200 ;TURN PI ON + 000105' 371000 000065* 00820 SOSL MTREQ ;DECREMENT REQUEST COUNT, ANYONE LEFT W + 000106' 476000 000000* 00830 SETOM MTAVAL ;YES,SET MAG TAPE AVAL + 000107' 607000 010000 00840 TLNN IOS, IODT ;NON-DATA TRANSFER? + 000110' 254000 000113' 00850 JRST MTCHK3 ;YES + 000111' 371000 000061* 00860 SOSL DCREQ ;NO,DECREMENT REQUEST COUNT,ANYONE LEFT + 000112' 476000 000000* 00870 SETOM DCAVAL ;YES,SET DATA CONTROL AVAILAB + 000113' 260140 000000* 00880 MTCHK3: PUSHJ PDP, WSYNC ;REQUEST WAIT + 000114' 200006 000002 00890 MOVE IOS, DEVIOS(DEVDAT) ;LOAD STATUS + 000115' 607000 010000 00900 TLNN IOS, IODT ;DATA TRANFER? + 000116' 254000 000065' 00910 JRST MTCHK2+2 ;CHECK FOR MT AVAILABLE ONLY + 000117' 254000 000061' 00920 JRST MTCHK1 ;CHECK FOR MT AND DC AVAIALABL + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 3 + L. HANTMAN 8-9-65 + + + 00950 ;WRITE + 000120' 661000 000020 00960 MTOUT: TLO IOS, IO ;WRITING + 000121' 260140 000056' 00970 PUSHJ PDP,MTCHEK + 000122' 722700 000200 00980 CONSZ 224,200 ;IS FILE PROTECT RING IN? + 000123' 254000 000145' 00990 JRST MTOUTE ;NO, ERROR CANT WRITE. CROCK!! + 000124' 201066 000010 01000 MTOUT1: MOVEI TAC,@DEVOAD(DEVDAT) ;BUFFER ADDRESS, PROG INCLUDE + 000125' 210101 000001 01010 MOVN TAC1,1(TAC) ;-WD COUNT + 000126' 504040 000002 01020 HRL TAC,TAC1 ;-WD CMT,BUFFER + 000127' 347040 000274' 01030 AOJG TAC,MTNOTI ;BUFFER+1, TEST FOR ZERO WORD COUNT + 000130' 200040 000546' 01040 MTOUT2: MOVE TAC,[BLKO DC,3400+DCN+MTDC*10] + 000131' 201200 001000 01050 MOVEI T,1000 ;WRITE + 000132' 202040 000532' 01060 MTINDC: MOVEM TAC,MTDCCN# ;BLKO POINTER + 000133' 202040 000527' 01070 MOVEM TAC,DCWRD# + 000134' 552100 000530' 01080 HRRZM TAC1, MDCSAV# ;SAVE DC COMMAND + 000135' 541100 000527' 01090 HRRI TAC1,DCWRD + 000136' 202100 000042 01100 MOVEM TAC1,40+<2*DCN> ;BLK COMMAND + 000137' 200100 000547' 01110 MOVE TAC1,[JSR MTDCND] + 000140' 202100 000043 01120 MOVEM TAC1,41+<2*DCN> + 000141' 700600 001100 01130 CONO PI,1100 + 000142' 720220 000530' 01140 CONO DC, @MDCSAV ;DATA CONTROL COMMAND + 000143' 201040 000004 01150 MOVEI TAC, ERF + 000144' 254000 000023' 01160 JRST MTGO1 + + 000145' 660000 200000 01180 MTOUTE: TRO IOS,IODERR ;WRITE LOCK, DEVICE ERROR + 000146' 260140 000247' 01190 PUSHJ PDP,MTEND1 + 000147' 254000 000005* 01200 JRST UXIT + + 000150' 135040 000000* 01220 MTCLS: LDB TAC,PIOMOD ;MODE + 000151' 307040 000016 01230 CAIG TAC, 16 ;DUMP MODE + 000152' 254000 000157' 01240 JRST MTCLS1 ;CLOSE OUTPUT + 000153' 603000 000020 01250 TLNE IOS,IO ;INPUT? + 000154' 254000 000160' 01260 JRST MTCLS1+1 ;WRITE EOFS + 000155' 201200 000016 01270 MOVEI T,16 ;SPACE TO EOF + 000156' 254000 000006' 01280 JRST MTAPE ;GOES BACK TO UUO LEVEL + 000157' 260140 000000* 01290 MTCLS1: PUSHJ PDP,OUT + 000160' 201200 000003 01300 MOVEI T,3 ;WRITE IOF + 000161' 260140 000006' 01310 PUSHJ PDP, MTAPE + 000162' 201200 000003 01320 MOVEI T,3 ;WRITE EOF + 000163' 260140 000006' 01330 PUSHJ PDP, MTAPE + 000164' 201200 000007 01340 MOVEI T,7 ;BSP + 000165' 254000 000006' 01350 JRST MTAPE + 000166' 263140 000000 01360 MTDISP: POPJ PDP, ;RELEASE + 000167' 254000 000150' 01370 JRST MTCLS ;CLOSE + 000170' 254000 000120' 01380 JRST MTOUT ;WRITE + 000171' 254000 000046' 01390 JRST MTIN ;READ + 000172' 254000 000000* 01400 JRST CUXIT1 ;ENTER IN DIRECTORY + 000173' 254000 000172* 01410 JRST CUXIT1 ;LOOKUP IN DIRECTORY + 000174' 254000 000455' 01420 JRST MTDMPO ;DUMP OUT + 000175' 254000 000505' 01430 JRST MTDMPI ;DUMP IN + 000176' 254000 000147* 01440 JRST UXIT ;SETO + 000177' 254000 000176* 01450 JRST UXIT ;SETI + 000200' 254000 000177* 01460 JRST UXIT ;GETF + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 3-1 + L. HANTMAN 8-9-65 + + + 000201' 210040 000454' 01480 MTCINI: MOVN TAC, MTREDO ;REPEAT COUNTER + 000202' 572040 000535' 01490 HRREM TAC, MTERCN ;RESET ERROR CNTR + 000203' 722600 000000 01500 CONO 224,0 ;CLEAR ENABLES + 000204' 513000 000211' 01510 HLLZS MTCINT ;CLEAR CONSO + 000205' 263140 000000 01520 POPJ PDP, + + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 4 + L. HANTMAN 8-9-65 + + + + + 01580 ;BLK COUNTED OUT + + 000206' 000000 000000 01600 MTDCND: 0 + 000207' 700600 001100 01610 CONO PI,DCB+1000 ;SHUT OF DC CHANNEL + 000210' 254520 000206' 01620 JEN @MTDCND + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 5 + L. HANTMAN 8-9-65 + + + + 01660 ;FLAG FROM TAPE CONTROL. SET UP BY INSERT MACRO + 000211' 722740 000005 01670 MTCINT: CONSO 224,TCF+ERF + 000212' 254000 000212' 01680 JRST . + 000213' 264000 000000* 01690 JSR MTCSAV ;SAVE ACS + 000214' 550300 000533' 01700 HRRZ DEVDAT,MTDEV ;DVBD + 000215' 135340 000000* 01710 LDB PROG,PJOBN; JOB NUMBER + 000216' 550347 000000* 01720 HRRZ PROG, JBTADR(PROG) + 000217' 200006 000002 01730 MOVE IOS, DEVIOS(DEVDAT) + 000220' 722740 000001 01740 CONSO 224,TCF ;TAPE CONTROL FREE + 000221' 254000 000324' 01750 JRST MTEOR + 000222' 254000 000225' 01760 MTIDSP: JRST MTPDUN ;POINTS TO MTERR FOR ERROR + 000223' 254000 000356' 01770 JRST MTBSP ;AFTER BACKSPACE + 000224' 254000 000336' 01780 JRST MTERR ;IF ERROR FOUND + 000225' 607000 010000 01790 MTPDUN: TLNN IOS,IODT + 000226' 254000 000313' 01800 JRST MTNIO2 + 000227' 135040 000150* 01810 LDB TAC,PIOMOD + 000230' 301040 000016 01820 CAIL TAC,16 + 000231' 254000 000247' 01830 JRST MTEND1 ;DUMP + 000232' 603000 000020 01840 TLNE IOS,IO + 000233' 254000 000274' 01850 JRST MTNOTI ;WRITING + 000234' 332000 000534' 01860 SKIPE MTEOFF ;NOT EOF? + 000235' 254000 000322' 01870 JRST MTEOF + 000236' 201066 000007 01880 MTINDN: MOVEI TAC,@DEVIAD(DEVDAT) ;BUFFER ADDRESS + 000237' 210100 000532' 01890 MOVN TAC1,MTDCCN ;WD CNT-1 + 000240' 253100 000241' 01900 AOBJN TAC1, .+1 ;WD CNT + 000241' 513000 000002 01910 HLLZS TAC1 ;CLR RT HALF + 000242' 270100 000527' 01920 ADD TAC1,DCWRD ;ADD CURRENT COUNT=NO. OF WDS + 000243' 546101 000001 01930 HLRM TAC1,1(TAC) ;STORE AT WORD COUNT + 000244' 260140 000000* 01940 PUSHJ PDP,ADVBFF + 000245' 254000 000247' 01950 JRST .+2 ;NEXT BUFFER FULL + 000246' 254000 000276' 01960 JRST MTCON ;CONTINUE MODE + 000247' 720200 000000 01970 MTEND1: CONO DC, 0 ;TURN OFF DATA CONTROL + 000250' 371000 000111* 01980 SOSL DCREQ ;DECREMENT REQUEST COUNT, ANYONE LEFT? + 000251' 476000 000112* 01990 SETOM DCAVAL ;YES, SET FLAG FOR CLOCK + 000252' 371000 000105* 02000 MTNIO: SOSL MTREQ + 000253' 476000 000106* 02010 SETOM MTAVAL ;YES, SET FLAG FOR CLOCK + 000254' 722700 010000 02020 CONSZ 224,10000 ;END OF TAPE? + 000255' 660000 002000 02030 TRO IOS, IOTEND ;SET END OF TAPE INDICATION + 000256' 620000 004000 02040 TRZ IOS, IOBOT ;CLR LOAD POINT INDICATION + 000257' 722700 004000 02050 CONSZ 224, 4000 ;LOAD POINT? + 000260' 660000 004000 02060 TRO IOS, IOBOT ;SET LOAD POINT INDICATION + 000261' 722700 020000 02070 CONSZ 224, 20000 ;TAPE REWINDING? + 000262' 660000 004000 02080 TRO IOS, IOBOT ;SET LOAD POINT INDICATION + 000263' 623000 000001 02090 TLZE IOS, IOW ;CLEAR WAIT + 000264' 260140 000000* 02100 PUSHJ PDP, SETIOD ;REQUEST WAIT SATISFIED + 000265' 620000 010000 02110 TRZ IOS, IOACT ;CLEAR ACTIVE + 000266' 202006 000002 02120 MOVEM IOS, DEVIOS(DEVDAT) ;RESTORE BITS + 000267' 722600 000000 02130 CONO 224,0 ;CLEAR MAG TAPE ENABLES + 000270' 513000 000211' 02140 HLLZS MTCINT ;CLEAR CONSO + 000271' 210040 000454' 02150 MOVN TAC, MTREDO ;REPEAT COUNTER + 000272' 572040 000535' 02160 HRREM TAC, MTERCN# + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 5-1 + L. HANTMAN 8-9-65 + + 000273' 263140 000000 02170 POPJ PDP, ;DISMISS INTERRUPT OR RETURN TO CALLER + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 6 + L. HANTMAN 8-9-65 + + + 000274' 260140 000000* 02200 MTNOTI: PUSHJ PDP,ADVBFE ;WRITING + 000275' 254000 000247' 02210 JRST MTEND1 + 000276' 602000 000040 02220 MTCON: TRNE IOS,IOCON ;CONTINUOUS? + 000277' 254000 000247' 02230 JRST MTEND1 ;STOP TAPE + 000300' 722700 010000 02240 CONSZ 224,10000 ;END OF TAPE? + 000301' 254000 000247' 02250 JRST MTEND1 ;STOP TAPE + 000302' 720200 000000 02260 CONO DC,0 ;CLEAR DATA CONTROL + 000303' 623000 000001 02270 TLZE IOS,IOW + 000304' 260140 000264* 02280 PUSHJ PDP,SETIOD + 000305' 202006 000002 02290 MOVEM IOS,DEVIOS(DEVDAT) + 000306' 210040 000454' 02300 MOVN TAC,MTREDO + 000307' 572040 000535' 02310 HRREM TAC,MTERCN + 000310' 607000 000020 02320 TLNN IOS,IO ;INPUT OR OUTPUT? + 000311' 254000 000051' 02330 JRST MTIN1 ;CALL INPUT SUBROUTINE + 000312' 254000 000124' 02340 JRST MTOUT1 ;CALL OUTPUT SUBROUTINE + 000313' 554040 000533' 02350 MTNIO2: HLRZ TAC,MTDEV ;COMMAND + 000314' 405040 007400 02360 ANDI TAC,7400 + 000315' 302040 003000 02370 CAIE TAC, 3000 ;SPACE ONE RECORD + 000316' 254000 000252' 02380 JRST MTNIO ;EXIT + 000317' 722700 000400 02390 CONSZ 224, 400 ;EOF? + 000320' 661000 004000 02400 TLO IOS, IOSEOF ;SET EOF DETECTED + 000321' 254000 000252' 02410 JRST MTNIO ;EXIT + 000322' 661000 000040 02420 MTEOF: TLO IOS, IOEND + 000323' 254000 000247' 02430 JRST MTEND1 + 000324' 722700 000030 02440 MTEOR: CONSZ 224,LPE+CPE ;IF END OF RECORD CHECK PARIT + 000325' 370000 000222' 02450 SOS MTIDSP ;IF ERROR CAUSE INTERRUPT TO + 02460 ;ERROR ROUTIE VIA TCF + 000326' 722700 000400 02470 CONSZ 224, 400 ;EOF? + 000327' 476000 000534' 02480 SETOM MTEOFF ;SET EOF FLAG + 000330' 722600 000001 02490 MTIGN: CONO 224, TCF ;IF ERF, CAUSE INTERRUPT TO D + 02500 ;PATCH TABLE, DISABLE ERF FLA + 000331' 202040 000206' 02510 MOVEM TAC, MTDCND ;SAVE TAC + 000332' 201040 000001 02520 MOVEI TAC, TCF ;LOOK FOR TCF ONLY + 000333' 542040 000211' 02530 HRRM TAC, MTCINT ;SET CONSO + 000334' 200040 000206' 02540 MOVE TAC,MTDCND ;RESTORE TAC + 000335' 254000 000000* 02550 JRST MTCRET ;DISMISS AND RETURN VIA TCF + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 7 + L. HANTMAN 8-9-65 + + + 000336' 554040 000533' 02580 MTERR: HLRZ TAC,MTDEV ;COMMAND + 000337' 405040 007400 02590 ANDI TAC,7400 + 000340' 306040 002400 02600 CAIN TAC,2400 ;READ? + 000341' 254000 000344' 02610 JRST .+3 + 000342' 306040 001000 02620 CAIN TAC,1000 ;WRITE + 000343' 254000 000402' 02630 JRST MTIGN2 ;IGNORE IF NOT RD OR WRITE + 000344' 606000 000100 02640 TRNN IOS, IONRCK ;RE-DO? + 000345' 351000 000535' 02650 AOSL MTERCN ;THIRD ERROR? + 000346' 254000 000354' 02660 JRST MTERR2 ;TRIPLE ERROR + 000347' 554040 000533' 02670 HLRZ TAC,MTDEV ;COMMAND + 000350' 405040 770377 02680 ANDI TAC,770377 + 000351' 722201 003400 02690 CONO 220,3400(TAC) ;BSP + 000352' 370000 000222' 02700 SOS MTIDSP + 000353' 254000 000330' 02710 JRST MTIGN + + 000354' 660000 200000 02730 MTERR2: TRO IOS, IODERR ;DEVICE ERROR + 000355' 254000 000225' 02740 JRST MTPDUN + + 000356' 200040 000532' 02760 MTBSP: MOVE TAC,MTDCCN ;POINTER + 000357' 202040 000527' 02770 MOVEM TAC,DCWRD ;RESET POINTER WORD + 000360' 720240 000001 02780 CONI DC,TAC ;SAVE IN/OUT, PACK MD. DEV NU + 02790 ;PRIORITY + 000361' 405040 000777 02800 ANDI TAC,777 + 000362' 271040 003000 02810 ADDI TAC,3000 ;MAKE WRITE + 000363' 606040 000400 02820 TRNN TAC,400 ;WAS IT WRITING? + 000364' 271040 001000 02830 ADDI TAC,1000 ;MAKE READ + 000365' 720201 000000 02840 CONO DC,(TAC) ;REISSUE CONO + 000366' 554040 000533' 02850 HLRZ TAC,MTDEV ;COMMAND + 000367' 722740 040000 02860 CONSO 224,XNC ;WAIT FOR XNC + 000370' 254000 000367' 02870 JRST .-1 ;SHOULD ADD A COUNT(RUNAWAY TAPE TURNED + 000371' 722201 000000 02880 CONO 220,(TAC) ;REISSUE RD OR WRITE + 000372' 402000 000534' 02890 SETZM MTEOFF ;CLR EOF FLAG + 000373' 700600 002100 02900 CONO PI,2000+DCB ;TURN ON CHANNEL + 000374' 201040 000225' 02910 MOVEI TAC,MTPDUN ;RESET SWITCH + 000375' 542040 000222' 02920 HRRM TAC,MTIDSP + 000376' 201040 000004 02930 MOVEI TAC, ERF + 000377' 542040 000211' 02940 HRRM TAC, MTCINT + 000400' 722600 000004 02950 CONO 224, ERF + 000401' 254000 000335* 02960 JRST MTCRET ;ENABLE PROPER FLAGS + 000402' 350000 000222' 02970 MTIGN2: AOS MTIDSP ;RESET DISPATCH SWITCH + 000403' 254000 000330' 02980 JRST MTIGN + + 03000 ;NEED TO TRY WRITING LONG RECORD GAP ON OUTPUT(ONLY) AND TRY + 03010 ;ONCE MORE AT NEW SPOT ON TAPE IF TRIPLE ERROR + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 8 + L. HANTMAN 8-9-65 + + + + 040000 03050 XNC=40000 ;TRANSFER NEW COMMAND + 000002 03060 MTDC=2 ;MAG TAPE DATA CONTROL DEVICE NO. + 000001 03070 TCF=1 ;TAPE CONTROL FREE + 000004 03080 ERF=4 ;END OF RECORD FLAG + 000020 03090 LPE=20 ;LONG. PARITY ERROR + 000010 03100 CPE=10 ;CHAR. PARITY ERROR + 000100 03110 DCB=100 ;DATA CHANNEL NUMBER + 000001 03120 DCN=1 ;DATA CHANNEL NUMBER + 000002 03130 SEL=2 ;UNIT TO COMMAND BUFFER + 004000 03140 IOSEOF=4000 ;SPACING ONE RECORD FORWARD FOUND EOF + 002000 03150 IOTEND=2000 ;EOT INDICATION + 000100 03160 IONRCK=100 ;DO NOT RE-TRY ON ERRORS + 004000 03170 IOBOT=4000 ;TAPE AT LOAD POINT + 010000 03180 IODT=10000 ;A 1 FOR A DATA TRANFER TYPE COMMAND + 03190 EXTERNAL UXIT, ADVBFF, ADVBFE, DCREQ, DCWAIT, MTCSAV + 03200 EXTERNAL MTCRET, DCAVAL, MTAVAL, MTCCHN, MTCCHL, MTREQ + 03210 EXTERNAL MTWAIT,OUT,SETIOD,CLOCK,CUXIT1 + 03220 EXTERNAL WSYNC,USRREL,WAIT1,ADRERR,PUNIT,PIOMOD,PJOBN + 03230 EXTERNAL JBTADR + 03240 ENTRY MTDISP + 03250 INTERNAL MTCINT,MTAPE1,MTCINI + 03260 ;CLOCK INTERRUPT, UNIT IN TAC + 000404' 550301 000426' 03270 MTCLOK: HRRZ DEVDAT, MTSTAK(TAC) ;DVDB + 000405' 241040 000004 03280 ROT TAC, 4 ;PUT UNIT IN SEL BITS + 000406' 722201 000200 03290 CONO 220, 200(TAC) ;UNIT ONLY + 000407' 722600 000002 03300 CONO 224, SEL ;SEL UNIT + 000410' 722700 000002 03310 CONSZ 224, SEL ;UNIT NOT READY? + 000411' 254000 000421' 03320 JRST MTCLK2 ;UNIT READY + 000412' 241040 777774 03330 ROT TAC, -4 ;FOR INDEXING PURPOSES + 000413' 544101 000426' 03340 HLR TAC1, MTSTAK(TAC) ;CLOCK REQUEST + 000414' 505100 000404' 03350 HRLI TAC1, MTCLOK ;GET CLOCK REQUEST + 000415' 700600 000400 03360 CONO PI, 400 ;TURN OFF PI + 000416' 136100 000103* 03370 IDPB TAC1, CLOCK ;STORE CLOCK REQUESTED + 000417' 700600 000200 03380 CONO PI, 200 ;TURN ON PI + 000420' 263140 000000 03390 POPJ PDP, 0 ;EXIT + 000421' 200006 000002 03400 MTCLK2: MOVE IOS, DEVIOS(DEVDAT) + 000422' 623000 000001 03410 TLZE IOS,IOW + 000423' 260140 000304* 03420 PUSHJ PDP, SETIOD + 000424' 202006 000002 03430 MOVEM IOS, DEVIOS(DEVDAT) + 000425' 263140 000000 03440 POPJ PDP, 0 + 000426' 03450 MTSTAK: BLOCK ^D8 + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 9 + L. HANTMAN 8-9-65 + + + + 03490 ;LOGICAL END OF TAPE LOOP + 000436' 722700 004000 03500 MTLEOT: CONSZ 224, 4000 ;TAPE NOT AT LOAD POINT? + 000437' 254000 000442' 03510 JRST MTEOT2 ;AVOID BACKSPACE IFAT LOAD P + 000440' 201200 003400 03520 MOVEI T,3400 ;BACKSPACE + 000441' 260140 000022' 03530 PUSHJ PDP, MTGO1-1 + 000442' 201200 000016 03540 MTEOT2: MOVEI T,16 ;SPACE ONE FILE + 000443' 260140 000006' 03550 PUSHJ PDP, MTAPE + 000444' 201200 000006 03560 MOVEI T,6 ;SPACE ONE RECORD + 000445' 260140 000006' 03570 PUSHJ PDP, MTAPE + 000446' 260140 000006* 03580 PUSHJ PDP, WAIT1 ;WAIT UNTIL SPACING IS COMPLE + 000447' 200006 000002 03590 MOVE IOS, DEVIOS(DEVDAT) + 000450' 607000 004000 03600 TLNN IOS, IOSEOF ;WAS EOF DETECTED? + 000451' 254000 000442' 03610 JRST MTEOT2 ;RESUME SPACING + 000452' 201200 000007 03620 MOVEI T,7 ;BACKSPACE, LOGICAL EOF FOUND + 000453' 254000 000006' 03630 JRST MTAPE ;RETURN BACK TO MAIN PROGRAM + 000454' 000000 000012 03640 MTREDO: 12 ;NUMBER OF TIMES TO RE-EXECUTE + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 10 + L. HANTMAN 8-9-65 + + + + 03680 ;DEVICE DEPENDENT DUMP MODES. MODE 16. + 03690 ;OUTPUT + 000455' 661000 000020 03700 MTDMPO: TLO IOS, IO ;WRITING + 000456' 550200 000014 03710 HRRZ T,UUO + 000457' 260140 000056' 03720 PUSHJ PDP, MTCHEK ;IS SYSTEM AVAILABLE? + 000460' 200120 000130' 03730 MOVE TAC1, @MTOUT2 ;BLK0 AND DATA CONTROL COMMAN + 000461' 200040 000004 03740 MOVE TAC,T ;COMMAND LIST POINTER + 000462' 201200 001000 03750 MOVEI T,1000 ;WRITING COMMAND + 000463' 505040 000007 03760 MTDMP1: HRLI TAC, PROG ;ACTUAL ADDRESS OF COMMAND LI + 000464' 202040 000531' 03770 MOVEM TAC, MTCMDP# ;COMMAND POINTER + 000465' 336060 000001 03780 SKIPN TAC,@TAC ;COMMAND WORD + 000466' 254000 000516' 03790 JRST MTDMP3 ;NOTHING TO DO + 000467' 325040 000463' 03800 JUMPGE TAC, MTDMP1 ;CHANGE COMMAND SEQUENCE + 000470' 576040 000536' 03810 HLREM TAC, SVCNTR# ;SAVE COUNTER + 000471' 553000 000001 03820 HRRZS TAC ;GET ADDRESS ALONE + 000472' 274040 000536' 03830 SUB TAC, SVCNTR ;GET LAST ADDRESS + 000473' 313040 000000* 03840 CAMLE TAC, USRREL ;LESS THAN END? + 000474' 254000 000514' 03850 JRST MTDMP2 ;OUT OF BOUNDS + 000475' 200060 000531' 03860 MOVE TAC, @MTCMDP ;PICK UP POINTER AGAIN + 000476' 270040 000007 03870 ADD TAC, PROG ;GET ACTUAL ADDRESS + 000477' 260140 000132' 03880 PUSHJ PDP, MTINDC ;MOVE TAPE + 000500' 260140 000446* 03890 PUSHJ PDP,WAIT1 + 000501' 350200 000531' 03900 AOS T,MTCMDP ;UPDATE COMMAND POINTER + 000502' 607000 000020 03910 TLNN IOS, IO ;WRITING? + 000503' 254000 000507' 03920 JRST MTDMPI+2 ;READING + 000504' 254000 000457' 03930 JRST MTDMPO+2 ;WRITING + 03940 ;INPUT + 000505' 621000 000020 03950 MTDMPI: TLZ IOS, IO ;READING + 000506' 550200 000014 03960 HRRZ T,UUO + 000507' 260140 000056' 03970 PUSHJ PDP, MTCHEK ;IS SYSTEM AVAILABLE + 000510' 200120 000054' 03980 MOVE TAC1,@MTIN2 ;BLKI AND DATA CONTROL COMMAN + 000511' 200040 000004 03990 MOVE TAC,T ;COMMAND LIST POINTER + 000512' 201200 002400 04000 MOVEI T,2400 ;READ COMMAND + 000513' 254000 000463' 04010 JRST MTDMP1 ;DUMP + 04020 ;ADDRESS ERROR + + 000514' 260140 000516' 04040 MTDMP2: PUSHJ PDP,MTDMP3 + 000515' 254000 000000* 04050 JRST ADRERR + 04060 ;CLEAR ALL USE BITS. NOTHING IN COMMAND LIST + + 000516' 371000 000250* 04080 MTDMP3: SOSL DCREQ + 000517' 476000 000251* 04090 SETOM DCAVAL + 000520' 371000 000252* 04100 MTDMP4: SOSL MTREQ + 000521' 476000 000253* 04110 SETOM MTAVAL + 000522' 620000 010000 04120 TRZ IOS,IOACT + 000523' 623000 000001 04130 TLZE IOS,IOW + 000524' 260140 000423* 04140 PUSHJ PDP,SETIOD + 000525' 202006 000002 04150 MOVEM IOS,DEVIOS(DEVDAT) + 000526' 263140 000000 04160 POPJ PDP, + + 04180 END, + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 10-1 + L. HANTMAN 8-9-65 + + 000537' 040300 000004 + 000540' 070300 000000 + 000541' 140300 000004 + 000542' 000002 000001 + 000543' 720000 004021 + 000544' 000404' 000040 + 000545' 140300 000002 + 000546' 720100 003421 + 000547' 264000 000206' + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000550 + +8K CORE USED + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 11 + SYMBOL TABLE + + 000322 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADRERR 000515' EXT +ADVBFE 000274' EXT +ADVBFF 000244' EXT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOCK 000416' EXT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CPE 000010 +CUXIT1 000173' EXT +D 000017 INT +DAT 000005 INT +DC 000200 SPD +DCAVAL 000517' EXT +DCB 000100 +DCL 000001 INT +DCN 000001 +DCREQ 000516' EXT +DCW 020000 INT +DCWAIT 000062' EXT +DCWRD 000527' +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 11-1 + SYMBOL TABLE + +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERF 000004 +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOBOT 004000 +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODT 010000 +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSEOF 004000 +IOSTRT 000010 INT +IOTEND 002000 +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000216' EXT +JBUF 000005 INT + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 11-2 + SYMBOL TABLE + +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +LPE 000020 +MDCSAV 000530' +MTAPE 000006' +MTAPE1 000000' INT +MTAVAL 000521' EXT +MTBSP 000356' +MTCCHL 000000 EXT +MTCCHN 000032' EXT +MTCHEK 000056' +MTCHK1 000061' +MTCHK2 000063' +MTCHK3 000113' +MTCINI 000201' INT +MTCINT 000211' INT +MTCLK2 000421' +MTCLOK 000404' +MTCLS 000150' +MTCLS1 000157' +MTCMDP 000531' +MTCON 000276' +MTCONO 000044' +MTCRET 000401' EXT +MTCSAV 000213' EXT +MTDC 000002 +MTDCCN 000532' +MTDCND 000206' +MTDEV 000533' +MTDISP 000166' ENT +MTDMP1 000463' +MTDMP2 000514' +MTDMP3 000516' +MTDMP4 000520' +MTDMPI 000505' +MTDMPO 000455' +MTEND1 000247' +MTEOF 000322' +MTEOFF 000534' +MTEOR 000324' +MTEOT2 000442' +MTERCN 000535' +MTERR 000336' +MTERR2 000354' +MTGO 000033' +MTGO1 000023' +MTGO1A 000025' +MTIDSP 000222' +MTIGN 000330' +MTIGN2 000402' + MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES PAGE 11-3 + SYMBOL TABLE + +MTIN 000046' +MTIN1 000051' +MTIN2 000054' +MTINDC 000132' +MTINDN 000236' +MTLEOT 000436' +MTNIO 000252' +MTNIO2 000313' +MTNOTI 000274' +MTOUT 000120' +MTOUT1 000124' +MTOUT2 000130' +MTOUTE 000145' +MTPDUN 000225' +MTREDO 000454' +MTREQ 000520' EXT +MTSTAK 000426' +MTW 010000 INT +MTWAIT 000066' EXT +OBUFB 100000 INT +OUT 000157' EXT +OUTPB 004000 INT +PDP 000003 INT +PI 000004 SPD +PICHN 000100 INT +PIOMOD 000227' EXT +PJOBN 000215' EXT +PROG 000007 INT +PUNIT 000025' EXT +RUN 200000 INT +RUNABL 204000 INT +SEL 000002 +SETIOD 000524' EXT +SVCNTR 000536' +T 000004 +TAC 000001 INT +TAC1 000002 INT +TCF 000001 +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +USRREL 000473' EXT +UUO 000014 INT +UXIT 000200' EXT +WAIT1 000500' EXT +WSYNC 000113' EXT +XNC 040000 + OOOOOOOOO NNN NNN CCCCCCCCCCCC EEEEEEEEEEEEEEE + OOOOOOOOO NNN NNN CCCCCCCCCCCC EEEEEEEEEEEEEEE + OOOOOOOOO NNN NNN CCCCCCCCCCCC EEEEEEEEEEEEEEE +OOO OOO NNN NNN CCC EEE +OOO OOO NNN NNN CCC EEE +OOO OOO NNN NNN CCC EEE +OOO OOO NNNNNN NNN CCC EEE +OOO OOO NNNNNN NNN CCC EEE +OOO OOO NNNNNN NNN CCC EEE +OOO OOO NNN NNN NNN CCC EEEEEEEEEEEE +OOO OOO NNN NNN NNN CCC EEEEEEEEEEEE +OOO OOO NNN NNN NNN CCC EEEEEEEEEEEE +OOO OOO NNN NNNNNN CCC EEE +OOO OOO NNN NNNNNN CCC EEE +OOO OOO NNN NNNNNN CCC EEE +OOO OOO NNN NNN CCC EEE +OOO OOO NNN NNN CCC EEE +OOO OOO NNN NNN CCC EEE + OOOOOOOOO NNN NNN CCCCCCCCCCCC EEEEEEEEEEEEEEE + OOOOOOOOO NNN NNN CCCCCCCCCCCC EEEEEEEEEEEEEEE + OOOOOOOOO NNN NNN CCCCCCCCCCCC EEEEEEEEEEEEEEE + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :ONCE .LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:23 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2325 +File will be deleted after printing + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 1 + THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + 00010 XLIST + 01930 LIST + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 7 + THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + 00010 TITLE ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE + 00020 SUBTTL THIS IS ONLY CODE PLACED AT THE END OF IOINIT + 00030 ;WHICH SHOULD BE THE LAST LOADED PROGRAM BEFORE SYSMAK AND DDT + 00040 ;THUS IF IT OVERFLOWS INTO THE USER AREA NO HARM IS DONE + 00050 ;INITIALIZE PRIORITY CHANNELS AND SETUP INTERRUPT SERVICE ROUTINE CHA + + 00070 XP SYSFIN,.-1 ;LAST LOC. IN SYSTEM + 010000 00080 NXM=10000 ;NON EX-MEM + + 00100 INTERNAL PATCH + + 000000' 00120 PATCH: BLOCK 100 ;PATCH SPACE + 00130 ;C(SYSSIZE) SHOULD BE UPDATED AS PATCHES ARE MADE + + 000001 00150 T=TAC ;SOME ACS + 000002 00160 C=TAC1 + 000005 00170 INT=DAT ;INTERRUPT SERVICE ENTRY POINT(USUALLY A CONSO INSTR.) + 000006 00180 CHL=DEVDAT ;THE PLACE WHERE PC IS STORED FOR THAT CHANNEL + + 00200 ;LINK TO SERVICE ROUTINES + + 00220 INTERNAL LINKSR + 00230 EXTERNAL NDEVM1 ;=NDOV-1 (DEFINED IN IOINI1) + 00240 EXTERNAL DEVINT,JOBSYM + + 000100' 000000 000000 00260 LINKSR: 0 ;CALLED WITH JSR FROM SYSINI + 00270 ;CHAIN INTERUPT SERVICE ROUTINES TOGETH + 000101' 515240 254000 00280 HRLZI INT, 254000 ;FORM JRST INSTR. + 000102' 201100 000000* 00290 MOVEI C, NDEVM1 ;NO. OV DEV. SERV. ROUTINES TO CHAIN + 000103' 554302 000000* 00300 DEV1: HLRZ CHL, DEVINT(C) ;LOC. WHERE PC IS STORED + 000104' 540242 000103* 00310 HRR INT, DEVINT(C) ;INTERRUPT SERVICE ROUTINE ENTRY POINT + 000105' 200046 000001 00320 MOVE T, 1(CHL) ;INSERT THIS ROUTINE AT FRONT OF CHAIN + 000106' 202045 000001 00330 MOVEM T, 1(INT) + 000107' 202246 000001 00340 MOVEM INT, 1(CHL) + 000110' 365100 000103' 00350 SOJGE C, DEV1 + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 2 + THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + 00390 ;MOVE SYMBOL TABLE UP IN MEMORY + 00400 ;EXEC MUST BE LOADED IN 15K OR LESS IF GOING INTO 16K MACHINE + + 000111' 402000 000005 00420 SETZM DAT ;FIND FIRST NON EX MEM + 000112' 700200 010000 00430 CONO APR,NXM ;CLEAR NON-EX MEM FLAG + 000113' 271240 002000 00440 ADDI DAT,2000 ;TRY NEXT 1K BLOCK + 000114' 200105 000000 00450 MOVE TAC1,(DAT) ;REFERENCE THIS LOCATION + 000115' 700340 010000 00460 CONSO APR,NXM ;NON-EXISTENT? + 000116' 254000 000113' 00470 JRST .-3 ;NO + 000117' 275240 000001 00480 SUBI DAT,1 ;YES, HIGHEST LEGAL LOC + 000120' 202240 000037 00490 MOVEM DAT,DDTMEM ;FOR DDT + 000121' 275240 000177 00500 SUBI DAT,200-1 ;MAKE ROOM FOR DECDUMP + 000122' 574100 000000* 00510 HLRE TAC1,JOBSYM ;-LENGTH OF S. T. + 000123' 322100 000143' 00520 JUMPE TAC1,JRSTI1 ;0 IF NON S. T. TO MOVE UP + 000124' 213000 000002 00530 MOVNS TAC1 ;+LENGTH + 000125' 550040 000122* 00540 HRRZ TAC,JOBSYM ;FIRST ADDRESS + 000126' 271042 000000 00550 ADDI TAC,(TAC1) + 000127' 504040 000002 00560 HRL TAC,TAC1 ;XWD LENGTH,LENGTH+FIRST ADDRESS + 000130' 275241 000001 00570 SUBI DAT,1(TAC) ;NEW LAST+1-OLD LAST+1 + 000131' 542240 000140' 00580 HRRM DAT,STO1 ;DIST. TO MOVE + 000132' 200100 000125* 00590 MOVE TAC1,JOBSYM ;-N,FIRST ADD. + 000133' 271045 000001 00600 ADDI TAC,1(DAT) ;FORM NEW S.T. POINTER + 000134' 202100 000132* 00610 MOVEM TAC1,JOBSYM + 000135' 201100 000134* 00620 MOVEI TAC1,JOBSYM + 000136' 202100 000036 00630 MOVEM TAC1,DDTSYM + 000137' 200101 777777 00640 MOVE TAC1,-1(TAC) + 000140' 202101 000140' 00650 STO1: MOVEM TAC1,.(TAC) + 000141' 274040 000551' 00660 SUB TAC,[XWD 1,1] + 000142' 325040 000137' 00670 JUMPGE TAC,.-3 + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 3 + THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + 00710 ;SETUP LOCATIONS 40 THRU 57 + + 000143' 200040 000552' 00730 JRSTI1: MOVE TAC,[XWD LOC40,40] + 000144' 251040 000057 00740 BLT TAC,57 + 000145' 200040 000147' 00750 MOVE TAC,JRSTI + 000146' 202040 000101' 00760 MOVEM TAC,LINKSR+1 ;DO ONCE ONLY + 000147' 254020 000100' 00770 JRSTI: JRST @LINKSR + + 00790 EXTERN UUO0,ERROR + 00800 EXTERN CH1,CH2,CH3,CH4,CH5,CH6,CH7 + + 000150' 000000 000000 00820 LOC40: 0 ;UUO PC + 000151' 264000 000000* 00830 JSR UUO0 ;TO UUO HANDLER + 000152' 264000 000000* 00840 JSR CH1 + 000153' 265240 000000* 00850 JSP DAT,ERROR + 000154' 264000 000000* 00860 JSR CH2 + 000155' 265240 000153* 00870 JSP DAT,ERROR + 000156' 264000 000000* 00880 JSR CH3 + 000157' 265240 000155* 00890 JSP DAT,ERROR + 000160' 264000 000000* 00900 JSR CH4 + 000161' 265240 000157* 00910 JSP DAT,ERROR + 000162' 264000 000000* 00920 JSR CH5 + 000163' 265240 000161* 00930 JSP DAT,ERROR + 000164' 264000 000000* 00940 JSR CH6 + 000165' 265240 000163* 00950 JSP DAT,ERROR + 000166' 264000 000000* 00960 JSR CH7 + 000167' 265240 000165* 00970 JSP DAT,ERROR + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 4 + THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + + 01020 ;ONCE ONLY CODE - OPERATOR SETUP DIALOGUE + + 01040 INTERNAL ONCE + 01050 EXTERNAL CONMES,RADX10,CRLF,DECIN,DECIN1 + 01060 EXTERNAL THSDAT,MAKEND,JOBFF + 01070 EXTERNAL ERNAM,OCTPNT,SYSSIZ,CONFIG,SYSNUM,SYSDAT + + 000170' 000000 000000 01090 ONCE: 0 + 000171' 201040 777777' 01100 MOVEI TAC,SYSFIN ;SET SIZE OF MONITOR + 000172' 202040 000000* 01110 MOVEM TAC,SYSSIZ + 000173' 200240 000443' 01120 MOVE DAT,LINEP ;SETUP LINE BYTE POINTER + 000174' 200140 000553' 01130 MOVE PDP,[XWD ONCEPN,ONCEPD] + 000175' 260140 000000* 01140 PUSHJ PDP,CRLF + 000176' 201040 000000* 01150 MOVEI TAC,CONFIG + 000177' 260140 000000* 01160 PUSHJ PDP,CONMES + 000200' 201040 000474' 01170 MOVEI TAC,TSEXEC + 000201' 260140 000177* 01180 PUSHJ PDP,CONMES + 000202' 554040 000000* 01190 HLRZ TAC,SYSNUM + 000203' 260140 000000* 01200 PUSHJ PDP,RADX10 + 000204' 201040 000554' 01210 MOVEI TAC,[ASCIZ /./] + 000205' 260140 000201* 01220 PUSHJ PDP,CONMES + 000206' 550040 000202* 01230 HRRZ TAC,SYSNUM + 000207' 260140 000203* 01240 PUSHJ PDP,RADX10 + 000210' 201040 000555' 01250 MOVEI TAC,[ASCIZ / /] + 000211' 260140 000205* 01260 PUSHJ PDP,CONMES + 000212' 201040 000000* 01270 MOVEI TAC,SYSDAT + 000213' 260140 000211* 01280 PUSHJ PDP,CONMES + 000214' 260140 000175* 01290 PUSHJ PDP,CRLF + 000215' 260140 000421' 01300 PUSHJ PDP,OPOUT + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 5 + THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + 01340 ;ASK FOR TODAYS DATE AND CONVERT + 01350 ;DATE STORED AS ((Y-64)*12.+M-1)*31.+D-1 + + 000216' 402000 000000* 01370 DATLOP: SETZM THSDAT + 000217' 200240 000443' 01380 MOVE DAT,LINEP + 000220' 201040 000477' 01390 MOVEI TAC,TODATE + 000221' 260140 000213* 01400 PUSHJ PDP,CONMES + 000222' 260140 000421' 01410 PUSHJ PDP,OPOUT + 000223' 260140 000376' 01420 PUSHJ PDP,GETLIN + 000224' 254000 000216' 01430 JRST DATLOP ;JUST CR + 000225' 260140 000000* 01440 PUSHJ PDP,DECIN1 ;MONTH + 000226' 254000 000216' 01450 JRST DATLOP ;ERROR + 000227' 332000 000002 01460 SKIPE TAC1 + 000230' 303100 000014 01470 CAILE TAC1,^D12 + 000231' 254000 000216' 01480 JRST DATLOP + 000232' 275100 000001 01490 SUBI TAC1,1 + 000233' 221100 000037 01500 IMULI TAC1,^D31 + 000234' 272100 000216* 01510 ADDM TAC1,THSDAT + 000235' 260140 000225* 01520 PUSHJ PDP,DECIN1 ;DAY + 000236' 254000 000216' 01530 JRST DATLOP + 000237' 332000 000002 01540 SKIPE TAC1 + 000240' 303040 000037 01550 CAILE TAC,^D31 + 000241' 254000 000216' 01560 JRST DATLOP + 000242' 275100 000001 01570 SUBI TAC1,1 + 000243' 272100 000234* 01580 ADDM TAC1,THSDAT + 000244' 260140 000235* 01590 PUSHJ PDP,DECIN1 ;YEAR + 000245' 254000 000216' 01600 JRST DATLOP + 000246' 301100 000101 01610 CAIL TAC1,^D65 + 000247' 303100 000143 01620 CAILE TAC1,^D99 + 000250' 254000 000216' 01630 JRST DATLOP + 000251' 275100 000100 01640 SUBI TAC1,^D64 ;YEAR ZERO + 000252' 221100 000564 01650 IMULI TAC1,^D12*^D31 + 000253' 272100 000243* 01660 ADDM TAC1,THSDAT + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 6 + THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + 01700 ;GET TIME OF DAY + + 01720 EXTERN TIME + + 000254' 402000 000000* 01740 TIMLOP: SETZM TIME + 000255' 200240 000443' 01750 MOVE DAT,LINEP + 000256' 201040 000506' 01760 MOVEI TAC,TIMEM + 000257' 260140 000221* 01770 PUSHJ PDP,CONMES + 000260' 260140 000421' 01780 PUSHJ PDP,OPOUT + 000261' 260140 000376' 01790 PUSHJ PDP,GETLIN + 000262' 254000 000254' 01800 JRST TIMLOP ;JUST A CR + 000263' 134100 000001 01810 ILDB TAC1,TAC + 000264' 275100 000060 01820 SUBI TAC1,60 + 000265' 331000 000002 01830 SKIPL TAC1 ;CHECK FIRST DIGIT OF HOUR + 000266' 303100 000002 01840 CAILE TAC1,2 + 000267' 254000 000254' 01850 JRST TIMLOP + 000270' 220100 000556' 01860 IMUL TAC1,[^D60*^D60*^D60*^D10] + 000271' 272100 000254* 01870 ADDM TAC1,TIME + 000272' 134100 000001 01880 ILDB TAC1,TAC + 000273' 275100 000060 01890 SUBI TAC1,60 ;CONVERT TO BINARY + 000274' 331000 000002 01900 SKIPL TAC1 + 000275' 303100 000011 01910 CAILE TAC1,^D9 + 000276' 254000 000254' 01920 JRST TIMLOP + 000277' 221100 645700 01930 IMULI TAC1,^D60*^D60*^D60 + 000300' 272100 000271* 01940 ADDM TAC1,TIME + 000301' 260140 000244* 01950 PUSHJ PDP,DECIN1 + 000302' 254000 000254' 01960 JRST TIMLOP + 000303' 303100 000073 01970 CAILE TAC1,^D59 + 000304' 254000 000254' 01980 JRST TIMLOP + 000305' 221100 007020 01990 IMULI TAC1,^D60*^D60 + 000306' 272100 000300* 02000 ADDM TAC1,TIME + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 7 + THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + 02040 ;PRINT IO CONFIGURATION + + 02060 EXTERN DEVLST + + 000307' 200240 000443' 02080 MOVE DAT,LINEP + 000310' 201040 000517' 02090 MOVEI TAC,IOCONF + 000311' 260140 000257* 02100 PUSHJ PDP,CONMES + 000312' 554300 000000* 02110 HLRZ DEVDAT,DEVLST + 000313' 201040 000004 02120 MOVEI TAC,ITEM + 000314' 261140 000001 02130 PUSH PDP,TAC + 000315' 201040 000001 02140 ONCE5: MOVEI TAC,1 + 000316' 510206 000000 02150 HLLZ ITEM,DEVNAM(DEVDAT) + 000317' 554306 000003 02160 ONCE4: HLRZ DEVDAT,DEVSER(DEVDAT) + 000320' 322300 000324' 02170 JUMPE DEVDAT,ONCE6 + 000321' 510106 000000 02180 HLLZ TAC1,DEVNAM(DEVDAT) + 000322' 316100 000004 02190 CAMN TAC1,ITEM + 000323' 344040 000317' 02200 AOJA TAC,ONCE4 + 000324' 200340 000001 02210 ONCE6: MOVE PROG,TAC ;SAVE NO. + 000325' 260140 000207* 02220 PUSHJ PDP,RADX10 + 000326' 201600 000040 02230 MOVEI UUO," " + 000327' 136600 000005 02240 IDPB UUO,DAT + 000330' 201600 000003 02250 MOVEI UUO,3 + 000331' 200440 000557' 02260 MOVE JDAT,[POINT 6,ITEM] + 000332' 134100 000011 02270 ONCE7: ILDB TAC1,JDAT + 000333' 271100 000240 02280 ADDI TAC1,240 + 000334' 136100 000005 02290 IDPB TAC1,DAT + 000335' 367600 000332' 02300 SOJG UUO,ONCE7 + 000336' 201040 000560' 02310 MOVEI TAC,[ASCIZ /'S/] + 000337' 303340 000001 02320 CAILE PROG,1 + 000340' 260140 000311* 02330 PUSHJ PDP,CONMES + 000341' 260140 000214* 02340 PUSHJ PDP,CRLF + 000342' 326300 000315' 02350 JUMPN DEVDAT,ONCE5 + 000343' 262140 000002 02360 POP PDP,TAC1 + 000344' 260140 000421' 02370 PUSHJ PDP,OPOUT + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 8 + THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + 02410 ;ASK IF SYSMAK IS WANTED + + 000345' 200240 000443' 02430 MOVE DAT,LINEP + 000346' 201040 000524' 02440 MOVEI TAC,SYSM + 000347' 260140 000340* 02450 PUSHJ PDP,CONMES + 000350' 260140 000421' 02460 PUSHJ PDP,OPOUT + 000351' 260140 000376' 02470 PUSHJ PDP,GETLIN + 000352' 254000 000355' 02480 JRST ONCE2 ;NO SYSMAK + 000353' 201040 000000* 02490 MOVEI TAC,MAKEND ;YES + 000354' 202040 000172* 02500 MOVEM TAC,SYSSIZ + + 02520 ;IS EXEC DDT WANTED? + + 000355' 200240 000443' 02540 ONCE2: MOVE DAT,LINEP + 000356' 201040 000536' 02550 MOVEI TAC,SYSDM + 000357' 260140 000347* 02560 PUSHJ PDP,CONMES + 000360' 260140 000421' 02570 PUSHJ PDP,OPOUT + 000361' 260140 000376' 02580 PUSHJ PDP,GETLIN + 000362' 254000 000365' 02590 JRST ONCE3 ;NO + 000363' 201040 000000* 02600 MOVEI TAC,JOBFF ;FIRST FREE LOCATION + 000364' 552040 000354* 02610 HRRZM TAC,SYSSIZ + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 9 + THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + 02650 ;PRINT OCTAL SIZE OF MONITOR + + 000365' 200240 000443' 02670 ONCE3: MOVE DAT,LINEP + 000366' 201040 000541' 02680 MOVEI TAC,EXECIS + 000367' 260140 000357* 02690 PUSHJ PDP,CONMES + 000370' 200040 000364* 02700 MOVE TAC,SYSSIZ + 000371' 260140 000000* 02710 PUSHJ PDP,OCTPNT + 000372' 201040 000544' 02720 MOVEI TAC,LENGTH + 000373' 260140 000367* 02730 PUSHJ PDP,CONMES + 000374' 260140 000421' 02740 PUSHJ PDP,OPOUT + 000375' 254020 000170' 02750 JRST @ONCE + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 10 + THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + 02790 ;ROUTINE TO READ A LINE FROM OPERATORS CONSOLE + 02800 ;CALL: PUSHJ PDP,GETLIN + 02810 ; JUST A CR TYPED IN + 02820 ; A LINE TYPED IN,TAC SET AS BYTE POINTER + + 02840 EXTERN CPOPJ, CPOPJ1 + + 000376' 200040 000443' 02860 GETLIN: MOVE TAC,LINEP + 000377' 201200 000000 02870 MOVEI ITEM,0 + 000400' 712340 000040 02880 GET1: CONSO TTY,40 + 000401' 254000 000400' 02890 JRST .-1 + 000402' 712040 000002 02900 DATAI TTY,TAC1 + 000403' 712140 000002 02910 DATAO TTY,TAC1 + 000404' 136100 000001 02920 IDPB TAC1,TAC + 000405' 405100 000177 02930 ANDI TAC1,177 + 000406' 306100 000177 02940 CAIN TAC1,177 ;RUBOUT + 000407' 254000 000000* 02950 JRST CPOPJ + 000410' 302100 000015 02960 CAIE TAC1,15 + 000411' 344200 000400' 02970 AOJA ITEM,GET1 + 000412' 712340 000020 02980 CONSO TTY,20 + 000413' 254000 000412' 02990 JRST .-1 + 000414' 201100 000012 03000 MOVEI TAC1,12 + 000415' 712140 000002 03010 DATAO TTY,TAC1 + 000416' 200040 000443' 03020 MOVE TAC,LINEP + 000417' 326200 000000* 03030 JUMPN ITEM,CPOPJ1 + 000420' 263140 000000 03040 POPJ PDP, + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 11 + THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + 03080 ;ROUTINE TO TYPE A LINE ON OPERATORS CONSOLE + 03090 ;ECHO CHECK STOPS LINE AND RETURNS + 03100 ;CALL: DAT SET TO END OF MESSAGE + + 000421' 200040 000443' 03120 OPOUT: MOVE TAC,LINEP + 000422' 712040 000002 03130 DATAI TTY,TAC1 + 000423' 316040 000005 03140 OPOUT1: CAMN TAC,DAT + 000424' 262140 000000 03150 POP PDP, + 000425' 712300 000040 03160 CONSZ TTY,40 + 000426' 254000 000434' 03170 JRST OPOUT2 ;ECHO CHECK + 000427' 712300 000020 03180 CONSZ TTY,20 + 000430' 254000 000427' 03190 JRST .-1 + 000431' 134100 000001 03200 ILDB TAC1,TAC + 000432' 712140 000002 03210 DATAO TTY,TAC1 + 000433' 254000 000423' 03220 JRST OPOUT1 + 000434' 712300 000020 03230 OPOUT2: CONSZ TTY,20 + 000435' 254000 000434' 03240 JRST .-1 + 000436' 712140 000561' 03250 DATAO TTY,[15] + 000437' 712300 000020 03260 CONSZ TTY,20 + 000440' 254000 000437' 03270 JRST .-1 + 000441' 712140 000562' 03280 DATAO TTY,[12] + 000442' 263140 000000 03290 POPJ PDP, + + 000443' 440700 000444' 03310 LINEP: POINT 7,LINBUF + 000444' 03320 LINBUF: BLOCK 20 + 000010 03330 ONCEPN=10 + 000464' 03340 ONCEPD: BLOCK ONCEPN + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 12 + THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + + + 03380 ;MESSAGES + + 000474' 202505 620246 03400 TSEXEC: ASCIZ / T. S. EXEC-/ + 000475' 271010 554212 + 000476' 415320 000000 + 000477' 03410 TODATE: ASCIZ / + 000477' 064252 454640 03420 TYPE TODAY'S DATE AS ABOVE. + 000500' 425012 447610 + 000501' 406624 751500 + 000502' 422032 442500 + 000503' 406464 040604 + 000504' 476550 527032 + 000505' 050000 000000 03430 / + 000506' 03440 TIMEM: ASCIZ / + 000506' 064252 454640 03450 TYPE 4 DIGIT NAVY TIME(0953 IS 9:53 AM). + 000507' 425006 420210 + 000510' 446171 152100 + 000511' 472032 654500 + 000512' 522231 542520 + 000513' 301626 531500 + 000514' 446464 034564 + 000515' 325464 040632 + 000516' 245341 505000 03460 / + 000517' 03470 IOCONF: ASCIZ / + 000517' 064251 147500 03480 IO CONFIGURATION + 000520' 416371 643222 + 000521' 436532 240650 + 000522' 446371 606424 03490 / + 000523' 000000 000000 + + 000524' 03510 SYSM: ASCIZ / + 000524' 064250 447500 03520 DO YOU WANT SYSMAK(TYPE Y IF YES,CR IF NO)? + 000525' 546372 520256 + 000526' 406352 420246 + 000527' 546471 540626 + 000530' 242513 150212 + 000531' 202624 044614 + 000532' 202630 551530 + 000533' 416444 044614 + 000534' 202351 724576 + 000535' 064240 000000 03530 / + + 000536' 03550 SYSDM: ASCIZ / + 000536' 064250 554212 03560 EXEC DDT? + 000537' 415010 442250 + 000540' 374321 200000 03570 / + 000541' 03580 EXECIS: ASCIZ / + 000541' 064250 554212 03590 EXEC IS / + 000542' 415011 151500 + 000543' 000000 000000 + 000544' 476072 440630 03600 LENGTH: ASCIZ /OCTAL LOCATIONS LONG. + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 12-1 + THIS IS ONLY CODE PLACED AT THE END OF IOINIT + + 000545' 202311 741602 + 000546' 522231 747246 + 000547' 202311 747216 + 000550' 270321 200000 03610 / + 03620 END, + 000551' 000001 000001 + 000552' 000150' 000040 + 000553' 000010 000464' + 000554' 270000 000000 + 000555' 200000 000000 + 000556' 000010 172600 + 000557' 440600 000004 + 000560' 236460 000000 + 000561' 000000 000015 + 000562' 000000 000012 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000563 + +8K CORE USED + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 13 + SYMBOL TABLE + + 000265 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APR 000000 SPD +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +C 000002 +CH1 000152' EXT +CH2 000154' EXT +CH3 000156' EXT +CH4 000160' EXT +CH5 000162' EXT +CH6 000164' EXT +CH7 000166' EXT +CHL 000006 +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CONFIG 000176' EXT +CONMES 000373' EXT +CPOPJ 000407' EXT +CPOPJ1 000417' EXT +CRLF 000341' EXT +D 000017 INT +DAT 000005 INT +DATLOP 000216' +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DECIN 000000 EXT +DECIN1 000301' EXT +DEN 000004 INT +DEV1 000103' +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVINT 000104' EXT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVLST 000312' EXT +DEVMOD 000004 INT + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 13-1 + SYMBOL TABLE + +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERNAM 000000 EXT +ERROR 000167' EXT +EXECIS 000541' +GET1 000400' +GETLIN 000376' +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +INT 000005 +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IOCONF 000517' +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 13-2 + SYMBOL TABLE + +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOBFF 000363' EXT +JOBSYM 000135' EXT +JRSTI 000147' +JRSTI1 000143' +LENGTH 000544' +LINBUF 000444' +LINEP 000443' +LINKSR 000100' INT +LOC40 000150' +LOOKB 040000 INT +MAKEND 000353' EXT +MTW 010000 INT +NDEVM1 000102' EXT +NXM 010000 +OBUFB 100000 INT +OCTPNT 000371' EXT +ONCE 000170' INT +ONCE2 000355' +ONCE3 000365' +ONCE4 000317' +ONCE5 000315' +ONCE6 000324' +ONCE7 000332' +ONCEPD 000464' +ONCEPN 000010 +OPOUT 000421' +OPOUT1 000423' +OPOUT2 000434' +OUTPB 004000 INT +PATCH 000000' INT +PDP 000003 INT +PICHN 000100 INT +PROG 000007 INT +RADX10 000325' EXT +RUN 200000 INT +RUNABL 204000 INT +STO1 000140' +SYSDAT 000212' EXT +SYSDM 000536' +SYSFIN 777777 777777' INT + ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE PAGE 13-3 + SYMBOL TABLE + +SYSM 000524' +SYSNUM 000206' EXT +SYSSIZ 000370' EXT +T 000001 +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +THSDAT 000253' EXT +TIME 000306' EXT +TIMEM 000506' +TIMLOP 000254' +TODATE 000477' +TSEXEC 000474' +TTY 000120 SPD +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT +UUO0 000151' EXT + PPPPPPPPPPPP TTTTTTTTTTTTTTT RRRRRRRRRRRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTTTTTTTTTTTTTT RRRRRRRRRRRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTTTTTTTTTTTTTT RRRRRRRRRRRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +PPP PPP TTT RRR RRR SSS EEE RRR RRR +PPP PPP TTT RRR RRR SSS EEE RRR RRR +PPP PPP TTT RRR RRR SSS EEE RRR RRR +PPP PPP TTT RRR RRR SSS EEE RRR RRR +PPP PPP TTT RRR RRR SSS EEE RRR RRR +PPP PPP TTT RRR RRR SSS EEE RRR RRR +PPPPPPPPPPPP TTT RRRRRRRRRRRR SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTT RRRRRRRRRRRR SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTT RRRRRRRRRRRR SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +PPP TTT RRR RRR SSS EEE RRR RRR +PPP TTT RRR RRR SSS EEE RRR RRR +PPP TTT RRR RRR SSS EEE RRR RRR +PPP TTT RRR RRR SSS EEE RRR RRR +PPP TTT RRR RRR SSS EEE RRR RRR +PPP TTT RRR RRR SSS EEE RRR RRR +PPP TTT RRR RRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +PPP TTT RRR RRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +PPP TTT RRR RRR SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :PTRSER.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:23 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2307 +File will be deleted after printing + PTRSER - PAPER TAPE READER SERVICE ROUTINE PAGE 1 + 8-15-65 + + 00010 XLIST + 01930 LIST + PTRSER - PAPER TAPE READER SERVICE ROUTINE PAGE 7 + 8-15-65 + + + 00010 TITLE PTRSER - PAPER TAPE READER SERVICE ROUTINE + 00020 SUBTTL 8-15-65 + 00030 EXTERNAL WSYNC, STOSQD, ILLOUT + 00040 EXTERNAL STODAT, IOSET, SETBYT, CKS12, ADVBFF + 00050 EXTERNAL SETIOD, PTRSAV, PTRCHN, PTRRET,PIOMOD + 00060 INTERNAL PTRINT + + 00080 ;PTR DEVICE DATA BLOCK LINKAGE + + 00100 EXTERNAL PTRDB,PTRDAT,PTRCHR,PTRIOS,PTRSER,PTRMOD,PTRBUF + 00110 EXTERNAL PTRADR,PTRPTR,PTRCTR,PTRSVC,PTRSV1 + 00120 ENTRY PTRDSP + PTRSER - PAPER TAPE READER SERVICE ROUTINE PAGE 2 + 8-15-65 + + + + 00160 ,PARAMETER ASSIGNMENTS + 00170 , PTR CONTROL REGISTER + 000010 00180 PTRDON=10; DONE FLAG + 000020 00190 PTRBSY=20; BUSY FLAG + 000040 00200 PTRBIN=40; BINARY READ MODE + 000400 00210 POW=400; POWER. ON=1 + + 00230 , SPECIAL IO STATUS WORD ASSIGMENTS + 002000 00240 PTRERR=2000 + 200000 00250 PTRFCI=200000 + 100000 00260 PTRPOW=100000 + 00270 , SPECIAL ASCII CHARACTERS + 000200 00280 NULL=200 + 000377 00290 RUBOUT=377 + 000232 00300 S2EOF=232; END OF FILE + 00310 , PI CONTROL REGISTER + 000200 00320 PION=200 + 000400 00330 PIOFF=400 + + 00350 REPEAT 0,<P + 00360 ,PTR DATA BLOCK + 00370 PTRDAT: SIXBIT "PTR" + 00380 PTRCHR: 41 + 00390 PTRIOS: 0 + 00400 PTRSER: EXP PTRDSP + 00410 PTRMOD: XWD 1000+PROG,10403 + 00420 0 + 00430 PTRBUF: 0 + 00440 PTRADR: XWD PROG,0 + 00450 PTRPTR: 0 + 00460 PTRCTR: 0 + 00470 PTRSVC: 0 + 00480 PTRSV1: 0 + 00490 > + + 00510 ,PTR SERVICE DISPATCH TABLE + + 000000' 254000 000134' 00530 PTRDSP: JRST PTRREL ;RELEASE + 000001' 263140 000000 00540 POPJ PDP,; CLOSE + 000002' 254000 000000* 00550 JRST ILLOUT ;OUTPUT + 000003' 254000 000004' 00560 JRST PTRINP; INPUT + PTRSER - PAPER TAPE READER SERVICE ROUTINE PAGE 3 + 8-15-65 + + + + 000004' 607000 000002 00600 PTRINP: TLNN IOS,IOBEG; VIRGIN DEVICE? (IOBEG=1?) + 000005' 254000 000013' 00610 JRST PTRIN1; NO + 000006' 661000 000004 00620 TLO IOS,IOFST; IOFST:=1. NEXT ITEM WILL BE FIRST ITEM + 000007' 260140 000000* 00630 PUSHJ PDP,SETBYT; TAC0-5:=TAC12-13:=0,TAC6-11:=BYTE SIZE + 00640 , TAC14-17:=PROG + 000010' 202040 000000* 00650 MOVEM TAC,PTRPTR; PTRPTR:=C(TAC) + 000011' 710700 000400 00660 CONSZ PTR,POW; IS POWER ON? + 000012' 661000 100000 00670 TLO IOS,PTRPOW; YES. PTRPOW:=1 + 000013' 660000 010000 00680 PTRIN1: TRO IOS,IOACT; IOACT:=1 + 000014' 135040 000000* 00690 LDB TAC,PIOMOD + 000015' 201100 000000* 00700 MOVEI TAC1, PTRCHN; TAC1:=PTR PI CHANNEL ASSIGNME + 000016' 306040 000014 00710 CAIN TAC,B; MODE=BINARY? + 000017' 271100 000040 00720 ADDI TAC1,PTRBIN; YES. ALPHA/BINARY:=BINARY + 000020' 201040 000010 00730 MOVEI TAC,PTRDON ;SET CONSO INTERRUPT FLAG + 000021' 542040 000032' 00740 HRRM TAC,PTRINT + 000022' 627000 000002 00750 TLZN IOS,IOBEG; VIRGIN DEVICE? (IOBEG=1?) + 000023' 254000 000027' 00760 JRST PTRIN4; NO + 000024' 202000 000000* 00770 MOVEM IOS,PTRIOS; PTRIOS:=C(IOS) + 000025' 710602 000020 00780 CONO PTR,PTRBSY(TAC1); PTR BUSY FLAG:=1,ASSIGN INTER + 000026' 263140 000000 00790 POPJ PDP,; INPUT RETURN-VIRGIN DEVICE + + 000027' 202000 000024* 00810 PTRIN4: MOVEM IOS,PTRIOS; PTRIOS:=C(IOS) + 000030' 710602 000010 00820 CONO PTR,PTRDON(TAC1); PTR DONE FLAG:=1,ASSIGN INTER + 000031' 263140 000000 00830 POPJ PDP, + PTRSER - PAPER TAPE READER SERVICE ROUTINE PAGE 4 + 8-15-65 + + + + 000032' 710740 000010 00870 PTRINT: CONSO PTR,PTRDON ;INTERRUPT. IS DONE FLAG = 1? + 000033' 254000 000032' 00880 JRST PTRINT ;NO. IF PTR IS IN FLAG LIST, THIS LOC + 000034' 331000 000027* 00890 SKIPL PTRIOS ;DISCONNECT REQUEST? (IODISC=1?) + 000035' 710440 000000* 00900 DATAI PTR,PTRSV1 ;PTRSV1: = DATA WORD + 000036' 264000 000000* 00910 JSR PTRSAV ;SAVE ACCUMULATORS AND ESTABLISH PDP + 000037' 201300 000000* 00920 MOVEI DEVDAT,PTRDAT ;DEVDAT: = PTR SIXBIT + 000040' 260140 000000* 00930 PUSHJ PDP,IOSET ;PROG:=C(JBTADR18-35),ITEM:=C(DEVCTR) + 000041' 200000 000034* 00940 MOVE IOS,PTRIOS ;IOS:=C(PTRIOS) + 000042' 200240 000035* 00950 MOVE DAT,PTRSV1 ;DAT:=C(PTRSV1) + 000043' 710740 000400 00960 CONSO PTR,POW ;PTR POWER ON? + 000044' 254000 000075' 00970 JRST PTREND ;NO + 000045' 667000 100000 00980 TLON IOS,PTRPOW ;PTRPOW=1? PTRPOW:=1 + 000046' 254000 000131' 00990 JRST PTREX1 ;NO + 000047' 623000 400000 01000 TLZE IOS,IODISC + 000050' 254000 000121' 01010 JRST PTREX + 000051' 623000 200000 01020 TLZE IOS,PTRFCI ;IS PTRFCI=1? + 000052' 200240 000000* 01030 MOVE DAT,PTRSVC ;YES. DAT:=C(PTRSVC) + 000053' 602000 000014 01040 PTRIN0: TRNE IOS,B ;MODE=BINARY? + 000054' 254000 000061' 01050 JRST PTRI0 ;YES + 000055' 302240 000200 01060 CAIE DAT,NULL ;LAST CHARACTER NULL OR RUBOUT + 000056' 306240 000377 01070 CAIN DAT,RUBOUT + 000057' 254000 000131' 01080 JRST PTREX1 ;YES + 000060' 322240 000131' 01090 JUMPE DAT,PTREX1 ;DAT=0? + + 000061' 260140 000000* 01110 PTRI0: PUSHJ PDP,STODAT ;NO STORE DATA WORD. + 000062' 255000 000000 01120 JFCL ;CHECKSUM ERROR + 000063' 254000 000065' 01130 JRST PTRI1 ;BLOCK FULL OR BLOCK COMPLETE + 000064' 254000 000131' 01140 JRST PTREX1 ;DATA STORED CORRECTLY. + + 000065' 260140 000000* 01160 PTRI1: PUSHJ PDP,ADVBFF ;ADVANCE BUFFER + 000066' 661000 400000 01170 TLO IOS,IODISC; NEXT BUFFER IS FULL. IODISC:=1 + 000067' 602000 000040 01180 TRNE IOS,IOCON; NEXT BUFFER IS EMPTY. CONTINUOUS? (IOC + 000070' 661000 400000 01190 TLO IOS,IODISC; NON-CONT. OPERATION. IODISC:=1 + 000071' 661000 000004 01200 PTRI2: TLO IOS,IOFST; IOFST:=1. NEXT ITEM IS FIRST ITEM OF A + 000072' 623000 000001 01210 TLZE IOS,IOW; IN A WAIT? IOW:=0 + 000073' 260140 000000* 01220 PUSHJ PDP,SETIOD; IOWS:=1 + 000074' 254000 000131' 01230 JRST PTREX1 + PTRSER - PAPER TAPE READER SERVICE ROUTINE PAGE 5 + 8-15-65 + + + + 01270 ,COME HERE WHEN THE READER IS SHUT OFF + + 000075' 630000 000137' 01290 PTREND: TDZ IOS,[XWD PTRPOW,IOACT] ;PTRPOW:=0,IOACT:=0 + 000076' 260140 000134' 01300 PUSHJ PDP,PTRREL ;CLEAR PTR AND CONSO FLAG + 000077' 135040 000014* 01310 LDB TAC,PIOMOD + 000100' 661000 000040 01320 TLO IOS,IOEND ;IOEND:=1 + 000101' 602040 000014 01330 TRNE TAC,B ;MODE=A,AL + 000102' 254000 000114' 01340 JRST PTREIB ;NO + 000103' 201240 000232 01350 MOVEI DAT,S2EOF; EOF CHAR + 000104' 260140 000061* 01360 PUSHJ PDP,STODAT ;STORE DATA WORD + 000105' 254000 000062' 01370 JRST PTRI0+1 ;CHECKSUM ERROR + 000106' 254000 000111' 01380 JRST .+3 ;BLOCK FULL OF BLOCK COMPLETE + 000107' 260140 000000* 01390 PTREI: PUSHJ PDP,STOSQD; FINISH THIS BUFFER, STORE WORD COUNT + 000110' 330000 000000 01400 SKIP + 000111' 260140 000065* 01410 PUSHJ PDP,ADVBFF ;ADVANCE BUFFER + 000112' 330000 000000 01420 SKIP + 000113' 254000 000071' 01430 JRST PTRI2 + + 000114' 302040 000014 01450 PTREIB: CAIE TAC,B ;MODE=BINARY? + 000115' 254000 000107' 01460 JRST PTREI ;NO + 000116' 607000 000004 01470 TLNN IOS,IOFST ;IOFST=1? + 000117' 660000 002000 01480 TRO IOS,PTRERR ;NO. PTRERR:=1. BINARY BLOCK INCOMPLE + 000120' 254000 000071' 01490 JRST PTRI2 + PTRSER - PAPER TAPE READER SERVICE ROUTINE PAGE 6 + 8-15-65 + + + + 01530 ,DISCONNECT PTR + 000121' 337020 000000* 01540 PTREX: SKIPG @PTRADR ;IOUSE=1? + 000122' 254000 000125' 01550 JRST PTREX0 ;YES. + 000123' 710440 000042* 01560 DATAI PTR,PTRSV1 + 000124' 254000 000053' 01570 JRST PTRIN0 + + 000125' 710440 000052* 01590 PTREX0: DATAI PTR,PTRSVC ;SAVE LAST DATA WORD FROM PTR + 000126' 260140 000134' 01600 PUSHJ PDP,PTRREL ;CLEAR PTR AND CONSO FLAG + 000127' 661000 200000 01610 TLO IOS,PTRFCI ;PTRFCI:=1 + 000130' 620000 010000 01620 TRZ IOS,IOACT ;IOACT:=0 + + 000131' 202200 000000* 01640 PTREX1: MOVEM ITEM,PTRCTR ;PTRCTR:=C(ITEM) + 000132' 202000 000041* 01650 MOVEM IOS,PTRIOS ;PTRIOS:=C(IOS) + 000133' 254000 000000* 01660 JRST PTRRET ;RESTORE ACCUMULATORS AND DISMISS INTER + + 01680 INTERNAL PTRINI + + 000134' 01700 PTRINI: + 000134' 710600 000000 01710 PTRREL: CONO PTR,0 ;CLEAR PTR CONTROL + 000135' 513000 000032' 01720 HLLZS PTRINT ;CLEAR CONSO FLAG + 000136' 263140 000000 01730 POPJ PDP, + + 01750 END, + 000137' 100000 010000 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000140 + +8K CORE USED + PTRSER - PAPER TAPE READER SERVICE ROUTINE PAGE 7 + SYMBOL TABLE + + 000245 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADVBFF 000111' EXT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CKS12 000000 EXT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT + PTRSER - PAPER TAPE READER SERVICE ROUTINE PAGE 7-1 + SYMBOL TABLE + +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +ILLOUT 000002' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSET 000040' EXT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +MTW 010000 INT +NULL 000200 +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PIOFF 000400 +PIOMOD 000077' EXT +PION 000200 +POW 000400 + PTRSER - PAPER TAPE READER SERVICE ROUTINE PAGE 7-2 + SYMBOL TABLE + +PROG 000007 INT +PTR 000104 SPD +PTRADR 000121' EXT +PTRBIN 000040 +PTRBSY 000020 +PTRBUF 000000 EXT +PTRCHN 000015' EXT +PTRCHR 000000 EXT +PTRCTR 000131' EXT +PTRDAT 000037' EXT +PTRDB 000000 EXT +PTRDON 000010 +PTRDSP 000000' ENT +PTREI 000107' +PTREIB 000114' +PTREND 000075' +PTRERR 002000 +PTREX 000121' +PTREX0 000125' +PTREX1 000131' +PTRFCI 200000 +PTRI0 000061' +PTRI1 000065' +PTRI2 000071' +PTRIN0 000053' +PTRIN1 000013' +PTRIN4 000027' +PTRINI 000134' INT +PTRINP 000004' +PTRINT 000032' INT +PTRIOS 000132' EXT +PTRMOD 000000 EXT +PTRPOW 100000 +PTRPTR 000010' EXT +PTRREL 000134' +PTRRET 000133' EXT +PTRSAV 000036' EXT +PTRSER 000000 EXT +PTRSV1 000123' EXT +PTRSVC 000125' EXT +RUBOUT 000377 +RUN 200000 INT +RUNABL 204000 INT +S2EOF 000232 +SETBYT 000007' EXT +SETIOD 000073' EXT +STODAT 000104' EXT +STOSQD 000107' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT + PTRSER - PAPER TAPE READER SERVICE ROUTINE PAGE 7-3 + SYMBOL TABLE + +USRMOD 010000 INT +UUO 000014 INT +WSYNC 000000 EXT + PPPPPPPPPPPP TTTTTTTTTTTTTTT PPPPPPPPPPPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTTTTTTTTTTTTTT PPPPPPPPPPPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTTTTTTTTTTTTTT PPPPPPPPPPPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +PPP PPP TTT PPP PPP SSS EEE RRR RRR +PPP PPP TTT PPP PPP SSS EEE RRR RRR +PPP PPP TTT PPP PPP SSS EEE RRR RRR +PPP PPP TTT PPP PPP SSS EEE RRR RRR +PPP PPP TTT PPP PPP SSS EEE RRR RRR +PPP PPP TTT PPP PPP SSS EEE RRR RRR +PPPPPPPPPPPP TTT PPPPPPPPPPPP SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTT PPPPPPPPPPPP SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +PPPPPPPPPPPP TTT PPPPPPPPPPPP SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR +PPP TTT PPP SSS EEE RRR RRR +PPP TTT PPP SSS EEE RRR RRR +PPP TTT PPP SSS EEE RRR RRR +PPP TTT PPP SSS EEE RRR RRR +PPP TTT PPP SSS EEE RRR RRR +PPP TTT PPP SSS EEE RRR RRR +PPP TTT PPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +PPP TTT PPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +PPP TTT PPP SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :PTPSER.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:23 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2296 +File will be deleted after printing + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE PAGE 1 + 8-15-65 + + 00010 XLIST + 01930 LIST + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE PAGE 7 + 8-15-65 + + + 00010 TITLE PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE + 00020 SUBTTL 8-15-65 + 00030 EXTERNAL PTPCHN, PTPSAV, ADVBFE, ITMCT1, SETIOD, SETBYT, IOSET, CKS12 + 00040 EXTERNAL ILLINP, OUT, WAIT1, PTPRET,PTPCHL,PIOMOD + 00050 INTERNAL PTPINT + + 00070 ;PTP DEVICE DATA BLOCK LINKAGE + + 00090 EXTERNAL PTPDB,PTPDAT,PTPCHR,PTPIOS,PTPSER,PTPMOD,PTPBUF + 00100 EXTERNAL PTPPTR,PTPADR,PTPCTR,PTPCNT,PTPCHA,PTPSIO + 00110 ENTRY PTPDSP + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE PAGE 2 + 8-15-65 + + + + 00150 , PARAMETER ASSIGNMENTS + + + 00180 , PTP CONTROL REGISTER + 000010 00190 PTPDON=10 + + 00210 , FORMAT CONTROL + 000200 00220 PTPFDN=200 + + 00240 , SPECIAL IO STATUS WORD ASSIGNMENTS + 200000 00250 PTPFED=200000 + 040000 00260 PTPSSQ=40000 + 020000 00270 PTPEOL=20000 + 010000 00280 PTPSEQ=10000 + 004000 00290 PTPBIN=4000 ;CHECKSUM BINARY + 002000 00300 PTPIB=2000 ;IMAGE BINARY + + 00320 , SPECIAL ASCII CHARACTERS + 000200 00330 NULL=200 + 000377 00340 RUBOUT=377 + 000211 00350 HORTAB=211 + 000213 00360 VERTAB=213 + 000214 00370 FORMFD=214 + + 00390 REPEAT 0,< + 00400 ,PTP DATA BLOCK + 00410 + 00420 PTPDAT: SIXBIT "PTP" + 00430 PTPCHR: 41 + 00440 PTPIOS: 0 + 00450 PTPSER: EXP PTPDSP + 00460 PTPMOD: XWD 1000+PROG.14403 + 00470 0 + 00480 PTPBUF: 0 + 00490 PTPPTR: 0 + 00500 PTPADR: XWD PROG,0 + 00510 PTPCTR: 0 + 00520 PTPCNT: 0 + 00530 PTPCHA: 0 + 00540 PTPSIO: 0 + 00550 > + + 00570 ,PTP SERVICE DISPATCH TABLE + + 000000' 254000 000004' 00590 PTPDSP: JRST PTPREL ;RELEASE + 000001' 254000 000007' 00600 JRST PTPCLS ;CLOSE + 000002' 254000 000024' 00610 JRST PTPOUT ;OUTPUT + 000003' 254000 000000* 00620 JRST ILLINP ;INPUT + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE PAGE 3 + 8-15-65 + + + + 00660 INTERNAL PTPINI + 000004' 00670 PTPINI: + 000004' 710200 000000 00680 PTPREL: CONO PTP,0 + 000005' 513000 000052' 00690 HLLZS PTPINT ;CLEAR CONSO FLAG BITS + 000006' 263140 000000 00700 POPJ PDP, ;RETURN + + 000007' 260140 000000* 00720 PTPCLS: PUSHJ PDP,OUT; OUTPUT REMAINING BUFFERS + 000010' 260140 000000* 00730 PUSHJ PDP,WAIT1; WAIT FOR IOACT=0. + 000011' 200000 000000* 00740 MOVE IOS,PTPIOS; C(IOS):=C(PTPIOS) + 000012' 661000 600001 00750 TLO IOS,IODISC+PTPFED+IOW; IODISC:=IOW:=PTPFED:=1 + 000013' 660000 010000 00760 TRO IOS,IOACT; IOACT:=1 + 000014' 202000 000011* 00770 MOVEM IOS,PTPIOS; C(PTPIOS):=C(IOS) + 000015' 201040 000200 00780 MOVEI TAC,200 + 000016' 202040 000000* 00790 MOVEM TAC,PTPCNT; PTPCNT:=400 + 000017' 201040 000010 00800 MOVEI TAC,PTPDON ;SET CONSO FLAG + 000020' 542040 000052' 00810 HRRM TAC,PTPINT + 000021' 201040 000000* 00820 MOVEI TAC,PTPCHN; TAC:=PTPCHN,PI CHANNEL ASSIGNMENT + 000022' 710201 000010 00830 CONO PTP,PTPDON(TAC); DONE FLAG:=1, ASSIGN PI CHANN + 000023' 254000 000010* 00840 JRST WAIT1 ;WAIT FOR IOACT=0, ALL BUFFERS FINISHED + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE PAGE 4 + 8-15-65 + + + + 000024' 623000 000002 00880 PTPOUT: TLZE IOS,IOBEG ;VIRGIN DEVICE? (IOBEG:=0) + 000025' 254000 000036' 00890 JRST PTPIN2 ;YES + + 000026' 660000 010000 00910 PTPIN1: TRO IOS,IOACT ;IOACT:=1 + 000027' 621000 400000 00920 TLZ IOS,IODISC ;CLEAR DISCONNECT BIT + 000030' 202000 000014* 00930 MOVEM IOS,PTPIOS ;PTPIOS:=C(IOS) + 000031' 201040 000010 00940 MOVEI TAC,PTPDON ;SET CONSO FLAG BIT + 000032' 542040 000052' 00950 HRRM TAC,PTPINT + 000033' 201040 000021* 00960 MOVEI TAC, PTPCHN + 000034' 710201 000010 00970 CONO PTP,PTPDON (TAC); DONE FLAG:=1, ASSIGN PI CHAN + 000035' 263140 000000 00980 POPJ PDP, ;RETURN + + 000036' 135040 000000* 01000 PTPIN2: LDB TAC,PIOMOD + 000037' 661000 200024 01010 TLO IOS, IOFST+PTPFED+IO ;IOFST:=PTPFED:=IO:=1 + 000040' 621000 006000 01020 TLZ IOS,PTPBIN+PTPIB ;CLEAR BINARY AND IMAGE BINAR + 000041' 306040 000013 01030 CAIN TAC,IB ;IMAGE BINARY? + 000042' 661000 002000 01040 TLO IOS,PTPIB ;YES + 000043' 306040 000014 01050 CAIN TAC,B ;MODE:=BINARY? + 000044' 661000 004000 01060 TLO IOS,PTPBIN ;YES, PTPBIN:=1 + 000045' 201040 000200 01070 MOVEI TAC,PTPFDN ;PTPCNT:=PTPFDN + 000046' 202040 000016* 01080 MOVEM TAC,PTPCNT + 000047' 260140 000000* 01090 PUSHJ PDP,SETBYT ;SETBYT + 000050' 502040 000000* 01100 HLLM TAC,PTPPTR ;PTPPTR0-5:=PTPPTR12-13:=0,PTPPTR6-11:= + 01110 ;SIZE; PTPPTR14-17:=PROG + 000051' 254000 000026' 01120 JRST PTPIN1 + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE PAGE 5 + 8-15-65 + + + + 01160 ,PUNCH INTERRUPT SERVICE + + 000052' 710340 000010 01180 PTPINT: CONSO PTP,PTPDON; DONE FLAG=1? + 000053' 254000 000052' 01190 JRST PTPINT ;NO. IF PTP IS IN FLAG LIST GO TO ERROR + 000054' 202000 000000* 01200 MOVEM IOS,PTPSIO ;PTPSIO:=C(IOS) SAVE IOS + 000055' 200000 000030* 01210 MOVE IOS,PTPIOS ;IOS:=C(PTPIOS) + 000056' 603000 200000 01220 TLNE IOS,PTPFED ;FEED REQUEST? (PTPFED=1?) + 000057' 254000 000151' 01230 JRST PTPS2 ;YES + 000060' 200000 000054* 01240 MOVE IOS,PTPSIO ;RESTORE IOS + 000061' 264000 000000* 01250 JSR PTPSAV ;SAVE ACS AND ESTABLISH PDP + 000062' 201300 000000* 01260 MOVEI DEVDAT,PTPDAT + 000063' 260140 000000* 01270 PUSHJ PDP,IOSET ;PROG:=(JBTADR 18-35),ITEM:=C(DEVCTR) + 000064' 200000 000055* 01280 MOVE IOS,PTPIOS + 000065' 623000 400000 01290 TLZE IOS,IODISC ;DISCONNECT? (IODISC=1?) + 000066' 254000 000167' 01300 JRST PTPADV ;YES + 000067' 623000 000004 01310 TLZE IOS,IOFST ;IOFST=1? IOFST:=0 + 000070' 254000 000175' 01320 JRST PTP9 ;YES + 000071' 607000 006000 01330 TLNN IOS,PTPBIN+PTPIB ;BINARY PUNCH MODE? + 000072' 254000 000121' 01340 JRST PTP3 ;NO + + 000073' 200040 000000* 01360 PTPB0: MOVE TAC,PTPCHA; BINARY OUTPUT BYTE SIZE=36 + 000074' 241040 000006 01370 ROT TAC,6 + 000075' 202040 000073* 01380 MOVEM TAC,PTPCHA + 000076' 405040 000077 01390 ANDI TAC,77; TAC:=XX, SIXBIT SUB-BYTE + 000077' 271040 000200 01400 ADDI TAC,200 + 000100' 710140 000001 01410 DATAO PTP,TAC; PUNCH 2XX + 000101' 371000 000046* 01420 SOSL PTPCNT; C(PTPCNT):=C(PTPCNT)-1. WORD DONE? + 000102' 254000 000227' 01430 JRST PTPXIT; NO + 000103' 371000 000000* 01440 SOSL PTPCTR; C(PTPCTR):=C(PTPCTR)-1. ITEM COUNT < 0 + 000104' 254000 000113' 01450 JRST PTPB1; NO + 000105' 603000 002000 01460 TLNE IOS,PTPIB ;IMAGE BINARY? + 000106' 665000 400000 01470 TLOA IOS,IODISC ;YES, SUPPRESS TAPE FEED. + 000107' 661000 600000 01480 TLO IOS,IODISC+PTPFED ;IODIS:=PTPFED:=1 + 000110' 201040 000010 01490 MOVEI TAC,10 + 000111' 202040 000101* 01500 MOVEM TAC,PTPCNT; PTPCNT:=10 + 000112' 254000 000227' 01510 JRST PTPXIT + + 000113' 201040 000005 01530 PTPB1: MOVEI TAC,5 ;PTPCNT:=5 + 000114' 202040 000111* 01540 MOVEM TAC,PTPCNT + 000115' 200260 000050* 01550 MOVE DAT,@PTPPTR; PTPCHA:=OUTPUT DATA WORD + 000116' 350000 000115* 01560 AOS PTPPTR; PTPPTR:=C(PTPPTR)+1. ADVANCE ITEM POIN + 000117' 202240 000075* 01570 MOVEM DAT,PTPCHA + 000120' 254000 000227' 01580 JRST PTPXIT + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE PAGE 6 + 8-15-65 + + + + 000121' 710140 000117* 01620 PTP3: DATAO PTP,PTPCHA; PUNCH CHARACTER + 000122' 602000 000014 01630 TRNE IOS,14; IS MODE AN ALPHA MODE + 000123' 254000 000136' 01640 JRST PTP1; NO + 000124' 200240 000121* 01650 MOVE DAT,PTPCHA + 000125' 302240 000211 01660 CAIE DAT,HORTAB; HORIZONTAL OR VERTICAL TAB? + 000126' 306240 000213 01670 CAIN DAT,VERTAB + 000127' 254000 000216' 01680 JRST PTPP1; YES + 000130' 302240 000214 01690 CAIE DAT,FORMFD; FORM FEED? + 000131' 254000 000136' 01700 JRST PTP1; NO + 000132' 661000 220000 01710 TLO IOS,PTPFED+PTPEOL; PTPFED:=PTPEOL:=1 + 000133' 201240 000020 01720 MOVEI DAT,20 + 000134' 202240 000114* 01730 MOVEM DAT,PTPCNT; PTPCNT:=20 + 000135' 254000 000227' 01740 JRST PTPXIT + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE PAGE 7 + 8-15-65 + + + + 000136' 375000 000103* 01780 PTP1: SOSGE PTPCTR; C(PTPCTR:=C(PTPCTR)-1. IS C(PTPCTR)<0 + 000137' 254000 000160' 01790 JRST PTP5 ;YES + 000140' 134240 000116* 01800 LDBI DAT,PTPPTR ;DAT:=OUTPUT ITEM + 000141' 135040 000036* 01810 LDB TAC,PIOMOD + 000142' 306040 000010 01820 CAIN TAC,I; MODE=IMAGE? + 000143' 254000 000147' 01830 JRST PTP6 ;YES + 000144' 435240 000200 01840 IORI DAT,200; NO, INSERT EIGHTH HOLD + 000145' 306240 000200 01850 CAIN DAT,NULL; NULL? + 000146' 254000 000136' 01860 JRST PTP1; YES + + 000147' 202240 000124* 01880 PTP6: MOVEM DAT,PTPCHA; PTPCHA:=OUTPUT ITEM + 000150' 254000 000227' 01890 JRST PTPXIT + + 000151' 402000 000147* 01910 PTPS2: CLEARM PTPCHA; PUNCH FEED + 000152' 710140 000151* 01920 DATAO PTP,PTPCHA + 000153' 377000 000134* 01930 SOSG PTPCNT; COUNT FEED LINES + 000154' 621000 200000 01940 TLZ IOS,PTPFED; PTPFED:=0 + 000155' 202000 000064* 01950 MOVEM IOS,PTPIOS; PTPIOS:=C(IOS) + 000156' 200000 000060* 01960 MOVE IOS,PTPSIO ;RESTORE IOS + 000157' 254520 000000* 01970 JEN @PTPCHL ;DISMISS + + 000160' 661000 400000 01990 PTP5: TLO IOS,IODISC; IODISC:=1 + 000161' 254000 000227' 02000 JRST PTPXIT + + 000162' 550100 000000* 02020 PTPBN: HRRZ TAC1,PTPADR; TAC1:=BUFFER ADDRESS + 000163' 260140 000000* 02030 PUSHJ PDP,CKS12; TAC:=CALCULATE CHECKSUM + 000164' 270100 000162* 02040 ADD TAC1, PTPADR + 000165' 502060 000002 02050 HLLM TAC,@TAC1; STORE CHECKSUM IN LEFT HALF OF FIRST BU + 000166' 254000 000113' 02060 JRST PTPB1 + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE PAGE 8 + 8-15-65 + + + + 000167' 260140 000000* 02100 PTPADV: PUSHJ PDP,ADVBFE; ADVANCE BUFFER + 000170' 254000 000222' 02110 JRST PTPDSC; EXIT1. NEXT BUFFER EMPTY + 000171' 602000 000040 02120 TRNE IOS,IOCON; CONTINUOUS? (IOCON=1?) + 000172' 254000 000222' 02130 JRST PTPDSC; YES + 000173' 623000 000001 02140 TLZE IOS,IOW; IN A WAIT? IOW:=0 + 000174' 260140 000000* 02150 PUSHJ PDP,SETIOD; YES. IOWS:=1 + 000175' 621000 000004 02160 PTP9: TLZ IOS,IOFST; IOFST:=0 + 000176' 200040 000164* 02170 MOVE TAC,PTPADR + 000177' 350000 000001 02180 AOS TAC + 000200' 542040 000140* 02190 HRRM TAC,PTPPTR; PTPPTR18-35:=C(PTPADR18-25)+1 + 000201' 550220 000001 02200 HRRZ ITEM,@TAC; ITEM:=WORD COUNT + 000202' 135100 000215' 02210 LDB TAC1,PTP91 ;PICK UP BYTE SIZE + 000203' 260140 000000* 02220 PUSHJ PDP,ITMCT1; ITEM:=WORD COUNT*[36/BYTE SIZE] + 000204' 202200 000136* 02230 MOVEM ITEM,PTPCTR; PTPCTR:=C(ITEM) + 000205' 322200 000167' 02240 JUMPE ITEM,PTPADV ; IS ITEM COUNT=0? + 000206' 603000 004000 02250 TLNE IOS,PTPBIN; BINARY PUNCH MODE? + 000207' 254000 000162' 02260 JRST PTPBN; YES + 000210' 607000 002000 02270 TLNN IOS,PTPIB ;IMAGE BINARY? + 000211' 254000 000136' 02280 JRST PTP1 + 000212' 350000 000200* 02290 AOS PTPPTR ;YES + 000213' 370000 000204* 02300 SOS PTPCTR + 000214' 254000 000113' 02310 JRST PTPB1 + + 000215' 300600 000212* 02330 PTP91: POINT 6,PTPPTR,11 + + 000216' 201240 000377 02350 PTPP1: MOVEI DAT,RUBOUT; PTPCHA:=RUBOUT + 000217' 202240 000152* 02360 MOVEM DAT,PTPCHA + 000220' 661000 020000 02370 TLO IOS,PTPEOL; PTPEOL:=1 + 000221' 254000 000227' 02380 JRST PTPXIT + + 000222' 260140 000004' 02400 PTPDSC: PUSHJ PDP,PTPREL ;CLEAR PTP CONTROL REG AND CONSO BITS + 000223' 620000 010000 02410 TRZ IOS,IOACT; IOACT:=0 + 000224' 661000 000004 02420 TLO IOS,IOFST; IOFST:=1 + 000225' 623000 000001 02430 TLZE IOS,IOW; IN A WAIT? IOW:=0 + 000226' 260140 000174* 02440 PUSHJ PDP,SETIOD; YES. IOSW:=1 + + 000227' 202000 000155* 02460 PTPXIT: MOVEM IOS,PTPIOS; PTPIOS:=C(IOS) + 000230' 254000 000000* 02470 JRST PTPRET; NO + + 02490 END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000231 + +8K CORE USED + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE PAGE 9 + SYMBOL TABLE + + 000255 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADVBFE 000167' EXT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CKS12 000163' EXT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE PAGE 9-1 + SYMBOL TABLE + +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +FORMFD 000214 +HORTAB 000211 +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +ILLINP 000003' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSET 000063' EXT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +ITMCT1 000203' EXT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +MTW 010000 INT +NULL 000200 +OBUFB 100000 INT +OUT 000007' EXT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE PAGE 9-2 + SYMBOL TABLE + +PIOMOD 000141' EXT +PROG 000007 INT +PTP 000100 SPD +PTP1 000136' +PTP3 000121' +PTP5 000160' +PTP6 000147' +PTP9 000175' +PTP91 000215' +PTPADR 000176' EXT +PTPADV 000167' +PTPB0 000073' +PTPB1 000113' +PTPBIN 004000 +PTPBN 000162' +PTPBUF 000000 EXT +PTPCHA 000217' EXT +PTPCHL 000157' EXT +PTPCHN 000033' EXT +PTPCHR 000000 EXT +PTPCLS 000007' +PTPCNT 000153' EXT +PTPCTR 000213' EXT +PTPDAT 000062' EXT +PTPDB 000000 EXT +PTPDON 000010 +PTPDSC 000222' +PTPDSP 000000' ENT +PTPEOL 020000 +PTPFDN 000200 +PTPFED 200000 +PTPIB 002000 +PTPIN1 000026' +PTPIN2 000036' +PTPINI 000004' INT +PTPINT 000052' INT +PTPIOS 000227' EXT +PTPMOD 000000 EXT +PTPOUT 000024' +PTPP1 000216' +PTPPTR 000215' EXT +PTPREL 000004' +PTPRET 000230' EXT +PTPS2 000151' +PTPSAV 000061' EXT +PTPSEQ 010000 +PTPSER 000000 EXT +PTPSIO 000156' EXT +PTPSSQ 040000 +PTPXIT 000227' +RUBOUT 000377 +RUN 200000 INT +RUNABL 204000 INT + PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE PAGE 9-3 + SYMBOL TABLE + +SETBYT 000047' EXT +SETIOD 000226' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT +VERTAB 000213 +WAIT1 000023' EXT + RRRRRRRRRRRR UUU UUU NNN NNN CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +RRRRRRRRRRRR UUU UUU NNN NNN CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +RRRRRRRRRRRR UUU UUU NNN NNN CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +RRR RRR UUU UUU NNN NNN CCC SSS SSS +RRR RRR UUU UUU NNN NNN CCC SSS SSS +RRR RRR UUU UUU NNN NNN CCC SSS SSS +RRR RRR UUU UUU NNNNNN NNN CCC SSS SSS +RRR RRR UUU UUU NNNNNN NNN CCC SSS SSS +RRR RRR UUU UUU NNNNNN NNN CCC SSS SSS +RRRRRRRRRRRR UUU UUU NNN NNN NNN CCC SSSSSSSSS SSSSSSSSS +RRRRRRRRRRRR UUU UUU NNN NNN NNN CCC SSSSSSSSS SSSSSSSSS +RRRRRRRRRRRR UUU UUU NNN NNN NNN CCC SSSSSSSSS SSSSSSSSS +RRR RRR UUU UUU NNN NNNNNN CCC SSS SSS +RRR RRR UUU UUU NNN NNNNNN CCC SSS SSS +RRR RRR UUU UUU NNN NNNNNN CCC SSS SSS +RRR RRR UUU UUU NNN NNN CCC SSS SSS +RRR RRR UUU UUU NNN NNN CCC SSS SSS +RRR RRR UUU UUU NNN NNN CCC SSS SSS +RRR RRR UUUUUUUUUUUUUUU NNN NNN CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +RRR RRR UUUUUUUUUUUUUUU NNN NNN CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +RRR RRR UUUUUUUUUUUUUUU NNN NNN CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :RUNCSS.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:24 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2283 +File will be deleted after printing + RUNCSS - RUN CONTROL SUBROUTINES PAGE 1 + T. HASTINGS 8-16-65 + + 00010 XLIST + 01930 LIST + RUNCSS - RUN CONTROL SUBROUTINES PAGE 7 + T. HASTINGS 8-16-65 + + + 00010 TITLE RUNCSS - RUN CONTROL SUBROUTINES + 00020 SUBTTL T. HASTINGS 8-16-65 + 00030 EXTERNAL APRCHN,APRCHL,CH6SAC,JBTADR,JOB,JOBAC,JOBDAT,JOBN + 00040 EXTERNAL JOBPDP,USRDDT,USRPDP,JOBDDT + 00050 EXTERNAL IORELS,JBTSTS,JOBADR,JOBCDP,JOBPC,JOBREL,JOBSA,JOBSYM + 00060 EXTERNAL MESPNT,QUANT1,JOBDAC,TTYSTR,STOPU,SCHEDF + 00070 EXTERNAL UXIT,IOCOMP,DCREQ,DCAVAL,DTREQ,DTAVAL,MTREQ,MTAVAL + 00080 EXTERNAL CH1XIT,CH2XIT,CH3XIT,CH4XIT,CH5XIT,CH6XIT,CH7XIT + 00090 EXTERNAL JOBFF,MJOBPD,JOBPDL,IOCOMP,PJOBN,USRLO,USRLO1,USRHI + 00100 EXTERNAL TTYFNU,RSCHED + RUNCSS - RUN CONTROL SUBROUTINES PAGE 2 + T. HASTINGS 8-16-65 + + + 00130 ;EXIT UUO ROUTINE + + 00150 INTERNAL EXIT + 00160 EXTERNAL IORELS,TTYFNU,MESPNT,IOKILL + + 000000' 260140 000000* 00180 EXIT: PUSHJ PDP,IORELS ;RELEASE ALL DEVICES + 000001' 260140 000000* 00190 PUSHJ PDP,TTYFNU + 000002' 201100 000005' 00200 MOVEI TAC1,EXMESS + 000003' 260140 000000* 00210 PUSHJ PDP,MESPNT + 000004' 254000 000030' 00220 JRST HOLD ;STOP THIS USER IMMEDIATELY + + 000005' 00240 EXMESS: ASCIZ / + 000005' 064250 554222 00250 EXIT + 000006' 520321 200000 00260 / + 00270 ;RESET UUO ROUTINE + + 00290 INTERNAL RESET + + 000007' 260140 000000* 00310 RESET: PUSHJ PDP,IOKILL ;RELEASE ALL DEVICES + 000010' 260140 000230' 00320 PUSHJ PDP,SETUSR ;CLEAR PART OF JOB DATA AREA + 000011' 254000 000000* 00330 JRST UXIT ;AND RETURN TO CALLER + RUNCSS - RUN CONTROL SUBROUTINES PAGE 3 + T. HASTINGS 8-16-65 + + + + 00370 ;COMMON ERROR HANDLING ROUTINES + 00380 ;DEVDAT MUST BE SET UP TO TTY DDB ON WHICH TO PRINT ERROR MESSAGE + + 00400 ;HERE ON ERROR DETECTED AT INTERRUPT SERVICE LEVEL + 00410 ;0(PDP) CONTAINS ADR. OF DEVICE DATA BLOCK CAUSING ERROR + + 00430 ;CALL MOVE TAC, PI CHANNEL NO DETECTING ERROR + 00440 ; JRST HOLDI + + 00460 INTERNAL HOLDI,HOLD,HOLDI1 + + 000012' 200103 000000 00480 HOLDI: MOVE TAC1, 0(PDP) ;DEVICE DATA BLOCK + 000013' 135200 000266' 00490 LDB ITEM, [POINT 9, DEVCHR(TAC1), 8] ;GET JOB NUMBER + 000014' 261140 000001 00500 HOLDI1: PUSH PDP, TAC ;SAVE PI CHANNEL NO. + 000015' 260140 000032' 00510 PUSHJ PDP, HOLDSB + 000016' 262140 000001 00520 POP PDP, TAC + 000017' 254001 000020' 00530 JRST CHNTAB(TAC) ;GO RESTORE ACS AND DISMISS CHANNEL + + 000020' 254000 000000* 00550 CHNTAB: JRST RSCHED ;INTERRUPT ON CLOCK CHANNEL,RESCHEDULE + 000021' 254000 000000* 00560 JRST CH1XIT + 000022' 254000 000000* 00570 JRST CH2XIT + 000023' 254000 000000* 00580 JRST CH3XIT + 000024' 254000 000000* 00590 JRST CH4XIT + 000025' 254000 000000* 00600 JRST CH5XIT + 000026' 254000 000000* 00610 JRST CH6XIT + 000027' 254000 000000* 00620 JRST CH7XIT + + 00640 ;HERE ON ERROR FROM UUO LEVEL. ERROR MESSAGE ALREADY IN TTY BUFFER + + 00660 ;DAT=BYTE POINTER TO END OF MESSAGE; DEVDAT=TTY DEV. DATA BLOCK + 000030' 200200 000000* 00670 HOLD: MOVE ITEM, JOB ;NO. OF THIS JOB + 000031' 260140 000243' 00680 PUSHJ PDP,WAIT1 ;WAIT UNTIL TTY FINISHED + + 000032' 260140 000000* 00700 HOLDSB: PUSHJ PDP,CRLF + 000033' 260140 000000* 00710 PUSHJ PDP, TTYSTR ;START UP TTY TO PRINT ERROR MESSAGE + 00720 EXTERNAL CRLF + + 00740 ;ROUTINE TO STOP USER AND FLAG AS ERROR STOP + 00750 ;CALL: MOVE ITEM, JOB NUMBER + 00760 ; PUSHJ PDP,ESTOP + + + 00790 INTERNAL ESTOP + + 000034' 205040 002000 00810 ESTOP: MOVSI TAC,JERR ;SET ERROR BIT IN JOB STATUS + 000035' 436044 000000* 00820 IORM TAC, JBTSTS(ITEM) + 000036' 254000 000071' 00830 JRST STOP1 + RUNCSS - RUN CONTROL SUBROUTINES PAGE 4 + T. HASTINGS 8-16-65 + + + + 00870 ,BLOCK TRANSFER PROGRAM OVER LOADER + + 00890 INTERNAL LDRBLT + 00900 EXTERNAL USRREL + + 000002 00920 PGADR=2 ;AC CONTAINING BEGINNING OF PROGRAM(LOA + + 000037' 260140 000000* 00940 LDRBLT: PUSHJ PDP,IORELS + 000040' 550051 000002 00950 HRRZ TAC, PGADR (JDAT) ;ADD OFFSET TO SYMBOL TABLE P + 000041' 402011 000002 00960 SETZM PGADR(JDAT) ;THEN CLEAR SO SYSMAK WILL STILL WORK + 000042' 550240 000007 00970 HRRZ DAT,PROG + 000043' 270240 000001 00980 ADD DAT,TAC + 000044' 272045 000000* 00990 ADDM TAC,JOBSYM(DAT) + 000045' 504240 000007 01000 HRL DAT,PROG + 000046' 554045 000000* 01010 HLRZ TAC,JOBSA(DAT) + 000047' 313040 000000* 01020 CAMLE TAC,USRREL ;IS HIGHEST DESTINATION STILL IN USER A + 000050' 200040 000047* 01030 MOVE TAC,USRREL ;NO. MAKE SURE IT IS. + 000051' 207000 000005 01040 MOVSS DAT + 000052' 270040 000005 01050 ADD TAC,DAT + 000053' 270240 000267' 01060 ADD DAT,[XWD 30,30] ;MOVE PROGRAM DOWN + 000054' 251241 000000 01070 BLT DAT,(TAC) + 000055' 200051 000000* 01080 MOVE TAC,JOBDDT(JDAT) + 000056' 202040 000000* 01090 MOVEM TAC,USRDDT + 000057' 260140 000230' 01100 PUSHJ PDP,SETUSR + 000060' 260140 000001* 01110 PUSHJ PDP,TTYFNU + 000061' 201100 000064' 01120 MOVEI TAC1,LDRMES + 000062' 260140 000003* 01130 PUSHJ PDP,MESPNT + 000063' 254000 000030' 01140 JRST HOLD + + 000064' 01160 LDRMES: ASCIZ / + 000064' 064251 447602 01170 LOADER FINISHED + 000065' 422132 220214 + 000066' 446351 151620 + 000067' 426101 505000 01180 / + RUNCSS - RUN CONTROL SUBROUTINES PAGE 5 + T. HASTINGS 8-16-65 + + + + 01220 INTERNAL STOP1, STOP2, CONT1, START1 + + 000200 01240 PION=200 + 000400 01250 PIOFF=400 + + 01270 ;ROUTINE TO PUT CURRENT JOB IN IO WAIT + 01280 ;ROUTINE TO STOP CURRENT JOB + 01290 ;MAY BE CALLED FROM ANY LEVEL + 01300 ;CALL; PUSHJ PDP,STOP0 + 01310 ; RETURN ;RETURN HERE IMMEDIATELY, IF CALLED FRO + 01320 ;PRIORITY CHANNEL THAN CLOCK. OTHERWISE RETURN WHEN JOB IS RUNABLE AG + + 01340 INTERNAL STOP0 + + 000070' 200200 000030* 01360 STOP0: MOVE ITEM, JOB ;CURRENT JOB NUMBER + + 01380 ;ROUTINE TO STOP ANY JOB FROM BEING SCHEDULED + 01390 ;CALL: + 01400 ; MOVE ITEM, JOB NUMBER + 01410 ; PUSHJ PDP, STOP1 + 01420 ; EXIT ;RETURN HERE IMMEDIATELY, IF CALLED FROM HIGHER + 01430 ;PRIORITY CHANNEL THAN CLOCK, OTHERWISE RETURN WHEN JOB IC RUNABLE + 01440 ;CALLED WHEN CONTROL C TYPED OR ON ERROR MESSAGES + + 000071' 205040 200000 01460 STOP1: MOVSI TAC, RUN + 000072' 700600 000400 01470 CONO PI, PIOFF ;DONE AT INTERUPT LEVEL HIGHER THAN DT + 000073' 616044 000035* 01480 TDNN TAC, JBTSTS(ITEM) ;IS RUN BIT ON IN JOB STATUS + 000074' 254000 000105' 01490 JRST STOPA ;NO + 000075' 413044 000073* 01500 ANDCAB TAC, JBTSTS(ITEM) ;YES, SO CLEAR IT + 000076' 700600 000200 01510 CONO PI, PION + 000077' 603040 040000 01520 TLNE TAC, DTW ;WAITING TO USE DECTAPE + 000100' 370000 000000* 01530 SOS DTREQ ;YES, REDUCE REQUEST COUNT + 000101' 603040 020000 01540 TLNE TAC, DCW ;DATA CONTROL + 000102' 370000 000000* 01550 SOS DCREQ + 000103' 603040 010000 01560 TLNE TAC,MTW ;MAG TAPE + 000104' 370000 000000* 01570 SOS MTREQ + 000105' 700600 000200 01580 STOPA: CONO PI, PION ;MAKE SURE PI ON + 000106' 332000 000000* 01590 SKIPE SCHEDF ;IS CLOCK IN THE MIDDLE OF SCHEDULING + 000107' 254000 000112' 01600 JRST STOP2 ;YES, MAKE SURE THIS JOB WONT RUN + 000110' 312200 000070* 01610 CAME ITEM, JOB ;NO, IS THIS JOB CURRENT USER + 000111' 263140 000000 01620 POPJ PDP, ;NO + 01630 ;YES, MAKE CLOCK RESCHEDULE + + 01650 ;ROUTINE TO CAUSE CLOCK TO RESCHEDULE + 01660 ;CALL : + 01670 ; PUSHJ PDP, STOP2 + 01680 ; EXIT ;RETURN WHEN JOB RUNABLE AGAIN + + 01700 EXTERNAL PICLK + + 000112' 700600 000400 01720 STOP2: CONO PI, PIOFF ;PREVENT CLOCK INTERRUPT + RUNCSS - RUN CONTROL SUBROUTINES PAGE 5-1 + T. HASTINGS 8-16-65 + + 000113' 476000 000000* 01730 SETOM STOPU ;SET FLAG FOR CLOCK ROUTINE + 000114' 700600 000000* 01740 CONO PI,PICLK ;REQUEST CLOCK INTERRUPT AND TURN PI ON + 01750 ;CLOCK WILL TRAP IMMEDIATELY IF AT UUO + 000115' 263140 000000 01760 POPJ PDP, ;RETURN HERE WHEN JOB RUNABLE AGAIN + RUNCSS - RUN CONTROL SUBROUTINES PAGE 6 + T. HASTINGS 8-16-65 + + + + 01800 ;SUBROUTINE TO SETUP A MONITOR JOB TO BE RUN + 01810 ;JOB MUST HAVE CORE ASSIGNED + 01820 ;CALL: MOVE ITEM, JOB NUMBER + 01830 ; HRRI TAC1, ADDRESS OF MONITOR JOB(A SUBROUTINE) + 01840 ; HRLI TAC1, RETURN ADDRESS WHEN JOB FINISHED + 01850 ; PUSHJ PDP, MONJOB + 01860 ; RETURN IMMEDIATELY IF CALLED FROM CLOCK LEV OR HIGHER + + 01880 ;ALL ACS WILL BE SAVED FOR THE MONITOR JOB + + 01900 INTERNAL MONJOB + 01910 EXTERNAL JOBDAC,JOBDHI,JOBPDP,MJOBPD,JOBPDL,JBTADR + + 000116' 261140 000002 01930 MONJOB: PUSH PDP, TAC1 ;SAVE ARG. + 000117' 550444 000000* 01940 HRRZ JDAT,JBTADR(ITEM) ;ADDRESS OF JOBS DATA AREA + 000120' 201111 000000* 01950 MOVEI TAC1, JOBDAC(JDAT) ;SAVE 0-17 IN DUMP ACS + 000121' 251111 000000* 01960 BLT TAC1, JOBDHI(JDAT) ;IN JOB DATA AREA + 000122' 205100 000000* 01970 MOVSI TAC1,MJOBPD ;SET UP PD LIST IN JOB DATA AREA + 000123' 541111 000000* 01980 HRRI TAC1, JOBPDL(JDAT) + 000124' 554043 000000 01990 HLRZ TAC, (PDP) ;WITH RETURN AS FIRST ITEM + 000125' 261100 000001 02000 PUSH TAC1, TAC + 000126' 201051 000120* 02010 MOVEI TAC, JOBDAC(JDAT) + 000127' 202101 000003 02020 MOVEM TAC1,PDP(TAC) + 000130' 262140 000002 02030 POP PDP, TAC1 ;SET TO RUN + 000131' 405100 777777 02040 ANDI TAC1, 777777 ;FALL INTO STARTU + + 02060 ;ROUTINE TO START A JOB AND LEAVE CONSOLE IN COMMAND MODE + 02070 ;CALL: MOVE TAC1, START PC + 02080 ; MOVE ITEM, JOB NUMBER + 02090 ; PUSHJ PDP, STARTU + 02100 ; RETURN IMMEDIATELY + 02110 INTERNAL STARTM + 02120 EXTERNAL TTYURC + + 000132' 260140 000140' 02140 STARTM: PUSHJ PDP, START1 + 000133' 254000 000000* 02150 JRST TTYURC + + 02170 ;START WITH TTY IN USER MODE + + 02190 INTERNAL STARTU + 02200 EXTERNAL TTYSET + + 000134' 260140 000140' 02220 STARTU: PUSHJ PDP,START1 + 000135' 254000 000000* 02230 JRST TTYSET ;SET SCANNER TO CALL SETRUN WHEN + 02240 ;CR-LF AND INITIALIZE TTY + + 02260 INTERNAL CONTM + 02270 EXTERNAL TTYURC + + 000136' 254000 000133* 02290 CONTM: JRST TTYURC + + RUNCSS - RUN CONTROL SUBROUTINES PAGE 6-1 + T. HASTINGS 8-16-65 + + 02310 ;ROUTINE TO CONTINUE A JOB FROM COMMAND MODE + 02320 ;CALL: MOVE ITEM, JOB NUMBER + 02330 ; PUSHJ PDP, CONTU + 02340 ; RETURN IMMEDIATELY + 02350 INTERNAL CONTU + 02360 EXTERNAL TTYURC + + 000137' 254000 000136* 02380 CONTU: JRST TTYURC ;SET SCANNER TO CALL SETRUN WHEN CR-LF + RUNCSS - RUN CONTROL SUBROUTINES PAGE 7 + T. HASTINGS 8-16-65 + + + + 02420 ;ROUTINE TO SET JOB STATE TO BE SCHEDULED TO RUN + 02430 ;WITH SPECIFIED STARTING ADDRESS INCLUDING PC FLAGS + 02440 ;CALL: MOVE TAC1,STARTING PC + 02450 ; MOVE ITEM, JOB NUMBER + 02460 ; MOVE JDAT, ADDRESS OF JOBS DATA AREA(THERE MUST BE ONE) + 02470 ; PUSHJ PDP, START1 + 02480 ; EXIT RETURN HERE IMMEDIATELY + + 000140' 200051 000000* 02500 START1: MOVE TAC,JOBPC(JDAT) ;GET OLD PC + 000141' 202111 000140* 02510 MOVEM TAC1,JOBPC(JDAT) ;STORE NEW PC + 000142' 603100 010000 02520 TLNE TAC1,USRMOD ;IS NEW PC IN USER AREA? + 000143' 603040 010000 02530 TLNE TAC,USRMOD ;YES, WAS OLD PC IN USER AREA + 000144' 254000 000150' 02540 JRST START2 ;YES,DUMP ACS ARE HIS + 000145' 205111 000000 02550 MOVSI TAC1,(JDAT) ;NO, UUO ACS ARE HIS + 000146' 541111 000126* 02560 HRRI TAC1,JOBDAC(JDAT) ;MOVE THEM TO DUMP ACS + 000147' 251111 000121* 02570 BLT TAC1,JOBDHI(JDAT) + 000150' 205100 172000 02580 START2: MOVSI TAC1,JERR+DCW+DTW+MTW+JIOW ;CLEAR WAIT BITS + 000151' 412044 000075* 02590 ANDCAM TAC, JBTSTS(ITEM) ;IN JOB STATUS WORD + + 02610 ;ROUTINE TO CONTINUE ANY JOB AT CURRENT PC + 02620 ;CALL: + 02630 ; MOVE ITEM, JOB NUMBER + 02640 ; PUSHJ PDP, CONT1 + 02650 ; EXIT RETURN IMMEDIATELY + + 000152' 263140 000000 02670 CONT1: POPJ PDP, + RUNCSS - RUN CONTROL SUBROUTINES PAGE 8 + T. HASTINGS 8-16-65 + + + + 02710 ;ROUTINE TO SET JOB STATUS RUN BIT + 02720 ;CALL: MOVE ITEM,JOB NUMBER + 02730 ; PUSHJ PDP,SETRUN + + 02750 INTERNAL SETRUN + 000153' 205040 200000 02760 SETRUN: MOVSI TAC,RUN + 000154' 437044 000151* 02770 IORB TAC,JBTSTS(ITEM) + 000155' 607040 020000 02780 TLNN TAC,DCW ;IS JOB WAITING FOR DATA CONTROL? + 000156' 254000 000161' 02790 JRST CONT2 ;NO + 000157' 357000 000102* 02800 AOSG DCREQ ;YES, INCREMENT REQUEST COUNT + 000160' 476000 000000* 02810 SETOM DCAVAL ;AND SET DC AS AVAIL IF NOT IN USE + 000161' 607040 040000 02820 CONT2: TLNN TAC,DTW ;DECTAPE? + 000162' 254000 000165' 02830 JRST CONT3 ;NO + 000163' 357000 000100* 02840 AOSG DTREQ + 000164' 476000 000000* 02850 SETOM DTAVAL + 000165' 607040 010000 02860 CONT3: TLNN TAC,MTW ;MAG TAPE? + 000166' 254000 000171' 02870 JRST CONT4 + 000167' 357000 000104* 02880 AOSG MTREQ + 000170' 476000 000000* 02890 SETOM MTAVAL + 000171' 603040 400000 02900 CONT4: TLNE TAC,IOWS ;IO WAIT SATISFIED? + 000172' 350000 000000* 02910 AOS IOCOMP ;YES + 000173' 201040 000000* 02920 MOVEI TAC,QUANT1 ;SET TIME TO RUN FOR STRAIGHT QUEUE COM + 000174' 542044 000154* 02930 HRRM TAC,JBTSTS(ITEM) ;RESPONSE IS FINISHED + 000175' 332000 000110* 02940 SKIPE JOB ;IS NULL JOB RUNNING? + 000176' 263140 000000 02950 POPJ PDP, ;NO + 000177' 254000 000112' 02960 JRST STOP2 ;YES, RESCHEDULE + RUNCSS - RUN CONTROL SUBROUTINES PAGE 9 + T. HASTINGS 8-16-65 + + + + 03000 ,ROUTINE TO INIATE A WAIT FOR MAG TAPE. DECTAPE, AND DATA CONTROL AC + 03010 INTERNAL MTWAIT + 000200' 261140 000002 03020 MTWAIT: PUSH PDP,TAC1 + 000201' 515100 010000 03030 HRLZI TAC1,MTW + 000202' 261140 000001 03040 DVWAIT: PUSH PDP, TAC + 000203' 200040 000175* 03050 MOVE TAC,JOB + 000204' 436101 000174* 03060 IORM TAC1,JBTSTS(TAC) + 000205' 260140 000112' 03070 PUSHJ PDP,STOP2 + 000206' 262140 000001 03080 POP PDP,TAC + 000207' 262140 000002 03090 POP PDP,TAC1 + 000210' 263140 000000 03100 POPJ PDP, + 03110 INTERNAL DTWAIT + 000211' 261140 000002 03120 DTWAIT: PUSH PDP,TAC1 + 000212' 515100 040000 03130 HRLZI TAC1,DTW + 000213' 254000 000202' 03140 JRST DVWAIT + 03150 INTERNAL DCWAIT + 000214' 261140 000002 03160 DCWAIT: PUSH PDP,TAC1 + 000215' 515100 020000 03170 HRLZI TAC1,DCW + 000216' 254000 000202' 03180 JRST DVWAIT + 03190 INTERNAL DVWAIT + RUNCSS - RUN CONTROL SUBROUTINES PAGE 10 + T. HASTINGS 8-16-65 + + + + + 03240 ,DEC 06 00 EX JOB L PT PRE 02 SETIOD + 03250 ,H.R. MORSE 64-12-26 + 03260 ,CALLING SEQUENCE + 03270 , PUSHJ PDP, SETIOD + 03280 , EXIT ALWAYS RETURNS HERE + 03290 ,SETS THEBIT (IOWS:=1) IN THE JOB STATUS WORD (JBTSTS) + 03300 ,INFORMING THE SYSTEM THAT AN I/O WAIT HAS BEEN COMPLETED + 03310 ,AND THE JOB IS READY TO RUN AGAIN. + 03320 ,MONITOR INTERFACE + 03330 , STORAGE: 6 + 03340 , SYMBOLS SET/USED: + 03350 , ACCUMULATORS: DEVDAT U TAC S/U + 03360 , PDP U TAC1 S/U + 03370 , DEVICE DATA BLOCK: DEVCHR U + 03380 , SYSTEM DATA STORAGE: JBTSTS S/U + 03390 , JOB STATUS WORD: IOWS S + 03400 INTERNAL SETIOD + + 000217' 350000 000172* 03420 SETIOD: AOS IOCOMP + 000220' 135040 000000* 03430 LDB TAC,PJOBN + 000221' 205100 400000 03440 MOVSI TAC1, IOWS ;SET IO-WAIT SATISFIED BIT + 000222' 436101 000204* 03450 IORM TAC1, JBTSTS(TAC) + 000223' 205100 100000 03460 MOVSI TAC1, JIOW ;CLEAR JOB IO-WAIT BIT + 000224' 412101 000222* 03470 ANDCAM TAC1, JBTSTS(TAC) + 000225' 336000 000203* 03480 SKIPN JOB ;IS NULL JOB RUNNING + 000226' 254000 000112' 03490 JRST STOP2 ;YES, FORCE CLOCK TO RE-SCHED + 000227' 263140 000000 03500 POPJ PDP,; RETURN + RUNCSS - RUN CONTROL SUBROUTINES PAGE 11 + T. HASTINGS 8-16-65 + + + + + 03550 ;SET CURRENT JOB AREA IN SYSTEM AREA + + 03570 INTERNAL SETUSR + + 000230' 541040 000000* 03590 SETUSR: HRRI TAC,USRLO1 + 000231' 505040 000000* 03600 HRLI TAC,USRLO + 000232' 402000 000231* 03610 SETZM USRLO + 000233' 251040 000000* 03620 BLT TAC,USRHI + 000234' 205040 000122* 03630 MOVSI TAC,MJOBPD + 000235' 541040 000123* 03640 HRRI TAC,JOBPDL + 000236' 202040 000000* 03650 MOVEM TAC,USRPDP + 000237' 200440 000000* 03660 MOVE JDAT,JOBDAT + 000240' 544051 000046* 03670 HLR TAC,JOBSA(JDAT) + 000241' 542051 000000* 03680 HRRM TAC,JOBFF(JDAT) + 000242' 263140 000000 03690 POPJ PDP, + RUNCSS - RUN CONTROL SUBROUTINES PAGE 12 + T. HASTINGS 8-16-65 + + + + 03730 ,DEC 06 00 EX COM L PT PRE 02 WAIT1,WSYNC + 03740 ,H.R. MORSE 64-12-26 + 03750 ,CALLING SEQUENCE + 03760 , PUSHJ PDP, WAIT1 + 03770 , EXIT ALWAYS RETURNS HERE + + 03790 ,IF THE DEVICE IS INACTIVE (IOACT=0), RETURNS TO EXIT. OTHERWISE, SET + 03800 ,IOW:=1 AND ENTERS WAIT UNLESS IOACT BECOMES ZERO BEFORE THE + 03810 ,JUMP IS MADE, IN WHICH CHASEIT SETS IOW:=0 AND RETURNS TO EXIT. + 03820 ,ON LEAVING THE WAIT STAT, RETURNS TO EXIT. + 03830 ,THIS ROUTINE PREVENTS THE STATE IOACT=0 AND IOW=1 FROM OCCURING + 03840 ,CALLING SEQUENCE + 03850 , PUSHJ PDP, WSYNC + 03860 , EXIT ALWAYS RETURNS HERE + 03870 ,SETS IOW:=1 AND ENTERS WAIT ROUTINE. RETURNS TO EXIT WHEN IOACT=0. + 03880 ,MONITOR INTERFACE + 03890 , STORAGE: 13 + 03900 , ROUTINES CALLED: WAIT + 03910 , SYMBOLS SET/USED: + 03920 , ACCUMULATORS: DEVDAT U PDP U + 03930 , IOS S/U TAC S/U + 03940 , DEVICE DATA BLOCK: DEVIOS S/U + 03950 , IO STATUS WORD: IOACT U + 03960 , IOW S/U + RUNCSS - RUN CONTROL SUBROUTINES PAGE 13 + T. HASTINGS 8-16-65 + + + + 04000 INTERN WAIT1, WSYNC + + 04020 ; WAIT1 WAITS UNTIL DEVICE IS COMPLETELY INACTIVE BEFORE RETURNING + 000243' 200006 000002 04030 WAIT1: MOVE IOS,DEVIOS(DEVDAT) + 000244' 606000 010000 04040 TRNN IOS, IOACT ;IS DEVICE ACTIVE? (IOACT=1?) + 000245' 263140 000000 04050 POPJ PDP,; RETURN + 000246' 260140 000250' 04060 PUSHJ PDP,WSYNC; WAIT + 000247' 254000 000243' 04070 JRST WAIT1 + + 04090 ;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE + 04100 ;IE UNTIL CURRENT BUFFER ACTIVITY IS COMPLETED + 04110 ;DEVDAT MUST BE SET UP + + 000200 04130 PION=200 + 000400 04140 PIOFF=400 + + 04160 WSYNC: REPEAT 0,< PUSH PDP, TAC ;MUST THESE BE SAVED? + 04170 PUSH PDP, TAC1 + 04180 PUSH PDP, DAT> + + 000250' 205000 000001 04200 MOVSI IOS, IOW + 000251' 205640 100000 04210 MOVSI AC1, JIOW + 000252' 200700 000225* 04220 MOVE AC2, JOB + 000253' 201740 010000 04230 MOVEI AC3, IOACT + 000254' 700600 000400 04240 CONO PI, PIOFF ;TURN PI OFF + 000255' 616746 000002 04250 TDNN AC3, DEVIOS(DEVDAT) ;IS THE DEVICE ACTIVE? + 000256' 254000 000263' 04260 JRST WSYNC1 ;NO + 000257' 436006 000002 04270 IORM IOS, DEVIOS(DEVDAT) ;YES, SET DEVICE IO-WAIT BIT + 000260' 436656 000224* 04280 IORM AC1, JBTSTS(AC2) ;AND JOB IO-WAIT BIT + 000261' 700600 000200 04290 CONO PI, PION ;TURN PI ON + 000262' 260140 000112' 04300 PUSHJ PDP, STOP2 ;STOP THIS USER BY FORCING CL + 04310 ;RETURN WHEN IO-WAIT FINISHED + 000263' 700600 000200 04320 WSYNC1: CONO PI, PION + 000264' 413006 000002 04330 ANDCAB IOS, DEVIOS(DEVDAT) ;CLEAR DEVICE IO-WAIT BIT + 04340 REPEAT 0,< POP PDP, DAT + 04350 POP PDP, TAC1 + 04360 POP PDP, TAC> + + 000265' 263140 000000 04380 POPJ PDP, + + 04400 END, + 000266' 331102 000001 + 000267' 000030 000030 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000270 + +8K CORE USED + RUNCSS - RUN CONTROL SUBROUTINES PAGE 14 + SYMBOL TABLE + + 000317 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APRCHL 000000 EXT +APRCHN 000000 EXT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CH1XIT 000021' EXT +CH2XIT 000022' EXT +CH3XIT 000023' EXT +CH4XIT 000024' EXT +CH5XIT 000025' EXT +CH6SAC 000000 EXT +CH6XIT 000026' EXT +CH7XIT 000027' EXT +CHNTAB 000020' +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CONT1 000152' INT +CONT2 000161' +CONT3 000165' +CONT4 000171' +CONTM 000136' INT +CONTU 000137' INT +CRLF 000032' EXT +D 000017 INT +DAT 000005 INT +DCAVAL 000160' EXT +DCL 000001 INT +DCREQ 000157' EXT +DCW 020000 INT +DCWAIT 000214' INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT + RUNCSS - RUN CONTROL SUBROUTINES PAGE 14-1 + SYMBOL TABLE + +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTAVAL 000164' EXT +DTREQ 000163' EXT +DTW 040000 INT +DTWAIT 000211' INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +DVWAIT 000202' INT +ENTRB 020000 INT +ESTOP 000034' INT +EXIT 000000' INT +EXMESS 000005' +HOLD 000030' INT +HOLDI 000012' INT +HOLDI1 000014' INT +HOLDSB 000032' +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCOMP 000217' EXT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT + RUNCSS - RUN CONTROL SUBROUTINES PAGE 14-2 + SYMBOL TABLE + +IOKILL 000007' EXT +IONRCK 000100 INT +IORDEL 000100 INT +IORELS 000037' EXT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000117' EXT +JBTSTS 000260' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000252' EXT +JOBAC 000000 EXT +JOBADR 000000 EXT +JOBCDP 000000 EXT +JOBDAC 000146' EXT +JOBDAT 000237' EXT +JOBDDT 000055' EXT +JOBDHI 000147' EXT +JOBFF 000241' EXT +JOBN 000000 EXT +JOBPC 000141' EXT +JOBPDL 000235' EXT +JOBPDP 000000 EXT +JOBREL 000000 EXT +JOBSA 000240' EXT +JOBSYM 000044' EXT +LDRBLT 000037' INT +LDRMES 000064' +LOOKB 040000 INT +MESPNT 000062' EXT +MJOBPD 000234' EXT +MONJOB 000116' INT +MTAVAL 000170' EXT +MTREQ 000167' EXT +MTW 010000 INT +MTWAIT 000200' INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PGADR 000002 +PI 000004 SPD + RUNCSS - RUN CONTROL SUBROUTINES PAGE 14-3 + SYMBOL TABLE + +PICHN 000100 INT +PICLK 000114' EXT +PIOFF 000400 +PION 000200 +PJOBN 000220' EXT +PROG 000007 INT +QUANT1 000173' EXT +RESET 000007' INT +RSCHED 000020' EXT +RUN 200000 INT +RUNABL 204000 INT +SCHEDF 000106' EXT +SETIOD 000217' INT +SETRUN 000153' INT +SETUSR 000230' INT +START1 000140' INT +START2 000150' +STARTM 000132' INT +STARTU 000134' INT +STOP0 000070' INT +STOP1 000071' INT +STOP2 000112' INT +STOPA 000105' +STOPU 000113' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYFNU 000060' EXT +TTYSET 000135' EXT +TTYSTR 000033' EXT +TTYURC 000137' EXT +TTYUSE 010000 INT +USRDDT 000056' EXT +USRHI 000233' EXT +USRLO 000232' EXT +USRLO1 000230' EXT +USRMOD 010000 INT +USRPDP 000236' EXT +USRREL 000050' EXT +UUO 000014 INT +UXIT 000011' EXT +WAIT1 000243' INT +WSYNC 000250' INT +WSYNC1 000263' + SSSSSSSSSSSS AAAAAAAAA VVV VVV GGGGGGGGGGGG EEEEEEEEEEEEEEE TTTTTTTTTTTTTTT + SSSSSSSSSSSS AAAAAAAAA VVV VVV GGGGGGGGGGGG EEEEEEEEEEEEEEE TTTTTTTTTTTTTTT + SSSSSSSSSSSS AAAAAAAAA VVV VVV GGGGGGGGGGGG EEEEEEEEEEEEEEE TTTTTTTTTTTTTTT +SSS AAA AAA VVV VVV GGG EEE TTT +SSS AAA AAA VVV VVV GGG EEE TTT +SSS AAA AAA VVV VVV GGG EEE TTT +SSS AAA AAA VVV VVV GGG EEE TTT +SSS AAA AAA VVV VVV GGG EEE TTT +SSS AAA AAA VVV VVV GGG EEE TTT + SSSSSSSSS AAA AAA VVV VVV GGG EEEEEEEEEEEE TTT + SSSSSSSSS AAA AAA VVV VVV GGG EEEEEEEEEEEE TTT + SSSSSSSSS AAA AAA VVV VVV GGG EEEEEEEEEEEE TTT + SSS AAAAAAAAAAAAAAA VVV VVV GGG GGGGGGGGG EEE TTT + SSS AAAAAAAAAAAAAAA VVV VVV GGG GGGGGGGGG EEE TTT + SSS AAAAAAAAAAAAAAA VVV VVV GGG GGGGGGGGG EEE TTT + SSS AAA AAA VVV VVV GGG GGG EEE TTT + SSS AAA AAA VVV VVV GGG GGG EEE TTT + SSS AAA AAA VVV VVV GGG GGG EEE TTT +SSSSSSSSSSSS AAA AAA VVV GGGGGGGGG EEEEEEEEEEEEEEE TTT +SSSSSSSSSSSS AAA AAA VVV GGGGGGGGG EEEEEEEEEEEEEEE TTT +SSSSSSSSSSSS AAA AAA VVV GGGGGGGGG EEEEEEEEEEEEEEE TTT + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :SAVGET.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:24 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2263 +File will be deleted after printing + SAVGET- SAVE AND GET COMMANDS PAGE 1 + T.HASTINGS 8-4-64 + + 00010 XLIST + 01930 LIST + SAVGET- SAVE AND GET COMMANDS PAGE 7 + T.HASTINGS 8-4-64 + + + + 00020 TITLE SAVGET- SAVE AND GET COMMANDS + 00030 SUBTTL T.HASTINGS 8-4-64 + 00040 ;ROUTINE TO SET UP SAVE-GET DEVICE FILE-NAME TABLE + 00050 ;CALLED BY COMMAND SETUP ROUTINES AND SAVE GET + + 00070 INTERNAL SGSET + 00080 EXTERNAL CTEXT1,SETUSR,HOLD,MONJOB + 00090 EXTERNAL CONMES,NOTENF,CPOPJ1 + + 000000' 261140 000002 00110 SGSET: PUSH PDP, TAC1 ;SAVE STARTTING ADDRESS(SAVJOB OR GETJOB) + 000001' 260140 000000* 00120 PUSHJ PDP, CTEXT1 ;GET DEVICE NAME FROM COMMAND STRING + 000002' 322100 000012' 00130 JUMPE TAC1,SGSET1 + 000003' 202107 000017 00140 MOVEM TAC1, 17(PROG) ;SAVE IN UUO AC AREA + 000004' 260140 000001* 00150 PUSHJ PDP, CTEXT1 ;GET FILE NAME FROM COMMAND STRING + 000005' 322100 000012' 00160 JUMPE TAC1,SGSET1 + 000006' 202107 000014 00170 MOVEM TAC1, 14(PROG) + 000007' 262140 000002 00180 POP PDP, TAC1 ;SCHEDULE MONITOR JOB + 000010' 260140 000000* 00190 PUSHJ PDP, MONJOB + 000011' 254000 000000* 00200 JRST CPOPJ1 ;SUPPRESS CR-LF PRINTED BY COMINI + + 000012' 262140 000002 00220 SGSET1: POP PDP,TAC1 + 000013' 254000 000000* 00230 JRST NOTENF + SAVGET- SAVE AND GET COMMANDS PAGE 2 + T.HASTINGS 8-4-64 + + + + 00270 ;THIS JOB SAVES A JOB AREA ON RETRIEVABLE STORAGE + 00280 ;THIS JOB RUNS IN EXEC. MODE AND CALLS IO ROUTINES DIRECTLY + 00290 ;NO ATTTEMPT IS MADE TO SAVE STATUS OF IO DEVICES, JOBPDP, OR ACS + 00300 ;IN FACT THE ONLY USEFUL THING WHICH MAY BE DONE WITH A JOB AREA + 00310 ;AFTER IT HAS BEEN SAVED IS TO START EXECUTION OVER AT THE STARTING + 00320 ;ADDRESS + + 00340 INTERNAL SAVJOB + 00350 EXTERNAL USRPDP, OUT, USRREL,JOBPFI,JOB41,JOBS41,THSDAT + + 000012 00370 T=BUFPNT ;TEMPORARY ACS + 000013 00380 T1=BUFWRD + + 000014' 265040 000076' 00400 SAVJOB: JSP TAC, SG1 ;SET UP ACS AND ASSIGN DEVICE + 000015' 200551 000000* 00410 MOVE T1,JOB41(JDAT) ;SAVE USR UUOI HANDLING JSR + 000016' 202551 000000* 00420 MOVEM T1,JOBS41(JDAT) + 000017' 200540 000000* 00430 MOVE T1,THSDAT ;SET DATE IN THIRD WORD + 000020' 202547 000016 00440 MOVEM T1,16(PROG) + 000021' 260152 000004 00450 PUSHJ PDP, DEN(T) ;ENTER FILE NAME IN DIRECTORY + 000022' 254000 000031' 00460 JRST SAV4 ;DIRECTORY FULL + 000023' 260140 000134' 00470 PUSHJ PDP, SETLST ;SET DUMP COMMAND LIST IN USER ARE + 000024' 260140 000000* 00480 PUSHJ PDP, OUT ;DO AN OUTPUT + 000025' 265040 000054' 00490 JSP TAC,SG2 + + 000026' 452370 220246 00510 ASCIZ /JOB SAVED + 000027' 406550 542032 + 000030' 050000 000000 00520 / + 000031' 265040 000054' 00530 SAV4: JSP TAC,SG2 + + 000032' 422232 242606 00550 ASCIZ /DIRECTORY FULL + 000033' 522372 254500 + 000034' 432531 446032 + 000035' 050000 000000 00560 / + SAVGET- SAVE AND GET COMMANDS PAGE 3 + T.HASTINGS 8-4-64 + + + + + 00610 ;THIS JOB GETS A JOB AREA FROM RETRIEVABLE DEVICE + 00620 ;THIS JOB RUNS IN EXEC. MODE AND CALLS IO ROUTINES DIRECTLY + 00630 ;NO ATTEMPT IS MADE TO RESTORE STATUS OF IO DEVICES, PC, OR ACS + 00640 ;JOBPC IS SET TO STARTING ADDRESS OF JOB + 00650 ;CORE MUST ALREADY HAVE BEEN ASSIGNED AND THE FOLLOWING LOC. SETUP IN + 00660 ;JOB DATA AREA: + 00670 ;JOBPDP, JOBREL + + 00690 INTERNAL GETJOB + 00700 EXTERNAL USRREL, IN + + 000036' 265040 000076' 00720 GETJOB: JSP TAC, SG1 ;SETUP ACS AND ASSIGN DEVICE + 000037' 260152 000005 00730 PUSHJ PDP, DLK(T) ;LOOKUP FILE NAME IN DIRECTORY + 000040' 254000 000047' 00740 JRST GET2 ;NOT FOUND + 000041' 260140 000134' 00750 PUSHJ PDP, SETLST ;SET DUMP COMMAND LIST IN USER ARE + 000042' 260140 000000* 00760 PUSHJ PDP, IN ;DO AN INPUT + 000043' 265040 000054' 00770 JSP TAC,SG2 + + 000044' 452370 220246 00790 ASCIZ /JOB SETUP + 000045' 426512 550032 + 000046' 050000 000000 00800 / + + 000047' 265040 000054' 00820 GET2: JSP TAC,SG2 + + 000050' 432231 442500 00840 ASCIZ /FILE NOT FOUND + 000051' 472372 420214 + 000052' 476531 642032 + 000053' 050000 000000 00850 / + SAVGET- SAVE AND GET COMMANDS PAGE 4 + T.HASTINGS 8-4-64 + + + + 00890 ;ROUTINE TERMINATES SAVJOB AND GETJOB + 00900 ;CLOSE, RELEASE, CHECK FOR ERRORS AND PRINT MESSAGE AND STOP JOB + 00910 ;ADDRESS OF MESSAGE IN AC TAC + + 00930 EXTERNAL RELEA2, SETUSR, TTYFNU, WAIT1,JOBS41,JOB41 + + 740000 00950 ERRORS=1B18+1B19+1B20+1B21 ;ERRORS CHECKED FOR IN IO TRANSMISSION + + 000054' 260140 000000* 00970 SG2: PUSHJ PDP, WAIT1 + 000055' 602000 740000 00980 TRNE IOS, ERRORS ;ANY ERRORS? + 000056' 254000 000070' 00990 JRST SG2A ;AN ERROR + 000057' 261140 000001 01000 PUSH PDP,TAC ;SAVE PRINT ADDRESS + 000060' 260140 000000* 01010 PUSHJ PDP,RELEA2 ;RELEASE DEVICE + 000061' 260140 000000* 01020 PUSHJ PDP,SETUSR ;SETUP COPY OF JOB AREA STORED IN SYSTE + 000062' 200051 000016* 01030 MOVE TAC,JOBS41(JDAT) + 01040 ;RESTORE USER LOCATION 41 + 000063' 202051 000015* 01050 MOVEM TAC,JOB41(JDAT) + 000064' 260140 000000* 01060 SG4: PUSHJ PDP,TTYFNU ;FIND TELETYPE + 000065' 262140 000001 01070 POP PDP,TAC ;RESTORE PRINT MESSAGE ADDRESS + 000066' 260140 000000* 01080 SG5: PUSHJ PDP,CONMES + 000067' 254000 000000* 01090 JRST HOLD + + 000070' 265040 000064' 01110 SG2A: JSP TAC,SG4 + + 000071' 522450 147246 01130 ASCIZ /TRANSMISSION ERROR + 000072' 466232 351622 + 000073' 476344 042644 + 000074' 512372 206424 01140 / + 000075' 000000 000000 + SAVGET- SAVE AND GET COMMANDS PAGE 5 + T.HASTINGS 8-4-64 + + + + 01180 ;ROUTINE CALED BY SAVJOB AND GETJOBTO SETUP ACS + 01190 ;AND ASSIGN DEVICE + 01200 ;CALL JSP TAC, SG1 + + 01220 EXTERNAL JOBDAT, JOB, UINIT1, WAIT1, JOBADR, RESET + + 000076' 505140 777763 01240 SG1: HRLI PDP, -15 ;SET UP PD LIST IN UUO ACS + 000077' 541147 777777 01250 HRRI PDP, -1(PROG) + 000100' 261140 000001 01260 PUSH PDP, TAC ;SAVE RETURN ADDRESS + 000101' 260140 000000* 01270 PUSHJ PDP, RESET ;DO RESET UUO + 000102' 201600 000017 01280 MOVEI UUO, D ;DUMP MODE + 000103' 200047 000017 01290 MOVE TAC, 17(PROG) ;DEVICE NAME + 000104' 201340 000000 01300 MOVEI PROG, 0 ;PRETEND RELOC. IS 0 + 000105' 260140 000000* 01310 PUSHJ PDP, UINIT1 ;ASSIGN DEVICE + 000106' 000000 000000 01320 0 ;IBF,OBF + 000107' 254000 000124' 01330 JRST SGERRA ;NOT AVAILABLE + 000110' 200006 000002 01340 MOVE IOS, DEVIOS(DEVDAT) ;SETUP IOS + 000111' 201600 000014 01350 MOVEI UUO,14 ;REL.ADDRESS OF 4 WORD DIRECTORY ENTRY + 000112' 200340 000000* 01360 MOVE PROG, JOBADR ;RESTORE PROG + 000113' 205500 445560 01370 MOVSI T,445560 ;SET FILE EXTENSION TO DMP + 000114' 202507 000015 01380 MOVEM T, 15(PROG) + 000115' 402007 000016 01390 SETZM 16(PROG) + 000116' 210540 000000* 01400 MOVN T1,USRREL ;SET NEG. WORD COUNT FROM JOBREL + 000117' 271540 000000* 01410 ADDI T1,JOBPFI ;DONT DUMP LOC. 0-JOBPFI + 000120' 505540 000117* 01420 HRLI T1,JOBPFI + 000121' 206547 000017 01430 MOVSM T1,17(PROG) ;STORE IN 4TH WORD OF DICECTORY + 000122' 200506 000003 01440 MOVE T, DEVSER(DEVDAT) ;SETUP FOR DOING ENTRY OF LOO + 000123' 263140 000000 01450 POPJ PDP, + + 000124' 201040 000127' 01470 SGERRA: MOVEI TAC,SGNAVL + 000125' 261140 000001 01480 PUSH PDP,TAC + 000126' 254000 000066' 01490 JRST SG5 + + 000127' 422132 644606 01510 SGNAVL: ASCIZ /DEVICE NOT AVAILABLE + 000130' 425011 647650 + 000131' 202032 640622 + 000132' 462030 246212 + 000133' 064240 000000 01520 / + SAVGET- SAVE AND GET COMMANDS PAGE 6 + T.HASTINGS 8-4-64 + + + + + 01570 ;ROUTINE TO SET DUMP MODE COMMAND LIST IN USER AREA + + 01590 EXTERNAL ANYRDX,RELEA2,TTYFNU + + 000134' 200507 000017 01610 SETLST: MOVE T, 17(PROG) ;4TH WORD FROM DIRECTORY + 000135' 202507 000016 01620 MOVEM T, 16(PROG) + 000136' 402007 000017 01630 SETZM 17(PROG) + 000137' 574500 000012 01640 HLRE T, T + 000140' 270500 000116* 01650 ADD T, USRREL + 000141' 321500 000144' 01660 JUMPL T, NOROOM + 000142' 201600 000016 01670 MOVEI UUO,16 ;DUMP MODE + 000143' 263140 000000 01680 POPJ PDP, + + 000144' 260140 000060* 01700 NOROOM: PUSHJ PDP,RELEA2 + 000145' 260140 000064* 01710 PUSHJ PDP,TTYFNU + 000146' 255000 000000 01720 JFCL + 000147' 574047 000016 01730 HLRE TAC, 16(PROG) ;PRINT NO. OF BLOCKS NEEDED + 000150' 213000 000001 01740 MOVNS TAC + 000151' 242040 777766 01750 LSH TAC, -12 + 000152' 271040 000001 01760 ADDI TAC, 1 + 000153' 201100 000012 01770 MOVEI TAC1, 12 + 000154' 260140 000000* 01780 PUSHJ PDP, ANYRDX + 000155' 265040 000066' 01790 JSP TAC,SG5 + + 000156' 201431 320204 01810 ASCIZ / 1K BLOCKS OF CORE NEEDED + 000157' 462370 345646 + 000160' 202370 620206 + 000161' 476450 520234 + 000162' 426130 442610 + 000163' 064240 000000 01820 / + 01830 END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000164 + +8K CORE USED + SAVGET- SAVE AND GET COMMANDS PAGE 7 + SYMBOL TABLE + + 000230 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ANYRDX 000154' EXT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CONMES 000066' EXT +CPOPJ1 000011' EXT +CTEXT1 000004' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT + SAVGET- SAVE AND GET COMMANDS PAGE 7-1 + SYMBOL TABLE + +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERRORS 740000 +GET2 000047' +GETJOB 000036' INT +HOLD 000067' EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +IN 000042' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000000 EXT +JOB41 000063' EXT +JOBADR 000112' EXT +JOBDAT 000000 EXT +JOBPFI 000120' EXT +JOBS41 000062' EXT + SAVGET- SAVE AND GET COMMANDS PAGE 7-2 + SYMBOL TABLE + +LOOKB 040000 INT +MONJOB 000010' EXT +MTW 010000 INT +NOROOM 000144' +NOTENF 000013' EXT +OBUFB 100000 INT +OUT 000024' EXT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PROG 000007 INT +RELEA2 000144' EXT +RESET 000101' EXT +RUN 200000 INT +RUNABL 204000 INT +SAV4 000031' +SAVJOB 000014' INT +SETLST 000134' +SETUSR 000061' EXT +SG1 000076' +SG2 000054' +SG2A 000070' +SG4 000064' +SG5 000066' +SGERRA 000124' +SGNAVL 000127' +SGSET 000000' INT +SGSET1 000012' +T 000012 +T1 000013 +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +THSDAT 000017' EXT +TTYATC 020000 INT +TTYFNU 000145' EXT +TTYUSE 010000 INT +UINIT1 000105' EXT +USRMOD 010000 INT +USRPDP 000000 EXT +USRREL 000140' EXT +UUO 000014 INT +WAIT1 000054' EXT + SSSSSSSSSSSS CCCCCCCCCCCC NNN NNN SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR + SSSSSSSSSSSS CCCCCCCCCCCC NNN NNN SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR + SSSSSSSSSSSS CCCCCCCCCCCC NNN NNN SSSSSSSSSSSS EEEEEEEEEEEEEEE RRRRRRRRRRRR +SSS CCC NNN NNN SSS EEE RRR RRR +SSS CCC NNN NNN SSS EEE RRR RRR +SSS CCC NNN NNN SSS EEE RRR RRR +SSS CCC NNNNNN NNN SSS EEE RRR RRR +SSS CCC NNNNNN NNN SSS EEE RRR RRR +SSS CCC NNNNNN NNN SSS EEE RRR RRR + SSSSSSSSS CCC NNN NNN NNN SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR + SSSSSSSSS CCC NNN NNN NNN SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR + SSSSSSSSS CCC NNN NNN NNN SSSSSSSSS EEEEEEEEEEEE RRRRRRRRRRRR + SSS CCC NNN NNNNNN SSS EEE RRR RRR + SSS CCC NNN NNNNNN SSS EEE RRR RRR + SSS CCC NNN NNNNNN SSS EEE RRR RRR + SSS CCC NNN NNN SSS EEE RRR RRR + SSS CCC NNN NNN SSS EEE RRR RRR + SSS CCC NNN NNN SSS EEE RRR RRR +SSSSSSSSSSSS CCCCCCCCCCCC NNN NNN SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +SSSSSSSSSSSS CCCCCCCCCCCC NNN NNN SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR +SSSSSSSSSSSS CCCCCCCCCCCC NNN NNN SSSSSSSSSSSS EEEEEEEEEEEEEEE RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :SCNSER.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:24 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2253 +File will be deleted after printing + SCNSER - SCANNER SERVICE PAGE 1 + TOM EGGERS 8-9-65 + + 00010 XLIST + 01930 LIST + SCNSER - SCANNER SERVICE PAGE 7 + TOM EGGERS 8-9-65 + + + 00010 TITLE SCNSER - SCANNER SERVICE + 00020 SUBTTL TOM EGGERS 8-9-65 + 00030 EXTERN SETIOD, ADVBFE, ADVBFF, JBTADR, CLRBYT,STTYB1 + 00040 EXTERN SCNCHN, COMCNT, SCNSAV, SCNRET,STOP1, DEVLST,TTYTAB + 00050 INTERN SCNINI + + 00070 ;TTYPTR=DEVOAD+1 + 00080 ;TTYCTR=TTYPTR+1 + 00090 ;TTYBUF=TTYCTR+1 + 000200 00100 PION=200 ;TURN PI ON BIT + 000400 00110 PIOFF=400 ;TURN PI OFF BIT + 00120 ;SCNDDB ;NUMBER OF DEVICE DATA BLOCKS + 00130 ;STTYBF7 ;SIZE OF TELETYPE BUFFER + 000010 00140 CHREC=TEM ;AC FOR CHARACTER + 000004 00150 VPOS=ITEM ;VERITICAL POSITION OF TELETYPE + 000005 00160 HPOS=VPOS+1 ; HORIZONTAL POS. + 000006 00170 DDB=DEVDAT + 000002 00180 LINE=TAC1 ;AC THAT HOLDS SCANNER LINE NUMBER + 040000 00190 SYNC=40000 ;1 WHEN A BUFFER IS READY TO TRANSFER + 010000 00200 DETH=10000 ;1 IF TTY DETACHED AND OUTPUT WAITING + 020000 00210 NIO=20000 ;STOP ALL IO + 000020 00220 TOUT=IO ;OUTPUT IN PROGRESS + 040000 00230 NCERR=IOBKTL ;CHARACTER LOST ON TYPE IN + 000177 00240 DCHAR=177 ;DELETE CHARACTER + 100000 00250 ECHOF=IODTER ;ECHO FAILURE OCCURED + 001000 00260 TPMON=1000 ;IO IS FROM MONITOR + 002000 00270 SP=2000 ;SPECIAL TELETYPE CHAR. IS BEING INTERPRETED + 100000 00280 DDTM=100000 ;DDT MODE + 004000 00290 T35=4000 ;TELETYPE HAS TAB,FF,VT,ETC. MECHANISM + 000100 00300 USRB=100 ;TURN OFF TPMON WHEN OUTPUT IS FINISHED + 020000 00310 USRBC=20000 ;RT HALF MONITOR IOS WORD. REMAIN IN MONITOR MODE + 00320 INTERNAL SCNINT,CTYINT,TTYUSR,TTYURC + 00330 ENTRY TTYDSP + 00340 EXTERN TSCNLN,TCONLN,MTTYLN,CPOPJ1 + 00350 EXTERN CPOPJ + 00360 EXTERN FSNCHN,SCNCHL,OUT,PUUOAC,PJOBN,PUNIT,PIOMOD + 00370 INTERNAL DDTGT,DDTRL,DDTIN,DDTOUT,TTYFND,TTYSTR,TTYFNU + 00380 EXTERNAL WAIT1,WSYNC,CLRBYT,JOB,CLDS,CLEN,TTYBFE,TTYBM1 + 00390 EXTERNAL UXIT,ADRCK,TTYSAV,DEVPHY,DEVOPR + 00400 EXTERNAL TTYCTR,TTYPTR,TTYBUF,TTYLST,MLTTYL,SETRUN,STTYBF,TTY0DB + + 000000' 270706 000007 00420 PHPOS: POINT 7,DEVIAD(DEVDAT),12 ;POINTER HORIZONTAL POSITION + 000001' 270506 000010 00430 PVPOS: POINT 5,DEVOAD(DEVDAT),12 ;POINTER VERITICAL POSITION + 000002' 340706 000010 00440 PLASTC: POINT 7,DEVOAD(DEVDAT),7 ;POINTER TO LAST CHARACTER OU + 000003' 360606 000007 00450 PSCHAR: POINT 6,DEVIAD(DEVDAT),5 ;POINTER TO ^C OR ^O + + 000004' 321102 000000* 00470 TPCJOBN: POINT 9,TTYTAB(LINE),9 ;CONSOLE NUMBER FOR TTY + SCNSER - SCANNER SERVICE PAGE 2 + TOM EGGERS 8-9-65 + + + 000005' 201040 100000 00500 SCNINI: MOVEI TAC,100000 + 000006' 712200 000000 00510 CONO TTY,0 ;SHUT DOWN CONSOLE TTY + 000007' 730200 004010 00520 CONO DCSA,4010 ;RELEASE XMITTER,RECEIVER + 000010' 730300 001000 00530 CONSZ DCSA, 1000 + 000011' 730200 004000 00540 CONO DCSA, 4000 + 000012' 730300 000010 00550 CONSZ DCSA, 10 + 000013' 730440 000002 00560 DATAI DCSB, TAC1 + 000014' 367040 000010' 00570 SOJG TAC,.-4 + 000015' 201040 000000* 00580 MOVEI TAC,SCNCHN + 000016' 712201 003600 00590 CONO TTY,3600(TAC) ;CLEAR TTY, ASSIGN CHANNEL + 000017' 730200 000000* 00600 CONO DCSA,FSNCHN ;ASSIGN INTERRUPT CHANNELS + 000020' 205040 000000* 00610 MOVSI TAC,MLTTYL ;NO. OF TTY DEV. DATA BLOCKS + 000021' 205240 010000 00620 MOVSI DAT,TTYUSE ;TTY DDB IN USE BIT + 000022' 205000 001004 00630 MOVSI IOS,TPMON+IOFST ;VIRGIN STATUS + 000023' 201300 000000* 00640 MOVEI DDB,TTYLST ;FIRST TTY DDB ADDRESS + 000024' 616246 000004 00650 SCN1: TDNN DAT,DEVMOD(DDB) ;IS THIS TTY DDB IN USE? + 000025' 402006 000000 00660 SETZM DEVNAM(DDB) ;NO. SET NAME TO 0 + 000026' 202006 000002 00670 MOVEM IOS,DEVIOS(DDB) + 000027' 402006 000000* 00680 SETZM TTYSAV(DDB) ;CLEAR USER MODE TTY STATUS WORD + 000030' 412246 000004 00690 ANDCAM DAT,DEVMOD(DDB) ;CLEAR USE BIT + 000031' 554306 000003 00700 HLRZ DDB,DEVSER(DDB) ;GET NEXT TTY DDB + 000032' 253040 000024' 00710 AOBJN TAC,SCN1 + 000033' 205040 000000* 00720 MOVSI TAC,MTTYLN ;SET DDB USE BITS FROM TRANSLATOR TABLE + 000034' 205100 010000 00730 MOVSI TAC1,TTYUSE + 000035' 332301 000004* 00740 SCN2: SKIPE DDB,TTYTAB(TAC) + 000036' 436106 000004 00750 IORM TAC1,DEVMOD(DDB) + 000037' 253040 000035' 00760 AOBJN TAC,SCN2 + 000040' 263140 000000 00770 POPJ PDP, + SCNSER - SCANNER SERVICE PAGE 3 + TOM EGGERS 8-9-65 + + + 00800 ;ROUTINE TO RETURN TTY TO VIRGIN STATE + 00810 ;CALL: MOVE DDB, ADDRESS OF DEVICE DATA BLOCK + 00820 ; PUSHJ PDP,TTYKIL + + 00840 INTERNAL TTYKIL + + 000041' 200040 001144' 00860 TTYKIL: MOVE TAC,[XWD TTYUSE+TTYATC,ASSCON+ASSPRG] + 000042' 412046 000004 00870 ANDCAM TAC,DEVMOD(DEVDAT) ;CLEAR DDB USE BIT + 000043' 402006 000000 00880 SETZM DEVNAM(DEVDAT) ;CLEAR PHYSICAL NAME + 000044' 402006 000005 00890 SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME + 000045' 254000 000052' 00900 JRST TTYDT1 + + 00920 ;ROUTINE TO DETACH TTY FROM JOB + 00930 ;CALL: MOVE DEVDAT,ADDRESS OF TTY DDB TO BE DETACHED + + 00950 INTERNAL TTYDET + + 000046' 200046 000004 00970 TTYDET: MOVE TAC,DEVMOD(DEVDAT) + 000047' 627040 020000 00980 TLZN TAC,TTYATC ;WAS TTY ATTACHED? + 000050' 254000 000041' 00990 JRST TTYKIL ;NO, SO RETURN DDB TO POOL + 000051' 202046 000004 01000 MOVEM TAC,DEVMOD(DEVDAT) ;YES, JUST CLEAR ATTACH BIT + 000052' 135100 000000* 01010 TTYDT1: LDB LINE,PUNIT + 000053' 414002 000035* 01020 SETM TTYTAB(LINE) + 000054' 263140 000000 01030 POPJ PDP, + + + 000055' 000000 000000 01060 CCHAR: 0 ;HOLDS CHARACTER FOR CONSOLE TELETYPE + 01070 ;CONTROL C - GO BACK TO MONITOR + 01080 ;CONTROL 0 - SUPPRESS OUTPUT + + 000056' 334040 001145' 01100 TTYURC: SKIPA TAC,[XWD USRB,USRBC] ;START JOB BUT REMAIN IN MON1 + 000057' 205040 000100 01110 TTYUSR: MOVSI TAC,USRB ;CAUSE TTY TO GO INTO + 000060' 436046 000002 01120 IORM TAC,DEVIOS(DEVDAT) ;USER MODE WHEN + 000061' 263140 000000 01130 POPJ PDP, ;OUTPUT FINISHES + + 01150 INTERNAL TTYSET + + 000062' 205040 000004 01170 TTYSET: MOVSI TAC,IOFST ;INITIALIZE USER TTY IOS WORD + 000063' 202046 000027* 01180 MOVEM TAC,TTYSAV(DEVDAT) ;FOR START COMMAND + 000064' 254000 000057' 01190 JRST TTYUSR + SCNSER - SCANNER SERVICE PAGE 4 + TOM EGGERS 8-9-65 + + + + 01230 ;ROUTINE TO ATTACH TTY TO A JOB + 01240 ;CALL: MOVE DEVDAT,ADDRESS OF TTY DEVICE DATA BLOCK + 01250 ; MOVE ITEM,JOB NUMBER + 01260 ; PUSHJ PDP,TTYATT + 01270 ; ERROR ;DEVDAT=DDB ADR OF OTHER TTY + 01280 ;IF ANOTHER ALREADY IS ATTACHED. + 01290 ; OK RETURN ;DEVDAT, DAT AND TRANSLATOR TABLE SET + + 01310 INTERNAL TTYATT + + 000065' 135100 000052* 01330 TTYATT: LDB LINE,PUNIT ;LINE NO. OF THIS TTY + 000066' 201300 000023* 01340 MOVEI DEVDAT,TTYLST ;SEARCH FOR DDB THAT IS ATTACHED + 000067' 334000 000000 01350 SKIPA + 000070' 554306 000003 01360 TTYAT2: HLRZ DEVDAT,DEVSER(DEVDAT) + 000071' 322300 000115' 01370 JUMPE DEVDAT,TTYAT4 + 000072' 135040 000000* 01380 LDB TAC,PJOBN ;JOB NUMBER + 000073' 500046 000004 01390 HLL TAC,DEVMOD(DEVDAT) ;ATTACH AND USE BITS + 000074' 607040 000010 01400 TLNN TAC,DVTTY ;IS THIS STILL A TTY DDB? + 000075' 254000 000115' 01410 JRST TTYAT4 ;NO, THIS MUST BE IJOB + 000076' 306201 000000 01420 CAIN ITEM,(TAC) ;JOB NUMBER THE ONE TO ATTACH? + 000077' 607040 010000 01430 TLNN TAC,TTYUSE ;YES, IS IT THE DETACHED ONE? + 000100' 254000 000070' 01440 JRST TTYAT2 ;NO, KEEP LOOKING + 000101' 603040 020000 01450 TLNE TAC,TTYATC ;IS SOME TTY ALREADY ATTACHED? + 000102' 263140 000000 01460 POPJ PDP, ;YES, ERROR RETURN WITH DEVDAT SET + 000103' 261140 000006 01470 PUSH PDP,DEVDAT ;SAVE NEW DDB ADDRESS + 000104' 200302 000053* 01480 MOVE DEVDAT,TTYTAB(LINE) + 000105' 200046 000004 01490 MOVE TAC,DEVMOD(DEVDAT) + 000106' 260140 000046' 01500 PUSHJ PDP,TTYDET ;DETACH DDB FROM TTY + 000107' 262140 000006 01510 POP PDP,DEVDAT + 000110' 137200 000004' 01520 TTYAT3: DPB ITEM,TPCJOBN ;STORE ATTACHED JOB NO. + 000111' 137200 000072* 01530 DPB ITEM,PJOBN ;SET JOB NUMBER + 000112' 205040 020000 01540 MOVSI TAC,TTYATC ;SET ATTACHED BIT + 000113' 260140 000247' 01550 PUSHJ PDP,TTYDAT ;SETUP OUTPUT BYTE + 000114' 254000 000411' 01560 JRST SCNIN ;GO INITIALIZE DDB + + 000115' 200302 000104* 01580 TTYAT4: MOVE DEVDAT,TTYTAB(LINE) ;RESTORE OLD DDB ADDRESS + 000116' 254000 000110' 01590 JRST TTYAT3 + SCNSER - SCANNER SERVICE PAGE 5 + TOM EGGERS 8-9-65 + + + + 01630 ;ROUTINE TO SETUP AC DEVDAT TO ADDRESS OF TTY WHICH HAS TYPED A COMMA + 01640 ;AC DAT TO BYTE POINTER TO OUTPUT BUFFER FOR COMMAND MESSAGE + 01650 ;AC TAC TO BYTE POINTER TO COMMAND STRING + 01660 ;AC ITEM TO JOB NUNMBER TTY IS ATTACHED TO + 01670 ;CALL: PUSHJ PDP,TTYCOM + 01680 ; NONE FOUND + 01690 ; ACS SETUP + + 01710 INTERNAL TTYCOM + + 000117' 205100 000033* 01730 TTYCOM: MOVSI LINE,MTTYLN + 000120' 331002 000115* 01740 SKIPL TTYTAB(LINE) + 000121' 253100 000120' 01750 AOBJN LINE,.-1 + 000122' 327100 000000* 01760 JUMPG LINE,CPOPJ + 000123' 205300 400000 01770 MOVSI DEVDAT,400000 + 000124' 413302 000120* 01780 ANDCAB DEVDAT,TTYTAB(LINE) + 000125' 205240 440700 01790 MOVSI DAT,440700 + 000126' 271246 000000* 01800 ADDI DAT,TTYBUF(DEVDAT) + 000127' 200040 000005 01810 MOVE TAC,DAT + + 01830 ;FALL INTO TTYJOB + + 01850 ;ROUTINE TO RETURN IN AC ITEM JOB NUMBER WHICH TTY IS ATTACHED TO + 01860 ;CALL: MOVE DEVDAT,ADDRESS OF TTY DEVICE DATA BLOCK + + 01880 INTERNAL TTYJOB + + 000130' 135100 000065* 01900 TTYJOB: LDB LINE, PUNIT + 000131' 135200 000004' 01910 LDB ITEM,TPCJOBN + 000132' 254000 000000* 01920 JRST CPOPJ1 + SCNSER - SCANNER SERVICE PAGE 6 + TOM EGGERS 8-9-65 + + + + 01960 ;TELETYPE SCANNER UUO ROUTINES + 01970 ;FOR DDT + + 01990 ;DDTGT WAITS FOR OUTPUT TO COMPLETE THEN PUTS + 02000 ;TELETYPE INTO DDT MODE + + 000133' 260140 000231' 02020 DDTGT: PUSHJ PDP,TTYSR1 ;FIND DEVICE DATA BLOCK + 000134' 200006 000002 02030 MOVE IOS,DEVIOS(DEVDAT) + 000135' 607000 100000 02040 TLNN IOS,DDTM + 000136' 607000 000020 02050 TLNN IOS,IO ;OUTPUT IN PROGRESS + 000137' 254000 000141' 02060 JRST DDTGT2 ;NO + 02070 ; PUSHJ PDP,OUT ;MAKE SURE OUTPUT STARTED + 000140' 260140 000000* 02080 PUSHJ PDP,WAIT1 ;WAIT FOR OUTPUT TO FINISH + 000141' 661000 100000 02090 DDTGT2: TLO IOS,DDTM ;SET DDT MODE BIT + 000142' 202006 000002 02100 MOVEM IOS,DEVIOS(DEVDAT) + 000143' 254000 000000* 02110 JRST UXIT + + 02130 ;RELEASE TELETYPE FROM DDT MODE + 02140 ;MAKE SURE OUPUT IS FINISHED FIRST + + 000144' 260140 000231' 02160 DDTRL: PUSHJ PDP,TTYSR1 ;FIND DEVICE DATA BLOCK + 000145' 200006 000002 02170 MOVE IOS,DEVIOS(DEVDAT) + 000146' 603000 000020 02180 TLNE IOS,IO ;OUTPUT IN PROGRESS? + 000147' 260140 000140* 02190 PUSHJ PDP,WAIT1 ;YES, WAIT + 000150' 205000 140000 02200 MOVSI IOS,DDTM+SYNC + 000151' 412006 000002 02210 ANDCAM IOS,DEVIOS(DEVDAT) ;TURN OFF DDT BIT + 000152' 254000 000143* 02220 JRST UXIT + SCNSER - SCANNER SERVICE PAGE 7 + TOM EGGERS 8-9-65 + + + + 02260 ;INPUT TO DDT + 02270 ;CALL AC,[SIXBIT /DDTIN/] AC CONTAINS POINTER TO BUFFER AREA + 02280 ;BUFFER AREA MUST BE 21 WORDS LONG + + 000153' 260140 000231' 02300 DDTIN: PUSHJ PDP,TTYSR1 ;SET UP DEVDAT + 000154' 200006 000002 02310 MOVE IOS,DEVIOS(DEVDAT) + 000155' 603000 000020 02320 TLNE IOS,IO ;OUTPUT IN PROGRESS + 000156' 260140 000147* 02330 PUSHJ PDP,WAIT1 ;YES, WAIT + 000157' 200006 000002 02340 DDTIN2: MOVE IOS,DEVIOS(DEVDAT) + 000160' 603000 000040 02350 TLNE IOS,IOEND ;BUFFER ALREADY? + 000161' 254000 000166' 02360 JRST DDTIN3 ;YES + 000162' 201000 010000 02370 MOVEI IOS,IOACT + 000163' 436006 000002 02380 IORM IOS,DEVIOS(DDB) + 000164' 260140 000000* 02390 PUSHJ PDP,WSYNC ;NO, WAIT + 000165' 254000 000157' 02400 JRST DDTIN2 + + 000166' 205040 120004 02420 DDTIN3: MOVSI TAC,NIO+IOFST+DDTM + 000167' 436046 000002 02430 IORM TAC,DEVIOS(DEVDAT) ;STOP ALL IO + 000170' 200046 000000* 02440 MOVE TAC,TTYPTR(DEVDAT) + 000171' 260140 000000* 02450 PUSHJ PDP,CLRBYT ;CLEAR OUT REMAINING BYTES + 000172' 275046 000000* 02460 SUBI TAC,TTYBM1(DEVDAT) ;NUMBER OF WORDS + 000173' 135100 000000* 02470 LDB TAC1,PUUOAC ;PICK UP AC NUMBER + 000174' 271107 000000 02480 ADDI TAC1,(PROG) ;FIND REAL ADDRESS + 000175' 200102 000000 02490 MOVE TAC1,(TAC1) ;PICK UP POINTER + 000176' 271107 000000 02500 ADDI TAC1,(PROG) ;FIND REAL ADDRESS OF BUFFER + 000177' 505106 000126* 02510 HRLI TAC1,TTYBUF(DEVDAT) + 000200' 271042 000000 02520 ADDI TAC,(TAC1) + 000201' 251101 000000 02530 BLT TAC1,(TAC) ;TRANSFER MONITOR BUFFER TO U + 000202' 402001 000001 02540 CLEARM 1(TAC) ;MAKE SURE THERE ARE SOME NUL + 000203' 205040 020040 02550 MOVSI TAC,NIO+IOEND + 000204' 412046 000002 02560 ANDCAM TAC,DEVIOS(DEVDAT) + 000205' 254000 000152* 02570 JRST UXIT + SCNSER - SCANNER SERVICE PAGE 8 + TOM EGGERS 8-9-65 + + + + 02610 ;OUTPUT FROM DDT + 02620 ;CALL AC,[SIXBIT /DDTOUT/] AC HAS POINTER TO DDT OUTPUT BUFFER + + 000206' 260140 000231' 02640 DDTOUT: PUSHJ PDP,TTYSR1 + 000207' 200006 000002 02650 MOVE IOS,DEVIOS(DEVDAT) + 000210' 603000 000020 02660 TLNE IOS,IO ;OUTPUT IN PROGRESS? + 000211' 260140 000156* 02670 PUSHJ PDP,WAIT1 ;YES, WAIT + 000212' 200000 001146' 02680 MOVE IOS,[XWD NIO+TOUT+DDTM,IOACT] + 000213' 437006 000002 02690 IORB IOS,DEVIOS(DEVDAT) + 000214' 135040 000173* 02700 LDB TAC,PUUOAC ;PICK UP AC NUMBER + 000215' 505040 000011 02710 HRLI TAC,JDAT ;CALC REAL ADDRESS OF AC + 000216' 540060 000001 02720 HRR TAC,@TAC ;PICK UP AC + 000217' 505060 000001 02730 HRLI TAC,@TAC ;CALC REAL ADDRESS OF DDT BUF + 000220' 541046 000177* 02740 HRRI TAC,TTYBUF(DEVDAT) + 000221' 552046 000000* 02750 HRRZM TAC,TTYCTR(DDB) ;A SUITABLY LARGE NUMBER + 000222' 200100 000001 02760 MOVE TAC1,TAC + 000223' 251042 000020 02770 BLT TAC,20(TAC1) ;MOVE DDT BUFFER TO MONITOR + 000224' 505100 440700 02780 HRLI TAC1,440700 + + 000225' 202106 000170* 02800 MOVEM TAC1,TTYPTR(DEVDAT) + 000226' 621000 000004 02810 TLZ IOS,IOS+IOFST + 000227' 260140 000303' 02820 PUSHJ PDP,TTYOU0 + 000230' 254000 000205* 02830 JRST UXIT + SCNSER - SCANNER SERVICE PAGE 9 + TOM EGGERS 8-9-65 + + + + 000231' 200200 000000* 02870 TTYSR1: MOVE ITEM,JOB + 000232' 205100 000117* 02880 TTYSRC: MOVSI LINE,MTTYLN + 000233' 550302 000124* 02890 HRRZ DEVDAT,TTYTAB(LINE) + 000234' 322300 000240' 02900 JUMPE DEVDAT,TTYF0 + 000235' 135040 000004' 02910 LDB TAC,TPCJOBN + 000236' 306044 000000 02920 CAIN TAC,(ITEM) + 000237' 263140 000000 02930 POPJ PDP, ;FOUND + 000240' 253100 000233' 02940 TTYF0: AOBJN LINE,TTYSRC+1 + 000241' 205040 576062 02950 MOVSI TAC,576062 ;SIXBIT /OPR/ + 000242' 254000 000000* 02960 JRST DEVPHY ;SEARCH PHYSICAL DEVICE NAMES + 02970 ;AND RETURN OPERATOR TTY. + + 02990 ;ROUTINE TO FIND A TTY FOR A JOB + 03000 ;CALL: MOVE ITEM,JOB NUMBER + 03010 ; PUSHJ PDP, TTYFND + 03020 ; ERROR RETURN + 03030 ; RETURN WITH DEVDAT SET TO ADR OF DDB + 03040 ; AND DAT SET TO BYTE POINTER TO MONITOR OUTPUT BUFFER + + 000243' 200200 000231* 03060 TTYFNU: MOVE ITEM,JOB + 000244' 260140 000232' 03070 TTYFND: PUSHJ PDP,TTYSRC ;CALLED BY PUSHJ PDP,TTYFND + 03080 ; PUSHJ PDP,WSYNC + 000245' 205040 020000 03090 MOVSI TAC,NIO ;JOB NUMBER IN TAC1 + 000246' 436046 000002 03100 IORM TAC,DEVIOS(DEVDAT) + 000247' 201246 000220* 03110 TTYDAT: MOVEI DAT,TTYBUF(DEVDAT) ;SETUP OUTPUT BYTE POINTER + 000250' 505240 440700 03120 HRLI DAT,440700 + 000251' 263140 000000 03130 POPJ PDP, + + 000252' 200040 000005 03150 TTYSTR: MOVE TAC,DAT + 000253' 260140 000171* 03160 PUSHJ PDP,CLRBYT + 000254' 275046 000172* 03170 SUBI TAC,TTYBM1(DEVDAT) + 000255' 405040 777777 03180 ANDI TAC,-1 + 000256' 221040 000005 03190 IMULI TAC,5 + 000257' 202046 000221* 03200 MOVEM TAC,TTYCTR(DEVDAT) + 000260' 201046 000247* 03210 MOVEI TAC,TTYBUF(DEVDAT) + 000261' 505040 440700 03220 HRLI TAC,440700 + 000262' 202046 000225* 03230 MOVEM TAC,TTYPTR(DEVDAT) + 000263' 200006 000002 03240 MOVE IOS,DEVIOS(DEVDAT) + 000264' 434000 001147' 03250 IOR IOS,[XWD NIO+IOFST,IODTER+IOBKTL] + 000265' 420000 001147' 03260 ANDCM IOS,[XWD NIO+IOFST,IODTER+IOBKTL] + 000266' 260140 000771' 03270 PUSHJ PDP,GCHAR + 000267' 263140 000000 03280 POPJ PDP, ;NOTHING TO TYPE + 000270' 254000 000311' 03290 JRST TTYOU2 ;START OUTPUT + + 03310 ;DISPATCH TABLE; + + 000271' 263140 000000 03330 TTYDSP: POPJ PDP, ;RELEASE + 000272' 254000 000000* 03340 JRST OUT ;CLOSE + 000273' 254000 000301' 03350 JRST TTYOUT + 000274' 630000 001150' 03360 TDZ IOS,[XWD TPMON,ECHOF+NCERR] ;INPUT + 000275' 660000 010000 03370 TRO IOS,IOACT + SCNSER - SCANNER SERVICE PAGE 9-1 + TOM EGGERS 8-9-65 + + 000276' 623000 000002 03380 TLZE IOS, IOBEG + 000277' 661000 000004 03390 TLO IOS, IOFST + 000300' 254000 001133' 03400 JRST MIS1 + + 000301' 670000 001151' 03420 TTYOUT: TDO IOS,[XWD TOUT+IOFST,IOACT] + 000302' 630000 001150' 03430 TDZ IOS,[XWD TPMON,ECHOF+NCERR] + 000303' 135240 000000' 03440 TTYOU0: LDB HPOS,PHPOS + 000304' 135200 000001' 03450 LDB VPOS,PVPOS + 000305' 260140 000771' 03460 PUSHJ PDP, GCHAR + 000306' 263140 000000 03470 POPJ PDP, + 000307' 137240 000000' 03480 DPB HPOS,PHPOS + 000310' 137200 000001' 03490 DPB VPOS,PVPOS + 000311' 135100 000130* 03500 TTYOU2: LDB LINE,PUNIT + 000312' 700200 000000* 03510 CONO CLDS ;DISABLE CLOCK + 000313' 306100 000000* 03520 CAIN LINE,TCONLN + 000314' 254000 000325' 03530 JRST CTYOUT + 000315' 730200 000000 03540 CONO DCSA,0 ;DISABLE SCANNER + 000316' 730602 000000 03550 CONO DCSB, (LINE) + 000317' 730140 000010 03560 DATAO DCSA, CHREC + 000320' 730200 000017* 03570 CONO DCSA,FSNCHN + 000321' 137400 000002' 03580 DPB CHREC,PLASTC + 000322' 700200 000000* 03590 TTYOU1: CONO CLEN ;RE-ENABLE CLOCK + 000323' 202006 000002 03600 MOVEM IOS,DEVIOS(DEVDAT) + 000324' 263140 000000 03610 POPJ PDP, + + 000325' 712200 000000 03630 CTYOUT: CONO TTY,0 ;DISABLE TTY + 000326' 712140 000010 03640 DATAO TTY,CHREC + 000327' 202400 000055' 03650 MOVEM CHREC,CCHAR + 000330' 712200 000015* 03660 CONO TTY,SCNCHN ;RE-ENABLE + 000331' 254000 000301' 03670 JRST TTYOUT1 + + 000332' 712340 000050 03690 CTYINT: CONSO TTY,50 + 000333' 254000 000333' 03700 JRST . + 000334' 712340 000040 03710 CONSO TTY,40 + 000335' 254000 000347' 03720 JRST CTYOU1 + 000336' 202040 000055' 03730 MOVEM TAC, CCHAR ;DONT ECHO RUBOUT + 000337' 712040 000001 03740 DATAI TTY, TAC + 000340' 405040 000177 03750 ANDI TAC, 177 + 000341' 306040 000177 03760 CAIN TAC, 177 + 000342' 254000 000346' 03770 JRST CTYRUB ;IS A RUBOUT + 000343' 712140 000001 03780 DATAO TTY, TAC ;NOT, SO ECHO + 000344' 250040 000055' 03790 EXCH TAC, CCHAR + 000345' 254520 000000* 03800 JRST 12,@SCNCHL ;DISMISS INTERRUP + + 000346' 250040 000055' 03820 CTYRUB: EXCH TAC, CCHAR + 000347' 264000 000000* 03830 CTYOU1: JSR SCNSAV + 000350' 201400 000330* 03840 MOVEI CHREC,SCNCHN + 000351' 712210 000200 03850 CONO TTY,200(CHREC) + 000352' 200400 000055' 03860 MOVE CHREC,CCHAR + 000353' 201100 000313* 03870 MOVEI LINE,TCONLN + 000354' 254000 000364' 03880 JRST TCOMM + + 000355' 730340 001010 03900 SCNINT: CONSO DCSA,1010 + SCNSER - SCANNER SERVICE PAGE 9-2 + TOM EGGERS 8-9-65 + + 000356' 254000 000356' 03910 JRST . + 000357' 264000 000347* 03920 JSR SCNSAV + 000360' 730340 000010 03930 CONSO DCSA,10 ;RECEIVER FLAG? + 000361' 254000 000440' 03940 JRST SCNIN1 ;NO,XMITTER FLAG + 000362' 730640 000002 03950 CONI DCSB, LINE + 000363' 730440 000010 03960 DATAI DCSB, CHREC + 000364' 405400 000177 03970 TCOMM: ANDI CHREC, 177 + 000365' 303100 000353* 03980 CAILE LINE,TCONLN ;CTY LINE OR LESS + 000366' 254000 000450' 03990 JRST TYPX ;NO + 000367' 332302 000233* 04000 SKIPE DDB,TTYTAB(LINE) ;DATA BLOCK ASSIGNED? + 000370' 254000 000462' 04010 JRST INUSE ;YES + 000371' 260140 000400' 04020 PUSHJ PDP,DDBSRC ;SEARCH FOR FREE TTY DEV. DATA BLOCK + 000372' 254000 000450' 04030 JRST TYPX ;NONE FOUND, TYPE X + 000373' 403240 000004 04040 CLEARB HPOS,VPOS ;ASSUME TTY IS AT BEGIN OF FORM + 000374' 730300 000700 04050 CONSZ DCSA,700 ;FULL DUPLEX? + 000375' 306100 000365* 04060 CAIN LINE,TCONLN ;CTY? + 000376' 254000 000575' 04070 JRST INJEST ;NO, SWALLOW CHAR + 000377' 254000 000511' 04080 JRST TYP1 + SCNSER - SCANNER SERVICE PAGE 10 + TOM EGGERS 8-9-65 + + + + 04120 ;ROUTINE TO SEARCH FOR FREE TTY DEV DATA BLOCK + 04130 ;CALL: MOVE LINE,TTY LINE NO + 04140 ; PUSHJ PDP,DDBSRC + 04150 ; NONE FOUND + 04160 ; RETURN DEVDAT, LINE SET + + 000400' 205000 000020* 04180 DDBSRC: MOVSI IOS,MLTTYL ;NO. OF TTY DDB + 000401' 201300 000066* 04190 MOVEI DEVDAT,TTYLST ;ADDRESS OF FIRST DDB + 000402' 334040 001144' 04200 SKIPA TAC,[XWD TTYUSE+TTYATC,ASSPRG+ASSCON] + 000403' 554306 000003 04210 HLRZ DEVDAT,DEVSER(DEVDAT) + 000404' 612046 000004 04220 TDNE TAC,DEVMOD(DEVDAT) ;USE.ATTACH, AND BOTH ASSIGN + 000405' 253000 000403' 04230 AOBJN IOS,.-2 + 000406' 325000 000122* 04240 JUMPGE IOS,CPOPJ ;DDB FOUND? + 000407' 200000 001152' 04250 MOVE IOS,[XWD TPMON+IOFST,IOACT] + 000410' 200040 001153' 04260 MOVE TAC,[XWD TTYUSE,ASSCON] + + 04280 ;INITIALIZE TTY DEVICE DATA BLOCK(CALLED FROM TTYATT TOO) + + 000411' 436046 000004 04300 SCNIN: IORM TAC,DEVMOD(DEVDAT) + 000412' 137100 000311* 04310 DPB LINE,PUNIT ;SET LINE NO. IN DDB + 000413' 205040 646471 04320 MOVSI TAC,646471 ;SIXBIT /TTY/ + 000414' 202046 000000 04330 MOVEM TAC,DEVNAM(DEVDAT) + 000415' 200040 001154' 04340 MOVE TAC,[POINT 6,DEVNAM(DEVDAT),17] + 000416' 261140 000002 04350 PUSH PDP,LINE ;SAVE LINE NO. + 000417' 606100 000070 04360 TRNN LINE,70 ;IS THERE A HIGH ORDER OCTAL DIGIT? + 000420' 254000 000425' 04370 JRST SCNIN0 ;NO + 000421' 241100 777775 04380 ROT LINE,-3 ;YES,CONVERT TO SIXBIT + 000422' 271100 000020 04390 ADDI LINE,20 + 000423' 136100 000001 04400 IDPB LINE,TAC ;STORE HIGH ORDER SIXBIT DIGIT + 000424' 242100 000020 04410 LSH LINE,20 ;IN PHYSICAL NAME + 000425' 271100 000020 04420 SCNIN0: ADDI LINE,20 + 000426' 136100 000001 04430 IDPB LINE,TAC ;STORE LOW ORDER DIGIT + 000427' 262140 000002 04440 POP PDP,LINE + + 000430' 542302 000367* 04460 HRRM DEVDAT,TTYTAB(LINE) ;SET LINE NO. IN TRANSLATOR T + 000431' 205040 436471 04470 MOVSI TAC,436471 ;SIXBIT /CTY/ + 000432' 306100 000375* 04480 CAIN LINE,TCONLN ;IS THIS CONSOLE TTY? + 000433' 202046 000000 04490 MOVEM TAC,DEVNAM(DEVDAT) ;YES, SET NAME TO CTY + 000434' 200046 000000 04500 MOVE TAC,DEVNAM(DEVDAT) + 000435' 336000 000000* 04510 SKIPN DEVOPR ;IS THIS FIRST CHAR. TYPED BY ANYONE? + 000436' 202040 000435* 04520 MOVEM TAC,DEVOPR ;YES,SET THIS TTY AS OPERATOR TTY + 000437' 254000 000132* 04530 JRST CPOPJ1 ;SUCCESSFUL RETURN + + 000440' 730040 000002 04550 SCNIN1: DATAI DCSA,LINE ;GET LINE NO. FROM FULL DUPLEX + 000441' 201040 000320* 04560 MOVEI TAC,FSNCHN + 000442' 730201 004000 04570 CONO DCSA,4000(TAC) ;RELEASE XMITTER SCANNER + 000443' 332302 000430* 04580 SKIPE DDB,TTYTAB(LINE) ;DATA BLOCK ASSIGNED? + 000444' 301100 000432* 04590 CAIL LINE,TCONLN ;LINE NO. TOO LARGE? + 000445' 254000 000000* 04600 JRST SCNRET ;GO AWAY + 000446' 135400 000002' 04610 LDB CHREC,PLASTC + 000447' 254000 000471' 04620 JRST INUS1 + SCNSER - SCANNER SERVICE PAGE 11 + TOM EGGERS 8-9-65 + + + + 000450' 306400 000130 04660 TYPX: CAIN CHREC,"X" ;CHARACTER RECEIVED AN X? + 000451' 254000 000445* 04670 JRST SCNRET ;YES, GO AWAY + 000452' 201400 000130 04680 MOVEI CHREC,"X" + 000453' 302100 000444* 04690 CAIE LINE,TCONLN + 000454' 254000 000457' 04700 JRST TYPX1 + 000455' 712140 000010 04710 DATAO TTY,CHREC + 000456' 254000 000451* 04720 JRST SCNRET + 000457' 730742 000000 04730 TYPX1: CONSO DCSB,(LINE) + 000460' 730140 000010 04740 DATAO DCSA,CHREC ;TYPE AN X + 000461' 254000 000456* 04750 JRST SCNRET + + 000462' 730300 000700 04770 INUSE: CONSZ DCSA,700 ;FULL DUPLEX? + 000463' 306100 000453* 04780 CAIN LINE,TCONLN + 000464' 254000 000471' 04790 JRST INUS1 + 000465' 730602 000000 04800 CONO DCSB,(LINE) + 000466' 730140 000010 04810 DATAO DCSA,CHREC + 000467' 137400 000002' 04820 DPB CHREC,PLASTC + 000470' 254000 000461* 04830 JRST SCNRET + + 000471' 200006 000002 04850 INUS1: MOVE IOS,DEVIOS(DDB) + 000472' 135340 000111* 04860 LDB PROG,PJOBN + 000473' 550347 000000* 04870 HRRZ PROG,JBTADR(PROG) + 000474' 135240 000000' 04880 LDB HPOS,PHPOS + 000475' 135200 000001' 04890 LDB VPOS,PVPOS + 000476' 135046 000262* 04900 LDB TAC, TTYPTR(DDB) + 000477' 603000 002000 04910 TLNE IOS, SP + 000500' 254000 000533' 04920 JRST SIM35 + 000501' 607000 000020 04930 INUS2: TLNN IOS,TOUT + 000502' 254000 000575' 04940 JRST INJEST + 000503' 312040 000010 04950 CAME TAC, CHREC + 000504' 254000 000527' 04960 JRST ECHO + 000505' 260140 000771' 04970 INUS3: PUSHJ PDP, GCHAR + 000506' 254000 000520' 04980 JRST LEAV0 + 000507' 306100 000463* 04990 TYPE: CAIN LINE,TCONLN + 000510' 254000 000524' 05000 JRST CTSER3 + 000511' 730602 000000 05010 TYP1: CONO DCSB,(LINE) + 000512' 730140 000010 05020 DATAO DCSA, CHREC + 000513' 137400 000002' 05030 DPB CHREC,PLASTC ;SAVE CHARACTER FOR FULL DUPLEX + 000514' 202006 000002 05040 LEAVE: MOVEM IOS, DEVIOS(DDB) + 000515' 137240 000000' 05050 LEAV1: DPB HPOS,PHPOS + 000516' 137200 000001' 05060 DPB VPOS,PVPOS + 000517' 254000 000470* 05070 JRST SCNRET + 000520' 202046 000004 05080 LEAV0: MOVEM TAC,DEVMOD(DEVDAT) ;IS TTY ATTCHED? + 000521' 607040 020000 05090 TLNN TAC,TTYATC + 000522' 260140 000041' 05100 PUSHJ PDP,TTYKIL ;NO,RETURN TO POOL + 000523' 254000 000515' 05110 JRST LEAV1 + + 000524' 712140 000010 05130 CTSER3: DATAO TTY,CHREC + 000525' 202400 000055' 05140 MOVEM CHREC,CCHAR + 000526' 254000 000514' 05150 JRST LEAVE + SCNSER - SCANNER SERVICE PAGE 12 + TOM EGGERS 8-9-65 + + + + 000527' 670000 001155' 05190 ECHO: TDO IOS,[XWD SP,ECHOF] + 000530' 621000 000020 05200 TLZ IOS,TOUT + 000531' 201400 000177 05210 MOVEI CHREC,177 ;SEND A RUBOUT AFTER ECHO CHE + 000532' 254000 000507' 05220 JRST TYPE + + 000533' 205040 777766 05240 SIM35: MOVSI TAC,-SCTABL + 000534' 200241 000545' 05250 MOVE HPOS, SCTAB(TAC) + 000535' 302405 000000 05260 CAIE CHREC,(HPOS) + 000536' 253040 000534' 05270 AOBJN TAC, .-2 + 000537' 135240 000000' 05280 LDB HPOS,PHPOS + 000540' 325040 000527' 05290 JUMPGE TAC, ECHO + 000541' 204041 000545' 05300 MOVS TAC, SCTAB(TAC) + 000542' 603040 000140 05310 TLNE TAC, 140 ;SPACING CHARACTER + 000543' 344241 000000 05320 AOJA HPOS,(TAC) ;YES + 000544' 254001 000000 05330 JRST (TAC) ;NO + + 000545' 000557' 000040 05350 SCTAB: XWD SPACE," " + 000546' 000565' 000012 05360 XWD SIMLF,12 + 000547' 000572' 000177 05370 XWD SIMRO,177 ;RUBOUT + 000550' 000572' 000134 05380 XWD SIMRO,134 ;BACK SLASH + 000551' 000735' 000015 05390 XWD ASC3,15 ;CR + 000552' 000562' 000136 05400 XWD SIMVA,"^" + 000553' 000766' 000103 05410 XWD DELET1,"C" + 000554' 000766' 000117 05420 XWD DELET1,"O" + 000555' 000566' 000132 05430 XWD SIM4,"Z" + 000556' 000766' 000125 05440 XWD DELET1,"U" + 000012 05450 SCTABL=.-SCTAB + + 000557' 606240 000007 05470 SPACE: TRNN HPOS,7 ;FINISHED SIMULATING TABS(8) + 000560' 254000 000566' 05480 JRST SIM4 ;YES + 000561' 254000 000507' 05490 JRST TYPE ;NO, SEND ANOTHER SPACE + + 000562' 135400 000003' 05510 SIMVA: LDB CHREC,PSCHAR + 000563' 660400 000100 05520 TRO CHREC, 100 + 000564' 254000 000507' 05530 JRST TYPE + + 000565' 367200 000507' 05550 SIMLF: SOJG VPOS,TYPE ;SEND ANOTHER LINE-FEED + 000566' 621000 002000 05560 SIM4: TLZ IOS,SP + 000567' 607000 000020 05570 TLNN IOS,TOUT + 000570' 254000 000630' 05580 JRST INJ4 + 000571' 254000 000505' 05590 JRST INUS3 + + 000572' 625000 002000 05610 SIMRO: TLZA IOS, SP + 000573' 640000 004000 05620 MOD35: TRC IOS,T35 + 000574' 254000 000514' 05630 JRST LEAVE + SCNSER - SCANNER SERVICE PAGE 13 + TOM EGGERS 8-9-65 + + + + 000575' 306400 000003 05670 INJEST: CAIN CHREC,3 ;CONTROL C? + 000576' 254000 000644' 05680 JRST INJ5 + 000577' 623000 000004 05690 TLZE IOS,IOFST ;IF FIRST CHARACTER IN, INITIALIZE + 000600' 260140 000632' 05700 PUSHJ PDP,SETMB1 + 000601' 603000 100000 05710 TLNE IOS,DDTM ;1 DDT CHAR RESTARTS PROGRAM + 000602' 661000 040040 05720 TLO IOS,SYNC+IOEND ;YES, TERMINATE BUFFER + 000603' 306400 000017 05730 CAIN CHREC,17 ;COTNROL O? + 000604' 254000 000657' 05740 JRST INJ6 ;YES, FLUSH OUTPUT + 000605' 622000 100000 05750 TRZE IOS,ECHOF ;ECHO HAS OCCURRED? + 000606' 254000 000677' 05760 JRST INJ7 ;YES, NOW RESUME OUTPUT + 000607' 602000 040000 05770 TRNE IOS,NCERR + 000610' 254000 000514' 05780 JRST LEAVE + 000611' 302400 000033 05790 CAIE CHREC,033 ;NEW NEW ALT-MODE? + 000612' 306400 000176 05800 CAIN CHREC,176 ;NEW ALT-MODE? + 000613' 201400 000175 05810 MOVEI CHREC,175 ;CHANGE TO OLD + 000614' 306400 000020 05820 CAIN CHREC,20 ;CONTROL P TAB SIMULATION FLIP FLOP SWI + 000615' 254000 000573' 05830 JRST MOD35 + 000616' 603000 100000 05840 TLNE IOS,DDTM + 000617' 254000 000622' 05850 JRST INJ25 ;SENT RUBOUTS ON TO DDT + 000620' 306400 000177 05860 CAIN CHREC,177 ;RUBOUT + 000621' 254000 000752' 05870 JRST DELET + 000622' 136406 000476* 05880 INJ25: DPBI CHREC, TTYPTR(DDB) + 000623' 370046 000257* 05890 SOS TAC, TTYCTR(DDB) + 000624' 301400 000040 05900 CAIL CHREC, 40 + 000625' 303400 000137 05910 CAILE CHREC, 137 + 000626' 254000 000701' 05920 JRST SPCIN + 000627' 271240 000001 05930 ADDI HPOS,1 + 000630' 260140 001064' 05940 INJ4: PUSHJ PDP, MOVBUF + 000631' 254000 000514' 05950 JRST LEAVE + + 000632' 541046 000260* 05970 SETMB1: HRRI TAC, TTYBUF(DDB) + 000633' 505040 440700 05980 HRLI TAC, 440700 + 000634' 202046 000622* 05990 MOVEM TAC, TTYPTR(DDB) + 000635' 507000 000001 06000 HRLS TAC + 000636' 350000 000001 06010 AOS TAC + 000637' 402006 000632* 06020 SETZM TTYBUF(DDB) + 000640' 251046 000000* 06030 BLT TAC,TTYBFE(DDB) ;CLEAR OUT MONITOR BUFFER + 000641' 201040 000111 06040 MOVEI TAC, 111 + 000642' 202046 000623* 06050 MOVEM TAC, TTYCTR(DDB) + 000643' 263140 000000 06060 POPJ PDP, + SCNSER - SCANNER SERVICE PAGE 14 + TOM EGGERS 8-9-65 + + + + 000644' 260140 000632' 06100 INJ5: PUSHJ PDP,SETMB1 + 000645' 261140 000004 06110 PUSH PDP,ITEM ;^C + 000646' 135200 000004' 06120 LDB ITEM,TPCJOBN ;YES, GET USER CONSOLE NUMBER + 000647' 332000 000004 06130 SKIPE ITEM + 000650' 260140 000000* 06140 PUSHJ PDP,STOP1 ;SHUT OFF JOB + 000651' 262140 000004 06150 POP PDP,ITEM + 000652' 607000 001000 06160 TLNN IOS,TPMON ;SAVE STATUS OF TTY + 000653' 202006 000063* 06170 MOVEM IOS,TTYSAV(DDB) ;WHEN IT WAS IN USER MODE + 000654' 200000 001152' 06180 MOVE IOS,[XWD TPMON+IOFST,IOACT] + 000655' 201040 000103 06190 MOVEI TAC,"C" + 000656' 254000 000674' 06200 JRST INJ61 + + 000657' 261140 000002 06220 INJ6: PUSH PDP,TAC1 ;^O + 000660' 623000 000001 06230 TLZE IOS,IOW + 000661' 260140 000000* 06240 PUSHJ PDP,SETIOD + 000662' 262140 000002 06250 POP PDP,TAC1 + 000663' 603000 101000 06260 TLNE IOS,TPMON+DDTM + 000664' 254000 000667' 06270 JRST INJ6A + 000665' 603000 000020 06280 TLNE IOS,TOUT + 000666' 260140 000000* 06290 PUSHJ PDP,ADVBFE + 000667' 665000 000004 06300 INJ6A: TLOA IOS,IOFST + 000670' 254000 000666' 06310 JRST .-2 + 000671' 620000 100000 06320 TRZ IOS,ECHOF + 000672' 660000 020000 06330 TRO IOS,IODEND + 000673' 201040 000060 06340 MOVEI TAC,"0" + 000674' 137040 000003' 06350 INJ61: DPB TAC,PSCHAR + 000675' 201400 000136 06360 MOVEI CHREC,"^" + 000676' 254000 000745' 06370 JRST SPC21 + + 000677' 661000 000020 06390 INJ7: TLO IOS,TOUT + 000700' 254000 000505' 06400 JRST INUS3 + SCNSER - SCANNER SERVICE PAGE 15 + TOM EGGERS 8-9-65 + + + + 000701' 205040 777770 06440 SPCIN: MOVSI TAC,-SCITL ;SEARCH FOR SPECIAL INPUT CHAR + 000702' 200101 000711' 06450 MOVE TAC1,SCITAB(TAC) + 000703' 302402 000000 06460 CAIE CHREC,(TAC1) ;FOUND? + 000704' 253040 000702' 06470 AOBJN TAC,.-2 ;NO + 000705' 544040 000002 06480 HLR TAC,TAC1 ;SAVE DISPATCH ADDRESS + 000706' 135100 000412* 06490 LDB LINE,PUNIT ;RESTORE TAC1 + 000707' 321041 000000 06500 JUMPL TAC,(TAC) + 000710' 254000 000630' 06510 JRST INJ4 ;CHARACTER NOT FOUND + + 000711' 000721' 000015 06530 SCITAB: XWD SPCCR,15 ;CR + 000712' 000727' 000012 06540 XWD ASC1,12 ;LF + 000713' 000742' 000011 06550 XWD SPC2,11 ;HORIZ TAB + 000714' 000724' 000013 06560 XWD SPVT,13 ;VT + 000715' 000723' 000014 06570 XWD SPFF,14 ;FF + 000716' 000737' 000025 06580 XWD SPC4A,25 ;^U + 000717' 000747' 000032 06590 XWD SPC7,32 ;^Z + 000720' 000727' 000175 06600 XWD ASC1, 175 ;ALT MODE + 000010 06610 SCITL=.-SCITAB + + 000721' 201240 000000 06630 SPCCR: MOVEI HPOS,0 + 000722' 254000 000735' 06640 JRST ASC3 + + 000723' 334200 001156' 06660 SPFF: SKIPA VPOS,[10] + 000724' 201200 000004 06670 SPVT: MOVEI VPOS,4 + 000725' 607000 004000 06680 TLNN IOS,T35 ;DONT SIMULATE FOR A MOD 35 + 000726' 661000 002000 06690 TLO IOS,SP + 000727' 135040 000000* 06700 ASC1: LDB TAC,PIOMOD + 000730' 607000 001000 06710 TLNN IOS,TPMON + 000731' 306040 000001 06720 CAIN TAC,AL + 000732' 661000 040000 06730 TLO IOS,SYNC + 000733' 607000 002000 06740 ASC2: TLNN IOS,SP + 000734' 254000 000630' 06750 JRST INJ4 + 000735' 201400 000012 06760 ASC3: MOVEI CHREC,12 ;LINE FEED + 000736' 254000 000507' 06770 JRST TYPE + + 000737' 260140 000632' 06790 SPC4A: PUSHJ PDP,SETMB1 + 000740' 201040 000125 06800 MOVEI TAC,"U" + 000741' 254000 000674' 06810 JRST INJ61 + + 000742' 602000 004000 06830 SPC2: TRNE IOS,T35 + 000743' 254000 000514' 06840 JRST LEAVE + 000744' 201400 000040 06850 MOVEI CHREC," " + 000745' 661000 002000 06860 SPC21: TLO IOS,SP + 000746' 254000 000507' 06870 JRST TYPE + + 000747' 661000 042040 06890 SPC7: TLO IOS,SYNC+IOEND+SP ;^Z + 000750' 201040 000132 06900 MOVEI TAC,"Z" + 000751' 254000 000674' 06910 JRST INJ61 ;ECHO ^Z + SCNSER - SCANNER SERVICE PAGE 16 + TOM EGGERS 8-9-65 + + + + 000752' 200046 000642* 06950 DELET: MOVE TAC,TTYCTR(DDB) + 000753' 301040 000111 06960 CAIL TAC,111 + 000754' 254000 000766' 06970 JRST DELET1 + + 000755' 205040 070000 06990 MOVSI TAC,070000 + 000756' 270046 000634* 07000 ADD TAC,TTYPTR(DDB) + 000757' 603040 400000 07010 TLNE TAC,400000 + 000760' 270040 001157' 07020 ADD TAC,[XWD 347777,-1] + 000761' 202046 000756* 07030 MOVEM TAC,TTYPTR(DDB) + 000762' 350006 000752* 07040 AOS TTYCTR(DDB) + + 000763' 201400 000334 07060 MOVEI CHREC,334 ;BACK SLASH + 000764' 661000 002000 07070 DELET2: TLO IOS,SP + 000765' 254000 000507' 07080 JRST TYPE + + 000766' 201200 000001 07100 DELET1: MOVEI VPOS,1 + 000767' 201400 000015 07110 MOVEI CHREC,15 + 000770' 254000 000764' 07120 JRST DELET2 + SCNSER - SCANNER SERVICE PAGE 17 + TOM EGGERS 8-9-65 + + + + 07160 ;ROUTINE TO GET NEXT CHARACTER FROM OUTPUT BUFFER + 07170 ;CALL: PUSHJ PDP,GCHAR + 07180 ; NO MORE LEFT + 07190 ; RETURN WITH CHAR. IN CHREC + + 000771' 627000 000004 07210 GCHAR: TLZN IOS, IOFST + 000772' 254000 001001' 07220 JRST GCHAR3 + 000773' 550046 000010 07230 GCHAR1: HRRZ TAC,DEVOAD(DDB) + 000774' 270040 001160' 07240 ADD TAC, [XWD 000700+PROG,1] + 000775' 202046 000761* 07250 MOVEM TAC, TTYPTR(DDB) + 000776' 550060 000001 07260 HRRZ TAC, @TAC + 000777' 221040 000005 07270 IMULI TAC, 5 + 001000' 202046 000762* 07280 MOVEM TAC,TTYCTR(DDB) + 001001' 375006 001000* 07290 GCHAR3: SOSGE TTYCTR(DDB) + 001002' 254000 001025' 07300 JRST GCHAR5 + 001003' 134406 000775* 07310 LDBI CHREC, TTYPTR(DDB) + 001004' 322400 001023' 07320 JUMPE CHREC, GCHAR7 + 001005' 306400 000011 07330 CAIN CHREC, 11 + 001006' 254000 001052' 07340 JRST HT + 001007' 306400 000012 07350 CAIN CHREC, 12 + 001010' 344200 001017' 07360 AOJA VPOS,GCH3 + 001011' 302400 000013 07370 CAIE CHREC, 13 + 001012' 306400 000014 07380 CAIN CHREC, 14 + 001013' 254000 001057' 07390 JRST VTFF + 001014' 271240 000001 07400 ADDI HPOS,1 + 001015' 306400 000015 07410 CAIN CHREC,15 + 001016' 201240 000000 07420 MOVEI HPOS,0 + 001017' 354003 000000 07430 GCH3: AOSA (PDP) + 001020' 200006 000653* 07440 GCH3A: MOVE IOS,TTYSAV(DDB) ;RESTORE STATUS TO USER + 001021' 202006 000002 07450 GCHAR4: MOVEM IOS,DEVIOS(DDB) + 001022' 263140 000000 07460 POPJ PDP, + + 001023' 607000 100000 07480 GCHAR7: TLNN IOS,DDTM ;DDT BUFFER TERMINATED WITH NULL + 001024' 254000 001001' 07490 JRST GCHAR3 + 001025' 261140 000002 07500 GCHAR5: PUSH PDP,TAC1 + 001026' 623000 000001 07510 TLZE IOS, IOW + 001027' 260140 000661* 07520 PUSHJ PDP, SETIOD + 001030' 262140 000002 07530 POP PDP,TAC1 + 001031' 607000 101000 07540 TLNN IOS,TPMON+DDTM + 001032' 260140 000666* 07550 PUSHJ PDP, ADVBFE + 001033' 665000 000004 07560 TLOA IOS,IOFST + 001034' 254000 000773' 07570 JRST GCHAR1 + 001035' 630000 001161' 07580 TDZ IOS,[XWD IO,IOACT] + 001036' 627000 000100 07590 TLZN IOS,USRB + 001037' 254000 001021' 07600 JRST GCHAR4 + 001040' 621000 001000 07610 TLZ IOS,TPMON + 001041' 135100 000706* 07620 LDB LINE,PUNIT ;GET LINE NO. + 001042' 261140 000004 07630 PUSH PDP,ITEM + 001043' 135200 000004' 07640 LDB ITEM,TPCJOB + 001044' 260140 000000* 07650 PUSHJ PDP,SETRUN + 001045' 262140 000004 07660 POP PDP,ITEM + SCNSER - SCANNER SERVICE PAGE 17-1 + TOM EGGERS 8-9-65 + + 001046' 626000 020000 07670 TRZN IOS,USRBC + 001047' 254000 001020' 07680 JRST GCH3A + 001050' 205000 001004 07690 MOVSI IOS,TPMON+IOFST + 001051' 254000 001021' 07700 JRST GCHAR4 + 001052' 602000 004000 07710 HT: TRNE IOS,T35 + 001053' 344240 001017' 07720 AOJA HPOS,GCH3 + 001054' 661000 002000 07730 TLO IOS,SP + 001055' 201400 000240 07740 SPOUT: MOVEI CHREC,240 + 001056' 254000 001017' 07750 JRST GCH3 + + 001057' 602000 004000 07770 VTFF: TRNE IOS,T35 + 001060' 344200 001017' 07780 AOJA VPOS,GCH3 + 001061' 201400 000012 07790 MOVEI CHREC,12 + 001062' 661000 002000 07800 TLO IOS,SP + 001063' 254000 001017' 07810 JRST GCH3 + SCNSER - SCANNER SERVICE PAGE 18 + TOM EGGERS 8-9-65 + + + 001064' 603000 100000 07840 MOVBUF: TLNE IOS,DDTM + 001065' 254000 001125' 07850 JRST MOV3 ;DONT ADVANCE BUFFERS FOR DDT MODE + 001066' 627000 040000 07860 TLZN IOS,SYNC + 001067' 337006 001001* 07870 SKIPG TTYCTR(DDB) + 001070' 254000 001072' 07880 JRST .+2 + 001071' 254000 001133' 07890 JRST MIS1 + 001072' 603000 001000 07900 TLNE IOS, TPMON + 001073' 254000 001135' 07910 JRST MOVMON + 001074' 200046 000007 07920 MOVE TAC,DEVIAD(DDB) ;IS TTY EXPECTING INPUT? + 001075' 602040 777777 07930 TRNE TAC,-1 + 001076' 335020 000001 07940 SKIPGE @TAC ;OR IS NEXT BUFFER READY? + 001077' 254000 001132' 07950 JRST MIS ;NO + 001100' 261140 000002 07960 PUSH PDP,TAC1 + 001101' 200046 001003* 07970 MOVE TAC,TTYPTR(DDB) + 001102' 260140 000253* 07980 PUSHJ PDP,CLRBYT + 001103' 200046 000007 07990 MOVE TAC,DEVIAD(DDB) + 001104' 260140 000000* 08000 PUSHJ PDP,ADRCK ;MAKE SURE BUFFER WILL FIT + 001105' 551041 000000* 08010 HRRZI TAC,STTYB1(TAC) ;LENGTH+1 + + 001106' 201066 000007 08030 MOVEI TAC,@DEVIAD(DDB) + 001107' 271040 000002 08040 ADDI TAC,2 + 001110' 540400 000001 08050 HRR CHREC,TAC + 001111' 271040 000000* 08060 ADDI TAC,STTYBF + 001112' 505406 000637* 08070 HRLI CHREC,TTYBUF(DDB) + 001113' 251401 777777 08080 BLT CHREC,-1 (TAC) + + 001114' 201040 000111 08100 MOVEI TAC,111 + 001115' 274046 001067* 08110 SUB TAC, TTYCTR(DDB) + 001116' 271040 000004 08120 ADDI TAC,4 + 001117' 231040 000005 08130 IDIVI TAC,5 + 001120' 201426 000007 08140 MOVEI CHREC,@DEVIAD(DDB) + 001121' 202050 000001 08150 MOVEM TAC,1(CHREC) + 001122' 260140 000000* 08160 PUSHJ PDP, ADVBFF + 001123' 254000 001124' 08170 JRST .+1 + 001124' 665000 000004 08180 TLOA IOS,IOFST + 001125' 261140 000002 08190 MOV3: PUSH PDP,TAC1 + 001126' 623000 000001 08200 TLZE IOS, IOW + 001127' 260140 001027* 08210 PUSHJ PDP, SETIOD + 001130' 262140 000002 08220 POP PDP,TAC1 + 001131' 624000 050000 08230 TRZA IOS,NCERR+IOACT + 001132' 660000 040000 08240 MIS: TRO IOS, NCERR + 001133' 202006 000002 08250 MIS1: MOVEM IOS, DEVIOS(DDB) + 001134' 263140 000000 08260 POPJ PDP, + 001135' 205040 400000 08270 MOVMON: MOVSI TAC,400000 + 001136' 436042 000443* 08280 IORM TAC,TTYTAB(LINE) ;SET BIT FOR MONITOR + 001137' 661000 000004 08290 TLO IOS,IOFST + 001140' 201040 000015 08300 MOVEI TAC,15 + 001141' 137046 001101* 08310 DPB TAC,TTYPTR(DDB) ;FORCE A CARRIAGE RET INTO MONITOR COMM + 001142' 350000 000000* 08320 AOS COMCNT + 001143' 263140 000000 08330 POPJ PDP, + + 08350 END, + SCNSER - SCANNER SERVICE PAGE 18-1 + TOM EGGERS 8-9-65 + + 001144' 030000 600000 + 001145' 000100 020000 + 001146' 120020 010000 + 001147' 020004 140000 + 001150' 001000 140000 + 001151' 000024 010000 + 001152' 001004 010000 + 001153' 010000 400000 + 001154' 220606 000000 + 001155' 002000 100000 + 001156' 000000 000010 + 001157' 347777 777777 + 001160' 000707 000001 + 001161' 000020 010000 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 001162 + +9K CORE USED + SCNSER - SCANNER SERVICE PAGE 19 + SYMBOL TABLE + + 000443 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +ADRCK 001104' EXT +ADVBFE 001032' EXT +ADVBFF 001122' EXT +AL 000001 INT +ASC1 000727' +ASC2 000733' +ASC3 000735' +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CCHAR 000055' +CHREC 000010 +CLDS 000312' EXT +CLEN 000322' EXT +CLOSB 002000 INT +CLRBYT 001102' EXT +CLSIN 000002 INT +CLSOUT 000001 INT +COMCNT 001142' EXT +CPOPJ 000406' EXT +CPOPJ1 000437' EXT +CTSER3 000524' +CTYINT 000332' INT +CTYOU1 000347' +CTYOUT 000325' +CTYRUB 000346' +D 000017 INT +DAT 000005 INT +DCHAR 000177 +DCL 000001 INT +DCSA 000300 SPD +DCSB 000304 SPD +DCW 020000 INT +DDB 000006 +DDBSRC 000400' +DDI 000007 INT +DDO 000006 INT +DDTGT 000133' INT +DDTGT2 000141' +DDTIN 000153' INT +DDTIN2 000157' +DDTIN3 000166' +DDTM 100000 +DDTMEM 000037 INT +DDTOUT 000206' INT +DDTRL 000144' INT + SCNSER - SCANNER SERVICE PAGE 19-1 + SYMBOL TABLE + +DDTSYM 000036 INT +DELET 000752' +DELET1 000766' +DELET2 000764' +DEN 000004 INT +DETH 010000 +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVLST 000000 EXT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVOPR 000436' EXT +DEVPHY 000242' EXT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ECHO 000527' +ECHOF 100000 +ENTRB 020000 INT +FSNCHN 000441' EXT +GCH3 001017' +GCH3A 001020' +GCHAR 000771' +GCHAR1 000773' +GCHAR3 001001' +GCHAR4 001021' +GCHAR5 001025' +GCHAR7 001023' +HPOS 000005 + SCNSER - SCANNER SERVICE PAGE 19-2 + SYMBOL TABLE + +HT 001052' +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INJ25 000622' +INJ4 000630' +INJ5 000644' +INJ6 000657' +INJ61 000674' +INJ6A 000667' +INJ7 000677' +INJEST 000575' +INPB 010000 INT +INUS1 000471' +INUS2 000501' +INUS3 000505' +INUSE 000462' +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000473' EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000243' EXT +LEAV0 000520' +LEAV1 000515' + SCNSER - SCANNER SERVICE PAGE 19-3 + SYMBOL TABLE + +LEAVE 000514' +LINE 000002 +LOOKB 040000 INT +MIS 001132' +MIS1 001133' +MLTTYL 000400' EXT +MOD35 000573' +MOV3 001125' +MOVBUF 001064' +MOVMON 001135' +MTTYLN 000232' EXT +MTW 010000 INT +NCERR 040000 +NIO 020000 +OBUFB 100000 INT +OUT 000272' EXT +OUTPB 004000 INT +PDP 000003 INT +PHPOS 000000' +PICHN 000100 INT +PIOFF 000400 +PIOMOD 000727' EXT +PION 000200 +PJOBN 000472' EXT +PLASTC 000002' +PROG 000007 INT +PSCHAR 000003' +PUNIT 001041' EXT +PUUOAC 000214' EXT +PVPOS 000001' +RUN 200000 INT +RUNABL 204000 INT +SCITAB 000711' +SCITL 000010 +SCN1 000024' +SCN2 000035' +SCNCHL 000345' EXT +SCNCHN 000350' EXT +SCNIN 000411' +SCNIN0 000425' +SCNIN1 000440' +SCNINI 000005' INT +SCNINT 000355' INT +SCNRET 000517' EXT +SCNSAV 000357' EXT +SCTAB 000545' +SCTABL 000012 +SETIOD 001127' EXT +SETMB1 000632' +SETRUN 001044' EXT +SIM35 000533' +SIM4 000566' +SIMLF 000565' + SCNSER - SCANNER SERVICE PAGE 19-4 + SYMBOL TABLE + +SIMRO 000572' +SIMVA 000562' +SP 002000 +SPACE 000557' +SPC2 000742' +SPC21 000745' +SPC4A 000737' +SPC7 000747' +SPCCR 000721' +SPCIN 000701' +SPFF 000723' +SPOUT 001055' +SPVT 000724' +STOP1 000650' EXT +STTYB1 001105' EXT +STTYBF 001111' EXT +SYNC 040000 +T35 004000 +TAC 000001 INT +TAC1 000002 INT +TCOMM 000364' +TCONLN 000507' EXT +TEM 000010 INT +TOUT 000020 +TPCJOB 000004' +TPMON 001000 +TSCNLN 000000 EXT +TTY 000120 SPD +TTY0DB 000000 EXT +TTYAT2 000070' +TTYAT3 000110' +TTYAT4 000115' +TTYATC 020000 INT +TTYATT 000065' INT +TTYBFE 000640' EXT +TTYBM1 000254' EXT +TTYBUF 001112' EXT +TTYCOM 000117' INT +TTYCTR 001115' EXT +TTYDAT 000247' +TTYDET 000046' INT +TTYDSP 000271' ENT +TTYDT1 000052' +TTYF0 000240' +TTYFND 000244' INT +TTYFNU 000243' INT +TTYJOB 000130' INT +TTYKIL 000041' INT +TTYLST 000401' EXT +TTYOU0 000303' +TTYOU1 000322' +TTYOU2 000311' +TTYOUT 000301' + SCNSER - SCANNER SERVICE PAGE 19-5 + SYMBOL TABLE + +TTYPTR 001141' EXT +TTYSAV 001020' EXT +TTYSET 000062' INT +TTYSR1 000231' +TTYSRC 000232' +TTYSTR 000252' INT +TTYTAB 001136' EXT +TTYURC 000056' INT +TTYUSE 010000 INT +TTYUSR 000057' INT +TYP1 000511' +TYPE 000507' +TYPX 000450' +TYPX1 000457' +USRB 000100 +USRBC 020000 +USRMOD 010000 INT +UUO 000014 INT +UXIT 000230' EXT +VPOS 000004 +VTFF 001057' +WAIT1 000211' EXT +WSYNC 000164' EXT + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS CCCCCCCCCCCC OOOOOOOOO NNN NNN + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS CCCCCCCCCCCC OOOOOOOOO NNN NNN + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS CCCCCCCCCCCC OOOOOOOOO NNN NNN +SSS YYY YYY SSS CCC OOO OOO NNN NNN +SSS YYY YYY SSS CCC OOO OOO NNN NNN +SSS YYY YYY SSS CCC OOO OOO NNN NNN +SSS YYY YYY SSS CCC OOO OOO NNNNNN NNN +SSS YYY YYY SSS CCC OOO OOO NNNNNN NNN +SSS YYY YYY SSS CCC OOO OOO NNNNNN NNN + SSSSSSSSS YYY SSSSSSSSS CCC OOO OOO NNN NNN NNN + SSSSSSSSS YYY SSSSSSSSS CCC OOO OOO NNN NNN NNN + SSSSSSSSS YYY SSSSSSSSS CCC OOO OOO NNN NNN NNN + SSS YYY SSS CCC OOO OOO NNN NNNNNN + SSS YYY SSS CCC OOO OOO NNN NNNNNN + SSS YYY SSS CCC OOO OOO NNN NNNNNN + SSS YYY SSS CCC OOO OOO NNN NNN + SSS YYY SSS CCC OOO OOO NNN NNN + SSS YYY SSS CCC OOO OOO NNN NNN +SSSSSSSSSSSS YYY SSSSSSSSSSSS CCCCCCCCCCCC OOOOOOOOO NNN NNN +SSSSSSSSSSSS YYY SSSSSSSSSSSS CCCCCCCCCCCC OOOOOOOOO NNN NNN +SSSSSSSSSSSS YYY SSSSSSSSSSSS CCCCCCCCCCCC OOOOOOOOO NNN NNN + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :SYSCON.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:25 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2224 +File will be deleted after printing + SYSCON - UUO HANDLER PAGE 1 + 8-9-65 + + 00010 XLIST + 01930 LIST + SYSCON - UUO HANDLER PAGE 7 + 8-9-65 + + + 00010 TITLE SYSCON - UUO HANDLER + 00020 SUBTTL 8-9-65 + 00030 EXTERNAL CLOSE1,ILLINS,IN,JOBAC,JOBADR,JOBDAT + 00040 EXTERNAL MTAPE1,OUT,RELEA1,UINBF,UINIT,UOUTBF + 00050 EXTERNAL USRJDA,USRSAV,USTATO,USTATS,USTATZ + 00060 EXTERNAL ERROR,UUOERR,CLDS,CLEN + 00070 EXTERNAL IOIERR,MJOBPD,JOBPDL,WAIT1,USRREL,PUUOAC + 00080 EXTERNAL JOBPDL,MJOBPD,USETST + SYSCON - UUO HANDLER PAGE 2 + 8-9-65 + + + + + 00130 , DEC 06 00 EX UUO L PT PRE 06 UUO HANDLER + 00140 , 3/10/65 + 00150 , ALL UUOS DROP THEMSELVE IN REAL LOCATION 40, AND TRAP + 00160 , TO 41. THE UUO HANDLER SHUFFLES THE UUO OFF TO THE USERS + 00170 , 40,41, IF IT IS NOT A SYSTEM UUO. + 00180 , SYSTEM UUOS FALL INTO THREE CLASSES, HANDLED DIFFERENTLY + 00190 , (1) SYSTEM FUNCTIONS: LOAD ACS PDP, PROG, AND DISPATCH TO THE + 00200 , FUNCTION. + 00210 , (2) DEVICE INDEPENDENT I/O UUO: ALSO LOAD ACS DEVDAT AND IOS + 00220 , AND GO THE THE SYSTEM FUNCTION. + 00230 , (3) DEVICE DEPENDENT I/O UUOS: DO (1) AND (2), THEN DISPATCH + 00240 , THROUGH THE TABLE WHOSE ADDRESS IS IN THE RIGHT HALF OF DEVSER(DEVD + 00250 , CONTROL MAY ALWAYS BE RETURNED BY EXECUTING A + 00260 , JRST UXIT + 00270 , WHICH WILL RESTORE THE ACS, ARP BITS, AND RETURN. + 00280 , THE UUO HANDLER IS PURE IF THE FOLLOWING RESTRICTIONS ARE OBSERVED. + 00290 , RESTRICTIONS: UUOS CANNOT BE CALLED BY INTERRUPT SERVICE ROUTINES. + 00300 , MONITOR INTERFACE + 00310 , STORAGE: 89 + 00320 , ROUTINES CALLED: ILLINS, ADRCK, EXCLK, UUOH, SETIOS,UUOUSR + 00330 , UUOS CALLED: CALL, INIT, RELEAS, CLOSE, OUTBUF, INBUF + 00340 , STATS, STATO, STATZ, OUTPUT, INPUT + 00350 , DEVICE DEPENDENT: DEN, DLK, DSO, DSI, DGF + 00360 , SYMBOLS SET/USED: + 00370 , ACCUMULATORS: POP S/U TAC S/U + 00380 , PROG S/U TAC1 S/U + 00390 , SUB S + 00400 , SYSTEM PARAMETERS: UIO U + 00410 , USYS U + 00420 , USYSN U + 00430 , JOB AREA: JOBAC U JOBDAT U + 00440 , JOBPDP U + 00450 , SYSTEM ADDRESSES: CLK S/U + 00460 , JOBADR U + 00470 , USRLEV S/U + 00480 , DEVICE DATA BLOCK: DEVSER U + 00490 , INTERNAL ADDRESSES: 40 S/U + 00500 , UUO0 S/U + 00510 , UUSAV S/U + SYSCON - UUO HANDLER PAGE 3 + 8-9-65 + + + + + 00560 INTERNAL UUO0 + + 000000' 000000 000000 00580 UUO0: 0 + 000001' 250040 000040 00590 EXCH TAC,40 ;SAVE TAC; PICK UP UUO + 000002' 202740 000000* 00600 MOVEM 17,USRSAV ;SAVE 17 + 000003' 603040 077000 00610 TLNE TAC,77000 ;0 UUO IS ILLEGAL + 000004' 603040 740000 00620 TLNE TAC,740000 ;UUO FOR SYSTEM? + 000005' 254000 000030' 00630 JRST UUOSYS ;YES + 000006' 200740 000000* 00640 MOVE 17,JOBADR ;GET JOB AREA ADDRESS + 000007' 202057 000040 00650 MOVEM TAC,40(17) ;STORE UUO IN USERS 40 + 000010' 550057 000041 00660 HRRZ TAC,41(17) ;PICK UP ADR OF USERS JSR + 000011' 322040 000030' 00670 JUMPE TAC,UUOSYS ;IF ADDRESS=0,ILLEGAL USER UU + 000012' 500040 000000' 00680 HLL TAC,UUO0 ;PICK UP PROCESSOR FLAGS FOR + 000013' 607040 010000 00690 TLNN TAC,USRMOD ;WAS UUO FROM USER? + 000014' 254000 000030' 00700 JRST UUOSYS ;NO, ILLEGAL NUUO FROM SYSTEM + 000015' 201741 000000 00710 MOVEI 17,(TAC) ;17 NOW HAS REL. ADR. OF USER + 000016' 317740 000000* 00720 CAMG 17,USRREL ;DONT INCREMENT RETURN IF PC + 000017' 541041 000001 00730 HRRI TAC,1(TAC) ;INCREMENT PC + 000020' 250040 000000' 00740 EXCH TAC,UUO0 ;SET UP RETURN TO USER, PICK + 00750 ;UP USERS FLAGS,PC + 000021' 313740 000016* 00760 CAMLE 17,USRREL ;LEGAL MEMORY? + 000022' 254000 000025' 00770 JRST .+3 ;NO. DONT STORE PC + 000023' 270740 000006* 00780 ADD 17,JOBADR ;MAKE REL. ADR. INTO ABS. ADR + 000024' 202057 000000 00790 MOVEM TAC,(17) ;STORE FLAGS AND PC LIKE JSR + 000025' 200040 000040 00800 MOVE TAC,40 ;RESTORE TAC + 000026' 200740 000002* 00810 MOVE 17,USRSAV ;RESTORE 17 + 000027' 254120 000000' 00820 JRST 2,@UUO0 ;RETURN TO USER + SYSCON - UUO HANDLER PAGE 4 + 8-9-65 + + + + + 000030' 250040 000040 00870 UUOSYS: EXCH TAC,40 ;RESTORE TA. RESTORE THE UUO + 000031' 200740 000000' 00880 MOVE 17,UUO0 ;PICK UP PROCESSOR FLAG + 000032' 607740 010000 00890 TLNN 17,USRMOD ;SYSTEM UUO FROM SYSTEM? + 000033' 254000 000046' 00900 JRST UUOSY1 ;YES + 000034' 200740 000023* 00910 MOVE 17,JOBADR ;NO. PICK UP ADR. OF USER PRO + 000035' 202717 000016 00920 MOVEM 16,16(17) ;STORE AC16 IN USER 16 + 000036' 550700 000017 00930 HRRZ 16,17 ;SET UP BLP POINTER + 000037' 251717 000015 00940 BLT 16,15(17) ;MOVE REAL ACS TO USER AREA + 000040' 200000 000026* 00950 MOVE 0,USRSAV ;MOVE USER 17 TO USERS AREA + 000041' 202017 000017 00960 MOVEM 0,17(17) + + 000042' 200440 000000* 00980 MOVE JDAT,JOBDAT ;LOAD UP JOB DAT AREA ADDRES + 000043' 205140 000000* 00990 MOVSI PDP,MJOBPD ;LOAD UP PUSH DOWN AC AND + 000044' 541151 000000* 01000 HRRI PDP,JOBPDL(JDAT) ;MAKE ABSOLUTE PATH + 000045' 334340 000017 01010 SKIPA PROG,17 ;PROGRAM BASE ADDRESS + 000046' 200740 000040* 01020 UUOSY1: MOVE 17,USRSAV ;RESTORE AC17 IF UUO FROM SYS + 000047' 261140 000000' 01030 PUSH PDP,UUO0 ;SAVE RETURN ON PUSH DOWN LIS + 000050' 200600 000040 01040 MOVE UUO,40 ;GET THE UUO INTO AC(UUO) + 000051' 135100 000250' 01050 LDB TAC1,[POINT 9,UUO,8] ;PICK UP UUO OP COD + 000052' 301100 000100 01060 CAIL TAC1,100 ;ILLEGAL INSTRUCTION? + 000053' 254000 000000* 01070 JRST ILLINS ;YES + 000054' 305100 000040 01080 CAIGE TAC1,40 ;SYSTEM UUO? + 000055' 254000 000000* 01090 JRST UUOERR ;NO. ILLEGAL + 000056' 135040 000000* 01100 LDB TAC,PUUOAC + 000057' 200301 000000* 01110 MOVE DEVDAT,USRJDA(TAC) ;GET DDB + 000060' 305100 000060 01120 CAIGE TAC1,100-UUOT2L ;AN IO UUO? + 000061' 254000 000070' 01130 JRST UUODSP ;NO + 000062' 302100 000070 01140 CAIE TAC1,70 ;CLOSE AND RELEASE ARE ALWAYS LEGAL + 000063' 306100 000071 01150 CAIN TAC1,71 + 000064' 322300 000236' 01160 JUMPE DEVDAT,UXIT + 000065' 322300 000000* 01170 JUMPE DEVDAT,IOIERR ;CHANNEL MUST BE ASSIGNED + 000066' 200006 000002 01180 MOVE IOS,DEVIOS(DEVDAT) ;GET DATA BLOCK STA + 000067' 254002 000015' 01190 JRST UUOT2-77+UUOT2L-1(TAC1) ;DISPATCH + + 000070' 305100 000042 01210 UUODSP: CAIGE TAC1,40+UUOT1L ;LEGAL SYSTEM UUO? + 000071' 254002 000033' 01220 JRST UUOT1-40(TAC1) ;YES. DISPATCH + 000072' 254000 000055* 01230 JRST UUOERR + SYSCON - UUO HANDLER PAGE 5 + 8-9-65 + + + + 000073' 254000 000162' 01270 UUOT1: JRST UCALL ;40 + 000074' 254000 000000* 01280 JRST UINIT + 01290 ;ADD NON IO UUOS HERE + + 000002 01310 UUOT1L=.-UUOT1 + + 000075' 01330 UUOT2: + 01340 ;ADD IO UUOS HERE + 000075' 254000 000000* 01350 JRST USETST + 000076' 254000 000000* 01360 JRST USTATO + 000077' 254000 000000* 01370 JRST USTATS + 000100' 254000 000000* 01380 JRST USTATZ + 000101' 254000 000000* 01390 JRST UINBF + 000102' 254000 000000* 01400 JRST UOUTBF + 000103' 254000 000000* 01410 JRST IN + 000104' 254000 000000* 01420 JRST OUT + 000105' 254000 000000* 01430 JRST CLOSE1 + 000106' 254000 000000* 01440 JRST RELEA1 + 000107' 254000 000000* 01450 JRST MTAPE1 + 000110' 254000 000160' 01460 JRST UDGF + 000111' 254000 000156' 01470 JRST UDSI + 000112' 254000 000154' 01480 JRST UDSO + 000113' 254000 000143' 01490 JRST UDLK + 000114' 254000 000131' 01500 JRST UDEN ;77 + 000020 01510 UUOT2L=.-UUOT2 + SYSCON - UUO HANDLER PAGE 6 + 8-9-65 + + + + 01550 ,DISPATCH TO SPECIAL ROUTINE + 01560 DEFINE DSPT(A) + 01570 <U'A: PUSHJ PDP,UDSP + 01580 JRST A(TAC) + 01590 > + 000115' 200046 000003 01600 UDSP: MOVE TAC,DEVSER(DEVDAT) + 000116' 200106 000001 01610 MOVE TAC1,DEVCHR(DEVDAT) + 000117' 607100 000020 01620 TLNN TAC1,IORET + 000120' 201040 000116' 01630 MOVEI TAC,NRTOSP-4 ;IGNORE THESE CALLS FOR NON- + 000121' 263140 000000 01640 POPJ PDP, + 000122' 254000 000235' 01650 NRTOSP: JRST CUXIT1 ;SKIP RETURN + 000123' 254000 000235' 01660 JRST CUXIT1 ;SKIP RETURN + 000124' 265240 000000* 01670 JSP DAT,ERROR ;DUMP0 + 000125' 265240 000124* 01680 JSP DAT,ERROR ;DUMP1 + 000126' 254000 000072* 01690 JRST UUOERR ;USETO + 000127' 254000 000126* 01700 JRST UUOERR ;USETI + 000130' 254000 000127* 01710 JRST UUOERR ;GETF + 000131' 260140 000000* 01720 UDEN: PUSHJ PDP,WAIT1 + 000132' 661000 000002 01730 TLO IOS,IOBEG + 000133' 620000 776000 01740 TRZ IOS,776000 + 000134' 202006 000002 01750 MOVEM IOS,DEVIOS(DEVDAT) + 000135' 135040 000056* 01760 LDB TAC,PUUOAC + 000136' 661300 020000 01770 TLO DEVDAT,ENTRB + 000137' 621300 002000 01780 TLZ DEVDAT,CLOSB + 000140' 502301 000057* 01790 HLLM DEVDAT,USRJDA(TAC) + 000141' 260140 000115' 01800 PUSHJ PDP,UDSP + 000142' 254001 000004 01810 JRST DEN(TAC) + + 000143' 260140 000131* 01830 UDLK: PUSHJ PDP,WAIT1 + 000144' 630000 000251' 01840 TDZ IOS,[XWD IOEND,776000] + 000145' 202006 000002 01850 MOVEM IOS,DEVIOS(DEVDAT) + 000146' 135040 000135* 01860 LDB TAC,PUUOAC + 000147' 661300 040000 01870 TLO DEVDAT,LOOKB + 000150' 621300 002000 01880 TLZ DEVDAT,CLOSB + 000151' 502301 000140* 01890 HLLM DEVDAT,USRJDA(TAC) + 000152' 260140 000115' 01900 PUSHJ PDP,UDSP + 000153' 254001 000005 01910 JRST DLK(TAC) + + 000154' 260140 000115' 01930 DSPT(DSO)^UDSO: PUSHJ PDP,UDSP + 000155' 254001 000010 JRST DSO(TAC) + + 000156' 260140 000115' 01950 DSPT(DSI)^UDSI: PUSHJ PDP,UDSP + 000157' 254001 000011 JRST DSI(TAC) + + 000160' 260140 000115' 01970 DSPT(DGF)^UDGF: PUSHJ PDP,UDSP + 000161' 254001 000012 JRST DGF(TAC) + + SYSCON - UUO HANDLER PAGE 7 + 8-9-65 + + + + 02020 , 6-CSS-DEC-CALL-PL-PRE2 + 02030 , H. R. MORSE 64-11-17 + 02040 , CALLING SEQUENCE + 02050 , CALL 0,[SIXBIT/NAME/] + 02060 , WHERE NAME IS THE NAME OF A SYSTEM ROUTINE. + 02070 , IF NO SYSTEM ROUTINE WITH THE SPECIFIED NAME IF FOUND, THIS ROUTINE + 02080 , EXISTS TO ERROR. + 02090 , MONITOR INTERFACE + 02100 , ROUTINES CALLED: ERROR, HASH, SYSTEM ROUTINES DEFINED BY + 02110 , USE OF UCALIN. + 02120 , SYMBOLS SET/USED: + 02130 , ACCUMULATORS: DAT S/U PROG U + 02140 , PDP U UUO S/U + 02150 ;CONTENTS OF USER AC PLACED IN AC TAC + + 000162' 661600 000011 02170 UCALL: TLO UUO,JDAT ;RELATIVIZE UUO ADDRESS + 000163' 200260 000014 02180 MOVE DAT,@UUO; DAT:=NAME OF SYSTEM ROUTINE C + 000164' 205100 777760 02190 MOVSI TAC1,-UCLLEN + 000165' 312242 000174' 02200 CAME DAT,UCLTAB(TAC1); SEARCH SYSTEM TOUTINE NAME TA + 000166' 253100 000165' 02210 AOBJN TAC1,.-1 + 000167' 135240 000146* 02220 LDB DAT,PUUOAC ;USER UUO AC FIELD + 000170' 505240 000011 02230 HRLI DAT,JDAT + 000171' 200060 000005 02240 MOVE TAC,@DAT ;PICK UP CONTENTS OF USER AC + 000172' 321122 000214' 02250 JUMPL TAC1,@UCLJMP(TAC1) + 000173' 254000 000130* 02260 JRST UUOERR + + 02280 DEFINE NAMES + 02290 < X DDTIN,DDTIN + 02300 X DDTOUT,DDTOUT + 02310 X DDTGT,DDTGT + 02320 X DDTRL,DDTRL + 02330 X SETDDT,SETDDT + 02340 X DEVCHR,DVCHR + 02350 X GETCHR,DVCHR + 02360 X WAIT,WAIT + 02370 X RESET,RESET + 02380 X EXIT,EXIT + 02390 X LDRBLT,LDRBLT + 02400 X UTPCLR,UTPCLR + 02410 X DATE,DATE + 02420 X SETPOV,SETPOV + 02430 X SWITCH,SWITCH + 02440 X TIMER,TIMER + 02450 > + 02460 DEFINE X (A,B) + 02470 < SIXBIT /A/ + 02480 > + 000174' 444464 515600 02490 UCLTAB: NAMES^ X DDTIN,DDTIN^ SIXBIT /DDTIN/ + 000175' 444464 576564 X DDTOUT,DDTOUT^ SIXBIT /DDTOUT/ + 000176' 444464 476400 X DDTGT,DDTGT^ SIXBIT /DDTGT/ + 000177' 444464 625400 X DDTRL,DDTRL^ SIXBIT /DDTRL/ + SYSCON - UUO HANDLER PAGE 7-1 + 8-9-65 + + 000200' 634564 444464 X SETDDT,SETDDT^ SIXBIT /SETDDT/ + 000201' 444566 435062 X DEVCHR,DVCHR^ SIXBIT /DEVCHR/ + 000202' 474564 435062 X GETCHR,DVCHR^ SIXBIT /GETCHR/ + 000203' 674151 640000 X WAIT,WAIT^ SIXBIT /WAIT/ + 000204' 624563 456400 X RESET,RESET^ SIXBIT /RESET/ + 000205' 457051 640000 X EXIT,EXIT^ SIXBIT /EXIT/ + 000206' 544462 425464 X LDRBLT,LDRBLT^ SIXBIT /LDRBLT/ + 000207' 656460 435462 X UTPCLR,UTPCLR^ SIXBIT /UTPCLR/ + 000210' 444164 450000 X DATE,DATE^ SIXBIT /DATE/ + 000211' 634564 605766 X SETPOV,SETPOV^ SIXBIT /SETPOV/ + 000212' 636751 644350 X SWITCH,SWITCH^ SIXBIT /SWITCH/ + 000213' 645155 456200 X TIMER,TIMER^ SIXBIT /TIMER/ + 000020 02500 UCLLEN=.-UCLTAB + + 02520 DEFINE X(A,B) + 02530 < JRST B + 02540 EXTERNAL B + 02550 > + 000214' 254000 000000* 02560 UCLJMP: NAMES^ X DDTIN,DDTIN^ JRST DDTIN + 000215' 254000 000000* X DDTOUT,DDTOUT^ JRST DDTOUT + 000216' 254000 000000* X DDTGT,DDTGT^ JRST DDTGT + 000217' 254000 000000* X DDTRL,DDTRL^ JRST DDTRL + 000220' 254000 000000* X SETDDT,SETDDT^ JRST SETDDT + 000221' 254000 000000* X DEVCHR,DVCHR^ JRST DVCHR + 000222' 254000 000221* X GETCHR,DVCHR^ JRST DVCHR + 000223' 254000 000000* X WAIT,WAIT^ JRST WAIT + 000224' 254000 000000* X RESET,RESET^ JRST RESET + 000225' 254000 000000* X EXIT,EXIT^ JRST EXIT + 000226' 254000 000000* X LDRBLT,LDRBLT^ JRST LDRBLT + 000227' 254000 000000* X UTPCLR,UTPCLR^ JRST UTPCLR + 000230' 254000 000000* X DATE,DATE^ JRST DATE + 000231' 254000 000000* X SETPOV,SETPOV^ JRST SETPOV + 000232' 254000 000000* X SWITCH,SWITCH^ JRST SWITCH + 000233' 254000 000000* X TIMER,TIMER^ JRST TIMER + SYSCON - UUO HANDLER PAGE 8 + 8-9-65 + + + + 02600 , DEV 06 00 EX COM L PT PRE 02 UXIT + 02610 , H. R. MORSE 64-12-26 + 02620 , CALLING SEQUENCE + 02630 , ANY TRANSFER OF CONTROL TO UXIT + 02640 , EXITS THIS UUO CALL. + 02650 , MONITOR INTERFACE + 02660 , SYMBOLS SET/USED: + 02670 , ACCUMULATORS: MAY RESTORE ALL ACCUMULATORS + 02680 , JDAT U + 02690 , PDP U + 02700 , 17 S/U + 02710 , JOB AREA: JOBAC U + 02720 , SYSTEM ADDRESSES: USRUXT U + 02730 , USRLEV S/U + SYSCON - UUO HANDLER PAGE 9 + 8-9-65 + + + + + 02780 INTERN UXIT,CUXIT1,CUXIT2 + + 000234' 350003 000000 02800 CUXIT2: AOS (PDP) + 000235' 350003 000000 02810 CUXIT1: AOS (PDP) + 000236' 262140 000046* 02820 UXIT: POP PDP,USRSAV ;RESTORE UUO EXIT ADDRESS FRO + 000237' 250040 000236* 02830 EXCH TAC,USRSAV + 000240' 607040 010000 02840 TLNN TAC,USRMOD ;WAS ENTRY FROM USER MODE? + 000241' 254000 000246' 02850 JRST UXIT2 + 000242' 202040 000237* 02860 MOVEM TAC,USRSAV ;SET UP RETURN + 000243' 205751 000000* 02870 MOVSI 17, JOBAC(JDAT) ;RESTORE ACCUMULATO + 000244' 251740 000017 02880 BLT 17,17 + 000245' 254120 000242* 02890 UXIT1: JRST 2,@USRSAV ;RETURN TO USERS PROGRAM + + 000246' 250040 000245* 02910 UXIT2: EXCH TAC,USRSAV + 000247' 254120 000246* 02920 JRST 2,@USRSAV + + 02940 END, + 000250' 331100 000014 + 000251' 000040 776000 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000252 + +9K CORE USED + SYSCON - UUO HANDLER PAGE 10 + SYMBOL TABLE + + 000264 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLDS 000000 EXT +CLEN 000000 EXT +CLOSB 002000 INT +CLOSE1 000105' EXT +CLSIN 000002 INT +CLSOUT 000001 INT +CUXIT1 000235' INT +CUXIT2 000234' INT +D 000017 INT +DAT 000005 INT +DATE 000230' EXT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTGT 000216' EXT +DDTIN 000214' EXT +DDTMEM 000037 INT +DDTOUT 000215' EXT +DDTRL 000217' EXT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT + SYSCON - UUO HANDLER PAGE 10-1 + SYMBOL TABLE + +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVCHR 000222' EXT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERROR 000125' EXT +EXIT 000225' EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +ILLINS 000053' EXT +IN 000103' EXT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIERR 000065' EXT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT + SYSCON - UUO HANDLER PAGE 10-2 + SYMBOL TABLE + +JNA 004000 INT +JOBAC 000243' EXT +JOBADR 000034' EXT +JOBDAT 000042' EXT +JOBPDL 000044' EXT +LDRBLT 000226' EXT +LOOKB 040000 INT +MJOBPD 000043' EXT +MTAPE1 000107' EXT +MTW 010000 INT +NRTOSP 000122' +OBUFB 100000 INT +OUT 000104' EXT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PROG 000007 INT +PUUOAC 000167' EXT +RELEA1 000106' EXT +RESET 000224' EXT +RUN 200000 INT +RUNABL 204000 INT +SETDDT 000220' EXT +SETPOV 000231' EXT +SWITCH 000232' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TIMER 000233' EXT +TTYATC 020000 INT +TTYUSE 010000 INT +UCALL 000162' +UCLJMP 000214' +UCLLEN 000020 +UCLTAB 000174' +UDEN 000131' +UDGF 000160' +UDLK 000143' +UDSI 000156' +UDSO 000154' +UDSP 000115' +UINBF 000101' EXT +UINIT 000074' EXT +UOUTBF 000102' EXT +USETST 000075' EXT +USRJDA 000151' EXT +USRMOD 010000 INT +USRREL 000021' EXT +USRSAV 000247' EXT +USTATO 000076' EXT +USTATS 000077' EXT +USTATZ 000100' EXT +UTPCLR 000227' EXT + SYSCON - UUO HANDLER PAGE 10-3 + SYMBOL TABLE + +UUO 000014 INT +UUO0 000000' INT +UUODSP 000070' +UUOERR 000173' EXT +UUOSY1 000046' +UUOSYS 000030' +UUOT1 000073' +UUOT1L 000002 +UUOT2 000075' +UUOT2L 000020 +UXIT 000236' INT +UXIT1 000245' +UXIT2 000246' +WAIT 000223' EXT +WAIT1 000143' EXT + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +SSS YYY YYY SSS CCC SSS SSS +SSS YYY YYY SSS CCC SSS SSS +SSS YYY YYY SSS CCC SSS SSS +SSS YYY YYY SSS CCC SSS SSS +SSS YYY YYY SSS CCC SSS SSS +SSS YYY YYY SSS CCC SSS SSS + SSSSSSSSS YYY SSSSSSSSS CCC SSSSSSSSS SSSSSSSSS + SSSSSSSSS YYY SSSSSSSSS CCC SSSSSSSSS SSSSSSSSS + SSSSSSSSS YYY SSSSSSSSS CCC SSSSSSSSS SSSSSSSSS + SSS YYY SSS CCC SSS SSS + SSS YYY SSS CCC SSS SSS + SSS YYY SSS CCC SSS SSS + SSS YYY SSS CCC SSS SSS + SSS YYY SSS CCC SSS SSS + SSS YYY SSS CCC SSS SSS +SSSSSSSSSSSS YYY SSSSSSSSSSSS CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +SSSSSSSSSSSS YYY SSSSSSSSSSSS CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS +SSSSSSSSSSSS YYY SSSSSSSSSSSS CCCCCCCCCCCC SSSSSSSSSSSS SSSSSSSSSSSS + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :SYSCSS.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:25 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2209 +File will be deleted after printing + SYSCSS - COMMON SYSTEM SUBROUTINES PAGE 1 + 8-9-65 + + 00010 XLIST + 01930 LIST + SYSCSS - COMMON SYSTEM SUBROUTINES PAGE 7 + 8-9-65 + + + 00010 TITLE SYSCSS - COMMON SYSTEM SUBROUTINES + 00020 SUBTTL 8-9-65 + 00030 EXTERNAL UXIT,ERROR,USRDDT,USRPOV,PUUOAC,USRREL + + 00050 ;RETURN THE DATE TO THE USER + + + 00080 INTERNAL DATE,THSDAT + + 000000' 200240 000002' 00100 DATE: MOVE DAT, THSDAT + 000001' 254000 000005' 00110 JRST STOAC + + 000002' 000000 000000 00130 THSDAT: 0 ;CONTAINS THE DATE + + 00150 ;RETURN TIME SYSTEM HAS RUN IN 60THS OF A SECOND + + 00170 INTERNAL TIMER + 00180 EXTERNAL TIME + + 000003' 334240 000000* 00200 TIMER: SKIPA DAT, TIME ;FALL INTO STOAC + + 00220 ;RETURN DATA SWITCHES + + 00240 INTERNAL SWITCH + + 000004' 700040 000005 00260 SWITCH: DATAI DAT + + 00280 ;STORE DAT IN USER AC + + 00300 INTERNAL STOAC + + 000005' 135040 000000* 00320 STOAC: LDB TAC, PUUOAC + 000006' 505040 000007 00330 HRLI TAC, PROG + 000007' 202260 000001 00340 MOVEM DAT,@TAC + 000010' 254000 000000* 00350 JRST UXIT + + 00370 ;RETURN DEVICE CHARACTERISTICS + + 00390 INTERNAL DVCHR + 00400 EXTERNAL JOB,DEVSRC,PJOBN + + 000011' 200200 000000* 00420 DVCHR: MOVE ITEM,JOB + 000012' 260140 000000* 00430 PUSHJ PDP,DEVSRC ;SEARCH FOR DEVICE + 000013' 334240 000034' 00440 SKIPA DAT,[0] ;NOT A DEVICE + 000014' 334246 000004 00450 SKIPA DAT,DEVMOD(DEVDAT) + 000015' 254000 000005' 00460 JRST STOAC + 000016' 135040 000000* 00470 LDB TAC,PJOBN ;GET JOB NUMBER + 000017' 312040 000011* 00480 CAME TAC,JOB ;DOES USER ALREADY HAVE THIS DEVICE? + 000020' 606240 600000 00490 TRNN DAT,ASSCON+ASSPRG ;NO + 000021' 661240 000040 00500 TLO DAT,DVAVAL ;NO, BUT HE CAN GET IT + 000022' 254000 000005' 00510 JRST STOAC + SYSCSS - COMMON SYSTEM SUBROUTINES PAGE 2 + 8-9-65 + + + + 00550 , CALLING SEQUENCE + 00560 , PUSHJ PDP,HASH + 00570 , EXIT;L ALWAYS RETURNS HERE + 00580 , COMPUTES XOR HASH TYPE INDEX FROM NAME (SIXBIT CODE) IN AC DAT + 00590 , AND LEAVES THE RESULT (00<OR= INDEX <OR=77) AS AN INTEGER IN TAC. + 00600 , THE ALGORITHM IS AS FOLLOWS: (V = EXCLUSIVE OR) + 00610 , BIT 35:=8V17V26V35 + 00620 , 34:=7V16V25V34 + 00630 , 33:=6V15V24V33 + 00640 , 32:=5V11V23V29 + 00650 , 31:=4V10V22V28 + 00660 , 30:=3V9V21V27 + 00670 , MONITOR INTERFACE + 00680 , SYMBOLS SET/USED: + 00690 , ACCUMULATORS: DAT U TAC S/U + 00700 , PDP S/U TAC1 S/U + 00710 ; INTERN HASH + + 00730 ;HASH: HLR TAC,DAT + 00740 ; MOVE TAC1,DAT + 00750 ; XORB TAC1,TAC + 00760 ; ROT TAC1,-11 + 00770 ; XOR TAC,TAC1 + 00780 ; ANDI TAC,UTBNM1 + 00790 ; POPJ PDP, ; RETURN + SYSCSS - COMMON SYSTEM SUBROUTINES PAGE 3 + 8-9-65 + + + 00820 INTERNAL SETDDT + + 000023' 545040 010000 00840 SETDDT: HLRI TAC,10000 + 000024' 202040 000000* 00850 MOVEM TAC,USRDDT + 000025' 254000 000010* 00860 JRST UXIT + + + 00890 INTERNAL SETPOV + + 000026' 545040 010000 00910 SETPOV: HLRI TAC,10000 + 000027' 202040 000000* 00920 MOVEM TAC,USRPOV + 000030' 254000 000025* 00930 JRST UXIT + + 00950 ;WAIT FOR IO TO BECOME INACTIVE ON CHANNEL AC + + 00970 INTERNAL WAIT + 00980 EXTERNAL IOIERR,WAIT1 + + 000031' 322300 000000* 01000 WAIT: JUMPE DEVDAT,IOIERR ;CHANNEL ASSIGNED? + 000032' 260140 000000* 01010 PUSHJ PDP,WAIT1 ;WAIT TILL INACTIVE + 000033' 254000 000030* 01020 JRST UXIT + 01030 END, + 000034' 000000 000000 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000035 + +8K CORE USED + SYSCSS - COMMON SYSTEM SUBROUTINES PAGE 4 + SYMBOL TABLE + + 000203 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +D 000017 INT +DAT 000005 INT +DATE 000000' INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DEVSRC 000012' EXT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVCHR 000011' INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT + SYSCSS - COMMON SYSTEM SUBROUTINES PAGE 4-1 + SYMBOL TABLE + +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERROR 000000 EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIERR 000031' EXT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JOB 000017' EXT +LOOKB 040000 INT +MTW 010000 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PJOBN 000016' EXT +PROG 000007 INT +PUUOAC 000005' EXT + SYSCSS - COMMON SYSTEM SUBROUTINES PAGE 4-2 + SYMBOL TABLE + +RUN 200000 INT +RUNABL 204000 INT +SETDDT 000023' INT +SETPOV 000026' INT +STOAC 000005' INT +SWITCH 000004' INT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +THSDAT 000002' INT +TIME 000003' EXT +TIMER 000003' INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRDDT 000024' EXT +USRMOD 010000 INT +USRPOV 000027' EXT +USRREL 000000 EXT +UUO 000014 INT +UXIT 000033' EXT +WAIT 000031' INT +WAIT1 000032' EXT + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS IIIIIIIII NNN NNN IIIIIIIII + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS IIIIIIIII NNN NNN IIIIIIIII + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS IIIIIIIII NNN NNN IIIIIIIII +SSS YYY YYY SSS III NNN NNN III +SSS YYY YYY SSS III NNN NNN III +SSS YYY YYY SSS III NNN NNN III +SSS YYY YYY SSS III NNNNNN NNN III +SSS YYY YYY SSS III NNNNNN NNN III +SSS YYY YYY SSS III NNNNNN NNN III + SSSSSSSSS YYY SSSSSSSSS III NNN NNN NNN III + SSSSSSSSS YYY SSSSSSSSS III NNN NNN NNN III + SSSSSSSSS YYY SSSSSSSSS III NNN NNN NNN III + SSS YYY SSS III NNN NNNNNN III + SSS YYY SSS III NNN NNNNNN III + SSS YYY SSS III NNN NNNNNN III + SSS YYY SSS III NNN NNN III + SSS YYY SSS III NNN NNN III + SSS YYY SSS III NNN NNN III +SSSSSSSSSSSS YYY SSSSSSSSSSSS IIIIIIIII NNN NNN IIIIIIIII +SSSSSSSSSSSS YYY SSSSSSSSSSSS IIIIIIIII NNN NNN IIIIIIIII +SSSSSSSSSSSS YYY SSSSSSSSSSSS IIIIIIIII NNN NNN IIIIIIIII + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :SYSINI.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:25 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2202 +File will be deleted after printing + SYSINI - SYSTEM INITIALIZATION PAGE 1 + 8-9-65 + + 00010 XLIST + 01930 LIST + SYSINI - SYSTEM INITIALIZATION PAGE 7 + 8-9-65 + + + 00010 TITLE SYSINI - SYSTEM INITIALIZATION + 00020 SUBTTL 8-9-65 + 00030 EXTERNAL APRCHN,ERROR,IOINI + 00040 EXTERNAL DDT,NULJOB,SYSMAK,ONCE,SYSBEG,SYSBG1,SYSEND + 00050 EXTERNAL CORTAB,CORLST,CORTAL,CORBLK,SYSSIZ,LINKSR + + 00070 ;SYSTEM INITIALIZATION DISPATCHTABLE, STARTING AT LOC. 140 + 00080 ;THIS SUBROUTINE MUST BE LOADED FIRST + 00090 ;ROUTINE ONCE IS ONCE ONLY CODE. IT CONVERTS THE DATE + 00100 ;AND SETS UP IO SERVICE CHAIN. + + + + 00140 INTERNAL SYSDSP + + 000000' 254000 000010' 00160 SYSDSP: JRST SYSINI ;INITIALIZE SYSTEM VARIABLES ONCE ONLY + 000001' 254000 000000* 00170 JRST DDT ;EXEC DDT + 000002' 254000 000000* 00180 JRST SYSMAK ;MAKE NEW SYSTEM + 000003' 254000 000010' 00190 JRST SYSINI ;INITIALIZE SYSTEM VARIABLES ALWAYS + 000004' 254500 000000* 00200 JEN NULJOB ;ERROR RECOVERY + 000005' 254000 000007' 00210 JRST SYSONE ;DO ONCE ONLY CODE OVER AGAIN + 000006' 254000 000012' 00220 JRST JSR2 ;BYPASS ONCE ONLY OPERATOR DIALOG + 00230 ;(IN CASE CONSOLE TTY DOWN) + SYSINI - SYSTEM INITIALIZATION PAGE 2 + 8-9-65 + + + + 00270 ;INITIALIZE SYSTEM DATA STORAGE + + 00290 INTERNAL SYSINI + 010000 00300 NXM=10000 ;NON EX MEM FLAG + + 000007' 264000 000000* 00320 SYSONE: JSR ONCE ;ONCE ONLY CODE + 000010' 700200 200000 00330 SYSINI: CONO APR,200000 ;IO RESET + 000011' 264000 000007* 00340 JSR1: JSR ONCE ;DO ONCE ONLY CODE ONCE + 000012' 264000 000000* 00350 JSR2: JSR LINKSR ;LINK IO SERVICE ROUTINES + 000013' 204040 000014' 00360 MOVS TAC,.+1 + 000014' 403100 000000* 00370 SETZB TAC1,SYSBEG + 000015' 206040 000011' 00380 MOVSM TAC,JSR1 + 000016' 206040 000012' 00390 MOVSM TAC,JSR2 + 000017' 541040 000000* 00400 HRRI TAC,SYSBG1 ;CLEAR SYSTEM DATA STORAGE + 000020' 251040 000000* 00410 BLT TAC,SYSEND + 000021' 205040 430000 00420 MOVSI TAC, DVDIRIN+TTYATC+TTYUSE + 000022' 541040 600000 00430 HRRI TAC,ASSCON+ASSPRG + 000023' 554300 000000* 00440 HLRZ DEVDAT,DEVLST ;SCAN ALL DEVICES + 000024' 412046 000004 00450 SYS1: ANDCAM TAC, DEVMOD(DEVDAT) ;CLEAR DIRECTORY IN CORE BIT, + 00460 ;ASSIGNED BY CONSOLE & PROGRAM + 000025' 402006 000005 00470 SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME + 000026' 554306 000003 00480 HLRZ DEVDAT, DEVSER(DEVDAT) + 000027' 326300 000024' 00490 JUMPN DEVDAT, SYS1 + 000030' 200440 000105' 00500 MOVE JDAT,COREP ;SET UP CORE USE BIT TABLE + 000031' 202440 000000* 00510 MOVEM JDAT,CORLST + 000032' 201040 000000* 00520 MOVEI TAC,CORBLK ;NO. OF 1K BLOCKS IN TABLE + 000033' 700200 010000 00530 SYS2: CONO APR,NXM ;CLEAR NON EX MEM + 000034' 133000 000011 00540 IBP JDAT ;MOVE BYTE POINTER + 000035' 510242 000000 00550 HLLZ DAT,(TAC1) ;REFERENCE MEMORY, CLEAR RT. OF DAT + 000036' 313100 000000* 00560 CAMLE TAC1,SYSSIZ ;HIGHEST LOC IN EXEC. + 000037' 700300 010000 00570 CONSZ APR,NXM ;CAN MEMORY BE USED FOR USER PROG? + 000040' 344240 000043' 00580 AOJA DAT,SYS3 ;NO, MARK AS INACCESIBLE (1 BIT) + 000041' 350000 000000* 00590 AOS CORTAL + 000042' 202440 000031* 00600 MOVEM JDAT,CORLST ;AND SET LAST FREE BLOCK POINTER + 000043' 137240 000011 00610 SYS3: DPB DAT,JDAT ;STORE 0 OR 1 IN TABLE + 000044' 271100 002000 00620 ADDI TAC1,2000 ;INCREMENT MEMORY REF + 000045' 367040 000033' 00630 SOJG TAC,SYS2 + 000046' 133000 000042* 00640 IBP CORLST ;SET TO FIRST UNAVAILABLE BLOCK + 000047' 541040 000051' 00650 HRRI 1,IOGO + 000050' 542040 000000' 00660 HRRM 1,SYSDSP ;FALINTO IOGO + SYSINI - SYSTEM INITIALIZATION PAGE 3 + 8-9-65 + + + + 00700 ;INITIALIZE ALL IODEVICES + + 00720 INTERNAL IOGO + 00730 EXTERNAL DEVLST, MJOBN, JBTADR,JBTSTS,IOINI + 00740 EXTERNAL DCREQ,MTREQ,DTREQ + + 000051' 201040 000000* 00760 IOGO: MOVEI TAC,APRCHN + 000052' 700201 633440 00770 CONO APR,633440(TAC) + 000053' 554040 000023* 00780 HLRZ TAC, DEVLST ;CHAIN OF DEVICE DATA BLOKS + 000054' 201100 200000 00790 IOG0: MOVEI TAC1,ASSPRG ;CLEAR ASSIGNED BY PROGRAM BIT + 000055' 413101 000004 00800 ANDCAB TAC1,DEVMOD(TAC) + 000056' 525200 000720 00810 HRLOI ITEM,IORET+7*PICHN ;CLEAR JOB NO., USER CHANNEL + 000057' 602100 400000 00820 TRNE TAC1,ASSCON + 000060' 661200 777000 00830 TLO ITEM,777000 + 000061' 406201 000001 00840 ANDM ITEM,DEVCHR(TAC) ;BUT NOT IORET BIT OR PII CHA + 000062' 402001 000002 00850 SETZM DEVIOS(TAC) ;CLEAR IO STATUS WORD + 000063' 402001 000006 00860 SETZM DEVBUF(TAC) ;CLEAR BUFFER ADDRESS + 000064' 554041 000003 00870 HLRZ TAC, DEVSER(TAC) + 000065' 326040 000054' 00880 JUMPN TAC, IOG0 + 000066' 476000 000000* 00890 SETOM DCREQ ;CLEAR DEVICE REQUEST COUNTS + 000067' 476000 000000* 00900 SETOM MTREQ + 000070' 476000 000000* 00910 SETOM DTREQ + 000071' 201140 000100' 00920 MOVEI PDP,IOPDL-1 + 000072' 260140 000000* 00930 PUSHJ PDP,IOINI ;INITIALIZE IO DEVICES + 000073' 205240 000000* 00940 MOVSI DAT,MJOBN ;JOB NUMBER ASSIGNED BIT + 000074' 200040 000106' 00950 MOVE TAC,[XWD JERR,1] ;SET ERROR BIT, CLEAR ALL 0TH + 000075' 202045 000000* 00960 IOG1: MOVEM TAC,JBTSTS(DAT) + 000076' 253240 000075' 00970 AOBJN DAT,IOG1 + 000077' 700600 012377 00980 CONO PI,12377 + 000100' 254000 000004* 00990 JRST NULJOB ;START THE NULL JOB + 000101' 01000 IOPDL: BLOCK 4 + 000105' 440100 000000* 01010 COREP: POINT 1,CORTAB ;1 BIT BYTE POINTER TO CORE USE TABLE + + 000010' 01030 END SYSINI + 000106' 002000 000001 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000107 + +8K CORE USED + SYSINI - SYSTEM INITIALIZATION PAGE 4 + SYMBOL TABLE + + 000225 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +APR 000000 SPD +APRCHN 000051' EXT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +CORBLK 000032' EXT +COREP 000105' +CORLST 000046' EXT +CORTAB 000105' EXT +CORTAL 000041' EXT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCREQ 000066' EXT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDT 000001' EXT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVLST 000053' EXT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT + SYSINI - SYSTEM INITIALIZATION PAGE 4-1 + SYMBOL TABLE + +DSO 000010 INT +DTREQ 000070' EXT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT +DVTTY 000010 INT +ENTRB 020000 INT +ERROR 000000 EXT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOG0 000054' +IOG1 000075' +IOGO 000051' INT +IOIMPM 400000 INT +IOINI 000072' EXT +IONRCK 000100 INT +IOPDL 000101' +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTADR 000000 EXT +JBTSTS 000075' EXT +JBUF 000005 INT + SYSINI - SYSTEM INITIALIZATION PAGE 4-2 + SYMBOL TABLE + +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +JSR1 000011' +JSR2 000012' +LINKSR 000012' EXT +LOOKB 040000 INT +MJOBN 000073' EXT +MTREQ 000067' EXT +MTW 010000 INT +NULJOB 000100' EXT +NXM 010000 +OBUFB 100000 INT +ONCE 000011' EXT +OUTPB 004000 INT +PDP 000003 INT +PI 000004 SPD +PICHN 000100 INT +PROG 000007 INT +RUN 200000 INT +RUNABL 204000 INT +SYS1 000024' +SYS2 000033' +SYS3 000043' +SYSBEG 000014' EXT +SYSBG1 000017' EXT +SYSDSP 000000' INT +SYSEND 000020' EXT +SYSINI 000010' INT +SYSMAK 000002' EXT +SYSONE 000007' +SYSSIZ 000036' EXT +TAC 000001 INT +TAC1 000002 INT +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS MMM MMM AAAAAAAAA KKK KKK + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS MMM MMM AAAAAAAAA KKK KKK + SSSSSSSSSSSS YYY YYY SSSSSSSSSSSS MMM MMM AAAAAAAAA KKK KKK +SSS YYY YYY SSS MMMMMM MMMMMM AAA AAA KKK KKK +SSS YYY YYY SSS MMMMMM MMMMMM AAA AAA KKK KKK +SSS YYY YYY SSS MMMMMM MMMMMM AAA AAA KKK KKK +SSS YYY YYY SSS MMM MMM MMM AAA AAA KKK KKK +SSS YYY YYY SSS MMM MMM MMM AAA AAA KKK KKK +SSS YYY YYY SSS MMM MMM MMM AAA AAA KKK KKK + SSSSSSSSS YYY SSSSSSSSS MMM MMM AAA AAA KKKKKKKKK + SSSSSSSSS YYY SSSSSSSSS MMM MMM AAA AAA KKKKKKKKK + SSSSSSSSS YYY SSSSSSSSS MMM MMM AAA AAA KKKKKKKKK + SSS YYY SSS MMM MMM AAAAAAAAAAAAAAA KKK KKK + SSS YYY SSS MMM MMM AAAAAAAAAAAAAAA KKK KKK + SSS YYY SSS MMM MMM AAAAAAAAAAAAAAA KKK KKK + SSS YYY SSS MMM MMM AAA AAA KKK KKK + SSS YYY SSS MMM MMM AAA AAA KKK KKK + SSS YYY SSS MMM MMM AAA AAA KKK KKK +SSSSSSSSSSSS YYY SSSSSSSSSSSS MMM MMM AAA AAA KKK KKK +SSSSSSSSSSSS YYY SSSSSSSSSSSS MMM MMM AAA AAA KKK KKK +SSSSSSSSSSSS YYY SSSSSSSSSSSS MMM MMM AAA AAA KKK KKK + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :SYSMAK.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:25 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2195 +File will be deleted after printing + SYSMAK - MAKE NEW SYSTEM WITH THE OLD PAGE 1 + 7-21-65 + + 00010 XLIST + 01930 LIST + SYSMAK - MAKE NEW SYSTEM WITH THE OLD PAGE 7 + 7-21-65 + + + 00010 TITLE SYSMAK - MAKE NEW SYSTEM WITH THE OLD + 00020 SUBTTL 7-21-65 + 00030 ,SYSMAK ASSUMES AN EXISTING SYSTEM WITH A LOADER IN CORE FOR JOB 1 + 00040 ,AND HIGHEST EMORY ADDRESS IN REAL 37. TO CREATE A NEW SYSTEM, SET + 00050 ,37 AS DESIRED, LOAD NEW SYSTEM (WITHOUT GOING INTO EXECUTION), AND + 00060 ,START AT REAL 62. THE COMPUTE WILL HALT AFTER THE NEW SYSTEM + 00070 ,HAS BEEN BLOCKED DOWN. TO START, PRESS CONTINUE OR START AT REAL + 00080 ,60. EXEC DDT (IF LOADED WITH THE NEW SYSTEM) STARTS AT REAL 141. + 00090 ;FROM REL. LOC. 30 ON UP IS BLOCKED DOWN + + 00110 ,WHEN LOADING A NEW SYSTEM, LOAD SYSINI FIRST. + 00120 ;SYSINI CONTAINS A DISPATCH TABLE DOCUMENTED TO BE AT LOC. 60 + 00130 ;ALSO LOAD IOINI LAST SINCE IT CONTAINS SOME ONCE ONLY CODE AT END + 00140 ;THEN LOAD SYSMAK FOLLOWED BY DDT(EXEC) + 00150 ;BE SURE THAT LOC SYSSIZ(SIZ OF SYSTEM) IS GREATER THAN + 00160 ;LAST LOC IN SYSMAK BEFORE STARTING TO LOAD. + 00170 ;LOC SYSSIZ IS IN LOWER CORE AND MAY HAVE TO BE PATCHED + 00180 ;USING CONSOLE SWITCHES. + + 00200 INTERNAL SYSMAK,MAKEND + 00210 EXTERNAL JBTADR,JBTAD1 + + 000000' 200040 000000* 00230 SYSMAK: MOVE 1,JBTAD1 ;LOADER BLOCK ADDRESS FROM JOB ADDRESS + 000001' 200301 000002 00240 MOVE 6,2(1) ;LOADER OFFSET + 000002' 271301 000000 00250 ADDI 6,(1) ;BLOCK ADDRESS+OFFSET + 000003' 200101 000006 00260 MOVE 2,6(1); SYSMBOL TABLE POINTER: -N,L = LOWEST AD + 000004' 271001 000002 00270 ADDI 2(1) + 000005' 564140 000002 00280 HLRO 3,2 + 000006' 213000 000003 00290 MOVNS 3 ;N = SYMBOL TABLE LENGTH + 000007' 200200 000037 00300 MOVE 4,DDTMEM ;MEMORY SIZE(LOC 37) + 000010' 202206 000037 00310 MOVEM 4,DDTMEM(6) ;STORE IN NEW DDTMEM + 000011' 275200 000200 00320 SUBI 4,200 ;ROOM FOR DECDUMP + 000012' 202206 000036 00330 MOVEM 4,DDTSYM(6) ;ALSO STORE IN WHAT WILL BECOME DDTSYM + 000013' 200240 000002 00340 MOVE 5,2 ;LEAVES ROOM FOR DECDMP + 000014' 270240 000003 00350 ADD 5,3 + 000015' 504240 000003 00360 HRL 5,3 ;C(5):=N,L+N + 000016' 274200 000005 00370 SUB 4,5 + 000017' 553000 000004 00380 HRRZS 4 ;C(4):=0,C(37)-200-(L+N) + 000020' 270100 000004 00390 ADD 2,4 ;C(2):=-N,C(37)-200-N + 000021' 202105 000000 00400 MOVEM 2,(5) + 000022' 542200 000023' 00410 HRRM 4,.+1 + 000023' 262245 000000 00420 POP 5,(5) ;MOVE SYMOBOL TABLE TO TOP OF MEMORY + 000024' 325240 000023' 00430 JUMPGE 5,.-1 + 000025' 200400 000034' 00440 MOVE 10,[BLT 3,(2)] + 000026' 200440 000035' 00450 MOVE 11,[JRST 4,] + 000027' 541140 000030 00460 HRRI 3,30 + 000030' 505146 000030 00470 HRLI 3,30(6) ;C(3):=LOADER OFFSET+LOADER BLOCK ADDRE + 000031' 550101 000006 00480 HRRZ 2,6(1) ;C(2):=LOWEST LOCATION IN SYMBOL TABLE + 000032' 540441 000000 00490 HRR 11,(1) ;C(11):=JRST 4,START ADDRESS + 000033' 254000 000010 00500 JRST 10 ;MOVE SYSTEM TO BOTTOM OF MEMORY AND HALT + + 000034' 00520 LIT + SYSMAK - MAKE NEW SYSTEM WITH THE OLD PAGE 1 + 7-21-65 + + 000034' 251142 000000 + 000035' 254200 000000 + + 000036' 00540 MAKEND: END, + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000036 + +8K CORE USED + SYSMAK - MAKE NEW SYSTEM WITH THE OLD PAGE 2 + SYMBOL TABLE + + 000162 +A 000000 INT +AC1 000015 INT +AC2 000016 INT +AC3 000017 INT +AL 000001 INT +ASSCON 400000 INT +ASSPRG 200000 INT +B 000014 INT +BUFPNT 000012 INT +BUFWRD 000013 INT +CLOSB 002000 INT +CLSIN 000002 INT +CLSOUT 000001 INT +D 000017 INT +DAT 000005 INT +DCL 000001 INT +DCW 020000 INT +DDI 000007 INT +DDO 000006 INT +DDTMEM 000037 INT +DDTSYM 000036 INT +DEN 000004 INT +DEVADR 000007 INT +DEVBUF 000006 INT +DEVCHR 000001 INT +DEVCTR 000011 INT +DEVDAT 000006 INT +DEVIAD 000007 INT +DEVIOS 000002 INT +DEVLOG 000005 INT +DEVMOD 000004 INT +DEVNAM 000000 INT +DEVOAD 000010 INT +DEVPTR 000010 INT +DEVSER 000003 INT +DGF 000012 INT +DIN 000003 INT +DLK 000005 INT +DOU 000002 INT +DR 000016 INT +DRL 000000 INT +DSI 000011 INT +DSO 000010 INT +DTW 040000 INT +DVAVAL 000040 INT +DVCDR 100000 INT +DVDIR 000004 INT +DVDIRI 400000 INT +DVIN 000002 INT +DVLPT 040000 INT +DVMTA 000020 INT +DVOUT 000001 INT + SYSMAK - MAKE NEW SYSTEM WITH THE OLD PAGE 2-1 + SYMBOL TABLE + +DVTTY 000010 INT +ENTRB 020000 INT +I 000010 INT +IB 000013 INT +IBUFB 200000 INT +INITB 400000 INT +INPB 010000 INT +IO 000020 INT +IOACT 010000 INT +IOBEG 000002 INT +IOBKTL 040000 INT +IOCON 000040 INT +IODEND 020000 INT +IODERR 200000 INT +IODISC 400000 INT +IODONE 400000 INT +IODTER 100000 INT +IOEND 000040 INT +IOFST 000004 INT +IOIMPM 400000 INT +IONRCK 000100 INT +IORDEL 000100 INT +IORET 000020 INT +IOS 000000 INT +IOSTRT 000010 INT +IOUSE 400000 INT +IOW 000001 INT +IOWC 000020 INT +IOWS 400000 INT +ITEM 000004 INT +JBFADR 000000 INT +JBFCTR 000002 INT +JBFPTR 000001 INT +JBTAD1 000000' EXT +JBTADR 000000 EXT +JBUF 000005 INT +JDAT 000011 INT +JERR 002000 INT +JIOW 100000 INT +JNA 004000 INT +LOOKB 040000 INT +MAKEND 000036' INT +MTW 010000 INT +OBUFB 100000 INT +OUTPB 004000 INT +PDP 000003 INT +PICHN 000100 INT +PROG 000007 INT +RUN 200000 INT +RUNABL 204000 INT +SYSMAK 000000' INT +TAC 000001 INT +TAC1 000002 INT + SYSMAK - MAKE NEW SYSTEM WITH THE OLD PAGE 2-2 + SYMBOL TABLE + +TEM 000010 INT +TTYATC 020000 INT +TTYUSE 010000 INT +USRMOD 010000 INT +UUO 000014 INT + MMM MMM AAAAAAAAA CCCCCCCCCCCC RRRRRRRRRRRR OOOOOOOOO +MMM MMM AAAAAAAAA CCCCCCCCCCCC RRRRRRRRRRRR OOOOOOOOO +MMM MMM AAAAAAAAA CCCCCCCCCCCC RRRRRRRRRRRR OOOOOOOOO +MMMMMM MMMMMM AAA AAA CCC RRR RRR OOO OOO +MMMMMM MMMMMM AAA AAA CCC RRR RRR OOO OOO +MMMMMM MMMMMM AAA AAA CCC RRR RRR OOO OOO +MMM MMM MMM AAA AAA CCC RRR RRR OOO OOO +MMM MMM MMM AAA AAA CCC RRR RRR OOO OOO +MMM MMM MMM AAA AAA CCC RRR RRR OOO OOO +MMM MMM AAA AAA CCC RRRRRRRRRRRR OOO OOO +MMM MMM AAA AAA CCC RRRRRRRRRRRR OOO OOO +MMM MMM AAA AAA CCC RRRRRRRRRRRR OOO OOO +MMM MMM AAAAAAAAAAAAAAA CCC RRR RRR OOO OOO +MMM MMM AAAAAAAAAAAAAAA CCC RRR RRR OOO OOO +MMM MMM AAAAAAAAAAAAAAA CCC RRR RRR OOO OOO +MMM MMM AAA AAA CCC RRR RRR OOO OOO +MMM MMM AAA AAA CCC RRR RRR OOO OOO +MMM MMM AAA AAA CCC RRR RRR OOO OOO +MMM MMM AAA AAA CCCCCCCCCCCC RRR RRR OOOOOOOOO +MMM MMM AAA AAA CCCCCCCCCCCC RRR RRR OOOOOOOOO +MMM MMM AAA AAA CCCCCCCCCCCC RRR RRR OOOOOOOOO + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :MACRO .LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:26 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:2189 +File will be deleted after printing + MACRO V.10 PAGE 1 + RPG/CMF/JF/PMH/DMN 7-SEPT-71 + + ;STANFORD ASSEMBLY: + 000170 LPTWID==^D120 ;120 CHARACTERS/LINE ON LPT AT STANFORD + TITLE MACRO V.10 + SUBTTL RPG/CMF/JF/PMH/DMN 7-SEPT-71 + ;COPYRIGHT 1968,1969,1970,1971, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. + + 000010 VMACRO==10 ;VERSION NUMBER + 000000 VUPDATE==0 ;DEC UPDATE LEVEL + 000000 VEDIT==0 ;EDIT NUMBER + 000000 VCUSTOM==0 ;NON-DEC UPDATE LEVEL + + + 000137 LOC <JOBVER==137> + 000137 001000 000000 <VCUSTOM>B2+<VMACRO>B11+<VUPDATE>B17+VEDIT + 000000' RELOC + MLON + + COMMENT * ASSEMBLY FEATURE SWITCHES (ACTION WHEN NON-ZERO) + + SWITCHES ON (NON-ZERO) IN DEC VERSION + CCLSW GIVES RAPID PROGRAM GENERATION FEATURE + FTDISK GIVES DISK FEATURES + RENTSW ASSEMBLE REENTRANT PROGRAMS + + SWITCHES OFF (ZERO) IN DEC VERSION + LNSSW GIVES LNS VERSION + IIISW GIVES III FEATURES + OPHSH GIVES HASH SEARCH OF OPCODES + * + MACRO V.10 PAGE 2 + DEFAULT ASSEMBLY SWITCH SETTINGS + + SUBTTL DEFAULT ASSEMBLY SWITCH SETTINGS + + + IFNDEF RENTSW,<RENTSW==0> + + IFNDEF LNSSW,<LNSSW==0> + IFN LNSSW,<FTDISK==0> + + IFNDEF CCLSW,<CCLSW==1> + 000001 IFN CCLSW,<FTDISK==1> + + IFNDEF UNIVR,<UNIVR==0> + + IFNDEF FTDISK,<FTDISK==0> + + IFNDEF IIISW,<IIISW==0> + + IFNDEF OPHSH,<OPHSH==0> + + MACRO V.10 PAGE 3 + OTHER PARAMETERS + + SUBTTL OTHER PARAMETERS + + 000062 .PDP== ^D50 ;BASIC PUSH-DOWN POINTER + IFNDEF LPTWID,<LPTWID==^D132> ;DEFAULT WIDTH OF PRINTER + 000170 .LPTWD==8*<LPTWID/8> ;USEFUL WIDTH IN MAIN LISTING + 000130 .CPL== .LPTWD-^D32 ;WIDTH AVAIABLE FOR TEXT WHEN + ;BINARY IS IN HALFWORD FORMAT + 000067 .LPP==^D55 ;LINES/PAGE + 000050 .STP== ^D40 ;STOW SIZE + 000120 .TBUF== ^D80 ;TITLE BUFFER + 000120 .SBUF== ^D80 ;SUB-TITLE BUFFER + 000024 .IFBLK==^D20 ;IFIDN COMPARISON BLOCK SIZE + 000022 .R1B==^D18 + 000012 .UNIV==^D10 ;NUMBER OF UNIVERSAL DEFINITIONS + 000004 .LEAF==4 ;SIZE OF BLOCKS IN MACRO TREE + + 000001 NCOLS==1 ;NUMBER OF COLUMNS IN SYMBOL TABLE + IFN CCLSW,<IFNDEF CTLSIZ,<CTLSIZ==^D200>> + IFN OPHSH,<IFNDEF PRIME,<PRIME==^D701>> + IFNDEF NUMBUF,< + IFE LNSSW,<NUMBUF==2 ;NUMBER OF INPUT BUFFERS> + IFN LNSSW,<NUMBUF==4 ;DOUBLE BUFFER FOR DOUBLE SIZE DEVICES> + > + + EXTERN JOBREL,JOBSYM,JOBDDT,JOBFF,JOBAPR,JOBSA + IFN CCLSW,< EXTERN JOBERR> + + SALL ;SUPPRESS ALL MACROS + + ;SOME ASCII CHARACTERS + + 000011 HT==11 + 000012 LF==12 + 000013 VT==13 + 000014 FF==14 + 000015 CR==15 + 000033 EOL==33 + MACRO V.10 PAGE 4 + OTHER PARAMETERS + + ;ACCUMULATORS + 000000 AC0== 0 + 000001 AC1= AC0+1 + 000002 AC2= AC1+1 + 000003 SDEL= 3 ;SEARCH INCREMENT + 000004 SX= SDEL+1 ;SEARCH INDEX + 000005 ARG= 5 ;ARGUMENT + 000006 V= 6 ;VALUE + 000007 C= 7 ;CURRENT CHARACTER + 000010 CS= C+1 ;CHARACTER STATUS BITS + 000011 RC= 11 ;RELOCATION BITS + 000012 MWP= 12 ;MACRO WRITE POINTER + 000013 MRP= 13 ;MACRO READ POINTER + 000014 IO= 14 ;IO REGISTER (LEFT) + 000014 ER== IO ;ERROR REGISTER (RIGHT) + 000015 FR= 15 ;FLAG REGISTER (LEFT) + 000015 RX== FR ;CURRENT RADIX (RIGHT) + 000016 MP= 16 ;MACRO PUSHDOWN POINTER + 000017 PP= 17 ;BASIC PUSHDOWN POINTER + + 000003 %OP== 3 + 000005 %MAC== 5 + 000002 %DSYM== 2 + 000001 %SYM== 1 + 000006 %DMAC== %MAC+1 + + OPDEF RESET [CALLI 0] + OPDEF SETDDT [CALLI 2] + OPDEF DDTOUT [CALLI 3] + OPDEF DEVCHR [CALLI 4] + OPDEF WAIT [MTAPE 0] + OPDEF CORE [CALLI 11] + OPDEF EXIT [CALLI 12] + OPDEF UTPCLR [CALLI 13] + OPDEF DATE [CALLI 14] + OPDEF APRENB [CALLI 16] + OPDEF MSTIME [CALLI 23] + OPDEF PJOB [CALLI 30] + OPDEF RUN [CALLI 35] + OPDEF TMPCOR [CALLI 44] + + MACRO V.10 PAGE 5 + OTHER PARAMETERS + + ;FR FLAG REGISTER (FR/RX) + 000001 IOSCR== 000001 ;NO CR AFTER LINE + 000004 MTAPSW==000004 ;MAG TAPE + 000010 ERRQSW==000010 ;IGNORE Q ERRORS + 000020 LOADSW==000020 ;END OF PASS1 & NO EOF YET + 000040 DCFSW== 000040 ;DECIMAL FRACTION + 000100 RIM1SW==000100 ;RIM10 MODE + 000200 NEGSW== 000200 ;NEGATIVE ATOM + 000400 RIMSW== 000400 ;RIM OUTPUT + 001000 PNCHSW==001000 ;RIM/BIN OUTPUT WANTED + 002000 CREFSW==002000 + 004000 R1BSW== 004000 ;RIM10 BINARY OUTPUT + 010000 TMPSW== 010000 ;EVALUATE CURRENT ATOM + 020000 INDSW== 020000 ;INDIRECT ADDRESSING WANTED + 040000 RADXSW==040000 ;RADIX ERROR SWITCH + 100000 FSNSW== 100000 ;NON BLANK FIELD SEEN + 200000 MWLFLG==200000 ;ON FOR DON'T ALLOW MULTI-WORD LITERALS + 400000 P1== 400000 ;PASS1 + + ;IO FLAG REGISTER (IO/ER) + 400000 FLDSW== 400000 ;ADDRESS FIELD + 200000 IOMSTR==200000 + 100000 ARPGSW==100000 ;ALLOW RAPID PROGRAM GENERATION + 040000 IOPROG==040000 ;SUPRESS LISTING (LIST/XLIST PSEUDO OP) + 020000 NUMSW== 020000 + 010000 IOMAC== 010000 ;MACRO EXPANSION IN PROGRESS + 004000 IOPALL==004000 ;SUPRESS LISTING OF MACRO EXPANSIONS + 002000 IONCRF==002000 ;SUPRESS OUTPUT OF CREF INFORMATION + 001000 CRPGSW==001000 ;CURRENTLY IN PROGRESS ON RPG + 000400 IOCREF==000400 ;WE ARE NOW OUTPUTTING CREF INFO + 000200 IOENDL==000200 ;BEEN TO STOUT + 000100 IOPAGE==000100 + 000040 DEFCRS==000040 ;THIS IS A DEFINING OCCURANCE (MACROS) + 000020 IOIOPF==000020 ;IOP INSTRUCTION SEEN + 000010 MFLSW== 000010 ;MULTI-FILE MODE,PRGEND SEEN + 000004 IORPTC==000004 ;REPEAT CURRENT CHARACTER + 000002 IOTLSN==000002 ;TITLE SEEN + 000001 IOSALL==000001 ;SUPPRESS MACRO LISTING EVEN IF BINARY IS GENERATED + + OPDEF JUMP1 [JUMPL FR, ] ;JUMP IF PASS 1 + OPDEF JUMP2 [JUMPGE FR, ] ;JUMP IF PASS 2 + + OPDEF JUMPOC [JUMPGE IO, ] ;JUMP IF IN OP-CODE FIELD + OPDEF JUMPAD [JUMPL IO, ] ;JUMP IF IN ADDRESS FIELD + + OPDEF JUMPCM [JUMPL CS, ] ;JUMP IF CURRENT CHAR IS COMMA + OPDEF JUMPNC [JUMPGE CS, ] ;JUMP IF CURRENT CHAR IS NON-COMMA + + MACRO V.10 PAGE 6 + OTHER PARAMETERS + + ;ER ERROR REGISTERS (IO/ER) + 000020 ERRM== 000020 ;MULTIPLY DEFINED SYMBOL + 000040 ERRE== 000040 ;ILLEGAL USE OF EXTERNAL + 000100 ERRP== 000100 ;PHASE DISCREPANCY + 000200 ERRO== 000200 ;UNDEFINED OP CODE + 000400 ERRN== 000400 ;NUMBER ERROR + 001000 ERRV== 001000 ;VALUE PREVIOUSLY UNDEFINED + 002000 ERRU== 002000 ;UNDEFINED SYMBOL + 004000 ERRR== 004000 ;RELOCATION ERROR + 010000 ERRL== 010000 ;LITERAL ERROR + 020000 ERRD== 020000 ;REFERENCE TO MULTIPLY DEFINED SYMBOL + 040000 ERRA== 040000 ;PECULIAR ARGUMENT + 100000 ERRX== 100000 ;MACRO DEFINITION ERROR + 200000 ERRQ== 200000 ;QUESTIONABLE, NON-FATAL ERROR + 777760 ERRORS==777760 + 000002 LPTSW== 000002 + 000001 TTYSW== 000001 + + ;SYMBOL TABLE FLAGS + 400000 SYMF== 400000 ;SYMBOL + 200000 TAGF== 200000 ;TAG + 100000 NOOUTF==100000 ;NO DDT OUTPUT WFW + 040000 SYNF== 040000 ;SYNONYM + 020000 MACF== SYNF_-1 ;MACRO + 010000 OPDF== SYNF_-2 ;OPDEF + 004000 PNTF== 004000 ;"VALUE" IN SYMBOL TBL IS PNTR TO 36BIT VALUE + 002000 UNDF== 002000 ;UNDEFINED + 001000 EXTF== 001000 ;EXTERNAL + 000400 INTF== 000400 ;INTERNAL + 000200 ENTF== 000200 ;ENTRY + 000100 VARF== 000100 ;VARIABLE + 000020 MDFF== 000020 ;MULTIPLY DEFINED + 000010 SPTR== 000010 ;SPECIAL EXTERNAL POINTER + 000004 SUPRBT==000004 ;SUPRESS OUTPUT TO DDT + 000002 LELF== 000002 ;LEFT HAND RELOCATABLE + 000001 RELF== 000001 ;RIGHT HAND RELOCATABLE + + 200000 LITF== 200000 ;FLAG FOR PSEUDO-OPS INVALID IN LIT'S + 100000 ADDF== 100000 ;FLAG FOR PSEUDO-OPS INVALID IN ADDRESSES + + 200000 TNODE== 200000 ;TERMINAL NODE FOR EVALEX + MACRO V.10 PAGE 7 + RUN UUO + + SUBTTL RUN UUO + + IFN CCLSW,< + ;THIS CODE MUST BE IN FIRST 1K TO ALLOW MAXIMUM SPACE + ; FOR OVERWRITING + ; 74 APPEARS BECAUSE ONLY LOCS 74 AND BEYOND ARE SAVED BY "SAVE" + + 000000' 000000 000016' IFN CCLSW,<NUNCOM: IOWD 0,INHERE ;WHERE TO DO IO + 000001' 000000 000000 0 ;TERMINATE COMMAND LIST + 000002' 056040 000000' NUNGO2: IN BIN,NUNCOM ;READ FILE + 000003' 254000 000011' JRST NUNGO3 ;THERE ARE NO ERRORS + 000004' 047400 000003 NUNERR: DDTOUT NUNPNT, ;COMPLAIN + 000005' 047000 000012 EXIT ;GIVE UP + 000006' 376311 147226 NUNERM: ASCIZ /?LINKAGE ERROR/ + 000007' 406170 520212 + 000010' 512451 751000 + 000011' 332500 000056' NUNGO3: SKIPE 12,INHERE+133-74 ;LOOK AT JOBCOR + ;DOES JOB WANT TO RUN IN MORE CORE? + 000012' 317500 000000* CAMG 12,JOBREL ;MORE CORE THAN CURRENTLY USED? + 000013' 254000 000000 JRST NUNGO4 ;NO, GO BLT PROG + 000014' 047500 000011 CORE 12, ;ASK FOR MORE CORE + 000015' 254000 000004' JRST NUNERR ;NOT AVAILABLE + 000016' 254000 000000 JRST NUNGO4 ;GO BLT PROGRAM + 000017' INHERE: + MACRO V.10 PAGE 8 + RUN UUO + + ;THIS CODE MUST BE IN FIRST 1K + 000017' 326040 000021' NUNSET: JUMPN ACDEV,.+2 ;DEVICE SPECIFIED? + 000020' 205040 637163 MOVSI ACDEV,(SIXBIT /SYS/) ;NO, USE SYSTEM DEVICE + 000021' 326140 000023' JUMPN ACEXT,.+2 ;EXT SPECIFIED? + 000022' 205140 634166 MOVSI ACEXT,(SIXBIT /SAV/) ;NO, USE "SAV" + 000023' 202040 012556' MOVEM ACDEV,NUNDEV ;DEVICE NAME TO USE + 000024' 050040 012555' OPEN BIN,NUNINI ;INIT THE DEVICE + 000025' 254000 007700' JRST EINIT ;ERROR + 000026' 202100 012663' MOVEM ACFILE,NUNDIR ;IS THE FILE AVAILABLE? + 000027' 512140 012664' HLLZM ACEXT,NUNDIR+1 ;STASH EXTENSION + 000030' 402000 012666' SETZM NUNDIR+3 ;CLEAR PPN + 000031' 076040 012663' LOOKUP BIN,NUNDIR ;LOOK FOR FILE + JRST [HLRZ ACEXT,NUNDIR+1 ;WAS EXTENSION "SAV"? + CAIE ACEXT,(SIXBIT /SAV/) ;... + JRST ERRCF ;GO COMPLAIN + MOVSI ACEXT,(SIXBIT /DMP/) ;TRY "DMP" EXTENSION + 000032' 254000 014043' JRST .-3 ] ;TRA -3,4 + 000033' 260740 000066' PUSHJ PP,DELETE ;COMMAND FILE + 000034' 200640 012663' MOVE 15,NUNDIR ;GET THE NAME + 000035' 047640 000043 CALLI 15,43 ;TELL SYSTEM "SETNAM" + 000036' 564640 012666' HLRO 15,NUNDIR+3 ;GET WORD COUNT + 000037' 506640 000000' HRLM 15,NUNCOM ;STASH COUNT + 000040' 213000 000015 MOVNS 15 ;NEGATIVE COUNT + 000041' 201715 000073 MOVEI 16,73(15) ;WHERE TO STOP BLT + 000042' 271640 000017' ADDI 15,INHERE ;HOW BIG TO MAKE CORE + 000043' 435640 001777 IORI 15,1777 ;AN EVEN MULTIPLE OF 1K + 000044' 047640 000011 CORE 15, ;ASK TS EXEC FOR CORE + JRST [HRROI RC,[SIXBIT /NOT ENUF CORE FOR LINKAGE@/] + 000045' 254000 014055' JRST ERRFIN ];GO COMPLAIN + 000046' 205440 000054' MOVSI NUNTOP,NUNAC + 000047' 251440 000011 BLT NUNTOP,NUNTOP ;SET ACS + 000050' 540200 000016 HRR NUNBLT,16 ;... + 000051' 607600 001000 TLNN IO,CRPGSW ;WAS RPG IN PROGRESS? + 000052' 621300 577000 TLZ NUNAOS,577000 ;NO, DON'T MAKE NEXT AN RPG + 000053' 254000 000002' JRST NUNGO2 + + 000000 NUNAC: PHASE 0 + 000054' 200500 000017' NUNGO4: MOVE NUNLAC,INHERE+74-74 ;SETUP FOR NEW DDT + 000055' 047500 000002 SETDDT NUNLAC, ;... + INTERN JOBS41 + 000122 JOBS41=122 ;LOADER WILL GIVE MUL. DEF. GLOBAL IF CHANGED + + EXTERN JOB41 + 000056' 200500 000045' MOVE NUNLAC,JOBS41+INHERE-74 ;RESTORE LOC 41 + 000057' 202500 000000* MOVEM NUNLAC,JOB41 ;... + 000060' 251440 000000 NUNBLT: BLT NUNTOP,.-. ;MOVE PRGM TO WHERE IT BELONGS + 000061' 047000 000000 RESET ;RESET ALL I/O + 000062' 350040 000000* NUNAOS: AOS 1,JOBSA ;GET STARTING ADDR FOR RPG + 000063' 254001 000000 JRST 0(1) ;GET ON WITH THE GAME + 000064' 000000 000006' NUNPNT: NUNERM ;ERROR MESSAGE POINTER + 000065' 000020' 000075 NUNTOP: XWD INHERE+1,75 + 000012 NUNLAC=. + 000066' DEPHASE + MACRO V.10 PAGE 8-1 + RUN UUO + + > + LIST + + MACRO V.10 PAGE 9 + RUN UUO + + 000066' 550000 013420' DELETE: HRRZ EXTMP ;IF THE EXTENSION + 000067' 302000 645560 CAIE (SIXBIT/TMP/) ;IS .TMP + 000070' 263740 000000 POPJ PP, ;RETURN. + 000071' 070200 000000 CLOSE CTL2, ;DELETE + 000072' 403200 000005 SETZB 4,5 ;THE COMMAND FILE. + 000073' 403300 000007 SETZB 6,7 + 000074' 055200 000004 RENAME CTL2,4 ; + 000075' 255000 000000 JFCL + 000076' 263740 000000 POPJ PP, + > + MACRO V.10 PAGE 10 + START ASSEMBLING + + SUBTTL START ASSEMBLING + + 000077' 260740 003267' ASSEMB: PUSHJ PP,INZ ;INITIALIZE FOR PASS + 000100' 200000 014057' MOVE [ASCII /.MAIN/] + 000101' 202000 013230' MOVEM TBUF + 000102' 201000 013057' MOVEI SBUF + 000103' 542000 013100' HRRM SUBTTX + + 000104' 260740 001406' ASSEM1: PUSHJ PP,CHARAC ;TEST FOR FORM FEED + 000105' 335000 013002' SKIPGE LIMBO ;CRLF FLAG? + 000106' 254000 000104' JRST ASSEM1 ;YES ,IGNORE LF + 000107' 306340 000014 CAIN C,14 + 000110' 332000 012544' SKIPE SEQNO + 000111' 254000 000115' JRST ASSEM2 + 000112' 260740 010410' PUSHJ PP,OUTFF1 + 000113' 260740 001765' PUSHJ PP,OUTLI + 000114' 254000 000104' JRST ASSEM1 + + 000115' 350000 013377' ASSEM2: AOS TAGINC + 000116' 306340 000134 CAIN C,"\" ;BACK-SLASH? + 000117' 625600 010000 TLZA IO,IOMAC ;YES, LIST IF IN MACRO + 000120' 661600 000004 TLO IO,IORPTC + 000121' 260740 000125' PUSHJ PP,STMNT ;OFF WE GO + 000122' 627600 000200 TLZN IO,IOENDL ;WAS STOUT PRE-EMPTED? + 000123' 260740 000230' PUSHJ PP,STOUT ;NO, POLISH OFF LINE + 000124' 254000 000104' JRST ASSEM1 + + MACRO V.10 PAGE 11 + STATEMENT PROCESSOR + + SUBTTL STATEMENT PROCESSOR + + 000125' 621640 120000 STMNT: TLZ FR,INDSW!FSNSW + 000126' 625600 400000 TLZA IO,FLDSW + 000127' 260740 000244' STMNT1: PUSHJ PP,LABEL + 000130' 260740 000325' STMNT2: PUSHJ PP,ATOM ;GET THE FIRST ATOM + 000131' 306340 000035 CAIN C,35 ;"="? + 000132' 254000 004023' JRST ASSIGN ;YES + 000133' 306340 000032 CAIN C,32 ;":"? + 000134' 254000 000127' JRST STMNT1 ;YES + 000135' 321600 000200' JUMPAD STMNT7 ;NUMERIC EXPRESSION + 000136' 326000 000146' JUMPN AC0,STMN2A ;JUMP IF NON NULL FIELD + 000137' 336000 013321' SKIPN LITLVL ;ALLOW COMMA IN LITERALS + 000140' 302340 000014 CAIE C,14 ;NULL, COMMA? + 000141' 306340 000033 CAIN C,EOL ;OR END OF LINE? + 000142' 263740 000000 POPJ PP, ;YES,EXIT + 000143' 306340 000135 CAIN C,"]" ;CLOSING LITERAL? + 000144' 263740 000000 POPJ PP, ;YES + 000145' 254000 000201' JRST STMNT9 ;NO,AT LEAST SKIP ALL THIS NONSENSE + + 000146' 322340 000150' STMN2A: JUMPE C,.+2 + 000147' 661600 000004 TLO IO,IORPTC + 000150' 260740 012173' PUSHJ PP,MSRCH ;SEARCH FOR MACRO/OPDEF/SYN + 000151' 254000 000157' JRST STMNT3 ;NOT FOUND, TRY OP CODE + 000152' 135140 014060' LDB SDEL,[POINT 3,ARG,5] + 000153' 322140 003311' JUMPE SDEL,ERRAX ;ERROR IF NO FLAGS + 000154' 362140 004346' SOJE SDEL,OPD1 ;OPDEF IF 1 + 000155' 362140 005511' SOJE SDEL,CALLM ;MACRO IF 2 + 000156' 254000 000161' JRST STMNT4 ;SYNONYM, PROCESS WITH OP-CODES + + 000157' 260740 010470' STMNT3: PUSHJ PP,OPTSCH ;SEARCH OP CODE TABLE + 000160' 254000 000167' JRST STMNT5 ;NOT FOUND + 000161' 510000 000006 STMNT4: HLLZ AC0,V ;PUT CODE IN AC0 + 000162' 620300 100000 TRZ V,ADDF ;CLEAR ADDRESS NON-VALID FLAG + 000163' 622300 200000 TRZE V,LITF ;VALID IN LITERAL? + 000164' 336000 013321' SKIPN LITLVL ;NO, ARE WE IN A LITERAL? + 000165' 254006 000000 JRST 0(V) ;NO, GO TO APPROPRIATE PROCESSOR + 000166' 263740 000000 POPJ PP, ;YES,EXIT + + 000167' 260740 012210' STMNT5: PUSHJ PP,SSRCH ;TRY SYMBOLS + 000170' 254000 000207' JRST STMNT8 ;NOT FOUND + 000171' 603240 003000 TLNE ARG,EXTF!UNDF ;EXTERNAL OR UNDEFINED? + 000172' 254000 000200' JRST STMNT7 ;YES, PROCESS IN EVALEX + 000173' 607440 777776 TLNN RC,-2 ;CHECK FOR EXTERNAL + 000174' 602440 777776 TRNE RC,-2 + 000175' 254000 000200' JRST STMNT7 + 000176' 200000 000006 MOVE AC0,V ;FOUND, PUT VALUE IN AC0 + 000177' 661600 020000 TLO IO,NUMSW ;FLAG AS NUMERIC + 000200' 621600 000004 STMNT7: TLZ IO,IORPTC + 000201' 260740 001056' STMNT9: PUSHJ PP,EVALHA ;EVALUATE EXPRESSION + 000202' 603640 100000 TLNE FR,FSNSW ;FIELD SEEN? + 000203' 254000 002665' JRST STOW ;YES,STOW THE CODE AND EXIT + 000204' 302340 000075 CAIE C,"]"-40 ;CLOSING LITERAL? + MACRO V.10 PAGE 11-1 + STATEMENT PROCESSOR + + 000205' 660600 200000 TRO ER,ERRQ ;NO, GIVE "Q" ERROR + 000206' 263740 000000 POPJ PP, ;EXIT + + MACRO V.10 PAGE 12 + STATEMENT PROCESSOR + + STMNT8:repeat 0,<MOVEI V,0 ;ALWAYS START SCAN WITH 0 + CAIL V,CALNTH ;END OF TABLE? + JRST STMN8C ;YES, TRY TTCALLS + CAME AC0,CALTBL(V) ;FOUND IT? + AOJA V,.-3 ;NO,TRY AGAIN + SUBI V,NEGCAL ;CALLI'S START AT -1 + HRLI V,(CALLI) ;PUT IN UUO> + 000207' 205240 010000 STMN8D: MOVSI ARG,OPDF ;SET FLAG FOR OPDEF + 000210' 260740 012366' STMN8B: PUSHJ PP,INSERT ;PUT OPDEF IN TABLE + 000211' 254000 004350' JRST OPD ;AND TREAT AS OPDEF + + 000212' 400300 000000 STMN8C: SETZ V, ;START WITH ZERO + 000213' 301300 000016 CAIL V,TTCLTH ;END OF TABLE? + 000214' 254000 000222' JRST STMN8A ;YES, ERROR + 000215' 312006 012155' CAME AC0,TTCTBL(V) ;MATCH? + 000216' 344300 000213' AOJA V,.-3 ;NO, KEEP TRYING + 000217' 242300 000005 LSH V,5 ;PUT IN AC FIELD (RIGHT HALF) + 000220' 515306 051000 HRLZI V,<(TTCALL)>(V) ;PUT UUO IN LEFT HALF + 000221' 254000 000207' JRST STMN8D ;SET OPDEF FLAG + + 000222' 403300 000011 STMN8A: SETZB V,RC ;CLEAR VALUE AND RELOCATION + 000223' 660600 000200 TRO ER,ERRO ;FLAG AS UNDEFINED OP-CODE + 000224' 321640 004350' JUMP1 OPD ;TREAT AS STANDARD OP ON PASS1 + 000225' 205240 013000 MOVSI ARG,OPDF!UNDF!EXTF ;SET A FEW FLAGS + 000226' 254000 000210' JRST STMN8B ;TO FORCE OUT A MESSAGE + + ;STATEMENT OUT PASSES REMAINDER OF LINE (CMNT) + ;UNTIL A LINE TERMINATOR IS SEEN. + 000227' 665600 000204 STOUTS: TLOA IO,IOENDL!IORPTC + 000230' 661600 000004 STOUT: TLO IO,IORPTC + 000231' 260740 004452' PUSHJ PP,BYPAS1 + 000232' 306340 000014 CAIN C,14 ;COMMA? + 000233' 331000 013104' SKIPL STPX ;YES, ERROR IF CODE STORED + 000234' 306340 000033 CAIN C,EOL + 000235' 665600 000004 TLOA IO,IORPTC + 000236' 660600 200000 TRO ER,ERRQ + 000237' 260740 001406' STOUT1: PUSHJ PP,CHARAC + 000240' 307340 000015 CAIG C,CR + 000241' 307340 000011 CAIG C,HT + 000242' 254000 000237' JRST STOUT1 + 000243' 254000 001547' JRST OUTLIN ;OUTPUT THE LINE (BIN AND LST) + MACRO V.10 PAGE 13 + LABEL PROCESSOR + + SUBTTL LABEL PROCESSOR + + 000244' 321600 000310' LABEL: JUMPAD LABEL4 ;COMPARE IF NON-SYMBOLIC + 000245' 322000 000312' JUMPE AC0,LABEL5 ;ERROR IF BLANK + 000246' 661600 000040 TLO IO,DEFCRS ;THIS IS A DEFINITION + 000247' 260740 012210' PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + 000250' 205240 602000 MOVSI ARG,SYMF!UNDF!TAGF ;NOT FOUND + 000251' 607240 001000 TLNN ARG,EXTF ;OPERAND FOUND (SKIP EXIT) + 000252' 254000 000257' JRST LABEL0 + 000253' 321640 000304' JUMP1 LABEL3 ;ERROR ON PASS1 + 000254' 607240 002000 TLNN ARG,UNDF ;UNDEFINED ON PASS1 + 000255' 254000 000304' JRST LABEL3 ;NO, FLAG ERROR + 000256' 621240 005000 TLZ ARG,EXTF!PNTF ;TURN OFF EXT FLAG NOW + 000257' 627240 002100 LABEL0: TLZN ARG,UNDF!VARF ;WAS IT PREVIOUSLY DEFINED? + 000260' 254000 000301' JRST LABEL2 ;YES, CHECK EQUALITY + 000261' 200300 013325' MOVE V,LOCA ;WFW + 000262' 200440 013332' MOVE RC,MODA + 000263' 661240 200000 TLO ARG,TAGF + 000264' 260740 006335' PUSHJ PP,PEEK ;GET NEXT CHAR. + 000265' 302340 000072 CAIE C,":" ;SPECIAL CHECK FOR :: + 000266' 254000 000272' JRST LABEL1 ;NO MATCH + 000267' 661240 000400 TLO ARG,INTF ;MAKE IT INTERNAL + 000270' 260740 001354' PUSHJ PP,GETCHR ;PROCESS NEXT CHAR. + 000271' 260740 006335' PUSHJ PP,PEEK ;PREVIEW NEXT CHAR. + 000272' 302340 000041 LABEL1: CAIE C,"!" ;HALF-KILL SIGN + 000273' 254000 000276' JRST LABEL6 ;NO + 000274' 661240 100000 TLO ARG,NOOUTF ;YES, SUPPRESS IT + 000275' 260740 001354' PUSHJ PP,GETCHR ;AND GET RID OF IT + 000276' 202000 012541' LABEL6: MOVEM AC0,TAG ;SAVE FOR PASS 1 ERRORS + 000277' 513000 013377' HLLZS TAGINC ;ZERO INCREMENT + 000300' 254000 012366' JRST INSERT ;INSERT/UPDATE AND EXIT + + 000301' 526300 013324' LABEL2: HRLOM V,LOCBLK ;SAVE LIST LOCATION + 000302' 316300 013325' CAMN V,LOCA ;DOES IT COMPARE WITH PREVIOUS? WFW + 000303' 312440 013332' CAME RC,MODA + 000304' 665240 000020 LABEL3: TLOA ARG,MDFF ;NO, FLAG MULTIPLY DEFINED AND SKIP + 000305' 254000 000314' JRST LABEL7 ;YES, GET RID OF EXTRA CHARS. + 000306' 660600 000020 TRO ER,ERRM ;FLAG MULTIPLY DEFINED ERROR + 000307' 254000 012467' JRST UPDATE ;UPDATE AND EXIT + + 000310' 316000 013325' LABEL4: CAMN AC0,LOCA ;DO THEY COMPARE? + 000311' 312440 013332' CAME RC,MODA + 000312' 660600 000100 LABEL5: TRO ER,ERRP ;NO, FLAG PHASE ERROR + 000313' 263740 000000 POPJ PP, + + 000314' 332000 013321' LABEL7: SKIPE LITLVL ;LABEL IN A LITERAL? + 000315' 202000 013322' MOVEM AC0,LITLBL ;YES, SAVE LABEL NAME FOR LATER + 000316' 260740 006335' PUSHJ PP,PEEK ;INSPECT A CHAR. + 000317' 306340 000072 CAIN C,":" ;COLON? + 000320' 260740 001354' PUSHJ PP,GETCHR ;YES, DISPOSE OF IT + 000321' 260740 006335' PUSHJ PP,PEEK ;EXAMINE ONE MORE CHAR. + 000322' 306340 000041 CAIN C,"!" ;EXCLAMATION? + 000323' 254000 001354' JRST GETCHR ;YES, INDEED + MACRO V.10 PAGE 14 + LABEL PROCESSOR + + 000324' 263740 000000 POPJ PP, + MACRO V.10 PAGE 15 + ATOM PROCESSOR + + SUBTTL ATOM PROCESSOR + 000325' 260740 000354' ATOM: PUSHJ PP,CELL ;GET FIRST CELL + 000326' 603600 020000 TLNE IO,NUMSW ;IF NON-NUMERIC + 000327' 302340 000042 ATOM1: CAIE C,42 ;OR NOT A BINARY SHIFT, + 000330' 263740 000000 POPJ PP, ;EXIT + + 000331' 261740 000000 PUSH PP,AC0 ;STACK REGISTERS, ITS A BINARY SHIFT + 000332' 261740 000001 PUSH PP,AC1 + 000333' 261740 000011 PUSH PP,RC + 000334' 261740 000015 PUSH PP,RX + 000335' 541640 000012 HRRI RX,^D10 ;COMPUTE SHIFT RADIX 10 + 000336' 260740 000353' PUSHJ PP,CELLSF ;GET SHIFT + 000337' 200240 000011 MOVE ARG,RC ;SAVE RELOCATION + 000340' 262740 000015 POP PP,RX ;RESTORE REGISTERS + 000341' 262740 000011 POP PP,RC + 000342' 262740 000001 POP PP,AC1 + 000343' 210200 000000 MOVN SX,AC0 ;USE NEGATIVE OF SHIFT + 000344' 262740 000000 POP PP,AC0 + 000345' 326240 000432' JUMPN ARG,NUMER2 ;IF NOT ABSOLUTE + 000346' 607600 020000 TLNN IO,NUMSW ;AND NUMERIC, + 000347' 254000 000432' JRST NUMER2 ;FLAG ERROR + 000350' 246004 000043 LSHC AC0,^D35(SX) + 000351' 242444 000043 LSH RC,^D35(SX) + 000352' 254000 000327' JRST ATOM1 ;TEST FOR ANOTHER + MACRO V.10 PAGE 16 + ATOM PROCESSOR + + 000353' 661600 400000 CELLSF: TLO IO,FLDSW + 000354' 403000 000011 CELL: SETZB AC0,RC ;CLEAR RESULT AND RELOCATION + 000355' 403040 000002 SETZB AC1,AC2 ;CLEAR WORK REGISTERS + 000356' 202740 013342' MOVEM PP,PPTEMP ;SAVE PUSHDOWN POINTER + 000357' 621600 020000 TLZ IO,NUMSW + 000360' 625640 040240 TLZA FR,NEGSW!DCFSW!RADXSW + + 000361' 661600 400000 CELL1: TLO IO,FLDSW + 000362' 260740 004452' PUSHJ PP,BYPASS + 000363' 135300 014061' LDB V,[POINT 4,CSTAT(C),14] ;GET CODE + 000364' 256006 000365' XCT .+1(V) ;EXECUTE, INDEX VIA BITS 11,12,13,14 OF CSTAT TABLE + 000365' 254000 000361' JRST CELL1 ;0; BLANK, (TAB OR "+") + 000366' 254000 000400' JRST LETTER ;1; LETTER ] $ % ( ) , ; > + 000367' 641640 000200 TLC FR,NEGSW ;2; "-" + 000370' 661640 020000 TLO FR,INDSW ;3; "@" + 000371' 254000 000710' JRST NUM1 ;4; NUMERIC 0 - 9 + 000372' 254000 000653' JRST ANGLB ;5; "<" + 000373' 254000 000550' JRST SQBRK ;6; "[" + 000374' 254000 000447' JRST QUOTES ;7; ""","'" + 000375' 254000 000514' JRST QUAL ;10; "^" + 000376' 254000 000671' JRST PERIOD ;11; "." + 000377' 664600 200000 TROA ER,ERRQ ;12; ERROR, FLAG AND TREAT AS DELIMITER + ;12; ! # & * / : = ? \ _ + MACRO V.10 PAGE 17 + ATOM PROCESSOR + + 000400' 665100 440600 LETTER: TLOA AC2,(POINT 6,AC0,) ;SET BYTE POINTER + 000401' 260740 001354' LETTE1: PUSHJ PP,GETCHR ;GET CHARACTER + 000402' 607400 000006 TLNN CS,6 ;ALPHA-NUMERIC? + 000403' 254000 000407' JRST LETTE3 ;NO,TEST FOR VARIABLE + 000404' 603100 770000 TLNE AC2,770000 ;STORE ONLY SIX BYTES + 000405' 136340 000002 LETTE2: IDPB C,AC2 ;RETURN FROM PERIOD + 000406' 254000 000401' JRST LETTE1 + + 000407' 302340 000003 LETTE3: CAIE C,03 ;"#"? + 000410' 263740 000000 POPJ PP, + 000411' 322000 000446' JUMPE AC0,POPOUT ;TEST FOR NULL + 000412' 260740 006335' PUSHJ PP,PEEK ;PEEK AT NEXT CHAR. + 000413' 306340 000043 CAIN C,"#" ;IS IT 2ND #? + 000414' 254000 000426' JRST LETTE4 ;YES, THEN IT'S AN EXTERN + 000415' 661600 000040 TLO IO,DEFCRS + 000416' 260740 012210' PUSHJ PP,SSRCH ;YES, SEARCH FOR SYMBOL (OPERAND) + 000417' 205240 402000 MOVSI ARG,SYMF!UNDF ;NOT FOUND, FLAGAS UNDEFINED SYM. + 000420' 607240 002000 TLNN ARG,UNDF ;UNDEFINED? + 000421' 254000 001354' JRST GETCHR ;NO, GET NEXT CHAR AND RETURN + 000422' 661240 000100 TLO ARG,VARF ;YES, FLAG AS A VARIABLE + 000423' 660600 002000 TRO ER,ERRU ;SET UNDEFINED ERROR FLAG + 000424' 260740 012365' PUSHJ PP,INSERZ ;INSERT IT WITH A ZERO VALUE + 000425' 254000 000433' JRST GETDEL + + 000426' 260740 001354' LETTE4: PUSHJ PP,GETCHR ;AND SCAN PAST IT + 000427' 260740 001354' PUSHJ PP,GETCHR ;GET RID OF # + 000430' 254000 003717' JRST EXTER1 ;PUT IN SYMBOL TABLE + + 000431' 403000 000011 NUMER1: SETZB AC0,RC ;RETURN ZERO + 000432' 660600 000400 NUMER2: TRO ER,ERRN ;FLAG ERROR + + 000433' 260740 004452' GETDEL: PUSHJ PP,BYPASS + 000434' 322340 000433' GETDE1: JUMPE C,.-1 + 000435' 201040 000000 MOVEI AC1,0 + 000436' 661600 420000 GETDE3: TLO IO,NUMSW!FLDSW ;FLAG NUMERIC + 000437' 607640 000200 TLNN FR,NEGSW ;IS ATOM NEGATIVE? + 000440' 263740 000000 POPJ PP, ;NO, EXIT + 000441' 322040 000444' JUMPE AC1,GETDE2 + 000442' 213000 000001 MOVNS AC1 + 000443' 654000 014062' TDCA AC0,[-1] + 000444' 213000 000000 GETDE2: MOVNS AC0 ;YES, NEGATE VALUE + 000445' 213000 000011 MOVNS RC ;AND RELOCATION + 000446' 263740 000000 POPOUT: POPJ PP, ;EXIT + MACRO V.10 PAGE 18 + ATOM PROCESSOR + + 000447' 302340 000007 QUOTES: CAIE C,"'"-40 ;IS IT "'" + 000450' 254000 000456' JRST QUOTE ;NO MUST BE """ + 000451' 254000 000500' JRST SQUOTE ;YES + + 000452' 603000 376000 QUOTE0: TLNE AC0,376000 ;5 CHARACTERS STORED ALREADY? + 000453' 660600 200000 TRO ER,ERRQ ;YES, GIVE WARNING + 000454' 240000 000007 ASH AC0,7 + 000455' 434000 000007 IOR AC0,C + 000456' 260740 001406' QUOTE: PUSHJ PP,CHARAC ;GET 7-BIT ASCII + 000457' 307340 000015 CAIG C,15 ;TEST FOR LF, VT, FF OR CR + 000460' 305340 000012 CAIGE C,12 + 000461' 254000 000463' JRST .+2 ;NO, SO ALL IS WELL + 000462' 254000 000472' JRST QUOTE2 ;ESCAPE WITH Q ERROR + 000463' 302340 000042 CAIE C,42 + 000464' 254000 000452' JRST QUOTE0 + 000465' 260740 006335' PUSHJ PP,PEEK ;LOOK AT NEXT CHAR. + 000466' 302340 000042 CAIE C,42 + 000467' 254000 000473' JRST QUOTE1 ;RESTORE REPEAT LEVEL AND QUIT + 000470' 260740 001406' PUSHJ PP,CHARAC ;GET NEXT CHAR. + 000471' 254000 000452' JRST QUOTE0 ;USE IT + + 000472' 660600 200000 QUOTE2: TRO ER,ERRQ ;SET Q ERROR + 000473' 254000 000433' QUOTE1: JRST GETDEL + + 000474' 603000 770000 SQUOT0: TLNE AC0,770000 ;SIX CHARS. STORED ALREADY ? + 000475' 660600 200000 TRO ER,ERRQ ;YES + 000476' 242000 000006 LSH AC0,6 + 000477' 435007 777740 IORI AC0,-40(C) ;OR IN SIXBIT CHAR. + + 000500' 260740 001406' SQUOTE: PUSHJ PP,CHARAC + 000501' 307340 000015 CAIG C,CR + 000502' 305340 000012 CAIGE C,LF + 000503' 254000 000505' JRST .+2 + 000504' 254000 000473' JRST QUOTE1 + 000505' 302340 000047 CAIE C,"'" + 000506' 254000 000474' JRST SQUOT0 + 000507' 260740 006335' PUSHJ PP,PEEK + 000510' 302340 000047 CAIE C,"'" + 000511' 254000 000473' JRST QUOTE1 + 000512' 260740 001406' PUSHJ PP,CHARAC + 000513' 254000 000474' JRST SQUOT0 + + MACRO V.10 PAGE 19 + ATOM PROCESSOR + + 000514' 260740 004452' QUAL: PUSHJ PP,BYPAS1 ;SKIP BLANKS, GET NEXT CHARACTER + 000515' 306340 000042 CAIN C,42 ;"B"? + 000516' 254000 000531' JRST QUAL2 ;YES, RADIX=D2 + 000517' 306340 000057 CAIN C,57 ;"O"? + 000520' 254000 000530' JRST QUAL8 ;YES, RADIX=D8 + 000521' 306340 000046 CAIN C,46 ;"F"? + 000522' 254000 000704' JRST NUMDF ;YES, PROCESS DECIMAL FRACTION + 000523' 306340 000054 CAIN C,54 ;"L"? + 000524' 254000 000541' JRST QUALL ;YES + 000525' 302340 000044 CAIE C,44 ;"D"? + 000526' 254000 000431' JRST NUMER1 ;NO, FLAG NUMERIC ERROR + 000527' 271100 000002 ADDI AC2,2 + 000530' 271100 000006 QUAL8: ADDI AC2,6 + 000531' 271100 000002 QUAL2: ADDI AC2,2 + 000532' 261740 000015 PUSH PP,RX + 000533' 540640 000002 HRR RX,AC2 + 000534' 260740 000353' PUSHJ PP,CELLSF + 000535' 262740 000015 QUAL2A: POP PP,RX + 000536' 607600 020000 TLNN IO,NUMSW + 000537' 254000 000431' JRST NUMER1 + 000540' 254000 000434' JRST GETDE1 + + 000541' 261740 000015 QUALL: PUSH PP,FR + 000542' 260740 000353' PUSHJ PP,CELLSF + 000543' 200100 000000 MOVE AC2,AC0 + 000544' 201000 000044 MOVEI AC0,^D36 + 000545' 322100 000535' JUMPE AC2,QUAL2A + 000546' 242100 777777 LSH AC2,-1 + 000547' 364000 000545' SOJA AC0,.-2 + MACRO V.10 PAGE 20 + LITERAL PROCESSOR + + SUBTTL LITERAL PROCESSOR + + 000550' 261740 000015 SQBRK: PUSH PP,FR + 000551' 261740 013270' PUSH PP,EXTPNT ;ALLOW EXTERN TO PRECEDE LIT IN XWD + 000552' 402000 013270' SETZM EXTPNT + 000553' 332000 013321' SKIPE LITLVL ;SAVE SEQNO AND PAGE IF NOT IN LIT ALREADY + 000554' 254000 000561' JRST SQB5 + 000555' 200340 013415' MOVE C,SEQNO2 + 000556' 202340 013304' MOVEM C,LITSEQ + 000557' 200340 013414' MOVE C,PAGENO + 000560' 202340 013303' MOVEM C,LITPG + 000561' 265100 002723' SQB5: JSP AC2,SVSTOW + 000562' 260740 000125' SQB3: PUSHJ PP,STMNT + 000563' 306340 000075 CAIN C,75 ;CHECK FOR ] + 000564' 254000 000620' JRST SQB1 + 000565' 661600 000004 TLO IO,IORPTC + 000566' 603640 200000 TLNE FR,MWLFLG ;CALL IT ] IF NOT MULTI-WORD FLAG + 000567' 254000 000621' JRST SQB2 ;BUT REPEAT LAST CHARACTER + 000570' 260740 004452' PUSHJ PP,BYPAS1 + 000571' 306340 000033 CAIN C,EOL + 000572' 665600 000004 TLOA IO,IORPTC + 000573' 660600 200000 TRO ER,ERRQ + 000574' 260740 001406' SQB4: PUSHJ PP,CHARAC + 000575' 306340 000073 CAIN C,";" ;COMMENT? + 000576' 254000 000613' JRST SQB6 ;YES, IGNORE SQUARE BRACKETS + 000577' 306340 000135 CAIN C,"]" ;LOOK FOR TERMINAL SQB + 000600' 606600 777760 TRNN ER,ERRORS ;IN CASE OF ERROR IN LITERAL + 000601' 254000 000603' JRST .+2 ;NO ALL IS WELL + 000602' 254000 000620' JRST SQB1 ;FINISH THE LITERAL NOW!! + 000603' 307340 000015 CAIG C,CR ;LOOK FOR END OF LINE + 000604' 306340 000011 CAIN C,HT + 000605' 254000 000574' JRST SQB4 + 000606' 260740 002011' SQB4A: PUSHJ PP,OUTIML ;DUMP + 000607' 260740 001406' PUSHJ PP,CHARAC ;GET ANOTHER CHAR. + 000610' 331000 013002' SKIPL LIMBO ;CRLF FLAG + 000611' 661600 000004 TLO IO,IORPTC ;NO REPEAT + 000612' 254000 000562' JRST SQB3 + + 000613' 260740 001406' SQB6: PUSHJ PP,CHARAC ;GET A CHARACTER + 000614' 307340 000015 CAIG C,CR + 000615' 306340 000011 CAIN C,HT ;LOOK FOR END OF LINE CHAR. + 000616' 254000 000613' JRST SQB6 ;NOT YET + 000617' 254000 000606' JRST SQB4A ;GOT IT + + 000620' 621600 000004 SQB1: TLZ IO,IORPTC + 000621' 260740 001264' SQB2: PUSHJ PP,STOLIT + 000622' 265100 002731' JSP AC2,GTSTOW + 000623' 332000 013322' SKIPE LITLBL ;NEED TO FIXUP A LABEL? + 000624' 260740 000632' PUSHJ PP,RELBLE ;YES, USE LOC OF LITERAL + 000625' 262740 013270' POP PP,EXTPNT + 000626' 262740 000015 POP PP,FR + 000627' 332000 013321' SKIPE LITLVL ;WERE WE NESTED? + 000630' 321640 000432' JUMP1 NUMER2 ;YES, FORCE ERROR IF PASS 1 + MACRO V.10 PAGE 20-1 + LITERAL PROCESSOR + + 000631' 254000 000433' JRST GETDEL + + 000632' 261740 000000 RELBLE: PUSH PP,AC0 ;SAVE LOCATION COUNTER + 000633' 261740 000011 PUSH PP,RC ;AND RELOCATION + 000634' 200000 013322' MOVE AC0,LITLBL ;SYMBOL WE NEED + 000635' 402000 013322' SETZM LITLBL ;ZERO INDICATOR + 000636' 260740 012210' PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + 000637' 254000 000650' JRST RELBL1 ;SHOULD NEVER HAPPEN + 000640' 607240 200000 TLNN ARG,TAGF ;IT BETTER BE A LABEL + 000641' 254000 000650' JRST RELBL1 ;IT WASN'T , GIVE UP BEFORE SOME HARM IS DONE + 000642' 621240 007000 TLZ ARG,UNDF!EXTF!PNTF ;CLEAR FLAGS NOW + 000643' 262740 000011 POP PP,RC ;GET LITERAL RELOCATION + 000644' 200317 000000 MOVE V,(PP) ;GET VALUE (LOC COUNTER) + 000645' 260740 012467' PUSHJ PP,UPDATE ;UPDATE VALUE + 000646' 262740 000000 POP PP,AC0 ;RESTORE LITERAL COUNT + 000647' 263740 000000 POPJ PP, ;RETURN + + 000650' 262740 000011 RELBL1: POP PP,RC ;RESTORE RC + 000651' 262740 000000 POP PP,AC0 ;AND AC0 + 000652' 263740 000000 POPJ PP, ;JUST RETURN + MACRO V.10 PAGE 21 + LITERAL PROCESSOR + + 000653' 261740 000015 ANGLB: PUSH PP,FR + 000654' 621640 020000 TLZ FR,INDSW + 000655' 260740 000325' PUSHJ PP,ATOM + 000656' 607600 020000 TLNN IO,NUMSW + 000657' 302340 000035 CAIE C,35 + 000660' 254000 000664' JRST ANGLB1 + 000661' 260740 004037' PUSHJ PP,ASSIG1 + 000662' 200000 000006 MOVE AC0,V + 000663' 254000 000665' JRST ANGLB2 + + 000664' 260740 001056' ANGLB1: PUSHJ PP,EVALHA + 000665' 262740 000015 ANGLB2: POP PP,FR + 000666' 302340 000036 CAIE C,36 + 000667' 660600 000400 TRO ER,ERRN + 000670' 254000 000433' JRST GETDEL + + 000671' 260740 001354' PERIOD: PUSHJ PP,GETCHR ;LOOK AT NEXT CHARACTER + 000672' 607400 000002 TLNN CS,2 ;ALPHABETIC? + 000673' 254000 000677' JRST PERNUM ;NO, TEST NUMERIC + 000674' 205000 160000 MOVSI AC0,(SIXBIT /./) ;YES, PUT PERIOD IN AC0 + 000675' 205100 360600 MOVSI AC2,(POINT 6,AC0,5) ;SET BYTE POINTER + 000676' 254000 000405' JRST LETTE2 ;AND TREAT AS SYMBOL + + 000677' 603400 000004 PERNUM: TLNE CS,4 ;IS IT A NUMBER + 000700' 254000 000736' JRST NUM32 ;YES + 000701' 200000 013325' MOVE AC0,LOCA ;NO. CURRENT LOC SYMBOL (.) + 000702' 200440 013332' MOVE RC,MODA ;SET TO CURRENT ASSEMBLY MODE + 000703' 254000 000434' JRST GETDE1 ;GET DELIMITER + 000704' 661640 000040 NUMDF: TLO FR,DCFSW ;SET DECIMAL FRACTION FLAG + 000705' 260740 001354' NUM: PUSHJ PP,GETCHR ;GET A CHARACTER + 000706' 607400 000004 TLNN CS,4 ;NUMERIC? + 000707' 254000 000720' JRST NUM10 ;NO + 000710' 275340 000020 NUM1: SUBI C,20 ;CONVERT TO OCTAL + 000711' 261740 000007 PUSH PP,C ;STACK FOR FLOATING POINT + 000712' 200000 000001 MOVE AC0,AC1 + 000713' 225015 000000 MULI AC0,0(RX) + 000714' 270040 000007 ADD AC1,C ;ADD IN LAST VALUE + 000715' 301355 000000 CAIL C,0(RX) ;IS NUMBER LESS THAN CURRENT RADIX? + 000716' 661640 040000 TLO FR,RADXSW ;NO, SET FLAG + 000717' 344100 000705' AOJA AC2,NUM ;YES, AC2=NO. OF DECIMAL PLACES + + MACRO V.10 PAGE 22 + LITERAL PROCESSOR + + 000720' 302340 000016 NUM10: CAIE C,16 ;PERIOD? + 000721' 603640 000040 TLNE FR,DCFSW ;OR DECIMAL FRACTION? + 000722' 254000 000732' JRST NUM30 ;YES, PROCESS FLOATING POINT + 000723' 242040 000001 LSH AC1,1 ;NO, CLEAR THE SIGN BIT + 000724' 246000 000043 LSHC AC0,^D35 ;AND SHIFT INTO AC0 + 000725' 200740 013342' MOVE PP,PPTEMP ;RESTORE PP + 000726' 362100 000434' SOJE AC2,GETDE1 ;NO RADIX ERROR TEST IF ONE DIGIT + 000727' 603640 040000 TLNE FR,RADXSW ;WAS ILLEGAL NUMBER ENCOUNTERED? + 000730' 660600 000400 TRO ER,ERRN ;YES, FLAG N ERROR + 000731' 254000 000434' JRST GETDE1 + + 000732' 302340 000042 NUM30: CAIE C,"B"-40 ;IF "B" THEN MISSING "." + 000733' 260740 001354' NUM31: PUSHJ PP,GETCHR + 000734' 607400 000004 TLNN CS,4 ;NUMERIC? + 000735' 254000 000741' JRST NUM40 ;NO + 000736' 275340 000020 NUM32: SUBI C,20 + 000737' 261740 000007 PUSH PP,C + 000740' 254000 000733' JRST NUM31 + + 000741' 261740 000015 NUM40: PUSH PP,FR ;STACK VALUES + 000742' 541640 000012 HRRI RX,^D10 + 000743' 261740 000002 PUSH PP,AC2 + 000744' 261740 013342' PUSH PP,PPTEMP + 000745' 306340 000045 CAIN C,45 ;"E"? + JRST [PUSHJ PP,PEEK ;GET NEXT CHAR + PUSH PP,C ;SAVE NEXT CHAR + PUSHJ PP,CELL ;YES, GET EXPONENT + POP PP,C ;GET FIRST CHAR. AFTER E + CAIN V,4 ;MUST HAVE NUMERICAL STATUS + JRST .+2 ;SKIP RETURN + CAIN C,"<" ;ALLOW <EXP> + JRST .+2 ;SKIP RETURN + SKIPN AC0 ;ERROR IF NON-ZERO EXPRESSION + TROA ER,ERRQ ;ALLOW E+,E- + SETOM RC ;FORCE NUMERICAL ERROR + 000746' 254000 014063' JRST .+2] ;SKIP RETURN + 000747' 201000 000000 MOVEI AC0,0 ;NO, ZERO EXPONENT + 000750' 262740 013342' POP PP,PPTEMP + 000751' 262740 000004 POP PP,SX + 000752' 262740 000015 POP PP,FR + 000753' 550300 000017 HRRZ V,PP + 000754' 200740 013342' MOVE PP,PPTEMP + 000755' 326440 000431' JUMPN RC,NUMER1 ;EXPONENT MUST BE ABSOLUTE + 000756' 270200 000000 ADD SX,AC0 + 000757' 550240 000017 HRRZ ARG,PP + 000760' 270200 000005 ADD SX,ARG + 000761' 403000 000002 SETZB AC0,AC2 + 000762' 603640 000040 TLNE FR,DCFSW + 000763' 254000 001004' JRST NUM60 + 000764' 255400 000765' JOV NUM50 ;CLEAR OVERFLOW FLAG + MACRO V.10 PAGE 23 + LITERAL PROCESSOR + + + 000765' 265140 001020' NUM50: JSP SDEL,NUMUP ;FLOATING POINT + 000766' 254000 000773' JRST NUM52 ;END OF WHOLE NUMBERS + 000767' 164000 014077' FMPR AC0,[10.0] ;MULTIPLY BY 10 + 000770' 661040 233000 TLO AC1,233000 ;CONVERT TO FLOATING POINT + 000771' 144000 000001 FADR AC0,AC1 ;ADD IT IN + 000772' 254000 000765' JRST NUM50 + + 000773' 265140 001026' NUM52: JSP SDEL,NUMDN ;PROCESS FRACTION + 000774' 144000 000002 FADR AC0,AC2 + 000775' 255400 000431' JOV NUMER1 ;TEST FOR OVERFLOW + 000776' 254000 000434' JRST GETDE1 + + 000777' 661040 233000 TLO AC1,233000 + 001000' 602040 777777 TRNE AC1,-1 + 001001' 144100 000001 FADR AC2,AC1 ;ACCUMULATE FRACTION + 001002' 174100 014077' FDVR AC2,[10.0] + 001003' 254000 000773' JRST NUM52 + + 001004' 265140 001020' NUM60: JSP SDEL,NUMUP + 001005' 254000 001011' JRST NUM62 + 001006' 221000 000012 IMULI AC0,^D10 + 001007' 270000 000001 ADD AC0,AC1 + 001010' 254000 001004' JRST NUM60 + + 001011' 246040 777734 NUM62: LSHC AC1,-^D36 + 001012' 265140 001026' JSP SDEL,NUMDN + 001013' 246040 000045 LSHC AC1,^D37 + 001014' 260740 004453' PUSHJ PP,BYPAS2 + 001015' 254000 000436' JRST GETDE3 + + 001016' 235040 000012 DIVI AC1,^D10 + 001017' 254000 001011' JRST NUM62 + + 001020' 201040 000000 NUMUP: MOVEI AC1,0 + 001021' 311240 000004 CAML ARG,SX + 001022' 254003 000000 JRST 0(SDEL) + 001023' 315240 000006 CAMGE ARG,V + 001024' 200045 000001 MOVE AC1,1(ARG) + 001025' 344243 000001 AOJA ARG,1(SDEL) + + 001026' 201040 000000 NUMDN: MOVEI AC1,0 + 001027' 317300 000004 CAMG V,SX + 001030' 254003 000000 JRST 0(SDEL) + 001031' 313300 000005 CAMLE V,ARG + 001032' 200046 000000 MOVE AC1,0(V) + 001033' 364303 000003 SOJA V,3(SDEL) + MACRO V.10 PAGE 24 + GETSYM + + SUBTTL GETSYM + 001034' 201000 000000 GETSYM: MOVEI AC0,0 ;CLEAR AC0 + 001035' 205040 440600 MOVSI AC1,(POINT 6,AC0) ;PUT POINTER IN AC1 + 001036' 260740 004452' PUSHJ PP,BYPASS ;SKIP LEADING BLANKS + 001037' 607400 000002 TLNN CS,2 ;ALPHABETIC? + 001040' 254000 001046' JRST GETSY1 ;NO, ERROR + 001041' 302340 000016 CAIE C,16 ;PERIOD? + 001042' 254000 001047' JRST GETSY2 ;NO, A VALID SYMBOL + 001043' 136340 000001 IDPB C,AC1 ;STORE THE CHARACTER + 001044' 260740 001354' PUSHJ PP,GETCHR ;YES, TEST NEXT CHARACTER + 001045' 607400 000002 TLNN CS,2 ;ALPHABETIC? + 001046' 664600 040000 GETSY1: TROA ER,ERRA + 001047' 350017 000000 GETSY2: AOS 0(PP) ;YES, SET SKIP EXIT + 001050' 607400 000006 GETSY3: TLNN CS,6 ;ALPHA-NUMERIC? + 001051' 254000 004453' JRST BYPAS2 ;NO, GET DELIMITER + 001052' 603040 770000 TLNE AC1,770000 ;YES, HAVE WE STORED SIX? + 001053' 136340 000001 IDPB C,AC1 ;NO, STORE IT + 001054' 260740 001354' PUSHJ PP,GETCHR + 001055' 254000 001050' JRST GETSY3 + + MACRO V.10 PAGE 25 + EXPRESSION EVALUATOR + + SUBTTL EXPRESSION EVALUATOR + 000000 CV== AC0 ;CURRENT VALUE + 000001 PV== AC1 ;PREVIOUS VALUE + 000011 RC== RC ;CURRENT RELOCATABILITY + 000002 PR== AC2 ;PREVIOUS RELOCATABILITY + 000010 CS= CS ;CURRENT STATUS + 000003 PS== SDEL ;PREVIOUS STATUS + + 001056' 661640 010000 EVALHA: TLO FR,TMPSW + 001057' 260740 001070' EVALCM: PUSHJ PP,EVALEX ;EVALUATE FIRST EXPRESSION + 001060' 261740 014100' PUSH PP,[0] ;MARK PDL + 001061' 321400 001064' JUMPCM EVALC3 ;JUMP IF COMMA + 001062' 661600 000004 TLO IO,IORPTC ;IT'S NOT,SO REPEAT + 001063' 254000 004354' JRST OP ;PROCESS IN OP + 001064' EVALC3: + 001064' 261740 014100' PUSH PP,[0] ;STORE ZERO'S ON PDL + 001065' 261740 014100' PUSH PP,[0] ;....... + 001066' 205100 270417 MOVSI AC2,(POINT 4,(PP),12) + 001067' 254000 004363' JRST OP1B ;PROCESS IN OP + + 001070' 661600 400000 EVALEX: TLO IO,FLDSW + 001071' 261740 014101' PUSH PP,[XWD TNODE,0] ;MARK THE LIST 200000,,0 + 001072' 627640 010000 TLZN FR,TMPSW + 001073' 260740 000325' EVATOM: PUSHJ PP,ATOM ;GET THE NEXT ATOM + 001074' 322000 001170' JUMPE AC0,EVGETD ;TEST FOR NULL/ZERO + 001075' 663600 020000 TLOE IO,NUMSW ;SET NUMERIC, WAS IT PREVIOUSLY? + 001076' 254000 001171' JRST EVGETD+1 ;YES, TREAT ACCORDINGLY + 001077' 260740 012313' PUSHJ PP,SEARCH ;SEARCH FOR MACRO OR SYMBOL + 001100' 254000 001122' JRST EVOP ;NOT FOUND, TRY FOR OP-CODE + 001101' 321240 001103' JUMPL ARG,.+2 ;SKIP IF OPERAND + 001102' 260740 012213' PUSHJ PP,SSRCH1 ;OPERATOR, TRY FOR SYMBOL (OPERAND) + 001103' 260740 012203' PUSHJ PP,QSRCH ;PERFORM CROSS-REFERENCE + 001104' 327240 001107' JUMPG ARG,EVMAC ;BRANCH IF OPERATOR + 001105' 200000 000006 MOVE AC0,V ;SYMBOL, SET VALUE + 001106' 254000 001152' JRST EVTSTS ;TEST STATUS + + 001107' 603640 000200 EVMAC: TLNE FR,NEGSW ;UNARY MINUS? + 001110' 254000 001147' JRST EVERRZ ;YES, INVALID BEFORE OPERATOR + 001111' 135140 014060' LDB SDEL,[POINT 3,ARG,5] ;GET MACF/OPDF/SYNF + 001112' 361140 001147' SOJL SDEL,EVERRZ ;ERROR IF NO FLAGS + + 001113' 322340 001115' JUMPE C,.+2 ;NON-BLANK? + 001114' 661600 000004 TLO IO,IORPTC ;YES, REPEAT CHARACTER + 001115' 362140 005511' SOJE SDEL,CALLM ;MACRO IF 2 + 001116' 327140 001126' JUMPG SDEL,EVOPS ;SYNONYM IF 4 + + 001117' 200000 000006 MOVE AC0,V ;OPDEF + 001120' 201300 004354' MOVEI V,OP ;SET TRANSFER VECTOR + 001121' 254000 001132' JRST EVOPD + MACRO V.10 PAGE 26 + EXPRESSION EVALUATOR + + 001122' 603640 000200 EVOP: TLNE FR,NEGSW ;OPCODE, UNARY MINUS? + 001123' 254000 001147' JRST EVERRZ ;YES, ERROR + + 001124' 260740 010470' PUSHJ PP,OPTSCH ;SEARCH SYMBOL TABLE + 001125' 254000 001145' JRST EVOPX ;NOT FOUND + 001126' 620300 200000 EVOPS: TRZ V,LITF ;CLEAR LIT INVALID FLAG + 001127' 622300 100000 TRZE V,ADDF ;SYNONYM + 001130' 254000 001145' JRST EVOPX ;PSEUDO-OP THAT GENERATES NO DATA JUMPS + 001131' 510000 000006 HLLZ AC0,V + 001132' 322340 001134' EVOPD: JUMPE C,.+2 ;OPDEF, NON-BLANK DELIMITER? + 001133' 661600 000004 TLO IO,IORPTC ;YES, REPEAT CHARACTER + 001134' 265100 002723' JSP AC2,SVSTOW + 001135' 260746 000000 PUSHJ PP,0(V) + 001136' 260740 002712' PUSHJ PP,DSTOW + 001137' 265100 002731' JSP AC2,GTSTOW + 001140' 602440 777776 TRNE RC,-2 + 001141' 542440 013270' HRRM RC,EXTPNT + 001142' 603440 777776 TLNE RC,-2 + 001143' 502440 013270' HLLM RC,EXTPNT + 001144' 254000 001175' JRST EVNUM + + 001145' 205240 402000 EVOPX: MOVSI ARG,SYMF!UNDF + 001146' 260740 012365' PUSHJ PP,INSERZ + 001147' 403000 000011 EVERRZ: SETZB AC0,RC ;CLEAR CODE AND RELOCATION + 001150' 660600 002000 EVERRU: TRO ER,ERRU + 001151' 254000 001170' JRST EVGETD + MACRO V.10 PAGE 27 + EXPRESSION EVALUATOR + + 001152' 603240 002000 EVTSTS: TLNE ARG,UNDF + JRST [TRO ER,ERRU ;SET UNDEF ERROR + JUMP1 EVGETD ;TREAT AS UNDF ON PASS1 + 001153' 254000 014102' JRST .+1] ;TREAT AS EXTERNAL ON PASS2 + 001154' 607240 001000 TLNN ARG,EXTF + 001155' 254000 001164' JRST EVTSTR + 001156' 550440 000005 HRRZ RC,ARG ;GET ADRES WFW + 001157' 550240 013270' HRRZ ARG,EXTPNT ;SAVE IT WFW + 001160' 542440 013270' HRRM RC,EXTPNT ;WFW + 001161' 602240 777777 TRNE ARG,-1 ;WFW + 001162' 660600 000040 TRO ER,ERRE + 001163' 403000 000005 SETZB AC0,ARG + + 001164' 603240 000020 EVTSTR: TLNE ARG,MDFF ;MULTIPLY DEFINED? + 001165' 660600 020000 TRO ER,ERRD ;YES, FLAG IT + 001166' 603640 000200 TLNE FR,NEGSW ;NEGATIVE ATOM? + 001167' 260740 000444' PUSHJ PP,GETDE2 ;YES, NEGATE AC0 AND RC + + 001170' 603600 020000 EVGETD: TLNE IO,NUMSW ;NON BLANK FIELD + 001171' 661640 100000 TLO FR,FSNSW ;YES,SET FLAG + 001172' 260740 004453' PUSHJ PP,BYPAS2 + 001173' 603400 000006 TLNE CS,6 ;ALPHA-NUMERIC? + 001174' 661600 000004 TLO IO,IORPTC ;YES, REPEAT IT + 001175' 262740 000003 EVNUM: POP PP,PS ;POP THE PREVIOUS DELIMITER/TNODE + 001176' 661140 004000 TLO PS,4000 + 001177' 315140 000010 CAMGE PS,CS ;OPERATION REQUIRED? + 001200' 254000 001205' JRST EVPUSH ;NO, PUT VALUES BACK ON STACK + 001201' 607140 200000 TLNN PS,TNODE ;YES, HAVE WE REACHED TERMINAL NODE? + 001202' 254000 001212' JRST EVXCT ;NO, EXECUTION REQUIRED + 001203' 607400 170000 TLNN CS,170000 ;YES, ARE WE POINTING AT DEL? (& ! * / + - _) + 001204' 263740 000000 POPJ PP, ;YES, EXIT + ;NO,FALL INTO EVPUSH + + MACRO V.10 PAGE 28 + EXPRESSION EVALUATOR + + 001205' 261740 000003 EVPUSH: PUSH PP,PS ;STACK VALUES + 001206' 261740 000000 PUSH PP,CV + 001207' 261740 000011 PUSH PP,RC + 001210' 261740 000010 PUSH PP,CS + 001211' 254000 001073' JRST EVATOM ;GET NEXT ATOM + + 001212' 262740 000002 EVXCT: POP PP,PR ;POP PREVIOUS RELOCATABILITY + 001213' 262740 000001 POP PP,PV ;AND PREVIOUS VALUE + 001214' 135140 014105' LDB PS,[POINT 3,PS,29] ;TYPE OF OPERATION TO PS + 001215' 254003 001216' JRST .+1(PS) ;PERFORM PROPER OPERATION + 001216' 254000 000104' JRST ASSEM1 ;0; SHOULD NEVER GET HERE ;DMN + 001217' 254000 001244' JRST XMUL ;1; + 001220' 254000 001240' JRST XDIV ;2; + 001221' 254000 001235' JRST XADD ;3; + 001222' 254000 001232' JRST XSUB ;4; + 001223' 254000 001255' JRST XLRW ;5; "_" + 001224' 674000 000001 TDOA CV,PV ;6; MERGE PV INTO CV + 001225' 404000 000001 AND CV,PV ;7; AND PV INTO CV + 001226' 326440 001230' JUMPN RC,.+2 ;COMMON RELOCATION TEST + 001227' 322100 001175' EVXCT1: JUMPE PR,EVNUM + 001230' 660600 004000 TRO ER,ERRR ;BOTH MUST BE FIXED + 001231' 254000 001175' JRST EVNUM ;GO TRY AGAIN + + 001232' 276040 000000 XSUB: SUBM PV,CV + 001233' 276100 000011 SUBM PR,RC + 001234' 254000 001175' JRST EVNUM + + 001235' 272040 000000 XADD: ADDM PV,CV + 001236' 272100 000011 ADDM PR,RC + 001237' 254000 001175' JRST EVNUM + + 001240' 230100 000000 XDIV: IDIV PR,CV ;CORRECT RELOCATABILITY + 001241' 232040 000000 IDIVM PV,CV + 001242' 250100 000011 XDIV1: EXCH PR,RC ;TAKE RELOCATION OF NUMERATOR + 001243' 254000 001227' JRST EVXCT1 + + 001244' 322100 001247' XMUL: JUMPE PR,XMUL1 ;AT LEAST ONE OPERAND + 001245' 322440 001247' JUMPE RC,XMUL1 ;MUST BE FIXED + 001246' 660600 004000 TRO ER,ERRR + 001247' 436100 000011 XMUL1: IORM PR,RC ;GET RELOCATION TO RC + 001250' 315040 000000 CAMGE PV,CV ;FIND THE GREATER + 001251' 250040 000000 EXCH PV,CV ;FIX IN CASE CV=0,OR 1 + 001252' 222040 000011 IMULM PV,RC + 001253' 222040 000000 IMULM PV,CV + 001254' 254000 001175' JRST EVNUM + 001255' 250040 000000 XLRW: EXCH PV,CV + 001256' 242001 000000 LSH CV,0(PV) + 001257' 242101 000000 LSH PR,0(PV) + 001260' 254000 001242' JRST XDIV1 + MACRO V.10 PAGE 29 + LITERAL STORAGE HANDLER + + SUBTTL LITERAL STORAGE HANDLER + + 001261' STOLER: + 001261' 403000 000011 SETZB AC0,RC ;ERROR, NO CODE STORED + 001262' 260740 002665' PUSHJ PP,STOW ;STOW ZERO + 001263' 660600 010000 TRO ER,ERRL ;AND FLAG THE ERROR + + 001264' 200140 013104' STOLIT: MOVE SDEL,STPX + 001265' 274140 013105' SUB SDEL,STPY ;COMPUTE NUMBER OF WORDS + 001266' 322140 001261' JUMPE SDEL,STOLER ;ERROR IF NONE STORED + 001267' 606600 777760 TRNN ER,ERRORS ;ANY ERRORS? + 001270' 254000 001274' JRST STOL06 ;NO + 001271' 325640 001333' JUMP2 STOL22 ;YES, NO SEARCH. BRANCH IF PASS2 + 001272' 272140 013036' ADDM SDEL,LITCNT ;PASS ONE, UPDATE COUNT + 001273' 254000 002717' JRST STOWI ;INITIALIZE STOW + + 001274' 201200 013031' STOL06: MOVEI SX,LITAB ;PREPARE FOR SEARCH + 001275' 200240 013104' MOVE ARG,STPX ;SAVE IN THE EVENT OF MULTIPLE-WORD + 001276' 504240 013105' HRL ARG,STPY + 001277' 200100 013037' MOVE AC2,LITNUM + 001300' 201140 000000 MOVEI SDEL,0 + 001301' 260740 002712' STOL08: PUSHJ PP,DSTOW ;GET VALUE WFW + + 001302' 361100 001335' STOL10: SOJL AC2,STOL24 ;TEST FOR END + 001303' 200204 000000 MOVE SX,0(SX) ;NO, GET NEXT STORAGE CELL + 001304' 200304 777777 MOVE V,-1(SX) ;GET RELOCATION BITS WFW + 001305' 316004 777776 CAMN AC0,-2(SX) ;DO CODES COMPARE? WFW + 001306' 312440 000006 CAME RC,V ;YES, HOW ABOUT RELOCATION? + 001307' 344140 001302' AOJA SDEL,STOL10 ;NO, TRY AGAIN + 001310' 335000 013104' SKIPGE STPX ;YES, MULTI-WORD? + 001311' 254000 001346' JRST STOL26 ;NO, JUST RETURN LOCATION + 001312' 202100 013047' MOVEM AC2,SAVBLK+AC2 ;YES, SAVE STARTING INFO + 001313' 202200 013051' MOVEM SX,SAVBLK+SX + + 001314' 361100 001334' STOL12: SOJL AC2,STOL23 ;TEST FOR END + 001315' 260740 002712' PUSHJ PP,DSTOW ;GET NEXT WORD WFW + 001316' 200204 000000 MOVE SX,0(SX) ;UPDATE POINTER + 001317' 200304 777777 MOVE V,-1(SX) ;GET RELOCATION WFW + 001320' 316004 777776 CAMN AC0,-2(SX) ;COMPARE VALUE WFW + 001321' 312440 000006 CAME RC,V ;AND RELOCATION + 001322' 254000 001326' JRST STOL14 ;NO MATCH, TRY AGAIN + 001323' 331000 013104' SKIPL STPX ;MATCH, HAVE WE FINISHED SEARCH? + 001324' 254000 001314' JRST STOL12 ;NO, TRY NEXT WORD + 001325' 254000 001346' JRST STOL26 ;YES, RETURN LOCATION + + 001326' 200100 013047' STOL14: MOVE AC2,SAVBLK+AC2 ;RESTORE STOW POINTERS + 001327' 200200 013051' MOVE SX,SAVBLK+SX + 001330' 572240 013104' HRREM ARG,STPX + 001331' 576240 013105' HLREM ARG,STPY + 001332' 344140 001301' AOJA SDEL,STOL08 ;BETTER LUCK NEXT TIME + MACRO V.10 PAGE 30 + LITERAL STORAGE HANDLER + + + 001333' 200140 013037' STOL22: MOVE SDEL,LITNUM + 001334' 260740 002712' STOL23: PUSHJ PP,DSTOW ;DSTOW AND CONVERT + 001335' 200200 013032' STOL24: MOVE SX,LITABX ;GET CURRENT STORAGE + 001336' 260740 003444' PUSHJ PP,GETTOP ;GET NEXT CELL + 001337' 202004 777776 MOVEM AC0,-2(SX) ;STORE CODE WFW + 001340' 202444 777777 MOVEM RC,-1(SX) ;WFW + 001341' 202200 013032' MOVEM SX,LITABX ;SET POINTER TO CURRENT CELL + 001342' 350000 013037' AOS LITNUM ;INCREMENT NUMBER STORED + 001343' 350000 013036' AOS LITCNT ;INCREMENT NUMBER RESERVED + 001344' 331000 013104' SKIPL STPX ;ANY MORE CODE? + 001345' 254000 001334' JRST STOL23 ;YES + 001346' 321640 000446' STOL26: JUMP1 POPOUT ;EXIT IF PASS ONE + 001347' 200200 013035' MOVE SX,LITHDX ;GET HEADER BLOCK + 001350' 554444 777777 HLRZ RC,-1(SX) ;GET BLOCK RELOCATION + 001351' 550004 777777 HRRZ AC0,-1(SX) + 001352' 271003 000000 ADDI AC0,0(SDEL) ;COMPUTE ACTUAL LOCATION + 001353' 263740 000000 POPJ PP, ;EXIT + + MACRO V.10 PAGE 31 + INPUT ROUTINES + + SUBTTL INPUT ROUTINES + 001354' 260740 001406' GETCHR: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + 001355' 301340 000141 CAIL C,"A"+40 ;CHECK FOR LOWER CASE + 001356' 303340 000172 CAILE C,"Z"+40 + 001357' 254000 001361' JRST .+2 ;NOT LOWER CASE + 001360' 624340 000100 TRZA C,100 ;CONVERT LOWER CASE TO SIXBIT + 001361' 275340 000040 SUBI C,40 ;CONVERT TO SIXBIT + 001362' 307340 000077 CAIG C,77 ;CHAR GREATER THAN SIXBIT? + 001363' 325340 001375' JUMPGE C,GETCS ;TEST FOR VALID SIXBIT + 001364' 271340 000040 ADDI C,40 ;BACK TO ASCII + 001365' 306340 000011 CAIN C,HT ;CHECK FOR TAB + 001366' 254000 001374' JRST GETCS2 ;MAKE IT LOOK LIKE SPACE + 001367' 307340 000015 CAIG C,CR ;GREATER THAN CR + 001370' 307340 000011 CAIG C,HT ;GREATER THAN TAB + 001371' 254000 001377' JRST GETCS1 ;IS NOT FF,VT,LF OR CR + 001372' 201340 000033 MOVEI C,EOL ;LINE OR FORM FEED OR V TAB + 001373' 665600 000004 TLOA IO,IORPTC ;REPEAT CHARACTER + 001374' 201340 000000 GETCS2: MOVEI C,0 ;BUT TREAT AS BLANK + 001375' 200407 001447' GETCS: MOVE CS,CSTAT(C) ;GET STATUS BITS + 001376' 263740 000000 POPJ PP, ;EXIT + + 001377' 322340 001375' GETCS1: JUMPE C,GETCS ;IGNORE NULS + 001400' 640340 000100 TRC C,100 ;MAKE CHAR. VISIBLE + 001401' 201400 000136 MOVEI CS,"^" + 001402' 137400 013003' DPB CS,LBUFP ;PUT ^ IN OUTPUT + 001403' 260740 001414' PUSHJ PP,RSW2 ;ALSO MODIFIED CHAR. + 001404' 660600 200000 TRO ER,ERRQ ;FLAG Q ERROR + 001405' 254000 001354' JRST GETCHR ;BUT IGNORE CHAR. + MACRO V.10 PAGE 32 + INPUT ROUTINES + + + 001406' 623600 000004 CHARAC: TLZE IO,IORPTC ;REPEAT REQUESTED? + 001407' 254000 001434' JRST CHARAX ;YES + 001410' 326540 006300' RSW0: JUMPN MRP,MREAD ;BRANCH IF TREE POINTER SET + 001411' 260740 010221' PUSHJ PP,READ + 001412' 332000 013350' RSW1: SKIPE RPOLVL ;ARE WE IN "REPEAT ONCE"? + 001413' 254000 005201' JRST REPO1 ;YES + 001414' 200400 013002' RSW2: MOVE CS,LIMBO ;GET LAST CHAR. + 001415' 202340 013002' MOVEM C,LIMBO ;STORE THIS CHAR. FOR RPTC + 001416' 306340 000012 CAIN C,LF ;LF? + 001417' 302400 000015 CAIE CS,CR ;YES,LAST CHAR. A CR? + 001420' 254000 001423' JRST RSW3 ;NO + 001421' 563000 013002' HRROS LIMBO ;YES,FLAG + 001422' 263740 000000 POPJ PP, ;AND EXIT + + 001423' 603600 000001 RSW3: TLNE IO,IOSALL ;MACRO SUPPRESS ALL? + 001424' 326540 003360' JUMPN MRP,CPOPJ ;YES,DON'T LIST IN MACRO + 001425' 377000 013265' SOSG CPL ;ANY ROOM IN THE IMAGE BUFFER? + 001426' 260740 001650' PUSHJ PP,OUTPL ;NO, OUTPUT THE PARTIAL LINE + 001427' 136340 013003' IDPB C,LBUFP ;YES, STORE IN PRINT AREA + 001430' 302340 000011 CAIE C,HT ;TAB? + 001431' 263740 000000 POPJ PP, ;NO, EXIT + 001432' 201340 000007 MOVEI C,7 + 001433' 412340 013265' ANDCAM C,CPL ;MASK + 001434' 550340 013002' CHARAX: HRRZ C,LIMBO ;GET LAST CHARACTER + 001435' 263740 000000 POPJ PP, ;EXIT + + 001436' 260740 001406' CHARL: PUSHJ PP,CHARAC ;GET AND TEST 7-BIT ASCII + 001437' 307340 000014 CAIG C,FF ;LINE OR FORM FEED OR VT? + 001440' 305340 000012 CAIGE C,LF + 001441' 263740 000000 POPJ PP, ;NO,EXIT + 001442' 332000 013321' SKIPE LITLVL ;IN LITERAL? + 001443' 254000 002011' JRST OUTIML ;YES + 001444' 260740 007211' CHARL1: PUSHJ PP,SAVEXS ;SAVE REGISTERS + 001445' 260740 001547' PUSHJ PP,OUTLIN ;DUMP THE LINE + 001446' 254000 007205' JRST RSTRXS ;RESTORE REGISTERS AND EXIT + MACRO V.10 PAGE 33 + CHARACTER STATUS TABLE + + SUBTTL CHARACTER STATUS TABLE + + DEFINE GENCS (OPLVL,ATOM,AN,SQUOZ,OPTYPE,SEQNO) + <BYTE (6)OPLVL (9)ATOM (3)AN (6)SQUOZ,OPTYPE,SEQNO> + + ;OPLVL PRIORITY OF BINARY OPERATORS + ;ATOM INDEX TO JUMP TABLE AT CELL1 + ;AN TYPE OF CHARACTER + ; 1=OTHER, 2=ALPHA, 4=NUMERIC + ;SQUOZ VALUE IN RADIX 50 + ;OPTYPE INDEX TO JUMP TABLE AT EVXCT + ;SEQNO VALUE IN SIXBIT + 001447' CSTAT: + 001447' 000001 000000 GENCS 00,00,1,00,00,00 ; ' ' + 001450' 040121 000601 GENCS 04,12,1,00,06,01 ; '!' + 001451' 000071 000002 GENCS 00,07,1,00,00,02 ; '"' + 001452' 000121 000003 GENCS 00,12,1,00,00,03 ; '#' + 001453' 000012 460004 GENCS 00,01,2,46,00,04 ; '$' + 001454' 000012 470005 GENCS 00,01,2,47,00,05 ; '%' + 001455' 040121 000706 GENCS 04,12,1,00,07,06 ; '&' + 001456' 000071 000007 GENCS 00,07,1,00,00,07 ; ''' + + 001457' 000011 000010 GENCS 00,01,1,00,00,10 ; '(' + 001460' 000011 000011 GENCS 00,01,1,00,00,11 ; ')' + 001461' 020121 000112 GENCS 02,12,1,00,01,12 ; '*' + 001462' 010001 000313 GENCS 01,00,1,00,03,13 ; '+' + 001463' 400011 000014 GENCS 40,01,1,00,00,14 ; ',' + 001464' 010021 000415 GENCS 01,02,1,00,04,15 ; '-' + 001465' 000112 450016 GENCS 00,11,2,45,00,16 ; '.' + 001466' 020121 000217 GENCS 02,12,1,00,02,17 ; '/' + + 001467' 000044 010020 GENCS 00,04,4,01,00,20 ; '0' + 001470' 000044 020021 GENCS 00,04,4,02,00,21 ; '1' + 001471' 000044 030022 GENCS 00,04,4,03,00,22 ; '2' + 001472' 000044 040023 GENCS 00,04,4,04,00,23 ; '3' + 001473' 000044 050024 GENCS 00,04,4,05,00,24 ; '4' + 001474' 000044 060025 GENCS 00,04,4,06,00,25 ; '5' + 001475' 000044 070026 GENCS 00,04,4,07,00,26 ; '6' + 001476' 000044 100027 GENCS 00,04,4,10,00,27 ; '7' + + 001477' 000044 110030 GENCS 00,04,4,11,00,30 ; '8' + 001500' 000044 120031 GENCS 00,04,4,12,00,31 ; '9' + 001501' 000121 000032 GENCS 00,12,1,00,00,32 ; ':' + 001502' 000011 000033 GENCS 00,01,1,00,00,33 ; ';' + 001503' 000051 000034 GENCS 00,05,1,00,00,34 ; '<' + 001504' 000121 000035 GENCS 00,12,1,00,00,35 ; '=' + 001505' 000011 000036 GENCS 00,01,1,00,00,36 ; '>' + 001506' 000121 000037 GENCS 00,12,1,00,00,37 ; '?' + MACRO V.10 PAGE 34 + CHARACTER STATUS TABLE + + 001507' 000031 000040 GENCS 00,03,1,00,00,40 ; '@' + 001510' 000012 130041 GENCS 00,01,2,13,00,41 ; 'A' + 001511' 000012 140042 GENCS 00,01,2,14,00,42 ; 'B' + 001512' 000012 150043 GENCS 00,01,2,15,00,43 ; 'C' + 001513' 000012 160044 GENCS 00,01,2,16,00,44 ; 'D' + 001514' 000012 170045 GENCS 00,01,2,17,00,45 ; 'E' + 001515' 000012 200046 GENCS 00,01,2,20,00,46 ; 'F' + 001516' 000012 210047 GENCS 00,01,2,21,00,47 ; 'G' + + 001517' 000012 220050 GENCS 00,01,2,22,00,50 ; 'H' + 001520' 000012 230051 GENCS 00,01,2,23,00,51 ; 'I' + 001521' 000012 240052 GENCS 00,01,2,24,00,52 ; 'J' + 001522' 000012 250053 GENCS 00,01,2,25,00,53 ; 'K' + 001523' 000012 260054 GENCS 00,01,2,26,00,54 ; 'L' + 001524' 000012 270055 GENCS 00,01,2,27,00,55 ; 'M' + 001525' 000012 300056 GENCS 00,01,2,30,00,56 ; 'N' + 001526' 000012 310057 GENCS 00,01,2,31,00,57 ; 'O' + + 001527' 000012 320060 GENCS 00,01,2,32,00,60 ; 'P' + 001530' 000012 330061 GENCS 00,01,2,33,00,61 ; 'Q' + 001531' 000012 340062 GENCS 00,01,2,34,00,62 ; 'R' + 001532' 000012 350063 GENCS 00,01,2,35,00,63 ; 'S' + 001533' 000012 360064 GENCS 00,01,2,36,00,64 ; 'T' + 001534' 000012 370065 GENCS 00,01,2,37,00,65 ; 'U' + 001535' 000012 400066 GENCS 00,01,2,40,00,66 ; 'V' + 001536' 000012 410067 GENCS 00,01,2,41,00,67 ; 'W' + + 001537' 000012 420070 GENCS 00,01,2,42,00,70 ; 'X' + 001540' 000012 430071 GENCS 00,01,2,43,00,71 ; 'Y' + 001541' 000012 440072 GENCS 00,01,2,44,00,72 ; 'Z' + 001542' 000061 000073 GENCS 00,06,1,00,00,73 ; '[' + 001543' 000121 000074 GENCS 00,12,1,00,00,74 ; '\' + 001544' 000011 000075 GENCS 00,01,1,00,00,75 ; ']' + 001545' 000101 000076 GENCS 00,10,1,00,00,76 ; '^' + 001546' 100121 000577 GENCS 10,12,1,00,05,77 ; '_' + MACRO V.10 PAGE 35 + LISTING ROUTINES + + SUBTTL LISTING ROUTINES + + 001547' 606600 577760 OUTLIN: TRNN ER,ERRORS-ERRQ ;ANY ERRORS? + 001550' 603640 000010 TLNE FR,ERRQSW ;NO, IGNORE Q ERRORS? + 001551' 620600 200000 TRZ ER,ERRQ ;YES, YES, ZERO THE Q ERROR + 001552' 514000 000014 HRLZ AC0,ER ;PUT ERROR FLAGS IN AC0 LEFT + 001553' 630600 013256' TDZ ER,TYPERR + 001554' 321640 001665' JUMP1 OUTL30 ;BRANCH IF PASS ONE + 001555' 326000 001567' JUMPN AC0,OUTL02 ;JUMP IF ANY ERRORS TO FORCE PRINTING + 001556' 331000 013104' SKIPL STPX ;SKIP IF NO CODE, OTHERWISE + 001557' 254000 001565' JRST OUTL01 ;NO + 001560' 607600 000001 TLNN IO,IOSALL ;YES,SUPPRESS ALL? + 001561' 254000 001566' JRST OUTL03 ;NO + 001562' 326540 003360' JUMPN MRP,CPOPJ ;YES,EXIT IF IN MACRO + 001563' 135340 014106' LDB C,[XWD 350700,LBUF] + 001564' 302340 000015 CAIE C,15 ;FIRST CHAR CR? + 001565' 621600 010000 OUTL01: TLZ IO,IOMAC ;FORCE MACRO PRINTING + 001566' 607600 250000 OUTL03: TLNN IO,IOMSTR!IOPROG!IOMAC + 001567' 434600 013042' OUTL02: IOR ER,OUTSW ;FORCE IT. + 001570' 136000 013003' IDPB AC0,LBUFP ;STORE ZERO TERMINATOR AFTER ASCII SRC LINE + 001571' 607640 002000 TLNN FR,CREFSW ;CREF? + 001572' 260740 012274' PUSHJ PP,CLSCRF ;YES, WRITE END OF CREF DATA (177,003) + 001573' 322000 001577' JUMPE AC0,OUTL20 ;BRANCH IF NO ERRORS + 001574' 623000 000020 TLZE AC0,ERRM ;M ERROR? + 001575' 661000 000100 TLO AC0,ERRP ;M ERROR SET - SET P ERROR. + 001576' 260740 001712' PUSHJ PP,OUTLER ;PROCESS ERRORS + + 001577' 336440 013323' OUTL20: SKIPN RC,ASGBLK + 001600' 332400 013324' SKIPE CS,LOCBLK ; + 001601' 331000 013104' SKIPL STPX ;ANY BINARY? + 001602' 254000 001625' JRST OUTL23 ;YES, JUMP + 001603' 322440 001621' JUMPE RC,OUTL22 ;SEQUENCE BREAK AND NO BINARY JUMPS + 001604' 134340 013226' ILDB C,TABP ;ASSIGNMENT FALLS THROUGH + 001605' 260740 010325' PUSHJ PP,OUTL ;OUTPUT A TAB. + 001606' 134340 013226' ILDB C,TABP ;OUTPUT 2ND TAB, LOCATION FIELD + 001607' 260740 010377' PUSHJ PP,OUTC ;NEXT IS BINARY LISTING FIELD + 001610' 520400 013324' HLLO CS,LOCBLK ;LEFT HALF OF A 36BIT VALUE + 001611' 321440 001613' JUMPL RC,.+2 ;SKIP IF LEFT HALF IS NOT RELOC + 001612' 624400 000001 TRZA CS,1 ;IT IS, SET THE FLAG + 001613' 603400 777777 TLNE CS,-1 ;SKIP IF ITS A 18BIT VALUE, OTHERWISE + 001614' 260740 002751' PUSHJ PP,ONC1 ;PRINT LH OF A 36 BIT VALUE IN CS + 001615' 524400 013324' HRLO CS,LOCBLK ;PICK UP THE RIGHT HALF (18BIT VALUE) + 001616' 620411 000000 TRZ CS,0(RC) ; + 001617' 260740 002747' PUSHJ PP,ONC ;PRINT IT + 001620' 254000 001625' JRST OUTL23 ;SKIP SINGLE QUOTE TEST + MACRO V.10 PAGE 36 + LISTING ROUTINES + + 001621' 260740 002747' OUTL22: PUSHJ PP,ONC ;TAB TO RH AND PRINT IT + 001622' 201340 000047 MOVEI C,"'" + 001623' 332000 013332' SKIPE MODA + 001624' 260740 010377' PUSHJ PP,OUTC + 001625' 331000 013104' OUTL23: SKIPL STPX ;ANY BINARY? + 001626' 260740 002434' PUSHJ PP,BOUT ;YES, DUMP IT + 001627' 200420 001774' MOVE CS,@OUTLI2 ;[POINT 7,LBUF] + 001630' 134340 000010 OUTL24: ILDB C,CS + 001631' 322340 001636' JUMPE C,OUTL25 + 001632' 307340 000040 CAIG C," " + 001633' 254000 001630' JRST OUTL24 + 001634' 200400 013226' MOVE CS,TABP + 001635' 260740 002775' PUSHJ PP,OUTASC ;OUTPUT TABS + 001636' 201400 013004' OUTL25: MOVEI CS,LBUF + 001637' 260740 002774' PUSHJ PP,OUTAS0 ;DUMP THE LINE + 001640' 603600 000001 TLNE IO,IOSALL ;SUPPRESSING ALL + 001641' 326540 001646' JUMPN MRP,OUTL27 ;YES,EXTRA CR IF IN MACRO + 001642' 335000 013104' OUTL26: SKIPGE STPX ;ANY BINARY? + 001643' 254000 001765' JRST OUTLI ;NO, CLEAN UP AND EXIT + 001644' 260740 001774' PUSHJ PP,OUTLI2 ;YES, INITIALIZE FOR NEXT LINE + 001645' 260740 002434' PUSHJ PP,BOUT ;YES, DUMP IT + 001646' 260740 010316' OUTL27: PUSHJ PP,OUTCR ;OUTPUT CARRIAGE RETURN + 001647' 254000 001642' JRST OUTL26 ;TEST FOR MORE BINARY + + 001650' 336000 013321' OUTPL: SKIPN LITLVL ;IF IN LITERAL + 001651' 331000 013104' SKIPL STPX ;OR CODE GENERATED + 001652' 254000 001737' JRST OUTIM ;JUST OUTPUT THE IMAGE + 001653' 336000 013323' SKIPN ASGBLK ;SKIP IF AN ASSIGNMENT + 001654' 254000 001737' JRST OUTIM ;OTHERWISE OUTPUT IMAGE + 001655' 261740 000007 PUSH PP,C ;SAVE CHAR. + 001656' 201340 000015 MOVEI C,CR + 001657' 136340 013003' IDPB C,LBUFP + 001660' 201340 000012 MOVEI C,LF + 001661' 136340 013003' IDPB C,LBUFP ;FINISH WITH CRLF + 001662' 260740 001547' PUSHJ PP,OUTLIN ;OUTPUT PARTIAL LINE + 001663' 262740 000007 POP PP,C ;RESTORE CHAR. + 001664' 254000 001774' JRST OUTLI2 ;INITIALISE REST OF LINE + MACRO V.10 PAGE 37 + LISTING ROUTINES + + 001665' 350400 013104' OUTL30: AOS CS,STPX ;PASS ONE + 001666' 272400 013326' ADDM CS,LOCO ;INCREMENT OUTPUT LOCATION + 001667' 260740 002717' PUSHJ PP,STOWI ;INITIALIZE STOW + 001670' 621000 776640 TLZ AC0,ERRORS-ERRM-ERRP-ERRV + 001671' 326000 001675' JUMPN AC0,OUTL32 ;JUMP IF ERRORS + 001672' 603600 000001 TLNE IO,IOSALL ;SUPPRESSING ALL/ + 001673' 326540 003360' JUMPN MRP,CPOPJ ;YES,EXIT + 001674' 254000 001773' JRST OUTLI1 ;NO,INIT LINE + + 001675' 136000 013003' OUTL32: IDPB AC0,LBUFP ;ZERO TERNIMATOR + 001676' 434600 013042' IOR ER,OUTSW ;LIST ERRORS + 001677' 201400 012541' MOVEI CS,TAG + 001700' 260740 003001' PUSHJ PP,OUTSIX ;OUTPUT TAG + 001701' 550340 013377' HRRZ C,TAGINC + 001702' 260740 002765' PUSHJ PP,DNC ;CONVERT INCREMENT TO DECIMAL + 001703' 260740 010307' PUSHJ PP,OUTTAB ;OUTPUT TAB + 001704' 260740 001712' PUSHJ PP,OUTLER ;OUTPUT ERROR FLAGS + 001705' 260740 010307' PUSHJ PP,OUTTAB + 001706' 201400 012544' MOVEI CS,SEQNO ;ADDRESS OF SEQUENCE NO. + 001707' 332000 012544' SKIPE SEQNO ;FILE NOT SEQUENCED + 001710' 260740 002774' PUSHJ PP,OUTAS0 ;OUTPUT IT + 001711' 254000 001636' JRST OUTL25 ;OUTPUT BASIC LINE + + 001712' 261740 000014 OUTLER: PUSH PP,ER ;SAVE LISTING SWITCHES FOR LATER + 001713' 602600 000001 TRNE ER,TTYSW ;IF THIS IS ON, LISTING IS ON TTY + 001714' 620600 777760 TRZ ER,ERRORS ;SO SUPPRESS ON TTY + 001715' 630600 013042' TDZ ER,OUTSW ;BUT THIS SHOULD ONLY GO TO THE TTY + 001716' 200400 012673' MOVE CS,INDIR ;GET FILE NAME + 001717' 312400 012537' CAME CS,LSTFIL ;AND SEE IF SAME + JRST [MOVEM CS,LSTFIL ;SAVE AS LAST ONE + MOVEI CS,LSTFIL + PUSHJ PP,OUTSIX ;LIST NAME + MOVEI C," " + PUSHJ PP,OUTL + MOVE CS,PAGENO ;PRINT PAGE NUMBER TOO + 001720' 254000 014107' JRST OUTLE8] + 001721' 200400 013414' MOVE CS,PAGENO ;NOW CHECK PAGE NUMBER + 001722' 312400 013416' CAME CS,LSTPGN + OUTLE8: JRST [MOVEM CS,LSTPGN + MOVEI CS,[ASCIZ /PAGE /] + PUSHJ PP,OUTAS0 + MOVE C,PAGENO + PUSHJ PP,DNC + PUSHJ PP,OUTCR ;AND NOW FOR THE ERROR LINE + 001723' 254000 014120' JRST .+1] + 001724' 502617 000000 HLLM ER,(PP) ;RESTORE ER BUT NOT IO (LEFT HALF OF AC) + 001725' 262740 000014 POP PP,ER + 001726' 200400 014132' MOVE CS,[POINT 7,[ASCII / QXADLRUVNOPEM/]] + 001727' 134340 000010 OUTLE2: ILDB C,CS ;GET ERROR MNEMONIC + 001730' 325000 001733' JUMPGE AC0,OUTLE4 ;BRANCH IF NOT FLAGGED + 001731' 260740 010325' PUSHJ PP,OUTL ;OUTPUT THE CHARACTER + 001732' 350000 012726' AOS ERRCNT ;INCREMENT ERROR COUNT + 001733' 242000 000001 OUTLE4: LSH AC0,1 ;SHIFT NEXT FLAG INTO SIGN BIT + MACRO V.10 PAGE 38 + LISTING ROUTINES + + 001734' 326000 001727' JUMPN AC0,OUTLE2 ;TEST FOR END + 001735' 263740 000000 POPJ PP, ;EXIT + MACRO V.10 PAGE 39 + LISTING ROUTINES + + 001736' 665640 000001 OUTIM1: TLOA FR,IOSCR ;SUPPRESS CRLF AFTER LINE + 001737' 621640 000001 OUTIM: TLZ FR,IOSCR ;DON'T FOR PARTIAL LINE + 001740' 603600 000001 TLNE IO,IOSALL ;SUPPRESSING ALL? + 001741' 326540 003360' JUMPN MRP,CPOPJ ;YES ,EXIT IF IN MACRO + 001742' 321640 001773' JUMP1 OUTLI1 ;BYPASS IF PASS ONE + 001743' 261740 000014 PUSH PP,ER + 001744' 630600 013256' TDZ ER,TYPERR + 001745' 607600 250000 TLNN IO,IOMSTR!IOPROG!IOMAC + 001746' 434600 013042' IOR ER,OUTSW + 001747' 261740 000007 PUSH PP,C ;OUTPUT IMAGE + 001750' 607640 002000 TLNN FR,CREFSW + 001751' 260740 012274' PUSHJ PP,CLSCRF + 001752' 200400 013226' OUTIM2: MOVE CS,TABP + 001753' 260740 002775' PUSHJ PP,OUTASC ;OUTPUT TABS + 001754' 136340 013003' IDPB C,LBUFP ;STORE ZERO TERMINATOR + 001755' 201400 013004' MOVEI CS,LBUF + 001756' 260740 002774' PUSHJ PP,OUTAS0 ;OUTPUT THE IMAGE + 001757' 627640 000001 TLZN FR,IOSCR ;CRLF SUPPRESS? + 001760' 260740 010316' PUSHJ PP,OUTCR ;NO,OUTPUT + 001761' 262740 000007 POP PP,C + 001762' 502617 000000 HLLM ER,0(PP) + 001763' 262740 000014 POP PP,ER + 001764' 254000 001774' JRST OUTLI2 + + 001765' 603600 000001 OUTLI: TLNE IO,IOSALL ;SUPPRESSING ALL + 001766' 326540 001772' JUMPN MRP,OUTLI3 ;YES,SET FLAG IN REPEATS ALSO + 001767' 603600 004000 TLNE IO,IOPALL ;MACRO EXPANSION SUPRESS REQUESTED? + 001770' 336000 013406' SKIPN MACLVL ;YES, ARE WE IN MACRO? + 001771' 625600 010000 TLZA IO,IOMAC ;NO, CLEAR MAC FLAG + 001772' 661600 010000 OUTLI3: TLO IO,IOMAC ;YES, SET FLAG + + 001773' 620600 777763 OUTLI1: TRZ ER,ERRORS!LPTSW!TTYSW + 001774' 200400 014133' OUTLI2: MOVE CS,[POINT 7,LBUF] ;INITIALIZE BUFFERS + 001775' 202400 013003' MOVEM CS,LBUFP + 001776' 200400 014134' MOVE CS,[POINT 7,TABI,6] + 001777' 202400 013226' MOVEM CS,TABP + 002000' 201400 000130 MOVEI CS,.CPL + 002001' 202400 013265' MOVEM CS,CPL + 002002' 205400 044000 MOVSI CS,(ASCII / /) + 002003' 332000 012544' SKIPE SEQNO ;HAVE WE SEQUENCE NUMBERS? + 002004' 202400 012544' MOVEM CS,SEQNO ;YES, STORE TAB IN CASE OF MACRO + 002005' 202400 012545' MOVEM CS,SEQNO+1 ;STORE TAB AND TERMINATOR + 002006' 402000 013323' SETZM ASGBLK + 002007' 402000 013324' SETZM LOCBLK + 002010' 263740 000000 POPJ PP, + MACRO V.10 PAGE 40 + LISTING ROUTINES + + 002011' 603600 000001 OUTIML: TLNE IO,IOSALL ;SUPPRESSING ALL? + 002012' 326540 003360' JUMPN MRP,CPOPJ ;YES,EXIT IF IN MACRO + 002013' 606600 577760 TRNN ER,ERRORS-ERRQ ;FOR LITERALS (MULIT-LINE) OUTPUT ERRORS + 002014' 603640 000010 TLNE FR,ERRQSW + 002015' 620600 200000 TRZ ER,ERRQ + 002016' 514400 000014 HRLZ CS,ER + 002017' 321640 002036' JUMP1 OUTML1 ;CHECK PASS1 ERRORS + 002020' 630600 013256' TDZ ER,TYPERR + 002021' 322400 001736' JUMPE CS,OUTIM1 + 002022' 261740 014100' PUSH PP,[0] ;ERRORS SHOULD BE ZEROED + 002023' 261740 000007 PUSH PP,C + 002024' 261740 000000 PUSH PP,AC0 ;SAVE AC0 IN CASE CALLED FROM ASCII + 002025' 200000 000010 MOVE AC0,CS ;ERROR ROUTINE WANTS FLAGS IN AC0 + 002026' 434600 013042' IOR ER,OUTSW + 002027' 607640 002000 TLNN FR,CREFSW + 002030' 260740 012274' PUSHJ PP,CLSCRF ;FIX CREF + 002031' 623000 000020 TLZE AC0,ERRM + 002032' 661000 000100 TLO AC0,ERRP + 002033' 260740 001712' PUSHJ PP,OUTLER ;OUTPUT THEM + 002034' 262740 000000 POP PP,AC0 + 002035' 254000 001752' JRST OUTIM2 ;AND LINE + + 002036' 621400 776640 OUTML1: TLZ CS,ERRORS-ERRM-ERRP-ERRV + 002037' 322400 001774' JUMPE CS,OUTLI2 ;NONE + 002040' 620600 001120 TRZ ER,ERRM!ERRP!ERRV + 002041' 660600 010000 TRO ER,ERRL + 002042' 261740 000014 PUSH PP,ER ;SAVE + 002043' 261740 000007 PUSH PP,C ;SAVE THIS + 002044' 261740 000000 PUSH PP,AC0 ;AS ABOVE + 002045' 200000 000010 MOVE AC0,CS ;... + 002046' 630600 013256' TDZ ER,TYPERR + 002047' 434600 013042' IOR ER,OUTSW + 002050' 201400 012541' MOVEI CS,TAG + 002051' 260740 003001' PUSHJ PP,OUTSIX + 002052' 550340 013377' HRRZ C,TAGINC + 002053' 260740 002765' PUSHJ PP,DNC + 002054' 260740 010307' PUSHJ PP,OUTTAB + 002055' 260740 001712' PUSHJ PP,OUTLER ;DO NOT FORGET ERRORS + 002056' 260740 010307' PUSHJ PP,OUTTAB + 002057' 201400 013004' MOVEI CS,LBUF ;PRINT REST OF LINE + 002060' 260740 002420' PUSHJ PP,SOUT20 + 002061' 262740 000000 POP PP,AC0 + 002062' 262740 000007 POP PP,C + 002063' 262740 000014 POP PP,ER + 002064' 254000 001774' JRST OUTLI2 + MACRO V.10 PAGE 41 + OUTPUT ROUTINES + + SUBTTL OUTPUT ROUTINES + 002065' 260740 003025' UOUT: PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + 002066' 606240 004000 TRNN ARG,PNTF ;WFW + 002067' 606240 002000 TRNN ARG,UNDF + 002070' 254000 002107' JRST UOUT13 ;TEST FOR UNDF!EXTF!PNTF ON PASS2 + 002071' 325640 002113' JUMP2 UOUT10 + 002072' 607600 000020 TLNN IO,IOIOPF ;ANY IOP'S SEEN + 002073' 254000 002103' JRST UOUT12 ;NO,MAKE EXTERNAL + 002074' 205400 777700 MOVSI CS,PRMTBL-PRMEND;YES LOOKUP IN TABLE + 002075' 312010 011720' UOUT1: CAME AC0,PRMTBL(CS) ;HAVE WE A MATCH? + 002076' 253400 002102' AOBJN CS,UOUT2 ;NO,INCREMENT AND JUMP + 002077' 200250 011721' MOVE ARG,PRMTBL+1(CS);YES,GET VALUE + 002100' 202244 000000 MOVEM ARG,(SX) ;UPDATE SYMBOL TABLE + 002101' 263740 000000 POPJ PP, ;EXIT + 002102' 253400 002075' UOUT2: AOBJN CS,UOUT1 ;TEST FOR END + + 002103' 260740 003726' UOUT12: PUSHJ PP,EXTER2 ;MAKE IT EXTERNAL + 002104' 205240 002000 MOVSI ARG,UNDF ;BUT PUT UNDF BACK ON + 002105' 436244 000000 IORM ARG,(SX) ;SO MESSAGE WILL COME OUT + 002106' 263740 000000 POPJ PP, ;GET NEXT SYMBOL + + 002107' 321640 003360' UOUT13: JUMP1 CPOPJ ;RECYCLE ON PASS1 + 002110' 640240 007000 TRC ARG,UNDF!EXTF!PNTF ;CHECK FOR ALL THREE ON + 002111' 642240 007000 TRCE ARG,UNDF!EXTF!PNTF ;ARE THEY? + 002112' 263740 000000 POPJ PP, ;NO, RECYCLE + 002113' 260740 010316' UOUT10: PUSHJ PP,OUTCR + 002114' 260740 003010' PUSHJ PP,OUTSYM ;OUTPUT THE SYMBOL + 002115' 201400 014135' MOVEI CS,[SIXBIT /UNASSIGNED, DEFINED AS IF EXTERNAL @/] + 002116' 254000 003001' JRST OUTSIX ;POPJ FOR NEXT SYMBOL + + 002117' 260740 002751' UOUT30: PUSHJ PP,ONC1 ;OUTPUT THE LOCATION + 002120' 254000 004146' JRST HIGHQ ;EXIT THROUGH HIGHQ + MACRO V.10 PAGE 42 + OUTPUT ROUTINES + + ;OUTPUT THE ENTRIES + + 002121' 201340 000000 EOUT: MOVEI C,0 ;INITIALIZE THE COUNT + 002122' 200200 013102' MOVE SX,SYMBOL + 002123' 200144 000000 MOVE SDEL,0(SX) + 002124' 361140 002132' EOUT1: SOJL SDEL,EOUT2 ;TEST FOR END + 002125' 271200 000002 ADDI SX,2 + 002126' 554244 000000 HLRZ ARG,0(SX) + 002127' 411240 400600 ANDCAI ARG,SYMF!INTF!ENTF + 002130' 326240 002124' JUMPN ARG,EOUT1 ;IF INVALID, DON'T COUNT + 002131' 344340 002124' AOJA C,EOUT1 ;BUMP COUNT + + 002132' 505340 000004 EOUT2: HRLI C,4 ;BLOCK TYPE 4 + 002133' 260740 010122' PUSHJ PP,OUTBIN + 002134' 403340 000005 SETZB C,ARG + 002135' 260740 010122' PUSHJ PP,OUTBIN + 002136' 200200 013102' MOVE SX,SYMBOL + 002137' 200144 000000 MOVE SDEL,0(SX) + 002140' 201300 000022 MOVEI V,^D18 + + 002141' 361140 000446' EOUT3: SOJL SDEL,POPOUT + 002142' 271200 000002 ADDI SX,2 + 002143' 554344 000000 HLRZ C,0(SX) + 002144' 411340 400600 ANDCAI C,SYMF!INTF!ENTF + 002145' 326340 002141' JUMPN C,EOUT3 + 002146' 365300 002151' SOJGE V,EOUT4 ;TEST END OF BLOCK + 002147' 260740 010122' PUSHJ PP,OUTBIN + 002150' 201300 000021 MOVEI V,^D17 ;WFW + 002151' 200004 777777 EOUT4: MOVE AC0,-1(SX) + 002152' 260740 004677' PUSHJ PP,SQOZE + 002153' 200340 000000 MOVE C,AC0 + 002154' 260740 010122' PUSHJ PP,OUTBIN + 002155' 254000 002141' JRST EOUT3 + MACRO V.10 PAGE 43 + OUTPUT ROUTINES + + ;OUTPUT THE SYMBOLS + + 002156' 336000 013257' SOUT: SKIPN IONSYM ;SKIP IF NOSYM SEEN + 002157' 606600 000003 TRNN ER,LPTSW!TTYSW ;A LISTING REQUIRED? + 002160' 254000 002314' JRST SOUT1 ;NO + 002161' 201000 014143' MOVEI [ASCIZ /SYMBOL TABLE/] + 002162' 542000 013100' HRRM SUBTTX ;SET NEW SUB-TITLE + 002163' 260740 010417' PUSHJ PP,OUTFF ;FORCE NEW PAGE + 002164' 260740 002166' PUSHJ PP,LOUT1 ;OUTPUT THEM + 002165' 254000 002314' JRST SOUT1 ;NOW FOR BLOCK TYPE 2 + + 002166' 260740 002263' LOUT1: PUSHJ PP,LLUKUP ;SET FOR TABLE SCAN + 002167' 606240 400000 TRNN ARG,SYMF + 002170' 606240 060000 TRNN ARG,MACF!SYNF + 002171' 634540 000013 TDZA MRP,MRP ;SKIP AND CLEAR MRP + 002172' 263740 000000 POPJ PP, ;NO, TRY AGAIN + 002173' 602240 000400 TRNE ARG,INTF + 002174' 201540 000001 MOVEI MRP,1 + 002175' 602240 001000 TRNE ARG,EXTF + 002176' 211540 000001 MOVNI MRP,1 ;MRP=-1 FOR EXTERNAL + 002177' 602240 040000 TRNE ARG,SYNF ;SYNONYM? + 002200' 321540 000446' JUMPL MRP,POPOUT ;YES, DON'T OUTPUT IF EXTERNAL + 002201' 602240 000004 TRNE ARG,SUPRBT ;IF SUPRESSED + ; JUMPGE MRP,POPOUT ;DO NOT OUTPUT UNLESS EXTERNAL + 002202' 263740 000000 POPJ PP, ;DO NOT OUTPUT + 002203' 350017 000000 AOS (PP) ;SET FOR SKIP RETURN IF SYMBOL IS PRINTED + 002204' 325540 002211' JUMPGE MRP,LOUT10 ;BRANCH IF NOT EXTERNAL + 002205' 554440 000006 HLRZ RC,V ;PUT POINTER/FLAGS IN RC + 002206' 602440 777776 TRNE RC,-2 ;POINTER? + 002207' 204451 000000 MOVS RC,0(RC) ;YES + 002210' 500300 000011 HLL V,RC ;STORE LEFT VALUE + + 002211' 261740 000011 LOUT10: PUSH PP,RC ;SAVE FOR LATER + 002212' 260740 003010' PUSHJ PP,OUTSYM ;OUTPUT THE NAME + 002213' 200457 000000 MOVE RC,(PP) ;GET COPY + 002214' 201040 000000 MOVEI AC1,0 + 002215' 323540 002222' JUMPLE MRP,LOUT15 ;SET DEFFERRED BITS IF EXTERNAL + 002216' 603440 777776 TLNE RC,-2 ;CHECK FOR LEFT FIXUP + 002217' 435040 000040 IORI AC1,40 ;AND SET BITS + 002220' 602440 777776 TRNE RC,-2 ;CHECK FOR RIGHT FIXUP + 002221' 435040 000020 IORI AC1,20 ;AND SET BITS + 002222' 603440 777776 LOUT15: TLNE RC,-2 ;FIX RELOC AS 0 IF EXTERNAL + 002223' 553000 000011 HRRZS RC + 002224' 602440 777776 TRNE RC,-2 + 002225' 513000 000011 HLLZS RC + 002226' 623440 777777 TLZE RC,-1 + 002227' 660440 000002 TRO RC,2 + 002230' 504540 000011 HRL MRP,RC + 002231' 201440 000000 MOVEI RC,0 + 002232' 602240 000200 TRNE ARG,ENTF ;ENTRY DMN + 002233' 541540 777773 HRRI MRP,-5 + 002234' 602240 100000 TRNE ARG,NOOUTF ;SUPRESS OUTPUT? WFW + 002235' 271540 000003 ADDI MRP,3 ;YES WFW + MACRO V.10 PAGE 43-1 + OUTPUT ROUTINES + + 002236' 602240 002000 TRNE ARG,UNDF ;UNDEFINED IS EXTERNAL + 002237' 541540 000002 HRRI MRP,2 ;SO FLAG AS UXT + 002240' 434053 002427' IOR AC1,SOUTC(MRP) + 002241' 200240 000001 MOVE ARG,AC1 + 002242' 202000 013101' MOVEM AC0,SVSYM ;SAVE IT + 002243' 200000 000006 MOVE AC0,V ;GET THE VALUE + 002244' 554440 000013 HLRZ RC,MRP ;AND THE RELOCATION + 002245' 520400 000006 HLLO CS,V + 002246' 602440 000002 TRNE RC,2 ;LEFT HALF RELOCATABLE? + 002247' 624400 000001 TRZA CS,1 ;NO, FLAG AND PRINT + 002250' 603400 777777 TLNE CS,-1 ;IS THE LEFT HALF ZERO? + 002251' 260740 002751' PUSHJ PP,ONC1 ;NO, OUTPUT IT + 002252' 260740 010307' LOUT11: PUSHJ PP,OUTTAB + 002253' 524400 000006 LOUT30: HRLO CS,V + 002254' 630400 000011 TDZ CS,RC ;SET RELOCATION + 002255' 260740 002751' PUSHJ PP,ONC1 + 002256' 260740 010307' PUSHJ PP,OUTTAB + 002257' 262740 000011 POP PP,RC ;GET BACK RELOC AND CHECK EXTERNAL + 002260' 201413 002427' LOUT60: MOVEI CS,SOUTC(MRP) + 002261' 260740 002774' PUSHJ PP,OUTAS0 ;EXT/INT + 002262' 254000 010316' LOUT64: JRST OUTCR ;CARRIAGE RETURN AND TRY FOR ANOTHER + + + MACRO V.10 PAGE 44 + OUTPUT ROUTINES + + SYN IFBLK,SYMBLK ;SOMEWHERE TO STORE THE POINTERS + + 002263' 262740 013040' LLUKUP: POP PP,LOOKX ;INTERCEPT RETURN POP + 002264' 200200 013102' MOVE SX,SYMBOL + 002265' 200144 000000 MOVE SDEL,(SX) + 002266' 271200 000002 ADDI SX,2 ;SKIP COUNT OF SYMBOLS + 002267' 202200 012730' LLUKP2: MOVEM SX,SYMBLK ;STORE SYMBOL POINTER IN TABLE + 002270' 550200 012730' HRRZ SX,SYMBLK + 002271' 254000 002300' JRST LLUKP7 ;ENTER LOOP + + 002272' 202200 012730' LLUKP1: MOVEM SX,SYMBLK ;SAVE IT + 002273' 200004 777777 MOVE AC0,-1(SX) + 002274' 260740 012340' PUSHJ PP,SRCH7 + 002275' 557000 000005 HLRZS ARG + 002276' 260760 013040' PUSHJ PP,@LOOKX + JRST [MOVEM SX,SYMBLK + 002277' 254000 014146' JRST .+1] + 002300' 361140 000446' LLUKP7: SOJL SDEL,POPOUT ;TEST FOR END + 002301' 200200 012730' LLUKP3: MOVE SX,SYMBLK ;GET NEXT POINTER + 002302' 252200 002311' AOBJP SX,LLUKP4 + 002303' 550300 000004 HRRZ V,SX + 002304' 317300 013103' CAMG V,SYMTOP + 002305' 344200 002272' AOJA SX,LLUKP1 + 002306' 260740 002262' LLUKP6: PUSHJ PP,LOUT64 ;RESET SYMCNT + 002307' 322140 000446' JUMPE SDEL,POPOUT ;EXIT IF ALL DONE + 002310' 254000 002301' JRST LLUKP3 + + 002311' 340200 000000 LLUKP4: AOJ SX, + 002312' 202200 012730' MOVEM SX,SYMBLK + 002313' 254000 002301' JRST LLUKP3 + MACRO V.10 PAGE 45 + OUTPUT ROUTINES + + 002314' 260740 003025' SOUT1: PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + 002315' 606240 400000 TRNN ARG,SYMF + 002316' 606240 060000 TRNN ARG,MACF!SYNF + 002317' 634540 000013 TDZA MRP,MRP ;SKIP AND CLEAR MRP + 002320' 263740 000000 POPJ PP, ;NO, TRY AGAIN + 002321' 602240 000400 TRNE ARG,INTF + 002322' 201540 000001 MOVEI MRP,1 + 002323' 602240 001000 TRNE ARG,EXTF + 002324' 211540 000001 MOVNI MRP,1 ;MRP=-1 FOR EXTERNAL + 002325' 602240 040000 TRNE ARG,SYNF ;SYNONYM? + 002326' 321540 000446' JUMPL MRP,POPOUT ;YES, DON'T OUTPUT IF EXTERNAL + 002327' 602240 000004 TRNE ARG,SUPRBT ;IF SUPRESSED + ; JUMPGE MRP,POPOUT ;DO NOT OUTPUT UNLESS EXTERNAL + 002330' 263740 000000 POPJ PP, ;DO NOT OUTPUT + 002331' 325540 002336' JUMPGE MRP,SOUT10 ;BRANCH IF NOT EXTERNAL + 002332' 554440 000006 HLRZ RC,V ;PUT POINTER/FLAGS IN RC + 002333' 602440 777776 TRNE RC,-2 ;POINTER? + 002334' 204451 000000 MOVS RC,0(RC) ;YES + 002335' 500300 000011 HLL V,RC ;STORE LEFT VALUE + + 002336' 261740 000011 SOUT10: PUSH PP,RC ;SAVE FOR LATER + 002337' 201040 000000 MOVEI AC1,0 + 002340' 323540 002345' JUMPLE MRP,SOUT15 ;SET DEFFERRED BITS IF EXTERNAL + 002341' 603440 777776 TLNE RC,-2 ;CHECK FOR LEFT FIXUP + 002342' 435040 000040 IORI AC1,40 ;AND SET BITS + 002343' 602440 777776 TRNE RC,-2 ;CHECK FOR RIGHT FIXUP + 002344' 435040 000020 IORI AC1,20 ;AND SET BITS + 002345' 603440 777776 SOUT15: TLNE RC,-2 ;FIX RELOC AS 0 IF EXTERNAL + 002346' 553000 000011 HRRZS RC + 002347' 602440 777776 TRNE RC,-2 + 002350' 513000 000011 HLLZS RC + 002351' 623440 777777 TLZE RC,-1 + 002352' 660440 000002 TRO RC,2 + 002353' 504540 000011 HRL MRP,RC + 002354' 201440 000000 MOVEI RC,0 + 002355' 602240 000200 TRNE ARG,ENTF ;ENTRY DMN + 002356' 541540 777773 HRRI MRP,-5 + 002357' 602240 100000 TRNE ARG,NOOUTF ;SUPRESS OUTPUT? WFW + 002360' 271540 000003 ADDI MRP,3 ;YES WFW + 002361' 434053 002427' IOR AC1,SOUTC(MRP) + 002362' 200240 000001 MOVE ARG,AC1 + 002363' 260740 002624' PUSHJ PP,NOUT2 ;SQUOZE AND DUMP THE SYMBOL + 002364' 202000 013101' MOVEM AC0,SVSYM ;SAVE IT + 002365' 200000 000006 MOVE AC0,V ;GET THE VALUE + 002366' 554440 000013 HLRZ RC,MRP ;AND THE RELOCATION + 002367' 260740 002640' PUSHJ PP,COUT + 002370' 262740 000011 POP PP,RC ;GET BACK RELOC AND CHECK EXTERNAL + 002371' 606440 777776 TRNN RC,-2 ;IS IT? + 002372' 254000 002404' JRST SOUT50 ;NO + 002373' 200011 000001 MOVE AC0,1(RC) ;GET NAME + 002374' 201240 000060 MOVEI ARG,60 ;EXTERNAL REQ + 002375' 260740 004677' PUSHJ PP,SQOZE + 002376' 513000 000011 HLLZS RC ;NO RELOC + MACRO V.10 PAGE 45-1 + OUTPUT ROUTINES + + 002377' 260740 002640' PUSHJ PP,COUT ;OUTPUT IT + 002400' 200000 013101' MOVE AC0,SVSYM ;GET SYMBOL NAME + 002401' 661000 500000 TLO AC0,500000 ;SET AS ADDITIVE SYMBOL + 002402' 621000 200000 TLZ AC0,200000 ;BUT NOT LEFT HALF ETC + 002403' 260740 002640' PUSHJ PP,COUT + 002404' 207000 000011 SOUT50: MOVSS RC ;CHECK LEFT HALF + 002405' 606440 777776 TRNN RC,-2 + 002406' 254000 002417' JRST SOUT60 + 002407' 200011 000001 MOVE AC0,1(RC) + 002410' 201240 000060 MOVEI ARG,60 + 002411' 260740 004677' PUSHJ PP,SQOZE + 002412' 201440 000000 MOVEI RC,0 + 002413' 260740 002640' PUSHJ PP,COUT + 002414' 200000 013101' MOVE AC0,SVSYM + 002415' 661000 700000 TLO AC0,700000 + 002416' 260740 002640' PUSHJ PP,COUT + 002417' 263740 000000 SOUT60: POPJ PP, + + 002420' 260740 002774' SOUT20: PUSHJ PP,OUTAS0 + 002421' 254000 010316' JRST OUTCR + + 002422' 426352 400004 <ASCII /ENT/>!04 ;DMN + 002423' 000000 000000 Z + 002424' 000000 000000 Z + 002425' 516131 600044 <ASCII /SEN/>!44 ;SUPRESSED ENTRY + 002426' 426612 400060 <ASCII /EXT/>!60 + 002427' 000000 000010 SOUTC: EXP 10 + 002430' 446352 400004 <ASCII /INT/>!04 + 002431' 526612 400060 <ASCII /UXT/>!60 ;UNDEFINED EXTERNAL + 002432' 516410 400050 <ASCII /SPD/>!50 + 002433' 516231 600044 <ASCII /SIN/>!44 ;DMN + MACRO V.10 PAGE 46 + OUTPUT ROUTINES + + ;OUTPUT THE BINARY + + 002434' 524400 013326' BOUT: HRLO CS,LOCO ;PICKUP THE LOCATION + 002435' 260740 002747' PUSHJ PP,ONC ;OUTPUT IT TO THE LISTING FILE + 002436' 201340 000047 MOVEI C,"'" + 002437' 332000 013334' SKIPE MODO ;IF MODE IS NOT ABSOLUTE + 002440' 260740 010377' PUSHJ PP,OUTC ;PRINT A SINGLE QUOTE + 002441' 260740 002712' PUSHJ PP,DSTOW ;GET THE CODE + 002442' 261740 000011 PUSH PP,RC ;SAVE RELOC + 002443' 261740 000011 PUSH PP,RC ;AND AGAIN + 002444' 603440 777776 TLNE RC,-2 ;CHECK LEFT EXTERNAL + 002445' 553000 000011 HRRZS RC ;MAKE LEFT NON-RELOC + 002446' 606440 777776 TRNN RC,-2 ;RIGHT EXT? + 002447' 254000 002470' JRST BOUT30 ;NO + 002450' 550040 000000 HRRZ AC1,AC0 ;YES + 002451' 322040 002454' JUMPE AC1,BOUT20 ;PROCESS IF ZERO CODE THERE + 002452' 513000 000011 HLLZS RC ;MAKE NON-RELOC + 002453' 254000 002470' JRST BOUT30 ;PROCESS + + MACRO V.10 PAGE 47 + OUTPUT ROUTINES + + 002454' BOUT20: + 002454' 542057 777777 HRRM AC1,-1(PP) ;FIX RC IN STACK SO NO CONFUSION WFW (AC1 HAS 0) + 002455' 540011 000000 HRR AC0,0(RC) ;NO, SET ADDRESS LINK + 002456' 200040 013326' MOVE AC1,LOCO ;GET CURRENT LOCATION + 002457' 542051 000000 HRRM AC1,0(RC) ;SET NEW LINK + 002460' 554051 000000 HLRZ AC1,0(RC) ;GET FLAGS/POINTER + 002461' 606040 777776 TRNN AC1,-2 ;POINTER? + 002462' 540040 000011 HRR AC1,RC ;NO, SET TO FLAGS + 002463' 544441 000000 HLR RC,0(AC1) ;PUT FLAGS IN RC + 002464' 504040 013334' HRL AC1,MODO ;GET CURRENT MODE + 002465' 622440 777776 TRZE RC,-2 ;LEFT HALF RELOCATABLE+ + 002466' 661040 000002 TLO AC1,2 ;YES, SET FLAG + 002467' 502041 000000 HLLM AC1,0(AC1) ;STORE NEW FLAGS + 002470' 520400 000000 BOUT30: HLLO CS,AC0 + 002471' 623440 000001 TLZE RC,1 ;PACK RELOCATION BITS + 002472' 660440 000002 TRO RC,2 + 002473' 602440 000002 TRNE RC,2 ;LEFT HALF RELOCATABLE? + 002474' 620400 000001 TRZ CS,1 ;YES, RESET BIT + 002475' 261740 000000 PUSH PP,AC0 ;NEED AN AC + 002476' 554017 777777 HLRZ AC0,-1(PP) ;AC0 = LEFT RELOCATION + 002477' 303000 000001 CAILE AC0,1 ;EXTERNAL? + 002500' 431400 001001 XORI CS,EXTF!1 ;YES, SET SWITCH + MACRO V.10 PAGE 48 + OUTPUT ROUTINES + + 002501' 262740 000000 POP PP,AC0 ;RESTORE + 002502' 260740 002747' PUSHJ PP,ONC + 002503' 524400 000000 HRLO CS,AC0 + 002504' 630400 000011 TDZ CS,RC ;SET RELOCATION + 002505' 550357 000000 HRRZ C,(PP) ;C = RIGHT RELOCATION + 002506' 303340 000001 CAILE C,1 ;EXTERNAL + 002507' 431400 001001 XORI CS,EXTF!1 ;YES, SET SWITCH + 002510' 260740 002747' PUSHJ PP,ONC + 002511' 262740 000010 BOUT3I: POP PP,CS ;GET RID OF ENTRY ON STACK + 002512' 550400 013326' HRRZ CS,LOCO + 002513' 603640 004500 TLNE FR,RIMSW!RIM1SW!R1BSW ;RIM OUTPUT? + 002514' 254000 010076' JRST ROUT ;YES, GO PROCESS + + 002515' 504400 013334' HRL CS,MODO + 002516' 312400 013333' CAME CS,MODLOC ;SEQUENCE OR RELOCATION BREAK? + 002517' 260740 002645' PUSHJ PP,COUTD ;YES, DUMP THE BUFFER + 002520' 331000 012700' SKIPL COUTX ;NEW BUFFER? + 002521' 254000 002530' JRST BOUT40 ;NO, STORE CODE AND EXIT + 002522' 202400 013333' MOVEM CS,MODLOC ;YES, STORE NEW VALUES + 002523' 250000 013326' EXCH AC0,LOCO + 002524' 250440 013334' EXCH RC,MODO + 002525' 260740 002640' PUSHJ PP,COUT ;STORE BLOCK LOCATION AND MODE + 002526' 250440 013334' EXCH RC,MODO ;RESTORE CURRENT VALUES + 002527' 250000 013326' EXCH AC0,LOCO + + MACRO V.10 PAGE 49 + OUTPUT ROUTINES + + 002530' 260740 002640' BOUT40: PUSHJ PP,COUT ;EMIT CODE + 002531' 262740 000011 POP PP,RC ;RETRIEVE EXTERNAL BITS + 002532' 606440 777776 TRNN RC,-2 ;RIGHT EXTERNAL? + 002533' 254000 002555' JRST BOUT50 ;TRY FOR LEFT + 002534' 260740 002645' PUSHJ PP,COUTD + 002535' 261740 012677' PUSH PP,BLKTYP ;TERMINATE TYPE AND SAVE + 002536' 201000 000002 MOVEI AC0,2 ;BLOCK TYPE 2 + 002537' 202000 012677' MOVEM AC0,BLKTYP + 002540' 200011 000001 MOVE AC0,1(RC) ;GET SYMBOL + 002541' 201240 000060 MOVEI ARG,60 ;CODE BITS + 002542' 260740 004677' PUSHJ PP,SQOZE ;CONVERT TO RADIX 50 + 002543' 513000 000011 HLLZS RC ;SYMBOL HAS NO RELOCATION + 002544' 260740 002640' PUSHJ PP,COUT ;EMIT + 002545' 200000 013326' MOVE AC0,LOCO ;GET CURRENT LOC + 002546' 505000 400000 HRLI AC0,400000 ;ADDITIVE REQ + 002547' 540440 013334' HRR RC,MODO ;CURRENT MODE + 002550' 260740 002640' PUSHJ PP,COUT ;EMIT + 002551' 207000 000011 MOVSS RC ;NOW FOR LEFT + 002552' 606440 777776 TRNN RC,-2 + 002553' 254000 002575' JRST BOUT60 + 002554' 254000 002564' JRST BOUT70 + 002555' 207000 000011 BOUT50: MOVSS RC ;CHECK OTHER HALF + 002556' 606440 777776 TRNN RC,-2 ;LEFT HALF EXTERNAL? + 002557' 254000 002577' JRST BOUT80 ;NO, FALSE ALARM + 002560' 260740 002645' PUSHJ PP,COUTD ;CHANGE MODE + 002561' 261740 012677' PUSH PP,BLKTYP + 002562' 201000 000002 MOVEI AC0,2 + 002563' 202000 012677' MOVEM AC0,BLKTYP + 002564' 200011 000001 BOUT70: MOVE AC0,1(RC) + 002565' 201240 000060 MOVEI ARG,60 + 002566' 260740 004677' PUSHJ PP,SQOZE + 002567' 513000 000011 HLLZS RC + 002570' 260740 002640' PUSHJ PP,COUT + 002571' 200000 013326' MOVE AC0,LOCO + 002572' 505000 600000 HRLI AC0,600000 ;LEFT HALF ADD + 002573' 540440 013334' HRR RC,MODO + 002574' 260740 002640' PUSHJ PP,COUT ;EMIT + 002575' 260740 002645' BOUT60: PUSHJ PP,COUTD ;CHANGE MODE + 002576' 262740 012677' POP PP,BLKTYP ;TO OLD ONE + 002577' 350000 013326' BOUT80: AOS LOCO + 002600' 350000 013333' AOS MODLOC + 002601' 263740 000000 POPJ PP, + + MACRO V.10 PAGE 50 + OUTPUT ROUTINES + + 002602' 200300 014150' NOUT: MOVE V,[POINT 7,TBUF] ;POINTER TO ASCII LINE + 002603' 205400 440600 MOVSI CS,(POINT 6,AC0) ;POINTER TO SIXBIT AC0 + 002604' 403240 000000 SETZB ARG,AC0 + 002605' 134340 000006 NOUT1: ILDB C,V ;GET ASCII + 002606' 301340 000141 CAIL C,"A"+40 + 002607' 303340 000172 CAILE C,"Z"+40 + 002610' 254000 002612' JRST .+2 + 002611' 624340 000100 TRZA C,100 ;LOWER CASE TO SIXBIT + 002612' 275340 000040 SUBI C,40 ;CONVERT TO SIXBIT + 002613' 323340 002621' JUMPLE C,NOUT3 ;TEST FORM NON-SIXBIT + 002614' 303340 000077 CAILE C,77 ;AND NOT GREATER THAN SIXBIT + 002615' 254000 002621' JRST NOUT3 ;... + 002616' 136340 000010 IDPB C,CS ;DEPOSIT IN AC0 + 002617' 603400 770000 TLNE CS,770000 ;TEST FOR SIX CHARACTERS + 002620' 254000 002605' JRST NOUT1 ;NO, GET ANOTHER + 002621' NOUT3: + IFN UNIVR,<SKIPGE UNIVSN ;IF A UNIVERSAL PROG> + 002621' 263740 000000 POPJ PP, ;RETURN TO PUT IT IN THE TABLE + + 002622' 607600 000002 IFN CCLSW,< TLNN IO,IOTLSN ;AND IF WE HAVE NOT SEEN A TITLE + 002623' 260740 004235' PUSHJ PP,PRNAM ;THEN PRINT THE NAME> + 002624' 260740 004677' NOUT2: PUSHJ PP,SQOZE ;CONVERT TO SIXBIT + 002625' 254000 002640' JRST COUT ;DUMP AND EXIT + + 002626' HOUT: + 002626' 201440 000001 MOVEI RC,1 ;RELOCATABLE + IFN RENTSW,< + MOVE AC0,HHIGH ;GET HIGH SEG IF TWO SEGMENTS + JUMPE AC0,.+2 ;NOT TWO SEGMENTS + PUSHJ PP,COUT ;OUTPUT IT > + 002627' 200000 013263' MOVE AC0,HIGH + IFN RENTSW,< + SKIPE HHIGH ;ANY TWOSEG HIGH STUFF + JRST COUT ;YES,SO NO ABS.> + 002630' 260740 002640' PUSHJ PP,COUT ;OUTPUT THE HIGHEST LOCATION + 002631' 200000 013262' MOVE AC0,ABSHI + ;PUT OUT ABS PORTION OF PROGRAM BREAK + 002632' 364440 002640' SOJA RC,COUT ;OUTPUT A WORD OF ZERO AND EXIT + + MACRO V.10 PAGE 51 + OUTPUT ROUTINES + + IFN RENTSW,< + HSOUT: SETZM HISNSW ;CLEAR FOR PASS2 + MOVE AC0,SVTYP3 ;GET HISEG ARG + JUMPGE AC0,.+4 ;JUMP IF ONLY HISEG + HRL AC0,HIGH1 ;GET BREAK FROM PASS 1 + JUMPL AC0,.+2 ;OK IF GREATER THAN 400000 + HRLS AC0 ;SIGNAL TWO SEGMENT TO LOADER + MOVEI RC,1 ;ASSUME RELOCATABLE + JRST COUT ;OUTPUT THE WORD> + + 002633' 336440 013400' VOUT: SKIPN RC,VECREL ;IS VECTOR ABSOLUTE ZERO? + 002634' 332000 013401' SKIPE VECTOR ;ALSO CHECK RELOCATION + 002635' 254000 002637' JRST .+2 + 002636' 263740 000000 POPJ PP, ;YES, EXIT + 002637' 200000 013401' MOVE AC0,VECTOR ;AC0 SHOULD BE FLAGS + + 002640' 350340 012700' COUT: AOS C,COUTX ;INCREMENT INDEX + 002641' 202007 012704' MOVEM AC0,COUTDB(C) ;STORE CODE + 002642' 136440 012702' IDPB RC,COUTP ;STORE RELOCATION BITS + 002643' 302340 000021 CAIE C,^D17 ;IS THE BUFFER FULL? + 002644' 263740 000000 POPJ PP, ;NO, EXIT + + 002645' 357340 012700' COUTD: AOSG C,COUTX ;DUMP THE BUFFER + 002646' 254000 002657' JRST COUTI ;BUFFER WAS EMPTY + 002647' 504340 012677' HRL C,BLKTYP ;SET BLOCK TYPE + 002650' 260740 010122' PUSHJ PP,OUTBIN ;OUTPUT COUNT AND TYPE + 002651' 477340 012701' SETOB C,COUTY ;INITIALIZE INDEX + + 002652' 200347 012704' COUTD2: MOVE C,COUTDB(C) ;GET RELOCATION BITS/CODE + 002653' 260740 010122' PUSHJ PP,OUTBIN ;DUMP IT + 002654' 350340 012701' AOS C,COUTY ;INCREMENT INDEX + 002655' 315340 012700' CAMGE C,COUTX ;TEST FOR END + 002656' 254000 002652' JRST COUTD2 ;NO, GET NEXT WORD + + 002657' 476000 012700' COUTI: SETOM COUTX ;INITIALIZE BUFFER INDEX + 002660' 402000 012703' SETZM COUTRB ;ZERO RELOCATION BITS + 002661' 200340 014151' MOVE C,[POINT 2,COUTRB] + 002662' 202340 012702' MOVEM C,COUTP ;INITIALIZE BIT POINTER + 002663' 263740 000000 POPJ PP, ;EXIT + MACRO V.10 PAGE 52 + OUTPUT ROUTINES + + 002664' STOWZ1: + 002664' 201440 000000 STOWZ: MOVEI RC,0 + 002665' STOW: + 002665' 321640 002677' JUMP1 STOW20 ;SKIP TEST IF PASS ONE + 002666' 602440 777776 TRNE RC,-2 ;RIGHT HALF ZERO OR 1? + 002667' 260740 002735' PUSHJ PP,STOWT ;NO, HANDLE EXTERNAL + 002670' 607440 777776 TLNN RC,-2 ;LEFT HALF ZERO OR 1? WFW + 002671' 254000 002675' JRST STOW10 ;YES, SKIP TEST + 002672' 207000 000011 MOVSS RC ;SWAP HALVES + 002673' 260740 002742' PUSHJ PP,STOWT1 ;HANDLE EXTERNAL WFW + 002674' 207000 000011 MOVSS RC ;RESTORE VALUES + + 002675' 332000 013270' STOW10: SKIPE EXTPNT ;ANY EXTERNALS REMAINING? + 002676' 660600 000040 TRO ER,ERRE ;YES, SET EXTERNAL ERROR FLAG + + 002677' 350040 013104' STOW20: AOS AC1,STPX ;INCREMENT POINTER + 002700' 202001 013106' MOVEM AC0,STCODE(AC1) ;STOW CODE + 002701' 202441 013156' MOVEM RC,STOWRC(AC1) ;STOW RELOCATION BITS + 002702' 336000 013321' SKIPN LITLVL ;ARE WE IN LITERAL? + 002703' 350000 013325' AOS LOCA ;NO, INCREMENT ASSEMBLY LOCATION + 002704' 305040 000047 CAIGE AC1,.STP-1 ;OVERFLOW? + 002705' 263740 000000 POPJ PP, ;NO, EXIT + + 002706' 332000 013321' SKIPE LITLVL ;ARE WE IN A LITERAL? + 002707' 664600 010000 TROA ER,ERRL ;YES, FLAG ERROR BUT DON'T DUMP + 002710' 254000 001444' JRST CHARL1 ;NO, SAVE REGISTERS AND DUMP THE BUFFER + 002711' 254000 002717' JRST STOWI ;INITIALIZE BUFFER + + 002712' 350040 013105' DSTOW: AOS AC1,STPY ;INCREMENT POINTER + 002713' 200001 013106' MOVE AC0,STCODE(AC1) ;FETCH CODE + 002714' 200441 013156' MOVE RC,STOWRC(AC1) ;FETCH RELOCATION BITS + 002715' 315040 013104' CAMGE AC1,STPX ;IS THIS THE END? + 002716' 263740 000000 POPJ PP, ;NO, EXIT + + 002717' 476000 013104' STOWI: SETOM STPX ;INITIALIZE FOR INPUT + 002720' 476000 013105' SETOM STPY ;INITIALIZE FOR OUTPUT + 002721' 402000 013270' SETZM EXTPNT + 002722' 263740 000000 POPJ PP, ;EXIT + MACRO V.10 PAGE 53 + OUTPUT ROUTINES + + 002723' 350000 013321' SVSTOW: AOS LITLVL ;NESTED LITERALS + 002724' 261740 013104' PUSH PP,STPX ;MAKE ROOM FOR ANOTHER + 002725' 261740 013105' PUSH PP,STPY + 002726' 200040 013104' MOVE AC1,STPX + 002727' 202040 013105' MOVEM AC1,STPY + 002730' 254002 000000 JRST 0(AC2) + + 002731' 262740 013105' GTSTOW: POP PP,STPY ;BACK UP A LEVEL + 002732' 262740 013104' POP PP,STPX + 002733' 370000 013321' SOS LITLVL + 002734' 254002 000000 JRST 0(AC2) + + ;EXTERNAL RIGHT + 002735' 550040 013270' STOWT: HRRZ AC1,EXTPNT ;GET RIGHT POINTER + 002736' 302051 000000 CAIE AC1,(RC) ;DOES IT MATCH + 002737' 260740 003752' PUSHJ PP,QEXT ;EXTERNAL OR RELOCATION ERROR + 002740' 513000 013270' HLLZS EXTPNT + 002741' 263740 000000 POPJ PP, ;EXIT + + ;EXTERNAL LEFT + 002742' 554040 013270' STOWT1: HLRZ AC1,EXTPNT ;GET LEFT HALF + 002743' 302051 000000 CAIE AC1,(RC) ;SEE ABOVE + 002744' 260740 003752' PUSHJ PP,QEXT + 002745' 553000 013270' HRRZS EXTPNT + 002746' 263740 000000 POPJ PP, ;EXIT + MACRO V.10 PAGE 54 + OUTPUT ROUTINES + + 002747' 134340 013226' ONC: ILDB C,TABP ;ENTRY TO ADVANCE TAB POINTER + 002750' 260740 010325' PUSHJ PP,OUTL ;OUTPUT A TAB + ;OUTPUT 6 OCT NUMBERS FROM CS LEFT + 002751' 201340 000006 ONC1: MOVEI C,6 ;CONVERT TO ASCII + 002752' 246340 000003 LSHC C,3 ;SHIFT IN OCTAL + 002753' 260740 010325' PUSHJ PP,OUTL ;OUTPUT ASCII FROM C + 002754' 602400 777777 TRNE CS,-1 ;ARE WE THROUGH? + 002755' 254000 002751' JRST ONC1 ;NO, GET ANOTHER + 002756' 201340 000000 MOVEI C,0 ;CLEAR C + 002757' 607400 000001 TLNN CS,1 ;RELOCATABLE? + 002760' 201340 000047 MOVEI C,"'" ;YES + 002761' 607400 001000 TLNN CS,EXTF ;OR EXTERNAL + 002762' 201340 000052 MOVEI C,"*" ;YES + 002763' 326340 010377' ONC2: JUMPN C,OUTC ;OUTPUT IF EXTERN OR RELOCATABLE + 002764' 263740 000000 POPJ PP, ;EXIT + + 002765' 231340 000012 DNC: IDIVI C,^D10 + 002766' 506417 000000 HRLM CS,0(PP) + 002767' 322340 002771' JUMPE C,.+2 + 002770' 260740 002765' PUSHJ PP,DNC ;RECURSE IF NON-ZERO + 002771' 554357 000000 HLRZ C,0(PP) + 002772' 271340 000060 ADDI C,"0" ;FORM ASCII + 002773' 254000 010310' JRST PRINT ;DUMP AND TEST FOR END + + 002774' 505400 440700 OUTAS0: HRLI CS,(POINT 7,,) ;ENTRY TO SET POINTER + 002775' 134340 000010 OUTASC: ILDB C,CS ;GET NEXT BYTE + 002776' 322340 000446' JUMPE C,POPOUT ;EXIT ON ZERO DELIMITER + 002777' 260740 010310' PUSHJ PP,PRINT + 003000' 254000 002775' JRST OUTASC + + 003001' 505400 440600 OUTSIX: HRLI CS,(POINT 6,,) ;OUTPUT SIXBIT + 003002' 134340 000010 ILDB C,CS ;GET SIXBIT + 003003' 306340 000040 CAIN C,40 ;"@" DELIMITER? + 003004' 263740 000000 POPJ PP, ;YES, EXIT + 003005' 271340 000040 ADDI C,40 ;NO, FORM ASCII + 003006' 260740 010325' PUSHJ PP,OUTL ;OUTPUT ASCII CHAR FROM C + 003007' 254000 003002' JRST OUTSIX+1 + + 003010' 200400 000000 OUTSYM: MOVE CS,AC0 ;PLACE NAME IN CS + 003011' 201340 000000 OUTSY1: MOVEI C,0 ;CLEAR C + 003012' 246340 000006 LSHC C,6 ;MOVE NEXT SIXBIT CHARACTER IN + 003013' 322340 010307' JUMPE C,OUTTAB ;TEST FOR END + 003014' 271340 000040 ADDI C,40 ;CONVERT TO ASCII + 003015' 260740 010325' PUSHJ PP,OUTL ;OUTPUT + 003016' 254000 003011' JRST OUTSY1 ;LOOP + MACRO V.10 PAGE 55 + OUTPUT ROUTINES + + 003017' 350217 000000 OUTSET: AOS SX,0(PP) ;GET RETURN LOCATION + 003020' 200204 777777 MOVE SX,-1(SX) ;GET XWD CODE + 003021' 546200 012677' HLRM SX,BLKTYP ;SET BLOCK TYPE + 003022' 403240 000011 SETZB ARG,RC + 003023' 260744 000000 PUSHJ PP,0(SX) ;GO TO PRESCRIBED ROUTINE + 003024' 254000 002645' JRST COUTD ;TERMINATE BLOCK AND EXIT + + ;LOOKUP SCANS ALL THE SYMBOLS IN THE SYMBOL TABLE + + 003025' 262740 013040' LOOKUP: POP PP,LOOKX ;INTERCEPT RETURN POP + 003026' 200200 013102' MOVE SX,SYMBOL + 003027' 200144 000000 MOVE SDEL,0(SX) ;SET FOR TABLE SCAN + 003030' 361140 000446' LOOKL: SOJL SDEL,POPOUT ;TEST FOR END + 003031' 271200 000002 ADDI SX,2 + 003032' 200004 777777 MOVE AC0,-1(SX) + 003033' 260740 012340' PUSHJ PP,SRCH7 ;LOAD REGISTERS + 003034' 557000 000005 HLRZS ARG + 003035' 260760 013040' PUSHJ PP,@LOOKX ;RETURN TO CALLING ROUTINE + 003036' 254000 003030' JRST LOOKL ;TRY AGAIN + MACRO V.10 PAGE 56 + OUTPUT ROUTINES + + 003037' 260740 001057' END0: PUSHJ PP,EVALCM ;GET A WORD + 003040' 332000 013270' SKIPE EXTPNT ;ANY EXTERNALS? + 003041' 660600 000040 TRO ER,ERRE ;YES, ERROR + 003042' 336300 000000 SKIPN V,AC0 ;NON-ZERO? + 003043' 322440 003045' JUMPE RC,.+2 ;OR RELOC? + 003044' 260740 004027' PUSHJ PP,ASSIG7 ;YES, LIST THE VALUE + 003045' 202000 013401' MOVEM AC0,VECTOR + 003046' 202440 013400' MOVEM RC,VECREL + 003047' 260740 003462' PUSHJ PP,VARA ;FILL OUT SELF-DEFINED VARIABLES + 003050' 260740 000227' PUSHJ PP,STOUTS ;DUMP THE LINE + ; PUSH PP,IO ;SAVE FLAGS + ; TLO IO,IOPROG ;XLIST LITS + 003051' 260740 003367' PUSHJ PP,LIT1 + ; POP PP,IO ;GET FLAG BACK + 003052' 325640 003127' JUMP2 ENDP2 + + 003053' 260740 002065' PUSHJ PP,UOUT + 003054' 607600 000010 TLNN IO,MFLSW ;SKIP IF ONLY PSEND + 003055' 260740 007155' PUSHJ PP,REC2 + 003056' 200000 012673' MOVE INDIR ;SET UP FIRST AS LAST + 003057' 202000 012537' MOVEM LSTFIL ;PRINTED + 003060' 402000 013416' SETZM LSTPGN + 003061' 260740 003267' PUSHJ PP,INZ + 003062' 603600 000010 TLNE IO,MFLSW ;IF PSEND + 003063' 263740 000000 POPJ PP, ;BACK TO PSEND0 + 003064' 332000 013260' SKIPE PRGPTR ;HAVE ANY PRGEND'S BEEN SEEN + 003065' 254000 004730' JRST PSEND3 ;YES,GO SET UP AGAIN + + 003066' 402000 013266' PASS20: SETZM CTLSAV + 003067' 260740 002657' PUSHJ PP,COUTI + 003070' 260740 002121' PUSHJ PP,EOUT ;OUTPUT THE ENTRIES + 003071' 260740 003017' PUSHJ PP,OUTSET + 003072' 000006 002602' XWD 6,NOUT ;OUTPUT THE NAME (BLKTYP-6) + IFN RENTSW,< + SKIPN HISNSW ;PUT OUT BLOCK TYPE 3? + JRST PASS21 ;NO + PUSHJ PP,OUTSET + XWD 3,HSOUT ;OUTPUT THE HISEG BLOCK + PASS21: > + 003073' 201000 000001 MOVEI 1 + 003074' 542000 012677' HRRM BLKTYP ;SET FOR TYPE 1 BLOCK + 003075' 621640 400000 TLZ FR,P1 ;SET FOR PASS 2 AND TURN OFF FLAG + 003076' 661600 004000 TLO IO,IOPALL ;PUT THESE BACK + 003077' 621600 040440 TLZ IO,IOPROG!IOCREF!DEFCRS ;SO LISTINGS WILL BE THE WAY THEY SHOULD + 003100' 607640 004000 TLNN FR,R1BSW + 003101' 254000 002717' JRST STOWI + + 003102' 200400 014152' MOVE CS,[XWD $ST-1-$CKSM,R1BLDR] + 003103' 200350 000000 MOVE C,0(CS) + 003104' 260740 010123' PUSHJ PP,PTPBIN + 003105' 253400 003103' AOBJN CS,.-2 + 003106' 260740 010203' PUSHJ PP,R1BI + 003107' 254000 002717' JRST STOWI + MACRO V.10 PAGE 57 + OUTPUT ROUTINES + + + 003110' R1BLDR: + 000000 PHASE 0 + 003110' 777762 000000 IOWD $ADR,$ST + 003111' 710600 000060 $ST: CONO PTR,60 + 003112' 541400 000004 HRRI $A,$RD+1 + 003113' 710740 000010 $RD: CONSO PTR,10 + 003114' 254000 000003 JRST .-1 + 003115' 710470 000007 DATAI PTR,@$TBL1-$RD+1($A) + 003116' 256010 000007 XCT $TBL1-$RD+1($A) + 003117' 256010 000012 XCT $TBL2-$RD+1($A) + 003120' 364400 000000 $A: SOJA $A, + 003121' 312740 000016 $TBL1: CAME $CKSM,$ADR + 003122' 270756 000001 ADD $CKSM,1($ADR) + 003123' 331740 000016 SKIPL $CKSM,$ADR + 003124' 254200 000001 $TBL2: JRST 4,$ST + 003125' 253700 000003 AOBJN $ADR,$RD + 003126' 254000 000002 $ADR: JRST $ST+1 + 000017 $CKSM: + 003127' DEPHASE + + IF2,< PURGE $ST,$RD,$A,$TBL1,$TBL2,$ADR,$CKSM> + MACRO V.10 PAGE 58 + OUTPUT ROUTINES + + 003127' 260740 002645' ENDP2: PUSHJ PP,COUTD ;DUMP THE BUFFER + 003130' 200000 013326' MOVE AC0,LOCO ;CHECK TO SEE IF LIT DIFFERED + 003131' 336000 013334' SKIPN MODO ;AND USE SMALLER SINCE AT END + JRST [CAMN AC0,ABSHI + HRRZM AC2,ABSHI + 003132' 254000 014153' JRST ENDP2W] + IFN RENTSW,<SKIPE HHIGH ;SKIP IF NOT TWO SEGMENTS + JRST [CAMN AC0,HHIGH + HRRZM AC2,HHIGH + JRST ENDP2W]> + 003133' 316000 013263' CAMN AC0,HIGH + 003134' 552100 013263' HRRZM AC2,HIGH + 003135' ENDP2W: + 003135' 603600 000400 REPEAT 1,<TLNE IO,IOCREF ;CLOSE CREF IF NECESSARY> + REPEAT 0,<TLNE FR,CREFSW ;IF CREFFING + JRST ENDP2Q + MOVEI SDEL,0 + PUSH PP,DBUF+3 ;SO NO PAGE INFO + DPB SDEL,[POINT 7,DBUF+3,13] + IOR ER,OUTSW ;MAKE SURE OF OUTPUT + PUSHJ PP,CREF + MOVEI C,20 ;CODE FOR TITLE + PUSHJ PP,OUTLST + PUSH PP,IO ;SAVE THIS + TLZ IO,IOPAGE ;AND PREVENT PAGE DURING TITLE + MOVEI CS,TBUF + PUSHJ PP,OUTAS0 + MOVEI CS,VBUF + PUSHJ PP,OUTAS0 + POP PP,IO ;RESTORE THE IO WORD + POP PP,DBUF+3 > ;NEEDS FIX TO CREF + 003136' 260740 012276' PUSHJ PP,CLSCR2 ;CLOSE IT UP + 003137' 540600 013042' ENDP2Q: HRR ER,OUTSW ;SET OUTPUT SWITCH + 003140' 336000 013256' SKIPN TYPERR + 003141' 660600 000001 TRO ER,TTYSW + 003142' 260740 002065' PUSHJ PP,UOUT ;OUTPUT UNDEFINEDS + 003143' 660600 000001 TRO ER,TTYSW + 003144' 000000 000007 SKPINC C ;SEE IF WE CAN INPUT A CHAR. + 003145' 255000 000000 JFCL ;BUT ONLY TO DEFEAT ^O + 003146' 337340 012726' SKIPG C,ERRCNT ;GET ERROR COUNT AND CHECK FOR POSITIVE + 003147' 254000 003165' JRST NOERW ;PRINT NO ERROR MESSAGE + 003150' 272340 000000* IFN CCLSW,<ADDM C,JOBERR ;REMEMBER ERROR COUNT FOR EXECUTION DELETION> + 003151' 260740 010316' PUSHJ PP,OUTCR + 003152' 200340 012726' MOVE C,ERRCNT + 003153' 306340 000001 CAIN C,1 ;1 IS A SPECIAL CASE + 003154' 254000 003162' JRST ONERW ;PRINT MESSAGE + 003155' 201340 000077 MOVEI C,"?" ;? FOR BATCH + 003156' 260740 010325' PUSHJ PP,OUTL ;... + 003157' 200340 012726' MOVE C,ERRCNT ;PRINT NUMBER OF ERRORS + 003160' 260740 002765' PUSHJ PP,DNC + 003161' 334400 014156' SKIPA CS,[EXP ERRMS1] ;LOAD TO PRINT + 003162' 201400 007671' ONERW: MOVEI CS,ERRMS2 ;ONE ERROR DETECTED + 003163' 260740 003001' ONERW1: PUSHJ PP,OUTSIX ;PRINT + MACRO V.10 PAGE 58-1 + OUTPUT ROUTINES + + 003164' 254000 003173' JRST ENDP2A + 003165' 201400 007674' NOERW: MOVEI CS,ERRMS3 + 003166' 603600 001010 IFN CCLSW,<TLNE IO,CRPGSW!MFLSW ;IF RPG, DON'T PRINT MESSAGE> + IFE CCLSW,<TLNE IO,MFLSW ;NOR IF MULTI-FILE MODE> + 003167' 620600 000001 TRZ ER,TTYSW ;NO TTY OUTPUT + 003170' 434600 013042' IOR ER,OUTSW ;UNLESS NEEDED FOR LISTING + 003171' 260740 010316' PUSHJ PP,OUTCR + 003172' 254000 003163' JRST ONERW1 + + MACRO V.10 PAGE 59 + OUTPUT ROUTINES + + 003173' 260740 010316' ENDP2A: PUSHJ PP,OUTCR + 003174' 607600 000010 TLNN IO,MFLSW ;IN A MULTI-PROG FILE? + 003175' 254000 003201' JRST ENDP2D ;NO + 003176' 332000 012726' SKIPE ERRCNT ;ANY ERROR? + PUSHJ PP,[MOVEI CS,[ASCIZ /PROGRAM /] + PUSHJ PP,OUTAS0 ;YES,SO PRINT MESSAGE + MOVEI CS,TBUF ;AND TITLE + PUSHJ PP,OUTAS0 ;FOR IDENTIFICATION + 003177' 260740 014161' JRST OUTCR] ;AND A CR-LF + 003200' 624600 000001 TRZA ER,TTYSW ;NO MORE OUTPUT NOW + 003201' ENDP2D: + 003201' 603600 001000 IFN CCLSW,<TLNE IO,CRPGSW ;IF RPG, DON'T PRINT PGM BREAK + 003202' 620600 000001 TRZ ER,TTYSW ;...> + IFE CCLSW,< SKIPA ;SO PRGEND CODE CAN WORK> + 003203' 434600 013042' IOR ER,OUTSW ;... + 003204' 260740 010316' PUSHJ PP,OUTCR + IFN RENTSW,< + MOVEI CS,[SIXBIT /HI-SEG. BREAK IS @/] + SKIPN HHIGH ;DON'T PRINT IF ZERO + JRST ENDP2C ;IT WAS + PUSHJ PP,OUTSIX + HRLO CS,HHIGH ;GET THE BREAK + PUSHJ PP,ONC1 + PUSHJ PP,OUTCR + ENDP2C:> + 003205' 201400 014166' MOVEI CS,[SIXBIT /PROGRAM BREAK IS @/] + 003206' 260740 003001' PUSHJ PP,OUTSIX ;OUTPUT PROGRAM BREAK + 003207' 550400 013262' HRRZ CS,ABSHI ;GET ABS. BREAK + 003210' 307400 000140 CAIG CS,140 ;ANY ABS. CODE + JRST [HRLO CS,HIGH ;NO + 003211' 254000 014171' JRST ENDP2B] ;SO DON'T PRINT + 003212' 524400 013263' HRLO CS,HIGH ;GET PROGRAM BREAK + 003213' 260740 002751' PUSHJ PP,ONC1 + 003214' 260740 010316' PUSHJ PP,OUTCR + 003215' 201400 014173' MOVEI CS,[SIXBIT /ABSLUTE BREAK IS @/] + 003216' 260740 003001' PUSHJ PP,OUTSIX + 003217' 524400 013262' HRLO CS,ABSHI + 003220' 260740 002751' ENDP2B: PUSHJ PP,ONC1 + 003221' 260740 010316' PUSHJ PP,OUTCR + 003222' 603640 004400 TLNE FR,RIMSW!R1BSW ;RIM MODE? + 003223' 260740 003256' PUSHJ PP,RIMFIN ;YES, FINISH IT + 003224' 607600 001010 IFN CCLSW,<TLNN IO,CRPGSW!MFLSW ;IF NOT IN CCL MODE> + IFE CCLSW,<TLNN IO,MFLSW ;NOR IF IN MULTI-FILE MODE> + 003225' 660600 000001 TRO ER,TTYSW ;PRINT SIZE + 003226' 260740 010316' PUSHJ PP,OUTCR + 003227' 200340 000012* MOVE C,JOBREL + 003230' 242340 777766 LSH C,-^D10 + 003231' 271340 000001 ADDI C,1 + 003232' 260740 002765' PUSHJ PP,DNC + 003233' 201400 014176' MOVEI CS,[SIXBIT /K CORE USED@/] + 003234' 260740 003001' PUSHJ PP,OUTSIX + 003235' 260740 010316' PUSHJ PP,OUTCR + 003236' 540600 013042' HRR ER,OUTSW + MACRO V.10 PAGE 59-1 + OUTPUT ROUTINES + + 003237' 260740 003017' PUSHJ PP,OUTSET + 003240' 000002 002156' XWD 2,SOUT ;OUTPUT THE SYMBOLS (BLKTYP-2) + 003241' 260740 003017' PUSHJ PP,OUTSET + 003242' 000007 002633' XWD 7,VOUT ;OUTPUT TRANSFER VECTOR (..-7) + 003243' 260740 003017' PUSHJ PP,OUTSET + 003244' 000005 002626' XWD 5,HOUT ;OUTPUT HIGHEST RELOCATABLE (..-5) + 003245' 260740 002645' PUSHJ PP,COUTD + 003246' 607600 000010 TLNN IO,MFLSW ;IS IT PRGEND? + 003247' 254000 007014' JRST FINIS ;ALAS, FINISHED + 003250' 201400 013057' MOVEI CS,SBUF ;RESET SBUF POINTER + 003251' 542400 013100' HRRM CS,SUBTTX ;TO SUBTTL + 003252' 402000 013262' SETZM PASS2I ;CLEAR PASS2 VARIABLES + 003253' 200000 014200' MOVE [XWD PASS2I,PASS2I+1] + 003254' 251000 013412' BLT PASS2Z-1 ;BUT NOT ALL OF VARIABLES + 003255' 254000 003267' JRST INZ ;RE-INITIALIZE FOR NEXT PROG + MACRO V.10 PAGE 60 + OUTPUT ROUTINES + + + + 003256' 603640 004000 RIMFIN: TLNE FR,R1BSW + 003257' 260740 010165' PUSHJ PP,R1BDMP + 003260' 336340 013401' SKIPN C,VECTOR + 003261' 205340 254200 MOVSI C,(JRST 4,) + 003262' 607340 777000 TLNN C,777000 + 003263' 661340 254000 TLO C,(JRST) + 003264' 260740 010123' PUSHJ PP,PTPBIN + 003265' 201340 000000 MOVEI C,0 + 003266' 254000 010123' JRST PTPBIN + MACRO V.10 PAGE 61 + PASS INITIALIZE + + SUBTTL PASS INITIALIZE + 003267' 350000 013332' INZ: AOS MODA + 003270' 350000 013334' AOS MODO + 003271' 402000 012544' SETZM SEQNO + 003272' 402000 012541' SETZM TAG + 003273' 541640 000010 HRRI RX,^D8 + 003274' 201000 013027' MOVEI VARHD + 003275' 202000 013030' MOVEM VARHDX + 003276' 201000 013034' MOVEI LITHD + 003277' 202000 013035' MOVEM LITHDX + 003300' 260740 003437' PUSHJ PP,LITI + 003301' 260740 002717' PUSHJ PP,STOWI + 003302' 254000 001765' JRST OUTLI + + 003303' 220100 000005 RCPNTR: POINT 1,ARG,^L<RELF>-18 ;POINT 1,ARG,22 + MACRO V.10 PAGE 62 + PSEUDO-OP HANDLERS + + SUBTTL PSEUDO-OP HANDLERS + + 003304' 260740 000227' TAPE0: PUSHJ PP,STOUTS ;FINISH THIS LINE + 003305' 254000 007165' JRST GOTEND ;AND IGNORE THE REST OF THIS FILE + + 003306' 260740 003745' RADIX0: PUSHJ PP,EVAL10 ;EVALUATE RADIX D10 + 003307' 307000 000012 CAIG AC0,^D10 ;IF GREATER THAN 10 + 003310' 307000 000001 CAIG AC0,1 ;OR LESS THAN 2, + 003311' 664600 040000 ERRAX: TROA ER,ERRA ;FLAG ERROR AND SKIP + 003312' 540640 000000 HRR RX,AC0 ;SET NEW RADIX + 003313' 263740 000000 POPJ PP, + + + 003314' 621600 000001 XALL0: TLZ IO,IOSALL ;TURN OFF MACRO SUPPRESS ALL + 003315' 321640 000446' IOSET: JUMP1 POPOUT ;NOSYM (IONSYM), XALL (IOPALL), XLIST (IOPROG) + 003316' 554200 000000 HLRZ SX,AC0 ;STORE FLAGS + 003317' 260740 000227' PUSHJ PP,STOUTS ;POLISH OFF LINE + 003320' 661604 000000 TLO IO,0(SX) ;NOW SUPRESS PRINTING + 003321' 263740 000000 POPJ PP, + + 003322' 630600 000000 IORSET: TDZ IO,AC0 ;RESET FLAG IOPALL/IOPROG + 003323' 603000 002000 TLNE AC0,IONCRF ;RESTORING CREFFING? + 003324' 621600 000040 TLZ IO,DEFCRS ;YES, CLEAR ANY WAITING DEFINING OCCURENCES + 003325' 263740 000000 POPJ PP, + + 003326' 260740 004146' BLOCK0: PUSHJ PP,HIGHQ + 003327' 260740 001070' PUSHJ PP,EVALEX ;EVALUATE + 003330' 622440 777777 TRZE RC,-1 ;EXTERNAL OR RELOCATABLE? + 003331' 260740 003752' PUSHJ PP,QEXT ;YES, DETERMINE TYPE + 003332' 272000 013326' ADDM AC0,LOCO ;UPDATE ASSEMBLY LOCATION + 003333' 250000 013325' BLOCK1: EXCH AC0,LOCA ;SAVE START OF BLOCK + 003334' 272000 013325' ADDM AC0,LOCA ;UPDATE OUTPUT LOCATION + 003335' 526000 013324' BLOCK2: HRLOM AC0,LOCBLK + 003336' 325640 000446' JUMP2 POPOUT + 003337' 602600 002000 TRNE ER,ERRU + 003340' 660600 001000 TRO ER,ERRV + 003341' 263740 000000 POPJ PP, + MACRO V.10 PAGE 63 + PSEUDO-OP HANDLERS + + + 003342' 660600 000001 PRNTX0: TRO ER,TTYSW ;SET OUTPUT TO TTY + 003343' 325640 003345' JUMP2 PRNTX2 ;PASS1? + 003344' 674600 013042' TDOA ER,OUTSW ;YES,OUTPUT TO LSTDEV ALSO + 003345' 420600 013042' PRNTX2: ANDCM ER,OUTSW ;NO,DON'T OUTPUT TO TTY IF IT IS LSTDEV + 003346' 260740 004452' PUSHJ PP,BYPASS ;GET FIRST CHAR. + 003347' 665600 000004 TLOA IO,IORPTC ;REPEAT IT AND SKIP + 003350' 260740 010310' PRNTX4: PUSHJ PP,PRINT ;PRINT THE CHAR. + 003351' 260740 001406' PUSHJ PP,CHARAC ;GET ASCII CHAR. + 003352' 307340 000015 CAIG C,CR ;IF GREATER THAN CR + 003353' 307340 000011 CAIG C,HT ;OR LESS THAN LF + 003354' 254000 003350' JRST PRNTX4 ;THEN CONTINUE + 003355' 260740 010316' PUSHJ PP,OUTCR ;OUTPUT A CRLF + 003356' 624600 000003 TRZA ER,TTYSW!LPTSW ;TURN OF OUTPUT + 003357' 350017 000000 CPOPJ1: AOS (PP) ;USEFUL TAG HAS TO GO SOMEWHERE + 003360' 263740 000000 CPOPJ: POPJ PP, ;EXIT + + 003361' 260740 001354' REMAR0: PUSHJ PP,GETCHR ;GET A CHARACTER + 003362' 302340 000033 CAIE C,EOL + 003363' 254000 003361' JRST REMAR0 + 003364' 263740 000000 POPJ PP, ;EXIT + MACRO V.10 PAGE 64 + PSEUDO-OP HANDLERS + + 003365' 260740 003333' LIT0: PUSHJ PP,BLOCK1 + 003366' 260740 000227' PUSHJ PP,STOUTS + 003367' 325640 003377' LIT1: JUMP2 LIT20 + + ;ON PASS ONE, WE JUST STEP THE LOCATION COUNTER AND CLEAR + + 003370' 200000 013036' MOVE AC0,LITCNT + 003371' 200200 013035' MOVE SX,LITHDX + 003372' 506004 000000 HRLM AC0,0(SX) + 003373' 200300 013325' MOVE V,LOCA + 003374' 504300 013332' HRL V,MODA + 003375' 202304 777777 MOVEM V,-1(SX) + 003376' 254000 003433' JRST LIT24 + + 003377' 261740 013325' LIT20: PUSH PP,LOCA + 003400' 261740 013326' PUSH PP,LOCO + 003401' 336000 013037' SKIPN LITNUM + 003402' 254000 003407' JRST LIT20A + 003403' 200200 013035' MOVE SX,LITHDX + 003404' 550004 777777 HRRZ AC0,-1(SX) + 003405' 312000 013325' CAME AC0,LOCA + 003406' 660600 000100 TRO ER,ERRP + 003407' 200200 013031' LIT20A: MOVE SX,LITAB + 003410' 375000 013037' LIT21: SOSGE LITNUM + 003411' 254000 003422' JRST LIT22 + 003412' 200004 777776 MOVE AC0,-2(SX) ;WFW + 003413' 200444 777777 MOVE RC,-1(SX) ;WFW + 003414' 200204 000000 MOVE SX,(SX) ;WFW POINTER TO THE NEXT LIT + 003415' 260740 002677' PUSHJ PP,STOW20 ;STOW CODE + 003416' 201340 000012 MOVEI C,12 ;SET LINE FEED + 003417' 136340 013003' IDPB C,LBUFP + 003420' 260740 001547' PUSHJ PP,OUTLIN ;OUTPUT THE LINE + 003421' 254000 003410' JRST LIT21 + MACRO V.10 PAGE 65 + PSEUDO-OP HANDLERS + + 003422' 550100 013326' LIT22: HRRZ AC2,LOCO + 003423' 262740 013326' POP PP,LOCO + 003424' 262740 013325' POP PP,LOCA + 003425' 200200 013035' MOVE SX,LITHDX + 003426' 554004 000000 HLRZ AC0,0(SX) + 003427' 274100 013326' SUB AC2,LOCO ;COMPUTE LENGTH USED + 003430' 315000 000002 CAMGE AC0,AC2 ;USE LARGER + 003431' 200000 000002 MOVE AC0,AC2 + 003432' 270100 013326' ADD AC2,LOCO + 003433' 272000 013325' LIT24: ADDM AC0,LOCA + 003434' 272000 013326' ADDM AC0,LOCO + 003435' 260740 003444' PUSHJ PP,GETTOP + 003436' 542200 013035' HRRM SX,LITHDX + 003437' 402000 013036' LITI: SETZM LITCNT + 003440' 402000 013037' SETZM LITNUM + 003441' 201000 013031' MOVEI LITAB + 003442' 202000 013032' MOVEM LITABX + 003443' 254000 004146' JRST HIGHQ + + 003444' 550040 000004 GETTOP: HRRZ AC1,SX ;VARHD + 003445' 550204 000000 HRRZ SX,0(SX) + 003446' 326200 000446' JUMPN SX,POPOUT + 003447' 201200 000003 MOVEI SX,3 ;WFW + 003450' 273200 012727' ADDB SX,FREE + 003451' 311200 013102' CAML SX,SYMBOL + 003452' 260740 010015' PUSHJ PP,XCEED + 003453' 275200 000001 SUBI SX,1 ;MAKE SX POINT TO LINK + 003454' 402004 000000 SETZM 0(SX) ;CLEAR FORWARD LINK + 003455' 542201 000000 HRRM SX,0(AC1) ;STORE ADDRESS IN LAST LINK + 003456' 263740 000000 POPJ PP, + MACRO V.10 PAGE 66 + PSEUDO-OP HANDLERS + + 003457' 260740 003333' VAR0: PUSHJ PP,BLOCK1 ;PRINT LOCATION + 003460' 260740 003462' PUSHJ PP,VARA + 003461' 254000 000227' JRST STOUTS + + 003462' 200200 013030' VARA: MOVE SX,VARHDX + 003463' 200000 013325' MOVE AC0,LOCA ;GET LOCATION FOR CHECK + 003464' 321640 003467' JUMP1 VARB ;DO NOT CHECK START ON PASS 1 + 003465' 312004 777777 CAME AC0,-1(SX) ;CHECK START OF VAR AREA + 003466' 660600 000100 TRO ER,ERRP ;AND GIVE ERROR + 003467' 202004 777777 VARB: MOVEM AC0,-1(SX) ;SAVE START FOR PASS 2 + 003470' 554004 000000 HLRZ AC0,0(SX) + 003471' 272000 013325' ADDM AC0,LOCA + 003472' 272000 013326' ADDM AC0,LOCO + 003473' 260740 003444' PUSHJ PP,GETTOP + 003474' 542200 013030' HRRM SX,VARHDX + 003475' 325640 000446' JUMP2 POPOUT + + 003476' 260740 003025' PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + 003477' 626240 000100 TRZN ARG,VARF + 003500' 263740 000000 POPJ PP, ;NO, EXIT + 003501' 620240 002000 TRZ ARG,UNDF ;TURN OFF FLAG NOW + 003502' 205000 000001 MOVSI AC0,1 ;ADD 1 + 003503' 272001 000000 ADDM AC0,0(AC1) ;UPDATE COUNT + + 003504' 434240 013332' IOR ARG,MODA ;SET TO ASSEMBLY MODE + 003505' 504240 013325' HRL ARG,LOCA + 003506' 206244 000000 MOVSM ARG,0(SX) ;UPDATE 2ND WRD OF SYM TAB ENTRY + 003507' 350000 013325' AOS LOCA + 003510' 350000 013326' AOS LOCO + 003511' 254000 004146' JRST HIGHQ1 + MACRO V.10 PAGE 67 + PSEUDO-OP HANDLERS + + 003512' 261740 000000 IF: PUSH PP,AC0 ;SAVE AC0 + 003513' 261740 000014 PUSH PP,IO + 003514' 260740 003757' PUSHJ PP,EVALXQ ;EVALUATE AND TEST EXTERNAL + 003515' 262740 000001 POP PP,AC1 + 003516' 321040 003520' JUMPL AC1,IFPOP + 003517' 621600 400000 TLZ IO,FLDSW + 003520' 262740 000001 IFPOP: POP PP,AC1 ;RETRIEVE SKIP INSTRUCTION + 003521' 661600 000004 IFSET: TLO IO,IORPTC ;REPEAT CHARACTER + 003522' 256000 000001 IFXCT: XCT AC1 ;EXECUTE INSTRUCTION + 003523' 634000 000000 TDZA AC0,AC0 ;FALSE + 003524' 201000 000001 MOVEI AC0,1 ;TRUE + 003525' 325600 005072' IFEXIT: JUMPOC REPEA1 ;BRANCH IF IN OP-CODE FIELD + 003526' 260740 001354' IFEX1: PUSHJ PP,GETCHR ;SEARCH FOR "<" + 003527' 306340 000033 CAIN C,EOL ;ERROR IF END OF LINE + 003530' 254000 003311' JRST ERRAX + 003531' 302340 000034 CAIE C,34 + 003532' 254000 003526' JRST IFEX1 + 003533' 322000 003664' JUMPE AC0,IFEX2 ;TEST FOR 0 + 003534' 661600 000004 TLO IO,IORPTC ;NO, PROCESS AS CELL + 003535' 260740 000354' PUSHJ PP,CELL + 003536' 402000 013275' SETZM INCND ;NOT ANY MORE + 003537' 254000 002665' JRST STOW ;STOW CODE AND EXIT + + 003540' 541000 400000 IFPASS: HRRI AC0,P1 ;MAKE IT TLNX IO,P1 + 003541' 200040 000000 MOVE AC1,AC0 ;PLACE IT IN AC1 + 003542' 254000 003521' JRST IFSET ;EXECUTE INSTRUCTION + + 003543' 520040 000000 IFB0: HLLO AC1,AC0 ;FORM AND STORE TEST INSTRUCTION + 003544' 260740 001436' IFB1: PUSHJ PP,CHARL ;GET FIRST NON-BLANK + 003545' 302340 000040 CAIE C," " + 003546' 306340 000011 CAIN C," " + 003547' 254000 003544' JRST IFB1 ;SKIP BLANKS AND TABS + 003550' 307340 000015 CAIG C,CR ;CHECK FOR CARRET AS DELIM. + 003551' 305340 000012 CAIGE C,LF + 003552' 334200 013415' SKIPA SX,SEQNO2 + 003553' 254000 003311' JRST ERRAX + 003554' 202200 013312' MOVEM SX,CNDSEQ + 003555' 200200 013414' MOVE SX,PAGENO + 003556' 202200 013311' MOVEM SX,CNDPG + 003557' 476000 013275' SETOM INCND ;SAVE INFO. FOR PASS 1 ERRORS + 003560' 306340 000074 CAIN C,"<" ;LEFT BRACKET? + 003561' 403340 000011 SETZB C,RC ;YES, PREPARE FOR OLD FORMAT + 003562' 334200 000007 SKIPA SX,C ;SAVE FOR COMPARISON + 003563' 660000 000001 IFB3: TRO AC0,1 ;SET FLAG + 003564' 260740 001436' IFB2: PUSHJ PP,CHARL ;GET ASCII CHARACTER AND LIST + 003565' 316340 000004 CAMN C,SX ;TEST FOR DELIMITER + 003566' 254000 003522' JRST IFXCT ;FOUND + 003567' 302340 000040 CAIE C," " ;BLANK? + 003570' 306340 000011 CAIN C," " ;OR TAB? + 003571' 254000 003564' JRST IFB2 ;YES + 003572' 326200 003563' JUMPN SX,IFB3 ;JUMP IF NEW FORMAT + 003573' 306340 000074 CAIN C,"<" ;<? + 003574' 344440 003564' AOJA RC,IFB2 ;YES, INCREMENT COUNT + MACRO V.10 PAGE 67-1 + PSEUDO-OP HANDLERS + + 003575' 306340 000076 CAIN C,">" ;>? + 003576' 361440 003522' SOJL RC,IFXCT ;YES, DECREMENT AND EXIT IF DONE + 003577' 254000 003563' JRST IFB3 ;GET NEXT CHARACTER + + MACRO V.10 PAGE 68 + PSEUDO-OP HANDLERS + + 003600' 541000 002000 IFDEF0: HRRI AC0,UNDF ;MAKE IT TLNX ARG,UNDF + 003601' 261740 000000 PUSH PP,AC0 ;STACK IT + 003602' 260740 001034' PUSHJ PP,GETSYM ;TAKES SKIP RETURN IF SYM NAME IS LEGAL + 003603' 664600 040000 TROA ER,ERRA ;ILLEGAL! + 003604' 260740 012313' PUSHJ PP,SEARCH + JRST [PUSHJ PP,OPTSCH + TLO ARG,UNDF + 003605' 254000 014201' JRST .+1] + 003606' 260740 012220' PUSHJ PP,SSRCH3 ;EMIT TO CREF ANYWAY + 003607' 254000 003520' JRST IFPOP ;POP AND EXECUTE INSTRUCTION + + MACRO V.10 PAGE 69 + PSEUDO-OP HANDLERS + + 003610' 557000 000000 IFIDN0: HLRZS AC0 + 003611' 201300 000047 MOVEI V,2*.IFBLK-1 + 003612' 402006 012730' SETZM IFBLK(V) ;CLEAR COMPARISON BLOCK + 003613' 365300 003612' SOJGE V,.-1 + 003614' 402000 013402' SETZM .TEMP ;CLEAR STORED DELIMETER + 003615' 201440 012730' MOVEI RC,IFBLK ;SET FOR FIRST BLOCK + 003616' 260740 003630' PUSHJ PP,IFCL ;GET FIRST STRING + 003617' 201440 012754' MOVEI RC,IFBLKA + 003620' 260740 003630' PUSHJ PP,IFCL ;GET SECOND STRING + 003621' 201300 000023 MOVEI V,.IFBLK-1 + 003622' 200206 012730' MOVE SX,IFBLK(V) ;GET WORD FROM FIRST STRING + 003623' 316206 012754' CAMN SX,IFBLKA(V) ;COMPARE WITH SECOND STRING + 003624' 365300 003622' SOJGE V,.-2 ;EQUAL, TRY NEXT WORD + 003625' 321300 003525' JUMPL V,IFEXIT ;DID WE FINISH STRING + 003626' 431000 000001 XORI AC0,1 ;NO, TOGGLE REQUEST + 003627' 254000 003525' JRST IFEXIT ;DO NOT TURN ON IORPTC WFW + + 003630' 260740 001406' IFCL: PUSHJ PP,CHARAC ;GET AND LIST CHARACTER + 003631' 302340 000040 CAIE C," " ;SKIP SPACES + 003632' 307340 000015 CAIG C,CR ;ALSO SKIP CR-LF + 003633' 305340 000011 CAIGE C,HT ;AND TAB + 003634' 254000 003636' JRST .+2 ;NOT ONE OF THEM + 003635' 254000 003630' JRST IFCL ;SO LONG COMPARISONS WILL WORK + ;*** A CROCK SO THAT IFIDN <X>,<X>,<INST.> WILL WORK *** + 003636' 302340 000054 CAIE C,"," ;IS IT A COMMA? + 003637' 254000 003642' JRST .+3 ;NO + 003640' 336000 013402' SKIPN .TEMP ;YES, WAS PREVIOUS FIELD OLD METHOD? + 003641' 254000 003630' JRST IFCL ;YES, IGNORE COMMA AND SPACES + ; *** + 003642' 306340 000074 CAIN C,"<" ;WAS IT LEFT BRACKET? + 003643' 474340 000000 SETO C, ;SIGNAL OLD METHOD, LOOK FOR RIGHT BRACKET + 003644' 202340 013402' MOVEM C,.TEMP ;STORE TERMINATOR FOR COMPARISON + 003645' 201200 000143 MOVEI SX,5*.IFBLK-1 ;LIMIT SEARCH + 003646' 505440 440700 HRLI RC,(POINT 7,,) ;SET UP BYTE IN RC + 003647' 260740 001406' IFCLR: PUSHJ PP,CHARAC + 003650' 333000 013402' SKIPLE .TEMP ;NEW METHOD? + 003651' 254000 003656' JRST IFCLR1 ;YES, IGNORE ANGLE BRACKET COUNTING + 003652' 306340 000074 CAIN C,"<" ;ANOTHER LEFT ANGLE? + 003653' 370000 013402' SOS .TEMP ;YES, KEEP COUNT + 003654' 306340 000076 CAIN C,">" ;CLOSING ANGLE + 003655' 355000 013402' AOSGE .TEMP ;MATCHING COUNT? + 003656' 316340 013402' IFCLR1: CAMN C,.TEMP ;TEST FOR DELIMITER + 003657' 263740 000000 POPJ PP, ;EXIT ON RIGHT DELIMITER + 003660' 367200 003662' SOJG SX,.+2 ;ANY ROOM IN COMPARISON BLOCK? + 003661' 664600 040000 TROA ER,ERRA ;NO, FLAG ERROR BUT KEEP ON GOING + 003662' 136340 000011 IDPB C,RC ;DEPOSIT BYTE + 003663' 254000 003647' JRST IFCLR + + MACRO V.10 PAGE 70 + PSEUDO-OP HANDLERS + + + 003664' 260740 001354' IFEX2: PUSHJ PP,GETCHR + 003665' 306340 000033 CAIN C,EOL ;EXIT WITH ERROR IF END OF LINE + 003666' 254000 003311' JRST ERRAX + 003667' 306340 000034 CAIN C,34 ;"<"? + 003670' 344000 003664' AOJA AC0,IFEX2 ;YES, INCREMENT COUNT + 003671' 302340 000036 CAIE C,36 ;">"? + 003672' 254000 003664' JRST IFEX2 ;NO, TRY AGAIN + 003673' 365000 003664' SOJGE AC0,IFEX2 ;YES, TEST FOR MATCH + 003674' 260740 004452' PUSHJ PP,BYPASS ;YES, MOVE TO NEXT DELIMITER + 003675' 402000 013275' SETZM INCND ;OUT OF CONDITIONAL NOW + 003676' 344000 002664' AOJA AC0,STOWZ1 ;STOW ZERO + + + 003677' 512000 013271' INTER0: HLLZM AC0,INTENT ;AC0 CONTAINS INTF/ENTF FLAGS + + 003700' 260740 001034' INTER1: PUSHJ PP,GETSYM ;GET A SYMBOL + 003701' 254000 003710' JRST INTER3 ;INVALID, SKIP + 003702' 260740 012210' PUSHJ PP,SSRCH ;SEARCH THE TABLE + 003703' 205240 402400 MOVSI ARG,SYMF!INTF!UNDF + 003704' 603240 002000 TLNE ARG,UNDF ;UNDEFINED? + 003705' 660600 040000 TRO ER,ERRA ;YES, FLAG ERROR + 003706' 607240 041000 TLNN ARG,SYNF!EXTF + 003707' 674240 013271' TDOA ARG,INTENT ;SET APPROPRIATE FLAGS + 003710' 664600 040000 INTER3: TROA ER,ERRA ;FLAG ARG EROR AND SKIP + 003711' 260740 012364' PUSHJ PP,INSERQ ;INSERT/UPDATE + 003712' 321400 003700' JUMPCM INTER1 + 003713' 402000 013270' SETZM EXTPNT ;JUST IN CASE, SO AS NOT TO CONFUSE WORLD + 003714' 263740 000000 POPJ PP, ;NO, EXIT + MACRO V.10 PAGE 71 + PSEUDO-OP HANDLERS + + 003715' 260740 001034' EXTER0: PUSHJ PP,GETSYM ;GET A SYMBOL + 003716' 254000 003741' JRST EXTER4 ;INVALID, ERROR + 003717' 661600 000040 EXTER1: TLO IO,DEFCRS ;FLAG THIS AS A DEFINITION + 003720' 260740 012210' PUSHJ PP,SSRCH ;OK, SEARCH SYMBOL TABLE + 003721' 254000 003726' JRST EXTER2 ;NOT THERE, INSERT IT + 003722' 607240 003100 TLNN ARG,EXTF!VARF!UNDF + 003723' 664600 000040 TROA ER,ERRE ;FLAG ERROR AND BYPASS + 003724' 603240 001000 TLNE ARG,EXTF ;VALID, ALREADY DEFINED? + JRST [JUMP1 EXTER3 ;YES, BYPASS + TLZN ARG,UNDF ;SKIP IF UNDEFINED ALSO + JRST EXTER3 ;CONTINUE + ANDM ARG,(SX) ;CLEAR UNDF ON PASS 2 + 003725' 254000 014204' JRST EXTER2] ;SET UP EXTERNAL NOW + 003726' 201300 000002 EXTER2: MOVEI V,2 ;NO, GET 2 CELLS FROM THE TREE + 003727' 273300 012727' ADDB V,FREE + 003730' 311300 013102' CAML V,SYMBOL ;HAVE WE RUN OUT OF CORE? + 003731' 260740 010014' PUSHJ PP,XCEEDS ;YES, TRY TO BORROW SOME MORE + 003732' 275300 000002 SUBI V,2 ;GET RIGHT CELL FOR POINTER + 003733' 403446 000000 SETZB RC,0(V) ;ALL SET, ZERO VALUES + 003734' 205240 401000 MOVSI ARG,SYMF!EXTF + 003735' 260740 012366' PUSHJ PP,INSERT ;INSERT/UPDATE IT + 003736' 205240 004000 MOVSI ARG,PNTF + 003737' 436244 000000 IORM ARG,0(SX) + 003740' 334244 777777 SKIPA ARG,-1(SX) ;GET THE SIXBIT FOR THE NAME + 003741' 664600 040000 EXTER4: TROA ER,ERRA ;FLAG AS ERROR + 003742' 202246 000001 MOVEM ARG,1(V) ;AND STORE THAT IN CASE SYMBOL TABLE MOVES + 003743' 321400 003715' EXTER3: JUMPCM EXTER0 + 003744' 263740 000000 POPJ PP, ;NO, EXIT + MACRO V.10 PAGE 72 + PSEUDO-OP HANDLERS + + 003745' 261740 000015 EVAL10: PUSH PP,RX + 003746' 541640 000012 HRRI RX,^D10 + 003747' 260740 001070' PUSHJ PP,EVALEX ;EVALUATE + 003750' 262740 000015 POP PP,RX ;RESET RADIX + 003751' 322440 000446' JUMPE RC,POPOUT ;EXIT IF ABSOLUTE + + 003752' 332000 013270' QEXT: SKIPE EXTPNT ;ANY POSSIBILITIES? + 003753' 664600 000040 TROA ER,ERRE ;YES, FLAG EXTERNAL ERROR + 003754' 660600 004000 TRO ER,ERRR ;NO, FLAG RELOCATION ERROR + 003755' 513000 000011 HLLZS RC ;CLEAR RELOCATION/EXTERNAL + 003756' 263740 000000 POPJ PP, + + 003757' 260740 001070' EVALXQ: PUSHJ PP,EVALEX ;EVALUATE EXPRESSION + 003760' 627440 777776 TLZN RC,-2 ;LEFT HALF EXTERNAL + 003761' 622440 777776 TRZE RC,-2 ;WAS AN EXTERNAL FOUND? + 003762' 660600 000040 TRO ER,ERRE ;YES, FLAG ERROR + 003763' 263740 000000 POPJ PP, ;RETURN + MACRO V.10 PAGE 73 + PSEUDO-OP HANDLERS + + 003764' 260740 001034' OPDEF0: PUSHJ PP,GETSYM ;GET THE FIRST SYMBOL + 003765' 263740 000000 POPJ PP, ;ERROR IF INVALID SYMBOL + 003766' 302340 000073 CAIE C,73 ;"["? + 003767' 254000 003311' JRST ERRAX ;NO, ERROR + 003770' 261740 000000 PUSH PP,AC0 ;STACK MNEMONIC + 003771' 350000 013321' AOS LITLVL ;SHORT OUT LOCATION INCREMENT + 003772' 260740 000125' PUSHJ PP,STMNT ;EVALUATE STATEMENT + 003773' 335000 013104' SKIPGE STPX ;CODE STORED? + 003774' 664600 040000 TROA ER,ERRA ;NO,"A" ERROR + 003775' 260740 002712' PUSHJ PP,DSTOW ;GET AND DECODE VALUE + 003776' 370000 013321' SOS LITLVL + 003777' 250017 000000 EXCH AC0,0(PP) ;EXCHANGE VALUE FOR MNEMONIC + 004000' 261740 000011 PUSH PP,RC ;STACK RELOCATION + 004001' 661600 000040 TLO IO,DEFCRS ;SAY WE ARE DEFINING IT + 004002' 260740 012173' PUSHJ PP,MSRCH ;SEARCH SYMBOL TABLE + 004003' 205240 010000 MOVSI ARG,OPDF ;NOT FOUND + 004004' 262740 000011 POP PP,RC ;RESTORE VALUES + 004005' 262740 000006 POP PP,V + 004006' 603240 060000 TLNE ARG,SYNF!MACF + 004007' 660600 040000 TRO ER,ERRA ;YES "A" ERROR + 004010' 606600 040000 TRNN ER,ERRA ;ERROR? + 004011' 260740 012366' PUSHJ PP,INSERT ;NO, INSERT/UPDATE + 004012' 621600 000040 TLZ IO,DEFCRS ;JUST IN CASE + 004013' 260740 004452' PUSHJ PP,BYPASS + 004014' 254000 002717' JRST STOWI ;BE SURE STOW IS RESET + + + 004015' 200000 013326' DEPHA0: MOVE AC0,LOCO + 004016' 334440 013334' SKIPA RC,MODO ;SET TO OUTPUT VALUES AND SKIP + 004017' 260740 003757' PHASE0: PUSHJ PP,EVALXQ ;EVALUATE AND CHECK FOR EXTERNAL + 004020' 202000 013325' MOVEM AC0,LOCA ;SET ASSEMBLY LOCATION COUNTER + 004021' 202440 013332' MOVEM RC,MODA + 004022' 254000 003335' JRST BLOCK2 + MACRO V.10 PAGE 74 + PSEUDO-OP HANDLERS + + 004023' 321600 003311' ASSIGN: JUMPAD ERRAX ;NO, ERROR + 004024' 260740 004037' PUSHJ PP,ASSIG1 + 004025' 603600 000001 TLNE IO,IOSALL ;SUPPRESS ALL? + 004026' 326540 003360' JUMPN MRP,CPOPJ ;IF IN MACRO + 004027' 202440 013323' ASSIG7: MOVEM RC,ASGBLK + 004030' 602440 777776 TRNE RC,-2 ;EXTERNAL + 004031' 513000 013323' HLLZS ASGBLK ;YES,CLEAR RELOCATION + 004032' 603440 000001 TLNE RC,1 ;LEFT HALF NOT RELOC? + 004033' 603440 777776 TLNE RC,-2 ;... + 004034' 563000 013323' HRROS ASGBLK ;YES, SET FLAG + 004035' 202300 013324' MOVEM V,LOCBLK + 004036' 263740 000000 POPJ PP, + + 004037' 261740 000000 ASSIG1: PUSH PP,AC0 ;SAVE SYMBOL + 004040' 403000 013270' SETZB AC0,EXTPNT ;SPECIAL CHECK FOR == WFW + 004041' 260740 006335' PUSHJ PP,PEEK ;IS THE NEXT ON = + 004042' 302340 000075 CAIE C,"=" + 004043' 254000 004047' JRST ASSIG5 + 004044' 661000 100000 TLO AC0,NOOUTF ;YES, NOT OUT TO DDT WFW + 004045' 260740 001354' PUSHJ PP,GETCHR ;PROCESS THE CHAR. + 004046' 260740 006335' PUSHJ PP,PEEK ;CHECK FOR ==: DMN + 004047' 302340 000072 ASSIG5: CAIE C,":" ;IS IT + 004050' 254000 004053' JRST ASSIG6 ;NO + 004051' 661000 000400 TLO AC0,INTF ;MAKE INTERNAL + 004052' 260740 001354' PUSHJ PP,GETCHR ;REPEAT IT + 004053' 202000 013417' ASSIG6: MOVEM AC0,HDAS ;STORE THESE BITS WFW + 004054' 260740 001057' PUSHJ PP,EVALCM ;EVALUATE EXPRESSION + 004055' 250017 000000 EXCH AC0,0(PP) ;SWAP VALUE FOR SYMBOL + 004056' 261740 000011 PUSH PP,RC + 004057' 606440 777776 TRNN RC,-2 ;CHECK EXTERNAL AGREEMENT + 004060' 254000 004065' JRST ASSIG2 + 004061' 553000 000011 HRRZS RC + 004062' 550240 013270' HRRZ ARG,EXTPNT + 004063' 312440 000005 CAME RC,ARG + 004064' 260740 003752' PUSHJ PP,QEXT ;EXTERNAL OR RELOCATION ERROR + 004065' 554457 000000 ASSIG2: HLRZ RC,(PP) + 004066' 606440 777776 TRNN RC,-2 + 004067' 254000 004073' JRST ASSIG3 + 004070' 554240 013270' HLRZ ARG,EXTPNT + 004071' 312440 000005 CAME RC,ARG + 004072' 260740 003752' PUSHJ PP,QEXT + 004073' 661600 000040 ASSIG3: TLO IO,DEFCRS + 004074' 260740 012210' PUSHJ PP,SSRCH + 004075' 205240 400000 MOVSI ARG,SYMF + 004076' 434240 013417' IOR ARG,HDAS ;WFW + 004077' 603240 002000 TLNE ARG,UNDF ;WAS IT UNDEFINED + 004100' 621240 005000 TLZ ARG,EXTF!PNTF ;YES,CLEAR EXTF NOW + 004101' 621240 002100 TLZ ARG,UNDF!VARF ;CANCEL UNDEFINED AND VARIABLE FLAGS + 004102' 402000 013270' SETZM EXTPNT ;FOR REST OF WORLD + 004103' 262740 000011 POP PP,RC + 004104' 602600 577760 TRNE ER,ERRORS-ERRQ + 004105' 400440 000000 SETZ RC, ;CLEAR RELOCATION + 004106' 262740 000006 POP PP,V + MACRO V.10 PAGE 74-1 + PSEUDO-OP HANDLERS + + 004107' 602600 002000 TRNE ER,ERRU ;WAS VALUE UNDEFINED? + 004110' 661240 002000 TLO ARG,UNDF ;YES,SO TURN UNDF ON + 004111' 603240 201000 TLNE ARG,TAGF!EXTF + 004112' 254000 003311' JRST ERRAX + 004113' 254000 012366' JRST INSERT + + MACRO V.10 PAGE 75 + PSEUDO-OP HANDLERS + + 004114' 260740 004146' LOC0: PUSHJ PP,HIGHQ ;AC0=0,0 + 004115' 261740 000000 PUSH PP,AC0 ;SAVE MODE REQUESTED + 004116' 557000 000000 HLRZS AC0 ;PUT MODE IN RIGHT HALF + 004117' 326000 004140' JUMPN AC0,RELOC0 ;RELOC PSEUDO-OP + 004120' 316000 013334' CAMN AC0,MODO ;SAME AS PRESENT MODE? + JRST [HRRZ AC0,LOCO ;YES + EXCH AC0,ABSLOC ;EXCH VALUES + 004121' 254000 014211' JRST LOC01] + 004122' 550000 013326' HRRZ AC0,LOCO ;NO, GET CURRENT VALUE + 004123' 202000 013327' MOVEM AC0,RELLOC ;SAVE IT + 004124' 200000 013330' MOVE AC0,ABSLOC ;GET LAST RELOC VALUE + 004125' 260740 004452' LOC01: PUSHJ PP,BYPASS ;SKIP BLANKS + 004126' 661600 000004 TLO IO,IORPTC + 004127' 302340 000033 CAIE C,EOL ;USE PREVIOUS VALUE IF NULL ARGUMENT + 004130' 260740 003757' PUSHJ PP,EVALXQ ;GET EXPRESSION AND TEST EXTERNAL + 004131' 542017 000000 HRRM AC0,(PP) ;STORE NEW VALUE + 004132' 262740 000000 POP PP,AC0 ;RETRIEVE STORED MODE AND VALUE + 004133' 552000 013325' LOC10: HRRZM AC0,LOCA ;SET ASSEMBLY LOCATION + 004134' 552000 013326' HRRZM AC0,LOCO ;AND OUTPUT LOCATION + 004135' 556000 013332' HLRZM AC0,MODA ;SET MODE + 004136' 556000 013334' HLRZM AC0,MODO + 004137' 254000 003335' JRST BLOCK2 + + 004140' 316000 013334' RELOC0: CAMN AC0,MODO + JRST [HRRZ AC0,LOCO + EXCH AC0,RELLOC + 004141' 254000 014214' JRST LOC01] + 004142' 550000 013326' HRRZ AC0,LOCO + 004143' 202000 013330' MOVEM AC0,ABSLOC + 004144' 200000 013327' MOVE AC0,RELLOC + 004145' 254000 004125' JRST LOC01 + + MACRO V.10 PAGE 76 + PSEUDO-OP HANDLERS + + IFN RENTSW,< + HISEG1: PUSHJ PP,HIGHQ ;SET CURRENT PROGRAM BREAK + PUSHJ PP,COUTD ;DUMP CURRENT TYPE OF BLOCK + SKIPN HISNSW ;IF WE HAVE SEEN IT BEFORE + SKIPE HIGH ;OR ANY RELOC CODE PUT OUT + TRO ER,ERRQ ;FLAG AS AN ERROR + PUSHJ PP,BYPASS ;GO GET EXPRESSION + TLO IO,IORPTC + PUSHJ PP,EVALXQ ;CHECK FOR EXTERNAL + ANDCMI AC0,1777 ;ONLY ALLOWED TO START ON NEW K BOUND + HRRZM AC0,LOCA ;SET LOC COUNTERS + HRRZM AC0,LOCO + MOVEI RC,1 ;ASSUME RELOCATABLE + POPJ PP, + + TWSEG0: PUSHJ PP,HISEG1 ;COMMON CODE + JUMPN AC0,.+2 ;ARGUMENT SEEN + MOVEI AC0,400000 ;ASSUME 400000 + HRRZM AC0,HMIN ;SET OFSET OF HIGH SEG. + HRRZM AC0,HHIGH ;INCASE NO HISEG CODE + TLOA AC0,(1B0) ;SIGNAL TWO SEGMENTS AND SKIP + + HISEG0: PUSHJ PP,HISEG1 ;COMMON CODE + HISEG2: MOVEM AC0,SVTYP3 ;SAVE THE HISEG ARG + MOVEM RC,MODA ;SET MODES + MOVEM RC,MODO + SETOM HISNSW ;WE HAVE ALREADY PUT ONE OUT + JRST BLOCK2 ;MAKE LISTING HAPPEN RIGHT> + + IFE RENTSW,< + SYN CPOPJ,HISEG0 + SYN CPOPJ,TWSEG0> + + SYN CPOPJ,ONFORM + SYN CPOPJ,OFFORM + MACRO V.10 PAGE 77 + PSEUDO-OP HANDLERS + + 004146' HIGHQ: + 004146' 200300 013326' HIGHQ1: MOVE V,LOCO ;GET ASSEMBLY LOCATION + 004147' 336000 013334' SKIPN MODO ;IF ASSEMBLY MODE IS ABSOLUTE + JRST [CAMLE V,ABSHI ;RECORED ABS HIGHEST ALSO + MOVEM V,ABSHI + 004150' 254000 014217' POPJ PP,] + IFN RENTSW,<SKIPE HMIN ;IS IT A TWO SEGMENT PROGRAM? + JRST [CAMGE V,HMIN ;YES,IS THIS HIGH SEG.? + JRST .+1 ;NO,STORE LOW SEGMENT + CAMLE V,HHIGH ;YES,IS IT GREATER THAN "HHIGH"? + MOVEM V,HHIGH ;YES,REPLACE WITH LARGER VALUE + POPJ PP,]> + 004151' 313300 013263' CAMLE V,HIGH ;IS IT GREATER THAN "HIGH"? + 004152' 202300 013263' MOVEM V,HIGH ;YES, REPLACE WITH LARGER VALUE + 004153' 263740 000000 POPJ PP, + + 004154' 625640 200000 ONML: TLZA FR,MWLFLG ;MULTI-WORD LITERALS OK + 004155' 661640 200000 OFFML: TLO FR,MWLFLG ;NO + 004156' 263740 000000 POPJ PP, + + 004157' 476000 013257' OFFSYM: SETOM IONSYM ;SUPRESS SYMBOL TABLE LISTING + 004160' 263740 000000 POPJ PP, + + 004161' 260740 001034' SUPRE0: PUSHJ PP,GETSYM ;GET A SYMBOL TO SUPRES + 004162' 254000 004166' JRST SUPRE1 ;ERROR + 004163' 260740 012210' PUSHJ PP,SSRCH ;SYMBOL ONLY + 004164' 254000 004166' JRST SUPRE1 ;GIVE ERROR MESSAGE + 004165' 665240 000004 TLOA ARG,SUPRBT ;SET THE SUPRESS BIT + 004166' 664600 040000 SUPRE1: TROA ER,ERRA + 004167' 436244 000000 IORM ARG,(SX) ;PUT BACK + 004170' 321400 004161' JUMPCM SUPRE0 ;ANY MORE? + 004171' 254000 004175' JRST SUPRS1 + + 004172' 260740 003025' SUPRSA: PUSHJ PP,LOOKUP ;SUPRESS ALL + 004173' 205240 000004 MOVSI ARG,SUPRBT + 004174' 436244 000000 IORM ARG,(SX) + 004175' 402000 013270' SUPRS1: SETZM EXTPNT ;JUST IN CASE WE LOOKED ONE UP + 004176' 263740 000000 POPJ PP, + + 004177' 321640 000446' XPUNG0: JUMP1 POPOUT + 004200' 260740 003025' PUSHJ PP,LOOKUP + 004201' 200244 000000 MOVE ARG,(SX) ;GET SYMBOL FLAGS + 004202' 607240 001610 TLNN ARG,INTF!ENTF!EXTF!SPTR + 004203' 665240 000004 TLOA ARG,SUPRBT ;LOCAL SYMBOL,SO SUPPRESS IT + 004204' 402000 013270' SETZM EXTPNT + 004205' 202244 000000 MOVEM ARG,(SX) ;RESTORE FLAGS + 004206' 263740 000000 POPJ PP, + MACRO V.10 PAGE 78 + PSEUDO-OP HANDLERS + + 004207' 325640 003361' TITLE0: JUMP2 REMAR0 + 004210' 201200 000120 MOVEI SX,.TBUF + 004211' 541000 013230' HRRI AC0,TBUF + 004212' 260740 004224' PUSHJ PP,SUBTT1 ;GO READ IT + 004213' 202200 013227' MOVEM SX,TCNT ;SAVE COUNT OF CHARS. WRITTEN + IFN UNIVR,<SKIPE UNIVSN ;WAS IT A UNIVERSAL? + PUSHJ PP,ADDUNV ;YES ADD TO TABLE> + 004214' 663600 000002 TLOE IO,IOTLSN ;HAVE WE SEEN ONE + IFE CCLSW,<TRO ER,ERRM ;YES, COMPLAIN> + 004215' 664600 000020 IFN CCLSW,<TROA ER,ERRM ;YES, MESSAGE + 004216' 254000 004235' JRST PRNAM ;PRINT NAME IF FIRST ONE> + 004217' 263740 000000 POPJ PP, ;EXIT OTHERWISE + + 004220' 332000 013057' SUBTT0: SKIPE SBUF ;STORE FIRST SUBTTL ON PASS1 + 004221' 321640 003361' JUMP1 REMAR0 ;OTHERWISE EXIT IF PASS ONE + 004222' 201200 000120 MOVEI SX,.SBUF + 004223' 541000 013057' HRRI AC0,SBUF + + 004224' 260740 004452' SUBTT1: PUSHJ PP,BYPASS ;BYPASS LEADING BLANKS + 004225' 661600 000004 TLO IO,IORPTC + 004226' 260740 001406' SUBTT3: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + 004227' 136340 000000 IDPB C,AC0 ;STORE IN BLOCK + 004230' 305340 000040 CAIGE C,40 ;TEST FOR TERMINATOR + 004231' 306340 000011 CAIN C,HT + 004232' 367200 004226' SOJG SX,SUBTT3 ;TEST FOR BUFFER FULL + 004233' 137440 000000 DPB RC,AC0 ;END, STORE TERMINATOR + 004234' 364200 003360' SOJA SX,CPOPJ ;COUNT NUL AND EXIT + + IFN CCLSW,< + 004235' 607600 001000 PRNAM: TLNN IO,CRPGSW ;NOT IF NOT RPG + 004236' 263740 000000 POPJ PP, + 004237' 261740 000000 PUSH PP,AC0 ;SAVE AC0 DMN + 004240' 261740 000011 PUSH PP,RC ;AND RC + 004241' 200000 014150' MOVE AC0,[POINT 7,TBUF] + 004242' 200200 014222' MOVE SX,[POINT 7,OTBUF] + 004243' 201440 000006 MOVEI RC,6 ;MAX OF SIX CHRS + 004244' 134340 000000 PN1: ILDB C,AC0 + 004245' 303340 000040 CAILE C," " ;CHECK FOR LEGAL + 004246' 303340 000172 CAILE C,"Z"+40 ;CHECK AGAINST LOWER CASE Z + 004247' 254000 004252' JRST PN2 + 004250' 136340 000004 IDPB C,SX ;PUT IN OUTPUT BUFFER + 004251' 367440 004244' SOJG RC,PN1 ;GET MORE + 004252' 201340 000000 PN2: MOVEI C,0 + 004253' 136340 000004 IDPB C,SX ;TERMINATOR + 004254' 051140 013335' TTCALL 3,OTBUF + TTCALL 3,[ASCIZ / + 004255' 051140 014223' /] + 004256' 262740 000011 POP PP,RC + 004257' 262740 000000 POP PP,AC0 ;RESTORE AC0 DMN + 004260' 263740 000000 POPJ PP, + > + MACRO V.10 PAGE 79 + PSEUDO-OP HANDLERS + + 004261' 260740 001034' SYN0: PUSHJ PP,GETSYM ;GET THE FIRST SYMBOL + 004262' 254000 003311' JRST ERRAX ;ERROR, EXIT + 004263' 260740 012173' PUSHJ PP,MSRCH ;TRY FOR MACRO/OPDEF + 004264' 254000 004302' JRST SYN3 ;NO,0THRY FOR OPERAND + 004265' 201200 012173' SYN1: MOVEI SX,MSRCH ;YES, SET FLAG + 004266' 260740 007211' SYN2: PUSHJ PP,SAVEXS ;SAVE REGISTERS + 004267' 325400 003311' JUMPNC ERRAX ;ERROR IF NO COMMA + 004270' 260740 001034' PUSHJ PP,GETSYM ;GET THE SECOND SYMBOL + 004271' 263740 000000 POPJ PP, + 004272' 260760 013051' PUSHJ PP,@SAVBLK+SX ;SEARCH FOR SECOND SYMBOL + 004273' 255000 000000 JFCL + 004274' 200240 013052' MOVE ARG,SAVBLK+ARG ;GET VALUES + 004275' 200440 013056' MOVE RC,SAVBLK+RC + 004276' 200300 013053' MOVE V,SAVBLK+V + 004277' 603240 020000 TLNE ARG,MACF ;MACRO? + 004300' 260740 006347' PUSHJ PP,REFINC ;YES, INCREMENT REFERENCE + 004301' 254000 012366' JRST INSERT ;INSERT AND EXIT + + 004302' 260740 012210' SYN3: PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + 004303' 254000 004313' JRST SYN4 ;NOT FOUND, TRY OP CODE + 004304' 661240 040000 TLO ARG,SYNF ;FLAG AS SYNONYM + 004305' 603240 001000 TLNE ARG,EXTF ;EXTERNAL? + 004306' 550300 000005 HRRZ V,ARG ;YES, RELPACE WITH POINTER + 004307' 201200 012210' MOVEI SX,SSRCH ;SET FLAG + 004310' 607240 000100 TLNN ARG,VARF ;DO NOT LET HIM SYN A VARIABLE + 004311' 254000 004266' JRST SYN2 + 004312' 254000 003311' JRST ERRAX + + 004313' 260740 010470' SYN4: PUSHJ PP,OPTSCH ;SEARCH FOR OP-CODE + 004314' 254000 003311' JRST ERRAX ;NOT FOUND, EXIT WITH ERROR + 004315' 205240 040000 MOVSI ARG,SYNF ;FLAG AS SYNONYM + 004316' 254000 004265' JRST SYN1 + MACRO V.10 PAGE 80 + PSEUDO-OP HANDLERS + + 004317' 260740 001034' PURGE0: PUSHJ PP,GETSYM ;GET A MNEMONIC + JRST [TRZ ER,ERRA ;CLEAR ERROR + 004320' 254000 014224' POPJ PP,] ;AND RETURN + 004321' 260740 012173' PUSHJ PP,MSRCH ;SEARCH MACRO SYMBOL TABLE + 004322' 254000 004330' JRST PURGE2 ;NOT FOUND, TRY SYMBOLS + 004323' 261740 000010 PUSH PP,CS ;SAVE CS AS IT MAY GET GARBAGED + 004324' 603240 020000 TLNE ARG,MACF ;MACRO? + 004325' 260740 006352' PUSHJ PP,REFDEC ;YES, DECREMENT THE REFERENCE + 004326' 262740 000010 POP PP,CS + 004327' 254000 004343' JRST PURGE4 ;REMOVE SYMBOL FROM TABLE + + 004330' 260740 012210' PURGE2: PUSHJ PP,SSRCH ;TRY OPERAND SYMBOL TABLE + 004331' 254000 004344' JRST PURGE5 ;NOT FOUND GET NEXT SYMBOL + 004332' 606440 777776 TRNN RC,-2 ;CHECK COMPLEX EXTERNAL + 004333' 603440 777776 TLNE RC,-2 + 004334' 603240 040000 TLNE ARG,SYNF + 004335' 254000 004337' JRST .+2 + 004336' 254000 004342' JRST PURGE3 + 004337' 603240 003000 TLNE ARG,EXTF!UNDF ;ERROR IF EXTERNAL OR UNDEFINED + 004340' 603240 040000 TLNE ARG,SYNF ;BUT NOT A SYNONYM + 004341' 254000 004343' JRST PURGE4 + 004342' 664600 040000 PURGE3: TROA ER,ERRA ;NOT FOUND, ERROR + 004343' 260740 012445' PURGE4: PUSHJ PP,REMOVE ;REMOVE FROM THE SYMBOL TABLE + 004344' 321400 004317' PURGE5: JUMPCM PURGE0 + 004345' 263740 000000 POPJ PP, ;EXIT + MACRO V.10 PAGE 81 + PSEUDO-OP HANDLERS + + 004346' 603240 002000 OPD1: TLNE ARG,UNDF ;IF OPDEF IS UNDEFINED + 004347' 660600 000200 TRO ER,ERRO ;GIVE "O" ERROR + 004350' 200000 000006 OPD: MOVE AC0,V ;PUT VALUE IN AC0 + 004351' 254000 004354' JRST OP + 004352' 205100 301117 IOP: MOVSI AC2,(POINT 9,0(PP),11) + 004353' 665600 000020 TLOA IO,IOIOPF ;SET "IOP SEEN" AND SKIP + 004354' 205100 270417 OP: MOVSI AC2,(POINT 4,0(PP),12) + 004355' 261740 000011 PUSH PP,RC + 004356' 261740 000000 PUSH PP,AC0 ;STACK CODE + 004357' 261740 000002 PUSH PP,AC2 + 004360' 260740 001070' PUSHJ PP,EVALEX ;EVALUATE FIRST EXPRESSION + 004361' 262740 000002 POP PP,AC2 + 004362' 325400 004374' JUMPNC OP2 + 004363' 260740 001354' OP1B: PUSHJ PP,GETCHR ;GET A CHARACTER + 004364' 321400 004605' JUMPCM XWD5 ;PROCESS COMMA COMMA IN XWD + 004365' 661600 000004 TLO IO,IORPTC ;NOT A COMMA,REPEAT IT + 004366' 135040 000002 LDB AC1,AC2 + 004367' 270040 000000 ADD AC1,AC0 + 004370' 137040 000002 DPB AC1,AC2 + 004371' 322440 004373' JUMPE RC,OP1A ;EXTERNAL OR RELOCATABLE? + 004372' 260740 003752' PUSHJ PP,QEXT ;YES, DETERMINE WHICH AND FLAG AN ERROR + + 004373' 260740 001070' OP1A: PUSHJ PP,EVALEX ;GET ADDRESS PART + 004374' 260740 004403' OP2: PUSHJ PP,EVADR ;EVALUATE STANDARD ADDRESS + 004375' 262740 000000 OP3: POP PP,AC0 ;PUT IN AC0 + 004376' 262740 000011 POP PP,RC + 004377' 332017 000000 SKIPE (PP) ;CAME FROM EVALCM? + 004400' 254000 002665' JRST STOW ;NO,STOW CODE AND EXIT + 004401' 262740 000001 POP PP,AC1 ;YES,EXIT IMMEDIATELY + 004402' 263740 000000 POPJ PP, + + MACRO V.10 PAGE 82 + PSEUDO-OP HANDLERS + + 004403' EVADR: ;EVALUATE STANDARD ADDRESS + 004403' 607000 777777 IFE IIISW,<TLNN AC0,-1 ;OK IF ALL 0'S + 004404' 254000 004410' JRST .+4 ;IT WAS + 004405' 641000 777777 TLC AC0,-1 ;CHANGE ALL ONES TO ZEROS + 004406' 643000 777777 TLCE AC0,-1 ;OK IF ALL 1'S + 004407' 660600 200000 TRO ER,ERRQ ;NO,FLAG Q ERROR> + 004410' 270017 777777 ADD AC0,-1(PP) ;ADD ADDRESS PORTIONS + 004411' 500017 777777 HLL AC0,-1(PP) ;GET LEFT HALF + 004412' 623640 020000 TLZE FR,INDSW ;INDIRECT BIT? + 004413' 661000 000020 TLO AC0,(Z @) ;YES, PUT IT IN + 004414' 202017 777777 MOVEM AC0,-1(PP) ;RE-STACK CODE + 004415' 270457 777776 ADD RC,-2(PP) ;UPDATE RELOCATION + 004416' 542457 777776 HRRM RC,-2(PP) ;USE HALF WORD ADD + 004417' 302340 000010 CAIE C,10 ;"("? + 004420' 263740 000000 POPJ PP, ;NO, EXIT + + 004421' 207000 013270' MOVSS EXTPNT ;WFW + 004422' 260740 001057' PUSHJ PP,EVALCM ;EVALUATE + 004423' 207000 013270' MOVSS EXTPNT ;WFW + 004424' 207300 000000 MOVSS V,AC0 ;SWAP HALVES + 004425' 207200 000011 IFE IIISW,<MOVSS SX,RC + 004426' 434200 000006 IOR SX,V ;MERGE RELOCATION + 004427' 606200 777777 TRNN SX,-1 ;RIGHT HALF ZERO? + 004430' 254000 004442' JRST OP2A ;YES, DO SIMPLE ADD + 004431' 200240 000011 MOVE ARG,RC ;NO, SWAP RC INTO ARG> + IFN IIISW,<MOVSS ARG,RC> + 004432' 270317 777777 ADD V,-1(PP) ;ADD RIGHT HALVES + 004433' 270257 777776 ADD ARG,-2(PP) + 004434' 542317 777777 HRRM V,-1(PP) ;UPDATE WITHOUT CARRY + 004435' 542257 777776 HRRM ARG,-2(PP) + 004436' 513000 000000 HLLZS AC0 ;PREPARE LEFT HALVES + 004437' 513000 000011 HLLZS RC + 004440' 603200 777777 IFE IIISW,<TLNE SX,-1 ;IS LEFT HALF ZERO? + 004441' 660600 200000 TRO ER,ERRQ ;NO FLAG FORMAT ERROR + 004442' 603440 777777 OP2A: TLNE RC,-1 ;RELOCATION FOR LEFT HALF? + 004443' 260740 004455' PUSHJ PP,OP2A1 ;YES,IS IT LEGAL? + 004444' 603000 777000 TLNE AC0,777000 ;OP CODE FIELD USED? + JRST [EXCH AC0,-1(PP);YES, GET STORED CODE + TLNE AC0,777000 ;OP CODE FIELD BEEN SET? + TRO ER,ERRQ ;YES, MOST LIKELY AN ERROR + EXCH AC0,-1(PP) + 004445' 254000 014226' JRST .+1] ;RETURN TO ADD > + 004446' 272017 777777 ADDM AC0,-1(PP) ;MERGE WITH PREVIOUS VALUE + 004447' 272457 777776 ADDM RC,-2(PP) + 004450' 302340 000011 CAIE C,11 ;")"? + 004451' 254000 003311' JRST ERRAX ;NO, FLAG ERROR + ;YES, BYPASS PARENTHESIS + 004452' BYPASS: + 004452' 260740 001354' BYPAS1: PUSHJ PP,GETCHR + 004453' 322340 004452' BYPAS2: JUMPE C,.-1 ;SKIP TRAILING BLANKS + 004454' 263740 000000 POPJ PP, ;EXIT + + MACRO V.10 PAGE 83 + PSEUDO-OP HANDLERS + + IFE IIISW,< + 004455' 250457 777776 OP2A1: EXCH RC,-2(PP) ;GET STORED CODE + 004456' 607440 777777 TLNN RC,-1 ;OK IF ALL ZERO + 004457' 254000 004463' JRST OP2A2 ;OK SO RETURN + 004460' 641440 777777 TLC RC,-1 ;CHANGE ALL ONES TO ZEROS + 004461' 643440 777777 TLCE RC,-1 ;OK IF ALL ONES + 004462' 660600 200000 TRO ER,ERRQ ;OTHERWISE A "Q" ERROR + 004463' 250457 777776 OP2A2: EXCH RC,-2(PP) ;GET RC,BACK + 004464' 263740 000000 POPJ PP, ;AND RETURN> + + + 004465' 514000 000015 EXPRES: HRLZ AC0,RX ;FUDGE FOR OCT0 + + 004466' 261740 000015 OCT0: PUSH PP,RX + 004467' 544640 000000 HLR RX,AC0 + 004470' 260740 001070' OCT1: PUSHJ PP,EVALEX ;EVALUATE + 004471' 260740 002665' PUSHJ PP,STOW ;STOW CODE + 004472' 321400 004470' JUMPCM OCT1 + 004473' 262740 000015 POP PP,RX ;YES, RESTORE RADIX + 004474' 263740 000000 POPJ PP, ;EXIT + MACRO V.10 PAGE 84 + PSEUDO-OP HANDLERS + + 004475' 205440 440600 SIXB10: MOVSI RC,(POINT 6,AC0) ;SET UP POINTER + 004476' 201000 000000 MOVEI AC0,0 ;CLEAR WORD + + 004477' 260740 001436' SIXB20: PUSHJ PP,CHARL ;GET NEXT CHARACTER + 004500' 316340 000004 CAMN C,SX ;IS THIS PRESET DELIMITER? + 004501' 254000 004553' JRST ASC60 ;YES + 004502' 301340 000141 CAIL C,"A"+40 + 004503' 303340 000172 CAILE C,"Z"+40 + 004504' 254000 004506' JRST .+2 + 004505' 624340 000100 TRZA C,100 ;CONVERT LOWER CASE TO SIXBIT + 004506' 275340 000040 SUBI C,40 ;CONVERT TO SIXBIT + 004507' 321340 004550' JUMPL C,ASC55 ;TEST FOR INVALID CHARACTER + 004510' 136340 000011 IDPB C,RC ;NO, DEPOSIT THE BYTE + 004511' 603440 770000 TLNE RC,770000 ;IS THE WORD FULL? + 004512' 254000 004477' JRST SIXB20 ;NO, GET NEXT CHARACTER + 004513' 260740 002664' PUSHJ PP,STOWZ ;YES, STORE + 004514' 254000 004475' JRST SIXB10 ;GET NEXT WORD + MACRO V.10 PAGE 85 + PSEUDO-OP HANDLERS + + 004515' 510140 000000 ASCII0: HLLZ SDEL,AC0 ;STORE ASCII/ASCIZ FLAG + 004516' 260740 001436' ASC10: PUSHJ PP,CHARL ;GET FIRST NON-BLANK + 004517' 302340 000040 CAIE C," " + 004520' 306340 000011 CAIN C,HT + 004521' 254000 004516' JRST ASC10 + 004522' 307340 000015 CAIG C,CR ;CHECK FOR CRRET AS DELIM + 004523' 305340 000012 CAIGE C,LF + 004524' 334200 013415' SKIPA SX,SEQNO2 + 004525' 254000 003311' JRST ERRAX + 004526' 202200 013310' MOVEM SX,TXTSEQ ;SAVE SEQ AND PAGE + 004527' 200200 013414' MOVE SX,PAGENO + 004530' 202200 013307' MOVEM SX,TXTPG + 004531' 476000 013274' SETOM INTXT + 004532' 200200 000007 MOVE SX,C ;SAVE FOR COMPARISON + 004533' 327140 004475' JUMPG SDEL,SIXB10 ;BRANCH IF SIXBIT + + 004534' 205440 440700 ASC20: MOVSI RC,(POINT 7,AC0) ;SET UP POINTER + 004535' 603140 200000 TLNE SDEL,200000 ;THIS BIT (AND BIT0) IN FOR COMMENT + 004536' 205440 440000 MOVSI RC,440000 ;SO NOTHING WILL BE DEPOSITED + 004537' 201000 000000 IFE IIISW,<MOVEI AC0,0 ;CLEAR WORD> + IFN IIISW,<TLNE SDEL,100000 ;ASCID? + TLZA SDEL,400000 ;YES, ZERO ASCIZ BIT + TDZA AC0,AC0 ;NO, ZERO WORD + MOVE AC0,[BYTE (7) 10,10,10,10,10 (1) 1] ;YES, A WORD FULL OF BACKSPACES + > + 004540' 260740 001436' ASC30: PUSHJ PP,CHARL ;GET ASCII CHARACTER AND LIST + 004541' 316340 000004 CAMN C,SX ;TEST FOR DELIMITER + 004542' 254000 004551' JRST ASC50 ;FOUND + 004543' 136340 000011 IDPB C,RC ;DEPOSIT BYTE + 004544' 603440 760000 TLNE RC,760000 ;HAVE WE FINISHED WORD? + 004545' 254000 004540' JRST ASC30 ;NO,GET NEXT CHARACTER + 004546' 260740 002664' PUSHJ PP,STOWZ ;YES, STOW IT + 004547' 254000 004534' JRST ASC20 ;GET NEXT WORD + + 004550' 634400 000010 ASC55: TDZA CS,CS ;ZERO CS IN CASE NESTED + 004551' 634440 000003 ASC50: TDZA RC,SDEL ;TEST FOR ASCIIZ + 004552' 664600 040000 TROA ER,ERRA ;SIXBIT ERROR EXIT + 004553' 260740 004452' ASC60: PUSHJ PP,BYPAS1 ;POLISH OFF TERMINATOR + 004554' 402000 013274' SETZM INTXT ;WE ARE OUT OF IT + IFN IIISW,<TLNN SDEL,100000 ;NO EXTRA WORDS FOR ASCID> + 004555' 420440 013104' ANDCM RC,STPX ;STORE AT LEAST ONE WORD + 004556' 607140 200000 TLNN SDEL,200000 ;GET OUT WITHOUT STORING + 004557' 325440 002664' JUMPGE RC,STOWZ ;STOW + 004560' 263740 000000 POPJ PP, ;ASCII, NO BYTES STORED, SO EXIT + MACRO V.10 PAGE 86 + PSEUDO-OP HANDLERS + + 004561' POINT0: + 004561' 261740 000011 PUSH PP,RC ;STACK REGISTERS + 004562' 261740 000000 PUSH PP,AC0 + 004563' 260740 003745' PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + 004564' 137000 014233' DPB AC0,[POINT 6,0(PP),11] ;STORE BYTE SIZE + 004565' 325400 004574' JUMPNC POINT2 + 004566' 260740 001070' PUSHJ PP,EVALEX ;NO, GET ADDRESS + 004567' 260740 004403' PUSHJ PP,EVADR ;EVALUATE STANDARD ADDRESS + 004570' 325400 004574' JUMPNC POINT2 + 004571' 260740 003745' PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + 004572' 603600 020000 TLNE IO,NUMSW ;IF NUMERIC + 004573' 654000 014062' TDCA AC0,[-1] ;POSITION=D35-RHB + 004574' 201000 000000 POINT2: MOVEI AC0,0 ;OTHERWISE SET TO D36 + 004575' 271000 000044 ADDI AC0,^D36 + 004576' 242000 000036 LSH AC0,^D30 + 004577' 272017 000000 ADDM AC0,0(PP) ;UPDATE VALUE + 004600' 254000 004375' JRST OP3 + MACRO V.10 PAGE 87 + PSEUDO-OP HANDLERS + + 004601' XWD0: + 004601' 261740 000011 PUSH PP,RC + 004602' 261740 000000 PUSH PP,AC0 ;STORE ZERO ON STACK + 004603' 260740 001070' PUSHJ PP,EVALEX ;EVALUATE EXPRESSION + 004604' 325400 004374' JUMPNC OP2 + 004605' 336017 000000 XWD5: SKIPN (PP) ;ANY CODE YET? + 004606' 254000 004613' JRST XWD10 ;NO,USE VALUE IN AC0 + 004607' 322000 004611' JUMPE AC0,.+2 ;ANYTHING IN AC0? + 004610' 660600 200000 TRO ER,ERRQ ;YES,FLAG "Q"ERROR + 004611' 200017 000000 MOVE AC0,(PP) ;USE PREVIOUS VALUE + 004612' 200457 777777 MOVE RC,-1(PP) ;AND RELOCATION + 004613' 516017 000000 XWD10: HRLZM AC0,0(PP) ;SET LEFT HALF + 004614' 516457 777777 HRLZM RC,-1(PP) + 004615' 207000 013270' MOVSS EXTPNT ;WFW + 004616' 254000 004373' JRST OP1A ;EXIT THROUGH OP + + 004617' 260740 003757' IOWD0: PUSHJ PP,EVALXQ ;EVALUATE AND TEST FOR EXTERNAL + 004620' 302340 000014 CAIE C,14 ;","? + JRST [SKIPN AC0 ;IF NZERO AND NO "," SEEN + TRO ER,ERRQ ;TREAT AS Q ERROR + 004621' 254000 014234' SOJA AC0,STOW] ;NO, TREAT AS RIGHT HALF + 004622' 261740 000000 PUSH PP,AC0 ;YES, STACK LEFT HALF + 004623' 260740 001070' PUSHJ PP,EVALEX ;WFW + 004624' 275000 000001 SUBI AC0,1 + 004625' 262740 000001 POP PP,AC1 ;RETRIEVE LEFT HALF + 004626' 213000 000001 MOVNS AC1 + 004627' 504000 000001 HRL AC0,AC1 + 004630' 254000 002665' JRST STOW ;STOW CODE AND EXIT + MACRO V.10 PAGE 88 + PSEUDO-OP HANDLERS + + 004631' 260740 004452' BYTE0: PUSHJ PP,BYPASS ;GET FIRST NON-BLANK + 004632' 302340 000010 CAIE C,10 ;"("? + 004633' 254000 003311' JRST ERRAX ;NO, FLAG ERROR AND EXIT + 004634' 261740 000011 PUSH PP,RC + 004635' 261740 000000 PUSH PP,AC0 ;INITIALIZE STACK TO ZERO + 004636' 205240 447717 MOVSI ARG,(POINT -1,(PP)) + + 004637' 261740 000005 BYTE1: PUSH PP,ARG + 004640' 260740 003745' PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + 004641' 262740 000005 POP PP,ARG + 004642' 307000 000044 CAIG AC0,^D36 ;TEST SIZE + 004643' 325000 004645' JUMPGE AC0,.+2 + 004644' 660600 040000 TRO ER,ERRA + 004645' 137000 014237' DPB AC0,[POINT 6,ARG,11] ;STORE BYTE SIZE + + 004646' 133000 000005 BYTE2: IBP ARG ;INCREMENT BYTE + 004647' 626240 777777 TRZN ARG,-1 ;OVERFLOW? + 004650' 254000 004655' JRST BYTE3 ;NO + 004651' 403000 000011 SETZB AC0,RC ;YES + 004652' 250017 000000 EXCH AC0,0(PP) ;GET CURRENT VALUES + 004653' 250457 777777 EXCH RC,-1(PP) ;AND STACK ZEROS + 004654' 260740 002665' PUSHJ PP,STOW ;STOW FULL WORD + + 004655' 261740 000005 BYTE3: PUSH PP,ARG + 004656' 260740 001070' PUSHJ PP,EVALEX ;COMPUTE NEXT BYTE + 004657' 262740 000005 POP PP,ARG + 004660' 137000 000005 DPB AC0,ARG ;STORE BYTE + 004661' 520000 000005 HLLO AC0,ARG + 004662' 137440 000000 DPB RC,AC0 ;STORE RELOCATION + + 004663' 321400 004646' JUMPCM BYTE2 + 004664' 306340 000010 CAIN C,10 ;"("? + 004665' 254000 004637' JRST BYTE1 ;YES, GET NEW BYTE SIZE + 004666' 254000 004375' JRST OP3 ;NO, EXIT + MACRO V.10 PAGE 89 + PSEUDO-OP HANDLERS + + 004667' 260740 001070' RADX50: PUSHJ PP,EVALEX ;EVALUATE CODE + 004670' 326440 003311' JUMPN RC,ERRAX ;ERROR IF NOT ABSOLUTE + 004671' 200240 000000 MOVE ARG,AC0 + 004672' 325400 003311' JUMPNC ERRAX + 004673' 260740 001034' PUSHJ PP,GETSYM ;YES, GET SYMBOL + 004674' 620600 040000 TRZ ER,ERRA ;CLEAR ERROR + 004675' 260740 004677' PUSHJ PP,SQOZE ;SQUOZE SIXBIT AND ADD CODE + 004676' 254000 002665' JRST STOW ;STOW CODE AND EXIT + + + 004677' 200100 000000 SQOZE: MOVE AC1+1,AC0 ;PUT SIXBIT IN AC1+1 + 004700' 201000 000000 MOVEI AC0,0 ;CLEAR RESULT + 004701' 201040 000000 SQOZ1: MOVEI AC1,0 + 004702' 246040 000006 LSHC AC1,6 ;PUT 6-BIT CHARACTER IN AC1 + 004703' 135040 014240' LDB AC1,[POINT 6,CSTAT(AC1),23] ;CONVERT TO RADIX50 + 004704' 221000 000050 IMULI AC0,50 ;MULTIPLY PREVIOUS RESULT + 004705' 270000 000001 ADD AC0,AC1 ;ADD NEW CHARACTER + 004706' 326100 004701' JUMPN AC1+1,SQOZ1 ;TEST FOR END + 004707' 242240 000036 LSH ARG,^D30 ;LEFT-JUSTIFY CODE + 004710' 434000 000005 IOR AC0,ARG ;MERGE WITH RESULT + 004711' 263740 000000 POPJ PP, + + MACRO V.10 PAGE 90 + PSEUDO-OP HANDLERS + + ; PSEUDO-END STATEMENT FOR MULTI-FILE CAPABILITY + + ; HERE IF PRGEND (PASS 1) + 004712' 661600 000010 PSEND0: TLO IO,MFLSW ;PSEND SEEN + 004713' 260740 003037' PUSHJ PP,END0 ;AS IF END STATEMENT + 004714' 513000 000014 HLLZS IO ;CLEAR ER(RH) + 004715' 402000 012726' SETZM ERRCNT ;CLEAR ERROR COUNT FOR EACH PROG. + 004716' 325640 004724' JUMP2 PSEND2 ;DIFFERENT ON PASS2 + IFN UNIVR,<SKIPE UNIVSN ;SEEN A UNIVERSAL + PUSHJ PP,UNISYM ;YES, STORE SYMBOLS> + 004717' 260740 004734' PUSHJ PP,PSEND4 ;SAVE SYMBOLS, POINTERS AND TITLE + 004720' 621600 000002 TLZ IO,IOTLSN ;CLEAR TITLE SEEN FLAG + 004721' 621600 000010 PSEND1: TLZ IO,MFLSW ;FOR NEXT FILE + IFN UNIVR,<SETZM UNISCH ;CLEAR UNIVERSAL SEARCH TABLE + MOVE AC0,[UNISCH,,UNISCH+1] + BLT AC0,UNISCH+.UNIV-1 + PUSHJ PP,OUTFF ;RESET PAGE COUNT> + 004722' 205000 000001 MOVSI AC0,1 ;SET SO RELOC 0 WORKS + 004723' 254000 004133' JRST LOC10 ;FOR RELOC 0 + + ; HERE IF PRGEND (PASS 2) + 004724' 402000 013057' PSEND2: SETZM SBUF ;SO SUBTTL IS NOT WRONG + 004725' 260740 005016' PUSHJ PP,PSEND5 ;PUT TITLE BACK + 004726' 260740 004721' PUSHJ PP,PSEND1 ;COMMON CODE + 004727' 254000 003066' JRST PASS20 ;OUTPUT THE ENTRIES + + ; HERE IF END (PASS 1) + 004730' 260740 004734' PSEND3: PUSHJ PP,PSEND4 ;SAVE LAST PROGRAM + 004731' 547000 013260' HLRS PRGPTR ;REINITIALIZE POINTER + 004732' 260740 005016' PUSHJ PP,PSEND5 ;READ BACK FIRST PROGRAM + 004733' 254000 003066' JRST PASS20 + MACRO V.10 PAGE 91 + PSEUDO-OP HANDLERS + + ;HERE TO SAVE AND RESTORE SYMBOL TABLE, TITLE AND OTHER USEFUL LOCATIONS + 000004 XTRA==4 ;NUMBER OF OTHER LOCATIONS TO SAVE + + 004734' 200300 012727' PSEND4: MOVE V,FREE ;GET NEXT FREE LOCATION + 004735' 271300 000030 ADDI V,LENGTH+.TBUF/5+XTRA + 004736' 311300 013102' CAML V,SYMBOL ;WILL WORST CASE FIT? + 004737' 260740 010015' PUSHJ PP,XCEED ;NO, EXPAND + 004740' 204300 012727' MOVS V,FREE + 004741' 540300 013260' HRR V,PRGPTR ;LAST PRGEND BLOCK + 004742' 546306 000000 HLRM V,(V) ;LINK THIS BLOCK + 004743' 336000 013260' SKIPN PRGPTR ;IF FIRST TIME + 004744' 512300 013260' HLLZM V,PRGPTR ;SET LINK TO START OF CHAIN + 004745' 546300 013260' HLRM V,PRGPTR ;POINTER TO IT + 004746' 402020 012727' SETZM @FREE ;CLEAR LINK WORD + 004747' 350000 012727' AOS FREE ;THIS LOCATION USED NOW + 004750' 204000 013102' MOVS AC0,SYMBOL ;BOTTOM OF SYMBOL TABLE + 004751' 540000 012727' HRR AC0,FREE ;FREE SPACE + 004752' 200320 013102' MOVE V,@SYMBOL ;GET NUMBER OF SYMBOLS + 004753' 240300 000001 ASH V,1 ;TWO WORDS PER SYMBOL + 004754' 271300 000001 ADDI V,1 ;ONE MORE FOR COUNT + 004755' 273300 012727' ADDB V,FREE ;END OF TABLE WHEN MOVED + 004756' 251006 000000 BLT AC0,(V) ;MOVE TABLE + 004757' 550000 003227* HRRZ AC0,JOBREL ;TOP OF CORE + 004760' 275000 000001 SUBI AC0,1 + 004761' 202000 013103' MOVEM AC0,SYMTOP ;FOR NEXT SYMBOL TABLE + 004762' 275000 000004 SUBI AC0,LENGTH ;LENGTH OF INITIAL SYMBOLS + 004763' 202000 013102' MOVEM AC0,SYMBOL ;SET POINTER TO COUNT OF SYMBOLS + 004764' 505000 011713' HRLI AC0,SYMNUM ;BLT POINTER + 004765' 251020 013103' BLT AC0,@SYMTOP ;SET UP INITIAL SYMBOL TABLE + 004766' 260740 012455' PUSHJ PP,SRCHI ;SET UP SEARCH POINTER + 004767' 201000 000120 MOVEI AC0,.TBUF ;MAX NUMBER OF CHARS. IN TITLE + 004770' 274000 013227' SUB AC0,TCNT ;ACTUAL NUMBER + 004771' 231000 000005 IDIVI AC0,5 ;NUMBER OF WORDS + 004772' 332000 000001 SKIPE AC1 ;REMAINDER? + 004773' 271000 000001 ADDI AC0,1 ;YES + 004774' 202020 012727' MOVEM AC0,@FREE ;STORE COUNT + 004775' 350000 012727' AOS FREE ;THIS LOCATION USED NOW + 004776' 250000 012727' EXCH AC0,FREE ;SET UP AC0 FOR BLT + 004777' 272000 012727' ADDM AC0,FREE ;WILL BE AFTER TITLE MOVES + 005000' 505000 013230' HRLI AC0,TBUF ;BLT POINTER + 005001' 251020 012727' BLT AC0,@FREE ;MOVE TITLE + 005002' 200100 013035' MOVE AC2,LITHDX ;POINTER TO LIT INFO. + 005003' 200002 777777 MOVE AC0,-1(AC2) ;SIZE OF PASS1 LOCO + 005004' 260740 005061' PUSHJ PP,STORIT ;SAVE IT IN SYMBOL TABLE + 005005' 200100 013030' MOVE AC2,VARHDX ;SAME FOR VARS + 005006' 200002 777777 MOVE AC0,-1(AC2) + 005007' 260740 005061' PUSHJ PP,STORIT + IFN RENTSW,< + MOVE AC0,HISNSW ;GET TWOSEG/HISEG FLAG + HRR AC0,HIGH1 ;AND PASS1 BREAK + PUSHJ PP,STORIT + JUMPGE AC0,PSEND6 ;NOT TWOSEG + MOVE AC0,SVTYP3 ;HIGH SEGMENT OFFSET + MACRO V.10 PAGE 91-1 + PSEUDO-OP HANDLERS + + PUSHJ PP,STORIT ;SAVE IT ALSO> + 005010' 200000 012727' PSEND6: MOVE AC0,FREE ;GET NEXT FREE LOCATION + 005011' 275000 000001 SUBI AC0,1 ;LAST ONE USED + 005012' 550300 013260' HRRZ V,PRGPTR ;POINTER TO START OF DATA BLOCK + 005013' 506006 000000 HRLM AC0,(V) ;LINK TO END OF BLOCK + 005014' 263740 000000 POPJ PP, ;RETURN + + MACRO V.10 PAGE 92 + PSEUDO-OP HANDLERS + + 005015' 260740 010015' PSENDX: PUSHJ PP,XCEED ;NEED TO EXPAND CORE FIRST + 005016' 550000 004757* PSEND5: HRRZ AC0,JOBREL ;GET TOP OF CORE + 005017' 275000 000001 SUBI AC0,1 + 005020' 202000 013103' MOVEM AC0,SYMTOP ;TOP OF NEW SYMBOL TABLE + 005021' 550300 013260' HRRZ V,PRGPTR ;ADDRESS OF THIS BLOCK + 005022' 322300 005066' JUMPE V,PSNDER ;ERROR LINK NOT SET UP + 005023' 200046 000000 MOVE AC1,(V) ;NEXT LINK + 005024' 200306 000001 MOVE V,1(V) ;GET ITS SYMBOL COUNT + 005025' 240300 000001 ASH V,1 ;NUMBER OF WORDS + 005026' 271300 000001 ADDI V,1 ;PLUS ONE FOR COUNT + 005027' 275006 000000 SUBI AC0,(V) ;START OF NEW SYMBOL TABLE + 005030' 317000 012727' CAMG AC0,FREE ;WILL IT FIT + 005031' 254000 005015' JRST PSENDX ;NO, NEED TO EXPAND AND RESET AC0 + 005032' 270300 013260' ADD V,PRGPTR ;POINT TO END OF SYMBOL TABLE + 005033' 201306 000001 MOVEI V,1(V) ;THEN TO BEG OF TITLE + 005034' 202000 013102' MOVEM AC0,SYMBOL ;BOTTOM OF NEW TABLE + 005035' 504000 013260' HRL AC0,PRGPTR ;ADDRESS OF FIRST WORD OF BLOCK + 005036' 270000 014241' ADD AC0,[1,,0] ;MAKE BLT POINTER + 005037' 542040 013260' HRRM AC1,PRGPTR ;POINT TO NEXT BLOCK + 005040' 251020 013103' BLT AC0,@SYMTOP ;MOVE TABLE + 005041' 260740 012455' PUSHJ PP,SRCHI ;SET UP POINTER + 005042' 200046 000000 MOVE AC1,(V) ;NUMBER OF WORDS OF TITLE + 005043' 201006 000001 MOVEI AC0,1(V) ;START OF STORED TITLE + 005044' 270300 000001 ADD V,AC1 ;INCREMENT PAST TITLE + 005045' 271040 013227' ADDI AC1,TBUF-1 ;END OF TITLE + 005046' 505000 013230' HRLI AC0,TBUF ;WHERE TO PUT IT + 005047' 207000 000000 MOVSS AC0 ;BLT POINTER + 005050' 251001 000000 BLT AC0,(AC1) ;MOVE TITLE + 005051' 661600 000002 TLO IO,IOTLSN ;SET AS IF TITLE SEEN + 005052' 200100 013035' MOVE AC2,LITHDX ;INVERSE OF ABOVE + 005053' 260740 005064' PUSHJ PP,GETIT + 005054' 202002 777777 MOVEM AC0,-1(AC2) + 005055' 200100 013030' MOVE AC2,VARHDX ;SAME FOR VARS + 005056' 260740 005064' PUSHJ PP,GETIT + 005057' 202002 777777 MOVEM AC0,-1(AC2) + IFN RENTSW,< + PUSHJ PP,GETIT ;GET TWO HALF WORDS + HRRZM AC0,HIGH1 ;PASS1 BREAK + HLLEM AC0,HISNSW ;TWOSEG/HISEG FLAG + JUMPGE AC0,CPOPJ ;NOT TWOSEG + PUSHJ PP,GETIT + MOVEM AC0,SVTYP3 ;BLOCK 3 WORD> + 005060' 263740 000000 POPJ PP, + + 005061' 202020 012727' STORIT: MOVEM AC0,@FREE ;STORE IT IN DATA BLOCK + 005062' 350000 012727' AOS FREE ;ADVANCE POINTER + 005063' 263740 000000 POPJ PP, + + 005064' 200006 000001 GETIT: MOVE AC0,1(V) ;FILL AC0 OUT OF PRGEND BLOCK + 005065' 344300 003360' AOJA V,CPOPJ ;INCREMENT AND RETURN + + 005066' 561440 014242' PSNDER: HRROI RC,[SIXBIT /PRGEND ERROR @/] + 005067' 254000 007714' JRST ERRFIN + MACRO V.10 PAGE 93 + PSEUDO-OP HANDLERS + + ;MULTIPLE SYMBOL TABLE FEATURE PSEUDO-OPS + + IFN UNIVR,< + UNIV0: JUMP2 TITLE0 ;DO IT ALL ON PASS 1 + HRRZ SX,UNIVNO ;GET NUMBER OF UNIVERSALS SEEN + CAIL SX,.UNIV ;ALLOW ONE MORE? + JRST UNVERR ;NO, GIVE FATAL ERROR + AOS UNIVNO ;ONE MORE NOW + SETOM UNIVSN ;AND SET SEEN A UNIVERSAL + JRST TITLE0 ;CONTINUE AS IF TITLE + + + ADDUNV: PUSH PP,RC ;AN AC TO USE + PUSHJ PP,NOUT ;CONVERT TO SIXBIT + HRRZ RC,UNIVNO ;GET ENTRY INDEX + MOVEM AC0,UNITBL(RC) ;STORE SIXBIT NAME IN TABLE + HRRZS UNIVSN ;ONLY DO IT ONCE + POP PP,RC ;RESTORE RC + POPJ PP, ;AND RETURN + + UNVERR: HRROI RC,[SIXBIT /TOO MANY UNIVERSALS@/] + JRST ERRFIN + + UNISYM: HRRZ AC0,FREE ;GET HIGHEST FREE LOCATION + MOVEM AC0,JOBFF ;INTO JOBFF + PUSHJ PP,SUPRSA ;TURN ON SUPPRESS BIT + PUSH PP,SYMBOL ;NEED TO SAVE INCASE PRGEND + MOVE AC0,SYMTOP ;TOP OF TABLE + SUB AC0,SYMBOL ;GET LENGTH OF TABLE + HRL ARG,SYMBOL ;BOTTOM OF TABLE + HRR ARG,JOBFF ;WHERE TO GO + HRRZ RC,UNIVNO ;GET TABLE INDEX + HRRM ARG,SYMBOL ;WILL BE THERE SOON + HRRZM ARG,UNIPTR(RC) ;STORE IN CORRESPONDING PLACE + ADDB AC0,JOBFF ;WHERE TO END + HRLM AC0,UNIPTR(RC) ;SAVE NEW SYMTOP + BLT ARG,@JOBFF ;MOVE TABLE + HRRZM AC0,UNITOP ;SAVE TOP OF TABLES+1 + CAMLE AC0,MACSIZ ;IN CASE OVER A K BOUND + MOVEM AC0,MACSIZ ;DON'T REDUCE SO FAR NOW + MOVEM AC0,FREE ;JUST IN CASE IN MACRO + MOVE AC0,SRCHX ;SAVE OLD SEARCH POINTER + PUSHJ PP,SRCHI ;GET SEARCH POINTER + EXCH AC0,SRCHX + MOVEM AC0,UNISHX(RC) ;SAVE IT + SETZM UNIVSN ;CLEAR FLAG INCASE PRGEND + POP PP,SYMBOL ;RESTORE OLD VALUE + POPJ PP, ;RETURN + + MACRO V.10 PAGE 94 + PSEUDO-OP HANDLERS + + SERCH0: PUSHJ PP,GETSYM ;GET A SYMBOL + JRST ERRAX ;ERROR IF NOT VALID + MOVEI RC,1 ;START AT ENTRY ONE + CAIL RC,.UNIV ;CHECK FOR CONSISTENCY ERROR + JRST SCHERR ;CANNOT FIND THIS ONE + CAME AC0,UNITBL(RC) ;LOOK FOR MATCH + AOJA RC,.-3 ;NOT FOUND YET + MOVE AC0,RC ;STORE TABLE ENTRY NUMBER + MOVEI RC,1 ;START AT ENTRY ONE + CAIL RC,.UNIV ;CHECK FOR CONSISTENCY ERROR + JRST SCHERR ;SHOULD NEVER HAPPEN!! + SKIPE UNISCH(RC) ;LOOK FOR AN EMPTY SLOT + AOJA RC,.-3 ;NOT FOUND YET + MOVEM AC0,UNISCH(RC) ;STORE INDEX IN TABLE + JUMPCM SERCH0 ;LOOK FOR MORE NAMES + POPJ PP, ;FINISHED + + SCHERR: MOVSI RC,[SIXBIT /CANNOT FIND UNIVERSAL@/] + JRST ERRFIN ;NAME IN AC0 + + ;MESSAGE FOR CASE WHERE FILES AFTER UNIVERSAL USED MORE BUFFER SPACE THAN FIRST UNIVERS + AL + UNIERR: HRROI RC,[SIXBIT /UNIVERSAL PROGRAM(S) MUST HAVE SAME OUTPUT SPECIFICATION AS + OTHER FILES@/] + JRST ERRFIN + > + MACRO V.10 PAGE 95 + MACRO/REPEAT HANDLERS + + SUBTTL MACRO/REPEAT HANDLERS + + 005070' 260740 003757' REPEA0: PUSHJ PP,EVALXQ ;EVALUATE REPEAT EXP, EXTERNS ARE ILL. + 005071' 325400 003311' JUMPNC ERRAX + + 005072' 323000 005152' REPEA1: JUMPLE AC0,REPZ ;PASS THE EXP., DONT PROCESS + 005073' 362000 005171' SOJE AC0,REPO ;REPEAT ONCE + 005074' 260740 006254' REPEA2: PUSHJ PP,GCHARQ ;GET STARTING "<" + 005075' 302340 000074 CAIE C,"<" + 005076' 254000 005074' JRST REPEA2 + 005077' 260740 006217' PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + 005100' 261700 013346' PUSH MP,REPEXP + 005101' 202000 013346' MOVEM AC0,REPEXP + 005102' 261700 013347' PUSH MP,REPPNT ;STACK PREVIOUS REPEAT POINTER + 005103' 202240 013347' MOVEM ARG,REPPNT ;STORE NEW POINTER + 005104' 634140 000003 TDZA SDEL,SDEL ;YES, INITIALIZE BRACKET COUNT AND SKIP + + 005105' 260740 006262' REPEA4: PUSHJ PP,WCHARQ ;WRITE A CHARACTER + 005106' 260740 006254' PUSHJ PP,GCHARQ ;GET A CHARACTER + 005107' 306340 000074 CAIN C,"<" ;"<"? + 005110' 344140 005105' AOJA SDEL,REPEA4 ;YES, INCREMENT AND WRITE + 005111' 302340 000076 CAIE C,">" ;">"? + 005112' 254000 005105' JRST REPEA4 ;NO, WRITE THE CHARACTER + 005113' 365140 005105' SOJGE SDEL,REPEA4 ;YES, WRITE IF NON-NEGATIVE COUNT + 005114' 205400 774060 MOVSI CS,(BYTE (7) 177,3) ;SET "REPEAT" END + 005115' 260740 006272' PUSHJ PP,WWRXE ;WRITE END + 005116' 336000 013321' SKIPN LITLVL ;LITERAL MIGHT END ON LINE + 005117' 332000 013406' SKIPE MACLVL ;IF IN MACRO DARE NOT PROCESS + 005120' 254000 005123' JRST .+3 ;REST OF LINE SINCE MACRO MIGHT END ON IT + 005121' 260740 004452' PUSHJ PP,BYPASS ;BYPASS + 005122' 260740 000227' PUSHJ PP,STOUTS ;POLISH OF LINE BEFORE PROCESSING REPEAT + 005123' 261700 000013 PUSH MP,MRP ;STACK PREVIOUS READ POINTER + 005124' 261700 013411' PUSH MP,RCOUNT ;SAVE WORD COUNT + 005125' 550540 013347' HRRZ MRP,REPPNT ;SET UP READ POINTER + 005126' 336000 013406' SKIPN MACLVL ;IF IN MACRO GIVE CR-LF FIRST + 005127' 332000 013321' SKIPE LITLVL ;SAME FOR LITERAL + 005130' 254000 005132' JRST REPEA7 + 005131' 344540 000446' AOJA MRP,POPOUT ;BYPASS ARG COUNT + + 005132' 550540 013347' REPEA7: HRRZ MRP,REPPNT ;SET UP READ POINTER + 005133' 271540 000001 ADDI MRP,1 ;BYPASS ARG COUNT + 005134' 201340 000015 REPEA8: MOVEI C,CR + 005135' 254000 001412' JRST RSW1 + + 005136' 371000 013346' REPEND: SOSL REPEXP + 005137' 254000 005132' JRST REPEA7 + 005140' 550300 013347' HRRZ V,REPPNT ;GET START OF TREE + 005141' 260740 006352' PUSHJ PP,REFDEC ;DECREMENT REFERENCE + 005142' 262700 013411' POP MP,RCOUNT + 005143' 262700 000013 POP MP,MRP + 005144' 262700 013347' POP MP,REPPNT + 005145' 262700 013346' POP MP,REPEXP + 005146' 336000 013321' SKIPN LITLVL ;IF IN LITERAL OR + MACRO V.10 PAGE 95-1 + MACRO/REPEAT HANDLERS + + 005147' 332000 013406' SKIPE MACLVL ;IF IN MACRO + 005150' 254000 001410' JRST RSW0 ;FINISH OF LINE NOW + 005151' 254000 005134' JRST REPEA8 + + MACRO V.10 PAGE 96 + MACRO/REPEAT HANDLERS + + 005152' 200140 013415' REPZ: MOVE SDEL,SEQNO2 ;SAVE IN CASE OF END OF FILE + 005153' 202140 013306' MOVEM SDEL,REPSEQ + 005154' 200140 013414' MOVE SDEL,PAGENO + 005155' 202140 013305' MOVEM SDEL,REPPG + 005156' 476000 013272' SETOM INREP + 005157' 201140 000000 MOVEI SDEL,0 ;SET COUNT + 005160' 260740 006255' REPZ1: PUSHJ PP,GCHAR ;GET NEXT CHARACTER + 005161' 306340 000074 CAIN C,"<" ;"<"? + 005162' 344140 005160' AOJA SDEL,REPZ1 ;YES, INCREMENT COUNT + 005163' 306340 000076 CAIN C,">" ;">"? + 005164' 363140 005166' SOJLE SDEL,REPZ2 ;YES, EXIT IF MATCHING + 005165' 254000 005160' JRST REPZ1 ;NO, RECYCLE + 005166' 402000 013272' REPZ2: SETZM INREP ;FLAG OUT OF IT + 005167' 402000 013275' SETZM INCND ;AND CONDITIONAL ALSO + 005170' 254000 000125' JRST STMNT ;AND EXIT + + 005171' 260740 006255' REPO: PUSHJ PP,GCHAR ;GET "<" + 005172' 302340 000074 CAIE C,"<" + 005173' 254000 005171' JRST REPO + 005174' 332000 013350' SKIPE RPOLVL ;ARE WE NESTED? + 005175' 350000 013350' AOS RPOLVL ;YES, DECREMENT CURRENT + 005176' 261700 013350' PUSH MP,RPOLVL + 005177' 476000 013350' SETOM RPOLVL + 005200' 254000 000125' JRST STMNT + + 005201' 306340 000074 REPO1: CAIN C,"<" + 005202' 370000 013350' SOS RPOLVL + 005203' 306340 000076 CAIN C,">" + 005204' 352000 013350' AOSE RPOLVL + 005205' 254000 001414' JRST RSW2 + 005206' 262700 013350' POP MP,RPOLVL + 005207' 260740 001414' PUSHJ PP,RSW2 + 005210' 254000 001410' JRST RSW0 + MACRO V.10 PAGE 97 + MACRO/REPEAT HANDLERS + + 005211' 260740 001034' DEFIN0: PUSHJ PP,GETSYM ;GET MACRO NAME + 005212' 254000 003311' JRST ERRAX ;EXIT ON ERROR + 005213' 202740 013343' MOVEM PP,PPTMP1 ;SAVE POINTER + 005214' 202000 013344' MOVEM AC0,PPTMP2 ;SAVE NAME + 005215' 661600 000004 TLO IO,IORPTC + 005216' 200200 013415' MOVE SX,SEQNO2 ;SAVE IN CASE OF EOF + 005217' 202200 013302' MOVEM SX,DEFSEQ + 005220' 200200 013414' MOVE SX,PAGENO + 005221' 202200 013301' MOVEM SX,DEFPG + 005222' 476000 013273' SETOM INDEF ;AND FLAG IN DEFINE + SYN .TEMP,COMSW ;SAVE SPACE + 005223' 403200 013402' SETZB SX,COMSW ;SET ARGUMENT AND REFERENCE COUNT AND COMMENT SWITCH + 005224' 260740 006255' DEF02: PUSHJ PP,GCHAR ;SEARCH FOR "(" OR "<" + 005225' 307340 000014 CAIG C,FF ;SEARCH FOR END OF LINE + 005226' 305340 000012 CAIGE C,LF ;LF,VT, OR FF + 005227' 254000 005231' JRST .+2 ;WASN'T ANY OF THEM + 005230' 402000 013402' SETZM COMSW ;RESET COMMENT SWITCH + 005231' 306340 000073 CAIN C,";" ;COMMENT? + 005232' 476000 013402' SETOM COMSW ;YES, SET COMMENT SWITCH + 005233' 332000 013402' SKIPE COMSW ;INSIDE A COMMENT? + 005234' 254000 005224' JRST DEF02 ;YES, IGNORE CHARACTER + 005235' 306340 000074 CAIN C,"<" ;"<"? + 005236' 254000 005254' JRST DEF20 ;YES + 005237' 302340 000050 CAIE C,"(" ;"("? + 005240' 254000 005224' JRST DEF02 ;NO + 005241' 260740 001034' DEF10: PUSHJ PP,GETSYM ;YES, GET DUMMY SYMBOL + 005242' 660600 040000 TRO ER,ERRA ;FLAG ERROR + 005243' 271200 000001 ADDI SX,1 ;INCREMENT ARG COUNT + 005244' 261740 000000 PUSH PP,AC0 ;STACK IT + 005245' 306340 000034 CAIN C,'<' ;A DEFAULT ARGUMENT COMING UP? + 005246' 254000 005467' JRST DEF80 ;YES, STORE IT AWAY + 005247' 302340 000011 CAIE C,11 ;")"? + 005250' 254000 005241' JRST DEF10 ;NO, GET NEXT DUMMY SYMBOL + 005251' 260740 006255' DEF12: PUSHJ PP,GCHAR + 005252' 302340 000074 CAIE C,"<" ;"<"? + 005253' 254000 005251' JRST DEF12 ;NO + 005254' 261740 014100' DEF20: PUSH PP,[0] ;YES, MARK THE LIST + 005255' 242200 000011 LSH SX,9 ;SHIFT ARG COUNT + 005256' 350240 000004 AOS ARG,SX + 005257' 260740 006220' PUSHJ PP,SKELI ;INITIALIZE MACRO SKELETON + 005260' 200000 013344' MOVE AC0,PPTMP2 ;GET NAME + 005261' 661600 000040 TLO IO,DEFCRS + 005262' 260740 012173' PUSHJ PP,MSRCH ;SEARCH THE TABLE + 005263' 254000 005267' JRST DEF24 ;NOT FOUND + 005264' 607240 020000 TLNN ARG,MACF ;FOUND, IS IT A MACRO? + 005265' 664600 100000 TROA ER,ERRX ;NO, FLAG ERROR AND SKIP + 005266' 260740 006352' PUSHJ PP,REFDEC ;YES, DECREMENT THE REFERENCE + 005267' 550300 013410' DEF24: HRRZ V,WWRXX ;GET START OF TREE + 005270' 336000 013402' SKIPN .TEMP ;ANY DEFAULT ARGUMENTS TO TAKE CARE OF? + 005271' 254000 005317' JRST DEF25 ;NO + 005272' 550346 000001 HRRZ C,1(V) ;GET SHIFTED ARG COUNT + 005273' 242340 777767 LSH C,-9 ;GET ARG COUNT BACK + 005274' 271340 000001 ADDI C,1 ;ONE MORE FOR TERMINAL ZERO + MACRO V.10 PAGE 97-1 + MACRO/REPEAT HANDLERS + + 005275' 270340 013402' ADD C,.TEMP ;NUMBER OF ITEMS IN STACK + 005276' 507000 000007 HRLS C ;MAKE XWD + 005277' 274740 000007 SUB PP,C ;BACK UP STACK + 005300' 200140 013402' MOVE SDEL,.TEMP ;NUMBER OF WORDS NEEDED + 005301' 273140 012727' ADDB SDEL,FREE ;FROM FREE CORE + 005302' 311140 013102' CAML SDEL,SYMBOL ;MORE CORE NEEDED + 005303' 260740 010014' PUSHJ PP,XCEEDS ;YES, TRY TO GET IT + 005304' 274140 013402' SUB SDEL,.TEMP ;FORM POINTER + 005305' 506146 000001 HRLM SDEL,1(V) ;STORE IT WITH ARG COUNT IN MACRO + 005306' 275140 000001 SUBI SDEL,1 ;TO USE FOR PUSHING POINTER INTO STORAGE + 005307' 201357 000001 MOVEI C,1(PP) ;POINT TO START OF STACK + 005310' 200247 000000 DEF26: MOVE ARG,(C) ;GET AN ITEM OFF STACK + 005311' 607240 777740 TLNN ARG,-40 ;A POINTER? + JUMPN ARG,[PUSH SDEL,ARG ;YES, STORE IT + MACRO V.10 PAGE 98 + MACRO/REPEAT HANDLERS + + 005312' 326240 014245' AOJA C,DEF26] ;GET NEXT + 005313' 261740 000005 PUSH PP,ARG ;RESTACK ARGUMENT + 005314' 332000 000005 SKIPE ARG ;FINISHED IF ZERO + 005315' 344340 005310' AOJA C,DEF26 ;GET NEXT + 005316' 261140 000005 PUSH SDEL,ARG ;STORE ZERO IN DEFAULT LIST ALSO + MACRO V.10 PAGE 99 + MACRO/REPEAT HANDLERS + + 005317' 205240 020000 DEF25: MOVSI ARG,MACF + 005320' 202740 013344' MOVEM PP,PPTMP2 ;STORE TEMP STORAGE POINTER + 005321' 260740 012366' PUSHJ PP,INSERT ;INSERT/UPDATE + 005322' 621600 000040 TLZ IO,DEFCRS ;JUST IN CASE + 005323' 402000 013404' SETZM ARGF ;NO ARGUMENT SEEN + 005324' 402000 013403' SETZM SQFLG ;AND NO ' SEEN + 005325' 634140 000003 TDZA SDEL,SDEL ;CLEAR BRACKET COUNT + 005326' 260740 006262' DEF30: PUSHJ PP,WCHAR ;WRITE CHARACTER + 005327' 260740 006255' DEF31: PUSHJ PP,GCHAR ;GET A CHARACTER + 005330' 200400 000007 DEF32: MOVE CS,C ;GET A COPY + 005331' 306340 000073 CAIN C,";" ;IS IT A COMMENT + 005332' 254000 005371' JRST CPEEK ;YES CHECK FOR ;; + 005333' 307400 000172 DEF33: CAIG CS,"Z"+40 ;CONVERT LOWER CASE + 005334' 305400 000141 CAIGE CS,"A"+40 + 005335' 254000 005337' JRST .+2 + 005336' 275400 000040 SUBI CS,40 + MACRO V.10 PAGE 100 + MACRO/REPEAT HANDLERS + + 005337' 305400 000040 CAIGE CS,40 ;TEST FOR CONTROL CHAR. + JRST [SKIPN SQFLG ;HAS SINGLE QUOTE BEEN SEEN? + JRST DEF30 ;NO, OUTPUT THIS CHAR. + PUSH PP,C ;YES, SAVE CURRENT CHAR + MOVEI C,47 ;SET UP QUOTE + PUSHJ PP,WCHAR;WRITE IT + POP PP,C ;GET BACK CURRENT CHAR. + SETZM SQFLG ;RESET FLAG + 005340' 254000 014247' JRST DEF30] ;AND CONTINUE + 005341' 303400 000137 CAILE CS,77+40 + 005342' 254000 005326' JRST DEF30 ;TEST FOR SPECIAL + 005343' 200410 001407' MOVE CS,CSTAT-40(CS) ;GET STATUS BITS + MACRO V.10 PAGE 101 + MACRO/REPEAT HANDLERS + + 005344' 603400 000006 TLNE CS,6 ;ALPHA-NUMERIC? + 005345' 254000 005406' JRST DEF40 ;YES + 005346' 336000 013403' SKIPN SQFLG ;WAS A ' SEEN? + 005347' 254000 005355' JRST DEF36 ;NO, PROCESH + 005350' 261740 000007 PUSH PP,C ;YES, SAVE CURRENT CHARACTER + 005351' 201340 000047 MOVEI C,47 ;AND PUT IN A ' + 005352' 260740 006262' PUSHJ PP,WCHAR ;... + 005353' 262740 000007 POP PP,C ;RESTORE CURRENT CHARACTER + 005354' 402000 013403' SETZM SQFLG ;AND RESET FLAG + 005355' 302340 000047 DEF36: CAIE C,47 ;IS THIS A '? + 005356' 254000 005363' JRST DEF35 ;NOPE + 005357' 336000 013404' SKIPN ARGF ;YES, WAS LAST THING SEEN AN ARG? + 005360' 476000 013403' SETOM SQFLG ;IF NOT, SET SNGL QUOT FLAG + 005361' 402000 013404' SETZM ARGF ;BUT NOT ARGUMENT IN ANY CASE + 005362' 254000 005327' JRST DEF31 ;GO GET NEXT CHARACTER + MACRO V.10 PAGE 102 + MACRO/REPEAT HANDLERS + + 005363' 402000 013404' DEF35: SETZM ARGF ;THIS IS NOT AN ARGUMENT + 005364' 306340 000074 CAIN C,"<" ;"<"? + 005365' 344140 005326' AOJA SDEL,DEF30 ;YES, INCREMENT COUNT AND WRITE + 005366' 306340 000076 CAIN C,">" ;">"? + 005367' 361140 005462' SOJL SDEL,DEF70 ;YES, TEST FOR END + 005370' 254000 005326' JRST DEF30 ;NO, WRITE IT + + 005371' 607600 004000 CPEEK: TLNN IO,IOPALL ;IF LALL IS ON + 005372' 254000 005333' JRST DEF33 ;JUST RETURN + 005373' 260740 006335' PUSHJ PP,PEEK ;LOOK AT NEXT CHAR. + 005374' 306340 000073 CAIN C,";" ;IS IT ;;? + 005375' 254000 005400' JRST CPEEK1 ;YES + 005376' 200340 000010 MOVE C,CS ;RESTORE C + 005377' 254000 005333' JRST DEF33 ;AND RETURN + + 005400' 260740 006255' CPEEK1: PUSHJ PP,GCHAR ;GET THE CHAR. + 005401' 302340 000076 CAIE C,">" ;RETURN IF END OF MACRO + 005402' 307340 000015 CAIG C,CR ;IS CHAR ONE OF + 005403' 305340 000012 CAIGE C,LF ;LF,VT,FF,CR + 005404' 254000 005400' JRST CPEEK1 ;NO,SO GET NEXT CHAR. + 005405' 254000 005330' JRST DEF32 ;YES,RETURN AND STORE + MACRO V.10 PAGE 103 + MACRO/REPEAT HANDLERS + + 005406' 201000 000000 DEF40: MOVEI AC0,0 ;CLEAR ATOM + 005407' 205040 440600 MOVSI AC1,(POINT 6,AC0) ;SET POINTER + 005410' 261740 000007 DEF42: PUSH PP,C ;STACK CHARACTER + 005411' 603040 770000 TLNE AC1,770000 ;HAVE WE STORED 6? + 005412' 136400 000001 IDPB CS,AC1 ;NO, STORE IN ATOM + 005413' 260740 006255' PUSHJ PP,GCHAR ;GET NEXT CHARACTER + 005414' 200400 000007 MOVE CS,C + 005415' 307400 000172 CAIG CS,"Z"+40 + 005416' 305400 000141 CAIGE CS,"A"+40 + 005417' 254000 005421' JRST .+2 + 005420' 275400 000040 SUBI CS,40 ;CONVERT LOWER TO UPPER + 005421' 301400 000040 CAIL CS,40 + 005422' 303400 000137 CAILE CS,77+40 + 005423' 254000 005427' JRST DEF44 ;TEST SPECIAL + 005424' 200410 001407' MOVE CS,CSTAT-40(CS) ;GET STATUS + 005425' 603400 000006 TLNE CS,6 ;ALPHA-NUMERIC? + 005426' 254000 005410' JRST DEF42 ;YES, GET ANOTHER + 005427' 261740 014100' DEF44: PUSH PP,[0] ;NO, MARK THE LIST + 005430' 200200 013343' MOVE SX,PPTMP1 ;GET POINTER TO TOP + + 005431' 336004 000001 DEF46: SKIPN 1(SX) ;END OF LIST? + 005432' 254000 005451' JRST DEF50 ;YES + 005433' 312004 000001 CAME AC0,1(SX) ;NO, DO THEY COMPARE? + 005434' 344200 005431' AOJA SX,DEF46 ;NO, TRY AGAIN + 005435' 274200 013343' SUB SX,PPTMP1 ;YES, GET DUMMY SYMBOL NUMBER + 005436' 242200 000004 LSH SX,4 + 005437' 205404 776020 MOVSI CS,<(BYTE (7) 177,101)>(SX) ;SET ESCAPE CODE MACEND + 005440' 242000 777742 LSH AC0,-^D30 + 005441' 306000 000005 CAIN AC0,5 ;"%"? + 005442' 661400 001000 TLO CS,1000 ;YES, SET CRESYM FLAG + 005443' 260740 006266' PUSHJ PP,WWORD ;WRITE THE WORD + 005444' 476000 013404' SETOM ARGF ;SET ARGUMENT SEEN FLAG + 005445' 402000 013403' SETZM SQFLG ;AND IGNORE ANY ' WAITING TO GET INTO STRING + 005446' 200740 013344' DEF48: MOVE PP,PPTMP2 ;RESET PUSHDOWN POINTER + 005447' 661600 000004 TLO IO,IORPTC ;ECHO LAST CHARACTER + 005450' 254000 005327' JRST DEF31 ;RECYCLE + + 005451' DEF50: + 005451' 336000 013403' SKIPN SQFLG ;HAVE WE SEEN A '? + 005452' 254000 005456' JRST DEF51 ;NOPE + 005453' 201340 000047 MOVEI C,47 ;YES, PUT IT IN + 005454' 260740 006262' PUSHJ PP,WCHAR ;... + 005455' 402000 013403' SETZM SQFLG ;AND CLEAR FLAG + 005456' 200344 000002 DEF51: MOVE C,2(SX) ;GET CHARACTER + 005457' 322340 005446' JUMPE C,DEF48 ;CLEAN UP IF END + 005460' 260740 006262' PUSHJ PP,WCHAR ;WRITE THE CHARACTER + 005461' 344200 005456' AOJA SX,DEF51 ;GET NEXT + + 005462' 200740 013343' DEF70: MOVE PP,PPTMP1 ;RESTORE PUSHDOWN POINTER + 005463' 205400 774020 MOVSI CS,(BYTE (7) 177,1) + 005464' 260740 006272' PUSHJ PP,WWRXE ;WRITE END + 005465' 402000 013273' SETZM INDEF ;OUT OF IT + 005466' 254000 004452' JRST BYPASS + MACRO V.10 PAGE 104 + MACRO/REPEAT HANDLERS + + ; HERE TO STORE DEFAULT ARGUMENTS + + 005467' 350000 013402' DEF80: AOS .TEMP ;COUNT ONE MORE + 005470' 260740 006217' PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + 005471' 504300 000004 HRL V,SX ;SYMBOL NUMBER + 005472' 261740 000006 PUSH PP,V ;STORE POINTER + 005473' 634140 000003 TDZA SDEL,SDEL ;ZERO BRACKET COUNT + 005474' 260740 006262' DEF81: PUSHJ PP,WCHARQ ;WRITE A CHARACTER + 005475' 260740 006254' PUSHJ PP,GCHARQ ;GET A CHARACTER + 005476' 306340 000074 CAIN C,"<" ;ANOTHER "<"? + 005477' 344140 005474' AOJA SDEL,DEF81 ;YES, INCREMENT AND WRITE + 005500' 302340 000076 CAIE C,">" ;CLOSING ANGLE? + 005501' 254000 005474' JRST DEF81 ;NO, JUST WRITE THE CHAR. + 005502' 365140 005474' SOJGE SDEL,DEF81 ;YES, WRITE IF NOT END + 005503' 205400 774040 MOVSI CS,(BYTE (7) 177,2) + 005504' 260740 006272' PUSHJ PP,WWRXE ;WRITE END OF DUMMY ARGUMENT + 005505' 260740 006255' PUSHJ PP,GCHAR ;READ AT NEXT CHAR. + 005506' 302340 000051 CAIE C,")" ;END OF ARGUMENT LIST? + 005507' 254000 005241' JRST DEF10 ;NO, GET NEXT SYMBOL + 005510' 254000 005251' JRST DEF12 ;YES, LOOK FOR "<" + MACRO V.10 PAGE 105 + MACRO CALL PROCESSOR + + SUBTTL MACRO CALL PROCESSOR + 005511' 335000 013405' CALLM: SKIPGE MACENL ;ARE WE TRYING TO RE-ENTER? + 005512' 254000 003311' JRST ERRAX ;YES, BOMB OUT WITH ERROR + 005513' 563000 013405' HRROS MACENL ;FLAG "CALLM IN PROGRESS" + 005514' 250700 012600' EXCH MP,RP + 005515' 261700 000006 PUSH MP,V ;STACK FOR REFDEC + 005516' 250700 012600' EXCH MP,RP + 005517' 202000 013276' MOVEM AC0,CALNAM ;SAVE MACRO NAME INCASE OF ERROR + 005520' 200140 013415' MOVE SDEL,SEQNO2 ;SAVE IN CASE OF EOF + 005521' 202140 013300' MOVEM SDEL,CALSEQ + 005522' 200140 013414' MOVE SDEL,PAGENO + 005523' 202140 013277' MOVEM SDEL,CALPG + 005524' 271300 000001 ADDI V,1 ;POINT TO DUMMY SYMBOL COUNT + 005525' 350146 000000 AOS SDEL,0(V) ;INCREMENT ARG COUNT + 005526' 512140 013402' HLLZM SDEL,.TEMP ;DEFAULT ARG POINTER IF NON-ZERO + 005527' 246140 777723 LSHC SDEL,-^D<9+36> ;ZERO SDEL, GET ARG COUNT IN SX + 005530' 405200 000777 ANDI SX,777 ;MASK + 005531' 332000 013402' SKIPE .TEMP ;IF AT LEAST ONE DEFAULT ARG + 005532' 542200 013402' HRRM SX,.TEMP ;STORE COUNT OF ARGS + 005533' 261740 000006 PUSH PP,V ;STACK FOR MRP + 005534' 261740 012600' PUSH PP,RP ;STACK FOR MACPNT + 005535' 322200 005602' JUMPE SX,MAC20 ;TEST FOR NO ARGS + 005536' 260740 001406' PUSHJ PP,CHARAC + 005537' 302340 000050 CAIE C,"(" ;"(" + 005540' 664140 777777 TROA SDEL,-1 ;NO, FUDGE PAREN COUNT AND SKIP + + 005541' 260740 006255' MAC10: PUSHJ PP,GCHAR ;GET A CHARACTER, LOOK FOR AN ARG + 005542' 307340 000015 CAIG C,CR + 005543' 305340 000012 CAIGE C,LF + 005544' 306340 000073 CAIN C,";" ;";"? + 005545' 254000 005604' JRST MAC21 ;YES, END OF ARGUMENT STRING + + 005546' 260740 006217' PUSHJ PP,SKELI1 ;NO, INITIALIZE SKELETON + 005547' 306340 000074 CAIN C,"<" ;"<"? + 005550' 254000 005677' JRST MAC30 ;YES, PROCESS AS SPECIAL + 005551' 302340 000176 CAIE C,176 + 005552' 306340 000134 CAIN C,134 ;"\" + 005553' 254000 005707' JRST MAC40 ;YES, PROCESS SYMBOL + + 005554' 306340 000054 MAC14: CAIN C,"," ;","? + 005555' 254000 005573' JRST MAC16 ;YES; NULL SYMBOL + 005556' 306340 000050 CAIN C,"(" ;"("? + 005557' 271140 000001 ADDI SDEL,1 ;YES, INCREMENT COUNT + 005560' 306340 000051 CAIN C,")" ;")"? + 005561' 361140 005573' SOJL SDEL,MAC16 ;YES, TEST FOR END + 005562' 260740 006262' PUSHJ PP,WCHAR ;WRITE INTO SKELETON + 005563' 260740 001406' MAC14A: PUSHJ PP,CHARAC ;GET NEXT CHARACTER + 005564' 307340 000015 CAIG C,CR + 005565' 305340 000012 CAIGE C,LF + 005566' 254000 005570' JRST .+2 + 005567' 254000 005572' JRST MAC15 ;TEST FOR END OF LINE + 005570' 302340 000073 CAIE C,";" ;";"? + 005571' 254000 005554' JRST MAC14 ;YES, END OF LINE + MACRO V.10 PAGE 105-1 + MACRO CALL PROCESSOR + + + 005572' 661600 000004 MAC15: TLO IO,IORPTC + 005573' 205400 774040 MAC16: MOVSI CS,(BYTE (7) 177,2) + 005574' 260740 006272' PUSHJ PP,WWRXE ;WRITE END + 005575' 250700 012600' EXCH MP,RP + 005576' 261700 013410' PUSH MP,WWRXX + 005577' 250700 012600' EXCH MP,RP + 005600' 363200 005602' SOJLE SX,MAC20 ;BRANCH IF NO MORE ARGS + 005601' 325140 005541' JUMPGE SDEL,MAC10 ;HAVEN'T SEEN TERMINAL ")" YET + MACRO V.10 PAGE 106 + MACRO CALL PROCESSOR + + 005602' 627600 000004 MAC20: TLZN IO,IORPTC + 005603' 260740 001406' PUSHJ PP,CHARAC + 005604' 250700 012600' MAC21: EXCH MP,RP + 005605' 322200 005627' JUMPE SX,MAC21B ;NO MISSING ARGS + 005606' 261700 014062' MAC21A: PUSH MP,[-1] ;FILL IN MISSING ARGS + 005607' 336000 013402' SKIPN .TEMP ;ANY DEFAULT ARGS? + 005610' 254000 005626' JRST MAC21C ;NO + 005611' 550340 013402' HRRZ C,.TEMP ;GET ARG COUNT + 005612' 275344 777777 SUBI C,-1(SX) ;ACCOUNT FOR THOSE GIVEN + 005613' 517000 000007 HRLZS C ;PUT IN LEFT HALF + 005614' 554140 013402' HLRZ SDEL,.TEMP ;ADDRESS OF TABLE + 005615' 336003 000000 MAC21D: SKIPN (SDEL) ;END OF LIST + 005616' 254000 005626' JRST MAC21C ;YES + 005617' 430343 000000 XOR C,(SDEL) ;TEST FOR CORRECT ARG + 005620' 607340 777777 TLNN C,-1 ;WAS IT? + 005621' 254000 005624' JRST MAC21E ;YES + 005622' 430343 000000 XOR C,(SDEL) ;BACK THE WAY IT WAS + 005623' 344140 005615' AOJA SDEL,MAC21D ;AND TRY AGAIN + + 005624' 202356 000000 MAC21E: MOVEM C,(MP) ;REPLACE -1 WITH TREE POINTER + 005625' 350007 000001 AOS 1(C) ;INCREMENT REFERENCE + 005626' 367200 005606' MAC21C: SOJG SX,MAC21A + 005627' 261700 014100' MAC21B: PUSH MP,[0] ;SET TERMINAL + 005630' 550340 013002' HRRZ C,LIMBO + 005631' 607600 000001 TLNN IO,IOSALL ;SUPPRESSING ALL? + 005632' 254000 005651' JRST MAC23 ;NO + 005633' 326540 005647' JUMPN MRP,MAC27 ;IN MACRO? + 005634' 302340 000073 CAIE C,";" ;NO,IN COMMENT? + 005635' 254000 005642' JRST MAC26 ;NO + 005636' 260740 001406' MAC22: PUSHJ PP,CHARAC ;YES,GET IT INTO THE LBUF + 005637' 307340 000015 CAIG C,CR ;LESS THAN CR? + 005640' 305340 000012 CAIGE C,LF ;AND GREATER THAN LF? + 005641' 254000 005636' JRST MAC22 ;NO GET ANOTHER + 005642' 515200 070000 MAC26: HRLZI SX,70000 ;DECREMENT BYTE POINTER + 005643' 273200 013003' ADDB SX,LBUFP + 005644' 325200 005647' JUMPGE SX,MAC27 + 005645' 525200 347777 HRLOI SX,347777 + 005646' 272200 013003' ADDM SX,LBUFP + 005647' 505340 777777 MAC27: HRLI C,-1 ;SET FLAG + 005650' 254000 005664' JRST MAC25 + + 005651' 201200 000136 MAC23: MOVEI SX,"^" + 005652' 321600 005663' JUMPAD MAC24 ;BRANCH IF ADDRESS FIELD + 005653' 306340 000073 CAIN C,";" ;IF SEMI-COLON + 005654' 332000 013321' SKIPE LITLVL ;AND NOT IN A LITERAL + 005655' 254000 005663' JRST MAC24 ;NOT BOTH TRUE + 005656' 326540 005663' JUMPN MRP,MAC24 ;OR IN A MACRO + 005657' 260740 000230' PUSHJ PP,STOUT ;LIST COMMENT OR CR-LF + 005660' 603600 004000 TLNE IO,IOPALL ;MACRO EXPANSION SUPPRESSION? + 005661' 661600 010000 TLO IO,IOMAC ; NO, SET TEMP BIT + 005662' 674340 014062' TDOA C,[-1] ;FLAG LAST CHARACTER + 005663' 137200 013003' MAC24: DPB SX,LBUFP ;SET ^ INTO LINE BUFFER + 005664' 261700 013407' MAC25: PUSH MP,MACPNT + MACRO V.10 PAGE 106-1 + MACRO CALL PROCESSOR + + 005665' 262740 013407' POP PP,MACPNT + 005666' 261700 000007 PUSH MP,C + 005667' 261700 013411' PUSH MP,RCOUNT ;STACK WORD COUNT + 005670' 261700 000013 PUSH MP,MRP ;STACK MACRO POINTER + 005671' 262740 000013 POP PP,MRP ;SET NEW READ POINTER + 005672' 250700 012600' EXCH MP,RP + 005673' 350000 013406' AOS MACLVL + 005674' 553000 013405' HRRZS MACENL ;RESET "CALLM IN PROGRESS" + 005675' 325600 000130' JUMPOC STMNT2 ;OP-CODE FIELD + 005676' 254000 001073' JRST EVATOM ;ADDRESS FIELD + + MACRO V.10 PAGE 107 + MACRO CALL PROCESSOR + + 005677' 201000 000000 MAC30: MOVEI AC0,0 ;INITIALIZE BRACKET COUNTER + 005700' 260740 006255' MAC31: PUSHJ PP,GCHAR ;GET A CHARACTER + 005701' 306340 000074 CAIN C,"<" ;"<"? + 005702' 271000 000001 ADDI AC0,1 ;YES, INCREMENT COUNT + 005703' 306340 000076 CAIN C,">" ;">"? + 005704' 361000 005563' SOJL AC0,MAC14A ;YES, EXIT IF MATCHING + 005705' 260740 006262' PUSHJ PP,WCHAR ;WRITE INTO SKELETON + 005706' 254000 005700' JRST MAC31 ;GO BACK FOR ANOTHER + + 005707' 261740 000004 MAC40: PUSH PP,SX ;STACK REGISTERS + 005710' 261740 000003 PUSH PP,SDEL + 005711' 502600 013377' HLLM IO,TAGINC ;SAVE IO FLAGS + 005712' 260740 000354' PUSHJ PP,CELL ;GET AN ATOM + 005713' 200300 000000 MOVE V,AC0 ;ASSUME NUMERIC + 005714' 603600 020000 TLNE IO,NUMSW ;GOOD GUESS? + 005715' 254000 005720' JRST MAC41 ;YES + 005716' 260740 012210' PUSHJ PP,SSRCH ;SEARCH THE SYMBOL TABLE + 005717' 664600 100000 TROA ER,ERRX ;NOT FOUND, ERROR + 005720' 260740 005726' MAC41: PUSHJ PP,MAC42 ;FORM ASCII STRING + 005721' 500600 013377' HLL IO,TAGINC ;RESTORE IO FLAGS + 005722' 262740 000003 POP PP,SDEL + 005723' 262740 000004 POP PP,SX + 005724' 661600 000004 TLO IO,IORPTC ;REPEAT LAST CHARACTER + 005725' 254000 005563' JRST MAC14A ;RETURN TO MAIN SCAN + + 005726' 200340 000006 MAC42: MOVE C,V + 005727' 246340 777735 MAC44: LSHC C,-^D35 + 005730' 242400 777777 LSH CS,-1 + 005731' 235355 000000 DIVI C,0(RX) ;DIVIDE BY CURRENT RADIX + 005732' 506417 000000 HRLM CS,0(PP) + 005733' 322340 005735' JUMPE C,.+2 ;TEST FOR END + 005734' 260740 005727' PUSHJ PP,MAC44 + 005735' 554357 000000 HLRZ C,0(PP) + 005736' 271340 000060 ADDI C,"0" ;FORM TEXT + 005737' 254000 006262' JRST WCHAR ;WRITE INTO SKELETON + MACRO V.10 PAGE 108 + MACRO CALL PROCESSOR + + 005740' 370000 013405' MACEN0: SOS MACENL + 005741' 335340 013405' MACEND: SKIPGE C,MACENL ;TEST "CALLM IN PROGRESS" + 005742' 350000 013405' AOS MACENL ;INCREMENT END LEVEL AND EXIT + 005743' 321340 005134' JUMPL C,REPEA8 + 005744' 250700 012600' EXCH MP,RP + 005745' 262700 000013 POP MP,MRP ;RETRIEVE READ POINTER + 005746' 262700 013411' POP MP,RCOUNT ;AND WORD COUNT + 005747' 201340 000136 MOVEI C,"^" + 005750' 331016 000000 SKIPL 0(MP) ;TEST FLAG + 005751' 260740 001414' PUSHJ PP,RSW2 ;MARK END OF SUBSTITUTION + 005752' 262700 000007 POP MP,C + 005753' 262700 000005 POP MP,ARG + 005754' 334700 013407' SKIPA MP,MACPNT ;RESET MP AND SKIP + 005755' 260740 006352' MACEN1: PUSHJ PP,REFDEC ;DECREMENT REFERENCE + 005756' 350300 013407' MACEN2: AOS V,MACPNT ;GET POINTER + 005757' 200306 000000 MOVE V,0(V) + 005760' 327300 005755' JUMPG V,MACEN1 ;IF >0, DECREMENT REFERENCE + 005761' 321300 005756' JUMPL V,MACEN2 ;IF <0, BYPASS + 005762' 262700 000006 POP MP,V ;IF=0, RETRIEVE POINTER + 005763' 260740 006352' PUSHJ PP,REFDEC ;DECREMENT REFERENCE + 005764' 202240 013407' MOVEM ARG,MACPNT + 005765' 250700 012600' EXCH MP,RP + 005766' 370000 013406' SOS MACLVL + 005767' 336000 013405' SKIPN MACENL ;CHECK UNPROCESSED END LEVEL + 005770' 254000 005773' JRST MACEN3 ;NONE TO PROCESS + 005771' 606540 777777 TRNN MRP,-1 ;MRP AT END OF TEXT + 005772' 254000 005740' JRST MACEN0 ;THEN POP THE MACRO STACK NOW + 005773' 606340 077400 MACEN3: TRNN C,77400 ;SALL FLAG? + 005774' 505340 000000 HRLI C,0 ;YES,TURN IT OFF + 005775' 321340 005134' JUMPL C,REPEA8 ;IF FLAG SET SUBSTITUTE + 005776' 254000 001412' JRST RSW1 + MACRO V.10 PAGE 109 + MACRO CALL PROCESSOR + + 005777' 336000 013406' IRP0: SKIPN MACLVL ;ARE WE IN A MACRO? + 006000' 254000 003311' JRST ERRAX ;NO, BOMB OUT + 006001' 260740 006322' IRP10: PUSHJ PP,MREADS ;YES, GET DATA SPEC + 006002' 302340 000040 CAIE C,40 ;SKIP LEADING BLANKS + 006003' 306340 000050 CAIN C,"(" ;"("? + 006004' 254000 006001' JRST IRP10 ;YES, BYPASS + 006005' 306340 000011 CAIN C,11 + 006006' 254000 006001' JRST IRP10 + 006007' 302340 000177 CAIE C,177 ;NO, IS IT SPECIAL? + 006010' 254000 003311' JRST ERRAX ;NO, ERROR + 006011' 260740 006322' PUSHJ PP,MREADS ;YES + 006012' 626340 000100 TRZN C,100 ;CREATED? + 006013' 254000 003311' JRST ERRAX + 006014' 301340 000040 CAIL C,40 ;TOO BIG? + 006015' 254000 003311' JRST ERRAX + 006016' 270340 013407' ADD C,MACPNT ;NO, FORM POINTER TO STACK + 006017' 261700 013316' PUSH MP,IRPCF ;STACK PREVIOUS POINTERS + 006020' 261700 013320' PUSH MP,IRPSW + 006021' 261700 013315' PUSH MP,IRPARP + 006022' 261700 013314' PUSH MP,IRPARG + 006023' 261700 013313' PUSH MP,IRPCNT + 006024' 261707 000000 PUSH MP,0(C) + 006025' 261700 013317' PUSH MP,IRPPOI + + 006026' 552340 013315' HRRZM C,IRPARP + 006027' 202000 013316' MOVEM AC0,IRPCF ;IRPC FLAG FOUND IN AC0 + 006030' 476000 013320' SETOM IRPSW ;RESET IRP SWITCH + 006031' 200407 000000 MOVE CS,0(C) + 006032' 202400 013314' MOVEM CS,IRPARG + + 006033' 260740 006322' PUSHJ PP,MREADS + 006034' 302340 000074 CAIE C,"<" ;"<"? + 006035' 254000 006033' JRST .-2 ;NO, SEARCH UNTIL FOUND + 006036' 260740 006217' PUSHJ PP,SKELI1 ;INITIALIZE NEW STRING + 006037' 202240 013317' MOVEM ARG,IRPPOI ;SET NEW POINTER + + 006040' 634140 000003 TDZA SDEL,SDEL ;ZERO BRACKET COUNT AND SKIP + 006041' 260740 006262' IRP20: PUSHJ PP,WCHAR1 + 006042' 260740 006322' PUSHJ PP,MREADS + 006043' 306340 000074 CAIN C,"<" ;"<"? + 006044' 344140 006041' AOJA SDEL,IRP20 ;YES, INCREMENT COUNT AND WRITE + 006045' 302340 000076 CAIE C,">" ;">"? + 006046' 254000 006041' JRST IRP20 ;NO, JUST WRITE IT + 006047' 365140 006041' SOJGE SDEL,IRP20 ;YES, WRITE IF NOT MATCHING + 006050' 200400 014257' MOVE CS,[BYTE (7) 15,177,4] + 006051' 260740 006272' PUSHJ PP,WWRXE ;WRITE END + 006052' 261700 000013 PUSH MP,MRP ;STACK PREVIOUS READ POINTER + 006053' 261700 013411' PUSH MP,RCOUNT ;AND WORD COUNT + 006054' 337400 013314' SKIPG CS,IRPARG + 006055' 254000 006135' JRST IRPPOP ;EXIT IF NOT VALID ARGUMENT + 006056' 201350 000001 MOVEI C,1(CS) ;INITIALIZE POINTER + 006057' 202340 013314' MOVEM C,IRPARG + MACRO V.10 PAGE 110 + MACRO CALL PROCESSOR + + 006060' 250540 013314' IRPSET: EXCH MRP,IRPARG ;SWAP READ POINTERS + 006061' 200200 013411' MOVE SX,RCOUNT ;SWAP COUNT OF WORDS TO READ + 006062' 250200 013313' EXCH SX,IRPCNT + 006063' 202200 013411' MOVEM SX,RCOUNT + 006064' 260740 006217' PUSHJ PP,SKELI1 ;INITIALIZE SKELETON FOR DATA + 006065' 552260 013315' HRRZM ARG,@IRPARP ;STORE NEW DS POINTER + 006066' 403200 000003 SETZB SX,SDEL ;ZERO FOUND FLAG AND BRACKET COUNT + 006067' 135340 000013 LDB C,MRP ;GET LAST CHAR + 006070' 306340 000054 CAIN C,"," + 006071' 332000 013316' SKIPE IRPCF ;IN IRPC + 006072' 254000 006074' JRST IRPSE1 ;NO + 006073' 201200 000001 MOVEI SX,1 ;FORCE ARGUMENT + 006074' 260740 006322' IRPSE1: PUSHJ PP,MREADS + 006075' 302340 000177 CAIE C,177 ;SPECIAL? + 006076' 344200 006103' AOJA SX,IRPSE2 ;NO, FLAG AS FOUND + 006077' 260740 006341' PUSHJ PP,PEEKM ;LOOK AT NEXT CHARACTER + 006100' 402000 013320' SETZM IRPSW ;SET IRP SWITCH + 006101' 327200 006116' JUMPG SX,IRPSE4 ;IF ARG FOUND, PROCESS IT + 006102' 254000 006135' JRST IRPPOP ;NO, CLEAN UP AND EXIT + + 006103' 332000 013316' IRPSE2: SKIPE IRPCF ;IRPC? + 006104' 254000 006113' JRST IRPSE3 ;YES, WRITE IT + 006105' 306340 000054 CAIN C,"," ;NO, IS IT A COMMA? + 006106' 322140 006116' JUMPE SDEL,IRPSE4 ;YES, EXIT IF NOT NESTED + 006107' 306340 000074 CAIN C,"<" ;"<"? + 006110' 271140 000001 ADDI SDEL,1 ;YES, INCREMENT COUNT + 006111' 306340 000076 CAIN C,">" ;">"? + 006112' 275140 000001 SUBI SDEL,1 ;YES, DECREMENT COUNT + + 006113' 260740 006262' IRPSE3: PUSHJ PP,WCHAR + 006114' 336000 013316' SKIPN IRPCF ;IRPC? + 006115' 254000 006074' JRST IRPSE1 ;NO, GET NEXT CHARACTER + + 006116' 205400 774040 IRPSE4: MOVSI CS,(BYTE (7) 177,2) + 006117' 260740 006272' PUSHJ PP,WWRXE ;WRITE END + 006120' 202540 013314' MOVEM MRP,IRPARG ;SAVE POINTER + 006121' 200540 013411' MOVE MRP,RCOUNT ;SAVE COUNT + 006122' 202540 013313' MOVEM MRP,IRPCNT + 006123' 550540 013317' HRRZ MRP,IRPPOI ;SET FOR NEW SCAN + 006124' 344540 005134' AOJA MRP,REPEA8 ;ON ARG COUNT + MACRO V.10 PAGE 111 + MACRO CALL PROCESSOR + + 006125' 336000 013315' STOPI0: SKIPN IRPARP ;IRP IN PROGRESS? + 006126' 254000 003311' JRST ERRAX ;NO, ERROR + 006127' 402000 013320' SETZM IRPSW ;YES, SET SWITCH + 006130' 263740 000000 POPJ PP, + + 006131' 200320 013315' IRPEND: MOVE V,@IRPARP + 006132' 260740 006352' PUSHJ PP,REFDEC + 006133' 332000 013320' SKIPE IRPSW ;MORE TO COME? + 006134' 254000 006060' JRST IRPSET ;YES + + 006135' 200300 013317' IRPPOP: MOVE V,IRPPOI + 006136' 260740 006352' PUSHJ PP,REFDEC ;DECREMENT REFERENCE + 006137' 262700 013411' POP MP,RCOUNT + 006140' 262700 000013 POP MP,MRP ;RESTORE CELLS + 006141' 262700 013317' POP MP,IRPPOI + 006142' 262720 013315' POP MP,@IRPARP + 006143' 262700 013313' POP MP,IRPCNT + 006144' 262700 013314' POP MP,IRPARG + 006145' 262700 013315' POP MP,IRPARP + 006146' 262700 013320' POP MP,IRPSW + 006147' 262700 013316' POP MP,IRPCF + 006150' 254000 005134' JRST REPEA8 + MACRO V.10 PAGE 112 + MACRO CALL PROCESSOR + + 006151' GETDS: ;GET DUMMY SYMBOL NUMBER + 006151' 200400 000007 MOVE CS,C ;USE CS FOR WORK REGISTER + 006152' 405400 000037 ANDI CS,37 ;MASK + 006153' 270400 013407' ADD CS,MACPNT ;ADD BASE ADDRESS + 006154' 200310 000000 MOVE V,0(CS) ;GET POINTER FLAG + 006155' 327300 006203' JUMPG V,GETDS1 ;BRANCH IF POINTER + 006156' 606340 000040 TRNN C,40 ;NOT POINTER, SHOULD WE CREATE? + 006157' 254000 001410' JRST RSW0 ;NO, FORGET THIS ARG + 006160' 261740 013410' PUSH PP,WWRXX + 006161' 261740 000012 PUSH PP,MWP ;STACK MACRO WRITE POINTER + 006162' 261740 013412' PUSH PP,WCOUNT ;SAVE WORD COUNT + 006163' 260740 006217' PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + 006164' 202250 000000 MOVEM ARG,0(CS) ;STORE POINTER + 006165' 200400 014260' MOVE CS,[BYTE (7) 0,170,170,170,171] ;CREATE A SYMBOL + 006166' 270400 013413' ADD CS,LSTSYM ;LSTSYM= # OF LAST CREATED + 006167' 630400 014261' TDZ CS,[BYTE (7) 0,170,170,170,170] + 006170' 202400 013413' MOVEM CS,LSTSYM + 006171' 434400 014262' IOR CS,[ASCII /.0000/] + 006172' 201340 000056 MOVEI C,"." + 006173' 260740 006262' PUSHJ PP,WCHAR + 006174' 260740 006266' PUSHJ PP,WWORD ;WRITE INTO SKELETON + 006175' 205400 774040 MOVSI CS,(BYTE (7) 177,2) + 006176' 260740 006272' PUSHJ PP,WWRXE ;WRITE END CODE + 006177' 262740 013412' POP PP,WCOUNT ;RESTORE WORD COUNT + 006200' 262740 000012 POP PP,MWP ;RESTORE MACRO WRITE POINTER + 006201' 262740 013410' POP PP,WWRXX + 006202' 200300 000005 MOVE V,ARG ;SET UP FOR REFINC + + 006203' 260740 006347' GETDS1: PUSHJ PP,REFINC ;INCREMENT REFERENCE + 006204' 504300 013411' HRL V,RCOUNT ;SAVE WORD COUNT + 006205' 261700 000006 PUSH MP,V ;STACK V FOR DECREMENT + 006206' 261700 000013 PUSH MP,MRP ;STACK READ POINTER + 006207' 201546 000001 MOVEI MRP,1(V) ;FORM READ POINTER + 006210' 254000 001410' JRST RSW0 ;EXIT + + 006211' 262700 000013 DSEND: POP MP,MRP + 006212' 262700 000006 POP MP,V + 006213' 576300 013411' HLREM V,RCOUNT ;RESTORE WORD COUNT + 006214' 553000 000006 HRRZS V ;CLEAR COUNT + 006215' 260740 006352' PUSHJ PP,REFDEC ;DECREMENT REFERENCE + 006216' 254000 001410' JRST RSW0 ;EXIT + MACRO V.10 PAGE 113 + MACRO CALL PROCESSOR + + 006217' 201240 000001 SKELI1: MOVEI ARG,1 ;ENTRY FOR SINGLE ARG + 006220' 400500 000000 SKELI: SETZ MWP, ;SIGNAL FIRST TIME THROUGH + 006221' 260740 006233' PUSHJ PP,SKELWL ;GET POINTER WORD + 006222' 552500 013410' HRRZM MWP,WWRXX ;SAVE FIRST ADDRESS + 006223' 552500 013000' HRRZM MWP,LADR ;SAVE START OF LINKED LIST + 006224' 552252 000001 HRRZM ARG,1(MWP) ;STORE COUNT + 006225' 370000 013412' SOS WCOUNT ;ACCOUNT FOR WORD + 006226' 550240 013410' HRRZ ARG,WWRXX ;SET FIRST ADDRESS + 006227' 271500 000002 ADDI MWP,2 ;BUMP POINTER + 006230' 505500 440700 HRLI MWP,(POINT 7) ;SET FOR 5 ASCII BYTES + ;SKELW RETURNS WITH ADR OF NEXT FREE LOC IN V (RIGHT) + + 006231' 373000 013412' SKELW: SOSLE WCOUNT ;STILL SOME SPACE IN LEAF? + 006232' 263740 000000 POPJ PP, ;YES, RETURN + 006233' 332300 013041' SKELWL: SKIPE V,NEXT ;GET FIRST FREE ADDRESS + 006234' 254000 006243' JRST SKELW1 ;IF NON-ZERO, UPDATE FREE + 006235' 200300 012727' MOVE V,FREE ;GET FREE + 006236' 271300 000004 ADDI V,.LEAF ;INCREMENT BY LEAF SIZE + 006237' 311300 013102' CAML V,SYMBOL ;OVERFLOW? + 006240' 260740 010015' PUSHJ PP,XCEED ;YES, BOMB OUT + 006241' 250300 012727' EXCH V,FREE ;UPDATE FREE + 006242' 402006 000000 SETZM (V) ;CLEAR LINK + + 006243' 500306 000000 SKELW1: HLL V,0(V) ;GET ADDRESS + 006244' 546300 013041' HLRM V,NEXT ;UPDATE NEXT + 006245' 332000 000012 SKIPE MWP ;IF FIRST TIME + 006246' 506312 777775 HRLM V,1-.LEAF(MWP) ;STORE LINK IN FIRST WORD OF LEAF + 006247' 201500 000004 MOVEI MWP,.LEAF ;SIZE OF LEAF + 006250' 202500 013412' MOVEM MWP,WCOUNT ;STORE FOR COUNT DOWN + 006251' 201506 000000 MOVEI MWP,(V) ;SET UP WRITE POINTER + 006252' 661500 160700 TLO MWP,(POINT 7,,21) ;2 ASCII CHARS + 006253' 263740 000000 POPJ PP, + + ;WWRXX POINTS TO END OF TREE + ;MWP IDPB POINTER TO NEXT HOLE + ;NEXT FIRST OF A LINKED PORTION THAT IS NOT BEING USED (LEAVES) + ;FREE POINTS TO FREE CORE BETWEEN TREE AND SYM-TABLE + ;LADR POINTS TO BEG OF LINKED PORTION. + MACRO V.10 PAGE 114 + MACRO CALL PROCESSOR + + 006254' 326540 006322' GCHARQ: JUMPN MRP,MREADS ;IF GETTING CHAR. FROM TREE + 006255' 260740 001406' GCHAR: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + 006256' 307340 000014 CAIG C,FF ;TEST FOR LF, VT OR FF + 006257' 305340 000012 CAIGE C,LF + 006260' 263740 000000 POPJ PP, ;NO + 006261' 254000 001736' JRST OUTIM1 ;YES, LIST IT + + 006262' WCHARQ: + 006262' WCHAR: + 006262' 607500 760000 WCHAR1: TLNN MWP,760000 ;END OF WORD? + 006263' 260740 006231' PUSHJ PP,SKELW ;YES, GET ANOTHER + 006264' 136340 000012 IDPB C,MWP ;STORE CHARACTER + 006265' 263740 000000 POPJ PP, + + 006266' 246340 000007 WWORD: LSHC C,7 ;MOVE ASCII INTO C + 006267' 260740 006262' PUSHJ PP,WCHAR1 ;STORE IT + 006270' 326400 006266' JUMPN CS,WWORD ;TEST FOR END + 006271' 263740 000000 POPJ PP, ;YES, EXIT + + 006272' 260740 006266' WWRXE: PUSHJ PP,WWORD ;WRITE LAST WORD + 006273' 270500 013412' ADD MWP,WCOUNT ;GET TO END OF LEAF + 006274' 275500 000004 SUBI MWP,.LEAF ;NOW POINT TO START OF IT + 006275' 553012 000000 HRRZS (MWP) ;ZERO LEFT HALF OF LAST LEAF + 006276' 542520 013410' HRRM MWP,@WWRXX ;SET POINTER TO END + 006277' 263740 000000 POPJ PP, + MACRO V.10 PAGE 115 + MACRO CALL PROCESSOR + + 006300' 260740 006322' MREAD: PUSHJ PP,MREADS ;READ ONE CHARACTER + 006301' 302340 000177 CAIE C,177 ;SPECIAL? + 006302' 254000 001412' JRST RSW1 ;NO, EXIT + 006303' 260740 006322' PUSHJ PP,MREADS ;YES, GET CODE WORD + 006304' 622340 000100 TRZE C,100 ;SYMBOL? + 006305' 254000 006151' JRST GETDS ;YES + 006306' 303340 000004 CAILE C,4 ;POSSIBLY ILLEGAL + 006307' 254000 003311' JRST ERRAX ;YUP + 006310' 541540 000000 HRRI MRP,0 ;NO, SIGNAL END OF TEXT + 006311' 254007 006312' JRST .+1(C) + 006312' 260740 010015' PUSHJ PP,XCEED + 006313' 254000 005741' JRST MACEND ;1; END OF MACRO + 006314' 254000 006211' JRST DSEND ;2; END OF DUMMY SYMBOL + 006315' 254000 005136' JRST REPEND ;3; END OF REPEAT + 006316' 254000 006131' JRST IRPEND ;4; END OF IRP + + 006317' 505540 000700 MREADI: HRLI MRP,700 ;SET UP BYTE POINTER + 006320' 201340 000003 MOVEI C,.LEAF-1 ;NUMBER OF WORDS + 006321' 202340 013411' MOVEM C,RCOUNT + 006322' 607540 777777 MREADS: TLNN MRP,-1 ;FIRST TIME HERE? + 006323' 254000 006317' JRST MREADI ;YES, SET UP MRP AND RCOUNT + 006324' 607540 760000 TLNN MRP,760000 ;HAVE WE FINISHED WORD? + 006325' 373000 013411' SOSLE RCOUNT ;YES, STILL ROOM IN LEAF? + 006326' 254000 006333' JRST MREADC ;STILL CHAR. IN LEAF + 006327' 554553 777775 HLRZ MRP,1-.LEAF(MRP);YES, GET LINK + 006330' 505540 160700 HRLI MRP,(POINT 7,,21) ;SET POINTER + 006331' 201340 000004 MOVEI C,.LEAF ;RESET COUNT + 006332' 202340 013411' MOVEM C,RCOUNT + 006333' 134340 000013 MREADC: ILDB C,MRP ;GET CHARACTER + 006334' 263740 000000 POPJ PP, + + 006335' 326540 006341' PEEK: JUMPN MRP,PEEKM ;THIS IS A MACRO READ + 006336' 260740 001406' PUSHJ PP,CHARAC ;READ AN ASCII CHAR. + 006337' 661600 000004 TLO IO,IORPTC ;REPEAT FOR NEXT + 006340' 263740 000000 POPJ PP, ;AND RETURN + + 006341' 261740 000013 PEEKM: PUSH PP,MRP ;SAVE MACRO READ POINTER + 006342' 261740 013411' PUSH PP,RCOUNT ;SAVE WORD COUNT + 006343' 260740 006322' PUSHJ PP,MREADS ;READ IN A CHAR. + 006344' 262740 013411' POP PP,RCOUNT ;RESTORE WORD COUNT + 006345' 262740 000013 POP PP,MRP ;RESET READ POINTER + 006346' 263740 000000 POPJ PP, ;IORPTC IS NOT SET + MACRO V.10 PAGE 116 + MACRO CALL PROCESSOR + + 006347' 201406 000001 REFINC: MOVEI CS,1(V) ;GET POINTER TO TREE + 006350' 350010 000000 AOS 0(CS) ;INCREMENT REFERENCE + 006351' 263740 000000 POPJ PP, + + 006352' 323300 006364' REFDEC: JUMPLE V,DECERR ;CATASTROPHIC ERROR SOMEWHERE + 006353' 201406 000001 MOVEI CS,1(V) ;GET POINTER TO TREE + 006354' 370410 000000 SOS CS,0(CS) ;DECREMENT REFERENCE + 006355' 602400 000777 TRNE CS,000777 ;IS IT ZERO? + 006356' 263740 000000 POPJ PP, ;NO, EXIT + 006357' 550406 000000 HRRZ CS,0(V) ;YES, GET POINTER TO END + 006360' 504400 013041' HRL CS,NEXT ;GET POINTER TO NEXT RE-USABLE + 006361' 502410 000000 HLLM CS,0(CS) ;SET LINK + 006362' 542300 013041' HRRM V,NEXT ;RESET NEXT + 006363' 263740 000000 POPJ PP, + + 006364' 200000 013276' DECERR: MOVE AC0,CALNAM ;GET MACRO NAME + 006365' 205440 014263' MOVSI RC,[SIXBIT /ERROR WHILE EXPANDING@/] + 006366' 260740 007757' PUSHJ PP,TYPMSG + 006367' 254000 007656' JRST ERRNE2 ;COMMON MESSAGE + MACRO V.10 PAGE 117 + MACRO CALL PROCESSOR + + 000000 A== 0 ;ASCII MODE + 000001 AL== 1 ;ASCII LINE MODE + 000013 IB== 13 ;IMAGE BINARY MODE + 000014 B== 14 ;BINARY MODE + 000016 DMP==16 ;DUMP MODE + + 000000 CTL== 0 ;CONTROL DEVICE NUMBER + 000004 IFN CCLSW,<CTL2==4 ;INPUT DEV FOR CCL FILE> + 000001 BIN== 1 ;BINARY DEVICE NUMBER + 000002 CHAR== 2 ;INPUT DEVICE NUMBER + 000003 LST== 3 ;LISTING DEVICE NUMBER + + ; COMMAND STRING ACCUMULATORS + + 000001 ACDEV== 1 ;DEVICE + 000002 ACFILE==2 ;FILE + 000003 ACEXT== 3 ;EXTENSION + 000004 ACPPN== 4 ;PPN + 000004 ACDEL== 4 ;DELIMITER + 000005 ACPNTR==5 ;BYTE POINTER + + 000006 TIO== 6 + + 001000 TIORW== 1000 + 002000 TIOLE== 2000 + 020000 TIOCLD==20000 + + 000004 DIRBIT==4 ;DIRECTORY DEVICE + 000010 TTYBIT==10 ;TTY + 000020 MTABIT==20 ;MTA + 000100 DTABIT==100 ;DTA + 002000 DISBIT==2000 ;DISPLAY + 020000 CONBIT==20000 ;CONTROLING TTY + 040000 LPTBIT==40000 ;LPT + 200000 DSKBIT==200000 ;DSK + + ;GETSTS ERROR BITS + + 400000 IOIMPM==400000 ;IMPROPER MODE (WRITE LOCK) + 200000 IODERR==200000 ;DEVICE DATA ERROR + 100000 IODTER==100000 ;CHECKSUM OR PARITY ERROR + 040000 IOBKTL== 40000 ;BLOCK TOO LARGE + 740000 ERRBIT==IOIMPM!IODERR!IODTER!IOBKTL + + SYN .TEMP,PPN + MACRO V.10 PAGE 118 + I/O ROUTINES + + SUBTTL I/O ROUTINES + 006370' BEG: + 006370' 625600 100000 IFN CCLSW,<TLZA IO,ARPGSW ;DON'T ALLOW RAPID PROGRAM GENERATION + 006371' 661600 100000 TLO IO,ARPGSW ;ALLOW RAPID PROGRAM GENERATION> + 006372' 550540 005016* HRRZ MRP,JOBREL ;GET LOWSEG SIZE + 006373' 202540 013433' MOVEM MRP,MACSIZ ;SAVE CORE SIZE + ;DECODE VERSION NUMBER + 006374' 201740 013434' MOVEI PP,JOBFFI ;TEMP PUSH DOWN STACK + 006375' 261740 014100' PUSH PP,[0] ;MARK BOTTOM OF STACK + 006376' 135000 014267' LDB 0,[POINT 3,JOBVER,2] ;GET USER BITS + 006377' 322000 006404' JUMPE 0,GETE ;NOT SET IF ZERO + 006400' 271000 000060 ADDI 0,"0" ;FORM NUMBER + 006401' 261740 000000 PUSH PP,0 ;STACK IT + 006402' 201000 000055 MOVEI 0,"-" ;SEPARATE BY HYPHEN + 006403' 261740 000000 PUSH PP,0 ;STACK IT ALSO + 006404' 550000 000137 GETE: HRRZ 0,JOBVER ;GET EDIT NUMBER + 006405' 322000 006416' JUMPE 0,GETU ;SKIP ALL THIS IF ZERO + 006406' 201040 000051 MOVEI 1,")" ;ENCLOSE IN PARENS. + 006407' 261740 000001 PUSH PP,1 + 006410' 231000 000010 GETED: IDIVI 0,8 ;GET OCTAL DIGITS + 006411' 271040 000060 ADDI 1,"0" ;MAKE ASCII + 006412' 261740 000001 PUSH PP,1 ;STACK IT + 006413' 326000 006410' JUMPN 0,GETED ;LOOP TIL DONE + 006414' 201000 000050 MOVEI 0,"(" ;OTHER PAREN. + 006415' 261740 000000 PUSH PP,0 + 006416' 135000 014270' GETU: LDB 0,[POINT 6,JOBVER,17] ;UPDATE NUMBER + 006417' 322000 006424' JUMPE 0,GETV ;SKIP IF ZERO + 006420' 231000 000010 IDIVI 0,8 ;MIGHT BE TWO DIGITS + 006421' 271040 000100 ADDI 1,"@" ;FORM ALPHA + 006422' 261740 000001 PUSH PP,1 + 006423' 326000 006417' JUMPN 0,GETU+1 ;LOOP IF NOT DONE + 006424' 135000 014271' GETV: LDB 0,[POINT 9,JOBVER,11] ;GET VERSION NUMBER + 006425' 231000 000010 IDIVI 0,8 ;GET DIGIT + 006426' 271040 000060 ADDI 1,"0" ;TO ASCII + 006427' 261740 000001 PUSH PP,1 ;STACK + 006430' 326000 006425' JUMPN 0,GETV+1 ;LOOP + 006431' 200040 014272' MOVE 1,[POINT 7,VBUF+1,13] ;POINTER TO DEPOSIT IN VBUF + 006432' 262740 000000 POP PP,0 ;GET CHARACTER + 006433' 136000 000001 IDPB 0,1 ;DEPOSIT IT + 006434' 326000 006432' JUMPN 0,.-2 ;KEEP GOING IF NOT ZERO + MACRO V.10 PAGE 119 + I/O ROUTINES + + IFN CCLSW,< + 006435' 625600 001000 TLZA IO,CRPGSW ;SET TO INIT NEW COMMAND FILE + 006436' 607600 001000 M: TLNN IO,CRPGSW ;CURRENTLY DOING RPG?> + IFE CCLSW,<M:> + 006437' 047000 000000 RESET ;INITIALIZE PROGRAM + 006440' 402000 012550' SETZM BINDEV ;CLEAR INCASE NOT USED NEXT TIME + 006441' 402000 012553' SETZM LSTDEV ;SAME REASON + 006442' 402000 012564' SETZM INDEV ;INCASE OF ERROR + 006443' 550540 013433' HRRZ MRP,MACSIZ ;GET INITIAL SIZE + 006444' 047540 000011 CORE MRP, ;BACK TO ORIGINAL SIZ4 + 006445' 255000 000000 JFCL ;SHOULD NEVER FAIL + 006446' 403540 012600' SETZB MRP,PASS1I + 006447' 200000 014273' MOVE [XWD PASS1I,PASS1I+1] + 006450' 251000 013415' BLT PASS2X-1 ;ZERO THE PASS1 AND PASS2 VARIABLES + 006451' 201740 013434' MOVEI PP,JOBFFI ;SET TEMP PUSH-DOWN POINTER + ; MOVE CS,[POINT 7,DBUF,6] ;INITIALIZE FOR DATE + ; MSTIME 2, ;GET TIME FROM MONITOR + ; PUSHJ PP,TIMOUT ;TIME FORMAT OUTPUT + ; DATE 1, ;GET DATE + ; IBP CS ;PASS OVER PRESET SPACE + ; PUSHJ PP,DATOUT ;DATE FORMAT OUTPUT + 006452' 205640 402000 MOVSI FR,P1!CREFSW + 006453' 603600 001000 IFN CCLSW,<TLNE IO,CRPGSW ;RPG IN PROGRESS? + 006454' 254000 006540' JRST GOSET ;YES, GO READ NEXT COMMAND + 006455' 603600 100000 TLNE IO,ARPGSW ;NO, RPG ALLOWED? + 006456' 254000 006501' JRST RPGSET ;YES, GO TRY + 006457' 071200 000000 CTLSET: RELEASE CTL2, ;IN CASE OF LOOKUP FAILURE> + IFE CCLSW,<CTLSET:> + 006460' 205600 004000 MOVSI IO,IOPALL ;ZERO FLAGS + 006461' 041000 000001 INIT CTL,AL ;INITIALIZE USER CONSOLE + 006462' 646471 000000 SIXBIT /TTY/ + 006463' 013430' 013425' XWD CTOBUF,CTIBUF + 006464' 047000 000012 EXIT ;NO TTY, NO ASSEMBLY + 006465' 205340 646471 MOVSI C,(SIXBIT /TTY/) + 006466' 047340 000004 DEVCHR C, ;GET CHARACTERISTICS + 006467' 607340 000010 TLNN C,10 ;IS IT REALLY A TTY + 006470' 047000 000012 EXIT ;NO + 006471' 064000 000001 INBUF CTL,1 ;INITIALIZE SINGLE CONTROL + 006472' 065000 000001 OUTBUF CTL,1 ;BUFFERS + 006473' 260740 007765' PUSHJ PP,CRLF ;OUTPUT CARRIAGE RETURN - LINE FEED + 006474' 201340 000052 MOVEI C,"*" + 006475' 136340 013431' IDPB C,CTOBUF+1 + 006476' 067000 000000 OUTPUT CTL, + 006477' 066000 000000 INPUT CTL, + MACRO V.10 PAGE 120 + I/O ROUTINES + + 006500' 254000 006620' IFN CCLSW,<JRST BINSET ;BEGIN WITH BINARY FILE + + 006501' RPGSET: + 006501' 041200 000001 INIT CTL2,AL ;LOOK FOR DISK + 006502' 446353 000000 SIXBIT /DSK/ ;... + 006503' 000000 013422' XWD 0,CTLBLK ;... + 006504' 254000 006457' JRST CTLSET ;DSK NOT THERE + + 006505' 515140 554143 HRLZI 3,(SIXBIT /MAC/) ;###MAC + 006506' 201000 000003 MOVEI 3 ;COUNT + 006507' 047040 000030 PJOB AC1, ;RETURNS JOB NO. TO AC1 + 006510' 231040 000012 RPGLUP: IDIVI AC1,12 ;CONVERT + 006511' 271100 000020 ADDI AC2,"0"-40 ;SIXBITIZE IT + 006512' 246100 777772 LSHC AC2,-6 ; + 006513' 367000 006510' SOJG 0,RPGLUP ;3 TIMES + 006514' 202140 012601' MOVEM 3,CTLBUF ;###MAC + 006515' 515000 645560 HRLZI (SIXBIT /TMP/) ; + 006516' 202000 012602' MOVEM CTLBUF+1 ;TMP + 006517' 402000 012604' SETZM CTLBUF+3 ;PROG-PRO + 006520' 076200 012601' LOOKUP CTL2,CTLBUF ;COMMAND FILE + 006521' 254000 006457' JRST CTLSET ;NOT THERE + 006522' 546000 013420' HLRM EXTMP ;SAVE THE EXTENSION + + 006523' 064200 000001 RPGS2: INBUF CTL2,1 ;SINGLE BUFFERED + 006524' 041000 000001 RPGS2A: INIT CTL,AL ;TTY FOR CONSOLE MESSAGES + 006525' 646471 000000 SIXBIT /TTY/ ;... + 006526' 013430' 000000 XWD CTOBUF,0 ;... + 006527' 047000 000012 EXIT ;NO TTY, NO ASSEMBLY + 006530' 065000 000001 OUTBUF CTL,1 ;SINGLE BUFFERED + 006531' 200000 000000* MOVE JOBFF ;REMEMBER WHERE BINARY BUFFERS BEGIN + 006532' 202000 013421' MOVEM SAVFF ;... + 006533' 550000 006372* HRRZ JOBREL ;TOP OF CORE + 006534' 313000 013433' CAMLE MACSIZ ;SEE IF IT HAS GROWN + 006535' 202000 013433' MOVEM MACSIZ ;PREVENTS ADDRESS CHECK ON EXIT + 006536' 603600 001000 TLNE IO,CRPGSW ;ARE WE ALREADY IN RPG MODE? + 006537' 254000 006436' JRST M ;MUST HAVE COME FROM @ COMMAND, RESET + + MACRO V.10 PAGE 121 + I/O ROUTINES + + 006540' 205600 005000 GOSET: MOVSI IO,IOPALL!CRPGSW ;SET INITIAL FLAGS + 006541' 201400 000310 MOVEI CS,CTLSIZ ;MAXIMUM CHARS IN A LINE + 006542' 200040 013424' MOVE AC1,CTLBLK+2 ;NUMBER OF CHARACTERS + 006543' 202040 013427' MOVEM AC1,CTIBUF+2 ;SAVE FOR PASS 2 + 006544' 200040 014274' MOVE AC1,[POINT 7,CTLBUF] ;WHERE TO STASH CHARS + 006545' 202040 013426' MOVEM AC1,CTIBUF+1 ;... + 006546' 377000 013424' GOSET1: SOSG CTLBLK+2 ;ANY MORE CHARS? + PUSHJ PP,[IN CTL2, ;READ ANOTHER BUFFERFUL + POPJ PP, ;EVERYTHING OK, RETURN + STATO CTL2,20000 ;EOF? + JRST [HRROI RC,[SIXBIT /ERROR READING COMMAND FILE@/] + JRST ERRFIN] ;GO COMPLAIN + PUSHJ PP,DELETE ;CMD FILE + 006547' 260740 014304' EXIT] ;EOF AND FINISHED + 006550' 134340 013423' ILDB C,CTLBLK+1 ;GET NEXT CHAR + 006551' 200460 013423' MOVE RC,@CTLBLK+1 ;CHECK FOR SEQUENCE NUMBERS + 006552' 602440 000001 TRNE RC,1 ;... + JRST [AOS CTLBLK+1 ;SKIP OVER ANOTHER 5 CHARS + MOVNI RC,5 ;... + ADDM RC,CTLBLK+2 ;... + 006553' 254000 014312' JRST GOSET1 ] ;GO READ ANOTHER CHAR + 006554' 322340 006546' JUMPE C,GOSET1 ;IGNORE NULLS + 006555' 136340 013426' IDPB C,CTIBUF+1 ;STASH AWAY + 006556' 350000 013427' AOS CTIBUF+2 ;INCREMENT CHAR. COUNT + 006557' 302340 000012 CAIE C,12 ;LINE FEED OR + 006560' 306340 000175 CAIN C,175 ;ALTMODE? + 006561' 254000 006570' JRST GOSET2 ;YES, FINISHED WITH COMMAND + 006562' 302340 000176 CAIE C,176 + 006563' 306340 000033 CAIN C,33 + 006564' 254000 006570' JRST GOSET2 ;ALTMODE. + 006565' 367400 006546' SOJG CS,GOSET1 ;GO READ ANOTHER + 006566' 561440 014316' HRROI RC,[SIXBIT /COMMAND LINE TOO LONG@/] + 006567' 254000 007714' JRST ERRFIN ;GO COMPLAIN + 006570' 201340 000012 GOSET2: MOVEI C,12 ;MAKE SURE THERE'S A LF + 006571' 136340 013426' IDPB C,CTIBUF+1 ;... + 006572' 202040 013426' MOVEM AC1,CTIBUF+1 ;SET POINTER TO BEGINNING + 006573' 350000 013427' AOS CTIBUF+2 ;ADD I TO COUNT + 006574' 200000 013421' MOVE SAVFF ;RESET JOBFF FOR NEW BINARY + 006575' 202000 006531* MOVEM JOBFF ;... + 006576' 254000 006620' JRST BINSET + MACRO V.10 PAGE 122 + I/O ROUTINES + + + 006577' 260740 000066' RPGS1: PUSHJ PP,DELETE ;DELETE COMMAND FILE + 006600' 202040 012561' MOVEM ACDEV,RPGDEV ;GET SET TO INIT + 006601' 050200 012560' OPEN CTL2,RPGINI ;DO IT + 006602' 254000 007700' JRST EINIT ;ERROR + 006603' 202100 012673' MOVEM ACFILE,INDIR ;USE INPUT BLOCK + 006604' 202200 012676' MOVEM ACPPN,INDIR+3 ;SET PPN + 006605' 202140 012674' MOVEM ACEXT,INDIR+1 + 006606' 076200 012673' LOOKUP CTL2,INDIR + JRST [JUMPN ACEXT,RPGLOS ;GIVE UP ,EXPLICIT EXTENSION + MOVSI ACEXT,(SIXBIT /CCL/) ;IF BLANK TRY CCL + 006607' 254000 014322' JRST .-2 ] + 006610' 546140 013420' HLRM ACEXT,EXTMP ;SAVE THE EXTENSION + 006611' 554000 000062* HLRZ JOBSA ;RESET JOBFF TO ORIGINAL + 006612' 202000 006575* MOVEM JOBFF + 006613' 661600 001000 TLO IO,CRPGSW ;TURN ON SWITCH SO WE RESET WORLD + 006614' 254000 006523' JRST RPGS2 ;AND GO + 006615' 071200 000000 RPGLOS: RELEAS CTL2,0 + 006616' 621600 001000 TLZ IO,CRPGSW ;STOPS IO TO UNASGD CHAN + 006617' 254000 007707' JRST ERRCF ;NO FILE FOUND + > + MACRO V.10 PAGE 123 + I/O ROUTINES + + 006620' 260740 007215' BINSET: PUSHJ PP,NAME1 ;GET FIRST NAME + 006621' 306340 000041 IFN CCLSW,<CAIN C,"!" ;WAS THIS AN IMPERATIVE? + 006622' 254000 000017' JRST NUNSET ;GET THEE TO A NUNNERY + 006623' 306340 000100 CAIN C,"@" ;CHEK FOR A NEW RPG FILE + 006624' 254000 006577' JRST RPGS1> + 006625' 607640 002000 TLNN FR,CREFSW ;CROSS REF REQUESTED? + 006626' 254000 006666' JRST LSTSE1 ;YES, SKIP BINARY + 006627' 306340 000054 CAIN C,"," ;COMMA? + 006630' 322040 006665' JUMPE ACDEV,LSTSET ;YES, SKIP BINARY IF NO DEVICE SPECIFIED + 006631' 306340 000137 CAIN C,"_" ;LEFT ARROW? + 006632' 322040 006666' JUMPE ACDEV,LSTSE1 ;YES, SKIP BINARY IF NO DEVICE SPECIFIED + 006633' 322040 006436' JUMPE ACDEV,M ;IGNORE IF JUST <CR-LF> + 006634' 661640 001000 TLO FR,PNCHSW ;OK, SET SWITCH + 006635' 202040 012550' MOVEM ACDEV,BINDEV ;STORE DEVICE NAME + 006636' 202100 012667' MOVEM ACFILE,BINDIR ;STORE FILE NAME IN DIRECTORY + 006637' 326140 006641' JUMPN ACEXT,.+2 ;EXTENSION SPECIFIED? + 006640' 205140 624554 MOVSI ACEXT,(SIXBIT /REL/) ;NO, ASSUME RELOCATABLE BINARY + 006641' 202140 012670' MOVEM ACEXT,BINDIR+1 ;STORE IN DIRECTORY + 006642' 202200 012672' MOVEM ACPPN,BINDIR+3 ;SET PPN + 006643' 050040 012547' OPEN BIN,BININI ;INITIALIZE BINARY + 006644' 254000 007700' JRST EINIT ;ERROR + 006645' 623300 002000 TLZE TIO,TIOLE ;SKIP TO EOT + 006646' 072040 000010 MTAPE BIN,10 + 006647' 623300 001000 TLZE TIO,TIORW ;REWIND REQUESTED? + 006650' 072040 000001 MTAPE BIN,1 ;YES + 006651' 325400 006657' JUMPGE CS,BINSE2 ;BRANCH IF NO BACK-SPACE + 006652' 072040 000017 MTAPE BIN,17 ;BACK-SPACE A FILE + 006653' 341400 006652' AOJL CS,.-1 ;TEST FOR END + 006654' 072040 000000 WAIT BIN, + 006655' 061040 004000 STATO BIN,1B24 ;LOAD POINT? + 006656' 072040 000016 MTAPE BIN,16 ;NO, GO FORWARD ONE + 006657' 367400 006656' BINSE2: SOJG CS,.-1 ;TEST FORWARD SPACING + + 006660' 603300 020000 TLNE TIO,TIOCLD ;DIRECTORY CLEAR REQUESTED? + 006661' 047040 000013 UTPCLR BIN, ;YES, CLEAR IT + 006662' 065040 000002 OUTBUF BIN,2 ;SET UP TWO RING BUFFER + 006663' 306340 000137 CAIN C,"_" + 006664' 254000 006740' JRST GETSET ;NO LISTING + MACRO V.10 PAGE 124 + I/O ROUTINES + + 006665' 260740 007215' LSTSET: PUSHJ PP,NAME1 ;GET NEXT DEVICE + 006666' 302340 000137 LSTSE1: CAIE C,"_" + 006667' 254000 007321' JRST ERRCM + 006670' 603640 002000 TLNE FR,CREFSW ;CROSS-REF REQUESTED? + 006671' 254000 006700' JRST LSTSE2 ;NO, BRANCH + 006672' 326040 006674' JUMPN ACDEV,.+2 ;YES, WAS DEVICE SPECIFIED? + 006673' 205040 446353 MOVSI ACDEV,(SIXBIT /DSK/) ;NO, ASSUME DSK + 006674' 326100 006676' JUMPN ACFILE,.+2 + 006675' 200100 014325' MOVE ACFILE,[SIXBIT /CREF/] + 006676' 326140 006700' JUMPN ACEXT,.+2 + 006677' 205140 436246 MOVSI ACEXT,(SIXBIT /CRF/) + 006700' 322040 006740' LSTSE2: JUMPE ACDEV,GETSET ;FORGET LISTING IF NO DEVICE SPECIFIED + 006701' 200000 000001 MOVE AC0,ACDEV + 006702' 047000 000004 DEVCHR AC0, ;GET CHARACTERISTICS + 006703' 603000 042010 TLNE AC0,LPTBIT!DISBIT!TTYBIT + 006704' 603640 002000 TLNE FR,CREFSW ; WAS CROSS-REF REQUESTED? + 006705' 354000 013042' AOSA OUTSW+0*TTYSW ;NO, ASSUME TTY + 006706' 254000 007321' JRST ERRCM ;YES, ERROR - CREF DEV MUST NOT BE LPT, DIS, OR TTY + 006707' 603000 020000 TLNE AC0,CONBIT ;CONTROLING TELETYPE LISTING? + 006710' 254000 006740' JRST GETSET ;YES, BUFFER ALREADY SET + 006711' 202040 012553' MOVEM ACDEV,LSTDEV ;STORE DEVICE NAME + 006712' 350000 013042' AOS OUTSW+0*LPTSW ;SET FOR LPT + 006713' 202100 012663' MOVEM ACFILE,LSTDIR ;STORE FILE NAME + 006714' 326140 006716' JUMPN ACEXT,.+2 + 006715' 205140 546364 MOVSI ACEXT,(SIXBIT /LST/) + 006716' 202140 012664' MOVEM ACEXT,LSTDIR+1 + 006717' 202200 012666' MOVEM ACPPN,LSTDIR+3 ;SET PPN + 006720' 050140 012552' OPEN LST,LSTINI ;INITIALIZE LISTING OUTPUT + 006721' 254000 007700' JRST EINIT ;ERROR + 006722' 623300 002000 TLZE TIO,TIOLE + 006723' 072140 000010 MTAPE LST,10 + 006724' 623300 001000 TLZE TIO,TIORW ;REWIND REQUESTED? + 006725' 072140 000001 MTAPE LST,1 ;YES + 006726' 325400 006734' JUMPGE CS,LSTSE3 + 006727' 072140 000017 MTAPE LST,17 + 006730' 341400 006727' AOJL CS,.-1 + 006731' 072140 000000 WAIT LST, + 006732' 061140 004000 STATO LST,1B24 + 006733' 072140 000016 MTAPE LST,16 + 006734' 367400 006733' LSTSE3: SOJG CS,.-1 + 006735' 603300 020000 TLNE TIO,TIOCLD ;DIRECTORY CLEAR REQUESTED? + 006736' 047140 000013 UTPCLR LST, ;YES, CLEAR IT + 006737' 065140 000002 OUTBUF LST,2 ;SET UP A TWO RING BUFFER + MACRO V.10 PAGE 125 + I/O ROUTINES + + 006740' 201140 010037' GETSET: MOVEI 3,PDPERR + 006741' 542140 000000* HRRM 3,JOBAPR ;SET TRAP LOCATION + 006742' 201140 200000 MOVEI 3,1B19 ;SET FOR PUSH-DOWN OVERFLOW + 006743' 047140 000016 APRENB 3, + 006744' 370140 013043' SOS 3,PDP ;GET PDP REQUEST MINUS 1 + 006745' 221140 000062 IMULI 3,.PDP ;COMPUTE SIZE (50*<NUMBER OF /P'S +1>) + 006746' 514700 000003 HRLZ MP,3 + 006747' 540700 006612* HRR MP,JOBFF ;SET BASIC POINTER + 006750' 200740 000016 MOVE PP,MP + 006751' 274740 000003 SUB PP,3 + 006752' 202740 012600' MOVEM PP,RP ;SET RP + 006753' 274740 000003 SUB PP,3 + 006754' 240140 000001 ASH 3,1 ;DOUBLE SIZE OF BASIC POINTER + 006755' 504740 000003 HRL PP,3 + 006756' 276740 000003 SUBM PP,3 ;COMPUTE TOP LOCATION + IFN UNIVR,<SKIPN UNITOP ;IF ANY UNIVERSALS HAVE BEEN SEEN + JRST GETSE0 ;NO + HRRZS 3 ;GET TOP OF BUFFERS AND STACKS + CAMLE 3,UNISIZ ;HOPE ITS NOT BIGGER THAN UNIVERSAL ONE + JRST UNIERR ;IT WAS, YOU LOSE + SKIPA 3,UNITOP ;DON'T LOSE THEM + GETSE0: HRRZM 3,UNISIZ ;STORE UNTIL A UNIVERSAL IS SEEN> + 006757' 552140 013000' HRRZM 3,LADR ;SET START OF MACRO TREE + 006760' 552140 012727' HRRZM 3,FREE + + 006761' 550000 006533* GETSE1: HRRZ JOBREL + 006762' 275000 000001 SUBI 1 + 006763' 202000 013103' MOVEM SYMTOP ;SET TOP OF SYMBOL TABLE + 006764' 275000 000004 SUBI LENGTH ;SET POINTER FOR INITIAL SYMBOLS + 006765' 313000 013000' CAMLE LADR ;HAVE WE ROOM? + 006766' 254000 006774' JRST GETSE2 ;YES + + 006767' 550100 006761* HRRZ 2,JOBREL ;NO, TRY FOR MORE CORE + 006770' 271100 002000 ADDI 2,2000 + 006771' 047100 000011 CORE 2, + 006772' 254000 010035' JRST XCEED2 ;NO MORE, INFORM USER + 006773' 254000 006761' JRST GETSE1 ;TRY AGAIN + + 006774' 202000 013102' GETSE2: MOVEM SYMBOL ;SET START OF SYMBOL TABLE + 006775' 505000 011713' HRLI SYMNUM + 006776' 251020 013103' BLT @SYMTOP ;STORE SYMBOLS + 006777' 260740 012455' PUSHJ PP,SRCHI ;INITIALIZE TABLE + 007000' 200000 014326' MOVE [XWD CTIBUF+1,CTLSAV] ;SAVE CONTROL INPUT BUFFER + 007001' 251000 013267' BLT CTLS1 ;FOR RESCAN ON PASS 2 + 007002' 205000 446353 IFN FTDISK,<MOVSI (SIXBIT /DSK/) ;SET INPUT TO TAKE DSK AS DEV + 007003' 202000 013264' MOVEM ACDEVX> + 007004' 260740 002657' PUSHJ PP,COUTI ;INIT OUTPUT JUST IN CASE + 007005' 260740 007027' PUSHJ PP,INSET ;GET FIRST INPUT FILE + + 007006' 603600 001000 IFN CCLSW,<TLNE IO,CRPGSW ;BUT ONLY IF DOING RPG + 007007' 051140 014327' TTCALL 3,[ASCIZ /MACRO: /] ;PUBLISH COMPILER NAME> + 007010' 200400 012673' MOVE CS,INDIR ;SET UP NAME OF FIRST FILE + 007011' 202400 012537' MOVEM CS,LSTFIL ;AS LAST PRINTED + MACRO V.10 PAGE 125-1 + I/O ROUTINES + + 007012' 402000 013416' SETZM LSTPGN + 007013' 254000 000077' JRST ASSEMB ;START ASSEMBLY + MACRO V.10 PAGE 126 + I/O ROUTINES + + 007014' 070040 000000 FINIS: CLOSE BIN, ;DUMP BUFFER + 007015' 603640 001000 TLNE FR,PNCHSW ;PUNCH REQUESTED? + 007016' 260740 010133' PUSHJ PP,TSTBIN ;YES, TEST FOR ERRORS + 007017' 071040 000000 RELEAS BIN, + 007020' 070140 000000 CLOSE LST, + 007021' 373000 013042' SOSLE OUTSW+0*LPTSW ;LPT TYPE OUTPUT? + 007022' 260740 010142' PUSHJ PP,TSTLST ;YES, TEST FOR ERRORS + 007023' 071140 000000 RELEAS LST, + 007024' 071100 000000 RELEAS CHAR, + 007025' 067000 000000 OUTPUT CTL,0 ;FLUSH TTY OUTPUT + IFN UNIVR,<SKIPE UNIVSN ;SKIP IF NOT ASSEMBLING UNIVERSAL + PUSHJ PP,UNISYM ;STORE SYMBOLS ETC. FIRST> + 007026' 254000 006436' JRST M ;RETURN FOR NEXT ASSEMBLY + MACRO V.10 PAGE 127 + I/O ROUTINES + + 007027' 201000 013434' INSET: MOVEI JOBFFI ;POINTER TO INPUT BUFFER + 007030' 542000 006747* HRRM JOBFF ;INFORM SYSTEM OF BUFFER AREA + 007031' 260740 007216' PUSHJ PP,NAME2 ;GET NEXT COMMAND NAME + 007032' 322040 007633' JUMPE ACDEV,ERRNE ;ERROR IF NONE LEFT + 007033' 202040 012564' MOVEM ACDEV,INDEV ;STORE DEVICE + 007034' 202100 012673' MOVEM ACFILE,INDIR ;STORE FILE IN DIRECTORY + 007035' 202200 012676' MOVEM ACPPN,INDIR+3 ;STORE PPN BEFORE WE LOSE IT + 007036' 050100 012563' OPEN CHAR,INDEVI + 007037' 254000 007700' JRST EINIT ;ERROR + 007040' 047040 000004 DEVCHR ACDEV, ;TEST CHARACTERISTICS + 007041' 607040 000020 TLNN ACDEV,MTABIT ;MAG TAPE? + 007042' 254000 007065' JRST INSET3 ;NO + 007043' 627640 000004 TLZN FR,MTAPSW ;FIRST MAG TAPE IN PASS 2? + 007044' 254000 007047' JRST INSET1 ;NO + 007045' 607300 001000 TLNN TIO,TIORW ;YES, REWIND REQUESTED? + 007046' 274400 013044' SUB CS,RECCNT ;NO, PREPARE TO BACK-SPACE TAPE + 007047' 350000 013044' INSET1: AOS RECCNT ;INCREMENT FILE COUNTER + 007050' 272400 013044' ADDM CS,RECCNT ;UPDATE COUNT + 007051' 623300 002000 TLZE TIO,TIOLE + 007052' 072100 000010 MTAPE CHAR,10 + 007053' 623300 001000 TLZE TIO,TIORW ;REWIND? + 007054' 072100 000001 MTAPE CHAR,1 ;YES + 007055' 325400 007064' JUMPGE CS,INSET2 + 007056' 072100 000017 MTAPE CHAR,17 + 007057' 072100 000017 MTAPE CHAR,17 + 007060' 341400 007057' AOJL CS,.-1 + 007061' 072100 000000 WAIT CHAR, + 007062' 061100 004000 STATO CHAR,1B24 + 007063' 072100 000016 MTAPE CHAR,16 + 007064' 365400 007063' INSET2: SOJGE CS,.-1 + + 007065' 064100 000001 INSET3: INBUF CHAR,1 + 007066' 201240 013434' MOVEI ACPNTR,JOBFFI + 007067' 250240 007030* EXCH ACPNTR,JOBFF + 007070' 275240 013434' SUBI ACPNTR,JOBFFI + 007071' 201200 000407 MOVEI ACDEL,NUMBUF*203+1 + 007072' 230200 000005 IDIV ACDEL,ACPNTR + 007073' 064104 000000 INBUF CHAR,(ACDEL) + 007074' 326140 007077' JUMPN ACEXT,INSET4 ;TAKE USER'S EXTENSION IF NON-BLANK + 007075' 205140 554143 MOVSI ACEXT,(SIXBIT /MAC/) ;BLANK, TRY .MAC FIRST + 007076' 260740 007143' PUSHJ PP,INSETI + 007077' 260740 007143' INSET4: PUSHJ PP,INSETI + 007100' 322140 007707' JUMPE ACEXT,ERRCF ;ERROR IF ZERO + 007101' 603040 000010 TLNE ACDEV,TTYBIT ;TELETYPE? + 007102' 060100 000001 SETSTS CHAR,AL ;YES, CHANGE TO ASCII LINE + MACRO V.10 PAGE 128 + I/O ROUTINES + + ;DO ALL ENTERS HERE FOR LEVEL D + 007103' 332000 013261' SKIPE ENTERS ;HAVE ENTERS BEEN DONE ALREADY? + 007104' 254000 007136' JRST ENTRDN ;YES, DON'T DO TWICE + 007105' 336140 012553' SKIPN ACEXT,LSTDEV ;IS THERE A LIST DEVICE? + 007106' 254000 007127' JRST LSTSE5 ;NO SO DON'T DO ENTER + 007107' 336100 012663' SKIPN ACFILE,LSTDIR ;GET FILE NAME INCASE OF ERROR + JRST [DEVCHR ACEXT, + TLNE ACEXT,DIRBIT ;DOES IT HAVE A DIRECTORY? + JRST LSTSE4 ;YES, GIVE UP BEFORE HARM IS DONE + SKIPE ACFILE,INDIR ;USE INPUT FILE NAME + MOVEM ACFILE,LSTDIR ;TOO BAD IF ZERO ALSO + 007110' 254000 014331' JRST LSTSE4] + 007111' 510140 012664' HLLZ ACEXT,LSTDIR+1 ;EXT ALSO + 007112' 200200 012666' MOVE ACPPN,LSTDIR+3 ;SAVE PPN + 007113' 076140 012663' LOOKUP LST,LSTDIR ;PREVIOUS ONE STILL THERE + 007114' 254000 007125' JRST LSTSE4 ;NO + 007115' 402000 012663' SETZM LSTDIR ;YES,CLEAR NAME + 007116' 202200 012666' MOVEM ACPPN,LSTDIR+3 ;RESET PPN + 007117' 055140 012663' RENAME LST,LSTDIR + 007120' 070140 000000 CLOSE LST, ;IGNORE FAILURE + 007121' 202100 012663' MOVEM ACFILE,LSTDIR ;RESTORE NAME + 007122' 513000 012664' HLLZS LSTDIR+1 ;BH 11/19/74 FOR DATE75. CLEAR RH. + 007123' 402000 012665' SETZM LSTDIR+2 ;CLEAR PROTECTION AND DATE + 007124' 202200 012666' MOVEM ACPPN,LSTDIR+3 ;SET PPN AGAIN + 007125' LSTSE4: + 007125' 077140 012663' ENTER LST,LSTDIR ;SET UP DIRECTORY + 007126' 254000 007702' JRST ERRCL ;ERROR + 007127' 336140 012550' LSTSE5: SKIPN ACEXT,BINDEV ;A BINARY DEVICE THEN ? + 007130' 254000 007136' JRST ENTRDN ;NO + 007131' 336100 012667' SKIPN ACFILE,BINDIR ;INCASE OF ERROR + JRST [DEVCHR ACEXT, + TLNE ACEXT,DIRBIT ;DOES IT HAVE A DIRECTORY? + JRST .+1 ;YES, GIVE UP BEFORE HARM IS DONE + SKIPE ACFILE,INDIR ;USE INPUT FILE NAME + MOVEM ACFILE,BINDIR ;TOO BAD IF ZERO ALSO + 007132' 254000 014337' JRST .+1] + 007133' 513140 012670' HLLZS ACEXT,BINDIR+1 ;BH 11/19/74 DATE75. WAS HLLZ. + 007134' 077040 012667' ENTER BIN,BINDIR ;ENTER FILE NAME + 007135' 254000 007704' JRST ERRCB ;ERROR + + 007136' 476000 013261' ENTRDN: SETOM ENTERS ;MAKE SURE ONLY DONE ONCE + REPEAT 0,< + MOVE CS,[POINT 7,DEVBUF] + PUSH PP,1 ;SAVE THE ACCS + PUSH PP,2 + PUSH PP,3 + SKIPN 2,INDIR ;GET INPUT NAME + JRST FINDEV ;FINISHED WITH DEVICE + SETZ 1, ;CLEAR FOR RECEIVING + LSHC 1,6 ;SHIFT ONE CHAR. IN + ADDI 1,40 ;FORM ASCII + IDPB 1,CS ;STORE CHAR. + JUMPN 2,.-4 ;MORE TO DO? + MACRO V.10 PAGE 128-1 + I/O ROUTINES + + MOVEI 1," " ;SEPARATE BY TAB + IDPB 1,CS + HLLZ 2,INDIR+1 ;GET EXT + JUMPE 2,FINEXT ;NO EXT + SETZ 1, + LSHC 1,6 ;SAME LOOP AS ABOVE + ADDI 1,40 + IDPB 1,CS + JUMPN 2,.-4 + FINEXT: MOVEI 1," " + IDPB 1,CS ;SEPARATE BY TAB + LDB 1,[POINT 12,INDIR+2,35] ;GET DATE + LDB 2,[POINT 3,INDIR+1,20] ;BH 11/19/74 DATE75. + DPB 2,[POINT 3,1,23] ;BH 11/19/74 DATE75. + JUMPE 1,FINDEV ;NO DATE? + PUSHJ PP,DATOUT ;STORE IT + LDB 2,[POINT 11,INDIR+2,23] ;GET CREATION TIME + JUMPE 2,FINDEV ;NO TIME (DECTAPE) + MOVEI 1," " ;SEPARATE BY SPACE + IDPB 1,CS + PUSHJ PP,TIMOU1 ;STORE TIME + FINDEV: SETZ 1, + MOVEI 2," " ;FINAL TAB + IDPB 2,CS + IDPB 1,CS ;TERMINATE FOR NOW + POP PP,3 ;RESTORE ACCS + POP PP,2 + POP PP,1 + > + 007137' 336000 013414' SKIPN PAGENO ;IF FIRST TIME THRU + 007140' 254000 010417' JRST OUTFF ;START NEW PAGE + 007141' 402000 013414' SETZM PAGENO ;ON NEW FILE, RESET PAGES + 007142' 254000 010420' JRST OUTFF2 ;DON'T START NEW PAGE UNLESS FF + + 007143' 512140 012674' INSETI: HLLZM ACEXT,INDIR+1 ;STORE EXTENSION + 007144' 200200 012676' MOVE ACPPN,INDIR+3 ;SAVE PPN + 007145' 076100 012673' LOOKUP CHAR,INDIR + 007146' 334140 012674' SKIPA ACEXT,INDIR+1 ;GET ERROR CODE + 007147' 254000 003357' JRST CPOPJ1 ;SKIP-RETURN IF FOUND + 007150' 602140 777777 TRNE ACEXT,-1 ;ERROR CODE OF 0 IS FILE NOT FOUND + 007151' 254000 007707' JRST ERRCF ;FILE THERE BUT NOT READABLE + 007152' 400140 000000 SETZ ACEXT, ;CLEAR EXT AND TRY AGAIN + 007153' 202200 012676' MOVEM ACPPN,INDIR+3 ;RESTORE PPN + 007154' 263740 000000 POPJ PP, + MACRO V.10 PAGE 129 + I/O ROUTINES + + 007155' 204000 014326' REC2: MOVS [XWD CTIBUF+1,CTLSAV] ;RESCAN CONTROL (FROM PASS1 END STMNT) + 007156' 251000 013427' BLT CTIBUF+2 ;INPUT BUFFER + 007157' 201000 000137 MOVEI "_" + 007160' 506000 012677' HRLM ACDELX ;FUDGE PREVIOUS DELIMITER + IFN RENTSW,<MOVE HHIGH ;GET HI-SEG BREAK + MOVEM HIGH1 ;SAVE THE ONE WE GOT ON PASS1 (FOR HISEG)> + 007161' 402000 013262' SETZM PASS2I + 007162' 200000 014200' MOVE [XWD PASS2I,PASS2I+1] + 007163' 251000 013415' BLT PASS2X-1 ;ZERO PASS2 VARIABLES + 007164' 661640 000024 TLO FR,MTAPSW!LOADSW ;SET FLAGS + + 007165' 200000 012564' GOTEND: MOVE INDEV ;GET LAST DEVICE + 007166' 047000 000004 DEVCHR ;GET ITS CHARACTERISTICS + 007167' 603000 000004 TLNE 4 ;TEST FOR DIRECTORY (DSK OR DTA) + 007170' 254000 007176' JRST EOT ;YES, SO DON'T WASTE TIME + 007171' 254000 007174' JRST .+3 ;NO, INPUT BUFFER BY BUFFER + 007172' 056100 000000 IN CHAR, + 007173' 254000 007172' JRST .-1 ;NO ERRORS + 007174' 061100 020000 STATO CHAR,1B22 ;TEST FOR EOF + 007175' 254000 007172' JRST .-3 ;IGNORE ERRORS + + 007176' 260740 007211' EOT: PUSHJ PP,SAVEXS ;SAVE REGISTERS + 007177' 260740 007027' PUSHJ PP,INSET ;GET THE NEXT INPUT DEVICE + 007200' 561440 014345' HRROI RC,[SIXBIT /END OF PASS 1@/] ;ASSUME END OF PASS + 007201' 627640 000020 TLZN FR,LOADSW ;ZERO ONLY ON END OF PASS 1 + 007202' 561440 014350' HRROI RC,[SIXBIT /LOAD THE NEXT FILE@/] ;NOT END OF PASS + 007203' 607040 000024 TLNN ACDEV,(1B13!1B15) ;WAS ALL THAT WORK NECESSARY? + 007204' 260740 007757' PUSHJ PP,TYPMSG ;YES + + 007205' 205440 013045' RSTRXS: MOVSI RC,SAVBLK ;SET POINTER + 007206' 251440 000010 BLT RC,RC-1 ;RESTORE REGISTERS + 007207' 200440 013056' MOVE RC,SAVERC ;RESTORE RC + 007210' 263740 000000 POPJ PP, ;EXIT + + 007211' 202440 013056' SAVEXS: MOVEM RC,SAVERC ;SAVE RC + 007212' 201440 013045' MOVEI RC,SAVBLK ;SET POINTER + 007213' 251440 013055' BLT RC,SAVBLK+RC-1 ;BLT ALL REGISTERS BELOW RC + 007214' 263740 000000 POPJ PP, ;EXIT + MACRO V.10 PAGE 130 + I/O ROUTINES + + 007215' 402000 013264' NAME1: SETZM ACDEVX ;ENTRY FOR DESTINATION + 007216' 403040 012675' NAME2: SETZB ACDEV,INDIR+2 ;ENTRY FOR SOURCE + 007217' 201100 000000 MOVEI ACFILE,0 ;CLEAR FILE + 007220' 554200 012677' HLRZ ACDEL,ACDELX ;GET PREVIOUS DELIMITER + 007221' 403300 000010 SETZB TIO,CS + 007222' 403140 012676' SETZB ACEXT,INDIR+3 ;RESET EXTENSION AND PROGRAM-NUMBER PAIR + 007223' 402000 013402' SETZM PPN ;CLEAR PPN + 007224' 205240 440600 NAME3: MOVSI ACPNTR,(POINT 6,AC0) ;SET POINTER + 007225' 634000 000000 TDZA AC0,AC0 ;CLEAR SYMBOL + + 007226' 260740 007346' SLASH: PUSHJ PP,SW0 + 007227' 260740 007614' GETIOC: PUSHJ PP,TTYIN ;GET INPUT CHARACTER + 007230' 306340 000057 CAIN C,"/" + 007231' 254000 007226' JRST SLASH + 007232' 306340 000050 CAIN C,"(" + 007233' 254000 007342' JRST SWITCH + 007234' 306340 000072 CAIN C,":" + 007235' 254000 007267' JRST DEVICE + 007236' 306340 000056 CAIN C,"." + 007237' 254000 007272' JRST NAME + 007240' 302340 000041 IFN CCLSW,<CAIE C,"!" ;IS CHAR AN IMPERATIVE? + 007241' 306340 000100 CAIN C,"@" + 007242' 254000 007276' JRST TERM ;YES, GO DO IT> + 007243' 302340 000033 CAIE C,33 ;CHECK FOR THREE FLAVORS OF ALT-MODE + 007244' 306340 000176 CAIN C,176 ;... + 007245' 254000 007276' JRST TERM ;... + 007246' 307340 000015 CAIG C,CR ;LESS THAN CR? + 007247' 305340 000012 CAIGE C,LF ;AND GREATER THAN LF? + 007250' 306340 000175 CAIN C,175 ;OR 3RD ALTMOD + 007251' 254000 007276' JRST TERM ;YES + 007252' 306340 000133 IFN FTDISK,<CAIN C,"[" + 007253' 254000 007323' JRST PROGNP ;GET PROGRAMER NUMBER PAIR> + 007254' 306340 000075 CAIN C,"=" ;EQUALS IS SAME AS LEFT ARROW + 007255' 644340 000142 TRCA C,142 ;SO MAKE IT A "_" AND SKIP + 007256' 302340 000054 CAIE C,"," + 007257' 306340 000137 CAIN C,"_" + 007260' 254000 007276' JRST TERM + 007261' 305340 000040 CAIGE C,40 ;VALID AS SIXBIT? + JRST [CAIN C,"Z"-100 ;NO,IS IT ^Z + EXIT ;YES,EXIT FOR BATCH + 007262' 254000 014354' JRST GETIOC] ;JUST IGNORE + 007263' 275340 000040 SUBI C,40 ;CONVERT TO 6-BIT + 007264' 603240 770000 TLNE ACPNTR,770000 ;HAVE WE STORED SIX BYTES? + 007265' 136340 000005 IDPB C,ACPNTR ;NO, STORE IT + 007266' 254000 007227' JRST GETIOC ;GET NEXT CHARACTER + + 007267' 326040 007321' DEVICE: JUMPN ACDEV,ERRCM ;ERROR IF ALREADY SET + 007270' 200040 000000 MOVE ACDEV,AC0 ;DEVICE NAME + 007271' 254000 007274' JRST DEVNAM ;COMMON CODE + + 007272' 326100 007321' NAME: JUMPN ACFILE,ERRCM ;ERROR IF ALREADY SET + 007273' 200100 000000 MOVE ACFILE,AC0 ;FILE NAME + 007274' 200200 000007 DEVNAM: MOVE ACDEL,C ;SET DELIMITER + MACRO V.10 PAGE 130-1 + I/O ROUTINES + + 007275' 254000 007224' JRST NAME3 ;GET NEXT SYMBOL + + 007276' 322200 007303' TERM: JUMPE ACDEL,TERM1 ;IF NO PREVIOUS TERMINATOR, THEN FILENAME + 007277' 306200 000137 CAIN ACDEL,"_" ;... + 007300' 254000 007303' JRST TERM1 ;... + 007301' 302200 000072 CAIE ACDEL,":" ;IF PREVIOUS DELIMITER + 007302' 306200 000054 CAIN ACDEL,"," ;WAS COLON OR COMMA + 007303' 200100 000000 TERM1: MOVE ACFILE,AC0 ;SET FILE + 007304' 306200 000056 CAIN ACDEL,"." ;IF PERIOD, + 007305' 510140 000000 HLLZ ACEXT,AC0 ;SET EXTENSION + 007306' 506340 012677' HRLM C,ACDELX ;SAVE PREVIOUS DELIMITER + 007307' 326040 007311' JUMPN ACDEV,.+2 ;IF DEVICE SET USE IT + 007310' 334040 013264' SKIPA ACDEV,ACDEVX ;OTHERWISE USE LAST DEVICE + 007311' 202040 013264' MOVEM ACDEV,ACDEVX ;AND DEVICE + 007312' 200200 013402' MOVE ACPPN,PPN ;PUT PPN IN RIGHT PLACE + 007313' 306340 000041 IFN FTDISK,<CAIN C,"!" ;IMPERATIVE? + 007314' 263740 000000 POPJ PP, ;YES, DON'T ASSUME DEV + 007315' 322100 003360' JUMPE ACFILE,CPOPJ ;IF THERE IS A FILE, + 007316' 326040 007320' JUMPN ACDEV,.+2 ;BUT NO DEVICE + 007317' 205040 446353 MOVSI ACDEV,(SIXBIT /DSK/) ;THEN ASSUME DISK> + 007320' 263740 000000 POPJ PP, ;EXIT + MACRO V.10 PAGE 131 + I/O ROUTINES + + 007321' 561440 014357' ERRCM: HRROI RC,[SIXBIT /COMMAND ERROR@/] + 007322' 254000 007714' JRST ERRFIN + + 007323' IFN FTDISK,<PROGNP: + 007323' 516440 013402' PROGN1: HRLZM RC,PPN ;COMMA, STORE LEFT HALF + 007324' 201440 000000 PROGN2: MOVEI RC,0 ;CLEAR AC + 007325' 260740 007614' PROGN3: PUSHJ PP,TTYIN + 007326' 306340 000054 CAIN C,"," + 007327' 254000 007323' JRST PROGN1 ;STORE LEFT HALF + 007330' 542440 013402' HRRM RC,PPN ;ASSUME TERMINAL + 007331' 306340 000135 CAIN C,"]" + 007332' 254000 007227' JRST GETIOC ;YES, RETURN TO MAIN SCAN + 007333' 301340 000060 CAIL C,"0" ;CHECK FOR VALID NUMBERS + 007334' 303340 000067 CAILE C,"7" + 007335' 254000 007321' JRST ERRCM ;NOT VALID + 007336' 242440 000003 LSH RC,3 ;SHIFT PREVIOUS RESULT + 007337' 271447 777720 ADDI RC,-"0"(C) ;ADD IN NEW NUMBER + 007340' 254000 007325' JRST PROGN3 ;GET NEXT CHARACTER> + MACRO V.10 PAGE 132 + I/O ROUTINES + + 007341' 260740 007347' SWITC0: PUSHJ PP,SW1 ;PROCESS CHARACTER + 007342' 260740 007614' SWITCH: PUSHJ PP,TTYIN ;GET NEXT CHARACTER + 007343' 302340 000051 CAIE C,")" ;END OF STRING? + 007344' 254000 007341' JRST SWITC0 ;NO + 007345' 254000 007227' JRST GETIOC ;YES + + 007346' 260740 007614' SW0: PUSHJ PP,TTYIN + 007347' 201347 777677 SW1: MOVEI C,-"A"(C) ;CONVERT FROM ASCII TO NUMERIC + 007350' 303340 000031 CAILE C,"Z"-"A" ;WITHIN BOUNDS? (IS IT ALPHA?) + 007351' 254000 007321' JRST ERRCM ;NO, ERROR + 007352' 200440 014362' MOVE RC,[POINT 4,BYTAB] + 007353' 133000 000011 IBP RC + 007354' 365340 007353' SOJGE C,.-1 ;MOVE TO PROPER BYTE + 007355' 135340 000011 LDB C,RC ;PICK UP BYTE + 007356' 322340 007321' JUMPE C,ERRCM ;TEST FOR VALID SWITCH + 007357' 307340 000003 CAIG C,SWTABT-SWTAB ;LEGAL ON SOURCE? + 007360' 321740 007321' JUMPL PP,ERRCM ;NO, TEST FOR SOURCE + 007361' 135440 014363' LDB RC,[POINT 4,SWTAB-1(C),12] + 007362' 306440 000014 CAIN RC,IO + 007363' 336000 013266' SKIPN CTLSAV ;IF PASS2 OR IO SWITCH, + 007364' 256007 007570' XCT SWTAB-1(C) ;EXECUTE INSTRUCTION + 007365' 263740 000000 POPJ PP, ;EXIT + 007366' 621600 000001 TLZ IO,IOSALL ;TAKE CARE OF /X + 007367' 263740 000000 POPJ PP, + + DEFINE HELP (TEXT)< + XLIST + ASCIZ ?TEXT? + LIST> + + HLPMES: HELP < + Switches are :- + */A advance one file + */B backspace one file + /C produce a cref listing + */E list macro expansions (LALL) + */F list in new format (.MFRMT) + /G list in old format (.HWFRMT) + /H type this text + */L reinstate listing (LIST) + /M suppress ascii in macro and repeat expansion (SALL) + */N suppress error printout on tty + /O set MLOFF pseudo-op + /P increase size of the pushdown stack + /Q suppress Q errors on the listing + */S suppress listing (XLIST) + */T rewind device + */X suppress all macro expansions (XALL) + */Z zero the directory + Switches A,B,C,T,W,X, and Z must immediately follow + the device or file to which they refer. + MACRO V.10 PAGE 133 + I/O ROUTINES + + DEFINE SETSW (LETTER,INSTRUCTION) < INSTRUCTION + J= <"LETTER"-"A">-^D9*<I=<"LETTER"-"A">/^D9> + SETCOD \I,J> + + DEFINE SETCOD (I,J) + <BYTAB'I=BYTAB'I!<.-SWTAB>B<4*J+3>> + + 000000 BYTAB0= 0 ;INITIALIZE TABLE + 000000 BYTAB1= 0 + 000000 BYTAB2= 0 + + 007571' SWTAB: + 007571' 661300 020000 SETSW Z,<TLO TIO,TIOCLD > + 007572' 621640 002000 SETSW C,<TLZ FR,CREFSW > + 007573' 370000 013043' SETSW P,<SOS PDP > + 007574' SWTABT: ;THE ABOVE SW'S ARE LEGAL ON OUTPUT ONLY + 007574' 271400 000001 SETSW A,<ADDI CS,1 > + 007575' 275400 000001 SETSW B,<SUBI CS,1 > + 007576' 621600 004001 SETSW E,<TLZ IO,IOPALL!IOSALL > + 007577' 000000 007370' SETSW H,<OUTSTR HLPMES> + 007600' 621600 200000 SETSW L,<TLZ IO,IOMSTR > + 007601' 661600 004001 SETSW M,<TLO IO,IOPALL!IOSALL > + 007602' 523000 013256' SETSW N,<HLLOS TYPERR > + 007603' 256000 004155' SETSW O,<XCT OFFML > + 007604' 661640 000010 SETSW Q,<TLO FR,ERRQSW > + 007605' 661600 200000 SETSW S,<TLO IO,IOMSTR > + 007606' 661300 002000 SETSW T,<TLO TIO,TIOLE > + 007607' 661300 001000 SETSW W,<TLO TIO,TIORW > + 007610' 665600 004000 SETSW X,<TLOA IO,IOPALL > + + 007611' BYTAB: ;BYTAB CONTAINS AN INDEX TO SWTAB + ;IT CONSIST OF 9 4BIT BYTES/WORD + ;OR ONE BYTE FOR EACH LETTER + + 007611' 212201 400160 +BYTAB0 ;A-I BYTE = 1 THROUGH 17 = INDEX + 007612' 001046 531700 +BYTAB1 ;J-R BYTE = 0 = COMMAND ERROR + 007613' 674003 600020 +BYTAB2 ;S-Z + + IF2,<PURGE I,J,BYTAB0,BYTAB1,BYTAB2> + MACRO V.10 PAGE 134 + I/O ROUTINES + + 007614' 375000 013427' TTYIN: SOSGE CTIBUF+2 ;ENUF CHAR.? + 007615' 254000 007631' JRST TTYERR ;NO + 007616' 134340 013426' ILDB C,CTIBUF+1 ;GET CHARACTER + 007617' 302340 000040 CAIE C," " ;SKIP BLANKS + 007620' 306340 000011 CAIN C,HT ;AND TABS + 007621' 254000 007614' JRST TTYIN + 007622' 306340 000015 CAIN C,15 ;CR? + 007623' 402000 013427' SETZM CTIBUF+2 ;YES,IGNORE REST OF LINE + 007624' 307340 000172 CAIG C,"Z"+40 ;CHECK FOR LOWER CASE + 007625' 305340 000141 CAIGE C,"A"+40 + 007626' 263740 000000 POPJ PP, ;NO,EXIT + 007627' 275340 000040 SUBI C,40 + 007630' 263740 000000 POPJ PP, ;YES, EXIT + + 007631' 336000 012564' TTYERR: SKIPN INDEV ;INPUT DEVICE SEEN? + 007632' 254000 007321' JRST ERRCM ;NO, SO MISSING "_" + 007633' 561440 014364' ERRNE: HRROI RC,[SIXBIT /?NO END STATEMENT ENCOUNTERED ON INPUT FILE@/] + 007634' 000000 000006 ERRNE0: SKPINC V ;SEE IF WE CAN INPUT A CHAR. + 007635' 255000 000000 JFCL ;BUT ONLY TO DEFEAT ^O + 007636' 260740 007757' PUSHJ PP,TYPMSG ;OUTPUT IT + 007637' 332000 013321' SKIPE LITLVL ;SEE IF IN LITERAL + 007640' 336000 013303' SKIPN LITPG ;PAGE 0 MEANS NOT IN A LITERAL REALY + 007641' 254000 007644' JRST ERRNE1 ;NO, TRY OTHERS + 007642' 200300 014376' MOVE V,[XWD [SIXBIT /IN LITERAL@/],LITPG] + 007643' 260740 010041' PUSHJ PP,PRNUM ;GO PRINT INFORMATION + 007644' 201300 000000 ERRNE1: MOVEI V,0 ;CHECK FOR OTHER PLACES + 007645' 332000 013273' SKIPE INDEF + 007646' 200300 014401' MOVE V,[XWD [SIXBIT /IN DEFINE@/],DEFPG] + 007647' 332000 013274' SKIPE INTXT + 007650' 200300 014404' MOVE V,[XWD [SIXBIT /IN TEXT@/],TXTPG] + 007651' 332000 013272' SKIPE INREP + 007652' 200300 014412' MOVE V,[XWD [SIXBIT /IN CONDITIONAL OR REPEAT@/],REPPG] + 007653' 332000 013275' SKIPE INCND + 007654' 200300 014416' MOVE V,[XWD [SIXBIT /IN CONDITIONAL@/],CNDPG] + 007655' 335000 013405' SKIPGE MACENL + 007656' 200300 014422' ERRNE2: MOVE V,[XWD [SIXBIT /IN MACRO CALL@/],CALPG] + 007657' 326300 007663' JUMPN V,ERRNE3 + 007660' 336000 013321' SKIPN LITLVL ;HAD ONE PAGE NUMBER ALREADY + 007661' 334300 014423' SKIPA V,[XWD [SIXBIT /@/],PAGENO] ;BETTER THAN NOTHING + 007662' 254000 007664' JRST .+2 + 007663' 260740 010041' ERRNE3: PUSHJ PP,PRNUM + 007664' 561440 014353' HRROI RC,[SIXBIT /@/] ;WILL GET A RETURN + 007665' 254000 007714' JRST ERRFIN + + 007666' 004562 625762 ERRMS1: SIXBIT / ERRORS DETECTED@/ + 007667' 630044 456445 + 007670' 436445 444000 + 007671' 372100 456262 ERRMS2: SIXBIT /?1 ERROR DETECTED@/ + 007672' 576200 444564 + 007673' 454364 454440 + 007674' 565700 456262 ERRMS3: SIXBIT /NO ERRORS DETECTED@/ + 007675' 576263 004445 + 007676' 644543 644544 + MACRO V.10 PAGE 134-1 + I/O ROUTINES + + 007677' 400000 000000 + 007700' 200440 014427' EINIT: MOVE RC,[XWD ACDEV,[SIXBIT /NOT AVAILABLE@/]] + 007701' 254000 007714' JRST ERRFIN + MACRO V.10 PAGE 135 + I/O ROUTINES + + 007702' 550440 012664' ERRCL: HRRZ RC,LSTDIR+1 ;GET LST DEV ERROR CODE + 007703' 254000 007705' JRST .+2 ;GET ERROR MESSAGE + 007704' 550440 012670' ERRCB: HRRZ RC,BINDIR+1 ;GET BIN DEV ERROR CODE + 007705' 326440 007711' JUMPN RC,ERRTYP + 007706' 364440 007711' SOJA RC,ERRTYP ;SPECIAL CASE IF ERROR CODE 0 + + 007707' 550440 012674' ERRCF: HRRZ RC,INDIR+1 ;GET INPUT DEV ERROR CODE + 007710' 510140 012674' HLLZ ACEXT,INDIR+1 ;SET UP EXT + + 007711' 301440 000027 ERRTYP: CAIL RC,TABLND-TABLE ;IS ERROR CODE LEGAL? + 007712' 334440 007756' SKIPA RC,TABLND ;NO, GIVE CATCH ALL MESSAGE + 007713' 200451 007727' MOVE RC,TABLE(RC) ;YES, PICK UP MESSAGE + + 007714' 000000 000007 ERRFIN: SKPINC C ;SEE IN WE CAN INPUT A CHAR. + 007715' 255000 000000 JFCL ;BUT ONLY TO DEFEAT ^O + 007716' 260740 007765' PUSHJ PP,CRLF + 007717' 201340 000077 MOVEI C,"?" + 007720' 260740 007770' PUSHJ PP,TYO + 007721' 260740 007760' PUSHJ PP,TYPMS1 + 007722' 070140 000000 CLOSE LST, ;GIVE USER A PARTIAL LISTING + 007723' 070040 000040 CLOSE BIN,40 ;BUT NEVER A BUM REL FILE + 007724' 350000 003150* IFN CCLSW,<AOS JOBERR ;RECORD ERROR SO EXECUTION DELETED> + 007725' 254000 006436' JRST M + + 007726' 014430' 000002 [SIXBIT /(0) ILLEGAL FILE NAME@/],,ACFILE + 007727' 014434' 000002 TABLE: [SIXBIT /(0) FILE WAS NOT FOUND@/],,ACFILE + 007730' 014440' 000002 [SIXBIT /(1) NO DIRECTORY FOR PROJECT-PROGRAMMER NUMBER@/],,ACFILE + 007731' 014450' 000002 [SIXBIT /(2) PROTECTION FAILURE@/],,ACFILE + 007732' 014454' 000002 [SIXBIT /(3) FILE WAS BEING MODIFIED@/],,ACFILE + 007733' 014461' 000002 [SIXBIT /(4) RENAME FILE NAME ALREADY EXISTS@/],,ACFILE + 007734' 014467' 000002 [SIXBIT /(5) ILLEGAL SEQUENCE OF UUOS@/],,ACFILE + 007735' 014474' 000002 [SIXBIT /(6) BAD UFD OR BAD RIB@/],,ACFILE + 007736' 014500' 000002 [SIXBIT /(7) NOT A SAV FILE@/],,ACFILE + 007737' 014504' 000002 [SIXBIT /(10) NOT ENOUGH CORE@/],,ACFILE + 007740' 014510' 000002 [SIXBIT /(11) DEVICE NOT AVAILABLE@/],,ACFILE + 007741' 014515' 000002 [SIXBIT /(12) NO SUCH DEVICE@/],,ACFILE + 007742' 014521' 000002 [SIXBIT /(13) NOT TWO RELOC REG. CAPABILITY@/],,ACFILE + 007743' 014527' 000002 [SIXBIT /(14) NO ROOM OR QUOTA EXCEEDED@/],,ACFILE + 007744' 014535' 000002 [SIXBIT /(15) WRITE LOCK ERROR@/],,ACFILE + 007745' 014541' 000002 [SIXBIT /(16) NOT ENOUGH MONITOR TABLE SPACE@/],,ACFILE + 007746' 014547' 000002 [SIXBIT /(17) PARTIAL ALLOCATION ONLY@/],,ACFILE + 007747' 014554' 000002 [SIXBIT /(20) BLOCK NOT FREE ON ALLOCATION@/],,ACFILE + 007750' 014562' 000002 [SIXBIT /(21) CAN'T SUPERSEDE (ENTER) AN EXISTING DIRECTORY@/],,ACFILE + 007751' 014573' 000002 [SIXBIT /(22) CAN'T DELETE (RENAME) A NON-EMPTY DIRECTORY@/],,ACFILE + 007752' 014604' 000002 [SIXBIT /(23) SFD NOT FOUND@/],,ACFILE + 007753' 014610' 000002 [SIXBIT /(24) SEARCH LIST EMPTY@/],,ACFILE + 007754' 014614' 000002 [SIXBIT /(25) SFD NESTED TOO DEEPLY@/],,ACFILE + 007755' 014621' 000002 [SIXBIT /(26) NO-CREATE ON FOR SPECIFIED PATH@/],,ACFILE + + 007756' 014630' 000002 TABLND: [SIXBIT /(?) LOOKUP, ENTER, OR RENAME ERROR@/],,ACFILE + MACRO V.10 PAGE 136 + I/O ROUTINES + + 007757' 260740 007765' TYPMSG: PUSHJ PP,CRLF ;MOVE TO NEXT LINE + 007760' 554400 000011 TYPMS1: HLRZ CS,RC ;GET FIRST MESSAGE + 007761' 302400 777777 CAIE CS,-1 ;SKIP IF MINUS ONE + 007762' 260740 010000' PUSHJ PP,TYPM2 ;TYPE MESSAGE + 007763' 550400 000011 HRRZ CS,RC ;GET SECOND HALF + 007764' 260740 010000' PUSHJ PP,TYPM2 + + 007765' 201340 000015 CRLF: MOVEI C,CR ;OUTPUT CARRIAGE RETURN + 007766' 260740 007770' PUSHJ PP,TYO + 007767' 201340 000012 MOVEI C,LF ;AND LINE FEED + + 007770' 377000 013432' TYO: SOSG CTOBUF+2 ;BUFFER FULL? + 007771' 067000 000000 OUTPUT CTL,0 ;YES, DUMP IT + 007772' 136340 013431' IDPB C,CTOBUF+1 ;STORE BYTE + 007773' 307340 000014 CAIG C,FF ;FORM FEED? + 007774' 305340 000012 CAIGE C,LF ;V TAB OR LINE FEED? + 007775' 263740 000000 POPJ PP, ;NO + 007776' 067000 000000 OUTPUT CTL,0 ;YES + 007777' 263740 000000 POPJ PP, ;AND EXIT + + 010000' 205340 400000 TYPM2: MOVSI C,(1B0) ;ANTICIPATE REGISTER WORD + 010001' 306400 000002 CAIN CS,ACFILE ;FILE NAME ? + JRST [JUMPE ACEXT,.+1 ;YES, TEST FOR EXT + LSH ACEXT,-6 ;MAKE SPACE FOR "." + IOR ACEXT,[SIXBIT /. @/] + 010002' 254000 014637' JRST TYPM2A] + 010003' 307400 000017 CAIG CS,17 ;IS IT? + 010004' 202350 000001 MOVEM C,1(CS) + 010005' 505400 440600 TYPM2A: HRLI CS,(POINT 6,,) ;FORM BYTE POINTER + + 010006' 134340 000010 TYPM3: ILDB C,CS ;GET A SIXBIT BYTE + 010007' 306340 000040 CAIN C,40 ;"@"? + 010010' 254000 007770' JRST TYO ;YES, TYPE SPACE AND EXIT + 010011' 271340 000040 ADDI C,40 ;NO, FORM 7-BIT ASCII + 010012' 260740 007770' PUSHJ PP,TYO ;OUTPUT CHARACTER + 010013' 254000 010006' JRST TYPM3 + + MACRO V.10 PAGE 137 + I/O ROUTINES + + 010014' 271200 002000 XCEEDS: ADDI SX,2000 ;ADJUST SYMBOL POINTER + 010015' 260740 007211' XCEED: PUSHJ PP,SAVEXS ;SAVE THE REGISTERS + 010016' 550040 006767* HRRZ 1,JOBREL ;GET CURRENT TOP + 010017' 201001 002000 MOVEI 0,2000(1) + 010020' 047000 000011 CORE 0, ;REQUEST MORE CORE + 010021' 254000 010035' JRST XCEED2 ;ERROR, BOMB OUT + 010022' 550100 010016* HRRZ 2,JOBREL ;GET NEW TOP + + 010023' 200001 000000 XCEED1: MOVE 0,0(1) ;GET ORIGIONAL + 010024' 202002 000000 MOVEM 0,0(2) ;STORE IN NEW LOCATION + 010025' 275100 000001 SUBI 2,1 ;DECREMENT UPPER + 010026' 313040 013102' CAMLE 1,SYMBOL ;HAVE WE ARRIVED? + 010027' 364040 010023' SOJA 1,XCEED1 ;NO, GET ANOTHER + 010030' 201040 002000 MOVEI 1,2000 + 010031' 272040 013102' ADDM 1,SYMBOL + 010032' 272040 013103' ADDM 1,SYMTOP + 010033' 260740 012455' PUSHJ PP,SRCHI ;RE-INITIALIZE SYMBOL TABLE + 010034' 254000 007205' JRST RSTRXS ;RESTORE REGISTERS AND EXIT + + 010035' 561440 014643' XCEED2: HRROI RC,[SIXBIT /INSUFFICIENT CORE@/] + 010036' 254000 007634' JRST ERRNE0 + 010037' 561440 014646' PDPERR: HRROI RC,[SIXBIT .PDP OVERFLOW, TRY /P@.] + 010040' 254000 007634' JRST ERRNE0 + + 010041' 554400 000006 PRNUM: HLRZ CS,V ;GET MESSAGE + 010042' 260740 010000' PUSHJ PP,TYPM2 + 010043' 201400 014652' MOVEI CS,[SIXBIT /ON PAGE@/] + 010044' 260740 010000' PUSHJ PP,TYPM2 + 010045' 200006 000000 MOVE AC0,(V) ;GET PAGE + 010046' 260740 010063' PUSHJ PP,DP1 ;PRINT NUMBER + 010047' 201340 000040 MOVEI C,40 + 010050' 260740 007770' PUSHJ PP,TYO + 010051' 336046 000001 SKIPN AC1,1(V) ;GET SEQ NUM IF THERE + 010052' 263740 000000 POPJ PP, ;NO, RETURN + 010053' 202040 013337' MOVEM AC1,OUTSQ + 010054' 201400 014654' MOVEI CS,[SIXBIT /LINE@/] + 010055' 260740 010000' PUSHJ PP,TYPM2 + 010056' 201000 013337' MOVEI AC0,OUTSQ ;PRINT IT + 010057' 067000 000000 OUTPUT CTL,0 ;TO MAKE THINGS PRINT IN RIGHT ORDER + 010060' 047000 000003 DDTOUT AC0, + 010061' 201340 000040 MOVEI C,40 + 010062' 254000 007770' JRST TYO ;AND RETURN + + 010063' 231000 000012 DP1: IDIVI AC0,^D10 + 010064' 506057 000000 HRLM AC1,(PP) + 010065' 322000 010067' JUMPE AC0,.+2 + 010066' 260740 010063' PUSHJ PP,DP1 + 010067' 554357 000000 HLRZ C,(PP) + 010070' 271340 000060 ADDI C,"0" + 010071' 254000 007770' JRST TYO + MACRO V.10 PAGE 138 + I/O ROUTINES + + 010072' 670640 000000 RIM0: TDO FR,AC0 ;SET RIM/RIM10 FLAG + 010073' 603640 001000 TLNE FR,PNCHSW ;FORGET IT IF PUNCH RESET + 010074' 060040 000013 SETSTS BIN,IB ;SET TO IMAGE BINARY MODE + 010075' 263740 000000 POPJ PP, + + 010076' 250400 013376' ROUT: EXCH CS,RIMLOC + 010077' 274740 014655' SUB PP,[XWD 1,1] ;CLEAR OUT STACK WFW + 010100' 603640 004000 TLNE FR,R1BSW + 010101' 254000 010207' JRST ROUT6 + 010102' 607640 000100 TLNN FR,RIM1SW + 010103' 254000 010113' JRST ROUT1 + 010104' 322400 010113' JUMPE CS,ROUT1 ;RIM10 OUTPUT + 010105' 274400 013376' SUB CS,RIMLOC + 010106' 322400 010113' JUMPE CS,ROUT1 + 010107' 327400 003311' JUMPG CS,ERRAX + 010110' 201340 000000 MOVEI C,0 + 010111' 260740 010123' PUSHJ PP,PTPBIN + 010112' 341400 010111' AOJL CS,.-1 + 010113' 205340 710440 ROUT1: MOVSI C,(DATAI PTR,) ;RIM OUTPUT + 010114' 540340 013326' HRR C,LOCO ;GET ADDRESS + 010115' 603640 000100 TLNE FR,RIM1SW ;NO DATAI IF RIM10 + 010116' 354000 013376' AOSA RIMLOC + 010117' 260740 010123' PUSHJ PP,PTPBIN ;OUTPUT + 010120' 200340 000000 MOVE C,AC0 ;CODE + 010121' 354000 013326' AOSA LOCO ;INCREMENT CURRENT LOCATION + + 010122' 607640 004500 OUTBIN: TLNN FR,RIMSW!RIM1SW!R1BSW ;EXIT IF RIM MODE + 010123' 607640 001000 PTPBIN: TLNN FR,PNCHSW ;EXIT IF PUNCH NOT REQUESTED + 010124' 263740 000000 POPJ PP, + 010125' 377000 012657' SOSG BINBUF+2 ;TEST FOR BUFFER FULL + 010126' 260740 010131' PUSHJ PP,DMPBIN ;YES, DUMP IT + 010127' 136340 012656' IDPB C,BINBUF+1 ;DEPOSIT BYTE + 010130' 263740 000000 POPJ PP, ;EXIT + + MACRO V.10 PAGE 139 + I/O ROUTINES + + 010131' 057040 000000 DMPBIN: OUT BIN,0 ;DUMP THE BUFFER + 010132' 263740 000000 POPJ PP, ;NO ERRORS + 010133' 062040 000007 TSTBIN: GETSTS BIN,C ;GET STSTUS BITS + 010134' 606340 740000 TRNN C,ERRBIT ;ERROR? + 010135' 263740 000000 POPJ PP, ;NO, EXIT + 010136' 200000 012550' MOVE AC0,BINDEV ;YES, GET TAG + 010137' 254000 010146' JRST ERRLST ;TYPE MESSAGE AND ABORT + + 010140' 057140 000000 DMPLST: OUT LST,0 ;OUTPUT BUFFER + 010141' 263740 000000 POPJ PP, ;NO ERRORS + 010142' 062140 000007 TSTLST: GETSTS LST,C ;ANY ERRORS? + 010143' 606340 740000 TRNN C,ERRBIT + 010144' 263740 000000 POPJ PP, ;NO, EXIT + 010145' 200000 012553' MOVE AC0,LSTDEV + 010146' 205440 014656' ERRLST: MOVSI RC,[SIXBIT /OUTPUT WRITE-LOCK ERROR DEVICE@/] + 010147' 602340 400000 TRNE C,IOIMPM ;IMPROPER MODE? + 010150' 254000 007714' JRST ERRFIN ;YES + 010151' 205440 014664' MOVSI RC,[SIXBIT /OUTPUT DATA ERROR DEVICE@/] + 010152' 602340 200000 TRNE C,IODERR ;DEVICE DATA ERROR? + 010153' 254000 007714' JRST ERRFIN ;YES + 010154' 205440 014671' MOVSI RC,[SIXBIT /OUTPUT CHECKSUM OR PARITY ERROR DEVICE@/] + 010155' 602340 100000 TRNE C,IODTER ;IS IT + 010156' 254000 007714' JRST ERRFIN ;YES + 010157' 200400 000000 MOVE CS,AC0 ;GET DEVICE + 010160' 047400 000004 DEVCHR CS, ;FIND OUT WHAT IT IS + 010161' 205440 014700' MOVSI RC,[SIXBIT /OUTPUT QUOTA EXCEEDED ON DEVICE@/] + 010162' 607400 200000 TLNN CS,DSKBIT ;SKIP IF DSK OUTPUT + 010163' 205440 014706' MOVSI RC,[SIXBIT /OUTPUT BLOCK TOO LARGE DEVICE@/] + 010164' 254000 007714' JRST ERRFIN + MACRO V.10 PAGE 140 + I/O ROUTINES + + + 010165' 460400 013351' R1BDMP: SETCM CS,R1BCNT + 010166' 322400 010203' JUMPE CS,R1BI + 010167' 517340 000010 HRLZS C,CS + 010170' 540340 013375' HRR C,R1BLOC + 010171' 541347 777777 HRRI C,-1(C) + 010172' 202340 013352' MOVEM C,R1BCHK + 010173' 260740 010123' PUSHJ PP,PTPBIN + 010174' 541400 013353' HRRI CS,R1BBLK + 010175' 200350 000000 R1BDM1: MOVE C,0(CS) + 010176' 272340 013352' ADDM C,R1BCHK + 010177' 260740 010123' PUSHJ PP,PTPBIN + 010200' 253400 010175' AOBJN CS,R1BDM1 + 010201' 200340 013352' MOVE C,R1BCHK + 010202' 260740 010123' PUSHJ PP,PTPBIN + 010203' 476000 013351' R1BI: SETOM R1BCNT + 010204' 261740 013326' PUSH PP,LOCO + 010205' 262740 013375' POP PP,R1BLOC + 010206' 263740 000000 POPJ PP, + + 010207' 312400 013376' ROUT6: CAME CS,RIMLOC + 010210' 260740 010165' PUSHJ PP,R1BDMP + 010211' 350340 013351' AOS C,R1BCNT + 010212' 202007 013353' MOVEM AC0,R1BBLK(C) + 010213' 350000 013326' AOS LOCO + 010214' 306340 000021 CAIN C,.R1B-1 + 010215' 260740 010165' PUSHJ PP,R1BDMP + 010216' 350000 013376' AOS RIMLOC + 010217' 263740 000000 POPJ PP, + + + MACRO V.10 PAGE 141 + I/O ROUTINES + + 010220' 260740 007176' READ0: PUSHJ PP,EOT ;END OF TAPE + + 010221' 375000 012662' READ: SOSGE IBUF+2 ;BUFFER EMPTY? + 010222' 254000 010263' JRST READ3 ;YES + 010223' 134340 012661' READ1: ILDB C,IBUF+1 ;PLACE CHARACTER IN C + 010224' 200420 012661' MOVE CS,@IBUF+1 ;CHECK FOR SEQUENCE NUMBER + 010225' 606400 000001 TRNN CS,1 + 010226' 254000 010243' JRST READ1A + 010227' 306400 000001 CAIN CS,1 ;CHECK FOR SPECIAL + 010230' 200400 014713' MOVE CS,[<ASCII/ />+1] + 010231' 202400 012544' MOVEM CS,SEQNO + 010232' 202400 013415' MOVEM CS,SEQNO2 + 010233' 211400 000004 MOVNI CS,4 + 010234' 272400 012662' ADDM CS,IBUF+2 ;ADJUST WORD COUNT + REPEAT 4,< IBP IBUF+1> ;SKIP SEQ NO + 010235' 133000 012661' + 010236' 133000 012661' + 010237' 133000 012661' + 010240' 133000 012661' + 010241' 260740 010221' PUSHJ PP,READ ;AND THE TAB + 010242' 254000 010221' JRST READ ;GET NEXT CHARACTER + + 010243' 322340 010221' READ1A: JUMPE C,READ ;IGNORE NULL + 010244' 306340 000032 CAIN C,32 ;IF IT'S A "^Z" + 010245' 201340 000012 MOVEI C,LF ;TREAT IT AS A "LF" + 010246' 302340 000037 CAIE C,37 ;CONTROL _ + 010247' 263740 000000 POPJ PP, + 010250' 201340 000136 MOVEI C,"^" ;MAKE CONTROL-SHIFT _ VISIBLE + 010251' 260740 001414' PUSHJ PP,RSW2 + 010252' 201340 000137 MOVEI C,"_" + 010253' 260740 001414' PUSHJ PP,RSW2 + 010254' 260740 010221' READ2: PUSHJ PP,READ ;YES, TEST FOR LINE FEED + 010255' 260740 001414' PUSHJ PP,RSW2 ;LIST IN ANY EVENT + 010256' 307340 000014 CAIG C,FF ;IS IT ONE OF + 010257' 305340 000012 CAIGE C,LF ;LF, VT, OR FF? + 010260' 254000 010254' JRST READ2 ;NO + 010261' 260740 001736' PUSHJ PP,OUTIM1 ;YES, DUMP THE LINE + 010262' 254000 010221' JRST READ ;RETURN NEXT CHARACTER + + 010263' 056100 000000 READ3: IN CHAR,0 ;GET NEXT BUFFER + 010264' 254000 010221' JRST READ ;NO ERRORS + 010265' 062100 000007 GETSTS CHAR,C + 010266' 606340 742000 TRNN C,ERRBIT!2000 ;ERRORS? + 010267' 254000 010220' JRST READ0 ;EOF + 010270' 200000 012564' MOVE AC0,INDEV + 010271' 205440 014714' MOVSI RC,[SIXBIT/ INPUT PHYSICAL END OF TAPE DEVICE@/] + 010272' 602340 002000 TRNE C,2000 + 010273' 254000 007714' JRST ERRFIN ;E-O-T + 010274' 205440 014722' MOVSI RC,[SIXBIT /MONITOR DETECTED SOFTWARE INPUT ERROR DEVICE@/] + 010275' 602340 400000 TRNE C,IOIMPM ;IMPROPER MODE? + 010276' 254000 007714' JRST ERRFIN ;YES + 010277' 205440 014732' MOVSI RC,[SIXBIT /INPUT DATA ERROR DEVICE@/] + 010300' 602340 200000 TRNE C,IODERR ;DEVICE DATA ERROR? + MACRO V.10 PAGE 141-1 + I/O ROUTINES + + 010301' 254000 007714' JRST ERRFIN ;YES + 010302' 205440 014736' MOVSI RC,[SIXBIT /INPUT CHECKSUM OR PARITY ERROR DEVICE@/] + 010303' 606340 100000 TRNN C,IODTER + 010304' 205440 014745' MOVSI RC,[SIXBIT /INPUT BLOCK TOO LARGE DEVICE@/] + 010305' 254000 007714' JRST ERRFIN + + MACRO V.10 PAGE 142 + I/O ROUTINES + + 010306' 260740 010307' OUTAB2: PUSHJ PP,OUTTAB ;PRINT TWO TABS + 010307' 201340 000011 OUTTAB: MOVEI C,HT + 010310' 302340 000015 PRINT: CAIE C,CR ;IS THIS A CR? + 010311' 306340 000012 CAIN C,LF ;OR LF? + 010312' 254000 010316' JRST OUTCR ;YES, GO PROCESS + 010313' 306340 000014 CAIN C,FF ;FORM FEED? + 010314' 254000 010417' JRST OUTFF ;YES, FORCE NEW PAGE + 010315' 254000 010325' JRST OUTL + + 010316' 606600 777763 OUTCR: TRNN ER,ERRORS!LPTSW!TTYSW + 010317' 263740 000000 POPJ PP, + 010320' 201340 000015 MOVEI C,CR ;CARRIAGE RETURN, LINE FEED + 010321' 260740 010325' PUSHJ PP,OUTL + 010322' 375000 013331' SOSGE LPP ;END OF PAGE? + 010323' 661600 000100 TLO IO,IOPAGE ;YES, SET FLAG + 010324' 644340 000007 TRCA C,7 ;FORM LINE FEED AND SKIP + + 010325' 627600 000100 OUTL: TLZN IO,IOPAGE ;NEW PAGE REQUESTED? + 010326' 254000 010377' JRST OUTC ;NO + 010327' 321640 010377' JUMP1 OUTC ;YES, BYPASS IF PASS ONE + 010330' 261740 000007 PUSH PP,C ;SAVE C AND CS + 010331' 261740 000010 PUSH PP,CS + 010332' 261740 000014 PUSH PP,ER + 010333' 607600 240000 TLNN IO,IOMSTR!IOPROG + 010334' 540600 013042' HRR ER,OUTSW + 010335' 603600 000400 TLNE IO,IOCREF ;IF DOING CREF OUTPUT NOW + 010336' 603640 002000 TLNE FR,CREFSW ;AND CREFFING (JUST IN CASE) + 010337' 254000 010341' JRST .+2 + 010340' 260740 012274' PUSHJ PP,CLSC3 ;CLOSE IT OUT + 010341' 502617 000000 HLLM IO,(PP) ;SAVE THIS NEW STATE OF IO + 010342' 201340 000067 MOVEI C,.LPP + 010343' 202340 013331' MOVEM C,LPP ;SET NEW COUNTER + 010344' 201340 000015 MOVEI C,CR + 010345' 260740 010377' PUSHJ PP,OUTC + 010346' 201340 000014 MOVEI C,FF + 010347' 260740 010377' PUSHJ PP,OUTC ;OUTPUT FORM FEED + 010350' 201400 013230' MOVEI CS,TBUF + 010351' 260740 002774' PUSHJ PP,OUTAS0 ;OUTPUT TITLE + ; MOVEI CS,VBUF + ; PUSHJ PP,OUTAS0 ;OUTPUT VERSION + 010352' 201400 012566' MOVEI CS,DBUF + 010353' 260740 002774' PUSHJ PP,OUTAS0 ; AND DATE + 010354' 200340 013414' MOVE C,PAGENO + 010355' 260740 002765' PUSHJ PP,DNC ;OUTPUT PAGE NUMBER + 010356' 357000 013341' AOSG PAGEN. ;FIRST PAGE OF THIS NUMBER? + 010357' 254000 010364' JRST OUTL1 ;YES + 010360' 201340 000055 MOVEI C,"-" ;NO, PUT OUT MODIFIER + 010361' 260740 010377' PUSHJ PP,OUTC + 010362' 200340 013341' MOVE C,PAGEN. + 010363' 260740 002765' PUSHJ PP,DNC + 010364' 260740 010316' OUTL1: PUSHJ PP,OUTCR + 010365' 201400 013250' MOVEI CS,DEVBUF + 010366' 260740 002774' PUSHJ PP,OUTAS0 + MACRO V.10 PAGE 142-1 + I/O ROUTINES + + 010367' 550400 013100' HRRZ CS,SUBTTX ;SWITCH FOR SUB-TITLE + 010370' 332010 000000 SKIPE 0(CS) ;IS THERE A SUB-TITLE? + 010371' 260740 010307' PUSHJ PP,OUTTAB ;YES, OUTPUT A TAB + 010372' 260740 002420' PUSHJ PP,SOUT20 ;OUTPUT ASCII WITH CARRIAGE RETURN + 010373' 260740 010316' PUSHJ PP,OUTCR + 010374' 262740 000014 POP PP,ER + 010375' 262740 000010 POP PP,CS ;RESTORE REGISTERS + 010376' 262740 000007 POP PP,C + + 010377' 602600 777761 OUTC: TRNE ER,ERRORS!TTYSW + 010400' 260740 007770' PUSHJ PP,TYO + 010401' 606600 000002 TRNN ER,LPTSW + 010402' 263740 000000 POPJ PP, + 010403' 377000 012654' OUTLST: SOSG LSTBUF+2 ;BUFFER FULL? + 010404' 260740 010140' PUSHJ PP,DMPLST ;YES, DUMP IT + COMMENT $ REG DOESN'T LIKE THIS FEATURE ANY MORE 9-5-72 + $ + 010405' 136340 012653' IDPB C,LSTBUF+1 ;STORE BYTE + 010406' 263740 000000 POPJ PP, ;EXIT + + MACRO V.10 PAGE 143 + I/O ROUTINES + + 010407' 260740 000227' PAGE0: PUSHJ PP,STOUTS ;PAGE PSEUDO-OP + 010410' 603600 000400 OUTFF1: TLNE IO,IOCREF ;CURRENTLY DOING CREF? + 010411' 603600 040000 TLNE IO,IOPROG ;AND NOT XLISTED? + 010412' 254000 010417' JRST OUTFF ;NO + 010413' 540600 013042' HRR ER,OUTSW + 010414' 260740 012274' PUSHJ PP,CLSCRF + 010415' 260740 010316' PUSHJ PP,OUTCR + 010416' 541600 000000 HRRI ER,0 + 010417' 661600 000100 OUTFF: TLO IO,IOPAGE + 010420' 476000 013341' OUTFF2: SETOM PAGEN. + 010421' 350000 013414' AOS PAGENO + 010422' 263740 000000 POPJ PP, + + 010423' 231100 165140 TIMOUT: IDIVI 2,^D60*^D1000 + 010424' 231100 000074 TIMOU1: IDIVI 2,^D60 + 010425' 261740 000003 PUSH PP,3 ;SAVE MINUTES + 010426' 260740 010432' PUSHJ PP,OTOD ;STORE HOURS + 010427' 201140 000072 MOVEI 3,":" ;SEPARATE BY COLON + 010430' 136140 000010 IDPB 3,CS + 010431' 262740 000002 POP PP,2 ;STORE MINUTES + 010432' 231100 000012 OTOD: IDIVI 2,^D10 + 010433' 271100 000060 ADDI 2,60 ;FORM ASCII + 010434' 136100 000010 IDPB 2,CS + 010435' 271140 000060 ADDI 3,60 + 010436' 136140 000010 IDPB 3,CS + 010437' 263740 000000 POPJ PP, + + 010440' 231040 000037 DATOUT: IDIVI 1,^D31 ;GET DAY + 010441' 271100 000001 ADDI 2,1 + 010442' 307100 000011 CAIG 2,^D9 ;TWO DIGITS? + 010443' 271100 117540 ADDI 2,7760*^D10 ;NO, PUT IN SPACE + 010444' 260740 010432' PUSHJ PP,OTOD ;STORE DAY + 010445' 231040 000014 IDIVI 1,^D12 ;GET MONTH + 010446' 200102 010454' MOVE 2,DTAB(2) ;GET MNEMONIC + 010447' 136100 000010 IDPB 2,CS ;DEPOSIT RIGHT MOST 7 BITS + 010450' 242100 777771 LSH 2,-7 ;SHIFT NEXT IN + 010451' 326100 010447' JUMPN 2,.-2 ;DEPOSIT IFIT EXISTS + 010452' 201101 000100 MOVEI 2,^D64(1) ;GET YEAR + 010453' 254000 010432' JRST OTOD ;STORE IT + + 010454' 133164 062455 DTAB: "-NAJ-" + 010455' 133024 261455 "-BEF-" + 010456' 133224 063255 "-RAM-" + 010457' 133225 020255 "-RPA-" + 010460' 133314 063255 "-YAM-" + 010461' 133165 262455 "-NUJ-" + 010462' 133145 262455 "-LUJ-" + 010463' 133075 260255 "-GUA-" + 010464' 133204 264655 "-PES-" + 010465' 133244 163655 "-TCO-" + 010466' 133264 763455 "-VON-" + 010467' 133034 261055 "-CED-" + MACRO V.10 PAGE 144 + MACHINE INSTRUCTION SEARCH ROUTINES + + SUBTTL MACHINE INSTRUCTION SEARCH ROUTINES + IFE OPHSH,< + 010470' 201440 000000 OPTSCH: MOVEI RC,0 + 010471' 201240 000400 MOVEI ARG,1B^L<OP1END-OP1TOP> ;SET UP INDEX + 010472' 201300 000200 MOVEI V,1B^L<OP1END-OP1TOP>/2 ;SET UP INCREMENT + + 010473' 316005 010526' OPT1A: CAMN AC0,OP1TOP(ARG) ;ARE WE POINTING AT SYMBOL? + 010474' 254000 010505' JRST OPT1D ;YES, GET THE CODE + 010475' 322300 000446' JUMPE V,POPOUT ;TEST FOR END + 010476' 311005 010526' CAML AC0,OP1TOP(ARG) ;NO, SHOULD WE MOVE DOWN? + 010477' 674240 000006 TDOA ARG,V ;NO, INCREMENT + 010500' 274240 000006 OPT1B: SUB ARG,V ;YES, DECREMENT + 010501' 240300 777777 ASH V,-1 ;HALVE INCREMENT + 010502' 307240 000766 CAIG ARG,OP1END-OP1TOP ;ARE WE OUT OF BOUNDS? + 010503' 254000 010473' JRST OPT1A ;NO, TRY AGAIN + 010504' 254000 010500' JRST OPT1B ;YES, BRING IT DOWN A PEG + > + + IFN OPHSH,< + OPTSCH: MOVE ARG,AC0 ;GET SIXBIT NAME + TLZ ARG,400000 ;CLEAR SIGN BIT + IDIVI ARG,PRIME ;REM. GOES IN V + CAMN AC0,OP1TOP(V) ;ARE WE POINTING AT SYMBOL? + JRST OPT1D ;YES + SKIPN OP1TOP(V) ;TEST FOR END + POPJ PP, ;SYMBOL NOT FOUND + HLRZ RC,ARG ;SAVE LHS OF QUOTIENT + SKIPA ARG,RC ;GET IT BACK + OPT1A: ADDI ARG,(RC) ;INCREMENT ARG + ADDI V,(ARG) ;QUADRATIC INCREASE TO V + CAIL V,PRIME ;V IS MODULO PRIME + JRST [SUBI V,PRIME + JRST .-1] + CAMN AC0,OP1TOP(V) ;IS THIS IT? + JRST OPT1D ;YES + SKIPE OP1TOP(V) ;END? + JRST OPT1A ;TRY AGAIN + POPJ PP, ;FAILED + > + 010505' OPT1D: + IFN OPHSH,< SETZ RC, ;CLEAR RELOCATION + MOVE ARG,V ;GET INDEX IN RIGHT ACC.> + 010505' 231240 000004 IDIVI ARG,4 ;ARG HAS INDEX USED IN OPTTAB + 010506' 135306 010523' LDB V,OPTTAB(V) ;V HAS INDEX TO OPTTAB + 010507' 301300 000700 CAIL V,700 ;PSEUDO-OP OR IO INSTRUCTION? + 010510' 254000 010516' JRST OPT1G ;YES + 010511' 241300 777767 ROT V,-^D9 ;LEFT JUSTIFY + 010512' 541300 004354' HRRI V,OP ;POINT TO BASIC FORMAT + 010513' 350017 000000 OPT1F: AOS 0(PP) ;SET FOR SKIP EXIT + 010514' 201140 000003 MOVEI SDEL,%OP ;SET OP-CODE CROSS-REF FLAG + 010515' 254000 012221' JRST CREF ;TEST AND OUTPUT, AC0=SYMBOL, V=VALUE + + 010516' 327000 010521' OPT1G: JUMPG AC0,.+3 ;IF ".","$",OR "%" USE TABLE 1 + MACRO V.10 PAGE 144-1 + MACHINE INSTRUCTION SEARCH ROUTINES + + 010517' 607000 200000 TLNN AC0,200000 ;PSEUDO-OP OR IO INST., TEST FOR PROPER TABLE + 010520' 334306 011164' SKIPA V,OP2TAB-700(V) ;2ND TABLE, FIRST LETTER IS "A" TO "O" + 010521' 200306 011120' MOVE V,OP1TAB-700(V) ;1ST TABLE, ..."P" TO "Z" + 010522' 254000 010513' JRST OPT1F ;EXIT + + 010523' OPTTAB: + 010523' 001105 011514' IFE OPHSH,< POINT 9,OP1COD-1(ARG),35> + 010524' 331105 011515' POINT 9,OP1COD (ARG), 8 + 010525' 221105 011515' POINT 9,OP1COD (ARG),17 + 010526' 111105 011515' POINT 9,OP1COD (ARG),26 + IFN OPHSH,< POINT 9,OP1COD (ARG),35> + + MACRO V.10 PAGE 145 + MACHINE INSTRUCTION SEARCH ROUTINES + + IFDEF .XCREF,< .XCREF ;DON'T CREF THIS MESS> + IFE OPHSH,< + 010526' RELOC .-1 + 010526' OP1TOP: + 010527' RELOC + + IF1,<N1=0 + DEFINE X <N1=N1+1 ;>> + + IF2, < + 000044 N2=^D36 + 000000 CC=0 + 011515' RELOC OP1COD + 010527' RELOC + DEFINE X (SYMBOL,CODE) + <SIXBIT /SYMBOL/ + CC=CC+CODE_<N2=N2-9> + IFE N2, <OUTLIT>> + + DEFINE OUTLIT < + RELOC + +CC + RELOC + N2=^D36+<CC=0>>> + SYN X,XX ;JUST THE SAME MACRO> + MACRO V.10 PAGE 146 + MACHINE INSTRUCTION SEARCH ROUTINES + + + IFN OPHSH,< + DEFINE XX (SB,CD)<> ;A NUL MACRO + OP1TOP: IF1,< BLOCK PRIME> + IF1,<DEFINE X (SB,CD)<>> + IF2,< + DEFINE OPSTOR (RM)<.$'RM=.$'RM+<OPCODE_<9*<3-R&3>>>> + + DEFINE X (SB,CD)< + SXB=<SIXBIT /SB/> + Q=SXB&-1_-1/PRIME + R=SXB&-1_-1-Q*PRIME + H=Q_-22&777 + TRY=1 + OPCODE=CD + ITEM Q,\R + IFL PRIME-TRY,<PRINTX HASH FAILURE>> + + DEFINE ITEM (QT,RM)< + IFN .%'RM,<R=R+H + IFL PRIME-R,<R=R-R/PRIME*PRIME> + H=H+Q_-22&777 + IFGE PRIME-<TRY=TRY+1>,<ITEM Q,\R>> + IFE .%'RM,<.%'RM=SXB + OPSTOR \<R/4>>>> + IF1,< + DEFINE GETSYM (N)<.%'N=0> + + N=0 + XLIST + REPEAT PRIME,<GETSYM \N + N=N+1> + DEFINE GETSYM (N)<.$'N=0> + N=0 + REPEAT <PRIME/4+1>,<GETSYM \N + N=N+1> + > + LIST> + + MACRO V.10 PAGE 147 + MACHINE INSTRUCTION SEARCH ROUTINES + + IFN OPHSH,< ;PUT THE MOST USED OP CODES FIRST + X JRST , 254 + X PUSHJ , 260 + X POPJ , 263 + X PUSH , 261 + X POP , 262 + X AOS , 350 + X ASCIZ , 701 + X CALLI , 047 + X EXTERN, 724 + X INTERN, 744 + X JFCL , 255 + X JSP , 265 + X MOVE , 200 + X MOVEI , 201 + X MOVEM , 202 + X SETZM , 402 + X SIXBIT, 717 + X SOS , 370 + X TLNE , 603 + X TLNN , 607 + X TLO , 661 + X TLZ , 621 + X TLZA , 625 + X TLZE , 623 + X TLZN , 627 + X TRNE , 602 + X TRNN , 606 + X TRZ , 620 + > + MACRO V.10 PAGE 148 + MACHINE INSTRUCTION SEARCH ROUTINES + + 010527' 414444 000000 X ADD , 270 + 010530' 414444 420000 X ADDB , 273 + 010531' 414444 510000 X ADDI , 271 + 010532' 414444 550000 X ADDM , 272 + 011515' 270273 271272 + + 010533' 415644 000000 X AND , 404 + 010534' 415644 420000 X ANDB , 407 + 010535' 415644 434100 X ANDCA , 410 + 010536' 415644 434142 X ANDCAB, 413 + 011516' 404407 410413 + 010537' 415644 434151 X ANDCAI, 411 + 010540' 415644 434155 X ANDCAM, 412 + 010541' 415644 434200 X ANDCB , 440 + 010542' 415644 434242 X ANDCBB, 443 + 011517' 411412 440443 + 010543' 415644 434251 X ANDCBI, 441 + 010544' 415644 434255 X ANDCBM, 442 + 010545' 415644 435500 X ANDCM , 420 + 010546' 415644 435542 X ANDCMB, 423 + 011520' 441442 420423 + 010547' 415644 435551 X ANDCMI, 421 + 010550' 415644 435555 X ANDCMM, 422 + 010551' 415644 510000 X ANDI , 405 + 010552' 415644 550000 X ANDM , 406 + 011521' 421422 405406 + + 010553' 415742 525600 X AOBJN , 253 + 010554' 415742 526000 X AOBJP , 252 + + 010555' 415752 000000 X AOJ , 340 + 010556' 415752 410000 X AOJA , 344 + 011522' 253252 340344 + 010557' 415752 450000 X AOJE , 342 + 010560' 415752 470000 X AOJG , 347 + 010561' 415752 474500 X AOJGE , 345 + 010562' 415752 540000 X AOJL , 341 + 011523' 342347 345341 + 010563' 415752 544500 X AOJLE , 343 + 010564' 415752 560000 X AOJN , 346 + + 010565' 415763 000000 XX AOS , 350 + 010566' 415763 410000 X AOSA , 354 + 011524' 343346 350354 + 010567' 415763 450000 X AOSE , 352 + 010570' 415763 470000 X AOSG , 357 + 010571' 415763 474500 X AOSGE , 355 + 010572' 415763 540000 X AOSL , 351 + 011525' 352357 355351 + 010573' 415763 544500 X AOSLE , 353 + 010574' 415763 560000 X AOSN , 356 + 010575' 416247 000000 X ARG , 320 + IFN IIISW,<X ASCID , 771> + MACRO V.10 PAGE 148-1 + MACHINE INSTRUCTION SEARCH ROUTINES + + 010576' 416343 515100 X ASCII , 700 + 011526' 353356 320700 + 010577' 416343 517200 XX ASCIZ , 701 + + 010600' 416350 000000 X ASH , 240 + 010601' 416350 430000 X ASHC , 244 + + 010602' 416365 606062 X ASUPPR, 705 + 011527' 701240 244705 + 010603' 425453 510000 X BLKI , 702 + 010604' 425453 570000 X BLKO , 703 + 010605' 425457 435300 X BLOCK , 704 + + 010606' 425464 000000 X BLT , 251 + 011530' 702703 704251 + + 010607' 427164 450000 X BYTE , 707 + + 010610' 434151 000000 XX CAI , 300 + 010611' 434151 410000 X CAIA , 304 + 010612' 434151 450000 X CAIE , 302 + 011531' 707300 304302 + 010613' 434151 470000 X CAIG , 307 + 010614' 434151 474500 X CAIGE , 305 + 010615' 434151 540000 X CAIL , 301 + 010616' 434151 544500 X CAILE , 303 + 011532' 307305 301303 + 010617' 434151 560000 X CAIN , 306 + + 010620' 434154 540000 X CALL , 040 + 010621' 434154 545100 XX CALLI , 047 + + 010622' 434155 000000 XX CAM , 310 + 011533' 306040 047310 + 010623' 434155 410000 X CAMA , 314 + 010624' 434155 450000 X CAME , 312 + 010625' 434155 470000 X CAMG , 317 + 010626' 434155 474500 X CAMGE , 315 + 011534' 314312 317315 + 010627' 434155 540000 X CAML , 311 + 010630' 434155 544500 X CAMLE , 313 + 010631' 434155 560000 X CAMN , 316 + + 010632' 435445 416200 XX CLEAR , 400 + 011535' 311313 316400 + 010633' 435445 416242 XX CLEARB, 403 + 010634' 435445 416251 XX CLEARI, 401 + 010635' 435445 416255 XX CLEARM, 402 + + 010636' 435457 634500 X CLOSE , 070 + 011536' 403401 402070 + 010637' 435755 554556 X COMMEN, 770 + + MACRO V.10 PAGE 148-2 + MACHINE INSTRUCTION SEARCH ROUTINES + + + 010640' 435756 510000 X CONI , 710 + 010641' 435756 570000 X CONO , 711 + 010642' 435756 635700 X CONSO , 712 + 011537' 770710 711712 + 010643' 435756 637200 X CONSZ , 713 + + 010644' 444164 411600 XX DATA. , 020 + + 010645' 444164 415100 X DATAI , 714 + 010646' 444164 415700 X DATAO , 715 + 011540' 713020 714715 + 010647' 444543 000000 X DEC , 716 + 010650' 444546 515645 X DEFINE, 717 + 010651' 444560 504163 X DEPHAS, 720 + + 010652' 444656 000000 X DFN , 131 + 011541' 716717 720131 + + 010653' 445166 000000 X DIV , 234 + 010654' 445166 420000 X DIVB , 237 + 010655' 445166 510000 X DIVI , 235 + 010656' 445166 550000 X DIVM , 236 + 011542' 234237 235236 + + + 010657' 446042 000000 X DPB , 137 + 010660' 446042 510000 X DPBI , 136 + + 010661' 455644 000000 X END , 721 + + 010662' 455664 456200 X ENTER , 077 + 011543' 137136 721077 + + 010663' 455664 627100 X ENTRY , 722 + + 010664' 456166 000000 X EQV , 444 + 010665' 456166 420000 X EQVB , 447 + 010666' 456166 510000 X EQVI , 445 + 011544' 722444 447445 + 010667' 456166 550000 X EQVM , 446 + + 010670' 457043 500000 X EXCH , 250 + + 010671' 457060 000000 X EXP , 723 + 010672' 457064 456256 XX EXTERN, 724 + 011545' 446250 723724 + + 010673' 464144 000000 X FAD , 140 + 010674' 464144 420000 X FADB , 143 + 010675' 464144 540000 X FADL , 141 + 010676' 464144 550000 X FADM , 142 + 011546' 140143 141142 + MACRO V.10 PAGE 148-3 + MACHINE INSTRUCTION SEARCH ROUTINES + + + 010677' 464144 620000 X FADR , 144 + 010700' 464144 624200 X FADRB , 147 + 010701' 464144 625100 X FADRI , 145 + 010702' 464144 625500 X FADRM , 146 + 011547' 144147 145146 + + 010703' 464466 000000 X FDV , 170 + 010704' 464466 420000 X FDVB , 173 + 010705' 464466 540000 X FDVL , 171 + 010706' 464466 550000 X FDVM , 172 + 011550' 170173 171172 + + 010707' 464466 620000 X FDVR , 174 + 010710' 464466 624200 X FDVRB , 177 + 010711' 464466 625100 X FDVRI , 175 + 010712' 464466 625500 X FDVRM , 176 + 011551' 174177 175176 + + 010713' 465156 160000 XX FIN. , 021 + + + 010714' 465560 000000 X FMP , 160 + 010715' 465560 420000 X FMPB , 163 + 010716' 465560 540000 X FMPL , 161 + 011552' 021160 163161 + 010717' 465560 550000 X FMPM , 162 + + MACRO V.10 PAGE 149 + MACHINE INSTRUCTION SEARCH ROUTINES + + 010720' 465560 620000 X FMPR , 164 + 010721' 465560 624200 X FMPRB , 167 + 010722' 465560 625100 X FMPRI , 165 + 011553' 162164 167165 + 010723' 465560 625500 X FMPRM , 166 + + 010724' 466342 000000 X FSB , 150 + 010725' 466342 420000 X FSBB , 153 + 010726' 466342 540000 X FSBL , 151 + 011554' 166150 153151 + 010727' 466342 550000 X FSBM , 152 + + 010730' 466342 620000 X FSBR , 154 + 010731' 466342 624200 X FSBRB , 157 + 010732' 466342 625100 X FSBRI , 155 + 011555' 152154 157155 + 010733' 466342 625500 X FSBRM , 156 + + 010734' 466343 000000 X FSC , 132 + + 010735' 474564 636463 X GETSTS, 062 + + MACRO V.10 PAGE 150 + MACHINE INSTRUCTION SEARCH ROUTINES + + 010736' 504154 640000 X HALT , 725 + 011556' 156132 062725 + 010737' 505163 454700 X HISEG , 706 + + 010740' 505454 000000 X HLL , 500 + 010741' 505454 450000 X HLLE , 530 + 010742' 505454 455100 X HLLEI , 531 + 011557' 706500 530531 + 010743' 505454 455500 X HLLEM , 532 + 010744' 505454 456300 X HLLES , 533 + 010745' 505454 510000 X HLLI , 501 + 010746' 505454 550000 X HLLM , 502 + 011560' 532533 501502 + 010747' 505454 570000 X HLLO , 520 + 010750' 505454 575100 X HLLOI , 521 + 010751' 505454 575500 X HLLOM , 522 + 010752' 505454 576300 X HLLOS , 523 + 011561' 520521 522523 + 010753' 505454 630000 X HLLS , 503 + 010754' 505454 720000 X HLLZ , 510 + 010755' 505454 725100 X HLLZI , 511 + 010756' 505454 725500 X HLLZM , 512 + 011562' 503510 511512 + 010757' 505454 726300 X HLLZS , 513 + + 010760' 505462 000000 X HLR , 544 + 010761' 505462 450000 X HLRE , 574 + 010762' 505462 455100 X HLREI , 575 + 011563' 513544 574575 + 010763' 505462 455500 X HLREM , 576 + 010764' 505462 456300 X HLRES , 577 + 010765' 505462 510000 X HLRI , 545 + 010766' 505462 550000 X HLRM , 546 + 011564' 576577 545546 + 010767' 505462 570000 X HLRO , 564 + 010770' 505462 575100 X HLROI , 565 + 010771' 505462 575500 X HLROM , 566 + 010772' 505462 576300 X HLROS , 567 + 011565' 564565 566567 + 010773' 505462 630000 X HLRS , 547 + 010774' 505462 720000 X HLRZ , 554 + 010775' 505462 725100 X HLRZI , 555 + 010776' 505462 725500 X HLRZM , 556 + 011566' 547554 555556 + 010777' 505462 726300 X HLRZS , 557 + + MACRO V.10 PAGE 151 + MACHINE INSTRUCTION SEARCH ROUTINES + + 011000' 506254 000000 X HRL , 504 + 011001' 506254 450000 X HRLE , 534 + 011002' 506254 455100 X HRLEI , 535 + 011567' 557504 534535 + 011003' 506254 455500 X HRLEM , 536 + 011004' 506254 456300 X HRLES , 537 + 011005' 506254 510000 X HRLI , 505 + 011006' 506254 550000 X HRLM , 506 + 011570' 536537 505506 + 011007' 506254 570000 X HRLO , 524 + 011010' 506254 575100 X HRLOI , 525 + 011011' 506254 575500 X HRLOM , 526 + 011012' 506254 576300 X HRLOS , 527 + 011571' 524525 526527 + 011013' 506254 630000 X HRLS , 507 + 011014' 506254 720000 X HRLZ , 514 + 011015' 506254 725100 X HRLZI , 515 + 011016' 506254 725500 X HRLZM , 516 + 011572' 507514 515516 + 011017' 506254 726300 X HRLZS , 517 + + 011020' 506262 000000 X HRR , 540 + 011021' 506262 450000 X HRRE , 570 + 011022' 506262 455100 X HRREI , 571 + 011573' 517540 570571 + 011023' 506262 455500 X HRREM , 572 + 011024' 506262 456300 X HRRES , 573 + 011025' 506262 510000 X HRRI , 541 + 011026' 506262 550000 X HRRM , 542 + 011574' 572573 541542 + 011027' 506262 570000 X HRRO , 560 + 011030' 506262 575100 X HRROI , 561 + 011031' 506262 575500 X HRROM , 562 + 011032' 506262 576300 X HRROS , 563 + 011575' 560561 562563 + 011033' 506262 630000 X HRRS , 543 + 011034' 506262 720000 X HRRZ , 550 + 011035' 506262 725100 X HRRZI , 551 + 011036' 506262 725500 X HRRZM , 552 + 011576' 543550 551552 + 011037' 506262 726300 X HRRZS , 553 + + 011040' 514260 000000 X IBP , 133 + + 011041' 514451 660000 X IDIV , 230 + 011042' 514451 664200 X IDIVB , 233 + 011577' 553133 230233 + 011043' 514451 665100 X IDIVI , 231 + 011044' 514451 665500 X IDIVM , 232 + + 011045' 514460 420000 X IDPB , 136 + + 011046' 514621 000000 X IF1 , 726 + MACRO V.10 PAGE 151-1 + MACHINE INSTRUCTION SEARCH ROUTINES + + 011600' 231232 136726 + 011047' 514622 000000 X IF2 , 727 + 011050' 514642 000000 X IFB , 730 + 011051' 514644 454600 X IFDEF , 731 + 011052' 514644 514600 X IFDIF , 732 + 011601' 727730 731732 + 011053' 514645 000000 X IFE , 733 + 011054' 514647 000000 X IFG , 734 + 011055' 514647 450000 X IFGE , 735 + 011056' 514651 445600 X IFIDN , 736 + 011602' 733734 735736 + 011057' 514654 000000 X IFL , 737 + 011060' 514654 450000 X IFLE , 740 + 011061' 514656 000000 X IFN , 741 + 011062' 514656 420000 X IFNB , 742 + 011603' 737740 741742 + 011063' 514656 444546 X IFNDEF, 743 + + 011064' 515444 420000 X ILDB , 134 + + 011065' 515565 540000 X IMUL , 220 + 011066' 515565 544200 X IMULB , 223 + 011604' 743134 220223 + 011067' 515565 545100 X IMULI , 221 + 011070' 515565 545500 X IMULM , 222 + + 011071' 515600 000000 X IN , 056 + 011072' 515616 000000 XX IN. , 016 + 011605' 221222 056016 + 011073' 515642 654600 X INBUF , 064 + 011074' 515646 160000 XX INF. , 026 + 011075' 515651 640000 X INIT , 041 + 011076' 515660 656400 X INPUT , 066 + 011606' 064026 041066 + + 011077' 515664 456256 XX INTERN, 744 + + 011100' 515762 000000 X IOR , 434 + 011101' 515762 420000 X IORB , 437 + 011102' 515762 510000 X IORI , 435 + 011607' 744434 437435 + 011103' 515762 550000 X IORM , 436 + + + 011104' 515767 440000 X IOWD , 745 + 011105' 516260 000000 X IRP , 746 + 011106' 516260 430000 X IRPC , 747 + 011610' 436745 746747 + 011107' 524362 710000 X JCRY , 750 + 011110' 524362 712000 X JCRY0 , 751 + 011111' 524362 712100 X JCRY1 , 752 + 011112' 524556 000000 X JEN , 753 + 011611' 750751 752753 + MACRO V.10 PAGE 151-2 + MACHINE INSTRUCTION SEARCH ROUTINES + + + 011113' 524643 540000 XX JFCL , 255 + + 011114' 524646 570000 X JFFO , 243 + 011115' 524657 660000 X JFOV , 765 + 011116' 525766 000000 X JOV , 754 + 011612' 255243 765754 + + 011117' 526241 000000 X JRA , 267 + 011120' 526263 640000 XX JRST , 254 + + 011121' 526263 644600 X JRSTF , 755 + + 011122' 526341 000000 X JSA , 266 + 011613' 267254 755266 + 011123' 526360 000000 XX JSP , 265 + 011124' 526362 000000 X JSR , 264 + + 011125' 526555 600000 XX JUMP , 320 + 011126' 526555 604100 XX JUMPA , 324 + 011614' 265264 320324 + 011127' 526555 604500 X JUMPE , 322 + 011130' 526555 604700 X JUMPG , 327 + 011131' 526555 604745 X JUMPGE, 325 + 011132' 526555 605400 X JUMPL , 321 + 011615' 322327 325321 + 011133' 526555 605445 X JUMPLE, 323 + 011134' 526555 605600 X JUMPN , 326 + + 011135' 544154 540000 X LALL , 756 + + 011136' 544442 000000 X LDB , 135 + 011616' 323326 756135 + 011137' 544442 510000 X LDBI , 134 + + + 011140' 545163 640000 X LIST , 757 + 011141' 545164 000000 X LIT , 760 + 011142' 545743 000000 X LOC , 761 + 011617' 134757 760761 + + 011143' 545757 536560 X LOOKUP, 076 + + 011144' 546350 000000 X LSH , 242 + 011145' 546350 430000 X LSHC , 246 + 011146' 555457 464600 X MLOFF , 767 + 011620' 076242 246767 + 011147' 555457 560000 X MLON , 766 + 011150' 555766 450000 XX MOVE , 200 + 011151' 555766 455100 XX MOVEI , 201 + 011152' 555766 455500 XX MOVEM , 202 + 011621' 766200 201202 + 011153' 555766 456300 X MOVES , 203 + MACRO V.10 PAGE 151-3 + MACHINE INSTRUCTION SEARCH ROUTINES + + 011154' 555766 550000 X MOVM , 214 + 011155' 555766 555100 X MOVMI , 215 + 011156' 555766 555500 X MOVMM , 216 + 011622' 203214 215216 + 011157' 555766 556300 X MOVMS , 217 + 011160' 555766 560000 X MOVN , 210 + 011161' 555766 565100 X MOVNI , 211 + 011162' 555766 565500 X MOVNM , 212 + 011623' 217210 211212 + 011163' 555766 566300 X MOVNS , 213 + 011164' 555766 630000 X MOVS , 204 + 011165' 555766 635100 X MOVSI , 205 + 011166' 555766 635500 X MOVSM , 206 + 011624' 213204 205206 + 011167' 555766 636300 X MOVSS , 207 + + + 011170' 556441 604500 X MTAPE , 072 + 011171' 556457 601600 XX MTOP. , 024 + + 011172' 556554 000000 X MUL , 224 + 011625' 207072 024224 + 011173' 556554 420000 X MULB , 227 + 011174' 556554 510000 X MULI , 225 + 011175' 556554 550000 X MULM , 226 + 011176' 565451 160000 XX NLI. , 031 + 011626' 227225 226031 + 011177' 565457 160000 XX NLO. , 032 + + 011200' 565763 715500 X NOSYM , 762 + + MACRO V.10 PAGE 152 + MACHINE INSTRUCTION SEARCH ROUTINES + + 011201' 574364 000000 X OCT , 763 + 011202' 576044 454600 X OPDEF , 764 + 011627' 032762 763764 + + 011203' 576045 560000 X OPEN , 050 + + 011204' 576200 000000 X OR , 434 + 011205' 576242 000000 X ORB , 437 + 011206' 576243 410000 X ORCA , 454 + 011630' 050434 437454 + 011207' 576243 414200 X ORCAB , 457 + 011210' 576243 415100 X ORCAI , 455 + 011211' 576243 415500 X ORCAM , 456 + 011212' 576243 420000 X ORCB , 470 + 011631' 457455 456470 + 011213' 576243 424200 X ORCBB , 473 + + 011214' 576243 425100 X ORCBI , 471 + 011215' 576243 425500 X ORCBM , 472 + 011216' 576243 550000 X ORCM , 464 + 011632' 473471 472464 + 011217' 576243 554200 X ORCMB , 467 + 011220' 576243 555100 X ORCMI , 465 + 011221' 576243 555500 X ORCMM , 466 + 011222' 576251 000000 X ORI , 435 + 011633' 467465 466435 + 011223' 576255 000000 X ORM , 436 + + 011224' 576564 000000 X OUT , 057 + 011225' 576564 160000 XX OUT. , 017 + 011226' 576564 426546 X OUTBUF, 065 + 011634' 436057 017065 + 011227' 576564 461600 XX OUTF. , 027 + 011230' 576564 606564 X OUTPUT, 067 + + MACRO V.10 PAGE 153 + MACHINE INSTRUCTION SEARCH ROUTINES + + 011231' 604147 450000 X PAGE , 700 + 011232' 604163 632200 X PASS2 , 701 + 011635' 027067 700701 + 011233' 605041 634500 X PHASE , 702 + 011234' 605751 566400 X POINT , 703 + + 011235' 605760 000000 XX POP , 262 + 011236' 605760 520000 XX POPJ , 263 + 011636' 702703 262263 + + 011237' 606247 455644 X PRGEND, 714 + 011240' 606251 566470 X PRINTX, 704 + 011241' 606562 474500 X PURGE , 705 + + 011242' 606563 500000 XX PUSH , 261 + 011637' 714704 705261 + 011243' 606563 505200 XX PUSHJ , 260 + + 011244' 624144 517000 X RADIX , 706 + 011245' 624144 517025 X RADIX5, 707 + + 011246' 624554 454163 X RELEAS, 071 + 011640' 260706 707071 + + 011247' 624554 574300 X RELOC , 710 + 011250' 624555 416253 X REMARK, 711 + + 011251' 624556 415545 X RENAME, 055 + + 011252' 624560 454164 X REPEAT, 712 + 011641' 710711 055712 + + 011253' 624563 456416 XX RESET., 015 + 011254' 625155 000000 X RIM , 715 + 011255' 625155 212000 X RIM10 , 735 + 011256' 625155 212042 X RIM10B, 736 + 011642' 015715 735736 + + 011257' 625764 000000 X ROT , 241 + 011260' 625764 430000 X ROTC , 245 + + 011261' 626367 000000 X RSW , 716 + 011262' 626442 160000 XX RTB. , 022 + 011643' 241245 716022 + 011263' 634154 540000 X SALL , 720 + IFN UNIVR,<X SEARCH, 721> + + 011264' 634564 410000 X SETA , 424 + 011265' 634564 414200 X SETAB , 427 + 011266' 634564 415100 X SETAI , 425 + 011644' 720424 427425 + 011267' 634564 415500 X SETAM , 426 + 011270' 634564 434100 X SETCA , 450 + MACRO V.10 PAGE 153-1 + MACHINE INSTRUCTION SEARCH ROUTINES + + 011271' 634564 434142 X SETCAB, 453 + 011272' 634564 434151 X SETCAI, 451 + 011645' 426450 453451 + 011273' 634564 434155 X SETCAM, 452 + 011274' 634564 435500 X SETCM , 460 + 011275' 634564 435542 X SETCMB, 463 + 011276' 634564 435551 X SETCMI, 461 + 011646' 452460 463461 + 011277' 634564 435555 X SETCMM, 462 + 011300' 634564 550000 X SETM , 414 + 011301' 634564 554200 X SETMB , 417 + 011302' 634564 555100 X SETMI , 415 + 011647' 462414 417415 + 011303' 634564 555500 X SETMM , 416 + 011304' 634564 570000 X SETO , 474 + 011305' 634564 574200 X SETOB , 477 + 011306' 634564 575100 X SETOI , 475 + 011650' 416474 477475 + 011307' 634564 575500 X SETOM , 476 + 011310' 634564 636463 X SETSTS, 060 + 011311' 634564 720000 X SETZ , 400 + 011312' 634564 724200 X SETZB , 403 + 011651' 476060 400403 + 011313' 634564 725100 X SETZI , 401 + 011314' 634564 725500 XX SETZM , 402 + + 011315' 635170 425164 XX SIXBIT, 717 + + 011316' 635351 600000 XX SKIP , 330 + 011652' 401402 717330 + 011317' 635351 604100 X SKIPA , 334 + 011320' 635351 604500 X SKIPE , 332 + 011321' 635351 604700 X SKIPG , 337 + 011322' 635351 604745 X SKIPGE, 335 + 011653' 334332 337335 + 011323' 635351 605400 X SKIPL , 331 + 011324' 635351 605445 X SKIPLE, 333 + 011325' 635351 605600 X SKIPN , 336 + + 011326' 635451 636416 XX SLIST., 025 + 011654' 331333 336025 + + 011327' 635752 000000 X SOJ , 360 + 011330' 635752 410000 X SOJA , 364 + 011331' 635752 450000 X SOJE , 362 + 011332' 635752 470000 X SOJG , 367 + 011655' 360364 362367 + 011333' 635752 474500 X SOJGE , 365 + 011334' 635752 540000 X SOJL , 361 + 011335' 635752 544500 X SOJLE , 363 + 011336' 635752 560000 X SOJN , 366 + 011656' 365361 363366 + + MACRO V.10 PAGE 153-2 + MACHINE INSTRUCTION SEARCH ROUTINES + + 011337' 635763 000000 XX SOS , 370 + 011340' 635763 410000 X SOSA , 374 + 011341' 635763 450000 X SOSE , 372 + 011342' 635763 470000 X SOSG , 377 + 011657' 370374 372377 + 011343' 635763 474500 X SOSGE , 375 + 011344' 635763 540000 X SOSL , 371 + 011345' 635763 544500 X SOSLE , 373 + 011346' 635763 560000 X SOSN , 376 + 011660' 375371 373376 + + 011347' 636165 577245 X SQUOZE, 707 + + 011350' 636441 645700 X STATO , 061 + 011351' 636441 646563 X STATUS, 062 + 011352' 636441 647200 X STATZ , 063 + 011661' 707061 062063 + + 011353' 636457 605100 X STOPI , 722 + + 011354' 636542 000000 X SUB , 274 + 011355' 636542 420000 X SUBB , 277 + 011356' 636542 510000 X SUBI , 275 + 011662' 722274 277275 + 011357' 636542 550000 X SUBM , 276 + + IF2,<IFE OPHSH,<SUBTL:>> + 011360' 636542 646454 X SUBTTL, 723 + 011361' 636560 606245 X SUPPRE, 713 + 011362' 637156 000000 X SYN , 724 + 011663' 276723 713724 + 011363' 644160 450000 X TAPE , 725 + + MACRO V.10 PAGE 154 + MACHINE INSTRUCTION SEARCH ROUTINES + + 011364' 644443 000000 X TDC , 650 + 011365' 644443 410000 X TDCA , 654 + 011366' 644443 450000 X TDCE , 652 + 011664' 725650 654652 + 011367' 644443 560000 X TDCN , 656 + 011370' 644456 000000 X TDN , 610 + 011371' 644456 410000 X TDNA , 614 + 011372' 644456 450000 X TDNE , 612 + 011665' 656610 614612 + 011373' 644456 560000 X TDNN , 616 + 011374' 644457 000000 X TDO , 670 + 011375' 644457 410000 X TDOA , 674 + 011376' 644457 450000 X TDOE , 672 + 011666' 616670 674672 + 011377' 644457 560000 X TDON , 676 + 011400' 644472 000000 X TDZ , 630 + 011401' 644472 410000 X TDZA , 634 + 011402' 644472 450000 X TDZE , 632 + 011667' 676630 634632 + 011403' 644472 560000 X TDZN , 636 + + 011404' 645164 544500 X TITLE , 726 + + 011405' 645443 000000 X TLC , 641 + 011406' 645443 410000 X TLCA , 645 + 011670' 636726 641645 + 011407' 645443 450000 X TLCE , 643 + 011410' 645443 560000 X TLCN , 647 + 011411' 645456 000000 X TLN , 601 + 011412' 645456 410000 X TLNA , 605 + 011671' 643647 601605 + 011413' 645456 450000 XX TLNE , 603 + 011414' 645456 560000 XX TLNN , 607 + 011415' 645457 000000 XX TLO , 661 + 011416' 645457 410000 X TLOA , 665 + 011672' 603607 661665 + 011417' 645457 450000 X TLOE , 663 + 011420' 645457 560000 X TLON , 667 + 011421' 645472 000000 XX TLZ , 621 + 011422' 645472 410000 XX TLZA , 625 + 011673' 663667 621625 + 011423' 645472 450000 XX TLZE , 623 + 011424' 645472 560000 XX TLZN , 627 + + MACRO V.10 PAGE 155 + MACHINE INSTRUCTION SEARCH ROUTINES + + 011425' 646243 000000 X TRC , 640 + 011426' 646243 410000 X TRCA , 644 + 011674' 623627 640644 + 011427' 646243 450000 X TRCE , 642 + 011430' 646243 560000 X TRCN , 646 + 011431' 646256 000000 X TRN , 600 + 011432' 646256 410000 X TRNA , 604 + 011675' 642646 600604 + 011433' 646256 450000 XX TRNE , 602 + 011434' 646256 560000 XX TRNN , 606 + 011435' 646257 000000 X TRO , 660 + 011436' 646257 410000 X TROA , 664 + 011676' 602606 660664 + 011437' 646257 450000 X TROE , 662 + 011440' 646257 560000 X TRON , 666 + 011441' 646272 000000 XX TRZ , 620 + 011442' 646272 410000 X TRZA , 624 + 011677' 662666 620624 + 011443' 646272 450000 X TRZE , 622 + 011444' 646272 560000 X TRZN , 626 + + 011445' 646343 000000 X TSC , 651 + 011446' 646343 410000 X TSCA , 655 + 011700' 622626 651655 + 011447' 646343 450000 X TSCE , 653 + 011450' 646343 560000 X TSCN , 657 + 011451' 646356 000000 X TSN , 611 + 011452' 646356 410000 X TSNA , 615 + 011701' 653657 611615 + 011453' 646356 450000 X TSNE , 613 + + 011454' 646356 560000 X TSNN , 617 + 011455' 646357 000000 X TSO , 671 + 011456' 646357 410000 X TSOA , 675 + 011702' 613617 671675 + 011457' 646357 450000 X TSOE , 673 + 011460' 646357 560000 X TSON , 677 + 011461' 646372 000000 X TSZ , 631 + 011462' 646372 410000 X TSZA , 635 + 011703' 673677 631635 + 011463' 646372 450000 X TSZE , 633 + 011464' 646372 560000 X TSZN , 637 + 011465' 646443 415454 X TTCALL, 051 + 011466' 646757 634547 X TWOSEG, 731 + 011704' 633637 051731 + 011467' 654641 000000 X UFA , 130 + 011470' 654745 644600 X UGETF , 073 + 011471' 655245 560000 X UJEN , 100 + IFN UNIVR,<X UNIVER, 737> + 011472' 656345 645100 X USETI , 074 + 011705' 130073 100074 + 011473' 656345 645700 X USETO , 075 + + MACRO V.10 PAGE 155-1 + MACHINE INSTRUCTION SEARCH ROUTINES + + 011474' 664162 000000 X VAR , 727 + + 011475' 676442 160000 XX WTB. , 023 + + 011476' 704154 540000 X XALL , 732 + 011706' 075727 023732 + + 011477' 704364 000000 X XCT , 256 + + 011500' 705451 636400 X XLIST , 733 + + 011501' 705762 000000 X XOR , 430 + 011502' 705762 420000 X XORB , 433 + 011707' 256733 430433 + 011503' 705762 510000 X XORI , 431 + 011504' 705762 550000 X XORM , 432 + + 011505' 706065 564745 X XPUNGE, 730 + 011506' 706744 000000 X XWD , 734 + 011710' 431432 730734 + + 011507' 720000 000000 X Z , 000 + + 011510' 164362 454600 X .CREF , 740 + 011511' 165067 466255 X .HWFRM, 742 + 011512' 165546 625564 X .MFRMT, 743 + 011711' 000740 742743 + 011513' 167043 624546 X .XCREF, 741 + + + MACRO V.10 PAGE 156 + MACHINE INSTRUCTION SEARCH ROUTINES + + IFN OPHSH,< ;NO-OPS, OLD MNEMONICS,F4 UUOS + X CAI , 300 + X CAM , 310 + X CLEAR , 400 + X CLEARB, 403 + X CLEARI, 401 + X CLEARM, 402 + X JUMP , 320 + X JUMPA , 324 + X SKIP , 330 + X RESET., 015 + X IN. , 016 + X OUT. , 017 + X DATA. , 020 + X FIN. , 021 + X RTB. , 022 + X WTB. , 023 + X MTOP. , 024 + X SLIST., 025 + X INF. , 026 + X OUTF. , 027 + X NLI. , 031 + X NLO. , 032 + > + MACRO V.10 PAGE 157 + MACHINE INSTRUCTION SEARCH ROUTINES + + IFE OPHSH,< + IF1, < BLOCK N1> + 011514' 377777 777777 OP1END: -1B36 + 011515' OP1COD: BLOCK N1/4 + 011712' 000000 000000 CC> + IFN OPHSH,< + IF2,< + DEFINE SETVAL (N)<EXP .%'N + PURGE .%'N> + N=0 + XLIST + REPEAT PRIME,<SETVAL \N + N=N+1> + LIST + > + OP1COD: IF1,< BLOCK <PRIME/4+1>> + IF2,< + DEFINE SETVAL (N)<EXP .$'N + PURGE .$'N> + N=0 + XLIST + REPEAT <PRIME/4+1>,<SETVAL \N + N=N+1> + > + LIST> + + IFDEF .CREF,< .CREF ;START CREFFING AGAIN> + MACRO V.10 PAGE 158 + PERMANENT SYMBOLS + + SUBTTL PERMANENT SYMBOLS + 011713' 000000 000002 SYMNUM: EXP LENGTH/2 ;NUMBER OF PERMANENT SYMBOLS + DEFINE P (A,B)< + SIXBIT /A/ + XWD SYMF!NOOUTF,B> + + 011714' 400000 000000 P @, 0(SUPRBT) + 011715' 500004 000000 + 011716' 373737 373737 P ??????, 0(SUPRBT) + 011717' 500004 000000 + + 000004 LENGTH= .-SYMNUM-1 ;LENGTH OF INITIAL SYMBOLS + + 011720' PRMTBL: ;PERMANENT SYMBOLS + 011720' 414443 000000 P ADC, 24 + 011721' 500000 000024 + 011722' 416062 000000 P APR, 0 + 011723' 500000 000000 + 011724' 434351 000000 P CCI, 14 + 011725' 500000 000014 + 011726' 434460 000000 P CDP, 110 + 011727' 500000 000110 + 011730' 434462 000000 P CDR, 114 + 011731' 500000 000114 + 011732' 436041 000000 P CPA, 0 + 011733' 500000 000000 + 011734' 436200 000000 P CR, 150 + 011735' 500000 000150 + 011736' 444300 000000 P DC, 200 + 011737' 500000 000200 + 011740' 444363 410000 P DCSA, 300 + 011741' 500000 000300 + 011742' 444363 420000 P DCSB, 304 + 011743' 500000 000304 + 011744' 444600 000000 P DF, 270 + 011745' 500000 000270 + 011746' 445163 000000 P DIS, 130 + 011747' 500000 000130 + 011750' 445463 000000 P DLS, 240 + 011751' 500000 000240 + 011752' 446043 000000 P DPC, 250 + 011753' 500000 000250 + 011754' 446353 000000 P DSK, 170 + 011755' 500000 000170 + 011756' 446443 000000 P DTC, 320 + 011757' 500000 000320 + 011760' 446463 000000 P DTS, 324 + 011761' 500000 000324 + 011762' 546064 000000 P LPT, 124 + 011763' 500000 000124 + 011764' 554446 000000 P MDF, 260 + 011765' 500000 000260 + 011766' 556443 000000 P MTC, 220 + MACRO V.10 PAGE 158-1 + PERMANENT SYMBOLS + + 011767' 500000 000220 + 011770' 556455 000000 P MTM, 230 + 011771' 500000 000230 + 011772' 556463 000000 P MTS, 224 + 011773' 500000 000224 + 011774' 604147 000000 P PAG, 10 + 011775' 500000 000010 + 011776' 605100 000000 P PI, 4 + 011777' 500000 000004 + 012000' 605464 000000 P PLT, 140 + 012001' 500000 000140 + 012002' 606460 000000 P PTP, 100 + 012003' 500000 000100 + 012004' 606462 000000 P PTR, 104 + 012005' 500000 000104 + + 012006' 645543 000000 P TMC, 340 + 012007' 500000 000340 + 012010' 645563 000000 P TMS, 344 + 012011' 500000 000344 + 012012' 646471 000000 P TTY, 120 + 012013' 500000 000120 + 012014' 656443 000000 P UTC, 210 + 012015' 500000 000210 + 012016' 656463 000000 P UTS, 214 + 012017' 500000 000214 + IFE LNSSW,< XLIST > + LIST + 012020' PRMEND: ;END OF PERMANENT SYMBOLS + + MACRO V.10 PAGE 159 + PERMANENT SYMBOLS + + OPDEF ZL [Z LITF] ;INVALID IN LITERALS + OPDEF ZA [Z ADDF] ;INVALID IN ADDRESSES + OPDEF ZAL [Z ADDF!LITF] + + 012020' OP1TAB: + + 012020' 000000 110407' ZA PAGE0 ;PAGE + 012021' 000000 303066' ZAL PASS20 ;PASS2 + 012022' 000000 304017' ZAL PHASE0 ;PHASE + 012023' 000000 004561' Z POINT0 ;POINT + 012024' 000000 103342' ZA PRNTX0 ;PRINTX + 012025' 000000 104317' ZA PURGE0 ;PURGE + 012026' 000000 103306' ZA RADIX0 ;RADIX + 012027' 000000 004667' Z RADX50 ;RADIX50,SQUOZE + 012030' 000001 304114' ZAL LOC0 (1) ;RELOC + 012031' 000000 303361' ZAL REMAR0 ;REMARK + 012032' 000000 105070' ZA REPEA0 ;REPEAT + 012033' 000000 104161' ZA SUPRE0 ;SUPRESS + 012034' 000000 304712' ZAL PSEND0 ;PRGEND + 012035' 000400 310072' ZAL RIM0 (RIMSW) ;RIM + 012036' 700040 004352' DATAI 0,IOP ;RSW + 012037' 000001 004515' Z ASCII0 (1) ;SIXBIT + 012040' 004001 303315' ZAL IOSET (IOPALL!IOSALL) ;SALL + IFN UNIVR,< ZAL SERCH0 ;SEARCH> + 012041' 000000 000000 IFE UNIVR,< Z 0> + 012042' 000000 106125' ZA STOPI0 ;STOPI + 012043' 440700 104220' ZA SUBTT0 (Z (POINT 7,,)) ;SUBTTL + 012044' 000000 104261' ZA SYN0 ;SYN + 012045' 000000 303304' ZAL TAPE0 ;TAPE + 012046' 440700 104207' ZA TITLE0 (Z (POINT 7,,)) ;TITLE + 012047' 000000 303457' ZAL VAR0 ;VAR + + 012050' 000000 004177' Z XPUNG0 ;XPUNGE + 012051' 000000 303360' ZAL TWSEG0 ;TWOSEGMENTS + 012052' 004000 303314' ZAL XALL0 (IOPALL) ;XALL + 012053' 040000 303315' ZAL IOSET (IOPROG) ;XLIST + 012054' 000000 004601' Z XWD0 ;XWD + 012055' 000100 310072' ZAL RIM0 (RIM1SW) ;RIM10 + 012056' 004000 310072' ZAL RIM0 (R1BSW) ;RIM10B + IFN UNIVR,< ZA UNIV0 (Z (POINT 7,,)) ;UNIVERSAL> + 012057' 000000 000000 IFE UNIVR,< Z 0 ;UNIVERSAL> + 012060' 002000 303322' ZAL IORSET (IONCRF) ;.CREF + 012061' 002000 303315' ZAL IOSET (IONCRF) ;.XCREF + 012062' 000000 103360' ZA OFFORM ;.HWFRMT + 012063' 000000 103360' ZA ONFORM ;.MFRMT + MACRO V.10 PAGE 160 + PERMANENT SYMBOLS + + 012064' OP2TAB: + + 012064' 000000 004515' Z ASCII0 (0) ;ASCII + 012065' 400000 004515' Z ASCII0 (1B18) ;ASCIZ + 012066' 700000 004352' BLKI IOP ;BLKI + 012067' 700100 004352' BLKO IOP ;BLKO + 012070' 000000 303326' ZAL BLOCK0 ;BLOCK + 012071' 000000 104172' ZA SUPRSA ;ASUPPRESS + 012072' 000000 303360' ZAL HISEG0 ;HISEG + 012073' 000000 004631' Z BYTE0 ;BYTE + 012074' 700240 004352' CONI IOP ;CONI + 012075' 700200 004352' CONO IOP ;CONO + 012076' 700340 004352' CONSO IOP ;CONSO + 012077' 700300 004352' CONSZ IOP ;CONSZ + 012100' 700040 004352' DATAI IOP ;DATAI + 012101' 700140 004352' DATAO IOP ;DATAO + 012102' 000012 004466' Z OCT0 (^D10) ;DEC + 012103' 000000 105211' ZA DEFIN0 ;DEFINE + + 012104' 000000 304015' ZAL DEPHA0 ;DEPHASE + 012105' 000000 303037' ZAL END0 ;END + 012106' 000600 103677' ZA INTER0 (INTF!ENTF) ;ENTRY + 012107' 000000 004465' Z EXPRES ;EXP + 012110' 000000 103715' ZA EXTER0 ;EXTERN + 012111' 254200 004354' JRST 4,OP ;HALT + 012112' 607640 003540' TLNN FR,IFPASS ;IF1 + 012113' 603640 003540' TLNE FR,IFPASS ;IF2 + + 012114' 602000 003543' TRNE AC0,IFB0 ;IFB + 012115' 603240 003600' TLNE ARG,IFDEF0 ;IFDEF + 012116' 000000 003610' Z IFIDN0 (0) ;IFDIF + 012117' 332000 003512' SKIPE IF ;IFE + 012120' 337000 003512' SKIPG IF ;IFG + 012121' 335000 003512' SKIPGE IF ;IFGE + 012122' 000001 003610' Z IFIDN0 (1) ;IFIDN + 012123' 331000 003512' SKIPL IF ;IFL + + 012124' 333000 003512' SKIPLE IF ;IFLE + 012125' 336000 003512' SKIPN IF ;IFN + 012126' 606000 003543' TRNN AC0,IFB0 ;IFNB + 012127' 607240 003600' TLNN ARG,IFDEF0 ;IFNDEF + 012130' 000400 103677' ZA INTER0 (INTF) ;INTERN + 012131' 000000 004617' Z IOWD0 ;IOWD + 012132' 000000 005777' Z IRP0 (0) ;IRP + 012133' 400000 005777' Z IRP0 (400000) ;IRPC + + 012134' 255300 004354' JFCL 6,OP ;JCRY + 012135' 255200 004354' JFCL 4,OP ;JCRY0 + 012136' 255100 004354' JFCL 2,OP ;JCRY1 + 012137' 254500 004354' JRST 12,OP ;JEN + 012140' 255400 004354' JFCL 10,OP ;JOV + 012141' 254100 004354' JRST 2,OP ;JRSTF + 012142' 004001 303322' ZAL IORSET (IOPALL!IOSALL) ;LALL + MACRO V.10 PAGE 160-1 + PERMANENT SYMBOLS + + 012143' 040000 303322' ZAL IORSET (IOPROG) ;LIST + 012144' 000000 303365' ZAL LIT0 ;LIT + 012145' 000000 304114' ZAL LOC0 (0) ;LOC + 012146' 000000 104157' ZA OFFSYM ;NOSYM + 012147' 000010 004466' Z OCT0 (^D8) ;OCT + 012150' 000000 103764' ZA OPDEF0 ;OPDEF + 012151' 255040 004354' JFCL 1,OP ;JFOV + 012152' 000000 104154' ZA ONML ;MLON + 012153' 000000 104155' ZA OFFML ;MLOFF + 012154' 600000 004515' Z ASCII0 (3B19) ;COMMENT + IFN IIISW,< + Z ASCII0 (5B20) ;ASCID> + MACRO V.10 PAGE 161 + PERMANENT SYMBOLS + + + REPEAT 0,<CALTBL: + ;USER DEFINED CALLI'S GO HERE + SIXBIT /LIGHTS/ ;-1 + CALLI0: SIXBIT /RESET/ ; 0 + SIXBIT /DDTIN/ ; 1 + SIXBIT /SETDDT/ ; 2 + SIXBIT /DDTOUT/ ; 3 + SIXBIT /DEVCHR/ ; 4 + SIXBIT /DDTGT/ ; 5 + SIXBIT /GETCHR/ ; 6 + SIXBIT /DDTRL/ ; 7 + SIXBIT /WAIT/ ;10 + SIXBIT /CORE/ ;11 + SIXBIT /EXIT/ ;12 + SIXBIT /UTPCLR/ ;13 + SIXBIT /DATE/ ;14 + SIXBIT /LOGIN/ ;15 + SIXBIT /APRENB/ ;16 + SIXBIT /LOGOUT/ ;17 + SIXBIT /SWITCH/ ;20 + SIXBIT /REASSI/ ;21 + SIXBIT /TIMER/ ;22 + SIXBIT /MSTIME/ ;23 + SIXBIT /GETPPN/ ;24 + SIXBIT /TRPSET/ ;25 + SIXBIT /TRPJEN/ ;26 + SIXBIT /RUNTIM/ ;27 + SIXBIT /PJOB/ ;30 + SIXBIT /SLEEP/ ;31 + SIXBIT /SETPOV/ ;32 + SIXBIT /PEEK/ ;33 + SIXBIT /GETLIN/ ;34 + SIXBIT /RUN/ ;35 + SIXBIT /SETUWP/ ;36 + SIXBIT /REMAP/ ;37 + SIXBIT /GETSEG/ ;40 + SIXBIT /GETTAB/ ;41 + SIXBIT /SPY/ ;42 + SIXBIT /SETNAM/ ;43 + SIXBIT /TMPCOR/ ;44 + SIXBIT /DSKCHR/ ;45 + SIXBIT /SYSSTR/ ;46 + SIXBIT /JOBSTR/ ;47 + SIXBIT /STRUUO/ ;50 + SIXBIT /SYSPHY/ ;51 + SIXBIT /FRECHN/ ;52 + SIXBIT /DEVTYP/ ;53 + SIXBIT /DEVSTS/ ;54 + SIXBIT /DEVPPN/ ;55 + SIXBIT /SEEK/ ;56 + SIXBIT /RTTRP/ ;57 + SIXBIT /LOCK/ ;60 + MACRO V.10 PAGE 161-1 + PERMANENT SYMBOLS + + SIXBIT /JOBSTS/ ;61 + SIXBIT /LOCATE/ ;62 + SIXBIT /WHERE/ ;63 + SIXBIT /DEVNAM/ ;64 + SIXBIT /CTLJOB/ ;65 + SIXBIT /GOBSTR/ ;66 + 0 ;67 + 0 ;70 + SIXBIT /HPQ/ ;71 + SIXBIT /HIBER/ ;72 + SIXBIT /WAKE/ ;73 + SIXBIT /CHGPPN/ ;74 + SIXBIT /SETUUO/ ;75 + SIXBIT /DEVGEN/ ;76 + SIXBIT /OTHUSR/ ;77 + SIXBIT /CHKACC/ ;100 + SIXBIT /DEVSIZ/ ;101 + SIXBIT /DAEMON/ ;102 + SIXBIT /JOBPEK/ ;103 + SIXBIT /ATTACH/ ;104 + SIXBIT /DAEFIN/ ;105 + SIXBIT /FRCUUO/ ;106 + SIXBIT /DEVLNM/ ;107 + SIXBIT /PATH./ ;110 + + CALNTH==.-CALTBL + NEGCAL==CALLI0-CALTBL ;NUMBER OF NEGATIVE CALLI'S + > + 012155' 515643 506267 TTCTBL: SIXBIT /INCHRW/ ; 0 INPUT A CHAR. AND WAIT + 012156' 576564 435062 SIXBIT /OUTCHR/ ; 1 OUTPUT A CHAR. + 012157' 515643 506263 SIXBIT /INCHRS/ ; 2 INPUT A CHAR. AND SKIP + 012160' 576564 636462 SIXBIT /OUTSTR/ ; 3 OUTPUT A STRING + 012161' 515643 506754 SIXBIT /INCHWL/ ; 4 INPUT CHAR., WAIT, LINE MODE + 012162' 515643 506354 SIXBIT /INCHSL/ ; 5 INPUT CHAR., SKIP, LINE MODE + 012163' 474564 544350 SIXBIT /GETLCH/ ; 6 GET LINE CHARACTERISTICS + 012164' 634564 544350 SIXBIT /SETLCH/ ; 7 SET LINE CHARACTERISTICS + 012165' 624563 434156 SIXBIT /RESCAN/ ;10 RESET INPUT STREAM TO COMMAND + 012166' 435462 424651 SIXBIT /CLRBFI/ ;11 CLEAR TYPEIN BUFFER + 012167' 435462 424657 SIXBIT /CLRBFO/ ;12 CLEAR TYPEOUT BUFFER + 012170' 635360 515643 SIXBIT /SKPINC/ ;13 SKIPS IF A CHAR. CAN BE INPUT + 012171' 635360 515654 SIXBIT /SKPINL/ ;14 SKIPS IF A LINE CAN BE INPUT + 012172' 515756 455765 SIXBIT /IONEOU/ ;15 OUTPUT AS AN IMAGE CHAR. + + 000016 TTCLTH==.-TTCTBL + SUBTTL USER-DEFINED SYMBOL SEARCH ROUTINES + 012173' 260740 012313' MSRCH: PUSHJ PP,SEARCH ;PERFORM GENERAL SEARCH + 012174' 263740 000000 POPJ PP, ;NOT FOUND, EXIT + 012175' 327240 012202' JUMPG ARG,MSRCH2 ;SKIP-EXIT AND CROSS-REF IF FOUND + 012176' 312004 000001 CAME AC0,1(SX) ;WE ARE LOOKING AT SYMBOL, TRY ONE ABOVE + 012177' 263740 000000 POPJ PP, ;NO, EXIT + 012200' 271200 000002 ADDI SX,2 ;YES, POINT TO IT + 012201' 260740 012336' PUSHJ PP,SRCH5 ;LOAD REGISTERS + 012202' 354017 000000 MSRCH2: AOSA 0(PP) ;SET SKIP-EXIT + MACRO V.10 PAGE 161-2 + USER-DEFINED SYMBOL SEARCH ROUTINES + + 012203' 321240 012220' QSRCH: JUMPL ARG,SSRCH3 ;BRANCH IF OPERAND + 012204' 201140 000005 MOVEI SDEL,%MAC ;SET OPERATOR FLAG + 012205' 623600 000040 TLZE IO,DEFCRS ;IS IT A DEFINITION? + 012206' 201140 000006 MOVEI SDEL,%DMAC ;YES + 012207' 254000 012221' JRST CREF ;CROSS-REF AND EXIT + + 012210' 260740 012313' SSRCH: PUSHJ PP,SEARCH ;PERFORM GENERAL SEARCH + 012211' 263740 000000 POPJ PP, ;NOT FOUND, EXIT + 012212' 321240 012217' JUMPL ARG,SSRCH2 ;SKIP-EXIT AND CROSS-REF IF FOUND + 012213' 312004 777775 SSRCH1: CAME AC0,-3(SX) ;WE ARE LOOKING AT MACRO, LOOK ONE SLOT BELOW + 012214' 263740 000000 POPJ PP, ;NO DICE, EXIT + 012215' 275200 000002 SUBI SX,2 ;YES, POINT TO IT + 012216' 260740 012336' PUSHJ PP,SRCH5 ;LOAD REGISTERS + 012217' 350017 000000 SSRCH2: AOS 0(PP) ;SET FOR SKIP-EXIT + 012220' 201140 000001 SSRCH3: MOVEI SDEL,%SYM ;SET OPERAND FLAG + + 012221' 607600 002000 CREF: TLNN IO,IONCRF ;NO CREFFING FOR THIS SYMBOL? + 012222' 603640 402000 TLNE FR,P1!CREFSW ;PASS ONE OR CROSS-REF SUPPRESSION? + 012223' 263740 000000 POPJ PP, ;YES, EXIT + 012224' 250140 000007 EXCH SDEL,C ;PUT FLAG IN C, SACE C + 012225' 261740 000010 PUSH PP,CS + 012226' 603600 000400 TLNE IO,IOCREF ;HAVE WE PUT OUT THE 177,102 + 012227' 254000 012241' JRST CREF3 ;YES + 012230' 261740 000007 PUSH PP,C ;START OF CREF DATA + + MACRO V.10 PAGE 162 + USER-DEFINED SYMBOL SEARCH ROUTINES + + REPEAT 0,< ;NEEDS CHANGE TO CREF + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,102 + PUSHJ PP,OUTLST + TLO IO,IOCREF ;WE NOW ARE IN THAT STATE + POP PP,C ;WE HAVE NOW + CREF3: JUMPE C,NOFLG ;JUST CLOSE IT + PUSHJ PP,OUTLST ;TYPE OF SYMBOL (%MAC,%DMAC,%SYM) + MOVSI CS,770000 ;COUNT CHRS + TDZA C,C ;STARTING AT 0 + LSH CS,-6 ;TRY NEXT + TDNE AC0,CS ;IS THAT ONE THERE? + AOJA C,.-2 ;YES + PUSHJ PP,OUTLST ;PRINT NUMBER OF SYMBOL CONSTITUENTS + MOVE CS,AC0 + + CREF2: MOVEI C,0 + LSHC C,6 + ADDI C,40 + PUSHJ PP,OUTLST ;THE ASCII SYMBOL + JUMPN CS,CREF2 + MOVEI C,%DSYM + TLZE IO,DEFCRS + PUSHJ PP,OUTLST ;MARK IT AS A DEFINING OCCURENCE + NOFLG: MOVE C,SDEL + POP PP,CS + POPJ PP, + + CLSCRF: TRNN ER,LPTSW + POPJ PP, ;LEAVE IF WE SHOULD NOT BE PRINTING + CLSCR2: MOVEI C,177 + PUSHJ PP,PRINT + TLZE IO,IOCREF ;WAS IT OPEN? + JRST CLSCR1 ;YES, JUST CLOSE IT + MOVEI C,102 ;NO, OPEN IT FIRST + PUSHJ PP,OUTLST ;MARK BEGINNING OF CREF DATA + MOVEI C,177 + PUSHJ PP,OUTLST + CLSCR1: MOVEI C,103 + JRST OUTLST ;MARK END OF CREF DATA + + CLSC3: TLZ IO,IOCREF + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,104 + JRST OUTLST ;177,104 CLOSES IT FOR NOW + > ;END OF REPEAT 0 + MACRO V.10 PAGE 163 + USER-DEFINED SYMBOL SEARCH ROUTINES + + REPEAT 1,< ;WORKS WITH EXISTING CREF + 012231' 603600 000100 TLNE IO,IOPAGE + 012232' 260740 012264' PUSHJ PP,CRFHDR ;GET CORRECT SUBTTL + 012233' 201340 000177 MOVEI C,177 + 012234' 260740 010403' PUSHJ PP,OUTLST + 012235' 201340 000102 MOVEI C,102 + 012236' 260740 010403' PUSHJ PP,OUTLST + 012237' 661600 000400 TLO IO,IOCREF ;WE NOW ARE IN THAT STATE + 012240' 262740 000007 POP PP,C ;WE HAVE NOW + 012241' 260740 010403' CREF3: PUSHJ PP,OUTLST ;TYPE OF SYMBOL (%MAC,%DMAC,%SYM) + 012242' 205400 770000 MOVSI CS,770000 ;COUNT CHRS + 012243' 634340 000007 TDZA C,C ;STARTING AT 0 + 012244' 242400 777772 LSH CS,-6 ;TRY NEXT + 012245' 612000 000010 TDNE AC0,CS ;IS THAT ONE THERE? + 012246' 344340 012244' AOJA C,.-2 ;YES + 012247' 260740 010403' PUSHJ PP,OUTLST ;PRINT NUMBER OF SYMBOL CONSTITUENTS + 012250' 200400 000000 MOVE CS,AC0 + + 012251' 201340 000000 CREF2: MOVEI C,0 + 012252' 246340 000006 LSHC C,6 + 012253' 271340 000040 ADDI C,40 + 012254' 260740 010403' PUSHJ PP,OUTLST ;THE ASCII SYMBOL + 012255' 326400 012251' JUMPN CS,CREF2 + 012256' 201340 000002 MOVEI C,%DSYM + 012257' 623600 000040 TLZE IO,DEFCRS + 012260' 260740 010403' PUSHJ PP,OUTLST ;MARK IT AS A DEFINING OCCURENCE + 012261' 200340 000003 MOVE C,SDEL + 012262' 262740 000010 POP PP,CS + 012263' 263740 000000 POPJ PP, + + IFN OPHSH,< + SUBTL: SIXBIT /SUBTTL/> + 012264' 312000 011360' CRFHDR: CAME AC0,SUBTL ;IS FIRST SYMBOL "SUBTTL" + 012265' 254000 012272' JRST CRFHD1 ;NO + 012266' 510000 000006 HLLZ AC0,V + 012267' 260740 004220' PUSHJ PP,SUBTT0 ;UPDATE SUBTTL + 012270' 200000 011360' MOVE AC0,SUBTL ;RESTORE ARG. + 012271' 201300 003360' MOVEI V,CPOPJ + 012272' 201340 000000 CRFHD1: MOVEI C,0 + 012273' 254000 010325' JRST OUTL + + 012274' CLSC3: + 012274' 606600 000002 CLSCRF: TRNN ER,LPTSW + 012275' 263740 000000 POPJ PP, ;LEAVE IF WE SHOULD NOT BE PRINTING + 012276' 623600 000400 CLSCR2: TLZE IO,IOCREF ;FINISH UP LINE + 012277' 254000 012307' JRST CLSCR1 + 012300' 201340 000000 MOVEI C,0 + 012301' 603600 000100 TLNE IO,IOPAGE ;NEW PAGE? + 012302' 260740 010325' PUSHJ PP,OUTL ;YES,GIVE IT A ROUSING SENDOFF! + 012303' 201340 000177 MOVEI C,177 + 012304' 260740 010403' PUSHJ PP,OUTLST + 012305' 201340 000102 MOVEI C,102 + 012306' 260740 010403' PUSHJ PP,OUTLST ;MARK BEGINNING OF CREF DATA + MACRO V.10 PAGE 163-1 + USER-DEFINED SYMBOL SEARCH ROUTINES + + 012307' 201340 000177 CLSCR1: MOVEI C,177 + 012310' 260740 010403' PUSHJ PP,OUTLST + 012311' 201340 000103 MOVEI C,103 + 012312' 254000 010403' JRST OUTLST ;MARK END OF CREF DATA + > ;END OF REPEAT 1 + MACRO V.10 PAGE 164 + USER-DEFINED SYMBOL SEARCH ROUTINES + + 012313' 554200 013077' SEARCH: HLRZ SX,SRCHX + 012314' 550140 013077' HRRZ SDEL,SRCHX + + 012315' 311004 777777 SRCH1: CAML AC0,-1(SX) + 012316' 254000 012325' JRST SRCH3 + 012317' 274200 000003 SRCH2: SUB SX,SDEL + 012320' 242140 777777 LSH SDEL,-1 + 012321' 317200 013103' CAMG SX,SYMTOP + 012322' 326140 012315' JUMPN SDEL,SRCH1 + 012323' 326140 012317' JUMPN SDEL,SRCH2 + 012324' 364200 012361' SOJA SX,SRCHNO ;NOT FOUND + + 012325' 316004 777777 SRCH3: CAMN AC0,-1(SX) + 012326' 254000 012335' JRST SRCH4 ;NORMAL / FOUND EXIT + 012327' 270200 000003 ADD SX,SDEL + 012330' 242140 777777 LSH SDEL,-1 + 012331' 317200 013103' CAMG SX,SYMTOP + 012332' 326140 012315' JUMPN SDEL,SRCH1 + 012333' 326140 012317' JUMPN SDEL,SRCH2 + 012334' 364200 012361' SOJA SX,SRCHNO ;NOT FOUND + + 012335' 350017 000000 SRCH4: AOS 0(PP) ;SET FOR SKIP EXIT + 012336' 205240 000004 SRCH5: MOVSI ARG,SUPRBT ;HE IS USING IT, TURN OFF BIT + 012337' 412244 000000 ANDCAM ARG,(SX) ; IN THE TABLE + 012340' 200244 000000 SRCH7: MOVE ARG,0(SX) ;FLAG AND VALUE TO ARG + 012341' 135440 003303' LDB RC,RCPNTR ;POINT 1,ARG,17 + 012342' 603240 000002 TLNE ARG,LELF ;CHECK LEFT RELOCATE + 012343' 661440 000001 TLO RC,1 + 012344' 550300 000005 HRRZ V,ARG + 012345' 603240 000010 TLNE ARG,SPTR ;CHECK SPECIAL EXTESN POINTER + 012346' 254000 012352' JRST SRCH6 + 012347' 603240 004000 TLNE ARG,PNTF + 012350' 200305 000000 MOVE V,0(ARG) ;36BIT VALUE TO V + 012351' 254000 012363' JRST SRCHOK + + 012352' 200305 000000 SRCH6: MOVE V,0(ARG) ;VALUE + 012353' 200445 000001 MOVE RC,1(ARG) ;AND RELOC + 012354' 603440 777776 TLNE RC,-2 ;CHECK AND SET EXTPNT + 012355' 502440 013270' HLLM RC,EXTPNT + 012356' 602440 777776 TRNE RC,-2 + 012357' 542440 013270' HRRM RC,EXTPNT + 012360' 254000 012363' JRST SRCHOK + 012361' SRCHNO:IFN UNIVR,<SKIPN UNISCH+1 ;ALLOWED TO SEARCH OTHER TABLES> + 012361' 263740 000000 POPJ PP, ;NO, JUST RETURN + IFN UNIVR,<AOS V,UNISCH ;GET NEXT INDEX TO TABLE + CAIE V,1 ;FIRST TIME IN + JRST SRCHN1 ;YES, SAVE SYMBOL INFO + HRLM SX,UNISCH ;SAVE SX AND SET FLAG + MOVE ARG,SRCHX ;SEARCH POINTER + MOVEM ARG,UNISHX ;TO A SAFE PLACE + HRR ARG,SYMBOL + HRL ARG,SYMTOP + MOVEM ARG,UNIPTR ;STORE ALSO + MACRO V.10 PAGE 164-1 + USER-DEFINED SYMBOL SEARCH ROUTINES + + SRCHN1: MOVE V,UNISCH(V) ;GET TRUE INDEX + JUMPE V,SRCHKO ;IF ZERO ALL TABLE SCANNED + MOVE ARG,UNISHX(V) ;NEW SRCHX + MOVEM ARG,SRCHX ;SET IT UP + MOVE ARG,UNIPTR(V) ;SYMTOP,,SYMBOL + HRRZM ARG,SYMBOL + HLRZM ARG,SYMTOP + JRST SEARCH ;TRY AGAIN> + + 012362' 400240 000000 SRCHKO: SETZ ARG, ;CLEAR ARG SO ZERO STORED + 012363' SRCHOK: IFN UNIVR,<SKIPN UNISCH ;HAVE WE SEARCH OTHER TABLES> + 012363' 263740 000000 POPJ PP, ;NO, JUST RETURN + IFN UNIVR,< + SYMBCK: HLRZ SX,UNISCH ;RESTORE SX + SETZM UNISCH ;CLEAR SYMBCK FLAG + PUSH PP,V ;SAVE AN AC + MOVE V,UNISHX ;SRCHX + MOVEM V,SRCHX ;RESTORE ORIGINAL + MOVE V,UNIPTR ;SYMTOP,,SYMBOL + HRRZM V,SYMBOL + HLRZM V,SYMTOP + JUMPE ARG,SRCHK2 ;TOTALLY UNDEFINED + PUSH PP,RC ;SAVE SOME ACCS + PUSH PP,ARG + PUSH PP,EXTPNT + SETZB ARG,EXTPNT ;CLEAR ALL SYMBOL DATA + SETZB RC,V + PUSHJ PP,INSERT ;INSERT SYMBOL IN TABLE + POP PP,EXTPNT ;RESTORE ACCS ETC. + POP PP,ARG + POP PP,RC + MOVEM ARG,(SX) ;SET FLAGS AND VALUE AS IT SHOULD BE + SRCHK2: POP PP,V + POPJ PP, ;RETURN> + + MACRO V.10 PAGE 165 + USER-DEFINED SYMBOL SEARCH ROUTINES + + 012364' 603240 002100 INSERQ: TLNE ARG,UNDF!VARF + 012365' 403440 000006 INSERZ: SETZB RC,V + 012366' 312004 777777 INSERT: CAME AC0,-1(SX) ;ARE WE LOOKING AT MATCHING MNEMONIC? + 012367' 254000 012377' JRST INSRT2 ;NO, JUST INSERT + 012370' 321240 012374' JUMPL ARG,INSRT1 ;YES, BRANCH IF OPERAND + 012371' 331004 000000 SKIPL 0(SX) ;OPERATOR, ARE WE LOOKING AT ONE? + 012372' 254000 012467' JRST UPDATE ;YES, UPDATE + 012373' 254000 012377' JRST INSRT2 ;NO, INSERT + + 012374' 337004 000000 INSRT1: SKIPG 0(SX) ;OPERAND, ARE WE LOOKING AT ONE? + 012375' 254000 012467' JRST UPDATE ;YES, UPDATE + 012376' 275200 000002 SUBI SX,2 ;NO, MOVE UNDER OPERATOR AND INSERT + 012377' 200140 013102' INSRT2: MOVE SDEL,SYMBOL + 012400' 275140 000002 SUBI SDEL,2 + 012401' 313140 012727' CAMLE SDEL,FREE + 012402' 254000 012405' JRST INSRT3 + 012403' 260740 010014' PUSHJ PP,XCEEDS + 012404' 271140 002000 ADDI SDEL,2000 + 012405' 202140 013102' INSRT3: MOVEM SDEL,SYMBOL ;MAKE ROOM FOR A TWO WORD ENTRY + 012406' 505143 000002 HRLI SDEL,2(SDEL) + 012407' 251144 777776 BLT SDEL,-2(SX) ;PUSH EVERYONE DOWN TWO LOACTIONS + 012410' 350020 013102' AOS @SYMBOL ;INCREMENT THE SYMBOL COUNT + 012411' 607440 777776 TLNN RC,-2 ;NEED SPECIAL? + 012412' 602440 777776 TRNE RC,-2 ;LEFT OR RIGHT EXTERNAL? + 012413' 254000 012434' JRST INSRT5 ;YES, JUMP + 012414' 607300 777777 TLNN V,-1 ;SKIP IF V IS A 36BIT VALUE + 012415' 254000 012424' JRST INSRT4 ;JUMP, ITS A 18BIT VALUE + 012416' 350140 012727' AOS SDEL,FREE ;36BIT, SO GET A CELL FROM FREE CORE + 012417' 311140 013102' CAML SDEL,SYMBOL ;MORE CORE NEEDED? + 012420' 260740 010014' PUSHJ PP,XCEEDS ;YES + 012421' 541243 777777 HRRI ARG,-1(SDEL) ;POINTER TO ARG + 012422' 202305 000000 MOVEM V,0(ARG) ;36BIT VALUE TO FREE CORE + 012423' 665240 004000 TLOA ARG,PNTF ;NOTE THAT ARG IS APOINTER, NOT A 18BIT VALUE + + 012424' 540240 000006 INSRT4: HRR ARG,V ;18BIT VALUE TO ARG + 012425' 137440 003303' DPB RC,RCPNTR ;FIX RIGHT RELOCATION + 012426' 603440 000001 TLNE RC,1 + 012427' 661240 000002 TLO ARG,LELF ;FIX LEFT RELOCATION + 012430' 202244 000000 INSRT6: MOVEM ARG,0(SX) ;INSERT FLAGS AND VALUE. + 012431' 202004 777777 MOVEM AC0,-1(SX) ;INSERT SYMBOL NAME. + 012432' 260740 012455' PUSHJ PP,SRCHI ;INITILIAZE SRCHX + 012433' 254000 012203' JRST QSRCH ;EXIT THROUGH CREF + + 012434' 201140 000002 INSRT5: MOVEI SDEL,2 ;GET TWO CELLS FROM FREE CORE + 012435' 273140 012727' ADDB SDEL,FREE + 012436' 311140 013102' CAML SDEL,SYMBOL;MORE CORE NEEDED? + 012437' 260740 010014' PUSHJ PP,XCEEDS ;YES + 012440' 202443 777777 MOVEM RC,-1(SDEL) + 012441' 541243 777776 HRRI ARG,-2(SDEL) ;POINTER TO ARG + 012442' 202305 000000 MOVEM V,0(ARG) + 012443' 661240 000010 TLO ARG,SPTR ;SET SPECIAL POINTER, POINTS TO TWO CELLS + 012444' 254000 012430' JRST INSRT6 + MACRO V.10 PAGE 166 + USER-DEFINED SYMBOL SEARCH ROUTINES + + 012445' 275200 000002 REMOVE: SUBI SX,2 ;MOVE EVERYONE UP TWO LOCATIONS + 012446' 200004 000000 REMOV1: MOVE 0(SX) + 012447' 202004 000002 MOVEM 2(SX) ;OVERWRITE THE DELETED SYMBOL + 012450' 312200 013102' CAME SX,SYMBOL ;SKIP WHEN DONE + 012451' 364200 012446' SOJA SX,REMOV1 + 012452' 271200 000002 ADDI SX,2 + 012453' 202200 013102' MOVEM SX,SYMBOL + 012454' 370004 000000 SOS 0(SX) ;DECREMENT THE SYMBOL COUNT + + 012455' 201100 000000 SRCHI: MOVEI AC2,0 ;THIS CODE SETS UP SRCHX + 012456' 140120 013102' FAD AC2,@SYMBOL + 012457' 242100 777745 LSH AC2,-^D27 + 012460' 201040 001000 MOVEI AC1,1000 + 012461' 242042 777421 LSH AC1,-357(AC2) + 012462' 542040 013077' HRRM AC1,SRCHX + 012463' 242040 000001 LSH AC1,1 + 012464' 270040 013102' ADD AC1,SYMBOL + 012465' 506040 013077' HRLM AC1,SRCHX + 012466' 263740 000000 POPJ PP, ;SRCHX=XWD <SYMTBL+LENGTH/2>,LENGTH/4 + + MACRO V.10 PAGE 167 + USER-DEFINED SYMBOL SEARCH ROUTINES + + 012467' 137440 003303' UPDATE: DPB RC,RCPNTR ;FIX RIGHT RELOCATION + 012470' 603240 000010 TLNE ARG,SPTR ;SKIP IF THERE IS NO SPECIAL POINTER + 012471' 254000 012521' JRST UPDAT4 ;YES, USE THE TWO CELLS + 012472' 607440 777776 TLNN RC,-2 ;NEED TO CHANGE + 012473' 602440 777776 TRNE RC,-2 ;ANY CURRENT EXTERNS? + 012474' 254000 012525' JRST UPDAT5 ;YES ,JUMP + 012475' 621240 000002 TLZ ARG,LELF ;CLEAR LELF + 012476' 603440 000001 TLNE RC,1 ;LEFT RELOCATABLE? + 012477' 661240 000002 TLO ARG,LELF ;YES, SET THE FLAG + 012500' 603240 004000 TLNE ARG,PNTF ;WAS THERE A 36BIT VALUE? + 012501' 254000 012514' JRST UPDAT2 ;YES, USE IT. + 012502' 603300 777777 TLNE V,-1 ;NO,IS THERE A 36BIT VALUE? + 012503' 254000 012507' JRST UPDAT1 ;YES, GET A CELL + 012504' 540240 000006 HRR ARG,V ;NO, USE RH OF ARG + 012505' 202244 000000 UPDAT3: MOVEM ARG,0(SX) ;OVERWRITE THE ONE IN THE TABLE + 012506' 263740 000000 POPJ PP, ;AND EXIT + + 012507' 350140 012727' UPDAT1: AOS SDEL,FREE ;GET ONE CELL + 012510' 311140 013102' CAML SDEL,SYMBOL ;NEED MORE CORE? + 012511' 260740 010014' PUSHJ PP,XCEEDS ;YES + 012512' 541243 777777 HRRI ARG,-1(SDEL) ;POINTER TO ARG + 012513' 661240 004000 TLO ARG,PNTF ;AND NOTE IT. + 012514' 603240 001000 UPDAT2: TLNE ARG,EXTF ;IS THERE A EXTERNAL? + 012515' 254000 012505' JRST UPDAT3 ;YES, - JUST SAVE A LOCATION + 012516' 202244 000000 MOVEM ARG,0(SX) ;NO, OVERWRITE THE POINTER IN THE TABLE + 012517' 202305 000000 MOVEM V,0(ARG) ;STORE VALUE AS A 36BIT VALUE + 012520' 263740 000000 POPJ PP, ;AND EXIT + + 012521' 202244 000000 UPDAT4: MOVEM ARG,0(SX) ;WE HAVE TWO CELLS, WE USE THEM + 012522' 202305 000000 MOVEM V,0(ARG) ;SAVE AS 36BIT VALUE + 012523' 202445 000001 MOVEM RC,1(ARG) ;SAVE RELOCATION BITS + 012524' 263740 000000 POPJ PP, ;AND EXIT + + 012525' 201140 000002 UPDAT5: MOVEI SDEL,2 ;THERE IS A EXTERNAL + 012526' 273140 012727' ADDB SDEL,FREE ;SO WE NEED TWO LOACTIONS + 012527' 311140 013102' CAML SDEL,SYMBOL ;NEED MORE CORE? + 012530' 260740 010014' PUSHJ PP,XCEEDS ;YES + 012531' 202443 777777 MOVEM RC,-1(SDEL) ;SAVE RELOCATION BITS + 012532' 541243 777776 HRRI ARG,-2(SDEL) ;SAVE THE POINTER IN ARG + 012533' 202305 000000 MOVEM V,0(ARG) ;SAVE A 36BIT VALUE + 012534' 661240 000010 TLO ARG,SPTR ;SET SPECIAL PNTR FLAG + 012535' 621240 004000 TLZ ARG,PNTF ;CLEAR POINTER FLAG + 012536' 254000 012505' JRST UPDAT3 ;SAVE THE POINTER AND EXIT + + MACRO V.10 PAGE 168 + CONSTANTS + + SUBTTL CONSTANTS + + + MACRO V.10 PAGE 169 + PHASED CODE + + SUBTTL PHASED CODE + SUBTTL PHASED CODE + 012537' LSTFIL: BLOCK 1 + 012540' 400000 000000 SIXBIT /@/ ;SYMBOL TO STOP PRINTING + 012541' TAG: BLOCK 1 + 012542' 001300 400000 SIXBIT / + @/ + 012543' TABI: + 012543' 000221 104422 BYTE (7) 0, 11, 11, 11, 11 + 012544' SEQNO: BLOCK 1 + 012545' 201004 020100 ASCIZ / / + 012546' 201000 000000 + 012547' 000000 000014 BININI: EXP B + 012550' BINDEV: BLOCK 1 + 012551' 012655' 000000 XWD BINBUF,0 + 012552' 000000 000001 LSTINI: EXP AL + 012553' LSTDEV: BLOCK 1 + 012554' 012652' 000000 XWD LSTBUF,0 + IFN CCLSW,< + 012555' 000000 000016 NUNINI: EXP DMP + 012556' NUNDEV: BLOCK 1 + 012557' 000000 000000 XWD 0,0 + 012560' 000000 000001 RPGINI: EXP AL + 012561' RPGDEV: BLOCK 1 + 012562' 000000 013422' XWD 0,CTLBLK + > + 012563' 000000 000000 INDEVI: EXP A + 012564' INDEV: BLOCK 1 + 012565' 000000 012660' XWD 0,IBUF + 012566' 201004 020100 DBUF: ASCIZ / PAGE / + 012567' 201004 020100 + 012570' 201004 020100 + 012571' 201012 040616 + 012572' 425000 000000 + 012573' 046330 141644 VBUF: ASCIZ / MACRO / ;MUST BE LAST LOCATIONS IN BLOCK + 012574' 475000 000000 + 012575' BLOCK 3 ;ALLOW FOR LONG TITLE + + MACRO V.10 PAGE 170 + STORAGE CELLS + + SUBTTL STORAGE CELLS + + 012600' PASS1I: + + 012600' RP: BLOCK 1 + + IFE CCLSW,<CTIBUF: BLOCK 3 + CTOBUF: BLOCK 3 + > + 012601' IFN CCLSW,<CTLBUF: BLOCK <CTLSIZ+5>/5 + > + 012652' LSTBUF: BLOCK 3 + 012655' BINBUF: BLOCK 3 + 012660' IBUF: BLOCK 3 + 012663' IFN CCLSW,<NUNDIR:> + 012663' LSTDIR: BLOCK 4 + 012667' BINDIR: BLOCK 4 + 012673' INDIR: BLOCK 4 + + 012677' ACDELX: ;LEFT HALF + 012677' BLKTYP: BLOCK 1 ;RIGHT HALF + + 012700' COUTX: BLOCK 1 + 012701' COUTY: BLOCK 1 + 012702' COUTP: BLOCK 1 + 012703' COUTRB: BLOCK 1 + 012704' COUTDB: BLOCK ^D18 + + 012726' ERRCNT: BLOCK 1 + 012727' FREE: BLOCK 1 + IFN RENTSW,<HIGH1: BLOCK 1 + HISNSW: BLOCK 1 + SVTYP3: BLOCK 1 + HMIN: BLOCK 1 ;START OF HIGH SEG. IN TWO SEG. PROG.> + 012730' IFBLK: BLOCK .IFBLK + 012754' IFBLKA: BLOCK .IFBLK + 013000' LADR: BLOCK 1 + 013001' NCOLLS: BLOCK 1 + 013002' LIMBO: BLOCK 1 + 013003' LBUFP: BLOCK 1 + 013004' LBUF: BLOCK <.CPL+5>/5 + 013026' BLOCK 1 + 013027' VARHD: BLOCK 1 + 013030' VARHDX: BLOCK 1 + + 013031' LITAB: BLOCK 1 + 013032' LITABX: BLOCK 1 + 013033' BLOCK 1 + 013034' LITHD: BLOCK 1 + 013035' LITHDX: BLOCK 1 + 013036' LITCNT: BLOCK 1 + 013037' LITNUM: BLOCK 1 + + MACRO V.10 PAGE 170-1 + STORAGE CELLS + + 013040' LOOKX: BLOCK 1 + 013041' NEXT: BLOCK 1 + 013042' OUTSW: BLOCK 1 + 013043' PDP: BLOCK 1 + 013044' RECCNT: BLOCK 1 + 013045' SAVBLK: BLOCK RC + 013056' SAVERC: BLOCK 1 + 013057' SBUF: BLOCK .SBUF/5 + 013077' SRCHX: BLOCK 1 + 013100' SUBTTX: BLOCK 1 + 013101' SVSYM: BLOCK 1 + 013102' SYMBOL: BLOCK 1 + 013103' SYMTOP: BLOCK 1 + + 013104' STPX: BLOCK 1 + 013105' STPY: BLOCK 1 + 013106' STCODE: BLOCK .STP + 013156' STOWRC: BLOCK .STP + + 013226' TABP: BLOCK 1 + 013227' TCNT: BLOCK 1 ;COUNT OF CHARS. LEFT IN TBUF + 013230' TBUF: BLOCK .TBUF/5 + 013250' DEVBUF: BLOCK 6 ;STORE NAME.EXT CREATION DATE AND TIME + 013256' TYPERR: BLOCK 1 + 013257' IONSYM: BLOCK 1 ;-1 SUPRESS LISTING OF SYMBOLS + 013260' PRGPTR: BLOCK 1 ;POINTER TO CHAIN OF PRGEND BLOCKS + 013261' ENTERS: BLOCK 1 ;-1 WHEN ENTERS HAVE BEEN DONE + IFN UNIVR,<UNIVSN: BLOCK 1 ;-1 WHEN A UNIVERSAL SEEN> + + MACRO V.10 PAGE 171 + STORAGE CELLS + + 013262' PASS2I: + + 013262' ABSHI: BLOCK 1 + 013263' HIGH: BLOCK 1 + IFN RENTSW,<HHIGH: BLOCK 1 ;SAVE BREAK OF HIGH SEG. IN TWO SEG PROG.> + 013264' ACDEVX: BLOCK 1 + 013265' CPL: BLOCK 1 + 013266' CTLSAV: BLOCK 1 + 013267' CTLS1: BLOCK 1 + 013270' EXTPNT: BLOCK 1 + 013271' INTENT: BLOCK 1 + 013272' INREP: BLOCK 1 + 013273' INDEF: BLOCK 1 + 013274' INTXT: BLOCK 1 + 013275' INCND: BLOCK 1 + 013276' CALNAM: BLOCK 1 + 013277' CALPG: BLOCK 1 + 013300' CALSEQ: BLOCK 1 + 013301' DEFPG: BLOCK 1 + 013302' DEFSEQ: BLOCK 1 + 013303' LITPG: BLOCK 1 + 013304' LITSEQ: BLOCK 1 + 013305' REPPG: BLOCK 1 + 013306' REPSEQ: BLOCK 1 + 013307' TXTPG: BLOCK 1 + 013310' TXTSEQ: BLOCK 1 + 013311' CNDPG: BLOCK 1 + 013312' CNDSEQ: BLOCK 1 + 013313' IRPCNT: BLOCK 1 + 013314' IRPARG: BLOCK 1 + 013315' IRPARP: BLOCK 1 + 013316' IRPCF: BLOCK 1 + 013317' IRPPOI: BLOCK 1 + 013320' IRPSW: BLOCK 1 + 013321' LITLVL: BLOCK 1 + 013322' LITLBL: BLOCK 1 ;NAME OF LABEL DEFINED INSIDE A LITERAL + + 013323' ASGBLK: BLOCK 1 + 013324' LOCBLK: BLOCK 1 + + 013325' LOCA: BLOCK 1 + 013326' LOCO: BLOCK 1 + 013327' RELLOC: BLOCK 1 + 013330' ABSLOC: BLOCK 1 + 013331' LPP: BLOCK 1 + 013332' MODA: BLOCK 1 + 013333' MODLOC: BLOCK 1 + 013334' MODO: BLOCK 1 + 013335' IFN CCLSW,<OTBUF: BLOCK 2> + 013337' OUTSQ: BLOCK 2 + 013341' PAGEN.: BLOCK 1 + 013342' PPTEMP: BLOCK 1 + 013343' PPTMP1: BLOCK 1 + MACRO V.10 PAGE 171-1 + STORAGE CELLS + + 013344' PPTMP2: BLOCK 1 + + 013345' REPCNT: BLOCK 1 + 013346' REPEXP: BLOCK 1 + 013347' REPPNT: BLOCK 1 + 013350' RPOLVL: BLOCK 1 + 013351' R1BCNT: BLOCK 1 + 013352' R1BCHK: BLOCK 1 + 013353' R1BBLK: BLOCK .R1B + 013375' R1BLOC: BLOCK 1 + 013376' RIMLOC: BLOCK 1 + 013377' TAGINC: BLOCK 1 + 013400' VECREL: BLOCK 1 + 013401' VECTOR: BLOCK 1 + 013402' .TEMP: BLOCK 1 ;TEMPORARY STORAGE + IFN UNIVR,<UNISCH: BLOCK .UNIV ;SEARCH TABLE FOR UNIVERSALS> + 013403' SQFLG: BLOCK 1 + 013404' ARGF: BLOCK 1 + 013405' MACENL: BLOCK 1 + 013406' MACLVL: BLOCK 1 + 013407' MACPNT: BLOCK 1 + 013410' WWRXX: BLOCK 1 + 013411' RCOUNT: BLOCK 1 ;COUNT OF WORDS STILL TO READ IN LEAF + 013412' WCOUNT: BLOCK 1 ;COUNT OF WORDS STILL FREE IN LEAF + 013413' PASS2Z: ;ONLY CLEAR TO HERE ON PRGEND + 013413' LSTSYM: BLOCK 1 + 013414' PAGENO: BLOCK 1 + 013415' SEQNO2: BLOCK 1 + 013416' PASS2X: + + MACRO V.10 PAGE 172 + MULTI-ASSEMBLY STORAGE CELLS + + SUBTTL MULTI-ASSEMBLY STORAGE CELLS + + 013416' LSTPGN: BLOCK 1 + 013417' HDAS: BLOCK 1 + 013420' IFN CCLSW,<EXTMP: BLOCK 1 ;HOLDS EXT OF COMMAND FILE (RH) + 013421' SAVFF: BLOCK 1 + 013422' CTLBLK: BLOCK 3 + 013425' CTIBUF: BLOCK 3 + 013430' CTOBUF: BLOCK 3> + 013433' MACSIZ: BLOCK 1 ;INITIAL SIZE OF LOW SEG + IFN UNIVR,< + UNISIZ: BLOCK 1 ;TOP OF BUFFERS AND STACKS + UNITOP: BLOCK 1 ;TOP OF UNIVERSAL SYMBOL TABLE + UNIVNO: BLOCK 1 ;NUMBER OF UNIVERSALS SEEN + UNITBL: BLOCK .UNIV ;TABLE OF UNIVERSAL NAMES + UNIPTR: BLOCK .UNIV ;TABLE OF SYMBOL POINTERS + UNISHX: BLOCK .UNIV ;TABLE OF SRCHX POINTERS> + 013434' VAR ;CLEAR VARIABLES + + 013434' JOBFFI: BLOCK 203*NUMBUF+1 ;INPUT BUFFER PLUS ONE + + 006370' END BEG + 014043' 554140 012664' + 014044' 302140 634166 + 014045' 254000 007707' + 014046' 205140 445560 + 014047' 254000 000027' + 014050' 565764 004556 + 014051' 654600 435762 + 014052' 450046 576200 + 014053' 545156 534147 + 014054' 454000 000000 + 014055' 561440 014050' + 014056' 254000 007714' + 014057' 272330 144634 + 014060' 360300 000005 + 014061' 250407 001447' + 014062' 777777 777777 + 014063' 260740 006335' + 014064' 261740 000007 + 014065' 260740 000354' + 014066' 262740 000007 + 014067' 306300 000004 + 014070' 254000 000750' + 014071' 306340 000074 + 014072' 254000 000750' + 014073' 336000 000000 + 014074' 664600 200000 + 014075' 476000 000011 + 014076' 254000 000750' + 014077' 204500 000000 + 014100' 000000 000000 + 014101' 200000 000000 + MACRO V.10 PAGE 172-1 + MULTI-ASSEMBLY STORAGE CELLS + + 014102' 660600 002000 + 014103' 321640 001170' + 014104' 254000 001154' + 014105' 060300 000003 + 014106' 350700 013004' + 014107' 202400 012537' + 014110' 201400 012537' + 014111' 260740 003001' + 014112' 201340 000040 + 014113' 260740 010325' + 014114' 200400 013414' + 014115' 254000 001723' + 014116' 502030 742500 + 014117' 000000 000000 + 014120' 202400 013416' + 014121' 201400 014116' + 014122' 260740 002774' + 014123' 200340 013414' + 014124' 260740 002765' + 014125' 260740 010316' + 014126' 254000 001724' + 014127' 202433 040610 + 014130' 462452 553234 + 014131' 476410 546400 + 014132' 440700 014127' + 014133' 440700 013004' + 014134' 350700 012543' + 014135' 655641 636351 + 014136' 475645 441400 + 014137' 444546 515645 + 014140' 440041 630051 + 014141' 460045 706445 + 014142' 625641 540040 + 014143' 516631 541236 + 014144' 461012 440604 + 014145' 462120 000000 + 014146' 202200 012730' + 014147' 254000 002300' + 014150' 440700 013230' + 014151' 440200 012703' + 014152' 777761 003110' + 014153' 316000 013262' + 014154' 552100 013262' + 014155' 254000 003135' + 014156' 000000 007666' + 014157' 502451 743644 + 014160' 406321 100000 + 014161' 201400 014157' + 014162' 260740 002774' + 014163' 201400 013230' + 014164' 260740 002774' + 014165' 254000 010316' + 014166' 606257 476241 + MACRO V.10 PAGE 172-2 + MULTI-ASSEMBLY STORAGE CELLS + + 014167' 550042 624541 + 014170' 530051 630040 + 014171' 524400 013263' + 014172' 254000 003220' + 014173' 414263 546564 + 014174' 450042 624541 + 014175' 530051 630040 + 014176' 530043 576245 + 014177' 006563 454440 + 014200' 013262' 013263' + 014201' 260740 010470' + 014202' 661240 002000 + 014203' 254000 003606' + 014204' 321640 003743' + 014205' 627240 002000 + 014206' 254000 003743' + 014207' 406244 000000 + 014210' 254000 003726' + 014211' 550000 013326' + 014212' 250000 013330' + 014213' 254000 004125' + 014214' 550000 013326' + 014215' 250000 013327' + 014216' 254000 004125' + 014217' 313300 013262' + 014220' 202300 013262' + 014221' 263740 000000 + 014222' 440700 013335' + 014223' 064240 000000 + 014224' 620600 040000 + 014225' 263740 000000 + 014226' 250017 777777 + 014227' 603000 777000 + 014230' 660600 200000 + 014231' 250017 777777 + 014232' 254000 004446' + 014233' 300617 000000 + 014234' 336000 000000 + 014235' 660600 200000 + 014236' 364000 002665' + 014237' 300600 000005 + 014240' 140601 001447' + 014241' 000001 000000 + 014242' 606247 455644 + 014243' 004562 625762 + 014244' 004000 000000 + 014245' 261140 000005 + 014246' 344340 005310' + 014247' 336000 013403' + 014250' 254000 005326' + 014251' 261740 000007 + 014252' 201340 000047 + 014253' 260740 006262' + MACRO V.10 PAGE 172-3 + MULTI-ASSEMBLY STORAGE CELLS + + 014254' 262740 000007 + 014255' 402000 013403' + 014256' 254000 005326' + 014257' 067760 400000 + 014260' 003617 074362 + 014261' 003617 074360 + 014262' 271406 030140 + 014263' 456262 576200 + 014264' 675051 544500 + 014265' 457060 415644 + 014266' 515647 400000 + 014267' 410300 000137 + 014270' 220600 000137 + 014271' 301100 000137 + 014272' 260700 012574' + 014273' 012600' 012601' + 014274' 440700 012601' + 014275' 456262 576200 + 014276' 624541 445156 + 014277' 470043 575555 + 014300' 415644 004651 + 014301' 544540 000000 + 014302' 561440 014275' + 014303' 254000 007714' + 014304' 056200 000000 + 014305' 263740 000000 + 014306' 061200 020000 + 014307' 254000 014302' + 014310' 260740 000066' + 014311' 047000 000012 + 014312' 350000 013423' + 014313' 211440 000005 + 014314' 272440 013424' + 014315' 254000 006546' + 014316' 435755 554156 + 014317' 440054 515645 + 014320' 006457 570054 + 014321' 575647 400000 + 014322' 326140 006615' + 014323' 205140 434354 + 014324' 254000 006605' + 014325' 436245 460000 + 014326' 013426' 013266' + 014327' 466030 351236 + 014330' 351000 000000 + 014331' 047140 000004 + 014332' 603140 000004 + 014333' 254000 007125' + 014334' 332100 012673' + 014335' 202100 012663' + 014336' 254000 007125' + 014337' 047140 000004 + 014340' 603140 000004 + MACRO V.10 PAGE 172-4 + MULTI-ASSEMBLY STORAGE CELLS + + 014341' 254000 007133' + 014342' 332100 012673' + 014343' 202100 012667' + 014344' 254000 007133' + 014345' 455644 005746 + 014346' 006041 636300 + 014347' 214000 000000 + 014350' 545741 440064 + 014351' 504500 564570 + 014352' 640046 515445 + 014353' 400000 000000 + 014354' 306340 000032 + 014355' 047000 000012 + 014356' 254000 007227' + 014357' 435755 554156 + 014360' 440045 626257 + 014361' 624000 000000 + 014362' 440400 007611' + 014363' 270407 007570' + 014364' 375657 004556 + 014365' 440063 644164 + 014366' 455545 566400 + 014367' 455643 576556 + 014370' 644562 454400 + 014371' 575600 515660 + 014372' 656400 465154 + 014373' 454000 000000 + 014374' 515600 545164 + 014375' 456241 544000 + 014376' 014374' 013303' + 014377' 515600 444546 + 014400' 515645 400000 + 014401' 014377' 013301' + 014402' 515600 644570 + 014403' 644000 000000 + 014404' 014402' 013307' + 014405' 515600 435756 + 014406' 445164 515756 + 014407' 415400 576200 + 014410' 624560 454164 + 014411' 400000 000000 + 014412' 014405' 013305' + 014413' 515600 435756 + 014414' 445164 515756 + 014415' 415440 000000 + 014416' 014413' 013311' + 014417' 515600 554143 + 014420' 625700 434154 + 014421' 544000 000000 + 014422' 014417' 013277' + 014423' 014353' 013414' + 014424' 565764 004166 + 014425' 415154 414254 + MACRO V.10 PAGE 172-5 + MULTI-ASSEMBLY STORAGE CELLS + + 014426' 454000 000000 + 014427' 000001 014424' + 014430' 102011 005154 + 014431' 544547 415400 + 014432' 465154 450056 + 014433' 415545 400000 + 014434' 102011 004651 + 014435' 544500 674163 + 014436' 005657 640046 + 014437' 576556 444000 + 014440' 102111 005657 + 014441' 004451 624543 + 014442' 645762 710046 + 014443' 576200 606257 + 014444' 524543 641560 + 014445' 625747 624155 + 014446' 554562 005665 + 014447' 554245 624000 + 014450' 102211 006062 + 014451' 576445 436451 + 014452' 575600 464151 + 014453' 546562 454000 + 014454' 102311 004651 + 014455' 544500 674163 + 014456' 004245 515647 + 014457' 005557 445146 + 014460' 514544 400000 + 014461' 102411 006245 + 014462' 564155 450046 + 014463' 515445 005641 + 014464' 554500 415462 + 014465' 454144 710045 + 014466' 705163 646340 + 014467' 102511 005154 + 014470' 544547 415400 + 014471' 634561 654556 + 014472' 434500 574600 + 014473' 656557 634000 + 014474' 102611 004241 + 014475' 440065 464400 + 014476' 576200 424144 + 014477' 006251 424000 + 014500' 102711 005657 + 014501' 640041 006341 + 014502' 660046 515445 + 014503' 400000 000000 + 014504' 102120 110056 + 014505' 576400 455657 + 014506' 654750 004357 + 014507' 624540 000000 + 014510' 102121 110044 + 014511' 456651 434500 + 014512' 565764 004166 + MACRO V.10 PAGE 172-6 + MULTI-ASSEMBLY STORAGE CELLS + + 014513' 415154 414254 + 014514' 454000 000000 + 014515' 102122 110056 + 014516' 570063 654350 + 014517' 004445 665143 + 014520' 454000 000000 + 014521' 102123 110056 + 014522' 576400 646757 + 014523' 006245 545743 + 014524' 006245 471600 + 014525' 434160 414251 + 014526' 545164 714000 + 014527' 102124 110056 + 014530' 570062 575755 + 014531' 005762 006165 + 014532' 576441 004570 + 014533' 434545 444544 + 014534' 400000 000000 + 014535' 102125 110067 + 014536' 625164 450054 + 014537' 574353 004562 + 014540' 625762 400000 + 014541' 102126 110056 + 014542' 576400 455657 + 014543' 654750 005557 + 014544' 565164 576200 + 014545' 644142 544500 + 014546' 636041 434540 + 014547' 102127 110060 + 014550' 416264 514154 + 014551' 004154 545743 + 014552' 416451 575600 + 014553' 575654 714000 + 014554' 102220 110042 + 014555' 545743 530056 + 014556' 576400 466245 + 014557' 450057 560041 + 014560' 545457 434164 + 014561' 515756 400000 + 014562' 102221 110043 + 014563' 415607 640063 + 014564' 656045 626345 + 014565' 444500 104556 + 014566' 644562 110041 + 014567' 560045 705163 + 014570' 645156 470044 + 014571' 516245 436457 + 014572' 627140 000000 + 014573' 102222 110043 + 014574' 415607 640044 + 014575' 455445 644500 + 014576' 106245 564155 + 014577' 451100 410056 + MACRO V.10 PAGE 172-7 + MULTI-ASSEMBLY STORAGE CELLS + + 014600' 575615 455560 + 014601' 647100 445162 + 014602' 454364 576271 + 014603' 400000 000000 + 014604' 102223 110063 + 014605' 464400 565764 + 014606' 004657 655644 + 014607' 400000 000000 + 014610' 102224 110063 + 014611' 454162 435000 + 014612' 545163 640045 + 014613' 556064 714000 + 014614' 102225 110063 + 014615' 464400 564563 + 014616' 644544 006457 + 014617' 570044 454560 + 014620' 547140 000000 + 014621' 102226 110056 + 014622' 571543 624541 + 014623' 644500 575600 + 014624' 465762 006360 + 014625' 454351 465145 + 014626' 440060 416450 + 014627' 400000 000000 + 014630' 103711 005457 + 014631' 575365 601400 + 014632' 455664 456214 + 014633' 005762 006245 + 014634' 564155 450045 + 014635' 626257 624000 + 014636' 160000 004000 + 014637' 322140 010003' + 014640' 242140 777772 + 014641' 434140 014636' + 014642' 254000 010005' + 014643' 515663 654646 + 014644' 514351 455664 + 014645' 004357 624540 + 014646' 604460 005766 + 014647' 456246 545767 + 014650' 140064 627100 + 014651' 176040 000000 + 014652' 575600 604147 + 014653' 454000 000000 + 014654' 545156 454000 + 014655' 000001 000001 + 014656' 576564 606564 + 014657' 006762 516445 + 014660' 155457 435300 + 014661' 456262 576200 + 014662' 444566 514345 + 014663' 400000 000000 + 014664' 576564 606564 + MACRO V.10 PAGE 172-8 + MULTI-ASSEMBLY STORAGE CELLS + + 014665' 004441 644100 + 014666' 456262 576200 + 014667' 444566 514345 + 014670' 400000 000000 + 014671' 576564 606564 + 014672' 004350 454353 + 014673' 636555 005762 + 014674' 006041 625164 + 014675' 710045 626257 + 014676' 620044 456651 + 014677' 434540 000000 + 014700' 576564 606564 + 014701' 006165 576441 + 014702' 004570 434545 + 014703' 444544 005756 + 014704' 004445 665143 + 014705' 454000 000000 + 014706' 576564 606564 + 014707' 004254 574353 + 014710' 006457 570054 + 014711' 416247 450044 + 014712' 456651 434540 + 014713' 201004 020101 + 014714' 005156 606564 + 014715' 006050 716351 + 014716' 434154 004556 + 014717' 440057 460064 + 014720' 416045 004445 + 014721' 665143 454000 + 014722' 555756 516457 + 014723' 620044 456445 + 014724' 436445 440063 + 014725' 574664 674162 + 014726' 450051 566065 + 014727' 640045 626257 + 014730' 620044 456651 + 014731' 434540 000000 + 014732' 515660 656400 + 014733' 444164 410045 + 014734' 626257 620044 + 014735' 456651 434540 + 014736' 515660 656400 + 014737' 435045 435363 + 014740' 655500 576200 + 014741' 604162 516471 + 014742' 004562 625762 + 014743' 004445 665143 + 014744' 454000 000000 + 014745' 515660 656400 + 014746' 425457 435300 + 014747' 645757 005441 + 014750' 624745 004445 + 014751' 665143 454000 + MACRO V.10 PAGE 172-9 + MULTI-ASSEMBLY STORAGE CELLS + + +NO ERRORS DETECTED + +PROGRAM BREAK IS 014752 + +12K CORE USED + MACRO V.10 PAGE 173 + SYMBOL TABLE + +M 002115 +A 000000 SPD +ABSHI 013262' +ABSLOC 013330' +AC0 000000 SPD +AC1 000001 +AC2 000002 +ACDEL 000004 SPD +ACDELX 012677' +ACDEV 000001 SPD +ACDEVX 013264' +ACEXT 000003 SPD +ACFILE 000002 SPD +ACPNTR 000005 SPD +ACPPN 000004 SPD +ADDF 100000 SPD +AL 000001 SPD +ANGLB 000653' +ANGLB1 000664' +ANGLB2 000665' +APRENB 047000 000016 +ARG 000005 +ARGF 013404' +ARPGSW 100000 SPD +ASC10 004516' +ASC20 004534' +ASC30 004540' +ASC50 004551' +ASC55 004550' +ASC60 004553' +ASCII0 004515' +ASGBLK 013323' +ASSEM1 000104' +ASSEM2 000115' +ASSEMB 000077' +ASSIG1 004037' +ASSIG2 004065' +ASSIG3 004073' +ASSIG5 004047' +ASSIG6 004053' +ASSIG7 004027' +ASSIGN 004023' +ATOM 000325' +ATOM1 000327' +B 000014 SPD +BEG 006370' +BIN 000001 SPD +BINBUF 012655' +BINDEV 012550' +BINDIR 012667' +BININI 012547' +BINSE2 006657' +BINSET 006620' + MACRO V.10 PAGE 173-1 + SYMBOL TABLE + +BLKTYP 012677' +BLOCK0 003326' +BLOCK1 003333' +BLOCK2 003335' +BOUT 002434' +BOUT20 002454' +BOUT30 002470' +BOUT3I 002511' +BOUT40 002530' +BOUT50 002555' +BOUT60 002575' +BOUT70 002564' +BOUT80 002577' +BYPAS1 004452' +BYPAS2 004453' +BYPASS 004452' +BYTAB 007611' +BYTE0 004631' +BYTE1 004637' +BYTE2 004646' +BYTE3 004655' +C 000007 +CALLM 005511' +CALNAM 013276' +CALPG 013277' +CALSEQ 013300' +CC 741000 000000 +CC 000000 +CCLSW 000001 SPD +CELL 000354' +CELL1 000361' +CELLSF 000353' +CHAR 000002 SPD +CHARAC 001406' +CHARAX 001434' +CHARL 001436' +CHARL1 001444' +CLSC3 012274' +CLSCR1 012307' +CLSCR2 012276' +CLSCRF 012274' +CNDPG 013311' +CNDSEQ 013312' +COMSW 013402' +CONBIT 020000 SPD +CORE 047000 000011 +COUT 002640' +COUTD 002645' +COUTD2 002652' +COUTDB 012704' +COUTI 002657' +COUTP 012702' +COUTRB 012703' + MACRO V.10 PAGE 173-2 + SYMBOL TABLE + +COUTX 012700' +COUTY 012701' +CPEEK 005371' +CPEEK1 005400' +CPL 013265' +CPOPJ 003360' +CPOPJ1 003357' +CR 000015 SPD +CREF 012221' +CREF2 012251' +CREF3 012241' +CREFSW 002000 SPD +CRFHD1 012272' +CRFHDR 012264' +CRLF 007765' +CRPGSW 001000 SPD +CS 000010 +CSTAT 001447' +CTIBUF 013425' +CTL 000000 SPD +CTL2 000004 SPD +CTLBLK 013422' +CTLBUF 012601' +CTLS1 013267' +CTLSAV 013266' +CTLSET 006457' +CTLSIZ 000310 SPD +CTOBUF 013430' +CV 000000 SPD +DATE 047000 000014 +DATOUT 010440' +DBUF 012566' +DCFSW 000040 SPD +DDTOUT 047000 000003 +DECERR 006364' +DEF02 005224' +DEF10 005241' +DEF12 005251' +DEF20 005254' +DEF24 005267' +DEF25 005317' +DEF26 005310' +DEF30 005326' +DEF31 005327' +DEF32 005330' +DEF33 005333' +DEF35 005363' +DEF36 005355' +DEF40 005406' +DEF42 005410' +DEF44 005427' +DEF46 005431' +DEF48 005446' + MACRO V.10 PAGE 173-3 + SYMBOL TABLE + +DEF50 005451' +DEF51 005456' +DEF70 005462' +DEF80 005467' +DEF81 005474' +DEFCRS 000040 SPD +DEFIN0 005211' +DEFPG 013301' +DEFSEQ 013302' +DELETE 000066' +DEPHA0 004015' +DEVBUF 013250' +DEVCHR 047000 000004 +DEVICE 007267' +DEVNAM 007274' +DIRBIT 000004 SPD +DISBIT 002000 SPD +DMP 000016 SPD +DMPBIN 010131' +DMPLST 010140' +DNC 002765' +DP1 010063' +DSEND 006211' +DSKBIT 200000 SPD +DSTOW 002712' +DTAB 010454' +DTABIT 000100 SPD +EINIT 007700' +END0 003037' +ENDP2 003127' +ENDP2A 003173' +ENDP2B 003220' +ENDP2D 003201' +ENDP2Q 003137' +ENDP2W 003135' +ENTERS 013261' +ENTF 000200 SPD +ENTRDN 007136' +EOL 000033 SPD +EOT 007176' +EOUT 002121' +EOUT1 002124' +EOUT2 002132' +EOUT3 002141' +EOUT4 002151' +ER 000014 SPD +ERRA 040000 SPD +ERRAX 003311' +ERRBIT 740000 SPD +ERRCB 007704' +ERRCF 007707' +ERRCL 007702' +ERRCM 007321' + MACRO V.10 PAGE 173-4 + SYMBOL TABLE + +ERRCNT 012726' +ERRD 020000 SPD +ERRE 000040 SPD +ERRFIN 007714' +ERRL 010000 SPD +ERRLST 010146' +ERRM 000020 SPD +ERRMS1 007666' +ERRMS2 007671' +ERRMS3 007674' +ERRN 000400 SPD +ERRNE 007633' +ERRNE0 007634' +ERRNE1 007644' +ERRNE2 007656' +ERRNE3 007663' +ERRO 000200 SPD +ERRORS 777760 SPD +ERRP 000100 SPD +ERRQ 200000 SPD +ERRQSW 000010 SPD +ERRR 004000 SPD +ERRTYP 007711' +ERRU 002000 SPD +ERRV 001000 SPD +ERRX 100000 SPD +EVADR 004403' +EVAL10 003745' +EVALC3 001064' +EVALCM 001057' +EVALEX 001070' +EVALHA 001056' +EVALXQ 003757' +EVATOM 001073' +EVERRU 001150' +EVERRZ 001147' +EVGETD 001170' +EVMAC 001107' +EVNUM 001175' +EVOP 001122' +EVOPD 001132' +EVOPS 001126' +EVOPX 001145' +EVPUSH 001205' +EVTSTR 001164' +EVTSTS 001152' +EVXCT 001212' +EVXCT1 001227' +EXIT 047000 000012 +EXPRES 004465' +EXTER0 003715' +EXTER1 003717' +EXTER2 003726' + MACRO V.10 PAGE 173-5 + SYMBOL TABLE + +EXTER3 003743' +EXTER4 003741' +EXTF 001000 SPD +EXTMP 013420' +EXTPNT 013270' +FF 000014 SPD +FINIS 007014' +FLDSW 400000 SPD +FR 000015 +FREE 012727' +FSNSW 100000 SPD +FTDISK 000001 SPD +GCHAR 006255' +GCHARQ 006254' +GETCHR 001354' +GETCS 001375' +GETCS1 001377' +GETCS2 001374' +GETDE1 000434' +GETDE2 000444' +GETDE3 000436' +GETDEL 000433' +GETDS 006151' +GETDS1 006203' +GETE 006404' +GETED 006410' +GETIOC 007227' +GETIT 005064' +GETSE1 006761' +GETSE2 006774' +GETSET 006740' +GETSY1 001046' +GETSY2 001047' +GETSY3 001050' +GETSYM 001034' +GETTOP 003444' +GETU 006416' +GETV 006424' +GOSET 006540' +GOSET1 006546' +GOSET2 006570' +GOTEND 007165' +GTSTOW 002731' +HDAS 013417' +HIGH 013263' +HIGHQ 004146' +HIGHQ1 004146' +HISEG0 003360' +HLPMES 007370' +HOUT 002626' +HT 000011 SPD +IB 000013 SPD +IBUF 012660' + MACRO V.10 PAGE 173-6 + SYMBOL TABLE + +IF 003512' +IFB0 003543' +IFB1 003544' +IFB2 003564' +IFB3 003563' +IFBLK 012730' +IFBLKA 012754' +IFCL 003630' +IFCLR 003647' +IFCLR1 003656' +IFDEF0 003600' +IFEX1 003526' +IFEX2 003664' +IFEXIT 003525' +IFIDN0 003610' +IFPASS 003540' +IFPOP 003520' +IFSET 003521' +IFXCT 003522' +IIISW 000000 SPD +INCND 013275' +INDEF 013273' +INDEV 012564' +INDEVI 012563' +INDIR 012673' +INDSW 020000 SPD +INHERE 000017' +INREP 013272' +INSERQ 012364' +INSERT 012366' +INSERZ 012365' +INSET 007027' +INSET1 007047' +INSET2 007064' +INSET3 007065' +INSET4 007077' +INSETI 007143' +INSRT1 012374' +INSRT2 012377' +INSRT3 012405' +INSRT4 012424' +INSRT5 012434' +INSRT6 012430' +INTENT 013271' +INTER0 003677' +INTER1 003700' +INTER3 003710' +INTF 000400 SPD +INTXT 013274' +INZ 003267' +IO 000014 +IOBKTL 040000 SPD +IOCREF 000400 SPD + MACRO V.10 PAGE 173-7 + SYMBOL TABLE + +IODERR 200000 SPD +IODTER 100000 SPD +IOENDL 000200 SPD +IOIMPM 400000 SPD +IOIOPF 000020 SPD +IOMAC 010000 SPD +IOMSTR 200000 SPD +IONCRF 002000 SPD +IONSYM 013257' +IOP 004352' +IOPAGE 000100 SPD +IOPALL 004000 SPD +IOPROG 040000 SPD +IORPTC 000004 SPD +IORSET 003322' +IOSALL 000001 SPD +IOSCR 000001 SPD +IOSET 003315' +IOTLSN 000002 SPD +IOWD0 004617' +IRP0 005777' +IRP10 006001' +IRP20 006041' +IRPARG 013314' +IRPARP 013315' +IRPCF 013316' +IRPCNT 013313' +IRPEND 006131' +IRPPOI 013317' +IRPPOP 006135' +IRPSE1 006074' +IRPSE2 006103' +IRPSE3 006113' +IRPSE4 006116' +IRPSET 006060' +IRPSW 013320' +JOB41 000057' EXT +JOBAPR 006741' EXT +JOBDDT 000000 EXT +JOBERR 007724' EXT +JOBFF 007067' EXT +JOBFFI 013434' +JOBREL 010022' EXT +JOBS41 000122 INT +JOBSA 006611' EXT +JOBSYM 000000 EXT +JOBVER 000137 SPD +JUMP1 321640 000000 +JUMP2 325640 000000 +JUMPAD 321600 000000 +JUMPCM 321400 000000 +JUMPNC 325400 000000 +JUMPOC 325600 000000 + MACRO V.10 PAGE 173-8 + SYMBOL TABLE + +LABEL 000244' +LABEL0 000257' +LABEL1 000272' +LABEL2 000301' +LABEL3 000304' +LABEL4 000310' +LABEL5 000312' +LABEL6 000276' +LABEL7 000314' +LADR 013000' +LBUF 013004' +LBUFP 013003' +LELF 000002 SPD +LENGTH 000004 +LETTE1 000401' +LETTE2 000405' +LETTE3 000407' +LETTE4 000426' +LETTER 000400' +LF 000012 SPD +LIMBO 013002' +LIT0 003365' +LIT1 003367' +LIT20 003377' +LIT20A 003407' +LIT21 003410' +LIT22 003422' +LIT24 003433' +LITAB 013031' +LITABX 013032' +LITCNT 013036' +LITF 200000 SPD +LITHD 013034' +LITHDX 013035' +LITI 003437' +LITLBL 013322' +LITLVL 013321' +LITNUM 013037' +LITPG 013303' +LITSEQ 013304' +LLUKP1 002272' +LLUKP2 002267' +LLUKP3 002301' +LLUKP4 002311' +LLUKP6 002306' +LLUKP7 002300' +LLUKUP 002263' +LNSSW 000000 SPD +LOADSW 000020 SPD +LOC0 004114' +LOC01 004125' +LOC10 004133' +LOCA 013325' + MACRO V.10 PAGE 173-9 + SYMBOL TABLE + +LOCBLK 013324' +LOCO 013326' +LOOKL 003030' +LOOKUP 003025' +LOOKX 013040' +LOUT1 002166' +LOUT10 002211' +LOUT11 002252' +LOUT15 002222' +LOUT30 002253' +LOUT60 002260' +LOUT64 002262' +LPP 013331' +LPTBIT 040000 SPD +LPTSW 000002 SPD +LPTWID 000170 SPD +LST 000003 SPD +LSTBUF 012652' +LSTDEV 012553' +LSTDIR 012663' +LSTFIL 012537' +LSTINI 012552' +LSTPGN 013416' +LSTSE1 006666' +LSTSE2 006700' +LSTSE3 006734' +LSTSE4 007125' +LSTSE5 007127' +LSTSET 006665' +LSTSYM 013413' +M 006436' +MAC10 005541' +MAC14 005554' +MAC14A 005563' +MAC15 005572' +MAC16 005573' +MAC20 005602' +MAC21 005604' +MAC21A 005606' +MAC21B 005627' +MAC21C 005626' +MAC21D 005615' +MAC21E 005624' +MAC22 005636' +MAC23 005651' +MAC24 005663' +MAC25 005664' +MAC26 005642' +MAC27 005647' +MAC30 005677' +MAC31 005700' +MAC40 005707' +MAC41 005720' + MACRO V.10 PAGE 173-10 + SYMBOL TABLE + +MAC42 005726' +MAC44 005727' +MACEN0 005740' +MACEN1 005755' +MACEN2 005756' +MACEN3 005773' +MACEND 005741' +MACENL 013405' +MACF 020000 SPD +MACLVL 013406' +MACPNT 013407' +MACSIZ 013433' +MDFF 000020 SPD +MFLSW 000010 SPD +MODA 013332' +MODLOC 013333' +MODO 013334' +MP 000016 +MREAD 006300' +MREADC 006333' +MREADI 006317' +MREADS 006322' +MRP 000013 +MSRCH 012173' +MSRCH2 012202' +MSTIME 047000 000023 +MTABIT 000020 SPD +MTAPSW 000004 SPD +MWLFLG 200000 SPD +MWP 000012 +N1 000765 +N2 000033 +NAME 007272' +NAME1 007215' +NAME2 007216' +NAME3 007224' +NCOLLS 013001' +NCOLS 000001 SPD +NEGSW 000200 SPD +NEXT 013041' +NOERW 003165' +NOOUTF 100000 SPD +NOUT 002602' +NOUT1 002605' +NOUT2 002624' +NOUT3 002621' +NUM 000705' +NUM1 000710' +NUM10 000720' +NUM30 000732' +NUM31 000733' +NUM32 000736' +NUM40 000741' + MACRO V.10 PAGE 173-11 + SYMBOL TABLE + +NUM50 000765' +NUM52 000773' +NUM60 001004' +NUM62 001011' +NUMBUF 000002 SPD +NUMDF 000704' +NUMDN 001026' +NUMER1 000431' +NUMER2 000432' +NUMSW 020000 SPD +NUMUP 001020' +NUNAC 000054' +NUNAOS 000006 +NUNBLT 000004 +NUNCOM 000000' +NUNDEV 012556' +NUNDIR 012663' +NUNERM 000006' +NUNERR 000004' +NUNGO2 000002' +NUNGO3 000011' +NUNGO4 000000 +NUNINI 012555' +NUNLAC 000012 +NUNPNT 000010 +NUNSET 000017' +NUNTOP 000011 +OCT0 004466' +OCT1 004470' +OFFML 004155' +OFFORM 003360' +OFFSYM 004157' +ONC 002747' +ONC1 002751' +ONC2 002763' +ONERW 003162' +ONERW1 003163' +ONFORM 003360' +ONML 004154' +OP 004354' +OP1A 004373' +OP1B 004363' +OP1COD 011515' +OP1END 011514' +OP1TAB 012020' +OP1TOP 010526' +OP2 004374' +OP2A 004442' +OP2A1 004455' +OP2A2 004463' +OP2TAB 012064' +OP3 004375' +OPD 004350' + MACRO V.10 PAGE 173-12 + SYMBOL TABLE + +OPD1 004346' +OPDEF0 003764' +OPDF 010000 SPD +OPHSH 000000 SPD +OPT1A 010473' +OPT1B 010500' +OPT1D 010505' +OPT1F 010513' +OPT1G 010516' +OPTSCH 010470' +OPTTAB 010523' +OTBUF 013335' +OTOD 010432' +OUTAB2 010306' +OUTAS0 002774' +OUTASC 002775' +OUTBIN 010122' +OUTC 010377' +OUTCR 010316' +OUTFF 010417' +OUTFF1 010410' +OUTFF2 010420' +OUTIM 001737' +OUTIM1 001736' +OUTIM2 001752' +OUTIML 002011' +OUTL 010325' +OUTL01 001565' +OUTL02 001567' +OUTL03 001566' +OUTL1 010364' +OUTL20 001577' +OUTL22 001621' +OUTL23 001625' +OUTL24 001630' +OUTL25 001636' +OUTL26 001642' +OUTL27 001646' +OUTL30 001665' +OUTL32 001675' +OUTLE2 001727' +OUTLE4 001733' +OUTLE8 001723' +OUTLER 001712' +OUTLI 001765' +OUTLI1 001773' +OUTLI2 001774' +OUTLI3 001772' +OUTLIN 001547' +OUTLST 010403' +OUTML1 002036' +OUTPL 001650' +OUTSET 003017' + MACRO V.10 PAGE 173-13 + SYMBOL TABLE + +OUTSIX 003001' +OUTSQ 013337' +OUTSTR 000000 +OUTSW 013042' +OUTSY1 003011' +OUTSYM 003010' +OUTTAB 010307' +P1 400000 SPD +PAGE0 010407' +PAGEN. 013341' +PAGENO 013414' +PASS1I 012600' +PASS20 003066' +PASS2I 013262' +PASS2X 013416' +PASS2Z 013413' +PDP 013043' +PDPERR 010037' +PEEK 006335' +PEEKM 006341' +PERIOD 000671' +PERNUM 000677' +PHASE0 004017' +PJOB 047000 000030 +PN1 004244' +PN2 004252' +PNCHSW 001000 SPD +PNTF 004000 SPD +POINT0 004561' +POINT2 004574' +POPOUT 000446' +PP 000017 +PPN 013402' +PPTEMP 013342' +PPTMP1 013343' +PPTMP2 013344' +PR 000002 SPD +PRGPTR 013260' +PRINT 010310' +PRMEND 012020' +PRMTBL 011720' +PRNAM 004235' +PRNTX0 003342' +PRNTX2 003345' +PRNTX4 003350' +PRNUM 010041' +PROGN1 007323' +PROGN2 007324' +PROGN3 007325' +PROGNP 007323' +PS 000003 SPD +PSEND0 004712' +PSEND1 004721' + MACRO V.10 PAGE 173-14 + SYMBOL TABLE + +PSEND2 004724' +PSEND3 004730' +PSEND4 004734' +PSEND5 005016' +PSEND6 005010' +PSENDX 005015' +PSNDER 005066' +PTPBIN 010123' +PTR 000104 SPD +PURGE0 004317' +PURGE2 004330' +PURGE3 004342' +PURGE4 004343' +PURGE5 004344' +PV 000001 SPD +QEXT 003752' +QSRCH 012203' +QUAL 000514' +QUAL2 000531' +QUAL2A 000535' +QUAL8 000530' +QUALL 000541' +QUOTE 000456' +QUOTE0 000452' +QUOTE1 000473' +QUOTE2 000472' +QUOTES 000447' +R1BBLK 013353' +R1BCHK 013352' +R1BCNT 013351' +R1BDM1 010175' +R1BDMP 010165' +R1BI 010203' +R1BLDR 003110' +R1BLOC 013375' +R1BSW 004000 SPD +RADIX0 003306' +RADX50 004667' +RADXSW 040000 SPD +RC 000011 SPD +RCOUNT 013411' +RCPNTR 003303' +READ 010221' +READ0 010220' +READ1 010223' +READ1A 010243' +READ2 010254' +READ3 010263' +REC2 007155' +RECCNT 013044' +REFDEC 006352' +REFINC 006347' +RELBL1 000650' + MACRO V.10 PAGE 173-15 + SYMBOL TABLE + +RELBLE 000632' +RELF 000001 SPD +RELLOC 013327' +RELOC0 004140' +REMAR0 003361' +REMOV1 012446' +REMOVE 012445' +RENTSW 000000 SPD +REPCNT 013345' +REPEA0 005070' +REPEA1 005072' +REPEA2 005074' +REPEA4 005105' +REPEA7 005132' +REPEA8 005134' +REPEND 005136' +REPEXP 013346' +REPO 005171' +REPO1 005201' +REPPG 013305' +REPPNT 013347' +REPSEQ 013306' +REPZ 005152' +REPZ1 005160' +REPZ2 005166' +RESET 047000 000000 +RIM0 010072' +RIM1SW 000100 SPD +RIMFIN 003256' +RIMLOC 013376' +RIMSW 000400 SPD +ROUT 010076' +ROUT1 010113' +ROUT6 010207' +RP 012600' +RPGDEV 012561' +RPGINI 012560' +RPGLOS 006615' +RPGLUP 006510' +RPGS1 006577' +RPGS2 006523' +RPGS2A 006524' +RPGSET 006501' +RPOLVL 013350' +RSTRXS 007205' +RSW0 001410' +RSW1 001412' +RSW2 001414' +RSW3 001423' +RUN 047000 000035 +RX 000015 SPD +SAVBLK 013045' +SAVERC 013056' + MACRO V.10 PAGE 173-16 + SYMBOL TABLE + +SAVEXS 007211' +SAVFF 013421' +SBUF 013057' +SDEL 000003 +SEARCH 012313' +SEQNO 012544' +SEQNO2 013415' +SETDDT 047000 000002 +SIXB10 004475' +SIXB20 004477' +SKELI 006220' +SKELI1 006217' +SKELW 006231' +SKELW1 006243' +SKELWL 006233' +SKPINC 000000 +SLASH 007226' +SOUT 002156' +SOUT1 002314' +SOUT10 002336' +SOUT15 002345' +SOUT20 002420' +SOUT50 002404' +SOUT60 002417' +SOUTC 002427' +SPTR 000010 SPD +SQB1 000620' +SQB2 000621' +SQB3 000562' +SQB4 000574' +SQB4A 000606' +SQB5 000561' +SQB6 000613' +SQBRK 000550' +SQFLG 013403' +SQOZ1 004701' +SQOZE 004677' +SQUOT0 000474' +SQUOTE 000500' +SRCH1 012315' +SRCH2 012317' +SRCH3 012325' +SRCH4 012335' +SRCH5 012336' +SRCH6 012352' +SRCH7 012340' +SRCHI 012455' +SRCHKO 012362' +SRCHNO 012361' +SRCHOK 012363' +SRCHX 013077' +SSRCH 012210' +SSRCH1 012213' + MACRO V.10 PAGE 173-17 + SYMBOL TABLE + +SSRCH2 012217' +SSRCH3 012220' +STCODE 013106' +STMN2A 000146' +STMN8A 000222' +STMN8B 000210' +STMN8C 000212' +STMN8D 000207' +STMNT 000125' +STMNT1 000127' +STMNT2 000130' +STMNT3 000157' +STMNT4 000161' +STMNT5 000167' +STMNT7 000200' +STMNT8 000207' +STMNT9 000201' +STOL06 001274' +STOL08 001301' +STOL10 001302' +STOL12 001314' +STOL14 001326' +STOL22 001333' +STOL23 001334' +STOL24 001335' +STOL26 001346' +STOLER 001261' +STOLIT 001264' +STOPI0 006125' +STORIT 005061' +STOUT 000230' +STOUT1 000237' +STOUTS 000227' +STOW 002665' +STOW10 002675' +STOW20 002677' +STOWI 002717' +STOWRC 013156' +STOWT 002735' +STOWT1 002742' +STOWZ 002664' +STOWZ1 002664' +STPX 013104' +STPY 013105' +SUBTL 011360' +SUBTT0 004220' +SUBTT1 004224' +SUBTT3 004226' +SUBTTX 013100' +SUPRBT 000004 SPD +SUPRE0 004161' +SUPRE1 004166' +SUPRS1 004175' + MACRO V.10 PAGE 173-18 + SYMBOL TABLE + +SUPRSA 004172' +SVSTOW 002723' +SVSYM 013101' +SW0 007346' +SW1 007347' +SWITC0 007341' +SWITCH 007342' +SWTAB 007571' +SWTABT 007574' +SX 000004 +SYMBLK 012730' +SYMBOL 013102' +SYMF 400000 SPD +SYMNUM 011713' +SYMTOP 013103' +SYN0 004261' +SYN1 004265' +SYN2 004266' +SYN3 004302' +SYN4 004313' +SYNF 040000 SPD +TABI 012543' +TABLE 007727' +TABLND 007756' +TABP 013226' +TAG 012541' +TAGF 200000 SPD +TAGINC 013377' +TAPE0 003304' +TBUF 013230' +TCNT 013227' +TERM 007276' +TERM1 007303' +TIMOU1 010424' +TIMOUT 010423' +TIO 000006 SPD +TIOCLD 020000 SPD +TIOLE 002000 SPD +TIORW 001000 SPD +TITLE0 004207' +TMPCOR 047000 000044 +TMPSW 010000 SPD +TNODE 200000 SPD +TSTBIN 010133' +TSTLST 010142' +TTCLTH 000016 SPD +TTCTBL 012155' +TTYBIT 000010 SPD +TTYERR 007631' +TTYIN 007614' +TTYSW 000001 SPD +TWSEG0 003360' +TXTPG 013307' + MACRO V.10 PAGE 173-19 + SYMBOL TABLE + +TXTSEQ 013310' +TYO 007770' +TYPERR 013256' +TYPM2 010000' +TYPM2A 010005' +TYPM3 010006' +TYPMS1 007760' +TYPMSG 007757' +UNDF 002000 SPD +UNIVR 000000 SPD +UOUT 002065' +UOUT1 002075' +UOUT10 002113' +UOUT12 002103' +UOUT13 002107' +UOUT2 002102' +UOUT30 002117' +UPDAT1 012507' +UPDAT2 012514' +UPDAT3 012505' +UPDAT4 012521' +UPDAT5 012525' +UPDATE 012467' +UTPCLR 047000 000013 +V 000006 +VAR0 003457' +VARA 003462' +VARB 003467' +VARF 000100 SPD +VARHD 013027' +VARHDX 013030' +VBUF 012573' +VCUSTO 000000 SPD +VECREL 013400' +VECTOR 013401' +VEDIT 000000 SPD +VMACRO 000010 SPD +VOUT 002633' +VT 000013 SPD +VUPDAT 000000 SPD +WAIT 072000 000000 +WCHAR 006262' +WCHAR1 006262' +WCHARQ 006262' +WCOUNT 013412' +WWORD 006266' +WWRXE 006272' +WWRXX 013410' +XADD 001235' +XALL0 003314' +XCEED 010015' +XCEED1 010023' +XCEED2 010035' + MACRO V.10 PAGE 173-20 + SYMBOL TABLE + +XCEEDS 010014' +XDIV 001240' +XDIV1 001242' +XLRW 001255' +XMUL 001244' +XMUL1 001247' +XPUNG0 004177' +XSUB 001232' +XTRA 000004 SPD +XWD0 004601' +XWD10 004613' +XWD5 004605' +ZA 100000 +ZAL 300000 +ZL 200000 +%DMAC 000006 SPD +%DSYM 000002 SPD +%MAC 000005 SPD +%OP 000003 SPD +%SYM 000001 SPD +.CPL 000130 SPD +.IFBLK 000024 SPD +.LEAF 000004 SPD +.LPP 000067 SPD +.LPTWD 000170 SPD +.PDP 000062 SPD +.R1B 000022 SPD +.SBUF 000120 SPD +.STP 000050 SPD +.TBUF 000120 SPD +.TEMP 013402' +.UNIV 000012 SPD + EEEEEEEEEEEEEEE DDDDDDDDDDDD DDDDDDDDDDDD TTTTTTTTTTTTTTT +EEEEEEEEEEEEEEE DDDDDDDDDDDD DDDDDDDDDDDD TTTTTTTTTTTTTTT +EEEEEEEEEEEEEEE DDDDDDDDDDDD DDDDDDDDDDDD TTTTTTTTTTTTTTT +EEE DDD DDD DDD DDD TTT +EEE DDD DDD DDD DDD TTT +EEE DDD DDD DDD DDD TTT +EEE DDD DDD DDD DDD TTT +EEE DDD DDD DDD DDD TTT +EEE DDD DDD DDD DDD TTT +EEEEEEEEEEEE DDD DDD DDD DDD TTT +EEEEEEEEEEEE DDD DDD DDD DDD TTT +EEEEEEEEEEEE DDD DDD DDD DDD TTT +EEE DDD DDD DDD DDD TTT +EEE DDD DDD DDD DDD TTT +EEE DDD DDD DDD DDD TTT +EEE DDD DDD DDD DDD TTT +EEE DDD DDD DDD DDD TTT +EEE DDD DDD DDD DDD TTT +EEEEEEEEEEEEEEE DDDDDDDDDDDD DDDDDDDDDDDD TTT +EEEEEEEEEEEEEEE DDDDDDDDDDDD DDDDDDDDDDDD TTT +EEEEEEEEEEEEEEE DDDDDDDDDDDD DDDDDDDDDDDD TTT + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :EDDT .LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:28 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1949 +File will be deleted after printing + EDDT V.005A - EXEC MODE VERSION PAGE 1 + OP DECODER + + + + + + + 000003 00060 EDDT=3 ;THIS CAUSES A RELOCATABLE VERSION OF EXEC DDT WITH THE + 00070 ; PAPER TAPE I/O OPTION TO BE ASSEMBLED (AS OPPOSED TO + 00080 ; RELOCATABLE AND/OR ABSOLUTE VERSIONS OF USER DDT + 00090 ; AND/OR NON-PAPER TAPE I/O EXEC DDT, ALL OF WHICH CAN + 00100 ; BE ASSEMBLED FROM THE SAME SOURCE CODE WITH A + 00110 ; DIFFERENT DEFINITION OF "EDDT"). + EDDT V.005A - EXEC MODE VERSION PAGE 2 + OP DECODER + + + + 00150 REPEAT 0,< + 00160 + 00170 HOW TO ASSEMBLE DDT + 00180 + 00190 THE SOURCE OF DDT WILL ASSEMBLE INTO SEVERAL DIFFERENT + 00200 VERSIONS; THE ASSEMBLE IS CONTROLED BY THE VALUES + 00210 ASSIGNED TO THE SYMBOL EDDT. THIS SYMBOL MUST BE + 00220 DEFINED AS A SEPARATE FILE PRECEDING THE DDT SOURCE FILE. + 00230 THE SYMBOL EDDT IS DECODED IN THE FOLLOWING MANNER: + 00240 BIT 35 A ZERO: ASSEMBLE USER MODE DDT + 00250 BIT 35 A ONE: ASSEMBLE AN EXECUTIVE MODE DDT + 00260 BIT 34 A ZERO: DO NOT ASSEMBLE THE PAPER TAPE + 00270 FEATURE INTO THE DDT + 00280 BIT 34 A ONE: THIS IS IGNORED FOR USER DDT. + 00290 FOR AN EXEC DDT, ASSEMBLE + 00300 THE PAPER TAPE FEATURE + 00310 BITS 0-17: IF THESE BITS ARE ALL ZERO THE + 00320 ASSEMBLY WILL BE RELOCATABLE + 00330 IF THEY ARE NON-ZERO, THE ASSEMBLY IS + 00340 ABSOLUTE STARTING AT THE VALUE IN BITS + 00350 0-17 (THE LEFT HALF) + 00360 + 00370 EXAMPLE: + 00380 1.) IF EDDT IS NOT DEFINED BY A PARAMETER ASSIGNMENT, + 00390 DDT WILL ASSIGN EDDT=0 AND A USER MODE RELOCATABLE + 00400 DDT WILL RESULT. + 00410 + 00420 2.) EDDT=1; A RELOCATABLE EXEC DDT WITHOUT PAPER + 00430 TAPE FEATURE WILL RESULT. + 00440 + 00450 3.) EDDT=3; A RELOCATABLE EXEC DDT WITH PAPER + 00460 TAPE FEATURE WILL RESULT + 00470 + 00480 4.) EDDT=<XWD 4000,1>; AN ABSOLUTE DDT (STARTING + 00490 ADRESS 4000) WITHOUT PAPER TAPE FEATURE WILL RESULT + 00500 + 00510 5.) EDDT=<XWD 4000,3>; AN ABSOLUTE DDT + 00520 (STARTING ADDRESS 4000) WITH ALL THE PAPER TAPE + 00530 FEATURES WILL RESULT. + 00540 > + + EDDT V.005A - EXEC MODE VERSION PAGE 3 + OP DECODER + + + + + 00600 IFNDEF EDDT,<EDDT=0> + + + + + 00650 DEFINE XP (X.,Y.),< + 00660 IF2,<X.=Y. + 00670 INTERN X. + 00680 NSYMS=NSYMS+2>> + 000000 00690 NSYMS=0 ;INITIAL SYMBOL COUNTER + + 000074 00710 LOC 74 + 000074 003610' 000000' 00720 XWD DDTEND,DDT + 000000' 00730 RELOC 0 + + 00750 IFN EDDT&<XWD -1,0>,<LOC <EDDT>B53> + + 00770 IFN EDDT&1,<TITLE EDDT V.005A - EXEC MODE VERSION + 000037 00780 JOBREL=37 + 000036 00790 JOBSYM=36 + 000040 00800 ZLOW=40 + 000000' 00810 DDTX=DDT + 00820 ENTRY DDTX> + + 00840 IFE EDDT&1,<TITLE UDDT V.005 - USER MODE DDT + 00850 EXTERN JOBREL,JOBSYM,JOBSA + 00860 NSYMS=NSYMS+6 + 00870 ZLOW=140> + 000000 00880 F=0 ;FLAGS + 000001 00890 P=1 ;PUSH DOWN + 000002 00900 R=2 ;POINTERS TO TABLES, CORE, ETC. + 000003 00910 S=3 + 000004 00920 W=4 ;CONTAINS DISPATCH ADDRESS IN WORD ASSEMBLER + 000005 00930 T=5 ;TRANSFER DATA + 000006 00940 W1=6 + 000007 00950 W2=7 + 000010 00960 SCH=10 ;MODE CONTROL SWITCH FOR OUTPUT + 000011 00970 AR=11 ;MODE CONTROL SWITCH FOR OUTPUT + 000012 00980 ODF=12 ;MODE CONTROL SWITCH FOR OUTPUT - CURRENT RADIX + 000002 00990 A=R + 000003 01000 B=S + 000004 01010 C=W + + 000004 01030 PRS=4 + 000120 01040 TTYY=120 + 000104 01050 PTRR=104 + 000100 01060 PTPP=100 + + 000050 01080 LPDL=50 ;MAX LENGTH PUSH DOWN LIST + + EDDT V.005A - EXEC MODE VERSION PAGE 4 + OP DECODER + + 100000 01110 TIF=100000 ;TRUNCATE TO 18 BITS - SET BY SPACE OR COMMA + 000100 01120 PTF=100 ; +, -, OR * HAS BEEN TYPED + 000400 01130 CTF=400 + 000004 01140 SF=4 ;SYLLABLE FLAG + 000001 01150 QF=1 ;QUANTITY TYPED IN TO WORD ASSEMBLER + + 000040 01170 CF=40 ; TYPED + 010000 01180 CCF=10000 ; TYPED + 000002 01190 MF=2 ;MINUS SIGN TYPED IN + 000020 01200 LTF=20 ;LETTER TYPED IN TO CURRENT SYLLABLE + 000010 01210 ROF=10 ;REGISTER OPEN FLAG + 004000 01220 STF=4000 + 001000 01230 FAF=1000 ; < TYPED + 002000 01240 SAF=2000 ; > TYPED + + 020000 01260 FPF=20000 ; . TYPED IN + 400000 01270 FEF=400000 ; E FLAG + + 000200 01290 MLF=200 ;*FLAG + 040000 01300 DVF=40000 ;DIVIDE FLAG + + 000000 01320 PID=0 ;=0 IF SYMBOL TABLE POINTER IS IN JOBSYM + EDDT V.005A - EXEC MODE VERSION PAGE 5 + OP DECODER + + + 01350 ;RIGHT HALF FLAGS + + 000002 01370 ITF=2 ;INSTRUCTION TYPED IF ITF=1 + 000004 01380 OUTF=4 ;OUTPUT IF OUTF=1 + 000400 01390 CF1=400 ;OUTPUT 1 REGISTER AS CONSTANT + 002000 01400 LF1=2000 ;OUTPUT 1 REGISTER AS FORCED SYMBOLIC OR CONSTANT + 000001 01410 Q2F=1 ;NUMBER TYPED AFTER ALT MODE + 000020 01420 SBF=20 + 000200 01430 NAF=200 ;NEGATIVE ADDRESSES PERMISSABLE + 004000 01440 POWF=4000 ;ARGUMENT FOR EXPONENT COMING + 010000 01450 SLL=10000 ;STOP LOOKING FOR LOCALS + + 040000 01470 GLOBAL=040000 ;GLOBAL SYMBOL + 100000 01480 LOCAL=100000 + 740000 01490 PNAME=740000 ;PROGRAM NAME + 200000 01500 DELI=200000 ;DELETE INPUT + 400000 01510 DELO=400000 ;DELETE OUTPUT + + 000000' 01530 DDT: + 01540 ENTRY DDT + 000002 01550 NSYMS=NSYMS+2 + + + 01580 RADIX 10 + 000010 01590 NBP=8 ;NUMBER OF BREAKPOINTS + 01600 DEFINE DBPNT (Z.)<XP $'Z.'B,B1ADR+3*Z.-3> + 000000 01610 ZZ=0 + 01620 REPEAT NBP,<DBPNT \<ZZ=ZZ+1>> + DBPNT \<ZZ=ZZ+1>^XP $1B,B1ADR+3*1-3^ DBPNT \<ZZ=ZZ+1>^XP $2B,B1ADR+3*2-3^ DBPNT \<ZZ=ZZ+1>^XP $3B,B1ADR+3*3-3^ DBPNT \<ZZ=ZZ+1>^XP $4B,B1ADR+3*4-3^ DBPNT \<ZZ=ZZ+1>^XP $5B,B1ADR+3*5-3^ DBPNT \<ZZ=ZZ+1>^XP $6B,B1ADR+3*6-3^ DBPNT \<ZZ=ZZ+1>^XP $7B,B1ADR+3*7-3^ DBPNT \<ZZ=ZZ+1>^XP $8B,B1ADR+3*8-3^ 01630 RADIX 8 + + + 01660 XP $M,MSK^ + 01670 XP $I,SAVPI^ + 01680 XP DDTEND,DDTEND^ + EDDT V.005A - EXEC MODE VERSION PAGE 6 + OP DECODER + + + + 01720 IFN EDDT&1,< + + 01740 XP PI,4B11^ + 01750 XP PTP,100B11^ + 01760 XP PTR,104B11^ + 01770 XP CDR,114B11^ + 01780 XP TTY,120B11^ + 01790 XP LPT,124B11^ + 01800 XP DC,200B11^ + 01810 XP DIS,130B11^ + 01820 XP PLT,140B11^ + 01830 XP CR,150B11^ + 01840 XP DSK,170B11^ + 01850 XP DTC,210B11^ + 01860 XP DTS,214B11^ + 01870 XP DCSA,300B11^ + 01880 XP DCSB,304B11^ + 01890 XP DF,270B11^ + 01900 XP MTC,220B11^ + 01910 XP MTS,224B11^ + 01920 XP MTM,230B11^ + 01930 XP DLS,240B11^ + 01940 XP TDC,320B11^ + 01950 XP TDS,324B11^ + 01960 XP TMC,340B11^ + 01970 XP TMS,344B11>^ + + 01990 XP JOV,2554B11^ + 02000 XP JEN,2545B11^ + 02010 XP HALT,2542B11^ + + + 777777 777661' 02040 LOW=DDT-NSYMS-1 + + + + + + + + + + + EDDT V.005A - EXEC MODE VERSION PAGE 7 + OP DECODER + + + + 000000' 264000 002615' 02180 DDT: JSR SAVE + 000001' 260040 001307' 02190 PUSHJ P,REMOVB + 000002' 554240 002213' 02200 HLRZ T,ESTU + 000003' 274240 002213' 02210 SUB T,ESTU + 000004' 270260 002230' 02220 ADD T,@SYMP + 000005' 602240 777777 02230 TRNE T,-1 + 000006' 254000 003022' 02240 JRST IFIX + 000007' 621000 000010 02250 DD1: TLZ F,ROF ;CLOSE ANY OPEN REGISTER + 000010' 260040 002657' 02260 PUSHJ P,CRF + 000011' 200240 003432' 02270 DD1.5: MOVE T,[XWD SCHM,SCH] + 000012' 251240 000012 02280 BLT T,ODF ;LOAD ACS + 000013' 402000 002203' 02290 DD2: CLEARM PRNC ;PARENTHESES COUNT + 000014' 201040 003540' 02300 MOVEI P,PS + 000015' 200240 002213' 02310 LIS: MOVE T,ESTU + 000016' 202240 002214' 02320 MOVEM T,ESTUT ;INIT UNDEFINED SYM ASSEM + 000017' 630000 003433' 02330 TDZ F,[XWD 777777-ROF-STF,LF1+CF1+SBF+2+Q2F] + 000020' 630000 003434' 02340 LIS0: TDZ F,[XWD 777777-ROF-STF-FAF-SAF,NAF] + 000021' 402000 002201' 02350 CLEARM,WRD + 000022' 402000 002204' 02360 LIS1: CLEARM,FRASE + 000023' 201240 000001 02370 LIS2: MOVEI T,1 + 000024' 202240 002210' 02380 MOVEM T,FRASE1 + 000025' 621000 040200 02390 TLZ F,MLF+DVF + 000026' 621000 030044 02400 L1: TLZ F,CF+CCF+SF+FPF ;TURN OFF CONTROL, SYL, PERIOD FLAG + 000027' 402000 002205' 02410 CLEARM,SYL + 000030' 402000 002222' 02420 L1RPR: CLEARM,SYM + 000031' 201240 000006 02430 MOVEI T,6 + 000032' 202240 002313' 02440 MOVEM T,TEM ;INIT SYMBOL COUNTER + 000033' 402000 002211' 02450 CLEARM,DEN + 000034' 402000 002202' 02460 CLEARM,WRD2 + + 000035' 260040 002666' 02480 L2: PUSHJ P,TIN ;PICK UP CHARACTER + 000036' 301240 000141 02490 CAIL T,"A"+40 ;LOWER CASE A + 000037' 303240 000172 02500 CAILE T,"Z"+40 ;LOWER CASE Z + 000040' 254000 000042' 02510 JRST .+2 + 000041' 640240 000040 02520 TRC T,40 ;CHANGE LOWER CASE TO UPPER CASE + 000042' 603000 000040 02530 TLNE F,CF ;CONTROL FLAG + 000043' 254000 000050' 02540 JRST L21 + 000044' 307240 000132 02550 CAIG T,"Z" ;Z + 000045' 305240 000101 02560 CAIGE T,"A" ;A + 000046' 254000 000050' 02570 JRST .+2 + 000047' 254000 000221' 02580 JRST LET + 000050' 200100 000005 02590 L21: MOVE R,T + 000051' 231100 000003 02600 IDIVI R,3 + 000052' 135203 002744' 02610 LDB W,BDISP(R+1) + 000053' 305200 000570 02620 CAIGE W,MULT-DDT ;FIRST EVAL ROUTINE + 000054' 254004 000000' 02630 JRST DDT(W) + EDDT V.005A - EXEC MODE VERSION PAGE 8 + OP DECODER + + + 000055' 200240 002205' 02660 L211: MOVE T,SYL + 000056' 627000 000020 02670 TLZN F,LTF + 000057' 254000 000271' 02680 JRST POWER + 000060' 260040 000351' 02690 PUSHJ P,EVAL + 000061' 254000 000137' 02700 JRST UND1 + 000062' 623000 000002 02710 L4: TLZE F,MF + 000063' 210240 000005 02720 MOVN T,T + 000064' 607000 000004 02730 TLNN F,SF + 000065' 302200 000577 02740 CAIE W,LPRN-DDT + 000066' 254000 000070' 02750 JRST .+2 + 000067' 254000 000577' 02760 JRST LPRN + + 000070' 250240 002210' 02780 EXCH T,FRASE1 + 000071' 607000 040000 02790 TLNN F,DVF + 000072' 223240 002210' 02800 IMULB T,FRASE1 + 000073' 623000 040000 02810 TLZE F,DVF + 000074' 233240 002210' 02820 IDIVB T,FRASE1 + 000075' 305200 000573 02830 CAIGE W,ASSEM-DDT + 000076' 254004 000000' 02840 JRST DDT(W) ;MULTIPLY OR DIVIDE + 000077' 273240 002204' 02850 ADDB T,FRASE + 000100' 305200 000623 02860 CAIGE W,SPACE-DDT + 000101' 254004 000000' 02870 JRST DDT(W) ; + - @ , + + 000102' 270240 002201' 02890 ADD T,WRD + 000103' 603000 100000 02900 TLNE F,TIF ;TRUNCATE INDICATOR FLAG + 000104' 500240 002201' 02910 HLL T,WRD ;TRUNCATE + 000105' 202240 002201' 02920 MOVEM T,WRD + 000106' 607000 000001 02930 TLNN F,QF + 000107' 200240 002206' 02940 MOVE T,LWT + 000110' 402000 000002 02950 CLEARM,R + 000111' 200300 002214' 02960 MOVE W1,ESTUT + 000112' 316300 002213' 02970 CAMN W1,ESTU + 000113' 254000 000116' 02980 JRST L5 + 000114' 303200 000700 02990 CAILE W,CARR-DDT + 000115' 254000 000123' 03000 JRST ERR + 000116' 307200 000627 03010 L5: CAIG W,RPRN-DDT + 000117' 254004 000000' 03020 JRST DDT(W) + 000120' 261040 000445' 03030 PUSH P,KILRET + 000121' 336000 002203' 03040 SKIPN PRNC + 000122' 254004 000000' 03050 JRST DDT(W) + + 000123' 201300 000077 03070 ERR: MOVEI W1,"?" + 000124' 254000 000130' 03080 JRST WRONG1 + 000125' 201300 000125 03090 UNDEF: MOVEI W1,"U" + 000126' 254000 000130' 03100 JRST WRONG1 + 000127' 200300 003435' 03110 WRONG: MOVE W1,[ASCII /XXX/] + 000130' 201040 003540' 03120 WRONG1: MOVEI P,PS + 000131' 260040 002171' 03130 PUSHJ P,TEXT + 000132' 260040 002714' 03140 IFN EDDT&1,<PUSHJ P,LISTEN + 000133' 255000 000000 03150 JFCL> + EDDT V.005A - EXEC MODE VERSION PAGE 9 + OP DECODER + + 000134' 201040 003540' 03170 RET: MOVEI P,PS + 000135' 260040 002662' 03180 PUSHJ P,LCT ;COMMON RETURN FOR TAB;,JRST LIS + 000136' 254000 000013' 03190 JRST DD2 + + 000137' 200100 002214' 03210 UND1: MOVE R,ESTUT ;UNDEFINED SYM ASSEMBLER + 000140' 574140 002214' 03220 HLRE S,ESTUT + 000141' 240140 777777 03230 ASH S,-1 ;SETUP EVAL END TEST + 000142' 260040 000357' 03240 PUSHJ P,EVAL2 + 000143' 306200 000573 03250 CAIN W,ASSEM-DDT + 000144' 607000 000010 03260 TLNN F,ROF + 000145' 254000 003305' 03270 JRST OPEVAL + 000146' 332000 002203' 03280 SKIPE PRNC + 000147' 254000 003305' 03290 JRST OPEVAL + 000150' 201240 000043 03300 MOVEI T,"#" + 000151' 302200 000573 03310 CAIE W,ASSEM-DDT + 000152' 260040 002676' 03320 PUSHJ P,TOUT + + 000153' 210100 003436' 03340 MOVN R,[XWD 2,2] + 000154' 273100 002214' 03350 ADDB R,ESTUT + 000155' 200240 002222' 03360 MOVE T,SYM + 000156' 661240 040000 03370 TLO T,GLOBAL + 000157' 202242 000000 03380 MOVEM T,(R) + 000160' 550240 002227' 03390 HRRZ T,LLOCO + 000161' 603000 000002 03400 TLNE F,MF + 000162' 661240 400000 03410 TLO T,400000 + 000163' 202242 000001 03420 MOVEM T,1(R) + 000164' 201240 000000 03430 MOVEI T,0 + 000165' 254000 000062' 03440 JRST L4 + + 000166' 260040 002657' 03460 QUESTN: PUSHJ P,CRF ;LIST UNDEFINED SYMBOLS + 000167' 200100 002213' 03470 MOVE R,ESTU + 000170' 325100 000007' 03480 QUEST1: JUMPGE R,DD1 + 000171' 200242 000000 03490 MOVE T, (R) + 000172' 334300 002213' 03500 SKIPA W1,ESTU + + 000173' 270300 003436' 03520 QUEST2: ADD W1,[XWD 2,2] + 000174' 312246 000000 03530 CAME T,(W1) + 000175' 254000 000173' 03540 JRST QUEST2 + + 000176' 312100 000006 03560 QUEST3: CAME R,W1 + 000177' 254000 000202' 03570 JRST QUEST4 + 000200' 260040 002030' 03580 PUSHJ P,SPT + 000201' 260040 002657' 03590 PUSHJ P,CRF + 000202' 270100 003436' 03600 QUEST4: ADD R,[XWD 2,2] + 000203' 254000 000170' 03610 JRST QUEST1 + EDDT V.005A - EXEC MODE VERSION PAGE 10 + OP DECODER + + + 000204' 405240 000017 03640 NUM: ANDI T,17 ;T HOLDS CHARACTER + 000205' 603000 020040 03650 TLNE F,CF+FPF + 000206' 254000 000251' 03660 JRST NM1 + 000207' 200200 002205' 03670 MOVE W,SYL + 000210' 242200 000003 03680 LSH W,3 + 000211' 270200 000005 03690 ADD W,T + 000212' 202200 002205' 03700 MOVEM W,SYL + 000213' 200200 002211' 03710 MOVE W,DEN + 000214' 221200 000012 03720 IMULI W,12 ;CONVERT TO DECIMAL + 000215' 270200 000005 03730 ADD W,T + 000216' 202200 002211' 03740 MOVEM W,DEN + 000217' 344240 000235' 03750 LE1: AOJA T,LE1A + + 000220' 201240 000135 03770 PERC: MOVEI T,47+101-13 ;PERCENT SIGN + 000221' 641000 020004 03780 LET: TLC F,SF+FPF ;EXPONENT IFF LTF'*FEF'*(T=105)*SF*FPF=1 + 000222' 627000 420024 03790 TLZN F,LTF+FEF+SF+FPF + 000223' 302240 000105 03800 CAIE T,105 ; E + 000224' 665000 000020 03810 TLOA F,LTF + 000225' 665000 400000 03820 TLOA F,FEF + 000226' 254000 000234' 03830 JRST LET1 + 000227' 627000 000002 03840 TLZN F,MF + 000230' 334300 002205' 03850 SKIPA W1,SYL + 000231' 210300 002205' 03860 MOVN W1,SYL + 000232' 202300 002215' 03870 MOVEM W1,FSV + 000233' 402000 002211' 03880 CLEARM DEN + 000234' 275240 000066 03890 LET1: SUBI T,101-13 ;FORM RADIX 50 SYMBOL + 000235' 661000 000005 03900 LE1A: TLO F,SF+QF + 000236' 200200 002222' 03910 LE2: MOVE W,SYM + 000237' 221200 000050 03920 IMULI W,50 ;CONVERT TO RADIX 50 + 000240' 270200 000005 03930 ADD W,T + 000241' 371000 002313' 03940 SOSL,TEM ;IGNORE CHARACS AFTER 6 + 000242' 202200 002222' 03950 MOVEM W,SYM + 000243' 254000 000035' 03960 JRST L2 + + 000244' 250240 002202' 03980 NUM1: EXCH T,WRD2 ;FORM NUMBER AFTER $ + 000245' 221240 000012 03990 IMULI T,12 + 000246' 272240 002202' 04000 ADDM T,WRD2 + 000247' 660000 000001 04010 TRO F,Q2F + 000250' 254000 000035' 04020 JRST L2 + + 000251' 603000 000040 04040 NM1: TLNE F,CF + 000252' 254000 000244' 04050 JRST NUM1 + 000253' 201300 000006 04060 MOVEI W1,6 ;FORM FLOATING POINT NUMBER + 000254' 350000 000255' 04070 AOS NM1A + 000255' 201340 000000 04080 NM1A: MOVEI W2,0 + 000256' 205100 201400 04090 MOVSI R,201400 + 000257' 622340 000001 04100 NM1A1: TRZE W2,1 + 000260' 164106 002154' 04110 FMPR R,FT(W1) + 000261' 322340 000264' 04120 JUMPE W2,NM1B + 000262' 242340 777777 04130 LSH W2,-1 + 000263' 367300 000257' 04140 SOJG W1,NM1A1 + 000264' 205305 211000 04150 NM1B: MOVSI W1,211000(T) + EDDT V.005A - EXEC MODE VERSION PAGE 10-1 + OP DECODER + + 000265' 164100 000006 04160 FMPR R,W1 ;COMPUTE VALUE OF NEW DIGIT + 000266' 147100 002221' 04170 FADRB R,FH ;ADD VALUE INTO FLOATING NO. + 000267' 202100 002205' 04180 MOVEM R,SYL + 000270' 344240 000235' 04190 AOJA T,LE1A + EDDT V.005A - EXEC MODE VERSION PAGE 11 + OP DECODER + + + 000271' 607000 400000 04220 POWER: TLNN F,FEF + 000272' 254000 000062' 04230 JRST L4 ;NO EXPONENT + 000273' 302200 000575' 04240 CAIE W,PLUS + 000274' 306200 000574' 04250 CAIN W,MINUS + 000275' 662000 004000 04260 TROE F,POWF + 000276' 624000 004000 04270 TRZA F,POWF + 000277' 254004 000000 04280 JRST (W) ; E+- + + 000300' 200340 002211' 04300 MOVE W2,DEN + 000301' 402000 002204' 04310 CLEARM FRASE + 000302' 201300 002153' 04320 MOVEI W1,FT-1 + 000303' 623000 000002 04330 TLZE F,MF + 000304' 201300 002162' 04340 MOVEI W1,FT01 + 000305' 334240 002215' 04350 SKIPA T,FSV + 000306' 242340 777777 04360 POW2: LSH W2,-1 + 000307' 622340 000001 04370 TRZE W2,1 + 000310' 164246 000000 04380 FMPR T,(W1) + 000311' 322340 000062' 04390 JUMPE W2,L4 + 000312' 364300 000306' 04400 SOJA W1,POW2 + EDDT V.005A - EXEC MODE VERSION PAGE 12 + OP DECODER + + + + 000313' 200240 002226' 04440 PERIOD: MOVE T,LLOC + 000314' 603000 000004 04450 TLNE F,SF ;SYLLABLE STARTED + 000315' 200240 002211' 04460 MOVE T,DEN + 000316' 202240 002205' 04470 MOVEM T,SYL + 000317' 603000 020000 04480 TLNE F,FPF ;HAS A PERIOD BEEN SEEN BEFORE? + 000320' 661000 000020 04490 TLO F,LTF ;YES, TWO PERIODS MAKES A SYMBOL + 000321' 667000 020005 04500 TLON F,FPF+SF+QF + 000322' 201240 000000 04510 MOVEI T,0 + 000323' 231240 000400 04520 IDIVI T,400 + 000324' 332000 000005 04530 SKIPE T + 000325' 641240 243000 04540 TLC T,243000 + 000326' 641300 233000 04550 TLC W1,233000 + 000327' 140240 003437' 04560 FAD T,[0] ;NORMALIZE T AND W1 + 000330' 140300 003437' 04570 FAD W1,[0] + 000331' 144240 000006 04580 FADR T,W1 + 000332' 202240 002221' 04590 MOVEM T,FH + 000333' 513000 000255' 04600 HLLZS NM1A + 000334' 201240 000045 04610 MOVEI T,45 ;RADIX 50 PERIOD + 000335' 254000 000236' 04620 JRST LE2 + + 000336' 334240 002206' 04640 QUAN: SKIPA T,LWT ;LAST QUANTITY TYPED + 000337' 201240 002231' 04650 PILOC: MOVEI T, SAVPI + 000340' 202240 002205' 04660 QUAN1: MOVEM T,SYL + 000341' 661000 000005 04670 QUAN2: TLO F,SF+QF ;WRD,SYL STARTED + 000342' 621000 010040 04680 TLZ F,CF+CCF + 000343' 254000 000035' 04690 JRST L2 + + 000344' 04710 CONTRO: ;SOME KIND OF ALTMODE + 000344' 201240 000044 04720 IFN EDDT&1,< MOVEI T,"$" ;$ + 000345' 260040 002676' 04730 PUSHJ P,TOUT ;TYPE OUT $ + 04740 > + 000346' 663000 000040 04750 DOLLAR: TLOE F,CF + 000347' 661000 010000 04760 TLO F,CCF + 000350' 254000 000035' 04770 JRST L2 + + EDDT V.005A - EXEC MODE VERSION PAGE 13 + OP DECODER + + + 000351' 200100 002212' 04810 EVAL: MOVE R,PRGM ;LOOK UP SYMBOL + 000352' 525300 237777 04820 EVAL0: HRLOI W1,37777+DELI + 000353' 574160 002230' 04830 HLRE S,@SYMP + 000354' 240140 777777 04840 ASH S,-1 ;SETUP END TEST + 000355' 254000 000362' 04850 JRST EVAL3 + + 000356' 270100 003436' 04870 EVAL1: ADD R,[XWD 2,2] + 000357' 331000 000002 04880 EVAL2: SKIPL R + 000360' 200120 002230' 04890 MOVE R,@SYMP + 000361' 347140 000374' 04900 AOJG S,CPOPJ ;TRNASFER IF NO SYMBOL FOUND + 000362' 200242 000000 04910 EVAL3: MOVE T,(R) + 000363' 430240 002222' 04920 XOR T,SYM + 000364' 607240 740000 04930 TLNN T,PNAME + 000365' 665300 100000 04940 TLOA W1,LOCAL + 000366' 612240 000006 04950 TDNE T,W1 + 000367' 254000 000356' 04960 JRST EVAL1 + 000370' 607240 340000 04970 TLNN T,340000 + 000371' 254000 000356' 04980 JRST EVAL1 + 000372' 200242 000001 04990 MOVE T,1(R) + 000373' 350001 000000 05000 CPOPJ1: AOS (P) ;FOUND SYMBOL, SKIP + 000374' 263040 000000 05010 CPOPJ: POPJ P, + + 05030 ;BIT 40 - DELETE OUTPUT + 05040 ; 20 - DELETE INPUT + 05050 ; 10 - LOCAL + 05060 ; 04 -GLOBAL + 05070 ; NO BITS - PROGRAM NAME + + 000375' 260040 002740' 05090 TEXI: PUSHJ P,TEXIN ;INPUT TEXT + 000376' 202240 002205' 05100 MOVEM T,SYL + 000377' 201300 000005 05110 MOVEI W1,5 + 000400' 201200 000000 05120 MOVEI T-1,0 + 000401' 260040 002740' 05130 PUSHJ P,TEXIN + 000402' 306240 000033 05140 CAIN T,33 ;NEW ALT MODE, ESCAPE + 000403' 254000 000341' 05150 JRST QUAN2 + 000404' 603000 000040 05160 TLNE F,CF + 000405' 254000 000422' 05170 JRST SIXBIN + 000406' 334000 000000 05180 SKIPA + 000407' 260040 002740' 05190 TEXI2: PUSHJ P,TEXIN + 000410' 316240 002205' 05200 CAMN T,SYL + 000411' 364300 000415' 05210 SOJA W1,TEXI3 + 000412' 241240 777771 05220 ROT T,-7 + 000413' 246200 000007 05230 LSHC T-1,7 + 000414' 364300 000407' 05240 SOJA W1,TEXI2 + + 000415' 246200 777735 05260 TEXI3: LSHC T-1,-43 + 000416' 321300 000340' 05270 JUMPL W1,QUAN1 + 000417' 242240 000007 05280 LSH T,7 + 000420' 364300 000416' 05290 SOJA W1,.-2 + + EDDT V.005A - EXEC MODE VERSION PAGE 14 + OP DECODER + + 000421' 260040 002740' 05320 SIXBI1: PUSHJ P,TEXIN ; INPUT TEXT (SIXBIT) + 000422' 316240 002205' 05330 SIXBIN: CAMN T,SYL + 000423' 254000 000431' 05340 JRST SIXBI2 + 000424' 405240 000077 05350 ANDI T,77 + 000425' 640240 000040 05360 TRC T,40 + 000426' 241240 777772 05370 ROT T,-6 + 000427' 246200 000006 05380 LSHC T-1,6 + 000430' 364300 000421' 05390 SOJA W1,SIXBI1 + 000431' 200240 000004 05400 SIXBI2: MOVE T,T-1 + 000432' 321300 000340' 05410 JUMPL W1,QUAN1 + 000433' 242240 000006 05420 LSH T,6 + 000434' 364300 000432' 05430 SOJA W1,.-2 + + 000435' 607000 000020 05450 KILL: TLNN F,LTF ;DELETE SYMBOLS + 000436' 254000 000446' 05460 JRST KILLA + 000437' 260040 000351' 05470 PUSHJ P,EVAL + 000440' 254000 000462' 05480 JRST KILL1 + 000441' 201240 000002 05490 MOVEI T,DELO/200000 ;DELETE OUTPUT + 000442' 603000 010000 05500 TLNE F,CCF + 000443' 201240 000001 05510 MOVEI T,DELI/200000 ;NO INPUT OR OUTPUT + 000444' 137240 003440' 05520 DPB T,[POINT 2,(R),1] ;LEFT 2 BITS IN SYMBOL + 000445' 254000 000134' 05530 KILRET: JRST RET ;USED AS A CONSTANT + + 000446' 607000 000001 05550 KILLA: TLNN F,QF + 000447' 607000 010000 05560 TLNN F,CCF + 000450' 254000 000123' 05570 JRST ERR + 000451' 200100 002200' 05580 MOVE R,KILC + 000452' 202120 002230' 05590 MOVEM R,@SYMP ;RESTORE INIT SYMS + 000453' 552100 002213' 05600 HRRZM R,ESTU + 000454' 202100 002212' 05610 MOVEM R,PRGM + 000455' 515240 600000 05620 HRLZI T,DELO+DELI + 000456' 412242 000000 05630 ANDCAM T,(R) ;GET RID OF DELETE BITS IN INITIAL TABLE + 000457' 253100 000460' 05640 AOBJN R,.+1 + 000460' 253100 000456' 05650 AOBJN R,.-2 + 000461' 254000 000134' 05660 JRST RET + + 000462' 200100 002213' 05680 KILL1: MOVE R,ESTU ;REMOVE UNDEFINED SYMS + 000463' 325100 000125' 05690 JUMPGE R,UNDEF + 000464' 260040 000352' 05700 KILL2: PUSHJ P,EVAL0 + 000465' 254000 000134' 05710 JRST RET + 000466' 260040 000470' 05720 PUSHJ P,REMUN + 000467' 254000 000464' 05730 JRST KILL2 + + 000470' 200140 003436' 05750 REMUN: MOVE S,[XWD 2,2] ;REMOVE ONE UNDEFINED SYMBOL + 000471' 273140 002213' 05760 ADDB S,ESTU + 000472' 200203 777776 05770 MOVE W,-2(S) + 000473' 202202 000000 05780 MOVEM W,(R) + 000474' 200203 777777 05790 MOVE W,-1(S) + 000475' 202202 000001 05800 MOVEM W,1(R) + 000476' 263040 000000 05810 POPJ P, + + EDDT V.005A - EXEC MODE VERSION PAGE 15 + OP DECODER + + + 000477' 607000 000020 05850 TAG: TLNN F,LTF ; NO LETTERS IS ERROR + 000500' 254000 000123' 05860 JRST ERR ; GO SAY ERROR + 000501' 603000 001000 05870 TLNE F,FAF ; DEFINE SYMBOLS + 000502' 254000 000507' 05880 JRST DEFIN ;A<B: + 000503' 603000 000040 05890 TLNE F,CF ;DEFINE SYMBOL AS OPEN REGISTER + 000504' 254000 000555' 05900 JRST SETNAM + 000505' 200200 002227' 05910 MOVE W,LLOCO + 000506' 552200 002224' 05920 HRRZM W,DEFV + + 000507' 260040 000351' 05940 DEFIN: PUSHJ P,EVAL + 000510' 254000 000515' 05950 JRST DEF1 + 000511' 315100 002200' 05960 CAMGE R,KILC ;INITIAL SYMBOL? + 000512' 254000 000525' 05970 JRST DEF2 ;NO, REDEFINE + 000513' 201240 000001 05980 MOVEI T,DELI/200000 ;YES, DELETE AND DEFINE NEW ONE + 000514' 137240 003440' 05990 DPB T,[POINT 2,(R),1] ;LEFT 2 BITS OF SYMBOL + 000515' 210100 003436' 06000 DEF1: MOVN R,[XWD 2,2] + 000516' 273120 002230' 06010 ADDB R,@SYMP ;MOVE UNDEFINED TABLE 2 REGISTERS + 000517' 550240 002213' 06020 HRRZ T,ESTU + 000520' 275240 000002 06030 SUBI T,2 + 000521' 504240 002213' 06040 HRL T,ESTU + 000522' 542240 002213' 06050 HRRM T,ESTU + 000523' 335000 002213' 06060 SKIPGE ESTU + 000524' 251242 777777 06070 BLT T,-1(R) + 000525' 200240 002224' 06080 DEF2: MOVE T,DEFV + 000526' 202242 000001 06090 MOVEM T,1(R) ;PUT IN NEW VALUE + 000527' 205240 040000 06100 MOVSI T,GLOBAL + 000530' 437240 002222' 06110 IORB T,SYM + 000531' 202242 000000 06120 MOVEM T,(R) ;PUT IN NEW SYM AS GLOBAL + 000532' 200100 002213' 06130 MOVE R,ESTU + + 000533' 325100 000134' 06150 DEF3: JUMPGE R,RET ;PATCH IN VALUE FOR UNDEF SYM ENTRY + 000534' 200240 002222' 06160 MOVE T,SYM + 000535' 312242 000000 06170 CAME T,(R) + 000536' 254000 000553' 06180 JRST DEF4 + 000537' 200140 002224' 06190 MOVE S,DEFV + 000540' 335002 000001 06200 SKIPGE, 1(R) + 000541' 210140 000003 06210 MOVN S,S + 000542' 261040 000002 06220 PUSH P,R + 000543' 200102 000001 06230 MOVE R,1(R) + 000544' 260040 001404' 06240 PUSHJ P,FETCH + 000545' 254000 000123' 06250 JRST ERR + 000546' 270140 000005 06260 ADD S,T + 000547' 542140 000005 06270 HRRM S,T + 000550' 260040 001376' 06280 PUSHJ P,DEP + 000551' 262040 000002 06290 POP P,R + 000552' 260040 000470' 06300 PUSHJ P,REMUN + 000553' 270100 003436' 06310 DEF4: ADD R,[XWD 2,2] ;REMOVE THE NOW DEFINED SYMBOL + 000554' 254000 000533' 06320 JRST DEF3 + EDDT V.005A - EXEC MODE VERSION PAGE 16 + OP DECODER + + + 000555' 200120 002230' 06350 SETNAM: MOVE R,@SYMP ;SET PROGRAM NAME - DOLLAR COLON + 000556' 200200 000002 06360 SET1: MOVE W,R + 000557' 325100 000125' 06370 SET2: JUMPGE R,UNDEF + 000560' 200242 000000 06380 MOVE T,(R) + 000561' 270100 003436' 06390 ADD R,[XWD 2,2] + 000562' 603240 740000 06400 TLNE T,PNAME + 000563' 254000 000557' 06410 JRST SET2 + 000564' 312240 002222' 06420 CAME T,SYM + 000565' 254000 000556' 06430 JRST SET1 + 000566' 202200 002212' 06440 MOVEM W,PRGM + 000567' 254000 000134' 06450 JRST RET + + 000570' 665000 000300 06470 MULT: TLOA F,PTF+MLF ;* + 000571' 661000 040100 06480 DIVD: TLO F,DVF+PTF ;SINGLE QUOTE + 000572' 254000 000026' 06490 JRST L1 + + 000573' 254000 000575' 06510 ASSEM: JRST PLUS ;# + 000574' 661000 000002 06520 MINUS: TLO F,MF + 000575' 661000 000100 06530 PLUS: TLO F,PTF + 000576' 254000 000023' 06540 JRST LIS2 + + 000577' 311040 003441' 06560 LPRN: CAML P,[XWD LPDL-4,0] ;LEFT PARENTHESIS + 000600' 254000 000123' 06570 JRST ERR + 000601' 261040 000000 06580 PUSH P,F ;RECURSE FOR OPEN PAREN + 000602' 261040 002201' 06590 PUSH P,WRD + 000603' 261040 002204' 06600 PUSH P,FRASE + 000604' 261040 002210' 06610 PUSH P,FRASE1 + 000605' 350000 002203' 06620 AOS,PRNC + 000606' 254000 000015' 06630 JRST LIS + + 000607' 515200 000020 06650 INDIRECT: HRLZI W,20 ;@ + 000610' 437200 002201' 06660 IORB W,WRD + 000611' 661000 000001 06670 TLO F,QF + 000612' 254000 000023' 06680 JRST LIS2 + + 000613' 200100 000005 06700 ACCF: MOVE R,T ;COMMA + 000614' 513000 000005 06710 HLLZS T + 000615' 135300 003442' 06720 LDB W1,[POINT 3,WRD,2] ;CHECK FOR IO INSTRUCTION + 000616' 231300 000007 06730 IDIVI W1,7 + 000617' 242106 000027 06740 LSH R,27(W1) + 000620' 270240 000002 06750 ADD T,R + 000621' 273240 002201' 06760 ADDB T,WRD + 000622' 254000 000624' 06770 JRST SPACE+1 + + 000623' 603000 000001 06790 SPACE: TLNE F,QF + 000624' 661000 100000 06800 TLO F,TIF + 000625' 621000 000102 06810 SPAC1: TLZ F,MF+PTF + 000626' 254000 000022' 06820 JRST LIS1 + EDDT V.005A - EXEC MODE VERSION PAGE 17 + OP DECODER + + + 000627' 607000 000001 06850 RPRN: TLNN F,QF ;) + 000630' 201240 000000 06860 MOVEI T,0 + 000631' 204240 000005 06870 MOVS T,T + 000632' 375000 002203' 06880 SOSGE,PRNC + 000633' 254000 000123' 06890 JRST ERR + 000634' 262040 002210' 06900 POP P,FRASE1 + 000635' 262040 002204' 06910 POP P,FRASE + 000636' 262040 002201' 06920 POP P,WRD + 000637' 262040 000000 06930 POP P,F + 000640' 603000 000100 06940 TLNE F,PTF + 000641' 603000 000004 06950 TLNE F,SF + 000642' 254000 000646' 06960 JRST RPRN1 + 000643' 202240 002205' 06970 MOVEM T,SYL + 000644' 661000 000005 06980 TLO F,QF+SF + 000645' 254000 000030' 06990 JRST L1RPR + 000646' 273240 002201' 07000 RPRN1: ADDB T,WRD + 000647' 661000 000001 07010 TLO F,QF + 000650' 254000 000027' 07020 JRST L1RPR-1 + EDDT V.005A - EXEC MODE VERSION PAGE 18 + OP DECODER + + + 07050 ;REGISTER EXAMINATION LOGIC + + 000651' 260040 000725' 07070 LINEF: PUSHJ P,DEPRA ;NEXT REGISTER + 07080 IFE EDDT&1,<PUSHJ P,CRNRB + 07090 JRST .+2> + 000652' 260040 002657' 07100 LI0: PUSHJ P,CRF + 000653' 350240 002226' 07110 AOS T,LLOC + 000654' 552240 002226' 07120 LI1: HRRZM T,LLOC + 000655' 552240 002227' 07130 HRRZM T,LLOCO + 000656' 260040 001543' 07140 PUSHJ P,PAD + 000657' 201240 000057 07150 MOVEI T,"/" + 000660' 603000 004000 07160 TLNE F,STF + 000661' 201240 000041 07170 MOVEI T,"!" + 000662' 260040 002676' 07180 PUSHJ P,TOUT + 000663' 621000 000010 07190 LI2: TLZ F,ROF + 000664' 260040 002662' 07200 PUSHJ P,LCT + 000665' 200100 002227' 07210 MOVE R,LLOCO + 000666' 260040 001404' 07220 PUSHJ P,FETCH + 000667' 254000 000123' 07230 JRST ERR + 000670' 661000 000010 07240 TLO F,ROF + 000671' 603000 004000 07250 TLNE F,STF + 000672' 254000 000013' 07260 JRST DD2 + 000673' 254000 001462' 07270 JRST CONSYM ;RETURN IS A POPJ + + 000674' 260040 000725' 07290 VARRW: PUSHJ P,DEPRA ;^ + 000675' 260040 002657' 07300 PUSHJ P,CRF + 000676' 370240 002226' 07310 SOS T,LLOC + 000677' 254000 000654' 07320 JRST LI1 + + 000700' 260040 000725' 07340 CARR: PUSHJ P,DEPRA ;CLOSE REGISTER + 000701' 254000 000007' 07350 IFN EDDT&1,<JRST DD1> + 07360 IFE EDDT&1,< PUSHJ P,TIN + 07370 CAIN T,15 + 07380 JRST .-2 + 07390 JRST DD1.5> + + 000702' 664000 002400 07410 OCON: TROA F,LF1+CF1 ;OPEN AS CONSTANT + 000703' 620000 000400 07420 OSYM: TRZ F,CF1 ;OPEN SYMBOLICALLY + 000704' 664000 002000 07430 TROA F,LF1 + 000705' 665000 004000 07440 SUPTYO: TLOA F,STF ;SUPPRESS TYPEOUT + 000706' 621000 004000 07450 SLASH: TLZ F,STF ;TYPE OUT REGISTER + 000707' 603000 000001 07460 TLNE F,QF + 000710' 552240 002226' 07470 HRRZM T,LLOC ;QUANTITY TYPED + 000711' 552240 002227' 07480 SLAS1: HRRZM T,LLOCO + 000712' 254000 000663' 07490 JRST LI2 + + 000713' 607000 000010 07510 ICON: TLNN F,ROF ;REGISTER OPENED OR ERR + 000714' 254000 000123' 07520 JRST ERR + 000715' 260040 001371' 07530 PUSHJ P,DEPRS + 000716' 254000 000711' 07540 JRST SLAS1 + + EDDT V.005A - EXEC MODE VERSION PAGE 19 + OP DECODER + + + 000717' 260040 001371' 07580 TAB: PUSHJ P,DEPRS ;OPEN REGISTER OF Q + 000720' 201245 777777 07590 MOVEI T,-1(T) + 000721' 202240 002226' 07600 MOVEM T,LLOC + 000722' 561240 700000 07610 HRROI T,700000 ;3 RUBOUTS + 000723' 260040 002170' 07620 PUSHJ P,TEXTT + 000724' 254000 000652' 07630 JRST LI0 + + 000725' 603000 000010 07650 DEPRA: TLNE F,ROF ;IF REGISTER IS BEING CHANGED + 000726' 607000 000001 07660 TLNN F,QF ;REMOVE ALL PREVIOUS UNDEFINED + 000727' 254000 001371' 07670 JRST DEPRS ;SYMBOL REFERENCES TO IT + 000730' 200100 002213' 07680 MOVE R,ESTU + 000731' 202300 002213' 07690 MOVEM W1,ESTU + 000732' 325100 001371' 07700 DEPRA2: JUMPGE R,DEPRS + 000733' 550202 000001 07710 HRRZ W,1(R) + 000734' 316200 002227' 07720 CAMN W,LLOCO + 000735' 260040 000470' 07730 PUSHJ P,REMUN + 000736' 270100 003436' 07740 ADD R,[XWD 2,2] + 000737' 254000 000732' 07750 JRST DEPRA2 + + 000740' 664000 002400 07770 EQUAL: TROA F,LF1+CF1 ;= + 000741' 620000 000400 07780 PSYM: TRZ F,CF1 ;@ + 000742' 660000 002000 07790 TRO F,LF1 + 000743' 260040 001462' 07800 PUSHJ P,CONSYM + 000744' 254000 000134' 07810 JRST RET + + 000745' 242240 777742 07830 R50PNT: LSH T,-36 ;RADIX 50 SYMBOL PRINTER + 000746' 620240 000003 07840 TRZ T,3 + 000747' 260040 002003' 07850 PUSHJ P,TOC + 000750' 260040 002664' 07860 PUSHJ P,TSPC + 000751' 201300 002206' 07870 MOVEI W1,LWT ;SETUP FOR SPT + 000752' 254000 002030' 07880 JRST SPT + + 000753' 211340 000006 07900 SIXBP: MOVNI W2,6 ;SIXBIT PRINTER + 000754' 200300 002206' 07910 MOVE W1,LWT + 000755' 201240 000000 07920 SIXBP1: MOVEI T,0 + 000756' 245240 000006 07930 ROTC T,6 + 000757' 271240 000040 07940 ADDI T,40 + 000760' 260040 002676' 07950 PUSHJ P,TOUT + 000761' 341340 000755' 07960 AOJL W2,SIXBP1 + 000762' 263040 000000 07970 POPJ P, + EDDT V.005A - EXEC MODE VERSION PAGE 20 + OP DECODER + + + 08000 ;MODE CONTROL SWITCHES + + 000763' 201100 000432 08020 TEXO: MOVEI R,TEXTT-HLFW ;$T ASSUME 7 BIT ASCII + 000764' 200240 002202' 08030 MOVE T,WRD2 + 000765' 306240 000006 08040 CAIN T,6 ;CHECK FOR $6T + 000766' 201100 777215 08050 MOVEI R,SIXBP-HLFW ;SET MODE SWITCH FOR SIXBIT + 000767' 306240 000005 08060 CAIN T,5 ;CHECK FOR $5T + 000770' 201100 777207 08070 MOVEI R,R50PNT-HLFW ;SET MODE SWITCH FOR RADIX 50 + 000771' 271100 777456 08080 HWRDS: ADDI R,HLFW-TFLOT ;H + 000772' 271100 000371 08090 SFLOT: ADDI R,TFLOT-PIN ;F + 000773' 271100 777464 08100 SYMBOL: ADDI R,PIN-FTOC ;S + 000774' 271100 002003' 08110 CON: ADDI R,FTOC ;C + 000775' 552100 000010 08120 HRRZM R,SCH + 000776' 254000 001011' 08130 JRST BASE1 + + 000777' 622000 000001 08150 RELA: TRZE F,Q2F ;CHANGE ADDRESS MODE TO RELATIE + 001000' 254000 001005' 08160 JRST BASECH + 001001' 201100 777542 08170 MOVEI R,PADSO-TOC + 001002' 271100 002003' 08180 ABSA: ADDI R,TOC ;A + 001003' 552100 000011 08190 HRRZM R,AR + 001004' 254000 001011' 08200 JRST BASE1 + + 001005' 200240 002202' 08220 BASECH: MOVE T,WRD2 ;$NR CHANGE OUTPUT RADIX TO N, N>1 + 001006' 305240 000002 08230 CAIGE T,2 + 001007' 254000 000123' 08240 JRST ERR + 001010' 552240 000012 08250 HRRZM T,ODF + 001011' 204140 003432' 08260 BASE1: MOVS S,[XWD SCHM,SCH] + 001012' 607000 010000 08270 TLNN F,CCF + 001013' 254000 000022' 08280 JRST LIS1 + 001014' 251140 002311' 08290 BLT S,ODFM ;WITH $$, MAKE MODES PERMANENT + 001015' 254000 000134' 08300 JRST RET + + 001016' 202240 002206' 08320 SEMIC: MOVEM T,LWT ;SEMICOLON TYPES IN CURRENT MODE + 001017' 254020 000010 08330 JRST @SCH + EDDT V.005A - EXEC MODE VERSION PAGE 21 + OP DECODER + + 08350 ;GO AND EXECUTE LOGIC + + 001020' 505240 254000 08370 GO: HRLI T,254000 ;G + 001021' 663000 000001 08380 TLOE F,QF + 001022' 254000 001026' 08390 JRST XEC0 + 001023' 332240 002234' 08400 IFN EDDT&1,< SKIPE T,STARTA> ;LOAD TAPE START ADDRESS + 08410 IFE EDDT&1,< HRR T,JOBSA> ;GET STARTING ADDRESS + + 001024' 607000 000001 08430 XEC: TLNN F,QF ;X + 001025' 254000 000123' 08440 JRST ,ERR + 001026' 202240 002313' 08450 XEC0: MOVEM T,TEM + 001027' 260040 002657' 08460 PUSHJ P,CRF + 001030' 260040 002732' 08470 PUSHJ P,TTYLEV + 001031' 260040 001274' 08480 PUSHJ P,INSRTB + 001032' 265240 002637' 08490 JSP T,RESTORE + 001033' 256000 002313' 08500 XCT,TEM + 001034' 254000 000000' 08510 XEC1: JRST DDT ;USED AT PROC0 + 001035' 264000 002615' 08520 JSR,SAVE + 001036' 260040 001307' 08530 PUSHJ P,REMOVB + 001037' 260040 002657' 08540 PUSHJ P,CRF + 001040' 254000 000007' 08550 JRST DD1 + + EDDT V.005A - EXEC MODE VERSION PAGE 22 + OP DECODER + + 08580 ;BREAK POINT LOGIC + 08590 BP1: REPEAT NBP,< 0 ;JSR TO HERE FOR BREAKPOINT + 08600 JSA T, BCOM + 08610 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE + 08620 > + 001041' 000000 000000 0 ;JSR TO HERE FOR BREAKPOINT + 001042' 266240 001071' JSA T, BCOM + 001043' 000000 000000 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE + + 001044' 000000 000000 0 ;JSR TO HERE FOR BREAKPOINT + 001045' 266240 001071' JSA T, BCOM + 001046' 000000 000000 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE + + 001047' 000000 000000 0 ;JSR TO HERE FOR BREAKPOINT + 001050' 266240 001071' JSA T, BCOM + 001051' 000000 000000 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE + + 001052' 000000 000000 0 ;JSR TO HERE FOR BREAKPOINT + 001053' 266240 001071' JSA T, BCOM + 001054' 000000 000000 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE + + 001055' 000000 000000 0 ;JSR TO HERE FOR BREAKPOINT + 001056' 266240 001071' JSA T, BCOM + 001057' 000000 000000 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE + + 001060' 000000 000000 0 ;JSR TO HERE FOR BREAKPOINT + 001061' 266240 001071' JSA T, BCOM + 001062' 000000 000000 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE + + 001063' 000000 000000 0 ;JSR TO HERE FOR BREAKPOINT + 001064' 266240 001071' JSA T, BCOM + 001065' 000000 000000 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE + + 001066' 000000 000000 0 ;JSR TO HERE FOR BREAKPOINT + 001067' 266240 001071' JSA T, BCOM + 001070' 000000 000000 0 ;HOLDS INSTRUCTION WHILE BREAKPOINT IS IN PLACE + + 001043' 08640 B1INS=BP1+2 + 001066' 08650 BPN=.-3 + EDDT V.005A - EXEC MODE VERSION PAGE 23 + OP DECODER + + + 001071' 000000 000000 08680 BCOM: 0 + 001072' 262240 001241' 08690 POP T,LEAV ;MOVE INSTRUCTION TO LEAV + 001073' 201245 001175 08700 MOVEI T,B1SKP-B1INS+1(T) + 001074' 542240 001103' 08710 HRRM T,BCOM3 ;CONDITIONAL BREAK SETUP + 001075' 201245 000001 08720 MOVEI T,B1CNT-B1SKP(T) + 001076' 542240 001105' 08730 HRRM T,BCOM2 ;PROCEDE COUNTER SETUP + 001077' 200245 776601 08740 MOVE T,BP1-B1CNT(T) + 001100' 621240 010000 08750 IFN EDDT&1,< TLZ T,010000 ;TURN OFF USER MODE BIT> + 001101' 502240 001122' 08760 HLLM T,LEAV1 ;SAVE FLAGS FOR RESTORING + 001102' 250240 001071' 08770 EXCH T,BCOM + + 001103' 332000 002237' 08790 BCOM3: SKIPE B1SKP ;ADDR MOD TO LOOK AT COND. INST. + 001104' 256020 001103' 08800 XCT @.-1 + 001105' 377000 002240' 08810 BCOM2: SOSG B1CNT ;ADDR MOD TO LOOK AT PROCEED COUNTER + 001106' 254000 001123' 08820 JRST BREAK + + 001107' 202240 002274' 08840 MOVEM T,AC0+T + 001110' 135240 003443' 08850 LDB T,[POINT 9,LEAV,8] ;GET INSTRUCTION + 001111' 301240 000264 08860 CAIL T,264 ;JSR + 001112' 303240 000266 08870 CAILE T,266 ;JSA,JSP + 001113' 606240 000700 08880 TRNN T,700 ;UUO + 001114' 254000 001175' 08890 JRST PROC1 ;MUST BE INTERPRETED + 001115' 302240 000260 08900 CAIE T,260 ;PUSHJ + 001116' 306240 000256 08910 CAIN T,256 ;XCT + 001117' 254000 001175' 08920 JRST PROC1 ;MUST BE INTERPRETED + 001120' 200240 002274' 08930 MOVE T,AC0+T + 001121' 254120 001122' 08940 JRST 2,@LEAV1 ;RESTORE FLAGS, GO TO LEAV + + 001122' 000000 001241' 08960 LEAV1: XWD 0,LEAV + EDDT V.005A - EXEC MODE VERSION PAGE 24 + OP DECODER + + 001123' 264000 002615' 08980 BREAK: JSR SAVE ;SAVE THE WORLD + 001124' 260040 001307' 08990 PUSHJ P,REMOVB ;REMOVE BREAKPOINTS + 001125' 370240 001103' 09000 SOS T,BCOM3 + 001126' 553000 000005 09010 HRRZS T ;GET ADDR OF BREAKPOINT JUST HIT + 001127' 260040 001545' 09020 PUSHJ P,PADSO ;PRINT ITS NAME- $NB + 001130' 205300 370000 09030 MOVSI W1,(ASCII />/) ;TYPE > FOR COND BREAK + 001131' 337020 001105' 09040 SKIPG @BCOM2 ;TEST PROCEED COUNTER + 001132' 205300 371740 09050 MOVSI W1,(ASCII />>/) ;TYPE >> FOR PROCEED COUNTER BREAK + 001133' 260040 002173' 09060 PUSHJ P,TEXT2 + 001134' 200240 001071' 09070 MOVE T,BCOM + 001135' 502240 002231' 09080 HLLM T, SAVPI ;SAVE PROCESSOR FLAGS + 001136' 201245 777777 09090 MOVEI T,-1(T) + 001137' 260040 001543' 09100 PUSHJ P,PAD ;TYPE PC AT BREAK + 001140' 550260 001103' 09110 HRRZ T,@BCOM3 + 001141' 542240 001167' 09120 HRRM T,PROC0 ;SETUP ADDRESS OF BREAK + 001142' 554260 001103' 09130 HLRZ T,@BCOM3 + 001143' 322240 001147' 09140 JUMPE T,BREAK1 ;TEST FOR REGISTER TO EXAMINE + 001144' 260040 002662' 09150 PUSHJ P,LCT ;PRINT TAB + 001145' 554260 001103' 09160 HLRZ T,@BCOM3 + 001146' 260040 000654' 09170 PUSHJ P,LI1 ;EXAMINE REGISTER C($NB)LEFT + 001147' 550100 001103' 09180 BREAK1: HRRZ R,BCOM3 + 001150' 275100 002236' 09190 SUBI R,B1ADR + 001151' 231100 000003 09200 IDIVI R,3 ;GET BREAKPOINT NUMBER-1 INTO R + 001152' 201140 000001 09210 MOVEI S,1 + 001153' 242142 000000 09220 LSH S,(R) + 001154' 260040 002714' 09230 PUSHJ P,LISTEN ;DONT PROCEED IF TTY KEY HIT + 001155' 616140 002266' 09240 TDNN S,AUTOPI ;DONT PROCEED IF NOT AUTOMATIC + 001156' 254000 000134' 09250 JRST RET ;DONT PROCEED + 001157' 254000 001165' 09260 JRST PROCD1 + + 001160' 607000 000001 09280 PROCEDE: TLNN F,QF ;N$P ;PROCEED AT A BREAKPOINT + 001161' 201240 000001 09290 MOVEI T,1 + 001162' 202260 001105' 09300 MOVEM T,@BCOM2 + 001163' 550100 001103' 09310 HRRZ R,BCOM3 + 001164' 260040 001361' 09320 PUSHJ P,AUTOP + 001165' 260040 002657' 09330 PROCD1: PUSHJ P,CRF + 001166' 260040 002732' 09340 PUSHJ P,TTYLEV + 001167' 551100 001034' 09350 PROC0: HRRZI R,XEC1 ;MODIFIED TO ADDR OF BREAKPOINT + 001170' 260040 001404' 09360 PUSHJ P,FETCH + 001171' 254000 001246' 09370 JRST BPLUP1 ;ONLY GET HERE IF MEMORY SHRANK + 001172' 202240 001241' 09380 MOVEM T,LEAV + 001173' 260040 001274' 09390 PUSHJ P,INSRTB + 001174' 254000 001200' 09400 JRST PROC2 + + 001175' 200240 002274' 09420 PROC1: MOVE T,AC0+T + 001176' 264000 002615' 09430 JSR SAVE + 001177' 255000 000000 09440 JFCL + 001200' 201200 000100 09450 PROC2: MOVEI W,100 + 001201' 202200 002314' 09460 MOVEM W,TEM1 ;SETUP MAX LOOP COUNT + 001202' 254000 001211' 09470 JRST IXCT5 + EDDT V.005A - EXEC MODE VERSION PAGE 25 + OP DECODER + + 09490 IXCT4: IFE EDDT&1,< SUBI T,041 + 09500 JUMPE T,BPLUP + 09510 AOJGE T,IXCT6> ;DONT PROCEDE FOR INIT + 09520 ;DONT INTERPRET FOR SYSTEM UUOS + 001203' 202100 000040 09530 MOVEM R,40 ;INTERPRET FOR NON-SYSTEM UUOS + 001204' 201100 000041 09540 MOVEI R,41 + 001205' 371000 002314' 09550 IXCT: SOSL TEM1 + 001206' 260040 001404' 09560 PUSHJ P,FETCH + 001207' 254000 001245' 09570 JRST BPLUP ;BREAKPOINT LOOPING OR FETCH FAILED + 001210' 202240 001241' 09580 MOVEM T,LEAV + 001211' 09590 IXCT5: IFN EDDT&1,< + 001211' 135240 003443' 09600 LDB T,[POINT 9,LEAV,8] ;GET INSTRUCTION + 001212' 306240 000254 09610 CAIN T,254 ;DON'T DO ANYTHING TO JRST IN EXEC MODE + 001213' 254000 001240' 09620 JRST IXCT6> + 001214' 515740 002267' 09630 HRLZI 17,AC0 + 001215' 251740 000017 09640 BLT 17,17 + 001216' 201260 001241' 09650 MOVEI T,@LEAV + 001217' 137240 003444' 09660 DPB T,[POINT 23,LEAV,35] ;STORE EFFECTIVE ADDRESS + 001220' 135300 003445' 09670 LDB W1,[POINT 4,LEAV,12] ;PICK UP AC FIELD + 001221' 135240 003443' 09680 LDB T,[POINT 9,LEAV,8] ;PICK UP INSTRUCTION FIELD + 001222' 201040 003540' 09690 MOVEI P,PS + 001223' 306240 000260 09700 CAIN T,260 + 001224' 254000 001251' 09710 JRST IPUSHJ ;INTERPRET PUSHJ + + 001225' 306240 000264 09730 CAIN T,264 + 001226' 254000 001261' 09740 JRST IJSR ;INTERPRET JSR + 001227' 306240 000265 09750 CAIN T,265 + 001230' 254000 001270' 09760 JRST IJSP ;INTERPRET JSP + 001231' 306240 000266 09770 CAIN T,266 + 001232' 254000 001255' 09780 JRST IJSA ;INTERPRET JSA + 001233' 200100 001241' 09790 MOVE R,LEAV + 001234' 606240 000700 09800 TRNN T,700 + 001235' 254000 001203' 09810 JRST IXCT4 ;INTERPRET UUO + 001236' 306240 000256 09820 CAIN T,256 + 001237' 254000 001205' 09830 JRST IXCT ;INTERPRET XCT + + 001240' 265240 002637' 09850 IXCT6: JSP T,RESTORE + 001241' 000000 000000 09860 LEAV: 0 ;INSTRUCTION MODIFIED + 001242' 254020 001071' 09870 JRST @BCOM + 001243' 350000 001071' 09880 AOS BCOM + 001244' 254020 001071' 09890 JRST @BCOM + + 001245' 260040 001307' 09910 BPLUP: PUSHJ P,REMOVB ;BREAKPOINT PROCEED ERROR + 001246' 264000 002615' 09920 BPLUP1: JSR SAVE + 001247' 255000 000000 09930 JFCL + 001250' 254000 000123' 09940 JRST ERR + EDDT V.005A - EXEC MODE VERSION PAGE 26 + OP DECODER + + + 001251' 137300 003446' 09970 IPUSHJ: DPB W1,[POINT 4,CPUSHP,12] ;STORE AC FIELD INTO A PUSH + 001252' 402000 002210' 09980 CLEARM,TEM3 + 001253' 200240 001241' 09990 MOVE T,LEAV + 001254' 254000 002640' 10000 JRST RESTR1 + + 001255' 200240 001071' 10020 IJSA: MOVE T,BCOM ;INTERPRET JSA + 001256' 504240 001241' 10030 HRL T,LEAV + 001257' 250246 002267' 10040 EXCH T,AC0(W1) + 001260' 254000 001263' 10050 JRST IJSR2 + + 001261' 200240 001071' 10070 IJSR: MOVE T,BCOM ;INTERPRET JSR + 001262' 500240 002231' 10080 HLL T,SAVPI + 001263' 200100 001241' 10090 IJSR2: MOVE R,LEAV + 001264' 260040 001376' 10100 PUSHJ P,DEP + 001265' 354240 001241' 10110 AOSA T,LEAV + 001266' 200240 001241' 10120 IJSR3: MOVE T,LEAV + 001267' 254000 002637' 10130 JRST RESTORE + + 001270' 200200 001071' 10150 IJSP: MOVE W,BCOM ;INTERPRET JSP + 001271' 500240 002231' 10160 HLL T,SAVPI + 001272' 202206 002267' 10170 MOVEM W,AC0(W1) + 001273' 254000 001266' 10180 JRST IJSR3 + + 10200 ;INSERT BREAKPOINTS + + 001274' 200140 003447' 10220 INSRTB: MOVE S,[JSR BP1] + 001275' 332103 001175 10230 INSRT1: SKIPE R,B1ADR-BP1(S) + 001276' 260040 001404' 10240 PUSHJ P,FETCH + 001277' 254000 001303' 10250 JRST INSRT3 + 001300' 202243 000002 10260 MOVEM T,B1INS-BP1(S) + 001301' 200240 000003 10270 MOVE T,S + 001302' 260040 001376' 10280 PUSHJ P,DEP + 001303' 271140 000003 10290 INSRT3: ADDI S,3 + 001304' 317140 003450' 10300 CAMG S,[JSR BPN] + 001305' 254000 001275' 10310 JRST INSRT1 + 001306' 263040 000000 10320 POPJ P, + + 10340 ;REMOVE BREAKPOINTS + + 001307' 201140 002263' 10360 REMOVB: MOVEI S,BNADR + 001310' 200243 776605 10370 REMOV1: MOVE T,B1INS-B1ADR(S) + 001311' 332103 000000 10380 SKIPE R,(S) + 001312' 260040 001376' 10390 PUSHJ P,DEP + 001313' 275140 000003 10400 REMOV3: SUBI S,3 + 001314' 301140 002236' 10410 CAIL S,B1ADR + 001315' 254000 001310' 10420 JRST REMOV1 + 001316' 254000 002721' 10430 IFN EDDT&1,<JRST TTYRET> + 10440 IFE EDDT&1,<POPJ P,> + + 10460 ;IN EXEC MODE, SAVE UP TTY STATUS + 10470 ;IN USER MODE, DONE BY SAVE + EDDT V.005A - EXEC MODE VERSION PAGE 27 + OP DECODER + + + 10500 ;ALL $B COMMANDS GET HERE IN FORM: <A>$<N>B + + + 001317' 623000 000001 10530 BPS: TLZE F,QF ;HAS <A> BEEN TYPED? + 001320' 254000 001327' 10540 JRST BPS1 ;YES + 001321' 622000 000001 10550 TRZE F,Q2F ;NO, HAS <N> BEEN TYPED? + 001322' 254000 001333' 10560 JRST BPS2 ;YES + 001323' 200240 003451' 10570 MOVE T,[XWD B1ADR,B1ADR+1] ;NO, COMMAND IS $B - CLEAR ALL BREAKPOINTS + 001324' 402000 002236' 10580 CLEARM B1ADR + 001325' 251240 002266' 10590 BLT T,AUTOPI ;CLEAR OUT ALL BREAKPOINTS AND AUTO PROCEDE REGESTER + 001326' 254000 000134' 10600 JRST RET + + 001327' 626000 000001 10620 BPS1: TRZN F,Q2F ;HAS <N> BEEN TYPED? + 001330' 254000 001345' 10630 JRST BPS3 ;NO + 001331' 200100 000005 10640 MOVE R,T ;YES, PROCESS THE COMMAND A$NB + 001332' 660000 000002 10650 TRO F,2 + 001333' 200240 002202' 10660 BPS2: MOVE T,WRD2 + 001334' 301240 000001 10670 CAIL T,1 + 001335' 303240 000010 10680 CAILE T,NBP + 001336' 254000 000123' 10690 JRST ERR + 001337' 221240 000003 10700 IMULI T,3 + 001340' 271240 002233' 10710 ADDI T,B1ADR-3 + 001341' 626000 000002 10720 TRZN F,2 + 001342' 254000 001615' 10730 JRST MASK2 + 001343' 250100 000005 10740 EXCH R,T + 001344' 254000 001356' 10750 JRST BPS5 + + 001345' 201100 002236' 10770 BPS3: MOVEI R,B1ADR ;PROCESS THE COMMAND A$B + 001346' 550202 000000 10780 BPS4: HRRZ W,(R) + 001347' 302205 000000 10790 CAIE W,(T) + 001350' 336002 000000 10800 SKIPN (R) + 001351' 254000 001356' 10810 JRST BPS5 + 001352' 271100 000003 10820 ADDI R,3 + 001353' 307100 002263' 10830 CAIG R,BNADR + 001354' 254000 001346' 10840 JRST BPS4 + 001355' 254000 000123' 10850 JRST ERR + 001356' 202242 000000 10860 BPS5: MOVEM T,(R) + 001357' 402002 000001 10870 CLEARM,1(R) + 001360' 402002 000002 10880 CLEARM,2(R) + + 001361' 275100 002236' 10900 AUTOP: SUBI R,B1ADR ;AUTO PROCEDE SETUP SUBROUTINE + 001362' 231100 000003 10910 IDIVI R,3 + 001363' 201140 000001 10920 MOVEI S,1 + 001364' 242142 000000 10930 LSH S,(R) + 001365' 412140 002266' 10940 ANDCAM S,AUTOPI + 001366' 603000 010000 10950 TLNE F,CCF + 001367' 436140 002266' 10960 IORM S,AUTOPI + 001370' 263040 000000 10970 POPJ P, + + EDDT V.005A - EXEC MODE VERSION PAGE 28 + OP DECODER + + 11000 ;FETCH AND DEPOSIT INTO MEMORY + + + 001371' 202240 002206' 11030 DEPRS: MOVEM T,LWT ;DEPOSIT REGISTER AND SAVE AS LWT + 001372' 200100 002227' 11040 DEPR: MOVE R,LLOCO ;QUAN TYPED IN REGIS EXAM + 001373' 623000 000010 11050 TLZE F,ROF + 001374' 607000 000001 11060 TLNN F,QF + 001375' 263040 000000 11070 POPJ P,0 + 001376' 606100 777760 11080 DEP: TRNN R,777760 + 001377' 254000 001402' 11090 JRST DEP1 + 11100 IFE EDDT&1,< HRRZ W,JOBREL + 11110 CAIL W,(R)> + + 001400' 202242 000000 11130 MOVEM T,0(R) + 001401' 263040 000000 11140 POPJ P,0 + 001402' 202242 002267' 11150 DEP1: MOVEM T,AC0(R) + 001403' 263040 000000 11160 POPJ P,0 + + 11180 FETCH: IFE EDDT&1,<HRRZ T,JOBREL + 11190 CAIGE T,(R) + 11200 POPJ P,> + 001404' 606100 777760 11210 TRNN R,777760 + 001405' 334242 002267' 11220 SKIPA T,AC0(R) + 001406' 200242 000000 11230 MOVE T,(R) + 001407' 254000 000373' 11240 JRST CPOPJ1 + EDDT V.005A - EXEC MODE VERSION PAGE 29 + OP DECODER + + 001410' 202240 002224' 11260 FIRARG: MOVEM T,DEFV + 001411' 661000 001000 11270 TLO F,FAF + 001412' 254000 001415' 11280 JRST ULIM1 + 001413' 661000 002000 11290 ULIM: TLO F,SAF + 001414' 552240 002225' 11300 HRRZM T,ULIMIT + 001415' 607000 000001 11310 ULIM1: TLNN F,QF + 001416' 254000 000123' 11320 JRST ERR + 001417' 254000 000020' 11330 JRST LIS0 + + + 001420' 331100 002212' 11360 LOOK: SKIPL R,PRGM ;LOOK UP SYMBOL + 001421' 200120 002230' 11370 MOVE R,@SYMP + 001422' 574160 002230' 11380 HLRE S,@SYMP + 001423' 240140 777777 11390 ASH S,-1 ;SETUP COUNT FOR LENGTH OF SYM TABLE + 001424' 621000 400000 11400 TLZ F,400000 + 001425' 515340 600000 11410 HRLZI W2,DELO+DELI + 001426' 202240 002313' 11420 MOVEM T,TEM + + 001427' 612342 000000 11440 LOOK1: TDNE W2,(R) + 001430' 254000 001452' 11450 JRST LOOK3 + 001431' 200242 000000 11460 MOVE T,(R) + 001432' 607240 740000 11470 TLNN T,PNAME ;NAME + 001433' 665340 100000 11480 TLOA W2,LOCAL + 001434' 334240 002313' 11490 SKIPA T,TEM + 001435' 254000 001452' 11500 JRST LOOK3 + 001436' 200202 000001 11510 MOVE W,1(R) + 001437' 430200 000005 11520 XOR W,T + 001440' 321200 001452' 11530 JUMPL W,LOOK3 + 001441' 274242 000001 11540 SUB T,1(R) + 001442' 321240 001452' 11550 JUMPL T,LOOK3 + 001443' 325000 001447' 11560 JUMPGE F,LOOK2 + 001444' 200202 000001 11570 MOVE W,1(R) + 001445' 274206 000001 11580 SUB W,1(W1) + 001446' 323200 001452' 11590 JUMPLE W,LOOK3 + 001447' 540300 000002 11600 LOOK2: HRR W1,R ;POINTER BEST VALUE SO FAR + 001450' 661000 400000 11610 TLO F,400000 + 001451' 322240 002027' 11620 JUMPE T,SPT0 + 001452' 270100 003436' 11630 LOOK3: ADD R,[XWD 2,2] + 001453' 331000 000002 11640 SKIPL R + 001454' 200120 002230' 11650 MOVE R, @SYMP + 001455' 343140 001427' 11660 AOJLE S,LOOK1 ;TERMINATING CONDITION + 001456' 200240 002313' 11670 MOVE T,TEM + 001457' 603000 400000 11680 TLNE F,400000 + 001460' 274246 000001 11690 SUB T,1(W1) + 001461' 254000 000373' 11700 JRST CPOPJ1 + EDDT V.005A - EXEC MODE VERSION PAGE 30 + OP DECODER + + + 001462' 202240 002206' 11730 CONSYM: MOVEM T,LWT + 001463' 606000 002000 11740 CONSM: TRNN F,LF1 + 001464' 254020 000010 11750 CONS1: JRST @SCH ;PIN OR FTOC + 001465' 602000 000400 11760 TRNE F,CF1 + 001466' 254000 002003' 11770 JRST FTOC + + 001467' 11790 PIN: ;PRINT INSTRUCTION + 001467' 641240 700000 11800 TLC T,700000 + 001470' 647240 700000 11810 TLCN T,700000 + 001471' 254000 001572' 11820 JRST INOUT ;IN-OUT INSTRUCTION OR NEG NUM + 001472' 404240 003452' 11830 AND T,[XWD 777000,0] + 001473' 322240 001504' 11840 JUMPE T,PI3 + 001474' 260040 003315' 11850 PUSHJ P,OPTYPE + 001475' 205240 777000 11860 MOVSI T,777000 + 001476' 404240 002206' 11870 AND T,LWT + 001477' 606000 000002 11880 TRNN F,ITF ;HAS INSTRUCTION BEEN TYPED? + 001500' 260040 001420' 11890 PUSHJ P,LOOK ;NO, LOOK IN SYMBOL TABLE + 001501' 664000 000200 11900 TROA F,NAF ;INSTRUCTION TYPED, ALOOW NEG ADDRESSES + 001502' 254000 001536' 11910 JRST HLFW ;NOT FOUND, OUTPUT AS HALFWORDS + 001503' 260040 002664' 11920 PUSHJ P,TSPC + 001504' 135240 003453' 11930 PI3: LDB T,[XWD 270400,LWT] ;GET AC FIELD + 001505' 322240 001511' 11940 JUMPE T,PI4 + 001506' 260040 001543' 11950 PUSHJ P,PAD + 001507' 201300 000054 11960 PI3A: MOVEI W1,"," + 001510' 260040 002171' 11970 PI3B: PUSHJ P,TEXT + 001511' 200300 002206' 11980 PI4: MOVE W1,LWT + 001512' 201240 000100 11990 MOVEI T,"@" + 001513' 603300 000020 12000 TLNE W1,20 ;CHECK FOR INDIRECT BIT + 001514' 260040 002676' 12010 PUSHJ P,TOUT + 001515' 550240 002206' 12020 PI5: HRRZ T,LWT + 001516' 135300 003454' 12030 LDB W1,[XWD 331100,LWT] ;INSTRUCTION BITS + 001517' 301300 000240 12040 CAIL W1,240 + 001520' 303300 000247 12050 CAILE W1,247 + 001521' 254000 001534' 12060 JRST PI8 + 001522' 260040 001564' 12070 PUSHJ P,PADS3A + 001523' 620000 000200 12080 PI7: TRZ F,NAF + 001524' 135100 003455' 12090 LDB R,[XWD 220400,LWT] ;INDEX REGISTER CHECK + 001525' 322100 001547' 12100 JUMPE R,PADS1 ;EXIT + 001526' 201240 000050 12110 MOVEI T,"(" + 001527' 260040 002676' 12120 PUSHJ P,TOUT + 001530' 200240 000002 12130 MOVE T,R + 001531' 260040 001543' 12140 PI7.1: PUSHJ P,PAD + 001532' 201240 000051 12150 MOVEI T,")" + 001533' 254000 002676' 12160 JRST TOUT ;EXIT + + 001534' 260040 001543' 12180 PI8: PUSHJ P,PAD + 001535' 254000 001523' 12190 JRST PI7 + + EDDT V.005A - EXEC MODE VERSION PAGE 31 + OP DECODER + + + 001536' 201240 000050 12230 HLFW: MOVEI T,"(" ;PRINT AS HALF WORDS + 001537' 260040 002676' 12240 PUSHJ P,TOUT + 001540' 554240 002206' 12250 HLRZ T,LWT + 001541' 260040 001531' 12260 PUSHJ P,PI7.1 + 001542' 550240 002206' 12270 HRRZ T,LWT + + 001543' 405240 777777 12290 PAD: ANDI T,777777 ;PRINT ADDRESS + 001544' 254020 000011 12300 JRST @AR ;PADSO OR PAD1 + 001545' 322240 002015' 12310 PADSO: JUMPE T,TOC2+1 + 001546' 260040 001420' 12320 PUSHJ P,LOOK + 001547' 263040 000000 12330 PADS1: POPJ P,0 + 001550' 200346 000001 12340 MOVE W2,1(W1) + 001551' 305240 000100 12350 CAIGE T,100 + 001552' 305340 000060 12360 CAIGE W2,60 + 001553' 254000 001563' 12370 JRST PADS3 + 001554' 202240 002313' 12380 MOVEM T,TEM + 001555' 325000 001562' 12390 JUMPGE F,PAD1 + 001556' 260040 002027' 12400 PUSHJ P,SPT0 + 001557' 201240 000053 12410 MOVEI T,"+" + 001560' 260040 002676' 12420 PADS1A: PUSHJ P,TOUT + 001561' 550240 002313' 12430 PADS2: HRRZ T,TEM + 001562' 254000 002003' 12440 PAD1: JRST TOC ;EXIT + + 001563' 200240 002313' 12460 PADS3: MOVE T,TEM + 001564' 602000 000200 12470 PADS3A: TRNE F,NAF + 001565' 305240 776000 12480 CAIGE T,776000 + 001566' 254000 002003' 12490 JRST TOC + 001567' 212240 002313' 12500 PADS3B: MOVNM T,TEM + 001570' 201240 000055 12510 PADS4: MOVEI T,"-" + 001571' 254000 001560' 12520 JRST PADS1A + + 001572' 650240 003456' 12540 INOUT: TDC T,[XWD -1,400000] ;IO INSTRUCTION OR NEG NUM + 001573' 656240 003456' 12550 TDCN T,[XWD -1,400000] + 001574' 254000 001567' 12560 JRST PADS3B ;TYPE AS NEG NUM + 001575' 135100 003457' 12570 LDB R,[POINT 3,T,12] + 001576' 137100 003460' 12580 DPB R,[POINT 6,T,8] ;MOVE IO BITS OVER FOR OP DECODER + 001577' 260040 003315' 12590 PUSHJ P,OPTYPE + 001600' 260040 002664' 12600 PUSHJ P,TSPC + 001601' 205240 077400 12610 MOVSI T,077400 + 001602' 404240 002206' 12620 AND T,LWT + 001603' 322240 001511' 12630 JUMPE T,PI4 + 001604' 260040 001420' 12640 PUSHJ P,LOOK ;LOOK FOR DEVICE NUMBER + 001605' 254000 001507' 12650 JRST PI3A + 001606' 200240 002313' 12660 MOVE T,TEM + 001607' 242240 777750 12670 LSH T,-30 + 001610' 260040 002003' 12680 PUSHJ P,TOC + 001611' 254000 001507' 12690 JRST PI3A + EDDT V.005A - EXEC MODE VERSION PAGE 32 + OP DECODER + + + 001612' 603000 000001 12720 MASK: TLNE F,QF + 001613' 254000 001620' 12730 JRST MASK1 + 001614' 201240 002235' 12740 MOVEI T,MSK + 001615' 201200 000001 12750 MASK2: MOVEI W,1 + 001616' 202200 002210' 12760 MOVEM W,FRASE1 + 001617' 254000 000340' 12770 JRST QUAN1 + 001620' 202240 002235' 12780 MASK1: MOVEM T,MSK + 001621' 254000 000134' 12790 JRST RET + + 001622' 661000 000020 12810 EFFEC: TLO F,LTF + 001623' 550240 000005 12820 HRRZ T,T + 001624' 201100 774000 12830 WORD: MOVEI R,322000-326000 ;JUMPE-JUMPN + 001625' 271100 326240 12840 NWORD: ADDI R,326000+40*T ;JUMPN T, + 001626' 506100 001650' 12850 HRLM R,SEAR2 + + 001627' 627000 000001 12870 SEARC: TLZN F,QF + 001630' 254000 000123' 12880 JRST ERR + 001631' 452240 002201' 12890 SETCAM T,WRD + 001632' 205240 777772 12900 MOVSI T,FRASE-DEN-1 ;PREVENT TYPE OUT OF DDT PARTS + 001633' 462005 002204' 12910 SETCMM FRASE(T) + 001634' 253240 001633' 12920 AOBJN T,.-1 + 001635' 200240 002225' 12930 MOVE T,ULIMIT + 001636' 603000 002000 12940 TLNE F,SAF + 001637' 661000 000001 12950 TLO F,1 + 001640' 260040 001723' 12960 PUSHJ P,SETUP1 + 001641' 260040 002657' 12970 PUSHJ P,CRF + 001642' 260040 001404' 12980 SEAR1: PUSHJ P,FETCH + 001643' 254000 001651' 12990 JRST SEAR2A + 001644' 603000 000020 13000 TLNE F,LTF ;CHECK FOR EFFECTIVE ADDRESS SEARCH + 001645' 254000 001677' 13010 JRST EFFEC0 + 001646' 444240 002201' 13020 EQV T,WRD + 001647' 404240 002235' 13030 AND T,MSK + 001650' 322240 001655' 13040 SEAR2: JUMPE T,SEAR3 ;OR JUMPN T + 001651' 260040 002714' 13050 SEAR2A: PUSHJ P,LISTEN ;QUIT ON TELETYPE + 001652' 253100 001642' 13060 AOBJN R,SEAR1 + 001653' 462000 002206' 13070 SETCMM LWT + 001654' 254000 000007' 13080 JRST DD1 + EDDT V.005A - EXEC MODE VERSION PAGE 33 + OP DECODER + + 001655' 260040 001404' 13100 SEAR3: PUSHJ P,FETCH + 001656' 254000 000123' 13110 JRST ERR + 001657' 202240 002206' 13120 MOVEM T,LWT + 001660' 202100 002207' 13130 MOVEM R,TEM2 + 001661' 202100 000005 13140 MOVEM R,T + 001662' 552100 002226' 13150 HRRZM R,LLOC + 001663' 552100 002227' 13160 HRRZM R,LLOCO + 001664' 260040 001543' 13170 PUSHJ P,PAD + 001665' 201240 000057 13180 MOVEI T,"/" + 001666' 260040 002676' 13190 PUSHJ P,TOUT + 001667' 260040 002662' 13200 PUSHJ P,LCT + 001670' 200240 002206' 13210 MOVE T,LWT + 001671' 260040 001462' 13220 PUSHJ P,CONSYM + 001672' 260040 002657' 13230 PUSHJ P,CRF + 001673' 462000 002206' 13240 SETCMM LWT + 001674' 462000 002313' 13250 SETCMM TEM + 001675' 200100 002207' 13260 SEAR4: MOVE R,TEM2 + 001676' 254000 001651' 13270 JRST SEAR2A + + 001677' 202100 002207' 13290 EFFEC0: MOVEM R,TEM2 + 001700' 201200 000100 13300 MOVEI W,100 + 001701' 202200 002313' 13310 MOVEM W,TEM + 001702' 200200 000005 13320 EFFEC1: MOVE W,T + 001703' 135100 003461' 13330 LDB R,[POINT 4,T,17] ;GET IR FIELD + 001704' 322100 001707' 13340 JUMPE R,EFFEC2 + 001705' 550242 002267' 13350 HRRZ T,AC0(R) + 001706' 270240 000004 13360 ADD T,W + 001707' 540100 000005 13370 EFFEC2: HRR R,T + 001710' 607200 000020 13380 TLNN W,20 ;INDIRECT BIT CHECK + 001711' 254000 001716' 13390 JRST EFFEC3 + 001712' 372000 002313' 13400 SOSE,TEM + 001713' 260040 001404' 13410 PUSHJ P,FETCH + 001714' 254000 001675' 13420 JRST SEAR4 + 001715' 254000 001702' 13430 JRST EFFEC1 + 001716' 200100 002207' 13440 EFFEC3: MOVE R,TEM2 + 001717' 444240 002201' 13450 EQV T,WRD + 001720' 405240 777777 13460 ANDI T,777777 + 001721' 254000 001650' 13470 JRST SEAR2 + + EDDT V.005A - EXEC MODE VERSION PAGE 34 + OP DECODER + + + 001722' 661000 000020 13510 SETUP: TLO F,20 ;ZERO + 001723' 271240 000001 13520 SETUP1: ADDI T,1 ;YANK,VERIFY,SEARCHES + 001724' 607000 000001 13530 TLNN F,QF + 001725' 200260 002230' 13540 SETUP2: MOVE T,@SYMP + 001726' 550240 000005 13550 HRRZ T,T + 001727' 202240 002225' 13560 MOVEM T,ULIMIT + 001730' 550220 002230' 13570 HRRZ W,@SYMP + 001731' 315200 000005 13580 CAMGE W,T + 001732' 607000 000020 13590 TLNN F,20 + 13600 IFE EDDT&1,< CAML T,JOBREL> + 001733' 254000 001735' 13610 IFN EDDT&1,< JRST .+2> + + 001734' 254000 000123' 13630 JRST ERR + 001735' 550100 002224' 13640 HRRZ R,DEFV + 001736' 607000 001000 13650 TLNN F,FAF + 001737' 201100 000000 13660 MOVEI R,0 + 001740' 311100 002225' 13670 CAML R,ULIMIT + 001741' 254000 000123' 13680 JRST ERR + 001742' 202100 002224' 13690 MOVEM R,DEFV + 001743' 200200 000002 13700 MOVE W,R + 001744' 274200 002225' 13710 SUB W,ULIMIT + 001745' 506200 000002 13720 HRLM W,R + 001746' 263040 000000 13730 POPJ P,0 + + 001747' 607000 010000 13750 ZERO: TLNN F,CCF + 001750' 254000 000123' 13760 JRST ERR + 001751' 260040 001722' 13770 PUSHJ P,SETUP + 001752' 602100 777760 13780 ZERO1: TRNE R,777760 + 001753' 254000 001757' 13790 JRST ZERO2 + 001754' 402002 002267' 13800 CLEARM,AC0(R) + 001755' 253100 001752' 13810 AOBJN R,ZERO1 + 001756' 254000 000007' 13820 JRST DD1 + 001757' 550100 000002 13830 ZERO2: HRRZ R, R + 001760' 305100 000040 13840 CAIGE R,ZLOW + 001761' 201100 000040 13850 MOVEI R,ZLOW ;DON'T ZERO 20-ZLOW + 001762' 550140 000005 13860 HRRZ S,T + 001763' 301140 000000' 13870 CAIL S, DDT + 001764' 201140 000000' 13880 MOVEI S, DDT + 001765' 313140 000002 13890 CAMLE S,R + 001766' 265200 001776' 13900 JSP W,ZEROR + 001767' 550100 000002 13910 HRRZ R,R + 001770' 307100 003610' 13920 CAIG R, DDTEND ; DON'T ZERO OUT + 001771' 201100 003610' 13930 MOVEI R, DDTEND ; DDT + 001772' 550140 000005 13940 HRRZ S,T + 001773' 313140 000002 13950 CAMLE S, R + 001774' 265200 001776' 13960 JSP W,ZEROR + 001775' 254000 000007' 13970 JRST DD1 + + 001776' 504100 000002 13990 ZEROR: HRL R,R + 001777' 402002 000000 14000 CLEARM,(R) + 002000' 271100 000001 14010 ADDI R, 1 + 002001' 251103 777777 14020 BLT R, -1(S) + EDDT V.005A - EXEC MODE VERSION PAGE 34-1 + OP DECODER + + 002002' 254004 000000 14030 JRST (W) + + EDDT V.005A - EXEC MODE VERSION PAGE 35 + OP DECODER + + + 002003' 14070 FTOC: ;NUMERIC OUTPUT SUBROUTINE + 002003' 550300 000012 14080 TOC: HRRZ W1,ODF + 002004' 306300 000012 14090 CAIN W1,12 + 002005' 254000 002017' 14100 JRST TOC4 + 002006' 246240 777735 14110 TOCA: LSHC T,-43 + 002007' 242300 777777 14120 LSH W1,-1 ;W1=T+1 + 002010' 235260 000012 14130 TOC1: DIVI T,@ODF + 002011' 506301 000000 14140 HRLM W1,0(P) + 002012' 322240 002014' 14150 TOC3: JUMPE T,TOC2 + 002013' 260040 002006' 14160 PUSHJ P,TOCA + 002014' 554241 000000 14170 TOC2: HLRZ T,0(P) + 002015' 271240 000060 14180 ADDI T,"0" + 002016' 254000 002676' 14190 CJTOUT: JRST TOUT ;DOES POPJ TO TOC2 OR EXIT + + 002017' 214300 000005 14210 TOC4: MOVM W1,T + 002020' 325240 002023' 14220 JUMPGE T,TOC5 + 002021' 201240 000055 14230 MOVEI T,"-" + 002022' 260040 002676' 14240 PUSHJ P,TOUT + 002023' 201240 000000 14250 TOC5: MOVEI T,0 + 002024' 260040 002010' 14260 PUSHJ P,TOC1 + 002025' 201240 000056 14270 TOC6: MOVEI T,"." + 002026' 254000 002676' 14280 JRST TOUT + + 14300 ;SYMBOL OUTPUT SUBROUTINE + + 002027' 552300 002223' 14320 SPT0: HRRZM W1,SPSAV ;SAVE POINTER TO TYPED SYM + 002030' 200240 002016' 14330 SPT: MOVE T,CJTOUT ;RADIX 50 SYMBOL PRINT + 002031' 202240 002050' 14340 SPT4: MOVEM T,SPTX ;SETUP OUTPUT DESTINATION + 002032' 135240 003462' 14350 LDB T,[POINT 32,0(W1),35] ;GET SYMBOL + 002033' 231240 000050 14360 SPT1: IDIVI T,50 + 002034' 506301 000000 14370 HRLM W1,0(P) + 002035' 322240 002037' 14380 JUMPE T,SPT2 + 002036' 260040 002033' 14390 PUSHJ P,SPT1 + 002037' 554241 000000 14400 SPT2: HLRZ T,0(P) + 002040' 322240 000374' 14410 JUMPE T,CPOPJ ;FLUSH NULL CHARACTERS + 002041' 271240 000257 14420 ADDI T,260-1 + 002042' 303240 000271 14430 CAILE T,271 + 002043' 271240 000007 14440 ADDI T,301-272 + 002044' 303240 000332 14450 CAILE T,332 + 002045' 275240 000070 14460 SUBI T,334-244 + 002046' 306240 000243 14470 CAIN T,243 + 002047' 201240 000256 14480 SPT3: MOVEI T,256 + 002050' 000000 000000 14490 SPTX: 0 ;JRST TOUT, OR IDPB T,R FROM OPEVAL + 002051' 263040 000000 14500 POPJ P, + + 002052' 201240 000002 14520 SYMD: MOVEI T,DELO/200000 ;$D ;DELETE LAST SYM & PRINT NEW + 002053' 550100 002223' 14530 HRRZ R,SPSAV ;PICK UP POINTER TO LAST SYM + 002054' 322100 000123' 14540 JUMPE R,ERR + 002055' 137240 003440' 14550 DPB T,[POINT 2,(R),1] ;STORE SEMI-DELETE BITS IN SYMBOL + 002056' 200240 002206' 14560 MOVE T,LWT + 002057' 254000 001462' 14570 JRST CONSYM ;PRINT OUT NEXT BEST SYMBOL + EDDT V.005A - EXEC MODE VERSION PAGE 36 + OP DECODER + + + 14600 ;FLOATING POINT OUTPUT + + 002060' 200100 000005 14620 TFLOT: MOVE A,T + 002061' 327100 002070' 14630 JUMPG A, TFLOT1 + 002062' 322100 002100' 14640 JUMPE A,FP1A + 002063' 213000 000002 14650 MOVNS A + 002064' 201240 000055 14660 MOVEI T,"-" + 002065' 260040 002676' 14670 PUSHJ P,TOUT + 002066' 623100 400000 14680 TLZE A,400000 + 002067' 254000 002100' 14690 JRST FP1A + 002070' 201240 000043 14700 TFLOT1: MOVEI T,"#" ; IF UNNORMALIZED FLOATING + 002071' 607100 000400 14710 TLNN A, 400 ; POINT NUMBER, SO INDICATE + 002072' 260040 002676' 14720 PUSHJ P, TOUT ; WITH "#" BEFORE NUMBER + + 002073' 201140 000000 14740 FP1: MOVEI B,0 + 002074' 315100 002162' 14750 CAMGE A,FT01 + 002075' 254000 002120' 14760 JRST FP4 + 002076' 311100 002150' 14770 CAML A,FT8 + 002077' 344140 002120' 14780 AOJA B,FP4 + 002100' 201200 000000 14790 FP1A: MOVEI C,0 + + 002101' 225100 000400 14810 FP3: MULI A,400 + 002102' 244142 777535 14820 ASHC B,-243(A) + 002103' 200100 000003 14830 MOVE A,B + 002104' 402000 002314' 14840 CLEARM,TEM1 + 002105' 260040 002135' 14850 PUSHJ P,FP7 + 002106' 260040 002025' 14860 PUSHJ P,TOC6 ;PRINT DECIMAL POINT + 002107' 211100 000010 14870 MOVNI A,10 + 002110' 270100 002314' 14880 ADD A,TEM1 + 002111' 200300 000004 14890 MOVE W1,C + 002112' 200240 000006 14900 FP3A: MOVE T,W1 + 002113' 225240 000012 14910 MULI T,12 + 002114' 260040 002144' 14920 PUSHJ P,FP7B + 002115' 332000 000006 14930 SKIPE,W1 + 002116' 341100 002112' 14940 AOJL A,FP3A + 002117' 263040 000000 14950 POPJ P, + + 002120' 211200 000006 14970 FP4: MOVNI C,6 + 002121' 201340 000000 14980 MOVEI W2,0 + 002122' 240340 000001 14990 FP4A: ASH W2,1 + 002123' 256003 002163' 15000 XCT,FCP(B) + 002124' 254000 002127' 15010 JRST FP4B + 002125' 164123 002164' 15020 FMPR A,@FCP+1(B) + 002126' 435340 000001 15030 IORI W2,1 + 002127' 346200 002122' 15040 FP4B: AOJN C,FP4A + 002130' 261043 002166' 15050 PUSH P,FSGN(B) + 002131' 260040 002101' 15060 PUSHJ P,FP3 + 002132' 262040 000006 15070 POP P,W1 + 002133' 200100 000007 15080 MOVE A,W2 + 002134' 260040 002171' 15090 PUSHJ P,TEXT + + EDDT V.005A - EXEC MODE VERSION PAGE 37 + OP DECODER + + 002135' 322100 002143' 15120 FP7: JUMPE A,FP7A1 + 002136' 231100 000012 15130 IDIVI A,12 + 002137' 350000 002314' 15140 AOS,TEM1 + 002140' 506141 000000 15150 FP7A: HRLM B,(P) + 002141' 322100 002143' 15160 JUMPE A,FP7A1 + 002142' 260040 002135' 15170 PUSHJ P,FP7 + + 002143' 554241 000000 15190 FP7A1: HLRZ T,(P) + 002144' 271240 000260 15200 FP7B: ADDI T,260 + 002145' 254000 002676' 15210 JRST TOUT + + 002146' 353473 426555 15230 353473426555 ;1.0E32 + 002147' 266434 157116 15240 266434157116 ;1.0E16 + 002150' 233575 360400 15250 FT8: 233575360400 ;1.0E8 + 002151' 216470 400000 15260 216470400000 ;1.0E4 + 002152' 207620 000000 15270 207620000000 ;1.0E2 + 002153' 204500 000000 15280 204500000000 ;1.0E1 + 002154' 201400 000000 15290 FT: 201400000000 ;1.0E0 + 002155' 026637 304365 15300 026637304365 ;1.0E-32 + 002156' 113715 126246 15310 113715126246 ;1.0E-16 + 002157' 146527 461671 15320 146527461671 ;1.0E-8 + 002160' 163643 334273 15330 163643334273 ;1.0E-4 + 002161' 172507 534122 15340 172507534122 ;1.0E-2 + 002162' 175631 463146 15350 FT01: 175631463146 ;1.0E-1 + 002163' 15360 FT0=FT01+1 + + 002163' 313104 002163' 15380 FCP: CAMLE A, FT0(C) + 002164' 315104 002154' 15390 CAMGE A, FT(C) + 002165' 000004 002163' 15400 Z FT0(C) + + 002166' 425320 000000 15420 FSGN: ASCII .E-. + 002167' 425260 000000 15430 ASCII .E+. + + 002170' 200300 000005 15450 TEXTT: MOVE W1,T + 002171' 607300 774000 15460 TEXT: TLNN W1,774000 ;LEFT JUSTIFIED UNLESS LEFT CHAR IS NULL + 002172' 242300 000035 15470 LSH W1,35 + 002173' 201240 000000 15480 TEXT2: MOVEI T, ;7 BIT ASCII TEXT OUTPUT SUBROUTINE0 + 002174' 246240 000007 15490 LSHC T,7 + 002175' 260040 002676' 15500 PUSHJ P,TOUT + 002176' 326300 002173' 15510 JUMPN W1,TEXT2 + 002177' 263040 000000 15520 POPJ P, + + + EDDT V.005A - EXEC MODE VERSION PAGE 38 + OP DECODER + + + 002200' 777662 777661' 15570 KILC: XWD -NSYMS,LOW + + 002201' 000000 000000 15590 WRD: 0 + 002202' 000000 000000 15600 WRD2: 0 + 002203' 000000 000000 15610 PRNC: 0 + + 002204' 000000 000000 15630 FRASE: 0 ;DONT CHANGE ORDER, SEE SEARC+3 + 002205' 000000 000000 15640 SYL: 0 + 002206' 000000 000000 15650 LWT: 0 + 002207' 000000 000000 15660 TEM2: 0 + 002210' 15670 FRASE1: + 002210' 000000 000000 15680 TEM3: 0 + 002211' 000000 000000 15690 DEN: 0 + + 002212' 000000 000000 15710 PRGM: 0 + 002213' 000000 000000 15720 ESTU: 0 + 002214' 000000 000000 15730 ESTUT: 0 + 002215' 000000 000000 15740 FSV: 0 + 002216' 000000 000000 15750 FRACT: 0 + 002217' 000000 000000 15760 FPWR: 0 + 002220' 000000 000000 15770 FTERM: 0 + 002221' 000000 000000 15780 FH: 0 + 002222' 000000 000000 15790 SYM: 0 + 002223' 000000 000000 15800 SPSAV: 0 ;POINTER TO LAST SYMBOL TYPED + 002224' 000000 000000 15810 DEFV: 0 + 002225' 000000 000000 15820 ULIMIT: 0 + 002226' 000000 000000 15830 LLOC: 0 + 002227' 000000 000000 15840 LLOCO: 0 + 002230' 000000 000036 15850 SYMP: XWD PID,JOBSYM + EDDT V.005A - EXEC MODE VERSION PAGE 39 + OP DECODER + + + 002231' 000000 000000 15880 SAVPI: 0 + 002232' 000000 001177 15890 1177 + 002233' 000000 000000 15900 SAVTTY: 0 + 002234' 000000 000000 15910 IFN EDDT&1,<STARTA: 0> ;START ADR FROM PTR + 002235' 777777 777777 15920 MSK: XWD -1,-1 + 002236' 000000 000000 15930 B1ADR: 0 + 002237' 000000 000000 15940 B1SKP: 0 + 002240' 000000 000000 15950 B1CNT: 0 + + 15970 REPEAT NBP*3-3, < 0> + 002241' 000000 000000 0 + 002242' 000000 000000 0 + 002243' 000000 000000 0 + 002244' 000000 000000 0 + 002245' 000000 000000 0 + 002246' 000000 000000 0 + 002247' 000000 000000 0 + 002250' 000000 000000 0 + 002251' 000000 000000 0 + 002252' 000000 000000 0 + 002253' 000000 000000 0 + 002254' 000000 000000 0 + 002255' 000000 000000 0 + 002256' 000000 000000 0 + 002257' 000000 000000 0 + 002260' 000000 000000 0 + 002261' 000000 000000 0 + 002262' 000000 000000 0 + 002263' 000000 000000 0 + 002264' 000000 000000 0 + 002265' 000000 000000 0 + 002263' 15990 BNADR=.-3 + 002266' 000000 000000 16000 AUTOPI: 0 + + 002267' 16020 AC0: BLOCK 17 + + 002306' 000000 000000 16040 AC17: 0 + + 002307' 000000 001467' 16060 SCHM: EXP PIN ;DO NOT CHANGE ORDER + 002310' 000000 001545' 16070 ARM: EXP PADSO + 002311' 000000 000010 16080 ODFM: EXP 10 + + 002312' 000000 000000 16100 SARS: 0 + 002313' 000000 000000 16110 TEM: 0 + 002314' 000000 000000 16120 TEM1: 0 + + EDDT V.005A - EXEC MODE VERSION PAGE 40 + OP DECODER + + + 16160 IFN EDDT&1&<EDDT>B36,< + + + 002315' 607000 000010 16190 PSR: TLNN F,ROF + 002316' 254000 000123' 16200 JRST ERR + 002317' 202240 002206' 16210 MOVEM T,LWT + 002320' 260040 001371' 16220 PUSHJ P,DEPRS + 002321' 552100 002224' 16230 HRRZM R,DEFV ;R CONTAINS LLOCO + 002322' 200240 000002 16240 MOVE T,R + 002323' 254000 002327' 16250 JRST PUN2 + + 002324' 641000 001001 16270 PUNCH: TLC F,FAF+QF + 002325' 643000 001001 16280 TLCE F,FAF+QF + 002326' 254000 000123' 16290 JRST ERR ;ONE ARGUMENT MISSING + 002327' 271240 000001 16300 PUN2: ADDI T,1 + 002330' 552240 002314' 16310 HRRZM T,TEM1 + 002331' 274240 002224' 16320 SUB T,DEFV + 002332' 323240 000123' 16330 JUMPLE T,ERR + + 002333' 201240 000004 16350 PUN1: MOVEI T,4 ;PUNCH 4 FEED HOLES + 002334' 260040 002450' 16360 PUSHJ P,FEED + 002335' 603000 000040 16370 TLNE F,CF ;PUNCH NON-ZERO BLOCKS? + 002336' 254000 002365' 16380 JRST PUNZ ;YES + 002337' 550100 002224' 16390 HRRZ R,DEFV + 002340' 435100 000037 16400 IORI R,37 + 002341' 271100 000001 16410 ADDI R,1 + 002342' 313100 002314' 16420 CAMLE R,TEM1 + 002343' 200100 002314' 16430 MOVE R,TEM1 + 002344' 250100 002224' 16440 EXCH R,DEFV + 002345' 200240 000002 16450 MOVE T,R + 002346' 274240 002224' 16460 SUB T,DEFV + 002347' 504100 000005 16470 HRL R,T + 002350' 325100 000134' 16480 JUMPGE R,RET ;EXIT OR PUNCH + + 002351' 200240 000002 16500 PBLK: MOVE T,R + 002352' 370200 000005 16510 SOS W,T ;INIT CHECKSUM + 002353' 260040 002440' 16520 PUSHJ P,PWRD + 002354' 260040 001404' 16530 PBLK1: PUSHJ P,FETCH + 002355' 254000 000123' 16540 JRST ERR + 002356' 270200 000005 16550 ADD W,T + 002357' 260040 002440' 16560 PUSHJ P,PWRD + 002360' 253100 002354' 16570 AOBJN R,PBLK1 + 002361' 200240 000004 16580 MOVE T,W + 002362' 260040 002440' 16590 PUSHJ P,PWRD + 002363' 254000 002333' 16600 JRST PUN1 + EDDT V.005A - EXEC MODE VERSION PAGE 41 + OP DECODER + + + 16630 ;PUNCH NON-ZERO BLOCKS + + 002364' 350000 002224' 16650 PUNZ0: AOS DEFV ;LOOK AT NEXT WORD + 002365' 550200 002224' 16660 PUNZ: HRRZ W,DEFV ;ENTER HERE - GET STARTING ADDRESS + 002366' 200100 000004 16670 MOVE R,W + 002367' 274200 002314' 16680 SUB W,TEM1 ;CALCULATE NEGATIVE LENGTH + 002370' 504100 000004 16690 HRL R,W ;SET UP AOBJN POINTER + 002371' 325100 000134' 16700 JUMPGE R,RET ;FINISHED? + 002372' 317100 003463' 16710 CAMG R,[XWD -40,0] ;BLOCK LONGER THAN 40? + 002373' 505100 777740 16720 HRLI R,-40 ;YES, FIX IT UP + 002374' 205300 400000 16730 MOVSI W1,400000 ;W1 NEGATIVE MEANS FLUSH 0 WORDS + 002375' 260040 001404' 16740 PUNZ2: PUSHJ P,FETCH ;GET WORD FROM MEMORY + 002376' 254000 000123' 16750 JRST ERR + 002377' 322240 003464' 16760 JUMPE T,[AOJA W1,PUNZ4] ;IF WORD IS 0, INDEX 0 WORD COUNTER + 002400' 201300 000000 16770 MOVEI W1,0 ;CLEAR 0 WORD COUNTER + 002401' 321300 002364' 16780 PUNZ4: JUMPL W1,PUNZ0 ;FLUSH 0 WORD, GET ANOTHER + 002402' 301300 000003 16790 CAIL W1,3 ; NOSKIP FOR 3RD 0 WORD AFTER NON 0 WORD + 002403' 354000 000002 16800 AOSA R ;ADVANCE R TO LAST ADR+1 + 002404' 253100 002375' 16810 AOBJN R,PUNZ2 + 002405' 270300 002224' 16820 ADD W1,DEFV ;CALCULATE DEFV-R+W1=-WORD COUNT + 002406' 274300 000002 16830 SUB W1,R + 002407' 506300 002224' 16840 HRLM W1,DEFV ;PUT -WC IN LEFT HALF OF FA + 002410' 250100 002224' 16850 EXCH R,DEFV ;SAVE ADR FOR NEXT BLOCK, GET POINTER + 002411' 254000 002351' 16860 JRST PBLK + + 16880 > + EDDT V.005A - EXEC MODE VERSION PAGE 42 + OP DECODER + + 16900 IFN EDDT&1&<EDDT>B36,< + + + 002412' 603000 000001 16930 LOADER: TLNE F,QF + 002413' 254000 000123' 16940 JRST ERR + 002414' 201240 000400 16950 MOVEI T,400 + 002415' 260040 002450' 16960 PUSHJ P,FEED + 002416' 200100 002614' 16970 MOVE R,LOADE + 002417' 200242 000000 16980 LOAD1: MOVE T,0(R) + 002420' 260040 002440' 16990 PUSHJ P,PWRD + 002421' 253100 002417' 17000 AOBJN R,LOAD1 + 002422' 201240 000100 17010 MOVEI T,100 + 002423' 260040 002450' 17020 LOAD2: PUSHJ P,FEED + 002424' 254000 000134' 17030 JRST RET + + 002425' 607000 000001 17050 BLKEND: TLNN F,QF ;BLOCK END + 002426' 200240 003465' 17060 MOVE T,[JRST 4,DDT] + 002427' 661240 254000 17070 TLO T,254000 ;JRST + 002430' 261040 000005 17080 PUSH P,T + 002431' 201240 000100 17090 MOVEI T,100 + 002432' 260040 002450' 17100 PUSHJ P,FEED + 002433' 262040 000005 17110 POP P,T + 002434' 260040 002440' 17120 PUSHJ P,PWRD + 002435' 260040 002440' 17130 PUSHJ P,PWRD ;EXTRA WORD FOR READER TO STOP ON + 002436' 201240 000500 17140 MOVEI T,500 + 002437' 254000 002423' 17150 JRST LOAD2 + + 002440' 201300 000006 17170 PWRD: MOVEI W1,6 + 002441' 241240 000006 17180 PWRD2: ROT T,6 + 002442' 710300 000020 17190 CONSZ PTPP,20 + 002443' 254000 002442' 17200 JRST .-1 + 002444' 710200 000050 17210 CONO PTPP,50 + 002445' 710140 000005 17220 DATAO PTPP,T + 002446' 367300 002441' 17230 SOJG W1,PWRD2 + 002447' 263040 000000 17240 POPJ P,0 + + 002450' 710300 000020 17260 FEED: CONSZ PTPP,20 + 002451' 254000 002450' 17270 JRST .-1 + 002452' 710200 000010 17280 CONO PTPP,10 + 002453' 710140 002455' 17290 DATAO PTPP,FEED1 + 002454' 366240 002450' 17300 SOJN T,FEED + 002455' 263040 000000 17310 FEED1: POPJ P,0 ;ADDRESS USED AS A CONSTANT + + 17330 > + EDDT V.005A - EXEC MODE VERSION PAGE 43 + OP DECODER + + 17350 IFN EDDT&1&<EDDT>B36,< + + + 002456' 661000 000020 17380 VERIFY: TLO F,LTF + 002457' 260040 001723' 17390 CORE: PUSHJ P,SETUP1 ;LOAD TAPES INTO CORE + 002460' 710600 000060 17400 CONO PTRR,60 + 002461' 710740 000010 17410 CORE1: CONSO PTRR,10 + 002462' 254000 002461' 17420 JRST .-1 + 002463' 710440 000005 17430 DATAI PTRR,T + 002464' 312240 002613' 17440 CAME T,LOADE-1 ;JRST 1 + 002465' 254000 002461' 17450 JRST CORE1 + 002466' 260040 002657' 17460 PUSHJ P,CRF + 002467' 260040 002540' 17470 PUSHJ P,BLOCK + + 002470' 260040 002532' 17490 CORE2: PUSHJ P,GETW + 002471' 311100 002224' 17500 CAML R,DEFV + 002472' 311100 002225' 17510 CAML R,ULIMIT + 002473' 254000 002526' 17520 JRST VER3 + 002474' 603000 000020 17530 TLNE F,LTF + 002475' 254000 002500' 17540 JRST VER2 + 002476' 260040 001376' 17550 PUSHJ P,DEP + 002477' 254000 002526' 17560 JRST VER3 + + 002500' 202240 002207' 17580 VER2: MOVEM T,TEM2 + 002501' 260040 001404' 17590 PUSHJ P,FETCH + 002502' 254000 000123' 17600 JRST ERR + 002503' 202240 002210' 17610 MOVEM T,TEM3 + 002504' 430240 002207' 17620 XOR T,TEM2 + 002505' 404240 002235' 17630 AND T,MSK + 002506' 322240 002526' 17640 JUMPE T,VER3 + 002507' 261040 000003 17650 PUSH P,S + 002510' 261040 000002 17660 PUSH P,R + 002511' 550240 000002 17670 HRRZ T,R + 002512' 260040 001543' 17680 PUSHJ P,PAD + 002513' 201240 000257 17690 MOVEI T,257 ;SLASH + 002514' 260040 002676' 17700 PUSHJ P,TOUT + 002515' 260040 002662' 17710 PUSHJ P,LCT + 002516' 200240 002210' 17720 MOVE T,TEM3 ;CORE CONTENTS + 002517' 260040 001462' 17730 PUSHJ P,CONSYM + 002520' 260040 002662' 17740 PUSHJ P,LCT + 002521' 200240 002207' 17750 MOVE T,TEM2 ;TAPE CONTENTS + 002522' 260040 001462' 17760 PUSHJ P,CONSYM + 002523' 260040 002657' 17770 PUSHJ P,CRF + 002524' 262040 000002 17780 POP P,R + 002525' 262040 000003 17790 POP P,S + 002526' 260040 002714' 17800 VER3: PUSHJ P,LISTEN + 002527' 344100 002470' 17810 AOJA R,CORE2 + 002530' 260040 002540' 17820 RUNEND: PUSHJ P,BLOCK + 002531' 254000 002530' 17830 JRST .-1 + + + 17860 > + EDDT V.005A - EXEC MODE VERSION PAGE 44 + OP DECODER + + 17880 IFN EDDT&1&<EDDT>B36,< + + + + 002532' 321140 002534' 17920 GETW: JUMPL S,GETW1 + 002533' 260040 002540' 17930 PUSHJ P,BLOCK + 002534' 200243 000001 17940 GETW1: MOVE T,1(S) + 002535' 252140 002536' 17950 AOBJP S,.+1 + 002536' 263040 000000 17960 POPJ P,0 + + 002537' 710600 000060 17980 BLOCKS: CONO PTRR,60 ;READ DATA BLOCKS + 002540' 710740 000010 17990 BLOCK: CONSO PTRR,10 + 002541' 254000 002540' 18000 JRST .-1 + 002542' 710440 000004 18010 DATAI PTRR,W + 002543' 321200 002547' 18020 JUMPL W,BLK1 + 002544' 202200 002234' 18030 MOVEM W,STARTA + 002545' 710600 000000 18040 CONO PTRR,0 ;TURN OFF READER + 002546' 254000 000007' 18050 JRST DD1 + 002547' 202200 000006 18060 BLK1: MOVEM W,W1 ;INIT CHECKSUM + 002550' 641200 777740 18070 TLC W,777740 + 002551' 643200 777740 18080 TLCE W,777740 + 002552' 254000 000123' 18090 JRST ERR ;BLOCK TOO BIG + 002553' 271200 000001 18100 ADDI W,1 + 002554' 552200 000002 18110 HRRZM W,R + 002555' 541200 003477' 18120 HRRI W,BUFF-1 + 002556' 202200 000003 18130 MOVEM W,S + 002557' 710740 000010 18140 BLK2: CONSO PTRR,10 + 002560' 254000 002557' 18150 JRST .-1 + 002561' 710400 000004 18160 BLKI PTRR,W + 002562' 254000 002565' 18170 JRST BLK3 + 002563' 270304 000000 18180 ADD W1,0(W) + 002564' 254000 002557' 18190 JRST BLK2 + 002565' 270304 000000 18200 BLK3: ADD W1,0(W) + 002566' 710740 000010 18210 CONSO PTRR,10 + 002567' 254000 002566' 18220 JRST .-1 + 002570' 710440 000004 18230 DATAI PTRR,W + 002571' 316200 000006 18240 CAMN W,W1 + 002572' 263040 000000 18250 POPJ P,0 + 002573' 710600 000000 18260 CONO PTRR,0 ;CHECKSUM ERROR + 002574' 254200 002537' 18270 JRST 4,BLOCKS + + 18290 ;R CONTAINS RIGHT HALF OF FIRST LINE + 18300 ;S CONTAINS (-WC,BUFF-1) + + + 18330 > + EDDT V.005A - EXEC MODE VERSION PAGE 45 + OP DECODER + + 18350 IFN EDDT&1&<EDDT>B36,< + + + 002575' 18380 LOADB: + + 000000 18400 PHASE 0 ;RIM10B CHECKSUM LOADER + 002575' 777762 000000 18410 XWD -16,0 + 002576' 710600 000060 18420 BEG: CONO PTRR,60 + 002577' 541400 000004 18430 HRRI AA,RD+1 + 002600' 710740 000010 18440 RD: CONSO PTRR,10 + 002601' 254000 000003 18450 JRST .-1 + 002602' 710470 000007 18460 DATAI PTRR,@TBL1-RD+1(AA) + 002603' 256010 000007 18470 XCT TBL1-RD+1(AA) + 002604' 256010 000012 18480 XCT TBL2-RD+1(AA) + 002605' 364400 000000 18490 AA: SOJA AA, + + 002606' 312740 000016 18510 TBL1: CAME CKSM,ADR + 002607' 270756 000001 18520 ADD CKSM,1(ADR) + 002610' 331740 000016 18530 SKIPL CKSM,ADR + + 002611' 254200 000001 18550 TBL2: JRST 4,BEG + 002612' 253700 000003 18560 AOBJN ADR,RD + 002613' 254000 000002 18570 ADR: JRST BEG+1 + 000017 18580 CKSM=ADR+1 + + 002614' 18600 DEPHASE + + 002614' 777761 002575' 18620 LOADE: XWD LOADB-.,LOADB + 18630 > + + EDDT V.005A - EXEC MODE VERSION PAGE 46 + OP DECODER + + + + 002615' 000000 000000 18680 SAVE: 0 ;SAVE THE ACS AND PI SYSTEM + 002616' 336000 002312' 18690 SKIPN SARS + 002617' 254000 002622' 18700 JRST SAV1 + 002620' 350000 002615' 18710 AOS SAVE + 002621' 254000 002631' 18720 JRST SAV5 + 002622' 18730 SAV1: IFN EDDT&1,< + 002622' 700640 002231' 18740 CONI PRS,SAVPI + 002623' 700620 002232' 18750 CONO PRS, @SAVPI+1> + 002624' 202740 002306' 18760 MOVEM 17,AC17 + 002625' 551740 002267' 18770 HRRZI 17,AC0 + 002626' 251740 002305' 18780 BLT 17,AC0+16 + 002627' 200240 002615' 18790 MOVE T, SAVE + 002630' 502240 002231' 18800 HLLM T, SAVPI + 002631' 476000 002312' 18810 SAV5: SETOM,SARS + 002632' 201040 003540' 18820 MOVEI P,PS + 18830 IFE EDDT&1,<PUSHJ P,TTYRET> ;IN USER MODE, GET INTO DDT MODE + 002633' 201000 000000 18840 MOVEI F,0 + 002634' 200240 003432' 18850 MOVE T,[XWD SCHM,SCH] + 002635' 251240 000012 18860 BLT T,ODF ;LOAD THE ACS WITH MODE SWITCHES + 002636' 254020 002615' 18870 JRST @SAVE + + 002637' 476000 002210' 18890 RESTORE: SETOM TEM3 ;RESTORE ACS AND PI SYSTEM + 002640' 542240 002615' 18900 RESTR1: HRRM T,SAVE + 002641' 200240 002231' 18910 MOVE T,SAVPI + 002642' 502240 002615' 18920 HLLM T, SAVE + 18930 IFN EDDT&1,< + 002643' 404240 002232' 18940 AND T, SAVPI+1 + 002644' 435240 002000 18950 IORI T, 2000 ;TURN ON CHANNELS + 002645' 202240 002231' 18960 MOVEM T, SAVPI> + 002646' 515740 002267' 18970 RES1: HRLZI 17,AC0 + 002647' 251740 000017 18980 BLT 17,17 + 002650' 402000 002312' 18990 SETZM SARS + 002651' 331000 002210' 19000 SKIPL,TEM3 + 002652' 261000 001071' 19010 CPUSHP: PUSH BCOM ;PROGRAM MODIFIED AT IPUSHJ + 002653' 700620 002231' 19020 IFN EDDT&1,< CONO PRS,@SAVPI> + 002654' 254120 002615' 19030 JRST 2,@SAVE + + EDDT V.005A - EXEC MODE VERSION PAGE 47 + OP DECODER + + + 002655' 201240 000015 19070 CRN: MOVEI T,15 ;CARRIAGE RETURN + 002656' 254000 002676' 19080 JRST TOUT + + 19100 IFE EDDT&1,< + 19110 CRNRB: PUSHJ P,CRN + 19120 MOVEI T,177 + 19130 JRST TOUT> + + 002657' 260040 002655' 19150 CRF: PUSHJ P,CRN + 002660' 201240 000012 19160 LF: MOVEI T,12 ;LINE FEED + 002661' 254000 002676' 19170 JRST TOUT + + 002662' 260040 002664' 19190 LCT: IFN EDDT&1,<PUSHJ P,TSPC + 002663' 260040 002664' 19200 PUSHJ P,TSPC> + 19210 IFE EDDT&1,<MOVEI T,11 + 19220 JRST TOUT> ;TYPE A TAB + + 002664' 201240 000040 19240 TSPC: MOVEI T,40 ;SPACE + 002665' 254000 002676' 19250 JRST TOUT + EDDT V.005A - EXEC MODE VERSION PAGE 48 + OP DECODER + + 19270 IFN EDDT&1,< ;EXECUTIVE MODE TELETYPE I/O + + 002666' 260040 002714' 19290 TIN: PUSHJ P,LISTEN ;TELETYPE CHARACTER INPUT + 002667' 254000 002666' 19300 JRST .-1 + 002670' 302240 000175 19310 CAIE T,175 + 002671' 306240 000176 19320 CAIN T,176 + 002672' 201240 000033 19330 MOVEI T,33 ;CHANGE ALL ALT MODES TO NEW + 002673' 306240 000177 19340 CAIN T,177 ;RUBOUT? + 002674' 254000 000127' 19350 JRST WRONG ;YES, TYPE XXX + 002675' 602240 000140 19360 TRNE T,140 ;DON'T ECHO CR,LF,ALT,TAB,BACK SPACE,ETC + 002676' 307240 000004 19370 TOUT: CAIG T,04 ;DON'T TYPE EOT OR LOWER CHARS + 002677' 263040 000000 19380 POPJ P, + 002700' 506241 000000 19390 HRLM T,(P) + 002701' 221240 200401 19400 IMULI T,200401 ;GENERATE PARITY + 002702' 404240 003466' 19410 AND T,[11111111] + 002703' 220240 003466' 19420 IMUL T,[11111111] + 002704' 544241 000000 19430 HLR T,(P) + 002705' 603240 000010 19440 TLNE T,10 + 002706' 640240 000200 19450 TRC T,200 ;MAKE PARITY EVEN + 002707' 712300 000020 19460 CONSZ TTYY,20 + 002710' 254000 002707' 19470 JRST .-1 + 002711' 712140 000005 19480 DATAO TTYY,T + 002712' 405240 000177 19490 ANDI T,177 ;FLUSH PARITY + 002713' 263040 000000 19500 POPJ P,0 + + 002714' 712340 000040 19520 LISTEN: CONSO TTYY,40 ;LISTEN FOR TTY + 002715' 263040 000000 19530 POPJ P, + 002716' 712040 000005 19540 DATAI TTYY,T + 002717' 405240 000177 19550 ANDI T,177 + 002720' 254000 000373' 19560 JRST CPOPJ1 + + 002721' 201240 003410 19580 TTYRET: MOVEI T,3410 + 002722' 201340 040000 19590 TTY1: MOVEI W2,40000 + 002723' 712300 000120 19600 CONSZ TTYY,120 + 002724' 367340 002723' 19610 SOJG W2,.-1 + 002725' 712240 002233' 19620 CONI TTYY,SAVTTY + 002726' 712040 000007 19630 DATAI TTYY,W2 + 002727' 506340 002233' 19640 HRLM W2,SAVTTY + 002730' 712205 000000 19650 CONO TTYY,(T) + 002731' 263040 000000 19660 POPJ P, + 002732' 200240 002233' 19670 TTYLEV: MOVE T,SAVTTY + 002733' 620240 000160 19680 TRZ T,160 + 002734' 660240 003600 19690 TRO T,3600 + 002735' 602240 000010 19700 TRNE T,10 + 002736' 620240 000200 19710 TRZ T,200 + 002737' 254000 002722' 19720 JRST TTY1 + + + 002740' 260040 002666' 19750 TEXIN: PUSHJ P,TIN ;INPUT SUBROUTINE FOR TEXT MODES + 002741' 606240 000140 19760 TRNN T,140 + 002742' 254000 002676' 19770 JRST TOUT ;ECHO CHARACTERS (0-37) NOT ECHOED + 002743' 263040 000000 19780 POPJ P, + 19790 > + EDDT V.005A - EXEC MODE VERSION PAGE 49 + OP DECODER + + 19810 IFE EDDT&1,< ;USER MODE TELETYPE I/O + 19820 + 19830 + 19840 TIN: MOVE T,POUTBF ;GET NEXT CHARACTER ROUTINE + 19850 CAME T,[POINT 7,INBFF] + 19860 PUSHJ P,FINOUT + 19870 ILDB T,PINBFF + 19880 CAIN T,175 + 19890 MOVEI T,33 ;CHANGE TO NEW ALT MODE + 19900 CAIN T,177 ;RUBOUT? + 19910 JRST WRONG ;YES PRINT XXX + 19920 JUMPN T,CPOPJ + 19930 MOVE T,[POINT 7,INBFF] + 19940 MOVEM T,PINBFF + 19950 CALL T,[SIXBIT /DDTIN/] + 19960 JRST TIN + 19970 + 19980 TOUT: JUMPE T,CPOPJ ;OUT PUT A CHARACTER FLUSH NULLS + 19990 IDPB T,POUTBF + 20000 CAIE T,12 + 20010 POPJ P, + 20020 FINOUT: MOVEI T,0 + 20030 IDPB T,POUTBF + 20040 MOVE T,[POINT 7,INBFF] + 20050 MOVEM T,PINBFF + 20060 MOVEM T,POUTBF + 20070 CALL T,[SIXBIT /DDTOUT/] + 20080 CLEARM INBFF + 20090 POPJ P, + 20100 + 20110 PINBFF: POINT 7,INBFF + 20120 POUTBF: POINT 7,INBFF + 20130 + 20140 LISTEN=CPOPJ + 20150 INBFF: BLOCK 21 + 20160 + 20170 TTYRET: CALL [SIXBIT /DDTGT/] + 20180 MOVE T,[POINT 7,INBFF] + 20190 MOVEM T,POUTBF + 20200 MOVEM T,PINBFF + 20210 CLEARM INBFF + 20220 POPJ P, + 20230 + 20240 TTYLEV: PUSHJ P,FINOUT + 20250 CALL [SIXBIT /DDTRL/] + 20260 POPJ P, + 20270 + 20280 TEXIN=TIN ;USE NORMAL INPUT FOR TEXT WHEN IN USER MODE + 20290 > + EDDT V.005A - EXEC MODE VERSION PAGE 50 + OP DECODER + + + 002744' 301402 002747' 20320 BDISP: POINT 12,DISP(R),11 + 002745' 141402 002747' 20330 POINT 12,DISP(R),23 + 002746' 001402 002747' 20340 POINT 12,DISP(R),35 + + 002747' 20360 DISP: + 20370 DEFINE D (Z1,Z2,Z3)<XLIST + 20380 EXP <Z1-DDT>*1B11+<Z2-DDT>*1B23+Z3-DDT + 20390 LIST> + + 20410 IFE EDDT&1&<EDDT>B36,< PUNCH=ERR + 20420 BLKEND=ERR + 20430 LOADER=ERR + 20440 VERIFY=ERR + 20450 CORE=ERR> + + + + 20490 D ERR,ERR,ERR^XLIST + 20500 D ERR,ERR,ERR^XLIST + 20510 D ERR,ERR,VARRW^XLIST + 20520 D TAB,LINEF,ERR^XLIST + 20530 D ERR,CARR,ERR^XLIST + 20540 D ERR,ERR,ERR^XLIST + 20550 D PUNCH,ERR,ERR^XLIST + 20560 D ERR,ERR,ERR^XLIST + 20570 D ERR,ERR,ERR^XLIST + 20580 D CONTROL,ERR,ERR^XLIST + 20590 D ERR,ERR,SPACE^XLIST + 20600 D SUPTYO,TEXI,ASSEM^XLIST + 20610 D DOLLAR,PERC,ERR^XLIST + 20620 D DIVD,LPRN,RPRN^XLIST + 20630 D MULT,PLUS,ACCF^XLIST + 20640 D MINUS,PERIOD,SLASH^XLIST + 20650 D NUM,NUM,NUM^XLIST + 20660 D NUM,NUM,NUM^XLIST + 20670 D NUM,NUM,NUM^XLIST + 20680 D NUM,TAG,SEMIC^XLIST + 20690 D FIRARG,EQUAL,ULIM^XLIST + 20700 D QUESTN,INDIRECT,ABSA^XLIST + 20710 D BPS,CON,SYMD^XLIST + 20720 D EFFEC,SFLOT,GO^XLIST + 20730 D HWRDS,PILOC,BLKEND^XLIST + 20740 D KILL,LOADER,MASK^XLIST + 20750 D NWORD,BITO,PROCEDE^XLIST + 20760 D QUAN,RELA,SYMBOL^XLIST + 20770 D TEXO,ERR,VERIFY^XLIST + 20780 D WORD,XEC,CORE^XLIST + 20790 D ZERO,OCON,ICON^XLIST + 20800 D OSYM,VARRW,PSYM^XLIST + + 20820 REPEAT 11,<D ERR,ERR,ERR> + D ERR,ERR,ERR^XLIST + D ERR,ERR,ERR^XLIST + D ERR,ERR,ERR^XLIST + D ERR,ERR,ERR^XLIST + D ERR,ERR,ERR^XLIST + D ERR,ERR,ERR^XLIST + D ERR,ERR,ERR^XLIST + D ERR,ERR,ERR^XLIST + D ERR,ERR,ERR^XLIST + 20840 D ERR,ERR,ERR^XLIST + 20850 D ERR,WRONG,DDT^XLIST + EDDT V.005A - EXEC MODE VERSION PAGE 51 + OP DECODER + + + 003022' 200120 002230' 20880 IFIX: MOVE R,@SYMP ;DIDDLE SYMBOL TABLE POINTERS + 003023' 552100 002213' 20890 HRRZM R,ESTU + 003024' 554260 002230' 20900 HLRZ T,@SYMP + 003025' 274260 002230' 20910 SUB T,@SYMP + 003026' 271240 000116 20920 ADDI T,NSYMS + 003027' 213000 000005 20930 MOVNS T + 003030' 542240 002200' 20940 HRRM T, KILC + 003031' 200240 002200' 20950 MOVE T, KILC + 003032' 202240 002212' 20960 MOVEM T, PRGM + 003033' 254000 000000' 20970 JRST DDT + + 003034' 201100 003051' 20990 BITO: MOVEI R,BITT ;BYTE OUTPUT SUBROUTINE + 003035' 551440 002003' 21000 HRRZI AR,TOC + 003036' 626000 000001 21010 TRZN F,Q2F + 003037' 254000 000123' 21020 JRST ERR + 003040' 200240 002202' 21030 MOVE T,WRD2 + 003041' 202240 003074' 21040 MOVEM T,SVBTS + 003042' 201240 000044 21050 MOVEI T,^D36 + 003043' 230240 002202' 21060 IDIV T,WRD2 + 003044' 332000 000006 21070 SKIPE T+1 + 003045' 271240 000001 21080 ADDI T,1 + 003046' 202240 003075' 21090 MOVEM T,SVBTS2 + 003047' 550400 000002 21100 HRRZ SCH,R + 003050' 254000 001011' 21110 JRST BASE1 + 003051' 200240 003075' 21120 BITT: MOVE T,SVBTS2 + 003052' 202240 003077' 21130 MOVEM T,SVBT2 + 003053' 200300 002206' 21140 MOVE T+1,LWT + 003054' 202300 003076' 21150 MOVEM T+1,SVBT3 + 003055' 201240 000000 21160 BITT2: MOVEI T,0 + 003056' 200340 003074' 21170 MOVE T+2,SVBTS + 003057' 246247 000000 21180 LSHC T,(T+2) + 003060' 202240 002206' 21190 MOVEM T,LWT + 003061' 202300 003076' 21200 MOVEM T+1,SVBT3 + 003062' 302440 001545' 21210 CAIE AR,PADSO + 003063' 260040 002003' 21220 PUSHJ P,FTOC + 003064' 302440 002003' 21230 CAIE AR,TOC + 003065' 260040 001467' 21240 PUSHJ P,PIN + 003066' 377000 003077' 21250 SOSG SVBT2 + 003067' 263040 000000 21260 POPJ P, + 003070' 201240 000054 21270 MOVEI T,"," + 003071' 260040 002676' 21280 PUSHJ P,TOUT + 003072' 200300 003076' 21290 MOVE T+1,SVBT3 + 003073' 254000 003055' 21300 JRST BITT2 + 003074' 000000 000000 21310 SVBTS: 0 + 003075' 000000 000000 21320 SVBTS2: 0 + 003076' 000000 000000 21330 SVBT3: 0 + 003077' 000000 000000 21340 SVBT2: 0 + EDDT V.005A - EXEC MODE VERSION PAGE 52 + OP DECODER + + + 21370 ;DESCRIPTION OF OP DECODER FOR DDT: + 21380 ; + 21390 ; THE ENTIRE INSTRUCTION SET FOR THE PDP-6 CAN BE COMPACTED INTO + 21400 ;A SPACE MUCH SMALLER THAN ONE REGISTER FOR EVERY SYMBOL. THIS OCCURS + 21410 ;BECAUSE OF THE MACHINE ORGANIZATION AND INSTRUCTION MNEMONICS CHOSEN + 21420 ;FOR THE PDP-6. FOR EXAMPLE, IF BITS (0-2) OF AN INSTRUCTION EQUAL + 21430 ;101(2) THE INSTRUCTION IS A HALF WORD INSTRUCTION AND AN "H" MAY + 21440 ;BE ASSUMED. "T" MAY BE ASSUMED FOR ALL TEST INSTRUCTIONS (WHICH + 21450 ;BEGIN WITH 110(2). + 21460 ; + 21470 ; THE TABLE TBL IN DDT CONSISTS OF 9 BIT BYTES, 4 TO A WORD. + 21480 ;THE NUMBERS IN THE BYTES HAVE THE FOLLOWING SIGNIFICANCE: + 21490 ;0-37(8): THIS IS A DISPATCH COMMAND FOR THE OP-DECODER INTERPRETER. + 21500 ; LET THE RIGHT MOST TWO BITS EQUAL N; LET THE NEXT 3 BITS + 21510 ; EQUAL P. + 21520 ; + 21530 ; THE CONTENTS OF INST (INSTRUCTION) CONTAIN IN THE RIGHT + 21540 ; MOST NINE BITS THE BINARY FOR THE MACHINE INSTRUCTION. + 21550 ; P AND N REFER TO THE CONTENTS OF INST, AND THE OP DECODER + 21560 ; WILL PRODUCE AN ANSWER D GIVEN P, N, AND THE CONTENTS + 21570 ; OF INSTX N+1 GIVES THE NUMBER OF BITS IN INST; P GIVES THE + 21580 ; POSITION (FROM THE RIGHT EDGE) OF THE N+1 BITS. + 21590 ; + 21600 ; EXAMPLE: P = 6 + 21610 ; N = 2 + 21620 ; + 21630 ;; C(INST) = .010 101 100(2) + 21640 ; + 21650 ; THE RESULT- D = 010(2) = 2(8) + 21660 ; + 21670 ; D IS USED AS A DISPATCH ON THE NEXT BYTES IN THE TABLE. + 21680 ; IF D = 5, 5 BYTES IN THE TABLE (DON'T COUNT THE BYTES WHICH + 21690 ; PRINT TEXT, 41-72(8)) ARE SKIPPED OVER AND THE 6TH BYTE RESUMES + 21700 ; THE INTERPRETATION. + 21710 ; + 21720 ;40(8) THIS IS A STOP CODE; WHEN THIS IS REACHED INTERPRETATION + 21730 ; IS FINISHED. + EDDT V.005A - EXEC MODE VERSION PAGE 53 + OP DECODER + + + 21760 ;41(8)-72(8) THE ALPHABET IS ENCODED INTO THIS RANGE. + 21770 ; 41- A + 21780 ; 42- B + 21790 ; 72- Z + 21800 ; WHEN A BYTE IN THIS RANGE IS REACHED, ITS CORRESPONDING + 21810 ; LETTER IS TYPED. + 21820 ; + 21830 ;73(8)-777(8) THIS IS A TRANSFER BYTE. IF THE BYTE IN THIS RANGE IS + 21840 ; CONSIDERED TO BE A, TRANSFER INTERPRETATION TO THE A-73(8)RD + 21850 ; BYTE IN THE TABLE. + 21860 ; + 21870 ;MAROS ASSEMBLE THE TABLE TBL: + 21880 ; 1. A NUMBER FOLLOWED BY ^ ASSEMBLES A DISPATCH BYTE. THE FIRST + 21890 ; DIGIT IS THE POSITION; THE SECOND DIGIT IS THE SIZE. + 21900 ; 2. A POINT (.) ASSEMBLES A STOP CODE. + 21910 ; 3. A NAME FOLLOWED BY A SLASH ASSEMBLES A TRANSFER TO THE + 21920 ; SYMBOLICALLY NAMED BYTE. + 21930 ; 4. A STRING OF LETTERS TERMINATED BY A SPACE, COMMA, OR POINT, + 21940 ; ASSEMBLE INTO A STRING OF BYTES, EACH BYTE BEING ONE LETTER. + 21950 ; + 21960 ;EXAMPLE OF BINARY TO SYMBOLIC DECODING: + 21970 ; THE MACHINE CODE FOR JRST IAS 254 + 21980 ; INST 0 1 0 1 0 1 1 0 0 + 21990 ; THE INTERPRETER STARTS WITH THE FIRST BYTE IN THE TABLE (63^). + 22000 ; THE RESULT OF APPLYING THIS TO C(INST) GIVES 2. SKIPPING OVER + 22010 ; 2 BYTES IN THE TABLE AND INTERPRETING THE THIRD RESULTS IN + 22020 ; HAK/ BEING INTERPRETED. AT HAK:, THERE IS A 33^. APPLYING + 22030 ; THIS TO C(INST) RESULTS IN 5 NON PRINTING BYTES BEING SKIPPED + 22040 ; OVER: + 22050 ; 1. MV/ + 22060 ; MOV PRINTING TEXT + 22070 ; 2. MO/ + 22080 ; 3. ML/ + 22090 ; 4. DV/ + 22100 ; 5. SH/ + 22110 ; + 22120 ;H1/ IS THE NEXT BYTE INTERPRETER. AT H1: 03^ IS FOUND SO + 22130 ;4 BYTES ARE SKIPPED OVER: + 22140 ; EXC PRINTING TEXT + 22150 ; 1. S3/ + 22160 ; BL PRINTING TEXT + 22170 ; T PRINTING TEXT + 22180 ; 2. . + 22190 ; 3. AO/ + 22200 ; 4. AOB/ + 22210 ; THE NEXT LETTERS JRS ARE TYPED OUT. THEN T/ IS FOUND. AT + 22220 ;T; A T IS TYPED OUT; THEN A "." IS FOUND AND EVERYTHING STOPS. + 22230 ; + 22240 ; THE TABLE IS ALSO USED GOING FROM SYMBOLIC TO BINARY BUT A + EDDT V.005A - EXEC MODE VERSION PAGE 59 + OP DECODER + + 22310 REPEAT 0,< + 22320 + 22330 DEFINE REDEF (XX)< + 22340 DEFINE INFO (AA,BB)< + 22350 AA XX'BB>> + 22360 + 22370 + 22380 DEFINE BYT9 (L)< + 22390 XLIST + 22400 REDEF % + 22410 ZZ=0 + 22420 ZZZ=0 + 22430 ZZM=1 + 22440 + 22450 IRPC L,< + 22460 Z="L" + 22470 IFE Z-":",<INFO <>,<=CLOC> + 22480 IFNDEF FIR.,<FIR.=CLOC> + 22490 IFGE CLOC+73-1000-FIR.,<PRINTX OPTABLE TOO LONG> + 22500 Z=0> + 22510 IFE Z-"/",<IF1 <OUTP 1> + 22520 IF2,<INFO OUTP,+73-FIR.> + 22530 Z=0> + 22540 IFE Z-"^",<OUTP <ZZ&70/2+ZZ&7-1> + 22550 Z=0> + 22560 IFE <Z-",">*<Z-".">*<Z-40>,<IFN ZZZ,< + 22570 REPEAT 5,<ZZ=ZZZ&77 + 22580 IFN ZZ,<OUTP ZZ> + 22590 ZZZ=ZZZ/100>> + 22600 IFE Z-".",<OUTP 40> + 22610 Z=0> + 22620 IFN Z,<INFO REDEF,L + 22630 ZZ=ZZ*10+Z&7 + 22640 ZZZ=ZZZ+<Z-40>*ZZM + 22650 ZZM=ZZM*100> + 22660 IFE Z,<REDEF % + 22670 ZZ=0 + 22680 ZZZ=0 + 22690 ZZM=1>> + 22700 LIST> + 22710 + 22720 DEFINE OUTP (A)< + 22730 BINRY=BINRY*400+BINRY*400+A + 22740 BINC=BINC-1 + 22750 IFE BINC,<EXP BINRY + 22760 BINRY=0 + 22770 BINC=4> + 22780 CLOC=CLOC+1> + 22790 + 22800 + 22810 EDDT V.005A - EXEC MODE VERSION PAGE 60 + OP DECODER + + 22820 + 22830 TBL: ;OPDECODER BYTE TABLE + 22840 + 22850 BINRY=0 + 22860 CLOC=0 ;SET BYTE LOCATION COUNTER TO 0 + 22870 BINC=4 ;INIT BYTES/WORD COUNTER + 22880 + 22890 BYT9 <63^UUO/FLO/HAK/ACCP/BOOLE/H HWT/T ACBM/> + 22900 + 22910 ;IO INSTRUCTIONS + 22920 BYT9 <21^BD/CON,11^OI/S,01^Z/O/> + 22930 BYT9 <BD:01^BLK,IO/DATA,IO:11^I/O/OI:01^O/I/> + 22940 + 22950 ;UUOS + 22960 BYT9 <UUO:51^.,32^U40/U50/U60/21^U703/11^USET/01^> + 22970 BYT9 <LOOKU,P/ENTE,R/USET:USET,01^I/O/> + 22980 BYT9 <U40:03^U47/INI T/.....,U47:CALL,01^.,I/> + 22990 BYT9 <U60:21^U603/01^IN,BPUT/OUT,BPUT:11^BU,F:F.,PU,T/> + 23000 BYT9 <U603:01^U6062/STAT,11^O:O.,Z:Z.,U6062:11^S,U62/G,U62:ETST,S/> + 23010 ;BYTE AND FLOATING INSTRUCTIONS + 23020 + 23030 BYT9 <FLO:51^BYTE/F 32^ AD A/SB A/MP A/DV A:> + 23040 BYT9 <21^LMB/R,IMB/LMB:02^.,L:L.,M:M.,B:B.,BYTE:32^...,03^UF,PA/DF,N/> + 23050 BYT9 <FS C/IB P:P.,I LD/LD:LD B/I DP/DP:DP B/> + 23060 + 23070 ;FWT,FIXED POINT ARITH,MISC. + 23080 + 23090 BYT9 <HAK:33^MV/MV:MOV MO/ML/DV/SH/H1/JP/> + 23100 BYT9 <21^ADD IMB/SU BIMB:B IMB:02^.,I:I.,M/B/MO:22^> + 23110 BYT9 <EIMS:E IMS/S IMS/N IMS/M IMS:02^.,I/M/S:S.,> + 23120 BYT9 <ML:21^I ML1/ML1:MUL IMB/DV:21^I DV1/DV1:> + 23130 BYT9 <DI DV2:V IMB/H1:03^EXC S3/BL T:T.,AO/AO:AOBJ,> + 23140 BYT9 <AOB/JRS T/JFC L/XC T/CON S/AOB:01^P/N/> + 23150 BYT9 <JP:03^PU/PU:PUSH PUS/PO/PO:POP POP/JS,R:R.,> + 23160 BYT9 <JS P/JS PA:A.,JR PA/PUS:01^J:J..,POP:> + 23170 BYT9 <01^.,J/SH:02^A S2/ROT S1/L S2:S S3:H S1/.,S1:21^.,C:C.,> + 23180 + 23190 ;ARITH COMP,SKIP,JUMP + 23200 + 23210 BYT9 <ACCP:42^CA CA1/SJ/A JS/S JS:O 31^> + 23220 BYT9 <J COMP/S COMP/CA1:31^I COMP/M COMP/> + 23230 BYT9 <SJ:31^JUM PSJ/SKI PSJ:P COMP:> + 23240 BYT9 <03^.,L/E:E.,L E/PA/G E/N:N.,G.,> + 23250 + 23260 + 23270 ;HALF WORDS + 23280 + 23290 BYT9 <HWT:51^HW1/21^R HW2/L HW2:R HW3/HW1:> + 23300 BYT9 <21^L HW4/R HW4:L HW3:32^IMS/Z IMS/O IMS/EIMS/> + 23310 + 23320 ;TEST INSTRUCTIONS + 23330 + 23340 BYT9 <ACBM:31^AC1/01^D AC2/S AC2/AC1:01^R AC2/L,> + EDDT V.005A - EXEC MODE VERSION PAGE 60-1 + OP DECODER + + 23350 BYT9 <AC2:42^N EAN/Z EAN/C EAN/O EAN:12^.,E/PA/N/> + 23360 + 23370 EDDT V.005A - EXEC MODE VERSION PAGE 61 + OP DECODER + + 23380 + 23390 ;BOOLEAN + 23400 + 23410 BYT9 <BOOLE:24^ST/AN:AND B2/AN/ST/AN/ST/> + 23420 BYT9 <X OR:OR B2/I OR/AN/EQ DV2/ST/OR/ST/OR/OR/> + 23430 BYT9 <ST:SET B2:24^Z IMB/IMB/CA:C TA/TM:M IMB/> + 23440 BYT9 <CM:C TM/TA:A IMB/IMB/IMB/CB:C BIMB/IMB/CA/> + 23450 BYT9 <CA/CM/CM/CB/O IMB/> + 23460 + 23470 ;MORE UUO'S + 23480 BYT9 <U50:03^OPE,N/....,RENAM,E/I,N/OU,T/> + 23490 BYT9 <U703:02^CLOS,E/RELEA,S/MTAP,E/UGET,F/> + 23500 + 23510 REPEAT BINC,<BINRY=BINRY*400+BINRY*400> + 23520 IFN BINRY,<EXP BINRY>> + + + + EDDT V.005A - EXEC MODE VERSION PAGE 62 + OP DECODER + + 23570 SUBTTL OP DECODER + + 23590 IF1, + 23600 < + 23610 + 23620 DEFINE .COLON (A) < + 23630 %'A== CLOC + 23640 FIR.== CLOC + 23650 DEFINE .COLON (AA) < + 23660 %'AA== CLOC + 23670 IFGE CLOC+73-1000-FIR., <PRINTX OPTABLE TOO LONG>>> + 23680 + 23690 DEFINE .SLASH < + 23700 CLOC= CLOC+1 ;> + 23710 + 23720 SYN .SLASH, .ARROW + 23730 + 23740 DEFINE .COMMA (A) < + 23750 IFNB <A>, <.REP5 A>> + 23760 + 23770 SYN .COMMA, .SPACE + 23780 + 23790 DEFINE .POINT (A) < + 23800 IFNB <A>, <.REP5 A> + 23810 CLOC= CLOC+1> + 23820 + 23830 DEFINE .REP5 (A) < + 23840 IRPC A, <CLOC==CLOC+1>> + 23850 + 23860 > + EDDT V.005A - EXEC MODE VERSION PAGE 63 + OP DECODER + + 23880 IF2, + 23890 < + + 23910 DEFINE .SLASH (A) < + 23920 OUTP %'A+73-FIR.> + + 23940 DEFINE .ARROW (A) < + 23950 OUTP A&70/2+A&7-1> + + 23970 DEFINE .COMMA (A) < + 23980 IFNB <A>, <.REP5 A>> + + 24000 SYN .COMMA, .SPACE + + 24020 DEFINE .POINT (A) < + 24030 IFNB <A>, <.REP5 A> + 24040 OUTP 40> + + 24060 DEFINE .REP5 (A) < + 24070 IRPC A, <OUTP "A"-40>> + + 24090 DEFINE OUTP (A)< + 24100 BINRY== BINRY+<A>_<BINC==BINC-9> + 24110 IFE BINC, < + 24120 +BINRY + 24130 BINRY==0 + 24140 BINC==^D36> + 24150 CLOC==CLOC+1> + + 24170 > + EDDT V.005A - EXEC MODE VERSION PAGE 64 + OP DECODER + + 003100' 24190 TBL: ;OPDECODER BYTE TABLE + + 000000 24210 BINRY== 0 + 000000 24220 CLOC== 0 ;SET BYTE LOCATION COUNTER TO 0 + 000044 24230 BINC== ^D36 ;INIT BYTES/WORD COUNTER + + 24250 .ARROW 63^ + 24260 .SLASH UUO^ + 24270 .SLASH FLO^ + 24280 .SLASH HAK^ + 003100' 032112 236325 +BINRY + 24290 .SLASH ACCP^ + 24300 .SLASH BOOLE^ + 24310 .SPACE H^ + 24320 .SLASH HWT^ + 003101' 534662 050606 +BINRY + 24330 .SPACE T^ + 24340 .SLASH ACBM^ + + + 24370 ;IO INSTRUCTIONS + + 24390 .ARROW 21^ + 24400 .SLASH BD^ + 003102' 064632 010073 +BINRY + 24410 .COMMA CON^ + 24420 .ARROW 11^ + 003103' 043057 056004 +BINRY + 24430 .SLASH OI^ + 24440 .COMMA S^ + 24450 .ARROW 01^ + 24460 .SLASH Z^ + 003104' 107063 000223 +BINRY + 24470 .SLASH O^ + + 24490 .COLON BD^ + 24500 .ARROW 01^ + 24510 .COMMA BLK^ + 003105' 221000 042054 +BINRY + 24520 .SLASH IO^ + 24530 .COMMA DATA^ + 003106' 053104 044041 +BINRY + 24540 .COLON IO^ + 24550 .ARROW 11^ + 24560 .SLASH I^ + 003107' 064041 004352 +BINRY + 24570 .SLASH O^ + 24580 .COLON OI^ + 24590 .ARROW 01^ + 24600 .SLASH O^ + 24610 .SLASH I^ + 003110' 221000 221352 +BINRY + EDDT V.005A - EXEC MODE VERSION PAGE 65 + OP DECODER + + 24630 ;UUOS + + 24650 .COLON UUO^ + 24660 .ARROW 51^ + 24670 .POINT ^ + 24680 .COMMA ^ + 24690 .ARROW 32^ + 24700 .SLASH U40^ + 003111' 024040 015147 +BINRY + 24710 .SLASH U50^ + 24720 .SLASH U60^ + 24730 .ARROW 21^ + 24740 .SLASH U703^ + 003112' 746171 010772 +BINRY + 24750 .ARROW 11^ + 24760 .SLASH USET^ + 24770 .ARROW 01^ + + 24790 .COMMA LOOKU^ + 003113' 004140 000054 +BINRY + 003114' 057057 053065 +BINRY + 24800 .SLASH P^ + 24810 .COMMA ENTE^ + 003115' 311045 056064 +BINRY + 24820 .SLASH R^ + 24830 .COLON USET^ + 24840 .COMMA USET^ + 003116' 045471 065063 +BINRY + 24850 .ARROW 01^ + 24860 .SLASH I^ + 003117' 045064 000352 +BINRY + 24870 .SLASH O^ + + 24890 .COLON U40^ + 24900 .ARROW 03^ + 24910 .SLASH U47^ + 24920 .SPACE INI^ + 003120' 221002 162051 +BINRY + 24930 .SLASH T^ + 24940 .POINT ^ + 003121' 056051 421040 +BINRY + 24950 .POINT ^ + 24960 .POINT ^ + 24970 .POINT ^ + 24980 .POINT ^ + 003122' 040040 040040 +BINRY + 24990 .COMMA ^ + 25000 .COLON U47^ + 25010 .COMMA CALL^ + 003123' 043041 054054 +BINRY + 25020 .ARROW 01^ + 25030 .POINT ^ + 25040 .COMMA ^ + EDDT V.005A - EXEC MODE VERSION PAGE 65-1 + OP DECODER + + 25050 .SLASH I^ + + 25070 .COLON U60^ + 25080 .ARROW 21^ + 003124' 000040 352010 +BINRY + 25090 .SLASH U603^ + 25100 .ARROW 01^ + 25110 .COMMA IN^ + 003125' 212000 051056 +BINRY + 25120 .SLASH BPUT^ + 25130 .COMMA OUT^ + 003126' 202057 065064 +BINRY + 25140 .COLON BPUT^ + 25150 .ARROW 11^ + 25160 .COMMA BU^ + 25170 .COLON F^ + 25180 .POINT F^ + 003127' 004042 065046 +BINRY + 25190 .COMMA ^ + 25200 .COMMA PU^ + 25210 .SLASH T^ + 003130' 040060 065421 +BINRY + + 25230 .COLON U603^ + 25240 .ARROW 01^ + 25250 .SLASH U6062^ + 25260 .COMMA STAT^ + 003131' 000225 063064 +BINRY + 25270 .ARROW 11^ + 25280 .COLON O^ + 25290 .POINT O^ + 003132' 041064 004057 +BINRY + 25300 .COMMA ^ + 25310 .COLON Z^ + 25320 .POINT Z^ + 25330 .COMMA ^ + 25340 .COLON U6062^ + 25350 .ARROW 11^ + 003133' 040072 040004 +BINRY + 25360 .COMMA S^ + 25370 .SLASH U62^ + 25380 .COMMA G^ + 25390 .COLON U62^ + 25400 .COMMA ETST^ + 003134' 063231 047045 +BINRY + 25410 .SLASH S^ + 003135' 064063 064372 +BINRY + EDDT V.005A - EXEC MODE VERSION PAGE 66 + OP DECODER + + 25430 ;BYTE AND FLOATING INSTRUCTIONS + + 25450 .COLON FLO^ + 25460 .ARROW 51^ + 25470 .SLASH BYTE^ + 25480 .SPACE F^ + 25490 .ARROW 32^ + 003136' 024271 046015 +BINRY + 25500 .SPACE ^ + 25510 .SPACE AD^ + 25520 .SLASH A^ + 25530 .SPACE SB^ + 003137' 041044 255063 +BINRY + 25540 .SLASH A^ + 25550 .SPACE MP^ + 003140' 042255 055060 +BINRY + 25560 .SLASH A^ + 25570 .SPACE DV^ + 25580 .COLON A^ + 25590 .ARROW 21^ + 003141' 255044 066010 +BINRY + 25600 .SLASH LMB^ + 25610 .COMMA R^ + 25620 .SLASH IMB^ + 25630 .COLON LMB^ + 25640 .ARROW 02^ + 003142' 261062 350001 +BINRY + 25650 .POINT ^ + 25660 .COMMA ^ + 25670 .COLON L^ + 25680 .POINT L^ + 25690 .COMMA ^ + 25700 .COLON M^ + 25710 .POINT M^ + 003143' 040054 040055 +BINRY + 25720 .COMMA ^ + 25730 .COLON B^ + 25740 .POINT B^ + 25750 .COMMA ^ + 25760 .COLON BYTE^ + 25770 .ARROW 32^ + 003144' 040042 040015 +BINRY + 25780 .POINT ^ + 25790 .POINT ^ + 25800 .POINT ^ + 25810 .COMMA ^ + 25820 .ARROW 03^ + 003145' 040040 040002 +BINRY + 25830 .COMMA UF^ + 25840 .SLASH PA^ + 25850 .COMMA DF^ + 003146' 065046 500044 +BINRY + 25860 .SLASH N^ + EDDT V.005A - EXEC MODE VERSION PAGE 66-1 + OP DECODER + + + 25880 .SPACE FS^ + 003147' 046602 046063 +BINRY + 25890 .SLASH C^ + 25900 .SPACE IB^ + 25910 .COLON P^ + 25920 .POINT P^ + 003150' 532051 042060 +BINRY + 25930 .COMMA ^ + 25940 .SPACE I^ + 25950 .SLASH LD^ + 25960 .COLON LD^ + 25970 .SPACE LD^ + 003151' 040051 315054 +BINRY + 25980 .SLASH B^ + 25990 .SPACE I^ + 26000 .SLASH DP^ + 003152' 044267 051322 +BINRY + 26010 .COLON DP^ + 26020 .SPACE DP^ + 26030 .SLASH B^ + EDDT V.005A - EXEC MODE VERSION PAGE 67 + OP DECODER + + 26050 ;FWT,FIXED POINT ARITH,MISC + + 26070 .COLON HAK^ + 26080 .ARROW 33^ + 003153' 044060 267016 +BINRY + 26090 .SLASH MV^ + 26100 .COLON MV^ + 26110 .SPACE MOV^ + 003154' 327055 057066 +BINRY + 26120 .SLASH MO^ + 26130 .SLASH ML^ + 26140 .SLASH DV^ + 26150 .SLASH SH^ + 003155' 356374 403514 +BINRY + 26160 .SLASH H1^ + 26170 .SLASH JP^ + + 26190 .ARROW 21^ + 26200 .SPACE ADD^ + 003156' 412453 010041 +BINRY + 26210 .SLASH IMB^ + 26220 .SPACE SU^ + 003157' 044044 350063 +BINRY + 26230 .COLON BIMB^ + 26240 .SPACE B^ + 26250 .COLON IMB^ + 26260 .ARROW 02^ + 26270 .POINT ^ + 003160' 065042 001040 +BINRY + 26280 .COMMA ^ + 26290 .COLON I^ + 26300 .POINT I^ + 26310 .COMMA ^ + 26320 .SLASH M^ + 26330 .SLASH B^ + 003161' 051040 265267 +BINRY + 26340 .COLON MO^ + 26350 .ARROW 22^ + + 26370 .COLON EIMS^ + 26380 .SPACE E^ + 26390 .SLASH IMS^ + 26400 .SPACE S^ + 003162' 011045 366063 +BINRY + 26410 .SLASH IMS^ + 26420 .SPACE N^ + 26430 .SLASH IMS^ + 26440 .SPACE M^ + 003163' 366056 366055 +BINRY + 26450 .COLON IMS^ + 26460 .ARROW 02^ + 26470 .POINT ^ + 26480 .COMMA ^ + EDDT V.005A - EXEC MODE VERSION PAGE 67-1 + OP DECODER + + 26490 .SLASH I^ + 26500 .SLASH M^ + 003164' 001040 352265 +BINRY + 26510 .COLON S^ + 26520 .POINT S^ + 26530 .COMMA ^ + + 26550 .COLON ML^ + 26560 .ARROW 21^ + 26570 .SPACE I^ + 003165' 063040 010051 +BINRY + 26580 .SLASH ML1^ + 26590 .COLON ML1^ + 26600 .SPACE MUL^ + 003166' 377055 065054 +BINRY + 26610 .SLASH IMB^ + 26620 .COLON DV^ + 26630 .ARROW 21^ + 26640 .SPACE I^ + 26650 .SLASH DV1^ + 003167' 350010 051406 +BINRY + 26660 .COLON DV1^ + 26670 .SPACE DI^ + 26680 .COLON DV2^ + 26690 .SPACE V^ + 26700 .SLASH IMB^ + 003170' 044051 066350 +BINRY + 26710 .COLON H1^ + 26720 .ARROW 03^ + 26730 .SPACE EXC^ + 003171' 002045 070043 +BINRY + 26740 .SLASH S3^ + 26750 .SPACE BL^ + 26760 .COLON T^ + 26770 .POINT T^ + 003172' 525042 054064 +BINRY + 26780 .COMMA ^ + 26790 .SLASH AO^ + 26800 .COLON AO^ + 26810 .COMMA AOBJ^ + 003173' 040424 041057 +BINRY + 26820 .SLASH AOB^ + 26830 .SPACE JRS^ + 003174' 042052 450052 +BINRY + 26840 .SLASH T^ + 26850 .SPACE JFC^ + 003175' 062063 421052 +BINRY + 26860 .SLASH L^ + 26870 .SPACE XC^ + 003176' 046043 263070 +BINRY + 26880 .SLASH T^ + 26890 .SPACE CON^ + 003177' 043421 043057 +BINRY + EDDT V.005A - EXEC MODE VERSION PAGE 67-2 + OP DECODER + + 26900 .SLASH S^ + 26910 .COLON AOB^ + 26920 .ARROW 01^ + 26930 .SLASH P^ + 003200' 056372 000311 +BINRY + 26940 .SLASH N^ + + 26960 .COLON JP^ + 26970 .ARROW 03^ + 26980 .SLASH PU^ + 26990 .COLON PU^ + 27000 .SPACE PUSH^ + 003201' 602002 455060 +BINRY + 27010 .SLASH PUS^ + 003202' 065063 050505 +BINRY + 27020 .SLASH PO^ + 27030 .COLON PO^ + 27040 .SPACE POP^ + 003203' 463060 057060 +BINRY + 27050 .SLASH POP^ + 27060 .COMMA JS^ + 27070 .COLON R^ + 27080 .POINT R^ + 003204' 511052 063062 +BINRY + 27090 .COMMA ^ + + 27110 .SPACE JS^ + 27120 .SLASH P^ + 003205' 040052 063311 +BINRY + 27130 .SPACE JS^ + 27140 .COLON PA^ + 27150 .POINT A^ + 003206' 052063 041040 +BINRY + 27160 .COMMA ^ + 27170 .SPACE JR^ + 27180 .SLASH PA^ + 27190 .COLON PUS^ + 27200 .ARROW 01^ + 003207' 052062 500000 +BINRY + 27210 .COLON J^ + 27220 .POINT J^ + 27230 .POINT ^ + 27240 .COMMA ^ + 27250 .COLON POP^ + 27260 .ARROW 01^ + 003210' 052040 040000 +BINRY + 27270 .POINT ^ + 27280 .COMMA ^ + 27290 .SLASH J^ + 27300 .COLON SH^ + 27310 .ARROW 02^ + 27320 .SPACE A^ + 003211' 040506 001041 +BINRY + EDDT V.005A - EXEC MODE VERSION PAGE 67-3 + OP DECODER + + 27330 .SLASH S2^ + 27340 .SPACE ROT^ + 003212' 524062 057064 +BINRY + 27350 .SLASH S1^ + 27360 .SPACE L^ + 27370 .COLON S2^ + 27380 .SPACE S^ + 27390 .COLON S3^ + 27400 .SPACE H^ + 003213' 530054 063050 +BINRY + 27410 .SLASH S1^ + 27420 .POINT ^ + 27430 .COMMA ^ + 27440 .COLON S1^ + 27450 .ARROW 21^ + 27460 .POINT ^ + 003214' 530040 010040 +BINRY + 27470 .COMMA ^ + 27480 .COLON C^ + 27490 .POINT C^ + 27500 .COMMA ^ + EDDT V.005A - EXEC MODE VERSION PAGE 68 + OP DECODER + + 27520 ;ARITH COMP,SKIP,JUMP + + 27540 .COLON ACCP^ + 27550 .ARROW 42^ + 27560 .SPACE CA^ + 003215' 043040 021043 +BINRY + 27570 .SLASH CA1^ + 27580 .SLASH SJ^ + 27590 .SPACE A^ + 003216' 041552 557041 +BINRY + 27600 .SLASH JS^ + 27610 .SPACE S^ + 27620 .COLON JS^ + 27630 .SPACE O^ + 27640 .ARROW 31^ + 003217' 544063 057014 +BINRY + + 27660 .SPACE J^ + 27670 .SLASH COMP^ + 27680 .SPACE S^ + 27690 .SLASH COMP^ + 003220' 052570 063570 +BINRY + 27700 .COLON CA1^ + 27710 .ARROW 31^ + 27720 .SPACE I^ + 27730 .SLASH COMP^ + 27740 .SPACE M^ + 003221' 014051 570055 +BINRY + 27750 .SLASH COMP^ + + 27770 .COLON SJ^ + 27780 .ARROW 31^ + 27790 .SPACE JUM^ + 003222' 570014 052065 +BINRY + 27800 .SLASH PSJ^ + 27810 .SPACE SKI^ + 003223' 055567 063053 +BINRY + 27820 .COLON PSJ^ + 27830 .SPACE P^ + 27840 .COLON COMP^ + 27850 .ARROW 03^ + 27860 .POINT ^ + 003224' 051060 002040 +BINRY + 27870 .COMMA ^ + 27880 .SLASH L^ + 27890 .COLON E^ + 27900 .POINT E^ + 27910 .COMMA ^ + 27920 .SPACE L^ + 003225' 263045 040054 +BINRY + 27930 .SLASH E^ + 27940 .SLASH PA^ + 27950 .SPACE G^ + EDDT V.005A - EXEC MODE VERSION PAGE 68-1 + OP DECODER + + 27960 .SLASH E^ + 003226' 573500 047573 +BINRY + 27970 .COLON N^ + 27980 .POINT N^ + 27990 .COMMA ^ + 28000 .POINT G^ + 003227' 056040 047040 +BINRY + 28010 .COMMA ^ + EDDT V.005A - EXEC MODE VERSION PAGE 69 + OP DECODER + + 28030 ;HALF WORDS + + 28050 .COLON HWT^ + 28060 .ARROW 51^ + 28070 .SLASH HW1^ + 28080 .ARROW 21^ + 28090 .SPACE R^ + 003230' 024616 010062 +BINRY + 28100 .SLASH HW2^ + 28110 .SPACE L^ + 28120 .COLON HW2^ + 28130 .SPACE R^ + 28140 .SLASH HW3^ + 003231' 614054 062623 +BINRY + 28150 .COLON HW1^ + 28160 .ARROW 21^ + 28170 .SPACE L^ + 28180 .SLASH HW4^ + 28190 .SPACE R^ + 003232' 010054 622062 +BINRY + 28200 .COLON HW4^ + 28210 .SPACE L^ + 28220 .COLON HW3^ + 28230 .ARROW 32^ + 28240 .SLASH IMS^ + 28250 .SPACE Z^ + 003233' 054015 366072 +BINRY + 28260 .SLASH IMS^ + 28270 .SPACE O^ + 28280 .SLASH IMS^ + 28290 .SLASH EIMS^ + 003234' 366057 366357 +BINRY + EDDT V.005A - EXEC MODE VERSION PAGE 70 + OP DECODER + + 28310 ;TEST INSTRUCTIONS + + 28330 .COLON ACBM^ + 28340 .ARROW 31^ + 28350 .SLASH AC1^ + 28360 .ARROW 01^ + 28370 .SPACE D^ + 003235' 014641 000044 +BINRY + 28380 .SLASH AC2^ + 28390 .SPACE S^ + 28400 .SLASH AC2^ + 28410 .COLON AC1^ + 28420 .ARROW 01^ + 003236' 645063 645000 +BINRY + 28430 .SPACE R^ + 28440 .SLASH AC2^ + 28450 .COMMA L^ + 28460 .COLON AC2^ + 28470 .ARROW 42^ + 003237' 062645 054021 +BINRY + 28480 .SPACE N^ + 28490 .SLASH EAN^ + 28500 .SPACE Z^ + 28510 .SLASH EAN^ + 003240' 056655 072655 +BINRY + 28520 .SPACE C^ + 28530 .SLASH EAN^ + 28540 .SPACE O^ + 28550 .COLON EAN^ + 28560 .ARROW 12^ + 003241' 043655 057005 +BINRY + 28570 .POINT ^ + 28580 .COMMA ^ + 28590 .SLASH E^ + 28600 .SLASH PA^ + 28610 .SLASH N^ + 003242' 040573 500602 +BINRY + EDDT V.005A - EXEC MODE VERSION PAGE 71 + OP DECODER + + 28630 ;BOOLEAN + + 28650 .COLON BOOLE^ + 28660 .ARROW 24^ + 28670 .SLASH ST^ + 28680 .COLON AN^ + 28690 .SPACE AND^ + 003243' 013713 041056 +BINRY + 28700 .SLASH B2^ + 28710 .SLASH AN^ + 28720 .SLASH ST^ + 003244' 044716 664713 +BINRY + 28730 .SLASH AN^ + 28740 .SLASH ST^ + + 28760 .SPACE X^ + 28770 .COLON OR^ + 28780 .SPACE OR^ + 003245' 664713 070057 +BINRY + 28790 .SLASH B2^ + 28800 .SPACE I^ + 28810 .SLASH OR^ + 003246' 062716 051675 +BINRY + 28820 .SLASH AN^ + 28830 .SPACE EQ^ + 28840 .SLASH DV2^ + 003247' 664045 061410 +BINRY + 28850 .SLASH ST^ + 28860 .SLASH OR^ + 28870 .SLASH ST^ + 28880 .SLASH OR^ + 003250' 713675 713675 +BINRY + 28890 .SLASH OR^ + + 28910 .COLON ST^ + 28920 .SPACE SET^ + 003251' 675063 045064 +BINRY + 28930 .COLON B2^ + 28940 .ARROW 24^ + 28950 .SPACE Z^ + 28960 .SLASH IMB^ + 28970 .SLASH IMB^ + 003252' 013072 350350 +BINRY + 28980 .COLON CA^ + 28990 .SPACE C^ + 29000 .SLASH TA^ + 29010 .COLON TM^ + 29020 .SPACE M^ + 29030 .SLASH IMB^ + 003253' 043730 055350 +BINRY + + 29050 .COLON CM^ + 29060 .SPACE C^ + EDDT V.005A - EXEC MODE VERSION PAGE 71-1 + OP DECODER + + 29070 .SLASH TM^ + 29080 .COLON TA^ + 29090 .SPACE A^ + 29100 .SLASH IMB^ + 003254' 043724 041350 +BINRY + 29110 .SLASH IMB^ + 29120 .SLASH IMB^ + 29130 .COLON CB^ + 29140 .SPACE C^ + 29150 .SLASH BIMB^ + 003255' 350350 043347 +BINRY + 29160 .SLASH IMB^ + 29170 .SLASH CA^ + + 29190 .SLASH CA^ + 29200 .SLASH CM^ + 003256' 350722 722726 +BINRY + 29210 .SLASH CM^ + 29220 .SLASH CB^ + 29230 .SPACE O^ + 29240 .SLASH IMB^ + 003257' 726734 057350 +BINRY + EDDT V.005A - EXEC MODE VERSION PAGE 72 + OP DECODER + + 29260 ;MORE UUO'S + + 29280 .COLON U50^ + 29290 .ARROW 03^ + 29300 .COMMA OPE^ + 003260' 002057 060045 +BINRY + 29310 .SLASH N^ + 29320 .POINT ^ + 29330 .POINT ^ + 29340 .POINT ^ + 003261' 602040 040040 +BINRY + 29350 .POINT ^ + 29360 .COMMA ^ + 29370 .COMMA RENAM^ + 003262' 040062 045056 +BINRY + 29380 .SLASH E^ + 29390 .COMMA I^ + 003263' 041055 573051 +BINRY + 29400 .SLASH N^ + 29410 .COMMA OU^ + 29420 .SLASH T^ + 003264' 602057 065421 +BINRY + + 29440 .COLON U703^ + 29450 .ARROW 02^ + 29460 .COMMA CLOS^ + 003265' 001043 054057 +BINRY + 29470 .SLASH E^ + 29480 .COMMA RELEA^ + 003266' 063573 062045 +BINRY + 29490 .SLASH S^ + 003267' 054045 041372 +BINRY + 29500 .COMMA MTAP^ + 003270' 055064 041060 +BINRY + 29510 .SLASH E^ + 29520 .COMMA UGET^ + 003271' 573065 047045 +BINRY + 29530 .SLASH F^ + EDDT V.005A - EXEC MODE VERSION PAGE 73 + OP DECODER + + 29550 IF1, + 29560 < + 29570 BLOCK <CLOC+3>/4 + 29580 > + + 29600 IF2, + 29610 < + 29620 IFN BINC-^D36, + 29630 < + 003272' 064205 000000 29640 +BINRY + 29650 > + 29660 > + + + + 29700 IFNDEF CLOC.,<CLOC.=CLOC> + 29710 IFN CLOC.-CLOC,<PRINTX PHASE ERROR IN OPTABLE> + EDDT V.005A - EXEC MODE VERSION PAGE 74 + OP DECODER + + + 003273' 000000 003274' 29740 PNTR: EXP INST ;POINTER TO BITS IN INST + 003274' 000000 000000 29750 INST: 0 ;BINARY FOR INSTRUCTION + 003275' 000000 000000 29760 CHP: 0 ;CHAR POINTER INTO TXT, TXT+1 + 003276' 29770 TXT: BLOCK 2 ;STORE INPUT TEXT FOR OPEVAL + 003300' 000000 000000 29780 SAVPDL: 0 ;SAVE PUSH DOWN LIST POINTER + + 003301' 441100 003100' 29800 BTAB: POINT 9,TBL ;TABLE USED TO GET NEXT BYTE POINTER + 003302' 331100 003100' 29810 POINT 9,TBL,8 ;FOR TRANSFER BYTE + 003303' 221100 003100' 29820 POINT 9,TBL,17 + 003304' 111100 003100' 29830 POINT 9,TBL,26 + + 003305' 200240 003312' 29850 OPEVAL: MOVE T,OPEV1 ;EVALUATE FOR AN OP CODE + 003306' 201300 002222' 29860 MOVEI W1,SYM + 003307' 200100 003467' 29870 MOVE R,[POINT 7,TXT] + 003310' 260040 002031' 29880 PUSHJ P,SPT4 + 003311' 201240 000000 29890 MOVEI T,0 + 003312' 136240 000002 29900 OPEV1: IDPB T,R + 003313' 202040 003300' 29910 MOVEM P,SAVPDL + 003314' 624000 000004 29920 TRZA F,OUTF + 003315' 660000 000004 29930 OPTYPE: TRO F,OUTF ;TYPE AN OPCODE SYMBOLICALLY + 003316' 242240 777745 29940 LSH T,-33 + 003317' 202240 003274' 29950 MOVEM T,INST ;GET OPCODE INTO RIGHT 9 BITS + 003320' 200240 003467' 29960 MOVE T,[XWD 440700,TXT] + 003321' 202240 003275' 29970 MOVEM T,CHP ;FOR OPEVAL,SETUP POINTER TO INPUT TEXT + 003322' 620000 000002 29980 DEC: TRZ F,ITF ;CLEAR INSTRUCTION TYPED FLAG + 003323' 403100 000006 29990 CLEARB R,W1 + 003324' 200340 003301' 30000 MOVE W2,BTAB + 003325' 134240 000007 30010 DC1: ILDB T,W2 ;GET NEXT BYTE IN TBL + 003326' 303240 000040 30020 CAILE T,40 + 003327' 301240 000073 30030 CAIL T,73 + 003330' 365100 003325' 30040 SOJGE R,DC1 ;SKIP OVER # BYTES = C(R) + 003331' 327100 003325' 30050 JUMPG R,DC1 ;SKIP OVER ALPHA TEXT WITHOUT COUNTING + 003332' 275240 000040 30060 SUBI T,40 + 003333' 322240 003362' 30070 JUMPE T,DECX ;TRANSFER ON ASTOP CODE + 003334' 327240 003345' 30080 JUMPG T,DC2 + 003335' 137240 003470' 30090 DPB T,[XWD 340500,PNTR] ;SETUP R ON A DISPATCH BYTE + 003336' 620240 777774 30100 TRZ T,-4 + 003337' 350000 000005 30110 AOS T + 003340' 137240 003471' 30120 DPB T,[XWD 300600,PNTR] + 003341' 606000 000004 30130 TRNN F,OUTF + 003342' 254000 003401' 30140 JRST DC6 ;FOR OPEVAL ONLY + 003343' 135100 003273' 30150 LDB R,PNTR ;GET # BYTES TO SKIP OVER + 003344' 254000 003325' 30160 JRST DC1 + + 003345' 571245 777745 30180 DC2: HRREI T,-33(T) + 003346' 321240 003354' 30190 JUMPL T,DECT ;TYPE OUT A LETTER + 003347' 201305 000025 30200 MOVEI W1,FIR.(T) ;BYTE IS A TRANSFER + 003350' 231300 000004 30210 IDIVI W1,4 + 003351' 200347 003301' 30220 MOVE W2,BTAB(W2) ;CALCULATE POINTER TO NEXT BYTE + 003352' 271346 000000 30230 ADDI W2,(W1) + 003353' 254000 003325' 30240 JRST DC1 + + EDDT V.005A - EXEC MODE VERSION PAGE 75 + OP DECODER + + + 003354' 602000 000004 30280 DECT: TRNE F,OUTF + 003355' 254000 003425' 30290 JRST DC8 ;TYPE OUT A LETTER + 003356' 134300 003275' 30300 ILDB W1,CHP ;GET NEXT INPUT LETTER + 003357' 302305 000133 30310 CAIE W1,133(T) ;COMPARE WITH ASSUMED NEXT LETTER + 003360' 254000 003366' 30320 JRST NOMAT ;DOESNT MATCH + 003361' 254000 003325' 30330 JRST DC1 ;MATCHES, TRY NEXT + + 003362' 602000 000004 30350 DECX: TRNE F,OUTF ;STOP (CODE 40) HAS BEEN SEEN + 003363' 263040 000000 30360 POPJ P, ;IF FOR OUTPUT, RETURN + 003364' 134300 003275' 30370 ILDB W1,CHP ;GET NEXT INPUT CHAR IF ANY + 003365' 322300 003415' 30380 JUMPE W1,DC7 ;DOES # OF CHARS MATCH + 003366' 262040 000002 30390 NOMAT: POP P,R ;NO, BACK UP AND TRY SOME MORE + 003367' 262040 000007 30400 POP P,W2 + 003370' 262040 003273' 30410 POP P,PNTR + 003371' 262040 003275' 30420 POP P,CHP + 003372' 350000 000002 30430 NOMAT1: AOS R ;ASSUME NEXT NUMBER FOR BIN VALUE + 003373' 137100 003273' 30440 DPB R,PNTR ;STUFF INTO ANSWER + 003374' 135100 003273' 30450 LDB R,PNTR + 003375' 326100 003403' 30460 JUMPN R,DC6AA ;IF =0, BYTE WAS TOO BIG + 003376' 312040 003300' 30470 CAME P,SAVPDL + 003377' 254000 003366' 30480 JRST NOMAT ;NOT AT TOP LEVEL + 003400' 254000 000125' 30490 JRST UNDEF ;UNDEFINED, FINALLY + + 003401' 201100 000000 30510 DC6: MOVEI R,0 ;ASSUME 0 FOR INITIAL BINARY VALUE + 003402' 137100 003273' 30520 DPB R,PNTR + 003403' 316040 003300' 30530 DC6AA: CAMN P,SAVPDL + 003404' 254000 003410' 30540 JRST DC6BB + 003405' 135241 777776 30550 LDB T,-2(P) ;OLD VALUE OF PNTR + 003406' 312241 000000 30560 CAME T,(P) + 003407' 254000 003372' 30570 JRST NOMAT1 + 003410' 261040 003275' 30580 DC6BB: PUSH P,CHP + 003411' 261040 003273' 30590 PUSH P,PNTR + 003412' 261040 000007 30600 PUSH P,W2 + 003413' 261040 000002 30610 PUSH P,R + 003414' 254000 003325' 30620 JRST DC1 + + 003415' 200040 003300' 30640 DC7: MOVE P,SAVPDL ;RESTORE PUSH DOWN POINTER + 003416' 200240 003274' 30650 MOVE T,INST + 003417' 242240 000033 30660 LSH T,33 ;PUSH BINARY INTO POSITION FOR OPEVAL + 003420' 135100 003472' 30670 LDB R,[POINT 3,T,8] + 003421' 641240 700000 30680 TLC T,700000 + 003422' 647240 700000 30690 TLCN T,700000 + 003423' 137100 003473' 30700 DPB R,[POINT 10,T,12] ;ONLY DONE FOR IO INSTRUCTIONS + 003424' 254000 000062' 30710 JRST L4 + + 003425' 660000 000002 30730 DC8: TRO F,ITF ;SET INSTRUCTION TYPED FLAG + 003426' 201245 000133 30740 MOVEI T,133(T) + 003427' 260040 002676' 30750 PUSHJ P,TOUT ;OUTPUT A LETTER + 003430' 402000 002223' 30760 CLEARM SPSAV ;SO $D WONT TRY TO DELETE OP CODES + 003431' 254000 003325' 30770 JRST DC1 + EDDT V.005A - EXEC MODE VERSION PAGE 76 + OP DECODER + + 003432' 30790 LIT + 003432' 002307' 000010 + 003433' 773767 002423 + 003434' 770767 000200 + 003435' 542613 000000 + 003436' 000002 000002 + 003437' 000000 000000 + 003440' 420202 000000 + 003441' 000044 000000 + 003442' 410300 002201' + 003443' 331100 001241' + 003444' 002700 001241' + 003445' 270400 001241' + 003446' 270400 002652' + 003447' 264000 001041' + 003450' 264000 001066' + 003451' 002236' 002237' + 003452' 777000 000000 + 003453' 270400 002206' + 003454' 331100 002206' + 003455' 220400 002206' + 003456' 777777 400000 + 003457' 270300 000005 + 003460' 330600 000005 + 003461' 220400 000005 + 003462' 004006 000000 + 003463' 777740 000000 + 003464' 344300 002401' + 003465' 254200 000000' + 003466' 000011 111111 + 003467' 440700 003276' + 003470' 340500 003273' + 003471' 300600 003273' + 003472' 330300 000005 + 003473' 271200 000005 + + + 003500' 30820 IFN EDDT&1&<EDDT>B36,<BUFF: BLOCK 40> + + 003540' 30840 PS: BLOCK LPDL + + 003610' 30860 DDTEND=. + + 30880 END + +NO ERRORS DETECTED + +PROGRAM BREAK IS 003610 + +10K CORE USED + EDDT V.005A - EXEC MODE VERSION PAGE 77 + SYMBOL TABLE + +%ACBM 001126 +A 000002 +AA 000010 +ABSA 001002' +AC0 002267' +AC17 002306' +ACCF 000613' +ADR 000016 +AR 000011 +ARM 002310' +ASSEM 000573' +AUTOP 001361' +AUTOPI 002266' +B 000003 +B1ADR 002236' +B1CNT 002240' +B1INS 001043' +B1SKP 002237' +BASE1 001011' +BASECH 001005' +BCOM 001071' +BCOM2 001105' +BCOM3 001103' +BDISP 002744' +BEG 000001 +BINC 000022 SPD +BINRY 064205 000000 SPD +BITO 003034' +BITT 003051' +BITT2 003055' +BLK1 002547' +BLK2 002557' +BLK3 002565' +BLKEND 002425' +BLOCK 002540' +BLOCKS 002537' +BNADR 002263' +BP1 001041' +BPLUP 001245' +BPLUP1 001246' +BPN 001066' +BPS 001317' +BPS1 001327' +BPS2 001333' +BPS3 001345' +BPS4 001346' +BPS5 001356' +BREAK 001123' +BREAK1 001147' +BTAB 003301' +BUFF 003500' +C 000004 +CARR 000700' + EDDT V.005A - EXEC MODE VERSION PAGE 77-1 + SYMBOL TABLE + +CCF 010000 +CDR 011400 000000 INT +CF 000040 +CF1 000400 +CHP 003275' +CJTOUT 002016' +CKSM 000017 +CLOC 000752 SPD +CLOC. 000752 +CON 000774' +CONS1 001464' +CONSM 001463' +CONSYM 001462' +CONTRO 000344' +CORE 002457' +CORE1 002461' +CORE2 002470' +CPOPJ 000374' +CPOPJ1 000373' +CPUSHP 002652' +CR 015000 000000 INT +CRF 002657' +CRN 002655' +CTF 000400 +DC 020000 000000 INT +DC1 003325' +DC2 003345' +DC6 003401' +DC6AA 003403' +DC6BB 003410' +DC7 003415' +DC8 003425' +DCSA 030000 000000 INT +DCSB 030400 000000 INT +DD1 000007' +DD1.5 000011' +DD2 000013' +DDT 000000' ENT +DDTEND 003610' INT +DDTX 000000' ENT +DEC 003322' +DECT 003354' +DECX 003362' +DEF1 000515' +DEF2 000525' +DEF3 000533' +DEF4 000553' +DEFIN 000507' +DEFV 002224' +DELI 200000 +DELO 400000 +DEN 002211' +DEP 001376' + EDDT V.005A - EXEC MODE VERSION PAGE 77-2 + SYMBOL TABLE + +DEP1 001402' +DEPR 001372' +DEPRA 000725' +DEPRA2 000732' +DEPRS 001371' +DF 027000 000000 INT +DIS 013000 000000 INT +DISP 002747' +DIVD 000571' +DLS 024000 000000 INT +DOLLAR 000346' +DSK 017000 000000 INT +DTC 021000 000000 INT +DTS 021400 000000 INT +DVF 040000 +EDDT 000003 +EFFEC 001622' +EFFEC0 001677' +EFFEC1 001702' +EFFEC2 001707' +EFFEC3 001716' +EQUAL 000740' +ERR 000123' +ESTU 002213' +ESTUT 002214' +EVAL 000351' +EVAL0 000352' +EVAL1 000356' +EVAL2 000357' +EVAL3 000362' +F 000000 +FAF 001000 +FCP 002163' +FEED 002450' +FEED1 002455' +FEF 400000 +FETCH 001404' +FH 002221' +FIR. 000025 SPD +FIRARG 001410' +FP1 002073' +FP1A 002100' +FP3 002101' +FP3A 002112' +FP4 002120' +FP4A 002122' +FP4B 002127' +FP7 002135' +FP7A 002140' +FP7A1 002143' +FP7B 002144' +FPF 020000 +FPWR 002217' + EDDT V.005A - EXEC MODE VERSION PAGE 77-3 + SYMBOL TABLE + +FRACT 002216' +FRASE 002204' +FRASE1 002210' +FSGN 002166' +FSV 002215' +FT 002154' +FT0 002163' +FT01 002162' +FT8 002150' +FTERM 002220' +FTOC 002003' +GETW 002532' +GETW1 002534' +GLOBAL 040000 +GO 001020' +HALT 254200 000000 INT +HLFW 001536' +HWRDS 000771' +ICON 000713' +IFIX 003022' +IJSA 001255' +IJSP 001270' +IJSR 001261' +IJSR2 001263' +IJSR3 001266' +INDIRE 000607' +INOUT 001572' +INSRT1 001275' +INSRT3 001303' +INSRTB 001274' +INST 003274' +IPUSHJ 001251' +ITF 000002 +IXCT 001205' +IXCT4 001203' +IXCT5 001211' +IXCT6 001240' +JEN 254500 000000 INT +JOBREL 000037 +JOBSYM 000036 +JOV 255400 000000 INT +KILC 002200' +KILL 000435' +KILL1 000462' +KILL2 000464' +KILLA 000446' +KILRET 000445' +L1 000026' +L1RPR 000030' +L2 000035' +L21 000050' +L211 000055' +L4 000062' + EDDT V.005A - EXEC MODE VERSION PAGE 77-4 + SYMBOL TABLE + +L5 000116' +LCT 002662' +LE1 000217' +LE1A 000235' +LE2 000236' +LEAV 001241' +LEAV1 001122' +LET 000221' +LET1 000234' +LF 002660' +LF1 002000 +LI0 000652' +LI1 000654' +LI2 000663' +LINEF 000651' +LIS 000015' +LIS0 000020' +LIS1 000022' +LIS2 000023' +LISTEN 002714' +LLOC 002226' +LLOCO 002227' +LOAD1 002417' +LOAD2 002423' +LOADB 002575' +LOADE 002614' +LOADER 002412' +LOCAL 100000 +LOOK 001420' +LOOK1 001427' +LOOK2 001447' +LOOK3 001452' +LOW 777777 777661' +LPDL 000050 +LPRN 000577' +LPT 012400 000000 INT +LTF 000020 +LWT 002206' +MASK 001612' +MASK1 001620' +MASK2 001615' +MF 000002 +MINUS 000574' +MLF 000200 +MSK 002235' +MTC 022000 000000 INT +MTM 023000 000000 INT +MTS 022400 000000 INT +MULT 000570' +NAF 000200 +NBP 000010 +NM1 000251' +NM1A 000255' + EDDT V.005A - EXEC MODE VERSION PAGE 77-5 + SYMBOL TABLE + +NM1A1 000257' +NM1B 000264' +NOMAT 003366' +NOMAT1 003372' +NSYMS 000116 +NUM 000204' +NUM1 000244' +NWORD 001625' +OCON 000702' +ODF 000012 +ODFM 002311' +OPEV1 003312' +OPEVAL 003305' +OPTYPE 003315' +OSYM 000703' +OUTF 000004 +P 000001 +PAD 001543' +PAD1 001562' +PADS1 001547' +PADS1A 001560' +PADS2 001561' +PADS3 001563' +PADS3A 001564' +PADS3B 001567' +PADS4 001570' +PADSO 001545' +PBLK 002351' +PBLK1 002354' +PERC 000220' +PERIOD 000313' +PI 000400 000000 INT +PI3 001504' +PI3A 001507' +PI3B 001510' +PI4 001511' +PI5 001515' +PI7 001523' +PI7.1 001531' +PI8 001534' +PID 000000 +PILOC 000337' +PIN 001467' +PLT 014000 000000 INT +PLUS 000575' +PNAME 740000 +PNTR 003273' +POW2 000306' +POWER 000271' +POWF 004000 +PRGM 002212' +PRNC 002203' +PROC0 001167' + EDDT V.005A - EXEC MODE VERSION PAGE 77-6 + SYMBOL TABLE + +PROC1 001175' +PROC2 001200' +PROCD1 001165' +PROCED 001160' +PRS 000004 +PS 003540' +PSR 002315' +PSYM 000741' +PTF 000100 +PTP 010000 000000 INT +PTPP 000100 +PTR 010400 000000 INT +PTRR 000104 +PUN1 002333' +PUN2 002327' +PUNCH 002324' +PUNZ 002365' +PUNZ0 002364' +PUNZ2 002375' +PUNZ4 002401' +PWRD 002440' +PWRD2 002441' +Q2F 000001 +QF 000001 +QUAN 000336' +QUAN1 000340' +QUAN2 000341' +QUEST1 000170' +QUEST2 000173' +QUEST3 000176' +QUEST4 000202' +QUESTN 000166' +R 000002 +R50PNT 000745' +RD 000003 +RELA 000777' +REMOV1 001310' +REMOV3 001313' +REMOVB 001307' +REMUN 000470' +RES1 002646' +RESTOR 002637' +RESTR1 002640' +RET 000134' +ROF 000010 +RPRN 000627' +RPRN1 000646' +RUNEND 002530' +S 000003 +SAF 002000 +SARS 002312' +SAV1 002622' +SAV5 002631' + EDDT V.005A - EXEC MODE VERSION PAGE 77-7 + SYMBOL TABLE + +SAVE 002615' +SAVPDL 003300' +SAVPI 002231' +SAVTTY 002233' +SBF 000020 +SCH 000010 +SCHM 002307' +SEAR1 001642' +SEAR2 001650' +SEAR2A 001651' +SEAR3 001655' +SEAR4 001675' +SEARC 001627' +SEMIC 001016' +SET1 000556' +SET2 000557' +SETNAM 000555' +SETUP 001722' +SETUP1 001723' +SETUP2 001725' +SF 000004 +SFLOT 000772' +SIXBI1 000421' +SIXBI2 000431' +SIXBIN 000422' +SIXBP 000753' +SIXBP1 000755' +SLAS1 000711' +SLASH 000706' +SLL 010000 +SPAC1 000625' +SPACE 000623' +SPSAV 002223' +SPT 002030' +SPT0 002027' +SPT1 002033' +SPT2 002037' +SPT3 002047' +SPT4 002031' +SPTX 002050' +STARTA 002234' +STF 004000 +SUPTYO 000705' +SVBT2 003077' +SVBT3 003076' +SVBTS 003074' +SVBTS2 003075' +SYL 002205' +SYM 002222' +SYMBOL 000773' +SYMD 002052' +SYMP 002230' +T 000005 + EDDT V.005A - EXEC MODE VERSION PAGE 77-8 + SYMBOL TABLE + +TAB 000717' +TAG 000477' +TBL 003100' +TBL1 000011 +TBL2 000014 +TDC 032000 000000 INT +TDS 032400 000000 INT +TEM 002313' +TEM1 002314' +TEM2 002207' +TEM3 002210' +TEXI 000375' +TEXI2 000407' +TEXI3 000415' +TEXIN 002740' +TEXO 000763' +TEXT 002171' +TEXT2 002173' +TEXTT 002170' +TFLOT 002060' +TFLOT1 002070' +TIF 100000 +TIN 002666' +TMC 034000 000000 INT +TMS 034400 000000 INT +TOC 002003' +TOC1 002010' +TOC2 002014' +TOC3 002012' +TOC4 002017' +TOC5 002023' +TOC6 002025' +TOCA 002006' +TOUT 002676' +TSPC 002664' +TTY 012000 000000 INT +TTY1 002722' +TTYLEV 002732' +TTYRET 002721' +TTYY 000120 +TXT 003276' +ULIM 001413' +ULIM1 001415' +ULIMIT 002225' +UND1 000137' +UNDEF 000125' +VARRW 000674' +VER2 002500' +VER3 002526' +VERIFY 002456' +W 000004 +W1 000006 +W2 000007 + EDDT V.005A - EXEC MODE VERSION PAGE 77-9 + SYMBOL TABLE + +WORD 001624' +WRD 002201' +WRD2 002202' +WRONG 000127' +WRONG1 000130' +XEC 001024' +XEC0 001026' +XEC1 001034' +ZERO 001747' +ZERO1 001752' +ZERO2 001757' +ZEROR 001776' +ZLOW 000040 +ZZ 000010 +$1B 002236' INT +$2B 002241' INT +$3B 002244' INT +$4B 002247' INT +$5B 002252' INT +$6B 002255' INT +$7B 002260' INT +$8B 002263' INT +$I 002231' INT +$M 002235' INT +%A 000207 SPD +%AC1 000573 SPD +%AC2 000577 SPD +%ACBM 000564 SPD +%ACCP 000466 SPD +%AN 000616 SPD +%AO 000356 SPD +%AOB 000402 SPD +%B 000221 SPD +%B2 000650 SPD +%BD 000025 SPD +%BIMB 000301 SPD +%BOOLE 000614 SPD +%BPUT 000134 SPD +%BYTE 000223 SPD +%C 000464 SPD +%CA 000654 SPD +%CA1 000504 SPD +%CB 000666 SPD +%CM 000660 SPD +%COMP 000522 SPD +%DP 000254 SPD +%DV 000335 SPD +%DV1 000340 SPD +%DV2 000342 SPD +%E 000525 SPD +%EAN 000607 SPD +%EIMS 000311 SPD +%F 000137 SPD + EDDT V.005A - EXEC MODE VERSION PAGE 77-10 + SYMBOL TABLE + +%FLO 000170 SPD +%H1 000344 SPD +%HAK 000257 SPD +%HW1 000550 SPD +%HW2 000546 SPD +%HW3 000555 SPD +%HW4 000554 SPD +%HWT 000540 SPD +%I 000304 SPD +%IMB 000302 SPD +%IMS 000320 SPD +%IO 000036 SPD +%J 000440 SPD +%JP 000405 SPD +%JS 000476 SPD +%L 000215 SPD +%LD 000247 SPD +%LMB 000213 SPD +%M 000217 SPD +%ML 000326 SPD +%ML1 000331 SPD +%MO 000310 SPD +%MV 000261 SPD +%N 000534 SPD +%O 000153 SPD +%OI 000041 SPD +%OR 000627 SPD +%P 000243 SPD +%PA 000432 SPD +%PO 000415 SPD +%POP 000443 SPD +%PSJ 000521 SPD +%PU 000407 SPD +%PUS 000437 SPD +%R 000423 SPD +%S 000324 SPD +%S1 000462 SPD +%S2 000456 SPD +%S3 000457 SPD +%SH 000446 SPD +%SJ 000511 SPD +%ST 000645 SPD +%T 000353 SPD +%TA 000662 SPD +%TM 000656 SPD +%U40 000101 SPD +%U47 000114 SPD +%U50 000700 SPD +%U60 000123 SPD +%U603 000144 SPD +%U6062 000157 SPD +%U62 000163 SPD +%U703 000724 SPD + EDDT V.005A - EXEC MODE VERSION PAGE 77-11 + SYMBOL TABLE + +%USET 000072 SPD +%UUO 000044 SPD +%Z 000155 SPD + LLL OOOOOOOOO AAAAAAAAA DDDDDDDDDDDD EEEEEEEEEEEEEEE RRRRRRRRRRRR +LLL OOOOOOOOO AAAAAAAAA DDDDDDDDDDDD EEEEEEEEEEEEEEE RRRRRRRRRRRR +LLL OOOOOOOOO AAAAAAAAA DDDDDDDDDDDD EEEEEEEEEEEEEEE RRRRRRRRRRRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEEEEEEEEEEE RRRRRRRRRRRR +LLL OOO OOO AAA AAA DDD DDD EEEEEEEEEEEE RRRRRRRRRRRR +LLL OOO OOO AAA AAA DDD DDD EEEEEEEEEEEE RRRRRRRRRRRR +LLL OOO OOO AAAAAAAAAAAAAAA DDD DDD EEE RRR RRR +LLL OOO OOO AAAAAAAAAAAAAAA DDD DDD EEE RRR RRR +LLL OOO OOO AAAAAAAAAAAAAAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLL OOO OOO AAA AAA DDD DDD EEE RRR RRR +LLLLLLLLLLLLLLL OOOOOOOOO AAA AAA DDDDDDDDDDDD EEEEEEEEEEEEEEE RRR RRR +LLLLLLLLLLLLLLL OOOOOOOOO AAA AAA DDDDDDDDDDDD EEEEEEEEEEEEEEE RRR RRR +LLLLLLLLLLLLLLL OOOOOOOOO AAA AAA DDDDDDDDDDDD EEEEEEEEEEEEEEE RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :LOADER.LST [8,200] Created: 20-April-1967 11:18:00 Printed: 24-April-1978 11:22:29 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1855 +File will be deleted after printing + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 1 + DICK GRUEN: V25 3 AUG 68 + + SUBTTL DICK GRUEN: V25 3 AUG 68 + + + ;K=1 ;K=1 MEANS 1KLOADER + IFNDEF K,<K=0> ;K=0 MEANS F4 LOADER + + ;RPGSW=1 ;MEANS RPG FEATURE + IFNDEF RPGSW,<RPGSW=0> + ;LDAC=1 ;MEANS LOAD CODE INTO ACS + IFNDEF LDAC,<LDAC=0> + + ;BLTSYM=1 ;MOVE SYMBOL TABLE DOWN TO END OF PROG + IFNDEF BLTSYM,<BLTSYM=0> + + ;EXPAND=1 ;FOR AUTOMATIC CORE EXPANSION + IFNDEF EXPAND,< IFN K,<EXPAND=0> + IFE K,<EXPAND=1>> + + ;PP=1 ;ALLOW PROJ-PROG # + IFNDEF PP,<PP=0> + + ;CHN5=0 ;IF CHAIN WHICH DOESN'T SAVES JOB41 + IFNDEF CHN5,<CHN5=1> + + IFE K,< TITLE LOADER - LOADS MACROX AND SIXTRAN FOUR> + IFN K,< TITLE 1KLOAD - LOADS MACROX> + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 2 + DICK GRUEN: V25 3 AUG 68 + + ;ACCUMULATOR ASSIGNMENTS + 000000 F=0 ;FLAGS IN LH, SA IN RH + 000001 N=1 ;PROGRAM NAME POINTER + 000002 X=2 ;LOADER OFFSET + 000003 H=3 ;HIGHEST LOC LOADED + 000004 S=4 ;UNDEFINED POINTER + 000005 R=5 ;RELOCATION CONSTANT + 000006 B=6 ;SYMBOL TABLE POINTER + 000007 D=7 + 000010 T=10 + 000011 V=T+1 + 000012 W=12 ;VALUE + 000013 C=W+1 ;SYMBOL + 000014 E=C+1 ;DATA WORD COUNTER + 000015 Q=15 ;RELOCATION BITS + 000016 A=Q+1 ;SYMBOL SEARCH POINTER + 000017 P=17 ;PUSHDOWN POINTER + ;FLAGS F(0 - 17) + 000001 CSW==1 ;ON - COLON SEEN + 000002 ESW==2 ;ON - EXPLICIT EXTENSION IDENT. + 000004 SKIPSW==4 ;ON - DO NOT LOAD THIS PROGRAM + 000010 FSW==10 ;ON - SCAN FORCED TO COMPLETION + 000020 FCONSW==20 ;ON - FORCE CONSOLE OUTPUT + 000100 ASW==100 ;ON - LEFT ARROW ILLEGAL + 000200 FULLSW==200 ;ON - STORAGE EXCEEDED + 000400 SLIBSW==400 ;ON - LIB SEARCH IN THIS PROG + 001000 DSYMSW==1000 ;ON - LOAD WITH SYMBOLS FOR DDT + 002000 REWSW==2000 ;ON - REWIND AFTER INIT + 004000 LIBSW==4000 ;ON - LIBRARY SEARCH MODE + 010000 F4LIB==10000 ;ON - F4 LIBRARY SEARCH LOOKUP + 020000 ISW==20000 ;ON - DO NOT PERFORM INIT + 040000 SYMSW==40000 ;ON - LOAD LOCAL SYMBOLS + 100000 DSW==100000 ;ON - CHAR IN IDENTIFIER + 200000 NSW==200000 ;ON - SUPPRESS LIBRARY SEARCH + 400000 SSW==400000 ;ON - SWITCH MODE + ;FLAGS N(0 - 17) + 000001 ALLFLG==1 ;ON - LIST ALL GLOBALS + 000002 ISAFLG==2 ;ON - IGNORE STARTING ADDRESSES + 000004 COMFLG==4 ;ON - SIZE OF COMMON SET + 000010 IFE K,< F4SW==10 ;F4 IN PROGRESS + 000020 RCF==20 ;READ DATA COUNT + 000040 SYDAT==40 ;SYMBOL IN DATA> + 000100 SLASH==100 ;SLASH SEEN + 000200 IFE K,< BLKD1==200 ;ON- FIRST BLOCK DATA SEEN + 000400 PGM1==400 ;ON FIRST F4 PROG SEEN + 001000 DZER==1000 ;ON - ZERO SECOND DATA WORD> + 002000 EXEQSW==2000 ;IMMEDIATE EXECUTION + 004000 DDSW==4000 ;GO TO DDT + IFN RPGSW,<RPGF==10000 ;IN RPG MODE> + 020000 AUXSWI==20000 ;ON - AUX. DEVICE INITIALIZED + 040000 AUXSWE==40000 ;ON - AUX. DEVICE ENTERED + IFN PP,<PPSW==100000 ;ON - READING PROJ-PROG # + PPCSW==200000 ;ON - READING PROJ #> + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 3 + DICK GRUEN: V25 3 AUG 68 + + 000137 LOC 137 + 000137 000000 000025 OCT 25 ;VERSION # + 000000' RELOC + MLON + SALL + + + + ;MONITOR LOCATIONS IN THE USER AREA + + 000140 JOBPRO==140 ;PROGRAM ORIGIN + 000134 JOBBLT==134 ;BLT ORIGIN + 000131 JOBCHN==131 ;RH = PROG BREAK OF FIRST BLOCK DATA + ;LH = PROG BREAK OF FIRST F4 PROG + + ;CALLI DEFINITIONS + + 000003 CDDTOUT==3 ;CALLI DDTOUT + 000012 CEXIT==12 ;CALLI EXIT + 000005 CDDTGT==5 ;CALLI DDTGT + 000002 CSETDDT==2 ;CALLI SETDDT + + ;LENGTH OF PUSHDOWN LIST FOR POLISH FIXUPS + + 000060 PPDL==60 + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 4 + DICK GRUEN: V25 3 AUG 68 + + IFN RPGSW,< + RPGSET: CALLI 0 + INIT 17,1 ;SET UP DSK + SIXBIT /DSK/ + XWD 0,CTLIN + JRST NUTS + MOVE [SIXBIT /QQLOAD/] ;NAME OF COMMAND FILE + MOVEM CTLNAM + MOVSI (SIXBIT /RPG/) ;AND EXT + MOVEM CTLNAM+1 + SETZM CTLNAM+3 + LOOKUP 17,CTLNAM ;THERE? + JRST NUTS ;NO + INIT 16,16 ;GET SET TO DELETE QQLOAD.RPG + SIXBIT /DSK/ + 0 + JRST LD ;GIVE UP COMPLETELY + SETZM CTLNAM+3 + HLLZS CTLNAM+1 ;CLEAR OUT EXTRA JUNK + LOOKUP 16,CTLNAM + JRST LD + RENAME 16,ZEROS ;DELETE IT + JFCL ;IGNORE IF IT WILL NOT GO + RELEASE 16,0 ;GET RID OF THIS DEVICE + SETZM NONLOD ;THIS IS NOT A CONTINUATION + RPGS3: MOVEI CTLBUF + MOVEM JOBFF ;SET UP BUFFER + INBUF 17,1 + MOVEI [ASCIZ / + LOADING + /] ;PRINT MESSAGE THAT WE ARE STARTING + CALLI CDDTOUT + SKIPE NONLOD ;CONTINUATION? + JRST RPGS2 ;YES, SPECIAL SETUP + MOVSI R,F.I ;NOW SO WE CAN SET FLAG + BLT R,R + TLO N,RPGF + JRST CTLSET ;SET UP TTY + RPGS1: PUSHJ P,[TLNE F,ESW ;HERE FROM FOO* COMMAND, STORE NAME + JRST LDDT3 ;SAVE EXTENSION + TLZE F,CSW!DSW ;OR AS NAME + MOVEM W,DTIN + POPJ P,] + MOVEM 0,SVRPG# ;SAVE 0 JUST IN CASE + SETZM NONLOD# ;DETERMINE IF CONTINUATION + MOVEI 0,2(B) ;BY SEEING IF ANY SYMBOLS LOADED + CAME 0,JOBREL + SETOM NONLOD ;SET TO -1 AND SKIP CALLI + MOVE 0,ILD1 + MOVEM 0,RPG1 + INIT 17,1 + RPG1: 0 + XWD 0,CTLIN + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 4-1 + DICK GRUEN: V25 3 AUG 68 + + JSP A,ILD5 + LOOKUP 17,DTIN ;THE FILE NAME + JRST ILD9 + JRST RPGS3 + + RPGS2: MOVSI 0,RPGF ;SET FLAG + IORM 0,F.C+N + TLO N,RPGF + MOVE 0,SVRPG + JRST LD2Q ;BACK TO INPUT SCANNING + > + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 5 + DICK GRUEN: V25 3 AUG 68 + + + ;MONITOR LOADER CONTROL + + 000000' BEG: + LD: IFN RPGSW,<SKIPA ;NORMAL INITIALIZE + JRST RPGSET ;SPECIAL INIT> + 000000' 513000 000042 HLLZS 42 ;GET RID OF ERROR COUNT IF NOT IN RPG MODE + 000001' 047000 000000 CALLI 0 ;INITIALIZE THIS JOB + 000002' 205240 002031' NUTS: MOVSI R,F.I ;SET UP INITIAL ACCUMULATORS + 000003' 251240 000005 BLT R,R + 000004' 041140 000001 CTLSET: INIT 3,1 ;INITIALIZE CONSOLE + 000005' 646471 000000 SIXBIT /TTY/ + 000006' 002040' 002043' XWD BUFO,BUFI + 000007' 047000 000012 CALLEX: CALLI CEXIT ;DEVICE ERROR, FATAL TO JOB + 000010' 201600 002064' MOVEI E,TTY1 + 000011' 202600 000000* MOVEM E,JOBFF + 000012' 064140 000001 INBUF 3,1 + 000013' 065140 000001 OUTBUF 3,1 ;INITIALIZE OUTPUT BUFFERS + 000014' 067140 000000 OUTPUT 3, ;DO INITIAL REDUNDANT OUTPUT + 000015' 550300 000000* HRRZ B,JOBREL ;PICK UP CORE BOUND + 000016' 332000 000000* SKIPE JOBDDT ;DOES DDT EXIST? + 000017' 550300 000000* HRRZ B,JOBSYM ;USED BOTTOM OF SYMBOL TABLE INSTEAD + 000020' 274300 001753' SUB B,SE3 ;INITIALIZE SYMBOL TABLE POINTER + 000021' 303146 000001 CAILE H,1(B) ;TEST CORE ALLOCATION + 000022' 047000 000012 CALLI CEXIT ;INSUFFICIENT CORE, FATAL TO JOB + 000023' 204600 000002 MOVS E,X ;SET UP BLT POINTER + 000024' 541602 000001 HRRI E,1(X) + 000025' 402014 777777 SETZM -1(E) ;ZERO FIRST WORD + 000026' 251606 000000 BLT E,(B) ;ZERO CORE UP TO THE SYMBOL AREA + 000027' 550200 000006 HRRZ S,B ;INITIALIZE UNDEF. POINTER + 000030' 540040 000006 HRR N,B ;INITIALIZE PROGRAM NAME POINTER + 000031' 541240 000140 HRRI R,JOBPRO ;INITIALIZE THE LOAD ORIGIN + 000032' 200600 001756' MOVE E,COMM ;SET .COMM. AS THE FIRST PROGRAM + 000033' 202606 000001 MOVEM E,1(B) ;STORE IN SYMBOL TABLE + 000034' 552246 000002 HRRZM R,2(B) ;STORE COMMON ORIGIN + 000035' 201600 002022' MOVEI E,F.C ;INITIALIZE STATE OF THE LOADER + 000036' 251600 002030' BLT E,B.C + 000037' 402000 001761' SETZM MDG ;MULTIPLY DEFINED GLOBAL COUNT + 000040' 205500 254200 MOVSI W,254200 ;STORE HALT IN JOB41 + 000041' 202502 000000* MOVEM W,JOB41(X) ;... + IFN LDAC!BLTSYM,<MOVEI W,20 ;SET UP SPACE TO SAVE FOR ACS AND + MOVEM W,KORSP# ;USER DEFINITIONS WITH DDT> + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 6 + DICK GRUEN: V25 3 AUG 68 + + + IFN RPGSW,<JRST LD2Q> + LD2: IFN RPGSW,<MOVSI B,RPGF ;HERE ON ERRORS, TURN OFF RPG + ANDCAM B,F.C+N ;IN CORE> + ;LOADER SCAN FOR FILE NAMES + + 000042' 205300 002022' LD2Q: MOVSI B,F.C ;RESTORE ACCUMULATORS + 000043' 251300 000006 BLT B,B + 000044' 200740 001755' MOVE P,PDLPT ;INITIALIZE PUSHDOWN LIST + 000045' 402000 002045' SETZM BUFI2 ;CLEAR INPUT BUFFER POINTER + 000046' 402000 000616' IFE PP,< SETZM ILD1 ;CLEAR INPUT DEVICE NAME> + IFN PP,< MOVSI T,(SIXBIT /DSK/) ;ASSUME DSK + MOVEM T,ILD1 + SETZM OLDDEV# ;TO MAKE IT GO BACK AFTER /D FOR LIBSR> + 000047' 402000 002054' SETZM DTIN ;CLEAR INPUT FILE NAME + IFN PP,<SETZM PPN# ;CLEAR INPUT PROJ-PROG #> + + 000050' 071040 000000 LD2B: RELEAS 1, ;RELEASE BINARY INPUT DEVICE + IFN RPGSW,< TLNE N,RPGF ;NOT IF DOING RPG + JRST LD2BA> + 000051' 201400 000052 MOVEI T,"*" + 000052' 136400 002041' IDPB T,BUFO1 ;OUTPUT ASTERISK TO START INPUT + 000053' 067140 000000 OUTPUT 3, + 000054' 621000 022707 LD2BA: TLZ F,FULLSW+ASW+ISW+CSW+ESW+SKIPSW+SLIBSW+REWSW + 000055' 603000 004000 TLNE F,LIBSW ;WAS LIBRARY MODE ON? + 000056' 661000 000004 TLO F,SKIPSW ;YES, NORMAL MODE IS SKIPPING + + LD2D: IFN PP,<SETZM PPN ;DO NOT REMEMBER PPNS FOR NOW + LD2DB: SKIPE W,OLDDEV ;RESET DEVICE IF NEEDED + CAMN W,ILD1 ;IS IT SAME? + JRST LD2DA ;YES, FORGET IT + TLZ F,ISW+DSW+FSW+REWSW + MOVEM W,ILD1> + 000057' LD2DA: + IFN RPGSW,< SETZM DTIN1 ;CLEAR EXTENSION> + 000057' 201500 000000 MOVEI W,0 ;INITIALIZE IDENTIFIER SCAN + 000060' 201600 000006 MOVEI E,6 ;INITIALIZE CHARACTER COUNTER + 000061' 200440 001754' MOVE V,LSTPT ;INITIALIZE BYTE POINTER TO W + 000062' 621000 500010 TLZ F,SSW+DSW+FSW ;LEAVE SWITCH MODE + LD3: IFN RPGSW,<TLNE N,RPGF ;CHECK RPG FEATURE + JRST RPGRD> + 000063' 377000 002045' SOSG BUFI2 ;DECREMENT CHARACTER COUNT + 000064' 066140 000000 INPUT 3, ;FILL TTY BUFFER + 000065' 134400 002044' ILDB T,BUFI1 ;LOAD T WITH NEXT CHARACTER + 000066' 200640 000010 LD3AA: MOVE Q,T + 000067' 231640 000011 IDIVI Q,11 ;TRANSLATE TO 4 BIT CODE + 000070' 135656 000561' LDB Q,LD8(A) ;LOAD CLASSIFICATION CODE + 000071' 305640 000004 CAIGE Q,4 ;MODIFY CODE IF .GE. 4 + 000072' 607000 400000 TLNN F,SSW ;MODIFY CODE IF SWITCH MODE OFF + 000073' 271640 000004 ADDI Q,4 ;MODIFY CLASS. CODE FOR DISPATCH + 000074' 550715 000100' HRRZ A,LD3A(Q) ;LOAD RH DISPATCH ENTRY + 000075' 301640 000010 CAIL Q,10 ;SKIP IF CORRECT DISPATCH ENTRY + 000076' 554715 000070' HLRZ A,LD3A-10(Q) ;LOAD LH DISPATCH ENTRY + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 6-1 + DICK GRUEN: V25 3 AUG 68 + + 000077' 254020 000016 JRST @A ;JUMP TO INDICATED LOCATION + + ;COMMAND DISPATCH TABLE + + 000100' 000063' 000542' LD3A: XWD LD3,LD7B ;IGNORED CHAR, BAD CHAR (SWITCH) + 000101' 000461' 000466' XWD LD6A,LD6 ;</> OR <(>, LETTER (SWITCH) + 000102' 000115' 000524' XWD LD5,LD6C ;<:>, DIGIT (SWITCH ARG.) + 000103' 000127' 000527' XWD LD5A,LD6D ;<.>, ESCAPE SWITCH MODE <)> + 000104' 000145' 000533' XWD LD5C,LD7 ;<=> OR <L. ARROW>, BAD CHAR. + 000105' 000134' 000110' XWD LD5B,LD4 ;<,>, ALPHABETIC CHAR. + 000106' 000201' 000110' XWD LD5D,LD4 ;<CR.>, NUMERIC CHAR. + 000107' 000205' 000533' XWD LD5E1,LD7 ;<ALT MODE>, BAD CHAR. <)> + + IFN RPGSW,<RPGRD: SOSG CTLIN+2 ;CHECK CHARACTER COUNT + JRST [IN 17,0 + JRST .+1 ;OK + STATO 17,740000 + JRST LD2 + JSP A,ERRPT + SIXBIT /ERROR WHILE READING COMMAND FILE%/ + JRST LD2] + IBP CTLIN+1 ;ADVANCE POINTER + MOVE T,@CTLIN+1 ;AND CHECK FOR LINE # + TRNE T,1 + JRST [MOVNI T,5 + ADDM T,CTLIN+2 + AOS CTLIN+1 + JRST RPGRD ];GO READ AGAIN + LDB T,CTLIN+1 ;GET CHR + JRST LD3AA ;PASS IT ON> + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 7 + DICK GRUEN: V25 3 AUG 68 + + ;ALPHANUMERIC CHARACTER, NORMAL MODE + 000110' 361600 000063' LD4: SOJL E,LD3 ;JUMP IF NO SPACE FOR CHAR IN W + 000111' 275400 000040 SUBI T,40 ;CONVERT FROM ASCII TO SIXBIT + 000112' 136400 000011 IDPB T,V ;DEPOSIT CHAR OF IDENTIFIER IN W + 000113' 661000 100000 TLO F,DSW ;SET IDENTIFIER FLAG + 000114' 254000 000063' JRST LD3 ;RETURN FOR NEXT CHARACTER + + ;DEVICE IDENTIFIER DELIMITER <:> + + 000115' 261740 000012 LD5: PUSH P,W ;SAVE W + 000116' 663000 000001 TLOE F,CSW ;TEST AND SET COLON FLAG + 000117' 260740 000752' PUSHJ P,LDF ;FORCE LOADING + 000120' 262740 000012 POP P,W ;RESTORE W + 000121' 603000 000002 TLNE F,ESW ;TEST SYNTAX + 000122' 254000 000536' JRST LD7A ;ERROR, MISSING COMMA ASSUMED + 000123' 322500 000057' JUMPE W,LD2D ;JUMP IF NULL DEVICE IDENTIFIER + 000124' 202500 000616' MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER + IFN PP,<MOVEM W,OLDDEV ;WE HAVE A NEW ONE SO IGNORE OLD> + 000125' 621000 122010 TLZ F,ISW+DSW+FSW+REWSW ;CLEAR OLD DEVICE FLAGS + IFN PP,<SETZM PPN ;CLEAR OLD PP #> + 000126' 254000 000057' JRST LD2D ;RETURN FOR NEXT IDENTIFIER + + ;FILE NAME EXTENSION IDENTIFIER DELIMITER <.> + + 000127' 663000 000002 LD5A: TLOE F,ESW ;TEST AND SET EXTENSION FLAG + 000130' 254000 000536' JRST LD7A ;ERROR, TOO MANY PERIODS + 000131' 623000 100001 TLZE F,CSW+DSW ;SKIP IF NULL IDENT AND NO COLON + 000132' 202500 002054' MOVEM W,DTIN ;STORE FILE IDENTIFIER + 000133' 254000 000057' JRST LD2D ;RETURN FOR NEXT IDENTIFIER + + ;INPUT SPECIFICATION DELIMITER <,> + + 000134' LD5B: + IFN PP,<TLZE N,PPCSW ;READING PP #? + JRST [ + HRLM D,PPN ;STORE PROJ # + JRST LD6A1] ;GET PROG # + PUSHJ P,RBRA ;CHECK FOR MISSING RBRA> + 000134' 627000 000010 TLZN F,FSW ;SKIP IF PREV. FORCED LOADING + 000135' 260740 000751' PUSHJ P,FSCN2 ;LOAD (FSW NOT SET) + 000136' 254000 000057' JRST LD2D ;RETURN FOR NEXT IDENTIFIER + + 000137' 603000 000002 LD5B1: TLNE F,ESW ;TEST EXTENSION FLAG + 000140' 254000 000723' JRST LDDT3 ;EXPLICIT EXTENSION IDENTIFIER + 000141' 627000 100001 TLZN F,CSW+DSW ;SKIP IF IDENT. OR COLON + 000142' 263740 000000 POPJ P, + 000143' 202500 002054' MOVEM W,DTIN ;STORE FILE IDENTIFIER + 000144' 254000 000722' JRST LDDT2 ;ASSUME <.REL> IN DEFAULT CASE + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 8 + DICK GRUEN: V25 3 AUG 68 + + ;OUTPUT SPECIFICATION DELIMITER <=> OR <LEFT ARROW> + ;OR PROJ-PROG # BRACKETS <[> AND <]> + 000145' LD5C: + IFN RPGSW,<CAIN T,"@" ;CHECK FOR * COMMAND + JRST RPGS1> + IFN PP,<CAIN T,"[" ;PROJ-PROG #? + JRST [TLO N,PPSW+PPCSW ;SET FLAGS + MOVEM W,PPNW# ;SAVE W + MOVEM E,PPNE# ;SAVE E + MOVEM V,PPNV# ;SAVE V + JRST LD6A1-1] ;READ NUMBERS AS SWITCHES + CAIN T,"]" ;END OF PP #? + JRST [PUSHJ P,RBRA ;PROCESS RIGHT BRACKET + JRST LD3 ];READ NEXT IDENT> + 000145' 663000 000100 TLOE F,ASW ;TEST AND SET LEFT ARROW FLAG + 000146' 254000 000536' JRST LD7A ;ERROR, MISPLACED LEFT ARROW + 000147' 260740 000137' PUSHJ P,LD5B1 ;STORE IDENTIFIER + 000150' 627000 000002 TLZN F,ESW ;TEST EXTENSION FLAG + 000151' 205500 554160 MOVSI W,554160 ;ASSUME <.MAP> IN DEFAULT CASE + 000152' 202500 002061' MOVEM W,DTOUT1 ;STORE FILE EXTENSION IDENTIFIER + 000153' 200500 002054' MOVE W,DTIN ;LOAD INPUT FILE IDENTIFIER + 000154' 202500 002060' MOVEM W,DTOUT ;USE AS OUTPUT FILE IDENTIFIER + IFN PP,<MOVE W,PPN ;PROJ-PROG # + MOVEM W,DTOUT+3 ;...> + 000155' 200500 000616' MOVE W,ILD1 ;LOAD INPUT DEVICE IDENTIFIER + 000156' 202500 000165' MOVEM W,LD5C1 ;USE AS OUTPUT DEVICE IDENTIFIER + IFN PP,< SKIPE W,OLDDEV ;RESTORE OLD + MOVEM W,ILD1> + ;INITIALIZE AUXILIARY OUTPUT DEVICE + 000157' 623040 060000 TLZE N,AUXSWI+AUXSWE ;FLUSH CURRENT DEVICE + 000160' 071100 000000 RELEASE 2, ;... + 000161' 040500 004064' CALL W,[SIXBIT ?DEVCHR?] ;IS DEVICE A TTY? + 000162' 603500 000010 TLNE W,10 ;... + 000163' 254000 000057' JRST LD2D ;YES, SKIP INIT + 000164' 041100 000001 INIT 2,1 ;INIT THE AUXILIARY DEVICE + 000165' 000000 000000 LD5C1: 0 ;AUXILIARY OUTPUT DEVICE NAME + 000166' 002046' 000000 XWD ABUF,0 ;BUFFER HEADER + 000167' 265700 000643' JSP A,ILD5 ;ERROR RETURN + 000170' 603000 002000 TLNE F,REWSW ;REWIND REQUESTED? + 000171' 040100 004065' CALL 2,[SIXBIT /UTPCLR/] ;DECTAPE REWIND + 000172' 623000 002000 TLZE F,REWSW ;SKIP IF NO REWIND REQUESTED + 000173' 072100 000001 MTAPE 2,1 ;REWIND THE AUX DEV + 000174' 201600 002544' MOVEI E,AUX ;SET BUFFER ORIGIN + 000175' 202600 000011* MOVEM E,JOBFF + 000176' 065100 000001 OUTBUF 2,1 ;INITIALIZE SINGLE BUFFER + 000177' 661040 020000 TLO N,AUXSWI ;SET INITIALIZED FLAG + 000200' 254000 000057' JRST LD2D ;RETURN TO CONTINUE SCAN + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 9 + DICK GRUEN: V25 3 AUG 68 + + + ;RIGHT SQUARE BRACKET (PROJ-PROG NUMBERS) + IFN PP,< + RBRA: TLZN N,PPSW ;READING PP #? + POPJ P, ;NOPE, RETURN + TLZE N,PPCSW ;COMMA SEEN? + JRST LD7A ;NOPE, INDICATE ERROR + HRRM D,PPN ;STASH PROG NUMBER + MOVE W,PPNW# ;PICKUP OLD IDENT + MOVE E,PPNE# ;RESTORE CHAR COUNT + MOVE V,PPNV# ;RESTORE BYTE PNTR + POPJ P, ;TRA 1,4 + + ;RIGHT JUSTIFY W + + RJUST: JUMPE W,LD7A ;NOTHING TO RIGHT JUSTIFY + TRNE W,77 ;IS W RJUSTED YET? + POPJ P, ;YES, TRA 1,4 + LSH W,-6 ;NOPE, TRY AGAIN + JRST .-3 ;...> + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 10 + DICK GRUEN: V25 3 AUG 68 + + + ;LINE TERMINATION <CARRIAGE RETURN> + + 000201' LD5D: + IFN PP,<PUSHJ P,RBRA ;CHECK FOR UNTERMINATED PP #> + 000201' 260740 000730' PUSHJ P,FSCN ;FORCE SCAN TO COMPLETION + 000202' 254000 000050' JRST LD2B ;RETURN FOR NEXT LINE + + ;TERMINATE LOADING <ALT MODE> + + 000203' 332000 000007 LD5E: SKIPE D ;ENTER FROM G COMMAND + 000204' 540000 000007 HRR F,D ;USE NUMERIC STARTING ADDRESS + 000205' LD5E1: + 000205' 260740 001730' PUSHJ P,CRLF ;START A NEW LINE + 000206' 260740 000227' PUSHJ P,SASYM ;SETUP JOBSA,JOBFF,JOBSYM,JOBUSY + IFN LDAC!BLTSYM,<HRRZ A,R ;SET UP BLT OF ACS + ADDI A,(X) ;END + ADD A,KORSP ;ADD IN SPACE RESERVED + CAIL A,(S) + IFN EXPAND,<JRST [PUSHJ P,XPAND> + PUSHJ P,[ + IFE EXPAND,< JSP A,ERRPT + SIXBIT /MORE CORE NEEDED#/> + CALLI CEXIT] + IFN EXPAND,< JRST .-1]> + HRRM R,BOTACS# ;SAVE FOR LATER + HRRZ A,R ;SET BLT + ADD A,X + HRL A,X + MOVE Q,A + BLT A,17(Q)> + IFN BLTSYM,<HRRZ A,R ;PLACE TO BLT TO + ADD A,KORSP + MOVE W,A ;SAVE DEST + ADDI A,(X) ;AFTER ADJUSTMENT + MOVE Q,S ;UDEF PNTR + ADD Q,B ;TOTAL UNDEFS AND DEFS IN LEFT + HLROS Q ;NOW NEG IN RIGHT + MOVNS Q ;POSITIVE + ADDI Q,-1(A) ;END OF BLT + HRLI A,1(S) ;AND GET PLACE TO BLT FROM + SUBI W,1(S) ;PREST LOC OF SYMBOL TABLE + ADDM W,JOBSYM(X) + ADDM W,JOBUSY(X) ;ADJUST POINTERS + BLT A,(Q) ;MOVE IT + SKIPN JOBDDT(X) ;IS DDT THERE? + JRST NODDT + SUBI Q,-1(X) + HRRM Q,JOBFF(X) ;RESTET JOBFF IF DDT IS IN + HRLM Q,JOBSA(X) + NODDT:> + 000207' 200500 004066' MOVE W,[SIXBIT ?LOADER?] ;FINAL MESSAGE + 000210' 260740 000251' PUSHJ P,BLTSET ;SETUP FOR FINAL BLT + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 10-1 + DICK GRUEN: V25 3 AUG 68 + + 000211' 071100 000000 RELEASE 2, ;RELEASE AUX. DEV. + IFN RPGSW,<RELEASE 17,0 ;RELEASE COMMAND DEVICE> + 000212' 200500 004067' LD5E5: MOVE W,[BLT Q,(A)] ;BLT OF ALL CODE + 000213' 202500 000134 MOVEM W,JOBBLT ;STASH IN JOB DATA AREA + 000214' 202502 000134 MOVEM W,JOBBLT(X) ;STASH IN RELOCATED JOBDATA AREA + 000215' 200500 000007' LD5E2: MOVE W,CALLEX ;EXIT AFTER BLT + 000216' 627040 002000 TLZN N,EXEQSW ;IMMEDIATE EXECUTION REQUESTED? + 000217' 254000 000225' JRST LD5E3 ;NOPE, LET USER TYPE START HIMSELF + 000220' 550502 000000* HRRZ W,JOBSA(X) ;PICKUP USUAL STARTING ADDRESS + 000221' 603040 004000 TLNE N,DDSW ;DDT EXECUTION? + 000222' 550502 000016* HRRZ W,JOBDDT(X) ;USE DDT SA INSTEAD + 000223' 322500 000215' JUMPE W,LD5E2 ;IF SA=0, DON'T EXECUTE + 000224' 505500 254000 HRLI W,(JRST) ;INSTRUCTION TO EXECUTE + 000225' LD5E3: + 000225' 202502 000135 IFE LDAC,<MOVEM W,JOBBLT+1(X) ;STASH FOR EXECUTION> + IFN LDAC,<MOVEM W,JOBBLT+2(X) ;STASH FOR EXECUTION + HRLZ 17,JOBFF(X) ;BUT FIRST BLT ACS + MOVE W,[BLT 17,17] ;... + MOVEM W,JOBBLT+1(X) ;...> + 000226' 254000 000134 JRST JOBBLT ;IF IT WERE DONE, 'TWERE BEST DONE QUICKLY + + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 11 + DICK GRUEN: V25 3 AUG 68 + + + ;SEARCH LIBRARY, PRINT UNDEFS, SETUP JOBSA,JOBFF,JOBSYM,JOBUSY + + 000227' 607000 200000 SASYM: TLNN F,NSW ;SKIP IF NO SEARCH FLAG ON + 000230' 260740 000653' PUSHJ P,LIBF ;SEARCH LIBRARY FILE + 000231' 260740 000730' PUSHJ P,FSCN ;FORCE SCAN TO COMPLETION + 000232' 260740 001460' PUSHJ P,PMS ;PRINT UNDEFINEDS + 000233' 552002 000220* HRRZM F,JOBSA(X) ;RH OF JOBSA :=STARTING ADDRESS + 000234' 550700 000003 SAS1: HRRZ A,H ;COMPUTE PROG BREAK + 000235' 275702 000000 SUBI A,(X) ;... + 000236' 305705 000000 CAIGE A,(R) ;BUT NO HIGHER THAN RELOC + 000237' 550700 000005 HRRZ A,R ;... + 000240' 506702 000233* HRLM A,JOBSA(X) ;LH OR JOBSA IS PROG BREAK + 000241' 552702 000175* HRRZM A,JOBFF(X) ;RH OF JOBFF CONTAINS PROG BREAK + 000242' 200700 000006 MOVE A,B ;SET JOBSYM W/ SYMBOL TABLE POINTER + 000243' 350000 000016 AOS A ;... + 000244' 202702 000017* MOVEM A,JOBSYM(X) ;... + 000245' 200700 000004 MOVE A,S ;SET JOBUSY W/ UNDEFINED SYMBOL POINTER + 000246' 350000 000016 AOS A ;... + 000247' 202702 000000* MOVEM A,JOBUSY(X) ;... + 000250' 263740 000000 POPJ P, ;RETURN + ;PRINT FINAL MESSAGE, SET UP BLT AC'S, SETDDT, RELEAS + + 000251' 260740 001727' BLTSET: PUSHJ P,FCRLF ;START FINAL MESSAGE + 000252' 260740 001602' PUSHJ P,PWORD ;PRINT W + 000253' 260740 001557' PUSHJ P,SPACE + 000254' 550640 000015* HRRZ Q,JOBREL ;PUBLISH HOW MUCH CORE USED + 000255' 242640 777766 LSH Q,-12 ;... + 000256' 271640 000001 ADDI Q,1 ;... + 000257' 260740 001546' PUSHJ P,RCNUM ;PUBLISH THE NUMBER + 000260' 200500 004070' MOVE W,[SIXBIT /K CORE/] ;PUBLISH THE UNITS + 000261' 260740 001602' PUSHJ P,PWORD ;... + 000262' 260740 001730' PUSHJ P,CRLF ;... + 000263' 205642 000020 MOVSI Q,20(X) ;HOW MUCH CODE TO BLT + 000264' 541640 000020 HRRI Q,20 ;... + 000265' 550700 000042 HRRZ A,42 ;CHECK ON ERRORS + 000266' 322700 000275' JUMPE A,NOEX ;NONE, GO AHEAD + 000267' 627040 002000 TLZN N,EXEQSW ;DID HE WANT TO START EXECUTION? + 000270' 254000 000275' JRST NOEX ;NO + 000271' 265700 001610' JSP A ,ERRPT ;PRINT AN ERROR MESSAGE + 000272' 457045 436564 SIXBIT /EXECUTION DELETED@/ + 000273' 515756 004445 + 000274' 544564 454440 + 000275' 550700 000254* NOEX: HRRZ A,JOBREL ;WHEN TO STOP BLT + 000276' 552702 000275* HRRZM A,JOBREL(X) ;SETUP FOR POSSIBLE IMMED. XEQ + 000277' 275702 000000 SUBI A,(X) ;... + 000300' 301704 000000 IFE BLTSYM,<CAIL A,(S) ;DON'T BLT OVER SYMBOL TABLE + 000301' 201704 000000 MOVEI A,(S) ;OR UNDEFINED TABLE> + 000302' 071040 000000 RELEAS 1, ;RELEASE DEVICES + 000303' 071140 000000 RELEAS 3, ;... + 000304' 200242 000222* MOVE R,JOBDDT(X) ;SET NEW DDT + 000305' 047240 000002 CALLI R,CSETDDT ;... + 000306' 263740 000000 POPJ P, ;RETURN + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 11-1 + DICK GRUEN: V25 3 AUG 68 + + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 12 + DICK GRUEN: V25 3 AUG 68 + + + ;WRITE CHAIN FILES + + 000307' 334702 000131 CHNC: SKIPA A,JOBCHN(X) ;CHAIN FROM BREAK OF FIRST BLOCK DATA + 000310' 544702 000131 CHNR: HLR A,JOBCHN(X) ;CHAIN FROM BREAK OF FIRST F4 PROG + 000311' 553000 000016 HRRZS A ;ONLY RIGHT HALF IS SIGNIFICANT + 000312' 322700 000546' JUMPE A,LD7C ;DON'T CHAIN IF ZERO + 000313' 607040 020000 TLNN N,AUXSWI ;IS THERE AN AUX DEV? + 000314' 254000 000554' JRST LD7D ;NO, DON'T CHAIN + 000315' 261740 000016 PUSH P,A ;SAVE WHEREFROM TO CHAIN + 000316' 332000 000007 SKIPE D ;STARTING ADDR SPECIFIED? + 000317' 540000 000007 HRR F,D ;USE IT + 000320' 260740 000227' PUSHJ P,SASYM ;DO LIB SEARCH, SETUP JOBSA, ETC. + 000321' 262740 000016 POP P,A ;GET WHEREFROM + 000322' 210500 000276* MOVN W,JOBREL ;CALCULATE IOWD FOR DUMP + 000323' 271516 777773 ADDI W,-1-3-CHN5(A) ;... + 000324' 505516 777773 HRLI W,-4-CHN5(A) ;... + 000325' 206500 000363' MOVSM W,IOWDPP ;... + 000326' 271702 777773 ADDI A,-4-CHN5(X) ;ADD IN OFFSET + 000327' 261702 000244* IFN CHN5,<PUSH A,JOBSYM(X) ;SETUP FOUR WORD TABLE + 000330' 261702 000041* PUSH A,JOB41(X) ;...> + 000331' 261702 000304* PUSH A,JOBDDT(X) ;JOBDDT IN ALL CASES + IFE CHN5,<PUSH A,JOBSYM(X) ;JOBDDT, JOBSYM, JOBSA> + 000332' 261702 000240* PUSH A,JOBSA(X) ;JOBRYM ALWAYS LAST + 000333' 070100 000000 CLOSE 2, ;INSURE END OF MAP FILE + 000334' 060100 000017 SETSTS 2,17 ;SET AUX DEV TO DUMP MODE + 000335' 205500 435056 MOVSI W,435056 ;USE .CHN AS EXTENSION + 000336' 202500 002061' MOVEM W,DTOUT1 ;... + 000337' 260740 001523' PUSHJ P,IAD2 ;DO THE ENTER + 000340' 621040 060000 TLZ N,AUXSWI+AUXSWE ;INSURE NO PRINTED OUTPUT + 000341' 200500 004071' MOVE W,[SIXBIT ?CHAIN?] ;FINAL MESSAGE + 000342' 260740 000251' PUSHJ P,BLTSET ;SETUP BLT PNTR, SETDDT, RELEAS + 000343' 047000 000005 CALLI CDDTGT ;START DDT MODE OUTPUT + 000344' 205600 000350' MOVSI CHNBLT,CHAIN3 ;BLT CHAIN3 INTO ACS + 000345' 251600 000014 BLT CHNBLT,CHNBLT ;... + 000346' 201740 000010 MOVEI P,CHNERR ;POINTER TO ERR MESS + 000347' 254000 000000 JRST 0 ;GO DO CHAIN + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 13 + DICK GRUEN: V25 3 AUG 68 + + + ;THE AC SECTION OF CHAIN + + 000350' CHAIN3: + 000000 PHASE 0 + 000350' 251656 000000 BLT Q,(A) ;USUAL LDRBLT + 000351' 067100 000013 OUTPUT 2,IOWDP ;WRITE THE CHAIN FILE + 000352' 063100 760000 STATZ 2,IOBAD!IODEND ;CHECK FOR ERROR OR EOF + 000353' 254000 000006 JRST LOSEBIG ;FOUND SAME, GO GRIPE + 000354' 070100 000000 CLOSE 2, ;FINISH OUTPUT + 000355' 063100 760000 STATZ 2,IOBAD!IODEND ;CHECK FOR FINAL ERROR + 000356' 047000 000003 LOSEBI: CALLI CDDTOUT ;GRIPE ABOUT ERROR + 000357' 047000 000012 CALLI CEXIT ;EXIT + 000360' 422132 644606 CHNERR: ASCIZ ?DEVICE ERROR? ;ERROR MESSAGE + 000361' 425010 551244 + 000362' 476440 000000 + 000363' 000000 000000 IOWDP: Z ;STORE IOWD FOR DUMP HERE + 000014 CHNBLT: ;LAST WORD OF AC CHAIN (ZERO OF I/O POINTER) + 000364' DEPHASE + 000363' IOWDPP=.-1 ;MEMORY LOC OF AC IOWDP + 000364' 000000 000000 Z ;TERMINATOR OF DUMP MODE LIST + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 14 + DICK GRUEN: V25 3 AUG 68 + + ;EXPAND CORE + + IFN EXPAND,< + 000365' 261740 000003 XPAND: PUSH P,H ;GET SOME REGISTERS TO USE + 000366' 261740 000002 PUSH P,X + 000367' 261740 000001 PUSH P,N + 000370' 550100 000322* HRRZ X,JOBREL ;WHAT WE WANT + 000371' 271100 002000 ADDI X,2000 + 000372' 047100 000011 CALLI X,11 ;CORE ALLOCATOR CALLS THIS + 000373' 254000 000432' JRST XPAND6 + 000374' 550140 003402' IFE K,< HRRZ H,MLTP ;GET LOWEST LOCATION + 000375' 607040 000010 TLNN N,F4SW ;IS FORTRAN LOADING> + 000376' 550140 000004 HRRZ H,S ;NO, USE S + 000377' 550100 000370* HRRZ X,JOBREL ;NOW MOVE + 000400' 275100 002000 SUBI X,2000 + 000401' 200042 000000 XPAND2: MOVE N,(X) + 000402' 202042 002000 MOVEM N,2000(X) + 000403' 313100 000003 CAMLE X,H ;TEST FOR END + 000404' 364100 000401' SOJA X,XPAND2; HAND EYE SYSTEM MOVES TABLE + 000405' 505140 776000 HRLI H,-2000 + 000406' 402003 000000 SETZM (H) ;ZERO NEW CORE + 000407' 253140 000406' AOBJN H,.-1 + 000410' 201140 002000 MOVEI H,2000 + 000411' 272140 000004 ADDM H,S + 000412' 272140 000006 ADDM H,B + 000413' 272140 000327* ADDM H,JOBSYM + 000414' 262740 000001 POP P,N + 000415' 271040 002000 ADDI N,2000 + 000416' 607040 000010 IFE K,< TLNN N,F4SW ;F4? + 000417' 254000 000426' JRST XPAND3 + 000420' 272140 003401' ADDM H,PLTP + 000421' 272140 003377' ADDM H,BITP + 000422' 272140 003404' ADDM H,SDSTP + 000423' 272140 003402' ADDM H,MLTP + 000424' 603040 000040 TLNE N,SYDAT + 000425' 272140 000011 ADDM H,V> + 000426' XPAND3: + 000426' 262740 000002 POP P,X + 000427' 262740 000003 POP P,H + 000430' 350017 000000 AOS (P) + 000431' 263740 000000 POPJ P, + 000432' 322100 000442' XPAND6: JUMPE X,XPAND4 + 000433' 265700 001610' JSP A,ERRPT + 000434' 435762 450041 SIXBIT /CORE AVAILABLE, BUT NOT TO YOU#/ + 000435' 664151 544142 + 000436' 544514 004265 + 000437' 640056 576400 + 000440' 645700 715765 + 000441' 030000 000000 + 000442' 265700 001610' XPAND4: JSP A,ERRPT + 000443' 555762 450043 SIXBIT /MORE CORE NEEDED#/ + 000444' 576245 005645 + 000445' 454445 440300 + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 14-1 + DICK GRUEN: V25 3 AUG 68 + + 000446' 262740 000001 XPAND5: POP P,N + 000447' 262740 000002 POP P,X + 000450' 262740 000003 POP P,H + 000451' 263740 000000 POPJ P, + + 000452' 260740 000365' XPAND7: PUSHJ P,XPAND + 000453' 254000 001257' JRST SFULLC + 000454' 254000 000456' JRST POPJM2 + + 000455' 370017 000000 POPJM3: SOS (P) ;POPJ TO CALL-2 + 000456' 370017 000000 POPJM2: SOS (P) ;POPJ TO CALL-1 + 000457' 370017 000000 SOS (P) ;SAME AS POPJ TO + 000460' 263740 000000 POPJ P, ;NORMAL POPJ MINUS TWO + > + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 15 + DICK GRUEN: V25 3 AUG 68 + + + + ;ENTER SWITCH MODE + + 000461' 306400 000057 LD6A: CAIN T,57 ;WAS CHAR A SLASH? + 000462' 661040 000100 TLO N,SLASH ;REMEBER THAT + 000463' 661000 400000 TLO F,SSW ;ENTER SWITCH MODE + 000464' 201340 000000 LD6A1: MOVEI D,0 ;ZERO THE NUBER REGISTER + 000465' 254000 000063' JRST LD3 ;EAT A SWITCH + + ;ALPHABETIC CHARACTER, SWITCH MODE + + 000466' 256010 000371' LD6: XCT LD6B-101(T) ;EXECUTE SWITCH FUNCTION + 000467' 623040 000100 TLZE N,SLASH ;SWITCH MODE ENTERED W/ SLASH? + 000470' 254000 000527' JRST LD6D ;LEAVE SWITCH MODE + 000471' 254000 000464' JRST LD6A1 ;STAY IN SWITCH MODE + + ;DISPATCH TABLE FOR SWITCHES + + ; THE INSTRUCTION AT THE CHARACTER LOCATION IS EXECUTED + + 000472' 661040 000001 LD6B: TLO N,ALLFLG ;A - LIST ALL GLOBALS + 000473' 254000 000542' JRST LD7B ;B - ERROR + 000474' 260740 000307' PUSHJ P,CHNC ;C - CHAIN, START W/ COMMON + 000475' 260740 000710' PUSHJ P,LDDT ;D - DEBUG OPTION, LOAD DDT + 000476' 661040 002000 TLO N,EXEQSW ;E - LOAD AND GO + 000477' 260740 000653' PUSHJ P,LIBF ;F - LIBRARY SEARCH + 000500' 260740 000203' PUSHJ P,LD5E ;G - GO INTO EXECUTION + 000501' 260740 000703' PUSHJ P,LRAIDX ;H - LOAD AN START RAID + 000502' 661040 000002 TLO N,ISAFLG ;I - IGNORE STARTING ADDRESSES + 000503' 621040 000002 TLZ N,ISAFLG ;J - USE STARTING ADDRESSES + 000504' 254000 000542' IFE BLTSYM,<JRST LD7B ;K - ERROR> + IFN BLTSYM,<PUSHJ P,KORADJ ;K - RESERVE SPACE FOR SYM DEFS> + 000505' 661000 004004 TLO F,LIBSW+SKIPSW ;L - ENTER LIBRARY SEARCH + 000506' 260740 001407' PUSHJ P,PRMAP ;M - PRINT STORAGE MAP + 000507' 621000 004004 TLZ F,LIBSW+SKIPSW ;N - LEAVE LIBRARY SEARCH + 000510' 540240 000007 HRR R,D ;O - NEW PROGRAM ORIGIN + 000511' 661000 200000 TLO F,NSW ;P - PREVENT AUTO. LIB. SEARCH + 000512' 621000 200000 TLZ F,NSW ;Q - ALLOW AUTO. LIB. SEARCH + 000513' 260740 000310' PUSHJ P,CHNR ;R - CHAIN, START W/ RESIDENT + 000514' 661000 040000 TLO F,SYMSW ;S - LOAD WITH SYMBOLS + 000515' 260740 000707' PUSHJ P,LDDTX ;T - LOAD AND GO TO DDT + 000516' 260740 001460' PUSHJ P,PMS ;U - PRINT UNDEFINED LIST + 000517' 260740 000704' PUSHJ P,LRAID ;V - LOAD RAID + 000520' 621000 041000 TLZ F,SYMSW+DSYMSW ;W - LOAD WITHOUT SYMBOLS + 000521' 621040 000001 TLZ N,ALLFLG ;X - DO NOT LIST ALL GLOBALS + 000522' 661000 002000 TLO F,REWSW ;Y - REWIND BEFORE USE + 000523' 254000 000000' JRST LD ;Z - RESTART LOADER + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 16 + DICK GRUEN: V25 3 AUG 68 + + + ;SWITCH MODE NUMERIC ARGUMENT + + 000524' 242340 000003 LD6C: LSH D,3 ;BUILD OCTAL NUMERIC ARGUMENT + 000525' 271350 777720 ADDI D,-60(T) + 000526' 254000 000063' JRST LD3 + + ;EXIT FROM SWITCH MODE + + 000527' 621000 400000 LD6D: TLZ F,SSW ;CLEAR SWITCH MODE FLAG + 000530' 603000 000010 TLNE F,FSW ;TEST FORCED SCAN FLAG + 000531' 254000 000057' JRST LD2D ;SCAN FORCED, START NEW IDENT. + 000532' 254000 000063' JRST LD3 ;SCAN NOT FORCED, USE PREV IDENT + ;ILLEGAL CHARACTER, NORMAL MODE + + 000533' 265700 001654' LD7: JSP A,ERRPT8 + 000534' 435041 621605 SIXBIT /CHAR.%/ + 000535' 254000 000042' JRST LD2 + + ;SYNTAX ERROR, NORMAL MODE + + 000536' 265700 001654' LD7A: JSP A,ERRPT8 + 000537' 637156 644170 SIXBIT /SYNTAX%/ + 000540' 050000 000000 + 000541' 254000 000042' JRST LD2 + + ;ILLEGAL CHARACTER, SWITCH MODE + + 000542' 265700 001654' LD7B: JSP A,ERRPT8 + 000543' 636751 644350 SIXBIT /SWITCH%/ + 000544' 050000 000000 + 000545' 254000 000042' JRST LD2 + + ;ATTEMPT TO CHAIN WITH SPECIFIED HALF OF JOBCHN = 0 + + 000546' 265700 001610' LD7C: JSP A,ERRPT ;GRIPE + 000547' 655643 504151 SIXBIT ?UNCHAINABLE AS LOADED@? + 000550' 564142 544500 + 000551' 416300 545741 + 000552' 444544 400000 + 000553' 254000 000042' JRST LD2 + + ;ATTEMP TO CHAIN WITHOUT SPECIFYING DEVICE + + 000554' 265700 001610' LD7D: JSP A,ERRPT ;GRIPE + 000555' 565700 435041 SIXBIT ?NO CHAIN DEVICE@? + 000556' 515600 444566 + 000557' 514345 400000 + 000560' 254000 000042' JRST LD2 + + IFN BLTSYM,<KORADJ: CAMLE D,KORSP ;IF SMALLER IGNORE + MOVEM D,KORSP + POPJ P,> + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 17 + DICK GRUEN: V25 3 AUG 68 + + + ;CHARACTER CLASSIFICATION TABLE DESCRIPTION: + + ; EACH CHARACTER HAS ASSOCIATED WITH IT A FOUR BIT BYTE + ; PACKED IN THE CHARACTER CLASSIFICATION TABLE. THE CHARACTER + ; CLASSIFICATION CODES ARE ORDERED IN SUCH A WAY AS TO GIVE + ; DELIMITERS OF HIGHER PRECEDENCE LOWER CLASSIFICATION NUMBERS. + ; CERTAIN CHARACTERS HAVE NO EFFECT ON THE COMMAND STRING, AND + ; THEREFORE DO NOT EFFECT ORDERING OF DELIMITERS. FOUR CODES + ; ARE RESERVED FOR ALTERNATE DISPATCHES WHILE THE SWITCH MODE IS + ; IN EFFECT. + + + ;CLASSIFICATION BYTE CODES: + + ; BYTE DISP CLASSIFICATION + + ; 00 - 00 ILLEGAL CHARACTER, SWITCH MODE + ; 01 - 01 ALPHABETIC CHARACTER, SWITCH MODE + ; 02 - 02 NUMERIC CHARACTER, SWITCH MODE + ; 03 - 03 SWITCH MODE ESCAPE, SWITCH MODE + + ; 00 - 04 ILLEGAL CHARACTER, NORMAL MODE + ; 01 - 05 ALPHABETIC CHARACTER, NORMAL MODE + ; 02 - 06 NUMERIC CHARACTER, NORMAL MODE + ; 03 - 07 SWITCH MODE ESCAPE, NORMAL MODE + + ; 04 - 10 IGNORED CHARACTER + ; 05 - 11 ENTER SWITCH MODE CHARACTER + ; 06 - 12 DEVICE IDENTIFIER DELIMITER + ; 07 - 13 FILE EXTENSION DELIMITER + ; 10 - 14 OUTPUT SPECIFICATION DELIMITER + ; 11 - 15 INPUT SPECIFICATION DELIMITER + ; 12 - 16 LINE TERMINATION + ; 13 - 17 JOB TERMINATION + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 18 + DICK GRUEN: V25 3 AUG 68 + + + ;BYTE POINTERS TO CHARACTER CLASSIFICATION TABLE + + 000561' 400415 000572' LD8: POINT 4,LD9(Q),3 + 000562' 340415 000572' POINT 4,LD9(Q),7 + 000563' 300415 000572' POINT 4,LD9(Q),11 + 000564' 240415 000572' POINT 4,LD9(Q),15 + 000565' 200415 000572' POINT 4,LD9(Q),19 + 000566' 140415 000572' POINT 4,LD9(Q),23 + 000567' 100415 000572' POINT 4,LD9(Q),27 + 000570' 040415 000572' POINT 4,LD9(Q),31 + 000571' 000415 000572' POINT 4,LD9(Q),35 + + ;CHARACTER CLASSIFIACTION TABLE + + 000572' 200000 000000 LD9: BYTE (4)4,0,0,0,0,0,0,0,0 + 000573' 210422 400000 BYTE (4)4,4,4,4,12,0,0,0,0 + 000574' 000000 000000 BYTE (4)0,0,0,0,0,0,0,0,0 + 000575' 540000 040100 BYTE (4)13,0,0,0,0,4,0,4,0 + 000576' 000001 230011 BYTE (4)0,0,0,0,5,3,0,0,11 + 000577' 016510 421042 BYTE (4)0,7,5,2,2,2,2,2,2 + 000600' 104211 400200 BYTE (4)2,2,2,2,6,0,0,10,0 + 000601' 000104 210421 IFE RPGSW,< BYTE (4)0,0,1,1,1,1,1,1,1> + IFN RPGSW,< BYTE (4) 0,10,1,1,1,1,1,1,1> + 000602' 042104 210421 BYTE (4)1,1,1,1,1,1,1,1,1 + 000603' 042104 210421 BYTE (4)1,1,1,1,1,1,1,1,1 + 000604' 040000 100000 IFE PP,<BYTE (4)1,0,0,0,0,10,0,0,0> + IFN PP,<BYTE (4)1,10,0,10,0,10,0,0,0> + 000605' 000000 000000 BYTE (4)0,0,0,0,0,0,0,0,0 + 000606' 000000 000000 BYTE (4)0,0,0,0,0,0,0,0,0 + 000607' 000000 000013 BYTE (4)0,0,0,0,0,0,0,0,13 + 000610' 550000 000000 BYTE (4)13,4 + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 19 + DICK GRUEN: V25 3 AUG 68 + + + ;INITIALIZE LOADING OF A FILE + + 000611' 201500 002136' ILD: MOVEI W,BUF1 ;LOAD BUFFER ORIGIN + 000612' 202500 000241* MOVEM W,JOBFF + 000613' 663000 020000 TLOE F,ISW ;SKIP IF INIT REQUIRED + 000614' 254000 000621' JRST ILD6 ;DONT DO INIT + 000615' 041040 000014 INIT 1,14 + 000616' 000000 000000 ILD1: 0 ;LOADER INPUT DEVICE + 000617' 000000 002051' XWD 0,BUFR + 000620' 265700 000643' JSP A,ILD5 ;ERROR RETURN + 000621' 623000 002000 ILD6: TLZE F,REWSW ;SKIP IF NO REWIND + 000622' 072040 000001 MTAPE 1,1 ;REWIND + 000623' 076040 002054' ILD2: LOOKUP 1,DTIN ;LOOK UP FILE FROM DIRECTORY + 000624' 254000 000631' JRST ILD3 ;FILE NOT IN DIRECTORY + 000625' 064040 000002 IFE K,< INBUF 1,2 ;SET UP BUFFERS> + IFN K,< INBUF 1,1 ;SET UP BUFFER> + 000626' 661000 000100 TLO F,ASW ;SET LEFT ARROW ILLEGAL FLAG + 000627' 621000 010002 TLZ F,ESW+F4LIB ;CLEAR EXTENSION FLAG + 000630' 263740 000000 POPJ P, + + ; LOOKUP FAILURE + + 000631' 663000 000002 ILD3: TLOE F,ESW ;SKIP IF .REL WAS ASSUMED + 000632' 254000 000635' JRST ILD4 ;FATAL LOOKUP FAILURE + 000633' 402000 002055' SETZM DTIN1 ;ZERO FILE EXTENSION + 000634' 254000 000623' JRST ILD2 ;TRY AGAIN WITH NULL EXTENSION + + 000635' 623000 010000 ILD4: TLZE F,F4LIB ;WAS THIS A TRY FOR F40 LIBRARY? + JRST [MOVE W,[SIXBIT /LIB4/]; YES, TRY LIB4 + MOVEM W,DTIN ;... + PUSHJ P,LDDT2 ;USE .REL EXTENSION + TLZ F,ESW ;... + 000636' 254000 004073' JRST ILD2 ];GO TRY AGAIN + 000637' 265700 001610' ILD9: JSP A,ERRPT + 000640' 434156 565764 SIXBIT /CANNOT FIND#/ + 000641' 004651 564403 + 000642' 254000 000042' JRST LD2 + + ; DEVICE SELECTION ERROR + + 000643' 200516 777775 ILD5: MOVE W,-3(A) ;LOAD DEVICE NAME FROM INIT + 000644' 661000 000020 TLO F,FCONSW ;INSURE TTY OUTPUT + 000645' 260740 001701' PUSHJ P,PRQ ;START W/ ? + 000646' 260740 001602' PUSHJ P,PWORD ;PRINT DEVICE NAME + 000647' 265700 001667' JSP A,ERRPT7 + 000650' 655641 664151 SIXBIT /UNAVAILABLE@/ + 000651' 544142 544540 + 000652' 254000 000042' JRST LD2 + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 20 + DICK GRUEN: V25 3 AUG 68 + + + ;LIBRARY SEARCH CONTROL AND LOADER CONTROL + + ;LIBF ENABLES A LIBRARY SEARCH OF <SYS:LIB4.REL> + + 000653' 260740 000746' LIBF: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + 000654' 260740 000660' PUSHJ P,LIBF1 ;LOAD SYS:JOBDAT.REL + 000655' 661000 010000 TLO F,F4LIB ;INDICATE FORTRAN LIBRARY SEARCH + 000656' 200500 004100' MOVE W,[SIXBIT /LIB40/] ;FIRST TRY AT NAME + 000657' 260740 000661' PUSHJ P,LIBF2 ;LOAD SYS:LIB40.REL + 000660' 200500 004101' LIBF1: MOVE W,[SIXBIT /JOBDAT/] ;LOAD SYS:JOBDAT.REL + 000661' 260740 000716' LIBF2: PUSHJ P,LDDT1 + 000662' 325200 000727' JUMPGE S,EOF2 ;JUMP IF NO UNDEFINED GLOBALS + 000663' 661000 000404 TLO F,SLIBSW+SKIPSW ;ENABLE LIBRARY SEARCH + 000664' 621000 041000 TLZ F,SYMSW+DSYMSW ;DISABLE LOADING WITH SYMBOLS + 000665' 254000 000752' JRST LDF ;INITIALIZE LOADING LIB4 + + ; LIB CONTROLS THE LIBRARY SEARCH OF ONE FILE + + 000666' 325200 000726' LIB: JUMPGE S,EOF1 ;JUMP IF NO UNDEFINED GLOBALS + 000667' 661000 000004 TLO F,SKIPSW ;SET SKIPSW TO IGNORE MODE + 000670' 254000 000753' JRST LOAD ;CONTINUE LIB. SEARCH + + 000671' 302700 000004 LIB1: CAIE A,4 ;TEST FOR ENTRY BLOCK + 000672' 254000 000701' JRST LIB3 ;NOT AN ENTRY BLOCK, IGNORE IT + 000673' 260740 001371' LIB2: PUSHJ P,RWORD ;READ ONE DATA WORD + 000674' 200540 000012 MOVE C,W + 000675' 661540 040000 TLO C,040000 ;SET CODE BITS FOR SEARCH + 000676' 260740 001353' PUSHJ P,SREQ + 000677' 625000 000004 TLZA F,SKIPSW ;REQUEST MATCHES ENTRY, LOAD + 000700' 254000 000673' JRST LIB2 ;NOT FOUND + 000701' 260740 001371' LIB3: PUSHJ P,RWORD ;READ AND IGNORE ONE DATA WORD + 000702' 254000 000701' JRST LIB3 ;LOOP TO IGNORE INPUT + + ;LDDT LOADS <SYS:DDT.REL> AND SETS DSYMSW + + 000703' 661040 006000 LRAIDX: TLO N,DDSW!EXEQSW ;H - LOAD AND START RAID + 000704' 260740 000746' LRAID: PUSHJ P,FSCN1 ;FORCE END OF SCAN + 000705' 200500 004102' MOVE W,[SIXBIT /RAID/] + 000706' 254000 000712' JRST LDDT0 + 000707' 661040 006000 LDDTX: TLO N,DDSW+EXEQSW ;T - LOAD AND GO TO DDT + 000710' 260740 000746' LDDT: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + 000711' 205500 444464 MOVSI W,444464 ;FILE IDENTIFIER <DDT> + 000712' 260740 000716' LDDT0: PUSHJ P,LDDT1 + 000713' 260740 000752' PUSHJ P,LDF ;LOAD <SYS:DDT.REL> + 000714' 661000 001000 TLO F,DSYMSW ;ENABLE LOADING WITH SYMBOLS + 000715' 263740 000000 POPJ P, + + 000716' 202500 002054' LDDT1: MOVEM W,DTIN ;STORE FILE IDENTIFIER + IFN PP,<MOVE W,ILD1 ;SAVE OLD DEV + MOVEM W,OLDDEV> + 000717' 205500 637163 MOVSI W,637163 ;DEVICE IDENTIFIER <SYS> + 000720' 202500 000616' MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 20-1 + DICK GRUEN: V25 3 AUG 68 + + 000721' 621000 026004 TLZ F,ISW+LIBSW+SKIPSW+REWSW ;CLEAR OLD FLAGS + 000722' 205500 624554 LDDT2: MOVSI W,624554 ;EXTENSION IDENTIFIER <.REL> + 000723' 202500 002055' LDDT3: MOVEM W,DTIN1 ;STORE EXTENSION IDENTIFIER + IFN PP,<MOVE W,PPN ;GET PROJ-PROG # + MOVEM W,DTIN+3> + 000724' 263740 000000 POPJ P, + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 21 + DICK GRUEN: V25 3 AUG 68 + + ;EOF TERMINATES LOADING OF A FILE + + 000725' 200740 001757' EOF: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER + 000726' 621000 000404 EOF1: TLZ F,SLIBSW+SKIPSW ;CLEAR ONE FILE LIB. SEARCH FLAG + 000727' 263740 000000 EOF2: POPJ P, + + ; FORCE SCAN TO COMPLETION, LOAD IF NECESSARY + + 000730' 260740 000746' FSCN: PUSHJ P,FSCN1 ;FORCED LOAD BEFORE TEST + 000731' 607000 000200 TLNN F,FULLSW ;TEST FOR OVERLAP + 000732' 263740 000000 POPJ P, ;NO OVERLAP, RETURN + 000733' 200500 000003 MOVE W,H ;FETCH CORE SIZE REQUIRED + 000734' 275504 000001 SUBI W,1(S) ; COMPUT DEFICIENCY + 000735' 321500 000727' JUMPL W,EOF2 ;JUMP IF NO OVERLAP + 000736' 661000 000020 TLO F,FCONSW ;INSURE TTY OUTPUT + 000737' 260740 001701' PUSHJ P,PRQ ;START WITH ? + 000740' 260740 001536' PUSHJ P,PRNUM0 ;INFORM USER + 000741' 265700 001667' JSP A,ERRPT7 + 000742' 675762 446300 SIXBIT /WORDS OF OVERLAP#/ + 000743' 574600 576645 + 000744' 625441 600300 + 000745' 254000 000042' JRST LD2 ;ERROR RETURN + + 000746' 667000 000010 FSCN1: TLON F,FSW ;SKIP IF NOT FIRST CALL TO FSCN + 000747' 607000 100003 TLNN F,CSW+DSW+ESW ;TEST SCAN FOR COMPLETION + 000750' 263740 000000 POPJ P, + 000751' 260740 000137' FSCN2: PUSHJ P,LD5B1 ;STORE FILE OR EXTENSION IDENT. + + ; LOADER CONTROL, NORMAL MODE + + 000752' 260740 000611' LDF: PUSHJ P,ILD ;INITIALIZE LOADING + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 22 + DICK GRUEN: V25 3 AUG 68 + + ;LOAD SUBROUTINE + + 000753' 202740 001757' LOAD: MOVEM P,PDSAV ;SAVE PUSHDOWN POINTER + 000754' 200740 001757' LOAD1: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER + 000755' 260740 001710' LOAD1A: PUSHJ P,WORD ;INPUT BLOCK HEADER WORD + 000756' 211612 400000 MOVNI E,400000(W) ;WORD COUNT - FROM RH OF HEADER + 000757' 554700 000012 HLRZ A,W ;BLOCK TYPE - FROM LH OF HEADER + 000760' 303700 000013 CAILE A,DISPL*2+1 ;TEST BLOCK TYPE NUMBER + 000761' 254000 001000' JRST LOAD4 ;ERROR, ILLEGAL BLOCK TYPE + 000762' 603000 000004 TLNE F,SKIPSW ;BLOCK OK - TEST LOAD STATUS + 000763' 254000 000671' JRST LIB1 ;RETURN TO LIB. SEARCH CONTROL + 000764' 550416 000772' HRRZ T,LOAD2(A) ;LOAD RH DISPATCH ENTRY + 000765' 303700 000005 CAILE A,DISPL ;SKIP IF CORRECT + 000766' 554416 000764' HLRZ T,LOAD2-DISPL-1(A) ;LOAD LH DISPATCH ENTRY + 000767' 603000 000200 TLNE F,FULLSW ;TEST CORE OVERLAP INDICATOR + 000770' 367700 001272' SOJG A,HIGH0 ;IGNORE BLOCK IF NOT TYPE 1 + 000771' 254020 000010 JRST @T ;DISPATCH TO BLOCK SUBROUTINE + + ;DISPATCH TABLE - BLOCK TYPES + + 000772' 001311' 000755' LOAD2: XWD NAME,LOAD1A + 000773' 001306' 001006' XWD START,PROG + 000774' 001340' 001023' XWD LOCD,SYM + 000775' 001002' 001002' XWD LOAD4A,LOAD4A + 000776' 001002' 000701' XWD LOAD4A,LIB3 + 000777' 001002' 001274' LOAD3: XWD LOAD4A,HIGH + + 000005 DISPL=LOAD3-LOAD2 + + ;ERROR EXIT FOR BAD HEADER WORDS + + 001000' LOAD4: IFE K,< + 001000' 306700 000400 CAIN A,400 ;FORTRAN FOUR BLOCK + 001001' 254000 002753' JRST F4LD> + 001002' 265700 001610' LOAD4A: JSP A,ERRPT ;INCORRECT HEADER WORD + 001003' 515454 160046 SIXBIT /ILL. FORMAT#/ + 001004' 576255 416403 + 001005' 254000 000042' JRST LD2 + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 23 + DICK GRUEN: V25 3 AUG 68 + + ;LOAD PROGRAMS AND DATA (BLOCK TYPE 1) + + 001006' 550440 000012 PROG: HRRZ V,W ;LOAD BLOCK LENGTH + 001007' 260740 001371' PUSHJ P,RWORD ;READ BLOCK ORIGIN + 001010' 270440 000012 ADD V,W ;COMPUTE NEW PROG. BREAK + 001011' 307160 000002 CAIG H,@X ;COMPARE WITH PREV. PROG. BREAK + 001012' 201160 000002 MOVEI H,@X ;UPDATE PROGRAM BREAK + 001013' 603000 000200 TLNE F,FULLSW + 001014' 254000 001266' JRST FULLC ;NO ERROR MESSAGE + 001015' 303144 000001 CAILE H,1(S) ; SKIP IF SUFFICIENT CORE AVAILABLE + IFN EXPAND,< JRST [PUSHJ P,XPAND> + JRST FULLC + 001016' 254000 004103' IFN EXPAND,< JRST .-1]> + 001017' 200440 000012 MOVE V,W + 001020' 260740 001371' PROG1: PUSHJ P,RWORD ;READ DATA WORD + 001021' 202520 000002 MOVEM W,@X ;STORE DATA WORD IN PROG. AT LLC + 001022' 344440 001020' AOJA V,PROG1 ;ADD ONE TO LOADER LOC. COUNTER + + ;LOAD SYMBOLS (BLOCK TYPE 2) + + 001023' 260740 001363' SYM: PUSHJ P,PRWORD ;READ TWO DATA WORDS + 001024' 260740 001026' PUSHJ P,SYMPT; PUT INTO TABLE + 001025' 254000 001023' JRST SYM + + ; WFW SYMPT: JUMPL C,SYM3; JUMP IF GLOBAL REQUEST + 001026' 603540 200000 SYMPT: TLNE C,200000 ;GLOBAL REQUEST? WFW + 001027' 321540 001106' JUMPL C,SYM3 ;CHECK FOR 60 NOT JUST HIGH BIT WFW + 001030' 603540 100000 TLNE C,100000 + 001031' 254000 001053' JRST SYM1A ;LOCAL SYMBOL + 001032' 260740 001353' PUSHJ P,SREQ ;GLOBAL DEF., SEARCH FOR REQUEST + 001033' 254000 001070' JRST SYM2 ;REQUEST MATCHES + 001034' 260740 001355' PUSHJ P,SDEF ;SEARCH FOR MULTIPLE DEFINITIONS + 001035' 254000 001037' JRST SYM1 ;MULTIPLY DEFINED GLOBAL + 001036' 254000 001055' JRST SYM1B + + ; PROCESS MULTIPLY DEFINED GLOBAL + + 001037' 316516 000002 SYM1: CAMN W,2(A) ;COMPARE NEW AND OLD VALUE + 001040' 263740 000000 POPJ P,; + 001041' 350000 001761' AOS MDG ;COUNT MULTIPLY DEFINED GLOBALS + 001042' 260740 001701' PUSHJ P,PRQ ;START W/ ? + 001043' 260740 001534' PUSHJ P,PRNAM ;PRINT SYMBOL AND VALUE + 001044' 200516 000002 MOVE W,2(A) ;LOAD OLD VALUE + 001045' 260740 001535' PUSHJ P,PRNUM ;PRINT OLD VALUE + 001046' 265700 001667' JSP A,ERRPT7 ;PRINT MESSAGE + 001047' 556554 160044 SIXBIT /MUL. DEF. GLOBAL#/ + 001050' 454616 004754 + 001051' 574241 540300 + 001052' 263740 000000 POPJ P,; IGNORE MUL. DEF. GLOBAL SYM + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 24 + DICK GRUEN: V25 3 AUG 68 + + ; LOCAL SYMBOL + + 001053' 607000 041000 SYM1A: TLNN F,SYMSW+DSYMSW ;SKIP IF LOAD LOCALS SWITCH ON + 001054' 263740 000000 POPJ P,; IGNORE LOCAL SYMBOLS + 001055' 301144 000000 SYM1B: CAIL H,(S) ;STORE DEFINED SYMBOL + 001056' 260740 000452' IFN EXPAND,< PUSHJ P,XPAND7> + IFE EXPAND,< JRST SFULLC> + 001057' SYM1C: IFE K,< + 001057' 603040 000010 TLNE N,F4SW; FORTRAN FOUR REQUIRES A BLT + 001060' 260740 001234' PUSHJ P,MVDWN; OF THE TABLES> + 001061' 201704 777776 MOVEI A,-2(S) ;LOAD A TO SAVE INST. AT SYM2 + 001062' 275200 000002 SYM1D: SUBI S,2; UPDATE UNDEFINED POINTER + 001063' 262316 000002 POP B,2(A) ;MOVE UNDEFINED VALUE POINTER + 001064' 262316 000001 POP B,1(A) ;MOVE UNDEFINED SYMBOL + 001065' 202506 000002 MOVEM W,2(B) ;STORE VALUE + 001066' 202546 000001 MOVEM C,1(B) ;STORE SYMBOL + 001067' 263740 000000 POPJ P,; + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 25 + DICK GRUEN: V25 3 AUG 68 + + ; GLOBAL DEFINITION MATCHES REQUEST + + 001070' 261740 001100' SYM2: PUSH P,SYM2C ;NEXT MUST BE A SUBROUTINE FOR LATER. SET RETURN + 001071' 200456 000002 SYM2B: MOVE V,2(A) ;LOAD REQUEST POINTER + 001072' 260740 001344' PUSHJ P,REMSYM + 001073' 321440 001221' JUMPL V,SYM2W ;ADDITIVE REQUEST? WFW + 001074' 260740 001232' PUSHJ P,SYM4A ;REPLACE CHAIN WITH DEFINITION + ;WFW PATCH TO LOOK FOR MORE THAN ONE REQUEST + 001075' 260740 001353' SYM2W1: PUSHJ P,SREQ ;LOOK FOR MORE REQUESTS FOR THIS SYMBOL + 001076' 254000 001071' JRST SYM2B ;FOUND MORE + 001077' 200700 001101' MOVE A,SVA ;RESTORE A + ;END OF PATCH WFW + 001100' 263740 001062' SYM2C: POPJ P,SYM1D ;RETURN, SEE SYM2 FOR USE OF ADDRESS + 001101' 000000 000000 SVA: 0 ;A TEMP CELL WFW + + ; REQUEST MATCHES GLOBAL DEFINITION + + 001102' 200440 000012 SYM2A: MOVE V,W ;LOAD POINTER TO CHAIN + 001103' 200516 000002 MOVE W,2(A) ;LOAD VALUE + 001104' 321440 001152' JUMPL V,FIXWP ;HANDLE ATTITIVE REQUEST WFW + 001105' 254000 001232' JRST SYM4A; REPLACE CHAIN WITH DEFINITION + + ; PROCESS GLOBAL REQUEST + + 001106' 603540 040000 SYM3: TLNE C,040000; COMMON NAME + 001107' 254000 001055' JRST SYM1B + 001110' 641540 640000 TLC C,640000; PERMUTE BITS FROM 60 TO 04 + 001111' 260740 001355' PUSHJ P,SDEF ;SEARCH FOR GLOBAL DEFINITION + 001112' 254000 001102' JRST SYM2A ;MATCHING GLOBAL DEFINITION + 001113' 321500 001116' JUMPL W,SYM3X1 ;ADDITIVE FIXUP WFW + 001114' 260740 001353' PUSHJ P,SREQ ;SEARCH FOR EXISTING REQUEST WFW + 001115' 254000 001137' JRST SYM3A ;EXISTING REQUEST FOUND WFW + 001116' 607500 100000 SYM3X1: TLNN W,100000 ;CHECK SYMBOL TABLE FIXUP + 001117' 254000 001127' JRST SYM3X2 ;NO + 001120' 200446 000001 MOVE V,1(B) ;MUST BE LAST SYMBOL DEFINED. GET SYMBOL + 001121' 430440 000012 XOR V,W ;CHECK FOR IDENTITY + 001122' 612440 004106' TDNE V,[XWD 77777,-1] ;BUT IGNORE HIGH 3 BITS + 001123' 263740 000000 POPJ P, ;NOT SAME, ASSUME NOT LOADED LOCAL + 001124' 541506 000002 HRRI W,2(B) ;GET LOCATION IN RIGHT HALF + 001125' 661500 000001 TLO W,1 + 001126' 274500 000377* SUB W,JOBREL ;AND MAKE RELATIVE + 001127' 301144 000000 SYM3X2: CAIL H,(S) ;STORE REQUEST IN UNDEF. TABLE WFW + 001130' 260740 000452' IFN EXPAND,< PUSHJ P,XPAND7> + IFE EXPAND,< JRST SFULLC> + 001131' SYM3X: IFE K,< + 001131' 603040 000010 TLNE N,F4SW; FORTRAN FOUR + 001132' 260740 001234' PUSHJ P,MVDWN; ADJUST TABLES IF F4> + 001133' 274200 001753' SUB S,SE3 ;ADVANCE UNDEFINED POINTER + 001134' 202504 000002 MOVEM W,2(S) ;STORE UNDEFINED VALUE POINTER + 001135' 202544 000001 MOVEM C,1(S) ;STORE UNDEFINED SYMBOL + 001136' 263740 000000 POPJ P,; + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 26 + DICK GRUEN: V25 3 AUG 68 + + + ; COMBINE TWO REQUEST CHAINS + + 001137' 331016 000002 SYM3A: SKIPL 2(A) ;IS IT ADDITIVE WFW + 001140' 254000 001144' JRST SYM3A1 ;NO, PROCESS WFW + 001141' 260740 001360' PUSHJ P,SDEF2 ;YES, CONTINUE WFW + 001142' 254000 001137' JRST SYM3A ;FOUND ANOTHER WFW + 001143' 254000 001127' JRST SYM3X2 ;REALLY NO CHAIN THERE WFW + 001144' 275702 777776 SYM3A1: SUBI A,-2(X) ;A=A-(-2+X(18-35)); A RELATIVE TO X WFW + 001145' 550440 000016 SYM3B: HRRZ V,A ; SAVE CHAIN ADDRESS FOR HRRM W,@X + 001146' 550720 000002 HRRZ A,@X ; LOAD NEXT ADDRESS IN CHAIN + 001147' 326700 001145' JUMPN A,SYM3B ; JUMP IF NOT THE LAST ADDR. IN CHAIN + 001150' 542520 000002 HRRM W,@X ;COMBINE CHAINS + 001151' 263740 000000 POPJ P,; + + ;WFW PATCH FOR ADDITIVE GLOBAL REQUESTS + + 001152' 607440 100000 FIXWP: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + 001153' 254000 001162' JRST FIXW + 001154' 200406 000001 MOVE T,1(B) ;SYMBOL FIXUP, MUST BE LAST SYMBOL DEFINED + 001155' 430400 000011 XOR T,V ;CHECK FOR SAME + 001156' 612400 004106' TDNE T,[XWD 77777,-1] ;EXCEPT FOR HEGH CODE BITS + 001157' 263740 000000 POPJ P, ;ASSUME NON-LOADED LOCAL + 001160' 541446 000002 HRRI V,2(B) ;GET LOCATION + 001161' 275442 000000 SUBI V,(X) ;SO WE CAN USE @X + 001162' 603440 200000 FIXW: TLNE V,200000 ;IS IT LEFT HALF + 001163' 254000 001171' JRST FIXWL + 001164' 200420 000002 MOVE T,@X ;GET WORD + 001165' 270400 000012 ADD T,W ;VALUE OF GLOBAL + 001166' 542420 000002 HRRM T,@X ;FIX WITHOUT CARRY + 001167' 205340 200000 MOVSI D,200000 ;SET UP TO REMOVE DEFERED INTERNAL IF THERE + 001170' 254000 001174' JRST SYMFIX + 001171' 514400 000012 FIXWL: HRLZ T,W ;UPDATE VALUE OF LEFT HALF + 001172' 272420 000002 ADDM T,@X ;BY VALUE OF GLOBAL + 001173' 205340 400000 MOVSI D,400000 ;LEFT DEFERED INTERNAL + 001174' 607440 100000 SYMFIX: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + 001175' 263740 000000 POPJ P, ;NO, RETURN + 001176' 271442 000000 ADDI V,(X) ;GET THE LOCATION + 001177' 200411 777777 MOVE T,-1(V) ;GET THE SYMBOL NAME + 001200' 607400 040000 TLNN T,40000 ;CHECK TO SEE IF INTERNAL + 001201' 263740 000000 POPJ P, ;NO, LEAVE + 001202' 413351 777777 ANDCAB D,-1(V) ;REMOVE PROPER BIT + 001203' 603340 600000 TLNE D,600000 ;IS IT STILL DEFERED? + 001204' 263740 000000 POPJ P, ;YES, ALL DONE + 001205' 250540 000007 EXCH C,D ;NO, CHECK FOR A REQUEST FOR IT + 001206' 260740 001353' PUSHJ P,SREQ + 001207' 254000 001212' JRST CHNSYM ;YES, WILL HAVE TO CALL THE FIXUP ROUTINE + 001210' 200540 000007 MOVE C,D ;GET C BACK + 001211' 263740 000000 POPJ P, + 001212' 261740 000007 CHNSYM: PUSH P,D ;HAS THE OLD C IN IT + 001213' 261740 000012 PUSH P,W ;WE MAY NEED IT LATER + 001214' 200511 000000 MOVE W,(V) ;GET VALUE + 001215' 260740 001071' PUSHJ P,SYM2B ;CALL THE FOUND GLOBAL TO MATCH REQUEST ROUTINE + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 26-1 + DICK GRUEN: V25 3 AUG 68 + + 001216' 262740 000012 POP P,W + 001217' 262740 000013 POP P,C ;RESTORE FOR CALLER + 001220' 263740 000000 POPJ P, ;AND GO AWAY + + 001221' 607440 100000 SYM2W: TLNN V,100000 ;SYMBOL TABLE? + 001222' 254000 001225' JRST SYM2WA + 001223' 270440 001126* ADD V,JOBREL ;MAKE ABSOLUTE + 001224' 275442 000000 SUBI V,(X) ;GET READY TO ADD X + 001225' 260740 001162' SYM2WA: PUSHJ P,FIXW ;DO FIXUP + 001226' 254000 001075' JRST SYM2W1 ;AND LOOK FOR MORE REQUESTS + + ;END WFW PATCH + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 27 + DICK GRUEN: V25 3 AUG 68 + + ;PATCH VALUES INTO CHAINED REQUEST + 001227' SYM4: + 001227' 550420 000002 HRRZ T,@X ;LOAD NEXT ADDRESS IN CHAIN + 001230' 542520 000002 HRRM W,@X ;INSERT VALUE INTO PROGRAM + 001231' 200440 000010 MOVE V,T + 001232' 326440 001227' SYM4A: JUMPN V,SYM4 ;JUMP IF NOT LAST ADDR. IN CHAIN + 001233' 263740 000000 POPJ P, + + IFE K,< + 001234' 550400 003402' MVDWN: HRRZ T,MLTP + 001235' 275400 000002 IFN EXPAND,< SUBI T,2> + 001236' 307420 000002 CAIG T,@X; ANY ROOM LEFT? + IFN EXPAND,< JRST [PUSHJ P,XPAND> + TLOA F,FULLSW + IFN EXPAND,< JRST MVDWN + 001237' 254000 004107' JRST .+2]> + 001240' 603000 000204 TLNE F,SKIPSW+FULLSW + 001241' 254000 001256' JRST MVABRT; ABORT BLT + 001242' 571400 777776 HRREI T,-2 + 001243' 272400 003401' ADDM T,PLTP; ADJUST PROGRAMMER LABEL POINTER + 001244' 272400 003377' ADDM T,BITP; AND BIT TABLE POINTER + 001245' 272400 003404' ADDM T,SDSTP; FIRST DATA STATEMENT + 001246' 272400 004174' ADDM T,LTC + 001247' 272400 004175' ADDM T,ITC + 001250' 603040 000040 TLNE N,SYDAT + 001251' 272400 000011 ADDM T,V + 001252' 273400 003402' ADDB T,MLTP; AND FINALLY TO MADE LABEL TABLE + 001253' 507000 000010 HRLS T; SET UP BLT POINTER + 001254' 270400 004113' ADD T,[XWD 2,0] + 001255' 251404 000000 BLT T,(S) + 001256' 263740 000000 MVABRT: POPJ P,; + > + ;HIGHEST RELOCATABLE POINT (BLOCK TYPE 4) + 001257' 663000 000200 SFULLC: TLOE F,FULLSW ;PREVIOUS OVERFLOW? + 001260' 254000 001266' JRST FULLC ;YES, DON'T PRINT MESSAGE + 001261' 265700 001610' JSP A,ERRPT ;NO, COMPLAIN ABT OVERFLO + 001262' 637155 425754 SIXBIT ?SYMBOL TABLE OVERLAP#? + 001263' 006441 425445 + 001264' 005766 456254 + 001265' 416003 000000 + 001266' 661000 000200 FULLC: TLO F,FULLSW ;CORE OVERLAP ERROR RETURN + 001267' 603040 000010 IFE K,< TLNE N,F4SW + 001270' 263740 000000 POPJ P,> + 001271' 254000 000701' JRST LIB3 ;LOOK FOR MORE + + 001272' 302700 000004 HIGH0: CAIE A,4 ; TEST FOR END BLOCK (OVERLAP) + 001273' 254000 000701' JRST LIB3 + 001274' 260740 001363' HIGH: PUSHJ P,PRWORD ;READ TWO DATA WORDS + 001275' 540240 000013 HRR R,C ;SET NEW PROGRAM BREAK + 001276' 271540 000002 ADDI C,X; BE SURE TO RELOCATE + 001277' 303544 000001 CAILE C,1(S) ;TEST PROGRAM BREAK + IFN EXPAND,<PUSHJ P,[ PUSHJ P,XPAND + TLOA F,FULLSW + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 27-1 + DICK GRUEN: V25 3 AUG 68 + + JRST POPJM2 + 001300' 260740 004114' POPJ P,]> + IFE EXPAND,<TLO F,FULLSW> + 001301' 201700 002022' HIGH3: MOVEI A,F.C ;SAVE CURRENT STATE OF LOADER + 001302' 251700 002030' BLT A,B.C + 001303' 603000 004400 TLNE F,SLIBSW+LIBSW ;NORMAL MODE EXIT THROUGH LOAD1 + 001304' 254000 000666' JRST LIB ;LIBRARY SEARCH EXIT + 001305' 254000 000754' JRST LOAD1 + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 28 + DICK GRUEN: V25 3 AUG 68 + + ;STARTING ADDRESS (BLOCK TYPE 7) + + 001306' 260740 001363' START: PUSHJ P,PRWORD ;READ TWO DATA WORDS + 001307' 607040 000002 TLNN N,ISAFLG ;SKIP IF IGNORE SA FLAG ON + 001310' 540000 000013 HRR F,C ;SET STARTING ADDRESS + + ;PROGRAM NAME (BLOCK TYPE 6) + + 001311' 260740 001363' NAME: PUSHJ P,PRWORD ;READ TWO DATA WORDS + 001312' 663040 000004 TLOE N,COMFLG ;SKIP IF COMMON NOT PREV. SET + 001313' 254000 001317' JRST NAME1 ;SIZE OF COMMON PREV. SET + 001314' 202500 001760' MOVEM W,COMSAV ;STORE LENGTH OF COMMON + 001315' 322500 001330' JUMPE W,NAME2 ;JUMP IF NO COMMON IN THIS JOB + 001316' 541260 000005 HRRI R,@R ;FIRST PROGRAM SET LOAD ORIGIN + 001317' 303144 777777 NAME1: CAILE H,-1(S) ;TEST FOR AVAIL. SYMBOL SPACE + 001320' 260740 000452' IFN EXPAND,< PUSHJ P,XPAND7> + IFE EXPAND,< JRST SFULLC> + 001321' 275200 000002 SUBI S,2 ;UPDATE UNDEF. TABLE POINTER + 001322' 262304 000002 POP B,2(S) + 001323' 262304 000001 POP B,1(S) + 001324' 550440 000001 HRRZ V,N ;POINTER TO PREVIOUS NAME + 001325' 276300 000011 SUBM B,V ;COMPUTE RELATIVE POSITIONS + 001326' 506441 000002 HRLM V,2(N) ;STORE FORWARD POINTER + 001327' 540040 000006 HRR N,B ;UPDATE NAME POINTER + 001330' 202546 000001 NAME2: MOVEM C,1(B) ;STORE PROGRAM NAME + 001331' 552246 000002 HRRZM R,2(B) ;STORE PROGRAM ORIGIN + 001332' 317500 001760' CAMG W,COMSAV ;CHECK COMMON SIZE + 001333' 254000 000701' JRST LIB3 ;COMMON OK + 001334' 265700 001610' ILC: JSP A,ERRPT + 001335' 515454 160043 SIXBIT /ILL. COMMON#/ + 001336' 575555 575603 + 001337' 254000 000042' JRST LD2 + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 29 + DICK GRUEN: V25 3 AUG 68 + + + ;ONE PASS LOCAL DEFINITION (BLOCK TYPE 10) + + ;PMP PATCH FOR LEFT HALF FIXUPS + ;END PMP PATCH + 001340' 260740 001371' LOCD: PUSHJ P,RWORD ;READ ONE DATA WORD + 001341' 554440 000012 HLRZ V,W ;STORAGE POINTER IN LEFT HALF + 001342' 260740 001232' PUSHJ P,SYM4A ;LINK BACK REFERENCES + 001343' 254000 001340' JRST LOCD + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 30 + DICK GRUEN: V25 3 AUG 68 + + + 001344' 200404 000001 REMSYM: MOVE T,1(S) + 001345' 202416 000001 MOVEM T,1(A) + 001346' 200404 000002 MOVE T,2(S) + 001347' 202416 000002 MOVEM T,2(A) + 001350' 270200 001753' ADD S,SE3 + 001351' 202700 001101' MOVEM A,SVA + 001352' 263740 000000 POPJ P, + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 31 + DICK GRUEN: V25 3 AUG 68 + + ;SYMBOL TABLE SEARCH SUBROUTINES + + ; ENTERED WITH SYMBOL IN C + ; RETURN IS WITH POINTER IN A IF MATCHING SYMBOL FOUND + ; OTHERWISE, A SKIP ON RETURN OCCURS + + 001353' 325200 003423' SREQ: JUMPGE S,CPOPJ1 ;JUMP IF NO UNDEF. SYMBOLS + 001354' 334700 000004 SKIPA A,S ;LOAD REQUEST SEARCH POINTER + 001355' 200700 000006 SDEF: MOVE A,B ;LOAD DEF. SYMBOL SEARCH POINTER + 001356' 316556 000001 SDEF1: CAMN C,1(A) + 001357' 263740 000000 POPJ P, ;SYMBOLS MATCH, RETURN + 001360' 270700 001753' SDEF2: ADD A,SE3 + 001361' 321700 001356' JUMPL A,SDEF1 + 001362' 254000 003423' IFE K,< JRST CPOPJ1 ;SYMBOL NOT FOUND SKIPS ON RETURN> + IFN K,< + CPOPJ1: AOS (P) ;TRA 2,4 + POPJ P, ;...> + + ;RELOCATION AND BLOCK INPUT + + 001363' 260740 001371' PRWORD: PUSHJ P,RWORD ;READ A WORD PAIR + 001364' 200540 000012 MOVE C,W ;LOAD C WITH FIRST DATA WORD + 001365' 602600 377777 TRNE E,377777 ;TEST FOR END OF BLOCK + 001366' 254000 001373' JRST RWORD1 ;INPUT SECOND WORD OF PAIR + 001367' 201500 000000 MOVEI W,0 ;NO SECOND WORD, ASSUME ZERO + 001370' 263740 000000 POPJ P, + + 001371' 606600 377777 RWORD: TRNN E,377777 ;TEST FOR END OF BLOCK + 001372' 254000 000754' JRST LOAD1 ;RETURN TO LOAD THE NEXT BLOCK + 001373' 253600 001377' RWORD1: AOBJN E,RWORD2 ;JUMP IF DATA WORD NEXT + 001374' 260740 001710' PUSHJ P,WORD ;READ CONTROL WORD + 001375' 200640 000012 MOVE Q,W ;DON'T COUNT RELOCATION WORDS + 001376' 505600 777756 HRLI E,-22 ;SET RELOCATION WORD BYTE COUNT + 001377' 260740 001710' RWORD2: PUSHJ P,WORD ;READ INPUT WORD + 001400' 325640 001403' JUMPGE Q,RWORD3 ;TEST LH RELOCATION BIT + 001401' 514400 000005 HRLZ T,R + 001402' 270500 000010 ADD W,T ;LH RELOCATION + 001403' 603640 200000 RWORD3: TLNE Q,200000 ;TEST RH RELOCATION BIT + 001404' 541520 000005 HRRI W,@R ;RH RELOCATION + 001405' 242640 000002 LSH Q,2 + 001406' 263740 000000 POPJ P, + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 32 + DICK GRUEN: V25 3 AUG 68 + + ;PRINT STORAGE MAP SUBROUTINE + + 001407' 260740 000746' PRMAP: PUSHJ P,FSCN1 ;LOAD OTHER FILES FIRST + 001410' 260740 001726' PUSHJ P,CRLFLF ;START NEW PAGE + 001411' 550500 000005 HRRZ W,R + 001412' 260740 001536' PUSHJ P,PRNUM0 + 001413' 265700 001667' JSP A,ERRPT7 + 001414' 516300 645045 SIXBIT ?IS THE PROGRAM BREAK@? + 001415' 006062 574762 + 001416' 415500 426245 + 001417' 415340 000000 + 001420' 260740 001730' PUSHJ P,CRLF ;START STORAGE MAP + 001421' 265700 001613' JSP A,ERRPT0 ;PRINT HEADER + 001422' 636457 624147 SIXBIT ?STORAGE MAP@? + 001423' 450055 416040 + 001424' 574700 000006 HLRE A,B + 001425' 213000 000016 MOVNS A + 001426' 271706 000000 ADDI A,(B) + 001427' 275700 000002 PRMAP1: SUBI A,2 + 001430' 331556 000001 SKIPL C,1(A) ;LOAD SYMBOL, SKIP IF DELETED + 001431' 603540 300000 TLNE C,300000 ;TEST FOR LOCAL SYMBOL + 001432' 254000 001456' JRST PRMAP4 ;IGNORE LOCAL SYMBOLS + 001433' 607540 040000 TLNN C,040000 + 001434' 260740 001730' PUSHJ P,CRLF ;PROGRAM NAME + 001435' 260740 001533' PUSHJ P,PRNAM1 ;PRINT SYMBOL AND VALUE + 001436' 603540 040000 TLNE C,040000 + 001437' 254000 001455' JRST PRMAP3 ;GLOBAL SYMBOL + 001440' 574540 000012 HLRE C,W ;POINTER TO NEXT PROG. NAME + 001441' 325540 001444' JUMPGE C,PRMAP2 ;JUMP IF LAST PROGRAM NAME + 001442' 271556 000002 ADDI C,2(A) ;COMPUTE LOC. OF FOLLOWING NAME + 001443' 334420 000013 SKIPA T,@C ;LOAD ORIGIN OF FOLLOWING PROG. + 001444' 550400 000005 PRMAP2: HRRZ T,R ;LOAD PROGRAM BREAK + 001445' 276400 000012 SUBM T,W ;SUBTRACT ORIGIN TO GET LENGTH + 001446' 260740 001535' PUSHJ P,PRNUM ;PRINT PROGRAM LENGTH + 001447' 260740 001730' PUSHJ P,CRLF + 001450' 607040 000001 TLNN N,ALLFLG ;SKIP IF LIST ALL MODE IS ON + 001451' 602500 777777 TRNE W,777777 ;SKIP IF ZERO LENGTH PROGRAM + 001452' 254000 001455' JRST PRMAP3 + 001453' 322540 001460' JUMPE C,PRMAP5 ;JUMP IF LAST PROGRAM + 001454' 334700 000013 SKIPA A,C ;SKIP GLOBALS, ZERO LENGTH PROG. + 001455' 260740 001730' PRMAP3: PUSHJ P,CRLF + 001456' 303706 000000 PRMAP4: CAILE A,(B) ;TEST FOR END OF SYMBOL TABLE + 001457' 254000 001427' JRST PRMAP1 + 001460' PRMAP5: + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 33 + DICK GRUEN: V25 3 AUG 68 + + ;LIST UNDEFINED GLOBALS + + 001460' 260740 000746' PMS: PUSHJ P,FSCN1 ;LOAD FILES FIRST + 001461' 325200 001504' JUMPGE S,PMS3 ;JUMP IF NO UNDEFINED GLOBALS + 001462' 523000 000042 HLLOS 42 ;SET SOME ERROR TO ABORT EXECUTION + 001463' 260740 001727' PUSHJ P,FCRLF ;START THE MESSAGE + 001464' 260740 001701' PUSHJ P,PRQ ;PRINT ? + 001465' 574500 000004 HLRE W,S ;COMPUTE NO. OF UNDEF. GLOBALS + 001466' 217000 000012 MOVMS W + 001467' 242500 777777 LSH W,-1 ;<LENGTH OF LIST>/2 + 001470' 260740 001536' PUSHJ P,PRNUM0 + 001471' 265700 001667' JSP A,ERRPT7 + 001472' 655644 454651 SIXBIT /UNDEFINED GLOBALS@/ + 001473' 564544 004754 + 001474' 574241 546340 + 001475' 200700 000004 MOVE A,S ;LOAD UNDEF. POINTER + 001476' 260740 001730' PMS2: PUSHJ P,CRLF + 001477' 260740 001701' PUSHJ P,PRQ ;PRINT ? + 001500' 260740 001532' PUSHJ P,PRNAM0 ;PRINT SYMBOL AND POINTER + 001501' 270700 001753' ADD A,SE3 + 001502' 321700 001476' JUMPL A,PMS2 + 001503' 260740 001730' PUSHJ P,CRLF ;SPACE AFTER LISTING + + ;LIST NUMBER OF MULTIPLY DEFINED GLOBALS + + 001504' 336500 001761' PMS3: SKIPN W,MDG ;ANY MULTIPLY DEFINED GLOBALS + 001505' 254000 001520' JRST PMS4 ;NO, EXCELSIOR + 001506' 523000 000042 HLLOS 42 ;ANOTHER WAY TO LOSE + 001507' 260740 001727' PUSHJ P,FCRLF ;ROOM AT THE TOP + 001510' 260740 001701' PUSHJ P,PRQ ;PRINT ? + 001511' 260740 001536' PUSHJ P,PRNUM0 ;NUMBER OF MULTIPLES + 001512' 265700 001667' JSP A,ERRPT7 ;REST OF MESSAGE + 001513' 556554 645160 SIXBIT ?MULTIPLY DEFINED GLOBALS@? + 001514' 547100 444546 + 001515' 515645 440047 + 001516' 545742 415463 + 001517' 400000 000000 + 001520' 603040 040000 PMS4: TLNE N,AUXSWE ;AUXILIARY OUTPUT DEVICE? + 001521' 067100 000000 OUTPUT 2, ;INSURE A COMPLETE BUFFER + 001522' 263740 000000 POPJ P, ;RETURN + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 34 + DICK GRUEN: V25 3 AUG 68 + + ;ENTER FILE ON AUXILIARY OUTPUT DEVICE + + 001523' 077100 002060' IAD2: ENTER 2,DTOUT ;WRITE FILE NAME IN DIRECTORY + 001524' 254000 001526' JRST IMD3 ;NO MORE DIRECTORY SPACE + 001525' 263740 000000 POPJ P, + + 001526' 265700 001610' IMD3: JSP A,ERRPT ;DIRECTORY FULL ERROR + 001527' 445162 160046 SIXBIT /DIR. FULL@/ + 001530' 655454 400000 + 001531' 254000 000042' JRST LD2 + + ;PRINT THE 6 DIGIT OCTAL ADDRESS IN W + + ; ACCUMULATORS USED: D,T,V + + 001532' 200556 000001 PRNAM0: MOVE C,1(A) ;LOAD SYMBOL + 001533' 200516 000002 PRNAM1: MOVE W,2(A) ;LOAD VALUE + 001534' 260740 001561' PRNAM: PUSHJ P,PRNAME + 001535' 260740 001555' PRNUM: PUSHJ P,SPACES + 001536' 200440 001545' PRNUM0: MOVE V,PRNUM2 ;LOAD BYTE POINTER TO RH. OF W + 001537' 211340 000006 MOVNI D,6 ;LOAD CHAR. COUNT + 001540' 134400 000011 PRNUM1: ILDB T,V ;LOAD DIGIT TO BE OUTPUT + 001541' 271400 000060 ADDI T,60 ;CONVERT FROM BINARY TO ASCII + 001542' 260740 001734' PUSHJ P,TYPE2 + 001543' 341340 001540' AOJL D,PRNUM1 ;JUMP IF MORE DIGITS REMAIN + 001544' 263740 000000 POPJ P, + + 001545' 220300 000012 PRNUM2: XWD 220300,W + + ;YE OLDE RECURSIVE NUMBER PRINTER + ;PRINTS Q, WITH LEADING ZEROES SUPPRESSED; USES A AND T + + 001546' 231640 000012 RCNUM: IDIVI Q,12 ;RADIX DECIMAL + 001547' 271700 000060 ADDI A,"0" + 001550' 506717 000000 HRLM A,(P) + 001551' 332000 000015 SKIPE Q + 001552' 260740 001546' PUSHJ P,RCNUM + 001553' 554417 000000 HLRZ T,(P) + 001554' 254000 001734' JRST TYPE2 + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 35 + DICK GRUEN: V25 3 AUG 68 + + ;PRINT FOUR SPACES + + 001555' 260740 001556' SPACES: PUSHJ P,SP1 + 001556' 260740 001557' SP1: PUSHJ P,SPACE + 001557' 201400 000040 SPACE: MOVEI T,40 + 001560' 254000 001734' JRST TYPE2 + + ;SYMBOL PRINT - RADIX 50 + + ; ACCUMULATORS USED: D,T + + 001561' 200400 000013 PRNAME: MOVE T,C ;LOAD SYMBOL + 001562' 621400 740000 TLZ T,740000 ;ZERO CODE BITS + 001563' 211340 000006 MOVNI D,6 ;LOAD CHAR. COUNT + 001564' 231400 000050 SPT: IDIVI T,50 ;THE REMAINDER IS THE NEXT CHAR. + 001565' 506457 000000 HRLM V,(P) ;STORE IN LH. OF PUSHDOWN LIST + 001566' 355000 000007 AOSGE D ;SKIP IF NO CHARS. REMAIN + 001567' 260740 001564' PUSHJ P,SPT ;RECURSIVE CALL FOR NEXT CHAR. + 001570' 554417 000000 HLRZ T,(P) ;LOAD FROM LH. OF PUSHDOWN LIST + 001571' 322400 001733' JUMPE T,TYPE ;BLANK + 001572' 271400 000057 ADDI T,60-1 + 001573' 303400 000071 CAILE T,71 + 001574' 271400 000007 ADDI T,101-72 + 001575' 303400 000132 CAILE T,132 + 001576' 275400 000070 SUBI T,134-44 + 001577' 306400 000043 CAIN T,43 + 001600' 201400 000056 MOVEI T,56 + 001601' 254000 001734' JRST TYPE2 + ;PRINT A WORD OF SIXBIT CHARACTERS IN AC W + + ; ACCUMULATORS USED: Q,T,D + + 001602' 211640 000006 PWORD: MOVNI Q,6 ;SET CHARACTER COUNT TO SIX + 001603' 200340 001754' PWORD1: MOVE D,LSTPT ;ENTER HERE WITH Q PRESET + 001604' 134400 000007 PWORD2: ILDB T,D ;LOAD NEXT CHAR. TO BE OUTPUT + 001605' 260740 001733' PUSHJ P,TYPE ;OUTPUT CHARACTER + 001606' 341640 001604' AOJL Q,PWORD2 + 001607' 263740 000000 POPJ P, + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 36 + DICK GRUEN: V25 3 AUG 68 + + ;ERROR MESSAGE PRINT SUBROUTINE + + ; FORM OF CALL: + + ; JSP A,ERRPT + ; SIXBIT /<MESSAGE>/ + + ; ACCUMULATORS USED: T,V,C,W + + 001610' 661000 000020 ERRPT: TLO F,FCONSW ;INSURE TTY OUTPUT + 001611' 260740 001730' PUSHJ P,CRLF ;ROOM AT THE TOP + 001612' 260740 001701' PUSHJ P,PRQ ;START OFF WITH ? + 001613' 261740 000015 ERRPT0: PUSH P,Q ;SAVE Q + 001614' 334440 001652' SKIPA V,ERRPT5 + 001615' 260740 001733' ERRPT1: PUSHJ P,TYPE + 001616' 134400 000011 ILDB T,V + 001617' 306400 000040 CAIN T,40 + 001620' 254000 001645' JRST ERRPT4 + 001621' 306400 000005 CAIN T,5 + 001622' 254000 001671' JRST ERRPT9 + 001623' 302400 000003 CAIE T,3 + 001624' 254000 001615' JRST ERRPT1 + 001625' 336540 002054' SKIPN C,DTIN + 001626' 254000 001645' JRST ERRPT4 + 001627' 211640 000014 MOVNI Q,14 + 001630' 201500 000077 MOVEI W,77 + 001631' 612540 000012 ERRPT2: TDNE C,W + 001632' 254000 001635' JRST ERRPT3 + 001633' 242500 000006 LSH W,6 + 001634' 341640 001631' AOJL Q,ERRPT2 + 001635' 200500 001653' ERRPT3: MOVE W,ERRPT6 + 001636' 260740 001603' PUSHJ P,PWORD1 + 001637' 336500 002055' SKIPN W,DTIN1 + 001640' 254000 001645' JRST ERRPT4 + 001641' 242500 777772 LSH W,-6 + 001642' 661500 160000 TLO W,160000 + 001643' 211640 000004 MOVNI Q,4 + 001644' 260740 001603' PUSHJ P,PWORD1 + 001645' 260740 001730' ERRPT4: PUSHJ P,CRLF + 001646' 262740 000015 ERRP41: POP P,Q + 001647' 621000 000020 TLZ F,FCONSW ;ONE ERROR PER CONSOLE + 001650' 350000 000011 AOS V ;PROGRAM BUMMERS BEWARE: + 001651' 254020 000011 JRST @V ;V HAS AN INDEX OF A + + 001652' 440616 000000 ERRPT5: POINT 6,0(A) + 001653' 004651 544500 ERRPT6: SIXBIT / FILE / + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 37 + DICK GRUEN: V25 3 AUG 68 + + 001654' 661000 000020 ERRPT8: TLO F,FCONSW ;INSURE TTY OUTPUT + 001655' 260740 001701' PUSHJ P,PRQ ;START WITH ? + 001656' 305400 000140 CAIGE T,140 ;IS IT A NON-PRINTING CHAR? + 001657' 301400 000040 CAIL T,40 + 001660' 254000 001666' JRST ERRP8 + 001661' 261740 000010 PUSH P,T + 001662' 201400 000136 MOVEI T,136 ;UP ARROW + 001663' 260740 001734' PUSHJ P,TYPE2 + 001664' 262740 000010 POP P,T + 001665' 271400 000100 ADDI T,100 ;CONVERT TO PRINTING CHAR. + 001666' 260740 001734' ERRP8: PUSHJ P,TYPE2 + 001667' 260740 001557' ERRPT7: PUSHJ P,SPACE + 001670' 254000 001613' JRST ERRPT0 + + 001671' 201460 000011 ERRPT9: MOVEI V,@V + 001672' 261740 000011 PUSH P,V + 001673' 265700 001667' JSP A,ERRPT7 + 001674' 515454 454741 SIXBIT ?ILLEGAL -LOADER@? + 001675' 540015 545741 + 001676' 444562 400000 + 001677' 262740 000011 POP P,V + 001700' 254000 001646' JRST ERRP41 + + ;PRINT QUESTION MARK + + 001701' 261740 000010 PRQ: PUSH P,T ;SAVE + 001702' 201400 000077 MOVEI T,"?" ;PRINT ? + 001703' 260740 001734' PUSHJ P,TYPE2 ;... + 001704' 262740 000010 POP P,T ;RESTORE + 001705' 263740 000000 POPJ P, ;RETURN + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 38 + DICK GRUEN: V25 3 AUG 68 + + ;INPUT - OUTPUT INTERFACE + + ;BINARY INPUT SUBROUTINE - RETURNS A WORD IN W + IFE K,< + 001706' 260740 001710' WORDPR: PUSHJ P,WORD ;GET FIRST WORD OF PAIR + 001707' 200540 000012 MOVE C,W ;KEEP IT HANDY> + 001710' 377000 002053' WORD: SOSG BUFR2 ;SKIP IF BUFFER NOT EMPTY + 001711' 254000 001714' JRST WORD2 + 001712' 134500 002052' WORD1: ILDB W,BUFR1 ;PICK UP 36 BIT WORD + 001713' 263740 000000 POPJ P, + + 001714' 066040 000000 WORD2: INPUT 1, ;GET NEXT BUFFER LOAD + 001715' 062040 000012 STATUS 1,W ;GET DEVICE STATUS FROM MONITOR + 001716' 602500 020000 TRNE W,IODEND ;TEST FOR EOF + 001717' 254000 000725' JRST EOF ;END OF FILE EXIT + 001720' 606500 740000 TRNN W,IOBAD ;TEST FOR DATA ERROR + 001721' 254000 001712' JRST WORD1 ;DATA OK - CONTINUE LOADING + 001722' 265700 001610' JSP A,ERRPT ;DATA ERROR - PRINT MESSAGE + 001723' 515660 656400 SIXBIT /INPUT ERROR#/ + 001724' 456262 576203 + 001725' 254000 000042' JRST LD2 ;GO TO ERROR RETURN + ;TYPEOUT SUBROUTINE - THE CHARACTER SUPPLIED IN T IS CONVERTED TO ASCII + ;AND IS OUTPUT ON THE CONSOLE AND/OR THE SPECIFIED LOADER MAP OUTPUT + ;DEVICE + + 001726' 260740 001730' CRLFLF: PUSHJ P,CRLF + 001727' 661000 000020 FCRLF: TLO F,FCONSW ;INSURE TTY OUTPUT + 001730' 201400 000015 CRLF: MOVEI T,15 ;CARRIAGE RETURN LINE FEED + 001731' 260740 001734' PUSHJ P,TYPE2 + 001732' 201400 777752 MOVEI T,12-40 ;LINE FEED IN PSEUDO SIXBIT + 001733' 201410 000040 TYPE: MOVEI T,40(T) ;CONVERT SIXBIT TO ASCII + 001734' 607040 020000 TYPE2: TLNN N,AUXSWI ;IS THER AN AUXILIARY DEVICE? + 001735' 254000 001745' JRST TYPE3 ;NO, DONT OUTPUT TO IT + 001736' 667040 040000 TLON N,AUXSWE ;IS AUX. DEV. ENTERED? + 001737' 260740 001523' PUSHJ P,IAD2 ;NOPE, DO SO! + 001740' 377000 002050' SOSG ABUF2 ;SPACE LEFT IN BUFFER? + 001741' 067100 000000 OUTPUT 2, ;CREATE A NEW BUFFER + 001742' 136400 002047' IDPB T,ABUF1 ;DEPOSIT CHARACTER + 001743' 607000 000020 TLNN F,FCONSW ;FORCE OUTPUT TO CONSOLE TOO? + 001744' 263740 000000 POPJ P, ;NOPE + 001745' 336000 002042' TYPE3: SKIPN BUFO2 ;END OF BUFFER + 001746' 067140 000000 OUTPUT 3, ;FORCE OUTPUT NOW + 001747' 136400 002041' IDPB T,BUFO1 ;DEPOSIT CHARACTER + 001750' 306400 000012 CAIN T,12 ;END OF LINE + 001751' 067140 000000 OUTPUT 3, ;FORCE AN OUTPUT + 001752' 263740 000000 POPJ P, + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 39 + DICK GRUEN: V25 3 AUG 68 + + 001753' 000002 000002 SE3: XWD 2,2 ;SYMBOL POINTER INCREMENT + 001754' 440600 000012 LSTPT: POINT 6,W ;CHARACTER POINTER TO W + 001755' 777737 001761' PDLPT: XWD -41,PDLST-1; INITIAL PUSHDOWN POINTER + 001756' 034372 246575 COMM: SQUOZE 0,.COMM. + 001757' 000000 000000 PDSAV: 0 ;SAVED PUSHDOWN POINTER + 001760' 000000 000000 COMSAV: 0 ;LENGTH OF COMMON + 001761' 000000 000000 MDG: 0 ;COUNTER FOR MUL DEF GLOBALS + 001762' PDLST: BLOCK 40 + + 002022' 000000 000000 F.C: 0 + 002023' 000000 000000 0 ;STORE N HERE + 002024' 000000 000000 0 ;STORE X HERE + 002025' 000000 000000 0 ;STORE H HERE + 002026' 000000 000000 0 ;STORE S HERE + 002027' 000000 000000 0 ;STORE R HERE + 002030' 000000 000000 B.C: 0 + 002031' 000000 000000 F.I: 0 ;INITIAL F - FLAGS + 002032' 000000 000000 0 ;INITIAL N + 002033' 000011 004203' XWD V,LDEND ;INITIAL X - LOAD PROGRAM AFTER LOADER + 002034' 000000 004343' EXP LDEND+JOBPRO ;INITIAL H - INITIAL PROG BREAK + 002035' 000000 000000 0 ;INITIAL S + 002036' 000012 000140 XWD W,JOBPRO ;INITIAL R - INITIAL RELOC + 002037' 000000 000000 0 ;INITIAL B + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 40 + DICK GRUEN: V25 3 AUG 68 + + ;BUFFER HEADERS AND HEADER HEADERS + + 002040' 000000 000000 BUFO: 0 ;CONSOLE INPUT HEADER HEADER + 002041' 000000 000000 BUFO1: 0 + 002042' 000000 000000 BUFO2: 0 + + 002043' 000000 000000 BUFI: 0 ;CONSOLE OUTPUT HEADER HEADER + 002044' 000000 000000 BUFI1: 0 + 002045' 000000 000000 BUFI2: 0 + + 002046' 000000 000000 ABUF: 0 ;AUXILIARY OUTPUT HEADER HEADER + 002047' 000000 000000 ABUF1: 0 + 002050' 000000 000000 ABUF2: 0 + + 002051' 000000 000000 BUFR: 0 ;BINARY INPUT HEADER HEADER + 002052' 000000 000000 BUFR1: 0 + 002053' 000000 000000 BUFR2: 0 + + 002054' 000000 000000 DTIN: 0 ;DECTAPE INPUT BLOCK + 002055' 000000 000000 DTIN1: 0 + 002056' 000000 000000 0 + 002057' 000000 000000 DTIN2: 0 + + 002060' 000000 000000 DTOUT: 0 ;DECTAPE OUTPUT BLOCK + 002061' 000000 000000 DTOUT1: 0 + 002062' 000000 000000 0 + 002063' 000000 000000 0 + + 000052 TTYL=52 ;TWO TTY BUFFERS + 000406 IFE K,< BUFL=406 ;TWO DTA BUFFERS FOR LOAD> + IFN K,< BUFL=203 ;ONE DTA BUFFER FOR LOAD> + 000203 ABUFL=203 ;ONE DTA BUFFER FOR AUX DEV + 002064' TTY1: BLOCK TTYL ;TTY BUFFER AREA + 002136' BUF1: BLOCK BUFL ;LOAD BUFFER AREA + 002544' AUX: BLOCK ABUFL ;AUX BUFFER AREA + 002747' ZEROS: REPEAT 4,<0> + 002747' 000000 000000 + 002750' 000000 000000 + 002751' 000000 000000 + 002752' 000000 000000 + + IFN RPGSW,<CTLIN: BLOCK 3 + CTLNAM: BLOCK 3 + CTLBUF: BLOCK 203+1 + > + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 41 + DICK GRUEN: V25 3 AUG 68 + + 040000 IOBKTL=40000 + 400000 IOIMPM=400000 + 200000 IODERR=200000 + 100000 IODTER=100000 + 020000 IODEND=20000 + + 740000 IOBAD=IODERR+IODTER+IOBKTL+IOIMPM + + INTERN PWORD,DTIN,DTOUT,LDEND + INTERN WORD,LD,BEG,PDLST,LOAD + INTERN CRLF,TYPE,PMS,PRMAP + INTERN F,P,X,H,S,R,B,N,T,V,W,C,E,Q,A,D + + EXTERN JOBDDT,JOBFF,JOBSA,JOBREL,JOBSYM,JOBUSY,JOB41 + + ;END HERE IF 1K LOADER REQUESTED. + IFN K, <LITS: LIT + VAR + LDEND: END LD + > + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 42 + DICK GRUEN: V25 3 AUG 68 + + ;HERE BEGINS FORTRAN FOUR LOADER + + 002753' F4LD: + 002753' 550440 000005 HRRZ V,R; SET PROG BREAK INTO V + 002754' 202440 003376' MOVEM V,LLC; SAVE FIRST WORD ADDRESS + 002755' 201504 777776 MOVEI W,-2(S); GENERATE TABLES + 002756' 661040 000010 TLO N,F4SW + 002757' 552500 003402' HRRZM W,MLTP; MADE LABELS + 002760' 552500 003401' HRRZM W,PLTP; PROGRAMMER LABELS + 002761' 270500 004120' ADD W,[POINT 1,1]; GENERATE BIT-BYTE POINTER + 002762' 202500 003377' MOVEM W,BITP + 002763' 202500 003404' MOVEM W,SDSTP; FIRST DATA STATEMENT + 002764' 350000 003404' AOS SDSTP; + 002765' 200500 004121' MOVE W,[JRST ALLOVE] ;LAST DATA STATEMENT + 002766' 202504 000000 MOVEM W,(S) + 002767' 571500 777734 HRREI W,-^D36; BITS PER WORDUM + 002770' 202500 003400' MOVEM W,BITC; BIT COUNT + 002771' 260740 003062' PUSHJ P,BITWX+1 ;MAKE SURE OF ENOUGH SPACE + + 002772' 260740 001710' TEXTR: PUSHJ P,WORD; TEXT BY DEFAULT + 002773' 554540 000012 HLRZ C,W + 002774' 306540 777777 CAIN C,-1 + 002775' 254000 003345' JRST HEADER; HEADER + 002776' 201540 000001 MOVEI C,1; RELOCATABLE + 002777' 260740 003037' PUSHJ P,BITW; SHOVE AND STORE + 003000' 254000 002772' JRST TEXTR; LOOP FOR NEXT WORD + + 003001' 377000 003405' ABS: SOSG BLKSIZ; MORE TO GET + 003002' 254000 002772' JRST TEXTR; NOPE + 003003' 260740 001710' ABSI: PUSHJ P,WORD; + 003004' 201540 000000 MOVEI C,0; NON-RELOCATABLE + 003005' 260740 003037' PUSHJ P,BITW; TYPE 0 + 003006' 254000 003001' JRST ABS + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 43 + DICK GRUEN: V25 3 AUG 68 + + ;PROCESS TABLE ENTRIES + + 003007' 603000 000204 MDLB: TLNE F,FULLSW+SKIPSW; MADE LABEL PROC + 003010' 254000 003020' JRST GLOBDF; NO ROOM AT THE IN + 003011' 554540 003402' HLRZ C,MLTP; GET PRESENT SIZE + 003012' 315540 003405' CAMGE C,BLKSIZ; IF NEW SIZE BIGGER, STR-R-RETCH + 003013' 260740 003066' PUSHJ P,SMLT + 003014' 550540 003402' HRRZ C,MLTP; GET BASE + 003015' 270540 003405' MLPLC: ADD C,BLKSIZ; MAKE INDEX + 003016' 607000 000204 TLNN F,FULLSW+SKIPSW; DONT LOAD + 003017' 552453 000000 HRRZM V,(C); PUT AWAY DEFINITION + 003020' 260740 001710' GLOBDF: PUSHJ P,WORD + 003021' 603000 000204 TLNE F,FULLSW+SKIPSW ;SKIPPING THIS PROG? + 003022' 254000 002772' JRST TEXTR ;YES, DON'T DEFINE + 003023' 201551 000000 MOVEI C,(V); AND LOC + 003024' 250500 000013 EXCH W,C + 003025' 260740 003531' PUSHJ P,SYMXX; PUT IN DDT-SYMBOL TABLE + 003026' 260740 003062' PUSHJ P,BITWX+1 + 003027' 254000 002772' JRST TEXTR + + 003030' 603000 000204 PLB: TLNE F,FULLSW+SKIPSW + 003031' 254000 003020' JRST GLOBDF + 003032' 554540 003401' HLRZ C,PLTP; PRESENT SIZE + 003033' 315540 003405' CAMGE C,BLKSIZ + 003034' 260740 003103' PUSHJ P,SPLT + 003035' 550540 003401' HRRZ C,PLTP + 003036' 254000 003015' JRST MLPLC + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 44 + DICK GRUEN: V25 3 AUG 68 + + ;STORE WORD AND SET BIT TABLE + + 003037' 603000 000204 BITW: TLNE F,FULLSW+SKIPSW; WE DONT LOAD THIS + 003040' 263740 000000 POPJ P,; + 003041' 202520 000002 MOVEM W,@X; STORE AWAY OFFSET + 003042' 136540 003377' IDPB C,BITP; STORE BIT + 003043' 355000 003400' AOSGE BITC; STEP BIT COUNT + 003044' 254000 003061' JRST BITWX; SOME MORE ROOM LEFT + 003045' 571540 777734 HRREI C,-^D36; RESET COUNT + 003046' 202540 003400' MOVEM C,BITC + 003047' 370000 003401' SOS PLTP + 003050' 370000 003377' SOS BITP; ALL UPDATED + IFE EXPAND,<HRL C,MLTP + SOS MLTP + HRR C,MLTP> + 003051' 550540 003402' IFN EXPAND,<HRRZ C,MLTP; TO ADDRESS + 003052' 275540 000001 SUBI C,1 + 003053' 307560 000002 CAIG C,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADDI C,2000 + 003054' 260740 004122' JRST POPJM2] + 003055' 370000 003402' SOS MLTP + 003056' 505553 000001 HRLI C,1(C)> + 003057' 550400 003404' HRRZ T,SDSTP; GET DATA POINTER + 003060' 251550 777777 BLT C,-1(T); MOVE DOWN LISTS + 003061' 350000 000011 BITWX: AOS V; STEP LOADER LOCATION + 003062' 550400 003402' HRRZ T,MLTP + 003063' 307420 000002 CAIG T,@X; OVERFLOW CHECK + IFE EXPAND,<TLO F,FULLSW> + IFN EXPAND,<PUSHJ P, [PUSHJ P,XPAND + TLOA F,FULLSW + JRST POPJM3 + 003064' 260740 004126' POPJ P,]> + 003065' 263740 000000 POPJ P,; + + 003066' 274540 003405' SMLT: SUB C,BLKSIZ; STRETCH + 003067' 204500 003402' MOVS W,MLTP ;LEFT HALF HAS OLD BASE + 003070' 270540 003402' ADD C,MLTP ;RIGHT HALF HAS NEW BASE + 003071' 553000 000013 IFN EXPAND,< HRRZS C ;GET RID OF COUNT + 003072' 307560 000002 CAIG C,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADD W,[XWD 2000,0] + ADDI C,2000 + 003073' 260740 004133' JRST POPJM2]> + 003074' 542540 003402' HRRM C,MLTP ;PUT IN NEW MLTP + 003075' 500540 000012 HLL C,W ;FORM BLT POINTER + 003076' 271513 000000 ADDI W,(C) ;LAST ENTRY OF MLTP + 003077' 504500 003405' HRL W,BLKSIZ ;NEW SIZE OF MLTP + 003100' 502500 003402' HLLM W,MLTP ;... + 003101' 251552 000000 SLTC: BLT C,0(W); MOVE DOWN (UP?) + 003102' 263740 000000 POPJ P,; + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 44-1 + DICK GRUEN: V25 3 AUG 68 + + + 003103' 274540 003405' SPLT: SUB C,BLKSIZ + 003104' 204500 003402' MOVS W,MLTP; + 003105' 272540 003401' ADDM C,PLTP + 003106' 270540 003402' ADD C,MLTP + 003107' 553000 000013 IFN EXPAND,< HRRZS C + 003110' 307560 000002 CAIG C,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADD W,[XWD 2000,0] + ADDI C,2000 + 003111' 260740 004133' JRST POPJM2]> + 003112' 542540 003402' HRRM C,MLTP ;PUT IN NEW MLTP + 003113' 500540 000012 HLL C,W + 003114' 554500 003401' HLRZ W,PLTP ;OLD SIZE OF PL TABLE + 003115' 270500 003401' ADD W,PLTP ;NEW BASE OF PL TABLE + 003116' 504500 003405' HRL W,BLKSIZ ;NEW SIZE OF PL TABLE + 003117' 502500 003401' HLLM W,PLTP ;INTO POINTER + 003120' 254000 003101' JRST SLTC + + 003121' 000000 000000 PT1: 0 + + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 45 + DICK GRUEN: V25 3 AUG 68 + + ;PROCESS END CODE WORD + + 003122' 260740 001710' ENDS: PUSHJ P,WORD; GET STARTING ADDRESS + 003123' 603000 000004 TLNE F,SKIPSW + 003124' 254000 003131' JRST ENDS1 ;FOOBAZ!!!!!!!! + 003125' 322500 003131' JUMPE W,ENDS1; NOT MAIN + 003126' 271505 000000 ADDI W,(R); RELOCATION OFFSET + 003127' 607040 000002 TLNN N,ISAFLG; IGNORE STARTING ADDRESS + 003130' 540000 000012 HRR F,W; SET SA + 003131' 260740 001706' ENDS1: PUSHJ P,WORDPR ;DATA STORE SIZE + 003132' 552540 003373' HRRZM C,PTEMP ;NUMBER OF PERMANENT TEMPS + 003133' 202440 003372' MOVEM V,CCON; START OF CONSTANTS AREA + 003134' 322500 003143' JUMPE W,E1; NULL + 003135' 202500 003405' MOVEM W,BLKSIZ ;SAVE COUNT + 003136' 201511 000000 MOVEI W,0(V) ;DEFINE CONST. + 003137' 200540 003411' MOVE C,CNR50 ;... + 003140' 607000 000204 TLNN F,SKIPSW!FULLSW + 003141' 260740 001026' PUSHJ P,SYMPT ;... + 003142' 260740 003254' PUSHJ P,GSWD ;STORE CONSTANT TABLE + 003143' 201511 000000 E1: MOVEI W,0(V); GET LOADER LOC + 003144' 250500 003373' EXCH W,PTEMP; STORE INTO PERM TEMP POINTER + 003145' 270500 003373' ADD W,PTEMP; FORM TEMP TEMP ADDRESS + 003146' 202500 003374' MOVEM W,TTEMP; POINTER + 003147' 202440 003370' MOVEM V,GSTAB; STORE LOADER LOC IN GLOBSUB + 003150' 200540 003407' MOVE C,TTR50 ;DEFINE %TEMP. + 003151' 603000 000204 TLNE F,SKIPSW!FULLSW + 003152' 254000 003160' JRST E1A + 003153' 260740 001026' PUSHJ P,SYMPT ;... + 003154' 200540 003410' MOVE C,PTR50 ;DEFINE (IF EXTANT) TEMP. + 003155' 201511 000000 MOVEI W,0(V) ;... + 003156' 312500 003374' CAME W,TTEMP ;ANY PERM TEMPS? + 003157' 260740 001026' PUSHJ P,SYMPT ;YES, DEFINE + 003160' 260740 001710' E1A: PUSHJ P,WORD; NUMBER OF GLOBSUBS + 003161' 322500 003164' JUMPE W,E11 + 003162' 202500 003405' MOVEM W,BLKSIZ ;SIZE OF GLOBSUB + 003163' 260740 003254' PUSHJ P,GSWD ;STORE GLOBSUB TABLE + 003164' 202440 003367' E11: MOVEM V,STAB; SCALARS + 003165' 260740 001710' PUSHJ P,WORD; HOW MANY? + 003166' 322500 003170' JUMPE W,E21; NONE + 003167' 260740 003261' PUSHJ P,GSWDPR ;STORE SCALAR TABLE + 003170' 202440 003366' E21: MOVEM V,ATAB; ARRAY POINTER + 003171' 260740 001710' PUSHJ P,WORD; COMMENTS FOR SCALARS APPLY + 003172' 322500 003174' JUMPE W,E31 + 003173' 260740 003261' PUSHJ P,GSWDPR ;STORE ARRAY TABLE + 003174' 202440 003371' E31: MOVEM V,AOTAB; ARRAYS OFFSET + 003175' 260740 001710' PUSHJ P,WORD; SAME COMMENTS AS ABOVE + 003176' 322500 003200' JUMPE W,E41 + 003177' 260740 003261' PUSHJ P,GSWDPR ;STORE ARRAY OFFSET TABLE + 003200' 260740 001710' E41: PUSHJ P,WORD; TEMP, SCALAR, ARRAY SIZE + 003201' 603000 000204 TLNE F,FULLSW!SKIPSW ;SKIPPING THIS PROG? + 003202' 201500 000000 MOVEI W,0 ;DON'T ACCEPT GLOB SUBPROG REQUESTS + 003203' 202440 003365' MOVEM V,CTAB; SETUP COMMON TABLE POINTER + 003204' 270500 003370' ADD W,GSTAB; GLOBAL SUBPROG BASE + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 45-1 + DICK GRUEN: V25 3 AUG 68 + + 003205' 202500 003375' MOVEM W,COMBAS; START OF COMMON + 003206' 260740 001710' PUSHJ P,WORD; COMMON BLOCK SIZE + 003207' 552500 003405' HRRZM W,BLKSIZ + 003210' 322500 003267' JUMPE W,PASS2; NO COMMON + 003211' 260740 001706' COMTOP: PUSHJ P,WORDPR ;GET A COMMON PAIR + 003212' 260740 001355' PUSHJ P,SDEF; SEARCH + 003213' 254000 003234' JRST COMYES; ALREADY THERE + 003214' 507000 000012 HRLS W + 003215' 540500 003375' HRR W,COMBAS; PICK UP THIS COMMON LOC + 003216' 607000 000204 TLNN F,SKIPSW!FULLSW + 003217' 260740 003531' PUSHJ P,SYMXX; DEFINE IT + 003220' 204500 000012 MOVS W,W; SWAP HALFS + 003221' 270500 003375' ADD W,COMBAS; UPDATE COMMON LOC + 003222' 542500 003375' HRRM W,COMBAS; OLD BASE PLUS NEW SIZE + 003223' 557000 000012 HLRZS W; RETURN ADDRESS + 003224' 621540 400000 TLZ C,400000 + 003225' 607000 000204 TLNN F,SKIPSW!FULLSW + 003226' 260740 003531' PUSHJ P,SYMXX + 003227' 260740 003245' COMCOM: PUSHJ P,CWSTWX ;STORE A WORD PAIR + 003230' 370000 003405' SOS BLKSIZ + 003231' 373000 003405' SOSLE BLKSIZ + 003232' 254000 003211' JRST COMTOP + 003233' 254000 003267' JRST PASS2 + + 003234' 603000 000004 COMYES: TLNE F,SKIPSW + 003235' 254000 003227' JRST COMCOM ;NO ERRORS IF SKIPPING + 003236' 554556 000002 HLRZ C,2(A); PICK UP DEFINITION + 003237' 313500 000013 CAMLE W,C; CHECK SIZE + 003240' 254000 001334' JRST ILC; ILLEGAL COMMON + 003241' 200556 000001 MOVE C,1(A); NAME + 003242' 550516 000002 HRRZ W,2(A); BASE + 003243' 254000 003227' JRST COMCOM + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 46 + DICK GRUEN: V25 3 AUG 68 + + + 003244' 260740 001706' PRSTWX: PUSHJ P,WORDPR ;GET A WORD PAIR + 003245' 250540 000012 CWSTWX: EXCH C,W ;SPACE TO STORE FIRST WORD OF PAIR? + 003246' 260740 003250' PUSHJ P,WSTWX ;... + 003247' 250540 000012 EXCH C,W ;THERE WAS; IT'S STORED + 003250' 603000 000204 WSTWX: TLNE F,FULLSW!SKIPSW ;SPACE FOR ANOTHER WORD? + 003251' 263740 000000 POPJ P, ;NOPE, RETURN + 003252' 202520 000002 MOVEM W,@X ;YES, STORE IT. + 003253' 254000 003061' JRST BITWX ;TELL THE TABLES ABOUT IT; THEN RETURN + + + 003254' 260740 001710' GSWD: PUSHJ P,WORD ;GET WORD FROM TABLE + 003255' 260740 003250' PUSHJ P,WSTWX ;STASH IT + 003256' 372000 003405' SOSE BLKSIZ ;FINISHED? + 003257' 254000 003254' JRST GSWD ;NOPE, LOOP + 003260' 263740 000000 POPJ P, ;TRA 1,4 + + 003261' 202500 003405' GSWDPR: MOVEM W,BLKSIZ ;KEEP COUNT + 003262' 260740 003244' GSWDP1: PUSHJ P,PRSTWX ;GET AND STASH A PAIR + 003263' 370000 003405' SOS BLKSIZ ;FINISHED? + 003264' 373000 003405' SOSLE BLKSIZ ;... + 003265' 254000 003262' JRST GSWDP1 ;NOPE, LOOP + 003266' 263740 000000 POPJ P, ;TRA 1,4 + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 47 + DICK GRUEN: V25 3 AUG 68 + + ;BEGIN HERE PASS2 TEXT PROCESSING + + 003267' 271442 000000 PASS2: ADDI V,(X) + 003270' 202440 003364' MOVEM V,TOPTAB ;SAVE FOR OVERLAP CHECKING + 003271' 603000 000204 TLNE F,FULLSW+SKIPSW; ABORT? + 003272' 254000 003546' JRST ALLOVE; YES + 003273' 200440 003376' MOVE V,LLC ;PICK UP PROGRAM ORIGIN + 003274' 311440 003372' CAML V,CCON ;IS THIS A PROGRAM? + 003275' 254000 003612' JRST FBLKD ;NO, GO LOOK FOR FIRST BLK DATA + 003276' 663040 000400 TLOE N,PGM1 ;YES, IS THIS FIRST F4 PROG? + 003277' 254000 003302' JRST NOPRG ;NO + 003300' 540500 003375' HRR W,COMBAS ;YES, PLACE PROG BREAK IN LH + 003301' 506502 000131 HRLM W,JOBCHN(X) ;FOR CHAIN + 003302' 550500 003401' NOPRG: HRRZ W,PLTP; GET PROG TABLE BASE + 003303' 554540 003401' HLRZ C,PLTP; AND SIZE + 003304' 270500 000013 ADD W,C; COMPUTE END OF PROG TABLE + 003305' 270500 004120' ADD W,[POINT 1,1]; AND BEGINNING OF BIT TABLE + 003306' 250500 003377' EXCH W,BITP; SWAP POINTERS + 003307' 134540 003377' PASS2B: ILDB C,BITP; GET A BIT + 003310' 322540 003342' JUMPE C,PASS2C; NO PASS2 PROCESSING + 003311' 260740 003314' PUSHJ P,PROC; PROCESS A TAG + 003312' 254000 003307' JRST PASS2B; MORE TO COME + 003313' 254000 003616' JRST ENDTP; + + 003314' 135540 004140' PROC: LDB C,[POINT 6,@X,23]; TAG + 003315' 402000 003406' SETZM MODIF; ZERO TO ADDRESS MODIFIER + 003316' 622540 000040 TRZE C,40; + 003317' 350000 003406' AOS MODIF + 003320' 506540 003341' HRLM C,ENDTAB; ERROR SETUP + 003321' 201500 003330' MOVEI W,TABDIS; HEAD OF TABLE + 003322' 554412 000000 HLRZ T,(W); GET ENTRY + 003323' 312400 000013 CAME T,C; CHECK + 003324' 344500 003322' AOJA W,.-2 + 003325' 550512 000000 HRRZ W,(W); GET DISPATCH + 003326' 135540 004141' LDB C,[POINT 12,@X,35] + 003327' 254012 000000 JRST (W); DISPATCH + + 003330' 000011 003412' TABDIS: XWD 11,PCONS; CONSTANTS + 003331' 000006 003500' XWD 06,PGS; GLOBAL SUBPROGRAMS + 003332' 000020 003426' XWD 20,PST; SCALARS + 003333' 000022 003425' XWD 22,PAT; ARRAYS + 003334' 000001 003444' XWD 01,PATO; ARRAYS OFFSET + 003335' 000000 003526' XWD 00,PPLT; PROGRAMMER LABELS + 003336' 000031 003524' XWD 31,PMLT; MADE LABESL + 003337' 000026 003476' XWD 26,PPT; PERMANENT TEMPORARYS + 003340' 000027 003474' XWD 27,PTT; TEMPORARY TEMPORARYS + 003341' 000000 001002' ENDTAB: XWD 00,LOAD4A; ERRORS + + 003342' 260740 003421' PASS2C: PUSHJ P,PASS2A + 003343' 254000 003307' JRST PASS2B + 003344' 254000 003616' JRST ENDTP + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 48 + DICK GRUEN: V25 3 AUG 68 + + ;DISPATCH ON A HEADER + + 003345' 316500 004142' HEADER: CAMN W,[EXP -2]; END OF PASS ONE + 003346' 254000 003122' JRST ENDS + 003347' 135540 004143' LDB C,[POINT 12,W,35]; GET SIZE + 003350' 202540 003405' MOVEM C,BLKSIZ + 003351' 405500 770000 ANDI W,770000 + 003352' 322500 003030' JUMPE W,PLB; PROGRAMMER LABEL + 003353' 306500 500000 CAIN W,500000; ABSOLUTE BLOCK + 003354' 254000 003003' JRST ABSI; + 003355' 306500 310000 CAIN W,310000; MADE LABEL + 003356' 254000 003007' JRST MDLB; MADE LABEL + 003357' 306500 600000 CAIN W,600000 + 003360' 254000 003020' JRST GLOBDF + 003361' 306500 700000 CAIN W,700000; DATA STATEMENT + 003362' 254000 003563' JRST DATAS + 003363' 254000 001002' JRST LOAD4A; DATA STATEMENTS WILL GO HERE + + 003364' 000000 000000 TOPTAB: 0 ;TOP OF TABLES + 003365' 000000 000000 CTAB: 0; COMMON + 003366' 000000 000000 ATAB: 0; ARRAYS + 003367' 000000 000000 STAB: 0; SCALARS + 003370' 000000 000000 GSTAB: 0; GLOBAL SUBPROGS + 003371' 000000 000000 AOTAB: 0; OFFSET ARRAYS + 003372' 000000 000000 CCON: 0; CONSTANTS + 003373' 000000 000000 PTEMP: 0; PERMANENT TEMPS + 003374' 000000 000000 TTEMP: 0; TEMPORARY TEMPS + 003375' 000000 000000 COMBAS: 0; BASE OF COMMON + 003376' 000000 000000 LLC: 0; PROGRAM ORIGIN + 003377' 000000 000000 BITP: 0; BIT POINTER + 003400' 000000 000000 BITC: 0; BIT COUNT + 003401' 000000 000000 PLTP: 0; PROGRAMMER LABEL TABLE + 003402' 000000 000000 MLTP: 0; MADE LABEL TABLE + 003403' 000000 000000 SDS: 0 ;START OF DATA STATEMENTS + 003404' 000000 000000 SDSTP: 0 ;START OF DATA STATEMENTS POINTER + 003405' 000000 000000 BLKSIZ: 0; BLOCK SIZE + 003406' 000000 000000 MODIF: 0; ADDRESS MODIFICATION +1 + 003407' 136253 114765 TTR50: XWD 136253,114765 ;RADIX 50 %TEMP. + 003410' 100450 614765 PTR50: XWD 100450,614765 ;RADIX 50 TEMP. + 003411' 112320 235025 CNR50: XWD 112320,235025 ;RADIX 50 CONST. + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 49 + DICK GRUEN: V25 3 AUG 68 + + ;ROUTINES TO PROCESS POINTERS + + 003412' 270540 003372' PCONS: ADD C,CCON; GENERATE CONSTANT ADDRESS + 003413' 364540 003417' SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + + 003414' 260740 003535' PSTA: PUSHJ P,SWAPSY ;NON-COMMON SCALARS AND ARRAYS + 003415' 271545 000000 ADDI C,(R); RELOCATE + 003416' 260740 003511' PCOM1: PUSHJ P,SYDEF ;... + 003417' 270540 003406' PCOMX: ADD C,MODIF ;ADDR RELOC FOR DP + 003420' 542560 000002 HRRM C,@X; REPLACE ADDRESS + 003421' 350000 000011 PASS2A: AOS V; STEP READOUT POINTER + 003422' 311440 003372' CAML V,CCON ;END OF PROCESSABLES? + 003423' 350017 000000 CPOPJ1: AOS (P); SKIP + 003424' 263740 000000 POPJ P,; + + 003425' 334500 003366' PAT: SKIPA W,ATAB ;ARRAY TABLE BASE + 003426' 200500 003367' PST: MOVE W,STAB ;SCALAR TABLE BASE + 003427' 241540 000001 ROT C,1 ;SCALE BY 2 + 003430' 270540 000012 ADD C,W ;ADD IN TABLE BASE + 003431' 271542 777776 ADDI C,-2(X); TABLE ENTRY + 003432' 554513 000000 HLRZ W,(C); CHECK FOR COMMON + 003433' 322500 003414' JUMPE W,PSTA; NO COMMON + 003434' 260740 003436' PUSHJ P,COMDID ;PROCESS COMMON + 003435' 254000 003416' JRST PCOM1 + + 003436' 242500 000001 COMDID: LSH W,1 ;PROCESS COMMON TABLE ENTRIES + 003437' 270500 003365' ADD W,CTAB; COMMON TAG + 003440' 271502 777776 ADDI W,-2(X); OFFSET + 003441' 260740 003535' PUSHJ P,SWAPSY; GET SYMBOL AND SET TO DEFINED + 003442' 270552 000001 ADD C,1(W); BASE OF COMMON + 003443' 263740 000000 POPJ P, ;RETURN + + 003444' 241540 000001 PATO: ROT C,1 + 003445' 270540 003371' ADD C,AOTAB; ARRAY OFFSET + 003446' 271542 777776 ADDI C,-2(X); LOADER OFFSET + 003447' 202540 004173' MOVEM C,CT1; SAVE CURRENT POINTER + 003450' 550553 000001 HRRZ C,1(C); PICK UP REFERENCE POINTER + 003451' 405540 007777 ANDI C,7777; MASK TO ADDRESS + 003452' 241540 000001 ROT C,1; ALWAYS A ARRAY + 003453' 271542 777776 ADDI C,-2(X) + 003454' 270540 003366' ADD C,ATAB + 003455' 554513 000000 HLRZ W,(C); COMMON CHECK + 003456' 322500 003465' JUMPE W,NCO + 003457' 260740 003436' PUSHJ P,COMDID ;PROCESS COMMON + 003460' 260740 003511' PUSHJ P,SYDEF + 003461' 200540 004173' MOVE C,CT1 + 003462' 570553 000000 HRRE C,(C) + 003463' 270552 000001 ADD C,1(W) + 003464' 254000 003417' JRST PCOMX + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 50 + DICK GRUEN: V25 3 AUG 68 + + 003465' 260740 003535' NCO: PUSHJ P,SWAPSY; + 003466' 271545 000000 ADDI C,(R) ;DEFINE SYMBOL IN TRUE LOC + 003467' 260740 003511' PUSHJ P,SYDEF ;... + 003470' 200540 004173' MOVE C,CT1 + 003471' 550553 000000 HRRZ C,(C) ;OFFSET ADDRESS PICKUP + 003472' 271545 000000 ADDI C,(R) ;WHERE IT WILL BE + 003473' 254000 003417' JRST PCOMX ;STASH ADDR AWAY + + 003474' 270540 003374' PTT: ADD C,TTEMP; TEMPORARY TEMPS + 003475' 364540 003417' SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + + 003476' 270540 003373' PPT: ADD C,PTEMP; PERMANENT TEMPS + 003477' 364540 003417' SOJA C,PCOMX ;ADJUST FOR 1 AS FIRST ENTRY + + 003500' 270540 003370' PGS: ADD C,GSTAB; GLOBSUBS + 003501' 271542 777777 ADDI C,-1(X); OFFSET + 003502' 200553 000000 MOVE C,(C) + 003503' 641540 640000 TLC C,640000; MAKE A REQUEST + 003504' 260740 003541' PUSHJ P,TBLCHK ;CHECK FOR OVERLAP + 003505' 201511 000000 MOVEI W,(V); THIS LOC + 003506' 546520 000002 HLRM W,@X; ZERO RIGHT HALF + 003507' 260740 003531' PUSHJ P,SYMXX + 003510' 254000 003421' JRST PASS2A + + 003511' 603040 000040 SYDEF: TLNE N,SYDAT ;SYMBOL WANTS DEFININITION? + 003512' 263740 000000 POPJ P, ;NO, GO AWAY + 003513' 261740 000013 PUSH P,C ;SAVE THE WORLD + 003514' 261740 000012 PUSH P,W + 003515' 260740 003541' PUSHJ P,TBLCHK ;CHECK FOR OVERLAP + 003516' 200500 000013 MOVE W,C + 003517' 332540 000010 SKIPE C,T ;PICKUP VALUE + 003520' 260740 003531' PUSHJ P,SYMXX + 003521' 262740 000012 POP P,W + 003522' 262740 000013 POP P,C + 003523' 263740 000000 POPJ P,; + + 003524' 270540 003402' PMLT: ADD C,MLTP + 003525' 334000 000000 SKIPA + 003526' 270540 003401' PPLT: ADD C,PLTP + 003527' 550553 000000 HRRZ C,(C) + 003530' 254000 003417' JRST PCOMX + + 003531' 261740 000011 SYMXX: PUSH P,V + 003532' 260740 001026' PUSHJ P,SYMPT + 003533' 262740 000011 POP P,V + 003534' 263740 000000 POPJ P,; + + 003535' 201400 000000 SWAPSY: MOVEI T,0; SET TO EXCHANGE DEFS + 003536' 250413 000001 EXCH T,1(C); GET NAME + 003537' 550553 000000 HRRZ C,(C) ;GET VALUE + 003540' 263740 000000 POPJ P, + 003541' 550500 003402' TBLCHK: HRRZ W,MLTP ;GETT TOP OV TABLES + 003542' 275500 000002 SUBI W,2 + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 50-1 + DICK GRUEN: V25 3 AUG 68 + + 003543' 317500 003364' CAMG W,TOPTAB ;WILL IT OVERLAP + IFE EXPAND,<TLO F,FULLSW> + IFN EXPAND,< JRST [PUSHJ P,XPAND + TLOA F,FULLSW + JRST TBLCHK + 003544' 254000 004144' JRST .+1]> + 003545' 263740 000000 POPJ P, + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 51 + DICK GRUEN: V25 3 AUG 68 + + ;END OF PASS2 + + 003546' 621040 000010 ALLOVE: TLZ N,F4SW ;END OF F4 PROG + 003547' 603000 000204 TLNE F,FULLSW!SKIPSW + 003550' 254000 001301' JRST HIGH3 + 003551' 540240 003375' HRR R,COMBAS ;TOP OF THE DATA + 003552' 540440 000005 HRR V,R ;IS THIS THE HIGHEST LOC YET? + 003553' 307160 000002 CAIG H,@X ;... + 003554' 201160 000002 MOVEI H,@X ;YES, TELL THE WORLD + 003555' 317140 003403' CAMG H,SDS ;HIGHEST LOC GREATER THAN DATA STATEMENTS? + 003556' 254000 001301' JRST HIGH3 ;NO, RETURN + 003557' 271144 000001 ADDI H,1(S) ;YES, SET UP MEANINGFUL ERROR COMMENT + 003560' 274140 003403' SUB H,SDS ;... + 003561' 661000 000200 TLO F,FULLSW ;INDICATE OVERFLO + 003562' 254000 001301' JRST HIGH3 ;RETURN + + 003563' 603000 000204 DATAS: TLNE F,FULLSW+SKIPSW + 003564' 254000 003604' JRST DAX + 003565' 201544 000000 MOVEI C,(S) ;ADDR OF WORD UNDER SYMBOL TABLE + 003566' 210500 003405' MOVN W,BLKSIZ ;HOW FAR DOWN TO BLT + 003567' 272500 003401' ADDM W,PLTP ;UPDATE TABLE POINTERS + 003570' 272500 003377' ADDM W,BITP ;... + 003571' 272500 003404' ADDM W,SDSTP ;... + 003572' 270540 000012 ADD C,W ;RH(C):= WHEN TO STOP BLT + 003573' 504540 003402' HRL C,MLTP ;SOURCE OF BLTED DATA + 003574' 270500 003402' ADD W,MLTP ;UPDATE, GET DESTINATION OF BLT DATA + 003575' 553000 000012 IFN EXPAND,< HRRZS W ;GET RID OF LEFT HALF + 003576' 307520 000002 CAIG W,@X + PUSHJ P,[PUSHJ P,XPAND + POPJ P, + ADDI W,2000 + ADD C,[XWD 2000,2000] + 003577' 260740 004151' JRST POPJM2]> + 003600' 542500 003402' HRRM W,MLTP ;NO SET THIS SO EXTRA CORE NOT ZEROED + 003601' 500500 000013 HLL W,C ;FORM BLT POINTER + 003602' 251513 777777 BLT W,-1(C) ;MOVE TABLES DOWN (BUT NOT JRST ALLOVE) + 003603' 260740 003062' PUSHJ P,BITWX+1 + 003604' 260740 001710' DAX: PUSHJ P,WORD; READ ONE WORD + 003605' 607000 000204 TLNN F,FULLSW+SKIPSW + 003606' 202513 000000 MOVEM W,(C) + 003607' 373000 003405' SOSLE BLKSIZ ;COUNT OF DATA SEQUENCE SIZE + 003610' 344540 003604' AOJA C,DAX ;INCREMENT DATA SEQUENCE DEPOSIT LOC + 003611' 254000 002772' JRST TEXTR; DONE + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 52 + DICK GRUEN: V25 3 AUG 68 + + 003612' 663040 000200 FBLKD: TLOE N,BLKD1 ;IS THIS FIRST BLOCK DATA? + 003613' 254000 003616' JRST ENDTP ;NO + 003614' 540440 003375' HRR V,COMBAS ;PLACE PROG BREAK IN RH FOR + 003615' 542442 000131 HRRM V,JOBCHN(X) ;CHAIN + 003616' 603000 000204 ENDTP: TLNE F,FULLSW+SKIPSW + 003617' 254000 003546' JRST ALLOVE + 003620' 540440 003370' HRR V,GSTAB + 003621' 311440 003367' ENDTP0: CAML V,STAB; ANY MORE GLOBSUBS + 003622' 254000 003636' JRST ENDTP2; NO + 003623' 200560 000002 MOVE C,@X; GET SUBPROG NAME + 003624' 260740 001353' PUSHJ P,SREQ; IS IT ALLREADY REQUESTED + 003625' 344440 003621' AOJA V,ENDTP0; YES + 003626' 260740 001355' PUSHJ P,SDEF; OR DEFINED + 003627' 344440 003621' AOJA V,ENDTP0; YES + 003630' 260740 003541' PUSHJ P,TBLCHK + 003631' 201500 000000 MOVEI W,0 ;PREPARE DUMMY LINK + 003632' 607000 000204 TLNN F,FULLSW+SKIPSW; ABORT + 003633' 260740 001131' PUSHJ P,SYM3X; PUT IN DUMMY REQUEST + 003634' 260740 003062' PUSHJ P,BITWX+1; OVERLAP CHECK + 003635' 344440 003621' AOJA V,ENDTP0 + 003636' 402000 003121' ENDTP2: SETZM PT1 + 003637' 540440 003404' HRR V,SDSTP + 003640' 275442 000000 IFN EXPAND,< SUBI V,(X) + 003641' 317440 003375' CAMG V,COMBAS + JRST [PUSHJ P,XPAND + TLOA F,FULLSW + JRST .-3 + 003642' 254000 004156' JRST .+1] + 003643' 540440 003404' HRR V,SDSTP> + 003644' 552440 003403' HRRZM V,SDS ;DATA STATEMENT LOC + 003645' 275442 000000 ENDTP1: SUBI V,(X); COMPENSATE FOR OFFSET + 003646' 200520 000002 MOVE W,@X; GET WORD + 003647' 603500 777777 TLNE W,-1; NO LEFT HALF IMPLIES COUNT + 003650' 254000 003774' JRST DODON; DATA DONE + 003651' 270500 004162' ADD W,[MOVEI W,3] + 003652' 271520 000002 ADDI W,@X + 003653' 250520 000002 EXCH W,@X + 003654' 350000 000011 AOS V + 003655' 270520 000002 ADD W,@X; ITEMS COUNT + 003656' 202500 004175' MOVEM W,ITC + 003657' 200500 004163' MOVE W,[MOVEM W,LTC] + 003660' 202520 000002 MOVEM W,@X; SETUP FOR DATA EXECUTION + 003661' 350000 000011 AOS V + 003662' 200500 004164' MOVE W,[MOVEI W,0] + 003663' 250520 000002 EXCH W,@X + 003664' 202500 004176' MOVEM W,ENC; END COUNT + 003665' 350000 000011 AOS V + 003666' 201520 000002 MOVEI W,@X + 003667' 272500 004175' ADDM W,ITC + 003670' 200520 000002 LOOP: MOVE W,@X + 003671' 554400 000012 HLRZ T,W; LEFT HALF INST. + 003672' 405400 777000 ANDI T,777000 + 003673' 306400 254000 CAIN T,254000 ;JRST? + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 52-1 + DICK GRUEN: V25 3 AUG 68 + + 003674' 254000 003766' JRST WRAP ;END OF DATA + 003675' 306400 260000 CAIN T,260000 ;PUSHJ? + 003676' 254012 003731' JRST PJTABL(W) ;DISPATCH VIA TABLE + 003677' 306400 200000 CAIN T,200000; MOVE? + 003700' 344440 003707' AOJA V,INNER + 003701' 306400 270000 CAIN T,270000; ADD? + 003702' 254000 003725' JRST ADDOP + 003703' 306400 221000 CAIN T,221000; IMULI? + 003704' 344440 003670' AOJA V,LOOP + 003705' 302400 220000 CAIE T,220000; IMUL? + 003706' 254000 001002' JRST LOAD4A; NOTA + 003707' 550420 000002 INNER: HRRZ T,@X; GET ADDRESS + 003710' 622400 770000 TRZE T,770000; ZERO TAG? + 003711' 364400 003722' SOJA T,CONPOL; NO, CONSTANT POOL + 003712' 274400 003121' SUB T,PT1; SUBTRACT INDUCTION NUMBER + 003713' 240400 000001 ASH T,1 + 003714' 370000 000010 SOS T; FORM INDUCTION POINTER + 003715' 542420 000002 HRRM T,@X + 003716' 554420 000002 HLRZ T,@X + 003717' 271400 000017 ADDI T,P + 003720' 506420 000002 HRLM T,@X + 003721' 344440 003670' AOJA V,LOOP + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 53 + DICK GRUEN: V25 3 AUG 68 + + 003722' 270400 004175' CONPOL: ADD T,ITC; CONSTANT BASE + 003723' 542420 000002 HRRM T,@X + 003724' 344440 003670' AOJA V,LOOP + + 003725' 550420 000002 ADDOP: HRRZ T,@X + 003726' 622400 770000 TRZE T,770000 + 003727' 364400 003722' SOJA T,CONPOL + 003730' 344440 003670' SKIPIN: AOJA V,LOOP + + 003731' 254000 003740' PJTABL: JRST DWFS ;PUSHJ 17,0 + 003732' 354000 003121' AOSA PT1 ;INCREMENT DO COUNT + 003733' 374000 003121' SOSA PT1; DECREMENT DO COUNT + 003734' 334500 004165' SKIPA W,[EXP DOINT.] + 003735' 201500 003754' MOVEI W,DOEND. + 003736' 542520 000002 HRRM W,@X + 003737' 344440 003730' AOJA V,SKIPIN ;SKIP A WORD + + 003740' 201500 004044' DWFS: MOVEI W,DWFS. + 003741' 542520 000002 HRRM W,@X + 003742' 350000 000011 AOS V + 003743' 661040 000040 TLO N,SYDAT + 003744' 260740 003314' PUSHJ P,PROC; PROCESS THE TAG + 003745' 254000 001002' JRST LOAD4A ;DATA STATEMENT BELOW CODE TOP + 003746' 254000 003670' JRST LOOP ;PROPER RETURN + + 003747' 262740 000011 DOINT.: POP P,V; GET ADDRESS OF INITIAL VALUE + 003750' 261751 000000 PUSH P,(V); STORE INDUCTION VARIABLE + 003751' 350000 000011 AOS V + 003752' 261740 000011 PUSH P,V; INITIAL ADDRESS + 003753' 254011 000000 JRST (V) + + 003754' 554437 000000 DOEND.: HLRZ T,@(P) + 003755' 272417 777776 ADDM T,-2(P); INCREMENT + 003756' 550437 000000 HRRZ T,@(P); GET FINAL VALUE + 003757' 315417 777776 CAMGE T,-2(P); END CHECK + 003760' 254000 003763' JRST DODONE; WRAP IT UP + 003761' 262757 000000 POP P,(P); BACK UP POINTER + 003762' 254037 000000 JRST @(P) + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 54 + DICK GRUEN: V25 3 AUG 68 + + 003763' 262757 777777 DODONE: POP P,-1(P); BACK UP ADDRESS + 003764' 262757 777777 POP P,-1(P) + 003765' 254000 003423' JRST CPOPJ1 ;RETURN + + 003766' 200500 004176' WRAP: MOVE W,ENC; NUMBER OF CONSTANTS + 003767' 270500 004175' ADD W,ITC; CONSTANT BASE + 003770' 201552 000000 MOVEI C,(W); CHAIN + 003771' 542560 000002 HRRM C,@X + 003772' 201452 000000 MOVEI V,(W); READY TO GO + 003773' 254000 003645' JRST ENDTP1 + + 003774' 621040 001060 DODON: TLZ N,RCF!SYDAT!DZER ;DATA STATEMENT FLAGS + 003775' 200500 003373' MOVE W,PTEMP ;TOP OF PROG + 003776' 271502 000000 ADDI W,(X) ;+OFFSET + 003777' 200540 003375' MOVE C,COMBAS ;TOP OF DATA + 004000' 271542 000000 ADDI C,(X) ;+OFFSET + 004001' 311500 000013 SECZER: CAML W,C ;ANY DATA TO ZERO? + 004002' 254020 003403' JRST @SDS ;NO, DO DATA STATEMENTS + 004003' 311500 003403' CAML W,SDS ;IS DATA BELOW DATA STATEMENTS? + 004004' 661000 000200 TLO F,FULLSW ;NO, INDICATE OVERFLO + 004005' 607000 000204 TLNN F,FULLSW+SKIPSW ;SHOULD WE ZERO? + 004006' 402012 000000 SETZM (W) ;YES, DO SO + 004007' 667040 001000 TLON N,DZER ;GO BACK FOR MORE? + 004010' 344500 004001' AOJA W,SECZER ;YES, PLEASE + 004011' 313540 003403' CAMLE C,SDS ;ALL DATA BELOW DATA STATEMENTS? + 004012' 200540 003403' MOVE C,SDS ;ALL ZEROED DATA MUST BE + 004013' 505512 777777 HRLI W,-1(W) ;SET UP BLT POINTER TO ZERO DATA + 004014' 607000 000204 TLNN F,FULLSW+SKIPSW ;SHOULD WE ZERO? + 004015' 251513 777777 BLT W,-1(C) ;YES, DO SO + 004016' 254020 003403' JRST @SDS ;GO DO DATA STATEMENTS + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 55 + DICK GRUEN: V25 3 AUG 68 + + 004017' 603040 000020 DREAD: TLNE N,RCF; NEW REPEAT COUNT NEEDED + 004020' 254000 004032' JRST FETCH; NO + 004021' 200500 004174' MOVE W,LTC + 004022' 202500 004201' MOVEM W,LTCTEM + 004023' 200520 004174' MOVE W,@LTC; GET A WORD + 004024' 556500 004200' HLRZM W,RCNT; SET REPEAT COUNT + 004025' 552500 004177' HRRZM W,WCNT; SET WORD COUNT + 004026' 262512 000000 POP W,(W); SUBTRACT ONE FROM BOTH HALFS + 004027' 502520 004174' HLLM W,@LTC; DECREMENT REPEAT COUNT + 004030' 350500 004174' AOS W,LTC; STEP READOUT + 004031' 661040 000020 TLO N,RCF + 004032' 200520 004174' FETCH: MOVE W,@LTC + 004033' 350000 004174' AOS LTC + 004034' 372000 004177' SOSE WCNT + 004035' 263740 000000 POPJ P,; + 004036' 376000 004200' SOSN RCNT + 004037' 254000 004042' JRST DOFF. + 004040' 200440 004201' MOVE V,LTCTEM; RESTORE READOUT + 004041' 202440 004174' MOVEM V,LTC + 004042' 621040 000020 DOFF.: TLZ N,RCF; RESET DATA REPEAT FLAG + 004043' 263740 000000 POPJ P,; + + 004044' 200417 000000 DWFS.: MOVE T,(P) + 004045' 350017 000000 AOS (P) + 004046' 200410 000000 MOVE T,(T); GET ADDRESS + 004047' 556400 004202' HLRZM T,DWCT; DATA WORD COUNT + 004050' 573000 000010 HRRES T + 004051' 270400 000012 ADD T,W; OFFSET + 004052' 271402 000000 ADDI T,(X); LOADER OFFSET + 004053' 260740 004017' DWFS.1: PUSHJ P,DREAD ;GET A DATA WORD + 004054' 311400 003403' CAML T,SDS ;BELOW BEGINNING OF DATA STATEMENTS + 004055' 661000 000200 TLO F,FULLSW ;YES, INDICATE OVERFLO + 004056' 607000 000204 TLNN F,FULLSW+SKIPSW ;LOAD THE NEXT DATA ITEM? + 004057' 202510 000000 MOVEM W,(T) ;YES, STORE IT + 004060' 350000 000010 AOS T + 004061' 372500 004202' SOSE W,DWCT; STEP DOWN AND TEST + 004062' 254000 004053' JRST DWFS.1 ;ONE MORE TIME, MOZART BABY! + 004063' 263740 000000 POPJ P,; + + + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 56 + DICK GRUEN: V25 3 AUG 68 + + ;LITERAL TABLE + + 004064' LITS: LIT + 004064' 444566 435062 + 004065' 656460 435462 + 004066' 545741 444562 + 004067' 251656 000000 + 004070' 530043 576245 + 004071' 435041 515600 + 004072' 545142 240000 + 004073' 200500 004072' + 004074' 202500 002054' + 004075' 260740 000722' + 004076' 621000 000002 + 004077' 254000 000623' + 004100' 545142 242000 + 004101' 525742 444164 + 004102' 624151 440000 + 004103' 260740 000365' + 004104' 254000 001266' + 004105' 254000 001015' + 004106' 077777 777777 + 004107' 260740 000365' + 004110' 665000 000200 + 004111' 254000 001234' + 004112' 254000 001241' + 004113' 000002 000000 + 004114' 260740 000365' + 004115' 665000 000200 + 004116' 254000 000456' + 004117' 263740 000000 + 004120' 440100 000001 + 004121' 254000 003546' + 004122' 260740 000365' + 004123' 263740 000000 + 004124' 271540 002000 + 004125' 254000 000456' + 004126' 260740 000365' + 004127' 665000 000200 + 004130' 254000 000455' + 004131' 263740 000000 + 004132' 002000 000000 + 004133' 260740 000365' + 004134' 263740 000000 + 004135' 270500 004132' + 004136' 271540 002000 + 004137' 254000 000456' + 004140' 140620 000002 + 004141' 001420 000002 + 004142' 777777 777776 + 004143' 001400 000012 + 004144' 260740 000365' + 004145' 665000 000200 + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 56-1 + DICK GRUEN: V25 3 AUG 68 + + 004146' 254000 003541' + 004147' 254000 003545' + 004150' 002000 002000 + 004151' 260740 000365' + 004152' 263740 000000 + 004153' 271500 002000 + 004154' 270540 004150' + 004155' 254000 000456' + 004156' 260740 000365' + 004157' 665000 000200 + 004160' 254000 003637' + 004161' 254000 003643' + 004162' 201500 000003 + 004163' 202500 004174' + 004164' 201500 000000 + 004165' 000000 003747' + 004173' VAR + 004173' 000000 000000 CT1: 0 ;TEMP FOR C + 004174' 000000 000000 LTC: 0 + 004175' 000000 000000 ITC: 0 + 004176' 000000 000000 ENC: 0 + 004177' 000000 000000 WCNT: 0 ;DATA WORD COUNT + 004200' 000000 000000 RCNT: 0 ;DATA REPEAT COUNT + + 004201' 000000 000000 LTCTEM: 0 ;TEMP FOR LTC + 004202' 000000 000000 DWCT: 0 ;DATA WORD COUNT + 000000' LDEND: END LD + +NO ERRORS DETECTED + +PROGRAM BREAK IS 004203 + +9K CORE USED + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 57 + SYMBOL TABLE + + 000662 +A 000016 INT +ABS 003001' +ABSI 003003' +ABUF 002046' +ABUF1 002047' +ABUF2 002050' +ABUFL 000203 +ADDOP 003725' +ALLFLG 000001 SPD +ALLOVE 003546' +AOTAB 003371' +ASW 000100 SPD +ATAB 003366' +AUX 002544' +AUXSWE 040000 SPD +AUXSWI 020000 SPD +B 000006 INT +B.C 002030' +BEG 000000' INT +BITC 003400' +BITP 003377' +BITW 003037' +BITWX 003061' +BLKD1 000200 SPD +BLKSIZ 003405' +BLTSET 000251' +BLTSYM 000000 +BUF1 002136' +BUFI 002043' +BUFI1 002044' +BUFI2 002045' +BUFL 000406 +BUFO 002040' +BUFO1 002041' +BUFO2 002042' +BUFR 002051' +BUFR1 002052' +BUFR2 002053' +C 000013 INT +CALLEX 000007' +CCON 003372' +CDDTGT 000005 SPD +CDDTOU 000003 SPD +CEXIT 000012 SPD +CHAIN3 000350' +CHN5 000001 +CHNBLT 000014 +CHNC 000307' +CHNERR 000010 +CHNR 000310' +CHNSYM 001212' +CNR50 003411' + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 57-1 + SYMBOL TABLE + +COMBAS 003375' +COMCOM 003227' +COMDID 003436' +COMFLG 000004 SPD +COMM 001756' +COMSAV 001760' +COMTOP 003211' +COMYES 003234' +CONPOL 003722' +CPOPJ1 003423' +CRLF 001730' INT +CRLFLF 001726' +CSETDD 000002 SPD +CSW 000001 SPD +CT1 004173' +CTAB 003365' +CTLSET 000004' +CWSTWX 003245' +D 000007 INT +DATAS 003563' +DAX 003604' +DDSW 004000 SPD +DISPL 000005 +DODON 003774' +DODONE 003763' +DOEND. 003754' +DOFF. 004042' +DOINT. 003747' +DREAD 004017' +DSW 100000 SPD +DSYMSW 001000 SPD +DTIN 002054' INT +DTIN1 002055' +DTIN2 002057' +DTOUT 002060' INT +DTOUT1 002061' +DWCT 004202' +DWFS 003740' +DWFS. 004044' +DWFS.1 004053' +DZER 001000 SPD +E 000014 INT +E1 003143' +E11 003164' +E1A 003160' +E21 003170' +E31 003174' +E41 003200' +ENC 004176' +ENDS 003122' +ENDS1 003131' +ENDTAB 003341' +ENDTP 003616' + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 57-2 + SYMBOL TABLE + +ENDTP0 003621' +ENDTP1 003645' +ENDTP2 003636' +EOF 000725' +EOF1 000726' +EOF2 000727' +ERRP41 001646' +ERRP8 001666' +ERRPT 001610' +ERRPT0 001613' +ERRPT1 001615' +ERRPT2 001631' +ERRPT3 001635' +ERRPT4 001645' +ERRPT5 001652' +ERRPT6 001653' +ERRPT7 001667' +ERRPT8 001654' +ERRPT9 001671' +ESW 000002 SPD +EXEQSW 002000 SPD +EXPAND 000001 +F 000000 INT +F.C 002022' +F.I 002031' +F4LD 002753' +F4LIB 010000 SPD +F4SW 000010 SPD +FBLKD 003612' +FCONSW 000020 SPD +FCRLF 001727' +FETCH 004032' +FIXW 001162' +FIXWL 001171' +FIXWP 001152' +FSCN 000730' +FSCN1 000746' +FSCN2 000751' +FSW 000010 SPD +FULLC 001266' +FULLSW 000200 SPD +GLOBDF 003020' +GSTAB 003370' +GSWD 003254' +GSWDP1 003262' +GSWDPR 003261' +H 000003 INT +HEADER 003345' +HIGH 001274' +HIGH0 001272' +HIGH3 001301' +IAD2 001523' +ILC 001334' + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 57-3 + SYMBOL TABLE + +ILD 000611' +ILD1 000616' +ILD2 000623' +ILD3 000631' +ILD4 000635' +ILD5 000643' +ILD6 000621' +ILD9 000637' +IMD3 001526' +INNER 003707' +IOBAD 740000 +IOBKTL 040000 +IODEND 020000 +IODERR 200000 +IODTER 100000 +IOIMPM 400000 +IOWDP 000013 +IOWDPP 000363' +ISAFLG 000002 SPD +ISW 020000 SPD +ITC 004175' +JOB41 000330' EXT +JOBBLT 000134 SPD +JOBCHN 000131 SPD +JOBDDT 000331' EXT +JOBFF 000612' EXT +JOBPRO 000140 SPD +JOBREL 001223' EXT +JOBSA 000332' EXT +JOBSYM 000413' EXT +JOBUSY 000247' EXT +K 000000 +LD 000000' INT +LD2 000042' +LD2B 000050' +LD2BA 000054' +LD2D 000057' +LD2DA 000057' +LD2Q 000042' +LD3 000063' +LD3A 000100' +LD3AA 000066' +LD4 000110' +LD5 000115' +LD5A 000127' +LD5B 000134' +LD5B1 000137' +LD5C 000145' +LD5C1 000165' +LD5D 000201' +LD5E 000203' +LD5E1 000205' +LD5E2 000215' + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 57-4 + SYMBOL TABLE + +LD5E3 000225' +LD5E5 000212' +LD6 000466' +LD6A 000461' +LD6A1 000464' +LD6B 000472' +LD6C 000524' +LD6D 000527' +LD7 000533' +LD7A 000536' +LD7B 000542' +LD7C 000546' +LD7D 000554' +LD8 000561' +LD9 000572' +LDAC 000000 +LDDT 000710' +LDDT0 000712' +LDDT1 000716' +LDDT2 000722' +LDDT3 000723' +LDDTX 000707' +LDEND 004203' INT +LDF 000752' +LIB 000666' +LIB1 000671' +LIB2 000673' +LIB3 000701' +LIBF 000653' +LIBF1 000660' +LIBF2 000661' +LIBSW 004000 SPD +LITS 004064' +LLC 003376' +LOAD 000753' INT +LOAD1 000754' +LOAD1A 000755' +LOAD2 000772' +LOAD3 000777' +LOAD4 001000' +LOAD4A 001002' +LOCD 001340' +LOOP 003670' +LOSEBI 000006 +LRAID 000704' +LRAIDX 000703' +LSTPT 001754' +LTC 004174' +LTCTEM 004201' +MDG 001761' +MDLB 003007' +MLPLC 003015' +MLTP 003402' + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 57-5 + SYMBOL TABLE + +MODIF 003406' +MVABRT 001256' +MVDWN 001234' +N 000001 INT +NAME 001311' +NAME1 001317' +NAME2 001330' +NCO 003465' +NOEX 000275' +NOPRG 003302' +NSW 200000 SPD +NUTS 000002' +P 000017 INT +PASS2 003267' +PASS2A 003421' +PASS2B 003307' +PASS2C 003342' +PAT 003425' +PATO 003444' +PCOM1 003416' +PCOMX 003417' +PCONS 003412' +PDLPT 001755' +PDLST 001762' INT +PDSAV 001757' +PGM1 000400 SPD +PGS 003500' +PJTABL 003731' +PLB 003030' +PLTP 003401' +PMLT 003524' +PMS 001460' INT +PMS2 001476' +PMS3 001504' +PMS4 001520' +POPJM2 000456' +POPJM3 000455' +PP 000000 +PPDL 000060 SPD +PPLT 003526' +PPT 003476' +PRMAP 001407' INT +PRMAP1 001427' +PRMAP2 001444' +PRMAP3 001455' +PRMAP4 001456' +PRMAP5 001460' +PRNAM 001534' +PRNAM0 001532' +PRNAM1 001533' +PRNAME 001561' +PRNUM 001535' +PRNUM0 001536' + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 57-6 + SYMBOL TABLE + +PRNUM1 001540' +PRNUM2 001545' +PROC 003314' +PROG 001006' +PROG1 001020' +PRQ 001701' +PRSTWX 003244' +PRWORD 001363' +PST 003426' +PSTA 003414' +PT1 003121' +PTEMP 003373' +PTR50 003410' +PTT 003474' +PWORD 001602' INT +PWORD1 001603' +PWORD2 001604' +Q 000015 INT +R 000005 INT +RCF 000020 SPD +RCNT 004200' +RCNUM 001546' +REMSYM 001344' +REWSW 002000 SPD +RPGSW 000000 +RWORD 001371' +RWORD1 001373' +RWORD2 001377' +RWORD3 001403' +S 000004 INT +SAS1 000234' +SASYM 000227' +SDEF 001355' +SDEF1 001356' +SDEF2 001360' +SDS 003403' +SDSTP 003404' +SE3 001753' +SECZER 004001' +SFULLC 001257' +SKIPIN 003730' +SKIPSW 000004 SPD +SLASH 000100 SPD +SLIBSW 000400 SPD +SLTC 003101' +SMLT 003066' +SP1 001556' +SPACE 001557' +SPACES 001555' +SPLT 003103' +SPT 001564' +SREQ 001353' +SSW 400000 SPD + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 57-7 + SYMBOL TABLE + +STAB 003367' +START 001306' +SVA 001101' +SWAPSY 003535' +SYDAT 000040 SPD +SYDEF 003511' +SYM 001023' +SYM1 001037' +SYM1A 001053' +SYM1B 001055' +SYM1C 001057' +SYM1D 001062' +SYM2 001070' +SYM2A 001102' +SYM2B 001071' +SYM2C 001100' +SYM2W 001221' +SYM2W1 001075' +SYM2WA 001225' +SYM3 001106' +SYM3A 001137' +SYM3A1 001144' +SYM3B 001145' +SYM3X 001131' +SYM3X1 001116' +SYM3X2 001127' +SYM4 001227' +SYM4A 001232' +SYMFIX 001174' +SYMPT 001026' +SYMSW 040000 SPD +SYMXX 003531' +T 000010 INT +TABDIS 003330' +TBLCHK 003541' +TEXTR 002772' +TOPTAB 003364' +TTEMP 003374' +TTR50 003407' +TTY1 002064' +TTYL 000052 +TYPE 001733' INT +TYPE2 001734' +TYPE3 001745' +V 000011 INT +W 000012 INT +WCNT 004177' +WORD 001710' INT +WORD1 001712' +WORD2 001714' +WORDPR 001706' +WRAP 003766' +WSTWX 003250' + LOADER - LOADS MACROX AND SIXTRAN FOUR PAGE 57-8 + SYMBOL TABLE + +X 000002 INT +XPAND 000365' +XPAND2 000401' +XPAND3 000426' +XPAND4 000442' +XPAND5 000446' +XPAND6 000432' +XPAND7 000452' +ZEROS 002747' + LLL OOOOOOOOO AAAAAAAAA DDDDDDDDDDDD 111 KKK KKK +LLL OOOOOOOOO AAAAAAAAA DDDDDDDDDDDD 111 KKK KKK +LLL OOOOOOOOO AAAAAAAAA DDDDDDDDDDDD 111 KKK KKK +LLL OOO OOO AAA AAA DDD DDD 111111 KKK KKK +LLL OOO OOO AAA AAA DDD DDD 111111 KKK KKK +LLL OOO OOO AAA AAA DDD DDD 111111 KKK KKK +LLL OOO OOO AAA AAA DDD DDD 111 KKK KKK +LLL OOO OOO AAA AAA DDD DDD 111 KKK KKK +LLL OOO OOO AAA AAA DDD DDD 111 KKK KKK +LLL OOO OOO AAA AAA DDD DDD 111 KKKKKKKKK +LLL OOO OOO AAA AAA DDD DDD 111 KKKKKKKKK +LLL OOO OOO AAA AAA DDD DDD 111 KKKKKKKKK +LLL OOO OOO AAAAAAAAAAAAAAA DDD DDD 111 KKK KKK +LLL OOO OOO AAAAAAAAAAAAAAA DDD DDD 111 KKK KKK +LLL OOO OOO AAAAAAAAAAAAAAA DDD DDD 111 KKK KKK +LLL OOO OOO AAA AAA DDD DDD 111 KKK KKK +LLL OOO OOO AAA AAA DDD DDD 111 KKK KKK +LLL OOO OOO AAA AAA DDD DDD 111 KKK KKK +LLLLLLLLLLLLLLL OOOOOOOOO AAA AAA DDDDDDDDDDDD 111111111 KKK KKK +LLLLLLLLLLLLLLL OOOOOOOOO AAA AAA DDDDDDDDDDDD 111111111 KKK KKK +LLLLLLLLLLLLLLL OOOOOOOOO AAA AAA DDDDDDDDDDDD 111111111 KKK KKK + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :LOAD1K.LST [8,200] Created: 20-April-1967 11:19:00 Printed: 24-April-1978 11:22:30 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1777 +File will be deleted after printing + 1KLOAD - LOADS MACROX PAGE 1 + DICK GRUEN: V25 3 AUG 68 + + 000001 K==1 + SUBTTL DICK GRUEN: V25 3 AUG 68 + + + ;K=1 ;K=1 MEANS 1KLOADER + IFNDEF K,<K=0> ;K=0 MEANS F4 LOADER + + ;RPGSW=1 ;MEANS RPG FEATURE + IFNDEF RPGSW,<RPGSW=0> + ;LDAC=1 ;MEANS LOAD CODE INTO ACS + IFNDEF LDAC,<LDAC=0> + + ;BLTSYM=1 ;MOVE SYMBOL TABLE DOWN TO END OF PROG + IFNDEF BLTSYM,<BLTSYM=0> + + ;EXPAND=1 ;FOR AUTOMATIC CORE EXPANSION + IFNDEF EXPAND,< IFN K,<EXPAND=0> + IFE K,<EXPAND=1>> + + ;PP=1 ;ALLOW PROJ-PROG # + IFNDEF PP,<PP=0> + + ;CHN5=0 ;IF CHAIN WHICH DOESN'T SAVES JOB41 + IFNDEF CHN5,<CHN5=1> + + IFE K,< TITLE LOADER - LOADS MACROX AND SIXTRAN FOUR> + IFN K,< TITLE 1KLOAD - LOADS MACROX> + 1KLOAD - LOADS MACROX PAGE 2 + DICK GRUEN: V25 3 AUG 68 + + ;ACCUMULATOR ASSIGNMENTS + 000000 F=0 ;FLAGS IN LH, SA IN RH + 000001 N=1 ;PROGRAM NAME POINTER + 000002 X=2 ;LOADER OFFSET + 000003 H=3 ;HIGHEST LOC LOADED + 000004 S=4 ;UNDEFINED POINTER + 000005 R=5 ;RELOCATION CONSTANT + 000006 B=6 ;SYMBOL TABLE POINTER + 000007 D=7 + 000010 T=10 + 000011 V=T+1 + 000012 W=12 ;VALUE + 000013 C=W+1 ;SYMBOL + 000014 E=C+1 ;DATA WORD COUNTER + 000015 Q=15 ;RELOCATION BITS + 000016 A=Q+1 ;SYMBOL SEARCH POINTER + 000017 P=17 ;PUSHDOWN POINTER + ;FLAGS F(0 - 17) + 000001 CSW==1 ;ON - COLON SEEN + 000002 ESW==2 ;ON - EXPLICIT EXTENSION IDENT. + 000004 SKIPSW==4 ;ON - DO NOT LOAD THIS PROGRAM + 000010 FSW==10 ;ON - SCAN FORCED TO COMPLETION + 000020 FCONSW==20 ;ON - FORCE CONSOLE OUTPUT + 000100 ASW==100 ;ON - LEFT ARROW ILLEGAL + 000200 FULLSW==200 ;ON - STORAGE EXCEEDED + 000400 SLIBSW==400 ;ON - LIB SEARCH IN THIS PROG + 001000 DSYMSW==1000 ;ON - LOAD WITH SYMBOLS FOR DDT + 002000 REWSW==2000 ;ON - REWIND AFTER INIT + 004000 LIBSW==4000 ;ON - LIBRARY SEARCH MODE + 010000 F4LIB==10000 ;ON - F4 LIBRARY SEARCH LOOKUP + 020000 ISW==20000 ;ON - DO NOT PERFORM INIT + 040000 SYMSW==40000 ;ON - LOAD LOCAL SYMBOLS + 100000 DSW==100000 ;ON - CHAR IN IDENTIFIER + 200000 NSW==200000 ;ON - SUPPRESS LIBRARY SEARCH + 400000 SSW==400000 ;ON - SWITCH MODE + ;FLAGS N(0 - 17) + 000001 ALLFLG==1 ;ON - LIST ALL GLOBALS + 000002 ISAFLG==2 ;ON - IGNORE STARTING ADDRESSES + 000004 COMFLG==4 ;ON - SIZE OF COMMON SET + IFE K,< F4SW==10 ;F4 IN PROGRESS + RCF==20 ;READ DATA COUNT + SYDAT==40 ;SYMBOL IN DATA> + 000100 SLASH==100 ;SLASH SEEN + IFE K,< BLKD1==200 ;ON- FIRST BLOCK DATA SEEN + PGM1==400 ;ON FIRST F4 PROG SEEN + DZER==1000 ;ON - ZERO SECOND DATA WORD> + 002000 EXEQSW==2000 ;IMMEDIATE EXECUTION + 004000 DDSW==4000 ;GO TO DDT + IFN RPGSW,<RPGF==10000 ;IN RPG MODE> + 020000 AUXSWI==20000 ;ON - AUX. DEVICE INITIALIZED + 040000 AUXSWE==40000 ;ON - AUX. DEVICE ENTERED + IFN PP,<PPSW==100000 ;ON - READING PROJ-PROG # + PPCSW==200000 ;ON - READING PROJ #> + 1KLOAD - LOADS MACROX PAGE 3 + DICK GRUEN: V25 3 AUG 68 + + 000137 LOC 137 + 000137 000000 000025 OCT 25 ;VERSION # + 000000' RELOC + MLON + SALL + + + + ;MONITOR LOCATIONS IN THE USER AREA + + 000140 JOBPRO==140 ;PROGRAM ORIGIN + 000134 JOBBLT==134 ;BLT ORIGIN + 000131 JOBCHN==131 ;RH = PROG BREAK OF FIRST BLOCK DATA + ;LH = PROG BREAK OF FIRST F4 PROG + + ;CALLI DEFINITIONS + + 000003 CDDTOUT==3 ;CALLI DDTOUT + 000012 CEXIT==12 ;CALLI EXIT + 000005 CDDTGT==5 ;CALLI DDTGT + 000002 CSETDDT==2 ;CALLI SETDDT + + ;LENGTH OF PUSHDOWN LIST FOR POLISH FIXUPS + + 000060 PPDL==60 + 1KLOAD - LOADS MACROX PAGE 4 + DICK GRUEN: V25 3 AUG 68 + + IFN RPGSW,< + RPGSET: CALLI 0 + INIT 17,1 ;SET UP DSK + SIXBIT /DSK/ + XWD 0,CTLIN + JRST NUTS + MOVE [SIXBIT /QQLOAD/] ;NAME OF COMMAND FILE + MOVEM CTLNAM + MOVSI (SIXBIT /RPG/) ;AND EXT + MOVEM CTLNAM+1 + SETZM CTLNAM+3 + LOOKUP 17,CTLNAM ;THERE? + JRST NUTS ;NO + INIT 16,16 ;GET SET TO DELETE QQLOAD.RPG + SIXBIT /DSK/ + 0 + JRST LD ;GIVE UP COMPLETELY + SETZM CTLNAM+3 + HLLZS CTLNAM+1 ;CLEAR OUT EXTRA JUNK + LOOKUP 16,CTLNAM + JRST LD + RENAME 16,ZEROS ;DELETE IT + JFCL ;IGNORE IF IT WILL NOT GO + RELEASE 16,0 ;GET RID OF THIS DEVICE + SETZM NONLOD ;THIS IS NOT A CONTINUATION + RPGS3: MOVEI CTLBUF + MOVEM JOBFF ;SET UP BUFFER + INBUF 17,1 + MOVEI [ASCIZ / + LOADING + /] ;PRINT MESSAGE THAT WE ARE STARTING + CALLI CDDTOUT + SKIPE NONLOD ;CONTINUATION? + JRST RPGS2 ;YES, SPECIAL SETUP + MOVSI R,F.I ;NOW SO WE CAN SET FLAG + BLT R,R + TLO N,RPGF + JRST CTLSET ;SET UP TTY + RPGS1: PUSHJ P,[TLNE F,ESW ;HERE FROM FOO* COMMAND, STORE NAME + JRST LDDT3 ;SAVE EXTENSION + TLZE F,CSW!DSW ;OR AS NAME + MOVEM W,DTIN + POPJ P,] + MOVEM 0,SVRPG# ;SAVE 0 JUST IN CASE + SETZM NONLOD# ;DETERMINE IF CONTINUATION + MOVEI 0,2(B) ;BY SEEING IF ANY SYMBOLS LOADED + CAME 0,JOBREL + SETOM NONLOD ;SET TO -1 AND SKIP CALLI + MOVE 0,ILD1 + MOVEM 0,RPG1 + INIT 17,1 + RPG1: 0 + XWD 0,CTLIN + 1KLOAD - LOADS MACROX PAGE 4-1 + DICK GRUEN: V25 3 AUG 68 + + JSP A,ILD5 + LOOKUP 17,DTIN ;THE FILE NAME + JRST ILD9 + JRST RPGS3 + + RPGS2: MOVSI 0,RPGF ;SET FLAG + IORM 0,F.C+N + TLO N,RPGF + MOVE 0,SVRPG + JRST LD2Q ;BACK TO INPUT SCANNING + > + 1KLOAD - LOADS MACROX PAGE 5 + DICK GRUEN: V25 3 AUG 68 + + + ;MONITOR LOADER CONTROL + + 000000' BEG: + LD: IFN RPGSW,<SKIPA ;NORMAL INITIALIZE + JRST RPGSET ;SPECIAL INIT> + 000000' 513000 000042 HLLZS 42 ;GET RID OF ERROR COUNT IF NOT IN RPG MODE + 000001' 047000 000000 CALLI 0 ;INITIALIZE THIS JOB + 000002' 205240 001701' NUTS: MOVSI R,F.I ;SET UP INITIAL ACCUMULATORS + 000003' 251240 000005 BLT R,R + 000004' 041140 000001 CTLSET: INIT 3,1 ;INITIALIZE CONSOLE + 000005' 646471 000000 SIXBIT /TTY/ + 000006' 001710' 001713' XWD BUFO,BUFI + 000007' 047000 000012 CALLEX: CALLI CEXIT ;DEVICE ERROR, FATAL TO JOB + 000010' 201600 001734' MOVEI E,TTY1 + 000011' 202600 000000* MOVEM E,JOBFF + 000012' 064140 000001 INBUF 3,1 + 000013' 065140 000001 OUTBUF 3,1 ;INITIALIZE OUTPUT BUFFERS + 000014' 067140 000000 OUTPUT 3, ;DO INITIAL REDUNDANT OUTPUT + 000015' 550300 000000* HRRZ B,JOBREL ;PICK UP CORE BOUND + 000016' 332000 000000* SKIPE JOBDDT ;DOES DDT EXIST? + 000017' 550300 000000* HRRZ B,JOBSYM ;USED BOTTOM OF SYMBOL TABLE INSTEAD + 000020' 274300 001623' SUB B,SE3 ;INITIALIZE SYMBOL TABLE POINTER + 000021' 303146 000001 CAILE H,1(B) ;TEST CORE ALLOCATION + 000022' 047000 000012 CALLI CEXIT ;INSUFFICIENT CORE, FATAL TO JOB + 000023' 204600 000002 MOVS E,X ;SET UP BLT POINTER + 000024' 541602 000001 HRRI E,1(X) + 000025' 402014 777777 SETZM -1(E) ;ZERO FIRST WORD + 000026' 251606 000000 BLT E,(B) ;ZERO CORE UP TO THE SYMBOL AREA + 000027' 550200 000006 HRRZ S,B ;INITIALIZE UNDEF. POINTER + 000030' 540040 000006 HRR N,B ;INITIALIZE PROGRAM NAME POINTER + 000031' 541240 000140 HRRI R,JOBPRO ;INITIALIZE THE LOAD ORIGIN + 000032' 200600 001626' MOVE E,COMM ;SET .COMM. AS THE FIRST PROGRAM + 000033' 202606 000001 MOVEM E,1(B) ;STORE IN SYMBOL TABLE + 000034' 552246 000002 HRRZM R,2(B) ;STORE COMMON ORIGIN + 000035' 201600 001672' MOVEI E,F.C ;INITIALIZE STATE OF THE LOADER + 000036' 251600 001700' BLT E,B.C + 000037' 402000 001631' SETZM MDG ;MULTIPLY DEFINED GLOBAL COUNT + 000040' 205500 254200 MOVSI W,254200 ;STORE HALT IN JOB41 + 000041' 202502 000000* MOVEM W,JOB41(X) ;... + IFN LDAC!BLTSYM,<MOVEI W,20 ;SET UP SPACE TO SAVE FOR ACS AND + MOVEM W,KORSP# ;USER DEFINITIONS WITH DDT> + + 1KLOAD - LOADS MACROX PAGE 6 + DICK GRUEN: V25 3 AUG 68 + + + IFN RPGSW,<JRST LD2Q> + LD2: IFN RPGSW,<MOVSI B,RPGF ;HERE ON ERRORS, TURN OFF RPG + ANDCAM B,F.C+N ;IN CORE> + ;LOADER SCAN FOR FILE NAMES + + 000042' 205300 001672' LD2Q: MOVSI B,F.C ;RESTORE ACCUMULATORS + 000043' 251300 000006 BLT B,B + 000044' 200740 001625' MOVE P,PDLPT ;INITIALIZE PUSHDOWN LIST + 000045' 402000 001715' SETZM BUFI2 ;CLEAR INPUT BUFFER POINTER + 000046' 402000 000522' IFE PP,< SETZM ILD1 ;CLEAR INPUT DEVICE NAME> + IFN PP,< MOVSI T,(SIXBIT /DSK/) ;ASSUME DSK + MOVEM T,ILD1 + SETZM OLDDEV# ;TO MAKE IT GO BACK AFTER /D FOR LIBSR> + 000047' 402000 001724' SETZM DTIN ;CLEAR INPUT FILE NAME + IFN PP,<SETZM PPN# ;CLEAR INPUT PROJ-PROG #> + + 000050' 071040 000000 LD2B: RELEAS 1, ;RELEASE BINARY INPUT DEVICE + IFN RPGSW,< TLNE N,RPGF ;NOT IF DOING RPG + JRST LD2BA> + 000051' 201400 000052 MOVEI T,"*" + 000052' 136400 001711' IDPB T,BUFO1 ;OUTPUT ASTERISK TO START INPUT + 000053' 067140 000000 OUTPUT 3, + 000054' 621000 022707 LD2BA: TLZ F,FULLSW+ASW+ISW+CSW+ESW+SKIPSW+SLIBSW+REWSW + 000055' 603000 004000 TLNE F,LIBSW ;WAS LIBRARY MODE ON? + 000056' 661000 000004 TLO F,SKIPSW ;YES, NORMAL MODE IS SKIPPING + + LD2D: IFN PP,<SETZM PPN ;DO NOT REMEMBER PPNS FOR NOW + LD2DB: SKIPE W,OLDDEV ;RESET DEVICE IF NEEDED + CAMN W,ILD1 ;IS IT SAME? + JRST LD2DA ;YES, FORGET IT + TLZ F,ISW+DSW+FSW+REWSW + MOVEM W,ILD1> + 000057' LD2DA: + IFN RPGSW,< SETZM DTIN1 ;CLEAR EXTENSION> + 000057' 201500 000000 MOVEI W,0 ;INITIALIZE IDENTIFIER SCAN + 000060' 201600 000006 MOVEI E,6 ;INITIALIZE CHARACTER COUNTER + 000061' 200440 001624' MOVE V,LSTPT ;INITIALIZE BYTE POINTER TO W + 000062' 621000 500010 TLZ F,SSW+DSW+FSW ;LEAVE SWITCH MODE + LD3: IFN RPGSW,<TLNE N,RPGF ;CHECK RPG FEATURE + JRST RPGRD> + 000063' 377000 001715' SOSG BUFI2 ;DECREMENT CHARACTER COUNT + 000064' 066140 000000 INPUT 3, ;FILL TTY BUFFER + 000065' 134400 001714' ILDB T,BUFI1 ;LOAD T WITH NEXT CHARACTER + 000066' 200640 000010 LD3AA: MOVE Q,T + 000067' 231640 000011 IDIVI Q,11 ;TRANSLATE TO 4 BIT CODE + 000070' 135656 000465' LDB Q,LD8(A) ;LOAD CLASSIFICATION CODE + 000071' 305640 000004 CAIGE Q,4 ;MODIFY CODE IF .GE. 4 + 000072' 607000 400000 TLNN F,SSW ;MODIFY CODE IF SWITCH MODE OFF + 000073' 271640 000004 ADDI Q,4 ;MODIFY CLASS. CODE FOR DISPATCH + 000074' 550715 000100' HRRZ A,LD3A(Q) ;LOAD RH DISPATCH ENTRY + 000075' 301640 000010 CAIL Q,10 ;SKIP IF CORRECT DISPATCH ENTRY + 000076' 554715 000070' HLRZ A,LD3A-10(Q) ;LOAD LH DISPATCH ENTRY + 1KLOAD - LOADS MACROX PAGE 6-1 + DICK GRUEN: V25 3 AUG 68 + + 000077' 254020 000016 JRST @A ;JUMP TO INDICATED LOCATION + + ;COMMAND DISPATCH TABLE + + 000100' 000063' 000446' LD3A: XWD LD3,LD7B ;IGNORED CHAR, BAD CHAR (SWITCH) + 000101' 000365' 000372' XWD LD6A,LD6 ;</> OR <(>, LETTER (SWITCH) + 000102' 000115' 000430' XWD LD5,LD6C ;<:>, DIGIT (SWITCH ARG.) + 000103' 000127' 000433' XWD LD5A,LD6D ;<.>, ESCAPE SWITCH MODE <)> + 000104' 000145' 000437' XWD LD5C,LD7 ;<=> OR <L. ARROW>, BAD CHAR. + 000105' 000134' 000110' XWD LD5B,LD4 ;<,>, ALPHABETIC CHAR. + 000106' 000201' 000110' XWD LD5D,LD4 ;<CR.>, NUMERIC CHAR. + 000107' 000205' 000437' XWD LD5E1,LD7 ;<ALT MODE>, BAD CHAR. <)> + + IFN RPGSW,<RPGRD: SOSG CTLIN+2 ;CHECK CHARACTER COUNT + JRST [IN 17,0 + JRST .+1 ;OK + STATO 17,740000 + JRST LD2 + JSP A,ERRPT + SIXBIT /ERROR WHILE READING COMMAND FILE%/ + JRST LD2] + IBP CTLIN+1 ;ADVANCE POINTER + MOVE T,@CTLIN+1 ;AND CHECK FOR LINE # + TRNE T,1 + JRST [MOVNI T,5 + ADDM T,CTLIN+2 + AOS CTLIN+1 + JRST RPGRD ];GO READ AGAIN + LDB T,CTLIN+1 ;GET CHR + JRST LD3AA ;PASS IT ON> + 1KLOAD - LOADS MACROX PAGE 7 + DICK GRUEN: V25 3 AUG 68 + + ;ALPHANUMERIC CHARACTER, NORMAL MODE + 000110' 361600 000063' LD4: SOJL E,LD3 ;JUMP IF NO SPACE FOR CHAR IN W + 000111' 275400 000040 SUBI T,40 ;CONVERT FROM ASCII TO SIXBIT + 000112' 136400 000011 IDPB T,V ;DEPOSIT CHAR OF IDENTIFIER IN W + 000113' 661000 100000 TLO F,DSW ;SET IDENTIFIER FLAG + 000114' 254000 000063' JRST LD3 ;RETURN FOR NEXT CHARACTER + + ;DEVICE IDENTIFIER DELIMITER <:> + + 000115' 261740 000012 LD5: PUSH P,W ;SAVE W + 000116' 663000 000001 TLOE F,CSW ;TEST AND SET COLON FLAG + 000117' 260740 000656' PUSHJ P,LDF ;FORCE LOADING + 000120' 262740 000012 POP P,W ;RESTORE W + 000121' 603000 000002 TLNE F,ESW ;TEST SYNTAX + 000122' 254000 000442' JRST LD7A ;ERROR, MISSING COMMA ASSUMED + 000123' 322500 000057' JUMPE W,LD2D ;JUMP IF NULL DEVICE IDENTIFIER + 000124' 202500 000522' MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER + IFN PP,<MOVEM W,OLDDEV ;WE HAVE A NEW ONE SO IGNORE OLD> + 000125' 621000 122010 TLZ F,ISW+DSW+FSW+REWSW ;CLEAR OLD DEVICE FLAGS + IFN PP,<SETZM PPN ;CLEAR OLD PP #> + 000126' 254000 000057' JRST LD2D ;RETURN FOR NEXT IDENTIFIER + + ;FILE NAME EXTENSION IDENTIFIER DELIMITER <.> + + 000127' 663000 000002 LD5A: TLOE F,ESW ;TEST AND SET EXTENSION FLAG + 000130' 254000 000442' JRST LD7A ;ERROR, TOO MANY PERIODS + 000131' 623000 100001 TLZE F,CSW+DSW ;SKIP IF NULL IDENT AND NO COLON + 000132' 202500 001724' MOVEM W,DTIN ;STORE FILE IDENTIFIER + 000133' 254000 000057' JRST LD2D ;RETURN FOR NEXT IDENTIFIER + + ;INPUT SPECIFICATION DELIMITER <,> + + 000134' LD5B: + IFN PP,<TLZE N,PPCSW ;READING PP #? + JRST [ + HRLM D,PPN ;STORE PROJ # + JRST LD6A1] ;GET PROG # + PUSHJ P,RBRA ;CHECK FOR MISSING RBRA> + 000134' 627000 000010 TLZN F,FSW ;SKIP IF PREV. FORCED LOADING + 000135' 260740 000655' PUSHJ P,FSCN2 ;LOAD (FSW NOT SET) + 000136' 254000 000057' JRST LD2D ;RETURN FOR NEXT IDENTIFIER + + 000137' 603000 000002 LD5B1: TLNE F,ESW ;TEST EXTENSION FLAG + 000140' 254000 000627' JRST LDDT3 ;EXPLICIT EXTENSION IDENTIFIER + 000141' 627000 100001 TLZN F,CSW+DSW ;SKIP IF IDENT. OR COLON + 000142' 263740 000000 POPJ P, + 000143' 202500 001724' MOVEM W,DTIN ;STORE FILE IDENTIFIER + 000144' 254000 000626' JRST LDDT2 ;ASSUME <.REL> IN DEFAULT CASE + 1KLOAD - LOADS MACROX PAGE 8 + DICK GRUEN: V25 3 AUG 68 + + ;OUTPUT SPECIFICATION DELIMITER <=> OR <LEFT ARROW> + ;OR PROJ-PROG # BRACKETS <[> AND <]> + 000145' LD5C: + IFN RPGSW,<CAIN T,"@" ;CHECK FOR * COMMAND + JRST RPGS1> + IFN PP,<CAIN T,"[" ;PROJ-PROG #? + JRST [TLO N,PPSW+PPCSW ;SET FLAGS + MOVEM W,PPNW# ;SAVE W + MOVEM E,PPNE# ;SAVE E + MOVEM V,PPNV# ;SAVE V + JRST LD6A1-1] ;READ NUMBERS AS SWITCHES + CAIN T,"]" ;END OF PP #? + JRST [PUSHJ P,RBRA ;PROCESS RIGHT BRACKET + JRST LD3 ];READ NEXT IDENT> + 000145' 663000 000100 TLOE F,ASW ;TEST AND SET LEFT ARROW FLAG + 000146' 254000 000442' JRST LD7A ;ERROR, MISPLACED LEFT ARROW + 000147' 260740 000137' PUSHJ P,LD5B1 ;STORE IDENTIFIER + 000150' 627000 000002 TLZN F,ESW ;TEST EXTENSION FLAG + 000151' 205500 554160 MOVSI W,554160 ;ASSUME <.MAP> IN DEFAULT CASE + 000152' 202500 001731' MOVEM W,DTOUT1 ;STORE FILE EXTENSION IDENTIFIER + 000153' 200500 001724' MOVE W,DTIN ;LOAD INPUT FILE IDENTIFIER + 000154' 202500 001730' MOVEM W,DTOUT ;USE AS OUTPUT FILE IDENTIFIER + IFN PP,<MOVE W,PPN ;PROJ-PROG # + MOVEM W,DTOUT+3 ;...> + 000155' 200500 000522' MOVE W,ILD1 ;LOAD INPUT DEVICE IDENTIFIER + 000156' 202500 000165' MOVEM W,LD5C1 ;USE AS OUTPUT DEVICE IDENTIFIER + IFN PP,< SKIPE W,OLDDEV ;RESTORE OLD + MOVEM W,ILD1> + ;INITIALIZE AUXILIARY OUTPUT DEVICE + 000157' 623040 060000 TLZE N,AUXSWI+AUXSWE ;FLUSH CURRENT DEVICE + 000160' 071100 000000 RELEASE 2, ;... + 000161' 040500 002420' CALL W,[SIXBIT ?DEVCHR?] ;IS DEVICE A TTY? + 000162' 603500 000010 TLNE W,10 ;... + 000163' 254000 000057' JRST LD2D ;YES, SKIP INIT + 000164' 041100 000001 INIT 2,1 ;INIT THE AUXILIARY DEVICE + 000165' 000000 000000 LD5C1: 0 ;AUXILIARY OUTPUT DEVICE NAME + 000166' 001716' 000000 XWD ABUF,0 ;BUFFER HEADER + 000167' 265700 000547' JSP A,ILD5 ;ERROR RETURN + 000170' 603000 002000 TLNE F,REWSW ;REWIND REQUESTED? + 000171' 040100 002421' CALL 2,[SIXBIT /UTPCLR/] ;DECTAPE REWIND + 000172' 623000 002000 TLZE F,REWSW ;SKIP IF NO REWIND REQUESTED + 000173' 072100 000001 MTAPE 2,1 ;REWIND THE AUX DEV + 000174' 201600 002211' MOVEI E,AUX ;SET BUFFER ORIGIN + 000175' 202600 000011* MOVEM E,JOBFF + 000176' 065100 000001 OUTBUF 2,1 ;INITIALIZE SINGLE BUFFER + 000177' 661040 020000 TLO N,AUXSWI ;SET INITIALIZED FLAG + 000200' 254000 000057' JRST LD2D ;RETURN TO CONTINUE SCAN + + 1KLOAD - LOADS MACROX PAGE 9 + DICK GRUEN: V25 3 AUG 68 + + + ;RIGHT SQUARE BRACKET (PROJ-PROG NUMBERS) + IFN PP,< + RBRA: TLZN N,PPSW ;READING PP #? + POPJ P, ;NOPE, RETURN + TLZE N,PPCSW ;COMMA SEEN? + JRST LD7A ;NOPE, INDICATE ERROR + HRRM D,PPN ;STASH PROG NUMBER + MOVE W,PPNW# ;PICKUP OLD IDENT + MOVE E,PPNE# ;RESTORE CHAR COUNT + MOVE V,PPNV# ;RESTORE BYTE PNTR + POPJ P, ;TRA 1,4 + + ;RIGHT JUSTIFY W + + RJUST: JUMPE W,LD7A ;NOTHING TO RIGHT JUSTIFY + TRNE W,77 ;IS W RJUSTED YET? + POPJ P, ;YES, TRA 1,4 + LSH W,-6 ;NOPE, TRY AGAIN + JRST .-3 ;...> + 1KLOAD - LOADS MACROX PAGE 10 + DICK GRUEN: V25 3 AUG 68 + + + ;LINE TERMINATION <CARRIAGE RETURN> + + 000201' LD5D: + IFN PP,<PUSHJ P,RBRA ;CHECK FOR UNTERMINATED PP #> + 000201' 260740 000634' PUSHJ P,FSCN ;FORCE SCAN TO COMPLETION + 000202' 254000 000050' JRST LD2B ;RETURN FOR NEXT LINE + + ;TERMINATE LOADING <ALT MODE> + + 000203' 332000 000007 LD5E: SKIPE D ;ENTER FROM G COMMAND + 000204' 540000 000007 HRR F,D ;USE NUMERIC STARTING ADDRESS + 000205' LD5E1: + 000205' 260740 001600' PUSHJ P,CRLF ;START A NEW LINE + 000206' 260740 000227' PUSHJ P,SASYM ;SETUP JOBSA,JOBFF,JOBSYM,JOBUSY + IFN LDAC!BLTSYM,<HRRZ A,R ;SET UP BLT OF ACS + ADDI A,(X) ;END + ADD A,KORSP ;ADD IN SPACE RESERVED + CAIL A,(S) + IFN EXPAND,<JRST [PUSHJ P,XPAND> + PUSHJ P,[ + IFE EXPAND,< JSP A,ERRPT + SIXBIT /MORE CORE NEEDED#/> + CALLI CEXIT] + IFN EXPAND,< JRST .-1]> + HRRM R,BOTACS# ;SAVE FOR LATER + HRRZ A,R ;SET BLT + ADD A,X + HRL A,X + MOVE Q,A + BLT A,17(Q)> + IFN BLTSYM,<HRRZ A,R ;PLACE TO BLT TO + ADD A,KORSP + MOVE W,A ;SAVE DEST + ADDI A,(X) ;AFTER ADJUSTMENT + MOVE Q,S ;UDEF PNTR + ADD Q,B ;TOTAL UNDEFS AND DEFS IN LEFT + HLROS Q ;NOW NEG IN RIGHT + MOVNS Q ;POSITIVE + ADDI Q,-1(A) ;END OF BLT + HRLI A,1(S) ;AND GET PLACE TO BLT FROM + SUBI W,1(S) ;PREST LOC OF SYMBOL TABLE + ADDM W,JOBSYM(X) + ADDM W,JOBUSY(X) ;ADJUST POINTERS + BLT A,(Q) ;MOVE IT + SKIPN JOBDDT(X) ;IS DDT THERE? + JRST NODDT + SUBI Q,-1(X) + HRRM Q,JOBFF(X) ;RESTET JOBFF IF DDT IS IN + HRLM Q,JOBSA(X) + NODDT:> + 000207' 200500 002422' MOVE W,[SIXBIT ?LOADER?] ;FINAL MESSAGE + 000210' 260740 000251' PUSHJ P,BLTSET ;SETUP FOR FINAL BLT + 1KLOAD - LOADS MACROX PAGE 10-1 + DICK GRUEN: V25 3 AUG 68 + + 000211' 071100 000000 RELEASE 2, ;RELEASE AUX. DEV. + IFN RPGSW,<RELEASE 17,0 ;RELEASE COMMAND DEVICE> + 000212' 200500 002423' LD5E5: MOVE W,[BLT Q,(A)] ;BLT OF ALL CODE + 000213' 202500 000134 MOVEM W,JOBBLT ;STASH IN JOB DATA AREA + 000214' 202502 000134 MOVEM W,JOBBLT(X) ;STASH IN RELOCATED JOBDATA AREA + 000215' 200500 000007' LD5E2: MOVE W,CALLEX ;EXIT AFTER BLT + 000216' 627040 002000 TLZN N,EXEQSW ;IMMEDIATE EXECUTION REQUESTED? + 000217' 254000 000225' JRST LD5E3 ;NOPE, LET USER TYPE START HIMSELF + 000220' 550502 000000* HRRZ W,JOBSA(X) ;PICKUP USUAL STARTING ADDRESS + 000221' 603040 004000 TLNE N,DDSW ;DDT EXECUTION? + 000222' 550502 000016* HRRZ W,JOBDDT(X) ;USE DDT SA INSTEAD + 000223' 322500 000215' JUMPE W,LD5E2 ;IF SA=0, DON'T EXECUTE + 000224' 505500 254000 HRLI W,(JRST) ;INSTRUCTION TO EXECUTE + 000225' LD5E3: + 000225' 202502 000135 IFE LDAC,<MOVEM W,JOBBLT+1(X) ;STASH FOR EXECUTION> + IFN LDAC,<MOVEM W,JOBBLT+2(X) ;STASH FOR EXECUTION + HRLZ 17,JOBFF(X) ;BUT FIRST BLT ACS + MOVE W,[BLT 17,17] ;... + MOVEM W,JOBBLT+1(X) ;...> + 000226' 254000 000134 JRST JOBBLT ;IF IT WERE DONE, 'TWERE BEST DONE QUICKLY + + + 1KLOAD - LOADS MACROX PAGE 11 + DICK GRUEN: V25 3 AUG 68 + + + ;SEARCH LIBRARY, PRINT UNDEFS, SETUP JOBSA,JOBFF,JOBSYM,JOBUSY + + 000227' 607000 200000 SASYM: TLNN F,NSW ;SKIP IF NO SEARCH FLAG ON + 000230' 260740 000557' PUSHJ P,LIBF ;SEARCH LIBRARY FILE + 000231' 260740 000634' PUSHJ P,FSCN ;FORCE SCAN TO COMPLETION + 000232' 260740 001332' PUSHJ P,PMS ;PRINT UNDEFINEDS + 000233' 552002 000220* HRRZM F,JOBSA(X) ;RH OF JOBSA :=STARTING ADDRESS + 000234' 550700 000003 SAS1: HRRZ A,H ;COMPUTE PROG BREAK + 000235' 275702 000000 SUBI A,(X) ;... + 000236' 305705 000000 CAIGE A,(R) ;BUT NO HIGHER THAN RELOC + 000237' 550700 000005 HRRZ A,R ;... + 000240' 506702 000233* HRLM A,JOBSA(X) ;LH OR JOBSA IS PROG BREAK + 000241' 552702 000175* HRRZM A,JOBFF(X) ;RH OF JOBFF CONTAINS PROG BREAK + 000242' 200700 000006 MOVE A,B ;SET JOBSYM W/ SYMBOL TABLE POINTER + 000243' 350000 000016 AOS A ;... + 000244' 202702 000017* MOVEM A,JOBSYM(X) ;... + 000245' 200700 000004 MOVE A,S ;SET JOBUSY W/ UNDEFINED SYMBOL POINTER + 000246' 350000 000016 AOS A ;... + 000247' 202702 000000* MOVEM A,JOBUSY(X) ;... + 000250' 263740 000000 POPJ P, ;RETURN + ;PRINT FINAL MESSAGE, SET UP BLT AC'S, SETDDT, RELEAS + + 000251' 260740 001577' BLTSET: PUSHJ P,FCRLF ;START FINAL MESSAGE + 000252' 260740 001454' PUSHJ P,PWORD ;PRINT W + 000253' 260740 001431' PUSHJ P,SPACE + 000254' 550640 000015* HRRZ Q,JOBREL ;PUBLISH HOW MUCH CORE USED + 000255' 242640 777766 LSH Q,-12 ;... + 000256' 271640 000001 ADDI Q,1 ;... + 000257' 260740 001420' PUSHJ P,RCNUM ;PUBLISH THE NUMBER + 000260' 200500 002424' MOVE W,[SIXBIT /K CORE/] ;PUBLISH THE UNITS + 000261' 260740 001454' PUSHJ P,PWORD ;... + 000262' 260740 001600' PUSHJ P,CRLF ;... + 000263' 205642 000020 MOVSI Q,20(X) ;HOW MUCH CODE TO BLT + 000264' 541640 000020 HRRI Q,20 ;... + 000265' 550700 000042 HRRZ A,42 ;CHECK ON ERRORS + 000266' 322700 000275' JUMPE A,NOEX ;NONE, GO AHEAD + 000267' 627040 002000 TLZN N,EXEQSW ;DID HE WANT TO START EXECUTION? + 000270' 254000 000275' JRST NOEX ;NO + 000271' 265700 001462' JSP A ,ERRPT ;PRINT AN ERROR MESSAGE + 000272' 457045 436564 SIXBIT /EXECUTION DELETED@/ + 000273' 515756 004445 + 000274' 544564 454440 + 000275' 550700 000254* NOEX: HRRZ A,JOBREL ;WHEN TO STOP BLT + 000276' 552702 000275* HRRZM A,JOBREL(X) ;SETUP FOR POSSIBLE IMMED. XEQ + 000277' 275702 000000 SUBI A,(X) ;... + 000300' 301704 000000 IFE BLTSYM,<CAIL A,(S) ;DON'T BLT OVER SYMBOL TABLE + 000301' 201704 000000 MOVEI A,(S) ;OR UNDEFINED TABLE> + 000302' 071040 000000 RELEAS 1, ;RELEASE DEVICES + 000303' 071140 000000 RELEAS 3, ;... + 000304' 200242 000222* MOVE R,JOBDDT(X) ;SET NEW DDT + 000305' 047240 000002 CALLI R,CSETDDT ;... + 000306' 263740 000000 POPJ P, ;RETURN + 1KLOAD - LOADS MACROX PAGE 11-1 + DICK GRUEN: V25 3 AUG 68 + + + 1KLOAD - LOADS MACROX PAGE 12 + DICK GRUEN: V25 3 AUG 68 + + + ;WRITE CHAIN FILES + + 000307' 334702 000131 CHNC: SKIPA A,JOBCHN(X) ;CHAIN FROM BREAK OF FIRST BLOCK DATA + 000310' 544702 000131 CHNR: HLR A,JOBCHN(X) ;CHAIN FROM BREAK OF FIRST F4 PROG + 000311' 553000 000016 HRRZS A ;ONLY RIGHT HALF IS SIGNIFICANT + 000312' 322700 000452' JUMPE A,LD7C ;DON'T CHAIN IF ZERO + 000313' 607040 020000 TLNN N,AUXSWI ;IS THERE AN AUX DEV? + 000314' 254000 000460' JRST LD7D ;NO, DON'T CHAIN + 000315' 261740 000016 PUSH P,A ;SAVE WHEREFROM TO CHAIN + 000316' 332000 000007 SKIPE D ;STARTING ADDR SPECIFIED? + 000317' 540000 000007 HRR F,D ;USE IT + 000320' 260740 000227' PUSHJ P,SASYM ;DO LIB SEARCH, SETUP JOBSA, ETC. + 000321' 262740 000016 POP P,A ;GET WHEREFROM + 000322' 210500 000276* MOVN W,JOBREL ;CALCULATE IOWD FOR DUMP + 000323' 271516 777773 ADDI W,-1-3-CHN5(A) ;... + 000324' 505516 777773 HRLI W,-4-CHN5(A) ;... + 000325' 206500 000363' MOVSM W,IOWDPP ;... + 000326' 271702 777773 ADDI A,-4-CHN5(X) ;ADD IN OFFSET + 000327' 261702 000244* IFN CHN5,<PUSH A,JOBSYM(X) ;SETUP FOUR WORD TABLE + 000330' 261702 000041* PUSH A,JOB41(X) ;...> + 000331' 261702 000304* PUSH A,JOBDDT(X) ;JOBDDT IN ALL CASES + IFE CHN5,<PUSH A,JOBSYM(X) ;JOBDDT, JOBSYM, JOBSA> + 000332' 261702 000240* PUSH A,JOBSA(X) ;JOBRYM ALWAYS LAST + 000333' 070100 000000 CLOSE 2, ;INSURE END OF MAP FILE + 000334' 060100 000017 SETSTS 2,17 ;SET AUX DEV TO DUMP MODE + 000335' 205500 435056 MOVSI W,435056 ;USE .CHN AS EXTENSION + 000336' 202500 001731' MOVEM W,DTOUT1 ;... + 000337' 260740 001375' PUSHJ P,IAD2 ;DO THE ENTER + 000340' 621040 060000 TLZ N,AUXSWI+AUXSWE ;INSURE NO PRINTED OUTPUT + 000341' 200500 002425' MOVE W,[SIXBIT ?CHAIN?] ;FINAL MESSAGE + 000342' 260740 000251' PUSHJ P,BLTSET ;SETUP BLT PNTR, SETDDT, RELEAS + 000343' 047000 000005 CALLI CDDTGT ;START DDT MODE OUTPUT + 000344' 205600 000350' MOVSI CHNBLT,CHAIN3 ;BLT CHAIN3 INTO ACS + 000345' 251600 000014 BLT CHNBLT,CHNBLT ;... + 000346' 201740 000010 MOVEI P,CHNERR ;POINTER TO ERR MESS + 000347' 254000 000000 JRST 0 ;GO DO CHAIN + + 1KLOAD - LOADS MACROX PAGE 13 + DICK GRUEN: V25 3 AUG 68 + + + ;THE AC SECTION OF CHAIN + + 000350' CHAIN3: + 000000 PHASE 0 + 000350' 251656 000000 BLT Q,(A) ;USUAL LDRBLT + 000351' 067100 000013 OUTPUT 2,IOWDP ;WRITE THE CHAIN FILE + 000352' 063100 760000 STATZ 2,IOBAD!IODEND ;CHECK FOR ERROR OR EOF + 000353' 254000 000006 JRST LOSEBIG ;FOUND SAME, GO GRIPE + 000354' 070100 000000 CLOSE 2, ;FINISH OUTPUT + 000355' 063100 760000 STATZ 2,IOBAD!IODEND ;CHECK FOR FINAL ERROR + 000356' 047000 000003 LOSEBI: CALLI CDDTOUT ;GRIPE ABOUT ERROR + 000357' 047000 000012 CALLI CEXIT ;EXIT + 000360' 422132 644606 CHNERR: ASCIZ ?DEVICE ERROR? ;ERROR MESSAGE + 000361' 425010 551244 + 000362' 476440 000000 + 000363' 000000 000000 IOWDP: Z ;STORE IOWD FOR DUMP HERE + 000014 CHNBLT: ;LAST WORD OF AC CHAIN (ZERO OF I/O POINTER) + 000364' DEPHASE + 000363' IOWDPP=.-1 ;MEMORY LOC OF AC IOWDP + 000364' 000000 000000 Z ;TERMINATOR OF DUMP MODE LIST + + 1KLOAD - LOADS MACROX PAGE 14 + DICK GRUEN: V25 3 AUG 68 + + ;EXPAND CORE + + IFN EXPAND,< + XPAND: PUSH P,H ;GET SOME REGISTERS TO USE + PUSH P,X + PUSH P,N + HRRZ X,JOBREL ;WHAT WE WANT + ADDI X,2000 + CALLI X,11 ;CORE ALLOCATOR CALLS THIS + JRST XPAND6 + IFE K,< HRRZ H,MLTP ;GET LOWEST LOCATION + TLNN N,F4SW ;IS FORTRAN LOADING> + HRRZ H,S ;NO, USE S + HRRZ X,JOBREL ;NOW MOVE + SUBI X,2000 + XPAND2: MOVE N,(X) + MOVEM N,2000(X) + CAMLE X,H ;TEST FOR END + SOJA X,XPAND2; HAND EYE SYSTEM MOVES TABLE + HRLI H,-2000 + SETZM (H) ;ZERO NEW CORE + AOBJN H,.-1 + MOVEI H,2000 + ADDM H,S + ADDM H,B + ADDM H,JOBSYM + POP P,N + ADDI N,2000 + IFE K,< TLNN N,F4SW ;F4? + JRST XPAND3 + ADDM H,PLTP + ADDM H,BITP + ADDM H,SDSTP + ADDM H,MLTP + TLNE N,SYDAT + ADDM H,V> + XPAND3: + POP P,X + POP P,H + AOS (P) + POPJ P, + XPAND6: JUMPE X,XPAND4 + JSP A,ERRPT + SIXBIT /CORE AVAILABLE, BUT NOT TO YOU#/ + XPAND4: JSP A,ERRPT + SIXBIT /MORE CORE NEEDED#/ + XPAND5: POP P,N + POP P,X + POP P,H + POPJ P, + + XPAND7: PUSHJ P,XPAND + JRST SFULLC + 1KLOAD - LOADS MACROX PAGE 14-1 + DICK GRUEN: V25 3 AUG 68 + + JRST POPJM2 + + POPJM3: SOS (P) ;POPJ TO CALL-2 + POPJM2: SOS (P) ;POPJ TO CALL-1 + SOS (P) ;SAME AS POPJ TO + POPJ P, ;NORMAL POPJ MINUS TWO + > + 1KLOAD - LOADS MACROX PAGE 15 + DICK GRUEN: V25 3 AUG 68 + + + + ;ENTER SWITCH MODE + + 000365' 306400 000057 LD6A: CAIN T,57 ;WAS CHAR A SLASH? + 000366' 661040 000100 TLO N,SLASH ;REMEBER THAT + 000367' 661000 400000 TLO F,SSW ;ENTER SWITCH MODE + 000370' 201340 000000 LD6A1: MOVEI D,0 ;ZERO THE NUBER REGISTER + 000371' 254000 000063' JRST LD3 ;EAT A SWITCH + + ;ALPHABETIC CHARACTER, SWITCH MODE + + 000372' 256010 000275' LD6: XCT LD6B-101(T) ;EXECUTE SWITCH FUNCTION + 000373' 623040 000100 TLZE N,SLASH ;SWITCH MODE ENTERED W/ SLASH? + 000374' 254000 000433' JRST LD6D ;LEAVE SWITCH MODE + 000375' 254000 000370' JRST LD6A1 ;STAY IN SWITCH MODE + + ;DISPATCH TABLE FOR SWITCHES + + ; THE INSTRUCTION AT THE CHARACTER LOCATION IS EXECUTED + + 000376' 661040 000001 LD6B: TLO N,ALLFLG ;A - LIST ALL GLOBALS + 000377' 254000 000446' JRST LD7B ;B - ERROR + 000400' 260740 000307' PUSHJ P,CHNC ;C - CHAIN, START W/ COMMON + 000401' 260740 000614' PUSHJ P,LDDT ;D - DEBUG OPTION, LOAD DDT + 000402' 661040 002000 TLO N,EXEQSW ;E - LOAD AND GO + 000403' 260740 000557' PUSHJ P,LIBF ;F - LIBRARY SEARCH + 000404' 260740 000203' PUSHJ P,LD5E ;G - GO INTO EXECUTION + 000405' 260740 000607' PUSHJ P,LRAIDX ;H - LOAD AN START RAID + 000406' 661040 000002 TLO N,ISAFLG ;I - IGNORE STARTING ADDRESSES + 000407' 621040 000002 TLZ N,ISAFLG ;J - USE STARTING ADDRESSES + 000410' 254000 000446' IFE BLTSYM,<JRST LD7B ;K - ERROR> + IFN BLTSYM,<PUSHJ P,KORADJ ;K - RESERVE SPACE FOR SYM DEFS> + 000411' 661000 004004 TLO F,LIBSW+SKIPSW ;L - ENTER LIBRARY SEARCH + 000412' 260740 001261' PUSHJ P,PRMAP ;M - PRINT STORAGE MAP + 000413' 621000 004004 TLZ F,LIBSW+SKIPSW ;N - LEAVE LIBRARY SEARCH + 000414' 540240 000007 HRR R,D ;O - NEW PROGRAM ORIGIN + 000415' 661000 200000 TLO F,NSW ;P - PREVENT AUTO. LIB. SEARCH + 000416' 621000 200000 TLZ F,NSW ;Q - ALLOW AUTO. LIB. SEARCH + 000417' 260740 000310' PUSHJ P,CHNR ;R - CHAIN, START W/ RESIDENT + 000420' 661000 040000 TLO F,SYMSW ;S - LOAD WITH SYMBOLS + 000421' 260740 000613' PUSHJ P,LDDTX ;T - LOAD AND GO TO DDT + 000422' 260740 001332' PUSHJ P,PMS ;U - PRINT UNDEFINED LIST + 000423' 260740 000610' PUSHJ P,LRAID ;V - LOAD RAID + 000424' 621000 041000 TLZ F,SYMSW+DSYMSW ;W - LOAD WITHOUT SYMBOLS + 000425' 621040 000001 TLZ N,ALLFLG ;X - DO NOT LIST ALL GLOBALS + 000426' 661000 002000 TLO F,REWSW ;Y - REWIND BEFORE USE + 000427' 254000 000000' JRST LD ;Z - RESTART LOADER + + 1KLOAD - LOADS MACROX PAGE 16 + DICK GRUEN: V25 3 AUG 68 + + + ;SWITCH MODE NUMERIC ARGUMENT + + 000430' 242340 000003 LD6C: LSH D,3 ;BUILD OCTAL NUMERIC ARGUMENT + 000431' 271350 777720 ADDI D,-60(T) + 000432' 254000 000063' JRST LD3 + + ;EXIT FROM SWITCH MODE + + 000433' 621000 400000 LD6D: TLZ F,SSW ;CLEAR SWITCH MODE FLAG + 000434' 603000 000010 TLNE F,FSW ;TEST FORCED SCAN FLAG + 000435' 254000 000057' JRST LD2D ;SCAN FORCED, START NEW IDENT. + 000436' 254000 000063' JRST LD3 ;SCAN NOT FORCED, USE PREV IDENT + ;ILLEGAL CHARACTER, NORMAL MODE + + 000437' 265700 001526' LD7: JSP A,ERRPT8 + 000440' 435041 621605 SIXBIT /CHAR.%/ + 000441' 254000 000042' JRST LD2 + + ;SYNTAX ERROR, NORMAL MODE + + 000442' 265700 001526' LD7A: JSP A,ERRPT8 + 000443' 637156 644170 SIXBIT /SYNTAX%/ + 000444' 050000 000000 + 000445' 254000 000042' JRST LD2 + + ;ILLEGAL CHARACTER, SWITCH MODE + + 000446' 265700 001526' LD7B: JSP A,ERRPT8 + 000447' 636751 644350 SIXBIT /SWITCH%/ + 000450' 050000 000000 + 000451' 254000 000042' JRST LD2 + + ;ATTEMPT TO CHAIN WITH SPECIFIED HALF OF JOBCHN = 0 + + 000452' 265700 001462' LD7C: JSP A,ERRPT ;GRIPE + 000453' 655643 504151 SIXBIT ?UNCHAINABLE AS LOADED@? + 000454' 564142 544500 + 000455' 416300 545741 + 000456' 444544 400000 + 000457' 254000 000042' JRST LD2 + + ;ATTEMP TO CHAIN WITHOUT SPECIFYING DEVICE + + 000460' 265700 001462' LD7D: JSP A,ERRPT ;GRIPE + 000461' 565700 435041 SIXBIT ?NO CHAIN DEVICE@? + 000462' 515600 444566 + 000463' 514345 400000 + 000464' 254000 000042' JRST LD2 + + IFN BLTSYM,<KORADJ: CAMLE D,KORSP ;IF SMALLER IGNORE + MOVEM D,KORSP + POPJ P,> + 1KLOAD - LOADS MACROX PAGE 17 + DICK GRUEN: V25 3 AUG 68 + + + ;CHARACTER CLASSIFICATION TABLE DESCRIPTION: + + ; EACH CHARACTER HAS ASSOCIATED WITH IT A FOUR BIT BYTE + ; PACKED IN THE CHARACTER CLASSIFICATION TABLE. THE CHARACTER + ; CLASSIFICATION CODES ARE ORDERED IN SUCH A WAY AS TO GIVE + ; DELIMITERS OF HIGHER PRECEDENCE LOWER CLASSIFICATION NUMBERS. + ; CERTAIN CHARACTERS HAVE NO EFFECT ON THE COMMAND STRING, AND + ; THEREFORE DO NOT EFFECT ORDERING OF DELIMITERS. FOUR CODES + ; ARE RESERVED FOR ALTERNATE DISPATCHES WHILE THE SWITCH MODE IS + ; IN EFFECT. + + + ;CLASSIFICATION BYTE CODES: + + ; BYTE DISP CLASSIFICATION + + ; 00 - 00 ILLEGAL CHARACTER, SWITCH MODE + ; 01 - 01 ALPHABETIC CHARACTER, SWITCH MODE + ; 02 - 02 NUMERIC CHARACTER, SWITCH MODE + ; 03 - 03 SWITCH MODE ESCAPE, SWITCH MODE + + ; 00 - 04 ILLEGAL CHARACTER, NORMAL MODE + ; 01 - 05 ALPHABETIC CHARACTER, NORMAL MODE + ; 02 - 06 NUMERIC CHARACTER, NORMAL MODE + ; 03 - 07 SWITCH MODE ESCAPE, NORMAL MODE + + ; 04 - 10 IGNORED CHARACTER + ; 05 - 11 ENTER SWITCH MODE CHARACTER + ; 06 - 12 DEVICE IDENTIFIER DELIMITER + ; 07 - 13 FILE EXTENSION DELIMITER + ; 10 - 14 OUTPUT SPECIFICATION DELIMITER + ; 11 - 15 INPUT SPECIFICATION DELIMITER + ; 12 - 16 LINE TERMINATION + ; 13 - 17 JOB TERMINATION + + 1KLOAD - LOADS MACROX PAGE 18 + DICK GRUEN: V25 3 AUG 68 + + + ;BYTE POINTERS TO CHARACTER CLASSIFICATION TABLE + + 000465' 400415 000476' LD8: POINT 4,LD9(Q),3 + 000466' 340415 000476' POINT 4,LD9(Q),7 + 000467' 300415 000476' POINT 4,LD9(Q),11 + 000470' 240415 000476' POINT 4,LD9(Q),15 + 000471' 200415 000476' POINT 4,LD9(Q),19 + 000472' 140415 000476' POINT 4,LD9(Q),23 + 000473' 100415 000476' POINT 4,LD9(Q),27 + 000474' 040415 000476' POINT 4,LD9(Q),31 + 000475' 000415 000476' POINT 4,LD9(Q),35 + + ;CHARACTER CLASSIFIACTION TABLE + + 000476' 200000 000000 LD9: BYTE (4)4,0,0,0,0,0,0,0,0 + 000477' 210422 400000 BYTE (4)4,4,4,4,12,0,0,0,0 + 000500' 000000 000000 BYTE (4)0,0,0,0,0,0,0,0,0 + 000501' 540000 040100 BYTE (4)13,0,0,0,0,4,0,4,0 + 000502' 000001 230011 BYTE (4)0,0,0,0,5,3,0,0,11 + 000503' 016510 421042 BYTE (4)0,7,5,2,2,2,2,2,2 + 000504' 104211 400200 BYTE (4)2,2,2,2,6,0,0,10,0 + 000505' 000104 210421 IFE RPGSW,< BYTE (4)0,0,1,1,1,1,1,1,1> + IFN RPGSW,< BYTE (4) 0,10,1,1,1,1,1,1,1> + 000506' 042104 210421 BYTE (4)1,1,1,1,1,1,1,1,1 + 000507' 042104 210421 BYTE (4)1,1,1,1,1,1,1,1,1 + 000510' 040000 100000 IFE PP,<BYTE (4)1,0,0,0,0,10,0,0,0> + IFN PP,<BYTE (4)1,10,0,10,0,10,0,0,0> + 000511' 000000 000000 BYTE (4)0,0,0,0,0,0,0,0,0 + 000512' 000000 000000 BYTE (4)0,0,0,0,0,0,0,0,0 + 000513' 000000 000013 BYTE (4)0,0,0,0,0,0,0,0,13 + 000514' 550000 000000 BYTE (4)13,4 + + 1KLOAD - LOADS MACROX PAGE 19 + DICK GRUEN: V25 3 AUG 68 + + + ;INITIALIZE LOADING OF A FILE + + 000515' 201500 002006' ILD: MOVEI W,BUF1 ;LOAD BUFFER ORIGIN + 000516' 202500 000241* MOVEM W,JOBFF + 000517' 663000 020000 TLOE F,ISW ;SKIP IF INIT REQUIRED + 000520' 254000 000525' JRST ILD6 ;DONT DO INIT + 000521' 041040 000014 INIT 1,14 + 000522' 000000 000000 ILD1: 0 ;LOADER INPUT DEVICE + 000523' 000000 001721' XWD 0,BUFR + 000524' 265700 000547' JSP A,ILD5 ;ERROR RETURN + 000525' 623000 002000 ILD6: TLZE F,REWSW ;SKIP IF NO REWIND + 000526' 072040 000001 MTAPE 1,1 ;REWIND + 000527' 076040 001724' ILD2: LOOKUP 1,DTIN ;LOOK UP FILE FROM DIRECTORY + 000530' 254000 000535' JRST ILD3 ;FILE NOT IN DIRECTORY + IFE K,< INBUF 1,2 ;SET UP BUFFERS> + 000531' 064040 000001 IFN K,< INBUF 1,1 ;SET UP BUFFER> + 000532' 661000 000100 TLO F,ASW ;SET LEFT ARROW ILLEGAL FLAG + 000533' 621000 010002 TLZ F,ESW+F4LIB ;CLEAR EXTENSION FLAG + 000534' 263740 000000 POPJ P, + + ; LOOKUP FAILURE + + 000535' 663000 000002 ILD3: TLOE F,ESW ;SKIP IF .REL WAS ASSUMED + 000536' 254000 000541' JRST ILD4 ;FATAL LOOKUP FAILURE + 000537' 402000 001725' SETZM DTIN1 ;ZERO FILE EXTENSION + 000540' 254000 000527' JRST ILD2 ;TRY AGAIN WITH NULL EXTENSION + + 000541' 623000 010000 ILD4: TLZE F,F4LIB ;WAS THIS A TRY FOR F40 LIBRARY? + JRST [MOVE W,[SIXBIT /LIB4/]; YES, TRY LIB4 + MOVEM W,DTIN ;... + PUSHJ P,LDDT2 ;USE .REL EXTENSION + TLZ F,ESW ;... + 000542' 254000 002427' JRST ILD2 ];GO TRY AGAIN + 000543' 265700 001462' ILD9: JSP A,ERRPT + 000544' 434156 565764 SIXBIT /CANNOT FIND#/ + 000545' 004651 564403 + 000546' 254000 000042' JRST LD2 + + ; DEVICE SELECTION ERROR + + 000547' 200516 777775 ILD5: MOVE W,-3(A) ;LOAD DEVICE NAME FROM INIT + 000550' 661000 000020 TLO F,FCONSW ;INSURE TTY OUTPUT + 000551' 260740 001553' PUSHJ P,PRQ ;START W/ ? + 000552' 260740 001454' PUSHJ P,PWORD ;PRINT DEVICE NAME + 000553' 265700 001541' JSP A,ERRPT7 + 000554' 655641 664151 SIXBIT /UNAVAILABLE@/ + 000555' 544142 544540 + 000556' 254000 000042' JRST LD2 + 1KLOAD - LOADS MACROX PAGE 20 + DICK GRUEN: V25 3 AUG 68 + + + ;LIBRARY SEARCH CONTROL AND LOADER CONTROL + + ;LIBF ENABLES A LIBRARY SEARCH OF <SYS:LIB4.REL> + + 000557' 260740 000652' LIBF: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + 000560' 260740 000564' PUSHJ P,LIBF1 ;LOAD SYS:JOBDAT.REL + 000561' 661000 010000 TLO F,F4LIB ;INDICATE FORTRAN LIBRARY SEARCH + 000562' 200500 002434' MOVE W,[SIXBIT /LIB40/] ;FIRST TRY AT NAME + 000563' 260740 000565' PUSHJ P,LIBF2 ;LOAD SYS:LIB40.REL + 000564' 200500 002435' LIBF1: MOVE W,[SIXBIT /JOBDAT/] ;LOAD SYS:JOBDAT.REL + 000565' 260740 000622' LIBF2: PUSHJ P,LDDT1 + 000566' 325200 000633' JUMPGE S,EOF2 ;JUMP IF NO UNDEFINED GLOBALS + 000567' 661000 000404 TLO F,SLIBSW+SKIPSW ;ENABLE LIBRARY SEARCH + 000570' 621000 041000 TLZ F,SYMSW+DSYMSW ;DISABLE LOADING WITH SYMBOLS + 000571' 254000 000656' JRST LDF ;INITIALIZE LOADING LIB4 + + ; LIB CONTROLS THE LIBRARY SEARCH OF ONE FILE + + 000572' 325200 000632' LIB: JUMPGE S,EOF1 ;JUMP IF NO UNDEFINED GLOBALS + 000573' 661000 000004 TLO F,SKIPSW ;SET SKIPSW TO IGNORE MODE + 000574' 254000 000657' JRST LOAD ;CONTINUE LIB. SEARCH + + 000575' 302700 000004 LIB1: CAIE A,4 ;TEST FOR ENTRY BLOCK + 000576' 254000 000605' JRST LIB3 ;NOT AN ENTRY BLOCK, IGNORE IT + 000577' 260740 001243' LIB2: PUSHJ P,RWORD ;READ ONE DATA WORD + 000600' 200540 000012 MOVE C,W + 000601' 661540 040000 TLO C,040000 ;SET CODE BITS FOR SEARCH + 000602' 260740 001224' PUSHJ P,SREQ + 000603' 625000 000004 TLZA F,SKIPSW ;REQUEST MATCHES ENTRY, LOAD + 000604' 254000 000577' JRST LIB2 ;NOT FOUND + 000605' 260740 001243' LIB3: PUSHJ P,RWORD ;READ AND IGNORE ONE DATA WORD + 000606' 254000 000605' JRST LIB3 ;LOOP TO IGNORE INPUT + + ;LDDT LOADS <SYS:DDT.REL> AND SETS DSYMSW + + 000607' 661040 006000 LRAIDX: TLO N,DDSW!EXEQSW ;H - LOAD AND START RAID + 000610' 260740 000652' LRAID: PUSHJ P,FSCN1 ;FORCE END OF SCAN + 000611' 200500 002436' MOVE W,[SIXBIT /RAID/] + 000612' 254000 000616' JRST LDDT0 + 000613' 661040 006000 LDDTX: TLO N,DDSW+EXEQSW ;T - LOAD AND GO TO DDT + 000614' 260740 000652' LDDT: PUSHJ P,FSCN1 ;FORCE SCAN TO COMPLETION + 000615' 205500 444464 MOVSI W,444464 ;FILE IDENTIFIER <DDT> + 000616' 260740 000622' LDDT0: PUSHJ P,LDDT1 + 000617' 260740 000656' PUSHJ P,LDF ;LOAD <SYS:DDT.REL> + 000620' 661000 001000 TLO F,DSYMSW ;ENABLE LOADING WITH SYMBOLS + 000621' 263740 000000 POPJ P, + + 000622' 202500 001724' LDDT1: MOVEM W,DTIN ;STORE FILE IDENTIFIER + IFN PP,<MOVE W,ILD1 ;SAVE OLD DEV + MOVEM W,OLDDEV> + 000623' 205500 637163 MOVSI W,637163 ;DEVICE IDENTIFIER <SYS> + 000624' 202500 000522' MOVEM W,ILD1 ;STORE DEVICE IDENTIFIER + 1KLOAD - LOADS MACROX PAGE 20-1 + DICK GRUEN: V25 3 AUG 68 + + 000625' 621000 026004 TLZ F,ISW+LIBSW+SKIPSW+REWSW ;CLEAR OLD FLAGS + 000626' 205500 624554 LDDT2: MOVSI W,624554 ;EXTENSION IDENTIFIER <.REL> + 000627' 202500 001725' LDDT3: MOVEM W,DTIN1 ;STORE EXTENSION IDENTIFIER + IFN PP,<MOVE W,PPN ;GET PROJ-PROG # + MOVEM W,DTIN+3> + 000630' 263740 000000 POPJ P, + 1KLOAD - LOADS MACROX PAGE 21 + DICK GRUEN: V25 3 AUG 68 + + ;EOF TERMINATES LOADING OF A FILE + + 000631' 200740 001627' EOF: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER + 000632' 621000 000404 EOF1: TLZ F,SLIBSW+SKIPSW ;CLEAR ONE FILE LIB. SEARCH FLAG + 000633' 263740 000000 EOF2: POPJ P, + + ; FORCE SCAN TO COMPLETION, LOAD IF NECESSARY + + 000634' 260740 000652' FSCN: PUSHJ P,FSCN1 ;FORCED LOAD BEFORE TEST + 000635' 607000 000200 TLNN F,FULLSW ;TEST FOR OVERLAP + 000636' 263740 000000 POPJ P, ;NO OVERLAP, RETURN + 000637' 200500 000003 MOVE W,H ;FETCH CORE SIZE REQUIRED + 000640' 275504 000001 SUBI W,1(S) ; COMPUT DEFICIENCY + 000641' 321500 000633' JUMPL W,EOF2 ;JUMP IF NO OVERLAP + 000642' 661000 000020 TLO F,FCONSW ;INSURE TTY OUTPUT + 000643' 260740 001553' PUSHJ P,PRQ ;START WITH ? + 000644' 260740 001410' PUSHJ P,PRNUM0 ;INFORM USER + 000645' 265700 001541' JSP A,ERRPT7 + 000646' 675762 446300 SIXBIT /WORDS OF OVERLAP#/ + 000647' 574600 576645 + 000650' 625441 600300 + 000651' 254000 000042' JRST LD2 ;ERROR RETURN + + 000652' 667000 000010 FSCN1: TLON F,FSW ;SKIP IF NOT FIRST CALL TO FSCN + 000653' 607000 100003 TLNN F,CSW+DSW+ESW ;TEST SCAN FOR COMPLETION + 000654' 263740 000000 POPJ P, + 000655' 260740 000137' FSCN2: PUSHJ P,LD5B1 ;STORE FILE OR EXTENSION IDENT. + + ; LOADER CONTROL, NORMAL MODE + + 000656' 260740 000515' LDF: PUSHJ P,ILD ;INITIALIZE LOADING + + 1KLOAD - LOADS MACROX PAGE 22 + DICK GRUEN: V25 3 AUG 68 + + ;LOAD SUBROUTINE + + 000657' 202740 001627' LOAD: MOVEM P,PDSAV ;SAVE PUSHDOWN POINTER + 000660' 200740 001627' LOAD1: MOVE P,PDSAV ;RESTORE PUSHDOWN POINTER + 000661' 260740 001560' LOAD1A: PUSHJ P,WORD ;INPUT BLOCK HEADER WORD + 000662' 211612 400000 MOVNI E,400000(W) ;WORD COUNT - FROM RH OF HEADER + 000663' 554700 000012 HLRZ A,W ;BLOCK TYPE - FROM LH OF HEADER + 000664' 303700 000013 CAILE A,DISPL*2+1 ;TEST BLOCK TYPE NUMBER + 000665' 254000 000704' JRST LOAD4 ;ERROR, ILLEGAL BLOCK TYPE + 000666' 603000 000004 TLNE F,SKIPSW ;BLOCK OK - TEST LOAD STATUS + 000667' 254000 000575' JRST LIB1 ;RETURN TO LIB. SEARCH CONTROL + 000670' 550416 000676' HRRZ T,LOAD2(A) ;LOAD RH DISPATCH ENTRY + 000671' 303700 000005 CAILE A,DISPL ;SKIP IF CORRECT + 000672' 554416 000670' HLRZ T,LOAD2-DISPL-1(A) ;LOAD LH DISPATCH ENTRY + 000673' 603000 000200 TLNE F,FULLSW ;TEST CORE OVERLAP INDICATOR + 000674' 367700 001143' SOJG A,HIGH0 ;IGNORE BLOCK IF NOT TYPE 1 + 000675' 254020 000010 JRST @T ;DISPATCH TO BLOCK SUBROUTINE + + ;DISPATCH TABLE - BLOCK TYPES + + 000676' 001162' 000661' LOAD2: XWD NAME,LOAD1A + 000677' 001157' 000710' XWD START,PROG + 000700' 001211' 000725' XWD LOCD,SYM + 000701' 000704' 000704' XWD LOAD4A,LOAD4A + 000702' 000704' 000605' XWD LOAD4A,LIB3 + 000703' 000704' 001145' LOAD3: XWD LOAD4A,HIGH + + 000005 DISPL=LOAD3-LOAD2 + + ;ERROR EXIT FOR BAD HEADER WORDS + + LOAD4: IFE K,< + CAIN A,400 ;FORTRAN FOUR BLOCK + JRST F4LD> + 000704' 265700 001462' LOAD4A: JSP A,ERRPT ;INCORRECT HEADER WORD + 000705' 515454 160046 SIXBIT /ILL. FORMAT#/ + 000706' 576255 416403 + 000707' 254000 000042' JRST LD2 + + 1KLOAD - LOADS MACROX PAGE 23 + DICK GRUEN: V25 3 AUG 68 + + ;LOAD PROGRAMS AND DATA (BLOCK TYPE 1) + + 000710' 550440 000012 PROG: HRRZ V,W ;LOAD BLOCK LENGTH + 000711' 260740 001243' PUSHJ P,RWORD ;READ BLOCK ORIGIN + 000712' 270440 000012 ADD V,W ;COMPUTE NEW PROG. BREAK + 000713' 307160 000002 CAIG H,@X ;COMPARE WITH PREV. PROG. BREAK + 000714' 201160 000002 MOVEI H,@X ;UPDATE PROGRAM BREAK + 000715' 603000 000200 TLNE F,FULLSW + 000716' 254000 001141' JRST FULLC ;NO ERROR MESSAGE + 000717' 303144 000001 CAILE H,1(S) ; SKIP IF SUFFICIENT CORE AVAILABLE + IFN EXPAND,< JRST [PUSHJ P,XPAND> + 000720' 254000 001141' JRST FULLC + IFN EXPAND,< JRST .-1]> + 000721' 200440 000012 MOVE V,W + 000722' 260740 001243' PROG1: PUSHJ P,RWORD ;READ DATA WORD + 000723' 202520 000002 MOVEM W,@X ;STORE DATA WORD IN PROG. AT LLC + 000724' 344440 000722' AOJA V,PROG1 ;ADD ONE TO LOADER LOC. COUNTER + + ;LOAD SYMBOLS (BLOCK TYPE 2) + + 000725' 260740 001235' SYM: PUSHJ P,PRWORD ;READ TWO DATA WORDS + 000726' 260740 000730' PUSHJ P,SYMPT; PUT INTO TABLE + 000727' 254000 000725' JRST SYM + + ; WFW SYMPT: JUMPL C,SYM3; JUMP IF GLOBAL REQUEST + 000730' 603540 200000 SYMPT: TLNE C,200000 ;GLOBAL REQUEST? WFW + 000731' 321540 001006' JUMPL C,SYM3 ;CHECK FOR 60 NOT JUST HIGH BIT WFW + 000732' 603540 100000 TLNE C,100000 + 000733' 254000 000755' JRST SYM1A ;LOCAL SYMBOL + 000734' 260740 001224' PUSHJ P,SREQ ;GLOBAL DEF., SEARCH FOR REQUEST + 000735' 254000 000770' JRST SYM2 ;REQUEST MATCHES + 000736' 260740 001226' PUSHJ P,SDEF ;SEARCH FOR MULTIPLE DEFINITIONS + 000737' 254000 000741' JRST SYM1 ;MULTIPLY DEFINED GLOBAL + 000740' 254000 000757' JRST SYM1B + + ; PROCESS MULTIPLY DEFINED GLOBAL + + 000741' 316516 000002 SYM1: CAMN W,2(A) ;COMPARE NEW AND OLD VALUE + 000742' 263740 000000 POPJ P,; + 000743' 350000 001631' AOS MDG ;COUNT MULTIPLY DEFINED GLOBALS + 000744' 260740 001553' PUSHJ P,PRQ ;START W/ ? + 000745' 260740 001406' PUSHJ P,PRNAM ;PRINT SYMBOL AND VALUE + 000746' 200516 000002 MOVE W,2(A) ;LOAD OLD VALUE + 000747' 260740 001407' PUSHJ P,PRNUM ;PRINT OLD VALUE + 000750' 265700 001541' JSP A,ERRPT7 ;PRINT MESSAGE + 000751' 556554 160044 SIXBIT /MUL. DEF. GLOBAL#/ + 000752' 454616 004754 + 000753' 574241 540300 + 000754' 263740 000000 POPJ P,; IGNORE MUL. DEF. GLOBAL SYM + + 1KLOAD - LOADS MACROX PAGE 24 + DICK GRUEN: V25 3 AUG 68 + + ; LOCAL SYMBOL + + 000755' 607000 041000 SYM1A: TLNN F,SYMSW+DSYMSW ;SKIP IF LOAD LOCALS SWITCH ON + 000756' 263740 000000 POPJ P,; IGNORE LOCAL SYMBOLS + 000757' 301144 000000 SYM1B: CAIL H,(S) ;STORE DEFINED SYMBOL + IFN EXPAND,< PUSHJ P,XPAND7> + 000760' 254000 001132' IFE EXPAND,< JRST SFULLC> + SYM1C: IFE K,< + TLNE N,F4SW; FORTRAN FOUR REQUIRES A BLT + PUSHJ P,MVDWN; OF THE TABLES> + 000761' 201704 777776 MOVEI A,-2(S) ;LOAD A TO SAVE INST. AT SYM2 + 000762' 275200 000002 SYM1D: SUBI S,2; UPDATE UNDEFINED POINTER + 000763' 262316 000002 POP B,2(A) ;MOVE UNDEFINED VALUE POINTER + 000764' 262316 000001 POP B,1(A) ;MOVE UNDEFINED SYMBOL + 000765' 202506 000002 MOVEM W,2(B) ;STORE VALUE + 000766' 202546 000001 MOVEM C,1(B) ;STORE SYMBOL + 000767' 263740 000000 POPJ P,; + + 1KLOAD - LOADS MACROX PAGE 25 + DICK GRUEN: V25 3 AUG 68 + + ; GLOBAL DEFINITION MATCHES REQUEST + + 000770' 261740 001000' SYM2: PUSH P,SYM2C ;NEXT MUST BE A SUBROUTINE FOR LATER. SET RETURN + 000771' 200456 000002 SYM2B: MOVE V,2(A) ;LOAD REQUEST POINTER + 000772' 260740 001215' PUSHJ P,REMSYM + 000773' 321440 001117' JUMPL V,SYM2W ;ADDITIVE REQUEST? WFW + 000774' 260740 001130' PUSHJ P,SYM4A ;REPLACE CHAIN WITH DEFINITION + ;WFW PATCH TO LOOK FOR MORE THAN ONE REQUEST + 000775' 260740 001224' SYM2W1: PUSHJ P,SREQ ;LOOK FOR MORE REQUESTS FOR THIS SYMBOL + 000776' 254000 000771' JRST SYM2B ;FOUND MORE + 000777' 200700 001001' MOVE A,SVA ;RESTORE A + ;END OF PATCH WFW + 001000' 263740 000762' SYM2C: POPJ P,SYM1D ;RETURN, SEE SYM2 FOR USE OF ADDRESS + 001001' 000000 000000 SVA: 0 ;A TEMP CELL WFW + + ; REQUEST MATCHES GLOBAL DEFINITION + + 001002' 200440 000012 SYM2A: MOVE V,W ;LOAD POINTER TO CHAIN + 001003' 200516 000002 MOVE W,2(A) ;LOAD VALUE + 001004' 321440 001050' JUMPL V,FIXWP ;HANDLE ATTITIVE REQUEST WFW + 001005' 254000 001130' JRST SYM4A; REPLACE CHAIN WITH DEFINITION + + ; PROCESS GLOBAL REQUEST + + 001006' 603540 040000 SYM3: TLNE C,040000; COMMON NAME + 001007' 254000 000757' JRST SYM1B + 001010' 641540 640000 TLC C,640000; PERMUTE BITS FROM 60 TO 04 + 001011' 260740 001226' PUSHJ P,SDEF ;SEARCH FOR GLOBAL DEFINITION + 001012' 254000 001002' JRST SYM2A ;MATCHING GLOBAL DEFINITION + 001013' 321500 001016' JUMPL W,SYM3X1 ;ADDITIVE FIXUP WFW + 001014' 260740 001224' PUSHJ P,SREQ ;SEARCH FOR EXISTING REQUEST WFW + 001015' 254000 001035' JRST SYM3A ;EXISTING REQUEST FOUND WFW + 001016' 607500 100000 SYM3X1: TLNN W,100000 ;CHECK SYMBOL TABLE FIXUP + 001017' 254000 001027' JRST SYM3X2 ;NO + 001020' 200446 000001 MOVE V,1(B) ;MUST BE LAST SYMBOL DEFINED. GET SYMBOL + 001021' 430440 000012 XOR V,W ;CHECK FOR IDENTITY + 001022' 612440 002437' TDNE V,[XWD 77777,-1] ;BUT IGNORE HIGH 3 BITS + 001023' 263740 000000 POPJ P, ;NOT SAME, ASSUME NOT LOADED LOCAL + 001024' 541506 000002 HRRI W,2(B) ;GET LOCATION IN RIGHT HALF + 001025' 661500 000001 TLO W,1 + 001026' 274500 000322* SUB W,JOBREL ;AND MAKE RELATIVE + 001027' 301144 000000 SYM3X2: CAIL H,(S) ;STORE REQUEST IN UNDEF. TABLE WFW + IFN EXPAND,< PUSHJ P,XPAND7> + 001030' 254000 001132' IFE EXPAND,< JRST SFULLC> + SYM3X: IFE K,< + TLNE N,F4SW; FORTRAN FOUR + PUSHJ P,MVDWN; ADJUST TABLES IF F4> + 001031' 274200 001623' SUB S,SE3 ;ADVANCE UNDEFINED POINTER + 001032' 202504 000002 MOVEM W,2(S) ;STORE UNDEFINED VALUE POINTER + 001033' 202544 000001 MOVEM C,1(S) ;STORE UNDEFINED SYMBOL + 001034' 263740 000000 POPJ P,; + + 1KLOAD - LOADS MACROX PAGE 26 + DICK GRUEN: V25 3 AUG 68 + + + ; COMBINE TWO REQUEST CHAINS + + 001035' 331016 000002 SYM3A: SKIPL 2(A) ;IS IT ADDITIVE WFW + 001036' 254000 001042' JRST SYM3A1 ;NO, PROCESS WFW + 001037' 260740 001231' PUSHJ P,SDEF2 ;YES, CONTINUE WFW + 001040' 254000 001035' JRST SYM3A ;FOUND ANOTHER WFW + 001041' 254000 001027' JRST SYM3X2 ;REALLY NO CHAIN THERE WFW + 001042' 275702 777776 SYM3A1: SUBI A,-2(X) ;A=A-(-2+X(18-35)); A RELATIVE TO X WFW + 001043' 550440 000016 SYM3B: HRRZ V,A ; SAVE CHAIN ADDRESS FOR HRRM W,@X + 001044' 550720 000002 HRRZ A,@X ; LOAD NEXT ADDRESS IN CHAIN + 001045' 326700 001043' JUMPN A,SYM3B ; JUMP IF NOT THE LAST ADDR. IN CHAIN + 001046' 542520 000002 HRRM W,@X ;COMBINE CHAINS + 001047' 263740 000000 POPJ P,; + + ;WFW PATCH FOR ADDITIVE GLOBAL REQUESTS + + 001050' 607440 100000 FIXWP: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + 001051' 254000 001060' JRST FIXW + 001052' 200406 000001 MOVE T,1(B) ;SYMBOL FIXUP, MUST BE LAST SYMBOL DEFINED + 001053' 430400 000011 XOR T,V ;CHECK FOR SAME + 001054' 612400 002437' TDNE T,[XWD 77777,-1] ;EXCEPT FOR HEGH CODE BITS + 001055' 263740 000000 POPJ P, ;ASSUME NON-LOADED LOCAL + 001056' 541446 000002 HRRI V,2(B) ;GET LOCATION + 001057' 275442 000000 SUBI V,(X) ;SO WE CAN USE @X + 001060' 603440 200000 FIXW: TLNE V,200000 ;IS IT LEFT HALF + 001061' 254000 001067' JRST FIXWL + 001062' 200420 000002 MOVE T,@X ;GET WORD + 001063' 270400 000012 ADD T,W ;VALUE OF GLOBAL + 001064' 542420 000002 HRRM T,@X ;FIX WITHOUT CARRY + 001065' 205340 200000 MOVSI D,200000 ;SET UP TO REMOVE DEFERED INTERNAL IF THERE + 001066' 254000 001072' JRST SYMFIX + 001067' 514400 000012 FIXWL: HRLZ T,W ;UPDATE VALUE OF LEFT HALF + 001070' 272420 000002 ADDM T,@X ;BY VALUE OF GLOBAL + 001071' 205340 400000 MOVSI D,400000 ;LEFT DEFERED INTERNAL + 001072' 607440 100000 SYMFIX: TLNN V,100000 ;CHECK FOR SYMBOL TABLE FIXUP + 001073' 263740 000000 POPJ P, ;NO, RETURN + 001074' 271442 000000 ADDI V,(X) ;GET THE LOCATION + 001075' 200411 777777 MOVE T,-1(V) ;GET THE SYMBOL NAME + 001076' 607400 040000 TLNN T,40000 ;CHECK TO SEE IF INTERNAL + 001077' 263740 000000 POPJ P, ;NO, LEAVE + 001100' 413351 777777 ANDCAB D,-1(V) ;REMOVE PROPER BIT + 001101' 603340 600000 TLNE D,600000 ;IS IT STILL DEFERED? + 001102' 263740 000000 POPJ P, ;YES, ALL DONE + 001103' 250540 000007 EXCH C,D ;NO, CHECK FOR A REQUEST FOR IT + 001104' 260740 001224' PUSHJ P,SREQ + 001105' 254000 001110' JRST CHNSYM ;YES, WILL HAVE TO CALL THE FIXUP ROUTINE + 001106' 200540 000007 MOVE C,D ;GET C BACK + 001107' 263740 000000 POPJ P, + 001110' 261740 000007 CHNSYM: PUSH P,D ;HAS THE OLD C IN IT + 001111' 261740 000012 PUSH P,W ;WE MAY NEED IT LATER + 001112' 200511 000000 MOVE W,(V) ;GET VALUE + 001113' 260740 000771' PUSHJ P,SYM2B ;CALL THE FOUND GLOBAL TO MATCH REQUEST ROUTINE + 1KLOAD - LOADS MACROX PAGE 26-1 + DICK GRUEN: V25 3 AUG 68 + + 001114' 262740 000012 POP P,W + 001115' 262740 000013 POP P,C ;RESTORE FOR CALLER + 001116' 263740 000000 POPJ P, ;AND GO AWAY + + 001117' 607440 100000 SYM2W: TLNN V,100000 ;SYMBOL TABLE? + 001120' 254000 001123' JRST SYM2WA + 001121' 270440 001026* ADD V,JOBREL ;MAKE ABSOLUTE + 001122' 275442 000000 SUBI V,(X) ;GET READY TO ADD X + 001123' 260740 001060' SYM2WA: PUSHJ P,FIXW ;DO FIXUP + 001124' 254000 000775' JRST SYM2W1 ;AND LOOK FOR MORE REQUESTS + + ;END WFW PATCH + + 1KLOAD - LOADS MACROX PAGE 27 + DICK GRUEN: V25 3 AUG 68 + + ;PATCH VALUES INTO CHAINED REQUEST + 001125' SYM4: + 001125' 550420 000002 HRRZ T,@X ;LOAD NEXT ADDRESS IN CHAIN + 001126' 542520 000002 HRRM W,@X ;INSERT VALUE INTO PROGRAM + 001127' 200440 000010 MOVE V,T + 001130' 326440 001125' SYM4A: JUMPN V,SYM4 ;JUMP IF NOT LAST ADDR. IN CHAIN + 001131' 263740 000000 POPJ P, + + IFE K,< + MVDWN: HRRZ T,MLTP + IFN EXPAND,< SUBI T,2> + CAIG T,@X; ANY ROOM LEFT? + IFN EXPAND,< JRST [PUSHJ P,XPAND> + TLOA F,FULLSW + IFN EXPAND,< JRST MVDWN + JRST .+2]> + TLNE F,SKIPSW+FULLSW + JRST MVABRT; ABORT BLT + HRREI T,-2 + ADDM T,PLTP; ADJUST PROGRAMMER LABEL POINTER + ADDM T,BITP; AND BIT TABLE POINTER + ADDM T,SDSTP; FIRST DATA STATEMENT + ADDM T,LTC + ADDM T,ITC + TLNE N,SYDAT + ADDM T,V + ADDB T,MLTP; AND FINALLY TO MADE LABEL TABLE + HRLS T; SET UP BLT POINTER + ADD T,[XWD 2,0] + BLT T,(S) + MVABRT: POPJ P,; + > + ;HIGHEST RELOCATABLE POINT (BLOCK TYPE 4) + 001132' 663000 000200 SFULLC: TLOE F,FULLSW ;PREVIOUS OVERFLOW? + 001133' 254000 001141' JRST FULLC ;YES, DON'T PRINT MESSAGE + 001134' 265700 001462' JSP A,ERRPT ;NO, COMPLAIN ABT OVERFLO + 001135' 637155 425754 SIXBIT ?SYMBOL TABLE OVERLAP#? + 001136' 006441 425445 + 001137' 005766 456254 + 001140' 416003 000000 + 001141' 661000 000200 FULLC: TLO F,FULLSW ;CORE OVERLAP ERROR RETURN + IFE K,< TLNE N,F4SW + POPJ P,> + 001142' 254000 000605' JRST LIB3 ;LOOK FOR MORE + + 001143' 302700 000004 HIGH0: CAIE A,4 ; TEST FOR END BLOCK (OVERLAP) + 001144' 254000 000605' JRST LIB3 + 001145' 260740 001235' HIGH: PUSHJ P,PRWORD ;READ TWO DATA WORDS + 001146' 540240 000013 HRR R,C ;SET NEW PROGRAM BREAK + 001147' 271540 000002 ADDI C,X; BE SURE TO RELOCATE + 001150' 303544 000001 CAILE C,1(S) ;TEST PROGRAM BREAK + IFN EXPAND,<PUSHJ P,[ PUSHJ P,XPAND + TLOA F,FULLSW + 1KLOAD - LOADS MACROX PAGE 27-1 + DICK GRUEN: V25 3 AUG 68 + + JRST POPJM2 + POPJ P,]> + 001151' 661000 000200 IFE EXPAND,<TLO F,FULLSW> + 001152' 201700 001672' HIGH3: MOVEI A,F.C ;SAVE CURRENT STATE OF LOADER + 001153' 251700 001700' BLT A,B.C + 001154' 603000 004400 TLNE F,SLIBSW+LIBSW ;NORMAL MODE EXIT THROUGH LOAD1 + 001155' 254000 000572' JRST LIB ;LIBRARY SEARCH EXIT + 001156' 254000 000660' JRST LOAD1 + + 1KLOAD - LOADS MACROX PAGE 28 + DICK GRUEN: V25 3 AUG 68 + + ;STARTING ADDRESS (BLOCK TYPE 7) + + 001157' 260740 001235' START: PUSHJ P,PRWORD ;READ TWO DATA WORDS + 001160' 607040 000002 TLNN N,ISAFLG ;SKIP IF IGNORE SA FLAG ON + 001161' 540000 000013 HRR F,C ;SET STARTING ADDRESS + + ;PROGRAM NAME (BLOCK TYPE 6) + + 001162' 260740 001235' NAME: PUSHJ P,PRWORD ;READ TWO DATA WORDS + 001163' 663040 000004 TLOE N,COMFLG ;SKIP IF COMMON NOT PREV. SET + 001164' 254000 001170' JRST NAME1 ;SIZE OF COMMON PREV. SET + 001165' 202500 001630' MOVEM W,COMSAV ;STORE LENGTH OF COMMON + 001166' 322500 001201' JUMPE W,NAME2 ;JUMP IF NO COMMON IN THIS JOB + 001167' 541260 000005 HRRI R,@R ;FIRST PROGRAM SET LOAD ORIGIN + 001170' 303144 777777 NAME1: CAILE H,-1(S) ;TEST FOR AVAIL. SYMBOL SPACE + IFN EXPAND,< PUSHJ P,XPAND7> + 001171' 254000 001132' IFE EXPAND,< JRST SFULLC> + 001172' 275200 000002 SUBI S,2 ;UPDATE UNDEF. TABLE POINTER + 001173' 262304 000002 POP B,2(S) + 001174' 262304 000001 POP B,1(S) + 001175' 550440 000001 HRRZ V,N ;POINTER TO PREVIOUS NAME + 001176' 276300 000011 SUBM B,V ;COMPUTE RELATIVE POSITIONS + 001177' 506441 000002 HRLM V,2(N) ;STORE FORWARD POINTER + 001200' 540040 000006 HRR N,B ;UPDATE NAME POINTER + 001201' 202546 000001 NAME2: MOVEM C,1(B) ;STORE PROGRAM NAME + 001202' 552246 000002 HRRZM R,2(B) ;STORE PROGRAM ORIGIN + 001203' 317500 001630' CAMG W,COMSAV ;CHECK COMMON SIZE + 001204' 254000 000605' JRST LIB3 ;COMMON OK + 001205' 265700 001462' ILC: JSP A,ERRPT + 001206' 515454 160043 SIXBIT /ILL. COMMON#/ + 001207' 575555 575603 + 001210' 254000 000042' JRST LD2 + 1KLOAD - LOADS MACROX PAGE 29 + DICK GRUEN: V25 3 AUG 68 + + + ;ONE PASS LOCAL DEFINITION (BLOCK TYPE 10) + + ;PMP PATCH FOR LEFT HALF FIXUPS + ;END PMP PATCH + 001211' 260740 001243' LOCD: PUSHJ P,RWORD ;READ ONE DATA WORD + 001212' 554440 000012 HLRZ V,W ;STORAGE POINTER IN LEFT HALF + 001213' 260740 001130' PUSHJ P,SYM4A ;LINK BACK REFERENCES + 001214' 254000 001211' JRST LOCD + 1KLOAD - LOADS MACROX PAGE 30 + DICK GRUEN: V25 3 AUG 68 + + + 001215' 200404 000001 REMSYM: MOVE T,1(S) + 001216' 202416 000001 MOVEM T,1(A) + 001217' 200404 000002 MOVE T,2(S) + 001220' 202416 000002 MOVEM T,2(A) + 001221' 270200 001623' ADD S,SE3 + 001222' 202700 001001' MOVEM A,SVA + 001223' 263740 000000 POPJ P, + + 1KLOAD - LOADS MACROX PAGE 31 + DICK GRUEN: V25 3 AUG 68 + + ;SYMBOL TABLE SEARCH SUBROUTINES + + ; ENTERED WITH SYMBOL IN C + ; RETURN IS WITH POINTER IN A IF MATCHING SYMBOL FOUND + ; OTHERWISE, A SKIP ON RETURN OCCURS + + 001224' 325200 001233' SREQ: JUMPGE S,CPOPJ1 ;JUMP IF NO UNDEF. SYMBOLS + 001225' 334700 000004 SKIPA A,S ;LOAD REQUEST SEARCH POINTER + 001226' 200700 000006 SDEF: MOVE A,B ;LOAD DEF. SYMBOL SEARCH POINTER + 001227' 316556 000001 SDEF1: CAMN C,1(A) + 001230' 263740 000000 POPJ P, ;SYMBOLS MATCH, RETURN + 001231' 270700 001623' SDEF2: ADD A,SE3 + 001232' 321700 001227' JUMPL A,SDEF1 + IFE K,< JRST CPOPJ1 ;SYMBOL NOT FOUND SKIPS ON RETURN> + IFN K,< + 001233' 350017 000000 CPOPJ1: AOS (P) ;TRA 2,4 + 001234' 263740 000000 POPJ P, ;...> + + ;RELOCATION AND BLOCK INPUT + + 001235' 260740 001243' PRWORD: PUSHJ P,RWORD ;READ A WORD PAIR + 001236' 200540 000012 MOVE C,W ;LOAD C WITH FIRST DATA WORD + 001237' 602600 377777 TRNE E,377777 ;TEST FOR END OF BLOCK + 001240' 254000 001245' JRST RWORD1 ;INPUT SECOND WORD OF PAIR + 001241' 201500 000000 MOVEI W,0 ;NO SECOND WORD, ASSUME ZERO + 001242' 263740 000000 POPJ P, + + 001243' 606600 377777 RWORD: TRNN E,377777 ;TEST FOR END OF BLOCK + 001244' 254000 000660' JRST LOAD1 ;RETURN TO LOAD THE NEXT BLOCK + 001245' 253600 001251' RWORD1: AOBJN E,RWORD2 ;JUMP IF DATA WORD NEXT + 001246' 260740 001560' PUSHJ P,WORD ;READ CONTROL WORD + 001247' 200640 000012 MOVE Q,W ;DON'T COUNT RELOCATION WORDS + 001250' 505600 777756 HRLI E,-22 ;SET RELOCATION WORD BYTE COUNT + 001251' 260740 001560' RWORD2: PUSHJ P,WORD ;READ INPUT WORD + 001252' 325640 001255' JUMPGE Q,RWORD3 ;TEST LH RELOCATION BIT + 001253' 514400 000005 HRLZ T,R + 001254' 270500 000010 ADD W,T ;LH RELOCATION + 001255' 603640 200000 RWORD3: TLNE Q,200000 ;TEST RH RELOCATION BIT + 001256' 541520 000005 HRRI W,@R ;RH RELOCATION + 001257' 242640 000002 LSH Q,2 + 001260' 263740 000000 POPJ P, + + 1KLOAD - LOADS MACROX PAGE 32 + DICK GRUEN: V25 3 AUG 68 + + ;PRINT STORAGE MAP SUBROUTINE + + 001261' 260740 000652' PRMAP: PUSHJ P,FSCN1 ;LOAD OTHER FILES FIRST + 001262' 260740 001576' PUSHJ P,CRLFLF ;START NEW PAGE + 001263' 550500 000005 HRRZ W,R + 001264' 260740 001410' PUSHJ P,PRNUM0 + 001265' 265700 001541' JSP A,ERRPT7 + 001266' 516300 645045 SIXBIT ?IS THE PROGRAM BREAK@? + 001267' 006062 574762 + 001270' 415500 426245 + 001271' 415340 000000 + 001272' 260740 001600' PUSHJ P,CRLF ;START STORAGE MAP + 001273' 265700 001465' JSP A,ERRPT0 ;PRINT HEADER + 001274' 636457 624147 SIXBIT ?STORAGE MAP@? + 001275' 450055 416040 + 001276' 574700 000006 HLRE A,B + 001277' 213000 000016 MOVNS A + 001300' 271706 000000 ADDI A,(B) + 001301' 275700 000002 PRMAP1: SUBI A,2 + 001302' 331556 000001 SKIPL C,1(A) ;LOAD SYMBOL, SKIP IF DELETED + 001303' 603540 300000 TLNE C,300000 ;TEST FOR LOCAL SYMBOL + 001304' 254000 001330' JRST PRMAP4 ;IGNORE LOCAL SYMBOLS + 001305' 607540 040000 TLNN C,040000 + 001306' 260740 001600' PUSHJ P,CRLF ;PROGRAM NAME + 001307' 260740 001405' PUSHJ P,PRNAM1 ;PRINT SYMBOL AND VALUE + 001310' 603540 040000 TLNE C,040000 + 001311' 254000 001327' JRST PRMAP3 ;GLOBAL SYMBOL + 001312' 574540 000012 HLRE C,W ;POINTER TO NEXT PROG. NAME + 001313' 325540 001316' JUMPGE C,PRMAP2 ;JUMP IF LAST PROGRAM NAME + 001314' 271556 000002 ADDI C,2(A) ;COMPUTE LOC. OF FOLLOWING NAME + 001315' 334420 000013 SKIPA T,@C ;LOAD ORIGIN OF FOLLOWING PROG. + 001316' 550400 000005 PRMAP2: HRRZ T,R ;LOAD PROGRAM BREAK + 001317' 276400 000012 SUBM T,W ;SUBTRACT ORIGIN TO GET LENGTH + 001320' 260740 001407' PUSHJ P,PRNUM ;PRINT PROGRAM LENGTH + 001321' 260740 001600' PUSHJ P,CRLF + 001322' 607040 000001 TLNN N,ALLFLG ;SKIP IF LIST ALL MODE IS ON + 001323' 602500 777777 TRNE W,777777 ;SKIP IF ZERO LENGTH PROGRAM + 001324' 254000 001327' JRST PRMAP3 + 001325' 322540 001332' JUMPE C,PRMAP5 ;JUMP IF LAST PROGRAM + 001326' 334700 000013 SKIPA A,C ;SKIP GLOBALS, ZERO LENGTH PROG. + 001327' 260740 001600' PRMAP3: PUSHJ P,CRLF + 001330' 303706 000000 PRMAP4: CAILE A,(B) ;TEST FOR END OF SYMBOL TABLE + 001331' 254000 001301' JRST PRMAP1 + 001332' PRMAP5: + + 1KLOAD - LOADS MACROX PAGE 33 + DICK GRUEN: V25 3 AUG 68 + + ;LIST UNDEFINED GLOBALS + + 001332' 260740 000652' PMS: PUSHJ P,FSCN1 ;LOAD FILES FIRST + 001333' 325200 001356' JUMPGE S,PMS3 ;JUMP IF NO UNDEFINED GLOBALS + 001334' 523000 000042 HLLOS 42 ;SET SOME ERROR TO ABORT EXECUTION + 001335' 260740 001577' PUSHJ P,FCRLF ;START THE MESSAGE + 001336' 260740 001553' PUSHJ P,PRQ ;PRINT ? + 001337' 574500 000004 HLRE W,S ;COMPUTE NO. OF UNDEF. GLOBALS + 001340' 217000 000012 MOVMS W + 001341' 242500 777777 LSH W,-1 ;<LENGTH OF LIST>/2 + 001342' 260740 001410' PUSHJ P,PRNUM0 + 001343' 265700 001541' JSP A,ERRPT7 + 001344' 655644 454651 SIXBIT /UNDEFINED GLOBALS@/ + 001345' 564544 004754 + 001346' 574241 546340 + 001347' 200700 000004 MOVE A,S ;LOAD UNDEF. POINTER + 001350' 260740 001600' PMS2: PUSHJ P,CRLF + 001351' 260740 001553' PUSHJ P,PRQ ;PRINT ? + 001352' 260740 001404' PUSHJ P,PRNAM0 ;PRINT SYMBOL AND POINTER + 001353' 270700 001623' ADD A,SE3 + 001354' 321700 001350' JUMPL A,PMS2 + 001355' 260740 001600' PUSHJ P,CRLF ;SPACE AFTER LISTING + + ;LIST NUMBER OF MULTIPLY DEFINED GLOBALS + + 001356' 336500 001631' PMS3: SKIPN W,MDG ;ANY MULTIPLY DEFINED GLOBALS + 001357' 254000 001372' JRST PMS4 ;NO, EXCELSIOR + 001360' 523000 000042 HLLOS 42 ;ANOTHER WAY TO LOSE + 001361' 260740 001577' PUSHJ P,FCRLF ;ROOM AT THE TOP + 001362' 260740 001553' PUSHJ P,PRQ ;PRINT ? + 001363' 260740 001410' PUSHJ P,PRNUM0 ;NUMBER OF MULTIPLES + 001364' 265700 001541' JSP A,ERRPT7 ;REST OF MESSAGE + 001365' 556554 645160 SIXBIT ?MULTIPLY DEFINED GLOBALS@? + 001366' 547100 444546 + 001367' 515645 440047 + 001370' 545742 415463 + 001371' 400000 000000 + 001372' 603040 040000 PMS4: TLNE N,AUXSWE ;AUXILIARY OUTPUT DEVICE? + 001373' 067100 000000 OUTPUT 2, ;INSURE A COMPLETE BUFFER + 001374' 263740 000000 POPJ P, ;RETURN + + 1KLOAD - LOADS MACROX PAGE 34 + DICK GRUEN: V25 3 AUG 68 + + ;ENTER FILE ON AUXILIARY OUTPUT DEVICE + + 001375' 077100 001730' IAD2: ENTER 2,DTOUT ;WRITE FILE NAME IN DIRECTORY + 001376' 254000 001400' JRST IMD3 ;NO MORE DIRECTORY SPACE + 001377' 263740 000000 POPJ P, + + 001400' 265700 001462' IMD3: JSP A,ERRPT ;DIRECTORY FULL ERROR + 001401' 445162 160046 SIXBIT /DIR. FULL@/ + 001402' 655454 400000 + 001403' 254000 000042' JRST LD2 + + ;PRINT THE 6 DIGIT OCTAL ADDRESS IN W + + ; ACCUMULATORS USED: D,T,V + + 001404' 200556 000001 PRNAM0: MOVE C,1(A) ;LOAD SYMBOL + 001405' 200516 000002 PRNAM1: MOVE W,2(A) ;LOAD VALUE + 001406' 260740 001433' PRNAM: PUSHJ P,PRNAME + 001407' 260740 001427' PRNUM: PUSHJ P,SPACES + 001410' 200440 001417' PRNUM0: MOVE V,PRNUM2 ;LOAD BYTE POINTER TO RH. OF W + 001411' 211340 000006 MOVNI D,6 ;LOAD CHAR. COUNT + 001412' 134400 000011 PRNUM1: ILDB T,V ;LOAD DIGIT TO BE OUTPUT + 001413' 271400 000060 ADDI T,60 ;CONVERT FROM BINARY TO ASCII + 001414' 260740 001604' PUSHJ P,TYPE2 + 001415' 341340 001412' AOJL D,PRNUM1 ;JUMP IF MORE DIGITS REMAIN + 001416' 263740 000000 POPJ P, + + 001417' 220300 000012 PRNUM2: XWD 220300,W + + ;YE OLDE RECURSIVE NUMBER PRINTER + ;PRINTS Q, WITH LEADING ZEROES SUPPRESSED; USES A AND T + + 001420' 231640 000012 RCNUM: IDIVI Q,12 ;RADIX DECIMAL + 001421' 271700 000060 ADDI A,"0" + 001422' 506717 000000 HRLM A,(P) + 001423' 332000 000015 SKIPE Q + 001424' 260740 001420' PUSHJ P,RCNUM + 001425' 554417 000000 HLRZ T,(P) + 001426' 254000 001604' JRST TYPE2 + + 1KLOAD - LOADS MACROX PAGE 35 + DICK GRUEN: V25 3 AUG 68 + + ;PRINT FOUR SPACES + + 001427' 260740 001430' SPACES: PUSHJ P,SP1 + 001430' 260740 001431' SP1: PUSHJ P,SPACE + 001431' 201400 000040 SPACE: MOVEI T,40 + 001432' 254000 001604' JRST TYPE2 + + ;SYMBOL PRINT - RADIX 50 + + ; ACCUMULATORS USED: D,T + + 001433' 200400 000013 PRNAME: MOVE T,C ;LOAD SYMBOL + 001434' 621400 740000 TLZ T,740000 ;ZERO CODE BITS + 001435' 211340 000006 MOVNI D,6 ;LOAD CHAR. COUNT + 001436' 231400 000050 SPT: IDIVI T,50 ;THE REMAINDER IS THE NEXT CHAR. + 001437' 506457 000000 HRLM V,(P) ;STORE IN LH. OF PUSHDOWN LIST + 001440' 355000 000007 AOSGE D ;SKIP IF NO CHARS. REMAIN + 001441' 260740 001436' PUSHJ P,SPT ;RECURSIVE CALL FOR NEXT CHAR. + 001442' 554417 000000 HLRZ T,(P) ;LOAD FROM LH. OF PUSHDOWN LIST + 001443' 322400 001603' JUMPE T,TYPE ;BLANK + 001444' 271400 000057 ADDI T,60-1 + 001445' 303400 000071 CAILE T,71 + 001446' 271400 000007 ADDI T,101-72 + 001447' 303400 000132 CAILE T,132 + 001450' 275400 000070 SUBI T,134-44 + 001451' 306400 000043 CAIN T,43 + 001452' 201400 000056 MOVEI T,56 + 001453' 254000 001604' JRST TYPE2 + ;PRINT A WORD OF SIXBIT CHARACTERS IN AC W + + ; ACCUMULATORS USED: Q,T,D + + 001454' 211640 000006 PWORD: MOVNI Q,6 ;SET CHARACTER COUNT TO SIX + 001455' 200340 001624' PWORD1: MOVE D,LSTPT ;ENTER HERE WITH Q PRESET + 001456' 134400 000007 PWORD2: ILDB T,D ;LOAD NEXT CHAR. TO BE OUTPUT + 001457' 260740 001603' PUSHJ P,TYPE ;OUTPUT CHARACTER + 001460' 341640 001456' AOJL Q,PWORD2 + 001461' 263740 000000 POPJ P, + + 1KLOAD - LOADS MACROX PAGE 36 + DICK GRUEN: V25 3 AUG 68 + + ;ERROR MESSAGE PRINT SUBROUTINE + + ; FORM OF CALL: + + ; JSP A,ERRPT + ; SIXBIT /<MESSAGE>/ + + ; ACCUMULATORS USED: T,V,C,W + + 001462' 661000 000020 ERRPT: TLO F,FCONSW ;INSURE TTY OUTPUT + 001463' 260740 001600' PUSHJ P,CRLF ;ROOM AT THE TOP + 001464' 260740 001553' PUSHJ P,PRQ ;START OFF WITH ? + 001465' 261740 000015 ERRPT0: PUSH P,Q ;SAVE Q + 001466' 334440 001524' SKIPA V,ERRPT5 + 001467' 260740 001603' ERRPT1: PUSHJ P,TYPE + 001470' 134400 000011 ILDB T,V + 001471' 306400 000040 CAIN T,40 + 001472' 254000 001517' JRST ERRPT4 + 001473' 306400 000005 CAIN T,5 + 001474' 254000 001543' JRST ERRPT9 + 001475' 302400 000003 CAIE T,3 + 001476' 254000 001467' JRST ERRPT1 + 001477' 336540 001724' SKIPN C,DTIN + 001500' 254000 001517' JRST ERRPT4 + 001501' 211640 000014 MOVNI Q,14 + 001502' 201500 000077 MOVEI W,77 + 001503' 612540 000012 ERRPT2: TDNE C,W + 001504' 254000 001507' JRST ERRPT3 + 001505' 242500 000006 LSH W,6 + 001506' 341640 001503' AOJL Q,ERRPT2 + 001507' 200500 001525' ERRPT3: MOVE W,ERRPT6 + 001510' 260740 001455' PUSHJ P,PWORD1 + 001511' 336500 001725' SKIPN W,DTIN1 + 001512' 254000 001517' JRST ERRPT4 + 001513' 242500 777772 LSH W,-6 + 001514' 661500 160000 TLO W,160000 + 001515' 211640 000004 MOVNI Q,4 + 001516' 260740 001455' PUSHJ P,PWORD1 + 001517' 260740 001600' ERRPT4: PUSHJ P,CRLF + 001520' 262740 000015 ERRP41: POP P,Q + 001521' 621000 000020 TLZ F,FCONSW ;ONE ERROR PER CONSOLE + 001522' 350000 000011 AOS V ;PROGRAM BUMMERS BEWARE: + 001523' 254020 000011 JRST @V ;V HAS AN INDEX OF A + + 001524' 440616 000000 ERRPT5: POINT 6,0(A) + 001525' 004651 544500 ERRPT6: SIXBIT / FILE / + + 1KLOAD - LOADS MACROX PAGE 37 + DICK GRUEN: V25 3 AUG 68 + + 001526' 661000 000020 ERRPT8: TLO F,FCONSW ;INSURE TTY OUTPUT + 001527' 260740 001553' PUSHJ P,PRQ ;START WITH ? + 001530' 305400 000140 CAIGE T,140 ;IS IT A NON-PRINTING CHAR? + 001531' 301400 000040 CAIL T,40 + 001532' 254000 001540' JRST ERRP8 + 001533' 261740 000010 PUSH P,T + 001534' 201400 000136 MOVEI T,136 ;UP ARROW + 001535' 260740 001604' PUSHJ P,TYPE2 + 001536' 262740 000010 POP P,T + 001537' 271400 000100 ADDI T,100 ;CONVERT TO PRINTING CHAR. + 001540' 260740 001604' ERRP8: PUSHJ P,TYPE2 + 001541' 260740 001431' ERRPT7: PUSHJ P,SPACE + 001542' 254000 001465' JRST ERRPT0 + + 001543' 201460 000011 ERRPT9: MOVEI V,@V + 001544' 261740 000011 PUSH P,V + 001545' 265700 001541' JSP A,ERRPT7 + 001546' 515454 454741 SIXBIT ?ILLEGAL -LOADER@? + 001547' 540015 545741 + 001550' 444562 400000 + 001551' 262740 000011 POP P,V + 001552' 254000 001520' JRST ERRP41 + + ;PRINT QUESTION MARK + + 001553' 261740 000010 PRQ: PUSH P,T ;SAVE + 001554' 201400 000077 MOVEI T,"?" ;PRINT ? + 001555' 260740 001604' PUSHJ P,TYPE2 ;... + 001556' 262740 000010 POP P,T ;RESTORE + 001557' 263740 000000 POPJ P, ;RETURN + + 1KLOAD - LOADS MACROX PAGE 38 + DICK GRUEN: V25 3 AUG 68 + + ;INPUT - OUTPUT INTERFACE + + ;BINARY INPUT SUBROUTINE - RETURNS A WORD IN W + IFE K,< + WORDPR: PUSHJ P,WORD ;GET FIRST WORD OF PAIR + MOVE C,W ;KEEP IT HANDY> + 001560' 377000 001723' WORD: SOSG BUFR2 ;SKIP IF BUFFER NOT EMPTY + 001561' 254000 001564' JRST WORD2 + 001562' 134500 001722' WORD1: ILDB W,BUFR1 ;PICK UP 36 BIT WORD + 001563' 263740 000000 POPJ P, + + 001564' 066040 000000 WORD2: INPUT 1, ;GET NEXT BUFFER LOAD + 001565' 062040 000012 STATUS 1,W ;GET DEVICE STATUS FROM MONITOR + 001566' 602500 020000 TRNE W,IODEND ;TEST FOR EOF + 001567' 254000 000631' JRST EOF ;END OF FILE EXIT + 001570' 606500 740000 TRNN W,IOBAD ;TEST FOR DATA ERROR + 001571' 254000 001562' JRST WORD1 ;DATA OK - CONTINUE LOADING + 001572' 265700 001462' JSP A,ERRPT ;DATA ERROR - PRINT MESSAGE + 001573' 515660 656400 SIXBIT /INPUT ERROR#/ + 001574' 456262 576203 + 001575' 254000 000042' JRST LD2 ;GO TO ERROR RETURN + ;TYPEOUT SUBROUTINE - THE CHARACTER SUPPLIED IN T IS CONVERTED TO ASCII + ;AND IS OUTPUT ON THE CONSOLE AND/OR THE SPECIFIED LOADER MAP OUTPUT + ;DEVICE + + 001576' 260740 001600' CRLFLF: PUSHJ P,CRLF + 001577' 661000 000020 FCRLF: TLO F,FCONSW ;INSURE TTY OUTPUT + 001600' 201400 000015 CRLF: MOVEI T,15 ;CARRIAGE RETURN LINE FEED + 001601' 260740 001604' PUSHJ P,TYPE2 + 001602' 201400 777752 MOVEI T,12-40 ;LINE FEED IN PSEUDO SIXBIT + 001603' 201410 000040 TYPE: MOVEI T,40(T) ;CONVERT SIXBIT TO ASCII + 001604' 607040 020000 TYPE2: TLNN N,AUXSWI ;IS THER AN AUXILIARY DEVICE? + 001605' 254000 001615' JRST TYPE3 ;NO, DONT OUTPUT TO IT + 001606' 667040 040000 TLON N,AUXSWE ;IS AUX. DEV. ENTERED? + 001607' 260740 001375' PUSHJ P,IAD2 ;NOPE, DO SO! + 001610' 377000 001720' SOSG ABUF2 ;SPACE LEFT IN BUFFER? + 001611' 067100 000000 OUTPUT 2, ;CREATE A NEW BUFFER + 001612' 136400 001717' IDPB T,ABUF1 ;DEPOSIT CHARACTER + 001613' 607000 000020 TLNN F,FCONSW ;FORCE OUTPUT TO CONSOLE TOO? + 001614' 263740 000000 POPJ P, ;NOPE + 001615' 336000 001712' TYPE3: SKIPN BUFO2 ;END OF BUFFER + 001616' 067140 000000 OUTPUT 3, ;FORCE OUTPUT NOW + 001617' 136400 001711' IDPB T,BUFO1 ;DEPOSIT CHARACTER + 001620' 306400 000012 CAIN T,12 ;END OF LINE + 001621' 067140 000000 OUTPUT 3, ;FORCE AN OUTPUT + 001622' 263740 000000 POPJ P, + + 1KLOAD - LOADS MACROX PAGE 39 + DICK GRUEN: V25 3 AUG 68 + + 001623' 000002 000002 SE3: XWD 2,2 ;SYMBOL POINTER INCREMENT + 001624' 440600 000012 LSTPT: POINT 6,W ;CHARACTER POINTER TO W + 001625' 777737 001631' PDLPT: XWD -41,PDLST-1; INITIAL PUSHDOWN POINTER + 001626' 034372 246575 COMM: SQUOZE 0,.COMM. + 001627' 000000 000000 PDSAV: 0 ;SAVED PUSHDOWN POINTER + 001630' 000000 000000 COMSAV: 0 ;LENGTH OF COMMON + 001631' 000000 000000 MDG: 0 ;COUNTER FOR MUL DEF GLOBALS + 001632' PDLST: BLOCK 40 + + 001672' 000000 000000 F.C: 0 + 001673' 000000 000000 0 ;STORE N HERE + 001674' 000000 000000 0 ;STORE X HERE + 001675' 000000 000000 0 ;STORE H HERE + 001676' 000000 000000 0 ;STORE S HERE + 001677' 000000 000000 0 ;STORE R HERE + 001700' 000000 000000 B.C: 0 + 001701' 000000 000000 F.I: 0 ;INITIAL F - FLAGS + 001702' 000000 000000 0 ;INITIAL N + 001703' 000011 002440' XWD V,LDEND ;INITIAL X - LOAD PROGRAM AFTER LOADER + 001704' 000000 002600' EXP LDEND+JOBPRO ;INITIAL H - INITIAL PROG BREAK + 001705' 000000 000000 0 ;INITIAL S + 001706' 000012 000140 XWD W,JOBPRO ;INITIAL R - INITIAL RELOC + 001707' 000000 000000 0 ;INITIAL B + 1KLOAD - LOADS MACROX PAGE 40 + DICK GRUEN: V25 3 AUG 68 + + ;BUFFER HEADERS AND HEADER HEADERS + + 001710' 000000 000000 BUFO: 0 ;CONSOLE INPUT HEADER HEADER + 001711' 000000 000000 BUFO1: 0 + 001712' 000000 000000 BUFO2: 0 + + 001713' 000000 000000 BUFI: 0 ;CONSOLE OUTPUT HEADER HEADER + 001714' 000000 000000 BUFI1: 0 + 001715' 000000 000000 BUFI2: 0 + + 001716' 000000 000000 ABUF: 0 ;AUXILIARY OUTPUT HEADER HEADER + 001717' 000000 000000 ABUF1: 0 + 001720' 000000 000000 ABUF2: 0 + + 001721' 000000 000000 BUFR: 0 ;BINARY INPUT HEADER HEADER + 001722' 000000 000000 BUFR1: 0 + 001723' 000000 000000 BUFR2: 0 + + 001724' 000000 000000 DTIN: 0 ;DECTAPE INPUT BLOCK + 001725' 000000 000000 DTIN1: 0 + 001726' 000000 000000 0 + 001727' 000000 000000 DTIN2: 0 + + 001730' 000000 000000 DTOUT: 0 ;DECTAPE OUTPUT BLOCK + 001731' 000000 000000 DTOUT1: 0 + 001732' 000000 000000 0 + 001733' 000000 000000 0 + + 000052 TTYL=52 ;TWO TTY BUFFERS + IFE K,< BUFL=406 ;TWO DTA BUFFERS FOR LOAD> + 000203 IFN K,< BUFL=203 ;ONE DTA BUFFER FOR LOAD> + 000203 ABUFL=203 ;ONE DTA BUFFER FOR AUX DEV + 001734' TTY1: BLOCK TTYL ;TTY BUFFER AREA + 002006' BUF1: BLOCK BUFL ;LOAD BUFFER AREA + 002211' AUX: BLOCK ABUFL ;AUX BUFFER AREA + 002414' ZEROS: REPEAT 4,<0> + 002414' 000000 000000 + 002415' 000000 000000 + 002416' 000000 000000 + 002417' 000000 000000 + + IFN RPGSW,<CTLIN: BLOCK 3 + CTLNAM: BLOCK 3 + CTLBUF: BLOCK 203+1 + > + 1KLOAD - LOADS MACROX PAGE 41 + DICK GRUEN: V25 3 AUG 68 + + 040000 IOBKTL=40000 + 400000 IOIMPM=400000 + 200000 IODERR=200000 + 100000 IODTER=100000 + 020000 IODEND=20000 + + 740000 IOBAD=IODERR+IODTER+IOBKTL+IOIMPM + + INTERN PWORD,DTIN,DTOUT,LDEND + INTERN WORD,LD,BEG,PDLST,LOAD + INTERN CRLF,TYPE,PMS,PRMAP + INTERN F,P,X,H,S,R,B,N,T,V,W,C,E,Q,A,D + + EXTERN JOBDDT,JOBFF,JOBSA,JOBREL,JOBSYM,JOBUSY,JOB41 + + ;END HERE IF 1K LOADER REQUESTED. + 002420' IFN K, <LITS: LIT + 002420' 444566 435062 + 002421' 656460 435462 + 002422' 545741 444562 + 002423' 251656 000000 + 002424' 530043 576245 + 002425' 435041 515600 + 002426' 545142 240000 + 002427' 200500 002426' + 002430' 202500 001724' + 002431' 260740 000626' + 002432' 621000 000002 + 002433' 254000 000527' + 002434' 545142 242000 + 002435' 525742 444164 + 002436' 624151 440000 + 002437' 077777 777777 + 002440' VAR + 000000' LDEND: END LD + +NO ERRORS DETECTED + +PROGRAM BREAK IS 002440 + +8K CORE USED + 1KLOAD - LOADS MACROX PAGE 42 + SYMBOL TABLE + + 000456 +A 000016 INT +ABUF 001716' +ABUF1 001717' +ABUF2 001720' +ABUFL 000203 +ALLFLG 000001 SPD +ASW 000100 SPD +AUX 002211' +AUXSWE 040000 SPD +AUXSWI 020000 SPD +B 000006 INT +B.C 001700' +BEG 000000' INT +BLTSET 000251' +BLTSYM 000000 +BUF1 002006' +BUFI 001713' +BUFI1 001714' +BUFI2 001715' +BUFL 000203 +BUFO 001710' +BUFO1 001711' +BUFO2 001712' +BUFR 001721' +BUFR1 001722' +BUFR2 001723' +C 000013 INT +CALLEX 000007' +CDDTGT 000005 SPD +CDDTOU 000003 SPD +CEXIT 000012 SPD +CHAIN3 000350' +CHN5 000001 +CHNBLT 000014 +CHNC 000307' +CHNERR 000010 +CHNR 000310' +CHNSYM 001110' +COMFLG 000004 SPD +COMM 001626' +COMSAV 001630' +CPOPJ1 001233' +CRLF 001600' INT +CRLFLF 001576' +CSETDD 000002 SPD +CSW 000001 SPD +CTLSET 000004' +D 000007 INT +DDSW 004000 SPD +DISPL 000005 +DSW 100000 SPD +DSYMSW 001000 SPD + 1KLOAD - LOADS MACROX PAGE 42-1 + SYMBOL TABLE + +DTIN 001724' INT +DTIN1 001725' +DTIN2 001727' +DTOUT 001730' INT +DTOUT1 001731' +E 000014 INT +EOF 000631' +EOF1 000632' +EOF2 000633' +ERRP41 001520' +ERRP8 001540' +ERRPT 001462' +ERRPT0 001465' +ERRPT1 001467' +ERRPT2 001503' +ERRPT3 001507' +ERRPT4 001517' +ERRPT5 001524' +ERRPT6 001525' +ERRPT7 001541' +ERRPT8 001526' +ERRPT9 001543' +ESW 000002 SPD +EXEQSW 002000 SPD +EXPAND 000000 +F 000000 INT +F.C 001672' +F.I 001701' +F4LIB 010000 SPD +FCONSW 000020 SPD +FCRLF 001577' +FIXW 001060' +FIXWL 001067' +FIXWP 001050' +FSCN 000634' +FSCN1 000652' +FSCN2 000655' +FSW 000010 SPD +FULLC 001141' +FULLSW 000200 SPD +H 000003 INT +HIGH 001145' +HIGH0 001143' +HIGH3 001152' +IAD2 001375' +ILC 001205' +ILD 000515' +ILD1 000522' +ILD2 000527' +ILD3 000535' +ILD4 000541' +ILD5 000547' +ILD6 000525' + 1KLOAD - LOADS MACROX PAGE 42-2 + SYMBOL TABLE + +ILD9 000543' +IMD3 001400' +IOBAD 740000 +IOBKTL 040000 +IODEND 020000 +IODERR 200000 +IODTER 100000 +IOIMPM 400000 +IOWDP 000013 +IOWDPP 000363' +ISAFLG 000002 SPD +ISW 020000 SPD +JOB41 000330' EXT +JOBBLT 000134 SPD +JOBCHN 000131 SPD +JOBDDT 000331' EXT +JOBFF 000516' EXT +JOBPRO 000140 SPD +JOBREL 001121' EXT +JOBSA 000332' EXT +JOBSYM 000327' EXT +JOBUSY 000247' EXT +K 000001 SPD +LD 000000' INT +LD2 000042' +LD2B 000050' +LD2BA 000054' +LD2D 000057' +LD2DA 000057' +LD2Q 000042' +LD3 000063' +LD3A 000100' +LD3AA 000066' +LD4 000110' +LD5 000115' +LD5A 000127' +LD5B 000134' +LD5B1 000137' +LD5C 000145' +LD5C1 000165' +LD5D 000201' +LD5E 000203' +LD5E1 000205' +LD5E2 000215' +LD5E3 000225' +LD5E5 000212' +LD6 000372' +LD6A 000365' +LD6A1 000370' +LD6B 000376' +LD6C 000430' +LD6D 000433' +LD7 000437' + 1KLOAD - LOADS MACROX PAGE 42-3 + SYMBOL TABLE + +LD7A 000442' +LD7B 000446' +LD7C 000452' +LD7D 000460' +LD8 000465' +LD9 000476' +LDAC 000000 +LDDT 000614' +LDDT0 000616' +LDDT1 000622' +LDDT2 000626' +LDDT3 000627' +LDDTX 000613' +LDEND 002440' INT +LDF 000656' +LIB 000572' +LIB1 000575' +LIB2 000577' +LIB3 000605' +LIBF 000557' +LIBF1 000564' +LIBF2 000565' +LIBSW 004000 SPD +LITS 002420' +LOAD 000657' INT +LOAD1 000660' +LOAD1A 000661' +LOAD2 000676' +LOAD3 000703' +LOAD4 000704' +LOAD4A 000704' +LOCD 001211' +LOSEBI 000006 +LRAID 000610' +LRAIDX 000607' +LSTPT 001624' +MDG 001631' +N 000001 INT +NAME 001162' +NAME1 001170' +NAME2 001201' +NOEX 000275' +NSW 200000 SPD +NUTS 000002' +P 000017 INT +PDLPT 001625' +PDLST 001632' INT +PDSAV 001627' +PMS 001332' INT +PMS2 001350' +PMS3 001356' +PMS4 001372' +PP 000000 + 1KLOAD - LOADS MACROX PAGE 42-4 + SYMBOL TABLE + +PPDL 000060 SPD +PRMAP 001261' INT +PRMAP1 001301' +PRMAP2 001316' +PRMAP3 001327' +PRMAP4 001330' +PRMAP5 001332' +PRNAM 001406' +PRNAM0 001404' +PRNAM1 001405' +PRNAME 001433' +PRNUM 001407' +PRNUM0 001410' +PRNUM1 001412' +PRNUM2 001417' +PROG 000710' +PROG1 000722' +PRQ 001553' +PRWORD 001235' +PWORD 001454' INT +PWORD1 001455' +PWORD2 001456' +Q 000015 INT +R 000005 INT +RCNUM 001420' +REMSYM 001215' +REWSW 002000 SPD +RPGSW 000000 +RWORD 001243' +RWORD1 001245' +RWORD2 001251' +RWORD3 001255' +S 000004 INT +SAS1 000234' +SASYM 000227' +SDEF 001226' +SDEF1 001227' +SDEF2 001231' +SE3 001623' +SFULLC 001132' +SKIPSW 000004 SPD +SLASH 000100 SPD +SLIBSW 000400 SPD +SP1 001430' +SPACE 001431' +SPACES 001427' +SPT 001436' +SREQ 001224' +SSW 400000 SPD +START 001157' +SVA 001001' +SYM 000725' +SYM1 000741' + 1KLOAD - LOADS MACROX PAGE 42-5 + SYMBOL TABLE + +SYM1A 000755' +SYM1B 000757' +SYM1C 000761' +SYM1D 000762' +SYM2 000770' +SYM2A 001002' +SYM2B 000771' +SYM2C 001000' +SYM2W 001117' +SYM2W1 000775' +SYM2WA 001123' +SYM3 001006' +SYM3A 001035' +SYM3A1 001042' +SYM3B 001043' +SYM3X 001031' +SYM3X1 001016' +SYM3X2 001027' +SYM4 001125' +SYM4A 001130' +SYMFIX 001072' +SYMPT 000730' +SYMSW 040000 SPD +T 000010 INT +TTY1 001734' +TTYL 000052 +TYPE 001603' INT +TYPE2 001604' +TYPE3 001615' +V 000011 INT +W 000012 INT +WORD 001560' INT +WORD1 001562' +WORD2 001564' +X 000002 INT +ZEROS 002414' + PPPPPPPPPPPP IIIIIIIII PPPPPPPPPPPP +PPPPPPPPPPPP IIIIIIIII PPPPPPPPPPPP +PPPPPPPPPPPP IIIIIIIII PPPPPPPPPPPP +PPP PPP III PPP PPP +PPP PPP III PPP PPP +PPP PPP III PPP PPP +PPP PPP III PPP PPP +PPP PPP III PPP PPP +PPP PPP III PPP PPP +PPPPPPPPPPPP III PPPPPPPPPPPP +PPPPPPPPPPPP III PPPPPPPPPPPP +PPPPPPPPPPPP III PPPPPPPPPPPP +PPP III PPP +PPP III PPP +PPP III PPP +PPP III PPP +PPP III PPP +PPP III PPP +PPP IIIIIIIII PPP +PPP IIIIIIIII PPP +PPP IIIIIIIII PPP + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB1 :PIP .LST [8,200] Created: 20-April-1967 11:19:00 Printed: 24-April-1978 11:22:30 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1722 +File will be deleted after printing + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 00010 TITLE PIP V.030 MOD SANDERS/DBP 19-AUG-71 + 00020 SUBTTL VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 00040 ;PERIPHERAL INTERCHANGE PROGRAM + 00050 ;"COPYRIGHT 1968, 1969, DIGITAL EQUIPMENT CORP.,MAYNARD,MASS.,U.S.A. + + 000030 00070 VPIP==30 ;VERSION NUMBER + 000005 00080 SVER==5 ; SANDERS VERSION + + + 00110 ;WCH==0 PIP IS ASSEMBLED FOR PDP-10 AND ASSUMES NEW FORMAT DECTAPES. + 00120 ;WCH==1 PIP IS ASSEMBLED FOR PDP-6 AND ASSUMES OLD FORMAT DECTAPES. + + 00140 ;DISK30==0 PIP IS ASSEMBLED TO RUN WITH 10/40, 10/50 MONITOR SYSTEMS. + 00150 ;DISK30==1 PIP IS ASSEMBLED TO RUN WITH 10/30 DISK SYSTEM. + + 00170 ;BLOC0==0 PIP ALLOWS COPYING OF BLOCK0 (DECTAPE). + 00180 ;BLOC0==1 PIP WILL NOT ALLOW BLOCK0 TO BE COPIED. + + 00200 ;RIMSW==0 /Y SWITCH OPTION UNAVAILABLE. (ALSO UNAVAILABLE FOR OLD FORMAT DECTAPES) + 00210 ;RIMSW==1 /Y SWITCH OPTION AVAILABLE. + + 00230 ;FTDSK==0 NON DSK SYSTEM.NO CCL.SAVES CORE ON 10/40 + 00240 ;FTDSK==1 10/50 DSK SYSTEM,ALSO 10/30 DSK SYSTEM + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 2 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 00280 ;CONDITIONAL ASSEMBLY SWITCH SETUP (NORMAL CONFIGURATION) + 00290 ;--------------------------------- + + 00310 IFNDEF WCH, <WCH==0> + 00320 IFNDEF DISK30, <DISK30==0> + 00330 IFNDEF BLOC0, <BLOC0==0> + 00340 IFNDEF FTDSK, <FTDSK==0> + 00350 IFN WCH, <RIMSW==0> + 00360 IFNDEF RIMSW, <RIMSW==0> + 00370 IFNDEF K, <K==0> + + + + + 000124 00420 LOC 124 + 000124 000000 000000 00430 PIP1 ;SET REENTER ADDRESS + 000000' 00440 RELOC + 000137 00450 LOC 137 + 000137 000005 000030 00460 XWD SVER,VPIP + 000000' 00470 RELOC + + + 00500 MLON + 00510 IFDEF SALL, <SALL> + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 3 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 00540 EXTERN JOBFF,JOBSA,JOBREL + + 00560 ;FLAG ASSIGNMENTS (RIGHT HALF) + + 000001 00580 LINE==1 ;ASCII LINE MODE PROCESSING + 000002 00590 BMOD==2 ;BINARY PROCESSING + 000004 00600 TBMOD==4 ;SUPPRESS TRAILING SP, CHANGE MULTIPLE SP TO TABS + 000010 00610 DFLG==10 ;DELETE FILES MODE + 000020 00620 LFLG==20 ;LIST DIRECTORY + 000040 00630 NSMOD==40 ;IGNORE INPUT SEQUENCE NUMBERS + 000100 00640 RFLG==100 ;RENAME FILE MODE + 000200 00650 SQMOD==200 ;GENERATE SEQUENCE NUMBERS + 000400 00660 STS==400 ;END OF LINE SEEN, OUTPUT SEQUENCE NUMBER NEXT + 001000 00670 SPMOD==1000 ;SUPPRESS TRAILING SPACES + 002000 00680 XFLG==2000 ;COPY DECTAPE MODE + 004000 00690 ZFLG==4000 ;CLEAR DECTAPE DIRECTORY + 010000 00700 SUS==10000 ;SEQUENCE NUMBER GENERATION IN PROGRESS + 020000 00710 SPOK==20000 ;SPACE WAS LAST CHARACTER + 040000 00720 ESQ==40000 ;STOP OUTPUTTING SEQ NUM, RESUME OUTPUTTING DATA + 100000 00730 SNI==100000 ;DO NOT INCREMENT SEQUENCE NUMBER + 200000 00740 MTFLG==200000 ;MTA REQUEST RECEIVED + 400000 00750 OSFLG==400000 ;GENERATE SEQ. NOS. INCR. BY ONE + + 00770 ;FLAG ASSIGNMENTS (LEFT HALF) + + 000001 00790 OFLG==1 ;BLOCK 0 COPY + 000002 00800 RIMFLG==2 ;RIM FORMAT INPUT /OUT TO DTA. ILLEG IF RIMSW==0,OR WCH==1 + 000004 00810 PFLG==4 ;FORTRAN PROGRAM OUTPUT FORMAT CONVERSION + 000010 00820 PCONV==10 ;COLUMN 1 CONVERSION IN PROGRESS + 000020 00830 NEWFIL==20 ;NEW FILE JUST INITIATED + 000040 00840 CHKFLG==40 ;PARENTHESES CHECK MODE + 000100 00850 IFLG==100 ;SELECT IMAGE MODE + 000200 00860 GFLG==200 ;KEEP GOING IF THERE ARE I/O ERRORS + 000400 00870 IBFLG==400 ;SELECT IMAGE BINARY MODE + 001000 00880 JFLG==1000 ;NON-STANDARD MODE + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 4 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 00900 ;AUXFLG ASSIGNMENTS (LEFT HALF) + + 000001 00920 QFLG==1 ;PLEASE PRINT SWITCH SET + 000002 00930 NSPROT==2 ;NON-STANDARD DISK OUTPUT PROTECTION + 000004 00940 SBIN==4 ;36-BIT PR. ON REL. ETC. FILES + 000020 00950 NOMORE==20 ;IGNORE ANY SWITCHES BUT MTA FROM NOW ON + 000040 00960 CDRFLG==40 ;CONVERT COLS 73-80 TO SPACES + /C + 000100 00970 INFOFL==100 ;FLAG USED BY ERR3A: + 000200 00980 RSDCFL==200 ;USED FOR MERGING FILES, ==1 IF FILE HAS EXTENSION + 00990 ;REL,SAV,DMP,CHN OR OTHERWISE == 0 + 000400 01000 FRSTIN==400 ;THIS IS THE FIRST INPUT FILE (USED IN FILE + 01010 ;MERGE COMMAND) == 0 FOR FIRST INPUT + + 01030 ;MTAREQ ASSIGNMENTS (RIGHT HALF) + + 000001 01050 MTAFLG==1 ;MTA ADVANCE ONE FILE + 000002 01060 MTBFLG==2 ;MTA BACKSPACE ONE FILE + 000004 01070 MTTFLG==4 ;MTA SKIP TP LOGICAL EOT + 000010 01080 MTWFLG==10 ;MTA REWIND + 000020 01090 MTFFLG==20 ;MTA MARK EOF + 000040 01100 MTUFLG==40 ;MTA REWIND AND UNLOAD + 000100 01110 MTDFLG==100 ;MTA ADVANCE ONE RECORD + 000200 01120 MTPFLG==200 ;MTA BACKSPACE ONE RECORD + 000400 01130 MT8FLG==400 ;MTA SET 800 B.P.I. + 001000 01140 MT5FLG==1000 ;MTA SET 556 B.P.I. + 002000 01150 MT2FLG==2000 ;MTA SET 200 B.P.I. + 004000 01160 MTEFLG==4000 ;MTA SELECT EVEN PARITY + + 01180 ;AUXFLG ASSIGNMENTS (RIGHT HALF) + + 000001 01200 REDFLG==1 ;==1 IF ANY FILES ARE INPUT (OTHER THAN DIRECTORIES) + 000002 01210 SYSFLG==2 ;DEVICE IS SYS + 000004 01220 SYSLST==4 ;LAST DEVICE WAS SYS + 000010 01230 LPTOUT==10 ;LPT OUTPUT + 000020 01240 FFLG==20 ;LIST SHORT DISK DIRECTORY + 000040 01250 ONEOUT==40 ;ONE OUTPUT FILE INITIALIZED + 000100 01260 CDRIN==100 ;CARDS IN + 000200 01270 MTAOUT==200 ;OUTPUT TO MTA + 000400 01280 MTAIN==400 ;INPUT FROM MTA + 001000 01290 TTYIN==1000 ;INPUT FROM TTY + 002000 01300 READ1==2000 ;LOOK FOUND NEW INPUT FILE, NO READ YET. + 004000 01310 DTAOUT==4000 ;OUTPUT TO DTA + 010000 01320 DSKOUT==10000 ;OUTPUT TO DSK + 020000 01330 DTAIN==20000 ;INPUT FROM DTA + 040000 01340 DSKIN==40000 ;INPUT FROM DSK + 100000 01350 TTYOUT==100000 ;OUTPUT TO TTY + 200000 01360 PPTIN==200000 ;INPUT FROM PTR + 400000 01370 PPTOUT==400000 ;OUTPUT TO PTP + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 5 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 01390 ;CALFLG ASSIGNMENTS (RIGHT HALF) FOR DESCRIBING A BLOCK OF INFORMATION + 01400 ;FOUND BY THE COMMAND SCANNER. + + 000001 01420 FNEX==1 ;==1 WHEN FN.EX==*.*, *.EXT, FN.* (WHEN MORE + 01430 ;THAN ONE FN.EX IS IMPLIED). + 000002 01440 MATEX==2 ;FILE EXTENSIONS MUST MATCH + 000004 01450 MATFN==4 ;FILE NAMES MUST MATCH + 000010 01460 NEWDEV==10 ;A NEW INPUT DEVICE WAS GIVEN + 000020 01470 NEWPP==20 ;A NEW #P-P WAS GIVEN + 000040 01480 ASTFLG==40 ;FLAG SET WHEN FILE NAMED IN CS FOUND + 01490 ;BY LOOK ROUTINE EVEN IF FN OR EXT =* + 000100 01500 DEV==100 ;DEVICE NAME INDICATOR + 000200 01510 DVSWTH==200 ;OUTPUT DEVICE SEEN + 000400 01520 NSWTCH==400 ;INDICATES NULL NAME + 001000 01530 SSWTCH==1000 ;LEFT ARROW SEEN + 002000 01540 LISTTY==2000 ;LIST TO TTY + 004000 01550 TMPI==4000 ;INPUT DEVICE TMPCOR SEEN + 010000 01560 TMPO==10000 ;OUTPUT DEVICE TMPCOR + 020000 01570 RXFLG==20000 ;(RX) SEEN + + 000037 01590 ALLCLF==FNEX!MATEX!MATFN!NEWDEV!NEWPP + + 01610 ;DEVICE CHANNEL ASSIGNMENTS + + 000001 01630 CON==1 ;COMMAND INPUT CHANNEL + 000002 01640 OUT==2 ;OUTPUT DEVICE + 000003 01650 IN==3 ;INPUT DEVICE + 000004 01660 TAPE==4 ;MTA POSITIONING + 000005 01670 DIR==5 ;DISK DIR. READ + 000006 01680 BLKIN==6 ;INPUT FOR 10/30 DISK FILES + 000007 01690 DTDIR==7 ; DECTAPE DIR. READ(FOR PPN) + + 01710 ;ACCUMULATOR ASSIGNMENTS + + 000001 01730 T1=1 ;GENERAL PURPOSE + 000002 01740 T2=2 ;G.P. + 000003 01750 T3=3 ;G.P. + 000004 01760 CHR=4 ;INPUT CHARACTER + 000005 01770 P=5 ;PUSHDOWN POINTER + 000006 01780 FLAG=6 ;FLAG REGISTER + 000007 01790 T4=7 ;G.P. + 000010 01800 IOS=10 ;IO STATUS BITS + 000011 01810 T5=11 ;G.P. + 000012 01820 T6=12 ; G.P. + 000013 01830 AUXFLG=13 ;AUXILIARY FLAG REGISTER + 000014 01840 T7=14 ;G.P. + 000015 01850 DOUT=15 ;DIVIDED NO. FOR OUTPUT + 000016 01860 DOUT1=16 ;REMAINDER, DOUT+1 + 000017 01870 CALFLG=17 ;MORE FLAGS + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 6 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 01900 ;MISCELLANEOUS PARAMETERS + + 400000 01920 WRTLOK==400000 ;WRITE LOCK (DECTAPE) /IMPROPER I/O + 040000 01930 BIGBLK==40000 ;BLOCK TOO LARGE + 000002 01940 INBIT==2 ;DEVCHR BIT FOR DEV CAN DO INPUT + 000001 01950 OUTBIT==1 ;DEVCHR BIT FOR DEV CAN DO OUTPUT + 020000 01960 EOFBIT==20000 ;END OF FILE + 002000 01970 EOTBIT==2000 ;END OF TAPE + 000004 01980 DTABIT==4 ;DEVCHR BIT FOR DECTAPE IDENTIFICATION + 000001 01990 INHIB==1 ;OUTPUT RELEASE INHIBIT BIT + 000010 02000 TABSP==10 ;SPACES PER TAB + 000200 02010 PTRBIT==200 ;DEVCHR BIT FOR PTR + 000400 02020 PTPBIT==400 ;DEVCHR BIT FOR PTP + 200000 02030 DSKBIT==200000 ;DEVCHR BIT FOR DSK + 000020 02040 MTABIT==20 ;DEVCHR BIT FOR MTA + 040000 02050 LPTBIT==40000 ;DEVCHR BIT FOR LPT + 000010 02060 TTYBIT==10 ;DEVCHR BIT FOR TTY + 100000 02070 CDRBIT==100000 ;DEVCHR FOR CDR + 000200 02080 DENS2==200 ;MTA 200 BPI + 000400 02090 DENS5==400 ;MTA 556 BPI + 000600 02100 DENS8==600 ;MTA 800 BPI + 001000 02110 PARE==1000 ;MTA EVEN PARITY + 004000 02120 LDP==4000 ;MTA LOAD POINT STATUS + 000020 02130 HPAGE==20 + + 02150 ;MACRO DEFINITIONS + + 02170 DEFINE SKIP (J)<JRST .+1+'J> + + 02190 DEFINE LSTLIN (Z),< + 02200 SKIPA T1,[POINT 7,Z] + 02210 PUSHJ P,PUT + 02220 ILDB CHR,T1 + 02230 IFN WCH,<PUSHJ P,CCASE> + 02240 JUMPN CHR,.-2> + + 02260 DEFINE ERRPNT (X),< + 02270 JSP T1,PTEXT + 02280 ASCIZ X> + + 02300 DEFINE ERRPN2 (X),< + 02310 JSP T1,PTEXT2 + 02320 ASCIZ X> + + 02340 DEFINE ERRPNX (X),< + 02350 JSP T1,PRETXT + 02360 ASCIZ X> + + + 000000' 02390 LOW: + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 7 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 02420 ;ASCII CHARACTERS + + 000015 02440 CR==15 ;CARRIAGE RETURN + 000012 02450 LF==12 ;LINE FEED + 000014 02460 FF==14 ;FORM-FEED + 000033 02470 ALTMOD==33 ;NEWEST ALTMODE + 000175 02480 ALT175==175 ;OLDEST ALTMODE + 000176 02490 ALT176==176 ;OLDER ALTMODE + 000137 02500 LA==137 ;LEFT ARROW + 000032 02510 CZ==32 ;CONTROL Z + 000021 02520 XON==21 ;^Q,START TTY PTR + 000023 02530 XOFF==23 ;^S,STOP TTY PTR MODE + 000054 02540 COMMA==54 + 000056 02550 PERIOD==56 ;PERIOD + 000072 02560 COLON==72 + 000040 02570 SPACE==40 + 000177 02580 DEL==177 ;DELETE,RUBOUT,REPEAT MOD.35 + 000011 02590 TAB==11 ;TAB + + + 02620 ;CALLI DEFINITIONS + + 02640 OPDEF RESET [CALLI 0] + 02650 OPDEF DEVCHR [CALLI 4] + 02660 OPDEF CORE [CALLI 11] + 02670 OPDEF EXIT [CALLI 12] + 02680 OPDEF UTPCLR [CALLI 13] + 02690 OPDEF DATE [CALLI 14] + 02700 OPDEF MSTIME [CALLI 23] + 02710 OPDEF GETPPN [CALLI 24] + 02720 OPDEF PJOB [CALLI 30] + 02730 OPDEF RUN [CALLI 35] + 02740 OPDEF GETTAB [CALLI 41] + 02750 OPDEF TMPCOR [CALLI 44] + 02760 OPDEF DSKCHR [CALLI 45] + 02770 OPDEF JOBSTR [CALLI 47] + 02780 OPDEF DEVPPN [CALLI 55] + 02790 OPDEF WAIT [MTAPE 0] + + 02810 ;EXTENDED LOOKUP PARAMETERS + + 000005 02830 RBSIZ==5 ;WRITTEN FILE LENGTH + 000017 02840 RIBSTS==17 ;STATUS BITS + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 8 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + + 000000' 200000 004665' 02890 PIP1: MOVE 0,[LOW,,LOW+1] + 000001' 402000 000000' 02900 SETZM LOW + 000002' 251000 004665' 02910 BLT 0,LOWTOP + 000003' 205000 637163 02920 MOVSI (SIXBIT /SYS/) + 000004' 047000 000055 02930 DEVPPN ;FIND PP OF DEVICE SYS + 000005' 200000 003733' 02940 MOVE PP13 ;ASSUME 1,,3 IF NOT LEVELD + 000006' 202000 004037' 02950 MOVEM SYSPP ;SAVE AS SYS PP + 02960 IFN FTDSK,< + 02970 MOVE [XWD 17,11] ;STATES WORD + 02980 GETTAB ;GET IT + 02990 SETZ ;ERROR RETURN + 03000 TLNN (7B9) ;TEST FOR LEVEL D + 03010 TDZA ;NOT LEVEL D + 03020 HRROI -2 ;THIS IS LEVEL D + 03030 MOVEM LEVEL ;SAVE > + 000007' 554040 000000* 03040 IFE FTDSK,<HLRZ T1,JOBSA ;NO DSK SO USE JOBFF> + 03050 IFN FTDSK,<MOVEI T1,DSKDR ;ASSUME NO DISK FOR TEST, LOC OF DSK RTNS + 03060 MOVSI 0,(SIXBIT /DSK/) + 03070 DEVCHR ;DEVCHR REQUEST: IS THERE A DSK + 03080 JUMPE 0,P1 ;0 IF NO DISK: USE DSKDR + 03090 MOVE T1,JOBFF ;DISK: PREPARE TO SAVE C(JOBFF) + 03100 HRRZ T2,JOBREL ;HIGHEST REL LOC AVAILABLE TO USER + 03110 CAIL T2,6000 ;CURRENT SIZE 4K + 03120 JRST P1 ;YES + 03130 MOVEI T2,7777 ;NO. EXPAND TO 4K + 03140 HRRZM T1,SVJBFF ;SAVE JOBFF SO BUFFERS CAN BE CREATED + 03150 CORE T2, ;CORE UUO + 03160 JRST DERR7 ;CORE UNAVAILABLE> + 000010' 552040 004016' 03170 P1: HRRZM T1,SVJBFF ;SAVE JOBFF SO BUFFERS CAN BE CREATED + 000011' 254000 000012' 03180 JRST PIP + + 03200 IFN FTDSK,< + 03210 DERR7: ERRPNT </?4K needed/> + 03220 EXIT ;EXIT TO MONITOR> + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 9 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 000012' 047000 000000 03250 PIP: RESET ;REINITIALIZE WHEN RESTARTED MANUALLY + 03260 ;NEW COMMAND STRING SCAN STARTS HERE + 000013' 03270 PIP2: + 000013' 265440 000541' 03280 PIP2A: JSP T5,INICN1 ;INITIALIZE THE TTY AND PDL + 000014' 201000 000015 03290 MOVEI 0,CR ;TYPE CR + 000015' 136000 003757' 03300 IDPB 0,TFO+1 + 000016' 201000 000012 03310 MOVEI 0,LF ;AND LF + 000017' 136000 003757' 03320 IDPB 0,TFO+1 + 000020' 201000 000052 03330 MOVEI 0,"*" ;TYPE ASTERISK****** + 000021' 136000 003757' 03340 IDPB 0,TFO+1 ;READY TO ACCEPT + 000022' 067040 000000 03350 OUTPUT CON, ;COMMAND FROM TTY + 000023' 402000 004026' 03360 PIP2B: SETZM TOTBRK ;CLEAR PAREN COUNTER + 000024' 201000 000010 03370 MOVEI 0,TABSP ;SPACES PER TAB + 000025' 202000 004027' 03380 MOVEM 0,TABCT ;INITIALIZE TAB COUNT + 000026' 200000 003721' 03390 MOVE 0,ZRO ;ASCII /00000/ + 000027' 202000 004014' 03400 MOVEM 0,SQNUM ;INITIALIZE SEQUENCE NUMBERS + 000030' 071040 000000 03410 RELEAS CON, ;RELEASE TTY FOR USE AS IN-OUT DEVICE + + 000031' 403300 004040' 03430 MAINA1: SETZB FLAG,FILNAM ;INITIALIZE FOR FIRST/NEXT COMMAND STRING + 000032' 403540 004637' 03440 SETZB AUXFLG,DEVICE + 03450 IFN FTDSK,<HRRZI 0,(SIXBIT /SYS/) ;SYSTEM DIRECT DEV, DSK/DTA + 03460 HRLZM 0,ADSK ;PUT IN SYSTEM DEVICE> + 000033' 200000 004666' 03470 MOVE 0,[XWD FILNAM,FILNAM+1] ;SET PROJECT, PROG NO. + 000034' 251000 004136' 03480 BLT 0,AB ;ZERO OUT FILNAM - AB + 000035' 400740 000000 03490 SETZ CALFLG, ;CLEAR OTHER FLOGS + 000036' 200140 000055' 03500 MOVE T3,COMPTR ;BYTE POINTER FOR STORING CS IN BUFFER + + 03520 ;ACCUMULATE CS CHARS IN COMBUF ALLOW LONG CS ONLY FOR TTY COMMAND + + 000037' 260240 001352' 03540 COMSTO: PUSHJ P,GETTA ;GET CS CHAR + 000040' 350340 004131' 03550 AOS T4,COMCNT ;COUNT CHARS + 000041' 303340 000310 03560 CAILE T4,^D200 ;ALLOW UP TO 200 CHARS + 000042' 254000 002045' 03570 JRST ERR6B ;MORE THAN 200 CHARS + 000043' 306000 000032 03580 CAIN 0,CZ ;CHECK FOR ^Z + 000044' 260240 001415' 03590 COMASK: PUSHJ P,GETEN2 ;SET ^Z IN 0 + 000045' 136000 000003 03600 IDPB 0,T3 ;STORE IN COMBUF + 000046' 332000 004057' 03610 SKIPE COMEOF ;END-OF-FILE SET? + 000047' 254000 000056' 03620 JRST COMPRO ;YES, PROCESS CS IN COMBUF + 000050' 307000 000015 03630 CAIG 0,CR ;NOT EOF + 000051' 305000 000012 03640 CAIGE 0,LF ;LF,VT,FF,CR? + 000052' 306000 000033 03650 CAIN 0,ALTMODE ;NO, $? + 000053' 254000 000044' 03660 JRST COMASK ;YES + 000054' 254000 000037' 03670 JRST COMSTO ;NO, KEEP STORING + + 000055' 440700 004060' 03690 COMPTR: POINT 7,COMBUF + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 10 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 03720 ;******************************************************************** + 03730 ;BEGIN SCAN OF DESTINATION PORTION OF COMMAND STRING + 000056' 03740 COMPRO: + 03750 IFN FTDSK,< + 03760 MOVSI 0,(SIXBIT/DSK/) + 03770 DEVCHR ;IS THERE A DSK? + 03780 JUMPE 0,COMPRP + 03790 MOVSI 0,(SIXBIT /DSK/) ;MAKE DEFAULT DEVICE + 03800 MOVEM 0,DEVICE ;TENTATIVELY DSK> + + 000056' 071040 000000 03820 COMPRP: RELEASE CON, ;RELEASE TTY + 000057' 200000 000055' 03830 MOVE 0,COMPTR ;INITIALIZE POINTER + 000060' 202000 004132' 03840 MOVEM 0,COMPTS ;TO PICK UP CS FROM COMBUF + 000061' 260240 000557' 03850 PUSHJ P,NAME ;GO SCAN DESTINATION PORTION OF COMMAND STRING + 000062' 332000 004135' 03860 SKIPE XNAME ;NO SCAN OVERSHOOT ALLOWED + 000063' 254000 002040' 03870 JRST ERR6A + 000064' 331000 004134' 03880 SKIPL ESWTCH ;11/25/69 END OF CS ? + 000065' 254000 000073' 03890 JRST MAINC ;NO + 000066' 606740 000400 03900 TRNN CALFLG,NSWTCH ;NON-NULL DESTINATION + 000067' 602740 001000 03910 TRNE CALFLG,SSWTCH ;_ NOT SEEN? + 000070' 332000 004040' 03920 SKIPE FILNAM ;OR ANYTHING IN FILENAME + 000071' 254000 002040' 03930 JRST ERR6A ;YES, ERROR + 000072' 254000 000013' 03940 JRST PIP2 ;NO, ALL OK + + 000073' 200000 004637' 03960 MAINC: MOVE 0,DEVICE ;GET OUTPUT DEVICE NAME + 000074' 202000 004634' 03970 MOVEM 0,ODEV ;SAVE DEVICE NAME FOR LATER USAGE + 000075' 260240 000506' 03980 PUSHJ P,DEVTST ;SAVE DEVICE TYPE, SET XXXOUT.E.G. DTAOUT + 000076' 260240 000466' 03990 PUSHJ P,ABCHK ;CHECK MTA BACKSPACE/ADV VALUES + 000077' 260240 000476' 04000 PUSHJ P,PROTK ;CHECK PROTECTION + 000100' 200000 004136' 04010 MOVE 0,AB ;MTA VALUE SWITCHES + 000101' 202000 004031' 04020 MOVEM 0,ABOUT ;GET MTA CONTROL NUMBERS FO R OUT + 000102' 200000 004133' 04030 MOVE 0,AUX + 000103' 202000 004032' 04040 MOVEM 0,AUXOUT + 000104' 200000 004667' 04050 MOVE 0,[XWD FILNAM,DTON] + 000105' 251000 004047' 04060 BLT 0,DTON+3 ;SAVE DESTINATION FILE NAME + 04070 IFN FTDSK,<TRNN AUXFLG,DSKOUT ;DISK OUTPUT?> + 000106' 402000 004047' 04080 SETZM DTON+3 ;ZERO 4TH WD OF DIRECTORY ENTRY + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 11 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 000107' 620740 001000 04100 M3: TRZ CALFLG,SSWTCH ;TERMINATE DESTINATION FILE SCAN + 000110' 402000 004637' 04110 SETZM DEVICE ;DONT CARRY OVER INPUT DEVICE + 04120 IFN FTDSK,<MOVSI 0,(SIXBIT/DSK/) + 04130 DEVCHR ;IS THERE A DISK + 04140 JUMPE 0,M3A + 04150 MOVSI 0,(SIXBIT /DSK/) ;DEFAULT CASE DSK + 04160 MOVEM 0,DEVICE ;MUST NOT LET O/DEV. CARRY OVER AS I/DEV.> + 000111' 260240 000451' 04170 M3A: PUSHJ P,DESCRP ;GET A UNIT DESCRIPTOR (INPUT). + 000112' 607540 000001 04180 TLNN AUXFLG,QFLG;Q? ;SCAN INPUT PORTION OF COMMAND STRING + 000113' 254000 000132' 04190 JRST M2 ;NO + 000114' 551000 637163 04200 HRRZI 0,(SIXBIT /SYS/) ;YES MAKE INPUT DEVICE SYS + 000115' 516000 004637' 04210 HRLZM 0,DEVICE + 000116' 516000 004050' 04220 HRLZM DEVA ;SAVE COPY OF INPUT DEVICE + 000117' 200000 003727' 04230 MOVE 0,QPIP ;MAKE INPUT FILENAME QPIP + 000120' 202000 004040' 04240 MOVEM 0,FILNAM + 000121' 205000 120000 04250 MOVSI 0,(SIXBIT /*/) ;DONT RESTRICT QPIP + 000122' 202000 004041' 04260 MOVEM 0,FILEX ;EXT TO BEING NULL + 000123' 620740 000002 04270 TRZ CALFLG,MATEX ;DON'T MATCH EXTENSIONS + 000124' 660540 000002 04280 TRO AUXFLG,SYSFLG ;DEVICE IS SYS + 000125' 200000 004037' 04290 MOVE 0,SYSPP ;GET SYS PP + 000126' 202000 004043' 04300 MOVEM 0,PP ;AND SET IT + 000127' 370000 004134' 04310 SOS ESWTCH ;NO MORE COMMAND STRING + 000130' 620540 261500 04320 TRZ AUXFLG,DTAIN+DSKIN+CDRIN+PPTIN+TTYIN+MTAIN + 000131' 260240 002132' 04330 PUSHJ P,CHECK1 ;CHECK INPUT DEVICE + + 000132' 661540 000020 04350 M2: TLO AUXFLG,NOMORE ;NO MORE SWITCHES BUT MTA ALLOWED + 000133' 603300 000001 04360 TLNE FLAG,OFLG ;BLOCK 0 COPY? + 000134' 254000 003451' 04370 JRST BLOCK0 ;YES + 000135' 640300 002100 04380 TRC FLAG,XFLG+RFLG;(RX) + 000136' 646300 002100 04390 TRCN FLAG,XFLG+RFLG + 000137' 260240 000173' 04400 PUSHJ P,M5 ;YES,(RX) + 04410 IFN RIMSW,< + 04420 TLNN FLAG,RIMFLG ;RIM OUTPUT? + 04430 JRST M1 ;NO + 04440 IFE WCH,< + 04450 TRNE AUXFLG,PPTOUT ;RIM IS ONLY DTA TO PTP + 04460 TRNN AUXFLG,DTAIN!DSKIN!MTAIN + 04470 JRST ERR5B> + 04480 IFN WCH,<JRST RIMTB >> + + 000140' 201340 000001 04500 M1: MOVEI T4,1 ;ASCII LINE MODE ASSUMED + 000141' 260240 000200' 04510 PUSHJ P,OUTLOOK ;SEE IF OUTPUT DEV MTA + 000142' 260240 000154' 04520 PUSHJ P,M4 ;NOT MTA + 000143' 603300 001000 04530 TLNE FLAG,JFLG ;NON STARDARD MODE ? + 000144' 660340 000100 04540 TRO T4,100 ;TO PUNCH 029 ON CDP + 000145' 552340 004633' 04550 HRRZM T4,OMOD ;SET MODE OF OUTPUT DEV + 000146' 201340 000001 04560 MOVEI T4,1 + 000147' 260240 000204' 04570 PUSHJ P,INLOOK ;SEE IF INPUT DEV MTA + 000150' 260240 000154' 04580 PUSHJ P,M4 ;NOT MTA + 000151' 552340 004636' 04590 HRRZM T4,ININI1 ;SET MODE OF INPUT DEV + 000152' 260240 002746' 04600 PUSHJ P,FNSET ;NOW DEVICE, DEVA CORRECT FOR START + 000153' 254000 000251' 04610 JRST OMOD1 ;INIT OUTPUT DEVICE + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 12 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 04640 ;SET MODE IF /I,/B,/H, + + 000154' 607300 000100 04660 M4: TLNN FLAG,IFLG ;IMAGE BINARY MODE? + 000155' 254000 000160' 04670 JRST .+3 ;NO + 000156' 660340 000010 04680 TRO T4,10 ;IM. MODE + 000157' 620340 000001 04690 TRZ T4,1 ;CLEAR ASCII LINE MODE + + 000160' 606300 000002 04710 TRNN FLAG,BMOD ;BINARY MODE? + 000161' 254000 000164' 04720 JRST .+3 ;NO + 000162' 660340 000014 04730 TRO T4,14 ;BIN. MODE + 000163' 620340 000001 04740 TRZ T4,1 ;CLEAR ASCII LINE MODE + + 000164' 603300 000400 04760 TLNE FLAG,IBFLG ;ASCII TO START. IB MODE? + 000165' 660340 000013 04770 TRO T4,13 ;YES + 000166' 602300 002000 04780 TRNE FLAG,XFLG ;COPY MODE? + 000167' 263240 000000 04790 POPJ P, ;YES, DON'T ALTER DATA MODE + + 000170' 602300 000110 04810 TRNE FLAG,DFLG+RFLG ;DELETE OR RENAME? + 000171' 660340 000020 04820 TRO T4,20 ;DIRECTORY WILL BE WRITTEN, DON'T + 000172' 263240 000000 04830 POPJ P, ;COMPUTE WORD COUNT MODE NEEDED. + 04840 ;FORCE MONITOR TO USE WORD COUNT + 04850 ;IN FIRST DATA WORD OF BUFFER + + 000173' 620300 000100 04870 M5: TRZ FLAG,RFLG ;CLEAR /R FLAG + 000174' 660740 020000 04880 TRO CALFLG,RXFLG ;SET (RX) FLAG + 000175' 200000 004670' 04890 MOVE 0,[XWD DTON,MATCH] + 000176' 251000 004650' 04900 BLT 0,MATCH+1 ;SAVE NAME AND EXT + 000177' 263240 000000 04910 POPJ P, ;RETURN + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 13 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 04930 ;IF OUTPUT DEVICE IS MTA PERFORM ALL PRE-TRANSFER REQUESTS + 04940 ;SUCH AS REWIND. IF OUTPUT DEVICE IS MTA, AND THERE IS NO + 04950 ;INPUT DEVICE, EXIT. FOR OTHER MTA OUTPUT, PREPARE INIT + 04960 ;DENSITY AND PARITY. + + 000200' 04980 OUTLOOK: + 000200' 200140 004031' 04990 MOVE T3,ABOUT ;AB FOR OUTPUT DEV + 000201' 200040 004032' 05000 MOVE T1,AUXOUT ;AUX FOR OUTPUT DEV + 000202' 201500 003666' 05010 MOVEI T6,INOMTA ;SET TO INIT + 000203' 254000 003531' 05020 JRST MT1 ;MTA FOR OUTPUT + + + + + 05070 ;SAME FOR INPUT DEVICE. + + 000204' 332140 004040' 05090 INLOOK: SKIPE T3,FILNAM ;IF NO FILENAME + 000205' 606300 002000 05100 TRNN FLAG,XFLG ;OR NOT /X + 000206' 254000 000217' 05110 JRST INLUK1 ;CONTINUE + 000207' 332000 004044' 05120 SKIPE DTON ;IF OUTPUT NAME SET UP + 000210' 254000 000217' 05130 JRST INLUK1 ;CONTINUE + 000211' 554040 004041' 05140 HLRZ T1,FILEX ;GET EXT + 000212' 302040 120000 05150 CAIE T1,(SIXBIT /*/) ;IF EITHER IS * + 000213' 316140 003730' 05160 CAMN T3,STAR ;DON'T SET OUTNAME + 000214' 254000 000217' 05170 JRST INLUK1 ;BUT JUST CONTINUE + 000215' 202140 004044' 05180 MOVEM T3,DTON ;SET OUT NAME + 000216' 516040 004045' 05190 HRLZM T1,DTON+1 ;AND EXTENSION + 000217' 200140 004136' 05200 INLUK1: MOVE T3,AB ;ADV OR BKSPACE + 000220' 200040 004133' 05210 MOVE T1,AUX ;AUX FOR INPUT DEV + 000221' 201500 003667' 05220 MOVEI T6,INIMTA ;SET TO INIT + 000222' 254000 003531' 05230 JRST MT1 ;MTA FOR INPUT + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 14 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 05250 ;ROUTINE TO INITIALIZE OUTPUT DEVICE + + 000223' 200040 004671' 05270 OMODE: MOVE T1,[XWD OBF,IBF] + 000224' 202040 004635' 05280 MOVEM T1,ODEV+1 + 000225' 200040 004015' 05290 MOVE T1,DTJBFF ;JOBFF AFTER 2 TTY BUFS + 000226' 202040 000000* 05300 MOVEM T1,JOBFF ;SET UP + + 000227' 050100 004633' 05320 OPEN OUT,OMOD ;INITIALIZE OUTPUT DEVICE + 000230' 254000 001767' 05330 JRST ERR1 ;UNAVAILABLE ERROR + 000231' 065100 000001 05340 OUTBUF OUT,1 ;TRY ONE OUTBUFFER FOR SIZE + 000232' 250040 000226* 05350 EXCH T1,JOBFF ;JOBFF_DTJBFF+BUFSZ + 05360 ;NOTE JOBFF RESET TO DTJBFF + 000233' 274040 004015' 05370 SUB T1,DTJBFF ;T1=BUFSZ + 000234' 550000 000000* 05380 HRRZ 0,JOBREL ;HIGHEST CORE AVAILABLE + 000235' 274000 004015' 05390 SUB 0,DTJBFF ;0=TOTAL CORE AVAILABLE + 000236' 240000 777777 05400 ASH 0,-1 ;COMPUTE HOW MANY OUTPUT BUFFERS + 000237' 232000 000001 05410 IDIVM 0,T1 ;FIT IN HALF THE AVAILABLE SPACE + 000240' 201340 000223' 05420 MOVEI T4,OMODE ;SET RETURN FROM MORCOR + 000241' 305040 000001 05430 CAIGE T1,1 ;1 OR MORE THAN 1 FIT? + 000242' 254000 000262' 05440 JRST MORCOR ;NO, NEED MORE CORE + 000243' 065101 000000 05450 OUTBUF OUT,(T1) ;SET UP OUTPUT BUFFERS + 000244' 200000 003746' 05460 MOVE 0,OBF+1 + 000245' 202000 003741' 05470 MOVEM 0,SVOBF ;SAVE ORIGINAL MODE SETTING + 000246' 200000 000232* 05480 MOVE 0,JOBFF + 000247' 552000 004017' 05490 HRRZM 0,SVJBF1 ;PREPARE TO RECLAIM INBUFFER SPACE + 000250' 263240 000000 05500 POPJ P, + + 000251' 260240 000223' 05520 OMOD1: PUSHJ P,OMODE ;GO INITIALIZE OUTPUT DEVICE + 000252' 626300 004000 05530 TRZN FLAG,ZFLG ;Z COMMAND TYPED? + 000253' 254000 000275' 05540 JRST MAINA2 ;NO, + 000254' 260240 002212' 05550 PUSHJ P,DTCLR ;YES, GO CLEAR DIRECTORY + 000255' 071100 000000 05560 RELEASE OUT, + 000256' 071240 000000 05570 RELEASE DIR, + 000257' 606740 000400 05580 TRNN CALFLG,NSWTCH ;SEE IF DEVICE WAS TYPED + 000260' 254000 000251' 05590 JRST OMOD1 ;YES + 000261' 254000 000013' 05600 JRST PIP2 ;GET NEXT COMMAND + + 000262' 550000 000234* 05620 MORCOR: HRRZ 0,JOBREL ;TRY TO GET + 000263' 271000 002000 05630 ADDI 0,2000 ;1K MORE OF CORE + 000264' 047000 000011 05640 CORE ;ASK MONITOR FOR 1K CORE + 000265' 254000 000267' 05650 JRST OMODER ;NOT AVAILABLE + 000266' 254007 000000 05660 JRST (T4) ;GOT IT + + 000267' 265040 002155' 05680 OMODER: ERRPNT</?Not enough core/> + 000270' 376355 772100 + 000271' 627355 772716 + 000272' 641014 367744 + 000273' 624000 000000 + 000274' 047000 000012 05690 EXIT + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 15 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 05710 ;MAIN LOOP TO PROCESS INPUT SIDE OF CS + + + 000275' 602300 000110 05740 MAINA2: TRNE FLAG,RFLG+DFLG ;RENAME OR DELETE FILE MODE? + 000276' 254000 002432' 05750 JRST DTDELE ;YES./D,/X,OR(DX) + 05760 IFN RIMSW,< + 05770 TLNE FLAG,RIMFLG ;RIM? + 05780 JRST RIMTB ;YES./Y + 05790 > + 000277' 602300 002000 05800 TRNE FLAG,XFLG ;TRANSFER EVERYTHING MODE? + 000300' 254000 002220' 05810 JRST PRECOP ;YES./X + 05820 ;LOOP TO COPY ALL FILES BEGINS HERE FROM MAIN2 + 000301' 606540 000020 05830 MAINA3: TRNN AUXFLG,FFLG ;LIST DSK DIR SHORT? + 000302' 602300 000020 05840 TRNE FLAG,LFLG ;LIST DIRECTORY? + 000303' 254000 003017' 05850 JRST DTPDIR ;YES./F OR /L + 000304' 260240 000426' 05860 PUSHJ P,ININIT ;INITIALIZE INPUT FILE + 000305' 602540 020000 05870 TRNE AUXFLG,DTAIN ;DEC TAPE INPUT? + 000306' 260240 002701' 05880 PUSHJ P,DTADIR ;INIT DTA DIR + + 05900 IFN FTDSK,<TRNE AUXFLG,DSKIN ;NO, DISK INPUT? + 05910 PUSHJ P,DSKDIR ;OR DSK> + 000307' 260240 002566' 05920 MAINA4: PUSHJ P,LOOK ;GET A FILE TO COPY + 000310' 254000 000323' 05930 JRST MAINA5 ;NO MORE + 000311' 076140 004052' 05940 LOOKUP IN,ZRF + 000312' 254000 002003' 05950 JRST ERR3 ;LOOKUP FAILURE + 05960 IFN WCH,< + 05970 MAINA6: TRNN AUXFLG,DTAIN+DTAOUT + 05980 JRST .+5 + 05990 HLRZ 0,ZRF+1 + 06000 CAIE 0,(SIXBIT /DMP/) + 06010 IFN DISK30,<CAIN 0,(SIXBIT/SVE/)> + 06020 IFE DISK30,<CAIN 0,(SIXBIT/SAV/)> + 06030 JRST MAINA4 ;DONT COPY DMP OR SAV FILES ON DTA> + 000313' 661300 000020 06040 TLO FLAG,NEWFIL + 000314' 260240 003353' 06050 PUSHJ P,FILTYP + 000315' 602540 000040 06060 TRNE AUXFLG,ONEOUT + 000316' 254000 000333' 06070 JRST PSCANA ;OUT HAS BEEN INITIALIZED + 06080 IFE WCH,< + 000317' 260240 002412' 06090 PUSHJ P,OKBLKS> + 000320' 077100 004044' 06100 ENTER OUT,DTON ;CREATE OUTPUT FILE + 000321' 254000 002024' 06110 JRST ERR4 ;DIR. FULL OR 0 FILE NAME + 000322' 254000 000333' 06120 JRST PSCANA + + 000323' 626540 000001 06140 MAINA5: TRZN AUXFLG,REDFLG + 000324' 254000 001107' 06150 JRST IOERRN ;NEVER READ A FILE + 000325' 254000 000411' 06160 JRST MAIN1 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 16 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 000326' 602540 201500 06180 PSCANB: TRNE AUXFLG,MTAIN!CDRIN!TTYIN!PPTIN ;ON NON-DIR DEVICE? + 000327' 620740 000037 06190 TRZ CALFLG,ALLCLF ;END OF THE ONE OR MANY FILES SPECIFIED + 000330' 666540 000040 06200 TRON AUXFLG,ONEOUT ;HAS OUT JUST BEEN INIT? + 000331' 067100 000000 06210 OUTPUT OUT, ;YES, AND FIRST FILE IS EOF ONLY, INIT OUT IN + 06220 ;CASE NO MORE SOURCE FILES + 000332' 254000 000407' 06230 JRST PSCAN5 ;EMPTY FILE, CLOSE INPUT, RETURN FOR MORE + + 000333' 660540 000001 06250 PSCANA: TRO AUXFLG,REDFLG ;SET FLAG FOR INPUT FILE READ + 000334' 260240 001616' 06260 PUSHJ P,INP ;GO READ INPUT FILE + 000335' 620540 002000 06270 TRZ AUXFLG,READ1 + 000336' 260240 002376' 06280 PUSHJ P,TTYZ ;CHECK IF INPUT IS TTY + 000337' 602400 020000 06290 TRNE IOS,EOFBIT ;EOF FIRST DATA? + 000340' 254000 000326' 06300 JRST PSCANB + 000341' 336000 003744' 06310 SKIPN IBF+2 + 000342' 254000 000333' 06320 JRST PSCANA + + 000343' 660540 000040 06340 PSCAN: TRO AUXFLG,ONEOUT ;INDICATE ONE OUTPUT FILE INITED + 000344' 200000 003723' 06350 MOVE 0,OPTRA ;PRESCAN A LINE, INITIALIZE LINE BUFFER PTR + 000345' 202000 004020' 06360 MOVEM 0,OPTR + 000346' 402000 004035' 06370 SETZM CDRCNT + 000347' 260240 000553' 06380 PUSHJ P,CLRBUF ;CLEAR LINE BUFFER + 000350' 664300 000400 06390 TROA FLAG,STS ;START A FRESH LINE + 000351' 260240 000756' 06400 PSCAN3: PUSHJ P,PUT ;HERE FOR BINARY DATA + + 000352' 260240 001462' 06420 PSCAN2: PUSHJ P,GET ;GET CHARACTER + 000353' 254000 000376' 06430 JRST PSCAN1 ;END OF FILE RETURN + 000354' 616300 004672' 06440 TDNN FLAG,[XWD IFLG+IBFLG,BMOD] ;BIN. OR NO CHAR. PROCESSING + 000355' 603540 000004 06450 TLNE AUXFLG,SBIN + 000356' 254000 000351' 06460 JRST PSCAN3 ;YES + 000357' 200040 004020' 06470 MOVE T1,OPTR + 000360' 306200 000177 06480 CAIN CHR,DEL ;VJC 4/16/69 + 000361' 254000 000352' 06490 JRST PSCAN2 ; STR# 10-2615 + 000362' 316040 003722' 06500 CAMN T1,OPTMAX ;CHECK LENGTH OF LINE + 000363' 254000 001751' 06510 JRST ERR10 ;LINE TOO LONG + 000364' 136200 004020' 06520 IDPB CHR,OPTR ;DEPOSIT CHAR. IN LINE BUFFER + 000365' 307200 000024 06530 CAIG CHR,24 + 000366' 305200 000020 06540 CAIGE CHR,20 ;LINE PRINTERR CONTROL CHAR + 000367' 254000 000371' 06550 SKIP 1 ;NO + 000370' 254000 000374' 06560 JRST PSCAN4 ;YES, TREAT AS END OF LINE + 000371' 307200 000014 06570 CAIG CHR,14 + 000372' 305200 000012 06580 CAIGE CHR,12 ;END OF LINE CHARACTER? + 000373' 254000 000352' 06590 JRST PSCAN2 ;NO, SO CONTINUE + 000374' 260240 000707' 06600 PSCAN4: PUSHJ P,OUTLBF ;YES, SO DUMP THE LINE BUFFER + 000375' 254000 000343' 06610 JRST PSCAN ;SCAN THE NEXT LINE + + 000376' 135200 004020' 06630 PSCAN1: LDB CHR,OPTR ;PICK UP LAST CHAR. + 000377' 306200 000032 06640 CAIN CHR,CZ ;IS IT ^Z + 000400' 606540 001000 06650 TRNN AUXFLG,TTYIN ;FROM TTY? + 000401' 254000 000404' 06660 JRST PSCAN6 ;NO + 000402' 400200 000000 06670 SETZ CHR, ;YES,CLEAR CHAR. + 000403' 137200 004020' 06680 DPB CHR,OPTR ;AND REMOVE FROM BUFFER + 000404' 260240 000707' 06690 PSCAN6: PUSHJ P,OUTLBF ;DUMP THE REMAINING BUFFER + 000405' 602300 002000 06700 TRNE FLAG,XFLG ;COPY MODE? + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 16-1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 000406' 254000 002311' 06710 JRST COPY2A ;YES, GO COPY THE NEXT FILE + 000407' 070140 000000 06720 PSCAN5: CLOSE IN, + 000410' 254000 000307' 06730 JRST MAINA4 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 17 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 06750 ;COME HERE AFTER /L,/D,/R ON DISK OR THROUGH COPYING + + 000411' 071240 000000 06770 MAIN1: RELEAS DIR, ;RELEASE THE DIRECTORY DEVICE + 000412' 071140 000001 06780 RELEAS IN,INHIB ;RELEASE THE INPUT DEVICE + 000413' 331340 004134' 06790 SKIPL T4,ESWTCH ;MORE COMMAND STRING TO PROCESS? + 000414' 254000 000421' 06800 JRST MAIN2 ;YES + + 06820 ;COME HERE AFTER /D,/R ON DTA. ALSO FROM ABOVE + + 000415' 070100 000000 06840 MAINB: CLOSE OUT, ;CLOSE THE OUTPUT FILE + 000416' 260240 000764' 06850 PUSHJ P,OUTP1 ;CHECK THE FINAL ERROR BITS + 06860 IFN FTDSK,<TLNE AUXFLG,NSPROT ;NON-ST. PROT? + 06870 TRNN AUXFLG,DSKOUT+DTAOUT ;DISK OUT/ OR DTA + 06880 JRST MAINB1 ;NO + 06890 LDB 0,PRPTL + 06900 DPB 0,PRPTD + 06910 RENAME OUT,DTON ;SET UP RENAME REQUEST + 06920 JRST DERR6 ;DISK ERROR + 06930 MAINB1:> + 000417' 071100 000000 06940 RELEAS OUT, ;RELEASE THE OUTPUT DEVICE + 000420' 254000 000013' 06950 JRST PIP2 ;PROCESS THE NEXT COMMAND + + 000421' 260240 000451' 06970 MAIN2: PUSHJ P,DESCRP ;GET THE NEXT INPUT FILE TO PROCESS + 000422' 260240 000204' 06980 PUSHJ P,INLOOK + 000423' 260240 000154' 06990 PUSHJ P,M4 + 000424' 552340 004636' 07000 HRRZM T4,ININI1 + 000425' 254000 000301' 07010 JRST MAINA3 + 07020 ;END OF LOOP BEGINNING AT MAINA3 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 18 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 07040 ;SUBROUTINE TO INITIALIZE THE INPUT FILE + + 000426' 200040 004017' 07060 ININIT: MOVE T1,SVJBF1 ;SVJBF1=END OF OUTPUT BUFFERS + + 000427' 202040 000246* 07070 MOVEM T1,JOBFF ;COMPARE OMODE CODE + 000430' 201000 003742' 07080 MOVEI 0,IBF + 000431' 202000 004640' 07090 MOVEM 0,DEVICE+1 + 000432' 050140 004636' 07100 OPEN IN,ININI1 + 000433' 254000 001770' 07110 JRST ERR1A ;NOT AVAILABLE ERROR + 000434' 064140 000001 07120 INBUF IN,1 ;TRY ONE INPUT BUFFER FOR SIZE + 000435' 250040 000427* 07130 EXCH T1,JOBFF ;HOW MANY INBUFFERS WILL FIT? + 000436' 274040 004017' 07140 SUB T1,SVJBF1 + 000437' 550000 000262* 07150 HRRZ 0,JOBREL + 000440' 274000 000435* 07160 SUB 0,JOBFF ;JOBREL-SVJBF1=TOTAL SPACE LEFT + 000441' 232000 000001 07170 IDIVM 0,T1 + 000442' 201340 000426' 07180 MOVEI T4,ININIT ;RETURN FROM MORCOR IS ININIT + 000443' 305040 000001 07190 CAIGE T1,1 ;1 OR MORE THAN 1 FITS? + 000444' 254000 000262' 07200 JRST MORCOR ;NO, GET MORE CORE + 000445' 064141 000000 07210 INBUF IN,(T1) ;SET UP AS MANY BUFFS AS FIT + 000446' 200000 003743' 07220 MOVE 0,IBF+1 ;SAVE ORIGINAL MODE + 000447' 202000 003740' 07230 MOVEM 0,SVIBF + 000450' 263240 000000 07240 POPJ P, + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 19 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 07260 ;THIS ROUTINE GETS AN INPUT UNIT DESCRIPTOR AND, FOR + 07270 ;ADVANCE FILE AND BSPF ON MTA, ENSURES THE VALUE 1 IF NO + 07280 ;NUMBER WAS GIVEN. + + 000451' 402000 004133' 07300 DESCRP: SETZM AUX ;WILL GET ANY MTA REQ. GOING TO AUXFLG. + 000452' 622540 000002 07310 TRZE AUXFLG,SYSFLG ;IS THIS DEVICE SYS.? + 000453' 660540 000004 07320 TRO AUXFLG,SYSLST ;YES,SET SYS AS LAST DEVICE + 000454' 402000 004136' 07330 SETZM AB ;MTA VALUE SWITCHES + 000455' 402000 004042' 07340 SETZM PR ;PROTECTION + 000456' 402000 004043' 07350 SETZM PP ;PROJ-PROG NUMBER + 07360 ;******************************************************************** + 000457' 260240 000557' 07370 PUSHJ P,NAME ;GO SCAN INPUT SIDE OF COMMAND STRING + 000460' 200040 004042' 07380 MOVE T1,PR ;PROTECTION + 000461' 512040 004042' 07390 HLLZM T1,PR ;IGNORE PR FLAG IN RHS FOR INPUT + 000462' 620540 261500 07400 TRZ AUXFLG,DTAIN+DSKIN+PPTIN+MTAIN+CDRIN+TTYIN + 000463' 260240 002132' 07410 PUSHJ P,CHECK1 ;CHECK UNIT, AND FOR _ + + 07430 IFN FTDSK,<TRNN AUXFLG,DSKIN ;DSK INPUT? + 07440 JRST DESCR1 ;NO + 07450 TRNE AUXFLG,SYSFLG ;IS THIS DEVICE SYS? + 07460 JRST DESCR1 ;YES + 07470 TRNN AUXFLG,SYSLST ;WAS LAST DEVICE? + 07480 JRST DESCR1 ;NO + 07490 MOVE T2,FNPPNS ;YES, SAVE LAST [P,P] + 07500 SKIPE PP ;[P,P] ZERO? + 07510 JRST DESCR1 + 07520 MOVEM T2,PP ;YES, MAKE OLD [P,P] CURRENT [P,P] + 07530 MOVEM T2,FNPPN ;RESERVE [P,P]> + 000464' 332000 004135' 07540 DESCR1: SKIPE XNAME ;NO OVERSHOOT ALLOWED + 000465' 254000 002040' 07550 JRST ERR6A + + 000466' 554100 004136' 07570 ABCHK: HLRZ T2,AB ;NO RECS/FILES TO BACKSPACE + 000467' 326100 000471' 07580 JUMPN T2,.+2 ;IF 0 + 000470' 201100 000001 07590 MOVEI T2,1 ;GUARANTEE ONE + 000471' 506100 004136' 07600 HRLM T2,AB ;SET AB LH + + 000472' 550100 004136' 07620 HRRZ T2,AB ;NO RECS/FILES TO ADV + 000473' 326100 002746' 07630 JUMPN T2,FNSET ;IF 0 + 000474' 350000 004136' 07640 AOS AB ;GUARANTEE 1 + 000475' 254000 002746' 07650 JRST FNSET ;FIND OUT DETAILS OF FILENAME + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 20 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 07680 ;IF A NON-STANDARD OUTPUT PROTECTION IS REQUESTED, SAVE FOR RENAME. + + 000476' 200040 004042' 07700 PROTK: MOVE T1,PR + 000477' 606040 000001 07710 TRNN T1,1 + 000500' 254000 000504' 07720 JRST PROTK1 + 000501' 512040 004033' 07730 HLLZM T1,PROTS + 000502' 512040 004042' 07740 HLLZM T1,PR + 000503' 665540 000002 07750 TLOA AUXFLG,NSPROT + 000504' 403040 004042' 07760 PROTK1: SETZB T1,PR + 000505' 263240 000000 07770 POPJ P, + + 07790 ;TEST "DEVICE" TO SEE IF DESTINATION DEVICE IS DTA, DSK, PTP, LPT, TTY, MTA + 07800 ;IF ANY IS TRUE, SET RELEVANT BIT IN AUXFLG. "0" CONTAINS + 07810 ;"DEVICE" ON ENTRY. + + 000506' 047000 000004 07830 DEVTST: DEVCHR ;GET DEVICE CHARACTERISTICS + 07840 IFN FTDSK,<TLNN 0,DSKBIT ;IS OUTPUT DEV DSK? + 07850 JRST DEVTSU ;NO + 07860 TRO AUXFLG,DSKOUT ;YES, SET BIT + 07870 PUSH P,DEVICE ;SAVE DEVICE NAME + 07880 POP P,ADSK ;PUT NAME IN DSK INIT + 07890 POPJ P, + 07900 DEVTSU:> + 000507' 322000 000525' 07910 JUMPE 0,DEVER2 ;NON-EXISTENT DEVICE + 000510' 607000 000001 07920 TLNN 0,OUTBIT ;CAN DEV DO OUTPUT? + 000511' 254000 002040' 07930 JRST ERR6A ;NO + + 000512' 603000 000004 07950 TLNE 0,DTABIT ;DECTAPE? + 000513' 660540 004000 07960 TRO AUXFLG,DTAOUT ;YES + + 000514' 603000 000400 07980 TLNE 0,PTPBIT ;PAPER TAPE PUNCH? + 000515' 660540 400000 07990 TRO AUXFLG,PPTOUT + + 000516' 603000 040000 08010 TLNE 0,LPTBIT ;LINE PRINTER? + 000517' 660540 000010 08020 TRO AUXFLG,LPTOUT + + 000520' 603000 000010 08040 TLNE 0,TTYBIT ;TELETYPE? + 000521' 660540 100000 08050 TRO AUXFLG,TTYOUT + + 000522' 603000 000020 08070 TLNE 0,MTABIT ;MAGTAPE? + 000523' 660540 000200 08080 TRO AUXFLG,MTAOUT + + 000524' 263240 000000 08100 POPJ P, + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 21 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 08130 ;ROUTINE TO CHECK IF DEVICE SYS AND SET [P,P], IF NONE GIVEN + + 08150 IFN FTDSK,< + 08160 PSYSP: CAME 0,[SIXBIT /SYS/];IS DEVICE SYS? + 08170 POPJ P, ;NO + 08180 MOVE T1,SYSPP ;GET SYS PP + 08190 MOVEM T1,PP ;AND SET IT + 08200 TRO AUXFLG,SYSFLG ;SET FLAG TO INDICATE + 08210 POPJ P, ;CURRENT INPUT DEVICE IS SYS> + + 000525' 08230 DEVER1: + 000525' 200040 004637' 08240 DEVER2: MOVE T1,DEVICE + 000526' 202040 004641' 08250 DEVER: MOVEM T1,DEVERR + 000527' 265040 002155' 08260 ERRPNT </?Device /> + 000530' 376114 573322 + 000531' 617124 000000 + 000532' 260240 002201' 08270 PUSHJ P,P6BIT + 000533' 000000 004641' 08280 DEVERR + 000534' 265040 002166' 08290 ERRPN2 </does not exist!/> + 000535' 623374 571500 + 000536' 673376 420312 + 000537' 743236 372102 + 000540' 000000 000000 + 08300 ;ROUTINE TO INIT PDL POINTER AND TTY + + 000541' 201240 004153' 08320 INICN1: MOVEI P,PDL-1 ;INITIALIZE PUSHDOWN POINTER + 000542' 200000 004016' 08330 INICN2: MOVE 0,SVJBFF ;IS INITIALIZED AT PIP1 + 000543' 202000 000440* 08340 MOVEM 0,JOBFF ;SET JOBFF TO BEGINNING OF BUFFER AREA + 000544' 260240 001410' 08350 PUSHJ P,INICON ;INITIALIZE THE TTY + 000545' 064040 000001 08360 INBUF CON,1 ;ONE INBUFFER + 000546' 065040 000001 08370 OUTBUF CON,1 ;ONE OUTBUFFER + 000547' 200000 000543* 08380 MOVE 0,JOBFF + 000550' 552000 004015' 08390 HRRZM 0,DTJBFF ;JOBFF AFTER 2 TTY BUFFERS SET + 000551' 067040 000000 08400 OUTPUT CON, ;INITIALIZE BUFFER POINTERS + 000552' 254011 000000 08410 JRST (T5) + + 08430 ;ROUTINE TO CLEAR LINE BUFFER + + 000553' 402000 004174' 08450 CLRBUF: SETZM LBUF ;SUBR. TO CLEAR LINE BUFFER + 000554' 200000 004673' 08460 MOVE 0,[XWD LBUF,LBUF+1] + 000555' 251000 004377' 08470 BLT 0,LBUFE + 000556' 263240 000000 08480 POPJ P, + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 22 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 08510 ;COMMAND SCANNER ROUTINE + + 000557' 606740 001000 08530 NAME: TRNN CALFLG,SSWTCH ;RETURN NULL IF _ OR END-OF-LINE SEEN + 000560' 335000 004134' 08540 SKIPGE ESWTCH + 000561' 254000 000666' 08550 JRST NM13 ; + 000562' 620740 000400 08560 TRZ CALFLG,NSWTCH + 000563' 332040 004135' 08570 SKIPE T1,XNAME ;IF COMMAND SCAN OVERSHOOT PICKED UP + 08580 ;DEVICE NAME, USE IT NOW + 000564' 254000 000640' 08590 JRST NM7 + 000565' 620740 000100 08600 TRZ CALFLG,DEV + 08610 ;LOOK FOR FILE NAME, EXT + 000566' 402000 004041' 08620 NM1: SETZM FILEX + 000567' 402000 004040' 08630 NM2: SETZM FILNAM + 000570' 200040 000672' 08640 MOVE T1,NM15 + 08650 ;LOOP TO PICK OFF FILENAME, EXT + 000571' 260240 001175' 08660 NM3: PUSHJ P,GETCOM ;GO GET 7 BIT ASCII CHAR. FROM COMMAND STRING + 000572' 302000 000052 08670 CAIE 0,"*" ;TO ALLOW FN.EX = *.* + 000573' 301000 000101 08680 CAIL 0,"A" ;ALPHABETIC CHARACTER? + 000574' 303000 000132 08690 CAILE 0,"Z" + 000575' 254000 000602' 08700 JRST NM4A ;NO + 000576' 275000 000040 08710 NM4: SUBI 0,40 ;CONVERT TO SIXBIT + 000577' 603040 770000 08720 TLNE T1,770000 ;6 CHARS. YET? + 000600' 136000 000001 08730 IDPB 0,T1 ;NO + 000601' 254000 000571' 08740 JRST NM3 ;GET NEXT CHAR. + 000602' 301000 000060 08750 NM4A: CAIL 0,"0" ;NUMERIC? + 000603' 303000 000071 08760 CAILE 0,"9" + 000604' 254000 000606' 08770 JRST NM5 ;NO + 000605' 254000 000576' 08780 JRST NM4 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 23 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 08800 ;CHARACTER NOT *,0-9,A-Z + 000606' 307000 000015 08810 NM5: CAIG 0,CR ;CARRIAGE RETURN + 000607' 305000 000012 08820 CAIGE 0,LF ;LINE FEED + 000610' 306000 000033 08830 CAIN 0,ALTMOD ;ALTMODE + 000611' 254000 000613' 08840 JRST NM5A ;YES + 000612' 306000 000032 08850 CAIN 0,CZ ;END-OF-FILE(CCL)? + 000613' 374000 004134' 08860 NM5A: SOSA ESWTCH ;YES, OR EOF + 000614' 306000 000054 08870 CAIN 0,COMMA ;COMMA + 000615' 254000 000633' 08880 JRST NM6 ;YES + 000616' 306000 000056 08890 CAIN 0,PERIOD ;PERIOD + 000617' 254000 000654' 08900 JRST NM10 ;YES + 000620' 306000 000072 08910 CAIN 0,COLON ;COLON + 000621' 254000 000646' 08920 JRST NM9 ;YES + 000622' 306000 000073 08930 CAIN 0,";" ;IS THE REST A COMMENT? + 000623' 254000 000700' 08940 JRST NM16 ;YES + 000624' 306000 000003 08950 CAIN 0,"C"-100 ;^C + 000625' 047000 000012 08960 EXIT ;IN CASE JACCT ON ??? + 000626' 302000 000137 08970 CAIE 0,LA ;LEFT ARROW + 000627' 254000 000673' 08980 JRST NM5B ;NO + 000630' 660740 001000 08990 TRO CALFLG,SSWTCH ;SET LEFT ARROW SWITCH + 000631' 602740 000100 09000 TRNE CALFLG,DEV ;HAS A DEVICE BEEN SEEN? + 000632' 660740 000200 09010 TRO CALFLG,DVSWTH ;YES-NEEDED FOR /Z/,/D + + 000633' 336040 004041' 09030 NM6: SKIPN T1,FILEX ;COMMA ROUTINE - FIGURE OUT WHAT WE HAVE + 000634' 254000 000661' 09040 JRST NM11 ;NO FILE NAME TEMPORARILY IN FILEX + 000635' 250040 004040' 09050 EXCH T1,FILNAM ;PUT THE FILE NAME WHERE IT BELONGS + 000636' 512040 004041' 09060 HLLZM T1,FILEX ;PUT THE EXTENSION WHERE IT BELONGS + 000637' 263240 000000 09070 POPJ P, + + 000640' 402000 004135' 09090 NM7: SETZM XNAME ;USE XNAME ONLY ONCE + 000641' 306040 000001 09100 CAIN T1,1 ;1 FLAGS A NULL OVERSHOOT + 000642' 254000 000666' 09110 JRST NM13 ;RETURN NULL NAME + 000643' 202040 004637' 09120 NM8: MOVEM T1,DEVICE ;NEW DEVICE + 000644' 660740 000100 09130 TRO CALFLG,DEV + 000645' 254000 000566' 09140 JRST NM1 ;LOOK FOR A FILE NAME AND EXTENSION + + 000646' 606740 000100 09160 NM9: TRNN CALFLG,DEV ;COLON ROUTINE - IS DEVICE NAME IN YET? + 000647' 254000 000664' 09170 JRST NM12 ;NO + 000650' 336040 004040' 09180 SKIPN T1,FILNAM ;SCAN OVERSHOOT - NULL OVERSHOOT? + 000651' 201040 000001 09190 MOVEI T1,1 ;YES - FLAG NULL OVERSHOOT WITH A 1 + 000652' 202040 004135' 09200 MOVEM T1,XNAME ;XNAME = OVERSHOOT NAME + 000653' 254000 000670' 09210 JRST NM14 + 000654' 332000 004041' 09220 NM10: SKIPE FILEX + 000655' 254000 002040' 09230 JRST ERR6 + 000656' 200000 004040' 09240 MOVE 0,FILNAM ;PERIOD ROUTINE - SAVE FILE NAME + 000657' 202000 004041' 09250 MOVEM 0,FILEX ;TEMPORARILY IN FILEX + 000660' 254000 000567' 09260 JRST NM2 ;LOOK FOR EXTENSION + 000661' 336000 004040' 09270 NM11: SKIPN FILNAM ;WAS A FILE NAME SPECIFIED? + 000662' 602740 000100 09280 TRNE CALFLG,DEV ;WAS ANYTHING SPECIFIED? + 000663' 263240 000000 09290 POPJ P, ;YES + 000664' 332040 004040' 09300 NM12: SKIPE T1,FILNAM ;NULL NAME SPECIFIED? + 000665' 254000 000643' 09310 JRST NM8 ;NO - SO REMEMBER AND LOOK FOR FILE NAME + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 23-1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 000666' 660740 000400 09330 NM13: TRO CALFLG,NSWTCH ;RETURN A NULL NAME + 000667' 402000 004041' 09340 SETZM FILEX + 000670' 402000 004040' 09350 NM14: SETZM FILNAM + 000671' 263240 000000 09360 POPJ P, + + 000672' 440600 004040' 09380 NM15: POINT 6,FILNAM + 000673' 307000 000137 09390 NM5B: CAIG 0,LA ;ALLOW ANY SIXBIT CHAR NOT CS DELIMITER + 000674' 307000 000040 09400 CAIG 0,SPACE ;SPACES IGNORED + 000675' 254000 000571' 09410 JRST NM3 ;IGNORE NOT LEGAL SIXBIT + 000676' 254000 000576' 09420 JRST NM4 ;ACCEPT + + 000677' 260240 001404' 09440 PUSHJ P,GETBUF ;GET NEXT ASCII CHAR. + 000700' 303000 000012 09450 NM16: CAILE 0,LF + 000701' 307000 000015 09460 CAIG 0,CR ;IF LF,FF,VT,OR CR + 000702' 254000 000613' 09470 JRST NM5A ;RETURN + 000703' 302000 000033 09480 CAIE 0,ALTMOD ;SAME IF ALTMOD + 000704' 306000 000032 09490 CAIN 0,CZ ;OR ^Z + 000705' 254000 000613' 09500 JRST NM5A + 000706' 254000 000677' 09510 JRST NM16-1 ;GET NEXT CHARACTER + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 24 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 09540 ;ROUTINE TO OUTPUT ONE LINE FROM LBUF + + 000707' 602300 000001 09560 OUTLBF: TRNE FLAG,LINE + 000710' 254000 000717' 09570 JRST OUTLBA ;OUTPUT LINE-BY-LINE + 000711' 200100 003723' 09580 OUTCH1: MOVE T2,OPTRA ;OUTPUT CHARACTER-BY-CHARACTER + 000712' 316100 004020' 09590 OUTLB1: CAMN T2,OPTR ;ARE ALL CHARACTERS OUT? + 000713' 263240 000000 09600 POPJ P, ;YES + 000714' 134200 000002 09610 ILDB CHR,T2 ;NO + 000715' 260240 000756' 09620 PUSHJ P,PUT ;GO OUTPUT CHARACTER + 000716' 254000 000712' 09630 JRST OUTLB1 + 000717' 603300 000040 09640 OUTLBA: TLNE FLAG,CHKFLG;PAREN COUNTING? + 000720' 254000 003305' 09650 JRST OUTCHK ;YES, SO DO IT + 000721' 602540 100010 09660 TRNE AUXFLG,TTYOUT+LPTOUT + 000722' 254000 000711' 09670 JRST OUTCH1 ;IF OUTPUT TO TTY OR LPT DO CHR BY CHR + 000723' 201040 000004 09680 MOVEI T1,4 ;CLEAR UNUSED PORTION OF LAST WORD USED IN LBUF + 000724' 201100 000000 09690 MOVEI T2,0 + 000725' 200140 004020' 09700 MOVE T3,OPTR + 000726' 136100 000003 09710 IDPB T2,T3 + 000727' 367040 000726' 09720 SOJG T1,.-1 + 000730' 201100 000005 09730 MOVEI T2,5 + 000731' 550040 004020' 09740 HRRZ T1,OPTR ;COMPUTE NUMBER OF WORDS FILLED + 000732' 275040 004173' 09750 SUBI T1,LBUF-1 + 000733' 322040 000754' 09760 JUMPE T1,OUTLB3 ;DO NOTHING IF BUFFER EMPTY + 000734' 222040 000002 09770 IMULM T1,T2 ;COMPUTE CHARACTER COUNT=5 TIMES WORD CT + 09780 ;THIS IS WHERE OLD FORTRAN MODE WAS TESTED. + 000735' 317100 003747' 09790 CAMG T2,OBF+2 ;WILL LINE FIT IN THE OUTBUFFER? + 000736' 254000 000745' 09800 JRST OUTLB2 ;YES + 000737' 260240 000762' 09810 PUSHJ P,OUTP ;NO, SO DUMP BUFFER AND CHECK ERROR BITS + 000740' 201500 000001 09820 MOVEI T6 ,1 + 000741' 612500 004174' 09830 TDNE T6,LBUF ;SEQUENCED? + 000742' 606540 004000 09840 TRNN AUXFLG,DTAOUT ;YES, ON DTA? + 000743' 254000 000745' 09850 SKIP 1 ;NO + 000744' 271100 000240 09860 ADDI T2,40*5 ;LEAVE EDITING ROOM + 000745' 213000 000002 09870 OUTLB2: MOVNS T2 + 000746' 272100 003747' 09880 ADDM T2,OBF+2 ;UPDATE OUTBUFFER CHARACTER COUNT + 000747' 505100 004174' 09890 HRLI T2,LBUF + 000750' 540100 003746' 09900 HRR T2,OBF+1 + 000751' 340100 000000 09910 AOJ T2, + 000752' 273040 003746' 09920 ADDB T1,OBF+1 ;UPDATE OUTBUFFER BYTE POINTER + 000753' 251101 000000 09930 BLT T2,(T1) ;MOVE DATA TO OUTBUFFER + 000754' 263240 000000 09940 OUTLB3: POPJ P, + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 25 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 09960 ;ROUTINE TO PUT ONE CHAR INTO OUT BUFFER + + 000755' 201200 000011 09980 TABOUT: MOVEI CHR,TAB ;OUTPUT A TAB + 000756' 377000 003747' 09990 PUT: SOSG OBF+2 ;SUBR. TO OUTPUT ONE CHARACTER IN AC CHR + 000757' 260240 000762' 10000 PUSHJ P,OUTP ;IF BUFFER FULL, DUMP AND CHECK ERR BITS + 000760' 136200 003746' 10010 IDPB CHR,OBF+1 ;PUT CHARACTER IN BUFFER + 000761' 263240 000000 10020 POPJ P, + + 10040 ;ROUTINE TO DUMP OUT BUFFER WHEN FULL + + 000762' 057100 000000 10060 OUTP: OUT OUT, ;SUBR. TO DUMP OUTBUFFER AND CHECK ERR BITS + 000763' 254000 001710' 10070 JRST CPOPJZ ;NO ERRERS,BUT CLEAR IOS JUST IN CASE + 000764' 062100 000010 10080 OUTP1: GETSTS OUT,IOS ;HERE FOR BIT CHECKING ONLY + 000765' 260240 000770' 10090 PUSHJ P,OUTP4 + 000766' 060110 000000 10100 SETSTS OUT,(IOS);ERRORS WERE DETECTED + 000767' 263240 000000 10110 POPJ P, ;NO ERRORS + + 000770' 606540 000200 10130 OUTP4: TRNN AUXFLG,MTAOUT + 000771' 254000 000774' 10140 JRST .+3 + 000772' 602400 002000 10150 OUTP3: TRNE IOS,EOTBIT ;EOT? + 000773' 254000 000776' 10160 JRST .+3 ;YES + 000774' 606400 740000 10170 TRNN IOS,740000 ;ANY ERROR BITS ON? + 000775' 254000 001707' 10180 JRST CPOPJ1 ;NO + 000776' 260240 001135' 10190 PUSHJ P,COMERR ;YES + + 000777' 265440 000542' 10210 JSP T5,INICN2 ;INIT TTY + 001000' 260240 001652' 10220 PUSHJ P,QUEST + 001001' 265040 002166' 10230 ERRPN2 </Output device /> + 001002' 477536 470352 + 001003' 721014 462754 + 001004' 647074 520000 + 001005' 260240 002201' 10240 PUSHJ P,P6BIT + 001006' 000000 004634' 10250 ODEV + 001007' 336000 004044' 10260 SKIPN DTON ;ONLY IF THERE IS A FILE NAME + 001010' 254000 001014' 10270 JRST .+4 ;DON'T PRINT IF NOT + 001011' 265040 002166' 10280 ERRPN2 </: file /> + 001012' 351014 664730 + 001013' 625000 000000 + 001014' 201140 004044' 10290 MOVEI T3,DTON ;OUTPUT FILE NAME LOC + 001015' 260240 001146' 10300 PUSHJ P,FN.EX ;PRINT FILE NAME EXT + 001016' 200100 000013 10310 MOVE T2,AUXFLG + 001017' 405100 014200 10320 ANDI T2,MTAOUT+DSKOUT+DTAOUT + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 26 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 001020' 201040 001074' 10350 IOERR: MOVEI T1,TXTC ;PHYSICAL END OF TAPE + 001021' 602400 002000 10360 TRNE IOS,EOTBIT + 001022' 254000 002166' 10370 JRST PTEXT2 ;YES + + 001023' 201040 001055' 10390 MOVEI T1,TXTD2 ;7-9 PUNCH MISSING + 001024' 606100 000100 10400 TRNN T2,CDRIN + + 10420 IFN FTDSK,< + 10430 MOVEI T1,TXTD3 + 10440 TRNN T2,DSKIN!DSKOUT> + + 001025' 201040 001042' 10460 MOVEI T1,TXTD ;WRITE LOCK ERROR + 001026' 606100 074600 10470 TRNN T2,DSKIN+DSKOUT+DTAIN+DTAOUT+MTAIN+MTAOUT + + 001027' 201040 001047' 10490 MOVEI T1,TXTD1 + 001030' 602400 400000 10500 TRNE IOS,WRTLOK + 001031' 254000 002166' 10510 JRST PTEXT2 + + 001032' 201040 001062' 10530 MOVEI T1,TXTA ;DEVICE ERROR + 001033' 602400 200000 10540 TRNE IOS,200000 + 001034' 254000 002166' 10550 JRST PTEXT2 + + 001035' 201040 001066' 10570 MOVEI T1,TXTB ;CHECKSUM/PARITY ERROR + 001036' 602400 100000 10580 TRNE IOS,100000 + 001037' 254000 002166' 10590 JRST PTEXT2 + + 10610 IFN FTDSK,< + 10620 HRRZ T1,TABLE+14 + 10630 TRNN T2,DSKOUT ;QUOTA EXCEDED> + + 001040' 201040 001100' 10650 MOVEI T1,TXTC1 ;BLOCK TOO LARGE + 001041' 254000 002166' 10660 JRST PTEXT2 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 27 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 10680 ;DEVICE ERROR COMMENTS + + 001042' 737455 172312 10700 TXTD: ASCIZ /write (lock) error/ + 001043' 201215 467706 + 001044' 655224 062744 + 001045' 713376 200000 + 001046' 254000 001107' 10710 JRST IOERRN ;NO RECOVERY + + 001047' 613235 660744 10730 TXTD1: ASCIZ /binary data incomplete/ + 001050' 745014 460750 + 001051' 605015 167306 + 001052' 677336 066312 + 001053' 723120 000000 + 001054' 254000 001114' 10740 JRST IOERRG + + 001055' 335327 120340 10760 TXTD2: ASCIZ /7-9 punch missing/ + 001056' 727354 364100 + 001057' 667236 371722 + 001060' 673160 000000 + 001061' 254000 001114' 10770 JRST IOERRG + + 001062' 623136 664706 10790 TXTA: ASCIZ /device error/ + 001063' 625014 571344 + 001064' 677440 000000 + 001065' 254000 001114' 10800 JRST IOERRG + + 001066' 617214 561726 10820 TXTB: ASCIZ /checksum or parity error/ + 001067' 717535 520336 + 001070' 711016 060744 + 001071' 647517 120312 + 001072' 713455 771000 + 001073' 254000 001114' 10830 JRST IOERRG + + 001074' 703217 171722 10850 TXTC: ASCIZ /physical eot/ + 001075' 617035 420312 + 001076' 677500 000000 + 001077' 254000 001114' 10860 JRST IOERRG + + 001100' 613315 761726 10880 TXTC1: ASCIZ /block or block number too large/ + 001101' 203376 220304 + 001102' 663374 365500 + 001103' 673535 561312 + 001104' 711016 467736 + 001105' 203314 171316 + 001106' 624000 000000 + 10890 ;FALLS THROUGH TO IOERRN + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 28 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 001107' 071200 000000 10920 IOERRN: RELEAS TAPE, ;NO RECOVERY ERRORS EXIT HERE + 001110' 071240 000000 10930 RELEAS DIR, + 001111' 071100 000000 10940 RELEAS OUT, + 001112' 071140 000000 10950 RELEAS IN, + 10960 IFN DISK30,< + 10970 RELEAS BLKIN,> + 001113' 254000 000013' 10980 JRST PIP2 ;GET NEXT COMMAND + + 11000 IFN FTDSK,< + 11010 TXTD3: ASCIZ /monitor detected software error/> + + 11030 ;TEST IF /G FLAG(IGNORE ERRORS) SET + + 001114' 607300 000200 11050 IOERRG: TLNN FLAG,GFLG ;PRINTED CURRENT MESSAGE + 001115' 254000 001107' 11060 JRST IOERRN ;NO RECOVERY + + 11080 ERRPN2</ + 001116' 265040 002166' 11090 /> ;PRINT CR, LF DON'T MOVE> + 001117' 064240 000000 + + 001120' 071040 000000 11110 RELEAS CON, + 001121' 602540 100000 11120 TRNE AUXFLG,TTYOUT ;TTY OUTPUT DEVICE? + 001122' 260240 000223' 11130 PUSHJ P,OMODE ;YES, INIT OUTPUT DEVICE + 001123' 602540 001000 11140 TRNE AUXFLG,TTYIN ;REINIT TTYIN,TTYOUT + 001124' 260240 000426' 11150 PUSHJ P,ININIT + 001125' 620400 740000 11160 TRZ IOS,740000 ;CLEAR FILE STATUS, I/O ERRORS + 001126' 602100 000600 11170 TRNE T2,MTAIN+MTAOUT + 001127' 620400 002000 11180 TRZ IOS,EOTBIT ;CLEAR PHYSICAL EOT I/O ERROR + 001130' 204000 004674' 11190 MOVS 0,[XWD 1,SAVAC] + 001131' 251000 000003 11200 BLT 0,3 + 001132' 200440 003764' 11210 MOVE T5,SAVAC+3 + 001133' 200500 003765' 11220 MOVE T6,SAVAC+4 + 001134' 263240 000000 11230 POPJ P, + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 29 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 001135' 200000 004674' 11260 COMERR: MOVE 0,[XWD 1,SAVAC] ;SAVE ACS T1,T2,T3,T5,T6 + 001136' 251000 003763' 11270 BLT 0,SAVAC+2 + 001137' 202440 003764' 11280 MOVEM T5,SAVAC+3 + 001140' 202500 003765' 11290 MOVEM T6,SAVAC+4 + 001141' 602540 100000 11300 TRNE AUXFLG,TTYOUT ;RELEASE ANY TTYIO + 001142' 071100 000000 11310 RELEAS OUT, + 001143' 602540 001000 11320 TRNE AUXFLG,TTYIN + 001144' 071140 000000 11330 RELEAS IN, + 001145' 263240 000000 11340 POPJ P, + 11350 ;PRINT FILE NAME AND EXTENSION FROM (T3), 1(T3). + + 001146' 200043 000000 11370 FN.EX: MOVE T1,(T3) ;T1=FILENAME + 001147' 554503 000001 11380 HLRZ T6,1(T3) ;T6=FILE EXT + 001150' 306500 654644 11390 CAIN T6,(SIXBIT /UFD/) + 001151' 400040 000000 11400 SETZ T1, ;UFD FILES ONLY ARE ASSUMED TO HAVE FILENAME + 001152' 202040 004642' 11410 MOVEM T1,DERR2 ;OF NUMERIC FORM (#,# P-P NUMBER). + 001153' 322500 001166' 11420 JUMPE T6,DERR2A ;FILE EXT=0? + 001154' 302500 654644 11430 CAIE T6,(SIXBIT /UFD/) + 001155' 254000 001165' 11440 JRST DERR2B ;NO + + 001156' 554643 000000 11460 HLRZ DOUT,(T3) ;YES, GET PROJ. NO. + 001157' 201100 002175' 11470 MOVEI T2,PUTCON ;PRINT PROJ-PROG. NO. + 001160' 260240 003235' 11480 PUSHJ P,OUTDC1 ;CONVERT TO ASCII + + 001161' 201200 000054 11500 MOVEI CHR,COMMA + 001162' 260240 002175' 11510 PUSHJ P,PUTCON + + 001163' 550643 000000 11530 HRRZ DOUT,(T3) ;GET PROG. NO. + 001164' 260240 003235' 11540 PUSHJ P,OUTDC1 ;CONVERT TO ASCII + + 001165' 661500 000016 11560 DERR2B: TLO T6,"."-40 ;PUT SIXBIT PERIOD + 001166' 202500 004643' 11570 DERR2A: MOVEM T6,DERR2+1 ;INTO EXTENSION + 001167' 260240 002201' 11580 PUSHJ P,P6BIT + 001170' 000000 004642' 11590 DERR2 + 001171' 260240 002201' 11600 PUSHJ P,P6BIT + 001172' 000000 004643' 11610 DERR2+1 + 001173' 201200 000040 11620 MOVEI CHR," " + 001174' 254000 002175' 11630 JRST PUTCON + + + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 30 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 11690 ;THIS ROUTINE GETS A 7 BIT ASCII CHARACTER FROM THE COMMAND STRING + 11700 ;AND RETURNS IT TO THE COMMAND SCANNER ROUTINE (NAME) IN AC0 + + 001175' 260240 001404' 11720 GETCOM: PUSHJ P,GETBUF + 001176' 306000 000057 11730 CAIN 0,"/" ;SINGLE CHARACTER SWITCH + 001177' 254000 001300' 11740 JRST GETT6 + 001200' 306000 000050 11750 CAIN 0,"(" ;LOOK FOR (MULTI-CHAR.) SWITCH + 001201' 254000 001252' 11760 JRST GETT3 + 001202' 306000 000074 11770 CAIN 0,"<" ;GO LOOK FOR PROTECTION + 001203' 254000 001223' 11780 JRST GETT9 + 001204' 302000 000133 11790 CAIE 0,"[" + 001205' 263240 000000 11800 POPJ P, + + 001206' 260240 001236' 11820 GETT10: PUSHJ P,GETDEC ;LOOK FOR PROJECT-PROGRAMMER NUMBER + 001207' 303600 777777 11830 CAILE T7,-1 ;GREATER THAN HALF WORD? + 001210' 254000 002107' 11840 JRST ERR2A ;YES, ERROR + 001211' 302000 000054 11850 CAIE 0,"," ;SEPARATOR? + 001212' 254000 001232' 11860 JRST GETUPJ ;OR TERMINATOR (NON-NUMERIC) + 001213' 516600 004043' 11870 HRLZM T7,PP + 001214' 260240 001236' 11880 PUSHJ P,GETDEC + 001215' 303600 777777 11890 CAILE T7,-1 + 001216' 254000 002107' 11900 JRST ERR2A + + 001217' 542600 004043' 11920 GETT11: HRRM T7,PP + 001220' 306000 000135 11930 CAIN 0,"]" ;FORCE CORRECT TERMINATOR + 001221' 254000 001175' 11940 JRST GETCOM + 001222' 254000 002076' 11950 JRST ERR2 + + 001223' 260240 001235' 11970 GETT9: PUSHJ P,GETOCT + 001224' 306000 000076 11980 CAIN 0,">" ;TERMINATE ON RIGHT BRKT ONLY + 001225' 303600 000777 11990 CAILE T7,777 ;PR. IN RANGE? + 001226' 254000 002107' 12000 JRST ERR2A + 001227' 241600 777767 12010 ROT T7,-11 + 001230' 522600 004042' 12020 HLLOM T7,PR ;RHS=1'S MEANS <> SEEN (PR MAY BE 0) + 001231' 254000 001175' 12030 JRST GETCOM + + 001232' 200440 003734' 12050 GETUPJ: MOVE T5,UPROJ + 001233' 516440 004043' 12060 HRLZM T5,PP + 001234' 254000 001217' 12070 JRST GETT11 + 001235' 334440 004675' 12080 GETOCT: SKIPA T5,[EXP 10] + 001236' 201440 000012 12090 GETDEC: MOVEI T5,12 + 001237' 201600 000000 12100 GETNUM: MOVEI T7,0 ;TO PICK UP P-P NUMBER + 001240' 260240 001404' 12110 GETN1: PUSHJ P,GETBUF ;AND PROTECTION + 001241' 306000 000040 12120 CAIN 0," " ;IGNORE SPACES + 001242' 254000 001240' 12130 JRST GETN1 + 001243' 301000 000060 12140 CAIL 0,"0" + 001244' 301011 000060 12150 CAIL 0,"0"(T5) + 001245' 263240 000000 12160 POPJ P, ;GOT A NON-NUMERIC + 001246' 220600 000011 12170 IMUL T7,T5 ; MULTIPLY BY RADIX + 001247' 275000 000060 12180 SUBI 0,"0" + 001250' 270600 000000 12190 ADD T7,0 ; ADD DIGIT + 001251' 254000 001240' 12200 JRST GETN1 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 31 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 001252' 260240 001320' 12220 GETT3: PUSHJ P,GETT5 ;PROCESS SWITCH CHARACTER + 001253' 306000 000051 12230 CAIN 0,")" ;CLOSING PAREN? + 001254' 254000 001175' 12240 JRST GETCOM ;YES + 001255' 306000 000115 12250 CAIN 0,"M" ;MTA FLAG? + 001256' 660300 200000 12260 TRO FLAG, MTFLG ;SET MTA, LOOK FOR MULTI CHAR. SWITCH + 001257' 302000 000043 12270 CAIE 0,"#" ;MTA# + 001260' 254000 001252' 12280 JRST GETT3 ;NO + 001261' 606300 200000 12290 TRNN FLAG,MTFLG ;ONLY LOOK AFTER # IF MTFLG IS ON. + 001262' 254000 002040' 12300 JRST ERR6A ;I.E. IF MT SWITCH IS IN PROGRESS. + 001263' 260240 001305' 12310 PUSHJ P,GETNUD ;GET A NUMBER + 001264' 302000 000104 12320 CAIE 0,"D" ;TERMINATED BY D? + 001265' 306000 000101 12330 CAIN 0,"A" ;TERMINATED BY A? + 001266' 254000 001276' 12340 JRST GETT3A ;YES, MARK AB UPPER + 001267' 302000 000120 12350 CAIE 0,"P" ;ONLY A,D,P AND B CAN BE + 001270' 306000 000102 12360 CAIN 0,"B" ;PRECEDED BY #. + 001271' 254000 001273' 12370 SKIP 1 + 001272' 254000 002040' 12380 JRST ERR6A + 001273' 542600 004136' 12390 HRRM T7,AB ;NO. FILES/RECS TO ADVANCE + 12400 ;GOES IN AB (RH) + 001274' 260240 001321' 12410 GETT3B: PUSHJ P,GETT5A + 001275' 254000 001252' 12420 JRST GETT3 + + 001276' 506600 004136' 12440 GETT3A: HRLM T7,AB ;NO. FILES/RECS TO BACK SPACE + 001277' 254000 001274' 12450 JRST GETT3B ;GOES IN AB (LH) + + 001300' 260240 001320' 12470 GETT6: PUSHJ P,GETT5 ;PROCESS ONE SWITCH CHAR + 001301' 302000 000115 12480 CAIE 0,"M" + 001302' 306000 000051 12490 CAIN 0,")" ;THESE ARE ILLEGAL 1-SWITCH CHARS. + 001303' 254000 002040' 12500 JRST ERR6A + 001304' 254000 001175' 12510 JRST GETCOM + + 001305' 201600 000000 12530 GETNUD: MOVEI T7,0 ;GET A DECIMAL NUMBER + 001306' 260240 001404' 12540 GETN2: PUSHJ P,GETBUF ;GET CHAR FROM COMMAND STRING + 001307' 306000 000040 12550 CAIN 0,SPACE ;SPACE? + 001310' 254000 001306' 12560 JRST GETN2 ;YES, IGNORE + 001311' 301000 000060 12570 CAIL 0,"0" ;NUMBER? + 001312' 303000 000071 12580 CAILE 0,"9" + 001313' 263240 000000 12590 POPJ P, ;NO + 001314' 221600 000012 12600 IMULI T7,^D10 ;T7*10 + 001315' 405000 000017 12610 ANDI 0,17 ;ADD ON LAST DIGIT + 001316' 270600 000000 12620 ADD T7,0 ;+ LOW 4 BITS + 001317' 254000 001306' 12630 JRST GETN2 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 32 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 12660 ;GET NEXT COMMAND STRING CHAR(SWITCH),CHECK WITH TABLE,SET FLAGS + + 001320' 260240 001404' 12680 GETT5: PUSHJ P,GETBUF ;GET CHAR FROM COMMAND STRING + 001321' 200100 004676' 12690 GETT5A: MOVE T2,[XWD 350700,DISPTB] ;SET DISPTB NEXT SEARCH + 001322' 201500 004056' 12700 MOVEI T6,MTAREQ ;SET MTAREQ NEXT SEARCH + + 001323' 606300 200000 12720 TRNN FLAG,MTFLG ;SET UP TABLE TO SEARCH AND FLAG TO SET. + 001324' 541100 001436' 12730 HRRI T2,DISPTA ;PUT IN BYTE POINTER, NOT MTA REQUEST + + 12750 ;SET TO LOOK AT NON-MTA LETTERS FIRST + + 001325' 606300 200000 12770 TRNN FLAG,MTFLG ;IF MTFLG SET, START AT DISPTB AND STORE RESULT IN + 001326' 201500 000013 12780 MOVEI T6,AUXFLG ;MTAREQ, ELSE START AT DISPTA AND STORE RESULT IN + 12790 ;AUXFLG OR FLAG + 12800 ;GET FIRST CHAR DISPTA OR DISPTB, LOOK FOR MATCH, SET SWITCH FLAGS. + + 001327' 135140 000002 12820 GETT7: LDB T3,T2 ;COMPARE WITH LEFT 7 BITS OF + 001330' 326140 001335' 12830 JUMPN T3,GETT8 ;TABLE ENTRIES + 001331' 620300 200000 12840 TRZ FLAG, MTFLG ;SEARCHED TABLE 1 (DISPTB) DROP MTA FLAG + 001332' 201500 000013 12850 MOVEI T6,AUXFLG ;SET AUXFLG NEXT TABLE SEARCH + 001333' 603540 000020 12860 TLNE AUXFLG,NOMORE ;AFTER FIRST INPUT DEVICE ONLY ACCEPT MTA FLAGS + 001334' 263240 000000 12870 POPJ P, + + 001335' 306140 000001 12890 GETT8: CAIN T3,1 ;END OF DISPTA 1ST HALF? + 001336' 201500 000006 12900 MOVEI T6,FLAG ;YES, SEARCH DISPTA 2ND HALF FROM NOW ON + 001337' 306140 000002 12910 CAIN T3,2 ;END OF DISPTA 2ND HALF? + 001340' 254000 002040' 12920 JRST ERR6A ;SEARCHED TABLE 3, ERROR EXIT + 001341' 312140 000000 12930 CAME T3,0 ;MATCHING CHARACTER? + 001342' 344100 001327' 12940 AOJA T2,GETT7 ;NO, GET NEXT SWITCH IN TABLE. + + 001343' 200442 000000 12960 MOVE T5,(T2) ;YES, SET FLAG OR AUXFLG OR MTAREQ + 001344' 436452 000000 12970 ORM T5,(T6) ;FLAG OR AUXFLG + 001345' 602300 200000 12980 TRNE FLAG,MTFLG + 001346' 436440 004133' 12990 ORM T5,AUX ;MTA REQUESTS SAVED IN AUX + 13000 IFE RIMSW,< + 001347' 603300 000002 13010 TLNE FLAG,RIMFLG + 001350' 254000 004652' 13020 JRST RIMTB ;NO RIM IF RIMSW=0 + 13030 > ;PRINT ERROR MESSAGE + 001351' 263240 000000 13040 POPJ P, ;EXIT ON MATCHING CHAR + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 33 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 13070 ;ROUTINE TO GET ONE TTY OR CCL COMMAND STRING CHAR INTO AC 0 + + 001352' 13090 GETTA: + + 001352' 373000 003755' 13110 SOSLE TFI+2 ;SUBR TO GET ONE TTY CHAR IN AC 0 + 001353' 254000 001371' 13120 JRST GETT2 ;BUFFER NOT EMPTY + 001354' 200000 003753' 13130 MOVE 0,TFI ;BUFFER EMPTY, SAVE + 001355' 200440 003756' 13140 MOVE T5,TFO ;CURRENT BUFFER LOCS + 001356' 260240 001410' 13150 PUSHJ P,INICON ;BUFFER EMPTY SO RE-ATTACH TTY + 001357' 562000 003753' 13160 HRROM 0,TFI ;RESTORE OLD BUFFER LOCS + 001360' 562440 003756' 13170 HRROM T5,TFO ;USE PREVIOUSLY ASSIGNED I/O BUF. FOR TTY + 001361' 200440 004131' 13180 MOVE T5,COMCNT ;DONT TYPE CR,LF + 001362' 307440 000105 13190 CAIG T5,^D69 ;FOR SHORT LINE + 001363' 254000 001365' 13200 JRST GETTIN + 001364' 260240 002735' 13210 PUSHJ P,INFO2 ;TYPE CR,LF + 001365' 066040 000000 13220 GETTIN: INPUT CON, ;GET THE NEXT LINE + 001366' 200440 003755' 13230 MOVE T5,TFI+2 ;SAVE CHAR COUNT + 001367' 071040 000000 13240 RELEAS CON, ;LET GO OF TTY FOR USE AS IN-OUT DEVICE + 001370' 202440 003755' 13250 MOVEM T5,TFI+2 ;RESTORE CHAR COUNT LOST DURING RELEASE + 001371' 134000 003754' 13260 GETT2: ILDB 0,TFI+1 ;FETCH CHAR + 001372' 302000 000175 13270 GETT4: CAIE 0,ALT175 ;OLD ALTMODE? + 001373' 306000 000176 13280 CAIN 0,ALT176 + 001374' 201000 000033 13290 MOVEI 0,ALTMOD ;YES,MAKE NEW ALTMOD + 001375' 322000 001352' 13300 JUMPE 0,GETTA ;IGNORE NULL CHARS + 001376' 301000 000140 13310 CAIL 0,140 ;LOWER CASE? + 001377' 620000 000040 13320 TRZ 0,40 ;YES MAKE UPPER CASE? + 001400' 302000 000021 13330 CAIE 0,XON ;IGNORE XON,XOFF ONLY FOR + 001401' 306000 000023 13340 CAIN 0,XOFF ;TTY SERVICE TO SIGNAL TTY + 001402' 254000 001352' 13350 JRST GETTA ;PTR READ IN MODE + 001403' 263240 000000 13360 POPJ P, + + 13380 ;ROUTINE TO GET ONE TTY CHAR FROM COMBUF INTO AC0 + + 001404' 375000 004131' 13400 GETBUF: SOSGE COMCNT ;ANY CHARS LEFT? + 001405' 254000 002045' 13410 JRST ERR6B ;NO, COMMAND ERROR + 001406' 134000 004132' 13420 ILDB 0,COMPTS ;PICK UP CHAR FROM COMBUF + 001407' 263240 000000 13430 POPJ P, + + 13450 ;ROUTINE TO INITIALIZE THE TTY, ASCII LINE MODE + + 001410' 041040 000001 13470 INICON: INIT CON,1 ;SUBR TO INITIALIZE THE TTY + 001411' 646471 000000 13480 SIXBIT /TTY/ + 001412' 003756' 003753' 13490 XWD TFO,TFI ;TTY OUT/IN BUFFER HEADERS + 001413' 047000 000012 13500 EXIT ;IF TTY NOT AVAILABLE,FATAL.JOB DET? + 001414' 263240 000000 13510 POPJ P, + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 34 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 13530 ;GET 7 BIT ASCII CHARACTER - INPUT FROM CCL COMMAND FILE + + 001415' 476000 004057' 13550 GETEN2: SETOM COMEOF ;INDICATE END OF FILE + 001416' 201000 000032 13560 MOVEI 0,CZ ;NEEDED TO TERM CCL CS SCAN + 001417' 263240 000000 13570 POPJ P, + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 35 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 13590 ;TABLE OF RECOGNIZED COMMAND LETTERS AND CORRESPONDING FLAG BITS + + 13610 DEFINE DISP (A,B) + 13620 < XWD <"A">*4000,B> + 13630 ;MAGTAPE SWITCHES AND FLAG BITS. TABLE 1 (MTAREQ) + 001420' 404000 000001 13640 DISPTB: DISP A,MTAFLG + 001421' 410000 000002 13650 DISP B,MTBFLG + 001422' 520000 000004 13660 DISP T,MTTFLG + 001423' 534000 000010 13670 DISP W,MTWFLG + 001424' 340000 000400 13680 DISP 8,MT8FLG + 001425' 324000 001000 13690 DISP 5,MT5FLG + 001426' 310000 002000 13700 DISP 2,MT2FLG + 001427' 424000 004000 13710 DISP E,MTEFLG + 001430' 524000 000040 13720 DISP U,MTUFLG + 001431' 430000 000020 13730 DISP F,MTFFLG + 001432' 420000 000100 13740 DISP D,MTDFLG + 001433' 500000 000200 13750 DISP P,MTPFLG + 001434' 214000 000000 13760 DISP #,0 + 001435' 000000 000000 13770 OCT 000000000000 + 13780 ;1ST BYTE 0=END OF DISPTB + 13790 ;------------------------ + 13800 ;COMMAND STRING LETTERS AND FLAG BITS. TABLE 2 (AUXFLG) + 001436' 504001 000000 13810 DISPTA: XWD <"Q">*4000+QFLG,0 + 001437' 424040 000000 13820 XWD <"E">*4000+CDRFLG,0 + 001440' 430000 000020 13830 DISP F,FFLG + 001441' 004000 000000 13840 OCT 004000000000 + 13850 ;1ST BYTE 1=END OF DISPTA 1ST HALF + 13860 ;------------------------ + 13870 ;COMMAND STRING LETTERS AND FLAG BITS. TABLE 3 (FLAG) + 001442' 404000 000001 13880 DISP A,LINE + 001443' 410000 000002 13890 DISP B,BMOD + 13900 IFN,K,< DISP C,TBMOD + 13910 DISP D,DFLG + 13920 DISP L,LFLG> + 001444' 464000 000000 13930 DISP M,0 + 001445' 244000 000000 13940 DISP ),0 + 001446' 470000 000040 13950 DISP N,NSMOD + 001447' 474000 400640 13960 DISP O,SQMOD+NSMOD+STS+OSFLG + 001450' 500014 000000 13970 XWD <"P">*4000+PFLG+PCONV,0 + 13980 IFN,K< DISP R,RFLG> + 001451' 514000 000640 13990 DISP S,SQMOD+NSMOD+STS + 14000 IFN,K< DISP T,SPMOD + 14010 XWD <"V">*4000+CHKFLG,LINE + 14020 DISP X,XFLG> + 001452' 550000 004000 14030 DISP Z,ZFLG + 001453' 524001 000000 14040 XWD <"U">*4000+OFLG,0 + 001454' 544402 000000 14050 XWD <"Y">*4000+IBFLG+RIMFLG,0 + 001455' 451000 000000 14060 XWD <"J">*4000+JFLG,0 + 001456' 444100 000000 14070 XWD <"I">*4000+IFLG,0 + 001457' 440400 000000 14080 XWD <"H">*4000+IBFLG,0 + 001460' 434200 000000 14090 XWD <"G">*4000+GFLG,0 + 001461' 010000 000000 14100 OCT 010000000000 + 14110 ;FIRST BYTE 2=END OF DISPTA 2ND HALF + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 36 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 14130 ;SUBR TO GET NEXT CHAR INTO AC CHR + 14140 ;NO SKIP RETURN IS END OF FILE, SINGLE SKIP IS NORMAL RETURN + + 001462' 607300 000020 14160 GET: TLNN FLAG,NEWFIL ;NEW FILE? + 001463' 627300 000030 14170 TLZN FLAG,PCONV+NEWFIL ;NO,CONVERT THIS CHAR? + 001464' 254000 001506' 14180 JRST GETPC1 ;YES + 001465' 135200 003743' 14190 LDB CHR,IBF+1 ;GET CHAR + 001466' 306200 000040 14200 CAIN CHR," " ;SPACE? + 001467' 254000 001544' 14210 JRST GETPC2 ;YES, CONVERT TO LINE FEED + 001470' 307200 000063 14220 CAIG CHR,"3" ;IS THE CHAR A PROPER FORMAT CONTROL CHAR? + 001471' 305200 000052 14230 CAIGE CHR,"*" + 001472' 254000 001542' 14240 JRST GETPC3 ;NO, SO OUTPUT LINE FEED FOLLOWED BY BAD CHAR + 001473' 307200 000056 14250 CAIG CHR,"." ;USE LEFT HALF OF TABLE? + 001474' 334204 001474' 14260 SKIPA CHR,PCHTAB-<"*">(CHR) + 001475' 204204 001467' 14270 MOVS CHR,PCHTAB-<"/">(CHR) + 001476' 137200 003743' 14280 GETPC4: DPB CHR,IBF+1 ;CLOBBER OLD CHAR, USUALLY BECOMES NULL + 001477' 242200 777771 14290 LSH CHR,-7 ;BUT OTHERWISE BECOMES ANOTHER FORMAT CHAR + 001500' 405200 000377 14300 ANDI CHR,377 ;EXTRACT THE CHAR TO BE OUTPUT + 001501' 622200 000200 14310 TRZE CHR,200 ;=1 FOR GENERATING MULTIPLE LINE FEEDS + 001502' 661300 000010 14320 TLO FLAG,PCONV ;CONTINUE TO CONVERT + 001503' 326200 001707' 14330 JUMPN CHR,CPOPJ1;OUTPUT THE GENERATED CHAR UNLESS NULL + 001504' 262245 000000 14340 POP P,(P) ;IGNORE NULL CHARS + 001505' 254000 000374' 14350 JRST PSCAN4 ;DUMP THE LINE BUFFER + 001506' 606300 010000 14360 GETPC1: TRNN FLAG,SUS ;SUPPLYING SEQ. NUM. NOW? + 001507' 254000 001532' 14370 JRST GET2 ;NO + 001510' 134200 004036' 14380 ILDB CHR,PTRPT ;YES, SO GET CHAR OF SEQ NUM + 001511' 326200 001707' 14390 JUMPN CHR,CPOPJ1;0 MARKS LAST CHAR + 001512' 135040 003743' 14400 LDB T1,IBF+1 ;GET FIRST CHAR OF THIS LINE + 001513' 201200 000015 14410 MOVEI CHR,15 + 001514' 307040 000015 14420 CAIG T1,15 ;PREPARE TO OUTPUT A CR,LF + 001515' 305040 000012 14430 CAIGE T1,12 ;IS FIRST CHAR OF LINE AN END OF LINE CHAR? + 001516' 201200 000011 14440 MOVEI CHR,TAB ;NO, SO OUTPUT A TAB + 001517' 620300 010000 14450 TRZ FLAG,SUS ;TURN OFF SUS SUPPLY + 001520' 254000 001724' 14460 JRST GETA5 + 001521' 350000 003743' 14470 GET5: AOS IBF+1 ;HERE IF A SEQ NUM FOUND IN INBUFFER + 001522' 275040 000005 14480 SUBI T1,5 ;IGNORE SEQ NUM, TAB AND DECREMENT CHAR COUNT + 001523' 202040 003744' 14490 MOVEM T1,IBF+2 + 001524' 602300 000040 14500 TRNE FLAG,NSMOD ;REMOVE SEQ NUMS MODE? + 001525' 254000 001532' 14510 JRST GET2 ;YES, SO GET NEXT CHAR + 001526' 202100 004014' 14520 MOVEM T2,SQNUM ;SEQ NUM FROM BUFFER BECOMES NEW SEQ NUM + 001527' 260240 000707' 14530 PUSHJ P,OUTLBF ;DUMP THE LINE BUFFER (IF REQUIRED) + 001530' 666300 100400 14540 TRON FLAG,STS+SNI ;TURN ON START OF LINE + 14550 ;AND NO-INCREMENT SEQ NUM FLAG + 001531' 260240 000553' 14560 PUSHJ P,CLRBUF ;CLEAR LBUF IF IN THE MIDDLE OF A LINE + + 001532' 622300 040000 14580 GET2: TRZE FLAG,ESQ ;REPROCESS LAST CHAR? + 001533' 254000 001557' 14590 JRST GET1 ;YES + 001534' 371040 003744' 14600 SOSL T1,IBF+2 ;CHARS REMAINING IN INBUFFER? + 001535' 254000 001553' 14610 JRST GET4 ;YES + 001536' 260240 001616' 14620 PUSHJ P,INP ;NO, SO REFILL AND CHECK ERR BITS + 001537' 602400 020000 14630 TRNE IOS,EOFBIT ;END OF FILE? IOS HAS STATUS BITS + 001540' 263240 000000 14640 POPJ P, ;YES + 001541' 254000 001532' 14650 JRST GET2 ;NO, SO PROCESS INBUFFER + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 36-1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 001542' 660300 040000 14670 GETPC3: TRO FLAG,ESQ ;REPROCESS BAD CHAR + 001543' 664200 002400 14680 TROA CHR,12*200 ;PRECEED BAD CHAR WITH LINE FEED + 001544' 201200 002400 14690 GETPC2: MOVEI CHR,12*200;CHANGE SPACE TO LINE FEED + 001545' 254000 001476' 14700 JRST GETPC4 + + 001546' 005000 004656 14720 PCHTAB: XWD 24*200,23*200+"." ;/ * + 001547' 042440 037600 14730 XWD 212*200+" ",177*200 ;0 + VJC 4/16/49 + 001550' 003000 004200 14740 XWD 14*200,21*200 ;1 , + 001551' 004000 042460 14750 XWD 20*200,212*200+"0" ;2 - + 001552' 002600 004400 14760 XWD 13*200,22*200 ;3 . + + 001553' 134200 003743' 14780 GET4: ILDB CHR,IBF+1 ;FETCH CHAR FROM INBUFFER + 001554' 616300 004672' 14790 TDNN FLAG,[XWD IFLG+IBFLG,BMOD] ;BIN, IB, I OR SBIN MODE? + 001555' 603540 000004 14800 TLNE AUXFLG,SBIN + 001556' 254000 001707' 14810 JRST CPOPJ1 ;YES, SO NO PROCESSING REQUIRED + 001557' 135200 003743' 14820 GET1: LDB CHR,IBF+1 ;AFTER SEQ NUM, HERE FOR 1ST CHAR + 001560' 322200 001532' 14830 JUMPE CHR,GET2 ;IGNORE NULL CHARS + 001561' 306200 000012 14840 CAIN CHR,LF ;IGNORE LINE FEED IN FORTRAN OUTPUT + 001562' 607300 000004 14850 TLNN FLAG,PFLG ;/P SWITCH IN EFFECT? + 001563' 254000 001566' 14860 JRST GET1A ;NO + 001564' 661300 000010 14870 TLO FLAG,PCONV ;CONVERT THE NEXT LIVE CHAR + 001565' 254000 001532' 14880 JRST GET2 ;GET NEXT CHAR + 001566' 200120 003743' 14890 GET1A: MOVE T2,@IBF+1 ;BIT 35 OF BUFFER SET? + 001567' 622100 000001 14900 TRZE T2,1 + 001570' 254000 001521' 14910 JRST GET5 ;YES, THIS IS A SEQ NUM + 001571' 622300 000400 14920 TRZE FLAG,STS ;START SEQ (NEW LINE) FLAG ON? + 001572' 606300 100200 14930 TRNN FLAG,SQMOD+SNI ;YES, SEQ MODE OR SEQ COPY? + 001573' 254000 001666' 14940 JRST GET7 ;NO, SO PROCESS CHAR + 001574' 200100 004014' 14950 MOVE T2,SQNUM ;NO, SO ADD 10. TO SEQ NUM + 001575' 200040 003724' 14960 MOVE T1,K1 + 001576' 602300 400000 14970 TRNE FLAG,OSFLG ;TEST FOR INCR. BY ONE + 001577' 200040 003726' 14980 MOVE T1,K4 + 001600' 270100 000001 14990 ADD T2,T1 ;ASCII INCREMENT + 001601' 404100 003725' 15000 AND T2,K3 ;MASK SIGNIFICANT DIGITS + 001602' 200040 000002 15010 MOVE T1,T2 + 001603' 404040 003721' 15020 AND T1,ZRO ;MASK CARRY BITS + 001604' 240040 777775 15030 ASH T1,-3 + 001605' 274100 000001 15040 SUB T2,T1 ;ADJUST CARRIES + 001606' 434100 003721' 15050 IOR T2,ZRO + 001607' 626300 100000 15060 TRZN FLAG,SNI ;NON-INCREMENT SEQ NUM FLAG ON? + 001610' 202100 004014' 15070 MOVEM T2,SQNUM ;NO, SO SAVE THE RESULT + 001611' 660300 050001 15080 TRO FLAG,LINE+SUS+ESQ ;TURN ON SUPPLY SEQ, REPROCESS + 15090 ;LAST CHAR, AND LINE-BY-LINE FLAGS + 001612' 350000 004174' 15100 AOS LBUF ;SET BIT 35 IN LBUF TO MARK SEQ NUM + 001613' 200040 004677' 15110 MOVE T1,[POINT 7,SQNUM] + 001614' 202040 004036' 15120 MOVEM T1,PTRPT ;INITIALIZE SEQ NUM PICK-UP POINTER + 001615' 254000 001462' 15130 JRST GET ;GO OUTPUT FIRST CHAR OF SEQ NUM + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 37 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 15150 ;ROUTINE TO INPUT INPUT FILE + + 001616' 056140 000000 15170 INP: IN IN, ;INPUT DATA + 001617' 254000 001710' 15180 JRST CPOPJZ ;NO ERRORS ,BUT CLEAR IOS JUST IN CASE + 001620' 062140 000010 15190 INERR: GETSTS IN,IOS ;SUBR TO CHECK INPUT ERR BITS + 001621' 606540 000400 15200 TRNN AUXFLG,MTAIN ;MTA INPUT? + 001622' 602400 740000 15210 TRNE IOS,740000 ;ANY ERROR BITS SET? + 001623' 606400 742000 15220 TRNN IOS,740000+EOTBIT ;EOT FOR MTA? + 001624' 263240 000000 15230 POPJ P, ;NO + + 001625' 260240 001135' 15250 PUSHJ P,COMERR ;SAVE AC'S RELEASE TTY + 001626' 265440 000542' 15260 JSP T5,INICN2 ;YES SO PRINT OUT COMPLETE FILE DESCRIPTOR + 001627' 260240 001652' 15270 PUSHJ P,QUEST + 001630' 265040 002166' 15280 ERRPN2 </Input device /> + 001631' 447356 072750 + 001632' 203114 573322 + 001633' 617124 000000 + 001634' 260240 002201' 15290 PUSHJ P,P6BIT + 001635' 000000 004637' 15300 DEVICE + 001636' 336000 004052' 15310 SKIPN ZRF ;IS THERE A FILE NAME + 001637' 254000 001643' 15320 JRST .+4 ;NO,SO DON'T PRINT + 001640' 265040 002166' 15330 ERRPN2 </: file /> + 001641' 351014 664730 + 001642' 625000 000000 + 001643' 201140 004052' 15340 MOVEI T3,ZRF ;LOC OF INPUT FILE NAME TO T3 + 001644' 260240 001146' 15350 PUSHJ P,FN.EX ;DEPOSIT FILE NAME, EXT INTO TTY OUT BUFFER + 001645' 200100 000013 15360 MOVE T2,AUXFLG + 001646' 405100 060500 15370 ANDI T2,CDRIN+DTAIN+DSKIN+MTAIN + 001647' 260240 001020' 15380 PUSHJ P,IOERR ;GO PRINT ERROR DESCRIPTOR + 001650' 060150 000000 15390 SETSTS IN,(IOS) + 001651' 263240 000000 15400 POPJ P, + + 15420 ;ROUTINE TO TEST IF BLOCK TOO LARGE, OR WRITE LOCKED + + 001652' 201200 000077 15440 QUEST: MOVEI CHR,"?" ;DEPOSIT "?" IN ERROR MSG + 001653' 607300 000200 15450 TLNN FLAG,GFLG ;ONLY IF /G NOT ON + 001654' 254000 002175' 15460 JRST PUTCON ;/G NOT ON, PRINT ?(FATAL) BEFORE ERR MSG + + 001655' 606400 040000 15480 TRNN IOS,BIGBLK ;BLOCK NO. TOO LARGE? + 001656' 254000 001662' 15490 JRST QUEST2 ;NO + 001657' 606540 024000 15500 TRNN AUXFLG,DTAIN+DTAOUT ;YES + 001660' 263240 000000 15510 POPJ P, ;BLOCK TOO LARGE + + 001661' 254000 002175' 15530 JRST PUTCON ;DEPOSIT "?" FATAL EVEN IF /G ON + + 001662' 602400 400000 15550 QUEST2: TRNE IOS,WRTLOK ;WRITE LOCKED? + 001663' 606540 034600 15560 TRNN AUXFLG,DTAIN+DTAOUT+MTAIN+MTAOUT+DSKOUT + 001664' 263240 000000 15570 POPJ P, ;NO + 001665' 254000 002175' 15580 JRST PUTCON ;DEPOSIT "?" FATAL EVEN IF /G ON + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 38 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 001666' 603300 000010 15610 GET7: TLNE FLAG,PCONV ;CONVERTING FORTRAN CARRAIGE CONTROL CHAR? + 001667' 254000 001463' 15620 JRST GET+1 ;YES, GO DO IT + 001670' 350040 004035' 15630 AOS T1,CDRCNT + 001671' 603540 000040 15640 TLNE AUXFLG,CDRFLG + 001672' 254000 001712' 15650 JRST GET7B ;CARD READER INPUT + + 001673' 306200 000040 15670 GET7C: CAIN CHR,SPACE ;SPACE? + 001674' 254000 001727' 15680 JRST GETA2 ;YES + 001675' 306200 000015 15690 CAIN CHR,CR ;CAR. RET.? + 001676' 254000 001717' 15700 JRST GETA3 ;YES + 001677' 620300 020000 15710 TRZ FLAG,SPOK ;CHAR NOT A SPACE STOP COUNTING CONSEC. SPACES + 001700' 306200 000011 15720 CAIN CHR,TAB ;TAB? + 001701' 254000 001724' 15730 JRST GETA5 ;KEEP TRACK OF TAB STOPS + 001702' 307200 000137 15740 CAIG CHR,137 + 001703' 305200 000040 15750 CAIGE CHR,SPACE ;NON-SPACING CHARACTER? + 001704' 254000 001707' 15760 JRST CPOPJ1 ;YES, SO RETURN IMMEDIATELY + 001705' 377000 004027' 15770 SOSG TABCT ;COUNT DOWN THE TAB STOP COUNTER + 001706' 254000 001724' 15780 JRST GETA5 ;RESET THE COUNTER IF TAB STOP IS PASSED + 001707' 354005 000000 15790 CPOPJ1: AOSA (P) ;SKIP RETURN + 001710' 400400 000000 15800 CPOPJZ: SETZ IOS, ;CLEAR IOS JUST IN CASE + 001711' 263240 000000 15810 CPOPJ: POPJ P, + + + 001712' 301040 000111 15840 GET7B: CAIL T1,^D73 ;LT COL 73? + 001713' 303040 000120 15850 CAILE T1,^D80 ;NO, LE COL 80? + 001714' 254000 001673' 15860 JRST GET7C ;CANT BE A CARD SEQUENCE NUMBER + 001715' 201200 000040 15870 MOVEI CHR,SPACE ;REPLACE CARD SEQUENCE NOS. BY SPACE + 001716' 254000 001673' 15880 JRST GET7C + + 001717' 622300 020000 15900 GETA3: TRZE FLAG,SPOK ;CAR. RET. SEEN, ANY TRAILING SPACES? + 001720' 606300 001004 15910 TRNN FLAG,SPMOD+TBMOD ;YES, ARE WE FLUSHING TRAILING SPACES + 001721' 254000 001724' 15920 JRST GETA5 ;NO, RESET TAB COUNTER ONLY + 001722' 200000 004023' 15930 MOVE 0,SVPTR1 + 001723' 202000 004020' 15940 MOVEM 0,OPTR ;CLOBBER THE OUTPUT POINTER TO LBUF + 001724' 201000 000010 15950 GETA5: MOVEI 0,TABSP + 001725' 202000 004027' 15960 MOVEM 0,TABCT ;RESET THE TAB COUNTER + 001726' 254000 001707' 15970 JRST CPOPJ1 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 39 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 001727' 662300 020000 15990 GETA2: TROE FLAG,SPOK ;SPACE WAS SEEN, IS THIS ONE OF A SEQUENCE? + 001730' 254000 001735' 16000 JRST GETA7 ;YES + 001731' 200000 004020' 16010 MOVE 0,OPTR ;THIS IS THE FIRST SPACE SEEN, SAVE LBUF + 16020 ;POINTER IN CASE THIS SPACE MUST BE FLUSHED + 001732' 202000 004023' 16030 MOVEM 0,SVPTR1 ;THIS POINTER FOR FLUSHING FINAL SPACES + 001733' 202000 004024' 16040 MOVEM 0,SVPTR2 ;THIS POINTER FOR CHANGING MULT. SPACES TO TABS + 001734' 402000 004030' 16050 SETZM SPCT ;INITIALIZE THE SPACE COUNTER + 001735' 350040 004030' 16060 GETA7: AOS T1,SPCT + 001736' 373000 004027' 16070 SOSLE TABCT ;ARE WE AT THE NEXT TAB STOP? + 001737' 254000 001707' 16080 JRST CPOPJ1 ;NO + 001740' 301040 000002 16090 CAIL T1,2 ;DONT BOTHER CHANGING ONE SPACE TO A TAB + 001741' 606300 000004 16100 TRNN FLAG,TBMOD ;TAB GENERATING MODE? + 001742' 254000 001747' 16110 JRST GETA5A ;NO, GO RESET TAB COUNTER + 001743' 200000 004024' 16120 MOVE 0,SVPTR2 + 001744' 202000 004020' 16130 MOVEM 0,OPTR ;BACK UP THE OUTPUT POINTER OVER THE LAST + 16140 ;GROUP OF SPACES + 001745' 201200 000011 16150 MOVEI CHR,TAB ;OUTPUT A TAB + 001746' 402000 004030' 16160 SETZM SPCT ;RESET THE SPACE COUNTER + 001747' 133000 004024' 16170 GETA5A: IBP SVPTR2 ;UPDATE THE CHANGE-SPACES-TO-TABS POINTER + 001750' 254000 001724' 16180 JRST GETA5 ;RESET THE TAB COUNTER + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 40 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 16200 ;ERROR ROUTINES + + 16220 IFE WCH,<IFN RIMSW,< + 16230 ERR8A: MOVEI T4,ERR382 + 16240 JRST E10B + 16250 ERR3B: MOVEI T4,ERR381 + 16260 JRST E10B>> + + 001751' 201340 002053' 16280 ERR10: MOVEI T4,E10A + 001752' 336000 004052' 16290 E10B: SKIPN ZRF + 001753' 254000 001757' 16300 SKIP 3 + 001754' 265040 002155' 16310 ERRPNT </?File /> + 001755' 376155 166312 + 001756' 200000 000000 + 001757' 201140 004052' 16320 MOVEI T3,ZRF + 001760' 260240 001146' 16330 PUSHJ P,FN.EX + 001761' 254007 000000 16340 JRST (T4) + + 16360 IFE WCH,<IFN RIMSW,< + 16370 ERR381: ERRPN2 </illegal extension!/> + 16380 + 16390 ERR382: ERRPN2 </illegal format!/> + 16400 + 16410 ERR5B: ERRPN2 </? DTA to PTP only!/>>> + + 001762' 265040 002155' 16430 ERR9: ERRPNT </?/> + 001763' 374000 000000 + 001764' 201140 004044' 16440 MOVEI T3,DTON + 001765' 260240 001146' 16450 PUSHJ P,FN.EX + 001766' 254000 002033' 16460 JRST ERR4B + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 41 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 001767' 334100 004634' 16480 ERR1: SKIPA T2,ODEV ;OUTPUT UNAVAILABLE + 001770' 200100 004637' 16490 ERR1A: MOVE T2,DEVICE ;INPUT UNAVAILABLE + 001771' 265040 002155' 16500 ERR1B: ERRPNT </?Device /> + 001772' 376114 573322 + 001773' 617124 000000 + 001774' 260240 002201' 16510 PUSHJ P,P6BIT + 001775' 000000 000002 16520 T2 + 001776' 265040 002166' 16530 ERRPN2 </ not available!/> + 001777' 203355 772100 + 002000' 607554 164730 + 002001' 607055 462502 + 002002' 000000 000000 + 002003' 16540 ERR3: + 16550 IFN FTDSK,<TRNE AUXFLG,DSKIN + 16560 JRST DERR5 ;ERR ON DSK> + 002003' 260240 002005' 16570 PUSHJ P,ERR3A + 002004' 254000 001107' 16580 JRST IOERRN ;EXIT + 002005' 661540 000100 16590 ERR3A: TLO AUXFLG,INFOFL ;SIGNAL RETURN TO ERR3AA + 002006' 254000 002711' 16600 JRST INFO + 002007' 265040 002166' 16610 ERR3AA: ERRPN2 </? No file named /> + 002010' 375011 667500 + 002011' 633235 462500 + 002012' 673035 562710 + 002013' 200000 000000 + 002014' 201140 004040' 16620 MOVEI T3,FILNAM + 002015' 260240 001146' 16630 PUSHJ P,FN.EX ;PRINT NAME OF FILE THAT CANNOT BE FOUND + 002016' 260240 002735' 16640 PUSHJ P,INFO2 ;OUTPUT MESS. WITH CR-LF + 002017' 606540 101000 16650 TRNN AUXFLG,TTYIN!TTYOUT ;WAS TTY IN USE? + 002020' 263240 000000 16660 POPJ P, ;NO + 002021' 602540 001000 16670 TRNE AUXFLG,TTYIN ;INPUT DEVICE? + 002022' 254000 000426' 16680 JRST ININIT ;YES ,RE-INIT + 002023' 254000 000223' 16690 JRST OMODE ;MUST BE OUTPUT + + 002024' 336000 004044' 16710 ERR4: SKIPN DTON + 002025' 254000 002033' 16720 JRST ERR4A + 16730 IFN FTDSK,<TRNE AUXFLG,DSKOUT ;ERR ON DSK + 16740 JRST DERR6> + 002026' 265040 002155' 16750 ERRPNT </? Directory full!/> + 002027' 375010 464744 + 002030' 627076 467744 + 002031' 745014 672730 + 002032' 661020 000000 + 002033' 16760 ERR4A: + 16770 IFN FTDSK,<TRNE AUXFLG,DSKOUT + 16780 JRST ERR4C> + 002033' 265040 002155' 16790 ERR4B: ERRPNT </?Illegal file name!/> + 002034' 376235 466312 + 002035' 637035 420314 + 002036' 647314 520334 + 002037' 607334 520400 + 16800 IFN FTDSK,< + 16810 ERR4C: ERRPNT </?(0) Illegal file name!/>> + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 41-1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 002040' 16830 ERR6: + 002040' 265040 002155' 16840 ERR6A: ERRPNT </?PIP command error!/> + 002041' 376411 150100 + 002042' 617375 566702 + 002043' 673104 062744 + 002044' 713376 220400 + + 002045' 265040 002155' 16860 ERR6B: ERRPNT </?PIP command too long!/> + 002046' 376411 150100 + 002047' 617375 566702 + 002050' 673104 072336 + 002051' 675015 467734 + 002052' 635020 000000 + + 002053' 265040 002166' 16880 E10A: ERRPN2 </ line too long!/> + 002054' 203315 167312 + 002055' 203515 767500 + 002056' 663375 663502 + 002057' 000000 000000 + 002060' 265040 002155' 16890 ERR5A: ERRPNT </?Too many input devices!/> + 002061' 376515 767500 + 002062' 667035 674500 + 002063' 647356 072750 + 002064' 203114 573322 + 002065' 617136 320400 + 16900 ;FILE MANIPULATION COMMANDS TO NON-DIRECTORY DEVICES COME HERE + + 002066' 265040 002155' 16920 ERR5: ERRPNT </?Disk or DECtape input required!/> + 002067' 376115 171726 + 002070' 203376 220210 + 002071' 426076 460740 + 002072' 625015 167340 + 002073' 727504 071312 + 002074' 707535 171312 + 002075' 621020 000000 + 002076' 265040 002155' 16930 ERR2: ERRPNT </?Incorrect Project-Programmer number!/> + 002077' 376235 661736 + 002100' 713454 561750 + 002101' 202416 267724 + 002102' 627076 426640 + 002103' 713374 771302 + 002104' 667334 571100 + 002105' 673535 561312 + 002106' 711020 000000 + 002107' 265040 002155' 16940 ERR2A: ERRPNX </?Illegal protection!/> + 002110' 376235 466312 + 002111' 637035 420340 + 002112' 713376 462706 + 002113' 723235 767102 + 002114' 000000 000000 + 16950 IFE BLOC0,< + 002115' 265040 002155' 16960 ERR7A: ERRPNT <Z?DECtape I/O only!Z>> + 002116' 376110 541750 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 41-2 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 002117' 607414 520222 + 002120' 276364 067734 + 002121' 663624 100000 + + 002122' 265040 002155' 16980 ERR8: ERRPNT </?Explicit output device required!/> + 002123' 376137 070330 + 002124' 647075 172100 + 002125' 677536 470352 + 002126' 721014 462754 + 002127' 647074 520344 + 002130' 627436 564744 + 002131' 627104 100000 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 42 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 17010 ;ROUTINE TO CHECK INPUT DEV, SET XXXIN.E.G.DTAIN + + 002132' 200000 004637' 17030 CHECK1: MOVE 0,DEVICE ;INPUT DEVICE NAME TO AC 0 + 002133' 322000 002152' 17040 JUMPE 0,CHECK ;IGNORE IF NO INPUT DEVICE + 17050 IFN FTDSK,<PUSHJ P,PSYSP ; STR# 10-3178> + 002134' 047000 000004 17060 DEVCHR ;GET INPUT DEVCHR + 17070 IFN FTDSK,<TLNN 0,DSKBIT ;INPUT DEVICE DISK? + 17080 JRST CHECK2 ;NO + 17090 TRO AUXFLG,DSKIN;INPUT DEVICE IS DSK, SET BIT + 17100 MOVE T1,DEVICE + 17110 CAMN T1,[SIXBIT/SYS/] ; INIT SYS AS DSK + 17120 MOVSI T1,(SIXBIT/DSK/) + 17130 MOVEM T1,ADSK + 17140 JRST CHECK> + + 002135' 322000 000525' 17160 CHECK2: JUMPE 0,DEVER1 ;NON-EX. DEVICE + + 002136' 607000 000002 17180 TLNN 0,INBIT ;CAN DEVICE DO INPUT? + 002137' 254000 002040' 17190 JRST ERR6A ;NO, COMMD ERROR + + 002140' 603000 000200 17210 TLNE 0,PTRBIT ;PAPER TAPE READER? + 002141' 660540 200000 17220 TRO AUXFLG,PPTIN;YES + + 002142' 603000 000004 17240 TLNE 0,DTABIT ;DECTAPE? + 002143' 660540 020000 17250 TRO AUXFLG,DTAIN + + 002144' 603000 000020 17270 TLNE 0,MTABIT ;MAGTAPE? + 002145' 660540 000400 17280 TRO AUXFLG, MTAIN + + 002146' 603000 100000 17300 TLNE CDRBIT ;CARD READER? + 002147' 660540 000100 17310 TRO AUXFLG,CDRIN + + 002150' 603000 000010 17330 TLNE 0,TTYBIT ;TELETYPE? + 002151' 660540 001000 17340 TRO AUXFLG,TTYIN + + 002152' 602740 001000 17360 CHECK: TRNE CALFLG,SSWTCH ;_FLAG STILL ON? + 002153' 254000 002040' 17370 JRST ERR6A ; YES ,COMMAND ERROR + 002154' 263240 000000 17380 POPJ P, ; NO, RETURN + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 43 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 17400 ;SUBR TO PRINT ERROR MESSAGES + 17410 ;! MARKS THE END OF MESSAGE & SIGNALS GO TO PIP2 + 17420 ;NULL IS A FLAG TO RETURN TO THE NEXT LOCATION + + 002155' 17440 PRETXT: + 002155' 071240 000000 17450 PTEXT: RELEAS DIR, ;RELEASE DIRECTORY DEVICE + + 002156' 071200 000000 17460 RELEAS TAPE, ;RELEASE MAGTAPE + 002157' 071100 000000 17470 RELEAS OUT, ;LET GO OF BOTH OUTPUT AND + 002160' 071140 000000 17480 RELEAS IN, ;INPUT DEVICES + 002161' 265440 000541' 17490 JSP T5,INICN1 ;INITIALIZE THE TTY + 002162' 201000 000015 17500 MOVEI 0,CR + 002163' 136000 003757' 17510 IDPB 0,TFO+1 ;OUTPUT A CR-LF + 002164' 201000 000012 17520 MOVEI 0,LF + 002165' 136000 003757' 17530 IDPB 0,TFO+1 ;FOR BATCH + 002166' 505040 440700 17540 PTEXT2: HRLI T1,440700 ;GET SET TO SCAN 7-BIT DATA + 002167' 134000 000001 17550 PTEXT1: ILDB 0,T1 ;GET CHAR OF ERR MESSAGE + 002170' 322001 000001 17560 JUMPE 0,1(T1) ;RETURN ON ZERO + 002171' 306000 000041 17570 CAIN 0,"!" ;!? + 002172' 254000 000013' 17580 JRST PIP2 ;YES, END OF MESSAGE, APPEND CAR.RET., LF + 002173' 136000 003757' 17590 IDPB 0,TFO+1 ;DEPOSIT CHAR IN OUTBUFFER + 002174' 254000 002167' 17600 JRST PTEXT1 ;GET NEXT CHAR + + 17620 ;ROUTINE TO DEPOSIT CHARACTER IN TTY OUT BUFFER + + 002175' 377000 003760' 17640 PUTCON: SOSG TFO+2 ;STORED MORE THAN BUFFER HOLDS? + 002176' 067040 000000 17650 OUTPUT CON, ;YES + 002177' 136200 003757' 17660 IDPB CHR,TFO+1 + 002200' 263240 000000 17670 POPJ P, + + 17690 ;ROUTINE TO CONVERT ONE WORD OF SIXBIT + 17700 ;FROM ADDRESS IN LOCATION AFTER CALL AND DEPOSIT INTO TTY OUT BUFFER + + 002201' 200065 000000 17720 P6BIT: MOVE T1,@(P) ;PICK UP WORD OF 6-BIT + 002202' 505040 440600 17730 HRLI T1,440600 ;SET UP POINTER + 002203' 134200 000001 17740 P6BIT1: ILDB CHR,T1 + 002204' 322200 002207' 17750 JUMPE CHR,P6BIT2 + 002205' 271200 000040 17760 ADDI CHR,40 + 002206' 260240 002175' 17770 PUSHJ P,PUTCON ;DEPOSIT IN TTY + 002207' 603040 770000 17780 P6BIT2: TLNE T1,770000 ;DONE SIX? + 002210' 254000 002203' 17790 JRST P6BIT1 ;NO + 002211' 254000 001707' 17800 JRST CPOPJ1 ;SKIP RETURN + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 44 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 17830 ;ROUTINE TO CLEAR DSK OR DTA DIRECTORY (/Z SWITCH) + + 002212' 606740 000200 17850 DTCLR: TRNN CALFLG,DVSWTH ;HAS A DEVICE BEEN SEEN? + 002213' 254000 002122' 17860 JRST ERR8 ;NO,SO DON'T SCREW USER + 17870 IFN FTDSK,<TRNE AUXFLG,DSKOUT ;CLEAR DSK OR DTA DIR. + 17880 JRST DSKZRO> + 002214' 606540 004000 17890 TRNN AUXFLG,DTAOUT ;MUST BE DTA + 002215' 254000 002066' 17900 JRST ERR5 + 002216' 047100 000013 17910 UTPCLR OUT, ;CLEAR DIRECTORY + 002217' 263240 000000 17920 POPJ P, + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 45 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 17940 ;ROUTINE TO SET UP TO COPY EVERYTHING + + 002220' 260240 000426' 17960 PRECOP: PUSHJ P,ININIT ;INIT INPUT FILE + 002221' 606540 020000 17970 TRNN AUXFLG,DTAIN ;DECTAPE INPUT + 002222' 254000 002225' 17980 SKIP 2 ;NO + 002223' 260240 003272' 17990 PUSHJ P,DTCH2 ;YES, GET DIRECT, SET POINTERS TO DIRECT + + 002224' 260240 002702' 18010 DTCOPY: PUSHJ P,DTADI1 ;START (T5) + 18020 IFN FTDSK,<TRNE AUXFLG,DSKIN ;DSK INPUT. ENTER HERE FROM DTD2 + 18030 PUSHJ P,DSKDIR ;YES, PREPARE TO LOOKUP FILES> + 002225' 402000 004034' 18040 COPY1A: SETZM ZCNT ;CLEAR COUNT FOR DSK ZERO REQUESTS + 002226' 201100 000006 18050 MOVEI T2,6 ;FILL 0 CHARS. IN DEST-FILE + 002227' 200040 004700' 18060 MOVE T1,[POINT 6,DTON] ;NAME WITH X'S. THIS IS + 002230' 134000 000001 18070 XSS: ILDB 0,T1 ;THEN THE BASE FOR GENERATED + 002231' 326000 002233' 18080 JUMPN 0,.+2 ;DESTINATION FILES FROM + 002232' 201000 000070 18090 MOVEI 0,"X"-40 ;NON-DIR. DEVICES IN /X + 002233' 137000 000001 18100 DPB 0,T1 + 002234' 367100 002230' 18110 SOJG T2,XSS ;DON'T YET KNOW IF ONE + 18120 ;OF THE INPUT DEV. WILL + 002235' 200000 004044' 18130 MOVE 0,DTON ;BE NON-DIR + 002236' 202000 004021' 18140 MOVEM 0,DTONSV + 002237' 200000 004045' 18150 MOVE 0,DTON+1 + 002240' 202000 004022' 18160 MOVEM 0,DTONSV+1 + + 002241' 260240 002371' 18180 COPY1: PUSHJ P,SR2 ;SET INIT. COPYING MODE + 002242' 260240 002566' 18190 PUSHJ P,LOOK ;GET A FILE TO COPY + 002243' 254000 002317' 18200 JRST CAL6 ;NO MORE + 18210 IFN FTDSK<PUSHJ P,XDDSK ;GOT ONE, CHECK (XD) FROM DSK, NAMTAB + 18220 JRST COPY1 ;IN LIST, DON'T COPY> + 002244' 606540 201500 18230 TRNN AUXFLG,MTAIN+PPTIN+CDRIN+TTYIN ;OK, COPY FILE + 002245' 254000 002250' 18240 JRST COPY6A ;MUST BE DIRECTORY DEVICE + 002246' 260240 002337' 18250 PUSHJ P,MTPTCR ;SET UP A DEST. FN. + 002247' 254000 002252' 18260 JRST COPY6 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 46 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 002250' 076140 004052' 18280 COPY6A: LOOKUP IN,ZRF ;LOOKUP INPUT FILE NAME + 002251' 254000 002315' 18290 JRST CAL5 ;INPUT FILE FILE PROTECTED + 002252' 260240 003353' 18300 COPY6: PUSHJ P,FILTYP ;CHECK FOR DMP,SAV,REL,CHN + 18310 IFN WCH,< + 18320 TRNN AUXFLG,DTAIN+DTAOUT + 18330 JRST .+5 + 18340 HLRZ 0,ZRF+1 + 18350 CAIE 0,(SIXBIT /DMP/) + 18360 IFN DISK30,<CAIN 0,(SIXBIT/SVE/)> + 18370 IFE DISK30,<CAIN 0,(SIXBIT/SAV/)> + 18380 JRST COPY1> + 002253' 260240 002323' 18390 PUSHJ P,COPY3 + 002254' 200000 004052' 18400 COPY6B: MOVE 0,ZRF ;INPUT FILE NAME + 002255' 202000 004044' 18410 MOVEM 0,DTON ;IS OUTPUT FILE NAME + 002256' 510000 004053' 18420 HLLZ 0,ZRF+1 ;LIKEWISE EXT + 002257' 512000 004045' 18430 HLLZM 0,DTON+1 + + 18450 ;THIS CODE OPERATES AS FOLLOWS - FOR E+2, SET = 0 + 18460 ;TO START (ASSUMING /X) + 18470 ;DSK TO DSK IF EDIT SWITCHES PUT E+2 = 0 IF NO EDITS TRANSFER + 18480 ; DATE, TIME, BITS 13-35 + 18490 ;DSK TO DTA FOR EDITS E+2 = 0, NO EDITS TRANSFER 24-35 FOR + 18500 ;DATE, FOR"SAV" FILES TRANSLATE NO. 1K BLOCKS + 18510 ;DTA TO DSK FOR NO EDITS XFER BITS 24-35, ELSE E+2 = 0 + 18520 ;DTA TO DTA ALWAYS XFER 18-23, (1K BLOCK) NO EDITS XFER 24-35(DATE) + + 002260' 402000 004046' 18540 SETZM DTON+2 ;CLEAR DATE. OUTPUT FILE, DSK/DTA + 002261' 135000 003717' 18550 LDB 0,DATE ;GET DSK/DTA DATE CREATED + 002262' 616300 004701' 18560 TDNN FLAG,[XWD PFLG,LINE+TBMOD+NSMOD+SQMOD+SPMOD] + 002263' 603540 000040 18570 TLNE AUXFLG,CDRFLG + 002264' 254000 002266' 18580 JRST COPY6C + 002265' 137000 003720' 18590 DPB 0,DATED ;DEPOSIT IF NO EDITS + 18600 IFN FTDSK,<LDB 0,TIME + 18610 TRC AUXFLG,DSKIN+DSKOUT + 18620 TRCN AUXFLG,DSKIN+DSKOUT + 18630 DPB 0,TIMED ;DSK TO DSK TIME> + 002266' 18640 COPY6C: IFE WCH,< + 002266' 260240 002412' 18650 PUSHJ P,OKBLKS ;SETUP 1K BLOCKS> + 002267' 077100 004044' 18660 ENTER OUT,DTON ;GOT DATA, CREATE NEW FILE + 002270' 254000 002024' 18670 JRST ERR4 ;DIRECTORY FULL + 002271' 200000 003721' 18680 MOVE 0,ZRO ;GET ASCII/00000/AND + 002272' 202000 004014' 18690 MOVEM 0,SQNUM ;RESET SEQUENCE NO. + 002273' 661300 000020 18700 TLO FLAG,NEWFIL ;SET NEW FILE FLAG + 002274' 402000 004026' 18710 SETZM TOTBRK ;CLEAR PAREN COUNTER + 002275' 607540 000044 18720 TLNN AUXFLG,CDRFLG+SBIN ;SPECIAL PROCESSING? + 002276' 612300 004702' 18730 TDNE FLAG,[XWD PFLG+IFLG+IBFLG,LINE+BMOD+TBMOD+NSMOD+SQMOD+SPMOD] + 002277' 254000 000343' 18740 JRST PSCAN ;YES, DO IT + 002300' 375000 003744' 18750 COPY5: SOSGE IBF+2 ;INPUT BUFFER EMPTY? + 002301' 254000 002305' 18760 JRST COPY4 ;YES + 002302' 134200 003743' 18770 ILDB CHR,IBF+1 ;GET NEXT WORD AND + 002303' 260240 000756' 18780 PUSHJ P,PUT ;OUTPUT IT + 002304' 254000 002300' 18790 JRST COPY5 + 002305' 260240 002323' 18800 COPY4: PUSHJ P,COPY3 ;GET NEXT FULL SOURCE BLOCK + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 46-1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 002306' 260240 000762' 18810 PUSHJ P,OUTP ;OUTPUT PREV. BLOCK-DONT ALTER DATA + 002307' 350000 003747' 18820 AOS OBF+2 ;MAKE PUT HAPPY BECAUSE OF + 002310' 254000 002300' 18830 JRST COPY5 ;OUTPUT HERE. + 002311' 070140 000000 18840 COPY2A: CLOSE IN, + 002312' 070100 000000 18850 CLOSE OUT, + 18860 IFN FTDSK,<TLNE AUXFLG,NSPROT ;NON-STANDARD PROTECTION? + 18870 TRNN AUXFLG,DSKOUT ;RENAME ALL OUTPUT FILES IF + 18880 JRST COPY2B ;NON-STANDARD PROTECTION + 18890 MOVE 0,PROTS ;GET NEW PROTECTION + 18900 MOVEM 0,DTON+2 + 18910 + 18920 RENAME OUT,DTON ;RENAME OUTPUT FILE + 18930 JRST DERR6> + 002313' 260240 000764' 18940 COPY2B: PUSHJ P,OUTP1 + 002314' 254000 002241' 18950 JRST COPY1 ;GO GET NEXT FILE + + 002315' 350000 004034' 18970 CAL5: AOS ZCNT ;INPUT FILE READ PROT. + 002316' 254000 002241' 18980 JRST COPY1 ;COUNT READ FAILURES + + 19000 ;NO MORE FILES TO COPY + + 002317' 621540 000002 19020 CAL6: TLZ AUXFLG,NSPROT + 19030 IFN FTDSK,< SKIPN ZCNT ;FILES READ PROTECTED ?> + 002320' 254000 000411' 19040 JRST MAIN1 ;NO + 19050 IFN FTDSK,<MOVSI T4,(SIXBIT /X/) ;YES,PRINT FAILURE DURING + 19060 JRST DSKZ5 ;/X REQUEST> + + 002321' 332000 003744' 19080 COPY3B: SKIPE IBF+2 ;EMPTY BLOCK? + 002322' 263240 000000 19090 POPJ P, ;NO, RETURN + + 002323' 260240 001616' 19110 COPY3: PUSHJ P,INP ;READ NEXT BLOCK + 002324' 622540 002000 19120 TRZE AUXFLG,READ1 + 002325' 260240 002376' 19130 PUSHJ P,TTYZ ;END OF FILE FROM TTY? + 002326' 606400 020000 19140 TRNN IOS,EOFBIT ;END OF FILE? IOS HAS STATUS BITS + 002327' 254000 002321' 19150 JRST COPY3B ;NO. + 002330' 262240 000000 19160 POP P,0 ;FIND WHERE CALLED FROM + 002331' 553000 000000 19170 HRRZS 0 + 002332' 602540 201500 19180 TRNE AUXFLG,MTAIN+CDRIN+TTYIN+PPTIN + 002333' 302000 002254' 19190 CAIE 0,COPY6B ;DID WE COME FROM COPY6B-1 + 002334' 254000 002311' 19200 JRST COPY2A ;NO, EOF NOT FIRST DATA IN FILE + 002335' 620740 000037 19210 TRZ CALFLG,ALLCLF ;END OF INFO ON NON-DIR. DEVICE + 002336' 254000 002241' 19220 JRST COPY1 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 47 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 19240 ;CREATE DESTINATION FILE NAME. RANGE IS ...001 TO ...999 + + 002337' 350040 004051' 19260 MTPTCR: AOS T1,NO. + 002340' 303040 001747 19270 CAILE T1,^D999 + 002341' 254000 002350' 19280 JRST MPC2 + 002342' 260240 002362' 19290 PUSHJ P,MTPTC1 + 002343' 200000 004021' 19300 MOVE 0,DTONSV ;FILNAM=DTON IS ONLY WAY TO IDENTIFY + 002344' 202000 004052' 19310 MOVEM 0,ZRF ;INPUT FILE + 002345' 200000 004022' 19320 MOVE 0,DTONSV+1 + 002346' 202000 004053' 19330 MOVEM 0,ZRF+1 + 002347' 263240 000000 19340 POPJ P, + 002350' 265040 002155' 19350 MPC2: ERRPNT <Z?Terminate /X, max. of 999 files processed!Z> + 002351' 376514 571332 + 002352' 647354 172312 + 002353' 201373 026100 + 002354' 667037 027100 + 002355' 677144 034562 + 002356' 345014 664730 + 002357' 627464 070344 + 002360' 677074 571746 + 002361' 627104 100000 + + 002362' 201641 001750 19370 MTPTC1: MOVEI DOUT,^D1000(T1) + 002363' 200040 004703' 19380 MOVE T1,[POINT 6,DTONSV,17] + 002364' 265100 003235' 19390 JSP T2,OUTDC1 + 002365' 344100 001711' 19400 AOJA T2,CPOPJ + 002366' 275200 000040 19410 SUBI CHR,40 + 002367' 136200 000001 19420 IDPB CHR,T1 + 002370' 263240 000000 19430 POPJ P, + + 19450 ;ROUTINE TO RESTORE BYTE POINTERS TO INITED MODE + 19460 ;FOR INPUT AND OUTPUT DEVICES + + 002371' 200000 003740' 19480 SR2: MOVE 0,SVIBF + 002372' 502000 003743' 19490 HLLM 0,IBF+1 + 002373' 200000 003741' 19500 MOVE 0,SVOBF + 002374' 502000 003746' 19510 HLLM 0,OBF+1 + 002375' 263240 000000 19520 POPJ P, + + 19540 ;ROUTINE TO SEE IF ^Z FIRST CHAR ON TTY + + 002376' 606540 001000 19560 TTYZ: TRNN AUXFLG,TTYIN ;SEE IF FIRST CHAR. IS ^Z + 002377' 263240 000000 19570 POPJ P, ;NOT TTY INPUT + 002400' 550040 003743' 19580 HRRZ T1,IBF+1 ;ON TTY + 002401' 554001 000001 19590 HLRZ 0,1(T1) ;GET FIRST CHARACTER + 002402' 620000 003777 19600 TRZ 0,3777 ;CLEAR ANY OTHER CHAR. + 002403' 306000 150000 19610 CAIN 0,(<CZ>B6) ;IS IT ^Z? + 002404' 664400 020000 19620 TROA IOS,EOFBIT ;YES,SET END OF FILE + 002405' 302000 104000 19630 CAIE 0,(<XON>B6) ;IS IT XON "^Q" + 002406' 263240 000000 19640 POPJ P, ;NO + 002407' 205000 774000 19650 MOVSI 0,(<DEL>B6) ;A RUBOUT + 002410' 436001 000001 19660 IORM 1(T1) ;CLEAR "^Q" FROM BUFFER + 002411' 263240 000000 19670 POPJ P, ;AND RETURN + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 48 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 19690 IFE WCH,< + 19700 ;DTA TO DTA MAINTAIN BITS 18-23 OF E+2 IF SET + 19710 ;DSK TO DSK NO TRANSLATION (E+2) + 19720 ;DSK TO DTA TRANSLATE E+3 (LHS) INTO E+2 (18-23) + 19730 ;DTA TO DSK NO TRANSLATION (E+2) + 19740 ;THIS ROUTINE ENSURES "SAVE" FILES MAINTAIN + 19750 ;CORRECT DATA FOR LOADING. FOR DSK INPUT + 19760 ;A "SAVE" FILE IS ONE WITH THE EXTENSION + 19770 ;"SAV". E+3 = (-[(200XN)+NO. WDS IN LAST BLOCK] + 19780 ;IN LHS TRANSLATE TO NO. 1K BLOCKS NEEDED + 19790 ;TO LOAD FILE - BEFORE IT IS EXPANDED IN CORE. + + 002412' 606740 020000 19810 OKBLKS: TRNN CALFLG,RXFLG ;(RX)? + 002413' 254000 002422' 19820 JRST OKBLK0 ;NO + 002414' 200000 004647' 19830 MOVE 0,MATCH ;GET FILE NAME + 002415' 554040 004650' 19840 HLRZ T1,MATCH+1 ;AND EXT. + 002416' 312000 003730' 19850 CAME 0,STAR ;SKIP IF NAME IS "*" + 002417' 202000 004044' 19860 MOVEM 0,DTON ;OTHERWISE REPLACE NAME + 002420' 302040 120000 19870 CAIE T1,(SIXBIT /*/) ;SAME FOR EXT + 002421' 506040 004045' 19880 HRLM T1,DTON+1 + 002422' 200000 004044' 19890 OKBLK0: MOVE 0,DTON ;GET OUTPUT FILE NAME + 002423' 554040 004045' 19900 HLRZ T1,DTON+1 ;AND EXT + 002424' 302040 120000 19910 CAIE T1,(SIXBIT /*/) ;IS IT "*" + 002425' 316000 003730' 19920 CAMN 0,STAR ;IS IT "*" + 002426' 254000 002033' 19930 JRST ERR4B ;YES, ERROR + + 19950 REPEAT 0,< ;NEEDS FIX TO TENDMP OR MONITOR + 19960 TRNE AUXFLG,DTAOUT ;OUTPUT TO DTA? + 19970 CAIE T1,(SIXBIT /SAV/) ;AND A SAV FILE? + 19980 SKIP 1 ;NO + 19990 UGETF OUT,0 ;SET TO FIRST FREE BLOCK + 20000 > + + 20020 IFN FTDSK,<TRC AUXFLG,DSKIN+DSKOUT ;DSK I/O + 20030 TRCN AUXFLG,DSKIN+DSKOUT + 20040 POPJ P, ;YES, EXIT + 20050 TRC AUXFLG,DTAIN+DTAOUT ;NO + 20060 TRCE AUXFLG,DTAIN+DTAOUT ;DTA I/O + 20070 JRST OKBLK1 ;NO> + 002427' 135000 003716' 20080 LDB 0,OKB ;DTA I/O - 1K BLKS + 002430' 137000 003715' 20090 DPB 0,OKBD ;DEPOSIT IN DTON + 002431' 263240 000000 20100 POPJ P, + + 20120 IFN FTDSK,< + 20130 OKBLK1: TRC AUXFLG,DTAIN+DSKOUT ;DTA-TO-DSK + 20140 TRCN AUXFLG,DTAIN+DSKOUT + 20150 POPJ P, ;YES + 20160 TRC AUXFLG,DSKIN+DTAOUT ;NO,DSK-TO-DTA? + 20170 TRCE AUXFLG,DSKIN+DTAOUT ;NO + 20180 POPJ P, + 20190 HLRZ 0,ZRF+1 ;YES DSK-TO-DTA + 20200 IFE DISK30,< + 20210 CAIE 0,(SIXBIT /SAV/) ;GET LOOKED UP EXT,(INPUT). + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 48-1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 20220 > + 20230 IFN DISK30,<CAIE 0,SIXBIT /SVE/> + 20240 POPJ P, + 20250 HLRO T1,ZRF+3 ;EXTENSION=SAV + 20260 MOVNS T1 ;WORD COUNT + 20270 IDIVI T1,2000 ;DIVIDE BY 1K CORE(OCTAL LOCS.) + 20280 JUMPN T2,.+2 + 20290 SOJ T1, ;N-1 + 20300 DPB T1,OKBD + 20310 POPJ P,>> + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 49 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 20340 IFN FTDSK,< + 20350 ;ARE WE DOING (XD) FROM DSK? IF NOT, EXIT. + 20360 ;SEE IF CURRENT FILE SELECTED IN ZRF IS IN THE + 20370 ;LIST OF FILES NOT TO BE COPIED. (POPJ IF IT IS) + 20380 + 20390 XDDSK: TRC FLAG,XFLG+DFLG ;COMPLEMENT + 20400 TRCN FLAG,XFLG+DFLG ;RESET AND TEST + 20410 TRNN AUXFLG,DSKIN ;/X AND /D WERE SET + 20420 JRST CPOPJ1 ;NOT DSKIN SO COPY FILE + 20430 HRROI T1,-12 ;SET TO LOOP NAMTAB + 20440 XDDSK2: MOVE T2,ZRF ;GET FILE NAME + 20450 SKIPN T3,NAMTAB+12(T1) ;END OF TABLE ENTRIES? + 20460 JRST CPOPJ1 ;YES, EXIT + 20470 CAME T2,T3 ;FN IS * OR MATCH? + 20480 CAMN T3,STAR + 20490 SKIP 1 ;YES, * OR MATCH? + 20500 JRST XDDSK1 ;NO MATCH + 20510 HLLZ T2,ZRF+1 ;GET EXT + 20520 SKIPN T3,NAMTAB+24(T1) ;NO EXT MATCH WANTED + 20530 POPJ P, ;EXIT THEN + 20540 CAME T2,T3 ;EXT IS * OR MATCH? + 20550 CAMN T3,STAR + 20560 POPJ P, ;FN EX MATCH, NO COPY + 20570 XDDSK1: AOJL T1,XDDSK2 ;TRY ANOTHER FOR MATCH + 20580 JRST CPOPJ1 ;SEARCHED TABLE, NO MATCH> + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 50 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 20600 ;ROUTINE TO DELETE OR RENAME FILES ON DTA OR DSK OR SET UP NAMTAB + 20610 ;FOR (DX) (DISK ONLY) + + 002432' 602300 002000 20630 DTDELE: TRNE FLAG,XFLG ;/X + 002433' 254000 002443' 20640 JRST DELE1 ;YES + 002434' 606300 000010 20650 TRNN FLAG,DFLG ;/D NEED EXPLICIT DEVICE + 002435' 254000 002440' 20660 SKIP 2 + 002436' 606740 000200 20670 TRNN CALFLG,DVSWTH ;-1 IF DEVICE SEEN + 002437' 254000 002122' 20680 JRST ERR8 ;NO, ERROR + 002440' 200000 004634' 20690 MOVE 0,ODEV ;OUTPUT DEVICE + 002441' 202000 004637' 20700 MOVEM 0,DEVICE ;NO,SET DEVICE FOR INPUT + 002442' 202000 004050' 20710 MOVEM 0,DEVA + 002443' 620540 261500 20720 DELE1: TRZ AUXFLG,DTAIN+CDRIN+TTYIN+PPTIN+MTAIN+DSKIN + 002444' 260240 002132' 20730 PUSHJ P,CHECK1 ;RESET INPUT DEVICE DESCRP + 002445' 201000 003766' 20740 MOVEI 0,NAMTAB ;FOR /R GET NEW NAME + 002446' 505000 004044' 20750 HRLI 0,DTON ;SET TO BLT OUTPUT DIRECT ENTRY + 002447' 251000 003771' 20760 BLT 0,NAMTAB+3 ;TO NAMTAB + + 002450' 606540 060000 20780 TRNN AUXFLG,DTAIN+DSKIN + 002451' 254000 002066' 20790 JRST ERR5 ;NOT DTA OR DSK + 002452' 260240 002746' 20800 PUSHJ P,FNSET ;SET UP CALFLG CORRECTLY + 002453' 602300 002000 20810 TRNE FLAG,XFLG ;/X? + 002454' 254000 002456' 20820 JRST DTD1 ;YES, (DX). RX ILLEGAL + 20830 IFN FTDSK,<TRNE AUXFLG,DSKOUT ;NO, HAS TO BE /D OR /R + 20840 JRST DSKDR0 ;ON DSK> + 002455' 254000 002460' 20850 JRST DTADR ;OR DTA + + 002456' 20870 DTD1: + 20880 IFN FTDSK,<TRNE AUXFLG,DSKIN ;DSK INPUT? + 20890 JRST DTD1A ;YES> + 002456' 260240 003271' 20900 PUSHJ P,DTCHECK ;NO, HAS TO BE DTA, GET DIR + 002457' 254000 002466' 20910 JRST DELE3 ;DELETE, FILES FROM DIR + 20920 IFN FTDSK,< + 20930 DTD1A: SETZM NAMTAB ;COLLECT NAMES FOR DX, DSK SOURCE + 20940 MOVE T1,[XWD NAMTAB,NAMTAB+1] + 20950 BLT T1,NAMTAB+23 ;FIRST CLEAR TABLE + 20960 MOVEI T1,NAMTAB ;LOCATION OF NAMTAB + 20970 MOVEM T1,LOCNAM + 20980 DTD4: MOVE 0,FILNAM + 20990 JUMPE 0,DTD4A ;FN=0 ILLEGAL + 21000 MOVE T1,LOCNAM + 21010 MOVEM 0,(T1) ;STORE FILENAME FROM CS + 21020 MOVE 0,FILEX ;STORE FILE EXT + 21030 MOVEM 0,12(T1) ;TABLE FULL? + 21040 MOVEI T2,NAMTAB+11 + 21050 CAMN T2,T1 + 21060 SOS ESWTCH ;YES + 21070 SKIPE ESWTCH ;NO, END OF CS SCAN? + 21080 JRST DTD2 ;END OF NAME PROCESSING + 21090 AOS T1,LOCNAM ;SET TO STORE IN NEXT SLOT NAMTAB + 21100 DTD4B: PUSHJ P,DESCRP ;NO, GET NEXT FILENAME FROM CS + 21110 TRNE CALFLG,NEWPP!NEWDEV + 21120 JRST ERR5A ;ERROR, NEW DEV OR# PP + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 50-1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 21130 JRST DTD4 + 21140 DTD4A: PUSHJ P,ERR3A + 21150 JRST DTD4B + 21160 + 21170 ;END OF CS OR NAMTAB FULL + 21180 DTD2: PUSHJ P,ININIT ;INIT INPUT FILE + 21190 MOVEI T1,1 ;SET TO RETURN DTCOPY+1 + 21200 JRST DTD5> + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 51 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 21220 ;ROUTINE TO DELETE OR RENAME FILES ON DTA + + 002460' 260240 003271' 21240 DTADR: PUSHJ P,DTCHECK ;GO GET DTA DIRECTORY + 002461' 200040 003742' 21250 MOVE T1,IBF ;CURRENT INPUT BUFFER + 21260 IFN WCH,< + 21270 USETO OUT,1 ;TRY TO WRITE OUTPUT TAPE + 21280 > ;DETERMINE IF WRITE LOCKED + 21290 IFE WCH,< + 002462' 075100 000144 21300 USETO OUT,144> ;THIS SHOULD GIVE ERROR MSG + 002463' 067101 000000 21310 OUTPUT OUT,(T1) ;IF DTA WRITE LOCKED + 002464' 260240 003271' 21320 PUSHJ P,DTCHECK ;GO GET DTA DIRECTORY + + 002465' 260240 002711' 21340 PUSHJ P,INFO ;WRITE "FILES DELETED/RENAME + + 21360 ;********************************************************************* + + + 21390 ;LOOP TO DELETE/RENAME. FOR (DX) DELETE FILES FROM DTA DIR + 21400 ;THEN USE REVISED DIRECTORY TO COPY ALL REMAINING FILES + + + 002466' 260240 002566' 21430 DELE3: PUSHJ P,LOOK ;GET FILE TO DELETE OR RENAME FROM CS + 002467' 254000 002513' 21440 JRST DELE5 ;NO MORE FILES + 002470' 606300 002000 21450 TRNN FLAG,XFLG ;/X? + 002471' 260240 002743' 21460 PUSHJ P,INFO3 ;PRINT FILENAME-EXT + 002472' 200040 004012' 21470 MOVE T1,DIRST ;GOT A MATCH - PROCESS IT + 002473' 602300 000100 21480 TRNE FLAG,RFLG ;AND IT IS AT (T5) IN (DTA) DIR + 002474' 254000 002522' 21490 JRST DTRNAM ;RENAME + 21500 IFN WCH,< + 21510 SKIPA T2,T1 + 21520 ADDI T2,4 + 21530 SKIPE 4(T2) + 21540 JRST .-2 + 21550 HRLS T1 + 21560 ADDI T1,4 ;GET TO END OF NAMES + 21570 MOVSS T1 ;BLOCK UP DIR + 21580 BLT T1,-1(T2) ;ZERO OUT LAST 4 WORDS + 21590 SETZM (T2) + 21600 SETZM 1(T2) + 21610 SETZM 2(T2) + 21620 SETZM 3(T2) + 21630 MOVE T1,DIRST1 + 21640 MOVEM T1,DIRST + 21650 JRST DELE3> + 21660 IFE WCH,< + 002475' 402001 000000 21670 SETZM (T1) ;DELETE FILENAME IN CORE DIRECT + 002476' 402001 000026 21680 SETZM 26(T1) ;DELETE EXT + 002477' 274040 004013' 21690 SUB T1,DIRST1 ;GET FILE "NUMBER" (POS IN DIRECT) + 002500' 201140 001102 21700 MOVEI T3,1102 ;TO LOOK AT ALL BLOCKS + 002501' 205100 440500 21710 MOVSI T2,(POINT 5,0) + 002502' 540100 004013' 21720 HRR T2,DIRST1 ;TO CALCULATE ADDRESS OF FIRST WORD + 002503' 275100 000122 21730 SUBI T2,122 ;OF BLOCK TABLE IN DIRECTORY + 002504' 363140 002466' 21740 DELE2: SOJLE T3,DELE3 ;LOOK AT 1101 BLOCKS + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 51-1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 002505' 134000 000002 21750 ILDB 0,T2 ;GET BLOCK NUMBER + 002506' 312000 000001 21760 CAME 0,T1 ;IS IT SAME AS FILE "NUMBER" + 002507' 254000 002504' 21770 JRST DELE2 ;NO IGNORE + 002510' 400000 000000 21780 SETZ 0, ;FREE THE BLOCKS OF THIS FILE + 002511' 137000 000002 21790 DPB 0,T2 ;CLEAR OUT BLOCK NUMBER + 002512' 254000 002504' 21800 JRST DELE2> ;LOOP ON 1102 BLOCKS + 002513' 200040 003742' 21810 DELE5: MOVE T1,IBF ;LOC OF INPUT BUFFER + 002514' 602300 002000 21820 TRNE FLAG,XFLG ;DX SWITCH? + 002515' 254000 002543' 21830 JRST DTD6 ;YES, NOW MUST COPY REMAINING FILES + 21840 IFN WCH,< + 21850 USETO OUT,1> + 21860 IFE WCH,< + 002516' 075100 000144 21870 USETO OUT,144> + 002517' 067101 000000 21880 OUTPUT OUT,(T1) ;OUTPUT DTA DIRECTORY + 002520' 071040 000000 21890 RELEAS CON, ;OUTPUT DELETE OR RENAME INFO TO TTY + 002521' 254000 000415' 21900 JRST MAINB + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 52 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 21920 ;ROUTINE TO RENAME FILE ON DECTAPE + + 002522' 260240 002553' 21940 DTRNAM: PUSHJ P,RENAME + 002523' 402000 004046' 21950 SETZM DTON+2 ;MAKE MONITOR SUPPLY + 002524' 402000 004047' 21960 SETZM DTON+3 ;DATE TIME + 002525' 076100 004044' 21970 LOOKUP OUT,DTON ;LOOK UP FILENAME-EXT ON OUTPUT DEV + 002526' 254000 002530' 21980 SKIP 1 ;NO FILE ALREADY OF DESTINATION NAME + 002527' 254000 002536' 21990 JRST DTRNM1 + 002530' 200000 004044' 22000 MOVE 0,DTON ;RENAME, FILENAME + 002531' 322000 002466' 22010 JUMPE 0,DELE3 ;BUT NOT IF ZERO + 002532' 202001 000000 22020 MOVEM 0,(T1) ;PUT IN DIRECTORY + 002533' 200000 004045' 22030 MOVE 0,DTON+1 ;GET EXT + 22040 IFE WCH,< + 002534' 502001 000026 22050 HLLM 0,26(T1)> ;RENAME, EXT + 22060 IFN WCH,< + 22070 HLLM 0,1(T1)> + 002535' 254000 002466' 22080 JRST DELE3 + 002536' 550100 003742' 22090 DTRNM1: HRRZ T2,IBF ; GET PROTECTION DIR SLOT + 002537' 135000 004704' 22100 LDB 0,[POINT 5,17(T2),14] + 002540' 302000 000036 22110 CAIE 0,36 ; FILE PROTECTION ? + 002541' 254000 001762' 22120 JRST ERR9 ; NO,ILLEGAL FILE NAME + 002542' 254000 002466' 22130 JRST DELE3 ; RENAME DONE AT MAINB + + 22150 ;END OF LOOP + 22160 ;********************************************************************* + 22170 ;DX SWITCH ON, COPY ALL BUT SPECIFIED FILES. I.E. THOSE NOT DELETED + + 002543' 201040 000000 22190 DTD6: MOVEI T1,0 ;SET TO RETURN TO DTCOPY + 002544' 205000 120000 22200 DTD5: MOVSI 0,(SIXBIT /*/) + 002545' 202000 004040' 22210 MOVEM 0,FILNAM ;FORCE COPY-ALL + 002546' 202000 004041' 22220 MOVEM 0,FILEX ;BY MAKING FILE-EXT=*.* + 002547' 260240 002746' 22230 PUSHJ P,FNSET ;FIND DETAILS OF FILE-EXT + 002550' 602540 020000 22240 TRNE AUXFLG,DTAIN ;DTA INPUT + 002551' 260240 003277' 22250 PUSHJ P,DTCH1 ;INIT DIRST,DIRST1 + 22260 IFN RIMSW, < + 22270 TLNE FLAG,RIMFLG ;NO + 22280 JRST RIMTB + 22290 > + 002552' 254001 002224' 22300 JRST DTCOPY(T1) + + + 22330 ;SET UP OUTPUT DIRECTORY ENTRY FOR RENAME + 22340 ;ONLY ONE FILE NAME ALLOWED, BUT MAY BE *.EXT OR FN.* + + 002553' 331000 004134' 22360 RENAME: SKIPL ESWTCH ;SKIP IF CR,LF SEEN IN C.S. + 002554' 254000 002040' 22370 JRST ERR6A ;ONLY 1 SOURCE FILE DESCRIPTOR ALLOWED + 002555' 554000 003767' 22380 HLRZ 0,NAMTAB+1 ;GET EXT + 002556' 306000 120000 22390 CAIN 0,(SIXBIT /*/) ;USE SPEC. EXTENSION, BUT IF + 002557' 554000 004053' 22400 HLRZ 0,ZRF+1 ;EXT.=*, USE SOURCE EXTENSION + 002560' 506000 004045' 22410 HRLM 0,DTON+1 ;USE SPECIFIED EXT + 002561' 200100 003766' 22420 MOVE T2,NAMTAB ;USE SPEC. FN, BUT IF + 002562' 316100 003730' 22430 CAMN T2,STAR ;FN=* OR 0, USE SOURCE FILENAME + 002563' 200100 004052' 22440 MOVE T2,ZRF ;SOURCE FILE NAME=DEST + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 52-1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 002564' 202100 004044' 22450 MOVEM T2,DTON ;USE SPECIFIED FILENAME + 002565' 263240 000000 22460 POPJ P, + + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 53 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 22510 ;THIS ROUTINE GETS NEXT FILENAME.EXT FROM CS + 22520 ;THEN SEES IF ONE IN DIRECTORY MATCHES + 22530 ;IF IT DOES - EXIT IS CPOPJ1 + 22540 ;NO-MORE-FN.EX-TO-HANDLE-EXIT IS POPJ + 22550 ;PREPARE ZRF FOR A "LOOKUP" ON THE NEXT REQUESTED FILE. + + 002566' 602740 000001 22570 LOOK: TRNE CALFLG,FNEX ;DOES FILNAM, FILEX CONTAIN + 002567' 254000 002572' 22580 JRST LOOK6 ;A FILE TO THINK ABOUT? YES + 002570' 260240 002767' 22590 LOOK01: PUSHJ P,LOOKA ;GET ONE (NOTE: DEVICE MAY ALTER) + 002571' 263240 000000 22600 POPJ P, ;NONE, END OF CS + 22610 ;RETURN SKIP FROM LOOKA + 002572' 200100 004041' 22620 LOOK6: MOVE T2,FILEX ;GET FILE EXT INTO T2 + 002573' 336040 004040' 22630 SKIPN T1,FILNAM ;FILNAME AND EXT=0? + 002574' 332100 004041' 22640 SKIPE T2,FILEX + 002575' 254000 002577' 22650 SKIP 1 ;EITHER FN OR EX N.E.0 + 002576' 254000 002650' 22660 JRST LOOK7C ;FN.EX=0, ONE FILE COPY + 002577' 312040 003730' 22670 CAME T1,STAR ;FILNAME OR EXT=*? + 002600' 316100 003730' 22680 CAMN T2,STAR + 002601' 254000 002640' 22690 JRST LOOK7A ;FN OR EX=*, MANY FILES + + 002602' 602540 060000 22710 TRNE AUXFLG,DTAIN+DSKIN ;DONT REQUIRE FILENAME + 002603' 322040 002616' 22720 JUMPE T1,LOOK6C ;HERE FOR 0.EX,FN.EX OR FN.0,0.EX ILLEGAL + 002604' 620740 000001 22730 LOOK7B: TRZ CALFLG,FNEX ;IF HERE, ONLY ONE FILE WAS ENTAILED IN REQUEST. + 002605' 606540 060000 22740 TRNN AUXFLG,DTAIN+DSKIN + 002606' 254000 002635' 22750 JRST LOOK4 ;GOT A FILE TO HANDLE + + 002607' 260240 002662' 22770 LOOK8: PUSHJ P,PICUP ;GET A FILE (ANY) FROM DIRECTORY + 002610' 254000 002623' 22780 JRST LOOK2 ;WE GOT A FILE, DOES IT MATCH? + 002611' 622740 000001 22790 TRZE CALFLG,FNEX ;SEE IF A PARTIC. FILE WAS REQUESTED? + 002612' 254000 002620' 22800 JRST LOOK6D ;NO + 002613' 254000 002616' 22810 JRST LOOK6C ;YES + + 002614' 260240 002005' 22830 LOOK6A: PUSHJ P,ERR3A + 002615' 254000 001107' 22840 JRST IOERRN ;NO RECOVERY + 002616' 260240 002005' 22850 LOOK6C: PUSHJ P,ERR3A + 002617' 254000 002570' 22860 JRST LOOK01 ;GET NEXT FILE FROM CS + + 002620' 626740 000040 22880 LOOK6D: TRZN CALFLG,ASTFLG ;DID WE FIND AT LEAST ONE + 002621' 260240 002005' 22890 PUSHJ P,ERR3A ;NO, PRINT MSG. + 002622' 254000 002566' 22900 JRST LOOK ;GET NEXT FILE FROM CS + 22910 ;CHECK IF FILE.EXT IN DIRECTORY MATCHES FILE TO /D,/R + 22920 ;NOTE WE MAY HAVE *.EXT,FIL.*, OR *.* + + + 002623' 606740 000004 22950 LOOK2: TRNN CALFLG,MATFN ;SHOULD FILENAMES MATCH + 002624' 254000 002630' 22960 JRST LOOK3 ;NO + 002625' 200040 004040' 22970 MOVE T1,FILNAM ;YES + 002626' 312040 004052' 22980 CAME T1,ZRF + 002627' 254000 002607' 22990 JRST LOOK8 ;NO MATCH + + 002630' 606740 000002 23010 LOOK3: TRNN CALFLG,MATEX ;SHOULD EXTENSIONS MATCH + 002631' 254000 002635' 23020 JRST LOOK5 ;NO + 002632' 200040 004041' 23030 MOVE T1,FILEX ;YES + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 53-1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 002633' 312040 004053' 23040 CAME T1,ZRF+1 + 002634' 254000 002607' 23050 JRST LOOK8 ;NO MATCH + 23060 LOOK5: IFN DISK30,< + 23070 TRNN AUXFLG,DSKIN ;DSK INPUT? + 23080 JRST LOOK4 ;NO + 23090 LDB T1,UFDIN+1 ;PICKUP P-P# IN DIRECTORY + 23100 HRRZM T1,T2 + 23110 CAME T2,MASK ;COMPARE WITH OWN P-P# + 23120 JRST LOOK8 ;NO MATCH> + 002635' 660540 002000 23130 LOOK4: TRO AUXFLG,READ1 ;READY FOR FIRST READ + 002636' 660740 000040 23140 TRO CALFLG,ASTFLG ;FOUND A FILE *.EXT, F.*,*.* + 002637' 254000 001707' 23150 JRST CPOPJ1 ;MATCH OR NO CARES + + 23170 ;FILENAME OR EXT=* + 002640' 322100 002642' 23180 LOOK7A: JUMPE T2,.+2 ;EXT=0? + 002641' 316100 003730' 23190 CAMN T2,STAR ;NO, + 002642' 312040 003730' 23200 CAME T1,STAR + 002643' 254000 002645' 23210 SKIP 1 + 002644' 254000 002655' 23220 JRST LOOK1 ;*.* ALWAYS O.K. AND * + 002645' 606540 060000 23230 TRNN AUXFLG,DSKIN+DTAIN + 002646' 254000 002614' 23240 JRST LOOK6A ;*.A OR * ON NON-DIRECT DEV + 002647' 254000 002607' 23250 JRST LOOK8 + + 002650' 602540 060000 23270 LOOK7C: TRNE AUXFLG,DSKIN+DTAIN + 002651' 254000 002616' 23280 JRST LOOK6C ;0.0 ON DIR DEVICE + 002652' 402000 004052' 23290 SETZM ZRF + 002653' 402000 004053' 23300 SETZM ZRF+1 + 002654' 254000 002604' 23310 JRST LOOK7B ;0.0 ON NON-DIR. DEV. + + 002655' 602540 060000 23330 LOOK1: TRNE AUXFLG,DTAIN+DSKIN + 002656' 254000 002607' 23340 JRST LOOK8 + 002657' 402000 004052' 23350 SETZM ZRF + 002660' 402000 004053' 23360 SETZM ZRF+1 + 002661' 254000 002635' 23370 JRST LOOK4 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 54 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 23390 ;ROUTINE TO GET NEXT FILE NAME FROM DIRECTORY + 23400 ;FILNAM, FILEX CONTAIN THE FILE NAME. EXT TO BE + 23410 ;MATCHED WITH DIR. NAMES. PUT SUGGESTED FILE + 23420 ;NAME EXT IN ZRF, ZRF+1 AND #P-P IN ZRF+3 + 23430 ;NOTE THAT WE HAVE TO HANDLE *.EXT,FILE.* + + 002662' 23450 PICUP: + 23460 IFN FTDSK,<TRNN AUXFLG,DSKIN ;DSK INPUT? + 23470 JRST PICUP2 ;N0, DTA + 23480 SOSLE UFDIN+2 ;YES + 23490 JRST .+3 + 23500 PICUP1: PUSHJ P,UIN ;INPUT USER'S FILE DIRECTORY + 23510 JRST CPOPJ1 ;EOF ON DSK + 23520 ILDB 0,UFDIN+1 ;PICK UP FILENAME + 23530 JUMPE 0,PICUP1 ;IGNORE NULL + 23540 MOVEM 0,ZRF ;SET FILE NAME + 23550 MOVE 0,FNPPN + 23560 MOVEM 0,ZRF+3 ;SET DSK #P-P + 23570 SOS UFDIN+2 ;COUNT DOWN FOR NEXT TIME + 23580 ILDB 0,UFDIN+1 ;SET FILE EX + 23590 HLLZM 0,ZRF+1 + 23600 IFN DISK30,< + 23610 IBP UFDIN+1 ;INCREMENT POINTER TO GET PROJ,PROG # + 23620 IBP UFDIN+1> + 23630 POPJ P,> + + 002662' 23650 PICUP2: + 23660 IFN WCH,< + 23670 MOVE T5,DIRST ;DIRST=LOC 4 FIRST TIME THRU + 23680 ADDI T5,4 ;CALCULATE FIRST/NEXT FILENAME + 23690 MOVEM T5,DIRST + 23700 MOVE 0,(T5) + 23710 JUMPE 0,CPOPJ1 ;NO MORE FILENAMES IN DIRECTORY + 23720 MOVEM 0,ZRF + 23730 MOVE 0,1(T5)> + 23740 IFE WCH,< + 002662' 200140 004013' 23750 MOVE T3,DIRST1 ;SETUP TO CHECK ALL FILENAME SLOTS + 002663' 271140 000026 23760 ADDI T3,26 ;IN DIRECTORY (22 FILE NAMES) + 002664' 200440 004012' 23770 MOVE T5,DIRST ;LOC OF FIRST/NEXT FILE + 002665' 271440 000001 23780 PICUP4: ADDI T5,1 ; + 002666' 313440 000003 23790 CAMLE T5,T3 ;END OF FILE SLOTS? + 002667' 254000 001707' 23800 JRST CPOPJ1 ;END OF FILE NAMES + 002670' 202440 004012' 23810 MOVEM T5,DIRST ;NEXT SLOT TO LOOK AT + 002671' 200011 000000 23820 MOVE 0,(T5) ;GOT FILE NAME FROM DIRECT + 002672' 322000 002665' 23830 JUMPE 0,PICUP4 ;IGNORE IF 0 + 002673' 202000 004052' 23840 MOVEM 0,ZRF + 002674' 200011 000026 23850 MOVE 0,26(T5)> ;GET EXT ETC + 002675' 512000 004053' 23860 HLLZM 0,ZRF+1 + 002676' 200000 004043' 23870 MOVE 0,PP + 002677' 202000 004055' 23880 MOVEM 0,ZRF+3 + 002700' 263240 000000 23890 POPJ P, + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 55 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 23910 ;READ DTA DIR. AND PREPARE T5 TO PICK UP FIRST ENTRY. + + 002701' 260240 003272' 23930 DTADIR: PUSHJ P,DTCH2 ;READ DTA DIR INTO INPUT BUF + 002702' 201140 004400' 23940 DTADI1: MOVEI T3,DBUF ;SET BLT FROM INBUF TO DBUF + 002703' 504140 000011 23950 HRL T3,T5 ;FIRST DATA WORD OF DIRECTORY IN T5 + 23960 IFN WCH,< + 23970 MOVNS T2 + 23980 BLT T3,DBUF+176(T2) + 23990 SETZM DBUF+177(T2) + 24000 MOVEI T5,DBUF-4> + 24010 IFE WCH,< + 002704' 251140 004576' 24020 BLT T3,DBUF+176 ;MOVE FROM INBUF TO DBUF + 002705' 201440 004522' 24030 MOVEI T5,DBUF+123-1> ;LOC OF FIRST FILE NAME + 002706' 202440 004012' 24040 MOVEM T5,DIRST ;T5 POINTS TO FILNAME JUST HANDLED + 002707' 202440 004013' 24050 MOVEM T5,DIRST1 ;TO RESTORE DIRST + 002710' 263240 000000 24060 POPJ P, ;(IE NONE BUT NEXT WILL BE FIRST) + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 56 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 24100 ;ROUTINE TO OUTPUT FILENAMES THAT WERE DELETED OR RENAMED + 24110 ;PRINT "FILES DELETED:" OR "FILES RENAMED:" + 24120 ;ALSO USED TO PRINT "NO FILE NAMED XXX.XXX" + + + 002711' 200040 003756' 24150 INFO: MOVE T1,TFO ;SETUP TTY FOR OUTPUT + 002712' 200100 003753' 24160 MOVE T2,TFI ;SAVE BUFFER LOCS + 002713' 260240 001410' 24170 PUSHJ P,INICON ;INIT TTY + 002714' 562100 003753' 24180 HRROM T2,TFI ;SET BUFFER LOCS + 002715' 562040 003756' 24190 HRROM T1,TFO + 002716' 067040 000000 24200 OUTPUT CON, + 002717' 623540 000100 24210 TLZE AUXFLG,INFOFL ;ERROR PRINT ONLY? + 002720' 254000 002007' 24220 JRST ERR3AA ;YES + 002721' 606300 000010 24230 TRNN FLAG,DFLG ;DELETE? + 002722' 254000 002730' 24240 JRST INFO1 ;NO, MUST BE RENAME + 002723' 265040 002166' 24250 ERRPN2 </Files deleted:/> + 002724' 433235 462746 + 002725' 203114 566312 + 002726' 723134 435000 + 002727' 254000 002735' 24260 JRST INFO2 + 002730' 476000 004651' 24270 INFO1: SETOM RENSN ;DON'T PRINT IT TWICE + 002731' 265040 002166' 24280 ERRPN2 </Files renamed:/> ;RENAME (/R) + 002732' 433235 462746 + 002733' 203454 567302 + 002734' 667134 435000 + 002735' 201200 000015 24290 INFO2: MOVEI CHR,CR ;OUTPUT CR/LF + 002736' 260240 002175' 24300 PUSHJ P,PUTCON ;ON TTY + 002737' 201200 000012 24310 MOVEI CHR,LF + 002740' 260240 002175' 24320 PUSHJ P,PUTCON + 002741' 067040 000000 24330 OUTPUT CON, + 002742' 263240 000000 24340 POPJ P, + + 24360 ;********************************************************************** + 24370 ;PRINT FILENAME.EXT OR [P,P].UFD OF FILE DELETED + + 002743' 201140 004052' 24390 INFO3: MOVEI T3,ZRF ;LOCATION OF FILENAME + 002744' 260240 001146' 24400 PUSHJ P,FN.EX + 002745' 254000 002735' 24410 JRST INFO2 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 57 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 24430 ;/X OR /D. FIND OUT DETAILS OF FILE NAME AND + 24440 ;EXTENSION (0 FN.EX=*.*) AND ANY CHANGE IN + 24450 ;SOURCE DEV. SET BITS IN CALFLG. + + 002746' 620740 000037 24470 FNSET: TRZ CALFLG,ALLCLF ;CLEAR FLAGS ON ENTRY + 002747' 660740 000001 24480 TRO CALFLG,FNEX + 002750' 205000 120000 24490 MOVSI 0,(SIXBIT /*/) ;* TO AC0 + 002751' 312000 004040' 24500 CAME 0,FILNAM ;FILNAM=* OR 0? + 002752' 336000 004040' 24510 SKIPN FILNAM + 002753' 254000 002755' 24520 SKIP 1 ;FILENAME = * OR 0 + 002754' 660740 000004 24530 TRO CALFLG,MATFN ;FILENAME MUST BE MATCHED + 002755' 336000 004041' 24540 SKIPN FILEX ;EXT=0? + 002756' 606540 201500 24550 TRNN AUXFLG, MTAIN+CDRIN+PPTIN+TTYIN ;YES + 002757' 316000 004041' 24560 CAMN 0,FILEX ;NO, EXT = *? + 002760' 254000 002762' 24570 SKIP 1 ;YES + 002761' 660740 000002 24580 TRO CALFLG,MATEX ;FILE EXTENSION MUST BE MATCHED + 24590 IFN FTDSK,<TRNN AUXFLG,DSKIN + 24600 JRST FNSET1 + 24610 SKIPN T2,PP + 24620 JRST FNSET2 ;IF #P-P=0 IT IS COUNTED AS UNCHANGED + 24630 CAME T2,FNPPN + 24640 TRO CALFLG,NEWPP ;CHANGE IN # P-P + 24650 JRST FNSET1 + 24660 FNSET2: MOVE T2,FNPPN ;IF P-P#=0, SET TO PREVIOUS VALUE + 24670 MOVEM T2,PP> + 002762' 200100 004637' 24680 FNSET1: MOVE T2,DEVICE + 002763' 312100 004050' 24690 CAME T2,DEVA + 002764' 660740 000010 24700 TRO CALFLG,NEWDEV ;CHANGE IN SOURCE DEV. + 002765' 202100 004050' 24710 MOVEM T2,DEVA ;SET DEVA=DEVICE + 002766' 263240 000000 24720 POPJ P, + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 58 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 24740 ;POPJ EXIT IF END OF COMMAND STRING, OTHERWISE RESET + 24750 ;POINTER TO START OF DIRECTORY, READING IN NEW DIR. + 24760 ;IF DEV OR #P-P CHANGED (EXIT CPOPJ1) + 24770 ;IF DIR. IS ON DSK RESET BY REINIT. + + 002767' 332340 004134' 24790 LOOKA: SKIPE T4,ESWTCH ;MORE C.S.? + 002770' 263240 000000 24800 POPJ P, ;NO + 002771' 260240 000451' 24810 PUSHJ P,DESCRP ;YES, GET NEXT FN.EX FROM CS + 002772' 260240 000204' 24820 PUSHJ P,INLOOK ;CHECK FOR MTA REQUESTS, MODE + 002773' 260240 000154' 24830 PUSHJ P,M4 ;CHECK FOR /I,/B,/H + 002774' 552340 004636' 24840 HRRZM T4,ININI1 ;SET MODE + 002775' 071240 000000 24850 RELEAS DIR, + 002776' 606540 201500 24860 TRNN AUXFLG,MTAIN+CDRIN+PPTIN+TTYIN ;NON-DIR DEVICE? + 002777' 254000 003002' 24870 JRST LOOKF + + 003000' 602740 000006 24890 TRNE CALFLG,MATEX!MATFN ;YES, NO FN EX BUT *.* OR * ALLOWED + 003001' 254000 002040' 24900 JRST ERR6A + + 003002' 606300 000010 24920 LOOKF: TRNN FLAG,DFLG ;FOR DELETE, ONE SOURCE FILE + 003003' 254000 003006' 24930 JRST LOOKB ;... + + 003004' 602740 000030 24950 TRNE CALFLG,NEWDEV!NEWPP ;ONLY IS PERMITTED + 003005' 254000 002060' 24960 JRST ERR5A + + 003006' 606740 000030 24980 LOOKB: TRNN CALFLG,NEWDEV!NEWPP ;PREPARE TO LOOK FOR NEW FILE + 003007' 254000 003014' 24990 JRST LOOKC ;NAME AT HEAD OF DIRECTORY + + 003010' 260240 000426' 25010 PUSHJ P,ININIT ;INIT INPUT FILE + 003011' 606540 060000 25020 TRNN AUXFLG,DTAIN+DSKIN + 003012' 254000 001707' 25030 JRST CPOPJ1 + 25040 IFN FTDSK,<TRNN AUXFLG,DTAIN ;DTA INPUT? + 25050 JRST LOOKD ;NO, MUST BE DSK> + 003013' 260240 002701' 25060 PUSHJ P,DTADIR ;YES, READ IN DTA DIRECT + + 003014' 25080 LOOKC: + 25090 IFN FTDSK,<TRNE AUXFLG,DSKIN ;DSK INPUT? + 25100 JRST LOOKD ;YES> + 003014' 200440 004013' 25110 MOVE T5,DIRST1 ;NO, RESET DIRECTORY START + 003015' 202440 004012' 25120 MOVEM T5,DIRST + 003016' 254000 001707' 25130 JRST CPOPJ1 + + 25150 IFN FTDSK,< + 25160 LOOKD: PUSHJ P,DSKDIR ;GET USER'S FILE DIRECTORY + 25170 SETZM UFDIN+2 ;DSK DIR BUF EMPTY + 25180 JRST CPOPJ1> + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 59 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 25200 ;ROUTINE TO LIST DTA OR DSK DIRECTORIES + + + 003017' 077100 004044' 25230 DTPDIR: ENTER OUT,DTON ;OUTPUT DEV,NROCT ENTRY + 003020' 254000 002024' 25240 JRST ERR4 ;DIRECTORY FULL + 25250 IFN FTDSK,<TRNE AUXFLG,FFLG ;/F? SHORT FORM? + 25260 SKIPE DEVICE ;INPUT DEVICE SPECIFIED? + 25270 JRST PDIR1A ;YES + 25280 MOVSI 0,(SIXBIT/DSK/) + 25290 DEVCHR + 25300 JUMPE 0,PDIR1A ;NO DISK + 25310 HRRZI 0,(SIXBIT /DSK/);ASSUME DSK IF NO DEVICE GIVEN + 25320 HRLZM 0,DEVICE + 25330 TROA AUXFLG,DSKIN ;SET DSK INPUT + 25340 PDIR1A: TRNE AUXFLG,DSKIN ;DSK INPUT? + 25350 JRST DSKLST ;YES, GO AND TRY TO LIST DSK> + 003021' 606540 020000 25360 TRNN AUXFLG,DTAIN ;DECTAPE INPUT? + 003022' 254000 002066' 25370 JRST ERR5 ;NOT DSK OR DTA. ERROR + + 25390 ;ROUTINE TO LIST DTA DIRECTORY. /L OR /F SWITCH + + 003023' 260240 003271' 25410 DTALST: PUSHJ P,DTCHECK ;CHECK FOR DTA INPUT-MUST BE DECTAPE AND + 25420 ;GET DIRECTORY + 003024' 260240 003205' 25430 PUSHJ P,CRLF ;PRINT NO. OF FREE BLOCKS LEFT + 003025' 135040 004705' 25440 LDB T1,[POINT 5,16(T5),14] + 003026' 302040 000036 25450 CAIE T1,36 ; SKIP DIR HEADER IF + 003027' 254000 003070' 25460 JRST PDIR1B ; DECTAPE HAS NO PROTECTION +U 003030' 334040 004706' 25470 LSTLIN HEDL1 ; PRINT HEADER + 003031' 260240 000756' + 003032' 134200 000001 + 003033' 326200 003031' + 003034' 200100 003736' 25480 MOVE T2,DTAID + 003035' 322100 003055' 25490 JUMPE T2,DTALS4 + 003036' 201100 000005 25500 MOVEI T2,5 ; CHARACTER COUNT + 003037' 200000 004707' 25510 MOVE 0,[POINT 6,DTAID] + 003040' 134200 000000 25520 ILDB CHR,0 ; GET CLASSIFICATION + 003041' 302200 000023 25530 CAIE CHR,23 ; STD (I.E.=3) ? + 003042' 344100 003052' 25540 AOJA T2,DTALS3 + 003043' 134200 000000 25550 DTALS1: ILDB CHR,0 ; GET NEXT DIGIT + 003044' 271200 000040 25560 ADDI CHR,40 ; CONVERT TO ASCII + 003045' 306200 000060 25570 CAIN CHR,"0" ; SUPPRESS LEADING ZEROS + 003046' 367100 003043' 25580 SOJG T2,DTALS1 + 003047' 260240 000756' 25590 PUSHJ P,PUT + 003050' 363100 003055' 25600 DTALS2: SOJLE T2,DTALS4 + 003051' 134200 000000 25610 ILDB CHR,0 + 003052' 271200 000040 25620 DTALS3: ADDI CHR,40 + 003053' 260240 000756' 25630 PUSHJ P,PUT + 003054' 254000 003050' 25640 JRST DTALS2 + 003055' 201200 000133 25650 DTALS4: MOVEI CHR,"[" + 003056' 260240 000756' 25660 PUSHJ P,PUT + 003057' 554640 003737' 25670 HLRZ DOUT,DIRPPN + 003060' 260240 003260' 25680 PUSHJ P,OUTDEC + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 59-1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 003061' 201200 000054 25690 MOVEI CHR,"," + 003062' 260240 000756' 25700 PUSHJ P,PUT + 003063' 550640 003737' 25710 HRRZ DOUT,DIRPPN + 003064' 260240 003260' 25720 PUSHJ P,OUTDEC + 003065' 201200 000135 25730 MOVEI CHR,"]" + 003066' 260240 000756' 25740 PUSHJ P,PUT + 003067' 260240 003205' 25750 PUSHJ P,CRLF + 003070' 25760 PDIR1B: + + 25780 IFN WCH,< + 25790 MOVE T1,IBF + 25800 HLRZ DOUT,1(T1) ;GET FREE BLOCK POINTER + 25810 MOVNS DOUT + 25820 ADDI DOUT,1101 ;GET NO. OF FREE BLOCKS LESS FREE BLOCK NO. + 25830 PUSHJ P,OUTDEC ;PRINT RESULT> + 25840 IFE WCH,< + 003070' 400640 000000 25850 SETZ DOUT, ;CLEAR NO. FREE BLOCKS + 003071' 201340 001102 25860 MOVEI T4,1102 ;OCTAL NO. OF BLOCKS ON DECTAPE + 003072' 205040 440500 25870 MOVSI T1,(POINT 5,0) ;5 BIT BYTES + 003073' 550440 003742' 25880 HRRZ T5,IBF ;CURRENT INPUT BUFFER + 003074' 271051 000001 25890 ADDI T1,1(T5) ;POINTER TO 1ST DATA WORD IN DIRECT + + + 003075' 363340 003101' 25910 PDIR8: SOJLE T4,PDIR1 ;ALL THROUGH? + 003076' 134140 000001 25920 ILDB T3,T1 ;CALCULATE NO. OF FREE BLOCKS + 003077' 326140 003075' 25930 JUMPN T3,PDIR8 + + 25950 ;THIS BLOCK FULL + 003100' 344640 003075' 25960 AOJA DOUT,PDIR8 ;COUNT NO. WITH ZERO IN + 003101' 260240 003260' 25970 PDIR1: PUSHJ P,OUTDEC ;PRINT RESULT> + 003102' 200000 004710' 25980 MOVE 0,[POINT 6,PDIR7] + 003103' 201100 000022 25990 MOVEI T2,^D18 ;SET LOOP TO DEPOSIT 18 CHARS + 003104' 260240 003211' 26000 PUSHJ P,PDIR2 ;PRINT "FREE BLOCKS LEFT" MESSAGE + 003105' 260240 003205' 26010 PUSHJ P,CRLF ;CARRIAGE RET, LINEFEED + 003106' 260240 003277' 26020 PUSHJ P,DTCH1 ;FIX T5, TO POINT AT BEGIN OF DIR + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 60 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 26040 ;LOOP TO EXAMINE FILE NAMES DTA DIRECTORY + 003107' 26050 PDIR4: + 26060 IFE WCH,< + 003107' 336011 000123 26070 SKIPN 123(T5) ;NULL (=0) FILE NAME? + 003110' 254000 003200' 26080 JRST PDIR6 ;YES SO LOOK FOR ANOTHER> + 26090 IFN WCH,< + 26100 SKIPN (T5) ;NULL (=0) FILE NAME? + 26110 JRST MAIN1 ;YES, SO END OF DIR.> + 003111' 201100 000006 26120 MOVEI T2,6 ;TRANSMIT UP TO 6 CHARACTERS + 003112' 205000 440611 26130 MOVSI 0,440600+T5 ;SET UP SOURCE BYTE POINTER + 26140 IFE WCH,< + 003113' 541000 000123 26150 HRRI 0,123> ;SET TO PICK UP FILE NAME + 003114' 400340 000000 26160 SETZ T4, + 26170 ;FOLLOWING CODE TO OUTPUT PROJ, PROG FILENAME + 26180 ;***************************************************************** + 26190 IFE WCH,< + 003115' 554211 000151 26200 HLRZ CHR,151(T5) ;GET EXT + 003116' 302200 654644 26210 CAIE CHR,(SIXBIT/UFD/) ;UFD? + 003117' 254000 003130' 26220 JRST PDIR4A ;NO + + 003120' 554651 000123 26240 HLRZ DOUT,123(T5) ;PROJ NO. + 003121' 201100 000756' 26250 MOVEI T2,PUT + 003122' 260240 003235' 26260 PUSHJ P,OUTDC1 + + 003123' 201200 000054 26280 MOVEI CHR,COMMA ;COMMA + 003124' 260240 000756' 26290 PUSHJ P,PUT + + 003125' 550651 000123 26310 HRRZ DOUT,123(T5) ;PROG NO. + 003126' 260240 003235' 26320 PUSHJ P,OUTDC1 + 003127' 254000 003131' 26330 JRST PDIR4B + 26340 > + 26350 ;********************************************************************* + 003130' 260240 003211' 26360 PDIR4A: PUSHJ P,PDIR2 ;OUTPUT 6-BIT DATA AND INCR DIRECTORY PTR + 26370 IFE WCH,< + 003131' 510211 000151 26380 PDIR4B: HLLZ CHR,151(T5)> ;PICK UP EXTENSION + 26390 IFN WCH,< + 26400 HLLZ CHR,(T5)> + 003132' 205000 440611 26410 MOVSI 0,440600+T5 ;SET BYTE POINTER + 26420 IFE WCH,< + 003133' 541000 000151 26430 HRRI 0,151> ;PICK UP EXTENSION + 003134' 201100 000004 26440 MOVEI T2,4 ;PRINT UP TO 4 CHRS. (PERIOD+3*EXT) + 003135' 326200 003140' 26450 JUMPN CHR,.+3 ;EXTENSION NULL? + 003136' 260240 003214' 26460 PUSHJ P,PDIR2A+1 ;YES + 003137' 254000 003142' 26470 SKIP 2 ;NO + 003140' 201200 000016 26480 MOVEI CHR,PERIOD-40 ;NO, SO PRINT A PERIOD + 003141' 260240 003213' 26490 PDIR3: PUSHJ P,PDIR2A ;OUTPT 6 BIT OR INCR T5 + 26500 IFE WCH,< + 003142' 201200 000040 26510 MOVEI CHR,SPACE ;OUTPUT 2 SPACES + 003143' 260240 000756' 26520 PUSHJ P,PUT + 003144' 260240 000756' 26530 PUSHJ P,PUT + 003145' 602540 000020 26540 TRNE AUXFLG,FFLG ;SHORT FORM DIRECT ? + 003146' 254000 003177' 26550 JRST PDIR3A ;YES VJC 4/16/69 + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 60-1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 003147' 400640 000000 26570 SETZ DOUT, ;CALCULATE NBR OF BLOCKS PER FILE + 003150' 201340 001101 26580 MOVEI T4,1101 + 003151' 205000 440500 26590 MOVSI 0,(POINT 5,0) + 003152' 550100 003742' 26600 HRRZ T2,IBF + 003153' 271002 000001 26610 ADDI 0,1(T2) + 003154' 550600 000011 26620 HRRZ T7,T5 + 003155' 275602 000000 26630 SUBI T7,(T2) + 003156' 134500 000000 26640 ILDB T6,0 ;LOAD CONTENTS OF S.A.T. BLOCK + 003157' 316500 000014 26650 CAMN T6,T7 ;COMPARE WITH FILE SLOT NBR + 003160' 271640 000001 26660 ADDI DOUT,1 ;ADD 1 TO COUNT IF EQUAL + 003161' 367340 003156' 26670 SOJG T4,.-3 + 003162' 260240 003260' 26680 PUSHJ P,OUTDEC ;OUTPUT NBR OF BLOCKS PER FILE + 003163' 201200 000011 26690 MOVEI CHR,TAB + 26700 > + 26710 IFN WCH,< + 26720 AOJ T5, ;STEP DIR. POINTER + 26730 MOVEI CHR,11 + 26740 PUSHJ P,PUT ;OUTPUT A TAB + 26750 CAIG T4,7> + 003164' 260240 000756' 26760 PUSHJ P,PUT + 003165' 135040 004711' 26770 LDB T1,[POINT 5,DBUF+16,14] + 003166' 302040 000036 26780 CAIE T1,36 + 003167' 254000 003174' 26790 JRST PDIR3B + 003170' 550040 003742' 26800 HRRZ T1,IBF + 003171' 276440 000001 26810 SUBM T5,T1 + 003172' 135000 004712' 26820 LDB 0,[POINT 9,DBUF+200(T1),8] +U 003173' 260240 000000* 26830 PUSHJ P,PROTO ; OUTPUT PROTECTION + 003174' 26840 PDIR3B: + 26850 IFE WCH,< + 003174' 200011 000151 26860 MOVE 0,151(T5) ;GET ENTRY DATE> + 26870 IFN WCH,< + 26880 MOVE 0,-1(T5) ;GET ENTRY DATE> + 003175' 405000 007777 26890 ANDI 0,7777 ;LEFT BITS ARE IRRELEVENT + 003176' 260240 003224' 26900 PUSHJ P,DATOUT ;OUTPUT THE DATE + 003177' 260240 003205' 26910 PDIR3A: PUSHJ P,CRLF ;GIVE CR,LF 4/16/69 + 26920 IFN WCH,< + 26930 AOJA T5,PDIR4 ;PROCESS NEXT ENTRY> + 26940 IFE WCH,< + 003200' 550040 003742' 26950 PDIR6: HRRZ T1,IBF ;PROCESS NEXT ENTRY + 003201' 276440 000001 26960 SUBM T5,T1 + 003202' 301040 000026 26970 CAIL T1,26 ;FILE "NUMBER" OK? + 003203' 254000 000411' 26980 JRST MAIN1 ;NO, END OF ENTRIES + 003204' 344440 003107' 26990 AOJA T5,PDIR4 ;END OF LOOP, GET NEXT FILENAME> + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 61 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + + 27020 IFN FTDSK,< + 27030 CLRF: SOS LIN> + 003205' 201200 000015 27040 CRLF: MOVEI CHR,CR ;OUTPUT CAR. RET. + 003206' 260240 000756' 27050 PUSHJ P,PUT + 003207' 201200 000012 27060 MOVEI CHR,LF ;LINE FEED + 003210' 254000 000756' 27070 JRST PUT + + 003211' 134200 000000 27090 PDIR2: ILDB CHR,0 ;ROUTINE TO OUTPUT 6-BIT DATA + 003212' 606000 777777 27100 TRNN 0,-1 ;PRINT SPACES WHEN PRINTING THE FREE BLOCKS + 003213' 322200 003220' 27110 PDIR2A: JUMPE CHR,PDIR21 ;TERMINATE ON SPACE + 003214' 271200 000040 27120 ADDI CHR,40 ;CONVERT TO 7 BIT + 003215' 260240 000756' 27130 PUSHJ P,PUT ;OUTPUT CHARACTER + 003216' 271340 000001 27140 ADDI T4,1 + 003217' 367100 003211' 27150 SOJG T2,PDIR2 ;COUNT DOWN MAX-CHARS COUNTER + 27160 IFN WCH,< + 27170 PDIR21: AOJA T5,CPOPJ ;STEP AND CONTINUE> + 27180 IFE WCH,< + 003220' 263240 000000 27190 PDIR21: POPJ P, ;CONTINUE> + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 62 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 003221' 160046 624545 27210 PDIR7: SIXBIT /. FREE BLOCKS LEFT/ + 003222' 004254 574353 + 003223' 630054 454664 + 27220 ;OUTPUT THE DATE FOUND IN AC 0. + + 003224' 201100 000756' 27240 DATOUT: MOVEI T2,PUT ;PUT CHAR IN OUT + 003225' 231000 000037 27250 IDIVI 0,^D31 + 003226' 201141 000001 27260 MOVEI T3,1(1) + 003227' 231000 000014 27270 IDIVI 0,^D12 + 003230' 200640 000003 27280 MOVE DOUT,T3 ;DOUT=DAY + 003231' 260240 003235' 27290 PUSHJ P,OUTDC1 ;PRINT DAY + 003232' 260240 003262' 27300 PUSHJ P,DATO2 ;PRINT -MONTH- + 003233' 200640 000000 27310 MOVE DOUT,0 + 003234' 271640 000100 27320 ADDI DOUT,^D64 ;DOUT=YEAR + 003235' 334700 003731' 27330 OUTDC1: SKIPA DOUT+1,TWL ;RADIX 10 + 27340 ;******************************************************************* + 27350 ;ROUTINE TO CONVERT OCTAL TO ASCII + 27360 ;DOUT CONTAINS OCTAL VALUE ON ENTRY + + 003236' 201700 000010 27380 OUTOCT: MOVEI DOUT+1,10 ;RADIX 8 + 003237' 552700 000007 27390 PRNUMA: HRRZM DOUT+1,T4 + 003240' 201200 000060 27400 MOVEI CHR,"0" + 003241' 315640 000016 27410 CAMGE DOUT,DOUT+1 ;PRINT AT LEAST 2 DIGITS + 003242' 260242 000000 27420 PUSHJ P,(T2) ;PUT OR PUTCON + 003243' 231647 000000 27430 PRN: IDIVI DOUT,(T4) ;DIVIDE BY RADIX + 003244' 506705 000000 27440 HRLM DOUT+1,(P) ;SAVE NO. FOR PRINT + 003245' 322640 003247' 27450 JUMPE DOUT,.+2 ;ENUF DIGITS? + 003246' 260240 003243' 27460 PUSHJ P,PRN ;NO, GET MORE + 003247' 554205 000000 27470 HLRZ CHR,(P) ;YES, GET LEFTMOST + 003250' 271200 000060 27480 ADDI CHR,60 ;CONVERT TO ASCII + 003251' 254002 000000 27490 JRST (T2) ;PUT OR PUTCON + + 003252' 201200 000040 27510 OUTDE4: MOVEI CHR," " ;SET UP FOR SPACES + 003253' 301640 001750 27520 CAIL DOUT,^D1000 ;PRINT 4 CHAR. + 003254' 254000 003260' 27530 JRST OUTDEC ;AT LEAST 4 SEEN + 003255' 260240 000756' 27540 PUSHJ P,PUT ;OUTPUT ONE SPACE + 003256' 305640 000144 27550 CAIGE DOUT,^D100 ;3 CHAR.? + 003257' 260240 000756' 27560 PUSHJ P,PUT ;NO,SO ANOTHER SPACE + 003260' 201100 000756' 27570 OUTDEC: MOVEI T2,PUT ;PUT CHAR IN OUT BUF + 003261' 254000 003235' 27580 JRST OUTDC1 + + 003262' 201340 000005 27600 DATO2: MOVEI T4,5 + 003263' 200500 004153' 27610 MOVE T6,MNPT + 003264' 272040 000012 27620 ADDM 1,T6 + 003265' 134200 000012 27630 ILDB CHR,T6 + 003266' 260242 000000 27640 PUSHJ P,(T2) ;PUT OR PUTCON + 003267' 367340 003265' 27650 SOJG T4,.-2 + 003270' 263240 000000 27660 POPJ P, + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 63 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 27680 ;READ DTA DIRECTORY AND INITIALIZE DIRST AND DIRST1 + + 003271' 260240 000426' 27700 DTCHECK:PUSHJ P,ININIT ;INITIALIZE INPUT DEVICE + 003272' 27710 DTCH2: + 27720 IFN WCH,< + 27730 USETI IN,1 ;GET DTA DIR> + 27740 IFE WCH,< + 003272' 074140 000144 27750 USETI IN,144 ;GET DTA DIR> + 003273' 260240 001616' 27760 PUSHJ P,INP ;INPUT DIRECTORY + 003274' 070140 000000 27770 CLOSE IN, + 003275' 260240 003333' 27780 PUSHJ P,GETPPN ; GET PPN OF DECTAPE + 003276' 260240 000426' 27790 PUSHJ P,ININIT ; REINITIALIZE INPUT DEVICE + 27800 IFN WCH,< + 27810 DTCH1: MOVE T5,IBF + 27820 HRRZ T2,1(T5) + 27830 ADDI T5,1(T2) ;GET ADD. OF FIRST ENTRY + 27840 MOVE 0,T5 + 27850 SUBI 0,4> + 27860 IFE WCH,< + 003277' 550440 003742' 27870 DTCH1: HRRZ T5,IBF ;LOC. OF CURRENT BUF, 2ND WORD + 003300' 201011 000123 27880 MOVEI 0,123(T5) ;83 WORDS,7, FIVE-BIT BYTES + 003301' 271440 000001 27890 ADDI T5,1 ;COMPUTE ADD. OF DIR. START> + 003302' 202000 004012' 27900 MOVEM 0,DIRST ;FIRST FILE NAME LOC + 003303' 202000 004013' 27910 MOVEM 0,DIRST1 ;TO RESTORE DIRST + 003304' 263240 000000 27920 POPJ P, + + 27940 ;ROUTINE TO CHECK BRACKET COUNT/MATCHING + + 003305' 403140 004025' 27960 OUTCHK: SETZB T3,TLBRKT ;COUNT <> ON THIS LINE, CLEAR THINGS + 003306' 200040 003723' 27970 MOVE T1,OPTRA ;BYTE POINTER FOR READING OUT THE LINE + 003307' 316040 004020' 27980 OUTCH2: CAMN T1,OPTR ;LINE DONE? + 003310' 254000 003320' 27990 JRST OUTCH3 ;YES, SO DECIDE WHETHER TO PRINT + 003311' 134100 000001 28000 ILDB T2,T1 ;GET CHAR + 003312' 306100 000074 28010 CAIN T2,"<" ;LEFT BRACKET? + 003313' 350000 004025' 28020 AOS TLBRKT ;YES, SO INCREMENT BRACKET COUNT + 003314' 306100 000076 28030 CAIN T2,">" ;RIGHT BRACKET? + 003315' 371000 004025' 28040 SOSL TLBRKT ;YES, SUBTRACT BRACKET COUNT, GONE NEG? + 003316' 254000 003307' 28050 JRST OUTCH2 ;NO, SO DO NEXT CHAR + 003317' 344140 003307' 28060 AOJA T3,OUTCH2 ;YES, SO FLAG COUNT GONE NEG. + + 003320' 336100 004025' 28080 OUTCH3: SKIPN T2,TLBRKT ;BRACKET COUNT OFF THIS LINE? + 003321' 322140 001711' 28090 JUMPE T3,CPOPJ ;NO, WENT NEG.? + 003322' 272100 004026' 28100 ADDM T2,TOTBRK ;YES, SO ADD INTO CUMULATIVE COUNT + 003323' 201200 000055 28110 MOVEI CHR,"-" ;PRINT MINUS FOR NEG TOTAL + 003324' 335000 004026' 28120 SKIPGE TOTBRK + 003325' 260240 000756' 28130 PUSHJ P,PUT + 003326' 214640 004026' 28140 MOVM DOUT,TOTBRK;PRINT MAGNITUDE OF TOTAL + 003327' 260240 003260' 28150 PUSHJ P,OUTDEC + 003330' 201200 000011 28160 MOVEI CHR,TAB ;FOLLOW WITH TAB + 003331' 260240 000756' 28170 PUSHJ P,PUT + 003332' 254000 000711' 28180 JRST OUTCH1 ;AND PRINT THE LINE + + 003333' 201440 000117 28200 GETPPN: MOVEI T5,117 ; NON STD DUMP MODE + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 63-1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + +U 003334' 202440 000000* 28210 MOVEM T5,DTBLK + 003335' 200440 004637' 28220 MOVE T5,DEVICE ; GET INPUT DEVICE +U 003336' 202440 000000* 28230 MOVEM T5,DTDEV +U 003337' 050340 003334* 28240 OPEN DTDIR,DTBLK + 003340' 263240 000000 28250 POPJ P, + 003341' 074340 000144 28260 USETI DTDIR,144 ; READ BLOCK 100 AND + 003342' 200440 004713' 28270 MOVE T5,[IOWD 227,DBUF] + 003343' 201500 000000 28280 MOVEI T6,0 + 003344' 066340 000011 28290 INPUT DTDIR,T5 ; WORD 1 OF BLOCK 101. + 003345' 200440 004577' 28300 MOVE T5,177+DBUF + 003346' 202440 003736' 28310 MOVEM T5,DTAID + 003347' 200440 004600' 28320 MOVE T5,200+DBUF + 003350' 202440 003737' 28330 MOVEM T5,DIRPPN ; SAVE PPN FOR LISTING + 003351' 071340 000000 28340 RELEASE DTDIR, + 003352' 263240 000000 28350 POPJ P, + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 64 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 003353' 612300 004672' 28370 FILTYP: TDNE FLAG,[XWD IFLG+IBFLG,BMOD] + 003354' 263240 000000 28380 POPJ P, ;BIN MODE DON'T CARE IF DMP, ETC + 003355' 606540 060400 28390 TRNN AUXFLG,DSKIN!DTAIN!MTAIN ;BINARY INPUT POSSIBLE? + 003356' 254000 003365' 28400 JRST FIL11 ;NO + 003357' 606540 014200 28410 TRNN AUXFLG,DSKOUT!DTAOUT!MTAOUT ;BINARY OUTPUT? + 003360' 254000 003365' 28420 JRST FIL11 ;NO + 003361' 616300 004701' 28430 TDNN FLAG,[XWD PFLG,LINE!TBMOD!NSMOD!SQMOD!SPMOD] + 003362' 603540 000040 28440 TLNE AUXFLG,CDRFLG ;/E FROM DSK IS NOT BINARY + 003363' 254000 003365' 28450 JRST FIL11 ;SO TURN OFF SBIN + 003364' 254000 003414' 28460 JRST FIL3 ;FORCE BINARY MODE + 003365' 621540 000004 28470 FIL11: TLZ AUXFLG,SBIN ;IS + 003366' 554000 004053' 28480 HLRZ 0,ZRF+1 ; INPUT EXTENSION + 003367' 302000 445560 28490 CAIE 0,(SIXBIT /DMP/) ;DMP? + 003370' 306000 634166 28500 IFE DISK30,<CAIN 0,(SIXBIT /SAV/) ;SAV?> + 28510 IFN DISK30,<CAIN 0,(SIXBIT/SVE/)> + 003371' 254000 003414' 28520 JRST FIL3 ;YES + 003372' 302000 435056 28530 CAIE 0,(SIXBIT /CHN/) ;CHN? + 003373' 306000 624554 28540 CAIN 0,(SIXBIT /REL/) ;REL? + 003374' 254000 003414' 28550 JRST FIL3 ;YES + 003375' 302000 635062 28560 CAIE 0,(SIXBIT /SHR/) + 003376' 306000 504750 28570 CAIN 0,(SIXBIT /HGH/) + 003377' 254000 003414' 28580 JRST FIL3 + 003400' 302000 425156 28590 CAIE 0,'BIN' ; GENERAL BINARY EXTENSION? + 003401' 306000 545767 28600 CAIN 0,(SIXBIT /LOW/) + 003402' 254000 003414' 28610 JRST FIL3 + 003403' 606300 002000 28620 TRNN FLAG,XFLG ;DO NORMAL PROCESSING ON ALL + 003404' 254000 003430' 28630 JRST FIL2 ;BUT DMP ETC FILES IF NOT /X + 003405' 607540 000040 28640 TLNN AUXFLG,CDRFLG + 003406' 612300 004701' 28650 TDNE FLAG,[XWD PFLG,LINE+TBMOD+NSMOD+SQMOD+SPMOD] + 003407' 263240 000000 28660 POPJ P, ;NO SIGNIFICANT SWITCHES + 003410' 515000 004400 28670 FIL1: HRLZI 0,004400 ;FORCE 36-BIT. + 003411' 502000 003743' 28680 HLLM 0,IBF+1 ;INPUT BYTE POINTER + 003412' 502000 003746' 28690 HLLM 0,OBF+1 ;OUTPUT BYTE POINTER + 003413' 263240 000000 28700 POPJ P, ;CHANGE TO FORCED BINARY + 003414' 661540 000004 28710 FIL3: TLO AUXFLG,SBIN ;INPUT EXT = DMP,SAV,CHN,REL + 003415' 602300 002000 28720 TRNE FLAG,XFLG + 003416' 254000 003410' 28730 JRST FIL1 + 003417' 667540 000400 28740 TLON AUXFLG,FRSTIN ;NOT /X TEST FURTHER + 003420' 254000 003443' 28750 JRST FIL4 ;IS THIS FIRST SOURCE, YES + 003421' 663540 000200 28760 TLOE AUXFLG,RSDCFL ;NOT FIRST, WAS PREVIOS FILE RSCD? + 003422' 254000 003445' 28770 JRST FIL5 ;YES, NO CHANGE UNLESS DEVICE HAS CHANGED + 003423' 067100 000000 28780 OUTPUT OUT, ;NO CHANGE TO 36-BIT + 003424' 200000 003747' 28790 MOVE 0,OBF+2 ;CURRENTLY 7-BIT I/O, MUST CHANGE TO 36-BIT + 28800 ;OUTPUT CURRENT BUFFER + 003425' 231000 000005 28810 IDIVI 0,5 ;DIVIDE OBF+2 BY 5 (CHAR. COUNT) + 003426' 202000 003747' 28820 MOVEM 0,OBF+2 + 003427' 254000 003410' 28830 JRST FIL1 + 003430' 663540 000400 28840 FIL2: TLOE AUXFLG,FRSTIN ;NOT A RSCD FILE + 003431' 627540 000200 28850 TLZN AUXFLG,RSDCFL ;NO, WAS PREV. FILE RSCD? + 003432' 263240 000000 28860 POPJ P, ;NO, NO CHANGE + 003433' 067100 000000 28870 OUTPUT OUT, ;YES, CHANGE 36-BIT TO 7-BIT + 003434' 201000 000005 28880 MOVEI 0,5 + 003435' 222000 003747' 28890 IMULM 0,OBF+2 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 64-1 + VJC/PMH/AK-DAG/DMN 8-JUL-70 + + 003436' 200000 003740' 28900 MOVE 0,SVIBF ;RESTORE 7-BIT + 003437' 502000 003743' 28910 HLLM 0,IBF+1 + 003440' 200000 003741' 28920 MOVE 0,SVOBF + 003441' 502000 003746' 28930 HLLM 0,OBF+1 + 003442' 263240 000000 28940 POPJ P, + 003443' 661540 000200 28950 FIL4: TLO AUXFLG,RSDCFL ;SET REL,SAV,DMP,CHN FLAG + 003444' 254000 003410' 28960 JRST FIL1 + 003445' 515000 004400 28970 FIL5: HRLZI 0,004400 ;NEW DEVICE, SET 36-BIT INPUT + 003446' 602740 000010 28980 TRNE CALFLG,NEWDEV ;SOURCE DEVICE CHANGED + 003447' 502000 003743' 28990 HLLM 0,IBF+1 + 003450' 263240 000000 29000 POPJ P, ;OUTPUT ALREADY SET + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 65 + BLOCK 0 CODE + + 29040 SUBTTL BLOCK 0 CODE + + 29060 IFE BLOC0,< + 29070 IFE WCH,<;THIS CODE COPIES BLOCK 0,1,2 ONLY. I/O MUST BE DECTAPE.> + 29080 IFN WCH,<;THIS CODE COPIES BLOCK 0 ONLY. I/O MUST BE DECTAPE.> + 29090 ;MODE SELECTED MUST BE BIT 100, 20 AND NOT DUMP MODE (134). + + 003451' 640540 024000 29110 BLOCK0: TRC AUXFLG,DTAIN+DTAOUT + 003452' 642540 024000 29120 TRCE AUXFLG,DTAIN+DTAOUT;FORCE DTA I/O + 003453' 254000 002115' 29130 JRST ERR7A + 003454' 201000 000134 29140 MOVEI 0,134 + 003455' 202000 004633' 29150 MOVEM 0,OMOD + 003456' 202000 004636' 29160 MOVEM 0,ININI1 + 003457' 205000 003745' 29170 MOVSI 0,OBF + 003460' 202000 004635' 29180 MOVEM 0,ODEV+1 + 003461' 201000 003742' 29190 MOVEI 0,IBF + 003462' 202000 004640' 29200 MOVEM 0,DEVICE+1 + 003463' 050100 004633' 29210 OPEN OUT,OMOD + 003464' 254000 001767' 29220 JRST ERR1 ;UNAVAILABLE + 003465' 065100 000001 29230 OUTBUF OUT,1 + 003466' 067100 000000 29240 OUTPUT OUT, + 003467' 050140 004636' 29250 OPEN IN,ININI1 + 003470' 254000 001770' 29260 JRST ERR1A + 003471' 064140 000001 29270 INBUF IN,1 + 003472' 403040 003735' 29280 SETZB T1,BL0CNT + 003473' 074141 000000 29290 BL4: USETI IN,(T1) + 003474' 066140 000000 29300 INPUT IN, ;READ + 003475' 062140 000010 29310 GETSTS IN,IOS + 003476' 606400 740000 29320 TRNN IOS,740000 ;ANY ERRORS + 003477' 254000 003515' 29330 JRST BL1 ;NO + 003500' 265440 000542' 29340 JSP T5,INICN2 + 003501' 260240 001652' 29350 PUSHJ P,QUEST + 003502' 265040 002166' 29360 ERRPN2 </Input device /> + 003503' 447356 072750 + 003504' 203114 573322 + 003505' 617124 000000 + 003506' 260240 002201' 29370 PUSHJ P,P6BIT + 003507' 000000 004637' 29380 DEVICE + 003510' 265040 002166' 29390 ERRPN2 </: /> + 003511' 351000 000000 + 003512' 200100 000013 29400 MOVE T2,AUXFLG ;DECTAPE FOR ERROR MESSAGE + 003513' 405100 020000 29410 ANDI T2,DTAIN + 003514' 260240 001020' 29420 PUSHJ P,IOERR ;PRINT ERROR TYPE + 003515' 514440 003743' 29430 BL1: HRLZ T5,IBF+1 + 003516' 540440 003746' 29440 HRR T5,OBF+1 + 003517' 201351 000177 29450 MOVEI T4,177(T5) + 003520' 251447 000000 29460 BLT T5,(T4) ;SHIFT DATA TO OUTPUT BUFFER + 003521' 075120 003735' 29470 USETO OUT,@BL0CNT + 003522' 067100 000000 29480 OUTPUT OUT, ;WRITE BLOCK + 003523' 260240 000764' 29490 PUSHJ P, OUTP1 ;CHECK ERRORS + 29500 IFE WCH,< + 003524' 350040 003735' 29510 AOS T1,BL0CNT + 003525' 305040 000003 29520 CAIGE T1,3 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 65-1 + BLOCK 0 CODE + + 003526' 254000 003473' 29530 JRST BL4> + 003527' 071100 000000 29540 BL3: RELEASE OUT, ;IF ANY, PDL IS RESET + 003530' 254000 000013' 29550 JRST PIP2> + + 29570 IFN BLOC0,< + 29580 BLOCK0: ERRPNT </?No block 0 copy!/> + 29590 > + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 66 + MAGTAPE ROUTINES + + 29610 SUBTTL MAGTAPE ROUTINES + + 29630 ;TEST TO SEE IF MORE THAN ONE OF THE LOWEST EIGHT MTA FLAGS + 29640 ;HAVE BEEN SELECTED. IF SO ERROR. OTHERWISE, IMPLEMENT + 29650 ;REQUEST. T1, T3, T6 SET AT ENTRY BY INLOOK OR OUTLOOK + 29660 ;TO EQUAL AUX/AUXOUT, AB/ABOUT,INIMTA/INOMTA + + 003531' 550100 000001 29680 MT1: HRRZ T2,T1 ;T1 CONTAINS REQUEST + 003532' 405102 777777 29690 ANDI T2,-1(T2) ;KNOCK OFF RIGHT MOST 1 + 003533' 602100 000377 29700 TRNE T2,377 + 003534' 254000 003701' 29710 JRST MTR1 ;PRINT ERROR MESSAGE + + 003535' 606040 000377 29730 TRNN T1,MTAFLG+MTBFLG+MTWFLG+MTTFLG+MTFFLG+MTUFLG+MTDFLG+MTPFLG + 003536' 254000 003562' 29740 JRST MTC1 + 003537' 260252 000000 29750 PUSHJ P,(T6) ;THERE IS A REQUEST + 29760 ;GO TO INIMTA/INOMTA + + 29780 ;PERFORM POSITIONING REQUESTS + 003540' 602040 000040 29790 TRNE T1,MTUFLG + 003541' 254000 003600' 29800 JRST UNLOAD + + 003542' 602040 000010 29820 TRNE T1,MTWFLG + 003543' 254000 003602' 29830 JRST REWIND + + 003544' 602040 000020 29850 TRNE T1,MTFFLG + 003545' 254000 003605' 29860 JRST MARKEF + + 003546' 602040 000004 29880 TRNE T1,MTTFLG + 003547' 254000 003615' 29890 JRST SLEOT + + 003550' 602040 000202 29910 TRNE T1,MTBFLG+MTPFLG ;MULTIPLE REQUESTS ALLOWED + 003551' 254000 003617' 29920 JRST BSPF + + 003552' 602040 000101 29940 TRNE T1,MTAFLG+MTDFLG ;MULTIPLE REQUESTS ALLOWED + 003553' 254000 003653' 29950 JRST ADVF + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 67 + MAGTAPE ROUTINES + + 29980 ;T1=AUX,AUXOUT. T3=AB,ABOUT. T6=INIMTA,INOMTA. + + 003554' 071200 000000 30000 MTCONT: RELEAS TAPE, + 003555' 606040 000040 30010 TRNN T1,MTUFLG ;UNLOAD? + 003556' 602740 000400 30020 TRNE CALFLG,NSWTCH ;IS THERE AN INPUT DEVICE? + 003557' 302500 003666' 30030 CAIE T6,INOMTA ;OUTPUT TAPE? + 003560' 263240 000000 30040 POPJ P, ;NO + 003561' 254000 000013' 30050 JRST PIP2 ;YES, END OF COMMAND + + 30070 ;ROUTINE TO CHECK AND SET DENSITY FOR NEW DEVICE + + 003562' 200340 000001 30090 MTC1: MOVE T4,T1 ;GET AUX/AUXOUT + 003563' 405340 003400 30100 ANDI T4,MT2FLG+MT5FLG+MT8FLG + 003564' 405347 777777 30110 ANDI T4,-1(T4) ;REMOVE RIGHT MOST 1 + 003565' 326340 003701' 30120 JUMPN T4,MTR1 ;MORE THAN 1 REQ, ERROR + + 003566' 201340 000001 30140 MOVEI T4,1 ;ASCII LINE STANDARD MODE + + 003567' 602040 002000 30160 TRNE T1,MT2FLG + 003570' 660340 000200 30170 TRO T4,DENS2 ;SET 200 BPI + + 003571' 602040 001000 30190 TRNE T1,MT5FLG + 003572' 660340 000400 30200 TRO T4,DENS5 ;SET 556 BPI + + 003573' 602040 000400 30220 TRNE T1,MT8FLG + 003574' 660340 000600 30230 TRO T4,DENS8 ;SET 800 BPI + + 003575' 602040 004000 30250 TRNE T1,MTEFLG + 003576' 660340 001000 30260 TRO T4,PARE ;EVEN PARITY + + 003577' 263240 000000 30280 POPJ P, + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 68 + MAGTAPE ROUTINES + + 30310 ;REWIND AND UNLOAD + + 003600' 072200 000011 30330 UNLOAD: MTAPE TAPE,11 + 003601' 254000 003554' 30340 JRST MTCONT + + 30360 ;REWIND ONLY + + 003602' 072200 000001 30380 REWIND: MTAPE TAPE,1 + 003603' 072200 000000 30390 MTWAIT: WAIT TAPE, + 003604' 254000 003554' 30400 JRST MTCONT + + + + + 30450 ;MARK END OF FILE + + 003605' 200440 004645' 30470 MARKEF: MOVE T5,MTANAM + 003606' 250440 004634' 30480 EXCH T5,ODEV + 003607' 072200 000003 30490 MTAPE TAPE,3 + 003610' 062200 000010 30500 GETSTS TAPE,IOS + 003611' 260240 000772' 30510 PUSHJ P,OUTP3 + 003612' 060210 000000 30520 SETSTS TAPE,(IOS) + 003613' 202440 004634' 30530 MOVEM T5,ODEV + 003614' 254000 003554' 30540 JRST MTCONT + + + + + 30590 ;SKIP TO LOGICAL END OF TAPE. + + 003615' 072200 000010 30610 SLEOT: MTAPE TAPE,10 + 003616' 254000 003603' 30620 JRST MTWAIT + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 69 + MAGTAPE ROUTINES + + 30640 ;BACKSPACE MTA 1 FILE, T3=AB OR ABOUT + 30650 ;AB/ABOUT = INPUT/OUTPUT DEVICE + + 003617' 550140 000003 30670 BSPF: HRRZ T3,T3 ;T3=NO. OF FILES/RECORDS TO BACK + 003620' 072200 000000 30680 BSPF2: WAIT TAPE, ;WAIT + 003621' 062200 000010 30690 GETSTS TAPE,IOS + 003622' 606400 004000 30700 TRNN IOS,LDP ;AT LOAD POINT? + 003623' 254000 003637' 30710 JRST BSPF3 ;NO LDP + 003624' 265040 002155' 30720 ERRPNT </?Load point before end of (MB) or (MP) request!/> + 003625' 376315 760710 + 003626' 203415 764734 + 003627' 721014 262714 + 003630' 677454 520312 + 003631' 673104 067714 + 003632' 201211 541122 + 003633' 203376 220120 + 003634' 466405 120344 + 003635' 627436 562746 + 003636' 721020 000000 + 003637' 201440 000007 30730 BSPF3: MOVEI T5,7 ;BSPR + 003640' 606040 000200 30740 TRNN T1,MTPFLG ;BSPR? + 003641' 201440 000017 30750 MOVEI T5,17 ;BSPF + 003642' 072211 000000 30760 MTAPE TAPE,(T5) ;BACKSPACE FILE/RECORD + 003643' 365140 003620' 30770 SOJGE T3,BSPF2 ;MORE FILES/RECORDS TO BSP? + 30780 ;NO, END OF LOOP + 003644' 072200 000000 30790 WAIT TAPE, + 003645' 062200 000010 30800 GETSTS TAPE,IOS + 003646' 606040 000002 30810 TRNN T1,MTBFLG ;BACKSPACE FILE? + 003647' 254000 003554' 30820 JRST MTCONT ;NO + 003650' 606400 004000 30830 TRNN IOS,LDP ;IF AT LOAD POINT + 003651' 072200 000016 30840 MTAPE TAPE,16 ;(MOVE FWD. OVER EOF) + 003652' 254000 003554' 30850 JRST MTCONT ;DON'T SKIP A RECORD + + + + 30890 ;ADVANCE MTA 1 FILE, T3=AB OR ABOUT + 30900 ;AB/ABOUT = INPUT/OUTPUT DEVICE + + 003653' 554140 000003 30920 ADVF: HLRZ T3,T3 ;T3=NO. FILES (OR REC) TO ADVANCE + 003654' 201440 000006 30930 ADVF2: MOVEI T5,6 ;ADVR + 003655' 606040 000100 30940 TRNN T1,MTDFLG ;ADVR ? + 003656' 201440 000016 30950 MOVEI T5,16 ;ADVF + 003657' 072211 000000 30960 MTAPE TAPE,(T5) ;ADVANCE FILE/RECORD + 003660' 367140 003654' 30970 SOJG T3,ADVF2 ;MORE FILES/RECORDS TO ADV? + 30980 ;NO, END OF LOOP + 003661' 072200 000000 30990 WAIT TAPE, ;WAIT... + 003662' 062200 000010 31000 GETSTS TAPE,IOS + 003663' 622400 020000 31010 TRZE IOS,EOFBIT + 003664' 060210 000000 31020 SETSTS TAPE,(IOS) ;END OF FILE + 003665' 254000 003554' 31030 JRST MTCONT + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 70 + MAGTAPE ROUTINES + + 31050 ;ROUTINE TO INITIALIZE MAGTAPE FOR INPUT OR OUTPUT + + 003666' 334100 004634' 31070 INOMTA: SKIPA T2,ODEV ;INIT OUTPUT DEVICE + 003667' 200100 004637' 31080 INIMTA: MOVE T2,DEVICE ;INIT INPUT DEVICE + 003670' 402000 004646' 31090 SETZM MTANAM+1 + 003671' 202100 004645' 31100 MOVEM T2,MTANAM + 003672' 606740 000010 31110 TRNN CALFLG,NEWDEV + 003673' 254000 003676' 31120 JRST INMTA ;SAME DEVICE + 003674' 260240 003562' 31130 PUSHJ P,MTC1 ;NEW DEVICE + 003675' 552340 004644' 31140 HRRZM T4,INMTA1 ;SET MODE,DENSITY,PARITY + + 003676' 050200 004644' 31160 INMTA: OPEN TAPE,INMTA1 + 003677' 254000 001771' 31170 JRST ERR1B + 003700' 263240 000000 31180 POPJ P, + + 31200 ;ROUTINE TO PRINT ERROR MSG IF MORE THAN 1/8 FLAGS SET + + 003701' 200340 004637' 31220 MTR1: MOVE T4,DEVICE ;TENTATIVELY SET I/DEV + + 003702' 302500 003667' 31230 CAIE T6,INIMTA ;INPUT DEVICE? + 003703' 200340 004634' 31240 MOVE T4,ODEV ;NO, SET O/DEV + 003704' 265040 002155' 31250 ERRPNT </?Too many requests for /> + 003705' 376515 767500 + 003706' 667035 674500 + 003707' 713136 172712 + 003710' 717516 320314 + 003711' 677444 000000 + 003712' 260240 002201' 31260 PUSHJ P,P6BIT + 003713' 000000 000007 31270 T4 + 003714' 254000 000013' 31280 JRST PIP2 + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 71 + CONSTANTS/STORAGE/VARIABLES + + 31300 SUBTTL CONSTANTS/STORAGE/VARIABLES + + 31320 ;CONSTANTS + + 31340 IFE WCH,< + 003715' 140600 004046' 31350 OKBD: POINT 6,DTON+2,23 ;FOR NO. 1K BLOCKS + 003716' 140600 004054' 31360 OKB: POINT 6,ZRF+2,23> + 003717' 001400 004054' 31370 DATE: POINT 12,ZRF+2,35 + 003720' 001400 004046' 31380 DATED: POINT 12,DTON+2,35 ;CREATION DATE /X + 003721' 301406 030140 31390 ZRO: ASCII /00000/ + 003722' 010700 004376' 31400 OPTMAX: POINT 7,LBUFE-1,34 + 003723' 000700 004173' 31410 OPTRA: XWD 700,LBUF-1 ;INITIAL POINTER TO LINE BUFFER + 003724' 432150 643240 31420 K1: 432150643240 ;MAGIC ASCII INCREMENT BY 10 + 003725' 375767 737576 31430 K3: 375767737576 ;CHARACTER MASK 077 + 003726' 432150 643216 31440 K4: 432150643216 ;MAGIC ASCII INCREMENT BY 1 + 003727' 616051 600000 31450 QPIP: SIXBIT /QPIP/ ;DATA FOR Q SWITCH + 003730' 120000 000000 31460 STAR: SIXBIT /*/ ;LOOK FOR *.* FILNAM.EXT + 003731' 000000 000012 31470 TWL: OCT 12 + 003732' 000001 000001 31480 PP11: XWD 1,1 + 003733' 000001 000003 31490 PP13: XWD 1,3 ; SANDERS SYS + 003734' 000000 000145 31500 UPROJ: EXP ^D101 ; SANDERS UNIVERSAL PROJECT + 31510 IFN FTDSK,< + 31520 PRPTL: POINT 9,PROTS,8 ;PROTECTION FOR RENAME + 31530 PRPTD: POINT 9,DTON+2,8 + 31540 PRNM: POINT 9,ZRF+2,8 ;PROT FOR /R + 31550 TIME: POINT 11,ZRF+2,23 ;CREATE TIME /X + 31560 TIMED: POINT 11,DTON+2,23 ;DEPOSIT CREATE TIME> + + + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 72 + CONSTANTS/STORAGE/VARIABLES + + 31610 ;PROGRAM STORAGE AREA + + 31630 IFE BLOC0,< + 003735' 31640 BL0CNT: BLOCK 1 ;COUNT> + 003736' 31650 DTAID: BLOCK 1 ; STORE DTA SERIAL NUMBER + 003737' 31660 DIRPPN: BLOCK 1 ; STORE OWNERSHIP + 003740' 31670 SVIBF: BLOCK 1 ;SAVE INIT MODE (INPUT) + 003741' 31680 SVOBF: BLOCK 1 ;SAVE INIT MODE (OUTPUT) + 003742' 31690 IBF: BLOCK 3 ;INPUT BUFFER HEADER + 003745' 31700 OBF: BLOCK 3 ;OUTPUT BUFFER HEADER + 003750' 31710 OBI: BLOCK 3 ;OUTPUT BUFFER INPUT HEADER FOR DSK /Z + 003753' 31720 TFI: BLOCK 3 ;CONSOLE INPUT HEADER + 003756' 31730 TFO: BLOCK 3 ;CONSOLE OUTPUT HEADER + 003761' 31740 SAVAC: BLOCK 5 ;SAVE SOME ACS + 003766' 31750 NAMTAB: BLOCK 24 ;FOR (XD) ON DSK OR RENAME + 31760 IFN FTDSK,< + 31770 LOCNAM: BLOCK 1 ;POINTER FOR NAMTAB> + 004012' 31780 DIRST: BLOCK 1 ;LOC. OF LAST DIR. FILE NAME REFERENCED + 004013' 31790 DIRST1: BLOCK 1 ;SAVE INITIAL DIRST + 004014' 31800 SQNUM: BLOCK 1 ;CURRENT SEQUENCE NUMBER + 004015' 31810 DTJBFF: BLOCK 1 ;VALUE OF JOBFF AFTER CONSOLE I/O BUFFERS + 004016' 31820 SVJBFF: BLOCK 1 ;INITIAL VALUE OF JOBFF + 004017' 31830 SVJBF1: BLOCK 1 ;VALUE OF JOBFF AFTER OUTBUF UUO + 004020' 31840 OPTR: BLOCK 1 ;CURRENT POINTER FOR LINE PRESCAN + 004021' 31850 DTONSV: BLOCK 2 ;OUTPUT DIRECTORY ENTRY COPY + 004023' 31860 SVPTR1: BLOCK 1 ;POINTER TO LAST PRINTING CHARACTER + 004024' 31870 SVPTR2: BLOCK 1 ;POINTER TO LAST GENERATED TAB + 004025' 31880 TLBRKT: BLOCK 1 ;TOTAL PARENS ON THIS LINE + 004026' 31890 TOTBRK: BLOCK 1 ;TOTAL CUMULATIVE PARENS + 004027' 31900 TABCT: BLOCK 1 ;SPACES TO NEXT TAB STOP + 004030' 31910 SPCT: BLOCK 1 ;CONSECUTIVE SPACES COUNTER + 004031' 31920 ABOUT: BLOCK 1 ;AB FOR OUTPUT UNIT + 004032' 31930 AUXOUT: BLOCK 1 ;AUX FOR OUTPUT UNIT + 004033' 31940 PROTS: BLOCK 1 ;SAVE PROTECTION + 004034' 31950 ZCNT: BLOCK 1 ;COUNT FOR DSK ZRO REQ. + 004035' 31960 CDRCNT: BLOCK 1 ;COUNT CARD COLS. + 004036' 31970 PTRPT: BLOCK 1 ;STORE SEQ. NO. POINTER + 004037' 31980 SYSPP: BLOCK 1 ;PP OF DEVICE SYS + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 73 + CONSTANTS/STORAGE/VARIABLES + + 32010 ;THIS IS A BLOCK OF VARIABLE LOCATIONS, ZEROED AT THE START OF EACH + 32020 ;PIP RUN, I.E EACH TIME PIP TYPES *. + + 32040 ;***** DO NOT SPLIT THIS BLOCK ***** + 32050 IFN FTDSK,< + 32060 RIBFIR: BLOCK 1 ;NUMBER OF WORDS IN LOOKUP + 32070 PPP: BLOCK 1 ;PROJ-PROG FOR EXTENDED LOOKUP> + 004040' 32080 FILNAM: BLOCK 1 ;FILE NAME FROM COMMAND SCANNER + 004041' 32090 FILEX: BLOCK 1 ;EXTENSION + 004042' 32100 PR: BLOCK 1 ;PROTECTION + 004043' 32110 PP: BLOCK 1 ;P-P NUMBER TYPED BY USER + 32120 IFN FTDSK,<BLOCK 20+RIBFIR-.> ;TOTAL LENGTH OF LOOKUP BLOCK + 32130 ;***** END OF BLOCK ***** + 004044' 32140 DTON: BLOCK 4 ;OUTPUT DIR. ENTRY + 004050' 32150 DEVA: BLOCK 1 ;SAVE INPUT DEV. NAME + 004051' 32160 NO.: BLOCK 1 ;GENERATE FILE NAMES + 004052' 32170 ZRF: BLOCK 4 ;LOOKUP FILE NAMES + 004056' 32180 MTAREQ: BLOCK 1 ;STORE MTA REQUESTS + + 004057' 32200 COMEOF: BLOCK 1 ;EOF INDICATOR + 004060' 32210 COMBUF: BLOCK ^D41 ;COMMAND BUFFER. ALLOWS 205 CHARS. + 004131' 32220 COMCNT: BLOCK 1 ;COMBUF CHARS COUNT + 004132' 32230 COMPTS: BLOCK 1 ;POINTER FOR STORING/EXTRACTING CS + + + 004133' 32260 AUX: BLOCK 1 ;COPT AUXFLG (MTA) + 32270 IFN FTDSK,< + 32280 FNPPN: BLOCK 1 ;RESERVE #P-P + 32290 FNPPNS: BLOCK 1 ;COPY FNPPN FOR LATEST NON-SYS #P-P> + 004134' 32300 ESWTCH: BLOCK 1 ;-1 INDICATES END OF LINE + 004135' 32310 XNAME: BLOCK 1 ;-1 INDICATES SCAN OVERSHOOT WITH A NULL NAME + 32320 ;0 INDICATES NO SCAN OVERSHOOT + 32330 ;CONTAINS OVERSHOOT NAME IF NOT NULL + 004136' 32340 AB: BLOCK 1 ;MTA VALUE SWITCHES + 32350 ;THIS IS THE END OF THE INIT. ZEROED BLOCK. + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 74 + CONSTANTS/STORAGE/VARIABLES + + 004137' 266254 167132 32370 MONTH: ASCII /-Jan-/ + 004140' 266154 561132 32380 ASCII /-Feb-/ + 004141' 266334 171132 32390 ASCII /-Mar-/ + 004142' 266036 071132 32400 ASCII /-Apr-/ + 004143' 266334 174532 32410 ASCII /-May-/ + 004144' 266256 567132 32420 ASCII /-Jun-/ + 004145' 266256 566132 32430 ASCII /-Jul-/ + 004146' 266036 563532 32440 ASCII /-Aug-/ + 004147' 266474 570132 32450 ASCII /-Sep-/ + 004150' 266374 372132 32460 ASCII /-Oct-/ + 004151' 266355 773132 32470 ASCII /-Nov-/ + 004152' 266114 561532 32480 ASCII /-Dec-/ + + 004153' 440700 004137' 32500 MNPT: POINT 7,MONTH + + 004154' 32520 PDL: BLOCK 20 ;PUSHDOWN LIST + + 004174' 32540 LBUF: BLOCK 204 ;LINE BUFFER. ALLOW FOR FORTRAN DATA + 004377' 32550 LBUFE==.-1 + + 004400' 32570 DBUF: BLOCK 204 ;DIRECTORY BUFFER + 004604' 32580 BLOCK 27 ; ALLOW ENOUGH FOR DTA PROT. + + 004633' 32600 OMOD: BLOCK 1 ;OUTPUT DEVICE MODE, STATUS + 004634' 32610 ODEV: BLOCK 2 ;OUTPUT DEVICE NAME + 32620 ;BUFFER HEADER(S) LOC + + 004636' 32640 ININI1: BLOCK 1 ;INPUT DEVICE + 004637' 32650 DEVICE: BLOCK 2 + + + 004641' 32680 DEVERR: BLOCK 1 + 004642' 32690 DERR2: BLOCK 2 + + 004644' 32710 INMTA1: BLOCK 1 + 004645' 32720 MTANAM: BLOCK 2 + 004647' 32730 MATCH: BLOCK 2 ;NAME AND EXT FOR /L OR (RX) + 004651' 32740 RENSN: BLOCK 1 ;-1 IF RENAME MESSAGE SEEN + + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 75 + RIM LOADER + + 32770 SUBTTL RIM LOADER + 32780 IFE RIMSW,< + 004652' 265040 002155' 32790 RIMTB: ERRPNT <Z? /Y switch option not available this assembly!Z> + 004653' 375005 754500 + 004654' 717575 172306 + 004655' 641015 770350 + 004656' 647375 620334 + 004657' 677504 060754 + 004660' 607235 460704 + 004661' 663124 072320 + 004662' 647464 060746 + 004663' 717135 561330 + 004664' 745020 000000 + 32800 XLIST> + 35140 LIST + + 35160 IFE FTDSK,< + 004665' 35170 VAR + 004665' 35180 LOWTOP: + 000000' 35190 END PIP1> + 004665' 000000' 000001' + 004666' 004040' 004041' + 004667' 004040' 004044' + 004670' 004044' 004647' + 004671' 003745' 003742' + 004672' 000500 000002 + 004673' 004174' 004175' + 004674' 000001 003761' + 004675' 000000 000010 + 004676' 350700 001420' + 004677' 440700 004014' + 004700' 440600 004044' + 004701' 000004 001245 + 004702' 000504 001247 + 004703' 220600 004021' + 004704' 250502 000017 + 004705' 250511 000016 + 004706' 440700 000000* + 004707' 440600 003736' + 004710' 440600 003221' + 004711' 250500 004416' + 004712' 331101 004600' + 004713' 777551 004377' + +DTBLK UNASSIGNED, DEFINED AS IF EXTERNAL +DTDEV UNASSIGNED, DEFINED AS IF EXTERNAL +HEDL1 UNASSIGNED, DEFINED AS IF EXTERNAL +PROTO UNASSIGNED, DEFINED AS IF EXTERNAL +?5 ERRORS DETECTED + +PROGRAM BREAK IS 004714 + +9K CORE USED + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 81 + SYMBOL TABLE + +PSCAN1 001113 +AB 004136' +ABCHK 000466' +ABOUT 004031' +ADVF 003653' +ADVF2 003654' +ALLCLF 000037 SPD +ALT175 000175 SPD +ALT176 000176 SPD +ALTMOD 000033 SPD +ASTFLG 000040 SPD +AUX 004133' +AUXFLG 000013 +AUXOUT 004032' +BIGBLK 040000 SPD +BL0CNT 003735' +BL1 003515' +BL3 003527' +BL4 003473' +BLKIN 000006 SPD +BLOC0 000000 SPD +BLOCK0 003451' +BMOD 000002 SPD +BSPF 003617' +BSPF2 003620' +BSPF3 003637' +CAL5 002315' +CAL6 002317' +CALFLG 000017 +CDRBIT 100000 SPD +CDRCNT 004035' +CDRFLG 000040 SPD +CDRIN 000100 SPD +CHECK 002152' +CHECK1 002132' +CHECK2 002135' +CHKFLG 000040 SPD +CHR 000004 +CLRBUF 000553' +COLON 000072 SPD +COMASK 000044' +COMBUF 004060' +COMCNT 004131' +COMEOF 004057' +COMERR 001135' +COMMA 000054 SPD +COMPRO 000056' +COMPRP 000056' +COMPTR 000055' +COMPTS 004132' +COMSTO 000037' +CON 000001 SPD +COPY1 002241' + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 81-1 + SYMBOL TABLE + +COPY1A 002225' +COPY2A 002311' +COPY2B 002313' +COPY3 002323' +COPY3B 002321' +COPY4 002305' +COPY5 002300' +COPY6 002252' +COPY6A 002250' +COPY6B 002254' +COPY6C 002266' +CORE 047000 000011 +CPOPJ 001711' +CPOPJ1 001707' +CPOPJZ 001710' +CR 000015 SPD +CRLF 003205' +CZ 000032 SPD +DATE 003717' +DATE 047000 000014 +DATED 003720' +DATO2 003262' +DATOUT 003224' +DBUF 004400' +DEL 000177 SPD +DELE1 002443' +DELE2 002504' +DELE3 002466' +DELE5 002513' +DENS2 000200 SPD +DENS5 000400 SPD +DENS8 000600 SPD +DERR2 004642' +DERR2A 001166' +DERR2B 001165' +DESCR1 000464' +DESCRP 000451' +DEV 000100 SPD +DEVA 004050' +DEVCHR 047000 000004 +DEVER 000526' +DEVER1 000525' +DEVER2 000525' +DEVERR 004641' +DEVICE 004637' +DEVPPN 047000 000055 +DEVTST 000506' +DFLG 000010 SPD +DIR 000005 SPD +DIRPPN 003737' +DIRST 004012' +DIRST1 004013' +DISK30 000000 SPD + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 81-2 + SYMBOL TABLE + +DISPTA 001436' +DISPTB 001420' +DOUT 000015 +DOUT1 000016 +DSKBIT 200000 SPD +DSKCHR 047000 000045 +DSKIN 040000 SPD +DSKOUT 010000 SPD +DTABIT 000004 SPD +DTADI1 002702' +DTADIR 002701' +DTADR 002460' +DTAID 003736' +DTAIN 020000 SPD +DTALS1 003043' +DTALS2 003050' +DTALS3 003052' +DTALS4 003055' +DTALST 003023' +DTAOUT 004000 SPD +DTBLK 003337' UXT +DTCH1 003277' +DTCH2 003272' +DTCHEC 003271' +DTCLR 002212' +DTCOPY 002224' +DTD1 002456' +DTD5 002544' +DTD6 002543' +DTDELE 002432' +DTDEV 003336' UXT +DTDIR 000007 SPD +DTJBFF 004015' +DTON 004044' +DTONSV 004021' +DTPDIR 003017' +DTRNAM 002522' +DTRNM1 002536' +DVSWTH 000200 SPD +E10A 002053' +E10B 001752' +EOFBIT 020000 SPD +EOTBIT 002000 SPD +ERR1 001767' +ERR10 001751' +ERR1A 001770' +ERR1B 001771' +ERR2 002076' +ERR2A 002107' +ERR3 002003' +ERR3A 002005' +ERR3AA 002007' +ERR4 002024' + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 81-3 + SYMBOL TABLE + +ERR4A 002033' +ERR4B 002033' +ERR5 002066' +ERR5A 002060' +ERR6 002040' +ERR6A 002040' +ERR6B 002045' +ERR7A 002115' +ERR8 002122' +ERR9 001762' +ESQ 040000 SPD +ESWTCH 004134' +EXIT 047000 000012 +FF 000014 SPD +FFLG 000020 SPD +FIL1 003410' +FIL11 003365' +FIL2 003430' +FIL3 003414' +FIL4 003443' +FIL5 003445' +FILEX 004041' +FILNAM 004040' +FILTYP 003353' +FLAG 000006 +FN.EX 001146' +FNEX 000001 SPD +FNSET 002746' +FNSET1 002762' +FRSTIN 000400 SPD +FTDSK 000000 SPD +GET 001462' +GET1 001557' +GET1A 001566' +GET2 001532' +GET4 001553' +GET5 001521' +GET7 001666' +GET7B 001712' +GET7C 001673' +GETA2 001727' +GETA3 001717' +GETA5 001724' +GETA5A 001747' +GETA7 001735' +GETBUF 001404' +GETCOM 001175' +GETDEC 001236' +GETEN2 001415' +GETN1 001240' +GETN2 001306' +GETNUD 001305' +GETNUM 001237' + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 81-4 + SYMBOL TABLE + +GETOCT 001235' +GETPC1 001506' +GETPC2 001544' +GETPC3 001542' +GETPC4 001476' +GETPPN 003333' +GETPPN 047000 000024 +GETT10 001206' +GETT11 001217' +GETT2 001371' +GETT3 001252' +GETT3A 001276' +GETT3B 001274' +GETT4 001372' +GETT5 001320' +GETT5A 001321' +GETT6 001300' +GETT7 001327' +GETT8 001335' +GETT9 001223' +GETTA 001352' +GETTAB 047000 000041 +GETTIN 001365' +GETUPJ 001232' +GFLG 000200 SPD +HEDL1 004706' UXT +HPAGE 000020 SPD +IBF 003742' +IBFLG 000400 SPD +IFLG 000100 SPD +IN 000003 SPD +INBIT 000002 SPD +INERR 001620' +INFO 002711' +INFO1 002730' +INFO2 002735' +INFO3 002743' +INFOFL 000100 SPD +INHIB 000001 SPD +INICN1 000541' +INICN2 000542' +INICON 001410' +INIMTA 003667' +ININI1 004636' +ININIT 000426' +INLOOK 000204' +INLUK1 000217' +INMTA 003676' +INMTA1 004644' +INOMTA 003666' +INP 001616' +IOERR 001020' +IOERRG 001114' + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 81-5 + SYMBOL TABLE + +IOERRN 001107' +IOS 000010 +JFLG 001000 SPD +JOBFF 000547' EXT +JOBREL 000437' EXT +JOBSA 000007' EXT +JOBSTR 047000 000047 +K 000000 SPD +K1 003724' +K3 003725' +K4 003726' +LA 000137 SPD +LBUF 004174' +LBUFE 004377' SPD +LDP 004000 SPD +LF 000012 SPD +LFLG 000020 SPD +LINE 000001 SPD +LISTTY 002000 SPD +LOOK 002566' +LOOK01 002570' +LOOK1 002655' +LOOK2 002623' +LOOK3 002630' +LOOK4 002635' +LOOK5 002635' +LOOK6 002572' +LOOK6A 002614' +LOOK6C 002616' +LOOK6D 002620' +LOOK7A 002640' +LOOK7B 002604' +LOOK7C 002650' +LOOK8 002607' +LOOKA 002767' +LOOKB 003006' +LOOKC 003014' +LOOKF 003002' +LOW 000000' +LOWTOP 004665' +LPTBIT 040000 SPD +LPTOUT 000010 SPD +M1 000140' +M2 000132' +M3 000107' +M3A 000111' +M4 000154' +M5 000173' +MAIN1 000411' +MAIN2 000421' +MAINA1 000031' +MAINA2 000275' +MAINA3 000301' + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 81-6 + SYMBOL TABLE + +MAINA4 000307' +MAINA5 000323' +MAINB 000415' +MAINC 000073' +MARKEF 003605' +MATCH 004647' +MATEX 000002 SPD +MATFN 000004 SPD +MNPT 004153' +MONTH 004137' +MORCOR 000262' +MPC2 002350' +MSTIME 047000 000023 +MT1 003531' +MT2FLG 002000 SPD +MT5FLG 001000 SPD +MT8FLG 000400 SPD +MTABIT 000020 SPD +MTAFLG 000001 SPD +MTAIN 000400 SPD +MTANAM 004645' +MTAOUT 000200 SPD +MTAREQ 004056' +MTBFLG 000002 SPD +MTC1 003562' +MTCONT 003554' +MTDFLG 000100 SPD +MTEFLG 004000 SPD +MTFFLG 000020 SPD +MTFLG 200000 SPD +MTPFLG 000200 SPD +MTPTC1 002362' +MTPTCR 002337' +MTR1 003701' +MTTFLG 000004 SPD +MTUFLG 000040 SPD +MTWAIT 003603' +MTWFLG 000010 SPD +NAME 000557' +NAMTAB 003766' +NEWDEV 000010 SPD +NEWFIL 000020 SPD +NEWPP 000020 SPD +NM1 000566' +NM10 000654' +NM11 000661' +NM12 000664' +NM13 000666' +NM14 000670' +NM15 000672' +NM16 000700' +NM2 000567' +NM3 000571' + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 81-7 + SYMBOL TABLE + +NM4 000576' +NM4A 000602' +NM5 000606' +NM5A 000613' +NM5B 000673' +NM6 000633' +NM7 000640' +NM8 000643' +NM9 000646' +NO. 004051' +NOMORE 000020 SPD +NSMOD 000040 SPD +NSPROT 000002 SPD +NSWTCH 000400 SPD +OBF 003745' +OBI 003750' +ODEV 004634' +OFLG 000001 SPD +OKB 003716' +OKBD 003715' +OKBLK0 002422' +OKBLKS 002412' +OMOD 004633' +OMOD1 000251' +OMODE 000223' +OMODER 000267' +ONEOUT 000040 SPD +OPTMAX 003722' +OPTR 004020' +OPTRA 003723' +OSFLG 400000 SPD +OUT 000002 SPD +OUTBIT 000001 SPD +OUTCH1 000711' +OUTCH2 003307' +OUTCH3 003320' +OUTCHK 003305' +OUTDC1 003235' +OUTDE4 003252' +OUTDEC 003260' +OUTLB1 000712' +OUTLB2 000745' +OUTLB3 000754' +OUTLBA 000717' +OUTLBF 000707' +OUTLOO 000200' +OUTOCT 003236' +OUTP 000762' +OUTP1 000764' +OUTP3 000772' +OUTP4 000770' +P 000005 +P1 000010' + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 81-8 + SYMBOL TABLE + +P6BIT 002201' +P6BIT1 002203' +P6BIT2 002207' +PARE 001000 SPD +PCHTAB 001546' +PCONV 000010 SPD +PDIR1 003101' +PDIR1B 003070' +PDIR2 003211' +PDIR21 003220' +PDIR2A 003213' +PDIR3 003141' +PDIR3A 003177' +PDIR3B 003174' +PDIR4 003107' +PDIR4A 003130' +PDIR4B 003131' +PDIR6 003200' +PDIR7 003221' +PDIR8 003075' +PDL 004154' +PERIOD 000056 SPD +PFLG 000004 SPD +PICUP 002662' +PICUP2 002662' +PICUP4 002665' +PIP 000012' +PIP1 000000' +PIP1 000000 +PIP2 000013' +PIP2A 000013' +PIP2B 000023' +PJOB 047000 000030 +PP 004043' +PP11 003732' +PP13 003733' +PPTIN 200000 SPD +PPTOUT 400000 SPD +PR 004042' +PRECOP 002220' +PRETXT 002155' +PRN 003243' +PRNUMA 003237' +PROTK 000476' +PROTK1 000504' +PROTO 003173' UXT +PROTS 004033' +PSCAN 000343' +PSCAN1 000376' +PSCAN2 000352' +PSCAN3 000351' +PSCAN4 000374' +PSCAN5 000407' + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 81-9 + SYMBOL TABLE + +PSCAN6 000404' +PSCANA 000333' +PSCANB 000326' +PTEXT 002155' +PTEXT1 002167' +PTEXT2 002166' +PTPBIT 000400 SPD +PTRBIT 000200 SPD +PTRPT 004036' +PUT 000756' +PUTCON 002175' +QFLG 000001 SPD +QPIP 003727' +QUEST 001652' +QUEST2 001662' +RBSIZ 000005 SPD +READ1 002000 SPD +REDFLG 000001 SPD +RENAME 002553' +RENSN 004651' +RESET 047000 000000 +REWIND 003602' +RFLG 000100 SPD +RIBSTS 000017 SPD +RIMFLG 000002 SPD +RIMSW 000000 SPD +RIMTB 004652' +RSDCFL 000200 SPD +RUN 047000 000035 +RXFLG 020000 SPD +SAVAC 003761' +SBIN 000004 SPD +SLEOT 003615' +SNI 100000 SPD +SPACE 000040 SPD +SPCT 004030' +SPMOD 001000 SPD +SPOK 020000 SPD +SQMOD 000200 SPD +SQNUM 004014' +SR2 002371' +SSWTCH 001000 SPD +STAR 003730' +STS 000400 SPD +SUS 010000 SPD +SVER 000005 SPD +SVIBF 003740' +SVJBF1 004017' +SVJBFF 004016' +SVOBF 003741' +SVPTR1 004023' +SVPTR2 004024' +SYSFLG 000002 SPD + PIP V.030 MOD SANDERS/DBP 19-AUG-71 PAGE 81-10 + SYMBOL TABLE + +SYSLST 000004 SPD +SYSPP 004037' +T1 000001 +T2 000002 +T3 000003 +T4 000007 +T5 000011 +T6 000012 +T7 000014 +TAB 000011 SPD +TABCT 004027' +TABOUT 000755' +TABSP 000010 SPD +TAPE 000004 SPD +TBMOD 000004 SPD +TFI 003753' +TFO 003756' +TLBRKT 004025' +TMPCOR 047000 000044 +TMPI 004000 SPD +TMPO 010000 SPD +TOTBRK 004026' +TTYBIT 000010 SPD +TTYIN 001000 SPD +TTYOUT 100000 SPD +TTYZ 002376' +TWL 003731' +TXTA 001062' +TXTB 001066' +TXTC 001074' +TXTC1 001100' +TXTD 001042' +TXTD1 001047' +TXTD2 001055' +UNLOAD 003600' +UPROJ 003734' +UTPCLR 047000 000013 +VPIP 000030 SPD +WAIT 072000 000000 +WCH 000000 SPD +WRTLOK 400000 SPD +XFLG 002000 SPD +XNAME 004135' +XOFF 000023 SPD +XON 000021 SPD +XSS 002230' +ZCNT 004034' +ZFLG 004000 SPD +ZRF 004052' +ZRO 003721' + EEEEEEEEEEEEEEE DDDDDDDDDDDD IIIIIIIII TTTTTTTTTTTTTTT OOOOOOOOO RRRRRRRRRRRR +EEEEEEEEEEEEEEE DDDDDDDDDDDD IIIIIIIII TTTTTTTTTTTTTTT OOOOOOOOO RRRRRRRRRRRR +EEEEEEEEEEEEEEE DDDDDDDDDDDD IIIIIIIII TTTTTTTTTTTTTTT OOOOOOOOO RRRRRRRRRRRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEEEEEEEEEEE DDD DDD III TTT OOO OOO RRRRRRRRRRRR +EEEEEEEEEEEE DDD DDD III TTT OOO OOO RRRRRRRRRRRR +EEEEEEEEEEEE DDD DDD III TTT OOO OOO RRRRRRRRRRRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEE DDD DDD III TTT OOO OOO RRR RRR +EEEEEEEEEEEEEEE DDDDDDDDDDDD IIIIIIIII TTT OOOOOOOOO RRR RRR +EEEEEEEEEEEEEEE DDDDDDDDDDDD IIIIIIIII TTT OOOOOOOOO RRR RRR +EEEEEEEEEEEEEEE DDDDDDDDDDDD IIIIIIIII TTT OOOOOOOOO RRR RRR + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB0 :EDITOR.LST [8,200] Created: 20-April-1967 11:19:00 Printed: 24-April-1978 11:22:32 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1620 +File will be deleted after printing + EDITOR V.003 1 APRIL 1968 PAGE 3 + DECEDIT PARAMETERS + + 00030 TITLE EDITOR V.003 1 APRIL 1968 + 00040 SUBTTL DECEDIT PARAMETERS + + 00060 DEFINE ERR (A) < JSR A,ERRORX> + 00070 DEFINE TSTRIN (A) < EXP "A"+"A"+1> + + 000001 00090 S0=1 + 000002 00100 S1=2 + 000004 00110 S2=4 + 000010 00120 S3=10 + 000040 00130 S4=40 + 000020 00140 S5=20 + 000100 00150 S6=100 + 000200 00160 S7=200 + 000400 00170 S8=400 + 000003 00180 PDP=3 + 000004 00190 FL=4 + 000011 00200 INDEX=11 + 000012 00210 WC=12 + 000013 00220 C=13 + 000014 00230 COTP=14 + 000005 00240 IPT=5 + 000006 00250 TPT=6 + 000010 00260 P=10 + 000015 00270 SINDEX=15 + 000016 00280 CINDEX=16 + 000017 00290 LAST=17 + 000002 00300 TYP=2 + 000003 00310 DT=3 + 00320 OPDEF EXIT [POPJ PDP,] + 00330 OPDEF CAL [PUSHJ PDP,] + 00340 OPDEF SAVE [PUSH PDP,] + 00350 OPDEF UNSAVE [POP PDP,] + 00360 EXTERNAL JOBFF + EDITOR V.003 1 APRIL 1968 PAGE 4 + DECTAPE IO - AUGUST 25, 1965 + + 00380 SUBTTL DECTAPE IO - AUGUST 25, 1965 + + 001000 00400 FOPEN=1000 + 000001 00410 AC1=1 + 000002 00420 AC2=2 + 000005 00430 AC3=5 + 000006 00440 AC4=6 + + 000000' 607200 000001 00460 FILLB: TLNN FL,1; IS BUFFER LOADED + 000001' 254000 000041' 00470 JRST FILLB1; NO, SO LOAD IT + 000002' 200540 001060' 00480 MOVE C,WBC; GET BUFFER COUNT + 000003' 307540 000177 00490 CAIG C,177; IS IT GETTIN FULL + 000004' 263140 000000 00500 ATSALL: EXIT; NO + 000005' 620200 000400 00510 TRZ FL,S8; SET FIRST BLOCK FLAG TO FALSE + 000006' 660200 000010 00520 TRO FL,S3; AND MODIFIED FLAG TO TRUE + 000007' 201100 001064' 00530 MOVEI AC2,WB; GET WORKING BUFFER ADDRESS + 000010' 201240 000001 00540 MOVEI AC3,1; SEQUENCE NUMBER TEST + 000011' 271100 000125 00550 ADDI AC2,125; DUMP ABOUT 2/3 OF BUFFER + 000012' 616242 000000 00560 TDNN AC3,0(AC2); BUT NOT A FRACTIONAL LINE + 000013' 364100 000012' 00570 SOJA AC2,.-1; HUNT FOR BEGIN OF LINE + 000014' 550400 000135' 00580 HRRZ P,THSBLK; UPDATE PREVIOUS BLOCK NUMBER + 000015' 073140 000136' 00590 UGETF DT,IAMTEM; NEXT FREE BLOCK + 000016' 075150 000000 00600 USETO DT,0(P); PREPARE TO DUMP THIS BLOCK + 000017' 200400 000136' 00610 MOVE P,IAMTEM; AND PREPARE NEXT BLOCK + 000020' 200240 001050' 00620 MOVE AC3,DTOBUF; SET UP BLT + 000021' 516405 000001 00630 HRLZM P,1(AC3); LINK TO NEXT DECTAPE BLOCK + 000022' 505240 001064' 00640 HRLI AC3,WB; SOURCE + 000023' 271240 000002 00650 ADDI AC3,2; +2 + 000024' 200040 000002 00660 MOVE AC1,AC2; LAST + 000025' 275040 001064' 00670 SUBI AC1,WB; AND MAKE A COUNT OF IT + 000026' 274540 000001 00680 SUB C,AC1; TOTAL REMAINING WORDS + 000027' 202540 001060' 00690 MOVEM C,WBC; SET NEW COUNT + 000030' 271045 777777 00700 ADDI AC1,-1(AC3); SETUP FOR BLT + 000031' 260140 000122' 00710 CAL DUMX; TRANSFER AND DUMP BLOCK + 000032' 201240 001064' 00720 MOVEI AC3,WB; GET DEST FOR MOVE UP + 000033' 504240 000002 00730 HRL AC3,AC2; AND SOURCE + 000034' 200040 000005 00740 MOVE AC1,AC3; GENERATE LAST ADDRESS + 000035' 271053 000000 00750 ADDI AC1,(C); FROM COUNT + 000036' 251241 000000 00760 BLT AC3,(AC1); ON TOAST + 000037' 250400 000135' 00770 EXCH P,THSBLK; SET NEW BLOCK + 000040' 254000 000000' 00780 JRST FILLB; GO AGAIN + + 000041' 607200 001000 00800 FILLB1: TLNN FL,FOPEN; IS A FILE OPEN + 00810 ERR 7; NO, SO *NFO* + 000042' 264340 000162' JSR 7,ERRORX + 000043' 661200 000001 00820 TLO FL,1; SET TO FILLED BUFFER + 000044' 254000 000075' 00830 JRST GETF; AND GET THE FIRST BLOCK + EDITOR V.003 1 APRIL 1968 PAGE 5 + DECTAPE IO - AUGUST 25, 1965 + + 000045' 602200 000001 00850 GET: TRNE FL,S0; FORWARD OR REVERSE + 000046' 254000 000073' 00860 JRST GETL; REVERSE + + 000047' 602200 000020 00880 GETN: TRNE FL,S5; IS THERE ANY MORE + 000050' 263140 000000 00890 EXIT; NO + 000051' 554000 001063' 00900 HLRZ WBF; GET LINK + 000052' 260140 000106' 00910 CAL DUMPB; OUTPUT BLOCK + 000053' 200400 000135' 00920 MOVE P,THSBLK; SAVE PREVIOUS FLOCK NUMBER + 000054' 620200 000400 00930 TRZ FL,S8; SET FIRST BLOCK FLAG TO FALSE + 000055' 552000 000135' 00940 GET0: HRRZM THSBLK; SAVE CURRENT BLOCK NUMBER + 000056' 075160 000135' 00950 USETO DT,@THSBLK; SER OUTPUT FOR PRESENT BLOCK + + 000057' 066140 000000 00970 SLURP: INPUT DT,0; INPUT A NEW BLOCK + 000060' 554000 001063' 00980 HLRZ WBF; GET LINK + 000061' 336000 000000 00990 SKIPN; WE DONT LIKE ZERO LINKS + 000062' 660200 000020 01000 TRO FL,S5; SO WE SET A FLAG TO REMIND US + 000063' 550000 001063' 01010 HRRZ WBF; GET COUNT + 000064' 202000 001060' 01020 MOVEM WBC; AND SAVE IT + 000065' 606200 000020 01030 TRNN FL,S5; WAS IT END OF FILE + 000066' 332000 000000 01040 SKIPE; EMPTY BLOCK + 000067' 263140 000000 01050 EXIT; END OF FILE OR NON-EMPTY BLOCK + 000070' 554000 001063' 01060 HLRZ WBF; EMPTY BLOCK - GET LINK + 000071' 606200 000001 01070 TRNN FL,S0; DIRECTION CHECK + 000072' 254000 000055' 01080 JRST GET0; FORWARD + + 000073' 260140 000106' 01100 GETL: CAL DUMPB; REVERSE - GET LAST BLOCK-SAVE THIS ONE + 000074' 326400 000100' 01110 JUMPN P,GETL1; IS LAST BLOCK AVAILABLE + 000075' 550400 001013' 01120 GETF: HRRZ P,FBNUM; NO, SO GET FIRST ONE + 000076' 620200 000021 01130 TRZ FL,S0+S5; SET FORWARD AND END + 000077' 664200 000400 01140 TROA FL,S8; SET FIRST BLOCK AND SKIP + 000100' 620200 000420 01150 GETL1: TRZ FL,S5+S8; SET NON-END AND NON-FIRST + 000101' 074150 000000 01160 USETI DT,(P); ESTABLISH INPUT BLOCK NUMBER + 000102' 075150 000000 01170 USETO DT,(P); AND OUTPUT BLOCK NUMBER + 000103' 202400 000135' 01180 MOVEM P,THSBLK; UPDATE CURRENT BLOCK NUMBER + 000104' 402000 000010 01190 SETZM P; AND ZERO PREVIOUS BLOCK NUMBER + 000105' 254000 000057' 01200 JRST SLURP; AND INPUT THE BLOCK + EDITOR V.003 1 APRIL 1968 PAGE 6 + DECTAPE IO - AUGUST 25, 1965 + + 000106' 260140 000000' 01220 DUMPB: CAL FILLB; SPLIT BLOCKS IF THE OVER-RUN + 000107' 626200 000010 01230 TRZN FL,S3; ANY MODS MADE + 000110' 263140 000000 01240 EXIT; NO + 000111' 200100 001050' 01250 MOVE AC2,DTOBUF; POINTER TO BUFFERS + 000112' 201242 000002 01260 MOVEI AC3,2(AC2); FIRST WORD ADDRESS + 000113' 505240 001064' 01270 HRLI AC3,WB; FIRST DATA WORD + 000114' 554040 001063' 01280 HLRZ AC1,WBF; BLOCK NUMBER + 000115' 336000 000001 01290 SKIPN AC1; LAST BLOCK + 000116' 370000 000001 01300 SOS AC1; YES, SO EXTEND + 000117' 506042 000001 01310 HRLM AC1,1(AC2); INTO LINK + 000120' 201042 000001 01320 MOVEI AC1,1(AC2); PREPARE BLT + 000121' 270040 001060' 01330 ADD AC1,WBC; SIZE OF BLT + 000122' 251241 000000 01340 DUMX: BLT AC3,(AC1); BLOCK UP SUBROUTINE + 000123' 542040 001051' 01350 HRRM AC1,DTOBF1; LAST ADDRESS + 000124' 067140 000000 01360 OUTPUT DT,0; DUMP IT + 000125' 061140 740000 01370 STATO DT,740000; CHECK FOR DEVICE ERROR + 000126' 263140 000000 01380 EXIT; ALL IS GOOD + 000127' 476000 000004 01390 SETOM FL ; DDE ERROR + 01400 ERR 12; *DDE* + 000130' 264500 000162' JSR 12,ERRORX + + 000131' 603200 001000 01420 FINISH: TLNE FL,FOPEN; IF A FILE IS OPEN + 000132' 260140 000106' 01430 CAL DUMPB; DUMP IT + 000133' 071140 000000 01440 FINIS2: RELEAS DT,0; RELEASE THE TAPE + 000134' 254000 001030' 01450 JRST INITIX; AND GO BACK TO SETUP + + 000135' 000000 000000 01470 THSBLK: 0; PRESENT BLOCK NUMBER + 000136' 000000 000000 01480 IAMTEM: 0; TEMPORARY + EDITOR V.003 1 APRIL 1968 PAGE 9 + CONTROL - AUGUST 25, 1965 + + 01520 SUBTTL CONTROL - AUGUST 25, 1965 + 01530 ;MAIN LISTEN AND DISPATCH FOR EDITOR CONTROL MODE + 000137' 260140 000612' 01540 OUTTER: CAL GETCHR; GET ONE CHARACTER + 000140' 306540 000015 01550 CAIN C,15; INITIAL CARRIAGE RETURNS + 000141' 254000 000137' 01560 JRST OUTTER; ARE IGNORED + 000142' 306540 000111 01570 CAIN C,"I" + 000143' 254000 000205' 01580 JRST INSE + 000144' 306540 000104 01590 CAIN C,"D" + 000145' 254000 000425' 01600 JRST DELETE + 000146' 306540 000120 01610 CAIN C,"P" + 000147' 254000 000471' 01620 JRST PRINT + 000150' 306540 000105 01630 CAIN C,"E" + 000151' 254000 000131' 01640 JRST FINISH + 000152' 302540 000033 01650 CAIE C,33; ALTERNATE ALTMOD + 000153' 306540 000175 01660 CAIN C,175; THE REGULAR ALTMOD + 000154' 254000 000522' 01670 JRST PNEXT + 000155' 306540 000123 01680 CAIN C,"S" + 000156' 254000 000657' 01690 JRST DECINI + 01700 ERR 1; ILLEGAL COMMAND + 000157' 264040 000162' JSR 1,ERRORX + 01710 ;OUTPUT A CARRIAGE RETURN + 000160' 201440 000171' 01720 CRT: MOVEI INDEX,CRM; PICK UP THE POINTER + 000161' 254000 000601' 01730 JRST OTLINE; OUTPUT CRT-LF-* + + 01750 ;ERROR PRINT + 000162' 000000 000000 01760 ERRORX: 0; CALLED BY JSR X,ERRORX + 000163' 550440 000162' 01770 HRRZ INDEX,ERRORX; WHERE X IS THE ERROR NUMBER + 000164' 135440 000204' 01780 LDB INDEX,EPT; EXTRACT THE X + 000165' 201451 000171' 01790 MOVEI INDEX,ERT-1(INDEX) + 000166' 201140 001304' 01800 ERROX1: MOVEI PDP,PDSTAK; INITIALIZE PUSHDOWN + 000167' 260140 000601' 01810 ERROX2: CAL OTLINE; OUTPUT ERROR MESSAGE + EDITOR V.003 1 APRIL 1968 PAGE 10 + CONTROL - AUGUST 25, 1965 + + 000170' 254000 001035' 01830 JRST COMLEV; AND A CARRIAGE RETURN - EXIT + 01840 ;ERROR MESSAGES ET.AL. THESE MUST NOT BE MOVED ABOUT + 01850 ;SINCE THE PRINT ROUTINE DEPENDS ON THE BIT 35 OF THE + 01860 ;NEXT MESSAGE TO TERMINATE THE PRESENT ONE + + 000171' 064245 200000 01880 CRM: OCT 64245200000; THE CARRIAGE RETURN-LINE FEED-* + 000172' 01890 ERT: TSTRIN <*ILC*>; ILLEGAL COMMAND + 000172' 252231 441525 EXP "*ILC*"+"*ILC*"+1 + 01900 TSTRIN <*NLN*>; NON-EXISTENT LINE + 000173' 252351 447125 EXP "*NLN*"+"*NLN*"+1 + 01910 TSTRIN <*ILS*>; ILLEGAL SEQUENCE + 000174' 252231 451525 EXP "*ILS*"+"*ILS*"+1 + 01920 TSTRIN <*ILR*>; ILLEGAL REFERENCE + 000175' 252231 451125 EXP "*ILR*"+"*ILR*"+1 + 01930 TSTRIN <*UNA*>; UNIT NOT AVAILABLE + 000176' 252531 640525 EXP "*UNA*"+"*UNA*"+1 + 01940 TSTRIN <*DCE*>; DIRECTORY CAPACITY EXCEEDED + 000177' 252110 342525 EXP "*DCE*"+"*DCE*"+1 + 01950 TSTRIN <*NFO*>; NO FILE OPEN + 000200' 252350 647525 EXP "*NFO*"+"*NFO*"+1 + 01960 TSTRIN <*FAU*>; FILE NAME ALREADY IN USE + 000201' 252150 152525 EXP "*FAU*"+"*FAU*"+1 + 01970 TSTRIN <*NCF*>; NOT A CURRENT FILE + 000202' 252350 343125 EXP "*NCF*"+"*NCF*"+1 + 01980 TSTRIN <*DDE*>; DEVICE DATA ERROR + 000203' 252110 442525 EXP "*DDE*"+"*DDE*"+1 + 000204' 270411 777777 01990 EPT: POINT 4,-1(INDEX),12; THE ERROR PRINT DEPENDS + 02000 ;ON THE 1 IN BIT 35 HERE + 02010 ;COMMUNICATIONS + EDITOR V.003 1 APRIL 1968 PAGE 12 + EDITOR - AUGUST 25, 1965 + + 02040 SUBTTL EDITOR - AUGUST 25, 1965 + + 02060 ;INSERT LINE(S) + 000205' 260140 000616' 02070 INSE: CAL GETSEQ; GET THE SEQUENCE NUMBER AND STEP + 000206' 202000 000016 02080 MOVEM CINDEX; THIS INSTR SKIPED IF ONLY ONE ARG + 000207' 254000 000216' 02090 JRST INSE3; PROCESS IT + 000210' 260140 000333' 02100 INSE2: CAL FIND; TOP OF THE LOOP - SEARCH FOR THE LINE + 000211' 316651 000000 02110 CAMN SINDEX,(INDEX); EXACT MATCH? + 02120 ERR 4; YES, *ILR* + 000212' 264200 000162' JSR 4,ERRORX + 000213' 260140 000252' 02130 CAL BACK1; BACKUP TO LAST LINE + 000214' 312000 000017 02140 CAME LAST; IS IT INDEED THE LAST ONE WE PUT IN + 02150 ERR 3; NO, *ILS* + 000215' 264140 000162' JSR 3,ERRORX + 000216' 260140 000333' 02160 INSE3: CAL FIND; GET THE LINE + 000217' 260140 000541' 02170 CAL OTSEQ; OUTPUT THE SEQUENCE NUMBER + 000220' 260140 000547' 02180 CAL GETLIN; GET THE INPUT LINE + 000221' 254000 000137' 02190 JRST OUTTER; ALT MODE + 000222' 260140 000227' 02200 CAL INSED; INSERT AND DELETE + 000223' 202640 000017 02210 MOVEM SINDEX,LAST; SAVE AWAY THIS LINE NUMBER + 000224' 202640 001056' 02220 MOVEM SINDEX,FIRST + 000225' 260140 000305' 02230 CAL ASCIA; STEP SEQUENCE + 000226' 254000 000210' 02240 JRST INSE2; LOOP BACK FOR NEXT LINE + + 000227' 550000 000014 02260 INSED: HRRZ COTP; GET THE SIZE OF THE LINE + 000230' 201040 000000 02270 MOVEI 1,0; SETUP DIRECTION FLAG + 000231' 311000 000012 02280 CAML WC; IF LINE SIZE IS GREATER-EQUAL THAN NEW + 000232' 201040 000001 02290 MOVEI 1,1; SET FLAG TO 1 + 000233' 312000 000012 02300 CAME WC; IF OLD LINE IS NON-NULL + 000234' 254000 000264' 02310 JRST INSEG; DELETE IT + 000235' 322500 000245' 02320 INSE1: JUMPE WC,INSE16; NULL SIZE TO INPUT + 000236' 554440 000014 02330 HLRZ INDEX,COTP; GET LINE ADDRESS + 000237' 270440 000012 02340 ADD INDEX,WC; AND SIZE + 000240' 547000 000014 02350 HLRS COTP; AND COUNT + 000241' 505600 001313' 02360 HRLI COTP,TTB; SET SOURCE + 000242' 200040 000014 02370 MOVE 1,COTP; READY FOR BLT + 000243' 251611 777777 02380 BLT COTP,-1(INDEX); MOVE IN THE NEW LINE + 000244' 200600 000001 02390 MOVE COTP,1; RESTORE COTP + 000245' 660200 000110 02400 INSE16: TRO FL,S3+S6; SET MOD FLAGS - GENERAL EXIT + 000246' 201040 001064' 02410 CLEARE: MOVEI 1,WB; CLEAR LAST BUFFER WORD + 000247' 270040 001060' 02420 ADD 1,WBC; END OF BUFFER + 000250' 402001 000000 02430 SETZM (1); SET TO ZERO + 000251' 263140 000000 02440 EXIT; GO AWAY + + 02460 ;BACK UP LINE POINTER + 000252' 302440 001064' 02470 BACK1: CAIE INDEX,WB; IS THIS THE FIRST LINE IN THE BUFFER + 000253' 254000 000262' 02480 JRST BACK; NO, SO NORMAL PROCESS + 000254' 660200 000001 02490 TRO FL,S0; WE MUST GET THE PREVIOUS BLOCK + 000255' 260140 000045' 02500 CAL GET; INPUT IT - THIS WILL ALWAYS WORK + 000256' 270440 001060' 02510 ADD INDEX,WBC; LAST LINE + 000257' 254000 000262' 02520 JRST BACK; NOW WE BACK IT UP + 000260' 200011 000000 02530 MOVE (INDEX); TOP OF LOOP - PICK UP DATA WORD + 000261' 606000 000001 02540 TRNN 1; BIT ONE MAKES IT A SEQUENCE N + EDITOR V.003 1 APRIL 1968 PAGE 12-1 + EDITOR - AUGUST 25, 1965 + + 000262' 364440 000260' 02550 BACK: SOJA INDEX,.-2; COUNT IT BACK + 000263' 263140 000000 02560 EXIT + EDITOR V.003 1 APRIL 1968 PAGE 13 + EDITOR - AUGUST 25, 1965 + + 000264' 260140 000414' 02580 INSEG: CAL CSIZE; COMPUTE SIZE OF XFER + 000265' 322000 000276' 02590 JUMPE INSEX; ZERO SIZE XFER + 000266' 326040 000272' 02600 JUMPN 1,INSER; FORWARD BLT + 000267' 507000 000000 02610 HRLS 0; REVERSE XFER + 000270' 270440 000000 02620 ADD INDEX,0; SET UP POINTER WORD + 000271' 553000 000000 02630 HRRZS 0; READY TO GO + 000272' 202440 000013 02640 INSER: MOVEM INDEX,C; PROTECT XFER WORD + 000273' 251551 000000 02650 BLT C,(INDEX); XFER ONE WORD + 000274' 256001 000303' 02660 XCT ITAB(1); STEP UP OR DOWN + 000275' 365000 000272' 02670 SOJGE INSER; IF NOT DONE, LOOP BACK + 000276' 550000 000014 02680 INSEX: HRRZ COTP; SETUP SIZE + 000277' 274000 000012 02690 SUB WC; OF NEW BLOCK + 000300' 250000 001060' 02700 EXCH WBC; + 000301' 276000 001060' 02710 SUBM WBC; NOW NEW BLOCK SIZE IS IN WBC + 000302' 254000 000235' 02720 JRST INSE1; ALL DONE - GO BACK + + 000303' 274440 000332' 02740 ITAB: SUB INDEX,K5; SHRINK + 000304' 270440 000332' 02750 ADD INDEX,K5; GROW + + 02770 ;THE ASCII ADDER + + 000305' 261140 000016 02790 ASCIA: SAVE CINDEX; PROTECT THE STEP + 000306' 200340 000015 02800 MOVE 7,SINDEX + 000307' 404700 000327' 02810 AND CINDEX,K2; MASK OUT 60S + 000310' 242700 000001 02820 LSH CINDEX,1; + 000311' 434640 000331' 02830 IOR SINDEX,K4; + 000312' 270640 000326' 02840 ADD SINDEX,K1; + 000313' 270700 000015 02850 ADD CINDEX,SINDEX; EXCESS 166 ADDITION + 000314' 404700 000330' 02860 AND CINDEX,K3; MASK OUT CARRY BITS + 000315' 200640 000331' 02870 MOVE SINDEX,K4; + 000316' 404640 000016 02880 AND SINDEX,CINDEX; + 000317' 240640 777775 02890 ASH SINDEX,-3; GIVES 000 WHERE CARRY HAPPENED, 006 + 000320' 276700 000015 02900 SUBM CINDEX,SINDEX; CONVERT TO EXCESS 0 OR 60 + 000321' 434640 000331' 02910 IOR SINDEX,K4; CONVERT TO EXCESS 60 + 000322' 262140 000016 02920 UNSAVE CINDEX; RESTORE THE STEP + 000323' 311340 000015 02930 CAML 7,SINDEX; IF 99999, DON'T GO TO 00009 + 000324' 264140 000162' 02940 ERR 3^ JSR 3,ERRORX^ + 000325' 263140 000000 02950 EXIT; LEAVE + + 000326' 432150 643214 02970 K1: OCT 432150643214; 106 + 000327' 036170 743617 02980 K2: OCT 036170743617; 017 + 000330' 375767 737576 02990 K3: OCT 375767737576; 077 + 000331' 301406 030141 03000 K4: TSTRIN <00000>^ EXP "00000"+"00000"+1^ + 000332' 000001 000001 03010 K5: XWD 1,1; +,- ONE TO BOTH HALVES + EDITOR V.003 1 APRIL 1968 PAGE 14 + EDITOR - AUGUST 25, 1965 + + 000333' 260140 000000' 03030 FIND: CAL FILLB; FILL THE BUFFER + 000334' 620200 000041 03040 FIND1: TRZ FL,S0+S4; FORWARD SEARCH AND INITIAL SEARCH + 000335' 550000 001060' 03050 FIND2: HRRZ WBC; GET THE BUFFER SIZE + 000336' 322000 000360' 03060 JUMPE FINDA; EMPTY BLOCK + 000337' 201440 001064' 03070 MOVEI INDEX,WB; GET THE DATA ADDRESS + 000340' 200000 001064' 03080 MOVE WB; GET THE FIRST DATA WORD + 000341' 313000 000015 03090 CAMLE SINDEX; ARE WE PAST THE LINE + 000342' 254000 000360' 03100 JRST FINDA; YES, REVERSE + 000343' 316000 000015 03110 CAMN SINDEX; EXACT MATCH + 000344' 254000 000402' 03120 JRST FINDEQ; YES, BE HAPPY + 000345' 270440 001060' 03130 ADD INDEX,WBC; FORM ADDRESS OF LAST DATA WORD + 000346' 260140 000262' 03140 CAL BACK; FIND ITS SEQUENCE NUMBER + 000347' 313000 000015 03150 CAMLE SINDEX; IT THE LINE IN THIS BLOCK + 000350' 254000 000372' 03160 JRST FIND3A; YES, INVESTIGATE FURTHER + 000351' 316000 000015 03170 CAMN SINDEX; EXACT MATCH + 000352' 254000 000402' 03180 JRST FINDEQ; YES + 000353' 602200 000020 03190 FINDX: TRNE FL,S5; IS THIS LAST BLOCK + 000354' 254000 000367' 03200 JRST FINDC; YES, SO EXIT WITH THIS ADDRESS + 000355' 660200 000040 03210 TRO FL,S4; SCANNING HAS STARTED + 000356' 620200 000001 03220 TRZ FL,S0; AND GO FORWARD + 000357' 254000 000365' 03230 JRST FIND4; AWAY WE GO + + 000360' 201440 000000 03250 FINDA: MOVEI INDEX,0; SETUP FOR REVERSE + 000361' 606200 000040 03260 TRNN FL,S4; HAVE WE BEEN HERE BEFORE + 000362' 602200 000400 03270 TRNE FL,S8; OR IS IT THE FIRST BLOCK + 000363' 254000 000370' 03280 JRST FINDR; YES, SO USE THIS ADDRESS + 000364' 660200 000001 03290 TRO FL,S0; OTHERWISE, GO BACK ONE BLOCK + 000365' 260140 000045' 03300 FIND4: CAL GET; GET THE BLOCK + 000366' 254000 000335' 03310 JRST FIND2; SEARCH FOR IT + + 000367' 550440 001060' 03330 FINDC: HRRZ INDEX,WBC; TAIL OF BLOCK IF ENTERED HERE + 000370' 271440 001064' 03340 FINDR: ADDI INDEX,WB; HEAD OF BLOCK IF ENTERED HERE + 000371' 254000 000400' 03350 JRST FIND3; AND RETURN + + 000372' 201440 001060' 03370 FIND3A: MOVEI INDEX,WBC; WE WISH TO SCAN THIS BLOCK FOR + 000373' 260140 000406' 03380 CAL FINDES; THIS LINE - COMPUTE LINE SIZE + 000374' 316000 000015 03390 CAMN SINDEX; EXACT MATCH + 000375' 254000 000402' 03400 JRST FINDEQ; YES, WELL, GOOD + 000376' 317000 000015 03410 CAMG SINDEX; HAVE WE PASSED IT + 000377' 344440 000373' 03420 AOJA INDEX,FIND3A+1; NO, SO CONTINUE + 000400' 514600 000011 03430 FIND3: HRLZ COTP,INDEX; RETURN THE ADDRESS OF THE LINE + 000401' 254000 000246' 03440 JRST CLEARE; EXIT + + 000402' 514600 000011 03460 FINDEQ: HRLZ COTP,INDEX; FOUND THE DESIRED LINE + 000403' 260140 000406' 03470 CAL FINDES; COMPUTE ITS SIZE + 000404' 554440 000014 03480 HLRZ INDEX,COTP; SET UP INDEX + 000405' 254000 000246' 03490 JRST CLEARE; AND EXIT + EDITOR V.003 1 APRIL 1968 PAGE 15 + EDITOR - AUGUST 25, 1965 + + 000406' 350000 000014 03510 FINDES: AOS COTP; FIND SIZE OF LINE + 000407' 200011 000001 03520 MOVE 1(INDEX); FIND NEXT SEQUENCE NUMBER + 000410' 350000 000011 03530 AOS INDEX; + 000411' 606000 000001 03540 TRNN 1; SEQUENCE NUMBER? + 000412' 326000 000406' 03550 JUMPN FINDES; NO, BUT ZERO ALSO DENOTES END + 000413' 263140 000000 03560 EXIT; DONE + + 000414' 550000 000014 03580 CSIZE: HRRZ COTP; COMPUTE SIZE OF TRANSFER + 000415' 554440 000014 03590 HLRZ INDEX,COTP; SIZE OF THIS LINE + 000416' 270000 000011 03600 ADD INDEX; AND THIS LOCATION + 000417' 270440 000012 03610 ADD INDEX,WC; PLUS THE NEW LINE SIZE + 000420' 504440 000000 03620 HRL INDEX,0; IN LEFT HALF IS OLD SIZE + 000421' 275000 001064' 03630 SUBI WB; AND TURN IT INTO A COUNT + 000422' 550540 001060' 03640 HRRZ C,WBC; FOR A SUBTRACT + 000423' 276540 000000 03650 SUBM C,0; AND NOW ZERO HAS THE XFER SIZE + 000424' 263140 000000 03660 EXIT; + + + 000425' 260140 000502' 03690 DELETE: CAL GE2SEQ; GET THE RANGE TO BE EXCISED + 000426' 550440 001060' 03700 DELOOP: HRRZ INDEX,WBC; GET THE WORD COUNT + 000427' 271440 001064' 03710 ADDI INDEX,WB; FORM THE END ADDRESS + 000430' 260140 000262' 03720 CAL BACK; GET THE LAST SEQUENCE IN THE BLOCK + 000431' 316000 000017 03730 CAMN LAST; IS THE LAST LINE THE END OF THE RANGE + 000432' 254000 000447' 03740 JRST DEQ; YES + 000433' 311000 000017 03750 CAML LAST; DO WE WANT TO DELETE THIS ONE TOO + 000434' 254000 000451' 03760 JRST DINB; NO,DELETE TERMINATES IN THE BUFFER + 000435' 260140 000465' 03770 CAL DREST; ERASE THE REST OF THE BUFFER + 000436' 602200 000020 03780 EMPT: TRNE FL,S5; LAST BLOCK + 000437' 254000 001035' 03790 JRST COMLEV; YES, DONE + 000440' 620200 000001 03800 TRZ FL,S0; FORWARD + 000441' 260140 000045' 03810 CAL GET; INPUT NEXT BLOCK + 000442' 200640 001064' 03820 MOVE SINDEX,WB; GET FIRST LINE + 000443' 606640 000001 03830 TRNN SINDEX,1; IF NOT A ONE, BLOCK IS EMPTY + 000444' 254000 000436' 03840 JRST EMPT; SO GET THE NEXT ONE + 000445' 260140 000333' 03850 CAL FIND; NEW SINDEX IS THE FIRST LINE - THIS CAL + 000446' 254000 000426' 03860 JRST DELOOP; SETS UP THE COUNTS, ETC. + + 000447' 260140 000465' 03880 DEQ: CAL DREST; DELETE THE REST OF THE BUFFER + 000450' 254000 001035' 03890 DEX: JRST COMLEV; EXIT + EDITOR V.003 1 APRIL 1968 PAGE 16 + EDITOR - AUGUST 25, 1965 + + 000451' 201440 001063' 03910 DINB: MOVEI INDEX,WBF; GET INITIAL ADDRESS + 000452' 260140 000406' 03920 CAL FINDES; SCAN THE LINE + 000453' 322000 000456' 03930 JUMPE .+3; END OF BUFFER + 000454' 317000 000017 03940 CAMG LAST; LAST LINE DONE + 000455' 344440 000452' 03950 AOJA INDEX,DINB+1; NO, GO AGAIN + 000456' 557000 000014 03960 HLRZS COTP; COMPUTE TOTAL SIZE + 000457' 274440 000014 03970 SUB INDEX,COTP; THIS MUCH SMALLER + 000460' 517000 000014 03980 HRLZS COTP; RESET LEFT HALF + 000461' 542440 000014 03990 HRRM INDEX,COTP; AND RIGHT HALF GET DELTA SIZE + 000462' 402000 000012 04000 CLEARM WC; SET FOR ZERO LENGTH INSERT + 000463' 260140 000227' 04010 CAL INSED; INSERT THE NULL LINE + 000464' 254000 001035' 04020 JRST COMLEV; AND EXIT + + 000465' 554440 000014 04040 DREST: HLRZ INDEX,COTP; DELETE THE REMAINING BUFFER + 000466' 275440 001064' 04050 SUBI INDEX,WB; JUST DECREMENT SIZE + 000467' 542440 001060' 04060 HRRM INDEX,WBC; OF THE NEW BUFFER + 000470' 254000 000245' 04070 JRST INSE16; DONE + EDITOR V.003 1 APRIL 1968 PAGE 17 + EDITOR - AUGUST 25, 1965 + + 000471' 260140 000502' 04090 PRINT: CAL GE2SEQ; GET THE RANGE + 000472' 200011 000000 04100 PRLOOP: MOVE (INDEX); GET A LINE + 000473' 322000 000533' 04110 JUMPE GETNEX; ZERO IMPLIES END OF BUFFER - GET NEXT + 000474' 313000 000017 04120 CAMLE LAST; ARE WE STILL IN THE BALLPARK + 000475' 254000 001035' 04130 JRST COMLEV; NO, ALL DONE + 000476' 260140 000516' 04140 CAL STEP; PREPARE FOR NEXT HUNT + 000477' 260140 000601' 04150 CAL OTLINE; PRINT THIS LINE + 000500' 260140 000333' 04160 CAL FIND; FIND THE NEXT LINE + 000501' 254000 000472' 04170 JRST PRLOOP; LOOK AT IT + + 000502' 260140 000616' 04190 GE2SEQ: CAL GETSEQ; GET A 2 NUMBER RANGE + 000503' 334000 000000 04200 SKIPA; THERE WERE TWO + 000504' 254000 000507' 04210 JRST GEX; ONLY ONE + 000505' 242000 000001 04220 LSH 1; JUSTIFY IT + 000506' 664000 000001 04230 TROA 1; AND FLAG IT AS A SEQUENCE NUMBER + 000507' 200000 000015 04240 GEX: MOVE SINDEX; DUPLICATE THE INPUT NUMBER IF JUST ONE + 000510' 202000 000017 04250 MOVEM LAST; STORE THE END OF THE RANGE + 000511' 260140 000333' 04260 CAL FIND; SEARCH FOR THE FIRST LINE + 000512' 316740 001056' 04270 CAMN LAST,FIRST; BOTH THE SAME + 000513' 316651 000000 04280 CAMN SINDEX,(INDEX); BUT NO MATCH FOUNT + 000514' 263140 000000 04290 EXIT; WILL SKIP THIS ONE + 04300 ERR 2; AND *NLN* + 000515' 264100 000162' JSR 2,ERRORX + + 000516' 261140 000016 04320 STEP: SAVE CINDEX ;PROTECT THE STEP + 000517' 201700 000001 04330 MOVEI CINDEX,1; PREPARE TO ADD ONE TO SINDEX + 000520' 202000 000015 04340 MOVEM SINDEX; WHICH WE LOAD FROM ZERO + EDITOR V.003 1 APRIL 1968 PAGE 24 + EDITOR - AUGUST 25, 1965 + + 000521' 254000 000306' 04420 JRST ASCIA+1; AWAY + + 000522' 200640 001056' 04440 PNEXT: MOVE SINDEX,FIRST; PRINT NEXT LINE + 000523' 200000 000015 04450 MOVE SINDEX; UPDATE THE LINE POINTER + 000524' 260140 000516' 04460 CAL STEP; NEXT LINE + 000525' 260140 000333' 04470 CAL FIND; WHERE IS IT + 000526' 336651 000000 04480 SKIPN SINDEX,(INDEX); ZERO IS END, ALSO LOAD SINDEX + 04490 ERR 2; *NLN* + 000527' 264100 000162' JSR 2,ERRORX + 000530' 202640 001056' 04500 MOVEM SINDEX,FIRST; STEP FIRST POINTER + 000531' 260140 000601' 04510 CAL OTLINE; PRINT THE LINE + 000532' 254000 000137' 04520 JRST OUTTER; BACK TO CONTROL + + 000533' 602200 000020 04540 GETNEX: TRNE FL,S5; END OF FILE + 000534' 254000 001035' 04550 JRST COMLEV; YES, EXIT + 000535' 620200 000001 04560 TRZ FL,S0; FORWARD + 000536' 260140 000045' 04570 CAL GET; INPUT IT + 000537' 201440 001064' 04580 MOVEI INDEX,WB; FIRST ADDRESS + 000540' 254000 000472' 04590 JRST PRLOOP; RETURN TO PRINT SCAN + EDITOR V.003 1 APRIL 1968 PAGE 26 + TELETYPE IO - AUGUST 25, 1965 + + 04620 SUBTTL TELETYPE IO - AUGUST 25, 1965 + + 04640 ;OUTPUT SEQUENCE NUMBER + 000541' 350000 001043' 04650 OTSEQ: AOS TYOBF1; STEP THE WORD POINTER + + + 000542' 202660 001043' 04660 MOVEM SINDEX,@TYOBF1; PUT THE SEQUENCE NO. + 000543' 201040 000211 04670 MOVEI 1,211; AND A TAB + 000544' 136040 001043' 04680 IDPB 1,TYOBF1; INTO THE OUTPUT BUFFER + 000545' 067100 000000 04690 OTSEQ4: OUTPUT TYP,0; OUTPUT THE TELETYPE BUFFER + 000546' 263140 000000 04700 EXIT + + 04720 ;INPUT ONE LINE FROM TELETYPE AND CONVERT TO SEQUENCED + + 000547' 066100 000000 04740 GETLIN: INPUT TYP,0; READ THE LINE + 000550' 201040 001314' 04750 MOVEI 1,TTB1; PREEPARE TO BLOCK IT UP + 000551' 505040 001313' 04760 HRLI 1,TTB; DESTINATION + 000552' 402000 001313' 04770 CLEARM TTB + 000553' 251040 001336' 04780 BLT 1,TTB16; BLOCK IT UP + 000554' 200300 000600' 04790 MOVE TPT,KKK1; PREPARE THE CONVERSION POINTER + 000555' 200240 001046' 04800 MOVE IPT,TYIBF1; AND READ POINTER + 000556' 200100 001047' 04810 MOVE 2,TYIBF2; AND THE COUNT + 000557' 202646 000000 04820 MOVEM SINDEX,(TPT); PUT IN THE SEQUENCE + 000560' 201040 000211 04830 MOVEI 1,211; TAB + 000561' 344300 000564' 04840 AOJA TPT,EOMLOP+2; START CONVERSION + + 000562' 361100 000571' 04860 EOMLOP: SOJL 2,EOMOUT; IF ALL OUT OF CHARACTERS + 000563' 134040 000005 04870 ILDB 1,IPT; READ ONE + 000564' 136040 000006 04880 IDPB 1,TPT; WRITE ONE + 000565' 302040 000033 04890 CAIE 1,33; ALTERNATE ALTMOD + 000566' 306040 000175 04900 CAIN 1,175; REGULAR ALTMOD + 000567' 254000 000160' 04910 JRST CRT; MAKE EXIT + 000570' 254000 000562' 04920 JRST EOMLOP; GET MORE + + 000571' 200500 000006 04940 EOMOUT: MOVE WC,TPT; FORM WORD COUNT + 000572' 274500 000600' 04950 SUB WC,KKK1; INITIAL VALUE + 000573' 553000 000012 04960 HRRZS WC; CLEAR LEFT + 000574' 306040 000012 04970 CAIN 1,12; LINE FEED + 000575' 271500 000001 04980 ADDI WC,1; MEANS STEP COUNT + 000576' 350003 000000 04990 STEPEX: AOS (PDP); SKIP EXIT + 000577' 263140 000000 05000 EXIT + 000600' 440700 001313' 05010 KKK1: POINT 7,TTB; INITIAL POINTER + + 05030 ;OUTPUT ONE LINE OF TEXT + + 000601' 200011 000000 05050 OTLINE: MOVE (INDEX); FIRST WORD + 000602' 254000 000607' 05060 JRST OTL1 + 000603' 200011 000000 05070 MOVE (INDEX); SUBSEQUENT WORDS + 000604' 322000 000545' 05080 JUMPE OTSEQ4; ZERO IMPLIES THE END OF THE WORLD + 000605' 602000 000001 05090 TRNE 1; ONE IMPLIES THE END OF THE LINE + 000606' 254000 000545' 05100 JRST OTSEQ4 + 000607' 350000 001043' 05110 OTL1: AOS TYOBF1; PUT IT IN THE OUTPUT BUFFER + 000610' 202020 001043' 05120 MOVEM @TYOBF1 + EDITOR V.003 1 APRIL 1968 PAGE 26-1 + TELETYPE IO - AUGUST 25, 1965 + + 000611' 344440 000603' 05130 AOJA INDEX,OTLINE+2; GO FOR MORE + EDITOR V.003 1 APRIL 1968 PAGE 27 + TELETYPE IO - AUGUST 25, 1965 + + 05150 ;GET ONE CHARACTER + + 000612' 066100 000000 05170 GETCHR: INPUT TYP,0; GET A LINE + 000613' 200240 001046' 05180 MOVE IPT,TYIBF1; PREPARE INPUT POINTER + 000614' 134540 000005 05190 ILDB C,IPT; LOAD THE FIRST CHARACTER + 000615' 263140 000000 05200 EXIT + + 05220 ;GET A SEQUENCE PAIR + + 000616' 403000 000015 05240 GETSEQ: CLEARB 0,SINDEX; MAKE BOTH ZERO + 000617' 134540 000005 05250 ILDB C,IPT; GET A CHARACTER + 000620' 301540 000060 05260 CAIL C,60; IT MUST BE A NUMBER + 000621' 303540 000071 05270 CAILE C,71 + 000622' 254000 000626' 05280 JRST ETEST; OR A DELIMITER + 000623' 242640 000007 05290 LSH SINDEX,7; NUMBER + 000624' 270640 000013 05300 ADD SINDEX,C; NEW ONE + 000625' 254000 000617' 05310 JRST GETSEQ+1 + + 000626' 306540 000056 05330 ETEST: CAIN C,56; POINT? + 000627' 254000 000652' 05340 JRST PER + 000630' 306540 000054 05350 CAIN C,54; COMMA? + 000631' 254000 000645' 05360 JRST CMMA + 000632' 332000 000015 05370 SKIPE SINDEX; IF NOTHING INPUT YET + 000633' 302540 000015 05380 CAIE C,15; OR NOT A CARRET + 000634' 05390 COMERR: ERR 1; ILLEGAL COMMAND + 000634' 264040 000162' JSR 1,ERRORX + 000635' 434640 000656' 05400 IOR SINDEX,KK4; MAKE IT AN ASCII THING + 000636' 332000 000000 05410 SKIPE 0; IF TWO ARGS + 000637' 250640 000000 05420 EXCH SINDEX,0; SWAP EM BACK + 000640' 242640 000001 05430 LSH SINDEX,1; LEFT JUSTIFY + 000641' 660640 000001 05440 TRO SINDEX,1; AND FLAG IT + 000642' 202640 001056' 05450 MOVEM SINDEX,FIRST; SAVE IT FOR . + 000643' 322000 000576' 05460 JUMPE STEPEX; ONLY ONE ARG + 000644' 263140 000000 05470 EXIT; TWO ARGS + + 000645' 322640 000634' 05490 CMMA: JUMPE SINDEX,COMERR; THREE ARGS? + 000646' 326000 000634' 05500 JUMPN COMERR; ONE ARG + 000647' 434640 000656' 05510 IOR SINDEX,KK4; ASCII-IZE IT + 000650' 250640 000000 05520 EXCH SINDEX,0; SWAP EM + 000651' 254000 000617' 05530 JRST GETSEQ+1 + + 000652' 326640 000634' 05550 PER: JUMPN SINDEX,COMERR; CANT BE THIRD ARG + 000653' 200640 001056' 05560 MOVE SINDEX,FIRST; RETREIVE POINT + 000654' 242640 777777 05570 LSH SINDEX,-1; RIGHT JUSTIFY + 000655' 254000 000617' 05580 JRST GETSEQ+1 + + 000656' 140603 014060 05600 KK4: OCT 140603014060; 00000 + EDITOR V.003 1 APRIL 1968 PAGE 28 + DECSET - AUGUST 25, 1965 + + 05620 SUBTTL DECSET - AUGUST 25, 1965 + + 001000 05640 FOPEN=1000 + + 05660 ;SET FILE OPEN (*SN,NAME) + + 000657' 603200 001000 05680 DECINI: TLNE FL,FOPEN; IF A FILE IS NOT ALREADY OPEN + 05690 ; THEN GOTO NORMAL PROCESS + 05700 ERR 1 ; IF FILE OPEN ,MUST CLOSE W. E + 000660' 264040 000162' JSR 1 ,ERRORX + 000661' 403200 001060' 05710 DECIN1: SETZB FL,WBC; ZERO FLAGS AND WORD COUNT + 000662' 402000 001012' 05720 CLEARM DTNAME; FILE NAME + 000663' 402000 001013' 05730 CLEARM DTNAME+1; AND EXTENSION + 000664' 402000 001014' 05740 CLEARM DTNAME+2; AND DATE + 000665' 260140 000710' 05750 CAL GTCHAR; GET UNIT NUMBER + 000666' 301000 000060 05760 CAIL 60; IT MUST BE A NUMBER + 000667' 303000 000070 05770 CAILE 70; + 000670' 254000 000665' 05780 JRST .-3; IGNORE ANYTHING ELSE + 000671' 137000 001337' 05790 DPB [POINT 5,PLUNK,23]; DUMP INTO INIT COMMAND + 000672' 260140 000710' 05800 CAL GTCHAR; NEXT CHARACTER + 000673' 302000 000054 05810 CAIE 54; COMMA? + 000674' 254000 000672' 05820 JRST .-2; IGNORE ALL ELSE + 000675' 200040 001340' 05830 LOOP0: MOVE 1,[POINT 6,DTNAME]; INITIALIZE NAME POINTER + 000676' 201540 000006 05840 MOVEI C,6; MAX NAME LENGTH + 000677' 260140 000710' 05850 LOOP: CAL GTCHAR; GET A CHARACTER + 000700' 301000 000060 05860 CAIL "0"; NUMBERS AND LETTERS ONLY COME HERE + 000701' 303000 000071 05870 CAILE "9"; SO HERE FILTER NUMBERS + 000702' 254000 001000' 05880 JRST LOOP1; IT IS A LETTER + 000703' 640000 000040 05890 LOOP2: TRC 40; NUMBER - MAKE IT SIXBIT + 000704' 136000 000001 05900 IDPB 1; STORE INTO NAME (OR EXTENSION) + 000705' 367540 000677' 05910 SOJG C,LOOP; COUNT DOWN FOR SIZE + 000706' 260140 000710' 05920 CAL GTCHAR; NEXT CHARACTER + 000707' 254000 000706' 05930 JRST .-1; + + EDITOR V.003 1 APRIL 1968 PAGE 29 + DECSET - AUGUST 25, 1965 + + 000710' 134000 000005 05960 GTCHAR: ILDB IPT; LOAD ONE CHARACTER + 000711' 306000 000015 05970 CAIN 15; CRT + 000712' 254000 000727' 05980 JRST GET1; SNEAK EXIT + 000713' 306000 000056 05990 CAIN "."; AN EXTENSION IS COMMING + 000714' 254000 001004' 06000 JRST GET2; FIX IT UP + 000715' 302000 000033 06010 CAIE 33; THE FUNNY ALTMODE + 000716' 306000 000175 06020 CAIN 175; AND THE REAL ONE + 000717' 254000 000726' 06030 JRST GET11 ;CAUSE EXIT TO OCCUR + 000720' 306000 000012 06040 CAIN 0,12 ;LF CHAR? + 000721' 254000 000727' 06050 JRST GET1 ; YES TREAT AS CR + 000722' 302000 000001 06060 CAIE 1; CONTROL A + 000723' 263140 000000 06070 EXIT; NOTA SO EXIT HAPPY + 000724' 661200 000100 06080 TLO FL,100; SET CONTROL A FLAG + 000725' 254000 000710' 06090 JRST GTCHAR; GET ANOTHER CHARACTER + 000726' 661200 000002 06100 GET11: TLO FL,2 ;NEW FILE FLAG + + 000727' 262140 000000 06120 GET1: UNSAVE; POP OFF EXIT + 000730' 201000 001050' 06130 GO: MOVEI DTOBUF; THESE TWO INSTRUCTIONS REQUIRED + 000731' 506000 000736' 06140 HRLM PLUNK+1; REQUIRED TO LINK LEFT HALF + 000732' 200000 001057' 06150 MOVE SJOBFF; RESET JOB AREA + 000733' 202000 000000* 06160 MOVEM JOBFF; TO PREVENT STORAGE EAT-UP + 000734' 041140 000000 06170 INIT DT,0; INITIALIZE DECTAPE + 000735' 446441 000000 06180 PLUNK: SIXBIT /DTA/; RIGHT HALF SET ABOVE + 000736' 000000 001053' 06190 XWD 0,DTIBUF; LEFT HALF SET ABOVE + 06200 ERR 5; UNIT NOT AVAILABLE + 000737' 264240 000162' JSR 5,ERRORX + 000740' 205000 400000 06210 MOVSI 400000; USE BIT + 000741' 412000 001062' 06220 ANDCAM DTB; CLEAR IT + 000742' 541000 001062' 06230 HRRI DTB; HEAD OF BUFFER + 000743' 202000 001053' 06240 MOVEM DTIBUF; SETUP IN HEADER + 000744' 065140 000001 06250 OUTBUF DT,1; SET UP SINGLE BUFFER + 000745' 623200 000100 06260 TLZE FL,100; NEW DIRECTORY? + 000746' 047140 000013 06270 CALLI DT,13; YES, ZONK IT (UTPCLR) + 000747' 336000 001012' 06280 SKIPN DTNAME; NO NAME MEANS JUST CLEAR, PROB + 000750' 254000 000133' 06290 JRST FINIS2; SO EXIT AND CLOSE FILE + 000751' 076140 001012' 06300 LOOKUP DT,DTNAME; IS THE NAME ALRRADY THERE + 000752' 254000 000772' 06310 JRST NEWFIL; NO, SO WE ENTER IT + 000753' 603200 000002 06320 TLNE FL,2; ARE WE ASKING FOR A NEW FILE + 06330 ERR 10; YES, FAU + 000754' 264400 000162' JSR 10,ERRORX + + 000755' 200100 001013' 06350 DOIT: MOVE 2,DTNAME+1; GET LINK + 000756' 074142 000000 06360 USETI DT,(2); SET IT UP + 000757' 067140 000000 06370 OUTPUT DT,; MAKE SYSTEM HAPPY + 000760' 075142 000000 06380 USETO DT,(2); SET UP OUTPUT ALSO + 000761' 627200 000010 06390 TLZN FL,10; NEW FILE? + 000762' 254000 000767' 06400 JRST DOIT1; NO, ALMOST DONE + 000763' 402000 001063' 06410 SETZM WBF; WE MUST FORCE AN EMPTY BLOCK + 000764' 661200 000001 06420 TLO FL,1; SET BUFFER FULL FLAG + 000765' 402000 001060' 06430 SETZM WBC; ZERO LENGTH + 000766' 660200 000530 06440 TRO FL,S3+S5+S6+S8; INITIAL STATE, FIRST BLOCK MODIFIED + 000767' 202100 000135' 06450 DOIT1: MOVEM 2,THSBLK; SETUP CURRENT BLOCK NUMBER + 000770' 661200 001000 06460 TLO FL,FOPEN; SET FILE STATUS TO OPEN + EDITOR V.003 1 APRIL 1968 PAGE 29-1 + DECSET - AUGUST 25, 1965 + + 000771' 254000 001035' 06470 JRST COMLEV; ALL DONE + EDITOR V.003 1 APRIL 1968 PAGE 30 + DECSET - AUGUST 25, 1965 + + 000772' 607200 000002 06490 NEWFIL: TLNN FL,2; WAS ALTMOD STRUCK + 06500 ERR 11; NO, NCF + 000773' 264440 000162' JSR 11,ERRORX + 000774' 077140 001012' 06510 ENTER DT,DTNAME; PUT IN DI + 06520 ERR 6; DCE + 000775' 264300 000162' JSR 6,ERRORX + 000776' 661200 000010 06530 TLO FL,10; SET NEW FILE FLAG + 000777' 254000 000755' 06540 JRST DOIT; + + 001000' 301000 000101 06560 LOOP1: CAIL "A"; LETTER CHECK + 001001' 303000 000132 06570 CAILE "Z"; IT MUST VERILY BE A LETTER + 001002' 254000 000677' 06580 JRST LOOP; WE IGNORE IT + 001003' 254000 000703' 06590 JRST LOOP2; WE PROCESS IT + + 001004' 332000 001013' 06610 GET2: SKIPE DTEXTN; EXTENSION? + 06620 ERR 1; ALREADY GOT ONE, CANT HAVE TWO + 001005' 264040 000162' JSR 1,ERRORX + 001006' 621040 770000 06630 TLZ 1,770000; MAGIC TO BYTE POINTER TO POINT TO NEXT + 001007' 201540 000003 06640 MOVEI C,3; ONLY 3 LETTERS IN EXTENSION + 001010' 262140 000000 06650 UNSAVE; POP OF SOME GARBAGE + 001011' 254000 000677' 06660 JRST LOOP; RETURN TO LISTEN + + 001012' 000000 000000 06680 DTNAME: 0; FILE NAME + 001013' 000000 000000 06690 DTEXTN: 0; FILE EXTENSION + 001014' 000000 000000 06700 DTDATE: 0; DATE + 001015' 000000 000000 06710 0; DUMMY + + 001013' 06730 FBNUM=DTEXTN + + EDITOR V.003 1 APRIL 1968 PAGE 31 + INITIA - AUGUST 25, 1965 + + 06760 SUBTTL INITIA - AUGUST 25, 1965 + 000001 06770 AL=1 + 001016' 047000 000000 06780 INITIA: CALLI 0,0; RESET SYSTEM + 001017' 041100 000001 06790 INIT TYP,AL; RESET CONCOLE + 001020' 646471 000000 06800 SIXBIT /TTY/ + 001021' 001042' 001045' 06810 XWD TYOBUF,TYIBUF + 001022' 254200 000000 06820 HALT + 001023' 064100 000001 06830 INBUF TYP,1; SET UP ONE INPUT BUFFER + 001024' 065100 000002 06840 OUTBUF TYP,2; AND TWO OUTPUT BUFFERS + 001025' 200000 000733* 06850 MOVE JOBFF; SAVE FIRST FREE + 001026' 202000 001057' 06860 MOVEM SJOBFF; FOR LATER RESTART + 001027' 067100 000000 06870 OUTPUT TYP,0; MAKE SYSTEM HAPPY + 001030' 200700 001041' 06880 INITIX: MOVE CINDEX,KK1; INITIALIZE STEP TO 10 + 001031' 201140 001303' 06890 MOVEI PDP,PDSTAK-1; INITIALIZE PUSHDOWN POINTER + 001032' 403640 000004 06900 CLEARB SINDEX,FL; FLAGS AND SEQUENCE INDEX + 001033' 211400 000001 06910 MOVNI P,1; AND FIRST BLOCK POINTER + 001034' 402000 001060' 06920 CLEARM WBC; WORD COUNT + 001035' 260140 000160' 06930 COMLEV: CAL CRT; A COMMON RETURN + 001036' 301200 000000 06940 CAIL FL,0 ; DDE ERROR + 001037' 254000 000137' 06950 JRST OUTTER ; NO, SO OFF TO LISTEN CONTROL + 001040' 254000 001016' 06960 JRST INITIA ; YES GO RESET WORLD + + 06980 ;BUFFERS, ET. AL. + 001041' 140603 014260 06990 KK1: OCT 140603014260; 00010 + 001042' 07000 TYOBUF: BLOCK 3 + 001045' 07010 TYIBUF: BLOCK 3 + + 001050' 07030 DTOBUF: BLOCK 3 + 001053' 000000 000000 07040 DTIBUF: 0 + 001054' 000700 000000 07050 XWD 700,0; SELF ASSIGNED BUFFERS, ETC. + 001055' 000000 000000 07060 0 + + 001056' 000000 000000 07080 FIRST: 0 + 001057' 000000 000000 07090 SJOBFF: 0 + + 001060' 000000 000000 07110 WBC: 0; WORKING BUFFER COUNT + 001061' 000000 000000 07120 0 + 001062' 000200 001062' 07130 DTB: XWD 200,DTB; DECTAPE HEADER + 001063' 000000 000000 07140 WBF: 0 + 001064' 07150 WB: BLOCK 217; THE WORKING BUFFER + 001303' 624563 456400 07160 RESTT: SIXBIT .RESET. + + 001304' 07180 PDSTAK: BLOCK 7; PUSHDOWN STAK + 001313' 07190 TTB: BLOCK 23; TELETYPE BUFFER-BUFFER + 001336' 000000 000000 07200 TTB16: 0 + + 001314' 07220 TTB1=TTB+1 + 001046' 07230 TYIBF1=TYIBUF+1 + 001047' 07240 TYIBF2=TYIBUF+2 + 001043' 07250 TYOBF1=TYOBUF+1 + 001051' 07260 DTOBF1=DTOBUF+1 + + 07280 EXTERNAL JOBFF + EDITOR V.003 1 APRIL 1968 PAGE 31-1 + INITIA - AUGUST 25, 1965 + + 001337' 07290 EDEND: + + 001016' 07310 END INITIA + 001337' 140500 000735' + 001340' 440600 001012' + +NO ERRORS DETECTED + +PROGRAM BREAK IS 001341 + +8K CORE USED + EDITOR V.003 1 APRIL 1968 PAGE 32 + SYMBOL TABLE + + 000247 +AC1 000001 +AC2 000002 +AC3 000005 +AC4 000006 +AL 000001 +ASCIA 000305' +ATSALL 000004' +BACK 000262' +BACK1 000252' +C 000013 +CAL 260140 000000 +CINDEX 000016 +CLEARE 000246' +CMMA 000645' +COMERR 000634' +COMLEV 001035' +COTP 000014 +CRM 000171' +CRT 000160' +CSIZE 000414' +DECIN1 000661' +DECINI 000657' +DELETE 000425' +DELOOP 000426' +DEQ 000447' +DEX 000450' +DINB 000451' +DOIT 000755' +DOIT1 000767' +DREST 000465' +DT 000003 +DTB 001062' +DTDATE 001014' +DTEXTN 001013' +DTIBUF 001053' +DTNAME 001012' +DTOBF1 001051' +DTOBUF 001050' +DUMPB 000106' +DUMX 000122' +EDEND 001337' +EMPT 000436' +EOMLOP 000562' +EOMOUT 000571' +EPT 000204' +ERRORX 000162' +ERROX1 000166' +ERROX2 000167' +ERT 000172' +ETEST 000626' +EXIT 263140 000000 +FBNUM 001013' + EDITOR V.003 1 APRIL 1968 PAGE 32-1 + SYMBOL TABLE + +FILLB 000000' +FILLB1 000041' +FIND 000333' +FIND1 000334' +FIND2 000335' +FIND3 000400' +FIND3A 000372' +FIND4 000365' +FINDA 000360' +FINDC 000367' +FINDEQ 000402' +FINDES 000406' +FINDR 000370' +FINDX 000353' +FINIS2 000133' +FINISH 000131' +FIRST 001056' +FL 000004 +FOPEN 001000 +GE2SEQ 000502' +GET 000045' +GET0 000055' +GET1 000727' +GET11 000726' +GET2 001004' +GETCHR 000612' +GETF 000075' +GETL 000073' +GETL1 000100' +GETLIN 000547' +GETN 000047' +GETNEX 000533' +GETSEQ 000616' +GEX 000507' +GO 000730' +GTCHAR 000710' +IAMTEM 000136' +INDEX 000011 +INITIA 001016' +INITIX 001030' +INSE 000205' +INSE1 000235' +INSE16 000245' +INSE2 000210' +INSE3 000216' +INSED 000227' +INSEG 000264' +INSER 000272' +INSEX 000276' +IPT 000005 +ITAB 000303' +JOBFF 001025' EXT +K1 000326' + EDITOR V.003 1 APRIL 1968 PAGE 32-2 + SYMBOL TABLE + +K2 000327' +K3 000330' +K4 000331' +K5 000332' +KK1 001041' +KK4 000656' +KKK1 000600' +LAST 000017 +LOOP 000677' +LOOP0 000675' +LOOP1 001000' +LOOP2 000703' +NEWFIL 000772' +OTL1 000607' +OTLINE 000601' +OTSEQ 000541' +OTSEQ4 000545' +OUTTER 000137' +P 000010 +PDP 000003 +PDSTAK 001304' +PER 000652' +PLUNK 000735' +PNEXT 000522' +PRINT 000471' +PRLOOP 000472' +RESTT 001303' +S0 000001 +S1 000002 +S2 000004 +S3 000010 +S4 000040 +S5 000020 +S6 000100 +S7 000200 +S8 000400 +SAVE 261140 000000 +SINDEX 000015 +SJOBFF 001057' +SLURP 000057' +STEP 000516' +STEPEX 000576' +THSBLK 000135' +TPT 000006 +TTB 001313' +TTB1 001314' +TTB16 001336' +TYIBF1 001046' +TYIBF2 001047' +TYIBUF 001045' +TYOBF1 001043' +TYOBUF 001042' +TYP 000002 + EDITOR V.003 1 APRIL 1968 PAGE 32-3 + SYMBOL TABLE + +UNSAVE 262140 000000 +WB 001064' +WBC 001060' +WBF 001063' +WC 000012 + FFFFFFFFFFFFFFF UUU UUU DDDDDDDDDDDD GGGGGGGGGGGG EEEEEEEEEEEEEEE 222222222 +FFFFFFFFFFFFFFF UUU UUU DDDDDDDDDDDD GGGGGGGGGGGG EEEEEEEEEEEEEEE 222222222 +FFFFFFFFFFFFFFF UUU UUU DDDDDDDDDDDD GGGGGGGGGGGG EEEEEEEEEEEEEEE 222222222 +FFF UUU UUU DDD DDD GGG EEE 222 222 +FFF UUU UUU DDD DDD GGG EEE 222 222 +FFF UUU UUU DDD DDD GGG EEE 222 222 +FFF UUU UUU DDD DDD GGG EEE 222 +FFF UUU UUU DDD DDD GGG EEE 222 +FFF UUU UUU DDD DDD GGG EEE 222 +FFFFFFFFFFFF UUU UUU DDD DDD GGG EEEEEEEEEEEE 222 +FFFFFFFFFFFF UUU UUU DDD DDD GGG EEEEEEEEEEEE 222 +FFFFFFFFFFFF UUU UUU DDD DDD GGG EEEEEEEEEEEE 222 +FFF UUU UUU DDD DDD GGG GGGGGGGGG EEE 222 +FFF UUU UUU DDD DDD GGG GGGGGGGGG EEE 222 +FFF UUU UUU DDD DDD GGG GGGGGGGGG EEE 222 +FFF UUU UUU DDD DDD GGG GGG EEE 222 +FFF UUU UUU DDD DDD GGG GGG EEE 222 +FFF UUU UUU DDD DDD GGG GGG EEE 222 +FFF UUUUUUUUUUUUUUU DDDDDDDDDDDD GGGGGGGGG EEEEEEEEEEEEEEE 222222222222222 +FFF UUUUUUUUUUUUUUU DDDDDDDDDDDD GGGGGGGGG EEEEEEEEEEEEEEE 222222222222222 +FFF UUUUUUUUUUUUUUU DDDDDDDDDDDD GGGGGGGGG EEEEEEEEEEEEEEE 222222222222222 + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB0 :FUDGE2.LST [8,200] Created: 20-April-1967 11:20:00 Printed: 24-April-1978 11:22:32 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1593 +File will be deleted after printing + FUDGE2 V.011 PAGE 1 + 2-OCT-70 ED YOURDON/VJC/DMN + + 00010 TITLE FUDGE2 V.011 + 00020 SUBTTL 2-OCT-70 ED YOURDON/VJC/DMN + 00030 ;FILE UPDATE GENERATOR + 00040 ;"COPYRIGHT 1968,1969,DIGITAL EQUIPMENT CORP. MAYNARD,MASS. U.S.A." + + 000011 00060 VFUDGE==11 ;VERSION NUMBER + 000000 00070 VPATCH==0 ;DEC PATCH LEVEL + 000000 00080 VCUSTOM==0 ;NON-DEC PATCH LEVEL + + 000137 00100 JOBVER==137 + 000137 00110 LOC JOBVER + 000137 000000 000011 00120 XWD VCUSTOM,VFUDGE+VPATCH*1000 + 000000' 00130 RELOC + 00140 MLON + + 00160 ;FUDGE ACCUMULATOR DEFINITIONS + + 000001 00180 A= 1 ;GENERAL COMMUNICATION AC + 000002 00190 B= 2 ;SCRATCH ACCUMULATOR + 000003 00200 T= 3 ;USED IN /C AND /X ONLY + 000004 00210 C= 4 ;SCRATCH ACCUMULATOR + 000005 00220 D= 5 ;IO DEVICE NUMBER ACCUMULATOR + 000006 00230 E= 6 ;SCRATCH ACCUMULATOR + 000007 00240 F= 7 ;FLAG ACCUMULATOR + 000010 00250 G= 10 ;DEVICE CHARACTERISTICS AC + 000011 00260 H= 11 ;USED IN GETCHR AND GETCMN + 000012 00270 P= 12 ;PUSHDOWN POINTER AC + 000013 00280 R= 13 ;PROGRAM NAME-USED IN READ,WRITE + 000014 00290 S= 14 ;SIXBIT SYMBOL ACCUMULATOR + 000015 00300 DIS= 15 ;DISPATCH ACCUMULATOR + 000016 00310 EXT= 16 ;FILE NAME EXTENSION ACCUMULATOR + 000017 00320 SW= 17 ;SWITCH UUO AC + + FUDGE2 V.011 PAGE 2 + 2-OCT-70 ED YOURDON/VJC/DMN + + 00350 ;FUDGE FLAG DEFINITIONS (RIGHT HALF OF ACCUMULATOR F) + + 000001 00370 DESTB== 1 ;1-DESTINATION DEVICE SEEN + 000002 00380 SAVEB== 2 ;1-SWITCH SEEN,BUT NOT EXECUTED + 000004 00390 SWTB== 4 ;1-SWITCH MODE ENTERED IN GETCHR + 000010 00400 SLSHB== 10 ;1-SWITCH MODE ENTERED WITH </> + 000020 00410 TTYOB== 20 ;1-NON-TTY OUTPUT;USED BY IO + 000040 00420 TTYCB== 40 ;1-NON-TTY OUTPUT;USED BY COMMAND + 000100 00430 PROGB== 100 ;1-PROGRAM NAME SEEN IN SPECIFICATION + 000200 00440 NOLOCB==200 ;1-DELETE LOCAL SYMBOLS ***VJC + 000400 00450 DEVB== 400 ;1-DEVICE NAME SEEN IN SPEC. + 001000 00460 EXTB== 1000 ;1-EXPLICIT FILE NAME EXTENSION + 002000 00470 ERRB== 2000 ;1-ERROR IN ENTRY BLOCK CHECK + 004000 00480 INFOB== 4000 ;1-VALID INFORMATION IN COMMAND + 010000 00490 CONB== 10000 ;1-CONTEXT OF <.> IS PROGRAM NAME + 00500 ;0-CONTEXT OF <.> IS FILE NAME + 020000 00510 F4IB== 20000 ;1-IGNORE F4 OUTPUT + 040000 00520 CRLFTY==40000 ;1-CR,LF TYPED (FOR ERROR MSG) + 100000 00530 POPBAK==100000 ;1-XCT POPJ P, ;TO RETURN TO CALLING SEQ. + 200000 00540 XFLG== 200000 ;1-INDEX THIS FILE + 400000 00550 DTAFLG==400000 ;1-OUTPUT DEVICE IS DTA (SPECIAL INDEX) + FUDGE2 V.011 PAGE 3 + 2-OCT-70 ED YOURDON/VJC/DMN + + + + + 00600 ;HANDY BITS FOR CALLS TO DEVCHR FOR DEVICE CHARACTERISTICS + 000001 00610 OUTBIT==1 ;1-DEVICE CAN DO OUTPUT + 000002 00620 INBIT== 2 ;1-DEVICE CAN DO INPUT + 000004 00630 DRCTRB==4 ;1-DEVICE HAS A DIRECTORY + 000010 00640 TTYBIT==10 ;1-DEVICE IS A TTY + 000100 00650 DTABIT==100 ;1-DEVICE IS A DTA + 040000 00660 LPTBIT==40000 ;1-DEVICE IS LPT + 200000 00670 DSKBIT==200000 ;1-DEVICE IS DSK + + 00690 ;OTHER USEFUL PARAMETER ASSIGNMENTS + 000200 00700 N== 200 ;SIZE OF MASTER AND TRAN BUFFERS + 000020 00710 XP== 20 ;SIZE OF PUSHDOWN LIST + 000500 00720 SIZE== 500 ;SIZE OF PURE ENTRY BLOCK + 000505 00730 X== SIZE+5 ;SIZE OF ENTRY AND SAVE BLOCKS + 020000 00740 IOEOF== 20000 ;1-END-OF-FILE HAS BEEN SEEN + 040000 00750 IOBKTL==40000 ;1-BLOCK-TOO-LARGE ERROR + 100000 00760 IODATA==100000 ;1-DATA ERROR + 200000 00770 IODEV== 200000 ;1-DEVICE ERROR + 004000 00780 IOBOT== 4000 ;1-MAG TAPE IS AT BEGINNING OF TAPE + + 000011 00800 RIBALC==11 ;NUMBER OF BLOCKS ALLOCATED + + 00820 ;EXTERNAL SYMBOLS + 00830 EXTERN JOBFF, JOBREL, JOBSYM, JOBSA + + 00850 OPDEF JSR [PUSHJ P,] ;PURE FOR RE-ENTRANT FUDGE + + FUDGE2 V.011 PAGE 4 + INITIALIZE AND SETUP OF FUDGE2 + + 00880 SUBTTL INITIALIZE AND SETUP OF FUDGE2 + 00890 ;THIS SECTION OF CODING DOES THE FOLLOWING THINGS + 00900 ; 1.RESETS ALL IO DEVICES BY CALLING [SIXBIT /RESET/] + 00910 ; 2.INITIALIZES THE TELETYPE IN ASCII-LINE MODE + 00920 ; 3.TYPES A * TO SIGNIFY READINESS FOR INPUT FROM USER + 00930 ; 4.SETS UP A PUSHDOWN LIST + 00940 ; 5.INITIALIZES VARIOUS ACCUMULATORS, CLEARS THE FLAGS, + 00950 ; AND INITIALIZES THE MSTBUF AND TRNBUF COUNTERS + + 000000' 255000 000000 00970 FUDGE2: JFCL ;INCASE OF CCL ENTRY + 000001' 000000 000000 00980 RESET ;RESET I/O DEVICES + 000002' 200000 005126' 00990 MOVE [XWD LOW,LOW+1] + 000003' 402000 002515' 01000 SETZM LOW ;CLEAR DATA AREA + 000004' 251000 005116' 01010 BLT LOWTOP-1 + 000005' 200000 005127' 01020 MOVE [XWD 17,11] ;TEST FOR LEVEL D + 000006' 400000 000000 01030 SETZ ;FAILED, NOT LEVEL D + 000007' 607000 003400 01040 TLNN (7B9) ;IS IT LEVEL D OR LATER? + 000010' 634000 000000 01050 TDZA ;NO + 000011' 561000 777776 01060 HRROI -2 ;THIS IS LEVEL D + 000012' 202000 005111' 01070 MOVEM LEVEL ;STORE STATE + 000013' 400000 000000 01080 SETZ ;CLEAR ACC'S + 000014' 201740 000001 01090 MOVEI 17,1 ;WITH A BLT OF ZERO + 000015' 251740 000017 01100 BLT 17,17 ;FROM 0-17 + 000016' 041000 000001 01110 INIT 0,1 ;INITIALIZE TTY, CHANNEL 0 + 000017' 646471 000000 01120 SIXBIT /TTY/ ;TTY + 000020' 004602' 004610' 01130 XWD OBUF, IBUF ;ADDRESSES FOR BUFFER HEADERS + 000021' 254200 000021' 01140 HALT . ;ILLEGAL INSTRUCTION IF NO TTY + 000022' 067000 000000 01150 OUTPUT 0, ;DUMMY OUTPUT ON TTY + 000023' 201040 000052 01160 MOVEI A, "*" ;PICK UP A <*> + 000024' 136040 004603' 01170 IDPB A, OBUF+1 ;TYPE IT OUT + 000025' 067000 000000 01180 OUTPUT 0, ;EMPTY THE BUFFER + 000026' 200500 005125' 01190 MOVE P, XPDLST ;SET UP A PUSHDOWN POINTER + 000027' 561240 000001 01200 HRROI D,1 ;INITIALIZE DEVICE BUFFER + 000030' 202240 003324' 01210 MOVEM D, DEVBUF ;... + 000031' 205040 777600 01220 MOVSI A, -N ;GET COUNT OF MSTBUF AND TRNBUF + 000032' 541040 002525' 01230 HRRI A, FILBUF+1 ;INITIALIZE POINTER IN FILBUF + 000033' 202040 002524' 01240 MOVEM A, FILBUF ;SET UP COUNT IN FILE BUFFER + 000034' 541040 002725' 01250 HRRI A, PRGBUF+1 ;INITIALIZE POINTER IN PRGBUF + 000035' 202040 002724' 01260 MOVEM A, PRGBUF ;... + 000036' 541040 003124' 01270 HRRI A,PPNBUF ;INITIAL POINTER IN PPNBUF + 000037' 202040 003124' 01280 MOVEM A,PPNBUF + FUDGE2 V.011 PAGE 5 + FUDGE2 COMMAND STRING DISPATCHING + + 01300 SUBTTL FUDGE2 COMMAND STRING DISPATCHING + 01310 ;THIS ROUTINE PICKS UP CHARACTERS FROM THE TELETYPE BUFFER AND + 01320 ;DISPATCHES TO THE PROPER ROUTINE DEPENDING ON THE TYPE OF + 01330 ;CHARACTER.A TABLE OF BYTES AND BYTE POINTERS ALLOWS EACH + 01340 ;CHARACTER IN THE ASCII SET TO BE TREATED INDIVIDUALLY. THE + 01350 ;ROUTINE MAY BE ENTERED AT GETCHR IF IT IS DESIRED TO ACCUMULATE + 01360 ;A 6-LETTER SIXBIT SYMBOL IN AC S. SYMBOLS OF DIFFERENT LENGTHS + 01370 ;MAY BE ACCUMULATED IN DIFFERENT REGISTERS BY SETTING THE CONTENTS + 01380 ;OF AC B TO THE DESIRED LENGTH, AND PUTTING A BYTE POINTER IN E + 01390 ;AND ENTERING THE ROUTINE AT GETCHR+4. + + 000040' 622340 100000 01410 GETCHR: TRZE F,POPBAK ;IMMEDIATE RETURN? + 000041' 263500 000000 01420 POPJ P, ;YES + 000042' 201100 000006 01430 MOVEI B, 6 ;SET COUNT OF SYMBOL TO 6 + 000043' 200300 005117' 01440 MOVE E, SYMPTR ;SET UP A BYTE POINTER FOR AC S + 000044' 201600 000000 01450 MOVEI S, 0 ;INITIALIZE SYMBOL ACCUMULATOR + 000045' 377000 004612' 01460 GETCMN: SOSG IBUF+2 ;IS TTY BUFFER EMPTY? + 000046' 066000 000000 01470 INPUT 0, ;YES, FILL IT UP + 000047' 134040 004611' 01480 ILDB A, IBUF+1 ;GET A CHARACTER + 000050' 200400 000001 01490 MOVE G, A ;GET A COPY OF IT IN AC G + 000051' 200000 005100' 01500 MOVE 0, CURCHR ;SAVE PREVIOUS CHAR + 000052' 202000 005101' 01510 MOVEM 0, LSTCHR ;AS LAST CHAR + 000053' 202040 005100' 01520 MOVEM A, CURCHR ;SAVE CURRENT CHAR + 000054' 231400 000011 01530 IDIVI G, 11 ;TRANSLATE TO 4-BIT CODE + 000055' 135411 000077' 01540 LDB G, TABLE(H) ;USE PROPER BYTE POINTER + 000056' 305400 000004 01550 CAIGE G, 4 ;MODIFY CODE IF .GE. 4 + 000057' 606340 000004 01560 TRNN F, SWTB ;MODIFY CODE IF IN SWITCH MODE + 000060' 271400 000004 01570 ADDI G, 4 ;CHANGE DISPATCH BY ADDING 4 + 000061' 550450 000065' 01580 HRRZ H, DSPTCH(G) ;GET PROPER DISPATCH ADDRESS + 000062' 301400 000010 01590 CAIL G, 10 ;BUT CHANGE IF NOT CORRECT + 000063' 554450 000055' 01600 HLRZ H, DSPTCH-10(G) ;TO A LEFT HALF DISPATCH + 000064' 254011 000000 01610 JRST (H) ;EXIT TO APPROPRIATE ROUTINE + + FUDGE2 V.011 PAGE 6 + COMMAND DISPATCH TABLE AND BYTE POINTERS + + 01640 SUBTTL COMMAND DISPATCH TABLE AND BYTE POINTERS + 000065' 000045' 002136' 01650 DSPTCH: XWD GETCMN,ERR16 ;IGNORED CHAR, BAD CHAR(SWITCH) + 000066' 000145' 000135' 01660 XWD SWTCH, SWTCHA ;<(>, LETTER(SWITCH MODE) + 000067' 000317' 002136' 01670 XWD COLON, ERR16 ;<:>, NUMBER(SWITCH MODE) + 000070' 000257' 000146' 01680 XWD PERIOD,SWTCHE ;<.>, <)>ESCAPE SWITCH MODE + 000071' 000156' 002147' 01690 XWD LFTARW,ERR17 ;<?>OR<=>, BAD CHAR (NORMAL MODE) + 000072' 000310' 000127' 01700 XWD COMMA, STORE ;<,>, ALPHABETIC CHARACTER(NORMAL) + 000073' 000521' 000127' 01710 XWD ALTMOD,STORE ;<$>,NUMERIC CHARACTER(NORMAL) + 000074' 000144' 002147' 01720 XWD SLASH, ERR17 ;</>, <)> ILLEGAL ESCAPE + 000075' 000265' 000000 01730 XWD LBRACK, 0 ;LEFT ANGLE BRACKET, OR "[" + 000076' 000303' 000000 01740 XWD RBRACK, 0 ;RIGHT ANGLE BRACKET + + 000077' 400410 000110' 01760 TABLE: POINT 4, BITE(G), 3 + 000100' 340410 000110' 01770 POINT 4, BITE(G), 7 + 000101' 300410 000110' 01780 POINT 4, BITE(G), 11 + 000102' 240410 000110' 01790 POINT 4, BITE(G), 15 + 000103' 200410 000110' 01800 POINT 4, BITE(G), 19 + 000104' 140410 000110' 01810 POINT 4, BITE(G), 23 + 000105' 100410 000110' 01820 POINT 4, BITE(G), 27 + 000106' 040410 000110' 01830 POINT 4, BITE(G), 31 + 000107' 000410 000110' 01840 POINT 4, BITE(G), 35 + FUDGE2 V.011 PAGE 7 + BYTE TABLE FOR DISPATCHING + + 01860 SUBTTL BYTE TABLE FOR DISPATCHING + 01870 ;CLASSIFICATION BYTE CODES + 01880 ; BYTE DISP CLASSIFICATION + + 01900 ; 00 00 ILLEGAL CHARACTER, SWITCH MODE + 01910 ; 01 01 ALPHABETIC CHARACTER, SWITCH MODE + 01920 ; 02 02 NUMERIC CHARACTER, SWITCH MODE + 01930 ; 03 03 SWITCH MODE ESCAPE, SWITCH MODE + + 01950 ; 00 04 ILLEGAL CHARACTER, NORMAL MODE + 01960 ; 01 05 ALPHABETIC CHARACTER, NORMAL MODE + 01970 ; 02 06 NUMERIC CHARACTER, NORMAL MODE + 01980 ; 03 07 SWITCH MODE ESCAPE, SWITCH MODE + + 02000 ; 04 10 IGNORED CHARACTER + 02010 ; 05 11 ENTER SWITCH MODE WITH A <(> + 02020 ; 06 12 DEVICE DELIMITER, <:> + 02030 ; 07 13 FILE EXTENSION DELIMITER, <.> + 02040 ; (CAN ALSO BE PART OF A PROGRAM NAME) + 02050 ; 10 14 OUTPUT SPECIFICATION, <LFT ARW> OR <=> + 02060 ; 11 15 FILE DELIMITER, <,> + 02070 ; 12 16 COMMAND TERMINATOR, <ALT MODE>=33,175,176 + 02080 ; 13 17 ENTER SWITCH MODE WITH A </> + 02090 ; 14 20 CHANGE CONTEXT OF PERIOD TO PROG NAME, <<> ,OR "[" + 02100 ; 15 21 CHANGE CONTEXT OF PERIOD TO FILE NAME, <>> + + 02120 ;BYTE TABLE CORRESPONDING TO 128 ASCII CHARS + + 000110' 200000 000000 02140 BITE: BYTE (4) 4,0,0,0,0,0,0,0,0 ;NUL + 000111' 210421 000000 02150 BYTE (4) 4,4,4,4,4,0,0,0,0 + 000112' 000000 000012 02160 BYTE (4) 0,0,0,0,0,0,0,0,12 ;?Z=$ + 000113' 500000 110100 02170 BYTE (4) 12,0,0,0,0,11,0,4,0 ;$ + 000114' 000001 230411 02180 BYTE (4) 0,0,0,0,5,3,1,0,11 ;***DMN + 000115' 017310 421042 02190 BYTE (4) 0,7,13,2,2,2,2,2,2 ;-,.,/,0,1,2,3,4,5 + 000116' 104211 406215 02200 BYTE (4) 2,2,2,2,6,0,14,10,15 ;6,7,8,9,:,;,<,=,> + 000117' 000104 210421 02210 BYTE (4) 0,0,1,1,1,1,1,1,1 ; , , ,B,C,D,E,F,G + 000120' 042104 210421 02220 BYTE (4) 1,1,1,1,1,1,1,1,1 ;H,I,J,K,L,M,N,O,P + 000121' 042104 210421 02230 BYTE (4) 1,1,1,1,1,1,1,1,1 ;Q,R,S,T,U,V,W,X,Y + 000122' 070000 100021 02240 BYTE (4) 1,14,0,0,0,10,0,1,1 ;Z,[, ,], ,?, ,A,B + 000123' 042104 210421 02250 BYTE (4) 1,1,1,1,1,1,1,1,1 ;C,D,E,F,G,H,I,J,K + 000124' 042104 210421 02260 BYTE (4) 1,1,1,1,1,1,1,1,1 ;L,M,N,O,P,Q,R,S,T + 000125' 042104 210012 02270 BYTE (4) 1,1,1,1,1,1,0,0,12 ;U,V,W,X,Y,Z, , ,$ + 000126' 510000 000000 02280 BYTE (4) 12,4 ;$,DEL + + FUDGE2 V.011 PAGE 8 + ROUTINES TO HANDLE 0-9,A-Z,. CHARACTERS + + 02310 SUBTTL ROUTINES TO HANDLE 0-9,A-Z,. CHARACTERS + 02320 ;IN THE COMMAND STRING. IN NORMAL MODE, THE CHARACTER IS + 02330 ;DEPOSITED TO FORM A SIXBIT SYMBOL. NOTE THAT "." IS LEGAL IN A PROGRAM NAME. + 02340 ;E.G. <EXP.1,ALLIO.>, IF ENCLOSED IN< >. IN SWITCH MODE, THE PROPER + 02350 ;INSTRUCTION IS EXECUTED WITH THE AID OF A DISPATCH TABLE. + 02360 ;THEN, IF SWITCH MODE WAS ENTERED WITH A SLASH, FUDGE2 EXITS + 02370 ;FROM SWITCH MODE. + + 000127' 660340 004000 02390 STORE: TRO F,INFOB ; INDICATE VALID INFO SEEN + 000130' 361100 000045' 02400 SOJL B, GETCMN ; JUMP IF NO ROOM FOR CHARACTER + 000131' 305040 000141 02410 CAIGE A,141 ;WORRY ABOUT LOWER CASE LETTERS + 000132' 275040 000040 02420 SUBI A, 40 ;CONVERT FROM ASCII TO SIXBIT + 000133' 136040 000006 02430 IDPB A, E ;STORE CHARACTER ACCORDING TO BYTE + 000134' 254000 000045' 02440 JRST GETCMN ;RETURN FOR NEXT CHARACTER + + 000135' 205740 072000 02460 SWTCHA: MOVSI SW, 072000 ;GET AN MTAPE OPCODE + 000136' 301040 000141 02470 CAIL A,141 ;ACCEPT LOWER CASE SWITCHES + 000137' 275040 000040 02480 SUBI A,40 + 000140' 256001 000115' 02490 XCT SLIST-101(A) ;EXECUTE PROPER SWITCH INSTRUCTION + 000141' 622340 000010 02500 TRZE F, SLSHB ;SWITCH MODE ENTERED WITH A </>? + 000142' 620340 000004 02510 TRZ F, SWTB ;YES, EXIT FROM SWITCH MODE + 000143' 254000 000045' 02520 JRST GETCMN ;RETURN FOR MORE CHARACTERS + + + 02550 ;THE FOLLOWING THREE ROUTINES HANDLE THE CONTROL CHARACTERS IN + 02560 ;THE COMMAND STRING WHICH CAUSE FUDGE2 TO ENTER INTO AND EXIT + 02570 ;FROM SWITCH MODE. THERE ARE TWO TYPES OF SWITCH MODE, DEPENDING + 02580 ;ON WHETHER THE IT IS ENTERED WITH A </> OR A <(>. + + 000144' 660340 000010 02600 SLASH: TRO F, SLSHB ;ENTER SWITCH MODE WITH A </> + 000145' 664340 000004 02610 SWTCH: TROA F, SWTB ;ENTER SWITCH MODE WITH A <(> + 000146' 620340 000004 02620 SWTCHE: TRZ F, SWTB ;EXIT FROM SWITCH MODE WITH A <)> + 000147' 254000 000045' 02630 JRST GETCMN ;RETURN FOR MORE CHARACTERS + + FUDGE2 V.011 PAGE 9 + LEFT ARROW PROCESSOR + + 02660 SUBTTL LEFT ARROW PROCESSOR + 02670 ;THE LEFT ARROW PROCESSOR IS ENTERED BY A DISPATCH FROM THE + 02680 ;COMMAND STRING. IT SIGNALS THE END OF THE DESTINGATION DEVICE + 02690 ;SPECIFICATION. IF THE SIXBIT SYMBOL ACCUMULATOR S IS NON- + 02700 ;ZERO, IT ASSUMES THAT THE USER HAS OMITTED THE FILE NAME DE- + 02710 ;LIMITER, AND CALLS THE FILE NAME ROUTINE. A PROGRAM NAME + 02720 ;SPECIFICATION IN THE OUTPUT DEVICE IS ILLEGAL. + 02730 ;FLAG SETTINGS: THE DESTINATION FLAG (DESTB) IS SET TO ONE, + 02740 ;THE DEVICE FLAG IS SET TO ZERO, AND THE PROGR?M NAME FLAG (PROGB) + 02750 ;IS SET TO ONE SO THAT THE FIRST DEVICE AFTER THE LEFT ARROW + 02760 ;WILL NOT RESULT IN A CALL TO PUTDEV. + 02770 ;IF NO OUTPUT DEVICE IS SEEN DSK IS ASSUMED. + 02780 ;POPBAK IS SET SO CONTROL RETURNS FRON COLON VIA GETCHR + + 000150' 261500 000014 02800 NODEV: PUSH P,S ;SAVE FILE NAME + 000151' 205600 446353 02810 MOVSI S,(SIXBIT /DSK/);DSK IS DEFAULT DEVICE + 000152' 660340 100000 02820 TRO F,POPBAK ;RETURN FROM GETCHR + 000153' 260500 000317' 02830 PUSHJ P,COLON ;FAKE A DEVICE SEEN + 000154' 262500 000014 02840 POP P,S ;RESTORE FILE NAME + 000155' 263500 000000 02850 POPJ P, ;RETURN + + + 000156' 260500 000407' 02880 LFTARW: PUSHJ P, SEMICP ;DO A LOOKUP IF NECESSARY + 000157' 620340 000400 02890 TRZ F, DEVB ;SET THE DEVICE FLAG TO ZERO + 000160' 660340 000101 02900 TRO F, PROGB+DESTB ;SET PROGRAM AND DESTINATION FLAGS + 000161' 254000 000040' 02910 JRST GETCHR ;RETURN FOR NEXT SYMBOL + + + FUDGE2 V.011 PAGE 10 + THIS CODE PROCESSES PROJECT-PROGRAMMER NUMBERS + + 02950 SUBTTL THIS CODE PROCESSES PROJECT-PROGRAMMER NUMBERS + + 000162' 400140 000000 02970 LSQB: SETZ T, ;START WITH ZERO + 000163' 261500 000003 02980 PUSH P,T ;AND STORE IT + 000164' 260500 000210' 02990 LSQB1: PUSHJ P,TTYIN ;GET NEXT CHAR. + 000165' 306040 000135 03000 CAIN A,"]" ;MATCHING SQB.? + 000166' 254000 000202' 03010 JRST RSQB ;YES + 000167' 306040 000054 03020 CAIN A,"," ;COMMA? + 000170' 254000 000177' 03030 JRST SQBCMA ;YES,SORT OUT XWD + 000171' 301040 000060 03040 CAIL A,"0" ;IS IT AN OCTAL NUMBER? + 000172' 303040 000071 03050 CAILE A,"9" ;... + 000173' 254000 000214' 03060 JRST ERRISQ ;NO,ERROR + 000174' 242140 000003 03070 LSH T,3 ;MAKE SPACE FOR NEXT CHAR. + 000175' 271141 777720 03080 ADDI T,-60(A) ;ADDI IN NEW DIGIT + + + 000176' 254000 000164' 03110 JRST LSQB1 ;BACK FOR MORE + + 000177' 516152 000000 03130 SQBCMA: HRLZM T,(P) ;STORE LEFT HALF ON STACK + 000200' 400140 000000 03140 SETZ T, ;START AFRESH + 000201' 254000 000164' 03150 JRST LSQB1 ;AND GET RIGHT HALF + + 000202' 542152 000000 03170 RSQB: HRRM T,(P) ;PUT RIGHT HALF ON STACK + 000203' 262500 000003 03180 POP P,T ;AND POP XWD OFF + 000204' 202140 005113' 03190 MOVEM T,PRJPRG ;SAVE DEFAULT PROJ-PROG + 000205' 326600 000045' 03200 JUMPN S,GETCMN ;AFTER A FILE NAME IS ONLY TEMP. + 000206' 202140 005112' 03210 MOVEM T,DEFPPN ;PERMANENT DEFAULT PPN + 000207' 254000 000045' 03220 JRST GETCMN ;GET NEXT CHAR. + + 000210' 377000 004612' 03240 TTYIN: SOSG IBUF+2 ;BUFFER EMPTY + 000211' 066000 000000 03250 INPUT 0, ;YES, FILL IT UP + 000212' 134040 004611' 03260 ILDB A,IBUF+1 ;GET A CHARACTER + 000213' 263500 000000 03270 POPJ P, ;AND RETURN + + 000214' 201100 005130' 03290 ERRISQ: MOVEI B,[ASCIZ /?Illegal project-programmer number/] + 000215' 254000 002247' 03300 JRST ERROR + FUDGE2 V.011 PAGE 11 + DISPATCH TABLE FOR SWITCHES + + 03320 SUBTTL DISPATCH TABLE FOR SWITCHES + + 000216' 201640 000711' 03340 SLIST: MOVEI DIS, APPEND ;A - APPEND INSTRUCTION + 000217' 260500 000250' 03350 PUSHJ P, BSWTCH ;B - BACKSPACE ONE FILE + 000220' 201640 000730' 03360 MOVEI DIS, DELCPY ;C - COPY AND DELETE LOCAL SYMBOLS ***VJC + 000221' 201640 000701' 03370 MOVEI DIS, DELETE ;D - DELETE INSTRUCTION + 000222' 201640 000660' 03380 MOVEI DIS, EXTRCT ;E - EXTRACT INSTRUCTION + 000223' 254000 002136' 03390 JRST ERR16 ;F - ERROR + 000224' 254000 002136' 03400 JRST ERR16 ;G - ERROR + 000225' 254000 002136' 03410 JRST ERR16 ;H - ERROR + 000226' 201640 000632' 03420 MOVEI DIS, INSERT ;I - INSERT INSTRUCTION + 000227' 254000 002136' 03430 JRST ERR16 ;J - ERROR + 000230' 260500 000251' 03440 PUSHJ P, KSWTCH ;K - SKIPFILE + 000231' 201640 000600' 03450 MOVEI DIS, LIST ;L - LIST COMMAND + 000232' 254000 002136' 03460 JRST ERR16 ;M - ERROR + 000233' 254000 002136' 03470 JRST ERR16 ;N - ERROR + 000234' 254000 002136' 03480 JRST ERR16 ;O - ERROR + 000235' 254000 002136' 03490 JRST ERR16 ;P - ERROR + 000236' 254000 002136' 03500 JRST ERR16 ;Q - ERROR + 000237' 201640 000621' 03510 MOVEI DIS, REPLCE ;R - REPLACE INSTRUCTION + 000240' 254000 002136' 03520 JRST ERR16 ;S - ERROR + 000241' 260500 000252' 03530 PUSHJ P, TSWTCH ;T - SKIP TO LOGICAL END OF TAPE + 000242' 254000 002136' 03540 JRST ERR16 ;U - ERROR + 000243' 254000 002136' 03550 JRST ERR16 ;V - ERROR + 000244' 260500 000253' 03560 PUSHJ P, WSWTCH ;W - REWIND MAG TAPE + 000245' 201640 000722' 03570 MOVEI DIS,INDEX ;X - INDEX THIS LIBRARY + 000246' 254000 002136' 03580 JRST ERR16 ;Y - ERROR + 000247' 260500 000254' 03590 PUSHJ P, ZSWTCH ;Z - CLEAR DIRECTORY ON DECTAPE + + + 03620 ;MAGTAPE AND DECTAPE DEVICE SWITCH HANDLERS + 03630 ;THE FOLLOWING ROUTINES HANDLE THE B,K,T,W, AND Z SWITCHES + 03640 ;BY ASSEMBLING THE PROPER CALL OR UUO INSTRUCTION. IF A + 03650 ;DEVICE HAS ALREADY BEEN SEEN, THE CHANNEL NUMBER IS LOADED + 03660 ;INTO THE COMMAND, AND THE INSTRUCTION IS EXECUTED. OTHER- + 03670 ;WISE, EXECUTION IS DEFERRED BY SETTING A FLAG AND STORING + 03680 ;THE PARTIALLY ASSEMBLED INSTRUCTION. THE INSTRUCTION IS + 03690 ;EXECUTED LATER, AFTER THE DEVICE HAS BEEN SEEN. + + 000250' 271740 000001 03710 BSWTCH: ADDI SW, 1 ;CODE FOR BACKSPACE IS 17 + 000251' 271740 000006 03720 KSWTCH: ADDI SW, 6 ;CODE FOR SKIPFILE IS 16 + 000252' 271740 000007 03730 TSWTCH: ADDI SW, 7 ;CODE FOR SKIP TO L.E.O.T. IS 10 + 000253' 344740 000255' 03740 WSWTCH: AOJA SW,.+2 ;CODE FOR REWIND IS 1 + 000254' 200740 005123' 03750 ZSWTCH: MOVE SW, DTCLR ;DIFFERENT UUO FOR /Z + 000255' 660340 000002 03760 TRO F, SAVEB ;TURN ON THE SWITCH BIT + 000256' 263500 000000 03770 POPJ P, ;EXIT + FUDGE2 V.011 PAGE 12 + PERIOD PROCESSOR + + 03790 SUBTTL PERIOD PROCESSOR + 03800 ;THE PERIOD PROCESSOR IS CALLED BY A DISPATCH FROM GETCHR. IT + 03810 ;PRECEDES A FILE NAME EXTENSION, UNLESS THE CONTEXT BIT CONB IS + 03820 ;A ONE (CONB=1), IN WHICH CASE, THE PERIOD WAS FOUND INSIDE AN + 03830 ;ANGLE BRACKET, INDICATING THAT IT IS PART OF A PROGRAM NAME. + 03840 ;THE EXTENSION NAME IS GOTTEN BY ENTERING THE GETCHR ROUTINE + 03850 ;WITH THE LENGTH SET TO THREE CHARACTERS, AND A BYTE POINTER + 03860 ;SET TO STORE THE SYMOL IN ACCUMULATOR EXT. THE EXTENSION + 03870 ;FLAG IS SET BY THIS ROUTINE. + + 000257' 602340 010000 03890 PERIOD: TRNE F, CONB ;IS PERIOD PART OF A PROGRAM NAME? + 000260' 254000 000127' 03900 JRST STORE ;YES, STORE IT IN SYMBOL + 000261' 660340 001000 03910 TRO F, EXTB ;NO, SET EXTENSION FLAG + 000262' 200300 005120' 03920 MOVE E, EXTPTR ;GET ANOTHER BYTE POINTER + 000263' 201100 000003 03930 MOVEI B, 3 ;ASSEMBLE A 3-CHARACTER WORD + 000264' 254000 000045' 03940 JRST GETCMN ;BUT DONT DESTROY S + + FUDGE2 V.011 PAGE 13 + ROUTINES TO PROCESS ANGLE BRACKETS + + 03970 SUBTTL ROUTINES TO PROCESS ANGLE BRACKETS + 03980 ;THE FOLLOWING ROUTINES PROCESS THE LEFT ANGLE BRACKET "<" + 03990 ;AND RIGHT ANGLE BRACKET ">" CHARACTERS. THEY ARE ENTERED BY + 04000 ;A DISPATCH FROM THE GETCHR ROUTINE. THE ANGLE BRACKETS + 04010 ;CAN ACT AS FILE NAME OR PROGRAM NAME DELIMITERS, SO A CHECK + 04020 ;IS MADE TO SEE IF THE SYMBOL ACCUMULATOR IS NON-ZERO. THE + 04030 ;MAIN FUNCTION OF THE ROUTINES IS TO SET OR CLEAR THE CONTEXT + 04040 ;BIT CONB, WHOSE INTERPRETATION IS AS FOLLOWS: + 04050 ;SETTING OF BIT MEANING + 04060 ; 0 COMMAS DELIMIT FILE NAMES, AND PERIODS + 04070 ; DELIMIT FILE NAME EXTENSIONS + 04080 ; 1 COMMAS DELIMIT PROGRAM NAMES, AND PERIODS + 04090 ; ARE PART OF A PROGRAM NAME + + 000265' 606340 000001 04110 LBRACK: TRNN F, DESTB ;IS THIS THE OUTPUT DEVICE? + 000266' 254000 002007' 04120 JRST ERROR1 ;YES, SYNTAX ERROR + 000267' 306040 000133 04130 CAIN A,"[" ;PROJECT-PROGRAMMER PAIR? + 000270' 254000 000162' 04140 JRST LSQB ;YES, HANDLE IT + 000271' 200000 005102' 04150 MOVE 0,SDEVCHR ;GET SAVED DEV CHRSTCS + 000272' 607000 200100 04160 TLNN 0,DTABIT+DSKBIT ;LAST DEVICE DSK OR DTA? + 000273' 254000 000277' 04170 JRST LBRACA ;NO + 000274' 200000 005101' 04180 MOVE 0,LSTCHR ;GET LAST CHAR + 000275' 306000 000072 04190 CAIN 0,72 ;WAS IT COLON? + 000276' 254000 002007' 04200 JRST ERROR1 ;YES,:< ILLEGAL + 000277' 04210 LBRACA: ;NO CONTINUE + 000277' 260500 000407' 04220 PUSHJ P, SEMICP ;PROCESS THE FILE NAME + 000300' 660340 010000 04230 TRO F, CONB ;SET CONTEXT TO PROGRAM NAMES + 000301' 350000 005077' 04240 AOS MATCH ;ADD ONE FOR EACH LEFT < ***VJC + 000302' 254000 000040' 04250 JRST GETCHR ;RETURN FOR MORE CHARACTERS + + 000303' 322600 000305' 04270 RBRACK: JUMPE S,.+2 ;IS THERE A SYMBOL TO HANDLE? + 000304' 260500 000470' 04280 PUSHJ P,COMMAP ;YES,PROCESS THE FILE NAME + 000305' 620340 010000 04290 TRZ F,CONB ;SET CONTEXT TO FILE NAMES + 000306' 370000 005077' 04300 SOS MATCH ;SUBTRACT ONE FOR EACH RIGHT > ***VJC + 000307' 254000 000040' 04310 JRST GETCHR ;RETURN FOR MORE CHARACTERS + + FUDGE2 V.011 PAGE 14 + COMMA PROCESSOR + + 04340 SUBTTL COMMA PROCESSOR + 04350 ;THE COMMA ROUTINE IS ENTERED BY A DISPATCH FROM GETCHR. + 04360 ;IT DETERMINES WHETHER THE COMMA DELIMITS A FILE NAME OR A + 04370 ;PROGRAM NAME, AND TRANSFERS CONTROL EITHER TO SEMICP OR TO + 04380 ;COMMAP. + + 000310' 606340 010000 04400 COMMA: TRNN F, CONB ;FILE NAME OR PRGRAM NAME? + 000311' 254000 000314' 04410 JRST COMMAX ;FILE NAME + 000312' 260500 000470' 04420 PUSHJ P, COMMAP ;PROGRAM NAME + 000313' 254000 000040' 04430 JRST GETCHR ;RETURN FOR MORE CHARACTERS + + 000314' 260500 000407' 04450 COMMAX: PUSHJ P, SEMICP ;FILE NAME, DO A LOOKUP + 000315' 402000 005113' 04460 SETZM PRJPRG ;CLEAR TEMP. PPN + 000316' 254000 000040' 04470 JRST GETCHR ;RETURN FOR MORE CHARACTERS + + FUDGE2 V.011 PAGE 15 + COLON PROCESSOR + + 04500 SUBTTL COLON PROCESSOR + 04510 ;THIS ROUTINE IS ENTERED BY A DISPATCH FROM THE GETCHR + 04520 ;ITS PURPOSE IS TO INITIALIZE DEVICES USED BY FUDGE2 AND + 04530 ;ASSIGN THEM A CHANNEL NUMBER. IF THE DEVICE IS THE TTY, THE + 04540 ;ROUTINE EXITS IMMEDIATELY, SINCE THE TTY HAS ALREADY BEEN + 04550 ;INITIALIZED. IF A PROGRAM WAS NOT SEEN IN THE PREVIOUS DEVICE + 04560 ;SPECIFICATION, THEN THE PRECEDING FILE HAD NO PROGRAMS + 04570 ;FOLLOWING IT, AND A ZERO IS PLACED IN THE LIST STRUCTURE IN + 04580 ;THE 3-WORD FILE BLOCK, SO THAT THE GETDEV ROUTINE WILL + 04590 ;KNOW THAT THE ENTIRE FILE IS DESIRED. IF THE COLON ROUTINE + 04600 ;IS CALLED WITH 0 IN ACCUMULATOR S, THE ROUTINE ASSUMES + 04610 ;THAT SOMETHING LIKE "DTA3:FOO?DTA4:BAR<X,Y,Z>,MTA0:::/R" + 04620 ;WAS TYPED, AND IT PUTS A PHONY FILE NAME IN FILBUF TO KEEP + 04630 ;THE BOOK-KEEPING STRAIGHT. + + 000317' 660340 000400 04650 COLON: TRO F, DEVB ;DEVICE WAS SEEN IN THIS SPEC. + 000320' 602340 100000 04660 TRNE F,POPBAK ;DEFAULT "DSK" BEING SET + 000321' 254000 000324' 04670 JRST .+3 ;SO DON'T CLEAR PROJ-PROG + 000322' 402000 005112' 04680 SETZM DEFPPN ;CLEAR PERMANENT PPN + 000323' 402000 005113' 04690 SETZM PRJPRG ;AND TEMP. ALSO + 000324' 322600 000373' 04700 JUMPE S, COLONC ;NULL S IMPLIES FILES ON MTA,PTR + 000325' 202600 002522' 04710 MOVEM S, COLON2 ;SAVE DEVICE FOR INIT + 000326' 200400 000014 04720 MOVE G, S ;GET A COPY OF THE DEVICE NAME + 000327' 000400 000000 04730 DEVCHR G, ;GET ITS CHARACTERISTICS + 000330' 202400 005102' 04740 MOVEM G,SDEVCHR ;SAVE DEV CHRSTCS ***VJC + 000331' 603400 040010 04750 TLNE G,TTYBIT!LPTBIT ;IF EITHER TTY OR LPT + 000332' 402000 005111' 04760 SETZM LEVEL ;DON'T DO EXTENDED LOOKUPS EVER + 000333' 603400 000010 04770 TLNE G, TTYBIT ;IS THE DEVICE A TTY? + 000334' 254000 000040' 04780 JRST GETCHR ;YES, RETURN IMMEDIATELY + 000335' 606340 000001 04790 TRNN F, DESTB ;IS THIS THE OUTPUT DEVICE? + 000336' 254000 000375' 04800 JRST COLON4 ;YES, GO CHECK SEPARATE THINGS + 000337' 200240 003324' 04810 MOVE D, DEVBUF ;GET POINTER TO DEVICE NAME TABLE + 000340' 252240 000344' 04820 COLON6: AOBJP D, COLON7 ;MORE DEVICES TO CHECK? + 000341' 316605 003324' 04830 CAMN S, DEVBUF(D) ;HAS DEVICE ALREADY BEEN INITTED? + 000342' 254000 000040' 04840 JRST GETCHR ;YES, DON'T RE-INIT IT + 000343' 254000 000340' 04850 JRST COLON6 ;CHECK SOME MORE + FUDGE2 V.011 PAGE 16 + COLON PROCESSOR + + + 000344' 202605 003324' 04880 COLON7: MOVEM S, DEVBUF(D) ;STORE THE NEW DEVICE NAME + 000345' 205040 777777 04890 MOVSI A, -1 ;FIX UP THE COUNT IN THE BUFFER + 000346' 272040 003324' 04900 ADDM A, DEVBUF ;... + 000347' 607400 000002 04910 TLNN G, INBIT ;CAN DEVICE DO INPUT? + 000350' 254000 002015' 04920 JRST ERROR4 ;NO, ERROR + 000351' 201600 000000 04930 MOVEI S, 0 ;CLEAR OUT THE SYMBOL WORD + 000352' 666340 000100 04940 TRON F, PROGB ;WAS A PROGRAM NAME SEEN? + 000353' 260500 000444' 04950 PUSHJ P, STNULL ;NO, STORE A NULL IN FILE BLOCK + 000354' 200040 000005 04960 MOVE A, D ;CALCULATE BUFFER HEADER POSITION + 000355' 221040 000003 04970 IMULI A, 3 ;3 WORDS PER BUFFER HEADER + 000356' 271040 004610' 04980 ADDI A, IBUF ;ALL BUFFER HEADERS IN IBUF BLOCK + 000357' 350000 005103' 04990 COLON8: AOS NUMDEV ;ONE MORE DEVICE SEEN + 000360' 202040 002523' 05000 MOVEM A, COLON3 ;SAVE WORD FOR INIT + 000361' 201040 000014 05010 MOVEI A, 14 ;SET MODE TO BINARY + 000362' 603400 040000 05020 TLNE G,LPTBIT ;IS DEVICE THE LPT? + 000363' 201040 000000 05030 MOVEI A, 0 ;YES, RESTORE MODE TO ASCII + 000364' 542040 002521' 05040 HRRM A, COLON0 ;SAVE MODE FOR INIT + 000365' 137240 005137' 05050 DPB D, [POINT 4,COLON1,12] + 000366' 256000 002462' 05060 XCT COLON1 ;DO OPEN ON DEVICE + 000367' 254000 002061' 05070 JRST ERROR9 ;DEVICE NOT AVAILABLE + 000370' 606340 000001 05080 TRNN F, DESTB ;IS THIS THE OUTPUT DEVICE? + 000371' 254000 000040' 05090 JRST GETCHR ;YES, NO MORE CHECKING - EXIT + 000372' 607400 000004 05100 TLNN G, DRCTRB ;DOES DEVICE HAVE A DIRECTORY? + 000373' 260500 000406' 05110 COLONC: PUSHJ P, COLONB ;NO, GIVE IT A PHONY FILE NAME + 000374' 254000 000040' 05120 JRST GETCHR ;RETURN FOR MORE CHARACTERS + + 05140 ;OUTPUT DEVICE ONLY + + 000375' 202600 003325' 05160 COLON4: MOVEM S, DEVBUF+1 ;SAVE THE DEVICE NAME + 000376' 201240 000001 05170 MOVEI D, 1 ;SET DEVICE NUMBER TO 1 + 000377' 607400 000001 05180 TLNN G, OUTBIT ;CAN DEVICE DO OUTPUT? + 000400' 254000 002015' 05190 JRST ERROR4 ;NO, ERROR + 000401' 603400 000100 05200 TLNE G,DTABIT ;IS DEVICE DTA? + 000402' 660340 400000 05210 TRO F,DTAFLG ;YES, SET IN CASE INDEXING + 000403' 205040 004605' 05220 MOVSI A, OBUF+3 ;CALCULATE BUFFER HEADER ADDRESS + 000404' 660340 000040 05230 TRO F, TTYCB ;INDICATE NON-TTY IO + 000405' 254000 000357' 05240 JRST COLON8 ;ENTER MAIN PROCESSING LOOP + + 000406' 201600 465757 05260 COLONB: MOVEI S, 465757 ;FILE NAME OF "FOO" + 05270 ;FALLS THROUGH TO SEMICP ROUTINE + FUDGE2 V.011 PAGE 17 + FILE NAME PROCESSOR + + 05290 SUBTTL FILE NAME PROCESSOR + 05300 ;THIS ROUTINE IS CALLED BY THE COMMA ROUTINE WHEN IT HAS + 05310 ;BEEN DETERMINED THAT THE CONTEXT OF THE COMMA IS THAT OF A + 05320 ;FILE NAME. NULL FILES ARE IGNORED BY THE ROUTINE, AND CAUSE + 05330 ;AN IMMEDIATE RETURN TO GETCHR. FOR OUTPUT DEVICES, AN ENTER + 05340 ;IS PERFORMED, WHILE FOR INPUT DEVICES, THE FLOW OF CONTROL IS + 05350 ;AS FOLLOWS: + 05360 ; 1. IF THE PREVIOUS FILE HAD NO PROGRAMS, A ZERO IS + 05370 ; STORED IN THE 3RD WORD OF THE FILE BLOCK OF THAT + 05380 ; FILE - THE WORD THAT ORDINARILY POINTS TO THE + 05390 ; PROGRAM SUBLIST. + 05400 ; 2. THE PROGRAM LIST FOR THE PREVIOUS FILE IS TERMINATED + 05410 ; BY PUTTING A ZERO IN THE PROGRAM BUFFER, AND PUTTING + 05420 ; A POINTER TO THE ZERO IN THE 3RD WORD OF THIS FILE + 05430 ; BLOCK (NOT THE PREVIOUS BLOCK) + 05440 ; 3. THE FILE NAME AND FILE NAME EXTENSION AND THE DEVICE + 05450 ; CHANNEL NUMBER OF THE CURRENT FILE ARE STORED. + + 000407' 606340 000400 05470 SEMICP: TRNN F,DEVB ;HAS A DEVICE BEEN SEEN? + 000410' 260500 000150' 05480 PUSHJ P,NODEV ;NO, SO ASSUME "DSK" + 000411' 312740 005123' 05490 CAME SW,DTCLR ;Z SWITCH? YES, OPERATE ON OUTPUT ONLY + 000412' 137240 005140' 05500 DPB D, [POINT 4,SW,12] + 000413' 622340 000002 05510 TRZE F, SAVEB ;IS THERE A SWITCH TO PROCESS? + 000414' 256000 000017 05520 XCT SW ;YES, EXECUTE IT + 000415' 322600 000462' 05530 JUMPE S, SEMIC3 ;IGNORE NULL FILES + + 000416' 626340 001000 05550 SEMICA: TRZN F, EXTB ;EXPLICIT EXTENSION SEEN? + 000417' 505700 624554 05560 HRLI EXT, 624554 ;NO, REPLACE WITH REL" + 000420' 606340 000001 05570 TRNN F, DESTB ;OUTPUT DEVICE? + 000421' 254000 000447' 05580 JRST SEMIC2 ;YES, PROCESS SEPARATELY + 000422' 261500 000014 05590 PUSH P, S ;SAVE FILE NAME + 000423' 201600 000000 05600 MOVEI S, 0 ;PUT IN A ZERO + 000424' 626340 000100 05610 TRZN F, PROGB ;WAS A PROGRAM SEEN IN PREVIOUS? + 000425' 260500 000444' 05620 PUSHJ P, STNULL ;NO, CLOSE OUT PREVIOUS FILE + 000426' 260500 001144' 05630 PUSHJ P, PUTPRG ;YES, CLOSE OUT PREVIOUS PRGLST + 000427' 262500 000014 05640 SEMIC4: POP P, S ;RESTORE FILE NAME + 000430' 316600 005141' 05650 CAMN S,[12B5] ;IS IT * ?***DMN + 000431' 254000 001675' 05660 JRST ASTRSK ;YES ***DMN + 000432' 260500 001137' 05670 PUSHJ P, PUTFIL ;NO, STORE FILENAME + 000433' 200600 005112' 05680 MOVE S,DEFPPN ;GET GLOBAL PPN + 000434' 260500 001151' 05690 PUSHJ P,PUTPPN ;SAVE IT + 000435' 200600 000016 05700 MOVE S, EXT ;GET FILE NAME EXTENSION + 000436' 260500 001137' 05710 PUSHJ P, PUTFIL ;STORE IT + 000437' 542241 000000 05720 HRRM D, (A) ;STORE CHANNEL NUMBER, ALSO + 000440' 200600 005113' 05730 MOVE S,PRJPRG ;GET TEMP. PPN + 000441' 260500 001151' 05740 PUSHJ P,PUTPPN ;SAVE IT ALSO + 000442' 550600 002724' 05750 HRRZ S, PRGBUF ;GET A POINTER TO PROGRAM LIST + 000443' 254000 001137' 05760 JRST PUTFIL ;STORE IT AND EXIT + + 000444' 550040 002524' 05780 STNULL: HRRZ A, FILBUF ;GET ADDRESS OF CURRENT BLOCK + 000445' 402001 000000 05790 SETZM (A) ;CLOSE OUT THE FILE + 000446' 263500 000000 05800 POPJ P, ;EXIT + + FUDGE2 V.011 PAGE 18 + ENTER ON OUTPUT DEVICE DIRECTORY + + 05830 SUBTTL ENTER ON OUTPUT DEVICE DIRECTORY + + 000447' 202600 004572' 05850 SEMIC2: MOVEM S, EBLOCK ;SAVE FILE NAME FOR ENTER + 000450' 202700 004573' 05860 MOVEM EXT, EBLOCK+1 ;SAVE FILE NAME EXTENSION + 000451' 137240 005142' 05870 DPB D, [POINT 4,SEMIC1,12] + 000452' 402000 004574' 05880 SETZM EBLOCK+2 ;CLEAR DATA AND PROTECTION + 000453' 200140 005102' 05890 MOVE T,SDEVCHR ;GET CHARACTERISTICS + 000454' 607140 200000 05900 TLNN T,DSKBIT ;IF NOT A DSK + 000455' 402000 005111' 05910 SETZM LEVEL ;CLEAR LEVEL D FLAG + 000456' 332140 005111' 05920 SKIPE T,LEVEL ;EITHER -2 OR 0 + 000457' 254000 000463' 05930 JRST DEFENT ;SAVE ENTRY BLOCK + 000460' 256000 002463' 05940 XCT SEMIC1 ;DO AN ENTER ON THE OUTPUT DEVICE + 000461' 254000 002076' 05950 JRST ERR14 ;DIRECTORY FULL + 000462' 263500 000000 05960 SEMIC3: POPJ P, ;EXIT + + 000463' 200140 005143' 05980 DEFENT: MOVE T,[XWD EBLOCK,SVENTR] + 000464' 251140 005115' 05990 BLT T,SVENTR+1 ;SAVE EBLOCK + 000465' 201140 000011 06000 MOVEI T,RIBALC ;SET FOR 11 WORD LOOKUP + 000466' 202140 004570' 06010 MOVEM T,EBLOCK-2 ;IN EXTENDED LOOKUP + 000467' 254000 000462' 06020 JRST SEMIC3 ;DEFER ENTRY TIL AFTER LOOKUP + FUDGE2 V.011 PAGE 19 + THE PROGRAM NAME PROCESSOR + + 06040 SUBTTL THE PROGRAM NAME PROCESSOR + 06050 ;THE COMMAP ROUTINE IS ENTERED BY A CALL FROM THE COMMA + 06060 ;ROUTINE WHEN THE CONTEXT OF A COMMA IS THAT OF A PROGRAM NAME + 06070 ;DELIMITER. ITS PURPOSE IS TO SAVE UP THE PROGRAM NAMES IT SEES + 06080 ;IN THE PROGRAM BUFFER PRGBUF. THE PROGRAM NAMES ARE CONVERTED + 06090 ;TO RADIX 50 REPRESENTATION, AND A CALL TO PUTPRG STORES THE + 06100 ;PROGRAM NAME FOR LATER REFERENCE BY THE VARIOUS FUDGE SUBROUTINES + 06110 ;------------------------------------------------------------------ + 06120 ;RADIX50 - SIXBIT CODE CONVERSION TABLE + + 06140 ;CHARACTER SIXBIT RADIX50 + + 06160 ;0-9 20-31 01-12 + 06170 ;A-Z 41-72 13-44 + 06180 ;BLANK 00 00 + 06190 ;PERIOD 16 45 + 06200 ;$ 04 46 + 06210 ;------------------------------------------------------------------- + 06220 ;THE SYMBOL IS ASSUMED TO LEFT-JUSTIFIED UPON ENTERING, AND + 06230 ;IS RIGHT-JUSTIFIED BEFORE CONVERSION TO RADIX 50. + + 06250 ;FLAG SETTINGS: THE PROGRAM BIT PROGB IS SET TO 1, AND THE FILE + 06260 ;BIT FILEB IS SET TO 0. + 000470' 660340 000100 06270 COMMAP: TRO F, PROGB ;SET PROGRAM BIT + 000471' 606340 000001 06280 TRNN F, DESTB ;IS THIS THE OUTPUT DEVICE? + 000472' 254000 002007' 06290 JRST ERROR1 ;YES, SYNTAX ERROR + 000473' 200300 005117' 06300 MOVE E, SYMPTR ;SET UP A BYTE POINTER TO S + 000474' 201100 000006 06310 MOVEI B, 6 ;SET COUNTER TO SIX + 000475' 201200 000000 06320 MOVEI C, 0 + 000476' 322600 000503' 06330 JUMPE S, COMMA1 ;NULL SYMBOL? + 000477' 602600 000077 06340 COMMA3: TRNE S, 77 ;IS SYMBOL RIGHT-JUSTIFIED YET? + 000500' 254000 000503' 06350 JRST COMMA1 ;YES, GO CONVERT TO RADIX 50 + 000501' 241600 777772 06360 ROT S, -6 ;NO, SHIFT IT ONE PLACE RIGHT + 000502' 254000 000477' 06370 JRST COMMA3 ;CHECK AGAIN + 000503' 221200 000050 06380 COMMA1: IMULI C, 50 ;CONVERT TO RADIX50 + 000504' 134040 000006 06390 ILDB A, E ;PICK UP NEXT CHARACTER IN S + 000505' 322040 000516' 06400 JUMPE A, COMMA4 ;A BLANK IS A BLANK IS A BLANK! + 000506' 306040 000004 06410 CAIN A, 4 ;IS IT A <$>? + 000507' 271040 000070 06420 ADDI A, 70 ;YES, COMPENSATE FOR SUBTRACTION + 000510' 306040 000016 06430 CAIN A, 16 ;IS IT A <.>? + 000511' 271040 000055 06440 ADDI A, 55 ;YES, COMPENSATE FOR SUBTRACTION + 000512' 303040 000031 06450 CAILE A, 31 ;TRANSLATE TO RADIX 50 CODE + 000513' 275040 000007 06460 SUBI A, 7 ;LETTER - SUBTRACT 26 + 000514' 275040 000017 06470 SUBI A, 17 ;NUMBER - SUBTRACT 17 + 000515' 270200 000001 06480 ADD C, A ;COMBINE WITH PARTIAL WORD + 000516' 367100 000503' 06490 COMMA4: SOJG B, COMMA1 ;LOOP FOR SIX CHARACTERS + 000517' 200600 000004 06500 MOVE S, C ;PUT SYMBOL BACK IN S + 000520' 254000 001144' 06510 JRST PUTPRG ;STORE IT AND EXIT + + FUDGE2 V.011 PAGE 20 + THE ALTMODE PROCESSOR + + 06540 SUBTTL THE ALTMODE PROCESSOR + 06550 ;THE ALTMODE SUBROUTINE IS CALLED BY A DISPATCH FROM THE + 06560 ;GETCHR ROUTINE WHEN A $ IS SEEN IN THE COMMAND STRING. IT SIGNALS + 06570 ;THE END OF THE COMMAND STRING. A CHECK IS MADE ON THE SYNTAX + 06580 ;OF THE COMMAND STRING, TO SEE IF AN OUTPUT DEVICE WAS SPEC- + 06590 ;IFIED, AND TO SEE IF A COMMAND WAS GIVEN. THE LIST + 06600 ;STRUCTURE FOR THE FILE NAMES AND PROGRAM NAMES IS TERMINATED + 06610 ;BY TWO CALLS TO SEMICP, THE LAST OF WHICH HAS A FILE NAME OF 0. + 06620 ;THE POINTERS AT THE TOP OF THE FILBUF,PRGBUF AND DEVBUF BUFFERS + 06630 ;ARE RESET FOR LATER USER BY THE VARIOUS SUBROUTINES. + + 000521' 606340 004000 06650 ALTMOD: TRNN F,INFOB ; IS THERE A COMMAND? + 000522' 254000 000000' 06660 JRST FUDGE2 ; NO, RESTART + 000523' 260500 002243' 06670 PUSHJ P,CRLF ; ACKNOWLEDGE WITH A CR LF + 000524' 660340 040000 06680 TRO F,CRLFTY ;INDICATE CR,LF TYPED + 000525' 260500 000407' 06690 PUSHJ P, SEMICP ;STORE THIS FILE NAME + 000526' 201600 000000 06700 MOVEI S, 0 ;MAKE A NULL FILE NAME + 000527' 260500 000416' 06710 PUSHJ P, SEMICA ;TERMINATE THE LIST STRUCTURE + 000530' 200040 005124' 06720 MOVE A, FILXWD ;SET UP A BLT POINTER TO FIX + 000531' 251040 002527' 06730 BLT A, FILBUF+3 ;THE MASTER FILE PART,1ST WORD OF + 000532' 402000 002530' 06740 SETZM FILBUF+4 ;FILBUF WAS JUNK,NOW 4TH WORD=0 + 000533' 201040 002531' 06750 MOVEI A, FILBUF+5 ;RESET POINTER TO TRANS. FILES + 000534' 202040 002524' 06760 MOVEM A, FILBUF ;... + 000535' 201040 003125' 06770 MOVEI A,PPNBUF+1 ;RESET PPNBUF + 000536' 202040 003124' 06780 MOVEM A,PPNBUF ;AS IT WAS AT START + 000537' 322640 002007' 06790 JUMPE DIS, ERROR1 ;NO COMMAND SEEN? + 000540' 606340 000001 06800 TRNN F, DESTB ;NO OUTPUT FILE MENTIONED? + 000541' 254000 002007' 06810 JRST ERROR1 ;SYNTAX ERROR + 000542' 332000 005077' 06820 SKIPE MATCH ;LEFT < EQU RIGHT > ?***VJC + 000543' 254000 002007' 06830 JRST ERROR1 ;SYNTAX ERROR ***VJC + 000544' 602340 000040 06840 TRNE F, TTYCB ;CHANGE OUTPUT IF ON TTY + 000545' 660340 000020 06850 TRO F, TTYOB ;... + 06860 ;AND FALL INTO INBUF0 + + FUDGE2 V.011 PAGE 21 + THE ALTMODE PROCESSOR + + + 06900 ;SEE HOW MANY 204(8) WORD BLOCKS FIT IN JOBREL-JOBFF. + 06910 ;DIVIDE THIS NUMBER BY THE NUMBER OF DEVICES + 06920 ;IN DEVBUF TABLE. THIS GIVES THE NO. OF BLOCKS + 06930 ;THAT CAN BE ASSIGNED TO EACH DEVICE, IF ZERO, + 06940 ;NEED MORE CORE. THE REMAINDER OF THE DIVISION + 06950 ;INDICATES EXTRA BLOCKS THAT MAY BE + 06960 ;ALLOCATED TO OUTPUT OR INPUT DEVICES + + 000546' 550040 000000* 06980 INBUF0: HRRZ A, JOBREL ;GET TOP OF JOB AREA + 000547' 274040 000000* 06990 SUB A,JOBFF ;BUFFER AREA AVAILABLE + 000550' 231040 000204 07000 IDIVI A, 204 ;NUMBER OF DECTAPE BLOCKS + 000551' 230040 005103' 07010 IDIV A,NUMDEV ;DIVIDED BY NUMBER OF DEVICES + 000552' 322040 000573' 07020 JUMPE A,INBUFG ;NOT ENOUGH CORE + 000553' 201300 000002 07030 MOVEI E,2 ;START INBUFS ON DEVICE #2 + 000554' 602340 000040 07040 TRNE F, TTYCB ;IS OUTPUT ON TTY? + 000555' 254000 000566' 07050 JRST INBUF1 ;NO, DO AN OUTBUF + 000556' 200200 000001 07060 INBUF2: MOVE C, A ;PICK UP NUMBER OF BLOCKS + 000557' 361100 000561' 07070 SOJL A+1,.+2 ;ANY EXTRA BLOCKS? (REMAINDER) + 000560' 340200 000000 07080 AOJ C, ;YES, USE THEM + 000561' 137300 005144' 07090 DPB E, [POINT 4, INBUF3,12] + 000562' 256000 002464' 07100 XCT INBUF3 ;PERFORM THE INBUF + 000563' 315300 000005 07110 CAMGE E, D ;MORE DEVICES TO TAKE CARE OF? + 000564' 344300 000556' 07120 AOJA E, INBUF2 ;YES, PROCESS THEM + 000565' 254015 000000 07130 JRST (DIS) ;NO, GO TO APPROPRIATE SUBROUTINE + + + 000566' 200200 000001 07160 INBUF1: MOVE C, A ;PICK UP NUMBER OF BLOCKS + 000567' 361100 000571' 07170 SOJL A+1,.+2 ;ANY EXTRA BLOCKS? + 000570' 340200 000000 07180 AOJ C, ;YES, GIVE ONE TO OUTPUT + 000571' 065044 000000 07190 INBUF4: OUTBUF 1,(C) ;OUTBUF ON DEVICE #1 + 000572' 254000 000556' 07200 JRST INBUF2 ;GO DO SOME INBUFS + 07210 ;ASK FOR MORE CORE + + 000573' 550040 000546* 07230 INBUFG: HRRZ A,JOBREL ;GET ANOTHER K OF CORE + 000574' 271040 002000 07240 ADDI A,2000 + 000575' 000040 000000 07250 CORE A, + 000576' 254000 002170' 07260 JRST ERR22 ;NOT AVAILABLE + 000577' 254000 000546' 07270 JRST INBUF0 ;TRY TO SET UP BUFFERS + FUDGE2 V.011 PAGE 22 + FUDGE2 COMMAND PROCESSORS + + 07290 SUBTTL FUDGE2 COMMAND PROCESSORS + + 07310 ;LIST PROCESSOR + 07320 ;THIS ROUTINE PROCESSES THE L COMMAND IN FUDGE2. BINARY + 07330 ;PROGRAMS ARE READ, AND THEIR NAMES OUTPUT, UNTIL AN END + 07340 ;OF FILE IS REACHED. + + 000600' 606340 000020 07360 LIST: TRNN F,TTYOB ;OUTPUT TO TTY? + 000601' 254000 000610' 07370 JRST LIST1 ;MODE MUST BE ASCII + 000602' 062040 000003 07380 GETSTS 1,T ;GET STATUS + 000603' 626140 000014 07390 TRZN T,14 ;BINARY MODE SET? + 000604' 254000 000610' 07400 JRST LIST1 ;NO, MUST BE ASCII + 000605' 060043 000000 07410 SETSTS 1,(T) ;CHANGE MODE TO ASCII + 000606' 205140 000700 07420 MOVSI T,700 ;SET UP NEW BYTE POINTER + 000607' 202140 004606' 07430 MOVEM T,OBUF+4 ;SO WORD COUNT WILL BE CORRECT + 000610' 260500 000772' 07440 LIST1: PUSHJ P, MSTGET ;GET THE MASTER DEVICE + 000611' 254000 002024' 07450 JRST ERROR6 ;NOT ENOUGH ARGUMENTS + 000612' 476000 005116' 07460 SETOM NOWARN ;DON'T GIVE WARNING MESSAGE IF INDEX SEEN + 000613' 260500 001156' 07470 LIST2: PUSHJ P, READ ;READ A PROGRAM NAME + 000614' 254000 002257' 07480 JRST EXIT ;ALL DONE + 000615' 200100 000001 07490 MOVE B, A ;GET THE PROGRAM NAME IN B + 000616' 260500 002220' 07500 PUSHJ P, PTYPO ;TYPE IT OUT + 000617' 260500 002243' 07510 PUSHJ P, CRLF ;TYPE A CRLF + 000620' 254000 000613' 07520 JRST LIST2 ;RETURN FOR MORE PROGRAM NAMES + + + 07550 ;REPLACE PROCESSOR + 07560 ;THIS ROUTINE PROCESSES THE R COMMAND IN FUDGE2. THE TOTAL + 07570 ;COMMAND STRING IS BROKEN INTO A LIST OF PROGRAMS FOR THE MASTER + 07580 ;DEVICE, AND A LIST OF PROGRAMS FOR THE TRANSACTION DEVICES. + 07590 ;THE ROUTINE READS THE MASTER FILE UNTIL ONE OF THE DESIRED + 07600 ;REPLACEMENT PROGRAMS IS REACHED, THEN SWITCHES TO THE + 07610 ;TRANSACTION DEVICE TO FIND THE PROGRAM WHICH IS TO REPLACE THE + 07620 ;PROGRAM IN THE MASTER FILE. AFTER THE REPLACEMENT HAS BEEN + 07630 ;EFFECTED, RESET IS CALLED TO RESTORE THE MASTER DEVICE TO ITS + 07640 ;OLD POSITION. + + 000621' 260500 000772' 07660 REPLCE: PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER DEVICE + 000622' 254000 000656' 07670 JRST IPROC7 ;NO MORE, COPY REST OF MASTER + 000623' 260500 000743' 07680 PUSHJ P, COPYTO ;COPY UP TO THE PROGRAM NAME + 000624' 260500 000777' 07690 PUSHJ P, TRNGET ;GET A PROGRAM FROM TRANSACTION + 000625' 254000 002022' 07700 JRST ERROR5 ;USER DID NOT SUPPLY ENOUGH + 000626' 260500 000751' 07710 PUSHJ P, FINDCP ;FIND THE PROGRAM AND COPY IT + 000627' 306240 000002 07720 CAIN D, 2 ;HAS THE MASTER DEVICE BEEN MOVED? + 000630' 260500 001002' 07730 PUSHJ P, RESET ;YES, RESET IT + 000631' 254000 000621' 07740 JRST REPLCE ;LOOK FOR MORE REPLACEMENTS + FUDGE2 V.011 PAGE 23 + INSERT PROCESSOR + + 07760 SUBTTL INSERT PROCESSOR + 07770 ;THIS SUBROUTINE PROCESSES THE I COMMAND IN FUDGE. IT READS AND + 07780 ;WRITES PROGRAMS FROM THE MASTER FILE UNTIL IT FINDS THE + 07790 ;PROGRAM NAME CURRENTLY POINTED TO, AT WHICH TIME IT STARTS READING + 07800 ;FROM THE TRANSACTION DEVICE, MAKING AN INSERTION AT THE + 07810 ;PROPER PLACE. + + 000632' 260500 000772' 07830 INSERT: PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER FILE + 000633' 254000 000656' 07840 JRST IPROC7 ;NO MORE, COPY REST OF MASTER + 000634' 260500 000743' 07850 PUSHJ P, COPYTO ;COPY UP TO A PROGRAM NAME + 000635' 202200 002517' 07860 MOVEM C, SAVEAC ;SAVE SPECIAL ACCUMULATOR + 000636' 200240 005145' 07870 MOVE D, [XWD ENTBLK,SVEBLK] + 000637' 251244 000506 07880 BLT D, X+1(C) ;MOVE ENTRY BLOCK INTO SAFE PLACE + 000640' 260500 000777' 07890 PUSHJ P, TRNGET ;GET NEXT TRANSACTION FILE + 000641' 254000 002022' 07900 JRST ERROR5 ;NOT ENOUGH TRANSACTION FILES + 000642' 260500 000751' 07910 PUSHJ P, FINDCP ;FIND TRANSACTION FILE AND COPY + 000643' 302240 000002 07920 CAIE D, 2 ;HAS MASTER FILE BEEN JIGGLED? + 000644' 254000 000647' 07930 JRST FIXUP ;NO, RESTORE THE ENTRY BLOCK + 000645' 260500 001002' 07940 PUSHJ P, RESET ;YES, RESET IT + 000646' 254000 000654' 07950 JRST INSER1 ;WRITE OUTGO BACK FOR MORE INSERTIONS + + 000647' 200200 002517' 07970 FIXUP: MOVE C, SAVEAC ;RESTORE SPECIAL AC + 000650' 204240 005145' 07980 MOVS D, [XWD ENTBLK,SVEBLK] + 000651' 251244 000000 07990 BLT D, (C) ;RESTORE ENTRY BLOCK + 000652' 201240 000002 08000 MOVEI D, 2 ;SET UP CHANNEL AC + 000653' 201640 000006 08010 MOVEI DIS, 6 ;SET UP BUFFER HEADER INDEX + 000654' 260500 001305' 08020 INSER1: PUSHJ P, WRITE ;WRITE OUT THE CURRENT FILE + 000655' 254000 000632' 08030 JRST INSERT ;GO BACK FOR MORE INSERTIONS + + 000656' 260500 000737' 08050 IPROC7: PUSHJ P, COPY ;COPY REST OF MASTER FILE + 000657' 254000 002257' 08060 JRST EXIT ;EXIT + FUDGE2 V.011 PAGE 24 + EXTRACT PROCESSOR + + 08080 SUBTTL EXTRACT PROCESSOR + 08090 ;THIS ROUTINE PROCESSES THE E COMMAND IN FUDGE. RATHER THAN + 08100 ;ONE MASTER AND SEVERAL TRANSACTION FILES, ALL FILES ARE + 08110 ;TREATED THE SAME. AFTER A CALL TO EITHER MSTGET OR TRNGET + 08120 ;PROGRAMS ARE SEARCHED FOR AND WRITTEN ON THE OUTPUT DEVICE. + + 000660' 476000 005116' 08140 EXTRCT: SETOM NOWARN ;NO WARNING MESSAGE + 000661' 260500 000772' 08150 PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER DEVICE + 000662' 254000 000670' 08160 JRST EPROC1 ;ALL DONE WITH MASTER DEVICE + 000663' 326540 000666' 08170 JUMPN R,.+3 ;ANY PROGRAMS THIS FILE? **VJC + 000664' 260500 000737' 08180 PUSHJ P,COPY ;NO, COPY ENTIRE FILE ***VJC + 000665' 254000 000670' 08190 JRST EPROC1 ; ***VJC + 000666' 260500 000751' 08200 PUSHJ P, FINDCP ;FIND THE PROGRAM AND COPY IT + 000667' 254000 000660' 08210 JRST EXTRCT ;RETURN FOR MORE MASTER PROGRAMS + 000670' 201040 002531' 08220 EPROC1: MOVEI A, FILBUF+5 ;GET PROGRAM FROM TRANS BUFFER + 000671' 202040 002524' 08230 MOVEM A, FILBUF ;INITIALIZE POINTER FIRST + 000672' 260500 001031' 08240 EPROC2: PUSHJ P, GETDEV ;... + 000673' 254000 002257' 08250 JRST EXIT ;ALL DONE + 000674' 326540 000677' 08260 JUMPN R,.+3 ;ANY PROGRAMS THIS FILE? ***VJC + 000675' 260500 000737' 08270 PUSHJ P,COPY ;NO, COPY ENTIRE FILE ***VJC + 000676' 254000 000672' 08280 JRST EPROC2 ; ***VJC + 000677' 260500 000751' 08290 PUSHJ P, FINDCP ;FIND THE PROGRAM AND COPY IT + 000700' 254000 000672' 08300 JRST EPROC2 ;RETURN FOR MORE TRANS FILES + FUDGE2 V.011 PAGE 25 + DELETE PROCESSOR + + 08320 SUBTTL DELETE PROCESSOR + 08330 ;THIS ROUTINE PROCESSES THE D COMMAND IN FUDGE2. ONLY ONE + 08340 ;INPUT FILE WILL BE READ, AND THE PROGRAM NAMES ASSOCIATED + 08350 ;WITH ITS LIST WILL BE DELETED. + + 000701' 260500 000772' 08370 DELETE: PUSHJ P, MSTGET ;GET A PROGRAM TO BE DELETED + 000702' 254000 000656' 08380 JRST IPROC7 ;FINISH OFF THE MASTER FILE + 000703' 260500 001156' 08390 DPROC1: PUSHJ P, READ ;READ A PROGRAM + 000704' 254000 002026' 08400 JRST ERROR7 ;EOF - CANT FIND IT + 000705' 316540 000001 08410 CAMN R, A ;CORRECT PROGRAM? + 000706' 254000 000701' 08420 JRST DELETE ;YES, GET THE NEXT ONE + 000707' 260500 001305' 08430 PUSHJ P, WRITE ;NO, WRITE THIS ONE OUT + 000710' 254000 000703' 08440 JRST DPROC1 ;TRY AGAIN + + 08460 ;APPEND PROCESSOR + 08470 ;THIS ROUTINE HANDLES THE A COMMAND IN FUDGE2. IT WILL COPY + 08480 ;THE ENTIRE MASTER FILE, THEN START OBTAINING TRANSACTION + 08490 ;DEVICES WITH CALLS TO TRNGET, APPENDING ONE OR MORE + 08500 ;PROGRAMS FROM EACH FILE. + + 000711' 260500 000772' 08520 APPEND: PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER FILE + 000712' 254000 002024' 08530 JRST ERROR6 ;NOT ENOUGH ARGUMENTS + 000713' 260500 000737' 08540 PUSHJ P, COPY ;COPY ENTIRE FILE + 000714' 201040 002531' 08550 MOVEI A, FILBUF+5 ;INITIALIZE POINTER FOR TRANS + 000715' 202040 002524' 08560 MOVEM A, FILBUF ;... + 000716' 260500 001031' 08570 APROC3: PUSHJ P, GETDEV ;GET A PROGRAM NAME + 000717' 254000 002257' 08580 JRST EXIT ;ALL DONE + 000720' 260500 000751' 08590 PUSHJ P, FINDCP ;FIND THE PROGRAM AND COPY IT + 000721' 254000 000716' 08600 JRST APROC3 ;GET NEXT APPENDATION + FUDGE2 V.011 PAGE 26 + DELETE PROCESSOR + + + 08630 ;THIS ROUTINE PROCESSES THE X COMMAND (INDEX LIBRARY) + 08640 ;AND FALLS INTO DELETE LOCAL SYMBOLS CODE. + 08650 ;IF NOT DESIRED SKIP TO DELCPY+1 + + 000722' 200040 003325' 08670 INDEX: MOVE A,DEVBUF+1 ;GET OUTPUT DEVICE + 000723' 000040 000000 08680 DEVCHR A, ;GET ITS CHARACTERISTICS + 000724' 607040 200100 08690 TLNN A,DSKBIT!DTABIT ;ONLY ALLOW DSK AND DTA AS LIBRARY DEVICES + 000725' 254000 002172' 08700 JRST ERR23 ;GIVE ERROR MESSAGE + 000726' 476000 005116' 08710 SETOM NOWARN ;NO WARNING MESSAGE IF /X + 000727' 660340 200000 08720 TRO F,XFLG ;SET INDEX FLAG + 08730 ; TROA F,XFLG ;SET /X BUT NOT /C + + 08750 ;DELETE LOCAL SYMBOLS AND COPY PROCESSOR + 08760 ;THIS ROUTINE PROCESSES THE C COMMAND + 08770 ;ONLY THE MASTER FILE IS HANDLED + + 000730' 660340 000200 08790 DELCPY: TRO F, NOLOCB ;SET FLAG TO DELETE LOCAL SYMBOLS + 000731' 260500 000772' 08800 PUSHJ P, MSTGET ;GET A PROGRAM FROM MASTER FILE + 000732' 254000 002024' 08810 JRST ERROR6 ;NOT ENOUGH ARGUMENTS + 000733' 260500 000737' 08820 PUSHJ P, COPY ;COPY ENTIRE FILE + 000734' 606340 200000 08830 TRNN F,XFLG ;INDEX FLAG ON? + 000735' 254000 002257' 08840 JRST EXIT ;ALL DONE + 000736' 254000 001571' 08850 JRST INDEX3 ;YES DO PASS 2 + FUDGE2 V.011 PAGE 27 + FUDGE2 IO SUBROUTINES + + 08870 SUBTTL FUDGE2 IO SUBROUTINES + + 08890 ;ROUTINES TO COPY FILES, COPY UP TO A GIVEN PROGRAM IN A FILE + 08900 ;AND TO FIND A GIVEN PROGRAM IN A FILE AND COPY IT. + + 08920 ;THE COPY ROUTINE WILL COPY BINARY PROGRAMS FROM WHEREVER THE + 08930 ;INPUT DEVICE HAPPENS TO BE WHEN IT IS CALLED, UP TO THE + 08940 ;END OF FILE. SINCE COPY IS CALLED WITH A PUSHJ, THE END-OF- + 08950 ;FILE EXIT IN INGET WILL EXIT TO THE PLACE THAT CALLED COPY. + + 000737' 260500 001156' 08970 COPY: PUSHJ P, READ ;READ A PROGRAM + 000740' 263500 000000 08980 POPJ P, ;EXIT WHEN ALL THROUGH FILE + 000741' 260500 001305' 08990 PUSHJ P, WRITE ;WRITE OUT THE PROGRAM + 000742' 254000 000737' 09000 JRST COPY ;RETURN FOR MORE PROGRAMS + + 09020 ;THE COPYTO ROUTINE WILL READ AND WRITE PROGRAMS FROM THE + 09030 ;INPUT DEVICE UNTIL THE PROGRAM WHOSE NAME IS IN ACCUMULATOR + 09040 ;R IS FOUND, AT WHICH TIME IT EXITS + + 000743' 260500 001156' 09060 COPYTO: PUSHJ P, READ ;READ A PROGRAM + 000744' 254000 002026' 09070 JRST ERROR7 ;EOF - CANT FIND IT + 000745' 316540 000001 09080 CAMN R, A ;IS IT THE CORRECT PROGRAM? + 000746' 263500 000000 09090 POPJ P, ;YES, EXIT + 000747' 260500 001305' 09100 PUSHJ P, WRITE ;NO, WRITE IT OUT + 000750' 254000 000743' 09110 JRST COPYTO ;READ SOME MORE PROGRAMS + FUDGE2 V.011 PAGE 28 + FUDGE2 IO SUBROUTINES + + + 09140 ;THE FINDCP ROUTINE WILL SEARCH THE INPUT FILE FOR A PROGRAM + 09150 ;WHOSE NAME IS IN ACCUMULATOR R, AND HAVING FOUND IT, WILL + 09160 ;WRITE IT OUT. IF THE CONTENTS OF AC R ARE ZERO, THE ENTIRE + 09170 ;FILE IS COPIED. + + 000751' 322540 000737' 09190 FINDCP: JUMPE R, COPY ;COPY ENTIRE FILE? + 000752' 260500 001156' 09200 FIND1: PUSHJ P, READ ;READ A PROGRAM FROM INPUT FILE + 000753' 254000 000757' 09210 JRST FIND2 ;EOF, TRY REWINDING AND TRYING AGAIN + 000754' 312540 000001 09220 CAME R, A ;IS THIS THE RIGHT ONE? + 000755' 254000 000752' 09230 JRST FIND1 ;NO, TRY AGAIN + 000756' 254000 001305' 09240 JRST WRITE ;YES, WRITE IT OUT AND EXIT + + 000757' 322040 002026' 09260 FIND2: JUMPE A,ERROR7 ;V3 IF EOF OUTPUT ERROR MESSAGE + 000760' 260500 001024' 09270 PUSHJ P, BACKSP ;BACKSPACE THE MAG TAPE + 000761' 550040 002524' 09280 HRRZ A, FILBUF ;PICK UP THE FILE POINTER + 000762' 502041 000003 09290 HLLM A, 3(A) ;CLEAR THE LOOKUP FLAG FOR DECTAPE + 000763' 260500 001031' 09300 PUSHJ P, GETDEV ;SET UP THE PROGRAM AGAIN + 000764' 254000 002013' 09310 JRST ERROR3 ;IMPOSSIBLE ERROR RETURN + 000765' 260500 001156' 09320 FIND3: PUSHJ P, READ ;READ A PROGRAM FROM INPUT FILE + 000766' 254000 002026' 09330 JRST ERROR7 ;EOF - REALLY CANT FIND IT + 000767' 312540 000001 09340 CAME R, A ;IS THIS THE RIGHT ONE? + 000770' 254000 000765' 09350 JRST FIND3 ;NO, TRY AGAIN + 000771' 254000 001305' 09360 JRST WRITE ;YES, WRITE IT OUT AND EXIT + FUDGE2 V.011 PAGE 29 + FUDGE2 IO SUBROUTINES + + 09380 ;ROUTINE MSTGET RETRIEVES A PROGRAM NAME FROM THE MASTER + 09390 ;DEVICE SPECIFICATIONS. IT SAVES THE POINTER IN FILBUF, + 09400 ;CHANGES IT TO POINT TO ITS OWN BLOCK, THEN CALLS GETDEV + + 000772' 200040 002524' 09420 MSTGET: MOVE A, FILBUF ;GET THE POINTER TO CURRENT FILE + 000773' 202040 002515' 09430 MOVEM A, FILSAV ;SAVE THE CURRENT POINTER + 000774' 201040 002525' 09440 MOVEI A, FILBUF+1 ;CHANGE IT TO POINT TO MASTER + 000775' 202040 002524' 09450 MOVEM A, FILBUF ;... + 000776' 254000 001031' 09460 JRST GETDEV ;CALL COMMON ROUTINE + + + 09490 ;ROUTINE TRNGET RETRIEVES A PROGRAM NAME FROM THE TRANSACTION + 09500 ;FILES. IT RESETS THE POINTER THAT MSTGET WIPED OUT, AND CALLS + 09510 ;THE COMMON PROGRAM RETRIEVAL PROGRAM GETDEV. + + 000777' 200040 002515' 09530 TRNGET: MOVE A, FILSAV ;GET SAVED POINTER + 001000' 202040 002524' 09540 MOVEM A, FILBUF ;RESTORE IT TO ITS PLACE + 001001' 254000 001031' 09550 JRST GETDEV ;CALL COMMON ROUTINE + + 09570 ;ROUTINE RESET RESTORES THE STATE OF THE MASTER DEVICE TO + 09580 ;WHAT IT WAS JUST AFTER THE LAST TIME MSTGET WAS CALLED. IT + 09590 ;SETS THE POINTER OF THE MASTER FILE BACK TO THE PREVIOUS + 09600 ;PROGRAM, CALLS MSTGET, AND FINDS THE PROGRAM AGAIN + + 001002' 201040 002531' 09620 RESET: MOVEI A,FILBUF+5 ;START OF TRANSACTION LIST ***DMN + 001003' 502040 002527' 09630 HLLM A, FILBUF+3 ;NOW CLEAR LOOKUP FLAG ON MASTER + 001004' 370000 002527' 09640 SOS FILBUF+3 ;MOVE POINTER BACK ONE PROGRAM + 001005' 336001 000000 09650 RESET2: SKIPN (A) ;ANY TRANSACTION FILES ? ***DMN + 001006' 254000 001012' 09660 JRST RESET3 ;NO-ALL DONE ***DMN + 001007' 502041 000002 09670 HLLM A,2(A) ;CLEAR LOOKUP FLAG ON IT ***DMN + 001010' 271040 000003 09680 ADDI A,3 ;NEXT FILE ***DMN + 001011' 254000 001005' 09690 JRST RESET2 ;GO BACK FOR MORE ***DMN + 001012' 260500 000772' 09700 RESET3: PUSHJ P, MSTGET ;SET UP THE MASTER DEVICE + 001013' 254000 002013' 09710 JRST ERROR3 ;FUDGE ERROR-NO MASTER! + 001014' 260500 001024' 09720 PUSHJ P, BACKSP ;BACKSPACE IN CASE ITS A MAG TAPE + 001015' 200040 002515' 09730 MOVE A, FILSAV ;DIDDLE THE POINTERS, BECAUSE MSTGET + 001016' 202040 002524' 09740 MOVEM A, FILBUF ;WILL BE CALLED AGAIN IMMEDIATELY + 001017' 260500 001156' 09750 RESET1: PUSHJ P, READ ;READ A PROGRAM FROM MASTER FILE + 001020' 254000 002013' 09760 JRST ERROR3 ;FUDGE ERROR-CANT FIND PROGRAM + 001021' 312540 000001 09770 CAME R, A ;IS IT THE RIGHT PROGRAM NAME? + 001022' 254000 001017' 09780 JRST RESET1 ;NO, LOOK AGAIN + 001023' 263500 000000 09790 POPJ P, ;YES, EXIT + 001024' 137240 005146' 09800 BACKSP: DPB D, [POINT 4, BACK0,12] + 001025' 137240 005147' 09810 DPB D, [POINT 4, BACK1, 12] + 001026' 137240 005150' 09820 DPB D, [POINT 4, BACK2,12] + 001027' 137240 005151' 09830 DPB D, [POINT 4,BACK3,12] + 001030' 254000 002465' 09840 JRST BACK0 ;GO TO POSITION MAGTAPE + FUDGE2 V.011 PAGE 30 + COMMON PROGRAM RETRIEVAL PROGRAM GETDEV. + + 09860 SUBTTL COMMON PROGRAM RETRIEVAL PROGRAM GETDEV. + 09870 ;THIS PROGRAM USES VARIOUS POINTERS AND BITS OF INFORMATION + 09880 ;IN FILBUF AND PRG BUF TO RETURN TO THE USER A RADIX 50 + 09890 ;PROGRAM NAME AS SEEN IN THE COMMAND STRING. THE STRUCTURE + 09900 ;OF INFORMATION IN THESE TWO BUFFERS IS AS FOLLOWS: + + 09920 ;FILBUF IS A LIST OF 3-WORD BLOCKS OF DATA ABOUT EACH FILE. + 09930 ;THE FIRST WORD IN FILBUF IS A POINTER WHICH POINTS TO THE + 09940 ;FIRST WORD OF THE BLOCK CURRENTLY BEING WORKED ON BY + 09950 ;THE VARIOUS SUBROUTINES OF FUDGE. WHEN THE COMMAND STRING + 09960 ;IS BEING PROCESSED AND INFORMATION IS BEING STORED IN FILBUF, + 09970 ;THIS POINTER IS IN THE FORM OF AN AOBJN WORD SO THAT A CHECK + 09980 ;CAN BE MADE FOR BUFFER OVERFLOW. THE CONTENTS OF THE 3-WORD + 09990 ;FILE BLOCK IS AS FOLLOWS: + 10000 ; 1ST WORD - SIXBIT FILE NAME, OR ZERO IF THIS IS THE + 10010 ; END OF THE LIST . + 10020 ; 2ND WORD - LEFT HALF CONTAINS A SIXBIT FILE NAME EXTENSION + 10030 ; RIGHT HALF CONTAINS THE CHANNEL NUMBER FOR + 10040 ; THIS FILE. + 10050 ; 3RD WORD - LEFT HALF IS ZERO IS A LOOKUP HAS NOT BEEN + 10060 ; DONE ON THIS FILE NAME, AND -1 IF IT HAS. A + 10070 ; LOOKUP CAN THUS BE FORECED BY ZEROING OUT THE + 10080 ; LEFT HALF OF THE WORD. + 10090 ; RIGHT HALF CONTAINS A POINTER TO THE LAST + 10100 ; PROGRAM NAME IN PRGBUF THAT WAS REFERENCED. THE + 10110 ; RIGHT HALF IS ZERO IF THERE ARE NO PROGRAM + 10120 ; NAMES ASSOCIATED WITH THE FILE. + + 10140 ;PRGBUF IS A LIST OF PROGRAM NAMES USED BY THE FILES IN FILBUF. + 10150 ;THE FIRST WORD OF PRGBUF IS A POINTER WORD WHOSE USE IS THE + 10160 ;SAME AS THE FIRST WORD OF FILBUF.THE ENTRIES IN PRGBUF CONSIST + 10170 ;OF A LIST OF RADIX50 SYMBOLS, ONE TO A WORD, TERMINATED BY + 10180 ;A ZERO WORD. + + 10200 ;FUDGE2 WORKS WITH FILBUF AND PRGBUF IN TWO DISTINCTLY + 10210 ;DIFFERENT WAYS: ONCE WHEN IT IS PROCESSING THE COMMAND STRING + 10220 ;AND STORING THE VARIOUS FILE NAMES AND PROGRAM NAMES, AND + 10230 ;ONCE WHEN IT IS USING THE INFORMATION IN THE FILES TO PROCESS + 10240 ;A FUDGE COMMAND. WHEN A FILE NAME IS SEEN IN THE COMMAND STRING, + 10250 ;THE STATUS OF THE PREVIOUS FILE IS CHECKED. IF THE PREVIOUS + 10260 ;FILE HAD NO PROGRAM NAMES, THEN ITS POINTER WORD (3RD WORD) IS + 10270 ;ZEROED OUT TO INDICATE THE ABSCENCE OF ANY PROGRAMS IN PRGBUF. + 10280 ;OTHERWISE, PROCESSING BEGINS ON THE CURRENT FILE: THE FILE + 10290 ;NAME, FILE NAME EXTENSION, AND CHANNEL NUMBER ARE STORED. THE + 10300 ;CONTENTS OF THE POINTER WORD IN PRGBUF ARE STORED IN THE + 10310 ;POINTER WORD OF THE FILE BLOCK + 10320 ;ROOM IS LEFT IN FILBUF SO THAT WHEN THE CARRIAGE RETURN IS + 10330 ;SEEN, FUDGE2 CAN SHUFFLE THE FIRST FILE BLOCK UP ONE WORD AND + 10340 ;INSERT ANOTHER NULL. THE EFFECT OF THIS KLUDGE IS THAT WE NOW + 10350 ;HAVE TWO SEPARATE LISTS IN FILBUF, A MASTER LIST, AND A + 10360 ;TRANSACTION LIST. + FUDGE2 V.011 PAGE 31 + COMMON PROGRAM RETRIEVAL PROGRAM GETDEV. + + 001031' 200100 002524' 10380 GETDEV: MOVE B, FILBUF ;GET POINTER TO FILE BLOCK + 001032' 336002 000000 10390 SKIPN (B) ;END OF LIST? (ZERO TERMINATES) + 001033' 263500 000000 10400 POPJ P, ;YES, EXIT + 001034' 200040 003124' 10410 MOVE A,PPNBUF ;GET POINTER TO PPN'S + 001035' 200241 000000 10420 MOVE D,(A) ;GET GLOBAL PPN + 001036' 202240 005112' 10430 MOVEM D,DEFPPN ;SAVE AS DEFAULT PPN + 001037' 200241 000001 10440 MOVE D,1(A) ;GET TEMP. PPN + 001040' 202240 005113' 10450 MOVEM D,PRJPRG ;SAVE AS TEMP. PPN + 001041' 271040 000002 10460 ADDI A,2 ;INCREMENT POINTER + 001042' 202040 003124' 10470 MOVEM A,PPNBUF ;SAVE NEW POINTER + 001043' 550242 000001 10480 HRRZ D, 1(B) ;GET DEVICE NUMBER FOR THIS DEVICE + 001044' 331002 000002 10490 SKIPL 2(B) ;HAS A LOOKUUP BEEN DONE? + 001045' 254000 001066' 10500 JRST GET3 ;NO, GO DO LOOKUP + 001046' 201640 000003 10510 GET0: MOVEI DIS, 3 ;SET UP AC DIS + 001047' 220640 000005 10520 IMUL DIS, D ;C(DIS) = 3*C(D) + 001050' 550042 000002 10530 HRRZ A, 2(B) ;GET POINTER TO PROGRAM NAMES + 001051' 322040 001060' 10540 JUMPE A, GET1 ;NULL PROGRAM LIST (NO POINTER)? + 001052' 350042 000002 10550 AOS A, 2(B) ;NO, INCREMENT POINTER BY ONE + 001053' 200541 000000 10560 MOVE R, (A) ;GET A PROGRAM NAME + 001054' 326540 001063' 10570 JUMPN R, CPOPJ1 ;END OF PROGRAM LIST? + 001055' 271100 000003 10580 ADDI B, 3 ;YES, INCREMENT FILBUF POINTER + 001056' 202100 002524' 10590 MOVEM B, FILBUF ;SAVE NEW POINTER + 001057' 254000 001031' 10600 JRST GETDEV ;TRY NEXT FILE BLOCK + + 001060' 201540 000000 10620 GET1: MOVEI R, 0 ;NO PROGRAMS, RETURN ZERO + 001061' 271100 000003 10630 ADDI B, 3 ;MOVE FILBUF POINTER TO NEXT BLOCK + 001062' 202100 002524' 10640 MOVEM B, FILBUF ;SAVE THE POINTER + 001063' 354012 000000 10650 CPOPJ1: AOSA (P) ;GOOD RETURN + 001064' 262512 000000 10660 POPOUT: POP P,(P) ;POP UP ONE LEVEL + 001065' 263500 000000 10670 CPOPJ: POPJ P, ;EXIT + FUDGE2 V.011 PAGE 32 + COMMON PROGRAM RETRIEVAL PROGRAM GETDEV. + + + 001066' 137240 005152' 10700 GET3: DPB D, [POINT 4,GET3A,12] + 001067' 256000 002472' 10710 XCT GET3A ;CLOSE CURRENT FILE BEFORE DOING... + 001070' 200042 000000 10720 MOVE A, (B) ;GET FILE NAME OF NEXT FILE + 001071' 202040 004572' 10730 MOVEM A, EBLOCK ;SET UP FOR LOOKUP + 001072' 510042 000001 10740 HLLZ A, 1(B) ;GET FILE NAME EXTENSION + 001073' 202040 004573' 10750 MOVEM A, EBLOCK+1 ;SAVE IT FOR LOOKUP + 001074' 563042 000002 10760 HRROS A, 2(B) ;SET FLAG IN LEFT HALF OF 3RD WORD + 001075' 137240 005153' 10770 DPB D, [POINT 4,GET4A,12] + 001076' 336040 005113' 10780 SKIPN A,PRJPRG ;GET TEMP. PPN + 001077' 200040 005112' 10790 MOVE A,DEFPPN ;USE PERMANENT IF NO TEMP. + 001100' 202040 004575' 10800 MOVEM A,EBLOCK+3 ;SAVE IT + 001101' 202040 004571' 10810 MOVEM A,EBLOCK-1 ;FOR LEVEL D ALSO + 001102' 200045 003324' 10820 MOVE A,DEVBUF(D) ;GET DEVICE + 001103' 000040 000000 10830 DEVCHR A, ;GET ITS CHARACTERISTICS + 001104' 607040 200000 10840 TLNN A,DSKBIT ;IF NOT A DSK + 001105' 634140 000003 10850 TDZA T,T ;NO EXTENDED LOOKUP + 001106' 200140 005111' 10860 MOVE T,LEVEL ;GET LEVEL + 001107' 256000 002473' 10870 GET4: XCT GET4A ;DO A LOOKUP ON NEW FILE + 001110' 254000 001113' 10880 JRST .+3 ;NOT FOUND, TRY WITH BLANKS EXT. + 001111' 402000 004575' 10890 SETZM EBLOCK+3 ;CLEAR PROJ-PROG + 001112' 254000 001121' 10900 JRST DOENTR ;SUCCESSFUL RETURN FROM LOOKUP + 001113' 554042 000001 10910 HLRZ A, 1(B) ;GET THE FILE NAME EXTENSION + 001114' 302040 624554 10920 CAIE A, 624554 ;IS IT "REL" ? + 001115' 254000 002043' 10930 JRST ERROR8 ;NO, DON'T GIVE HIM ANOTHER CHANCE + 001116' 502042 000001 10940 HLLM A, 1(B) ;YES, TRY LOOKUP WITH 0 EXTENSION + 001117' 402000 004573' 10950 SETZM EBLOCK+1 ;CLEAR EXTENSION IN LOOKUP BLOCK + 001120' 254000 001107' 10960 JRST GET4 ;TRY AGAIN + + 001121' 336000 005111' 10980 DOENTR: SKIPN LEVEL ;IF NOT LEVEL D + 001122' 254000 001134' 10990 JRST DOXSWT ;ENTER DONE ALREADY + 001123' 204140 005143' 11000 MOVS T,[XWD EBLOCK,SVENTR] + 001124' 251140 004573' 11010 BLT T,EBLOCK+1 ;RESTORE EBLOCK + 001125' 205140 777000 11020 MOVSI T,777000 ;MASK FOR PROTECTION + 001126' 406140 004574' 11030 ANDM T,EBLOCK+2 ;CLEAR DATE AND TIME + 001127' 402000 004571' 11040 SETZM EBLOCK-1 ;CLEAR PPN + 001130' 200140 005111' 11050 MOVE T,LEVEL + 001131' 256000 002463' 11060 XCT SEMIC1 ;DO ENTER + 11070 JRST [HRRZ T,EBLOCK+1 ;GET ERROR CODE + 11080 CAIN T,17 ;PARTIAL ALLOCATION ONLY? + 11090 JRST .+1 ;YES, JUST CONTINUE + 001132' 254000 005154' 11100 JRST ERR14] ;ERROR + 001133' 402000 005111' 11110 SETZM LEVEL ;NEVER AGAIN + 001134' 602340 200000 11120 DOXSWT: TRNE F,XFLG ;INDEX FLAG ON? + 001135' 260500 001467' 11130 PUSHJ P,INDEX0 ;YES, SET UP POINTERS AND CORE + 001136' 254000 001046' 11140 JRST GET0 ;AND CONTINUE + FUDGE2 V.011 PAGE 33 + COMMON PROGRAM RETRIEVAL PROGRAM GETDEV. + + + 11170 ;SHORT ROUTINES TO STORE WORDS IN THE FILE BUFFER AND PROGRAM + 11180 ;BUFFER + 11190 ;ROUTINE PUTFIL STORES THE CONTENTS OF ACCUMULATOR S IN THE + 11200 ;NEXT FREE LOCATION IN FILBUF. IT CHECKS FOR OVERFLOW. + + 001137' 200040 002524' 11220 PUTFIL: MOVE A, FILBUF ;GET POINTER WORD FOR FILBUF + 001140' 252040 002011' 11230 AOBJP A, ERROR2 ;INCREMENT, CHECK FOR OVERFLOW + 001141' 202040 002524' 11240 MOVEM A, FILBUF ;SAVE NEW POINTER + 001142' 202601 000000 11250 MOVEM S, (A) ;SAVE FILE NAME ENTRY + 001143' 263500 000000 11260 POPJ P, ;EXIT + + + 11290 ;ROUTINE PUTPRG STORES THE CONENTS OF ACCUMULATOR S IN THE + 11300 ;NEXT FREE LOCATION IN PRGBUF. IT CHECKS FOR OVERFLOW. + + 001144' 200040 002724' 11320 PUTPRG: MOVE A, PRGBUF ;GET POINTER WORD FOR BUFFER + 001145' 252040 002011' 11330 AOBJP A, ERROR2 ;INCREMENT, CHECK FOR OVERFLOW + 001146' 202040 002724' 11340 MOVEM A, PRGBUF ;SAVE NEW POINTER WORD + 001147' 202601 000000 11350 MOVEM S, (A) ;SAVE PROGRAM NAME + 001150' 263500 000000 11360 POPJ P, ;EXIT + + 11380 ;ROUTINE PUTPPN STORE THE TWO PPPN NUMBER IN PPNBUF + + 001151' 200040 003124' 11400 PUTPPN: MOVE A,PPNBUF ;GET POINTER WORD FOR BUFFER + 001152' 252040 002011' 11410 AOBJP A,ERROR2 + 001153' 202040 003124' 11420 MOVEM A,PPNBUF ;SAVE NEW POINTER WORD + 001154' 202601 000000 11430 MOVEM S,(A) ;SAVE PPN + 001155' 263500 000000 11440 POPJ P, ;EXIT + FUDGE2 V.011 PAGE 34 + ROUTINE TO INPUT ONE PROGRAM AT A TIME + + 11460 SUBTTL ROUTINE TO INPUT ONE PROGRAM AT A TIME + 11470 ;THE FIRST WORD THAT THE PROGRAM READS WILL BE A BLOCK HEADER. + 11480 ;BLOCKS ARE READ UNTIL AN ENTRY BLOCK IS FOUND, AND THE ENTIRE + 11490 ;ENTRY BLOCK IS STORED IN AN INTERNAL BUFFER,SIZE PERMITTING. + 11500 ;FOLLOWING THAT, THE NAME BLOCK IS READ, AND THE NAME OF THE + 11510 ;PROGRAM IS RETURNED IN ACCUMULATOR A. PROVISION IS MADE FOR + 11520 ;BLOCKS OF WORD COUNT ZERO. THE SECTION OF CODING AROUND READ2 + 11530 ;DELIBERATELY OMITS THIS CHECK IN ORDER TO READ IN THE NEXT + 11540 ;BLOCK HEADER WITH A MINIMUM OF INSTRUCTIONS. ORDINARILY, EACH + 11550 ;PROGRAM WILL BEGIN WITH AN ENTRY BLOCK, BUT THE ROUTINE WILL + 11560 ;ALSO ALLOW THE PROGRAM TO BEGIN WITH A NAME BLOCK IF NO + 11570 ;ENTRY BLOCK IS SEEN. + + 001156' 201200 003334' 11590 READ: MOVEI C, ENTBLK ;SET UP POINTER TO BUFFER + 001157' 260500 001647' 11600 READ6: JSR GETIN ;GET A BLOCK HEADER + 001160' 554100 000001 11610 HLRZ B, A ;GET THE BLOCK CODE + 001161' 306100 000014 11620 CAIN B,14 ;IS IT AN INDEX BLOCK? + 001162' 254000 001276' 11630 JRST READX ;YES, GET RID OF IT + 001163' 306100 000004 11640 CAIN B, 4 ;IS IT AN ENTRY BLOCK? + 001164' 254000 001206' 11650 JRST READ1 ;YES, PROCESS IT + 001165' 306100 000006 11660 CAIN B, 6 ;IS IT A NAME BLOCK? + 001166' 254000 001266' 11670 JRST READ7 ;YES, PROCESS IT + 001167' 306100 000400 11680 CAIN B,400 ;F4 SIGNAL WORD? + 001170' 254000 001270' 11690 JRST F4I ;YES, PROCESS F4 BLOCKS + 001171' 260500 001337' 11700 PUSHJ P, COUNT ;CALCULATE SIZE OF BLOCK + 001172' 322100 001157' 11710 JUMPE B, READ6 ;WORD COUNT OF ZERO? + 001173' 311115 004612' 11720 READ6A: CAML B, IBUF+2(DIS) ;DOES BLOCK OVERLAP IO BUFFERS? + 001174' 254000 001202' 11730 JRST READ6B ;ADJUST B AND GET ANOTHER BUFFER + 001175' 200055 004612' 11740 MOVE A, IBUF+2(DIS) ;NO, DIDDLE BUFFER HEADER COUNT + 001176' 274040 000002 11750 SUB A, B ;ELIMINATE BLOCK OF LENGTH C(B) + 001177' 202055 004612' 11760 MOVEM A, IBUF+2(DIS) ;PUT NEW WORD COUNT BACK + 001200' 272115 004611' 11770 ADDM B, IBUF+1(DIS) ;MOVE BYTE POINTER PAST BLOCK + 001201' 254000 001157' 11780 JRST READ6 ;GET NEXT BLOCK + 001202' 274115 004612' 11790 READ6B: SUB B, IBUF+2(DIS) ;ACCOUNT FOR REST OF THIS BUFFER + 001203' 402015 004612' 11800 SETZM IBUF+2(DIS) ;FORCE ANOTHER INBUF + 001204' 260500 001647' 11810 JSR GETIN ;GET ANOTHER BUFFER OF INPUT + 001205' 254000 001173' 11820 JRST READ6A ;CHECK AGAIN + + + 11850 ; THIS CODE MODIFIED 3-21-71 BY DCS (STANFORD) TO HANDLE + 11860 ; MORE THAN ONE ENTRY BLOCK (FAIL AND SAIL BOTH ISSUE + 11870 ; MULTIPLE ENTRY BLOCKS). + + 000452 11890 SIZZ==SIZE-<<SIZE+21>/22>-4 ;ACCOUNT FOR HDR BLKS, RELOC WRDS, PROGNAME + 001206' 402000 003334' 11900 READ1: SETZM ENTBLK ;SAME AS (C) AT PRESENT + 001207' 505200 777777 11910 HRLI C,-1 ;AOBJN WILL OVERFLOW FIRST TIME + + 11930 ; BACK HERE FOR EACH NEW ENTRY BLOCK + + 001210' 211101 400000 11950 READ2: MOVNI B,400000(A) ;-1 IN LH, 377777-CT IN RH + 001211' 553000 000001 11960 HRRZS A + 001212' 270040 003334' 11970 ADD A,ENTBLK ;NEW COUNT IF IT FITS + 001213' 303040 000452 11980 CAILE A,SIZZ ;TOO MUCH NOW? + FUDGE2 V.011 PAGE 34-1 + ROUTINE TO INPUT ONE PROGRAM AT A TIME + + 001214' 664340 002000 11990 TROA F,ERRB ; YES, MARK ENTRY BLOCK TOO BIG + 001215' 202040 003334' 12000 MOVEM A,ENTBLK ;NO, UPDATE USED COUNT + 12010 ; HERE FOR EACH NEW WORD + 001216' 606100 377777 12020 READ23: TRNN B,377777 ;END THIS LOADER BLOCK? + 001217' 254000 001233' 12030 JRST READ55 ; YES, CHECK NEXT + 001220' 253100 001223' 12040 AOBJN B,NXTWRD ;TIME FOR SOME RELOC BITS? + 001221' 260500 001647' 12050 JSR GETIN ;YES, GET THEM AND TOSS THEM + 001222' 505100 777756 12060 HRLI B,-22 ;AND RESET COUNT + 001223' 260500 001647' 12070 NXTWRD: JSR GETIN ;GET A DATA WORD + 12080 ; (ROUTINE COURTESY OF DEC LOADER) + + 001224' 253200 001230' 12100 AOBJN C,READ22 ;NEED TO INSERT RELOC WORD? + 001225' 606340 002000 12110 TRNN F,ERRB ;YES, UNLESS NOT INSERTING + 001226' 402004 000000 12120 SETZM (C) ; ALL ENTRY RELOCS ARE 0 + 001227' 270200 005160' 12130 ADD C,[XWD -22,1] ;LH 0 BEFORE ADD, SET UP NEXT + 001230' 606340 002000 12140 READ22: TRNN F,ERRB ;ARE WE INSERTING? + 001231' 202044 000000 12150 MOVEM A,(C) ; YES, PUT IT AWAY + 001232' 254000 001216' 12160 JRST READ23 ;LOOP + + + 001233' 260500 001647' 12190 READ55: JSR GETIN ;GET NEXT HEADER WORD + 001234' 554100 000001 12200 HLRZ B,A ;TYPE + 001235' 306100 000004 12210 CAIN B,4 ;ANOTHER ENTRY? + 001236' 254000 001210' 12220 JRST READ2 ; YES, STORE IT + + 12240 ; PROGRAM NAME -- FINISH ENTRY BLOCK OUT + 001237' 201100 000004 12250 MOVEI B,4 ;ENTRY BLOCK TYPE + 001240' 506100 003334' 12260 HRLM B,ENTBLK ;NOW CORRECT TYPE,,COUNT + 001241' 505200 000000 12270 HRLI C,0 ;CLEAR LH COUNT + 001242' 344200 001266' 12280 AOJA C,READ7 ;STORE NAME BLOCK HEADER AND CONTINUE + 12290 ; END OF DCS PATCH 3-21-71 + FUDGE2 V.011 PAGE 35 + ROUTINE TO INPUT ONE PROGRAM AT A TIME + + 001243' 260500 001337' 12310 READ5: PUSHJ P, COUNT ;CALCULATE SIZE OF BLOCK + 001244' 322100 001261' 12320 JUMPE B, READ9 ;WORD COUNT OF ZERO? + 001245' 260500 001647' 12330 READ3: JSR GETIN ;GET A WORD + 001246' 202044 000000 12340 MOVEM A, (C) ;STORE IT + 001247' 340200 000000 12350 AOJ C, ;INCREMENT BUFFER POINTER + 001250' 367100 001245' 12360 SOJG B, READ3 ;DONE READING YET? + 001251' 306440 000002 12370 CAIN G+1, 2 ;IS THERE A COMMON WORD? + 001252' 200044 777776 12380 MOVE A, -2(C) ;GET PROGRAM NAME IN A + 001253' 322040 001261' 12390 JUMPE A, READ9 ;IGNORE WORD OF ZERO + 001254' 200100 000001 12400 MOVE B, A ;GET RID OF EXTRA BLANKS + 001255' 231100 000050 12410 READ8: IDIVI B, 50 ;TRY DIVIDING IT BY 50 + 001256' 326140 001261' 12420 JUMPN B+1, READ9 ;FILTERED OUT ALL THE BLANKS? + 001257' 200040 000002 12430 MOVE A, B ;NO, STORE SYMBOL AGAIN + 001260' 254000 001255' 12440 JRST READ8 ;TRY ANOTHER DIVISION + + 001261' 602340 002000 12460 READ9: TRNE F, ERRB ;ERROR CONDITION? + 001262' 254000 002064' 12470 JRST ERR10 ;YES + 001263' 606340 200000 12480 TRNN F,XFLG ;INDEX FLAG ON? + 001264' 254000 001063' 12490 JRST CPOPJ1 ;NO, SKIP EXIT + 001265' 254000 001514' 12500 JRST INDEX1 ;YES SAVE ENTRIES + + 001266' 202044 000000 12520 READ7: MOVEM A, (C) ;STORE NAME BLOCK HEADER + 001267' 344200 001243' 12530 AOJA C, READ5 ;GO READ NAME BLOCK + + 001270' 660340 020000 12550 F4I: TRO F,F4IB ;DONT OUTPUT DURING F4 SEARCH + 001271' 261500 000004 12560 PUSH P,C ;SAVE ENTRY BLOCK + 001272' 260500 001346' 12570 PUSHJ P,F4 ;PASS F4 BLOCKS + 001273' 262500 000004 12580 POP P,C ;RESTORE ENTRY BLOCK + 001274' 620340 020000 12590 TRZ F,F4IB ;TURN OFF IGNORE BIT + 001275' 254000 001157' 12600 JRST READ6 ;GO PROCESS NEXT PROGRAM + + 001276' 336000 005116' 12620 READX: SKIPN NOWARN ;DO WE WANT A MESSAGE? + 12630 TTCALL 3,[ASCIZ /WARNING NO INDEX ON OUTPUT FILE - CONTINUING + 001277' 051140 005161' 12640 /] + 001300' 476000 005116' 12650 SETOM NOWARN ;ONCE IS ENOUGH + 001301' 402015 004612' 12660 SETZM IBUF+2(DIS) ;FORCE ANOTHER INBUF + 001302' 260500 001647' 12670 JSR GETIN ;INPUT THE NEXT BLOCK + 001303' 370015 004612' 12680 SOS IBUF+2(DIS) ;WORD COUNT OUT BY ONE + 001304' 254000 001160' 12690 JRST READ6+1 ;AND RETURN TO CODE + FUDGE2 V.011 PAGE 36 + ROUTINE TO OUTPUT ONE PROGRAM AT A TIME + + 12710 SUBTTL ROUTINE TO OUTPUT ONE PROGRAM AT A TIME + 12720 ;THE WRITE SUBROUTINE WILL OUTPUT AN ENTIRE BINARY RE- + 12730 ;LOCATABLE PROGRAM AS WRITTEN BY MACRO6. IT ASSUMES THAT THE + 12740 ;ENTRY BLOCK AND NAME BLOCK FOR THE PROGRAM ARE IN THE + 12750 ;INTERNAL BUFFER ENTBLK, AND OUTPUTS THESE BEFORE PICKING UP + 12760 ;MORE BLOCKS FROM THE CURRENT INPUT DEVICE. BLOCKS ARE READ + 12770 ;AND WRITTEN UNTIL THE END BLOCK HAS BEEN PROCESSED. PROVISION I + 12780 ;IS MADE FOR BLOCKS WITH A WORD COUNT OF ZERO. + + 001305' 275200 003334' 12800 WRITE: SUBI C, ENTBLK ;GET COUNT OF ENTRY BLOCK + 001306' 322200 001314' 12810 JUMPE C, WRITE3 ;NOTHING TO OUTPUT? + 001307' 201100 003334' 12820 MOVEI B, ENTBLK ;GET A POINTER IN B + 001310' 200042 000000 12830 WRITE2: MOVE A, (B) ;GET A BINARY WORD + 001311' 260500 001656' 12840 PUSHJ P, OUT ;OUTPUT IT + 001312' 340100 000000 12850 AOJ B, ;INCREMENT POINTER + 001313' 367200 001310' 12860 SOJG C, WRITE2 ;KEEP GOING UNTIL BUFFER EMPTY + 001314' 260500 001647' 12870 WRITE3: JSR GETIN ;GET A BLOCK HEADER + 001315' 554100 000001 12880 HLRZ B,A ;GET THE BLOCK TYPE CODE ***VJC + 001316' 606340 000200 12890 TRNN F,NOLOCB ;DELETE LOCAL SYMBOLS? ***VJC + 001317' 254000 001322' 12900 JRST .+3 ;NO + 001320' 306100 000002 12910 CAIN B,2 ;IS IT A SYMBOL BLOCK? ***VJC + 001321' 254000 001410' 12920 JRST DELLOC ;GO DELETE LOCAL SYMBOL ***VJC + 12930 ;COME BACK TO WRITE3 ***VJC + 12940 ;UNLESS EXIT ON END-OF-FILE ***VJC + + 001322' 260500 001656' 12960 PUSHJ P, OUT ;OUTPUT IT + 001323' 306100 000400 12970 CAIN B, 400 ;IS THIS A FORTRAN IV SIGNAL WORD? + 001324' 254000 001346' 12980 JRST F4 ;YES, PROCESS F4 OUTPUT + 001325' 202100 002520' 12990 MOVEM B, SAVEBT ;SAVE THE BLOCK TYPE + 001326' 260500 001337' 13000 PUSHJ P, COUNT ;NO, GET SIZE OF BLOCK + 001327' 322100 001314' 13010 JUMPE B, WRITE3 ;WORD COUNT OF ZERO? + 001330' 260500 001647' 13020 WRITE4: JSR GETIN ;OUTPUT THE BLOCK + 001331' 260500 001656' 13030 PUSHJ P, OUT ;... + 001332' 367100 001330' 13040 SOJG B, WRITE4 ;LOOP BACK UNTIL DONE + 001333' 200040 002520' 13050 MOVE A, SAVEBT ;RETRIEVE THE BLOCK TYPE + 001334' 302040 000005 13060 CAIE A, 5 ;WAS IT AN END BLOCK? + 001335' 254000 001314' 13070 JRST WRITE3 ;NO, RETURN FOR MORE BLOCKS + 001336' 263500 000000 13080 POPJ P, ;YES, EXIT + FUDGE2 V.011 PAGE 37 + ROUTINE TO OUTPUT ONE PROGRAM AT A TIME + + + 13110 ;THE COUNT SUBROUTINE CALCULATES THE LENGTH OF THE VARIOUS + 13120 ;BLOCKS READ BY THE WRITE AND READ SUBROUTINES. THE POSITIVE + 13130 ;WORD COUNT IS FOUND IN THE RIGHT HALF OF THE ENTRY BLOCK + 13140 ;HEADER, WHICH IS ASSUMED TO BE IN AC A UPON ENTERING. THE + 13150 ;LENGTH WILL BE RETURNED IN AC B, AND INCLUDES THE DATA WORDS + 13160 ;(SYMBOLS, ENTRY WORDS, ETC.) AND THE SUBHEADERS, OF WHICH + 13170 ;THERE IS ONE FOR EVERY 18 (DECIMIAL) DATA WORDS. THE BLOCK + 13180 ;HEADER IS DESTROYED, AND IS NOT INCLUDED IN THE LENGTH. + + 001337' 550400 000001 13200 COUNT: HRRZ G, A ;GET NUMBER OF WORDS + 001340' 231400 000022 13210 IDIVI G, 22 ;1SUBHEADER/18 DATA WORDS + 001341' 271401 000000 13220 ADDI G,(A) ;ADD INTO WORD COUNT + 001342' 322440 001344' 13230 JUMPE G+1,.+2 ;1 EXTRA SUBHEADER FOR + 001343' 340400 000000 13240 AOJ G, ;STRAY ONES + 001344' 200100 000010 13250 MOVE B, G ;RESULTS IN AC B + 001345' 263500 000000 13260 POPJ P, ;EXIT + FUDGE2 V.011 PAGE 38 + ROUTINE TO HANDLE FORTRAN OUTPUT + + 13280 SUBTTL ROUTINE TO HANDLE FORTRAN OUTPUT + + 13300 ;SUBSECTION OF THE WRITE ROUTINE TO HANDLE OUTPUT FROM THE + 13310 ;FORTRAN IV COMPILER. THE MAIN OBJECT OF THE ROUTINE IS TO + 13320 ;LOOK FOR THE END BLOCK. OTHER BLOCKS ARE MERELY COPIED OUT. + 13330 ;THE BLOCK TYPES ARE GIVEN BY THE FOLLOWING TABLE + 13340 ;---------------------------------------------------------------- + 13350 ;BITS 0-17 BITS18-23 BITS 24-35 TYPE + + 13370 ;777777 70 N DATA STATEMENT + 13380 ;777777 50 N ABSOLUTE MACHINE CODE + 13390 ;777777 0 - PROGRAMMER LABELS + 13400 ;777777 31 - MADE LABELS + 13410 ;777777 60 - ENTRY LABELS + 13420 ;777777 777776 END BLOCK + 13430 ;----------------------------------------------------------------- + 001346' 260500 001647' 13440 F4: JSR GETIN ;GET A FORTRAN IV BLOCK HEADER + 001347' 260500 001405' 13450 PUSHJ P, OUT4 ;OUTPUT IT + 001350' 641040 777777 13460 TLC A, -1 ;TURN ONES TO ZEROES IN LEFT HALF + 001351' 603040 777777 13470 TLNE A, -1 ;NO, WAS LEFT HALF ALL ONES? + 001352' 254000 001346' 13480 JRST F4 ;NO, IT WAS CALCULATED MACHINE CODE + 001353' 306040 777776 13490 CAIN A, -2 ;YES, IS RIGHT HALF = 777776? + 001354' 254000 001372' 13500 JRST ENDST ;YES, PROCESS F4 END BLOCK + 001355' 135100 005173' 13510 LDB B, [POINT 6,A,23];GET CODE BITS FROM BITS 18-23 + 001356' 620040 770000 13520 TRZ A, 770000 ;THEN WIPE THEM OUT + 001357' 302100 000070 13530 CAIE B, 70 ;IS IT A DATA STATEMENT? + 001360' 306100 000050 13540 CAIN B, 50 ;IS IT ABSOLUTE MACHINE CODE? + 001361' 254000 001365' 13550 JRST MACHCD ;YES, TREAT IT LIKE DATA STATEMENTS + 001362' 260500 001647' 13560 JSR GETIN ;NO, ITS A LABEL OF SOME SORT + 001363' 260500 001405' 13570 PUSHJ P, OUT4 ;WHICH CONSISTS OF ONE WORD + 001364' 254000 001346' 13580 JRST F4 ;LOOK FOR NEXT BLOCK HEADER + + 001365' 550100 000001 13600 MACHCD: HRRZ B, A ;GET THE WORD COUNT IN AC B + 001366' 260500 001647' 13610 JSR GETIN ;INPUT A WORD + 001367' 260500 001405' 13620 PUSHJ P, OUT4 ;OUTPUT IT + 001370' 367100 001365' 13630 SOJG B, MACHCD ;LOOP BACK FOR REST OF THE BLOCK + 001371' 254000 001346' 13640 JRST F4 ;GO LOOK FOR NEXT BLOCK + + 001372' 201100 000001 13660 ENDST: MOVEI B,1 ;TWO WORDS, FIVE TABLES, ONE WORD, ONE TABLE + 001373' 201200 000006 13670 MOVEI C,6 ;TO GO + 001374' 260500 001647' 13680 F4LUP1: JSR GETIN ;GET TABLE MEMBER + 001375' 260500 001405' 13690 F4LUP3: PUSHJ P,OUT4 ;OUTPUT WORD + 001376' 365100 001374' 13700 SOJGE B,F4LUP1 ;LOOP WITHIN A TABLE + 001377' 321200 001065' 13710 JUMPL C,CPOPJ ;LAST TABLE - RETURN + 001400' 367200 001402' 13720 SOJG C,F4LUP2 ;FIRST TWO WORDS AND FIVE TABLES + 001401' 322200 001374' 13730 JUMPE C,F4LUP1 ;COMMON LENGTH WORD + 001402' 260500 001647' 13740 F4LUP2: JSR GETIN ;READ HEADER WORD + 001403' 200100 000001 13750 MOVE B,A ;COUNT TO COUNTER + 001404' 254000 001375' 13760 JRST F4LUP3 ;STASH + + 001405' 606340 020000 13780 OUT4: TRNN F,F4IB ;DONT DO OUTPUT? + 001406' 260500 001656' 13790 PUSHJ P,OUT ;YES, DO OUTPUT + 001407' 263500 000000 13800 POPJ P, ;RETURN + FUDGE2 V.011 PAGE 39 + ROUTINE TO DELETE LOCAL SYMBOLS FROM SYMBOL BLOCK + + 13820 SUBTTL ROUTINE TO DELETE LOCAL SYMBOLS FROM SYMBOL BLOCK + + 13840 ;ALL LOCAL AND SUPPRESSED LOCAL SYMBOLS ARE DELETED + 13850 ;EXTERNALS,INTERNAL AND SUPPRESSED INTERNALS ARE NOT DELETED. + + 001410' 552040 005047' 13870 DELLOC: HRRZM A,BSZ ;SIZE OF SYMBOL BBLE + 001411' 260500 001461' 13880 PUSHJ P,DELINI ;CLEAR NEW HEADER & RELOC WORDS + 13890 ;SET PB = SYMBLK+2 + 001412' 260500 001647' 13900 DELGTR: JSR GETIN ;GET RELOCATION WORD + 001413' 202040 005052' 13910 MOVEM A,RELOCS ;SAVE IT + 001414' 200040 005122' 13920 MOVE A,PTGR ;INIT POINTER TO GET + 001415' 202040 005050' 13930 MOVEM A,PTGRS ;RELOCATION WORD + + 001416' 260500 001647' 13950 DELGT1: JSR GETIN ;GET FIRST WORD OF PAIR + 001417' 134000 005050' 13960 ILDB 0,PTGRS ;GET RELOCATION BITS & HOLD + 001420' 603040 100000 13970 TLNE A,(1B2) ;IS SYMBOL LOCAL? + 001421' 254000 001435' 13980 JRST DELDEC ;YES, DON'T COPY + 001422' 202043 000000 13990 MOVEM A,0(T) ;STORE FIRST WORD + 001423' 260500 001647' 14000 JSR GETIN ;GET SECOND WORD INTO A + 001424' 202043 000001 14010 MOVEM A,1(T) ;STORE SECOND WORD + 001425' 136000 005051' 14020 IDPB 0,PTSRS ;STORE RELOCATION BITS + 001426' 201040 000002 14030 MOVEI A,2 ;COUNT WORDS STORED + 001427' 272040 005053' 14040 ADDM A,SYMBLK ;I.E. UPDATE WORD COUNT + 001430' 271140 000002 14050 ADDI T,2 ;UPDATE NEXT LOCATION TO STORE + 001431' 200040 005051' 14060 MOVE A,PTSRS ;HAVE WE STORED 9 + 001432' 607040 770000 14070 TLNN A,770000 ;SYMBOL PAIRS? + 001433' 260500 001447' 14080 PUSHJ P,DELWRT ;YES, WRITE IT OUT + 001434' 254000 001436' 14090 JRST DELDEC+1 ;ALREADY HAVE 2ND WORD + + 001435' 260500 001647' 14110 DELDEC: JSR GETIN ;GET SECOND WORD INTO A + 001436' 370000 005047' 14120 SOS BSZ ;HAVE WE EXHAUSTED + 001437' 377000 005047' 14130 SOSG BSZ ;ALL WORDS IN BLOCK? + 001440' 254000 001445' 14140 JRST DELFIN ;YES, NONE LEFT + 001441' 200040 005050' 14150 MOVE A,PTGRS ;HAVE WE GOT 9 + 001442' 603040 770000 14160 TLNE A,770000 ;SYMBOL PAIRS YET? + 001443' 254000 001416' 14170 JRST DELGT1 ;NO, GET NEXT PAIR + 001444' 254000 001412' 14180 JRST DELGTR ;YES, GET RELOCATION + + 001445' 260500 001447' 14200 DELFIN: PUSHJ P,DELWRT ;ORIGINAL BLOCK EMPTY NOW + 001446' 254000 001314' 14210 JRST WRITE3 ;GET NEXT BLOCK + + + FUDGE2 V.011 PAGE 40 + ROUTINE TO WRITE OUT NEW SYMBOL BBLE + + 14250 SUBTTL ROUTINE TO WRITE OUT NEW SYMBOL BBLE + + 001447' 336040 005053' 14270 DELWRT: SKIPN A,SYMBLK ;ANYTHING TO WRITE + 001450' 254000 001461' 14280 JRST DELINI ;NO, CAN LEAVE + 001451' 550000 000001 14290 HRRZ 0,A ;GET WORD COUNT + 001452' 505040 000002 14300 HRLI A,2 ;PUT IN BLOCK TYPE + 001453' 260500 001656' 14310 PUSHJ P,OUT ;WRITE BLOCK HEADER + 001454' 201100 005053' 14320 MOVEI B,SYMBLK ;LOC OF FIRST WORD + 001455' 271100 000001 14330 DELWRU: ADDI B,1 ;LOC OF RELOC WORD + 001456' 200042 000000 14340 MOVE A,0(B) ;GET WORD + 001457' 260500 001656' 14350 PUSHJ P,OUT ;OUTPUT + 001460' 365000 001455' 14360 SOJGE 0,DELWRU ;ALL THROUGH? + + 14380 ;ROUTINE TO INITIALIZE NEW SYMBOL BBLE + 001461' 402000 005053' 14390 DELINI: SETZM SYMBLK ;YES, CLEAR COUNT + 001462' 402000 005054' 14400 SETZM SYMBLK+1 ;CLEAR RELOCATION + 001463' 200040 005121' 14410 MOVE A,PTSR ;INIT POINTER + 001464' 202040 005051' 14420 MOVEM A,PTSRS ;FOR STORING NEW RELOC + 001465' 201140 005055' 14430 MOVEI T,SYMBLK+2 ;SET TO STORE FIRST GLOBAL + 001466' 263500 000000 14440 POPJ P, + FUDGE2 V.011 PAGE 41 + ROUTINES TO INDEX THE LIBRARY + + 14460 SUBTTL ROUTINES TO INDEX THE LIBRARY + + 14480 COMMENT * THE INDEXING OF LIBRARY FILES IS DONE IN TWO PASSES. + 14490 ON PASS 1 THE LIBRARY FILE IS COPIED AND ALL ENTRIES STORED + 14500 IN CORE ALLONG WITH A POINTER TO THE BEGINING OF THE BLOCK. + 14510 A DUMMY INDEX BLOCK (TYPE 14) IS OUTPUT AT THE BEGINING OF THE + 14520 NEW LIBRARY AND ONE IS OUTPUT WHENEVER THE CURRENT INDEX BLOCK + 14530 FILLS A BUFFER. + 14540 ON PASS 2 THE DUMMY INDEX BLOCKS ARE REPLACED BY REAL ONES. + 14550 FUDGE2 USED USETO'S AND DUMP MODE. + 14560 IF THE OUTPUT DEVICE IS DTA FUDGE2 USES UGETF UUO'S TO FIND + 14570 THE NEXT BLOCK AND NON-STANDARD DUMP MODE TO WRITE THE INDICES. + 14580 DESIGN AND CODING BY D.M.NIXON JULY 1970 + 14590 * + + 001467' 200040 001646' 14610 INDEX0: MOVE A,INDEXH ;BLOCK HEADER + 001470' 350000 002516' 14620 AOS BLKCNT ;START ON BLOCK #1 + 001471' 260500 001660' 14630 PUSHJ P,OUT1 ;OUTPUT IT + 001472' 067040 000000 14640 OUTPUT 1, ;FORCE OUTPUT + 001473' 200140 004607' 14650 MOVE T,OBUF+5 ;BUFFER SIZE + 001474' 202140 005104' 14660 MOVEM T,XCOUNT + 001475' 202140 005106' 14670 MOVEM T,BUFSIZ ;SAVE IT AWAY + 001476' 350140 000573* 14680 AOS T,JOBREL ;TO GET 1K MORE + 001477' 202140 005105' 14690 MOVEM T,XPNTR + 001500' 202140 005107' 14700 MOVEM T,XBEG ;START OF INDEX BUFFERS + 001501' 000140 000000 14710 CORE T, + 001502' 254000 002170' 14720 JRST ERR22 ;NOT ENUF CORE + 001503' 201040 000001 14730 MOVEI A,1 ;START ON BLOCK #1 (IF DSK) + 001504' 202060 005105' 14740 MOVEM A,@XPNTR ;STORE FIRST BLOCK # + 001505' 350000 005105' 14750 AOS XPNTR + 001506' 200040 001646' 14760 MOVE A,INDEXH + 001507' 202060 005105' 14770 MOVEM A,@XPNTR + 001510' 350000 005105' 14780 AOS XPNTR + 001511' 370000 005104' 14790 SOS XCOUNT + 001512' 370000 005104' 14800 SOS XCOUNT ;RESERVE SPACE FOR NEXT LINK WORD + 001513' 263500 000000 14810 POPJ P, ;RETURN + FUDGE2 V.011 PAGE 42 + ROUTINES TO INDEX THE LIBRARY + + 14830 ;HERE ON PASS 1 TO STORE ENTRIES AND POINTERS. + + 001514' 350012 000000 14850 INDEX1: AOS (P) ;SET SKIP RETURN + 001515' 550140 003334' 14860 HRRZ T,ENTBLK ;GET SIZE OF BLOCK + 001516' 210040 000003 14870 MOVN A,T + 001517' 271140 000001 14880 ADDI T,1 ;WORD OF INFO + 001520' 311140 005104' 14890 CAML T,XCOUNT ;ENUF ROOM IN BLOCK? + 001521' 254000 001546' 14900 JRST NOROOM ;NO + 001522' 200140 003334' 14910 MOVE T,ENTBLK ;GET HEADER WORD + 001523' 202160 005105' 14920 MOVEM T,@XPNTR + 001524' 350000 005105' 14930 AOS XPNTR + 001525' 370000 005104' 14940 SOS XCOUNT + 001526' 507000 000001 14950 HRLS A + 001527' 541040 003335' 14960 HRRI A,ENTBLK+1 + 001530' 336141 000000 14970 INDEXA: SKIPN T,(A) + 001531' 344040 001530' 14980 AOJA A,.-1 + 001532' 202160 005105' 14990 MOVEM T,@XPNTR + 001533' 370000 005104' 15000 SOS XCOUNT + 001534' 350000 005105' 15010 AOS XPNTR + 001535' 253040 001530' 15020 AOBJN A,INDEXA + 001536' 200140 005106' 15030 INDEX2: MOVE T,BUFSIZ + 001537' 274140 004607' 15040 SUB T,OBUF+5 + 001540' 207000 000003 15050 MOVSS T + 001541' 540140 002516' 15060 HRR T,BLKCNT + 001542' 202160 005105' 15070 MOVEM T,@XPNTR + 001543' 370000 005104' 15080 SOS XCOUNT + 001544' 350000 005105' 15090 AOS XPNTR + 001545' 263500 000000 15100 POPJ P, + + 15120 ;HERE WHEN CURRENT INDEX BLOCK IS FULL. + + 001546' 200040 001646' 15140 NOROOM: MOVE A,INDEXH ;HEADER BLOCK OF INDEX FOR LOADER + 001547' 260500 001664' 15150 PUSHJ P,OUTGO + 001550' 067040 000000 15160 OUTPUT 1, + 001551' 200140 002516' 15170 MOVE T,BLKCNT ;GET INDEX BLOCK # + 001552' 562160 005105' 15180 HRROM T,@XPNTR ;STORE IT WITH -1 IN LEFT HALF + 001553' 200040 005104' 15190 MOVE A,XCOUNT + 001554' 272040 005105' 15200 ADDM A,XPNTR + 001555' 200040 005106' 15210 MOVE A,BUFSIZ + 001556' 202040 005104' 15220 MOVEM A,XCOUNT + 15230 ;MARK IT AS AN INDEX INCASE BLOCK FULL + 001557' 562160 005105' 15240 HRROM T,@XPNTR ;SAVE BLOCK # FOR PASS 2 + 001560' 350000 005105' 15250 AOS XPNTR + 001561' 606340 400000 15260 TRNN F,DTAFLG ;NOT IF DTA + 001562' 350000 002516' 15270 AOS BLKCNT ;ONE FOR OUTPUT + 001563' 200040 001646' 15280 MOVE A,INDEXH + 001564' 202060 005105' 15290 MOVEM A,@XPNTR + 001565' 350000 005105' 15300 AOS XPNTR + 001566' 370000 005104' 15310 SOS XCOUNT + 001567' 370000 005104' 15320 SOS XCOUNT ;SPACE FOR LINK WORD TO NEXT INDEX + 001570' 254000 001515' 15330 JRST INDEX1+1 + + FUDGE2 V.011 PAGE 43 + ROUTINES TO INDEX THE LIBRARY + + 15360 ;HERE FOR PASS 2. WRITE OUT THE INDEX BLOCKS + + 001571' 476020 005105' 15380 INDEX3: SETOM @XPNTR ;TERMINATE WITH END OF INDEX MARKER + 001572' 067040 000000 15390 OUTPUT 1, ;SO LAST BLOCK IS WRITTEN + 001573' 602340 400000 15400 TRNE F,DTAFLG ;IS IT DTA? + 001574' 254000 001614' 15410 JRST INDEX5 ;YES, TREAT DIFFERENTLY + 001575' 060040 000016 15420 SETSTS 1,16 + 001576' 211040 000200 15430 MOVNI A,200 + 001577' 506040 005107' 15440 HRLM A,XBEG + 001600' 402000 005110' 15450 INDEX4: SETZM XBEG+1 + 001601' 200060 005107' 15460 MOVE A,@XBEG + 001602' 075041 000000 15470 USETO 1,(A) + 001603' 067040 005107' 15480 OUTPUT 1,XBEG + 001604' 063040 760000 15490 STATZ 1,760000 + 001605' 254000 002132' 15500 JRST ERR15 + 001606' 201040 000200 15510 MOVEI A,200 + 001607' 273040 005107' 15520 ADDB A,XBEG + 001610' 553000 000001 15530 HRRZS A + 001611' 317040 005105' 15540 CAMG A,XPNTR + 001612' 254000 001600' 15550 JRST INDEX4 + 001613' 254000 002257' 15560 JRST EXIT + + 001614' 070040 000000 15580 INDEX5: CLOSE 1, ;AND A SEPARATE EOF BLOCK + 001615' 060040 000116 15590 SETSTS 1,116 ;NONE STANDARD MODE + 001616' 211040 000200 15600 MOVNI A,200 ;IOWD COUNT + 001617' 506040 005107' 15610 HRLM A,XBEG ;SET IT UP FOR OUTPUT + 001620' 074060 002516' 15620 USETI 1,@BLKCNT ;SET ON LAST BLOCK + 001621' 066040 002513' 15630 INPUT 1,DIRIOW ;READ IT IN + 001622' 135040 005174' 15640 LDB A,[POINT 10,DIRBLK,27] ;GET FIRST BLOCK # + 001623' 542060 005107' 15650 HRRM A,@XBEG ;STORE IT FOR COMMON LOOP + 001624' 402000 005110' 15660 SETZM XBEG+1 ;MAKE SURE IT'S ZERO + 001625' 200060 005107' 15670 INDEX6: MOVE A,@XBEG ;GET BLOCK NUMBER + 001626' 074041 000000 15680 USETI 1,(A) ;SET FOR INPUT + 001627' 066040 002513' 15690 INPUT 1,DIRIOW ;INPUT BLOCK + 001630' 200140 004647' 15700 MOVE T,DIRBLK ;TO FIND LINK WORD + 001631' 250160 005107' 15710 EXCH T,@XBEG ;PUT IT IN OUTPUT BLOCK + 001632' 370000 005107' 15720 SOS XBEG ;BACK UP POINTER + 001633' 075041 000000 15730 USETO 1,(A) ;NOW FOR OUTPUT + 001634' 067040 005107' 15740 OUTPUT 1,XBEG ;OUT IT GOES + 001635' 063040 760000 15750 STATZ 1,760000 ;UNLESS IN ERROR + 001636' 254000 002132' 15760 JRST ERR15 ;DEVICE ERROR + 001637' 201040 000200 15770 MOVEI A,200 ;GET TO NEXT DUMP BLOCK + 001640' 273040 005107' 15780 ADDB A,XBEG ;ADVANCE POINTER + 001641' 553000 000001 15790 HRRZS A ;JUST WORD LOCATION + 001642' 317040 005105' 15800 CAMG A,XPNTR ;ALL DONE? + 001643' 254000 001625' 15810 JRST INDEX6 ;NO, LOOP + 001644' 060040 000016 15820 SETSTS 1,16 ;BACK TO STANDARD MODE TO UPDATE DIR. + 001645' 254000 002257' 15830 JRST EXIT ;YES, FINISH UP + + 001646' 000014 000177 15850 INDEXH: XWD 14,177 ;USED TO SIGNAL INDEX BLOCK TO LOADER + + FUDGE2 V.011 PAGE 44 + INPUT SERVICE ROUTINE + + 15880 SUBTTL INPUT SERVICE ROUTINE + 15890 ;THE INPUT ROUTINE GETS CHARACTERS FROM THE DEVICE WHOSE + 15900 ;CHANNEL NUMBER IS IN ACCUMULATOR D. IT CALCULATES THE POSITION + 15910 ;OF THE BUFFER HEADER OF THE DEVICE, THEN EITHER LOADS AC A + 15920 ;FROM THE BYTE POINTER, OR DOES AN INPUT. IF AN END OF FILE + 15930 ;IS FOUND, THE ROUTINE EXITS WITH A POPJ, SINCE THE READ ROUTINE + 15940 ;IS CALLED WITH A PUSHJ, FOLLOWED BY AN EOF RETURN. THE NORMAL + 15950 ;EXIT FROM GETIN IS BY A JRST @GETIN. + + 001647' 377015 004612' 15970 GETIN: SOSG IBUF+2(DIS) ;IS APPROPRIATE BUFFER EMPTY? + 001650' 254000 001653' 15980 JRST INGET ;YES, GET ANOTHER BUFFER + 001651' 134055 004611' 15990 GETIN1: ILDB A, IBUF+1(DIS) ;LOAD AC A WITH A CHARACTER + 001652' 263500 000000 16000 POPJ P, + + 001653' 137240 005175' 16020 INGET: DPB D,[POINT 4,INGET2,12] + 001654' 137240 005176' 16030 DPB D,[POINT 4,INGET3,12] + 001655' 254000 002474' 16040 JRST INGET2 ;INPUT A BUFFER OF DATA + + + 16070 ;OUTPUT SERVICE ROUTINE + 16080 ;THE OUT ROUTINE CHECKS THE TTYOB FLAG TO SEE IF THE OUTPUT + 16090 ;SHOULD BE ON THE TTY. IF SO, IT TRANSFERS CONTROL IMMEDIATELY. + 16100 ;OTHERWISE, IT ASSUMES OUTPUT IS ON DEVICE #1. + + 001656' 606340 000020 16120 OUT: TRNN F, TTYOB ;SHOULD OUTPUT BE ON TTY? + 001657' 254000 002237' 16130 JRST TYPO ;YES + 001660' 377000 004607' 16140 OUT1: SOSG OBUF+5 ;IS OUTPUT BUFFER EMPTY? + 001661' 254000 001664' 16150 JRST OUTGO ;YES, OUTPUT A BUFFER + 001662' 136040 004606' 16160 OUT2: IDPB A, OBUF+4 ;DEPOSIT CHARACTER + 001663' 263500 000000 16170 POPJ P, ;EXIT + + 001664' 606340 200000 16190 OUTGO: TRNN F,XFLG ;IF NOT INDEXING + 001665' 254000 001671' 16200 JRST OUTG ;DON'T WASTE TIME + 001666' 606340 400000 16210 TRNN F,DTAFLG ;IF DTA SKIP + 001667' 354000 002516' 16220 AOSA BLKCNT ;INCR. COUNT IF DSK + 001670' 073040 002516' 16230 UGETF 1,BLKCNT ;GET NEXT BLOCK IF DTA + 001671' 057040 000000 16240 OUTG: OUT 1, ;OUTPUT A BUFFER + 001672' 254000 001662' 16250 JRST OUT2 ;NO ERRORS + 001673' 201240 000001 16260 MOVEI D, 1 ;YES, SET CHANNEL TO OUTPUT + 001674' 254000 002132' 16270 JRST ERR15 ;GO TO ERROR ROUTINE + + FUDGE2 V.011 PAGE 45 + ROUTINE TO HANDLE ASTERISK FILE NAME *.EXT + + 16300 SUBTTL ROUTINE TO HANDLE ASTERISK FILE NAME *.EXT + 16310 ;THE DIRECTORY IS SEARCHED FOR FILE NAMES WITH GIVEN EXTENSION OR + 16320 ;EXTENSION REL IF NONE SPECIFIED. THESE ARE STORED IN FILBUF + 16330 ;ENTERED BY JRST FROM SEMICP + 16340 ;EXIT BY POPJ + 16350 ;DMN 23 MAY 1969 + + + 001675' 200100 002522' 16380 ASTRSK: MOVE B,COLON2 ;GET DEVICE LAST SEEN + 001676' 202100 002511' 16390 MOVEM B,DSKINI+1 ;SAVE IT IN CASE DSK + 001677' 000100 000000 16400 DEVCHR B, ;GET ITS CHARACTERISTICS + 001700' 603100 000100 16410 TLNE B,DTABIT ;IS IT A DTA + 001701' 254000 001760' 16420 JRST DTAAST ;YES + 001702' 607100 200000 16430 TLNN B,DSKBIT ;IS IT THE DSK? + 001703' 254000 002160' 16440 JRST ERR18 ;MUST BE ONE OR THE OTHER + 16450 ;FALL INTO DSKAST IF OK + + 001704' 261500 000547* 16470 DSKAST: PUSH P,JOBFF ;SAVE OLD JOBFF + 001705' 201100 004645' 16480 MOVEI B,DSKHDR ;WHERE BUFFER WILL GO + 001706' 202100 001704* 16490 MOVEM B,JOBFF ;SET IT UP + + 001707' 050440 002510' 16510 OPEN 11,DSKINI ;11 IS SAFE CH.NO. + 001710' 254000 002162' 16520 JRST ERR19 ;CONNOT INIT DSK + 001711' 064440 000001 16530 INBUF 11,1 ;FORCE SINGLE BUFFERING + 001712' 200100 002522' 16540 MOVE B,COLON2 ;GET DEVICE + 001713' 000100 000000 16550 DEVPPN B, ;GET PROJ-PROG INCASE SYS: ETC. + 001714' 000100 000000 16560 GETPPN B, ;FAILED, GET USER PROJ,PROG PAIR + 001715' 202100 004572' 16570 MOVEM B,EBLOCK ;SAVE IT FOR LOOKUP OF UFD + 001716' 205100 654644 16580 MOVSI B,(SIXBIT/UFD/) ;EXTENSION + 001717' 202100 004573' 16590 MOVEM B,EBLOCK+1 + 001720' 200100 005177' 16600 MOVE B,[XWD 1,1] ;TO GET UFD ***VJC + 001721' 202100 004575' 16610 MOVEM B,EBLOCK+3 ;ENTRY BLOCK SET UP + 001722' 076440 004572' 16620 LOOKUP 11,EBLOCK ;DO LOOKUP + 001723' 254000 002164' 16630 JRST ERR20 ;CANNOT DO IT + + 001724' 260500 001745' 16650 DSKLUP: PUSHJ P,DSKINP ;INPUT A WORD + 001725' 202600 004640' 16660 MOVEM S,SAVNAM ;SAVE NAME FOR LATER + 001726' 260500 001745' 16670 PUSHJ P,DSKINP ;GET EXT AS WELL + 001727' 512600 004641' 16680 HLLZM S,SAVEXT ;SAVE EXT, CLEAR RH ***VJC + 001730' 336000 004640' 16690 SKIPN SAVNAM ;IS THERE A NAME + 001731' 254000 001724' 16700 JRST DSKLUP ;NO GET NEXT PAIR + 001732' 312700 004641' 16710 CAME EXT,SAVEXT ;EXTENSIONS MATCH + 001733' 254000 001724' 16720 JRST DSKLUP ;NO GET NEXT PAIR + 001734' 260500 000444' 16730 PUSHJ P,STNULL ;CLOSE OUT OLD FILE + 001735' 200600 004640' 16740 MOVE S,SAVNAM ;RECALL NAME + 001736' 260500 001137' 16750 PUSHJ P,PUTFIL ;STORE IT IN FILBUF + 001737' 200600 004641' 16760 MOVE S,SAVEXT ;RECALL EXTENSION + 001740' 260500 001137' 16770 PUSHJ P,PUTFIL + 001741' 542241 000000 16780 HRRM D,(A) ;GET CHANNEL + 001742' 550600 002724' 16790 HRRZ S,PRGBUF ;POINTER TO PRGBUF + 001743' 260500 001137' 16800 PUSHJ P,PUTFIL ;SAVE IT AS 3RD WORD + 001744' 254000 001724' 16810 JRST DSKLUP ;GO LOOP ROUND ALL + + FUDGE2 V.011 PAGE 46 + ROUTINE TO HANDLE ASTERISK FILE NAME *.EXT + + 16840 ;ROUTINE TO GET NEXT WORD FROM UFD + + 001745' 375000 004644' 16860 DSKINP: SOSGE DIRBUF+2 ;USUAL INPUT ROUTINE + 001746' 254000 001751' 16870 JRST DSKIN1 ;GET ANOTHER BUFFER + 001747' 134600 004643' 16880 ILDB S,DIRBUF+1 ;GET A WORD + 001750' 263500 000000 16890 POPJ P, ;RETURN + + 001751' 056440 000000 16910 DSKIN1: IN 11,0 ;DO INPUT + 001752' 254000 001745' 16920 JRST DSKINP ;NO ERRORS + 001753' 061440 020000 16930 STATO 11,20000 ;END OF FILE? + 001754' 254000 002166' 16940 JRST ERR21 ;NO, READ ERROR + + 001755' 262500 001706* 16960 FIN: POP P,JOBFF ;POP UP ONE LEVEL + 001756' 262500 001755* 16970 POP P,JOBFF ;RESTORE JOBFF + 001757' 263500 000000 16980 POPJ P, ;RETURN TO COMMAND SCAN + + + 001760' 135100 005137' 17010 DTAAST: LDB B,[POINT 4,COLON1,12] ;GET CHANNEL + 001761' 137100 005200' 17020 DPB B,[POINT 4,DP+0,12] ;DEPOSIT IT + 001762' 137100 005201' 17030 DPB B,[POINT 4,DP+1,12] + 001763' 137100 005202' 17040 DPB B,[POINT 4,DP+2,12] + 001764' 137100 005203' 17050 DPB B,[POINT 4,DP+3,12] + 001765' 137100 005204' 17060 DPB B,[POINT 4,DP+5,12] + 001766' 400100 000000 17070 SETZ B, ;INITIAL CONDITION + 001767' 254000 002501' 17080 JRST DP ;INPUT DIRECTORY + + 001770' 301100 000026 17100 DTALUP: CAIL B,26 ;END OF DIRECTORY + 001771' 263500 000000 17110 POPJ P, ;YES- FINISHED + 001772' 510602 005020' 17120 HLLZ S,DIREXT(B) ;GET EXTENSION + 001773' 332002 004772' 17130 SKIPE DIRNAM(B) ;IF NAME ZERO DON'T BOTHER + 001774' 312600 000016 17140 CAME S,EXT ;IS EXTENSION SAME + 001775' 344100 001770' 17150 AOJA B,DTALUP ;NO GET NEXT ENTRY + 001776' 260500 000444' 17160 PUSHJ P,STNULL ;TERMINATE LAST ENTRY + 001777' 200602 004772' 17170 MOVE S,DIRNAM(B) ;GET NAME + 002000' 260500 001137' 17180 PUSHJ P,PUTFIL ;STORE IT IN FILBUF + 002001' 510602 005020' 17190 HLLZ S,DIREXT(B) ;AND EXTENSION + 002002' 260500 001137' 17200 PUSHJ P,PUTFIL ;STORE IT + 002003' 542241 000000 17210 HRRM D,(A) ;SAVECH. + 002004' 550600 002724' 17220 HRRZ S,PRGBUF ;SAVE PRGBUF POINTER + 002005' 260500 001137' 17230 PUSHJ P,PUTFIL ;STORE IT + 002006' 344100 001770' 17240 AOJA B,DTALUP ;GET NEXT ENTRY + + FUDGE2 V.011 PAGE 47 + ERROR ROUTINES + + 17270 SUBTTL ERROR ROUTINES + + 002007' 201100 002261' 17290 ERROR1: MOVEI B, EMES1 ;FUDGE COMMAND ERROR + 002010' 254000 002247' 17300 JRST ERROR ;TYPE IT AND EXIT + + 002011' 201100 002266' 17320 ERROR2: MOVEI B, EMES2 ;TOO MANY PROGRAM NAMES + 002012' 254000 002247' 17330 JRST ERROR ;TYPE IT AND EXIT + + 002013' 201100 002276' 17350 ERROR3: MOVEI B, EMES3 ;FUDGE SYSTEM ERROR + 002014' 254000 002247' 17360 JRST ERROR ;TYPE A MESSAGE AND EXIT + + 002015' 260500 002201' 17380 ERROR4: PUSHJ P, DTYPOQ ;TYPE DEVICE NAME + 002016' 201100 002307' 17390 MOVEI B, EMES4 ;"CANNOT DO IO AS REQUESTED" + 002017' 326400 002247' 17400 JUMPN G,ERROR ;TYPE IT + 002020' 201100 002456' 17410 MOVEI B,EMES24 ;NO SUCH DEVICE IF G=0 + 002021' 254000 002247' 17420 JRST ERROR ;TYPE IT AND EXIT + + 002022' 201100 002315' 17440 ERROR5: MOVEI B, EMES5 ;UNEQUAL NUMBER OF MASTER AND TR. + 002023' 254000 002247' 17450 JRST ERROR ;TYPE IT AND EXIT + + 002024' 201100 002330' 17470 ERROR6: MOVEI B, EMES6 ;NOT ENOUGH ARGUMENTS + 002025' 254000 002247' 17480 JRST ERROR ;TYPE IT AND EXIT + + 002026' 260500 002201' 17500 ERROR7: PUSHJ P, DTYPOQ ;TYPE OUT THE DEVICE NAME + 002027' 201040 000072 17510 MOVEI A, 72 ;ASCII COLON + 002030' 260500 002237' 17520 PUSHJ P, TYPO ;TYPE IT OUT + 002031' 260500 002216' 17530 PUSHJ P, FTYPO ;TYPE OUT THE FILE NAME + 002032' 201040 000074 17540 MOVEI A, 74 ;ASCII LEFT ANGLE BRACKET + 002033' 260500 002237' 17550 PUSHJ P, TYPO ;TYPE IT OUT + 002034' 200100 000013 17560 MOVE B, R ;GET PROGRAM NAME + 002035' 620340 000020 17570 TRZ F, TTYOB ;SET IO BACK TO TTY + 002036' 260500 002220' 17580 PUSHJ P, PTYPO ;TYPE OUT THE PROGRAM NAME + 002037' 201040 000076 17590 MOVEI A, 76 ;ASCII RIGHT ANGLE BRACKET + 002040' 260500 002237' 17600 PUSHJ P, TYPO ;TYPE IT OUT + 002041' 201100 002335' 17610 MOVEI B, EMES7 ;GET AN ERROR MESSAGE + 002042' 254000 002247' 17620 JRST ERROR ;TYPE IT OUT AND EXIT + + 002043' 260500 002201' 17640 ERROR8: PUSHJ P, DTYPOQ ;TYPE OUT THE DEVICE NAME + 002044' 201040 000072 17650 MOVEI A, 72 ;ASCII COLON + 002045' 260500 002237' 17660 PUSHJ P, TYPO ;TYPE IT OUT + 002046' 260500 002216' 17670 PUSHJ P, FTYPO ;TYPE OUT FILE NAME + 002047' 201040 000056 17680 MOVEI A, 56 ;ASCII PERIOD + 002050' 260500 002237' 17690 PUSHJ P, TYPO ;TYPE IT OUT + 002051' 550040 002524' 17700 HRRZ A, FILBUF ;GET THE POINTER TO CURRENT FILE + 002052' 554601 000001 17710 HLRZ S, 1(A) ;GET FILE NAME EXTENSION + 002053' 260500 002206' 17720 PUSHJ P, DTYPO1 ;TYPE IT OUT + 002054' 200140 005102' 17730 MOVE T,SDEVCHR ;GET CHARACTERISTICS + 002055' 603140 200000 17740 TLNE T,DSKBIT ;IS IT A DSK? + 002056' 254000 002103' 17750 JRST ERR8A ;YES + 002057' 201100 002335' 17760 MOVEI B, EMES7 ;GET ERROR MESSAGE "NOT FOUND" + 002060' 254000 002247' 17770 JRST ERROR ;TYPE IT OUT AND EXIT + FUDGE2 V.011 PAGE 48 + ERROR ROUTINES + + 002061' 260500 002201' 17790 ERROR9: PUSHJ P, DTYPOQ ;TYPE DEVICE NAME + 002062' 201100 002340' 17800 MOVEI B, EMES9B ;GET REMAINDER OF MESSAGE + 002063' 254000 002247' 17810 JRST ERROR ;TYPE IT AND EXIT + + 002064' 200200 000001 17830 ERR10: MOVE C, A ;SAVE PROGRAM NAME IN C + 002065' 201100 002343' 17840 MOVEI B, EMES10 ;"ENTRY BLOCK TOO LARGE, PROGRAM" + 002066' 260500 002174' 17850 PUSHJ P, ETYPO ;TYPE BEGINNING OF MESSAGE + 002067' 200100 000004 17860 MOVE B, C ;GET PROGRAM NAME IN B + 002070' 260500 002220' 17870 PUSHJ P, PTYPO ;TYPE IT OUT + 002071' 254000 002253' 17880 JRST EXIT1 ;EXIT + + 002072' 201100 002352' 17900 ERR11: MOVEI B, EMES11 ;TRANSMISSION ERROR ON INPUT + 002073' 260500 002174' 17910 PUSHJ P, ETYPO ;TYPE THE MESSAGE + 002074' 260500 002205' 17920 PUSHJ P, DTYPO ;TYPE NAME OF OFFENDIN DEVICE + 002075' 254000 002253' 17930 JRST EXIT1 ;EXIT + + 002076' 200140 005102' 17950 ERR14: MOVE T,SDEVCHR ;GET DEVICE CHARACTERISTICS + 002077' 603140 200000 17960 TLNE T,DSKBIT ;IS IT A DSK + 002100' 254000 002043' 17970 JRST ERROR8 ;YES + 002101' 201100 002362' 17980 MOVEI B, EMES14 ;DIRECTORY FULL ON OUTPUT + 002102' 254000 002247' 17990 JRST ERROR ;TYPE IT AND EXIT + + 002103' 550140 004573' 18010 ERR8A: HRRZ T,EBLOCK+1 ;GET ERROR CODE + 002104' 301140 000021 18020 CAIL T,TABLND-ETABLE ;LEGAL ERROR? + 002105' 334100 002131' 18030 SKIPA B,TABLND ;NO, USE CATCH ALL MESSAGE + 002106' 200103 002110' 18040 MOVE B,ETABLE(T) ;PICK UP MESSAGE + 002107' 254000 002247' 18050 JRST ERROR + + FUDGE2 V.011 PAGE 49 + ERROR ROUTINES + + 002110' 000000 005205' 18080 ETABLE: [ASCIZ /(0) file was not found/] + 002111' 000000 005212' 18090 [ASCIZ /(1) no such project-programmer number/] + 002112' 000000 005222' 18100 [ASCIZ /(2) protection failure/] + 002113' 000000 005227' 18110 [ASCIZ /(3) file was being modified/] + 002114' 000000 005235' 18120 [ASCIZ /(4) rename file name already exists/] + 002115' 000000 005245' 18130 [ASCIZ /(5) illegal sequence of UUOs/] + 002116' 000000 005253' 18140 [ASCIZ /(6) bad UFD or bad RIB/] + 002117' 000000 005260' 18150 [ASCIZ /(7) not a SAV file/] + 002120' 000000 005264' 18160 [ASCIZ /(10) not enough core/] + 002121' 000000 005271' 18170 [ASCIZ /(11) device not available/] + 002122' 000000 005277' 18180 [ASCIZ /(12) no such device/] + 002123' 000000 005303' 18190 [ASCIZ /(13) not two reloc reg. capability/] + 002124' 000000 005312' 18200 [ASCIZ /(14) no room or quota exceeded/] + 002125' 000000 005321' 18210 [ASCIZ /(15) write lock error/] + 002126' 000000 005326' 18220 [ASCIZ /(16) not enough monitor table space/] + 002127' 000000 005336' 18230 [ASCIZ /(17) partial allocation only/] + 002130' 000000 005344' 18240 [ASCIZ /(20) block not free on allocation/] + + 002131' 000000 005353' 18260 TABLND: [ASCIZ /(?) lookup,enter,or rename error/] + FUDGE2 V.011 PAGE 50 + ERROR ROUTINES + + 002132' 201100 002371' 18280 ERR15: MOVEI B, EMES15 ;DEVICE ERROR ON OUTPUT + 002133' 260500 002174' 18290 PUSHJ P, ETYPO ;TYPE THE MESSAGE + 002134' 260500 002205' 18300 PUSHJ P, DTYPO ;TYPE NAME OF OFFENDING DEVICE + 002135' 254000 002253' 18310 JRST EXIT1 ;GO AWAY + + 002136' 200100 000001 18330 ERR16: MOVE B,A ;SAVE OFFENDING LETTER + 002137' 260500 002243' 18340 PUSHJ P,CRLF + 002140' 201040 000077 18350 MOVEI A,77 ;TYPE OUT "?" + 002141' 260500 001656' 18360 PUSHJ P, OUT + 002142' 200040 000002 18370 MOVE A, B ;GET BACK OFFENDING LETTER + 002143' 260500 001656' 18380 PUSHJ P, OUT ;TYPE OFFENDING LETTER + 002144' 201100 002400' 18390 MOVEI B, EMES16 ;"X" IS AN ILLEGAL SWITCH + 002145' 660340 040000 18400 TRO F,CRLFTY + 002146' 254000 002247' 18410 JRST ERROR ;TYPE IT AND EXIT + + 002147' 200100 000001 18430 ERR17: MOVE B, A + 002150' 260500 002243' 18440 PUSHJ P,CRLF + 002151' 201040 000077 18450 MOVEI A, 77 + 002152' 260500 001656' 18460 PUSHJ P, OUT + 002153' 200040 000002 18470 MOVE A, B + 002154' 260500 001656' 18480 PUSHJ P, OUT ;TYPE OFFENDING LETTER + 002155' 201100 002405' 18490 MOVEI B, EMES17 ;"X" IS AN ILLEGAL CHARACTER + 002156' 660340 040000 18500 TRO F,CRLFTY + 002157' 254000 002247' 18510 JRST ERROR ;TYPE IT AND EXIT + + 002160' 201100 002412' 18530 ERR18: MOVEI B,EMES18 + 002161' 254000 002247' 18540 JRST ERROR + + 002162' 201100 002423' 18560 ERR19: MOVEI B,EMES19 + 002163' 254000 002247' 18570 JRST ERROR + + 002164' 201100 002427' 18590 ERR20: MOVEI B,EMES20 + 002165' 254000 002247' 18600 JRST ERROR + + 002166' 201100 002434' 18620 ERR21: MOVEI B,EMES21 + 002167' 254000 002247' 18630 JRST ERROR + + 002170' 201100 002441' 18650 ERR22: MOVEI B,EMES22 + 002171' 254000 002247' 18660 JRST ERROR + + 002172' 201100 002447' 18680 ERR23: MOVEI B,EMES23 + 002173' 254000 002247' 18690 JRST ERROR + FUDGE2 V.011 PAGE 51 + VARIOUS ERROR ROUTINES AND SMALL TYPE-OUT ROUTINES + + 18710 SUBTTL VARIOUS ERROR ROUTINES AND SMALL TYPE-OUT ROUTINES + + 002174' 505100 440700 18730 ETYPO: HRLI B, 440700 ;MAKE A BYTE POINTER + 002175' 134040 000002 18740 ETYPO2: ILDB A, B ;GET A CHARACTER + 002176' 322040 001065' 18750 JUMPE A,CPOPJ ;EXIT IF NULL + 002177' 260500 002237' 18760 PUSHJ P, TYPO ;NO, TYPE IT + 002200' 254000 002175' 18770 JRST ETYPO2 ;RETURN FOR MORE CHARACTERS + + 002201' 666340 040000 18790 DTYPOQ: TRON F,CRLFTY ;IS CR,LF TYPED OUT? + 002202' 260500 002243' 18800 PUSHJ P,CRLF ;YES + 002203' 201040 000077 18810 MOVEI A,77 ;TYPE OUT ? FOR BATCH + 002204' 260500 002237' 18820 PUSHJ P,TYPO + + + 002205' 200605 003324' 18850 DTYPO: MOVE S, DEVBUF(D) ;GET DEVICE NAME FROM BUFFER + 002206' 200200 005117' 18860 DTYPO1: MOVE C, SYMPTR ;BYTE POINTER TO SYMBOL NAME + 002207' 201100 000006 18870 MOVEI B, 6 ;LOOP COUNTER FOR 6 CHARACTERS + 002210' 134040 000004 18880 DTYPO2: ILDB A, C ;GET A CHARACTER + 002211' 322040 002214' 18890 JUMPE A, DTYPO3 ;IGNORE BLANKS + 002212' 271040 000040 18900 ADDI A, 40 ;CONVERT TO 7-BIT ASCII + 002213' 260500 002237' 18910 PUSHJ P, TYPO ;TYPE IT + 002214' 367100 002210' 18920 DTYPO3: SOJG B, DTYPO2 ;ALL DONE? + 002215' 263500 000000 18930 POPJ P, ;EXIT + + 002216' 200620 002524' 18950 FTYPO: MOVE S, @FILBUF ;PICK UP THE FILE NAME + 002217' 254000 002206' 18960 JRST DTYPO1 ;JUMP INTO DTYPO ROUTINE + + 002220' 201040 000006 18980 PTYPO: MOVEI A, 6 ;SIX CHARACTERS TO GET + 002221' 231100 000050 18990 PTYPO2: IDIVI B, 50 ;CONVERT TO SIXBIT CODE + 002222' 506152 000000 19000 HRLM B+1, (P) ;STORE CHARACTER ON PD LIST + 002223' 363040 002225' 19010 SOJLE A,.+2 ;ALL DONE? + 002224' 260500 002221' 19020 PUSHJ P, PTYPO2 ;NO, DIVIDE SOME MORE + 002225' 554052 000000 19030 HLRZ A, (P) ;POP CHARACTERS OFF STACK + 002226' 322040 001065' 19040 JUMPE A, CPOPJ ;IGNORE BLANKS + 002227' 303040 000012 19050 CAILE A, 12 ;LETTER OR NUMBER? + 002230' 271040 000007 19060 ADDI A, 7 ;LETTER - ADD 66 + 002231' 271040 000057 19070 ADDI A, 57 ;NUMBER - ADD 57 + 002232' 306040 000134 19080 CAIN A, 134 ;DOLLAR SIGN? + 002233' 275040 000070 19090 SUBI A, 70 ;YES, SPECIAL CASE + 002234' 306040 000133 19100 CAIN A, 133 ;PERIOD? + 002235' 275040 000055 19110 SUBI A, 55 ;YES, SPECIAL CASE + 002236' 254000 001656' 19120 JRST OUT ;RECURSIVE EXIT FOR MORE CHARS + + 002237' 136040 004603' 19140 TYPO: IDPB A, OBUF+1 ;STORE CHARACTER IN BUFFER + 002240' 306040 000012 19150 CAIN A, 12 ;LINE FEED? + 002241' 067000 000000 19160 OUTPUT 0, ;YES, EMPTY BUFFER + 002242' 263500 000000 19170 POPJ P, ;EXIT + FUDGE2 V.011 PAGE 52 + VARIOUS ERROR ROUTINES AND SMALL TYPE-OUT ROUTINES + + 002243' 201040 000015 19190 CRLF: MOVEI A, 15 ;CARRIAGE RETURN + 002244' 260500 001656' 19200 PUSHJ P, OUT ;OUTPUT IT + 002245' 201040 000012 19210 MOVEI A, 12 ;LINE FEED + 002246' 254000 001656' 19220 JRST OUT ;OUTPUT IT AND EXIT + + 002247' 620340 000020 19240 ERROR: TRZ F,TTYOB ;JUST IN CASE , SET OUTPUT TO TTY + 002250' 666340 040000 19250 TRON F,CRLFTY + 002251' 260500 002243' 19260 PUSHJ P,CRLF + 002252' 260500 002174' 19270 PUSHJ P, ETYPO ;TYPE LAST MESSAGE OF ERROR + 002253' 620340 000020 19280 EXIT1: TRZ F,TTYOB ;ENSURE TTY OUTPUT OF CR-LF + 002254' 260500 002243' 19290 PUSHJ P,CRLF ;FINISH WITH CR-LF + 002255' 070000 000000 19300 CLOSE 0, ;FORCE OUTPUT OF LAST LINE + 002256' 254000 000000' 19310 JRST FUDGE2 ;START AGAIN + + 002257' 070040 000000 19330 EXIT: CLOSE 1, ;CLOSE OUT THE OUTPUT CHANNEL + 002260' 254000 000000' 19340 JRST FUDGE2 ;RESTART + + FUDGE2 V.011 PAGE 53 + ERROR MESSAGES + + 19370 SUBTTL ERROR MESSAGES + 002261' 376152 542216 19380 EMES1: ASCIZ "?FUDGE2 SYNTAX ERROR" + 002262' 425444 051662 + 002263' 472510 154100 + 002264' 426452 247644 + 002265' 000000 000000 + 002266' 376511 747500 19390 EMES2: ASCIZ "?TOO MANY FILE NAMES OR PROGRAM NAMES" + 002267' 466031 654500 + 002270' 432231 442500 + 002271' 472031 542646 + 002272' 202372 220240 + 002273' 512370 751202 + 002274' 465011 640632 + 002275' 426460 000000 + 002276' 376412 247616 19400 EMES3: ASCIZ "?PROGRAM ERROR WHILE RESETTING MASTER DEVICE" + 002277' 512031 520212 + 002300' 512451 751100 + 002301' 536211 146212 + 002302' 202450 551612 + 002303' 522511 147216 + 002304' 202330 151650 + 002305' 426444 042212 + 002306' 532230 342400 + 002307' 202070 147234 19410 EMES4: ASCIZ " CANNOT DO IO AS REQUESTED" + 002310' 476504 042236 + 002311' 202231 720202 + 002312' 515012 242642 + 002313' 526132 352212 + 002314' 420000 000000 + 002315' 376531 642642 19420 EMES5: ASCIZ "?UNEQUAL NUMBER OF MASTER AND TRANSACTION PROGRAMS" + 002316' 526031 420234 + 002317' 526330 242644 + 002320' 202370 620232 + 002321' 406472 442644 + 002322' 202031 642100 + 002323' 522450 147246 + 002324' 406072 444636 + 002325' 471012 051236 + 002326' 436450 146646 + 002327' 000000 000000 + 002330' 376351 752100 19430 EMES6: ASCIZ "?NOT ENOUGH ARGUMENTS" + 002331' 426351 752616 + 002332' 441010 151216 + 002333' 526330 547250 + 002334' 514000 000000 + 002335' 202351 752100 19440 EMES7: ASCIZ " NOT FOUND" + 002336' 432372 547210 + 002337' 000000 000000 + 002340' 202351 752100 19450 EMES9B: ASCIZ " NOT AVAILABLE" + 002341' 406550 144630 + 002342' 406051 442400 + 002343' 376131 652244 19460 EMES10: ASCIZ "?ENTRY BLOCK TOO LARGE, PROGRAM " + 002344' 545010 246236 + FUDGE2 V.011 PAGE 53-1 + ERROR MESSAGES + + 002345' 416264 052236 + 002346' 475011 440644 + 002347' 436125 420240 + 002350' 512370 751202 + 002351' 465000 000000 + 002352' 376512 240634 19470 EMES11: ASCIZ "?TRANSMISSION ERROR ON INPUT DEVICE " + 002353' 516331 151646 + 002354' 446371 620212 + 002355' 512451 751100 + 002356' 476344 044634 + 002357' 502532 420210 + 002360' 426551 141612 + 002361' 200000 000000 + 002362' 376111 151212 19480 EMES14: ASCIZ "?DIRECTORY FULL ON OUTPUT DEVICE " + 002363' 416511 751262 + 002364' 202152 546230 + 002365' 202371 620236 + 002366' 526512 052650 + 002367' 202110 553222 + 002370' 416124 000000 + 002371' 376110 553222 19490 EMES15: ASCIZ "?DEVICE ERROR ON OUTPUT DEVICE " + 002372' 416124 042644 + 002373' 512372 220236 + 002374' 471011 752650 + 002375' 502532 420210 + 002376' 426551 141612 + 002377' 200000 000000 + 002400' 202232 320202 19500 EMES16: ASCIZ " IS AN ILLEGAL SWITCH" + 002401' 471011 146230 + 002402' 426170 146100 + 002403' 516571 152206 + 002404' 440000 000000 + 002405' 202232 320202 19510 EMES17: ASCIZ " IS AN ILLEGAL CHARACTER" + 002406' 471011 146230 + 002407' 426170 146100 + 002410' 416210 151202 + 002411' 416510 551000 + 002412' 376110 553222 19520 EMES18: ASCIZ "?DEVICE FOR * COMMAND MUST BE DSK OR DTA" + 002413' 416124 043236 + 002414' 511005 220206 + 002415' 476331 540634 + 002416' 421011 552646 + 002417' 521010 242500 + 002420' 422471 320236 + 002421' 511010 452202 + 002422' 000000 000000 + 002423' 376070 147234 19530 EMES19: ASCIZ "?CANNOT INIT DSK" + 002424' 476504 044634 + 002425' 446504 042246 + 002426' 454000 000000 + 002427' 376311 747626 19540 EMES20: ASCIZ "?LOOKUP FAILURE ON DSK" + 002430' 526404 043202 + 002431' 446312 551212 + FUDGE2 V.011 PAGE 53-2 + ERROR MESSAGES + + 002432' 202371 620210 + 002433' 516260 000000 + 002434' 376132 251236 19550 EMES21: ASCIZ "?ERROR WHILE READING UFD" + 002435' 511012 744222 + 002436' 462124 051212 + 002437' 406111 147216 + 002440' 202530 642000 + 002441' 376351 752100 19560 EMES22: ASCIZ "?NOT ENOUGH CORE AVAILABLE " + 002442' 426351 752616 + 002443' 441010 347644 + 002444' 425010 153202 + 002445' 446310 141230 + 002446' 425000 000000 + 002447' 376372 552240 19570 EMES23: ASCIZ "?OUTPUT DEVICE MUST BE DSK OR DTA" + 002450' 526504 042212 + 002451' 532230 342500 + 002452' 466532 352100 + 002453' 412124 042246 + 002454' 455011 751100 + 002455' 422510 100000 + 002456' 202111 742646 19580 EMES24: ASCIZ " DOES NOT EXIST" + 002457' 202351 752100 + 002460' 426611 151650 + 002461' 000000 000000 + FUDGE2 V.011 PAGE 54 + IMPURE CODE + + 19600 SUBTTL IMPURE CODE + + + 002462' 050000 002521' 19630 COLON1: OPEN ,COLON0 ;INITIALIZATION SEQUENCE + 002463' 077003 004572' 19640 SEMIC1: ENTER , EBLOCK(T) + 002464' 064004 000000 19650 INBUF3: INBUF ,(C) + + 002465' 072000 000017 19670 BACK0: MTAPE , 17 ;BACKSPACE MAG TAPE ONE FILE + 002466' 072000 000000 19680 BACK3: MTAPE ,0 ;WAIT FOR BACKSPACE TO FIN. + 002467' 061000 004000 19690 BACK1: STATO , IOBOT ;ARE WE AT BEGINNING OF TAPE + 002470' 072000 000016 19700 BACK2: MTAPE , 16 ;NO, SKIP FILE + 002471' 263500 000000 19710 POPJ P, ;EXIT + + 002472' 070000 000000 19730 GET3A: CLOSE , + 002473' 076003 004572' 19740 GET4A: LOOKUP , EBLOCK(T) + + 002474' 056000 000000 19760 INGET2: IN 0, ;INPUT A BUFFER OF DATA + 002475' 254000 001651' 19770 JRST GETIN1 ;NO ERRORS + 002476' 063000 020000 19780 INGET3: STATZ , IOEOF ;END OF FILE? + 002477' 254000 001064' 19790 JRST POPOUT ;YES, HIGH LEVEL EXIT + 002500' 254000 002072' 19800 JRST ERR11 ;ERROR + + 002501' 060000 000117 19820 DP: SETSTS ,117 ;DUMP MODE NON-STANDARD + 002502' 074000 000144 19830 USETI ,144 ;DIRECTORY BLOCK + 002503' 066000 002513' 19840 INPUT ,DIRIOW ;ONE BLOCK ONLY + 002504' 063000 760000 19850 STATZ ,760000 ;CHECK ERRORS + 002505' 254000 002501' 19860 JRST DP ;TRY AGAIN + 002506' 060000 000014 19870 SETSTS ,14 ;BACK TO BINARY + 002507' 254000 001770' 19880 JRST DTALUP + + 002510' 000000 000014 19900 DSKINI: EXP 14 + 002511' 446353 000000 19910 SIXBIT /DSK/ ;MAY GET MODIFIED + 002512' 000000 004642' 19920 EXP DIRBUF + + 002513' 777600 004646' 19940 DIRIOW: IOWD 200,DIRBLK ;IOWD FOR DIRECTORY INPUT + 002514' 000000 000000 19950 0 ;MUST BE IN LOW SEGMENT + + FUDGE2 V.011 PAGE 55 + STORAGE AND BUFFERS + + 19980 SUBTTL STORAGE AND BUFFERS + + 002515' 20000 LOW: + + 002515' 20020 FILSAV: BLOCK 1 + 002516' 20030 BLKCNT: BLOCK 1 ;NUMBER OF BUFFERS OUTPUT + 002517' 20040 SAVEAC: BLOCK 1 + 002520' 20050 SAVEBT: BLOCK 1 + 002521' 20060 COLON0: BLOCK 1 ;MODE + 002522' 20070 COLON2: BLOCK 1 ;DEVICE NAME + 002523' 20080 COLON3: BLOCK 1 ;BUFFER HEADER + 002524' 20090 FILBUF: BLOCK N + 002724' 20100 PRGBUF: BLOCK N + 003124' 20110 PPNBUF: BLOCK N + 003324' 20120 DEVBUF: BLOCK 10 + 003334' 20130 ENTBLK: BLOCK X+1 + 004042' 20140 SVEBLK: BLOCK X+1 + 004550' 20150 PDLIST: BLOCK XP + 004570' 20160 BLOCK 2 ;FOR EXTENDED LOOKUP AND ENTERS + 004572' 20170 EBLOCK: BLOCK 4 + 004576' 20180 BLOCK <RIBALC-6+1> ;MORE EXTENDED STUFF + 004602' 20190 OBUF: BLOCK 6 ;TTY:, OUTPUT DEV: + 004610' 20200 IBUF: BLOCK 30 ;INPUT DEVICES (10) + + 004640' 20220 SAVNAM: BLOCK 1 ;SAVED FILE NAME FROM UFD + 004641' 20230 SAVEXT: BLOCK 1 ;SAVED EXT NAME FROM UFD + 004642' 20240 DIRBUF: BLOCK 3 ;DIRECTORY BUFFER HEADER + 004645' 20250 DSKHDR: BLOCK N+2 ;TWO WORDS OF OVERHEAD [P,P]+EXT + 004647' 20260 DIRBLK=DSKHDR+2 + 004772' 20270 DIRNAM=DIRBLK+123 ;FILENAMES IN DTA DIRECTORY START HERE + 005020' 20280 DIREXT=DIRNAM+26 ;EXTENSIONS IN DTA DIRECTORY START HERE + + 005047' 20300 BSZ: BLOCK 1 ;SIZE OF OLD SYMBOL BLOCK + 005050' 20310 PTGRS: BLOCK 1 ;PTGR SAVED + 005051' 20320 PTSRS: BLOCK 1 ;PTSR SAVED + 005052' 20330 RELOCS: BLOCK 1 ;ORIGINAL RELOC + 005053' 20340 SYMBLK: BLOCK ^D20 ;NEW SYMBOL BLOCK + + 005077' 20360 MATCH: BLOCK 1 ;COUNT OF <'S - >'S ***VJC + + 005100' 20380 CURCHR: BLOCK 1 ;SAVED CURRENT CHAR OF CS + 005101' 20390 LSTCHR: BLOCK 1 ;SAVED LAST CHAR OF CS + 005102' 20400 SDEVCH: BLOCK 1 ;SAVED DEVICE CHARACTERS + 005103' 20410 NUMDEV: BLOCK 1 ;NUMBER OF DEVICES + 005104' 20420 XCOUNT: BLOCK 1 + 005105' 20430 XPNTR: BLOCK 1 + 005106' 20440 BUFSIZ: BLOCK 1 + 005107' 20450 XBEG: BLOCK 2 + 005111' 20460 LEVEL: BLOCK 1 ;-2 IF LEVEL D + 005112' 20470 DEFPPN: BLOCK 1 ;DEFAULT PROJ-PROG + 005113' 20480 PRJPRG: BLOCK 1 ;TEMP. PROJ-PROG + 005114' 20490 SVENTR: BLOCK 2 ;PLACE TO SAVE EBLOCK,+1 + 005116' 20500 NOWARN: BLOCK 1 ;SIGNAL TO PRINT MESSAGE ABOUT INDEX + FUDGE2 V.011 PAGE 55-1 + STORAGE AND BUFFERS + + 005117' 20510 VAR ;JUST IN CASE + + 005117' 20530 LOWTOP: + FUDGE2 V.011 PAGE 56 + CONSTANTS,POINTERS AND LITERALS + + 20550 SUBTTL CONSTANTS,POINTERS AND LITERALS + + 005117' 440600 000014 20570 SYMPTR: POINT 6, S + 005120' 440600 000016 20580 EXTPTR: POINT 6, EXT + 005121' 440400 005054' 20590 PTSR: POINT 4,SYMBLK+1 ;TO STORE RELOCATION + 005122' 440400 005052' 20600 PTGR: POINT 4,RELOCS ;TO GET RELOCATION + 005123' 000040 000000 20610 DTCLR: UTPCLR 1, + 005124' 002526' 002525' 20620 FILXWD: XWD FILBUF+2, FILBUF+1 + 005125' 777760 004547' 20630 XPDLST: XWD -XP,PDLIST-1 + + 000000' 20650 END FUDGE2 + 005126' 002515' 002516' + 005127' 000017 000011 + 005130' 376235 466312 + 005131' 637035 420340 + 005132' 713375 262706 + 005133' 721336 071336 + 005134' 637454 166732 + 005135' 627444 067352 + 005136' 667054 571000 + 005137' 270400 002462' + 005140' 270400 000017 + 005141' 120000 000000 + 005142' 270400 002463' + 005143' 004572' 005114' + 005144' 270400 002464' + 005145' 003334' 004042' + 005146' 270400 002465' + 005147' 270400 002467' + 005150' 270400 002470' + 005151' 270400 002466' + 005152' 270400 002472' + 005153' 270400 002473' + 005154' 550140 004573' + 005155' 306140 000017 + 005156' 254000 001133' + 005157' 254000 002076' + 005160' 777756 000001 + 005161' 536032 247222 + 005162' 472164 047236 + 005163' 202231 642212 + 005164' 541011 747100 + 005165' 476532 450252 + 005166' 521010 644630 + 005167' 425005 520206 + 005170' 476352 444634 + 005171' 526231 643432 + 005172' 050000 000000 + 005173' 140600 000001 + 005174' 101200 004647' + 005175' 270400 002474' + 005176' 270400 002476' + 005177' 000001 000001 + FUDGE2 V.011 PAGE 56-1 + CONSTANTS,POINTERS AND LITERALS + + 005200' 270400 002501' + 005201' 270400 002502' + 005202' 270400 002503' + 005203' 270400 002504' + 005204' 270400 002506' + 005205' 241405 120314 + 005206' 647314 520356 + 005207' 607464 067336 + 005210' 721014 667752 + 005211' 673100 000000 + 005212' 241425 120334 + 005213' 675016 372706 + 005214' 641016 071336 + 005215' 653134 372132 + 005216' 703455 763744 + 005217' 607335 562744 + 005220' 203356 566704 + 005221' 627440 000000 + 005222' 241445 120340 + 005223' 713376 462706 + 005224' 723235 767100 + 005225' 633035 166352 + 005226' 713120 000000 + 005227' 241465 120314 + 005230' 647314 520356 + 005231' 607464 061312 + 005232' 647354 720332 + 005233' 677115 163322 + 005234' 627100 000000 + 005235' 241505 120344 + 005236' 627354 166712 + 005237' 203155 166312 + 005240' 203354 166712 + 005241' 203035 471312 + 005242' 607117 120312 + 005243' 743236 372346 + 005244' 000000 000000 + 005245' 241525 120322 + 005246' 663314 563702 + 005247' 661016 362742 + 005250' 727135 661712 + 005251' 203374 620252 + 005252' 526376 300000 + 005253' 241545 120304 + 005254' 607104 052614 + 005255' 421015 771100 + 005256' 613034 420244 + 005257' 446040 000000 + 005260' 241565 120334 + 005261' 677504 060500 + 005262' 516032 620314 + 005263' 647314 500000 + 005264' 241426 024500 + FUDGE2 V.011 PAGE 56-2 + CONSTANTS,POINTERS AND LITERALS + + 005265' 673376 420312 + 005266' 673376 563720 + 005267' 203075 771312 + 005270' 000000 000000 + 005271' 241426 124500 + 005272' 623136 664706 + 005273' 625015 667750 + 005274' 203036 660722 + 005275' 663034 266312 + 005276' 000000 000000 + 005277' 241426 224500 + 005300' 673364 071752 + 005301' 617204 062312 + 005302' 733234 362400 + 005303' 241426 324500 + 005304' 673376 420350 + 005305' 737364 071312 + 005306' 663374 320344 + 005307' 627165 620306 + 005310' 607414 161322 + 005311' 663236 474400 + 005312' 241426 424500 + 005313' 673364 071336 + 005314' 677324 067744 + 005315' 203436 567750 + 005316' 605014 574306 + 005317' 627134 462710 + 005320' 000000 000000 + 005321' 241426 524500 + 005322' 737455 172312 + 005323' 203315 761726 + 005324' 203136 271336 + 005325' 710000 000000 + 005326' 241426 624500 + 005327' 673376 420312 + 005330' 673376 563720 + 005331' 203335 767322 + 005332' 723376 220350 + 005333' 607055 462500 + 005334' 717414 161712 + 005335' 000000 000000 + 005336' 241426 724500 + 005337' 703036 272322 + 005340' 607304 060730 + 005341' 663374 360750 + 005342' 647375 620336 + 005343' 673317 100000 + 005344' 241446 024500 + 005345' 613315 761726 + 005346' 203355 772100 + 005347' 633454 562500 + 005350' 677344 060730 + 005351' 663374 360750 + FUDGE2 V.011 PAGE 56-3 + CONSTANTS,POINTERS AND LITERALS + + 005352' 647375 600000 + 005353' 241765 120330 + 005354' 677375 372740 + 005355' 263135 672312 + 005356' 711315 771100 + 005357' 713135 660732 + 005360' 625014 571344 + 005361' 677440 000000 + +NO ERRORS DETECTED + +PROGRAM BREAK IS 005362 + +9K CORE USED + FUDGE2 V.011 PAGE 57 + SYMBOL TABLE + + 000543 +A 000001 +ALTMOD 000521' +APPEND 000711' +APROC3 000716' +ASTRSK 001675' +B 000002 +BACK0 002465' +BACK1 002467' +BACK2 002470' +BACK3 002466' +BACKSP 001024' +BITE 000110' +BLKCNT 002516' +BSWTCH 000250' +BSZ 005047' +BUFSIZ 005106' +C 000004 +COLON 000317' +COLON0 002521' +COLON1 002462' +COLON2 002522' +COLON3 002523' +COLON4 000375' +COLON6 000340' +COLON7 000344' +COLON8 000357' +COLONB 000406' +COLONC 000373' +COMMA 000310' +COMMA1 000503' +COMMA3 000477' +COMMA4 000516' +COMMAP 000470' +COMMAX 000314' +CONB 010000 SPD +COPY 000737' +COPYTO 000743' +CORE 000000 +COUNT 001337' +CPOPJ 001065' +CPOPJ1 001063' +CRLF 002243' +CRLFTY 040000 SPD +CURCHR 005100' +D 000005 +DEFENT 000463' +DEFPPN 005112' +DELCPY 000730' +DELDEC 001435' +DELETE 000701' +DELFIN 001445' +DELGT1 001416' + FUDGE2 V.011 PAGE 57-1 + SYMBOL TABLE + +DELGTR 001412' +DELINI 001461' +DELLOC 001410' +DELWRT 001447' +DELWRU 001455' +DESTB 000001 SPD +DEVB 000400 SPD +DEVBUF 003324' +DEVCHR 000000 +DEVPPN 000000 +DIRBLK 004647' +DIRBUF 004642' +DIREXT 005020' +DIRIOW 002513' +DIRNAM 004772' +DIS 000015 +DOENTR 001121' +DOXSWT 001134' +DP 002501' +DPROC1 000703' +DRCTRB 000004 SPD +DSKAST 001704' +DSKBIT 200000 SPD +DSKHDR 004645' +DSKIN1 001751' +DSKINI 002510' +DSKINP 001745' +DSKLUP 001724' +DSPTCH 000065' +DTAAST 001760' +DTABIT 000100 SPD +DTAFLG 400000 SPD +DTALUP 001770' +DTCLR 005123' +DTYPO 002205' +DTYPO1 002206' +DTYPO2 002210' +DTYPO3 002214' +DTYPOQ 002201' +E 000006 +EBLOCK 004572' +EMES1 002261' +EMES10 002343' +EMES11 002352' +EMES14 002362' +EMES15 002371' +EMES16 002400' +EMES17 002405' +EMES18 002412' +EMES19 002423' +EMES2 002266' +EMES20 002427' +EMES21 002434' + FUDGE2 V.011 PAGE 57-2 + SYMBOL TABLE + +EMES22 002441' +EMES23 002447' +EMES24 002456' +EMES3 002276' +EMES4 002307' +EMES5 002315' +EMES6 002330' +EMES7 002335' +EMES9B 002340' +ENDST 001372' +ENTBLK 003334' +EPROC1 000670' +EPROC2 000672' +ERR10 002064' +ERR11 002072' +ERR14 002076' +ERR15 002132' +ERR16 002136' +ERR17 002147' +ERR18 002160' +ERR19 002162' +ERR20 002164' +ERR21 002166' +ERR22 002170' +ERR23 002172' +ERR8A 002103' +ERRB 002000 SPD +ERRISQ 000214' +ERROR 002247' +ERROR1 002007' +ERROR2 002011' +ERROR3 002013' +ERROR4 002015' +ERROR5 002022' +ERROR6 002024' +ERROR7 002026' +ERROR8 002043' +ERROR9 002061' +ETABLE 002110' +ETYPO 002174' +ETYPO2 002175' +EXIT 002257' +EXIT1 002253' +EXT 000016 +EXTB 001000 SPD +EXTPTR 005120' +EXTRCT 000660' +F 000007 +F4 001346' +F4I 001270' +F4IB 020000 SPD +F4LUP1 001374' +F4LUP2 001402' + FUDGE2 V.011 PAGE 57-3 + SYMBOL TABLE + +F4LUP3 001375' +FILBUF 002524' +FILSAV 002515' +FILXWD 005124' +FIN 001755' +FIND1 000752' +FIND2 000757' +FIND3 000765' +FINDCP 000751' +FIXUP 000647' +FTYPO 002216' +FUDGE2 000000' +G 000010 +GET0 001046' +GET1 001060' +GET3 001066' +GET3A 002472' +GET4 001107' +GET4A 002473' +GETCHR 000040' +GETCMN 000045' +GETDEV 001031' +GETIN 001647' +GETIN1 001651' +GETPPN 000000 +H 000011 +IBUF 004610' +INBIT 000002 SPD +INBUF0 000546' +INBUF1 000566' +INBUF2 000556' +INBUF3 002464' +INBUF4 000571' +INBUFG 000573' +INDEX 000722' +INDEX0 001467' +INDEX1 001514' +INDEX2 001536' +INDEX3 001571' +INDEX4 001600' +INDEX5 001614' +INDEX6 001625' +INDEXA 001530' +INDEXH 001646' +INFOB 004000 SPD +INGET 001653' +INGET2 002474' +INGET3 002476' +INSER1 000654' +INSERT 000632' +IOBKTL 040000 SPD +IOBOT 004000 SPD +IODATA 100000 SPD + FUDGE2 V.011 PAGE 57-4 + SYMBOL TABLE + +IODEV 200000 SPD +IOEOF 020000 SPD +IPROC7 000656' +JOBFF 001756' EXT +JOBREL 001476' EXT +JOBSA 000000 EXT +JOBSYM 000000 EXT +JOBVER 000137 SPD +JSR 260500 000000 +KSWTCH 000251' +LBRACA 000277' +LBRACK 000265' +LEVEL 005111' +LFTARW 000156' +LIST 000600' +LIST1 000610' +LIST2 000613' +LOW 002515' +LOWTOP 005117' +LPTBIT 040000 SPD +LSQB 000162' +LSQB1 000164' +LSTCHR 005101' +MACHCD 001365' +MATCH 005077' +MSTGET 000772' +N 000200 SPD +NODEV 000150' +NOLOCB 000200 SPD +NOROOM 001546' +NOWARN 005116' +NUMDEV 005103' +NXTWRD 001223' +OBUF 004602' +OUT 001656' +OUT1 001660' +OUT2 001662' +OUT4 001405' +OUTBIT 000001 SPD +OUTG 001671' +OUTGO 001664' +P 000012 +PDLIST 004550' +PERIOD 000257' +POPBAK 100000 SPD +POPOUT 001064' +PPNBUF 003124' +PRGBUF 002724' +PRJPRG 005113' +PROGB 000100 SPD +PTGR 005122' +PTGRS 005050' +PTSR 005121' + FUDGE2 V.011 PAGE 57-5 + SYMBOL TABLE + +PTSRS 005051' +PTYPO 002220' +PTYPO2 002221' +PUTFIL 001137' +PUTPPN 001151' +PUTPRG 001144' +R 000013 +RBRACK 000303' +READ 001156' +READ1 001206' +READ2 001210' +READ22 001230' +READ23 001216' +READ3 001245' +READ5 001243' +READ55 001233' +READ6 001157' +READ6A 001173' +READ6B 001202' +READ7 001266' +READ8 001255' +READ9 001261' +READX 001276' +RELOCS 005052' +REPLCE 000621' +RESET 001002' +RESET 000000 +RESET1 001017' +RESET2 001005' +RESET3 001012' +RIBALC 000011 SPD +RSQB 000202' +S 000014 +SAVEAC 002517' +SAVEB 000002 SPD +SAVEBT 002520' +SAVEXT 004641' +SAVNAM 004640' +SDEVCH 005102' +SEMIC1 002463' +SEMIC2 000447' +SEMIC3 000462' +SEMIC4 000427' +SEMICA 000416' +SEMICP 000407' +SIZE 000500 SPD +SIZZ 000452 SPD +SLASH 000144' +SLIST 000216' +SLSHB 000010 SPD +SQBCMA 000177' +STNULL 000444' +STORE 000127' + FUDGE2 V.011 PAGE 57-6 + SYMBOL TABLE + +SVEBLK 004042' +SVENTR 005114' +SW 000017 +SWTB 000004 SPD +SWTCH 000145' +SWTCHA 000135' +SWTCHE 000146' +SYMBLK 005053' +SYMPTR 005117' +T 000003 +TABLE 000077' +TABLND 002131' +TRNGET 000777' +TSWTCH 000252' +TTYBIT 000010 SPD +TTYCB 000040 SPD +TTYIN 000210' +TTYOB 000020 SPD +TYPO 002237' +UTPCLR 000000 +VCUSTO 000000 SPD +VFUDGE 000011 SPD +VPATCH 000000 SPD +WRITE 001305' +WRITE2 001310' +WRITE3 001314' +WRITE4 001330' +WSWTCH 000253' +X 000505 SPD +XBEG 005107' +XCOUNT 005104' +XFLG 200000 SPD +XP 000020 SPD +XPDLST 005125' +XPNTR 005105' +ZSWTCH 000254' + TTTTTTTTTTTTTTT EEEEEEEEEEEEEEE NNN NNN DDDDDDDDDDDD MMM MMM PPPPPPPPPPPP +TTTTTTTTTTTTTTT EEEEEEEEEEEEEEE NNN NNN DDDDDDDDDDDD MMM MMM PPPPPPPPPPPP +TTTTTTTTTTTTTTT EEEEEEEEEEEEEEE NNN NNN DDDDDDDDDDDD MMM MMM PPPPPPPPPPPP + TTT EEE NNN NNN DDD DDD MMMMMM MMMMMM PPP PPP + TTT EEE NNN NNN DDD DDD MMMMMM MMMMMM PPP PPP + TTT EEE NNN NNN DDD DDD MMMMMM MMMMMM PPP PPP + TTT EEE NNNNNN NNN DDD DDD MMM MMM MMM PPP PPP + TTT EEE NNNNNN NNN DDD DDD MMM MMM MMM PPP PPP + TTT EEE NNNNNN NNN DDD DDD MMM MMM MMM PPP PPP + TTT EEEEEEEEEEEE NNN NNN NNN DDD DDD MMM MMM PPPPPPPPPPPP + TTT EEEEEEEEEEEE NNN NNN NNN DDD DDD MMM MMM PPPPPPPPPPPP + TTT EEEEEEEEEEEE NNN NNN NNN DDD DDD MMM MMM PPPPPPPPPPPP + TTT EEE NNN NNNNNN DDD DDD MMM MMM PPP + TTT EEE NNN NNNNNN DDD DDD MMM MMM PPP + TTT EEE NNN NNNNNN DDD DDD MMM MMM PPP + TTT EEE NNN NNN DDD DDD MMM MMM PPP + TTT EEE NNN NNN DDD DDD MMM MMM PPP + TTT EEE NNN NNN DDD DDD MMM MMM PPP + TTT EEEEEEEEEEEEEEE NNN NNN DDDDDDDDDDDD MMM MMM PPP + TTT EEEEEEEEEEEEEEE NNN NNN DDDDDDDDDDDD MMM MMM PPP + TTT EEEEEEEEEEEEEEE NNN NNN DDDDDDDDDDDD MMM MMM PPP + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB0 :TENDMP.LST [8,200] Created: 20-April-1967 11:20:00 Printed: 24-April-1978 11:22:33 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1523 +File will be deleted after printing + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 1 + TD10 VERSION + + 00010 TITLE TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 + 00020 IFNDEF REL,<REL=0> ;0 PAPER TAPE, 1 RELOCATABLE BINARY + 00030 IFNDEF MAGT,<MAGT=0> ;0 DTAPE, 1 MTAPE + 00040 IFN MAGT,< + 00050 ; MAGTAPE UTILITY ROUTINE - COURTSEY DATALINE SYSTEMS J HANCOCK + 00060 > + 00070 IFNDEF MODE,<MODE=0> ;0 IS TD10, 1 IS 551/136 + 00080 IFNDEF CORE,<CORE=4> ;NUMBER OF 8K MEMORY BLOCKS + + 00100 IFE MODE,<SUBTTL TD10 VERSION> + 00110 IFN MODE,<SUBTTL 551/136 VERSION> + + 00130 IFE REL,< + 00140 IFE MAGT,<RIM10B> + 00150 IFN MAGT,<RIM10>> + 000210 00160 UTC=210 + 000214 00170 UTS=214 + 000200 00180 DC=200 + 000320 00190 DTC=320 + 000324 00200 DTS=324 + + 000000 00220 F=0 ;MUST BE 0. USED BY JRA'S + 000002 00230 A=2 ;MISC TEMP. HOLDS 136 CONO INDEX IN UWAIT + 000001 00240 B=1 ;TEMP. HOLDS BLOCK # COMPUTATION IN SEARCH + 000003 00250 C=3 ;HOLDS BITS FOR DECTAPE CONO DURING I/O + 000004 00260 D=4 ;HOLDS POINTERS FOR AOBJN'S THROUGH CORE + 000005 00270 E=5 ;HOLDS COUNT OF WORDS IN CURRENT DT BLOCK + 000006 00280 P=6 ;PC FOR JSP'S + 000007 00290 CKS=7 ;HAD BEEN CHECKSUM IN MACDMP + 000010 00300 FILN=10 ;NUMBER OF FILE IN DIRECTORY, 1 TO 26 OCTAL + 000011 00310 BLKNO=11 ;BLOCK NUMBER SEARCHED FOR ON TAPE + 000012 00320 WRITE=12 ;MULTI-STATE FLAG FOR DEFINING I/O OPERATION + 00330 ;1=D 0=K -1=ELSE + 000013 00340 PNTR=13 ;POINTER TO BYTE TABLE IN DIRECTORY + 000014 00350 CH=14 ;HOLDS 6BIT CHARACTER OF COMMAND, OR -1 + 000015 00360 Q=15 ;ANOTHER JSP AC + 000016 00370 G=16 ;RARELY USED VERY TEMP + 000017 00380 CT=17 ;COUNT OF WORDS TO DUMP + + 077777 00400 COMPTR=BEGR+377 ;COMMAND POINTER, IF SUPPLIED + 077175 00410 LOZAD=BEGR-203 ;WHEN CORE IS CLEARED, IT + 00420 ;IS FROM 40 THRU LOZAD + 000020 00430 LOW=20 ;FIRST LOCATION CONSIDERED FOR DUMPING + 077175 00440 HIGH=BEGR-203 ;LAST LOCATION CONSIDERED FOR DUMPING + 00450 ;ZEROED AT BEG THESE DAYS + 077176 00460 FOOF=BEGR-202 ;NEEDED FOR ZERO CORE SEARCH, ZEROED AT BEG1 + 077177 00470 TAB=BEGR-201 ;FILE DIRECTORY + 077377 00480 LINK=BEGR-1 ;0-17=LINK, 18-27=FBN, 29-35=WC + 077400 00490 IFE REL,<IFE MAGT,<LOC 17400+<<CORE-1>*20000>> + 00500 IFN MAGT,<LOC 17377+<<CORE-1>*20000> + 00510 IOWD LAST-BEGR+1,BEGR>> + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 2 + TD10 VERSION + + 00530 ;INITIAL ENTRY IS AT BEGR, UNLESS A COMMAND POINTER IS + 00540 ;SUPPLIED IN COMPTR. IN THAT CASE, ENTRY IS AT BEGR+1 + + 077400 402000 077777 00560 BEGR: SETZM COMPTR ;CLEAR ANY JUNK IN COMMAND POINTER + 077401 700200 635550 00570 CONO 635550 ;I/O RESET, ETC. + 077402 265300 077467 00580 BEG: JSP P,CRR ;TYPE A CR-LF + 077403 201200 077750 00590 MOVEI D,SPNT-2 ;PREPARE TO REMOVE AOBJN POINTERS + 077404 403100 077176 00600 BEG1: SETZB A,FOOF ;CLEAR A TO PUT IN CORE, CLEAR + 00610 ;FOOF FOR THE NEXT ZERO CORE SEARCH + 077405 250104 000002 00620 EXCH A,2(D) ;REMOVE HEADER LIST + 077406 253100 077406 00630 AOBJN A,. ;COUNT THROUGH TO NEXT HEADER + 077407 201202 777777 00640 MOVEI D,-1(A) ;ACCOUNT FOR OVERSHOOT IN AOBJN + 077410 326200 077404 00650 JUMPN D,BEG1 ;IF WE DIDNT AOBJN A 0, GO FOR NEXT HDR + 077411 200540 077753 00660 MOVE PNTR,[XWD 500,TAB-1] ;5 BIT BYTES IN DIRECTORY + 077412 403600 000000 00670 SETZB CH,F + 077413 475500 000215 00680 CRCH: SETOI WRITE,215 ;USED FOR CARRET TYPEOUT + 077414 403140 077175 00690 TYI: SETZB C,HIGH ;HOPEFULLY HIGH IS TEMPORARY + 077415 403040 000005 00700 SETZB B,E ;NAME INITIALIZING + 077416 665040 400000 00710 TLOA B,400000 ;NULL NAME IS "@. " + 077417 201240 000002 00720 SPACE: MOVEI E,C-1 ;EXTENSION INTO C + 077420 505240 020600 00730 HRLI E,20600 ;FAKE OUT END TEST OF BYTE PTR + 00740 ;STOP TAPE DRIVE + 00750 IFN MODE,<CONO UTC,0> + 077421 732200 400000 00760 IFE MODE,<CONO DTC,400000> + 077422 134120 077400 00770 NEXT: ILDB A,@BEGR ;GIVES A 0 UNLESS COMMAND POINTER SUPPLIED + 00780 ;RH OF NEXT IS USED AS A CONSTANT + 077423 475400 000207 00790 BELL: SETOI FILN,207 ;INITIALIZATION FOR SEARCH + 077424 403440 000017 00800 SETZB BLKNO,CT ; " + 077425 402000 077377 00810 SETZM LINK + 077426 326100 077433 00820 JUMPN A,RCH ;JUMP IF COMMAND READ FROM CORE + 077427 712340 000040 00830 CONSO TTY,40 ;TYPEIN FLAG? + 077430 254000 077427 00840 JRST .-1 ;NO,WAIT + 077431 712040 000002 00850 DATAI TTY,A ;GET TYPED IN CHARACTER + 077432 265300 077471 00860 JSP P,TYO ;ECHO IT (WITH PARITY) + 077433 405100 000177 00870 RCH: ANDI A,177 ;STRIP OFF PARITY + 077434 306100 000177 00880 CAIN A,177 ;RUBOUT? + 077435 254000 077400 00890 JRST BEGR ;YES. RESTART TENDMP + 077436 302100 000033 00900 CAIE A,33 ;NEW ALTMODE? + 077437 301100 000175 00910 CAIL A,175 ;OR 175 OR 176 ALTMODES? + 077440 254000 077501 00920 JRST ALTTST ;YES, SOME ALTMODE. + 077441 301100 000140 00930 CAIL A,140 ;LOWER CASE CHARACTER? + 077442 620100 000040 00940 TRZ A,40 ;YES. CHANGE TO UPPER CASE + 077443 275100 000040 00950 SUBI A,40 ;CONVERT TO SIXBIT + 077444 321100 077504 00960 JUMPL A,CARRET ;ANY CONTROL CHARACTER + 077445 322100 077417 00970 JUMPE A,SPACE ;CHAR WAS 40 + 077446 603240 770000 00980 NEXT1: TLNE E,770000 ;NO MORE THAN SIX CHARS + 077447 136100 000005 00990 IDPB A,E ;GOES INTO AC1 = B + 077450 254000 077422 01000 JRST NEXT ;GET ANOTHER CHARACTER + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 3 + TD10 VERSION + + + 01040 ;HERE ON JUMP BLOCK DURING LOADS, OR NUMBER>7 ALT + 077451 01050 JBLK: + 01060 ;STOP TAPE DRIVE + 01070 IFN MODE,<CONO UTC,0> + 077451 732200 400000 01080 IFE MODE,<CONO DTC,400000> + 077452 542200 077454 01090 HRRM D,SADR ;SAVE STARTING ADDRESS + 077453 326600 077402 01100 JUMPN CH,BEG ;IF NOT LOADGO COMMAND + 077454 254000 077402 01110 SADR: JRST BEG ;CURRENT S.A. + 077455 01120 LOADS: ;HERE TO LOAD TAPE TO CORE + 077455 201200 077176 01130 MOVEI D,LOZAD+1 ;FIRST LOC NOT TO ZERO + 077456 402000 000040 01140 SETZM 40 ;A "FEATURE" + 077457 200140 077754 01150 MOVE C,[XWD 40,41] ;PREPARE TO CLEAR CORE. + 077460 606600 000003 01160 TRNN CH,3 ;SKIP ON M,N NOT ON L,T,@ + 077461 251144 777777 01170 BLT C,-1(D) ;ZERO CORE + 077462 265640 077557 01180 LOAD: JSP Q,LODUMP ;START READING FILE. LODUMP PROCESSES + 01190 ;ONE HEADER AND ITS DATA + 077463 254000 077462 01200 JRST LOAD ;IF OK, GET NEXT BLOCK.(IF NONE, + 01210 ;LODUMP RETURNS TO JBLK.) + 077464 336240 000012 01220 DELE: SKIPN E,WRITE ;SKIP IF NOT IN THE K PHASE OF A D COMMAND. + 01230 ;OR A K COMMAND + 01240 ;ALSO, SET E =0, SO SEARCH HAPPENS IN RBLK + 077465 344500 077713 01250 CLS1: AOJA WRITE,CLSTP ; 0 TO 1. GO DUMP OUT DIRECTORY. + 077466 334300 077422 01260 ERR: SKIPA P,NEXT ;SET TO RETURN TO BEGR + 077467 334100 077413 01270 CRR: SKIPA A,CRCH ;LIKE HRROI A,215 AND SKIPA + 077470 334100 077423 01280 SKIPA A,BELL ;GET A BELL CHARACTER + 077471 336000 077777 01290 TYO: SKIPN COMPTR ;DONT TYO IF NO TYI, UNLESS ERR + 077472 712140 000002 01300 DATAO TTY,A ;TYPE OUT + 077473 712300 000020 01310 CONSZ TTY,20 ;WAIT FOR TTY TO FINISH + 077474 254000 077473 01320 JRST .-1 ;NOT YET + 077475 302100 000215 01330 CAIE A,215 ;IF CR TYPED IN, + 077476 325106 000000 01340 JUMPGE A,(P) ;OR SIGN BIT OF CHAR ON,(SEE CRR) + 077477 201100 000012 01350 MOVEI A,12 ;APPEND A LINEFEED + 077500 254000 077471 01360 JRST TYO ;GO TYPE LF + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 4 + TD10 VERSION + + 077501 607040 004040 01390 ALTTST: TLNN B,4040 ;IF ALPHA CHARACTERS, DONT GET CH + 077502 135600 000005 01400 LDB CH,E ;LAST CH BEFORE ALT, -40 + 077503 326600 077667 01410 JUMPN CH,ALTMD ;IF CH NOT NULL, GOT PROCESS ALTMODE + 077504 205400 777752 01420 CARRET: MOVSI FILN,-26 ;FILE NAME SPECIFIED. FIRST THING TO + 01430 ;DO IS LOOK IT UP IN DIRECTORY + 077505 336010 077322 01440 LUP: SKIPN TAB+123(FILN) ;SEARCH FOR FREE FILE + 077506 332450 077350 01450 SKIPE BLKNO,TAB+151(FILN) ;CHECK BOTH WORDS + 077507 634440 000011 01460 TDZA BLKNO,BLKNO ;ENSURE CLEAR BLOCK NUMBER + 077510 542400 077517 01470 HRRM FILN,FREE ;SAVE NUMBER OF A FREE FILE + 077511 510710 077350 01480 HLLZ G,TAB+151(FILN) ;ONLY CHECK LEFT OF 2ND WD + 077512 316050 077322 01490 CAMN B,TAB+123(FILN) ;SEARCH FOR TYPED-IN FILE + 077513 312140 000016 01500 CAME C,G ;BOTH WORDS + 077514 253400 077505 01510 AOBJN FILN,LUP ;NOT THIS ONE. KEEP LOOKING + 077515 321400 077522 01520 JUMPL FILN,BEG69 ;IF FILE FOUND, JUMP + 077516 323500 077466 01530 JUMPLE WRITE,ERR ;IF NOT FOUND, BETTER BE DUMP + 077517 201400 077517 01540 FREE: MOVEI FILN,. ;DUMP & NOT FOUND, MAKE ENTRY WHERE FREE + 01550 ;(ADDRESS MODIFIED ABOVE) + 077520 332010 077322 01560 SKIPE TAB+123(FILN) ;MAKE SURE HOLE AVAILABLE + 077521 254000 077466 01570 JRST ERR ;NO FREE SLOTS + + 077522 201410 000001 01590 BEG69: MOVEI FILN,1(FILN) ;FILN IS FILE #+1; CLR LH + 077523 321500 077455 01600 JUMPL WRITE,LOADS ;ALL LOAD INSTRUCTIONS + 01610 IFE MAGT,< + 077524 336000 000012 01620 SKIPN WRITE ;DELETE? (K COMMAND) + 077525 403040 000003 01630 SETZB B,C ;YES, KILL FILE + 077526 202050 077321 01640 MOVEM B,TAB+122(FILN) ;CLEAR IF DELE, ENTER IF NEW DUMP + 077527 512150 077347 01650 HLLZM C,TAB+150(FILN) ;BOTH WORDS + 01660 ;FALL INTO DUMP ROUTINE + 01670 ;WHICH IS A NO-OP FOR K + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 5 + TD10 VERSION + + + 01710 ;DUMP WRITES OUT CORE ONTO TAPE + + 01730 ;DUMP THRU DUMP2-1 SETS UP POINTERS TO NON-ZERO CORE AREAS. THESE + 01740 ;AOBJN POINTERS ARE CALLED "HEADERS", AND PRECEDE THE DATA WHEN + 01750 ;THE TAPE IS WRITTEN. + 01760 ;THE FIRST HEADER IS KEPT IN SPNT. SUCCESIVE HEADERS GO INTO THE FIRST + 01770 ;ZERO WORD FOLLOWING THE BLOCK CORRESPONDING TO THE PREVIOUS HEADER. + 01780 ;AFTER THE LAST NON-ZERO BLOCK IS (BY DEFINITION) A ZERO, WHICH + 01790 ;TERMINATES THE HEADER LIST. THIS WORD MAY BE LOCATION FOOF (37176) IF + 01800 ;CORE WAS FILLED UP TO THE BASE OF TENDMP. + + 077530 01820 DUMP: ;HERE ON D,K. (BLKN)=0, FILN SET UP + 077530 210100 077755 01830 MOVN A,[XWD HIGH-LOW-1,-LOW+1] ;COUNTER TO EXAMINE + 01840 ;CORE FOR BLOCKS OF 0 + 077531 201340 077751 01850 MOVEI CKS,SPNT-1 ;FIRST HEADER GOES INTO SPNT + 077532 336002 000001 01860 DMP1: SKIPN 1(A) ;FIND SOME NON-ZERO CORE + 077533 253100 077532 01870 AOBJN A,.-1 ;ZERO. KEEP LOOKING. + 077534 202100 000004 01880 MOVEM A,D ;SAVE ADR + 077535 336002 000001 01890 SKIPN 1(A) ;FIND SOME ZERO CORE + 077536 332002 000002 01900 SKIPE 2(A) ;DON'T MAKE NEW BLOCK FOR 1 ZERO + 077537 253100 077535 01910 AOBJN A,.-2 ;NON-ZERO. KEEP LOOKING + 077540 274200 000002 01920 SUB D,A ;GET -COUNT IN BOTH HALVES OF D + 077541 275744 777777 01930 SUBI CT,-1(D) ;COUNT N WORDS DATA, 1 HDR + 077542 271202 000000 01940 ADDI D,(A) ;GET F.A.-1 IN RH OF D + 077543 202207 000001 01950 MOVEM D,1(CKS) ;SAVE HEADER + 077544 325200 077546 01960 JUMPGE D,.+2 ;ON DATA GROUPS, + 077545 200340 000002 01970 MOVE CKS,A ;GET THE HEADER + 01980 ;F.A.+W.C. IS ADR OF NEXT HEADER + 01990 ;I.E., FIRST 0 AFTER NON-ZERO BLOCK + 077546 321100 077532 02000 JUMPL A,DMP1 ;LOOP IF MORE CORE + 077547 242340 000002 02010 LSH CKS,2 ;SHIFT CORE SIZ FOR DIR + 077550 333000 000012 02020 SKIPLE WRITE ;IF DUMPING, SET JOBREL + 077551 542350 077347 02030 HRRM CKS,TAB+150(FILN) ;PUT IN DIR + 077552 201200 077751 02040 DMP2: MOVEI D,SPNT-1 ;SET UP TO FOLLOW THE HEADERS. + 077553 201757 000001 02050 MOVEI CT,1(CT) ;CLR LH, COUNT JBLK + 077554 200204 000001 02060 DMP3: MOVE D,1(D) ;GET HEADER + 077555 325200 077566 02070 JUMPGE D,THRU ;IF NULL HEADER FOUND + 077556 201640 077554 02080 MOVEI Q,DMP3 ;Q:= DMP3 AS A RETURN AFTER AOBJN + 02090 > + + 02110 IFN MAGT,< + 02120 JRST ERR ;HOW DID WE GET HERE? DLS*** + 02130 ;DUMP WRITES OUT CORE ONTO MAGNETIC TAPE + 02140 ;DUMP WRITES OUT A CORE IMAGE ON MAGNETIC TAPE WITHOUT + 02150 ;ZERO COMPRESSION. THE RECORDS ARE 200(OCTAL) WORDS IN LENGTH + 02160 ;AND BEGIN WITH WORD ZERO. BEFORE STARTING THE TAPE IS REWOUND. + 02170 ;IT ASSUMES MTA0, AT LEAST FOR NOW. + 02180 + 02190 MTC= 340 + 02200 MTS= 344 + 02210 DUMP: CONO MTC,1000 ;REWIND + 02220 CONSO MTS,300000 ;WAIT FOR BOT OR REWINDING + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 5-1 + TD10 VERSION + + 02230 JRST .-1 + 02240 CONSO MTS,40 ;TRANSPORT READY? + 02250 JRST .-1 + 02260 SETZ A, + 02270 DUMP1: HRLI A,-200 ;WORDS PER BLOCK + 02280 CONO MTC,64100 ;START WRITE OPERATION + 02290 DUMP2: CONSO MTS,1 ;TD10 READY FOR DATA? + 02300 JRST .-1 + 02310 DATAO MTC,(A) ;SEND OUT DATA + 02320 AOBJN A,DUMP2 ;POINT TO NEXT WORD AND LOOP + 02330 CONO MTS,1 ;STOP THE DRIVE + 02340 CONSO MTS,100 ;WAIT TILL STOPPED + 02350 JRST .-1 + 02360 CONSZ MTS,464610 ;ANY ERRORS? + 02370 JRST ERR ;YES, GO RING BELL + 02380 AOSE [-CORE*20000/200+2] ;ALL CORE DUMPED? + 02390 JRST DUMP1 ;NO + 02400 CONO MTC,65100 ;WRITE END OF FILE + 02410 CONSO MTS,100 ;DONE? + 02420 JRST .-1 + 02430 CONO MTC,65100 + 02440 CONSO MTS,100 + 02450 JRST .-1 + 02460 JRST BEGR ;ALL DONE + 02470 > + + + 077557 265300 077572 02500 LODUMP: JSP P,UWAIT + 077560 255000 000004 02510 JFCL D ;IN/OUTPUT HEADER + 077561 325200 077451 02520 JUMPGE D,JBLK ;IF JRST BLOCK READ. CANT HAPPEN ON WRITE + 077562 265300 077572 02530 DMP5: JSP P,UWAIT + 077563 255004 000001 02540 JFCL 1(D) ;IN/OUTPUT DATA WORD + 077564 253200 077562 02550 AOBJN D,DMP5 ;COUNT DOWN THE HEADER + 077565 254015 000000 02560 JRST (Q) ;END OF HEADER. TO DMP3 OR LOAD+1 + 02570 ;WRITE: 1=D 0=K -1=ELSE + + 077566 265300 077572 02590 THRU: JSP P,UWAIT ;WRITE OUT JRST BLOCK + 077567 255000 077454 02600 JFCL SADR ;FROM LOC SADR + 077570 341240 077627 02610 IFE MODE,< AOJL E,UWAIT1 ;FILL OUT BLOCK, TO GET CKSM OUT> + 077571 624500 777777 02620 TRZA WRITE,-1 ;THEN SET WRITE TO 0, AND GO CLOBBER + 02630 ;ANY FURTHER BLOCKS WITH THIS FILN + 077572 341240 077627 02640 UWAIT: AOJL E,UWAIT1 ;RETURN ADDR = (P) DATA ADDR = @(P) + 02650 ;E IS -WD COUNT IN BLOCK OR POSITIVE + 02660 ;BYTE POINTER FIRST TIME THRU + 077573 554440 077377 02670 HLRZ BLKNO,LINK ;SET TO FOLLOW LINK + 077574 325500 077576 02680 MNLUP0: JUMPGE WRITE,MNLUP ;WRITING OR DELETING + 077575 326440 077620 02690 JUMPN BLKNO,RBLK + 077576 354000 000011 02700 MNLUP: AOSA BLKNO ;NEXT BLOCK IN THE DIRECTORY + 077577 137040 000013 02710 MNLUP1: DPB B,PNTR ;FOR DELETE, 0 FILE NAME AND NUMBER + 077600 134100 000013 02720 ILDB A,PNTR ;SEARCH FILE DIR + 077601 306100 000037 02730 CAIN A,37 + 077602 254000 077464 02740 JRST DELE ;END OF TAB MARKER, DELE GOES TO + 02750 ;CLSTP ON A "D" TO DUMP DIRECTORY + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 5-2 + TD10 VERSION + + 077603 661112 777777 02760 TLO A,-1(WRITE) ;0 ON D, -1 ON K OR K PHASE OF D + 077604 302402 000000 02770 CAIE FILN,(A) ;IS THIS BLOCK ASSIGNED TO CURRENT FILE? + 077605 326100 077576 02780 JUMPN A,MNLUP ;OR MAYBE FREE? JUMP IF IN USE BY + 02790 ;ANOTHER FILE. + 077606 137400 000013 02800 DPB FILN,PNTR ;SMASH AWAY WRITE BLOCK ON D OR K. BUT + 02810 ;SEE MNLUP1 ON K. + 077607 322500 077577 02820 JUMPE WRITE,MNLUP1 ;K COMMAND + 077610 336140 077377 02830 SKIPN C,LINK ;HAS LINK BEEN SET UP? + 077611 137440 077756 02840 DPB BLKNO,[XWD 101200,LINK] ;NO. PUT BLOCK IN AS FIRST BLK NO + 077612 506440 077377 02850 HRLM BLKNO,LINK ;PUT BLOCK IN AS LINK + 077613 322140 077574 02860 JUMPE C,MNLUP0 ;JUMP IF THIS IS THE FIRST PASS THRU DIRECTORY + 077614 554440 000003 02870 HLRZ BLKNO,C ;GET LINKED BLOCK CHOSEN BEFORE + 077615 201140 000177 02880 MOVEI C,177 ;PUT IN A WORD COUNT FOR PIP + 077616 436140 077377 02890 IORM C,LINK ;AND PUT ALL THAT INTO LINK WORD + 077617 275740 000177 02900 SUBI CT,177 ;DECREMENT WORDS LEFT TO GO + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 6 + TD10 VERSION + + + 02940 ;RBLK SEARCHES FOR THE BLOCK IN BLKNO, ENTERS IT GOING FORWARD, + 02950 ;AND THEN READS INTO CORE, DUMPS CORE, OR COMPARES CORE AS + 02960 ;DETERMINED BY CONTENTS OF WRITE. + + 077620 560140 077744 02980 RBLK: HRRO C,TAPENO ;CURRENT TAPE NO. + 02990 ;SET LH TO PREPARE FOR JUMPN IN DELE + 03000 IFE MODE,< + 077621 660040 777777 03010 TRO B,-1 ;ENSURE GOING FORWARD WHEN FIRST SEARCH + 077622 732340 300000 03020 CONSO DTC,300000 ;IS A DIRECTION ASSERTED? + 077623 660140 210000 03030 TRO C,210000 ;NO. GO FORWARD + 077624 606040 400001 03040 RB1: TRNN B,400001 ;DECIDE WHETHER TO TURN AROUND + 077625 660140 300000 03050 TRO C,300000 ;TURN AROUND + 077626 732203 020200 03060 RBG: CONO DTC,20200(C) ;ISSUE THE COMMAND TO TD10. + 03070 ;200=SEARCH, 300=READ, 700=WRITE. + 077627 732700 672700 03080 UWAIT1: CONSZ DTS,672700 ;ANY ERRORS? + 077630 254000 077466 03090 JRST ERR ;YES. GO DING AND THEN TYI + 077631 732740 000001 03100 CONSO DTS,1 ;DATA READY? + 077632 254000 077627 03110 JRST .-3 ;NO. GO WAIT SOME MORE + 077633 321252 077660 03120 JUMPL E,INOUT(WRITE) ;IF IN MIDST OF A DT BLOCK, DISPATCH + 077634 732040 000001 03130 DATAI DTC,B ;NO. SEARCHING. GET BLOCK NO. + 077635 620140 310000 03140 TRZ C,310000 ;CLOBBER DIRECTION BITS IN CONO + 077636 275051 000000 03150 SUBI B,(BLKNO) ;COMPARE WITH DESIRED BLOCK + 077637 732300 100000 03160 CONSZ DTC,100000 ;COMPLEMENT DECISION IF GOING REVERSE + 077640 640040 777776 03170 TRC B,-2 ;BIT 35 IS FOR TURNAROUND SPACE. + 03180 > + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 7 + TD10 VERSION + + + 03210 IFN MODE,< + 03220 SETOB A,B ;GO FORWARD, SET DC FOR SEARCH + 03230 CONSZ UTS,40 ;IS CHECKSUM BEING WRITTEN? + 03240 JRST .-1 ;WAIT + 03250 RB1: TRNN B,400001 ;DECIDE WHETHER TO TURN AROUND + 03260 TRCA C,10000 ;CHANGE DIRECTION AND DELAY + 03270 CONSO UTC,200000 ;UNIT SELECTED? + 03280 TRO C,2000 ;INVOKE STARTUP DELAY + 03290 RBG: CONO UTC,220200(C) ;COMMAND TO THE 551. + 03300 ;200=SEARCH, 300=READ, 700=WRITE. + 03310 CONO DC,4011(A) ;COMMAND TO THE 136. + 03320 UWAIT1: CONSZ UTS,6 ;ANY ERRORS? + 03330 JRST ERR ;YES. GO DING AND THEN TYI + 03340 CONSO DC,1000 ;DATA READY? + 03350 JRST .-3 ;NO. WAIT SOME MORE + 03360 JUMPL E,INOUT(WRITE) ;IF IN MIDST OF A DT BLOCK, DISPATCH + 03370 DATAI DC,B ;NO. SEARCHING. GET BLOCK NUMBER + 03380 TRZ C,2000 ;DONT DELAY ANY MORE + 03390 SUBI B,(BLKNO) ;COMPARE WITH DESIRED BLOCK + 03400 TRNE C,10000 ;COMPLEMENT IF GOING REVERSE + 03410 TRC B,-2 ;BIT 35 IS FOR TURNAROUND SPACE. + 03420 > + 077641 326040 077624 03430 JUMPN B,RB1 ;JUMP IF NOT GOING FORWARD INTO (BLKNO) + 077642 211240 000200 03440 MOVNI E,200 ;WORDS PER BLOCK + 077643 202300 000000 03450 MOVEM P,F ;SAVE RETURN IN AC0 + 077644 660140 000100 03460 TRO C,100 ;READ COMMAND, MAYBE + 077645 323500 077652 03470 JUMPLE WRITE,RB2 ;JUMP IF READ + 077646 660140 000400 03480 TRO C,400 ;CHANGE TO WRITE COMMAND + 03490 IFN MODE,<MOVNI A,401 ;SET 136 TO OUTPUT> + 077647 327740 077652 03500 JUMPG CT,.+3 + 077650 553000 077377 03510 HRRZS LINK ;IF LAST BLK, KILL LINK + 077651 137240 000013 03520 DPB E,PNTR ;AND THE DIR BYTE ? 0 + 077652 302440 000144 03530 RB2: CAIE BLKNO,^D100 ;IF NOT DIRECTORY BLOCK + 077653 201300 077655 03540 MOVEI P,.+2 ;SETUP NEW RETURN + 077654 254000 077626 03550 JRST RBG + 077655 340240 077377 03560 AOJ E,LINK ;IN/OUTPUT LINK + 077656 267300 077627 03570 JRA P,UWAIT1 ;RESTORE CALLER ADR + 03580 ;AND PROCESS DATA WORDS + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 8 + TD10 VERSION + + + 03610 IFE MODE,< + 077657 732066 000000 03620 DATAI DTC,@(P) ;READ COMMANDS. GET WORD TO CORE + 077660 254000 077662 03630 INOUT: JRST UWAIT2 ;INOUT-1 TO INOUT +1 ARE DISPATCHED TO. + 077661 732166 000000 03640 DATAO DTC,@(P) ;OUTPUT TO TAPE + 077662 346240 077666 03650 UWAIT2: AOJN E,UWAIT3 ;WAS THAT THE LAST WORD IN THE DT BLOCK? + 077663 732600 000001 03660 CONO DTS,1 ;YES. GIVE FUNCTION STOP TO TD10 + 077664 732740 100000 03670 CONSO DTS,100000 ;AND WAIT FOR CHECKSUM TO BE DONE + 077665 254000 077664 03680 JRST .-1 ;NOT YET. WAIT + 077666 364246 000000 03690 UWAIT3: SOJA E,0(P) ;DONE. COMPENSATE FOR THE AOJN ABOVE, AND + 03700 ;RETURN TO CALLER OF UWAIT OR RBLK + 03710 > + + 03730 IFN MODE,< + 03740 DATAI DC,@(P) ;READ COMMANDS. GET WORD TO CORE + 03750 INOUT: JRST UWAIT2 ;INOUT-1 THRU INOUT+1 ARE DISPATCHED TO. + 03760 DATAO DC,@(P) ;OUTPUT TO TAPE + 03770 UWAIT2: JRST 0(P) ;RETURN TO CALLER OF UWAIT OR RBLK. + 03780 > + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 9 + TD10 VERSION + + + 077667 201100 000044 03810 ALTMD: MOVEI A,"$" + 077670 265300 077471 03820 JSP P,TYO ;ALTMODE IS PRINTED AS "$" + + 03840 IFE MAGT,< + 077671 302600 000053 03850 CAIE CH,"K"-40 ;FOR K, WRITE := 0 + 077672 306600 000044 03860 CAIN CH,"D"-40 ;FOR D, WRITE :=1 + 077673 343500 077672 03870 AOJLE WRITE,.-1 ;COUNT (WRITE) + 03880 > + + 03900 IFN MAGT,< + 03910 CAIN CH,"D"-40 ;FOR D, WRITE :=1 + 03920 AOJLE WRITE,.-1 ;COUNT (WRITE) + 03930 JUMPG WRITE,DUMP ;D MEANS GO DUMP ON MAG TAPE + 03940 > + + 077674 306600 000047 03960 CAIN CH,"G"-40 ;GO TO PROGRAM? + 077675 254020 077454 03970 JRST @SADR ;YES. JUMP OUT + 077676 306600 000046 03980 CAIN CH,"F"-40 ;FILE DIR PRINT? + 077677 254000 077732 03990 JRST FDIR ;YES. PRINT FILE DIR OF THIS TAPE + 077700 306600 000072 04000 CAIN CH,"Z"-40 ;ZERO DIRECTORY? + 077701 254000 077721 04010 JRST ZDIR ;DISPATCH + 077702 303600 000027 04020 CAILE CH,27 ;SKIP IF OCTAL NUMBER + 077703 254000 077414 04030 JRST TYI ;NO. GO PROCESS FILE NAME + 077704 242040 000003 04040 LSH B,3 ;CONVERT SIXBIT TO OCTAL + 077705 246000 000003 04050 LSHC F,3 ;F+1=B + 077706 326040 077704 04060 JUMPN B,.-2 ;MAY BE MORE THAN 1 DIGIT (START ADR) + 077707 303000 000007 04070 CAILE F,7 ;SKIP IF ONE DIGIT + 077710 267200 077451 04080 JRA D,JBLK ;D:=SADR. DISPATCH TO JBLK WHICH SAVES SADR. + 077711 04090 OPNTP: ;SHIFT UNIT NUMBER LEFT FOR CONO + 077711 242000 000011 04100 IFE MODE,<LSH F,11> + 04110 IFN MODE,<LSH F,3> + 077712 542000 077744 04120 HRRM F,TAPENO ;SAVE IN CORE + 077713 201440 000144 04130 CLSTP: MOVEI BLKNO,^D100 ;BLK NO OF FILE DIR + 077714 401540 000000 04140 SETZI PNTR,0 ;DONT CLOBBER DIRECTORY BYTE + 077715 265300 077620 04150 JSP P,RBLK ;MOVE TO BLOCK 100 + 077716 255005 077377 04160 JFCL TAB+200(E) ;READ OR WRITE DIR TAB AS DETERMINED BY WRITE + 077717 341240 077627 04170 AOJL E,UWAIT1 ;COUNT THE 200 WORDS + 077720 254000 077402 04180 JRST BEG ;GO ASK FOR NEXT COMMAND + + 077721 200100 077757 04200 ZDIR: MOVE A,[XWD FOOF,TAB] ;FOOF IS CLEAR + 077722 251100 077375 04210 BLT A,TAB+176 ;CLEAR DIRECTORY, EXCEPT LAST WORD FOR ID + 077723 205100 757000 04220 MOVSI A,(36B4+36B9) ;RESERVE BLOCKS 1 & 2 + 077724 202100 077177 04230 MOVEM A,TAB ;IN DIRECTORY + 077725 205100 017000 04240 MOVSI A,(36B9) + 077726 202100 077215 04250 MOVEM A,TAB+16 ;BLK 100 (DIR) IS RESERVED TOO + 077727 525100 000007 04260 HRLOI A,7 ;AND BLOCKS >1100 ARE EOT + 077730 202100 077321 04270 MOVEM A,TAB+122 ;END OF BYTE TAB + 077731 344500 077465 04280 AOJA WRITE,CLS1 ;SET WRITE TO OUTPUT + 04290 ;AND DUMP BLK 100. + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 10 + TD10 VERSION + + 077732 211400 000026 04310 FDIR: MOVNI FILN,26 ;26 FILES (OCTAL) + 077733 265300 077467 04320 FD2: JSP P,CRR ;CR-LF + 077734 336150 077350 04330 FD3: SKIPN C,TAB+123+26(FILN) ;FIRST WORD OF NAME. IS IT BLANK? + 077735 344140 077741 04340 AOJA C,FD1 ;YES. SET C=1 AND LOOP + 077736 265700 077743 04350 JSP G,SIXBP ;PRINT FIRST WORD AND A SPACE + 077737 510150 077376 04360 HLLZ C,TAB+151+26(FILN) ;SECOND WORD OF FILE NAME + 077740 265700 077743 04370 JSP G,SIXBP ;PRINT AND CLEAR C + 077741 341403 077733 04380 FD1: AOJL FILN,FD2(C) ;CAN JUMP TO FD2 OR FD3. COUNT FILES. + 077742 254000 077402 04390 JRST BEG ;ALL FILES PRINTED OR BLANK. RETURN. + + 077743 201040 000007 04410 SIXBP: MOVEI B,7 ;SIXBP PRINTS C(C) IN 6BIT + 04420 ;AND ADDS A TRAILING SPACE + 04430 ;AND LEAVES (C)=0 + + 077744 04450 TAPENO: ;USE ADR AS TEMP FOR CURRENT UNIT + 077744 401100 000000 04460 SIXBP1: SETZI A,.-. ;CLEAR A + 077745 246100 000006 04470 LSHC A,6 + 077746 271100 000040 04480 ADDI A,40 ;SIXBIT TO ASCII + 077747 265300 077471 04490 JSP P,TYO ;TYPE OUT CHARACTER + 077750 367040 077744 04500 SOJG B,SIXBP1 ;LOOP IF MORE CHARACTERS + 077751 254016 000000 04510 JRST 0(G) ;RETURN + + 077752 000000 000000 04530 SPNT: 0 ;POINTER TO HEADERS IN CORE. + + 077753 04550 LIT + 077753 000500 077176 + 077754 000040 000041 + 077755 077154 777761 + 077756 101200 077377 + 077757 077176 077177 + + + 04580 IFN MAGT,< + 04590 SLOP: MOVE .+3 + 04600 MOVEM COMPTR + 04610 JRST BEGR+1 + 04620 XWD 440700,.+1 + 04630 BYTE (7) "0",33,177 + 04640 LAST: JRST SLOP + 04650 > + 04660 IFE MAGT,< + 000000 04670 SLOP=COMPTR-17-. ;THIS MANY WORDS BEFORE RESERVED AREA + 04680 ;FOR COMMAND STRINGS. + 04690 ;!!!!! NOTE: ABOVE PARAMETER MUST COME OUT POSITIVE IN + 04700 ; ORDER TO MEET THE DOCUMENTATION OF RESERVED COMMAND STRING AREA. + 04710 ; + 04720 ; THIS MEANS ANY CODE ADDED MUST BE COMPENSATED FOR BY + 04730 ; A CORRESPONDING TIGHTENING SOMEWHERE. GOOD LUCK. + 04740 ; TENDMP IS VERY TIGHT ALREADY. + 04750 > + + 077400 04770 END BEGR + + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 10-1 + TD10 VERSION + +NO ERRORS DETECTED + +PROGRAM BREAK IS 000000 +ABSLUTE BREAK IS 077760 + +8K CORE USED + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 11 + SYMBOL TABLE + + 000133 +A 000002 +ALTMD 077667 +ALTTST 077501 +B 000001 +BEG 077402 +BEG1 077404 +BEG69 077522 +BEGR 077400 +BELL 077423 +BLKNO 000011 +C 000003 +CARRET 077504 +CH 000014 +CKS 000007 +CLS1 077465 +CLSTP 077713 +COMPTR 077777 +CORE 000004 +CRCH 077413 +CRR 077467 +CT 000017 +D 000004 +DC 000200 +DELE 077464 +DMP1 077532 +DMP2 077552 +DMP3 077554 +DMP5 077562 +DTC 000320 +DTS 000324 +DUMP 077530 +E 000005 +ERR 077466 +F 000000 +FD1 077741 +FD2 077733 +FD3 077734 +FDIR 077732 +FILN 000010 +FOOF 077176 +FREE 077517 +G 000016 +HIGH 077175 +INOUT 077660 +JBLK 077451 +LINK 077377 +LOAD 077462 +LOADS 077455 +LODUMP 077557 +LOW 000020 +LOZAD 077175 +LUP 077505 + TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 PAGE 11-1 + SYMBOL TABLE + +MAGT 000000 +MNLUP 077576 +MNLUP0 077574 +MNLUP1 077577 +MODE 000000 +NEXT 077422 +NEXT1 077446 +OPNTP 077711 +P 000006 +PNTR 000013 +Q 000015 +RB1 077624 +RB2 077652 +RBG 077626 +RBLK 077620 +RCH 077433 +REL 000000 +SADR 077454 +SIXBP 077743 +SIXBP1 077744 +SLOP 000000 +SPACE 077417 +SPNT 077752 +TAB 077177 +TAPENO 077744 +THRU 077566 +TTY 000120 SPD +TYI 077414 +TYO 077471 +UTC 000210 +UTS 000214 +UWAIT 077572 +UWAIT1 077627 +UWAIT2 077662 +UWAIT3 077666 +WRITE 000012 +ZDIR 077721 + RRRRRRRRRRRR IIIIIIIII MMM MMM 111 000000000 BBBBBBBBBBBB +RRRRRRRRRRRR IIIIIIIII MMM MMM 111 000000000 BBBBBBBBBBBB +RRRRRRRRRRRR IIIIIIIII MMM MMM 111 000000000 BBBBBBBBBBBB +RRR RRR III MMMMMM MMMMMM 111111 000 000 BBB BBB +RRR RRR III MMMMMM MMMMMM 111111 000 000 BBB BBB +RRR RRR III MMMMMM MMMMMM 111111 000 000 BBB BBB +RRR RRR III MMM MMM MMM 111 000 000000 BBB BBB +RRR RRR III MMM MMM MMM 111 000 000000 BBB BBB +RRR RRR III MMM MMM MMM 111 000 000000 BBB BBB +RRRRRRRRRRRR III MMM MMM 111 000 000 000 BBBBBBBBBBBB +RRRRRRRRRRRR III MMM MMM 111 000 000 000 BBBBBBBBBBBB +RRRRRRRRRRRR III MMM MMM 111 000 000 000 BBBBBBBBBBBB +RRR RRR III MMM MMM 111 000000 000 BBB BBB +RRR RRR III MMM MMM 111 000000 000 BBB BBB +RRR RRR III MMM MMM 111 000000 000 BBB BBB +RRR RRR III MMM MMM 111 000 000 BBB BBB +RRR RRR III MMM MMM 111 000 000 BBB BBB +RRR RRR III MMM MMM 111 000 000 BBB BBB +RRR RRR IIIIIIIII MMM MMM 111111111 000000000 BBBBBBBBBBBB +RRR RRR IIIIIIIII MMM MMM 111111111 000000000 BBBBBBBBBBBB +RRR RRR IIIIIIIII MMM MMM 111111111 000000000 BBBBBBBBBBBB + + + + +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSSSSSSSSSSS TTTTTTTTTTTTTTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSSSSSSSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLL SSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT +LLLLLLLLLLLLLLL SSSSSSSSSSSS TTT + + + + +Request created: 24-April-1978 11:23:08 +File: DSKB0 :RIM10B.LST [8,200] Created: 20-April-1967 11:21:00 Printed: 24-April-1978 11:22:33 +QUEUE Switches: /PRINT:ARROW /FILE:ASCII /COPIES:1 /SPACING:1 /LIMIT:1508 +File will be deleted after printing + RIMIO PAGE 2 + + + 00020 TITLE RIMIO + + 00040 ;CONVERTS RIM10B PAPER TAPES TO DMP FILES AND VICE-VERSA + + 00060 EXTERN JOBSA,JOBREL,JOBSYM,JOBS41 + + 000001 00080 A=1 + 000002 00090 B=2 + 000003 00100 C=3 + 000004 00110 D=4 + 000013 00120 CHK=13 + 000014 00130 BLK=14 + 000015 00140 LNG=15 + 000016 00150 R=16 + 000017 00160 P=17 + + 000040 00180 PDLEN==40 + + 000000' 00200 PDLIST: BLOCK PDLEN + + 000040' 00220 OFILE: BLOCK 5 ;OFILE+4 IS THE DEVICE. + 000045' 00230 IFILE: BLOCK 5 ;IFILE+4 IS THE DEVICE + 000052' 00240 OBUF: BLOCK 3 + 000055' 00250 IBUF: BLOCK 3 + + 000060' 00270 DMPBUF: BLOCK 200 ;RANDOM ACCESS DUMP IO BUFFER. + 000260' 000000 000000 00280 HILOC: 0 + RIMIO PAGE 3 + + + 00300 ;ERRORS: + + 00320 NOENT: OUTSTR [ASCIZ/Enter to create output file failed. + 000261' 000000 000551' 00330 /] + 000262' 254000 000273' 00340 JRST BEGIN + + 00360 NOLALT: OUTSTR [ASCIZ/Lookup to read-alter the output file failed. + 000263' 000000 000561' 00370 /] + 000264' 254000 000273' 00380 JRST BEGIN + + 00400 NOALT: OUTSTR [ASCIZ/Enter to read-alter the output file failed. + 000265' 000000 000573' 00410 /] + 000266' 254000 000273' 00420 JRST BEGIN + + 00440 NOPTR: OUTSTR [ASCIZ/OPEN of device PTR: failed. + 000267' 000000 000605' 00450 /] + 000270' 254000 000273' 00460 JRST BEGIN + + 00480 NOOPEN: OUTSTR [ASCIZ/OPEN failed + 000271' 000000 000613' 00490 /] + 000272' 254000 000273' 00500 JRST BEGIN + + RIMIO PAGE 4 + + + 00530 ;INITIALIZATION, DISPATCH + + 000273' 000000 000000 00550 BEGIN: RESET + 000274' 200740 000616' 00560 MOVE P,[IOWD PDLEN,PDLIST] + 000275' 000000 000617' 00570 RORP: OUTSTR [ASCIZ/Read tape or Punch tape? (Type R or P) /] + 000276' 000000 000001 00580 INCHWL A + 000277' 260740 000307' 00590 PUSHJ P,CLRIN + 000300' 620040 000040 00600 TRZ A,40 ;MAKE SURE IT'S UPPERCASE + 000301' 306040 000122 00610 CAIN A,"R" + 000302' 254000 000334' 00620 JRST RTAPE + 000303' 306040 000120 00630 CAIN A,"P" + 000304' 254000 000547' 00640 JRST PTAPE + 00650 OUTSTR [ASCIZ/? + 000305' 000000 000630' 00660 /] + 000306' 254000 000275' 00670 JRST RORP + + 000307' 261740 000001 00690 CLRIN: PUSH P,A + 000310' 302040 000175 00700 CLRIN1: CAIE A,175 + 000311' 306040 000012 00710 CAIN A,12 + 000312' 254000 000533' 00720 JRST APOPJ + 000313' 000000 000001 00730 INCHWL A + 000314' 254000 000310' 00740 JRST CLRIN1 + + 00760 ;HERE'S HOW THE RIM10B LOADER LOOKS ON THE TAPE: + 000104 00770 PTR==104 + 00780 ;AC 10 CONTAINS (WHEN 5 IS EXECUTED): + 00790 ; SOJA 10,4 - INITIAL POINTER OR JRST WORD + 00800 ; SOJA 10,3 - MIDDLE OF DATA BLOCK + 00810 ; SOJA 10,2 - WHEN READING THE CHECKSUM WORD + 00820 ; + 000315' 777762 000000 00830 RIM10B: -16,,0 ; 0 INITIAL BLKI WORD + 000316' 710600 000060 00840 CONO PTR,60 ; 1 START PTR IN BINARY MODE + 000317' 541400 000004 00850 HRRI 10,4 ; 2 INITIALIZE 10 (FOR INDEX AND JUMP ADDR) + 000320' 710740 000010 00860 CONSO PTR,10 ; 3 SKIP IF DONE + 000321' 254000 000003 00870 JRST 3 ; 4 WAIT FOR DONE + 000322' 710470 000007 00880 DATAI PTR,@7(10) ; 5 STORE DATA INDIRECT (13 OR 12 OR 11) + 000323' 256010 000007 00890 XCT 7(10) ; 6 EXECUTES 13 OR 12 OR 11 + 000324' 256010 000012 00900 XCT 12(10) ; 7 EXECUTES 16 OR 15 OR 14 + 000325' 364400 000000 00910 SOJA 10,0 ;10 RH IS CLOBBERED TO 4 OR 3 OR 1 + 000326' 312740 000016 00920 CAME 17,16 ;11 XCTED TO CHECK CHECKSUM + 000327' 270756 000001 00930 ADD 17,1(16) ;12 XCTED TO COMPUTE CHECKSUM + 000330' 331740 000016 00940 SKIPL 17,16 ;13 XCT TO INITIALIZE CHECKSUM AND + 00950 ; SKIP IF THIS IS AN AOBJN WORD + 000331' 254200 000001 00960 JRST 4,1 ;14 XCT TO HALT IF CHECKSUM FAILS + 000332' 253700 000003 00970 AOBJN 16,3 ;15 XCT WHILE READING MIDDLE OF DATA BLOCK + 000333' 254000 000002 00980 JRST 2 ;16 XCTED BY READIN MODE. XCT TO START PRGM + 00990 ;17 CHECKSUM IS STORED HERE. + +Q 000334' 01010 RIMPTR: RIM10B-.,,RIM10B-1 ;IOWD POINTER TO THE RIM10B LOADER + RIMIO PAGE 5 + + + 01030 ;RTAPE + + 000334' 000000 000631' 01050 RTAPE: OUTSTR [ASCIZ/Output file name: /] + 000335' 201700 000040' 01060 MOVEI R,OFILE + 000336' 200040 000635' 01070 MOVE A,[OFILE,,OFILE+1] + 000337' 402000 000040' 01080 SETZM OFILE + 000340' 251040 000044' 01090 BLT A,OFILE+4 + 000341' 205040 445560 01100 MOVSI A,'DMP' + 000342' 202040 000041' 01110 MOVEM A,OFILE+1 + 000343' 260740 000543' 01120 PUSHJ P,GETFIL ;READ FILE NAME FROM USER. + + 000344' 201040 000017 01140 MOVEI A,17 ;OPEN CHANNEL + 000345' 336100 000044' 01150 SKIPN B,OFILE+4 + 000346' 205100 446353 01160 MOVSI B,'DSK' + 000347' 201140 000000 01170 MOVEI C,0 + 000350' 050040 000001 01180 OPEN 1,A + 000351' 254000 000271' 01190 JRST NOOPEN + 000352' 200200 000636' 01200 MOVE D,[OFILE,,A] + 000353' 251200 000004 01210 BLT D,D + 000354' 077040 000001 01220 ENTER 1,A ;SELECT OUTPUT FILE. + 000355' 254000 000261' 01230 JRST NOENT + 000356' 070040 000000 01240 CLOSE 1, ;WRITE 0 LENGTH FILE. + 000357' 071040 000000 01250 RELEAS 1, + 000360' 201040 000017 01260 MOVEI A,17 ;RE-OPEN CHANNEL + 000361' 336100 000044' 01270 SKIPN B,OFILE+4 + 000362' 205100 446353 01280 MOVSI B,'DSK' + 000363' 201140 000000 01290 MOVEI C,0 + 000364' 050040 000001 01300 OPEN 1,A + 000365' 254000 000271' 01310 JRST NOOPEN + 000366' 200200 000636' 01320 MOVE D,[OFILE,,A] + 000367' 251200 000004 01330 BLT D,D + 000370' 076040 000001 01340 LOOKUP 1,A ;SEEK FILE WE JUST WROTE + 000371' 254000 000263' 01350 JRST NOLALT ;I JUST WROTE ONE. WHERE IS IT? + 000372' 200200 000636' 01360 MOVE D,[OFILE,,A] + 000373' 251200 000004 01370 BLT D,D + 000374' 077040 000001 01380 ENTER 1,A ;ENTER READ-ALTER MODE + 000375' 254000 000265' 01390 JRST NOALT + + 000376' 041000 000013 01410 INIT 0,13 ;PTR IN BINARY MODE. + 000377' 606462 000000 01420 'PTR ' + 000400' 000000 000055' 01430 IBUF + 000401' 254000 000267' 01440 JRST NOPTR + + 01460 OUTSTR [ASCIZ/Mount paper tape and type return when ready: + 000402' 000000 000637' 01470 /] + 000403' 201040 000000 01480 MOVEI A,0 + 000404' 260740 000307' 01490 PUSHJ P,CLRIN + + 000405' 200100 000334' 01510 MOVE B,RIMPTR + 000406' 260740 000462' 01520 PUSHJ P,TREAD ;READ IOWD FOR TAPE'S LOADER + 000407' 313042 000001 01530 CAMLE A,1(B) ;OK IF TAPE'S LOADER IS LONGER + 000410' 254000 000454' 01540 JRST BADRIM ;BUT NOT IF SHORTER. + 000411' 200140 000001 01550 MOVE C,A ;IOWD FOR TAPE'S LOADER + RIMIO PAGE 5-1 + + + 000412' 270100 000651' 01560 ADD B,[1,,1] + 000413' 260740 000462' 01570 RIMCHK: PUSHJ P,TREAD ; + 000414' 312042 000001 01580 CAME A,1(B) + 000415' 254000 000454' 01590 JRST BADRIM ;TAPE ISN'T IN RIM FORMAT. + 000416' 270140 000651' 01600 ADD C,[1,,1] + 000417' 253100 000413' 01610 AOBJN B,RIMCHK ;LOOP, GOBBLING THE RIM10B LOADER. + 000420' 327140 000423' 01620 JUMPG C,RIMOK ;JUMP IF TAPE'S IOWD IS COUNTED OUT + 000421' 260740 000462' 01630 PUSHJ P,TREAD ;READ AND THROW OUT EXTRA WORDS + 000422' 253140 000421' 01640 AOBJN C,.-1 ;FROM THE TAPE'S LOADER. + 000423' 260740 000524' 01650 RIMOK: PUSHJ P,FILINI + 000424' 260740 000462' 01660 GETBLK: PUSHJ P,TREAD + 000425' 331100 000001 01670 SKIPL B,A ;SKIP IF THIS IS A POINTER WORD + 000426' 254000 000443' 01680 JRST SSTART ;SET STARTING ADDRESS + 000427' 200540 000002 01690 MOVE CHK,B ;INITIALIZE CHECKSUM + 000430' 260740 000462' 01700 RIMLP: PUSHJ P,TREAD + 000431' 270540 000001 01710 ADD CHK,A + 000432' 260740 000473' 01720 PUSHJ P,FILSTR ;STORE IN FILE. DATA A IN LOC 1(B) + 000433' 253100 000430' 01730 AOBJN B,RIMLP ;LOOP + 000434' 260740 000462' 01740 PUSHJ P,TREAD ;READ CHECKSUM WORD + 000435' 316040 000013 01750 CAMN A,CHK + 000436' 254000 000424' 01760 JRST GETBLK ;GET ANOTHER IOWD. + 01770 OUTSTR [ASCIZ/Checksum failure. + 000437' 000000 000652' 01780 /] + 000440' 254200 000424' 01790 HALT GETBLK + + 01810 UNEOF: OUTSTR [ASCIZ/Unexpected End of File from PTR: + 000441' 000000 000656' 01820 /] + 000442' 201040 000000 01830 MOVEI A,0 ;STORE ZERO FOR THE STARTING ADDRE. + 000443' 200100 000260' 01840 SSTART: MOVE B,HILOC ;GET HIGHEST LOC LOADED. + 000444' 505042 000001 01850 HRLI A,1(B) ;ONE BEYOND IS INITIAL JOBFF + 000445' 201100 777777* 01860 MOVEI B,JOBSA-1 + 000446' 260740 000473' 01870 PUSHJ P,FILSTR + 000447' 260740 000535' 01880 PUSHJ P,FILFRC + 000450' 070040 000000 01890 CLOSE 1, + 000451' 071040 000000 01900 RELEAS 1, + 000452' 071000 000000 01910 RELEAS 0, + 000453' 254000 000273' 01920 JRST BEGIN + + 01940 BADRIM: OUTSTR [ASCIZ/Bad format RIM10B loader at the front of the tape? + 000454' 000000 000665' 01950 /] + 000455' 254000 000273' 01960 JRST BEGIN + + 01980 PTRERR: OUTSTR [ASCIZ/PTR input error + 000456' 000000 000700' 01990 /] + 000457' 062000 000001 02000 GETSTS 0,A + 000460' 254200 000461' 02010 HALT .+1 + 000461' 060000 000010 02020 SETSTS 0,10 + 000462' 373000 000057' 02030 TREAD: SOSLE IBUF+2 + 000463' 254000 000471' 02040 JRST TRED1 + 000464' 066000 000000 02050 INPUT 0, + 000465' 063000 020000 02060 STATZ 0,20000 + 02070 JRST [POP P,(P) + 000466' 254000 000704' 02080 JRST UNEOF] + RIMIO PAGE 5-2 + + + 000467' 063000 740000 02090 STATZ 0,740000 + 000470' 254000 000456' 02100 JRST PTRERR + 000471' 134040 000056' 02110 TRED1: ILDB A,IBUF+1 + 000472' 263740 000000 02120 POPJ P, + + 000473' 201142 000001 02140 FILSTR: MOVEI C,1(B) ;C?ABSOLUTE ADDRESS. + 000474' 306140 000036 02150 CAIN C,36 ;EXEC MODE JOBSYM? + 000475' 201140 000000* 02160 MOVEI C,JOBSYM + 000476' 306140 000041 02170 CAIN C,41 ;UUO TRAP? + 000477' 201140 000000* 02180 MOVEI C,JOBS41 ;YES. HERE'S WHERE IT BELONGS IN DMP FORMAT + 000500' 313140 000260' 02190 CAMLE C,HILOC ;IS THIS HIGHEST LOC LOADED THUS FAR? + 000501' 202140 000260' 02200 MOVEM C,HILOC ;YES. SAVE HIGHEST LOC LOADED. + 000502' 275140 000074 02210 SUBI C,74 ;OFFSET TO DMP FILE ORIGIN=WORD # IN FILE. + 000503' 321140 000534' 02220 JUMPL C,CPOPJ ;RETURN IF OFF THE FRONT. + 000504' 231140 000200 02230 IDIVI C,200 ;BLOCK NUMBER-1 IN C, WORD NUMBER IN D. + 000505' 271140 000001 02240 ADDI C,1 ;THIS IS THE USET POINTER + 000506' 306154 000000 02250 CAIN C,(BLK) ;SAME AS WHAT'S IN CORE? + 000507' 254000 000522' 02260 JRST FILST2 ;YES. - THIS IS THE EASY CASE. + 000510' 260740 000535' 02270 FILST0: PUSHJ P,FILFRC ;FORCE CURRENT RECORD OUT. ADVANCE TO NEXT + 000511' 307155 000000 02280 CAIG C,(LNG) ;IS DESIRED RECORD WITHIN EXISTING FILE? + 000512' 254000 000515' 02290 JRST FILST1 ;YES. READ IT (UNLESS THE LAST RECORD) + 000513' 201615 000000 02300 MOVEI BLK,(LNG) ;SET TO APPEND A ZERO RECORD TO THE FILE. + 000514' 254000 000510' 02310 JRST FILST0 + + 000515' 201603 000000 02330 FILST1: MOVEI BLK,(C) ;MAKE DESIRED RECORD THE CURRENT RECORD + 000516' 301615 000000 02340 CAIL BLK,(LNG) ;IS THIS THE NON-EX RECORD AT END OF FILE? + 000517' 254000 000522' 02350 JRST FILST2 ;YES. WE CAN'T (AND DON'T NEED TO) READ IT. + 000520' 074054 000000 02360 USETI 1,(BLK) + 02370 INPUT 1,[-200,,DMPBUF-1 + 000521' 066040 000706' 02380 0] + 000522' 202044 000060' 02390 FILST2: MOVEM A,DMPBUF(D) ;STORE DATA + 000523' 263740 000000 02400 POPJ P, + + 000524' 201600 000001 02420 FILINI: MOVEI BLK,1 ;REC # THAT IS "IN CORE". + 000525' 201640 000001 02430 MOVEI LNG,1 ;RECORD NUMBER OF EOF + 000526' 402000 000260' 02440 SETZM HILOC ;HIGHEST LOCATION LOADED + 000527' 402000 000060' 02450 FILCLR: SETZM DMPBUF + 000530' 261740 000001 02460 PUSH P,A + 000531' 200040 000710' 02470 MOVE A,[DMPBUF,,DMPBUF+1] + 000532' 251040 000257' 02480 BLT A,DMPBUF+177 + 000533' 262740 000001 02490 APOPJ: POP P,A + 000534' 263740 000000 02500 CPOPJ: POPJ P, + + 000535' 075054 000000 02520 FILFRC: USETO 1,(BLK) ;SELECT OUTPUT RECORD ALWAYS + 02530 OUTPUT 1,[-200,,DMPBUF-1 ;WRITE CURRENT RECORD. + 000536' 067040 000706' 02540 0] + 000537' 271600 000001 02550 ADDI BLK,1 + 000540' 315640 000014 02560 CAMGE LNG,BLK + 000541' 200640 000014 02570 MOVE LNG,BLK ;INCREASE LNG IF INCREASING FILE. + 000542' 254000 000527' 02580 JRST FILCLR ;NEXT RECORD NUMBER + RIMIO PAGE 6 + + + 02600 ;THINGS TO WRITE LATER: + + 000543' 200040 000711' 02620 GETFIL: MOVE A,['RIMOUT'] + 000544' 202056 000000 02630 MOVEM A,(R) + 02640 OUTSTR [ASCIZ/RIMOUT.DMP + 000545' 000000 000712' 02650 /] + 000546' 263740 000000 02660 POPJ P, + + 02680 PTAPE: OUTSTR [ASCIZ/Not ready. + 000547' 000000 000715' 02690 /] + 000550' 254000 000273' 02700 jrst begin + + 000273' 02720 END BEGIN + 000551' 427356 462744 + 000552' 203515 720306 + 000553' 713134 172312 + 000554' 203376 572340 + 000555' 727504 063322 + 000556' 663124 063302 + 000557' 647314 562134 + 000560' 064240 000000 + 000561' 463375 765752 + 000562' 701016 467500 + 000563' 713134 162132 + 000564' 607316 462744 + 000565' 203515 062500 + 000566' 677536 470352 + 000567' 721014 664730 + 000570' 625014 660722 + 000571' 663134 427032 + 000572' 050000 000000 + 000573' 427356 462744 + 000574' 203515 720344 + 000575' 627034 426702 + 000576' 663514 571100 + 000577' 723214 520336 + 000600' 727516 072750 + 000601' 203155 166312 + 000602' 203154 164730 + 000603' 627105 606424 + 000604' 000000 000000 + 000605' 476410 547100 + 000606' 677144 062312 + 000607' 733234 362500 + 000610' 502512 235100 + 000611' 633035 166312 + 000612' 621341 505000 + 000613' 476410 547100 + 000614' 633035 166312 + 000615' 620321 200000 + 000616' 777740 777777' + 000617' 513134 162100 + 000620' 723036 062500 + RIMIO PAGE 6-1 + + + 000621' 677444 050352 + 000622' 673075 020350 + 000623' 607414 537500 + 000624' 201212 474740 + 000625' 625012 220336 + 000626' 711012 024500 + 000627' 200000 000000 + 000630' 374321 200000 + 000631' 477536 470352 + 000632' 721014 664730 + 000633' 625015 660732 + 000634' 625644 000000 + 000635' 000040' 000041' + 000636' 000040' 000001 + 000637' 467376 567350 + 000640' 203414 170312 + 000641' 711016 460740 + 000642' 625014 167310 + 000643' 203517 170312 + 000644' 203454 572352 + 000645' 713344 073720 + 000646' 627344 071312 + 000647' 607117 135032 + 000650' 050000 000000 + 000651' 000001 000001 + 000652' 417214 561726 + 000653' 717535 520314 + 000654' 607235 472744 + 000655' 625341 505000 + 000656' 527354 574340 + 000657' 627076 462710 + 000660' 202135 662100 + 000661' 677144 043322 + 000662' 663124 063344 + 000663' 677324 050250 + 000664' 511641 505000 + 000665' 413034 420314 + Spooler runtime 0 Seconds, 0 KCS, 2734 disk reads, 85 disk writes, 1132 pages + ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     ***END*** Name: M310 Address: **** UNKNOWN **** CDRSER-157 24-April-1978 11:22:34 Address: **** UNKNOWN ****     \ No newline at end of file diff --git a/src/macro.10 b/src/macro.10 new file mode 100644 index 0000000..52e7bdb --- /dev/null +++ b/src/macro.10 @@ -0,0 +1,7053 @@ +;STANFORD ASSEMBLY: + LPTWID==^D120 ;120 CHARACTERS/LINE ON LPT AT STANFORD +TITLE MACRO V.10 +SUBTTL RPG/CMF/JF/PMH/DMN 7-SEPT-71 +;COPYRIGHT 1968,1969,1970,1971, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. + + VMACRO==10 ;VERSION NUMBER + VUPDATE==0 ;DEC UPDATE LEVEL + VEDIT==0 ;EDIT NUMBER + VCUSTOM==0 ;NON-DEC UPDATE LEVEL + + + LOC <JOBVER==137> + <VCUSTOM>B2+<VMACRO>B11+<VUPDATE>B17+VEDIT + RELOC + MLON + +COMMENT * ASSEMBLY FEATURE SWITCHES (ACTION WHEN NON-ZERO) + + SWITCHES ON (NON-ZERO) IN DEC VERSION +CCLSW GIVES RAPID PROGRAM GENERATION FEATURE +FTDISK GIVES DISK FEATURES +RENTSW ASSEMBLE REENTRANT PROGRAMS + + SWITCHES OFF (ZERO) IN DEC VERSION +LNSSW GIVES LNS VERSION +IIISW GIVES III FEATURES +OPHSH GIVES HASH SEARCH OF OPCODES +* + SUBTTL DEFAULT ASSEMBLY SWITCH SETTINGS + + +IFNDEF RENTSW,<RENTSW==0> + +IFNDEF LNSSW,<LNSSW==0> +IFN LNSSW,<FTDISK==0> + +IFNDEF CCLSW,<CCLSW==1> +IFN CCLSW,<FTDISK==1> + +IFNDEF UNIVR,<UNIVR==0> + +IFNDEF FTDISK,<FTDISK==0> + +IFNDEF IIISW,<IIISW==0> + +IFNDEF OPHSH,<OPHSH==0> + + SUBTTL OTHER PARAMETERS + +.PDP== ^D50 ;BASIC PUSH-DOWN POINTER +IFNDEF LPTWID,<LPTWID==^D132> ;DEFAULT WIDTH OF PRINTER +.LPTWD==8*<LPTWID/8> ;USEFUL WIDTH IN MAIN LISTING +.CPL== .LPTWD-^D32 ;WIDTH AVAIABLE FOR TEXT WHEN + ;BINARY IS IN HALFWORD FORMAT +.LPP==^D55 ;LINES/PAGE +.STP== ^D40 ;STOW SIZE +.TBUF== ^D80 ;TITLE BUFFER +.SBUF== ^D80 ;SUB-TITLE BUFFER +.IFBLK==^D20 ;IFIDN COMPARISON BLOCK SIZE +.R1B==^D18 +.UNIV==^D10 ;NUMBER OF UNIVERSAL DEFINITIONS +.LEAF==4 ;SIZE OF BLOCKS IN MACRO TREE + +NCOLS==1 ;NUMBER OF COLUMNS IN SYMBOL TABLE +IFN CCLSW,<IFNDEF CTLSIZ,<CTLSIZ==^D200>> +IFN OPHSH,<IFNDEF PRIME,<PRIME==^D701>> +IFNDEF NUMBUF,< +IFE LNSSW,<NUMBUF==2 ;NUMBER OF INPUT BUFFERS> +IFN LNSSW,<NUMBUF==4 ;DOUBLE BUFFER FOR DOUBLE SIZE DEVICES> +> + +EXTERN JOBREL,JOBSYM,JOBDDT,JOBFF,JOBAPR,JOBSA +IFN CCLSW,< EXTERN JOBERR> + + SALL ;SUPPRESS ALL MACROS + +;SOME ASCII CHARACTERS + +HT==11 +LF==12 +VT==13 +FF==14 +CR==15 +EOL==33 + ;ACCUMULATORS +AC0== 0 +AC1= AC0+1 +AC2= AC1+1 +SDEL= 3 ;SEARCH INCREMENT +SX= SDEL+1 ;SEARCH INDEX +ARG= 5 ;ARGUMENT +V= 6 ;VALUE +C= 7 ;CURRENT CHARACTER +CS= C+1 ;CHARACTER STATUS BITS +RC= 11 ;RELOCATION BITS +MWP= 12 ;MACRO WRITE POINTER +MRP= 13 ;MACRO READ POINTER +IO= 14 ;IO REGISTER (LEFT) +ER== IO ;ERROR REGISTER (RIGHT) +FR= 15 ;FLAG REGISTER (LEFT) +RX== FR ;CURRENT RADIX (RIGHT) +MP= 16 ;MACRO PUSHDOWN POINTER +PP= 17 ;BASIC PUSHDOWN POINTER + +%OP== 3 +%MAC== 5 +%DSYM== 2 +%SYM== 1 +%DMAC== %MAC+1 + +OPDEF RESET [CALLI 0] +OPDEF SETDDT [CALLI 2] +OPDEF DDTOUT [CALLI 3] +OPDEF DEVCHR [CALLI 4] +OPDEF WAIT [MTAPE 0] +OPDEF CORE [CALLI 11] +OPDEF EXIT [CALLI 12] +OPDEF UTPCLR [CALLI 13] +OPDEF DATE [CALLI 14] +OPDEF APRENB [CALLI 16] +OPDEF MSTIME [CALLI 23] +OPDEF PJOB [CALLI 30] +OPDEF RUN [CALLI 35] +OPDEF TMPCOR [CALLI 44] + + ;FR FLAG REGISTER (FR/RX) +IOSCR== 000001 ;NO CR AFTER LINE +MTAPSW==000004 ;MAG TAPE +ERRQSW==000010 ;IGNORE Q ERRORS +LOADSW==000020 ;END OF PASS1 & NO EOF YET +DCFSW== 000040 ;DECIMAL FRACTION +RIM1SW==000100 ;RIM10 MODE +NEGSW== 000200 ;NEGATIVE ATOM +RIMSW== 000400 ;RIM OUTPUT +PNCHSW==001000 ;RIM/BIN OUTPUT WANTED +CREFSW==002000 +R1BSW== 004000 ;RIM10 BINARY OUTPUT +TMPSW== 010000 ;EVALUATE CURRENT ATOM +INDSW== 020000 ;INDIRECT ADDRESSING WANTED +RADXSW==040000 ;RADIX ERROR SWITCH +FSNSW== 100000 ;NON BLANK FIELD SEEN +MWLFLG==200000 ;ON FOR DON'T ALLOW MULTI-WORD LITERALS +P1== 400000 ;PASS1 + + ;IO FLAG REGISTER (IO/ER) +FLDSW== 400000 ;ADDRESS FIELD +IOMSTR==200000 +ARPGSW==100000 ;ALLOW RAPID PROGRAM GENERATION +IOPROG==040000 ;SUPRESS LISTING (LIST/XLIST PSEUDO OP) +NUMSW== 020000 +IOMAC== 010000 ;MACRO EXPANSION IN PROGRESS +IOPALL==004000 ;SUPRESS LISTING OF MACRO EXPANSIONS +IONCRF==002000 ;SUPRESS OUTPUT OF CREF INFORMATION +CRPGSW==001000 ;CURRENTLY IN PROGRESS ON RPG +IOCREF==000400 ;WE ARE NOW OUTPUTTING CREF INFO +IOENDL==000200 ;BEEN TO STOUT +IOPAGE==000100 +DEFCRS==000040 ;THIS IS A DEFINING OCCURANCE (MACROS) +IOIOPF==000020 ;IOP INSTRUCTION SEEN +MFLSW== 000010 ;MULTI-FILE MODE,PRGEND SEEN +IORPTC==000004 ;REPEAT CURRENT CHARACTER +IOTLSN==000002 ;TITLE SEEN +IOSALL==000001 ;SUPPRESS MACRO LISTING EVEN IF BINARY IS GENERATED + +OPDEF JUMP1 [JUMPL FR, ] ;JUMP IF PASS 1 +OPDEF JUMP2 [JUMPGE FR, ] ;JUMP IF PASS 2 + +OPDEF JUMPOC [JUMPGE IO, ] ;JUMP IF IN OP-CODE FIELD +OPDEF JUMPAD [JUMPL IO, ] ;JUMP IF IN ADDRESS FIELD + +OPDEF JUMPCM [JUMPL CS, ] ;JUMP IF CURRENT CHAR IS COMMA +OPDEF JUMPNC [JUMPGE CS, ] ;JUMP IF CURRENT CHAR IS NON-COMMA + + ;ER ERROR REGISTERS (IO/ER) +ERRM== 000020 ;MULTIPLY DEFINED SYMBOL +ERRE== 000040 ;ILLEGAL USE OF EXTERNAL +ERRP== 000100 ;PHASE DISCREPANCY +ERRO== 000200 ;UNDEFINED OP CODE +ERRN== 000400 ;NUMBER ERROR +ERRV== 001000 ;VALUE PREVIOUSLY UNDEFINED +ERRU== 002000 ;UNDEFINED SYMBOL +ERRR== 004000 ;RELOCATION ERROR +ERRL== 010000 ;LITERAL ERROR +ERRD== 020000 ;REFERENCE TO MULTIPLY DEFINED SYMBOL +ERRA== 040000 ;PECULIAR ARGUMENT +ERRX== 100000 ;MACRO DEFINITION ERROR +ERRQ== 200000 ;QUESTIONABLE, NON-FATAL ERROR +ERRORS==777760 +LPTSW== 000002 +TTYSW== 000001 + + ;SYMBOL TABLE FLAGS +SYMF== 400000 ;SYMBOL +TAGF== 200000 ;TAG +NOOUTF==100000 ;NO DDT OUTPUT WFW +SYNF== 040000 ;SYNONYM +MACF== SYNF_-1 ;MACRO +OPDF== SYNF_-2 ;OPDEF +PNTF== 004000 ;"VALUE" IN SYMBOL TBL IS PNTR TO 36BIT VALUE +UNDF== 002000 ;UNDEFINED +EXTF== 001000 ;EXTERNAL +INTF== 000400 ;INTERNAL +ENTF== 000200 ;ENTRY +VARF== 000100 ;VARIABLE +MDFF== 000020 ;MULTIPLY DEFINED +SPTR== 000010 ;SPECIAL EXTERNAL POINTER +SUPRBT==000004 ;SUPRESS OUTPUT TO DDT +LELF== 000002 ;LEFT HAND RELOCATABLE +RELF== 000001 ;RIGHT HAND RELOCATABLE + +LITF== 200000 ;FLAG FOR PSEUDO-OPS INVALID IN LIT'S +ADDF== 100000 ;FLAG FOR PSEUDO-OPS INVALID IN ADDRESSES + +TNODE== 200000 ;TERMINAL NODE FOR EVALEX + SUBTTL RUN UUO + +IFN CCLSW,< +;THIS CODE MUST BE IN FIRST 1K TO ALLOW MAXIMUM SPACE +; FOR OVERWRITING +; 74 APPEARS BECAUSE ONLY LOCS 74 AND BEYOND ARE SAVED BY "SAVE" + +IFN CCLSW,<NUNCOM: IOWD 0,INHERE ;WHERE TO DO IO + 0 ;TERMINATE COMMAND LIST +NUNGO2: IN BIN,NUNCOM ;READ FILE + JRST NUNGO3 ;THERE ARE NO ERRORS +NUNERR: DDTOUT NUNPNT, ;COMPLAIN + EXIT ;GIVE UP +NUNERM: ASCIZ /?LINKAGE ERROR/ +NUNGO3: SKIPE 12,INHERE+133-74 ;LOOK AT JOBCOR + ;DOES JOB WANT TO RUN IN MORE CORE? + CAMG 12,JOBREL ;MORE CORE THAN CURRENTLY USED? + JRST NUNGO4 ;NO, GO BLT PROG + CORE 12, ;ASK FOR MORE CORE + JRST NUNERR ;NOT AVAILABLE + JRST NUNGO4 ;GO BLT PROGRAM +INHERE: + ;THIS CODE MUST BE IN FIRST 1K +NUNSET: JUMPN ACDEV,.+2 ;DEVICE SPECIFIED? + MOVSI ACDEV,(SIXBIT /SYS/) ;NO, USE SYSTEM DEVICE + JUMPN ACEXT,.+2 ;EXT SPECIFIED? + MOVSI ACEXT,(SIXBIT /SAV/) ;NO, USE "SAV" + MOVEM ACDEV,NUNDEV ;DEVICE NAME TO USE + OPEN BIN,NUNINI ;INIT THE DEVICE + JRST EINIT ;ERROR + MOVEM ACFILE,NUNDIR ;IS THE FILE AVAILABLE? + HLLZM ACEXT,NUNDIR+1 ;STASH EXTENSION + SETZM NUNDIR+3 ;CLEAR PPN + LOOKUP BIN,NUNDIR ;LOOK FOR FILE + JRST [HLRZ ACEXT,NUNDIR+1 ;WAS EXTENSION "SAV"? + CAIE ACEXT,(SIXBIT /SAV/) ;... + JRST ERRCF ;GO COMPLAIN + MOVSI ACEXT,(SIXBIT /DMP/) ;TRY "DMP" EXTENSION + JRST .-3 ] ;TRA -3,4 + PUSHJ PP,DELETE ;COMMAND FILE + MOVE 15,NUNDIR ;GET THE NAME + CALLI 15,43 ;TELL SYSTEM "SETNAM" + HLRO 15,NUNDIR+3 ;GET WORD COUNT + HRLM 15,NUNCOM ;STASH COUNT + MOVNS 15 ;NEGATIVE COUNT + MOVEI 16,73(15) ;WHERE TO STOP BLT + ADDI 15,INHERE ;HOW BIG TO MAKE CORE + IORI 15,1777 ;AN EVEN MULTIPLE OF 1K + CORE 15, ;ASK TS EXEC FOR CORE + JRST [HRROI RC,[SIXBIT /NOT ENUF CORE FOR LINKAGE@/] + JRST ERRFIN ];GO COMPLAIN + MOVSI NUNTOP,NUNAC + BLT NUNTOP,NUNTOP ;SET ACS + HRR NUNBLT,16 ;... + TLNN IO,CRPGSW ;WAS RPG IN PROGRESS? + TLZ NUNAOS,577000 ;NO, DON'T MAKE NEXT AN RPG + JRST NUNGO2 + +NUNAC: PHASE 0 +NUNGO4: MOVE NUNLAC,INHERE+74-74 ;SETUP FOR NEW DDT + SETDDT NUNLAC, ;... +INTERN JOBS41 +JOBS41=122 ;LOADER WILL GIVE MUL. DEF. GLOBAL IF CHANGED + +EXTERN JOB41 + MOVE NUNLAC,JOBS41+INHERE-74 ;RESTORE LOC 41 + MOVEM NUNLAC,JOB41 ;... +NUNBLT: BLT NUNTOP,.-. ;MOVE PRGM TO WHERE IT BELONGS + RESET ;RESET ALL I/O +NUNAOS: AOS 1,JOBSA ;GET STARTING ADDR FOR RPG + JRST 0(1) ;GET ON WITH THE GAME +NUNPNT: NUNERM ;ERROR MESSAGE POINTER +NUNTOP: XWD INHERE+1,75 +NUNLAC=. + DEPHASE +> + LIST + + DELETE: HRRZ EXTMP ;IF THE EXTENSION + CAIE (SIXBIT/TMP/) ;IS .TMP + POPJ PP, ;RETURN. + CLOSE CTL2, ;DELETE + SETZB 4,5 ;THE COMMAND FILE. + SETZB 6,7 + RENAME CTL2,4 ; + JFCL + POPJ PP, +> + SUBTTL START ASSEMBLING + +ASSEMB: PUSHJ PP,INZ ;INITIALIZE FOR PASS + MOVE [ASCII /.MAIN/] + MOVEM TBUF + MOVEI SBUF + HRRM SUBTTX + +ASSEM1: PUSHJ PP,CHARAC ;TEST FOR FORM FEED + SKIPGE LIMBO ;CRLF FLAG? + JRST ASSEM1 ;YES ,IGNORE LF + CAIN C,14 + SKIPE SEQNO + JRST ASSEM2 + PUSHJ PP,OUTFF1 + PUSHJ PP,OUTLI + JRST ASSEM1 + +ASSEM2: AOS TAGINC + CAIN C,"\" ;BACK-SLASH? + TLZA IO,IOMAC ;YES, LIST IF IN MACRO + TLO IO,IORPTC + PUSHJ PP,STMNT ;OFF WE GO + TLZN IO,IOENDL ;WAS STOUT PRE-EMPTED? + PUSHJ PP,STOUT ;NO, POLISH OFF LINE + JRST ASSEM1 + + SUBTTL STATEMENT PROCESSOR + +STMNT: TLZ FR,INDSW!FSNSW + TLZA IO,FLDSW +STMNT1: PUSHJ PP,LABEL +STMNT2: PUSHJ PP,ATOM ;GET THE FIRST ATOM + CAIN C,35 ;"="? + JRST ASSIGN ;YES + CAIN C,32 ;":"? + JRST STMNT1 ;YES + JUMPAD STMNT7 ;NUMERIC EXPRESSION + JUMPN AC0,STMN2A ;JUMP IF NON NULL FIELD + SKIPN LITLVL ;ALLOW COMMA IN LITERALS + CAIE C,14 ;NULL, COMMA? + CAIN C,EOL ;OR END OF LINE? + POPJ PP, ;YES,EXIT + CAIN C,"]" ;CLOSING LITERAL? + POPJ PP, ;YES + JRST STMNT9 ;NO,AT LEAST SKIP ALL THIS NONSENSE + +STMN2A: JUMPE C,.+2 + TLO IO,IORPTC + PUSHJ PP,MSRCH ;SEARCH FOR MACRO/OPDEF/SYN + JRST STMNT3 ;NOT FOUND, TRY OP CODE + LDB SDEL,[POINT 3,ARG,5] + JUMPE SDEL,ERRAX ;ERROR IF NO FLAGS + SOJE SDEL,OPD1 ;OPDEF IF 1 + SOJE SDEL,CALLM ;MACRO IF 2 + JRST STMNT4 ;SYNONYM, PROCESS WITH OP-CODES + +STMNT3: PUSHJ PP,OPTSCH ;SEARCH OP CODE TABLE + JRST STMNT5 ;NOT FOUND +STMNT4: HLLZ AC0,V ;PUT CODE IN AC0 + TRZ V,ADDF ;CLEAR ADDRESS NON-VALID FLAG + TRZE V,LITF ;VALID IN LITERAL? + SKIPN LITLVL ;NO, ARE WE IN A LITERAL? + JRST 0(V) ;NO, GO TO APPROPRIATE PROCESSOR + POPJ PP, ;YES,EXIT + +STMNT5: PUSHJ PP,SSRCH ;TRY SYMBOLS + JRST STMNT8 ;NOT FOUND + TLNE ARG,EXTF!UNDF ;EXTERNAL OR UNDEFINED? + JRST STMNT7 ;YES, PROCESS IN EVALEX + TLNN RC,-2 ;CHECK FOR EXTERNAL + TRNE RC,-2 + JRST STMNT7 + MOVE AC0,V ;FOUND, PUT VALUE IN AC0 + TLO IO,NUMSW ;FLAG AS NUMERIC +STMNT7: TLZ IO,IORPTC +STMNT9: PUSHJ PP,EVALHA ;EVALUATE EXPRESSION + TLNE FR,FSNSW ;FIELD SEEN? + JRST STOW ;YES,STOW THE CODE AND EXIT + CAIE C,"]"-40 ;CLOSING LITERAL? + TRO ER,ERRQ ;NO, GIVE "Q" ERROR + POPJ PP, ;EXIT + + STMNT8:repeat 0,<MOVEI V,0 ;ALWAYS START SCAN WITH 0 + CAIL V,CALNTH ;END OF TABLE? + JRST STMN8C ;YES, TRY TTCALLS + CAME AC0,CALTBL(V) ;FOUND IT? + AOJA V,.-3 ;NO,TRY AGAIN + SUBI V,NEGCAL ;CALLI'S START AT -1 + HRLI V,(CALLI) ;PUT IN UUO> +STMN8D: MOVSI ARG,OPDF ;SET FLAG FOR OPDEF +STMN8B: PUSHJ PP,INSERT ;PUT OPDEF IN TABLE + JRST OPD ;AND TREAT AS OPDEF + +STMN8C: SETZ V, ;START WITH ZERO + CAIL V,TTCLTH ;END OF TABLE? + JRST STMN8A ;YES, ERROR + CAME AC0,TTCTBL(V) ;MATCH? + AOJA V,.-3 ;NO, KEEP TRYING + LSH V,5 ;PUT IN AC FIELD (RIGHT HALF) + HRLZI V,<(TTCALL)>(V) ;PUT UUO IN LEFT HALF + JRST STMN8D ;SET OPDEF FLAG + +STMN8A: SETZB V,RC ;CLEAR VALUE AND RELOCATION + TRO ER,ERRO ;FLAG AS UNDEFINED OP-CODE + JUMP1 OPD ;TREAT AS STANDARD OP ON PASS1 + MOVSI ARG,OPDF!UNDF!EXTF ;SET A FEW FLAGS + JRST STMN8B ;TO FORCE OUT A MESSAGE + + ;STATEMENT OUT PASSES REMAINDER OF LINE (CMNT) + ;UNTIL A LINE TERMINATOR IS SEEN. +STOUTS: TLOA IO,IOENDL!IORPTC +STOUT: TLO IO,IORPTC + PUSHJ PP,BYPAS1 + CAIN C,14 ;COMMA? + SKIPL STPX ;YES, ERROR IF CODE STORED + CAIN C,EOL + TLOA IO,IORPTC + TRO ER,ERRQ +STOUT1: PUSHJ PP,CHARAC + CAIG C,CR + CAIG C,HT + JRST STOUT1 + JRST OUTLIN ;OUTPUT THE LINE (BIN AND LST) + SUBTTL LABEL PROCESSOR + +LABEL: JUMPAD LABEL4 ;COMPARE IF NON-SYMBOLIC + JUMPE AC0,LABEL5 ;ERROR IF BLANK + TLO IO,DEFCRS ;THIS IS A DEFINITION + PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + MOVSI ARG,SYMF!UNDF!TAGF ;NOT FOUND + TLNN ARG,EXTF ;OPERAND FOUND (SKIP EXIT) + JRST LABEL0 + JUMP1 LABEL3 ;ERROR ON PASS1 + TLNN ARG,UNDF ;UNDEFINED ON PASS1 + JRST LABEL3 ;NO, FLAG ERROR + TLZ ARG,EXTF!PNTF ;TURN OFF EXT FLAG NOW +LABEL0: TLZN ARG,UNDF!VARF ;WAS IT PREVIOUSLY DEFINED? + JRST LABEL2 ;YES, CHECK EQUALITY + MOVE V,LOCA ;WFW + MOVE RC,MODA + TLO ARG,TAGF + PUSHJ PP,PEEK ;GET NEXT CHAR. + CAIE C,":" ;SPECIAL CHECK FOR :: + JRST LABEL1 ;NO MATCH + TLO ARG,INTF ;MAKE IT INTERNAL + PUSHJ PP,GETCHR ;PROCESS NEXT CHAR. + PUSHJ PP,PEEK ;PREVIEW NEXT CHAR. +LABEL1: CAIE C,"!" ;HALF-KILL SIGN + JRST LABEL6 ;NO + TLO ARG,NOOUTF ;YES, SUPPRESS IT + PUSHJ PP,GETCHR ;AND GET RID OF IT +LABEL6: MOVEM AC0,TAG ;SAVE FOR PASS 1 ERRORS + HLLZS TAGINC ;ZERO INCREMENT + JRST INSERT ;INSERT/UPDATE AND EXIT + +LABEL2: HRLOM V,LOCBLK ;SAVE LIST LOCATION + CAMN V,LOCA ;DOES IT COMPARE WITH PREVIOUS? WFW + CAME RC,MODA +LABEL3: TLOA ARG,MDFF ;NO, FLAG MULTIPLY DEFINED AND SKIP + JRST LABEL7 ;YES, GET RID OF EXTRA CHARS. + TRO ER,ERRM ;FLAG MULTIPLY DEFINED ERROR + JRST UPDATE ;UPDATE AND EXIT + +LABEL4: CAMN AC0,LOCA ;DO THEY COMPARE? + CAME RC,MODA +LABEL5: TRO ER,ERRP ;NO, FLAG PHASE ERROR + POPJ PP, + +LABEL7: SKIPE LITLVL ;LABEL IN A LITERAL? + MOVEM AC0,LITLBL ;YES, SAVE LABEL NAME FOR LATER + PUSHJ PP,PEEK ;INSPECT A CHAR. + CAIN C,":" ;COLON? + PUSHJ PP,GETCHR ;YES, DISPOSE OF IT + PUSHJ PP,PEEK ;EXAMINE ONE MORE CHAR. + CAIN C,"!" ;EXCLAMATION? + JRST GETCHR ;YES, INDEED + POPJ PP, + SUBTTL ATOM PROCESSOR +ATOM: PUSHJ PP,CELL ;GET FIRST CELL + TLNE IO,NUMSW ;IF NON-NUMERIC +ATOM1: CAIE C,42 ;OR NOT A BINARY SHIFT, + POPJ PP, ;EXIT + + PUSH PP,AC0 ;STACK REGISTERS, ITS A BINARY SHIFT + PUSH PP,AC1 + PUSH PP,RC + PUSH PP,RX + HRRI RX,^D10 ;COMPUTE SHIFT RADIX 10 + PUSHJ PP,CELLSF ;GET SHIFT + MOVE ARG,RC ;SAVE RELOCATION + POP PP,RX ;RESTORE REGISTERS + POP PP,RC + POP PP,AC1 + MOVN SX,AC0 ;USE NEGATIVE OF SHIFT + POP PP,AC0 + JUMPN ARG,NUMER2 ;IF NOT ABSOLUTE + TLNN IO,NUMSW ;AND NUMERIC, + JRST NUMER2 ;FLAG ERROR + LSHC AC0,^D35(SX) + LSH RC,^D35(SX) + JRST ATOM1 ;TEST FOR ANOTHER + CELLSF: TLO IO,FLDSW +CELL: SETZB AC0,RC ;CLEAR RESULT AND RELOCATION + SETZB AC1,AC2 ;CLEAR WORK REGISTERS + MOVEM PP,PPTEMP ;SAVE PUSHDOWN POINTER + TLZ IO,NUMSW + TLZA FR,NEGSW!DCFSW!RADXSW + +CELL1: TLO IO,FLDSW + PUSHJ PP,BYPASS + LDB V,[POINT 4,CSTAT(C),14] ;GET CODE + XCT .+1(V) ;EXECUTE, INDEX VIA BITS 11,12,13,14 OF CSTAT TABLE + JRST CELL1 ;0; BLANK, (TAB OR "+") + JRST LETTER ;1; LETTER ] $ % ( ) , ; > + TLC FR,NEGSW ;2; "-" + TLO FR,INDSW ;3; "@" + JRST NUM1 ;4; NUMERIC 0 - 9 + JRST ANGLB ;5; "<" + JRST SQBRK ;6; "[" + JRST QUOTES ;7; ""","'" + JRST QUAL ;10; "^" + JRST PERIOD ;11; "." + TROA ER,ERRQ ;12; ERROR, FLAG AND TREAT AS DELIMITER + ;12; ! # & * / : = ? \ _ + LETTER: TLOA AC2,(POINT 6,AC0,) ;SET BYTE POINTER +LETTE1: PUSHJ PP,GETCHR ;GET CHARACTER + TLNN CS,6 ;ALPHA-NUMERIC? + JRST LETTE3 ;NO,TEST FOR VARIABLE + TLNE AC2,770000 ;STORE ONLY SIX BYTES +LETTE2: IDPB C,AC2 ;RETURN FROM PERIOD + JRST LETTE1 + +LETTE3: CAIE C,03 ;"#"? + POPJ PP, + JUMPE AC0,POPOUT ;TEST FOR NULL + PUSHJ PP,PEEK ;PEEK AT NEXT CHAR. + CAIN C,"#" ;IS IT 2ND #? + JRST LETTE4 ;YES, THEN IT'S AN EXTERN + TLO IO,DEFCRS + PUSHJ PP,SSRCH ;YES, SEARCH FOR SYMBOL (OPERAND) + MOVSI ARG,SYMF!UNDF ;NOT FOUND, FLAGAS UNDEFINED SYM. + TLNN ARG,UNDF ;UNDEFINED? + JRST GETCHR ;NO, GET NEXT CHAR AND RETURN + TLO ARG,VARF ;YES, FLAG AS A VARIABLE + TRO ER,ERRU ;SET UNDEFINED ERROR FLAG + PUSHJ PP,INSERZ ;INSERT IT WITH A ZERO VALUE + JRST GETDEL + +LETTE4: PUSHJ PP,GETCHR ;AND SCAN PAST IT + PUSHJ PP,GETCHR ;GET RID OF # + JRST EXTER1 ;PUT IN SYMBOL TABLE + +NUMER1: SETZB AC0,RC ;RETURN ZERO +NUMER2: TRO ER,ERRN ;FLAG ERROR + +GETDEL: PUSHJ PP,BYPASS +GETDE1: JUMPE C,.-1 + MOVEI AC1,0 +GETDE3: TLO IO,NUMSW!FLDSW ;FLAG NUMERIC + TLNN FR,NEGSW ;IS ATOM NEGATIVE? + POPJ PP, ;NO, EXIT + JUMPE AC1,GETDE2 + MOVNS AC1 + TDCA AC0,[-1] +GETDE2: MOVNS AC0 ;YES, NEGATE VALUE + MOVNS RC ;AND RELOCATION +POPOUT: POPJ PP, ;EXIT + QUOTES: CAIE C,"'"-40 ;IS IT "'" + JRST QUOTE ;NO MUST BE """ + JRST SQUOTE ;YES + +QUOTE0: TLNE AC0,376000 ;5 CHARACTERS STORED ALREADY? + TRO ER,ERRQ ;YES, GIVE WARNING + ASH AC0,7 + IOR AC0,C +QUOTE: PUSHJ PP,CHARAC ;GET 7-BIT ASCII + CAIG C,15 ;TEST FOR LF, VT, FF OR CR + CAIGE C,12 + JRST .+2 ;NO, SO ALL IS WELL + JRST QUOTE2 ;ESCAPE WITH Q ERROR + CAIE C,42 + JRST QUOTE0 + PUSHJ PP,PEEK ;LOOK AT NEXT CHAR. + CAIE C,42 + JRST QUOTE1 ;RESTORE REPEAT LEVEL AND QUIT + PUSHJ PP,CHARAC ;GET NEXT CHAR. + JRST QUOTE0 ;USE IT + +QUOTE2: TRO ER,ERRQ ;SET Q ERROR +QUOTE1: JRST GETDEL + +SQUOT0: TLNE AC0,770000 ;SIX CHARS. STORED ALREADY ? + TRO ER,ERRQ ;YES + LSH AC0,6 + IORI AC0,-40(C) ;OR IN SIXBIT CHAR. + +SQUOTE: PUSHJ PP,CHARAC + CAIG C,CR + CAIGE C,LF + JRST .+2 + JRST QUOTE1 + CAIE C,"'" + JRST SQUOT0 + PUSHJ PP,PEEK + CAIE C,"'" + JRST QUOTE1 + PUSHJ PP,CHARAC + JRST SQUOT0 + + QUAL: PUSHJ PP,BYPAS1 ;SKIP BLANKS, GET NEXT CHARACTER + CAIN C,42 ;"B"? + JRST QUAL2 ;YES, RADIX=D2 + CAIN C,57 ;"O"? + JRST QUAL8 ;YES, RADIX=D8 + CAIN C,46 ;"F"? + JRST NUMDF ;YES, PROCESS DECIMAL FRACTION + CAIN C,54 ;"L"? + JRST QUALL ;YES + CAIE C,44 ;"D"? + JRST NUMER1 ;NO, FLAG NUMERIC ERROR + ADDI AC2,2 +QUAL8: ADDI AC2,6 +QUAL2: ADDI AC2,2 + PUSH PP,RX + HRR RX,AC2 + PUSHJ PP,CELLSF +QUAL2A: POP PP,RX + TLNN IO,NUMSW + JRST NUMER1 + JRST GETDE1 + +QUALL: PUSH PP,FR + PUSHJ PP,CELLSF + MOVE AC2,AC0 + MOVEI AC0,^D36 + JUMPE AC2,QUAL2A + LSH AC2,-1 + SOJA AC0,.-2 + SUBTTL LITERAL PROCESSOR + +SQBRK: PUSH PP,FR + PUSH PP,EXTPNT ;ALLOW EXTERN TO PRECEDE LIT IN XWD + SETZM EXTPNT + SKIPE LITLVL ;SAVE SEQNO AND PAGE IF NOT IN LIT ALREADY + JRST SQB5 + MOVE C,SEQNO2 + MOVEM C,LITSEQ + MOVE C,PAGENO + MOVEM C,LITPG +SQB5: JSP AC2,SVSTOW +SQB3: PUSHJ PP,STMNT + CAIN C,75 ;CHECK FOR ] + JRST SQB1 + TLO IO,IORPTC + TLNE FR,MWLFLG ;CALL IT ] IF NOT MULTI-WORD FLAG + JRST SQB2 ;BUT REPEAT LAST CHARACTER + PUSHJ PP,BYPAS1 + CAIN C,EOL + TLOA IO,IORPTC + TRO ER,ERRQ +SQB4: PUSHJ PP,CHARAC + CAIN C,";" ;COMMENT? + JRST SQB6 ;YES, IGNORE SQUARE BRACKETS + CAIN C,"]" ;LOOK FOR TERMINAL SQB + TRNN ER,ERRORS ;IN CASE OF ERROR IN LITERAL + JRST .+2 ;NO ALL IS WELL + JRST SQB1 ;FINISH THE LITERAL NOW!! + CAIG C,CR ;LOOK FOR END OF LINE + CAIN C,HT + JRST SQB4 +SQB4A: PUSHJ PP,OUTIML ;DUMP + PUSHJ PP,CHARAC ;GET ANOTHER CHAR. + SKIPL LIMBO ;CRLF FLAG + TLO IO,IORPTC ;NO REPEAT + JRST SQB3 + +SQB6: PUSHJ PP,CHARAC ;GET A CHARACTER + CAIG C,CR + CAIN C,HT ;LOOK FOR END OF LINE CHAR. + JRST SQB6 ;NOT YET + JRST SQB4A ;GOT IT + +SQB1: TLZ IO,IORPTC +SQB2: PUSHJ PP,STOLIT + JSP AC2,GTSTOW + SKIPE LITLBL ;NEED TO FIXUP A LABEL? + PUSHJ PP,RELBLE ;YES, USE LOC OF LITERAL + POP PP,EXTPNT + POP PP,FR + SKIPE LITLVL ;WERE WE NESTED? + JUMP1 NUMER2 ;YES, FORCE ERROR IF PASS 1 + JRST GETDEL + +RELBLE: PUSH PP,AC0 ;SAVE LOCATION COUNTER + PUSH PP,RC ;AND RELOCATION + MOVE AC0,LITLBL ;SYMBOL WE NEED + SETZM LITLBL ;ZERO INDICATOR + PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + JRST RELBL1 ;SHOULD NEVER HAPPEN + TLNN ARG,TAGF ;IT BETTER BE A LABEL + JRST RELBL1 ;IT WASN'T , GIVE UP BEFORE SOME HARM IS DONE + TLZ ARG,UNDF!EXTF!PNTF ;CLEAR FLAGS NOW + POP PP,RC ;GET LITERAL RELOCATION + MOVE V,(PP) ;GET VALUE (LOC COUNTER) + PUSHJ PP,UPDATE ;UPDATE VALUE + POP PP,AC0 ;RESTORE LITERAL COUNT + POPJ PP, ;RETURN + +RELBL1: POP PP,RC ;RESTORE RC + POP PP,AC0 ;AND AC0 + POPJ PP, ;JUST RETURN + ANGLB: PUSH PP,FR + TLZ FR,INDSW + PUSHJ PP,ATOM + TLNN IO,NUMSW + CAIE C,35 + JRST ANGLB1 + PUSHJ PP,ASSIG1 + MOVE AC0,V + JRST ANGLB2 + +ANGLB1: PUSHJ PP,EVALHA +ANGLB2: POP PP,FR + CAIE C,36 + TRO ER,ERRN + JRST GETDEL + +PERIOD: PUSHJ PP,GETCHR ;LOOK AT NEXT CHARACTER + TLNN CS,2 ;ALPHABETIC? + JRST PERNUM ;NO, TEST NUMERIC + MOVSI AC0,(SIXBIT /./) ;YES, PUT PERIOD IN AC0 + MOVSI AC2,(POINT 6,AC0,5) ;SET BYTE POINTER + JRST LETTE2 ;AND TREAT AS SYMBOL + +PERNUM: TLNE CS,4 ;IS IT A NUMBER + JRST NUM32 ;YES + MOVE AC0,LOCA ;NO. CURRENT LOC SYMBOL (.) + MOVE RC,MODA ;SET TO CURRENT ASSEMBLY MODE + JRST GETDE1 ;GET DELIMITER +NUMDF: TLO FR,DCFSW ;SET DECIMAL FRACTION FLAG +NUM: PUSHJ PP,GETCHR ;GET A CHARACTER + TLNN CS,4 ;NUMERIC? + JRST NUM10 ;NO +NUM1: SUBI C,20 ;CONVERT TO OCTAL + PUSH PP,C ;STACK FOR FLOATING POINT + MOVE AC0,AC1 + MULI AC0,0(RX) + ADD AC1,C ;ADD IN LAST VALUE + CAIL C,0(RX) ;IS NUMBER LESS THAN CURRENT RADIX? + TLO FR,RADXSW ;NO, SET FLAG + AOJA AC2,NUM ;YES, AC2=NO. OF DECIMAL PLACES + + NUM10: CAIE C,16 ;PERIOD? + TLNE FR,DCFSW ;OR DECIMAL FRACTION? + JRST NUM30 ;YES, PROCESS FLOATING POINT + LSH AC1,1 ;NO, CLEAR THE SIGN BIT + LSHC AC0,^D35 ;AND SHIFT INTO AC0 + MOVE PP,PPTEMP ;RESTORE PP + SOJE AC2,GETDE1 ;NO RADIX ERROR TEST IF ONE DIGIT + TLNE FR,RADXSW ;WAS ILLEGAL NUMBER ENCOUNTERED? + TRO ER,ERRN ;YES, FLAG N ERROR + JRST GETDE1 + +NUM30: CAIE C,"B"-40 ;IF "B" THEN MISSING "." +NUM31: PUSHJ PP,GETCHR + TLNN CS,4 ;NUMERIC? + JRST NUM40 ;NO +NUM32: SUBI C,20 + PUSH PP,C + JRST NUM31 + +NUM40: PUSH PP,FR ;STACK VALUES + HRRI RX,^D10 + PUSH PP,AC2 + PUSH PP,PPTEMP + CAIN C,45 ;"E"? + JRST [PUSHJ PP,PEEK ;GET NEXT CHAR + PUSH PP,C ;SAVE NEXT CHAR + PUSHJ PP,CELL ;YES, GET EXPONENT + POP PP,C ;GET FIRST CHAR. AFTER E + CAIN V,4 ;MUST HAVE NUMERICAL STATUS + JRST .+2 ;SKIP RETURN + CAIN C,"<" ;ALLOW <EXP> + JRST .+2 ;SKIP RETURN + SKIPN AC0 ;ERROR IF NON-ZERO EXPRESSION + TROA ER,ERRQ ;ALLOW E+,E- + SETOM RC ;FORCE NUMERICAL ERROR + JRST .+2] ;SKIP RETURN + MOVEI AC0,0 ;NO, ZERO EXPONENT + POP PP,PPTEMP + POP PP,SX + POP PP,FR + HRRZ V,PP + MOVE PP,PPTEMP + JUMPN RC,NUMER1 ;EXPONENT MUST BE ABSOLUTE + ADD SX,AC0 + HRRZ ARG,PP + ADD SX,ARG + SETZB AC0,AC2 + TLNE FR,DCFSW + JRST NUM60 + JOV NUM50 ;CLEAR OVERFLOW FLAG + +NUM50: JSP SDEL,NUMUP ;FLOATING POINT + JRST NUM52 ;END OF WHOLE NUMBERS + FMPR AC0,[10.0] ;MULTIPLY BY 10 + TLO AC1,233000 ;CONVERT TO FLOATING POINT + FADR AC0,AC1 ;ADD IT IN + JRST NUM50 + +NUM52: JSP SDEL,NUMDN ;PROCESS FRACTION + FADR AC0,AC2 + JOV NUMER1 ;TEST FOR OVERFLOW + JRST GETDE1 + + TLO AC1,233000 + TRNE AC1,-1 + FADR AC2,AC1 ;ACCUMULATE FRACTION + FDVR AC2,[10.0] + JRST NUM52 + +NUM60: JSP SDEL,NUMUP + JRST NUM62 + IMULI AC0,^D10 + ADD AC0,AC1 + JRST NUM60 + +NUM62: LSHC AC1,-^D36 + JSP SDEL,NUMDN + LSHC AC1,^D37 + PUSHJ PP,BYPAS2 + JRST GETDE3 + + DIVI AC1,^D10 + JRST NUM62 + +NUMUP: MOVEI AC1,0 + CAML ARG,SX + JRST 0(SDEL) + CAMGE ARG,V + MOVE AC1,1(ARG) + AOJA ARG,1(SDEL) + +NUMDN: MOVEI AC1,0 + CAMG V,SX + JRST 0(SDEL) + CAMLE V,ARG + MOVE AC1,0(V) + SOJA V,3(SDEL) + SUBTTL GETSYM +GETSYM: MOVEI AC0,0 ;CLEAR AC0 + MOVSI AC1,(POINT 6,AC0) ;PUT POINTER IN AC1 + PUSHJ PP,BYPASS ;SKIP LEADING BLANKS + TLNN CS,2 ;ALPHABETIC? + JRST GETSY1 ;NO, ERROR + CAIE C,16 ;PERIOD? + JRST GETSY2 ;NO, A VALID SYMBOL + IDPB C,AC1 ;STORE THE CHARACTER + PUSHJ PP,GETCHR ;YES, TEST NEXT CHARACTER + TLNN CS,2 ;ALPHABETIC? +GETSY1: TROA ER,ERRA +GETSY2: AOS 0(PP) ;YES, SET SKIP EXIT +GETSY3: TLNN CS,6 ;ALPHA-NUMERIC? + JRST BYPAS2 ;NO, GET DELIMITER + TLNE AC1,770000 ;YES, HAVE WE STORED SIX? + IDPB C,AC1 ;NO, STORE IT + PUSHJ PP,GETCHR + JRST GETSY3 + + SUBTTL EXPRESSION EVALUATOR +CV== AC0 ;CURRENT VALUE +PV== AC1 ;PREVIOUS VALUE +RC== RC ;CURRENT RELOCATABILITY +PR== AC2 ;PREVIOUS RELOCATABILITY +CS= CS ;CURRENT STATUS +PS== SDEL ;PREVIOUS STATUS + +EVALHA: TLO FR,TMPSW +EVALCM: PUSHJ PP,EVALEX ;EVALUATE FIRST EXPRESSION + PUSH PP,[0] ;MARK PDL + JUMPCM EVALC3 ;JUMP IF COMMA + TLO IO,IORPTC ;IT'S NOT,SO REPEAT + JRST OP ;PROCESS IN OP +EVALC3: + PUSH PP,[0] ;STORE ZERO'S ON PDL + PUSH PP,[0] ;....... + MOVSI AC2,(POINT 4,(PP),12) + JRST OP1B ;PROCESS IN OP + +EVALEX: TLO IO,FLDSW + PUSH PP,[XWD TNODE,0] ;MARK THE LIST 200000,,0 + TLZN FR,TMPSW +EVATOM: PUSHJ PP,ATOM ;GET THE NEXT ATOM + JUMPE AC0,EVGETD ;TEST FOR NULL/ZERO + TLOE IO,NUMSW ;SET NUMERIC, WAS IT PREVIOUSLY? + JRST EVGETD+1 ;YES, TREAT ACCORDINGLY + PUSHJ PP,SEARCH ;SEARCH FOR MACRO OR SYMBOL + JRST EVOP ;NOT FOUND, TRY FOR OP-CODE + JUMPL ARG,.+2 ;SKIP IF OPERAND + PUSHJ PP,SSRCH1 ;OPERATOR, TRY FOR SYMBOL (OPERAND) + PUSHJ PP,QSRCH ;PERFORM CROSS-REFERENCE + JUMPG ARG,EVMAC ;BRANCH IF OPERATOR + MOVE AC0,V ;SYMBOL, SET VALUE + JRST EVTSTS ;TEST STATUS + +EVMAC: TLNE FR,NEGSW ;UNARY MINUS? + JRST EVERRZ ;YES, INVALID BEFORE OPERATOR + LDB SDEL,[POINT 3,ARG,5] ;GET MACF/OPDF/SYNF + SOJL SDEL,EVERRZ ;ERROR IF NO FLAGS + + JUMPE C,.+2 ;NON-BLANK? + TLO IO,IORPTC ;YES, REPEAT CHARACTER + SOJE SDEL,CALLM ;MACRO IF 2 + JUMPG SDEL,EVOPS ;SYNONYM IF 4 + + MOVE AC0,V ;OPDEF + MOVEI V,OP ;SET TRANSFER VECTOR + JRST EVOPD + EVOP: TLNE FR,NEGSW ;OPCODE, UNARY MINUS? + JRST EVERRZ ;YES, ERROR + + PUSHJ PP,OPTSCH ;SEARCH SYMBOL TABLE + JRST EVOPX ;NOT FOUND +EVOPS: TRZ V,LITF ;CLEAR LIT INVALID FLAG + TRZE V,ADDF ;SYNONYM + JRST EVOPX ;PSEUDO-OP THAT GENERATES NO DATA JUMPS + HLLZ AC0,V +EVOPD: JUMPE C,.+2 ;OPDEF, NON-BLANK DELIMITER? + TLO IO,IORPTC ;YES, REPEAT CHARACTER + JSP AC2,SVSTOW + PUSHJ PP,0(V) + PUSHJ PP,DSTOW + JSP AC2,GTSTOW + TRNE RC,-2 + HRRM RC,EXTPNT + TLNE RC,-2 + HLLM RC,EXTPNT + JRST EVNUM + +EVOPX: MOVSI ARG,SYMF!UNDF + PUSHJ PP,INSERZ +EVERRZ: SETZB AC0,RC ;CLEAR CODE AND RELOCATION +EVERRU: TRO ER,ERRU + JRST EVGETD + EVTSTS: TLNE ARG,UNDF + JRST [TRO ER,ERRU ;SET UNDEF ERROR + JUMP1 EVGETD ;TREAT AS UNDF ON PASS1 + JRST .+1] ;TREAT AS EXTERNAL ON PASS2 + TLNN ARG,EXTF + JRST EVTSTR + HRRZ RC,ARG ;GET ADRES WFW + HRRZ ARG,EXTPNT ;SAVE IT WFW + HRRM RC,EXTPNT ;WFW + TRNE ARG,-1 ;WFW + TRO ER,ERRE + SETZB AC0,ARG + +EVTSTR: TLNE ARG,MDFF ;MULTIPLY DEFINED? + TRO ER,ERRD ;YES, FLAG IT + TLNE FR,NEGSW ;NEGATIVE ATOM? + PUSHJ PP,GETDE2 ;YES, NEGATE AC0 AND RC + +EVGETD: TLNE IO,NUMSW ;NON BLANK FIELD + TLO FR,FSNSW ;YES,SET FLAG + PUSHJ PP,BYPAS2 + TLNE CS,6 ;ALPHA-NUMERIC? + TLO IO,IORPTC ;YES, REPEAT IT +EVNUM: POP PP,PS ;POP THE PREVIOUS DELIMITER/TNODE + TLO PS,4000 + CAMGE PS,CS ;OPERATION REQUIRED? + JRST EVPUSH ;NO, PUT VALUES BACK ON STACK + TLNN PS,TNODE ;YES, HAVE WE REACHED TERMINAL NODE? + JRST EVXCT ;NO, EXECUTION REQUIRED + TLNN CS,170000 ;YES, ARE WE POINTING AT DEL? (& ! * / + - _) + POPJ PP, ;YES, EXIT + ;NO,FALL INTO EVPUSH + + EVPUSH: PUSH PP,PS ;STACK VALUES + PUSH PP,CV + PUSH PP,RC + PUSH PP,CS + JRST EVATOM ;GET NEXT ATOM + +EVXCT: POP PP,PR ;POP PREVIOUS RELOCATABILITY + POP PP,PV ;AND PREVIOUS VALUE + LDB PS,[POINT 3,PS,29] ;TYPE OF OPERATION TO PS + JRST .+1(PS) ;PERFORM PROPER OPERATION + JRST ASSEM1 ;0; SHOULD NEVER GET HERE ;DMN + JRST XMUL ;1; + JRST XDIV ;2; + JRST XADD ;3; + JRST XSUB ;4; + JRST XLRW ;5; "_" + TDOA CV,PV ;6; MERGE PV INTO CV + AND CV,PV ;7; AND PV INTO CV + JUMPN RC,.+2 ;COMMON RELOCATION TEST +EVXCT1: JUMPE PR,EVNUM + TRO ER,ERRR ;BOTH MUST BE FIXED + JRST EVNUM ;GO TRY AGAIN + +XSUB: SUBM PV,CV + SUBM PR,RC + JRST EVNUM + +XADD: ADDM PV,CV + ADDM PR,RC + JRST EVNUM + +XDIV: IDIV PR,CV ;CORRECT RELOCATABILITY + IDIVM PV,CV +XDIV1: EXCH PR,RC ;TAKE RELOCATION OF NUMERATOR + JRST EVXCT1 + +XMUL: JUMPE PR,XMUL1 ;AT LEAST ONE OPERAND + JUMPE RC,XMUL1 ;MUST BE FIXED + TRO ER,ERRR +XMUL1: IORM PR,RC ;GET RELOCATION TO RC + CAMGE PV,CV ;FIND THE GREATER + EXCH PV,CV ;FIX IN CASE CV=0,OR 1 + IMULM PV,RC + IMULM PV,CV + JRST EVNUM +XLRW: EXCH PV,CV + LSH CV,0(PV) + LSH PR,0(PV) + JRST XDIV1 + SUBTTL LITERAL STORAGE HANDLER + +STOLER: + SETZB AC0,RC ;ERROR, NO CODE STORED + PUSHJ PP,STOW ;STOW ZERO + TRO ER,ERRL ;AND FLAG THE ERROR + +STOLIT: MOVE SDEL,STPX + SUB SDEL,STPY ;COMPUTE NUMBER OF WORDS + JUMPE SDEL,STOLER ;ERROR IF NONE STORED + TRNN ER,ERRORS ;ANY ERRORS? + JRST STOL06 ;NO + JUMP2 STOL22 ;YES, NO SEARCH. BRANCH IF PASS2 + ADDM SDEL,LITCNT ;PASS ONE, UPDATE COUNT + JRST STOWI ;INITIALIZE STOW + +STOL06: MOVEI SX,LITAB ;PREPARE FOR SEARCH + MOVE ARG,STPX ;SAVE IN THE EVENT OF MULTIPLE-WORD + HRL ARG,STPY + MOVE AC2,LITNUM + MOVEI SDEL,0 +STOL08: PUSHJ PP,DSTOW ;GET VALUE WFW + +STOL10: SOJL AC2,STOL24 ;TEST FOR END + MOVE SX,0(SX) ;NO, GET NEXT STORAGE CELL + MOVE V,-1(SX) ;GET RELOCATION BITS WFW + CAMN AC0,-2(SX) ;DO CODES COMPARE? WFW + CAME RC,V ;YES, HOW ABOUT RELOCATION? + AOJA SDEL,STOL10 ;NO, TRY AGAIN + SKIPGE STPX ;YES, MULTI-WORD? + JRST STOL26 ;NO, JUST RETURN LOCATION + MOVEM AC2,SAVBLK+AC2 ;YES, SAVE STARTING INFO + MOVEM SX,SAVBLK+SX + +STOL12: SOJL AC2,STOL23 ;TEST FOR END + PUSHJ PP,DSTOW ;GET NEXT WORD WFW + MOVE SX,0(SX) ;UPDATE POINTER + MOVE V,-1(SX) ;GET RELOCATION WFW + CAMN AC0,-2(SX) ;COMPARE VALUE WFW + CAME RC,V ;AND RELOCATION + JRST STOL14 ;NO MATCH, TRY AGAIN + SKIPL STPX ;MATCH, HAVE WE FINISHED SEARCH? + JRST STOL12 ;NO, TRY NEXT WORD + JRST STOL26 ;YES, RETURN LOCATION + +STOL14: MOVE AC2,SAVBLK+AC2 ;RESTORE STOW POINTERS + MOVE SX,SAVBLK+SX + HRREM ARG,STPX + HLREM ARG,STPY + AOJA SDEL,STOL08 ;BETTER LUCK NEXT TIME + +STOL22: MOVE SDEL,LITNUM +STOL23: PUSHJ PP,DSTOW ;DSTOW AND CONVERT +STOL24: MOVE SX,LITABX ;GET CURRENT STORAGE + PUSHJ PP,GETTOP ;GET NEXT CELL + MOVEM AC0,-2(SX) ;STORE CODE WFW + MOVEM RC,-1(SX) ;WFW + MOVEM SX,LITABX ;SET POINTER TO CURRENT CELL + AOS LITNUM ;INCREMENT NUMBER STORED + AOS LITCNT ;INCREMENT NUMBER RESERVED + SKIPL STPX ;ANY MORE CODE? + JRST STOL23 ;YES +STOL26: JUMP1 POPOUT ;EXIT IF PASS ONE + MOVE SX,LITHDX ;GET HEADER BLOCK + HLRZ RC,-1(SX) ;GET BLOCK RELOCATION + HRRZ AC0,-1(SX) + ADDI AC0,0(SDEL) ;COMPUTE ACTUAL LOCATION + POPJ PP, ;EXIT + + SUBTTL INPUT ROUTINES +GETCHR: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + CAIL C,"A"+40 ;CHECK FOR LOWER CASE + CAILE C,"Z"+40 + JRST .+2 ;NOT LOWER CASE + TRZA C,100 ;CONVERT LOWER CASE TO SIXBIT + SUBI C,40 ;CONVERT TO SIXBIT + CAIG C,77 ;CHAR GREATER THAN SIXBIT? + JUMPGE C,GETCS ;TEST FOR VALID SIXBIT + ADDI C,40 ;BACK TO ASCII + CAIN C,HT ;CHECK FOR TAB + JRST GETCS2 ;MAKE IT LOOK LIKE SPACE + CAIG C,CR ;GREATER THAN CR + CAIG C,HT ;GREATER THAN TAB + JRST GETCS1 ;IS NOT FF,VT,LF OR CR + MOVEI C,EOL ;LINE OR FORM FEED OR V TAB + TLOA IO,IORPTC ;REPEAT CHARACTER +GETCS2: MOVEI C,0 ;BUT TREAT AS BLANK +GETCS: MOVE CS,CSTAT(C) ;GET STATUS BITS + POPJ PP, ;EXIT + +GETCS1: JUMPE C,GETCS ;IGNORE NULS + TRC C,100 ;MAKE CHAR. VISIBLE + MOVEI CS,"^" + DPB CS,LBUFP ;PUT ^ IN OUTPUT + PUSHJ PP,RSW2 ;ALSO MODIFIED CHAR. + TRO ER,ERRQ ;FLAG Q ERROR + JRST GETCHR ;BUT IGNORE CHAR. + +CHARAC: TLZE IO,IORPTC ;REPEAT REQUESTED? + JRST CHARAX ;YES +RSW0: JUMPN MRP,MREAD ;BRANCH IF TREE POINTER SET + PUSHJ PP,READ +RSW1: SKIPE RPOLVL ;ARE WE IN "REPEAT ONCE"? + JRST REPO1 ;YES +RSW2: MOVE CS,LIMBO ;GET LAST CHAR. + MOVEM C,LIMBO ;STORE THIS CHAR. FOR RPTC + CAIN C,LF ;LF? + CAIE CS,CR ;YES,LAST CHAR. A CR? + JRST RSW3 ;NO + HRROS LIMBO ;YES,FLAG + POPJ PP, ;AND EXIT + +RSW3: TLNE IO,IOSALL ;MACRO SUPPRESS ALL? + JUMPN MRP,CPOPJ ;YES,DON'T LIST IN MACRO + SOSG CPL ;ANY ROOM IN THE IMAGE BUFFER? + PUSHJ PP,OUTPL ;NO, OUTPUT THE PARTIAL LINE + IDPB C,LBUFP ;YES, STORE IN PRINT AREA + CAIE C,HT ;TAB? + POPJ PP, ;NO, EXIT + MOVEI C,7 + ANDCAM C,CPL ;MASK +CHARAX: HRRZ C,LIMBO ;GET LAST CHARACTER + POPJ PP, ;EXIT + +CHARL: PUSHJ PP,CHARAC ;GET AND TEST 7-BIT ASCII + CAIG C,FF ;LINE OR FORM FEED OR VT? + CAIGE C,LF + POPJ PP, ;NO,EXIT + SKIPE LITLVL ;IN LITERAL? + JRST OUTIML ;YES +CHARL1: PUSHJ PP,SAVEXS ;SAVE REGISTERS + PUSHJ PP,OUTLIN ;DUMP THE LINE + JRST RSTRXS ;RESTORE REGISTERS AND EXIT + SUBTTL CHARACTER STATUS TABLE + + DEFINE GENCS (OPLVL,ATOM,AN,SQUOZ,OPTYPE,SEQNO) +<BYTE (6)OPLVL (9)ATOM (3)AN (6)SQUOZ,OPTYPE,SEQNO> + + ;OPLVL PRIORITY OF BINARY OPERATORS + ;ATOM INDEX TO JUMP TABLE AT CELL1 + ;AN TYPE OF CHARACTER + ; 1=OTHER, 2=ALPHA, 4=NUMERIC + ;SQUOZ VALUE IN RADIX 50 + ;OPTYPE INDEX TO JUMP TABLE AT EVXCT + ;SEQNO VALUE IN SIXBIT +CSTAT: + GENCS 00,00,1,00,00,00 ; ' ' + GENCS 04,12,1,00,06,01 ; '!' + GENCS 00,07,1,00,00,02 ; '"' + GENCS 00,12,1,00,00,03 ; '#' + GENCS 00,01,2,46,00,04 ; '$' + GENCS 00,01,2,47,00,05 ; '%' + GENCS 04,12,1,00,07,06 ; '&' + GENCS 00,07,1,00,00,07 ; ''' + + GENCS 00,01,1,00,00,10 ; '(' + GENCS 00,01,1,00,00,11 ; ')' + GENCS 02,12,1,00,01,12 ; '*' + GENCS 01,00,1,00,03,13 ; '+' + GENCS 40,01,1,00,00,14 ; ',' + GENCS 01,02,1,00,04,15 ; '-' + GENCS 00,11,2,45,00,16 ; '.' + GENCS 02,12,1,00,02,17 ; '/' + + GENCS 00,04,4,01,00,20 ; '0' + GENCS 00,04,4,02,00,21 ; '1' + GENCS 00,04,4,03,00,22 ; '2' + GENCS 00,04,4,04,00,23 ; '3' + GENCS 00,04,4,05,00,24 ; '4' + GENCS 00,04,4,06,00,25 ; '5' + GENCS 00,04,4,07,00,26 ; '6' + GENCS 00,04,4,10,00,27 ; '7' + + GENCS 00,04,4,11,00,30 ; '8' + GENCS 00,04,4,12,00,31 ; '9' + GENCS 00,12,1,00,00,32 ; ':' + GENCS 00,01,1,00,00,33 ; ';' + GENCS 00,05,1,00,00,34 ; '<' + GENCS 00,12,1,00,00,35 ; '=' + GENCS 00,01,1,00,00,36 ; '>' + GENCS 00,12,1,00,00,37 ; '?' + GENCS 00,03,1,00,00,40 ; '@' + GENCS 00,01,2,13,00,41 ; 'A' + GENCS 00,01,2,14,00,42 ; 'B' + GENCS 00,01,2,15,00,43 ; 'C' + GENCS 00,01,2,16,00,44 ; 'D' + GENCS 00,01,2,17,00,45 ; 'E' + GENCS 00,01,2,20,00,46 ; 'F' + GENCS 00,01,2,21,00,47 ; 'G' + + GENCS 00,01,2,22,00,50 ; 'H' + GENCS 00,01,2,23,00,51 ; 'I' + GENCS 00,01,2,24,00,52 ; 'J' + GENCS 00,01,2,25,00,53 ; 'K' + GENCS 00,01,2,26,00,54 ; 'L' + GENCS 00,01,2,27,00,55 ; 'M' + GENCS 00,01,2,30,00,56 ; 'N' + GENCS 00,01,2,31,00,57 ; 'O' + + GENCS 00,01,2,32,00,60 ; 'P' + GENCS 00,01,2,33,00,61 ; 'Q' + GENCS 00,01,2,34,00,62 ; 'R' + GENCS 00,01,2,35,00,63 ; 'S' + GENCS 00,01,2,36,00,64 ; 'T' + GENCS 00,01,2,37,00,65 ; 'U' + GENCS 00,01,2,40,00,66 ; 'V' + GENCS 00,01,2,41,00,67 ; 'W' + + GENCS 00,01,2,42,00,70 ; 'X' + GENCS 00,01,2,43,00,71 ; 'Y' + GENCS 00,01,2,44,00,72 ; 'Z' + GENCS 00,06,1,00,00,73 ; '[' + GENCS 00,12,1,00,00,74 ; '\' + GENCS 00,01,1,00,00,75 ; ']' + GENCS 00,10,1,00,00,76 ; '^' + GENCS 10,12,1,00,05,77 ; '_' + SUBTTL LISTING ROUTINES + +OUTLIN: TRNN ER,ERRORS-ERRQ ;ANY ERRORS? + TLNE FR,ERRQSW ;NO, IGNORE Q ERRORS? + TRZ ER,ERRQ ;YES, YES, ZERO THE Q ERROR + HRLZ AC0,ER ;PUT ERROR FLAGS IN AC0 LEFT + TDZ ER,TYPERR + JUMP1 OUTL30 ;BRANCH IF PASS ONE + JUMPN AC0,OUTL02 ;JUMP IF ANY ERRORS TO FORCE PRINTING + SKIPL STPX ;SKIP IF NO CODE, OTHERWISE + JRST OUTL01 ;NO + TLNN IO,IOSALL ;YES,SUPPRESS ALL? + JRST OUTL03 ;NO + JUMPN MRP,CPOPJ ;YES,EXIT IF IN MACRO + LDB C,[XWD 350700,LBUF] + CAIE C,15 ;FIRST CHAR CR? +OUTL01: TLZ IO,IOMAC ;FORCE MACRO PRINTING +OUTL03: TLNN IO,IOMSTR!IOPROG!IOMAC +OUTL02: IOR ER,OUTSW ;FORCE IT. + IDPB AC0,LBUFP ;STORE ZERO TERMINATOR AFTER ASCII SRC LINE + TLNN FR,CREFSW ;CREF? + PUSHJ PP,CLSCRF ;YES, WRITE END OF CREF DATA (177,003) + JUMPE AC0,OUTL20 ;BRANCH IF NO ERRORS + TLZE AC0,ERRM ;M ERROR? + TLO AC0,ERRP ;M ERROR SET - SET P ERROR. + PUSHJ PP,OUTLER ;PROCESS ERRORS + +OUTL20: SKIPN RC,ASGBLK + SKIPE CS,LOCBLK ; + SKIPL STPX ;ANY BINARY? + JRST OUTL23 ;YES, JUMP + JUMPE RC,OUTL22 ;SEQUENCE BREAK AND NO BINARY JUMPS + ILDB C,TABP ;ASSIGNMENT FALLS THROUGH + PUSHJ PP,OUTL ;OUTPUT A TAB. + ILDB C,TABP ;OUTPUT 2ND TAB, LOCATION FIELD + PUSHJ PP,OUTC ;NEXT IS BINARY LISTING FIELD + HLLO CS,LOCBLK ;LEFT HALF OF A 36BIT VALUE + JUMPL RC,.+2 ;SKIP IF LEFT HALF IS NOT RELOC + TRZA CS,1 ;IT IS, SET THE FLAG + TLNE CS,-1 ;SKIP IF ITS A 18BIT VALUE, OTHERWISE + PUSHJ PP,ONC1 ;PRINT LH OF A 36 BIT VALUE IN CS + HRLO CS,LOCBLK ;PICK UP THE RIGHT HALF (18BIT VALUE) + TRZ CS,0(RC) ; + PUSHJ PP,ONC ;PRINT IT + JRST OUTL23 ;SKIP SINGLE QUOTE TEST + OUTL22: PUSHJ PP,ONC ;TAB TO RH AND PRINT IT + MOVEI C,"'" + SKIPE MODA + PUSHJ PP,OUTC +OUTL23: SKIPL STPX ;ANY BINARY? + PUSHJ PP,BOUT ;YES, DUMP IT + MOVE CS,@OUTLI2 ;[POINT 7,LBUF] +OUTL24: ILDB C,CS + JUMPE C,OUTL25 + CAIG C," " + JRST OUTL24 + MOVE CS,TABP + PUSHJ PP,OUTASC ;OUTPUT TABS +OUTL25: MOVEI CS,LBUF + PUSHJ PP,OUTAS0 ;DUMP THE LINE + TLNE IO,IOSALL ;SUPPRESSING ALL + JUMPN MRP,OUTL27 ;YES,EXTRA CR IF IN MACRO +OUTL26: SKIPGE STPX ;ANY BINARY? + JRST OUTLI ;NO, CLEAN UP AND EXIT + PUSHJ PP,OUTLI2 ;YES, INITIALIZE FOR NEXT LINE + PUSHJ PP,BOUT ;YES, DUMP IT +OUTL27: PUSHJ PP,OUTCR ;OUTPUT CARRIAGE RETURN + JRST OUTL26 ;TEST FOR MORE BINARY + +OUTPL: SKIPN LITLVL ;IF IN LITERAL + SKIPL STPX ;OR CODE GENERATED + JRST OUTIM ;JUST OUTPUT THE IMAGE + SKIPN ASGBLK ;SKIP IF AN ASSIGNMENT + JRST OUTIM ;OTHERWISE OUTPUT IMAGE + PUSH PP,C ;SAVE CHAR. + MOVEI C,CR + IDPB C,LBUFP + MOVEI C,LF + IDPB C,LBUFP ;FINISH WITH CRLF + PUSHJ PP,OUTLIN ;OUTPUT PARTIAL LINE + POP PP,C ;RESTORE CHAR. + JRST OUTLI2 ;INITIALISE REST OF LINE + OUTL30: AOS CS,STPX ;PASS ONE + ADDM CS,LOCO ;INCREMENT OUTPUT LOCATION + PUSHJ PP,STOWI ;INITIALIZE STOW + TLZ AC0,ERRORS-ERRM-ERRP-ERRV + JUMPN AC0,OUTL32 ;JUMP IF ERRORS + TLNE IO,IOSALL ;SUPPRESSING ALL/ + JUMPN MRP,CPOPJ ;YES,EXIT + JRST OUTLI1 ;NO,INIT LINE + +OUTL32: IDPB AC0,LBUFP ;ZERO TERNIMATOR + IOR ER,OUTSW ;LIST ERRORS + MOVEI CS,TAG + PUSHJ PP,OUTSIX ;OUTPUT TAG + HRRZ C,TAGINC + PUSHJ PP,DNC ;CONVERT INCREMENT TO DECIMAL + PUSHJ PP,OUTTAB ;OUTPUT TAB + PUSHJ PP,OUTLER ;OUTPUT ERROR FLAGS + PUSHJ PP,OUTTAB + MOVEI CS,SEQNO ;ADDRESS OF SEQUENCE NO. + SKIPE SEQNO ;FILE NOT SEQUENCED + PUSHJ PP,OUTAS0 ;OUTPUT IT + JRST OUTL25 ;OUTPUT BASIC LINE + +OUTLER: PUSH PP,ER ;SAVE LISTING SWITCHES FOR LATER + TRNE ER,TTYSW ;IF THIS IS ON, LISTING IS ON TTY + TRZ ER,ERRORS ;SO SUPPRESS ON TTY + TDZ ER,OUTSW ;BUT THIS SHOULD ONLY GO TO THE TTY + MOVE CS,INDIR ;GET FILE NAME + CAME CS,LSTFIL ;AND SEE IF SAME + JRST [MOVEM CS,LSTFIL ;SAVE AS LAST ONE + MOVEI CS,LSTFIL + PUSHJ PP,OUTSIX ;LIST NAME + MOVEI C," " + PUSHJ PP,OUTL + MOVE CS,PAGENO ;PRINT PAGE NUMBER TOO + JRST OUTLE8] + MOVE CS,PAGENO ;NOW CHECK PAGE NUMBER + CAME CS,LSTPGN +OUTLE8: JRST [MOVEM CS,LSTPGN + MOVEI CS,[ASCIZ /PAGE /] + PUSHJ PP,OUTAS0 + MOVE C,PAGENO + PUSHJ PP,DNC + PUSHJ PP,OUTCR ;AND NOW FOR THE ERROR LINE + JRST .+1] + HLLM ER,(PP) ;RESTORE ER BUT NOT IO (LEFT HALF OF AC) + POP PP,ER + MOVE CS,[POINT 7,[ASCII / QXADLRUVNOPEM/]] +OUTLE2: ILDB C,CS ;GET ERROR MNEMONIC + JUMPGE AC0,OUTLE4 ;BRANCH IF NOT FLAGGED + PUSHJ PP,OUTL ;OUTPUT THE CHARACTER + AOS ERRCNT ;INCREMENT ERROR COUNT +OUTLE4: LSH AC0,1 ;SHIFT NEXT FLAG INTO SIGN BIT + JUMPN AC0,OUTLE2 ;TEST FOR END + POPJ PP, ;EXIT + OUTIM1: TLOA FR,IOSCR ;SUPPRESS CRLF AFTER LINE +OUTIM: TLZ FR,IOSCR ;DON'T FOR PARTIAL LINE + TLNE IO,IOSALL ;SUPPRESSING ALL? + JUMPN MRP,CPOPJ ;YES ,EXIT IF IN MACRO + JUMP1 OUTLI1 ;BYPASS IF PASS ONE + PUSH PP,ER + TDZ ER,TYPERR + TLNN IO,IOMSTR!IOPROG!IOMAC + IOR ER,OUTSW + PUSH PP,C ;OUTPUT IMAGE + TLNN FR,CREFSW + PUSHJ PP,CLSCRF +OUTIM2: MOVE CS,TABP + PUSHJ PP,OUTASC ;OUTPUT TABS + IDPB C,LBUFP ;STORE ZERO TERMINATOR + MOVEI CS,LBUF + PUSHJ PP,OUTAS0 ;OUTPUT THE IMAGE + TLZN FR,IOSCR ;CRLF SUPPRESS? + PUSHJ PP,OUTCR ;NO,OUTPUT + POP PP,C + HLLM ER,0(PP) + POP PP,ER + JRST OUTLI2 + +OUTLI: TLNE IO,IOSALL ;SUPPRESSING ALL + JUMPN MRP,OUTLI3 ;YES,SET FLAG IN REPEATS ALSO + TLNE IO,IOPALL ;MACRO EXPANSION SUPRESS REQUESTED? + SKIPN MACLVL ;YES, ARE WE IN MACRO? + TLZA IO,IOMAC ;NO, CLEAR MAC FLAG +OUTLI3: TLO IO,IOMAC ;YES, SET FLAG + +OUTLI1: TRZ ER,ERRORS!LPTSW!TTYSW +OUTLI2: MOVE CS,[POINT 7,LBUF] ;INITIALIZE BUFFERS + MOVEM CS,LBUFP + MOVE CS,[POINT 7,TABI,6] + MOVEM CS,TABP + MOVEI CS,.CPL + MOVEM CS,CPL + MOVSI CS,(ASCII / /) + SKIPE SEQNO ;HAVE WE SEQUENCE NUMBERS? + MOVEM CS,SEQNO ;YES, STORE TAB IN CASE OF MACRO + MOVEM CS,SEQNO+1 ;STORE TAB AND TERMINATOR + SETZM ASGBLK + SETZM LOCBLK + POPJ PP, + OUTIML: TLNE IO,IOSALL ;SUPPRESSING ALL? + JUMPN MRP,CPOPJ ;YES,EXIT IF IN MACRO + TRNN ER,ERRORS-ERRQ ;FOR LITERALS (MULIT-LINE) OUTPUT ERRORS + TLNE FR,ERRQSW + TRZ ER,ERRQ + HRLZ CS,ER + JUMP1 OUTML1 ;CHECK PASS1 ERRORS + TDZ ER,TYPERR + JUMPE CS,OUTIM1 + PUSH PP,[0] ;ERRORS SHOULD BE ZEROED + PUSH PP,C + PUSH PP,AC0 ;SAVE AC0 IN CASE CALLED FROM ASCII + MOVE AC0,CS ;ERROR ROUTINE WANTS FLAGS IN AC0 + IOR ER,OUTSW + TLNN FR,CREFSW + PUSHJ PP,CLSCRF ;FIX CREF + TLZE AC0,ERRM + TLO AC0,ERRP + PUSHJ PP,OUTLER ;OUTPUT THEM + POP PP,AC0 + JRST OUTIM2 ;AND LINE + +OUTML1: TLZ CS,ERRORS-ERRM-ERRP-ERRV + JUMPE CS,OUTLI2 ;NONE + TRZ ER,ERRM!ERRP!ERRV + TRO ER,ERRL + PUSH PP,ER ;SAVE + PUSH PP,C ;SAVE THIS + PUSH PP,AC0 ;AS ABOVE + MOVE AC0,CS ;... + TDZ ER,TYPERR + IOR ER,OUTSW + MOVEI CS,TAG + PUSHJ PP,OUTSIX + HRRZ C,TAGINC + PUSHJ PP,DNC + PUSHJ PP,OUTTAB + PUSHJ PP,OUTLER ;DO NOT FORGET ERRORS + PUSHJ PP,OUTTAB + MOVEI CS,LBUF ;PRINT REST OF LINE + PUSHJ PP,SOUT20 + POP PP,AC0 + POP PP,C + POP PP,ER + JRST OUTLI2 + SUBTTL OUTPUT ROUTINES +UOUT: PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + TRNN ARG,PNTF ;WFW + TRNN ARG,UNDF + JRST UOUT13 ;TEST FOR UNDF!EXTF!PNTF ON PASS2 + JUMP2 UOUT10 + TLNN IO,IOIOPF ;ANY IOP'S SEEN + JRST UOUT12 ;NO,MAKE EXTERNAL + MOVSI CS,PRMTBL-PRMEND;YES LOOKUP IN TABLE +UOUT1: CAME AC0,PRMTBL(CS) ;HAVE WE A MATCH? + AOBJN CS,UOUT2 ;NO,INCREMENT AND JUMP + MOVE ARG,PRMTBL+1(CS);YES,GET VALUE + MOVEM ARG,(SX) ;UPDATE SYMBOL TABLE + POPJ PP, ;EXIT +UOUT2: AOBJN CS,UOUT1 ;TEST FOR END + +UOUT12: PUSHJ PP,EXTER2 ;MAKE IT EXTERNAL + MOVSI ARG,UNDF ;BUT PUT UNDF BACK ON + IORM ARG,(SX) ;SO MESSAGE WILL COME OUT + POPJ PP, ;GET NEXT SYMBOL + +UOUT13: JUMP1 CPOPJ ;RECYCLE ON PASS1 + TRC ARG,UNDF!EXTF!PNTF ;CHECK FOR ALL THREE ON + TRCE ARG,UNDF!EXTF!PNTF ;ARE THEY? + POPJ PP, ;NO, RECYCLE +UOUT10: PUSHJ PP,OUTCR + PUSHJ PP,OUTSYM ;OUTPUT THE SYMBOL + MOVEI CS,[SIXBIT /UNASSIGNED, DEFINED AS IF EXTERNAL @/] + JRST OUTSIX ;POPJ FOR NEXT SYMBOL + +UOUT30: PUSHJ PP,ONC1 ;OUTPUT THE LOCATION + JRST HIGHQ ;EXIT THROUGH HIGHQ + ;OUTPUT THE ENTRIES + +EOUT: MOVEI C,0 ;INITIALIZE THE COUNT + MOVE SX,SYMBOL + MOVE SDEL,0(SX) +EOUT1: SOJL SDEL,EOUT2 ;TEST FOR END + ADDI SX,2 + HLRZ ARG,0(SX) + ANDCAI ARG,SYMF!INTF!ENTF + JUMPN ARG,EOUT1 ;IF INVALID, DON'T COUNT + AOJA C,EOUT1 ;BUMP COUNT + +EOUT2: HRLI C,4 ;BLOCK TYPE 4 + PUSHJ PP,OUTBIN + SETZB C,ARG + PUSHJ PP,OUTBIN + MOVE SX,SYMBOL + MOVE SDEL,0(SX) + MOVEI V,^D18 + +EOUT3: SOJL SDEL,POPOUT + ADDI SX,2 + HLRZ C,0(SX) + ANDCAI C,SYMF!INTF!ENTF + JUMPN C,EOUT3 + SOJGE V,EOUT4 ;TEST END OF BLOCK + PUSHJ PP,OUTBIN + MOVEI V,^D17 ;WFW +EOUT4: MOVE AC0,-1(SX) + PUSHJ PP,SQOZE + MOVE C,AC0 + PUSHJ PP,OUTBIN + JRST EOUT3 + ;OUTPUT THE SYMBOLS + +SOUT: SKIPN IONSYM ;SKIP IF NOSYM SEEN + TRNN ER,LPTSW!TTYSW ;A LISTING REQUIRED? + JRST SOUT1 ;NO + MOVEI [ASCIZ /SYMBOL TABLE/] + HRRM SUBTTX ;SET NEW SUB-TITLE + PUSHJ PP,OUTFF ;FORCE NEW PAGE + PUSHJ PP,LOUT1 ;OUTPUT THEM + JRST SOUT1 ;NOW FOR BLOCK TYPE 2 + +LOUT1: PUSHJ PP,LLUKUP ;SET FOR TABLE SCAN + TRNN ARG,SYMF + TRNN ARG,MACF!SYNF + TDZA MRP,MRP ;SKIP AND CLEAR MRP + POPJ PP, ;NO, TRY AGAIN + TRNE ARG,INTF + MOVEI MRP,1 + TRNE ARG,EXTF + MOVNI MRP,1 ;MRP=-1 FOR EXTERNAL + TRNE ARG,SYNF ;SYNONYM? + JUMPL MRP,POPOUT ;YES, DON'T OUTPUT IF EXTERNAL + TRNE ARG,SUPRBT ;IF SUPRESSED +; JUMPGE MRP,POPOUT ;DO NOT OUTPUT UNLESS EXTERNAL + POPJ PP, ;DO NOT OUTPUT + AOS (PP) ;SET FOR SKIP RETURN IF SYMBOL IS PRINTED + JUMPGE MRP,LOUT10 ;BRANCH IF NOT EXTERNAL + HLRZ RC,V ;PUT POINTER/FLAGS IN RC + TRNE RC,-2 ;POINTER? + MOVS RC,0(RC) ;YES + HLL V,RC ;STORE LEFT VALUE + +LOUT10: PUSH PP,RC ;SAVE FOR LATER + PUSHJ PP,OUTSYM ;OUTPUT THE NAME + MOVE RC,(PP) ;GET COPY + MOVEI AC1,0 + JUMPLE MRP,LOUT15 ;SET DEFFERRED BITS IF EXTERNAL + TLNE RC,-2 ;CHECK FOR LEFT FIXUP + IORI AC1,40 ;AND SET BITS + TRNE RC,-2 ;CHECK FOR RIGHT FIXUP + IORI AC1,20 ;AND SET BITS +LOUT15: TLNE RC,-2 ;FIX RELOC AS 0 IF EXTERNAL + HRRZS RC + TRNE RC,-2 + HLLZS RC + TLZE RC,-1 + TRO RC,2 + HRL MRP,RC + MOVEI RC,0 + TRNE ARG,ENTF ;ENTRY DMN + HRRI MRP,-5 + TRNE ARG,NOOUTF ;SUPRESS OUTPUT? WFW + ADDI MRP,3 ;YES WFW + TRNE ARG,UNDF ;UNDEFINED IS EXTERNAL + HRRI MRP,2 ;SO FLAG AS UXT + IOR AC1,SOUTC(MRP) + MOVE ARG,AC1 + MOVEM AC0,SVSYM ;SAVE IT + MOVE AC0,V ;GET THE VALUE + HLRZ RC,MRP ;AND THE RELOCATION + HLLO CS,V + TRNE RC,2 ;LEFT HALF RELOCATABLE? + TRZA CS,1 ;NO, FLAG AND PRINT + TLNE CS,-1 ;IS THE LEFT HALF ZERO? + PUSHJ PP,ONC1 ;NO, OUTPUT IT +LOUT11: PUSHJ PP,OUTTAB +LOUT30: HRLO CS,V + TDZ CS,RC ;SET RELOCATION + PUSHJ PP,ONC1 + PUSHJ PP,OUTTAB + POP PP,RC ;GET BACK RELOC AND CHECK EXTERNAL +LOUT60: MOVEI CS,SOUTC(MRP) + PUSHJ PP,OUTAS0 ;EXT/INT +LOUT64: JRST OUTCR ;CARRIAGE RETURN AND TRY FOR ANOTHER + + + SYN IFBLK,SYMBLK ;SOMEWHERE TO STORE THE POINTERS + +LLUKUP: POP PP,LOOKX ;INTERCEPT RETURN POP + MOVE SX,SYMBOL + MOVE SDEL,(SX) + ADDI SX,2 ;SKIP COUNT OF SYMBOLS +LLUKP2: MOVEM SX,SYMBLK ;STORE SYMBOL POINTER IN TABLE + HRRZ SX,SYMBLK + JRST LLUKP7 ;ENTER LOOP + +LLUKP1: MOVEM SX,SYMBLK ;SAVE IT + MOVE AC0,-1(SX) + PUSHJ PP,SRCH7 + HLRZS ARG + PUSHJ PP,@LOOKX + JRST [MOVEM SX,SYMBLK + JRST .+1] +LLUKP7: SOJL SDEL,POPOUT ;TEST FOR END +LLUKP3: MOVE SX,SYMBLK ;GET NEXT POINTER + AOBJP SX,LLUKP4 + HRRZ V,SX + CAMG V,SYMTOP + AOJA SX,LLUKP1 +LLUKP6: PUSHJ PP,LOUT64 ;RESET SYMCNT + JUMPE SDEL,POPOUT ;EXIT IF ALL DONE + JRST LLUKP3 + +LLUKP4: AOJ SX, + MOVEM SX,SYMBLK + JRST LLUKP3 + SOUT1: PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + TRNN ARG,SYMF + TRNN ARG,MACF!SYNF + TDZA MRP,MRP ;SKIP AND CLEAR MRP + POPJ PP, ;NO, TRY AGAIN + TRNE ARG,INTF + MOVEI MRP,1 + TRNE ARG,EXTF + MOVNI MRP,1 ;MRP=-1 FOR EXTERNAL + TRNE ARG,SYNF ;SYNONYM? + JUMPL MRP,POPOUT ;YES, DON'T OUTPUT IF EXTERNAL + TRNE ARG,SUPRBT ;IF SUPRESSED +; JUMPGE MRP,POPOUT ;DO NOT OUTPUT UNLESS EXTERNAL + POPJ PP, ;DO NOT OUTPUT + JUMPGE MRP,SOUT10 ;BRANCH IF NOT EXTERNAL + HLRZ RC,V ;PUT POINTER/FLAGS IN RC + TRNE RC,-2 ;POINTER? + MOVS RC,0(RC) ;YES + HLL V,RC ;STORE LEFT VALUE + +SOUT10: PUSH PP,RC ;SAVE FOR LATER + MOVEI AC1,0 + JUMPLE MRP,SOUT15 ;SET DEFFERRED BITS IF EXTERNAL + TLNE RC,-2 ;CHECK FOR LEFT FIXUP + IORI AC1,40 ;AND SET BITS + TRNE RC,-2 ;CHECK FOR RIGHT FIXUP + IORI AC1,20 ;AND SET BITS +SOUT15: TLNE RC,-2 ;FIX RELOC AS 0 IF EXTERNAL + HRRZS RC + TRNE RC,-2 + HLLZS RC + TLZE RC,-1 + TRO RC,2 + HRL MRP,RC + MOVEI RC,0 + TRNE ARG,ENTF ;ENTRY DMN + HRRI MRP,-5 + TRNE ARG,NOOUTF ;SUPRESS OUTPUT? WFW + ADDI MRP,3 ;YES WFW + IOR AC1,SOUTC(MRP) + MOVE ARG,AC1 + PUSHJ PP,NOUT2 ;SQUOZE AND DUMP THE SYMBOL + MOVEM AC0,SVSYM ;SAVE IT + MOVE AC0,V ;GET THE VALUE + HLRZ RC,MRP ;AND THE RELOCATION + PUSHJ PP,COUT + POP PP,RC ;GET BACK RELOC AND CHECK EXTERNAL + TRNN RC,-2 ;IS IT? + JRST SOUT50 ;NO + MOVE AC0,1(RC) ;GET NAME + MOVEI ARG,60 ;EXTERNAL REQ + PUSHJ PP,SQOZE + HLLZS RC ;NO RELOC + PUSHJ PP,COUT ;OUTPUT IT + MOVE AC0,SVSYM ;GET SYMBOL NAME + TLO AC0,500000 ;SET AS ADDITIVE SYMBOL + TLZ AC0,200000 ;BUT NOT LEFT HALF ETC + PUSHJ PP,COUT +SOUT50: MOVSS RC ;CHECK LEFT HALF + TRNN RC,-2 + JRST SOUT60 + MOVE AC0,1(RC) + MOVEI ARG,60 + PUSHJ PP,SQOZE + MOVEI RC,0 + PUSHJ PP,COUT + MOVE AC0,SVSYM + TLO AC0,700000 + PUSHJ PP,COUT +SOUT60: POPJ PP, + +SOUT20: PUSHJ PP,OUTAS0 + JRST OUTCR + + <ASCII /ENT/>!04 ;DMN + Z + Z + <ASCII /SEN/>!44 ;SUPRESSED ENTRY + <ASCII /EXT/>!60 +SOUTC: EXP 10 + <ASCII /INT/>!04 + <ASCII /UXT/>!60 ;UNDEFINED EXTERNAL + <ASCII /SPD/>!50 + <ASCII /SIN/>!44 ;DMN + ;OUTPUT THE BINARY + +BOUT: HRLO CS,LOCO ;PICKUP THE LOCATION + PUSHJ PP,ONC ;OUTPUT IT TO THE LISTING FILE + MOVEI C,"'" + SKIPE MODO ;IF MODE IS NOT ABSOLUTE + PUSHJ PP,OUTC ;PRINT A SINGLE QUOTE + PUSHJ PP,DSTOW ;GET THE CODE + PUSH PP,RC ;SAVE RELOC + PUSH PP,RC ;AND AGAIN + TLNE RC,-2 ;CHECK LEFT EXTERNAL + HRRZS RC ;MAKE LEFT NON-RELOC + TRNN RC,-2 ;RIGHT EXT? + JRST BOUT30 ;NO + HRRZ AC1,AC0 ;YES + JUMPE AC1,BOUT20 ;PROCESS IF ZERO CODE THERE + HLLZS RC ;MAKE NON-RELOC + JRST BOUT30 ;PROCESS + + BOUT20: + HRRM AC1,-1(PP) ;FIX RC IN STACK SO NO CONFUSION WFW (AC1 HAS 0) + HRR AC0,0(RC) ;NO, SET ADDRESS LINK + MOVE AC1,LOCO ;GET CURRENT LOCATION + HRRM AC1,0(RC) ;SET NEW LINK + HLRZ AC1,0(RC) ;GET FLAGS/POINTER + TRNN AC1,-2 ;POINTER? + HRR AC1,RC ;NO, SET TO FLAGS + HLR RC,0(AC1) ;PUT FLAGS IN RC + HRL AC1,MODO ;GET CURRENT MODE + TRZE RC,-2 ;LEFT HALF RELOCATABLE+ + TLO AC1,2 ;YES, SET FLAG + HLLM AC1,0(AC1) ;STORE NEW FLAGS +BOUT30: HLLO CS,AC0 + TLZE RC,1 ;PACK RELOCATION BITS + TRO RC,2 + TRNE RC,2 ;LEFT HALF RELOCATABLE? + TRZ CS,1 ;YES, RESET BIT + PUSH PP,AC0 ;NEED AN AC + HLRZ AC0,-1(PP) ;AC0 = LEFT RELOCATION + CAILE AC0,1 ;EXTERNAL? + XORI CS,EXTF!1 ;YES, SET SWITCH + POP PP,AC0 ;RESTORE + PUSHJ PP,ONC + HRLO CS,AC0 + TDZ CS,RC ;SET RELOCATION + HRRZ C,(PP) ;C = RIGHT RELOCATION + CAILE C,1 ;EXTERNAL + XORI CS,EXTF!1 ;YES, SET SWITCH + PUSHJ PP,ONC +BOUT3I: POP PP,CS ;GET RID OF ENTRY ON STACK + HRRZ CS,LOCO + TLNE FR,RIMSW!RIM1SW!R1BSW ;RIM OUTPUT? + JRST ROUT ;YES, GO PROCESS + + HRL CS,MODO + CAME CS,MODLOC ;SEQUENCE OR RELOCATION BREAK? + PUSHJ PP,COUTD ;YES, DUMP THE BUFFER + SKIPL COUTX ;NEW BUFFER? + JRST BOUT40 ;NO, STORE CODE AND EXIT + MOVEM CS,MODLOC ;YES, STORE NEW VALUES + EXCH AC0,LOCO + EXCH RC,MODO + PUSHJ PP,COUT ;STORE BLOCK LOCATION AND MODE + EXCH RC,MODO ;RESTORE CURRENT VALUES + EXCH AC0,LOCO + + BOUT40: PUSHJ PP,COUT ;EMIT CODE + POP PP,RC ;RETRIEVE EXTERNAL BITS + TRNN RC,-2 ;RIGHT EXTERNAL? + JRST BOUT50 ;TRY FOR LEFT + PUSHJ PP,COUTD + PUSH PP,BLKTYP ;TERMINATE TYPE AND SAVE + MOVEI AC0,2 ;BLOCK TYPE 2 + MOVEM AC0,BLKTYP + MOVE AC0,1(RC) ;GET SYMBOL + MOVEI ARG,60 ;CODE BITS + PUSHJ PP,SQOZE ;CONVERT TO RADIX 50 + HLLZS RC ;SYMBOL HAS NO RELOCATION + PUSHJ PP,COUT ;EMIT + MOVE AC0,LOCO ;GET CURRENT LOC + HRLI AC0,400000 ;ADDITIVE REQ + HRR RC,MODO ;CURRENT MODE + PUSHJ PP,COUT ;EMIT + MOVSS RC ;NOW FOR LEFT + TRNN RC,-2 + JRST BOUT60 + JRST BOUT70 +BOUT50: MOVSS RC ;CHECK OTHER HALF + TRNN RC,-2 ;LEFT HALF EXTERNAL? + JRST BOUT80 ;NO, FALSE ALARM + PUSHJ PP,COUTD ;CHANGE MODE + PUSH PP,BLKTYP + MOVEI AC0,2 + MOVEM AC0,BLKTYP +BOUT70: MOVE AC0,1(RC) + MOVEI ARG,60 + PUSHJ PP,SQOZE + HLLZS RC + PUSHJ PP,COUT + MOVE AC0,LOCO + HRLI AC0,600000 ;LEFT HALF ADD + HRR RC,MODO + PUSHJ PP,COUT ;EMIT +BOUT60: PUSHJ PP,COUTD ;CHANGE MODE + POP PP,BLKTYP ;TO OLD ONE +BOUT80: AOS LOCO + AOS MODLOC + POPJ PP, + + NOUT: MOVE V,[POINT 7,TBUF] ;POINTER TO ASCII LINE + MOVSI CS,(POINT 6,AC0) ;POINTER TO SIXBIT AC0 + SETZB ARG,AC0 +NOUT1: ILDB C,V ;GET ASCII + CAIL C,"A"+40 + CAILE C,"Z"+40 + JRST .+2 + TRZA C,100 ;LOWER CASE TO SIXBIT + SUBI C,40 ;CONVERT TO SIXBIT + JUMPLE C,NOUT3 ;TEST FORM NON-SIXBIT + CAILE C,77 ;AND NOT GREATER THAN SIXBIT + JRST NOUT3 ;... + IDPB C,CS ;DEPOSIT IN AC0 + TLNE CS,770000 ;TEST FOR SIX CHARACTERS + JRST NOUT1 ;NO, GET ANOTHER +NOUT3: +IFN UNIVR,<SKIPGE UNIVSN ;IF A UNIVERSAL PROG> + POPJ PP, ;RETURN TO PUT IT IN THE TABLE + +IFN CCLSW,< TLNN IO,IOTLSN ;AND IF WE HAVE NOT SEEN A TITLE + PUSHJ PP,PRNAM ;THEN PRINT THE NAME> +NOUT2: PUSHJ PP,SQOZE ;CONVERT TO SIXBIT + JRST COUT ;DUMP AND EXIT + +HOUT: + MOVEI RC,1 ;RELOCATABLE +IFN RENTSW,< + MOVE AC0,HHIGH ;GET HIGH SEG IF TWO SEGMENTS + JUMPE AC0,.+2 ;NOT TWO SEGMENTS + PUSHJ PP,COUT ;OUTPUT IT > + MOVE AC0,HIGH +IFN RENTSW,< + SKIPE HHIGH ;ANY TWOSEG HIGH STUFF + JRST COUT ;YES,SO NO ABS.> + PUSHJ PP,COUT ;OUTPUT THE HIGHEST LOCATION + MOVE AC0,ABSHI + ;PUT OUT ABS PORTION OF PROGRAM BREAK + SOJA RC,COUT ;OUTPUT A WORD OF ZERO AND EXIT + + IFN RENTSW,< +HSOUT: SETZM HISNSW ;CLEAR FOR PASS2 + MOVE AC0,SVTYP3 ;GET HISEG ARG + JUMPGE AC0,.+4 ;JUMP IF ONLY HISEG + HRL AC0,HIGH1 ;GET BREAK FROM PASS 1 + JUMPL AC0,.+2 ;OK IF GREATER THAN 400000 + HRLS AC0 ;SIGNAL TWO SEGMENT TO LOADER + MOVEI RC,1 ;ASSUME RELOCATABLE + JRST COUT ;OUTPUT THE WORD> + +VOUT: SKIPN RC,VECREL ;IS VECTOR ABSOLUTE ZERO? + SKIPE VECTOR ;ALSO CHECK RELOCATION + JRST .+2 + POPJ PP, ;YES, EXIT + MOVE AC0,VECTOR ;AC0 SHOULD BE FLAGS + +COUT: AOS C,COUTX ;INCREMENT INDEX + MOVEM AC0,COUTDB(C) ;STORE CODE + IDPB RC,COUTP ;STORE RELOCATION BITS + CAIE C,^D17 ;IS THE BUFFER FULL? + POPJ PP, ;NO, EXIT + +COUTD: AOSG C,COUTX ;DUMP THE BUFFER + JRST COUTI ;BUFFER WAS EMPTY + HRL C,BLKTYP ;SET BLOCK TYPE + PUSHJ PP,OUTBIN ;OUTPUT COUNT AND TYPE + SETOB C,COUTY ;INITIALIZE INDEX + +COUTD2: MOVE C,COUTDB(C) ;GET RELOCATION BITS/CODE + PUSHJ PP,OUTBIN ;DUMP IT + AOS C,COUTY ;INCREMENT INDEX + CAMGE C,COUTX ;TEST FOR END + JRST COUTD2 ;NO, GET NEXT WORD + +COUTI: SETOM COUTX ;INITIALIZE BUFFER INDEX + SETZM COUTRB ;ZERO RELOCATION BITS + MOVE C,[POINT 2,COUTRB] + MOVEM C,COUTP ;INITIALIZE BIT POINTER + POPJ PP, ;EXIT + STOWZ1: +STOWZ: MOVEI RC,0 +STOW: + JUMP1 STOW20 ;SKIP TEST IF PASS ONE + TRNE RC,-2 ;RIGHT HALF ZERO OR 1? + PUSHJ PP,STOWT ;NO, HANDLE EXTERNAL + TLNN RC,-2 ;LEFT HALF ZERO OR 1? WFW + JRST STOW10 ;YES, SKIP TEST + MOVSS RC ;SWAP HALVES + PUSHJ PP,STOWT1 ;HANDLE EXTERNAL WFW + MOVSS RC ;RESTORE VALUES + +STOW10: SKIPE EXTPNT ;ANY EXTERNALS REMAINING? + TRO ER,ERRE ;YES, SET EXTERNAL ERROR FLAG + +STOW20: AOS AC1,STPX ;INCREMENT POINTER + MOVEM AC0,STCODE(AC1) ;STOW CODE + MOVEM RC,STOWRC(AC1) ;STOW RELOCATION BITS + SKIPN LITLVL ;ARE WE IN LITERAL? + AOS LOCA ;NO, INCREMENT ASSEMBLY LOCATION + CAIGE AC1,.STP-1 ;OVERFLOW? + POPJ PP, ;NO, EXIT + + SKIPE LITLVL ;ARE WE IN A LITERAL? + TROA ER,ERRL ;YES, FLAG ERROR BUT DON'T DUMP + JRST CHARL1 ;NO, SAVE REGISTERS AND DUMP THE BUFFER + JRST STOWI ;INITIALIZE BUFFER + +DSTOW: AOS AC1,STPY ;INCREMENT POINTER + MOVE AC0,STCODE(AC1) ;FETCH CODE + MOVE RC,STOWRC(AC1) ;FETCH RELOCATION BITS + CAMGE AC1,STPX ;IS THIS THE END? + POPJ PP, ;NO, EXIT + +STOWI: SETOM STPX ;INITIALIZE FOR INPUT + SETOM STPY ;INITIALIZE FOR OUTPUT + SETZM EXTPNT + POPJ PP, ;EXIT + SVSTOW: AOS LITLVL ;NESTED LITERALS + PUSH PP,STPX ;MAKE ROOM FOR ANOTHER + PUSH PP,STPY + MOVE AC1,STPX + MOVEM AC1,STPY + JRST 0(AC2) + +GTSTOW: POP PP,STPY ;BACK UP A LEVEL + POP PP,STPX + SOS LITLVL + JRST 0(AC2) + + ;EXTERNAL RIGHT +STOWT: HRRZ AC1,EXTPNT ;GET RIGHT POINTER + CAIE AC1,(RC) ;DOES IT MATCH + PUSHJ PP,QEXT ;EXTERNAL OR RELOCATION ERROR + HLLZS EXTPNT + POPJ PP, ;EXIT + + ;EXTERNAL LEFT +STOWT1: HLRZ AC1,EXTPNT ;GET LEFT HALF + CAIE AC1,(RC) ;SEE ABOVE + PUSHJ PP,QEXT + HRRZS EXTPNT + POPJ PP, ;EXIT + ONC: ILDB C,TABP ;ENTRY TO ADVANCE TAB POINTER + PUSHJ PP,OUTL ;OUTPUT A TAB + ;OUTPUT 6 OCT NUMBERS FROM CS LEFT +ONC1: MOVEI C,6 ;CONVERT TO ASCII + LSHC C,3 ;SHIFT IN OCTAL + PUSHJ PP,OUTL ;OUTPUT ASCII FROM C + TRNE CS,-1 ;ARE WE THROUGH? + JRST ONC1 ;NO, GET ANOTHER + MOVEI C,0 ;CLEAR C + TLNN CS,1 ;RELOCATABLE? + MOVEI C,"'" ;YES + TLNN CS,EXTF ;OR EXTERNAL + MOVEI C,"*" ;YES +ONC2: JUMPN C,OUTC ;OUTPUT IF EXTERN OR RELOCATABLE + POPJ PP, ;EXIT + +DNC: IDIVI C,^D10 + HRLM CS,0(PP) + JUMPE C,.+2 + PUSHJ PP,DNC ;RECURSE IF NON-ZERO + HLRZ C,0(PP) + ADDI C,"0" ;FORM ASCII + JRST PRINT ;DUMP AND TEST FOR END + +OUTAS0: HRLI CS,(POINT 7,,) ;ENTRY TO SET POINTER +OUTASC: ILDB C,CS ;GET NEXT BYTE + JUMPE C,POPOUT ;EXIT ON ZERO DELIMITER + PUSHJ PP,PRINT + JRST OUTASC + +OUTSIX: HRLI CS,(POINT 6,,) ;OUTPUT SIXBIT + ILDB C,CS ;GET SIXBIT + CAIN C,40 ;"@" DELIMITER? + POPJ PP, ;YES, EXIT + ADDI C,40 ;NO, FORM ASCII + PUSHJ PP,OUTL ;OUTPUT ASCII CHAR FROM C + JRST OUTSIX+1 + +OUTSYM: MOVE CS,AC0 ;PLACE NAME IN CS +OUTSY1: MOVEI C,0 ;CLEAR C + LSHC C,6 ;MOVE NEXT SIXBIT CHARACTER IN + JUMPE C,OUTTAB ;TEST FOR END + ADDI C,40 ;CONVERT TO ASCII + PUSHJ PP,OUTL ;OUTPUT + JRST OUTSY1 ;LOOP + OUTSET: AOS SX,0(PP) ;GET RETURN LOCATION + MOVE SX,-1(SX) ;GET XWD CODE + HLRM SX,BLKTYP ;SET BLOCK TYPE + SETZB ARG,RC + PUSHJ PP,0(SX) ;GO TO PRESCRIBED ROUTINE + JRST COUTD ;TERMINATE BLOCK AND EXIT + + ;LOOKUP SCANS ALL THE SYMBOLS IN THE SYMBOL TABLE + +LOOKUP: POP PP,LOOKX ;INTERCEPT RETURN POP + MOVE SX,SYMBOL + MOVE SDEL,0(SX) ;SET FOR TABLE SCAN +LOOKL: SOJL SDEL,POPOUT ;TEST FOR END + ADDI SX,2 + MOVE AC0,-1(SX) + PUSHJ PP,SRCH7 ;LOAD REGISTERS + HLRZS ARG + PUSHJ PP,@LOOKX ;RETURN TO CALLING ROUTINE + JRST LOOKL ;TRY AGAIN + END0: PUSHJ PP,EVALCM ;GET A WORD + SKIPE EXTPNT ;ANY EXTERNALS? + TRO ER,ERRE ;YES, ERROR + SKIPN V,AC0 ;NON-ZERO? + JUMPE RC,.+2 ;OR RELOC? + PUSHJ PP,ASSIG7 ;YES, LIST THE VALUE + MOVEM AC0,VECTOR + MOVEM RC,VECREL + PUSHJ PP,VARA ;FILL OUT SELF-DEFINED VARIABLES + PUSHJ PP,STOUTS ;DUMP THE LINE +; PUSH PP,IO ;SAVE FLAGS +; TLO IO,IOPROG ;XLIST LITS + PUSHJ PP,LIT1 +; POP PP,IO ;GET FLAG BACK + JUMP2 ENDP2 + + PUSHJ PP,UOUT + TLNN IO,MFLSW ;SKIP IF ONLY PSEND + PUSHJ PP,REC2 + MOVE INDIR ;SET UP FIRST AS LAST + MOVEM LSTFIL ;PRINTED + SETZM LSTPGN + PUSHJ PP,INZ + TLNE IO,MFLSW ;IF PSEND + POPJ PP, ;BACK TO PSEND0 + SKIPE PRGPTR ;HAVE ANY PRGEND'S BEEN SEEN + JRST PSEND3 ;YES,GO SET UP AGAIN + +PASS20: SETZM CTLSAV + PUSHJ PP,COUTI + PUSHJ PP,EOUT ;OUTPUT THE ENTRIES + PUSHJ PP,OUTSET + XWD 6,NOUT ;OUTPUT THE NAME (BLKTYP-6) +IFN RENTSW,< + SKIPN HISNSW ;PUT OUT BLOCK TYPE 3? + JRST PASS21 ;NO + PUSHJ PP,OUTSET + XWD 3,HSOUT ;OUTPUT THE HISEG BLOCK +PASS21: > + MOVEI 1 + HRRM BLKTYP ;SET FOR TYPE 1 BLOCK + TLZ FR,P1 ;SET FOR PASS 2 AND TURN OFF FLAG + TLO IO,IOPALL ;PUT THESE BACK + TLZ IO,IOPROG!IOCREF!DEFCRS ;SO LISTINGS WILL BE THE WAY THEY SHOULD + TLNN FR,R1BSW + JRST STOWI + + MOVE CS,[XWD $ST-1-$CKSM,R1BLDR] + MOVE C,0(CS) + PUSHJ PP,PTPBIN + AOBJN CS,.-2 + PUSHJ PP,R1BI + JRST STOWI + +R1BLDR: + PHASE 0 + IOWD $ADR,$ST +$ST: CONO PTR,60 + HRRI $A,$RD+1 +$RD: CONSO PTR,10 + JRST .-1 + DATAI PTR,@$TBL1-$RD+1($A) + XCT $TBL1-$RD+1($A) + XCT $TBL2-$RD+1($A) +$A: SOJA $A, +$TBL1: CAME $CKSM,$ADR + ADD $CKSM,1($ADR) + SKIPL $CKSM,$ADR +$TBL2: JRST 4,$ST + AOBJN $ADR,$RD +$ADR: JRST $ST+1 +$CKSM: + DEPHASE + +IF2,< PURGE $ST,$RD,$A,$TBL1,$TBL2,$ADR,$CKSM> + ENDP2: PUSHJ PP,COUTD ;DUMP THE BUFFER + MOVE AC0,LOCO ;CHECK TO SEE IF LIT DIFFERED + SKIPN MODO ;AND USE SMALLER SINCE AT END + JRST [CAMN AC0,ABSHI + HRRZM AC2,ABSHI + JRST ENDP2W] +IFN RENTSW,<SKIPE HHIGH ;SKIP IF NOT TWO SEGMENTS + JRST [CAMN AC0,HHIGH + HRRZM AC2,HHIGH + JRST ENDP2W]> + CAMN AC0,HIGH + HRRZM AC2,HIGH +ENDP2W: +REPEAT 1,<TLNE IO,IOCREF ;CLOSE CREF IF NECESSARY> +REPEAT 0,<TLNE FR,CREFSW ;IF CREFFING + JRST ENDP2Q + MOVEI SDEL,0 + PUSH PP,DBUF+3 ;SO NO PAGE INFO + DPB SDEL,[POINT 7,DBUF+3,13] + IOR ER,OUTSW ;MAKE SURE OF OUTPUT + PUSHJ PP,CREF + MOVEI C,20 ;CODE FOR TITLE + PUSHJ PP,OUTLST + PUSH PP,IO ;SAVE THIS + TLZ IO,IOPAGE ;AND PREVENT PAGE DURING TITLE + MOVEI CS,TBUF + PUSHJ PP,OUTAS0 + MOVEI CS,VBUF + PUSHJ PP,OUTAS0 + POP PP,IO ;RESTORE THE IO WORD + POP PP,DBUF+3 > ;NEEDS FIX TO CREF + PUSHJ PP,CLSCR2 ;CLOSE IT UP +ENDP2Q: HRR ER,OUTSW ;SET OUTPUT SWITCH + SKIPN TYPERR + TRO ER,TTYSW + PUSHJ PP,UOUT ;OUTPUT UNDEFINEDS + TRO ER,TTYSW + SKPINC C ;SEE IF WE CAN INPUT A CHAR. + JFCL ;BUT ONLY TO DEFEAT ^O + SKIPG C,ERRCNT ;GET ERROR COUNT AND CHECK FOR POSITIVE + JRST NOERW ;PRINT NO ERROR MESSAGE +IFN CCLSW,<ADDM C,JOBERR ;REMEMBER ERROR COUNT FOR EXECUTION DELETION> + PUSHJ PP,OUTCR + MOVE C,ERRCNT + CAIN C,1 ;1 IS A SPECIAL CASE + JRST ONERW ;PRINT MESSAGE + MOVEI C,"?" ;? FOR BATCH + PUSHJ PP,OUTL ;... + MOVE C,ERRCNT ;PRINT NUMBER OF ERRORS + PUSHJ PP,DNC + SKIPA CS,[EXP ERRMS1] ;LOAD TO PRINT +ONERW: MOVEI CS,ERRMS2 ;ONE ERROR DETECTED +ONERW1: PUSHJ PP,OUTSIX ;PRINT + JRST ENDP2A +NOERW: MOVEI CS,ERRMS3 +IFN CCLSW,<TLNE IO,CRPGSW!MFLSW ;IF RPG, DON'T PRINT MESSAGE> +IFE CCLSW,<TLNE IO,MFLSW ;NOR IF MULTI-FILE MODE> + TRZ ER,TTYSW ;NO TTY OUTPUT + IOR ER,OUTSW ;UNLESS NEEDED FOR LISTING + PUSHJ PP,OUTCR + JRST ONERW1 + + ENDP2A: PUSHJ PP,OUTCR + TLNN IO,MFLSW ;IN A MULTI-PROG FILE? + JRST ENDP2D ;NO + SKIPE ERRCNT ;ANY ERROR? + PUSHJ PP,[MOVEI CS,[ASCIZ /PROGRAM /] + PUSHJ PP,OUTAS0 ;YES,SO PRINT MESSAGE + MOVEI CS,TBUF ;AND TITLE + PUSHJ PP,OUTAS0 ;FOR IDENTIFICATION + JRST OUTCR] ;AND A CR-LF + TRZA ER,TTYSW ;NO MORE OUTPUT NOW +ENDP2D: +IFN CCLSW,<TLNE IO,CRPGSW ;IF RPG, DON'T PRINT PGM BREAK + TRZ ER,TTYSW ;...> +IFE CCLSW,< SKIPA ;SO PRGEND CODE CAN WORK> + IOR ER,OUTSW ;... + PUSHJ PP,OUTCR +IFN RENTSW,< + MOVEI CS,[SIXBIT /HI-SEG. BREAK IS @/] + SKIPN HHIGH ;DON'T PRINT IF ZERO + JRST ENDP2C ;IT WAS + PUSHJ PP,OUTSIX + HRLO CS,HHIGH ;GET THE BREAK + PUSHJ PP,ONC1 + PUSHJ PP,OUTCR +ENDP2C:> + MOVEI CS,[SIXBIT /PROGRAM BREAK IS @/] + PUSHJ PP,OUTSIX ;OUTPUT PROGRAM BREAK + HRRZ CS,ABSHI ;GET ABS. BREAK + CAIG CS,140 ;ANY ABS. CODE + JRST [HRLO CS,HIGH ;NO + JRST ENDP2B] ;SO DON'T PRINT + HRLO CS,HIGH ;GET PROGRAM BREAK + PUSHJ PP,ONC1 + PUSHJ PP,OUTCR + MOVEI CS,[SIXBIT /ABSLUTE BREAK IS @/] + PUSHJ PP,OUTSIX + HRLO CS,ABSHI +ENDP2B: PUSHJ PP,ONC1 + PUSHJ PP,OUTCR + TLNE FR,RIMSW!R1BSW ;RIM MODE? + PUSHJ PP,RIMFIN ;YES, FINISH IT +IFN CCLSW,<TLNN IO,CRPGSW!MFLSW ;IF NOT IN CCL MODE> +IFE CCLSW,<TLNN IO,MFLSW ;NOR IF IN MULTI-FILE MODE> + TRO ER,TTYSW ;PRINT SIZE + PUSHJ PP,OUTCR + MOVE C,JOBREL + LSH C,-^D10 + ADDI C,1 + PUSHJ PP,DNC + MOVEI CS,[SIXBIT /K CORE USED@/] + PUSHJ PP,OUTSIX + PUSHJ PP,OUTCR + HRR ER,OUTSW + PUSHJ PP,OUTSET + XWD 2,SOUT ;OUTPUT THE SYMBOLS (BLKTYP-2) + PUSHJ PP,OUTSET + XWD 7,VOUT ;OUTPUT TRANSFER VECTOR (..-7) + PUSHJ PP,OUTSET + XWD 5,HOUT ;OUTPUT HIGHEST RELOCATABLE (..-5) + PUSHJ PP,COUTD + TLNN IO,MFLSW ;IS IT PRGEND? + JRST FINIS ;ALAS, FINISHED + MOVEI CS,SBUF ;RESET SBUF POINTER + HRRM CS,SUBTTX ;TO SUBTTL + SETZM PASS2I ;CLEAR PASS2 VARIABLES + MOVE [XWD PASS2I,PASS2I+1] + BLT PASS2Z-1 ;BUT NOT ALL OF VARIABLES + JRST INZ ;RE-INITIALIZE FOR NEXT PROG + + +RIMFIN: TLNE FR,R1BSW + PUSHJ PP,R1BDMP + SKIPN C,VECTOR + MOVSI C,(JRST 4,) + TLNN C,777000 + TLO C,(JRST) + PUSHJ PP,PTPBIN + MOVEI C,0 + JRST PTPBIN + SUBTTL PASS INITIALIZE +INZ: AOS MODA + AOS MODO + SETZM SEQNO + SETZM TAG + HRRI RX,^D8 + MOVEI VARHD + MOVEM VARHDX + MOVEI LITHD + MOVEM LITHDX + PUSHJ PP,LITI + PUSHJ PP,STOWI + JRST OUTLI + +RCPNTR: POINT 1,ARG,^L<RELF>-18 ;POINT 1,ARG,22 + SUBTTL PSEUDO-OP HANDLERS + +TAPE0: PUSHJ PP,STOUTS ;FINISH THIS LINE + JRST GOTEND ;AND IGNORE THE REST OF THIS FILE + +RADIX0: PUSHJ PP,EVAL10 ;EVALUATE RADIX D10 + CAIG AC0,^D10 ;IF GREATER THAN 10 + CAIG AC0,1 ;OR LESS THAN 2, +ERRAX: TROA ER,ERRA ;FLAG ERROR AND SKIP + HRR RX,AC0 ;SET NEW RADIX + POPJ PP, + + +XALL0: TLZ IO,IOSALL ;TURN OFF MACRO SUPPRESS ALL +IOSET: JUMP1 POPOUT ;NOSYM (IONSYM), XALL (IOPALL), XLIST (IOPROG) + HLRZ SX,AC0 ;STORE FLAGS + PUSHJ PP,STOUTS ;POLISH OFF LINE + TLO IO,0(SX) ;NOW SUPRESS PRINTING + POPJ PP, + +IORSET: TDZ IO,AC0 ;RESET FLAG IOPALL/IOPROG + TLNE AC0,IONCRF ;RESTORING CREFFING? + TLZ IO,DEFCRS ;YES, CLEAR ANY WAITING DEFINING OCCURENCES + POPJ PP, + +BLOCK0: PUSHJ PP,HIGHQ + PUSHJ PP,EVALEX ;EVALUATE + TRZE RC,-1 ;EXTERNAL OR RELOCATABLE? + PUSHJ PP,QEXT ;YES, DETERMINE TYPE + ADDM AC0,LOCO ;UPDATE ASSEMBLY LOCATION +BLOCK1: EXCH AC0,LOCA ;SAVE START OF BLOCK + ADDM AC0,LOCA ;UPDATE OUTPUT LOCATION +BLOCK2: HRLOM AC0,LOCBLK + JUMP2 POPOUT + TRNE ER,ERRU + TRO ER,ERRV + POPJ PP, + +PRNTX0: TRO ER,TTYSW ;SET OUTPUT TO TTY + JUMP2 PRNTX2 ;PASS1? + TDOA ER,OUTSW ;YES,OUTPUT TO LSTDEV ALSO +PRNTX2: ANDCM ER,OUTSW ;NO,DON'T OUTPUT TO TTY IF IT IS LSTDEV + PUSHJ PP,BYPASS ;GET FIRST CHAR. + TLOA IO,IORPTC ;REPEAT IT AND SKIP +PRNTX4: PUSHJ PP,PRINT ;PRINT THE CHAR. + PUSHJ PP,CHARAC ;GET ASCII CHAR. + CAIG C,CR ;IF GREATER THAN CR + CAIG C,HT ;OR LESS THAN LF + JRST PRNTX4 ;THEN CONTINUE + PUSHJ PP,OUTCR ;OUTPUT A CRLF + TRZA ER,TTYSW!LPTSW ;TURN OF OUTPUT +CPOPJ1: AOS (PP) ;USEFUL TAG HAS TO GO SOMEWHERE +CPOPJ: POPJ PP, ;EXIT + +REMAR0: PUSHJ PP,GETCHR ;GET A CHARACTER + CAIE C,EOL + JRST REMAR0 + POPJ PP, ;EXIT + LIT0: PUSHJ PP,BLOCK1 + PUSHJ PP,STOUTS +LIT1: JUMP2 LIT20 + +;ON PASS ONE, WE JUST STEP THE LOCATION COUNTER AND CLEAR + + MOVE AC0,LITCNT + MOVE SX,LITHDX + HRLM AC0,0(SX) + MOVE V,LOCA + HRL V,MODA + MOVEM V,-1(SX) + JRST LIT24 + +LIT20: PUSH PP,LOCA + PUSH PP,LOCO + SKIPN LITNUM + JRST LIT20A + MOVE SX,LITHDX + HRRZ AC0,-1(SX) + CAME AC0,LOCA + TRO ER,ERRP +LIT20A: MOVE SX,LITAB +LIT21: SOSGE LITNUM + JRST LIT22 + MOVE AC0,-2(SX) ;WFW + MOVE RC,-1(SX) ;WFW + MOVE SX,(SX) ;WFW POINTER TO THE NEXT LIT + PUSHJ PP,STOW20 ;STOW CODE + MOVEI C,12 ;SET LINE FEED + IDPB C,LBUFP + PUSHJ PP,OUTLIN ;OUTPUT THE LINE + JRST LIT21 + LIT22: HRRZ AC2,LOCO + POP PP,LOCO + POP PP,LOCA + MOVE SX,LITHDX + HLRZ AC0,0(SX) + SUB AC2,LOCO ;COMPUTE LENGTH USED + CAMGE AC0,AC2 ;USE LARGER + MOVE AC0,AC2 + ADD AC2,LOCO +LIT24: ADDM AC0,LOCA + ADDM AC0,LOCO + PUSHJ PP,GETTOP + HRRM SX,LITHDX +LITI: SETZM LITCNT + SETZM LITNUM + MOVEI LITAB + MOVEM LITABX + JRST HIGHQ + +GETTOP: HRRZ AC1,SX ;VARHD + HRRZ SX,0(SX) + JUMPN SX,POPOUT + MOVEI SX,3 ;WFW + ADDB SX,FREE + CAML SX,SYMBOL + PUSHJ PP,XCEED + SUBI SX,1 ;MAKE SX POINT TO LINK + SETZM 0(SX) ;CLEAR FORWARD LINK + HRRM SX,0(AC1) ;STORE ADDRESS IN LAST LINK + POPJ PP, + VAR0: PUSHJ PP,BLOCK1 ;PRINT LOCATION + PUSHJ PP,VARA + JRST STOUTS + +VARA: MOVE SX,VARHDX + MOVE AC0,LOCA ;GET LOCATION FOR CHECK + JUMP1 VARB ;DO NOT CHECK START ON PASS 1 + CAME AC0,-1(SX) ;CHECK START OF VAR AREA + TRO ER,ERRP ;AND GIVE ERROR +VARB: MOVEM AC0,-1(SX) ;SAVE START FOR PASS 2 + HLRZ AC0,0(SX) + ADDM AC0,LOCA + ADDM AC0,LOCO + PUSHJ PP,GETTOP + HRRM SX,VARHDX + JUMP2 POPOUT + + PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + TRZN ARG,VARF + POPJ PP, ;NO, EXIT + TRZ ARG,UNDF ;TURN OFF FLAG NOW + MOVSI AC0,1 ;ADD 1 + ADDM AC0,0(AC1) ;UPDATE COUNT + + IOR ARG,MODA ;SET TO ASSEMBLY MODE + HRL ARG,LOCA + MOVSM ARG,0(SX) ;UPDATE 2ND WRD OF SYM TAB ENTRY + AOS LOCA + AOS LOCO + JRST HIGHQ1 + IF: PUSH PP,AC0 ;SAVE AC0 + PUSH PP,IO + PUSHJ PP,EVALXQ ;EVALUATE AND TEST EXTERNAL + POP PP,AC1 + JUMPL AC1,IFPOP + TLZ IO,FLDSW +IFPOP: POP PP,AC1 ;RETRIEVE SKIP INSTRUCTION +IFSET: TLO IO,IORPTC ;REPEAT CHARACTER +IFXCT: XCT AC1 ;EXECUTE INSTRUCTION + TDZA AC0,AC0 ;FALSE + MOVEI AC0,1 ;TRUE +IFEXIT: JUMPOC REPEA1 ;BRANCH IF IN OP-CODE FIELD +IFEX1: PUSHJ PP,GETCHR ;SEARCH FOR "<" + CAIN C,EOL ;ERROR IF END OF LINE + JRST ERRAX + CAIE C,34 + JRST IFEX1 + JUMPE AC0,IFEX2 ;TEST FOR 0 + TLO IO,IORPTC ;NO, PROCESS AS CELL + PUSHJ PP,CELL + SETZM INCND ;NOT ANY MORE + JRST STOW ;STOW CODE AND EXIT + +IFPASS: HRRI AC0,P1 ;MAKE IT TLNX IO,P1 + MOVE AC1,AC0 ;PLACE IT IN AC1 + JRST IFSET ;EXECUTE INSTRUCTION + +IFB0: HLLO AC1,AC0 ;FORM AND STORE TEST INSTRUCTION +IFB1: PUSHJ PP,CHARL ;GET FIRST NON-BLANK + CAIE C," " + CAIN C," " + JRST IFB1 ;SKIP BLANKS AND TABS + CAIG C,CR ;CHECK FOR CARRET AS DELIM. + CAIGE C,LF + SKIPA SX,SEQNO2 + JRST ERRAX + MOVEM SX,CNDSEQ + MOVE SX,PAGENO + MOVEM SX,CNDPG + SETOM INCND ;SAVE INFO. FOR PASS 1 ERRORS + CAIN C,"<" ;LEFT BRACKET? + SETZB C,RC ;YES, PREPARE FOR OLD FORMAT + SKIPA SX,C ;SAVE FOR COMPARISON +IFB3: TRO AC0,1 ;SET FLAG +IFB2: PUSHJ PP,CHARL ;GET ASCII CHARACTER AND LIST + CAMN C,SX ;TEST FOR DELIMITER + JRST IFXCT ;FOUND + CAIE C," " ;BLANK? + CAIN C," " ;OR TAB? + JRST IFB2 ;YES + JUMPN SX,IFB3 ;JUMP IF NEW FORMAT + CAIN C,"<" ;<? + AOJA RC,IFB2 ;YES, INCREMENT COUNT + CAIN C,">" ;>? + SOJL RC,IFXCT ;YES, DECREMENT AND EXIT IF DONE + JRST IFB3 ;GET NEXT CHARACTER + + IFDEF0: HRRI AC0,UNDF ;MAKE IT TLNX ARG,UNDF + PUSH PP,AC0 ;STACK IT + PUSHJ PP,GETSYM ;TAKES SKIP RETURN IF SYM NAME IS LEGAL + TROA ER,ERRA ;ILLEGAL! + PUSHJ PP,SEARCH + JRST [PUSHJ PP,OPTSCH + TLO ARG,UNDF + JRST .+1] + PUSHJ PP,SSRCH3 ;EMIT TO CREF ANYWAY + JRST IFPOP ;POP AND EXECUTE INSTRUCTION + + IFIDN0: HLRZS AC0 + MOVEI V,2*.IFBLK-1 + SETZM IFBLK(V) ;CLEAR COMPARISON BLOCK + SOJGE V,.-1 + SETZM .TEMP ;CLEAR STORED DELIMETER + MOVEI RC,IFBLK ;SET FOR FIRST BLOCK + PUSHJ PP,IFCL ;GET FIRST STRING + MOVEI RC,IFBLKA + PUSHJ PP,IFCL ;GET SECOND STRING + MOVEI V,.IFBLK-1 + MOVE SX,IFBLK(V) ;GET WORD FROM FIRST STRING + CAMN SX,IFBLKA(V) ;COMPARE WITH SECOND STRING + SOJGE V,.-2 ;EQUAL, TRY NEXT WORD + JUMPL V,IFEXIT ;DID WE FINISH STRING + XORI AC0,1 ;NO, TOGGLE REQUEST + JRST IFEXIT ;DO NOT TURN ON IORPTC WFW + +IFCL: PUSHJ PP,CHARAC ;GET AND LIST CHARACTER + CAIE C," " ;SKIP SPACES + CAIG C,CR ;ALSO SKIP CR-LF + CAIGE C,HT ;AND TAB + JRST .+2 ;NOT ONE OF THEM + JRST IFCL ;SO LONG COMPARISONS WILL WORK +;*** A CROCK SO THAT IFIDN <X>,<X>,<INST.> WILL WORK *** + CAIE C,"," ;IS IT A COMMA? + JRST .+3 ;NO + SKIPN .TEMP ;YES, WAS PREVIOUS FIELD OLD METHOD? + JRST IFCL ;YES, IGNORE COMMA AND SPACES +; *** + CAIN C,"<" ;WAS IT LEFT BRACKET? + SETO C, ;SIGNAL OLD METHOD, LOOK FOR RIGHT BRACKET + MOVEM C,.TEMP ;STORE TERMINATOR FOR COMPARISON + MOVEI SX,5*.IFBLK-1 ;LIMIT SEARCH + HRLI RC,(POINT 7,,) ;SET UP BYTE IN RC +IFCLR: PUSHJ PP,CHARAC + SKIPLE .TEMP ;NEW METHOD? + JRST IFCLR1 ;YES, IGNORE ANGLE BRACKET COUNTING + CAIN C,"<" ;ANOTHER LEFT ANGLE? + SOS .TEMP ;YES, KEEP COUNT + CAIN C,">" ;CLOSING ANGLE + AOSGE .TEMP ;MATCHING COUNT? +IFCLR1: CAMN C,.TEMP ;TEST FOR DELIMITER + POPJ PP, ;EXIT ON RIGHT DELIMITER + SOJG SX,.+2 ;ANY ROOM IN COMPARISON BLOCK? + TROA ER,ERRA ;NO, FLAG ERROR BUT KEEP ON GOING + IDPB C,RC ;DEPOSIT BYTE + JRST IFCLR + + +IFEX2: PUSHJ PP,GETCHR + CAIN C,EOL ;EXIT WITH ERROR IF END OF LINE + JRST ERRAX + CAIN C,34 ;"<"? + AOJA AC0,IFEX2 ;YES, INCREMENT COUNT + CAIE C,36 ;">"? + JRST IFEX2 ;NO, TRY AGAIN + SOJGE AC0,IFEX2 ;YES, TEST FOR MATCH + PUSHJ PP,BYPASS ;YES, MOVE TO NEXT DELIMITER + SETZM INCND ;OUT OF CONDITIONAL NOW + AOJA AC0,STOWZ1 ;STOW ZERO + + +INTER0: HLLZM AC0,INTENT ;AC0 CONTAINS INTF/ENTF FLAGS + +INTER1: PUSHJ PP,GETSYM ;GET A SYMBOL + JRST INTER3 ;INVALID, SKIP + PUSHJ PP,SSRCH ;SEARCH THE TABLE + MOVSI ARG,SYMF!INTF!UNDF + TLNE ARG,UNDF ;UNDEFINED? + TRO ER,ERRA ;YES, FLAG ERROR + TLNN ARG,SYNF!EXTF + TDOA ARG,INTENT ;SET APPROPRIATE FLAGS +INTER3: TROA ER,ERRA ;FLAG ARG EROR AND SKIP + PUSHJ PP,INSERQ ;INSERT/UPDATE + JUMPCM INTER1 + SETZM EXTPNT ;JUST IN CASE, SO AS NOT TO CONFUSE WORLD + POPJ PP, ;NO, EXIT + EXTER0: PUSHJ PP,GETSYM ;GET A SYMBOL + JRST EXTER4 ;INVALID, ERROR +EXTER1: TLO IO,DEFCRS ;FLAG THIS AS A DEFINITION + PUSHJ PP,SSRCH ;OK, SEARCH SYMBOL TABLE + JRST EXTER2 ;NOT THERE, INSERT IT + TLNN ARG,EXTF!VARF!UNDF + TROA ER,ERRE ;FLAG ERROR AND BYPASS + TLNE ARG,EXTF ;VALID, ALREADY DEFINED? + JRST [JUMP1 EXTER3 ;YES, BYPASS + TLZN ARG,UNDF ;SKIP IF UNDEFINED ALSO + JRST EXTER3 ;CONTINUE + ANDM ARG,(SX) ;CLEAR UNDF ON PASS 2 + JRST EXTER2] ;SET UP EXTERNAL NOW +EXTER2: MOVEI V,2 ;NO, GET 2 CELLS FROM THE TREE + ADDB V,FREE + CAML V,SYMBOL ;HAVE WE RUN OUT OF CORE? + PUSHJ PP,XCEEDS ;YES, TRY TO BORROW SOME MORE + SUBI V,2 ;GET RIGHT CELL FOR POINTER + SETZB RC,0(V) ;ALL SET, ZERO VALUES + MOVSI ARG,SYMF!EXTF + PUSHJ PP,INSERT ;INSERT/UPDATE IT + MOVSI ARG,PNTF + IORM ARG,0(SX) + SKIPA ARG,-1(SX) ;GET THE SIXBIT FOR THE NAME +EXTER4: TROA ER,ERRA ;FLAG AS ERROR + MOVEM ARG,1(V) ;AND STORE THAT IN CASE SYMBOL TABLE MOVES +EXTER3: JUMPCM EXTER0 + POPJ PP, ;NO, EXIT + EVAL10: PUSH PP,RX + HRRI RX,^D10 + PUSHJ PP,EVALEX ;EVALUATE + POP PP,RX ;RESET RADIX + JUMPE RC,POPOUT ;EXIT IF ABSOLUTE + +QEXT: SKIPE EXTPNT ;ANY POSSIBILITIES? + TROA ER,ERRE ;YES, FLAG EXTERNAL ERROR + TRO ER,ERRR ;NO, FLAG RELOCATION ERROR + HLLZS RC ;CLEAR RELOCATION/EXTERNAL + POPJ PP, + +EVALXQ: PUSHJ PP,EVALEX ;EVALUATE EXPRESSION + TLZN RC,-2 ;LEFT HALF EXTERNAL + TRZE RC,-2 ;WAS AN EXTERNAL FOUND? + TRO ER,ERRE ;YES, FLAG ERROR + POPJ PP, ;RETURN + OPDEF0: PUSHJ PP,GETSYM ;GET THE FIRST SYMBOL + POPJ PP, ;ERROR IF INVALID SYMBOL + CAIE C,73 ;"["? + JRST ERRAX ;NO, ERROR + PUSH PP,AC0 ;STACK MNEMONIC + AOS LITLVL ;SHORT OUT LOCATION INCREMENT + PUSHJ PP,STMNT ;EVALUATE STATEMENT + SKIPGE STPX ;CODE STORED? + TROA ER,ERRA ;NO,"A" ERROR + PUSHJ PP,DSTOW ;GET AND DECODE VALUE + SOS LITLVL + EXCH AC0,0(PP) ;EXCHANGE VALUE FOR MNEMONIC + PUSH PP,RC ;STACK RELOCATION + TLO IO,DEFCRS ;SAY WE ARE DEFINING IT + PUSHJ PP,MSRCH ;SEARCH SYMBOL TABLE + MOVSI ARG,OPDF ;NOT FOUND + POP PP,RC ;RESTORE VALUES + POP PP,V + TLNE ARG,SYNF!MACF + TRO ER,ERRA ;YES "A" ERROR + TRNN ER,ERRA ;ERROR? + PUSHJ PP,INSERT ;NO, INSERT/UPDATE + TLZ IO,DEFCRS ;JUST IN CASE + PUSHJ PP,BYPASS + JRST STOWI ;BE SURE STOW IS RESET + + +DEPHA0: MOVE AC0,LOCO + SKIPA RC,MODO ;SET TO OUTPUT VALUES AND SKIP +PHASE0: PUSHJ PP,EVALXQ ;EVALUATE AND CHECK FOR EXTERNAL + MOVEM AC0,LOCA ;SET ASSEMBLY LOCATION COUNTER + MOVEM RC,MODA + JRST BLOCK2 + ASSIGN: JUMPAD ERRAX ;NO, ERROR + PUSHJ PP,ASSIG1 + TLNE IO,IOSALL ;SUPPRESS ALL? + JUMPN MRP,CPOPJ ;IF IN MACRO +ASSIG7: MOVEM RC,ASGBLK + TRNE RC,-2 ;EXTERNAL + HLLZS ASGBLK ;YES,CLEAR RELOCATION + TLNE RC,1 ;LEFT HALF NOT RELOC? + TLNE RC,-2 ;... + HRROS ASGBLK ;YES, SET FLAG + MOVEM V,LOCBLK + POPJ PP, + +ASSIG1: PUSH PP,AC0 ;SAVE SYMBOL + SETZB AC0,EXTPNT ;SPECIAL CHECK FOR == WFW + PUSHJ PP,PEEK ;IS THE NEXT ON = + CAIE C,"=" + JRST ASSIG5 + TLO AC0,NOOUTF ;YES, NOT OUT TO DDT WFW + PUSHJ PP,GETCHR ;PROCESS THE CHAR. + PUSHJ PP,PEEK ;CHECK FOR ==: DMN +ASSIG5: CAIE C,":" ;IS IT + JRST ASSIG6 ;NO + TLO AC0,INTF ;MAKE INTERNAL + PUSHJ PP,GETCHR ;REPEAT IT +ASSIG6: MOVEM AC0,HDAS ;STORE THESE BITS WFW + PUSHJ PP,EVALCM ;EVALUATE EXPRESSION + EXCH AC0,0(PP) ;SWAP VALUE FOR SYMBOL + PUSH PP,RC + TRNN RC,-2 ;CHECK EXTERNAL AGREEMENT + JRST ASSIG2 + HRRZS RC + HRRZ ARG,EXTPNT + CAME RC,ARG + PUSHJ PP,QEXT ;EXTERNAL OR RELOCATION ERROR +ASSIG2: HLRZ RC,(PP) + TRNN RC,-2 + JRST ASSIG3 + HLRZ ARG,EXTPNT + CAME RC,ARG + PUSHJ PP,QEXT +ASSIG3: TLO IO,DEFCRS + PUSHJ PP,SSRCH + MOVSI ARG,SYMF + IOR ARG,HDAS ;WFW + TLNE ARG,UNDF ;WAS IT UNDEFINED + TLZ ARG,EXTF!PNTF ;YES,CLEAR EXTF NOW + TLZ ARG,UNDF!VARF ;CANCEL UNDEFINED AND VARIABLE FLAGS + SETZM EXTPNT ;FOR REST OF WORLD + POP PP,RC + TRNE ER,ERRORS-ERRQ + SETZ RC, ;CLEAR RELOCATION + POP PP,V + TRNE ER,ERRU ;WAS VALUE UNDEFINED? + TLO ARG,UNDF ;YES,SO TURN UNDF ON + TLNE ARG,TAGF!EXTF + JRST ERRAX + JRST INSERT + + LOC0: PUSHJ PP,HIGHQ ;AC0=0,0 + PUSH PP,AC0 ;SAVE MODE REQUESTED + HLRZS AC0 ;PUT MODE IN RIGHT HALF + JUMPN AC0,RELOC0 ;RELOC PSEUDO-OP + CAMN AC0,MODO ;SAME AS PRESENT MODE? + JRST [HRRZ AC0,LOCO ;YES + EXCH AC0,ABSLOC ;EXCH VALUES + JRST LOC01] + HRRZ AC0,LOCO ;NO, GET CURRENT VALUE + MOVEM AC0,RELLOC ;SAVE IT + MOVE AC0,ABSLOC ;GET LAST RELOC VALUE +LOC01: PUSHJ PP,BYPASS ;SKIP BLANKS + TLO IO,IORPTC + CAIE C,EOL ;USE PREVIOUS VALUE IF NULL ARGUMENT + PUSHJ PP,EVALXQ ;GET EXPRESSION AND TEST EXTERNAL + HRRM AC0,(PP) ;STORE NEW VALUE + POP PP,AC0 ;RETRIEVE STORED MODE AND VALUE +LOC10: HRRZM AC0,LOCA ;SET ASSEMBLY LOCATION + HRRZM AC0,LOCO ;AND OUTPUT LOCATION + HLRZM AC0,MODA ;SET MODE + HLRZM AC0,MODO + JRST BLOCK2 + +RELOC0: CAMN AC0,MODO + JRST [HRRZ AC0,LOCO + EXCH AC0,RELLOC + JRST LOC01] + HRRZ AC0,LOCO + MOVEM AC0,ABSLOC + MOVE AC0,RELLOC + JRST LOC01 + + IFN RENTSW,< +HISEG1: PUSHJ PP,HIGHQ ;SET CURRENT PROGRAM BREAK + PUSHJ PP,COUTD ;DUMP CURRENT TYPE OF BLOCK + SKIPN HISNSW ;IF WE HAVE SEEN IT BEFORE + SKIPE HIGH ;OR ANY RELOC CODE PUT OUT + TRO ER,ERRQ ;FLAG AS AN ERROR + PUSHJ PP,BYPASS ;GO GET EXPRESSION + TLO IO,IORPTC + PUSHJ PP,EVALXQ ;CHECK FOR EXTERNAL + ANDCMI AC0,1777 ;ONLY ALLOWED TO START ON NEW K BOUND + HRRZM AC0,LOCA ;SET LOC COUNTERS + HRRZM AC0,LOCO + MOVEI RC,1 ;ASSUME RELOCATABLE + POPJ PP, + +TWSEG0: PUSHJ PP,HISEG1 ;COMMON CODE + JUMPN AC0,.+2 ;ARGUMENT SEEN + MOVEI AC0,400000 ;ASSUME 400000 + HRRZM AC0,HMIN ;SET OFSET OF HIGH SEG. + HRRZM AC0,HHIGH ;INCASE NO HISEG CODE + TLOA AC0,(1B0) ;SIGNAL TWO SEGMENTS AND SKIP + +HISEG0: PUSHJ PP,HISEG1 ;COMMON CODE +HISEG2: MOVEM AC0,SVTYP3 ;SAVE THE HISEG ARG + MOVEM RC,MODA ;SET MODES + MOVEM RC,MODO + SETOM HISNSW ;WE HAVE ALREADY PUT ONE OUT + JRST BLOCK2 ;MAKE LISTING HAPPEN RIGHT> + +IFE RENTSW,< + SYN CPOPJ,HISEG0 + SYN CPOPJ,TWSEG0> + + SYN CPOPJ,ONFORM + SYN CPOPJ,OFFORM + HIGHQ: +HIGHQ1: MOVE V,LOCO ;GET ASSEMBLY LOCATION + SKIPN MODO ;IF ASSEMBLY MODE IS ABSOLUTE + JRST [CAMLE V,ABSHI ;RECORED ABS HIGHEST ALSO + MOVEM V,ABSHI + POPJ PP,] +IFN RENTSW,<SKIPE HMIN ;IS IT A TWO SEGMENT PROGRAM? + JRST [CAMGE V,HMIN ;YES,IS THIS HIGH SEG.? + JRST .+1 ;NO,STORE LOW SEGMENT + CAMLE V,HHIGH ;YES,IS IT GREATER THAN "HHIGH"? + MOVEM V,HHIGH ;YES,REPLACE WITH LARGER VALUE + POPJ PP,]> + CAMLE V,HIGH ;IS IT GREATER THAN "HIGH"? + MOVEM V,HIGH ;YES, REPLACE WITH LARGER VALUE + POPJ PP, + +ONML: TLZA FR,MWLFLG ;MULTI-WORD LITERALS OK +OFFML: TLO FR,MWLFLG ;NO + POPJ PP, + +OFFSYM: SETOM IONSYM ;SUPRESS SYMBOL TABLE LISTING + POPJ PP, + +SUPRE0: PUSHJ PP,GETSYM ;GET A SYMBOL TO SUPRES + JRST SUPRE1 ;ERROR + PUSHJ PP,SSRCH ;SYMBOL ONLY + JRST SUPRE1 ;GIVE ERROR MESSAGE + TLOA ARG,SUPRBT ;SET THE SUPRESS BIT +SUPRE1: TROA ER,ERRA + IORM ARG,(SX) ;PUT BACK + JUMPCM SUPRE0 ;ANY MORE? + JRST SUPRS1 + +SUPRSA: PUSHJ PP,LOOKUP ;SUPRESS ALL + MOVSI ARG,SUPRBT + IORM ARG,(SX) +SUPRS1: SETZM EXTPNT ;JUST IN CASE WE LOOKED ONE UP + POPJ PP, + +XPUNG0: JUMP1 POPOUT + PUSHJ PP,LOOKUP + MOVE ARG,(SX) ;GET SYMBOL FLAGS + TLNN ARG,INTF!ENTF!EXTF!SPTR + TLOA ARG,SUPRBT ;LOCAL SYMBOL,SO SUPPRESS IT + SETZM EXTPNT + MOVEM ARG,(SX) ;RESTORE FLAGS + POPJ PP, + TITLE0: JUMP2 REMAR0 + MOVEI SX,.TBUF + HRRI AC0,TBUF + PUSHJ PP,SUBTT1 ;GO READ IT + MOVEM SX,TCNT ;SAVE COUNT OF CHARS. WRITTEN +IFN UNIVR,<SKIPE UNIVSN ;WAS IT A UNIVERSAL? + PUSHJ PP,ADDUNV ;YES ADD TO TABLE> + TLOE IO,IOTLSN ;HAVE WE SEEN ONE +IFE CCLSW,<TRO ER,ERRM ;YES, COMPLAIN> +IFN CCLSW,<TROA ER,ERRM ;YES, MESSAGE + JRST PRNAM ;PRINT NAME IF FIRST ONE> + POPJ PP, ;EXIT OTHERWISE + +SUBTT0: SKIPE SBUF ;STORE FIRST SUBTTL ON PASS1 + JUMP1 REMAR0 ;OTHERWISE EXIT IF PASS ONE + MOVEI SX,.SBUF + HRRI AC0,SBUF + +SUBTT1: PUSHJ PP,BYPASS ;BYPASS LEADING BLANKS + TLO IO,IORPTC +SUBTT3: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + IDPB C,AC0 ;STORE IN BLOCK + CAIGE C,40 ;TEST FOR TERMINATOR + CAIN C,HT + SOJG SX,SUBTT3 ;TEST FOR BUFFER FULL + DPB RC,AC0 ;END, STORE TERMINATOR + SOJA SX,CPOPJ ;COUNT NUL AND EXIT + +IFN CCLSW,< +PRNAM: TLNN IO,CRPGSW ;NOT IF NOT RPG + POPJ PP, + PUSH PP,AC0 ;SAVE AC0 DMN + PUSH PP,RC ;AND RC + MOVE AC0,[POINT 7,TBUF] + MOVE SX,[POINT 7,OTBUF] + MOVEI RC,6 ;MAX OF SIX CHRS +PN1: ILDB C,AC0 + CAILE C," " ;CHECK FOR LEGAL + CAILE C,"Z"+40 ;CHECK AGAINST LOWER CASE Z + JRST PN2 + IDPB C,SX ;PUT IN OUTPUT BUFFER + SOJG RC,PN1 ;GET MORE +PN2: MOVEI C,0 + IDPB C,SX ;TERMINATOR + TTCALL 3,OTBUF + TTCALL 3,[ASCIZ / +/] + POP PP,RC + POP PP,AC0 ;RESTORE AC0 DMN + POPJ PP, +> + SYN0: PUSHJ PP,GETSYM ;GET THE FIRST SYMBOL + JRST ERRAX ;ERROR, EXIT + PUSHJ PP,MSRCH ;TRY FOR MACRO/OPDEF + JRST SYN3 ;NO,0THRY FOR OPERAND +SYN1: MOVEI SX,MSRCH ;YES, SET FLAG +SYN2: PUSHJ PP,SAVEXS ;SAVE REGISTERS + JUMPNC ERRAX ;ERROR IF NO COMMA + PUSHJ PP,GETSYM ;GET THE SECOND SYMBOL + POPJ PP, + PUSHJ PP,@SAVBLK+SX ;SEARCH FOR SECOND SYMBOL + JFCL + MOVE ARG,SAVBLK+ARG ;GET VALUES + MOVE RC,SAVBLK+RC + MOVE V,SAVBLK+V + TLNE ARG,MACF ;MACRO? + PUSHJ PP,REFINC ;YES, INCREMENT REFERENCE + JRST INSERT ;INSERT AND EXIT + +SYN3: PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + JRST SYN4 ;NOT FOUND, TRY OP CODE + TLO ARG,SYNF ;FLAG AS SYNONYM + TLNE ARG,EXTF ;EXTERNAL? + HRRZ V,ARG ;YES, RELPACE WITH POINTER + MOVEI SX,SSRCH ;SET FLAG + TLNN ARG,VARF ;DO NOT LET HIM SYN A VARIABLE + JRST SYN2 + JRST ERRAX + +SYN4: PUSHJ PP,OPTSCH ;SEARCH FOR OP-CODE + JRST ERRAX ;NOT FOUND, EXIT WITH ERROR + MOVSI ARG,SYNF ;FLAG AS SYNONYM + JRST SYN1 + PURGE0: PUSHJ PP,GETSYM ;GET A MNEMONIC + JRST [TRZ ER,ERRA ;CLEAR ERROR + POPJ PP,] ;AND RETURN + PUSHJ PP,MSRCH ;SEARCH MACRO SYMBOL TABLE + JRST PURGE2 ;NOT FOUND, TRY SYMBOLS + PUSH PP,CS ;SAVE CS AS IT MAY GET GARBAGED + TLNE ARG,MACF ;MACRO? + PUSHJ PP,REFDEC ;YES, DECREMENT THE REFERENCE + POP PP,CS + JRST PURGE4 ;REMOVE SYMBOL FROM TABLE + +PURGE2: PUSHJ PP,SSRCH ;TRY OPERAND SYMBOL TABLE + JRST PURGE5 ;NOT FOUND GET NEXT SYMBOL + TRNN RC,-2 ;CHECK COMPLEX EXTERNAL + TLNE RC,-2 + TLNE ARG,SYNF + JRST .+2 + JRST PURGE3 + TLNE ARG,EXTF!UNDF ;ERROR IF EXTERNAL OR UNDEFINED + TLNE ARG,SYNF ;BUT NOT A SYNONYM + JRST PURGE4 +PURGE3: TROA ER,ERRA ;NOT FOUND, ERROR +PURGE4: PUSHJ PP,REMOVE ;REMOVE FROM THE SYMBOL TABLE +PURGE5: JUMPCM PURGE0 + POPJ PP, ;EXIT + OPD1: TLNE ARG,UNDF ;IF OPDEF IS UNDEFINED + TRO ER,ERRO ;GIVE "O" ERROR +OPD: MOVE AC0,V ;PUT VALUE IN AC0 + JRST OP +IOP: MOVSI AC2,(POINT 9,0(PP),11) + TLOA IO,IOIOPF ;SET "IOP SEEN" AND SKIP +OP: MOVSI AC2,(POINT 4,0(PP),12) + PUSH PP,RC + PUSH PP,AC0 ;STACK CODE + PUSH PP,AC2 + PUSHJ PP,EVALEX ;EVALUATE FIRST EXPRESSION + POP PP,AC2 + JUMPNC OP2 +OP1B: PUSHJ PP,GETCHR ;GET A CHARACTER + JUMPCM XWD5 ;PROCESS COMMA COMMA IN XWD + TLO IO,IORPTC ;NOT A COMMA,REPEAT IT + LDB AC1,AC2 + ADD AC1,AC0 + DPB AC1,AC2 + JUMPE RC,OP1A ;EXTERNAL OR RELOCATABLE? + PUSHJ PP,QEXT ;YES, DETERMINE WHICH AND FLAG AN ERROR + +OP1A: PUSHJ PP,EVALEX ;GET ADDRESS PART +OP2: PUSHJ PP,EVADR ;EVALUATE STANDARD ADDRESS +OP3: POP PP,AC0 ;PUT IN AC0 + POP PP,RC + SKIPE (PP) ;CAME FROM EVALCM? + JRST STOW ;NO,STOW CODE AND EXIT + POP PP,AC1 ;YES,EXIT IMMEDIATELY + POPJ PP, + + EVADR: ;EVALUATE STANDARD ADDRESS +IFE IIISW,<TLNN AC0,-1 ;OK IF ALL 0'S + JRST .+4 ;IT WAS + TLC AC0,-1 ;CHANGE ALL ONES TO ZEROS + TLCE AC0,-1 ;OK IF ALL 1'S + TRO ER,ERRQ ;NO,FLAG Q ERROR> + ADD AC0,-1(PP) ;ADD ADDRESS PORTIONS + HLL AC0,-1(PP) ;GET LEFT HALF + TLZE FR,INDSW ;INDIRECT BIT? + TLO AC0,(Z @) ;YES, PUT IT IN + MOVEM AC0,-1(PP) ;RE-STACK CODE + ADD RC,-2(PP) ;UPDATE RELOCATION + HRRM RC,-2(PP) ;USE HALF WORD ADD + CAIE C,10 ;"("? + POPJ PP, ;NO, EXIT + + MOVSS EXTPNT ;WFW + PUSHJ PP,EVALCM ;EVALUATE + MOVSS EXTPNT ;WFW + MOVSS V,AC0 ;SWAP HALVES +IFE IIISW,<MOVSS SX,RC + IOR SX,V ;MERGE RELOCATION + TRNN SX,-1 ;RIGHT HALF ZERO? + JRST OP2A ;YES, DO SIMPLE ADD + MOVE ARG,RC ;NO, SWAP RC INTO ARG> +IFN IIISW,<MOVSS ARG,RC> + ADD V,-1(PP) ;ADD RIGHT HALVES + ADD ARG,-2(PP) + HRRM V,-1(PP) ;UPDATE WITHOUT CARRY + HRRM ARG,-2(PP) + HLLZS AC0 ;PREPARE LEFT HALVES + HLLZS RC +IFE IIISW,<TLNE SX,-1 ;IS LEFT HALF ZERO? + TRO ER,ERRQ ;NO FLAG FORMAT ERROR +OP2A: TLNE RC,-1 ;RELOCATION FOR LEFT HALF? + PUSHJ PP,OP2A1 ;YES,IS IT LEGAL? + TLNE AC0,777000 ;OP CODE FIELD USED? + JRST [EXCH AC0,-1(PP);YES, GET STORED CODE + TLNE AC0,777000 ;OP CODE FIELD BEEN SET? + TRO ER,ERRQ ;YES, MOST LIKELY AN ERROR + EXCH AC0,-1(PP) + JRST .+1] ;RETURN TO ADD > + ADDM AC0,-1(PP) ;MERGE WITH PREVIOUS VALUE + ADDM RC,-2(PP) + CAIE C,11 ;")"? + JRST ERRAX ;NO, FLAG ERROR + ;YES, BYPASS PARENTHESIS +BYPASS: +BYPAS1: PUSHJ PP,GETCHR +BYPAS2: JUMPE C,.-1 ;SKIP TRAILING BLANKS + POPJ PP, ;EXIT + + IFE IIISW,< +OP2A1: EXCH RC,-2(PP) ;GET STORED CODE + TLNN RC,-1 ;OK IF ALL ZERO + JRST OP2A2 ;OK SO RETURN + TLC RC,-1 ;CHANGE ALL ONES TO ZEROS + TLCE RC,-1 ;OK IF ALL ONES + TRO ER,ERRQ ;OTHERWISE A "Q" ERROR +OP2A2: EXCH RC,-2(PP) ;GET RC,BACK + POPJ PP, ;AND RETURN> + + +EXPRES: HRLZ AC0,RX ;FUDGE FOR OCT0 + +OCT0: PUSH PP,RX + HLR RX,AC0 +OCT1: PUSHJ PP,EVALEX ;EVALUATE + PUSHJ PP,STOW ;STOW CODE + JUMPCM OCT1 + POP PP,RX ;YES, RESTORE RADIX + POPJ PP, ;EXIT + SIXB10: MOVSI RC,(POINT 6,AC0) ;SET UP POINTER + MOVEI AC0,0 ;CLEAR WORD + +SIXB20: PUSHJ PP,CHARL ;GET NEXT CHARACTER + CAMN C,SX ;IS THIS PRESET DELIMITER? + JRST ASC60 ;YES + CAIL C,"A"+40 + CAILE C,"Z"+40 + JRST .+2 + TRZA C,100 ;CONVERT LOWER CASE TO SIXBIT + SUBI C,40 ;CONVERT TO SIXBIT + JUMPL C,ASC55 ;TEST FOR INVALID CHARACTER + IDPB C,RC ;NO, DEPOSIT THE BYTE + TLNE RC,770000 ;IS THE WORD FULL? + JRST SIXB20 ;NO, GET NEXT CHARACTER + PUSHJ PP,STOWZ ;YES, STORE + JRST SIXB10 ;GET NEXT WORD + ASCII0: HLLZ SDEL,AC0 ;STORE ASCII/ASCIZ FLAG +ASC10: PUSHJ PP,CHARL ;GET FIRST NON-BLANK + CAIE C," " + CAIN C,HT + JRST ASC10 + CAIG C,CR ;CHECK FOR CRRET AS DELIM + CAIGE C,LF + SKIPA SX,SEQNO2 + JRST ERRAX + MOVEM SX,TXTSEQ ;SAVE SEQ AND PAGE + MOVE SX,PAGENO + MOVEM SX,TXTPG + SETOM INTXT + MOVE SX,C ;SAVE FOR COMPARISON + JUMPG SDEL,SIXB10 ;BRANCH IF SIXBIT + +ASC20: MOVSI RC,(POINT 7,AC0) ;SET UP POINTER + TLNE SDEL,200000 ;THIS BIT (AND BIT0) IN FOR COMMENT + MOVSI RC,440000 ;SO NOTHING WILL BE DEPOSITED +IFE IIISW,<MOVEI AC0,0 ;CLEAR WORD> +IFN IIISW,<TLNE SDEL,100000 ;ASCID? + TLZA SDEL,400000 ;YES, ZERO ASCIZ BIT + TDZA AC0,AC0 ;NO, ZERO WORD + MOVE AC0,[BYTE (7) 10,10,10,10,10 (1) 1] ;YES, A WORD FULL OF BACKSPACES> +ASC30: PUSHJ PP,CHARL ;GET ASCII CHARACTER AND LIST + CAMN C,SX ;TEST FOR DELIMITER + JRST ASC50 ;FOUND + IDPB C,RC ;DEPOSIT BYTE + TLNE RC,760000 ;HAVE WE FINISHED WORD? + JRST ASC30 ;NO,GET NEXT CHARACTER + PUSHJ PP,STOWZ ;YES, STOW IT + JRST ASC20 ;GET NEXT WORD + +ASC55: TDZA CS,CS ;ZERO CS IN CASE NESTED +ASC50: TDZA RC,SDEL ;TEST FOR ASCIIZ + TROA ER,ERRA ;SIXBIT ERROR EXIT +ASC60: PUSHJ PP,BYPAS1 ;POLISH OFF TERMINATOR + SETZM INTXT ;WE ARE OUT OF IT +IFN IIISW,<TLNN SDEL,100000 ;NO EXTRA WORDS FOR ASCID> + ANDCM RC,STPX ;STORE AT LEAST ONE WORD + TLNN SDEL,200000 ;GET OUT WITHOUT STORING + JUMPGE RC,STOWZ ;STOW + POPJ PP, ;ASCII, NO BYTES STORED, SO EXIT + POINT0: + PUSH PP,RC ;STACK REGISTERS + PUSH PP,AC0 + PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + DPB AC0,[POINT 6,0(PP),11] ;STORE BYTE SIZE + JUMPNC POINT2 + PUSHJ PP,EVALEX ;NO, GET ADDRESS + PUSHJ PP,EVADR ;EVALUATE STANDARD ADDRESS + JUMPNC POINT2 + PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + TLNE IO,NUMSW ;IF NUMERIC + TDCA AC0,[-1] ;POSITION=D35-RHB +POINT2: MOVEI AC0,0 ;OTHERWISE SET TO D36 + ADDI AC0,^D36 + LSH AC0,^D30 + ADDM AC0,0(PP) ;UPDATE VALUE + JRST OP3 + XWD0: + PUSH PP,RC + PUSH PP,AC0 ;STORE ZERO ON STACK + PUSHJ PP,EVALEX ;EVALUATE EXPRESSION + JUMPNC OP2 +XWD5: SKIPN (PP) ;ANY CODE YET? + JRST XWD10 ;NO,USE VALUE IN AC0 + JUMPE AC0,.+2 ;ANYTHING IN AC0? + TRO ER,ERRQ ;YES,FLAG "Q"ERROR + MOVE AC0,(PP) ;USE PREVIOUS VALUE + MOVE RC,-1(PP) ;AND RELOCATION +XWD10: HRLZM AC0,0(PP) ;SET LEFT HALF + HRLZM RC,-1(PP) + MOVSS EXTPNT ;WFW + JRST OP1A ;EXIT THROUGH OP + +IOWD0: PUSHJ PP,EVALXQ ;EVALUATE AND TEST FOR EXTERNAL + CAIE C,14 ;","? + JRST [SKIPN AC0 ;IF NZERO AND NO "," SEEN + TRO ER,ERRQ ;TREAT AS Q ERROR + SOJA AC0,STOW] ;NO, TREAT AS RIGHT HALF + PUSH PP,AC0 ;YES, STACK LEFT HALF + PUSHJ PP,EVALEX ;WFW + SUBI AC0,1 + POP PP,AC1 ;RETRIEVE LEFT HALF + MOVNS AC1 + HRL AC0,AC1 + JRST STOW ;STOW CODE AND EXIT + BYTE0: PUSHJ PP,BYPASS ;GET FIRST NON-BLANK + CAIE C,10 ;"("? + JRST ERRAX ;NO, FLAG ERROR AND EXIT + PUSH PP,RC + PUSH PP,AC0 ;INITIALIZE STACK TO ZERO + MOVSI ARG,(POINT -1,(PP)) + +BYTE1: PUSH PP,ARG + PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + POP PP,ARG + CAIG AC0,^D36 ;TEST SIZE + JUMPGE AC0,.+2 + TRO ER,ERRA + DPB AC0,[POINT 6,ARG,11] ;STORE BYTE SIZE + +BYTE2: IBP ARG ;INCREMENT BYTE + TRZN ARG,-1 ;OVERFLOW? + JRST BYTE3 ;NO + SETZB AC0,RC ;YES + EXCH AC0,0(PP) ;GET CURRENT VALUES + EXCH RC,-1(PP) ;AND STACK ZEROS + PUSHJ PP,STOW ;STOW FULL WORD + +BYTE3: PUSH PP,ARG + PUSHJ PP,EVALEX ;COMPUTE NEXT BYTE + POP PP,ARG + DPB AC0,ARG ;STORE BYTE + HLLO AC0,ARG + DPB RC,AC0 ;STORE RELOCATION + + JUMPCM BYTE2 + CAIN C,10 ;"("? + JRST BYTE1 ;YES, GET NEW BYTE SIZE + JRST OP3 ;NO, EXIT + RADX50: PUSHJ PP,EVALEX ;EVALUATE CODE + JUMPN RC,ERRAX ;ERROR IF NOT ABSOLUTE + MOVE ARG,AC0 + JUMPNC ERRAX + PUSHJ PP,GETSYM ;YES, GET SYMBOL + TRZ ER,ERRA ;CLEAR ERROR + PUSHJ PP,SQOZE ;SQUOZE SIXBIT AND ADD CODE + JRST STOW ;STOW CODE AND EXIT + + +SQOZE: MOVE AC1+1,AC0 ;PUT SIXBIT IN AC1+1 + MOVEI AC0,0 ;CLEAR RESULT +SQOZ1: MOVEI AC1,0 + LSHC AC1,6 ;PUT 6-BIT CHARACTER IN AC1 + LDB AC1,[POINT 6,CSTAT(AC1),23] ;CONVERT TO RADIX50 + IMULI AC0,50 ;MULTIPLY PREVIOUS RESULT + ADD AC0,AC1 ;ADD NEW CHARACTER + JUMPN AC1+1,SQOZ1 ;TEST FOR END + LSH ARG,^D30 ;LEFT-JUSTIFY CODE + IOR AC0,ARG ;MERGE WITH RESULT + POPJ PP, + + ; PSEUDO-END STATEMENT FOR MULTI-FILE CAPABILITY + +; HERE IF PRGEND (PASS 1) +PSEND0: TLO IO,MFLSW ;PSEND SEEN + PUSHJ PP,END0 ;AS IF END STATEMENT + HLLZS IO ;CLEAR ER(RH) + SETZM ERRCNT ;CLEAR ERROR COUNT FOR EACH PROG. + JUMP2 PSEND2 ;DIFFERENT ON PASS2 +IFN UNIVR,<SKIPE UNIVSN ;SEEN A UNIVERSAL + PUSHJ PP,UNISYM ;YES, STORE SYMBOLS> + PUSHJ PP,PSEND4 ;SAVE SYMBOLS, POINTERS AND TITLE + TLZ IO,IOTLSN ;CLEAR TITLE SEEN FLAG +PSEND1: TLZ IO,MFLSW ;FOR NEXT FILE +IFN UNIVR,<SETZM UNISCH ;CLEAR UNIVERSAL SEARCH TABLE + MOVE AC0,[UNISCH,,UNISCH+1] + BLT AC0,UNISCH+.UNIV-1 + PUSHJ PP,OUTFF ;RESET PAGE COUNT> + MOVSI AC0,1 ;SET SO RELOC 0 WORKS + JRST LOC10 ;FOR RELOC 0 + +; HERE IF PRGEND (PASS 2) +PSEND2: SETZM SBUF ;SO SUBTTL IS NOT WRONG + PUSHJ PP,PSEND5 ;PUT TITLE BACK + PUSHJ PP,PSEND1 ;COMMON CODE + JRST PASS20 ;OUTPUT THE ENTRIES + +; HERE IF END (PASS 1) +PSEND3: PUSHJ PP,PSEND4 ;SAVE LAST PROGRAM + HLRS PRGPTR ;REINITIALIZE POINTER + PUSHJ PP,PSEND5 ;READ BACK FIRST PROGRAM + JRST PASS20 + ;HERE TO SAVE AND RESTORE SYMBOL TABLE, TITLE AND OTHER USEFUL LOCATIONS + XTRA==4 ;NUMBER OF OTHER LOCATIONS TO SAVE + +PSEND4: MOVE V,FREE ;GET NEXT FREE LOCATION + ADDI V,LENGTH+.TBUF/5+XTRA + CAML V,SYMBOL ;WILL WORST CASE FIT? + PUSHJ PP,XCEED ;NO, EXPAND + MOVS V,FREE + HRR V,PRGPTR ;LAST PRGEND BLOCK + HLRM V,(V) ;LINK THIS BLOCK + SKIPN PRGPTR ;IF FIRST TIME + HLLZM V,PRGPTR ;SET LINK TO START OF CHAIN + HLRM V,PRGPTR ;POINTER TO IT + SETZM @FREE ;CLEAR LINK WORD + AOS FREE ;THIS LOCATION USED NOW + MOVS AC0,SYMBOL ;BOTTOM OF SYMBOL TABLE + HRR AC0,FREE ;FREE SPACE + MOVE V,@SYMBOL ;GET NUMBER OF SYMBOLS + ASH V,1 ;TWO WORDS PER SYMBOL + ADDI V,1 ;ONE MORE FOR COUNT + ADDB V,FREE ;END OF TABLE WHEN MOVED + BLT AC0,(V) ;MOVE TABLE + HRRZ AC0,JOBREL ;TOP OF CORE + SUBI AC0,1 + MOVEM AC0,SYMTOP ;FOR NEXT SYMBOL TABLE + SUBI AC0,LENGTH ;LENGTH OF INITIAL SYMBOLS + MOVEM AC0,SYMBOL ;SET POINTER TO COUNT OF SYMBOLS + HRLI AC0,SYMNUM ;BLT POINTER + BLT AC0,@SYMTOP ;SET UP INITIAL SYMBOL TABLE + PUSHJ PP,SRCHI ;SET UP SEARCH POINTER + MOVEI AC0,.TBUF ;MAX NUMBER OF CHARS. IN TITLE + SUB AC0,TCNT ;ACTUAL NUMBER + IDIVI AC0,5 ;NUMBER OF WORDS + SKIPE AC1 ;REMAINDER? + ADDI AC0,1 ;YES + MOVEM AC0,@FREE ;STORE COUNT + AOS FREE ;THIS LOCATION USED NOW + EXCH AC0,FREE ;SET UP AC0 FOR BLT + ADDM AC0,FREE ;WILL BE AFTER TITLE MOVES + HRLI AC0,TBUF ;BLT POINTER + BLT AC0,@FREE ;MOVE TITLE + MOVE AC2,LITHDX ;POINTER TO LIT INFO. + MOVE AC0,-1(AC2) ;SIZE OF PASS1 LOCO + PUSHJ PP,STORIT ;SAVE IT IN SYMBOL TABLE + MOVE AC2,VARHDX ;SAME FOR VARS + MOVE AC0,-1(AC2) + PUSHJ PP,STORIT +IFN RENTSW,< + MOVE AC0,HISNSW ;GET TWOSEG/HISEG FLAG + HRR AC0,HIGH1 ;AND PASS1 BREAK + PUSHJ PP,STORIT + JUMPGE AC0,PSEND6 ;NOT TWOSEG + MOVE AC0,SVTYP3 ;HIGH SEGMENT OFFSET + PUSHJ PP,STORIT ;SAVE IT ALSO> +PSEND6: MOVE AC0,FREE ;GET NEXT FREE LOCATION + SUBI AC0,1 ;LAST ONE USED + HRRZ V,PRGPTR ;POINTER TO START OF DATA BLOCK + HRLM AC0,(V) ;LINK TO END OF BLOCK + POPJ PP, ;RETURN + + PSENDX: PUSHJ PP,XCEED ;NEED TO EXPAND CORE FIRST +PSEND5: HRRZ AC0,JOBREL ;GET TOP OF CORE + SUBI AC0,1 + MOVEM AC0,SYMTOP ;TOP OF NEW SYMBOL TABLE + HRRZ V,PRGPTR ;ADDRESS OF THIS BLOCK + JUMPE V,PSNDER ;ERROR LINK NOT SET UP + MOVE AC1,(V) ;NEXT LINK + MOVE V,1(V) ;GET ITS SYMBOL COUNT + ASH V,1 ;NUMBER OF WORDS + ADDI V,1 ;PLUS ONE FOR COUNT + SUBI AC0,(V) ;START OF NEW SYMBOL TABLE + CAMG AC0,FREE ;WILL IT FIT + JRST PSENDX ;NO, NEED TO EXPAND AND RESET AC0 + ADD V,PRGPTR ;POINT TO END OF SYMBOL TABLE + MOVEI V,1(V) ;THEN TO BEG OF TITLE + MOVEM AC0,SYMBOL ;BOTTOM OF NEW TABLE + HRL AC0,PRGPTR ;ADDRESS OF FIRST WORD OF BLOCK + ADD AC0,[1,,0] ;MAKE BLT POINTER + HRRM AC1,PRGPTR ;POINT TO NEXT BLOCK + BLT AC0,@SYMTOP ;MOVE TABLE + PUSHJ PP,SRCHI ;SET UP POINTER + MOVE AC1,(V) ;NUMBER OF WORDS OF TITLE + MOVEI AC0,1(V) ;START OF STORED TITLE + ADD V,AC1 ;INCREMENT PAST TITLE + ADDI AC1,TBUF-1 ;END OF TITLE + HRLI AC0,TBUF ;WHERE TO PUT IT + MOVSS AC0 ;BLT POINTER + BLT AC0,(AC1) ;MOVE TITLE + TLO IO,IOTLSN ;SET AS IF TITLE SEEN + MOVE AC2,LITHDX ;INVERSE OF ABOVE + PUSHJ PP,GETIT + MOVEM AC0,-1(AC2) + MOVE AC2,VARHDX ;SAME FOR VARS + PUSHJ PP,GETIT + MOVEM AC0,-1(AC2) +IFN RENTSW,< + PUSHJ PP,GETIT ;GET TWO HALF WORDS + HRRZM AC0,HIGH1 ;PASS1 BREAK + HLLEM AC0,HISNSW ;TWOSEG/HISEG FLAG + JUMPGE AC0,CPOPJ ;NOT TWOSEG + PUSHJ PP,GETIT + MOVEM AC0,SVTYP3 ;BLOCK 3 WORD> + POPJ PP, + +STORIT: MOVEM AC0,@FREE ;STORE IT IN DATA BLOCK + AOS FREE ;ADVANCE POINTER + POPJ PP, + +GETIT: MOVE AC0,1(V) ;FILL AC0 OUT OF PRGEND BLOCK + AOJA V,CPOPJ ;INCREMENT AND RETURN + +PSNDER: HRROI RC,[SIXBIT /PRGEND ERROR @/] + JRST ERRFIN + ;MULTIPLE SYMBOL TABLE FEATURE PSEUDO-OPS + +IFN UNIVR,< +UNIV0: JUMP2 TITLE0 ;DO IT ALL ON PASS 1 + HRRZ SX,UNIVNO ;GET NUMBER OF UNIVERSALS SEEN + CAIL SX,.UNIV ;ALLOW ONE MORE? + JRST UNVERR ;NO, GIVE FATAL ERROR + AOS UNIVNO ;ONE MORE NOW + SETOM UNIVSN ;AND SET SEEN A UNIVERSAL + JRST TITLE0 ;CONTINUE AS IF TITLE + + +ADDUNV: PUSH PP,RC ;AN AC TO USE + PUSHJ PP,NOUT ;CONVERT TO SIXBIT + HRRZ RC,UNIVNO ;GET ENTRY INDEX + MOVEM AC0,UNITBL(RC) ;STORE SIXBIT NAME IN TABLE + HRRZS UNIVSN ;ONLY DO IT ONCE + POP PP,RC ;RESTORE RC + POPJ PP, ;AND RETURN + +UNVERR: HRROI RC,[SIXBIT /TOO MANY UNIVERSALS@/] + JRST ERRFIN + +UNISYM: HRRZ AC0,FREE ;GET HIGHEST FREE LOCATION + MOVEM AC0,JOBFF ;INTO JOBFF + PUSHJ PP,SUPRSA ;TURN ON SUPPRESS BIT + PUSH PP,SYMBOL ;NEED TO SAVE INCASE PRGEND + MOVE AC0,SYMTOP ;TOP OF TABLE + SUB AC0,SYMBOL ;GET LENGTH OF TABLE + HRL ARG,SYMBOL ;BOTTOM OF TABLE + HRR ARG,JOBFF ;WHERE TO GO + HRRZ RC,UNIVNO ;GET TABLE INDEX + HRRM ARG,SYMBOL ;WILL BE THERE SOON + HRRZM ARG,UNIPTR(RC) ;STORE IN CORRESPONDING PLACE + ADDB AC0,JOBFF ;WHERE TO END + HRLM AC0,UNIPTR(RC) ;SAVE NEW SYMTOP + BLT ARG,@JOBFF ;MOVE TABLE + HRRZM AC0,UNITOP ;SAVE TOP OF TABLES+1 + CAMLE AC0,MACSIZ ;IN CASE OVER A K BOUND + MOVEM AC0,MACSIZ ;DON'T REDUCE SO FAR NOW + MOVEM AC0,FREE ;JUST IN CASE IN MACRO + MOVE AC0,SRCHX ;SAVE OLD SEARCH POINTER + PUSHJ PP,SRCHI ;GET SEARCH POINTER + EXCH AC0,SRCHX + MOVEM AC0,UNISHX(RC) ;SAVE IT + SETZM UNIVSN ;CLEAR FLAG INCASE PRGEND + POP PP,SYMBOL ;RESTORE OLD VALUE + POPJ PP, ;RETURN + + SERCH0: PUSHJ PP,GETSYM ;GET A SYMBOL + JRST ERRAX ;ERROR IF NOT VALID + MOVEI RC,1 ;START AT ENTRY ONE + CAIL RC,.UNIV ;CHECK FOR CONSISTENCY ERROR + JRST SCHERR ;CANNOT FIND THIS ONE + CAME AC0,UNITBL(RC) ;LOOK FOR MATCH + AOJA RC,.-3 ;NOT FOUND YET + MOVE AC0,RC ;STORE TABLE ENTRY NUMBER + MOVEI RC,1 ;START AT ENTRY ONE + CAIL RC,.UNIV ;CHECK FOR CONSISTENCY ERROR + JRST SCHERR ;SHOULD NEVER HAPPEN!! + SKIPE UNISCH(RC) ;LOOK FOR AN EMPTY SLOT + AOJA RC,.-3 ;NOT FOUND YET + MOVEM AC0,UNISCH(RC) ;STORE INDEX IN TABLE + JUMPCM SERCH0 ;LOOK FOR MORE NAMES + POPJ PP, ;FINISHED + +SCHERR: MOVSI RC,[SIXBIT /CANNOT FIND UNIVERSAL@/] + JRST ERRFIN ;NAME IN AC0 + +;MESSAGE FOR CASE WHERE FILES AFTER UNIVERSAL USED MORE BUFFER SPACE THAN FIRST UNIVERSAL +UNIERR: HRROI RC,[SIXBIT /UNIVERSAL PROGRAM(S) MUST HAVE SAME OUTPUT SPECIFICATION AS OTHER FILES@/] + JRST ERRFIN +> + SUBTTL MACRO/REPEAT HANDLERS + +REPEA0: PUSHJ PP,EVALXQ ;EVALUATE REPEAT EXP, EXTERNS ARE ILL. + JUMPNC ERRAX + +REPEA1: JUMPLE AC0,REPZ ;PASS THE EXP., DONT PROCESS + SOJE AC0,REPO ;REPEAT ONCE +REPEA2: PUSHJ PP,GCHARQ ;GET STARTING "<" + CAIE C,"<" + JRST REPEA2 + PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + PUSH MP,REPEXP + MOVEM AC0,REPEXP + PUSH MP,REPPNT ;STACK PREVIOUS REPEAT POINTER + MOVEM ARG,REPPNT ;STORE NEW POINTER + TDZA SDEL,SDEL ;YES, INITIALIZE BRACKET COUNT AND SKIP + +REPEA4: PUSHJ PP,WCHARQ ;WRITE A CHARACTER + PUSHJ PP,GCHARQ ;GET A CHARACTER + CAIN C,"<" ;"<"? + AOJA SDEL,REPEA4 ;YES, INCREMENT AND WRITE + CAIE C,">" ;">"? + JRST REPEA4 ;NO, WRITE THE CHARACTER + SOJGE SDEL,REPEA4 ;YES, WRITE IF NON-NEGATIVE COUNT + MOVSI CS,(BYTE (7) 177,3) ;SET "REPEAT" END + PUSHJ PP,WWRXE ;WRITE END + SKIPN LITLVL ;LITERAL MIGHT END ON LINE + SKIPE MACLVL ;IF IN MACRO DARE NOT PROCESS + JRST .+3 ;REST OF LINE SINCE MACRO MIGHT END ON IT + PUSHJ PP,BYPASS ;BYPASS + PUSHJ PP,STOUTS ;POLISH OF LINE BEFORE PROCESSING REPEAT + PUSH MP,MRP ;STACK PREVIOUS READ POINTER + PUSH MP,RCOUNT ;SAVE WORD COUNT + HRRZ MRP,REPPNT ;SET UP READ POINTER + SKIPN MACLVL ;IF IN MACRO GIVE CR-LF FIRST + SKIPE LITLVL ;SAME FOR LITERAL + JRST REPEA7 + AOJA MRP,POPOUT ;BYPASS ARG COUNT + +REPEA7: HRRZ MRP,REPPNT ;SET UP READ POINTER + ADDI MRP,1 ;BYPASS ARG COUNT +REPEA8: MOVEI C,CR + JRST RSW1 + +REPEND: SOSL REPEXP + JRST REPEA7 + HRRZ V,REPPNT ;GET START OF TREE + PUSHJ PP,REFDEC ;DECREMENT REFERENCE + POP MP,RCOUNT + POP MP,MRP + POP MP,REPPNT + POP MP,REPEXP + SKIPN LITLVL ;IF IN LITERAL OR + SKIPE MACLVL ;IF IN MACRO + JRST RSW0 ;FINISH OF LINE NOW + JRST REPEA8 + + REPZ: MOVE SDEL,SEQNO2 ;SAVE IN CASE OF END OF FILE + MOVEM SDEL,REPSEQ + MOVE SDEL,PAGENO + MOVEM SDEL,REPPG + SETOM INREP + MOVEI SDEL,0 ;SET COUNT +REPZ1: PUSHJ PP,GCHAR ;GET NEXT CHARACTER + CAIN C,"<" ;"<"? + AOJA SDEL,REPZ1 ;YES, INCREMENT COUNT + CAIN C,">" ;">"? + SOJLE SDEL,REPZ2 ;YES, EXIT IF MATCHING + JRST REPZ1 ;NO, RECYCLE +REPZ2: SETZM INREP ;FLAG OUT OF IT + SETZM INCND ;AND CONDITIONAL ALSO + JRST STMNT ;AND EXIT + +REPO: PUSHJ PP,GCHAR ;GET "<" + CAIE C,"<" + JRST REPO + SKIPE RPOLVL ;ARE WE NESTED? + AOS RPOLVL ;YES, DECREMENT CURRENT + PUSH MP,RPOLVL + SETOM RPOLVL + JRST STMNT + +REPO1: CAIN C,"<" + SOS RPOLVL + CAIN C,">" + AOSE RPOLVL + JRST RSW2 + POP MP,RPOLVL + PUSHJ PP,RSW2 + JRST RSW0 + DEFIN0: PUSHJ PP,GETSYM ;GET MACRO NAME + JRST ERRAX ;EXIT ON ERROR + MOVEM PP,PPTMP1 ;SAVE POINTER + MOVEM AC0,PPTMP2 ;SAVE NAME + TLO IO,IORPTC + MOVE SX,SEQNO2 ;SAVE IN CASE OF EOF + MOVEM SX,DEFSEQ + MOVE SX,PAGENO + MOVEM SX,DEFPG + SETOM INDEF ;AND FLAG IN DEFINE + SYN .TEMP,COMSW ;SAVE SPACE + SETZB SX,COMSW ;SET ARGUMENT AND REFERENCE COUNT AND COMMENT SWITCH +DEF02: PUSHJ PP,GCHAR ;SEARCH FOR "(" OR "<" + CAIG C,FF ;SEARCH FOR END OF LINE + CAIGE C,LF ;LF,VT, OR FF + JRST .+2 ;WASN'T ANY OF THEM + SETZM COMSW ;RESET COMMENT SWITCH + CAIN C,";" ;COMMENT? + SETOM COMSW ;YES, SET COMMENT SWITCH + SKIPE COMSW ;INSIDE A COMMENT? + JRST DEF02 ;YES, IGNORE CHARACTER + CAIN C,"<" ;"<"? + JRST DEF20 ;YES + CAIE C,"(" ;"("? + JRST DEF02 ;NO +DEF10: PUSHJ PP,GETSYM ;YES, GET DUMMY SYMBOL + TRO ER,ERRA ;FLAG ERROR + ADDI SX,1 ;INCREMENT ARG COUNT + PUSH PP,AC0 ;STACK IT + CAIN C,'<' ;A DEFAULT ARGUMENT COMING UP? + JRST DEF80 ;YES, STORE IT AWAY + CAIE C,11 ;")"? + JRST DEF10 ;NO, GET NEXT DUMMY SYMBOL +DEF12: PUSHJ PP,GCHAR + CAIE C,"<" ;"<"? + JRST DEF12 ;NO +DEF20: PUSH PP,[0] ;YES, MARK THE LIST + LSH SX,9 ;SHIFT ARG COUNT + AOS ARG,SX + PUSHJ PP,SKELI ;INITIALIZE MACRO SKELETON + MOVE AC0,PPTMP2 ;GET NAME + TLO IO,DEFCRS + PUSHJ PP,MSRCH ;SEARCH THE TABLE + JRST DEF24 ;NOT FOUND + TLNN ARG,MACF ;FOUND, IS IT A MACRO? + TROA ER,ERRX ;NO, FLAG ERROR AND SKIP + PUSHJ PP,REFDEC ;YES, DECREMENT THE REFERENCE +DEF24: HRRZ V,WWRXX ;GET START OF TREE + SKIPN .TEMP ;ANY DEFAULT ARGUMENTS TO TAKE CARE OF? + JRST DEF25 ;NO + HRRZ C,1(V) ;GET SHIFTED ARG COUNT + LSH C,-9 ;GET ARG COUNT BACK + ADDI C,1 ;ONE MORE FOR TERMINAL ZERO + ADD C,.TEMP ;NUMBER OF ITEMS IN STACK + HRLS C ;MAKE XWD + SUB PP,C ;BACK UP STACK + MOVE SDEL,.TEMP ;NUMBER OF WORDS NEEDED + ADDB SDEL,FREE ;FROM FREE CORE + CAML SDEL,SYMBOL ;MORE CORE NEEDED + PUSHJ PP,XCEEDS ;YES, TRY TO GET IT + SUB SDEL,.TEMP ;FORM POINTER + HRLM SDEL,1(V) ;STORE IT WITH ARG COUNT IN MACRO + SUBI SDEL,1 ;TO USE FOR PUSHING POINTER INTO STORAGE + MOVEI C,1(PP) ;POINT TO START OF STACK +DEF26: MOVE ARG,(C) ;GET AN ITEM OFF STACK + TLNN ARG,-40 ;A POINTER? + JUMPN ARG,[PUSH SDEL,ARG ;YES, STORE IT + AOJA C,DEF26] ;GET NEXT + PUSH PP,ARG ;RESTACK ARGUMENT + SKIPE ARG ;FINISHED IF ZERO + AOJA C,DEF26 ;GET NEXT + PUSH SDEL,ARG ;STORE ZERO IN DEFAULT LIST ALSO + DEF25: MOVSI ARG,MACF + MOVEM PP,PPTMP2 ;STORE TEMP STORAGE POINTER + PUSHJ PP,INSERT ;INSERT/UPDATE + TLZ IO,DEFCRS ;JUST IN CASE + SETZM ARGF ;NO ARGUMENT SEEN + SETZM SQFLG ;AND NO ' SEEN + TDZA SDEL,SDEL ;CLEAR BRACKET COUNT +DEF30: PUSHJ PP,WCHAR ;WRITE CHARACTER +DEF31: PUSHJ PP,GCHAR ;GET A CHARACTER +DEF32: MOVE CS,C ;GET A COPY + CAIN C,";" ;IS IT A COMMENT + JRST CPEEK ;YES CHECK FOR ;; +DEF33: CAIG CS,"Z"+40 ;CONVERT LOWER CASE + CAIGE CS,"A"+40 + JRST .+2 + SUBI CS,40 + CAIGE CS,40 ;TEST FOR CONTROL CHAR. + JRST [SKIPN SQFLG ;HAS SINGLE QUOTE BEEN SEEN? + JRST DEF30 ;NO, OUTPUT THIS CHAR. + PUSH PP,C ;YES, SAVE CURRENT CHAR + MOVEI C,47 ;SET UP QUOTE + PUSHJ PP,WCHAR;WRITE IT + POP PP,C ;GET BACK CURRENT CHAR. + SETZM SQFLG ;RESET FLAG + JRST DEF30] ;AND CONTINUE + CAILE CS,77+40 + JRST DEF30 ;TEST FOR SPECIAL + MOVE CS,CSTAT-40(CS) ;GET STATUS BITS + TLNE CS,6 ;ALPHA-NUMERIC? + JRST DEF40 ;YES + SKIPN SQFLG ;WAS A ' SEEN? + JRST DEF36 ;NO, PROCESH + PUSH PP,C ;YES, SAVE CURRENT CHARACTER + MOVEI C,47 ;AND PUT IN A ' + PUSHJ PP,WCHAR ;... + POP PP,C ;RESTORE CURRENT CHARACTER + SETZM SQFLG ;AND RESET FLAG +DEF36: CAIE C,47 ;IS THIS A '? + JRST DEF35 ;NOPE + SKIPN ARGF ;YES, WAS LAST THING SEEN AN ARG? + SETOM SQFLG ;IF NOT, SET SNGL QUOT FLAG + SETZM ARGF ;BUT NOT ARGUMENT IN ANY CASE + JRST DEF31 ;GO GET NEXT CHARACTER + DEF35: SETZM ARGF ;THIS IS NOT AN ARGUMENT + CAIN C,"<" ;"<"? + AOJA SDEL,DEF30 ;YES, INCREMENT COUNT AND WRITE + CAIN C,">" ;">"? + SOJL SDEL,DEF70 ;YES, TEST FOR END + JRST DEF30 ;NO, WRITE IT + +CPEEK: TLNN IO,IOPALL ;IF LALL IS ON + JRST DEF33 ;JUST RETURN + PUSHJ PP,PEEK ;LOOK AT NEXT CHAR. + CAIN C,";" ;IS IT ;;? + JRST CPEEK1 ;YES + MOVE C,CS ;RESTORE C + JRST DEF33 ;AND RETURN + +CPEEK1: PUSHJ PP,GCHAR ;GET THE CHAR. + CAIE C,">" ;RETURN IF END OF MACRO + CAIG C,CR ;IS CHAR ONE OF + CAIGE C,LF ;LF,VT,FF,CR + JRST CPEEK1 ;NO,SO GET NEXT CHAR. + JRST DEF32 ;YES,RETURN AND STORE + DEF40: MOVEI AC0,0 ;CLEAR ATOM + MOVSI AC1,(POINT 6,AC0) ;SET POINTER +DEF42: PUSH PP,C ;STACK CHARACTER + TLNE AC1,770000 ;HAVE WE STORED 6? + IDPB CS,AC1 ;NO, STORE IN ATOM + PUSHJ PP,GCHAR ;GET NEXT CHARACTER + MOVE CS,C + CAIG CS,"Z"+40 + CAIGE CS,"A"+40 + JRST .+2 + SUBI CS,40 ;CONVERT LOWER TO UPPER + CAIL CS,40 + CAILE CS,77+40 + JRST DEF44 ;TEST SPECIAL + MOVE CS,CSTAT-40(CS) ;GET STATUS + TLNE CS,6 ;ALPHA-NUMERIC? + JRST DEF42 ;YES, GET ANOTHER +DEF44: PUSH PP,[0] ;NO, MARK THE LIST + MOVE SX,PPTMP1 ;GET POINTER TO TOP + +DEF46: SKIPN 1(SX) ;END OF LIST? + JRST DEF50 ;YES + CAME AC0,1(SX) ;NO, DO THEY COMPARE? + AOJA SX,DEF46 ;NO, TRY AGAIN + SUB SX,PPTMP1 ;YES, GET DUMMY SYMBOL NUMBER + LSH SX,4 + MOVSI CS,<(BYTE (7) 177,101)>(SX) ;SET ESCAPE CODE MACEND + LSH AC0,-^D30 + CAIN AC0,5 ;"%"? + TLO CS,1000 ;YES, SET CRESYM FLAG + PUSHJ PP,WWORD ;WRITE THE WORD + SETOM ARGF ;SET ARGUMENT SEEN FLAG + SETZM SQFLG ;AND IGNORE ANY ' WAITING TO GET INTO STRING +DEF48: MOVE PP,PPTMP2 ;RESET PUSHDOWN POINTER + TLO IO,IORPTC ;ECHO LAST CHARACTER + JRST DEF31 ;RECYCLE + +DEF50: + SKIPN SQFLG ;HAVE WE SEEN A '? + JRST DEF51 ;NOPE + MOVEI C,47 ;YES, PUT IT IN + PUSHJ PP,WCHAR ;... + SETZM SQFLG ;AND CLEAR FLAG +DEF51: MOVE C,2(SX) ;GET CHARACTER + JUMPE C,DEF48 ;CLEAN UP IF END + PUSHJ PP,WCHAR ;WRITE THE CHARACTER + AOJA SX,DEF51 ;GET NEXT + +DEF70: MOVE PP,PPTMP1 ;RESTORE PUSHDOWN POINTER + MOVSI CS,(BYTE (7) 177,1) + PUSHJ PP,WWRXE ;WRITE END + SETZM INDEF ;OUT OF IT + JRST BYPASS + ; HERE TO STORE DEFAULT ARGUMENTS + +DEF80: AOS .TEMP ;COUNT ONE MORE + PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + HRL V,SX ;SYMBOL NUMBER + PUSH PP,V ;STORE POINTER + TDZA SDEL,SDEL ;ZERO BRACKET COUNT +DEF81: PUSHJ PP,WCHARQ ;WRITE A CHARACTER + PUSHJ PP,GCHARQ ;GET A CHARACTER + CAIN C,"<" ;ANOTHER "<"? + AOJA SDEL,DEF81 ;YES, INCREMENT AND WRITE + CAIE C,">" ;CLOSING ANGLE? + JRST DEF81 ;NO, JUST WRITE THE CHAR. + SOJGE SDEL,DEF81 ;YES, WRITE IF NOT END + MOVSI CS,(BYTE (7) 177,2) + PUSHJ PP,WWRXE ;WRITE END OF DUMMY ARGUMENT + PUSHJ PP,GCHAR ;READ AT NEXT CHAR. + CAIE C,")" ;END OF ARGUMENT LIST? + JRST DEF10 ;NO, GET NEXT SYMBOL + JRST DEF12 ;YES, LOOK FOR "<" + SUBTTL MACRO CALL PROCESSOR +CALLM: SKIPGE MACENL ;ARE WE TRYING TO RE-ENTER? + JRST ERRAX ;YES, BOMB OUT WITH ERROR + HRROS MACENL ;FLAG "CALLM IN PROGRESS" + EXCH MP,RP + PUSH MP,V ;STACK FOR REFDEC + EXCH MP,RP + MOVEM AC0,CALNAM ;SAVE MACRO NAME INCASE OF ERROR + MOVE SDEL,SEQNO2 ;SAVE IN CASE OF EOF + MOVEM SDEL,CALSEQ + MOVE SDEL,PAGENO + MOVEM SDEL,CALPG + ADDI V,1 ;POINT TO DUMMY SYMBOL COUNT + AOS SDEL,0(V) ;INCREMENT ARG COUNT + HLLZM SDEL,.TEMP ;DEFAULT ARG POINTER IF NON-ZERO + LSHC SDEL,-^D<9+36> ;ZERO SDEL, GET ARG COUNT IN SX + ANDI SX,777 ;MASK + SKIPE .TEMP ;IF AT LEAST ONE DEFAULT ARG + HRRM SX,.TEMP ;STORE COUNT OF ARGS + PUSH PP,V ;STACK FOR MRP + PUSH PP,RP ;STACK FOR MACPNT + JUMPE SX,MAC20 ;TEST FOR NO ARGS + PUSHJ PP,CHARAC + CAIE C,"(" ;"(" + TROA SDEL,-1 ;NO, FUDGE PAREN COUNT AND SKIP + +MAC10: PUSHJ PP,GCHAR ;GET A CHARACTER, LOOK FOR AN ARG + CAIG C,CR + CAIGE C,LF + CAIN C,";" ;";"? + JRST MAC21 ;YES, END OF ARGUMENT STRING + + PUSHJ PP,SKELI1 ;NO, INITIALIZE SKELETON + CAIN C,"<" ;"<"? + JRST MAC30 ;YES, PROCESS AS SPECIAL + CAIE C,176 + CAIN C,134 ;"\" + JRST MAC40 ;YES, PROCESS SYMBOL + +MAC14: CAIN C,"," ;","? + JRST MAC16 ;YES; NULL SYMBOL + CAIN C,"(" ;"("? + ADDI SDEL,1 ;YES, INCREMENT COUNT + CAIN C,")" ;")"? + SOJL SDEL,MAC16 ;YES, TEST FOR END + PUSHJ PP,WCHAR ;WRITE INTO SKELETON +MAC14A: PUSHJ PP,CHARAC ;GET NEXT CHARACTER + CAIG C,CR + CAIGE C,LF + JRST .+2 + JRST MAC15 ;TEST FOR END OF LINE + CAIE C,";" ;";"? + JRST MAC14 ;YES, END OF LINE + +MAC15: TLO IO,IORPTC +MAC16: MOVSI CS,(BYTE (7) 177,2) + PUSHJ PP,WWRXE ;WRITE END + EXCH MP,RP + PUSH MP,WWRXX + EXCH MP,RP + SOJLE SX,MAC20 ;BRANCH IF NO MORE ARGS + JUMPGE SDEL,MAC10 ;HAVEN'T SEEN TERMINAL ")" YET + MAC20: TLZN IO,IORPTC + PUSHJ PP,CHARAC +MAC21: EXCH MP,RP + JUMPE SX,MAC21B ;NO MISSING ARGS +MAC21A: PUSH MP,[-1] ;FILL IN MISSING ARGS + SKIPN .TEMP ;ANY DEFAULT ARGS? + JRST MAC21C ;NO + HRRZ C,.TEMP ;GET ARG COUNT + SUBI C,-1(SX) ;ACCOUNT FOR THOSE GIVEN + HRLZS C ;PUT IN LEFT HALF + HLRZ SDEL,.TEMP ;ADDRESS OF TABLE +MAC21D: SKIPN (SDEL) ;END OF LIST + JRST MAC21C ;YES + XOR C,(SDEL) ;TEST FOR CORRECT ARG + TLNN C,-1 ;WAS IT? + JRST MAC21E ;YES + XOR C,(SDEL) ;BACK THE WAY IT WAS + AOJA SDEL,MAC21D ;AND TRY AGAIN + +MAC21E: MOVEM C,(MP) ;REPLACE -1 WITH TREE POINTER + AOS 1(C) ;INCREMENT REFERENCE +MAC21C: SOJG SX,MAC21A +MAC21B: PUSH MP,[0] ;SET TERMINAL + HRRZ C,LIMBO + TLNN IO,IOSALL ;SUPPRESSING ALL? + JRST MAC23 ;NO + JUMPN MRP,MAC27 ;IN MACRO? + CAIE C,";" ;NO,IN COMMENT? + JRST MAC26 ;NO +MAC22: PUSHJ PP,CHARAC ;YES,GET IT INTO THE LBUF + CAIG C,CR ;LESS THAN CR? + CAIGE C,LF ;AND GREATER THAN LF? + JRST MAC22 ;NO GET ANOTHER +MAC26: HRLZI SX,70000 ;DECREMENT BYTE POINTER + ADDB SX,LBUFP + JUMPGE SX,MAC27 + HRLOI SX,347777 + ADDM SX,LBUFP +MAC27: HRLI C,-1 ;SET FLAG + JRST MAC25 + +MAC23: MOVEI SX,"^" + JUMPAD MAC24 ;BRANCH IF ADDRESS FIELD + CAIN C,";" ;IF SEMI-COLON + SKIPE LITLVL ;AND NOT IN A LITERAL + JRST MAC24 ;NOT BOTH TRUE + JUMPN MRP,MAC24 ;OR IN A MACRO + PUSHJ PP,STOUT ;LIST COMMENT OR CR-LF + TLNE IO,IOPALL ;MACRO EXPANSION SUPPRESSION? + TLO IO,IOMAC ; NO, SET TEMP BIT + TDOA C,[-1] ;FLAG LAST CHARACTER +MAC24: DPB SX,LBUFP ;SET ^ INTO LINE BUFFER +MAC25: PUSH MP,MACPNT + POP PP,MACPNT + PUSH MP,C + PUSH MP,RCOUNT ;STACK WORD COUNT + PUSH MP,MRP ;STACK MACRO POINTER + POP PP,MRP ;SET NEW READ POINTER + EXCH MP,RP + AOS MACLVL + HRRZS MACENL ;RESET "CALLM IN PROGRESS" + JUMPOC STMNT2 ;OP-CODE FIELD + JRST EVATOM ;ADDRESS FIELD + + MAC30: MOVEI AC0,0 ;INITIALIZE BRACKET COUNTER +MAC31: PUSHJ PP,GCHAR ;GET A CHARACTER + CAIN C,"<" ;"<"? + ADDI AC0,1 ;YES, INCREMENT COUNT + CAIN C,">" ;">"? + SOJL AC0,MAC14A ;YES, EXIT IF MATCHING + PUSHJ PP,WCHAR ;WRITE INTO SKELETON + JRST MAC31 ;GO BACK FOR ANOTHER + +MAC40: PUSH PP,SX ;STACK REGISTERS + PUSH PP,SDEL + HLLM IO,TAGINC ;SAVE IO FLAGS + PUSHJ PP,CELL ;GET AN ATOM + MOVE V,AC0 ;ASSUME NUMERIC + TLNE IO,NUMSW ;GOOD GUESS? + JRST MAC41 ;YES + PUSHJ PP,SSRCH ;SEARCH THE SYMBOL TABLE + TROA ER,ERRX ;NOT FOUND, ERROR +MAC41: PUSHJ PP,MAC42 ;FORM ASCII STRING + HLL IO,TAGINC ;RESTORE IO FLAGS + POP PP,SDEL + POP PP,SX + TLO IO,IORPTC ;REPEAT LAST CHARACTER + JRST MAC14A ;RETURN TO MAIN SCAN + +MAC42: MOVE C,V +MAC44: LSHC C,-^D35 + LSH CS,-1 + DIVI C,0(RX) ;DIVIDE BY CURRENT RADIX + HRLM CS,0(PP) + JUMPE C,.+2 ;TEST FOR END + PUSHJ PP,MAC44 + HLRZ C,0(PP) + ADDI C,"0" ;FORM TEXT + JRST WCHAR ;WRITE INTO SKELETON + MACEN0: SOS MACENL +MACEND: SKIPGE C,MACENL ;TEST "CALLM IN PROGRESS" + AOS MACENL ;INCREMENT END LEVEL AND EXIT + JUMPL C,REPEA8 + EXCH MP,RP + POP MP,MRP ;RETRIEVE READ POINTER + POP MP,RCOUNT ;AND WORD COUNT + MOVEI C,"^" + SKIPL 0(MP) ;TEST FLAG + PUSHJ PP,RSW2 ;MARK END OF SUBSTITUTION + POP MP,C + POP MP,ARG + SKIPA MP,MACPNT ;RESET MP AND SKIP +MACEN1: PUSHJ PP,REFDEC ;DECREMENT REFERENCE +MACEN2: AOS V,MACPNT ;GET POINTER + MOVE V,0(V) + JUMPG V,MACEN1 ;IF >0, DECREMENT REFERENCE + JUMPL V,MACEN2 ;IF <0, BYPASS + POP MP,V ;IF=0, RETRIEVE POINTER + PUSHJ PP,REFDEC ;DECREMENT REFERENCE + MOVEM ARG,MACPNT + EXCH MP,RP + SOS MACLVL + SKIPN MACENL ;CHECK UNPROCESSED END LEVEL + JRST MACEN3 ;NONE TO PROCESS + TRNN MRP,-1 ;MRP AT END OF TEXT + JRST MACEN0 ;THEN POP THE MACRO STACK NOW +MACEN3: TRNN C,77400 ;SALL FLAG? + HRLI C,0 ;YES,TURN IT OFF + JUMPL C,REPEA8 ;IF FLAG SET SUBSTITUTE + JRST RSW1 + IRP0: SKIPN MACLVL ;ARE WE IN A MACRO? + JRST ERRAX ;NO, BOMB OUT +IRP10: PUSHJ PP,MREADS ;YES, GET DATA SPEC + CAIE C,40 ;SKIP LEADING BLANKS + CAIN C,"(" ;"("? + JRST IRP10 ;YES, BYPASS + CAIN C,11 + JRST IRP10 + CAIE C,177 ;NO, IS IT SPECIAL? + JRST ERRAX ;NO, ERROR + PUSHJ PP,MREADS ;YES + TRZN C,100 ;CREATED? + JRST ERRAX + CAIL C,40 ;TOO BIG? + JRST ERRAX + ADD C,MACPNT ;NO, FORM POINTER TO STACK + PUSH MP,IRPCF ;STACK PREVIOUS POINTERS + PUSH MP,IRPSW + PUSH MP,IRPARP + PUSH MP,IRPARG + PUSH MP,IRPCNT + PUSH MP,0(C) + PUSH MP,IRPPOI + + HRRZM C,IRPARP + MOVEM AC0,IRPCF ;IRPC FLAG FOUND IN AC0 + SETOM IRPSW ;RESET IRP SWITCH + MOVE CS,0(C) + MOVEM CS,IRPARG + + PUSHJ PP,MREADS + CAIE C,"<" ;"<"? + JRST .-2 ;NO, SEARCH UNTIL FOUND + PUSHJ PP,SKELI1 ;INITIALIZE NEW STRING + MOVEM ARG,IRPPOI ;SET NEW POINTER + + TDZA SDEL,SDEL ;ZERO BRACKET COUNT AND SKIP +IRP20: PUSHJ PP,WCHAR1 + PUSHJ PP,MREADS + CAIN C,"<" ;"<"? + AOJA SDEL,IRP20 ;YES, INCREMENT COUNT AND WRITE + CAIE C,">" ;">"? + JRST IRP20 ;NO, JUST WRITE IT + SOJGE SDEL,IRP20 ;YES, WRITE IF NOT MATCHING + MOVE CS,[BYTE (7) 15,177,4] + PUSHJ PP,WWRXE ;WRITE END + PUSH MP,MRP ;STACK PREVIOUS READ POINTER + PUSH MP,RCOUNT ;AND WORD COUNT + SKIPG CS,IRPARG + JRST IRPPOP ;EXIT IF NOT VALID ARGUMENT + MOVEI C,1(CS) ;INITIALIZE POINTER + MOVEM C,IRPARG + IRPSET: EXCH MRP,IRPARG ;SWAP READ POINTERS + MOVE SX,RCOUNT ;SWAP COUNT OF WORDS TO READ + EXCH SX,IRPCNT + MOVEM SX,RCOUNT + PUSHJ PP,SKELI1 ;INITIALIZE SKELETON FOR DATA + HRRZM ARG,@IRPARP ;STORE NEW DS POINTER + SETZB SX,SDEL ;ZERO FOUND FLAG AND BRACKET COUNT + LDB C,MRP ;GET LAST CHAR + CAIN C,"," + SKIPE IRPCF ;IN IRPC + JRST IRPSE1 ;NO + MOVEI SX,1 ;FORCE ARGUMENT +IRPSE1: PUSHJ PP,MREADS + CAIE C,177 ;SPECIAL? + AOJA SX,IRPSE2 ;NO, FLAG AS FOUND + PUSHJ PP,PEEKM ;LOOK AT NEXT CHARACTER + SETZM IRPSW ;SET IRP SWITCH + JUMPG SX,IRPSE4 ;IF ARG FOUND, PROCESS IT + JRST IRPPOP ;NO, CLEAN UP AND EXIT + +IRPSE2: SKIPE IRPCF ;IRPC? + JRST IRPSE3 ;YES, WRITE IT + CAIN C,"," ;NO, IS IT A COMMA? + JUMPE SDEL,IRPSE4 ;YES, EXIT IF NOT NESTED + CAIN C,"<" ;"<"? + ADDI SDEL,1 ;YES, INCREMENT COUNT + CAIN C,">" ;">"? + SUBI SDEL,1 ;YES, DECREMENT COUNT + +IRPSE3: PUSHJ PP,WCHAR + SKIPN IRPCF ;IRPC? + JRST IRPSE1 ;NO, GET NEXT CHARACTER + +IRPSE4: MOVSI CS,(BYTE (7) 177,2) + PUSHJ PP,WWRXE ;WRITE END + MOVEM MRP,IRPARG ;SAVE POINTER + MOVE MRP,RCOUNT ;SAVE COUNT + MOVEM MRP,IRPCNT + HRRZ MRP,IRPPOI ;SET FOR NEW SCAN + AOJA MRP,REPEA8 ;ON ARG COUNT + STOPI0: SKIPN IRPARP ;IRP IN PROGRESS? + JRST ERRAX ;NO, ERROR + SETZM IRPSW ;YES, SET SWITCH + POPJ PP, + +IRPEND: MOVE V,@IRPARP + PUSHJ PP,REFDEC + SKIPE IRPSW ;MORE TO COME? + JRST IRPSET ;YES + +IRPPOP: MOVE V,IRPPOI + PUSHJ PP,REFDEC ;DECREMENT REFERENCE + POP MP,RCOUNT + POP MP,MRP ;RESTORE CELLS + POP MP,IRPPOI + POP MP,@IRPARP + POP MP,IRPCNT + POP MP,IRPARG + POP MP,IRPARP + POP MP,IRPSW + POP MP,IRPCF + JRST REPEA8 + GETDS: ;GET DUMMY SYMBOL NUMBER + MOVE CS,C ;USE CS FOR WORK REGISTER + ANDI CS,37 ;MASK + ADD CS,MACPNT ;ADD BASE ADDRESS + MOVE V,0(CS) ;GET POINTER FLAG + JUMPG V,GETDS1 ;BRANCH IF POINTER + TRNN C,40 ;NOT POINTER, SHOULD WE CREATE? + JRST RSW0 ;NO, FORGET THIS ARG + PUSH PP,WWRXX + PUSH PP,MWP ;STACK MACRO WRITE POINTER + PUSH PP,WCOUNT ;SAVE WORD COUNT + PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + MOVEM ARG,0(CS) ;STORE POINTER + MOVE CS,[BYTE (7) 0,170,170,170,171] ;CREATE A SYMBOL + ADD CS,LSTSYM ;LSTSYM= # OF LAST CREATED + TDZ CS,[BYTE (7) 0,170,170,170,170] + MOVEM CS,LSTSYM + IOR CS,[ASCII /.0000/] + MOVEI C,"." + PUSHJ PP,WCHAR + PUSHJ PP,WWORD ;WRITE INTO SKELETON + MOVSI CS,(BYTE (7) 177,2) + PUSHJ PP,WWRXE ;WRITE END CODE + POP PP,WCOUNT ;RESTORE WORD COUNT + POP PP,MWP ;RESTORE MACRO WRITE POINTER + POP PP,WWRXX + MOVE V,ARG ;SET UP FOR REFINC + +GETDS1: PUSHJ PP,REFINC ;INCREMENT REFERENCE + HRL V,RCOUNT ;SAVE WORD COUNT + PUSH MP,V ;STACK V FOR DECREMENT + PUSH MP,MRP ;STACK READ POINTER + MOVEI MRP,1(V) ;FORM READ POINTER + JRST RSW0 ;EXIT + +DSEND: POP MP,MRP + POP MP,V + HLREM V,RCOUNT ;RESTORE WORD COUNT + HRRZS V ;CLEAR COUNT + PUSHJ PP,REFDEC ;DECREMENT REFERENCE + JRST RSW0 ;EXIT + SKELI1: MOVEI ARG,1 ;ENTRY FOR SINGLE ARG +SKELI: SETZ MWP, ;SIGNAL FIRST TIME THROUGH + PUSHJ PP,SKELWL ;GET POINTER WORD + HRRZM MWP,WWRXX ;SAVE FIRST ADDRESS + HRRZM MWP,LADR ;SAVE START OF LINKED LIST + HRRZM ARG,1(MWP) ;STORE COUNT + SOS WCOUNT ;ACCOUNT FOR WORD + HRRZ ARG,WWRXX ;SET FIRST ADDRESS + ADDI MWP,2 ;BUMP POINTER + HRLI MWP,(POINT 7) ;SET FOR 5 ASCII BYTES + ;SKELW RETURNS WITH ADR OF NEXT FREE LOC IN V (RIGHT) + +SKELW: SOSLE WCOUNT ;STILL SOME SPACE IN LEAF? + POPJ PP, ;YES, RETURN +SKELWL: SKIPE V,NEXT ;GET FIRST FREE ADDRESS + JRST SKELW1 ;IF NON-ZERO, UPDATE FREE + MOVE V,FREE ;GET FREE + ADDI V,.LEAF ;INCREMENT BY LEAF SIZE + CAML V,SYMBOL ;OVERFLOW? + PUSHJ PP,XCEED ;YES, BOMB OUT + EXCH V,FREE ;UPDATE FREE + SETZM (V) ;CLEAR LINK + +SKELW1: HLL V,0(V) ;GET ADDRESS + HLRM V,NEXT ;UPDATE NEXT + SKIPE MWP ;IF FIRST TIME + HRLM V,1-.LEAF(MWP) ;STORE LINK IN FIRST WORD OF LEAF + MOVEI MWP,.LEAF ;SIZE OF LEAF + MOVEM MWP,WCOUNT ;STORE FOR COUNT DOWN + MOVEI MWP,(V) ;SET UP WRITE POINTER + TLO MWP,(POINT 7,,21) ;2 ASCII CHARS + POPJ PP, + + ;WWRXX POINTS TO END OF TREE + ;MWP IDPB POINTER TO NEXT HOLE + ;NEXT FIRST OF A LINKED PORTION THAT IS NOT BEING USED (LEAVES) + ;FREE POINTS TO FREE CORE BETWEEN TREE AND SYM-TABLE + ;LADR POINTS TO BEG OF LINKED PORTION. + GCHARQ: JUMPN MRP,MREADS ;IF GETTING CHAR. FROM TREE +GCHAR: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + CAIG C,FF ;TEST FOR LF, VT OR FF + CAIGE C,LF + POPJ PP, ;NO + JRST OUTIM1 ;YES, LIST IT + +WCHARQ: +WCHAR: +WCHAR1: TLNN MWP,760000 ;END OF WORD? + PUSHJ PP,SKELW ;YES, GET ANOTHER + IDPB C,MWP ;STORE CHARACTER + POPJ PP, + +WWORD: LSHC C,7 ;MOVE ASCII INTO C + PUSHJ PP,WCHAR1 ;STORE IT + JUMPN CS,WWORD ;TEST FOR END + POPJ PP, ;YES, EXIT + +WWRXE: PUSHJ PP,WWORD ;WRITE LAST WORD + ADD MWP,WCOUNT ;GET TO END OF LEAF + SUBI MWP,.LEAF ;NOW POINT TO START OF IT + HRRZS (MWP) ;ZERO LEFT HALF OF LAST LEAF + HRRM MWP,@WWRXX ;SET POINTER TO END + POPJ PP, + MREAD: PUSHJ PP,MREADS ;READ ONE CHARACTER + CAIE C,177 ;SPECIAL? + JRST RSW1 ;NO, EXIT + PUSHJ PP,MREADS ;YES, GET CODE WORD + TRZE C,100 ;SYMBOL? + JRST GETDS ;YES + CAILE C,4 ;POSSIBLY ILLEGAL + JRST ERRAX ;YUP + HRRI MRP,0 ;NO, SIGNAL END OF TEXT + JRST .+1(C) + PUSHJ PP,XCEED + JRST MACEND ;1; END OF MACRO + JRST DSEND ;2; END OF DUMMY SYMBOL + JRST REPEND ;3; END OF REPEAT + JRST IRPEND ;4; END OF IRP + +MREADI: HRLI MRP,700 ;SET UP BYTE POINTER + MOVEI C,.LEAF-1 ;NUMBER OF WORDS + MOVEM C,RCOUNT +MREADS: TLNN MRP,-1 ;FIRST TIME HERE? + JRST MREADI ;YES, SET UP MRP AND RCOUNT + TLNN MRP,760000 ;HAVE WE FINISHED WORD? + SOSLE RCOUNT ;YES, STILL ROOM IN LEAF? + JRST MREADC ;STILL CHAR. IN LEAF + HLRZ MRP,1-.LEAF(MRP);YES, GET LINK + HRLI MRP,(POINT 7,,21) ;SET POINTER + MOVEI C,.LEAF ;RESET COUNT + MOVEM C,RCOUNT +MREADC: ILDB C,MRP ;GET CHARACTER + POPJ PP, + +PEEK: JUMPN MRP,PEEKM ;THIS IS A MACRO READ + PUSHJ PP,CHARAC ;READ AN ASCII CHAR. + TLO IO,IORPTC ;REPEAT FOR NEXT + POPJ PP, ;AND RETURN + +PEEKM: PUSH PP,MRP ;SAVE MACRO READ POINTER + PUSH PP,RCOUNT ;SAVE WORD COUNT + PUSHJ PP,MREADS ;READ IN A CHAR. + POP PP,RCOUNT ;RESTORE WORD COUNT + POP PP,MRP ;RESET READ POINTER + POPJ PP, ;IORPTC IS NOT SET + REFINC: MOVEI CS,1(V) ;GET POINTER TO TREE + AOS 0(CS) ;INCREMENT REFERENCE + POPJ PP, + +REFDEC: JUMPLE V,DECERR ;CATASTROPHIC ERROR SOMEWHERE + MOVEI CS,1(V) ;GET POINTER TO TREE + SOS CS,0(CS) ;DECREMENT REFERENCE + TRNE CS,000777 ;IS IT ZERO? + POPJ PP, ;NO, EXIT + HRRZ CS,0(V) ;YES, GET POINTER TO END + HRL CS,NEXT ;GET POINTER TO NEXT RE-USABLE + HLLM CS,0(CS) ;SET LINK + HRRM V,NEXT ;RESET NEXT + POPJ PP, + +DECERR: MOVE AC0,CALNAM ;GET MACRO NAME + MOVSI RC,[SIXBIT /ERROR WHILE EXPANDING@/] + PUSHJ PP,TYPMSG + JRST ERRNE2 ;COMMON MESSAGE + A== 0 ;ASCII MODE +AL== 1 ;ASCII LINE MODE +IB== 13 ;IMAGE BINARY MODE +B== 14 ;BINARY MODE +DMP==16 ;DUMP MODE + +CTL== 0 ;CONTROL DEVICE NUMBER +IFN CCLSW,<CTL2==4 ;INPUT DEV FOR CCL FILE> +BIN== 1 ;BINARY DEVICE NUMBER +CHAR== 2 ;INPUT DEVICE NUMBER +LST== 3 ;LISTING DEVICE NUMBER + +; COMMAND STRING ACCUMULATORS + +ACDEV== 1 ;DEVICE +ACFILE==2 ;FILE +ACEXT== 3 ;EXTENSION +ACPPN== 4 ;PPN +ACDEL== 4 ;DELIMITER +ACPNTR==5 ;BYTE POINTER + +TIO== 6 + +TIORW== 1000 +TIOLE== 2000 +TIOCLD==20000 + +DIRBIT==4 ;DIRECTORY DEVICE +TTYBIT==10 ;TTY +MTABIT==20 ;MTA +DTABIT==100 ;DTA +DISBIT==2000 ;DISPLAY +CONBIT==20000 ;CONTROLING TTY +LPTBIT==40000 ;LPT +DSKBIT==200000 ;DSK + +;GETSTS ERROR BITS + +IOIMPM==400000 ;IMPROPER MODE (WRITE LOCK) +IODERR==200000 ;DEVICE DATA ERROR +IODTER==100000 ;CHECKSUM OR PARITY ERROR +IOBKTL== 40000 ;BLOCK TOO LARGE +ERRBIT==IOIMPM!IODERR!IODTER!IOBKTL + +SYN .TEMP,PPN + SUBTTL I/O ROUTINES +BEG: +IFN CCLSW,<TLZA IO,ARPGSW ;DON'T ALLOW RAPID PROGRAM GENERATION + TLO IO,ARPGSW ;ALLOW RAPID PROGRAM GENERATION> + HRRZ MRP,JOBREL ;GET LOWSEG SIZE + MOVEM MRP,MACSIZ ;SAVE CORE SIZE + ;DECODE VERSION NUMBER + MOVEI PP,JOBFFI ;TEMP PUSH DOWN STACK + PUSH PP,[0] ;MARK BOTTOM OF STACK + LDB 0,[POINT 3,JOBVER,2] ;GET USER BITS + JUMPE 0,GETE ;NOT SET IF ZERO + ADDI 0,"0" ;FORM NUMBER + PUSH PP,0 ;STACK IT + MOVEI 0,"-" ;SEPARATE BY HYPHEN + PUSH PP,0 ;STACK IT ALSO +GETE: HRRZ 0,JOBVER ;GET EDIT NUMBER + JUMPE 0,GETU ;SKIP ALL THIS IF ZERO + MOVEI 1,")" ;ENCLOSE IN PARENS. + PUSH PP,1 +GETED: IDIVI 0,8 ;GET OCTAL DIGITS + ADDI 1,"0" ;MAKE ASCII + PUSH PP,1 ;STACK IT + JUMPN 0,GETED ;LOOP TIL DONE + MOVEI 0,"(" ;OTHER PAREN. + PUSH PP,0 +GETU: LDB 0,[POINT 6,JOBVER,17] ;UPDATE NUMBER + JUMPE 0,GETV ;SKIP IF ZERO + IDIVI 0,8 ;MIGHT BE TWO DIGITS + ADDI 1,"@" ;FORM ALPHA + PUSH PP,1 + JUMPN 0,GETU+1 ;LOOP IF NOT DONE +GETV: LDB 0,[POINT 9,JOBVER,11] ;GET VERSION NUMBER + IDIVI 0,8 ;GET DIGIT + ADDI 1,"0" ;TO ASCII + PUSH PP,1 ;STACK + JUMPN 0,GETV+1 ;LOOP + MOVE 1,[POINT 7,VBUF+1,13] ;POINTER TO DEPOSIT IN VBUF + POP PP,0 ;GET CHARACTER + IDPB 0,1 ;DEPOSIT IT + JUMPN 0,.-2 ;KEEP GOING IF NOT ZERO + IFN CCLSW,< + TLZA IO,CRPGSW ;SET TO INIT NEW COMMAND FILE +M: TLNN IO,CRPGSW ;CURRENTLY DOING RPG?> +IFE CCLSW,<M:> + RESET ;INITIALIZE PROGRAM + SETZM BINDEV ;CLEAR INCASE NOT USED NEXT TIME + SETZM LSTDEV ;SAME REASON + SETZM INDEV ;INCASE OF ERROR + HRRZ MRP,MACSIZ ;GET INITIAL SIZE + CORE MRP, ;BACK TO ORIGINAL SIZ4 + JFCL ;SHOULD NEVER FAIL + SETZB MRP,PASS1I + MOVE [XWD PASS1I,PASS1I+1] + BLT PASS2X-1 ;ZERO THE PASS1 AND PASS2 VARIABLES + MOVEI PP,JOBFFI ;SET TEMP PUSH-DOWN POINTER +; MOVE CS,[POINT 7,DBUF,6] ;INITIALIZE FOR DATE +; MSTIME 2, ;GET TIME FROM MONITOR +; PUSHJ PP,TIMOUT ;TIME FORMAT OUTPUT +; DATE 1, ;GET DATE +; IBP CS ;PASS OVER PRESET SPACE +; PUSHJ PP,DATOUT ;DATE FORMAT OUTPUT + MOVSI FR,P1!CREFSW +IFN CCLSW,<TLNE IO,CRPGSW ;RPG IN PROGRESS? + JRST GOSET ;YES, GO READ NEXT COMMAND + TLNE IO,ARPGSW ;NO, RPG ALLOWED? + JRST RPGSET ;YES, GO TRY +CTLSET: RELEASE CTL2, ;IN CASE OF LOOKUP FAILURE> +IFE CCLSW,<CTLSET:> + MOVSI IO,IOPALL ;ZERO FLAGS + INIT CTL,AL ;INITIALIZE USER CONSOLE + SIXBIT /TTY/ + XWD CTOBUF,CTIBUF + EXIT ;NO TTY, NO ASSEMBLY + MOVSI C,(SIXBIT /TTY/) + DEVCHR C, ;GET CHARACTERISTICS + TLNN C,10 ;IS IT REALLY A TTY + EXIT ;NO + INBUF CTL,1 ;INITIALIZE SINGLE CONTROL + OUTBUF CTL,1 ;BUFFERS + PUSHJ PP,CRLF ;OUTPUT CARRIAGE RETURN - LINE FEED + MOVEI C,"*" + IDPB C,CTOBUF+1 + OUTPUT CTL, + INPUT CTL, + IFN CCLSW,<JRST BINSET ;BEGIN WITH BINARY FILE + +RPGSET: + INIT CTL2,AL ;LOOK FOR DISK + SIXBIT /DSK/ ;... + XWD 0,CTLBLK ;... + JRST CTLSET ;DSK NOT THERE + + HRLZI 3,(SIXBIT /MAC/) ;###MAC + MOVEI 3 ;COUNT + PJOB AC1, ;RETURNS JOB NO. TO AC1 +RPGLUP: IDIVI AC1,12 ;CONVERT + ADDI AC2,"0"-40 ;SIXBITIZE IT + LSHC AC2,-6 ; + SOJG 0,RPGLUP ;3 TIMES + MOVEM 3,CTLBUF ;###MAC + HRLZI (SIXBIT /TMP/) ; + MOVEM CTLBUF+1 ;TMP + SETZM CTLBUF+3 ;PROG-PRO + LOOKUP CTL2,CTLBUF ;COMMAND FILE + JRST CTLSET ;NOT THERE + HLRM EXTMP ;SAVE THE EXTENSION + +RPGS2: INBUF CTL2,1 ;SINGLE BUFFERED +RPGS2A: INIT CTL,AL ;TTY FOR CONSOLE MESSAGES + SIXBIT /TTY/ ;... + XWD CTOBUF,0 ;... + EXIT ;NO TTY, NO ASSEMBLY + OUTBUF CTL,1 ;SINGLE BUFFERED + MOVE JOBFF ;REMEMBER WHERE BINARY BUFFERS BEGIN + MOVEM SAVFF ;... + HRRZ JOBREL ;TOP OF CORE + CAMLE MACSIZ ;SEE IF IT HAS GROWN + MOVEM MACSIZ ;PREVENTS ADDRESS CHECK ON EXIT + TLNE IO,CRPGSW ;ARE WE ALREADY IN RPG MODE? + JRST M ;MUST HAVE COME FROM @ COMMAND, RESET + + GOSET: MOVSI IO,IOPALL!CRPGSW ;SET INITIAL FLAGS + MOVEI CS,CTLSIZ ;MAXIMUM CHARS IN A LINE + MOVE AC1,CTLBLK+2 ;NUMBER OF CHARACTERS + MOVEM AC1,CTIBUF+2 ;SAVE FOR PASS 2 + MOVE AC1,[POINT 7,CTLBUF] ;WHERE TO STASH CHARS + MOVEM AC1,CTIBUF+1 ;... +GOSET1: SOSG CTLBLK+2 ;ANY MORE CHARS? + PUSHJ PP,[IN CTL2, ;READ ANOTHER BUFFERFUL + POPJ PP, ;EVERYTHING OK, RETURN + STATO CTL2,20000 ;EOF? + JRST [HRROI RC,[SIXBIT /ERROR READING COMMAND FILE@/] + JRST ERRFIN] ;GO COMPLAIN + PUSHJ PP,DELETE ;CMD FILE + EXIT] ;EOF AND FINISHED + ILDB C,CTLBLK+1 ;GET NEXT CHAR + MOVE RC,@CTLBLK+1 ;CHECK FOR SEQUENCE NUMBERS + TRNE RC,1 ;... + JRST [AOS CTLBLK+1 ;SKIP OVER ANOTHER 5 CHARS + MOVNI RC,5 ;... + ADDM RC,CTLBLK+2 ;... + JRST GOSET1 ] ;GO READ ANOTHER CHAR + JUMPE C,GOSET1 ;IGNORE NULLS + IDPB C,CTIBUF+1 ;STASH AWAY + AOS CTIBUF+2 ;INCREMENT CHAR. COUNT + CAIE C,12 ;LINE FEED OR + CAIN C,175 ;ALTMODE? + JRST GOSET2 ;YES, FINISHED WITH COMMAND + CAIE C,176 + CAIN C,33 + JRST GOSET2 ;ALTMODE. + SOJG CS,GOSET1 ;GO READ ANOTHER + HRROI RC,[SIXBIT /COMMAND LINE TOO LONG@/] + JRST ERRFIN ;GO COMPLAIN +GOSET2: MOVEI C,12 ;MAKE SURE THERE'S A LF + IDPB C,CTIBUF+1 ;... + MOVEM AC1,CTIBUF+1 ;SET POINTER TO BEGINNING + AOS CTIBUF+2 ;ADD I TO COUNT + MOVE SAVFF ;RESET JOBFF FOR NEW BINARY + MOVEM JOBFF ;... + JRST BINSET + +RPGS1: PUSHJ PP,DELETE ;DELETE COMMAND FILE + MOVEM ACDEV,RPGDEV ;GET SET TO INIT + OPEN CTL2,RPGINI ;DO IT + JRST EINIT ;ERROR + MOVEM ACFILE,INDIR ;USE INPUT BLOCK + MOVEM ACPPN,INDIR+3 ;SET PPN + MOVEM ACEXT,INDIR+1 + LOOKUP CTL2,INDIR + JRST [JUMPN ACEXT,RPGLOS ;GIVE UP ,EXPLICIT EXTENSION + MOVSI ACEXT,(SIXBIT /CCL/) ;IF BLANK TRY CCL + JRST .-2 ] + HLRM ACEXT,EXTMP ;SAVE THE EXTENSION + HLRZ JOBSA ;RESET JOBFF TO ORIGINAL + MOVEM JOBFF + TLO IO,CRPGSW ;TURN ON SWITCH SO WE RESET WORLD + JRST RPGS2 ;AND GO +RPGLOS: RELEAS CTL2,0 + TLZ IO,CRPGSW ;STOPS IO TO UNASGD CHAN + JRST ERRCF ;NO FILE FOUND +> + BINSET: PUSHJ PP,NAME1 ;GET FIRST NAME +IFN CCLSW,<CAIN C,"!" ;WAS THIS AN IMPERATIVE? + JRST NUNSET ;GET THEE TO A NUNNERY + CAIN C,"@" ;CHEK FOR A NEW RPG FILE + JRST RPGS1> + TLNN FR,CREFSW ;CROSS REF REQUESTED? + JRST LSTSE1 ;YES, SKIP BINARY + CAIN C,"," ;COMMA? + JUMPE ACDEV,LSTSET ;YES, SKIP BINARY IF NO DEVICE SPECIFIED + CAIN C,"_" ;LEFT ARROW? + JUMPE ACDEV,LSTSE1 ;YES, SKIP BINARY IF NO DEVICE SPECIFIED + JUMPE ACDEV,M ;IGNORE IF JUST <CR-LF> + TLO FR,PNCHSW ;OK, SET SWITCH + MOVEM ACDEV,BINDEV ;STORE DEVICE NAME + MOVEM ACFILE,BINDIR ;STORE FILE NAME IN DIRECTORY + JUMPN ACEXT,.+2 ;EXTENSION SPECIFIED? + MOVSI ACEXT,(SIXBIT /REL/) ;NO, ASSUME RELOCATABLE BINARY + MOVEM ACEXT,BINDIR+1 ;STORE IN DIRECTORY + MOVEM ACPPN,BINDIR+3 ;SET PPN + OPEN BIN,BININI ;INITIALIZE BINARY + JRST EINIT ;ERROR + TLZE TIO,TIOLE ;SKIP TO EOT + MTAPE BIN,10 + TLZE TIO,TIORW ;REWIND REQUESTED? + MTAPE BIN,1 ;YES + JUMPGE CS,BINSE2 ;BRANCH IF NO BACK-SPACE + MTAPE BIN,17 ;BACK-SPACE A FILE + AOJL CS,.-1 ;TEST FOR END + WAIT BIN, + STATO BIN,1B24 ;LOAD POINT? + MTAPE BIN,16 ;NO, GO FORWARD ONE +BINSE2: SOJG CS,.-1 ;TEST FORWARD SPACING + + TLNE TIO,TIOCLD ;DIRECTORY CLEAR REQUESTED? + UTPCLR BIN, ;YES, CLEAR IT + OUTBUF BIN,2 ;SET UP TWO RING BUFFER + CAIN C,"_" + JRST GETSET ;NO LISTING + LSTSET: PUSHJ PP,NAME1 ;GET NEXT DEVICE +LSTSE1: CAIE C,"_" + JRST ERRCM + TLNE FR,CREFSW ;CROSS-REF REQUESTED? + JRST LSTSE2 ;NO, BRANCH + JUMPN ACDEV,.+2 ;YES, WAS DEVICE SPECIFIED? + MOVSI ACDEV,(SIXBIT /DSK/) ;NO, ASSUME DSK + JUMPN ACFILE,.+2 + MOVE ACFILE,[SIXBIT /CREF/] + JUMPN ACEXT,.+2 +MOVSI ACEXT,(SIXBIT /CRF/) +LSTSE2: JUMPE ACDEV,GETSET ;FORGET LISTING IF NO DEVICE SPECIFIED + MOVE AC0,ACDEV + DEVCHR AC0, ;GET CHARACTERISTICS + TLNE AC0,LPTBIT!DISBIT!TTYBIT + TLNE FR,CREFSW ; WAS CROSS-REF REQUESTED? + AOSA OUTSW+0*TTYSW ;NO, ASSUME TTY + JRST ERRCM ;YES, ERROR - CREF DEV MUST NOT BE LPT, DIS, OR TTY + TLNE AC0,CONBIT ;CONTROLING TELETYPE LISTING? + JRST GETSET ;YES, BUFFER ALREADY SET + MOVEM ACDEV,LSTDEV ;STORE DEVICE NAME + AOS OUTSW+0*LPTSW ;SET FOR LPT + MOVEM ACFILE,LSTDIR ;STORE FILE NAME + JUMPN ACEXT,.+2 + MOVSI ACEXT,(SIXBIT /LST/) + MOVEM ACEXT,LSTDIR+1 + MOVEM ACPPN,LSTDIR+3 ;SET PPN + OPEN LST,LSTINI ;INITIALIZE LISTING OUTPUT + JRST EINIT ;ERROR + TLZE TIO,TIOLE + MTAPE LST,10 + TLZE TIO,TIORW ;REWIND REQUESTED? + MTAPE LST,1 ;YES + JUMPGE CS,LSTSE3 + MTAPE LST,17 + AOJL CS,.-1 + WAIT LST, + STATO LST,1B24 + MTAPE LST,16 +LSTSE3: SOJG CS,.-1 + TLNE TIO,TIOCLD ;DIRECTORY CLEAR REQUESTED? + UTPCLR LST, ;YES, CLEAR IT + OUTBUF LST,2 ;SET UP A TWO RING BUFFER + GETSET: MOVEI 3,PDPERR + HRRM 3,JOBAPR ;SET TRAP LOCATION + MOVEI 3,1B19 ;SET FOR PUSH-DOWN OVERFLOW + APRENB 3, + SOS 3,PDP ;GET PDP REQUEST MINUS 1 + IMULI 3,.PDP ;COMPUTE SIZE (50*<NUMBER OF /P'S +1>) + HRLZ MP,3 + HRR MP,JOBFF ;SET BASIC POINTER + MOVE PP,MP + SUB PP,3 + MOVEM PP,RP ;SET RP + SUB PP,3 + ASH 3,1 ;DOUBLE SIZE OF BASIC POINTER + HRL PP,3 + SUBM PP,3 ;COMPUTE TOP LOCATION +IFN UNIVR,<SKIPN UNITOP ;IF ANY UNIVERSALS HAVE BEEN SEEN + JRST GETSE0 ;NO + HRRZS 3 ;GET TOP OF BUFFERS AND STACKS + CAMLE 3,UNISIZ ;HOPE ITS NOT BIGGER THAN UNIVERSAL ONE + JRST UNIERR ;IT WAS, YOU LOSE + SKIPA 3,UNITOP ;DON'T LOSE THEM +GETSE0: HRRZM 3,UNISIZ ;STORE UNTIL A UNIVERSAL IS SEEN> + HRRZM 3,LADR ;SET START OF MACRO TREE + HRRZM 3,FREE + +GETSE1: HRRZ JOBREL + SUBI 1 + MOVEM SYMTOP ;SET TOP OF SYMBOL TABLE + SUBI LENGTH ;SET POINTER FOR INITIAL SYMBOLS + CAMLE LADR ;HAVE WE ROOM? + JRST GETSE2 ;YES + + HRRZ 2,JOBREL ;NO, TRY FOR MORE CORE + ADDI 2,2000 + CORE 2, + JRST XCEED2 ;NO MORE, INFORM USER + JRST GETSE1 ;TRY AGAIN + +GETSE2: MOVEM SYMBOL ;SET START OF SYMBOL TABLE + HRLI SYMNUM + BLT @SYMTOP ;STORE SYMBOLS + PUSHJ PP,SRCHI ;INITIALIZE TABLE + MOVE [XWD CTIBUF+1,CTLSAV] ;SAVE CONTROL INPUT BUFFER + BLT CTLS1 ;FOR RESCAN ON PASS 2 +IFN FTDISK,<MOVSI (SIXBIT /DSK/) ;SET INPUT TO TAKE DSK AS DEV + MOVEM ACDEVX> + PUSHJ PP,COUTI ;INIT OUTPUT JUST IN CASE + PUSHJ PP,INSET ;GET FIRST INPUT FILE + +IFN CCLSW,<TLNE IO,CRPGSW ;BUT ONLY IF DOING RPG + TTCALL 3,[ASCIZ /MACRO: /] ;PUBLISH COMPILER NAME> + MOVE CS,INDIR ;SET UP NAME OF FIRST FILE + MOVEM CS,LSTFIL ;AS LAST PRINTED + SETZM LSTPGN + JRST ASSEMB ;START ASSEMBLY + FINIS: CLOSE BIN, ;DUMP BUFFER + TLNE FR,PNCHSW ;PUNCH REQUESTED? + PUSHJ PP,TSTBIN ;YES, TEST FOR ERRORS + RELEAS BIN, + CLOSE LST, + SOSLE OUTSW+0*LPTSW ;LPT TYPE OUTPUT? + PUSHJ PP,TSTLST ;YES, TEST FOR ERRORS + RELEAS LST, + RELEAS CHAR, + OUTPUT CTL,0 ;FLUSH TTY OUTPUT +IFN UNIVR,<SKIPE UNIVSN ;SKIP IF NOT ASSEMBLING UNIVERSAL + PUSHJ PP,UNISYM ;STORE SYMBOLS ETC. FIRST> + JRST M ;RETURN FOR NEXT ASSEMBLY + INSET: MOVEI JOBFFI ;POINTER TO INPUT BUFFER + HRRM JOBFF ;INFORM SYSTEM OF BUFFER AREA + PUSHJ PP,NAME2 ;GET NEXT COMMAND NAME + JUMPE ACDEV,ERRNE ;ERROR IF NONE LEFT + MOVEM ACDEV,INDEV ;STORE DEVICE + MOVEM ACFILE,INDIR ;STORE FILE IN DIRECTORY + MOVEM ACPPN,INDIR+3 ;STORE PPN BEFORE WE LOSE IT + OPEN CHAR,INDEVI + JRST EINIT ;ERROR + DEVCHR ACDEV, ;TEST CHARACTERISTICS + TLNN ACDEV,MTABIT ;MAG TAPE? + JRST INSET3 ;NO + TLZN FR,MTAPSW ;FIRST MAG TAPE IN PASS 2? + JRST INSET1 ;NO + TLNN TIO,TIORW ;YES, REWIND REQUESTED? + SUB CS,RECCNT ;NO, PREPARE TO BACK-SPACE TAPE +INSET1: AOS RECCNT ;INCREMENT FILE COUNTER + ADDM CS,RECCNT ;UPDATE COUNT + TLZE TIO,TIOLE + MTAPE CHAR,10 + TLZE TIO,TIORW ;REWIND? + MTAPE CHAR,1 ;YES + JUMPGE CS,INSET2 + MTAPE CHAR,17 + MTAPE CHAR,17 + AOJL CS,.-1 + WAIT CHAR, + STATO CHAR,1B24 + MTAPE CHAR,16 +INSET2: SOJGE CS,.-1 + +INSET3: INBUF CHAR,1 + MOVEI ACPNTR,JOBFFI + EXCH ACPNTR,JOBFF + SUBI ACPNTR,JOBFFI + MOVEI ACDEL,NUMBUF*203+1 + IDIV ACDEL,ACPNTR + INBUF CHAR,(ACDEL) + JUMPN ACEXT,INSET4 ;TAKE USER'S EXTENSION IF NON-BLANK + MOVSI ACEXT,(SIXBIT /MAC/) ;BLANK, TRY .MAC FIRST + PUSHJ PP,INSETI +INSET4: PUSHJ PP,INSETI + JUMPE ACEXT,ERRCF ;ERROR IF ZERO + TLNE ACDEV,TTYBIT ;TELETYPE? + SETSTS CHAR,AL ;YES, CHANGE TO ASCII LINE + ;DO ALL ENTERS HERE FOR LEVEL D + SKIPE ENTERS ;HAVE ENTERS BEEN DONE ALREADY? + JRST ENTRDN ;YES, DON'T DO TWICE + SKIPN ACEXT,LSTDEV ;IS THERE A LIST DEVICE? + JRST LSTSE5 ;NO SO DON'T DO ENTER + SKIPN ACFILE,LSTDIR ;GET FILE NAME INCASE OF ERROR + JRST [DEVCHR ACEXT, + TLNE ACEXT,DIRBIT ;DOES IT HAVE A DIRECTORY? + JRST LSTSE4 ;YES, GIVE UP BEFORE HARM IS DONE + SKIPE ACFILE,INDIR ;USE INPUT FILE NAME + MOVEM ACFILE,LSTDIR ;TOO BAD IF ZERO ALSO + JRST LSTSE4] + HLLZ ACEXT,LSTDIR+1 ;EXT ALSO + MOVE ACPPN,LSTDIR+3 ;SAVE PPN + LOOKUP LST,LSTDIR ;PREVIOUS ONE STILL THERE + JRST LSTSE4 ;NO + SETZM LSTDIR ;YES,CLEAR NAME + MOVEM ACPPN,LSTDIR+3 ;RESET PPN + RENAME LST,LSTDIR + CLOSE LST, ;IGNORE FAILURE + MOVEM ACFILE,LSTDIR ;RESTORE NAME + HLLZS LSTDIR+1 ;BH 11/19/74 FOR DATE75. CLEAR RH. + SETZM LSTDIR+2 ;CLEAR PROTECTION AND DATE + MOVEM ACPPN,LSTDIR+3 ;SET PPN AGAIN +LSTSE4: + ENTER LST,LSTDIR ;SET UP DIRECTORY + JRST ERRCL ;ERROR +LSTSE5: SKIPN ACEXT,BINDEV ;A BINARY DEVICE THEN ? + JRST ENTRDN ;NO + SKIPN ACFILE,BINDIR ;INCASE OF ERROR + JRST [DEVCHR ACEXT, + TLNE ACEXT,DIRBIT ;DOES IT HAVE A DIRECTORY? + JRST .+1 ;YES, GIVE UP BEFORE HARM IS DONE + SKIPE ACFILE,INDIR ;USE INPUT FILE NAME + MOVEM ACFILE,BINDIR ;TOO BAD IF ZERO ALSO + JRST .+1] + HLLZS ACEXT,BINDIR+1 ;BH 11/19/74 DATE75. WAS HLLZ. + ENTER BIN,BINDIR ;ENTER FILE NAME + JRST ERRCB ;ERROR + +ENTRDN: SETOM ENTERS ;MAKE SURE ONLY DONE ONCE +REPEAT 0,< + MOVE CS,[POINT 7,DEVBUF] + PUSH PP,1 ;SAVE THE ACCS + PUSH PP,2 + PUSH PP,3 + SKIPN 2,INDIR ;GET INPUT NAME + JRST FINDEV ;FINISHED WITH DEVICE + SETZ 1, ;CLEAR FOR RECEIVING + LSHC 1,6 ;SHIFT ONE CHAR. IN + ADDI 1,40 ;FORM ASCII + IDPB 1,CS ;STORE CHAR. + JUMPN 2,.-4 ;MORE TO DO? + MOVEI 1," " ;SEPARATE BY TAB + IDPB 1,CS + HLLZ 2,INDIR+1 ;GET EXT + JUMPE 2,FINEXT ;NO EXT + SETZ 1, + LSHC 1,6 ;SAME LOOP AS ABOVE + ADDI 1,40 + IDPB 1,CS + JUMPN 2,.-4 +FINEXT: MOVEI 1," " + IDPB 1,CS ;SEPARATE BY TAB + LDB 1,[POINT 12,INDIR+2,35] ;GET DATE + LDB 2,[POINT 3,INDIR+1,20] ;BH 11/19/74 DATE75. + DPB 2,[POINT 3,1,23] ;BH 11/19/74 DATE75. + JUMPE 1,FINDEV ;NO DATE? + PUSHJ PP,DATOUT ;STORE IT + LDB 2,[POINT 11,INDIR+2,23] ;GET CREATION TIME + JUMPE 2,FINDEV ;NO TIME (DECTAPE) + MOVEI 1," " ;SEPARATE BY SPACE + IDPB 1,CS + PUSHJ PP,TIMOU1 ;STORE TIME +FINDEV: SETZ 1, + MOVEI 2," " ;FINAL TAB + IDPB 2,CS + IDPB 1,CS ;TERMINATE FOR NOW + POP PP,3 ;RESTORE ACCS + POP PP,2 + POP PP,1 +> + SKIPN PAGENO ;IF FIRST TIME THRU + JRST OUTFF ;START NEW PAGE + SETZM PAGENO ;ON NEW FILE, RESET PAGES + JRST OUTFF2 ;DON'T START NEW PAGE UNLESS FF + +INSETI: HLLZM ACEXT,INDIR+1 ;STORE EXTENSION + MOVE ACPPN,INDIR+3 ;SAVE PPN + LOOKUP CHAR,INDIR + SKIPA ACEXT,INDIR+1 ;GET ERROR CODE + JRST CPOPJ1 ;SKIP-RETURN IF FOUND + TRNE ACEXT,-1 ;ERROR CODE OF 0 IS FILE NOT FOUND + JRST ERRCF ;FILE THERE BUT NOT READABLE + SETZ ACEXT, ;CLEAR EXT AND TRY AGAIN + MOVEM ACPPN,INDIR+3 ;RESTORE PPN + POPJ PP, + REC2: MOVS [XWD CTIBUF+1,CTLSAV] ;RESCAN CONTROL (FROM PASS1 END STMNT) + BLT CTIBUF+2 ;INPUT BUFFER + MOVEI "_" + HRLM ACDELX ;FUDGE PREVIOUS DELIMITER +IFN RENTSW,<MOVE HHIGH ;GET HI-SEG BREAK + MOVEM HIGH1 ;SAVE THE ONE WE GOT ON PASS1 (FOR HISEG)> + SETZM PASS2I + MOVE [XWD PASS2I,PASS2I+1] + BLT PASS2X-1 ;ZERO PASS2 VARIABLES + TLO FR,MTAPSW!LOADSW ;SET FLAGS + +GOTEND: MOVE INDEV ;GET LAST DEVICE + DEVCHR ;GET ITS CHARACTERISTICS + TLNE 4 ;TEST FOR DIRECTORY (DSK OR DTA) + JRST EOT ;YES, SO DON'T WASTE TIME + JRST .+3 ;NO, INPUT BUFFER BY BUFFER + IN CHAR, + JRST .-1 ;NO ERRORS + STATO CHAR,1B22 ;TEST FOR EOF + JRST .-3 ;IGNORE ERRORS + +EOT: PUSHJ PP,SAVEXS ;SAVE REGISTERS + PUSHJ PP,INSET ;GET THE NEXT INPUT DEVICE + HRROI RC,[SIXBIT /END OF PASS 1@/] ;ASSUME END OF PASS + TLZN FR,LOADSW ;ZERO ONLY ON END OF PASS 1 + HRROI RC,[SIXBIT /LOAD THE NEXT FILE@/] ;NOT END OF PASS + TLNN ACDEV,(1B13!1B15) ;WAS ALL THAT WORK NECESSARY? + PUSHJ PP,TYPMSG ;YES + +RSTRXS: MOVSI RC,SAVBLK ;SET POINTER + BLT RC,RC-1 ;RESTORE REGISTERS + MOVE RC,SAVERC ;RESTORE RC + POPJ PP, ;EXIT + +SAVEXS: MOVEM RC,SAVERC ;SAVE RC + MOVEI RC,SAVBLK ;SET POINTER + BLT RC,SAVBLK+RC-1 ;BLT ALL REGISTERS BELOW RC + POPJ PP, ;EXIT + NAME1: SETZM ACDEVX ;ENTRY FOR DESTINATION +NAME2: SETZB ACDEV,INDIR+2 ;ENTRY FOR SOURCE + MOVEI ACFILE,0 ;CLEAR FILE + HLRZ ACDEL,ACDELX ;GET PREVIOUS DELIMITER + SETZB TIO,CS + SETZB ACEXT,INDIR+3 ;RESET EXTENSION AND PROGRAM-NUMBER PAIR + SETZM PPN ;CLEAR PPN +NAME3: MOVSI ACPNTR,(POINT 6,AC0) ;SET POINTER + TDZA AC0,AC0 ;CLEAR SYMBOL + +SLASH: PUSHJ PP,SW0 +GETIOC: PUSHJ PP,TTYIN ;GET INPUT CHARACTER + CAIN C,"/" + JRST SLASH + CAIN C,"(" + JRST SWITCH + CAIN C,":" + JRST DEVICE + CAIN C,"." + JRST NAME +IFN CCLSW,<CAIE C,"!" ;IS CHAR AN IMPERATIVE? + CAIN C,"@" + JRST TERM ;YES, GO DO IT> + CAIE C,33 ;CHECK FOR THREE FLAVORS OF ALT-MODE + CAIN C,176 ;... + JRST TERM ;... + CAIG C,CR ;LESS THAN CR? + CAIGE C,LF ;AND GREATER THAN LF? + CAIN C,175 ;OR 3RD ALTMOD + JRST TERM ;YES +IFN FTDISK,<CAIN C,"[" + JRST PROGNP ;GET PROGRAMER NUMBER PAIR> + CAIN C,"=" ;EQUALS IS SAME AS LEFT ARROW + TRCA C,142 ;SO MAKE IT A "_" AND SKIP + CAIE C,"," + CAIN C,"_" + JRST TERM + CAIGE C,40 ;VALID AS SIXBIT? + JRST [CAIN C,"Z"-100 ;NO,IS IT ^Z + EXIT ;YES,EXIT FOR BATCH + JRST GETIOC] ;JUST IGNORE + SUBI C,40 ;CONVERT TO 6-BIT + TLNE ACPNTR,770000 ;HAVE WE STORED SIX BYTES? + IDPB C,ACPNTR ;NO, STORE IT + JRST GETIOC ;GET NEXT CHARACTER + +DEVICE: JUMPN ACDEV,ERRCM ;ERROR IF ALREADY SET + MOVE ACDEV,AC0 ;DEVICE NAME + JRST DEVNAM ;COMMON CODE + +NAME: JUMPN ACFILE,ERRCM ;ERROR IF ALREADY SET + MOVE ACFILE,AC0 ;FILE NAME +DEVNAM: MOVE ACDEL,C ;SET DELIMITER + JRST NAME3 ;GET NEXT SYMBOL + +TERM: JUMPE ACDEL,TERM1 ;IF NO PREVIOUS TERMINATOR, THEN FILENAME + CAIN ACDEL,"_" ;... + JRST TERM1 ;... + CAIE ACDEL,":" ;IF PREVIOUS DELIMITER + CAIN ACDEL,"," ;WAS COLON OR COMMA +TERM1: MOVE ACFILE,AC0 ;SET FILE + CAIN ACDEL,"." ;IF PERIOD, + HLLZ ACEXT,AC0 ;SET EXTENSION + HRLM C,ACDELX ;SAVE PREVIOUS DELIMITER + JUMPN ACDEV,.+2 ;IF DEVICE SET USE IT + SKIPA ACDEV,ACDEVX ;OTHERWISE USE LAST DEVICE + MOVEM ACDEV,ACDEVX ;AND DEVICE + MOVE ACPPN,PPN ;PUT PPN IN RIGHT PLACE +IFN FTDISK,<CAIN C,"!" ;IMPERATIVE? + POPJ PP, ;YES, DON'T ASSUME DEV + JUMPE ACFILE,CPOPJ ;IF THERE IS A FILE, + JUMPN ACDEV,.+2 ;BUT NO DEVICE + MOVSI ACDEV,(SIXBIT /DSK/) ;THEN ASSUME DISK> + POPJ PP, ;EXIT + ERRCM: HRROI RC,[SIXBIT /COMMAND ERROR@/] + JRST ERRFIN + +IFN FTDISK,<PROGNP: +PROGN1: HRLZM RC,PPN ;COMMA, STORE LEFT HALF +PROGN2: MOVEI RC,0 ;CLEAR AC +PROGN3: PUSHJ PP,TTYIN + CAIN C,"," + JRST PROGN1 ;STORE LEFT HALF + HRRM RC,PPN ;ASSUME TERMINAL + CAIN C,"]" + JRST GETIOC ;YES, RETURN TO MAIN SCAN + CAIL C,"0" ;CHECK FOR VALID NUMBERS + CAILE C,"7" + JRST ERRCM ;NOT VALID + LSH RC,3 ;SHIFT PREVIOUS RESULT + ADDI RC,-"0"(C) ;ADD IN NEW NUMBER + JRST PROGN3 ;GET NEXT CHARACTER> + SWITC0: PUSHJ PP,SW1 ;PROCESS CHARACTER +SWITCH: PUSHJ PP,TTYIN ;GET NEXT CHARACTER + CAIE C,")" ;END OF STRING? + JRST SWITC0 ;NO + JRST GETIOC ;YES + +SW0: PUSHJ PP,TTYIN +SW1: MOVEI C,-"A"(C) ;CONVERT FROM ASCII TO NUMERIC + CAILE C,"Z"-"A" ;WITHIN BOUNDS? (IS IT ALPHA?) + JRST ERRCM ;NO, ERROR + MOVE RC,[POINT 4,BYTAB] + IBP RC + SOJGE C,.-1 ;MOVE TO PROPER BYTE + LDB C,RC ;PICK UP BYTE + JUMPE C,ERRCM ;TEST FOR VALID SWITCH + CAIG C,SWTABT-SWTAB ;LEGAL ON SOURCE? + JUMPL PP,ERRCM ;NO, TEST FOR SOURCE + LDB RC,[POINT 4,SWTAB-1(C),12] + CAIN RC,IO + SKIPN CTLSAV ;IF PASS2 OR IO SWITCH, + XCT SWTAB-1(C) ;EXECUTE INSTRUCTION + POPJ PP, ;EXIT + TLZ IO,IOSALL ;TAKE CARE OF /X + POPJ PP, + +DEFINE HELP (TEXT)< + XLIST + ASCIZ ?TEXT? + LIST> + +HLPMES: HELP < +Switches are :- +*/A advance one file +*/B backspace one file +/C produce a cref listing +*/E list macro expansions (LALL) +*/F list in new format (.MFRMT) +/G list in old format (.HWFRMT) +/H type this text +*/L reinstate listing (LIST) +/M suppress ascii in macro and repeat expansion (SALL) +*/N suppress error printout on tty +/O set MLOFF pseudo-op +/P increase size of the pushdown stack +/Q suppress Q errors on the listing +*/S suppress listing (XLIST) +*/T rewind device +*/X suppress all macro expansions (XALL) +*/Z zero the directory +Switches A,B,C,T,W,X, and Z must immediately follow +the device or file to which they refer. +> + DEFINE SETSW (LETTER,INSTRUCTION) < INSTRUCTION +J= <"LETTER"-"A">-^D9*<I=<"LETTER"-"A">/^D9> + SETCOD \I,J> + + DEFINE SETCOD (I,J) + <BYTAB'I=BYTAB'I!<.-SWTAB>B<4*J+3>> + +BYTAB0= 0 ;INITIALIZE TABLE +BYTAB1= 0 +BYTAB2= 0 + +SWTAB: + SETSW Z,<TLO TIO,TIOCLD > + SETSW C,<TLZ FR,CREFSW > + SETSW P,<SOS PDP > +SWTABT: ;THE ABOVE SW'S ARE LEGAL ON OUTPUT ONLY + SETSW A,<ADDI CS,1 > + SETSW B,<SUBI CS,1 > + SETSW E,<TLZ IO,IOPALL!IOSALL > + SETSW H,<OUTSTR HLPMES> + SETSW L,<TLZ IO,IOMSTR > + SETSW M,<TLO IO,IOPALL!IOSALL > + SETSW N,<HLLOS TYPERR > + SETSW O,<XCT OFFML > + SETSW Q,<TLO FR,ERRQSW > + SETSW S,<TLO IO,IOMSTR > + SETSW T,<TLO TIO,TIOLE > + SETSW W,<TLO TIO,TIORW > + SETSW X,<TLOA IO,IOPALL > + +BYTAB: ;BYTAB CONTAINS AN INDEX TO SWTAB + ;IT CONSIST OF 9 4BIT BYTES/WORD + ;OR ONE BYTE FOR EACH LETTER + + +BYTAB0 ;A-I BYTE = 1 THROUGH 17 = INDEX + +BYTAB1 ;J-R BYTE = 0 = COMMAND ERROR + +BYTAB2 ;S-Z + +IF2,<PURGE I,J,BYTAB0,BYTAB1,BYTAB2> + TTYIN: SOSGE CTIBUF+2 ;ENUF CHAR.? + JRST TTYERR ;NO + ILDB C,CTIBUF+1 ;GET CHARACTER + CAIE C," " ;SKIP BLANKS + CAIN C,HT ;AND TABS + JRST TTYIN + CAIN C,15 ;CR? + SETZM CTIBUF+2 ;YES,IGNORE REST OF LINE + CAIG C,"Z"+40 ;CHECK FOR LOWER CASE + CAIGE C,"A"+40 + POPJ PP, ;NO,EXIT + SUBI C,40 + POPJ PP, ;YES, EXIT + +TTYERR: SKIPN INDEV ;INPUT DEVICE SEEN? + JRST ERRCM ;NO, SO MISSING "_" +ERRNE: HRROI RC,[SIXBIT /?NO END STATEMENT ENCOUNTERED ON INPUT FILE@/] +ERRNE0: SKPINC V ;SEE IF WE CAN INPUT A CHAR. + JFCL ;BUT ONLY TO DEFEAT ^O + PUSHJ PP,TYPMSG ;OUTPUT IT + SKIPE LITLVL ;SEE IF IN LITERAL + SKIPN LITPG ;PAGE 0 MEANS NOT IN A LITERAL REALY + JRST ERRNE1 ;NO, TRY OTHERS + MOVE V,[XWD [SIXBIT /IN LITERAL@/],LITPG] + PUSHJ PP,PRNUM ;GO PRINT INFORMATION +ERRNE1: MOVEI V,0 ;CHECK FOR OTHER PLACES + SKIPE INDEF + MOVE V,[XWD [SIXBIT /IN DEFINE@/],DEFPG] + SKIPE INTXT + MOVE V,[XWD [SIXBIT /IN TEXT@/],TXTPG] + SKIPE INREP + MOVE V,[XWD [SIXBIT /IN CONDITIONAL OR REPEAT@/],REPPG] + SKIPE INCND + MOVE V,[XWD [SIXBIT /IN CONDITIONAL@/],CNDPG] + SKIPGE MACENL +ERRNE2: MOVE V,[XWD [SIXBIT /IN MACRO CALL@/],CALPG] + JUMPN V,ERRNE3 + SKIPN LITLVL ;HAD ONE PAGE NUMBER ALREADY + SKIPA V,[XWD [SIXBIT /@/],PAGENO] ;BETTER THAN NOTHING + JRST .+2 +ERRNE3: PUSHJ PP,PRNUM + HRROI RC,[SIXBIT /@/] ;WILL GET A RETURN + JRST ERRFIN + +ERRMS1: SIXBIT / ERRORS DETECTED@/ +ERRMS2: SIXBIT /?1 ERROR DETECTED@/ +ERRMS3: SIXBIT /NO ERRORS DETECTED@/ +EINIT: MOVE RC,[XWD ACDEV,[SIXBIT /NOT AVAILABLE@/]] + JRST ERRFIN + ERRCL: HRRZ RC,LSTDIR+1 ;GET LST DEV ERROR CODE + JRST .+2 ;GET ERROR MESSAGE +ERRCB: HRRZ RC,BINDIR+1 ;GET BIN DEV ERROR CODE + JUMPN RC,ERRTYP + SOJA RC,ERRTYP ;SPECIAL CASE IF ERROR CODE 0 + +ERRCF: HRRZ RC,INDIR+1 ;GET INPUT DEV ERROR CODE + HLLZ ACEXT,INDIR+1 ;SET UP EXT + +ERRTYP: CAIL RC,TABLND-TABLE ;IS ERROR CODE LEGAL? + SKIPA RC,TABLND ;NO, GIVE CATCH ALL MESSAGE + MOVE RC,TABLE(RC) ;YES, PICK UP MESSAGE + +ERRFIN: SKPINC C ;SEE IN WE CAN INPUT A CHAR. + JFCL ;BUT ONLY TO DEFEAT ^O + PUSHJ PP,CRLF + MOVEI C,"?" + PUSHJ PP,TYO + PUSHJ PP,TYPMS1 + CLOSE LST, ;GIVE USER A PARTIAL LISTING + CLOSE BIN,40 ;BUT NEVER A BUM REL FILE +IFN CCLSW,<AOS JOBERR ;RECORD ERROR SO EXECUTION DELETED> + JRST M + + [SIXBIT /(0) ILLEGAL FILE NAME@/],,ACFILE +TABLE: [SIXBIT /(0) FILE WAS NOT FOUND@/],,ACFILE + [SIXBIT /(1) NO DIRECTORY FOR PROJECT-PROGRAMMER NUMBER@/],,ACFILE + [SIXBIT /(2) PROTECTION FAILURE@/],,ACFILE + [SIXBIT /(3) FILE WAS BEING MODIFIED@/],,ACFILE + [SIXBIT /(4) RENAME FILE NAME ALREADY EXISTS@/],,ACFILE + [SIXBIT /(5) ILLEGAL SEQUENCE OF UUOS@/],,ACFILE + [SIXBIT /(6) BAD UFD OR BAD RIB@/],,ACFILE + [SIXBIT /(7) NOT A SAV FILE@/],,ACFILE + [SIXBIT /(10) NOT ENOUGH CORE@/],,ACFILE + [SIXBIT /(11) DEVICE NOT AVAILABLE@/],,ACFILE + [SIXBIT /(12) NO SUCH DEVICE@/],,ACFILE + [SIXBIT /(13) NOT TWO RELOC REG. CAPABILITY@/],,ACFILE + [SIXBIT /(14) NO ROOM OR QUOTA EXCEEDED@/],,ACFILE + [SIXBIT /(15) WRITE LOCK ERROR@/],,ACFILE + [SIXBIT /(16) NOT ENOUGH MONITOR TABLE SPACE@/],,ACFILE + [SIXBIT /(17) PARTIAL ALLOCATION ONLY@/],,ACFILE + [SIXBIT /(20) BLOCK NOT FREE ON ALLOCATION@/],,ACFILE + [SIXBIT /(21) CAN'T SUPERSEDE (ENTER) AN EXISTING DIRECTORY@/],,ACFILE + [SIXBIT /(22) CAN'T DELETE (RENAME) A NON-EMPTY DIRECTORY@/],,ACFILE + [SIXBIT /(23) SFD NOT FOUND@/],,ACFILE + [SIXBIT /(24) SEARCH LIST EMPTY@/],,ACFILE + [SIXBIT /(25) SFD NESTED TOO DEEPLY@/],,ACFILE + [SIXBIT /(26) NO-CREATE ON FOR SPECIFIED PATH@/],,ACFILE + +TABLND: [SIXBIT /(?) LOOKUP, ENTER, OR RENAME ERROR@/],,ACFILE + TYPMSG: PUSHJ PP,CRLF ;MOVE TO NEXT LINE +TYPMS1: HLRZ CS,RC ;GET FIRST MESSAGE + CAIE CS,-1 ;SKIP IF MINUS ONE + PUSHJ PP,TYPM2 ;TYPE MESSAGE + HRRZ CS,RC ;GET SECOND HALF + PUSHJ PP,TYPM2 + +CRLF: MOVEI C,CR ;OUTPUT CARRIAGE RETURN + PUSHJ PP,TYO + MOVEI C,LF ;AND LINE FEED + +TYO: SOSG CTOBUF+2 ;BUFFER FULL? + OUTPUT CTL,0 ;YES, DUMP IT + IDPB C,CTOBUF+1 ;STORE BYTE + CAIG C,FF ;FORM FEED? + CAIGE C,LF ;V TAB OR LINE FEED? + POPJ PP, ;NO + OUTPUT CTL,0 ;YES + POPJ PP, ;AND EXIT + +TYPM2: MOVSI C,(1B0) ;ANTICIPATE REGISTER WORD + CAIN CS,ACFILE ;FILE NAME ? + JRST [JUMPE ACEXT,.+1 ;YES, TEST FOR EXT + LSH ACEXT,-6 ;MAKE SPACE FOR "." + IOR ACEXT,[SIXBIT /. @/] + JRST TYPM2A] + CAIG CS,17 ;IS IT? + MOVEM C,1(CS) +TYPM2A: HRLI CS,(POINT 6,,) ;FORM BYTE POINTER + +TYPM3: ILDB C,CS ;GET A SIXBIT BYTE + CAIN C,40 ;"@"? + JRST TYO ;YES, TYPE SPACE AND EXIT + ADDI C,40 ;NO, FORM 7-BIT ASCII + PUSHJ PP,TYO ;OUTPUT CHARACTER + JRST TYPM3 + + XCEEDS: ADDI SX,2000 ;ADJUST SYMBOL POINTER +XCEED: PUSHJ PP,SAVEXS ;SAVE THE REGISTERS + HRRZ 1,JOBREL ;GET CURRENT TOP + MOVEI 0,2000(1) + CORE 0, ;REQUEST MORE CORE + JRST XCEED2 ;ERROR, BOMB OUT + HRRZ 2,JOBREL ;GET NEW TOP + +XCEED1: MOVE 0,0(1) ;GET ORIGIONAL + MOVEM 0,0(2) ;STORE IN NEW LOCATION + SUBI 2,1 ;DECREMENT UPPER + CAMLE 1,SYMBOL ;HAVE WE ARRIVED? + SOJA 1,XCEED1 ;NO, GET ANOTHER + MOVEI 1,2000 + ADDM 1,SYMBOL + ADDM 1,SYMTOP + PUSHJ PP,SRCHI ;RE-INITIALIZE SYMBOL TABLE + JRST RSTRXS ;RESTORE REGISTERS AND EXIT + +XCEED2: HRROI RC,[SIXBIT /INSUFFICIENT CORE@/] + JRST ERRNE0 +PDPERR: HRROI RC,[SIXBIT .PDP OVERFLOW, TRY /P@.] + JRST ERRNE0 + +PRNUM: HLRZ CS,V ;GET MESSAGE + PUSHJ PP,TYPM2 + MOVEI CS,[SIXBIT /ON PAGE@/] + PUSHJ PP,TYPM2 + MOVE AC0,(V) ;GET PAGE + PUSHJ PP,DP1 ;PRINT NUMBER + MOVEI C,40 + PUSHJ PP,TYO + SKIPN AC1,1(V) ;GET SEQ NUM IF THERE + POPJ PP, ;NO, RETURN + MOVEM AC1,OUTSQ + MOVEI CS,[SIXBIT /LINE@/] + PUSHJ PP,TYPM2 + MOVEI AC0,OUTSQ ;PRINT IT + OUTPUT CTL,0 ;TO MAKE THINGS PRINT IN RIGHT ORDER + DDTOUT AC0, + MOVEI C,40 + JRST TYO ;AND RETURN + +DP1: IDIVI AC0,^D10 + HRLM AC1,(PP) + JUMPE AC0,.+2 + PUSHJ PP,DP1 + HLRZ C,(PP) + ADDI C,"0" + JRST TYO + RIM0: TDO FR,AC0 ;SET RIM/RIM10 FLAG + TLNE FR,PNCHSW ;FORGET IT IF PUNCH RESET + SETSTS BIN,IB ;SET TO IMAGE BINARY MODE + POPJ PP, + +ROUT: EXCH CS,RIMLOC + SUB PP,[XWD 1,1] ;CLEAR OUT STACK WFW + TLNE FR,R1BSW + JRST ROUT6 + TLNN FR,RIM1SW + JRST ROUT1 + JUMPE CS,ROUT1 ;RIM10 OUTPUT + SUB CS,RIMLOC + JUMPE CS,ROUT1 + JUMPG CS,ERRAX + MOVEI C,0 + PUSHJ PP,PTPBIN + AOJL CS,.-1 +ROUT1: MOVSI C,(DATAI PTR,) ;RIM OUTPUT + HRR C,LOCO ;GET ADDRESS + TLNE FR,RIM1SW ;NO DATAI IF RIM10 + AOSA RIMLOC + PUSHJ PP,PTPBIN ;OUTPUT + MOVE C,AC0 ;CODE + AOSA LOCO ;INCREMENT CURRENT LOCATION + +OUTBIN: TLNN FR,RIMSW!RIM1SW!R1BSW ;EXIT IF RIM MODE +PTPBIN: TLNN FR,PNCHSW ;EXIT IF PUNCH NOT REQUESTED + POPJ PP, + SOSG BINBUF+2 ;TEST FOR BUFFER FULL + PUSHJ PP,DMPBIN ;YES, DUMP IT + IDPB C,BINBUF+1 ;DEPOSIT BYTE + POPJ PP, ;EXIT + + DMPBIN: OUT BIN,0 ;DUMP THE BUFFER + POPJ PP, ;NO ERRORS +TSTBIN: GETSTS BIN,C ;GET STSTUS BITS + TRNN C,ERRBIT ;ERROR? + POPJ PP, ;NO, EXIT + MOVE AC0,BINDEV ;YES, GET TAG + JRST ERRLST ;TYPE MESSAGE AND ABORT + +DMPLST: OUT LST,0 ;OUTPUT BUFFER + POPJ PP, ;NO ERRORS +TSTLST: GETSTS LST,C ;ANY ERRORS? + TRNN C,ERRBIT + POPJ PP, ;NO, EXIT + MOVE AC0,LSTDEV +ERRLST: MOVSI RC,[SIXBIT /OUTPUT WRITE-LOCK ERROR DEVICE@/] + TRNE C,IOIMPM ;IMPROPER MODE? + JRST ERRFIN ;YES + MOVSI RC,[SIXBIT /OUTPUT DATA ERROR DEVICE@/] + TRNE C,IODERR ;DEVICE DATA ERROR? + JRST ERRFIN ;YES + MOVSI RC,[SIXBIT /OUTPUT CHECKSUM OR PARITY ERROR DEVICE@/] + TRNE C,IODTER ;IS IT + JRST ERRFIN ;YES + MOVE CS,AC0 ;GET DEVICE + DEVCHR CS, ;FIND OUT WHAT IT IS + MOVSI RC,[SIXBIT /OUTPUT QUOTA EXCEEDED ON DEVICE@/] + TLNN CS,DSKBIT ;SKIP IF DSK OUTPUT + MOVSI RC,[SIXBIT /OUTPUT BLOCK TOO LARGE DEVICE@/] + JRST ERRFIN + +R1BDMP: SETCM CS,R1BCNT + JUMPE CS,R1BI + HRLZS C,CS + HRR C,R1BLOC + HRRI C,-1(C) + MOVEM C,R1BCHK + PUSHJ PP,PTPBIN + HRRI CS,R1BBLK +R1BDM1: MOVE C,0(CS) + ADDM C,R1BCHK + PUSHJ PP,PTPBIN + AOBJN CS,R1BDM1 + MOVE C,R1BCHK + PUSHJ PP,PTPBIN +R1BI: SETOM R1BCNT + PUSH PP,LOCO + POP PP,R1BLOC + POPJ PP, + +ROUT6: CAME CS,RIMLOC + PUSHJ PP,R1BDMP + AOS C,R1BCNT + MOVEM AC0,R1BBLK(C) + AOS LOCO + CAIN C,.R1B-1 + PUSHJ PP,R1BDMP + AOS RIMLOC + POPJ PP, + + + READ0: PUSHJ PP,EOT ;END OF TAPE + +READ: SOSGE IBUF+2 ;BUFFER EMPTY? + JRST READ3 ;YES +READ1: ILDB C,IBUF+1 ;PLACE CHARACTER IN C + MOVE CS,@IBUF+1 ;CHECK FOR SEQUENCE NUMBER + TRNN CS,1 + JRST READ1A + CAIN CS,1 ;CHECK FOR SPECIAL + MOVE CS,[<ASCII/ />+1] + MOVEM CS,SEQNO + MOVEM CS,SEQNO2 + MOVNI CS,4 + ADDM CS,IBUF+2 ;ADJUST WORD COUNT +REPEAT 4,< IBP IBUF+1> ;SKIP SEQ NO + PUSHJ PP,READ ;AND THE TAB + JRST READ ;GET NEXT CHARACTER + +READ1A: JUMPE C,READ ;IGNORE NULL + CAIN C,32 ;IF IT'S A "^Z" + MOVEI C,LF ;TREAT IT AS A "LF" + CAIE C,37 ;CONTROL _ + POPJ PP, + MOVEI C,"^" ;MAKE CONTROL-SHIFT _ VISIBLE + PUSHJ PP,RSW2 + MOVEI C,"_" + PUSHJ PP,RSW2 +READ2: PUSHJ PP,READ ;YES, TEST FOR LINE FEED + PUSHJ PP,RSW2 ;LIST IN ANY EVENT + CAIG C,FF ;IS IT ONE OF + CAIGE C,LF ;LF, VT, OR FF? + JRST READ2 ;NO + PUSHJ PP,OUTIM1 ;YES, DUMP THE LINE + JRST READ ;RETURN NEXT CHARACTER + +READ3: IN CHAR,0 ;GET NEXT BUFFER + JRST READ ;NO ERRORS + GETSTS CHAR,C + TRNN C,ERRBIT!2000 ;ERRORS? + JRST READ0 ;EOF + MOVE AC0,INDEV + MOVSI RC,[SIXBIT/ INPUT PHYSICAL END OF TAPE DEVICE@/] + TRNE C,2000 + JRST ERRFIN ;E-O-T + MOVSI RC,[SIXBIT /MONITOR DETECTED SOFTWARE INPUT ERROR DEVICE@/] + TRNE C,IOIMPM ;IMPROPER MODE? + JRST ERRFIN ;YES + MOVSI RC,[SIXBIT /INPUT DATA ERROR DEVICE@/] + TRNE C,IODERR ;DEVICE DATA ERROR? + JRST ERRFIN ;YES + MOVSI RC,[SIXBIT /INPUT CHECKSUM OR PARITY ERROR DEVICE@/] + TRNN C,IODTER + MOVSI RC,[SIXBIT /INPUT BLOCK TOO LARGE DEVICE@/] + JRST ERRFIN + + OUTAB2: PUSHJ PP,OUTTAB ;PRINT TWO TABS +OUTTAB: MOVEI C,HT +PRINT: CAIE C,CR ;IS THIS A CR? + CAIN C,LF ;OR LF? + JRST OUTCR ;YES, GO PROCESS + CAIN C,FF ;FORM FEED? + JRST OUTFF ;YES, FORCE NEW PAGE + JRST OUTL + +OUTCR: TRNN ER,ERRORS!LPTSW!TTYSW + POPJ PP, + MOVEI C,CR ;CARRIAGE RETURN, LINE FEED + PUSHJ PP,OUTL + SOSGE LPP ;END OF PAGE? + TLO IO,IOPAGE ;YES, SET FLAG + TRCA C,7 ;FORM LINE FEED AND SKIP + +OUTL: TLZN IO,IOPAGE ;NEW PAGE REQUESTED? + JRST OUTC ;NO + JUMP1 OUTC ;YES, BYPASS IF PASS ONE + PUSH PP,C ;SAVE C AND CS + PUSH PP,CS + PUSH PP,ER + TLNN IO,IOMSTR!IOPROG + HRR ER,OUTSW + TLNE IO,IOCREF ;IF DOING CREF OUTPUT NOW + TLNE FR,CREFSW ;AND CREFFING (JUST IN CASE) + JRST .+2 + PUSHJ PP,CLSC3 ;CLOSE IT OUT + HLLM IO,(PP) ;SAVE THIS NEW STATE OF IO + MOVEI C,.LPP + MOVEM C,LPP ;SET NEW COUNTER + MOVEI C,CR + PUSHJ PP,OUTC + MOVEI C,FF + PUSHJ PP,OUTC ;OUTPUT FORM FEED + MOVEI CS,TBUF + PUSHJ PP,OUTAS0 ;OUTPUT TITLE +; MOVEI CS,VBUF +; PUSHJ PP,OUTAS0 ;OUTPUT VERSION + MOVEI CS,DBUF + PUSHJ PP,OUTAS0 ; AND DATE + MOVE C,PAGENO + PUSHJ PP,DNC ;OUTPUT PAGE NUMBER + AOSG PAGEN. ;FIRST PAGE OF THIS NUMBER? + JRST OUTL1 ;YES + MOVEI C,"-" ;NO, PUT OUT MODIFIER + PUSHJ PP,OUTC + MOVE C,PAGEN. + PUSHJ PP,DNC +OUTL1: PUSHJ PP,OUTCR + MOVEI CS,DEVBUF + PUSHJ PP,OUTAS0 + HRRZ CS,SUBTTX ;SWITCH FOR SUB-TITLE + SKIPE 0(CS) ;IS THERE A SUB-TITLE? + PUSHJ PP,OUTTAB ;YES, OUTPUT A TAB + PUSHJ PP,SOUT20 ;OUTPUT ASCII WITH CARRIAGE RETURN + PUSHJ PP,OUTCR + POP PP,ER + POP PP,CS ;RESTORE REGISTERS + POP PP,C + +OUTC: TRNE ER,ERRORS!TTYSW + PUSHJ PP,TYO + TRNN ER,LPTSW + POPJ PP, +OUTLST: SOSG LSTBUF+2 ;BUFFER FULL? + PUSHJ PP,DMPLST ;YES, DUMP IT +COMMENT $ REG DOESN'T LIKE THIS FEATURE ANY MORE 9-5-72 +$ + IDPB C,LSTBUF+1 ;STORE BYTE + POPJ PP, ;EXIT + + PAGE0: PUSHJ PP,STOUTS ;PAGE PSEUDO-OP +OUTFF1: TLNE IO,IOCREF ;CURRENTLY DOING CREF? + TLNE IO,IOPROG ;AND NOT XLISTED? + JRST OUTFF ;NO + HRR ER,OUTSW + PUSHJ PP,CLSCRF + PUSHJ PP,OUTCR + HRRI ER,0 +OUTFF: TLO IO,IOPAGE +OUTFF2: SETOM PAGEN. + AOS PAGENO + POPJ PP, + +TIMOUT: IDIVI 2,^D60*^D1000 +TIMOU1: IDIVI 2,^D60 + PUSH PP,3 ;SAVE MINUTES + PUSHJ PP,OTOD ;STORE HOURS + MOVEI 3,":" ;SEPARATE BY COLON + IDPB 3,CS + POP PP,2 ;STORE MINUTES +OTOD: IDIVI 2,^D10 + ADDI 2,60 ;FORM ASCII + IDPB 2,CS + ADDI 3,60 + IDPB 3,CS + POPJ PP, + +DATOUT: IDIVI 1,^D31 ;GET DAY + ADDI 2,1 + CAIG 2,^D9 ;TWO DIGITS? + ADDI 2,7760*^D10 ;NO, PUT IN SPACE + PUSHJ PP,OTOD ;STORE DAY + IDIVI 1,^D12 ;GET MONTH + MOVE 2,DTAB(2) ;GET MNEMONIC + IDPB 2,CS ;DEPOSIT RIGHT MOST 7 BITS + LSH 2,-7 ;SHIFT NEXT IN + JUMPN 2,.-2 ;DEPOSIT IFIT EXISTS + MOVEI 2,^D64(1) ;GET YEAR + JRST OTOD ;STORE IT + +DTAB: "-NAJ-" + "-BEF-" + "-RAM-" + "-RPA-" + "-YAM-" + "-NUJ-" + "-LUJ-" + "-GUA-" + "-PES-" + "-TCO-" + "-VON-" + "-CED-" + SUBTTL MACHINE INSTRUCTION SEARCH ROUTINES +IFE OPHSH,< +OPTSCH: MOVEI RC,0 + MOVEI ARG,1B^L<OP1END-OP1TOP> ;SET UP INDEX + MOVEI V,1B^L<OP1END-OP1TOP>/2 ;SET UP INCREMENT + +OPT1A: CAMN AC0,OP1TOP(ARG) ;ARE WE POINTING AT SYMBOL? + JRST OPT1D ;YES, GET THE CODE + JUMPE V,POPOUT ;TEST FOR END + CAML AC0,OP1TOP(ARG) ;NO, SHOULD WE MOVE DOWN? + TDOA ARG,V ;NO, INCREMENT +OPT1B: SUB ARG,V ;YES, DECREMENT + ASH V,-1 ;HALVE INCREMENT + CAIG ARG,OP1END-OP1TOP ;ARE WE OUT OF BOUNDS? + JRST OPT1A ;NO, TRY AGAIN + JRST OPT1B ;YES, BRING IT DOWN A PEG +> + +IFN OPHSH,< +OPTSCH: MOVE ARG,AC0 ;GET SIXBIT NAME + TLZ ARG,400000 ;CLEAR SIGN BIT + IDIVI ARG,PRIME ;REM. GOES IN V + CAMN AC0,OP1TOP(V) ;ARE WE POINTING AT SYMBOL? + JRST OPT1D ;YES + SKIPN OP1TOP(V) ;TEST FOR END + POPJ PP, ;SYMBOL NOT FOUND + HLRZ RC,ARG ;SAVE LHS OF QUOTIENT + SKIPA ARG,RC ;GET IT BACK +OPT1A: ADDI ARG,(RC) ;INCREMENT ARG + ADDI V,(ARG) ;QUADRATIC INCREASE TO V + CAIL V,PRIME ;V IS MODULO PRIME + JRST [SUBI V,PRIME + JRST .-1] + CAMN AC0,OP1TOP(V) ;IS THIS IT? + JRST OPT1D ;YES + SKIPE OP1TOP(V) ;END? + JRST OPT1A ;TRY AGAIN + POPJ PP, ;FAILED +> +OPT1D: +IFN OPHSH,< SETZ RC, ;CLEAR RELOCATION + MOVE ARG,V ;GET INDEX IN RIGHT ACC.> + IDIVI ARG,4 ;ARG HAS INDEX USED IN OPTTAB + LDB V,OPTTAB(V) ;V HAS INDEX TO OPTTAB + CAIL V,700 ;PSEUDO-OP OR IO INSTRUCTION? + JRST OPT1G ;YES + ROT V,-^D9 ;LEFT JUSTIFY + HRRI V,OP ;POINT TO BASIC FORMAT +OPT1F: AOS 0(PP) ;SET FOR SKIP EXIT + MOVEI SDEL,%OP ;SET OP-CODE CROSS-REF FLAG + JRST CREF ;TEST AND OUTPUT, AC0=SYMBOL, V=VALUE + +OPT1G: JUMPG AC0,.+3 ;IF ".","$",OR "%" USE TABLE 1 + TLNN AC0,200000 ;PSEUDO-OP OR IO INST., TEST FOR PROPER TABLE + SKIPA V,OP2TAB-700(V) ;2ND TABLE, FIRST LETTER IS "A" TO "O" + MOVE V,OP1TAB-700(V) ;1ST TABLE, ..."P" TO "Z" + JRST OPT1F ;EXIT + +OPTTAB: +IFE OPHSH,< POINT 9,OP1COD-1(ARG),35> + POINT 9,OP1COD (ARG), 8 + POINT 9,OP1COD (ARG),17 + POINT 9,OP1COD (ARG),26 +IFN OPHSH,< POINT 9,OP1COD (ARG),35> + + IFDEF .XCREF,< .XCREF ;DON'T CREF THIS MESS> +IFE OPHSH,< + RELOC .-1 +OP1TOP: + RELOC + + IF1,<N1=0 + DEFINE X <N1=N1+1 ;>> + + IF2, < + N2=^D36 + CC=0 + RELOC OP1COD + RELOC +DEFINE X (SYMBOL,CODE) +<SIXBIT /SYMBOL/ +CC=CC+CODE_<N2=N2-9> +IFE N2, <OUTLIT>> + +DEFINE OUTLIT < + RELOC + +CC + RELOC +N2=^D36+<CC=0>>> + SYN X,XX ;JUST THE SAME MACRO> + +IFN OPHSH,< +DEFINE XX (SB,CD)<> ;A NUL MACRO +OP1TOP: IF1,< BLOCK PRIME> +IF1,<DEFINE X (SB,CD)<>> +IF2,< +DEFINE OPSTOR (RM)<.$'RM=.$'RM+<OPCODE_<9*<3-R&3>>>> + +DEFINE X (SB,CD)< +SXB=<SIXBIT /SB/> +Q=SXB&-1_-1/PRIME +R=SXB&-1_-1-Q*PRIME +H=Q_-22&777 +TRY=1 +OPCODE=CD +ITEM Q,\R +IFL PRIME-TRY,<PRINTX HASH FAILURE>> + +DEFINE ITEM (QT,RM)< +IFN .%'RM,<R=R+H +IFL PRIME-R,<R=R-R/PRIME*PRIME> +H=H+Q_-22&777 +IFGE PRIME-<TRY=TRY+1>,<ITEM Q,\R>> +IFE .%'RM,<.%'RM=SXB +OPSTOR \<R/4>>>> +IF1,< +DEFINE GETSYM (N)<.%'N=0> + +N=0 + XLIST +REPEAT PRIME,<GETSYM \N +N=N+1> +DEFINE GETSYM (N)<.$'N=0> +N=0 +REPEAT <PRIME/4+1>,<GETSYM \N +N=N+1> +> + LIST> + + IFN OPHSH,< ;PUT THE MOST USED OP CODES FIRST +X JRST , 254 +X PUSHJ , 260 +X POPJ , 263 +X PUSH , 261 +X POP , 262 +X AOS , 350 +X ASCIZ , 701 +X CALLI , 047 +X EXTERN, 724 +X INTERN, 744 +X JFCL , 255 +X JSP , 265 +X MOVE , 200 +X MOVEI , 201 +X MOVEM , 202 +X SETZM , 402 +X SIXBIT, 717 +X SOS , 370 +X TLNE , 603 +X TLNN , 607 +X TLO , 661 +X TLZ , 621 +X TLZA , 625 +X TLZE , 623 +X TLZN , 627 +X TRNE , 602 +X TRNN , 606 +X TRZ , 620 +> + X ADD , 270 +X ADDB , 273 +X ADDI , 271 +X ADDM , 272 + +X AND , 404 +X ANDB , 407 +X ANDCA , 410 +X ANDCAB, 413 +X ANDCAI, 411 +X ANDCAM, 412 +X ANDCB , 440 +X ANDCBB, 443 +X ANDCBI, 441 +X ANDCBM, 442 +X ANDCM , 420 +X ANDCMB, 423 +X ANDCMI, 421 +X ANDCMM, 422 +X ANDI , 405 +X ANDM , 406 + +X AOBJN , 253 +X AOBJP , 252 + +X AOJ , 340 +X AOJA , 344 +X AOJE , 342 +X AOJG , 347 +X AOJGE , 345 +X AOJL , 341 +X AOJLE , 343 +X AOJN , 346 + +XX AOS , 350 +X AOSA , 354 +X AOSE , 352 +X AOSG , 357 +X AOSGE , 355 +X AOSL , 351 +X AOSLE , 353 +X AOSN , 356 +X ARG , 320 +IFN IIISW,<X ASCID , 771> +X ASCII , 700 +XX ASCIZ , 701 + +X ASH , 240 +X ASHC , 244 + +X ASUPPR, 705 +X BLKI , 702 +X BLKO , 703 +X BLOCK , 704 + +X BLT , 251 + +X BYTE , 707 + +XX CAI , 300 +X CAIA , 304 +X CAIE , 302 +X CAIG , 307 +X CAIGE , 305 +X CAIL , 301 +X CAILE , 303 +X CAIN , 306 + +X CALL , 040 +XX CALLI , 047 + +XX CAM , 310 +X CAMA , 314 +X CAME , 312 +X CAMG , 317 +X CAMGE , 315 +X CAML , 311 +X CAMLE , 313 +X CAMN , 316 + +XX CLEAR , 400 +XX CLEARB, 403 +XX CLEARI, 401 +XX CLEARM, 402 + +X CLOSE , 070 +X COMMEN, 770 + + +X CONI , 710 +X CONO , 711 +X CONSO , 712 +X CONSZ , 713 + +XX DATA. , 020 + +X DATAI , 714 +X DATAO , 715 +X DEC , 716 +X DEFINE, 717 +X DEPHAS, 720 + +X DFN , 131 + +X DIV , 234 +X DIVB , 237 +X DIVI , 235 +X DIVM , 236 + + +X DPB , 137 +X DPBI , 136 + +X END , 721 + +X ENTER , 077 + +X ENTRY , 722 + +X EQV , 444 +X EQVB , 447 +X EQVI , 445 +X EQVM , 446 + +X EXCH , 250 + +X EXP , 723 +XX EXTERN, 724 + +X FAD , 140 +X FADB , 143 +X FADL , 141 +X FADM , 142 + +X FADR , 144 +X FADRB , 147 +X FADRI , 145 +X FADRM , 146 + +X FDV , 170 +X FDVB , 173 +X FDVL , 171 +X FDVM , 172 + +X FDVR , 174 +X FDVRB , 177 +X FDVRI , 175 +X FDVRM , 176 + +XX FIN. , 021 + + +X FMP , 160 +X FMPB , 163 +X FMPL , 161 +X FMPM , 162 + + X FMPR , 164 +X FMPRB , 167 +X FMPRI , 165 +X FMPRM , 166 + +X FSB , 150 +X FSBB , 153 +X FSBL , 151 +X FSBM , 152 + +X FSBR , 154 +X FSBRB , 157 +X FSBRI , 155 +X FSBRM , 156 + +X FSC , 132 + +X GETSTS, 062 + + X HALT , 725 +X HISEG , 706 + +X HLL , 500 +X HLLE , 530 +X HLLEI , 531 +X HLLEM , 532 +X HLLES , 533 +X HLLI , 501 +X HLLM , 502 +X HLLO , 520 +X HLLOI , 521 +X HLLOM , 522 +X HLLOS , 523 +X HLLS , 503 +X HLLZ , 510 +X HLLZI , 511 +X HLLZM , 512 +X HLLZS , 513 + +X HLR , 544 +X HLRE , 574 +X HLREI , 575 +X HLREM , 576 +X HLRES , 577 +X HLRI , 545 +X HLRM , 546 +X HLRO , 564 +X HLROI , 565 +X HLROM , 566 +X HLROS , 567 +X HLRS , 547 +X HLRZ , 554 +X HLRZI , 555 +X HLRZM , 556 +X HLRZS , 557 + + X HRL , 504 +X HRLE , 534 +X HRLEI , 535 +X HRLEM , 536 +X HRLES , 537 +X HRLI , 505 +X HRLM , 506 +X HRLO , 524 +X HRLOI , 525 +X HRLOM , 526 +X HRLOS , 527 +X HRLS , 507 +X HRLZ , 514 +X HRLZI , 515 +X HRLZM , 516 +X HRLZS , 517 + +X HRR , 540 +X HRRE , 570 +X HRREI , 571 +X HRREM , 572 +X HRRES , 573 +X HRRI , 541 +X HRRM , 542 +X HRRO , 560 +X HRROI , 561 +X HRROM , 562 +X HRROS , 563 +X HRRS , 543 +X HRRZ , 550 +X HRRZI , 551 +X HRRZM , 552 +X HRRZS , 553 + +X IBP , 133 + +X IDIV , 230 +X IDIVB , 233 +X IDIVI , 231 +X IDIVM , 232 + +X IDPB , 136 + +X IF1 , 726 +X IF2 , 727 +X IFB , 730 +X IFDEF , 731 +X IFDIF , 732 +X IFE , 733 +X IFG , 734 +X IFGE , 735 +X IFIDN , 736 +X IFL , 737 +X IFLE , 740 +X IFN , 741 +X IFNB , 742 +X IFNDEF, 743 + +X ILDB , 134 + +X IMUL , 220 +X IMULB , 223 +X IMULI , 221 +X IMULM , 222 + +X IN , 056 +XX IN. , 016 +X INBUF , 064 +XX INF. , 026 +X INIT , 041 +X INPUT , 066 + +XX INTERN, 744 + +X IOR , 434 +X IORB , 437 +X IORI , 435 +X IORM , 436 + + +X IOWD , 745 +X IRP , 746 +X IRPC , 747 +X JCRY , 750 +X JCRY0 , 751 +X JCRY1 , 752 +X JEN , 753 + +XX JFCL , 255 + +X JFFO , 243 +X JFOV , 765 +X JOV , 754 + +X JRA , 267 +XX JRST , 254 + +X JRSTF , 755 + +X JSA , 266 +XX JSP , 265 +X JSR , 264 + +XX JUMP , 320 +XX JUMPA , 324 +X JUMPE , 322 +X JUMPG , 327 +X JUMPGE, 325 +X JUMPL , 321 +X JUMPLE, 323 +X JUMPN , 326 + +X LALL , 756 + +X LDB , 135 +X LDBI , 134 + + +X LIST , 757 +X LIT , 760 +X LOC , 761 + +X LOOKUP, 076 + +X LSH , 242 +X LSHC , 246 +X MLOFF , 767 +X MLON , 766 +XX MOVE , 200 +XX MOVEI , 201 +XX MOVEM , 202 +X MOVES , 203 +X MOVM , 214 +X MOVMI , 215 +X MOVMM , 216 +X MOVMS , 217 +X MOVN , 210 +X MOVNI , 211 +X MOVNM , 212 +X MOVNS , 213 +X MOVS , 204 +X MOVSI , 205 +X MOVSM , 206 +X MOVSS , 207 + + +X MTAPE , 072 +XX MTOP. , 024 + +X MUL , 224 +X MULB , 227 +X MULI , 225 +X MULM , 226 +XX NLI. , 031 +XX NLO. , 032 + +X NOSYM , 762 + + X OCT , 763 +X OPDEF , 764 + +X OPEN , 050 + +X OR , 434 +X ORB , 437 +X ORCA , 454 +X ORCAB , 457 +X ORCAI , 455 +X ORCAM , 456 +X ORCB , 470 +X ORCBB , 473 + +X ORCBI , 471 +X ORCBM , 472 +X ORCM , 464 +X ORCMB , 467 +X ORCMI , 465 +X ORCMM , 466 +X ORI , 435 +X ORM , 436 + +X OUT , 057 +XX OUT. , 017 +X OUTBUF, 065 +XX OUTF. , 027 +X OUTPUT, 067 + + X PAGE , 700 +X PASS2 , 701 +X PHASE , 702 +X POINT , 703 + +XX POP , 262 +XX POPJ , 263 + +X PRGEND, 714 +X PRINTX, 704 +X PURGE , 705 + +XX PUSH , 261 +XX PUSHJ , 260 + +X RADIX , 706 +X RADIX5, 707 + +X RELEAS, 071 + +X RELOC , 710 +X REMARK, 711 + +X RENAME, 055 + +X REPEAT, 712 + +XX RESET., 015 +X RIM , 715 +X RIM10 , 735 +X RIM10B, 736 + +X ROT , 241 +X ROTC , 245 + +X RSW , 716 +XX RTB. , 022 +X SALL , 720 +IFN UNIVR,<X SEARCH, 721> + +X SETA , 424 +X SETAB , 427 +X SETAI , 425 +X SETAM , 426 +X SETCA , 450 +X SETCAB, 453 +X SETCAI, 451 +X SETCAM, 452 +X SETCM , 460 +X SETCMB, 463 +X SETCMI, 461 +X SETCMM, 462 +X SETM , 414 +X SETMB , 417 +X SETMI , 415 +X SETMM , 416 +X SETO , 474 +X SETOB , 477 +X SETOI , 475 +X SETOM , 476 +X SETSTS, 060 +X SETZ , 400 +X SETZB , 403 +X SETZI , 401 +XX SETZM , 402 + +XX SIXBIT, 717 + +XX SKIP , 330 +X SKIPA , 334 +X SKIPE , 332 +X SKIPG , 337 +X SKIPGE, 335 +X SKIPL , 331 +X SKIPLE, 333 +X SKIPN , 336 + +XX SLIST., 025 + +X SOJ , 360 +X SOJA , 364 +X SOJE , 362 +X SOJG , 367 +X SOJGE , 365 +X SOJL , 361 +X SOJLE , 363 +X SOJN , 366 + +XX SOS , 370 +X SOSA , 374 +X SOSE , 372 +X SOSG , 377 +X SOSGE , 375 +X SOSL , 371 +X SOSLE , 373 +X SOSN , 376 + +X SQUOZE, 707 + +X STATO , 061 +X STATUS, 062 +X STATZ , 063 + +X STOPI , 722 + +X SUB , 274 +X SUBB , 277 +X SUBI , 275 +X SUBM , 276 + +IF2,<IFE OPHSH,<SUBTL:>> +X SUBTTL, 723 +X SUPPRE, 713 +X SYN , 724 +X TAPE , 725 + + X TDC , 650 +X TDCA , 654 +X TDCE , 652 +X TDCN , 656 +X TDN , 610 +X TDNA , 614 +X TDNE , 612 +X TDNN , 616 +X TDO , 670 +X TDOA , 674 +X TDOE , 672 +X TDON , 676 +X TDZ , 630 +X TDZA , 634 +X TDZE , 632 +X TDZN , 636 + +X TITLE , 726 + +X TLC , 641 +X TLCA , 645 +X TLCE , 643 +X TLCN , 647 +X TLN , 601 +X TLNA , 605 +XX TLNE , 603 +XX TLNN , 607 +XX TLO , 661 +X TLOA , 665 +X TLOE , 663 +X TLON , 667 +XX TLZ , 621 +XX TLZA , 625 +XX TLZE , 623 +XX TLZN , 627 + + X TRC , 640 +X TRCA , 644 +X TRCE , 642 +X TRCN , 646 +X TRN , 600 +X TRNA , 604 +XX TRNE , 602 +XX TRNN , 606 +X TRO , 660 +X TROA , 664 +X TROE , 662 +X TRON , 666 +XX TRZ , 620 +X TRZA , 624 +X TRZE , 622 +X TRZN , 626 + +X TSC , 651 +X TSCA , 655 +X TSCE , 653 +X TSCN , 657 +X TSN , 611 +X TSNA , 615 +X TSNE , 613 + +X TSNN , 617 +X TSO , 671 +X TSOA , 675 +X TSOE , 673 +X TSON , 677 +X TSZ , 631 +X TSZA , 635 +X TSZE , 633 +X TSZN , 637 +X TTCALL, 051 +X TWOSEG, 731 +X UFA , 130 +X UGETF , 073 +X UJEN , 100 +IFN UNIVR,<X UNIVER, 737> +X USETI , 074 +X USETO , 075 + +X VAR , 727 + +XX WTB. , 023 + +X XALL , 732 + +X XCT , 256 + +X XLIST , 733 + +X XOR , 430 +X XORB , 433 +X XORI , 431 +X XORM , 432 + +X XPUNGE, 730 +X XWD , 734 + +X Z , 000 + +X .CREF , 740 +X .HWFRM, 742 +X .MFRMT, 743 +X .XCREF, 741 + + + IFN OPHSH,< ;NO-OPS, OLD MNEMONICS,F4 UUOS +X CAI , 300 +X CAM , 310 +X CLEAR , 400 +X CLEARB, 403 +X CLEARI, 401 +X CLEARM, 402 +X JUMP , 320 +X JUMPA , 324 +X SKIP , 330 +X RESET., 015 +X IN. , 016 +X OUT. , 017 +X DATA. , 020 +X FIN. , 021 +X RTB. , 022 +X WTB. , 023 +X MTOP. , 024 +X SLIST., 025 +X INF. , 026 +X OUTF. , 027 +X NLI. , 031 +X NLO. , 032 +> + IFE OPHSH,< +IF1, < BLOCK N1> +OP1END: -1B36 +OP1COD: BLOCK N1/4 + CC> +IFN OPHSH,< +IF2,< +DEFINE SETVAL (N)<EXP .%'N +PURGE .%'N> +N=0 +XLIST +REPEAT PRIME,<SETVAL \N +N=N+1> +LIST +> +OP1COD: IF1,< BLOCK <PRIME/4+1>> +IF2,< +DEFINE SETVAL (N)<EXP .$'N +PURGE .$'N> +N=0 +XLIST +REPEAT <PRIME/4+1>,<SETVAL \N +N=N+1> +> +LIST> + +IFDEF .CREF,< .CREF ;START CREFFING AGAIN> + SUBTTL PERMANENT SYMBOLS +SYMNUM: EXP LENGTH/2 ;NUMBER OF PERMANENT SYMBOLS +DEFINE P (A,B)< + SIXBIT /A/ + XWD SYMF!NOOUTF,B> + +P @, 0(SUPRBT) +P ??????, 0(SUPRBT) + +LENGTH= .-SYMNUM-1 ;LENGTH OF INITIAL SYMBOLS + +PRMTBL: ;PERMANENT SYMBOLS +P ADC, 24 +P APR, 0 +P CCI, 14 +P CDP, 110 +P CDR, 114 +P CPA, 0 +P CR, 150 +P DC, 200 +P DCSA, 300 +P DCSB, 304 +P DF, 270 +P DIS, 130 +P DLS, 240 +P DPC, 250 +P DSK, 170 +P DTC, 320 +P DTS, 324 +P LPT, 124 +P MDF, 260 +P MTC, 220 +P MTM, 230 +P MTS, 224 +P PAG, 10 +P PI, 4 +P PLT, 140 +P PTP, 100 +P PTR, 104 + +P TMC, 340 +P TMS, 344 +P TTY, 120 +P UTC, 210 +P UTS, 214 +IFE LNSSW,< XLIST > +IFN LNSSW,< ;SPECIAL DEVICES FOR PEPR +P .A,550 +P .AB,434 +P .ANG,440 +P .B,554 +P .BITE,470 +P .FA,564 +P .GAIN,520 +P .GATE,444 +P .IA,560 +P .INC,514 +P .LC,474 +P .LG,570 +P .PEPR,400 +P .RG,574 +P .SCON,430 +P .STAT,410 +P .TC,500 +P .TED,540 +P .THR,544 +P .TRK,404 +P .VIEW,524> + LIST +PRMEND: ;END OF PERMANENT SYMBOLS + + OPDEF ZL [Z LITF] ;INVALID IN LITERALS + OPDEF ZA [Z ADDF] ;INVALID IN ADDRESSES + OPDEF ZAL [Z ADDF!LITF] + +OP1TAB: + + ZA PAGE0 ;PAGE + ZAL PASS20 ;PASS2 + ZAL PHASE0 ;PHASE + Z POINT0 ;POINT + ZA PRNTX0 ;PRINTX + ZA PURGE0 ;PURGE + ZA RADIX0 ;RADIX + Z RADX50 ;RADIX50,SQUOZE + ZAL LOC0 (1) ;RELOC + ZAL REMAR0 ;REMARK + ZA REPEA0 ;REPEAT + ZA SUPRE0 ;SUPRESS + ZAL PSEND0 ;PRGEND + ZAL RIM0 (RIMSW) ;RIM + DATAI 0,IOP ;RSW + Z ASCII0 (1) ;SIXBIT + ZAL IOSET (IOPALL!IOSALL) ;SALL +IFN UNIVR,< ZAL SERCH0 ;SEARCH> +IFE UNIVR,< Z 0> + ZA STOPI0 ;STOPI + ZA SUBTT0 (Z (POINT 7,,)) ;SUBTTL + ZA SYN0 ;SYN + ZAL TAPE0 ;TAPE + ZA TITLE0 (Z (POINT 7,,)) ;TITLE + ZAL VAR0 ;VAR + + Z XPUNG0 ;XPUNGE + ZAL TWSEG0 ;TWOSEGMENTS + ZAL XALL0 (IOPALL) ;XALL + ZAL IOSET (IOPROG) ;XLIST + Z XWD0 ;XWD + ZAL RIM0 (RIM1SW) ;RIM10 + ZAL RIM0 (R1BSW) ;RIM10B +IFN UNIVR,< ZA UNIV0 (Z (POINT 7,,)) ;UNIVERSAL> +IFE UNIVR,< Z 0 ;UNIVERSAL> + ZAL IORSET (IONCRF) ;.CREF + ZAL IOSET (IONCRF) ;.XCREF + ZA OFFORM ;.HWFRMT + ZA ONFORM ;.MFRMT + OP2TAB: + + Z ASCII0 (0) ;ASCII + Z ASCII0 (1B18) ;ASCIZ + BLKI IOP ;BLKI + BLKO IOP ;BLKO + ZAL BLOCK0 ;BLOCK + ZA SUPRSA ;ASUPPRESS + ZAL HISEG0 ;HISEG + Z BYTE0 ;BYTE + CONI IOP ;CONI + CONO IOP ;CONO + CONSO IOP ;CONSO + CONSZ IOP ;CONSZ + DATAI IOP ;DATAI + DATAO IOP ;DATAO + Z OCT0 (^D10) ;DEC + ZA DEFIN0 ;DEFINE + + ZAL DEPHA0 ;DEPHASE + ZAL END0 ;END + ZA INTER0 (INTF!ENTF) ;ENTRY + Z EXPRES ;EXP + ZA EXTER0 ;EXTERN + JRST 4,OP ;HALT + TLNN FR,IFPASS ;IF1 + TLNE FR,IFPASS ;IF2 + + TRNE AC0,IFB0 ;IFB + TLNE ARG,IFDEF0 ;IFDEF + Z IFIDN0 (0) ;IFDIF + SKIPE IF ;IFE + SKIPG IF ;IFG + SKIPGE IF ;IFGE + Z IFIDN0 (1) ;IFIDN + SKIPL IF ;IFL + + SKIPLE IF ;IFLE + SKIPN IF ;IFN + TRNN AC0,IFB0 ;IFNB + TLNN ARG,IFDEF0 ;IFNDEF + ZA INTER0 (INTF) ;INTERN + Z IOWD0 ;IOWD + Z IRP0 (0) ;IRP + Z IRP0 (400000) ;IRPC + + JFCL 6,OP ;JCRY + JFCL 4,OP ;JCRY0 + JFCL 2,OP ;JCRY1 + JRST 12,OP ;JEN + JFCL 10,OP ;JOV + JRST 2,OP ;JRSTF + ZAL IORSET (IOPALL!IOSALL) ;LALL + ZAL IORSET (IOPROG) ;LIST + ZAL LIT0 ;LIT + ZAL LOC0 (0) ;LOC + ZA OFFSYM ;NOSYM + Z OCT0 (^D8) ;OCT + ZA OPDEF0 ;OPDEF + JFCL 1,OP ;JFOV + ZA ONML ;MLON + ZA OFFML ;MLOFF + Z ASCII0 (3B19) ;COMMENT +IFN IIISW,< + Z ASCII0 (5B20) ;ASCID> + +REPEAT 0,<CALTBL: + ;USER DEFINED CALLI'S GO HERE + SIXBIT /LIGHTS/ ;-1 +CALLI0: SIXBIT /RESET/ ; 0 + SIXBIT /DDTIN/ ; 1 + SIXBIT /SETDDT/ ; 2 + SIXBIT /DDTOUT/ ; 3 + SIXBIT /DEVCHR/ ; 4 + SIXBIT /DDTGT/ ; 5 + SIXBIT /GETCHR/ ; 6 + SIXBIT /DDTRL/ ; 7 + SIXBIT /WAIT/ ;10 + SIXBIT /CORE/ ;11 + SIXBIT /EXIT/ ;12 + SIXBIT /UTPCLR/ ;13 + SIXBIT /DATE/ ;14 + SIXBIT /LOGIN/ ;15 + SIXBIT /APRENB/ ;16 + SIXBIT /LOGOUT/ ;17 + SIXBIT /SWITCH/ ;20 + SIXBIT /REASSI/ ;21 + SIXBIT /TIMER/ ;22 + SIXBIT /MSTIME/ ;23 + SIXBIT /GETPPN/ ;24 + SIXBIT /TRPSET/ ;25 + SIXBIT /TRPJEN/ ;26 + SIXBIT /RUNTIM/ ;27 + SIXBIT /PJOB/ ;30 + SIXBIT /SLEEP/ ;31 + SIXBIT /SETPOV/ ;32 + SIXBIT /PEEK/ ;33 + SIXBIT /GETLIN/ ;34 + SIXBIT /RUN/ ;35 + SIXBIT /SETUWP/ ;36 + SIXBIT /REMAP/ ;37 + SIXBIT /GETSEG/ ;40 + SIXBIT /GETTAB/ ;41 + SIXBIT /SPY/ ;42 + SIXBIT /SETNAM/ ;43 + SIXBIT /TMPCOR/ ;44 + SIXBIT /DSKCHR/ ;45 + SIXBIT /SYSSTR/ ;46 + SIXBIT /JOBSTR/ ;47 + SIXBIT /STRUUO/ ;50 + SIXBIT /SYSPHY/ ;51 + SIXBIT /FRECHN/ ;52 + SIXBIT /DEVTYP/ ;53 + SIXBIT /DEVSTS/ ;54 + SIXBIT /DEVPPN/ ;55 + SIXBIT /SEEK/ ;56 + SIXBIT /RTTRP/ ;57 + SIXBIT /LOCK/ ;60 + SIXBIT /JOBSTS/ ;61 + SIXBIT /LOCATE/ ;62 + SIXBIT /WHERE/ ;63 + SIXBIT /DEVNAM/ ;64 + SIXBIT /CTLJOB/ ;65 + SIXBIT /GOBSTR/ ;66 + 0 ;67 + 0 ;70 + SIXBIT /HPQ/ ;71 + SIXBIT /HIBER/ ;72 + SIXBIT /WAKE/ ;73 + SIXBIT /CHGPPN/ ;74 + SIXBIT /SETUUO/ ;75 + SIXBIT /DEVGEN/ ;76 + SIXBIT /OTHUSR/ ;77 + SIXBIT /CHKACC/ ;100 + SIXBIT /DEVSIZ/ ;101 + SIXBIT /DAEMON/ ;102 + SIXBIT /JOBPEK/ ;103 + SIXBIT /ATTACH/ ;104 + SIXBIT /DAEFIN/ ;105 + SIXBIT /FRCUUO/ ;106 + SIXBIT /DEVLNM/ ;107 + SIXBIT /PATH./ ;110 + +CALNTH==.-CALTBL +NEGCAL==CALLI0-CALTBL ;NUMBER OF NEGATIVE CALLI'S +> +TTCTBL: SIXBIT /INCHRW/ ; 0 INPUT A CHAR. AND WAIT + SIXBIT /OUTCHR/ ; 1 OUTPUT A CHAR. + SIXBIT /INCHRS/ ; 2 INPUT A CHAR. AND SKIP + SIXBIT /OUTSTR/ ; 3 OUTPUT A STRING + SIXBIT /INCHWL/ ; 4 INPUT CHAR., WAIT, LINE MODE + SIXBIT /INCHSL/ ; 5 INPUT CHAR., SKIP, LINE MODE + SIXBIT /GETLCH/ ; 6 GET LINE CHARACTERISTICS + SIXBIT /SETLCH/ ; 7 SET LINE CHARACTERISTICS + SIXBIT /RESCAN/ ;10 RESET INPUT STREAM TO COMMAND + SIXBIT /CLRBFI/ ;11 CLEAR TYPEIN BUFFER + SIXBIT /CLRBFO/ ;12 CLEAR TYPEOUT BUFFER + SIXBIT /SKPINC/ ;13 SKIPS IF A CHAR. CAN BE INPUT + SIXBIT /SKPINL/ ;14 SKIPS IF A LINE CAN BE INPUT + SIXBIT /IONEOU/ ;15 OUTPUT AS AN IMAGE CHAR. + +TTCLTH==.-TTCTBL + SUBTTL USER-DEFINED SYMBOL SEARCH ROUTINES +MSRCH: PUSHJ PP,SEARCH ;PERFORM GENERAL SEARCH + POPJ PP, ;NOT FOUND, EXIT + JUMPG ARG,MSRCH2 ;SKIP-EXIT AND CROSS-REF IF FOUND + CAME AC0,1(SX) ;WE ARE LOOKING AT SYMBOL, TRY ONE ABOVE + POPJ PP, ;NO, EXIT + ADDI SX,2 ;YES, POINT TO IT + PUSHJ PP,SRCH5 ;LOAD REGISTERS +MSRCH2: AOSA 0(PP) ;SET SKIP-EXIT +QSRCH: JUMPL ARG,SSRCH3 ;BRANCH IF OPERAND + MOVEI SDEL,%MAC ;SET OPERATOR FLAG + TLZE IO,DEFCRS ;IS IT A DEFINITION? + MOVEI SDEL,%DMAC ;YES + JRST CREF ;CROSS-REF AND EXIT + +SSRCH: PUSHJ PP,SEARCH ;PERFORM GENERAL SEARCH + POPJ PP, ;NOT FOUND, EXIT + JUMPL ARG,SSRCH2 ;SKIP-EXIT AND CROSS-REF IF FOUND +SSRCH1: CAME AC0,-3(SX) ;WE ARE LOOKING AT MACRO, LOOK ONE SLOT BELOW + POPJ PP, ;NO DICE, EXIT + SUBI SX,2 ;YES, POINT TO IT + PUSHJ PP,SRCH5 ;LOAD REGISTERS +SSRCH2: AOS 0(PP) ;SET FOR SKIP-EXIT +SSRCH3: MOVEI SDEL,%SYM ;SET OPERAND FLAG + +CREF: TLNN IO,IONCRF ;NO CREFFING FOR THIS SYMBOL? + TLNE FR,P1!CREFSW ;PASS ONE OR CROSS-REF SUPPRESSION? + POPJ PP, ;YES, EXIT + EXCH SDEL,C ;PUT FLAG IN C, SACE C + PUSH PP,CS + TLNE IO,IOCREF ;HAVE WE PUT OUT THE 177,102 + JRST CREF3 ;YES + PUSH PP,C ;START OF CREF DATA + + REPEAT 0,< ;NEEDS CHANGE TO CREF + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,102 + PUSHJ PP,OUTLST + TLO IO,IOCREF ;WE NOW ARE IN THAT STATE + POP PP,C ;WE HAVE NOW +CREF3: JUMPE C,NOFLG ;JUST CLOSE IT + PUSHJ PP,OUTLST ;TYPE OF SYMBOL (%MAC,%DMAC,%SYM) + MOVSI CS,770000 ;COUNT CHRS + TDZA C,C ;STARTING AT 0 + LSH CS,-6 ;TRY NEXT + TDNE AC0,CS ;IS THAT ONE THERE? + AOJA C,.-2 ;YES + PUSHJ PP,OUTLST ;PRINT NUMBER OF SYMBOL CONSTITUENTS + MOVE CS,AC0 + +CREF2: MOVEI C,0 + LSHC C,6 + ADDI C,40 + PUSHJ PP,OUTLST ;THE ASCII SYMBOL + JUMPN CS,CREF2 + MOVEI C,%DSYM + TLZE IO,DEFCRS + PUSHJ PP,OUTLST ;MARK IT AS A DEFINING OCCURENCE +NOFLG: MOVE C,SDEL + POP PP,CS + POPJ PP, + +CLSCRF: TRNN ER,LPTSW + POPJ PP, ;LEAVE IF WE SHOULD NOT BE PRINTING +CLSCR2: MOVEI C,177 + PUSHJ PP,PRINT + TLZE IO,IOCREF ;WAS IT OPEN? + JRST CLSCR1 ;YES, JUST CLOSE IT + MOVEI C,102 ;NO, OPEN IT FIRST + PUSHJ PP,OUTLST ;MARK BEGINNING OF CREF DATA + MOVEI C,177 + PUSHJ PP,OUTLST +CLSCR1: MOVEI C,103 + JRST OUTLST ;MARK END OF CREF DATA + +CLSC3: TLZ IO,IOCREF + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,104 + JRST OUTLST ;177,104 CLOSES IT FOR NOW +> ;END OF REPEAT 0 + REPEAT 1,< ;WORKS WITH EXISTING CREF + TLNE IO,IOPAGE + PUSHJ PP,CRFHDR ;GET CORRECT SUBTTL + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,102 + PUSHJ PP,OUTLST + TLO IO,IOCREF ;WE NOW ARE IN THAT STATE + POP PP,C ;WE HAVE NOW +CREF3: PUSHJ PP,OUTLST ;TYPE OF SYMBOL (%MAC,%DMAC,%SYM) + MOVSI CS,770000 ;COUNT CHRS + TDZA C,C ;STARTING AT 0 + LSH CS,-6 ;TRY NEXT + TDNE AC0,CS ;IS THAT ONE THERE? + AOJA C,.-2 ;YES + PUSHJ PP,OUTLST ;PRINT NUMBER OF SYMBOL CONSTITUENTS + MOVE CS,AC0 + +CREF2: MOVEI C,0 + LSHC C,6 + ADDI C,40 + PUSHJ PP,OUTLST ;THE ASCII SYMBOL + JUMPN CS,CREF2 + MOVEI C,%DSYM + TLZE IO,DEFCRS + PUSHJ PP,OUTLST ;MARK IT AS A DEFINING OCCURENCE + MOVE C,SDEL + POP PP,CS + POPJ PP, + +IFN OPHSH,< +SUBTL: SIXBIT /SUBTTL/> +CRFHDR: CAME AC0,SUBTL ;IS FIRST SYMBOL "SUBTTL" + JRST CRFHD1 ;NO + HLLZ AC0,V + PUSHJ PP,SUBTT0 ;UPDATE SUBTTL + MOVE AC0,SUBTL ;RESTORE ARG. + MOVEI V,CPOPJ +CRFHD1: MOVEI C,0 + JRST OUTL + +CLSC3: +CLSCRF: TRNN ER,LPTSW + POPJ PP, ;LEAVE IF WE SHOULD NOT BE PRINTING +CLSCR2: TLZE IO,IOCREF ;FINISH UP LINE + JRST CLSCR1 + MOVEI C,0 + TLNE IO,IOPAGE ;NEW PAGE? + PUSHJ PP,OUTL ;YES,GIVE IT A ROUSING SENDOFF! + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,102 + PUSHJ PP,OUTLST ;MARK BEGINNING OF CREF DATA +CLSCR1: MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,103 + JRST OUTLST ;MARK END OF CREF DATA +> ;END OF REPEAT 1 + SEARCH: HLRZ SX,SRCHX + HRRZ SDEL,SRCHX + +SRCH1: CAML AC0,-1(SX) + JRST SRCH3 +SRCH2: SUB SX,SDEL + LSH SDEL,-1 + CAMG SX,SYMTOP + JUMPN SDEL,SRCH1 + JUMPN SDEL,SRCH2 + SOJA SX,SRCHNO ;NOT FOUND + +SRCH3: CAMN AC0,-1(SX) + JRST SRCH4 ;NORMAL / FOUND EXIT + ADD SX,SDEL + LSH SDEL,-1 + CAMG SX,SYMTOP + JUMPN SDEL,SRCH1 + JUMPN SDEL,SRCH2 + SOJA SX,SRCHNO ;NOT FOUND + +SRCH4: AOS 0(PP) ;SET FOR SKIP EXIT +SRCH5: MOVSI ARG,SUPRBT ;HE IS USING IT, TURN OFF BIT + ANDCAM ARG,(SX) ; IN THE TABLE +SRCH7: MOVE ARG,0(SX) ;FLAG AND VALUE TO ARG + LDB RC,RCPNTR ;POINT 1,ARG,17 + TLNE ARG,LELF ;CHECK LEFT RELOCATE + TLO RC,1 + HRRZ V,ARG + TLNE ARG,SPTR ;CHECK SPECIAL EXTESN POINTER + JRST SRCH6 + TLNE ARG,PNTF + MOVE V,0(ARG) ;36BIT VALUE TO V + JRST SRCHOK + +SRCH6: MOVE V,0(ARG) ;VALUE + MOVE RC,1(ARG) ;AND RELOC + TLNE RC,-2 ;CHECK AND SET EXTPNT + HLLM RC,EXTPNT + TRNE RC,-2 + HRRM RC,EXTPNT + JRST SRCHOK +SRCHNO:IFN UNIVR,<SKIPN UNISCH+1 ;ALLOWED TO SEARCH OTHER TABLES> + POPJ PP, ;NO, JUST RETURN +IFN UNIVR,<AOS V,UNISCH ;GET NEXT INDEX TO TABLE + CAIE V,1 ;FIRST TIME IN + JRST SRCHN1 ;YES, SAVE SYMBOL INFO + HRLM SX,UNISCH ;SAVE SX AND SET FLAG + MOVE ARG,SRCHX ;SEARCH POINTER + MOVEM ARG,UNISHX ;TO A SAFE PLACE + HRR ARG,SYMBOL + HRL ARG,SYMTOP + MOVEM ARG,UNIPTR ;STORE ALSO +SRCHN1: MOVE V,UNISCH(V) ;GET TRUE INDEX + JUMPE V,SRCHKO ;IF ZERO ALL TABLE SCANNED + MOVE ARG,UNISHX(V) ;NEW SRCHX + MOVEM ARG,SRCHX ;SET IT UP + MOVE ARG,UNIPTR(V) ;SYMTOP,,SYMBOL + HRRZM ARG,SYMBOL + HLRZM ARG,SYMTOP + JRST SEARCH ;TRY AGAIN> + +SRCHKO: SETZ ARG, ;CLEAR ARG SO ZERO STORED +SRCHOK: IFN UNIVR,<SKIPN UNISCH ;HAVE WE SEARCH OTHER TABLES> + POPJ PP, ;NO, JUST RETURN +IFN UNIVR,< +SYMBCK: HLRZ SX,UNISCH ;RESTORE SX + SETZM UNISCH ;CLEAR SYMBCK FLAG + PUSH PP,V ;SAVE AN AC + MOVE V,UNISHX ;SRCHX + MOVEM V,SRCHX ;RESTORE ORIGINAL + MOVE V,UNIPTR ;SYMTOP,,SYMBOL + HRRZM V,SYMBOL + HLRZM V,SYMTOP + JUMPE ARG,SRCHK2 ;TOTALLY UNDEFINED + PUSH PP,RC ;SAVE SOME ACCS + PUSH PP,ARG + PUSH PP,EXTPNT + SETZB ARG,EXTPNT ;CLEAR ALL SYMBOL DATA + SETZB RC,V + PUSHJ PP,INSERT ;INSERT SYMBOL IN TABLE + POP PP,EXTPNT ;RESTORE ACCS ETC. + POP PP,ARG + POP PP,RC + MOVEM ARG,(SX) ;SET FLAGS AND VALUE AS IT SHOULD BE +SRCHK2: POP PP,V + POPJ PP, ;RETURN> + + INSERQ: TLNE ARG,UNDF!VARF +INSERZ: SETZB RC,V +INSERT: CAME AC0,-1(SX) ;ARE WE LOOKING AT MATCHING MNEMONIC? + JRST INSRT2 ;NO, JUST INSERT + JUMPL ARG,INSRT1 ;YES, BRANCH IF OPERAND + SKIPL 0(SX) ;OPERATOR, ARE WE LOOKING AT ONE? + JRST UPDATE ;YES, UPDATE + JRST INSRT2 ;NO, INSERT + +INSRT1: SKIPG 0(SX) ;OPERAND, ARE WE LOOKING AT ONE? + JRST UPDATE ;YES, UPDATE + SUBI SX,2 ;NO, MOVE UNDER OPERATOR AND INSERT +INSRT2: MOVE SDEL,SYMBOL + SUBI SDEL,2 + CAMLE SDEL,FREE + JRST INSRT3 + PUSHJ PP,XCEEDS + ADDI SDEL,2000 +INSRT3: MOVEM SDEL,SYMBOL ;MAKE ROOM FOR A TWO WORD ENTRY + HRLI SDEL,2(SDEL) + BLT SDEL,-2(SX) ;PUSH EVERYONE DOWN TWO LOACTIONS + AOS @SYMBOL ;INCREMENT THE SYMBOL COUNT + TLNN RC,-2 ;NEED SPECIAL? + TRNE RC,-2 ;LEFT OR RIGHT EXTERNAL? + JRST INSRT5 ;YES, JUMP + TLNN V,-1 ;SKIP IF V IS A 36BIT VALUE + JRST INSRT4 ;JUMP, ITS A 18BIT VALUE + AOS SDEL,FREE ;36BIT, SO GET A CELL FROM FREE CORE + CAML SDEL,SYMBOL ;MORE CORE NEEDED? + PUSHJ PP,XCEEDS ;YES + HRRI ARG,-1(SDEL) ;POINTER TO ARG + MOVEM V,0(ARG) ;36BIT VALUE TO FREE CORE + TLOA ARG,PNTF ;NOTE THAT ARG IS APOINTER, NOT A 18BIT VALUE + +INSRT4: HRR ARG,V ;18BIT VALUE TO ARG + DPB RC,RCPNTR ;FIX RIGHT RELOCATION + TLNE RC,1 + TLO ARG,LELF ;FIX LEFT RELOCATION +INSRT6: MOVEM ARG,0(SX) ;INSERT FLAGS AND VALUE. + MOVEM AC0,-1(SX) ;INSERT SYMBOL NAME. + PUSHJ PP,SRCHI ;INITILIAZE SRCHX + JRST QSRCH ;EXIT THROUGH CREF + +INSRT5: MOVEI SDEL,2 ;GET TWO CELLS FROM FREE CORE + ADDB SDEL,FREE + CAML SDEL,SYMBOL;MORE CORE NEEDED? + PUSHJ PP,XCEEDS ;YES + MOVEM RC,-1(SDEL) + HRRI ARG,-2(SDEL) ;POINTER TO ARG + MOVEM V,0(ARG) + TLO ARG,SPTR ;SET SPECIAL POINTER, POINTS TO TWO CELLS + JRST INSRT6 + REMOVE: SUBI SX,2 ;MOVE EVERYONE UP TWO LOCATIONS +REMOV1: MOVE 0(SX) + MOVEM 2(SX) ;OVERWRITE THE DELETED SYMBOL + CAME SX,SYMBOL ;SKIP WHEN DONE + SOJA SX,REMOV1 + ADDI SX,2 + MOVEM SX,SYMBOL + SOS 0(SX) ;DECREMENT THE SYMBOL COUNT + +SRCHI: MOVEI AC2,0 ;THIS CODE SETS UP SRCHX + FAD AC2,@SYMBOL + LSH AC2,-^D27 + MOVEI AC1,1000 + LSH AC1,-357(AC2) + HRRM AC1,SRCHX + LSH AC1,1 + ADD AC1,SYMBOL + HRLM AC1,SRCHX + POPJ PP, ;SRCHX=XWD <SYMTBL+LENGTH/2>,LENGTH/4 + + UPDATE: DPB RC,RCPNTR ;FIX RIGHT RELOCATION + TLNE ARG,SPTR ;SKIP IF THERE IS NO SPECIAL POINTER + JRST UPDAT4 ;YES, USE THE TWO CELLS + TLNN RC,-2 ;NEED TO CHANGE + TRNE RC,-2 ;ANY CURRENT EXTERNS? + JRST UPDAT5 ;YES ,JUMP + TLZ ARG,LELF ;CLEAR LELF + TLNE RC,1 ;LEFT RELOCATABLE? + TLO ARG,LELF ;YES, SET THE FLAG + TLNE ARG,PNTF ;WAS THERE A 36BIT VALUE? + JRST UPDAT2 ;YES, USE IT. + TLNE V,-1 ;NO,IS THERE A 36BIT VALUE? + JRST UPDAT1 ;YES, GET A CELL + HRR ARG,V ;NO, USE RH OF ARG +UPDAT3: MOVEM ARG,0(SX) ;OVERWRITE THE ONE IN THE TABLE + POPJ PP, ;AND EXIT + +UPDAT1: AOS SDEL,FREE ;GET ONE CELL + CAML SDEL,SYMBOL ;NEED MORE CORE? + PUSHJ PP,XCEEDS ;YES + HRRI ARG,-1(SDEL) ;POINTER TO ARG + TLO ARG,PNTF ;AND NOTE IT. +UPDAT2: TLNE ARG,EXTF ;IS THERE A EXTERNAL? + JRST UPDAT3 ;YES, - JUST SAVE A LOCATION + MOVEM ARG,0(SX) ;NO, OVERWRITE THE POINTER IN THE TABLE + MOVEM V,0(ARG) ;STORE VALUE AS A 36BIT VALUE + POPJ PP, ;AND EXIT + +UPDAT4: MOVEM ARG,0(SX) ;WE HAVE TWO CELLS, WE USE THEM + MOVEM V,0(ARG) ;SAVE AS 36BIT VALUE + MOVEM RC,1(ARG) ;SAVE RELOCATION BITS + POPJ PP, ;AND EXIT + +UPDAT5: MOVEI SDEL,2 ;THERE IS A EXTERNAL + ADDB SDEL,FREE ;SO WE NEED TWO LOACTIONS + CAML SDEL,SYMBOL ;NEED MORE CORE? + PUSHJ PP,XCEEDS ;YES + MOVEM RC,-1(SDEL) ;SAVE RELOCATION BITS + HRRI ARG,-2(SDEL) ;SAVE THE POINTER IN ARG + MOVEM V,0(ARG) ;SAVE A 36BIT VALUE + TLO ARG,SPTR ;SET SPECIAL PNTR FLAG + TLZ ARG,PNTF ;CLEAR POINTER FLAG + JRST UPDAT3 ;SAVE THE POINTER AND EXIT + + SUBTTL CONSTANTS + + + SUBTTL PHASED CODE + SUBTTL PHASED CODE +LSTFIL: BLOCK 1 + SIXBIT /@/ ;SYMBOL TO STOP PRINTING +TAG: BLOCK 1 + SIXBIT / + @/ +TABI: + BYTE (7) 0, 11, 11, 11, 11 +SEQNO: BLOCK 1 + ASCIZ / / +BININI: EXP B +BINDEV: BLOCK 1 + XWD BINBUF,0 +LSTINI: EXP AL +LSTDEV: BLOCK 1 + XWD LSTBUF,0 +IFN CCLSW,< +NUNINI: EXP DMP +NUNDEV: BLOCK 1 + XWD 0,0 +RPGINI: EXP AL +RPGDEV: BLOCK 1 + XWD 0,CTLBLK +> +INDEVI: EXP A +INDEV: BLOCK 1 + XWD 0,IBUF +DBUF: ASCIZ / PAGE / +VBUF: ASCIZ / MACRO / ;MUST BE LAST LOCATIONS IN BLOCK + BLOCK 3 ;ALLOW FOR LONG TITLE + + SUBTTL STORAGE CELLS + +PASS1I: + +RP: BLOCK 1 + +IFE CCLSW,<CTIBUF: BLOCK 3 +CTOBUF: BLOCK 3 +> +IFN CCLSW,<CTLBUF: BLOCK <CTLSIZ+5>/5 +> +LSTBUF: BLOCK 3 +BINBUF: BLOCK 3 +IBUF: BLOCK 3 +IFN CCLSW,<NUNDIR:> +LSTDIR: BLOCK 4 +BINDIR: BLOCK 4 +INDIR: BLOCK 4 + +ACDELX: ;LEFT HALF +BLKTYP: BLOCK 1 ;RIGHT HALF + +COUTX: BLOCK 1 +COUTY: BLOCK 1 +COUTP: BLOCK 1 +COUTRB: BLOCK 1 +COUTDB: BLOCK ^D18 + +ERRCNT: BLOCK 1 +FREE: BLOCK 1 +IFN RENTSW,<HIGH1: BLOCK 1 +HISNSW: BLOCK 1 +SVTYP3: BLOCK 1 +HMIN: BLOCK 1 ;START OF HIGH SEG. IN TWO SEG. PROG.> +IFBLK: BLOCK .IFBLK +IFBLKA: BLOCK .IFBLK +LADR: BLOCK 1 +NCOLLS: BLOCK 1 +LIMBO: BLOCK 1 +LBUFP: BLOCK 1 +LBUF: BLOCK <.CPL+5>/5 + BLOCK 1 +VARHD: BLOCK 1 +VARHDX: BLOCK 1 + +LITAB: BLOCK 1 +LITABX: BLOCK 1 + BLOCK 1 +LITHD: BLOCK 1 +LITHDX: BLOCK 1 +LITCNT: BLOCK 1 +LITNUM: BLOCK 1 + +LOOKX: BLOCK 1 +NEXT: BLOCK 1 +OUTSW: BLOCK 1 +PDP: BLOCK 1 +RECCNT: BLOCK 1 +SAVBLK: BLOCK RC +SAVERC: BLOCK 1 +SBUF: BLOCK .SBUF/5 +SRCHX: BLOCK 1 +SUBTTX: BLOCK 1 +SVSYM: BLOCK 1 +SYMBOL: BLOCK 1 +SYMTOP: BLOCK 1 + +STPX: BLOCK 1 +STPY: BLOCK 1 +STCODE: BLOCK .STP +STOWRC: BLOCK .STP + +TABP: BLOCK 1 +TCNT: BLOCK 1 ;COUNT OF CHARS. LEFT IN TBUF +TBUF: BLOCK .TBUF/5 +DEVBUF: BLOCK 6 ;STORE NAME.EXT CREATION DATE AND TIME +TYPERR: BLOCK 1 +IONSYM: BLOCK 1 ;-1 SUPRESS LISTING OF SYMBOLS +PRGPTR: BLOCK 1 ;POINTER TO CHAIN OF PRGEND BLOCKS +ENTERS: BLOCK 1 ;-1 WHEN ENTERS HAVE BEEN DONE +IFN UNIVR,<UNIVSN: BLOCK 1 ;-1 WHEN A UNIVERSAL SEEN> + + PASS2I: + +ABSHI: BLOCK 1 +HIGH: BLOCK 1 +IFN RENTSW,<HHIGH: BLOCK 1 ;SAVE BREAK OF HIGH SEG. IN TWO SEG PROG.> +ACDEVX: BLOCK 1 +CPL: BLOCK 1 +CTLSAV: BLOCK 1 +CTLS1: BLOCK 1 +EXTPNT: BLOCK 1 +INTENT: BLOCK 1 +INREP: BLOCK 1 +INDEF: BLOCK 1 +INTXT: BLOCK 1 +INCND: BLOCK 1 +CALNAM: BLOCK 1 +CALPG: BLOCK 1 +CALSEQ: BLOCK 1 +DEFPG: BLOCK 1 +DEFSEQ: BLOCK 1 +LITPG: BLOCK 1 +LITSEQ: BLOCK 1 +REPPG: BLOCK 1 +REPSEQ: BLOCK 1 +TXTPG: BLOCK 1 +TXTSEQ: BLOCK 1 +CNDPG: BLOCK 1 +CNDSEQ: BLOCK 1 +IRPCNT: BLOCK 1 +IRPARG: BLOCK 1 +IRPARP: BLOCK 1 +IRPCF: BLOCK 1 +IRPPOI: BLOCK 1 +IRPSW: BLOCK 1 +LITLVL: BLOCK 1 +LITLBL: BLOCK 1 ;NAME OF LABEL DEFINED INSIDE A LITERAL + +ASGBLK: BLOCK 1 +LOCBLK: BLOCK 1 + +LOCA: BLOCK 1 +LOCO: BLOCK 1 +RELLOC: BLOCK 1 +ABSLOC: BLOCK 1 +LPP: BLOCK 1 +MODA: BLOCK 1 +MODLOC: BLOCK 1 +MODO: BLOCK 1 +IFN CCLSW,<OTBUF: BLOCK 2> +OUTSQ: BLOCK 2 +PAGEN.: BLOCK 1 +PPTEMP: BLOCK 1 +PPTMP1: BLOCK 1 +PPTMP2: BLOCK 1 + +REPCNT: BLOCK 1 +REPEXP: BLOCK 1 +REPPNT: BLOCK 1 +RPOLVL: BLOCK 1 +R1BCNT: BLOCK 1 +R1BCHK: BLOCK 1 +R1BBLK: BLOCK .R1B +R1BLOC: BLOCK 1 +RIMLOC: BLOCK 1 +TAGINC: BLOCK 1 +VECREL: BLOCK 1 +VECTOR: BLOCK 1 +.TEMP: BLOCK 1 ;TEMPORARY STORAGE +IFN UNIVR,<UNISCH: BLOCK .UNIV ;SEARCH TABLE FOR UNIVERSALS> +SQFLG: BLOCK 1 +ARGF: BLOCK 1 +MACENL: BLOCK 1 +MACLVL: BLOCK 1 +MACPNT: BLOCK 1 +WWRXX: BLOCK 1 +RCOUNT: BLOCK 1 ;COUNT OF WORDS STILL TO READ IN LEAF +WCOUNT: BLOCK 1 ;COUNT OF WORDS STILL FREE IN LEAF +PASS2Z: ;ONLY CLEAR TO HERE ON PRGEND +LSTSYM: BLOCK 1 +PAGENO: BLOCK 1 +SEQNO2: BLOCK 1 +PASS2X: + + SUBTTL MULTI-ASSEMBLY STORAGE CELLS + +LSTPGN: BLOCK 1 +HDAS: BLOCK 1 +IFN CCLSW,<EXTMP: BLOCK 1 ;HOLDS EXT OF COMMAND FILE (RH) +SAVFF: BLOCK 1 +CTLBLK: BLOCK 3 +CTIBUF: BLOCK 3 +CTOBUF: BLOCK 3> +MACSIZ: BLOCK 1 ;INITIAL SIZE OF LOW SEG +IFN UNIVR,< +UNISIZ: BLOCK 1 ;TOP OF BUFFERS AND STACKS +UNITOP: BLOCK 1 ;TOP OF UNIVERSAL SYMBOL TABLE +UNIVNO: BLOCK 1 ;NUMBER OF UNIVERSALS SEEN +UNITBL: BLOCK .UNIV ;TABLE OF UNIVERSAL NAMES +UNIPTR: BLOCK .UNIV ;TABLE OF SYMBOL POINTERS +UNISHX: BLOCK .UNIV ;TABLE OF SRCHX POINTERS> + VAR ;CLEAR VARIABLES + +JOBFFI: BLOCK 203*NUMBUF+1 ;INPUT BUFFER PLUS ONE + + END BEG + diff --git a/src/macro.25 b/src/macro.25 new file mode 100644 index 0000000..16d9ecf --- /dev/null +++ b/src/macro.25 @@ -0,0 +1,7051 @@ +;STANFORD ASSEMBLY: + LPTWID==^D120 ;120 CHARACTERS/LINE ON LPT AT STANFORD +TITLE MACRO V.10 +SUBTTL RPG/CMF/JF/PMH/DMN 7-SEPT-71 +;COPYRIGHT 1968,1969,1970,1971, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. + + VMACRO==10 ;VERSION NUMBER + VUPDATE==0 ;DEC UPDATE LEVEL + VEDIT==0 ;EDIT NUMBER + VCUSTOM==0 ;NON-DEC UPDATE LEVEL + + + LOC <JOBVER==137> + <VCUSTOM>B2+<VMACRO>B11+<VUPDATE>B17+VEDIT + RELOC + MLON + +COMMENT * ASSEMBLY FEATURE SWITCHES (ACTION WHEN NON-ZERO) + + SWITCHES ON (NON-ZERO) IN DEC VERSION +CCLSW GIVES RAPID PROGRAM GENERATION FEATURE +FTDISK GIVES DISK FEATURES +RENTSW ASSEMBLE REENTRANT PROGRAMS + + SWITCHES OFF (ZERO) IN DEC VERSION +LNSSW GIVES LNS VERSION +IIISW GIVES III FEATURES +OPHSH GIVES HASH SEARCH OF OPCODES +* + SUBTTL DEFAULT ASSEMBLY SWITCH SETTINGS + + +IFNDEF RENTSW,<RENTSW==0> + +IFNDEF LNSSW,<LNSSW==0> +IFN LNSSW,<FTDISK==0> + +IFNDEF CCLSW,<CCLSW==1> +IFN CCLSW,<FTDISK==1> + +IFNDEF UNIVR,<UNIVR==0> + +IFNDEF FTDISK,<FTDISK==0> + +IFNDEF IIISW,<IIISW==0> + +IFNDEF OPHSH,<OPHSH==0> + + SUBTTL OTHER PARAMETERS + +.PDP== ^D50 ;BASIC PUSH-DOWN POINTER +IFNDEF LPTWID,<LPTWID==^D132> ;DEFAULT WIDTH OF PRINTER +.LPTWD==8*<LPTWID/8> ;USEFUL WIDTH IN MAIN LISTING +.CPL== .LPTWD-^D32 ;WIDTH AVAIABLE FOR TEXT WHEN + ;BINARY IS IN HALFWORD FORMAT +.LPP==^D55 ;LINES/PAGE +.STP== ^D40 ;STOW SIZE +.TBUF== ^D80 ;TITLE BUFFER +.SBUF== ^D80 ;SUB-TITLE BUFFER +.IFBLK==^D20 ;IFIDN COMPARISON BLOCK SIZE +.R1B==^D18 +.UNIV==^D10 ;NUMBER OF UNIVERSAL DEFINITIONS +.LEAF==4 ;SIZE OF BLOCKS IN MACRO TREE + +NCOLS==1 ;NUMBER OF COLUMNS IN SYMBOL TABLE +IFN CCLSW,<IFNDEF CTLSIZ,<CTLSIZ==^D200>> +IFN OPHSH,<IFNDEF PRIME,<PRIME==^D701>> +IFNDEF NUMBUF,< +IFE LNSSW,<NUMBUF==2 ;NUMBER OF INPUT BUFFERS> +IFN LNSSW,<NUMBUF==4 ;DOUBLE BUFFER FOR DOUBLE SIZE DEVICES> +> + +EXTERN JOBREL,JOBSYM,JOBDDT,JOBFF,JOBAPR,JOBSA +IFN CCLSW,< EXTERN JOBERR> + + SALL ;SUPPRESS ALL MACROS + +;SOME ASCII CHARACTERS + +HT==11 +LF==12 +VT==13 +FF==14 +CR==15 +EOL==33 + ;ACCUMULATORS +AC0== 0 +AC1= AC0+1 +AC2= AC1+1 +SDEL= 3 ;SEARCH INCREMENT +SX= SDEL+1 ;SEARCH INDEX +ARG= 5 ;ARGUMENT +V= 6 ;VALUE +C= 7 ;CURRENT CHARACTER +CS= C+1 ;CHARACTER STATUS BITS +RC= 11 ;RELOCATION BITS +MWP= 12 ;MACRO WRITE POINTER +MRP= 13 ;MACRO READ POINTER +IO= 14 ;IO REGISTER (LEFT) +ER== IO ;ERROR REGISTER (RIGHT) +FR= 15 ;FLAG REGISTER (LEFT) +RX== FR ;CURRENT RADIX (RIGHT) +MP= 16 ;MACRO PUSHDOWN POINTER +PP= 17 ;BASIC PUSHDOWN POINTER + +%OP== 3 +%MAC== 5 +%DSYM== 2 +%SYM== 1 +%DMAC== %MAC+1 + +OPDEF RESET [CALLI 0] +OPDEF SETDDT [CALLI 2] +OPDEF DDTOUT [CALLI 3] +OPDEF DEVCHR [CALLI 4] +OPDEF WAIT [MTAPE 0] +OPDEF CORE [CALLI 11] +OPDEF EXIT [CALLI 12] +OPDEF UTPCLR [CALLI 13] +OPDEF DATE [CALLI 14] +OPDEF APRENB [CALLI 16] +OPDEF MSTIME [CALLI 23] +OPDEF PJOB [CALLI 30] +OPDEF RUN [CALLI 35] +OPDEF TMPCOR [CALLI 44] + + ;FR FLAG REGISTER (FR/RX) +IOSCR== 000001 ;NO CR AFTER LINE +MTAPSW==000004 ;MAG TAPE +ERRQSW==000010 ;IGNORE Q ERRORS +LOADSW==000020 ;END OF PASS1 & NO EOF YET +DCFSW== 000040 ;DECIMAL FRACTION +RIM1SW==000100 ;RIM10 MODE +NEGSW== 000200 ;NEGATIVE ATOM +RIMSW== 000400 ;RIM OUTPUT +PNCHSW==001000 ;RIM/BIN OUTPUT WANTED +CREFSW==002000 +R1BSW== 004000 ;RIM10 BINARY OUTPUT +TMPSW== 010000 ;EVALUATE CURRENT ATOM +INDSW== 020000 ;INDIRECT ADDRESSING WANTED +RADXSW==040000 ;RADIX ERROR SWITCH +FSNSW== 100000 ;NON BLANK FIELD SEEN +MWLFLG==200000 ;ON FOR DON'T ALLOW MULTI-WORD LITERALS +P1== 400000 ;PASS1 + + ;IO FLAG REGISTER (IO/ER) +FLDSW== 400000 ;ADDRESS FIELD +IOMSTR==200000 +ARPGSW==100000 ;ALLOW RAPID PROGRAM GENERATION +IOPROG==040000 ;SUPRESS LISTING (LIST/XLIST PSEUDO OP) +NUMSW== 020000 +IOMAC== 010000 ;MACRO EXPANSION IN PROGRESS +IOPALL==004000 ;SUPRESS LISTING OF MACRO EXPANSIONS +IONCRF==002000 ;SUPRESS OUTPUT OF CREF INFORMATION +CRPGSW==001000 ;CURRENTLY IN PROGRESS ON RPG +IOCREF==000400 ;WE ARE NOW OUTPUTTING CREF INFO +IOENDL==000200 ;BEEN TO STOUT +IOPAGE==000100 +DEFCRS==000040 ;THIS IS A DEFINING OCCURANCE (MACROS) +IOIOPF==000020 ;IOP INSTRUCTION SEEN +MFLSW== 000010 ;MULTI-FILE MODE,PRGEND SEEN +IORPTC==000004 ;REPEAT CURRENT CHARACTER +IOTLSN==000002 ;TITLE SEEN +IOSALL==000001 ;SUPPRESS MACRO LISTING EVEN IF BINARY IS GENERATED + +OPDEF JUMP1 [JUMPL FR, ] ;JUMP IF PASS 1 +OPDEF JUMP2 [JUMPGE FR, ] ;JUMP IF PASS 2 + +OPDEF JUMPOC [JUMPGE IO, ] ;JUMP IF IN OP-CODE FIELD +OPDEF JUMPAD [JUMPL IO, ] ;JUMP IF IN ADDRESS FIELD + +OPDEF JUMPCM [JUMPL CS, ] ;JUMP IF CURRENT CHAR IS COMMA +OPDEF JUMPNC [JUMPGE CS, ] ;JUMP IF CURRENT CHAR IS NON-COMMA + + ;ER ERROR REGISTERS (IO/ER) +ERRM== 000020 ;MULTIPLY DEFINED SYMBOL +ERRE== 000040 ;ILLEGAL USE OF EXTERNAL +ERRP== 000100 ;PHASE DISCREPANCY +ERRO== 000200 ;UNDEFINED OP CODE +ERRN== 000400 ;NUMBER ERROR +ERRV== 001000 ;VALUE PREVIOUSLY UNDEFINED +ERRU== 002000 ;UNDEFINED SYMBOL +ERRR== 004000 ;RELOCATION ERROR +ERRL== 010000 ;LITERAL ERROR +ERRD== 020000 ;REFERENCE TO MULTIPLY DEFINED SYMBOL +ERRA== 040000 ;PECULIAR ARGUMENT +ERRX== 100000 ;MACRO DEFINITION ERROR +ERRQ== 200000 ;QUESTIONABLE, NON-FATAL ERROR +ERRORS==777760 +LPTSW== 000002 +TTYSW== 000001 + + ;SYMBOL TABLE FLAGS +SYMF== 400000 ;SYMBOL +TAGF== 200000 ;TAG +NOOUTF==100000 ;NO DDT OUTPUT WFW +SYNF== 040000 ;SYNONYM +MACF== SYNF_-1 ;MACRO +OPDF== SYNF_-2 ;OPDEF +PNTF== 004000 ;"VALUE" IN SYMBOL TBL IS PNTR TO 36BIT VALUE +UNDF== 002000 ;UNDEFINED +EXTF== 001000 ;EXTERNAL +INTF== 000400 ;INTERNAL +ENTF== 000200 ;ENTRY +VARF== 000100 ;VARIABLE +MDFF== 000020 ;MULTIPLY DEFINED +SPTR== 000010 ;SPECIAL EXTERNAL POINTER +SUPRBT==000004 ;SUPRESS OUTPUT TO DDT +LELF== 000002 ;LEFT HAND RELOCATABLE +RELF== 000001 ;RIGHT HAND RELOCATABLE + +LITF== 200000 ;FLAG FOR PSEUDO-OPS INVALID IN LIT'S +ADDF== 100000 ;FLAG FOR PSEUDO-OPS INVALID IN ADDRESSES + +TNODE== 200000 ;TERMINAL NODE FOR EVALEX + SUBTTL RUN UUO + +IFN CCLSW,< +;THIS CODE MUST BE IN FIRST 1K TO ALLOW MAXIMUM SPACE +; FOR OVERWRITING +; 74 APPEARS BECAUSE ONLY LOCS 74 AND BEYOND ARE SAVED BY "SAVE" + +IFN CCLSW,<NUNCOM: IOWD 0,INHERE ;WHERE TO DO IO + 0 ;TERMINATE COMMAND LIST +NUNGO2: IN BIN,NUNCOM ;READ FILE + JRST NUNGO3 ;THERE ARE NO ERRORS +NUNERR: DDTOUT NUNPNT, ;COMPLAIN + EXIT ;GIVE UP +NUNERM: ASCIZ /?LINKAGE ERROR/ +NUNGO3: SKIPE 12,INHERE+133-74 ;LOOK AT JOBCOR + ;DOES JOB WANT TO RUN IN MORE CORE? + CAMG 12,JOBREL ;MORE CORE THAN CURRENTLY USED? + JRST NUNGO4 ;NO, GO BLT PROG + CORE 12, ;ASK FOR MORE CORE + JRST NUNERR ;NOT AVAILABLE + JRST NUNGO4 ;GO BLT PROGRAM +INHERE: + ;THIS CODE MUST BE IN FIRST 1K +NUNSET: JUMPN ACDEV,.+2 ;DEVICE SPECIFIED? + MOVSI ACDEV,(SIXBIT /SYS/) ;NO, USE SYSTEM DEVICE + JUMPN ACEXT,.+2 ;EXT SPECIFIED? + MOVSI ACEXT,(SIXBIT /SAV/) ;NO, USE "SAV" + MOVEM ACDEV,NUNDEV ;DEVICE NAME TO USE + OPEN BIN,NUNINI ;INIT THE DEVICE + JRST EINIT ;ERROR + MOVEM ACFILE,NUNDIR ;IS THE FILE AVAILABLE? + HLLZM ACEXT,NUNDIR+1 ;STASH EXTENSION + SETZM NUNDIR+3 ;CLEAR PPN + LOOKUP BIN,NUNDIR ;LOOK FOR FILE + JRST [HLRZ ACEXT,NUNDIR+1 ;WAS EXTENSION "SAV"? + CAIE ACEXT,(SIXBIT /SAV/) ;... + JRST ERRCF ;GO COMPLAIN + MOVSI ACEXT,(SIXBIT /DMP/) ;TRY "DMP" EXTENSION + JRST .-3 ] ;TRA -3,4 + PUSHJ PP,DELETE ;COMMAND FILE + MOVE 15,NUNDIR ;GET THE NAME + CALLI 15,43 ;TELL SYSTEM "SETNAM" + HLRO 15,NUNDIR+3 ;GET WORD COUNT + HRLM 15,NUNCOM ;STASH COUNT + MOVNS 15 ;NEGATIVE COUNT + MOVEI 16,73(15) ;WHERE TO STOP BLT + ADDI 15,INHERE ;HOW BIG TO MAKE CORE + IORI 15,1777 ;AN EVEN MULTIPLE OF 1K + CORE 15, ;ASK TS EXEC FOR CORE + JRST [HRROI RC,[SIXBIT /NOT ENUF CORE FOR LINKAGE@/] + JRST ERRFIN ];GO COMPLAIN + MOVSI NUNTOP,NUNAC + BLT NUNTOP,NUNTOP ;SET ACS + HRR NUNBLT,16 ;... + TLNN IO,CRPGSW ;WAS RPG IN PROGRESS? + TLZ NUNAOS,577000 ;NO, DON'T MAKE NEXT AN RPG + JRST NUNGO2 + +NUNAC: PHASE 0 +NUNGO4: MOVE NUNLAC,INHERE+74-74 ;SETUP FOR NEW DDT + SETDDT NUNLAC, ;... +INTERN JOBS41 +JOBS41=122 ;LOADER WILL GIVE MUL. DEF. GLOBAL IF CHANGED + +EXTERN JOB41 + MOVE NUNLAC,JOBS41+INHERE-74 ;RESTORE LOC 41 + MOVEM NUNLAC,JOB41 ;... +NUNBLT: BLT NUNTOP,.-. ;MOVE PRGM TO WHERE IT BELONGS + RESET ;RESET ALL I/O +NUNAOS: AOS 1,JOBSA ;GET STARTING ADDR FOR RPG + JRST 0(1) ;GET ON WITH THE GAME +NUNPNT: NUNERM ;ERROR MESSAGE POINTER +NUNTOP: XWD INHERE+1,75 +NUNLAC=. + DEPHASE +> + LIST + + DELETE: HRRZ EXTMP ;IF THE EXTENSION + CAIE (SIXBIT/TMP/) ;IS .TMP + POPJ PP, ;RETURN. + CLOSE CTL2, ;DELETE + SETZB 4,5 ;THE COMMAND FILE. + SETZB 6,7 + RENAME CTL2,4 ; + JFCL + POPJ PP, +> + SUBTTL START ASSEMBLING + +ASSEMB: PUSHJ PP,INZ ;INITIALIZE FOR PASS + MOVE [ASCII /.MAIN/] + MOVEM TBUF + MOVEI SBUF + HRRM SUBTTX + +ASSEM1: PUSHJ PP,CHARAC ;TEST FOR FORM FEED + SKIPGE LIMBO ;CRLF FLAG? + JRST ASSEM1 ;YES ,IGNORE LF + CAIN C,14 + SKIPE SEQNO + JRST ASSEM2 + PUSHJ PP,OUTFF1 + PUSHJ PP,OUTLI + JRST ASSEM1 + +ASSEM2: AOS TAGINC + CAIN C,"\" ;BACK-SLASH? + TLZA IO,IOMAC ;YES, LIST IF IN MACRO + TLO IO,IORPTC + PUSHJ PP,STMNT ;OFF WE GO + TLZN IO,IOENDL ;WAS STOUT PRE-EMPTED? + PUSHJ PP,STOUT ;NO, POLISH OFF LINE + JRST ASSEM1 + + SUBTTL STATEMENT PROCESSOR + +STMNT: TLZ FR,INDSW!FSNSW + TLZA IO,FLDSW +STMNT1: PUSHJ PP,LABEL +STMNT2: PUSHJ PP,ATOM ;GET THE FIRST ATOM + CAIN C,35 ;"="? + JRST ASSIGN ;YES + CAIN C,32 ;":"? + JRST STMNT1 ;YES + JUMPAD STMNT7 ;NUMERIC EXPRESSION + JUMPN AC0,STMN2A ;JUMP IF NON NULL FIELD + SKIPN LITLVL ;ALLOW COMMA IN LITERALS + CAIE C,14 ;NULL, COMMA? + CAIN C,EOL ;OR END OF LINE? + POPJ PP, ;YES,EXIT + CAIN C,"]" ;CLOSING LITERAL? + POPJ PP, ;YES + JRST STMNT9 ;NO,AT LEAST SKIP ALL THIS NONSENSE + +STMN2A: JUMPE C,.+2 + TLO IO,IORPTC + PUSHJ PP,MSRCH ;SEARCH FOR MACRO/OPDEF/SYN + JRST STMNT3 ;NOT FOUND, TRY OP CODE + LDB SDEL,[POINT 3,ARG,5] + JUMPE SDEL,ERRAX ;ERROR IF NO FLAGS + SOJE SDEL,OPD1 ;OPDEF IF 1 + SOJE SDEL,CALLM ;MACRO IF 2 + JRST STMNT4 ;SYNONYM, PROCESS WITH OP-CODES + +STMNT3: PUSHJ PP,OPTSCH ;SEARCH OP CODE TABLE + JRST STMNT5 ;NOT FOUND +STMNT4: HLLZ AC0,V ;PUT CODE IN AC0 + TRZ V,ADDF ;CLEAR ADDRESS NON-VALID FLAG + TRZE V,LITF ;VALID IN LITERAL? + SKIPN LITLVL ;NO, ARE WE IN A LITERAL? + JRST 0(V) ;NO, GO TO APPROPRIATE PROCESSOR + POPJ PP, ;YES,EXIT + +STMNT5: PUSHJ PP,SSRCH ;TRY SYMBOLS + JRST STMNT8 ;NOT FOUND + TLNE ARG,EXTF!UNDF ;EXTERNAL OR UNDEFINED? + JRST STMNT7 ;YES, PROCESS IN EVALEX + TLNN RC,-2 ;CHECK FOR EXTERNAL + TRNE RC,-2 + JRST STMNT7 + MOVE AC0,V ;FOUND, PUT VALUE IN AC0 + TLO IO,NUMSW ;FLAG AS NUMERIC +STMNT7: TLZ IO,IORPTC +STMNT9: PUSHJ PP,EVALHA ;EVALUATE EXPRESSION + TLNE FR,FSNSW ;FIELD SEEN? + JRST STOW ;YES,STOW THE CODE AND EXIT + CAIE C,"]"-40 ;CLOSING LITERAL? + TRO ER,ERRQ ;NO, GIVE "Q" ERROR + POPJ PP, ;EXIT + + STMNT8: MOVEI V,0 ;ALWAYS START SCAN WITH 0 + CAIL V,CALNTH ;END OF TABLE? + JRST STMN8C ;YES, TRY TTCALLS + CAME AC0,CALTBL(V) ;FOUND IT? + AOJA V,.-3 ;NO,TRY AGAIN + SUBI V,NEGCAL ;CALLI'S START AT -1 + HRLI V,(CALLI) ;PUT IN UUO +STMN8D: MOVSI ARG,OPDF ;SET FLAG FOR OPDEF +STMN8B: PUSHJ PP,INSERT ;PUT OPDEF IN TABLE + JRST OPD ;AND TREAT AS OPDEF + +STMN8C: SETZ V, ;START WITH ZERO + CAIL V,TTCLTH ;END OF TABLE? + JRST STMN8A ;YES, ERROR + CAME AC0,TTCTBL(V) ;MATCH? + AOJA V,.-3 ;NO, KEEP TRYING + LSH V,5 ;PUT IN AC FIELD (RIGHT HALF) + HRLZI V,<(TTCALL)>(V) ;PUT UUO IN LEFT HALF + JRST STMN8D ;SET OPDEF FLAG + +STMN8A: SETZB V,RC ;CLEAR VALUE AND RELOCATION + TRO ER,ERRO ;FLAG AS UNDEFINED OP-CODE + JUMP1 OPD ;TREAT AS STANDARD OP ON PASS1 + MOVSI ARG,OPDF!UNDF!EXTF ;SET A FEW FLAGS + JRST STMN8B ;TO FORCE OUT A MESSAGE + + ;STATEMENT OUT PASSES REMAINDER OF LINE (CMNT) + ;UNTIL A LINE TERMINATOR IS SEEN. +STOUTS: TLOA IO,IOENDL!IORPTC +STOUT: TLO IO,IORPTC + PUSHJ PP,BYPAS1 + CAIN C,14 ;COMMA? + SKIPL STPX ;YES, ERROR IF CODE STORED + CAIN C,EOL + TLOA IO,IORPTC + TRO ER,ERRQ +STOUT1: PUSHJ PP,CHARAC + CAIG C,CR + CAIG C,HT + JRST STOUT1 + JRST OUTLIN ;OUTPUT THE LINE (BIN AND LST) + SUBTTL LABEL PROCESSOR + +LABEL: JUMPAD LABEL4 ;COMPARE IF NON-SYMBOLIC + JUMPE AC0,LABEL5 ;ERROR IF BLANK + TLO IO,DEFCRS ;THIS IS A DEFINITION + PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + MOVSI ARG,SYMF!UNDF!TAGF ;NOT FOUND + TLNN ARG,EXTF ;OPERAND FOUND (SKIP EXIT) + JRST LABEL0 + JUMP1 LABEL3 ;ERROR ON PASS1 + TLNN ARG,UNDF ;UNDEFINED ON PASS1 + JRST LABEL3 ;NO, FLAG ERROR + TLZ ARG,EXTF!PNTF ;TURN OFF EXT FLAG NOW +LABEL0: TLZN ARG,UNDF!VARF ;WAS IT PREVIOUSLY DEFINED? + JRST LABEL2 ;YES, CHECK EQUALITY + MOVE V,LOCA ;WFW + MOVE RC,MODA + TLO ARG,TAGF + PUSHJ PP,PEEK ;GET NEXT CHAR. + CAIE C,":" ;SPECIAL CHECK FOR :: + JRST LABEL1 ;NO MATCH + TLO ARG,INTF ;MAKE IT INTERNAL + PUSHJ PP,GETCHR ;PROCESS NEXT CHAR. + PUSHJ PP,PEEK ;PREVIEW NEXT CHAR. +LABEL1: CAIE C,"!" ;HALF-KILL SIGN + JRST LABEL6 ;NO + TLO ARG,NOOUTF ;YES, SUPPRESS IT + PUSHJ PP,GETCHR ;AND GET RID OF IT +LABEL6: MOVEM AC0,TAG ;SAVE FOR PASS 1 ERRORS + HLLZS TAGINC ;ZERO INCREMENT + JRST INSERT ;INSERT/UPDATE AND EXIT + +LABEL2: HRLOM V,LOCBLK ;SAVE LIST LOCATION + CAMN V,LOCA ;DOES IT COMPARE WITH PREVIOUS? WFW + CAME RC,MODA +LABEL3: TLOA ARG,MDFF ;NO, FLAG MULTIPLY DEFINED AND SKIP + JRST LABEL7 ;YES, GET RID OF EXTRA CHARS. + TRO ER,ERRM ;FLAG MULTIPLY DEFINED ERROR + JRST UPDATE ;UPDATE AND EXIT + +LABEL4: CAMN AC0,LOCA ;DO THEY COMPARE? + CAME RC,MODA +LABEL5: TRO ER,ERRP ;NO, FLAG PHASE ERROR + POPJ PP, + +LABEL7: SKIPE LITLVL ;LABEL IN A LITERAL? + MOVEM AC0,LITLBL ;YES, SAVE LABEL NAME FOR LATER + PUSHJ PP,PEEK ;INSPECT A CHAR. + CAIN C,":" ;COLON? + PUSHJ PP,GETCHR ;YES, DISPOSE OF IT + PUSHJ PP,PEEK ;EXAMINE ONE MORE CHAR. + CAIN C,"!" ;EXCLAMATION? + JRST GETCHR ;YES, INDEED + POPJ PP, + SUBTTL ATOM PROCESSOR +ATOM: PUSHJ PP,CELL ;GET FIRST CELL + TLNE IO,NUMSW ;IF NON-NUMERIC +ATOM1: CAIE C,42 ;OR NOT A BINARY SHIFT, + POPJ PP, ;EXIT + + PUSH PP,AC0 ;STACK REGISTERS, ITS A BINARY SHIFT + PUSH PP,AC1 + PUSH PP,RC + PUSH PP,RX + HRRI RX,^D10 ;COMPUTE SHIFT RADIX 10 + PUSHJ PP,CELLSF ;GET SHIFT + MOVE ARG,RC ;SAVE RELOCATION + POP PP,RX ;RESTORE REGISTERS + POP PP,RC + POP PP,AC1 + MOVN SX,AC0 ;USE NEGATIVE OF SHIFT + POP PP,AC0 + JUMPN ARG,NUMER2 ;IF NOT ABSOLUTE + TLNN IO,NUMSW ;AND NUMERIC, + JRST NUMER2 ;FLAG ERROR + LSHC AC0,^D35(SX) + LSH RC,^D35(SX) + JRST ATOM1 ;TEST FOR ANOTHER + CELLSF: TLO IO,FLDSW +CELL: SETZB AC0,RC ;CLEAR RESULT AND RELOCATION + SETZB AC1,AC2 ;CLEAR WORK REGISTERS + MOVEM PP,PPTEMP ;SAVE PUSHDOWN POINTER + TLZ IO,NUMSW + TLZA FR,NEGSW!DCFSW!RADXSW + +CELL1: TLO IO,FLDSW + PUSHJ PP,BYPASS + LDB V,[POINT 4,CSTAT(C),14] ;GET CODE + XCT .+1(V) ;EXECUTE, INDEX VIA BITS 11,12,13,14 OF CSTAT TABLE + JRST CELL1 ;0; BLANK, (TAB OR "+") + JRST LETTER ;1; LETTER ] $ % ( ) , ; > + TLC FR,NEGSW ;2; "-" + TLO FR,INDSW ;3; "@" + JRST NUM1 ;4; NUMERIC 0 - 9 + JRST ANGLB ;5; "<" + JRST SQBRK ;6; "[" + JRST QUOTES ;7; ""","'" + JRST QUAL ;10; "^" + JRST PERIOD ;11; "." + TROA ER,ERRQ ;12; ERROR, FLAG AND TREAT AS DELIMITER + ;12; ! # & * / : = ? \ _ + LETTER: TLOA AC2,(POINT 6,AC0,) ;SET BYTE POINTER +LETTE1: PUSHJ PP,GETCHR ;GET CHARACTER + TLNN CS,6 ;ALPHA-NUMERIC? + JRST LETTE3 ;NO,TEST FOR VARIABLE + TLNE AC2,770000 ;STORE ONLY SIX BYTES +LETTE2: IDPB C,AC2 ;RETURN FROM PERIOD + JRST LETTE1 + +LETTE3: CAIE C,03 ;"#"? + POPJ PP, + JUMPE AC0,POPOUT ;TEST FOR NULL + PUSHJ PP,PEEK ;PEEK AT NEXT CHAR. + CAIN C,"#" ;IS IT 2ND #? + JRST LETTE4 ;YES, THEN IT'S AN EXTERN + TLO IO,DEFCRS + PUSHJ PP,SSRCH ;YES, SEARCH FOR SYMBOL (OPERAND) + MOVSI ARG,SYMF!UNDF ;NOT FOUND, FLAGAS UNDEFINED SYM. + TLNN ARG,UNDF ;UNDEFINED? + JRST GETCHR ;NO, GET NEXT CHAR AND RETURN + TLO ARG,VARF ;YES, FLAG AS A VARIABLE + TRO ER,ERRU ;SET UNDEFINED ERROR FLAG + PUSHJ PP,INSERZ ;INSERT IT WITH A ZERO VALUE + JRST GETDEL + +LETTE4: PUSHJ PP,GETCHR ;AND SCAN PAST IT + PUSHJ PP,GETCHR ;GET RID OF # + JRST EXTER1 ;PUT IN SYMBOL TABLE + +NUMER1: SETZB AC0,RC ;RETURN ZERO +NUMER2: TRO ER,ERRN ;FLAG ERROR + +GETDEL: PUSHJ PP,BYPASS +GETDE1: JUMPE C,.-1 + MOVEI AC1,0 +GETDE3: TLO IO,NUMSW!FLDSW ;FLAG NUMERIC + TLNN FR,NEGSW ;IS ATOM NEGATIVE? + POPJ PP, ;NO, EXIT + JUMPE AC1,GETDE2 + MOVNS AC1 + TDCA AC0,[-1] +GETDE2: MOVNS AC0 ;YES, NEGATE VALUE + MOVNS RC ;AND RELOCATION +POPOUT: POPJ PP, ;EXIT + QUOTES: CAIE C,"'"-40 ;IS IT "'" + JRST QUOTE ;NO MUST BE """ + JRST SQUOTE ;YES + +QUOTE0: TLNE AC0,376000 ;5 CHARACTERS STORED ALREADY? + TRO ER,ERRQ ;YES, GIVE WARNING + ASH AC0,7 + IOR AC0,C +QUOTE: PUSHJ PP,CHARAC ;GET 7-BIT ASCII + CAIG C,15 ;TEST FOR LF, VT, FF OR CR + CAIGE C,12 + JRST .+2 ;NO, SO ALL IS WELL + JRST QUOTE2 ;ESCAPE WITH Q ERROR + CAIE C,42 + JRST QUOTE0 + PUSHJ PP,PEEK ;LOOK AT NEXT CHAR. + CAIE C,42 + JRST QUOTE1 ;RESTORE REPEAT LEVEL AND QUIT + PUSHJ PP,CHARAC ;GET NEXT CHAR. + JRST QUOTE0 ;USE IT + +QUOTE2: TRO ER,ERRQ ;SET Q ERROR +QUOTE1: JRST GETDEL + +SQUOT0: TLNE AC0,770000 ;SIX CHARS. STORED ALREADY ? + TRO ER,ERRQ ;YES + LSH AC0,6 + IORI AC0,-40(C) ;OR IN SIXBIT CHAR. + +SQUOTE: PUSHJ PP,CHARAC + CAIG C,CR + CAIGE C,LF + JRST .+2 + JRST QUOTE1 + CAIE C,"'" + JRST SQUOT0 + PUSHJ PP,PEEK + CAIE C,"'" + JRST QUOTE1 + PUSHJ PP,CHARAC + JRST SQUOT0 + + QUAL: PUSHJ PP,BYPAS1 ;SKIP BLANKS, GET NEXT CHARACTER + CAIN C,42 ;"B"? + JRST QUAL2 ;YES, RADIX=D2 + CAIN C,57 ;"O"? + JRST QUAL8 ;YES, RADIX=D8 + CAIN C,46 ;"F"? + JRST NUMDF ;YES, PROCESS DECIMAL FRACTION + CAIN C,54 ;"L"? + JRST QUALL ;YES + CAIE C,44 ;"D"? + JRST NUMER1 ;NO, FLAG NUMERIC ERROR + ADDI AC2,2 +QUAL8: ADDI AC2,6 +QUAL2: ADDI AC2,2 + PUSH PP,RX + HRR RX,AC2 + PUSHJ PP,CELLSF +QUAL2A: POP PP,RX + TLNN IO,NUMSW + JRST NUMER1 + JRST GETDE1 + +QUALL: PUSH PP,FR + PUSHJ PP,CELLSF + MOVE AC2,AC0 + MOVEI AC0,^D36 + JUMPE AC2,QUAL2A + LSH AC2,-1 + SOJA AC0,.-2 + SUBTTL LITERAL PROCESSOR + +SQBRK: PUSH PP,FR + PUSH PP,EXTPNT ;ALLOW EXTERN TO PRECEDE LIT IN XWD + SETZM EXTPNT + SKIPE LITLVL ;SAVE SEQNO AND PAGE IF NOT IN LIT ALREADY + JRST SQB5 + MOVE C,SEQNO2 + MOVEM C,LITSEQ + MOVE C,PAGENO + MOVEM C,LITPG +SQB5: JSP AC2,SVSTOW +SQB3: PUSHJ PP,STMNT + CAIN C,75 ;CHECK FOR ] + JRST SQB1 + TLO IO,IORPTC + TLNE FR,MWLFLG ;CALL IT ] IF NOT MULTI-WORD FLAG + JRST SQB2 ;BUT REPEAT LAST CHARACTER + PUSHJ PP,BYPAS1 + CAIN C,EOL + TLOA IO,IORPTC + TRO ER,ERRQ +SQB4: PUSHJ PP,CHARAC + CAIN C,";" ;COMMENT? + JRST SQB6 ;YES, IGNORE SQUARE BRACKETS + CAIN C,"]" ;LOOK FOR TERMINAL SQB + TRNN ER,ERRORS ;IN CASE OF ERROR IN LITERAL + JRST .+2 ;NO ALL IS WELL + JRST SQB1 ;FINISH THE LITERAL NOW!! + CAIG C,CR ;LOOK FOR END OF LINE + CAIN C,HT + JRST SQB4 +SQB4A: PUSHJ PP,OUTIML ;DUMP + PUSHJ PP,CHARAC ;GET ANOTHER CHAR. + SKIPL LIMBO ;CRLF FLAG + TLO IO,IORPTC ;NO REPEAT + JRST SQB3 + +SQB6: PUSHJ PP,CHARAC ;GET A CHARACTER + CAIG C,CR + CAIN C,HT ;LOOK FOR END OF LINE CHAR. + JRST SQB6 ;NOT YET + JRST SQB4A ;GOT IT + +SQB1: TLZ IO,IORPTC +SQB2: PUSHJ PP,STOLIT + JSP AC2,GTSTOW + SKIPE LITLBL ;NEED TO FIXUP A LABEL? + PUSHJ PP,RELBLE ;YES, USE LOC OF LITERAL + POP PP,EXTPNT + POP PP,FR + SKIPE LITLVL ;WERE WE NESTED? + JUMP1 NUMER2 ;YES, FORCE ERROR IF PASS 1 + JRST GETDEL + +RELBLE: PUSH PP,AC0 ;SAVE LOCATION COUNTER + PUSH PP,RC ;AND RELOCATION + MOVE AC0,LITLBL ;SYMBOL WE NEED + SETZM LITLBL ;ZERO INDICATOR + PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + JRST RELBL1 ;SHOULD NEVER HAPPEN + TLNN ARG,TAGF ;IT BETTER BE A LABEL + JRST RELBL1 ;IT WASN'T , GIVE UP BEFORE SOME HARM IS DONE + TLZ ARG,UNDF!EXTF!PNTF ;CLEAR FLAGS NOW + POP PP,RC ;GET LITERAL RELOCATION + MOVE V,(PP) ;GET VALUE (LOC COUNTER) + PUSHJ PP,UPDATE ;UPDATE VALUE + POP PP,AC0 ;RESTORE LITERAL COUNT + POPJ PP, ;RETURN + +RELBL1: POP PP,RC ;RESTORE RC + POP PP,AC0 ;AND AC0 + POPJ PP, ;JUST RETURN + ANGLB: PUSH PP,FR + TLZ FR,INDSW + PUSHJ PP,ATOM + TLNN IO,NUMSW + CAIE C,35 + JRST ANGLB1 + PUSHJ PP,ASSIG1 + MOVE AC0,V + JRST ANGLB2 + +ANGLB1: PUSHJ PP,EVALHA +ANGLB2: POP PP,FR + CAIE C,36 + TRO ER,ERRN + JRST GETDEL + +PERIOD: PUSHJ PP,GETCHR ;LOOK AT NEXT CHARACTER + TLNN CS,2 ;ALPHABETIC? + JRST PERNUM ;NO, TEST NUMERIC + MOVSI AC0,(SIXBIT /./) ;YES, PUT PERIOD IN AC0 + MOVSI AC2,(POINT 6,AC0,5) ;SET BYTE POINTER + JRST LETTE2 ;AND TREAT AS SYMBOL + +PERNUM: TLNE CS,4 ;IS IT A NUMBER + JRST NUM32 ;YES + MOVE AC0,LOCA ;NO. CURRENT LOC SYMBOL (.) + MOVE RC,MODA ;SET TO CURRENT ASSEMBLY MODE + JRST GETDE1 ;GET DELIMITER +NUMDF: TLO FR,DCFSW ;SET DECIMAL FRACTION FLAG +NUM: PUSHJ PP,GETCHR ;GET A CHARACTER + TLNN CS,4 ;NUMERIC? + JRST NUM10 ;NO +NUM1: SUBI C,20 ;CONVERT TO OCTAL + PUSH PP,C ;STACK FOR FLOATING POINT + MOVE AC0,AC1 + MULI AC0,0(RX) + ADD AC1,C ;ADD IN LAST VALUE + CAIL C,0(RX) ;IS NUMBER LESS THAN CURRENT RADIX? + TLO FR,RADXSW ;NO, SET FLAG + AOJA AC2,NUM ;YES, AC2=NO. OF DECIMAL PLACES + + NUM10: CAIE C,16 ;PERIOD? + TLNE FR,DCFSW ;OR DECIMAL FRACTION? + JRST NUM30 ;YES, PROCESS FLOATING POINT + LSH AC1,1 ;NO, CLEAR THE SIGN BIT + LSHC AC0,^D35 ;AND SHIFT INTO AC0 + MOVE PP,PPTEMP ;RESTORE PP + SOJE AC2,GETDE1 ;NO RADIX ERROR TEST IF ONE DIGIT + TLNE FR,RADXSW ;WAS ILLEGAL NUMBER ENCOUNTERED? + TRO ER,ERRN ;YES, FLAG N ERROR + JRST GETDE1 + +NUM30: CAIE C,"B"-40 ;IF "B" THEN MISSING "." +NUM31: PUSHJ PP,GETCHR + TLNN CS,4 ;NUMERIC? + JRST NUM40 ;NO +NUM32: SUBI C,20 + PUSH PP,C + JRST NUM31 + +NUM40: PUSH PP,FR ;STACK VALUES + HRRI RX,^D10 + PUSH PP,AC2 + PUSH PP,PPTEMP + CAIN C,45 ;"E"? + JRST [PUSHJ PP,PEEK ;GET NEXT CHAR + PUSH PP,C ;SAVE NEXT CHAR + PUSHJ PP,CELL ;YES, GET EXPONENT + POP PP,C ;GET FIRST CHAR. AFTER E + CAIN V,4 ;MUST HAVE NUMERICAL STATUS + JRST .+2 ;SKIP RETURN + CAIN C,"<" ;ALLOW <EXP> + JRST .+2 ;SKIP RETURN + SKIPN AC0 ;ERROR IF NON-ZERO EXPRESSION + TROA ER,ERRQ ;ALLOW E+,E- + SETOM RC ;FORCE NUMERICAL ERROR + JRST .+2] ;SKIP RETURN + MOVEI AC0,0 ;NO, ZERO EXPONENT + POP PP,PPTEMP + POP PP,SX + POP PP,FR + HRRZ V,PP + MOVE PP,PPTEMP + JUMPN RC,NUMER1 ;EXPONENT MUST BE ABSOLUTE + ADD SX,AC0 + HRRZ ARG,PP + ADD SX,ARG + SETZB AC0,AC2 + TLNE FR,DCFSW + JRST NUM60 + JOV NUM50 ;CLEAR OVERFLOW FLAG + +NUM50: JSP SDEL,NUMUP ;FLOATING POINT + JRST NUM52 ;END OF WHOLE NUMBERS + FMPR AC0,[10.0] ;MULTIPLY BY 10 + TLO AC1,233000 ;CONVERT TO FLOATING POINT + FADR AC0,AC1 ;ADD IT IN + JRST NUM50 + +NUM52: JSP SDEL,NUMDN ;PROCESS FRACTION + FADR AC0,AC2 + JOV NUMER1 ;TEST FOR OVERFLOW + JRST GETDE1 + + TLO AC1,233000 + TRNE AC1,-1 + FADR AC2,AC1 ;ACCUMULATE FRACTION + FDVR AC2,[10.0] + JRST NUM52 + +NUM60: JSP SDEL,NUMUP + JRST NUM62 + IMULI AC0,^D10 + ADD AC0,AC1 + JRST NUM60 + +NUM62: LSHC AC1,-^D36 + JSP SDEL,NUMDN + LSHC AC1,^D37 + PUSHJ PP,BYPAS2 + JRST GETDE3 + + DIVI AC1,^D10 + JRST NUM62 + +NUMUP: MOVEI AC1,0 + CAML ARG,SX + JRST 0(SDEL) + CAMGE ARG,V + MOVE AC1,1(ARG) + AOJA ARG,1(SDEL) + +NUMDN: MOVEI AC1,0 + CAMG V,SX + JRST 0(SDEL) + CAMLE V,ARG + MOVE AC1,0(V) + SOJA V,3(SDEL) + SUBTTL GETSYM +GETSYM: MOVEI AC0,0 ;CLEAR AC0 + MOVSI AC1,(POINT 6,AC0) ;PUT POINTER IN AC1 + PUSHJ PP,BYPASS ;SKIP LEADING BLANKS + TLNN CS,2 ;ALPHABETIC? + JRST GETSY1 ;NO, ERROR + CAIE C,16 ;PERIOD? + JRST GETSY2 ;NO, A VALID SYMBOL + IDPB C,AC1 ;STORE THE CHARACTER + PUSHJ PP,GETCHR ;YES, TEST NEXT CHARACTER + TLNN CS,2 ;ALPHABETIC? +GETSY1: TROA ER,ERRA +GETSY2: AOS 0(PP) ;YES, SET SKIP EXIT +GETSY3: TLNN CS,6 ;ALPHA-NUMERIC? + JRST BYPAS2 ;NO, GET DELIMITER + TLNE AC1,770000 ;YES, HAVE WE STORED SIX? + IDPB C,AC1 ;NO, STORE IT + PUSHJ PP,GETCHR + JRST GETSY3 + + SUBTTL EXPRESSION EVALUATOR +CV== AC0 ;CURRENT VALUE +PV== AC1 ;PREVIOUS VALUE +RC== RC ;CURRENT RELOCATABILITY +PR== AC2 ;PREVIOUS RELOCATABILITY +CS= CS ;CURRENT STATUS +PS== SDEL ;PREVIOUS STATUS + +EVALHA: TLO FR,TMPSW +EVALCM: PUSHJ PP,EVALEX ;EVALUATE FIRST EXPRESSION + PUSH PP,[0] ;MARK PDL + JUMPCM EVALC3 ;JUMP IF COMMA + TLO IO,IORPTC ;IT'S NOT,SO REPEAT + JRST OP ;PROCESS IN OP +EVALC3: + PUSH PP,[0] ;STORE ZERO'S ON PDL + PUSH PP,[0] ;....... + MOVSI AC2,(POINT 4,(PP),12) + JRST OP1B ;PROCESS IN OP + +EVALEX: TLO IO,FLDSW + PUSH PP,[XWD TNODE,0] ;MARK THE LIST 200000,,0 + TLZN FR,TMPSW +EVATOM: PUSHJ PP,ATOM ;GET THE NEXT ATOM + JUMPE AC0,EVGETD ;TEST FOR NULL/ZERO + TLOE IO,NUMSW ;SET NUMERIC, WAS IT PREVIOUSLY? + JRST EVGETD+1 ;YES, TREAT ACCORDINGLY + PUSHJ PP,SEARCH ;SEARCH FOR MACRO OR SYMBOL + JRST EVOP ;NOT FOUND, TRY FOR OP-CODE + JUMPL ARG,.+2 ;SKIP IF OPERAND + PUSHJ PP,SSRCH1 ;OPERATOR, TRY FOR SYMBOL (OPERAND) + PUSHJ PP,QSRCH ;PERFORM CROSS-REFERENCE + JUMPG ARG,EVMAC ;BRANCH IF OPERATOR + MOVE AC0,V ;SYMBOL, SET VALUE + JRST EVTSTS ;TEST STATUS + +EVMAC: TLNE FR,NEGSW ;UNARY MINUS? + JRST EVERRZ ;YES, INVALID BEFORE OPERATOR + LDB SDEL,[POINT 3,ARG,5] ;GET MACF/OPDF/SYNF + SOJL SDEL,EVERRZ ;ERROR IF NO FLAGS + + JUMPE C,.+2 ;NON-BLANK? + TLO IO,IORPTC ;YES, REPEAT CHARACTER + SOJE SDEL,CALLM ;MACRO IF 2 + JUMPG SDEL,EVOPS ;SYNONYM IF 4 + + MOVE AC0,V ;OPDEF + MOVEI V,OP ;SET TRANSFER VECTOR + JRST EVOPD + EVOP: TLNE FR,NEGSW ;OPCODE, UNARY MINUS? + JRST EVERRZ ;YES, ERROR + + PUSHJ PP,OPTSCH ;SEARCH SYMBOL TABLE + JRST EVOPX ;NOT FOUND +EVOPS: TRZ V,LITF ;CLEAR LIT INVALID FLAG + TRZE V,ADDF ;SYNONYM + JRST EVOPX ;PSEUDO-OP THAT GENERATES NO DATA JUMPS + HLLZ AC0,V +EVOPD: JUMPE C,.+2 ;OPDEF, NON-BLANK DELIMITER? + TLO IO,IORPTC ;YES, REPEAT CHARACTER + JSP AC2,SVSTOW + PUSHJ PP,0(V) + PUSHJ PP,DSTOW + JSP AC2,GTSTOW + TRNE RC,-2 + HRRM RC,EXTPNT + TLNE RC,-2 + HLLM RC,EXTPNT + JRST EVNUM + +EVOPX: MOVSI ARG,SYMF!UNDF + PUSHJ PP,INSERZ +EVERRZ: SETZB AC0,RC ;CLEAR CODE AND RELOCATION +EVERRU: TRO ER,ERRU + JRST EVGETD + EVTSTS: TLNE ARG,UNDF + JRST [TRO ER,ERRU ;SET UNDEF ERROR + JUMP1 EVGETD ;TREAT AS UNDF ON PASS1 + JRST .+1] ;TREAT AS EXTERNAL ON PASS2 + TLNN ARG,EXTF + JRST EVTSTR + HRRZ RC,ARG ;GET ADRES WFW + HRRZ ARG,EXTPNT ;SAVE IT WFW + HRRM RC,EXTPNT ;WFW + TRNE ARG,-1 ;WFW + TRO ER,ERRE + SETZB AC0,ARG + +EVTSTR: TLNE ARG,MDFF ;MULTIPLY DEFINED? + TRO ER,ERRD ;YES, FLAG IT + TLNE FR,NEGSW ;NEGATIVE ATOM? + PUSHJ PP,GETDE2 ;YES, NEGATE AC0 AND RC + +EVGETD: TLNE IO,NUMSW ;NON BLANK FIELD + TLO FR,FSNSW ;YES,SET FLAG + PUSHJ PP,BYPAS2 + TLNE CS,6 ;ALPHA-NUMERIC? + TLO IO,IORPTC ;YES, REPEAT IT +EVNUM: POP PP,PS ;POP THE PREVIOUS DELIMITER/TNODE + TLO PS,4000 + CAMGE PS,CS ;OPERATION REQUIRED? + JRST EVPUSH ;NO, PUT VALUES BACK ON STACK + TLNN PS,TNODE ;YES, HAVE WE REACHED TERMINAL NODE? + JRST EVXCT ;NO, EXECUTION REQUIRED + TLNN CS,170000 ;YES, ARE WE POINTING AT DEL? (& ! * / + - _) + POPJ PP, ;YES, EXIT + ;NO,FALL INTO EVPUSH + + EVPUSH: PUSH PP,PS ;STACK VALUES + PUSH PP,CV + PUSH PP,RC + PUSH PP,CS + JRST EVATOM ;GET NEXT ATOM + +EVXCT: POP PP,PR ;POP PREVIOUS RELOCATABILITY + POP PP,PV ;AND PREVIOUS VALUE + LDB PS,[POINT 3,PS,29] ;TYPE OF OPERATION TO PS + JRST .+1(PS) ;PERFORM PROPER OPERATION + JRST ASSEM1 ;0; SHOULD NEVER GET HERE ;DMN + JRST XMUL ;1; + JRST XDIV ;2; + JRST XADD ;3; + JRST XSUB ;4; + JRST XLRW ;5; "_" + TDOA CV,PV ;6; MERGE PV INTO CV + AND CV,PV ;7; AND PV INTO CV + JUMPN RC,.+2 ;COMMON RELOCATION TEST +EVXCT1: JUMPE PR,EVNUM + TRO ER,ERRR ;BOTH MUST BE FIXED + JRST EVNUM ;GO TRY AGAIN + +XSUB: SUBM PV,CV + SUBM PR,RC + JRST EVNUM + +XADD: ADDM PV,CV + ADDM PR,RC + JRST EVNUM + +XDIV: IDIV PR,CV ;CORRECT RELOCATABILITY + IDIVM PV,CV +XDIV1: EXCH PR,RC ;TAKE RELOCATION OF NUMERATOR + JRST EVXCT1 + +XMUL: JUMPE PR,XMUL1 ;AT LEAST ONE OPERAND + JUMPE RC,XMUL1 ;MUST BE FIXED + TRO ER,ERRR +XMUL1: IORM PR,RC ;GET RELOCATION TO RC + CAMGE PV,CV ;FIND THE GREATER + EXCH PV,CV ;FIX IN CASE CV=0,OR 1 + IMULM PV,RC + IMULM PV,CV + JRST EVNUM +XLRW: EXCH PV,CV + LSH CV,0(PV) + LSH PR,0(PV) + JRST XDIV1 + SUBTTL LITERAL STORAGE HANDLER + +STOLER: + SETZB AC0,RC ;ERROR, NO CODE STORED + PUSHJ PP,STOW ;STOW ZERO + TRO ER,ERRL ;AND FLAG THE ERROR + +STOLIT: MOVE SDEL,STPX + SUB SDEL,STPY ;COMPUTE NUMBER OF WORDS + JUMPE SDEL,STOLER ;ERROR IF NONE STORED + TRNN ER,ERRORS ;ANY ERRORS? + JRST STOL06 ;NO + JUMP2 STOL22 ;YES, NO SEARCH. BRANCH IF PASS2 + ADDM SDEL,LITCNT ;PASS ONE, UPDATE COUNT + JRST STOWI ;INITIALIZE STOW + +STOL06: MOVEI SX,LITAB ;PREPARE FOR SEARCH + MOVE ARG,STPX ;SAVE IN THE EVENT OF MULTIPLE-WORD + HRL ARG,STPY + MOVE AC2,LITNUM + MOVEI SDEL,0 +STOL08: PUSHJ PP,DSTOW ;GET VALUE WFW + +STOL10: SOJL AC2,STOL24 ;TEST FOR END + MOVE SX,0(SX) ;NO, GET NEXT STORAGE CELL + MOVE V,-1(SX) ;GET RELOCATION BITS WFW + CAMN AC0,-2(SX) ;DO CODES COMPARE? WFW + CAME RC,V ;YES, HOW ABOUT RELOCATION? + AOJA SDEL,STOL10 ;NO, TRY AGAIN + SKIPGE STPX ;YES, MULTI-WORD? + JRST STOL26 ;NO, JUST RETURN LOCATION + MOVEM AC2,SAVBLK+AC2 ;YES, SAVE STARTING INFO + MOVEM SX,SAVBLK+SX + +STOL12: SOJL AC2,STOL23 ;TEST FOR END + PUSHJ PP,DSTOW ;GET NEXT WORD WFW + MOVE SX,0(SX) ;UPDATE POINTER + MOVE V,-1(SX) ;GET RELOCATION WFW + CAMN AC0,-2(SX) ;COMPARE VALUE WFW + CAME RC,V ;AND RELOCATION + JRST STOL14 ;NO MATCH, TRY AGAIN + SKIPL STPX ;MATCH, HAVE WE FINISHED SEARCH? + JRST STOL12 ;NO, TRY NEXT WORD + JRST STOL26 ;YES, RETURN LOCATION + +STOL14: MOVE AC2,SAVBLK+AC2 ;RESTORE STOW POINTERS + MOVE SX,SAVBLK+SX + HRREM ARG,STPX + HLREM ARG,STPY + AOJA SDEL,STOL08 ;BETTER LUCK NEXT TIME + +STOL22: MOVE SDEL,LITNUM +STOL23: PUSHJ PP,DSTOW ;DSTOW AND CONVERT +STOL24: MOVE SX,LITABX ;GET CURRENT STORAGE + PUSHJ PP,GETTOP ;GET NEXT CELL + MOVEM AC0,-2(SX) ;STORE CODE WFW + MOVEM RC,-1(SX) ;WFW + MOVEM SX,LITABX ;SET POINTER TO CURRENT CELL + AOS LITNUM ;INCREMENT NUMBER STORED + AOS LITCNT ;INCREMENT NUMBER RESERVED + SKIPL STPX ;ANY MORE CODE? + JRST STOL23 ;YES +STOL26: JUMP1 POPOUT ;EXIT IF PASS ONE + MOVE SX,LITHDX ;GET HEADER BLOCK + HLRZ RC,-1(SX) ;GET BLOCK RELOCATION + HRRZ AC0,-1(SX) + ADDI AC0,0(SDEL) ;COMPUTE ACTUAL LOCATION + POPJ PP, ;EXIT + + SUBTTL INPUT ROUTINES +GETCHR: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + CAIL C,"A"+40 ;CHECK FOR LOWER CASE + CAILE C,"Z"+40 + JRST .+2 ;NOT LOWER CASE + TRZA C,100 ;CONVERT LOWER CASE TO SIXBIT + SUBI C,40 ;CONVERT TO SIXBIT + CAIG C,77 ;CHAR GREATER THAN SIXBIT? + JUMPGE C,GETCS ;TEST FOR VALID SIXBIT + ADDI C,40 ;BACK TO ASCII + CAIN C,HT ;CHECK FOR TAB + JRST GETCS2 ;MAKE IT LOOK LIKE SPACE + CAIG C,CR ;GREATER THAN CR + CAIG C,HT ;GREATER THAN TAB + JRST GETCS1 ;IS NOT FF,VT,LF OR CR + MOVEI C,EOL ;LINE OR FORM FEED OR V TAB + TLOA IO,IORPTC ;REPEAT CHARACTER +GETCS2: MOVEI C,0 ;BUT TREAT AS BLANK +GETCS: MOVE CS,CSTAT(C) ;GET STATUS BITS + POPJ PP, ;EXIT + +GETCS1: JUMPE C,GETCS ;IGNORE NULS + TRC C,100 ;MAKE CHAR. VISIBLE + MOVEI CS,"^" + DPB CS,LBUFP ;PUT ^ IN OUTPUT + PUSHJ PP,RSW2 ;ALSO MODIFIED CHAR. + TRO ER,ERRQ ;FLAG Q ERROR + JRST GETCHR ;BUT IGNORE CHAR. + +CHARAC: TLZE IO,IORPTC ;REPEAT REQUESTED? + JRST CHARAX ;YES +RSW0: JUMPN MRP,MREAD ;BRANCH IF TREE POINTER SET + PUSHJ PP,READ +RSW1: SKIPE RPOLVL ;ARE WE IN "REPEAT ONCE"? + JRST REPO1 ;YES +RSW2: MOVE CS,LIMBO ;GET LAST CHAR. + MOVEM C,LIMBO ;STORE THIS CHAR. FOR RPTC + CAIN C,LF ;LF? + CAIE CS,CR ;YES,LAST CHAR. A CR? + JRST RSW3 ;NO + HRROS LIMBO ;YES,FLAG + POPJ PP, ;AND EXIT + +RSW3: TLNE IO,IOSALL ;MACRO SUPPRESS ALL? + JUMPN MRP,CPOPJ ;YES,DON'T LIST IN MACRO + SOSG CPL ;ANY ROOM IN THE IMAGE BUFFER? + PUSHJ PP,OUTPL ;NO, OUTPUT THE PARTIAL LINE + IDPB C,LBUFP ;YES, STORE IN PRINT AREA + CAIE C,HT ;TAB? + POPJ PP, ;NO, EXIT + MOVEI C,7 + ANDCAM C,CPL ;MASK +CHARAX: HRRZ C,LIMBO ;GET LAST CHARACTER + POPJ PP, ;EXIT + +CHARL: PUSHJ PP,CHARAC ;GET AND TEST 7-BIT ASCII + CAIG C,FF ;LINE OR FORM FEED OR VT? + CAIGE C,LF + POPJ PP, ;NO,EXIT + SKIPE LITLVL ;IN LITERAL? + JRST OUTIML ;YES +CHARL1: PUSHJ PP,SAVEXS ;SAVE REGISTERS + PUSHJ PP,OUTLIN ;DUMP THE LINE + JRST RSTRXS ;RESTORE REGISTERS AND EXIT + SUBTTL CHARACTER STATUS TABLE + + DEFINE GENCS (OPLVL,ATOM,AN,SQUOZ,OPTYPE,SEQNO) +<BYTE (6)OPLVL (9)ATOM (3)AN (6)SQUOZ,OPTYPE,SEQNO> + + ;OPLVL PRIORITY OF BINARY OPERATORS + ;ATOM INDEX TO JUMP TABLE AT CELL1 + ;AN TYPE OF CHARACTER + ; 1=OTHER, 2=ALPHA, 4=NUMERIC + ;SQUOZ VALUE IN RADIX 50 + ;OPTYPE INDEX TO JUMP TABLE AT EVXCT + ;SEQNO VALUE IN SIXBIT +CSTAT: + GENCS 00,00,1,00,00,00 ; ' ' + GENCS 04,12,1,00,06,01 ; '!' + GENCS 00,07,1,00,00,02 ; '"' + GENCS 00,12,1,00,00,03 ; '#' + GENCS 00,01,2,46,00,04 ; '$' + GENCS 00,01,2,47,00,05 ; '%' + GENCS 04,12,1,00,07,06 ; '&' + GENCS 00,07,1,00,00,07 ; ''' + + GENCS 00,01,1,00,00,10 ; '(' + GENCS 00,01,1,00,00,11 ; ')' + GENCS 02,12,1,00,01,12 ; '*' + GENCS 01,00,1,00,03,13 ; '+' + GENCS 40,01,1,00,00,14 ; ',' + GENCS 01,02,1,00,04,15 ; '-' + GENCS 00,11,2,45,00,16 ; '.' + GENCS 02,12,1,00,02,17 ; '/' + + GENCS 00,04,4,01,00,20 ; '0' + GENCS 00,04,4,02,00,21 ; '1' + GENCS 00,04,4,03,00,22 ; '2' + GENCS 00,04,4,04,00,23 ; '3' + GENCS 00,04,4,05,00,24 ; '4' + GENCS 00,04,4,06,00,25 ; '5' + GENCS 00,04,4,07,00,26 ; '6' + GENCS 00,04,4,10,00,27 ; '7' + + GENCS 00,04,4,11,00,30 ; '8' + GENCS 00,04,4,12,00,31 ; '9' + GENCS 00,12,1,00,00,32 ; ':' + GENCS 00,01,1,00,00,33 ; ';' + GENCS 00,05,1,00,00,34 ; '<' + GENCS 00,12,1,00,00,35 ; '=' + GENCS 00,01,1,00,00,36 ; '>' + GENCS 00,12,1,00,00,37 ; '?' + GENCS 00,03,1,00,00,40 ; '@' + GENCS 00,01,2,13,00,41 ; 'A' + GENCS 00,01,2,14,00,42 ; 'B' + GENCS 00,01,2,15,00,43 ; 'C' + GENCS 00,01,2,16,00,44 ; 'D' + GENCS 00,01,2,17,00,45 ; 'E' + GENCS 00,01,2,20,00,46 ; 'F' + GENCS 00,01,2,21,00,47 ; 'G' + + GENCS 00,01,2,22,00,50 ; 'H' + GENCS 00,01,2,23,00,51 ; 'I' + GENCS 00,01,2,24,00,52 ; 'J' + GENCS 00,01,2,25,00,53 ; 'K' + GENCS 00,01,2,26,00,54 ; 'L' + GENCS 00,01,2,27,00,55 ; 'M' + GENCS 00,01,2,30,00,56 ; 'N' + GENCS 00,01,2,31,00,57 ; 'O' + + GENCS 00,01,2,32,00,60 ; 'P' + GENCS 00,01,2,33,00,61 ; 'Q' + GENCS 00,01,2,34,00,62 ; 'R' + GENCS 00,01,2,35,00,63 ; 'S' + GENCS 00,01,2,36,00,64 ; 'T' + GENCS 00,01,2,37,00,65 ; 'U' + GENCS 00,01,2,40,00,66 ; 'V' + GENCS 00,01,2,41,00,67 ; 'W' + + GENCS 00,01,2,42,00,70 ; 'X' + GENCS 00,01,2,43,00,71 ; 'Y' + GENCS 00,01,2,44,00,72 ; 'Z' + GENCS 00,06,1,00,00,73 ; '[' + GENCS 00,12,1,00,00,74 ; '\' + GENCS 00,01,1,00,00,75 ; ']' + GENCS 00,10,1,00,00,76 ; '^' + GENCS 10,12,1,00,05,77 ; '_' + SUBTTL LISTING ROUTINES + +OUTLIN: TRNN ER,ERRORS-ERRQ ;ANY ERRORS? + TLNE FR,ERRQSW ;NO, IGNORE Q ERRORS? + TRZ ER,ERRQ ;YES, YES, ZERO THE Q ERROR + HRLZ AC0,ER ;PUT ERROR FLAGS IN AC0 LEFT + TDZ ER,TYPERR + JUMP1 OUTL30 ;BRANCH IF PASS ONE + JUMPN AC0,OUTL02 ;JUMP IF ANY ERRORS TO FORCE PRINTING + SKIPL STPX ;SKIP IF NO CODE, OTHERWISE + JRST OUTL01 ;NO + TLNN IO,IOSALL ;YES,SUPPRESS ALL? + JRST OUTL03 ;NO + JUMPN MRP,CPOPJ ;YES,EXIT IF IN MACRO + LDB C,[XWD 350700,LBUF] + CAIE C,15 ;FIRST CHAR CR? +OUTL01: TLZ IO,IOMAC ;FORCE MACRO PRINTING +OUTL03: TLNN IO,IOMSTR!IOPROG!IOMAC +OUTL02: IOR ER,OUTSW ;FORCE IT. + IDPB AC0,LBUFP ;STORE ZERO TERMINATOR AFTER ASCII SRC LINE + TLNN FR,CREFSW ;CREF? + PUSHJ PP,CLSCRF ;YES, WRITE END OF CREF DATA (177,003) + JUMPE AC0,OUTL20 ;BRANCH IF NO ERRORS + TLZE AC0,ERRM ;M ERROR? + TLO AC0,ERRP ;M ERROR SET - SET P ERROR. + PUSHJ PP,OUTLER ;PROCESS ERRORS + +OUTL20: SKIPN RC,ASGBLK + SKIPE CS,LOCBLK ; + SKIPL STPX ;ANY BINARY? + JRST OUTL23 ;YES, JUMP + JUMPE RC,OUTL22 ;SEQUENCE BREAK AND NO BINARY JUMPS + ILDB C,TABP ;ASSIGNMENT FALLS THROUGH + PUSHJ PP,OUTL ;OUTPUT A TAB. + ILDB C,TABP ;OUTPUT 2ND TAB, LOCATION FIELD + PUSHJ PP,OUTC ;NEXT IS BINARY LISTING FIELD + HLLO CS,LOCBLK ;LEFT HALF OF A 36BIT VALUE + JUMPL RC,.+2 ;SKIP IF LEFT HALF IS NOT RELOC + TRZA CS,1 ;IT IS, SET THE FLAG + TLNE CS,-1 ;SKIP IF ITS A 18BIT VALUE, OTHERWISE + PUSHJ PP,ONC1 ;PRINT LH OF A 36 BIT VALUE IN CS + HRLO CS,LOCBLK ;PICK UP THE RIGHT HALF (18BIT VALUE) + TRZ CS,0(RC) ; + PUSHJ PP,ONC ;PRINT IT + JRST OUTL23 ;SKIP SINGLE QUOTE TEST + OUTL22: PUSHJ PP,ONC ;TAB TO RH AND PRINT IT + MOVEI C,"'" + SKIPE MODA + PUSHJ PP,OUTC +OUTL23: SKIPL STPX ;ANY BINARY? + PUSHJ PP,BOUT ;YES, DUMP IT + MOVE CS,@OUTLI2 ;[POINT 7,LBUF] +OUTL24: ILDB C,CS + JUMPE C,OUTL25 + CAIG C," " + JRST OUTL24 + MOVE CS,TABP + PUSHJ PP,OUTASC ;OUTPUT TABS +OUTL25: MOVEI CS,LBUF + PUSHJ PP,OUTAS0 ;DUMP THE LINE + TLNE IO,IOSALL ;SUPPRESSING ALL + JUMPN MRP,OUTL27 ;YES,EXTRA CR IF IN MACRO +OUTL26: SKIPGE STPX ;ANY BINARY? + JRST OUTLI ;NO, CLEAN UP AND EXIT + PUSHJ PP,OUTLI2 ;YES, INITIALIZE FOR NEXT LINE + PUSHJ PP,BOUT ;YES, DUMP IT +OUTL27: PUSHJ PP,OUTCR ;OUTPUT CARRIAGE RETURN + JRST OUTL26 ;TEST FOR MORE BINARY + +OUTPL: SKIPN LITLVL ;IF IN LITERAL + SKIPL STPX ;OR CODE GENERATED + JRST OUTIM ;JUST OUTPUT THE IMAGE + SKIPN ASGBLK ;SKIP IF AN ASSIGNMENT + JRST OUTIM ;OTHERWISE OUTPUT IMAGE + PUSH PP,C ;SAVE CHAR. + MOVEI C,CR + IDPB C,LBUFP + MOVEI C,LF + IDPB C,LBUFP ;FINISH WITH CRLF + PUSHJ PP,OUTLIN ;OUTPUT PARTIAL LINE + POP PP,C ;RESTORE CHAR. + JRST OUTLI2 ;INITIALISE REST OF LINE + OUTL30: AOS CS,STPX ;PASS ONE + ADDM CS,LOCO ;INCREMENT OUTPUT LOCATION + PUSHJ PP,STOWI ;INITIALIZE STOW + TLZ AC0,ERRORS-ERRM-ERRP-ERRV + JUMPN AC0,OUTL32 ;JUMP IF ERRORS + TLNE IO,IOSALL ;SUPPRESSING ALL/ + JUMPN MRP,CPOPJ ;YES,EXIT + JRST OUTLI1 ;NO,INIT LINE + +OUTL32: IDPB AC0,LBUFP ;ZERO TERNIMATOR + IOR ER,OUTSW ;LIST ERRORS + MOVEI CS,TAG + PUSHJ PP,OUTSIX ;OUTPUT TAG + HRRZ C,TAGINC + PUSHJ PP,DNC ;CONVERT INCREMENT TO DECIMAL + PUSHJ PP,OUTTAB ;OUTPUT TAB + PUSHJ PP,OUTLER ;OUTPUT ERROR FLAGS + PUSHJ PP,OUTTAB + MOVEI CS,SEQNO ;ADDRESS OF SEQUENCE NO. + SKIPE SEQNO ;FILE NOT SEQUENCED + PUSHJ PP,OUTAS0 ;OUTPUT IT + JRST OUTL25 ;OUTPUT BASIC LINE + +OUTLER: PUSH PP,ER ;SAVE LISTING SWITCHES FOR LATER + TRNE ER,TTYSW ;IF THIS IS ON, LISTING IS ON TTY + TRZ ER,ERRORS ;SO SUPPRESS ON TTY + TDZ ER,OUTSW ;BUT THIS SHOULD ONLY GO TO THE TTY + MOVE CS,INDIR ;GET FILE NAME + CAME CS,LSTFIL ;AND SEE IF SAME + JRST [MOVEM CS,LSTFIL ;SAVE AS LAST ONE + MOVEI CS,LSTFIL + PUSHJ PP,OUTSIX ;LIST NAME + MOVEI C," " + PUSHJ PP,OUTL + MOVE CS,PAGENO ;PRINT PAGE NUMBER TOO + JRST OUTLE8] + MOVE CS,PAGENO ;NOW CHECK PAGE NUMBER + CAME CS,LSTPGN +OUTLE8: JRST [MOVEM CS,LSTPGN + MOVEI CS,[ASCIZ /PAGE /] + PUSHJ PP,OUTAS0 + MOVE C,PAGENO + PUSHJ PP,DNC + PUSHJ PP,OUTCR ;AND NOW FOR THE ERROR LINE + JRST .+1] + HLLM ER,(PP) ;RESTORE ER BUT NOT IO (LEFT HALF OF AC) + POP PP,ER + MOVE CS,[POINT 7,[ASCII / QXADLRUVNOPEM/]] +OUTLE2: ILDB C,CS ;GET ERROR MNEMONIC + JUMPGE AC0,OUTLE4 ;BRANCH IF NOT FLAGGED + PUSHJ PP,OUTL ;OUTPUT THE CHARACTER + AOS ERRCNT ;INCREMENT ERROR COUNT +OUTLE4: LSH AC0,1 ;SHIFT NEXT FLAG INTO SIGN BIT + JUMPN AC0,OUTLE2 ;TEST FOR END + POPJ PP, ;EXIT + OUTIM1: TLOA FR,IOSCR ;SUPPRESS CRLF AFTER LINE +OUTIM: TLZ FR,IOSCR ;DON'T FOR PARTIAL LINE + TLNE IO,IOSALL ;SUPPRESSING ALL? + JUMPN MRP,CPOPJ ;YES ,EXIT IF IN MACRO + JUMP1 OUTLI1 ;BYPASS IF PASS ONE + PUSH PP,ER + TDZ ER,TYPERR + TLNN IO,IOMSTR!IOPROG!IOMAC + IOR ER,OUTSW + PUSH PP,C ;OUTPUT IMAGE + TLNN FR,CREFSW + PUSHJ PP,CLSCRF +OUTIM2: MOVE CS,TABP + PUSHJ PP,OUTASC ;OUTPUT TABS + IDPB C,LBUFP ;STORE ZERO TERMINATOR + MOVEI CS,LBUF + PUSHJ PP,OUTAS0 ;OUTPUT THE IMAGE + TLZN FR,IOSCR ;CRLF SUPPRESS? + PUSHJ PP,OUTCR ;NO,OUTPUT + POP PP,C + HLLM ER,0(PP) + POP PP,ER + JRST OUTLI2 + +OUTLI: TLNE IO,IOSALL ;SUPPRESSING ALL + JUMPN MRP,OUTLI3 ;YES,SET FLAG IN REPEATS ALSO + TLNE IO,IOPALL ;MACRO EXPANSION SUPRESS REQUESTED? + SKIPN MACLVL ;YES, ARE WE IN MACRO? + TLZA IO,IOMAC ;NO, CLEAR MAC FLAG +OUTLI3: TLO IO,IOMAC ;YES, SET FLAG + +OUTLI1: TRZ ER,ERRORS!LPTSW!TTYSW +OUTLI2: MOVE CS,[POINT 7,LBUF] ;INITIALIZE BUFFERS + MOVEM CS,LBUFP + MOVE CS,[POINT 7,TABI,6] + MOVEM CS,TABP + MOVEI CS,.CPL + MOVEM CS,CPL + MOVSI CS,(ASCII / /) + SKIPE SEQNO ;HAVE WE SEQUENCE NUMBERS? + MOVEM CS,SEQNO ;YES, STORE TAB IN CASE OF MACRO + MOVEM CS,SEQNO+1 ;STORE TAB AND TERMINATOR + SETZM ASGBLK + SETZM LOCBLK + POPJ PP, + OUTIML: TLNE IO,IOSALL ;SUPPRESSING ALL? + JUMPN MRP,CPOPJ ;YES,EXIT IF IN MACRO + TRNN ER,ERRORS-ERRQ ;FOR LITERALS (MULIT-LINE) OUTPUT ERRORS + TLNE FR,ERRQSW + TRZ ER,ERRQ + HRLZ CS,ER + JUMP1 OUTML1 ;CHECK PASS1 ERRORS + TDZ ER,TYPERR + JUMPE CS,OUTIM1 + PUSH PP,[0] ;ERRORS SHOULD BE ZEROED + PUSH PP,C + PUSH PP,AC0 ;SAVE AC0 IN CASE CALLED FROM ASCII + MOVE AC0,CS ;ERROR ROUTINE WANTS FLAGS IN AC0 + IOR ER,OUTSW + TLNN FR,CREFSW + PUSHJ PP,CLSCRF ;FIX CREF + TLZE AC0,ERRM + TLO AC0,ERRP + PUSHJ PP,OUTLER ;OUTPUT THEM + POP PP,AC0 + JRST OUTIM2 ;AND LINE + +OUTML1: TLZ CS,ERRORS-ERRM-ERRP-ERRV + JUMPE CS,OUTLI2 ;NONE + TRZ ER,ERRM!ERRP!ERRV + TRO ER,ERRL + PUSH PP,ER ;SAVE + PUSH PP,C ;SAVE THIS + PUSH PP,AC0 ;AS ABOVE + MOVE AC0,CS ;... + TDZ ER,TYPERR + IOR ER,OUTSW + MOVEI CS,TAG + PUSHJ PP,OUTSIX + HRRZ C,TAGINC + PUSHJ PP,DNC + PUSHJ PP,OUTTAB + PUSHJ PP,OUTLER ;DO NOT FORGET ERRORS + PUSHJ PP,OUTTAB + MOVEI CS,LBUF ;PRINT REST OF LINE + PUSHJ PP,SOUT20 + POP PP,AC0 + POP PP,C + POP PP,ER + JRST OUTLI2 + SUBTTL OUTPUT ROUTINES +UOUT: PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + TRNN ARG,PNTF ;WFW + TRNN ARG,UNDF + JRST UOUT13 ;TEST FOR UNDF!EXTF!PNTF ON PASS2 + JUMP2 UOUT10 + TLNN IO,IOIOPF ;ANY IOP'S SEEN + JRST UOUT12 ;NO,MAKE EXTERNAL + MOVSI CS,PRMTBL-PRMEND;YES LOOKUP IN TABLE +UOUT1: CAME AC0,PRMTBL(CS) ;HAVE WE A MATCH? + AOBJN CS,UOUT2 ;NO,INCREMENT AND JUMP + MOVE ARG,PRMTBL+1(CS);YES,GET VALUE + MOVEM ARG,(SX) ;UPDATE SYMBOL TABLE + POPJ PP, ;EXIT +UOUT2: AOBJN CS,UOUT1 ;TEST FOR END + +UOUT12: PUSHJ PP,EXTER2 ;MAKE IT EXTERNAL + MOVSI ARG,UNDF ;BUT PUT UNDF BACK ON + IORM ARG,(SX) ;SO MESSAGE WILL COME OUT + POPJ PP, ;GET NEXT SYMBOL + +UOUT13: JUMP1 CPOPJ ;RECYCLE ON PASS1 + TRC ARG,UNDF!EXTF!PNTF ;CHECK FOR ALL THREE ON + TRCE ARG,UNDF!EXTF!PNTF ;ARE THEY? + POPJ PP, ;NO, RECYCLE +UOUT10: PUSHJ PP,OUTCR + PUSHJ PP,OUTSYM ;OUTPUT THE SYMBOL + MOVEI CS,[SIXBIT /UNASSIGNED, DEFINED AS IF EXTERNAL @/] + JRST OUTSIX ;POPJ FOR NEXT SYMBOL + +UOUT30: PUSHJ PP,ONC1 ;OUTPUT THE LOCATION + JRST HIGHQ ;EXIT THROUGH HIGHQ + ;OUTPUT THE ENTRIES + +EOUT: MOVEI C,0 ;INITIALIZE THE COUNT + MOVE SX,SYMBOL + MOVE SDEL,0(SX) +EOUT1: SOJL SDEL,EOUT2 ;TEST FOR END + ADDI SX,2 + HLRZ ARG,0(SX) + ANDCAI ARG,SYMF!INTF!ENTF + JUMPN ARG,EOUT1 ;IF INVALID, DON'T COUNT + AOJA C,EOUT1 ;BUMP COUNT + +EOUT2: HRLI C,4 ;BLOCK TYPE 4 + PUSHJ PP,OUTBIN + SETZB C,ARG + PUSHJ PP,OUTBIN + MOVE SX,SYMBOL + MOVE SDEL,0(SX) + MOVEI V,^D18 + +EOUT3: SOJL SDEL,POPOUT + ADDI SX,2 + HLRZ C,0(SX) + ANDCAI C,SYMF!INTF!ENTF + JUMPN C,EOUT3 + SOJGE V,EOUT4 ;TEST END OF BLOCK + PUSHJ PP,OUTBIN + MOVEI V,^D17 ;WFW +EOUT4: MOVE AC0,-1(SX) + PUSHJ PP,SQOZE + MOVE C,AC0 + PUSHJ PP,OUTBIN + JRST EOUT3 + ;OUTPUT THE SYMBOLS + +SOUT: SKIPN IONSYM ;SKIP IF NOSYM SEEN + TRNN ER,LPTSW!TTYSW ;A LISTING REQUIRED? + JRST SOUT1 ;NO + MOVEI [ASCIZ /SYMBOL TABLE/] + HRRM SUBTTX ;SET NEW SUB-TITLE + PUSHJ PP,OUTFF ;FORCE NEW PAGE + PUSHJ PP,LOUT1 ;OUTPUT THEM + JRST SOUT1 ;NOW FOR BLOCK TYPE 2 + +LOUT1: PUSHJ PP,LLUKUP ;SET FOR TABLE SCAN + TRNN ARG,SYMF + TRNN ARG,MACF!SYNF + TDZA MRP,MRP ;SKIP AND CLEAR MRP + POPJ PP, ;NO, TRY AGAIN + TRNE ARG,INTF + MOVEI MRP,1 + TRNE ARG,EXTF + MOVNI MRP,1 ;MRP=-1 FOR EXTERNAL + TRNE ARG,SYNF ;SYNONYM? + JUMPL MRP,POPOUT ;YES, DON'T OUTPUT IF EXTERNAL + TRNE ARG,SUPRBT ;IF SUPRESSED +; JUMPGE MRP,POPOUT ;DO NOT OUTPUT UNLESS EXTERNAL + POPJ PP, ;DO NOT OUTPUT + AOS (PP) ;SET FOR SKIP RETURN IF SYMBOL IS PRINTED + JUMPGE MRP,LOUT10 ;BRANCH IF NOT EXTERNAL + HLRZ RC,V ;PUT POINTER/FLAGS IN RC + TRNE RC,-2 ;POINTER? + MOVS RC,0(RC) ;YES + HLL V,RC ;STORE LEFT VALUE + +LOUT10: PUSH PP,RC ;SAVE FOR LATER + PUSHJ PP,OUTSYM ;OUTPUT THE NAME + MOVE RC,(PP) ;GET COPY + MOVEI AC1,0 + JUMPLE MRP,LOUT15 ;SET DEFFERRED BITS IF EXTERNAL + TLNE RC,-2 ;CHECK FOR LEFT FIXUP + IORI AC1,40 ;AND SET BITS + TRNE RC,-2 ;CHECK FOR RIGHT FIXUP + IORI AC1,20 ;AND SET BITS +LOUT15: TLNE RC,-2 ;FIX RELOC AS 0 IF EXTERNAL + HRRZS RC + TRNE RC,-2 + HLLZS RC + TLZE RC,-1 + TRO RC,2 + HRL MRP,RC + MOVEI RC,0 + TRNE ARG,ENTF ;ENTRY DMN + HRRI MRP,-5 + TRNE ARG,NOOUTF ;SUPRESS OUTPUT? WFW + ADDI MRP,3 ;YES WFW + TRNE ARG,UNDF ;UNDEFINED IS EXTERNAL + HRRI MRP,2 ;SO FLAG AS UXT + IOR AC1,SOUTC(MRP) + MOVE ARG,AC1 + MOVEM AC0,SVSYM ;SAVE IT + MOVE AC0,V ;GET THE VALUE + HLRZ RC,MRP ;AND THE RELOCATION + HLLO CS,V + TRNE RC,2 ;LEFT HALF RELOCATABLE? + TRZA CS,1 ;NO, FLAG AND PRINT + TLNE CS,-1 ;IS THE LEFT HALF ZERO? + PUSHJ PP,ONC1 ;NO, OUTPUT IT +LOUT11: PUSHJ PP,OUTTAB +LOUT30: HRLO CS,V + TDZ CS,RC ;SET RELOCATION + PUSHJ PP,ONC1 + PUSHJ PP,OUTTAB + POP PP,RC ;GET BACK RELOC AND CHECK EXTERNAL +LOUT60: MOVEI CS,SOUTC(MRP) + PUSHJ PP,OUTAS0 ;EXT/INT +LOUT64: JRST OUTCR ;CARRIAGE RETURN AND TRY FOR ANOTHER + + + SYN IFBLK,SYMBLK ;SOMEWHERE TO STORE THE POINTERS + +LLUKUP: POP PP,LOOKX ;INTERCEPT RETURN POP + MOVE SX,SYMBOL + MOVE SDEL,(SX) + ADDI SX,2 ;SKIP COUNT OF SYMBOLS +LLUKP2: MOVEM SX,SYMBLK ;STORE SYMBOL POINTER IN TABLE + HRRZ SX,SYMBLK + JRST LLUKP7 ;ENTER LOOP + +LLUKP1: MOVEM SX,SYMBLK ;SAVE IT + MOVE AC0,-1(SX) + PUSHJ PP,SRCH7 + HLRZS ARG + PUSHJ PP,@LOOKX + JRST [MOVEM SX,SYMBLK + JRST .+1] +LLUKP7: SOJL SDEL,POPOUT ;TEST FOR END +LLUKP3: MOVE SX,SYMBLK ;GET NEXT POINTER + AOBJP SX,LLUKP4 + HRRZ V,SX + CAMG V,SYMTOP + AOJA SX,LLUKP1 +LLUKP6: PUSHJ PP,LOUT64 ;RESET SYMCNT + JUMPE SDEL,POPOUT ;EXIT IF ALL DONE + JRST LLUKP3 + +LLUKP4: AOJ SX, + MOVEM SX,SYMBLK + JRST LLUKP3 + SOUT1: PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + TRNN ARG,SYMF + TRNN ARG,MACF!SYNF + TDZA MRP,MRP ;SKIP AND CLEAR MRP + POPJ PP, ;NO, TRY AGAIN + TRNE ARG,INTF + MOVEI MRP,1 + TRNE ARG,EXTF + MOVNI MRP,1 ;MRP=-1 FOR EXTERNAL + TRNE ARG,SYNF ;SYNONYM? + JUMPL MRP,POPOUT ;YES, DON'T OUTPUT IF EXTERNAL + TRNE ARG,SUPRBT ;IF SUPRESSED +; JUMPGE MRP,POPOUT ;DO NOT OUTPUT UNLESS EXTERNAL + POPJ PP, ;DO NOT OUTPUT + JUMPGE MRP,SOUT10 ;BRANCH IF NOT EXTERNAL + HLRZ RC,V ;PUT POINTER/FLAGS IN RC + TRNE RC,-2 ;POINTER? + MOVS RC,0(RC) ;YES + HLL V,RC ;STORE LEFT VALUE + +SOUT10: PUSH PP,RC ;SAVE FOR LATER + MOVEI AC1,0 + JUMPLE MRP,SOUT15 ;SET DEFFERRED BITS IF EXTERNAL + TLNE RC,-2 ;CHECK FOR LEFT FIXUP + IORI AC1,40 ;AND SET BITS + TRNE RC,-2 ;CHECK FOR RIGHT FIXUP + IORI AC1,20 ;AND SET BITS +SOUT15: TLNE RC,-2 ;FIX RELOC AS 0 IF EXTERNAL + HRRZS RC + TRNE RC,-2 + HLLZS RC + TLZE RC,-1 + TRO RC,2 + HRL MRP,RC + MOVEI RC,0 + TRNE ARG,ENTF ;ENTRY DMN + HRRI MRP,-5 + TRNE ARG,NOOUTF ;SUPRESS OUTPUT? WFW + ADDI MRP,3 ;YES WFW + IOR AC1,SOUTC(MRP) + MOVE ARG,AC1 + PUSHJ PP,NOUT2 ;SQUOZE AND DUMP THE SYMBOL + MOVEM AC0,SVSYM ;SAVE IT + MOVE AC0,V ;GET THE VALUE + HLRZ RC,MRP ;AND THE RELOCATION + PUSHJ PP,COUT + POP PP,RC ;GET BACK RELOC AND CHECK EXTERNAL + TRNN RC,-2 ;IS IT? + JRST SOUT50 ;NO + MOVE AC0,1(RC) ;GET NAME + MOVEI ARG,60 ;EXTERNAL REQ + PUSHJ PP,SQOZE + HLLZS RC ;NO RELOC + PUSHJ PP,COUT ;OUTPUT IT + MOVE AC0,SVSYM ;GET SYMBOL NAME + TLO AC0,500000 ;SET AS ADDITIVE SYMBOL + TLZ AC0,200000 ;BUT NOT LEFT HALF ETC + PUSHJ PP,COUT +SOUT50: MOVSS RC ;CHECK LEFT HALF + TRNN RC,-2 + JRST SOUT60 + MOVE AC0,1(RC) + MOVEI ARG,60 + PUSHJ PP,SQOZE + MOVEI RC,0 + PUSHJ PP,COUT + MOVE AC0,SVSYM + TLO AC0,700000 + PUSHJ PP,COUT +SOUT60: POPJ PP, + +SOUT20: PUSHJ PP,OUTAS0 + JRST OUTCR + + <ASCII /ENT/>!04 ;DMN + Z + Z + <ASCII /SEN/>!44 ;SUPRESSED ENTRY + <ASCII /EXT/>!60 +SOUTC: EXP 10 + <ASCII /INT/>!04 + <ASCII /UXT/>!60 ;UNDEFINED EXTERNAL + <ASCII /SPD/>!50 + <ASCII /SIN/>!44 ;DMN + ;OUTPUT THE BINARY + +BOUT: HRLO CS,LOCO ;PICKUP THE LOCATION + PUSHJ PP,ONC ;OUTPUT IT TO THE LISTING FILE + MOVEI C,"'" + SKIPE MODO ;IF MODE IS NOT ABSOLUTE + PUSHJ PP,OUTC ;PRINT A SINGLE QUOTE + PUSHJ PP,DSTOW ;GET THE CODE + PUSH PP,RC ;SAVE RELOC + PUSH PP,RC ;AND AGAIN + TLNE RC,-2 ;CHECK LEFT EXTERNAL + HRRZS RC ;MAKE LEFT NON-RELOC + TRNN RC,-2 ;RIGHT EXT? + JRST BOUT30 ;NO + HRRZ AC1,AC0 ;YES + JUMPE AC1,BOUT20 ;PROCESS IF ZERO CODE THERE + HLLZS RC ;MAKE NON-RELOC + JRST BOUT30 ;PROCESS + + BOUT20: + HRRM AC1,-1(PP) ;FIX RC IN STACK SO NO CONFUSION WFW (AC1 HAS 0) + HRR AC0,0(RC) ;NO, SET ADDRESS LINK + MOVE AC1,LOCO ;GET CURRENT LOCATION + HRRM AC1,0(RC) ;SET NEW LINK + HLRZ AC1,0(RC) ;GET FLAGS/POINTER + TRNN AC1,-2 ;POINTER? + HRR AC1,RC ;NO, SET TO FLAGS + HLR RC,0(AC1) ;PUT FLAGS IN RC + HRL AC1,MODO ;GET CURRENT MODE + TRZE RC,-2 ;LEFT HALF RELOCATABLE+ + TLO AC1,2 ;YES, SET FLAG + HLLM AC1,0(AC1) ;STORE NEW FLAGS +BOUT30: HLLO CS,AC0 + TLZE RC,1 ;PACK RELOCATION BITS + TRO RC,2 + TRNE RC,2 ;LEFT HALF RELOCATABLE? + TRZ CS,1 ;YES, RESET BIT + PUSH PP,AC0 ;NEED AN AC + HLRZ AC0,-1(PP) ;AC0 = LEFT RELOCATION + CAILE AC0,1 ;EXTERNAL? + XORI CS,EXTF!1 ;YES, SET SWITCH + POP PP,AC0 ;RESTORE + PUSHJ PP,ONC + HRLO CS,AC0 + TDZ CS,RC ;SET RELOCATION + HRRZ C,(PP) ;C = RIGHT RELOCATION + CAILE C,1 ;EXTERNAL + XORI CS,EXTF!1 ;YES, SET SWITCH + PUSHJ PP,ONC +BOUT3I: POP PP,CS ;GET RID OF ENTRY ON STACK + HRRZ CS,LOCO + TLNE FR,RIMSW!RIM1SW!R1BSW ;RIM OUTPUT? + JRST ROUT ;YES, GO PROCESS + + HRL CS,MODO + CAME CS,MODLOC ;SEQUENCE OR RELOCATION BREAK? + PUSHJ PP,COUTD ;YES, DUMP THE BUFFER + SKIPL COUTX ;NEW BUFFER? + JRST BOUT40 ;NO, STORE CODE AND EXIT + MOVEM CS,MODLOC ;YES, STORE NEW VALUES + EXCH AC0,LOCO + EXCH RC,MODO + PUSHJ PP,COUT ;STORE BLOCK LOCATION AND MODE + EXCH RC,MODO ;RESTORE CURRENT VALUES + EXCH AC0,LOCO + + BOUT40: PUSHJ PP,COUT ;EMIT CODE + POP PP,RC ;RETRIEVE EXTERNAL BITS + TRNN RC,-2 ;RIGHT EXTERNAL? + JRST BOUT50 ;TRY FOR LEFT + PUSHJ PP,COUTD + PUSH PP,BLKTYP ;TERMINATE TYPE AND SAVE + MOVEI AC0,2 ;BLOCK TYPE 2 + MOVEM AC0,BLKTYP + MOVE AC0,1(RC) ;GET SYMBOL + MOVEI ARG,60 ;CODE BITS + PUSHJ PP,SQOZE ;CONVERT TO RADIX 50 + HLLZS RC ;SYMBOL HAS NO RELOCATION + PUSHJ PP,COUT ;EMIT + MOVE AC0,LOCO ;GET CURRENT LOC + HRLI AC0,400000 ;ADDITIVE REQ + HRR RC,MODO ;CURRENT MODE + PUSHJ PP,COUT ;EMIT + MOVSS RC ;NOW FOR LEFT + TRNN RC,-2 + JRST BOUT60 + JRST BOUT70 +BOUT50: MOVSS RC ;CHECK OTHER HALF + TRNN RC,-2 ;LEFT HALF EXTERNAL? + JRST BOUT80 ;NO, FALSE ALARM + PUSHJ PP,COUTD ;CHANGE MODE + PUSH PP,BLKTYP + MOVEI AC0,2 + MOVEM AC0,BLKTYP +BOUT70: MOVE AC0,1(RC) + MOVEI ARG,60 + PUSHJ PP,SQOZE + HLLZS RC + PUSHJ PP,COUT + MOVE AC0,LOCO + HRLI AC0,600000 ;LEFT HALF ADD + HRR RC,MODO + PUSHJ PP,COUT ;EMIT +BOUT60: PUSHJ PP,COUTD ;CHANGE MODE + POP PP,BLKTYP ;TO OLD ONE +BOUT80: AOS LOCO + AOS MODLOC + POPJ PP, + + NOUT: MOVE V,[POINT 7,TBUF] ;POINTER TO ASCII LINE + MOVSI CS,(POINT 6,AC0) ;POINTER TO SIXBIT AC0 + SETZB ARG,AC0 +NOUT1: ILDB C,V ;GET ASCII + CAIL C,"A"+40 + CAILE C,"Z"+40 + JRST .+2 + TRZA C,100 ;LOWER CASE TO SIXBIT + SUBI C,40 ;CONVERT TO SIXBIT + JUMPLE C,NOUT3 ;TEST FORM NON-SIXBIT + CAILE C,77 ;AND NOT GREATER THAN SIXBIT + JRST NOUT3 ;... + IDPB C,CS ;DEPOSIT IN AC0 + TLNE CS,770000 ;TEST FOR SIX CHARACTERS + JRST NOUT1 ;NO, GET ANOTHER +NOUT3: +IFN UNIVR,<SKIPGE UNIVSN ;IF A UNIVERSAL PROG> + POPJ PP, ;RETURN TO PUT IT IN THE TABLE + +IFN CCLSW,< TLNN IO,IOTLSN ;AND IF WE HAVE NOT SEEN A TITLE + PUSHJ PP,PRNAM ;THEN PRINT THE NAME> +NOUT2: PUSHJ PP,SQOZE ;CONVERT TO SIXBIT + JRST COUT ;DUMP AND EXIT + +HOUT: + MOVEI RC,1 ;RELOCATABLE +IFN RENTSW,< + MOVE AC0,HHIGH ;GET HIGH SEG IF TWO SEGMENTS + JUMPE AC0,.+2 ;NOT TWO SEGMENTS + PUSHJ PP,COUT ;OUTPUT IT > + MOVE AC0,HIGH +IFN RENTSW,< + SKIPE HHIGH ;ANY TWOSEG HIGH STUFF + JRST COUT ;YES,SO NO ABS.> + PUSHJ PP,COUT ;OUTPUT THE HIGHEST LOCATION + MOVE AC0,ABSHI + ;PUT OUT ABS PORTION OF PROGRAM BREAK + SOJA RC,COUT ;OUTPUT A WORD OF ZERO AND EXIT + + IFN RENTSW,< +HSOUT: SETZM HISNSW ;CLEAR FOR PASS2 + MOVE AC0,SVTYP3 ;GET HISEG ARG + JUMPGE AC0,.+4 ;JUMP IF ONLY HISEG + HRL AC0,HIGH1 ;GET BREAK FROM PASS 1 + JUMPL AC0,.+2 ;OK IF GREATER THAN 400000 + HRLS AC0 ;SIGNAL TWO SEGMENT TO LOADER + MOVEI RC,1 ;ASSUME RELOCATABLE + JRST COUT ;OUTPUT THE WORD> + +VOUT: SKIPN RC,VECREL ;IS VECTOR ABSOLUTE ZERO? + SKIPE VECTOR ;ALSO CHECK RELOCATION + JRST .+2 + POPJ PP, ;YES, EXIT + MOVE AC0,VECTOR ;AC0 SHOULD BE FLAGS + +COUT: AOS C,COUTX ;INCREMENT INDEX + MOVEM AC0,COUTDB(C) ;STORE CODE + IDPB RC,COUTP ;STORE RELOCATION BITS + CAIE C,^D17 ;IS THE BUFFER FULL? + POPJ PP, ;NO, EXIT + +COUTD: AOSG C,COUTX ;DUMP THE BUFFER + JRST COUTI ;BUFFER WAS EMPTY + HRL C,BLKTYP ;SET BLOCK TYPE + PUSHJ PP,OUTBIN ;OUTPUT COUNT AND TYPE + SETOB C,COUTY ;INITIALIZE INDEX + +COUTD2: MOVE C,COUTDB(C) ;GET RELOCATION BITS/CODE + PUSHJ PP,OUTBIN ;DUMP IT + AOS C,COUTY ;INCREMENT INDEX + CAMGE C,COUTX ;TEST FOR END + JRST COUTD2 ;NO, GET NEXT WORD + +COUTI: SETOM COUTX ;INITIALIZE BUFFER INDEX + SETZM COUTRB ;ZERO RELOCATION BITS + MOVE C,[POINT 2,COUTRB] + MOVEM C,COUTP ;INITIALIZE BIT POINTER + POPJ PP, ;EXIT + STOWZ1: +STOWZ: MOVEI RC,0 +STOW: + JUMP1 STOW20 ;SKIP TEST IF PASS ONE + TRNE RC,-2 ;RIGHT HALF ZERO OR 1? + PUSHJ PP,STOWT ;NO, HANDLE EXTERNAL + TLNN RC,-2 ;LEFT HALF ZERO OR 1? WFW + JRST STOW10 ;YES, SKIP TEST + MOVSS RC ;SWAP HALVES + PUSHJ PP,STOWT1 ;HANDLE EXTERNAL WFW + MOVSS RC ;RESTORE VALUES + +STOW10: SKIPE EXTPNT ;ANY EXTERNALS REMAINING? + TRO ER,ERRE ;YES, SET EXTERNAL ERROR FLAG + +STOW20: AOS AC1,STPX ;INCREMENT POINTER + MOVEM AC0,STCODE(AC1) ;STOW CODE + MOVEM RC,STOWRC(AC1) ;STOW RELOCATION BITS + SKIPN LITLVL ;ARE WE IN LITERAL? + AOS LOCA ;NO, INCREMENT ASSEMBLY LOCATION + CAIGE AC1,.STP-1 ;OVERFLOW? + POPJ PP, ;NO, EXIT + + SKIPE LITLVL ;ARE WE IN A LITERAL? + TROA ER,ERRL ;YES, FLAG ERROR BUT DON'T DUMP + JRST CHARL1 ;NO, SAVE REGISTERS AND DUMP THE BUFFER + JRST STOWI ;INITIALIZE BUFFER + +DSTOW: AOS AC1,STPY ;INCREMENT POINTER + MOVE AC0,STCODE(AC1) ;FETCH CODE + MOVE RC,STOWRC(AC1) ;FETCH RELOCATION BITS + CAMGE AC1,STPX ;IS THIS THE END? + POPJ PP, ;NO, EXIT + +STOWI: SETOM STPX ;INITIALIZE FOR INPUT + SETOM STPY ;INITIALIZE FOR OUTPUT + SETZM EXTPNT + POPJ PP, ;EXIT + SVSTOW: AOS LITLVL ;NESTED LITERALS + PUSH PP,STPX ;MAKE ROOM FOR ANOTHER + PUSH PP,STPY + MOVE AC1,STPX + MOVEM AC1,STPY + JRST 0(AC2) + +GTSTOW: POP PP,STPY ;BACK UP A LEVEL + POP PP,STPX + SOS LITLVL + JRST 0(AC2) + + ;EXTERNAL RIGHT +STOWT: HRRZ AC1,EXTPNT ;GET RIGHT POINTER + CAIE AC1,(RC) ;DOES IT MATCH + PUSHJ PP,QEXT ;EXTERNAL OR RELOCATION ERROR + HLLZS EXTPNT + POPJ PP, ;EXIT + + ;EXTERNAL LEFT +STOWT1: HLRZ AC1,EXTPNT ;GET LEFT HALF + CAIE AC1,(RC) ;SEE ABOVE + PUSHJ PP,QEXT + HRRZS EXTPNT + POPJ PP, ;EXIT + ONC: ILDB C,TABP ;ENTRY TO ADVANCE TAB POINTER + PUSHJ PP,OUTL ;OUTPUT A TAB + ;OUTPUT 6 OCT NUMBERS FROM CS LEFT +ONC1: MOVEI C,6 ;CONVERT TO ASCII + LSHC C,3 ;SHIFT IN OCTAL + PUSHJ PP,OUTL ;OUTPUT ASCII FROM C + TRNE CS,-1 ;ARE WE THROUGH? + JRST ONC1 ;NO, GET ANOTHER + MOVEI C,0 ;CLEAR C + TLNN CS,1 ;RELOCATABLE? + MOVEI C,"'" ;YES + TLNN CS,EXTF ;OR EXTERNAL + MOVEI C,"*" ;YES +ONC2: JUMPN C,OUTC ;OUTPUT IF EXTERN OR RELOCATABLE + POPJ PP, ;EXIT + +DNC: IDIVI C,^D10 + HRLM CS,0(PP) + JUMPE C,.+2 + PUSHJ PP,DNC ;RECURSE IF NON-ZERO + HLRZ C,0(PP) + ADDI C,"0" ;FORM ASCII + JRST PRINT ;DUMP AND TEST FOR END + +OUTAS0: HRLI CS,(POINT 7,,) ;ENTRY TO SET POINTER +OUTASC: ILDB C,CS ;GET NEXT BYTE + JUMPE C,POPOUT ;EXIT ON ZERO DELIMITER + PUSHJ PP,PRINT + JRST OUTASC + +OUTSIX: HRLI CS,(POINT 6,,) ;OUTPUT SIXBIT + ILDB C,CS ;GET SIXBIT + CAIN C,40 ;"@" DELIMITER? + POPJ PP, ;YES, EXIT + ADDI C,40 ;NO, FORM ASCII + PUSHJ PP,OUTL ;OUTPUT ASCII CHAR FROM C + JRST OUTSIX+1 + +OUTSYM: MOVE CS,AC0 ;PLACE NAME IN CS +OUTSY1: MOVEI C,0 ;CLEAR C + LSHC C,6 ;MOVE NEXT SIXBIT CHARACTER IN + JUMPE C,OUTTAB ;TEST FOR END + ADDI C,40 ;CONVERT TO ASCII + PUSHJ PP,OUTL ;OUTPUT + JRST OUTSY1 ;LOOP + OUTSET: AOS SX,0(PP) ;GET RETURN LOCATION + MOVE SX,-1(SX) ;GET XWD CODE + HLRM SX,BLKTYP ;SET BLOCK TYPE + SETZB ARG,RC + PUSHJ PP,0(SX) ;GO TO PRESCRIBED ROUTINE + JRST COUTD ;TERMINATE BLOCK AND EXIT + + ;LOOKUP SCANS ALL THE SYMBOLS IN THE SYMBOL TABLE + +LOOKUP: POP PP,LOOKX ;INTERCEPT RETURN POP + MOVE SX,SYMBOL + MOVE SDEL,0(SX) ;SET FOR TABLE SCAN +LOOKL: SOJL SDEL,POPOUT ;TEST FOR END + ADDI SX,2 + MOVE AC0,-1(SX) + PUSHJ PP,SRCH7 ;LOAD REGISTERS + HLRZS ARG + PUSHJ PP,@LOOKX ;RETURN TO CALLING ROUTINE + JRST LOOKL ;TRY AGAIN + END0: PUSHJ PP,EVALCM ;GET A WORD + SKIPE EXTPNT ;ANY EXTERNALS? + TRO ER,ERRE ;YES, ERROR + SKIPN V,AC0 ;NON-ZERO? + JUMPE RC,.+2 ;OR RELOC? + PUSHJ PP,ASSIG7 ;YES, LIST THE VALUE + MOVEM AC0,VECTOR + MOVEM RC,VECREL + PUSHJ PP,VARA ;FILL OUT SELF-DEFINED VARIABLES + PUSHJ PP,STOUTS ;DUMP THE LINE + PUSH PP,IO ;SAVE FLAGS + TLO IO,IOPROG ;XLIST LITS + PUSHJ PP,LIT1 + POP PP,IO ;GET FLAG BACK + JUMP2 ENDP2 + + PUSHJ PP,UOUT + TLNN IO,MFLSW ;SKIP IF ONLY PSEND + PUSHJ PP,REC2 + MOVE INDIR ;SET UP FIRST AS LAST + MOVEM LSTFIL ;PRINTED + SETZM LSTPGN + PUSHJ PP,INZ + TLNE IO,MFLSW ;IF PSEND + POPJ PP, ;BACK TO PSEND0 + SKIPE PRGPTR ;HAVE ANY PRGEND'S BEEN SEEN + JRST PSEND3 ;YES,GO SET UP AGAIN + +PASS20: SETZM CTLSAV + PUSHJ PP,COUTI + PUSHJ PP,EOUT ;OUTPUT THE ENTRIES + PUSHJ PP,OUTSET + XWD 6,NOUT ;OUTPUT THE NAME (BLKTYP-6) +IFN RENTSW,< + SKIPN HISNSW ;PUT OUT BLOCK TYPE 3? + JRST PASS21 ;NO + PUSHJ PP,OUTSET + XWD 3,HSOUT ;OUTPUT THE HISEG BLOCK +PASS21: > + MOVEI 1 + HRRM BLKTYP ;SET FOR TYPE 1 BLOCK + TLZ FR,P1 ;SET FOR PASS 2 AND TURN OFF FLAG + TLO IO,IOPALL ;PUT THESE BACK + TLZ IO,IOPROG!IOCREF!DEFCRS ;SO LISTINGS WILL BE THE WAY THEY SHOULD + TLNN FR,R1BSW + JRST STOWI + + MOVE CS,[XWD $ST-1-$CKSM,R1BLDR] + MOVE C,0(CS) + PUSHJ PP,PTPBIN + AOBJN CS,.-2 + PUSHJ PP,R1BI + JRST STOWI + +R1BLDR: + PHASE 0 + IOWD $ADR,$ST +$ST: CONO PTR,60 + HRRI $A,$RD+1 +$RD: CONSO PTR,10 + JRST .-1 + DATAI PTR,@$TBL1-$RD+1($A) + XCT $TBL1-$RD+1($A) + XCT $TBL2-$RD+1($A) +$A: SOJA $A, +$TBL1: CAME $CKSM,$ADR + ADD $CKSM,1($ADR) + SKIPL $CKSM,$ADR +$TBL2: JRST 4,$ST + AOBJN $ADR,$RD +$ADR: JRST $ST+1 +$CKSM: + DEPHASE + +IF2,< PURGE $ST,$RD,$A,$TBL1,$TBL2,$ADR,$CKSM> + ENDP2: PUSHJ PP,COUTD ;DUMP THE BUFFER + MOVE AC0,LOCO ;CHECK TO SEE IF LIT DIFFERED + SKIPN MODO ;AND USE SMALLER SINCE AT END + JRST [CAMN AC0,ABSHI + HRRZM AC2,ABSHI + JRST ENDP2W] +IFN RENTSW,<SKIPE HHIGH ;SKIP IF NOT TWO SEGMENTS + JRST [CAMN AC0,HHIGH + HRRZM AC2,HHIGH + JRST ENDP2W]> + CAMN AC0,HIGH + HRRZM AC2,HIGH +ENDP2W: +REPEAT 1,<TLNE IO,IOCREF ;CLOSE CREF IF NECESSARY> +REPEAT 0,<TLNE FR,CREFSW ;IF CREFFING + JRST ENDP2Q + MOVEI SDEL,0 + PUSH PP,DBUF+3 ;SO NO PAGE INFO + DPB SDEL,[POINT 7,DBUF+3,13] + IOR ER,OUTSW ;MAKE SURE OF OUTPUT + PUSHJ PP,CREF + MOVEI C,20 ;CODE FOR TITLE + PUSHJ PP,OUTLST + PUSH PP,IO ;SAVE THIS + TLZ IO,IOPAGE ;AND PREVENT PAGE DURING TITLE + MOVEI CS,TBUF + PUSHJ PP,OUTAS0 + MOVEI CS,VBUF + PUSHJ PP,OUTAS0 + POP PP,IO ;RESTORE THE IO WORD + POP PP,DBUF+3 > ;NEEDS FIX TO CREF + PUSHJ PP,CLSCR2 ;CLOSE IT UP +ENDP2Q: HRR ER,OUTSW ;SET OUTPUT SWITCH + SKIPN TYPERR + TRO ER,TTYSW + PUSHJ PP,UOUT ;OUTPUT UNDEFINEDS + TRO ER,TTYSW + SKPINC C ;SEE IF WE CAN INPUT A CHAR. + JFCL ;BUT ONLY TO DEFEAT ^O + SKIPG C,ERRCNT ;GET ERROR COUNT AND CHECK FOR POSITIVE + JRST NOERW ;PRINT NO ERROR MESSAGE +IFN CCLSW,<ADDM C,JOBERR ;REMEMBER ERROR COUNT FOR EXECUTION DELETION> + PUSHJ PP,OUTCR + MOVE C,ERRCNT + CAIN C,1 ;1 IS A SPECIAL CASE + JRST ONERW ;PRINT MESSAGE + MOVEI C,"?" ;? FOR BATCH + PUSHJ PP,OUTL ;... + MOVE C,ERRCNT ;PRINT NUMBER OF ERRORS + PUSHJ PP,DNC + SKIPA CS,[EXP ERRMS1] ;LOAD TO PRINT +ONERW: MOVEI CS,ERRMS2 ;ONE ERROR DETECTED +ONERW1: PUSHJ PP,OUTSIX ;PRINT + JRST ENDP2A +NOERW: MOVEI CS,ERRMS3 +IFN CCLSW,<TLNE IO,CRPGSW!MFLSW ;IF RPG, DON'T PRINT MESSAGE> +IFE CCLSW,<TLNE IO,MFLSW ;NOR IF MULTI-FILE MODE> + TRZ ER,TTYSW ;NO TTY OUTPUT + IOR ER,OUTSW ;UNLESS NEEDED FOR LISTING + PUSHJ PP,OUTCR + JRST ONERW1 + + ENDP2A: PUSHJ PP,OUTCR + TLNN IO,MFLSW ;IN A MULTI-PROG FILE? + JRST ENDP2D ;NO + SKIPE ERRCNT ;ANY ERROR? + PUSHJ PP,[MOVEI CS,[ASCIZ /PROGRAM /] + PUSHJ PP,OUTAS0 ;YES,SO PRINT MESSAGE + MOVEI CS,TBUF ;AND TITLE + PUSHJ PP,OUTAS0 ;FOR IDENTIFICATION + JRST OUTCR] ;AND A CR-LF + TRZA ER,TTYSW ;NO MORE OUTPUT NOW +ENDP2D: +IFN CCLSW,<TLNE IO,CRPGSW ;IF RPG, DON'T PRINT PGM BREAK + TRZ ER,TTYSW ;...> +IFE CCLSW,< SKIPA ;SO PRGEND CODE CAN WORK> + IOR ER,OUTSW ;... + PUSHJ PP,OUTCR +IFN RENTSW,< + MOVEI CS,[SIXBIT /HI-SEG. BREAK IS @/] + SKIPN HHIGH ;DON'T PRINT IF ZERO + JRST ENDP2C ;IT WAS + PUSHJ PP,OUTSIX + HRLO CS,HHIGH ;GET THE BREAK + PUSHJ PP,ONC1 + PUSHJ PP,OUTCR +ENDP2C:> + MOVEI CS,[SIXBIT /PROGRAM BREAK IS @/] + PUSHJ PP,OUTSIX ;OUTPUT PROGRAM BREAK + HRRZ CS,ABSHI ;GET ABS. BREAK + CAIG CS,140 ;ANY ABS. CODE + JRST [HRLO CS,HIGH ;NO + JRST ENDP2B] ;SO DON'T PRINT + HRLO CS,HIGH ;GET PROGRAM BREAK + PUSHJ PP,ONC1 + PUSHJ PP,OUTCR + MOVEI CS,[SIXBIT /ABSLUTE BREAK IS @/] + PUSHJ PP,OUTSIX + HRLO CS,ABSHI +ENDP2B: PUSHJ PP,ONC1 + PUSHJ PP,OUTCR + TLNE FR,RIMSW!R1BSW ;RIM MODE? + PUSHJ PP,RIMFIN ;YES, FINISH IT +IFN CCLSW,<TLNN IO,CRPGSW!MFLSW ;IF NOT IN CCL MODE> +IFE CCLSW,<TLNN IO,MFLSW ;NOR IF IN MULTI-FILE MODE> + TRO ER,TTYSW ;PRINT SIZE + PUSHJ PP,OUTCR + MOVE C,JOBREL + LSH C,-^D10 + ADDI C,1 + PUSHJ PP,DNC + MOVEI CS,[SIXBIT /K CORE USED@/] + PUSHJ PP,OUTSIX + PUSHJ PP,OUTCR + HRR ER,OUTSW + PUSHJ PP,OUTSET + XWD 2,SOUT ;OUTPUT THE SYMBOLS (BLKTYP-2) + PUSHJ PP,OUTSET + XWD 7,VOUT ;OUTPUT TRANSFER VECTOR (..-7) + PUSHJ PP,OUTSET + XWD 5,HOUT ;OUTPUT HIGHEST RELOCATABLE (..-5) + PUSHJ PP,COUTD + TLNN IO,MFLSW ;IS IT PRGEND? + JRST FINIS ;ALAS, FINISHED + MOVEI CS,SBUF ;RESET SBUF POINTER + HRRM CS,SUBTTX ;TO SUBTTL + SETZM PASS2I ;CLEAR PASS2 VARIABLES + MOVE [XWD PASS2I,PASS2I+1] + BLT PASS2Z-1 ;BUT NOT ALL OF VARIABLES + JRST INZ ;RE-INITIALIZE FOR NEXT PROG + + +RIMFIN: TLNE FR,R1BSW + PUSHJ PP,R1BDMP + SKIPN C,VECTOR + MOVSI C,(JRST 4,) + TLNN C,777000 + TLO C,(JRST) + PUSHJ PP,PTPBIN + MOVEI C,0 + JRST PTPBIN + SUBTTL PASS INITIALIZE +INZ: AOS MODA + AOS MODO + SETZM SEQNO + SETZM TAG + HRRI RX,^D8 + MOVEI VARHD + MOVEM VARHDX + MOVEI LITHD + MOVEM LITHDX + PUSHJ PP,LITI + PUSHJ PP,STOWI + JRST OUTLI + +RCPNTR: POINT 1,ARG,^L<RELF>-18 ;POINT 1,ARG,22 + SUBTTL PSEUDO-OP HANDLERS + +TAPE0: PUSHJ PP,STOUTS ;FINISH THIS LINE + JRST GOTEND ;AND IGNORE THE REST OF THIS FILE + +RADIX0: PUSHJ PP,EVAL10 ;EVALUATE RADIX D10 + CAIG AC0,^D10 ;IF GREATER THAN 10 + CAIG AC0,1 ;OR LESS THAN 2, +ERRAX: TROA ER,ERRA ;FLAG ERROR AND SKIP + HRR RX,AC0 ;SET NEW RADIX + POPJ PP, + + +XALL0: TLZ IO,IOSALL ;TURN OFF MACRO SUPPRESS ALL +IOSET: JUMP1 POPOUT ;NOSYM (IONSYM), XALL (IOPALL), XLIST (IOPROG) + HLRZ SX,AC0 ;STORE FLAGS + PUSHJ PP,STOUTS ;POLISH OFF LINE + TLO IO,0(SX) ;NOW SUPRESS PRINTING + POPJ PP, + +IORSET: TDZ IO,AC0 ;RESET FLAG IOPALL/IOPROG + TLNE AC0,IONCRF ;RESTORING CREFFING? + TLZ IO,DEFCRS ;YES, CLEAR ANY WAITING DEFINING OCCURENCES + POPJ PP, + +BLOCK0: PUSHJ PP,HIGHQ + PUSHJ PP,EVALEX ;EVALUATE + TRZE RC,-1 ;EXTERNAL OR RELOCATABLE? + PUSHJ PP,QEXT ;YES, DETERMINE TYPE + ADDM AC0,LOCO ;UPDATE ASSEMBLY LOCATION +BLOCK1: EXCH AC0,LOCA ;SAVE START OF BLOCK + ADDM AC0,LOCA ;UPDATE OUTPUT LOCATION +BLOCK2: HRLOM AC0,LOCBLK + JUMP2 POPOUT + TRNE ER,ERRU + TRO ER,ERRV + POPJ PP, + +PRNTX0: TRO ER,TTYSW ;SET OUTPUT TO TTY + JUMP2 PRNTX2 ;PASS1? + TDOA ER,OUTSW ;YES,OUTPUT TO LSTDEV ALSO +PRNTX2: ANDCM ER,OUTSW ;NO,DON'T OUTPUT TO TTY IF IT IS LSTDEV + PUSHJ PP,BYPASS ;GET FIRST CHAR. + TLOA IO,IORPTC ;REPEAT IT AND SKIP +PRNTX4: PUSHJ PP,PRINT ;PRINT THE CHAR. + PUSHJ PP,CHARAC ;GET ASCII CHAR. + CAIG C,CR ;IF GREATER THAN CR + CAIG C,HT ;OR LESS THAN LF + JRST PRNTX4 ;THEN CONTINUE + PUSHJ PP,OUTCR ;OUTPUT A CRLF + TRZA ER,TTYSW!LPTSW ;TURN OF OUTPUT +CPOPJ1: AOS (PP) ;USEFUL TAG HAS TO GO SOMEWHERE +CPOPJ: POPJ PP, ;EXIT + +REMAR0: PUSHJ PP,GETCHR ;GET A CHARACTER + CAIE C,EOL + JRST REMAR0 + POPJ PP, ;EXIT + LIT0: PUSHJ PP,BLOCK1 + PUSHJ PP,STOUTS +LIT1: JUMP2 LIT20 + +;ON PASS ONE, WE JUST STEP THE LOCATION COUNTER AND CLEAR + + MOVE AC0,LITCNT + MOVE SX,LITHDX + HRLM AC0,0(SX) + MOVE V,LOCA + HRL V,MODA + MOVEM V,-1(SX) + JRST LIT24 + +LIT20: PUSH PP,LOCA + PUSH PP,LOCO + SKIPN LITNUM + JRST LIT20A + MOVE SX,LITHDX + HRRZ AC0,-1(SX) + CAME AC0,LOCA + TRO ER,ERRP +LIT20A: MOVE SX,LITAB +LIT21: SOSGE LITNUM + JRST LIT22 + MOVE AC0,-2(SX) ;WFW + MOVE RC,-1(SX) ;WFW + MOVE SX,(SX) ;WFW POINTER TO THE NEXT LIT + PUSHJ PP,STOW20 ;STOW CODE + MOVEI C,12 ;SET LINE FEED + IDPB C,LBUFP + PUSHJ PP,OUTLIN ;OUTPUT THE LINE + JRST LIT21 + LIT22: HRRZ AC2,LOCO + POP PP,LOCO + POP PP,LOCA + MOVE SX,LITHDX + HLRZ AC0,0(SX) + SUB AC2,LOCO ;COMPUTE LENGTH USED + CAMGE AC0,AC2 ;USE LARGER + MOVE AC0,AC2 + ADD AC2,LOCO +LIT24: ADDM AC0,LOCA + ADDM AC0,LOCO + PUSHJ PP,GETTOP + HRRM SX,LITHDX +LITI: SETZM LITCNT + SETZM LITNUM + MOVEI LITAB + MOVEM LITABX + JRST HIGHQ + +GETTOP: HRRZ AC1,SX ;VARHD + HRRZ SX,0(SX) + JUMPN SX,POPOUT + MOVEI SX,3 ;WFW + ADDB SX,FREE + CAML SX,SYMBOL + PUSHJ PP,XCEED + SUBI SX,1 ;MAKE SX POINT TO LINK + SETZM 0(SX) ;CLEAR FORWARD LINK + HRRM SX,0(AC1) ;STORE ADDRESS IN LAST LINK + POPJ PP, + VAR0: PUSHJ PP,BLOCK1 ;PRINT LOCATION + PUSHJ PP,VARA + JRST STOUTS + +VARA: MOVE SX,VARHDX + MOVE AC0,LOCA ;GET LOCATION FOR CHECK + JUMP1 VARB ;DO NOT CHECK START ON PASS 1 + CAME AC0,-1(SX) ;CHECK START OF VAR AREA + TRO ER,ERRP ;AND GIVE ERROR +VARB: MOVEM AC0,-1(SX) ;SAVE START FOR PASS 2 + HLRZ AC0,0(SX) + ADDM AC0,LOCA + ADDM AC0,LOCO + PUSHJ PP,GETTOP + HRRM SX,VARHDX + JUMP2 POPOUT + + PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + TRZN ARG,VARF + POPJ PP, ;NO, EXIT + TRZ ARG,UNDF ;TURN OFF FLAG NOW + MOVSI AC0,1 ;ADD 1 + ADDM AC0,0(AC1) ;UPDATE COUNT + + IOR ARG,MODA ;SET TO ASSEMBLY MODE + HRL ARG,LOCA + MOVSM ARG,0(SX) ;UPDATE 2ND WRD OF SYM TAB ENTRY + AOS LOCA + AOS LOCO + JRST HIGHQ1 + IF: PUSH PP,AC0 ;SAVE AC0 + PUSH PP,IO + PUSHJ PP,EVALXQ ;EVALUATE AND TEST EXTERNAL + POP PP,AC1 + JUMPL AC1,IFPOP + TLZ IO,FLDSW +IFPOP: POP PP,AC1 ;RETRIEVE SKIP INSTRUCTION +IFSET: TLO IO,IORPTC ;REPEAT CHARACTER +IFXCT: XCT AC1 ;EXECUTE INSTRUCTION + TDZA AC0,AC0 ;FALSE + MOVEI AC0,1 ;TRUE +IFEXIT: JUMPOC REPEA1 ;BRANCH IF IN OP-CODE FIELD +IFEX1: PUSHJ PP,GETCHR ;SEARCH FOR "<" + CAIN C,EOL ;ERROR IF END OF LINE + JRST ERRAX + CAIE C,34 + JRST IFEX1 + JUMPE AC0,IFEX2 ;TEST FOR 0 + TLO IO,IORPTC ;NO, PROCESS AS CELL + PUSHJ PP,CELL + SETZM INCND ;NOT ANY MORE + JRST STOW ;STOW CODE AND EXIT + +IFPASS: HRRI AC0,P1 ;MAKE IT TLNX IO,P1 + MOVE AC1,AC0 ;PLACE IT IN AC1 + JRST IFSET ;EXECUTE INSTRUCTION + +IFB0: HLLO AC1,AC0 ;FORM AND STORE TEST INSTRUCTION +IFB1: PUSHJ PP,CHARL ;GET FIRST NON-BLANK + CAIE C," " + CAIN C," " + JRST IFB1 ;SKIP BLANKS AND TABS + CAIG C,CR ;CHECK FOR CARRET AS DELIM. + CAIGE C,LF + SKIPA SX,SEQNO2 + JRST ERRAX + MOVEM SX,CNDSEQ + MOVE SX,PAGENO + MOVEM SX,CNDPG + SETOM INCND ;SAVE INFO. FOR PASS 1 ERRORS + CAIN C,"<" ;LEFT BRACKET? + SETZB C,RC ;YES, PREPARE FOR OLD FORMAT + SKIPA SX,C ;SAVE FOR COMPARISON +IFB3: TRO AC0,1 ;SET FLAG +IFB2: PUSHJ PP,CHARL ;GET ASCII CHARACTER AND LIST + CAMN C,SX ;TEST FOR DELIMITER + JRST IFXCT ;FOUND + CAIE C," " ;BLANK? + CAIN C," " ;OR TAB? + JRST IFB2 ;YES + JUMPN SX,IFB3 ;JUMP IF NEW FORMAT + CAIN C,"<" ;<? + AOJA RC,IFB2 ;YES, INCREMENT COUNT + CAIN C,">" ;>? + SOJL RC,IFXCT ;YES, DECREMENT AND EXIT IF DONE + JRST IFB3 ;GET NEXT CHARACTER + + IFDEF0: HRRI AC0,UNDF ;MAKE IT TLNX ARG,UNDF + PUSH PP,AC0 ;STACK IT + PUSHJ PP,GETSYM ;TAKES SKIP RETURN IF SYM NAME IS LEGAL + TROA ER,ERRA ;ILLEGAL! + PUSHJ PP,SEARCH + JRST [PUSHJ PP,OPTSCH + TLO ARG,UNDF + JRST .+1] + PUSHJ PP,SSRCH3 ;EMIT TO CREF ANYWAY + JRST IFPOP ;POP AND EXECUTE INSTRUCTION + + IFIDN0: HLRZS AC0 + MOVEI V,2*.IFBLK-1 + SETZM IFBLK(V) ;CLEAR COMPARISON BLOCK + SOJGE V,.-1 + SETZM .TEMP ;CLEAR STORED DELIMETER + MOVEI RC,IFBLK ;SET FOR FIRST BLOCK + PUSHJ PP,IFCL ;GET FIRST STRING + MOVEI RC,IFBLKA + PUSHJ PP,IFCL ;GET SECOND STRING + MOVEI V,.IFBLK-1 + MOVE SX,IFBLK(V) ;GET WORD FROM FIRST STRING + CAMN SX,IFBLKA(V) ;COMPARE WITH SECOND STRING + SOJGE V,.-2 ;EQUAL, TRY NEXT WORD + JUMPL V,IFEXIT ;DID WE FINISH STRING + XORI AC0,1 ;NO, TOGGLE REQUEST + JRST IFEXIT ;DO NOT TURN ON IORPTC WFW + +IFCL: PUSHJ PP,CHARAC ;GET AND LIST CHARACTER + CAIE C," " ;SKIP SPACES + CAIG C,CR ;ALSO SKIP CR-LF + CAIGE C,HT ;AND TAB + JRST .+2 ;NOT ONE OF THEM + JRST IFCL ;SO LONG COMPARISONS WILL WORK +;*** A CROCK SO THAT IFIDN <X>,<X>,<INST.> WILL WORK *** + CAIE C,"," ;IS IT A COMMA? + JRST .+3 ;NO + SKIPN .TEMP ;YES, WAS PREVIOUS FIELD OLD METHOD? + JRST IFCL ;YES, IGNORE COMMA AND SPACES +; *** + CAIN C,"<" ;WAS IT LEFT BRACKET? + SETO C, ;SIGNAL OLD METHOD, LOOK FOR RIGHT BRACKET + MOVEM C,.TEMP ;STORE TERMINATOR FOR COMPARISON + MOVEI SX,5*.IFBLK-1 ;LIMIT SEARCH + HRLI RC,(POINT 7,,) ;SET UP BYTE IN RC +IFCLR: PUSHJ PP,CHARAC + SKIPLE .TEMP ;NEW METHOD? + JRST IFCLR1 ;YES, IGNORE ANGLE BRACKET COUNTING + CAIN C,"<" ;ANOTHER LEFT ANGLE? + SOS .TEMP ;YES, KEEP COUNT + CAIN C,">" ;CLOSING ANGLE + AOSGE .TEMP ;MATCHING COUNT? +IFCLR1: CAMN C,.TEMP ;TEST FOR DELIMITER + POPJ PP, ;EXIT ON RIGHT DELIMITER + SOJG SX,.+2 ;ANY ROOM IN COMPARISON BLOCK? + TROA ER,ERRA ;NO, FLAG ERROR BUT KEEP ON GOING + IDPB C,RC ;DEPOSIT BYTE + JRST IFCLR + + +IFEX2: PUSHJ PP,GETCHR + CAIN C,EOL ;EXIT WITH ERROR IF END OF LINE + JRST ERRAX + CAIN C,34 ;"<"? + AOJA AC0,IFEX2 ;YES, INCREMENT COUNT + CAIE C,36 ;">"? + JRST IFEX2 ;NO, TRY AGAIN + SOJGE AC0,IFEX2 ;YES, TEST FOR MATCH + PUSHJ PP,BYPASS ;YES, MOVE TO NEXT DELIMITER + SETZM INCND ;OUT OF CONDITIONAL NOW + AOJA AC0,STOWZ1 ;STOW ZERO + + +INTER0: HLLZM AC0,INTENT ;AC0 CONTAINS INTF/ENTF FLAGS + +INTER1: PUSHJ PP,GETSYM ;GET A SYMBOL + JRST INTER3 ;INVALID, SKIP + PUSHJ PP,SSRCH ;SEARCH THE TABLE + MOVSI ARG,SYMF!INTF!UNDF + TLNE ARG,UNDF ;UNDEFINED? + TRO ER,ERRA ;YES, FLAG ERROR + TLNN ARG,SYNF!EXTF + TDOA ARG,INTENT ;SET APPROPRIATE FLAGS +INTER3: TROA ER,ERRA ;FLAG ARG EROR AND SKIP + PUSHJ PP,INSERQ ;INSERT/UPDATE + JUMPCM INTER1 + SETZM EXTPNT ;JUST IN CASE, SO AS NOT TO CONFUSE WORLD + POPJ PP, ;NO, EXIT + EXTER0: PUSHJ PP,GETSYM ;GET A SYMBOL + JRST EXTER4 ;INVALID, ERROR +EXTER1: TLO IO,DEFCRS ;FLAG THIS AS A DEFINITION + PUSHJ PP,SSRCH ;OK, SEARCH SYMBOL TABLE + JRST EXTER2 ;NOT THERE, INSERT IT + TLNN ARG,EXTF!VARF!UNDF + TROA ER,ERRE ;FLAG ERROR AND BYPASS + TLNE ARG,EXTF ;VALID, ALREADY DEFINED? + JRST [JUMP1 EXTER3 ;YES, BYPASS + TLZN ARG,UNDF ;SKIP IF UNDEFINED ALSO + JRST EXTER3 ;CONTINUE + ANDM ARG,(SX) ;CLEAR UNDF ON PASS 2 + JRST EXTER2] ;SET UP EXTERNAL NOW +EXTER2: MOVEI V,2 ;NO, GET 2 CELLS FROM THE TREE + ADDB V,FREE + CAML V,SYMBOL ;HAVE WE RUN OUT OF CORE? + PUSHJ PP,XCEEDS ;YES, TRY TO BORROW SOME MORE + SUBI V,2 ;GET RIGHT CELL FOR POINTER + SETZB RC,0(V) ;ALL SET, ZERO VALUES + MOVSI ARG,SYMF!EXTF + PUSHJ PP,INSERT ;INSERT/UPDATE IT + MOVSI ARG,PNTF + IORM ARG,0(SX) + SKIPA ARG,-1(SX) ;GET THE SIXBIT FOR THE NAME +EXTER4: TROA ER,ERRA ;FLAG AS ERROR + MOVEM ARG,1(V) ;AND STORE THAT IN CASE SYMBOL TABLE MOVES +EXTER3: JUMPCM EXTER0 + POPJ PP, ;NO, EXIT + EVAL10: PUSH PP,RX + HRRI RX,^D10 + PUSHJ PP,EVALEX ;EVALUATE + POP PP,RX ;RESET RADIX + JUMPE RC,POPOUT ;EXIT IF ABSOLUTE + +QEXT: SKIPE EXTPNT ;ANY POSSIBILITIES? + TROA ER,ERRE ;YES, FLAG EXTERNAL ERROR + TRO ER,ERRR ;NO, FLAG RELOCATION ERROR + HLLZS RC ;CLEAR RELOCATION/EXTERNAL + POPJ PP, + +EVALXQ: PUSHJ PP,EVALEX ;EVALUATE EXPRESSION + TLZN RC,-2 ;LEFT HALF EXTERNAL + TRZE RC,-2 ;WAS AN EXTERNAL FOUND? + TRO ER,ERRE ;YES, FLAG ERROR + POPJ PP, ;RETURN + OPDEF0: PUSHJ PP,GETSYM ;GET THE FIRST SYMBOL + POPJ PP, ;ERROR IF INVALID SYMBOL + CAIE C,73 ;"["? + JRST ERRAX ;NO, ERROR + PUSH PP,AC0 ;STACK MNEMONIC + AOS LITLVL ;SHORT OUT LOCATION INCREMENT + PUSHJ PP,STMNT ;EVALUATE STATEMENT + SKIPGE STPX ;CODE STORED? + TROA ER,ERRA ;NO,"A" ERROR + PUSHJ PP,DSTOW ;GET AND DECODE VALUE + SOS LITLVL + EXCH AC0,0(PP) ;EXCHANGE VALUE FOR MNEMONIC + PUSH PP,RC ;STACK RELOCATION + TLO IO,DEFCRS ;SAY WE ARE DEFINING IT + PUSHJ PP,MSRCH ;SEARCH SYMBOL TABLE + MOVSI ARG,OPDF ;NOT FOUND + POP PP,RC ;RESTORE VALUES + POP PP,V + TLNE ARG,SYNF!MACF + TRO ER,ERRA ;YES "A" ERROR + TRNN ER,ERRA ;ERROR? + PUSHJ PP,INSERT ;NO, INSERT/UPDATE + TLZ IO,DEFCRS ;JUST IN CASE + PUSHJ PP,BYPASS + JRST STOWI ;BE SURE STOW IS RESET + + +DEPHA0: MOVE AC0,LOCO + SKIPA RC,MODO ;SET TO OUTPUT VALUES AND SKIP +PHASE0: PUSHJ PP,EVALXQ ;EVALUATE AND CHECK FOR EXTERNAL + MOVEM AC0,LOCA ;SET ASSEMBLY LOCATION COUNTER + MOVEM RC,MODA + JRST BLOCK2 + ASSIGN: JUMPAD ERRAX ;NO, ERROR + PUSHJ PP,ASSIG1 + TLNE IO,IOSALL ;SUPPRESS ALL? + JUMPN MRP,CPOPJ ;IF IN MACRO +ASSIG7: MOVEM RC,ASGBLK + TRNE RC,-2 ;EXTERNAL + HLLZS ASGBLK ;YES,CLEAR RELOCATION + TLNE RC,1 ;LEFT HALF NOT RELOC? + TLNE RC,-2 ;... + HRROS ASGBLK ;YES, SET FLAG + MOVEM V,LOCBLK + POPJ PP, + +ASSIG1: PUSH PP,AC0 ;SAVE SYMBOL + SETZB AC0,EXTPNT ;SPECIAL CHECK FOR == WFW + PUSHJ PP,PEEK ;IS THE NEXT ON = + CAIE C,"=" + JRST ASSIG5 + TLO AC0,NOOUTF ;YES, NOT OUT TO DDT WFW + PUSHJ PP,GETCHR ;PROCESS THE CHAR. + PUSHJ PP,PEEK ;CHECK FOR ==: DMN +ASSIG5: CAIE C,":" ;IS IT + JRST ASSIG6 ;NO + TLO AC0,INTF ;MAKE INTERNAL + PUSHJ PP,GETCHR ;REPEAT IT +ASSIG6: MOVEM AC0,HDAS ;STORE THESE BITS WFW + PUSHJ PP,EVALCM ;EVALUATE EXPRESSION + EXCH AC0,0(PP) ;SWAP VALUE FOR SYMBOL + PUSH PP,RC + TRNN RC,-2 ;CHECK EXTERNAL AGREEMENT + JRST ASSIG2 + HRRZS RC + HRRZ ARG,EXTPNT + CAME RC,ARG + PUSHJ PP,QEXT ;EXTERNAL OR RELOCATION ERROR +ASSIG2: HLRZ RC,(PP) + TRNN RC,-2 + JRST ASSIG3 + HLRZ ARG,EXTPNT + CAME RC,ARG + PUSHJ PP,QEXT +ASSIG3: TLO IO,DEFCRS + PUSHJ PP,SSRCH + MOVSI ARG,SYMF + IOR ARG,HDAS ;WFW + TLNE ARG,UNDF ;WAS IT UNDEFINED + TLZ ARG,EXTF!PNTF ;YES,CLEAR EXTF NOW + TLZ ARG,UNDF!VARF ;CANCEL UNDEFINED AND VARIABLE FLAGS + SETZM EXTPNT ;FOR REST OF WORLD + POP PP,RC + TRNE ER,ERRORS-ERRQ + SETZ RC, ;CLEAR RELOCATION + POP PP,V + TRNE ER,ERRU ;WAS VALUE UNDEFINED? + TLO ARG,UNDF ;YES,SO TURN UNDF ON + TLNE ARG,TAGF!EXTF + JRST ERRAX + JRST INSERT + + LOC0: PUSHJ PP,HIGHQ ;AC0=0,0 + PUSH PP,AC0 ;SAVE MODE REQUESTED + HLRZS AC0 ;PUT MODE IN RIGHT HALF + JUMPN AC0,RELOC0 ;RELOC PSEUDO-OP + CAMN AC0,MODO ;SAME AS PRESENT MODE? + JRST [HRRZ AC0,LOCO ;YES + EXCH AC0,ABSLOC ;EXCH VALUES + JRST LOC01] + HRRZ AC0,LOCO ;NO, GET CURRENT VALUE + MOVEM AC0,RELLOC ;SAVE IT + MOVE AC0,ABSLOC ;GET LAST RELOC VALUE +LOC01: PUSHJ PP,BYPASS ;SKIP BLANKS + TLO IO,IORPTC + CAIE C,EOL ;USE PREVIOUS VALUE IF NULL ARGUMENT + PUSHJ PP,EVALXQ ;GET EXPRESSION AND TEST EXTERNAL + HRRM AC0,(PP) ;STORE NEW VALUE + POP PP,AC0 ;RETRIEVE STORED MODE AND VALUE +LOC10: HRRZM AC0,LOCA ;SET ASSEMBLY LOCATION + HRRZM AC0,LOCO ;AND OUTPUT LOCATION + HLRZM AC0,MODA ;SET MODE + HLRZM AC0,MODO + JRST BLOCK2 + +RELOC0: CAMN AC0,MODO + JRST [HRRZ AC0,LOCO + EXCH AC0,RELLOC + JRST LOC01] + HRRZ AC0,LOCO + MOVEM AC0,ABSLOC + MOVE AC0,RELLOC + JRST LOC01 + + IFN RENTSW,< +HISEG1: PUSHJ PP,HIGHQ ;SET CURRENT PROGRAM BREAK + PUSHJ PP,COUTD ;DUMP CURRENT TYPE OF BLOCK + SKIPN HISNSW ;IF WE HAVE SEEN IT BEFORE + SKIPE HIGH ;OR ANY RELOC CODE PUT OUT + TRO ER,ERRQ ;FLAG AS AN ERROR + PUSHJ PP,BYPASS ;GO GET EXPRESSION + TLO IO,IORPTC + PUSHJ PP,EVALXQ ;CHECK FOR EXTERNAL + ANDCMI AC0,1777 ;ONLY ALLOWED TO START ON NEW K BOUND + HRRZM AC0,LOCA ;SET LOC COUNTERS + HRRZM AC0,LOCO + MOVEI RC,1 ;ASSUME RELOCATABLE + POPJ PP, + +TWSEG0: PUSHJ PP,HISEG1 ;COMMON CODE + JUMPN AC0,.+2 ;ARGUMENT SEEN + MOVEI AC0,400000 ;ASSUME 400000 + HRRZM AC0,HMIN ;SET OFSET OF HIGH SEG. + HRRZM AC0,HHIGH ;INCASE NO HISEG CODE + TLOA AC0,(1B0) ;SIGNAL TWO SEGMENTS AND SKIP + +HISEG0: PUSHJ PP,HISEG1 ;COMMON CODE +HISEG2: MOVEM AC0,SVTYP3 ;SAVE THE HISEG ARG + MOVEM RC,MODA ;SET MODES + MOVEM RC,MODO + SETOM HISNSW ;WE HAVE ALREADY PUT ONE OUT + JRST BLOCK2 ;MAKE LISTING HAPPEN RIGHT> + +IFE RENTSW,< + SYN CPOPJ,HISEG0 + SYN CPOPJ,TWSEG0> + + SYN CPOPJ,ONFORM + SYN CPOPJ,OFFORM + HIGHQ: +HIGHQ1: MOVE V,LOCO ;GET ASSEMBLY LOCATION + SKIPN MODO ;IF ASSEMBLY MODE IS ABSOLUTE + JRST [CAMLE V,ABSHI ;RECORED ABS HIGHEST ALSO + MOVEM V,ABSHI + POPJ PP,] +IFN RENTSW,<SKIPE HMIN ;IS IT A TWO SEGMENT PROGRAM? + JRST [CAMGE V,HMIN ;YES,IS THIS HIGH SEG.? + JRST .+1 ;NO,STORE LOW SEGMENT + CAMLE V,HHIGH ;YES,IS IT GREATER THAN "HHIGH"? + MOVEM V,HHIGH ;YES,REPLACE WITH LARGER VALUE + POPJ PP,]> + CAMLE V,HIGH ;IS IT GREATER THAN "HIGH"? + MOVEM V,HIGH ;YES, REPLACE WITH LARGER VALUE + POPJ PP, + +ONML: TLZA FR,MWLFLG ;MULTI-WORD LITERALS OK +OFFML: TLO FR,MWLFLG ;NO + POPJ PP, + +OFFSYM: SETOM IONSYM ;SUPRESS SYMBOL TABLE LISTING + POPJ PP, + +SUPRE0: PUSHJ PP,GETSYM ;GET A SYMBOL TO SUPRES + JRST SUPRE1 ;ERROR + PUSHJ PP,SSRCH ;SYMBOL ONLY + JRST SUPRE1 ;GIVE ERROR MESSAGE + TLOA ARG,SUPRBT ;SET THE SUPRESS BIT +SUPRE1: TROA ER,ERRA + IORM ARG,(SX) ;PUT BACK + JUMPCM SUPRE0 ;ANY MORE? + JRST SUPRS1 + +SUPRSA: PUSHJ PP,LOOKUP ;SUPRESS ALL + MOVSI ARG,SUPRBT + IORM ARG,(SX) +SUPRS1: SETZM EXTPNT ;JUST IN CASE WE LOOKED ONE UP + POPJ PP, + +XPUNG0: JUMP1 POPOUT + PUSHJ PP,LOOKUP + MOVE ARG,(SX) ;GET SYMBOL FLAGS + TLNN ARG,INTF!ENTF!EXTF!SPTR + TLOA ARG,SUPRBT ;LOCAL SYMBOL,SO SUPPRESS IT + SETZM EXTPNT + MOVEM ARG,(SX) ;RESTORE FLAGS + POPJ PP, + TITLE0: JUMP2 REMAR0 + MOVEI SX,.TBUF + HRRI AC0,TBUF + PUSHJ PP,SUBTT1 ;GO READ IT + MOVEM SX,TCNT ;SAVE COUNT OF CHARS. WRITTEN +IFN UNIVR,<SKIPE UNIVSN ;WAS IT A UNIVERSAL? + PUSHJ PP,ADDUNV ;YES ADD TO TABLE> + TLOE IO,IOTLSN ;HAVE WE SEEN ONE +IFE CCLSW,<TRO ER,ERRM ;YES, COMPLAIN> +IFN CCLSW,<TROA ER,ERRM ;YES, MESSAGE + JRST PRNAM ;PRINT NAME IF FIRST ONE> + POPJ PP, ;EXIT OTHERWISE + +SUBTT0: SKIPE SBUF ;STORE FIRST SUBTTL ON PASS1 + JUMP1 REMAR0 ;OTHERWISE EXIT IF PASS ONE + MOVEI SX,.SBUF + HRRI AC0,SBUF + +SUBTT1: PUSHJ PP,BYPASS ;BYPASS LEADING BLANKS + TLO IO,IORPTC +SUBTT3: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + IDPB C,AC0 ;STORE IN BLOCK + CAIGE C,40 ;TEST FOR TERMINATOR + CAIN C,HT + SOJG SX,SUBTT3 ;TEST FOR BUFFER FULL + DPB RC,AC0 ;END, STORE TERMINATOR + SOJA SX,CPOPJ ;COUNT NUL AND EXIT + +IFN CCLSW,< +PRNAM: TLNN IO,CRPGSW ;NOT IF NOT RPG + POPJ PP, + PUSH PP,AC0 ;SAVE AC0 DMN + PUSH PP,RC ;AND RC + MOVE AC0,[POINT 7,TBUF] + MOVE SX,[POINT 7,OTBUF] + MOVEI RC,6 ;MAX OF SIX CHRS +PN1: ILDB C,AC0 + CAILE C," " ;CHECK FOR LEGAL + CAILE C,"Z"+40 ;CHECK AGAINST LOWER CASE Z + JRST PN2 + IDPB C,SX ;PUT IN OUTPUT BUFFER + SOJG RC,PN1 ;GET MORE +PN2: MOVEI C,0 + IDPB C,SX ;TERMINATOR + TTCALL 3,OTBUF + TTCALL 3,[ASCIZ / +/] + POP PP,RC + POP PP,AC0 ;RESTORE AC0 DMN + POPJ PP, +> + SYN0: PUSHJ PP,GETSYM ;GET THE FIRST SYMBOL + JRST ERRAX ;ERROR, EXIT + PUSHJ PP,MSRCH ;TRY FOR MACRO/OPDEF + JRST SYN3 ;NO,0THRY FOR OPERAND +SYN1: MOVEI SX,MSRCH ;YES, SET FLAG +SYN2: PUSHJ PP,SAVEXS ;SAVE REGISTERS + JUMPNC ERRAX ;ERROR IF NO COMMA + PUSHJ PP,GETSYM ;GET THE SECOND SYMBOL + POPJ PP, + PUSHJ PP,@SAVBLK+SX ;SEARCH FOR SECOND SYMBOL + JFCL + MOVE ARG,SAVBLK+ARG ;GET VALUES + MOVE RC,SAVBLK+RC + MOVE V,SAVBLK+V + TLNE ARG,MACF ;MACRO? + PUSHJ PP,REFINC ;YES, INCREMENT REFERENCE + JRST INSERT ;INSERT AND EXIT + +SYN3: PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + JRST SYN4 ;NOT FOUND, TRY OP CODE + TLO ARG,SYNF ;FLAG AS SYNONYM + TLNE ARG,EXTF ;EXTERNAL? + HRRZ V,ARG ;YES, RELPACE WITH POINTER + MOVEI SX,SSRCH ;SET FLAG + TLNN ARG,VARF ;DO NOT LET HIM SYN A VARIABLE + JRST SYN2 + JRST ERRAX + +SYN4: PUSHJ PP,OPTSCH ;SEARCH FOR OP-CODE + JRST ERRAX ;NOT FOUND, EXIT WITH ERROR + MOVSI ARG,SYNF ;FLAG AS SYNONYM + JRST SYN1 + PURGE0: PUSHJ PP,GETSYM ;GET A MNEMONIC + JRST [TRZ ER,ERRA ;CLEAR ERROR + POPJ PP,] ;AND RETURN + PUSHJ PP,MSRCH ;SEARCH MACRO SYMBOL TABLE + JRST PURGE2 ;NOT FOUND, TRY SYMBOLS + PUSH PP,CS ;SAVE CS AS IT MAY GET GARBAGED + TLNE ARG,MACF ;MACRO? + PUSHJ PP,REFDEC ;YES, DECREMENT THE REFERENCE + POP PP,CS + JRST PURGE4 ;REMOVE SYMBOL FROM TABLE + +PURGE2: PUSHJ PP,SSRCH ;TRY OPERAND SYMBOL TABLE + JRST PURGE5 ;NOT FOUND GET NEXT SYMBOL + TRNN RC,-2 ;CHECK COMPLEX EXTERNAL + TLNE RC,-2 + TLNE ARG,SYNF + JRST .+2 + JRST PURGE3 + TLNE ARG,EXTF!UNDF ;ERROR IF EXTERNAL OR UNDEFINED + TLNE ARG,SYNF ;BUT NOT A SYNONYM + JRST PURGE4 +PURGE3: TROA ER,ERRA ;NOT FOUND, ERROR +PURGE4: PUSHJ PP,REMOVE ;REMOVE FROM THE SYMBOL TABLE +PURGE5: JUMPCM PURGE0 + POPJ PP, ;EXIT + OPD1: TLNE ARG,UNDF ;IF OPDEF IS UNDEFINED + TRO ER,ERRO ;GIVE "O" ERROR +OPD: MOVE AC0,V ;PUT VALUE IN AC0 + JRST OP +IOP: MOVSI AC2,(POINT 9,0(PP),11) + TLOA IO,IOIOPF ;SET "IOP SEEN" AND SKIP +OP: MOVSI AC2,(POINT 4,0(PP),12) + PUSH PP,RC + PUSH PP,AC0 ;STACK CODE + PUSH PP,AC2 + PUSHJ PP,EVALEX ;EVALUATE FIRST EXPRESSION + POP PP,AC2 + JUMPNC OP2 +OP1B: PUSHJ PP,GETCHR ;GET A CHARACTER + JUMPCM XWD5 ;PROCESS COMMA COMMA IN XWD + TLO IO,IORPTC ;NOT A COMMA,REPEAT IT + LDB AC1,AC2 + ADD AC1,AC0 + DPB AC1,AC2 + JUMPE RC,OP1A ;EXTERNAL OR RELOCATABLE? + PUSHJ PP,QEXT ;YES, DETERMINE WHICH AND FLAG AN ERROR + +OP1A: PUSHJ PP,EVALEX ;GET ADDRESS PART +OP2: PUSHJ PP,EVADR ;EVALUATE STANDARD ADDRESS +OP3: POP PP,AC0 ;PUT IN AC0 + POP PP,RC + SKIPE (PP) ;CAME FROM EVALCM? + JRST STOW ;NO,STOW CODE AND EXIT + POP PP,AC1 ;YES,EXIT IMMEDIATELY + POPJ PP, + + EVADR: ;EVALUATE STANDARD ADDRESS +IFE IIISW,<TLNN AC0,-1 ;OK IF ALL 0'S + JRST .+4 ;IT WAS + TLC AC0,-1 ;CHANGE ALL ONES TO ZEROS + TLCE AC0,-1 ;OK IF ALL 1'S + TRO ER,ERRQ ;NO,FLAG Q ERROR> + ADD AC0,-1(PP) ;ADD ADDRESS PORTIONS + HLL AC0,-1(PP) ;GET LEFT HALF + TLZE FR,INDSW ;INDIRECT BIT? + TLO AC0,(Z @) ;YES, PUT IT IN + MOVEM AC0,-1(PP) ;RE-STACK CODE + ADD RC,-2(PP) ;UPDATE RELOCATION + HRRM RC,-2(PP) ;USE HALF WORD ADD + CAIE C,10 ;"("? + POPJ PP, ;NO, EXIT + + MOVSS EXTPNT ;WFW + PUSHJ PP,EVALCM ;EVALUATE + MOVSS EXTPNT ;WFW + MOVSS V,AC0 ;SWAP HALVES +IFE IIISW,<MOVSS SX,RC + IOR SX,V ;MERGE RELOCATION + TRNN SX,-1 ;RIGHT HALF ZERO? + JRST OP2A ;YES, DO SIMPLE ADD + MOVE ARG,RC ;NO, SWAP RC INTO ARG> +IFN IIISW,<MOVSS ARG,RC> + ADD V,-1(PP) ;ADD RIGHT HALVES + ADD ARG,-2(PP) + HRRM V,-1(PP) ;UPDATE WITHOUT CARRY + HRRM ARG,-2(PP) + HLLZS AC0 ;PREPARE LEFT HALVES + HLLZS RC +IFE IIISW,<TLNE SX,-1 ;IS LEFT HALF ZERO? + TRO ER,ERRQ ;NO FLAG FORMAT ERROR +OP2A: TLNE RC,-1 ;RELOCATION FOR LEFT HALF? + PUSHJ PP,OP2A1 ;YES,IS IT LEGAL? + TLNE AC0,777000 ;OP CODE FIELD USED? + JRST [EXCH AC0,-1(PP);YES, GET STORED CODE + TLNE AC0,777000 ;OP CODE FIELD BEEN SET? + TRO ER,ERRQ ;YES, MOST LIKELY AN ERROR + EXCH AC0,-1(PP) + JRST .+1] ;RETURN TO ADD > + ADDM AC0,-1(PP) ;MERGE WITH PREVIOUS VALUE + ADDM RC,-2(PP) + CAIE C,11 ;")"? + JRST ERRAX ;NO, FLAG ERROR + ;YES, BYPASS PARENTHESIS +BYPASS: +BYPAS1: PUSHJ PP,GETCHR +BYPAS2: JUMPE C,.-1 ;SKIP TRAILING BLANKS + POPJ PP, ;EXIT + + IFE IIISW,< +OP2A1: EXCH RC,-2(PP) ;GET STORED CODE + TLNN RC,-1 ;OK IF ALL ZERO + JRST OP2A2 ;OK SO RETURN + TLC RC,-1 ;CHANGE ALL ONES TO ZEROS + TLCE RC,-1 ;OK IF ALL ONES + TRO ER,ERRQ ;OTHERWISE A "Q" ERROR +OP2A2: EXCH RC,-2(PP) ;GET RC,BACK + POPJ PP, ;AND RETURN> + + +EXPRES: HRLZ AC0,RX ;FUDGE FOR OCT0 + +OCT0: PUSH PP,RX + HLR RX,AC0 +OCT1: PUSHJ PP,EVALEX ;EVALUATE + PUSHJ PP,STOW ;STOW CODE + JUMPCM OCT1 + POP PP,RX ;YES, RESTORE RADIX + POPJ PP, ;EXIT + SIXB10: MOVSI RC,(POINT 6,AC0) ;SET UP POINTER + MOVEI AC0,0 ;CLEAR WORD + +SIXB20: PUSHJ PP,CHARL ;GET NEXT CHARACTER + CAMN C,SX ;IS THIS PRESET DELIMITER? + JRST ASC60 ;YES + CAIL C,"A"+40 + CAILE C,"Z"+40 + JRST .+2 + TRZA C,100 ;CONVERT LOWER CASE TO SIXBIT + SUBI C,40 ;CONVERT TO SIXBIT + JUMPL C,ASC55 ;TEST FOR INVALID CHARACTER + IDPB C,RC ;NO, DEPOSIT THE BYTE + TLNE RC,770000 ;IS THE WORD FULL? + JRST SIXB20 ;NO, GET NEXT CHARACTER + PUSHJ PP,STOWZ ;YES, STORE + JRST SIXB10 ;GET NEXT WORD + ASCII0: HLLZ SDEL,AC0 ;STORE ASCII/ASCIZ FLAG +ASC10: PUSHJ PP,CHARL ;GET FIRST NON-BLANK + CAIE C," " + CAIN C,HT + JRST ASC10 + CAIG C,CR ;CHECK FOR CRRET AS DELIM + CAIGE C,LF + SKIPA SX,SEQNO2 + JRST ERRAX + MOVEM SX,TXTSEQ ;SAVE SEQ AND PAGE + MOVE SX,PAGENO + MOVEM SX,TXTPG + SETOM INTXT + MOVE SX,C ;SAVE FOR COMPARISON + JUMPG SDEL,SIXB10 ;BRANCH IF SIXBIT + +ASC20: MOVSI RC,(POINT 7,AC0) ;SET UP POINTER + TLNE SDEL,200000 ;THIS BIT (AND BIT0) IN FOR COMMENT + MOVSI RC,440000 ;SO NOTHING WILL BE DEPOSITED +IFE IIISW,<MOVEI AC0,0 ;CLEAR WORD> +IFN IIISW,<TLNE SDEL,100000 ;ASCID? + TLZA SDEL,400000 ;YES, ZERO ASCIZ BIT + TDZA AC0,AC0 ;NO, ZERO WORD + MOVE AC0,[BYTE (7) 10,10,10,10,10 (1) 1] ;YES, A WORD FULL OF BACKSPACES> +ASC30: PUSHJ PP,CHARL ;GET ASCII CHARACTER AND LIST + CAMN C,SX ;TEST FOR DELIMITER + JRST ASC50 ;FOUND + IDPB C,RC ;DEPOSIT BYTE + TLNE RC,760000 ;HAVE WE FINISHED WORD? + JRST ASC30 ;NO,GET NEXT CHARACTER + PUSHJ PP,STOWZ ;YES, STOW IT + JRST ASC20 ;GET NEXT WORD + +ASC55: TDZA CS,CS ;ZERO CS IN CASE NESTED +ASC50: TDZA RC,SDEL ;TEST FOR ASCIIZ + TROA ER,ERRA ;SIXBIT ERROR EXIT +ASC60: PUSHJ PP,BYPAS1 ;POLISH OFF TERMINATOR + SETZM INTXT ;WE ARE OUT OF IT +IFN IIISW,<TLNN SDEL,100000 ;NO EXTRA WORDS FOR ASCID> + ANDCM RC,STPX ;STORE AT LEAST ONE WORD + TLNN SDEL,200000 ;GET OUT WITHOUT STORING + JUMPGE RC,STOWZ ;STOW + POPJ PP, ;ASCII, NO BYTES STORED, SO EXIT + POINT0: + PUSH PP,RC ;STACK REGISTERS + PUSH PP,AC0 + PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + DPB AC0,[POINT 6,0(PP),11] ;STORE BYTE SIZE + JUMPNC POINT2 + PUSHJ PP,EVALEX ;NO, GET ADDRESS + PUSHJ PP,EVADR ;EVALUATE STANDARD ADDRESS + JUMPNC POINT2 + PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + TLNE IO,NUMSW ;IF NUMERIC + TDCA AC0,[-1] ;POSITION=D35-RHB +POINT2: MOVEI AC0,0 ;OTHERWISE SET TO D36 + ADDI AC0,^D36 + LSH AC0,^D30 + ADDM AC0,0(PP) ;UPDATE VALUE + JRST OP3 + XWD0: + PUSH PP,RC + PUSH PP,AC0 ;STORE ZERO ON STACK + PUSHJ PP,EVALEX ;EVALUATE EXPRESSION + JUMPNC OP2 +XWD5: SKIPN (PP) ;ANY CODE YET? + JRST XWD10 ;NO,USE VALUE IN AC0 + JUMPE AC0,.+2 ;ANYTHING IN AC0? + TRO ER,ERRQ ;YES,FLAG "Q"ERROR + MOVE AC0,(PP) ;USE PREVIOUS VALUE + MOVE RC,-1(PP) ;AND RELOCATION +XWD10: HRLZM AC0,0(PP) ;SET LEFT HALF + HRLZM RC,-1(PP) + MOVSS EXTPNT ;WFW + JRST OP1A ;EXIT THROUGH OP + +IOWD0: PUSHJ PP,EVALXQ ;EVALUATE AND TEST FOR EXTERNAL + CAIE C,14 ;","? + JRST [SKIPN AC0 ;IF NZERO AND NO "," SEEN + TRO ER,ERRQ ;TREAT AS Q ERROR + SOJA AC0,STOW] ;NO, TREAT AS RIGHT HALF + PUSH PP,AC0 ;YES, STACK LEFT HALF + PUSHJ PP,EVALEX ;WFW + SUBI AC0,1 + POP PP,AC1 ;RETRIEVE LEFT HALF + MOVNS AC1 + HRL AC0,AC1 + JRST STOW ;STOW CODE AND EXIT + BYTE0: PUSHJ PP,BYPASS ;GET FIRST NON-BLANK + CAIE C,10 ;"("? + JRST ERRAX ;NO, FLAG ERROR AND EXIT + PUSH PP,RC + PUSH PP,AC0 ;INITIALIZE STACK TO ZERO + MOVSI ARG,(POINT -1,(PP)) + +BYTE1: PUSH PP,ARG + PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + POP PP,ARG + CAIG AC0,^D36 ;TEST SIZE + JUMPGE AC0,.+2 + TRO ER,ERRA + DPB AC0,[POINT 6,ARG,11] ;STORE BYTE SIZE + +BYTE2: IBP ARG ;INCREMENT BYTE + TRZN ARG,-1 ;OVERFLOW? + JRST BYTE3 ;NO + SETZB AC0,RC ;YES + EXCH AC0,0(PP) ;GET CURRENT VALUES + EXCH RC,-1(PP) ;AND STACK ZEROS + PUSHJ PP,STOW ;STOW FULL WORD + +BYTE3: PUSH PP,ARG + PUSHJ PP,EVALEX ;COMPUTE NEXT BYTE + POP PP,ARG + DPB AC0,ARG ;STORE BYTE + HLLO AC0,ARG + DPB RC,AC0 ;STORE RELOCATION + + JUMPCM BYTE2 + CAIN C,10 ;"("? + JRST BYTE1 ;YES, GET NEW BYTE SIZE + JRST OP3 ;NO, EXIT + RADX50: PUSHJ PP,EVALEX ;EVALUATE CODE + JUMPN RC,ERRAX ;ERROR IF NOT ABSOLUTE + MOVE ARG,AC0 + JUMPNC ERRAX + PUSHJ PP,GETSYM ;YES, GET SYMBOL + TRZ ER,ERRA ;CLEAR ERROR + PUSHJ PP,SQOZE ;SQUOZE SIXBIT AND ADD CODE + JRST STOW ;STOW CODE AND EXIT + + +SQOZE: MOVE AC1+1,AC0 ;PUT SIXBIT IN AC1+1 + MOVEI AC0,0 ;CLEAR RESULT +SQOZ1: MOVEI AC1,0 + LSHC AC1,6 ;PUT 6-BIT CHARACTER IN AC1 + LDB AC1,[POINT 6,CSTAT(AC1),23] ;CONVERT TO RADIX50 + IMULI AC0,50 ;MULTIPLY PREVIOUS RESULT + ADD AC0,AC1 ;ADD NEW CHARACTER + JUMPN AC1+1,SQOZ1 ;TEST FOR END + LSH ARG,^D30 ;LEFT-JUSTIFY CODE + IOR AC0,ARG ;MERGE WITH RESULT + POPJ PP, + + ; PSEUDO-END STATEMENT FOR MULTI-FILE CAPABILITY + +; HERE IF PRGEND (PASS 1) +PSEND0: TLO IO,MFLSW ;PSEND SEEN + PUSHJ PP,END0 ;AS IF END STATEMENT + HLLZS IO ;CLEAR ER(RH) + SETZM ERRCNT ;CLEAR ERROR COUNT FOR EACH PROG. + JUMP2 PSEND2 ;DIFFERENT ON PASS2 +IFN UNIVR,<SKIPE UNIVSN ;SEEN A UNIVERSAL + PUSHJ PP,UNISYM ;YES, STORE SYMBOLS> + PUSHJ PP,PSEND4 ;SAVE SYMBOLS, POINTERS AND TITLE + TLZ IO,IOTLSN ;CLEAR TITLE SEEN FLAG +PSEND1: TLZ IO,MFLSW ;FOR NEXT FILE +IFN UNIVR,<SETZM UNISCH ;CLEAR UNIVERSAL SEARCH TABLE + MOVE AC0,[UNISCH,,UNISCH+1] + BLT AC0,UNISCH+.UNIV-1 + PUSHJ PP,OUTFF ;RESET PAGE COUNT> + MOVSI AC0,1 ;SET SO RELOC 0 WORKS + JRST LOC10 ;FOR RELOC 0 + +; HERE IF PRGEND (PASS 2) +PSEND2: SETZM SBUF ;SO SUBTTL IS NOT WRONG + PUSHJ PP,PSEND5 ;PUT TITLE BACK + PUSHJ PP,PSEND1 ;COMMON CODE + JRST PASS20 ;OUTPUT THE ENTRIES + +; HERE IF END (PASS 1) +PSEND3: PUSHJ PP,PSEND4 ;SAVE LAST PROGRAM + HLRS PRGPTR ;REINITIALIZE POINTER + PUSHJ PP,PSEND5 ;READ BACK FIRST PROGRAM + JRST PASS20 + ;HERE TO SAVE AND RESTORE SYMBOL TABLE, TITLE AND OTHER USEFUL LOCATIONS + XTRA==4 ;NUMBER OF OTHER LOCATIONS TO SAVE + +PSEND4: MOVE V,FREE ;GET NEXT FREE LOCATION + ADDI V,LENGTH+.TBUF/5+XTRA + CAML V,SYMBOL ;WILL WORST CASE FIT? + PUSHJ PP,XCEED ;NO, EXPAND + MOVS V,FREE + HRR V,PRGPTR ;LAST PRGEND BLOCK + HLRM V,(V) ;LINK THIS BLOCK + SKIPN PRGPTR ;IF FIRST TIME + HLLZM V,PRGPTR ;SET LINK TO START OF CHAIN + HLRM V,PRGPTR ;POINTER TO IT + SETZM @FREE ;CLEAR LINK WORD + AOS FREE ;THIS LOCATION USED NOW + MOVS AC0,SYMBOL ;BOTTOM OF SYMBOL TABLE + HRR AC0,FREE ;FREE SPACE + MOVE V,@SYMBOL ;GET NUMBER OF SYMBOLS + ASH V,1 ;TWO WORDS PER SYMBOL + ADDI V,1 ;ONE MORE FOR COUNT + ADDB V,FREE ;END OF TABLE WHEN MOVED + BLT AC0,(V) ;MOVE TABLE + HRRZ AC0,JOBREL ;TOP OF CORE + SUBI AC0,1 + MOVEM AC0,SYMTOP ;FOR NEXT SYMBOL TABLE + SUBI AC0,LENGTH ;LENGTH OF INITIAL SYMBOLS + MOVEM AC0,SYMBOL ;SET POINTER TO COUNT OF SYMBOLS + HRLI AC0,SYMNUM ;BLT POINTER + BLT AC0,@SYMTOP ;SET UP INITIAL SYMBOL TABLE + PUSHJ PP,SRCHI ;SET UP SEARCH POINTER + MOVEI AC0,.TBUF ;MAX NUMBER OF CHARS. IN TITLE + SUB AC0,TCNT ;ACTUAL NUMBER + IDIVI AC0,5 ;NUMBER OF WORDS + SKIPE AC1 ;REMAINDER? + ADDI AC0,1 ;YES + MOVEM AC0,@FREE ;STORE COUNT + AOS FREE ;THIS LOCATION USED NOW + EXCH AC0,FREE ;SET UP AC0 FOR BLT + ADDM AC0,FREE ;WILL BE AFTER TITLE MOVES + HRLI AC0,TBUF ;BLT POINTER + BLT AC0,@FREE ;MOVE TITLE + MOVE AC2,LITHDX ;POINTER TO LIT INFO. + MOVE AC0,-1(AC2) ;SIZE OF PASS1 LOCO + PUSHJ PP,STORIT ;SAVE IT IN SYMBOL TABLE + MOVE AC2,VARHDX ;SAME FOR VARS + MOVE AC0,-1(AC2) + PUSHJ PP,STORIT +IFN RENTSW,< + MOVE AC0,HISNSW ;GET TWOSEG/HISEG FLAG + HRR AC0,HIGH1 ;AND PASS1 BREAK + PUSHJ PP,STORIT + JUMPGE AC0,PSEND6 ;NOT TWOSEG + MOVE AC0,SVTYP3 ;HIGH SEGMENT OFFSET + PUSHJ PP,STORIT ;SAVE IT ALSO> +PSEND6: MOVE AC0,FREE ;GET NEXT FREE LOCATION + SUBI AC0,1 ;LAST ONE USED + HRRZ V,PRGPTR ;POINTER TO START OF DATA BLOCK + HRLM AC0,(V) ;LINK TO END OF BLOCK + POPJ PP, ;RETURN + + PSENDX: PUSHJ PP,XCEED ;NEED TO EXPAND CORE FIRST +PSEND5: HRRZ AC0,JOBREL ;GET TOP OF CORE + SUBI AC0,1 + MOVEM AC0,SYMTOP ;TOP OF NEW SYMBOL TABLE + HRRZ V,PRGPTR ;ADDRESS OF THIS BLOCK + JUMPE V,PSNDER ;ERROR LINK NOT SET UP + MOVE AC1,(V) ;NEXT LINK + MOVE V,1(V) ;GET ITS SYMBOL COUNT + ASH V,1 ;NUMBER OF WORDS + ADDI V,1 ;PLUS ONE FOR COUNT + SUBI AC0,(V) ;START OF NEW SYMBOL TABLE + CAMG AC0,FREE ;WILL IT FIT + JRST PSENDX ;NO, NEED TO EXPAND AND RESET AC0 + ADD V,PRGPTR ;POINT TO END OF SYMBOL TABLE + MOVEI V,1(V) ;THEN TO BEG OF TITLE + MOVEM AC0,SYMBOL ;BOTTOM OF NEW TABLE + HRL AC0,PRGPTR ;ADDRESS OF FIRST WORD OF BLOCK + ADD AC0,[1,,0] ;MAKE BLT POINTER + HRRM AC1,PRGPTR ;POINT TO NEXT BLOCK + BLT AC0,@SYMTOP ;MOVE TABLE + PUSHJ PP,SRCHI ;SET UP POINTER + MOVE AC1,(V) ;NUMBER OF WORDS OF TITLE + MOVEI AC0,1(V) ;START OF STORED TITLE + ADD V,AC1 ;INCREMENT PAST TITLE + ADDI AC1,TBUF-1 ;END OF TITLE + HRLI AC0,TBUF ;WHERE TO PUT IT + MOVSS AC0 ;BLT POINTER + BLT AC0,(AC1) ;MOVE TITLE + TLO IO,IOTLSN ;SET AS IF TITLE SEEN + MOVE AC2,LITHDX ;INVERSE OF ABOVE + PUSHJ PP,GETIT + MOVEM AC0,-1(AC2) + MOVE AC2,VARHDX ;SAME FOR VARS + PUSHJ PP,GETIT + MOVEM AC0,-1(AC2) +IFN RENTSW,< + PUSHJ PP,GETIT ;GET TWO HALF WORDS + HRRZM AC0,HIGH1 ;PASS1 BREAK + HLLEM AC0,HISNSW ;TWOSEG/HISEG FLAG + JUMPGE AC0,CPOPJ ;NOT TWOSEG + PUSHJ PP,GETIT + MOVEM AC0,SVTYP3 ;BLOCK 3 WORD> + POPJ PP, + +STORIT: MOVEM AC0,@FREE ;STORE IT IN DATA BLOCK + AOS FREE ;ADVANCE POINTER + POPJ PP, + +GETIT: MOVE AC0,1(V) ;FILL AC0 OUT OF PRGEND BLOCK + AOJA V,CPOPJ ;INCREMENT AND RETURN + +PSNDER: HRROI RC,[SIXBIT /PRGEND ERROR @/] + JRST ERRFIN + ;MULTIPLE SYMBOL TABLE FEATURE PSEUDO-OPS + +IFN UNIVR,< +UNIV0: JUMP2 TITLE0 ;DO IT ALL ON PASS 1 + HRRZ SX,UNIVNO ;GET NUMBER OF UNIVERSALS SEEN + CAIL SX,.UNIV ;ALLOW ONE MORE? + JRST UNVERR ;NO, GIVE FATAL ERROR + AOS UNIVNO ;ONE MORE NOW + SETOM UNIVSN ;AND SET SEEN A UNIVERSAL + JRST TITLE0 ;CONTINUE AS IF TITLE + + +ADDUNV: PUSH PP,RC ;AN AC TO USE + PUSHJ PP,NOUT ;CONVERT TO SIXBIT + HRRZ RC,UNIVNO ;GET ENTRY INDEX + MOVEM AC0,UNITBL(RC) ;STORE SIXBIT NAME IN TABLE + HRRZS UNIVSN ;ONLY DO IT ONCE + POP PP,RC ;RESTORE RC + POPJ PP, ;AND RETURN + +UNVERR: HRROI RC,[SIXBIT /TOO MANY UNIVERSALS@/] + JRST ERRFIN + +UNISYM: HRRZ AC0,FREE ;GET HIGHEST FREE LOCATION + MOVEM AC0,JOBFF ;INTO JOBFF + PUSHJ PP,SUPRSA ;TURN ON SUPPRESS BIT + PUSH PP,SYMBOL ;NEED TO SAVE INCASE PRGEND + MOVE AC0,SYMTOP ;TOP OF TABLE + SUB AC0,SYMBOL ;GET LENGTH OF TABLE + HRL ARG,SYMBOL ;BOTTOM OF TABLE + HRR ARG,JOBFF ;WHERE TO GO + HRRZ RC,UNIVNO ;GET TABLE INDEX + HRRM ARG,SYMBOL ;WILL BE THERE SOON + HRRZM ARG,UNIPTR(RC) ;STORE IN CORRESPONDING PLACE + ADDB AC0,JOBFF ;WHERE TO END + HRLM AC0,UNIPTR(RC) ;SAVE NEW SYMTOP + BLT ARG,@JOBFF ;MOVE TABLE + HRRZM AC0,UNITOP ;SAVE TOP OF TABLES+1 + CAMLE AC0,MACSIZ ;IN CASE OVER A K BOUND + MOVEM AC0,MACSIZ ;DON'T REDUCE SO FAR NOW + MOVEM AC0,FREE ;JUST IN CASE IN MACRO + MOVE AC0,SRCHX ;SAVE OLD SEARCH POINTER + PUSHJ PP,SRCHI ;GET SEARCH POINTER + EXCH AC0,SRCHX + MOVEM AC0,UNISHX(RC) ;SAVE IT + SETZM UNIVSN ;CLEAR FLAG INCASE PRGEND + POP PP,SYMBOL ;RESTORE OLD VALUE + POPJ PP, ;RETURN + + SERCH0: PUSHJ PP,GETSYM ;GET A SYMBOL + JRST ERRAX ;ERROR IF NOT VALID + MOVEI RC,1 ;START AT ENTRY ONE + CAIL RC,.UNIV ;CHECK FOR CONSISTENCY ERROR + JRST SCHERR ;CANNOT FIND THIS ONE + CAME AC0,UNITBL(RC) ;LOOK FOR MATCH + AOJA RC,.-3 ;NOT FOUND YET + MOVE AC0,RC ;STORE TABLE ENTRY NUMBER + MOVEI RC,1 ;START AT ENTRY ONE + CAIL RC,.UNIV ;CHECK FOR CONSISTENCY ERROR + JRST SCHERR ;SHOULD NEVER HAPPEN!! + SKIPE UNISCH(RC) ;LOOK FOR AN EMPTY SLOT + AOJA RC,.-3 ;NOT FOUND YET + MOVEM AC0,UNISCH(RC) ;STORE INDEX IN TABLE + JUMPCM SERCH0 ;LOOK FOR MORE NAMES + POPJ PP, ;FINISHED + +SCHERR: MOVSI RC,[SIXBIT /CANNOT FIND UNIVERSAL@/] + JRST ERRFIN ;NAME IN AC0 + +;MESSAGE FOR CASE WHERE FILES AFTER UNIVERSAL USED MORE BUFFER SPACE THAN FIRST UNIVERSAL +UNIERR: HRROI RC,[SIXBIT /UNIVERSAL PROGRAM(S) MUST HAVE SAME OUTPUT SPECIFICATION AS OTHER FILES@/] + JRST ERRFIN +> + SUBTTL MACRO/REPEAT HANDLERS + +REPEA0: PUSHJ PP,EVALXQ ;EVALUATE REPEAT EXP, EXTERNS ARE ILL. + JUMPNC ERRAX + +REPEA1: JUMPLE AC0,REPZ ;PASS THE EXP., DONT PROCESS + SOJE AC0,REPO ;REPEAT ONCE +REPEA2: PUSHJ PP,GCHARQ ;GET STARTING "<" + CAIE C,"<" + JRST REPEA2 + PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + PUSH MP,REPEXP + MOVEM AC0,REPEXP + PUSH MP,REPPNT ;STACK PREVIOUS REPEAT POINTER + MOVEM ARG,REPPNT ;STORE NEW POINTER + TDZA SDEL,SDEL ;YES, INITIALIZE BRACKET COUNT AND SKIP + +REPEA4: PUSHJ PP,WCHARQ ;WRITE A CHARACTER + PUSHJ PP,GCHARQ ;GET A CHARACTER + CAIN C,"<" ;"<"? + AOJA SDEL,REPEA4 ;YES, INCREMENT AND WRITE + CAIE C,">" ;">"? + JRST REPEA4 ;NO, WRITE THE CHARACTER + SOJGE SDEL,REPEA4 ;YES, WRITE IF NON-NEGATIVE COUNT + MOVSI CS,(BYTE (7) 177,3) ;SET "REPEAT" END + PUSHJ PP,WWRXE ;WRITE END + SKIPN LITLVL ;LITERAL MIGHT END ON LINE + SKIPE MACLVL ;IF IN MACRO DARE NOT PROCESS + JRST .+3 ;REST OF LINE SINCE MACRO MIGHT END ON IT + PUSHJ PP,BYPASS ;BYPASS + PUSHJ PP,STOUTS ;POLISH OF LINE BEFORE PROCESSING REPEAT + PUSH MP,MRP ;STACK PREVIOUS READ POINTER + PUSH MP,RCOUNT ;SAVE WORD COUNT + HRRZ MRP,REPPNT ;SET UP READ POINTER + SKIPN MACLVL ;IF IN MACRO GIVE CR-LF FIRST + SKIPE LITLVL ;SAME FOR LITERAL + JRST REPEA7 + AOJA MRP,POPOUT ;BYPASS ARG COUNT + +REPEA7: HRRZ MRP,REPPNT ;SET UP READ POINTER + ADDI MRP,1 ;BYPASS ARG COUNT +REPEA8: MOVEI C,CR + JRST RSW1 + +REPEND: SOSL REPEXP + JRST REPEA7 + HRRZ V,REPPNT ;GET START OF TREE + PUSHJ PP,REFDEC ;DECREMENT REFERENCE + POP MP,RCOUNT + POP MP,MRP + POP MP,REPPNT + POP MP,REPEXP + SKIPN LITLVL ;IF IN LITERAL OR + SKIPE MACLVL ;IF IN MACRO + JRST RSW0 ;FINISH OF LINE NOW + JRST REPEA8 + + REPZ: MOVE SDEL,SEQNO2 ;SAVE IN CASE OF END OF FILE + MOVEM SDEL,REPSEQ + MOVE SDEL,PAGENO + MOVEM SDEL,REPPG + SETOM INREP + MOVEI SDEL,0 ;SET COUNT +REPZ1: PUSHJ PP,GCHAR ;GET NEXT CHARACTER + CAIN C,"<" ;"<"? + AOJA SDEL,REPZ1 ;YES, INCREMENT COUNT + CAIN C,">" ;">"? + SOJLE SDEL,REPZ2 ;YES, EXIT IF MATCHING + JRST REPZ1 ;NO, RECYCLE +REPZ2: SETZM INREP ;FLAG OUT OF IT + SETZM INCND ;AND CONDITIONAL ALSO + JRST STMNT ;AND EXIT + +REPO: PUSHJ PP,GCHAR ;GET "<" + CAIE C,"<" + JRST REPO + SKIPE RPOLVL ;ARE WE NESTED? + AOS RPOLVL ;YES, DECREMENT CURRENT + PUSH MP,RPOLVL + SETOM RPOLVL + JRST STMNT + +REPO1: CAIN C,"<" + SOS RPOLVL + CAIN C,">" + AOSE RPOLVL + JRST RSW2 + POP MP,RPOLVL + PUSHJ PP,RSW2 + JRST RSW0 + DEFIN0: PUSHJ PP,GETSYM ;GET MACRO NAME + JRST ERRAX ;EXIT ON ERROR + MOVEM PP,PPTMP1 ;SAVE POINTER + MOVEM AC0,PPTMP2 ;SAVE NAME + TLO IO,IORPTC + MOVE SX,SEQNO2 ;SAVE IN CASE OF EOF + MOVEM SX,DEFSEQ + MOVE SX,PAGENO + MOVEM SX,DEFPG + SETOM INDEF ;AND FLAG IN DEFINE + SYN .TEMP,COMSW ;SAVE SPACE + SETZB SX,COMSW ;SET ARGUMENT AND REFERENCE COUNT AND COMMENT SWITCH +DEF02: PUSHJ PP,GCHAR ;SEARCH FOR "(" OR "<" + CAIG C,FF ;SEARCH FOR END OF LINE + CAIGE C,LF ;LF,VT, OR FF + JRST .+2 ;WASN'T ANY OF THEM + SETZM COMSW ;RESET COMMENT SWITCH + CAIN C,";" ;COMMENT? + SETOM COMSW ;YES, SET COMMENT SWITCH + SKIPE COMSW ;INSIDE A COMMENT? + JRST DEF02 ;YES, IGNORE CHARACTER + CAIN C,"<" ;"<"? + JRST DEF20 ;YES + CAIE C,"(" ;"("? + JRST DEF02 ;NO +DEF10: PUSHJ PP,GETSYM ;YES, GET DUMMY SYMBOL + TRO ER,ERRA ;FLAG ERROR + ADDI SX,1 ;INCREMENT ARG COUNT + PUSH PP,AC0 ;STACK IT + CAIN C,'<' ;A DEFAULT ARGUMENT COMING UP? + JRST DEF80 ;YES, STORE IT AWAY + CAIE C,11 ;")"? + JRST DEF10 ;NO, GET NEXT DUMMY SYMBOL +DEF12: PUSHJ PP,GCHAR + CAIE C,"<" ;"<"? + JRST DEF12 ;NO +DEF20: PUSH PP,[0] ;YES, MARK THE LIST + LSH SX,9 ;SHIFT ARG COUNT + AOS ARG,SX + PUSHJ PP,SKELI ;INITIALIZE MACRO SKELETON + MOVE AC0,PPTMP2 ;GET NAME + TLO IO,DEFCRS + PUSHJ PP,MSRCH ;SEARCH THE TABLE + JRST DEF24 ;NOT FOUND + TLNN ARG,MACF ;FOUND, IS IT A MACRO? + TROA ER,ERRX ;NO, FLAG ERROR AND SKIP + PUSHJ PP,REFDEC ;YES, DECREMENT THE REFERENCE +DEF24: HRRZ V,WWRXX ;GET START OF TREE + SKIPN .TEMP ;ANY DEFAULT ARGUMENTS TO TAKE CARE OF? + JRST DEF25 ;NO + HRRZ C,1(V) ;GET SHIFTED ARG COUNT + LSH C,-9 ;GET ARG COUNT BACK + ADDI C,1 ;ONE MORE FOR TERMINAL ZERO + ADD C,.TEMP ;NUMBER OF ITEMS IN STACK + HRLS C ;MAKE XWD + SUB PP,C ;BACK UP STACK + MOVE SDEL,.TEMP ;NUMBER OF WORDS NEEDED + ADDB SDEL,FREE ;FROM FREE CORE + CAML SDEL,SYMBOL ;MORE CORE NEEDED + PUSHJ PP,XCEEDS ;YES, TRY TO GET IT + SUB SDEL,.TEMP ;FORM POINTER + HRLM SDEL,1(V) ;STORE IT WITH ARG COUNT IN MACRO + SUBI SDEL,1 ;TO USE FOR PUSHING POINTER INTO STORAGE + MOVEI C,1(PP) ;POINT TO START OF STACK +DEF26: MOVE ARG,(C) ;GET AN ITEM OFF STACK + TLNN ARG,-40 ;A POINTER? + JUMPN ARG,[PUSH SDEL,ARG ;YES, STORE IT + AOJA C,DEF26] ;GET NEXT + PUSH PP,ARG ;RESTACK ARGUMENT + SKIPE ARG ;FINISHED IF ZERO + AOJA C,DEF26 ;GET NEXT + PUSH SDEL,ARG ;STORE ZERO IN DEFAULT LIST ALSO + DEF25: MOVSI ARG,MACF + MOVEM PP,PPTMP2 ;STORE TEMP STORAGE POINTER + PUSHJ PP,INSERT ;INSERT/UPDATE + TLZ IO,DEFCRS ;JUST IN CASE + SETZM ARGF ;NO ARGUMENT SEEN + SETZM SQFLG ;AND NO ' SEEN + TDZA SDEL,SDEL ;CLEAR BRACKET COUNT +DEF30: PUSHJ PP,WCHAR ;WRITE CHARACTER +DEF31: PUSHJ PP,GCHAR ;GET A CHARACTER +DEF32: MOVE CS,C ;GET A COPY + CAIN C,";" ;IS IT A COMMENT + JRST CPEEK ;YES CHECK FOR ;; +DEF33: CAIG CS,"Z"+40 ;CONVERT LOWER CASE + CAIGE CS,"A"+40 + JRST .+2 + SUBI CS,40 + CAIGE CS,40 ;TEST FOR CONTROL CHAR. + JRST [SKIPN SQFLG ;HAS SINGLE QUOTE BEEN SEEN? + JRST DEF30 ;NO, OUTPUT THIS CHAR. + PUSH PP,C ;YES, SAVE CURRENT CHAR + MOVEI C,47 ;SET UP QUOTE + PUSHJ PP,WCHAR;WRITE IT + POP PP,C ;GET BACK CURRENT CHAR. + SETZM SQFLG ;RESET FLAG + JRST DEF30] ;AND CONTINUE + CAILE CS,77+40 + JRST DEF30 ;TEST FOR SPECIAL + MOVE CS,CSTAT-40(CS) ;GET STATUS BITS + TLNE CS,6 ;ALPHA-NUMERIC? + JRST DEF40 ;YES + SKIPN SQFLG ;WAS A ' SEEN? + JRST DEF36 ;NO, PROCESH + PUSH PP,C ;YES, SAVE CURRENT CHARACTER + MOVEI C,47 ;AND PUT IN A ' + PUSHJ PP,WCHAR ;... + POP PP,C ;RESTORE CURRENT CHARACTER + SETZM SQFLG ;AND RESET FLAG +DEF36: CAIE C,47 ;IS THIS A '? + JRST DEF35 ;NOPE + SKIPN ARGF ;YES, WAS LAST THING SEEN AN ARG? + SETOM SQFLG ;IF NOT, SET SNGL QUOT FLAG + SETZM ARGF ;BUT NOT ARGUMENT IN ANY CASE + JRST DEF31 ;GO GET NEXT CHARACTER + DEF35: SETZM ARGF ;THIS IS NOT AN ARGUMENT + CAIN C,"<" ;"<"? + AOJA SDEL,DEF30 ;YES, INCREMENT COUNT AND WRITE + CAIN C,">" ;">"? + SOJL SDEL,DEF70 ;YES, TEST FOR END + JRST DEF30 ;NO, WRITE IT + +CPEEK: TLNN IO,IOPALL ;IF LALL IS ON + JRST DEF33 ;JUST RETURN + PUSHJ PP,PEEK ;LOOK AT NEXT CHAR. + CAIN C,";" ;IS IT ;;? + JRST CPEEK1 ;YES + MOVE C,CS ;RESTORE C + JRST DEF33 ;AND RETURN + +CPEEK1: PUSHJ PP,GCHAR ;GET THE CHAR. + CAIE C,">" ;RETURN IF END OF MACRO + CAIG C,CR ;IS CHAR ONE OF + CAIGE C,LF ;LF,VT,FF,CR + JRST CPEEK1 ;NO,SO GET NEXT CHAR. + JRST DEF32 ;YES,RETURN AND STORE + DEF40: MOVEI AC0,0 ;CLEAR ATOM + MOVSI AC1,(POINT 6,AC0) ;SET POINTER +DEF42: PUSH PP,C ;STACK CHARACTER + TLNE AC1,770000 ;HAVE WE STORED 6? + IDPB CS,AC1 ;NO, STORE IN ATOM + PUSHJ PP,GCHAR ;GET NEXT CHARACTER + MOVE CS,C + CAIG CS,"Z"+40 + CAIGE CS,"A"+40 + JRST .+2 + SUBI CS,40 ;CONVERT LOWER TO UPPER + CAIL CS,40 + CAILE CS,77+40 + JRST DEF44 ;TEST SPECIAL + MOVE CS,CSTAT-40(CS) ;GET STATUS + TLNE CS,6 ;ALPHA-NUMERIC? + JRST DEF42 ;YES, GET ANOTHER +DEF44: PUSH PP,[0] ;NO, MARK THE LIST + MOVE SX,PPTMP1 ;GET POINTER TO TOP + +DEF46: SKIPN 1(SX) ;END OF LIST? + JRST DEF50 ;YES + CAME AC0,1(SX) ;NO, DO THEY COMPARE? + AOJA SX,DEF46 ;NO, TRY AGAIN + SUB SX,PPTMP1 ;YES, GET DUMMY SYMBOL NUMBER + LSH SX,4 + MOVSI CS,<(BYTE (7) 177,101)>(SX) ;SET ESCAPE CODE MACEND + LSH AC0,-^D30 + CAIN AC0,5 ;"%"? + TLO CS,1000 ;YES, SET CRESYM FLAG + PUSHJ PP,WWORD ;WRITE THE WORD + SETOM ARGF ;SET ARGUMENT SEEN FLAG + SETZM SQFLG ;AND IGNORE ANY ' WAITING TO GET INTO STRING +DEF48: MOVE PP,PPTMP2 ;RESET PUSHDOWN POINTER + TLO IO,IORPTC ;ECHO LAST CHARACTER + JRST DEF31 ;RECYCLE + +DEF50: + SKIPN SQFLG ;HAVE WE SEEN A '? + JRST DEF51 ;NOPE + MOVEI C,47 ;YES, PUT IT IN + PUSHJ PP,WCHAR ;... + SETZM SQFLG ;AND CLEAR FLAG +DEF51: MOVE C,2(SX) ;GET CHARACTER + JUMPE C,DEF48 ;CLEAN UP IF END + PUSHJ PP,WCHAR ;WRITE THE CHARACTER + AOJA SX,DEF51 ;GET NEXT + +DEF70: MOVE PP,PPTMP1 ;RESTORE PUSHDOWN POINTER + MOVSI CS,(BYTE (7) 177,1) + PUSHJ PP,WWRXE ;WRITE END + SETZM INDEF ;OUT OF IT + JRST BYPASS + ; HERE TO STORE DEFAULT ARGUMENTS + +DEF80: AOS .TEMP ;COUNT ONE MORE + PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + HRL V,SX ;SYMBOL NUMBER + PUSH PP,V ;STORE POINTER + TDZA SDEL,SDEL ;ZERO BRACKET COUNT +DEF81: PUSHJ PP,WCHARQ ;WRITE A CHARACTER + PUSHJ PP,GCHARQ ;GET A CHARACTER + CAIN C,"<" ;ANOTHER "<"? + AOJA SDEL,DEF81 ;YES, INCREMENT AND WRITE + CAIE C,">" ;CLOSING ANGLE? + JRST DEF81 ;NO, JUST WRITE THE CHAR. + SOJGE SDEL,DEF81 ;YES, WRITE IF NOT END + MOVSI CS,(BYTE (7) 177,2) + PUSHJ PP,WWRXE ;WRITE END OF DUMMY ARGUMENT + PUSHJ PP,GCHAR ;READ AT NEXT CHAR. + CAIE C,")" ;END OF ARGUMENT LIST? + JRST DEF10 ;NO, GET NEXT SYMBOL + JRST DEF12 ;YES, LOOK FOR "<" + SUBTTL MACRO CALL PROCESSOR +CALLM: SKIPGE MACENL ;ARE WE TRYING TO RE-ENTER? + JRST ERRAX ;YES, BOMB OUT WITH ERROR + HRROS MACENL ;FLAG "CALLM IN PROGRESS" + EXCH MP,RP + PUSH MP,V ;STACK FOR REFDEC + EXCH MP,RP + MOVEM AC0,CALNAM ;SAVE MACRO NAME INCASE OF ERROR + MOVE SDEL,SEQNO2 ;SAVE IN CASE OF EOF + MOVEM SDEL,CALSEQ + MOVE SDEL,PAGENO + MOVEM SDEL,CALPG + ADDI V,1 ;POINT TO DUMMY SYMBOL COUNT + AOS SDEL,0(V) ;INCREMENT ARG COUNT + HLLZM SDEL,.TEMP ;DEFAULT ARG POINTER IF NON-ZERO + LSHC SDEL,-^D<9+36> ;ZERO SDEL, GET ARG COUNT IN SX + ANDI SX,777 ;MASK + SKIPE .TEMP ;IF AT LEAST ONE DEFAULT ARG + HRRM SX,.TEMP ;STORE COUNT OF ARGS + PUSH PP,V ;STACK FOR MRP + PUSH PP,RP ;STACK FOR MACPNT + JUMPE SX,MAC20 ;TEST FOR NO ARGS + PUSHJ PP,CHARAC + CAIE C,"(" ;"(" + TROA SDEL,-1 ;NO, FUDGE PAREN COUNT AND SKIP + +MAC10: PUSHJ PP,GCHAR ;GET A CHARACTER, LOOK FOR AN ARG + CAIG C,CR + CAIGE C,LF + CAIN C,";" ;";"? + JRST MAC21 ;YES, END OF ARGUMENT STRING + + PUSHJ PP,SKELI1 ;NO, INITIALIZE SKELETON + CAIN C,"<" ;"<"? + JRST MAC30 ;YES, PROCESS AS SPECIAL + CAIE C,176 + CAIN C,134 ;"\" + JRST MAC40 ;YES, PROCESS SYMBOL + +MAC14: CAIN C,"," ;","? + JRST MAC16 ;YES; NULL SYMBOL + CAIN C,"(" ;"("? + ADDI SDEL,1 ;YES, INCREMENT COUNT + CAIN C,")" ;")"? + SOJL SDEL,MAC16 ;YES, TEST FOR END + PUSHJ PP,WCHAR ;WRITE INTO SKELETON +MAC14A: PUSHJ PP,CHARAC ;GET NEXT CHARACTER + CAIG C,CR + CAIGE C,LF + JRST .+2 + JRST MAC15 ;TEST FOR END OF LINE + CAIE C,";" ;";"? + JRST MAC14 ;YES, END OF LINE + +MAC15: TLO IO,IORPTC +MAC16: MOVSI CS,(BYTE (7) 177,2) + PUSHJ PP,WWRXE ;WRITE END + EXCH MP,RP + PUSH MP,WWRXX + EXCH MP,RP + SOJLE SX,MAC20 ;BRANCH IF NO MORE ARGS + JUMPGE SDEL,MAC10 ;HAVEN'T SEEN TERMINAL ")" YET + MAC20: TLZN IO,IORPTC + PUSHJ PP,CHARAC +MAC21: EXCH MP,RP + JUMPE SX,MAC21B ;NO MISSING ARGS +MAC21A: PUSH MP,[-1] ;FILL IN MISSING ARGS + SKIPN .TEMP ;ANY DEFAULT ARGS? + JRST MAC21C ;NO + HRRZ C,.TEMP ;GET ARG COUNT + SUBI C,-1(SX) ;ACCOUNT FOR THOSE GIVEN + HRLZS C ;PUT IN LEFT HALF + HLRZ SDEL,.TEMP ;ADDRESS OF TABLE +MAC21D: SKIPN (SDEL) ;END OF LIST + JRST MAC21C ;YES + XOR C,(SDEL) ;TEST FOR CORRECT ARG + TLNN C,-1 ;WAS IT? + JRST MAC21E ;YES + XOR C,(SDEL) ;BACK THE WAY IT WAS + AOJA SDEL,MAC21D ;AND TRY AGAIN + +MAC21E: MOVEM C,(MP) ;REPLACE -1 WITH TREE POINTER + AOS 1(C) ;INCREMENT REFERENCE +MAC21C: SOJG SX,MAC21A +MAC21B: PUSH MP,[0] ;SET TERMINAL + HRRZ C,LIMBO + TLNN IO,IOSALL ;SUPPRESSING ALL? + JRST MAC23 ;NO + JUMPN MRP,MAC27 ;IN MACRO? + CAIE C,";" ;NO,IN COMMENT? + JRST MAC26 ;NO +MAC22: PUSHJ PP,CHARAC ;YES,GET IT INTO THE LBUF + CAIG C,CR ;LESS THAN CR? + CAIGE C,LF ;AND GREATER THAN LF? + JRST MAC22 ;NO GET ANOTHER +MAC26: HRLZI SX,70000 ;DECREMENT BYTE POINTER + ADDB SX,LBUFP + JUMPGE SX,MAC27 + HRLOI SX,347777 + ADDM SX,LBUFP +MAC27: HRLI C,-1 ;SET FLAG + JRST MAC25 + +MAC23: MOVEI SX,"^" + JUMPAD MAC24 ;BRANCH IF ADDRESS FIELD + CAIN C,";" ;IF SEMI-COLON + SKIPE LITLVL ;AND NOT IN A LITERAL + JRST MAC24 ;NOT BOTH TRUE + JUMPN MRP,MAC24 ;OR IN A MACRO + PUSHJ PP,STOUT ;LIST COMMENT OR CR-LF + TLNE IO,IOPALL ;MACRO EXPANSION SUPPRESSION? + TLO IO,IOMAC ; NO, SET TEMP BIT + TDOA C,[-1] ;FLAG LAST CHARACTER +MAC24: DPB SX,LBUFP ;SET ^ INTO LINE BUFFER +MAC25: PUSH MP,MACPNT + POP PP,MACPNT + PUSH MP,C + PUSH MP,RCOUNT ;STACK WORD COUNT + PUSH MP,MRP ;STACK MACRO POINTER + POP PP,MRP ;SET NEW READ POINTER + EXCH MP,RP + AOS MACLVL + HRRZS MACENL ;RESET "CALLM IN PROGRESS" + JUMPOC STMNT2 ;OP-CODE FIELD + JRST EVATOM ;ADDRESS FIELD + + MAC30: MOVEI AC0,0 ;INITIALIZE BRACKET COUNTER +MAC31: PUSHJ PP,GCHAR ;GET A CHARACTER + CAIN C,"<" ;"<"? + ADDI AC0,1 ;YES, INCREMENT COUNT + CAIN C,">" ;">"? + SOJL AC0,MAC14A ;YES, EXIT IF MATCHING + PUSHJ PP,WCHAR ;WRITE INTO SKELETON + JRST MAC31 ;GO BACK FOR ANOTHER + +MAC40: PUSH PP,SX ;STACK REGISTERS + PUSH PP,SDEL + HLLM IO,TAGINC ;SAVE IO FLAGS + PUSHJ PP,CELL ;GET AN ATOM + MOVE V,AC0 ;ASSUME NUMERIC + TLNE IO,NUMSW ;GOOD GUESS? + JRST MAC41 ;YES + PUSHJ PP,SSRCH ;SEARCH THE SYMBOL TABLE + TROA ER,ERRX ;NOT FOUND, ERROR +MAC41: PUSHJ PP,MAC42 ;FORM ASCII STRING + HLL IO,TAGINC ;RESTORE IO FLAGS + POP PP,SDEL + POP PP,SX + TLO IO,IORPTC ;REPEAT LAST CHARACTER + JRST MAC14A ;RETURN TO MAIN SCAN + +MAC42: MOVE C,V +MAC44: LSHC C,-^D35 + LSH CS,-1 + DIVI C,0(RX) ;DIVIDE BY CURRENT RADIX + HRLM CS,0(PP) + JUMPE C,.+2 ;TEST FOR END + PUSHJ PP,MAC44 + HLRZ C,0(PP) + ADDI C,"0" ;FORM TEXT + JRST WCHAR ;WRITE INTO SKELETON + MACEN0: SOS MACENL +MACEND: SKIPGE C,MACENL ;TEST "CALLM IN PROGRESS" + AOS MACENL ;INCREMENT END LEVEL AND EXIT + JUMPL C,REPEA8 + EXCH MP,RP + POP MP,MRP ;RETRIEVE READ POINTER + POP MP,RCOUNT ;AND WORD COUNT + MOVEI C,"^" + SKIPL 0(MP) ;TEST FLAG + PUSHJ PP,RSW2 ;MARK END OF SUBSTITUTION + POP MP,C + POP MP,ARG + SKIPA MP,MACPNT ;RESET MP AND SKIP +MACEN1: PUSHJ PP,REFDEC ;DECREMENT REFERENCE +MACEN2: AOS V,MACPNT ;GET POINTER + MOVE V,0(V) + JUMPG V,MACEN1 ;IF >0, DECREMENT REFERENCE + JUMPL V,MACEN2 ;IF <0, BYPASS + POP MP,V ;IF=0, RETRIEVE POINTER + PUSHJ PP,REFDEC ;DECREMENT REFERENCE + MOVEM ARG,MACPNT + EXCH MP,RP + SOS MACLVL + SKIPN MACENL ;CHECK UNPROCESSED END LEVEL + JRST MACEN3 ;NONE TO PROCESS + TRNN MRP,-1 ;MRP AT END OF TEXT + JRST MACEN0 ;THEN POP THE MACRO STACK NOW +MACEN3: TRNN C,77400 ;SALL FLAG? + HRLI C,0 ;YES,TURN IT OFF + JUMPL C,REPEA8 ;IF FLAG SET SUBSTITUTE + JRST RSW1 + IRP0: SKIPN MACLVL ;ARE WE IN A MACRO? + JRST ERRAX ;NO, BOMB OUT +IRP10: PUSHJ PP,MREADS ;YES, GET DATA SPEC + CAIE C,40 ;SKIP LEADING BLANKS + CAIN C,"(" ;"("? + JRST IRP10 ;YES, BYPASS + CAIN C,11 + JRST IRP10 + CAIE C,177 ;NO, IS IT SPECIAL? + JRST ERRAX ;NO, ERROR + PUSHJ PP,MREADS ;YES + TRZN C,100 ;CREATED? + JRST ERRAX + CAIL C,40 ;TOO BIG? + JRST ERRAX + ADD C,MACPNT ;NO, FORM POINTER TO STACK + PUSH MP,IRPCF ;STACK PREVIOUS POINTERS + PUSH MP,IRPSW + PUSH MP,IRPARP + PUSH MP,IRPARG + PUSH MP,IRPCNT + PUSH MP,0(C) + PUSH MP,IRPPOI + + HRRZM C,IRPARP + MOVEM AC0,IRPCF ;IRPC FLAG FOUND IN AC0 + SETOM IRPSW ;RESET IRP SWITCH + MOVE CS,0(C) + MOVEM CS,IRPARG + + PUSHJ PP,MREADS + CAIE C,"<" ;"<"? + JRST .-2 ;NO, SEARCH UNTIL FOUND + PUSHJ PP,SKELI1 ;INITIALIZE NEW STRING + MOVEM ARG,IRPPOI ;SET NEW POINTER + + TDZA SDEL,SDEL ;ZERO BRACKET COUNT AND SKIP +IRP20: PUSHJ PP,WCHAR1 + PUSHJ PP,MREADS + CAIN C,"<" ;"<"? + AOJA SDEL,IRP20 ;YES, INCREMENT COUNT AND WRITE + CAIE C,">" ;">"? + JRST IRP20 ;NO, JUST WRITE IT + SOJGE SDEL,IRP20 ;YES, WRITE IF NOT MATCHING + MOVE CS,[BYTE (7) 15,177,4] + PUSHJ PP,WWRXE ;WRITE END + PUSH MP,MRP ;STACK PREVIOUS READ POINTER + PUSH MP,RCOUNT ;AND WORD COUNT + SKIPG CS,IRPARG + JRST IRPPOP ;EXIT IF NOT VALID ARGUMENT + MOVEI C,1(CS) ;INITIALIZE POINTER + MOVEM C,IRPARG + IRPSET: EXCH MRP,IRPARG ;SWAP READ POINTERS + MOVE SX,RCOUNT ;SWAP COUNT OF WORDS TO READ + EXCH SX,IRPCNT + MOVEM SX,RCOUNT + PUSHJ PP,SKELI1 ;INITIALIZE SKELETON FOR DATA + HRRZM ARG,@IRPARP ;STORE NEW DS POINTER + SETZB SX,SDEL ;ZERO FOUND FLAG AND BRACKET COUNT + LDB C,MRP ;GET LAST CHAR + CAIN C,"," + SKIPE IRPCF ;IN IRPC + JRST IRPSE1 ;NO + MOVEI SX,1 ;FORCE ARGUMENT +IRPSE1: PUSHJ PP,MREADS + CAIE C,177 ;SPECIAL? + AOJA SX,IRPSE2 ;NO, FLAG AS FOUND + PUSHJ PP,PEEKM ;LOOK AT NEXT CHARACTER + SETZM IRPSW ;SET IRP SWITCH + JUMPG SX,IRPSE4 ;IF ARG FOUND, PROCESS IT + JRST IRPPOP ;NO, CLEAN UP AND EXIT + +IRPSE2: SKIPE IRPCF ;IRPC? + JRST IRPSE3 ;YES, WRITE IT + CAIN C,"," ;NO, IS IT A COMMA? + JUMPE SDEL,IRPSE4 ;YES, EXIT IF NOT NESTED + CAIN C,"<" ;"<"? + ADDI SDEL,1 ;YES, INCREMENT COUNT + CAIN C,">" ;">"? + SUBI SDEL,1 ;YES, DECREMENT COUNT + +IRPSE3: PUSHJ PP,WCHAR + SKIPN IRPCF ;IRPC? + JRST IRPSE1 ;NO, GET NEXT CHARACTER + +IRPSE4: MOVSI CS,(BYTE (7) 177,2) + PUSHJ PP,WWRXE ;WRITE END + MOVEM MRP,IRPARG ;SAVE POINTER + MOVE MRP,RCOUNT ;SAVE COUNT + MOVEM MRP,IRPCNT + HRRZ MRP,IRPPOI ;SET FOR NEW SCAN + AOJA MRP,REPEA8 ;ON ARG COUNT + STOPI0: SKIPN IRPARP ;IRP IN PROGRESS? + JRST ERRAX ;NO, ERROR + SETZM IRPSW ;YES, SET SWITCH + POPJ PP, + +IRPEND: MOVE V,@IRPARP + PUSHJ PP,REFDEC + SKIPE IRPSW ;MORE TO COME? + JRST IRPSET ;YES + +IRPPOP: MOVE V,IRPPOI + PUSHJ PP,REFDEC ;DECREMENT REFERENCE + POP MP,RCOUNT + POP MP,MRP ;RESTORE CELLS + POP MP,IRPPOI + POP MP,@IRPARP + POP MP,IRPCNT + POP MP,IRPARG + POP MP,IRPARP + POP MP,IRPSW + POP MP,IRPCF + JRST REPEA8 + GETDS: ;GET DUMMY SYMBOL NUMBER + MOVE CS,C ;USE CS FOR WORK REGISTER + ANDI CS,37 ;MASK + ADD CS,MACPNT ;ADD BASE ADDRESS + MOVE V,0(CS) ;GET POINTER FLAG + JUMPG V,GETDS1 ;BRANCH IF POINTER + TRNN C,40 ;NOT POINTER, SHOULD WE CREATE? + JRST RSW0 ;NO, FORGET THIS ARG + PUSH PP,WWRXX + PUSH PP,MWP ;STACK MACRO WRITE POINTER + PUSH PP,WCOUNT ;SAVE WORD COUNT + PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + MOVEM ARG,0(CS) ;STORE POINTER + MOVE CS,[BYTE (7) 0,170,170,170,171] ;CREATE A SYMBOL + ADD CS,LSTSYM ;LSTSYM= # OF LAST CREATED + TDZ CS,[BYTE (7) 0,170,170,170,170] + MOVEM CS,LSTSYM + IOR CS,[ASCII /.0000/] + MOVEI C,"." + PUSHJ PP,WCHAR + PUSHJ PP,WWORD ;WRITE INTO SKELETON + MOVSI CS,(BYTE (7) 177,2) + PUSHJ PP,WWRXE ;WRITE END CODE + POP PP,WCOUNT ;RESTORE WORD COUNT + POP PP,MWP ;RESTORE MACRO WRITE POINTER + POP PP,WWRXX + MOVE V,ARG ;SET UP FOR REFINC + +GETDS1: PUSHJ PP,REFINC ;INCREMENT REFERENCE + HRL V,RCOUNT ;SAVE WORD COUNT + PUSH MP,V ;STACK V FOR DECREMENT + PUSH MP,MRP ;STACK READ POINTER + MOVEI MRP,1(V) ;FORM READ POINTER + JRST RSW0 ;EXIT + +DSEND: POP MP,MRP + POP MP,V + HLREM V,RCOUNT ;RESTORE WORD COUNT + HRRZS V ;CLEAR COUNT + PUSHJ PP,REFDEC ;DECREMENT REFERENCE + JRST RSW0 ;EXIT + SKELI1: MOVEI ARG,1 ;ENTRY FOR SINGLE ARG +SKELI: SETZ MWP, ;SIGNAL FIRST TIME THROUGH + PUSHJ PP,SKELWL ;GET POINTER WORD + HRRZM MWP,WWRXX ;SAVE FIRST ADDRESS + HRRZM MWP,LADR ;SAVE START OF LINKED LIST + HRRZM ARG,1(MWP) ;STORE COUNT + SOS WCOUNT ;ACCOUNT FOR WORD + HRRZ ARG,WWRXX ;SET FIRST ADDRESS + ADDI MWP,2 ;BUMP POINTER + HRLI MWP,(POINT 7) ;SET FOR 5 ASCII BYTES + ;SKELW RETURNS WITH ADR OF NEXT FREE LOC IN V (RIGHT) + +SKELW: SOSLE WCOUNT ;STILL SOME SPACE IN LEAF? + POPJ PP, ;YES, RETURN +SKELWL: SKIPE V,NEXT ;GET FIRST FREE ADDRESS + JRST SKELW1 ;IF NON-ZERO, UPDATE FREE + MOVE V,FREE ;GET FREE + ADDI V,.LEAF ;INCREMENT BY LEAF SIZE + CAML V,SYMBOL ;OVERFLOW? + PUSHJ PP,XCEED ;YES, BOMB OUT + EXCH V,FREE ;UPDATE FREE + SETZM (V) ;CLEAR LINK + +SKELW1: HLL V,0(V) ;GET ADDRESS + HLRM V,NEXT ;UPDATE NEXT + SKIPE MWP ;IF FIRST TIME + HRLM V,1-.LEAF(MWP) ;STORE LINK IN FIRST WORD OF LEAF + MOVEI MWP,.LEAF ;SIZE OF LEAF + MOVEM MWP,WCOUNT ;STORE FOR COUNT DOWN + MOVEI MWP,(V) ;SET UP WRITE POINTER + TLO MWP,(POINT 7,,21) ;2 ASCII CHARS + POPJ PP, + + ;WWRXX POINTS TO END OF TREE + ;MWP IDPB POINTER TO NEXT HOLE + ;NEXT FIRST OF A LINKED PORTION THAT IS NOT BEING USED (LEAVES) + ;FREE POINTS TO FREE CORE BETWEEN TREE AND SYM-TABLE + ;LADR POINTS TO BEG OF LINKED PORTION. + GCHARQ: JUMPN MRP,MREADS ;IF GETTING CHAR. FROM TREE +GCHAR: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + CAIG C,FF ;TEST FOR LF, VT OR FF + CAIGE C,LF + POPJ PP, ;NO + JRST OUTIM1 ;YES, LIST IT + +WCHARQ: +WCHAR: +WCHAR1: TLNN MWP,760000 ;END OF WORD? + PUSHJ PP,SKELW ;YES, GET ANOTHER + IDPB C,MWP ;STORE CHARACTER + POPJ PP, + +WWORD: LSHC C,7 ;MOVE ASCII INTO C + PUSHJ PP,WCHAR1 ;STORE IT + JUMPN CS,WWORD ;TEST FOR END + POPJ PP, ;YES, EXIT + +WWRXE: PUSHJ PP,WWORD ;WRITE LAST WORD + ADD MWP,WCOUNT ;GET TO END OF LEAF + SUBI MWP,.LEAF ;NOW POINT TO START OF IT + HRRZS (MWP) ;ZERO LEFT HALF OF LAST LEAF + HRRM MWP,@WWRXX ;SET POINTER TO END + POPJ PP, + MREAD: PUSHJ PP,MREADS ;READ ONE CHARACTER + CAIE C,177 ;SPECIAL? + JRST RSW1 ;NO, EXIT + PUSHJ PP,MREADS ;YES, GET CODE WORD + TRZE C,100 ;SYMBOL? + JRST GETDS ;YES + CAILE C,4 ;POSSIBLY ILLEGAL + JRST ERRAX ;YUP + HRRI MRP,0 ;NO, SIGNAL END OF TEXT + JRST .+1(C) + PUSHJ PP,XCEED + JRST MACEND ;1; END OF MACRO + JRST DSEND ;2; END OF DUMMY SYMBOL + JRST REPEND ;3; END OF REPEAT + JRST IRPEND ;4; END OF IRP + +MREADI: HRLI MRP,700 ;SET UP BYTE POINTER + MOVEI C,.LEAF-1 ;NUMBER OF WORDS + MOVEM C,RCOUNT +MREADS: TLNN MRP,-1 ;FIRST TIME HERE? + JRST MREADI ;YES, SET UP MRP AND RCOUNT + TLNN MRP,760000 ;HAVE WE FINISHED WORD? + SOSLE RCOUNT ;YES, STILL ROOM IN LEAF? + JRST MREADC ;STILL CHAR. IN LEAF + HLRZ MRP,1-.LEAF(MRP);YES, GET LINK + HRLI MRP,(POINT 7,,21) ;SET POINTER + MOVEI C,.LEAF ;RESET COUNT + MOVEM C,RCOUNT +MREADC: ILDB C,MRP ;GET CHARACTER + POPJ PP, + +PEEK: JUMPN MRP,PEEKM ;THIS IS A MACRO READ + PUSHJ PP,CHARAC ;READ AN ASCII CHAR. + TLO IO,IORPTC ;REPEAT FOR NEXT + POPJ PP, ;AND RETURN + +PEEKM: PUSH PP,MRP ;SAVE MACRO READ POINTER + PUSH PP,RCOUNT ;SAVE WORD COUNT + PUSHJ PP,MREADS ;READ IN A CHAR. + POP PP,RCOUNT ;RESTORE WORD COUNT + POP PP,MRP ;RESET READ POINTER + POPJ PP, ;IORPTC IS NOT SET + REFINC: MOVEI CS,1(V) ;GET POINTER TO TREE + AOS 0(CS) ;INCREMENT REFERENCE + POPJ PP, + +REFDEC: JUMPLE V,DECERR ;CATASTROPHIC ERROR SOMEWHERE + MOVEI CS,1(V) ;GET POINTER TO TREE + SOS CS,0(CS) ;DECREMENT REFERENCE + TRNE CS,000777 ;IS IT ZERO? + POPJ PP, ;NO, EXIT + HRRZ CS,0(V) ;YES, GET POINTER TO END + HRL CS,NEXT ;GET POINTER TO NEXT RE-USABLE + HLLM CS,0(CS) ;SET LINK + HRRM V,NEXT ;RESET NEXT + POPJ PP, + +DECERR: MOVE AC0,CALNAM ;GET MACRO NAME + MOVSI RC,[SIXBIT /ERROR WHILE EXPANDING@/] + PUSHJ PP,TYPMSG + JRST ERRNE2 ;COMMON MESSAGE + A== 0 ;ASCII MODE +AL== 1 ;ASCII LINE MODE +IB== 13 ;IMAGE BINARY MODE +B== 14 ;BINARY MODE +DMP==16 ;DUMP MODE + +CTL== 0 ;CONTROL DEVICE NUMBER +IFN CCLSW,<CTL2==4 ;INPUT DEV FOR CCL FILE> +BIN== 1 ;BINARY DEVICE NUMBER +CHAR== 2 ;INPUT DEVICE NUMBER +LST== 3 ;LISTING DEVICE NUMBER + +; COMMAND STRING ACCUMULATORS + +ACDEV== 1 ;DEVICE +ACFILE==2 ;FILE +ACEXT== 3 ;EXTENSION +ACPPN== 4 ;PPN +ACDEL== 4 ;DELIMITER +ACPNTR==5 ;BYTE POINTER + +TIO== 6 + +TIORW== 1000 +TIOLE== 2000 +TIOCLD==20000 + +DIRBIT==4 ;DIRECTORY DEVICE +TTYBIT==10 ;TTY +MTABIT==20 ;MTA +DTABIT==100 ;DTA +DISBIT==2000 ;DISPLAY +CONBIT==20000 ;CONTROLING TTY +LPTBIT==40000 ;LPT +DSKBIT==200000 ;DSK + +;GETSTS ERROR BITS + +IOIMPM==400000 ;IMPROPER MODE (WRITE LOCK) +IODERR==200000 ;DEVICE DATA ERROR +IODTER==100000 ;CHECKSUM OR PARITY ERROR +IOBKTL== 40000 ;BLOCK TOO LARGE +ERRBIT==IOIMPM!IODERR!IODTER!IOBKTL + +SYN .TEMP,PPN + SUBTTL I/O ROUTINES +BEG: +IFN CCLSW,<TLZA IO,ARPGSW ;DON'T ALLOW RAPID PROGRAM GENERATION + TLO IO,ARPGSW ;ALLOW RAPID PROGRAM GENERATION> + HRRZ MRP,JOBREL ;GET LOWSEG SIZE + MOVEM MRP,MACSIZ ;SAVE CORE SIZE + ;DECODE VERSION NUMBER + MOVEI PP,JOBFFI ;TEMP PUSH DOWN STACK + PUSH PP,[0] ;MARK BOTTOM OF STACK + LDB 0,[POINT 3,JOBVER,2] ;GET USER BITS + JUMPE 0,GETE ;NOT SET IF ZERO + ADDI 0,"0" ;FORM NUMBER + PUSH PP,0 ;STACK IT + MOVEI 0,"-" ;SEPARATE BY HYPHEN + PUSH PP,0 ;STACK IT ALSO +GETE: HRRZ 0,JOBVER ;GET EDIT NUMBER + JUMPE 0,GETU ;SKIP ALL THIS IF ZERO + MOVEI 1,")" ;ENCLOSE IN PARENS. + PUSH PP,1 +GETED: IDIVI 0,8 ;GET OCTAL DIGITS + ADDI 1,"0" ;MAKE ASCII + PUSH PP,1 ;STACK IT + JUMPN 0,GETED ;LOOP TIL DONE + MOVEI 0,"(" ;OTHER PAREN. + PUSH PP,0 +GETU: LDB 0,[POINT 6,JOBVER,17] ;UPDATE NUMBER + JUMPE 0,GETV ;SKIP IF ZERO + IDIVI 0,8 ;MIGHT BE TWO DIGITS + ADDI 1,"@" ;FORM ALPHA + PUSH PP,1 + JUMPN 0,GETU+1 ;LOOP IF NOT DONE +GETV: LDB 0,[POINT 9,JOBVER,11] ;GET VERSION NUMBER + IDIVI 0,8 ;GET DIGIT + ADDI 1,"0" ;TO ASCII + PUSH PP,1 ;STACK + JUMPN 0,GETV+1 ;LOOP + MOVE 1,[POINT 7,VBUF+1,13] ;POINTER TO DEPOSIT IN VBUF + POP PP,0 ;GET CHARACTER + IDPB 0,1 ;DEPOSIT IT + JUMPN 0,.-2 ;KEEP GOING IF NOT ZERO + IFN CCLSW,< + TLZA IO,CRPGSW ;SET TO INIT NEW COMMAND FILE +M: TLNN IO,CRPGSW ;CURRENTLY DOING RPG?> +IFE CCLSW,<M:> + RESET ;INITIALIZE PROGRAM + SETZM BINDEV ;CLEAR INCASE NOT USED NEXT TIME + SETZM LSTDEV ;SAME REASON + SETZM INDEV ;INCASE OF ERROR + HRRZ MRP,MACSIZ ;GET INITIAL SIZE + CORE MRP, ;BACK TO ORIGINAL SIZ4 + JFCL ;SHOULD NEVER FAIL + SETZB MRP,PASS1I + MOVE [XWD PASS1I,PASS1I+1] + BLT PASS2X-1 ;ZERO THE PASS1 AND PASS2 VARIABLES + MOVEI PP,JOBFFI ;SET TEMP PUSH-DOWN POINTER + MOVE CS,[POINT 7,DBUF,6] ;INITIALIZE FOR DATE + MSTIME 2, ;GET TIME FROM MONITOR + PUSHJ PP,TIMOUT ;TIME FORMAT OUTPUT + DATE 1, ;GET DATE + IBP CS ;PASS OVER PRESET SPACE + PUSHJ PP,DATOUT ;DATE FORMAT OUTPUT + MOVSI FR,P1!CREFSW +IFN CCLSW,<TLNE IO,CRPGSW ;RPG IN PROGRESS? + JRST GOSET ;YES, GO READ NEXT COMMAND + TLNE IO,ARPGSW ;NO, RPG ALLOWED? + JRST RPGSET ;YES, GO TRY +CTLSET: RELEASE CTL2, ;IN CASE OF LOOKUP FAILURE> +IFE CCLSW,<CTLSET:> + MOVSI IO,IOPALL ;ZERO FLAGS + INIT CTL,AL ;INITIALIZE USER CONSOLE + SIXBIT /TTY/ + XWD CTOBUF,CTIBUF + EXIT ;NO TTY, NO ASSEMBLY + MOVSI C,(SIXBIT /TTY/) + DEVCHR C, ;GET CHARACTERISTICS + TLNN C,10 ;IS IT REALLY A TTY + EXIT ;NO + INBUF CTL,1 ;INITIALIZE SINGLE CONTROL + OUTBUF CTL,1 ;BUFFERS + PUSHJ PP,CRLF ;OUTPUT CARRIAGE RETURN - LINE FEED + MOVEI C,"*" + IDPB C,CTOBUF+1 + OUTPUT CTL, + INPUT CTL, + IFN CCLSW,<JRST BINSET ;BEGIN WITH BINARY FILE + +RPGSET: + INIT CTL2,AL ;LOOK FOR DISK + SIXBIT /DSK/ ;... + XWD 0,CTLBLK ;... + JRST CTLSET ;DSK NOT THERE + + HRLZI 3,(SIXBIT /MAC/) ;###MAC + MOVEI 3 ;COUNT + PJOB AC1, ;RETURNS JOB NO. TO AC1 +RPGLUP: IDIVI AC1,12 ;CONVERT + ADDI AC2,"0"-40 ;SIXBITIZE IT + LSHC AC2,-6 ; + SOJG 0,RPGLUP ;3 TIMES + MOVEM 3,CTLBUF ;###MAC + HRLZI (SIXBIT /TMP/) ; + MOVEM CTLBUF+1 ;TMP + SETZM CTLBUF+3 ;PROG-PRO + LOOKUP CTL2,CTLBUF ;COMMAND FILE + JRST CTLSET ;NOT THERE + HLRM EXTMP ;SAVE THE EXTENSION + +RPGS2: INBUF CTL2,1 ;SINGLE BUFFERED +RPGS2A: INIT CTL,AL ;TTY FOR CONSOLE MESSAGES + SIXBIT /TTY/ ;... + XWD CTOBUF,0 ;... + EXIT ;NO TTY, NO ASSEMBLY + OUTBUF CTL,1 ;SINGLE BUFFERED + MOVE JOBFF ;REMEMBER WHERE BINARY BUFFERS BEGIN + MOVEM SAVFF ;... + HRRZ JOBREL ;TOP OF CORE + CAMLE MACSIZ ;SEE IF IT HAS GROWN + MOVEM MACSIZ ;PREVENTS ADDRESS CHECK ON EXIT + TLNE IO,CRPGSW ;ARE WE ALREADY IN RPG MODE? + JRST M ;MUST HAVE COME FROM @ COMMAND, RESET + + GOSET: MOVSI IO,IOPALL!CRPGSW ;SET INITIAL FLAGS + MOVEI CS,CTLSIZ ;MAXIMUM CHARS IN A LINE + MOVE AC1,CTLBLK+2 ;NUMBER OF CHARACTERS + MOVEM AC1,CTIBUF+2 ;SAVE FOR PASS 2 + MOVE AC1,[POINT 7,CTLBUF] ;WHERE TO STASH CHARS + MOVEM AC1,CTIBUF+1 ;... +GOSET1: SOSG CTLBLK+2 ;ANY MORE CHARS? + PUSHJ PP,[IN CTL2, ;READ ANOTHER BUFFERFUL + POPJ PP, ;EVERYTHING OK, RETURN + STATO CTL2,20000 ;EOF? + JRST [HRROI RC,[SIXBIT /ERROR READING COMMAND FILE@/] + JRST ERRFIN] ;GO COMPLAIN + PUSHJ PP,DELETE ;CMD FILE + EXIT] ;EOF AND FINISHED + ILDB C,CTLBLK+1 ;GET NEXT CHAR + MOVE RC,@CTLBLK+1 ;CHECK FOR SEQUENCE NUMBERS + TRNE RC,1 ;... + JRST [AOS CTLBLK+1 ;SKIP OVER ANOTHER 5 CHARS + MOVNI RC,5 ;... + ADDM RC,CTLBLK+2 ;... + JRST GOSET1 ] ;GO READ ANOTHER CHAR + JUMPE C,GOSET1 ;IGNORE NULLS + IDPB C,CTIBUF+1 ;STASH AWAY + AOS CTIBUF+2 ;INCREMENT CHAR. COUNT + CAIE C,12 ;LINE FEED OR + CAIN C,175 ;ALTMODE? + JRST GOSET2 ;YES, FINISHED WITH COMMAND + CAIE C,176 + CAIN C,33 + JRST GOSET2 ;ALTMODE. + SOJG CS,GOSET1 ;GO READ ANOTHER + HRROI RC,[SIXBIT /COMMAND LINE TOO LONG@/] + JRST ERRFIN ;GO COMPLAIN +GOSET2: MOVEI C,12 ;MAKE SURE THERE'S A LF + IDPB C,CTIBUF+1 ;... + MOVEM AC1,CTIBUF+1 ;SET POINTER TO BEGINNING + AOS CTIBUF+2 ;ADD I TO COUNT + MOVE SAVFF ;RESET JOBFF FOR NEW BINARY + MOVEM JOBFF ;... + JRST BINSET + +RPGS1: PUSHJ PP,DELETE ;DELETE COMMAND FILE + MOVEM ACDEV,RPGDEV ;GET SET TO INIT + OPEN CTL2,RPGINI ;DO IT + JRST EINIT ;ERROR + MOVEM ACFILE,INDIR ;USE INPUT BLOCK + MOVEM ACPPN,INDIR+3 ;SET PPN + MOVEM ACEXT,INDIR+1 + LOOKUP CTL2,INDIR + JRST [JUMPN ACEXT,RPGLOS ;GIVE UP ,EXPLICIT EXTENSION + MOVSI ACEXT,(SIXBIT /CCL/) ;IF BLANK TRY CCL + JRST .-2 ] + HLRM ACEXT,EXTMP ;SAVE THE EXTENSION + HLRZ JOBSA ;RESET JOBFF TO ORIGINAL + MOVEM JOBFF + TLO IO,CRPGSW ;TURN ON SWITCH SO WE RESET WORLD + JRST RPGS2 ;AND GO +RPGLOS: RELEAS CTL2,0 + TLZ IO,CRPGSW ;STOPS IO TO UNASGD CHAN + JRST ERRCF ;NO FILE FOUND +> + BINSET: PUSHJ PP,NAME1 ;GET FIRST NAME +IFN CCLSW,<CAIN C,"!" ;WAS THIS AN IMPERATIVE? + JRST NUNSET ;GET THEE TO A NUNNERY + CAIN C,"@" ;CHEK FOR A NEW RPG FILE + JRST RPGS1> + TLNN FR,CREFSW ;CROSS REF REQUESTED? + JRST LSTSE1 ;YES, SKIP BINARY + CAIN C,"," ;COMMA? + JUMPE ACDEV,LSTSET ;YES, SKIP BINARY IF NO DEVICE SPECIFIED + CAIN C,"_" ;LEFT ARROW? + JUMPE ACDEV,LSTSE1 ;YES, SKIP BINARY IF NO DEVICE SPECIFIED + JUMPE ACDEV,M ;IGNORE IF JUST <CR-LF> + TLO FR,PNCHSW ;OK, SET SWITCH + MOVEM ACDEV,BINDEV ;STORE DEVICE NAME + MOVEM ACFILE,BINDIR ;STORE FILE NAME IN DIRECTORY + JUMPN ACEXT,.+2 ;EXTENSION SPECIFIED? + MOVSI ACEXT,(SIXBIT /REL/) ;NO, ASSUME RELOCATABLE BINARY + MOVEM ACEXT,BINDIR+1 ;STORE IN DIRECTORY + MOVEM ACPPN,BINDIR+3 ;SET PPN + OPEN BIN,BININI ;INITIALIZE BINARY + JRST EINIT ;ERROR + TLZE TIO,TIOLE ;SKIP TO EOT + MTAPE BIN,10 + TLZE TIO,TIORW ;REWIND REQUESTED? + MTAPE BIN,1 ;YES + JUMPGE CS,BINSE2 ;BRANCH IF NO BACK-SPACE + MTAPE BIN,17 ;BACK-SPACE A FILE + AOJL CS,.-1 ;TEST FOR END + WAIT BIN, + STATO BIN,1B24 ;LOAD POINT? + MTAPE BIN,16 ;NO, GO FORWARD ONE +BINSE2: SOJG CS,.-1 ;TEST FORWARD SPACING + + TLNE TIO,TIOCLD ;DIRECTORY CLEAR REQUESTED? + UTPCLR BIN, ;YES, CLEAR IT + OUTBUF BIN,2 ;SET UP TWO RING BUFFER + CAIN C,"_" + JRST GETSET ;NO LISTING + LSTSET: PUSHJ PP,NAME1 ;GET NEXT DEVICE +LSTSE1: CAIE C,"_" + JRST ERRCM + TLNE FR,CREFSW ;CROSS-REF REQUESTED? + JRST LSTSE2 ;NO, BRANCH + JUMPN ACDEV,.+2 ;YES, WAS DEVICE SPECIFIED? + MOVSI ACDEV,(SIXBIT /DSK/) ;NO, ASSUME DSK + JUMPN ACFILE,.+2 + MOVE ACFILE,[SIXBIT /CREF/] + JUMPN ACEXT,.+2 +MOVSI ACEXT,(SIXBIT /CRF/) +LSTSE2: JUMPE ACDEV,GETSET ;FORGET LISTING IF NO DEVICE SPECIFIED + MOVE AC0,ACDEV + DEVCHR AC0, ;GET CHARACTERISTICS + TLNE AC0,LPTBIT!DISBIT!TTYBIT + TLNE FR,CREFSW ; WAS CROSS-REF REQUESTED? + AOSA OUTSW+0*TTYSW ;NO, ASSUME TTY + JRST ERRCM ;YES, ERROR - CREF DEV MUST NOT BE LPT, DIS, OR TTY + TLNE AC0,CONBIT ;CONTROLING TELETYPE LISTING? + JRST GETSET ;YES, BUFFER ALREADY SET + MOVEM ACDEV,LSTDEV ;STORE DEVICE NAME + AOS OUTSW+0*LPTSW ;SET FOR LPT + MOVEM ACFILE,LSTDIR ;STORE FILE NAME + JUMPN ACEXT,.+2 + MOVSI ACEXT,(SIXBIT /LST/) + MOVEM ACEXT,LSTDIR+1 + MOVEM ACPPN,LSTDIR+3 ;SET PPN + OPEN LST,LSTINI ;INITIALIZE LISTING OUTPUT + JRST EINIT ;ERROR + TLZE TIO,TIOLE + MTAPE LST,10 + TLZE TIO,TIORW ;REWIND REQUESTED? + MTAPE LST,1 ;YES + JUMPGE CS,LSTSE3 + MTAPE LST,17 + AOJL CS,.-1 + WAIT LST, + STATO LST,1B24 + MTAPE LST,16 +LSTSE3: SOJG CS,.-1 + TLNE TIO,TIOCLD ;DIRECTORY CLEAR REQUESTED? + UTPCLR LST, ;YES, CLEAR IT + OUTBUF LST,2 ;SET UP A TWO RING BUFFER + GETSET: MOVEI 3,PDPERR + HRRM 3,JOBAPR ;SET TRAP LOCATION + MOVEI 3,1B19 ;SET FOR PUSH-DOWN OVERFLOW + APRENB 3, + SOS 3,PDP ;GET PDP REQUEST MINUS 1 + IMULI 3,.PDP ;COMPUTE SIZE (50*<NUMBER OF /P'S +1>) + HRLZ MP,3 + HRR MP,JOBFF ;SET BASIC POINTER + MOVE PP,MP + SUB PP,3 + MOVEM PP,RP ;SET RP + SUB PP,3 + ASH 3,1 ;DOUBLE SIZE OF BASIC POINTER + HRL PP,3 + SUBM PP,3 ;COMPUTE TOP LOCATION +IFN UNIVR,<SKIPN UNITOP ;IF ANY UNIVERSALS HAVE BEEN SEEN + JRST GETSE0 ;NO + HRRZS 3 ;GET TOP OF BUFFERS AND STACKS + CAMLE 3,UNISIZ ;HOPE ITS NOT BIGGER THAN UNIVERSAL ONE + JRST UNIERR ;IT WAS, YOU LOSE + SKIPA 3,UNITOP ;DON'T LOSE THEM +GETSE0: HRRZM 3,UNISIZ ;STORE UNTIL A UNIVERSAL IS SEEN> + HRRZM 3,LADR ;SET START OF MACRO TREE + HRRZM 3,FREE + +GETSE1: HRRZ JOBREL + SUBI 1 + MOVEM SYMTOP ;SET TOP OF SYMBOL TABLE + SUBI LENGTH ;SET POINTER FOR INITIAL SYMBOLS + CAMLE LADR ;HAVE WE ROOM? + JRST GETSE2 ;YES + + HRRZ 2,JOBREL ;NO, TRY FOR MORE CORE + ADDI 2,2000 + CORE 2, + JRST XCEED2 ;NO MORE, INFORM USER + JRST GETSE1 ;TRY AGAIN + +GETSE2: MOVEM SYMBOL ;SET START OF SYMBOL TABLE + HRLI SYMNUM + BLT @SYMTOP ;STORE SYMBOLS + PUSHJ PP,SRCHI ;INITIALIZE TABLE + MOVE [XWD CTIBUF+1,CTLSAV] ;SAVE CONTROL INPUT BUFFER + BLT CTLS1 ;FOR RESCAN ON PASS 2 +IFN FTDISK,<MOVSI (SIXBIT /DSK/) ;SET INPUT TO TAKE DSK AS DEV + MOVEM ACDEVX> + PUSHJ PP,COUTI ;INIT OUTPUT JUST IN CASE + PUSHJ PP,INSET ;GET FIRST INPUT FILE + +IFN CCLSW,<TLNE IO,CRPGSW ;BUT ONLY IF DOING RPG + TTCALL 3,[ASCIZ /MACRO: /] ;PUBLISH COMPILER NAME> + MOVE CS,INDIR ;SET UP NAME OF FIRST FILE + MOVEM CS,LSTFIL ;AS LAST PRINTED + SETZM LSTPGN + JRST ASSEMB ;START ASSEMBLY + FINIS: CLOSE BIN, ;DUMP BUFFER + TLNE FR,PNCHSW ;PUNCH REQUESTED? + PUSHJ PP,TSTBIN ;YES, TEST FOR ERRORS + RELEAS BIN, + CLOSE LST, + SOSLE OUTSW+0*LPTSW ;LPT TYPE OUTPUT? + PUSHJ PP,TSTLST ;YES, TEST FOR ERRORS + RELEAS LST, + RELEAS CHAR, + OUTPUT CTL,0 ;FLUSH TTY OUTPUT +IFN UNIVR,<SKIPE UNIVSN ;SKIP IF NOT ASSEMBLING UNIVERSAL + PUSHJ PP,UNISYM ;STORE SYMBOLS ETC. FIRST> + JRST M ;RETURN FOR NEXT ASSEMBLY + INSET: MOVEI JOBFFI ;POINTER TO INPUT BUFFER + HRRM JOBFF ;INFORM SYSTEM OF BUFFER AREA + PUSHJ PP,NAME2 ;GET NEXT COMMAND NAME + JUMPE ACDEV,ERRNE ;ERROR IF NONE LEFT + MOVEM ACDEV,INDEV ;STORE DEVICE + MOVEM ACFILE,INDIR ;STORE FILE IN DIRECTORY + MOVEM ACPPN,INDIR+3 ;STORE PPN BEFORE WE LOSE IT + OPEN CHAR,INDEVI + JRST EINIT ;ERROR + DEVCHR ACDEV, ;TEST CHARACTERISTICS + TLNN ACDEV,MTABIT ;MAG TAPE? + JRST INSET3 ;NO + TLZN FR,MTAPSW ;FIRST MAG TAPE IN PASS 2? + JRST INSET1 ;NO + TLNN TIO,TIORW ;YES, REWIND REQUESTED? + SUB CS,RECCNT ;NO, PREPARE TO BACK-SPACE TAPE +INSET1: AOS RECCNT ;INCREMENT FILE COUNTER + ADDM CS,RECCNT ;UPDATE COUNT + TLZE TIO,TIOLE + MTAPE CHAR,10 + TLZE TIO,TIORW ;REWIND? + MTAPE CHAR,1 ;YES + JUMPGE CS,INSET2 + MTAPE CHAR,17 + MTAPE CHAR,17 + AOJL CS,.-1 + WAIT CHAR, + STATO CHAR,1B24 + MTAPE CHAR,16 +INSET2: SOJGE CS,.-1 + +INSET3: INBUF CHAR,1 + MOVEI ACPNTR,JOBFFI + EXCH ACPNTR,JOBFF + SUBI ACPNTR,JOBFFI + MOVEI ACDEL,NUMBUF*203+1 + IDIV ACDEL,ACPNTR + INBUF CHAR,(ACDEL) + JUMPN ACEXT,INSET4 ;TAKE USER'S EXTENSION IF NON-BLANK + MOVSI ACEXT,(SIXBIT /MAC/) ;BLANK, TRY .MAC FIRST + PUSHJ PP,INSETI +INSET4: PUSHJ PP,INSETI + JUMPE ACEXT,ERRCF ;ERROR IF ZERO + TLNE ACDEV,TTYBIT ;TELETYPE? + SETSTS CHAR,AL ;YES, CHANGE TO ASCII LINE + ;DO ALL ENTERS HERE FOR LEVEL D + SKIPE ENTERS ;HAVE ENTERS BEEN DONE ALREADY? + JRST ENTRDN ;YES, DON'T DO TWICE + SKIPN ACEXT,LSTDEV ;IS THERE A LIST DEVICE? + JRST LSTSE5 ;NO SO DON'T DO ENTER + SKIPN ACFILE,LSTDIR ;GET FILE NAME INCASE OF ERROR + JRST [DEVCHR ACEXT, + TLNE ACEXT,DIRBIT ;DOES IT HAVE A DIRECTORY? + JRST LSTSE4 ;YES, GIVE UP BEFORE HARM IS DONE + SKIPE ACFILE,INDIR ;USE INPUT FILE NAME + MOVEM ACFILE,LSTDIR ;TOO BAD IF ZERO ALSO + JRST LSTSE4] + HLLZ ACEXT,LSTDIR+1 ;EXT ALSO + MOVE ACPPN,LSTDIR+3 ;SAVE PPN + LOOKUP LST,LSTDIR ;PREVIOUS ONE STILL THERE + JRST LSTSE4 ;NO + SETZM LSTDIR ;YES,CLEAR NAME + MOVEM ACPPN,LSTDIR+3 ;RESET PPN + RENAME LST,LSTDIR + CLOSE LST, ;IGNORE FAILURE + MOVEM ACFILE,LSTDIR ;RESTORE NAME + HLLZS LSTDIR+1 ;BH 11/19/74 FOR DATE75. CLEAR RH. + SETZM LSTDIR+2 ;CLEAR PROTECTION AND DATE + MOVEM ACPPN,LSTDIR+3 ;SET PPN AGAIN +LSTSE4: + ENTER LST,LSTDIR ;SET UP DIRECTORY + JRST ERRCL ;ERROR +LSTSE5: SKIPN ACEXT,BINDEV ;A BINARY DEVICE THEN ? + JRST ENTRDN ;NO + SKIPN ACFILE,BINDIR ;INCASE OF ERROR + JRST [DEVCHR ACEXT, + TLNE ACEXT,DIRBIT ;DOES IT HAVE A DIRECTORY? + JRST .+1 ;YES, GIVE UP BEFORE HARM IS DONE + SKIPE ACFILE,INDIR ;USE INPUT FILE NAME + MOVEM ACFILE,BINDIR ;TOO BAD IF ZERO ALSO + JRST .+1] + HLLZS ACEXT,BINDIR+1 ;BH 11/19/74 DATE75. WAS HLLZ. + ENTER BIN,BINDIR ;ENTER FILE NAME + JRST ERRCB ;ERROR + +ENTRDN: SETOM ENTERS ;MAKE SURE ONLY DONE ONCE + MOVE CS,[POINT 7,DEVBUF] + PUSH PP,1 ;SAVE THE ACCS + PUSH PP,2 + PUSH PP,3 + SKIPN 2,INDIR ;GET INPUT NAME + JRST FINDEV ;FINISHED WITH DEVICE + SETZ 1, ;CLEAR FOR RECEIVING + LSHC 1,6 ;SHIFT ONE CHAR. IN + ADDI 1,40 ;FORM ASCII + IDPB 1,CS ;STORE CHAR. + JUMPN 2,.-4 ;MORE TO DO? + MOVEI 1," " ;SEPARATE BY TAB + IDPB 1,CS + HLLZ 2,INDIR+1 ;GET EXT + JUMPE 2,FINEXT ;NO EXT + SETZ 1, + LSHC 1,6 ;SAME LOOP AS ABOVE + ADDI 1,40 + IDPB 1,CS + JUMPN 2,.-4 +FINEXT: MOVEI 1," " + IDPB 1,CS ;SEPARATE BY TAB + LDB 1,[POINT 12,INDIR+2,35] ;GET DATE + LDB 2,[POINT 3,INDIR+1,20] ;BH 11/19/74 DATE75. + DPB 2,[POINT 3,1,23] ;BH 11/19/74 DATE75. + JUMPE 1,FINDEV ;NO DATE? + PUSHJ PP,DATOUT ;STORE IT + LDB 2,[POINT 11,INDIR+2,23] ;GET CREATION TIME + JUMPE 2,FINDEV ;NO TIME (DECTAPE) + MOVEI 1," " ;SEPARATE BY SPACE + IDPB 1,CS + PUSHJ PP,TIMOU1 ;STORE TIME +FINDEV: SETZ 1, + MOVEI 2," " ;FINAL TAB + IDPB 2,CS + IDPB 1,CS ;TERMINATE FOR NOW + POP PP,3 ;RESTORE ACCS + POP PP,2 + POP PP,1 + SKIPN PAGENO ;IF FIRST TIME THRU + JRST OUTFF ;START NEW PAGE + SETZM PAGENO ;ON NEW FILE, RESET PAGES + JRST OUTFF2 ;DON'T START NEW PAGE UNLESS FF + +INSETI: HLLZM ACEXT,INDIR+1 ;STORE EXTENSION + MOVE ACPPN,INDIR+3 ;SAVE PPN + LOOKUP CHAR,INDIR + SKIPA ACEXT,INDIR+1 ;GET ERROR CODE + JRST CPOPJ1 ;SKIP-RETURN IF FOUND + TRNE ACEXT,-1 ;ERROR CODE OF 0 IS FILE NOT FOUND + JRST ERRCF ;FILE THERE BUT NOT READABLE + SETZ ACEXT, ;CLEAR EXT AND TRY AGAIN + MOVEM ACPPN,INDIR+3 ;RESTORE PPN + POPJ PP, + REC2: MOVS [XWD CTIBUF+1,CTLSAV] ;RESCAN CONTROL (FROM PASS1 END STMNT) + BLT CTIBUF+2 ;INPUT BUFFER + MOVEI "_" + HRLM ACDELX ;FUDGE PREVIOUS DELIMITER +IFN RENTSW,<MOVE HHIGH ;GET HI-SEG BREAK + MOVEM HIGH1 ;SAVE THE ONE WE GOT ON PASS1 (FOR HISEG)> + SETZM PASS2I + MOVE [XWD PASS2I,PASS2I+1] + BLT PASS2X-1 ;ZERO PASS2 VARIABLES + TLO FR,MTAPSW!LOADSW ;SET FLAGS + +GOTEND: MOVE INDEV ;GET LAST DEVICE + DEVCHR ;GET ITS CHARACTERISTICS + TLNE 4 ;TEST FOR DIRECTORY (DSK OR DTA) + JRST EOT ;YES, SO DON'T WASTE TIME + JRST .+3 ;NO, INPUT BUFFER BY BUFFER + IN CHAR, + JRST .-1 ;NO ERRORS + STATO CHAR,1B22 ;TEST FOR EOF + JRST .-3 ;IGNORE ERRORS + +EOT: PUSHJ PP,SAVEXS ;SAVE REGISTERS + PUSHJ PP,INSET ;GET THE NEXT INPUT DEVICE + HRROI RC,[SIXBIT /END OF PASS 1@/] ;ASSUME END OF PASS + TLZN FR,LOADSW ;ZERO ONLY ON END OF PASS 1 + HRROI RC,[SIXBIT /LOAD THE NEXT FILE@/] ;NOT END OF PASS + TLNN ACDEV,(1B13!1B15) ;WAS ALL THAT WORK NECESSARY? + PUSHJ PP,TYPMSG ;YES + +RSTRXS: MOVSI RC,SAVBLK ;SET POINTER + BLT RC,RC-1 ;RESTORE REGISTERS + MOVE RC,SAVERC ;RESTORE RC + POPJ PP, ;EXIT + +SAVEXS: MOVEM RC,SAVERC ;SAVE RC + MOVEI RC,SAVBLK ;SET POINTER + BLT RC,SAVBLK+RC-1 ;BLT ALL REGISTERS BELOW RC + POPJ PP, ;EXIT + NAME1: SETZM ACDEVX ;ENTRY FOR DESTINATION +NAME2: SETZB ACDEV,INDIR+2 ;ENTRY FOR SOURCE + MOVEI ACFILE,0 ;CLEAR FILE + HLRZ ACDEL,ACDELX ;GET PREVIOUS DELIMITER + SETZB TIO,CS + SETZB ACEXT,INDIR+3 ;RESET EXTENSION AND PROGRAM-NUMBER PAIR + SETZM PPN ;CLEAR PPN +NAME3: MOVSI ACPNTR,(POINT 6,AC0) ;SET POINTER + TDZA AC0,AC0 ;CLEAR SYMBOL + +SLASH: PUSHJ PP,SW0 +GETIOC: PUSHJ PP,TTYIN ;GET INPUT CHARACTER + CAIN C,"/" + JRST SLASH + CAIN C,"(" + JRST SWITCH + CAIN C,":" + JRST DEVICE + CAIN C,"." + JRST NAME +IFN CCLSW,<CAIE C,"!" ;IS CHAR AN IMPERATIVE? + CAIN C,"@" + JRST TERM ;YES, GO DO IT> + CAIE C,33 ;CHECK FOR THREE FLAVORS OF ALT-MODE + CAIN C,176 ;... + JRST TERM ;... + CAIG C,CR ;LESS THAN CR? + CAIGE C,LF ;AND GREATER THAN LF? + CAIN C,175 ;OR 3RD ALTMOD + JRST TERM ;YES +IFN FTDISK,<CAIN C,"[" + JRST PROGNP ;GET PROGRAMER NUMBER PAIR> + CAIN C,"=" ;EQUALS IS SAME AS LEFT ARROW + TRCA C,142 ;SO MAKE IT A "_" AND SKIP + CAIE C,"," + CAIN C,"_" + JRST TERM + CAIGE C,40 ;VALID AS SIXBIT? + JRST [CAIN C,"Z"-100 ;NO,IS IT ^Z + EXIT ;YES,EXIT FOR BATCH + JRST GETIOC] ;JUST IGNORE + SUBI C,40 ;CONVERT TO 6-BIT + TLNE ACPNTR,770000 ;HAVE WE STORED SIX BYTES? + IDPB C,ACPNTR ;NO, STORE IT + JRST GETIOC ;GET NEXT CHARACTER + +DEVICE: JUMPN ACDEV,ERRCM ;ERROR IF ALREADY SET + MOVE ACDEV,AC0 ;DEVICE NAME + JRST DEVNAM ;COMMON CODE + +NAME: JUMPN ACFILE,ERRCM ;ERROR IF ALREADY SET + MOVE ACFILE,AC0 ;FILE NAME +DEVNAM: MOVE ACDEL,C ;SET DELIMITER + JRST NAME3 ;GET NEXT SYMBOL + +TERM: JUMPE ACDEL,TERM1 ;IF NO PREVIOUS TERMINATOR, THEN FILENAME + CAIN ACDEL,"_" ;... + JRST TERM1 ;... + CAIE ACDEL,":" ;IF PREVIOUS DELIMITER + CAIN ACDEL,"," ;WAS COLON OR COMMA +TERM1: MOVE ACFILE,AC0 ;SET FILE + CAIN ACDEL,"." ;IF PERIOD, + HLLZ ACEXT,AC0 ;SET EXTENSION + HRLM C,ACDELX ;SAVE PREVIOUS DELIMITER + JUMPN ACDEV,.+2 ;IF DEVICE SET USE IT + SKIPA ACDEV,ACDEVX ;OTHERWISE USE LAST DEVICE + MOVEM ACDEV,ACDEVX ;AND DEVICE + MOVE ACPPN,PPN ;PUT PPN IN RIGHT PLACE +IFN FTDISK,<CAIN C,"!" ;IMPERATIVE? + POPJ PP, ;YES, DON'T ASSUME DEV + JUMPE ACFILE,CPOPJ ;IF THERE IS A FILE, + JUMPN ACDEV,.+2 ;BUT NO DEVICE + MOVSI ACDEV,(SIXBIT /DSK/) ;THEN ASSUME DISK> + POPJ PP, ;EXIT + ERRCM: HRROI RC,[SIXBIT /COMMAND ERROR@/] + JRST ERRFIN + +IFN FTDISK,<PROGNP: +PROGN1: HRLZM RC,PPN ;COMMA, STORE LEFT HALF +PROGN2: MOVEI RC,0 ;CLEAR AC +PROGN3: PUSHJ PP,TTYIN + CAIN C,"," + JRST PROGN1 ;STORE LEFT HALF + HRRM RC,PPN ;ASSUME TERMINAL + CAIN C,"]" + JRST GETIOC ;YES, RETURN TO MAIN SCAN + CAIL C,"0" ;CHECK FOR VALID NUMBERS + CAILE C,"7" + JRST ERRCM ;NOT VALID + LSH RC,3 ;SHIFT PREVIOUS RESULT + ADDI RC,-"0"(C) ;ADD IN NEW NUMBER + JRST PROGN3 ;GET NEXT CHARACTER> + SWITC0: PUSHJ PP,SW1 ;PROCESS CHARACTER +SWITCH: PUSHJ PP,TTYIN ;GET NEXT CHARACTER + CAIE C,")" ;END OF STRING? + JRST SWITC0 ;NO + JRST GETIOC ;YES + +SW0: PUSHJ PP,TTYIN +SW1: MOVEI C,-"A"(C) ;CONVERT FROM ASCII TO NUMERIC + CAILE C,"Z"-"A" ;WITHIN BOUNDS? (IS IT ALPHA?) + JRST ERRCM ;NO, ERROR + MOVE RC,[POINT 4,BYTAB] + IBP RC + SOJGE C,.-1 ;MOVE TO PROPER BYTE + LDB C,RC ;PICK UP BYTE + JUMPE C,ERRCM ;TEST FOR VALID SWITCH + CAIG C,SWTABT-SWTAB ;LEGAL ON SOURCE? + JUMPL PP,ERRCM ;NO, TEST FOR SOURCE + LDB RC,[POINT 4,SWTAB-1(C),12] + CAIN RC,IO + SKIPN CTLSAV ;IF PASS2 OR IO SWITCH, + XCT SWTAB-1(C) ;EXECUTE INSTRUCTION + POPJ PP, ;EXIT + TLZ IO,IOSALL ;TAKE CARE OF /X + POPJ PP, + +DEFINE HELP (TEXT)< + XLIST + ASCIZ ?TEXT? + LIST> + +HLPMES: HELP < +Switches are :- +*/A advance one file +*/B backspace one file +/C produce a cref listing +*/E list macro expansions (LALL) +*/F list in new format (.MFRMT) +/G list in old format (.HWFRMT) +/H type this text +*/L reinstate listing (LIST) +/M suppress ascii in macro and repeat expansion (SALL) +*/N suppress error printout on tty +/O set MLOFF pseudo-op +/P increase size of the pushdown stack +/Q suppress Q errors on the listing +*/S suppress listing (XLIST) +*/T rewind device +*/X suppress all macro expansions (XALL) +*/Z zero the directory +Switches A,B,C,T,W,X, and Z must immediately follow +the device or file to which they refer. +> + DEFINE SETSW (LETTER,INSTRUCTION) < INSTRUCTION +J= <"LETTER"-"A">-^D9*<I=<"LETTER"-"A">/^D9> + SETCOD \I,J> + + DEFINE SETCOD (I,J) + <BYTAB'I=BYTAB'I!<.-SWTAB>B<4*J+3>> + +BYTAB0= 0 ;INITIALIZE TABLE +BYTAB1= 0 +BYTAB2= 0 + +SWTAB: + SETSW Z,<TLO TIO,TIOCLD > + SETSW C,<TLZ FR,CREFSW > + SETSW P,<SOS PDP > +SWTABT: ;THE ABOVE SW'S ARE LEGAL ON OUTPUT ONLY + SETSW A,<ADDI CS,1 > + SETSW B,<SUBI CS,1 > + SETSW E,<TLZ IO,IOPALL!IOSALL > + SETSW H,<OUTSTR HLPMES> + SETSW L,<TLZ IO,IOMSTR > + SETSW M,<TLO IO,IOPALL!IOSALL > + SETSW N,<HLLOS TYPERR > + SETSW O,<XCT OFFML > + SETSW Q,<TLO FR,ERRQSW > + SETSW S,<TLO IO,IOMSTR > + SETSW T,<TLO TIO,TIOLE > + SETSW W,<TLO TIO,TIORW > + SETSW X,<TLOA IO,IOPALL > + +BYTAB: ;BYTAB CONTAINS AN INDEX TO SWTAB + ;IT CONSIST OF 9 4BIT BYTES/WORD + ;OR ONE BYTE FOR EACH LETTER + + +BYTAB0 ;A-I BYTE = 1 THROUGH 17 = INDEX + +BYTAB1 ;J-R BYTE = 0 = COMMAND ERROR + +BYTAB2 ;S-Z + +IF2,<PURGE I,J,BYTAB0,BYTAB1,BYTAB2> + TTYIN: SOSGE CTIBUF+2 ;ENUF CHAR.? + JRST TTYERR ;NO + ILDB C,CTIBUF+1 ;GET CHARACTER + CAIE C," " ;SKIP BLANKS + CAIN C,HT ;AND TABS + JRST TTYIN + CAIN C,15 ;CR? + SETZM CTIBUF+2 ;YES,IGNORE REST OF LINE + CAIG C,"Z"+40 ;CHECK FOR LOWER CASE + CAIGE C,"A"+40 + POPJ PP, ;NO,EXIT + SUBI C,40 + POPJ PP, ;YES, EXIT + +TTYERR: SKIPN INDEV ;INPUT DEVICE SEEN? + JRST ERRCM ;NO, SO MISSING "_" +ERRNE: HRROI RC,[SIXBIT /?NO END STATEMENT ENCOUNTERED ON INPUT FILE@/] +ERRNE0: SKPINC V ;SEE IF WE CAN INPUT A CHAR. + JFCL ;BUT ONLY TO DEFEAT ^O + PUSHJ PP,TYPMSG ;OUTPUT IT + SKIPE LITLVL ;SEE IF IN LITERAL + SKIPN LITPG ;PAGE 0 MEANS NOT IN A LITERAL REALY + JRST ERRNE1 ;NO, TRY OTHERS + MOVE V,[XWD [SIXBIT /IN LITERAL@/],LITPG] + PUSHJ PP,PRNUM ;GO PRINT INFORMATION +ERRNE1: MOVEI V,0 ;CHECK FOR OTHER PLACES + SKIPE INDEF + MOVE V,[XWD [SIXBIT /IN DEFINE@/],DEFPG] + SKIPE INTXT + MOVE V,[XWD [SIXBIT /IN TEXT@/],TXTPG] + SKIPE INREP + MOVE V,[XWD [SIXBIT /IN CONDITIONAL OR REPEAT@/],REPPG] + SKIPE INCND + MOVE V,[XWD [SIXBIT /IN CONDITIONAL@/],CNDPG] + SKIPGE MACENL +ERRNE2: MOVE V,[XWD [SIXBIT /IN MACRO CALL@/],CALPG] + JUMPN V,ERRNE3 + SKIPN LITLVL ;HAD ONE PAGE NUMBER ALREADY + SKIPA V,[XWD [SIXBIT /@/],PAGENO] ;BETTER THAN NOTHING + JRST .+2 +ERRNE3: PUSHJ PP,PRNUM + HRROI RC,[SIXBIT /@/] ;WILL GET A RETURN + JRST ERRFIN + +ERRMS1: SIXBIT / ERRORS DETECTED@/ +ERRMS2: SIXBIT /?1 ERROR DETECTED@/ +ERRMS3: SIXBIT /NO ERRORS DETECTED@/ +EINIT: MOVE RC,[XWD ACDEV,[SIXBIT /NOT AVAILABLE@/]] + JRST ERRFIN + ERRCL: HRRZ RC,LSTDIR+1 ;GET LST DEV ERROR CODE + JRST .+2 ;GET ERROR MESSAGE +ERRCB: HRRZ RC,BINDIR+1 ;GET BIN DEV ERROR CODE + JUMPN RC,ERRTYP + SOJA RC,ERRTYP ;SPECIAL CASE IF ERROR CODE 0 + +ERRCF: HRRZ RC,INDIR+1 ;GET INPUT DEV ERROR CODE + HLLZ ACEXT,INDIR+1 ;SET UP EXT + +ERRTYP: CAIL RC,TABLND-TABLE ;IS ERROR CODE LEGAL? + SKIPA RC,TABLND ;NO, GIVE CATCH ALL MESSAGE + MOVE RC,TABLE(RC) ;YES, PICK UP MESSAGE + +ERRFIN: SKPINC C ;SEE IN WE CAN INPUT A CHAR. + JFCL ;BUT ONLY TO DEFEAT ^O + PUSHJ PP,CRLF + MOVEI C,"?" + PUSHJ PP,TYO + PUSHJ PP,TYPMS1 + CLOSE LST, ;GIVE USER A PARTIAL LISTING + CLOSE BIN,40 ;BUT NEVER A BUM REL FILE +IFN CCLSW,<AOS JOBERR ;RECORD ERROR SO EXECUTION DELETED> + JRST M + + [SIXBIT /(0) ILLEGAL FILE NAME@/],,ACFILE +TABLE: [SIXBIT /(0) FILE WAS NOT FOUND@/],,ACFILE + [SIXBIT /(1) NO DIRECTORY FOR PROJECT-PROGRAMMER NUMBER@/],,ACFILE + [SIXBIT /(2) PROTECTION FAILURE@/],,ACFILE + [SIXBIT /(3) FILE WAS BEING MODIFIED@/],,ACFILE + [SIXBIT /(4) RENAME FILE NAME ALREADY EXISTS@/],,ACFILE + [SIXBIT /(5) ILLEGAL SEQUENCE OF UUOS@/],,ACFILE + [SIXBIT /(6) BAD UFD OR BAD RIB@/],,ACFILE + [SIXBIT /(7) NOT A SAV FILE@/],,ACFILE + [SIXBIT /(10) NOT ENOUGH CORE@/],,ACFILE + [SIXBIT /(11) DEVICE NOT AVAILABLE@/],,ACFILE + [SIXBIT /(12) NO SUCH DEVICE@/],,ACFILE + [SIXBIT /(13) NOT TWO RELOC REG. CAPABILITY@/],,ACFILE + [SIXBIT /(14) NO ROOM OR QUOTA EXCEEDED@/],,ACFILE + [SIXBIT /(15) WRITE LOCK ERROR@/],,ACFILE + [SIXBIT /(16) NOT ENOUGH MONITOR TABLE SPACE@/],,ACFILE + [SIXBIT /(17) PARTIAL ALLOCATION ONLY@/],,ACFILE + [SIXBIT /(20) BLOCK NOT FREE ON ALLOCATION@/],,ACFILE + [SIXBIT /(21) CAN'T SUPERSEDE (ENTER) AN EXISTING DIRECTORY@/],,ACFILE + [SIXBIT /(22) CAN'T DELETE (RENAME) A NON-EMPTY DIRECTORY@/],,ACFILE + [SIXBIT /(23) SFD NOT FOUND@/],,ACFILE + [SIXBIT /(24) SEARCH LIST EMPTY@/],,ACFILE + [SIXBIT /(25) SFD NESTED TOO DEEPLY@/],,ACFILE + [SIXBIT /(26) NO-CREATE ON FOR SPECIFIED PATH@/],,ACFILE + +TABLND: [SIXBIT /(?) LOOKUP, ENTER, OR RENAME ERROR@/],,ACFILE + TYPMSG: PUSHJ PP,CRLF ;MOVE TO NEXT LINE +TYPMS1: HLRZ CS,RC ;GET FIRST MESSAGE + CAIE CS,-1 ;SKIP IF MINUS ONE + PUSHJ PP,TYPM2 ;TYPE MESSAGE + HRRZ CS,RC ;GET SECOND HALF + PUSHJ PP,TYPM2 + +CRLF: MOVEI C,CR ;OUTPUT CARRIAGE RETURN + PUSHJ PP,TYO + MOVEI C,LF ;AND LINE FEED + +TYO: SOSG CTOBUF+2 ;BUFFER FULL? + OUTPUT CTL,0 ;YES, DUMP IT + IDPB C,CTOBUF+1 ;STORE BYTE + CAIG C,FF ;FORM FEED? + CAIGE C,LF ;V TAB OR LINE FEED? + POPJ PP, ;NO + OUTPUT CTL,0 ;YES + POPJ PP, ;AND EXIT + +TYPM2: MOVSI C,(1B0) ;ANTICIPATE REGISTER WORD + CAIN CS,ACFILE ;FILE NAME ? + JRST [JUMPE ACEXT,.+1 ;YES, TEST FOR EXT + LSH ACEXT,-6 ;MAKE SPACE FOR "." + IOR ACEXT,[SIXBIT /. @/] + JRST TYPM2A] + CAIG CS,17 ;IS IT? + MOVEM C,1(CS) +TYPM2A: HRLI CS,(POINT 6,,) ;FORM BYTE POINTER + +TYPM3: ILDB C,CS ;GET A SIXBIT BYTE + CAIN C,40 ;"@"? + JRST TYO ;YES, TYPE SPACE AND EXIT + ADDI C,40 ;NO, FORM 7-BIT ASCII + PUSHJ PP,TYO ;OUTPUT CHARACTER + JRST TYPM3 + + XCEEDS: ADDI SX,2000 ;ADJUST SYMBOL POINTER +XCEED: PUSHJ PP,SAVEXS ;SAVE THE REGISTERS + HRRZ 1,JOBREL ;GET CURRENT TOP + MOVEI 0,2000(1) + CORE 0, ;REQUEST MORE CORE + JRST XCEED2 ;ERROR, BOMB OUT + HRRZ 2,JOBREL ;GET NEW TOP + +XCEED1: MOVE 0,0(1) ;GET ORIGIONAL + MOVEM 0,0(2) ;STORE IN NEW LOCATION + SUBI 2,1 ;DECREMENT UPPER + CAMLE 1,SYMBOL ;HAVE WE ARRIVED? + SOJA 1,XCEED1 ;NO, GET ANOTHER + MOVEI 1,2000 + ADDM 1,SYMBOL + ADDM 1,SYMTOP + PUSHJ PP,SRCHI ;RE-INITIALIZE SYMBOL TABLE + JRST RSTRXS ;RESTORE REGISTERS AND EXIT + +XCEED2: HRROI RC,[SIXBIT /INSUFFICIENT CORE@/] + JRST ERRNE0 +PDPERR: HRROI RC,[SIXBIT .PDP OVERFLOW, TRY /P@.] + JRST ERRNE0 + +PRNUM: HLRZ CS,V ;GET MESSAGE + PUSHJ PP,TYPM2 + MOVEI CS,[SIXBIT /ON PAGE@/] + PUSHJ PP,TYPM2 + MOVE AC0,(V) ;GET PAGE + PUSHJ PP,DP1 ;PRINT NUMBER + MOVEI C,40 + PUSHJ PP,TYO + SKIPN AC1,1(V) ;GET SEQ NUM IF THERE + POPJ PP, ;NO, RETURN + MOVEM AC1,OUTSQ + MOVEI CS,[SIXBIT /LINE@/] + PUSHJ PP,TYPM2 + MOVEI AC0,OUTSQ ;PRINT IT + OUTPUT CTL,0 ;TO MAKE THINGS PRINT IN RIGHT ORDER + DDTOUT AC0, + MOVEI C,40 + JRST TYO ;AND RETURN + +DP1: IDIVI AC0,^D10 + HRLM AC1,(PP) + JUMPE AC0,.+2 + PUSHJ PP,DP1 + HLRZ C,(PP) + ADDI C,"0" + JRST TYO + RIM0: TDO FR,AC0 ;SET RIM/RIM10 FLAG + TLNE FR,PNCHSW ;FORGET IT IF PUNCH RESET + SETSTS BIN,IB ;SET TO IMAGE BINARY MODE + POPJ PP, + +ROUT: EXCH CS,RIMLOC + SUB PP,[XWD 1,1] ;CLEAR OUT STACK WFW + TLNE FR,R1BSW + JRST ROUT6 + TLNN FR,RIM1SW + JRST ROUT1 + JUMPE CS,ROUT1 ;RIM10 OUTPUT + SUB CS,RIMLOC + JUMPE CS,ROUT1 + JUMPG CS,ERRAX + MOVEI C,0 + PUSHJ PP,PTPBIN + AOJL CS,.-1 +ROUT1: MOVSI C,(DATAI PTR,) ;RIM OUTPUT + HRR C,LOCO ;GET ADDRESS + TLNE FR,RIM1SW ;NO DATAI IF RIM10 + AOSA RIMLOC + PUSHJ PP,PTPBIN ;OUTPUT + MOVE C,AC0 ;CODE + AOSA LOCO ;INCREMENT CURRENT LOCATION + +OUTBIN: TLNN FR,RIMSW!RIM1SW!R1BSW ;EXIT IF RIM MODE +PTPBIN: TLNN FR,PNCHSW ;EXIT IF PUNCH NOT REQUESTED + POPJ PP, + SOSG BINBUF+2 ;TEST FOR BUFFER FULL + PUSHJ PP,DMPBIN ;YES, DUMP IT + IDPB C,BINBUF+1 ;DEPOSIT BYTE + POPJ PP, ;EXIT + + DMPBIN: OUT BIN,0 ;DUMP THE BUFFER + POPJ PP, ;NO ERRORS +TSTBIN: GETSTS BIN,C ;GET STSTUS BITS + TRNN C,ERRBIT ;ERROR? + POPJ PP, ;NO, EXIT + MOVE AC0,BINDEV ;YES, GET TAG + JRST ERRLST ;TYPE MESSAGE AND ABORT + +DMPLST: OUT LST,0 ;OUTPUT BUFFER + POPJ PP, ;NO ERRORS +TSTLST: GETSTS LST,C ;ANY ERRORS? + TRNN C,ERRBIT + POPJ PP, ;NO, EXIT + MOVE AC0,LSTDEV +ERRLST: MOVSI RC,[SIXBIT /OUTPUT WRITE-LOCK ERROR DEVICE@/] + TRNE C,IOIMPM ;IMPROPER MODE? + JRST ERRFIN ;YES + MOVSI RC,[SIXBIT /OUTPUT DATA ERROR DEVICE@/] + TRNE C,IODERR ;DEVICE DATA ERROR? + JRST ERRFIN ;YES + MOVSI RC,[SIXBIT /OUTPUT CHECKSUM OR PARITY ERROR DEVICE@/] + TRNE C,IODTER ;IS IT + JRST ERRFIN ;YES + MOVE CS,AC0 ;GET DEVICE + DEVCHR CS, ;FIND OUT WHAT IT IS + MOVSI RC,[SIXBIT /OUTPUT QUOTA EXCEEDED ON DEVICE@/] + TLNN CS,DSKBIT ;SKIP IF DSK OUTPUT + MOVSI RC,[SIXBIT /OUTPUT BLOCK TOO LARGE DEVICE@/] + JRST ERRFIN + +R1BDMP: SETCM CS,R1BCNT + JUMPE CS,R1BI + HRLZS C,CS + HRR C,R1BLOC + HRRI C,-1(C) + MOVEM C,R1BCHK + PUSHJ PP,PTPBIN + HRRI CS,R1BBLK +R1BDM1: MOVE C,0(CS) + ADDM C,R1BCHK + PUSHJ PP,PTPBIN + AOBJN CS,R1BDM1 + MOVE C,R1BCHK + PUSHJ PP,PTPBIN +R1BI: SETOM R1BCNT + PUSH PP,LOCO + POP PP,R1BLOC + POPJ PP, + +ROUT6: CAME CS,RIMLOC + PUSHJ PP,R1BDMP + AOS C,R1BCNT + MOVEM AC0,R1BBLK(C) + AOS LOCO + CAIN C,.R1B-1 + PUSHJ PP,R1BDMP + AOS RIMLOC + POPJ PP, + + + READ0: PUSHJ PP,EOT ;END OF TAPE + +READ: SOSGE IBUF+2 ;BUFFER EMPTY? + JRST READ3 ;YES +READ1: ILDB C,IBUF+1 ;PLACE CHARACTER IN C + MOVE CS,@IBUF+1 ;CHECK FOR SEQUENCE NUMBER + TRNN CS,1 + JRST READ1A + CAIN CS,1 ;CHECK FOR SPECIAL + MOVE CS,[<ASCII/ />+1] + MOVEM CS,SEQNO + MOVEM CS,SEQNO2 + MOVNI CS,4 + ADDM CS,IBUF+2 ;ADJUST WORD COUNT +REPEAT 4,< IBP IBUF+1> ;SKIP SEQ NO + PUSHJ PP,READ ;AND THE TAB + JRST READ ;GET NEXT CHARACTER + +READ1A: JUMPE C,READ ;IGNORE NULL + CAIN C,32 ;IF IT'S A "^Z" + MOVEI C,LF ;TREAT IT AS A "LF" + CAIE C,37 ;CONTROL _ + POPJ PP, + MOVEI C,"^" ;MAKE CONTROL-SHIFT _ VISIBLE + PUSHJ PP,RSW2 + MOVEI C,"_" + PUSHJ PP,RSW2 +READ2: PUSHJ PP,READ ;YES, TEST FOR LINE FEED + PUSHJ PP,RSW2 ;LIST IN ANY EVENT + CAIG C,FF ;IS IT ONE OF + CAIGE C,LF ;LF, VT, OR FF? + JRST READ2 ;NO + PUSHJ PP,OUTIM1 ;YES, DUMP THE LINE + JRST READ ;RETURN NEXT CHARACTER + +READ3: IN CHAR,0 ;GET NEXT BUFFER + JRST READ ;NO ERRORS + GETSTS CHAR,C + TRNN C,ERRBIT!2000 ;ERRORS? + JRST READ0 ;EOF + MOVE AC0,INDEV + MOVSI RC,[SIXBIT/ INPUT PHYSICAL END OF TAPE DEVICE@/] + TRNE C,2000 + JRST ERRFIN ;E-O-T + MOVSI RC,[SIXBIT /MONITOR DETECTED SOFTWARE INPUT ERROR DEVICE@/] + TRNE C,IOIMPM ;IMPROPER MODE? + JRST ERRFIN ;YES + MOVSI RC,[SIXBIT /INPUT DATA ERROR DEVICE@/] + TRNE C,IODERR ;DEVICE DATA ERROR? + JRST ERRFIN ;YES + MOVSI RC,[SIXBIT /INPUT CHECKSUM OR PARITY ERROR DEVICE@/] + TRNN C,IODTER + MOVSI RC,[SIXBIT /INPUT BLOCK TOO LARGE DEVICE@/] + JRST ERRFIN + + OUTAB2: PUSHJ PP,OUTTAB ;PRINT TWO TABS +OUTTAB: MOVEI C,HT +PRINT: CAIE C,CR ;IS THIS A CR? + CAIN C,LF ;OR LF? + JRST OUTCR ;YES, GO PROCESS + CAIN C,FF ;FORM FEED? + JRST OUTFF ;YES, FORCE NEW PAGE + JRST OUTL + +OUTCR: TRNN ER,ERRORS!LPTSW!TTYSW + POPJ PP, + MOVEI C,CR ;CARRIAGE RETURN, LINE FEED + PUSHJ PP,OUTL + SOSGE LPP ;END OF PAGE? + TLO IO,IOPAGE ;YES, SET FLAG + TRCA C,7 ;FORM LINE FEED AND SKIP + +OUTL: TLZN IO,IOPAGE ;NEW PAGE REQUESTED? + JRST OUTC ;NO + JUMP1 OUTC ;YES, BYPASS IF PASS ONE + PUSH PP,C ;SAVE C AND CS + PUSH PP,CS + PUSH PP,ER + TLNN IO,IOMSTR!IOPROG + HRR ER,OUTSW + TLNE IO,IOCREF ;IF DOING CREF OUTPUT NOW + TLNE FR,CREFSW ;AND CREFFING (JUST IN CASE) + JRST .+2 + PUSHJ PP,CLSC3 ;CLOSE IT OUT + HLLM IO,(PP) ;SAVE THIS NEW STATE OF IO + MOVEI C,.LPP + MOVEM C,LPP ;SET NEW COUNTER + MOVEI C,CR + PUSHJ PP,OUTC + MOVEI C,FF + PUSHJ PP,OUTC ;OUTPUT FORM FEED + MOVEI CS,TBUF + PUSHJ PP,OUTAS0 ;OUTPUT TITLE + MOVEI CS,VBUF + PUSHJ PP,OUTAS0 ;OUTPUT VERSION + MOVEI CS,DBUF + PUSHJ PP,OUTAS0 ; AND DATE + MOVE C,PAGENO + PUSHJ PP,DNC ;OUTPUT PAGE NUMBER + AOSG PAGEN. ;FIRST PAGE OF THIS NUMBER? + JRST OUTL1 ;YES + MOVEI C,"-" ;NO, PUT OUT MODIFIER + PUSHJ PP,OUTC + MOVE C,PAGEN. + PUSHJ PP,DNC +OUTL1: PUSHJ PP,OUTCR + MOVEI CS,DEVBUF + PUSHJ PP,OUTAS0 + HRRZ CS,SUBTTX ;SWITCH FOR SUB-TITLE + SKIPE 0(CS) ;IS THERE A SUB-TITLE? + PUSHJ PP,OUTTAB ;YES, OUTPUT A TAB + PUSHJ PP,SOUT20 ;OUTPUT ASCII WITH CARRIAGE RETURN + PUSHJ PP,OUTCR + POP PP,ER + POP PP,CS ;RESTORE REGISTERS + POP PP,C + +OUTC: TRNE ER,ERRORS!TTYSW + PUSHJ PP,TYO + TRNN ER,LPTSW + POPJ PP, +OUTLST: SOSG LSTBUF+2 ;BUFFER FULL? + PUSHJ PP,DMPLST ;YES, DUMP IT +COMMENT $ REG DOESN'T LIKE THIS FEATURE ANY MORE 9-5-72 +$ + IDPB C,LSTBUF+1 ;STORE BYTE + POPJ PP, ;EXIT + + PAGE0: PUSHJ PP,STOUTS ;PAGE PSEUDO-OP +OUTFF1: TLNE IO,IOCREF ;CURRENTLY DOING CREF? + TLNE IO,IOPROG ;AND NOT XLISTED? + JRST OUTFF ;NO + HRR ER,OUTSW + PUSHJ PP,CLSCRF + PUSHJ PP,OUTCR + HRRI ER,0 +OUTFF: TLO IO,IOPAGE +OUTFF2: SETOM PAGEN. + AOS PAGENO + POPJ PP, + +TIMOUT: IDIVI 2,^D60*^D1000 +TIMOU1: IDIVI 2,^D60 + PUSH PP,3 ;SAVE MINUTES + PUSHJ PP,OTOD ;STORE HOURS + MOVEI 3,":" ;SEPARATE BY COLON + IDPB 3,CS + POP PP,2 ;STORE MINUTES +OTOD: IDIVI 2,^D10 + ADDI 2,60 ;FORM ASCII + IDPB 2,CS + ADDI 3,60 + IDPB 3,CS + POPJ PP, + +DATOUT: IDIVI 1,^D31 ;GET DAY + ADDI 2,1 + CAIG 2,^D9 ;TWO DIGITS? + ADDI 2,7760*^D10 ;NO, PUT IN SPACE + PUSHJ PP,OTOD ;STORE DAY + IDIVI 1,^D12 ;GET MONTH + MOVE 2,DTAB(2) ;GET MNEMONIC + IDPB 2,CS ;DEPOSIT RIGHT MOST 7 BITS + LSH 2,-7 ;SHIFT NEXT IN + JUMPN 2,.-2 ;DEPOSIT IFIT EXISTS + MOVEI 2,^D64(1) ;GET YEAR + JRST OTOD ;STORE IT + +DTAB: "-NAJ-" + "-BEF-" + "-RAM-" + "-RPA-" + "-YAM-" + "-NUJ-" + "-LUJ-" + "-GUA-" + "-PES-" + "-TCO-" + "-VON-" + "-CED-" + SUBTTL MACHINE INSTRUCTION SEARCH ROUTINES +IFE OPHSH,< +OPTSCH: MOVEI RC,0 + MOVEI ARG,1B^L<OP1END-OP1TOP> ;SET UP INDEX + MOVEI V,1B^L<OP1END-OP1TOP>/2 ;SET UP INCREMENT + +OPT1A: CAMN AC0,OP1TOP(ARG) ;ARE WE POINTING AT SYMBOL? + JRST OPT1D ;YES, GET THE CODE + JUMPE V,POPOUT ;TEST FOR END + CAML AC0,OP1TOP(ARG) ;NO, SHOULD WE MOVE DOWN? + TDOA ARG,V ;NO, INCREMENT +OPT1B: SUB ARG,V ;YES, DECREMENT + ASH V,-1 ;HALVE INCREMENT + CAIG ARG,OP1END-OP1TOP ;ARE WE OUT OF BOUNDS? + JRST OPT1A ;NO, TRY AGAIN + JRST OPT1B ;YES, BRING IT DOWN A PEG +> + +IFN OPHSH,< +OPTSCH: MOVE ARG,AC0 ;GET SIXBIT NAME + TLZ ARG,400000 ;CLEAR SIGN BIT + IDIVI ARG,PRIME ;REM. GOES IN V + CAMN AC0,OP1TOP(V) ;ARE WE POINTING AT SYMBOL? + JRST OPT1D ;YES + SKIPN OP1TOP(V) ;TEST FOR END + POPJ PP, ;SYMBOL NOT FOUND + HLRZ RC,ARG ;SAVE LHS OF QUOTIENT + SKIPA ARG,RC ;GET IT BACK +OPT1A: ADDI ARG,(RC) ;INCREMENT ARG + ADDI V,(ARG) ;QUADRATIC INCREASE TO V + CAIL V,PRIME ;V IS MODULO PRIME + JRST [SUBI V,PRIME + JRST .-1] + CAMN AC0,OP1TOP(V) ;IS THIS IT? + JRST OPT1D ;YES + SKIPE OP1TOP(V) ;END? + JRST OPT1A ;TRY AGAIN + POPJ PP, ;FAILED +> +OPT1D: +IFN OPHSH,< SETZ RC, ;CLEAR RELOCATION + MOVE ARG,V ;GET INDEX IN RIGHT ACC.> + IDIVI ARG,4 ;ARG HAS INDEX USED IN OPTTAB + LDB V,OPTTAB(V) ;V HAS INDEX TO OPTTAB + CAIL V,700 ;PSEUDO-OP OR IO INSTRUCTION? + JRST OPT1G ;YES + ROT V,-^D9 ;LEFT JUSTIFY + HRRI V,OP ;POINT TO BASIC FORMAT +OPT1F: AOS 0(PP) ;SET FOR SKIP EXIT + MOVEI SDEL,%OP ;SET OP-CODE CROSS-REF FLAG + JRST CREF ;TEST AND OUTPUT, AC0=SYMBOL, V=VALUE + +OPT1G: JUMPG AC0,.+3 ;IF ".","$",OR "%" USE TABLE 1 + TLNN AC0,200000 ;PSEUDO-OP OR IO INST., TEST FOR PROPER TABLE + SKIPA V,OP2TAB-700(V) ;2ND TABLE, FIRST LETTER IS "A" TO "O" + MOVE V,OP1TAB-700(V) ;1ST TABLE, ..."P" TO "Z" + JRST OPT1F ;EXIT + +OPTTAB: +IFE OPHSH,< POINT 9,OP1COD-1(ARG),35> + POINT 9,OP1COD (ARG), 8 + POINT 9,OP1COD (ARG),17 + POINT 9,OP1COD (ARG),26 +IFN OPHSH,< POINT 9,OP1COD (ARG),35> + + IFDEF .XCREF,< .XCREF ;DON'T CREF THIS MESS> +IFE OPHSH,< + RELOC .-1 +OP1TOP: + RELOC + + IF1,<N1=0 + DEFINE X <N1=N1+1 ;>> + + IF2, < + N2=^D36 + CC=0 + RELOC OP1COD + RELOC +DEFINE X (SYMBOL,CODE) +<SIXBIT /SYMBOL/ +CC=CC+CODE_<N2=N2-9> +IFE N2, <OUTLIT>> + +DEFINE OUTLIT < + RELOC + +CC + RELOC +N2=^D36+<CC=0>>> + SYN X,XX ;JUST THE SAME MACRO> + +IFN OPHSH,< +DEFINE XX (SB,CD)<> ;A NUL MACRO +OP1TOP: IF1,< BLOCK PRIME> +IF1,<DEFINE X (SB,CD)<>> +IF2,< +DEFINE OPSTOR (RM)<.$'RM=.$'RM+<OPCODE_<9*<3-R&3>>>> + +DEFINE X (SB,CD)< +SXB=<SIXBIT /SB/> +Q=SXB&-1_-1/PRIME +R=SXB&-1_-1-Q*PRIME +H=Q_-22&777 +TRY=1 +OPCODE=CD +ITEM Q,\R +IFL PRIME-TRY,<PRINTX HASH FAILURE>> + +DEFINE ITEM (QT,RM)< +IFN .%'RM,<R=R+H +IFL PRIME-R,<R=R-R/PRIME*PRIME> +H=H+Q_-22&777 +IFGE PRIME-<TRY=TRY+1>,<ITEM Q,\R>> +IFE .%'RM,<.%'RM=SXB +OPSTOR \<R/4>>>> +IF1,< +DEFINE GETSYM (N)<.%'N=0> + +N=0 + XLIST +REPEAT PRIME,<GETSYM \N +N=N+1> +DEFINE GETSYM (N)<.$'N=0> +N=0 +REPEAT <PRIME/4+1>,<GETSYM \N +N=N+1> +> + LIST> + + IFN OPHSH,< ;PUT THE MOST USED OP CODES FIRST +X JRST , 254 +X PUSHJ , 260 +X POPJ , 263 +X PUSH , 261 +X POP , 262 +X AOS , 350 +X ASCIZ , 701 +X CALLI , 047 +X EXTERN, 724 +X INTERN, 744 +X JFCL , 255 +X JSP , 265 +X MOVE , 200 +X MOVEI , 201 +X MOVEM , 202 +X SETZM , 402 +X SIXBIT, 717 +X SOS , 370 +X TLNE , 603 +X TLNN , 607 +X TLO , 661 +X TLZ , 621 +X TLZA , 625 +X TLZE , 623 +X TLZN , 627 +X TRNE , 602 +X TRNN , 606 +X TRZ , 620 +> + X ADD , 270 +X ADDB , 273 +X ADDI , 271 +X ADDM , 272 + +X AND , 404 +X ANDB , 407 +X ANDCA , 410 +X ANDCAB, 413 +X ANDCAI, 411 +X ANDCAM, 412 +X ANDCB , 440 +X ANDCBB, 443 +X ANDCBI, 441 +X ANDCBM, 442 +X ANDCM , 420 +X ANDCMB, 423 +X ANDCMI, 421 +X ANDCMM, 422 +X ANDI , 405 +X ANDM , 406 + +X AOBJN , 253 +X AOBJP , 252 + +X AOJ , 340 +X AOJA , 344 +X AOJE , 342 +X AOJG , 347 +X AOJGE , 345 +X AOJL , 341 +X AOJLE , 343 +X AOJN , 346 + +XX AOS , 350 +X AOSA , 354 +X AOSE , 352 +X AOSG , 357 +X AOSGE , 355 +X AOSL , 351 +X AOSLE , 353 +X AOSN , 356 +X ARG , 320 +IFN IIISW,<X ASCID , 771> +X ASCII , 700 +XX ASCIZ , 701 + +X ASH , 240 +X ASHC , 244 + +X ASUPPR, 705 +X BLKI , 702 +X BLKO , 703 +X BLOCK , 704 + +X BLT , 251 + +X BYTE , 707 + +XX CAI , 300 +X CAIA , 304 +X CAIE , 302 +X CAIG , 307 +X CAIGE , 305 +X CAIL , 301 +X CAILE , 303 +X CAIN , 306 + +X CALL , 040 +XX CALLI , 047 + +XX CAM , 310 +X CAMA , 314 +X CAME , 312 +X CAMG , 317 +X CAMGE , 315 +X CAML , 311 +X CAMLE , 313 +X CAMN , 316 + +XX CLEAR , 400 +XX CLEARB, 403 +XX CLEARI, 401 +XX CLEARM, 402 + +X CLOSE , 070 +X COMMEN, 770 + + +X CONI , 710 +X CONO , 711 +X CONSO , 712 +X CONSZ , 713 + +XX DATA. , 020 + +X DATAI , 714 +X DATAO , 715 +X DEC , 716 +X DEFINE, 717 +X DEPHAS, 720 + +X DFN , 131 + +X DIV , 234 +X DIVB , 237 +X DIVI , 235 +X DIVM , 236 + + +X DPB , 137 +X DPBI , 136 + +X END , 721 + +X ENTER , 077 + +X ENTRY , 722 + +X EQV , 444 +X EQVB , 447 +X EQVI , 445 +X EQVM , 446 + +X EXCH , 250 + +X EXP , 723 +XX EXTERN, 724 + +X FAD , 140 +X FADB , 143 +X FADL , 141 +X FADM , 142 + +X FADR , 144 +X FADRB , 147 +X FADRI , 145 +X FADRM , 146 + +X FDV , 170 +X FDVB , 173 +X FDVL , 171 +X FDVM , 172 + +X FDVR , 174 +X FDVRB , 177 +X FDVRI , 175 +X FDVRM , 176 + +XX FIN. , 021 + + +X FMP , 160 +X FMPB , 163 +X FMPL , 161 +X FMPM , 162 + + X FMPR , 164 +X FMPRB , 167 +X FMPRI , 165 +X FMPRM , 166 + +X FSB , 150 +X FSBB , 153 +X FSBL , 151 +X FSBM , 152 + +X FSBR , 154 +X FSBRB , 157 +X FSBRI , 155 +X FSBRM , 156 + +X FSC , 132 + +X GETSTS, 062 + + X HALT , 725 +X HISEG , 706 + +X HLL , 500 +X HLLE , 530 +X HLLEI , 531 +X HLLEM , 532 +X HLLES , 533 +X HLLI , 501 +X HLLM , 502 +X HLLO , 520 +X HLLOI , 521 +X HLLOM , 522 +X HLLOS , 523 +X HLLS , 503 +X HLLZ , 510 +X HLLZI , 511 +X HLLZM , 512 +X HLLZS , 513 + +X HLR , 544 +X HLRE , 574 +X HLREI , 575 +X HLREM , 576 +X HLRES , 577 +X HLRI , 545 +X HLRM , 546 +X HLRO , 564 +X HLROI , 565 +X HLROM , 566 +X HLROS , 567 +X HLRS , 547 +X HLRZ , 554 +X HLRZI , 555 +X HLRZM , 556 +X HLRZS , 557 + + X HRL , 504 +X HRLE , 534 +X HRLEI , 535 +X HRLEM , 536 +X HRLES , 537 +X HRLI , 505 +X HRLM , 506 +X HRLO , 524 +X HRLOI , 525 +X HRLOM , 526 +X HRLOS , 527 +X HRLS , 507 +X HRLZ , 514 +X HRLZI , 515 +X HRLZM , 516 +X HRLZS , 517 + +X HRR , 540 +X HRRE , 570 +X HRREI , 571 +X HRREM , 572 +X HRRES , 573 +X HRRI , 541 +X HRRM , 542 +X HRRO , 560 +X HRROI , 561 +X HRROM , 562 +X HRROS , 563 +X HRRS , 543 +X HRRZ , 550 +X HRRZI , 551 +X HRRZM , 552 +X HRRZS , 553 + +X IBP , 133 + +X IDIV , 230 +X IDIVB , 233 +X IDIVI , 231 +X IDIVM , 232 + +X IDPB , 136 + +X IF1 , 726 +X IF2 , 727 +X IFB , 730 +X IFDEF , 731 +X IFDIF , 732 +X IFE , 733 +X IFG , 734 +X IFGE , 735 +X IFIDN , 736 +X IFL , 737 +X IFLE , 740 +X IFN , 741 +X IFNB , 742 +X IFNDEF, 743 + +X ILDB , 134 + +X IMUL , 220 +X IMULB , 223 +X IMULI , 221 +X IMULM , 222 + +X IN , 056 +XX IN. , 016 +X INBUF , 064 +XX INF. , 026 +X INIT , 041 +X INPUT , 066 + +XX INTERN, 744 + +X IOR , 434 +X IORB , 437 +X IORI , 435 +X IORM , 436 + + +X IOWD , 745 +X IRP , 746 +X IRPC , 747 +X JCRY , 750 +X JCRY0 , 751 +X JCRY1 , 752 +X JEN , 753 + +XX JFCL , 255 + +X JFFO , 243 +X JFOV , 765 +X JOV , 754 + +X JRA , 267 +XX JRST , 254 + +X JRSTF , 755 + +X JSA , 266 +XX JSP , 265 +X JSR , 264 + +XX JUMP , 320 +XX JUMPA , 324 +X JUMPE , 322 +X JUMPG , 327 +X JUMPGE, 325 +X JUMPL , 321 +X JUMPLE, 323 +X JUMPN , 326 + +X LALL , 756 + +X LDB , 135 +X LDBI , 134 + + +X LIST , 757 +X LIT , 760 +X LOC , 761 + +X LOOKUP, 076 + +X LSH , 242 +X LSHC , 246 +X MLOFF , 767 +X MLON , 766 +XX MOVE , 200 +XX MOVEI , 201 +XX MOVEM , 202 +X MOVES , 203 +X MOVM , 214 +X MOVMI , 215 +X MOVMM , 216 +X MOVMS , 217 +X MOVN , 210 +X MOVNI , 211 +X MOVNM , 212 +X MOVNS , 213 +X MOVS , 204 +X MOVSI , 205 +X MOVSM , 206 +X MOVSS , 207 + + +X MTAPE , 072 +XX MTOP. , 024 + +X MUL , 224 +X MULB , 227 +X MULI , 225 +X MULM , 226 +XX NLI. , 031 +XX NLO. , 032 + +X NOSYM , 762 + + X OCT , 763 +X OPDEF , 764 + +X OPEN , 050 + +X OR , 434 +X ORB , 437 +X ORCA , 454 +X ORCAB , 457 +X ORCAI , 455 +X ORCAM , 456 +X ORCB , 470 +X ORCBB , 473 + +X ORCBI , 471 +X ORCBM , 472 +X ORCM , 464 +X ORCMB , 467 +X ORCMI , 465 +X ORCMM , 466 +X ORI , 435 +X ORM , 436 + +X OUT , 057 +XX OUT. , 017 +X OUTBUF, 065 +XX OUTF. , 027 +X OUTPUT, 067 + + X PAGE , 700 +X PASS2 , 701 +X PHASE , 702 +X POINT , 703 + +XX POP , 262 +XX POPJ , 263 + +X PRGEND, 714 +X PRINTX, 704 +X PURGE , 705 + +XX PUSH , 261 +XX PUSHJ , 260 + +X RADIX , 706 +X RADIX5, 707 + +X RELEAS, 071 + +X RELOC , 710 +X REMARK, 711 + +X RENAME, 055 + +X REPEAT, 712 + +XX RESET., 015 +X RIM , 715 +X RIM10 , 735 +X RIM10B, 736 + +X ROT , 241 +X ROTC , 245 + +X RSW , 716 +XX RTB. , 022 +X SALL , 720 +IFN UNIVR,<X SEARCH, 721> + +X SETA , 424 +X SETAB , 427 +X SETAI , 425 +X SETAM , 426 +X SETCA , 450 +X SETCAB, 453 +X SETCAI, 451 +X SETCAM, 452 +X SETCM , 460 +X SETCMB, 463 +X SETCMI, 461 +X SETCMM, 462 +X SETM , 414 +X SETMB , 417 +X SETMI , 415 +X SETMM , 416 +X SETO , 474 +X SETOB , 477 +X SETOI , 475 +X SETOM , 476 +X SETSTS, 060 +X SETZ , 400 +X SETZB , 403 +X SETZI , 401 +XX SETZM , 402 + +XX SIXBIT, 717 + +XX SKIP , 330 +X SKIPA , 334 +X SKIPE , 332 +X SKIPG , 337 +X SKIPGE, 335 +X SKIPL , 331 +X SKIPLE, 333 +X SKIPN , 336 + +XX SLIST., 025 + +X SOJ , 360 +X SOJA , 364 +X SOJE , 362 +X SOJG , 367 +X SOJGE , 365 +X SOJL , 361 +X SOJLE , 363 +X SOJN , 366 + +XX SOS , 370 +X SOSA , 374 +X SOSE , 372 +X SOSG , 377 +X SOSGE , 375 +X SOSL , 371 +X SOSLE , 373 +X SOSN , 376 + +X SQUOZE, 707 + +X STATO , 061 +X STATUS, 062 +X STATZ , 063 + +X STOPI , 722 + +X SUB , 274 +X SUBB , 277 +X SUBI , 275 +X SUBM , 276 + +IF2,<IFE OPHSH,<SUBTL:>> +X SUBTTL, 723 +X SUPPRE, 713 +X SYN , 724 +X TAPE , 725 + + X TDC , 650 +X TDCA , 654 +X TDCE , 652 +X TDCN , 656 +X TDN , 610 +X TDNA , 614 +X TDNE , 612 +X TDNN , 616 +X TDO , 670 +X TDOA , 674 +X TDOE , 672 +X TDON , 676 +X TDZ , 630 +X TDZA , 634 +X TDZE , 632 +X TDZN , 636 + +X TITLE , 726 + +X TLC , 641 +X TLCA , 645 +X TLCE , 643 +X TLCN , 647 +X TLN , 601 +X TLNA , 605 +XX TLNE , 603 +XX TLNN , 607 +XX TLO , 661 +X TLOA , 665 +X TLOE , 663 +X TLON , 667 +XX TLZ , 621 +XX TLZA , 625 +XX TLZE , 623 +XX TLZN , 627 + + X TRC , 640 +X TRCA , 644 +X TRCE , 642 +X TRCN , 646 +X TRN , 600 +X TRNA , 604 +XX TRNE , 602 +XX TRNN , 606 +X TRO , 660 +X TROA , 664 +X TROE , 662 +X TRON , 666 +XX TRZ , 620 +X TRZA , 624 +X TRZE , 622 +X TRZN , 626 + +X TSC , 651 +X TSCA , 655 +X TSCE , 653 +X TSCN , 657 +X TSN , 611 +X TSNA , 615 +X TSNE , 613 + +X TSNN , 617 +X TSO , 671 +X TSOA , 675 +X TSOE , 673 +X TSON , 677 +X TSZ , 631 +X TSZA , 635 +X TSZE , 633 +X TSZN , 637 +X TTCALL, 051 +X TWOSEG, 731 +X UFA , 130 +X UGETF , 073 +X UJEN , 100 +IFN UNIVR,<X UNIVER, 737> +X USETI , 074 +X USETO , 075 + +X VAR , 727 + +XX WTB. , 023 + +X XALL , 732 + +X XCT , 256 + +X XLIST , 733 + +X XOR , 430 +X XORB , 433 +X XORI , 431 +X XORM , 432 + +X XPUNGE, 730 +X XWD , 734 + +X Z , 000 + +X .CREF , 740 +X .HWFRM, 742 +X .MFRMT, 743 +X .XCREF, 741 + + + IFN OPHSH,< ;NO-OPS, OLD MNEMONICS,F4 UUOS +X CAI , 300 +X CAM , 310 +X CLEAR , 400 +X CLEARB, 403 +X CLEARI, 401 +X CLEARM, 402 +X JUMP , 320 +X JUMPA , 324 +X SKIP , 330 +X RESET., 015 +X IN. , 016 +X OUT. , 017 +X DATA. , 020 +X FIN. , 021 +X RTB. , 022 +X WTB. , 023 +X MTOP. , 024 +X SLIST., 025 +X INF. , 026 +X OUTF. , 027 +X NLI. , 031 +X NLO. , 032 +> + IFE OPHSH,< +IF1, < BLOCK N1> +OP1END: -1B36 +OP1COD: BLOCK N1/4 + CC> +IFN OPHSH,< +IF2,< +DEFINE SETVAL (N)<EXP .%'N +PURGE .%'N> +N=0 +XLIST +REPEAT PRIME,<SETVAL \N +N=N+1> +LIST +> +OP1COD: IF1,< BLOCK <PRIME/4+1>> +IF2,< +DEFINE SETVAL (N)<EXP .$'N +PURGE .$'N> +N=0 +XLIST +REPEAT <PRIME/4+1>,<SETVAL \N +N=N+1> +> +LIST> + +IFDEF .CREF,< .CREF ;START CREFFING AGAIN> + SUBTTL PERMANENT SYMBOLS +SYMNUM: EXP LENGTH/2 ;NUMBER OF PERMANENT SYMBOLS +DEFINE P (A,B)< + SIXBIT /A/ + XWD SYMF!NOOUTF,B> + +P @, 0(SUPRBT) +P ??????, 0(SUPRBT) + +LENGTH= .-SYMNUM-1 ;LENGTH OF INITIAL SYMBOLS + +PRMTBL: ;PERMANENT SYMBOLS +P ADC, 24 +P APR, 0 +P CCI, 14 +P CDP, 110 +P CDR, 114 +P CPA, 0 +P CR, 150 +P DC, 200 +P DCSA, 300 +P DCSB, 304 +P DF, 270 +P DIS, 130 +P DLS, 240 +P DPC, 250 +P DSK, 170 +P DTC, 320 +P DTS, 324 +P LPT, 124 +P MDF, 260 +P MTC, 220 +P MTM, 230 +P MTS, 224 +P PAG, 10 +P PI, 4 +P PLT, 140 +P PTP, 100 +P PTR, 104 + +P TMC, 340 +P TMS, 344 +P TTY, 120 +P UTC, 210 +P UTS, 214 +IFE LNSSW,< XLIST > +IFN LNSSW,< ;SPECIAL DEVICES FOR PEPR +P .A,550 +P .AB,434 +P .ANG,440 +P .B,554 +P .BITE,470 +P .FA,564 +P .GAIN,520 +P .GATE,444 +P .IA,560 +P .INC,514 +P .LC,474 +P .LG,570 +P .PEPR,400 +P .RG,574 +P .SCON,430 +P .STAT,410 +P .TC,500 +P .TED,540 +P .THR,544 +P .TRK,404 +P .VIEW,524> + LIST +PRMEND: ;END OF PERMANENT SYMBOLS + + OPDEF ZL [Z LITF] ;INVALID IN LITERALS + OPDEF ZA [Z ADDF] ;INVALID IN ADDRESSES + OPDEF ZAL [Z ADDF!LITF] + +OP1TAB: + + ZA PAGE0 ;PAGE + ZAL PASS20 ;PASS2 + ZAL PHASE0 ;PHASE + Z POINT0 ;POINT + ZA PRNTX0 ;PRINTX + ZA PURGE0 ;PURGE + ZA RADIX0 ;RADIX + Z RADX50 ;RADIX50,SQUOZE + ZAL LOC0 (1) ;RELOC + ZAL REMAR0 ;REMARK + ZA REPEA0 ;REPEAT + ZA SUPRE0 ;SUPRESS + ZAL PSEND0 ;PRGEND + ZAL RIM0 (RIMSW) ;RIM + DATAI 0,IOP ;RSW + Z ASCII0 (1) ;SIXBIT + ZAL IOSET (IOPALL!IOSALL) ;SALL +IFN UNIVR,< ZAL SERCH0 ;SEARCH> +IFE UNIVR,< Z 0> + ZA STOPI0 ;STOPI + ZA SUBTT0 (Z (POINT 7,,)) ;SUBTTL + ZA SYN0 ;SYN + ZAL TAPE0 ;TAPE + ZA TITLE0 (Z (POINT 7,,)) ;TITLE + ZAL VAR0 ;VAR + + Z XPUNG0 ;XPUNGE + ZAL TWSEG0 ;TWOSEGMENTS + ZAL XALL0 (IOPALL) ;XALL + ZAL IOSET (IOPROG) ;XLIST + Z XWD0 ;XWD + ZAL RIM0 (RIM1SW) ;RIM10 + ZAL RIM0 (R1BSW) ;RIM10B +IFN UNIVR,< ZA UNIV0 (Z (POINT 7,,)) ;UNIVERSAL> +IFE UNIVR,< Z 0 ;UNIVERSAL> + ZAL IORSET (IONCRF) ;.CREF + ZAL IOSET (IONCRF) ;.XCREF + ZA OFFORM ;.HWFRMT + ZA ONFORM ;.MFRMT + OP2TAB: + + Z ASCII0 (0) ;ASCII + Z ASCII0 (1B18) ;ASCIZ + BLKI IOP ;BLKI + BLKO IOP ;BLKO + ZAL BLOCK0 ;BLOCK + ZA SUPRSA ;ASUPPRESS + ZAL HISEG0 ;HISEG + Z BYTE0 ;BYTE + CONI IOP ;CONI + CONO IOP ;CONO + CONSO IOP ;CONSO + CONSZ IOP ;CONSZ + DATAI IOP ;DATAI + DATAO IOP ;DATAO + Z OCT0 (^D10) ;DEC + ZA DEFIN0 ;DEFINE + + ZAL DEPHA0 ;DEPHASE + ZAL END0 ;END + ZA INTER0 (INTF!ENTF) ;ENTRY + Z EXPRES ;EXP + ZA EXTER0 ;EXTERN + JRST 4,OP ;HALT + TLNN FR,IFPASS ;IF1 + TLNE FR,IFPASS ;IF2 + + TRNE AC0,IFB0 ;IFB + TLNE ARG,IFDEF0 ;IFDEF + Z IFIDN0 (0) ;IFDIF + SKIPE IF ;IFE + SKIPG IF ;IFG + SKIPGE IF ;IFGE + Z IFIDN0 (1) ;IFIDN + SKIPL IF ;IFL + + SKIPLE IF ;IFLE + SKIPN IF ;IFN + TRNN AC0,IFB0 ;IFNB + TLNN ARG,IFDEF0 ;IFNDEF + ZA INTER0 (INTF) ;INTERN + Z IOWD0 ;IOWD + Z IRP0 (0) ;IRP + Z IRP0 (400000) ;IRPC + + JFCL 6,OP ;JCRY + JFCL 4,OP ;JCRY0 + JFCL 2,OP ;JCRY1 + JRST 12,OP ;JEN + JFCL 10,OP ;JOV + JRST 2,OP ;JRSTF + ZAL IORSET (IOPALL!IOSALL) ;LALL + ZAL IORSET (IOPROG) ;LIST + ZAL LIT0 ;LIT + ZAL LOC0 (0) ;LOC + ZA OFFSYM ;NOSYM + Z OCT0 (^D8) ;OCT + ZA OPDEF0 ;OPDEF + JFCL 1,OP ;JFOV + ZA ONML ;MLON + ZA OFFML ;MLOFF + Z ASCII0 (3B19) ;COMMENT +IFN IIISW,< + Z ASCII0 (5B20) ;ASCID> + +CALTBL: + ;USER DEFINED CALLI'S GO HERE + SIXBIT /LIGHTS/ ;-1 +CALLI0: SIXBIT /RESET/ ; 0 + SIXBIT /DDTIN/ ; 1 + SIXBIT /SETDDT/ ; 2 + SIXBIT /DDTOUT/ ; 3 + SIXBIT /DEVCHR/ ; 4 + SIXBIT /DDTGT/ ; 5 + SIXBIT /GETCHR/ ; 6 + SIXBIT /DDTRL/ ; 7 + SIXBIT /WAIT/ ;10 + SIXBIT /CORE/ ;11 + SIXBIT /EXIT/ ;12 + SIXBIT /UTPCLR/ ;13 + SIXBIT /DATE/ ;14 + SIXBIT /LOGIN/ ;15 + SIXBIT /APRENB/ ;16 + SIXBIT /LOGOUT/ ;17 + SIXBIT /SWITCH/ ;20 + SIXBIT /REASSI/ ;21 + SIXBIT /TIMER/ ;22 + SIXBIT /MSTIME/ ;23 + SIXBIT /GETPPN/ ;24 + SIXBIT /TRPSET/ ;25 + SIXBIT /TRPJEN/ ;26 + SIXBIT /RUNTIM/ ;27 + SIXBIT /PJOB/ ;30 + SIXBIT /SLEEP/ ;31 + SIXBIT /SETPOV/ ;32 + SIXBIT /PEEK/ ;33 + SIXBIT /GETLIN/ ;34 + SIXBIT /RUN/ ;35 + SIXBIT /SETUWP/ ;36 + SIXBIT /REMAP/ ;37 + SIXBIT /GETSEG/ ;40 + SIXBIT /GETTAB/ ;41 + SIXBIT /SPY/ ;42 + SIXBIT /SETNAM/ ;43 + SIXBIT /TMPCOR/ ;44 + SIXBIT /DSKCHR/ ;45 + SIXBIT /SYSSTR/ ;46 + SIXBIT /JOBSTR/ ;47 + SIXBIT /STRUUO/ ;50 + SIXBIT /SYSPHY/ ;51 + SIXBIT /FRECHN/ ;52 + SIXBIT /DEVTYP/ ;53 + SIXBIT /DEVSTS/ ;54 + SIXBIT /DEVPPN/ ;55 + SIXBIT /SEEK/ ;56 + SIXBIT /RTTRP/ ;57 + SIXBIT /LOCK/ ;60 + SIXBIT /JOBSTS/ ;61 + SIXBIT /LOCATE/ ;62 + SIXBIT /WHERE/ ;63 + SIXBIT /DEVNAM/ ;64 + SIXBIT /CTLJOB/ ;65 + SIXBIT /GOBSTR/ ;66 + 0 ;67 + 0 ;70 + SIXBIT /HPQ/ ;71 + SIXBIT /HIBER/ ;72 + SIXBIT /WAKE/ ;73 + SIXBIT /CHGPPN/ ;74 + SIXBIT /SETUUO/ ;75 + SIXBIT /DEVGEN/ ;76 + SIXBIT /OTHUSR/ ;77 + SIXBIT /CHKACC/ ;100 + SIXBIT /DEVSIZ/ ;101 + SIXBIT /DAEMON/ ;102 + SIXBIT /JOBPEK/ ;103 + SIXBIT /ATTACH/ ;104 + SIXBIT /DAEFIN/ ;105 + SIXBIT /FRCUUO/ ;106 + SIXBIT /DEVLNM/ ;107 + SIXBIT /PATH./ ;110 + +CALNTH==.-CALTBL +NEGCAL==CALLI0-CALTBL ;NUMBER OF NEGATIVE CALLI'S + +TTCTBL: SIXBIT /INCHRW/ ; 0 INPUT A CHAR. AND WAIT + SIXBIT /OUTCHR/ ; 1 OUTPUT A CHAR. + SIXBIT /INCHRS/ ; 2 INPUT A CHAR. AND SKIP + SIXBIT /OUTSTR/ ; 3 OUTPUT A STRING + SIXBIT /INCHWL/ ; 4 INPUT CHAR., WAIT, LINE MODE + SIXBIT /INCHSL/ ; 5 INPUT CHAR., SKIP, LINE MODE + SIXBIT /GETLCH/ ; 6 GET LINE CHARACTERISTICS + SIXBIT /SETLCH/ ; 7 SET LINE CHARACTERISTICS + SIXBIT /RESCAN/ ;10 RESET INPUT STREAM TO COMMAND + SIXBIT /CLRBFI/ ;11 CLEAR TYPEIN BUFFER + SIXBIT /CLRBFO/ ;12 CLEAR TYPEOUT BUFFER + SIXBIT /SKPINC/ ;13 SKIPS IF A CHAR. CAN BE INPUT + SIXBIT /SKPINL/ ;14 SKIPS IF A LINE CAN BE INPUT + SIXBIT /IONEOU/ ;15 OUTPUT AS AN IMAGE CHAR. + +TTCLTH==.-TTCTBL + SUBTTL USER-DEFINED SYMBOL SEARCH ROUTINES +MSRCH: PUSHJ PP,SEARCH ;PERFORM GENERAL SEARCH + POPJ PP, ;NOT FOUND, EXIT + JUMPG ARG,MSRCH2 ;SKIP-EXIT AND CROSS-REF IF FOUND + CAME AC0,1(SX) ;WE ARE LOOKING AT SYMBOL, TRY ONE ABOVE + POPJ PP, ;NO, EXIT + ADDI SX,2 ;YES, POINT TO IT + PUSHJ PP,SRCH5 ;LOAD REGISTERS +MSRCH2: AOSA 0(PP) ;SET SKIP-EXIT +QSRCH: JUMPL ARG,SSRCH3 ;BRANCH IF OPERAND + MOVEI SDEL,%MAC ;SET OPERATOR FLAG + TLZE IO,DEFCRS ;IS IT A DEFINITION? + MOVEI SDEL,%DMAC ;YES + JRST CREF ;CROSS-REF AND EXIT + +SSRCH: PUSHJ PP,SEARCH ;PERFORM GENERAL SEARCH + POPJ PP, ;NOT FOUND, EXIT + JUMPL ARG,SSRCH2 ;SKIP-EXIT AND CROSS-REF IF FOUND +SSRCH1: CAME AC0,-3(SX) ;WE ARE LOOKING AT MACRO, LOOK ONE SLOT BELOW + POPJ PP, ;NO DICE, EXIT + SUBI SX,2 ;YES, POINT TO IT + PUSHJ PP,SRCH5 ;LOAD REGISTERS +SSRCH2: AOS 0(PP) ;SET FOR SKIP-EXIT +SSRCH3: MOVEI SDEL,%SYM ;SET OPERAND FLAG + +CREF: TLNN IO,IONCRF ;NO CREFFING FOR THIS SYMBOL? + TLNE FR,P1!CREFSW ;PASS ONE OR CROSS-REF SUPPRESSION? + POPJ PP, ;YES, EXIT + EXCH SDEL,C ;PUT FLAG IN C, SACE C + PUSH PP,CS + TLNE IO,IOCREF ;HAVE WE PUT OUT THE 177,102 + JRST CREF3 ;YES + PUSH PP,C ;START OF CREF DATA + + REPEAT 0,< ;NEEDS CHANGE TO CREF + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,102 + PUSHJ PP,OUTLST + TLO IO,IOCREF ;WE NOW ARE IN THAT STATE + POP PP,C ;WE HAVE NOW +CREF3: JUMPE C,NOFLG ;JUST CLOSE IT + PUSHJ PP,OUTLST ;TYPE OF SYMBOL (%MAC,%DMAC,%SYM) + MOVSI CS,770000 ;COUNT CHRS + TDZA C,C ;STARTING AT 0 + LSH CS,-6 ;TRY NEXT + TDNE AC0,CS ;IS THAT ONE THERE? + AOJA C,.-2 ;YES + PUSHJ PP,OUTLST ;PRINT NUMBER OF SYMBOL CONSTITUENTS + MOVE CS,AC0 + +CREF2: MOVEI C,0 + LSHC C,6 + ADDI C,40 + PUSHJ PP,OUTLST ;THE ASCII SYMBOL + JUMPN CS,CREF2 + MOVEI C,%DSYM + TLZE IO,DEFCRS + PUSHJ PP,OUTLST ;MARK IT AS A DEFINING OCCURENCE +NOFLG: MOVE C,SDEL + POP PP,CS + POPJ PP, + +CLSCRF: TRNN ER,LPTSW + POPJ PP, ;LEAVE IF WE SHOULD NOT BE PRINTING +CLSCR2: MOVEI C,177 + PUSHJ PP,PRINT + TLZE IO,IOCREF ;WAS IT OPEN? + JRST CLSCR1 ;YES, JUST CLOSE IT + MOVEI C,102 ;NO, OPEN IT FIRST + PUSHJ PP,OUTLST ;MARK BEGINNING OF CREF DATA + MOVEI C,177 + PUSHJ PP,OUTLST +CLSCR1: MOVEI C,103 + JRST OUTLST ;MARK END OF CREF DATA + +CLSC3: TLZ IO,IOCREF + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,104 + JRST OUTLST ;177,104 CLOSES IT FOR NOW +> ;END OF REPEAT 0 + REPEAT 1,< ;WORKS WITH EXISTING CREF + TLNE IO,IOPAGE + PUSHJ PP,CRFHDR ;GET CORRECT SUBTTL + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,102 + PUSHJ PP,OUTLST + TLO IO,IOCREF ;WE NOW ARE IN THAT STATE + POP PP,C ;WE HAVE NOW +CREF3: PUSHJ PP,OUTLST ;TYPE OF SYMBOL (%MAC,%DMAC,%SYM) + MOVSI CS,770000 ;COUNT CHRS + TDZA C,C ;STARTING AT 0 + LSH CS,-6 ;TRY NEXT + TDNE AC0,CS ;IS THAT ONE THERE? + AOJA C,.-2 ;YES + PUSHJ PP,OUTLST ;PRINT NUMBER OF SYMBOL CONSTITUENTS + MOVE CS,AC0 + +CREF2: MOVEI C,0 + LSHC C,6 + ADDI C,40 + PUSHJ PP,OUTLST ;THE ASCII SYMBOL + JUMPN CS,CREF2 + MOVEI C,%DSYM + TLZE IO,DEFCRS + PUSHJ PP,OUTLST ;MARK IT AS A DEFINING OCCURENCE + MOVE C,SDEL + POP PP,CS + POPJ PP, + +IFN OPHSH,< +SUBTL: SIXBIT /SUBTTL/> +CRFHDR: CAME AC0,SUBTL ;IS FIRST SYMBOL "SUBTTL" + JRST CRFHD1 ;NO + HLLZ AC0,V + PUSHJ PP,SUBTT0 ;UPDATE SUBTTL + MOVE AC0,SUBTL ;RESTORE ARG. + MOVEI V,CPOPJ +CRFHD1: MOVEI C,0 + JRST OUTL + +CLSC3: +CLSCRF: TRNN ER,LPTSW + POPJ PP, ;LEAVE IF WE SHOULD NOT BE PRINTING +CLSCR2: TLZE IO,IOCREF ;FINISH UP LINE + JRST CLSCR1 + MOVEI C,0 + TLNE IO,IOPAGE ;NEW PAGE? + PUSHJ PP,OUTL ;YES,GIVE IT A ROUSING SENDOFF! + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,102 + PUSHJ PP,OUTLST ;MARK BEGINNING OF CREF DATA +CLSCR1: MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,103 + JRST OUTLST ;MARK END OF CREF DATA +> ;END OF REPEAT 1 + SEARCH: HLRZ SX,SRCHX + HRRZ SDEL,SRCHX + +SRCH1: CAML AC0,-1(SX) + JRST SRCH3 +SRCH2: SUB SX,SDEL + LSH SDEL,-1 + CAMG SX,SYMTOP + JUMPN SDEL,SRCH1 + JUMPN SDEL,SRCH2 + SOJA SX,SRCHNO ;NOT FOUND + +SRCH3: CAMN AC0,-1(SX) + JRST SRCH4 ;NORMAL / FOUND EXIT + ADD SX,SDEL + LSH SDEL,-1 + CAMG SX,SYMTOP + JUMPN SDEL,SRCH1 + JUMPN SDEL,SRCH2 + SOJA SX,SRCHNO ;NOT FOUND + +SRCH4: AOS 0(PP) ;SET FOR SKIP EXIT +SRCH5: MOVSI ARG,SUPRBT ;HE IS USING IT, TURN OFF BIT + ANDCAM ARG,(SX) ; IN THE TABLE +SRCH7: MOVE ARG,0(SX) ;FLAG AND VALUE TO ARG + LDB RC,RCPNTR ;POINT 1,ARG,17 + TLNE ARG,LELF ;CHECK LEFT RELOCATE + TLO RC,1 + HRRZ V,ARG + TLNE ARG,SPTR ;CHECK SPECIAL EXTESN POINTER + JRST SRCH6 + TLNE ARG,PNTF + MOVE V,0(ARG) ;36BIT VALUE TO V + JRST SRCHOK + +SRCH6: MOVE V,0(ARG) ;VALUE + MOVE RC,1(ARG) ;AND RELOC + TLNE RC,-2 ;CHECK AND SET EXTPNT + HLLM RC,EXTPNT + TRNE RC,-2 + HRRM RC,EXTPNT + JRST SRCHOK +SRCHNO:IFN UNIVR,<SKIPN UNISCH+1 ;ALLOWED TO SEARCH OTHER TABLES> + POPJ PP, ;NO, JUST RETURN +IFN UNIVR,<AOS V,UNISCH ;GET NEXT INDEX TO TABLE + CAIE V,1 ;FIRST TIME IN + JRST SRCHN1 ;YES, SAVE SYMBOL INFO + HRLM SX,UNISCH ;SAVE SX AND SET FLAG + MOVE ARG,SRCHX ;SEARCH POINTER + MOVEM ARG,UNISHX ;TO A SAFE PLACE + HRR ARG,SYMBOL + HRL ARG,SYMTOP + MOVEM ARG,UNIPTR ;STORE ALSO +SRCHN1: MOVE V,UNISCH(V) ;GET TRUE INDEX + JUMPE V,SRCHKO ;IF ZERO ALL TABLE SCANNED + MOVE ARG,UNISHX(V) ;NEW SRCHX + MOVEM ARG,SRCHX ;SET IT UP + MOVE ARG,UNIPTR(V) ;SYMTOP,,SYMBOL + HRRZM ARG,SYMBOL + HLRZM ARG,SYMTOP + JRST SEARCH ;TRY AGAIN> + +SRCHKO: SETZ ARG, ;CLEAR ARG SO ZERO STORED +SRCHOK: IFN UNIVR,<SKIPN UNISCH ;HAVE WE SEARCH OTHER TABLES> + POPJ PP, ;NO, JUST RETURN +IFN UNIVR,< +SYMBCK: HLRZ SX,UNISCH ;RESTORE SX + SETZM UNISCH ;CLEAR SYMBCK FLAG + PUSH PP,V ;SAVE AN AC + MOVE V,UNISHX ;SRCHX + MOVEM V,SRCHX ;RESTORE ORIGINAL + MOVE V,UNIPTR ;SYMTOP,,SYMBOL + HRRZM V,SYMBOL + HLRZM V,SYMTOP + JUMPE ARG,SRCHK2 ;TOTALLY UNDEFINED + PUSH PP,RC ;SAVE SOME ACCS + PUSH PP,ARG + PUSH PP,EXTPNT + SETZB ARG,EXTPNT ;CLEAR ALL SYMBOL DATA + SETZB RC,V + PUSHJ PP,INSERT ;INSERT SYMBOL IN TABLE + POP PP,EXTPNT ;RESTORE ACCS ETC. + POP PP,ARG + POP PP,RC + MOVEM ARG,(SX) ;SET FLAGS AND VALUE AS IT SHOULD BE +SRCHK2: POP PP,V + POPJ PP, ;RETURN> + + INSERQ: TLNE ARG,UNDF!VARF +INSERZ: SETZB RC,V +INSERT: CAME AC0,-1(SX) ;ARE WE LOOKING AT MATCHING MNEMONIC? + JRST INSRT2 ;NO, JUST INSERT + JUMPL ARG,INSRT1 ;YES, BRANCH IF OPERAND + SKIPL 0(SX) ;OPERATOR, ARE WE LOOKING AT ONE? + JRST UPDATE ;YES, UPDATE + JRST INSRT2 ;NO, INSERT + +INSRT1: SKIPG 0(SX) ;OPERAND, ARE WE LOOKING AT ONE? + JRST UPDATE ;YES, UPDATE + SUBI SX,2 ;NO, MOVE UNDER OPERATOR AND INSERT +INSRT2: MOVE SDEL,SYMBOL + SUBI SDEL,2 + CAMLE SDEL,FREE + JRST INSRT3 + PUSHJ PP,XCEEDS + ADDI SDEL,2000 +INSRT3: MOVEM SDEL,SYMBOL ;MAKE ROOM FOR A TWO WORD ENTRY + HRLI SDEL,2(SDEL) + BLT SDEL,-2(SX) ;PUSH EVERYONE DOWN TWO LOACTIONS + AOS @SYMBOL ;INCREMENT THE SYMBOL COUNT + TLNN RC,-2 ;NEED SPECIAL? + TRNE RC,-2 ;LEFT OR RIGHT EXTERNAL? + JRST INSRT5 ;YES, JUMP + TLNN V,-1 ;SKIP IF V IS A 36BIT VALUE + JRST INSRT4 ;JUMP, ITS A 18BIT VALUE + AOS SDEL,FREE ;36BIT, SO GET A CELL FROM FREE CORE + CAML SDEL,SYMBOL ;MORE CORE NEEDED? + PUSHJ PP,XCEEDS ;YES + HRRI ARG,-1(SDEL) ;POINTER TO ARG + MOVEM V,0(ARG) ;36BIT VALUE TO FREE CORE + TLOA ARG,PNTF ;NOTE THAT ARG IS APOINTER, NOT A 18BIT VALUE + +INSRT4: HRR ARG,V ;18BIT VALUE TO ARG + DPB RC,RCPNTR ;FIX RIGHT RELOCATION + TLNE RC,1 + TLO ARG,LELF ;FIX LEFT RELOCATION +INSRT6: MOVEM ARG,0(SX) ;INSERT FLAGS AND VALUE. + MOVEM AC0,-1(SX) ;INSERT SYMBOL NAME. + PUSHJ PP,SRCHI ;INITILIAZE SRCHX + JRST QSRCH ;EXIT THROUGH CREF + +INSRT5: MOVEI SDEL,2 ;GET TWO CELLS FROM FREE CORE + ADDB SDEL,FREE + CAML SDEL,SYMBOL;MORE CORE NEEDED? + PUSHJ PP,XCEEDS ;YES + MOVEM RC,-1(SDEL) + HRRI ARG,-2(SDEL) ;POINTER TO ARG + MOVEM V,0(ARG) + TLO ARG,SPTR ;SET SPECIAL POINTER, POINTS TO TWO CELLS + JRST INSRT6 + REMOVE: SUBI SX,2 ;MOVE EVERYONE UP TWO LOCATIONS +REMOV1: MOVE 0(SX) + MOVEM 2(SX) ;OVERWRITE THE DELETED SYMBOL + CAME SX,SYMBOL ;SKIP WHEN DONE + SOJA SX,REMOV1 + ADDI SX,2 + MOVEM SX,SYMBOL + SOS 0(SX) ;DECREMENT THE SYMBOL COUNT + +SRCHI: MOVEI AC2,0 ;THIS CODE SETS UP SRCHX + FAD AC2,@SYMBOL + LSH AC2,-^D27 + MOVEI AC1,1000 + LSH AC1,-357(AC2) + HRRM AC1,SRCHX + LSH AC1,1 + ADD AC1,SYMBOL + HRLM AC1,SRCHX + POPJ PP, ;SRCHX=XWD <SYMTBL+LENGTH/2>,LENGTH/4 + + UPDATE: DPB RC,RCPNTR ;FIX RIGHT RELOCATION + TLNE ARG,SPTR ;SKIP IF THERE IS NO SPECIAL POINTER + JRST UPDAT4 ;YES, USE THE TWO CELLS + TLNN RC,-2 ;NEED TO CHANGE + TRNE RC,-2 ;ANY CURRENT EXTERNS? + JRST UPDAT5 ;YES ,JUMP + TLZ ARG,LELF ;CLEAR LELF + TLNE RC,1 ;LEFT RELOCATABLE? + TLO ARG,LELF ;YES, SET THE FLAG + TLNE ARG,PNTF ;WAS THERE A 36BIT VALUE? + JRST UPDAT2 ;YES, USE IT. + TLNE V,-1 ;NO,IS THERE A 36BIT VALUE? + JRST UPDAT1 ;YES, GET A CELL + HRR ARG,V ;NO, USE RH OF ARG +UPDAT3: MOVEM ARG,0(SX) ;OVERWRITE THE ONE IN THE TABLE + POPJ PP, ;AND EXIT + +UPDAT1: AOS SDEL,FREE ;GET ONE CELL + CAML SDEL,SYMBOL ;NEED MORE CORE? + PUSHJ PP,XCEEDS ;YES + HRRI ARG,-1(SDEL) ;POINTER TO ARG + TLO ARG,PNTF ;AND NOTE IT. +UPDAT2: TLNE ARG,EXTF ;IS THERE A EXTERNAL? + JRST UPDAT3 ;YES, - JUST SAVE A LOCATION + MOVEM ARG,0(SX) ;NO, OVERWRITE THE POINTER IN THE TABLE + MOVEM V,0(ARG) ;STORE VALUE AS A 36BIT VALUE + POPJ PP, ;AND EXIT + +UPDAT4: MOVEM ARG,0(SX) ;WE HAVE TWO CELLS, WE USE THEM + MOVEM V,0(ARG) ;SAVE AS 36BIT VALUE + MOVEM RC,1(ARG) ;SAVE RELOCATION BITS + POPJ PP, ;AND EXIT + +UPDAT5: MOVEI SDEL,2 ;THERE IS A EXTERNAL + ADDB SDEL,FREE ;SO WE NEED TWO LOACTIONS + CAML SDEL,SYMBOL ;NEED MORE CORE? + PUSHJ PP,XCEEDS ;YES + MOVEM RC,-1(SDEL) ;SAVE RELOCATION BITS + HRRI ARG,-2(SDEL) ;SAVE THE POINTER IN ARG + MOVEM V,0(ARG) ;SAVE A 36BIT VALUE + TLO ARG,SPTR ;SET SPECIAL PNTR FLAG + TLZ ARG,PNTF ;CLEAR POINTER FLAG + JRST UPDAT3 ;SAVE THE POINTER AND EXIT + + SUBTTL CONSTANTS + + + SUBTTL PHASED CODE + SUBTTL PHASED CODE +LSTFIL: BLOCK 1 + SIXBIT /@/ ;SYMBOL TO STOP PRINTING +TAG: BLOCK 1 + SIXBIT / + @/ +TABI: + BYTE (7) 0, 11, 11, 11, 11 +SEQNO: BLOCK 1 + ASCIZ / / +BININI: EXP B +BINDEV: BLOCK 1 + XWD BINBUF,0 +LSTINI: EXP AL +LSTDEV: BLOCK 1 + XWD LSTBUF,0 +IFN CCLSW,< +NUNINI: EXP DMP +NUNDEV: BLOCK 1 + XWD 0,0 +RPGINI: EXP AL +RPGDEV: BLOCK 1 + XWD 0,CTLBLK +> +INDEVI: EXP A +INDEV: BLOCK 1 + XWD 0,IBUF +DBUF: ASCIZ / TI:ME DY-MON-YR PAGE / +VBUF: ASCIZ / MACRO / ;MUST BE LAST LOCATIONS IN BLOCK + BLOCK 3 ;ALLOW FOR LONG TITLE + + SUBTTL STORAGE CELLS + +PASS1I: + +RP: BLOCK 1 + +IFE CCLSW,<CTIBUF: BLOCK 3 +CTOBUF: BLOCK 3 +> +IFN CCLSW,<CTLBUF: BLOCK <CTLSIZ+5>/5 +> +LSTBUF: BLOCK 3 +BINBUF: BLOCK 3 +IBUF: BLOCK 3 +IFN CCLSW,<NUNDIR:> +LSTDIR: BLOCK 4 +BINDIR: BLOCK 4 +INDIR: BLOCK 4 + +ACDELX: ;LEFT HALF +BLKTYP: BLOCK 1 ;RIGHT HALF + +COUTX: BLOCK 1 +COUTY: BLOCK 1 +COUTP: BLOCK 1 +COUTRB: BLOCK 1 +COUTDB: BLOCK ^D18 + +ERRCNT: BLOCK 1 +FREE: BLOCK 1 +IFN RENTSW,<HIGH1: BLOCK 1 +HISNSW: BLOCK 1 +SVTYP3: BLOCK 1 +HMIN: BLOCK 1 ;START OF HIGH SEG. IN TWO SEG. PROG.> +IFBLK: BLOCK .IFBLK +IFBLKA: BLOCK .IFBLK +LADR: BLOCK 1 +NCOLLS: BLOCK 1 +LIMBO: BLOCK 1 +LBUFP: BLOCK 1 +LBUF: BLOCK <.CPL+5>/5 + BLOCK 1 +VARHD: BLOCK 1 +VARHDX: BLOCK 1 + +LITAB: BLOCK 1 +LITABX: BLOCK 1 + BLOCK 1 +LITHD: BLOCK 1 +LITHDX: BLOCK 1 +LITCNT: BLOCK 1 +LITNUM: BLOCK 1 + +LOOKX: BLOCK 1 +NEXT: BLOCK 1 +OUTSW: BLOCK 1 +PDP: BLOCK 1 +RECCNT: BLOCK 1 +SAVBLK: BLOCK RC +SAVERC: BLOCK 1 +SBUF: BLOCK .SBUF/5 +SRCHX: BLOCK 1 +SUBTTX: BLOCK 1 +SVSYM: BLOCK 1 +SYMBOL: BLOCK 1 +SYMTOP: BLOCK 1 + +STPX: BLOCK 1 +STPY: BLOCK 1 +STCODE: BLOCK .STP +STOWRC: BLOCK .STP + +TABP: BLOCK 1 +TCNT: BLOCK 1 ;COUNT OF CHARS. LEFT IN TBUF +TBUF: BLOCK .TBUF/5 +DEVBUF: BLOCK 6 ;STORE NAME.EXT CREATION DATE AND TIME +TYPERR: BLOCK 1 +IONSYM: BLOCK 1 ;-1 SUPRESS LISTING OF SYMBOLS +PRGPTR: BLOCK 1 ;POINTER TO CHAIN OF PRGEND BLOCKS +ENTERS: BLOCK 1 ;-1 WHEN ENTERS HAVE BEEN DONE +IFN UNIVR,<UNIVSN: BLOCK 1 ;-1 WHEN A UNIVERSAL SEEN> + + PASS2I: + +ABSHI: BLOCK 1 +HIGH: BLOCK 1 +IFN RENTSW,<HHIGH: BLOCK 1 ;SAVE BREAK OF HIGH SEG. IN TWO SEG PROG.> +ACDEVX: BLOCK 1 +CPL: BLOCK 1 +CTLSAV: BLOCK 1 +CTLS1: BLOCK 1 +EXTPNT: BLOCK 1 +INTENT: BLOCK 1 +INREP: BLOCK 1 +INDEF: BLOCK 1 +INTXT: BLOCK 1 +INCND: BLOCK 1 +CALNAM: BLOCK 1 +CALPG: BLOCK 1 +CALSEQ: BLOCK 1 +DEFPG: BLOCK 1 +DEFSEQ: BLOCK 1 +LITPG: BLOCK 1 +LITSEQ: BLOCK 1 +REPPG: BLOCK 1 +REPSEQ: BLOCK 1 +TXTPG: BLOCK 1 +TXTSEQ: BLOCK 1 +CNDPG: BLOCK 1 +CNDSEQ: BLOCK 1 +IRPCNT: BLOCK 1 +IRPARG: BLOCK 1 +IRPARP: BLOCK 1 +IRPCF: BLOCK 1 +IRPPOI: BLOCK 1 +IRPSW: BLOCK 1 +LITLVL: BLOCK 1 +LITLBL: BLOCK 1 ;NAME OF LABEL DEFINED INSIDE A LITERAL + +ASGBLK: BLOCK 1 +LOCBLK: BLOCK 1 + +LOCA: BLOCK 1 +LOCO: BLOCK 1 +RELLOC: BLOCK 1 +ABSLOC: BLOCK 1 +LPP: BLOCK 1 +MODA: BLOCK 1 +MODLOC: BLOCK 1 +MODO: BLOCK 1 +IFN CCLSW,<OTBUF: BLOCK 2> +OUTSQ: BLOCK 2 +PAGEN.: BLOCK 1 +PPTEMP: BLOCK 1 +PPTMP1: BLOCK 1 +PPTMP2: BLOCK 1 + +REPCNT: BLOCK 1 +REPEXP: BLOCK 1 +REPPNT: BLOCK 1 +RPOLVL: BLOCK 1 +R1BCNT: BLOCK 1 +R1BCHK: BLOCK 1 +R1BBLK: BLOCK .R1B +R1BLOC: BLOCK 1 +RIMLOC: BLOCK 1 +TAGINC: BLOCK 1 +VECREL: BLOCK 1 +VECTOR: BLOCK 1 +.TEMP: BLOCK 1 ;TEMPORARY STORAGE +IFN UNIVR,<UNISCH: BLOCK .UNIV ;SEARCH TABLE FOR UNIVERSALS> +SQFLG: BLOCK 1 +ARGF: BLOCK 1 +MACENL: BLOCK 1 +MACLVL: BLOCK 1 +MACPNT: BLOCK 1 +WWRXX: BLOCK 1 +RCOUNT: BLOCK 1 ;COUNT OF WORDS STILL TO READ IN LEAF +WCOUNT: BLOCK 1 ;COUNT OF WORDS STILL FREE IN LEAF +PASS2Z: ;ONLY CLEAR TO HERE ON PRGEND +LSTSYM: BLOCK 1 +PAGENO: BLOCK 1 +SEQNO2: BLOCK 1 +PASS2X: + + SUBTTL MULTI-ASSEMBLY STORAGE CELLS + +LSTPGN: BLOCK 1 +HDAS: BLOCK 1 +IFN CCLSW,<EXTMP: BLOCK 1 ;HOLDS EXT OF COMMAND FILE (RH) +SAVFF: BLOCK 1 +CTLBLK: BLOCK 3 +CTIBUF: BLOCK 3 +CTOBUF: BLOCK 3> +MACSIZ: BLOCK 1 ;INITIAL SIZE OF LOW SEG +IFN UNIVR,< +UNISIZ: BLOCK 1 ;TOP OF BUFFERS AND STACKS +UNITOP: BLOCK 1 ;TOP OF UNIVERSAL SYMBOL TABLE +UNIVNO: BLOCK 1 ;NUMBER OF UNIVERSALS SEEN +UNITBL: BLOCK .UNIV ;TABLE OF UNIVERSAL NAMES +UNIPTR: BLOCK .UNIV ;TABLE OF SYMBOL POINTERS +UNISHX: BLOCK .UNIV ;TABLE OF SRCHX POINTERS> + VAR ;CLEAR VARIABLES + +JOBFFI: BLOCK 203*NUMBUF+1 ;INPUT BUFFER PLUS ONE + + END BEG + diff --git a/src/macro.30 b/src/macro.30 new file mode 100644 index 0000000..d59873a --- /dev/null +++ b/src/macro.30 @@ -0,0 +1,7003 @@ +TITLE MACRO V.30(52) +SUBTTL RPG/CMF/JF/PMH/DMN 7-SEPT-71 +;COPYRIGHT 1968,1969,1970,1971, DIGITAL EQUIPMENT CORP., MAYNARD, MASS. + + VMACRO==30 ;VERSION NUMBER + VUPDATE==0 ;DEC UPDATE LEVEL + VEDIT==30 ;EDIT NUMBER + VCUSTOM==0 ;NON-DEC UPDATE LEVEL + + + LOC <JOBVER==137> + <VCUSTOM>B2+<VMACRO>B11+<VUPDATE>B17+VEDIT + RELOC + MLON + +COMMENT * ASSEMBLY FEATURE SWITCHES (ACTION WHEN NON-ZERO) + + SWITCHES ON (NON-ZERO) IN DEC VERSION +FTDISK GIVES DISK FEATURES +RUNSW USE RUN UUO FOR "DEV:NAME!" +FORMSW USE MORE READABLE FORMATS FOR LISTING (ICCSW) +DFRMSW DEFAULT CONDITION OF FORMAT PRINTING (MULTI-FORM IF ON) + + SWITCHES OFF (ZERO) IN DEC VERSION +IIISW GIVES III FEATURES +OPHSH GIVES HASH SEARCH OF OPCODES +* + SUBTTL DEFAULT ASSEMBLY SWITCH SETTINGS + +IFNDEF RUNSW,<RUNSW==1> +IFNDEF FTDISK,<FTDISK==0> +IFNDEF DFRMSW,<DFRMSW==0> +IFN DFRMSW,<FORMSW==1> +IFDEF ICCSW,<FORMSW==ICCSW> ;SAME SWITCH +IFNDEF FORMSW,<FORMSW==0> + +IFNDEF IIISW,<IIISW==0> + +IFNDEF OPHSH,<OPHSH==0> + + SUBTTL OTHER PARAMETERS + +.PDP== ?D50 ;BASIC PUSH-DOWN POINTER +IFNDEF LPTWID,<LPTWID==?D132> ;DEFAULT WIDTH OF PRINTER +.LPTWD==8*<LPTWID/8> ;USEFUL WIDTH IN MAIN LISTING +.CPL== .LPTWD-?D32 ;WIDTH AVAIABLE FOR TEXT WHEN + ;BINARY IS IN HALFWORD FORMAT +.LPP==?D55 ;LINES/PAGE +.STP== ?D40 ;STOW SIZE +.TBUF== ?D80 ;TITLE BUFFER +.SBUF== ?D80 ;SUB-TITLE BUFFER +.IFBLK==?D20 ;IFIDN COMPARISON BLOCK SIZE +.R1B==?D18 +.UNIV==?D10 ;NUMBER OF UNIVERSAL DEFINITIONS +.LEAF==4 ;SIZE OF BLOCKS IN MACRO TREE + +NCOLS==LPTWID/?D32 ;NUMBER OF COLUMNS IN SYMBOL TABLE +IFN OPHSH,<IFNDEF PRIME,<PRIME==?D701>> +IFNDEF NUMBUF,< +NUMBUF==2 ;NUMBER OF INPUT BUFFERS + +EXTERN JOBREL,JOBSYM,JOBDDT,JOBFF,JOBAPR,JOBSA + + SALL ;SUPPRESS ALL MACROS + +;SOME ASCII CHARACTERS + +HT==11 +LF==12 +VT==13 +FF==14 +CR==15 +EOL==33 + ;ACCUMULATORS +AC0== 0 +AC1= AC0+1 +AC2= AC1+1 +SDEL= 3 ;SEARCH INCREMENT +SX= SDEL+1 ;SEARCH INDEX +ARG= 5 ;ARGUMENT +V= 6 ;VALUE +C= 7 ;CURRENT CHARACTER +CS= C+1 ;CHARACTER STATUS BITS +RC= 11 ;RELOCATION BITS +MWP= 12 ;MACRO WRITE POINTER +MRP= 13 ;MACRO READ POINTER +IO= 14 ;IO REGISTER (LEFT) +ER== IO ;ERROR REGISTER (RIGHT) +FR= 15 ;FLAG REGISTER (LEFT) +RX== FR ;CURRENT RADIX (RIGHT) +MP= 16 ;MACRO PUSHDOWN POINTER +PP= 17 ;BASIC PUSHDOWN POINTER + +%OP== 3 +%MAC== 5 +%DSYM== 2 +%SYM== 1 +%DMAC== %MAC+1 + +OPDEF RESET [CALLI 0] +OPDEF SETDDT [CALLI 2] +OPDEF DDTOUT [CALLI 3] +OPDEF DEVCHR [CALLI 4] +OPDEF WAIT [MTAPE 0] +OPDEF CORE [CALLI 11] +OPDEF EXIT [CALLI 12] +OPDEF UTPCLR [CALLI 13] +OPDEF DATE [CALLI 14] +OPDEF APRENB [CALLI 16] +OPDEF MSTIME [CALLI 23] +OPDEF PJOB [CALLI 30] +OPDEF RUN [CALLI 35] + + ;FR FLAG REGISTER (FR/RX) +IOSCR== 000001 ;NO CR AFTER LINE +MTAPSW==000004 ;MAG TAPE +ERRQSW==000010 ;IGNORE Q ERRORS +LOADSW==000020 ;END OF PASS1 & NO EOF YET +DCFSW== 000040 ;DECIMAL FRACTION +RIM1SW==000100 ;RIM10 MODE +NEGSW== 000200 ;NEGATIVE ATOM +RIMSW== 000400 ;RIM OUTPUT +PNCHSW==001000 ;RIM/BIN OUTPUT WANTED +CREFSW==002000 +R1BSW== 004000 ;RIM10 BINARY OUTPUT +TMPSW== 010000 ;EVALUATE CURRENT ATOM +INDSW== 020000 ;INDIRECT ADDRESSING WANTED +RADXSW==040000 ;RADIX ERROR SWITCH +FSNSW== 100000 ;NON BLANK FIELD SEEN +MWLFLG==200000 ;ON FOR DON'T ALLOW MULTI-WORD LITERALS +P1== 400000 ;PASS1 + + ;IO FLAG REGISTER (IO/ER) +FLDSW== 400000 ;ADDRESS FIELD +IOMSTR==200000 +ARPGSW==100000 ;ALLOW RAPID PROGRAM GENERATION +IOPROG==040000 ;SUPRESS LISTING (LIST/XLIST PSEUDO OP) +NUMSW== 020000 +IOMAC== 010000 ;MACRO EXPANSION IN PROGRESS +IOPALL==004000 ;SUPRESS LISTING OF MACRO EXPANSIONS +IONCRF==002000 ;SUPRESS OUTPUT OF CREF INFORMATION +CRPGSW==001000 ;CURRENTLY IN PROGRESS ON RPG +IOCREF==000400 ;WE ARE NOW OUTPUTTING CREF INFO +IOENDL==000200 ;BEEN TO STOUT +IOPAGE==000100 +DEFCRS==000040 ;THIS IS A DEFINING OCCURANCE (MACROS) +IOIOPF==000020 ;IOP INSTRUCTION SEEN +MFLSW== 000010 ;MULTI-FILE MODE,PRGEND SEEN +IORPTC==000004 ;REPEAT CURRENT CHARACTER +IOTLSN==000002 ;TITLE SEEN +IOSALL==000001 ;SUPPRESS MACRO LISTING EVEN IF BINARY IS GENERATED + +OPDEF JUMP1 [JUMPL FR, ] ;JUMP IF PASS 1 +OPDEF JUMP2 [JUMPGE FR, ] ;JUMP IF PASS 2 + +OPDEF JUMPOC [JUMPGE IO, ] ;JUMP IF IN OP-CODE FIELD +OPDEF JUMPAD [JUMPL IO, ] ;JUMP IF IN ADDRESS FIELD + +OPDEF JUMPCM [JUMPL CS, ] ;JUMP IF CURRENT CHAR IS COMMA +OPDEF JUMPNC [JUMPGE CS, ] ;JUMP IF CURRENT CHAR IS NON-COMMA + + ;ER ERROR REGISTERS (IO/ER) +ERRM== 000020 ;MULTIPLY DEFINED SYMBOL +ERRE== 000040 ;ILLEGAL USE OF EXTERNAL +ERRP== 000100 ;PHASE DISCREPANCY +ERRO== 000200 ;UNDEFINED OP CODE +ERRN== 000400 ;NUMBER ERROR +ERRV== 001000 ;VALUE PREVIOUSLY UNDEFINED +ERRU== 002000 ;UNDEFINED SYMBOL +ERRR== 004000 ;RELOCATION ERROR +ERRL== 010000 ;LITERAL ERROR +ERRD== 020000 ;REFERENCE TO MULTIPLY DEFINED SYMBOL +ERRA== 040000 ;PECULIAR ARGUMENT +ERRX== 100000 ;MACRO DEFINITION ERROR +ERRQ== 200000 ;QUESTIONABLE, NON-FATAL ERROR +ERRORS==777760 +LPTSW== 000002 +TTYSW== 000001 + + ;SYMBOL TABLE FLAGS +SYMF== 400000 ;SYMBOL +TAGF== 200000 ;TAG +NOOUTF==100000 ;NO DDT OUTPUT WFW +SYNF== 040000 ;SYNONYM +MACF== SYNF?-1 ;MACRO +OPDF== SYNF?-2 ;OPDEF +PNTF== 004000 ;"VALUE" IN SYMBOL TBL IS PNTR TO 36BIT VALUE +UNDF== 002000 ;UNDEFINED +EXTF== 001000 ;EXTERNAL +INTF== 000400 ;INTERNAL +ENTF== 000200 ;ENTRY +VARF== 000100 ;VARIABLE +MDFF== 000020 ;MULTIPLY DEFINED +SPTR== 000010 ;SPECIAL EXTERNAL POINTER +SUPRBT==000004 ;SUPRESS OUTPUT TO DDT +LELF== 000002 ;LEFT HAND RELOCATABLE +RELF== 000001 ;RIGHT HAND RELOCATABLE + +LITF== 200000 ;FLAG FOR PSEUDO-OPS INVALID IN LIT'S +ADDF== 100000 ;FLAG FOR PSEUDO-OPS INVALID IN ADDRESSES + +TNODE== 200000 ;TERMINAL NODE FOR EVALEX + SUBTTL RUN UUO + + + LIST + + IFN RUNSW,< ;ASSEMBLE IF RUN UUO IMPLEMENTED +NUNSET: JUMPN ACDEV,.+2 + MOVSI ACDEV,(SIXBIT /SYS/) ;USE SYS IF NONE SPECIFIED + MOVEM ACDEV,RUNDEV + + MOVEM ACFILE,RUNFIL ;STORE FILE NAME + PUSHJ PP,DELETE ;COMMAND FILE + SETZM RUNPP + MOVEI 16,RUNDEV ;XWD 0,RUNDEV + TLNE IO,CRPGSW ;WAS RPG IN PROGRESS? + HRLI 16,1 ;YES. START NEXT AT C(JOBSA)+1 + RUN 16, ;DO "RUN DEV:NAME" + HALT ;SHOULDN'T RETURN. HALT IF IT DOES +> + +DELETE: HRRZ EXTMP ;IF THE EXTENSION + CAIE (SIXBIT/TMP/) ;IS .TMP + POPJ PP, ;RETURN. + CLOSE CTL2, ;DELETE + SETZB 4,5 ;THE COMMAND FILE. + SETZB 6,7 + RENAME CTL2,4 ; + JFCL + POPJ PP, +> + SUBTTL START ASSEMBLING + +ASSEMB: PUSHJ PP,INZ ;INITIALIZE FOR PASS + MOVE [ASCII /.MAIN/] + MOVEM TBUF + MOVEI SBUF + HRRM SUBTTX + +ASSEM1: PUSHJ PP,CHARAC ;TEST FOR FORM FEED + SKIPGE LIMBO ;CRLF FLAG? + JRST ASSEM1 ;YES ,IGNORE LF + CAIN C,14 + SKIPE SEQNO + JRST ASSEM2 + PUSHJ PP,OUTFF1 + PUSHJ PP,OUTLI + JRST ASSEM1 + +ASSEM2: AOS TAGINC + CAIN C,"\" ;BACK-SLASH? + TLZA IO,IOMAC ;YES, LIST IF IN MACRO + TLO IO,IORPTC + PUSHJ PP,STMNT ;OFF WE GO + TLZN IO,IOENDL ;WAS STOUT PRE-EMPTED? + PUSHJ PP,STOUT ;NO, POLISH OFF LINE + JRST ASSEM1 + + SUBTTL STATEMENT PROCESSOR + +STMNT: TLZ FR,INDSW!FSNSW + TLZA IO,FLDSW +STMNT1: PUSHJ PP,LABEL +STMNT2: PUSHJ PP,ATOM ;GET THE FIRST ATOM + CAIN C,35 ;"="? + JRST ASSIGN ;YES + CAIN C,32 ;":"? + JRST STMNT1 ;YES + JUMPAD STMNT7 ;NUMERIC EXPRESSION + JUMPN AC0,STMN2A ;JUMP IF NON NULL FIELD + SKIPN LITLVL ;ALLOW COMMA IN LITERALS + CAIE C,14 ;NULL, COMMA? + CAIN C,EOL ;OR END OF LINE? + POPJ PP, ;YES,EXIT + CAIN C,"]" ;CLOSING LITERAL? + POPJ PP, ;YES + JRST STMNT9 ;NO,AT LEAST SKIP ALL THIS NONSENSE + +STMN2A: JUMPE C,.+2 + TLO IO,IORPTC + PUSHJ PP,MSRCH ;SEARCH FOR MACRO/OPDEF/SYN + JRST STMNT3 ;NOT FOUND, TRY OP CODE + LDB SDEL,[POINT 3,ARG,5] + JUMPE SDEL,ERRAX ;ERROR IF NO FLAGS + SOJE SDEL,OPD1 ;OPDEF IF 1 + SOJE SDEL,CALLM ;MACRO IF 2 + JRST STMNT4 ;SYNONYM, PROCESS WITH OP-CODES + +STMNT3: PUSHJ PP,OPTSCH ;SEARCH OP CODE TABLE + JRST STMNT5 ;NOT FOUND +STMNT4: HLLZ AC0,V ;PUT CODE IN AC0 + TRZ V,ADDF ;CLEAR ADDRESS NON-VALID FLAG + TRZE V,LITF ;VALID IN LITERAL? + SKIPN LITLVL ;NO, ARE WE IN A LITERAL? + JRST 0(V) ;NO, GO TO APPROPRIATE PROCESSOR + POPJ PP, ;YES,EXIT + +STMNT5: PUSHJ PP,SSRCH ;TRY SYMBOLS + JRST STMNT8 ;NOT FOUND + TLNE ARG,EXTF!UNDF ;EXTERNAL OR UNDEFINED? + JRST STMNT7 ;YES, PROCESS IN EVALEX + TLNN RC,-2 ;CHECK FOR EXTERNAL + TRNE RC,-2 + JRST STMNT7 + MOVE AC0,V ;FOUND, PUT VALUE IN AC0 + TLO IO,NUMSW ;FLAG AS NUMERIC +STMNT7: TLZ IO,IORPTC +STMNT9: PUSHJ PP,EVALHA ;EVALUATE EXPRESSION +IFN FORMSW,< MOVE AC1,HWFORM ;USE STANDARD FORM> + TLNE FR,FSNSW ;FIELD SEEN? + JRST STOW ;YES,STOW THE CODE AND EXIT + CAIE C,"]"-40 ;CLOSING LITERAL? + TRO ER,ERRQ ;NO, GIVE "Q" ERROR + POPJ PP, ;EXIT + + STMNT8: MOVEI V,0 ;ALWAYS START SCAN WITH 0 + CAIL V,CALNTH ;END OF TABLE? + JRST STMN8C ;YES, TRY TTCALLS + CAME AC0,CALTBL(V) ;FOUND IT? + AOJA V,.-3 ;NO,TRY AGAIN + SUBI V,NEGCAL ;CALLI'S START AT -1 + HRLI V,(CALLI) ;PUT IN UUO +STMN8D: MOVSI ARG,OPDF ;SET FLAG FOR OPDEF +STMN8B: PUSHJ PP,INSERT ;PUT OPDEF IN TABLE + JRST OPD ;AND TREAT AS OPDEF + +STMN8C: SETZ V, ;START WITH ZERO + CAIL V,TTCLTH ;END OF TABLE? + JRST STMN8A ;YES, ERROR + CAME AC0,TTCTBL(V) ;MATCH? + AOJA V,.-3 ;NO, KEEP TRYING + LSH V,5 ;PUT IN AC FIELD (RIGHT HALF) + HRLZI V,<(TTCALL)>(V) ;PUT UUO IN LEFT HALF + JRST STMN8D ;SET OPDEF FLAG + +STMN8A: SETZB V,RC ;CLEAR VALUE AND RELOCATION + TRO ER,ERRO ;FLAG AS UNDEFINED OP-CODE + JUMP1 OPD ;TREAT AS STANDARD OP ON PASS1 + MOVSI ARG,OPDF!UNDF!EXTF ;SET A FEW FLAGS + JRST STMN8B ;TO FORCE OUT A MESSAGE + + ;STATEMENT OUT PASSES REMAINDER OF LINE (CMNT) + ;UNTIL A LINE TERMINATOR IS SEEN. +STOUTS: TLOA IO,IOENDL!IORPTC +STOUT: TLO IO,IORPTC + PUSHJ PP,BYPAS1 + CAIN C,14 ;COMMA? + SKIPL STPX ;YES, ERROR IF CODE STORED + CAIN C,EOL + TLOA IO,IORPTC + TRO ER,ERRQ +STOUT1: PUSHJ PP,CHARAC + CAIG C,CR + CAIG C,HT + JRST STOUT1 + JRST OUTLIN ;OUTPUT THE LINE (BIN AND LST) + SUBTTL LABEL PROCESSOR + +LABEL: JUMPAD LABEL4 ;COMPARE IF NON-SYMBOLIC + JUMPE AC0,LABEL5 ;ERROR IF BLANK + TLO IO,DEFCRS ;THIS IS A DEFINITION + PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + MOVSI ARG,SYMF!UNDF!TAGF ;NOT FOUND + TLNN ARG,EXTF ;OPERAND FOUND (SKIP EXIT) + JRST LABEL0 + JUMP1 LABEL3 ;ERROR ON PASS1 + TLNN ARG,UNDF ;UNDEFINED ON PASS1 + JRST LABEL3 ;NO, FLAG ERROR + TLZ ARG,EXTF!PNTF ;TURN OFF EXT FLAG NOW +LABEL0: TLZN ARG,UNDF!VARF ;WAS IT PREVIOUSLY DEFINED? + JRST LABEL2 ;YES, CHECK EQUALITY + MOVE V,LOCA ;WFW + MOVE RC,MODA + TLO ARG,TAGF + PUSHJ PP,PEEK ;GET NEXT CHAR. + CAIE C,":" ;SPECIAL CHECK FOR :: + JRST LABEL1 ;NO MATCH + TLO ARG,INTF ;MAKE IT INTERNAL + PUSHJ PP,GETCHR ;PROCESS NEXT CHAR. + PUSHJ PP,PEEK ;PREVIEW NEXT CHAR. +LABEL1: CAIE C,"!" ;HALF-KILL SIGN + JRST LABEL6 ;NO + TLO ARG,NOOUTF ;YES, SUPPRESS IT + PUSHJ PP,GETCHR ;AND GET RID OF IT +LABEL6: MOVEM AC0,TAG ;SAVE FOR PASS 1 ERRORS + HLLZS TAGINC ;ZERO INCREMENT + JRST INSERT ;INSERT/UPDATE AND EXIT + +LABEL2: HRLOM V,LOCBLK ;SAVE LIST LOCATION + CAMN V,LOCA ;DOES IT COMPARE WITH PREVIOUS? WFW + CAME RC,MODA +LABEL3: TLOA ARG,MDFF ;NO, FLAG MULTIPLY DEFINED AND SKIP + JRST LABEL7 ;YES, GET RID OF EXTRA CHARS. + TRO ER,ERRM ;FLAG MULTIPLY DEFINED ERROR + JRST UPDATE ;UPDATE AND EXIT + +LABEL4: CAMN AC0,LOCA ;DO THEY COMPARE? + CAME RC,MODA +LABEL5: TRO ER,ERRP ;NO, FLAG PHASE ERROR + POPJ PP, + +LABEL7: SKIPE LITLVL ;LABEL IN A LITERAL? + MOVEM AC0,LITLBL ;YES, SAVE LABEL NAME FOR LATER + PUSHJ PP,PEEK ;INSPECT A CHAR. + CAIN C,":" ;COLON? + PUSHJ PP,GETCHR ;YES, DISPOSE OF IT + PUSHJ PP,PEEK ;EXAMINE ONE MORE CHAR. + CAIN C,"!" ;EXCLAMATION? + JRST GETCHR ;YES, INDEED + POPJ PP, + SUBTTL ATOM PROCESSOR +ATOM: PUSHJ PP,CELL ;GET FIRST CELL + TLNE IO,NUMSW ;IF NON-NUMERIC +ATOM1: CAIE C,42 ;OR NOT A BINARY SHIFT, + POPJ PP, ;EXIT + + PUSH PP,AC0 ;STACK REGISTERS, ITS A BINARY SHIFT + PUSH PP,AC1 + PUSH PP,RC + PUSH PP,RX + HRRI RX,?D10 ;COMPUTE SHIFT RADIX 10 + PUSHJ PP,CELLSF ;GET SHIFT + MOVE ARG,RC ;SAVE RELOCATION + POP PP,RX ;RESTORE REGISTERS + POP PP,RC + POP PP,AC1 + MOVN SX,AC0 ;USE NEGATIVE OF SHIFT + POP PP,AC0 + JUMPN ARG,NUMER2 ;IF NOT ABSOLUTE + TLNN IO,NUMSW ;AND NUMERIC, + JRST NUMER2 ;FLAG ERROR + LSHC AC0,?D35(SX) + LSH RC,?D35(SX) + JRST ATOM1 ;TEST FOR ANOTHER + CELLSF: TLO IO,FLDSW +CELL: SETZB AC0,RC ;CLEAR RESULT AND RELOCATION + SETZB AC1,AC2 ;CLEAR WORK REGISTERS + MOVEM PP,PPTEMP ;SAVE PUSHDOWN POINTER + TLZ IO,NUMSW + TLZA FR,NEGSW!DCFSW!RADXSW + +CELL1: TLO IO,FLDSW + PUSHJ PP,BYPASS + LDB V,[POINT 4,CSTAT(C),14] ;GET CODE + XCT .+1(V) ;EXECUTE, INDEX VIA BITS 11,12,13,14 OF CSTAT TABLE + JRST CELL1 ;0; BLANK, (TAB OR "+") + JRST LETTER ;1; LETTER ] $ % ( ) , ; > + TLC FR,NEGSW ;2; "-" + TLO FR,INDSW ;3; "@" + JRST NUM1 ;4; NUMERIC 0 - 9 + JRST ANGLB ;5; "<" + JRST SQBRK ;6; "[" + JRST QUOTES ;7; ""","'" + JRST QUAL ;10; "?" + JRST PERIOD ;11; "." + TROA ER,ERRQ ;12; ERROR, FLAG AND TREAT AS DELIMITER + ;12; ! # & * / : = ? \ ? + LETTER: TLOA AC2,(POINT 6,AC0,) ;SET BYTE POINTER +LETTE1: PUSHJ PP,GETCHR ;GET CHARACTER + TLNN CS,6 ;ALPHA-NUMERIC? + JRST LETTE3 ;NO,TEST FOR VARIABLE + TLNE AC2,770000 ;STORE ONLY SIX BYTES +LETTE2: IDPB C,AC2 ;RETURN FROM PERIOD + JRST LETTE1 + +LETTE3: CAIE C,03 ;"#"? + POPJ PP, + JUMPE AC0,POPOUT ;TEST FOR NULL + PUSHJ PP,PEEK ;PEEK AT NEXT CHAR. + CAIN C,"#" ;IS IT 2ND #? + JRST LETTE4 ;YES, THEN IT'S AN EXTERN + TLO IO,DEFCRS + PUSHJ PP,SSRCH ;YES, SEARCH FOR SYMBOL (OPERAND) + MOVSI ARG,SYMF!UNDF ;NOT FOUND, FLAGAS UNDEFINED SYM. + TLNN ARG,UNDF ;UNDEFINED? + JRST GETCHR ;NO, GET NEXT CHAR AND RETURN + TLO ARG,VARF ;YES, FLAG AS A VARIABLE + TRO ER,ERRU ;SET UNDEFINED ERROR FLAG + PUSHJ PP,INSERZ ;INSERT IT WITH A ZERO VALUE + JRST GETDEL + +LETTE4: PUSHJ PP,GETCHR ;AND SCAN PAST IT + PUSHJ PP,GETCHR ;GET RID OF # + JRST EXTER1 ;PUT IN SYMBOL TABLE + +NUMER1: SETZB AC0,RC ;RETURN ZERO +NUMER2: TRO ER,ERRN ;FLAG ERROR + +GETDEL: PUSHJ PP,BYPASS +GETDE1: JUMPE C,.-1 + MOVEI AC1,0 +GETDE3: TLO IO,NUMSW!FLDSW ;FLAG NUMERIC + TLNN FR,NEGSW ;IS ATOM NEGATIVE? + POPJ PP, ;NO, EXIT + JUMPE AC1,GETDE2 + MOVNS AC1 + TDCA AC0,[-1] +GETDE2: MOVNS AC0 ;YES, NEGATE VALUE + MOVNS RC ;AND RELOCATION +POPOUT: POPJ PP, ;EXIT + QUOTES: CAIE C,"'"-40 ;IS IT "'" + JRST QUOTE ;NO MUST BE """ + JRST SQUOTE ;YES + +QUOTE0: TLNE AC0,376000 ;5 CHARACTERS STORED ALREADY? + TRO ER,ERRQ ;YES, GIVE WARNING + ASH AC0,7 + IOR AC0,C +QUOTE: PUSHJ PP,CHARAC ;GET 7-BIT ASCII + CAIG C,15 ;TEST FOR LF, VT, FF OR CR + CAIGE C,12 + JRST .+2 ;NO, SO ALL IS WELL + JRST QUOTE2 ;ESCAPE WITH Q ERROR + CAIE C,42 + JRST QUOTE0 + PUSHJ PP,PEEK ;LOOK AT NEXT CHAR. + CAIE C,42 + JRST QUOTE1 ;RESTORE REPEAT LEVEL AND QUIT + PUSHJ PP,CHARAC ;GET NEXT CHAR. + JRST QUOTE0 ;USE IT + +QUOTE2: TRO ER,ERRQ ;SET Q ERROR +QUOTE1: JRST GETDEL + +SQUOT0: TLNE AC0,770000 ;SIX CHARS. STORED ALREADY ? + TRO ER,ERRQ ;YES + LSH AC0,6 + IORI AC0,-40(C) ;OR IN SIXBIT CHAR. + +SQUOTE: PUSHJ PP,CHARAC + CAIG C,CR + CAIGE C,LF + JRST .+2 + JRST QUOTE1 + CAIE C,"'" + JRST SQUOT0 + PUSHJ PP,PEEK + CAIE C,"'" + JRST QUOTE1 + PUSHJ PP,CHARAC + JRST SQUOT0 + + QUAL: PUSHJ PP,BYPAS1 ;SKIP BLANKS, GET NEXT CHARACTER + CAIN C,42 ;"B"? + JRST QUAL2 ;YES, RADIX=D2 + CAIN C,57 ;"O"? + JRST QUAL8 ;YES, RADIX=D8 + CAIN C,46 ;"F"? + JRST NUMDF ;YES, PROCESS DECIMAL FRACTION + CAIN C,54 ;"L"? + JRST QUALL ;YES + CAIE C,44 ;"D"? + JRST NUMER1 ;NO, FLAG NUMERIC ERROR + ADDI AC2,2 +QUAL8: ADDI AC2,6 +QUAL2: ADDI AC2,2 + PUSH PP,RX + HRR RX,AC2 + PUSHJ PP,CELLSF +QUAL2A: POP PP,RX + TLNN IO,NUMSW + JRST NUMER1 + JRST GETDE1 + +QUALL: PUSH PP,FR + PUSHJ PP,CELLSF + MOVE AC2,AC0 + MOVEI AC0,?D36 + JUMPE AC2,QUAL2A + LSH AC2,-1 + SOJA AC0,.-2 + SUBTTL LITERAL PROCESSOR + +SQBRK: PUSH PP,FR + PUSH PP,EXTPNT ;ALLOW EXTERN TO PRECEDE LIT IN XWD + SETZM EXTPNT + SKIPE LITLVL ;SAVE SEQNO AND PAGE IF NOT IN LIT ALREADY + JRST SQB5 + MOVE C,SEQNO2 + MOVEM C,LITSEQ + MOVE C,PAGENO + MOVEM C,LITPG +SQB5: JSP AC2,SVSTOW +SQB3: PUSHJ PP,STMNT + CAIN C,75 ;CHECK FOR ] + JRST SQB1 + TLO IO,IORPTC + TLNE FR,MWLFLG ;CALL IT ] IF NOT MULTI-WORD FLAG + JRST SQB2 ;BUT REPEAT LAST CHARACTER + PUSHJ PP,BYPAS1 + CAIN C,EOL + TLOA IO,IORPTC + TRO ER,ERRQ +SQB4: PUSHJ PP,CHARAC + CAIN C,";" ;COMMENT? + JRST SQB6 ;YES, IGNORE SQUARE BRACKETS + CAIN C,"]" ;LOOK FOR TERMINAL SQB + TRNN ER,ERRORS ;IN CASE OF ERROR IN LITERAL + JRST .+2 ;NO ALL IS WELL + JRST SQB1 ;FINISH THE LITERAL NOW!! + CAIG C,CR ;LOOK FOR END OF LINE + CAIN C,HT + JRST SQB4 +SQB4A: PUSHJ PP,OUTIML ;DUMP + PUSHJ PP,CHARAC ;GET ANOTHER CHAR. + SKIPL LIMBO ;CRLF FLAG + TLO IO,IORPTC ;NO REPEAT + JRST SQB3 + +SQB6: PUSHJ PP,CHARAC ;GET A CHARACTER + CAIG C,CR + CAIN C,HT ;LOOK FOR END OF LINE CHAR. + JRST SQB6 ;NOT YET + JRST SQB4A ;GOT IT + +SQB1: TLZ IO,IORPTC +SQB2: PUSHJ PP,STOLIT + JSP AC2,GTSTOW + SKIPE LITLBL ;NEED TO FIXUP A LABEL? + PUSHJ PP,RELBLE ;YES, USE LOC OF LITERAL + POP PP,EXTPNT + POP PP,FR + SKIPE LITLVL ;WERE WE NESTED? + JUMP1 NUMER2 ;YES, FORCE ERROR IF PASS 1 + JRST GETDEL + +RELBLE: PUSH PP,AC0 ;SAVE LOCATION COUNTER + PUSH PP,RC ;AND RELOCATION + MOVE AC0,LITLBL ;SYMBOL WE NEED + SETZM LITLBL ;ZERO INDICATOR + PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + JRST RELBL1 ;SHOULD NEVER HAPPEN + TLNN ARG,TAGF ;IT BETTER BE A LABEL + JRST RELBL1 ;IT WASN'T , GIVE UP BEFORE SOME HARM IS DONE + TLZ ARG,UNDF!EXTF!PNTF ;CLEAR FLAGS NOW + POP PP,RC ;GET LITERAL RELOCATION + MOVE V,(PP) ;GET VALUE (LOC COUNTER) + PUSHJ PP,UPDATE ;UPDATE VALUE + POP PP,AC0 ;RESTORE LITERAL COUNT + POPJ PP, ;RETURN + +RELBL1: POP PP,RC ;RESTORE RC + POP PP,AC0 ;AND AC0 + POPJ PP, ;JUST RETURN + ANGLB: PUSH PP,FR + TLZ FR,INDSW + PUSHJ PP,ATOM + TLNN IO,NUMSW + CAIE C,35 + JRST ANGLB1 + PUSHJ PP,ASSIG1 + MOVE AC0,V + JRST ANGLB2 + +ANGLB1: PUSHJ PP,EVALHA +ANGLB2: POP PP,FR + CAIE C,36 + TRO ER,ERRN + JRST GETDEL + +PERIOD: PUSHJ PP,GETCHR ;LOOK AT NEXT CHARACTER + TLNN CS,2 ;ALPHABETIC? + JRST PERNUM ;NO, TEST NUMERIC + MOVSI AC0,(SIXBIT /./) ;YES, PUT PERIOD IN AC0 + MOVSI AC2,(POINT 6,AC0,5) ;SET BYTE POINTER + JRST LETTE2 ;AND TREAT AS SYMBOL + +PERNUM: TLNE CS,4 ;IS IT A NUMBER + JRST NUM32 ;YES + MOVE AC0,LOCA ;NO. CURRENT LOC SYMBOL (.) + MOVE RC,MODA ;SET TO CURRENT ASSEMBLY MODE + JRST GETDE1 ;GET DELIMITER +NUMDF: TLO FR,DCFSW ;SET DECIMAL FRACTION FLAG +NUM: PUSHJ PP,GETCHR ;GET A CHARACTER + TLNN CS,4 ;NUMERIC? + JRST NUM10 ;NO +NUM1: SUBI C,20 ;CONVERT TO OCTAL + PUSH PP,C ;STACK FOR FLOATING POINT + MOVE AC0,AC1 + MULI AC0,0(RX) + ADD AC1,C ;ADD IN LAST VALUE + CAIL C,0(RX) ;IS NUMBER LESS THAN CURRENT RADIX? + TLO FR,RADXSW ;NO, SET FLAG + AOJA AC2,NUM ;YES, AC2=NO. OF DECIMAL PLACES + + NUM10: CAIE C,16 ;PERIOD? + TLNE FR,DCFSW ;OR DECIMAL FRACTION? + JRST NUM30 ;YES, PROCESS FLOATING POINT + LSH AC1,1 ;NO, CLEAR THE SIGN BIT + LSHC AC0,?D35 ;AND SHIFT INTO AC0 + MOVE PP,PPTEMP ;RESTORE PP + SOJE AC2,GETDE1 ;NO RADIX ERROR TEST IF ONE DIGIT + TLNE FR,RADXSW ;WAS ILLEGAL NUMBER ENCOUNTERED? + TRO ER,ERRN ;YES, FLAG N ERROR + JRST GETDE1 + +NUM30: CAIE C,"B"-40 ;IF "B" THEN MISSING "." +NUM31: PUSHJ PP,GETCHR + TLNN CS,4 ;NUMERIC? + JRST NUM40 ;NO +NUM32: SUBI C,20 + PUSH PP,C + JRST NUM31 + +NUM40: PUSH PP,FR ;STACK VALUES + HRRI RX,?D10 + PUSH PP,AC2 + PUSH PP,PPTEMP + CAIN C,45 ;"E"? + JRST [PUSHJ PP,PEEK ;GET NEXT CHAR + PUSH PP,C ;SAVE NEXT CHAR + PUSHJ PP,CELL ;YES, GET EXPONENT + POP PP,C ;GET FIRST CHAR. AFTER E + CAIN V,4 ;MUST HAVE NUMERICAL STATUS + JRST .+2 ;SKIP RETURN + CAIN C,"<" ;ALLOW <EXP> + JRST .+2 ;SKIP RETURN + SKIPN AC0 ;ERROR IF NON-ZERO EXPRESSION + TROA ER,ERRQ ;ALLOW E+,E- + SETOM RC ;FORCE NUMERICAL ERROR + JRST .+2] ;SKIP RETURN + MOVEI AC0,0 ;NO, ZERO EXPONENT + POP PP,PPTEMP + POP PP,SX + POP PP,FR + HRRZ V,PP + MOVE PP,PPTEMP + JUMPN RC,NUMER1 ;EXPONENT MUST BE ABSOLUTE + ADD SX,AC0 + HRRZ ARG,PP + ADD SX,ARG + SETZB AC0,AC2 + TLNE FR,DCFSW + JRST NUM60 + JOV NUM50 ;CLEAR OVERFLOW FLAG + +NUM50: JSP SDEL,NUMUP ;FLOATING POINT + JRST NUM52 ;END OF WHOLE NUMBERS + FMPR AC0,[10.0] ;MULTIPLY BY 10 + TLO AC1,233000 ;CONVERT TO FLOATING POINT + FADR AC0,AC1 ;ADD IT IN + JRST NUM50 + +NUM52: JSP SDEL,NUMDN ;PROCESS FRACTION + FADR AC0,AC2 + JOV NUMER1 ;TEST FOR OVERFLOW + JRST GETDE1 + + TLO AC1,233000 + TRNE AC1,-1 + FADR AC2,AC1 ;ACCUMULATE FRACTION + FDVR AC2,[10.0] + JRST NUM52 + +NUM60: JSP SDEL,NUMUP + JRST NUM62 + IMULI AC0,?D10 + ADD AC0,AC1 + JRST NUM60 + +NUM62: LSHC AC1,-?D36 + JSP SDEL,NUMDN + LSHC AC1,?D37 + PUSHJ PP,BYPAS2 + JRST GETDE3 + + DIVI AC1,?D10 + JRST NUM62 + +NUMUP: MOVEI AC1,0 + CAML ARG,SX + JRST 0(SDEL) + CAMGE ARG,V + MOVE AC1,1(ARG) + AOJA ARG,1(SDEL) + +NUMDN: MOVEI AC1,0 + CAMG V,SX + JRST 0(SDEL) + CAMLE V,ARG + MOVE AC1,0(V) + SOJA V,3(SDEL) + SUBTTL GETSYM +GETSYM: MOVEI AC0,0 ;CLEAR AC0 + MOVSI AC1,(POINT 6,AC0) ;PUT POINTER IN AC1 + PUSHJ PP,BYPASS ;SKIP LEADING BLANKS + TLNN CS,2 ;ALPHABETIC? + JRST GETSY1 ;NO, ERROR + CAIE C,16 ;PERIOD? + JRST GETSY2 ;NO, A VALID SYMBOL + IDPB C,AC1 ;STORE THE CHARACTER + PUSHJ PP,GETCHR ;YES, TEST NEXT CHARACTER + TLNN CS,2 ;ALPHABETIC? +GETSY1: TROA ER,ERRA +GETSY2: AOS 0(PP) ;YES, SET SKIP EXIT +GETSY3: TLNN CS,6 ;ALPHA-NUMERIC? + JRST BYPAS2 ;NO, GET DELIMITER + TLNE AC1,770000 ;YES, HAVE WE STORED SIX? + IDPB C,AC1 ;NO, STORE IT + PUSHJ PP,GETCHR + JRST GETSY3 + + SUBTTL EXPRESSION EVALUATOR +CV== AC0 ;CURRENT VALUE +PV== AC1 ;PREVIOUS VALUE +RC== RC ;CURRENT RELOCATABILITY +PR== AC2 ;PREVIOUS RELOCATABILITY +CS= CS ;CURRENT STATUS +PS== SDEL ;PREVIOUS STATUS + +EVALHA: TLO FR,TMPSW +EVALCM: PUSHJ PP,EVALEX ;EVALUATE FIRST EXPRESSION + PUSH PP,[0] ;MARK PDL + JUMPCM EVALC3 ;JUMP IF COMMA + TLO IO,IORPTC ;IT'S NOT,SO REPEAT + JRST OP ;PROCESS IN OP +EVALC3: +IFN FORMSW,<PUSH PP,INFORM ;PUT FORM WORD ON STACK> + PUSH PP,[0] ;STORE ZERO'S ON PDL + PUSH PP,[0] ;....... + MOVSI AC2,(POINT 4,(PP),12) + JRST OP1B ;PROCESS IN OP + +EVALEX: TLO IO,FLDSW + PUSH PP,[XWD TNODE,0] ;MARK THE LIST 200000,,0 + TLZN FR,TMPSW +EVATOM: PUSHJ PP,ATOM ;GET THE NEXT ATOM + JUMPE AC0,EVGETD ;TEST FOR NULL/ZERO + TLOE IO,NUMSW ;SET NUMERIC, WAS IT PREVIOUSLY? + JRST EVGETD+1 ;YES, TREAT ACCORDINGLY + PUSHJ PP,SEARCH ;SEARCH FOR MACRO OR SYMBOL + JRST EVOP ;NOT FOUND, TRY FOR OP-CODE + JUMPL ARG,.+2 ;SKIP IF OPERAND + PUSHJ PP,SSRCH1 ;OPERATOR, TRY FOR SYMBOL (OPERAND) + PUSHJ PP,QSRCH ;PERFORM CROSS-REFERENCE + JUMPG ARG,EVMAC ;BRANCH IF OPERATOR + MOVE AC0,V ;SYMBOL, SET VALUE + JRST EVTSTS ;TEST STATUS + +EVMAC: TLNE FR,NEGSW ;UNARY MINUS? + JRST EVERRZ ;YES, INVALID BEFORE OPERATOR + LDB SDEL,[POINT 3,ARG,5] ;GET MACF/OPDF/SYNF + SOJL SDEL,EVERRZ ;ERROR IF NO FLAGS + + JUMPE C,.+2 ;NON-BLANK? + TLO IO,IORPTC ;YES, REPEAT CHARACTER + SOJE SDEL,CALLM ;MACRO IF 2 + JUMPG SDEL,EVOPS ;SYNONYM IF 4 + + MOVE AC0,V ;OPDEF + MOVEI V,OP ;SET TRANSFER VECTOR + JRST EVOPD + EVOP: TLNE FR,NEGSW ;OPCODE, UNARY MINUS? + JRST EVERRZ ;YES, ERROR + + PUSHJ PP,OPTSCH ;SEARCH SYMBOL TABLE + JRST EVOPX ;NOT FOUND +EVOPS: TRZ V,LITF ;CLEAR LIT INVALID FLAG + TRZE V,ADDF ;SYNONYM + JRST EVOPX ;PSEUDO-OP THAT GENERATES NO DATA JUMPS + HLLZ AC0,V +EVOPD: JUMPE C,.+2 ;OPDEF, NON-BLANK DELIMITER? + TLO IO,IORPTC ;YES, REPEAT CHARACTER + JSP AC2,SVSTOW + PUSHJ PP,0(V) + PUSHJ PP,DSTOW + JSP AC2,GTSTOW + TRNE RC,-2 + HRRM RC,EXTPNT + TLNE RC,-2 + HLLM RC,EXTPNT + JRST EVNUM + +EVOPX: MOVSI ARG,SYMF!UNDF + PUSHJ PP,INSERZ +EVERRZ: SETZB AC0,RC ;CLEAR CODE AND RELOCATION +EVERRU: TRO ER,ERRU + JRST EVGETD + EVTSTS: TLNE ARG,UNDF + JRST [TRO ER,ERRU ;SET UNDEF ERROR + JUMP1 EVGETD ;TREAT AS UNDF ON PASS1 + JRST .+1] ;TREAT AS EXTERNAL ON PASS2 + TLNN ARG,EXTF + JRST EVTSTR + HRRZ RC,ARG ;GET ADRES WFW + HRRZ ARG,EXTPNT ;SAVE IT WFW + HRRM RC,EXTPNT ;WFW + TRNE ARG,-1 ;WFW + TRO ER,ERRE + SETZB AC0,ARG + +EVTSTR: TLNE ARG,MDFF ;MULTIPLY DEFINED? + TRO ER,ERRD ;YES, FLAG IT + TLNE FR,NEGSW ;NEGATIVE ATOM? + PUSHJ PP,GETDE2 ;YES, NEGATE AC0 AND RC + +EVGETD: TLNE IO,NUMSW ;NON BLANK FIELD + TLO FR,FSNSW ;YES,SET FLAG + PUSHJ PP,BYPAS2 + TLNE CS,6 ;ALPHA-NUMERIC? + TLO IO,IORPTC ;YES, REPEAT IT +EVNUM: POP PP,PS ;POP THE PREVIOUS DELIMITER/TNODE + TLO PS,4000 + CAMGE PS,CS ;OPERATION REQUIRED? + JRST EVPUSH ;NO, PUT VALUES BACK ON STACK + TLNN PS,TNODE ;YES, HAVE WE REACHED TERMINAL NODE? + JRST EVXCT ;NO, EXECUTION REQUIRED + TLNN CS,170000 ;YES, ARE WE POINTING AT DEL? (& ! * / + - ?) + POPJ PP, ;YES, EXIT + ;NO,FALL INTO EVPUSH + + EVPUSH: PUSH PP,PS ;STACK VALUES + PUSH PP,CV + PUSH PP,RC + PUSH PP,CS + JRST EVATOM ;GET NEXT ATOM + +EVXCT: POP PP,PR ;POP PREVIOUS RELOCATABILITY + POP PP,PV ;AND PREVIOUS VALUE + LDB PS,[POINT 3,PS,29] ;TYPE OF OPERATION TO PS + JRST .+1(PS) ;PERFORM PROPER OPERATION + JRST ASSEM1 ;0; SHOULD NEVER GET HERE ;DMN + JRST XMUL ;1; + JRST XDIV ;2; + JRST XADD ;3; + JRST XSUB ;4; + JRST XLRW ;5; "?" + TDOA CV,PV ;6; MERGE PV INTO CV + AND CV,PV ;7; AND PV INTO CV + JUMPN RC,.+2 ;COMMON RELOCATION TEST +EVXCT1: JUMPE PR,EVNUM + TRO ER,ERRR ;BOTH MUST BE FIXED + JRST EVNUM ;GO TRY AGAIN + +XSUB: SUBM PV,CV + SUBM PR,RC + JRST EVNUM + +XADD: ADDM PV,CV + ADDM PR,RC + JRST EVNUM + +XDIV: IDIV PR,CV ;CORRECT RELOCATABILITY + IDIVM PV,CV +XDIV1: EXCH PR,RC ;TAKE RELOCATION OF NUMERATOR + JRST EVXCT1 + +XMUL: JUMPE PR,XMUL1 ;AT LEAST ONE OPERAND + JUMPE RC,XMUL1 ;MUST BE FIXED + TRO ER,ERRR +XMUL1: IORM PR,RC ;GET RELOCATION TO RC + CAMGE PV,CV ;FIND THE GREATER + EXCH PV,CV ;FIX IN CASE CV=0,OR 1 + IMULM PV,RC + IMULM PV,CV + JRST EVNUM +XLRW: EXCH PV,CV + LSH CV,0(PV) + LSH PR,0(PV) + JRST XDIV1 + SUBTTL LITERAL STORAGE HANDLER + +STOLER: +IFE FORMSW,< SETZB AC0,RC ;ERROR, NO CODE STORED + PUSHJ PP,STOW ;STOW ZERO> +IFN FORMSW,< MOVEI AC0,0 + PUSHJ PP,STOWZ1> + TRO ER,ERRL ;AND FLAG THE ERROR + +STOLIT: MOVE SDEL,STPX + SUB SDEL,STPY ;COMPUTE NUMBER OF WORDS + JUMPE SDEL,STOLER ;ERROR IF NONE STORED + TRNN ER,ERRORS ;ANY ERRORS? + JRST STOL06 ;NO + JUMP2 STOL22 ;YES, NO SEARCH. BRANCH IF PASS2 + ADDM SDEL,LITCNT ;PASS ONE, UPDATE COUNT + JRST STOWI ;INITIALIZE STOW + +STOL06: MOVEI SX,LITAB ;PREPARE FOR SEARCH + MOVE ARG,STPX ;SAVE IN THE EVENT OF MULTIPLE-WORD + HRL ARG,STPY + MOVE AC2,LITNUM + MOVEI SDEL,0 +STOL08: PUSHJ PP,DSTOW ;GET VALUE WFW + +STOL10: SOJL AC2,STOL24 ;TEST FOR END + MOVE SX,0(SX) ;NO, GET NEXT STORAGE CELL + MOVE V,-1(SX) ;GET RELOCATION BITS WFW + CAMN AC0,-2(SX) ;DO CODES COMPARE? WFW + CAME RC,V ;YES, HOW ABOUT RELOCATION? + AOJA SDEL,STOL10 ;NO, TRY AGAIN + SKIPGE STPX ;YES, MULTI-WORD? + JRST STOL26 ;NO, JUST RETURN LOCATION + MOVEM AC2,SAVBLK+AC2 ;YES, SAVE STARTING INFO + MOVEM SX,SAVBLK+SX + +STOL12: SOJL AC2,STOL23 ;TEST FOR END + PUSHJ PP,DSTOW ;GET NEXT WORD WFW + MOVE SX,0(SX) ;UPDATE POINTER + MOVE V,-1(SX) ;GET RELOCATION WFW + CAMN AC0,-2(SX) ;COMPARE VALUE WFW + CAME RC,V ;AND RELOCATION + JRST STOL14 ;NO MATCH, TRY AGAIN + SKIPL STPX ;MATCH, HAVE WE FINISHED SEARCH? + JRST STOL12 ;NO, TRY NEXT WORD + JRST STOL26 ;YES, RETURN LOCATION + +STOL14: MOVE AC2,SAVBLK+AC2 ;RESTORE STOW POINTERS + MOVE SX,SAVBLK+SX + HRREM ARG,STPX + HLREM ARG,STPY + AOJA SDEL,STOL08 ;BETTER LUCK NEXT TIME + +STOL22: MOVE SDEL,LITNUM +STOL23: PUSHJ PP,DSTOW ;DSTOW AND CONVERT +STOL24: MOVE SX,LITABX ;GET CURRENT STORAGE + PUSHJ PP,GETTOP ;GET NEXT CELL + MOVEM AC0,-2(SX) ;STORE CODE WFW + MOVEM RC,-1(SX) ;WFW +IFN FORMSW,< + MOVE AC0,FORM + MOVEM AC0,-3(SX)> + MOVEM SX,LITABX ;SET POINTER TO CURRENT CELL + AOS LITNUM ;INCREMENT NUMBER STORED + AOS LITCNT ;INCREMENT NUMBER RESERVED + SKIPL STPX ;ANY MORE CODE? + JRST STOL23 ;YES +STOL26: JUMP1 POPOUT ;EXIT IF PASS ONE + MOVE SX,LITHDX ;GET HEADER BLOCK + HLRZ RC,-1(SX) ;GET BLOCK RELOCATION + HRRZ AC0,-1(SX) + ADDI AC0,0(SDEL) ;COMPUTE ACTUAL LOCATION + POPJ PP, ;EXIT + + SUBTTL INPUT ROUTINES +GETCHR: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + CAIL C,"A"+40 ;CHECK FOR LOWER CASE + CAILE C,"Z"+40 + JRST .+2 ;NOT LOWER CASE + MOVEI C,100 ;@> + TRZA C,100 ;CONVERT LOWER CASE TO SIXBIT + SUBI C,40 ;CONVERT TO SIXBIT + CAIG C,77 ;CHAR GREATER THAN SIXBIT? + JUMPGE C,GETCS ;TEST FOR VALID SIXBIT + ADDI C,40 ;BACK TO ASCII + CAIN C,HT ;CHECK FOR TAB + JRST GETCS2 ;MAKE IT LOOK LIKE SPACE + CAIG C,CR ;GREATER THAN CR + CAIG C,HT ;GREATER THAN TAB + JRST GETCS1 ;IS NOT FF,VT,LF OR CR + MOVEI C,EOL ;LINE OR FORM FEED OR V TAB + TLOA IO,IORPTC ;REPEAT CHARACTER +GETCS2: MOVEI C,0 ;BUT TREAT AS BLANK +GETCS: MOVE CS,CSTAT(C) ;GET STATUS BITS + POPJ PP, ;EXIT + +GETCS1: JUMPE C,GETCS ;IGNORE NULS + TRC C,100 ;MAKE CHAR. VISIBLE + MOVEI CS,"?" + DPB CS,LBUFP ;PUT ? IN OUTPUT + PUSHJ PP,RSW2 ;ALSO MODIFIED CHAR. + TRO ER,ERRQ ;FLAG Q ERROR + JRST GETCHR ;BUT IGNORE CHAR. + +CHARAC: TLZE IO,IORPTC ;REPEAT REQUESTED? + JRST CHARAX ;YES +RSW0: JUMPN MRP,MREAD ;BRANCH IF TREE POINTER SET + PUSHJ PP,READ +RSW1: SKIPE RPOLVL ;ARE WE IN "REPEAT ONCE"? + JRST REPO1 ;YES +RSW2: MOVE CS,LIMBO ;GET LAST CHAR. + MOVEM C,LIMBO ;STORE THIS CHAR. FOR RPTC + CAIN C,LF ;LF? + CAIE CS,CR ;YES,LAST CHAR. A CR? + JRST RSW3 ;NO + HRROS LIMBO ;YES,FLAG + POPJ PP, ;AND EXIT + +RSW3: TLNE IO,IOSALL ;MACRO SUPPRESS ALL? + JUMPN MRP,CPOPJ ;YES,DON'T LIST IN MACRO + SOSG CPL ;ANY ROOM IN THE IMAGE BUFFER? + PUSHJ PP,OUTPL ;NO, OUTPUT THE PARTIAL LINE + IDPB C,LBUFP ;YES, STORE IN PRINT AREA + CAIE C,HT ;TAB? + POPJ PP, ;NO, EXIT + MOVEI C,7 + ANDCAM C,CPL ;MASK +CHARAX: HRRZ C,LIMBO ;GET LAST CHARACTER + POPJ PP, ;EXIT + +CHARL: PUSHJ PP,CHARAC ;GET AND TEST 7-BIT ASCII + CAIG C,FF ;LINE OR FORM FEED OR VT? + CAIGE C,LF + POPJ PP, ;NO,EXIT + SKIPE LITLVL ;IN LITERAL? + JRST OUTIML ;YES +CHARL1: PUSHJ PP,SAVEXS ;SAVE REGISTERS + PUSHJ PP,OUTLIN ;DUMP THE LINE + JRST RSTRXS ;RESTORE REGISTERS AND EXIT + SUBTTL CHARACTER STATUS TABLE + + DEFINE GENCS (OPLVL,ATOM,AN,SQUOZ,OPTYPE,SEQNO) +<BYTE (6)OPLVL (9)ATOM (3)AN (6)SQUOZ,OPTYPE,SEQNO> + + ;OPLVL PRIORITY OF BINARY OPERATORS + ;ATOM INDEX TO JUMP TABLE AT CELL1 + ;AN TYPE OF CHARACTER + ; 1=OTHER, 2=ALPHA, 4=NUMERIC + ;SQUOZ VALUE IN RADIX 50 + ;OPTYPE INDEX TO JUMP TABLE AT EVXCT + ;SEQNO VALUE IN SIXBIT +CSTAT: + GENCS 00,00,1,00,00,00 ; ' ' + GENCS 04,12,1,00,06,01 ; '!' + GENCS 00,07,1,00,00,02 ; '"' + GENCS 00,12,1,00,00,03 ; '#' + GENCS 00,01,2,46,00,04 ; '$' + GENCS 00,01,2,47,00,05 ; '%' + GENCS 04,12,1,00,07,06 ; '&' + GENCS 00,07,1,00,00,07 ; ''' + + GENCS 00,01,1,00,00,10 ; '(' + GENCS 00,01,1,00,00,11 ; ')' + GENCS 02,12,1,00,01,12 ; '*' + GENCS 01,00,1,00,03,13 ; '+' + GENCS 40,01,1,00,00,14 ; ',' + GENCS 01,02,1,00,04,15 ; '-' + GENCS 00,11,2,45,00,16 ; '.' + GENCS 02,12,1,00,02,17 ; '/' + + GENCS 00,04,4,01,00,20 ; '0' + GENCS 00,04,4,02,00,21 ; '1' + GENCS 00,04,4,03,00,22 ; '2' + GENCS 00,04,4,04,00,23 ; '3' + GENCS 00,04,4,05,00,24 ; '4' + GENCS 00,04,4,06,00,25 ; '5' + GENCS 00,04,4,07,00,26 ; '6' + GENCS 00,04,4,10,00,27 ; '7' + + GENCS 00,04,4,11,00,30 ; '8' + GENCS 00,04,4,12,00,31 ; '9' + GENCS 00,12,1,00,00,32 ; ':' + GENCS 00,01,1,00,00,33 ; ';' + GENCS 00,05,1,00,00,34 ; '<' + GENCS 00,12,1,00,00,35 ; '=' + GENCS 00,01,1,00,00,36 ; '>' + GENCS 00,12,1,00,00,37 ; '?' + GENCS 00,03,1,00,00,40 ; '@' + GENCS 00,01,2,13,00,41 ; 'A' + GENCS 00,01,2,14,00,42 ; 'B' + GENCS 00,01,2,15,00,43 ; 'C' + GENCS 00,01,2,16,00,44 ; 'D' + GENCS 00,01,2,17,00,45 ; 'E' + GENCS 00,01,2,20,00,46 ; 'F' + GENCS 00,01,2,21,00,47 ; 'G' + + GENCS 00,01,2,22,00,50 ; 'H' + GENCS 00,01,2,23,00,51 ; 'I' + GENCS 00,01,2,24,00,52 ; 'J' + GENCS 00,01,2,25,00,53 ; 'K' + GENCS 00,01,2,26,00,54 ; 'L' + GENCS 00,01,2,27,00,55 ; 'M' + GENCS 00,01,2,30,00,56 ; 'N' + GENCS 00,01,2,31,00,57 ; 'O' + + GENCS 00,01,2,32,00,60 ; 'P' + GENCS 00,01,2,33,00,61 ; 'Q' + GENCS 00,01,2,34,00,62 ; 'R' + GENCS 00,01,2,35,00,63 ; 'S' + GENCS 00,01,2,36,00,64 ; 'T' + GENCS 00,01,2,37,00,65 ; 'U' + GENCS 00,01,2,40,00,66 ; 'V' + GENCS 00,01,2,41,00,67 ; 'W' + + GENCS 00,01,2,42,00,70 ; 'X' + GENCS 00,01,2,43,00,71 ; 'Y' + GENCS 00,01,2,44,00,72 ; 'Z' + GENCS 00,06,1,00,00,73 ; '[' + GENCS 00,12,1,00,00,74 ; '\' + GENCS 00,01,1,00,00,75 ; ']' + GENCS 00,10,1,00,00,76 ; '?' + GENCS 10,12,1,00,05,77 ; '?' + SUBTTL LISTING ROUTINES + +OUTLIN: TRNN ER,ERRORS-ERRQ ;ANY ERRORS? + TLNE FR,ERRQSW ;NO, IGNORE Q ERRORS? + TRZ ER,ERRQ ;YES, YES, ZERO THE Q ERROR + HRLZ AC0,ER ;PUT ERROR FLAGS IN AC0 LEFT + TDZ ER,TYPERR + JUMP1 OUTL30 ;BRANCH IF PASS ONE + JUMPN AC0,OUTL02 ;JUMP IF ANY ERRORS TO FORCE PRINTING + SKIPL STPX ;SKIP IF NO CODE, OTHERWISE + JRST OUTL01 ;NO + TLNN IO,IOSALL ;YES,SUPPRESS ALL? + JRST OUTL03 ;NO + JUMPN MRP,CPOPJ ;YES,EXIT IF IN MACRO + LDB C,[XWD 350700,LBUF] + CAIE C,15 ;FIRST CHAR CR? +OUTL01: TLZ IO,IOMAC ;FORCE MACRO PRINTING +OUTL03: TLNN IO,IOMSTR!IOPROG!IOMAC +OUTL02: IOR ER,OUTSW ;FORCE IT. + IDPB AC0,LBUFP ;STORE ZERO TERMINATOR AFTER ASCII SRC LINE + TLNN FR,CREFSW ;CREF? + PUSHJ PP,CLSCRF ;YES, WRITE END OF CREF DATA (177,003) + JUMPE AC0,OUTL20 ;BRANCH IF NO ERRORS + TLZE AC0,ERRM ;M ERROR? + TLO AC0,ERRP ;M ERROR SET - SET P ERROR. + PUSHJ PP,OUTLER ;PROCESS ERRORS + +OUTL20: SKIPN RC,ASGBLK + SKIPE CS,LOCBLK ; + SKIPL STPX ;ANY BINARY? + JRST OUTL23 ;YES, JUMP + JUMPE RC,OUTL22 ;SEQUENCE BREAK AND NO BINARY JUMPS + ILDB C,TABP ;ASSIGNMENT FALLS THROUGH + PUSHJ PP,OUTL ;OUTPUT A TAB. + ILDB C,TABP ;OUTPUT 2ND TAB, LOCATION FIELD + PUSHJ PP,OUTC ;NEXT IS BINARY LISTING FIELD + HLLO CS,LOCBLK ;LEFT HALF OF A 36BIT VALUE + JUMPL RC,.+2 ;SKIP IF LEFT HALF IS NOT RELOC + TRZA CS,1 ;IT IS, SET THE FLAG + TLNE CS,-1 ;SKIP IF ITS A 18BIT VALUE, OTHERWISE + PUSHJ PP,ONC1 ;PRINT LH OF A 36 BIT VALUE IN CS + HRLO CS,LOCBLK ;PICK UP THE RIGHT HALF (18BIT VALUE) + TRZ CS,0(RC) ; + PUSHJ PP,ONC ;PRINT IT + JRST OUTL23 ;SKIP SINGLE QUOTE TEST + OUTL22: PUSHJ PP,ONC ;TAB TO RH AND PRINT IT + MOVEI C,"'" + SKIPE MODA + PUSHJ PP,OUTC +OUTL23: SKIPL STPX ;ANY BINARY? + PUSHJ PP,BOUT ;YES, DUMP IT + MOVE CS,@OUTLI2 ;[POINT 7,LBUF] +OUTL24: ILDB C,CS + JUMPE C,OUTL25 + CAIG C," " + JRST OUTL24 + MOVE CS,TABP + PUSHJ PP,OUTASC ;OUTPUT TABS +OUTL25: MOVEI CS,LBUF + PUSHJ PP,OUTAS0 ;DUMP THE LINE + TLNE IO,IOSALL ;SUPPRESSING ALL + JUMPN MRP,OUTL27 ;YES,EXTRA CR IF IN MACRO +OUTL26: SKIPGE STPX ;ANY BINARY? + JRST OUTLI ;NO, CLEAN UP AND EXIT + PUSHJ PP,OUTLI2 ;YES, INITIALIZE FOR NEXT LINE + PUSHJ PP,BOUT ;YES, DUMP IT +OUTL27: PUSHJ PP,OUTCR ;OUTPUT CARRIAGE RETURN + JRST OUTL26 ;TEST FOR MORE BINARY + +OUTPL: SKIPN LITLVL ;IF IN LITERAL + SKIPL STPX ;OR CODE GENERATED + JRST OUTIM ;JUST OUTPUT THE IMAGE + SKIPN ASGBLK ;SKIP IF AN ASSIGNMENT + JRST OUTIM ;OTHERWISE OUTPUT IMAGE + PUSH PP,C ;SAVE CHAR. + MOVEI C,CR + IDPB C,LBUFP + MOVEI C,LF + IDPB C,LBUFP ;FINISH WITH CRLF + PUSHJ PP,OUTLIN ;OUTPUT PARTIAL LINE + POP PP,C ;RESTORE CHAR. + JRST OUTLI2 ;INITIALISE REST OF LINE + OUTL30: AOS CS,STPX ;PASS ONE + ADDM CS,LOCO ;INCREMENT OUTPUT LOCATION + PUSHJ PP,STOWI ;INITIALIZE STOW + TLZ AC0,ERRORS-ERRM-ERRP-ERRV + JUMPN AC0,OUTL32 ;JUMP IF ERRORS + TLNE IO,IOSALL ;SUPPRESSING ALL/ + JUMPN MRP,CPOPJ ;YES,EXIT + JRST OUTLI1 ;NO,INIT LINE + +OUTL32: IDPB AC0,LBUFP ;ZERO TERNIMATOR + IOR ER,OUTSW ;LIST ERRORS + MOVEI CS,TAG + PUSHJ PP,OUTSIX ;OUTPUT TAG + HRRZ C,TAGINC + PUSHJ PP,DNC ;CONVERT INCREMENT TO DECIMAL + PUSHJ PP,OUTTAB ;OUTPUT TAB + PUSHJ PP,OUTLER ;OUTPUT ERROR FLAGS + PUSHJ PP,OUTTAB + MOVEI CS,SEQNO ;ADDRESS OF SEQUENCE NO. + SKIPE SEQNO ;FILE NOT SEQUENCED + PUSHJ PP,OUTAS0 ;OUTPUT IT + JRST OUTL25 ;OUTPUT BASIC LINE + +OUTLER: PUSH PP,ER ;SAVE LISTING SWITCHES FOR LATER + TRNE ER,TTYSW ;IF THIS IS ON, LISTING IS ON TTY + TRZ ER,ERRORS ;SO SUPPRESS ON TTY + TDZ ER,OUTSW ;BUT THIS SHOULD ONLY GO TO THE TTY + MOVE CS,INDIR ;GET FILE NAME + CAME CS,LSTFIL ;AND SEE IF SAME + JRST [MOVEM CS,LSTFIL ;SAVE AS LAST ONE + MOVEI CS,LSTFIL + PUSHJ PP,OUTSIX ;LIST NAME + MOVEI C," " + PUSHJ PP,OUTL + MOVE CS,PAGENO ;PRINT PAGE NUMBER TOO + JRST OUTLE8] + MOVE CS,PAGENO ;NOW CHECK PAGE NUMBER + CAME CS,LSTPGN +OUTLE8: JRST [MOVEM CS,LSTPGN + MOVEI CS,[ASCIZ /PAGE /] + PUSHJ PP,OUTAS0 + MOVE C,PAGENO + PUSHJ PP,DNC + PUSHJ PP,OUTCR ;AND NOW FOR THE ERROR LINE + JRST .+1] + HLLM ER,(PP) ;RESTORE ER BUT NOT IO (LEFT HALF OF AC) + POP PP,ER + MOVE CS,[POINT 7,[ASCII / QXADLRUVNOPEM/]] +OUTLE2: ILDB C,CS ;GET ERROR MNEMONIC + JUMPGE AC0,OUTLE4 ;BRANCH IF NOT FLAGGED + PUSHJ PP,OUTL ;OUTPUT THE CHARACTER + AOS ERRCNT ;INCREMENT ERROR COUNT +OUTLE4: LSH AC0,1 ;SHIFT NEXT FLAG INTO SIGN BIT + JUMPN AC0,OUTLE2 ;TEST FOR END + POPJ PP, ;EXIT + OUTIM1: TLOA FR,IOSCR ;SUPPRESS CRLF AFTER LINE +OUTIM: TLZ FR,IOSCR ;DON'T FOR PARTIAL LINE + TLNE IO,IOSALL ;SUPPRESSING ALL? + JUMPN MRP,CPOPJ ;YES ,EXIT IF IN MACRO + JUMP1 OUTLI1 ;BYPASS IF PASS ONE + PUSH PP,ER + TDZ ER,TYPERR + TLNN IO,IOMSTR!IOPROG!IOMAC + IOR ER,OUTSW + PUSH PP,C ;OUTPUT IMAGE + TLNN FR,CREFSW + PUSHJ PP,CLSCRF +OUTIM2: MOVE CS,TABP + PUSHJ PP,OUTASC ;OUTPUT TABS + IDPB C,LBUFP ;STORE ZERO TERMINATOR + MOVEI CS,LBUF + PUSHJ PP,OUTAS0 ;OUTPUT THE IMAGE + TLZN FR,IOSCR ;CRLF SUPPRESS? + PUSHJ PP,OUTCR ;NO,OUTPUT + POP PP,C + HLLM ER,0(PP) + POP PP,ER + JRST OUTLI2 + +OUTLI: TLNE IO,IOSALL ;SUPPRESSING ALL + JUMPN MRP,OUTLI3 ;YES,SET FLAG IN REPEATS ALSO + TLNE IO,IOPALL ;MACRO EXPANSION SUPRESS REQUESTED? + SKIPN MACLVL ;YES, ARE WE IN MACRO? + TLZA IO,IOMAC ;NO, CLEAR MAC FLAG +OUTLI3: TLO IO,IOMAC ;YES, SET FLAG + +OUTLI1: TRZ ER,ERRORS!LPTSW!TTYSW +OUTLI2: MOVE CS,[POINT 7,LBUF] ;INITIALIZE BUFFERS + MOVEM CS,LBUFP +IFN FORMSW,<MOVE CS,[POINT 7,TABI] + MOVSS HWFMT ;PUT FLAG IN LEFT HALF + SKIPGE HWFMT ;BUT IF ONLY HALF-WORD FORMAT> + MOVE CS,[POINT 7,TABI,6] + MOVEM CS,TABP + MOVEI CS,.CPL +IFN FORMSW,<SKIPL HWFMT ;IF MULTI-FORMAT + SUBI CS,8 ;LINE IS ONE TAB SHORTER + MOVSS HWFMT ;BACK AS IT WAS> + MOVEM CS,CPL + MOVSI CS,(ASCII / /) + SKIPE SEQNO ;HAVE WE SEQUENCE NUMBERS? + MOVEM CS,SEQNO ;YES, STORE TAB IN CASE OF MACRO + MOVEM CS,SEQNO+1 ;STORE TAB AND TERMINATOR + SETZM ASGBLK + SETZM LOCBLK + POPJ PP, + OUTIML: TLNE IO,IOSALL ;SUPPRESSING ALL? + JUMPN MRP,CPOPJ ;YES,EXIT IF IN MACRO + TRNN ER,ERRORS-ERRQ ;FOR LITERALS (MULIT-LINE) OUTPUT ERRORS + TLNE FR,ERRQSW + TRZ ER,ERRQ + HRLZ CS,ER + JUMP1 OUTML1 ;CHECK PASS1 ERRORS + TDZ ER,TYPERR + JUMPE CS,OUTIM1 + PUSH PP,[0] ;ERRORS SHOULD BE ZEROED + PUSH PP,C + PUSH PP,AC0 ;SAVE AC0 IN CASE CALLED FROM ASCII + MOVE AC0,CS ;ERROR ROUTINE WANTS FLAGS IN AC0 + IOR ER,OUTSW + TLNN FR,CREFSW + PUSHJ PP,CLSCRF ;FIX CREF + TLZE AC0,ERRM + TLO AC0,ERRP + PUSHJ PP,OUTLER ;OUTPUT THEM + POP PP,AC0 + JRST OUTIM2 ;AND LINE + +OUTML1: TLZ CS,ERRORS-ERRM-ERRP-ERRV + JUMPE CS,OUTLI2 ;NONE + TRZ ER,ERRM!ERRP!ERRV + TRO ER,ERRL + PUSH PP,ER ;SAVE + PUSH PP,C ;SAVE THIS + PUSH PP,AC0 ;AS ABOVE + MOVE AC0,CS ;... + TDZ ER,TYPERR + IOR ER,OUTSW + MOVEI CS,TAG + PUSHJ PP,OUTSIX + HRRZ C,TAGINC + PUSHJ PP,DNC + PUSHJ PP,OUTTAB + PUSHJ PP,OUTLER ;DO NOT FORGET ERRORS + PUSHJ PP,OUTTAB + MOVEI CS,LBUF ;PRINT REST OF LINE + PUSHJ PP,SOUT20 + POP PP,AC0 + POP PP,C + POP PP,ER + JRST OUTLI2 + SUBTTL OUTPUT ROUTINES +UOUT: PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + TRNN ARG,PNTF ;WFW + TRNN ARG,UNDF + JRST UOUT13 ;TEST FOR UNDF!EXTF!PNTF ON PASS2 + JUMP2 UOUT10 + TLNN IO,IOIOPF ;ANY IOP'S SEEN + JRST UOUT12 ;NO,MAKE EXTERNAL + MOVSI CS,PRMTBL-PRMEND;YES LOOKUP IN TABLE +UOUT1: CAME AC0,PRMTBL(CS) ;HAVE WE A MATCH? + AOBJN CS,UOUT2 ;NO,INCREMENT AND JUMP + MOVE ARG,PRMTBL+1(CS);YES,GET VALUE + MOVEM ARG,(SX) ;UPDATE SYMBOL TABLE + POPJ PP, ;EXIT +UOUT2: AOBJN CS,UOUT1 ;TEST FOR END + +UOUT12: PUSHJ PP,EXTER2 ;MAKE IT EXTERNAL + MOVSI ARG,UNDF ;BUT PUT UNDF BACK ON + IORM ARG,(SX) ;SO MESSAGE WILL COME OUT + POPJ PP, ;GET NEXT SYMBOL + +UOUT13: JUMP1 CPOPJ ;RECYCLE ON PASS1 + TRC ARG,UNDF!EXTF!PNTF ;CHECK FOR ALL THREE ON + TRCE ARG,UNDF!EXTF!PNTF ;ARE THEY? + POPJ PP, ;NO, RECYCLE +UOUT10: PUSHJ PP,OUTCR + PUSHJ PP,OUTSYM ;OUTPUT THE SYMBOL + MOVEI CS,[SIXBIT /UNASSIGNED, DEFINED AS IF EXTERNAL @/] + JRST OUTSIX ;POPJ FOR NEXT SYMBOL + +UOUT30: PUSHJ PP,ONC1 ;OUTPUT THE LOCATION + JRST HIGHQ ;EXIT THROUGH HIGHQ + ;OUTPUT THE ENTRIES + +EOUT: MOVEI C,0 ;INITIALIZE THE COUNT + MOVE SX,SYMBOL + MOVE SDEL,0(SX) +EOUT1: SOJL SDEL,EOUT2 ;TEST FOR END + ADDI SX,2 + HLRZ ARG,0(SX) + ANDCAI ARG,SYMF!INTF!ENTF + JUMPN ARG,EOUT1 ;IF INVALID, DON'T COUNT + AOJA C,EOUT1 ;BUMP COUNT + +EOUT2: HRLI C,4 ;BLOCK TYPE 4 + PUSHJ PP,OUTBIN + SETZB C,ARG + PUSHJ PP,OUTBIN + MOVE SX,SYMBOL + MOVE SDEL,0(SX) + MOVEI V,?D18 + +EOUT3: SOJL SDEL,POPOUT + ADDI SX,2 + HLRZ C,0(SX) + ANDCAI C,SYMF!INTF!ENTF + JUMPN C,EOUT3 + SOJGE V,EOUT4 ;TEST END OF BLOCK + PUSHJ PP,OUTBIN + MOVEI V,?D17 ;WFW +EOUT4: MOVE AC0,-1(SX) + PUSHJ PP,SQOZE + MOVE C,AC0 + PUSHJ PP,OUTBIN + JRST EOUT3 + ;OUTPUT THE SYMBOLS + +SOUT: SKIPN IONSYM ;SKIP IF NOSYM SEEN + TRNN ER,LPTSW!TTYSW ;A LISTING REQUIRED? + JRST SOUT1 ;NO + MOVEI [ASCIZ /SYMBOL TABLE/] + HRRM SUBTTX ;SET NEW SUB-TITLE + PUSHJ PP,OUTFF ;FORCE NEW PAGE + MOVEI ARG,NCOLS ;SET UP FOR NCOLS ACROSS SYMBOL TABLE + TRNE ER,TTYSW ;IS TTY LISTING DEVICE? + MOVEI ARG,2 ;YES,ONLY 2 COLLUMNS + MOVEM ARG,NCOLLS ;STORE ANSWER + MOVEM ARG,SYMCNT + PUSHJ PP,LOUT1 ;OUTPUT THEM + MOVE ARG,SYMCNT ;SEE IF WE ENDED EVEN + CAME ARG,NCOLLS + PUSHJ PP,OUTCR ;NO, NEED CR + JRST SOUT1 ;NOW FOR BLOCK TYPE 2 + +LOUT1: PUSHJ PP,LLUKUP ;SET FOR TABLE SCAN + TRNN ARG,SYMF + TRNN ARG,MACF!SYNF + TDZA MRP,MRP ;SKIP AND CLEAR MRP + POPJ PP, ;NO, TRY AGAIN + TRNE ARG,INTF + MOVEI MRP,1 + TRNE ARG,EXTF + MOVNI MRP,1 ;MRP=-1 FOR EXTERNAL + TRNE ARG,SYNF ;SYNONYM? + JUMPL MRP,POPOUT ;YES, DON'T OUTPUT IF EXTERNAL + TRNE ARG,SUPRBT ;IF SUPRESSED +; JUMPGE MRP,POPOUT ;DO NOT OUTPUT UNLESS EXTERNAL + POPJ PP, ;DO NOT OUTPUT + AOS (PP) ;SET FOR SKIP RETURN IF SYMBOL IS PRINTED + JUMPGE MRP,LOUT10 ;BRANCH IF NOT EXTERNAL + HLRZ RC,V ;PUT POINTER/FLAGS IN RC + TRNE RC,-2 ;POINTER? + MOVS RC,0(RC) ;YES + HLL V,RC ;STORE LEFT VALUE + +LOUT10: PUSH PP,RC ;SAVE FOR LATER + PUSHJ PP,OUTSYM ;OUTPUT THE NAME + MOVE RC,(PP) ;GET COPY + MOVEI AC1,0 + JUMPLE MRP,LOUT15 ;SET DEFFERRED BITS IF EXTERNAL + TLNE RC,-2 ;CHECK FOR LEFT FIXUP + IORI AC1,40 ;AND SET BITS + TRNE RC,-2 ;CHECK FOR RIGHT FIXUP + IORI AC1,20 ;AND SET BITS +LOUT15: TLNE RC,-2 ;FIX RELOC AS 0 IF EXTERNAL + HRRZS RC + TRNE RC,-2 + HLLZS RC + TLZE RC,-1 + TRO RC,2 + HRL MRP,RC + MOVEI RC,0 + TRNE ARG,ENTF ;ENTRY DMN + HRRI MRP,-5 + TRNE ARG,NOOUTF ;SUPRESS OUTPUT? WFW + ADDI MRP,3 ;YES WFW + TRNE ARG,UNDF ;UNDEFINED IS EXTERNAL + HRRI MRP,2 ;SO FLAG AS UXT + IOR AC1,SOUTC(MRP) + MOVE ARG,AC1 + MOVEM AC0,SVSYM ;SAVE IT + MOVE AC0,V ;GET THE VALUE + HLRZ RC,MRP ;AND THE RELOCATION + HLLO CS,V + TRNE RC,2 ;LEFT HALF RELOCATABLE? + TRZA CS,1 ;NO, FLAG AND PRINT + TLNE CS,-1 ;IS THE LEFT HALF ZERO? + PUSHJ PP,ONC1 ;NO, OUTPUT IT +LOUT11: PUSHJ PP,OUTTAB +LOUT30: HRLO CS,V + TDZ CS,RC ;SET RELOCATION + PUSHJ PP,ONC1 + PUSHJ PP,OUTTAB + POP PP,RC ;GET BACK RELOC AND CHECK EXTERNAL +LOUT60: MOVEI CS,SOUTC(MRP) + PUSHJ PP,OUTAS0 ;EXT/INT + SOSLE SYMCNT ;SEE IF WE HAVE RUN OUT + JRST OUTTAB ;NOT YET, PRINT ONE TAB +LOUT64: MOVE CS,NCOLLS ;YES, RESET + MOVEM CS,SYMCNT + JRST OUTCR ;CARRIAGE RETURN AND TRY FOR ANOTHER + + + SYN IFBLK,SYMBLK ;SOMEWHERE TO STORE THE POINTERS + +LLUKUP: POP PP,LOOKX ;INTERCEPT RETURN POP + MOVE SX,SYMBOL + MOVE SDEL,(SX) + ADDI SX,2 ;SKIP COUNT OF SYMBOLS +LLUKP2: HRLI SX,-<.LPP-1> ;LENGTH OF PAGE + MOVE V,ARG ;COPY OF ARG + MOVEM SX,SYMBLK(V) ;STORE SYMBOL POINTER IN TABLE + ADDI SX,2*<.LPP-2> ;SYMBOLS PER PAGE + SOJG V,.-2 ;FOR ALL COLUMNS + MOVE V,SYMCNT + HRRZ SX,SYMBLK(V) + CAMGE SX,SYMTOP + SOJG V,.-2 + ADDI V,1 + MOVEM V,SYMBLK + JRST LLUKP7 ;ENTER LOOP + +LLUKP1: MOVEM SX,SYMBLK(ARG) ;SAVE IT + MOVE AC0,-1(SX) + PUSHJ PP,SRCH7 + HLRZS ARG + PUSHJ PP,@LOOKX + JRST [MOVE ARG,SYMCNT + MOVEM SX,SYMBLK(ARG) + JRST .+1] +LLUKP7: SOJL SDEL,POPOUT ;TEST FOR END +LLUKP3: MOVE ARG,SYMCNT ;GET PAGE POSITION + MOVE SX,SYMBLK(ARG) ;GET NEXT POINTER + AOBJP SX,LLUKP4 + HRRZ V,SX + CAMG V,SYMTOP + AOJA SX,LLUKP1 +LLUKP6: PUSHJ PP,LOUT64 ;RESET SYMCNT + JUMPE SDEL,POPOUT ;EXIT IF ALL DONE + JRST LLUKP3 + +LLUKP4: AOJ SX, + MOVEM SX,SYMBLK(ARG) + MOVE V,NCOLLS + SKIPGE SYMBLK(V) ;TEST IF ALL FINISHED + JRST LLUKP5 ;NO + SOJG V,.-2 ;KEEP GOING + MOVE SX,SYMBLK + MOVE SX,SYMBLK(SX) + HLRZ V,SX ;GET NUMBER ADVANCED + LSH V,1 ;2 WORDS PER SYMBOL + SUBI SX,2(V) ;BACK UP ONE SYMBOL + SKIPGE LPP ;IF PAGE FULL + JRST .+3 ;DON'T FINISH WITH EXTRA CR-LF + SETZM LPP ;ENSURE END OF PAGE + PUSHJ PP,LOUT64 + MOVE ARG,NCOLLS + MOVEM ARG,SYMCNT ;JUST IN CASE + JRST LLUKP2 + +LLUKP5: SOSG SYMCNT ;ON LAST COL? + JRST LLUKP6 + SKIPGE LPP ;IF PAGE FULL + JRST LLUKP3 ;NO MORE OUTPUT +REPEAT 2,<PUSHJ PP,OUTAB2> ;NO, TAB OUT TO NEXT COLUMN + JRST LLUKP3 + SOUT1: PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + TRNN ARG,SYMF + TRNN ARG,MACF!SYNF + TDZA MRP,MRP ;SKIP AND CLEAR MRP + POPJ PP, ;NO, TRY AGAIN + TRNE ARG,INTF + MOVEI MRP,1 + TRNE ARG,EXTF + MOVNI MRP,1 ;MRP=-1 FOR EXTERNAL + TRNE ARG,SYNF ;SYNONYM? + JUMPL MRP,POPOUT ;YES, DON'T OUTPUT IF EXTERNAL + TRNE ARG,SUPRBT ;IF SUPRESSED +; JUMPGE MRP,POPOUT ;DO NOT OUTPUT UNLESS EXTERNAL + POPJ PP, ;DO NOT OUTPUT + JUMPGE MRP,SOUT10 ;BRANCH IF NOT EXTERNAL + HLRZ RC,V ;PUT POINTER/FLAGS IN RC + TRNE RC,-2 ;POINTER? + MOVS RC,0(RC) ;YES + HLL V,RC ;STORE LEFT VALUE + +SOUT10: PUSH PP,RC ;SAVE FOR LATER + MOVEI AC1,0 + JUMPLE MRP,SOUT15 ;SET DEFFERRED BITS IF EXTERNAL + TLNE RC,-2 ;CHECK FOR LEFT FIXUP + IORI AC1,40 ;AND SET BITS + TRNE RC,-2 ;CHECK FOR RIGHT FIXUP + IORI AC1,20 ;AND SET BITS +SOUT15: TLNE RC,-2 ;FIX RELOC AS 0 IF EXTERNAL + HRRZS RC + TRNE RC,-2 + HLLZS RC + TLZE RC,-1 + TRO RC,2 + HRL MRP,RC + MOVEI RC,0 + TRNE ARG,ENTF ;ENTRY DMN + HRRI MRP,-5 + TRNE ARG,NOOUTF ;SUPRESS OUTPUT? WFW + ADDI MRP,3 ;YES WFW + IOR AC1,SOUTC(MRP) + MOVE ARG,AC1 + PUSHJ PP,NOUT2 ;SQUOZE AND DUMP THE SYMBOL + MOVEM AC0,SVSYM ;SAVE IT + MOVE AC0,V ;GET THE VALUE + HLRZ RC,MRP ;AND THE RELOCATION + PUSHJ PP,COUT + POP PP,RC ;GET BACK RELOC AND CHECK EXTERNAL + TRNN RC,-2 ;IS IT? + JRST SOUT50 ;NO + MOVE AC0,1(RC) ;GET NAME + MOVEI ARG,60 ;EXTERNAL REQ + PUSHJ PP,SQOZE + HLLZS RC ;NO RELOC + PUSHJ PP,COUT ;OUTPUT IT + MOVE AC0,SVSYM ;GET SYMBOL NAME + TLO AC0,500000 ;SET AS ADDITIVE SYMBOL + TLZ AC0,200000 ;BUT NOT LEFT HALF ETC + PUSHJ PP,COUT +SOUT50: MOVSS RC ;CHECK LEFT HALF + TRNN RC,-2 + JRST SOUT60 + MOVE AC0,1(RC) + MOVEI ARG,60 + PUSHJ PP,SQOZE + MOVEI RC,0 + PUSHJ PP,COUT + MOVE AC0,SVSYM + TLO AC0,700000 + PUSHJ PP,COUT +SOUT60: POPJ PP, + +SOUT20: PUSHJ PP,OUTAS0 + JRST OUTCR + + <ASCII /ENT/>!04 ;DMN + Z + Z + <ASCII /SEN/>!44 ;SUPRESSED ENTRY + <ASCII /EXT/>!60 +SOUTC: EXP 10 + <ASCII /INT/>!04 + <ASCII /UXT/>!60 ;UNDEFINED EXTERNAL + <ASCII /SPD/>!50 + <ASCII /SIN/>!44 ;DMN + ;OUTPUT THE BINARY + +BOUT: HRLO CS,LOCO ;PICKUP THE LOCATION + PUSHJ PP,ONC ;OUTPUT IT TO THE LISTING FILE + MOVEI C,"'" + SKIPE MODO ;IF MODE IS NOT ABSOLUTE + PUSHJ PP,OUTC ;PRINT A SINGLE QUOTE + PUSHJ PP,DSTOW ;GET THE CODE + PUSH PP,RC ;SAVE RELOC + PUSH PP,RC ;AND AGAIN + TLNE RC,-2 ;CHECK LEFT EXTERNAL + HRRZS RC ;MAKE LEFT NON-RELOC + TRNN RC,-2 ;RIGHT EXT? + JRST BOUT30 ;NO + HRRZ AC1,AC0 ;YES + JUMPE AC1,BOUT20 ;PROCESS IF ZERO CODE THERE + HLLZS RC ;MAKE NON-RELOC + JRST BOUT30 ;PROCESS + + BOUT20: + HRRM AC1,-1(PP) ;FIX RC IN STACK SO NO CONFUSION WFW (AC1 HAS 0) + HRR AC0,0(RC) ;NO, SET ADDRESS LINK + MOVE AC1,LOCO ;GET CURRENT LOCATION + HRRM AC1,0(RC) ;SET NEW LINK + HLRZ AC1,0(RC) ;GET FLAGS/POINTER + TRNN AC1,-2 ;POINTER? + HRR AC1,RC ;NO, SET TO FLAGS + HLR RC,0(AC1) ;PUT FLAGS IN RC + HRL AC1,MODO ;GET CURRENT MODE + TRZE RC,-2 ;LEFT HALF RELOCATABLE+ + TLO AC1,2 ;YES, SET FLAG + HLLM AC1,0(AC1) ;STORE NEW FLAGS +BOUT30: HLLO CS,AC0 + TLZE RC,1 ;PACK RELOCATION BITS + TRO RC,2 + TRNE RC,2 ;LEFT HALF RELOCATABLE? + TRZ CS,1 ;YES, RESET BIT + PUSH PP,AC0 ;NEED AN AC + HLRZ AC0,-1(PP) ;AC0 = LEFT RELOCATION + CAILE AC0,1 ;EXTERNAL? + XORI CS,EXTF!1 ;YES, SET SWITCH + IFN FORMSW,< + OR AC0,HWFMT + JUMPN AC0,BOUT3H ;EDIT IN HALF WORD FORMAT IF NOT 0 + MOVE AC0,FORM ;GET FORM WORD + MOVEI C,0 ;ZERO FIELD SIZE +BOUT3A: JFFO AC0,BOUT3B ;AC1 = FIELD SIZE -1 + JRST BOUT3C ;NO FIELDS LEFT, JUMP +BOUT3B: LSH AC0,1(AC1) ;SHIFT OFF FORM FIELD + MOVEI AC1,6(AC1) + IDIVI AC1,3 ;AC1 = COLUMNS USED + 1 + ADDI C,(AC1) ;INCREMENT FIELD SIZE + CAIG C,?D23 ;IS FIELD SIZE GTR 23? + JRST BOUT3A ;NO. CONTINUE + MOVE AC1,HWFORM ;USE STANDARD FORM + MOVEM AC1,FORM + MOVEI C,?D13 ;SET FIELD SIZE TO 13 +BOUT3C: MOVEM C,FLDSIZ ;STORE FIELD SIZE + MOVE AC0,FORM ;AC0 = FORM WORD + TRNN RC,2 ;IS LEFT HALF RELOCATED? + CAMN AC0,HWFORM ;NO. IS FORM HALF WORD? + JRST BOUT3H ;YES. EDIT IN OLD WAY + CAMN AC0,IOFORM ;IS IT I/O WORD + SETOM IOSEEN ;YES,NEED MORE WORK + IBP TABP + CAIL C,?D16 + IBP TABP + ILDB C,TABP ;GET A TAB + PUSHJ PP,OUTL ;OUTPUT IT + MOVE AC2,(PP) ;AC2 = INFO TO BE EDITED + PUSH PP,CS ;SAVE CS = C+1 +BOUT3D: JFFO AC0,BOUT3E ;AC1 = FIELD LENGTH - 1 +BOUT3E: LSH AC0,1(AC1) ;SHIFT OFF FORM FIELD + MOVEI C,3(AC1) + MOVEI AC1,0 + LSHC AC1,-2(C) ;AC1 = FIELD INFO + IDIVI C,3 ;C = # OF OCTAL DIGITS + MOVE C+1,AC0 ;SAVE AC0 + SKIPE IOSEEN ;IS THIS A I/O INST. + PUSHJ PP,BOUT3J ;YES,SET FIELDS CORRECTLY + MOVNS C + ROT AC1,(C) + ROT AC1,(C) + ROT AC1,(C) + MOVNS C + BOUT3F: MOVEI AC0,6 ;EDIT A DIGIT + LSHC AC0,3 + EXCH AC0,C + PUSHJ PP,OUTC ;OUTPUT IT + MOVE C,AC0 + SOJG C,BOUT3F ;IF MORE DIGITS, GO BACK + JUMPE C+1,BOUT3G ;JUMP IF END OF WORD + MOVE AC0,C+1 ;RESTORE AC0 + MOVEI C," " + PUSHJ PP,OUTC ;OUTPUT A SPACE + JRST BOUT3D ;PROCESS NEXT FIELD + +BOUT3G: POP PP,CS ;RESTORE CS = C+1 + MOVEI C,0 + TRNE RC,1 ;RELOCATABLE? + MOVEI C,"'" ;YES + HRRZ AC0,-1(PP) ;AC0 = RIGHT RELOCATION + CAILE AC0,1 ;EXTERNAL? + MOVEI C,"*" ;YES + PUSHJ PP,ONC2 ;STORE POSSIBLE INDICATOR + POP PP,AC0 + JRST BOUT3I ;CONTINUE + +BOUT3H: MOVEI C,?D15 ;SET SIZE TO 15 + MOVEM C,FLDSIZ +> + POP PP,AC0 ;RESTORE + PUSHJ PP,ONC + HRLO CS,AC0 + TDZ CS,RC ;SET RELOCATION + HRRZ C,(PP) ;C = RIGHT RELOCATION + CAILE C,1 ;EXTERNAL + XORI CS,EXTF!1 ;YES, SET SWITCH + PUSHJ PP,ONC +BOUT3I: POP PP,CS ;GET RID OF ENTRY ON STACK + HRRZ CS,LOCO + TLNE FR,RIMSW!RIM1SW!R1BSW ;RIM OUTPUT? + JRST ROUT ;YES, GO PROCESS + + HRL CS,MODO + CAME CS,MODLOC ;SEQUENCE OR RELOCATION BREAK? + PUSHJ PP,COUTD ;YES, DUMP THE BUFFER + SKIPL COUTX ;NEW BUFFER? + JRST BOUT40 ;NO, STORE CODE AND EXIT + MOVEM CS,MODLOC ;YES, STORE NEW VALUES + EXCH AC0,LOCO + EXCH RC,MODO + PUSHJ PP,COUT ;STORE BLOCK LOCATION AND MODE + EXCH RC,MODO ;RESTORE CURRENT VALUES + EXCH AC0,LOCO + + BOUT40: PUSHJ PP,COUT ;EMIT CODE + POP PP,RC ;RETRIEVE EXTERNAL BITS + TRNN RC,-2 ;RIGHT EXTERNAL? + JRST BOUT50 ;TRY FOR LEFT + PUSHJ PP,COUTD + PUSH PP,BLKTYP ;TERMINATE TYPE AND SAVE + MOVEI AC0,2 ;BLOCK TYPE 2 + MOVEM AC0,BLKTYP + MOVE AC0,1(RC) ;GET SYMBOL + MOVEI ARG,60 ;CODE BITS + PUSHJ PP,SQOZE ;CONVERT TO RADIX 50 + HLLZS RC ;SYMBOL HAS NO RELOCATION + PUSHJ PP,COUT ;EMIT + MOVE AC0,LOCO ;GET CURRENT LOC + HRLI AC0,400000 ;ADDITIVE REQ + HRR RC,MODO ;CURRENT MODE + PUSHJ PP,COUT ;EMIT + MOVSS RC ;NOW FOR LEFT + TRNN RC,-2 + JRST BOUT60 + JRST BOUT70 +BOUT50: MOVSS RC ;CHECK OTHER HALF + TRNN RC,-2 ;LEFT HALF EXTERNAL? + JRST BOUT80 ;NO, FALSE ALARM + PUSHJ PP,COUTD ;CHANGE MODE + PUSH PP,BLKTYP + MOVEI AC0,2 + MOVEM AC0,BLKTYP +BOUT70: MOVE AC0,1(RC) + MOVEI ARG,60 + PUSHJ PP,SQOZE + HLLZS RC + PUSHJ PP,COUT + MOVE AC0,LOCO + HRLI AC0,600000 ;LEFT HALF ADD + HRR RC,MODO + PUSHJ PP,COUT ;EMIT +BOUT60: PUSHJ PP,COUTD ;CHANGE MODE + POP PP,BLKTYP ;TO OLD ONE +BOUT80: AOS LOCO + AOS MODLOC + POPJ PP, + IFN FORMSW,< +BOUT3J: MOVSS IOSEEN ;SWAP + SKIPGE IOSEEN ;SKIP IF NOT FIRST FIELD + JRST [HLLZS IOSEEN ;CLEAR RIGHT HALF + POPJ PP,] ;AND RETURN + MOVSS IOSEEN ;SWAP BACK + LSH AC1,2 ;CORRECT MNEMONIC AND OP CODE + CAIE C,1 ;IS IT OP CODE? + POPJ PP, ;NO,JUST RETURN + MOVEI C,2 ;TWO CHAR. WIDE NOW + SETZM IOSEEN ;DON'T COME AGAIN + POPJ PP, ;RETURN +> + NOUT: MOVE V,[POINT 7,TBUF] ;POINTER TO ASCII LINE + MOVSI CS,(POINT 6,AC0) ;POINTER TO SIXBIT AC0 + SETZB ARG,AC0 +NOUT1: ILDB C,V ;GET ASCII + CAIL C,"A"+40 + CAILE C,"Z"+40 + JRST .+2 + TRZA C,100 ;LOWER CASE TO SIXBIT + SUBI C,40 ;CONVERT TO SIXBIT + JUMPLE C,NOUT3 ;TEST FORM NON-SIXBIT + CAILE C,77 ;AND NOT GREATER THAN SIXBIT + JRST NOUT3 ;... + IDPB C,CS ;DEPOSIT IN AC0 + TLNE CS,770000 ;TEST FOR SIX CHARACTERS + JRST NOUT1 ;NO, GET ANOTHER +NOUT3: SKIPGE UNIVSN ;IF A UNIVERSAL PROG + POPJ PP, ;RETURN TO PUT IT IN THE TABLE + + +NOUT2: PUSHJ PP,SQOZE ;CONVERT TO SIXBIT + JRST COUT ;DUMP AND EXIT + +HOUT: + MOVEI RC,1 ;RELOCATABLE + MOVE AC0,HIGH + PUSHJ PP,COUT ;OUTPUT THE HIGHEST LOCATION + MOVE AC0,ABSHI + ;PUT OUT ABS PORTION OF PROGRAM BREAK + SOJA RC,COUT ;OUTPUT A WORD OF ZERO AND EXIT + +VOUT: SKIPN RC,VECREL ;IS VECTOR ABSOLUTE ZERO? + SKIPE VECTOR ;ALSO CHECK RELOCATION + JRST .+2 + POPJ PP, ;YES, EXIT + MOVE AC0,VECTOR ;AC0 SHOULD BE FLAGS + +COUT: AOS C,COUTX ;INCREMENT INDEX + MOVEM AC0,COUTDB(C) ;STORE CODE + IDPB RC,COUTP ;STORE RELOCATION BITS + CAIE C,?D17 ;IS THE BUFFER FULL? + POPJ PP, ;NO, EXIT + +COUTD: AOSG C,COUTX ;DUMP THE BUFFER + JRST COUTI ;BUFFER WAS EMPTY + HRL C,BLKTYP ;SET BLOCK TYPE + PUSHJ PP,OUTBIN ;OUTPUT COUNT AND TYPE + SETOB C,COUTY ;INITIALIZE INDEX + +COUTD2: MOVE C,COUTDB(C) ;GET RELOCATION BITS/CODE + PUSHJ PP,OUTBIN ;DUMP IT + AOS C,COUTY ;INCREMENT INDEX + CAMGE C,COUTX ;TEST FOR END + JRST COUTD2 ;NO, GET NEXT WORD + +COUTI: SETOM COUTX ;INITIALIZE BUFFER INDEX + SETZM COUTRB ;ZERO RELOCATION BITS + MOVE C,[POINT 2,COUTRB] + MOVEM C,COUTP ;INITIALIZE BIT POINTER + POPJ PP, ;EXIT + STOWZ1: +IFN FORMSW,< MOVE AC1,HWFORM ;USE STANDARD FORM> +STOWZ: MOVEI RC,0 +STOW: +IFN FORMSW,< MOVEM AC1,FORM ;STORE FORM WORD> + JUMP1 STOW20 ;SKIP TEST IF PASS ONE + TRNE RC,-2 ;RIGHT HALF ZERO OR 1? + PUSHJ PP,STOWT ;NO, HANDLE EXTERNAL + TLNN RC,-2 ;LEFT HALF ZERO OR 1? WFW + JRST STOW10 ;YES, SKIP TEST + MOVSS RC ;SWAP HALVES + PUSHJ PP,STOWT1 ;HANDLE EXTERNAL WFW + MOVSS RC ;RESTORE VALUES + +STOW10: SKIPE EXTPNT ;ANY EXTERNALS REMAINING? + TRO ER,ERRE ;YES, SET EXTERNAL ERROR FLAG + +STOW20: AOS AC1,STPX ;INCREMENT POINTER + MOVEM AC0,STCODE(AC1) ;STOW CODE + MOVEM RC,STOWRC(AC1) ;STOW RELOCATION BITS +IFN FORMSW,< + PUSH PP,FORM + POP PP,STFORM(AC1) ;STORE FORM WORD +> + SKIPN LITLVL ;ARE WE IN LITERAL? + AOS LOCA ;NO, INCREMENT ASSEMBLY LOCATION + CAIGE AC1,.STP-1 ;OVERFLOW? + POPJ PP, ;NO, EXIT + + SKIPE LITLVL ;ARE WE IN A LITERAL? + TROA ER,ERRL ;YES, FLAG ERROR BUT DON'T DUMP + JRST CHARL1 ;NO, SAVE REGISTERS AND DUMP THE BUFFER + JRST STOWI ;INITIALIZE BUFFER + +DSTOW: AOS AC1,STPY ;INCREMENT POINTER + MOVE AC0,STCODE(AC1) ;FETCH CODE + MOVE RC,STOWRC(AC1) ;FETCH RELOCATION BITS +IFN FORMSW,< + PUSH PP,STFORM(AC1) + POP PP,FORM ;GET FORM WORD +> + CAMGE AC1,STPX ;IS THIS THE END? + POPJ PP, ;NO, EXIT + +STOWI: SETOM STPX ;INITIALIZE FOR INPUT + SETOM STPY ;INITIALIZE FOR OUTPUT + SETZM EXTPNT + POPJ PP, ;EXIT + SVSTOW: AOS LITLVL ;NESTED LITERALS + PUSH PP,STPX ;MAKE ROOM FOR ANOTHER + PUSH PP,STPY + MOVE AC1,STPX + MOVEM AC1,STPY + JRST 0(AC2) + +GTSTOW: POP PP,STPY ;BACK UP A LEVEL + POP PP,STPX + SOS LITLVL + JRST 0(AC2) + + ;EXTERNAL RIGHT +STOWT: HRRZ AC1,EXTPNT ;GET RIGHT POINTER + CAIE AC1,(RC) ;DOES IT MATCH + PUSHJ PP,QEXT ;EXTERNAL OR RELOCATION ERROR + HLLZS EXTPNT + POPJ PP, ;EXIT + + ;EXTERNAL LEFT +STOWT1: HLRZ AC1,EXTPNT ;GET LEFT HALF + CAIE AC1,(RC) ;SEE ABOVE + PUSHJ PP,QEXT + HRRZS EXTPNT + POPJ PP, ;EXIT + ONC: ILDB C,TABP ;ENTRY TO ADVANCE TAB POINTER + PUSHJ PP,OUTL ;OUTPUT A TAB + ;OUTPUT 6 OCT NUMBERS FROM CS LEFT +ONC1: MOVEI C,6 ;CONVERT TO ASCII + LSHC C,3 ;SHIFT IN OCTAL + PUSHJ PP,OUTL ;OUTPUT ASCII FROM C + TRNE CS,-1 ;ARE WE THROUGH? + JRST ONC1 ;NO, GET ANOTHER + MOVEI C,0 ;CLEAR C + TLNN CS,1 ;RELOCATABLE? + MOVEI C,"'" ;YES + TLNN CS,EXTF ;OR EXTERNAL + MOVEI C,"*" ;YES +ONC2: JUMPN C,OUTC ;OUTPUT IF EXTERN OR RELOCATABLE +IFN FORMSW,< SOS FLDSIZ ;DECREMENT FIELD SIZE> + POPJ PP, ;EXIT + +DNC: IDIVI C,?D10 + HRLM CS,0(PP) + JUMPE C,.+2 + PUSHJ PP,DNC ;RECURSE IF NON-ZERO + HLRZ C,0(PP) + ADDI C,"0" ;FORM ASCII + JRST PRINT ;DUMP AND TEST FOR END + +OUTAS0: HRLI CS,(POINT 7,,) ;ENTRY TO SET POINTER +OUTASC: ILDB C,CS ;GET NEXT BYTE + JUMPE C,POPOUT ;EXIT ON ZERO DELIMITER + PUSHJ PP,PRINT + JRST OUTASC + +OUTSIX: HRLI CS,(POINT 6,,) ;OUTPUT SIXBIT + ILDB C,CS ;GET SIXBIT + CAIN C,40 ;"@" DELIMITER? + POPJ PP, ;YES, EXIT + ADDI C,40 ;NO, FORM ASCII + PUSHJ PP,OUTL ;OUTPUT ASCII CHAR FROM C + JRST OUTSIX+1 + +OUTSYM: MOVE CS,AC0 ;PLACE NAME IN CS +OUTSY1: MOVEI C,0 ;CLEAR C + LSHC C,6 ;MOVE NEXT SIXBIT CHARACTER IN + JUMPE C,OUTTAB ;TEST FOR END + ADDI C,40 ;CONVERT TO ASCII + PUSHJ PP,OUTL ;OUTPUT + JRST OUTSY1 ;LOOP + OUTSET: AOS SX,0(PP) ;GET RETURN LOCATION + MOVE SX,-1(SX) ;GET XWD CODE + HLRM SX,BLKTYP ;SET BLOCK TYPE + SETZB ARG,RC + PUSHJ PP,0(SX) ;GO TO PRESCRIBED ROUTINE + JRST COUTD ;TERMINATE BLOCK AND EXIT + + ;LOOKUP SCANS ALL THE SYMBOLS IN THE SYMBOL TABLE + +LOOKUP: POP PP,LOOKX ;INTERCEPT RETURN POP + MOVE SX,SYMBOL + MOVE SDEL,0(SX) ;SET FOR TABLE SCAN +LOOKL: SOJL SDEL,POPOUT ;TEST FOR END + ADDI SX,2 + MOVE AC0,-1(SX) + PUSHJ PP,SRCH7 ;LOAD REGISTERS + HLRZS ARG + PUSHJ PP,@LOOKX ;RETURN TO CALLING ROUTINE + JRST LOOKL ;TRY AGAIN + END0: PUSHJ PP,EVALCM ;GET A WORD + SKIPE EXTPNT ;ANY EXTERNALS? + TRO ER,ERRE ;YES, ERROR + SKIPN V,AC0 ;NON-ZERO? + JUMPE RC,.+2 ;OR RELOC? + PUSHJ PP,ASSIG7 ;YES, LIST THE VALUE + MOVEM AC0,VECTOR + MOVEM RC,VECREL + PUSHJ PP,VARA ;FILL OUT SELF-DEFINED VARIABLES + PUSHJ PP,STOUTS ;DUMP THE LINE + PUSH PP,IO ;SAVE FLAGS + TLO IO,IOPROG ;XLIST LITS + PUSHJ PP,LIT1 + POP PP,IO ;GET FLAG BACK + JUMP2 ENDP2 + + PUSHJ PP,UOUT + TLNN IO,MFLSW ;SKIP IF ONLY PSEND + PUSHJ PP,REC2 + MOVE INDIR ;SET UP FIRST AS LAST + MOVEM LSTFIL ;PRINTED + SETZM LSTPGN + PUSHJ PP,INZ + TLNE IO,MFLSW ;IF PSEND + POPJ PP, ;BACK TO PSEND0 + SKIPE PRGPTR ;HAVE ANY PRGEND'S BEEN SEEN + JRST PSEND3 ;YES,GO SET UP AGAIN + +PASS20: SETZM CTLSAV + PUSHJ PP,COUTI + PUSHJ PP,EOUT ;OUTPUT THE ENTRIES + PUSHJ PP,OUTSET + XWD 6,NOUT ;OUTPUT THE NAME (BLKTYP-6) + MOVEI 1 + HRRM BLKTYP ;SET FOR TYPE 1 BLOCK + TLZ FR,P1 ;SET FOR PASS 2 AND TURN OFF FLAG + TLO IO,IOPALL ;PUT THESE BACK + TLZ IO,IOPROG!IOCREF!DEFCRS ;SO LISTINGS WILL BE THE WAY THEY SHOULD + TLNN FR,R1BSW + JRST STOWI + + MOVE CS,[XWD $ST-1-$CKSM,R1BLDR] + MOVE C,0(CS) + PUSHJ PP,PTPBIN + AOBJN CS,.-2 + PUSHJ PP,R1BI + JRST STOWI + +R1BLDR: + PHASE 0 + IOWD $ADR,$ST +$ST: CONO PTR,60 + HRRI $A,$RD+1 +$RD: CONSO PTR,10 + JRST .-1 + DATAI PTR,@$TBL1-$RD+1($A) + XCT $TBL1-$RD+1($A) + XCT $TBL2-$RD+1($A) +$A: SOJA $A, +$TBL1: CAME $CKSM,$ADR + ADD $CKSM,1($ADR) + SKIPL $CKSM,$ADR +$TBL2: JRST 4,$ST + AOBJN $ADR,$RD +$ADR: JRST $ST+1 +$CKSM: + DEPHASE + +IF2,< PURGE $ST,$RD,$A,$TBL1,$TBL2,$ADR,$CKSM> + ENDP2: PUSHJ PP,COUTD ;DUMP THE BUFFER + MOVE AC0,LOCO ;CHECK TO SEE IF LIT DIFFERED + SKIPN MODO ;AND USE SMALLER SINCE AT END + JRST [CAMN AC0,ABSHI + HRRZM AC2,ABSHI + JRST ENDP2W] + CAMN AC0,HIGH + HRRZM AC2,HIGH +ENDP2W: +REPEAT 1,<TLNE IO,IOCREF ;CLOSE CREF IF NECESSARY> +REPEAT 0,<TLNE FR,CREFSW ;IF CREFFING + JRST ENDP2Q + MOVEI SDEL,0 + PUSH PP,DBUF+3 ;SO NO PAGE INFO + DPB SDEL,[POINT 7,DBUF+3,13] + IOR ER,OUTSW ;MAKE SURE OF OUTPUT + PUSHJ PP,CREF + MOVEI C,20 ;CODE FOR TITLE + PUSHJ PP,OUTLST + PUSH PP,IO ;SAVE THIS + TLZ IO,IOPAGE ;AND PREVENT PAGE DURING TITLE + MOVEI CS,TBUF + PUSHJ PP,OUTAS0 + MOVEI CS,VBUF + PUSHJ PP,OUTAS0 + POP PP,IO ;RESTORE THE IO WORD + POP PP,DBUF+3 > ;NEEDS FIX TO CREF + PUSHJ PP,CLSCR2 ;CLOSE IT UP +ENDP2Q: HRR ER,OUTSW ;SET OUTPUT SWITCH + SKIPN TYPERR + TRO ER,TTYSW + PUSHJ PP,UOUT ;OUTPUT UNDEFINEDS + TRO ER,TTYSW + SKPINC C ;SEE IF WE CAN INPUT A CHAR. + JFCL ;BUT ONLY TO DEFEAT ?O + SKIPG C,ERRCNT ;GET ERROR COUNT AND CHECK FOR POSITIVE + JRST NOERW ;PRINT NO ERROR MESSAGE + PUSHJ PP,OUTCR + MOVE C,ERRCNT + CAIN C,1 ;1 IS A SPECIAL CASE + JRST ONERW ;PRINT MESSAGE + MOVEI C,"?" ;? FOR BATCH + PUSHJ PP,OUTL ;... + MOVE C,ERRCNT ;PRINT NUMBER OF ERRORS + PUSHJ PP,DNC + SKIPA CS,[EXP ERRMS1] ;LOAD TO PRINT +ONERW: MOVEI CS,ERRMS2 ;ONE ERROR DETECTED +ONERW1: PUSHJ PP,OUTSIX ;PRINT + JRST ENDP2A +NOERW: MOVEI CS,ERRMS3 + TLNE IO,MFLSW ;NOR IF MULTI-FILE MODE + TRZ ER,TTYSW ;NO TTY OUTPUT + IOR ER,OUTSW ;UNLESS NEEDED FOR LISTING + PUSHJ PP,OUTCR + JRST ONERW1 + + ENDP2A: PUSHJ PP,OUTCR + TLNN IO,MFLSW ;IN A MULTI-PROG FILE? + JRST ENDP2D ;NO + SKIPE ERRCNT ;ANY ERROR? + PUSHJ PP,[MOVEI CS,[ASCIZ /PROGRAM /] + PUSHJ PP,OUTAS0 ;YES,SO PRINT MESSAGE + MOVEI CS,TBUF ;AND TITLE + PUSHJ PP,OUTAS0 ;FOR IDENTIFICATION + JRST OUTCR] ;AND A CR-LF + TRZA ER,TTYSW ;NO MORE OUTPUT NOW +ENDP2D: + SKIPA ;SO PRGEND CODE CAN WORK + IOR ER,OUTSW ;... + PUSHJ PP,OUTCR + MOVEI CS,[SIXBIT /PROGRAM BREAK IS @/] + PUSHJ PP,OUTSIX ;OUTPUT PROGRAM BREAK + HRRZ CS,ABSHI ;GET ABS. BREAK + CAIG CS,140 ;ANY ABS. CODE + JRST [HRLO CS,HIGH ;NO + JRST ENDP2B] ;SO DON'T PRINT + HRLO CS,HIGH ;GET PROGRAM BREAK + PUSHJ PP,ONC1 + PUSHJ PP,OUTCR + MOVEI CS,[SIXBIT /ABSLUTE BREAK IS @/] + PUSHJ PP,OUTSIX + HRLO CS,ABSHI +ENDP2B: PUSHJ PP,ONC1 + PUSHJ PP,OUTCR + TLNE FR,RIMSW!R1BSW ;RIM MODE? + PUSHJ PP,RIMFIN ;YES, FINISH IT + TLNN IO,MFLSW ;NOR IF IN MULTI-FILE MODE + TRO ER,TTYSW ;PRINT SIZE + PUSHJ PP,OUTCR + MOVE C,JOBREL + LSH C,-?D10 + ADDI C,1 + PUSHJ PP,DNC + MOVEI CS,[SIXBIT /K CORE USED@/] + PUSHJ PP,OUTSIX + PUSHJ PP,OUTCR + HRR ER,OUTSW + PUSHJ PP,OUTSET + XWD 2,SOUT ;OUTPUT THE SYMBOLS (BLKTYP-2) + PUSHJ PP,OUTSET + XWD 7,VOUT ;OUTPUT TRANSFER VECTOR (..-7) + PUSHJ PP,OUTSET + XWD 5,HOUT ;OUTPUT HIGHEST RELOCATABLE (..-5) + PUSHJ PP,COUTD + TLNN IO,MFLSW ;IS IT PRGEND? + JRST FINIS ;ALAS, FINISHED + MOVEI CS,SBUF ;RESET SBUF POINTER + HRRM CS,SUBTTX ;TO SUBTTL + SETZM PASS2I ;CLEAR PASS2 VARIABLES + MOVE [XWD PASS2I,PASS2I+1] + BLT PASS2Z-1 ;BUT NOT ALL OF VARIABLES + JRST INZ ;RE-INITIALIZE FOR NEXT PROG + +RIMFIN: TLNE FR,R1BSW + PUSHJ PP,R1BDMP + SKIPN C,VECTOR + MOVSI C,(JRST 4,) + TLNN C,777000 + TLO C,(JRST) + PUSHJ PP,PTPBIN + MOVEI C,0 + JRST PTPBIN + SUBTTL PASS INITIALIZE +INZ: AOS MODA + AOS MODO + SETZM SEQNO + SETZM TAG + HRRI RX,?D8 + MOVEI VARHD + MOVEM VARHDX + MOVEI LITHD + MOVEM LITHDX + PUSHJ PP,LITI + PUSHJ PP,STOWI +IFN FORMSW,< + HRRES HWFMT ;SET DEFAULT VALUE BACK> + JRST OUTLI + +RCPNTR: POINT 1,ARG,?L<RELF>-18 ;POINT 1,ARG,22 + SUBTTL PSEUDO-OP HANDLERS + +TAPE0: PUSHJ PP,STOUTS ;FINISH THIS LINE + JRST GOTEND ;AND IGNORE THE REST OF THIS FILE + +RADIX0: PUSHJ PP,EVAL10 ;EVALUATE RADIX D10 + CAIG AC0,?D10 ;IF GREATER THAN 10 + CAIG AC0,1 ;OR LESS THAN 2, +ERRAX: TROA ER,ERRA ;FLAG ERROR AND SKIP + HRR RX,AC0 ;SET NEW RADIX + POPJ PP, + + +XALL0: TLZ IO,IOSALL ;TURN OFF MACRO SUPPRESS ALL +IOSET: JUMP1 POPOUT ;NOSYM (IONSYM), XALL (IOPALL), XLIST (IOPROG) + HLRZ SX,AC0 ;STORE FLAGS + PUSHJ PP,STOUTS ;POLISH OFF LINE + TLO IO,0(SX) ;NOW SUPRESS PRINTING + POPJ PP, + +IORSET: TDZ IO,AC0 ;RESET FLAG IOPALL/IOPROG + TLNE AC0,IONCRF ;RESTORING CREFFING? + TLZ IO,DEFCRS ;YES, CLEAR ANY WAITING DEFINING OCCURENCES + POPJ PP, + +BLOCK0: PUSHJ PP,HIGHQ + PUSHJ PP,EVALEX ;EVALUATE + TRZE RC,-1 ;EXTERNAL OR RELOCATABLE? + PUSHJ PP,QEXT ;YES, DETERMINE TYPE + ADDM AC0,LOCO ;UPDATE ASSEMBLY LOCATION +BLOCK1: EXCH AC0,LOCA ;SAVE START OF BLOCK + ADDM AC0,LOCA ;UPDATE OUTPUT LOCATION +BLOCK2: HRLOM AC0,LOCBLK + JUMP2 POPOUT + TRNE ER,ERRU + TRO ER,ERRV + POPJ PP, + +PRNTX0: TRO ER,TTYSW ;SET OUTPUT TO TTY + JUMP2 PRNTX2 ;PASS1? + TDOA ER,OUTSW ;YES,OUTPUT TO LSTDEV ALSO +PRNTX2: ANDCM ER,OUTSW ;NO,DON'T OUTPUT TO TTY IF IT IS LSTDEV + PUSHJ PP,BYPASS ;GET FIRST CHAR. + TLOA IO,IORPTC ;REPEAT IT AND SKIP +PRNTX4: PUSHJ PP,PRINT ;PRINT THE CHAR. + PUSHJ PP,CHARAC ;GET ASCII CHAR. + CAIG C,CR ;IF GREATER THAN CR + CAIG C,HT ;OR LESS THAN LF + JRST PRNTX4 ;THEN CONTINUE + PUSHJ PP,OUTCR ;OUTPUT A CRLF + TRZA ER,TTYSW!LPTSW ;TURN OF OUTPUT +CPOPJ1: AOS (PP) ;USEFUL TAG HAS TO GO SOMEWHERE +CPOPJ: POPJ PP, ;EXIT + +REMAR0: PUSHJ PP,GETCHR ;GET A CHARACTER + CAIE C,EOL + JRST REMAR0 + POPJ PP, ;EXIT + LIT0: PUSHJ PP,BLOCK1 + PUSHJ PP,STOUTS +LIT1: JUMP2 LIT20 + +;ON PASS ONE, WE JUST STEP THE LOCATION COUNTER AND CLEAR + + MOVE AC0,LITCNT + MOVE SX,LITHDX + HRLM AC0,0(SX) + MOVE V,LOCA + HRL V,MODA + MOVEM V,-1(SX) + JRST LIT24 + +LIT20: PUSH PP,LOCA + PUSH PP,LOCO + SKIPN LITNUM + JRST LIT20A + MOVE SX,LITHDX + HRRZ AC0,-1(SX) + CAME AC0,LOCA + TRO ER,ERRP +LIT20A: MOVE SX,LITAB +LIT21: SOSGE LITNUM + JRST LIT22 +IFN FORMSW,< + MOVE AC0,-3(SX) + MOVEM AC0,FORM +> + MOVE AC0,-2(SX) ;WFW + MOVE RC,-1(SX) ;WFW + MOVE SX,(SX) ;WFW POINTER TO THE NEXT LIT + PUSHJ PP,STOW20 ;STOW CODE + MOVEI C,12 ;SET LINE FEED + IDPB C,LBUFP + PUSHJ PP,OUTLIN ;OUTPUT THE LINE + JRST LIT21 + LIT22: HRRZ AC2,LOCO + POP PP,LOCO + POP PP,LOCA + MOVE SX,LITHDX + HLRZ AC0,0(SX) + SUB AC2,LOCO ;COMPUTE LENGTH USED + CAMGE AC0,AC2 ;USE LARGER + MOVE AC0,AC2 + ADD AC2,LOCO +LIT24: ADDM AC0,LOCA + ADDM AC0,LOCO + PUSHJ PP,GETTOP + HRRM SX,LITHDX +LITI: SETZM LITCNT + SETZM LITNUM + MOVEI LITAB + MOVEM LITABX + JRST HIGHQ + +GETTOP: HRRZ AC1,SX ;VARHD + HRRZ SX,0(SX) + JUMPN SX,POPOUT +IFE FORMSW,< MOVEI SX,3 ;WFW> +IFN FORMSW,< MOVEI SX,4 ;ICC> + ADDB SX,FREE + CAML SX,SYMBOL + PUSHJ PP,XCEED + SUBI SX,1 ;MAKE SX POINT TO LINK + SETZM 0(SX) ;CLEAR FORWARD LINK + HRRM SX,0(AC1) ;STORE ADDRESS IN LAST LINK + POPJ PP, + VAR0: PUSHJ PP,BLOCK1 ;PRINT LOCATION + PUSHJ PP,VARA + JRST STOUTS + +VARA: MOVE SX,VARHDX + MOVE AC0,LOCA ;GET LOCATION FOR CHECK + JUMP1 VARB ;DO NOT CHECK START ON PASS 1 + CAME AC0,-1(SX) ;CHECK START OF VAR AREA + TRO ER,ERRP ;AND GIVE ERROR +VARB: MOVEM AC0,-1(SX) ;SAVE START FOR PASS 2 + HLRZ AC0,0(SX) + ADDM AC0,LOCA + ADDM AC0,LOCO + PUSHJ PP,GETTOP + HRRM SX,VARHDX + JUMP2 POPOUT + + PUSHJ PP,LOOKUP ;SET FOR TABLE SCAN + TRZN ARG,VARF + POPJ PP, ;NO, EXIT + TRZ ARG,UNDF ;TURN OFF FLAG NOW + MOVSI AC0,1 ;ADD 1 + ADDM AC0,0(AC1) ;UPDATE COUNT + + IOR ARG,MODA ;SET TO ASSEMBLY MODE + HRL ARG,LOCA + MOVSM ARG,0(SX) ;UPDATE 2ND WRD OF SYM TAB ENTRY + AOS LOCA + AOS LOCO + JRST HIGHQ1 + IF: PUSH PP,AC0 ;SAVE AC0 + PUSH PP,IO + PUSHJ PP,EVALXQ ;EVALUATE AND TEST EXTERNAL + POP PP,AC1 + JUMPL AC1,IFPOP + TLZ IO,FLDSW +IFPOP: POP PP,AC1 ;RETRIEVE SKIP INSTRUCTION +IFSET: TLO IO,IORPTC ;REPEAT CHARACTER +IFXCT: XCT AC1 ;EXECUTE INSTRUCTION + TDZA AC0,AC0 ;FALSE + MOVEI AC0,1 ;TRUE +IFEXIT: JUMPOC REPEA1 ;BRANCH IF IN OP-CODE FIELD +IFEX1: PUSHJ PP,GETCHR ;SEARCH FOR "<" + CAIN C,EOL ;ERROR IF END OF LINE + JRST ERRAX + CAIE C,34 + JRST IFEX1 + JUMPE AC0,IFEX2 ;TEST FOR 0 + TLO IO,IORPTC ;NO, PROCESS AS CELL + PUSHJ PP,CELL +IFN FORMSW,< MOVE AC1,HWFORM ;USE STANDARD FORM> + SETZM INCND ;NOT ANY MORE + JRST STOW ;STOW CODE AND EXIT + +IFPASS: HRRI AC0,P1 ;MAKE IT TLNX IO,P1 + MOVE AC1,AC0 ;PLACE IT IN AC1 + JRST IFSET ;EXECUTE INSTRUCTION + +IFB0: HLLO AC1,AC0 ;FORM AND STORE TEST INSTRUCTION +IFB1: PUSHJ PP,CHARL ;GET FIRST NON-BLANK + CAIE C," " + CAIN C," " + JRST IFB1 ;SKIP BLANKS AND TABS + CAIG C,CR ;CHECK FOR CARRET AS DELIM. + CAIGE C,LF + SKIPA SX,SEQNO2 + JRST ERRAX + MOVEM SX,CNDSEQ + MOVE SX,PAGENO + MOVEM SX,CNDPG + SETOM INCND ;SAVE INFO. FOR PASS 1 ERRORS + CAIN C,"<" ;LEFT BRACKET? + SETZB C,RC ;YES, PREPARE FOR OLD FORMAT + SKIPA SX,C ;SAVE FOR COMPARISON +IFB3: TRO AC0,1 ;SET FLAG +IFB2: PUSHJ PP,CHARL ;GET ASCII CHARACTER AND LIST + CAMN C,SX ;TEST FOR DELIMITER + JRST IFXCT ;FOUND + CAIE C," " ;BLANK? + CAIN C," " ;OR TAB? + JRST IFB2 ;YES + JUMPN SX,IFB3 ;JUMP IF NEW FORMAT + CAIN C,"<" ;<? + AOJA RC,IFB2 ;YES, INCREMENT COUNT + CAIN C,">" ;>? + SOJL RC,IFXCT ;YES, DECREMENT AND EXIT IF DONE + JRST IFB3 ;GET NEXT CHARACTER + + IFDEF0: HRRI AC0,UNDF ;MAKE IT TLNX ARG,UNDF + PUSH PP,AC0 ;STACK IT + PUSHJ PP,GETSYM ;TAKES SKIP RETURN IF SYM NAME IS LEGAL + TROA ER,ERRA ;ILLEGAL! + PUSHJ PP,SEARCH + JRST [PUSHJ PP,OPTSCH + TLO ARG,UNDF + JRST .+1] + PUSHJ PP,SSRCH3 ;EMIT TO CREF ANYWAY + JRST IFPOP ;POP AND EXECUTE INSTRUCTION + + IFIDN0: HLRZS AC0 + MOVEI V,2*.IFBLK-1 + SETZM IFBLK(V) ;CLEAR COMPARISON BLOCK + SOJGE V,.-1 + SETZM .TEMP ;CLEAR STORED DELIMETER + MOVEI RC,IFBLK ;SET FOR FIRST BLOCK + PUSHJ PP,IFCL ;GET FIRST STRING + MOVEI RC,IFBLKA + PUSHJ PP,IFCL ;GET SECOND STRING + MOVEI V,.IFBLK-1 + MOVE SX,IFBLK(V) ;GET WORD FROM FIRST STRING + CAMN SX,IFBLKA(V) ;COMPARE WITH SECOND STRING + SOJGE V,.-2 ;EQUAL, TRY NEXT WORD + JUMPL V,IFEXIT ;DID WE FINISH STRING + XORI AC0,1 ;NO, TOGGLE REQUEST + JRST IFEXIT ;DO NOT TURN ON IORPTC WFW + +IFCL: PUSHJ PP,CHARAC ;GET AND LIST CHARACTER + CAIE C," " ;SKIP SPACES + CAIG C,CR ;ALSO SKIP CR-LF + CAIGE C,HT ;AND TAB + JRST .+2 ;NOT ONE OF THEM + JRST IFCL ;SO LONG COMPARISONS WILL WORK +;*** A CROCK SO THAT IFIDN <X>,<X>,<INST.> WILL WORK *** + CAIE C,"," ;IS IT A COMMA? + JRST .+3 ;NO + SKIPN .TEMP ;YES, WAS PREVIOUS FIELD OLD METHOD? + JRST IFCL ;YES, IGNORE COMMA AND SPACES +; *** + CAIN C,"<" ;WAS IT LEFT BRACKET? + SETO C, ;SIGNAL OLD METHOD, LOOK FOR RIGHT BRACKET + MOVEM C,.TEMP ;STORE TERMINATOR FOR COMPARISON + MOVEI SX,5*.IFBLK-1 ;LIMIT SEARCH + HRLI RC,(POINT 7,,) ;SET UP BYTE IN RC +IFCLR: PUSHJ PP,CHARAC + SKIPLE .TEMP ;NEW METHOD? + JRST IFCLR1 ;YES, IGNORE ANGLE BRACKET COUNTING + CAIN C,"<" ;ANOTHER LEFT ANGLE? + SOS .TEMP ;YES, KEEP COUNT + CAIN C,">" ;CLOSING ANGLE + AOSGE .TEMP ;MATCHING COUNT? +IFCLR1: CAMN C,.TEMP ;TEST FOR DELIMITER + POPJ PP, ;EXIT ON RIGHT DELIMITER + SOJG SX,.+2 ;ANY ROOM IN COMPARISON BLOCK? + TROA ER,ERRA ;NO, FLAG ERROR BUT KEEP ON GOING + IDPB C,RC ;DEPOSIT BYTE + JRST IFCLR + + +IFEX2: PUSHJ PP,GETCHR + CAIN C,EOL ;EXIT WITH ERROR IF END OF LINE + JRST ERRAX + CAIN C,34 ;"<"? + AOJA AC0,IFEX2 ;YES, INCREMENT COUNT + CAIE C,36 ;">"? + JRST IFEX2 ;NO, TRY AGAIN + SOJGE AC0,IFEX2 ;YES, TEST FOR MATCH + PUSHJ PP,BYPASS ;YES, MOVE TO NEXT DELIMITER + SETZM INCND ;OUT OF CONDITIONAL NOW + AOJA AC0,STOWZ1 ;STOW ZERO + + +INTER0: HLLZM AC0,INTENT ;AC0 CONTAINS INTF/ENTF FLAGS + +INTER1: PUSHJ PP,GETSYM ;GET A SYMBOL + JRST INTER3 ;INVALID, SKIP + PUSHJ PP,SSRCH ;SEARCH THE TABLE + MOVSI ARG,SYMF!INTF!UNDF + TLNE ARG,UNDF ;UNDEFINED? + TRO ER,ERRA ;YES, FLAG ERROR + TLNN ARG,SYNF!EXTF + TDOA ARG,INTENT ;SET APPROPRIATE FLAGS +INTER3: TROA ER,ERRA ;FLAG ARG EROR AND SKIP + PUSHJ PP,INSERQ ;INSERT/UPDATE + JUMPCM INTER1 + SETZM EXTPNT ;JUST IN CASE, SO AS NOT TO CONFUSE WORLD + POPJ PP, ;NO, EXIT + EXTER0: PUSHJ PP,GETSYM ;GET A SYMBOL + JRST EXTER4 ;INVALID, ERROR +EXTER1: TLO IO,DEFCRS ;FLAG THIS AS A DEFINITION + PUSHJ PP,SSRCH ;OK, SEARCH SYMBOL TABLE + JRST EXTER2 ;NOT THERE, INSERT IT + TLNN ARG,EXTF!VARF!UNDF + TROA ER,ERRE ;FLAG ERROR AND BYPASS + TLNE ARG,EXTF ;VALID, ALREADY DEFINED? + JRST [JUMP1 EXTER3 ;YES, BYPASS + TLZN ARG,UNDF ;SKIP IF UNDEFINED ALSO + JRST EXTER3 ;CONTINUE + ANDM ARG,(SX) ;CLEAR UNDF ON PASS 2 + JRST EXTER2] ;SET UP EXTERNAL NOW +EXTER2: MOVEI V,2 ;NO, GET 2 CELLS FROM THE TREE + ADDB V,FREE + CAML V,SYMBOL ;HAVE WE RUN OUT OF CORE? + PUSHJ PP,XCEEDS ;YES, TRY TO BORROW SOME MORE + SUBI V,2 ;GET RIGHT CELL FOR POINTER + SETZB RC,0(V) ;ALL SET, ZERO VALUES + MOVSI ARG,SYMF!EXTF + PUSHJ PP,INSERT ;INSERT/UPDATE IT + MOVSI ARG,PNTF + IORM ARG,0(SX) + SKIPA ARG,-1(SX) ;GET THE SIXBIT FOR THE NAME +EXTER4: TROA ER,ERRA ;FLAG AS ERROR + MOVEM ARG,1(V) ;AND STORE THAT IN CASE SYMBOL TABLE MOVES +EXTER3: JUMPCM EXTER0 + POPJ PP, ;NO, EXIT + EVAL10: PUSH PP,RX + HRRI RX,?D10 + PUSHJ PP,EVALEX ;EVALUATE + POP PP,RX ;RESET RADIX + JUMPE RC,POPOUT ;EXIT IF ABSOLUTE + +QEXT: SKIPE EXTPNT ;ANY POSSIBILITIES? + TROA ER,ERRE ;YES, FLAG EXTERNAL ERROR + TRO ER,ERRR ;NO, FLAG RELOCATION ERROR + HLLZS RC ;CLEAR RELOCATION/EXTERNAL + POPJ PP, + +EVALXQ: PUSHJ PP,EVALEX ;EVALUATE EXPRESSION + TLZN RC,-2 ;LEFT HALF EXTERNAL + TRZE RC,-2 ;WAS AN EXTERNAL FOUND? + TRO ER,ERRE ;YES, FLAG ERROR + POPJ PP, ;RETURN + OPDEF0: PUSHJ PP,GETSYM ;GET THE FIRST SYMBOL + POPJ PP, ;ERROR IF INVALID SYMBOL + CAIE C,73 ;"["? + JRST ERRAX ;NO, ERROR + PUSH PP,AC0 ;STACK MNEMONIC + AOS LITLVL ;SHORT OUT LOCATION INCREMENT + PUSHJ PP,STMNT ;EVALUATE STATEMENT + SKIPGE STPX ;CODE STORED? + TROA ER,ERRA ;NO,"A" ERROR + PUSHJ PP,DSTOW ;GET AND DECODE VALUE + SOS LITLVL + EXCH AC0,0(PP) ;EXCHANGE VALUE FOR MNEMONIC + PUSH PP,RC ;STACK RELOCATION + TLO IO,DEFCRS ;SAY WE ARE DEFINING IT + PUSHJ PP,MSRCH ;SEARCH SYMBOL TABLE + MOVSI ARG,OPDF ;NOT FOUND + POP PP,RC ;RESTORE VALUES + POP PP,V + TLNE ARG,SYNF!MACF + TRO ER,ERRA ;YES "A" ERROR + TRNN ER,ERRA ;ERROR? + PUSHJ PP,INSERT ;NO, INSERT/UPDATE + TLZ IO,DEFCRS ;JUST IN CASE + PUSHJ PP,BYPASS + JRST STOWI ;BE SURE STOW IS RESET + + +DEPHA0: MOVE AC0,LOCO + SKIPA RC,MODO ;SET TO OUTPUT VALUES AND SKIP +PHASE0: PUSHJ PP,EVALXQ ;EVALUATE AND CHECK FOR EXTERNAL + MOVEM AC0,LOCA ;SET ASSEMBLY LOCATION COUNTER + MOVEM RC,MODA + JRST BLOCK2 + ASSIGN: JUMPAD ERRAX ;NO, ERROR + PUSHJ PP,ASSIG1 + TLNE IO,IOSALL ;SUPPRESS ALL? + JUMPN MRP,CPOPJ ;IF IN MACRO +ASSIG7: MOVEM RC,ASGBLK + TRNE RC,-2 ;EXTERNAL + HLLZS ASGBLK ;YES,CLEAR RELOCATION + TLNE RC,1 ;LEFT HALF NOT RELOC? + TLNE RC,-2 ;... + HRROS ASGBLK ;YES, SET FLAG + MOVEM V,LOCBLK + POPJ PP, + +ASSIG1: PUSH PP,AC0 ;SAVE SYMBOL + SETZB AC0,EXTPNT ;SPECIAL CHECK FOR == WFW + PUSHJ PP,PEEK ;IS THE NEXT ON = + CAIE C,"=" + JRST ASSIG5 + TLO AC0,NOOUTF ;YES, NOT OUT TO DDT WFW + PUSHJ PP,GETCHR ;PROCESS THE CHAR. + PUSHJ PP,PEEK ;CHECK FOR ==: DMN +ASSIG5: CAIE C,":" ;IS IT + JRST ASSIG6 ;NO + TLO AC0,INTF ;MAKE INTERNAL + PUSHJ PP,GETCHR ;REPEAT IT +ASSIG6: MOVEM AC0,HDAS ;STORE THESE BITS WFW + PUSHJ PP,EVALCM ;EVALUATE EXPRESSION + EXCH AC0,0(PP) ;SWAP VALUE FOR SYMBOL + PUSH PP,RC + TRNN RC,-2 ;CHECK EXTERNAL AGREEMENT + JRST ASSIG2 + HRRZS RC + HRRZ ARG,EXTPNT + CAME RC,ARG + PUSHJ PP,QEXT ;EXTERNAL OR RELOCATION ERROR +ASSIG2: HLRZ RC,(PP) + TRNN RC,-2 + JRST ASSIG3 + HLRZ ARG,EXTPNT + CAME RC,ARG + PUSHJ PP,QEXT +ASSIG3: TLO IO,DEFCRS + PUSHJ PP,SSRCH + MOVSI ARG,SYMF + IOR ARG,HDAS ;WFW + TLNE ARG,UNDF ;WAS IT UNDEFINED + TLZ ARG,EXTF!PNTF ;YES,CLEAR EXTF NOW + TLZ ARG,UNDF!VARF ;CANCEL UNDEFINED AND VARIABLE FLAGS + SETZM EXTPNT ;FOR REST OF WORLD + POP PP,RC + TRNE ER,ERRORS-ERRQ + SETZ RC, ;CLEAR RELOCATION + POP PP,V + TRNE ER,ERRU ;WAS VALUE UNDEFINED? + TLO ARG,UNDF ;YES,SO TURN UNDF ON + TLNE ARG,TAGF!EXTF + JRST ERRAX + JRST INSERT + + LOC0: PUSHJ PP,HIGHQ ;AC0=0,0 + PUSH PP,AC0 ;SAVE MODE REQUESTED + HLRZS AC0 ;PUT MODE IN RIGHT HALF + JUMPN AC0,RELOC0 ;RELOC PSEUDO-OP + CAMN AC0,MODO ;SAME AS PRESENT MODE? + JRST [HRRZ AC0,LOCO ;YES + EXCH AC0,ABSLOC ;EXCH VALUES + JRST LOC01] + HRRZ AC0,LOCO ;NO, GET CURRENT VALUE + MOVEM AC0,RELLOC ;SAVE IT + MOVE AC0,ABSLOC ;GET LAST RELOC VALUE +LOC01: PUSHJ PP,BYPASS ;SKIP BLANKS + TLO IO,IORPTC + CAIE C,EOL ;USE PREVIOUS VALUE IF NULL ARGUMENT + PUSHJ PP,EVALXQ ;GET EXPRESSION AND TEST EXTERNAL + HRRM AC0,(PP) ;STORE NEW VALUE + POP PP,AC0 ;RETRIEVE STORED MODE AND VALUE +LOC10: HRRZM AC0,LOCA ;SET ASSEMBLY LOCATION + HRRZM AC0,LOCO ;AND OUTPUT LOCATION + HLRZM AC0,MODA ;SET MODE + HLRZM AC0,MODO + JRST BLOCK2 + +RELOC0: CAMN AC0,MODO + JRST [HRRZ AC0,LOCO + EXCH AC0,RELLOC + JRST LOC01] + HRRZ AC0,LOCO + MOVEM AC0,ABSLOC + MOVE AC0,RELLOC + JRST LOC01 + + SYN CPOPJ,HISEG0 + SYN CPOPJ,TWSEG0 + +IFN FORMSW,< +ONFORM: HRRES HWFMT ;ALLOW MULTI-FORMAT LISTING + POPJ PP, +OFFORM: HRROS HWFMT ;HALF-WORD FORMAT ONLY + POPJ PP, > + +IFE FORMSW,< + SYN CPOPJ,ONFORM + SYN CPOPJ,OFFORM> + HIGHQ: +HIGHQ1: MOVE V,LOCO ;GET ASSEMBLY LOCATION + SKIPN MODO ;IF ASSEMBLY MODE IS ABSOLUTE + JRST [CAMLE V,ABSHI ;RECORED ABS HIGHEST ALSO + MOVEM V,ABSHI + POPJ PP,] + CAMLE V,HIGH ;IS IT GREATER THAN "HIGH"? + MOVEM V,HIGH ;YES, REPLACE WITH LARGER VALUE + POPJ PP, + +ONML: TLZA FR,MWLFLG ;MULTI-WORD LITERALS OK +OFFML: TLO FR,MWLFLG ;NO + POPJ PP, + +OFFSYM: SETOM IONSYM ;SUPRESS SYMBOL TABLE LISTING + POPJ PP, + +SUPRE0: PUSHJ PP,GETSYM ;GET A SYMBOL TO SUPRES + JRST SUPRE1 ;ERROR + PUSHJ PP,SSRCH ;SYMBOL ONLY + JRST SUPRE1 ;GIVE ERROR MESSAGE + TLOA ARG,SUPRBT ;SET THE SUPRESS BIT +SUPRE1: TROA ER,ERRA + IORM ARG,(SX) ;PUT BACK + JUMPCM SUPRE0 ;ANY MORE? + JRST SUPRS1 + +SUPRSA: PUSHJ PP,LOOKUP ;SUPRESS ALL + MOVSI ARG,SUPRBT + IORM ARG,(SX) +SUPRS1: SETZM EXTPNT ;JUST IN CASE WE LOOKED ONE UP + POPJ PP, + +XPUNG0: JUMP1 POPOUT + PUSHJ PP,LOOKUP + MOVE ARG,(SX) ;GET SYMBOL FLAGS + TLNN ARG,INTF!ENTF!EXTF!SPTR + TLOA ARG,SUPRBT ;LOCAL SYMBOL,SO SUPPRESS IT + SETZM EXTPNT + MOVEM ARG,(SX) ;RESTORE FLAGS + POPJ PP, + TITLE0: JUMP2 REMAR0 + MOVEI SX,.TBUF + HRRI AC0,TBUF + PUSHJ PP,SUBTT1 ;GO READ IT + MOVEM SX,TCNT ;SAVE COUNT OF CHARS. WRITTEN + SKIPE UNIVSN ;WAS IT A UNIVERSAL? + PUSHJ PP,ADDUNV ;YES ADD TO TABLE + TLOE IO,IOTLSN ;HAVE WE SEEN ONE + TRO ER,ERRM ;YES, COMPLAIN + POPJ PP, ;EXIT OTHERWISE + +SUBTT0: SKIPE SBUF ;STORE FIRST SUBTTL ON PASS1 + JUMP1 REMAR0 ;OTHERWISE EXIT IF PASS ONE + MOVEI SX,.SBUF + HRRI AC0,SBUF + +SUBTT1: PUSHJ PP,BYPASS ;BYPASS LEADING BLANKS + TLO IO,IORPTC +SUBTT3: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + IDPB C,AC0 ;STORE IN BLOCK + CAIGE C,40 ;TEST FOR TERMINATOR + CAIN C,HT + SOJG SX,SUBTT3 ;TEST FOR BUFFER FULL + DPB RC,AC0 ;END, STORE TERMINATOR + SOJA SX,CPOPJ ;COUNT NUL AND EXIT + + + SYN0: PUSHJ PP,GETSYM ;GET THE FIRST SYMBOL + JRST ERRAX ;ERROR, EXIT + PUSHJ PP,MSRCH ;TRY FOR MACRO/OPDEF + JRST SYN3 ;NO,0THRY FOR OPERAND +SYN1: MOVEI SX,MSRCH ;YES, SET FLAG +SYN2: PUSHJ PP,SAVEXS ;SAVE REGISTERS + JUMPNC ERRAX ;ERROR IF NO COMMA + PUSHJ PP,GETSYM ;GET THE SECOND SYMBOL + POPJ PP, + PUSHJ PP,@SAVBLK+SX ;SEARCH FOR SECOND SYMBOL + JFCL + MOVE ARG,SAVBLK+ARG ;GET VALUES + MOVE RC,SAVBLK+RC + MOVE V,SAVBLK+V + TLNE ARG,MACF ;MACRO? + PUSHJ PP,REFINC ;YES, INCREMENT REFERENCE + JRST INSERT ;INSERT AND EXIT + +SYN3: PUSHJ PP,SSRCH ;SEARCH FOR OPERAND + JRST SYN4 ;NOT FOUND, TRY OP CODE + TLO ARG,SYNF ;FLAG AS SYNONYM + TLNE ARG,EXTF ;EXTERNAL? + HRRZ V,ARG ;YES, RELPACE WITH POINTER + MOVEI SX,SSRCH ;SET FLAG + TLNN ARG,VARF ;DO NOT LET HIM SYN A VARIABLE + JRST SYN2 + JRST ERRAX + +SYN4: PUSHJ PP,OPTSCH ;SEARCH FOR OP-CODE + JRST ERRAX ;NOT FOUND, EXIT WITH ERROR + MOVSI ARG,SYNF ;FLAG AS SYNONYM + JRST SYN1 + PURGE0: PUSHJ PP,GETSYM ;GET A MNEMONIC + JRST [TRZ ER,ERRA ;CLEAR ERROR + POPJ PP,] ;AND RETURN + PUSHJ PP,MSRCH ;SEARCH MACRO SYMBOL TABLE + JRST PURGE2 ;NOT FOUND, TRY SYMBOLS + PUSH PP,CS ;SAVE CS AS IT MAY GET GARBAGED + TLNE ARG,MACF ;MACRO? + PUSHJ PP,REFDEC ;YES, DECREMENT THE REFERENCE + POP PP,CS + JRST PURGE4 ;REMOVE SYMBOL FROM TABLE + +PURGE2: PUSHJ PP,SSRCH ;TRY OPERAND SYMBOL TABLE + JRST PURGE5 ;NOT FOUND GET NEXT SYMBOL + TRNN RC,-2 ;CHECK COMPLEX EXTERNAL + TLNE RC,-2 + TLNE ARG,SYNF + JRST .+2 + JRST PURGE3 + TLNE ARG,EXTF!UNDF ;ERROR IF EXTERNAL OR UNDEFINED + TLNE ARG,SYNF ;BUT NOT A SYNONYM + JRST PURGE4 +PURGE3: TROA ER,ERRA ;NOT FOUND, ERROR +PURGE4: PUSHJ PP,REMOVE ;REMOVE FROM THE SYMBOL TABLE +PURGE5: JUMPCM PURGE0 + POPJ PP, ;EXIT + OPD1: TLNE ARG,UNDF ;IF OPDEF IS UNDEFINED + TRO ER,ERRO ;GIVE "O" ERROR +OPD: MOVE AC0,V ;PUT VALUE IN AC0 + JRST OP +IOP: MOVSI AC2,(POINT 9,0(PP),11) +IFE FORMSW,< TLOA IO,IOIOPF ;SET "IOP SEEN" AND SKIP> +IFN FORMSW,< PUSH PP,IOFORM ;USE I/O FORM + TLO IO,IOIOPF ;SET "IOP" SEEN + JRST OP+2> +OP: MOVSI AC2,(POINT 4,0(PP),12) +IFN FORMSW,< PUSH PP,INFORM ;USE INST. FORM> + PUSH PP,RC + PUSH PP,AC0 ;STACK CODE + PUSH PP,AC2 + PUSHJ PP,EVALEX ;EVALUATE FIRST EXPRESSION + POP PP,AC2 + JUMPNC OP2 +OP1B: PUSHJ PP,GETCHR ;GET A CHARACTER +IFE FORMSW,<JUMPCM XWD5 ;PROCESS COMMA COMMA IN XWD> +IFN FORMSW,<JUMPNC .+4 ;JUMP IF NO COMMA + MOVE AC2,HWFORM ;GET FORM WORD FOR XWD + MOVEM AC2,-2(PP) ;REPLACE INSTRUCTION FORM + JRST XWD5 ;PROCESS COMMA COMMA IN XWD> + TLO IO,IORPTC ;NOT A COMMA,REPEAT IT + LDB AC1,AC2 + ADD AC1,AC0 + DPB AC1,AC2 + JUMPE RC,OP1A ;EXTERNAL OR RELOCATABLE? + PUSHJ PP,QEXT ;YES, DETERMINE WHICH AND FLAG AN ERROR + +OP1A: PUSHJ PP,EVALEX ;GET ADDRESS PART +OP2: PUSHJ PP,EVADR ;EVALUATE STANDARD ADDRESS +OP3: POP PP,AC0 ;PUT IN AC0 + POP PP,RC +IFN FORMSW,< POP PP,AC1 ;GET FORM WORD> + SKIPE (PP) ;CAME FROM EVALCM? + JRST STOW ;NO,STOW CODE AND EXIT + POP PP,AC1 ;YES,EXIT IMMEDIATELY + POPJ PP, + + EVADR: ;EVALUATE STANDARD ADDRESS +IFE IIISW,<TLNN AC0,-1 ;OK IF ALL 0'S + JRST .+4 ;IT WAS + TLC AC0,-1 ;CHANGE ALL ONES TO ZEROS + TLCE AC0,-1 ;OK IF ALL 1'S + TRO ER,ERRQ ;NO,FLAG Q ERROR> + ADD AC0,-1(PP) ;ADD ADDRESS PORTIONS + HLL AC0,-1(PP) ;GET LEFT HALF + TLZE FR,INDSW ;INDIRECT BIT? + TLO AC0,(Z @) ;YES, PUT IT IN + MOVEM AC0,-1(PP) ;RE-STACK CODE + ADD RC,-2(PP) ;UPDATE RELOCATION + HRRM RC,-2(PP) ;USE HALF WORD ADD + CAIE C,10 ;"("? + POPJ PP, ;NO, EXIT + + MOVSS EXTPNT ;WFW + PUSHJ PP,EVALCM ;EVALUATE + MOVSS EXTPNT ;WFW + MOVSS V,AC0 ;SWAP HALVES +IFE IIISW,<MOVSS SX,RC + IOR SX,V ;MERGE RELOCATION + TRNN SX,-1 ;RIGHT HALF ZERO? + JRST OP2A ;YES, DO SIMPLE ADD + MOVE ARG,RC ;NO, SWAP RC INTO ARG> +IFN IIISW,<MOVSS ARG,RC> + ADD V,-1(PP) ;ADD RIGHT HALVES + ADD ARG,-2(PP) + HRRM V,-1(PP) ;UPDATE WITHOUT CARRY + HRRM ARG,-2(PP) + HLLZS AC0 ;PREPARE LEFT HALVES + HLLZS RC +IFE IIISW,<TLNE SX,-1 ;IS LEFT HALF ZERO? + TRO ER,ERRQ ;NO FLAG FORMAT ERROR +OP2A: TLNE RC,-1 ;RELOCATION FOR LEFT HALF? + PUSHJ PP,OP2A1 ;YES,IS IT LEGAL? + TLNE AC0,777000 ;OP CODE FIELD USED? + JRST [EXCH AC0,-1(PP);YES, GET STORED CODE + TLNE AC0,777000 ;OP CODE FIELD BEEN SET? + TRO ER,ERRQ ;YES, MOST LIKELY AN ERROR + EXCH AC0,-1(PP) + JRST .+1] ;RETURN TO ADD > + ADDM AC0,-1(PP) ;MERGE WITH PREVIOUS VALUE + ADDM RC,-2(PP) + CAIE C,11 ;")"? + JRST ERRAX ;NO, FLAG ERROR + ;YES, BYPASS PARENTHESIS +BYPASS: +BYPAS1: PUSHJ PP,GETCHR +BYPAS2: JUMPE C,.-1 ;SKIP TRAILING BLANKS + POPJ PP, ;EXIT + + IFE IIISW,< +OP2A1: EXCH RC,-2(PP) ;GET STORED CODE + TLNN RC,-1 ;OK IF ALL ZERO + JRST OP2A2 ;OK SO RETURN + TLC RC,-1 ;CHANGE ALL ONES TO ZEROS + TLCE RC,-1 ;OK IF ALL ONES + TRO ER,ERRQ ;OTHERWISE A "Q" ERROR +OP2A2: EXCH RC,-2(PP) ;GET RC,BACK + POPJ PP, ;AND RETURN> + + +EXPRES: HRLZ AC0,RX ;FUDGE FOR OCT0 + +OCT0: PUSH PP,RX + HLR RX,AC0 +OCT1: PUSHJ PP,EVALEX ;EVALUATE +IFN FORMSW,< MOVE AC1,HWFORM> + PUSHJ PP,STOW ;STOW CODE + JUMPCM OCT1 + POP PP,RX ;YES, RESTORE RADIX + POPJ PP, ;EXIT + SIXB10: MOVSI RC,(POINT 6,AC0) ;SET UP POINTER + MOVEI AC0,0 ;CLEAR WORD + +SIXB20: PUSHJ PP,CHARL ;GET NEXT CHARACTER + CAMN C,SX ;IS THIS PRESET DELIMITER? +IFE FORMSW,< JRST ASC60 ;YES> +IFN FORMSW,< + JRST [PUSHJ PP,BYPAS1 + ANDCM RC,STPX + MOVE AC1,SXFORM + JUMPGE RC,STOWZ + POPJ PP,]> + CAIL C,"A"+40 + CAILE C,"Z"+40 + JRST .+2 + TRZA C,100 ;CONVERT LOWER CASE TO SIXBIT + SUBI C,40 ;CONVERT TO SIXBIT + JUMPL C,ASC55 ;TEST FOR INVALID CHARACTER + IDPB C,RC ;NO, DEPOSIT THE BYTE + TLNE RC,770000 ;IS THE WORD FULL? + JRST SIXB20 ;NO, GET NEXT CHARACTER +IFN FORMSW,< MOVE AC1,SXFORM ;SIXBIT FORM> + PUSHJ PP,STOWZ ;YES, STORE + JRST SIXB10 ;GET NEXT WORD + ASCII0: HLLZ SDEL,AC0 ;STORE ASCII/ASCIZ FLAG +ASC10: PUSHJ PP,CHARL ;GET FIRST NON-BLANK + CAIE C," " + CAIN C,HT + JRST ASC10 + CAIG C,CR ;CHECK FOR CRRET AS DELIM + CAIGE C,LF + SKIPA SX,SEQNO2 + JRST ERRAX + MOVEM SX,TXTSEQ ;SAVE SEQ AND PAGE + MOVE SX,PAGENO + MOVEM SX,TXTPG + SETOM INTXT + MOVE SX,C ;SAVE FOR COMPARISON + JUMPG SDEL,SIXB10 ;BRANCH IF SIXBIT + +ASC20: MOVSI RC,(POINT 7,AC0) ;SET UP POINTER + TLNE SDEL,200000 ;THIS BIT (AND BIT0) IN FOR COMMENT + MOVSI RC,440000 ;SO NOTHING WILL BE DEPOSITED +IFE IIISW,<MOVEI AC0,0 ;CLEAR WORD> +IFN IIISW,<TLNE SDEL,100000 ;ASCID? + TLZA SDEL,400000 ;YES, ZERO ASCIZ BIT + TDZA AC0,AC0 ;NO, ZERO WORD + MOVE AC0,[BYTE (7) 10,10,10,10,10 (1) 1] ;YES, A WORD FULL OF BACKSPACES> +ASC30: PUSHJ PP,CHARL ;GET ASCII CHARACTER AND LIST + CAMN C,SX ;TEST FOR DELIMITER + JRST ASC50 ;FOUND + IDPB C,RC ;DEPOSIT BYTE + TLNE RC,760000 ;HAVE WE FINISHED WORD? + JRST ASC30 ;NO,GET NEXT CHARACTER +IFN FORMSW,< MOVE AC1,ASCIIF ;USE ASCII FORM WORD> + PUSHJ PP,STOWZ ;YES, STOW IT + JRST ASC20 ;GET NEXT WORD + +ASC55: TDZA CS,CS ;ZERO CS IN CASE NESTED +ASC50: TDZA RC,SDEL ;TEST FOR ASCIIZ + TROA ER,ERRA ;SIXBIT ERROR EXIT +ASC60: PUSHJ PP,BYPAS1 ;POLISH OFF TERMINATOR + SETZM INTXT ;WE ARE OUT OF IT +IFN FORMSW,< MOVE AC1,ASCIIF ;USE ASCII FORM WORD> +IFN IIISW,<TLNN SDEL,100000 ;NO EXTRA WORDS FOR ASCID> + ANDCM RC,STPX ;STORE AT LEAST ONE WORD + TLNN SDEL,200000 ;GET OUT WITHOUT STORING + JUMPGE RC,STOWZ ;STOW + POPJ PP, ;ASCII, NO BYTES STORED, SO EXIT + POINT0: +IFN FORMSW,< PUSH PP,BPFORM ;USE BYTE POINTER FORM WORD> + PUSH PP,RC ;STACK REGISTERS + PUSH PP,AC0 + PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + DPB AC0,[POINT 6,0(PP),11] ;STORE BYTE SIZE + JUMPNC POINT2 + PUSHJ PP,EVALEX ;NO, GET ADDRESS + PUSHJ PP,EVADR ;EVALUATE STANDARD ADDRESS + JUMPNC POINT2 + PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + TLNE IO,NUMSW ;IF NUMERIC + TDCA AC0,[-1] ;POSITION=D35-RHB +POINT2: MOVEI AC0,0 ;OTHERWISE SET TO D36 + ADDI AC0,?D36 + LSH AC0,?D30 + ADDM AC0,0(PP) ;UPDATE VALUE + JRST OP3 + XWD0: +IFN FORMSW,< PUSH PP,HWFORM ;USE HALF WORD FORM> + PUSH PP,RC + PUSH PP,AC0 ;STORE ZERO ON STACK + PUSHJ PP,EVALEX ;EVALUATE EXPRESSION + JUMPNC OP2 +XWD5: SKIPN (PP) ;ANY CODE YET? + JRST XWD10 ;NO,USE VALUE IN AC0 + JUMPE AC0,.+2 ;ANYTHING IN AC0? + TRO ER,ERRQ ;YES,FLAG "Q"ERROR + MOVE AC0,(PP) ;USE PREVIOUS VALUE + MOVE RC,-1(PP) ;AND RELOCATION +XWD10: HRLZM AC0,0(PP) ;SET LEFT HALF + HRLZM RC,-1(PP) + MOVSS EXTPNT ;WFW + JRST OP1A ;EXIT THROUGH OP + +IOWD0: PUSHJ PP,EVALXQ ;EVALUATE AND TEST FOR EXTERNAL + CAIE C,14 ;","? + JRST [SKIPN AC0 ;IF NZERO AND NO "," SEEN + TRO ER,ERRQ ;TREAT AS Q ERROR +IFN FORMSW,< MOVE AC1,HWFORM ;USE HALF WORD FORM> + SOJA AC0,STOW] ;NO, TREAT AS RIGHT HALF + PUSH PP,AC0 ;YES, STACK LEFT HALF + PUSHJ PP,EVALEX ;WFW + SUBI AC0,1 + POP PP,AC1 ;RETRIEVE LEFT HALF + MOVNS AC1 + HRL AC0,AC1 +IFN FORMSW,< MOVE AC1,HWFORM ;USE HALF WORD FORM> + JRST STOW ;STOW CODE AND EXIT + BYTE0: PUSHJ PP,BYPASS ;GET FIRST NON-BLANK + CAIE C,10 ;"("? + JRST ERRAX ;NO, FLAG ERROR AND EXIT +IFN FORMSW,< + PUSH PP,[1] + MOVEI AC0,0 +> + PUSH PP,RC + PUSH PP,AC0 ;INITIALIZE STACK TO ZERO + MOVSI ARG,(POINT -1,(PP)) + +BYTE1: PUSH PP,ARG + PUSHJ PP,EVAL10 ;EVALUATE RADIX 10 + POP PP,ARG + CAIG AC0,?D36 ;TEST SIZE + JUMPGE AC0,.+2 + TRO ER,ERRA + DPB AC0,[POINT 6,ARG,11] ;STORE BYTE SIZE + +BYTE2: IBP ARG ;INCREMENT BYTE + TRZN ARG,-1 ;OVERFLOW? + JRST BYTE3 ;NO + SETZB AC0,RC ;YES + EXCH AC0,0(PP) ;GET CURRENT VALUES + EXCH RC,-1(PP) ;AND STACK ZEROS +IFN FORMSW,< + MOVE AC1,HWFORM ;USE STANDARD FORM + EXCH AC1,-2(PP) ;GET FORM WORD +> + PUSHJ PP,STOW ;STOW FULL WORD + +BYTE3: PUSH PP,ARG + PUSHJ PP,EVALEX ;COMPUTE NEXT BYTE + POP PP,ARG + DPB AC0,ARG ;STORE BYTE + HLLO AC0,ARG + DPB RC,AC0 ;STORE RELOCATION + +IFN FORMSW,< + MOVEI AC0,1 + HRRI ARG,-2 + DPB AC0,ARG ;STORE FORM BYTE + HRRI ARG,0 +> + JUMPCM BYTE2 + CAIN C,10 ;"("? + JRST BYTE1 ;YES, GET NEW BYTE SIZE + JRST OP3 ;NO, EXIT + RADX50: PUSHJ PP,EVALEX ;EVALUATE CODE + JUMPN RC,ERRAX ;ERROR IF NOT ABSOLUTE + MOVE ARG,AC0 + JUMPNC ERRAX + PUSHJ PP,GETSYM ;YES, GET SYMBOL + TRZ ER,ERRA ;CLEAR ERROR + PUSHJ PP,SQOZE ;SQUOZE SIXBIT AND ADD CODE +IFN FORMSW,< MOVE AC1,HWFORM ;USE STANDARD FORM> + JRST STOW ;STOW CODE AND EXIT + + +SQOZE: MOVE AC1+1,AC0 ;PUT SIXBIT IN AC1+1 + MOVEI AC0,0 ;CLEAR RESULT +SQOZ1: MOVEI AC1,0 + LSHC AC1,6 ;PUT 6-BIT CHARACTER IN AC1 + LDB AC1,[POINT 6,CSTAT(AC1),23] ;CONVERT TO RADIX50 + IMULI AC0,50 ;MULTIPLY PREVIOUS RESULT + ADD AC0,AC1 ;ADD NEW CHARACTER + JUMPN AC1+1,SQOZ1 ;TEST FOR END + LSH ARG,?D30 ;LEFT-JUSTIFY CODE + IOR AC0,ARG ;MERGE WITH RESULT + POPJ PP, + REPEAT 0,< EXPLANATION OF ARRAY AND LVAR FEATURES + +WHEN A VARIABLE IS SEEN EITHER BY #, INTEGER OR ARRAY +THE VALUE PORTION OF THE SYMBOL TABLE ENTRY (RH OF 2ND WORD) +IS USE TO HOLD THE DESIRED SIZE-1. THE CORRECT VALUE IS +ASSIGNED BY THE VAR PSEUDO OP. + +WHEN LVAR IS SEEN, A SEARCH OF THE SYMBOL TABLE IS MADE +FOR ALL VARIABLES. THE VARF (VARIABLE) FLAG IS +LEFT ON AND EXTF AND PNTF ARE TURNED ON SO THAT THE +VARIABLE LOOKS LIKE AN EXTERNAL. THE POINTER +(RH OF 2ND WORD OF THE SYMBOL TABLE ENTRY) POINTS +TO THE HEADER BLOCK. THE HEADER BLOCK IS FORMATTED AS FOLLOWS: +WORD 1: LEFT HALF IS A POINTER TO SYMBOL TABLE FIXUP BLOCKS + RIGHT HALF IS A POINTER TO CODE FIXUP BLOCKS +WORD 2: 0 THIS IS USED TO DISTINGUISH IT FROM NORMAL EXTERNALS + WHICH HAVE THE SYMBOL NAME HERE +WORD 3: THE LOCATION RELATIVE TO THE START OF THE LOW CORE + VARIABLES + +CORE FIXUP BLOCKS ARE SET UP BY BOUT + +WORD1: RH LINK TO NEXT CORE FIXUP BLOCK 0 IF END OF CHAIN + LH OFFSET. NUMBER TO BE ADDED TO SYMBOL VALUE BEFORE + FIXUP IS DONE +WORD 2: POINTER TO A FIXUP CHAIN FOR RIGHT HALVES + LEFT HALF IS RELOCATION RH IS ADDRESS +WORD 3: SAME AS WORD 2 BUT FOR LEFT HALF FIXUPS + +NOTE ALL THESE FIXUPS ARE CHAINED EVEN IF IN LEFT HALF. +SIMILARY ALL REFERENCES TO SAY A+1 ARE CHAINED + +SYMBOL TABLE FIXUP BLOCKS. THESE ARE GENERATED BY SOUT +AS THE SYMBOL TABLE IS PUT OUT. THESE FIXUPS ARE ADDITIVE +NOT CHAINED. + +WORD 1: RH LINK TO NEXT BLOCK + LH 0 +WORD 2: RADIX50 FOR THE SYMBOL +WORD 3: 200000,,0 IF RH FIXUP + 600000,,0 IF LH FIXUP + +SOUT ALSO SETS UP FIXLNK. FIXLNK POINTS TO THE CHAIN OF +ALL LVAR FIXUPS TO BE DONE. IT POINTS TO THE SECOND WORD + OF A 2 WORD BLOCK + +WORD 1: LINK TO 2ND WORD OF NEXT BLOCK 0 IF END +WORD 2: RH POINTER TO A HEADER BLOCK + LH GARBAGE + +FIXUPS ARE BLOCK TYPE 13 AS FOLLOWS +WORD 1: THE PROGRAM BREAK (AS BLOCK TYPE 5) +WORD 2: THE NUMBER OF LOCATION USED FOR VARIABLES IN THE + LOW SEGMENT+1 + +REMAINING WORDS COME IN PAIRS AS FOLLOWS: +1ST WORD BIT 0=0 RH FIXUP + BIT 0=1 LH FIXUP + BIT 1=0 CORE FIXUP + WORD 2 LH POINTER TO CHAIN + WORD 2 RH VALUE + BIT 1=1 SYMBOL FIXUP + WORD 1 RH VALUE + WORD 2 SYMBOL +> + +REPEAT 0,< EXPLANATION OF ICC FEATURES + + IF FORMSW IS SET NON ZERO THE FORM OF THE OCTAL LISTING OUTPUT + IS CHANGED FROM STANDARD HALF WORD FORM TO THE FOLLOWING:- + + IF INSTRUCTION BYTE 9,4,1,4,18 + IF I/O INSTRUCTION BYTE 3,7,3,1,4,18 + IF BYTE POINTER BYTE 6,6,2,4,18 + IF ASCII BYTE 7,7,7,7,7 + IF SIXBIT BYTE 6,6,6,6,6,6 + + ALL OTHERS ARE STANDARD HALF WORD + + THIS FEATURE CAN BE OVER RIDDEN BY USE OF /H SWITCH + STANDARD HALF WORD FORM IS THEN USED. + HOWEVER BECAUSE OF EXTRA SPACING THE OUTPUT IS PUSHED MORE + TO THE RIGHT AND LONG COMMENTS OVERFLOW THE LINE + > + ; PSEUDO-END STATEMENT FOR MULTI-FILE CAPABILITY + +; HERE IF PRGEND (PASS 1) +PSEND0: TLO IO,MFLSW ;PSEND SEEN + PUSHJ PP,END0 ;AS IF END STATEMENT + HLLZS IO ;CLEAR ER(RH) + SETZM ERRCNT ;CLEAR ERROR COUNT FOR EACH PROG. + JUMP2 PSEND2 ;DIFFERENT ON PASS2 + SKIPE UNIVSN ;SEEN A UNIVERSAL + PUSHJ PP,UNISYM ;YES, STORE SYMBOLS + PUSHJ PP,PSEND4 ;SAVE SYMBOLS, POINTERS AND TITLE + TLZ IO,IOTLSN ;CLEAR TITLE SEEN FLAG +PSEND1: TLZ IO,MFLSW ;FOR NEXT FILE + SETZM UNISCH ;CLEAR UNIVERSAL SEARCH TABLE + MOVE AC0,[UNISCH,,UNISCH+1] + BLT AC0,UNISCH+.UNIV-1 + PUSHJ PP,OUTFF ;RESET PAGE COUNT + MOVSI AC0,1 ;SET SO RELOC 0 WORKS + JRST LOC10 ;FOR RELOC 0 + +; HERE IF PRGEND (PASS 2) +PSEND2: SETZM SBUF ;SO SUBTTL IS NOT WRONG + PUSHJ PP,PSEND5 ;PUT TITLE BACK + PUSHJ PP,PSEND1 ;COMMON CODE + JRST PASS20 ;OUTPUT THE ENTRIES + +; HERE IF END (PASS 1) +PSEND3: PUSHJ PP,PSEND4 ;SAVE LAST PROGRAM + HLRS PRGPTR ;REINITIALIZE POINTER + PUSHJ PP,PSEND5 ;READ BACK FIRST PROGRAM + JRST PASS20 + ;HERE TO SAVE AND RESTORE SYMBOL TABLE, TITLE AND OTHER USEFUL LOCATIONS + XTRA==4 ;NUMBER OF OTHER LOCATIONS TO SAVE + +PSEND4: MOVE V,FREE ;GET NEXT FREE LOCATION + ADDI V,LENGTH+.TBUF/5+XTRA + CAML V,SYMBOL ;WILL WORST CASE FIT? + PUSHJ PP,XCEED ;NO, EXPAND + MOVS V,FREE + HRR V,PRGPTR ;LAST PRGEND BLOCK + HLRM V,(V) ;LINK THIS BLOCK + SKIPN PRGPTR ;IF FIRST TIME + HLLZM V,PRGPTR ;SET LINK TO START OF CHAIN + HLRM V,PRGPTR ;POINTER TO IT + SETZM @FREE ;CLEAR LINK WORD + AOS FREE ;THIS LOCATION USED NOW + MOVS AC0,SYMBOL ;BOTTOM OF SYMBOL TABLE + HRR AC0,FREE ;FREE SPACE + MOVE V,@SYMBOL ;GET NUMBER OF SYMBOLS + ASH V,1 ;TWO WORDS PER SYMBOL + ADDI V,1 ;ONE MORE FOR COUNT + ADDB V,FREE ;END OF TABLE WHEN MOVED + BLT AC0,(V) ;MOVE TABLE + HRRZ AC0,JOBREL ;TOP OF CORE + SUBI AC0,1 + MOVEM AC0,SYMTOP ;FOR NEXT SYMBOL TABLE + SUBI AC0,LENGTH ;LENGTH OF INITIAL SYMBOLS + MOVEM AC0,SYMBOL ;SET POINTER TO COUNT OF SYMBOLS + HRLI AC0,SYMNUM ;BLT POINTER + BLT AC0,@SYMTOP ;SET UP INITIAL SYMBOL TABLE + PUSHJ PP,SRCHI ;SET UP SEARCH POINTER + MOVEI AC0,.TBUF ;MAX NUMBER OF CHARS. IN TITLE + SUB AC0,TCNT ;ACTUAL NUMBER + IDIVI AC0,5 ;NUMBER OF WORDS + SKIPE AC1 ;REMAINDER? + ADDI AC0,1 ;YES + MOVEM AC0,@FREE ;STORE COUNT + AOS FREE ;THIS LOCATION USED NOW + EXCH AC0,FREE ;SET UP AC0 FOR BLT + ADDM AC0,FREE ;WILL BE AFTER TITLE MOVES + HRLI AC0,TBUF ;BLT POINTER + BLT AC0,@FREE ;MOVE TITLE + MOVE AC2,LITHDX ;POINTER TO LIT INFO. + MOVE AC0,-1(AC2) ;SIZE OF PASS1 LOCO + PUSHJ PP,STORIT ;SAVE IT IN SYMBOL TABLE + MOVE AC2,VARHDX ;SAME FOR VARS + MOVE AC0,-1(AC2) + PUSHJ PP,STORIT +PSEND6: MOVE AC0,FREE ;GET NEXT FREE LOCATION + SUBI AC0,1 ;LAST ONE USED + HRRZ V,PRGPTR ;POINTER TO START OF DATA BLOCK + HRLM AC0,(V) ;LINK TO END OF BLOCK + POPJ PP, ;RETURN + + PSENDX: PUSHJ PP,XCEED ;NEED TO EXPAND CORE FIRST +PSEND5: HRRZ AC0,JOBREL ;GET TOP OF CORE + SUBI AC0,1 + MOVEM AC0,SYMTOP ;TOP OF NEW SYMBOL TABLE + HRRZ V,PRGPTR ;ADDRESS OF THIS BLOCK + JUMPE V,PSNDER ;ERROR LINK NOT SET UP + MOVE AC1,(V) ;NEXT LINK + MOVE V,1(V) ;GET ITS SYMBOL COUNT + ASH V,1 ;NUMBER OF WORDS + ADDI V,1 ;PLUS ONE FOR COUNT + SUBI AC0,(V) ;START OF NEW SYMBOL TABLE + CAMG AC0,FREE ;WILL IT FIT + JRST PSENDX ;NO, NEED TO EXPAND AND RESET AC0 + ADD V,PRGPTR ;POINT TO END OF SYMBOL TABLE + MOVEI V,1(V) ;THEN TO BEG OF TITLE + MOVEM AC0,SYMBOL ;BOTTOM OF NEW TABLE + HRL AC0,PRGPTR ;ADDRESS OF FIRST WORD OF BLOCK + ADD AC0,[1,,0] ;MAKE BLT POINTER + HRRM AC1,PRGPTR ;POINT TO NEXT BLOCK + BLT AC0,@SYMTOP ;MOVE TABLE + PUSHJ PP,SRCHI ;SET UP POINTER + MOVE AC1,(V) ;NUMBER OF WORDS OF TITLE + MOVEI AC0,1(V) ;START OF STORED TITLE + ADD V,AC1 ;INCREMENT PAST TITLE + ADDI AC1,TBUF-1 ;END OF TITLE + HRLI AC0,TBUF ;WHERE TO PUT IT + MOVSS AC0 ;BLT POINTER + BLT AC0,(AC1) ;MOVE TITLE + TLO IO,IOTLSN ;SET AS IF TITLE SEEN + MOVE AC2,LITHDX ;INVERSE OF ABOVE + PUSHJ PP,GETIT + MOVEM AC0,-1(AC2) + MOVE AC2,VARHDX ;SAME FOR VARS + PUSHJ PP,GETIT + MOVEM AC0,-1(AC2) + POPJ PP, + +STORIT: MOVEM AC0,@FREE ;STORE IT IN DATA BLOCK + AOS FREE ;ADVANCE POINTER + POPJ PP, + +GETIT: MOVE AC0,1(V) ;FILL AC0 OUT OF PRGEND BLOCK + AOJA V,CPOPJ ;INCREMENT AND RETURN + +PSNDER: HRROI RC,[SIXBIT /PRGEND ERROR @/] + JRST ERRFIN + ;MULTIPLE SYMBOL TABLE FEATURE PSEUDO-OPS + +UNIV0: JUMP2 TITLE0 ;DO IT ALL ON PASS 1 + HRRZ SX,UNIVNO ;GET NUMBER OF UNIVERSALS SEEN + CAIL SX,.UNIV ;ALLOW ONE MORE? + JRST UNVERR ;NO, GIVE FATAL ERROR + AOS UNIVNO ;ONE MORE NOW + SETOM UNIVSN ;AND SET SEEN A UNIVERSAL + JRST TITLE0 ;CONTINUE AS IF TITLE + + +ADDUNV: PUSH PP,RC ;AN AC TO USE + PUSHJ PP,NOUT ;CONVERT TO SIXBIT + HRRZ RC,UNIVNO ;GET ENTRY INDEX + MOVEM AC0,UNITBL(RC) ;STORE SIXBIT NAME IN TABLE + HRRZS UNIVSN ;ONLY DO IT ONCE + POP PP,RC ;RESTORE RC + POPJ PP, ;AND RETURN + +UNVERR: HRROI RC,[SIXBIT /TOO MANY UNIVERSALS@/] + JRST ERRFIN + +UNISYM: HRRZ AC0,FREE ;GET HIGHEST FREE LOCATION + MOVEM AC0,JOBFF ;INTO JOBFF + PUSHJ PP,SUPRSA ;TURN ON SUPPRESS BIT + PUSH PP,SYMBOL ;NEED TO SAVE INCASE PRGEND + MOVE AC0,SYMTOP ;TOP OF TABLE + SUB AC0,SYMBOL ;GET LENGTH OF TABLE + HRL ARG,SYMBOL ;BOTTOM OF TABLE + HRR ARG,JOBFF ;WHERE TO GO + HRRZ RC,UNIVNO ;GET TABLE INDEX + HRRM ARG,SYMBOL ;WILL BE THERE SOON + HRRZM ARG,UNIPTR(RC) ;STORE IN CORRESPONDING PLACE + ADDB AC0,JOBFF ;WHERE TO END + HRLM AC0,UNIPTR(RC) ;SAVE NEW SYMTOP + BLT ARG,@JOBFF ;MOVE TABLE + HRRZM AC0,UNITOP ;SAVE TOP OF TABLES+1 + CAMLE AC0,MACSIZ ;IN CASE OVER A K BOUND + MOVEM AC0,MACSIZ ;DON'T REDUCE SO FAR NOW + MOVEM AC0,FREE ;JUST IN CASE IN MACRO + MOVE AC0,SRCHX ;SAVE OLD SEARCH POINTER + PUSHJ PP,SRCHI ;GET SEARCH POINTER + EXCH AC0,SRCHX + MOVEM AC0,UNISHX(RC) ;SAVE IT + SETZM UNIVSN ;CLEAR FLAG INCASE PRGEND + POP PP,SYMBOL ;RESTORE OLD VALUE + POPJ PP, ;RETURN + + SERCH0: PUSHJ PP,GETSYM ;GET A SYMBOL + JRST ERRAX ;ERROR IF NOT VALID + MOVEI RC,1 ;START AT ENTRY ONE + CAIL RC,.UNIV ;CHECK FOR CONSISTENCY ERROR + JRST SCHERR ;CANNOT FIND THIS ONE + CAME AC0,UNITBL(RC) ;LOOK FOR MATCH + AOJA RC,.-3 ;NOT FOUND YET + MOVE AC0,RC ;STORE TABLE ENTRY NUMBER + MOVEI RC,1 ;START AT ENTRY ONE + CAIL RC,.UNIV ;CHECK FOR CONSISTENCY ERROR + JRST SCHERR ;SHOULD NEVER HAPPEN!! + SKIPE UNISCH(RC) ;LOOK FOR AN EMPTY SLOT + AOJA RC,.-3 ;NOT FOUND YET + MOVEM AC0,UNISCH(RC) ;STORE INDEX IN TABLE + JUMPCM SERCH0 ;LOOK FOR MORE NAMES + POPJ PP, ;FINISHED + +SCHERR: MOVSI RC,[SIXBIT /CANNOT FIND UNIVERSAL@/] + JRST ERRFIN ;NAME IN AC0 + +;MESSAGE FOR CASE WHERE FILES AFTER UNIVERSAL USED MORE BUFFER SPACE THAN FIRST UNIVERSAL +UNIERR: HRROI RC,[SIXBIT /UNIVERSAL PROGRAM(S) MUST HAVE SAME OUTPUT SPECIFICATION AS OTHER FILES@/] + JRST ERRFIN + SUBTTL MACRO/REPEAT HANDLERS + +REPEA0: PUSHJ PP,EVALXQ ;EVALUATE REPEAT EXP, EXTERNS ARE ILL. + JUMPNC ERRAX + +REPEA1: JUMPLE AC0,REPZ ;PASS THE EXP., DONT PROCESS + SOJE AC0,REPO ;REPEAT ONCE +REPEA2: PUSHJ PP,GCHARQ ;GET STARTING "<" + CAIE C,"<" + JRST REPEA2 + PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + PUSH MP,REPEXP + MOVEM AC0,REPEXP + PUSH MP,REPPNT ;STACK PREVIOUS REPEAT POINTER + MOVEM ARG,REPPNT ;STORE NEW POINTER + TDZA SDEL,SDEL ;YES, INITIALIZE BRACKET COUNT AND SKIP + +REPEA4: PUSHJ PP,WCHARQ ;WRITE A CHARACTER + PUSHJ PP,GCHARQ ;GET A CHARACTER + CAIN C,"<" ;"<"? + AOJA SDEL,REPEA4 ;YES, INCREMENT AND WRITE + CAIE C,">" ;">"? + JRST REPEA4 ;NO, WRITE THE CHARACTER + SOJGE SDEL,REPEA4 ;YES, WRITE IF NON-NEGATIVE COUNT + MOVSI CS,(BYTE (7) 177,3) ;SET "REPEAT" END + PUSHJ PP,WWRXE ;WRITE END + SKIPN LITLVL ;LITERAL MIGHT END ON LINE + SKIPE MACLVL ;IF IN MACRO DARE NOT PROCESS + JRST .+3 ;REST OF LINE SINCE MACRO MIGHT END ON IT + PUSHJ PP,BYPASS ;BYPASS + PUSHJ PP,STOUTS ;POLISH OF LINE BEFORE PROCESSING REPEAT + PUSH MP,MRP ;STACK PREVIOUS READ POINTER + PUSH MP,RCOUNT ;SAVE WORD COUNT + HRRZ MRP,REPPNT ;SET UP READ POINTER + SKIPN MACLVL ;IF IN MACRO GIVE CR-LF FIRST + SKIPE LITLVL ;SAME FOR LITERAL + JRST REPEA7 + AOJA MRP,POPOUT ;BYPASS ARG COUNT + +REPEA7: HRRZ MRP,REPPNT ;SET UP READ POINTER + ADDI MRP,1 ;BYPASS ARG COUNT +REPEA8: MOVEI C,CR + JRST RSW1 + +REPEND: SOSL REPEXP + JRST REPEA7 + HRRZ V,REPPNT ;GET START OF TREE + PUSHJ PP,REFDEC ;DECREMENT REFERENCE + POP MP,RCOUNT + POP MP,MRP + POP MP,REPPNT + POP MP,REPEXP + SKIPN LITLVL ;IF IN LITERAL OR + SKIPE MACLVL ;IF IN MACRO + JRST RSW0 ;FINISH OF LINE NOW + JRST REPEA8 + + REPZ: MOVE SDEL,SEQNO2 ;SAVE IN CASE OF END OF FILE + MOVEM SDEL,REPSEQ + MOVE SDEL,PAGENO + MOVEM SDEL,REPPG + SETOM INREP + MOVEI SDEL,0 ;SET COUNT +REPZ1: PUSHJ PP,GCHAR ;GET NEXT CHARACTER + CAIN C,"<" ;"<"? + AOJA SDEL,REPZ1 ;YES, INCREMENT COUNT + CAIN C,">" ;">"? + SOJLE SDEL,REPZ2 ;YES, EXIT IF MATCHING + JRST REPZ1 ;NO, RECYCLE +REPZ2: SETZM INREP ;FLAG OUT OF IT + SETZM INCND ;AND CONDITIONAL ALSO + JRST STMNT ;AND EXIT + +REPO: PUSHJ PP,GCHAR ;GET "<" + CAIE C,"<" + JRST REPO + SKIPE RPOLVL ;ARE WE NESTED? + AOS RPOLVL ;YES, DECREMENT CURRENT + PUSH MP,RPOLVL + SETOM RPOLVL + JRST STMNT + +REPO1: CAIN C,"<" + SOS RPOLVL + CAIN C,">" + AOSE RPOLVL + JRST RSW2 + POP MP,RPOLVL + PUSHJ PP,RSW2 + JRST RSW0 + DEFIN0: PUSHJ PP,GETSYM ;GET MACRO NAME + JRST ERRAX ;EXIT ON ERROR + MOVEM PP,PPTMP1 ;SAVE POINTER + MOVEM AC0,PPTMP2 ;SAVE NAME + TLO IO,IORPTC + MOVE SX,SEQNO2 ;SAVE IN CASE OF EOF + MOVEM SX,DEFSEQ + MOVE SX,PAGENO + MOVEM SX,DEFPG + SETOM INDEF ;AND FLAG IN DEFINE + SYN .TEMP,COMSW ;SAVE SPACE + SETZB SX,COMSW ;SET ARGUMENT AND REFERENCE COUNT AND COMMENT SWITCH +DEF02: PUSHJ PP,GCHAR ;SEARCH FOR "(" OR "<" + CAIG C,FF ;SEARCH FOR END OF LINE + CAIGE C,LF ;LF,VT, OR FF + JRST .+2 ;WASN'T ANY OF THEM + SETZM COMSW ;RESET COMMENT SWITCH + CAIN C,";" ;COMMENT? + SETOM COMSW ;YES, SET COMMENT SWITCH + SKIPE COMSW ;INSIDE A COMMENT? + JRST DEF02 ;YES, IGNORE CHARACTER + CAIN C,"<" ;"<"? + JRST DEF20 ;YES + CAIE C,"(" ;"("? + JRST DEF02 ;NO +DEF10: PUSHJ PP,GETSYM ;YES, GET DUMMY SYMBOL + TRO ER,ERRA ;FLAG ERROR + ADDI SX,1 ;INCREMENT ARG COUNT + PUSH PP,AC0 ;STACK IT + CAIN C,'<' ;A DEFAULT ARGUMENT COMING UP? + JRST DEF80 ;YES, STORE IT AWAY + CAIE C,11 ;")"? + JRST DEF10 ;NO, GET NEXT DUMMY SYMBOL +DEF12: PUSHJ PP,GCHAR + CAIE C,"<" ;"<"? + JRST DEF12 ;NO +DEF20: PUSH PP,[0] ;YES, MARK THE LIST + LSH SX,9 ;SHIFT ARG COUNT + AOS ARG,SX + PUSHJ PP,SKELI ;INITIALIZE MACRO SKELETON + MOVE AC0,PPTMP2 ;GET NAME + TLO IO,DEFCRS + PUSHJ PP,MSRCH ;SEARCH THE TABLE + JRST DEF24 ;NOT FOUND + TLNN ARG,MACF ;FOUND, IS IT A MACRO? + TROA ER,ERRX ;NO, FLAG ERROR AND SKIP + PUSHJ PP,REFDEC ;YES, DECREMENT THE REFERENCE +DEF24: HRRZ V,WWRXX ;GET START OF TREE + SKIPN .TEMP ;ANY DEFAULT ARGUMENTS TO TAKE CARE OF? + JRST DEF25 ;NO + HRRZ C,1(V) ;GET SHIFTED ARG COUNT + LSH C,-9 ;GET ARG COUNT BACK + ADDI C,1 ;ONE MORE FOR TERMINAL ZERO + ADD C,.TEMP ;NUMBER OF ITEMS IN STACK + HRLS C ;MAKE XWD + SUB PP,C ;BACK UP STACK + MOVE SDEL,.TEMP ;NUMBER OF WORDS NEEDED + ADDB SDEL,FREE ;FROM FREE CORE + CAML SDEL,SYMBOL ;MORE CORE NEEDED + PUSHJ PP,XCEEDS ;YES, TRY TO GET IT + SUB SDEL,.TEMP ;FORM POINTER + HRLM SDEL,1(V) ;STORE IT WITH ARG COUNT IN MACRO + SUBI SDEL,1 ;TO USE FOR PUSHING POINTER INTO STORAGE + MOVEI C,1(PP) ;POINT TO START OF STACK +DEF26: MOVE ARG,(C) ;GET AN ITEM OFF STACK + TLNN ARG,-40 ;A POINTER? + JUMPN ARG,[PUSH SDEL,ARG ;YES, STORE IT + AOJA C,DEF26] ;GET NEXT + PUSH PP,ARG ;RESTACK ARGUMENT + SKIPE ARG ;FINISHED IF ZERO + AOJA C,DEF26 ;GET NEXT + PUSH SDEL,ARG ;STORE ZERO IN DEFAULT LIST ALSO + DEF25: MOVSI ARG,MACF + MOVEM PP,PPTMP2 ;STORE TEMP STORAGE POINTER + PUSHJ PP,INSERT ;INSERT/UPDATE + TLZ IO,DEFCRS ;JUST IN CASE + SETZM ARGF ;NO ARGUMENT SEEN + SETZM SQFLG ;AND NO ' SEEN + TDZA SDEL,SDEL ;CLEAR BRACKET COUNT +DEF30: PUSHJ PP,WCHAR ;WRITE CHARACTER +DEF31: PUSHJ PP,GCHAR ;GET A CHARACTER +DEF32: MOVE CS,C ;GET A COPY + CAIN C,";" ;IS IT A COMMENT + JRST CPEEK ;YES CHECK FOR ;; +DEF33: CAIG CS,"Z"+40 ;CONVERT LOWER CASE + CAIGE CS,"A"+40 + JRST .+2 + SUBI CS,40 + CAIGE CS,40 ;TEST FOR CONTROL CHAR. + JRST [SKIPN SQFLG ;HAS SINGLE QUOTE BEEN SEEN? + JRST DEF30 ;NO, OUTPUT THIS CHAR. + PUSH PP,C ;YES, SAVE CURRENT CHAR + MOVEI C,47 ;SET UP QUOTE + PUSHJ PP,WCHAR;WRITE IT + POP PP,C ;GET BACK CURRENT CHAR. + SETZM SQFLG ;RESET FLAG + JRST DEF30] ;AND CONTINUE + CAILE CS,77+40 + JRST DEF30 ;TEST FOR SPECIAL + MOVE CS,CSTAT-40(CS) ;GET STATUS BITS + TLNE CS,6 ;ALPHA-NUMERIC? + JRST DEF40 ;YES + SKIPN SQFLG ;WAS A ' SEEN? + JRST DEF36 ;NO, PROCESH + PUSH PP,C ;YES, SAVE CURRENT CHARACTER + MOVEI C,47 ;AND PUT IN A ' + PUSHJ PP,WCHAR ;... + POP PP,C ;RESTORE CURRENT CHARACTER + SETZM SQFLG ;AND RESET FLAG +DEF36: CAIE C,47 ;IS THIS A '? + JRST DEF35 ;NOPE + SKIPN ARGF ;YES, WAS LAST THING SEEN AN ARG? + SETOM SQFLG ;IF NOT, SET SNGL QUOT FLAG + SETZM ARGF ;BUT NOT ARGUMENT IN ANY CASE + JRST DEF31 ;GO GET NEXT CHARACTER + DEF35: SETZM ARGF ;THIS IS NOT AN ARGUMENT + CAIN C,"<" ;"<"? + AOJA SDEL,DEF30 ;YES, INCREMENT COUNT AND WRITE + CAIN C,">" ;">"? + SOJL SDEL,DEF70 ;YES, TEST FOR END + JRST DEF30 ;NO, WRITE IT + +CPEEK: TLNN IO,IOPALL ;IF LALL IS ON + JRST DEF33 ;JUST RETURN + PUSHJ PP,PEEK ;LOOK AT NEXT CHAR. + CAIN C,";" ;IS IT ;;? + JRST CPEEK1 ;YES + MOVE C,CS ;RESTORE C + JRST DEF33 ;AND RETURN + +CPEEK1: PUSHJ PP,GCHAR ;GET THE CHAR. + CAIE C,">" ;RETURN IF END OF MACRO + CAIG C,CR ;IS CHAR ONE OF + CAIGE C,LF ;LF,VT,FF,CR + JRST CPEEK1 ;NO,SO GET NEXT CHAR. + JRST DEF32 ;YES,RETURN AND STORE + DEF40: MOVEI AC0,0 ;CLEAR ATOM + MOVSI AC1,(POINT 6,AC0) ;SET POINTER +DEF42: PUSH PP,C ;STACK CHARACTER + TLNE AC1,770000 ;HAVE WE STORED 6? + IDPB CS,AC1 ;NO, STORE IN ATOM + PUSHJ PP,GCHAR ;GET NEXT CHARACTER + MOVE CS,C + CAIG CS,"Z"+40 + CAIGE CS,"A"+40 + JRST .+2 + SUBI CS,40 ;CONVERT LOWER TO UPPER + CAIL CS,40 + CAILE CS,77+40 + JRST DEF44 ;TEST SPECIAL + MOVE CS,CSTAT-40(CS) ;GET STATUS + TLNE CS,6 ;ALPHA-NUMERIC? + JRST DEF42 ;YES, GET ANOTHER +DEF44: PUSH PP,[0] ;NO, MARK THE LIST + MOVE SX,PPTMP1 ;GET POINTER TO TOP + +DEF46: SKIPN 1(SX) ;END OF LIST? + JRST DEF50 ;YES + CAME AC0,1(SX) ;NO, DO THEY COMPARE? + AOJA SX,DEF46 ;NO, TRY AGAIN + SUB SX,PPTMP1 ;YES, GET DUMMY SYMBOL NUMBER + LSH SX,4 + MOVSI CS,<(BYTE (7) 177,101)>(SX) ;SET ESCAPE CODE MACEND + LSH AC0,-?D30 + CAIN AC0,5 ;"%"? + TLO CS,1000 ;YES, SET CRESYM FLAG + PUSHJ PP,WWORD ;WRITE THE WORD + SETOM ARGF ;SET ARGUMENT SEEN FLAG + SETZM SQFLG ;AND IGNORE ANY ' WAITING TO GET INTO STRING +DEF48: MOVE PP,PPTMP2 ;RESET PUSHDOWN POINTER + TLO IO,IORPTC ;ECHO LAST CHARACTER + JRST DEF31 ;RECYCLE + +DEF50: + SKIPN SQFLG ;HAVE WE SEEN A '? + JRST DEF51 ;NOPE + MOVEI C,47 ;YES, PUT IT IN + PUSHJ PP,WCHAR ;... + SETZM SQFLG ;AND CLEAR FLAG +DEF51: MOVE C,2(SX) ;GET CHARACTER + JUMPE C,DEF48 ;CLEAN UP IF END + PUSHJ PP,WCHAR ;WRITE THE CHARACTER + AOJA SX,DEF51 ;GET NEXT + +DEF70: MOVE PP,PPTMP1 ;RESTORE PUSHDOWN POINTER + MOVSI CS,(BYTE (7) 177,1) + PUSHJ PP,WWRXE ;WRITE END + SETZM INDEF ;OUT OF IT + JRST BYPASS + ; HERE TO STORE DEFAULT ARGUMENTS + +DEF80: AOS .TEMP ;COUNT ONE MORE + PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + HRL V,SX ;SYMBOL NUMBER + PUSH PP,V ;STORE POINTER + TDZA SDEL,SDEL ;ZERO BRACKET COUNT +DEF81: PUSHJ PP,WCHARQ ;WRITE A CHARACTER + PUSHJ PP,GCHARQ ;GET A CHARACTER + CAIN C,"<" ;ANOTHER "<"? + AOJA SDEL,DEF81 ;YES, INCREMENT AND WRITE + CAIE C,">" ;CLOSING ANGLE? + JRST DEF81 ;NO, JUST WRITE THE CHAR. + SOJGE SDEL,DEF81 ;YES, WRITE IF NOT END + MOVSI CS,(BYTE (7) 177,2) + PUSHJ PP,WWRXE ;WRITE END OF DUMMY ARGUMENT + PUSHJ PP,GCHAR ;READ AT NEXT CHAR. + CAIE C,")" ;END OF ARGUMENT LIST? + JRST DEF10 ;NO, GET NEXT SYMBOL + JRST DEF12 ;YES, LOOK FOR "<" + SUBTTL MACRO CALL PROCESSOR +CALLM: SKIPGE MACENL ;ARE WE TRYING TO RE-ENTER? + JRST ERRAX ;YES, BOMB OUT WITH ERROR + HRROS MACENL ;FLAG "CALLM IN PROGRESS" + EXCH MP,RP + PUSH MP,V ;STACK FOR REFDEC + EXCH MP,RP + MOVEM AC0,CALNAM ;SAVE MACRO NAME INCASE OF ERROR + MOVE SDEL,SEQNO2 ;SAVE IN CASE OF EOF + MOVEM SDEL,CALSEQ + MOVE SDEL,PAGENO + MOVEM SDEL,CALPG + ADDI V,1 ;POINT TO DUMMY SYMBOL COUNT + AOS SDEL,0(V) ;INCREMENT ARG COUNT + HLLZM SDEL,.TEMP ;DEFAULT ARG POINTER IF NON-ZERO + LSHC SDEL,-?D<9+36> ;ZERO SDEL, GET ARG COUNT IN SX + ANDI SX,777 ;MASK + SKIPE .TEMP ;IF AT LEAST ONE DEFAULT ARG + HRRM SX,.TEMP ;STORE COUNT OF ARGS + PUSH PP,V ;STACK FOR MRP + PUSH PP,RP ;STACK FOR MACPNT + JUMPE SX,MAC20 ;TEST FOR NO ARGS + PUSHJ PP,CHARAC + CAIE C,"(" ;"(" + TROA SDEL,-1 ;NO, FUDGE PAREN COUNT AND SKIP + +MAC10: PUSHJ PP,GCHAR ;GET A CHARACTER, LOOK FOR AN ARG + CAIG C,CR + CAIGE C,LF + CAIN C,";" ;";"? + JRST MAC21 ;YES, END OF ARGUMENT STRING + + PUSHJ PP,SKELI1 ;NO, INITIALIZE SKELETON + CAIN C,"<" ;"<"? + JRST MAC30 ;YES, PROCESS AS SPECIAL + CAIE C,176 + CAIN C,134 ;"\" + JRST MAC40 ;YES, PROCESS SYMBOL + +MAC14: CAIN C,"," ;","? + JRST MAC16 ;YES; NULL SYMBOL + CAIN C,"(" ;"("? + ADDI SDEL,1 ;YES, INCREMENT COUNT + CAIN C,")" ;")"? + SOJL SDEL,MAC16 ;YES, TEST FOR END + PUSHJ PP,WCHAR ;WRITE INTO SKELETON +MAC14A: PUSHJ PP,CHARAC ;GET NEXT CHARACTER + CAIG C,CR + CAIGE C,LF + JRST .+2 + JRST MAC15 ;TEST FOR END OF LINE + CAIE C,";" ;";"? + JRST MAC14 ;YES, END OF LINE + +MAC15: TLO IO,IORPTC +MAC16: MOVSI CS,(BYTE (7) 177,2) + PUSHJ PP,WWRXE ;WRITE END + EXCH MP,RP + PUSH MP,WWRXX + EXCH MP,RP + SOJLE SX,MAC20 ;BRANCH IF NO MORE ARGS + JUMPGE SDEL,MAC10 ;HAVEN'T SEEN TERMINAL ")" YET + MAC20: TLZN IO,IORPTC + PUSHJ PP,CHARAC +MAC21: EXCH MP,RP + JUMPE SX,MAC21B ;NO MISSING ARGS +MAC21A: PUSH MP,[-1] ;FILL IN MISSING ARGS + SKIPN .TEMP ;ANY DEFAULT ARGS? + JRST MAC21C ;NO + HRRZ C,.TEMP ;GET ARG COUNT + SUBI C,-1(SX) ;ACCOUNT FOR THOSE GIVEN + HRLZS C ;PUT IN LEFT HALF + HLRZ SDEL,.TEMP ;ADDRESS OF TABLE +MAC21D: SKIPN (SDEL) ;END OF LIST + JRST MAC21C ;YES + XOR C,(SDEL) ;TEST FOR CORRECT ARG + TLNN C,-1 ;WAS IT? + JRST MAC21E ;YES + XOR C,(SDEL) ;BACK THE WAY IT WAS + AOJA SDEL,MAC21D ;AND TRY AGAIN + +MAC21E: MOVEM C,(MP) ;REPLACE -1 WITH TREE POINTER + AOS 1(C) ;INCREMENT REFERENCE +MAC21C: SOJG SX,MAC21A +MAC21B: PUSH MP,[0] ;SET TERMINAL + HRRZ C,LIMBO + TLNN IO,IOSALL ;SUPPRESSING ALL? + JRST MAC23 ;NO + JUMPN MRP,MAC27 ;IN MACRO? + CAIE C,";" ;NO,IN COMMENT? + JRST MAC26 ;NO +MAC22: PUSHJ PP,CHARAC ;YES,GET IT INTO THE LBUF + CAIG C,CR ;LESS THAN CR? + CAIGE C,LF ;AND GREATER THAN LF? + JRST MAC22 ;NO GET ANOTHER +MAC26: HRLZI SX,70000 ;DECREMENT BYTE POINTER + ADDB SX,LBUFP + JUMPGE SX,MAC27 + HRLOI SX,347777 + ADDM SX,LBUFP +MAC27: HRLI C,-1 ;SET FLAG + JRST MAC25 + +MAC23: MOVEI SX,"?" + JUMPAD MAC24 ;BRANCH IF ADDRESS FIELD + CAIN C,";" ;IF SEMI-COLON + SKIPE LITLVL ;AND NOT IN A LITERAL + JRST MAC24 ;NOT BOTH TRUE + JUMPN MRP,MAC24 ;OR IN A MACRO + PUSHJ PP,STOUT ;LIST COMMENT OR CR-LF + TLNE IO,IOPALL ;MACRO EXPANSION SUPPRESSION? + TLO IO,IOMAC ; NO, SET TEMP BIT + TDOA C,[-1] ;FLAG LAST CHARACTER +MAC24: DPB SX,LBUFP ;SET ? INTO LINE BUFFER +MAC25: PUSH MP,MACPNT + POP PP,MACPNT + PUSH MP,C + PUSH MP,RCOUNT ;STACK WORD COUNT + PUSH MP,MRP ;STACK MACRO POINTER + POP PP,MRP ;SET NEW READ POINTER + EXCH MP,RP + AOS MACLVL + HRRZS MACENL ;RESET "CALLM IN PROGRESS" + JUMPOC STMNT2 ;OP-CODE FIELD + JRST EVATOM ;ADDRESS FIELD + + MAC30: MOVEI AC0,0 ;INITIALIZE BRACKET COUNTER +MAC31: PUSHJ PP,GCHAR ;GET A CHARACTER + CAIN C,"<" ;"<"? + ADDI AC0,1 ;YES, INCREMENT COUNT + CAIN C,">" ;">"? + SOJL AC0,MAC14A ;YES, EXIT IF MATCHING + PUSHJ PP,WCHAR ;WRITE INTO SKELETON + JRST MAC31 ;GO BACK FOR ANOTHER + +MAC40: PUSH PP,SX ;STACK REGISTERS + PUSH PP,SDEL + HLLM IO,TAGINC ;SAVE IO FLAGS + PUSHJ PP,CELL ;GET AN ATOM + MOVE V,AC0 ;ASSUME NUMERIC + TLNE IO,NUMSW ;GOOD GUESS? + JRST MAC41 ;YES + PUSHJ PP,SSRCH ;SEARCH THE SYMBOL TABLE + TROA ER,ERRX ;NOT FOUND, ERROR +MAC41: PUSHJ PP,MAC42 ;FORM ASCII STRING + HLL IO,TAGINC ;RESTORE IO FLAGS + POP PP,SDEL + POP PP,SX + TLO IO,IORPTC ;REPEAT LAST CHARACTER + JRST MAC14A ;RETURN TO MAIN SCAN + +MAC42: MOVE C,V +MAC44: LSHC C,-?D35 + LSH CS,-1 + DIVI C,0(RX) ;DIVIDE BY CURRENT RADIX + HRLM CS,0(PP) + JUMPE C,.+2 ;TEST FOR END + PUSHJ PP,MAC44 + HLRZ C,0(PP) + ADDI C,"0" ;FORM TEXT + JRST WCHAR ;WRITE INTO SKELETON + MACEN0: SOS MACENL +MACEND: SKIPGE C,MACENL ;TEST "CALLM IN PROGRESS" + AOS MACENL ;INCREMENT END LEVEL AND EXIT + JUMPL C,REPEA8 + EXCH MP,RP + POP MP,MRP ;RETRIEVE READ POINTER + POP MP,RCOUNT ;AND WORD COUNT + MOVEI C,"?" + SKIPL 0(MP) ;TEST FLAG + PUSHJ PP,RSW2 ;MARK END OF SUBSTITUTION + POP MP,C + POP MP,ARG + SKIPA MP,MACPNT ;RESET MP AND SKIP +MACEN1: PUSHJ PP,REFDEC ;DECREMENT REFERENCE +MACEN2: AOS V,MACPNT ;GET POINTER + MOVE V,0(V) + JUMPG V,MACEN1 ;IF >0, DECREMENT REFERENCE + JUMPL V,MACEN2 ;IF <0, BYPASS + POP MP,V ;IF=0, RETRIEVE POINTER + PUSHJ PP,REFDEC ;DECREMENT REFERENCE + MOVEM ARG,MACPNT + EXCH MP,RP + SOS MACLVL + SKIPN MACENL ;CHECK UNPROCESSED END LEVEL + JRST MACEN3 ;NONE TO PROCESS + TRNN MRP,-1 ;MRP AT END OF TEXT + JRST MACEN0 ;THEN POP THE MACRO STACK NOW +MACEN3: TRNN C,77400 ;SALL FLAG? + HRLI C,0 ;YES,TURN IT OFF + JUMPL C,REPEA8 ;IF FLAG SET SUBSTITUTE + JRST RSW1 + IRP0: SKIPN MACLVL ;ARE WE IN A MACRO? + JRST ERRAX ;NO, BOMB OUT +IRP10: PUSHJ PP,MREADS ;YES, GET DATA SPEC + CAIE C,40 ;SKIP LEADING BLANKS + CAIN C,"(" ;"("? + JRST IRP10 ;YES, BYPASS + CAIN C,11 + JRST IRP10 + CAIE C,177 ;NO, IS IT SPECIAL? + JRST ERRAX ;NO, ERROR + PUSHJ PP,MREADS ;YES + TRZN C,100 ;CREATED? + JRST ERRAX + CAIL C,40 ;TOO BIG? + JRST ERRAX + ADD C,MACPNT ;NO, FORM POINTER TO STACK + PUSH MP,IRPCF ;STACK PREVIOUS POINTERS + PUSH MP,IRPSW + PUSH MP,IRPARP + PUSH MP,IRPARG + PUSH MP,IRPCNT + PUSH MP,0(C) + PUSH MP,IRPPOI + + HRRZM C,IRPARP + MOVEM AC0,IRPCF ;IRPC FLAG FOUND IN AC0 + SETOM IRPSW ;RESET IRP SWITCH + MOVE CS,0(C) + MOVEM CS,IRPARG + + PUSHJ PP,MREADS + CAIE C,"<" ;"<"? + JRST .-2 ;NO, SEARCH UNTIL FOUND + PUSHJ PP,SKELI1 ;INITIALIZE NEW STRING + MOVEM ARG,IRPPOI ;SET NEW POINTER + + TDZA SDEL,SDEL ;ZERO BRACKET COUNT AND SKIP +IRP20: PUSHJ PP,WCHAR1 + PUSHJ PP,MREADS + CAIN C,"<" ;"<"? + AOJA SDEL,IRP20 ;YES, INCREMENT COUNT AND WRITE + CAIE C,">" ;">"? + JRST IRP20 ;NO, JUST WRITE IT + SOJGE SDEL,IRP20 ;YES, WRITE IF NOT MATCHING + MOVE CS,[BYTE (7) 15,177,4] + PUSHJ PP,WWRXE ;WRITE END + PUSH MP,MRP ;STACK PREVIOUS READ POINTER + PUSH MP,RCOUNT ;AND WORD COUNT + SKIPG CS,IRPARG + JRST IRPPOP ;EXIT IF NOT VALID ARGUMENT + MOVEI C,1(CS) ;INITIALIZE POINTER + MOVEM C,IRPARG + IRPSET: EXCH MRP,IRPARG ;SWAP READ POINTERS + MOVE SX,RCOUNT ;SWAP COUNT OF WORDS TO READ + EXCH SX,IRPCNT + MOVEM SX,RCOUNT + PUSHJ PP,SKELI1 ;INITIALIZE SKELETON FOR DATA + HRRZM ARG,@IRPARP ;STORE NEW DS POINTER + SETZB SX,SDEL ;ZERO FOUND FLAG AND BRACKET COUNT + LDB C,MRP ;GET LAST CHAR + CAIN C,"," + SKIPE IRPCF ;IN IRPC + JRST IRPSE1 ;NO + MOVEI SX,1 ;FORCE ARGUMENT +IRPSE1: PUSHJ PP,MREADS + CAIE C,177 ;SPECIAL? + AOJA SX,IRPSE2 ;NO, FLAG AS FOUND + PUSHJ PP,PEEKM ;LOOK AT NEXT CHARACTER + SETZM IRPSW ;SET IRP SWITCH + JUMPG SX,IRPSE4 ;IF ARG FOUND, PROCESS IT + JRST IRPPOP ;NO, CLEAN UP AND EXIT + +IRPSE2: SKIPE IRPCF ;IRPC? + JRST IRPSE3 ;YES, WRITE IT + CAIN C,"," ;NO, IS IT A COMMA? + JUMPE SDEL,IRPSE4 ;YES, EXIT IF NOT NESTED + CAIN C,"<" ;"<"? + ADDI SDEL,1 ;YES, INCREMENT COUNT + CAIN C,">" ;">"? + SUBI SDEL,1 ;YES, DECREMENT COUNT + +IRPSE3: PUSHJ PP,WCHAR + SKIPN IRPCF ;IRPC? + JRST IRPSE1 ;NO, GET NEXT CHARACTER + +IRPSE4: MOVSI CS,(BYTE (7) 177,2) + PUSHJ PP,WWRXE ;WRITE END + MOVEM MRP,IRPARG ;SAVE POINTER + MOVE MRP,RCOUNT ;SAVE COUNT + MOVEM MRP,IRPCNT + HRRZ MRP,IRPPOI ;SET FOR NEW SCAN + AOJA MRP,REPEA8 ;ON ARG COUNT + STOPI0: SKIPN IRPARP ;IRP IN PROGRESS? + JRST ERRAX ;NO, ERROR + SETZM IRPSW ;YES, SET SWITCH + POPJ PP, + +IRPEND: MOVE V,@IRPARP + PUSHJ PP,REFDEC + SKIPE IRPSW ;MORE TO COME? + JRST IRPSET ;YES + +IRPPOP: MOVE V,IRPPOI + PUSHJ PP,REFDEC ;DECREMENT REFERENCE + POP MP,RCOUNT + POP MP,MRP ;RESTORE CELLS + POP MP,IRPPOI + POP MP,@IRPARP + POP MP,IRPCNT + POP MP,IRPARG + POP MP,IRPARP + POP MP,IRPSW + POP MP,IRPCF + JRST REPEA8 + GETDS: ;GET DUMMY SYMBOL NUMBER + MOVE CS,C ;USE CS FOR WORK REGISTER + ANDI CS,37 ;MASK + ADD CS,MACPNT ;ADD BASE ADDRESS + MOVE V,0(CS) ;GET POINTER FLAG + JUMPG V,GETDS1 ;BRANCH IF POINTER + TRNN C,40 ;NOT POINTER, SHOULD WE CREATE? + JRST RSW0 ;NO, FORGET THIS ARG + PUSH PP,WWRXX + PUSH PP,MWP ;STACK MACRO WRITE POINTER + PUSH PP,WCOUNT ;SAVE WORD COUNT + PUSHJ PP,SKELI1 ;INITIALIZE SKELETON + MOVEM ARG,0(CS) ;STORE POINTER + MOVE CS,[BYTE (7) 0,170,170,170,171] ;CREATE A SYMBOL + ADD CS,LSTSYM ;LSTSYM= # OF LAST CREATED + TDZ CS,[BYTE (7) 0,170,170,170,170] + MOVEM CS,LSTSYM + IOR CS,[ASCII /.0000/] + MOVEI C,"." + PUSHJ PP,WCHAR + PUSHJ PP,WWORD ;WRITE INTO SKELETON + MOVSI CS,(BYTE (7) 177,2) + PUSHJ PP,WWRXE ;WRITE END CODE + POP PP,WCOUNT ;RESTORE WORD COUNT + POP PP,MWP ;RESTORE MACRO WRITE POINTER + POP PP,WWRXX + MOVE V,ARG ;SET UP FOR REFINC + +GETDS1: PUSHJ PP,REFINC ;INCREMENT REFERENCE + HRL V,RCOUNT ;SAVE WORD COUNT + PUSH MP,V ;STACK V FOR DECREMENT + PUSH MP,MRP ;STACK READ POINTER + MOVEI MRP,1(V) ;FORM READ POINTER + JRST RSW0 ;EXIT + +DSEND: POP MP,MRP + POP MP,V + HLREM V,RCOUNT ;RESTORE WORD COUNT + HRRZS V ;CLEAR COUNT + PUSHJ PP,REFDEC ;DECREMENT REFERENCE + JRST RSW0 ;EXIT + SKELI1: MOVEI ARG,1 ;ENTRY FOR SINGLE ARG +SKELI: SETZ MWP, ;SIGNAL FIRST TIME THROUGH + PUSHJ PP,SKELWL ;GET POINTER WORD + HRRZM MWP,WWRXX ;SAVE FIRST ADDRESS + HRRZM MWP,LADR ;SAVE START OF LINKED LIST + HRRZM ARG,1(MWP) ;STORE COUNT + SOS WCOUNT ;ACCOUNT FOR WORD + HRRZ ARG,WWRXX ;SET FIRST ADDRESS + ADDI MWP,2 ;BUMP POINTER + HRLI MWP,(POINT 7) ;SET FOR 5 ASCII BYTES + ;SKELW RETURNS WITH ADR OF NEXT FREE LOC IN V (RIGHT) + +SKELW: SOSLE WCOUNT ;STILL SOME SPACE IN LEAF? + POPJ PP, ;YES, RETURN +SKELWL: SKIPE V,NEXT ;GET FIRST FREE ADDRESS + JRST SKELW1 ;IF NON-ZERO, UPDATE FREE + MOVE V,FREE ;GET FREE + ADDI V,.LEAF ;INCREMENT BY LEAF SIZE + CAML V,SYMBOL ;OVERFLOW? + PUSHJ PP,XCEED ;YES, BOMB OUT + EXCH V,FREE ;UPDATE FREE + SETZM (V) ;CLEAR LINK + +SKELW1: HLL V,0(V) ;GET ADDRESS + HLRM V,NEXT ;UPDATE NEXT + SKIPE MWP ;IF FIRST TIME + HRLM V,1-.LEAF(MWP) ;STORE LINK IN FIRST WORD OF LEAF + MOVEI MWP,.LEAF ;SIZE OF LEAF + MOVEM MWP,WCOUNT ;STORE FOR COUNT DOWN + MOVEI MWP,(V) ;SET UP WRITE POINTER + TLO MWP,(POINT 7,,21) ;2 ASCII CHARS + POPJ PP, + + ;WWRXX POINTS TO END OF TREE + ;MWP IDPB POINTER TO NEXT HOLE + ;NEXT FIRST OF A LINKED PORTION THAT IS NOT BEING USED (LEAVES) + ;FREE POINTS TO FREE CORE BETWEEN TREE AND SYM-TABLE + ;LADR POINTS TO BEG OF LINKED PORTION. + GCHARQ: JUMPN MRP,MREADS ;IF GETTING CHAR. FROM TREE +GCHAR: PUSHJ PP,CHARAC ;GET ASCII CHARACTER + CAIG C,FF ;TEST FOR LF, VT OR FF + CAIGE C,LF + POPJ PP, ;NO + JRST OUTIM1 ;YES, LIST IT + +WCHARQ: +WCHAR: +WCHAR1: TLNN MWP,760000 ;END OF WORD? + PUSHJ PP,SKELW ;YES, GET ANOTHER + IDPB C,MWP ;STORE CHARACTER + POPJ PP, + +WWORD: LSHC C,7 ;MOVE ASCII INTO C + PUSHJ PP,WCHAR1 ;STORE IT + JUMPN CS,WWORD ;TEST FOR END + POPJ PP, ;YES, EXIT + +WWRXE: PUSHJ PP,WWORD ;WRITE LAST WORD + ADD MWP,WCOUNT ;GET TO END OF LEAF + SUBI MWP,.LEAF ;NOW POINT TO START OF IT + HRRZS (MWP) ;ZERO LEFT HALF OF LAST LEAF + HRRM MWP,@WWRXX ;SET POINTER TO END + POPJ PP, + MREAD: PUSHJ PP,MREADS ;READ ONE CHARACTER + CAIE C,177 ;SPECIAL? + JRST RSW1 ;NO, EXIT + PUSHJ PP,MREADS ;YES, GET CODE WORD + TRZE C,100 ;SYMBOL? + JRST GETDS ;YES + CAILE C,4 ;POSSIBLY ILLEGAL + JRST ERRAX ;YUP + HRRI MRP,0 ;NO, SIGNAL END OF TEXT + JRST .+1(C) + PUSHJ PP,XCEED + JRST MACEND ;1; END OF MACRO + JRST DSEND ;2; END OF DUMMY SYMBOL + JRST REPEND ;3; END OF REPEAT + JRST IRPEND ;4; END OF IRP + +MREADI: HRLI MRP,700 ;SET UP BYTE POINTER + MOVEI C,.LEAF-1 ;NUMBER OF WORDS + MOVEM C,RCOUNT +MREADS: TLNN MRP,-1 ;FIRST TIME HERE? + JRST MREADI ;YES, SET UP MRP AND RCOUNT + TLNN MRP,760000 ;HAVE WE FINISHED WORD? + SOSLE RCOUNT ;YES, STILL ROOM IN LEAF? + JRST MREADC ;STILL CHAR. IN LEAF + HLRZ MRP,1-.LEAF(MRP);YES, GET LINK + HRLI MRP,(POINT 7,,21) ;SET POINTER + MOVEI C,.LEAF ;RESET COUNT + MOVEM C,RCOUNT +MREADC: ILDB C,MRP ;GET CHARACTER + POPJ PP, + +PEEK: JUMPN MRP,PEEKM ;THIS IS A MACRO READ + PUSHJ PP,CHARAC ;READ AN ASCII CHAR. + TLO IO,IORPTC ;REPEAT FOR NEXT + POPJ PP, ;AND RETURN + +PEEKM: PUSH PP,MRP ;SAVE MACRO READ POINTER + PUSH PP,RCOUNT ;SAVE WORD COUNT + PUSHJ PP,MREADS ;READ IN A CHAR. + POP PP,RCOUNT ;RESTORE WORD COUNT + POP PP,MRP ;RESET READ POINTER + POPJ PP, ;IORPTC IS NOT SET + REFINC: MOVEI CS,1(V) ;GET POINTER TO TREE + AOS 0(CS) ;INCREMENT REFERENCE + POPJ PP, + +REFDEC: JUMPLE V,DECERR ;CATASTROPHIC ERROR SOMEWHERE + MOVEI CS,1(V) ;GET POINTER TO TREE + SOS CS,0(CS) ;DECREMENT REFERENCE + TRNE CS,000777 ;IS IT ZERO? + POPJ PP, ;NO, EXIT + HRRZ CS,0(V) ;YES, GET POINTER TO END + HRL CS,NEXT ;GET POINTER TO NEXT RE-USABLE + HLLM CS,0(CS) ;SET LINK + HRRM V,NEXT ;RESET NEXT + POPJ PP, + +DECERR: MOVE AC0,CALNAM ;GET MACRO NAME + MOVSI RC,[SIXBIT /ERROR WHILE EXPANDING@/] + PUSHJ PP,TYPMSG + JRST ERRNE2 ;COMMON MESSAGE + A== 0 ;ASCII MODE +AL== 1 ;ASCII LINE MODE +IB== 13 ;IMAGE BINARY MODE +B== 14 ;BINARY MODE +IFE RUNSW,<DMP==16 ;DUMP MODE> + +CTL== 0 ;CONTROL DEVICE NUMBER +BIN== 1 ;BINARY DEVICE NUMBER +CHAR== 2 ;INPUT DEVICE NUMBER +LST== 3 ;LISTING DEVICE NUMBER + +; COMMAND STRING ACCUMULATORS + +ACDEV== 1 ;DEVICE +ACFILE==2 ;FILE +ACEXT== 3 ;EXTENSION +ACPPN== 4 ;PPN +ACDEL== 4 ;DELIMITER +ACPNTR==5 ;BYTE POINTER + +TIO== 6 + +TIORW== 1000 +TIOLE== 2000 +TIOCLD==20000 + +DIRBIT==4 ;DIRECTORY DEVICE +TTYBIT==10 ;TTY +MTABIT==20 ;MTA +DTABIT==100 ;DTA +DISBIT==2000 ;DISPLAY +CONBIT==20000 ;CONTROLING TTY +LPTBIT==40000 ;LPT +DSKBIT==200000 ;DSK + +;GETSTS ERROR BITS + +IOIMPM==400000 ;IMPROPER MODE (WRITE LOCK) +IODERR==200000 ;DEVICE DATA ERROR +IODTER==100000 ;CHECKSUM OR PARITY ERROR +IOBKTL== 40000 ;BLOCK TOO LARGE +ERRBIT==IOIMPM!IODERR!IODTER!IOBKTL + +SYN .TEMP,PPN + SUBTTL I/O ROUTINES +BEG: + HRRZ MRP,JOBREL ;GET LOWSEG SIZE + MOVEM MRP,MACSIZ ;SAVE CORE SIZE + ;DECODE VERSION NUMBER + MOVEI PP,JOBFFI ;TEMP PUSH DOWN STACK + PUSH PP,[0] ;MARK BOTTOM OF STACK + LDB 0,[POINT 3,JOBVER,2] ;GET USER BITS + JUMPE 0,GETE ;NOT SET IF ZERO + ADDI 0,"0" ;FORM NUMBER + PUSH PP,0 ;STACK IT + MOVEI 0,"-" ;SEPARATE BY HYPHEN + PUSH PP,0 ;STACK IT ALSO +GETE: HRRZ 0,JOBVER ;GET EDIT NUMBER + JUMPE 0,GETU ;SKIP ALL THIS IF ZERO + MOVEI 1,")" ;ENCLOSE IN PARENS. + PUSH PP,1 +GETED: IDIVI 0,8 ;GET OCTAL DIGITS + ADDI 1,"0" ;MAKE ASCII + PUSH PP,1 ;STACK IT + JUMPN 0,GETED ;LOOP TIL DONE + MOVEI 0,"(" ;OTHER PAREN. + PUSH PP,0 +GETU: LDB 0,[POINT 6,JOBVER,17] ;UPDATE NUMBER + JUMPE 0,GETV ;SKIP IF ZERO + IDIVI 0,8 ;MIGHT BE TWO DIGITS + ADDI 1,"@" ;FORM ALPHA + PUSH PP,1 + JUMPN 0,GETU+1 ;LOOP IF NOT DONE +GETV: LDB 0,[POINT 9,JOBVER,11] ;GET VERSION NUMBER + IDIVI 0,8 ;GET DIGIT + ADDI 1,"0" ;TO ASCII + PUSH PP,1 ;STACK + JUMPN 0,GETV+1 ;LOOP + MOVE 1,[POINT 7,VBUF+1,13] ;POINTER TO DEPOSIT IN VBUF + POP PP,0 ;GET CHARACTER + IDPB 0,1 ;DEPOSIT IT + JUMPN 0,.-2 ;KEEP GOING IF NOT ZERO +IFN FORMSW,<IFE DFRMSW,< + SETOM PHWFMT ;HALF WORD UNLESS CHANGED BY SWITCH>> + +M: + RESET ;INITIALIZE PROGRAM + SETZM BINDEV ;CLEAR INCASE NOT USED NEXT TIME + SETZM LSTDEV ;SAME REASON + SETZM INDEV ;INCASE OF ERROR + HRRZ MRP,MACSIZ ;GET INITIAL SIZE + CORE MRP, ;BACK TO ORIGINAL SIZ4 + JFCL ;SHOULD NEVER FAIL + SETZB MRP,PASS1I + MOVE [XWD PASS1I,PASS1I+1] + BLT PASS2X-1 ;ZERO THE PASS1 AND PASS2 VARIABLES + MOVEI PP,JOBFFI ;SET TEMP PUSH-DOWN POINTER + MOVE CS,[POINT 7,DBUF,6] ;INITIALIZE FOR DATE + MSTIME 2, ;GET TIME FROM MONITOR + PUSHJ PP,TIMOUT ;TIME FORMAT OUTPUT + DATE 1, ;GET DATE + IBP CS ;PASS OVER PRESET SPACE + PUSHJ PP,DATOUT ;DATE FORMAT OUTPUT + MOVSI FR,P1!CREFSW +CTLSET: + MOVSI IO,IOPALL ;ZERO FLAGS + INIT CTL,AL ;INITIALIZE USER CONSOLE + SIXBIT /TTY/ + XWD CTOBUF,CTIBUF + EXIT ;NO TTY, NO ASSEMBLY + MOVSI C,(SIXBIT /TTY/) + DEVCHR C, ;GET CHARACTERISTICS + TLNN C,10 ;IS IT REALLY A TTY + EXIT ;NO + INBUF CTL,1 ;INITIALIZE SINGLE CONTROL + OUTBUF CTL,1 ;BUFFERS + PUSHJ PP,CRLF ;OUTPUT CARRIAGE RETURN - LINE FEED + MOVEI C,"*" + IDPB C,CTOBUF+1 + OUTPUT CTL, + INPUT CTL, + + BINSET: PUSHJ PP,NAME1 ;GET FIRST NAME + TLNN FR,CREFSW ;CROSS REF REQUESTED? + JRST LSTSE1 ;YES, SKIP BINARY + CAIN C,"," ;COMMA? + JUMPE ACDEV,LSTSET ;YES, SKIP BINARY IF NO DEVICE SPECIFIED + CAIN C,"?" ;LEFT ARROW? + JUMPE ACDEV,LSTSE1 ;YES, SKIP BINARY IF NO DEVICE SPECIFIED + JUMPE ACDEV,M ;IGNORE IF JUST <CR-LF> + TLO FR,PNCHSW ;OK, SET SWITCH + MOVEM ACDEV,BINDEV ;STORE DEVICE NAME + MOVEM ACFILE,BINDIR ;STORE FILE NAME IN DIRECTORY + JUMPN ACEXT,.+2 ;EXTENSION SPECIFIED? + MOVSI ACEXT,(SIXBIT /REL/) ;NO, ASSUME RELOCATABLE BINARY + MOVEM ACEXT,BINDIR+1 ;STORE IN DIRECTORY + MOVEM ACPPN,BINDIR+3 ;SET PPN + OPEN BIN,BININI ;INITIALIZE BINARY + JRST EINIT ;ERROR + TLZE TIO,TIOLE ;SKIP TO EOT + MTAPE BIN,10 + TLZE TIO,TIORW ;REWIND REQUESTED? + MTAPE BIN,1 ;YES + JUMPGE CS,BINSE2 ;BRANCH IF NO BACK-SPACE + MTAPE BIN,17 ;BACK-SPACE A FILE + AOJL CS,.-1 ;TEST FOR END + WAIT BIN, + STATO BIN,1B24 ;LOAD POINT? + MTAPE BIN,16 ;NO, GO FORWARD ONE +BINSE2: SOJG CS,.-1 ;TEST FORWARD SPACING + + TLNE TIO,TIOCLD ;DIRECTORY CLEAR REQUESTED? + UTPCLR BIN, ;YES, CLEAR IT + OUTBUF BIN,2 ;SET UP TWO RING BUFFER + CAIN C,"?" + JRST GETSET ;NO LISTING + LSTSET: PUSHJ PP,NAME1 ;GET NEXT DEVICE +LSTSE1: CAIE C,"?" + JRST ERRCM + TLNE FR,CREFSW ;CROSS-REF REQUESTED? + JRST LSTSE2 ;NO, BRANCH + JUMPN ACDEV,.+2 ;YES, WAS DEVICE SPECIFIED? + MOVSI ACDEV,(SIXBIT /DSK/) ;NO, ASSUME DSK + JUMPN ACFILE,.+2 + MOVE ACFILE,[SIXBIT /CREF/] + JUMPN ACEXT,.+2 + MOVSI ACEXT,(SIXBIT /CRF/) +LSTSE2: JUMPE ACDEV,GETSET ;FORGET LISTING IF NO DEVICE SPECIFIED + MOVE AC0,ACDEV + DEVCHR AC0, ;GET CHARACTERISTICS + TLNE AC0,LPTBIT!DISBIT!TTYBIT + TLNE FR,CREFSW ; WAS CROSS-REF REQUESTED? + AOSA OUTSW+0*TTYSW ;NO, ASSUME TTY + JRST ERRCM ;YES, ERROR - CREF DEV MUST NOT BE LPT, DIS, OR TTY + TLNE AC0,CONBIT ;CONTROLING TELETYPE LISTING? + JRST GETSET ;YES, BUFFER ALREADY SET + MOVEM ACDEV,LSTDEV ;STORE DEVICE NAME + AOS OUTSW+0*LPTSW ;SET FOR LPT + MOVEM ACFILE,LSTDIR ;STORE FILE NAME + JUMPN ACEXT,.+2 + MOVSI ACEXT,(SIXBIT /LST/) + MOVEM ACEXT,LSTDIR+1 + MOVEM ACPPN,LSTDIR+3 ;SET PPN + OPEN LST,LSTINI ;INITIALIZE LISTING OUTPUT + JRST EINIT ;ERROR + TLZE TIO,TIOLE + MTAPE LST,10 + TLZE TIO,TIORW ;REWIND REQUESTED? + MTAPE LST,1 ;YES + JUMPGE CS,LSTSE3 + MTAPE LST,17 + AOJL CS,.-1 + WAIT LST, + STATO LST,1B24 + MTAPE LST,16 +LSTSE3: SOJG CS,.-1 + TLNE TIO,TIOCLD ;DIRECTORY CLEAR REQUESTED? + UTPCLR LST, ;YES, CLEAR IT + OUTBUF LST,2 ;SET UP A TWO RING BUFFER + GETSET: MOVEI 3,PDPERR + HRRM 3,JOBAPR ;SET TRAP LOCATION + MOVEI 3,1B19 ;SET FOR PUSH-DOWN OVERFLOW + APRENB 3, + SOS 3,PDP ;GET PDP REQUEST MINUS 1 + IMULI 3,.PDP ;COMPUTE SIZE (50*<NUMBER OF /P'S +1>) + HRLZ MP,3 + HRR MP,JOBFF ;SET BASIC POINTER + MOVE PP,MP + SUB PP,3 + MOVEM PP,RP ;SET RP + SUB PP,3 + ASH 3,1 ;DOUBLE SIZE OF BASIC POINTER + HRL PP,3 + SUBM PP,3 ;COMPUTE TOP LOCATION + SKIPN UNITOP ;IF ANY UNIVERSALS HAVE BEEN SEEN + JRST GETSE0 ;NO + HRRZS 3 ;GET TOP OF BUFFERS AND STACKS + CAMLE 3,UNISIZ ;HOPE ITS NOT BIGGER THAN UNIVERSAL ONE + JRST UNIERR ;IT WAS, YOU LOSE + SKIPA 3,UNITOP ;DON'T LOSE THEM +GETSE0: HRRZM 3,UNISIZ ;STORE UNTIL A UNIVERSAL IS SEEN + HRRZM 3,LADR ;SET START OF MACRO TREE + HRRZM 3,FREE + +GETSE1: HRRZ JOBREL + SUBI 1 + MOVEM SYMTOP ;SET TOP OF SYMBOL TABLE + SUBI LENGTH ;SET POINTER FOR INITIAL SYMBOLS + CAMLE LADR ;HAVE WE ROOM? + JRST GETSE2 ;YES + + HRRZ 2,JOBREL ;NO, TRY FOR MORE CORE + ADDI 2,2000 + CORE 2, + JRST XCEED2 ;NO MORE, INFORM USER + JRST GETSE1 ;TRY AGAIN + +GETSE2: MOVEM SYMBOL ;SET START OF SYMBOL TABLE + HRLI SYMNUM + BLT @SYMTOP ;STORE SYMBOLS + PUSHJ PP,SRCHI ;INITIALIZE TABLE + MOVE [XWD CTIBUF+1,CTLSAV] ;SAVE CONTROL INPUT BUFFER + BLT CTLS1 ;FOR RESCAN ON PASS 2 +IFN FTDISK,<MOVSI (SIXBIT /DSK/) ;SET INPUT TO TAKE DSK AS DEV + MOVEM ACDEVX> + PUSHJ PP,COUTI ;INIT OUTPUT JUST IN CASE + PUSHJ PP,INSET ;GET FIRST INPUT FILE + + MOVE CS,INDIR ;SET UP NAME OF FIRST FILE + MOVEM CS,LSTFIL ;AS LAST PRINTED + SETZM LSTPGN + JRST ASSEMB ;START ASSEMBLY + FINIS: CLOSE BIN, ;DUMP BUFFER + TLNE FR,PNCHSW ;PUNCH REQUESTED? + PUSHJ PP,TSTBIN ;YES, TEST FOR ERRORS + RELEAS BIN, + CLOSE LST, + SOSLE OUTSW+0*LPTSW ;LPT TYPE OUTPUT? + PUSHJ PP,TSTLST ;YES, TEST FOR ERRORS + RELEAS LST, + RELEAS CHAR, + OUTPUT CTL,0 ;FLUSH TTY OUTPUT + SKIPE UNIVSN ;SKIP IF NOT ASSEMBLING UNIVERSAL + PUSHJ PP,UNISYM ;STORE SYMBOLS ETC. FIRST + JRST M ;RETURN FOR NEXT ASSEMBLY + INSET: MOVEI JOBFFI ;POINTER TO INPUT BUFFER + HRRM JOBFF ;INFORM SYSTEM OF BUFFER AREA + PUSHJ PP,NAME2 ;GET NEXT COMMAND NAME + JUMPE ACDEV,ERRNE ;ERROR IF NONE LEFT + MOVEM ACDEV,INDEV ;STORE DEVICE + MOVEM ACFILE,INDIR ;STORE FILE IN DIRECTORY + MOVEM ACPPN,INDIR+3 ;STORE PPN BEFORE WE LOSE IT + OPEN CHAR,INDEVI + JRST EINIT ;ERROR + DEVCHR ACDEV, ;TEST CHARACTERISTICS + TLNN ACDEV,MTABIT ;MAG TAPE? + JRST INSET3 ;NO + TLZN FR,MTAPSW ;FIRST MAG TAPE IN PASS 2? + JRST INSET1 ;NO + TLNN TIO,TIORW ;YES, REWIND REQUESTED? + SUB CS,RECCNT ;NO, PREPARE TO BACK-SPACE TAPE +INSET1: AOS RECCNT ;INCREMENT FILE COUNTER + ADDM CS,RECCNT ;UPDATE COUNT + TLZE TIO,TIOLE + MTAPE CHAR,10 + TLZE TIO,TIORW ;REWIND? + MTAPE CHAR,1 ;YES + JUMPGE CS,INSET2 + MTAPE CHAR,17 + MTAPE CHAR,17 + AOJL CS,.-1 + WAIT CHAR, + STATO CHAR,1B24 + MTAPE CHAR,16 +INSET2: SOJGE CS,.-1 + +INSET3: INBUF CHAR,1 + MOVEI ACPNTR,JOBFFI + EXCH ACPNTR,JOBFF + SUBI ACPNTR,JOBFFI + MOVEI ACDEL,NUMBUF*203+1 + IDIV ACDEL,ACPNTR + INBUF CHAR,(ACDEL) + JUMPN ACEXT,INSET4 ;TAKE USER'S EXTENSION IF NON-BLANK + MOVSI ACEXT,(SIXBIT /MAC/) ;BLANK, TRY .MAC FIRST + PUSHJ PP,INSETI +INSET4: PUSHJ PP,INSETI + JUMPE ACEXT,ERRCF ;ERROR IF ZERO + TLNE ACDEV,TTYBIT ;TELETYPE? + SETSTS CHAR,AL ;YES, CHANGE TO ASCII LINE + ;DO ALL ENTERS HERE FOR LEVEL D + SKIPE ENTERS ;HAVE ENTERS BEEN DONE ALREADY? + JRST ENTRDN ;YES, DON'T DO TWICE + SKIPN ACEXT,LSTDEV ;IS THERE A LIST DEVICE? + JRST LSTSE5 ;NO SO DON'T DO ENTER + SKIPN ACFILE,LSTDIR ;GET FILE NAME INCASE OF ERROR + JRST [DEVCHR ACEXT, + TLNE ACEXT,DIRBIT ;DOES IT HAVE A DIRECTORY? + JRST LSTSE4 ;YES, GIVE UP BEFORE HARM IS DONE + SKIPE ACFILE,INDIR ;USE INPUT FILE NAME + MOVEM ACFILE,LSTDIR ;TOO BAD IF ZERO ALSO + JRST LSTSE4] + HLLZ ACEXT,LSTDIR+1 ;EXT ALSO + MOVE ACPPN,LSTDIR+3 ;SAVE PPN + LOOKUP LST,LSTDIR ;PREVIOUS ONE STILL THERE + JRST LSTSE4 ;NO + SETZM LSTDIR ;YES,CLEAR NAME + MOVEM ACPPN,LSTDIR+3 ;RESET PPN + RENAME LST,LSTDIR + CLOSE LST, ;IGNORE FAILURE + MOVEM ACFILE,LSTDIR ;RESTORE NAME + HLLZS LSTDIR+1 ;BH 11/19/74 FOR DATE75. CLEAR RH. + SETZM LSTDIR+2 ;CLEAR PROTECTION AND DATE + MOVEM ACPPN,LSTDIR+3 ;SET PPN AGAIN +LSTSE4: + + ENTER LST,LSTDIR ;SET UP DIRECTORY + JRST ERRCL ;ERROR +LSTSE5: SKIPN ACEXT,BINDEV ;A BINARY DEVICE THEN ? + JRST ENTRDN ;NO + SKIPN ACFILE,BINDIR ;INCASE OF ERROR + JRST [DEVCHR ACEXT, + TLNE ACEXT,DIRBIT ;DOES IT HAVE A DIRECTORY? + JRST .+1 ;YES, GIVE UP BEFORE HARM IS DONE + SKIPE ACFILE,INDIR ;USE INPUT FILE NAME + MOVEM ACFILE,BINDIR ;TOO BAD IF ZERO ALSO + JRST .+1] + + HLLZS ACEXT,BINDIR+1 ;BH 11/19/74 DATE75. WAS HLLZ. + ENTER BIN,BINDIR ;ENTER FILE NAME + JRST ERRCB ;ERROR + +ENTRDN: SETOM ENTERS ;MAKE SURE ONLY DONE ONCE + MOVE CS,[POINT 7,DEVBUF] + PUSH PP,1 ;SAVE THE ACCS + PUSH PP,2 + PUSH PP,3 + SKIPN 2,INDIR ;GET INPUT NAME + JRST FINDEV ;FINISHED WITH DEVICE + SETZ 1, ;CLEAR FOR RECEIVING + LSHC 1,6 ;SHIFT ONE CHAR. IN + ADDI 1,40 ;FORM ASCII + IDPB 1,CS ;STORE CHAR. + JUMPN 2,.-4 ;MORE TO DO? + MOVEI 1," " ;SEPARATE BY TAB + IDPB 1,CS + HLLZ 2,INDIR+1 ;GET EXT + JUMPE 2,FINEXT ;NO EXT + SETZ 1, + LSHC 1,6 ;SAME LOOP AS ABOVE + ADDI 1,40 + IDPB 1,CS + JUMPN 2,.-4 +FINEXT: MOVEI 1," " + IDPB 1,CS ;SEPARATE BY TAB + LDB 1,[POINT 12,INDIR+2,35] ;GET DATE + LDB 2,[POINT 3,INDIR+1,20] ;BH 11/19/74 DATE75. + DPB 2,[POINT 3,1,23] ;BH 11/19/74 DATE75. + JUMPE 1,FINDEV ;NO DATE? + PUSHJ PP,DATOUT ;STORE IT + LDB 2,[POINT 11,INDIR+2,23] ;GET CREATION TIME + JUMPE 2,FINDEV ;NO TIME (DECTAPE) + MOVEI 1," " ;SEPARATE BY SPACE + IDPB 1,CS + PUSHJ PP,TIMOU1 ;STORE TIME +FINDEV: SETZ 1, + MOVEI 2," " ;FINAL TAB + IDPB 2,CS + IDPB 1,CS ;TERMINATE FOR NOW + POP PP,3 ;RESTORE ACCS + POP PP,2 + POP PP,1 + SKIPN PAGENO ;IF FIRST TIME THRU + JRST OUTFF ;START NEW PAGE + SETZM PAGENO ;ON NEW FILE, RESET PAGES + JRST OUTFF2 ;DON'T START NEW PAGE UNLESS FF + +INSETI: HLLZM ACEXT,INDIR+1 ;STORE EXTENSION + MOVE ACPPN,INDIR+3 ;SAVE PPN + LOOKUP CHAR,INDIR + SKIPA ACEXT,INDIR+1 ;GET ERROR CODE + JRST CPOPJ1 ;SKIP-RETURN IF FOUND + TRNE ACEXT,-1 ;ERROR CODE OF 0 IS FILE NOT FOUND + JRST ERRCF ;FILE THERE BUT NOT READABLE + SETZ ACEXT, ;CLEAR EXT AND TRY AGAIN + MOVEM ACPPN,INDIR+3 ;RESTORE PPN + POPJ PP, + REC2: MOVS [XWD CTIBUF+1,CTLSAV] ;RESCAN CONTROL (FROM PASS1 END STMNT) + BLT CTIBUF+2 ;INPUT BUFFER + MOVEI "?" + HRLM ACDELX ;FUDGE PREVIOUS DELIMITER + SETZM PASS2I + MOVE [XWD PASS2I,PASS2I+1] + BLT PASS2X-1 ;ZERO PASS2 VARIABLES + TLO FR,MTAPSW!LOADSW ;SET FLAGS + +GOTEND: MOVE INDEV ;GET LAST DEVICE + DEVCHR ;GET ITS CHARACTERISTICS + TLNE 4 ;TEST FOR DIRECTORY (DSK OR DTA) + JRST EOT ;YES, SO DON'T WASTE TIME + JRST .+3 ;NO, INPUT BUFFER BY BUFFER + IN CHAR, + JRST .-1 ;NO ERRORS + STATO CHAR,1B22 ;TEST FOR EOF + JRST .-3 ;IGNORE ERRORS + +EOT: PUSHJ PP,SAVEXS ;SAVE REGISTERS + PUSHJ PP,INSET ;GET THE NEXT INPUT DEVICE + HRROI RC,[SIXBIT /END OF PASS 1@/] ;ASSUME END OF PASS + TLZN FR,LOADSW ;ZERO ONLY ON END OF PASS 1 + HRROI RC,[SIXBIT /LOAD THE NEXT FILE@/] ;NOT END OF PASS + TLNN ACDEV,(1B13!1B15) ;WAS ALL THAT WORK NECESSARY? + PUSHJ PP,TYPMSG ;YES + +RSTRXS: MOVSI RC,SAVBLK ;SET POINTER + BLT RC,RC-1 ;RESTORE REGISTERS + MOVE RC,SAVERC ;RESTORE RC + POPJ PP, ;EXIT + +SAVEXS: MOVEM RC,SAVERC ;SAVE RC + MOVEI RC,SAVBLK ;SET POINTER + BLT RC,SAVBLK+RC-1 ;BLT ALL REGISTERS BELOW RC + POPJ PP, ;EXIT + NAME1: SETZM ACDEVX ;ENTRY FOR DESTINATION +NAME2: SETZB ACDEV,INDIR+2 ;ENTRY FOR SOURCE + MOVEI ACFILE,0 ;CLEAR FILE + HLRZ ACDEL,ACDELX ;GET PREVIOUS DELIMITER + SETZB TIO,CS + SETZB ACEXT,INDIR+3 ;RESET EXTENSION AND PROGRAM-NUMBER PAIR + SETZM PPN ;CLEAR PPN +NAME3: MOVSI ACPNTR,(POINT 6,AC0) ;SET POINTER + TDZA AC0,AC0 ;CLEAR SYMBOL + +SLASH: PUSHJ PP,SW0 +GETIOC: PUSHJ PP,TTYIN ;GET INPUT CHARACTER + CAIN C,"/" + JRST SLASH + CAIN C,"(" + JRST SWITCH + CAIN C,":" + JRST DEVICE + CAIN C,"." + JRST NAME + CAIE C,33 ;CHECK FOR THREE FLAVORS OF ALT-MODE + CAIN C,176 ;... + JRST TERM ;... + CAIG C,CR ;LESS THAN CR? + CAIGE C,LF ;AND GREATER THAN LF? + CAIN C,175 ;OR 3RD ALTMOD + JRST TERM ;YES +IFN FTDISK,<CAIN C,"[" + JRST PROGNP ;GET PROGRAMER NUMBER PAIR> + CAIN C,"=" ;EQUALS IS SAME AS LEFT ARROW + TRCA C,142 ;SO MAKE IT A "?" AND SKIP + CAIE C,"," + CAIN C,"?" + JRST TERM + CAIGE C,40 ;VALID AS SIXBIT? + JRST [CAIN C,"Z"-100 ;NO,IS IT ?Z + EXIT ;YES,EXIT FOR BATCH + JRST GETIOC] ;JUST IGNORE + SUBI C,40 ;CONVERT TO 6-BIT + TLNE ACPNTR,770000 ;HAVE WE STORED SIX BYTES? + IDPB C,ACPNTR ;NO, STORE IT + JRST GETIOC ;GET NEXT CHARACTER + +DEVICE: JUMPN ACDEV,ERRCM ;ERROR IF ALREADY SET + MOVE ACDEV,AC0 ;DEVICE NAME + JRST DEVNAM ;COMMON CODE + +NAME: JUMPN ACFILE,ERRCM ;ERROR IF ALREADY SET + MOVE ACFILE,AC0 ;FILE NAME +DEVNAM: MOVE ACDEL,C ;SET DELIMITER + JRST NAME3 ;GET NEXT SYMBOL + +TERM: JUMPE ACDEL,TERM1 ;IF NO PREVIOUS TERMINATOR, THEN FILENAME + CAIN ACDEL,"?" ;... + JRST TERM1 ;... + CAIE ACDEL,":" ;IF PREVIOUS DELIMITER + CAIN ACDEL,"," ;WAS COLON OR COMMA +TERM1: MOVE ACFILE,AC0 ;SET FILE + CAIN ACDEL,"." ;IF PERIOD, + HLLZ ACEXT,AC0 ;SET EXTENSION + HRLM C,ACDELX ;SAVE PREVIOUS DELIMITER + JUMPN ACDEV,.+2 ;IF DEVICE SET USE IT + SKIPA ACDEV,ACDEVX ;OTHERWISE USE LAST DEVICE + MOVEM ACDEV,ACDEVX ;AND DEVICE + MOVE ACPPN,PPN ;PUT PPN IN RIGHT PLACE +IFN FTDISK,<CAIN C,"!" ;IMPERATIVE? + POPJ PP, ;YES, DON'T ASSUME DEV + JUMPE ACFILE,CPOPJ ;IF THERE IS A FILE, + JUMPN ACDEV,.+2 ;BUT NO DEVICE + MOVSI ACDEV,(SIXBIT /DSK/) ;THEN ASSUME DISK> + POPJ PP, ;EXIT + ERRCM: HRROI RC,[SIXBIT /COMMAND ERROR@/] + JRST ERRFIN + +IFN FTDISK,<PROGNP: +PROGN1: HRLZM RC,PPN ;COMMA, STORE LEFT HALF +PROGN2: MOVEI RC,0 ;CLEAR AC +PROGN3: PUSHJ PP,TTYIN + CAIN C,"," + JRST PROGN1 ;STORE LEFT HALF + HRRM RC,PPN ;ASSUME TERMINAL + CAIN C,"]" + JRST GETIOC ;YES, RETURN TO MAIN SCAN + CAIL C,"0" ;CHECK FOR VALID NUMBERS + CAILE C,"7" + JRST ERRCM ;NOT VALID + LSH RC,3 ;SHIFT PREVIOUS RESULT + ADDI RC,-"0"(C) ;ADD IN NEW NUMBER + JRST PROGN3 ;GET NEXT CHARACTER> + SWITC0: PUSHJ PP,SW1 ;PROCESS CHARACTER +SWITCH: PUSHJ PP,TTYIN ;GET NEXT CHARACTER + CAIE C,")" ;END OF STRING? + JRST SWITC0 ;NO + JRST GETIOC ;YES + +SW0: PUSHJ PP,TTYIN +SW1: MOVEI C,-"A"(C) ;CONVERT FROM ASCII TO NUMERIC + CAILE C,"Z"-"A" ;WITHIN BOUNDS? (IS IT ALPHA?) + JRST ERRCM ;NO, ERROR + MOVE RC,[POINT 4,BYTAB] + IBP RC + SOJGE C,.-1 ;MOVE TO PROPER BYTE + LDB C,RC ;PICK UP BYTE + JUMPE C,ERRCM ;TEST FOR VALID SWITCH + CAIG C,SWTABT-SWTAB ;LEGAL ON SOURCE? + JUMPL PP,ERRCM ;NO, TEST FOR SOURCE + LDB RC,[POINT 4,SWTAB-1(C),12] + CAIN RC,IO + SKIPN CTLSAV ;IF PASS2 OR IO SWITCH, + XCT SWTAB-1(C) ;EXECUTE INSTRUCTION + POPJ PP, ;EXIT + TLZ IO,IOSALL ;TAKE CARE OF /X + POPJ PP, + +DEFINE HELP (TEXT)< + XLIST + ASCIZ ?TEXT? + LIST> + +HLPMES: HELP < +Switches are :- +/A advance one file +/B backspace one file +/C produce a cref listing +/E list macro expansions (LALL) +/F list in new format (.MFRMT) +/G list in old format (.HWFRMT) +/H type this text +/L reinstate listing (LIST) +/M suppress ascii in macro and repeat expansion (SALL) +/N suppress error printout on tty +/O set MLOFF pseudo-op +/P increase size of the pushdown stack +/Q suppress Q errors on the listing +/S suppress listing (XLIST) +/T rewind device +/X suppress all macro expansions (XALL) +/Z zero the directory +Switches A,B,C,T,W,X, and Z must immediately follow +the device or file to which they refer. +> + DEFINE SETSW (LETTER,INSTRUCTION) < INSTRUCTION +J= <"LETTER"-"A">-?D9*<I=<"LETTER"-"A">/?D9> + SETCOD \I,J> + + DEFINE SETCOD (I,J) + <BYTAB'I=BYTAB'I!<.-SWTAB>B<4*J+3>> + +BYTAB0= 0 ;INITIALIZE TABLE +BYTAB1= 0 +BYTAB2= 0 + +SWTAB: + SETSW Z,<TLO TIO,TIOCLD > + SETSW C,<TLZ FR,CREFSW > + SETSW P,<SOS PDP > +SWTABT: ;THE ABOVE SW'S ARE LEGAL ON OUTPUT ONLY + SETSW A,<ADDI CS,1 > + SETSW B,<SUBI CS,1 > + SETSW E,<TLZ IO,IOPALL!IOSALL > +IFN FORMSW,< SETSW F,<SETZM HWFMT> + SETSW G,<SETOM HWFMT>> + SETSW H,<OUTSTR HLPMES> + SETSW L,<TLZ IO,IOMSTR > + SETSW M,<TLO IO,IOPALL!IOSALL > + SETSW N,<HLLOS TYPERR > + SETSW O,<XCT OFFML > + SETSW Q,<TLO FR,ERRQSW > + SETSW S,<TLO IO,IOMSTR > + SETSW T,<TLO TIO,TIOLE > + SETSW W,<TLO TIO,TIORW > + SETSW X,<TLOA IO,IOPALL > + +BYTAB: ;BYTAB CONTAINS AN INDEX TO SWTAB + ;IT CONSIST OF 9 4BIT BYTES/WORD + ;OR ONE BYTE FOR EACH LETTER + + +BYTAB0 ;A-I BYTE = 1 THROUGH 17 = INDEX + +BYTAB1 ;J-R BYTE = 0 = COMMAND ERROR + +BYTAB2 ;S-Z + +IF2,<PURGE I,J,BYTAB0,BYTAB1,BYTAB2> + TTYIN: SOSGE CTIBUF+2 ;ENUF CHAR.? + JRST TTYERR ;NO + ILDB C,CTIBUF+1 ;GET CHARACTER + CAIE C," " ;SKIP BLANKS + CAIN C,HT ;AND TABS + JRST TTYIN + CAIN C,15 ;CR? + SETZM CTIBUF+2 ;YES,IGNORE REST OF LINE + CAIG C,"Z"+40 ;CHECK FOR LOWER CASE + CAIGE C,"A"+40 + POPJ PP, ;NO,EXIT + SUBI C,40 + POPJ PP, ;YES, EXIT + +TTYERR: SKIPN INDEV ;INPUT DEVICE SEEN? + JRST ERRCM ;NO, SO MISSING "?" +ERRNE: HRROI RC,[SIXBIT /?NO END STATEMENT ENCOUNTERED ON INPUT FILE@/] +ERRNE0: SKPINC V ;SEE IF WE CAN INPUT A CHAR. + JFCL ;BUT ONLY TO DEFEAT ?O + PUSHJ PP,TYPMSG ;OUTPUT IT + SKIPE LITLVL ;SEE IF IN LITERAL + SKIPN LITPG ;PAGE 0 MEANS NOT IN A LITERAL REALY + JRST ERRNE1 ;NO, TRY OTHERS + MOVE V,[XWD [SIXBIT /IN LITERAL@/],LITPG] + PUSHJ PP,PRNUM ;GO PRINT INFORMATION +ERRNE1: MOVEI V,0 ;CHECK FOR OTHER PLACES + SKIPE INDEF + MOVE V,[XWD [SIXBIT /IN DEFINE@/],DEFPG] + SKIPE INTXT + MOVE V,[XWD [SIXBIT /IN TEXT@/],TXTPG] + SKIPE INREP + MOVE V,[XWD [SIXBIT /IN CONDITIONAL OR REPEAT@/],REPPG] + SKIPE INCND + MOVE V,[XWD [SIXBIT /IN CONDITIONAL@/],CNDPG] + SKIPGE MACENL +ERRNE2: MOVE V,[XWD [SIXBIT /IN MACRO CALL@/],CALPG] + JUMPN V,ERRNE3 + SKIPN LITLVL ;HAD ONE PAGE NUMBER ALREADY + SKIPA V,[XWD [SIXBIT /@/],PAGENO] ;BETTER THAN NOTHING + JRST .+2 +ERRNE3: PUSHJ PP,PRNUM + HRROI RC,[SIXBIT /@/] ;WILL GET A RETURN + JRST ERRFIN + +ERRMS1: SIXBIT / ERRORS DETECTED@/ +ERRMS2: SIXBIT /?1 ERROR DETECTED@/ +ERRMS3: SIXBIT /NO ERRORS DETECTED@/ +EINIT: MOVE RC,[XWD ACDEV,[SIXBIT /NOT AVAILABLE@/]] + JRST ERRFIN + ERRCL: HRRZ RC,LSTDIR+1 ;GET LST DEV ERROR CODE + JRST .+2 ;GET ERROR MESSAGE +ERRCB: HRRZ RC,BINDIR+1 ;GET BIN DEV ERROR CODE + JUMPN RC,ERRTYP + SOJA RC,ERRTYP ;SPECIAL CASE IF ERROR CODE 0 + +ERRCF: HRRZ RC,INDIR+1 ;GET INPUT DEV ERROR CODE + HLLZ ACEXT,INDIR+1 ;SET UP EXT + +ERRTYP: CAIL RC,TABLND-TABLE ;IS ERROR CODE LEGAL? + SKIPA RC,TABLND ;NO, GIVE CATCH ALL MESSAGE + MOVE RC,TABLE(RC) ;YES, PICK UP MESSAGE + +ERRFIN: SKPINC C ;SEE IN WE CAN INPUT A CHAR. + JFCL ;BUT ONLY TO DEFEAT ?O + PUSHJ PP,CRLF + MOVEI C,"?" + PUSHJ PP,TYO + PUSHJ PP,TYPMS1 + CLOSE LST, ;GIVE USER A PARTIAL LISTING + CLOSE BIN,40 ;BUT NEVER A BUM REL FILE + JRST M + + [SIXBIT /(0) ILLEGAL FILE NAME@/],,ACFILE +TABLE: [SIXBIT /(0) FILE WAS NOT FOUND@/],,ACFILE + [SIXBIT /(1) NO DIRECTORY FOR PROJECT-PROGRAMMER NUMBER@/],,ACFILE + [SIXBIT /(2) PROTECTION FAILURE@/],,ACFILE + [SIXBIT /(3) FILE WAS BEING MODIFIED@/],,ACFILE + [SIXBIT /(4) RENAME FILE NAME ALREADY EXISTS@/],,ACFILE + [SIXBIT /(5) ILLEGAL SEQUENCE OF UUOS@/],,ACFILE + [SIXBIT /(6) BAD UFD OR BAD RIB@/],,ACFILE + [SIXBIT /(7) NOT A SAV FILE@/],,ACFILE + [SIXBIT /(10) NOT ENOUGH CORE@/],,ACFILE + [SIXBIT /(11) DEVICE NOT AVAILABLE@/],,ACFILE + [SIXBIT /(12) NO SUCH DEVICE@/],,ACFILE + [SIXBIT /(13) NOT TWO RELOC REG. CAPABILITY@/],,ACFILE + [SIXBIT /(14) NO ROOM OR QUOTA EXCEEDED@/],,ACFILE + [SIXBIT /(15) WRITE LOCK ERROR@/],,ACFILE + [SIXBIT /(16) NOT ENOUGH MONITOR TABLE SPACE@/],,ACFILE + [SIXBIT /(17) PARTIAL ALLOCATION ONLY@/],,ACFILE + [SIXBIT /(20) BLOCK NOT FREE ON ALLOCATION@/],,ACFILE + [SIXBIT /(21) CAN'T SUPERSEDE (ENTER) AN EXISTING DIRECTORY@/],,ACFILE + [SIXBIT /(22) CAN'T DELETE (RENAME) A NON-EMPTY DIRECTORY@/],,ACFILE + [SIXBIT /(23) SFD NOT FOUND@/],,ACFILE + [SIXBIT /(24) SEARCH LIST EMPTY@/],,ACFILE + [SIXBIT /(25) SFD NESTED TOO DEEPLY@/],,ACFILE + [SIXBIT /(26) NO-CREATE ON FOR SPECIFIED PATH@/],,ACFILE + +TABLND: [SIXBIT /(?) LOOKUP, ENTER, OR RENAME ERROR@/],,ACFILE + TYPMSG: PUSHJ PP,CRLF ;MOVE TO NEXT LINE +TYPMS1: HLRZ CS,RC ;GET FIRST MESSAGE + CAIE CS,-1 ;SKIP IF MINUS ONE + PUSHJ PP,TYPM2 ;TYPE MESSAGE + HRRZ CS,RC ;GET SECOND HALF + PUSHJ PP,TYPM2 + +CRLF: MOVEI C,CR ;OUTPUT CARRIAGE RETURN + PUSHJ PP,TYO + MOVEI C,LF ;AND LINE FEED + +TYO: SOSG CTOBUF+2 ;BUFFER FULL? + OUTPUT CTL,0 ;YES, DUMP IT + IDPB C,CTOBUF+1 ;STORE BYTE + CAIG C,FF ;FORM FEED? + CAIGE C,LF ;V TAB OR LINE FEED? + POPJ PP, ;NO + OUTPUT CTL,0 ;YES + POPJ PP, ;AND EXIT + +TYPM2: MOVSI C,(1B0) ;ANTICIPATE REGISTER WORD + CAIN CS,ACFILE ;FILE NAME ? + JRST [JUMPE ACEXT,.+1 ;YES, TEST FOR EXT + LSH ACEXT,-6 ;MAKE SPACE FOR "." + IOR ACEXT,[SIXBIT /. @/] + JRST TYPM2A] + CAIG CS,17 ;IS IT? + MOVEM C,1(CS) +TYPM2A: HRLI CS,(POINT 6,,) ;FORM BYTE POINTER + +TYPM3: ILDB C,CS ;GET A SIXBIT BYTE + CAIN C,40 ;"@"? + JRST TYO ;YES, TYPE SPACE AND EXIT + ADDI C,40 ;NO, FORM 7-BIT ASCII + PUSHJ PP,TYO ;OUTPUT CHARACTER + JRST TYPM3 + + XCEEDS: ADDI SX,2000 ;ADJUST SYMBOL POINTER +XCEED: PUSHJ PP,SAVEXS ;SAVE THE REGISTERS + HRRZ 1,JOBREL ;GET CURRENT TOP + MOVEI 0,2000(1) + CORE 0, ;REQUEST MORE CORE + JRST XCEED2 ;ERROR, BOMB OUT + HRRZ 2,JOBREL ;GET NEW TOP + +XCEED1: MOVE 0,0(1) ;GET ORIGIONAL + MOVEM 0,0(2) ;STORE IN NEW LOCATION + SUBI 2,1 ;DECREMENT UPPER + CAMLE 1,SYMBOL ;HAVE WE ARRIVED? + SOJA 1,XCEED1 ;NO, GET ANOTHER + MOVEI 1,2000 + ADDM 1,SYMBOL + ADDM 1,SYMTOP + PUSHJ PP,SRCHI ;RE-INITIALIZE SYMBOL TABLE + JRST RSTRXS ;RESTORE REGISTERS AND EXIT + +XCEED2: HRROI RC,[SIXBIT /INSUFFICIENT CORE@/] + JRST ERRNE0 +PDPERR: HRROI RC,[SIXBIT .PDP OVERFLOW, TRY /P@.] + JRST ERRNE0 + +PRNUM: HLRZ CS,V ;GET MESSAGE + PUSHJ PP,TYPM2 + MOVEI CS,[SIXBIT /ON PAGE@/] + PUSHJ PP,TYPM2 + MOVE AC0,(V) ;GET PAGE + PUSHJ PP,DP1 ;PRINT NUMBER + MOVEI C,40 + PUSHJ PP,TYO + SKIPN AC1,1(V) ;GET SEQ NUM IF THERE + POPJ PP, ;NO, RETURN + MOVEM AC1,OUTSQ + MOVEI CS,[SIXBIT /LINE@/] + PUSHJ PP,TYPM2 + MOVEI AC0,OUTSQ ;PRINT IT + OUTPUT CTL,0 ;TO MAKE THINGS PRINT IN RIGHT ORDER + DDTOUT AC0, + MOVEI C,40 + JRST TYO ;AND RETURN + +DP1: IDIVI AC0,?D10 + HRLM AC1,(PP) + JUMPE AC0,.+2 + PUSHJ PP,DP1 + HLRZ C,(PP) + ADDI C,"0" + JRST TYO + RIM0: TDO FR,AC0 ;SET RIM/RIM10 FLAG + TLNE FR,PNCHSW ;FORGET IT IF PUNCH RESET + SETSTS BIN,IB ;SET TO IMAGE BINARY MODE + POPJ PP, + +ROUT: EXCH CS,RIMLOC + SUB PP,[XWD 1,1] ;CLEAR OUT STACK WFW + TLNE FR,R1BSW + JRST ROUT6 + TLNN FR,RIM1SW + JRST ROUT1 + JUMPE CS,ROUT1 ;RIM10 OUTPUT + SUB CS,RIMLOC + JUMPE CS,ROUT1 + JUMPG CS,ERRAX + MOVEI C,0 + PUSHJ PP,PTPBIN + AOJL CS,.-1 +ROUT1: MOVSI C,(DATAI PTR,) ;RIM OUTPUT + HRR C,LOCO ;GET ADDRESS + TLNE FR,RIM1SW ;NO DATAI IF RIM10 + AOSA RIMLOC + PUSHJ PP,PTPBIN ;OUTPUT + MOVE C,AC0 ;CODE + AOSA LOCO ;INCREMENT CURRENT LOCATION + +OUTBIN: TLNN FR,RIMSW!RIM1SW!R1BSW ;EXIT IF RIM MODE +PTPBIN: TLNN FR,PNCHSW ;EXIT IF PUNCH NOT REQUESTED + POPJ PP, + SOSG BINBUF+2 ;TEST FOR BUFFER FULL + PUSHJ PP,DMPBIN ;YES, DUMP IT + IDPB C,BINBUF+1 ;DEPOSIT BYTE + POPJ PP, ;EXIT + + DMPBIN: OUT BIN,0 ;DUMP THE BUFFER + POPJ PP, ;NO ERRORS +TSTBIN: GETSTS BIN,C ;GET STSTUS BITS + TRNN C,ERRBIT ;ERROR? + POPJ PP, ;NO, EXIT + MOVE AC0,BINDEV ;YES, GET TAG + JRST ERRLST ;TYPE MESSAGE AND ABORT + +DMPLST: OUT LST,0 ;OUTPUT BUFFER + POPJ PP, ;NO ERRORS +TSTLST: GETSTS LST,C ;ANY ERRORS? + TRNN C,ERRBIT + POPJ PP, ;NO, EXIT + MOVE AC0,LSTDEV +ERRLST: MOVSI RC,[SIXBIT /OUTPUT WRITE-LOCK ERROR DEVICE@/] + TRNE C,IOIMPM ;IMPROPER MODE? + JRST ERRFIN ;YES + MOVSI RC,[SIXBIT /OUTPUT DATA ERROR DEVICE@/] + TRNE C,IODERR ;DEVICE DATA ERROR? + JRST ERRFIN ;YES + MOVSI RC,[SIXBIT /OUTPUT CHECKSUM OR PARITY ERROR DEVICE@/] + TRNE C,IODTER ;IS IT + JRST ERRFIN ;YES + MOVE CS,AC0 ;GET DEVICE + DEVCHR CS, ;FIND OUT WHAT IT IS + MOVSI RC,[SIXBIT /OUTPUT QUOTA EXCEEDED ON DEVICE@/] + TLNN CS,DSKBIT ;SKIP IF DSK OUTPUT + MOVSI RC,[SIXBIT /OUTPUT BLOCK TOO LARGE DEVICE@/] + JRST ERRFIN + +R1BDMP: SETCM CS,R1BCNT + JUMPE CS,R1BI + HRLZS C,CS + HRR C,R1BLOC + HRRI C,-1(C) + MOVEM C,R1BCHK + PUSHJ PP,PTPBIN + HRRI CS,R1BBLK +R1BDM1: MOVE C,0(CS) + ADDM C,R1BCHK + PUSHJ PP,PTPBIN + AOBJN CS,R1BDM1 + MOVE C,R1BCHK + PUSHJ PP,PTPBIN +R1BI: SETOM R1BCNT + PUSH PP,LOCO + POP PP,R1BLOC + POPJ PP, + +ROUT6: CAME CS,RIMLOC + PUSHJ PP,R1BDMP + AOS C,R1BCNT + MOVEM AC0,R1BBLK(C) + AOS LOCO + CAIN C,.R1B-1 + PUSHJ PP,R1BDMP + AOS RIMLOC + POPJ PP, + + + READ0: PUSHJ PP,EOT ;END OF TAPE + +READ: SOSGE IBUF+2 ;BUFFER EMPTY? + JRST READ3 ;YES +READ1: ILDB C,IBUF+1 ;PLACE CHARACTER IN C + MOVE CS,@IBUF+1 ;CHECK FOR SEQUENCE NUMBER + TRNN CS,1 + JRST READ1A + CAIN CS,1 ;CHECK FOR SPECIAL + MOVE CS,[<ASCII/ />+1] + MOVEM CS,SEQNO + MOVEM CS,SEQNO2 + MOVNI CS,4 + ADDM CS,IBUF+2 ;ADJUST WORD COUNT +REPEAT 4,< IBP IBUF+1> ;SKIP SEQ NO + PUSHJ PP,READ ;AND THE TAB + JRST READ ;GET NEXT CHARACTER + +READ1A: JUMPE C,READ ;IGNORE NULL + CAIN C,32 ;IF IT'S A "?Z" + MOVEI C,LF ;TREAT IT AS A "LF" + CAIE C,37 ;CONTROL ? + POPJ PP, + MOVEI C,"?" ;MAKE CONTROL-SHIFT ? VISIBLE + PUSHJ PP,RSW2 + MOVEI C,"?" + PUSHJ PP,RSW2 +READ2: PUSHJ PP,READ ;YES, TEST FOR LINE FEED + PUSHJ PP,RSW2 ;LIST IN ANY EVENT + CAIG C,FF ;IS IT ONE OF + CAIGE C,LF ;LF, VT, OR FF? + JRST READ2 ;NO + PUSHJ PP,OUTIM1 ;YES, DUMP THE LINE + JRST READ ;RETURN NEXT CHARACTER + +READ3: IN CHAR,0 ;GET NEXT BUFFER + JRST READ ;NO ERRORS + GETSTS CHAR,C + TRNN C,ERRBIT!2000 ;ERRORS? + JRST READ0 ;EOF + MOVE AC0,INDEV + MOVSI RC,[SIXBIT/ INPUT PHYSICAL END OF TAPE DEVICE@/] + TRNE C,2000 + JRST ERRFIN ;E-O-T + MOVSI RC,[SIXBIT /MONITOR DETECTED SOFTWARE INPUT ERROR DEVICE@/] + TRNE C,IOIMPM ;IMPROPER MODE? + JRST ERRFIN ;YES + MOVSI RC,[SIXBIT /INPUT DATA ERROR DEVICE@/] + TRNE C,IODERR ;DEVICE DATA ERROR? + JRST ERRFIN ;YES + MOVSI RC,[SIXBIT /INPUT CHECKSUM OR PARITY ERROR DEVICE@/] + TRNN C,IODTER + MOVSI RC,[SIXBIT /INPUT BLOCK TOO LARGE DEVICE@/] + JRST ERRFIN + + OUTAB2: PUSHJ PP,OUTTAB ;PRINT TWO TABS +OUTTAB: MOVEI C,HT +PRINT: CAIE C,CR ;IS THIS A CR? + CAIN C,LF ;OR LF? + JRST OUTCR ;YES, GO PROCESS + CAIN C,FF ;FORM FEED? + JRST OUTFF ;YES, FORCE NEW PAGE + JRST OUTL + +OUTCR: TRNN ER,ERRORS!LPTSW!TTYSW + POPJ PP, + MOVEI C,CR ;CARRIAGE RETURN, LINE FEED + PUSHJ PP,OUTL + SOSGE LPP ;END OF PAGE? + TLO IO,IOPAGE ;YES, SET FLAG + TRCA C,7 ;FORM LINE FEED AND SKIP + +OUTL: TLZN IO,IOPAGE ;NEW PAGE REQUESTED? + JRST OUTC ;NO + JUMP1 OUTC ;YES, BYPASS IF PASS ONE + PUSH PP,C ;SAVE C AND CS + PUSH PP,CS + PUSH PP,ER + TLNN IO,IOMSTR!IOPROG + HRR ER,OUTSW + TLNE IO,IOCREF ;IF DOING CREF OUTPUT NOW + TLNE FR,CREFSW ;AND CREFFING (JUST IN CASE) + JRST .+2 + PUSHJ PP,CLSC3 ;CLOSE IT OUT + HLLM IO,(PP) ;SAVE THIS NEW STATE OF IO + MOVEI C,.LPP + MOVEM C,LPP ;SET NEW COUNTER + MOVEI C,CR + PUSHJ PP,OUTC + MOVEI C,FF + PUSHJ PP,OUTC ;OUTPUT FORM FEED + MOVEI CS,TBUF + PUSHJ PP,OUTAS0 ;OUTPUT TITLE + MOVEI CS,VBUF + PUSHJ PP,OUTAS0 ;OUTPUT VERSION + MOVEI CS,DBUF + PUSHJ PP,OUTAS0 ; AND DATE + MOVE C,PAGENO + PUSHJ PP,DNC ;OUTPUT PAGE NUMBER + AOSG PAGEN. ;FIRST PAGE OF THIS NUMBER? + JRST OUTL1 ;YES + MOVEI C,"-" ;NO, PUT OUT MODIFIER + PUSHJ PP,OUTC + MOVE C,PAGEN. + PUSHJ PP,DNC +OUTL1: PUSHJ PP,OUTCR + MOVEI CS,DEVBUF + PUSHJ PP,OUTAS0 + HRRZ CS,SUBTTX ;SWITCH FOR SUB-TITLE + SKIPE 0(CS) ;IS THERE A SUB-TITLE? + PUSHJ PP,OUTTAB ;YES, OUTPUT A TAB + PUSHJ PP,SOUT20 ;OUTPUT ASCII WITH CARRIAGE RETURN + PUSHJ PP,OUTCR + POP PP,ER + POP PP,CS ;RESTORE REGISTERS + POP PP,C + +OUTC: TRNE ER,ERRORS!TTYSW + PUSHJ PP,TYO + TRNN ER,LPTSW + POPJ PP, +OUTLST: SOSG LSTBUF+2 ;BUFFER FULL? + PUSHJ PP,DMPLST ;YES, DUMP IT +COMMENT $ REG DOESN'T LIKE THIS FEATURE ANY MORE 9-5-72 +$ + IDPB C,LSTBUF+1 ;STORE BYTE + POPJ PP, ;EXIT + + PAGE0: PUSHJ PP,STOUTS ;PAGE PSEUDO-OP +OUTFF1: TLNE IO,IOCREF ;CURRENTLY DOING CREF? + TLNE IO,IOPROG ;AND NOT XLISTED? + JRST OUTFF ;NO + HRR ER,OUTSW + PUSHJ PP,CLSCRF + PUSHJ PP,OUTCR + HRRI ER,0 +OUTFF: TLO IO,IOPAGE +OUTFF2: SETOM PAGEN. + AOS PAGENO + POPJ PP, + +TIMOUT: IDIVI 2,?D60*?D1000 +TIMOU1: IDIVI 2,?D60 + PUSH PP,3 ;SAVE MINUTES + PUSHJ PP,OTOD ;STORE HOURS + MOVEI 3,":" ;SEPARATE BY COLON + IDPB 3,CS + POP PP,2 ;STORE MINUTES +OTOD: IDIVI 2,?D10 + ADDI 2,60 ;FORM ASCII + IDPB 2,CS + ADDI 3,60 + IDPB 3,CS + POPJ PP, + +DATOUT: IDIVI 1,?D31 ;GET DAY + ADDI 2,1 + CAIG 2,?D9 ;TWO DIGITS? + ADDI 2,7760*?D10 ;NO, PUT IN SPACE + PUSHJ PP,OTOD ;STORE DAY + IDIVI 1,?D12 ;GET MONTH + MOVE 2,DTAB(2) ;GET MNEMONIC + IDPB 2,CS ;DEPOSIT RIGHT MOST 7 BITS + LSH 2,-7 ;SHIFT NEXT IN + JUMPN 2,.-2 ;DEPOSIT IFIT EXISTS + MOVEI 2,?D64(1) ;GET YEAR + JRST OTOD ;STORE IT + +DTAB: "-NAJ-" + "-BEF-" + "-RAM-" + "-RPA-" + "-YAM-" + "-NUJ-" + "-LUJ-" + "-GUA-" + "-PES-" + "-TCO-" + "-VON-" + "-CED-" + SUBTTL MACHINE INSTRUCTION SEARCH ROUTINES +IFE OPHSH,< +OPTSCH: MOVEI RC,0 + MOVEI ARG,1B?L<OP1END-OP1TOP> ;SET UP INDEX + MOVEI V,1B?L<OP1END-OP1TOP>/2 ;SET UP INCREMENT + +OPT1A: CAMN AC0,OP1TOP(ARG) ;ARE WE POINTING AT SYMBOL? + JRST OPT1D ;YES, GET THE CODE + JUMPE V,POPOUT ;TEST FOR END + CAML AC0,OP1TOP(ARG) ;NO, SHOULD WE MOVE DOWN? + TDOA ARG,V ;NO, INCREMENT +OPT1B: SUB ARG,V ;YES, DECREMENT + ASH V,-1 ;HALVE INCREMENT + CAIG ARG,OP1END-OP1TOP ;ARE WE OUT OF BOUNDS? + JRST OPT1A ;NO, TRY AGAIN + JRST OPT1B ;YES, BRING IT DOWN A PEG +> + +IFN OPHSH,< +OPTSCH: MOVE ARG,AC0 ;GET SIXBIT NAME + TLZ ARG,400000 ;CLEAR SIGN BIT + IDIVI ARG,PRIME ;REM. GOES IN V + CAMN AC0,OP1TOP(V) ;ARE WE POINTING AT SYMBOL? + JRST OPT1D ;YES + SKIPN OP1TOP(V) ;TEST FOR END + POPJ PP, ;SYMBOL NOT FOUND + HLRZ RC,ARG ;SAVE LHS OF QUOTIENT + SKIPA ARG,RC ;GET IT BACK +OPT1A: ADDI ARG,(RC) ;INCREMENT ARG + ADDI V,(ARG) ;QUADRATIC INCREASE TO V + CAIL V,PRIME ;V IS MODULO PRIME + JRST [SUBI V,PRIME + JRST .-1] + CAMN AC0,OP1TOP(V) ;IS THIS IT? + JRST OPT1D ;YES + SKIPE OP1TOP(V) ;END? + JRST OPT1A ;TRY AGAIN + POPJ PP, ;FAILED +> +OPT1D: +IFN OPHSH,< SETZ RC, ;CLEAR RELOCATION + MOVE ARG,V ;GET INDEX IN RIGHT ACC.> + IDIVI ARG,4 ;ARG HAS INDEX USED IN OPTTAB + LDB V,OPTTAB(V) ;V HAS INDEX TO OPTTAB + CAIL V,700 ;PSEUDO-OP OR IO INSTRUCTION? + JRST OPT1G ;YES + ROT V,-?D9 ;LEFT JUSTIFY + HRRI V,OP ;POINT TO BASIC FORMAT +OPT1F: AOS 0(PP) ;SET FOR SKIP EXIT + MOVEI SDEL,%OP ;SET OP-CODE CROSS-REF FLAG + JRST CREF ;TEST AND OUTPUT, AC0=SYMBOL, V=VALUE + +OPT1G: JUMPG AC0,.+3 ;IF ".","$",OR "%" USE TABLE 1 + TLNN AC0,200000 ;PSEUDO-OP OR IO INST., TEST FOR PROPER TABLE + SKIPA V,OP2TAB-700(V) ;2ND TABLE, FIRST LETTER IS "A" TO "O" + MOVE V,OP1TAB-700(V) ;1ST TABLE, ..."P" TO "Z" + JRST OPT1F ;EXIT + +OPTTAB: +IFE OPHSH,< POINT 9,OP1COD-1(ARG),35> + POINT 9,OP1COD (ARG), 8 + POINT 9,OP1COD (ARG),17 + POINT 9,OP1COD (ARG),26 +IFN OPHSH,< POINT 9,OP1COD (ARG),35> + + IFDEF .XCREF,< .XCREF ;DON'T CREF THIS MESS> +IFE OPHSH,< + RELOC .-1 +OP1TOP: + RELOC + + IF1,<N1=0 + DEFINE X <N1=N1+1 ;>> + + IF2, < + N2=?D36 + CC=0 + RELOC OP1COD + RELOC +DEFINE X (SYMBOL,CODE) +<SIXBIT /SYMBOL/ +CC=CC+CODE?<N2=N2-9> +IFE N2, <OUTLIT>> + +DEFINE OUTLIT < + RELOC + +CC + RELOC +N2=?D36+<CC=0>>> + SYN X,XX ;JUST THE SAME MACRO> + +IFN OPHSH,< +DEFINE XX (SB,CD)<> ;A NUL MACRO +OP1TOP: IF1,< BLOCK PRIME> +IF1,<DEFINE X (SB,CD)<>> +IF2,< +DEFINE OPSTOR (RM)<.$'RM=.$'RM+<OPCODE?<9*<3-R&3>>>> + +DEFINE X (SB,CD)< +SXB=<SIXBIT /SB/> +Q=SXB&-1?-1/PRIME +R=SXB&-1?-1-Q*PRIME +H=Q?-22&777 +TRY=1 +OPCODE=CD +ITEM Q,\R +IFL PRIME-TRY,<PRINTX HASH FAILURE>> + +DEFINE ITEM (QT,RM)< +IFN .%'RM,<R=R+H +IFL PRIME-R,<R=R-R/PRIME*PRIME> +H=H+Q?-22&777 +IFGE PRIME-<TRY=TRY+1>,<ITEM Q,\R>> +IFE .%'RM,<.%'RM=SXB +OPSTOR \<R/4>>>> +IF1,< +DEFINE GETSYM (N)<.%'N=0> + +N=0 + XLIST +REPEAT PRIME,<GETSYM \N +N=N+1> +DEFINE GETSYM (N)<.$'N=0> +N=0 +REPEAT <PRIME/4+1>,<GETSYM \N +N=N+1> +> + LIST> + +;MACRO TO HANDLE KI10 OP-CODES +DEFINE XK (SB,CD) <> ;NUL MACRO + IFN OPHSH,< ;PUT THE MOST USED OP CODES FIRST +X JRST , 254 +X PUSHJ , 260 +X POPJ , 263 +X PUSH , 261 +X POP , 262 +X AOS , 350 +X ASCIZ , 701 +X CALLI , 047 +X EXTERN, 724 +X INTERN, 744 +X JFCL , 255 +X JSP , 265 +X MOVE , 200 +X MOVEI , 201 +X MOVEM , 202 +X SETZM , 402 +X SIXBIT, 717 +X SOS , 370 +X TLNE , 603 +X TLNN , 607 +X TLO , 661 +X TLZ , 621 +X TLZA , 625 +X TLZE , 623 +X TLZN , 627 +X TRNE , 602 +X TRNN , 606 +X TRZ , 620 +> + X ADD , 270 +X ADDB , 273 +X ADDI , 271 +X ADDM , 272 + +X AND , 404 +X ANDB , 407 +X ANDCA , 410 +X ANDCAB, 413 +X ANDCAI, 411 +X ANDCAM, 412 +X ANDCB , 440 +X ANDCBB, 443 +X ANDCBI, 441 +X ANDCBM, 442 +X ANDCM , 420 +X ANDCMB, 423 +X ANDCMI, 421 +X ANDCMM, 422 +X ANDI , 405 +X ANDM , 406 + +X AOBJN , 253 +X AOBJP , 252 + +X AOJ , 340 +X AOJA , 344 +X AOJE , 342 +X AOJG , 347 +X AOJGE , 345 +X AOJL , 341 +X AOJLE , 343 +X AOJN , 346 + +XX AOS , 350 +X AOSA , 354 +X AOSE , 352 +X AOSG , 357 +X AOSGE , 355 +X AOSL , 351 +X AOSLE , 353 +X AOSN , 356 +X ARG , 320 +IFN IIISW,<X ASCID , 771> +X ASCII , 700 +XX ASCIZ , 701 + +X ASH , 240 +X ASHC , 244 + +X ASUPPR, 705 +X BLKI , 702 +X BLKO , 703 +X BLOCK , 704 + +X BLT , 251 + +X BYTE , 707 + +XX CAI , 300 +X CAIA , 304 +X CAIE , 302 +X CAIG , 307 +X CAIGE , 305 +X CAIL , 301 +X CAILE , 303 +X CAIN , 306 + +X CALL , 040 +XX CALLI , 047 + +XX CAM , 310 +X CAMA , 314 +X CAME , 312 +X CAMG , 317 +X CAMGE , 315 +X CAML , 311 +X CAMLE , 313 +X CAMN , 316 + +XX CLEAR , 400 +XX CLEARB, 403 +XX CLEARI, 401 +XX CLEARM, 402 + +X CLOSE , 070 +X COMMEN, 770 + + +X CONI , 710 +X CONO , 711 +X CONSO , 712 +X CONSZ , 713 + +XX DATA. , 020 + +X DATAI , 714 +X DATAO , 715 +X DEC , 716 +X DEFINE, 717 +X DEPHAS, 720 + +X DFN , 131 + +X DIV , 234 +X DIVB , 237 +X DIVI , 235 +X DIVM , 236 + +X DPB , 137 + +X END , 721 + +X ENTER , 077 + +X ENTRY , 722 + +X EQV , 444 +X EQVB , 447 +X EQVI , 445 +X EQVM , 446 + +X EXCH , 250 + +X EXP , 723 +XX EXTERN, 724 + +X FAD , 140 +X FADB , 143 +X FADL , 141 +X FADM , 142 + +X FADR , 144 +X FADRB , 147 +X FADRI , 145 +X FADRM , 146 + +X FDV , 170 +X FDVB , 173 +X FDVL , 171 +X FDVM , 172 + +X FDVR , 174 +X FDVRB , 177 +X FDVRI , 175 +X FDVRM , 176 + +XX FIN. , 021 + +X FMP , 160 +X FMPB , 163 +X FMPL , 161 +X FMPM , 162 + + X FMPR , 164 +X FMPRB , 167 +X FMPRI , 165 +X FMPRM , 166 + +X FSB , 150 +X FSBB , 153 +X FSBL , 151 +X FSBM , 152 + +X FSBR , 154 +X FSBRB , 157 +X FSBRI , 155 +X FSBRM , 156 + +X FSC , 132 + +X GETSTS, 062 + + X HALT , 725 +X HISEG , 706 + +X HLL , 500 +X HLLE , 530 +X HLLEI , 531 +X HLLEM , 532 +X HLLES , 533 +X HLLI , 501 +X HLLM , 502 +X HLLO , 520 +X HLLOI , 521 +X HLLOM , 522 +X HLLOS , 523 +X HLLS , 503 +X HLLZ , 510 +X HLLZI , 511 +X HLLZM , 512 +X HLLZS , 513 + +X HLR , 544 +X HLRE , 574 +X HLREI , 575 +X HLREM , 576 +X HLRES , 577 +X HLRI , 545 +X HLRM , 546 +X HLRO , 564 +X HLROI , 565 +X HLROM , 566 +X HLROS , 567 +X HLRS , 547 +X HLRZ , 554 +X HLRZI , 555 +X HLRZM , 556 +X HLRZS , 557 + + X HRL , 504 +X HRLE , 534 +X HRLEI , 535 +X HRLEM , 536 +X HRLES , 537 +X HRLI , 505 +X HRLM , 506 +X HRLO , 524 +X HRLOI , 525 +X HRLOM , 526 +X HRLOS , 527 +X HRLS , 507 +X HRLZ , 514 +X HRLZI , 515 +X HRLZM , 516 +X HRLZS , 517 + +X HRR , 540 +X HRRE , 570 +X HRREI , 571 +X HRREM , 572 +X HRRES , 573 +X HRRI , 541 +X HRRM , 542 +X HRRO , 560 +X HRROI , 561 +X HRROM , 562 +X HRROS , 563 +X HRRS , 543 +X HRRZ , 550 +X HRRZI , 551 +X HRRZM , 552 +X HRRZS , 553 + +X IBP , 133 + +X IDIV , 230 +X IDIVB , 233 +X IDIVI , 231 +X IDIVM , 232 + +X IDPB , 136 + +X IF1 , 726 +X IF2 , 727 +X IFB , 730 +X IFDEF , 731 +X IFDIF , 732 +X IFE , 733 +X IFG , 734 +X IFGE , 735 +X IFIDN , 736 +X IFL , 737 +X IFLE , 740 +X IFN , 741 +X IFNB , 742 +X IFNDEF, 743 + +X ILDB , 134 + +X IMUL , 220 +X IMULB , 223 +X IMULI , 221 +X IMULM , 222 + +X IN , 056 +XX IN. , 016 +X INBUF , 064 +XX INF. , 026 +X INIT , 041 +X INPUT , 066 + +XX INTERN, 744 + +X IOR , 434 +X IORB , 437 +X IORI , 435 +X IORM , 436 + + +X IOWD , 745 +X IRP , 746 +X IRPC , 747 +X JCRY , 750 +X JCRY0 , 751 +X JCRY1 , 752 +X JEN , 753 + +XX JFCL , 255 + +X JFFO , 243 +X JFOV , 765 +X JOV , 754 + +X JRA , 267 +XX JRST , 254 + +X JRSTF , 755 + +X JSA , 266 +XX JSP , 265 +X JSR , 264 + +XX JUMP , 320 +XX JUMPA , 324 +X JUMPE , 322 +X JUMPG , 327 +X JUMPGE, 325 +X JUMPL , 321 +X JUMPLE, 323 +X JUMPN , 326 + +X LALL , 756 + +X LDB , 135 + +X LIST , 757 +X LIT , 760 +X LOC , 761 + +X LOOKUP, 076 + +X LSH , 242 +X LSHC , 246 +XK MAP , 257 +X MLOFF , 767 +X MLON , 766 +XX MOVE , 200 +XX MOVEI , 201 +XX MOVEM , 202 +X MOVES , 203 +X MOVM , 214 +X MOVMI , 215 +X MOVMM , 216 +X MOVMS , 217 +X MOVN , 210 +X MOVNI , 211 +X MOVNM , 212 +X MOVNS , 213 +X MOVS , 204 +X MOVSI , 205 +X MOVSM , 206 +X MOVSS , 207 + + +X MTAPE , 072 +XX MTOP. , 024 + +X MUL , 224 +X MULB , 227 +X MULI , 225 +X MULM , 226 +XX NLI. , 031 +XX NLO. , 032 + +X NOSYM , 762 + + X OCT , 763 +X OPDEF , 764 + +X OPEN , 050 + +X OR , 434 +X ORB , 437 +X ORCA , 454 +X ORCAB , 457 +X ORCAI , 455 +X ORCAM , 456 +X ORCB , 470 +X ORCBB , 473 + +X ORCBI , 471 +X ORCBM , 472 +X ORCM , 464 +X ORCMB , 467 +X ORCMI , 465 +X ORCMM , 466 +X ORI , 435 +X ORM , 436 + +X OUT , 057 +XX OUT. , 017 +X OUTBUF, 065 +XX OUTF. , 027 +X OUTPUT, 067 + + X PAGE , 700 +X PASS2 , 701 +X PHASE , 702 +X POINT , 703 + +XX POP , 262 +XX POPJ , 263 + +X PRGEND, 714 +X PRINTX, 704 +X PURGE , 705 + +XX PUSH , 261 +XX PUSHJ , 260 + +X RADIX , 706 +X RADIX5, 707 + +X RELEAS, 071 + +X RELOC , 710 +X REMARK, 711 + +X RENAME, 055 + +X REPEAT, 712 + +XX RESET., 015 +X RIM , 715 +X RIM10 , 735 +X RIM10B, 736 + +X ROT , 241 +X ROTC , 245 + +X RSW , 716 +XX RTB. , 022 +X SALL , 720 +X SEARCH, 721 + +X SETA , 424 +X SETAB , 427 +X SETAI , 425 +X SETAM , 426 +X SETCA , 450 +X SETCAB, 453 +X SETCAI, 451 +X SETCAM, 452 +X SETCM , 460 +X SETCMB, 463 +X SETCMI, 461 +X SETCMM, 462 +X SETM , 414 +X SETMB , 417 +X SETMI , 415 +X SETMM , 416 +X SETO , 474 +X SETOB , 477 +X SETOI , 475 +X SETOM , 476 +X SETSTS, 060 +X SETZ , 400 +X SETZB , 403 +X SETZI , 401 +XX SETZM , 402 + +XX SIXBIT, 717 + +XX SKIP , 330 +X SKIPA , 334 +X SKIPE , 332 +X SKIPG , 337 +X SKIPGE, 335 +X SKIPL , 331 +X SKIPLE, 333 +X SKIPN , 336 + +XX SLIST., 025 + +X SOJ , 360 +X SOJA , 364 +X SOJE , 362 +X SOJG , 367 +X SOJGE , 365 +X SOJL , 361 +X SOJLE , 363 +X SOJN , 366 + +XX SOS , 370 +X SOSA , 374 +X SOSE , 372 +X SOSG , 377 +X SOSGE , 375 +X SOSL , 371 +X SOSLE , 373 +X SOSN , 376 + +X SQUOZE, 707 + +X STATO , 061 +X STATUS, 062 +X STATZ , 063 + +X STOPI , 722 + +X SUB , 274 +X SUBB , 277 +X SUBI , 275 +X SUBM , 276 + +IF2,<IFE OPHSH,<SUBTL:>> +X SUBTTL, 723 +X SUPPRE, 713 +X SYN , 724 +X TAPE , 725 + + X TDC , 650 +X TDCA , 654 +X TDCE , 652 +X TDCN , 656 +X TDN , 610 +X TDNA , 614 +X TDNE , 612 +X TDNN , 616 +X TDO , 670 +X TDOA , 674 +X TDOE , 672 +X TDON , 676 +X TDZ , 630 +X TDZA , 634 +X TDZE , 632 +X TDZN , 636 + +X TITLE , 726 + +X TLC , 641 +X TLCA , 645 +X TLCE , 643 +X TLCN , 647 +X TLN , 601 +X TLNA , 605 +XX TLNE , 603 +XX TLNN , 607 +XX TLO , 661 +X TLOA , 665 +X TLOE , 663 +X TLON , 667 +XX TLZ , 621 +XX TLZA , 625 +XX TLZE , 623 +XX TLZN , 627 + + X TRC , 640 +X TRCA , 644 +X TRCE , 642 +X TRCN , 646 +X TRN , 600 +X TRNA , 604 +XX TRNE , 602 +XX TRNN , 606 +X TRO , 660 +X TROA , 664 +X TROE , 662 +X TRON , 666 +XX TRZ , 620 +X TRZA , 624 +X TRZE , 622 +X TRZN , 626 + +X TSC , 651 +X TSCA , 655 +X TSCE , 653 +X TSCN , 657 +X TSN , 611 +X TSNA , 615 +X TSNE , 613 + +X TSNN , 617 +X TSO , 671 +X TSOA , 675 +X TSOE , 673 +X TSON , 677 +X TSZ , 631 +X TSZA , 635 +X TSZE , 633 +X TSZN , 637 +X TTCALL, 051 +X TWOSEG, 731 +X UFA , 130 +X UGETF , 073 +X UJEN , 100 +X UNIVER, 737 +X USETI , 074 +X USETO , 075 + +X VAR , 727 + +XX WTB. , 023 + +X XALL , 732 + +X XCT , 256 + +X XLIST , 733 + +X XOR , 430 +X XORB , 433 +X XORI , 431 +X XORM , 432 + +X XPUNGE, 730 +X XWD , 734 + +X Z , 000 + +X .CREF , 740 +X .HWFRM, 742 +X .MFRMT, 743 +X .XCREF, 741 + + + IFN OPHSH,< ;NO-OPS, OLD MNEMONICS,F4 UUOS +X CAI , 300 +X CAM , 310 +X CLEAR , 400 +X CLEARB, 403 +X CLEARI, 401 +X CLEARM, 402 +X JUMP , 320 +X JUMPA , 324 +X SKIP , 330 +X RESET., 015 +X IN. , 016 +X OUT. , 017 +X DATA. , 020 +X FIN. , 021 +X RTB. , 022 +X WTB. , 023 +X MTOP. , 024 +X SLIST., 025 +X INF. , 026 +X OUTF. , 027 +X NLI. , 031 +X NLO. , 032 +> + IFE OPHSH,< +IF1, < BLOCK N1> +OP1END: -1B36 +OP1COD: BLOCK N1/4 + CC> +IFN OPHSH,< +IF2,< +DEFINE SETVAL (N)<EXP .%'N +PURGE .%'N> +N=0 +XLIST +REPEAT PRIME,<SETVAL \N +N=N+1> +LIST +> +OP1COD: IF1,< BLOCK <PRIME/4+1>> +IF2,< +DEFINE SETVAL (N)<EXP .$'N +PURGE .$'N> +N=0 +XLIST +REPEAT <PRIME/4+1>,<SETVAL \N +N=N+1> +> +LIST> + +IFDEF .CREF,< .CREF ;START CREFFING AGAIN> + SUBTTL PERMANENT SYMBOLS +SYMNUM: EXP LENGTH/2 ;NUMBER OF PERMANENT SYMBOLS +DEFINE P (A,B)< + SIXBIT /A/ + XWD SYMF!NOOUTF,B> + +P @, 0(SUPRBT) +P ??????, 0(SUPRBT) + +LENGTH= .-SYMNUM-1 ;LENGTH OF INITIAL SYMBOLS + +PRMTBL: ;PERMANENT SYMBOLS +P ADC, 24 +P APR, 0 +P CCI, 14 +P CDP, 110 +P CDR, 114 +P CPA, 0 +P CR, 150 +P DC, 200 +P DCSA, 300 +P DCSB, 304 +P DF, 270 +P DIS, 130 +P DLS, 240 +P DPC, 250 +P DSK, 170 +P DTC, 320 +P DTS, 324 +P LPT, 124 +P MDF, 260 +P MTC, 220 +P MTM, 230 +P MTS, 224 +P PAG, 10 +P PI, 4 +P PLT, 140 +P PTP, 100 +P PTR, 104 + +P TMC, 340 +P TMS, 344 +P TTY, 120 +P UTC, 210 +P UTS, 214 + XLIST + LIST +PRMEND: ;END OF PERMANENT SYMBOLS + + OPDEF ZL [Z LITF] ;INVALID IN LITERALS + OPDEF ZA [Z ADDF] ;INVALID IN ADDRESSES + OPDEF ZAL [Z ADDF!LITF] + +OP1TAB: + + ZA PAGE0 ;PAGE + ZAL PASS20 ;PASS2 + ZAL PHASE0 ;PHASE + Z POINT0 ;POINT + ZA PRNTX0 ;PRINTX + ZA PURGE0 ;PURGE + ZA RADIX0 ;RADIX + Z RADX50 ;RADIX50,SQUOZE + ZAL LOC0 (1) ;RELOC + ZAL REMAR0 ;REMARK + ZA REPEA0 ;REPEAT + ZA SUPRE0 ;SUPRESS + ZAL PSEND0 ;PRGEND + ZAL RIM0 (RIMSW) ;RIM + DATAI 0,IOP ;RSW + Z ASCII0 (1) ;SIXBIT + ZAL IOSET (IOPALL!IOSALL) ;SALL + ZAL SERCH0 ;SEARCH + ZA STOPI0 ;STOPI + ZA SUBTT0 (Z (POINT 7,,)) ;SUBTTL + ZA SYN0 ;SYN + ZAL TAPE0 ;TAPE + ZA TITLE0 (Z (POINT 7,,)) ;TITLE + ZAL VAR0 ;VAR + + Z XPUNG0 ;XPUNGE + ZAL TWSEG0 ;TWOSEGMENTS + ZAL XALL0 (IOPALL) ;XALL + ZAL IOSET (IOPROG) ;XLIST + Z XWD0 ;XWD + ZAL RIM0 (RIM1SW) ;RIM10 + ZAL RIM0 (R1BSW) ;RIM10B + ZA UNIV0 (Z (POINT 7,,)) ;UNIVERSAL + ZAL IORSET (IONCRF) ;.CREF + ZAL IOSET (IONCRF) ;.XCREF + ZA OFFORM ;.HWFRMT + ZA ONFORM ;.MFRMT + OP2TAB: + + Z ASCII0 (0) ;ASCII + Z ASCII0 (1B18) ;ASCIZ + BLKI IOP ;BLKI + BLKO IOP ;BLKO + ZAL BLOCK0 ;BLOCK + ZA SUPRSA ;ASUPPRESS + ZAL HISEG0 ;HISEG + Z BYTE0 ;BYTE + CONI IOP ;CONI + CONO IOP ;CONO + CONSO IOP ;CONSO + CONSZ IOP ;CONSZ + DATAI IOP ;DATAI + DATAO IOP ;DATAO + Z OCT0 (?D10) ;DEC + ZA DEFIN0 ;DEFINE + + ZAL DEPHA0 ;DEPHASE + ZAL END0 ;END + ZA INTER0 (INTF!ENTF) ;ENTRY + Z EXPRES ;EXP + ZA EXTER0 ;EXTERN + JRST 4,OP ;HALT + TLNN FR,IFPASS ;IF1 + TLNE FR,IFPASS ;IF2 + + TRNE AC0,IFB0 ;IFB + TLNE ARG,IFDEF0 ;IFDEF + Z IFIDN0 (0) ;IFDIF + SKIPE IF ;IFE + SKIPG IF ;IFG + SKIPGE IF ;IFGE + Z IFIDN0 (1) ;IFIDN + SKIPL IF ;IFL + + SKIPLE IF ;IFLE + SKIPN IF ;IFN + TRNN AC0,IFB0 ;IFNB + TLNN ARG,IFDEF0 ;IFNDEF + ZA INTER0 (INTF) ;INTERN + Z IOWD0 ;IOWD + Z IRP0 (0) ;IRP + Z IRP0 (400000) ;IRPC + + JFCL 6,OP ;JCRY + JFCL 4,OP ;JCRY0 + JFCL 2,OP ;JCRY1 + JRST 12,OP ;JEN + JFCL 10,OP ;JOV + JRST 2,OP ;JRSTF + ZAL IORSET (IOPALL!IOSALL) ;LALL + ZAL IORSET (IOPROG) ;LIST + ZAL LIT0 ;LIT + ZAL LOC0 (0) ;LOC + ZA OFFSYM ;NOSYM + Z OCT0 (?D8) ;OCT + ZA OPDEF0 ;OPDEF + JFCL 1,OP ;JFOV + ZA ONML ;MLON + ZA OFFML ;MLOFF + Z ASCII0 (3B19) ;COMMENT + Z ASCII0 (5B20) ;ASCID + +CALTBL: + ;USER DEFINED CALLI'S GO HERE + SIXBIT /LIGHTS/ ;-1 +CALLI0: SIXBIT /RESET/ ; 0 + SIXBIT /DDTIN/ ; 1 + SIXBIT /SETDDT/ ; 2 + SIXBIT /DDTOUT/ ; 3 + SIXBIT /DEVCHR/ ; 4 + SIXBIT /DDTGT/ ; 5 + SIXBIT /GETCHR/ ; 6 + SIXBIT /DDTRL/ ; 7 + SIXBIT /WAIT/ ;10 + SIXBIT /CORE/ ;11 + SIXBIT /EXIT/ ;12 + SIXBIT /UTPCLR/ ;13 + SIXBIT /DATE/ ;14 + SIXBIT /LOGIN/ ;15 + SIXBIT /APRENB/ ;16 + SIXBIT /LOGOUT/ ;17 + SIXBIT /SWITCH/ ;20 + SIXBIT /REASSI/ ;21 + SIXBIT /TIMER/ ;22 + SIXBIT /MSTIME/ ;23 + SIXBIT /GETPPN/ ;24 + SIXBIT /TRPSET/ ;25 + SIXBIT /TRPJEN/ ;26 + SIXBIT /RUNTIM/ ;27 + SIXBIT /PJOB/ ;30 + SIXBIT /SLEEP/ ;31 + SIXBIT /SETPOV/ ;32 + SIXBIT /PEEK/ ;33 + SIXBIT /GETLIN/ ;34 + SIXBIT /RUN/ ;35 + SIXBIT /SETUWP/ ;36 + SIXBIT /REMAP/ ;37 + SIXBIT /GETSEG/ ;40 + SIXBIT /GETTAB/ ;41 + SIXBIT /SPY/ ;42 + SIXBIT /SETNAM/ ;43 + SIXBIT /TMPCOR/ ;44 + SIXBIT /DSKCHR/ ;45 + SIXBIT /SYSSTR/ ;46 + SIXBIT /JOBSTR/ ;47 + SIXBIT /STRUUO/ ;50 + SIXBIT /SYSPHY/ ;51 + SIXBIT /FRECHN/ ;52 + SIXBIT /DEVTYP/ ;53 + SIXBIT /DEVSTS/ ;54 + SIXBIT /DEVPPN/ ;55 + SIXBIT /SEEK/ ;56 + SIXBIT /RTTRP/ ;57 + SIXBIT /LOCK/ ;60 + SIXBIT /JOBSTS/ ;61 + SIXBIT /LOCATE/ ;62 + SIXBIT /WHERE/ ;63 + SIXBIT /DEVNAM/ ;64 + SIXBIT /CTLJOB/ ;65 + SIXBIT /GOBSTR/ ;66 + 0 ;67 + 0 ;70 + SIXBIT /HPQ/ ;71 + SIXBIT /HIBER/ ;72 + SIXBIT /WAKE/ ;73 + SIXBIT /CHGPPN/ ;74 + SIXBIT /SETUUO/ ;75 + SIXBIT /DEVGEN/ ;76 + SIXBIT /OTHUSR/ ;77 + SIXBIT /CHKACC/ ;100 + SIXBIT /DEVSIZ/ ;101 + SIXBIT /DAEMON/ ;102 + SIXBIT /JOBPEK/ ;103 + SIXBIT /ATTACH/ ;104 + SIXBIT /DAEFIN/ ;105 + SIXBIT /FRCUUO/ ;106 + SIXBIT /DEVLNM/ ;107 + SIXBIT /PATH./ ;110 + +CALNTH==.-CALTBL +NEGCAL==CALLI0-CALTBL ;NUMBER OF NEGATIVE CALLI'S + +TTCTBL: SIXBIT /INCHRW/ ; 0 INPUT A CHAR. AND WAIT + SIXBIT /OUTCHR/ ; 1 OUTPUT A CHAR. + SIXBIT /INCHRS/ ; 2 INPUT A CHAR. AND SKIP + SIXBIT /OUTSTR/ ; 3 OUTPUT A STRING + SIXBIT /INCHWL/ ; 4 INPUT CHAR., WAIT, LINE MODE + SIXBIT /INCHSL/ ; 5 INPUT CHAR., SKIP, LINE MODE + SIXBIT /GETLCH/ ; 6 GET LINE CHARACTERISTICS + SIXBIT /SETLCH/ ; 7 SET LINE CHARACTERISTICS + SIXBIT /RESCAN/ ;10 RESET INPUT STREAM TO COMMAND + SIXBIT /CLRBFI/ ;11 CLEAR TYPEIN BUFFER + SIXBIT /CLRBFO/ ;12 CLEAR TYPEOUT BUFFER + SIXBIT /SKPINC/ ;13 SKIPS IF A CHAR. CAN BE INPUT + SIXBIT /SKPINL/ ;14 SKIPS IF A LINE CAN BE INPUT + SIXBIT /IONEOU/ ;15 OUTPUT AS AN IMAGE CHAR. + +TTCLTH==.-TTCTBL + SUBTTL USER-DEFINED SYMBOL SEARCH ROUTINES +MSRCH: PUSHJ PP,SEARCH ;PERFORM GENERAL SEARCH + POPJ PP, ;NOT FOUND, EXIT + JUMPG ARG,MSRCH2 ;SKIP-EXIT AND CROSS-REF IF FOUND + CAME AC0,1(SX) ;WE ARE LOOKING AT SYMBOL, TRY ONE ABOVE + POPJ PP, ;NO, EXIT + ADDI SX,2 ;YES, POINT TO IT + PUSHJ PP,SRCH5 ;LOAD REGISTERS +MSRCH2: AOSA 0(PP) ;SET SKIP-EXIT +QSRCH: JUMPL ARG,SSRCH3 ;BRANCH IF OPERAND + MOVEI SDEL,%MAC ;SET OPERATOR FLAG + TLZE IO,DEFCRS ;IS IT A DEFINITION? + MOVEI SDEL,%DMAC ;YES + JRST CREF ;CROSS-REF AND EXIT + +SSRCH: PUSHJ PP,SEARCH ;PERFORM GENERAL SEARCH + POPJ PP, ;NOT FOUND, EXIT + JUMPL ARG,SSRCH2 ;SKIP-EXIT AND CROSS-REF IF FOUND +SSRCH1: CAME AC0,-3(SX) ;WE ARE LOOKING AT MACRO, LOOK ONE SLOT BELOW + POPJ PP, ;NO DICE, EXIT + SUBI SX,2 ;YES, POINT TO IT + PUSHJ PP,SRCH5 ;LOAD REGISTERS +SSRCH2: AOS 0(PP) ;SET FOR SKIP-EXIT +SSRCH3: MOVEI SDEL,%SYM ;SET OPERAND FLAG + +CREF: TLNN IO,IONCRF ;NO CREFFING FOR THIS SYMBOL? + TLNE FR,P1!CREFSW ;PASS ONE OR CROSS-REF SUPPRESSION? + POPJ PP, ;YES, EXIT + EXCH SDEL,C ;PUT FLAG IN C, SACE C + PUSH PP,CS + TLNE IO,IOCREF ;HAVE WE PUT OUT THE 177,102 + JRST CREF3 ;YES + PUSH PP,C ;START OF CREF DATA + + REPEAT 0,< ;NEEDS CHANGE TO CREF + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,102 + PUSHJ PP,OUTLST + TLO IO,IOCREF ;WE NOW ARE IN THAT STATE + POP PP,C ;WE HAVE NOW +CREF3: JUMPE C,NOFLG ;JUST CLOSE IT + PUSHJ PP,OUTLST ;TYPE OF SYMBOL (%MAC,%DMAC,%SYM) + MOVSI CS,770000 ;COUNT CHRS + TDZA C,C ;STARTING AT 0 + LSH CS,-6 ;TRY NEXT + TDNE AC0,CS ;IS THAT ONE THERE? + AOJA C,.-2 ;YES + PUSHJ PP,OUTLST ;PRINT NUMBER OF SYMBOL CONSTITUENTS + MOVE CS,AC0 + +CREF2: MOVEI C,0 + LSHC C,6 + ADDI C,40 + PUSHJ PP,OUTLST ;THE ASCII SYMBOL + JUMPN CS,CREF2 + MOVEI C,%DSYM + TLZE IO,DEFCRS + PUSHJ PP,OUTLST ;MARK IT AS A DEFINING OCCURENCE +NOFLG: MOVE C,SDEL + POP PP,CS + POPJ PP, + +CLSCRF: TRNN ER,LPTSW + POPJ PP, ;LEAVE IF WE SHOULD NOT BE PRINTING +CLSCR2: MOVEI C,177 + PUSHJ PP,PRINT + TLZE IO,IOCREF ;WAS IT OPEN? + JRST CLSCR1 ;YES, JUST CLOSE IT + MOVEI C,102 ;NO, OPEN IT FIRST + PUSHJ PP,OUTLST ;MARK BEGINNING OF CREF DATA + MOVEI C,177 + PUSHJ PP,OUTLST +CLSCR1: MOVEI C,103 + JRST OUTLST ;MARK END OF CREF DATA + +CLSC3: TLZ IO,IOCREF + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,104 + JRST OUTLST ;177,104 CLOSES IT FOR NOW +> ;END OF REPEAT 0 + REPEAT 1,< ;WORKS WITH EXISTING CREF + TLNE IO,IOPAGE + PUSHJ PP,CRFHDR ;GET CORRECT SUBTTL + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,102 + PUSHJ PP,OUTLST + TLO IO,IOCREF ;WE NOW ARE IN THAT STATE + POP PP,C ;WE HAVE NOW +CREF3: PUSHJ PP,OUTLST ;TYPE OF SYMBOL (%MAC,%DMAC,%SYM) + MOVSI CS,770000 ;COUNT CHRS + TDZA C,C ;STARTING AT 0 + LSH CS,-6 ;TRY NEXT + TDNE AC0,CS ;IS THAT ONE THERE? + AOJA C,.-2 ;YES + PUSHJ PP,OUTLST ;PRINT NUMBER OF SYMBOL CONSTITUENTS + MOVE CS,AC0 + +CREF2: MOVEI C,0 + LSHC C,6 + ADDI C,40 + PUSHJ PP,OUTLST ;THE ASCII SYMBOL + JUMPN CS,CREF2 + MOVEI C,%DSYM + TLZE IO,DEFCRS + PUSHJ PP,OUTLST ;MARK IT AS A DEFINING OCCURENCE + MOVE C,SDEL + POP PP,CS + POPJ PP, + +IFN OPHSH,< +SUBTL: SIXBIT /SUBTTL/> +CRFHDR: CAME AC0,SUBTL ;IS FIRST SYMBOL "SUBTTL" + JRST CRFHD1 ;NO + HLLZ AC0,V + PUSHJ PP,SUBTT0 ;UPDATE SUBTTL + MOVE AC0,SUBTL ;RESTORE ARG. + MOVEI V,CPOPJ +CRFHD1: MOVEI C,0 + JRST OUTL + +CLSC3: +CLSCRF: TRNN ER,LPTSW + POPJ PP, ;LEAVE IF WE SHOULD NOT BE PRINTING +CLSCR2: TLZE IO,IOCREF ;FINISH UP LINE + JRST CLSCR1 + MOVEI C,0 + TLNE IO,IOPAGE ;NEW PAGE? + PUSHJ PP,OUTL ;YES,GIVE IT A ROUSING SENDOFF! + MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,102 + PUSHJ PP,OUTLST ;MARK BEGINNING OF CREF DATA +CLSCR1: MOVEI C,177 + PUSHJ PP,OUTLST + MOVEI C,103 + JRST OUTLST ;MARK END OF CREF DATA +> ;END OF REPEAT 1 + SEARCH: HLRZ SX,SRCHX + HRRZ SDEL,SRCHX + +SRCH1: CAML AC0,-1(SX) + JRST SRCH3 +SRCH2: SUB SX,SDEL + LSH SDEL,-1 + CAMG SX,SYMTOP + JUMPN SDEL,SRCH1 + JUMPN SDEL,SRCH2 + SOJA SX,SRCHNO ;NOT FOUND + +SRCH3: CAMN AC0,-1(SX) + JRST SRCH4 ;NORMAL / FOUND EXIT + ADD SX,SDEL + LSH SDEL,-1 + CAMG SX,SYMTOP + JUMPN SDEL,SRCH1 + JUMPN SDEL,SRCH2 + SOJA SX,SRCHNO ;NOT FOUND + +SRCH4: AOS 0(PP) ;SET FOR SKIP EXIT +SRCH5: MOVSI ARG,SUPRBT ;HE IS USING IT, TURN OFF BIT + ANDCAM ARG,(SX) ; IN THE TABLE +SRCH7: MOVE ARG,0(SX) ;FLAG AND VALUE TO ARG + LDB RC,RCPNTR ;POINT 1,ARG,17 + TLNE ARG,LELF ;CHECK LEFT RELOCATE + TLO RC,1 + HRRZ V,ARG + TLNE ARG,SPTR ;CHECK SPECIAL EXTESN POINTER + JRST SRCH6 + TLNE ARG,PNTF + MOVE V,0(ARG) ;36BIT VALUE TO V + JRST SRCHOK + +SRCH6: MOVE V,0(ARG) ;VALUE + MOVE RC,1(ARG) ;AND RELOC + TLNE RC,-2 ;CHECK AND SET EXTPNT + HLLM RC,EXTPNT + TRNE RC,-2 + HRRM RC,EXTPNT + JRST SRCHOK +SRCHNO: SKIPN UNISCH+1 ;ALLOWED TO SEARCH OTHER TABLES + POPJ PP, ;NO, JUST RETURN + AOS V,UNISCH ;GET NEXT INDEX TO TABLE + CAIE V,1 ;FIRST TIME IN + JRST SRCHN1 ;YES, SAVE SYMBOL INFO + HRLM SX,UNISCH ;SAVE SX AND SET FLAG + MOVE ARG,SRCHX ;SEARCH POINTER + MOVEM ARG,UNISHX ;TO A SAFE PLACE + HRR ARG,SYMBOL + HRL ARG,SYMTOP + MOVEM ARG,UNIPTR ;STORE ALSO +SRCHN1: MOVE V,UNISCH(V) ;GET TRUE INDEX + JUMPE V,SRCHKO ;IF ZERO ALL TABLE SCANNED + MOVE ARG,UNISHX(V) ;NEW SRCHX + MOVEM ARG,SRCHX ;SET IT UP + MOVE ARG,UNIPTR(V) ;SYMTOP,,SYMBOL + HRRZM ARG,SYMBOL + HLRZM ARG,SYMTOP + JRST SEARCH ;TRY AGAIN + +SRCHKO: SETZ ARG, ;CLEAR ARG SO ZERO STORED +SRCHOK: SKIPN UNISCH ;HAVE WE SEARCH OTHER TABLES + POPJ PP, ;NO, JUST RETURN +SYMBCK: HLRZ SX,UNISCH ;RESTORE SX + SETZM UNISCH ;CLEAR SYMBCK FLAG + PUSH PP,V ;SAVE AN AC + MOVE V,UNISHX ;SRCHX + MOVEM V,SRCHX ;RESTORE ORIGINAL + MOVE V,UNIPTR ;SYMTOP,,SYMBOL + HRRZM V,SYMBOL + HLRZM V,SYMTOP + JUMPE ARG,SRCHK2 ;TOTALLY UNDEFINED + PUSH PP,RC ;SAVE SOME ACCS + PUSH PP,ARG + PUSH PP,EXTPNT + SETZB ARG,EXTPNT ;CLEAR ALL SYMBOL DATA + SETZB RC,V + PUSHJ PP,INSERT ;INSERT SYMBOL IN TABLE + POP PP,EXTPNT ;RESTORE ACCS ETC. + POP PP,ARG + POP PP,RC + MOVEM ARG,(SX) ;SET FLAGS AND VALUE AS IT SHOULD BE +SRCHK2: POP PP,V + POPJ PP, ;RETURN + + INSERQ: TLNE ARG,UNDF!VARF +INSERZ: SETZB RC,V +INSERT: CAME AC0,-1(SX) ;ARE WE LOOKING AT MATCHING MNEMONIC? + JRST INSRT2 ;NO, JUST INSERT + JUMPL ARG,INSRT1 ;YES, BRANCH IF OPERAND + SKIPL 0(SX) ;OPERATOR, ARE WE LOOKING AT ONE? + JRST UPDATE ;YES, UPDATE + JRST INSRT2 ;NO, INSERT + +INSRT1: SKIPG 0(SX) ;OPERAND, ARE WE LOOKING AT ONE? + JRST UPDATE ;YES, UPDATE + SUBI SX,2 ;NO, MOVE UNDER OPERATOR AND INSERT +INSRT2: MOVE SDEL,SYMBOL + SUBI SDEL,2 + CAMLE SDEL,FREE + JRST INSRT3 + PUSHJ PP,XCEEDS + ADDI SDEL,2000 +INSRT3: MOVEM SDEL,SYMBOL ;MAKE ROOM FOR A TWO WORD ENTRY + HRLI SDEL,2(SDEL) + BLT SDEL,-2(SX) ;PUSH EVERYONE DOWN TWO LOACTIONS + AOS @SYMBOL ;INCREMENT THE SYMBOL COUNT + TLNN RC,-2 ;NEED SPECIAL? + TRNE RC,-2 ;LEFT OR RIGHT EXTERNAL? + JRST INSRT5 ;YES, JUMP + TLNN V,-1 ;SKIP IF V IS A 36BIT VALUE + JRST INSRT4 ;JUMP, ITS A 18BIT VALUE + AOS SDEL,FREE ;36BIT, SO GET A CELL FROM FREE CORE + CAML SDEL,SYMBOL ;MORE CORE NEEDED? + PUSHJ PP,XCEEDS ;YES + HRRI ARG,-1(SDEL) ;POINTER TO ARG + MOVEM V,0(ARG) ;36BIT VALUE TO FREE CORE + TLOA ARG,PNTF ;NOTE THAT ARG IS APOINTER, NOT A 18BIT VALUE + +INSRT4: HRR ARG,V ;18BIT VALUE TO ARG + DPB RC,RCPNTR ;FIX RIGHT RELOCATION + TLNE RC,1 + TLO ARG,LELF ;FIX LEFT RELOCATION +INSRT6: MOVEM ARG,0(SX) ;INSERT FLAGS AND VALUE. + MOVEM AC0,-1(SX) ;INSERT SYMBOL NAME. + PUSHJ PP,SRCHI ;INITILIAZE SRCHX + JRST QSRCH ;EXIT THROUGH CREF + +INSRT5: MOVEI SDEL,2 ;GET TWO CELLS FROM FREE CORE + ADDB SDEL,FREE + CAML SDEL,SYMBOL;MORE CORE NEEDED? + PUSHJ PP,XCEEDS ;YES + MOVEM RC,-1(SDEL) + HRRI ARG,-2(SDEL) ;POINTER TO ARG + MOVEM V,0(ARG) + TLO ARG,SPTR ;SET SPECIAL POINTER, POINTS TO TWO CELLS + JRST INSRT6 + REMOVE: SUBI SX,2 ;MOVE EVERYONE UP TWO LOCATIONS +REMOV1: MOVE 0(SX) + MOVEM 2(SX) ;OVERWRITE THE DELETED SYMBOL + CAME SX,SYMBOL ;SKIP WHEN DONE + SOJA SX,REMOV1 + ADDI SX,2 + MOVEM SX,SYMBOL + SOS 0(SX) ;DECREMENT THE SYMBOL COUNT + +SRCHI: MOVEI AC2,0 ;THIS CODE SETS UP SRCHX + FAD AC2,@SYMBOL + LSH AC2,-?D27 + MOVEI AC1,1000 + LSH AC1,-357(AC2) + HRRM AC1,SRCHX + LSH AC1,1 + ADD AC1,SYMBOL + HRLM AC1,SRCHX + POPJ PP, ;SRCHX=XWD <SYMTBL+LENGTH/2>,LENGTH/4 + + UPDATE: DPB RC,RCPNTR ;FIX RIGHT RELOCATION + TLNE ARG,SPTR ;SKIP IF THERE IS NO SPECIAL POINTER + JRST UPDAT4 ;YES, USE THE TWO CELLS + TLNN RC,-2 ;NEED TO CHANGE + TRNE RC,-2 ;ANY CURRENT EXTERNS? + JRST UPDAT5 ;YES ,JUMP + TLZ ARG,LELF ;CLEAR LELF + TLNE RC,1 ;LEFT RELOCATABLE? + TLO ARG,LELF ;YES, SET THE FLAG + TLNE ARG,PNTF ;WAS THERE A 36BIT VALUE? + JRST UPDAT2 ;YES, USE IT. + TLNE V,-1 ;NO,IS THERE A 36BIT VALUE? + JRST UPDAT1 ;YES, GET A CELL + HRR ARG,V ;NO, USE RH OF ARG +UPDAT3: MOVEM ARG,0(SX) ;OVERWRITE THE ONE IN THE TABLE + POPJ PP, ;AND EXIT + +UPDAT1: AOS SDEL,FREE ;GET ONE CELL + CAML SDEL,SYMBOL ;NEED MORE CORE? + PUSHJ PP,XCEEDS ;YES + HRRI ARG,-1(SDEL) ;POINTER TO ARG + TLO ARG,PNTF ;AND NOTE IT. +UPDAT2: TLNE ARG,EXTF ;IS THERE A EXTERNAL? + JRST UPDAT3 ;YES, - JUST SAVE A LOCATION + MOVEM ARG,0(SX) ;NO, OVERWRITE THE POINTER IN THE TABLE + MOVEM V,0(ARG) ;STORE VALUE AS A 36BIT VALUE + POPJ PP, ;AND EXIT + +UPDAT4: MOVEM ARG,0(SX) ;WE HAVE TWO CELLS, WE USE THEM + MOVEM V,0(ARG) ;SAVE AS 36BIT VALUE + MOVEM RC,1(ARG) ;SAVE RELOCATION BITS + POPJ PP, ;AND EXIT + +UPDAT5: MOVEI SDEL,2 ;THERE IS A EXTERNAL + ADDB SDEL,FREE ;SO WE NEED TWO LOACTIONS + CAML SDEL,SYMBOL ;NEED MORE CORE? + PUSHJ PP,XCEEDS ;YES + MOVEM RC,-1(SDEL) ;SAVE RELOCATION BITS + HRRI ARG,-2(SDEL) ;SAVE THE POINTER IN ARG + MOVEM V,0(ARG) ;SAVE A 36BIT VALUE + TLO ARG,SPTR ;SET SPECIAL PNTR FLAG + TLZ ARG,PNTF ;CLEAR POINTER FLAG + JRST UPDAT3 ;SAVE THE POINTER AND EXIT + + SUBTTL CONSTANTS + + +IFN FORMSW,< +HWFORM: BYTE (18) 1,1 +INFORM: BYTE (9) 1 (4) 1 (1) 1 (4) 1 (18) 1 +IOFORM: BYTE (3) 1 (7) 1 (3) 1 (1) 1 (4) 1 (18) 1 +BPFORM: BYTE (6) 1,1 (2) 1 (4) 1 (18) 1 +ASCIIF: BYTE (7) 1,1,1,1,1 +SXFORM: BYTE (6) 1,1,1,1,1,1 +> + + SUBTTL PHASED CODE +LSTFIL: BLOCK 1 + SIXBIT /@/ ;SYMBOL TO STOP PRINTING +TAG: BLOCK 1 + SIXBIT / + @/ +TABI: +IFE FORMSW,< BYTE (7) 0, 11, 11, 11, 11> +IFN FORMSW,< BYTE (7) 11,11, 11, 11, 11> +SEQNO: BLOCK 1 + ASCIZ / / +BININI: EXP B +BINDEV: BLOCK 1 + XWD BINBUF,0 +LSTINI: EXP AL +LSTDEV: BLOCK 1 + XWD LSTBUF,0 +INDEVI: EXP A +INDEV: BLOCK 1 + XWD 0,IBUF +DBUF: ASCIZ / TI:ME DY-MON-YR PAGE / +VBUF: ASCIZ / MACRO / ;MUST BE LAST LOCATIONS IN BLOCK + BLOCK 3 ;ALLOW FOR LONG TITLE + + + SUBTTL STORAGE CELLS + +PASS1I: + +RP: BLOCK 1 + +CTIBUF: BLOCK 3 +CTOBUF: BLOCK 3 +LSTBUF: BLOCK 3 +BINBUF: BLOCK 3 +IBUF: BLOCK 3 +LSTDIR: BLOCK 4 +BINDIR: BLOCK 4 +INDIR: BLOCK 4 + +ACDELX: ;LEFT HALF +BLKTYP: BLOCK 1 ;RIGHT HALF + +COUTX: BLOCK 1 +COUTY: BLOCK 1 +COUTP: BLOCK 1 +COUTRB: BLOCK 1 +COUTDB: BLOCK ?D18 + +ERRCNT: BLOCK 1 +FREE: BLOCK 1 +IFBLK: BLOCK .IFBLK +IFBLKA: BLOCK .IFBLK +LADR: BLOCK 1 +NCOLLS: BLOCK 1 +LIMBO: BLOCK 1 +LBUFP: BLOCK 1 +LBUF: BLOCK <.CPL+5>/5 + BLOCK 1 +VARHD: BLOCK 1 +VARHDX: BLOCK 1 + +LITAB: BLOCK 1 +LITABX: BLOCK 1 + BLOCK 1 +LITHD: BLOCK 1 +LITHDX: BLOCK 1 +LITCNT: BLOCK 1 +LITNUM: BLOCK 1 + +LOOKX: BLOCK 1 +NEXT: BLOCK 1 +OUTSW: BLOCK 1 +PDP: BLOCK 1 +RECCNT: BLOCK 1 +SAVBLK: BLOCK RC +SAVERC: BLOCK 1 +SBUF: BLOCK .SBUF/5 +SRCHX: BLOCK 1 +SUBTTX: BLOCK 1 +SVSYM: BLOCK 1 +SYMBOL: BLOCK 1 +SYMTOP: BLOCK 1 +SYMCNT: BLOCK 1 + +STPX: BLOCK 1 +STPY: BLOCK 1 +STCODE: BLOCK .STP +STOWRC: BLOCK .STP + +IFN FORMSW,< +STFORM: BLOCK .STP +FORM: BLOCK 1 +HWFMT: BLOCK 1 +FLDSIZ: BLOCK 1 +IOSEEN: BLOCK 1 +> +TABP: BLOCK 1 +TCNT: BLOCK 1 ;COUNT OF CHARS. LEFT IN TBUF +TBUF: BLOCK .TBUF/5 +DEVBUF: BLOCK 6 ;STORE NAME.EXT CREATION DATE AND TIME +TYPERR: BLOCK 1 +IONSYM: BLOCK 1 ;-1 SUPRESS LISTING OF SYMBOLS +PRGPTR: BLOCK 1 ;POINTER TO CHAIN OF PRGEND BLOCKS +ENTERS: BLOCK 1 ;-1 WHEN ENTERS HAVE BEEN DONE +UNIVSN: BLOCK 1 ;-1 WHEN A UNIVERSAL SEEN + + PASS2I: + +ABSHI: BLOCK 1 +HIGH: BLOCK 1 +ACDEVX: BLOCK 1 +CPL: BLOCK 1 +CTLSAV: BLOCK 1 +CTLS1: BLOCK 1 +EXTPNT: BLOCK 1 +INTENT: BLOCK 1 +INREP: BLOCK 1 +INDEF: BLOCK 1 +INTXT: BLOCK 1 +INCND: BLOCK 1 +CALNAM: BLOCK 1 +CALPG: BLOCK 1 +CALSEQ: BLOCK 1 +DEFPG: BLOCK 1 +DEFSEQ: BLOCK 1 +LITPG: BLOCK 1 +LITSEQ: BLOCK 1 +REPPG: BLOCK 1 +REPSEQ: BLOCK 1 +TXTPG: BLOCK 1 +TXTSEQ: BLOCK 1 +CNDPG: BLOCK 1 +CNDSEQ: BLOCK 1 +IRPCNT: BLOCK 1 +IRPARG: BLOCK 1 +IRPARP: BLOCK 1 +IRPCF: BLOCK 1 +IRPPOI: BLOCK 1 +IRPSW: BLOCK 1 +LITLVL: BLOCK 1 +LITLBL: BLOCK 1 ;NAME OF LABEL DEFINED INSIDE A LITERAL + +ASGBLK: BLOCK 1 +LOCBLK: BLOCK 1 + +LOCA: BLOCK 1 +LOCO: BLOCK 1 +RELLOC: BLOCK 1 +ABSLOC: BLOCK 1 +LPP: BLOCK 1 +MODA: BLOCK 1 +MODLOC: BLOCK 1 +MODO: BLOCK 1 +OUTSQ: BLOCK 2 +PAGEN.: BLOCK 1 +PPTEMP: BLOCK 1 +PPTMP1: BLOCK 1 +PPTMP2: BLOCK 1 + +REPCNT: BLOCK 1 +REPEXP: BLOCK 1 +REPPNT: BLOCK 1 +RPOLVL: BLOCK 1 +R1BCNT: BLOCK 1 +R1BCHK: BLOCK 1 +R1BBLK: BLOCK .R1B +R1BLOC: BLOCK 1 +RIMLOC: BLOCK 1 +TAGINC: BLOCK 1 +VECREL: BLOCK 1 +VECTOR: BLOCK 1 +.TEMP: BLOCK 1 ;TEMPORARY STORAGE +UNISCH: BLOCK .UNIV ;SEARCH TABLE FOR UNIVERSALS +SQFLG: BLOCK 1 +ARGF: BLOCK 1 +MACENL: BLOCK 1 +MACLVL: BLOCK 1 +MACPNT: BLOCK 1 +WWRXX: BLOCK 1 +RCOUNT: BLOCK 1 ;COUNT OF WORDS STILL TO READ IN LEAF +WCOUNT: BLOCK 1 ;COUNT OF WORDS STILL FREE IN LEAF +PASS2Z: ;ONLY CLEAR TO HERE ON PRGEND +LSTSYM: BLOCK 1 +PAGENO: BLOCK 1 +SEQNO2: BLOCK 1 +PASS2X: + + SUBTTL MULTI-ASSEMBLY STORAGE CELLS + +LSTPGN: BLOCK 1 +HDAS: BLOCK 1 +IFN FORMSW,<PHWFMT: BLOCK 1> +MACSIZ: BLOCK 1 ;INITIAL SIZE OF LOW SEG +UNISIZ: BLOCK 1 ;TOP OF BUFFERS AND STACKS +UNITOP: BLOCK 1 ;TOP OF UNIVERSAL SYMBOL TABLE +UNIVNO: BLOCK 1 ;NUMBER OF UNIVERSALS SEEN +UNITBL: BLOCK .UNIV ;TABLE OF UNIVERSAL NAMES +UNIPTR: BLOCK .UNIV ;TABLE OF SYMBOL POINTERS +UNISHX: BLOCK .UNIV ;TABLE OF SRCHX POINTERS + VAR ;CLEAR VARIABLES + +JOBFFI: BLOCK 203*NUMBUF+1 ;INPUT BUFFER PLUS ONE + + END BEG + + diff --git a/src/mtpser.mac b/src/mtpser.mac new file mode 100644 index 0000000..92a276f --- /dev/null +++ b/src/mtpser.mac @@ -0,0 +1,409 @@ + TITLE MTPSER - MAGNETIC TAPE SERVICE ROUTINES - NO DIRECTORIES + SUBTTL L. HANTMAN 8-9-65 + T=ITEM +; MAG TAPE SERVICE SUBROUTINES + +MTAPE1: PUSHJ PDP,WAIT1 + HRRZI IOS,776000 + ANDCAB IOS,DEVIOS(DEVDAT) + MOVEI T,(UUO) + PUSHJ PDP,MTAPE+1 + JRST UXIT + +MTAPE: PUSHJ PDP,WAIT1 + TLZ IOS,IODT + TRO IOS, IOACT ;SET ACTIVE + PUSHJ PDP,MTCHK2 ;CHECK IF MAG TAPE CONTROL AV + LSH T,^D8 ;MOVE TO FUNCTION + ANDI T,7400 ;MODE BITS + CAIN T,4000 ;LOGICAL EOT? + JRST MTLEOT + CAIE T,400 ;RWD? + JRST .+3 + CONSZ 224,4000 ;AT LOAD POINT? + JRST MTDMP4 + MOVEI TAC, TCF ;LOOK FOR TAPE CONTROL FREE 0 +MTGO1: HRRM TAC, MTCONO + HRRM TAC, MTCINT +MTGO1A: LDB TAC,PUNIT ;UNIT + DPB TAC,[POINT 3,T,31] ;UNIT + LDB TAC, [POINT 3, IOS,28] ;DENSITY PARITY + XORI TAC, 5 ;ODD, 556 + DPB TAC,[POINT 3,T,23] + MOVEI TAC,MTCCHN(T) ;CHANNEL + +MTGO: CONO 224, 0 ;DISABLE ALL INTERRUPTS + TRO TAC, 200 ;INHIBIT RETURN TO POOL + CONO 220,(TAC) ;COMMAND + SETZM MTEOFF# ;CLEAR EOF FLAG + HRRM DEVDAT,MTDEV# ;COMMAND, DVDB + HRLM TAC,MTDEV + TLNE IOS,IODT + CONO PI,2000+DCB + MOVEI TAC,MTPDUN +MTCONO: CONO 224,TCF+ERF ;ENABLE FLAGS + POPJ PDP, + +;READ +MTIN: TLZ IOS, IO ;READING + PUSHJ PDP,MTCHEK ;IS SYSTEM AVAILABLE? + SETCM TAC,@DEVIAD(DEVDAT) ;-SIZE-1 +MTIN1: HRRI TAC,@DEVIAD(DEVDAT) ;BUFFER ADDRESS, PROG INCLUDE + ADD TAC,[XWD 2,1] ;-SIZE+1,BUFFER+1 + MOVEI T,2400 ;READ +MTIN2: MOVE TAC1,[BLKI DC,4000+DCN+MTDC*10] + JRST MTINDC + +;IS SYSTEM AVAILABLE +MTCHEK: TRO IOS, IOACT ;SET ACTIVE + TLO IOS, IODT ;SET FOR DATA TRANSFER + MOVEM IOS, DEVIOS(DEVDAT) +MTCHK1: AOSE DCREQ + PUSHJ PDP,DCWAIT +MTCHK2: TLZ IOS, IOSEOF+IOBEG ;CLEAR SPACE TO EOF + MOVEM IOS, DEVIOS(DEVDAT) ;STORE BITS + AOSE MTREQ + PUSHJ PDP,MTWAIT + XCT MTGO1A ;UNIT + ROT TAC, 4 ;PUT IN UNIT POSITION + CONO 220, 200(TAC) ;HAS UNIT ONLY + CONO 224, SEL ;JAM UNIT INTO COMMAND BUFFER + CONSZ 224, SEL ;UNIT NOT READY? + POPJ PDP, 0 ;EXIT + ROT TAC, -4 ;UNIT IN TAC + HRRM DEVDAT, MTSTAK(TAC) ;PUT IN STACK + MOVE TAC1, [XWD MTCLOK,^D32] ;HALF SECOND + DPB TAC, [POINT 3,TAC1,23] ;STORE UNIT NUMBER + HRLM TAC1, MTSTAK(TAC) ;SAVE ACTUAL CLOCK REQUEST + CONO PI, 400 ;TURN OFF PI + IDPB TAC1, CLOCK ;REQUEST CLOCK RETURN TO MTCL + CONO PI, 200 ;TURN PI ON + SOSL MTREQ ;DECREMENT REQUEST COUNT, ANYONE LEFT W + SETOM MTAVAL ;YES,SET MAG TAPE AVAL + TLNN IOS, IODT ;NON-DATA TRANSFER? + JRST MTCHK3 ;YES + SOSL DCREQ ;NO,DECREMENT REQUEST COUNT,ANYONE LEFT + SETOM DCAVAL ;YES,SET DATA CONTROL AVAILAB +MTCHK3: PUSHJ PDP, WSYNC ;REQUEST WAIT + MOVE IOS, DEVIOS(DEVDAT) ;LOAD STATUS + TLNN IOS, IODT ;DATA TRANFER? + JRST MTCHK2+2 ;CHECK FOR MT AVAILABLE ONLY + JRST MTCHK1 ;CHECK FOR MT AND DC AVAIALABL + +;WRITE +MTOUT: TLO IOS, IO ;WRITING + PUSHJ PDP,MTCHEK + CONSZ 224,200 ;IS FILE PROTECT RING IN? + JRST MTOUTE ;NO, ERROR CANT WRITE. CROCK!! +MTOUT1: MOVEI TAC,@DEVOAD(DEVDAT) ;BUFFER ADDRESS, PROG INCLUDE + MOVN TAC1,1(TAC) ;-WD COUNT + HRL TAC,TAC1 ;-WD CMT,BUFFER + AOJG TAC,MTNOTI ;BUFFER+1, TEST FOR ZERO WORD COUNT +MTOUT2: MOVE TAC,[BLKO DC,3400+DCN+MTDC*10] + MOVEI T,1000 ;WRITE +MTINDC: MOVEM TAC,MTDCCN# ;BLKO POINTER + MOVEM TAC,DCWRD# + HRRZM TAC1, MDCSAV# ;SAVE DC COMMAND + HRRI TAC1,DCWRD + MOVEM TAC1,40+<2*DCN> ;BLK COMMAND + MOVE TAC1,[JSR MTDCND] + MOVEM TAC1,41+<2*DCN> + CONO PI,1100 + CONO DC, @MDCSAV ;DATA CONTROL COMMAND + MOVEI TAC, ERF + JRST MTGO1 + +MTOUTE: TRO IOS,IODERR ;WRITE LOCK, DEVICE ERROR + PUSHJ PDP,MTEND1 + JRST UXIT + +MTCLS: LDB TAC,PIOMOD ;MODE + CAIG TAC, 16 ;DUMP MODE + JRST MTCLS1 ;CLOSE OUTPUT + TLNE IOS,IO ;INPUT? + JRST MTCLS1+1 ;WRITE EOFS + MOVEI T,16 ;SPACE TO EOF + JRST MTAPE ;GOES BACK TO UUO LEVEL +MTCLS1: PUSHJ PDP,OUT + MOVEI T,3 ;WRITE IOF + PUSHJ PDP, MTAPE + MOVEI T,3 ;WRITE EOF + PUSHJ PDP, MTAPE + MOVEI T,7 ;BSP + JRST MTAPE +MTDISP: POPJ PDP, ;RELEASE + JRST MTCLS ;CLOSE + JRST MTOUT ;WRITE + JRST MTIN ;READ + JRST CUXIT1 ;ENTER IN DIRECTORY + JRST CUXIT1 ;LOOKUP IN DIRECTORY + JRST MTDMPO ;DUMP OUT + JRST MTDMPI ;DUMP IN + JRST UXIT ;SETO + JRST UXIT ;SETI + JRST UXIT ;GETF + +MTCINI: MOVN TAC, MTREDO ;REPEAT COUNTER + HRREM TAC, MTERCN ;RESET ERROR CNTR + CONO 224,0 ;CLEAR ENABLES + HLLZS MTCINT ;CLEAR CONSO + POPJ PDP, + + + + +;BLK COUNTED OUT + +MTDCND: 0 + CONO PI,DCB+1000 ;SHUT OF DC CHANNEL + JEN @MTDCND + + +;FLAG FROM TAPE CONTROL. SET UP BY INSERT MACRO +MTCINT: CONSO 224,TCF+ERF + JRST . + JSR MTCSAV ;SAVE ACS + HRRZ DEVDAT,MTDEV ;DVBD + LDB PROG,PJOBN; JOB NUMBER + HRRZ PROG, JBTADR(PROG) + MOVE IOS, DEVIOS(DEVDAT) + CONSO 224,TCF ;TAPE CONTROL FREE + JRST MTEOR +MTIDSP: JRST MTPDUN ;POINTS TO MTERR FOR ERROR + JRST MTBSP ;AFTER BACKSPACE + JRST MTERR ;IF ERROR FOUND +MTPDUN: TLNN IOS,IODT + JRST MTNIO2 + LDB TAC,PIOMOD + CAIL TAC,16 + JRST MTEND1 ;DUMP + TLNE IOS,IO + JRST MTNOTI ;WRITING + SKIPE MTEOFF ;NOT EOF? + JRST MTEOF +MTINDN: MOVEI TAC,@DEVIAD(DEVDAT) ;BUFFER ADDRESS + MOVN TAC1,MTDCCN ;WD CNT-1 + AOBJN TAC1, .+1 ;WD CNT + HLLZS TAC1 ;CLR RT HALF + ADD TAC1,DCWRD ;ADD CURRENT COUNT=NO. OF WDS + HLRM TAC1,1(TAC) ;STORE AT WORD COUNT + PUSHJ PDP,ADVBFF + JRST .+2 ;NEXT BUFFER FULL + JRST MTCON ;CONTINUE MODE +MTEND1: CONO DC, 0 ;TURN OFF DATA CONTROL + SOSL DCREQ ;DECREMENT REQUEST COUNT, ANYONE LEFT? + SETOM DCAVAL ;YES, SET FLAG FOR CLOCK +MTNIO: SOSL MTREQ + SETOM MTAVAL ;YES, SET FLAG FOR CLOCK + CONSZ 224,10000 ;END OF TAPE? + TRO IOS, IOTEND ;SET END OF TAPE INDICATION + TRZ IOS, IOBOT ;CLR LOAD POINT INDICATION + CONSZ 224, 4000 ;LOAD POINT? + TRO IOS, IOBOT ;SET LOAD POINT INDICATION + CONSZ 224, 20000 ;TAPE REWINDING? + TRO IOS, IOBOT ;SET LOAD POINT INDICATION + TLZE IOS, IOW ;CLEAR WAIT + PUSHJ PDP, SETIOD ;REQUEST WAIT SATISFIED + TRZ IOS, IOACT ;CLEAR ACTIVE + MOVEM IOS, DEVIOS(DEVDAT) ;RESTORE BITS + CONO 224,0 ;CLEAR MAG TAPE ENABLES + HLLZS MTCINT ;CLEAR CONSO + MOVN TAC, MTREDO ;REPEAT COUNTER + HRREM TAC, MTERCN# + POPJ PDP, ;DISMISS INTERRUPT OR RETURN TO CALLER + +MTNOTI: PUSHJ PDP,ADVBFE ;WRITING + JRST MTEND1 +MTCON: TRNE IOS,IOCON ;CONTINUOUS? + JRST MTEND1 ;STOP TAPE + CONSZ 224,10000 ;END OF TAPE? + JRST MTEND1 ;STOP TAPE + CONO DC,0 ;CLEAR DATA CONTROL + TLZE IOS,IOW + PUSHJ PDP,SETIOD + MOVEM IOS,DEVIOS(DEVDAT) + MOVN TAC,MTREDO + HRREM TAC,MTERCN + TLNN IOS,IO ;INPUT OR OUTPUT? + JRST MTIN1 ;CALL INPUT SUBROUTINE + JRST MTOUT1 ;CALL OUTPUT SUBROUTINE +MTNIO2: HLRZ TAC,MTDEV ;COMMAND + ANDI TAC,7400 + CAIE TAC, 3000 ;SPACE ONE RECORD + JRST MTNIO ;EXIT + CONSZ 224, 400 ;EOF? + TLO IOS, IOSEOF ;SET EOF DETECTED + JRST MTNIO ;EXIT +MTEOF: TLO IOS, IOEND + JRST MTEND1 +MTEOR: CONSZ 224,LPE+CPE ;IF END OF RECORD CHECK PARIT + SOS MTIDSP ;IF ERROR CAUSE INTERRUPT TO + ;ERROR ROUTIE VIA TCF + CONSZ 224, 400 ;EOF? + SETOM MTEOFF ;SET EOF FLAG +MTIGN: CONO 224, TCF ;IF ERF, CAUSE INTERRUPT TO D + ;PATCH TABLE, DISABLE ERF FLA + MOVEM TAC, MTDCND ;SAVE TAC + MOVEI TAC, TCF ;LOOK FOR TCF ONLY + HRRM TAC, MTCINT ;SET CONSO + MOVE TAC,MTDCND ;RESTORE TAC + JRST MTCRET ;DISMISS AND RETURN VIA TCF + +MTERR: HLRZ TAC,MTDEV ;COMMAND + ANDI TAC,7400 + CAIN TAC,2400 ;READ? + JRST .+3 + CAIN TAC,1000 ;WRITE + JRST MTIGN2 ;IGNORE IF NOT RD OR WRITE + TRNN IOS, IONRCK ;RE-DO? + AOSL MTERCN ;THIRD ERROR? + JRST MTERR2 ;TRIPLE ERROR + HLRZ TAC,MTDEV ;COMMAND + ANDI TAC,770377 + CONO 220,3400(TAC) ;BSP + SOS MTIDSP + JRST MTIGN + +MTERR2: TRO IOS, IODERR ;DEVICE ERROR + JRST MTPDUN + +MTBSP: MOVE TAC,MTDCCN ;POINTER + MOVEM TAC,DCWRD ;RESET POINTER WORD + CONI DC,TAC ;SAVE IN/OUT, PACK MD. DEV NU + ;PRIORITY + ANDI TAC,777 + ADDI TAC,3000 ;MAKE WRITE + TRNN TAC,400 ;WAS IT WRITING? + ADDI TAC,1000 ;MAKE READ + CONO DC,(TAC) ;REISSUE CONO + HLRZ TAC,MTDEV ;COMMAND + CONSO 224,XNC ;WAIT FOR XNC + JRST .-1 ;SHOULD ADD A COUNT(RUNAWAY TAPE TURNED + CONO 220,(TAC) ;REISSUE RD OR WRITE + SETZM MTEOFF ;CLR EOF FLAG + CONO PI,2000+DCB ;TURN ON CHANNEL + MOVEI TAC,MTPDUN ;RESET SWITCH + HRRM TAC,MTIDSP + MOVEI TAC, ERF + HRRM TAC, MTCINT + CONO 224, ERF + JRST MTCRET ;ENABLE PROPER FLAGS +MTIGN2: AOS MTIDSP ;RESET DISPATCH SWITCH + JRST MTIGN + +;NEED TO TRY WRITING LONG RECORD GAP ON OUTPUT(ONLY) AND TRY +;ONCE MORE AT NEW SPOT ON TAPE IF TRIPLE ERROR + + +XNC=40000 ;TRANSFER NEW COMMAND +MTDC=2 ;MAG TAPE DATA CONTROL DEVICE NO. +TCF=1 ;TAPE CONTROL FREE +ERF=4 ;END OF RECORD FLAG +LPE=20 ;LONG. PARITY ERROR +CPE=10 ;CHAR. PARITY ERROR +DCB=100 ;DATA CHANNEL NUMBER +DCN=1 ;DATA CHANNEL NUMBER +SEL=2 ;UNIT TO COMMAND BUFFER +IOSEOF=4000 ;SPACING ONE RECORD FORWARD FOUND EOF +IOTEND=2000 ;EOT INDICATION +IONRCK=100 ;DO NOT RE-TRY ON ERRORS +IOBOT=4000 ;TAPE AT LOAD POINT +IODT=10000 ;A 1 FOR A DATA TRANFER TYPE COMMAND +EXTERNAL UXIT, ADVBFF, ADVBFE, DCREQ, DCWAIT, MTCSAV +EXTERNAL MTCRET, DCAVAL, MTAVAL, MTCCHN, MTCCHL, MTREQ +EXTERNAL MTWAIT,OUT,SETIOD,CLOCK,CUXIT1 +EXTERNAL WSYNC,USRREL,WAIT1,ADRERR,PUNIT,PIOMOD,PJOBN +EXTERNAL JBTADR +ENTRY MTDISP +INTERNAL MTCINT,MTAPE1,MTCINI +;CLOCK INTERRUPT, UNIT IN TAC +MTCLOK: HRRZ DEVDAT, MTSTAK(TAC) ;DVDB + ROT TAC, 4 ;PUT UNIT IN SEL BITS + CONO 220, 200(TAC) ;UNIT ONLY + CONO 224, SEL ;SEL UNIT + CONSZ 224, SEL ;UNIT NOT READY? + JRST MTCLK2 ;UNIT READY + ROT TAC, -4 ;FOR INDEXING PURPOSES + HLR TAC1, MTSTAK(TAC) ;CLOCK REQUEST + HRLI TAC1, MTCLOK ;GET CLOCK REQUEST + CONO PI, 400 ;TURN OFF PI + IDPB TAC1, CLOCK ;STORE CLOCK REQUESTED + CONO PI, 200 ;TURN ON PI + POPJ PDP, 0 ;EXIT +MTCLK2: MOVE IOS, DEVIOS(DEVDAT) + TLZE IOS,IOW + PUSHJ PDP, SETIOD + MOVEM IOS, DEVIOS(DEVDAT) + POPJ PDP, 0 +MTSTAK: BLOCK ^D8 + + +;LOGICAL END OF TAPE LOOP +MTLEOT: CONSZ 224, 4000 ;TAPE NOT AT LOAD POINT? + JRST MTEOT2 ;AVOID BACKSPACE IFAT LOAD P + MOVEI T,3400 ;BACKSPACE + PUSHJ PDP, MTGO1-1 +MTEOT2: MOVEI T,16 ;SPACE ONE FILE + PUSHJ PDP, MTAPE + MOVEI T,6 ;SPACE ONE RECORD + PUSHJ PDP, MTAPE + PUSHJ PDP, WAIT1 ;WAIT UNTIL SPACING IS COMPLE + MOVE IOS, DEVIOS(DEVDAT) + TLNN IOS, IOSEOF ;WAS EOF DETECTED? + JRST MTEOT2 ;RESUME SPACING + MOVEI T,7 ;BACKSPACE, LOGICAL EOF FOUND + JRST MTAPE ;RETURN BACK TO MAIN PROGRAM +MTREDO: 12 ;NUMBER OF TIMES TO RE-EXECUTE + + +;DEVICE DEPENDENT DUMP MODES. MODE 16. +;OUTPUT +MTDMPO: TLO IOS, IO ;WRITING + HRRZ T,UUO + PUSHJ PDP, MTCHEK ;IS SYSTEM AVAILABLE? + MOVE TAC1, @MTOUT2 ;BLK0 AND DATA CONTROL COMMAN + MOVE TAC,T ;COMMAND LIST POINTER + MOVEI T,1000 ;WRITING COMMAND +MTDMP1: HRLI TAC, PROG ;ACTUAL ADDRESS OF COMMAND LI + MOVEM TAC, MTCMDP# ;COMMAND POINTER + SKIPN TAC,@TAC ;COMMAND WORD + JRST MTDMP3 ;NOTHING TO DO + JUMPGE TAC, MTDMP1 ;CHANGE COMMAND SEQUENCE + HLREM TAC, SVCNTR# ;SAVE COUNTER + HRRZS TAC ;GET ADDRESS ALONE + SUB TAC, SVCNTR ;GET LAST ADDRESS + CAMLE TAC, USRREL ;LESS THAN END? + JRST MTDMP2 ;OUT OF BOUNDS + MOVE TAC, @MTCMDP ;PICK UP POINTER AGAIN + ADD TAC, PROG ;GET ACTUAL ADDRESS + PUSHJ PDP, MTINDC ;MOVE TAPE + PUSHJ PDP,WAIT1 + AOS T,MTCMDP ;UPDATE COMMAND POINTER + TLNN IOS, IO ;WRITING? + JRST MTDMPI+2 ;READING + JRST MTDMPO+2 ;WRITING +;INPUT +MTDMPI: TLZ IOS, IO ;READING + HRRZ T,UUO + PUSHJ PDP, MTCHEK ;IS SYSTEM AVAILABLE + MOVE TAC1,@MTIN2 ;BLKI AND DATA CONTROL COMMAN + MOVE TAC,T ;COMMAND LIST POINTER + MOVEI T,2400 ;READ COMMAND + JRST MTDMP1 ;DUMP +;ADDRESS ERROR + +MTDMP2: PUSHJ PDP,MTDMP3 + JRST ADRERR +;CLEAR ALL USE BITS. NOTHING IN COMMAND LIST + +MTDMP3: SOSL DCREQ + SETOM DCAVAL +MTDMP4: SOSL MTREQ + SETOM MTAVAL + TRZ IOS,IOACT + TLZE IOS,IOW + PUSHJ PDP,SETIOD + MOVEM IOS,DEVIOS(DEVDAT) + POPJ PDP, + + END, diff --git a/src/once.mac b/src/once.mac new file mode 100644 index 0000000..02b2de1 --- /dev/null +++ b/src/once.mac @@ -0,0 +1,351 @@ + TITLE ONCE ONLY CODE - OPERATOR DIALOGUE AND SERVICE ROUT. LINKAGE + SUBTTL THIS IS ONLY CODE PLACED AT THE END OF IOINIT +;WHICH SHOULD BE THE LAST LOADED PROGRAM BEFORE SYSMAK AND DDT +;THUS IF IT OVERFLOWS INTO THE USER AREA NO HARM IS DONE +;INITIALIZE PRIORITY CHANNELS AND SETUP INTERRUPT SERVICE ROUTINE CHA + +XP SYSFIN,.-1 ;LAST LOC. IN SYSTEM +NXM=10000 ;NON EX-MEM + +INTERNAL PATCH + +PATCH: BLOCK 100 ;PATCH SPACE + ;C(SYSSIZE) SHOULD BE UPDATED AS PATCHES ARE MADE + +T=TAC ;SOME ACS +C=TAC1 +INT=DAT ;INTERRUPT SERVICE ENTRY POINT(USUALLY A CONSO INSTR.) +CHL=DEVDAT ;THE PLACE WHERE PC IS STORED FOR THAT CHANNEL + +;LINK TO SERVICE ROUTINES + +INTERNAL LINKSR +EXTERNAL NDEVM1 ;=NDOV-1 (DEFINED IN IOINI1) +EXTERNAL DEVINT,JOBSYM + +LINKSR: 0 ;CALLED WITH JSR FROM SYSINI + ;CHAIN INTERUPT SERVICE ROUTINES TOGETH + HRLZI INT, 254000 ;FORM JRST INSTR. + MOVEI C, NDEVM1 ;NO. OV DEV. SERV. ROUTINES TO CHAIN +DEV1: HLRZ CHL, DEVINT(C) ;LOC. WHERE PC IS STORED + HRR INT, DEVINT(C) ;INTERRUPT SERVICE ROUTINE ENTRY POINT + MOVE T, 1(CHL) ;INSERT THIS ROUTINE AT FRONT OF CHAIN + MOVEM T, 1(INT) + MOVEM INT, 1(CHL) + SOJGE C, DEV1 + + +;MOVE SYMBOL TABLE UP IN MEMORY +;EXEC MUST BE LOADED IN 15K OR LESS IF GOING INTO 16K MACHINE + + SETZM DAT ;FIND FIRST NON EX MEM + CONO APR,NXM ;CLEAR NON-EX MEM FLAG + ADDI DAT,2000 ;TRY NEXT 1K BLOCK + MOVE TAC1,(DAT) ;REFERENCE THIS LOCATION + CONSO APR,NXM ;NON-EXISTENT? + JRST .-3 ;NO + SUBI DAT,1 ;YES, HIGHEST LEGAL LOC + MOVEM DAT,DDTMEM ;FOR DDT + SUBI DAT,200-1 ;MAKE ROOM FOR DECDUMP + HLRE TAC1,JOBSYM ;-LENGTH OF S. T. + JUMPE TAC1,JRSTI1 ;0 IF NON S. T. TO MOVE UP + MOVNS TAC1 ;+LENGTH + HRRZ TAC,JOBSYM ;FIRST ADDRESS + ADDI TAC,(TAC1) + HRL TAC,TAC1 ;XWD LENGTH,LENGTH+FIRST ADDRESS + SUBI DAT,1(TAC) ;NEW LAST+1-OLD LAST+1 + HRRM DAT,STO1 ;DIST. TO MOVE + MOVE TAC1,JOBSYM ;-N,FIRST ADD. + ADDI TAC,1(DAT) ;FORM NEW S.T. POINTER + MOVEM TAC1,JOBSYM + MOVEI TAC1,JOBSYM + MOVEM TAC1,DDTSYM + MOVE TAC1,-1(TAC) +STO1: MOVEM TAC1,.(TAC) + SUB TAC,[XWD 1,1] + JUMPGE TAC,.-3 + + +;SETUP LOCATIONS 40 THRU 57 + +JRSTI1: MOVE TAC,[XWD LOC40,40] + BLT TAC,57 + MOVE TAC,JRSTI + MOVEM TAC,LINKSR+1 ;DO ONCE ONLY +JRSTI: JRST @LINKSR + +EXTERN UUO0,ERROR +EXTERN CH1,CH2,CH3,CH4,CH5,CH6,CH7 + +LOC40: 0 ;UUO PC + JSR UUO0 ;TO UUO HANDLER + JSR CH1 + JSP DAT,ERROR + JSR CH2 + JSP DAT,ERROR + JSR CH3 + JSP DAT,ERROR + JSR CH4 + JSP DAT,ERROR + JSR CH5 + JSP DAT,ERROR + JSR CH6 + JSP DAT,ERROR + JSR CH7 + JSP DAT,ERROR + + + +;ONCE ONLY CODE - OPERATOR SETUP DIALOGUE + +INTERNAL ONCE +EXTERNAL CONMES,RADX10,CRLF,DECIN,DECIN1 +EXTERNAL THSDAT,MAKEND,JOBFF +EXTERNAL ERNAM,OCTPNT,SYSSIZ,CONFIG,SYSNUM,SYSDAT + +ONCE: 0 + MOVEI TAC,SYSFIN ;SET SIZE OF MONITOR + MOVEM TAC,SYSSIZ + MOVE DAT,LINEP ;SETUP LINE BYTE POINTER + MOVE PDP,[XWD ONCEPN,ONCEPD] + PUSHJ PDP,CRLF + MOVEI TAC,CONFIG + PUSHJ PDP,CONMES + MOVEI TAC,TSEXEC + PUSHJ PDP,CONMES + HLRZ TAC,SYSNUM + PUSHJ PDP,RADX10 + MOVEI TAC,[ASCIZ /./] + PUSHJ PDP,CONMES + HRRZ TAC,SYSNUM + PUSHJ PDP,RADX10 + MOVEI TAC,[ASCIZ / /] + PUSHJ PDP,CONMES + MOVEI TAC,SYSDAT + PUSHJ PDP,CONMES + PUSHJ PDP,CRLF + PUSHJ PDP,OPOUT + + +;ASK FOR TODAYS DATE AND CONVERT +;DATE STORED AS ((Y-64)*12.+M-1)*31.+D-1 + +DATLOP: SETZM THSDAT + MOVE DAT,LINEP + MOVEI TAC,TODATE + PUSHJ PDP,CONMES + PUSHJ PDP,OPOUT + PUSHJ PDP,GETLIN + JRST DATLOP ;JUST CR + PUSHJ PDP,DECIN1 ;MONTH + JRST DATLOP ;ERROR + SKIPE TAC1 + CAILE TAC1,^D12 + JRST DATLOP + SUBI TAC1,1 + IMULI TAC1,^D31 + ADDM TAC1,THSDAT + PUSHJ PDP,DECIN1 ;DAY + JRST DATLOP + SKIPE TAC1 + CAILE TAC,^D31 + JRST DATLOP + SUBI TAC1,1 + ADDM TAC1,THSDAT + PUSHJ PDP,DECIN1 ;YEAR + JRST DATLOP + CAIL TAC1,^D65 + CAILE TAC1,^D99 + JRST DATLOP + SUBI TAC1,^D64 ;YEAR ZERO + IMULI TAC1,^D12*^D31 + ADDM TAC1,THSDAT + + +;GET TIME OF DAY + +EXTERN TIME + +TIMLOP: SETZM TIME + MOVE DAT,LINEP + MOVEI TAC,TIMEM + PUSHJ PDP,CONMES + PUSHJ PDP,OPOUT + PUSHJ PDP,GETLIN + JRST TIMLOP ;JUST A CR + ILDB TAC1,TAC + SUBI TAC1,60 + SKIPL TAC1 ;CHECK FIRST DIGIT OF HOUR + CAILE TAC1,2 + JRST TIMLOP + IMUL TAC1,[^D60*^D60*^D60*^D10] + ADDM TAC1,TIME + ILDB TAC1,TAC + SUBI TAC1,60 ;CONVERT TO BINARY + SKIPL TAC1 + CAILE TAC1,^D9 + JRST TIMLOP + IMULI TAC1,^D60*^D60*^D60 + ADDM TAC1,TIME + PUSHJ PDP,DECIN1 + JRST TIMLOP + CAILE TAC1,^D59 + JRST TIMLOP + IMULI TAC1,^D60*^D60 + ADDM TAC1,TIME + + +;PRINT IO CONFIGURATION + +EXTERN DEVLST + + MOVE DAT,LINEP + MOVEI TAC,IOCONF + PUSHJ PDP,CONMES + HLRZ DEVDAT,DEVLST + MOVEI TAC,ITEM + PUSH PDP,TAC +ONCE5: MOVEI TAC,1 + HLLZ ITEM,DEVNAM(DEVDAT) +ONCE4: HLRZ DEVDAT,DEVSER(DEVDAT) + JUMPE DEVDAT,ONCE6 + HLLZ TAC1,DEVNAM(DEVDAT) + CAMN TAC1,ITEM + AOJA TAC,ONCE4 +ONCE6: MOVE PROG,TAC ;SAVE NO. + PUSHJ PDP,RADX10 + MOVEI UUO," " + IDPB UUO,DAT + MOVEI UUO,3 + MOVE JDAT,[POINT 6,ITEM] +ONCE7: ILDB TAC1,JDAT + ADDI TAC1,240 + IDPB TAC1,DAT + SOJG UUO,ONCE7 + MOVEI TAC,[ASCIZ /'S/] + CAILE PROG,1 + PUSHJ PDP,CONMES + PUSHJ PDP,CRLF + JUMPN DEVDAT,ONCE5 + POP PDP,TAC1 + PUSHJ PDP,OPOUT + + +;ASK IF SYSMAK IS WANTED + + MOVE DAT,LINEP + MOVEI TAC,SYSM + PUSHJ PDP,CONMES + PUSHJ PDP,OPOUT + PUSHJ PDP,GETLIN + JRST ONCE2 ;NO SYSMAK + MOVEI TAC,MAKEND ;YES + MOVEM TAC,SYSSIZ + +;IS EXEC DDT WANTED? + +ONCE2: MOVE DAT,LINEP + MOVEI TAC,SYSDM + PUSHJ PDP,CONMES + PUSHJ PDP,OPOUT + PUSHJ PDP,GETLIN + JRST ONCE3 ;NO + MOVEI TAC,JOBFF ;FIRST FREE LOCATION + HRRZM TAC,SYSSIZ + + +;PRINT OCTAL SIZE OF MONITOR + +ONCE3: MOVE DAT,LINEP + MOVEI TAC,EXECIS + PUSHJ PDP,CONMES + MOVE TAC,SYSSIZ + PUSHJ PDP,OCTPNT + MOVEI TAC,LENGTH + PUSHJ PDP,CONMES + PUSHJ PDP,OPOUT + JRST @ONCE + + +;ROUTINE TO READ A LINE FROM OPERATORS CONSOLE +;CALL: PUSHJ PDP,GETLIN +; JUST A CR TYPED IN +; A LINE TYPED IN,TAC SET AS BYTE POINTER + +EXTERN CPOPJ, CPOPJ1 + +GETLIN: MOVE TAC,LINEP + MOVEI ITEM,0 +GET1: CONSO TTY,40 + JRST .-1 + DATAI TTY,TAC1 + DATAO TTY,TAC1 + IDPB TAC1,TAC + ANDI TAC1,177 + CAIN TAC1,177 ;RUBOUT + JRST CPOPJ + CAIE TAC1,15 + AOJA ITEM,GET1 + CONSO TTY,20 + JRST .-1 + MOVEI TAC1,12 + DATAO TTY,TAC1 + MOVE TAC,LINEP + JUMPN ITEM,CPOPJ1 + POPJ PDP, + + +;ROUTINE TO TYPE A LINE ON OPERATORS CONSOLE +;ECHO CHECK STOPS LINE AND RETURNS +;CALL: DAT SET TO END OF MESSAGE + +OPOUT: MOVE TAC,LINEP + DATAI TTY,TAC1 +OPOUT1: CAMN TAC,DAT + POP PDP, + CONSZ TTY,40 + JRST OPOUT2 ;ECHO CHECK + CONSZ TTY,20 + JRST .-1 + ILDB TAC1,TAC + DATAO TTY,TAC1 + JRST OPOUT1 +OPOUT2: CONSZ TTY,20 + JRST .-1 + DATAO TTY,[15] + CONSZ TTY,20 + JRST .-1 + DATAO TTY,[12] + POPJ PDP, + +LINEP: POINT 7,LINBUF +LINBUF: BLOCK 20 +ONCEPN=10 +ONCEPD: BLOCK ONCEPN + + +;MESSAGES + +TSEXEC: ASCIZ / T. S. EXEC-/ +TODATE: ASCIZ / +TYPE TODAY'S DATE AS ABOVE. +/ +TIMEM: ASCIZ / +TYPE 4 DIGIT NAVY TIME(0953 IS 9:53 AM). +/ +IOCONF: ASCIZ / +IO CONFIGURATION +/ + +SYSM: ASCIZ / +DO YOU WANT SYSMAK(TYPE Y IF YES,CR IF NO)? +/ + +SYSDM: ASCIZ / +EXEC DDT? +/ +EXECIS: ASCIZ / +EXEC IS / +LENGTH: ASCIZ /OCTAL LOCATIONS LONG. +/ + END, diff --git a/src/pip.mac b/src/pip.mac new file mode 100644 index 0000000..d789804 --- /dev/null +++ b/src/pip.mac @@ -0,0 +1,4050 @@ +TITLE PIP V.030 MOD SANDERS/DBP 19-AUG-71 +SUBTTL VJC/PMH/AK-DAG/DMN 8-JUL-70 + +;PERIPHERAL INTERCHANGE PROGRAM +;"COPYRIGHT 1968, 1969, DIGITAL EQUIPMENT CORP.,MAYNARD,MASS.,U.S.A. + +VPIP==30 ;VERSION NUMBER +SVER==5 ; SANDERS VERSION + + +;WCH==0 PIP IS ASSEMBLED FOR PDP-10 AND ASSUMES NEW FORMAT DECTAPES. +;WCH==1 PIP IS ASSEMBLED FOR PDP-6 AND ASSUMES OLD FORMAT DECTAPES. + +;DISK30==0 PIP IS ASSEMBLED TO RUN WITH 10/40, 10/50 MONITOR SYSTEMS. +;DISK30==1 PIP IS ASSEMBLED TO RUN WITH 10/30 DISK SYSTEM. + +;BLOC0==0 PIP ALLOWS COPYING OF BLOCK0 (DECTAPE). +;BLOC0==1 PIP WILL NOT ALLOW BLOCK0 TO BE COPIED. + +;RIMSW==0 /Y SWITCH OPTION UNAVAILABLE. (ALSO UNAVAILABLE FOR OLD FORMAT DECTAPES) +;RIMSW==1 /Y SWITCH OPTION AVAILABLE. + +;FTDSK==0 NON DSK SYSTEM.NO CCL.SAVES CORE ON 10/40 +;FTDSK==1 10/50 DSK SYSTEM,ALSO 10/30 DSK SYSTEM + + +;CONDITIONAL ASSEMBLY SWITCH SETUP (NORMAL CONFIGURATION) +;--------------------------------- + +IFNDEF WCH, <WCH==0> +IFNDEF DISK30, <DISK30==0> +IFNDEF BLOC0, <BLOC0==0> +IFNDEF FTDSK, <FTDSK==0> +IFN WCH, <RIMSW==0> +IFNDEF RIMSW, <RIMSW==0> +IFNDEF K, <K==0> + + + + + LOC 124 + PIP1 ;SET REENTER ADDRESS + RELOC + LOC 137 + XWD SVER,VPIP + RELOC + + + MLON +IFDEF SALL, <SALL> + +EXTERN JOBFF,JOBSA,JOBREL + +;FLAG ASSIGNMENTS (RIGHT HALF) + +LINE==1 ;ASCII LINE MODE PROCESSING +BMOD==2 ;BINARY PROCESSING +TBMOD==4 ;SUPPRESS TRAILING SP, CHANGE MULTIPLE SP TO TABS +DFLG==10 ;DELETE FILES MODE +LFLG==20 ;LIST DIRECTORY +NSMOD==40 ;IGNORE INPUT SEQUENCE NUMBERS +RFLG==100 ;RENAME FILE MODE +SQMOD==200 ;GENERATE SEQUENCE NUMBERS +STS==400 ;END OF LINE SEEN, OUTPUT SEQUENCE NUMBER NEXT +SPMOD==1000 ;SUPPRESS TRAILING SPACES +XFLG==2000 ;COPY DECTAPE MODE +ZFLG==4000 ;CLEAR DECTAPE DIRECTORY +SUS==10000 ;SEQUENCE NUMBER GENERATION IN PROGRESS +SPOK==20000 ;SPACE WAS LAST CHARACTER +ESQ==40000 ;STOP OUTPUTTING SEQ NUM, RESUME OUTPUTTING DATA +SNI==100000 ;DO NOT INCREMENT SEQUENCE NUMBER +MTFLG==200000 ;MTA REQUEST RECEIVED +OSFLG==400000 ;GENERATE SEQ. NOS. INCR. BY ONE + +;FLAG ASSIGNMENTS (LEFT HALF) + +OFLG==1 ;BLOCK 0 COPY +RIMFLG==2 ;RIM FORMAT INPUT /OUT TO DTA. ILLEG IF RIMSW==0,OR WCH==1 +PFLG==4 ;FORTRAN PROGRAM OUTPUT FORMAT CONVERSION +PCONV==10 ;COLUMN 1 CONVERSION IN PROGRESS +NEWFIL==20 ;NEW FILE JUST INITIATED +CHKFLG==40 ;PARENTHESES CHECK MODE +IFLG==100 ;SELECT IMAGE MODE +GFLG==200 ;KEEP GOING IF THERE ARE I/O ERRORS +IBFLG==400 ;SELECT IMAGE BINARY MODE +JFLG==1000 ;NON-STANDARD MODE + ;AUXFLG ASSIGNMENTS (LEFT HALF) + +QFLG==1 ;PLEASE PRINT SWITCH SET +NSPROT==2 ;NON-STANDARD DISK OUTPUT PROTECTION +SBIN==4 ;36-BIT PR. ON REL. ETC. FILES +NOMORE==20 ;IGNORE ANY SWITCHES BUT MTA FROM NOW ON +CDRFLG==40 ;CONVERT COLS 73-80 TO SPACES + /C +INFOFL==100 ;FLAG USED BY ERR3A: +RSDCFL==200 ;USED FOR MERGING FILES, ==1 IF FILE HAS EXTENSION + ;REL,SAV,DMP,CHN OR OTHERWISE == 0 +FRSTIN==400 ;THIS IS THE FIRST INPUT FILE (USED IN FILE + ;MERGE COMMAND) == 0 FOR FIRST INPUT + +;MTAREQ ASSIGNMENTS (RIGHT HALF) + +MTAFLG==1 ;MTA ADVANCE ONE FILE +MTBFLG==2 ;MTA BACKSPACE ONE FILE +MTTFLG==4 ;MTA SKIP TP LOGICAL EOT +MTWFLG==10 ;MTA REWIND +MTFFLG==20 ;MTA MARK EOF +MTUFLG==40 ;MTA REWIND AND UNLOAD +MTDFLG==100 ;MTA ADVANCE ONE RECORD +MTPFLG==200 ;MTA BACKSPACE ONE RECORD +MT8FLG==400 ;MTA SET 800 B.P.I. +MT5FLG==1000 ;MTA SET 556 B.P.I. +MT2FLG==2000 ;MTA SET 200 B.P.I. +MTEFLG==4000 ;MTA SELECT EVEN PARITY + +;AUXFLG ASSIGNMENTS (RIGHT HALF) + +REDFLG==1 ;==1 IF ANY FILES ARE INPUT (OTHER THAN DIRECTORIES) +SYSFLG==2 ;DEVICE IS SYS +SYSLST==4 ;LAST DEVICE WAS SYS +LPTOUT==10 ;LPT OUTPUT +FFLG==20 ;LIST SHORT DISK DIRECTORY +ONEOUT==40 ;ONE OUTPUT FILE INITIALIZED +CDRIN==100 ;CARDS IN +MTAOUT==200 ;OUTPUT TO MTA +MTAIN==400 ;INPUT FROM MTA +TTYIN==1000 ;INPUT FROM TTY +READ1==2000 ;LOOK FOUND NEW INPUT FILE, NO READ YET. +DTAOUT==4000 ;OUTPUT TO DTA +DSKOUT==10000 ;OUTPUT TO DSK +DTAIN==20000 ;INPUT FROM DTA +DSKIN==40000 ;INPUT FROM DSK +TTYOUT==100000 ;OUTPUT TO TTY +PPTIN==200000 ;INPUT FROM PTR +PPTOUT==400000 ;OUTPUT TO PTP + ;CALFLG ASSIGNMENTS (RIGHT HALF) FOR DESCRIBING A BLOCK OF INFORMATION +;FOUND BY THE COMMAND SCANNER. + +FNEX==1 ;==1 WHEN FN.EX==*.*, *.EXT, FN.* (WHEN MORE + ;THAN ONE FN.EX IS IMPLIED). +MATEX==2 ;FILE EXTENSIONS MUST MATCH +MATFN==4 ;FILE NAMES MUST MATCH +NEWDEV==10 ;A NEW INPUT DEVICE WAS GIVEN +NEWPP==20 ;A NEW #P-P WAS GIVEN +ASTFLG==40 ;FLAG SET WHEN FILE NAMED IN CS FOUND + ;BY LOOK ROUTINE EVEN IF FN OR EXT =* +DEV==100 ;DEVICE NAME INDICATOR +DVSWTH==200 ;OUTPUT DEVICE SEEN +NSWTCH==400 ;INDICATES NULL NAME +SSWTCH==1000 ;LEFT ARROW SEEN +LISTTY==2000 ;LIST TO TTY +TMPI==4000 ;INPUT DEVICE TMPCOR SEEN +TMPO==10000 ;OUTPUT DEVICE TMPCOR +RXFLG==20000 ;(RX) SEEN + +ALLCLF==FNEX!MATEX!MATFN!NEWDEV!NEWPP + +;DEVICE CHANNEL ASSIGNMENTS + +CON==1 ;COMMAND INPUT CHANNEL +OUT==2 ;OUTPUT DEVICE +IN==3 ;INPUT DEVICE +TAPE==4 ;MTA POSITIONING +DIR==5 ;DISK DIR. READ +BLKIN==6 ;INPUT FOR 10/30 DISK FILES +DTDIR==7 ; DECTAPE DIR. READ(FOR PPN) + +;ACCUMULATOR ASSIGNMENTS + +T1=1 ;GENERAL PURPOSE +T2=2 ;G.P. +T3=3 ;G.P. +CHR=4 ;INPUT CHARACTER +P=5 ;PUSHDOWN POINTER +FLAG=6 ;FLAG REGISTER +T4=7 ;G.P. +IOS=10 ;IO STATUS BITS +T5=11 ;G.P. +T6=12 ; G.P. +AUXFLG=13 ;AUXILIARY FLAG REGISTER +T7=14 ;G.P. +DOUT=15 ;DIVIDED NO. FOR OUTPUT +DOUT1=16 ;REMAINDER, DOUT+1 +CALFLG=17 ;MORE FLAGS + +;MISCELLANEOUS PARAMETERS + +WRTLOK==400000 ;WRITE LOCK (DECTAPE) /IMPROPER I/O +BIGBLK==40000 ;BLOCK TOO LARGE +INBIT==2 ;DEVCHR BIT FOR DEV CAN DO INPUT +OUTBIT==1 ;DEVCHR BIT FOR DEV CAN DO OUTPUT +EOFBIT==20000 ;END OF FILE +EOTBIT==2000 ;END OF TAPE +DTABIT==4 ;DEVCHR BIT FOR DECTAPE IDENTIFICATION +INHIB==1 ;OUTPUT RELEASE INHIBIT BIT +TABSP==10 ;SPACES PER TAB +PTRBIT==200 ;DEVCHR BIT FOR PTR +PTPBIT==400 ;DEVCHR BIT FOR PTP +DSKBIT==200000 ;DEVCHR BIT FOR DSK +MTABIT==20 ;DEVCHR BIT FOR MTA +LPTBIT==40000 ;DEVCHR BIT FOR LPT +TTYBIT==10 ;DEVCHR BIT FOR TTY +CDRBIT==100000 ;DEVCHR FOR CDR +DENS2==200 ;MTA 200 BPI +DENS5==400 ;MTA 556 BPI +DENS8==600 ;MTA 800 BPI +PARE==1000 ;MTA EVEN PARITY +LDP==4000 ;MTA LOAD POINT STATUS +HPAGE==20 + +;MACRO DEFINITIONS + +DEFINE SKIP (J)<JRST .+1+'J> + +DEFINE LSTLIN (Z),< + SKIPA T1,[POINT 7,Z] + PUSHJ P,PUT + ILDB CHR,T1 +IFN WCH,<PUSHJ P,CCASE> + JUMPN CHR,.-2> + +DEFINE ERRPNT (X),< + JSP T1,PTEXT + ASCIZ X> + +DEFINE ERRPN2 (X),< + JSP T1,PTEXT2 + ASCIZ X> + +DEFINE ERRPNX (X),< + JSP T1,PRETXT + ASCIZ X> + + +LOW: + +;ASCII CHARACTERS + +CR==15 ;CARRIAGE RETURN +LF==12 ;LINE FEED +FF==14 ;FORM-FEED +ALTMOD==33 ;NEWEST ALTMODE +ALT175==175 ;OLDEST ALTMODE +ALT176==176 ;OLDER ALTMODE +LA==137 ;LEFT ARROW +CZ==32 ;CONTROL Z +XON==21 ;^Q,START TTY PTR +XOFF==23 ;^S,STOP TTY PTR MODE +COMMA==54 +PERIOD==56 ;PERIOD +COLON==72 +SPACE==40 +DEL==177 ;DELETE,RUBOUT,REPEAT MOD.35 +TAB==11 ;TAB + + +;CALLI DEFINITIONS + +OPDEF RESET [CALLI 0] +OPDEF DEVCHR [CALLI 4] +OPDEF CORE [CALLI 11] +OPDEF EXIT [CALLI 12] +OPDEF UTPCLR [CALLI 13] +OPDEF DATE [CALLI 14] +OPDEF MSTIME [CALLI 23] +OPDEF GETPPN [CALLI 24] +OPDEF PJOB [CALLI 30] +OPDEF RUN [CALLI 35] +OPDEF GETTAB [CALLI 41] +OPDEF TMPCOR [CALLI 44] +OPDEF DSKCHR [CALLI 45] +OPDEF JOBSTR [CALLI 47] +OPDEF DEVPPN [CALLI 55] +OPDEF WAIT [MTAPE 0] + +;EXTENDED LOOKUP PARAMETERS + +RBSIZ==5 ;WRITTEN FILE LENGTH +RIBSTS==17 ;STATUS BITS + + + +PIP1: MOVE 0,[LOW,,LOW+1] + SETZM LOW + BLT 0,LOWTOP + MOVSI (SIXBIT /SYS/) + DEVPPN ;FIND PP OF DEVICE SYS + MOVE PP13 ;ASSUME 1,,3 IF NOT LEVELD + MOVEM SYSPP ;SAVE AS SYS PP +IFN FTDSK,< + MOVE [XWD 17,11] ;STATES WORD + GETTAB ;GET IT + SETZ ;ERROR RETURN + TLNN (7B9) ;TEST FOR LEVEL D + TDZA ;NOT LEVEL D + HRROI -2 ;THIS IS LEVEL D + MOVEM LEVEL ;SAVE > +IFE FTDSK,<HLRZ T1,JOBSA ;NO DSK SO USE JOBFF> +IFN FTDSK,<MOVEI T1,DSKDR ;ASSUME NO DISK FOR TEST, LOC OF DSK RTNS + MOVSI 0,(SIXBIT /DSK/) + DEVCHR ;DEVCHR REQUEST: IS THERE A DSK + JUMPE 0,P1 ;0 IF NO DISK: USE DSKDR + MOVE T1,JOBFF ;DISK: PREPARE TO SAVE C(JOBFF) + HRRZ T2,JOBREL ;HIGHEST REL LOC AVAILABLE TO USER + CAIL T2,6000 ;CURRENT SIZE 4K + JRST P1 ;YES + MOVEI T2,7777 ;NO. EXPAND TO 4K + HRRZM T1,SVJBFF ;SAVE JOBFF SO BUFFERS CAN BE CREATED + CORE T2, ;CORE UUO + JRST DERR7 ;CORE UNAVAILABLE> +P1: HRRZM T1,SVJBFF ;SAVE JOBFF SO BUFFERS CAN BE CREATED + JRST PIP + +IFN FTDSK,< +DERR7: ERRPNT </?4K needed/> + EXIT ;EXIT TO MONITOR> + + PIP: RESET ;REINITIALIZE WHEN RESTARTED MANUALLY + ;NEW COMMAND STRING SCAN STARTS HERE +PIP2: +PIP2A: JSP T5,INICN1 ;INITIALIZE THE TTY AND PDL + MOVEI 0,CR ;TYPE CR + IDPB 0,TFO+1 + MOVEI 0,LF ;AND LF + IDPB 0,TFO+1 + MOVEI 0,"*" ;TYPE ASTERISK****** + IDPB 0,TFO+1 ;READY TO ACCEPT + OUTPUT CON, ;COMMAND FROM TTY +PIP2B: SETZM TOTBRK ;CLEAR PAREN COUNTER + MOVEI 0,TABSP ;SPACES PER TAB + MOVEM 0,TABCT ;INITIALIZE TAB COUNT + MOVE 0,ZRO ;ASCII /00000/ + MOVEM 0,SQNUM ;INITIALIZE SEQUENCE NUMBERS + RELEAS CON, ;RELEASE TTY FOR USE AS IN-OUT DEVICE + +MAINA1: SETZB FLAG,FILNAM ;INITIALIZE FOR FIRST/NEXT COMMAND STRING + SETZB AUXFLG,DEVICE +IFN FTDSK,<HRRZI 0,(SIXBIT /SYS/) ;SYSTEM DIRECT DEV, DSK/DTA + HRLZM 0,ADSK ;PUT IN SYSTEM DEVICE> + MOVE 0,[XWD FILNAM,FILNAM+1] ;SET PROJECT, PROG NO. + BLT 0,AB ;ZERO OUT FILNAM - AB + SETZ CALFLG, ;CLEAR OTHER FLOGS + MOVE T3,COMPTR ;BYTE POINTER FOR STORING CS IN BUFFER + +;ACCUMULATE CS CHARS IN COMBUF ALLOW LONG CS ONLY FOR TTY COMMAND + +COMSTO: PUSHJ P,GETTA ;GET CS CHAR + AOS T4,COMCNT ;COUNT CHARS + CAILE T4,^D200 ;ALLOW UP TO 200 CHARS + JRST ERR6B ;MORE THAN 200 CHARS + CAIN 0,CZ ;CHECK FOR ^Z +COMASK: PUSHJ P,GETEN2 ;SET ^Z IN 0 + IDPB 0,T3 ;STORE IN COMBUF + SKIPE COMEOF ;END-OF-FILE SET? + JRST COMPRO ;YES, PROCESS CS IN COMBUF + CAIG 0,CR ;NOT EOF + CAIGE 0,LF ;LF,VT,FF,CR? + CAIN 0,ALTMODE ;NO, $? + JRST COMASK ;YES + JRST COMSTO ;NO, KEEP STORING + +COMPTR: POINT 7,COMBUF + +;******************************************************************** +;BEGIN SCAN OF DESTINATION PORTION OF COMMAND STRING +COMPRO: +IFN FTDSK,< + MOVSI 0,(SIXBIT/DSK/) + DEVCHR ;IS THERE A DSK? + JUMPE 0,COMPRP + MOVSI 0,(SIXBIT /DSK/) ;MAKE DEFAULT DEVICE + MOVEM 0,DEVICE ;TENTATIVELY DSK> + +COMPRP: RELEASE CON, ;RELEASE TTY + MOVE 0,COMPTR ;INITIALIZE POINTER + MOVEM 0,COMPTS ;TO PICK UP CS FROM COMBUF + PUSHJ P,NAME ;GO SCAN DESTINATION PORTION OF COMMAND STRING + SKIPE XNAME ;NO SCAN OVERSHOOT ALLOWED + JRST ERR6A + SKIPL ESWTCH ;11/25/69 END OF CS ? + JRST MAINC ;NO + TRNN CALFLG,NSWTCH ;NON-NULL DESTINATION + TRNE CALFLG,SSWTCH ;_ NOT SEEN? + SKIPE FILNAM ;OR ANYTHING IN FILENAME + JRST ERR6A ;YES, ERROR + JRST PIP2 ;NO, ALL OK + +MAINC: MOVE 0,DEVICE ;GET OUTPUT DEVICE NAME + MOVEM 0,ODEV ;SAVE DEVICE NAME FOR LATER USAGE + PUSHJ P,DEVTST ;SAVE DEVICE TYPE, SET XXXOUT.E.G. DTAOUT + PUSHJ P,ABCHK ;CHECK MTA BACKSPACE/ADV VALUES + PUSHJ P,PROTK ;CHECK PROTECTION + MOVE 0,AB ;MTA VALUE SWITCHES + MOVEM 0,ABOUT ;GET MTA CONTROL NUMBERS FO R OUT + MOVE 0,AUX + MOVEM 0,AUXOUT + MOVE 0,[XWD FILNAM,DTON] + BLT 0,DTON+3 ;SAVE DESTINATION FILE NAME +IFN FTDSK,<TRNN AUXFLG,DSKOUT ;DISK OUTPUT?> + SETZM DTON+3 ;ZERO 4TH WD OF DIRECTORY ENTRY + M3: TRZ CALFLG,SSWTCH ;TERMINATE DESTINATION FILE SCAN + SETZM DEVICE ;DONT CARRY OVER INPUT DEVICE +IFN FTDSK,<MOVSI 0,(SIXBIT/DSK/) + DEVCHR ;IS THERE A DISK + JUMPE 0,M3A + MOVSI 0,(SIXBIT /DSK/) ;DEFAULT CASE DSK + MOVEM 0,DEVICE ;MUST NOT LET O/DEV. CARRY OVER AS I/DEV.> +M3A: PUSHJ P,DESCRP ;GET A UNIT DESCRIPTOR (INPUT). + TLNN AUXFLG,QFLG;Q? ;SCAN INPUT PORTION OF COMMAND STRING + JRST M2 ;NO + HRRZI 0,(SIXBIT /SYS/) ;YES MAKE INPUT DEVICE SYS + HRLZM 0,DEVICE + HRLZM DEVA ;SAVE COPY OF INPUT DEVICE + MOVE 0,QPIP ;MAKE INPUT FILENAME QPIP + MOVEM 0,FILNAM + MOVSI 0,(SIXBIT /*/) ;DONT RESTRICT QPIP + MOVEM 0,FILEX ;EXT TO BEING NULL + TRZ CALFLG,MATEX ;DON'T MATCH EXTENSIONS + TRO AUXFLG,SYSFLG ;DEVICE IS SYS + MOVE 0,SYSPP ;GET SYS PP + MOVEM 0,PP ;AND SET IT + SOS ESWTCH ;NO MORE COMMAND STRING + TRZ AUXFLG,DTAIN+DSKIN+CDRIN+PPTIN+TTYIN+MTAIN + PUSHJ P,CHECK1 ;CHECK INPUT DEVICE + +M2: TLO AUXFLG,NOMORE ;NO MORE SWITCHES BUT MTA ALLOWED + TLNE FLAG,OFLG ;BLOCK 0 COPY? + JRST BLOCK0 ;YES + TRC FLAG,XFLG+RFLG;(RX) + TRCN FLAG,XFLG+RFLG + PUSHJ P,M5 ;YES,(RX) +IFN RIMSW,< + TLNN FLAG,RIMFLG ;RIM OUTPUT? + JRST M1 ;NO +IFE WCH,< + TRNE AUXFLG,PPTOUT ;RIM IS ONLY DTA TO PTP + TRNN AUXFLG,DTAIN!DSKIN!MTAIN + JRST ERR5B> +IFN WCH,<JRST RIMTB >> + +M1: MOVEI T4,1 ;ASCII LINE MODE ASSUMED + PUSHJ P,OUTLOOK ;SEE IF OUTPUT DEV MTA + PUSHJ P,M4 ;NOT MTA + TLNE FLAG,JFLG ;NON STARDARD MODE ? + TRO T4,100 ;TO PUNCH 029 ON CDP + HRRZM T4,OMOD ;SET MODE OF OUTPUT DEV + MOVEI T4,1 + PUSHJ P,INLOOK ;SEE IF INPUT DEV MTA + PUSHJ P,M4 ;NOT MTA + HRRZM T4,ININI1 ;SET MODE OF INPUT DEV + PUSHJ P,FNSET ;NOW DEVICE, DEVA CORRECT FOR START + JRST OMOD1 ;INIT OUTPUT DEVICE + +;SET MODE IF /I,/B,/H, + +M4: TLNN FLAG,IFLG ;IMAGE BINARY MODE? + JRST .+3 ;NO + TRO T4,10 ;IM. MODE + TRZ T4,1 ;CLEAR ASCII LINE MODE + + TRNN FLAG,BMOD ;BINARY MODE? + JRST .+3 ;NO + TRO T4,14 ;BIN. MODE + TRZ T4,1 ;CLEAR ASCII LINE MODE + + TLNE FLAG,IBFLG ;ASCII TO START. IB MODE? + TRO T4,13 ;YES + TRNE FLAG,XFLG ;COPY MODE? + POPJ P, ;YES, DON'T ALTER DATA MODE + + TRNE FLAG,DFLG+RFLG ;DELETE OR RENAME? + TRO T4,20 ;DIRECTORY WILL BE WRITTEN, DON'T + POPJ P, ;COMPUTE WORD COUNT MODE NEEDED. + ;FORCE MONITOR TO USE WORD COUNT + ;IN FIRST DATA WORD OF BUFFER + +M5: TRZ FLAG,RFLG ;CLEAR /R FLAG + TRO CALFLG,RXFLG ;SET (RX) FLAG + MOVE 0,[XWD DTON,MATCH] + BLT 0,MATCH+1 ;SAVE NAME AND EXT + POPJ P, ;RETURN + ;IF OUTPUT DEVICE IS MTA PERFORM ALL PRE-TRANSFER REQUESTS +;SUCH AS REWIND. IF OUTPUT DEVICE IS MTA, AND THERE IS NO +;INPUT DEVICE, EXIT. FOR OTHER MTA OUTPUT, PREPARE INIT +;DENSITY AND PARITY. + +OUTLOOK: + MOVE T3,ABOUT ;AB FOR OUTPUT DEV + MOVE T1,AUXOUT ;AUX FOR OUTPUT DEV + MOVEI T6,INOMTA ;SET TO INIT + JRST MT1 ;MTA FOR OUTPUT + + + + +;SAME FOR INPUT DEVICE. + +INLOOK: SKIPE T3,FILNAM ;IF NO FILENAME + TRNN FLAG,XFLG ;OR NOT /X + JRST INLUK1 ;CONTINUE + SKIPE DTON ;IF OUTPUT NAME SET UP + JRST INLUK1 ;CONTINUE + HLRZ T1,FILEX ;GET EXT + CAIE T1,(SIXBIT /*/) ;IF EITHER IS * + CAMN T3,STAR ;DON'T SET OUTNAME + JRST INLUK1 ;BUT JUST CONTINUE + MOVEM T3,DTON ;SET OUT NAME + HRLZM T1,DTON+1 ;AND EXTENSION +INLUK1: MOVE T3,AB ;ADV OR BKSPACE + MOVE T1,AUX ;AUX FOR INPUT DEV + MOVEI T6,INIMTA ;SET TO INIT + JRST MT1 ;MTA FOR INPUT + ;ROUTINE TO INITIALIZE OUTPUT DEVICE + +OMODE: MOVE T1,[XWD OBF,IBF] + MOVEM T1,ODEV+1 + MOVE T1,DTJBFF ;JOBFF AFTER 2 TTY BUFS + MOVEM T1,JOBFF ;SET UP + + OPEN OUT,OMOD ;INITIALIZE OUTPUT DEVICE + JRST ERR1 ;UNAVAILABLE ERROR + OUTBUF OUT,1 ;TRY ONE OUTBUFFER FOR SIZE + EXCH T1,JOBFF ;JOBFF_DTJBFF+BUFSZ + ;NOTE JOBFF RESET TO DTJBFF + SUB T1,DTJBFF ;T1=BUFSZ + HRRZ 0,JOBREL ;HIGHEST CORE AVAILABLE + SUB 0,DTJBFF ;0=TOTAL CORE AVAILABLE + ASH 0,-1 ;COMPUTE HOW MANY OUTPUT BUFFERS + IDIVM 0,T1 ;FIT IN HALF THE AVAILABLE SPACE + MOVEI T4,OMODE ;SET RETURN FROM MORCOR + CAIGE T1,1 ;1 OR MORE THAN 1 FIT? + JRST MORCOR ;NO, NEED MORE CORE + OUTBUF OUT,(T1) ;SET UP OUTPUT BUFFERS + MOVE 0,OBF+1 + MOVEM 0,SVOBF ;SAVE ORIGINAL MODE SETTING + MOVE 0,JOBFF + HRRZM 0,SVJBF1 ;PREPARE TO RECLAIM INBUFFER SPACE + POPJ P, + +OMOD1: PUSHJ P,OMODE ;GO INITIALIZE OUTPUT DEVICE + TRZN FLAG,ZFLG ;Z COMMAND TYPED? + JRST MAINA2 ;NO, + PUSHJ P,DTCLR ;YES, GO CLEAR DIRECTORY + RELEASE OUT, + RELEASE DIR, + TRNN CALFLG,NSWTCH ;SEE IF DEVICE WAS TYPED + JRST OMOD1 ;YES + JRST PIP2 ;GET NEXT COMMAND + +MORCOR: HRRZ 0,JOBREL ;TRY TO GET + ADDI 0,2000 ;1K MORE OF CORE + CORE ;ASK MONITOR FOR 1K CORE + JRST OMODER ;NOT AVAILABLE + JRST (T4) ;GOT IT + +OMODER: ERRPNT</?Not enough core/> + EXIT + ;MAIN LOOP TO PROCESS INPUT SIDE OF CS + + +MAINA2: TRNE FLAG,RFLG+DFLG ;RENAME OR DELETE FILE MODE? + JRST DTDELE ;YES./D,/X,OR(DX) +IFN RIMSW,< + TLNE FLAG,RIMFLG ;RIM? + JRST RIMTB ;YES./Y + > + TRNE FLAG,XFLG ;TRANSFER EVERYTHING MODE? + JRST PRECOP ;YES./X +;LOOP TO COPY ALL FILES BEGINS HERE FROM MAIN2 +MAINA3: TRNN AUXFLG,FFLG ;LIST DSK DIR SHORT? + TRNE FLAG,LFLG ;LIST DIRECTORY? + JRST DTPDIR ;YES./F OR /L + PUSHJ P,ININIT ;INITIALIZE INPUT FILE + TRNE AUXFLG,DTAIN ;DEC TAPE INPUT? + PUSHJ P,DTADIR ;INIT DTA DIR + +IFN FTDSK,<TRNE AUXFLG,DSKIN ;NO, DISK INPUT? + PUSHJ P,DSKDIR ;OR DSK> +MAINA4: PUSHJ P,LOOK ;GET A FILE TO COPY + JRST MAINA5 ;NO MORE + LOOKUP IN,ZRF + JRST ERR3 ;LOOKUP FAILURE +IFN WCH,< +MAINA6: TRNN AUXFLG,DTAIN+DTAOUT + JRST .+5 + HLRZ 0,ZRF+1 + CAIE 0,(SIXBIT /DMP/) + IFN DISK30,<CAIN 0,(SIXBIT/SVE/)> + IFE DISK30,<CAIN 0,(SIXBIT/SAV/)> + JRST MAINA4 ;DONT COPY DMP OR SAV FILES ON DTA> + TLO FLAG,NEWFIL + PUSHJ P,FILTYP + TRNE AUXFLG,ONEOUT + JRST PSCANA ;OUT HAS BEEN INITIALIZED +IFE WCH,< + PUSHJ P,OKBLKS> + ENTER OUT,DTON ;CREATE OUTPUT FILE + JRST ERR4 ;DIR. FULL OR 0 FILE NAME + JRST PSCANA + +MAINA5: TRZN AUXFLG,REDFLG + JRST IOERRN ;NEVER READ A FILE + JRST MAIN1 + PSCANB: TRNE AUXFLG,MTAIN!CDRIN!TTYIN!PPTIN ;ON NON-DIR DEVICE? + TRZ CALFLG,ALLCLF ;END OF THE ONE OR MANY FILES SPECIFIED + TRON AUXFLG,ONEOUT ;HAS OUT JUST BEEN INIT? + OUTPUT OUT, ;YES, AND FIRST FILE IS EOF ONLY, INIT OUT IN + ;CASE NO MORE SOURCE FILES + JRST PSCAN5 ;EMPTY FILE, CLOSE INPUT, RETURN FOR MORE + +PSCANA: TRO AUXFLG,REDFLG ;SET FLAG FOR INPUT FILE READ + PUSHJ P,INP ;GO READ INPUT FILE + TRZ AUXFLG,READ1 + PUSHJ P,TTYZ ;CHECK IF INPUT IS TTY + TRNE IOS,EOFBIT ;EOF FIRST DATA? + JRST PSCANB + SKIPN IBF+2 + JRST PSCANA + +PSCAN: TRO AUXFLG,ONEOUT ;INDICATE ONE OUTPUT FILE INITED + MOVE 0,OPTRA ;PRESCAN A LINE, INITIALIZE LINE BUFFER PTR + MOVEM 0,OPTR + SETZM CDRCNT + PUSHJ P,CLRBUF ;CLEAR LINE BUFFER + TROA FLAG,STS ;START A FRESH LINE +PSCAN3: PUSHJ P,PUT ;HERE FOR BINARY DATA + +PSCAN2: PUSHJ P,GET ;GET CHARACTER + JRST PSCAN1 ;END OF FILE RETURN + TDNN FLAG,[XWD IFLG+IBFLG,BMOD] ;BIN. OR NO CHAR. PROCESSING + TLNE AUXFLG,SBIN + JRST PSCAN3 ;YES + MOVE T1,OPTR + CAIN CHR,DEL ;VJC 4/16/69 + JRST PSCAN2 ; STR# 10-2615 + CAMN T1,OPTMAX ;CHECK LENGTH OF LINE + JRST ERR10 ;LINE TOO LONG + IDPB CHR,OPTR ;DEPOSIT CHAR. IN LINE BUFFER + CAIG CHR,24 + CAIGE CHR,20 ;LINE PRINTERR CONTROL CHAR + SKIP 1 ;NO + JRST PSCAN4 ;YES, TREAT AS END OF LINE + CAIG CHR,14 + CAIGE CHR,12 ;END OF LINE CHARACTER? + JRST PSCAN2 ;NO, SO CONTINUE +PSCAN4: PUSHJ P,OUTLBF ;YES, SO DUMP THE LINE BUFFER + JRST PSCAN ;SCAN THE NEXT LINE + +PSCAN1: LDB CHR,OPTR ;PICK UP LAST CHAR. + CAIN CHR,CZ ;IS IT ^Z + TRNN AUXFLG,TTYIN ;FROM TTY? + JRST PSCAN6 ;NO + SETZ CHR, ;YES,CLEAR CHAR. + DPB CHR,OPTR ;AND REMOVE FROM BUFFER +PSCAN6: PUSHJ P,OUTLBF ;DUMP THE REMAINING BUFFER + TRNE FLAG,XFLG ;COPY MODE? + JRST COPY2A ;YES, GO COPY THE NEXT FILE +PSCAN5: CLOSE IN, + JRST MAINA4 + ;COME HERE AFTER /L,/D,/R ON DISK OR THROUGH COPYING + +MAIN1: RELEAS DIR, ;RELEASE THE DIRECTORY DEVICE + RELEAS IN,INHIB ;RELEASE THE INPUT DEVICE + SKIPL T4,ESWTCH ;MORE COMMAND STRING TO PROCESS? + JRST MAIN2 ;YES + +;COME HERE AFTER /D,/R ON DTA. ALSO FROM ABOVE + +MAINB: CLOSE OUT, ;CLOSE THE OUTPUT FILE + PUSHJ P,OUTP1 ;CHECK THE FINAL ERROR BITS +IFN FTDSK,<TLNE AUXFLG,NSPROT ;NON-ST. PROT? + TRNN AUXFLG,DSKOUT+DTAOUT ;DISK OUT/ OR DTA + JRST MAINB1 ;NO + LDB 0,PRPTL + DPB 0,PRPTD + RENAME OUT,DTON ;SET UP RENAME REQUEST + JRST DERR6 ;DISK ERROR +MAINB1:> + RELEAS OUT, ;RELEASE THE OUTPUT DEVICE + JRST PIP2 ;PROCESS THE NEXT COMMAND + +MAIN2: PUSHJ P,DESCRP ;GET THE NEXT INPUT FILE TO PROCESS + PUSHJ P,INLOOK + PUSHJ P,M4 + HRRZM T4,ININI1 + JRST MAINA3 +;END OF LOOP BEGINNING AT MAINA3 + ;SUBROUTINE TO INITIALIZE THE INPUT FILE + +ININIT: MOVE T1,SVJBF1 ;SVJBF1=END OF OUTPUT BUFFERS + MOVEM T1,JOBFF ;COMPARE OMODE CODE + MOVEI 0,IBF + MOVEM 0,DEVICE+1 + OPEN IN,ININI1 + JRST ERR1A ;NOT AVAILABLE ERROR + INBUF IN,1 ;TRY ONE INPUT BUFFER FOR SIZE + EXCH T1,JOBFF ;HOW MANY INBUFFERS WILL FIT? + SUB T1,SVJBF1 + HRRZ 0,JOBREL + SUB 0,JOBFF ;JOBREL-SVJBF1=TOTAL SPACE LEFT + IDIVM 0,T1 + MOVEI T4,ININIT ;RETURN FROM MORCOR IS ININIT + CAIGE T1,1 ;1 OR MORE THAN 1 FITS? + JRST MORCOR ;NO, GET MORE CORE + INBUF IN,(T1) ;SET UP AS MANY BUFFS AS FIT + MOVE 0,IBF+1 ;SAVE ORIGINAL MODE + MOVEM 0,SVIBF + POPJ P, + ;THIS ROUTINE GETS AN INPUT UNIT DESCRIPTOR AND, FOR +;ADVANCE FILE AND BSPF ON MTA, ENSURES THE VALUE 1 IF NO +;NUMBER WAS GIVEN. + +DESCRP: SETZM AUX ;WILL GET ANY MTA REQ. GOING TO AUXFLG. + TRZE AUXFLG,SYSFLG ;IS THIS DEVICE SYS.? + TRO AUXFLG,SYSLST ;YES,SET SYS AS LAST DEVICE + SETZM AB ;MTA VALUE SWITCHES + SETZM PR ;PROTECTION + SETZM PP ;PROJ-PROG NUMBER +;******************************************************************** + PUSHJ P,NAME ;GO SCAN INPUT SIDE OF COMMAND STRING + MOVE T1,PR ;PROTECTION + HLLZM T1,PR ;IGNORE PR FLAG IN RHS FOR INPUT + TRZ AUXFLG,DTAIN+DSKIN+PPTIN+MTAIN+CDRIN+TTYIN + PUSHJ P,CHECK1 ;CHECK UNIT, AND FOR _ + +IFN FTDSK,<TRNN AUXFLG,DSKIN ;DSK INPUT? + JRST DESCR1 ;NO + TRNE AUXFLG,SYSFLG ;IS THIS DEVICE SYS? + JRST DESCR1 ;YES + TRNN AUXFLG,SYSLST ;WAS LAST DEVICE? + JRST DESCR1 ;NO + MOVE T2,FNPPNS ;YES, SAVE LAST [P,P] + SKIPE PP ;[P,P] ZERO? + JRST DESCR1 + MOVEM T2,PP ;YES, MAKE OLD [P,P] CURRENT [P,P] + MOVEM T2,FNPPN ;RESERVE [P,P]> +DESCR1: SKIPE XNAME ;NO OVERSHOOT ALLOWED + JRST ERR6A + +ABCHK: HLRZ T2,AB ;NO RECS/FILES TO BACKSPACE + JUMPN T2,.+2 ;IF 0 + MOVEI T2,1 ;GUARANTEE ONE + HRLM T2,AB ;SET AB LH + + HRRZ T2,AB ;NO RECS/FILES TO ADV + JUMPN T2,FNSET ;IF 0 + AOS AB ;GUARANTEE 1 + JRST FNSET ;FIND OUT DETAILS OF FILENAME + +;IF A NON-STANDARD OUTPUT PROTECTION IS REQUESTED, SAVE FOR RENAME. + +PROTK: MOVE T1,PR + TRNN T1,1 + JRST PROTK1 + HLLZM T1,PROTS + HLLZM T1,PR + TLOA AUXFLG,NSPROT +PROTK1: SETZB T1,PR + POPJ P, + +;TEST "DEVICE" TO SEE IF DESTINATION DEVICE IS DTA, DSK, PTP, LPT, TTY, MTA +;IF ANY IS TRUE, SET RELEVANT BIT IN AUXFLG. "0" CONTAINS +;"DEVICE" ON ENTRY. + +DEVTST: DEVCHR ;GET DEVICE CHARACTERISTICS +IFN FTDSK,<TLNN 0,DSKBIT ;IS OUTPUT DEV DSK? + JRST DEVTSU ;NO + TRO AUXFLG,DSKOUT ;YES, SET BIT + PUSH P,DEVICE ;SAVE DEVICE NAME + POP P,ADSK ;PUT NAME IN DSK INIT + POPJ P, +DEVTSU:> + JUMPE 0,DEVER2 ;NON-EXISTENT DEVICE + TLNN 0,OUTBIT ;CAN DEV DO OUTPUT? + JRST ERR6A ;NO + + TLNE 0,DTABIT ;DECTAPE? + TRO AUXFLG,DTAOUT ;YES + + TLNE 0,PTPBIT ;PAPER TAPE PUNCH? + TRO AUXFLG,PPTOUT + + TLNE 0,LPTBIT ;LINE PRINTER? + TRO AUXFLG,LPTOUT + + TLNE 0,TTYBIT ;TELETYPE? + TRO AUXFLG,TTYOUT + + TLNE 0,MTABIT ;MAGTAPE? + TRO AUXFLG,MTAOUT + + POPJ P, + +;ROUTINE TO CHECK IF DEVICE SYS AND SET [P,P], IF NONE GIVEN + +IFN FTDSK,< +PSYSP: CAME 0,[SIXBIT /SYS/];IS DEVICE SYS? + POPJ P, ;NO + MOVE T1,SYSPP ;GET SYS PP + MOVEM T1,PP ;AND SET IT + TRO AUXFLG,SYSFLG ;SET FLAG TO INDICATE + POPJ P, ;CURRENT INPUT DEVICE IS SYS> + +DEVER1: +DEVER2: MOVE T1,DEVICE +DEVER: MOVEM T1,DEVERR + ERRPNT </?Device /> + PUSHJ P,P6BIT + DEVERR + ERRPN2 </does not exist!/> +;ROUTINE TO INIT PDL POINTER AND TTY + +INICN1: MOVEI P,PDL-1 ;INITIALIZE PUSHDOWN POINTER +INICN2: MOVE 0,SVJBFF ;IS INITIALIZED AT PIP1 + MOVEM 0,JOBFF ;SET JOBFF TO BEGINNING OF BUFFER AREA + PUSHJ P,INICON ;INITIALIZE THE TTY + INBUF CON,1 ;ONE INBUFFER + OUTBUF CON,1 ;ONE OUTBUFFER + MOVE 0,JOBFF + HRRZM 0,DTJBFF ;JOBFF AFTER 2 TTY BUFFERS SET + OUTPUT CON, ;INITIALIZE BUFFER POINTERS + JRST (T5) + +;ROUTINE TO CLEAR LINE BUFFER + +CLRBUF: SETZM LBUF ;SUBR. TO CLEAR LINE BUFFER + MOVE 0,[XWD LBUF,LBUF+1] + BLT 0,LBUFE + POPJ P, + + ;COMMAND SCANNER ROUTINE + +NAME: TRNN CALFLG,SSWTCH ;RETURN NULL IF _ OR END-OF-LINE SEEN + SKIPGE ESWTCH + JRST NM13 ; + TRZ CALFLG,NSWTCH + SKIPE T1,XNAME ;IF COMMAND SCAN OVERSHOOT PICKED UP + ;DEVICE NAME, USE IT NOW + JRST NM7 + TRZ CALFLG,DEV +;LOOK FOR FILE NAME, EXT +NM1: SETZM FILEX +NM2: SETZM FILNAM + MOVE T1,NM15 +;LOOP TO PICK OFF FILENAME, EXT +NM3: PUSHJ P,GETCOM ;GO GET 7 BIT ASCII CHAR. FROM COMMAND STRING + CAIE 0,"*" ;TO ALLOW FN.EX = *.* + CAIL 0,"A" ;ALPHABETIC CHARACTER? + CAILE 0,"Z" + JRST NM4A ;NO +NM4: SUBI 0,40 ;CONVERT TO SIXBIT + TLNE T1,770000 ;6 CHARS. YET? + IDPB 0,T1 ;NO + JRST NM3 ;GET NEXT CHAR. +NM4A: CAIL 0,"0" ;NUMERIC? + CAILE 0,"9" + JRST NM5 ;NO + JRST NM4 + ;CHARACTER NOT *,0-9,A-Z +NM5: CAIG 0,CR ;CARRIAGE RETURN + CAIGE 0,LF ;LINE FEED + CAIN 0,ALTMOD ;ALTMODE + JRST NM5A ;YES + CAIN 0,CZ ;END-OF-FILE(CCL)? +NM5A: SOSA ESWTCH ;YES, OR EOF + CAIN 0,COMMA ;COMMA + JRST NM6 ;YES + CAIN 0,PERIOD ;PERIOD + JRST NM10 ;YES + CAIN 0,COLON ;COLON + JRST NM9 ;YES + CAIN 0,";" ;IS THE REST A COMMENT? + JRST NM16 ;YES + CAIN 0,"C"-100 ;^C + EXIT ;IN CASE JACCT ON ??? + CAIE 0,LA ;LEFT ARROW + JRST NM5B ;NO + TRO CALFLG,SSWTCH ;SET LEFT ARROW SWITCH + TRNE CALFLG,DEV ;HAS A DEVICE BEEN SEEN? + TRO CALFLG,DVSWTH ;YES-NEEDED FOR /Z/,/D + +NM6: SKIPN T1,FILEX ;COMMA ROUTINE - FIGURE OUT WHAT WE HAVE + JRST NM11 ;NO FILE NAME TEMPORARILY IN FILEX + EXCH T1,FILNAM ;PUT THE FILE NAME WHERE IT BELONGS + HLLZM T1,FILEX ;PUT THE EXTENSION WHERE IT BELONGS + POPJ P, + +NM7: SETZM XNAME ;USE XNAME ONLY ONCE + CAIN T1,1 ;1 FLAGS A NULL OVERSHOOT + JRST NM13 ;RETURN NULL NAME +NM8: MOVEM T1,DEVICE ;NEW DEVICE + TRO CALFLG,DEV + JRST NM1 ;LOOK FOR A FILE NAME AND EXTENSION + +NM9: TRNN CALFLG,DEV ;COLON ROUTINE - IS DEVICE NAME IN YET? + JRST NM12 ;NO + SKIPN T1,FILNAM ;SCAN OVERSHOOT - NULL OVERSHOOT? + MOVEI T1,1 ;YES - FLAG NULL OVERSHOOT WITH A 1 + MOVEM T1,XNAME ;XNAME = OVERSHOOT NAME + JRST NM14 +NM10: SKIPE FILEX + JRST ERR6 + MOVE 0,FILNAM ;PERIOD ROUTINE - SAVE FILE NAME + MOVEM 0,FILEX ;TEMPORARILY IN FILEX + JRST NM2 ;LOOK FOR EXTENSION +NM11: SKIPN FILNAM ;WAS A FILE NAME SPECIFIED? + TRNE CALFLG,DEV ;WAS ANYTHING SPECIFIED? + POPJ P, ;YES +NM12: SKIPE T1,FILNAM ;NULL NAME SPECIFIED? + JRST NM8 ;NO - SO REMEMBER AND LOOK FOR FILE NAME + +NM13: TRO CALFLG,NSWTCH ;RETURN A NULL NAME + SETZM FILEX +NM14: SETZM FILNAM + POPJ P, + +NM15: POINT 6,FILNAM +NM5B: CAIG 0,LA ;ALLOW ANY SIXBIT CHAR NOT CS DELIMITER + CAIG 0,SPACE ;SPACES IGNORED + JRST NM3 ;IGNORE NOT LEGAL SIXBIT + JRST NM4 ;ACCEPT + + PUSHJ P,GETBUF ;GET NEXT ASCII CHAR. +NM16: CAILE 0,LF + CAIG 0,CR ;IF LF,FF,VT,OR CR + JRST NM5A ;RETURN + CAIE 0,ALTMOD ;SAME IF ALTMOD + CAIN 0,CZ ;OR ^Z + JRST NM5A + JRST NM16-1 ;GET NEXT CHARACTER + + ;ROUTINE TO OUTPUT ONE LINE FROM LBUF + +OUTLBF: TRNE FLAG,LINE + JRST OUTLBA ;OUTPUT LINE-BY-LINE +OUTCH1: MOVE T2,OPTRA ;OUTPUT CHARACTER-BY-CHARACTER +OUTLB1: CAMN T2,OPTR ;ARE ALL CHARACTERS OUT? + POPJ P, ;YES + ILDB CHR,T2 ;NO + PUSHJ P,PUT ;GO OUTPUT CHARACTER + JRST OUTLB1 +OUTLBA: TLNE FLAG,CHKFLG;PAREN COUNTING? + JRST OUTCHK ;YES, SO DO IT + TRNE AUXFLG,TTYOUT+LPTOUT + JRST OUTCH1 ;IF OUTPUT TO TTY OR LPT DO CHR BY CHR + MOVEI T1,4 ;CLEAR UNUSED PORTION OF LAST WORD USED IN LBUF + MOVEI T2,0 + MOVE T3,OPTR + IDPB T2,T3 + SOJG T1,.-1 + MOVEI T2,5 + HRRZ T1,OPTR ;COMPUTE NUMBER OF WORDS FILLED + SUBI T1,LBUF-1 + JUMPE T1,OUTLB3 ;DO NOTHING IF BUFFER EMPTY + IMULM T1,T2 ;COMPUTE CHARACTER COUNT=5 TIMES WORD CT +;THIS IS WHERE OLD FORTRAN MODE WAS TESTED. + CAMG T2,OBF+2 ;WILL LINE FIT IN THE OUTBUFFER? + JRST OUTLB2 ;YES + PUSHJ P,OUTP ;NO, SO DUMP BUFFER AND CHECK ERROR BITS + MOVEI T6 ,1 + TDNE T6,LBUF ;SEQUENCED? + TRNN AUXFLG,DTAOUT ;YES, ON DTA? + SKIP 1 ;NO + ADDI T2,40*5 ;LEAVE EDITING ROOM +OUTLB2: MOVNS T2 + ADDM T2,OBF+2 ;UPDATE OUTBUFFER CHARACTER COUNT + HRLI T2,LBUF + HRR T2,OBF+1 + AOJ T2, + ADDB T1,OBF+1 ;UPDATE OUTBUFFER BYTE POINTER + BLT T2,(T1) ;MOVE DATA TO OUTBUFFER +OUTLB3: POPJ P, + ;ROUTINE TO PUT ONE CHAR INTO OUT BUFFER + +TABOUT: MOVEI CHR,TAB ;OUTPUT A TAB +PUT: SOSG OBF+2 ;SUBR. TO OUTPUT ONE CHARACTER IN AC CHR + PUSHJ P,OUTP ;IF BUFFER FULL, DUMP AND CHECK ERR BITS + IDPB CHR,OBF+1 ;PUT CHARACTER IN BUFFER + POPJ P, + +;ROUTINE TO DUMP OUT BUFFER WHEN FULL + +OUTP: OUT OUT, ;SUBR. TO DUMP OUTBUFFER AND CHECK ERR BITS + JRST CPOPJZ ;NO ERRERS,BUT CLEAR IOS JUST IN CASE +OUTP1: GETSTS OUT,IOS ;HERE FOR BIT CHECKING ONLY + PUSHJ P,OUTP4 + SETSTS OUT,(IOS);ERRORS WERE DETECTED + POPJ P, ;NO ERRORS + +OUTP4: TRNN AUXFLG,MTAOUT + JRST .+3 +OUTP3: TRNE IOS,EOTBIT ;EOT? + JRST .+3 ;YES + TRNN IOS,740000 ;ANY ERROR BITS ON? + JRST CPOPJ1 ;NO + PUSHJ P,COMERR ;YES + + JSP T5,INICN2 ;INIT TTY + PUSHJ P,QUEST + ERRPN2 </Output device /> + PUSHJ P,P6BIT + ODEV + SKIPN DTON ;ONLY IF THERE IS A FILE NAME + JRST .+4 ;DON'T PRINT IF NOT + ERRPN2 </: file /> + MOVEI T3,DTON ;OUTPUT FILE NAME LOC + PUSHJ P,FN.EX ;PRINT FILE NAME EXT + MOVE T2,AUXFLG + ANDI T2,MTAOUT+DSKOUT+DTAOUT + +IOERR: MOVEI T1,TXTC ;PHYSICAL END OF TAPE + TRNE IOS,EOTBIT + JRST PTEXT2 ;YES + + MOVEI T1,TXTD2 ;7-9 PUNCH MISSING + TRNN T2,CDRIN + +IFN FTDSK,< + MOVEI T1,TXTD3 + TRNN T2,DSKIN!DSKOUT> + + MOVEI T1,TXTD ;WRITE LOCK ERROR + TRNN T2,DSKIN+DSKOUT+DTAIN+DTAOUT+MTAIN+MTAOUT + + MOVEI T1,TXTD1 + TRNE IOS,WRTLOK + JRST PTEXT2 + + MOVEI T1,TXTA ;DEVICE ERROR + TRNE IOS,200000 + JRST PTEXT2 + + MOVEI T1,TXTB ;CHECKSUM/PARITY ERROR + TRNE IOS,100000 + JRST PTEXT2 + +IFN FTDSK,< + HRRZ T1,TABLE+14 + TRNN T2,DSKOUT ;QUOTA EXCEDED> + + MOVEI T1,TXTC1 ;BLOCK TOO LARGE + JRST PTEXT2 + ;DEVICE ERROR COMMENTS + +TXTD: ASCIZ /write (lock) error/ + JRST IOERRN ;NO RECOVERY + +TXTD1: ASCIZ /binary data incomplete/ + JRST IOERRG + +TXTD2: ASCIZ /7-9 punch missing/ + JRST IOERRG + +TXTA: ASCIZ /device error/ + JRST IOERRG + +TXTB: ASCIZ /checksum or parity error/ + JRST IOERRG + +TXTC: ASCIZ /physical eot/ + JRST IOERRG + +TXTC1: ASCIZ /block or block number too large/ + ;FALLS THROUGH TO IOERRN + +IOERRN: RELEAS TAPE, ;NO RECOVERY ERRORS EXIT HERE + RELEAS DIR, + RELEAS OUT, + RELEAS IN, +IFN DISK30,< + RELEAS BLKIN,> + JRST PIP2 ;GET NEXT COMMAND + +IFN FTDSK,< +TXTD3: ASCIZ /monitor detected software error/> + +;TEST IF /G FLAG(IGNORE ERRORS) SET + +IOERRG: TLNN FLAG,GFLG ;PRINTED CURRENT MESSAGE + JRST IOERRN ;NO RECOVERY + + ERRPN2</ +/> ;PRINT CR, LF DON'T MOVE> + + RELEAS CON, + TRNE AUXFLG,TTYOUT ;TTY OUTPUT DEVICE? + PUSHJ P,OMODE ;YES, INIT OUTPUT DEVICE + TRNE AUXFLG,TTYIN ;REINIT TTYIN,TTYOUT + PUSHJ P,ININIT + TRZ IOS,740000 ;CLEAR FILE STATUS, I/O ERRORS + TRNE T2,MTAIN+MTAOUT + TRZ IOS,EOTBIT ;CLEAR PHYSICAL EOT I/O ERROR + MOVS 0,[XWD 1,SAVAC] + BLT 0,3 + MOVE T5,SAVAC+3 + MOVE T6,SAVAC+4 + POPJ P, + + COMERR: MOVE 0,[XWD 1,SAVAC] ;SAVE ACS T1,T2,T3,T5,T6 + BLT 0,SAVAC+2 + MOVEM T5,SAVAC+3 + MOVEM T6,SAVAC+4 + TRNE AUXFLG,TTYOUT ;RELEASE ANY TTYIO + RELEAS OUT, + TRNE AUXFLG,TTYIN + RELEAS IN, + POPJ P, +;PRINT FILE NAME AND EXTENSION FROM (T3), 1(T3). + +FN.EX: MOVE T1,(T3) ;T1=FILENAME + HLRZ T6,1(T3) ;T6=FILE EXT + CAIN T6,(SIXBIT /UFD/) + SETZ T1, ;UFD FILES ONLY ARE ASSUMED TO HAVE FILENAME + MOVEM T1,DERR2 ;OF NUMERIC FORM (#,# P-P NUMBER). + JUMPE T6,DERR2A ;FILE EXT=0? + CAIE T6,(SIXBIT /UFD/) + JRST DERR2B ;NO + + HLRZ DOUT,(T3) ;YES, GET PROJ. NO. + MOVEI T2,PUTCON ;PRINT PROJ-PROG. NO. + PUSHJ P,OUTDC1 ;CONVERT TO ASCII + + MOVEI CHR,COMMA + PUSHJ P,PUTCON + + HRRZ DOUT,(T3) ;GET PROG. NO. + PUSHJ P,OUTDC1 ;CONVERT TO ASCII + +DERR2B: TLO T6,"."-40 ;PUT SIXBIT PERIOD +DERR2A: MOVEM T6,DERR2+1 ;INTO EXTENSION + PUSHJ P,P6BIT + DERR2 + PUSHJ P,P6BIT + DERR2+1 + MOVEI CHR," " + JRST PUTCON + + + + + ;THIS ROUTINE GETS A 7 BIT ASCII CHARACTER FROM THE COMMAND STRING +;AND RETURNS IT TO THE COMMAND SCANNER ROUTINE (NAME) IN AC0 + +GETCOM: PUSHJ P,GETBUF + CAIN 0,"/" ;SINGLE CHARACTER SWITCH + JRST GETT6 + CAIN 0,"(" ;LOOK FOR (MULTI-CHAR.) SWITCH + JRST GETT3 + CAIN 0,"<" ;GO LOOK FOR PROTECTION + JRST GETT9 + CAIE 0,"[" + POPJ P, + +GETT10: PUSHJ P,GETDEC ;LOOK FOR PROJECT-PROGRAMMER NUMBER + CAILE T7,-1 ;GREATER THAN HALF WORD? + JRST ERR2A ;YES, ERROR + CAIE 0,"," ;SEPARATOR? + JRST GETUPJ ;OR TERMINATOR (NON-NUMERIC) + HRLZM T7,PP + PUSHJ P,GETDEC + CAILE T7,-1 + JRST ERR2A + +GETT11: HRRM T7,PP + CAIN 0,"]" ;FORCE CORRECT TERMINATOR + JRST GETCOM + JRST ERR2 + +GETT9: PUSHJ P,GETOCT + CAIN 0,">" ;TERMINATE ON RIGHT BRKT ONLY + CAILE T7,777 ;PR. IN RANGE? + JRST ERR2A + ROT T7,-11 + HLLOM T7,PR ;RHS=1'S MEANS <> SEEN (PR MAY BE 0) + JRST GETCOM + +GETUPJ: MOVE T5,UPROJ + HRLZM T5,PP + JRST GETT11 +GETOCT: SKIPA T5,[EXP 10] +GETDEC: MOVEI T5,12 +GETNUM: MOVEI T7,0 ;TO PICK UP P-P NUMBER +GETN1: PUSHJ P,GETBUF ;AND PROTECTION + CAIN 0," " ;IGNORE SPACES + JRST GETN1 + CAIL 0,"0" + CAIL 0,"0"(T5) + POPJ P, ;GOT A NON-NUMERIC + IMUL T7,T5 ; MULTIPLY BY RADIX + SUBI 0,"0" + ADD T7,0 ; ADD DIGIT + JRST GETN1 + GETT3: PUSHJ P,GETT5 ;PROCESS SWITCH CHARACTER + CAIN 0,")" ;CLOSING PAREN? + JRST GETCOM ;YES + CAIN 0,"M" ;MTA FLAG? + TRO FLAG, MTFLG ;SET MTA, LOOK FOR MULTI CHAR. SWITCH + CAIE 0,"#" ;MTA# + JRST GETT3 ;NO + TRNN FLAG,MTFLG ;ONLY LOOK AFTER # IF MTFLG IS ON. + JRST ERR6A ;I.E. IF MT SWITCH IS IN PROGRESS. + PUSHJ P,GETNUD ;GET A NUMBER + CAIE 0,"D" ;TERMINATED BY D? + CAIN 0,"A" ;TERMINATED BY A? + JRST GETT3A ;YES, MARK AB UPPER + CAIE 0,"P" ;ONLY A,D,P AND B CAN BE + CAIN 0,"B" ;PRECEDED BY #. + SKIP 1 + JRST ERR6A + HRRM T7,AB ;NO. FILES/RECS TO ADVANCE + ;GOES IN AB (RH) +GETT3B: PUSHJ P,GETT5A + JRST GETT3 + +GETT3A: HRLM T7,AB ;NO. FILES/RECS TO BACK SPACE + JRST GETT3B ;GOES IN AB (LH) + +GETT6: PUSHJ P,GETT5 ;PROCESS ONE SWITCH CHAR + CAIE 0,"M" + CAIN 0,")" ;THESE ARE ILLEGAL 1-SWITCH CHARS. + JRST ERR6A + JRST GETCOM + +GETNUD: MOVEI T7,0 ;GET A DECIMAL NUMBER +GETN2: PUSHJ P,GETBUF ;GET CHAR FROM COMMAND STRING + CAIN 0,SPACE ;SPACE? + JRST GETN2 ;YES, IGNORE + CAIL 0,"0" ;NUMBER? + CAILE 0,"9" + POPJ P, ;NO + IMULI T7,^D10 ;T7*10 + ANDI 0,17 ;ADD ON LAST DIGIT + ADD T7,0 ;+ LOW 4 BITS + JRST GETN2 + +;GET NEXT COMMAND STRING CHAR(SWITCH),CHECK WITH TABLE,SET FLAGS + +GETT5: PUSHJ P,GETBUF ;GET CHAR FROM COMMAND STRING +GETT5A: MOVE T2,[XWD 350700,DISPTB] ;SET DISPTB NEXT SEARCH + MOVEI T6,MTAREQ ;SET MTAREQ NEXT SEARCH + + TRNN FLAG,MTFLG ;SET UP TABLE TO SEARCH AND FLAG TO SET. + HRRI T2,DISPTA ;PUT IN BYTE POINTER, NOT MTA REQUEST + +;SET TO LOOK AT NON-MTA LETTERS FIRST + + TRNN FLAG,MTFLG ;IF MTFLG SET, START AT DISPTB AND STORE RESULT IN + MOVEI T6,AUXFLG ;MTAREQ, ELSE START AT DISPTA AND STORE RESULT IN + ;AUXFLG OR FLAG +;GET FIRST CHAR DISPTA OR DISPTB, LOOK FOR MATCH, SET SWITCH FLAGS. + +GETT7: LDB T3,T2 ;COMPARE WITH LEFT 7 BITS OF + JUMPN T3,GETT8 ;TABLE ENTRIES + TRZ FLAG, MTFLG ;SEARCHED TABLE 1 (DISPTB) DROP MTA FLAG + MOVEI T6,AUXFLG ;SET AUXFLG NEXT TABLE SEARCH + TLNE AUXFLG,NOMORE ;AFTER FIRST INPUT DEVICE ONLY ACCEPT MTA FLAGS + POPJ P, + +GETT8: CAIN T3,1 ;END OF DISPTA 1ST HALF? + MOVEI T6,FLAG ;YES, SEARCH DISPTA 2ND HALF FROM NOW ON + CAIN T3,2 ;END OF DISPTA 2ND HALF? + JRST ERR6A ;SEARCHED TABLE 3, ERROR EXIT + CAME T3,0 ;MATCHING CHARACTER? + AOJA T2,GETT7 ;NO, GET NEXT SWITCH IN TABLE. + + MOVE T5,(T2) ;YES, SET FLAG OR AUXFLG OR MTAREQ + ORM T5,(T6) ;FLAG OR AUXFLG + TRNE FLAG,MTFLG + ORM T5,AUX ;MTA REQUESTS SAVED IN AUX +IFE RIMSW,< + TLNE FLAG,RIMFLG + JRST RIMTB ;NO RIM IF RIMSW=0 + > ;PRINT ERROR MESSAGE + POPJ P, ;EXIT ON MATCHING CHAR + +;ROUTINE TO GET ONE TTY OR CCL COMMAND STRING CHAR INTO AC 0 + +GETTA: + + SOSLE TFI+2 ;SUBR TO GET ONE TTY CHAR IN AC 0 + JRST GETT2 ;BUFFER NOT EMPTY + MOVE 0,TFI ;BUFFER EMPTY, SAVE + MOVE T5,TFO ;CURRENT BUFFER LOCS + PUSHJ P,INICON ;BUFFER EMPTY SO RE-ATTACH TTY + HRROM 0,TFI ;RESTORE OLD BUFFER LOCS + HRROM T5,TFO ;USE PREVIOUSLY ASSIGNED I/O BUF. FOR TTY + MOVE T5,COMCNT ;DONT TYPE CR,LF + CAIG T5,^D69 ;FOR SHORT LINE + JRST GETTIN + PUSHJ P,INFO2 ;TYPE CR,LF +GETTIN: INPUT CON, ;GET THE NEXT LINE + MOVE T5,TFI+2 ;SAVE CHAR COUNT + RELEAS CON, ;LET GO OF TTY FOR USE AS IN-OUT DEVICE + MOVEM T5,TFI+2 ;RESTORE CHAR COUNT LOST DURING RELEASE +GETT2: ILDB 0,TFI+1 ;FETCH CHAR +GETT4: CAIE 0,ALT175 ;OLD ALTMODE? + CAIN 0,ALT176 + MOVEI 0,ALTMOD ;YES,MAKE NEW ALTMOD + JUMPE 0,GETTA ;IGNORE NULL CHARS + CAIL 0,140 ;LOWER CASE? + TRZ 0,40 ;YES MAKE UPPER CASE? + CAIE 0,XON ;IGNORE XON,XOFF ONLY FOR + CAIN 0,XOFF ;TTY SERVICE TO SIGNAL TTY + JRST GETTA ;PTR READ IN MODE + POPJ P, + +;ROUTINE TO GET ONE TTY CHAR FROM COMBUF INTO AC0 + +GETBUF: SOSGE COMCNT ;ANY CHARS LEFT? + JRST ERR6B ;NO, COMMAND ERROR + ILDB 0,COMPTS ;PICK UP CHAR FROM COMBUF + POPJ P, + +;ROUTINE TO INITIALIZE THE TTY, ASCII LINE MODE + +INICON: INIT CON,1 ;SUBR TO INITIALIZE THE TTY + SIXBIT /TTY/ + XWD TFO,TFI ;TTY OUT/IN BUFFER HEADERS + EXIT ;IF TTY NOT AVAILABLE,FATAL.JOB DET? + POPJ P, + ;GET 7 BIT ASCII CHARACTER - INPUT FROM CCL COMMAND FILE + +GETEN2: SETOM COMEOF ;INDICATE END OF FILE + MOVEI 0,CZ ;NEEDED TO TERM CCL CS SCAN + POPJ P, + ;TABLE OF RECOGNIZED COMMAND LETTERS AND CORRESPONDING FLAG BITS + +DEFINE DISP (A,B) +< XWD <"A">*4000,B> +;MAGTAPE SWITCHES AND FLAG BITS. TABLE 1 (MTAREQ) +DISPTB: DISP A,MTAFLG + DISP B,MTBFLG + DISP T,MTTFLG + DISP W,MTWFLG + DISP 8,MT8FLG + DISP 5,MT5FLG + DISP 2,MT2FLG + DISP E,MTEFLG + DISP U,MTUFLG + DISP F,MTFFLG + DISP D,MTDFLG + DISP P,MTPFLG + DISP #,0 + OCT 000000000000 +;1ST BYTE 0=END OF DISPTB +;------------------------ +;COMMAND STRING LETTERS AND FLAG BITS. TABLE 2 (AUXFLG) +DISPTA: XWD <"Q">*4000+QFLG,0 + XWD <"E">*4000+CDRFLG,0 + DISP F,FFLG + OCT 004000000000 +;1ST BYTE 1=END OF DISPTA 1ST HALF +;------------------------ +;COMMAND STRING LETTERS AND FLAG BITS. TABLE 3 (FLAG) + DISP A,LINE + DISP B,BMOD +IFN,K,< DISP C,TBMOD + DISP D,DFLG + DISP L,LFLG> + DISP M,0 + DISP ),0 + DISP N,NSMOD + DISP O,SQMOD+NSMOD+STS+OSFLG + XWD <"P">*4000+PFLG+PCONV,0 +IFN,K< DISP R,RFLG> + DISP S,SQMOD+NSMOD+STS +IFN,K< DISP T,SPMOD + XWD <"V">*4000+CHKFLG,LINE + DISP X,XFLG> + DISP Z,ZFLG + XWD <"U">*4000+OFLG,0 + XWD <"Y">*4000+IBFLG+RIMFLG,0 + XWD <"J">*4000+JFLG,0 + XWD <"I">*4000+IFLG,0 + XWD <"H">*4000+IBFLG,0 + XWD <"G">*4000+GFLG,0 + OCT 010000000000 +;FIRST BYTE 2=END OF DISPTA 2ND HALF + ;SUBR TO GET NEXT CHAR INTO AC CHR +;NO SKIP RETURN IS END OF FILE, SINGLE SKIP IS NORMAL RETURN + +GET: TLNN FLAG,NEWFIL ;NEW FILE? + TLZN FLAG,PCONV+NEWFIL ;NO,CONVERT THIS CHAR? + JRST GETPC1 ;YES + LDB CHR,IBF+1 ;GET CHAR + CAIN CHR," " ;SPACE? + JRST GETPC2 ;YES, CONVERT TO LINE FEED + CAIG CHR,"3" ;IS THE CHAR A PROPER FORMAT CONTROL CHAR? + CAIGE CHR,"*" + JRST GETPC3 ;NO, SO OUTPUT LINE FEED FOLLOWED BY BAD CHAR + CAIG CHR,"." ;USE LEFT HALF OF TABLE? + SKIPA CHR,PCHTAB-<"*">(CHR) + MOVS CHR,PCHTAB-<"/">(CHR) +GETPC4: DPB CHR,IBF+1 ;CLOBBER OLD CHAR, USUALLY BECOMES NULL + LSH CHR,-7 ;BUT OTHERWISE BECOMES ANOTHER FORMAT CHAR + ANDI CHR,377 ;EXTRACT THE CHAR TO BE OUTPUT + TRZE CHR,200 ;=1 FOR GENERATING MULTIPLE LINE FEEDS + TLO FLAG,PCONV ;CONTINUE TO CONVERT + JUMPN CHR,CPOPJ1;OUTPUT THE GENERATED CHAR UNLESS NULL + POP P,(P) ;IGNORE NULL CHARS + JRST PSCAN4 ;DUMP THE LINE BUFFER +GETPC1: TRNN FLAG,SUS ;SUPPLYING SEQ. NUM. NOW? + JRST GET2 ;NO + ILDB CHR,PTRPT ;YES, SO GET CHAR OF SEQ NUM + JUMPN CHR,CPOPJ1;0 MARKS LAST CHAR + LDB T1,IBF+1 ;GET FIRST CHAR OF THIS LINE + MOVEI CHR,15 + CAIG T1,15 ;PREPARE TO OUTPUT A CR,LF + CAIGE T1,12 ;IS FIRST CHAR OF LINE AN END OF LINE CHAR? + MOVEI CHR,TAB ;NO, SO OUTPUT A TAB + TRZ FLAG,SUS ;TURN OFF SUS SUPPLY + JRST GETA5 +GET5: AOS IBF+1 ;HERE IF A SEQ NUM FOUND IN INBUFFER + SUBI T1,5 ;IGNORE SEQ NUM, TAB AND DECREMENT CHAR COUNT + MOVEM T1,IBF+2 + TRNE FLAG,NSMOD ;REMOVE SEQ NUMS MODE? + JRST GET2 ;YES, SO GET NEXT CHAR + MOVEM T2,SQNUM ;SEQ NUM FROM BUFFER BECOMES NEW SEQ NUM + PUSHJ P,OUTLBF ;DUMP THE LINE BUFFER (IF REQUIRED) + TRON FLAG,STS+SNI ;TURN ON START OF LINE + ;AND NO-INCREMENT SEQ NUM FLAG + PUSHJ P,CLRBUF ;CLEAR LBUF IF IN THE MIDDLE OF A LINE + +GET2: TRZE FLAG,ESQ ;REPROCESS LAST CHAR? + JRST GET1 ;YES + SOSL T1,IBF+2 ;CHARS REMAINING IN INBUFFER? + JRST GET4 ;YES + PUSHJ P,INP ;NO, SO REFILL AND CHECK ERR BITS + TRNE IOS,EOFBIT ;END OF FILE? IOS HAS STATUS BITS + POPJ P, ;YES + JRST GET2 ;NO, SO PROCESS INBUFFER + +GETPC3: TRO FLAG,ESQ ;REPROCESS BAD CHAR + TROA CHR,12*200 ;PRECEED BAD CHAR WITH LINE FEED +GETPC2: MOVEI CHR,12*200;CHANGE SPACE TO LINE FEED + JRST GETPC4 + +PCHTAB: XWD 24*200,23*200+"." ;/ * + XWD 212*200+" ",177*200 ;0 + VJC 4/16/49 + XWD 14*200,21*200 ;1 , + XWD 20*200,212*200+"0" ;2 - + XWD 13*200,22*200 ;3 . + +GET4: ILDB CHR,IBF+1 ;FETCH CHAR FROM INBUFFER + TDNN FLAG,[XWD IFLG+IBFLG,BMOD] ;BIN, IB, I OR SBIN MODE? + TLNE AUXFLG,SBIN + JRST CPOPJ1 ;YES, SO NO PROCESSING REQUIRED +GET1: LDB CHR,IBF+1 ;AFTER SEQ NUM, HERE FOR 1ST CHAR + JUMPE CHR,GET2 ;IGNORE NULL CHARS + CAIN CHR,LF ;IGNORE LINE FEED IN FORTRAN OUTPUT + TLNN FLAG,PFLG ;/P SWITCH IN EFFECT? + JRST GET1A ;NO + TLO FLAG,PCONV ;CONVERT THE NEXT LIVE CHAR + JRST GET2 ;GET NEXT CHAR +GET1A: MOVE T2,@IBF+1 ;BIT 35 OF BUFFER SET? + TRZE T2,1 + JRST GET5 ;YES, THIS IS A SEQ NUM + TRZE FLAG,STS ;START SEQ (NEW LINE) FLAG ON? + TRNN FLAG,SQMOD+SNI ;YES, SEQ MODE OR SEQ COPY? + JRST GET7 ;NO, SO PROCESS CHAR + MOVE T2,SQNUM ;NO, SO ADD 10. TO SEQ NUM + MOVE T1,K1 + TRNE FLAG,OSFLG ;TEST FOR INCR. BY ONE + MOVE T1,K4 + ADD T2,T1 ;ASCII INCREMENT + AND T2,K3 ;MASK SIGNIFICANT DIGITS + MOVE T1,T2 + AND T1,ZRO ;MASK CARRY BITS + ASH T1,-3 + SUB T2,T1 ;ADJUST CARRIES + IOR T2,ZRO + TRZN FLAG,SNI ;NON-INCREMENT SEQ NUM FLAG ON? + MOVEM T2,SQNUM ;NO, SO SAVE THE RESULT + TRO FLAG,LINE+SUS+ESQ ;TURN ON SUPPLY SEQ, REPROCESS + ;LAST CHAR, AND LINE-BY-LINE FLAGS + AOS LBUF ;SET BIT 35 IN LBUF TO MARK SEQ NUM + MOVE T1,[POINT 7,SQNUM] + MOVEM T1,PTRPT ;INITIALIZE SEQ NUM PICK-UP POINTER + JRST GET ;GO OUTPUT FIRST CHAR OF SEQ NUM + ;ROUTINE TO INPUT INPUT FILE + +INP: IN IN, ;INPUT DATA + JRST CPOPJZ ;NO ERRORS ,BUT CLEAR IOS JUST IN CASE +INERR: GETSTS IN,IOS ;SUBR TO CHECK INPUT ERR BITS + TRNN AUXFLG,MTAIN ;MTA INPUT? + TRNE IOS,740000 ;ANY ERROR BITS SET? + TRNN IOS,740000+EOTBIT ;EOT FOR MTA? + POPJ P, ;NO + + PUSHJ P,COMERR ;SAVE AC'S RELEASE TTY + JSP T5,INICN2 ;YES SO PRINT OUT COMPLETE FILE DESCRIPTOR + PUSHJ P,QUEST + ERRPN2 </Input device /> + PUSHJ P,P6BIT + DEVICE + SKIPN ZRF ;IS THERE A FILE NAME + JRST .+4 ;NO,SO DON'T PRINT + ERRPN2 </: file /> + MOVEI T3,ZRF ;LOC OF INPUT FILE NAME TO T3 + PUSHJ P,FN.EX ;DEPOSIT FILE NAME, EXT INTO TTY OUT BUFFER + MOVE T2,AUXFLG + ANDI T2,CDRIN+DTAIN+DSKIN+MTAIN + PUSHJ P,IOERR ;GO PRINT ERROR DESCRIPTOR + SETSTS IN,(IOS) + POPJ P, + +;ROUTINE TO TEST IF BLOCK TOO LARGE, OR WRITE LOCKED + +QUEST: MOVEI CHR,"?" ;DEPOSIT "?" IN ERROR MSG + TLNN FLAG,GFLG ;ONLY IF /G NOT ON + JRST PUTCON ;/G NOT ON, PRINT ?(FATAL) BEFORE ERR MSG + + TRNN IOS,BIGBLK ;BLOCK NO. TOO LARGE? + JRST QUEST2 ;NO + TRNN AUXFLG,DTAIN+DTAOUT ;YES + POPJ P, ;BLOCK TOO LARGE + + JRST PUTCON ;DEPOSIT "?" FATAL EVEN IF /G ON + +QUEST2: TRNE IOS,WRTLOK ;WRITE LOCKED? + TRNN AUXFLG,DTAIN+DTAOUT+MTAIN+MTAOUT+DSKOUT + POPJ P, ;NO + JRST PUTCON ;DEPOSIT "?" FATAL EVEN IF /G ON + +GET7: TLNE FLAG,PCONV ;CONVERTING FORTRAN CARRAIGE CONTROL CHAR? + JRST GET+1 ;YES, GO DO IT + AOS T1,CDRCNT + TLNE AUXFLG,CDRFLG + JRST GET7B ;CARD READER INPUT + +GET7C: CAIN CHR,SPACE ;SPACE? + JRST GETA2 ;YES + CAIN CHR,CR ;CAR. RET.? + JRST GETA3 ;YES + TRZ FLAG,SPOK ;CHAR NOT A SPACE STOP COUNTING CONSEC. SPACES + CAIN CHR,TAB ;TAB? + JRST GETA5 ;KEEP TRACK OF TAB STOPS + CAIG CHR,137 + CAIGE CHR,SPACE ;NON-SPACING CHARACTER? + JRST CPOPJ1 ;YES, SO RETURN IMMEDIATELY + SOSG TABCT ;COUNT DOWN THE TAB STOP COUNTER + JRST GETA5 ;RESET THE COUNTER IF TAB STOP IS PASSED +CPOPJ1: AOSA (P) ;SKIP RETURN +CPOPJZ: SETZ IOS, ;CLEAR IOS JUST IN CASE +CPOPJ: POPJ P, + + +GET7B: CAIL T1,^D73 ;LT COL 73? + CAILE T1,^D80 ;NO, LE COL 80? + JRST GET7C ;CANT BE A CARD SEQUENCE NUMBER + MOVEI CHR,SPACE ;REPLACE CARD SEQUENCE NOS. BY SPACE + JRST GET7C + +GETA3: TRZE FLAG,SPOK ;CAR. RET. SEEN, ANY TRAILING SPACES? + TRNN FLAG,SPMOD+TBMOD ;YES, ARE WE FLUSHING TRAILING SPACES + JRST GETA5 ;NO, RESET TAB COUNTER ONLY + MOVE 0,SVPTR1 + MOVEM 0,OPTR ;CLOBBER THE OUTPUT POINTER TO LBUF +GETA5: MOVEI 0,TABSP + MOVEM 0,TABCT ;RESET THE TAB COUNTER + JRST CPOPJ1 + GETA2: TROE FLAG,SPOK ;SPACE WAS SEEN, IS THIS ONE OF A SEQUENCE? + JRST GETA7 ;YES + MOVE 0,OPTR ;THIS IS THE FIRST SPACE SEEN, SAVE LBUF + ;POINTER IN CASE THIS SPACE MUST BE FLUSHED + MOVEM 0,SVPTR1 ;THIS POINTER FOR FLUSHING FINAL SPACES + MOVEM 0,SVPTR2 ;THIS POINTER FOR CHANGING MULT. SPACES TO TABS + SETZM SPCT ;INITIALIZE THE SPACE COUNTER +GETA7: AOS T1,SPCT + SOSLE TABCT ;ARE WE AT THE NEXT TAB STOP? + JRST CPOPJ1 ;NO + CAIL T1,2 ;DONT BOTHER CHANGING ONE SPACE TO A TAB + TRNN FLAG,TBMOD ;TAB GENERATING MODE? + JRST GETA5A ;NO, GO RESET TAB COUNTER + MOVE 0,SVPTR2 + MOVEM 0,OPTR ;BACK UP THE OUTPUT POINTER OVER THE LAST + ;GROUP OF SPACES + MOVEI CHR,TAB ;OUTPUT A TAB + SETZM SPCT ;RESET THE SPACE COUNTER +GETA5A: IBP SVPTR2 ;UPDATE THE CHANGE-SPACES-TO-TABS POINTER + JRST GETA5 ;RESET THE TAB COUNTER + ;ERROR ROUTINES + +IFE WCH,<IFN RIMSW,< +ERR8A: MOVEI T4,ERR382 + JRST E10B +ERR3B: MOVEI T4,ERR381 + JRST E10B>> + +ERR10: MOVEI T4,E10A +E10B: SKIPN ZRF + SKIP 3 + ERRPNT </?File /> + MOVEI T3,ZRF + PUSHJ P,FN.EX + JRST (T4) + +IFE WCH,<IFN RIMSW,< +ERR381: ERRPN2 </illegal extension!/> + +ERR382: ERRPN2 </illegal format!/> + +ERR5B: ERRPN2 </? DTA to PTP only!/>>> + +ERR9: ERRPNT </?/> + MOVEI T3,DTON + PUSHJ P,FN.EX + JRST ERR4B + ERR1: SKIPA T2,ODEV ;OUTPUT UNAVAILABLE +ERR1A: MOVE T2,DEVICE ;INPUT UNAVAILABLE +ERR1B: ERRPNT </?Device /> + PUSHJ P,P6BIT + T2 + ERRPN2 </ not available!/> +ERR3: +IFN FTDSK,<TRNE AUXFLG,DSKIN + JRST DERR5 ;ERR ON DSK> + PUSHJ P,ERR3A + JRST IOERRN ;EXIT +ERR3A: TLO AUXFLG,INFOFL ;SIGNAL RETURN TO ERR3AA + JRST INFO +ERR3AA: ERRPN2 </? No file named /> + MOVEI T3,FILNAM + PUSHJ P,FN.EX ;PRINT NAME OF FILE THAT CANNOT BE FOUND + PUSHJ P,INFO2 ;OUTPUT MESS. WITH CR-LF + TRNN AUXFLG,TTYIN!TTYOUT ;WAS TTY IN USE? + POPJ P, ;NO + TRNE AUXFLG,TTYIN ;INPUT DEVICE? + JRST ININIT ;YES ,RE-INIT + JRST OMODE ;MUST BE OUTPUT + +ERR4: SKIPN DTON + JRST ERR4A +IFN FTDSK,<TRNE AUXFLG,DSKOUT ;ERR ON DSK + JRST DERR6> + ERRPNT </? Directory full!/> +ERR4A: +IFN FTDSK,<TRNE AUXFLG,DSKOUT + JRST ERR4C> +ERR4B: ERRPNT </?Illegal file name!/> +IFN FTDSK,< +ERR4C: ERRPNT </?(0) Illegal file name!/>> + +ERR6: +ERR6A: ERRPNT </?PIP command error!/> + +ERR6B: ERRPNT </?PIP command too long!/> + +E10A: ERRPN2 </ line too long!/> +ERR5A: ERRPNT </?Too many input devices!/> +;FILE MANIPULATION COMMANDS TO NON-DIRECTORY DEVICES COME HERE + +ERR5: ERRPNT </?Disk or DECtape input required!/> +ERR2: ERRPNT </?Incorrect Project-Programmer number!/> +ERR2A: ERRPNX </?Illegal protection!/> +IFE BLOC0,< +ERR7A: ERRPNT <Z?DECtape I/O only!Z>> + +ERR8: ERRPNT </?Explicit output device required!/> + +;ROUTINE TO CHECK INPUT DEV, SET XXXIN.E.G.DTAIN + +CHECK1: MOVE 0,DEVICE ;INPUT DEVICE NAME TO AC 0 + JUMPE 0,CHECK ;IGNORE IF NO INPUT DEVICE +IFN FTDSK,<PUSHJ P,PSYSP ; STR# 10-3178> + DEVCHR ;GET INPUT DEVCHR +IFN FTDSK,<TLNN 0,DSKBIT ;INPUT DEVICE DISK? + JRST CHECK2 ;NO + TRO AUXFLG,DSKIN;INPUT DEVICE IS DSK, SET BIT + MOVE T1,DEVICE + CAMN T1,[SIXBIT/SYS/] ; INIT SYS AS DSK + MOVSI T1,(SIXBIT/DSK/) + MOVEM T1,ADSK + JRST CHECK> + +CHECK2: JUMPE 0,DEVER1 ;NON-EX. DEVICE + + TLNN 0,INBIT ;CAN DEVICE DO INPUT? + JRST ERR6A ;NO, COMMD ERROR + + TLNE 0,PTRBIT ;PAPER TAPE READER? + TRO AUXFLG,PPTIN;YES + + TLNE 0,DTABIT ;DECTAPE? + TRO AUXFLG,DTAIN + + TLNE 0,MTABIT ;MAGTAPE? + TRO AUXFLG, MTAIN + + TLNE CDRBIT ;CARD READER? + TRO AUXFLG,CDRIN + + TLNE 0,TTYBIT ;TELETYPE? + TRO AUXFLG,TTYIN + +CHECK: TRNE CALFLG,SSWTCH ;_FLAG STILL ON? + JRST ERR6A ; YES ,COMMAND ERROR + POPJ P, ; NO, RETURN + ;SUBR TO PRINT ERROR MESSAGES +;! MARKS THE END OF MESSAGE & SIGNALS GO TO PIP2 +;NULL IS A FLAG TO RETURN TO THE NEXT LOCATION + +PRETXT: +PTEXT: RELEAS DIR, ;RELEASE DIRECTORY DEVICE + RELEAS TAPE, ;RELEASE MAGTAPE + RELEAS OUT, ;LET GO OF BOTH OUTPUT AND + RELEAS IN, ;INPUT DEVICES + JSP T5,INICN1 ;INITIALIZE THE TTY + MOVEI 0,CR + IDPB 0,TFO+1 ;OUTPUT A CR-LF + MOVEI 0,LF + IDPB 0,TFO+1 ;FOR BATCH +PTEXT2: HRLI T1,440700 ;GET SET TO SCAN 7-BIT DATA +PTEXT1: ILDB 0,T1 ;GET CHAR OF ERR MESSAGE + JUMPE 0,1(T1) ;RETURN ON ZERO + CAIN 0,"!" ;!? + JRST PIP2 ;YES, END OF MESSAGE, APPEND CAR.RET., LF + IDPB 0,TFO+1 ;DEPOSIT CHAR IN OUTBUFFER + JRST PTEXT1 ;GET NEXT CHAR + +;ROUTINE TO DEPOSIT CHARACTER IN TTY OUT BUFFER + +PUTCON: SOSG TFO+2 ;STORED MORE THAN BUFFER HOLDS? + OUTPUT CON, ;YES + IDPB CHR,TFO+1 + POPJ P, + +;ROUTINE TO CONVERT ONE WORD OF SIXBIT +;FROM ADDRESS IN LOCATION AFTER CALL AND DEPOSIT INTO TTY OUT BUFFER + +P6BIT: MOVE T1,@(P) ;PICK UP WORD OF 6-BIT + HRLI T1,440600 ;SET UP POINTER +P6BIT1: ILDB CHR,T1 + JUMPE CHR,P6BIT2 + ADDI CHR,40 + PUSHJ P,PUTCON ;DEPOSIT IN TTY +P6BIT2: TLNE T1,770000 ;DONE SIX? + JRST P6BIT1 ;NO + JRST CPOPJ1 ;SKIP RETURN + + ;ROUTINE TO CLEAR DSK OR DTA DIRECTORY (/Z SWITCH) + +DTCLR: TRNN CALFLG,DVSWTH ;HAS A DEVICE BEEN SEEN? + JRST ERR8 ;NO,SO DON'T SCREW USER +IFN FTDSK,<TRNE AUXFLG,DSKOUT ;CLEAR DSK OR DTA DIR. + JRST DSKZRO> + TRNN AUXFLG,DTAOUT ;MUST BE DTA + JRST ERR5 + UTPCLR OUT, ;CLEAR DIRECTORY + POPJ P, + ;ROUTINE TO SET UP TO COPY EVERYTHING + +PRECOP: PUSHJ P,ININIT ;INIT INPUT FILE + TRNN AUXFLG,DTAIN ;DECTAPE INPUT + SKIP 2 ;NO + PUSHJ P,DTCH2 ;YES, GET DIRECT, SET POINTERS TO DIRECT + +DTCOPY: PUSHJ P,DTADI1 ;START (T5) +IFN FTDSK,<TRNE AUXFLG,DSKIN ;DSK INPUT. ENTER HERE FROM DTD2 + PUSHJ P,DSKDIR ;YES, PREPARE TO LOOKUP FILES> +COPY1A: SETZM ZCNT ;CLEAR COUNT FOR DSK ZERO REQUESTS + MOVEI T2,6 ;FILL 0 CHARS. IN DEST-FILE + MOVE T1,[POINT 6,DTON] ;NAME WITH X'S. THIS IS +XSS: ILDB 0,T1 ;THEN THE BASE FOR GENERATED + JUMPN 0,.+2 ;DESTINATION FILES FROM + MOVEI 0,"X"-40 ;NON-DIR. DEVICES IN /X + DPB 0,T1 + SOJG T2,XSS ;DON'T YET KNOW IF ONE + ;OF THE INPUT DEV. WILL + MOVE 0,DTON ;BE NON-DIR + MOVEM 0,DTONSV + MOVE 0,DTON+1 + MOVEM 0,DTONSV+1 + +COPY1: PUSHJ P,SR2 ;SET INIT. COPYING MODE + PUSHJ P,LOOK ;GET A FILE TO COPY + JRST CAL6 ;NO MORE +IFN FTDSK<PUSHJ P,XDDSK ;GOT ONE, CHECK (XD) FROM DSK, NAMTAB + JRST COPY1 ;IN LIST, DON'T COPY> + TRNN AUXFLG,MTAIN+PPTIN+CDRIN+TTYIN ;OK, COPY FILE + JRST COPY6A ;MUST BE DIRECTORY DEVICE + PUSHJ P,MTPTCR ;SET UP A DEST. FN. + JRST COPY6 + COPY6A: LOOKUP IN,ZRF ;LOOKUP INPUT FILE NAME + JRST CAL5 ;INPUT FILE FILE PROTECTED +COPY6: PUSHJ P,FILTYP ;CHECK FOR DMP,SAV,REL,CHN +IFN WCH,< + TRNN AUXFLG,DTAIN+DTAOUT + JRST .+5 + HLRZ 0,ZRF+1 + CAIE 0,(SIXBIT /DMP/) +IFN DISK30,<CAIN 0,(SIXBIT/SVE/)> +IFE DISK30,<CAIN 0,(SIXBIT/SAV/)> + JRST COPY1> + PUSHJ P,COPY3 +COPY6B: MOVE 0,ZRF ;INPUT FILE NAME + MOVEM 0,DTON ;IS OUTPUT FILE NAME + HLLZ 0,ZRF+1 ;LIKEWISE EXT + HLLZM 0,DTON+1 + +;THIS CODE OPERATES AS FOLLOWS - FOR E+2, SET = 0 +;TO START (ASSUMING /X) +;DSK TO DSK IF EDIT SWITCHES PUT E+2 = 0 IF NO EDITS TRANSFER +; DATE, TIME, BITS 13-35 +;DSK TO DTA FOR EDITS E+2 = 0, NO EDITS TRANSFER 24-35 FOR +;DATE, FOR"SAV" FILES TRANSLATE NO. 1K BLOCKS +;DTA TO DSK FOR NO EDITS XFER BITS 24-35, ELSE E+2 = 0 +;DTA TO DTA ALWAYS XFER 18-23, (1K BLOCK) NO EDITS XFER 24-35(DATE) + + SETZM DTON+2 ;CLEAR DATE. OUTPUT FILE, DSK/DTA + LDB 0,DATE ;GET DSK/DTA DATE CREATED + TDNN FLAG,[XWD PFLG,LINE+TBMOD+NSMOD+SQMOD+SPMOD] + TLNE AUXFLG,CDRFLG + JRST COPY6C + DPB 0,DATED ;DEPOSIT IF NO EDITS +IFN FTDSK,<LDB 0,TIME + TRC AUXFLG,DSKIN+DSKOUT + TRCN AUXFLG,DSKIN+DSKOUT + DPB 0,TIMED ;DSK TO DSK TIME> +COPY6C: IFE WCH,< + PUSHJ P,OKBLKS ;SETUP 1K BLOCKS> + ENTER OUT,DTON ;GOT DATA, CREATE NEW FILE + JRST ERR4 ;DIRECTORY FULL + MOVE 0,ZRO ;GET ASCII/00000/AND + MOVEM 0,SQNUM ;RESET SEQUENCE NO. + TLO FLAG,NEWFIL ;SET NEW FILE FLAG + SETZM TOTBRK ;CLEAR PAREN COUNTER + TLNN AUXFLG,CDRFLG+SBIN ;SPECIAL PROCESSING? + TDNE FLAG,[XWD PFLG+IFLG+IBFLG,LINE+BMOD+TBMOD+NSMOD+SQMOD+SPMOD] + JRST PSCAN ;YES, DO IT +COPY5: SOSGE IBF+2 ;INPUT BUFFER EMPTY? + JRST COPY4 ;YES + ILDB CHR,IBF+1 ;GET NEXT WORD AND + PUSHJ P,PUT ;OUTPUT IT + JRST COPY5 +COPY4: PUSHJ P,COPY3 ;GET NEXT FULL SOURCE BLOCK + PUSHJ P,OUTP ;OUTPUT PREV. BLOCK-DONT ALTER DATA + AOS OBF+2 ;MAKE PUT HAPPY BECAUSE OF + JRST COPY5 ;OUTPUT HERE. +COPY2A: CLOSE IN, + CLOSE OUT, +IFN FTDSK,<TLNE AUXFLG,NSPROT ;NON-STANDARD PROTECTION? + TRNN AUXFLG,DSKOUT ;RENAME ALL OUTPUT FILES IF + JRST COPY2B ;NON-STANDARD PROTECTION + MOVE 0,PROTS ;GET NEW PROTECTION + MOVEM 0,DTON+2 + + RENAME OUT,DTON ;RENAME OUTPUT FILE + JRST DERR6> +COPY2B: PUSHJ P,OUTP1 + JRST COPY1 ;GO GET NEXT FILE + +CAL5: AOS ZCNT ;INPUT FILE READ PROT. + JRST COPY1 ;COUNT READ FAILURES + +;NO MORE FILES TO COPY + +CAL6: TLZ AUXFLG,NSPROT +IFN FTDSK,< SKIPN ZCNT ;FILES READ PROTECTED ?> + JRST MAIN1 ;NO +IFN FTDSK,<MOVSI T4,(SIXBIT /X/) ;YES,PRINT FAILURE DURING + JRST DSKZ5 ;/X REQUEST> + +COPY3B: SKIPE IBF+2 ;EMPTY BLOCK? + POPJ P, ;NO, RETURN + +COPY3: PUSHJ P,INP ;READ NEXT BLOCK + TRZE AUXFLG,READ1 + PUSHJ P,TTYZ ;END OF FILE FROM TTY? + TRNN IOS,EOFBIT ;END OF FILE? IOS HAS STATUS BITS + JRST COPY3B ;NO. + POP P,0 ;FIND WHERE CALLED FROM + HRRZS 0 + TRNE AUXFLG,MTAIN+CDRIN+TTYIN+PPTIN + CAIE 0,COPY6B ;DID WE COME FROM COPY6B-1 + JRST COPY2A ;NO, EOF NOT FIRST DATA IN FILE + TRZ CALFLG,ALLCLF ;END OF INFO ON NON-DIR. DEVICE + JRST COPY1 + ;CREATE DESTINATION FILE NAME. RANGE IS ...001 TO ...999 + +MTPTCR: AOS T1,NO. + CAILE T1,^D999 + JRST MPC2 + PUSHJ P,MTPTC1 + MOVE 0,DTONSV ;FILNAM=DTON IS ONLY WAY TO IDENTIFY + MOVEM 0,ZRF ;INPUT FILE + MOVE 0,DTONSV+1 + MOVEM 0,ZRF+1 + POPJ P, +MPC2: ERRPNT <Z?Terminate /X, max. of 999 files processed!Z> + +MTPTC1: MOVEI DOUT,^D1000(T1) + MOVE T1,[POINT 6,DTONSV,17] + JSP T2,OUTDC1 + AOJA T2,CPOPJ + SUBI CHR,40 + IDPB CHR,T1 + POPJ P, + +;ROUTINE TO RESTORE BYTE POINTERS TO INITED MODE +;FOR INPUT AND OUTPUT DEVICES + +SR2: MOVE 0,SVIBF + HLLM 0,IBF+1 + MOVE 0,SVOBF + HLLM 0,OBF+1 + POPJ P, + +;ROUTINE TO SEE IF ^Z FIRST CHAR ON TTY + +TTYZ: TRNN AUXFLG,TTYIN ;SEE IF FIRST CHAR. IS ^Z + POPJ P, ;NOT TTY INPUT + HRRZ T1,IBF+1 ;ON TTY + HLRZ 0,1(T1) ;GET FIRST CHARACTER + TRZ 0,3777 ;CLEAR ANY OTHER CHAR. + CAIN 0,(<CZ>B6) ;IS IT ^Z? + TROA IOS,EOFBIT ;YES,SET END OF FILE + CAIE 0,(<XON>B6) ;IS IT XON "^Q" + POPJ P, ;NO + MOVSI 0,(<DEL>B6) ;A RUBOUT + IORM 1(T1) ;CLEAR "^Q" FROM BUFFER + POPJ P, ;AND RETURN + IFE WCH,< +;DTA TO DTA MAINTAIN BITS 18-23 OF E+2 IF SET +;DSK TO DSK NO TRANSLATION (E+2) +;DSK TO DTA TRANSLATE E+3 (LHS) INTO E+2 (18-23) +;DTA TO DSK NO TRANSLATION (E+2) +;THIS ROUTINE ENSURES "SAVE" FILES MAINTAIN +;CORRECT DATA FOR LOADING. FOR DSK INPUT +;A "SAVE" FILE IS ONE WITH THE EXTENSION +;"SAV". E+3 = (-[(200XN)+NO. WDS IN LAST BLOCK] +;IN LHS TRANSLATE TO NO. 1K BLOCKS NEEDED +;TO LOAD FILE - BEFORE IT IS EXPANDED IN CORE. + +OKBLKS: TRNN CALFLG,RXFLG ;(RX)? + JRST OKBLK0 ;NO + MOVE 0,MATCH ;GET FILE NAME + HLRZ T1,MATCH+1 ;AND EXT. + CAME 0,STAR ;SKIP IF NAME IS "*" + MOVEM 0,DTON ;OTHERWISE REPLACE NAME + CAIE T1,(SIXBIT /*/) ;SAME FOR EXT + HRLM T1,DTON+1 +OKBLK0: MOVE 0,DTON ;GET OUTPUT FILE NAME + HLRZ T1,DTON+1 ;AND EXT + CAIE T1,(SIXBIT /*/) ;IS IT "*" + CAMN 0,STAR ;IS IT "*" + JRST ERR4B ;YES, ERROR + +REPEAT 0,< ;NEEDS FIX TO TENDMP OR MONITOR + TRNE AUXFLG,DTAOUT ;OUTPUT TO DTA? + CAIE T1,(SIXBIT /SAV/) ;AND A SAV FILE? + SKIP 1 ;NO + UGETF OUT,0 ;SET TO FIRST FREE BLOCK +> + +IFN FTDSK,<TRC AUXFLG,DSKIN+DSKOUT ;DSK I/O + TRCN AUXFLG,DSKIN+DSKOUT + POPJ P, ;YES, EXIT + TRC AUXFLG,DTAIN+DTAOUT ;NO + TRCE AUXFLG,DTAIN+DTAOUT ;DTA I/O + JRST OKBLK1 ;NO> + LDB 0,OKB ;DTA I/O - 1K BLKS + DPB 0,OKBD ;DEPOSIT IN DTON + POPJ P, + +IFN FTDSK,< +OKBLK1: TRC AUXFLG,DTAIN+DSKOUT ;DTA-TO-DSK + TRCN AUXFLG,DTAIN+DSKOUT + POPJ P, ;YES + TRC AUXFLG,DSKIN+DTAOUT ;NO,DSK-TO-DTA? + TRCE AUXFLG,DSKIN+DTAOUT ;NO + POPJ P, + HLRZ 0,ZRF+1 ;YES DSK-TO-DTA +IFE DISK30,< + CAIE 0,(SIXBIT /SAV/) ;GET LOOKED UP EXT,(INPUT). + > +IFN DISK30,<CAIE 0,SIXBIT /SVE/> + POPJ P, + HLRO T1,ZRF+3 ;EXTENSION=SAV + MOVNS T1 ;WORD COUNT + IDIVI T1,2000 ;DIVIDE BY 1K CORE(OCTAL LOCS.) + JUMPN T2,.+2 + SOJ T1, ;N-1 + DPB T1,OKBD + POPJ P,>> + +IFN FTDSK,< +;ARE WE DOING (XD) FROM DSK? IF NOT, EXIT. +;SEE IF CURRENT FILE SELECTED IN ZRF IS IN THE +;LIST OF FILES NOT TO BE COPIED. (POPJ IF IT IS) + +XDDSK: TRC FLAG,XFLG+DFLG ;COMPLEMENT + TRCN FLAG,XFLG+DFLG ;RESET AND TEST + TRNN AUXFLG,DSKIN ;/X AND /D WERE SET + JRST CPOPJ1 ;NOT DSKIN SO COPY FILE + HRROI T1,-12 ;SET TO LOOP NAMTAB +XDDSK2: MOVE T2,ZRF ;GET FILE NAME + SKIPN T3,NAMTAB+12(T1) ;END OF TABLE ENTRIES? + JRST CPOPJ1 ;YES, EXIT + CAME T2,T3 ;FN IS * OR MATCH? + CAMN T3,STAR + SKIP 1 ;YES, * OR MATCH? + JRST XDDSK1 ;NO MATCH + HLLZ T2,ZRF+1 ;GET EXT + SKIPN T3,NAMTAB+24(T1) ;NO EXT MATCH WANTED + POPJ P, ;EXIT THEN + CAME T2,T3 ;EXT IS * OR MATCH? + CAMN T3,STAR + POPJ P, ;FN EX MATCH, NO COPY +XDDSK1: AOJL T1,XDDSK2 ;TRY ANOTHER FOR MATCH + JRST CPOPJ1 ;SEARCHED TABLE, NO MATCH> + ;ROUTINE TO DELETE OR RENAME FILES ON DTA OR DSK OR SET UP NAMTAB +;FOR (DX) (DISK ONLY) + +DTDELE: TRNE FLAG,XFLG ;/X + JRST DELE1 ;YES + TRNN FLAG,DFLG ;/D NEED EXPLICIT DEVICE + SKIP 2 + TRNN CALFLG,DVSWTH ;-1 IF DEVICE SEEN + JRST ERR8 ;NO, ERROR + MOVE 0,ODEV ;OUTPUT DEVICE + MOVEM 0,DEVICE ;NO,SET DEVICE FOR INPUT + MOVEM 0,DEVA +DELE1: TRZ AUXFLG,DTAIN+CDRIN+TTYIN+PPTIN+MTAIN+DSKIN + PUSHJ P,CHECK1 ;RESET INPUT DEVICE DESCRP + MOVEI 0,NAMTAB ;FOR /R GET NEW NAME + HRLI 0,DTON ;SET TO BLT OUTPUT DIRECT ENTRY + BLT 0,NAMTAB+3 ;TO NAMTAB + + TRNN AUXFLG,DTAIN+DSKIN + JRST ERR5 ;NOT DTA OR DSK + PUSHJ P,FNSET ;SET UP CALFLG CORRECTLY + TRNE FLAG,XFLG ;/X? + JRST DTD1 ;YES, (DX). RX ILLEGAL +IFN FTDSK,<TRNE AUXFLG,DSKOUT ;NO, HAS TO BE /D OR /R + JRST DSKDR0 ;ON DSK> + JRST DTADR ;OR DTA + +DTD1: +IFN FTDSK,<TRNE AUXFLG,DSKIN ;DSK INPUT? + JRST DTD1A ;YES> + PUSHJ P,DTCHECK ;NO, HAS TO BE DTA, GET DIR + JRST DELE3 ;DELETE, FILES FROM DIR +IFN FTDSK,< +DTD1A: SETZM NAMTAB ;COLLECT NAMES FOR DX, DSK SOURCE + MOVE T1,[XWD NAMTAB,NAMTAB+1] + BLT T1,NAMTAB+23 ;FIRST CLEAR TABLE + MOVEI T1,NAMTAB ;LOCATION OF NAMTAB + MOVEM T1,LOCNAM +DTD4: MOVE 0,FILNAM + JUMPE 0,DTD4A ;FN=0 ILLEGAL + MOVE T1,LOCNAM + MOVEM 0,(T1) ;STORE FILENAME FROM CS + MOVE 0,FILEX ;STORE FILE EXT + MOVEM 0,12(T1) ;TABLE FULL? + MOVEI T2,NAMTAB+11 + CAMN T2,T1 + SOS ESWTCH ;YES + SKIPE ESWTCH ;NO, END OF CS SCAN? + JRST DTD2 ;END OF NAME PROCESSING + AOS T1,LOCNAM ;SET TO STORE IN NEXT SLOT NAMTAB +DTD4B: PUSHJ P,DESCRP ;NO, GET NEXT FILENAME FROM CS + TRNE CALFLG,NEWPP!NEWDEV + JRST ERR5A ;ERROR, NEW DEV OR# PP + JRST DTD4 +DTD4A: PUSHJ P,ERR3A + JRST DTD4B + +;END OF CS OR NAMTAB FULL +DTD2: PUSHJ P,ININIT ;INIT INPUT FILE + MOVEI T1,1 ;SET TO RETURN DTCOPY+1 + JRST DTD5> + ;ROUTINE TO DELETE OR RENAME FILES ON DTA + +DTADR: PUSHJ P,DTCHECK ;GO GET DTA DIRECTORY + MOVE T1,IBF ;CURRENT INPUT BUFFER +IFN WCH,< + USETO OUT,1 ;TRY TO WRITE OUTPUT TAPE + > ;DETERMINE IF WRITE LOCKED +IFE WCH,< + USETO OUT,144> ;THIS SHOULD GIVE ERROR MSG + OUTPUT OUT,(T1) ;IF DTA WRITE LOCKED + PUSHJ P,DTCHECK ;GO GET DTA DIRECTORY + + PUSHJ P,INFO ;WRITE "FILES DELETED/RENAME + +;********************************************************************* + + +;LOOP TO DELETE/RENAME. FOR (DX) DELETE FILES FROM DTA DIR +;THEN USE REVISED DIRECTORY TO COPY ALL REMAINING FILES + + +DELE3: PUSHJ P,LOOK ;GET FILE TO DELETE OR RENAME FROM CS + JRST DELE5 ;NO MORE FILES + TRNN FLAG,XFLG ;/X? + PUSHJ P,INFO3 ;PRINT FILENAME-EXT + MOVE T1,DIRST ;GOT A MATCH - PROCESS IT + TRNE FLAG,RFLG ;AND IT IS AT (T5) IN (DTA) DIR + JRST DTRNAM ;RENAME +IFN WCH,< + SKIPA T2,T1 + ADDI T2,4 + SKIPE 4(T2) + JRST .-2 + HRLS T1 + ADDI T1,4 ;GET TO END OF NAMES + MOVSS T1 ;BLOCK UP DIR + BLT T1,-1(T2) ;ZERO OUT LAST 4 WORDS + SETZM (T2) + SETZM 1(T2) + SETZM 2(T2) + SETZM 3(T2) + MOVE T1,DIRST1 + MOVEM T1,DIRST + JRST DELE3> +IFE WCH,< + SETZM (T1) ;DELETE FILENAME IN CORE DIRECT + SETZM 26(T1) ;DELETE EXT + SUB T1,DIRST1 ;GET FILE "NUMBER" (POS IN DIRECT) + MOVEI T3,1102 ;TO LOOK AT ALL BLOCKS + MOVSI T2,(POINT 5,0) + HRR T2,DIRST1 ;TO CALCULATE ADDRESS OF FIRST WORD + SUBI T2,122 ;OF BLOCK TABLE IN DIRECTORY +DELE2: SOJLE T3,DELE3 ;LOOK AT 1101 BLOCKS + ILDB 0,T2 ;GET BLOCK NUMBER + CAME 0,T1 ;IS IT SAME AS FILE "NUMBER" + JRST DELE2 ;NO IGNORE + SETZ 0, ;FREE THE BLOCKS OF THIS FILE + DPB 0,T2 ;CLEAR OUT BLOCK NUMBER + JRST DELE2> ;LOOP ON 1102 BLOCKS +DELE5: MOVE T1,IBF ;LOC OF INPUT BUFFER + TRNE FLAG,XFLG ;DX SWITCH? + JRST DTD6 ;YES, NOW MUST COPY REMAINING FILES +IFN WCH,< + USETO OUT,1> +IFE WCH,< + USETO OUT,144> + OUTPUT OUT,(T1) ;OUTPUT DTA DIRECTORY + RELEAS CON, ;OUTPUT DELETE OR RENAME INFO TO TTY + JRST MAINB + ;ROUTINE TO RENAME FILE ON DECTAPE + +DTRNAM: PUSHJ P,RENAME + SETZM DTON+2 ;MAKE MONITOR SUPPLY + SETZM DTON+3 ;DATE TIME + LOOKUP OUT,DTON ;LOOK UP FILENAME-EXT ON OUTPUT DEV + SKIP 1 ;NO FILE ALREADY OF DESTINATION NAME + JRST DTRNM1 + MOVE 0,DTON ;RENAME, FILENAME + JUMPE 0,DELE3 ;BUT NOT IF ZERO + MOVEM 0,(T1) ;PUT IN DIRECTORY + MOVE 0,DTON+1 ;GET EXT +IFE WCH,< + HLLM 0,26(T1)> ;RENAME, EXT +IFN WCH,< + HLLM 0,1(T1)> + JRST DELE3 +DTRNM1: HRRZ T2,IBF ; GET PROTECTION DIR SLOT + LDB 0,[POINT 5,17(T2),14] + CAIE 0,36 ; FILE PROTECTION ? + JRST ERR9 ; NO,ILLEGAL FILE NAME + JRST DELE3 ; RENAME DONE AT MAINB + +;END OF LOOP +;********************************************************************* +;DX SWITCH ON, COPY ALL BUT SPECIFIED FILES. I.E. THOSE NOT DELETED + +DTD6: MOVEI T1,0 ;SET TO RETURN TO DTCOPY +DTD5: MOVSI 0,(SIXBIT /*/) + MOVEM 0,FILNAM ;FORCE COPY-ALL + MOVEM 0,FILEX ;BY MAKING FILE-EXT=*.* + PUSHJ P,FNSET ;FIND DETAILS OF FILE-EXT + TRNE AUXFLG,DTAIN ;DTA INPUT + PUSHJ P,DTCH1 ;INIT DIRST,DIRST1 +IFN RIMSW, < + TLNE FLAG,RIMFLG ;NO + JRST RIMTB + > + JRST DTCOPY(T1) + + +;SET UP OUTPUT DIRECTORY ENTRY FOR RENAME +;ONLY ONE FILE NAME ALLOWED, BUT MAY BE *.EXT OR FN.* + +RENAME: SKIPL ESWTCH ;SKIP IF CR,LF SEEN IN C.S. + JRST ERR6A ;ONLY 1 SOURCE FILE DESCRIPTOR ALLOWED + HLRZ 0,NAMTAB+1 ;GET EXT + CAIN 0,(SIXBIT /*/) ;USE SPEC. EXTENSION, BUT IF + HLRZ 0,ZRF+1 ;EXT.=*, USE SOURCE EXTENSION + HRLM 0,DTON+1 ;USE SPECIFIED EXT + MOVE T2,NAMTAB ;USE SPEC. FN, BUT IF + CAMN T2,STAR ;FN=* OR 0, USE SOURCE FILENAME + MOVE T2,ZRF ;SOURCE FILE NAME=DEST + MOVEM T2,DTON ;USE SPECIFIED FILENAME + POPJ P, + + + + ;THIS ROUTINE GETS NEXT FILENAME.EXT FROM CS +;THEN SEES IF ONE IN DIRECTORY MATCHES +;IF IT DOES - EXIT IS CPOPJ1 +;NO-MORE-FN.EX-TO-HANDLE-EXIT IS POPJ +;PREPARE ZRF FOR A "LOOKUP" ON THE NEXT REQUESTED FILE. + +LOOK: TRNE CALFLG,FNEX ;DOES FILNAM, FILEX CONTAIN + JRST LOOK6 ;A FILE TO THINK ABOUT? YES +LOOK01: PUSHJ P,LOOKA ;GET ONE (NOTE: DEVICE MAY ALTER) + POPJ P, ;NONE, END OF CS + ;RETURN SKIP FROM LOOKA +LOOK6: MOVE T2,FILEX ;GET FILE EXT INTO T2 + SKIPN T1,FILNAM ;FILNAME AND EXT=0? + SKIPE T2,FILEX + SKIP 1 ;EITHER FN OR EX N.E.0 + JRST LOOK7C ;FN.EX=0, ONE FILE COPY + CAME T1,STAR ;FILNAME OR EXT=*? + CAMN T2,STAR + JRST LOOK7A ;FN OR EX=*, MANY FILES + + TRNE AUXFLG,DTAIN+DSKIN ;DONT REQUIRE FILENAME + JUMPE T1,LOOK6C ;HERE FOR 0.EX,FN.EX OR FN.0,0.EX ILLEGAL +LOOK7B: TRZ CALFLG,FNEX ;IF HERE, ONLY ONE FILE WAS ENTAILED IN REQUEST. + TRNN AUXFLG,DTAIN+DSKIN + JRST LOOK4 ;GOT A FILE TO HANDLE + +LOOK8: PUSHJ P,PICUP ;GET A FILE (ANY) FROM DIRECTORY + JRST LOOK2 ;WE GOT A FILE, DOES IT MATCH? + TRZE CALFLG,FNEX ;SEE IF A PARTIC. FILE WAS REQUESTED? + JRST LOOK6D ;NO + JRST LOOK6C ;YES + +LOOK6A: PUSHJ P,ERR3A + JRST IOERRN ;NO RECOVERY +LOOK6C: PUSHJ P,ERR3A + JRST LOOK01 ;GET NEXT FILE FROM CS + +LOOK6D: TRZN CALFLG,ASTFLG ;DID WE FIND AT LEAST ONE + PUSHJ P,ERR3A ;NO, PRINT MSG. + JRST LOOK ;GET NEXT FILE FROM CS +;CHECK IF FILE.EXT IN DIRECTORY MATCHES FILE TO /D,/R +;NOTE WE MAY HAVE *.EXT,FIL.*, OR *.* + + +LOOK2: TRNN CALFLG,MATFN ;SHOULD FILENAMES MATCH + JRST LOOK3 ;NO + MOVE T1,FILNAM ;YES + CAME T1,ZRF + JRST LOOK8 ;NO MATCH + +LOOK3: TRNN CALFLG,MATEX ;SHOULD EXTENSIONS MATCH + JRST LOOK5 ;NO + MOVE T1,FILEX ;YES + CAME T1,ZRF+1 + JRST LOOK8 ;NO MATCH +LOOK5: IFN DISK30,< + TRNN AUXFLG,DSKIN ;DSK INPUT? + JRST LOOK4 ;NO + LDB T1,UFDIN+1 ;PICKUP P-P# IN DIRECTORY + HRRZM T1,T2 + CAME T2,MASK ;COMPARE WITH OWN P-P# + JRST LOOK8 ;NO MATCH> +LOOK4: TRO AUXFLG,READ1 ;READY FOR FIRST READ + TRO CALFLG,ASTFLG ;FOUND A FILE *.EXT, F.*,*.* + JRST CPOPJ1 ;MATCH OR NO CARES + +;FILENAME OR EXT=* +LOOK7A: JUMPE T2,.+2 ;EXT=0? + CAMN T2,STAR ;NO, + CAME T1,STAR + SKIP 1 + JRST LOOK1 ;*.* ALWAYS O.K. AND * + TRNN AUXFLG,DSKIN+DTAIN + JRST LOOK6A ;*.A OR * ON NON-DIRECT DEV + JRST LOOK8 + +LOOK7C: TRNE AUXFLG,DSKIN+DTAIN + JRST LOOK6C ;0.0 ON DIR DEVICE + SETZM ZRF + SETZM ZRF+1 + JRST LOOK7B ;0.0 ON NON-DIR. DEV. + +LOOK1: TRNE AUXFLG,DTAIN+DSKIN + JRST LOOK8 + SETZM ZRF + SETZM ZRF+1 + JRST LOOK4 + ;ROUTINE TO GET NEXT FILE NAME FROM DIRECTORY +;FILNAM, FILEX CONTAIN THE FILE NAME. EXT TO BE +;MATCHED WITH DIR. NAMES. PUT SUGGESTED FILE +;NAME EXT IN ZRF, ZRF+1 AND #P-P IN ZRF+3 +;NOTE THAT WE HAVE TO HANDLE *.EXT,FILE.* + +PICUP: +IFN FTDSK,<TRNN AUXFLG,DSKIN ;DSK INPUT? + JRST PICUP2 ;N0, DTA + SOSLE UFDIN+2 ;YES + JRST .+3 +PICUP1: PUSHJ P,UIN ;INPUT USER'S FILE DIRECTORY + JRST CPOPJ1 ;EOF ON DSK + ILDB 0,UFDIN+1 ;PICK UP FILENAME + JUMPE 0,PICUP1 ;IGNORE NULL + MOVEM 0,ZRF ;SET FILE NAME + MOVE 0,FNPPN + MOVEM 0,ZRF+3 ;SET DSK #P-P + SOS UFDIN+2 ;COUNT DOWN FOR NEXT TIME + ILDB 0,UFDIN+1 ;SET FILE EX + HLLZM 0,ZRF+1 +IFN DISK30,< + IBP UFDIN+1 ;INCREMENT POINTER TO GET PROJ,PROG # + IBP UFDIN+1> + POPJ P,> + +PICUP2: +IFN WCH,< + MOVE T5,DIRST ;DIRST=LOC 4 FIRST TIME THRU + ADDI T5,4 ;CALCULATE FIRST/NEXT FILENAME + MOVEM T5,DIRST + MOVE 0,(T5) + JUMPE 0,CPOPJ1 ;NO MORE FILENAMES IN DIRECTORY + MOVEM 0,ZRF + MOVE 0,1(T5)> +IFE WCH,< + MOVE T3,DIRST1 ;SETUP TO CHECK ALL FILENAME SLOTS + ADDI T3,26 ;IN DIRECTORY (22 FILE NAMES) + MOVE T5,DIRST ;LOC OF FIRST/NEXT FILE +PICUP4: ADDI T5,1 ; + CAMLE T5,T3 ;END OF FILE SLOTS? + JRST CPOPJ1 ;END OF FILE NAMES + MOVEM T5,DIRST ;NEXT SLOT TO LOOK AT + MOVE 0,(T5) ;GOT FILE NAME FROM DIRECT + JUMPE 0,PICUP4 ;IGNORE IF 0 + MOVEM 0,ZRF + MOVE 0,26(T5)> ;GET EXT ETC + HLLZM 0,ZRF+1 + MOVE 0,PP + MOVEM 0,ZRF+3 + POPJ P, + ;READ DTA DIR. AND PREPARE T5 TO PICK UP FIRST ENTRY. + +DTADIR: PUSHJ P,DTCH2 ;READ DTA DIR INTO INPUT BUF +DTADI1: MOVEI T3,DBUF ;SET BLT FROM INBUF TO DBUF + HRL T3,T5 ;FIRST DATA WORD OF DIRECTORY IN T5 +IFN WCH,< + MOVNS T2 + BLT T3,DBUF+176(T2) + SETZM DBUF+177(T2) + MOVEI T5,DBUF-4> +IFE WCH,< + BLT T3,DBUF+176 ;MOVE FROM INBUF TO DBUF + MOVEI T5,DBUF+123-1> ;LOC OF FIRST FILE NAME + MOVEM T5,DIRST ;T5 POINTS TO FILNAME JUST HANDLED + MOVEM T5,DIRST1 ;TO RESTORE DIRST + POPJ P, ;(IE NONE BUT NEXT WILL BE FIRST) + + +;ROUTINE TO OUTPUT FILENAMES THAT WERE DELETED OR RENAMED +;PRINT "FILES DELETED:" OR "FILES RENAMED:" +;ALSO USED TO PRINT "NO FILE NAMED XXX.XXX" + + +INFO: MOVE T1,TFO ;SETUP TTY FOR OUTPUT + MOVE T2,TFI ;SAVE BUFFER LOCS + PUSHJ P,INICON ;INIT TTY + HRROM T2,TFI ;SET BUFFER LOCS + HRROM T1,TFO + OUTPUT CON, + TLZE AUXFLG,INFOFL ;ERROR PRINT ONLY? + JRST ERR3AA ;YES + TRNN FLAG,DFLG ;DELETE? + JRST INFO1 ;NO, MUST BE RENAME + ERRPN2 </Files deleted:/> + JRST INFO2 +INFO1: SETOM RENSN ;DON'T PRINT IT TWICE + ERRPN2 </Files renamed:/> ;RENAME (/R) +INFO2: MOVEI CHR,CR ;OUTPUT CR/LF + PUSHJ P,PUTCON ;ON TTY + MOVEI CHR,LF + PUSHJ P,PUTCON + OUTPUT CON, + POPJ P, + +;********************************************************************** +;PRINT FILENAME.EXT OR [P,P].UFD OF FILE DELETED + +INFO3: MOVEI T3,ZRF ;LOCATION OF FILENAME + PUSHJ P,FN.EX + JRST INFO2 + ;/X OR /D. FIND OUT DETAILS OF FILE NAME AND +;EXTENSION (0 FN.EX=*.*) AND ANY CHANGE IN +;SOURCE DEV. SET BITS IN CALFLG. + +FNSET: TRZ CALFLG,ALLCLF ;CLEAR FLAGS ON ENTRY + TRO CALFLG,FNEX + MOVSI 0,(SIXBIT /*/) ;* TO AC0 + CAME 0,FILNAM ;FILNAM=* OR 0? + SKIPN FILNAM + SKIP 1 ;FILENAME = * OR 0 + TRO CALFLG,MATFN ;FILENAME MUST BE MATCHED + SKIPN FILEX ;EXT=0? + TRNN AUXFLG, MTAIN+CDRIN+PPTIN+TTYIN ;YES + CAMN 0,FILEX ;NO, EXT = *? + SKIP 1 ;YES + TRO CALFLG,MATEX ;FILE EXTENSION MUST BE MATCHED +IFN FTDSK,<TRNN AUXFLG,DSKIN + JRST FNSET1 + SKIPN T2,PP + JRST FNSET2 ;IF #P-P=0 IT IS COUNTED AS UNCHANGED + CAME T2,FNPPN + TRO CALFLG,NEWPP ;CHANGE IN # P-P + JRST FNSET1 +FNSET2: MOVE T2,FNPPN ;IF P-P#=0, SET TO PREVIOUS VALUE + MOVEM T2,PP> +FNSET1: MOVE T2,DEVICE + CAME T2,DEVA + TRO CALFLG,NEWDEV ;CHANGE IN SOURCE DEV. + MOVEM T2,DEVA ;SET DEVA=DEVICE + POPJ P, + ;POPJ EXIT IF END OF COMMAND STRING, OTHERWISE RESET +;POINTER TO START OF DIRECTORY, READING IN NEW DIR. +;IF DEV OR #P-P CHANGED (EXIT CPOPJ1) +;IF DIR. IS ON DSK RESET BY REINIT. + +LOOKA: SKIPE T4,ESWTCH ;MORE C.S.? + POPJ P, ;NO + PUSHJ P,DESCRP ;YES, GET NEXT FN.EX FROM CS + PUSHJ P,INLOOK ;CHECK FOR MTA REQUESTS, MODE + PUSHJ P,M4 ;CHECK FOR /I,/B,/H + HRRZM T4,ININI1 ;SET MODE + RELEAS DIR, + TRNN AUXFLG,MTAIN+CDRIN+PPTIN+TTYIN ;NON-DIR DEVICE? + JRST LOOKF + + TRNE CALFLG,MATEX!MATFN ;YES, NO FN EX BUT *.* OR * ALLOWED + JRST ERR6A + +LOOKF: TRNN FLAG,DFLG ;FOR DELETE, ONE SOURCE FILE + JRST LOOKB ;... + + TRNE CALFLG,NEWDEV!NEWPP ;ONLY IS PERMITTED + JRST ERR5A + +LOOKB: TRNN CALFLG,NEWDEV!NEWPP ;PREPARE TO LOOK FOR NEW FILE + JRST LOOKC ;NAME AT HEAD OF DIRECTORY + + PUSHJ P,ININIT ;INIT INPUT FILE + TRNN AUXFLG,DTAIN+DSKIN + JRST CPOPJ1 +IFN FTDSK,<TRNN AUXFLG,DTAIN ;DTA INPUT? + JRST LOOKD ;NO, MUST BE DSK> + PUSHJ P,DTADIR ;YES, READ IN DTA DIRECT + +LOOKC: +IFN FTDSK,<TRNE AUXFLG,DSKIN ;DSK INPUT? + JRST LOOKD ;YES> + MOVE T5,DIRST1 ;NO, RESET DIRECTORY START + MOVEM T5,DIRST + JRST CPOPJ1 + +IFN FTDSK,< +LOOKD: PUSHJ P,DSKDIR ;GET USER'S FILE DIRECTORY + SETZM UFDIN+2 ;DSK DIR BUF EMPTY + JRST CPOPJ1> + ;ROUTINE TO LIST DTA OR DSK DIRECTORIES + + +DTPDIR: ENTER OUT,DTON ;OUTPUT DEV,NROCT ENTRY + JRST ERR4 ;DIRECTORY FULL +IFN FTDSK,<TRNE AUXFLG,FFLG ;/F? SHORT FORM? + SKIPE DEVICE ;INPUT DEVICE SPECIFIED? + JRST PDIR1A ;YES + MOVSI 0,(SIXBIT/DSK/) + DEVCHR + JUMPE 0,PDIR1A ;NO DISK + HRRZI 0,(SIXBIT /DSK/);ASSUME DSK IF NO DEVICE GIVEN + HRLZM 0,DEVICE + TROA AUXFLG,DSKIN ;SET DSK INPUT +PDIR1A: TRNE AUXFLG,DSKIN ;DSK INPUT? + JRST DSKLST ;YES, GO AND TRY TO LIST DSK> + TRNN AUXFLG,DTAIN ;DECTAPE INPUT? + JRST ERR5 ;NOT DSK OR DTA. ERROR + +;ROUTINE TO LIST DTA DIRECTORY. /L OR /F SWITCH + +DTALST: PUSHJ P,DTCHECK ;CHECK FOR DTA INPUT-MUST BE DECTAPE AND + ;GET DIRECTORY + PUSHJ P,CRLF ;PRINT NO. OF FREE BLOCKS LEFT + LDB T1,[POINT 5,16(T5),14] + CAIE T1,36 ; SKIP DIR HEADER IF + JRST PDIR1B ; DECTAPE HAS NO PROTECTION + LSTLIN HEDL1 ; PRINT HEADER + MOVE T2,DTAID + JUMPE T2,DTALS4 + MOVEI T2,5 ; CHARACTER COUNT + MOVE 0,[POINT 6,DTAID] + ILDB CHR,0 ; GET CLASSIFICATION + CAIE CHR,23 ; STD (I.E.=3) ? + AOJA T2,DTALS3 +DTALS1: ILDB CHR,0 ; GET NEXT DIGIT + ADDI CHR,40 ; CONVERT TO ASCII + CAIN CHR,"0" ; SUPPRESS LEADING ZEROS + SOJG T2,DTALS1 + PUSHJ P,PUT +DTALS2: SOJLE T2,DTALS4 + ILDB CHR,0 +DTALS3: ADDI CHR,40 + PUSHJ P,PUT + JRST DTALS2 +DTALS4: MOVEI CHR,"[" + PUSHJ P,PUT + HLRZ DOUT,DIRPPN + PUSHJ P,OUTDEC + MOVEI CHR,"," + PUSHJ P,PUT + HRRZ DOUT,DIRPPN + PUSHJ P,OUTDEC + MOVEI CHR,"]" + PUSHJ P,PUT + PUSHJ P,CRLF +PDIR1B: + +IFN WCH,< + MOVE T1,IBF + HLRZ DOUT,1(T1) ;GET FREE BLOCK POINTER + MOVNS DOUT + ADDI DOUT,1101 ;GET NO. OF FREE BLOCKS LESS FREE BLOCK NO. + PUSHJ P,OUTDEC ;PRINT RESULT> +IFE WCH,< + SETZ DOUT, ;CLEAR NO. FREE BLOCKS + MOVEI T4,1102 ;OCTAL NO. OF BLOCKS ON DECTAPE + MOVSI T1,(POINT 5,0) ;5 BIT BYTES + HRRZ T5,IBF ;CURRENT INPUT BUFFER + ADDI T1,1(T5) ;POINTER TO 1ST DATA WORD IN DIRECT + +PDIR8: SOJLE T4,PDIR1 ;ALL THROUGH? + ILDB T3,T1 ;CALCULATE NO. OF FREE BLOCKS + JUMPN T3,PDIR8 + + ;THIS BLOCK FULL + AOJA DOUT,PDIR8 ;COUNT NO. WITH ZERO IN +PDIR1: PUSHJ P,OUTDEC ;PRINT RESULT> + MOVE 0,[POINT 6,PDIR7] + MOVEI T2,^D18 ;SET LOOP TO DEPOSIT 18 CHARS + PUSHJ P,PDIR2 ;PRINT "FREE BLOCKS LEFT" MESSAGE + PUSHJ P,CRLF ;CARRIAGE RET, LINEFEED + PUSHJ P,DTCH1 ;FIX T5, TO POINT AT BEGIN OF DIR + ;LOOP TO EXAMINE FILE NAMES DTA DIRECTORY +PDIR4: +IFE WCH,< + SKIPN 123(T5) ;NULL (=0) FILE NAME? + JRST PDIR6 ;YES SO LOOK FOR ANOTHER> +IFN WCH,< + SKIPN (T5) ;NULL (=0) FILE NAME? + JRST MAIN1 ;YES, SO END OF DIR.> + MOVEI T2,6 ;TRANSMIT UP TO 6 CHARACTERS + MOVSI 0,440600+T5 ;SET UP SOURCE BYTE POINTER +IFE WCH,< + HRRI 0,123> ;SET TO PICK UP FILE NAME + SETZ T4, +;FOLLOWING CODE TO OUTPUT PROJ, PROG FILENAME +;***************************************************************** +IFE WCH,< + HLRZ CHR,151(T5) ;GET EXT + CAIE CHR,(SIXBIT/UFD/) ;UFD? + JRST PDIR4A ;NO + + HLRZ DOUT,123(T5) ;PROJ NO. + MOVEI T2,PUT + PUSHJ P,OUTDC1 + + MOVEI CHR,COMMA ;COMMA + PUSHJ P,PUT + + HRRZ DOUT,123(T5) ;PROG NO. + PUSHJ P,OUTDC1 + JRST PDIR4B + > +;********************************************************************* +PDIR4A: PUSHJ P,PDIR2 ;OUTPUT 6-BIT DATA AND INCR DIRECTORY PTR +IFE WCH,< +PDIR4B: HLLZ CHR,151(T5)> ;PICK UP EXTENSION +IFN WCH,< + HLLZ CHR,(T5)> + MOVSI 0,440600+T5 ;SET BYTE POINTER +IFE WCH,< + HRRI 0,151> ;PICK UP EXTENSION + MOVEI T2,4 ;PRINT UP TO 4 CHRS. (PERIOD+3*EXT) + JUMPN CHR,.+3 ;EXTENSION NULL? + PUSHJ P,PDIR2A+1 ;YES + SKIP 2 ;NO + MOVEI CHR,PERIOD-40 ;NO, SO PRINT A PERIOD +PDIR3: PUSHJ P,PDIR2A ;OUTPT 6 BIT OR INCR T5 +IFE WCH,< + MOVEI CHR,SPACE ;OUTPUT 2 SPACES + PUSHJ P,PUT + PUSHJ P,PUT + TRNE AUXFLG,FFLG ;SHORT FORM DIRECT ? + JRST PDIR3A ;YES VJC 4/16/69 + + SETZ DOUT, ;CALCULATE NBR OF BLOCKS PER FILE + MOVEI T4,1101 + MOVSI 0,(POINT 5,0) + HRRZ T2,IBF + ADDI 0,1(T2) + HRRZ T7,T5 + SUBI T7,(T2) + ILDB T6,0 ;LOAD CONTENTS OF S.A.T. BLOCK + CAMN T6,T7 ;COMPARE WITH FILE SLOT NBR + ADDI DOUT,1 ;ADD 1 TO COUNT IF EQUAL + SOJG T4,.-3 + PUSHJ P,OUTDEC ;OUTPUT NBR OF BLOCKS PER FILE + MOVEI CHR,TAB + > +IFN WCH,< + AOJ T5, ;STEP DIR. POINTER + MOVEI CHR,11 + PUSHJ P,PUT ;OUTPUT A TAB + CAIG T4,7> + PUSHJ P,PUT + LDB T1,[POINT 5,DBUF+16,14] + CAIE T1,36 + JRST PDIR3B + HRRZ T1,IBF + SUBM T5,T1 + LDB 0,[POINT 9,DBUF+200(T1),8] + PUSHJ P,PROTO ; OUTPUT PROTECTION +PDIR3B: +IFE WCH,< + MOVE 0,151(T5) ;GET ENTRY DATE> +IFN WCH,< + MOVE 0,-1(T5) ;GET ENTRY DATE> + ANDI 0,7777 ;LEFT BITS ARE IRRELEVENT + PUSHJ P,DATOUT ;OUTPUT THE DATE +PDIR3A: PUSHJ P,CRLF ;GIVE CR,LF 4/16/69 +IFN WCH,< + AOJA T5,PDIR4 ;PROCESS NEXT ENTRY> +IFE WCH,< +PDIR6: HRRZ T1,IBF ;PROCESS NEXT ENTRY + SUBM T5,T1 + CAIL T1,26 ;FILE "NUMBER" OK? + JRST MAIN1 ;NO, END OF ENTRIES + AOJA T5,PDIR4 ;END OF LOOP, GET NEXT FILENAME> + +IFN FTDSK,< +CLRF: SOS LIN> +CRLF: MOVEI CHR,CR ;OUTPUT CAR. RET. + PUSHJ P,PUT + MOVEI CHR,LF ;LINE FEED + JRST PUT + +PDIR2: ILDB CHR,0 ;ROUTINE TO OUTPUT 6-BIT DATA + TRNN 0,-1 ;PRINT SPACES WHEN PRINTING THE FREE BLOCKS +PDIR2A: JUMPE CHR,PDIR21 ;TERMINATE ON SPACE + ADDI CHR,40 ;CONVERT TO 7 BIT + PUSHJ P,PUT ;OUTPUT CHARACTER + ADDI T4,1 + SOJG T2,PDIR2 ;COUNT DOWN MAX-CHARS COUNTER +IFN WCH,< +PDIR21: AOJA T5,CPOPJ ;STEP AND CONTINUE> +IFE WCH,< +PDIR21: POPJ P, ;CONTINUE> + PDIR7: SIXBIT /. FREE BLOCKS LEFT/ +;OUTPUT THE DATE FOUND IN AC 0. + +DATOUT: MOVEI T2,PUT ;PUT CHAR IN OUT + IDIVI 0,^D31 + MOVEI T3,1(1) + IDIVI 0,^D12 + MOVE DOUT,T3 ;DOUT=DAY + PUSHJ P,OUTDC1 ;PRINT DAY + PUSHJ P,DATO2 ;PRINT -MONTH- + MOVE DOUT,0 + ADDI DOUT,^D64 ;DOUT=YEAR +OUTDC1: SKIPA DOUT+1,TWL ;RADIX 10 +;******************************************************************* +;ROUTINE TO CONVERT OCTAL TO ASCII +;DOUT CONTAINS OCTAL VALUE ON ENTRY + +OUTOCT: MOVEI DOUT+1,10 ;RADIX 8 +PRNUMA: HRRZM DOUT+1,T4 + MOVEI CHR,"0" + CAMGE DOUT,DOUT+1 ;PRINT AT LEAST 2 DIGITS + PUSHJ P,(T2) ;PUT OR PUTCON +PRN: IDIVI DOUT,(T4) ;DIVIDE BY RADIX + HRLM DOUT+1,(P) ;SAVE NO. FOR PRINT + JUMPE DOUT,.+2 ;ENUF DIGITS? + PUSHJ P,PRN ;NO, GET MORE + HLRZ CHR,(P) ;YES, GET LEFTMOST + ADDI CHR,60 ;CONVERT TO ASCII + JRST (T2) ;PUT OR PUTCON + +OUTDE4: MOVEI CHR," " ;SET UP FOR SPACES + CAIL DOUT,^D1000 ;PRINT 4 CHAR. + JRST OUTDEC ;AT LEAST 4 SEEN + PUSHJ P,PUT ;OUTPUT ONE SPACE + CAIGE DOUT,^D100 ;3 CHAR.? + PUSHJ P,PUT ;NO,SO ANOTHER SPACE +OUTDEC: MOVEI T2,PUT ;PUT CHAR IN OUT BUF + JRST OUTDC1 + +DATO2: MOVEI T4,5 + MOVE T6,MNPT + ADDM 1,T6 + ILDB CHR,T6 + PUSHJ P,(T2) ;PUT OR PUTCON + SOJG T4,.-2 + POPJ P, + ;READ DTA DIRECTORY AND INITIALIZE DIRST AND DIRST1 + +DTCHECK:PUSHJ P,ININIT ;INITIALIZE INPUT DEVICE +DTCH2: +IFN WCH,< + USETI IN,1 ;GET DTA DIR> +IFE WCH,< + USETI IN,144 ;GET DTA DIR> + PUSHJ P,INP ;INPUT DIRECTORY + CLOSE IN, + PUSHJ P,GETPPN ; GET PPN OF DECTAPE + PUSHJ P,ININIT ; REINITIALIZE INPUT DEVICE +IFN WCH,< +DTCH1: MOVE T5,IBF + HRRZ T2,1(T5) + ADDI T5,1(T2) ;GET ADD. OF FIRST ENTRY + MOVE 0,T5 + SUBI 0,4> +IFE WCH,< +DTCH1: HRRZ T5,IBF ;LOC. OF CURRENT BUF, 2ND WORD + MOVEI 0,123(T5) ;83 WORDS,7, FIVE-BIT BYTES + ADDI T5,1 ;COMPUTE ADD. OF DIR. START> + MOVEM 0,DIRST ;FIRST FILE NAME LOC + MOVEM 0,DIRST1 ;TO RESTORE DIRST + POPJ P, + +;ROUTINE TO CHECK BRACKET COUNT/MATCHING + +OUTCHK: SETZB T3,TLBRKT ;COUNT <> ON THIS LINE, CLEAR THINGS + MOVE T1,OPTRA ;BYTE POINTER FOR READING OUT THE LINE +OUTCH2: CAMN T1,OPTR ;LINE DONE? + JRST OUTCH3 ;YES, SO DECIDE WHETHER TO PRINT + ILDB T2,T1 ;GET CHAR + CAIN T2,"<" ;LEFT BRACKET? + AOS TLBRKT ;YES, SO INCREMENT BRACKET COUNT + CAIN T2,">" ;RIGHT BRACKET? + SOSL TLBRKT ;YES, SUBTRACT BRACKET COUNT, GONE NEG? + JRST OUTCH2 ;NO, SO DO NEXT CHAR + AOJA T3,OUTCH2 ;YES, SO FLAG COUNT GONE NEG. + +OUTCH3: SKIPN T2,TLBRKT ;BRACKET COUNT OFF THIS LINE? + JUMPE T3,CPOPJ ;NO, WENT NEG.? + ADDM T2,TOTBRK ;YES, SO ADD INTO CUMULATIVE COUNT + MOVEI CHR,"-" ;PRINT MINUS FOR NEG TOTAL + SKIPGE TOTBRK + PUSHJ P,PUT + MOVM DOUT,TOTBRK;PRINT MAGNITUDE OF TOTAL + PUSHJ P,OUTDEC + MOVEI CHR,TAB ;FOLLOW WITH TAB + PUSHJ P,PUT + JRST OUTCH1 ;AND PRINT THE LINE + +GETPPN: MOVEI T5,117 ; NON STD DUMP MODE + MOVEM T5,DTBLK + MOVE T5,DEVICE ; GET INPUT DEVICE + MOVEM T5,DTDEV + OPEN DTDIR,DTBLK + POPJ P, + USETI DTDIR,144 ; READ BLOCK 100 AND + MOVE T5,[IOWD 227,DBUF] + MOVEI T6,0 + INPUT DTDIR,T5 ; WORD 1 OF BLOCK 101. + MOVE T5,177+DBUF + MOVEM T5,DTAID + MOVE T5,200+DBUF + MOVEM T5,DIRPPN ; SAVE PPN FOR LISTING + RELEASE DTDIR, + POPJ P, + FILTYP: TDNE FLAG,[XWD IFLG+IBFLG,BMOD] + POPJ P, ;BIN MODE DON'T CARE IF DMP, ETC + TRNN AUXFLG,DSKIN!DTAIN!MTAIN ;BINARY INPUT POSSIBLE? + JRST FIL11 ;NO + TRNN AUXFLG,DSKOUT!DTAOUT!MTAOUT ;BINARY OUTPUT? + JRST FIL11 ;NO + TDNN FLAG,[XWD PFLG,LINE!TBMOD!NSMOD!SQMOD!SPMOD] + TLNE AUXFLG,CDRFLG ;/E FROM DSK IS NOT BINARY + JRST FIL11 ;SO TURN OFF SBIN + JRST FIL3 ;FORCE BINARY MODE +FIL11: TLZ AUXFLG,SBIN ;IS + HLRZ 0,ZRF+1 ; INPUT EXTENSION + CAIE 0,(SIXBIT /DMP/) ;DMP? +IFE DISK30,<CAIN 0,(SIXBIT /SAV/) ;SAV?> +IFN DISK30,<CAIN 0,(SIXBIT/SVE/)> + JRST FIL3 ;YES + CAIE 0,(SIXBIT /CHN/) ;CHN? + CAIN 0,(SIXBIT /REL/) ;REL? + JRST FIL3 ;YES + CAIE 0,(SIXBIT /SHR/) + CAIN 0,(SIXBIT /HGH/) + JRST FIL3 + CAIE 0,'BIN' ; GENERAL BINARY EXTENSION? + CAIN 0,(SIXBIT /LOW/) + JRST FIL3 + TRNN FLAG,XFLG ;DO NORMAL PROCESSING ON ALL + JRST FIL2 ;BUT DMP ETC FILES IF NOT /X + TLNN AUXFLG,CDRFLG + TDNE FLAG,[XWD PFLG,LINE+TBMOD+NSMOD+SQMOD+SPMOD] + POPJ P, ;NO SIGNIFICANT SWITCHES +FIL1: HRLZI 0,004400 ;FORCE 36-BIT. + HLLM 0,IBF+1 ;INPUT BYTE POINTER + HLLM 0,OBF+1 ;OUTPUT BYTE POINTER + POPJ P, ;CHANGE TO FORCED BINARY +FIL3: TLO AUXFLG,SBIN ;INPUT EXT = DMP,SAV,CHN,REL + TRNE FLAG,XFLG + JRST FIL1 + TLON AUXFLG,FRSTIN ;NOT /X TEST FURTHER + JRST FIL4 ;IS THIS FIRST SOURCE, YES + TLOE AUXFLG,RSDCFL ;NOT FIRST, WAS PREVIOS FILE RSCD? + JRST FIL5 ;YES, NO CHANGE UNLESS DEVICE HAS CHANGED + OUTPUT OUT, ;NO CHANGE TO 36-BIT + MOVE 0,OBF+2 ;CURRENTLY 7-BIT I/O, MUST CHANGE TO 36-BIT + ;OUTPUT CURRENT BUFFER + IDIVI 0,5 ;DIVIDE OBF+2 BY 5 (CHAR. COUNT) + MOVEM 0,OBF+2 + JRST FIL1 +FIL2: TLOE AUXFLG,FRSTIN ;NOT A RSCD FILE + TLZN AUXFLG,RSDCFL ;NO, WAS PREV. FILE RSCD? + POPJ P, ;NO, NO CHANGE + OUTPUT OUT, ;YES, CHANGE 36-BIT TO 7-BIT + MOVEI 0,5 + IMULM 0,OBF+2 + MOVE 0,SVIBF ;RESTORE 7-BIT + HLLM 0,IBF+1 + MOVE 0,SVOBF + HLLM 0,OBF+1 + POPJ P, +FIL4: TLO AUXFLG,RSDCFL ;SET REL,SAV,DMP,CHN FLAG + JRST FIL1 +FIL5: HRLZI 0,004400 ;NEW DEVICE, SET 36-BIT INPUT + TRNE CALFLG,NEWDEV ;SOURCE DEVICE CHANGED + HLLM 0,IBF+1 + POPJ P, ;OUTPUT ALREADY SET + + + SUBTTL BLOCK 0 CODE + +IFE BLOC0,< +IFE WCH,<;THIS CODE COPIES BLOCK 0,1,2 ONLY. I/O MUST BE DECTAPE.> +IFN WCH,<;THIS CODE COPIES BLOCK 0 ONLY. I/O MUST BE DECTAPE.> +;MODE SELECTED MUST BE BIT 100, 20 AND NOT DUMP MODE (134). + +BLOCK0: TRC AUXFLG,DTAIN+DTAOUT + TRCE AUXFLG,DTAIN+DTAOUT;FORCE DTA I/O + JRST ERR7A + MOVEI 0,134 + MOVEM 0,OMOD + MOVEM 0,ININI1 + MOVSI 0,OBF + MOVEM 0,ODEV+1 + MOVEI 0,IBF + MOVEM 0,DEVICE+1 + OPEN OUT,OMOD + JRST ERR1 ;UNAVAILABLE + OUTBUF OUT,1 + OUTPUT OUT, + OPEN IN,ININI1 + JRST ERR1A + INBUF IN,1 + SETZB T1,BL0CNT +BL4: USETI IN,(T1) + INPUT IN, ;READ + GETSTS IN,IOS + TRNN IOS,740000 ;ANY ERRORS + JRST BL1 ;NO + JSP T5,INICN2 + PUSHJ P,QUEST + ERRPN2 </Input device /> + PUSHJ P,P6BIT + DEVICE + ERRPN2 </: /> + MOVE T2,AUXFLG ;DECTAPE FOR ERROR MESSAGE + ANDI T2,DTAIN + PUSHJ P,IOERR ;PRINT ERROR TYPE +BL1: HRLZ T5,IBF+1 + HRR T5,OBF+1 + MOVEI T4,177(T5) + BLT T5,(T4) ;SHIFT DATA TO OUTPUT BUFFER + USETO OUT,@BL0CNT + OUTPUT OUT, ;WRITE BLOCK + PUSHJ P, OUTP1 ;CHECK ERRORS +IFE WCH,< + AOS T1,BL0CNT + CAIGE T1,3 + JRST BL4> +BL3: RELEASE OUT, ;IF ANY, PDL IS RESET + JRST PIP2> + +IFN BLOC0,< +BLOCK0: ERRPNT </?No block 0 copy!/> + > + SUBTTL MAGTAPE ROUTINES + +;TEST TO SEE IF MORE THAN ONE OF THE LOWEST EIGHT MTA FLAGS +;HAVE BEEN SELECTED. IF SO ERROR. OTHERWISE, IMPLEMENT +;REQUEST. T1, T3, T6 SET AT ENTRY BY INLOOK OR OUTLOOK +;TO EQUAL AUX/AUXOUT, AB/ABOUT,INIMTA/INOMTA + +MT1: HRRZ T2,T1 ;T1 CONTAINS REQUEST + ANDI T2,-1(T2) ;KNOCK OFF RIGHT MOST 1 + TRNE T2,377 + JRST MTR1 ;PRINT ERROR MESSAGE + + TRNN T1,MTAFLG+MTBFLG+MTWFLG+MTTFLG+MTFFLG+MTUFLG+MTDFLG+MTPFLG + JRST MTC1 + PUSHJ P,(T6) ;THERE IS A REQUEST + ;GO TO INIMTA/INOMTA + +;PERFORM POSITIONING REQUESTS + TRNE T1,MTUFLG + JRST UNLOAD + + TRNE T1,MTWFLG + JRST REWIND + + TRNE T1,MTFFLG + JRST MARKEF + + TRNE T1,MTTFLG + JRST SLEOT + + TRNE T1,MTBFLG+MTPFLG ;MULTIPLE REQUESTS ALLOWED + JRST BSPF + + TRNE T1,MTAFLG+MTDFLG ;MULTIPLE REQUESTS ALLOWED + JRST ADVF + + ;T1=AUX,AUXOUT. T3=AB,ABOUT. T6=INIMTA,INOMTA. + +MTCONT: RELEAS TAPE, + TRNN T1,MTUFLG ;UNLOAD? + TRNE CALFLG,NSWTCH ;IS THERE AN INPUT DEVICE? + CAIE T6,INOMTA ;OUTPUT TAPE? + POPJ P, ;NO + JRST PIP2 ;YES, END OF COMMAND + +;ROUTINE TO CHECK AND SET DENSITY FOR NEW DEVICE + +MTC1: MOVE T4,T1 ;GET AUX/AUXOUT + ANDI T4,MT2FLG+MT5FLG+MT8FLG + ANDI T4,-1(T4) ;REMOVE RIGHT MOST 1 + JUMPN T4,MTR1 ;MORE THAN 1 REQ, ERROR + + MOVEI T4,1 ;ASCII LINE STANDARD MODE + + TRNE T1,MT2FLG + TRO T4,DENS2 ;SET 200 BPI + + TRNE T1,MT5FLG + TRO T4,DENS5 ;SET 556 BPI + + TRNE T1,MT8FLG + TRO T4,DENS8 ;SET 800 BPI + + TRNE T1,MTEFLG + TRO T4,PARE ;EVEN PARITY + + POPJ P, + + ;REWIND AND UNLOAD + +UNLOAD: MTAPE TAPE,11 + JRST MTCONT + +;REWIND ONLY + +REWIND: MTAPE TAPE,1 +MTWAIT: WAIT TAPE, + JRST MTCONT + + + + +;MARK END OF FILE + +MARKEF: MOVE T5,MTANAM + EXCH T5,ODEV + MTAPE TAPE,3 + GETSTS TAPE,IOS + PUSHJ P,OUTP3 + SETSTS TAPE,(IOS) + MOVEM T5,ODEV + JRST MTCONT + + + + +;SKIP TO LOGICAL END OF TAPE. + +SLEOT: MTAPE TAPE,10 + JRST MTWAIT + ;BACKSPACE MTA 1 FILE, T3=AB OR ABOUT +;AB/ABOUT = INPUT/OUTPUT DEVICE + +BSPF: HRRZ T3,T3 ;T3=NO. OF FILES/RECORDS TO BACK +BSPF2: WAIT TAPE, ;WAIT + GETSTS TAPE,IOS + TRNN IOS,LDP ;AT LOAD POINT? + JRST BSPF3 ;NO LDP + ERRPNT </?Load point before end of (MB) or (MP) request!/> +BSPF3: MOVEI T5,7 ;BSPR + TRNN T1,MTPFLG ;BSPR? + MOVEI T5,17 ;BSPF + MTAPE TAPE,(T5) ;BACKSPACE FILE/RECORD + SOJGE T3,BSPF2 ;MORE FILES/RECORDS TO BSP? + ;NO, END OF LOOP + WAIT TAPE, + GETSTS TAPE,IOS + TRNN T1,MTBFLG ;BACKSPACE FILE? + JRST MTCONT ;NO + TRNN IOS,LDP ;IF AT LOAD POINT + MTAPE TAPE,16 ;(MOVE FWD. OVER EOF) + JRST MTCONT ;DON'T SKIP A RECORD + + + +;ADVANCE MTA 1 FILE, T3=AB OR ABOUT +;AB/ABOUT = INPUT/OUTPUT DEVICE + +ADVF: HLRZ T3,T3 ;T3=NO. FILES (OR REC) TO ADVANCE +ADVF2: MOVEI T5,6 ;ADVR + TRNN T1,MTDFLG ;ADVR ? + MOVEI T5,16 ;ADVF + MTAPE TAPE,(T5) ;ADVANCE FILE/RECORD + SOJG T3,ADVF2 ;MORE FILES/RECORDS TO ADV? + ;NO, END OF LOOP + WAIT TAPE, ;WAIT... + GETSTS TAPE,IOS + TRZE IOS,EOFBIT + SETSTS TAPE,(IOS) ;END OF FILE + JRST MTCONT + ;ROUTINE TO INITIALIZE MAGTAPE FOR INPUT OR OUTPUT + +INOMTA: SKIPA T2,ODEV ;INIT OUTPUT DEVICE +INIMTA: MOVE T2,DEVICE ;INIT INPUT DEVICE + SETZM MTANAM+1 + MOVEM T2,MTANAM + TRNN CALFLG,NEWDEV + JRST INMTA ;SAME DEVICE + PUSHJ P,MTC1 ;NEW DEVICE + HRRZM T4,INMTA1 ;SET MODE,DENSITY,PARITY + +INMTA: OPEN TAPE,INMTA1 + JRST ERR1B + POPJ P, + +;ROUTINE TO PRINT ERROR MSG IF MORE THAN 1/8 FLAGS SET + +MTR1: MOVE T4,DEVICE ;TENTATIVELY SET I/DEV + CAIE T6,INIMTA ;INPUT DEVICE? + MOVE T4,ODEV ;NO, SET O/DEV + ERRPNT </?Too many requests for /> + PUSHJ P,P6BIT + T4 + JRST PIP2 + SUBTTL CONSTANTS/STORAGE/VARIABLES + +;CONSTANTS + +IFE WCH,< +OKBD: POINT 6,DTON+2,23 ;FOR NO. 1K BLOCKS +OKB: POINT 6,ZRF+2,23> +DATE: POINT 12,ZRF+2,35 +DATED: POINT 12,DTON+2,35 ;CREATION DATE /X +ZRO: ASCII /00000/ +OPTMAX: POINT 7,LBUFE-1,34 +OPTRA: XWD 700,LBUF-1 ;INITIAL POINTER TO LINE BUFFER +K1: 432150643240 ;MAGIC ASCII INCREMENT BY 10 +K3: 375767737576 ;CHARACTER MASK 077 +K4: 432150643216 ;MAGIC ASCII INCREMENT BY 1 +QPIP: SIXBIT /QPIP/ ;DATA FOR Q SWITCH +STAR: SIXBIT /*/ ;LOOK FOR *.* FILNAM.EXT +TWL: OCT 12 +PP11: XWD 1,1 +PP13: XWD 1,3 ; SANDERS SYS +UPROJ: EXP ^D101 ; SANDERS UNIVERSAL PROJECT +IFN FTDSK,< +PRPTL: POINT 9,PROTS,8 ;PROTECTION FOR RENAME +PRPTD: POINT 9,DTON+2,8 +PRNM: POINT 9,ZRF+2,8 ;PROT FOR /R +TIME: POINT 11,ZRF+2,23 ;CREATE TIME /X +TIMED: POINT 11,DTON+2,23 ;DEPOSIT CREATE TIME> + + + + ;PROGRAM STORAGE AREA + +IFE BLOC0,< +BL0CNT: BLOCK 1 ;COUNT> +DTAID: BLOCK 1 ; STORE DTA SERIAL NUMBER +DIRPPN: BLOCK 1 ; STORE OWNERSHIP +SVIBF: BLOCK 1 ;SAVE INIT MODE (INPUT) +SVOBF: BLOCK 1 ;SAVE INIT MODE (OUTPUT) +IBF: BLOCK 3 ;INPUT BUFFER HEADER +OBF: BLOCK 3 ;OUTPUT BUFFER HEADER +OBI: BLOCK 3 ;OUTPUT BUFFER INPUT HEADER FOR DSK /Z +TFI: BLOCK 3 ;CONSOLE INPUT HEADER +TFO: BLOCK 3 ;CONSOLE OUTPUT HEADER +SAVAC: BLOCK 5 ;SAVE SOME ACS +NAMTAB: BLOCK 24 ;FOR (XD) ON DSK OR RENAME +IFN FTDSK,< +LOCNAM: BLOCK 1 ;POINTER FOR NAMTAB> +DIRST: BLOCK 1 ;LOC. OF LAST DIR. FILE NAME REFERENCED +DIRST1: BLOCK 1 ;SAVE INITIAL DIRST +SQNUM: BLOCK 1 ;CURRENT SEQUENCE NUMBER +DTJBFF: BLOCK 1 ;VALUE OF JOBFF AFTER CONSOLE I/O BUFFERS +SVJBFF: BLOCK 1 ;INITIAL VALUE OF JOBFF +SVJBF1: BLOCK 1 ;VALUE OF JOBFF AFTER OUTBUF UUO +OPTR: BLOCK 1 ;CURRENT POINTER FOR LINE PRESCAN +DTONSV: BLOCK 2 ;OUTPUT DIRECTORY ENTRY COPY +SVPTR1: BLOCK 1 ;POINTER TO LAST PRINTING CHARACTER +SVPTR2: BLOCK 1 ;POINTER TO LAST GENERATED TAB +TLBRKT: BLOCK 1 ;TOTAL PARENS ON THIS LINE +TOTBRK: BLOCK 1 ;TOTAL CUMULATIVE PARENS +TABCT: BLOCK 1 ;SPACES TO NEXT TAB STOP +SPCT: BLOCK 1 ;CONSECUTIVE SPACES COUNTER +ABOUT: BLOCK 1 ;AB FOR OUTPUT UNIT +AUXOUT: BLOCK 1 ;AUX FOR OUTPUT UNIT +PROTS: BLOCK 1 ;SAVE PROTECTION +ZCNT: BLOCK 1 ;COUNT FOR DSK ZRO REQ. +CDRCNT: BLOCK 1 ;COUNT CARD COLS. +PTRPT: BLOCK 1 ;STORE SEQ. NO. POINTER +SYSPP: BLOCK 1 ;PP OF DEVICE SYS + + ;THIS IS A BLOCK OF VARIABLE LOCATIONS, ZEROED AT THE START OF EACH +;PIP RUN, I.E EACH TIME PIP TYPES *. + +;***** DO NOT SPLIT THIS BLOCK ***** +IFN FTDSK,< +RIBFIR: BLOCK 1 ;NUMBER OF WORDS IN LOOKUP +PPP: BLOCK 1 ;PROJ-PROG FOR EXTENDED LOOKUP> +FILNAM: BLOCK 1 ;FILE NAME FROM COMMAND SCANNER +FILEX: BLOCK 1 ;EXTENSION +PR: BLOCK 1 ;PROTECTION +PP: BLOCK 1 ;P-P NUMBER TYPED BY USER +IFN FTDSK,<BLOCK 20+RIBFIR-.> ;TOTAL LENGTH OF LOOKUP BLOCK +;***** END OF BLOCK ***** +DTON: BLOCK 4 ;OUTPUT DIR. ENTRY +DEVA: BLOCK 1 ;SAVE INPUT DEV. NAME +NO.: BLOCK 1 ;GENERATE FILE NAMES +ZRF: BLOCK 4 ;LOOKUP FILE NAMES +MTAREQ: BLOCK 1 ;STORE MTA REQUESTS + +COMEOF: BLOCK 1 ;EOF INDICATOR +COMBUF: BLOCK ^D41 ;COMMAND BUFFER. ALLOWS 205 CHARS. +COMCNT: BLOCK 1 ;COMBUF CHARS COUNT +COMPTS: BLOCK 1 ;POINTER FOR STORING/EXTRACTING CS + + +AUX: BLOCK 1 ;COPT AUXFLG (MTA) +IFN FTDSK,< +FNPPN: BLOCK 1 ;RESERVE #P-P +FNPPNS: BLOCK 1 ;COPY FNPPN FOR LATEST NON-SYS #P-P> +ESWTCH: BLOCK 1 ;-1 INDICATES END OF LINE +XNAME: BLOCK 1 ;-1 INDICATES SCAN OVERSHOOT WITH A NULL NAME + ;0 INDICATES NO SCAN OVERSHOOT + ;CONTAINS OVERSHOOT NAME IF NOT NULL +AB: BLOCK 1 ;MTA VALUE SWITCHES + ;THIS IS THE END OF THE INIT. ZEROED BLOCK. + MONTH: ASCII /-Jan-/ + ASCII /-Feb-/ + ASCII /-Mar-/ + ASCII /-Apr-/ + ASCII /-May-/ + ASCII /-Jun-/ + ASCII /-Jul-/ + ASCII /-Aug-/ + ASCII /-Sep-/ + ASCII /-Oct-/ + ASCII /-Nov-/ + ASCII /-Dec-/ + +MNPT: POINT 7,MONTH + +PDL: BLOCK 20 ;PUSHDOWN LIST + +LBUF: BLOCK 204 ;LINE BUFFER. ALLOW FOR FORTRAN DATA +LBUFE==.-1 + +DBUF: BLOCK 204 ;DIRECTORY BUFFER + BLOCK 27 ; ALLOW ENOUGH FOR DTA PROT. + +OMOD: BLOCK 1 ;OUTPUT DEVICE MODE, STATUS +ODEV: BLOCK 2 ;OUTPUT DEVICE NAME + ;BUFFER HEADER(S) LOC + +ININI1: BLOCK 1 ;INPUT DEVICE +DEVICE: BLOCK 2 + + +DEVERR: BLOCK 1 +DERR2: BLOCK 2 + +INMTA1: BLOCK 1 +MTANAM: BLOCK 2 +MATCH: BLOCK 2 ;NAME AND EXT FOR /L OR (RX) +RENSN: BLOCK 1 ;-1 IF RENAME MESSAGE SEEN + + SUBTTL RIM LOADER +IFE RIMSW,< +RIMTB: ERRPNT <Z? /Y switch option not available this assembly!Z> +XLIST> +IFN RIMSW,< +LODAL==16 ;LENGTH OF RIM LOADER +HLTBIT==200 ;CHANGES JRST TO HALT +BLKSZ==17 ;NORMAL BLOCK LENGTH IN RIM10B +JOBDA==140 ;START OF USER AREA +CHKSM: BLOCK 1 ;CHECKSUM ACCUMULATED (RIM10B) +POINTA: BLOCK 1 ;SAVE POINTER FOR RIM10B BLOCK +LENGTH: BLOCK 1 ;CALC. LENGTH OF RIM10 FILE +ZERO: BLOCK 1 ;NO OF 0'S NEEDED TO FILL SPACES IN +COUNT: BLOCK 1 ;RIM10B COUNT WORDS OUT +XFERWD: BLOCK 1 ;RIM-10-B XFER WD. ;FILE. + +RIMTB: TRNN AUXFLG,DTAIN!DSKIN!MTAIN + JRST ERR5B + PUSHJ P,ININIT + OUTPUT OUT, + TRNE AUXFLG,DTAIN + PUSHJ P,DTADIR +IFN FTDSK,< + TRNE AUXFLG,DSKIN + PUSHJ P,DSKDIR> + PUSHJ P,FNSET +RIMTB0: MOVEI 0,254000 + HRLM 0,XFERWD ;ASSUME JRST + PUSHJ P,LOOK ;GET FILE TO CONVERT + JRST MAIN1 ;NONE LEFT + LOOKUP IN,ZRF + JRST ERR3 + HLRZ 0,ZRF+1 + CAIN 0,(SIXBIT ,RTB,) + JRST RIMTB1 + CAIE 0,(SIXBIT ,SAV,) + CAIN 0,(SIXBIT ,RMT,) + JRST RIMTB2 + JRST ERR3B ;NO LEGAL EXTENSION - SAVE JOBFF TOO + RIMTB1: MOVE T1,OBF+1 ;PUNCH RIM10B LOADER + HRLI T1,RMLODA + AOS T2,T1 ;XFER IT TO OUTPUT BUFFER + BLT T1,LODAL(T2) + ADDI T2,LODAL + HRRM T2,OBF+1 ;FIX BUFFER POINTER + MOVNI T2,LODAL + ADDM T2,OBF+2 ;AND COUNTER + CLOSE OUT, ;BLANK TAPE +RIMTB2: PUSHJ P,RINP ;GET FIRST BUFFER + JRST ERR8A ;FILE OF ZERO LENGTH + JUMPGE CHR,ERR8A ;FIRST WORD MUST BE POINTER + HLRZ 0,ZRF+1 + CAIN 0,(SIXBIT ,SAV,) + JRST RIMTB4 ;"SAV" FILE + MOVEI T2,^D126(CHR) ;FIND VALUE OF JOBSA + MOVEI T3,JOBDA-1 + CAMGE T2,T3 ;(JOBDA) IS FIRST LOC. OF USER PROF, + JRST ERR8A ;NO, ERROR + MOVE T1,IBF+1 + MOVEI T3,JOBSA + PUSHJ P,RMS1 + HRRM CHR,XFERWD ;SAVE TRANSFER WORD + MOVEI T3,JOBFF + MOVE T1,IBF+1 + PUSHJ P,RMS1 + HRRZM CHR,LENGTH ;SAVE (JOBFF) + HLRZ 0,ZRF+1 + CAIN 0,(SIXBIT .RTB.);RIM 10B CONVERSION + JRST RIMTB4 + ;RIM10 1ST WD IS -N,X X IS 1ST WORD IN DATA BLOCK +;CONTAINING FIRST NON-ZERO WORD AFTER END +;OF JOBDATA AREA, FROM THERE TO JOBFF GIVES +;VALUE OF N. XFER ADD. COMES FROM JOBSA. + +RMT1: MOVEI T1,JOBDA ;FIRST LOC. AVAILABLE TO USER + LDB CHR,IBF+1 + SUBI T1,1(CHR) + JUMPLE T1,RMT2 ;CURRENT "X" GT OR EQ JOBDA + HLRO T2,CHR + MOVNS T2 ;GET "N" + AOJ T1, ;GET REL. LOC. OF JOBDA IN BLOCK + CAMG T1,T2 + JRST RMT2 + AOJ T2, ;NOT IN BLOCK, TRY NEXT + ADDM T2,IBF+1 + MOVNS T2 + ADDM T2,IBF+2 ;READY TO GET NEXT POINTER + JRST RMT1 +RMT2: LDB CHR,IBF+1 ;POINTS TO FIRST USEFUL I/O WORD + MOVNI T1,(CHR) + ADDB T1,LENGTH + MOVNS T1 ; -N + HRLM T1,POINTA + HRRM CHR,POINTA ;(-N,X) IN POINTA + SETZM ZERO + ;NOW OUTPUT RIM10 FILE. IBF+1 POINTS TO FIRST I/O WORD. POINTA HAS I/O +;WORD FOR FILE. LENGTH = NO. WDS TO GO OUT INCLUDING XFER WD. +;COUNT COUNTS NO. WDS IN CURRENT LOGICAL BLOCK +;ZERO COUNTS ZERO FILL + + MOVE CHR,POINTA + PUSHJ P,PUT ;PUNCH I/O WORD +RMT8: LDB CHR,IBF+1 ;-N,X + MOVEM CHR,POINTA + HLRO T1,CHR + MOVNM T1,COUNT +RMT6: SETZ CHR, ;PUNCH ZERO IF NECESSARY + SOSL ZERO + JRST RMT4 ;DEPOSIT ZERO + SOSGE COUNT + JRST RMT5 ;GET NEW LOGICAL BLOCK + PUSHJ P,RINP1 + JRST ERR8A +RMT4: SOSG LENGTH + JRST RIMTB8 + PUSHJ P,PUT + JRST RMT6 +RMT5: HRRZ T1,POINTA + HLRO T2,POINTA + SUBM T1,T2 + PUSHJ P,RINP1 + JRST RMT9 + JUMPGE CHR,ERR8A + HRRZ CHR,CHR + SUB CHR,T2 + JUMPL CHR,ERR8A + MOVEM CHR,ZERO + JRST RMT8 +RMT9: MOVE CHR,LENGTH + SOJ CHR, + MOVEM CHR,ZERO + SETZ CHR, +RMT10: SOSGE ZERO + JRST RIMTB8 + PUSHJ P,PUT + JRST RMT10 + ;RIM10B: COMES FROM RTB AND SAV FILES. SAV=RTB EXCEPT IT HAS NO +;RIM LOADER AND NO TRANSFER WORD + +RIMTB3: PUSHJ P,RINP1 ;NONE, GET NEW POINTER + JRST RIMTB8 ;EOF + JUMPL CHR,RIMTB4 ;POINTER WORD + CAME CHR,XFERWD ;IS IT FINAL JRST XXX + JRST ERR8A ;NO,ERROR + JRST RIMTB8 ;YES,OUTPUT IT + +RIMTB4: LDB CHR,IBF+1 + HRRZM CHR,POINTA ;LOAD WORDS HERE + HLROM CHR,COUNT + MOVNS COUNT ;NO. WDS IN THIS BLOCK +RIMTB7: SKIPN T1,COUNT ;ANY WORDS LEFT IN BLOCK? + JRST RIMTB3 ;NONE + SETZM CHKSM ;INITIALIZE CHECKSUM + CAIL T1,BLKSZ + MOVEI T1,17 + MOVN T2,T1 ;T1 HAS NO. OF WDS TO GO OUT + ADDM T2,COUNT ;ADJUST COUNT + HRL CHR,T2 + HRR CHR,POINTA ;I/O WD IN CHR + ADDM T1,POINTA ;SET POINTA FOR NEXT TIME + ADDM CHR,CHKSM ;ADD I/O WD TO CHECKSUM +RIMTB5: PUSHJ P,PUT ;PUTPUT I/O WORD + SOJL T1,RIMTB6 ;FINISHED THIS BLOCK + PUSHJ P,RINP1 ;GET DATA + JRST ERR8A ;EOF (ILLEGAL) + ADDM CHR,CHKSM ;CHECKSUM + JRST RIMTB5 +RIMTB6: MOVE CHR,CHKSM + PUSHJ P,PUT + OUTPUT OUT, + JRST RIMTB7 +RIMTB8: MOVE CHR,XFERWD ;EOF HERE, XFERWD=JOBSA + TRNN CHR,-1 + TLO CHR,HLTBIT + HLRZ 0,ZRF+1 + CAIN 0,(SIXBIT .SAV.);NO XFER WD FOR "SAV" FILES + JRST RIMA + PUSHJ P,PUT + SETZ CHR, + PUSHJ P,PUT ;TRAILING ZERO + OUTPUT OUT, +RIMA: CLOSE IN, + TRNE FLAG,XFLG + CLOSE OUT, + JRST RIMTB0 + + ;THIS IS THE I/O SECTION + +RINP: PUSHJ P,INP + TRNE IOS,EOFBIT ;EOF? + POPJ P, ;EOF EXIT +RINP1: SOSGE IBF+2 + JRST RINP + ILDB CHR,IBF+1 + JRST CPOPJ1 + +RMS2: SUB T1,T4 ;(IBF+1)+N + AOJ T1, +RMS1: LDB CHR,T1 ;GET POINTER + HRRZ T2,CHR ;X + HLRO T4,CHR ;-N + SUB T2,T4 ;X+N IN T2 + CAMGE T2,T3 + JRST RMS2 + SUBI T3,(CHR) ;HOW FAR FROM POINTER? + ADD T1,T3 ;INCREMENT POINTER + LDB CHR,T1 ;(JOBSA/FF) + POPJ P, + +;THIS IS THE RIM LOADER FOR THE PDP-10 + +RMLODA: PHASE 0 + + XWD -16,0 +ST: CONO PTR,60 +ST1: HRRI A,RD+1 +RD: CONSO PTR,10 + JRST .-1 + DATAI PTR,@TBL1-RD+1(A) + XCT TBL1-RD+1(A) + XCT TBL2-RD+1(A) +A: SOJA A, +TBL1: CAME CKSM,ADR + ADD CKSM,1(ADR) + SKIPL CKSM,ADR +TBL2: JRST 4,ST + AOBJN ADR,RD +ADR: JRST ST1 +CKSM: BLOCK 0 + +IF2,< PURGE ST,ST1,RD,A,TBL1,TBL2,ADR,CKSM> +DEPHASE> +LIST + +IFE FTDSK,< + VAR +LOWTOP: + END PIP1> + SUBTTL DISK ROUTINES +;* * * ALL THE FOLLOWING ARE DISK ROUTINES * * * + +;DISK DELETE AND RENAME ROUTINES + +DSKDR0: MOVE T1,DTON+3 ;GET OUTPUT PPN + SKIPN PP ;ALREADY SET? + MOVEM T1,PP ;OUTPUT=INPUT FOR /D,/R +DSKDR: PUSHJ P,ININIT ;GET DSK AS INPUT DEVICE + PUSHJ P,DSKDIR ;GET USER'S FILE DIRECTORY + PUSHJ P,INFO ;PRINT FILES DELETED:/RENAMED: + SETZM ZCNT ;COUNT OF FAILURES +DSKDR5: PUSHJ P,LOOK ;PREPARE FOR LOOKUP/ENTER + ;OF FILE TO /D OR /R + JRST DSKDR1 ;ALL THROUGH WITH UFD + LOOKUP IN,ZRF ;IS SOURCE FILE THERE? + JRST DERR5 ;ERROR + CLOSE IN, ;YES + TRNN FLAG,DFLG ;DELETE? + JRST DSKDR4 ;NO, RENAME + SETZM DTON ;YES + MOVE 0,FNPPN ;SET DEST. DEVICE SAME AS SOURCE FOR DELETE, + MOVEM 0,DTON+3 ;I.E. PROJ-PROG NUMBER + JRST DSKDR7 + +DSKDR4: PUSHJ P,RENAME + JUMPN T2,.+3 ;JUMP IF FILE NAME SEEN + MOVE 0,[XWD ZRF,DTON];NO NAME SET SO USE LOOKUP NAME + BLT 0,DTON+1 ;AND EXT SO FILE NOT DELETED + MOVE 0,ZRF+2 ;GET DATE,MODE,PROT ETC. + MOVEM 0,DTON+2 ;SAVE AS BEFORE + MOVE 0,NAMTAB+3 ;GET PROJ-PROG + MOVEM 0,DTON+3 + LDB 0,[POINT 9,NAMTAB+2,8] + TLNE AUXFLG,NSPROT ;USE THE CURRENT PROTECTION + DPB 0,PRPTD ;UNLESS NEW PROT. SPECIFIED +DSKDR7: RENAME IN,DTON + AOSA ZCNT ;RENAME (OR DELETE) FAILS + PUSHJ P,INFO3 ;PRINT FILENAME DELETED/RENAMED + JRST DSKDR5 + +DSKDR1: TLZ AUXFLG,NSPROT ;NON-ST. PROT FIXED + SKIPE ZCNT ;SKIP IF NO FAILURES + JRST DSKDR6 ;ERROR + SOS ESWTCH ;ENSURE ESWTCH NEGATIVE + RELEAS CON, + JRST MAIN1 + ;ZERO DSK DIRECTORY OF ALL POSSIBLE FILES. IF ANY ARE PROTECTED, GIVE +;A MESSAGE AND DO NOT PROCESS ANY OTHER SWITCHES. + +DSKZRO: SKIPE T1,ODEV ; STR# 10-2892 + MOVEM T1,ADSK + PUSHJ P,DIRSK1 + SETZM ZCNT + INBUF OUT,1 ;FOR LOOKUPS ON OUT +DSKZ1: SOSLE UFDIN+2 + SKIP 2 +DSKZ3: PUSHJ P,UIN + JRST DSKZ2 + ILDB 0,UFDIN+1 + JUMPE 0,DSKZ3 + MOVEM 0,ZRF + SOS UFDIN+2 + ILDB 0,UFDIN+1 + HLLZM 0,ZRF+1 ;EXTENSION + MOVE 0,FNPPN + MOVEM 0,ZRF+3 + LOOKUP OUT,ZRF + AOS ZCNT ;COUTN REJECTS,TRY MORE FILES + CLOSE OUT, + SETZM ZRF + MOVE 0,FNPPN + MOVEM 0,ZRF+3 + RENAME OUT,ZRF + AOS ZCNT + JRST DSKZ1 ;REPEAT +DSKZ2: SKIPN ZCNT ;ANY FAILURES? + POPJ P, ;NO + ;PRINT ERROR MESSAGE + MOVSI T4,(SIXBIT /Z/) + JRST DSKZ5 +DSKDR6: MOVSI T4,(SIXBIT /D/) + TRNN FLAG,DFLG + MOVSI T4,(SIXBIT /R/) +DSKZ5: ERRPNT <X?Failure(s) during /X> + PUSHJ P,P6BIT + T4 + ERRPN2 </ request!/> + ;PREPARE TO LOOKUP FILES IN PARTICULAR DISK DIRECTORY + +DIRSK1: SKIPA T1,DTON+3 +DSKDIR: MOVE T1,PP ;GET [P,P] INTO T1 + JUMPN T1,.+2 ;IS IT ZERO? + GETPPN T1, ;YES, GET USER'S [P,P] + TRNE AUXFLG,SYSFLG ;DEVICE SYS + MOVE T1,SYSPP ;GET SYS [PP] + MOVEM T1,FNPPN + MOVE 0,[XWD FILNAM,UFD] + BLT 0,UFD+3 ;SAVE LOOKUP BLOCK +IFE DISK30,< + MOVEM T1,FILNAM ;[P,P] TO UFD + MOVSI 0,(SIXBIT /UFD/) + MOVEM 0,FILEX ;USER HAS SPECIFIED [P,P]> +IFN DISK30,< + HRRZM T1,T2 ;SAVE PROGRAMMER NBR. + LSH T1,-14 ;SHIFT PROJECT NBR. + IOR T1,T2 ;REPLACE PROGRAMMER NBR + MOVEM T1,MASK + MOVE 0,[SIXBIT /*FD*/] + MOVEM 0,FILNAM + MOVSI 0,(SIXBIT /SYS/) + MOVEM 0,FILEX> + TRNN CALFLG,SYSFLG ;CURRENT DEVICE SYS? + MOVEM T1,FNPPNS ;SAVE LATEST NON-SYS #P-P + MOVE 0,PP11 ;MAKE [P,P]=[1,1] + MOVEM 0,PP + MOVEM 0,PPP ;SAVE FOR EXTENDED LOOKUP + PUSHJ P,DSKDST ;INIT TO READ DIRECTORY + MOVEI T1,RIBSTS ;NO. OF WORDS FOR EXTENDED LOOKUP + MOVEM T1,RIBFIR + MOVE T1,LEVEL ;LEVEL D = -2 + LOOKUP DIR,FILNAM(T1) ;GET USERS FILE DIRECTORY + JRST DERR5A ;ONE OF 8 LOOKUP ERRORS + JUMPE T1,DIRSK2 ;IF LEVEL C + HRRZ T1,RIBFIR+RIBSTS + ANDI T1,777 ;GET ERROR BITS + JUMPN T1,DIRSK2 ;JUMP IF ERRORS IN UFD + MOVEI T1,RBSIZ ;SET LOOKUP + MOVEM T1,RIBFIR ;FOR SHORT EXTENDED +DIRSK2: MOVS T1,[XWD FILNAM,UFD] + BLT T1,PP ;RESTORE LOOKUP BLOCK + POPJ P, ;LOOKUP OK + ;SETUP BUFFER TO READ 10/30 DISK BLOCKS + +IFN DISK30,< +BLKSET: ;MAKE MONITOR USE BLKBUF + MOVEI T1,BLKBUF ;FOR 10/30 DISK BLOCKS + EXCH T1,JOBFF + INIT BLKIN,14 + SIXBIT /SYS/ + XWD 0,BLKHD + JRST ERR1A + INBUF BLKIN,1 + MOVEM T1,JOBFF + POPJ P, + +BLKBUF: BLOCK 204 ;10/30 DISK BLOCK BUFFER + +;ROUTINE TO READ 10/30 DISK + +BLKRD: SETZM FILNAM+2 + SETZB BLKTMP + INPUT BLKIN, ;INPUT 10/30 DISK BLOCKS + STATUS BLKIN,IOS + TRNN IOS,760000 + JRST BLKRD1 + TRZN IOS,20000 ;EOF + JRST BLKERR ;ERROR + SETSTS BLKIN,(IOS) + MOVEM 0,BLKTMP + ADDM 0,BLKSUM + POPJ P, +BLKRD1: AOJA 0,BLKRD+2 ;COUNT BLOCKS PER FILE +BLKERR: PUSHJ P,COMERR + JSP T5,INICN2 + TRNN IOS,400000 ;CHECK FOR WRITE LOCK + JRST BLKER2 ;NO + ERRPN2 </?/> +BLKER2: ERRPN2 </Input device DSK file /> + MOVEI T6,FILNAM + PUSHJ P,FN.EX + MOVE T2,AUXFLG + ANDI T2,DSKIN + PUSHJ P,IOERR + SETSTS BLKIN,(IOS) + POPJ P,> + ;ROUTINE TO LIST DISK DIRECTORY. /L OR /F SWITCH + +DSKLST: PUSH P,DEVICE + PUSHJ P,ININIT ;ASSIGN "IN" FOR RETRIEVAL INFO + SETZM BLKSUM ;CLEAR TOTAL BLOCKS FOR ALL FILES +IFN DISK30,<TRNN AUXFLG,FFLG ;SHORT LISTING + PUSHJ P,BLKSET ;NO> + SETZM LIN ;SET UP APPROPRIATE CONTROLS + MOVS T1,ODEV ;FOR THIS LISTING DEVICE + CAIN T1,(SIXBIT/TTY/);IF ODEV IS TTY + TRO CALFLG,LISTTY ;SET LISTTY=1 (TTY) + SKIPN FILNAM ;IF NO FILNAM GIVEN + TRZ CALFLG,MATFN!MATEX ;LIST ALL OF DIRECTORY + MOVE T1,FILNAM + MOVEM T1,MATCH + HLRZ T1,FILEX + MOVEM T1,MATCH+1 + PUSHJ P,DSKDIR + PUSHJ P,CRLF ;GIVE A BLANK LINE + TRNN AUXFLG,FFLG ;SHORT LISTING + PUSHJ P,HEADER ;PUT OUT HEADER LINES + SKIPN LEVEL ;ONLY IF LEVEL D + JRST LSTU0A ;LEVEL C + MOVEI T1,ADSK ;ADDRESS OF DEVICE + DSKCHR T1, ;SEE IF DSK + TDZA T1,T1 ;NOT LEVEL D DSK + TLNE T1,(7B17) ;GENERIC DEVICE DSK + TDZA T1,T1 ;NO + SETO T1, ;YES + MOVEM T1,GENERI ;SAVE IT + JUMPE T1,LSTU0A ;LEVEL C +LSTU0: MOVEI T1,GENERI ;GET ADDRESS + JOBSTR T1, ;GET FILE STRUCTURE + TDZA T1,T1 ;ERROR + SKIPN T1,GENERI ;GET DEVICE + JRST DIRFIN ;FINISHED + MOVEM T1,ADSK ;FOR DIR INIT + MOVEM T1,DEVICE ;FOR RETRIEVAL INFO + PUSHJ P,ININIT ;INIT + MOVE 0,GENERI ;YES, GET IT + PUSHJ P,SIXOUT ;PRINT IT + MOVEI CHR,":" ;FOLLOW WITH COLON + PUSHJ P,PUT + PUSHJ P,DSKDIR ;LOOKUP UFD + PUSHJ P,CRLF ;AND A CR-LF +LSTU0A: MOVE T1,PP ;GET PROJ-PROG + MOVEM T1,PPP ;SAVE FOR EXTENDED LOOKUP +LSTU1: SOSLE UFDIN+2 + SKIP 2 +LSTU2: PUSHJ P,UIN ;GO READ DIRECTORY + JRST BLKLST ;(EOF) - OUTPUT BLOCKS USED + ILDB 0,UFDIN+1 + JUMPE 0,LSTU2 + MOVEM 0,FILNAM ;PREPARE TO GET RETRIEVAL INFO + MOVE T1,FNPPN ;EACH LOOKUP DESTROYS P-P NO. + MOVEM T1,FILNAM+3 ;RESTORE P-P NO. + SKIPG LIN + PUSHJ P,HEDR3 ;YES, PUT OUT HEADER LINES + SOS UFDIN+2 + ILDB DOUT,UFDIN+1 ;PICK UP EXTENSION + HLRZS DOUT ;CLEAR RIGHT HALF + HRLZM DOUT,FILNAM+1 ;KEEP FOR LOOKUP + TRNN CALFLG,MATEX ;MATCH EXTENSIONS? + SKIP 2 ;NO,TRY MATFN + CAME DOUT,MATCH+1 ;MATCH? + JRST LSTU1 ;NO,GET NEXT FILE + TRNN CALFLG,MATFN ;MATCH FILENAME? + JRST LSTU2A ;NO + CAME 0,MATCH ;FILNAM MATCH? + JRST LSTU1 ;NO +LSTU2A: IFE DISK30,< + CAIE DOUT,(SIXBIT ?UFD?) ;IS FILE MFD + JRST LSTU3 ;GO PRINT NAME HELD IN 0. + HLRZ DOUT,FILNAM ;HERE FOR MFD ONLY + MOVEI T2,PUT + PUSHJ P,OUTDC1 ;PRINT #,#. PROJ. NO. + MOVEI CHR,COMMA ;"," + PUSHJ P,PUT ;... + HRRZ DOUT,FILNAM ;PROG. NO. + PUSHJ P,OUTDC1 + JRST LSTU3A ;...> + IFN DISK30,< + ILDB 0,UFDIN+1 ;PICKUP THIRD AND FOURTH WORD + MOVEM 0,FILNAM+2 ;IN 10/30 DISK FILE DIRECTORY + ILDB 0,UFDIN+1 + TDC 0,MASK + TRNE 0,3777 + JRST LSTU1> +LSTU3: MOVE 0,FILNAM + PUSHJ P,SIXOUT ;OUPUT FILENAME +LSTU3A: MOVEI T4,4 ;SET LOOP FOR OUTPT EXT + MOVE 0,FILEX + JUMPE 0,LSTU4 + PUSHJ P,TABOUT + PUSHJ P,SIXOUT ;OUTPUT EXTENSION +LSTU4: TRNN AUXFLG,FFLG ;SHORTEST LISTING? + SKIP 2 + PUSHJ P,CLRF ;YES + JRST LSTU1 + SKIPN FILEX + PUSHJ P,TABOUT + PUSHJ P,SPACES +IFE DISK30,< + MOVE T4,LEVEL ;-2 IF LEVEL D,0 IF LEVEL C + LOOKUP IN,FILNAM(T4) ;GET RETRIEVAL INFO. + JRST LSTU5 ;NOT AVAILABLE + JUMPE T4,LSTU4A ;LEVEL C OR NO UFD ERRORS + HRRZ DOUT,RIBFIR+RIBSTS ;FILE ERROR STATUS + ANDI DOUT,777 ;ONLY ERROR BITS + JUMPE DOUT,LSTU4A ;NO ERRORS + MOVEI CHR,"(" ;PUT ERROR CODE IN PARENS + PUSHJ P,PUT + SKIPA T4,[POINT 7,[ASCII /a*cm**rwf*/]] + LSH DOUT,-1 ;SHIFT ERROR BIT TOWARDS BIT 35 + ILDB CHR,T4 ;GET AN ERROR CHARACTER + TRNN DOUT,1 ;IS IT THIS ERROR? + JRST .-3 ;NO + PUSHJ P,PUT ;YES,OUT IT GOES + MOVEI CHR,")" + PUSHJ P,PUT +LSTU4A: > +IFN DISK30,< + MOVE DOUT,FILNAM+2 ;SAVE + LOOKUP BLKIN,FILNAM + JRST LSTU5 + PUSHJ P,BLKRD + MOVEM DOUT,FILNAM+2> + PUSHJ P,TABOUT +IFE DISK30,< + PUSHJ P,BLKS> ;DETERMINE NO. BLK IN FILE + ;AND TOTAL FOR UFD +IFN DISK30,< + PUSHJ P,BLKOUT> + LDB 0,PROT ;GET PROTECTION BITS + PUSHJ P,PROTO ;PRINT OCTAL NUMBERS + TRNE CALFLG,LISTTY ;OUTPUT DEVICE A TTY? + JRST LSTU7 ;YES, SKIP LONG DIRECTORY + LDB 0,ADATE ;PRINT ACCESS DATE + PUSHJ P,DATOUT + PUSHJ P,TABOUT + LDB 0,CTIME ;PRINT CREATION TIME + PUSHJ P,TIMOUT + LDB 0,CDATE + PUSHJ P,DATOUT ;PRINT CREATION DATE + PUSHJ P,TABOUT + LDB 0,MODE ;PRINT MODE + PUSHJ P,OCTLS2 + JRST LSTU8 + +LSTU5: PUSHJ P,TABOUT ;THE FILE WAS PROTECTED + HRRZ T7,FILEX ;GET PARTICULAR ERROR TYPE + CAIL T7,TABLND-TABLE ;IS IT LEGAL ERROR + SKIPA T1,TABLND ;NO,PICK UP CATCH ALL MESSAGE + MOVE T1,TABLE(T7) ;PICK UP POINTER FOR ERROR MSG +LSTU6: ILDB CHR,T1 ;PICK UP CHAR FROM ERROR MSG + JUMPE CHR,LSTU8 ;PRINT ERROR MESSAGE, END SEEN + CAIN CHR,"!" + JRST LSTU8 ;ALTERNATE END SEEN (!) + PUSHJ P,CCASE ;DEPOSIT CHARACTER + PUSHJ P,PUT + JRST LSTU6 + + +LSTU7: LDB 0,CDATE + PUSHJ P,DATOUT ;PRINT CREATION DATE ONLY FOR TTY +LSTU8: IFE DISK30,< + CLOSE IN,> + PUSHJ P,CLRF + JRST LSTU1 + + +;ROUTINE TO OUTPUT SPACES, T4=NO. TO OUTPUT + +SPACES: MOVEI CHR,SPACE + PUSHJ P,PUT + SOJG T4,.-1 + POPJ P, + +;ROUTINE TO DEPOSIT T4.SIXBIT CHARACTERS +;FROM AC0 INTO OUTPUT BUFFER +SIXOUT: MOVSI T2,(POINT 6,0) + JUMPE 0,SIXO1 ;ZERO WORD + TLNE 0,770000 ;LEADING SPACE + JRST LSTO0 ;NO + LSH 0,6 ;GET NEXT CHAR. + MOVEI CHR," " ;BUT OUTPUT SPACE + SKIP 3 +LSTO0: ILDB CHR,T2 + JUMPE CHR,SIXO1 + ADDI CHR,40 ;MAKE ASCII + PUSHJ P,PUT + SOJ T4, + TLNN T2,770000 +SIXO1: POPJ P, + JRST SIXOUT+2 + ;DETERMINE NUMBER OF BLOCKS PER FILE AND TOTAL NUMBER OF +;BLOCKS USED BY USERS PROJECT,PROGRAMMER NUMBER + +BLKS: MOVE DOUT,RIBFIR+RBSIZ + SKIPE LEVEL ;SKIP IF LEVEL C + SKIP 3 ;LEVEL D WORD COUNT + HLRE DOUT,PP ;GET WORD COUNT OF FILE + JUMPGE DOUT,BLKADD ;IF POS = NO. OF BLOCKS + MOVNS DOUT ;MAKE POSITIVE + TRZE DOUT,177 ;TAKE CARE OF PARTIAL BLOCKS + ADDI DOUT,200 + IDIVI DOUT,200 ;CALCULATE BLOCK COUNT +BLKADD: ADDM DOUT,BLKSUM ;CALCULATE TOTAL FOR ALL FILES + PUSHJ P,OUTDE4 ;OUTPUT NUMBER OF BLOCKS IN DECIMAL + JRST TABOUT ;OUTPUT TAB + +;END OF FILE ON UFD OUTPUT TOTAL BLOCKS XXX + +BLKLST: SKIPN BLKSUM ;ANY INFORMATION TO OUTPUT + JRST BLKLS1 ;NO - FINISHED + LSTLIN TOTAL ;OUTPUT CR,LF "TOTAL BLOCKS" + MOVE DOUT,BLKSUM + PUSHJ P,OUTDE4 ;PRINT TOTALS + PUSHJ P,CRLF ;BONUS CR-LF +BLKLS1: SKIPN GENERI ;MORE FILE STRUCTURES? +DIRFIN: JRST [POP P,DEVICE + JRST MAIN1] + SETZM BLKSUM ;START AFFRESH + MOVE T1,PPP ;RESTORE PP + MOVEM T1,PP + JRST LSTU0 ;YES + +TOTAL: ASCIZ / +Total Blocks / + +CCASE: CAIL CHR,"a" ;FLUSH LOWER CASE LETTERS + CAILE CHR,"z" ;FROM OUTPUT IN CASE PDP-6 LPT + POPJ P, + SUBI CHR,40 + POPJ P, + ;INPUT USERS FILE DIRECTORY + +UIN: SETZ IOS, ;JUST IN CASE + IN DIR, + JRST CPOPJ1 ;NO ERRORS + STATUS DIR,IOS + TRZN IOS,EOFBIT + JRST UIN2 ;ERROR PRINT + POPJ P, + +;INIT DIRECTORY DEVICE + +DSKDST: MOVE T2,JOBFF ;SAVE JOBFF IN T2 + + MOVEI T1,DBUF + MOVEM T1,JOBFF ;MAKE MONITOR USE DBUF FOR DISK DIR. + + MOVEI T1,14 ;BINARY MODE + MOVEM T1,ADSK1 + + MOVEI T1,UFDIN ;LOC OF DIRECTORY ENTRY + MOVEM T1,ADSK+1 ;FOR UFD + + OPEN DIR,ADSK1 + JRST ERR1A + INBUF DIR,1 ;RESET JOBFF SAME AS ENTRY + MOVEM T2,JOBFF + POPJ P, + ;OUTPUT THE DIRECTORY LISTING HEADER + +HEADER: PUSHJ P,HEDR4 +HEDR1: LSTLIN HEDL1 + HLRZ DOUT,FNPPN + PUSHJ P,OUTDEC ;PROJ, PROG + MOVEI CHR,"," + PUSHJ P,PUT + HRRZ DOUT,FNPPN + PUSHJ P,OUTDEC + PUSHJ P,TABOUT + PUSHJ P,NOWOUT ;PRINT CURRENT TIME, DATE + DATE ;DATE REQ. + PUSHJ P,DATOUT + PUSHJ P,CLRF + TRNE CALFLG,LISTTY + JRST HEDR2 ;JUMP IF LISTING TO CONSOLE + SOS LIN + LSTLIN HEDLIN +HEDR2: JRST CLRF + +HEDR3: TRNN AUXFLG,FFLG ;POP BACK IF SHORT LISTING + TRNE CALFLG,LISTTY + POPJ P, + PUSHJ P,HEDR4 + LSTLIN HEDL2 + JRST HEDR1 + HEDLIN: ASCIZ / + File Protection Access Creation + Name Ext Blks Date Time Date Mode +/ +HEDL1: ASCIZ /Directory / +HEDL2: ASCIZ /Continuation of / + +UIN2: PUSHJ P,COMERR + JSP T5,INICN2 + ERRPN2 </?Disk directory read /> + MOVEI T3,UFD ;LOCATION OF FILENAME(AND EXT) + PUSHJ P,FN.EX ;PRINT FILE NAME EXTENSION + MOVE T2,AUXFLG + ANDI T2,DSKIN + PUSHJ P,IOERR + SETSTS DIR,(IOS) + JRST CPOPJ1 + +;OUTPUT THE TIME FOUND IN AC 0 + +NOWOUT: MSTIME ;CALL MILLISEC TIMER + IDIVI 0,^D60000 ;CONVERT TO MINUTES +TIMOUT: IDIVI 0,^D60 + MOVE DOUT,0 + PUSHJ P,OUTDEC + MOVEI CHR,":" ;SEPARATE BY A COLON + PUSHJ P,PUT + MOVE DOUT,1 + PUSHJ P,OUTDEC + JRST TABOUT + ;SKIP TO HEAD OF FORM OR NEXT HALF PAGE, RESET COUNT + +HEDR4: TRNE CALFLG,LISTTY + POPJ P, ;EXIT IF TTY + SKIPLE LIN + JRST HEDR6 ;ANYTHING ON THIS PAGE? +HEDR5: MOVEI CHR,FF ;FORM FEED IF FULL OR + MOVEI T2,^D50 +HEDR5A: MOVEM T2,LIN ;ALMOST FULL + PUSHJ P,PUT + MOVEI CHR,LF + PUSHJ P,PUT + PUSHJ P,PUT + JRST PUT ;PRINT LINEFEEDS AND EXIT +HEDR6: CAIGE T2,^D25 + JRST HEDR5 + MOVEI CHR,HPAGE + MOVEI T2,^D16 + JRST HEDR5A + +;OUTPUT OCTAL WORD FOUND IN AC 0 + +OCTLS2: MOVEI CHR," " + CAIGE 0,10 ;AT LEAST 2 CHAR.? + PUSHJ P,PUT ;NO,SO OUTPUT A BLANK +OCTLST: MOVSI T1,(POINT 3,0) + ILDB CHR,T1 + TLNE T1,770000 ;ALLOW UPTO 12 OCTAL NOS + JUMPE CHR,.-2 ;GET MOST SIG. NUMBER +OCTL1: ADDI CHR,60 ;CONVERT TO ASCII + PUSHJ P,PUT ;OUTPUT CHAR + ILDB CHR,T1 ;GET SUCCEEDING CHARS + TLNN T1,400000 ;WAIT TILL POINTING TO NEW + JRST OCTL1 ;WORD, THEN EXIT. MEAN WHILE + POPJ P, ;PRINT OCTAL NUMBERS + +;OUTPUT PROTECTION BITS FOUND IN AC 0 + +PROTO: MOVEI CHR,"<" + MOVSI T1,(POINT 3,,26) + PUSHJ P,OCTL1+1 + MOVEI CHR,">" + PUSHJ P,PUT + JRST TABOUT ;EXIT + ;THIS IS THE DISK ERROR ROUTINE. CALL DERR4 WITH T3=FIRST WORD ADDRESS +;OF LOOKUP OR ENTER. USE T7 FOR SAVING THE ERROR CODE. + +DERR5A: MOVEI T3,FILNAM ;LOCATION OF FILENAME + HRRZ T7,1(T3) ;GET ERROR CODE + SKIPE GENERI ;FATAL IF NOT GENERIC "DSK" + CAILE T7,1 ;NO UFD IF 0 OR 1 + JRST DERR4 ;ANY OTHER ERROR + LSTLIN NOUFD + MOVEI T1,LSTU0 ;RETURN ADDRESS + HRRM T1,(P) ;OF POPJ + JRST DIRSK2 ;GET NEXT FILE STRUCTURE +NOUFD: ASCIZ / no UFD created +/ + +DERR6: MOVEI T3,DTON ;LOCATION OF FILENAME (OUTPUT) + SKIP 1 +DERR5: MOVEI T3,ZRF ;LOCATION OF FILENAME (INPUT) + HRRZ T7,1(T3) ;ERROR TYPE +DERR4: ERRPNT </? /> + PUSHJ P,FN.EX ;PRINT FILE NAME .EXT + CAIL T7,TABLND-TABLE ;LEGAL ERROR? + SKIPA T1,TABLND ;NO,USE CATCH ALL MESSAGE + MOVE T1,TABLE(T7) ;PICK UP BYTE POINTER + JRST PTEXT1 ;AND PRINT MESSAGE + +TABLE: POINT 7,[ASCII /(0) file was not found!/] + POINT 7,[ASCII /(1) no such project-programmer number!/] + POINT 7,[ASCII /(2) protection failure!/] + POINT 7,[ASCII /(3) file was being modified!/] + POINT 7,[ASCII /(4) rename file name already exists!/] + POINT 7,[ASCII /(5) illegal sequence of UUOs!/] + POINT 7,[ASCII /(6) bad UFD or bad RIB!/] + POINT 7,[ASCII /(7) not a SAV file!/] + POINT 7,[ASCII /(10) not enough core!/] + POINT 7,[ASCII /(11) device not available!/] + POINT 7,[ASCII /(12) no such device!/] + POINT 7,[ASCII /(13) not two reloc reg. capability!/] + POINT 7,[ASCII /(14) no room or quota exceeded!/] + POINT 7,[ASCII /(15) write lock error!/] + POINT 7,[ASCII /(16) not enough monitor table space!/] + POINT 7,[ASCII /(17) partial allocation only!/] + POINT 7,[ASCII /(20) block not free on allocation!/] + +TABLND: POINT 7,[ASCII /(?) lookup,enter,or rename error!/] + +ADATE: POINT 12,FILNAM+1,35 ;ACCESS DATE +CTIME: POINT 11,FILNAM+2,23 ;CREATION TIME +CDATE: POINT 12,FILNAM+2,35 ;CREATION DATE +PROT: POINT 9,FILNAM+2,8 ;PROTECTION +MODE: POINT 4,FILNAM+2,12 ;RECORDING MODE +ADSK1: BLOCK 1 ;OPEN DIRECTORY, MODE +ADSK: BLOCK 2 ;FILENAME, EXT +LIN: BLOCK 1 ;COUNT FOR DSK DIR LIST +UFDIN: BLOCK 3 ;HEADER FOR READING DISK DIRECTORY +UFD: BLOCK 4 ;[P,P] OR *FD* + ;UFD OR SYS +DTBLK: BLOCK 1 ; OPEN DTA DIRECTORY BLOCK +DTDEV: BLOCK 2 ; SIXBIT /DTAN/ +IFN DISK30,< +BLKHD: BLOCK 3 ;HEADER FOR READING BLOCKS OFF 10/30 DISK +MASK: BLOCK 1 ;PROJ,PROG # 10/30 DISK> +BLKSUM: BLOCK 1 ;TOTAL NBR BLOCKS PER PROJ. PROG NBR +LEVEL: BLOCK 1 ;-2 IF LEVEL D DISK SERVICE +GENERI: BLOCK 1 ;FILE STRUCTURE NAMES IF GENERIC DSK + + VAR +LOWTOP: +PIPEND: END PIP1 + diff --git a/src/pip.opr b/src/pip.opr new file mode 100644 index 0000000..4f052e9 --- /dev/null +++ b/src/pip.opr @@ -0,0 +1,8 @@ + +PIP ASSEMBLY AND LOADING INSTRUCTIONS +SEE PAGE ONE OF PIP SOURCE FOR SPECIAL SWITCH SETTING + +THE FOLLOWING IS THE VERSION SUPPLIED BY DEC + .LOAD /MACRO PIP.NN + .SSAVE DSK PIP + \ No newline at end of file diff --git a/src/ptpser.mac b/src/ptpser.mac new file mode 100644 index 0000000..2e56121 --- /dev/null +++ b/src/ptpser.mac @@ -0,0 +1,242 @@ +TITLE PTPSER - PAPER TAPE PUNCH SERVICE ROUTINE +SUBTTL 8-15-65 +EXTERNAL PTPCHN, PTPSAV, ADVBFE, ITMCT1, SETIOD, SETBYT, IOSET, CKS12 +EXTERNAL ILLINP, OUT, WAIT1, PTPRET,PTPCHL,PIOMOD +INTERNAL PTPINT + +;PTP DEVICE DATA BLOCK LINKAGE + +EXTERNAL PTPDB,PTPDAT,PTPCHR,PTPIOS,PTPSER,PTPMOD,PTPBUF +EXTERNAL PTPPTR,PTPADR,PTPCTR,PTPCNT,PTPCHA,PTPSIO +ENTRY PTPDSP + + +, PARAMETER ASSIGNMENTS + + +, PTP CONTROL REGISTER + PTPDON=10 + +, FORMAT CONTROL + PTPFDN=200 + +, SPECIAL IO STATUS WORD ASSIGNMENTS + PTPFED=200000 + PTPSSQ=40000 + PTPEOL=20000 + PTPSEQ=10000 + PTPBIN=4000 ;CHECKSUM BINARY + PTPIB=2000 ;IMAGE BINARY + +, SPECIAL ASCII CHARACTERS + NULL=200 + RUBOUT=377 + HORTAB=211 + VERTAB=213 + FORMFD=214 + +REPEAT 0,< +,PTP DATA BLOCK + +PTPDAT: SIXBIT "PTP" +PTPCHR: 41 +PTPIOS: 0 +PTPSER: EXP PTPDSP +PTPMOD: XWD 1000+PROG.14403 + 0 +PTPBUF: 0 +PTPPTR: 0 +PTPADR: XWD PROG,0 +PTPCTR: 0 +PTPCNT: 0 +PTPCHA: 0 +PTPSIO: 0 +> + +,PTP SERVICE DISPATCH TABLE + +PTPDSP: JRST PTPREL ;RELEASE + JRST PTPCLS ;CLOSE + JRST PTPOUT ;OUTPUT + JRST ILLINP ;INPUT + + + INTERNAL PTPINI +PTPINI: +PTPREL: CONO PTP,0 + HLLZS PTPINT ;CLEAR CONSO FLAG BITS + POPJ PDP, ;RETURN + +PTPCLS: PUSHJ PDP,OUT; OUTPUT REMAINING BUFFERS + PUSHJ PDP,WAIT1; WAIT FOR IOACT=0. + MOVE IOS,PTPIOS; C(IOS):=C(PTPIOS) + TLO IOS,IODISC+PTPFED+IOW; IODISC:=IOW:=PTPFED:=1 + TRO IOS,IOACT; IOACT:=1 + MOVEM IOS,PTPIOS; C(PTPIOS):=C(IOS) + MOVEI TAC,200 + MOVEM TAC,PTPCNT; PTPCNT:=400 + MOVEI TAC,PTPDON ;SET CONSO FLAG + HRRM TAC,PTPINT + MOVEI TAC,PTPCHN; TAC:=PTPCHN,PI CHANNEL ASSIGNMENT + CONO PTP,PTPDON(TAC); DONE FLAG:=1, ASSIGN PI CHANN + JRST WAIT1 ;WAIT FOR IOACT=0, ALL BUFFERS FINISHED + + +PTPOUT: TLZE IOS,IOBEG ;VIRGIN DEVICE? (IOBEG:=0) + JRST PTPIN2 ;YES + +PTPIN1: TRO IOS,IOACT ;IOACT:=1 + TLZ IOS,IODISC ;CLEAR DISCONNECT BIT + MOVEM IOS,PTPIOS ;PTPIOS:=C(IOS) + MOVEI TAC,PTPDON ;SET CONSO FLAG BIT + HRRM TAC,PTPINT + MOVEI TAC, PTPCHN + CONO PTP,PTPDON (TAC); DONE FLAG:=1, ASSIGN PI CHAN + POPJ PDP, ;RETURN + +PTPIN2: LDB TAC,PIOMOD + TLO IOS, IOFST+PTPFED+IO ;IOFST:=PTPFED:=IO:=1 + TLZ IOS,PTPBIN+PTPIB ;CLEAR BINARY AND IMAGE BINAR + CAIN TAC,IB ;IMAGE BINARY? + TLO IOS,PTPIB ;YES + CAIN TAC,B ;MODE:=BINARY? + TLO IOS,PTPBIN ;YES, PTPBIN:=1 + MOVEI TAC,PTPFDN ;PTPCNT:=PTPFDN + MOVEM TAC,PTPCNT + PUSHJ PDP,SETBYT ;SETBYT + HLLM TAC,PTPPTR ;PTPPTR0-5:=PTPPTR12-13:=0,PTPPTR6-11:= + ;SIZE; PTPPTR14-17:=PROG + JRST PTPIN1 + + +,PUNCH INTERRUPT SERVICE + +PTPINT: CONSO PTP,PTPDON; DONE FLAG=1? + JRST PTPINT ;NO. IF PTP IS IN FLAG LIST GO TO ERROR + MOVEM IOS,PTPSIO ;PTPSIO:=C(IOS) SAVE IOS + MOVE IOS,PTPIOS ;IOS:=C(PTPIOS) + TLNE IOS,PTPFED ;FEED REQUEST? (PTPFED=1?) + JRST PTPS2 ;YES + MOVE IOS,PTPSIO ;RESTORE IOS + JSR PTPSAV ;SAVE ACS AND ESTABLISH PDP + MOVEI DEVDAT,PTPDAT + PUSHJ PDP,IOSET ;PROG:=(JBTADR 18-35),ITEM:=C(DEVCTR) + MOVE IOS,PTPIOS + TLZE IOS,IODISC ;DISCONNECT? (IODISC=1?) + JRST PTPADV ;YES + TLZE IOS,IOFST ;IOFST=1? IOFST:=0 + JRST PTP9 ;YES + TLNN IOS,PTPBIN+PTPIB ;BINARY PUNCH MODE? + JRST PTP3 ;NO + +PTPB0: MOVE TAC,PTPCHA; BINARY OUTPUT BYTE SIZE=36 + ROT TAC,6 + MOVEM TAC,PTPCHA + ANDI TAC,77; TAC:=XX, SIXBIT SUB-BYTE + ADDI TAC,200 + DATAO PTP,TAC; PUNCH 2XX + SOSL PTPCNT; C(PTPCNT):=C(PTPCNT)-1. WORD DONE? + JRST PTPXIT; NO + SOSL PTPCTR; C(PTPCTR):=C(PTPCTR)-1. ITEM COUNT < 0 + JRST PTPB1; NO + TLNE IOS,PTPIB ;IMAGE BINARY? + TLOA IOS,IODISC ;YES, SUPPRESS TAPE FEED. + TLO IOS,IODISC+PTPFED ;IODIS:=PTPFED:=1 + MOVEI TAC,10 + MOVEM TAC,PTPCNT; PTPCNT:=10 + JRST PTPXIT + +PTPB1: MOVEI TAC,5 ;PTPCNT:=5 + MOVEM TAC,PTPCNT + MOVE DAT,@PTPPTR; PTPCHA:=OUTPUT DATA WORD + AOS PTPPTR; PTPPTR:=C(PTPPTR)+1. ADVANCE ITEM POIN + MOVEM DAT,PTPCHA + JRST PTPXIT + + +PTP3: DATAO PTP,PTPCHA; PUNCH CHARACTER + TRNE IOS,14; IS MODE AN ALPHA MODE + JRST PTP1; NO + MOVE DAT,PTPCHA + CAIE DAT,HORTAB; HORIZONTAL OR VERTICAL TAB? + CAIN DAT,VERTAB + JRST PTPP1; YES + CAIE DAT,FORMFD; FORM FEED? + JRST PTP1; NO + TLO IOS,PTPFED+PTPEOL; PTPFED:=PTPEOL:=1 + MOVEI DAT,20 + MOVEM DAT,PTPCNT; PTPCNT:=20 + JRST PTPXIT + + +PTP1: SOSGE PTPCTR; C(PTPCTR:=C(PTPCTR)-1. IS C(PTPCTR)<0 + JRST PTP5 ;YES + LDBI DAT,PTPPTR ;DAT:=OUTPUT ITEM + LDB TAC,PIOMOD + CAIN TAC,I; MODE=IMAGE? + JRST PTP6 ;YES + IORI DAT,200; NO, INSERT EIGHTH HOLD + CAIN DAT,NULL; NULL? + JRST PTP1; YES + +PTP6: MOVEM DAT,PTPCHA; PTPCHA:=OUTPUT ITEM + JRST PTPXIT + +PTPS2: CLEARM PTPCHA; PUNCH FEED + DATAO PTP,PTPCHA + SOSG PTPCNT; COUNT FEED LINES + TLZ IOS,PTPFED; PTPFED:=0 + MOVEM IOS,PTPIOS; PTPIOS:=C(IOS) + MOVE IOS,PTPSIO ;RESTORE IOS + JEN @PTPCHL ;DISMISS + +PTP5: TLO IOS,IODISC; IODISC:=1 + JRST PTPXIT + +PTPBN: HRRZ TAC1,PTPADR; TAC1:=BUFFER ADDRESS + PUSHJ PDP,CKS12; TAC:=CALCULATE CHECKSUM + ADD TAC1, PTPADR + HLLM TAC,@TAC1; STORE CHECKSUM IN LEFT HALF OF FIRST BU + JRST PTPB1 + + +PTPADV: PUSHJ PDP,ADVBFE; ADVANCE BUFFER + JRST PTPDSC; EXIT1. NEXT BUFFER EMPTY + TRNE IOS,IOCON; CONTINUOUS? (IOCON=1?) + JRST PTPDSC; YES + TLZE IOS,IOW; IN A WAIT? IOW:=0 + PUSHJ PDP,SETIOD; YES. IOWS:=1 +PTP9: TLZ IOS,IOFST; IOFST:=0 + MOVE TAC,PTPADR + AOS TAC + HRRM TAC,PTPPTR; PTPPTR18-35:=C(PTPADR18-25)+1 + HRRZ ITEM,@TAC; ITEM:=WORD COUNT + LDB TAC1,PTP91 ;PICK UP BYTE SIZE + PUSHJ PDP,ITMCT1; ITEM:=WORD COUNT*[36/BYTE SIZE] + MOVEM ITEM,PTPCTR; PTPCTR:=C(ITEM) + JUMPE ITEM,PTPADV ; IS ITEM COUNT=0? + TLNE IOS,PTPBIN; BINARY PUNCH MODE? + JRST PTPBN; YES + TLNN IOS,PTPIB ;IMAGE BINARY? + JRST PTP1 + AOS PTPPTR ;YES + SOS PTPCTR + JRST PTPB1 + +PTP91: POINT 6,PTPPTR,11 + +PTPP1: MOVEI DAT,RUBOUT; PTPCHA:=RUBOUT + MOVEM DAT,PTPCHA + TLO IOS,PTPEOL; PTPEOL:=1 + JRST PTPXIT + +PTPDSC: PUSHJ PDP,PTPREL ;CLEAR PTP CONTROL REG AND CONSO BITS + TRZ IOS,IOACT; IOACT:=0 + TLO IOS,IOFST; IOFST:=1 + TLZE IOS,IOW; IN A WAIT? IOW:=0 + PUSHJ PDP,SETIOD; YES. IOSW:=1 + +PTPXIT: MOVEM IOS,PTPIOS; PTPIOS:=C(IOS) + JRST PTPRET; NO + +END, diff --git a/src/ptrser.mac b/src/ptrser.mac new file mode 100644 index 0000000..0340f7d --- /dev/null +++ b/src/ptrser.mac @@ -0,0 +1,170 @@ +TITLE PTRSER - PAPER TAPE READER SERVICE ROUTINE +SUBTTL 8-15-65 +EXTERNAL WSYNC, STOSQD, ILLOUT +EXTERNAL STODAT, IOSET, SETBYT, CKS12, ADVBFF +EXTERNAL SETIOD, PTRSAV, PTRCHN, PTRRET,PIOMOD +INTERNAL PTRINT + +;PTR DEVICE DATA BLOCK LINKAGE + +EXTERNAL PTRDB,PTRDAT,PTRCHR,PTRIOS,PTRSER,PTRMOD,PTRBUF +EXTERNAL PTRADR,PTRPTR,PTRCTR,PTRSVC,PTRSV1 +ENTRY PTRDSP + + +,PARAMETER ASSIGNMENTS +, PTR CONTROL REGISTER + PTRDON=10; DONE FLAG + PTRBSY=20; BUSY FLAG + PTRBIN=40; BINARY READ MODE + POW=400; POWER. ON=1 + +, SPECIAL IO STATUS WORD ASSIGMENTS + PTRERR=2000 + PTRFCI=200000 + PTRPOW=100000 +, SPECIAL ASCII CHARACTERS + NULL=200 + RUBOUT=377 + S2EOF=232; END OF FILE +, PI CONTROL REGISTER + PION=200 + PIOFF=400 + +REPEAT 0,<P +,PTR DATA BLOCK +PTRDAT: SIXBIT "PTR" +PTRCHR: 41 +PTRIOS: 0 +PTRSER: EXP PTRDSP +PTRMOD: XWD 1000+PROG,10403 + 0 +PTRBUF: 0 +PTRADR: XWD PROG,0 +PTRPTR: 0 +PTRCTR: 0 +PTRSVC: 0 +PTRSV1: 0 +> + +,PTR SERVICE DISPATCH TABLE + +PTRDSP: JRST PTRREL ;RELEASE + POPJ PDP,; CLOSE + JRST ILLOUT ;OUTPUT + JRST PTRINP; INPUT + + +PTRINP: TLNN IOS,IOBEG; VIRGIN DEVICE? (IOBEG=1?) + JRST PTRIN1; NO + TLO IOS,IOFST; IOFST:=1. NEXT ITEM WILL BE FIRST ITEM + PUSHJ PDP,SETBYT; TAC0-5:=TAC12-13:=0,TAC6-11:=BYTE SIZE +, TAC14-17:=PROG + MOVEM TAC,PTRPTR; PTRPTR:=C(TAC) + CONSZ PTR,POW; IS POWER ON? + TLO IOS,PTRPOW; YES. PTRPOW:=1 +PTRIN1: TRO IOS,IOACT; IOACT:=1 + LDB TAC,PIOMOD + MOVEI TAC1, PTRCHN; TAC1:=PTR PI CHANNEL ASSIGNME + CAIN TAC,B; MODE=BINARY? + ADDI TAC1,PTRBIN; YES. ALPHA/BINARY:=BINARY + MOVEI TAC,PTRDON ;SET CONSO INTERRUPT FLAG + HRRM TAC,PTRINT + TLZN IOS,IOBEG; VIRGIN DEVICE? (IOBEG=1?) + JRST PTRIN4; NO + MOVEM IOS,PTRIOS; PTRIOS:=C(IOS) + CONO PTR,PTRBSY(TAC1); PTR BUSY FLAG:=1,ASSIGN INTER + POPJ PDP,; INPUT RETURN-VIRGIN DEVICE + +PTRIN4: MOVEM IOS,PTRIOS; PTRIOS:=C(IOS) + CONO PTR,PTRDON(TAC1); PTR DONE FLAG:=1,ASSIGN INTER + POPJ PDP, + + +PTRINT: CONSO PTR,PTRDON ;INTERRUPT. IS DONE FLAG = 1? + JRST PTRINT ;NO. IF PTR IS IN FLAG LIST, THIS LOC + SKIPL PTRIOS ;DISCONNECT REQUEST? (IODISC=1?) + DATAI PTR,PTRSV1 ;PTRSV1: = DATA WORD + JSR PTRSAV ;SAVE ACCUMULATORS AND ESTABLISH PDP + MOVEI DEVDAT,PTRDAT ;DEVDAT: = PTR SIXBIT + PUSHJ PDP,IOSET ;PROG:=C(JBTADR18-35),ITEM:=C(DEVCTR) + MOVE IOS,PTRIOS ;IOS:=C(PTRIOS) + MOVE DAT,PTRSV1 ;DAT:=C(PTRSV1) + CONSO PTR,POW ;PTR POWER ON? + JRST PTREND ;NO + TLON IOS,PTRPOW ;PTRPOW=1? PTRPOW:=1 + JRST PTREX1 ;NO + TLZE IOS,IODISC + JRST PTREX + TLZE IOS,PTRFCI ;IS PTRFCI=1? + MOVE DAT,PTRSVC ;YES. DAT:=C(PTRSVC) +PTRIN0: TRNE IOS,B ;MODE=BINARY? + JRST PTRI0 ;YES + CAIE DAT,NULL ;LAST CHARACTER NULL OR RUBOUT + CAIN DAT,RUBOUT + JRST PTREX1 ;YES + JUMPE DAT,PTREX1 ;DAT=0? + +PTRI0: PUSHJ PDP,STODAT ;NO STORE DATA WORD. + JFCL ;CHECKSUM ERROR + JRST PTRI1 ;BLOCK FULL OR BLOCK COMPLETE + JRST PTREX1 ;DATA STORED CORRECTLY. + +PTRI1: PUSHJ PDP,ADVBFF ;ADVANCE BUFFER + TLO IOS,IODISC; NEXT BUFFER IS FULL. IODISC:=1 + TRNE IOS,IOCON; NEXT BUFFER IS EMPTY. CONTINUOUS? (IOC + TLO IOS,IODISC; NON-CONT. OPERATION. IODISC:=1 +PTRI2: TLO IOS,IOFST; IOFST:=1. NEXT ITEM IS FIRST ITEM OF A + TLZE IOS,IOW; IN A WAIT? IOW:=0 + PUSHJ PDP,SETIOD; IOWS:=1 + JRST PTREX1 + + +,COME HERE WHEN THE READER IS SHUT OFF + +PTREND: TDZ IOS,[XWD PTRPOW,IOACT] ;PTRPOW:=0,IOACT:=0 + PUSHJ PDP,PTRREL ;CLEAR PTR AND CONSO FLAG + LDB TAC,PIOMOD + TLO IOS,IOEND ;IOEND:=1 + TRNE TAC,B ;MODE=A,AL + JRST PTREIB ;NO + MOVEI DAT,S2EOF; EOF CHAR + PUSHJ PDP,STODAT ;STORE DATA WORD + JRST PTRI0+1 ;CHECKSUM ERROR + JRST .+3 ;BLOCK FULL OF BLOCK COMPLETE +PTREI: PUSHJ PDP,STOSQD; FINISH THIS BUFFER, STORE WORD COUNT + SKIP + PUSHJ PDP,ADVBFF ;ADVANCE BUFFER + SKIP + JRST PTRI2 + +PTREIB: CAIE TAC,B ;MODE=BINARY? + JRST PTREI ;NO + TLNN IOS,IOFST ;IOFST=1? + TRO IOS,PTRERR ;NO. PTRERR:=1. BINARY BLOCK INCOMPLE + JRST PTRI2 + + +,DISCONNECT PTR +PTREX: SKIPG @PTRADR ;IOUSE=1? + JRST PTREX0 ;YES. + DATAI PTR,PTRSV1 + JRST PTRIN0 + +PTREX0: DATAI PTR,PTRSVC ;SAVE LAST DATA WORD FROM PTR + PUSHJ PDP,PTRREL ;CLEAR PTR AND CONSO FLAG + TLO IOS,PTRFCI ;PTRFCI:=1 + TRZ IOS,IOACT ;IOACT:=0 + +PTREX1: MOVEM ITEM,PTRCTR ;PTRCTR:=C(ITEM) + MOVEM IOS,PTRIOS ;PTRIOS:=C(IOS) + JRST PTRRET ;RESTORE ACCUMULATORS AND DISMISS INTER + + INTERNAL PTRINI + +PTRINI: +PTRREL: CONO PTR,0 ;CLEAR PTR CONTROL + HLLZS PTRINT ;CLEAR CONSO FLAG + POPJ PDP, + + END, diff --git a/src/rim10b.mac b/src/rim10b.mac new file mode 100644 index 0000000..b2d0d7b --- /dev/null +++ b/src/rim10b.mac @@ -0,0 +1,267 @@ + TITLE RIMIO + +;CONVERTS RIM10B PAPER TAPES TO DMP FILES AND VICE-VERSA + +EXTERN JOBSA,JOBREL,JOBSYM,JOBS41 + +A=1 +B=2 +C=3 +D=4 +CHK=13 +BLK=14 +LNG=15 +R=16 +P=17 + +PDLEN==40 + +PDLIST: BLOCK PDLEN + +OFILE: BLOCK 5 ;OFILE+4 IS THE DEVICE. +IFILE: BLOCK 5 ;IFILE+4 IS THE DEVICE +OBUF: BLOCK 3 +IBUF: BLOCK 3 + +DMPBUF: BLOCK 200 ;RANDOM ACCESS DUMP IO BUFFER. +HILOC: 0 + ;ERRORS: + +NOENT: OUTSTR [ASCIZ/Enter to create output file failed. +/] + JRST BEGIN + +NOLALT: OUTSTR [ASCIZ/Lookup to read-alter the output file failed. +/] + JRST BEGIN + +NOALT: OUTSTR [ASCIZ/Enter to read-alter the output file failed. +/] + JRST BEGIN + +NOPTR: OUTSTR [ASCIZ/OPEN of device PTR: failed. +/] + JRST BEGIN + +NOOPEN: OUTSTR [ASCIZ/OPEN failed +/] + JRST BEGIN + + ;INITIALIZATION, DISPATCH + +BEGIN: RESET + MOVE P,[IOWD PDLEN,PDLIST] +RORP: OUTSTR [ASCIZ/Read tape or Punch tape? (Type R or P) /] + INCHWL A + PUSHJ P,CLRIN + TRZ A,40 ;MAKE SURE IT'S UPPERCASE + CAIN A,"R" + JRST RTAPE + CAIN A,"P" + JRST PTAPE + OUTSTR [ASCIZ/? +/] + JRST RORP + +CLRIN: PUSH P,A +CLRIN1: CAIE A,175 + CAIN A,12 + JRST APOPJ + INCHWL A + JRST CLRIN1 + +;HERE'S HOW THE RIM10B LOADER LOOKS ON THE TAPE: +PTR??104 +;AC 10 CONTAINS (WHEN 5 IS EXECUTED): +; SOJA 10,4 - INITIAL POINTER OR JRST WORD +; SOJA 10,3 - MIDDLE OF DATA BLOCK +; SOJA 10,2 - WHEN READING THE CHECKSUM WORD +; +RIM10B: -16,,0 ; 0 INITIAL BLKI WORD + CONO PTR,60 ; 1 START PTR IN BINARY MODE + HRRI 10,4 ; 2 INITIALIZE 10 (FOR INDEX AND JUMP ADDR) + CONSO PTR,10 ; 3 SKIP IF DONE + JRST 3 ; 4 WAIT FOR DONE + DATAI PTR,@7(10) ; 5 STORE DATA INDIRECT (13 OR 12 OR 11) + XCT 7(10) ; 6 EXECUTES 13 OR 12 OR 11 + XCT 12(10) ; 7 EXECUTES 16 OR 15 OR 14 + SOJA 10,0 ;10 RH IS CLOBBERED TO 4 OR 3 OR 1 + CAME 17,16 ;11 XCTED TO CHECK CHECKSUM + ADD 17,1(16) ;12 XCTED TO COMPUTE CHECKSUM + SKIPL 17,16 ;13 XCT TO INITIALIZE CHECKSUM AND + ; SKIP IF THIS IS AN AOBJN WORD + JRST 4,1 ;14 XCT TO HALT IF CHECKSUM FAILS + AOBJN 16,3 ;15 XCT WHILE READING MIDDLE OF DATA BLOCK + JRST 2 ;16 XCTED BY READIN MODE. XCT TO START PRGM + ;17 CHECKSUM IS STORED HERE. + +RIMPTR: RIM10B-.,,RIM10B-1 ;IOWD POINTER TO THE RIM10B LOADER + ;RTAPE + +RTAPE: OUTSTR [ASCIZ/Output file name: /] + MOVEI R,OFILE + MOVE A,[OFILE,,OFILE+1] + SETZM OFILE + BLT A,OFILE+4 + MOVSI A,'DMP' + MOVEM A,OFILE+1 + PUSHJ P,GETFIL ;READ FILE NAME FROM USER. + + MOVEI A,17 ;OPEN CHANNEL + SKIPN B,OFILE+4 + MOVSI B,'DSK' + MOVEI C,0 + OPEN 1,A + JRST NOOPEN + MOVE D,[OFILE,,A] + BLT D,D + ENTER 1,A ;SELECT OUTPUT FILE. + JRST NOENT + CLOSE 1, ;WRITE 0 LENGTH FILE. + RELEAS 1, + MOVEI A,17 ;RE-OPEN CHANNEL + SKIPN B,OFILE+4 + MOVSI B,'DSK' + MOVEI C,0 + OPEN 1,A + JRST NOOPEN + MOVE D,[OFILE,,A] + BLT D,D + LOOKUP 1,A ;SEEK FILE WE JUST WROTE + JRST NOLALT ;I JUST WROTE ONE. WHERE IS IT? + MOVE D,[OFILE,,A] + BLT D,D + ENTER 1,A ;ENTER READ-ALTER MODE + JRST NOALT + + INIT 0,13 ;PTR IN BINARY MODE. + 'PTR ' + IBUF + JRST NOPTR + + OUTSTR [ASCIZ/Mount paper tape and type return when ready: +/] + MOVEI A,0 + PUSHJ P,CLRIN + + MOVE B,RIMPTR + PUSHJ P,TREAD ;READ IOWD FOR TAPE'S LOADER + CAMLE A,1(B) ;OK IF TAPE'S LOADER IS LONGER + JRST BADRIM ;BUT NOT IF SHORTER. + MOVE C,A ;IOWD FOR TAPE'S LOADER + ADD B,[1,,1] +RIMCHK: PUSHJ P,TREAD ; + CAME A,1(B) + JRST BADRIM ;TAPE ISN'T IN RIM FORMAT. + ADD C,[1,,1] + AOBJN B,RIMCHK ;LOOP, GOBBLING THE RIM10B LOADER. + JUMPG C,RIMOK ;JUMP IF TAPE'S IOWD IS COUNTED OUT + PUSHJ P,TREAD ;READ AND THROW OUT EXTRA WORDS + AOBJN C,.-1 ;FROM THE TAPE'S LOADER. +RIMOK: PUSHJ P,FILINI +GETBLK: PUSHJ P,TREAD + SKIPL B,A ;SKIP IF THIS IS A POINTER WORD + JRST SSTART ;SET STARTING ADDRESS + MOVE CHK,B ;INITIALIZE CHECKSUM +RIMLP: PUSHJ P,TREAD + ADD CHK,A + PUSHJ P,FILSTR ;STORE IN FILE. DATA A IN LOC 1(B) + AOBJN B,RIMLP ;LOOP + PUSHJ P,TREAD ;READ CHECKSUM WORD + CAMN A,CHK + JRST GETBLK ;GET ANOTHER IOWD. + OUTSTR [ASCIZ/Checksum failure. +/] + HALT GETBLK + +UNEOF: OUTSTR [ASCIZ/Unexpected End of File from PTR: +/] + MOVEI A,0 ;STORE ZERO FOR THE STARTING ADDRE. +SSTART: MOVE B,HILOC ;GET HIGHEST LOC LOADED. + HRLI A,1(B) ;ONE BEYOND IS INITIAL JOBFF + MOVEI B,JOBSA-1 + PUSHJ P,FILSTR + PUSHJ P,FILFRC + CLOSE 1, + RELEAS 1, + RELEAS 0, + JRST BEGIN + +BADRIM: OUTSTR [ASCIZ/Bad format RIM10B loader at the front of the tape? +/] + JRST BEGIN + +PTRERR: OUTSTR [ASCIZ/PTR input error +/] + GETSTS 0,A + HALT .+1 + SETSTS 0,10 +TREAD: SOSLE IBUF+2 + JRST TRED1 + INPUT 0, + STATZ 0,20000 + JRST [POP P,(P) + JRST UNEOF] + STATZ 0,740000 + JRST PTRERR +TRED1: ILDB A,IBUF+1 + POPJ P, + +FILSTR: MOVEI C,1(B) ;C?ABSOLUTE ADDRESS. + CAIN C,36 ;EXEC MODE JOBSYM? + MOVEI C,JOBSYM + CAIN C,41 ;UUO TRAP? + MOVEI C,JOBS41 ;YES. HERE'S WHERE IT BELONGS IN DMP FORMAT + CAMLE C,HILOC ;IS THIS HIGHEST LOC LOADED THUS FAR? + MOVEM C,HILOC ;YES. SAVE HIGHEST LOC LOADED. + SUBI C,74 ;OFFSET TO DMP FILE ORIGIN=WORD # IN FILE. + JUMPL C,CPOPJ ;RETURN IF OFF THE FRONT. + IDIVI C,200 ;BLOCK NUMBER-1 IN C, WORD NUMBER IN D. + ADDI C,1 ;THIS IS THE USET POINTER + CAIN C,(BLK) ;SAME AS WHAT'S IN CORE? + JRST FILST2 ;YES. - THIS IS THE EASY CASE. +FILST0: PUSHJ P,FILFRC ;FORCE CURRENT RECORD OUT. ADVANCE TO NEXT + CAIG C,(LNG) ;IS DESIRED RECORD WITHIN EXISTING FILE? + JRST FILST1 ;YES. READ IT (UNLESS THE LAST RECORD) + MOVEI BLK,(LNG) ;SET TO APPEND A ZERO RECORD TO THE FILE. + JRST FILST0 + +FILST1: MOVEI BLK,(C) ;MAKE DESIRED RECORD THE CURRENT RECORD + CAIL BLK,(LNG) ;IS THIS THE NON-EX RECORD AT END OF FILE? + JRST FILST2 ;YES. WE CAN'T (AND DON'T NEED TO) READ IT. + USETI 1,(BLK) + INPUT 1,[-200,,DMPBUF-1 + 0] +FILST2: MOVEM A,DMPBUF(D) ;STORE DATA + POPJ P, + +FILINI: MOVEI BLK,1 ;REC # THAT IS "IN CORE". + MOVEI LNG,1 ;RECORD NUMBER OF EOF + SETZM HILOC ;HIGHEST LOCATION LOADED +FILCLR: SETZM DMPBUF + PUSH P,A + MOVE A,[DMPBUF,,DMPBUF+1] + BLT A,DMPBUF+177 +APOPJ: POP P,A +CPOPJ: POPJ P, + +FILFRC: USETO 1,(BLK) ;SELECT OUTPUT RECORD ALWAYS + OUTPUT 1,[-200,,DMPBUF-1 ;WRITE CURRENT RECORD. + 0] + ADDI BLK,1 + CAMGE LNG,BLK + MOVE LNG,BLK ;INCREASE LNG IF INCREASING FILE. + JRST FILCLR ;NEXT RECORD NUMBER + ;THINGS TO WRITE LATER: + +GETFIL: MOVE A,['RIMOUT'] + MOVEM A,(R) + OUTSTR [ASCIZ/RIMOUT.DMP +/] + POPJ P, + +PTAPE: OUTSTR [ASCIZ/Not ready. +/] + jrst begin + +END BEGIN diff --git a/src/runcss.mac b/src/runcss.mac new file mode 100644 index 0000000..f2060fd --- /dev/null +++ b/src/runcss.mac @@ -0,0 +1,428 @@ +TITLE RUNCSS - RUN CONTROL SUBROUTINES +SUBTTL T. HASTINGS 8-16-65 +EXTERNAL APRCHN,APRCHL,CH6SAC,JBTADR,JOB,JOBAC,JOBDAT,JOBN +EXTERNAL JOBPDP,USRDDT,USRPDP,JOBDDT +EXTERNAL IORELS,JBTSTS,JOBADR,JOBCDP,JOBPC,JOBREL,JOBSA,JOBSYM +EXTERNAL MESPNT,QUANT1,JOBDAC,TTYSTR,STOPU,SCHEDF +EXTERNAL UXIT,IOCOMP,DCREQ,DCAVAL,DTREQ,DTAVAL,MTREQ,MTAVAL +EXTERNAL CH1XIT,CH2XIT,CH3XIT,CH4XIT,CH5XIT,CH6XIT,CH7XIT +EXTERNAL JOBFF,MJOBPD,JOBPDL,IOCOMP,PJOBN,USRLO,USRLO1,USRHI +EXTERNAL TTYFNU,RSCHED + +;EXIT UUO ROUTINE + + INTERNAL EXIT +EXTERNAL IORELS,TTYFNU,MESPNT,IOKILL + +EXIT: PUSHJ PDP,IORELS ;RELEASE ALL DEVICES + PUSHJ PDP,TTYFNU + MOVEI TAC1,EXMESS + PUSHJ PDP,MESPNT + JRST HOLD ;STOP THIS USER IMMEDIATELY + +EXMESS: ASCIZ / +EXIT +/ +;RESET UUO ROUTINE + + INTERNAL RESET + +RESET: PUSHJ PDP,IOKILL ;RELEASE ALL DEVICES + PUSHJ PDP,SETUSR ;CLEAR PART OF JOB DATA AREA + JRST UXIT ;AND RETURN TO CALLER + + +;COMMON ERROR HANDLING ROUTINES +;DEVDAT MUST BE SET UP TO TTY DDB ON WHICH TO PRINT ERROR MESSAGE + +;HERE ON ERROR DETECTED AT INTERRUPT SERVICE LEVEL +;0(PDP) CONTAINS ADR. OF DEVICE DATA BLOCK CAUSING ERROR + +;CALL MOVE TAC, PI CHANNEL NO DETECTING ERROR +; JRST HOLDI + +INTERNAL HOLDI,HOLD,HOLDI1 + +HOLDI: MOVE TAC1, 0(PDP) ;DEVICE DATA BLOCK + LDB ITEM, [POINT 9, DEVCHR(TAC1), 8] ;GET JOB NUMBER +HOLDI1: PUSH PDP, TAC ;SAVE PI CHANNEL NO. + PUSHJ PDP, HOLDSB + POP PDP, TAC + JRST CHNTAB(TAC) ;GO RESTORE ACS AND DISMISS CHANNEL + +CHNTAB: JRST RSCHED ;INTERRUPT ON CLOCK CHANNEL,RESCHEDULE + JRST CH1XIT + JRST CH2XIT + JRST CH3XIT + JRST CH4XIT + JRST CH5XIT + JRST CH6XIT + JRST CH7XIT + +;HERE ON ERROR FROM UUO LEVEL. ERROR MESSAGE ALREADY IN TTY BUFFER + +;DAT=BYTE POINTER TO END OF MESSAGE; DEVDAT=TTY DEV. DATA BLOCK +HOLD: MOVE ITEM, JOB ;NO. OF THIS JOB + PUSHJ PDP,WAIT1 ;WAIT UNTIL TTY FINISHED + +HOLDSB: PUSHJ PDP,CRLF + PUSHJ PDP, TTYSTR ;START UP TTY TO PRINT ERROR MESSAGE +EXTERNAL CRLF + +;ROUTINE TO STOP USER AND FLAG AS ERROR STOP +;CALL: MOVE ITEM, JOB NUMBER +; PUSHJ PDP,ESTOP + + +INTERNAL ESTOP + +ESTOP: MOVSI TAC,JERR ;SET ERROR BIT IN JOB STATUS + IORM TAC, JBTSTS(ITEM) + JRST STOP1 + + +,BLOCK TRANSFER PROGRAM OVER LOADER + + INTERNAL LDRBLT + EXTERNAL USRREL + + PGADR=2 ;AC CONTAINING BEGINNING OF PROGRAM(LOA + +LDRBLT: PUSHJ PDP,IORELS + HRRZ TAC, PGADR (JDAT) ;ADD OFFSET TO SYMBOL TABLE P + SETZM PGADR(JDAT) ;THEN CLEAR SO SYSMAK WILL STILL WORK + HRRZ DAT,PROG + ADD DAT,TAC + ADDM TAC,JOBSYM(DAT) + HRL DAT,PROG + HLRZ TAC,JOBSA(DAT) + CAMLE TAC,USRREL ;IS HIGHEST DESTINATION STILL IN USER A + MOVE TAC,USRREL ;NO. MAKE SURE IT IS. + MOVSS DAT + ADD TAC,DAT + ADD DAT,[XWD 30,30] ;MOVE PROGRAM DOWN + BLT DAT,(TAC) + MOVE TAC,JOBDDT(JDAT) + MOVEM TAC,USRDDT + PUSHJ PDP,SETUSR + PUSHJ PDP,TTYFNU + MOVEI TAC1,LDRMES + PUSHJ PDP,MESPNT + JRST HOLD + +LDRMES: ASCIZ / +LOADER FINISHED +/ + + +INTERNAL STOP1, STOP2, CONT1, START1 + +PION=200 +PIOFF=400 + +;ROUTINE TO PUT CURRENT JOB IN IO WAIT +;ROUTINE TO STOP CURRENT JOB +;MAY BE CALLED FROM ANY LEVEL +;CALL; PUSHJ PDP,STOP0 +; RETURN ;RETURN HERE IMMEDIATELY, IF CALLED FRO +;PRIORITY CHANNEL THAN CLOCK. OTHERWISE RETURN WHEN JOB IS RUNABLE AG + +INTERNAL STOP0 + +STOP0: MOVE ITEM, JOB ;CURRENT JOB NUMBER + +;ROUTINE TO STOP ANY JOB FROM BEING SCHEDULED +;CALL: +; MOVE ITEM, JOB NUMBER +; PUSHJ PDP, STOP1 +; EXIT ;RETURN HERE IMMEDIATELY, IF CALLED FROM HIGHER +;PRIORITY CHANNEL THAN CLOCK, OTHERWISE RETURN WHEN JOB IC RUNABLE +;CALLED WHEN CONTROL C TYPED OR ON ERROR MESSAGES + +STOP1: MOVSI TAC, RUN + CONO PI, PIOFF ;DONE AT INTERUPT LEVEL HIGHER THAN DT + TDNN TAC, JBTSTS(ITEM) ;IS RUN BIT ON IN JOB STATUS + JRST STOPA ;NO + ANDCAB TAC, JBTSTS(ITEM) ;YES, SO CLEAR IT + CONO PI, PION + TLNE TAC, DTW ;WAITING TO USE DECTAPE + SOS DTREQ ;YES, REDUCE REQUEST COUNT + TLNE TAC, DCW ;DATA CONTROL + SOS DCREQ + TLNE TAC,MTW ;MAG TAPE + SOS MTREQ +STOPA: CONO PI, PION ;MAKE SURE PI ON + SKIPE SCHEDF ;IS CLOCK IN THE MIDDLE OF SCHEDULING + JRST STOP2 ;YES, MAKE SURE THIS JOB WONT RUN + CAME ITEM, JOB ;NO, IS THIS JOB CURRENT USER + POPJ PDP, ;NO + ;YES, MAKE CLOCK RESCHEDULE + +;ROUTINE TO CAUSE CLOCK TO RESCHEDULE +;CALL : +; PUSHJ PDP, STOP2 +; EXIT ;RETURN WHEN JOB RUNABLE AGAIN + +EXTERNAL PICLK + +STOP2: CONO PI, PIOFF ;PREVENT CLOCK INTERRUPT + SETOM STOPU ;SET FLAG FOR CLOCK ROUTINE + CONO PI,PICLK ;REQUEST CLOCK INTERRUPT AND TURN PI ON + ;CLOCK WILL TRAP IMMEDIATELY IF AT UUO + POPJ PDP, ;RETURN HERE WHEN JOB RUNABLE AGAIN + + +;SUBROUTINE TO SETUP A MONITOR JOB TO BE RUN +;JOB MUST HAVE CORE ASSIGNED +;CALL: MOVE ITEM, JOB NUMBER +; HRRI TAC1, ADDRESS OF MONITOR JOB(A SUBROUTINE) +; HRLI TAC1, RETURN ADDRESS WHEN JOB FINISHED +; PUSHJ PDP, MONJOB +; RETURN IMMEDIATELY IF CALLED FROM CLOCK LEV OR HIGHER + +;ALL ACS WILL BE SAVED FOR THE MONITOR JOB + +INTERNAL MONJOB +EXTERNAL JOBDAC,JOBDHI,JOBPDP,MJOBPD,JOBPDL,JBTADR + +MONJOB: PUSH PDP, TAC1 ;SAVE ARG. + HRRZ JDAT,JBTADR(ITEM) ;ADDRESS OF JOBS DATA AREA + MOVEI TAC1, JOBDAC(JDAT) ;SAVE 0-17 IN DUMP ACS + BLT TAC1, JOBDHI(JDAT) ;IN JOB DATA AREA + MOVSI TAC1,MJOBPD ;SET UP PD LIST IN JOB DATA AREA + HRRI TAC1, JOBPDL(JDAT) + HLRZ TAC, (PDP) ;WITH RETURN AS FIRST ITEM + PUSH TAC1, TAC + MOVEI TAC, JOBDAC(JDAT) + MOVEM TAC1,PDP(TAC) + POP PDP, TAC1 ;SET TO RUN + ANDI TAC1, 777777 ;FALL INTO STARTU + +;ROUTINE TO START A JOB AND LEAVE CONSOLE IN COMMAND MODE +;CALL: MOVE TAC1, START PC +; MOVE ITEM, JOB NUMBER +; PUSHJ PDP, STARTU +; RETURN IMMEDIATELY +INTERNAL STARTM +EXTERNAL TTYURC + +STARTM: PUSHJ PDP, START1 + JRST TTYURC + +;START WITH TTY IN USER MODE + +INTERNAL STARTU +EXTERNAL TTYSET + +STARTU: PUSHJ PDP,START1 + JRST TTYSET ;SET SCANNER TO CALL SETRUN WHEN + ;CR-LF AND INITIALIZE TTY + +INTERNAL CONTM +EXTERNAL TTYURC + +CONTM: JRST TTYURC + +;ROUTINE TO CONTINUE A JOB FROM COMMAND MODE +;CALL: MOVE ITEM, JOB NUMBER +; PUSHJ PDP, CONTU +; RETURN IMMEDIATELY +INTERNAL CONTU +EXTERNAL TTYURC + +CONTU: JRST TTYURC ;SET SCANNER TO CALL SETRUN WHEN CR-LF + + +;ROUTINE TO SET JOB STATE TO BE SCHEDULED TO RUN +;WITH SPECIFIED STARTING ADDRESS INCLUDING PC FLAGS +;CALL: MOVE TAC1,STARTING PC +; MOVE ITEM, JOB NUMBER +; MOVE JDAT, ADDRESS OF JOBS DATA AREA(THERE MUST BE ONE) +; PUSHJ PDP, START1 + ; EXIT RETURN HERE IMMEDIATELY + +START1: MOVE TAC,JOBPC(JDAT) ;GET OLD PC + MOVEM TAC1,JOBPC(JDAT) ;STORE NEW PC + TLNE TAC1,USRMOD ;IS NEW PC IN USER AREA? + TLNE TAC,USRMOD ;YES, WAS OLD PC IN USER AREA + JRST START2 ;YES,DUMP ACS ARE HIS + MOVSI TAC1,(JDAT) ;NO, UUO ACS ARE HIS + HRRI TAC1,JOBDAC(JDAT) ;MOVE THEM TO DUMP ACS + BLT TAC1,JOBDHI(JDAT) +START2: MOVSI TAC1,JERR+DCW+DTW+MTW+JIOW ;CLEAR WAIT BITS + ANDCAM TAC, JBTSTS(ITEM) ;IN JOB STATUS WORD + +;ROUTINE TO CONTINUE ANY JOB AT CURRENT PC +;CALL: +; MOVE ITEM, JOB NUMBER +; PUSHJ PDP, CONT1 +; EXIT RETURN IMMEDIATELY + +CONT1: POPJ PDP, + + +;ROUTINE TO SET JOB STATUS RUN BIT +;CALL: MOVE ITEM,JOB NUMBER +; PUSHJ PDP,SETRUN + + INTERNAL SETRUN +SETRUN: MOVSI TAC,RUN + IORB TAC,JBTSTS(ITEM) + TLNN TAC,DCW ;IS JOB WAITING FOR DATA CONTROL? + JRST CONT2 ;NO + AOSG DCREQ ;YES, INCREMENT REQUEST COUNT + SETOM DCAVAL ;AND SET DC AS AVAIL IF NOT IN USE +CONT2: TLNN TAC,DTW ;DECTAPE? + JRST CONT3 ;NO + AOSG DTREQ + SETOM DTAVAL +CONT3: TLNN TAC,MTW ;MAG TAPE? + JRST CONT4 + AOSG MTREQ + SETOM MTAVAL +CONT4: TLNE TAC,IOWS ;IO WAIT SATISFIED? + AOS IOCOMP ;YES + MOVEI TAC,QUANT1 ;SET TIME TO RUN FOR STRAIGHT QUEUE COM + HRRM TAC,JBTSTS(ITEM) ;RESPONSE IS FINISHED + SKIPE JOB ;IS NULL JOB RUNNING? + POPJ PDP, ;NO + JRST STOP2 ;YES, RESCHEDULE + + +,ROUTINE TO INIATE A WAIT FOR MAG TAPE. DECTAPE, AND DATA CONTROL AC + INTERNAL MTWAIT +MTWAIT: PUSH PDP,TAC1 + HRLZI TAC1,MTW +DVWAIT: PUSH PDP, TAC + MOVE TAC,JOB + IORM TAC1,JBTSTS(TAC) + PUSHJ PDP,STOP2 + POP PDP,TAC + POP PDP,TAC1 + POPJ PDP, + INTERNAL DTWAIT +DTWAIT: PUSH PDP,TAC1 + HRLZI TAC1,DTW + JRST DVWAIT + INTERNAL DCWAIT +DCWAIT: PUSH PDP,TAC1 + HRLZI TAC1,DCW + JRST DVWAIT + INTERNAL DVWAIT + + + +,DEC 06 00 EX JOB L PT PRE 02 SETIOD +,H.R. MORSE 64-12-26 +,CALLING SEQUENCE +, PUSHJ PDP, SETIOD +, EXIT ALWAYS RETURNS HERE +,SETS THEBIT (IOWS:=1) IN THE JOB STATUS WORD (JBTSTS) +,INFORMING THE SYSTEM THAT AN I/O WAIT HAS BEEN COMPLETED +,AND THE JOB IS READY TO RUN AGAIN. +,MONITOR INTERFACE +, STORAGE: 6 +, SYMBOLS SET/USED: +, ACCUMULATORS: DEVDAT U TAC S/U +, PDP U TAC1 S/U +, DEVICE DATA BLOCK: DEVCHR U +, SYSTEM DATA STORAGE: JBTSTS S/U +, JOB STATUS WORD: IOWS S + INTERNAL SETIOD + +SETIOD: AOS IOCOMP + LDB TAC,PJOBN + MOVSI TAC1, IOWS ;SET IO-WAIT SATISFIED BIT + IORM TAC1, JBTSTS(TAC) + MOVSI TAC1, JIOW ;CLEAR JOB IO-WAIT BIT + ANDCAM TAC1, JBTSTS(TAC) + SKIPN JOB ;IS NULL JOB RUNNING + JRST STOP2 ;YES, FORCE CLOCK TO RE-SCHED + POPJ PDP,; RETURN + + + +;SET CURRENT JOB AREA IN SYSTEM AREA + + INTERNAL SETUSR + +SETUSR: HRRI TAC,USRLO1 + HRLI TAC,USRLO + SETZM USRLO + BLT TAC,USRHI + MOVSI TAC,MJOBPD + HRRI TAC,JOBPDL + MOVEM TAC,USRPDP + MOVE JDAT,JOBDAT + HLR TAC,JOBSA(JDAT) + HRRM TAC,JOBFF(JDAT) + POPJ PDP, + + +,DEC 06 00 EX COM L PT PRE 02 WAIT1,WSYNC +,H.R. MORSE 64-12-26 +,CALLING SEQUENCE +, PUSHJ PDP, WAIT1 +, EXIT ALWAYS RETURNS HERE + +,IF THE DEVICE IS INACTIVE (IOACT=0), RETURNS TO EXIT. OTHERWISE, SET +,IOW:=1 AND ENTERS WAIT UNLESS IOACT BECOMES ZERO BEFORE THE +,JUMP IS MADE, IN WHICH CHASEIT SETS IOW:=0 AND RETURNS TO EXIT. +,ON LEAVING THE WAIT STAT, RETURNS TO EXIT. +,THIS ROUTINE PREVENTS THE STATE IOACT=0 AND IOW=1 FROM OCCURING +,CALLING SEQUENCE +, PUSHJ PDP, WSYNC +, EXIT ALWAYS RETURNS HERE +,SETS IOW:=1 AND ENTERS WAIT ROUTINE. RETURNS TO EXIT WHEN IOACT=0. +,MONITOR INTERFACE +, STORAGE: 13 +, ROUTINES CALLED: WAIT +, SYMBOLS SET/USED: +, ACCUMULATORS: DEVDAT U PDP U +, IOS S/U TAC S/U +, DEVICE DATA BLOCK: DEVIOS S/U +, IO STATUS WORD: IOACT U +, IOW S/U + + + INTERN WAIT1, WSYNC + +; WAIT1 WAITS UNTIL DEVICE IS COMPLETELY INACTIVE BEFORE RETURNING +WAIT1: MOVE IOS,DEVIOS(DEVDAT) + TRNN IOS, IOACT ;IS DEVICE ACTIVE? (IOACT=1?) + POPJ PDP,; RETURN + PUSHJ PDP,WSYNC; WAIT + JRST WAIT1 + +;WSYNC IS CALLED TO WAIT UNTIL SETIOD IS CALLED BY INTERRUPT SERVICE +;IE UNTIL CURRENT BUFFER ACTIVITY IS COMPLETED +;DEVDAT MUST BE SET UP + +PION=200 +PIOFF=400 + +WSYNC: REPEAT 0,< PUSH PDP, TAC ;MUST THESE BE SAVED? + PUSH PDP, TAC1 + PUSH PDP, DAT> + + MOVSI IOS, IOW + MOVSI AC1, JIOW + MOVE AC2, JOB + MOVEI AC3, IOACT + CONO PI, PIOFF ;TURN PI OFF + TDNN AC3, DEVIOS(DEVDAT) ;IS THE DEVICE ACTIVE? + JRST WSYNC1 ;NO + IORM IOS, DEVIOS(DEVDAT) ;YES, SET DEVICE IO-WAIT BIT + IORM AC1, JBTSTS(AC2) ;AND JOB IO-WAIT BIT + CONO PI, PION ;TURN PI ON + PUSHJ PDP, STOP2 ;STOP THIS USER BY FORCING CL + ;RETURN WHEN IO-WAIT FINISHED +WSYNC1: CONO PI, PION + ANDCAB IOS, DEVIOS(DEVDAT) ;CLEAR DEVICE IO-WAIT BIT +REPEAT 0,< POP PDP, DAT + POP PDP, TAC1 + POP PDP, TAC> + + POPJ PDP, + + END, diff --git a/src/s.mac b/src/s.mac new file mode 100644 index 0000000..5649e63 --- /dev/null +++ b/src/s.mac @@ -0,0 +1,189 @@ + XLIST + +DEFINE XP(A,B) ;SYSTEM PARAMETER + <A=B + INTERNAL A +> +,ACCUMULATORS + XP IOS,0; IO STATUS WORD + XP TAC,1; TEMPORARY + XP TAC1,2; TEMPORARY + XP PDP,3; C(LH)=NUMBER OF LOCATIONS LEFT IN PD LIST +, C(RH)=PUSHDOWN POINTER +REPEAT 0,< XP SUB,10 RETURN (PC) FOR ONE LEVEL SUBROUTINES +> + XP TEM,10 + XP ITEM,4; BYTE OR WORD POINTER. ITEM COUNT + XP DAT,5; DATA OR TEMPORARY + XP DEVDAT,6; C(LH)=UNUSED. +, C(RH)=ADDRESS OF DEVICE DATA BLOCK + XP JBUF,DAT; ADDRESS OF JOB BUFFER AREA=JBFADR + XP PROG,7; C(LH)=UNUSED +, C(RH)=ADDRES OF USER'S PROGRAM AREA + XP JDAT,11; C(RH)=ADDRESS OF JOB DATA +,ONLY 0 TO 10 NORMALLY REQUIRED +,FOR INTERRUPT SERVICE + XP BUFPNT,12; C(JBFADR 18-35) + XP BUFWRD,13; BIT 0=IOUSE +, BITS 1-17=BUFFER SIZE +, BITS 18-35=NEXT BUFFER ADDRESS + XP UUO,14; LAST UUO PROCESSED + XP AC1,15 ;TEMPORARY ACS(MORE TEMPORARY + XP AC2,16 ;THEN TAC,TAC1) + XP AC3,17 ; + , DEVICE DATA BLOCK NAMES + XP DEVNAM,0; NAME IN SIX BIT ASCII +, C(LH)=DEVICE MNEMONIC +, C(RH)=DEVICE NUMBER, LEFT JUSTIFIED + XP DEVCHR,1; CHARACTERISTIC +, BITS 0-8=JOB NUMBER +, ZERO VALUE IMPLIES NOT ASSIGNED +, BITS 9-11=PRIORITY CHANNEL FOR DEVICE + XP PICHN,100 ;RIGHTMOST BIT OF PI CHAN. FIELD +, BIT 12=UNUSED +, BIT 13=IORET. 0 IF DEVICE HAS A SHORT +, DISPATCH TABLE. 1 IF LONG + XP IORET,20 ;FOR RETRIEVABLE DEVICES. + ;SHORT DISPATCH TABLE =0. LONG = 1 +, BITS 14-17=JOB DEVICE CHANNEL NUMBER +, BITS 18-23=DEVICE NUMBER, BINARY +, BITS 24-35=BUFFER SIZE + XP DEVIOS,2; STATUS WORD. SEE BELOW + XP DEVSER,3; C(LH)=NEXT DEVICE DATA BLOCK +, C(RH)=DEVICE SERVICE DISPATCH TABLE +, DEVICE SERVICE DISPATCH TABLE ASSIGNMENTS + XP DRL,0; XXXDSP : RELEASE + XP DCL,1; XXXDSP +1: CLOSE + ;IMMEDIATE ADDRESS PART OF CLOSE UUO + XP CLSOUT,1 ;INHIBIT CLOSING OUTPUT + XP CLSIN,2 ;INHIBIT CLOSING INPUT + XP DOU,2; XXDSP +2: OUTPUT + XP DIN,3; XXXDSP +3: INPUT;SHORT DISPATCH TABLE + XP DEN,4; XXXDSP +4: ENTER + XP DLK,5; XXXDSP +5: LOOKUP + XP DDO,6; XXXDSP +6: DMPO + XP DDI,7; XXXDSP +7: DMPI + XP DSO,10; XXXDSP+10: SETO + XP DSI,11; XXXDSP+11: SETI + XP DGF,12; XXXDSP+12: GETF;LOGN DISPATCH TABLE + XP DEVMOD,4 ;BITS 6-11=LEFT HALF OF IMAGE MODE BYTE POINTER + ;BIT 35-J=1 IF MODE J IS LEGAL FOR THIS DEVICE + ;BIT 18 DEVICE ASSIGNED BY CONSOLE COMMAND + ;BIT 19 DEVICE ASSGINED BY PROGRAM (INIT) +;IRGHT HALT OF DEVICE MODE WORD + XP ASSCON,400000 ;ASSIGNED BY CONSOLE COMMAND ASSIGN + XP ASSPRG,200000 ;ASSIGNED BY PROGRAM(INIT UUO) +;LEFT HALF DEVICE CHARACTERISTICS(DEVCHR UUO) + XP DVOUT,1 ;OUTPUT DEVICE + XP DVIN,2 ;INPUT DEVICE + XP DVDIR,4 ;HAS A DIRECTORY + XP DVTTY,10 ;IS A TTY + XP DVMTA,20 ;IS A MAG TAPE(REWIND) + XP DVAVAL,40 ;1 IF DEVICE IS AVAILABLE TO THIS JOB + ;SET BY DEVCHR UUO + XP TTYUSE,10000 ;TTY DDB IN USE FLAG + XP TTYATC,20000 ;TTY ATTACHED TO JOB IF 1 + XP DVLPT,40000 ;IS A LPT (CARRIAGE CONTROL IN FORTRAN) + XP DVCDR,100000 ;IS A CARD READER(TRAILING SPACES FOR MACRO) + XP DVDIRIN,400000 ;DIRECTORY IN CORE IF 1 + + XP DEVLOG,5; LOGICAL NAME FOR JOB DEVICE + XP DEVBUF,6; C(LH)=OUTPUT BUFFER AREA DDRESS +, C(RH)=INPUT BUFFER AREA ADDRESS (JBFADR) + XP DEVIAD,7; C(LH)=PROG IN INDEX FIELD + XP DEVADR,DEVIAD +, C(RH)=CURRENT INPUT BUFFER ADDRESS + XP DEVOAD,10; C(LH)=PROG IN INDEX FIELD + XP DEVPTR,DEVOAD +, C(RH)=CURRENT OUTPUT BUFFER ADDRESS + XP DEVCTR,11; + , I/O STATUS WORD ASSIGNMENTS +,DATA MODES; BITS 32-35 + XP A,0; ASCII + XP AL,1; ASCII LINE + XP I,10; IMAGE + XP IB,13; IMAGE BINARY + XP B,14; BINARY + XP DR,16 ;DUMP BY RECORDS + XP D,17 ;DUMP ACROSS RECORDS +, STATUS BITS +,RIGHT HALF (USER) + XP IOWC,20; DON'T COMPUTE WORD COUNT + XP IOCON,40; CONTINUOUS (CONT=0) + XP IORDEL,100; READ AND DELETE + XP IONRCK,100; READ WITH NO. REREAD CHECK + XP IODEND,20000; DATA END ENCOUNTERED + XP IODERR,200000; DEVICE ERROR + XP IODTER,100000; DATA ERROR + XP IOIMPM,400000; IMPROPER MODE REQUESTED + XP IOBKTL,40000; BLOCK TOO LARGE + XP IOACT,10000; DEVICE ACTIVE +, LEFT HALFF (SYSTEM) + XP IOW,1; I/O WAIT + XP IOBEG,2; VIRGIN DEVICE + XP IODISC,400000; DISCONNECT REQUEST + XP IOFST,4; NEXT ITEM WILL BE THE FIRST ITEM OF A BUFFER + XP IOSTRT,10; IO READY TO START + XP IO,20; OUT=1, IN=0 + XP IOEND,40; SERVICE ROUTINE HAS TRANSMITTED LAST DATA + + +;LEFT HALF USRJDA (JOB DEVICE ASSIGNMENTS) UUO'S FOR THIS CHANNEL SINCE LAST INIT + XP INITB,400000; INIT + XP IBUFB,200000; INIT WITH INPUT BUFFER SPECIFIED + XP OBUFB,100000; INIT WITH OUTPUT BUFFER SPECIFIED + XP LOOKB,40000; LOOKUP + XP ENTRB,20000; ENTER + XP INPB,10000; INPUT + XP OUTPB,4000; OUTPUT + XP CLOSB,2000; CLOSE + ;RELEASE CLEARS THEM ALL +;CLOSE UUO BITS + XP CLSOUT,1 ;INHIBIT CLOSING OUTPUT + XP CLSIN,2 ;INHIBIT CLOSING INPUT + , JOB BUFFER AREA HEADER + XP JBFADR,0; BIT 0=1 IF THIS BUFFER RING HAS NEVER BEEN +, REFERENCED FROM THE USER'S PROGRAM BY +, AN INPUT OR OUTPUT COMMAND. +, BITS 1-17=UNUSED +, BITS 18-35=CURENT BUFFER ADDRESS + XP JBFPTR,1; BYTE POINTER TO NEXT BYTE -1 + XP JBFCTR,2; POSITIVE ITEM COUNT +, JOB BUFFER HEADER BIT 0=IOUSE + XP IOUSE,400000; 1 IF BUFFER IS FULL (OR BEING EMPTIED) +, BITS 1-17=BUFFER SIZE +, BITS 18-35=NEXT BUFFER ADDRESS + ,SYSTEM PARAMETERS + XP USRMOD,10000; USER MODE BIT IN APR FLAGS, PC WORD + XP IODONE,400000; +,JOB STATUS WORD (JBTSTS) + XP IOWS,400000; IO WAIT SATISFIED + XP RUN,200000; READY TO RUN OR IS RUNNING + XP JIOW,100000; JOB IN IO-WAIT STATE + XP DTW,40000; DECTAPE CONTROL WAIT + XP DCW,20000; DATA CONTROL WAIT + XP MTW,10000; MAG TAPE CONTROL WIAT + XP JNA,4000; JOB NUMBER ASSIGNED + XP JERR,2000; JOB ERROR(ILLEGAL MEM. ETC.) + + XP RUNABLE,RUN+JNA; STATUS BIT PATTERN FOR A JOB TO STAY RUNABLE + ;SPECIAL ABSOLUTE LOCATIONS IN LOWER MEMORY +;THESE ARE INTENDED TO BE EXAMINED AND CHANGED BY +;USING THE DATA SWITCHES BEFORE SYSTEM IS STARTED AFTER BEING LOADED +;ONLY TODAY AND BOOTIM NEED BE SET +;ALL OTHERS ARE ASSEMBLED IN AND SHOULD BE SET ONLY IF A CHANGE IS DESIRED + +XP DDTMEM,37 ;MEMORY SIZE FOR SYSTEM DDT AND SYSMAK ONLY +XP DDTSYM,36 ;SYSTEM DDT SYMBOL TABLE POINTER (USED TO BE 77) +, SYSTEM MACROS +DEFINE ADRCHK (A) +< EXTERNAL ADRCK +DEFINE ADRCHK (B) + <PUSHJ PDP,ADRCK + HRRZ TAC,B> + PUSHJ PDP,ADRCK + HRRZ TAC,A> + + + LIST + diff --git a/src/savget.mac b/src/savget.mac new file mode 100644 index 0000000..30d33fe --- /dev/null +++ b/src/savget.mac @@ -0,0 +1,178 @@ + +TITLE SAVGET- SAVE AND GET COMMANDS +SUBTTL T.HASTINGS 8-4-64 +;ROUTINE TO SET UP SAVE-GET DEVICE FILE-NAME TABLE +;CALLED BY COMMAND SETUP ROUTINES AND SAVE GET + +INTERNAL SGSET +EXTERNAL CTEXT1,SETUSR,HOLD,MONJOB +EXTERNAL CONMES,NOTENF,CPOPJ1 + +SGSET: PUSH PDP, TAC1 ;SAVE STARTTING ADDRESS(SAVJOB OR GETJOB) + PUSHJ PDP, CTEXT1 ;GET DEVICE NAME FROM COMMAND STRING + JUMPE TAC1,SGSET1 + MOVEM TAC1, 17(PROG) ;SAVE IN UUO AC AREA + PUSHJ PDP, CTEXT1 ;GET FILE NAME FROM COMMAND STRING + JUMPE TAC1,SGSET1 + MOVEM TAC1, 14(PROG) + POP PDP, TAC1 ;SCHEDULE MONITOR JOB + PUSHJ PDP, MONJOB + JRST CPOPJ1 ;SUPPRESS CR-LF PRINTED BY COMINI + +SGSET1: POP PDP,TAC1 + JRST NOTENF + + +;THIS JOB SAVES A JOB AREA ON RETRIEVABLE STORAGE +;THIS JOB RUNS IN EXEC. MODE AND CALLS IO ROUTINES DIRECTLY +;NO ATTTEMPT IS MADE TO SAVE STATUS OF IO DEVICES, JOBPDP, OR ACS +;IN FACT THE ONLY USEFUL THING WHICH MAY BE DONE WITH A JOB AREA +;AFTER IT HAS BEEN SAVED IS TO START EXECUTION OVER AT THE STARTING +;ADDRESS + +INTERNAL SAVJOB +EXTERNAL USRPDP, OUT, USRREL,JOBPFI,JOB41,JOBS41,THSDAT + +T=BUFPNT ;TEMPORARY ACS +T1=BUFWRD + +SAVJOB: JSP TAC, SG1 ;SET UP ACS AND ASSIGN DEVICE + MOVE T1,JOB41(JDAT) ;SAVE USR UUOI HANDLING JSR + MOVEM T1,JOBS41(JDAT) + MOVE T1,THSDAT ;SET DATE IN THIRD WORD + MOVEM T1,16(PROG) + PUSHJ PDP, DEN(T) ;ENTER FILE NAME IN DIRECTORY + JRST SAV4 ;DIRECTORY FULL + PUSHJ PDP, SETLST ;SET DUMP COMMAND LIST IN USER ARE + PUSHJ PDP, OUT ;DO AN OUTPUT + JSP TAC,SG2 + + ASCIZ /JOB SAVED +/ +SAV4: JSP TAC,SG2 + + ASCIZ /DIRECTORY FULL +/ + + + +;THIS JOB GETS A JOB AREA FROM RETRIEVABLE DEVICE +;THIS JOB RUNS IN EXEC. MODE AND CALLS IO ROUTINES DIRECTLY +;NO ATTEMPT IS MADE TO RESTORE STATUS OF IO DEVICES, PC, OR ACS +;JOBPC IS SET TO STARTING ADDRESS OF JOB +;CORE MUST ALREADY HAVE BEEN ASSIGNED AND THE FOLLOWING LOC. SETUP IN +;JOB DATA AREA: +;JOBPDP, JOBREL + +INTERNAL GETJOB +EXTERNAL USRREL, IN + +GETJOB: JSP TAC, SG1 ;SETUP ACS AND ASSIGN DEVICE + PUSHJ PDP, DLK(T) ;LOOKUP FILE NAME IN DIRECTORY + JRST GET2 ;NOT FOUND + PUSHJ PDP, SETLST ;SET DUMP COMMAND LIST IN USER ARE + PUSHJ PDP, IN ;DO AN INPUT + JSP TAC,SG2 + + ASCIZ /JOB SETUP +/ + +GET2: JSP TAC,SG2 + + ASCIZ /FILE NOT FOUND +/ + + +;ROUTINE TERMINATES SAVJOB AND GETJOB +;CLOSE, RELEASE, CHECK FOR ERRORS AND PRINT MESSAGE AND STOP JOB +;ADDRESS OF MESSAGE IN AC TAC + +EXTERNAL RELEA2, SETUSR, TTYFNU, WAIT1,JOBS41,JOB41 + +ERRORS=1B18+1B19+1B20+1B21 ;ERRORS CHECKED FOR IN IO TRANSMISSION + +SG2: PUSHJ PDP, WAIT1 + TRNE IOS, ERRORS ;ANY ERRORS? + JRST SG2A ;AN ERROR + PUSH PDP,TAC ;SAVE PRINT ADDRESS + PUSHJ PDP,RELEA2 ;RELEASE DEVICE + PUSHJ PDP,SETUSR ;SETUP COPY OF JOB AREA STORED IN SYSTE + MOVE TAC,JOBS41(JDAT) + ;RESTORE USER LOCATION 41 + MOVEM TAC,JOB41(JDAT) +SG4: PUSHJ PDP,TTYFNU ;FIND TELETYPE + POP PDP,TAC ;RESTORE PRINT MESSAGE ADDRESS +SG5: PUSHJ PDP,CONMES + JRST HOLD + +SG2A: JSP TAC,SG4 + + ASCIZ /TRANSMISSION ERROR +/ + + +;ROUTINE CALED BY SAVJOB AND GETJOBTO SETUP ACS +;AND ASSIGN DEVICE +;CALL JSP TAC, SG1 + +EXTERNAL JOBDAT, JOB, UINIT1, WAIT1, JOBADR, RESET + +SG1: HRLI PDP, -15 ;SET UP PD LIST IN UUO ACS + HRRI PDP, -1(PROG) + PUSH PDP, TAC ;SAVE RETURN ADDRESS + PUSHJ PDP, RESET ;DO RESET UUO + MOVEI UUO, D ;DUMP MODE + MOVE TAC, 17(PROG) ;DEVICE NAME + MOVEI PROG, 0 ;PRETEND RELOC. IS 0 + PUSHJ PDP, UINIT1 ;ASSIGN DEVICE + 0 ;IBF,OBF + JRST SGERRA ;NOT AVAILABLE + MOVE IOS, DEVIOS(DEVDAT) ;SETUP IOS + MOVEI UUO,14 ;REL.ADDRESS OF 4 WORD DIRECTORY ENTRY + MOVE PROG, JOBADR ;RESTORE PROG + MOVSI T,445560 ;SET FILE EXTENSION TO DMP + MOVEM T, 15(PROG) + SETZM 16(PROG) + MOVN T1,USRREL ;SET NEG. WORD COUNT FROM JOBREL + ADDI T1,JOBPFI ;DONT DUMP LOC. 0-JOBPFI + HRLI T1,JOBPFI + MOVSM T1,17(PROG) ;STORE IN 4TH WORD OF DICECTORY + MOVE T, DEVSER(DEVDAT) ;SETUP FOR DOING ENTRY OF LOO + POPJ PDP, + +SGERRA: MOVEI TAC,SGNAVL + PUSH PDP,TAC + JRST SG5 + +SGNAVL: ASCIZ /DEVICE NOT AVAILABLE +/ + + + +;ROUTINE TO SET DUMP MODE COMMAND LIST IN USER AREA + +EXTERNAL ANYRDX,RELEA2,TTYFNU + +SETLST: MOVE T, 17(PROG) ;4TH WORD FROM DIRECTORY + MOVEM T, 16(PROG) + SETZM 17(PROG) + HLRE T, T + ADD T, USRREL + JUMPL T, NOROOM + MOVEI UUO,16 ;DUMP MODE + POPJ PDP, + +NOROOM: PUSHJ PDP,RELEA2 + PUSHJ PDP,TTYFNU + JFCL + HLRE TAC, 16(PROG) ;PRINT NO. OF BLOCKS NEEDED + MOVNS TAC + LSH TAC, -12 + ADDI TAC, 1 + MOVEI TAC1, 12 + PUSHJ PDP, ANYRDX + JSP TAC,SG5 + + ASCIZ / 1K BLOCKS OF CORE NEEDED +/ + END, diff --git a/src/scnser.mac b/src/scnser.mac new file mode 100644 index 0000000..b5c756f --- /dev/null +++ b/src/scnser.mac @@ -0,0 +1,818 @@ +TITLE SCNSER - SCANNER SERVICE +SUBTTL TOM EGGERS 8-9-65 +EXTERN SETIOD, ADVBFE, ADVBFF, JBTADR, CLRBYT,STTYB1 +EXTERN SCNCHN, COMCNT, SCNSAV, SCNRET,STOP1, DEVLST,TTYTAB +INTERN SCNINI + +;TTYPTR=DEVOAD+1 +;TTYCTR=TTYPTR+1 +;TTYBUF=TTYCTR+1 +PION=200 ;TURN PI ON BIT +PIOFF=400 ;TURN PI OFF BIT +;SCNDDB ;NUMBER OF DEVICE DATA BLOCKS +;STTYBF7 ;SIZE OF TELETYPE BUFFER +CHREC=TEM ;AC FOR CHARACTER +VPOS=ITEM ;VERITICAL POSITION OF TELETYPE +HPOS=VPOS+1 ; HORIZONTAL POS. +DDB=DEVDAT +LINE=TAC1 ;AC THAT HOLDS SCANNER LINE NUMBER +SYNC=40000 ;1 WHEN A BUFFER IS READY TO TRANSFER +DETH=10000 ;1 IF TTY DETACHED AND OUTPUT WAITING +NIO=20000 ;STOP ALL IO +TOUT=IO ;OUTPUT IN PROGRESS +NCERR=IOBKTL ;CHARACTER LOST ON TYPE IN +DCHAR=177 ;DELETE CHARACTER +ECHOF=IODTER ;ECHO FAILURE OCCURED +TPMON=1000 ;IO IS FROM MONITOR +SP=2000 ;SPECIAL TELETYPE CHAR. IS BEING INTERPRETED +DDTM=100000 ;DDT MODE +T35=4000 ;TELETYPE HAS TAB,FF,VT,ETC. MECHANISM +USRB=100 ;TURN OFF TPMON WHEN OUTPUT IS FINISHED +USRBC=20000 ;RT HALF MONITOR IOS WORD. REMAIN IN MONITOR MODE +INTERNAL SCNINT,CTYINT,TTYUSR,TTYURC +ENTRY TTYDSP +EXTERN TSCNLN,TCONLN,MTTYLN,CPOPJ1 +EXTERN CPOPJ +EXTERN FSNCHN,SCNCHL,OUT,PUUOAC,PJOBN,PUNIT,PIOMOD +INTERNAL DDTGT,DDTRL,DDTIN,DDTOUT,TTYFND,TTYSTR,TTYFNU +EXTERNAL WAIT1,WSYNC,CLRBYT,JOB,CLDS,CLEN,TTYBFE,TTYBM1 +EXTERNAL UXIT,ADRCK,TTYSAV,DEVPHY,DEVOPR +EXTERNAL TTYCTR,TTYPTR,TTYBUF,TTYLST,MLTTYL,SETRUN,STTYBF,TTY0DB + +PHPOS: POINT 7,DEVIAD(DEVDAT),12 ;POINTER HORIZONTAL POSITION +PVPOS: POINT 5,DEVOAD(DEVDAT),12 ;POINTER VERITICAL POSITION +PLASTC: POINT 7,DEVOAD(DEVDAT),7 ;POINTER TO LAST CHARACTER OU +PSCHAR: POINT 6,DEVIAD(DEVDAT),5 ;POINTER TO ^C OR ^O + +TPCJOBN: POINT 9,TTYTAB(LINE),9 ;CONSOLE NUMBER FOR TTY + +SCNINI: MOVEI TAC,100000 + CONO TTY,0 ;SHUT DOWN CONSOLE TTY + CONO DCSA,4010 ;RELEASE XMITTER,RECEIVER + CONSZ DCSA, 1000 + CONO DCSA, 4000 + CONSZ DCSA, 10 + DATAI DCSB, TAC1 + SOJG TAC,.-4 + MOVEI TAC,SCNCHN + CONO TTY,3600(TAC) ;CLEAR TTY, ASSIGN CHANNEL + CONO DCSA,FSNCHN ;ASSIGN INTERRUPT CHANNELS + MOVSI TAC,MLTTYL ;NO. OF TTY DEV. DATA BLOCKS + MOVSI DAT,TTYUSE ;TTY DDB IN USE BIT + MOVSI IOS,TPMON+IOFST ;VIRGIN STATUS + MOVEI DDB,TTYLST ;FIRST TTY DDB ADDRESS +SCN1: TDNN DAT,DEVMOD(DDB) ;IS THIS TTY DDB IN USE? + SETZM DEVNAM(DDB) ;NO. SET NAME TO 0 + MOVEM IOS,DEVIOS(DDB) + SETZM TTYSAV(DDB) ;CLEAR USER MODE TTY STATUS WORD + ANDCAM DAT,DEVMOD(DDB) ;CLEAR USE BIT + HLRZ DDB,DEVSER(DDB) ;GET NEXT TTY DDB + AOBJN TAC,SCN1 + MOVSI TAC,MTTYLN ;SET DDB USE BITS FROM TRANSLATOR TABLE + MOVSI TAC1,TTYUSE +SCN2: SKIPE DDB,TTYTAB(TAC) + IORM TAC1,DEVMOD(DDB) + AOBJN TAC,SCN2 + POPJ PDP, + +;ROUTINE TO RETURN TTY TO VIRGIN STATE +;CALL: MOVE DDB, ADDRESS OF DEVICE DATA BLOCK +; PUSHJ PDP,TTYKIL + +INTERNAL TTYKIL + +TTYKIL: MOVE TAC,[XWD TTYUSE+TTYATC,ASSCON+ASSPRG] + ANDCAM TAC,DEVMOD(DEVDAT) ;CLEAR DDB USE BIT + SETZM DEVNAM(DEVDAT) ;CLEAR PHYSICAL NAME + SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME + JRST TTYDT1 + +;ROUTINE TO DETACH TTY FROM JOB +;CALL: MOVE DEVDAT,ADDRESS OF TTY DDB TO BE DETACHED + +INTERNAL TTYDET + +TTYDET: MOVE TAC,DEVMOD(DEVDAT) + TLZN TAC,TTYATC ;WAS TTY ATTACHED? + JRST TTYKIL ;NO, SO RETURN DDB TO POOL + MOVEM TAC,DEVMOD(DEVDAT) ;YES, JUST CLEAR ATTACH BIT +TTYDT1: LDB LINE,PUNIT + SETM TTYTAB(LINE) + POPJ PDP, + + +CCHAR: 0 ;HOLDS CHARACTER FOR CONSOLE TELETYPE +;CONTROL C - GO BACK TO MONITOR +;CONTROL 0 - SUPPRESS OUTPUT + +TTYURC: SKIPA TAC,[XWD USRB,USRBC] ;START JOB BUT REMAIN IN MON1 +TTYUSR: MOVSI TAC,USRB ;CAUSE TTY TO GO INTO + IORM TAC,DEVIOS(DEVDAT) ;USER MODE WHEN + POPJ PDP, ;OUTPUT FINISHES + +INTERNAL TTYSET + +TTYSET: MOVSI TAC,IOFST ;INITIALIZE USER TTY IOS WORD + MOVEM TAC,TTYSAV(DEVDAT) ;FOR START COMMAND + JRST TTYUSR + + +;ROUTINE TO ATTACH TTY TO A JOB +;CALL: MOVE DEVDAT,ADDRESS OF TTY DEVICE DATA BLOCK +; MOVE ITEM,JOB NUMBER +; PUSHJ PDP,TTYATT +; ERROR ;DEVDAT=DDB ADR OF OTHER TTY + ;IF ANOTHER ALREADY IS ATTACHED. +; OK RETURN ;DEVDAT, DAT AND TRANSLATOR TABLE SET + +INTERNAL TTYATT + +TTYATT: LDB LINE,PUNIT ;LINE NO. OF THIS TTY + MOVEI DEVDAT,TTYLST ;SEARCH FOR DDB THAT IS ATTACHED + SKIPA +TTYAT2: HLRZ DEVDAT,DEVSER(DEVDAT) + JUMPE DEVDAT,TTYAT4 + LDB TAC,PJOBN ;JOB NUMBER + HLL TAC,DEVMOD(DEVDAT) ;ATTACH AND USE BITS + TLNN TAC,DVTTY ;IS THIS STILL A TTY DDB? + JRST TTYAT4 ;NO, THIS MUST BE IJOB + CAIN ITEM,(TAC) ;JOB NUMBER THE ONE TO ATTACH? + TLNN TAC,TTYUSE ;YES, IS IT THE DETACHED ONE? + JRST TTYAT2 ;NO, KEEP LOOKING + TLNE TAC,TTYATC ;IS SOME TTY ALREADY ATTACHED? + POPJ PDP, ;YES, ERROR RETURN WITH DEVDAT SET + PUSH PDP,DEVDAT ;SAVE NEW DDB ADDRESS + MOVE DEVDAT,TTYTAB(LINE) + MOVE TAC,DEVMOD(DEVDAT) + PUSHJ PDP,TTYDET ;DETACH DDB FROM TTY + POP PDP,DEVDAT +TTYAT3: DPB ITEM,TPCJOBN ;STORE ATTACHED JOB NO. + DPB ITEM,PJOBN ;SET JOB NUMBER + MOVSI TAC,TTYATC ;SET ATTACHED BIT + PUSHJ PDP,TTYDAT ;SETUP OUTPUT BYTE + JRST SCNIN ;GO INITIALIZE DDB + +TTYAT4: MOVE DEVDAT,TTYTAB(LINE) ;RESTORE OLD DDB ADDRESS + JRST TTYAT3 + + +;ROUTINE TO SETUP AC DEVDAT TO ADDRESS OF TTY WHICH HAS TYPED A COMMA +;AC DAT TO BYTE POINTER TO OUTPUT BUFFER FOR COMMAND MESSAGE +;AC TAC TO BYTE POINTER TO COMMAND STRING +;AC ITEM TO JOB NUNMBER TTY IS ATTACHED TO +;CALL: PUSHJ PDP,TTYCOM +; NONE FOUND +; ACS SETUP + +INTERNAL TTYCOM + +TTYCOM: MOVSI LINE,MTTYLN + SKIPL TTYTAB(LINE) + AOBJN LINE,.-1 + JUMPG LINE,CPOPJ + MOVSI DEVDAT,400000 + ANDCAB DEVDAT,TTYTAB(LINE) + MOVSI DAT,440700 + ADDI DAT,TTYBUF(DEVDAT) + MOVE TAC,DAT + +;FALL INTO TTYJOB + +;ROUTINE TO RETURN IN AC ITEM JOB NUMBER WHICH TTY IS ATTACHED TO +;CALL: MOVE DEVDAT,ADDRESS OF TTY DEVICE DATA BLOCK + +INTERNAL TTYJOB + +TTYJOB: LDB LINE, PUNIT + LDB ITEM,TPCJOBN + JRST CPOPJ1 + + +;TELETYPE SCANNER UUO ROUTINES +;FOR DDT + +;DDTGT WAITS FOR OUTPUT TO COMPLETE THEN PUTS +;TELETYPE INTO DDT MODE + +DDTGT: PUSHJ PDP,TTYSR1 ;FIND DEVICE DATA BLOCK + MOVE IOS,DEVIOS(DEVDAT) + TLNN IOS,DDTM + TLNN IOS,IO ;OUTPUT IN PROGRESS + JRST DDTGT2 ;NO +; PUSHJ PDP,OUT ;MAKE SURE OUTPUT STARTED + PUSHJ PDP,WAIT1 ;WAIT FOR OUTPUT TO FINISH +DDTGT2: TLO IOS,DDTM ;SET DDT MODE BIT + MOVEM IOS,DEVIOS(DEVDAT) + JRST UXIT + +;RELEASE TELETYPE FROM DDT MODE +;MAKE SURE OUPUT IS FINISHED FIRST + +DDTRL: PUSHJ PDP,TTYSR1 ;FIND DEVICE DATA BLOCK + MOVE IOS,DEVIOS(DEVDAT) + TLNE IOS,IO ;OUTPUT IN PROGRESS? + PUSHJ PDP,WAIT1 ;YES, WAIT + MOVSI IOS,DDTM+SYNC + ANDCAM IOS,DEVIOS(DEVDAT) ;TURN OFF DDT BIT + JRST UXIT + + +;INPUT TO DDT +;CALL AC,[SIXBIT /DDTIN/] AC CONTAINS POINTER TO BUFFER AREA +;BUFFER AREA MUST BE 21 WORDS LONG + +DDTIN: PUSHJ PDP,TTYSR1 ;SET UP DEVDAT + MOVE IOS,DEVIOS(DEVDAT) + TLNE IOS,IO ;OUTPUT IN PROGRESS + PUSHJ PDP,WAIT1 ;YES, WAIT +DDTIN2: MOVE IOS,DEVIOS(DEVDAT) + TLNE IOS,IOEND ;BUFFER ALREADY? + JRST DDTIN3 ;YES + MOVEI IOS,IOACT + IORM IOS,DEVIOS(DDB) + PUSHJ PDP,WSYNC ;NO, WAIT + JRST DDTIN2 + +DDTIN3: MOVSI TAC,NIO+IOFST+DDTM + IORM TAC,DEVIOS(DEVDAT) ;STOP ALL IO + MOVE TAC,TTYPTR(DEVDAT) + PUSHJ PDP,CLRBYT ;CLEAR OUT REMAINING BYTES + SUBI TAC,TTYBM1(DEVDAT) ;NUMBER OF WORDS + LDB TAC1,PUUOAC ;PICK UP AC NUMBER + ADDI TAC1,(PROG) ;FIND REAL ADDRESS + MOVE TAC1,(TAC1) ;PICK UP POINTER + ADDI TAC1,(PROG) ;FIND REAL ADDRESS OF BUFFER + HRLI TAC1,TTYBUF(DEVDAT) + ADDI TAC,(TAC1) + BLT TAC1,(TAC) ;TRANSFER MONITOR BUFFER TO U + CLEARM 1(TAC) ;MAKE SURE THERE ARE SOME NUL + MOVSI TAC,NIO+IOEND + ANDCAM TAC,DEVIOS(DEVDAT) + JRST UXIT + + +;OUTPUT FROM DDT +;CALL AC,[SIXBIT /DDTOUT/] AC HAS POINTER TO DDT OUTPUT BUFFER + +DDTOUT: PUSHJ PDP,TTYSR1 + MOVE IOS,DEVIOS(DEVDAT) + TLNE IOS,IO ;OUTPUT IN PROGRESS? + PUSHJ PDP,WAIT1 ;YES, WAIT + MOVE IOS,[XWD NIO+TOUT+DDTM,IOACT] + IORB IOS,DEVIOS(DEVDAT) + LDB TAC,PUUOAC ;PICK UP AC NUMBER + HRLI TAC,JDAT ;CALC REAL ADDRESS OF AC + HRR TAC,@TAC ;PICK UP AC + HRLI TAC,@TAC ;CALC REAL ADDRESS OF DDT BUF + HRRI TAC,TTYBUF(DEVDAT) + HRRZM TAC,TTYCTR(DDB) ;A SUITABLY LARGE NUMBER + MOVE TAC1,TAC + BLT TAC,20(TAC1) ;MOVE DDT BUFFER TO MONITOR + HRLI TAC1,440700 + + MOVEM TAC1,TTYPTR(DEVDAT) + TLZ IOS,IOS+IOFST + PUSHJ PDP,TTYOU0 + JRST UXIT + + +TTYSR1: MOVE ITEM,JOB +TTYSRC: MOVSI LINE,MTTYLN + HRRZ DEVDAT,TTYTAB(LINE) + JUMPE DEVDAT,TTYF0 + LDB TAC,TPCJOBN + CAIN TAC,(ITEM) + POPJ PDP, ;FOUND + TTYF0: AOBJN LINE,TTYSRC+1 + MOVSI TAC,576062 ;SIXBIT /OPR/ + JRST DEVPHY ;SEARCH PHYSICAL DEVICE NAMES + ;AND RETURN OPERATOR TTY. + + ;ROUTINE TO FIND A TTY FOR A JOB + ;CALL: MOVE ITEM,JOB NUMBER + ; PUSHJ PDP, TTYFND + ; ERROR RETURN + ; RETURN WITH DEVDAT SET TO ADR OF DDB + ; AND DAT SET TO BYTE POINTER TO MONITOR OUTPUT BUFFER + + TTYFNU: MOVE ITEM,JOB + TTYFND: PUSHJ PDP,TTYSRC ;CALLED BY PUSHJ PDP,TTYFND + ; PUSHJ PDP,WSYNC + MOVSI TAC,NIO ;JOB NUMBER IN TAC1 + IORM TAC,DEVIOS(DEVDAT) + TTYDAT: MOVEI DAT,TTYBUF(DEVDAT) ;SETUP OUTPUT BYTE POINTER + HRLI DAT,440700 + POPJ PDP, + + TTYSTR: MOVE TAC,DAT + PUSHJ PDP,CLRBYT + SUBI TAC,TTYBM1(DEVDAT) + ANDI TAC,-1 + IMULI TAC,5 + MOVEM TAC,TTYCTR(DEVDAT) + MOVEI TAC,TTYBUF(DEVDAT) + HRLI TAC,440700 + MOVEM TAC,TTYPTR(DEVDAT) + MOVE IOS,DEVIOS(DEVDAT) + IOR IOS,[XWD NIO+IOFST,IODTER+IOBKTL] + ANDCM IOS,[XWD NIO+IOFST,IODTER+IOBKTL] + PUSHJ PDP,GCHAR + POPJ PDP, ;NOTHING TO TYPE + JRST TTYOU2 ;START OUTPUT + + ;DISPATCH TABLE; + + TTYDSP: POPJ PDP, ;RELEASE + JRST OUT ;CLOSE + JRST TTYOUT + TDZ IOS,[XWD TPMON,ECHOF+NCERR] ;INPUT + TRO IOS,IOACT + TLZE IOS, IOBEG + TLO IOS, IOFST + JRST MIS1 + + TTYOUT: TDO IOS,[XWD TOUT+IOFST,IOACT] + TDZ IOS,[XWD TPMON,ECHOF+NCERR] + TTYOU0: LDB HPOS,PHPOS + LDB VPOS,PVPOS + PUSHJ PDP, GCHAR + POPJ PDP, + DPB HPOS,PHPOS + DPB VPOS,PVPOS + TTYOU2: LDB LINE,PUNIT + CONO CLDS ;DISABLE CLOCK + CAIN LINE,TCONLN + JRST CTYOUT + CONO DCSA,0 ;DISABLE SCANNER + CONO DCSB, (LINE) + DATAO DCSA, CHREC + CONO DCSA,FSNCHN + DPB CHREC,PLASTC + TTYOU1: CONO CLEN ;RE-ENABLE CLOCK + MOVEM IOS,DEVIOS(DEVDAT) + POPJ PDP, + + CTYOUT: CONO TTY,0 ;DISABLE TTY + DATAO TTY,CHREC + MOVEM CHREC,CCHAR + CONO TTY,SCNCHN ;RE-ENABLE + JRST TTYOUT1 + + CTYINT: CONSO TTY,50 + JRST . + CONSO TTY,40 + JRST CTYOU1 + MOVEM TAC, CCHAR ;DONT ECHO RUBOUT + DATAI TTY, TAC + ANDI TAC, 177 + CAIN TAC, 177 + JRST CTYRUB ;IS A RUBOUT + DATAO TTY, TAC ;NOT, SO ECHO + EXCH TAC, CCHAR + JRST 12,@SCNCHL ;DISMISS INTERRUP + + CTYRUB: EXCH TAC, CCHAR + CTYOU1: JSR SCNSAV + MOVEI CHREC,SCNCHN + CONO TTY,200(CHREC) + MOVE CHREC,CCHAR + MOVEI LINE,TCONLN + JRST TCOMM + + SCNINT: CONSO DCSA,1010 + JRST . + JSR SCNSAV + CONSO DCSA,10 ;RECEIVER FLAG? + JRST SCNIN1 ;NO,XMITTER FLAG + CONI DCSB, LINE + DATAI DCSB, CHREC + TCOMM: ANDI CHREC, 177 + CAILE LINE,TCONLN ;CTY LINE OR LESS + JRST TYPX ;NO + SKIPE DDB,TTYTAB(LINE) ;DATA BLOCK ASSIGNED? + JRST INUSE ;YES + PUSHJ PDP,DDBSRC ;SEARCH FOR FREE TTY DEV. DATA BLOCK + JRST TYPX ;NONE FOUND, TYPE X + CLEARB HPOS,VPOS ;ASSUME TTY IS AT BEGIN OF FORM + CONSZ DCSA,700 ;FULL DUPLEX? + CAIN LINE,TCONLN ;CTY? + JRST INJEST ;NO, SWALLOW CHAR + JRST TYP1 + + +;ROUTINE TO SEARCH FOR FREE TTY DEV DATA BLOCK +;CALL: MOVE LINE,TTY LINE NO +; PUSHJ PDP,DDBSRC +; NONE FOUND +; RETURN DEVDAT, LINE SET + +DDBSRC: MOVSI IOS,MLTTYL ;NO. OF TTY DDB + MOVEI DEVDAT,TTYLST ;ADDRESS OF FIRST DDB + SKIPA TAC,[XWD TTYUSE+TTYATC,ASSPRG+ASSCON] + HLRZ DEVDAT,DEVSER(DEVDAT) + TDNE TAC,DEVMOD(DEVDAT) ;USE.ATTACH, AND BOTH ASSIGN + AOBJN IOS,.-2 + JUMPGE IOS,CPOPJ ;DDB FOUND? + MOVE IOS,[XWD TPMON+IOFST,IOACT] + MOVE TAC,[XWD TTYUSE,ASSCON] + +;INITIALIZE TTY DEVICE DATA BLOCK(CALLED FROM TTYATT TOO) + +SCNIN: IORM TAC,DEVMOD(DEVDAT) + DPB LINE,PUNIT ;SET LINE NO. IN DDB + MOVSI TAC,646471 ;SIXBIT /TTY/ + MOVEM TAC,DEVNAM(DEVDAT) + MOVE TAC,[POINT 6,DEVNAM(DEVDAT),17] + PUSH PDP,LINE ;SAVE LINE NO. + TRNN LINE,70 ;IS THERE A HIGH ORDER OCTAL DIGIT? + JRST SCNIN0 ;NO + ROT LINE,-3 ;YES,CONVERT TO SIXBIT + ADDI LINE,20 + IDPB LINE,TAC ;STORE HIGH ORDER SIXBIT DIGIT + LSH LINE,20 ;IN PHYSICAL NAME +SCNIN0: ADDI LINE,20 + IDPB LINE,TAC ;STORE LOW ORDER DIGIT + POP PDP,LINE + + HRRM DEVDAT,TTYTAB(LINE) ;SET LINE NO. IN TRANSLATOR T + MOVSI TAC,436471 ;SIXBIT /CTY/ + CAIN LINE,TCONLN ;IS THIS CONSOLE TTY? + MOVEM TAC,DEVNAM(DEVDAT) ;YES, SET NAME TO CTY + MOVE TAC,DEVNAM(DEVDAT) + SKIPN DEVOPR ;IS THIS FIRST CHAR. TYPED BY ANYONE? + MOVEM TAC,DEVOPR ;YES,SET THIS TTY AS OPERATOR TTY + JRST CPOPJ1 ;SUCCESSFUL RETURN + +SCNIN1: DATAI DCSA,LINE ;GET LINE NO. FROM FULL DUPLEX + MOVEI TAC,FSNCHN + CONO DCSA,4000(TAC) ;RELEASE XMITTER SCANNER + SKIPE DDB,TTYTAB(LINE) ;DATA BLOCK ASSIGNED? + CAIL LINE,TCONLN ;LINE NO. TOO LARGE? + JRST SCNRET ;GO AWAY + LDB CHREC,PLASTC + JRST INUS1 + + +TYPX: CAIN CHREC,"X" ;CHARACTER RECEIVED AN X? + JRST SCNRET ;YES, GO AWAY + MOVEI CHREC,"X" + CAIE LINE,TCONLN + JRST TYPX1 + DATAO TTY,CHREC + JRST SCNRET +TYPX1: CONSO DCSB,(LINE) + DATAO DCSA,CHREC ;TYPE AN X + JRST SCNRET + +INUSE: CONSZ DCSA,700 ;FULL DUPLEX? + CAIN LINE,TCONLN + JRST INUS1 + CONO DCSB,(LINE) + DATAO DCSA,CHREC + DPB CHREC,PLASTC + JRST SCNRET + +INUS1: MOVE IOS,DEVIOS(DDB) + LDB PROG,PJOBN + HRRZ PROG,JBTADR(PROG) + LDB HPOS,PHPOS + LDB VPOS,PVPOS + LDB TAC, TTYPTR(DDB) + TLNE IOS, SP + JRST SIM35 +INUS2: TLNN IOS,TOUT + JRST INJEST + CAME TAC, CHREC + JRST ECHO +INUS3: PUSHJ PDP, GCHAR + JRST LEAV0 +TYPE: CAIN LINE,TCONLN + JRST CTSER3 +TYP1: CONO DCSB,(LINE) + DATAO DCSA, CHREC + DPB CHREC,PLASTC ;SAVE CHARACTER FOR FULL DUPLEX +LEAVE: MOVEM IOS, DEVIOS(DDB) +LEAV1: DPB HPOS,PHPOS + DPB VPOS,PVPOS + JRST SCNRET +LEAV0: MOVEM TAC,DEVMOD(DEVDAT) ;IS TTY ATTCHED? + TLNN TAC,TTYATC + PUSHJ PDP,TTYKIL ;NO,RETURN TO POOL + JRST LEAV1 + +CTSER3: DATAO TTY,CHREC + MOVEM CHREC,CCHAR + JRST LEAVE + + +ECHO: TDO IOS,[XWD SP,ECHOF] + TLZ IOS,TOUT + MOVEI CHREC,177 ;SEND A RUBOUT AFTER ECHO CHE + JRST TYPE + +SIM35: MOVSI TAC,-SCTABL + MOVE HPOS, SCTAB(TAC) + CAIE CHREC,(HPOS) + AOBJN TAC, .-2 + LDB HPOS,PHPOS + JUMPGE TAC, ECHO + MOVS TAC, SCTAB(TAC) + TLNE TAC, 140 ;SPACING CHARACTER + AOJA HPOS,(TAC) ;YES + JRST (TAC) ;NO + +SCTAB: XWD SPACE," " + XWD SIMLF,12 + XWD SIMRO,177 ;RUBOUT + XWD SIMRO,134 ;BACK SLASH + XWD ASC3,15 ;CR + XWD SIMVA,"^" + XWD DELET1,"C" + XWD DELET1,"O" + XWD SIM4,"Z" + XWD DELET1,"U" +SCTABL=.-SCTAB + +SPACE: TRNN HPOS,7 ;FINISHED SIMULATING TABS(8) + JRST SIM4 ;YES + JRST TYPE ;NO, SEND ANOTHER SPACE + +SIMVA: LDB CHREC,PSCHAR + TRO CHREC, 100 + JRST TYPE + +SIMLF: SOJG VPOS,TYPE ;SEND ANOTHER LINE-FEED +SIM4: TLZ IOS,SP + TLNN IOS,TOUT + JRST INJ4 + JRST INUS3 + +SIMRO: TLZA IOS, SP +MOD35: TRC IOS,T35 + JRST LEAVE + + +INJEST: CAIN CHREC,3 ;CONTROL C? + JRST INJ5 + TLZE IOS,IOFST ;IF FIRST CHARACTER IN, INITIALIZE + PUSHJ PDP,SETMB1 + TLNE IOS,DDTM ;1 DDT CHAR RESTARTS PROGRAM + TLO IOS,SYNC+IOEND ;YES, TERMINATE BUFFER + CAIN CHREC,17 ;COTNROL O? + JRST INJ6 ;YES, FLUSH OUTPUT + TRZE IOS,ECHOF ;ECHO HAS OCCURRED? + JRST INJ7 ;YES, NOW RESUME OUTPUT + TRNE IOS,NCERR + JRST LEAVE + CAIE CHREC,033 ;NEW NEW ALT-MODE? + CAIN CHREC,176 ;NEW ALT-MODE? + MOVEI CHREC,175 ;CHANGE TO OLD + CAIN CHREC,20 ;CONTROL P TAB SIMULATION FLIP FLOP SWI + JRST MOD35 + TLNE IOS,DDTM + JRST INJ25 ;SENT RUBOUTS ON TO DDT + CAIN CHREC,177 ;RUBOUT + JRST DELET +INJ25: DPBI CHREC, TTYPTR(DDB) + SOS TAC, TTYCTR(DDB) + CAIL CHREC, 40 + CAILE CHREC, 137 + JRST SPCIN + ADDI HPOS,1 +INJ4: PUSHJ PDP, MOVBUF + JRST LEAVE + +SETMB1: HRRI TAC, TTYBUF(DDB) + HRLI TAC, 440700 + MOVEM TAC, TTYPTR(DDB) + HRLS TAC + AOS TAC + SETZM TTYBUF(DDB) + BLT TAC,TTYBFE(DDB) ;CLEAR OUT MONITOR BUFFER + MOVEI TAC, 111 + MOVEM TAC, TTYCTR(DDB) + POPJ PDP, + + +INJ5: PUSHJ PDP,SETMB1 + PUSH PDP,ITEM ;^C + LDB ITEM,TPCJOBN ;YES, GET USER CONSOLE NUMBER + SKIPE ITEM + PUSHJ PDP,STOP1 ;SHUT OFF JOB + POP PDP,ITEM + TLNN IOS,TPMON ;SAVE STATUS OF TTY + MOVEM IOS,TTYSAV(DDB) ;WHEN IT WAS IN USER MODE + MOVE IOS,[XWD TPMON+IOFST,IOACT] + MOVEI TAC,"C" + JRST INJ61 + +INJ6: PUSH PDP,TAC1 ;^O + TLZE IOS,IOW + PUSHJ PDP,SETIOD + POP PDP,TAC1 + TLNE IOS,TPMON+DDTM + JRST INJ6A + TLNE IOS,TOUT + PUSHJ PDP,ADVBFE +INJ6A: TLOA IOS,IOFST + JRST .-2 + TRZ IOS,ECHOF + TRO IOS,IODEND + MOVEI TAC,"0" +INJ61: DPB TAC,PSCHAR + MOVEI CHREC,"^" + JRST SPC21 + +INJ7: TLO IOS,TOUT + JRST INUS3 + + +SPCIN: MOVSI TAC,-SCITL ;SEARCH FOR SPECIAL INPUT CHAR + MOVE TAC1,SCITAB(TAC) + CAIE CHREC,(TAC1) ;FOUND? + AOBJN TAC,.-2 ;NO + HLR TAC,TAC1 ;SAVE DISPATCH ADDRESS + LDB LINE,PUNIT ;RESTORE TAC1 + JUMPL TAC,(TAC) + JRST INJ4 ;CHARACTER NOT FOUND + +SCITAB: XWD SPCCR,15 ;CR + XWD ASC1,12 ;LF + XWD SPC2,11 ;HORIZ TAB + XWD SPVT,13 ;VT + XWD SPFF,14 ;FF + XWD SPC4A,25 ;^U + XWD SPC7,32 ;^Z + XWD ASC1, 175 ;ALT MODE +SCITL=.-SCITAB + +SPCCR: MOVEI HPOS,0 + JRST ASC3 + +SPFF: SKIPA VPOS,[10] +SPVT: MOVEI VPOS,4 + TLNN IOS,T35 ;DONT SIMULATE FOR A MOD 35 + TLO IOS,SP +ASC1: LDB TAC,PIOMOD + TLNN IOS,TPMON + CAIN TAC,AL + TLO IOS,SYNC +ASC2: TLNN IOS,SP + JRST INJ4 +ASC3: MOVEI CHREC,12 ;LINE FEED + JRST TYPE + +SPC4A: PUSHJ PDP,SETMB1 + MOVEI TAC,"U" + JRST INJ61 + +SPC2: TRNE IOS,T35 + JRST LEAVE + MOVEI CHREC," " +SPC21: TLO IOS,SP + JRST TYPE + +SPC7: TLO IOS,SYNC+IOEND+SP ;^Z + MOVEI TAC,"Z" + JRST INJ61 ;ECHO ^Z + + +DELET: MOVE TAC,TTYCTR(DDB) + CAIL TAC,111 + JRST DELET1 + + MOVSI TAC,070000 + ADD TAC,TTYPTR(DDB) + TLNE TAC,400000 + ADD TAC,[XWD 347777,-1] + MOVEM TAC,TTYPTR(DDB) + AOS TTYCTR(DDB) + + MOVEI CHREC,334 ;BACK SLASH +DELET2: TLO IOS,SP + JRST TYPE + +DELET1: MOVEI VPOS,1 + MOVEI CHREC,15 + JRST DELET2 + + +;ROUTINE TO GET NEXT CHARACTER FROM OUTPUT BUFFER +;CALL: PUSHJ PDP,GCHAR +; NO MORE LEFT +; RETURN WITH CHAR. IN CHREC + +GCHAR: TLZN IOS, IOFST + JRST GCHAR3 +GCHAR1: HRRZ TAC,DEVOAD(DDB) + ADD TAC, [XWD 000700+PROG,1] + MOVEM TAC, TTYPTR(DDB) + HRRZ TAC, @TAC + IMULI TAC, 5 + MOVEM TAC,TTYCTR(DDB) +GCHAR3: SOSGE TTYCTR(DDB) + JRST GCHAR5 + LDBI CHREC, TTYPTR(DDB) + JUMPE CHREC, GCHAR7 + CAIN CHREC, 11 + JRST HT + CAIN CHREC, 12 + AOJA VPOS,GCH3 + CAIE CHREC, 13 + CAIN CHREC, 14 + JRST VTFF + ADDI HPOS,1 + CAIN CHREC,15 + MOVEI HPOS,0 +GCH3: AOSA (PDP) +GCH3A: MOVE IOS,TTYSAV(DDB) ;RESTORE STATUS TO USER +GCHAR4: MOVEM IOS,DEVIOS(DDB) + POPJ PDP, + +GCHAR7: TLNN IOS,DDTM ;DDT BUFFER TERMINATED WITH NULL + JRST GCHAR3 +GCHAR5: PUSH PDP,TAC1 + TLZE IOS, IOW + PUSHJ PDP, SETIOD + POP PDP,TAC1 + TLNN IOS,TPMON+DDTM + PUSHJ PDP, ADVBFE + TLOA IOS,IOFST + JRST GCHAR1 + TDZ IOS,[XWD IO,IOACT] + TLZN IOS,USRB + JRST GCHAR4 + TLZ IOS,TPMON + LDB LINE,PUNIT ;GET LINE NO. + PUSH PDP,ITEM + LDB ITEM,TPCJOB + PUSHJ PDP,SETRUN + POP PDP,ITEM + TRZN IOS,USRBC + JRST GCH3A + MOVSI IOS,TPMON+IOFST + JRST GCHAR4 +HT: TRNE IOS,T35 + AOJA HPOS,GCH3 + TLO IOS,SP +SPOUT: MOVEI CHREC,240 + JRST GCH3 + +VTFF: TRNE IOS,T35 + AOJA VPOS,GCH3 + MOVEI CHREC,12 + TLO IOS,SP + JRST GCH3 + +MOVBUF: TLNE IOS,DDTM + JRST MOV3 ;DONT ADVANCE BUFFERS FOR DDT MODE + TLZN IOS,SYNC + SKIPG TTYCTR(DDB) + JRST .+2 + JRST MIS1 + TLNE IOS, TPMON + JRST MOVMON + MOVE TAC,DEVIAD(DDB) ;IS TTY EXPECTING INPUT? + TRNE TAC,-1 + SKIPGE @TAC ;OR IS NEXT BUFFER READY? + JRST MIS ;NO + PUSH PDP,TAC1 + MOVE TAC,TTYPTR(DDB) + PUSHJ PDP,CLRBYT + MOVE TAC,DEVIAD(DDB) + PUSHJ PDP,ADRCK ;MAKE SURE BUFFER WILL FIT + HRRZI TAC,STTYB1(TAC) ;LENGTH+1 + + MOVEI TAC,@DEVIAD(DDB) + ADDI TAC,2 + HRR CHREC,TAC + ADDI TAC,STTYBF + HRLI CHREC,TTYBUF(DDB) + BLT CHREC,-1 (TAC) + + MOVEI TAC,111 + SUB TAC, TTYCTR(DDB) + ADDI TAC,4 + IDIVI TAC,5 + MOVEI CHREC,@DEVIAD(DDB) + MOVEM TAC,1(CHREC) + PUSHJ PDP, ADVBFF + JRST .+1 + TLOA IOS,IOFST +MOV3: PUSH PDP,TAC1 + TLZE IOS, IOW + PUSHJ PDP, SETIOD + POP PDP,TAC1 + TRZA IOS,NCERR+IOACT +MIS: TRO IOS, NCERR +MIS1: MOVEM IOS, DEVIOS(DDB) + POPJ PDP, +MOVMON: MOVSI TAC,400000 + IORM TAC,TTYTAB(LINE) ;SET BIT FOR MONITOR + TLO IOS,IOFST + MOVEI TAC,15 + DPB TAC,TTYPTR(DDB) ;FORCE A CARRIAGE RET INTO MONITOR COMM + AOS COMCNT + POPJ PDP, + + END, diff --git a/src/syscon.mac b/src/syscon.mac new file mode 100644 index 0000000..43edf8d --- /dev/null +++ b/src/syscon.mac @@ -0,0 +1,286 @@ +TITLE SYSCON - UUO HANDLER +SUBTTL 8-9-65 +EXTERNAL CLOSE1,ILLINS,IN,JOBAC,JOBADR,JOBDAT +EXTERNAL MTAPE1,OUT,RELEA1,UINBF,UINIT,UOUTBF +EXTERNAL USRJDA,USRSAV,USTATO,USTATS,USTATZ +EXTERNAL ERROR,UUOERR,CLDS,CLEN +EXTERNAL IOIERR,MJOBPD,JOBPDL,WAIT1,USRREL,PUUOAC +EXTERNAL JOBPDL,MJOBPD,USETST + + + +, DEC 06 00 EX UUO L PT PRE 06 UUO HANDLER +, 3/10/65 +, ALL UUOS DROP THEMSELVE IN REAL LOCATION 40, AND TRAP +, TO 41. THE UUO HANDLER SHUFFLES THE UUO OFF TO THE USERS +, 40,41, IF IT IS NOT A SYSTEM UUO. +, SYSTEM UUOS FALL INTO THREE CLASSES, HANDLED DIFFERENTLY +, (1) SYSTEM FUNCTIONS: LOAD ACS PDP, PROG, AND DISPATCH TO THE +, FUNCTION. +, (2) DEVICE INDEPENDENT I/O UUO: ALSO LOAD ACS DEVDAT AND IOS +, AND GO THE THE SYSTEM FUNCTION. +, (3) DEVICE DEPENDENT I/O UUOS: DO (1) AND (2), THEN DISPATCH +, THROUGH THE TABLE WHOSE ADDRESS IS IN THE RIGHT HALF OF DEVSER(DEVD +, CONTROL MAY ALWAYS BE RETURNED BY EXECUTING A +, JRST UXIT +, WHICH WILL RESTORE THE ACS, ARP BITS, AND RETURN. +, THE UUO HANDLER IS PURE IF THE FOLLOWING RESTRICTIONS ARE OBSERVED. +, RESTRICTIONS: UUOS CANNOT BE CALLED BY INTERRUPT SERVICE ROUTINES. +, MONITOR INTERFACE +, STORAGE: 89 +, ROUTINES CALLED: ILLINS, ADRCK, EXCLK, UUOH, SETIOS,UUOUSR +, UUOS CALLED: CALL, INIT, RELEAS, CLOSE, OUTBUF, INBUF +, STATS, STATO, STATZ, OUTPUT, INPUT +, DEVICE DEPENDENT: DEN, DLK, DSO, DSI, DGF +, SYMBOLS SET/USED: +, ACCUMULATORS: POP S/U TAC S/U +, PROG S/U TAC1 S/U +, SUB S +, SYSTEM PARAMETERS: UIO U +, USYS U +, USYSN U +, JOB AREA: JOBAC U JOBDAT U +, JOBPDP U +, SYSTEM ADDRESSES: CLK S/U +, JOBADR U +, USRLEV S/U +, DEVICE DATA BLOCK: DEVSER U +, INTERNAL ADDRESSES: 40 S/U +, UUO0 S/U +, UUSAV S/U + + + +INTERNAL UUO0 + +UUO0: 0 + EXCH TAC,40 ;SAVE TAC; PICK UP UUO + MOVEM 17,USRSAV ;SAVE 17 + TLNE TAC,77000 ;0 UUO IS ILLEGAL + TLNE TAC,740000 ;UUO FOR SYSTEM? + JRST UUOSYS ;YES + MOVE 17,JOBADR ;GET JOB AREA ADDRESS + MOVEM TAC,40(17) ;STORE UUO IN USERS 40 + HRRZ TAC,41(17) ;PICK UP ADR OF USERS JSR + JUMPE TAC,UUOSYS ;IF ADDRESS=0,ILLEGAL USER UU + HLL TAC,UUO0 ;PICK UP PROCESSOR FLAGS FOR + TLNN TAC,USRMOD ;WAS UUO FROM USER? + JRST UUOSYS ;NO, ILLEGAL NUUO FROM SYSTEM + MOVEI 17,(TAC) ;17 NOW HAS REL. ADR. OF USER + CAMG 17,USRREL ;DONT INCREMENT RETURN IF PC + HRRI TAC,1(TAC) ;INCREMENT PC + EXCH TAC,UUO0 ;SET UP RETURN TO USER, PICK + ;UP USERS FLAGS,PC + CAMLE 17,USRREL ;LEGAL MEMORY? + JRST .+3 ;NO. DONT STORE PC + ADD 17,JOBADR ;MAKE REL. ADR. INTO ABS. ADR + MOVEM TAC,(17) ;STORE FLAGS AND PC LIKE JSR + MOVE TAC,40 ;RESTORE TAC + MOVE 17,USRSAV ;RESTORE 17 + JRST 2,@UUO0 ;RETURN TO USER + + + +UUOSYS: EXCH TAC,40 ;RESTORE TA. RESTORE THE UUO + MOVE 17,UUO0 ;PICK UP PROCESSOR FLAG + TLNN 17,USRMOD ;SYSTEM UUO FROM SYSTEM? + JRST UUOSY1 ;YES + MOVE 17,JOBADR ;NO. PICK UP ADR. OF USER PRO + MOVEM 16,16(17) ;STORE AC16 IN USER 16 + HRRZ 16,17 ;SET UP BLP POINTER + BLT 16,15(17) ;MOVE REAL ACS TO USER AREA + MOVE 0,USRSAV ;MOVE USER 17 TO USERS AREA + MOVEM 0,17(17) + + MOVE JDAT,JOBDAT ;LOAD UP JOB DAT AREA ADDRES + MOVSI PDP,MJOBPD ;LOAD UP PUSH DOWN AC AND + HRRI PDP,JOBPDL(JDAT) ;MAKE ABSOLUTE PATH + SKIPA PROG,17 ;PROGRAM BASE ADDRESS +UUOSY1: MOVE 17,USRSAV ;RESTORE AC17 IF UUO FROM SYS + PUSH PDP,UUO0 ;SAVE RETURN ON PUSH DOWN LIS + MOVE UUO,40 ;GET THE UUO INTO AC(UUO) + LDB TAC1,[POINT 9,UUO,8] ;PICK UP UUO OP COD + CAIL TAC1,100 ;ILLEGAL INSTRUCTION? + JRST ILLINS ;YES + CAIGE TAC1,40 ;SYSTEM UUO? + JRST UUOERR ;NO. ILLEGAL + LDB TAC,PUUOAC + MOVE DEVDAT,USRJDA(TAC) ;GET DDB + CAIGE TAC1,100-UUOT2L ;AN IO UUO? + JRST UUODSP ;NO + CAIE TAC1,70 ;CLOSE AND RELEASE ARE ALWAYS LEGAL + CAIN TAC1,71 + JUMPE DEVDAT,UXIT + JUMPE DEVDAT,IOIERR ;CHANNEL MUST BE ASSIGNED + MOVE IOS,DEVIOS(DEVDAT) ;GET DATA BLOCK STA + JRST UUOT2-77+UUOT2L-1(TAC1) ;DISPATCH + +UUODSP: CAIGE TAC1,40+UUOT1L ;LEGAL SYSTEM UUO? + JRST UUOT1-40(TAC1) ;YES. DISPATCH + JRST UUOERR + + +UUOT1: JRST UCALL ;40 + JRST UINIT +;ADD NON IO UUOS HERE + +UUOT1L=.-UUOT1 + +UUOT2: +;ADD IO UUOS HERE + JRST USETST + JRST USTATO + JRST USTATS + JRST USTATZ + JRST UINBF + JRST UOUTBF + JRST IN + JRST OUT + JRST CLOSE1 + JRST RELEA1 + JRST MTAPE1 + JRST UDGF + JRST UDSI + JRST UDSO + JRST UDLK + JRST UDEN ;77 +UUOT2L=.-UUOT2 + + +,DISPATCH TO SPECIAL ROUTINE +DEFINE DSPT(A) +<U'A: PUSHJ PDP,UDSP +JRST A(TAC) +> +UDSP: MOVE TAC,DEVSER(DEVDAT) + MOVE TAC1,DEVCHR(DEVDAT) + TLNN TAC1,IORET + MOVEI TAC,NRTOSP-4 ;IGNORE THESE CALLS FOR NON- + POPJ PDP, +NRTOSP: JRST CUXIT1 ;SKIP RETURN + JRST CUXIT1 ;SKIP RETURN + JSP DAT,ERROR ;DUMP0 + JSP DAT,ERROR ;DUMP1 + JRST UUOERR ;USETO + JRST UUOERR ;USETI + JRST UUOERR ;GETF +UDEN: PUSHJ PDP,WAIT1 + TLO IOS,IOBEG + TRZ IOS,776000 + MOVEM IOS,DEVIOS(DEVDAT) + LDB TAC,PUUOAC + TLO DEVDAT,ENTRB + TLZ DEVDAT,CLOSB + HLLM DEVDAT,USRJDA(TAC) + PUSHJ PDP,UDSP + JRST DEN(TAC) + +UDLK: PUSHJ PDP,WAIT1 + TDZ IOS,[XWD IOEND,776000] + MOVEM IOS,DEVIOS(DEVDAT) + LDB TAC,PUUOAC + TLO DEVDAT,LOOKB + TLZ DEVDAT,CLOSB + HLLM DEVDAT,USRJDA(TAC) + PUSHJ PDP,UDSP + JRST DLK(TAC) + + DSPT(DSO) + + DSPT(DSI) + + DSPT(DGF) + + + +, 6-CSS-DEC-CALL-PL-PRE2 +, H. R. MORSE 64-11-17 +, CALLING SEQUENCE +, CALL 0,[SIXBIT/NAME/] +, WHERE NAME IS THE NAME OF A SYSTEM ROUTINE. +, IF NO SYSTEM ROUTINE WITH THE SPECIFIED NAME IF FOUND, THIS ROUTINE +, EXISTS TO ERROR. +, MONITOR INTERFACE +, ROUTINES CALLED: ERROR, HASH, SYSTEM ROUTINES DEFINED BY +, USE OF UCALIN. +, SYMBOLS SET/USED: +, ACCUMULATORS: DAT S/U PROG U +, PDP U UUO S/U +;CONTENTS OF USER AC PLACED IN AC TAC + +UCALL: TLO UUO,JDAT ;RELATIVIZE UUO ADDRESS + MOVE DAT,@UUO; DAT:=NAME OF SYSTEM ROUTINE C + MOVSI TAC1,-UCLLEN + CAME DAT,UCLTAB(TAC1); SEARCH SYSTEM TOUTINE NAME TA + AOBJN TAC1,.-1 + LDB DAT,PUUOAC ;USER UUO AC FIELD + HRLI DAT,JDAT + MOVE TAC,@DAT ;PICK UP CONTENTS OF USER AC + JUMPL TAC1,@UCLJMP(TAC1) + JRST UUOERR + +DEFINE NAMES +< X DDTIN,DDTIN + X DDTOUT,DDTOUT + X DDTGT,DDTGT + X DDTRL,DDTRL + X SETDDT,SETDDT + X DEVCHR,DVCHR +X GETCHR,DVCHR +X WAIT,WAIT + X RESET,RESET + X EXIT,EXIT + X LDRBLT,LDRBLT + X UTPCLR,UTPCLR + X DATE,DATE + X SETPOV,SETPOV + X SWITCH,SWITCH + X TIMER,TIMER +> +DEFINE X (A,B) +< SIXBIT /A/ +> +UCLTAB: NAMES +UCLLEN=.-UCLTAB + +DEFINE X(A,B) +< JRST B +EXTERNAL B +> +UCLJMP: NAMES + + +, DEV 06 00 EX COM L PT PRE 02 UXIT +, H. R. MORSE 64-12-26 +, CALLING SEQUENCE +, ANY TRANSFER OF CONTROL TO UXIT +, EXITS THIS UUO CALL. +, MONITOR INTERFACE +, SYMBOLS SET/USED: +, ACCUMULATORS: MAY RESTORE ALL ACCUMULATORS +, JDAT U +, PDP U +, 17 S/U +, JOB AREA: JOBAC U +, SYSTEM ADDRESSES: USRUXT U +, USRLEV S/U + + + + INTERN UXIT,CUXIT1,CUXIT2 + +CUXIT2: AOS (PDP) +CUXIT1: AOS (PDP) +UXIT: POP PDP,USRSAV ;RESTORE UUO EXIT ADDRESS FRO + EXCH TAC,USRSAV + TLNN TAC,USRMOD ;WAS ENTRY FROM USER MODE? + JRST UXIT2 + MOVEM TAC,USRSAV ;SET UP RETURN + MOVSI 17, JOBAC(JDAT) ;RESTORE ACCUMULATO + BLT 17,17 +UXIT1: JRST 2,@USRSAV ;RETURN TO USERS PROGRAM + +UXIT2: EXCH TAC,USRSAV + JRST 2,@USRSAV + + END, diff --git a/src/syscss.mac b/src/syscss.mac new file mode 100644 index 0000000..ac37e2d --- /dev/null +++ b/src/syscss.mac @@ -0,0 +1,101 @@ +TITLE SYSCSS - COMMON SYSTEM SUBROUTINES +SUBTTL 8-9-65 +EXTERNAL UXIT,ERROR,USRDDT,USRPOV,PUUOAC,USRREL + +;RETURN THE DATE TO THE USER + + + INTERNAL DATE,THSDAT + +DATE: MOVE DAT, THSDAT + JRST STOAC + +THSDAT: 0 ;CONTAINS THE DATE + +;RETURN TIME SYSTEM HAS RUN IN 60THS OF A SECOND + +INTERNAL TIMER +EXTERNAL TIME + +TIMER: SKIPA DAT, TIME ;FALL INTO STOAC + +;RETURN DATA SWITCHES + +INTERNAL SWITCH + +SWITCH: DATAI DAT + +;STORE DAT IN USER AC + +INTERNAL STOAC + +STOAC: LDB TAC, PUUOAC + HRLI TAC, PROG + MOVEM DAT,@TAC + JRST UXIT + +;RETURN DEVICE CHARACTERISTICS + +INTERNAL DVCHR +EXTERNAL JOB,DEVSRC,PJOBN + +DVCHR: MOVE ITEM,JOB + PUSHJ PDP,DEVSRC ;SEARCH FOR DEVICE + SKIPA DAT,[0] ;NOT A DEVICE + SKIPA DAT,DEVMOD(DEVDAT) + JRST STOAC + LDB TAC,PJOBN ;GET JOB NUMBER + CAME TAC,JOB ;DOES USER ALREADY HAVE THIS DEVICE? + TRNN DAT,ASSCON+ASSPRG ;NO + TLO DAT,DVAVAL ;NO, BUT HE CAN GET IT + JRST STOAC + + +, CALLING SEQUENCE +, PUSHJ PDP,HASH +, EXIT;L ALWAYS RETURNS HERE +, COMPUTES XOR HASH TYPE INDEX FROM NAME (SIXBIT CODE) IN AC DAT +, AND LEAVES THE RESULT (00<OR= INDEX <OR=77) AS AN INTEGER IN TAC. +, THE ALGORITHM IS AS FOLLOWS: (V = EXCLUSIVE OR) +, BIT 35:=8V17V26V35 +, 34:=7V16V25V34 +, 33:=6V15V24V33 +, 32:=5V11V23V29 +, 31:=4V10V22V28 +, 30:=3V9V21V27 +, MONITOR INTERFACE +, SYMBOLS SET/USED: +, ACCUMULATORS: DAT U TAC S/U +, PDP S/U TAC1 S/U +; INTERN HASH + +;HASH: HLR TAC,DAT +; MOVE TAC1,DAT +; XORB TAC1,TAC +; ROT TAC1,-11 +; XOR TAC,TAC1 +; ANDI TAC,UTBNM1 +; POPJ PDP, ; RETURN + + INTERNAL SETDDT + +SETDDT: HLRI TAC,10000 + MOVEM TAC,USRDDT + JRST UXIT + + + INTERNAL SETPOV + +SETPOV: HLRI TAC,10000 + MOVEM TAC,USRPOV + JRST UXIT + +;WAIT FOR IO TO BECOME INACTIVE ON CHANNEL AC + +INTERNAL WAIT +EXTERNAL IOIERR,WAIT1 + +WAIT: JUMPE DEVDAT,IOIERR ;CHANNEL ASSIGNED? + PUSHJ PDP,WAIT1 ;WAIT TILL INACTIVE + JRST UXIT + END, diff --git a/src/sysini.mac b/src/sysini.mac new file mode 100644 index 0000000..0bb086a --- /dev/null +++ b/src/sysini.mac @@ -0,0 +1,101 @@ +TITLE SYSINI - SYSTEM INITIALIZATION +SUBTTL 8-9-65 +EXTERNAL APRCHN,ERROR,IOINI +EXTERNAL DDT,NULJOB,SYSMAK,ONCE,SYSBEG,SYSBG1,SYSEND +EXTERNAL CORTAB,CORLST,CORTAL,CORBLK,SYSSIZ,LINKSR + +;SYSTEM INITIALIZATION DISPATCHTABLE, STARTING AT LOC. 140 +;THIS SUBROUTINE MUST BE LOADED FIRST +;ROUTINE ONCE IS ONCE ONLY CODE. IT CONVERTS THE DATE +;AND SETS UP IO SERVICE CHAIN. + + + +INTERNAL SYSDSP + +SYSDSP: JRST SYSINI ;INITIALIZE SYSTEM VARIABLES ONCE ONLY + JRST DDT ;EXEC DDT + JRST SYSMAK ;MAKE NEW SYSTEM + JRST SYSINI ;INITIALIZE SYSTEM VARIABLES ALWAYS + JEN NULJOB ;ERROR RECOVERY + JRST SYSONE ;DO ONCE ONLY CODE OVER AGAIN + JRST JSR2 ;BYPASS ONCE ONLY OPERATOR DIALOG + ;(IN CASE CONSOLE TTY DOWN) + + +;INITIALIZE SYSTEM DATA STORAGE + +INTERNAL SYSINI +NXM=10000 ;NON EX MEM FLAG + +SYSONE: JSR ONCE ;ONCE ONLY CODE +SYSINI: CONO APR,200000 ;IO RESET +JSR1: JSR ONCE ;DO ONCE ONLY CODE ONCE +JSR2: JSR LINKSR ;LINK IO SERVICE ROUTINES + MOVS TAC,.+1 + SETZB TAC1,SYSBEG + MOVSM TAC,JSR1 + MOVSM TAC,JSR2 + HRRI TAC,SYSBG1 ;CLEAR SYSTEM DATA STORAGE + BLT TAC,SYSEND + MOVSI TAC, DVDIRIN+TTYATC+TTYUSE + HRRI TAC,ASSCON+ASSPRG + HLRZ DEVDAT,DEVLST ;SCAN ALL DEVICES +SYS1: ANDCAM TAC, DEVMOD(DEVDAT) ;CLEAR DIRECTORY IN CORE BIT, + ;ASSIGNED BY CONSOLE & PROGRAM + SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME + HLRZ DEVDAT, DEVSER(DEVDAT) + JUMPN DEVDAT, SYS1 + MOVE JDAT,COREP ;SET UP CORE USE BIT TABLE + MOVEM JDAT,CORLST + MOVEI TAC,CORBLK ;NO. OF 1K BLOCKS IN TABLE +SYS2: CONO APR,NXM ;CLEAR NON EX MEM + IBP JDAT ;MOVE BYTE POINTER + HLLZ DAT,(TAC1) ;REFERENCE MEMORY, CLEAR RT. OF DAT + CAMLE TAC1,SYSSIZ ;HIGHEST LOC IN EXEC. + CONSZ APR,NXM ;CAN MEMORY BE USED FOR USER PROG? + AOJA DAT,SYS3 ;NO, MARK AS INACCESIBLE (1 BIT) + AOS CORTAL + MOVEM JDAT,CORLST ;AND SET LAST FREE BLOCK POINTER +SYS3: DPB DAT,JDAT ;STORE 0 OR 1 IN TABLE + ADDI TAC1,2000 ;INCREMENT MEMORY REF + SOJG TAC,SYS2 + IBP CORLST ;SET TO FIRST UNAVAILABLE BLOCK + HRRI 1,IOGO + HRRM 1,SYSDSP ;FALINTO IOGO + + +;INITIALIZE ALL IODEVICES + + INTERNAL IOGO + EXTERNAL DEVLST, MJOBN, JBTADR,JBTSTS,IOINI +EXTERNAL DCREQ,MTREQ,DTREQ + +IOGO: MOVEI TAC,APRCHN + CONO APR,633440(TAC) + HLRZ TAC, DEVLST ;CHAIN OF DEVICE DATA BLOKS +IOG0: MOVEI TAC1,ASSPRG ;CLEAR ASSIGNED BY PROGRAM BIT + ANDCAB TAC1,DEVMOD(TAC) + HRLOI ITEM,IORET+7*PICHN ;CLEAR JOB NO., USER CHANNEL + TRNE TAC1,ASSCON + TLO ITEM,777000 + ANDM ITEM,DEVCHR(TAC) ;BUT NOT IORET BIT OR PII CHA + SETZM DEVIOS(TAC) ;CLEAR IO STATUS WORD + SETZM DEVBUF(TAC) ;CLEAR BUFFER ADDRESS + HLRZ TAC, DEVSER(TAC) + JUMPN TAC, IOG0 + SETOM DCREQ ;CLEAR DEVICE REQUEST COUNTS + SETOM MTREQ + SETOM DTREQ + MOVEI PDP,IOPDL-1 + PUSHJ PDP,IOINI ;INITIALIZE IO DEVICES + MOVSI DAT,MJOBN ;JOB NUMBER ASSIGNED BIT + MOVE TAC,[XWD JERR,1] ;SET ERROR BIT, CLEAR ALL 0TH +IOG1: MOVEM TAC,JBTSTS(DAT) + AOBJN DAT,IOG1 + CONO PI,12377 + JRST NULJOB ;START THE NULL JOB +IOPDL: BLOCK 4 +COREP: POINT 1,CORTAB ;1 BIT BYTE POINTER TO CORE USE TABLE + + END SYSINI diff --git a/src/sysmak.mac b/src/sysmak.mac new file mode 100644 index 0000000..59de6f8 --- /dev/null +++ b/src/sysmak.mac @@ -0,0 +1,54 @@ +TITLE SYSMAK - MAKE NEW SYSTEM WITH THE OLD +SUBTTL 7-21-65 +,SYSMAK ASSUMES AN EXISTING SYSTEM WITH A LOADER IN CORE FOR JOB 1 +,AND HIGHEST EMORY ADDRESS IN REAL 37. TO CREATE A NEW SYSTEM, SET +,37 AS DESIRED, LOAD NEW SYSTEM (WITHOUT GOING INTO EXECUTION), AND +,START AT REAL 62. THE COMPUTE WILL HALT AFTER THE NEW SYSTEM +,HAS BEEN BLOCKED DOWN. TO START, PRESS CONTINUE OR START AT REAL +,60. EXEC DDT (IF LOADED WITH THE NEW SYSTEM) STARTS AT REAL 141. +;FROM REL. LOC. 30 ON UP IS BLOCKED DOWN + +,WHEN LOADING A NEW SYSTEM, LOAD SYSINI FIRST. +;SYSINI CONTAINS A DISPATCH TABLE DOCUMENTED TO BE AT LOC. 60 +;ALSO LOAD IOINI LAST SINCE IT CONTAINS SOME ONCE ONLY CODE AT END +;THEN LOAD SYSMAK FOLLOWED BY DDT(EXEC) +;BE SURE THAT LOC SYSSIZ(SIZ OF SYSTEM) IS GREATER THAN +;LAST LOC IN SYSMAK BEFORE STARTING TO LOAD. +;LOC SYSSIZ IS IN LOWER CORE AND MAY HAVE TO BE PATCHED +;USING CONSOLE SWITCHES. + +INTERNAL SYSMAK,MAKEND +EXTERNAL JBTADR,JBTAD1 + +SYSMAK: MOVE 1,JBTAD1 ;LOADER BLOCK ADDRESS FROM JOB ADDRESS + MOVE 6,2(1) ;LOADER OFFSET + ADDI 6,(1) ;BLOCK ADDRESS+OFFSET + MOVE 2,6(1); SYSMBOL TABLE POINTER: -N,L = LOWEST AD + ADDI 2(1) + HLRO 3,2 + MOVNS 3 ;N = SYMBOL TABLE LENGTH + MOVE 4,DDTMEM ;MEMORY SIZE(LOC 37) + MOVEM 4,DDTMEM(6) ;STORE IN NEW DDTMEM + SUBI 4,200 ;ROOM FOR DECDUMP + MOVEM 4,DDTSYM(6) ;ALSO STORE IN WHAT WILL BECOME DDTSYM + MOVE 5,2 ;LEAVES ROOM FOR DECDMP + ADD 5,3 + HRL 5,3 ;C(5):=N,L+N + SUB 4,5 + HRRZS 4 ;C(4):=0,C(37)-200-(L+N) + ADD 2,4 ;C(2):=-N,C(37)-200-N + MOVEM 2,(5) + HRRM 4,.+1 + POP 5,(5) ;MOVE SYMOBOL TABLE TO TOP OF MEMORY + JUMPGE 5,.-1 + MOVE 10,[BLT 3,(2)] + MOVE 11,[JRST 4,] + HRRI 3,30 + HRLI 3,30(6) ;C(3):=LOADER OFFSET+LOADER BLOCK ADDRE + HRRZ 2,6(1) ;C(2):=LOWEST LOCATION IN SYMBOL TABLE + HRR 11,(1) ;C(11):=JRST 4,START ADDRESS + JRST 10 ;MOVE SYSTEM TO BOTTOM OF MEMORY AND HALT + + LIT + +MAKEND: END, diff --git a/src/tendmp.mac b/src/tendmp.mac new file mode 100644 index 0000000..7c17154 --- /dev/null +++ b/src/tendmp.mac @@ -0,0 +1,470 @@ +TITLE TENDMP - DTAPE/MTAPE UTILITY - R CLEMENTS/GBH/RH/RD/RCC/JEF 6 APR 71 - V032 + IFNDEF REL,<REL=0> ;0 PAPER TAPE, 1 RELOCATABLE BINARY + IFNDEF MAGT,<MAGT=0> ;0 DTAPE, 1 MTAPE + IFN MAGT,< +; MAGTAPE UTILITY ROUTINE - COURTSEY DATALINE SYSTEMS J HANCOCK + > + IFNDEF MODE,<MODE=0> ;0 IS TD10, 1 IS 551/136 + IFNDEF CORE,<CORE=4> ;NUMBER OF 8K MEMORY BLOCKS + + IFE MODE,<SUBTTL TD10 VERSION> + IFN MODE,<SUBTTL 551/136 VERSION> + +IFE REL,< +IFE MAGT,<RIM10B> +IFN MAGT,<RIM10>> + UTC=210 + UTS=214 + DC=200 + DTC=320 + DTS=324 + +F=0 ;MUST BE 0. USED BY JRA'S +A=2 ;MISC TEMP. HOLDS 136 CONO INDEX IN UWAIT +B=1 ;TEMP. HOLDS BLOCK # COMPUTATION IN SEARCH +C=3 ;HOLDS BITS FOR DECTAPE CONO DURING I/O +D=4 ;HOLDS POINTERS FOR AOBJN'S THROUGH CORE +E=5 ;HOLDS COUNT OF WORDS IN CURRENT DT BLOCK +P=6 ;PC FOR JSP'S +CKS=7 ;HAD BEEN CHECKSUM IN MACDMP +FILN=10 ;NUMBER OF FILE IN DIRECTORY, 1 TO 26 OCTAL +BLKNO=11 ;BLOCK NUMBER SEARCHED FOR ON TAPE +WRITE=12 ;MULTI-STATE FLAG FOR DEFINING I/O OPERATION + ;1=D 0=K -1=ELSE +PNTR=13 ;POINTER TO BYTE TABLE IN DIRECTORY +CH=14 ;HOLDS 6BIT CHARACTER OF COMMAND, OR -1 +Q=15 ;ANOTHER JSP AC +G=16 ;RARELY USED VERY TEMP +CT=17 ;COUNT OF WORDS TO DUMP + +COMPTR=BEGR+377 ;COMMAND POINTER, IF SUPPLIED + LOZAD=BEGR-203 ;WHEN CORE IS CLEARED, IT + ;IS FROM 40 THRU LOZAD + LOW=20 ;FIRST LOCATION CONSIDERED FOR DUMPING + HIGH=BEGR-203 ;LAST LOCATION CONSIDERED FOR DUMPING + ;ZEROED AT BEG THESE DAYS + FOOF=BEGR-202 ;NEEDED FOR ZERO CORE SEARCH, ZEROED AT BEG1 +TAB=BEGR-201 ;FILE DIRECTORY +LINK=BEGR-1 ;0-17=LINK, 18-27=FBN, 29-35=WC +IFE REL,<IFE MAGT,<LOC 17400+<<CORE-1>*20000>> + IFN MAGT,<LOC 17377+<<CORE-1>*20000> + IOWD LAST-BEGR+1,BEGR>> + ;INITIAL ENTRY IS AT BEGR, UNLESS A COMMAND POINTER IS +;SUPPLIED IN COMPTR. IN THAT CASE, ENTRY IS AT BEGR+1 + +BEGR: SETZM COMPTR ;CLEAR ANY JUNK IN COMMAND POINTER + CONO 635550 ;I/O RESET, ETC. +BEG: JSP P,CRR ;TYPE A CR-LF + MOVEI D,SPNT-2 ;PREPARE TO REMOVE AOBJN POINTERS +BEG1: SETZB A,FOOF ;CLEAR A TO PUT IN CORE, CLEAR + ;FOOF FOR THE NEXT ZERO CORE SEARCH + EXCH A,2(D) ;REMOVE HEADER LIST + AOBJN A,. ;COUNT THROUGH TO NEXT HEADER + MOVEI D,-1(A) ;ACCOUNT FOR OVERSHOOT IN AOBJN + JUMPN D,BEG1 ;IF WE DIDNT AOBJN A 0, GO FOR NEXT HDR + MOVE PNTR,[XWD 500,TAB-1] ;5 BIT BYTES IN DIRECTORY + SETZB CH,F +CRCH: SETOI WRITE,215 ;USED FOR CARRET TYPEOUT +TYI: SETZB C,HIGH ;HOPEFULLY HIGH IS TEMPORARY + SETZB B,E ;NAME INITIALIZING + TLOA B,400000 ;NULL NAME IS "@. " +SPACE: MOVEI E,C-1 ;EXTENSION INTO C + HRLI E,20600 ;FAKE OUT END TEST OF BYTE PTR +;STOP TAPE DRIVE +IFN MODE,<CONO UTC,0> +IFE MODE,<CONO DTC,400000> +NEXT: ILDB A,@BEGR ;GIVES A 0 UNLESS COMMAND POINTER SUPPLIED + ;RH OF NEXT IS USED AS A CONSTANT +BELL: SETOI FILN,207 ;INITIALIZATION FOR SEARCH + SETZB BLKNO,CT ; " + SETZM LINK + JUMPN A,RCH ;JUMP IF COMMAND READ FROM CORE + CONSO TTY,40 ;TYPEIN FLAG? + JRST .-1 ;NO,WAIT + DATAI TTY,A ;GET TYPED IN CHARACTER + JSP P,TYO ;ECHO IT (WITH PARITY) +RCH: ANDI A,177 ;STRIP OFF PARITY + CAIN A,177 ;RUBOUT? + JRST BEGR ;YES. RESTART TENDMP + CAIE A,33 ;NEW ALTMODE? + CAIL A,175 ;OR 175 OR 176 ALTMODES? + JRST ALTTST ;YES, SOME ALTMODE. + CAIL A,140 ;LOWER CASE CHARACTER? + TRZ A,40 ;YES. CHANGE TO UPPER CASE + SUBI A,40 ;CONVERT TO SIXBIT + JUMPL A,CARRET ;ANY CONTROL CHARACTER + JUMPE A,SPACE ;CHAR WAS 40 +NEXT1: TLNE E,770000 ;NO MORE THAN SIX CHARS + IDPB A,E ;GOES INTO AC1 = B + JRST NEXT ;GET ANOTHER CHARACTER + + +;HERE ON JUMP BLOCK DURING LOADS, OR NUMBER>7 ALT +JBLK: +;STOP TAPE DRIVE +IFN MODE,<CONO UTC,0> +IFE MODE,<CONO DTC,400000> + HRRM D,SADR ;SAVE STARTING ADDRESS + JUMPN CH,BEG ;IF NOT LOADGO COMMAND +SADR: JRST BEG ;CURRENT S.A. +LOADS: ;HERE TO LOAD TAPE TO CORE + MOVEI D,LOZAD+1 ;FIRST LOC NOT TO ZERO + SETZM 40 ;A "FEATURE" + MOVE C,[XWD 40,41] ;PREPARE TO CLEAR CORE. + TRNN CH,3 ;SKIP ON M,N NOT ON L,T,@ + BLT C,-1(D) ;ZERO CORE +LOAD: JSP Q,LODUMP ;START READING FILE. LODUMP PROCESSES + ;ONE HEADER AND ITS DATA + JRST LOAD ;IF OK, GET NEXT BLOCK.(IF NONE, + ;LODUMP RETURNS TO JBLK.) +DELE: SKIPN E,WRITE ;SKIP IF NOT IN THE K PHASE OF A D COMMAND. + ;OR A K COMMAND + ;ALSO, SET E =0, SO SEARCH HAPPENS IN RBLK +CLS1: AOJA WRITE,CLSTP ; 0 TO 1. GO DUMP OUT DIRECTORY. +ERR: SKIPA P,NEXT ;SET TO RETURN TO BEGR +CRR: SKIPA A,CRCH ;LIKE HRROI A,215 AND SKIPA + SKIPA A,BELL ;GET A BELL CHARACTER +TYO: SKIPN COMPTR ;DONT TYO IF NO TYI, UNLESS ERR + DATAO TTY,A ;TYPE OUT + CONSZ TTY,20 ;WAIT FOR TTY TO FINISH + JRST .-1 ;NOT YET + CAIE A,215 ;IF CR TYPED IN, + JUMPGE A,(P) ;OR SIGN BIT OF CHAR ON,(SEE CRR) + MOVEI A,12 ;APPEND A LINEFEED + JRST TYO ;GO TYPE LF + + ALTTST: TLNN B,4040 ;IF ALPHA CHARACTERS, DONT GET CH + LDB CH,E ;LAST CH BEFORE ALT, -40 + JUMPN CH,ALTMD ;IF CH NOT NULL, GOT PROCESS ALTMODE +CARRET: MOVSI FILN,-26 ;FILE NAME SPECIFIED. FIRST THING TO + ;DO IS LOOK IT UP IN DIRECTORY +LUP: SKIPN TAB+123(FILN) ;SEARCH FOR FREE FILE + SKIPE BLKNO,TAB+151(FILN) ;CHECK BOTH WORDS + TDZA BLKNO,BLKNO ;ENSURE CLEAR BLOCK NUMBER + HRRM FILN,FREE ;SAVE NUMBER OF A FREE FILE + HLLZ G,TAB+151(FILN) ;ONLY CHECK LEFT OF 2ND WD + CAMN B,TAB+123(FILN) ;SEARCH FOR TYPED-IN FILE + CAME C,G ;BOTH WORDS + AOBJN FILN,LUP ;NOT THIS ONE. KEEP LOOKING + JUMPL FILN,BEG69 ;IF FILE FOUND, JUMP + JUMPLE WRITE,ERR ;IF NOT FOUND, BETTER BE DUMP +FREE: MOVEI FILN,. ;DUMP & NOT FOUND, MAKE ENTRY WHERE FREE + ;(ADDRESS MODIFIED ABOVE) + SKIPE TAB+123(FILN) ;MAKE SURE HOLE AVAILABLE + JRST ERR ;NO FREE SLOTS + +BEG69: MOVEI FILN,1(FILN) ;FILN IS FILE #+1; CLR LH + JUMPL WRITE,LOADS ;ALL LOAD INSTRUCTIONS +IFE MAGT,< + SKIPN WRITE ;DELETE? (K COMMAND) + SETZB B,C ;YES, KILL FILE + MOVEM B,TAB+122(FILN) ;CLEAR IF DELE, ENTER IF NEW DUMP + HLLZM C,TAB+150(FILN) ;BOTH WORDS + ;FALL INTO DUMP ROUTINE + ;WHICH IS A NO-OP FOR K + + +;DUMP WRITES OUT CORE ONTO TAPE + +;DUMP THRU DUMP2-1 SETS UP POINTERS TO NON-ZERO CORE AREAS. THESE +;AOBJN POINTERS ARE CALLED "HEADERS", AND PRECEDE THE DATA WHEN +;THE TAPE IS WRITTEN. +;THE FIRST HEADER IS KEPT IN SPNT. SUCCESIVE HEADERS GO INTO THE FIRST +;ZERO WORD FOLLOWING THE BLOCK CORRESPONDING TO THE PREVIOUS HEADER. +;AFTER THE LAST NON-ZERO BLOCK IS (BY DEFINITION) A ZERO, WHICH +;TERMINATES THE HEADER LIST. THIS WORD MAY BE LOCATION FOOF (37176) IF +;CORE WAS FILLED UP TO THE BASE OF TENDMP. + +DUMP: ;HERE ON D,K. (BLKN)=0, FILN SET UP + MOVN A,[XWD HIGH-LOW-1,-LOW+1] ;COUNTER TO EXAMINE + ;CORE FOR BLOCKS OF 0 + MOVEI CKS,SPNT-1 ;FIRST HEADER GOES INTO SPNT +DMP1: SKIPN 1(A) ;FIND SOME NON-ZERO CORE + AOBJN A,.-1 ;ZERO. KEEP LOOKING. + MOVEM A,D ;SAVE ADR + SKIPN 1(A) ;FIND SOME ZERO CORE + SKIPE 2(A) ;DON'T MAKE NEW BLOCK FOR 1 ZERO + AOBJN A,.-2 ;NON-ZERO. KEEP LOOKING + SUB D,A ;GET -COUNT IN BOTH HALVES OF D + SUBI CT,-1(D) ;COUNT N WORDS DATA, 1 HDR + ADDI D,(A) ;GET F.A.-1 IN RH OF D + MOVEM D,1(CKS) ;SAVE HEADER + JUMPGE D,.+2 ;ON DATA GROUPS, + MOVE CKS,A ;GET THE HEADER + ;F.A.+W.C. IS ADR OF NEXT HEADER + ;I.E., FIRST 0 AFTER NON-ZERO BLOCK + JUMPL A,DMP1 ;LOOP IF MORE CORE + LSH CKS,2 ;SHIFT CORE SIZ FOR DIR + SKIPLE WRITE ;IF DUMPING, SET JOBREL + HRRM CKS,TAB+150(FILN) ;PUT IN DIR +DMP2: MOVEI D,SPNT-1 ;SET UP TO FOLLOW THE HEADERS. + MOVEI CT,1(CT) ;CLR LH, COUNT JBLK +DMP3: MOVE D,1(D) ;GET HEADER + JUMPGE D,THRU ;IF NULL HEADER FOUND + MOVEI Q,DMP3 ;Q:= DMP3 AS A RETURN AFTER AOBJN + > + +IFN MAGT,< + JRST ERR ;HOW DID WE GET HERE? DLS*** +;DUMP WRITES OUT CORE ONTO MAGNETIC TAPE +;DUMP WRITES OUT A CORE IMAGE ON MAGNETIC TAPE WITHOUT +;ZERO COMPRESSION. THE RECORDS ARE 200(OCTAL) WORDS IN LENGTH +;AND BEGIN WITH WORD ZERO. BEFORE STARTING THE TAPE IS REWOUND. +;IT ASSUMES MTA0, AT LEAST FOR NOW. + + MTC= 340 + MTS= 344 +DUMP: CONO MTC,1000 ;REWIND + CONSO MTS,300000 ;WAIT FOR BOT OR REWINDING + JRST .-1 + CONSO MTS,40 ;TRANSPORT READY? + JRST .-1 + SETZ A, +DUMP1: HRLI A,-200 ;WORDS PER BLOCK + CONO MTC,64100 ;START WRITE OPERATION +DUMP2: CONSO MTS,1 ;TD10 READY FOR DATA? + JRST .-1 + DATAO MTC,(A) ;SEND OUT DATA + AOBJN A,DUMP2 ;POINT TO NEXT WORD AND LOOP + CONO MTS,1 ;STOP THE DRIVE + CONSO MTS,100 ;WAIT TILL STOPPED + JRST .-1 + CONSZ MTS,464610 ;ANY ERRORS? + JRST ERR ;YES, GO RING BELL + AOSE [-CORE*20000/200+2] ;ALL CORE DUMPED? + JRST DUMP1 ;NO + CONO MTC,65100 ;WRITE END OF FILE + CONSO MTS,100 ;DONE? + JRST .-1 + CONO MTC,65100 + CONSO MTS,100 + JRST .-1 + JRST BEGR ;ALL DONE + > + + +LODUMP: JSP P,UWAIT + JFCL D ;IN/OUTPUT HEADER + JUMPGE D,JBLK ;IF JRST BLOCK READ. CANT HAPPEN ON WRITE +DMP5: JSP P,UWAIT + JFCL 1(D) ;IN/OUTPUT DATA WORD + AOBJN D,DMP5 ;COUNT DOWN THE HEADER + JRST (Q) ;END OF HEADER. TO DMP3 OR LOAD+1 +;WRITE: 1=D 0=K -1=ELSE + +THRU: JSP P,UWAIT ;WRITE OUT JRST BLOCK + JFCL SADR ;FROM LOC SADR +IFE MODE,< AOJL E,UWAIT1 ;FILL OUT BLOCK, TO GET CKSM OUT> + TRZA WRITE,-1 ;THEN SET WRITE TO 0, AND GO CLOBBER + ;ANY FURTHER BLOCKS WITH THIS FILN +UWAIT: AOJL E,UWAIT1 ;RETURN ADDR = (P) DATA ADDR = @(P) + ;E IS -WD COUNT IN BLOCK OR POSITIVE + ;BYTE POINTER FIRST TIME THRU + HLRZ BLKNO,LINK ;SET TO FOLLOW LINK +MNLUP0: JUMPGE WRITE,MNLUP ;WRITING OR DELETING + JUMPN BLKNO,RBLK +MNLUP: AOSA BLKNO ;NEXT BLOCK IN THE DIRECTORY +MNLUP1: DPB B,PNTR ;FOR DELETE, 0 FILE NAME AND NUMBER + ILDB A,PNTR ;SEARCH FILE DIR + CAIN A,37 + JRST DELE ;END OF TAB MARKER, DELE GOES TO + ;CLSTP ON A "D" TO DUMP DIRECTORY + TLO A,-1(WRITE) ;0 ON D, -1 ON K OR K PHASE OF D + CAIE FILN,(A) ;IS THIS BLOCK ASSIGNED TO CURRENT FILE? + JUMPN A,MNLUP ;OR MAYBE FREE? JUMP IF IN USE BY + ;ANOTHER FILE. + DPB FILN,PNTR ;SMASH AWAY WRITE BLOCK ON D OR K. BUT + ;SEE MNLUP1 ON K. + JUMPE WRITE,MNLUP1 ;K COMMAND + SKIPN C,LINK ;HAS LINK BEEN SET UP? + DPB BLKNO,[XWD 101200,LINK] ;NO. PUT BLOCK IN AS FIRST BLK NO + HRLM BLKNO,LINK ;PUT BLOCK IN AS LINK + JUMPE C,MNLUP0 ;JUMP IF THIS IS THE FIRST PASS THRU DIRECTORY + HLRZ BLKNO,C ;GET LINKED BLOCK CHOSEN BEFORE + MOVEI C,177 ;PUT IN A WORD COUNT FOR PIP + IORM C,LINK ;AND PUT ALL THAT INTO LINK WORD + SUBI CT,177 ;DECREMENT WORDS LEFT TO GO + + +;RBLK SEARCHES FOR THE BLOCK IN BLKNO, ENTERS IT GOING FORWARD, +;AND THEN READS INTO CORE, DUMPS CORE, OR COMPARES CORE AS +;DETERMINED BY CONTENTS OF WRITE. + +RBLK: HRRO C,TAPENO ;CURRENT TAPE NO. + ;SET LH TO PREPARE FOR JUMPN IN DELE +IFE MODE,< + TRO B,-1 ;ENSURE GOING FORWARD WHEN FIRST SEARCH + CONSO DTC,300000 ;IS A DIRECTION ASSERTED? + TRO C,210000 ;NO. GO FORWARD +RB1: TRNN B,400001 ;DECIDE WHETHER TO TURN AROUND + TRO C,300000 ;TURN AROUND +RBG: CONO DTC,20200(C) ;ISSUE THE COMMAND TO TD10. + ;200=SEARCH, 300=READ, 700=WRITE. +UWAIT1: CONSZ DTS,672700 ;ANY ERRORS? + JRST ERR ;YES. GO DING AND THEN TYI + CONSO DTS,1 ;DATA READY? + JRST .-3 ;NO. GO WAIT SOME MORE + JUMPL E,INOUT(WRITE) ;IF IN MIDST OF A DT BLOCK, DISPATCH + DATAI DTC,B ;NO. SEARCHING. GET BLOCK NO. + TRZ C,310000 ;CLOBBER DIRECTION BITS IN CONO + SUBI B,(BLKNO) ;COMPARE WITH DESIRED BLOCK + CONSZ DTC,100000 ;COMPLEMENT DECISION IF GOING REVERSE + TRC B,-2 ;BIT 35 IS FOR TURNAROUND SPACE. +> + +IFN MODE,< + SETOB A,B ;GO FORWARD, SET DC FOR SEARCH + CONSZ UTS,40 ;IS CHECKSUM BEING WRITTEN? + JRST .-1 ;WAIT +RB1: TRNN B,400001 ;DECIDE WHETHER TO TURN AROUND + TRCA C,10000 ;CHANGE DIRECTION AND DELAY + CONSO UTC,200000 ;UNIT SELECTED? + TRO C,2000 ;INVOKE STARTUP DELAY +RBG: CONO UTC,220200(C) ;COMMAND TO THE 551. + ;200=SEARCH, 300=READ, 700=WRITE. + CONO DC,4011(A) ;COMMAND TO THE 136. +UWAIT1: CONSZ UTS,6 ;ANY ERRORS? + JRST ERR ;YES. GO DING AND THEN TYI + CONSO DC,1000 ;DATA READY? + JRST .-3 ;NO. WAIT SOME MORE + JUMPL E,INOUT(WRITE) ;IF IN MIDST OF A DT BLOCK, DISPATCH + DATAI DC,B ;NO. SEARCHING. GET BLOCK NUMBER + TRZ C,2000 ;DONT DELAY ANY MORE + SUBI B,(BLKNO) ;COMPARE WITH DESIRED BLOCK + TRNE C,10000 ;COMPLEMENT IF GOING REVERSE + TRC B,-2 ;BIT 35 IS FOR TURNAROUND SPACE. +> + JUMPN B,RB1 ;JUMP IF NOT GOING FORWARD INTO (BLKNO) + MOVNI E,200 ;WORDS PER BLOCK + MOVEM P,F ;SAVE RETURN IN AC0 + TRO C,100 ;READ COMMAND, MAYBE + JUMPLE WRITE,RB2 ;JUMP IF READ + TRO C,400 ;CHANGE TO WRITE COMMAND +IFN MODE,<MOVNI A,401 ;SET 136 TO OUTPUT> + JUMPG CT,.+3 + HRRZS LINK ;IF LAST BLK, KILL LINK + DPB E,PNTR ;AND THE DIR BYTE ? 0 +RB2: CAIE BLKNO,^D100 ;IF NOT DIRECTORY BLOCK + MOVEI P,.+2 ;SETUP NEW RETURN + JRST RBG + AOJ E,LINK ;IN/OUTPUT LINK + JRA P,UWAIT1 ;RESTORE CALLER ADR + ;AND PROCESS DATA WORDS + +IFE MODE,< + DATAI DTC,@(P) ;READ COMMANDS. GET WORD TO CORE +INOUT: JRST UWAIT2 ;INOUT-1 TO INOUT +1 ARE DISPATCHED TO. + DATAO DTC,@(P) ;OUTPUT TO TAPE +UWAIT2: AOJN E,UWAIT3 ;WAS THAT THE LAST WORD IN THE DT BLOCK? + CONO DTS,1 ;YES. GIVE FUNCTION STOP TO TD10 + CONSO DTS,100000 ;AND WAIT FOR CHECKSUM TO BE DONE + JRST .-1 ;NOT YET. WAIT +UWAIT3: SOJA E,0(P) ;DONE. COMPENSATE FOR THE AOJN ABOVE, AND + ;RETURN TO CALLER OF UWAIT OR RBLK +> + +IFN MODE,< + DATAI DC,@(P) ;READ COMMANDS. GET WORD TO CORE +INOUT: JRST UWAIT2 ;INOUT-1 THRU INOUT+1 ARE DISPATCHED TO. + DATAO DC,@(P) ;OUTPUT TO TAPE +UWAIT2: JRST 0(P) ;RETURN TO CALLER OF UWAIT OR RBLK. +> + +ALTMD: MOVEI A,"$" + JSP P,TYO ;ALTMODE IS PRINTED AS "$" + +IFE MAGT,< + CAIE CH,"K"-40 ;FOR K, WRITE := 0 + CAIN CH,"D"-40 ;FOR D, WRITE :=1 + AOJLE WRITE,.-1 ;COUNT (WRITE) + > + +IFN MAGT,< + CAIN CH,"D"-40 ;FOR D, WRITE :=1 + AOJLE WRITE,.-1 ;COUNT (WRITE) + JUMPG WRITE,DUMP ;D MEANS GO DUMP ON MAG TAPE + > + + CAIN CH,"G"-40 ;GO TO PROGRAM? + JRST @SADR ;YES. JUMP OUT + CAIN CH,"F"-40 ;FILE DIR PRINT? + JRST FDIR ;YES. PRINT FILE DIR OF THIS TAPE + CAIN CH,"Z"-40 ;ZERO DIRECTORY? + JRST ZDIR ;DISPATCH + CAILE CH,27 ;SKIP IF OCTAL NUMBER + JRST TYI ;NO. GO PROCESS FILE NAME + LSH B,3 ;CONVERT SIXBIT TO OCTAL + LSHC F,3 ;F+1=B + JUMPN B,.-2 ;MAY BE MORE THAN 1 DIGIT (START ADR) + CAILE F,7 ;SKIP IF ONE DIGIT + JRA D,JBLK ;D:=SADR. DISPATCH TO JBLK WHICH SAVES SADR. +OPNTP: ;SHIFT UNIT NUMBER LEFT FOR CONO +IFE MODE,<LSH F,11> +IFN MODE,<LSH F,3> + HRRM F,TAPENO ;SAVE IN CORE +CLSTP: MOVEI BLKNO,^D100 ;BLK NO OF FILE DIR + SETZI PNTR,0 ;DONT CLOBBER DIRECTORY BYTE + JSP P,RBLK ;MOVE TO BLOCK 100 + JFCL TAB+200(E) ;READ OR WRITE DIR TAB AS DETERMINED BY WRITE + AOJL E,UWAIT1 ;COUNT THE 200 WORDS + JRST BEG ;GO ASK FOR NEXT COMMAND + +ZDIR: MOVE A,[XWD FOOF,TAB] ;FOOF IS CLEAR + BLT A,TAB+176 ;CLEAR DIRECTORY, EXCEPT LAST WORD FOR ID + MOVSI A,(36B4+36B9) ;RESERVE BLOCKS 1 & 2 + MOVEM A,TAB ;IN DIRECTORY + MOVSI A,(36B9) + MOVEM A,TAB+16 ;BLK 100 (DIR) IS RESERVED TOO + HRLOI A,7 ;AND BLOCKS >1100 ARE EOT + MOVEM A,TAB+122 ;END OF BYTE TAB + AOJA WRITE,CLS1 ;SET WRITE TO OUTPUT + ;AND DUMP BLK 100. + FDIR: MOVNI FILN,26 ;26 FILES (OCTAL) +FD2: JSP P,CRR ;CR-LF +FD3: SKIPN C,TAB+123+26(FILN) ;FIRST WORD OF NAME. IS IT BLANK? + AOJA C,FD1 ;YES. SET C=1 AND LOOP + JSP G,SIXBP ;PRINT FIRST WORD AND A SPACE + HLLZ C,TAB+151+26(FILN) ;SECOND WORD OF FILE NAME + JSP G,SIXBP ;PRINT AND CLEAR C +FD1: AOJL FILN,FD2(C) ;CAN JUMP TO FD2 OR FD3. COUNT FILES. + JRST BEG ;ALL FILES PRINTED OR BLANK. RETURN. + +SIXBP: MOVEI B,7 ;SIXBP PRINTS C(C) IN 6BIT + ;AND ADDS A TRAILING SPACE + ;AND LEAVES (C)=0 + +TAPENO: ;USE ADR AS TEMP FOR CURRENT UNIT +SIXBP1: SETZI A,.-. ;CLEAR A + LSHC A,6 + ADDI A,40 ;SIXBIT TO ASCII + JSP P,TYO ;TYPE OUT CHARACTER + SOJG B,SIXBP1 ;LOOP IF MORE CHARACTERS + JRST 0(G) ;RETURN + +SPNT: 0 ;POINTER TO HEADERS IN CORE. + + LIT + + +IFN MAGT,< +SLOP: MOVE .+3 + MOVEM COMPTR + JRST BEGR+1 + XWD 440700,.+1 + BYTE (7) "0",33,177 +LAST: JRST SLOP + > +IFE MAGT,< + SLOP=COMPTR-17-. ;THIS MANY WORDS BEFORE RESERVED AREA + ;FOR COMMAND STRINGS. +;!!!!! NOTE: ABOVE PARAMETER MUST COME OUT POSITIVE IN +; ORDER TO MEET THE DOCUMENTATION OF RESERVED COMMAND STRING AREA. +; +; THIS MEANS ANY CODE ADDED MUST BE COMPENSATED FOR BY +; A CORRESPONDING TIGHTENING SOMEWHERE. GOOD LUCK. +; TENDMP IS VERY TIGHT ALREADY. + > + + END BEGR + + -- 1.7.1