IST1CK
* /---   FILE TYPE = E
* /---   BLOCK      IST1CK     00 000   80/11/11  10.24 
C 
      PROGRAM IST1CK(TAPE5,TAPE10,OUTPUT) 
C       THIS PROGRAM IS USED TO GENERATE CHECKSUMS OF THE 
C       IST1 RESIDENT BINARY. ONE CHECKSUM IS GENERATED FOR 
C       EACH OF THE SIX 1024 BYTE ROMS AND THEN A CHECKSUM
C       OF THE SIX CHECKSUM BYTES IS GENERATED. THESE 
C       SEVEN CHECKSUM VALUES ARE INSERTED INTO THE BINARY
C       OUTPUT OF THE ASSEMBLER AT ADDRESS 0BF9 HEX, AND
C       ARE ALSO PRINTED AS PART OF THE LISTING OUTPUT. 
      IMPLICIT INTEGER(A-Z) 
      DIMENSION MEMORY(8200),IN(2000) 
      REWIND 5 $ REWIND 10
      PRINT 83
      DO 5 I=1,8200 
5     MEMORY(I)=0 
      DO 10 I=1,2000
10    IN(I)=0 
      BUFFER IN (5,0) (IN(1),IN(2000))
      IF(UNIT(5)) 20,20,15
15    STOP 100
20    SIZE=LENGTH(5)
      IF(SIZE.GT.2000) SIZE=2000
      INDEX=1 
      DO 30 I=19,SIZE 
      DO 30 J=1,3 
      DO 30 K=1,2 
      IS = (K-1)*8+(J-1)*20 
      MEMORY(INDEX)=SHIFT(IN(I),-IS) .AND. 377B 
      INDEX=INDEX+1 
      IF(INDEX.GT.8200) GO TO 40
30    CONTINUE
40    NUMBER=6 $ LENGTT=1024 $ FIRSTA=3065
      DO 50 I=1,NUMBER
      RESULT=0 $ ADDR=I*LENGTT $ COUNT=LENGTT 
      IF(I.NE.3) GO TO 45 
      ADDR=ADDR-7 $ COUNT=COUNT-7 
45    RESULT=XOR(RESULT,MEMORY(ADDR)) 
      RESULT=SHIFT(RESULT,1)
      J=SHIFT(RESULT,-8).AND.1
      RESULT=RESULT.AND.376B.OR.J 
      ADDR=ADDR-1 $ COUNT=COUNT-1 
      IF(COUNT.NE.0) GO TO 45 
      MEMORY(FIRSTA+I)=RESULT 
50    PRINT 82,I,RESULT 
      RESULT=0
      DO 60 I=1,6 
      K=FIRSTA+7-I
      RESULT=XOR(RESULT,MEMORY(K))
      RESULT=SHIFT(RESULT,1)
      J=SHIFT(RESULT,-8).AND.1
60    RESULT=RESULT.AND.376B.OR.J 
      MEMORY(FIRSTA+7)=RESULT 
      PRINT 81,RESULT 
      K=MEMORY(3065+1).AND.377B 
      IN(529)=IN(529).AND.74007777777777777777B 
     X        .OR.SHIFT(K,48) 
      K=0 
      II=2
      DO 70 I=1,3 
      DO 70 J=1,2 
      IS=(J-1)*8+(I-1)*20 
      K=K.OR.SHIFT(MEMORY(3065+II),IS)
   70 II=II+1 
      IN(530)=K 
      BUFFER OUT (10,0) (IN(1),IN(SIZE))
      IF(UNIT(10)) 75,75,72 
72    STOP 200
75    STOP
C 
81    FORMAT(/,15X,*CHECKSUM BYTE IS  *,Z2) 
82    FORMAT(/,15X,*CHECKSUM FOR CHIP *,I2,* IS *,Z2) 
83    FORMAT(1H1) 
      END 
