cdc:nos2.source:nam5871:lfgmovw
Table of Contents
LFGMOVW
Table Of Contents
- [00003] PROC LFGMOVW(AN,AA,BPOS,NWDS,IW60,CKSM,MEMIN)
- [00007] MOVE WORDS.
Source Code
- LFGMOVW.txt
- *DECK LFGMOVW
- USETEXT LFGWKBS
- PROC LFGMOVW(AN,AA,BPOS,NWDS,IW60,CKSM,MEMIN);
- BEGIN #MOVWD#
- *IF DEF,IMS
- #
- ** LFGMOVW - MOVE WORDS.
- *
- * JJ MCAFEE 75/10/01
- * M. E. VATCHER 81/02/23
- *
- * LFGMOVW MOVES AND SHIFTS LOAD DATA FROM AN INPUT ARRAY TO
- * A SM ARRAY.
- *
- * PROC LFGMOVW(AN,AA,BPOS,NWDS,IW60,CKSM,MEMIN)
- *
- * ENTRY AN STARTING WORD OF SOURCE ARRAY
- * AA STARTING WORD OF DESTINATION ARRAY
- * BPOS STARTING BIT POSITION IN DESTINATION ARRAY
- * NWDS 16 BIT WORD COUNT
- * CKSM CHECKSUM
- * MEMIN INPUT BUFFER FWA
- *
- * EXIT IW60 60 BIT WORD COUNT
- *
- * METHOD
- *
- * LFGMOVW PACKS THE MEMORY IMAGE OR OVERLAY IMAGE RECORD INTO
- * THE WORKING STORAGE AREA *PDATA*. CHECKSUM IS STORED FIRST.
- * THE DATA IS TAKEN FROM SOURCE *INBUF* AND SENT TO DESTINATION
- * *PBUF*. THERE ARE TWO POSSIBLE CASES: 1)WHERE ALL THE DATA IS IN
- * ONE WORD, AND 2) WHERE DATA IS SPLIT BETWEEN THE WORDS.
- * LOOP FOR 105 16 BIT WORDS OR FEWER UNTIL PACKING COMPLETE.
- *
- #
- *ENDIF
- ITEM BPOS,NWDS,IW60,CKSM;
- ITEM AA;
- ITEM AN;
- ITEM I U;
- ITEM SINDX,DINDX,CKS,AWDS,SST,DST;
- ITEM SBC,DBC,SWD,SFCU,SWS;
- ARRAY MEMIN [0:0] S(1);
- BEGIN
- ITEM INBUF U;
- END
- FOR I = 0 STEP 1 UNTIL 35 DO
- BEGIN
- PBUF[I] = 0;
- END
- SINDX = AN; # SET START OF SOURCE ARRAY #
- DINDX = AA; # SET START OF DESTN ARRAY #
- IW60 = AA + 1; # NUMBER OF 60 BIT WORDS #
- AWDS = NWDS + 1; # NO. OF 16 BIT WORDS#
- SST = 0; # SOURCE BIT COUNT #
- DST = BPOS; # DESTINATION BIT COUNT#
- SBC = 16; DBC = 16;
- SWD = CKSM;
- GOTO LOOP2; #GO STORE CKSUM FIRST#
- LOOP1:IF SST LQ 44 THEN # SOURCE WORD ALL IN ONE #
- BEGIN
- SWD = B<SST,SBC>INBUF[SINDX];
- SST = SST + 16;
- IF SST EQ 60 THEN
- BEGIN
- SST = 0;
- SINDX = SINDX + 1;
- END
- END
- ELSE # SOURCE WORD SPLIT OVER 2 #
- BEGIN
- SFCU = 60 - SST; # SET BFTS LEFT IN WORD 1 #
- SWS = 44; # HOLD WORD START POSITION#
- # HOLD WORD BFT COUNT #
- B<SWS,SFCU>SWD = B<SST,SFCU>INBUF[SINDX];
- SST = 0; # RESET START COUNT#
- SWS = SWS + SFCU; # ADJUST HOLD WORD START POS#
- SFCU = 16 - SFCU; # ADJUST NO. OF BITS LEFT #
- SINDX = SINDX + 1; # ADJUST SOURCE INDEX #
- B<SWS,SFCU>SWD = B<SST,SFCU>INBUF[SINDX];
- SST = SST + SFCU; # ADJUST START POSITION #
- END
- LOOP2:IF DST LQ 44 THEN # DEST. WORD ALL IN ONE WORD#
- BEGIN
- B<DST,DBC>PBUF[DINDX] = SWD;
- DST = DST + 16; # ADJUST DESIGN. START POS. #
- IF DST EQ 60 THEN
- BEGIN
- DST = 0;
- DINDX = DINDX + 1;
- IW60 = IW60 + 1;
- END
- END
- ELSE
- BEGIN
- SFCU = 60-DST; # SET BITS IN FIRST WORD#
- SWS = 44; # SET START OF HOLD WORD #
- B<DST,SFCU>PBUF[DINDX] = B<SWS,SFCU>SWD;
- DINDX = DINDX + 1; # INC. DESTINATION INDEX #
- IW60 = IW60 + 1; # INC. 60 BIT WORD COUNT #
- SWS = SWS + SFCU; # ADJ. HOLD WORD START POS. #
- DST = 0; # ADJ. DEST. WORD START POS.#
- SFCU = 16 - SFCU; # ADJ. BIT COUNT #
- B<DST,SFCU>PBUF[DINDX] = B<SWS,SFCU>SWD;
- DST = DST + SFCU;
- END
- AWDS = AWDS - 1; #DECREMENT 16 BIT WORD COUNT#
- IF AWDS GR 0 THEN GOTO LOOP1;
- RETURN;
- END
- TERM
cdc/nos2.source/nam5871/lfgmovw.txt ยท Last modified: 2023/08/05 17:22 by Site Administrator