ASMB,R,L,C HED UPLIN 91700-16107 REV A * (C) HEWLETT-PACKARD CO. 1976 * NAM UPLIN,3,3 91700-16107 REV A 760225 SUP SPC 1 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 2 * * * NAME: UPLIN * SOURCE: 91700-18107 * RELOC: 91700-16107 * PGMR: CHUCK WHELAN [12/5/75] * * * SPC 2 * EXTERNAL REFERENCES EXT EXEC,$LIBR,$LIBX EXT MESSS EXT #RSAX EXT #LDEF,#RFSZ,#RXCL EXT RNRQ,#BUSY,#QRN SPC 3 * UPLIN FOR DS-1B' UPLIN IS SCHEDULED EVERY 5 SECONDS TO PERFORM * THE FOLLOWING FUNCTIONS: * 1. CHECKS/WAITS FOR SYSTEM QUIESCENCE. PRINTS OPERATOR MESSAGE * WHEN QUIESCENCE IS ACHIEVED. * 2. UPDATES SLAVE "TCB" TIMEOUT VALUES, AND IF A TRANSACTION HAS * TIMED OUT, DOES THE FOLLOWING: * A) IF MONITOR IS I/O SUSPENDED DOES NOTHING UNLESS THE EQT TIMER * IS ZERO AND THE "D" BIT IS SET IN WHICH CASE IT STORES A -1 IN * EQT 15 TO FORCE A QUICK TIMEOUT TO THE DRIVER. * B) IF MONITOR IS IN ANY OTHER STATUS, THE TCB IS PURGED, AND IF * THE BREAK FLAG WASN'T SET AND THE EQT "AND DATA" BIT WAS SET, * A STOP IS SENT VIA THE DRIVER. IF THE MONITOR ABORT FLAG IS * SET, THE MONITOR IS THEN ABORTED. * 3. AFTER PROCESSING EACH SLAVE TCB LIST, UPLIN CHECKS TO SEE IF * THE CORRESPONDING MONITOR IS DORMANT, AND IF SO, RESCHEDULES IT. * 4. UPDATES MASTER TCB TIMEOUT VALUES, AND IF A MASTER TCB TIMES-OUT, * IT CHECKS THE PROGRAM STATUS. IF DORMANT, THE MASTER CLASS NUMBER * AND THE TCB ARE CLEARED. IF I/O SUSPENDED AND EQT15 IS ZERO * IT STORES A -1 IN EQT15 TO FORCE A QUICK TIME-OUT TO THE DRIVER. * IF IN A "WAIT" STATE AND THE I/O COMPLETION FLAG IN THE TCB * IS SET, IT WRITES A NULL REQUEST TO THE MASTER REQUESTER'S * CLASS. * 5. RESCHEDULES "GRPM","SRPM", OR "QCLM" IF THEY ARE DORMANT. * 6. CHECKS FOR ANY DOWNED COMMUNICATIONS EQTS, AND DOES "ENABLE * LISTEN" REQUESTS TO ANY FOUND. * * * EQTA EQU 1650B FWA OF EQUIPMENT TABLE DRT EQU 1652B FWA OF DEVICE REFERENCE TABLE LUMAX EQU 1653B NO OF LOGICAL UNITS (IN DRT) INTBA EQU 1654B FWA OF INTERRUPT TABLE BPA1 EQU 1742B FWA RT DISC RES BP LINK AREA SKP UPLIN EQU * * * CHECK FOR SYSTEM QUIESCENCE * LDA GLCW GET GLOBAL RN LOCK/CLEAR COMMAND RAL,ARS SET THE NO-WAIT BIT QRNWT STA RNCW SAVE CONFIGURED CONTROL WORD * JSB RNRQ GO TO RTE TO REQUEST DEF *+4 RESOURCE NUMBER STATUS, DEF RNCW OR TO AWAIT CLEARING OF THE RN. DEF #QRN ADDR OF QUIESCENT RN DEF TEMP RETURN STATUS JMP SLVTS IGNORE ERRORS * LDA RNCW IF PROGRAM HAS BEEN AWAITING CPA GLCW THE CLEARING OF #QRN, THEN JMP SLVTS BYPASS THE MESSAGE CODE. * LDA TEMP QRN STATUS LDB #BUSY ACTIVE TCB COUNT CPA K7 IF QRN WAS LOCKED GLOBALLY, SZB AND NO ACTIVE TCB'S EXIST, SKIP JMP SLVTS ELSE BYPASS QUIESCENT CODE. * JSB EXEC INFORM DEF *+5 THE DEF K2 OPERATOR DEF K1 THAT THE DEF QMES SYSTEM DEF K10 IS QUIESCENT. * LDA GLCW RETURN TO IMMOBILIZE UPLIN JMP QRNWT SKP * * THIS SECTION PROCESSES SLAVE TRANSACTIONS & MONITORS * SLVTS LDA BPA1 CPA K2 IS THIS AN RTE-III OR RTE-IV? RSSI RSS YES JMP SLVT2 NO LDB RSSI GET "RSS" STB MODI1 MODIFY TO DO CROSS-MAP STORE STB MODI2 MODIFY TO DO CROSS-MAP LOAD * SLVT2 LDA NAMES ADDR OF SLAVE MONITOR NAMES STA NPNT LDA K2 STA ST.LS SLAVE/STREAM ID FOR #RSAX ADA #LDEF STA LPNT PNTR TO SLAVE LIST HEADER ADDRS IN RES LDA N10 NUMBER OF MONITORS STA LCNT COUNTER= - # OF MONITORS * CKLST LDB LPNT,I GET ADDRESS OF HEADER INB STB MCLSA SAVE ADDR OF MONITOR CLASS # INB STB MSEGA ADDR OF MONITOR'S ID SEGMENT ADDR LDB LPNT,I NXTCB STB LSTAD SAVE ADDR OF ADDR OF NEXT TCB * * ENTER HERE TO CHECK EACH SLAVE TCB * CKTCB LDB LSTAD PICK UP ADDR OF ADDR OF TCB JSB LODWD (CROSS)LOAD ADDR OF TCB SZA,RSS IS IT THERE? JMP CKMON NO, END OF THIS LIST JSB TSTCB BUMP TIMER IN TCB JMP NXTCB DIDN'T TIMEOUT, CHECK NEXT TCB SKP * * SLAVE TRANSACTION HAS TIMED OUT * INB TCB ADDR+1 JSB LODWD PICK UP 2ND WORD STA TEMP AND SCMSK ISOLATE SELECT CODE (BITS 13-8) STA PRAM1 * LDA MSEGA,I GET MONITOR'S ID SEG ADDR RAL,CLE,ERA CLEAR SIGN ADA K15 POINT TO STATUS LDA 0,I AND K15 ISOLATE STATUS CPA K2 IS IT IN "I/O SUSPEND"? JMP SLVCK YES, JUMP INB COMPUTE ADDR OF TIME-TAGS JSB LODWD (CROSS)LOAD 1ST TIME TAG WORD STA TAGS INB JSB LODWD (CROSS)LOAD 2ND TIME TAG WORD STA TAGS+1 * JSB #RSAX DELETE SLAVE TCB DEF *+5 DEF K3 DEF ST.LS SLAVE/STREAM ID DEF PRAM1 SELECT CODE DEF TAGS TIME-TAGS * SZA SKIP IF ENTRY DELETED JMP NXLST WHOOPS! IGNORE THIS LIST LDA TEMP RAL,SLA TEST BREAK FLAG JMP CKABT SET, NO STOP REQUIRED SSA,RSS WAS IT A REQ. & DATA? JMP CKABT NO, NO STOP REQUIRED * * SEND A STOP TO CLEAR THE PENDING DATA REQUEST JSB GTEQT COMPUTE ADDR OF EQT LDA EQTA CMA,INA ADA 1 THIS ADDR - 1ST EQT ADDR CLB STB LU DIV K15 COMPUTE RELATIVE EQT NUMBER STA TEMP LDA LUMAX # OF LUS CMA,INA STA CNTR COUNT TO CORRECT LU NUMBER LDB DRT DEVICE REF TABLE ADDRESS * SEARCH FOR THIS EQT NUMBER IN DEVICE REFERENCE TABLE FNDEQ ISZ LU LU NUMBER FOR THIS DRT ENTRY LDA 1,I PICK UP DRT ENTRY AND B77 ISOLATE EQT # CPA TEMP IS THIS OUR EQT? JMP STPIT YES INB BUMP DRT POINTER ISZ CNTR JMP FNDEQ TRY NEXT JMP CKABT SC MUST BE INVALID, IGNORE IT * * IF MONITOR IS I/O SUSPENDED ON COMM. EQT & EQT15=0, SET EQT15=-1 SLVCK JSB GTEQT COMPUTE EQT ADDRESS LDA MSEGA,I GET ID SEG ADDR OF MONITOR RAL,CLE,ERA CLEAR SIGN CPA 1,I IS MONITOR ID BSEG ADDR IN EQT1? JSB EQTIM YES, CHECK/SET EQT15 LDB XACTA JMP NXTCB CHECK NEXT TCB * * CALL DVR TO SEND A STOP STPIT JSB EXEC DEF *+3 DEF K3N DEF LU MODE 0 = SEND STOP NOP * * CHECK MONITOR ABORT FLAG CKABT LDA MSEGA,I SSA,RSS SKIP IF SET JMP CKTCB NOT SET, DON'T ABORT IT, CHECK NEXT TCB * * ABORT THE MONITOR BY GENERATING AN "OF,(NAME),1" MESSAGE * LDA NPNT STA TEMP LDB COMMA COMMA IN 1ST LHW LDA TEMP,I 1ST 2 CHARACTERS OF NAME LSL 8 POSITION "," AND 1ST CHARACTER IN B REG STB MSNAM MOVE TO FIELD FOR "OF" LSL 8 ISZ TEMP LDA TEMP,I GET 3RD & 4TH CHARS OF NAME LSL 8 POSITION 2ND & 3RD CHARS IN B REG STB MSNAM+1 LSL 8 ISZ TEMP LDA TEMP,I GET 5TH CHAR OF NAME LSL 8 POSITION 4TH & 5TH CHARS IN B REG STB MSNAM+2 * JSB MESSS CALL RTE MESSAGE PROCESSOR DEF *+3 DEF OFMES "OF,XXXXX,1" DEF K10 NOP JMP UPMON NOW GO & RESCHEDULE IT * * THIS CODE CHECKS MONITOR STATUS TO SEE IF IT HAS ABORTED CKMON LDA MSEGA,I MONITORS ID SEGMENT ADDRESS RAL,CLE,ERA CLEAR OFF SIGN BIT SZA,RSS ADDR SPECIFIED? JMP NXLST NO ADA K15 COMPUTE ADDR OF STATUS LDA 0,I AND K15 ISOLATE STATUS BITS SZA SKIP IF DORMANT JMP NXLST ELSE MONITOR IS STILL GOING * * RESCHEDULE MONITOR UPMON LDA MCLSA,I GET CLASS NUMBER OF MONITOR RAL,CLE,ERA CLEAR SIGN BIT STA PRAM1 LDB NPNT,I 1ST 2 CHARS OF MONITOR NAME CPB RFASC IS IT "RF" JMP RFAGO DO "RFAM" SCHEDULE * JSB EXEC SCHEDULE MONITOR, PASS CLASS NUMBER DEF *+4 DEF K10N NPNT NOP ADDR OF MONITOR NAME DEF PRAM1 NOP JMP NXLST * RFAGO JSB EXEC SCHEDULE "RFAM" DEF *+7 DEF K10N SCHEDULE WITH "NO ABORT" DEF RFASC DEF K99 DEF #RFSZ NUMBER OF RFA ENTRIES FROM "RES" DEF PRAM1 CLASS NUMBER DEF #RXCL RFAEX CLASS NOP * * DONE WITH THIS SLAVE LIST, START ON NEXT NXLST ISZ NPNT ISZ NPNT ISZ NPNT UPDATE POINTER TO MONITOR NAME ISZ LPNT POINT TO NEXT LIST HEADER ADDRESS LDA ST.LS ADA B400 NEXT SLAVE/STREAM ID STA ST.LS ISZ LCNT COUNT # OF MONITORS JMP CKLST PROCESS NEXT LIST * * DONE WITH SLAVE MONITOR/TRANSACTION PROCESSING * SKP * * PROCESS MASTER TCBS * LDB #LDEF ADDR OF LIST HEADER ADDRS INB LDB 1,I GET ADDR OF MASTER HEADER CKMST STB LSTAD SAVE ADDR OF NEXT TCB'S ADDR CKMS2 LDB LSTAD PICK-UP ADDR OF ADDR OF NEXT TCB JSB LODWD (CROSS)LOAD ADDR OF NEXT TCB SZA,RSS JMP RSCHD NO MORE MASTER TCBS TO PROCESS * JSB TSTCB UPDATE THIS TCB'S TIME JMP CKMST DIDN'T TIME-OUT, DO NEXT TCB * * MASTER TCB HAS TIMED OUT * ADB K2 POINT TO 3RD WORD OF MASTER TCB JSB LODWD (CROSS)LOAD CLASS NUMBER IOR BIT15 CLASS # WITH "NO WAIT" BIT SET STA PRAM1 * INB POINT TO 4TH WORD OF MASTER TCB JSB LODWD (CROSS)LOAD ID SEGMENT ADDRESS RAL,CLE,ERA CLEAR OFF SIGN BIT ADA K15 POINT TO STATUS LDA 0,I AND K15 ISOLATE STATUS SZA,RSS DORMANT? JMP CREPT YES, CLEAR IT ALL CPA K3 IS IT "WAIT" STATE? JMP MWAIT YES CPA K2 IS IT IN I/O SUSPEND? JSB EQTIM YES, CHECK/SET EQT15 JMP NXMST * * MASTER REQUESTER IS IN STATE 3 AFTER TCB TIMEOUT MWAIT ADB N2 POINT TO 2ND TCB WORD JSB LODWD (CROSS)LOAD IT SSA,RSS TEST ITS I/O COMPLETION FLAG JMP NXMST NOT SET, DO NOTHING * * WRITE A NULL REQUEST INTO THE MASTER REQUESTERS CLASS JSB EXEC DEF *+8 DEF K20N CLASS WRITE/READ, NO ABORT DEF K0 DEF DUMMY DEF K0 ZERO LENGTH DEF DUMMY DEF DUMMY DEF PRAM1 CLASS NUMBER * K0 NOP * NXMST LDB XACTA GET ADDR OF NEXT TCB ADDR JMP CKMST GO CHECK FOR NEXT TCB * * MASTER REQUESTER IS DORMANT, CLEAR CLASS AND TCB * CREPT CCA SET THE RELEASE RE-TRY SWITCH STA TEMP TO -1 * CLRTN JSB EXEC GO TO RTE TO RELEASE CLASS NUMBER DEF *+5 DEF K21N CLASS GET/NO ABORT DEF PRAM1 MASTER CLASS/RELEASE/NO WAIT DEF K0 DEF K0 RSS IGNORE ERRORS ISZ TEMP RELEASE PROCESSING COMPLETED? JMP CLRES YES. GO TO CLEAR THE TCB INA,SZA NO. ARE ALL PENDING REQUESTS CLEARED? JMP CREPT NO. CONTINUE TO CLEAR REQUESTS * LDA PRAM1 GET THE CLASS NUMBER AGAIN AND CLMSK EXCLUDE THE NO-DE-ALLOCATION BIT(#13) STA PRAM1 RESTORE THE MODIFIED CLASS WORD JMP CLRTN RETURN FOR FINAL DE-ALLOCATION * * NOW CLEAR OUT THE MASTER REQUESTERS TCB CLRES JSB #RSAX CALL #RSAX TO PURGE MASTER TCB DEF *+4 DEF K3 DEF K1 STREAM-LIST = MASTER DEF PRAM1 CLASS NUMBER * SZA,RSS SKIP IF TCB NOT DELETED, IGNORE REST JMP CKMS2 CONTINUE WITH NEXT TCB ON CHAIN * SKP * * RESCHEDULE "GRPM","SRPM", "QCLM", OR "RFAEX" IF THEY ARE DORMANT * RSCHD JSB EXEC TRY TO SCHEDULE GRPM (IF DORMANT) DEF *+3 DEF K10N DEF NGRPM NOP * JSB EXEC TRY TO SCHEDULE SRPM (IF DORMANT) DEF *+3 DEF K10N DEF NSRPM NOP * JSB EXEC TRY TO SCHEDULE QCLM (IF DORMANT) DEF *+3 DEF K10N DEF NQCLM NOP * SKP * * CHECK FOR DOWNED COMMUNICATION LINES * LDA LUMAX NUMBER OF LOGICAL UNITS CMA,INA STA LCNT SET COUNTER LDA B101 STA LU MODE= 1 FOR "ENABLE LISTEN" LDA DRT ADDR OF DEVICE REFERENCE TABLE UPEQ2 STA LPNT LDA 0,I PICK-UP DRT ENTRY AND B77 ISOLATE EQT NUMBER ADA N1 MPY K15 REL.POS. IN EQT ADA EQTA POINT TO 1ST WORD OF EQT ADA K4 ADDR OF EQT5 LDB 0 LDA 0,I CONTENTS OF EQT 5 ALF,ALF AND B77 ISOLATE EQUIPMENT TYPE CODE CPA B65 DVR65? JMP UPEQ4 YES, SEE IF IT'S UP * UPEQ3 ISZ LU BUMP LU IN CONTROL WORD LDA LPNT INA INCREMENT DRT POINTER ISZ LCNT JMP UPEQ2 PROCESS NEXT DRT ENTRY * * ALL LU'S HAVE BEEN CHECKED, EXIT UPLIN * JSB EXEC DEF *+2 DEF K6N * * PROCESS COMMUNICATIONS EQT * UPEQ4 ADB K7 POINT TO EQT12 DLD 1,I GET CONTENTS OF EQT12 & EQT13 RAL,RAL ALF,SLA IS IT IN LISTEN MODE(BIT 10)? JMP UPEQ3 YES, OK ADB K5 COMPUTE ADDR OF EQTX6 LDA 1,I SZA,RSS HAS THIS EQT BEEN INITIALIZED? JMP UPEQ3 NO * * ISSUE AN "ENABLE LISTEN" REQUEST JSB EXEC DEF *+3 DEF K3N DEF LU CONTROL MODE = 1 NOP JMP UPEQ3 SKP * * SUBROUTINES * SPC 2 * * THIS ROUTINE BUMPS THE TIMEOUT IN A TCB * TSTCB NOP LDB 0 STB XACTA SAVE ADDRESS OF THIS TRANSACTION IFZ LIA 1 ALF,SLA IS SW REG BIT 12 SET? JSB LOGER YES, LOG TCB ON LU #6 XIF INB POINT TO 2ND WORD OF TCB JSB LODWD (CROSS)LOAD TIMER AND B377 ISOLATE IT CPA B377 IS IT ABOUT TO ROLL OVER? JMP TSTC5 YES, DON'T BUMP IT, RETURN + 2 * JSB LODWD (CROSS)LOAD TIMER AGAIN INA BUMP TIMER JSB $LIBR LOWER FENCE NOP MODI1 NOP RSS HERE IF RTE-III OR RTE-IV JMP TSTC3 XSA 1,I STORE INTO SYSTEM MAPPED LOCATION RSS * * BELOW INSTRUCTION IS EXECUTED FOR RTE-II SYSTEMS ONLY TSTC3 STA 1,I STORE UPDATED TIMER IN TCB JSB $LIBX RAISE FENCE DEF *+1 DEF *+2 * TSTC5 ISZ TSTCB RETURN +2 FOR TCB TIMED-OUT LDB XACTA TCB ADDR INTO B REG JMP TSTCB,I RETURN SPC 3 * * IF EQT15 IS ZERO, SET IT TO -1 TO FORCE A QUICK DRIVER TIMEOUT * EQTIM NOP JSB GTEQT COMPUTE EQT ADDRESS ADB K14 POINT TO EQT15 LDA 1,I PICK-UP CURRENT TIMER SZA IS IT RUNNING? JMP EQTIM,I YES, LEAVE IT ALONE CCA JSB $LIBR LOWER FENCE NOP STA 1,I SET QUICK TIMEOUT (-1) IN EQT15 JSB $LIBX RAISE FENCE DEF EQTIM SPC 3 * * THIS ROUTINE COMPUTES EQT ADDRESS FROM SELECT CODE * GTEQT NOP LDB XACTA ADDR OF TRANSACTION INB JSB LODWD (CROSS)LOAD 2ND WORD ALF,ALF RIGHT JUSTIFY SELECT CODE AND B77 ISOLATE IT ADA INTBA USE IT TO INDEX INTERRUPT TABLE ADA N6 TABLE STARTS AT 6 LDB 0,I LOAD EQT ADDRESS JMP GTEQT,I RETURN IT IN B REG SPC 3 * * SUBROUTINE TO LOAD WORD FROM ALTERNATE MAP (IF RTE-III OR IV) * LODWD NOP MODI2 LDA 1,I GET WORD FROM TCB (RSS IF DMS SYSTEM) JMP LODWD,I RETURN IF RTE-II XLA 1,I LOAD WORD FROM ALTERNATE MAP JMP LODWD,I SKP * * DATA AREA * PRAM1 NOP LU NOP RNCW NOP LPNT NOP LCNT NOP CNTR NOP ST.LS NOP XACTA NOP LSTAD NOP MCLSA NOP MSEGA NOP TEMP NOP TAGS DEC 0,0 DUMMY NOP * K1 DEC 1 K2 DEC 2 K3 DEC 3 K4 DEC 4 K5 DEC 5 K7 DEC 7 K10 DEC 10 K14 DEC 14 K15 DEC 15 K99 DEC 99 B65 OCT 65 B77 OCT 77 COMMA OCT 54 B101 OCT 101 B377 OCT 377 B400 OCT 400 BIT15 OCT 100000 K3N OCT 100003 K6N OCT 100006 K10N OCT 100012 K20N OCT 100024 K21N OCT 100025 GLCW OCT 40006 GLOBAL RN LOCK/CLEAR - NO ABORT SCMSK OCT 037400 CLMSK OCT 157777 N1 DEC -1 N2 DEC -2 N6 DEC -6 N10 DEC -10 * OFMES ASC 1,OF MSNAM BSS 3 ASC 1,,1 * QMES ASC 10, SYSTEM IS QUIESCENT * NGRPM ASC 3,GRPM NSRPM ASC 3,SRPM NQCLM ASC 3,QCLM * NAMES DEF *+1 LIST OF SLAVE MONITOR NAMES ASC 3,SMON 0 ASC 3,DLIST 1 ASC 3,PLOS 2 ASC 3,NPRGL 3 ASC 3,PTOPM 4 ASC 3,EXECM 5 RFASC ASC 3,RFAM 6 ASC 3,OPERM 7 ASC 3,PLOSB 8 ASC 3,PROGL 9 * IFZ * NEND DEF * SKP * * THIS ROUTINE IS CALLED TO LOG AN ACTIVE TCB ON LU 6 * LOGER NOP INB 2ND WORD OF TCB JSB LODWD ALF,ALF RIGHT JUSTIFY SELECT CODE JSB CVOCT CONVERT IT TO ASCII STA SC STORE IN PRINT LINE * JSB LODWD CONVERT LOW 2 DIGITS OF TIMER JSB CVOCT TO OCTAL ASCII STA TIMER+1 JSB LODWD ALF,ALF RAL,RAL RIGHT JUSTIFY HIGH DIGIT AND K3 IOR ASC.0 CONVERT IT TO ASCII STA TIMER * LDA NPNT ADDR OF CURRENT MONITOR NAME CPA NEND IS IT A MASTER TCB? JMP LOG5 YES, USE NAME OF MASTER REQUESTER * JSB LODWD SLAVE TCB, NOW GET BREAK FLAG RAL INTO BIT 0 AND K1 IOR ASC.0 ASCII 0 OR 1 STA BREAK STORE IN PRINT LINE * JSB LODWD GET "D" BIT RAL,RAL AND K1 IOR ASC.0 ASCII 0 OR 1 STA DBIT STORE IN PRINT LINE * INB POINT TO TIME TAGS IN TCB LDA T1AD STA PNT1 POINT TO PRINT LINE FIELD JSB OCT3 CONVERT TO OCTAL ASCII INB NOW 2ND WORD OF TIME TAGS ISZ PNT1 ISZ PNT1 JSB OCT3 TO OCTAL ASCII * LDB NPNT ADDR OF MONITOR NAME LDA K35 LENGTH OF PRINT LINE JMP LOG8 * * ENTER HERE FOR MASTER TCB LOG5 ADB K2 POINT TO ID SEG ADDR IN TCB JSB LODWD PICK-UP ID SEG ADDR LDB 0 RBL,CLE,ERB CLEAR OFF BIT 15 ADB K12 POINT TO NAME FIELD LDA K14 PRINT SHORT RECORD FOR MASTER TCB * LOG8 STA RECL SAVE PRINT LINE LENGTH (WORDS) LDA 1,I STA NAMER 1ST 2 CHARS OF NAME TO PRINT LINE INB LDA 1,I STA NAMER+1 3RD & 4TH CHARS OF NAME INB LDA 1,I AND HIBYT IOR LBLNK FORCE BLANK IN RHW STA NAMER+2 5TH WORD OF NAME + BLANK * JSB EXEC LOG PRINT LINE TO LU #6 DEF *+5 DEF K2 DEF K6 DEF LOGL DEF RECL * LDB XACTA RESTORE TCB ADDR JMP LOGER,I RETURN TO NORMAL PROCESSING * * CONVERT BINARY WORD TO 6 OCTAL ASCII DIGITS * OCT3 NOP JSB LODWD ALF RIGHT JUSTIFY BITS 15-12 AND K15 JSB CVOCT CONVERT 1ST TWO TO ASCII STA PNT1,I STORE IN PRINT LINE ISZ PNT1 JSB LODWD ALF,ALF RAL,RAL RIGHT JUSTIFY BITS 11-6 JSB CVOCT CONVERT 3RD & 4TH DIGITS STA PNT1,I ISZ PNT1 JSB LODWD JSB CVOCT CONVERT 5TH & 6TH DIGITS STA PNT1,I JMP OCT3,I RETURN * * CONVERT LEAST SIGNIFICANT 6 BITS IN A REG TO OCTAL ASCII * CVOCT NOP STA TEMP1 AND B70 ALF,RAL BITS 5-3 IN LHW STA TEMP2 LDA TEMP1 AND K7 ISOLATE LOWER OCTAL DIGIT IOR TEMP2 INCLUDE LHW IOR ASC00 FORM ASCII NUMERICS JMP CVOCT,I * * DATA FOR "LOGER" * TEMP1 NOP TEMP2 NOP RECL NOP PNT1 NOP K6 DEC 6 K12 DEC 12 K35 DEC 35 B70 OCT 70 LBLNK OCT 40 HIBYT OCT 177400 ASC.0 ASC 1, 0 ASC00 ASC 1,00 T1AD DEF TAG1 * * THIS IS THE PRINT LINE LOGL ASC 01, NAMER BSS 3 ASC 03,S.C.= SC BSS 1 ASC 04, TIMER= TIMER BSS 2 ASC 03, BRK= BREAK BSS 1 ASC 03, DBIT= DBIT BSS 1 ASC 06, TIME-TAG= TAG1 BSS 3 ASC 01, / BSS 3 * XIF * END UPLIN