*DECK FSNADW
          IDENT  FSNADW 
 FSNADW   TITLE  FSNADW - FETCH/SET NAD WORD
          ENTRY  FSNADW 
          SST 
          SPACE  4,10 
**        FSNADW - FETCH/SET NAD WORD 
* 
*         FSNADW FETCHES (SETS) A 16-BIT NAD WORD FROM (INTO) THE 
*         CALLER-S 8/12-FORMAT BUFFER.
* 
*         FORMAT OF SYMPL CALL = FSNADW (FWA,ORD,VAL);
* 
*         ENTRY  A1/X1 = FWA OF LIST OF PARAMETER ADDRESSES.
*                        (FWA = FWA OF 8/12-FORMAT BUFFER.) 
*                        (ORD = ORDINAL OF NAD WORD WITHIN BUFFER.) 
*                        (VAL = FETCH OR SET INDICATOR AND VALUE ---
*                               .LT. 0, VAL RESET TO (NAD WORD),
*                               .GE. 0, NAD WORD RESET TO (VAL), B15-0).
* 
*         EXIT   (VAL) = CURRENT CONTENTS OF NAD WORD (BITS 15-0).
* 
*         USES   A - 1, 2, 3, 6.
*                B - 1, 2, 4, 6.
*                X - 0, 1, 2, 3, 4, 5, 6, 7.
  
  
*CALL COMCMAC 
  
  
 FSNADW   SUBR
          SB1    1
          SA2    A1+B1             (ORD)
          SA1    X1                FWA
          SA3    A2+B1             (VAL)
          SA2    X2                ORD
          SX5    5                 (5)
          BX6    X2                ORD
          BX7    X5                (5)
          IX4    X6/X7             ORD/5
          IX5    X5*X4             ORD/5*5
          LX4    1                 OFFSET 
          IX5    X2-X5             BYTE POS (0-4) 
          IX4    X4+X1             FWA + OFFSET 
          LX5    1                 BYTE POS (0-8) 
  
          SA3    X3                VALUE
          SB2    B1                LOOP COUNT 
          PL     X3,FSNADW3        IF STORING NEW VALUE 
  
          MX3    0                 CLEAR VALUE
          MX0    -8                MASK 
  
 FSNADW1  RJ     SETWB             SET WORD/BYTE POS
  
          SX6    B6                (12) 
          SA1    B4+X4             FETCH WORD 
          IX7    X7*X6             BYTE POS * 12
          SB4    X7+B6             BYTE POS * 12 + 12 
          LX6    B4,X1             SHIFT WORD 
          SX5    X5+B1             INCREMENT BYTE POS 
          BX6    -X0*X6            MASK BITS
          LX3    8                 SHIFT ACCUMULATOR
          SB2    B2-B1             LOOP COUNT 
          BX3    X3+X6             MERGE
          PL     B2,FSNADW1        IF NOT DONE
  
          BX6    X3                VALUE
          SA6    A3                RESET VAL
          EQ     FSNADW            RETURN 
  
 FSNADW3  MX0    -8                MASK 
          LX3    -8                SHIFT NEXT 8 BITS
          RJ     SETWB             SET WORD/BYTE POS
  
          SX6    B6                (12) 
          IX7    X6*X7             BYTE POS * 12
          LX6    2                 (48) 
          IX7    X6-X7             48 - BYTE POS * 12 
          SA1    B4+X4             WORD 
          SB4    X7                SHIFT COUNT
          BX6    -X0*X3            NEW 8-BIT VALUE
          MX0    -12               MASK 
          LX6    B4,X6             POSITION NEW VALUE 
          LX0    B4,X0             POSITION MASK
          BX1    X0*X1             CLEAR OLD 12-BIT BYTE
          BX6    X6+X1             MERGE NEW 8-BIT VALUE
          SB2    B2-B1             LOOP COUNT 
          SA6    A1                STORE NEW 8-BIT VALUE
          MI     B2,FSNADW         IF DONE
  
          LX3    16                SHIFT NEXT 8-BIT VALUE 
          SX5    X5+B1             INCREMENT BYTE POS 
          EQ     FSNADW3           CONTINUE 
 SETWB    SPACE  4,10 
**        SETWB - SET WORD ADDR AND BYTE POSITION.
* 
*         ENTRY  X5 = BYTE POSITION WITHIN WORD PAIR. 
*                B1 = 1 
* 
*         EXIT   X7 = BYTE POSITION WITHIN WORD.
*                B4 = 0/1 (FIRST/SECOND WORD).
*                B6 = 12
* 
*         USES   B - 4, 6.
*                X - 7. 
  
  
 SETWB    SUBR   0
          SX7    X5-5 
          SB4    B1 
          PL     X7,SETWB1         IF 2D WORD 
          SB4    B0 
          SX7    X5 
 SETWB1   SB6    12 
          EQ     SETWB
  
          END 
