IDENT BYTE1 ************************************************************************ ** * ________________ * SUBROUTINE GBYTE * ________________ * * PURPOSE: TO MOVE A BYTE OF INFORMATION, SIZE (1 THRU 64), INTO * A WORD, RIGHT JUSTIFIED, ZERO FILLED. * * ENTRY: CALLED BY NAME FROM THE CALLING SEQUENCE: * * CALL GBYTE(PACKED,UNPACKED,BIT,NBITS) * * WHERE: * * PACKED - THE WORD OR ARRAY OF WORDS CONTAINING * THE PACKED INFORMATION. * * UNPACKED - THE WORD THE INFORMATION WILL BE PLACED IN. * * BIT - THE BEGINNING BIT IN PACKED WHERE THE * INFORMATION WILL BE FETCHED. * * NBITS - THE NUMBER OF BITS IN THE BYTE OF INFORMATION. * * EXIT: ON EXIT UNPACKED WILL CONTAIN A RIGHT JUSTIFIED,ZERO FILLED * BYTE OF NBITS. * * TIMING: APPROXIMATELY 750 NSEC * * WRITTEN BY: DAVID KITTS * 26 APRIL 82 * ************************************************************************ ** * ________________ * SUBROUTINE SBYTE * ________________ * * PURPOSE: TO MOVE A BYTE OF INFORMATION, SIZE (1 THRU 64), INTO * AN ARRAY OF WORDS STARTING AT A GIVEN POSITION FOR A GIVEN * NUMBER BITS. * * ENTRY: CALLED BY NAME FROM THE CALLING SEQUENCE: * * CALL SBYTE(PACKED,UNPACKED,BIT,NBITS) * * WHERE: * * PACKED - THE WORD OR ARRAY OF WORDS CONTAINING * THE PACKED INFORMATION. * * UNPACKED - THE WORD THE INFORMATION WILL BE FETCHED FROM. * * BIT - THE BEGINNING BIT IN PACKED WHERE THE * INFORMATION WILL BE STORED. * * NBITS - THE NUMBER OF BITS IN THE BYTE OF INFORMATION. * * EXIT: ON EXIT PACKED WILL CONTAIN THE BYTE OF INFORMATION AT * POSITION BIT, AND SIZE NBITS. * * TIMING: APPROXIMATELY 750 NSEC * * WRITTEN BY: DAVID KITTS * 26 APRIL 82 * ************************************************************************ ** * _________________ * SUBROUTINE GBYTES * _________________ * * PURPOSE: TO MOVE A SERIES OF BYTES, SIZE (1 THRU 64), INTO * AN ARRAY OF WORDS, RIGHT JUSTIFIED, ZERO FILLED. * * ENTRY: CALLED BY NAME FROM THE CALLING SEQUENCE: * * CALL GBYTES(PACKED,UNPACKED,BIT,NBITS,SKIP,ITER) * * WHERE: * * PACKED - THE WORD OR ARRAY OF WORDS CONTAINING * THE PACKED INFORMATION. * * UNPACKED - THE ARRAY OF WORDS THE INFORMATION * WILL BE PLACED IN. * * BIT - THE BEGINNING BIT IN PACKED WHERE THE * INFORMATION WILL BE FETCHED. * * NBITS - THE NUMBER OF BITS IN THE BYTE OF INFORMATION. * * SKIP - THE NUMBER OF BITS SKIPPED EACH ITERATION, * THE SKIP IS COUNTED RIGHT JUSTIFIED FOR EACH BYTE * * ITER - THE NUMBER OF BYTES TO BE MOVED * * EXIT: ON EXIT UNPACKED WILL CONTAIN A RIGHT JUSTIFIED, ZERO FILLED * BYTE OF NBITS. * * TIMING: APPROXIMATELY 512 NSEC PER BYTE (NOT INCLUDING START UP) * * WRITTEN BY: DAVID KITTS * 26 APRIL 82 * ************************************************************************ ** * _________________ * SUBROUTINE SBYTES * _________________ * * PURPOSE: TO MOVE A SERIES OF BYTES, SIZE (1 THRU 64), INTO * AN ARRAY OF WORDS, STARTING AT A GIVEN BIT POSITION, OF * GIVEN SIZE, SKIPPING A GIVEN NUMBER OF BITS, AND A GIVEN * NUMBER OF BYTES. * * ENTRY: CALLED BY NAME FROM THE CALLING SEQUENCE: * * CALL SBYTES(PACKED,UNPACKED,BIT,NBITS,SKIP,ITER) * * WHERE: * * PACKED - THE WORD OR ARRAY OF WORDS CONTAINING * THE PACKED INFORMATION. * * UNPACKED - THE ARRAY OF WORDS THE INFORMATION * WILL BE FETCHED FROM. * * BIT - THE BEGINNING BIT IN PACKED WHERE THE * INFORMATION WILL BE FETCHED. * * NBITS - THE NUMBER OF BITS IN THE BYTE OF INFORMATION. * * SKIP - THE NUMBER OF BITS SKIPPED EACH ITERATION, * THE SKIP IS COUNTED RIGHT JUSTIFIED FOR EACH BYTE * * ITER - THE NUMBER OF BYTES TO BE MOVED * * EXIT: ON EXIT PACKED WILL CONTAIN THE OLD INFORMATION STRING OF * BITS PLUS THE NEW BYTES OF INFORMATION. * * TIMING: APPROXIMATELY 700 NSEC PER BYTE (NOT INCLUDING START UP) * * WRITTEN BY: DAVID KITTS * 26 APRIL 82 * ************************************************************************ ARY = 1 ARRAY POINTER DST = 2 DESTINATION POINTER POS = 3 BIT POSITION POINTER SIZ = 4 SIZE POINTER OFST = 5 OFSET VALUE SHFT = 6 SHIFT VALUE GBYTE ENTER NP=4 ARGADD A.POS,POS GET BIT POSITION POINTER ARGADD A.SIZ,SIZ GET SIZ POINTER ARGADD A.ARY,ARY FETCH ARRAY POINTER ARGADD A.DST,DST GET DESTINATION POINTER S1 0,A.POS FETCH THE POSITION VALUE S5 0,A.SIZ FETCH BYTE SIZE S4 <6 MAKE MASK FOR SHIFT COUNT S6 0 CLEAR SHIFT ACCUMULATOR S3 S4&S1 ISOLATE THE SHIFT COUNT S1 S1>6 DIVIDE BY 64 A.OFST S1 SET UP OFFSET A.SHFT S3 SET UP SHIFT COUNT A.OFST A.OFST+A.ARY POINT TO WORD IN QUESTION S3 0,A.OFST FETCH WORD1 S4 1,A.OFST FETCH WORD2 A.SIZ S5 SET BYTE SIZE FOR SHIFT S3 S3,S46 DIVIDE THE POSITION BY 64 A.OFST S1 SET UP THE OFFSET A.SHFT S3 SET SHIFT COUNT A.ARY A.ARY+A.OFST POINT TO ARRAY ELEMENT S6 0,A.ARY FETCH DESTINATION WORD S7 1,A.ARY FETCH SECOND DESTINATION WORD A.OFST 64 SET UP BASE FOR ADDRESS CALCULATION A7 A.OFST-A.SIZ SET UP SHIFT COUNT TO LEFT JUST BYTE S5 S56 DIVIDE BY 64 A.OFST S1 SET UP OFFSET A.OFST A.OFST+A.ARY POINT TO WORD IN QUESTION S3 0,A.OFST FETCH WORD1 S4 1,A.OFST FETCH WORD2 S1 T.TPOS S2 T.TSKP S6 S2+S1 FIND THE NEW POSITION T.TPOS S6 SAVE THE NEXT POSITION S1 T.TRPT FETCH REPEAT COUNT S2 1 S1 S1-S2 COUNT A REPITION A.SHFT S7 SET UP SHIFT COUNT S0 S1 SET UP LOOP TEST T.TRPT S1 SAVE REPITION COUNT S3 S3,S46 DIVIDE THE POSITION BY 64 A.OFST S1 SET UP THE OFFSET A.SHFT S3 SET SHIFT COUNT A.OFST A.ARY+A.OFST POINT TO ARRAY ELEMENT A.POS 64 SET UP BASE FOR ADDRESS CALCULATION A7 A.POS-A.SIZ SET UP SHIFT COUNT TO LEFT JUST BYTE S1 T.TRPT FETCH REPEAT COUNT S3 T.TPOS FETCH CURRENT POSITION S4 T.TSKP FETCH SKIP COUNT S5 1 S1 S1-S5 COUNT A REPITION S6 0,A.OFST FETCH DESTINATION WORD S7 1,A.OFST FETCH SECOND DESTINATION WORD S3 S3+S4 INCREMENT POSITION S0 S1 SET UP LOOP TEST S5 <64 T.TPOS S3 SAVE CURRENT POSITION T.TRPT S1 SAVE REPITION COUNT S5 S5