.TITLE SNAP / / 26 JUN 78 (023; PDH) CHANGE OUTPUT LUN TO 16 FROM 6 / 23 MAY 78 (022; PDH) SAVE X10 WHEN DOING I/O, IN CASE 'SNAP' CALLED / BY EXEC MODE TASK; '.BLOCK N' IN .ASCII STATEMENT / MUST BE INITIALIZED BECAUSE THE SYSTEM INITIALIZES / ALL '.BLOCK' AREAS TO 400000 (UNDEFINED VARIABLE) / 26 JAN 77 (021; PDH) CHANGE ORDER OF SAVING FP REGS FOR GUARD BIT / 6 JAN 77 (020; PDH) OUTPUT ADDRESS WITH VARIABLES / 14 NOV 76 (019; PDH) CORRECT OUTPUT OF FMQ WHEN FMA IS NEGATIVE / 5 OCT 76 (018; PDH) STEP PAST ARGUMENTS WHEN NO VARIABLE OUTPUT / 23 AUG 76 (017; PDH) CHANGE MACRO DEFINITION / 16 AUG 76 (015; PDH) TIDY UP HEADING A LITTLE. / 13 AUG 76 (010; PDH) OMIT VARIABLE OUTPUT ON DEMAND / 12 AUG 76 (005; PDH) CONVERT DATE & TIME TO DECIMAL / 30 JUL 76 - PAUL HENDERSON / / SUBROUTINE TO PERFORM THE ACTUAL OUTPUT SPECIFIED BY THE / 'SNAP' MACRO. / THE 'SNAP' MACRO HAS THE FOLLOWING INVOCATION: / / SNAP ID,CODE,BEGIN,END / / WHERE: ID IS A DECIMAL NUMBER NOT GREATER THAN 511 / CODE SPECIFIES WHICH REGISTERS TO DUMP / BEGIN IS THE ADDRESS TO START DISPLAYING CORE LOCATIONS / END IS THE LAST ADDRESS TO DISPLAY / / PRESENTLY IMPLEMENTED VALUES FOR CODE ARE: / / 0 DISPLAY SPECIFIED VARIABLES ONLY / 1 DISPLAY L AC MQ XR LR IN ADDITION TO VARIABLES / 2 DISPLAY FLOATING POINT REGISTERS / 4 DISPLAY CONTENTS OF AUTO-INDEX REGISTERS. / 400 OMIT DISPLAY OF SPECIFIED VARIABLES / / THE BITS ARE TESTED INDIVIDUALLY, SO THE NUMBERS MAY BE MICRO-CODED. / .DEC LP=16 / LUN TO WHICH THE SNAP IS OUTPUT /(023) .OCT / X10=10 X11=11 IDX=ISZ / INDEX POINTER, SKIP NEVER EXPECTED SET=ISZ / SET A FLAG NON-ZERO LJE=715400 SJE=715600 UNDLD=713170 UNDST=713770 UNDLQ=715170 UNSWQ=715270 / .GLOBL .SNAP,PACK / .EJECT / IMMEDIATELY ON ENTRY, SAVE ALL REGISTERS, AS THEY ARE NOT SAVED / BY THE SYSTEM ON AN I/O CALL / .SNAP XX DZM VFLAG / CLEAR 'VARIABLES BEING PRINTED' FLAG DAC AC / SAVE AC CLA!RAL DAC LINK PXA DAC XR PLA DAC LR LACQ DAC MQ LACS TCA AND (77 XOR (640400 / PREPARE FOR STEP COUNTER RESTORATION DAC SC / (THIS IS THE WAY THE SYSTEM DOES IT) SJE; JEA / STORE JEA TO SAVE GUARD BIT UNDST; EPA / SAVE EPA, FMA1, FMA2 UNSWQ; 0 UNDST; FMQ / SAVE FMQ1, FMQ2 LAC FMQ+1 AND (377777 DAC FMQ1 / MOVE FMQ VALUES TO PROPER PLACE LAC FMQ+2 / FOR OUTPUTTING DAC FMQ2 LAC (X10 DAC GETP LAC (X10SAV DAC PUTP LAW -10 DAC COUNT SAVEL1 LAC* GETP DAC* PUTP / SAVE AUTO-INDEX REGISTERS IDX GETP IDX PUTP ISZ COUNT JMP SAVEL1 / .EJECT / THE REGISTERS HAVE NOW BEEN SAVED. BEGIN TO PERFORM THE / EXPECTED OUTPUT. / GET THE NAME OF THE CALLING TASK CONVERT TO ASCII, AND / STORE IN THE HEADER LINE. THE COMMENTS HAVE ASSUMED THAT / THE NAME OF THE TASK IS 'ABCDEF'. FOR PURPOSES OF FORMATTING, / THE ASCII GENERATED WILL BE: ' ABCD' 'EF, ' / ONCE CAL TSKNAM / GET THE NAME / / THERE MUST BE AT LEAST 100 (OCTAL) WORDS IN THE IMAGE BUFFER WHICH / EXTENDS TO 'GDATE-1'. / IMAGE LAC (TSKNAM+2 / THE IMAGE BUFFER LIVES HERE IN DAC GETP / ONCE-ONLY CODE TO GET THE NAME LAW -2 / OF THE CALLING TASK AND TO DAC LCOUNT / BUILD THE HEADER. IM1 LAW -3 DAC DCOUNT / 3 CHARACTERS PER .SIXBT WORD LAC* GETP / GET FIRST WORD LMQ / AND STASH IT IN MQ IM2 LLSS 1006 / SHIFT OUT A CHARACTER SNA JMP OKLONG / HAVE DISCOVERED NULL CHAR. END OF NAME IDX COUNT / COUNT NUMBER OF NON-ZERO CHARACTERS ISZ DCOUNT JMP IM2 / TEST NEXT CHARACTER THIS WORD IDX GETP / POINT TO NEXT WORD ISZ LCOUNT / END OF NAME? JMP IM1 / NOT YET. JMP OKLONG / YES. (HAVE COUNTED 6 CHARACTERS) / CKNAME XX ISZ COUNT / SUBROUTINE TO CHECK IF WE HAVE JMP* CKNAME / PACKED UP ENOUGH CHARACTERS FOR JMP NAMEND / THE TASK NAME. / OKLONG LAC COUNT / FORM 2'S COMPLEMENT OF CHARACTER COUNT TCA DAC COUNT LAC TSKNAM+2 SPA!STL / THIS OPERATION SETS THE LINK CORRECTLY CLL / TO CONVERT FROM .SIXBT TO 7-BIT LRS 10 / SHIFT TO CORRECT CHARACTER PLACE AND (003760 / SAVE ONLY DESIRED CHARACTER XOR (200000 / LEADING SPACE DAC TKNM / HAVE NOW GENERATED ' A' JMS CKNAME / .EJECT LAC TSKNAM+2 LLS 6 / EXTRACT 2ND CHARACTER SPA!STL CLL LRS 17 AND (17 XOR TKNM DAC TKNM LACQ AND (700000 DAC TKNM+1 / ' AB' JMS CKNAME LAC TSKNAM+2 / 3RD CHARACTER LLS 14 SPA!STL CLL LRS 4 AND (077400 XOR TKNM+1 DAC TKNM+1 / ' ABC' JMS CKNAME LAC TSKNAM+3 / 4TH CHARACTER SPA!STL CLL LRS 13 AND (000376 XOR TKNM+1 DAC TKNM+1 / ' ABCD' JMS CKNAME LAC TSKNAM+3 / 5TH CHARACTER LLS 6 SPA!STL CLL RAR AND (774000 DAC TKNM+2 / ' ABCD' 'E' JMS CKNAME LAC TSKNAM+3 / LAST CHARACTER LLS 14 SPA!STL CLL LRS 10 AND (003760 XOR TKNM+2 DAC TKNM+2 / ' ABCD' 'EF, ' NAMEND LAC .+2 / HAVE NOW PACKED UP COMPLETE TASK NAME. DAC ONCE / BYPASS AFTER 1ST TIME JMP GDATE / .EJECT / GET DATE AND TIME FROM SYSTEM / GDATE CAL DATE LAC DATE+3 / DAY JMS TWOC / CONVERT TO TWO ASCII CHARACTERS (PACKED) DAC DD LAC DATE+2 / MONTH AAC -1 RCL TAD (MONTHS / POINT TO CORRECT MONTH DAC GETP LAC* GETP IDX GETP DAC MONTH / MOVE ASCII MONTH TO HEADER BUFFER LAC* GETP DAC MONTH+1 LAC DATE+4 / YEAR JMS TWOC DAC YY LAC DATE+5 / HOUR JMS TWOC DAC HH LAC DATE+6 / MINUTE JMS TWOC DAC MM LAC DATE+7 / SECOND JMS TWOC DAC SS / .EJECT / GET CALLER SPECIFIED ID AND PUT IN HEADER / LAC* .SNAP AND (777 / TRIM OFF CODE BITS JMS THREEC / PACK FIRST TWO DIGITS DAC ID LAC CODEID CLQ!LRSS 12 / MOVE 3RD DIGIT TO CORRECT PLACE IN MQ LAC (030032 / DIGIT IN 4TH, CR IN 5TH CHAR POSITION OMQ / ADD IN DIGIT PART DAC ID+1 / HEADER IS NOW READY FOR OUTPUT CAL ATTACH / ATTACH OUTPUT DEVICE JMS WAIT LAC (BLANK JMS WRITEH / OUTPUT 3 BLANK LINES AT BEGINNING JMS WAIT LAC (HEADER JMS WRITEH / .EJECT / WE HAVE OUTPUT THE HEADER. DISPLAY THE SPECIFIED REGISTERS. / LAC* .SNAP / GET CODE IDX .SNAP / POINT TO FIRST VARIABLE ADDRESS DAC CODE / SAVE TO TEST FOR CODE = 400+N SWHA RAR DAC CODEID / SAVE UNTESTED PART OF CODE SNL / TEST FOR L, AC, MQ, XR, LR OUTPUT JMP FPP JMS WAIT LAC (HEAD1 / HEADER FOR CODE=1 JMS WRITEH LAC (LINK-1 DAC* (X10 LAW -5 JMS SHOW / OUTPUT 5 WORDS, BEGINNING AT 'LINK' / FPP LAC CODEID RAR DAC CODEID SNL JMP AUINDX JMS WAIT LAC (HEAD2 / HEADER FOR CODE=2 JMS WRITEH LAC (EPA-1 DAC* (X10 LAW -6 JMS SHOW / DISPLAY FLOATING POINT REGISTERS / AUINDX LAC CODEID RAR / / ANY NEW CODES MAY BE IMPLEMENTED BY SAVING UNTESTED CODE IN 'CODEID', / AND PERFORMING THE NEW TEST BEFORE OUTPUTTING SPECIFIED VARIABLES. / SNL JMP VAROUT JMS WAIT LAC (HEAD4 / HEADER FOR CODE=4 JMS WRITEH LAC (X10SAV-1 DAC* (X10 LAW -10 JMS SHOW / .EJECT / REGISTERS HAVE NOW BEEN DISPLAYED. OUTPUT THE VARIABLES / SPECIFIED IN THE CALLING SEQUENCE. / VAROUT JMS WAIT LAC CODE / ARE WE TO OMIT VARIABLE OUTPUT? SMA JMP VO2 IDX .SNAP / YES. STEP PAST ARGUMENTS IDX .SNAP JMP DTACH / THEN DETACH AND EXIT / VO2 SET VFLAG / SET 'VARIABLES BEING PRINTED' FLAG LAC (HEADV / HEADER FOR USER VARIABLES JMS WRITEH LAC* .SNAP / GET START ADDRESS IDX .SNAP DAC* (X10 LAC* .SNAP / GET COUNT IDX .SNAP JMS SHOW JMS WAIT / .EJECT / THE SPECIFIED OUTPUT IS NOW FINISHED. DETACH THE OUTPUT DEVICE, THEN / RESTORE ALL REGISTERS AND RETURN TO THE CALLING PROGRAM. / DTACH CAL DETACH JMS WAIT LAC (X10SAV DAC GETP LAC (X10 DAC PUTP LAW -10 DAC COUNT RESL1 LAC* GETP DAC* PUTP / RESTORE AUTO-INDEX REGISTERS IDX GETP IDX PUTP ISZ COUNT JMP RESL1 UNDLQ; FMQ / RESTORE FLOATING POINT REGISTERS UNDLD; EPA LJE; JEA LAC (400000 XCT SC / RESTORE STEP COUNTER LAC MQ LMQ LAC LR PAL LAC XR PAX LAC LINK RAR LAC AC JMP* .SNAP / RETURN TO CALLING PROGRAM / .EJECT / SUBROUTINE TO CONVERT 2 OCTAL DIGITS TO DECIMAL IN PACKED ASCII. THE / DIGITS ARE IN AC 12-17 ON ENTRY, AND ARE CONVERTED FIRST TO DECIMAL, / THEN TO 7-BIT, LEFT JUSTIFIED ASCII IN THE ACCUMULATOR ON EXIT. / THERE IS ALSO AN ENTRY TO CONVERT 3 DIGITS TO ASCII. THE FIRST / TWO DIGITS ARE CONVERTED AS ABOVE, AND THE NUMERICAL VALUE OF THE / THIRD DIGIT IS IN 'CODEID' ON EXIT. / THREEC XX DAC CODEID / 3 DIGIT ENTRY. SAVE VALUE LAC THREEC / MOVE RETURN ADDRESS DAC TWOC LAW -3 JMP TWOC2 / JUMP INTO TWO CHARACTER ROUTINE / TWOC XX DAC CODEID / STORE DIGITS TO BE CONVERTED LAW -2 TWOC2 DAC OFFSET / NUMBER OF DIGITS CALLED FOR LAW -3 DAC DCOUNT / ALWAYS CONVERT 3 DIGITS LAC (THREE / CONVERTED DIGITS DAC GETP LAC (DECDIG / POINTERS FOR THE CONVERSION DAC PUTP CVRT LAC* GETP / GET NEXT DIVISOR DAC DIVSR LAC CODEID / GET NUMBER TO BE CONVERTED CLL IDIV DIVSR XX DAC CODEID / SAVE NEW REMAINDER LACQ / GET DIVIDEND DAC* PUTP / PUT IN BUFFER IDX GETP / POINT TO NEXT DIVISOR IDX PUTP / POINT TO NEXT PLACE IN 'DECDIG' ISZ DCOUNT / FINISHED WITH CONVERSION? JMP CVRT / NO. DO ANOTHER DIGIT OFFSET XX / 'LAW -2' OR 'LAW -3' TAD PUTP DAC PUTP / BACK UP POINTER LAC* PUTP / GET 1ST CONVERTED VALUE IDX PUTP ALSS 7 / SHIFT FOR NEXT ASCII CHARACTER XOR* PUTP / GET 2ND CONVERTED VALUE XOR (014060 / INCLUDE THE ASCII CONVERSION ALS 4 / LEFT JUSTIFY THE 2 CHARACTERS JMP* TWOC / LEAVE WITH ASCII IN AC / .EJECT / SUBROUTINE TO OUTPUT HEADER. ENTER WITH ADDRESS OF HEADER IN AC. / WRITEH XX DAC LBUF / INSERT INTO WRITE CPB CAL WRITEB / BLANK LINE JMS WAIT CAL WRITEL / SPECIFIED LINE JMP* WRITEH / / SUBROUTINE TO WAIT FOR EVENT VARIABLE TO BE SET. IF EVENT VARIABLE / IS SET NEGATIVE, SHOW IT IN A TERMINAL I/O ERROR ON THE MCR TERMINAL. / WAIT XX CAL WAITF LAC EV / CHECK FOR GOOD EVENT VARIABLE SMA!TCA JMP* WAIT DAC CODEID / SAVE COMPLEMENTED EV LRSS 3 / SHIFT OUT LOW ORDER DIGIT CLQ!LRS 6 / TWO DIGITS NOW IN MQ LAC (6 / THIS CONVERTS TO ASCII LLSS 3 / FIRST CHARACTER NOW IN IMAGE POSITION ALSS 4 / MAKE ROOM FOR SECOND ASCII CONVERSION XOR (6 / INSERT THE CONVERSION LLSS 7 / LEFT JUSTIFY THE TWO CHARACTERS XOR (6 / CONVERSION FOR 3RD DIGIT DAC ERRNUM / INSERT IN ERROR BUFFER LAC CODEID CLQ!LLS 17 / PLACE 3RD DIGIT DAC ERRNUM+1 CAL WRTERR / ANNOUNCE ERROR ON MCR TERMINAL CAL (10 / AND EXIT. / .EJECT / SUBROUTINE TO OUTPUT THE DATA. LEADING ZEROS ARE CONVERTED TO SPACES, / AND ONLY 8 NUMBERS ARE OUTPUT PER LINE. / ON ENTRY, X10 IS POINTING AT THE DATA, AND THE AC CONTAINS THE / 2'S COMPLEMENT OF THE NUMBER OF DATA WORDS TO PROCESS. / SHOW XX DAC COUNT / STORE WORD COUNT SHOW1 LAW -10 DAC LCOUNT / 8 NUMBERS PER LINE LAC (IMAGE-1 DAC* (X11 LAC VFLAG / ARE WE PRINTING THE USER VARIABLES? SNA JMP SHOW2 / NO. NO ADDRESS NEEDED LAC* (X10 IAC / GET ADDRESS OF DATA JMS SHOWS / DISPLAY IT AS FIRST ITEM ON LINE LAW 57 / '/' SEPARATES ADDRESS FROM DATA DAC* X11 LAW 11 / TAB SEPARATES ADDRESS FROM DATA DAC* X11 / SHOW2 LAC* X10 / GET DATA ITEM JMS SHOWS LAW 11 DAC* X11 / TAB FOLLOWS THE NUMBER ISZ COUNT / HAVE WE PROCESSED THE REQUIRED DATA? SKP JMP LINEND / YES. TERMINATE OUTPUT ISZ LCOUNT / NO. HAVE WE FILLED THE LINE? JMP SHOW2 / NO. GO FOR MORE DATA / .EJECT LINEND LAW 15 / APPEND CARRIAGE RETURN TO LINE DAC* X11 LAC (IMAGE DAC PCK+1 LAC (LINE+2 DAC PCK+2 / POINTERS FOR PACK LAC* (X10 / SAVE X10 IN CASE EXEC MODE /(022) DAC X10KEP /(022) JMS WAIT / WAIT FOR PREVIOUS OUTPUT PCK JMS* PACK 0; 0 SMA JMP PCK LAC (LINE DAC LBUF / PUT HEADER POINTER IN CPB CAL WRITEL / WRITE OUT THE DATA LAC X10KEP / RESTORE X10 /(022) DAC* (X10 /(022) LAC COUNT / HAS THE TOTAL COUNT EXPIRED? SPA JMP SHOW1 / NO. PROCESS SOME MORE DATA JMP* SHOW / YES. RETURN / / SUBROUTINE TO OUTPUT EACH DATA WORD / SHOWS XX LMQ / SAVE DATA WORD IN MQ LAW -5 DAC DCOUNT / 5 DIGITS IN LOOP AND 1 AT END DAC LEAD0 / SET LEADING ZEROS FLAG SHOWS1 LLSS 1003 / SHIFT OUT A DIGIT SZA JMP STORE / CONVERT NON-ZERO VALUES TO ASCII LAC LEAD0 SNA / CHECK FOR LEADING ZERO JMP STORE LAW 40 / CONVERT LEADING ZERO TO SPACE JMP PUT STORE DZM LEAD0 / CLEAR LEADING ZERO FLAG AAC 60 PUT DAC* X11 / CONVERT TO ASCII AND STORE ISZ DCOUNT JMP SHOWS1 LLSS 1003 / SHIFT OUT FINAL DIGIT AAC 60 / FINAL DIGIT IS NEVER LEADING ZERO DAC* X11 JMP* SHOWS / .EJECT ATTACH 2400; EV; LP DETACH 2500; EV; LP DATE 24; EV; .BLOCK 6 TSKNAM 25; EV; .BLOCK 2 WAITF 20; EV WRTERR 2700; EV; 3; 2; IOERR WRITEL 2700; EV; LP; 2;LBUF WRITEB 2700; EV; LP; 2; BLANK MONTHS .ASCII ' JAN ' .ASCII ' FEB ' .ASCII ' MAR ' .ASCII ' APR ' .ASCII ' MAY ' .ASCII ' JUN ' .ASCII ' JUL ' .ASCII ' AUG ' .ASCII ' SEP ' .ASCII ' OCT ' .ASCII ' NOV ' .ASCII ' DEC ' BLANK 2002; 0; .ASCII ' '<15> HEADER 16002;VFLAG .ASCII '**** SNAP **** ' TKNM .ASCII ' A'<0><0><0><0><0><0>', ' DD 0; 0 / USE 0'S BECAUSE DD+1 NOT SET /(022) MONTH .BLOCK 2 YY .ASCII 'YY'<0>' ' HH .ASCII 'HH'<0>':' MM .ASCII 'MM'<0>':' SS .ASCII 'SS'<0>' ID=' ID .BLOCK 2 / HEAD1 7002;X10KEP .ASCII ' L'<11>' AC'<11>' MQ'<11>' XR'<11>' LR'<15> HEAD2 11002; 0 .ASCII ' EPA'<11>' FMA1'<11>' FMA2'<11>' FMQ1'<11>' FMQ2'<11> .ASCII ' JEA'<15> HEAD4 7002; 0 .ASCII <11>'AUTO-INDEX REGISTERS 10-17'<15> HEADV 4002; 0; .ASCII 'USER VARIABLES'<15> IOERR 7002;EV .ASCII 'SNAP I/O ERR -' ERRNUM .BLOCK 2 .ASCII ' LUN 6'<15> .EJECT LINE 22002; 0 .BLOCK 40 GETP;PUTP;COUNT;LCOUNT;DCOUNT;LEAD0 DECDIG;CODE / IMAGE BUFFER FOR OCTAL-DECIMAL CONVERSION CODEID / THIRD CONVERTED DIGIT LEFT HERE THREE 144; 12; 1 / TABLE OF CONVERSION VALUES FMQ .BLOCK 3 / ACTUAL STORAGE OF (EXP AND) FMQ / *** NOTE *** THE VARIABLES IN THE FOLLOWING LINES MUST NOT BE CHANGED / UNLESS YOU KNOW WHAT YOU ARE DOING. / LINK;AC;MQ;XR;LR;SC EPA;FMA1;FMA2;FMQ1;FMQ2;JEA X10SAV .BLOCK 10 .END